From xen-devel-bounces@lists.xenproject.org Thu Jul 01 02:08:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 02:08:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148263.273997 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lym7j-0006av-FC; Thu, 01 Jul 2021 02:08:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148263.273997; Thu, 01 Jul 2021 02:08:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lym7j-0006an-9K; Thu, 01 Jul 2021 02:08:15 +0000
Received: by outflank-mailman (input) for mailman id 148263;
 Thu, 01 Jul 2021 02:08:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lym7h-0006ad-7w; Thu, 01 Jul 2021 02:08:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lym7h-0001FR-0G; Thu, 01 Jul 2021 02:08:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lym7g-0004bz-LJ; Thu, 01 Jul 2021 02:08:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lym7g-0001AK-Km; Thu, 01 Jul 2021 02:08:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=bRKVqBYKc/+Z2YRe+ywFd8gEmx9KcEdszpZ4HsN7kHM=; b=U53VaXoK47GbN8xlC5BuHFiKEp
	AdtdkZduO9VRr3nq36Wk0x2zgjje/4zNviydepOObtq0R8CxF3eMofE7VqtZCmwLQXWy01XmYRTxj
	vVZBkkqtSJVua9Axhb5CMOIpYkYWkZxmN4OK4VaRLqKdMCEUR++6u6jHgTqhlDkCwPlk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163195-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163195: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=007b350a58754a93ca9fe50c498cc27780171153
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 02:08:12 +0000

flight 163195 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163195/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332

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

version targeted for testing:
 linux                007b350a58754a93ca9fe50c498cc27780171153
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  334 days
Failing since        152366  2020-08-01 20:49:34 Z  333 days  567 attempts
Testing same since   163195  2021-06-30 09:06:52 Z    0 days    1 attempts

------------------------------------------------------------
6317 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1744923 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 06:23:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 06:23:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148269.274010 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyq6I-00047N-Vp; Thu, 01 Jul 2021 06:23:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148269.274010; Thu, 01 Jul 2021 06:23:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyq6I-00047G-Sr; Thu, 01 Jul 2021 06:23:02 +0000
Received: by outflank-mailman (input) for mailman id 148269;
 Thu, 01 Jul 2021 06:23:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyq6H-000475-6z; Thu, 01 Jul 2021 06:23:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyq6H-0005x8-1A; Thu, 01 Jul 2021 06:23:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyq6G-0001lA-Ox; Thu, 01 Jul 2021 06:23:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lyq6G-0006Ml-Ld; Thu, 01 Jul 2021 06:23:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=R3ez+fkC7xRSKcNK32PGzZXlH0Tpttdvjmqa5DCxGU8=; b=DFDxvzxete0XyAwg1PRkPbQV9Y
	N8MawmBMRn43JFe69Li6ycWEXcKvcIBGKioUTLpV4g46aGaGHYSf/4P15kpLeJ4hAP4Mr2C01iL3T
	HHnDM40WBxYf/cVejLW98wRmTP32cxLF/cjoavSK/vkV3SGQsoR3y2Erj77ozQEOrdfk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163203-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [seabios test] 163203: tolerable FAIL - PUSHED
X-Osstest-Failures:
    seabios:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    seabios:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    seabios:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    seabios:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    seabios:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    seabios:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    seabios:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    seabios=54082c81d96028ba8c76fbe6784085cf1df76b20
X-Osstest-Versions-That:
    seabios=e3c30795823672eec9bde75187e184f23ed98d70
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 06:23:00 +0000

flight 163203 seabios real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163203/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 162576
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 162576
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 162576
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 162576
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 162576
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 seabios              54082c81d96028ba8c76fbe6784085cf1df76b20
baseline version:
 seabios              e3c30795823672eec9bde75187e184f23ed98d70

Last test of basis   162576  2021-06-09 15:09:57 Z   21 days
Testing same since   163203  2021-06-30 21:10:04 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alex Martens <alexmgit@protonmail.com>
  Alex Martens via SeaBIOS <seabios@seabios.org>
  Stefan Berger <stefanb@linux.ibm.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              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/seabios.git
   e3c3079..54082c8  54082c81d96028ba8c76fbe6784085cf1df76b20 -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 06:30:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 06:30:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148276.274025 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyqDw-0005ai-1J; Thu, 01 Jul 2021 06:30:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148276.274025; Thu, 01 Jul 2021 06:30:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyqDv-0005ab-UU; Thu, 01 Jul 2021 06:30:55 +0000
Received: by outflank-mailman (input) for mailman id 148276;
 Thu, 01 Jul 2021 06:30:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyqDu-0005aR-G6; Thu, 01 Jul 2021 06:30:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyqDu-00065C-92; Thu, 01 Jul 2021 06:30:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyqDt-00021H-Uy; Thu, 01 Jul 2021 06:30:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lyqDt-0002c6-US; Thu, 01 Jul 2021 06:30:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=9vY6NbhnLXrYZhykF9Kc8uNkB4M48sRE0+iIOQuslCc=; b=3lLauX2S4tPvXxs+YSa55c5JAZ
	4ICy0iJqZ3NceGly19DCojQ5qbMqf6KuJfqxl4kGjFhFjHI/HgRo0MQQUcq433/MqQo2pfATI3+vI
	qzdp3n5ZRbcK850sB8OKylubi0EWkcZVm4ci667HYcW90POSmVIyrFYMkP3OLTQpCIr0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163198-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163198: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-libvirt-vhd:guest-start.2:fail:heisenbug
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9
X-Osstest-Versions-That:
    linux=4037804c55745738e0950658a5132790e6ac52e4
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 06:30:53 +0000

flight 163198 linux-5.4 real [real]
flight 163209 linux-5.4 real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163198/
http://logs.test-lab.xenproject.org/osstest/logs/163209/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-libvirt-vhd 20 guest-start.2       fail pass in 163209-retest

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

version targeted for testing:
 linux                82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9
baseline version:
 linux                4037804c55745738e0950658a5132790e6ac52e4

Last test of basis   162998  2021-06-23 13:11:21 Z    7 days
Testing same since   163198  2021-06-30 13:43:03 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alex Deucher <alexander.deucher@amd.com>
  Alex Shi <alex.shi@linux.alibaba.com>
  Andrew Morton <akpm@linux-foundation.org>
  Ard Biesheuvel <ardb@kernel.org>
  Arnd Bergmann <arnd@arndb.de>
  Austin Kim <austindh.kim@gmail.com>
  Bjorn Helgaas <bhelgaas@google.com>
  Catalin Marinas <catalin.marinas@arm.com>
  Christian König <christian.koenig@amd.com>
  David Howells <dhowells@redhat.com>
  David S. Miller <davem@davemloft.net>
  Du Cheng <ducheng2@gmail.com>
  Eric Dumazet <edumazet@google.com>
  Eric Richter <erichte@linux.ibm.com>
  Eric Snowberg <eric.snowberg@oracle.com>
  Esben Haabendal <esben@geanix.com>
  Fabien Dessenne <fabien.dessenne@foss.st.com>
  Fuad Tabba <tabba@google.com>
  Gang Deng <gavin.dg@linux.alibaba.com>
  Geet Modi <geet.modi@ti.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guenter Roeck <linux@roeck-us.net>
  Guillaume Ranquet <granquet@baylibre.com>
  Haibo Chen <haibo.chen@nxp.com>
  Hugh Dickins <hughd@google.com>
  Hulk Robot <hulkrobot@huawei.com>
  Jarkko Sakkinen <jarkko@kernel.org>
  Jessica Yu <jeyu@kernel.org>
  Johan Hovold <johan@kernel.org>
  Johannes Berg <johannes.berg@intel.com>
  Johannes Weiner <hannes@cmpxchg.org>
  Jue Wang <juew@google.com>
  Kees Cook <keescook@chromium.org>
  Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
  Linus Torvalds <torvalds@linux-foundation.org>
  Linus Walleij <linus.walleij@linaro.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Marek Szyprowski <m.szyprowski@samsung.com>
  Mark Brown <broonie@kernel.org>
  Mark-PK Tsai <mark-pk.tsai@mediatek.com>
  Masahiro Yamada <masahiroy@kernel.org>
  Miaohe Lin <linmiaohe@huawei.com>
  Michael Ellerman <mpe@ellerman.id.au>
  Michal Hocko <mhocko@suse.com>
  Mikel Rychliski <mikel@mikelr.com>
  Mimi Zohar <zohar@linux.ibm.com>
  Nathan Chancellor <natechancellor@gmail.com>
  Nathan Chancellor <nathan@kernel.org>
  Nayna Jain <nayna@linux.ibm.com>
  Neil Armstrong <narmstrong@baylibre.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Desaulniers <ndesaulniers@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Skripkin <paskripkin@gmail.com>
  Peter Zijlstra (Intel) <peterz@infradead.org>
  Peter Zijlstra <peterz@infradead.org>
  Petr Mladek <pmladek@suse.com>
  Praneeth Bajjuri <praneeth@ti.com>
  Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  Russell King <rmk+kernel@armlinux.org.uk>
  Ryusuke Konishi <konishi.ryusuke@gmail.com>
  Sami Tolvanen <samitolvanen@google.com>
  Sasha Levin <sashal@kernel.org>
  Sedat Dilek <sedat.dilek@gmail.com>
  Steven Rostedt (VMware) <rostedt@goodmis.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Thomas Bogendoerfer <tsbogend@alpha.franken.de>
  Thomas Gleixner <tglx@linutronix.de>
  Ulf Hansson <ulf.hansson@linaro.org>
  Vinod Koul <vkoul@kernel.org>
  Wang Yugui <wangyugui@e16-tech.com>
  Wolfram Sang <wsa@kernel.org>
  Xu Yu <xuyu@linux.alibaba.com>
  Yang Shi <shy828301@gmail.com>
  Yifan Zhang <yifan1.zhang@amd.com>
  Yu Kuai <yukuai3@huawei.com>
  Zheng Yongjun <zhengyongjun3@huawei.com>
  Zou Wei <zou_wei@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   4037804c5574..82ffbc138a1f  82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9 -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 07:41:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 07:41:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148282.274039 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyrJm-0003lm-G4; Thu, 01 Jul 2021 07:41:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148282.274039; Thu, 01 Jul 2021 07:41:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyrJm-0003lf-D0; Thu, 01 Jul 2021 07:41:02 +0000
Received: by outflank-mailman (input) for mailman id 148282;
 Thu, 01 Jul 2021 07:41:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=NJic=LZ=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1lyrJk-0003lZ-T4
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 07:41:00 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bb3e45da-e714-4cc5-b356-85c13bb7c33c;
 Thu, 01 Jul 2021 07:40:59 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0BF8F61490;
 Thu,  1 Jul 2021 07:40:49 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bb3e45da-e714-4cc5-b356-85c13bb7c33c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625125258;
	bh=V3O+3W7jB9kkeE64PRRWE2Y3UpoZf8XatBMI8/4BWL4=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=F47xX0udIB6iAhzJO4OCoYXustVjtbNDusBM6+5rMT4M3Jwb59Ij6VbvwwiLyzT6q
	 lVI9XKD0neOgmCNGZhPOuPRmgvUtcJwOJudRhNq8QU0qAxfZtInwaJU1ov8QiZuLeT
	 DSyGO4DRrv/TOQGPwoVHvv2mYwNhMKcCDaJwQuNmTPf97jcrOnjcpDKJmqwAzkdem5
	 hHvVa4UcTux22+QKhFYM3yrVmN1Vb2rSgrqmfY6qt7l9uLrocYxekS5t84/HB7q0FV
	 t30L31wv/VRZpgr/tSPS/Ve7LY6CjYBHT4Q7WRQAtBhB8uvBHYNybLCcdlqWGz6LE7
	 dIvbEvT0BuNHw==
Date: Thu, 1 Jul 2021 08:40:46 +0100
From: Will Deacon <will@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Claire Chang <tientzu@chromium.org>, Rob Herring <robh+dt@kernel.org>,
	mpe@ellerman.id.au, Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210701074045.GA9436@willie-the-truck>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-7-tientzu@chromium.org>
 <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Wed, Jun 30, 2021 at 08:56:51AM -0700, Nathan Chancellor wrote:
> On Wed, Jun 30, 2021 at 12:43:48PM +0100, Will Deacon wrote:
> > On Wed, Jun 30, 2021 at 05:17:27PM +0800, Claire Chang wrote:
> > > `BUG: unable to handle page fault for address: 00000000003a8290` and
> > > the fact it crashed at `_raw_spin_lock_irqsave` look like the memory
> > > (maybe dev->dma_io_tlb_mem) was corrupted?
> > > The dev->dma_io_tlb_mem should be set here
> > > (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/pci/probe.c#n2528)
> > > through device_initialize.
> > 
> > I'm less sure about this. 'dma_io_tlb_mem' should be pointing at
> > 'io_tlb_default_mem', which is a page-aligned allocation from memblock.
> > The spinlock is at offset 0x24 in that structure, and looking at the
> > register dump from the crash:
> > 
> > Jun 29 18:28:42 hp-4300G kernel: RSP: 0018:ffffadb4013db9e8 EFLAGS: 00010006
> > Jun 29 18:28:42 hp-4300G kernel: RAX: 00000000003a8290 RBX: 0000000000000000 RCX: ffff8900572ad580
> > Jun 29 18:28:42 hp-4300G kernel: RDX: ffff89005653f024 RSI: 00000000000c0000 RDI: 0000000000001d17
> > Jun 29 18:28:42 hp-4300G kernel: RBP: 000000000a20d000 R08: 00000000000c0000 R09: 0000000000000000
> > Jun 29 18:28:42 hp-4300G kernel: R10: 000000000a20d000 R11: ffff89005653f000 R12: 0000000000000212
> > Jun 29 18:28:42 hp-4300G kernel: R13: 0000000000001000 R14: 0000000000000002 R15: 0000000000200000
> > Jun 29 18:28:42 hp-4300G kernel: FS:  00007f1f8898ea40(0000) GS:ffff890057280000(0000) knlGS:0000000000000000
> > Jun 29 18:28:42 hp-4300G kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > Jun 29 18:28:42 hp-4300G kernel: CR2: 00000000003a8290 CR3: 00000001020d0000 CR4: 0000000000350ee0
> > Jun 29 18:28:42 hp-4300G kernel: Call Trace:
> > Jun 29 18:28:42 hp-4300G kernel:  _raw_spin_lock_irqsave+0x39/0x50
> > Jun 29 18:28:42 hp-4300G kernel:  swiotlb_tbl_map_single+0x12b/0x4c0
> > 
> > Then that correlates with R11 holding the 'dma_io_tlb_mem' pointer and
> > RDX pointing at the spinlock. Yet RAX is holding junk :/
> > 
> > I agree that enabling KASAN would be a good idea, but I also think we
> > probably need to get some more information out of swiotlb_tbl_map_single()
> > to see see what exactly is going wrong in there.
> 
> I can certainly enable KASAN and if there is any debug print I can add
> or dump anything, let me know!

I bit the bullet and took v5.13 with swiotlb/for-linus-5.14 merged in, built
x86 defconfig and ran it on my laptop. However, it seems to work fine!

Please can you share your .config?

Will


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 07:52:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 07:52:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148287.274050 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyrV3-0005G6-Js; Thu, 01 Jul 2021 07:52:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148287.274050; Thu, 01 Jul 2021 07:52:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyrV3-0005Fz-Fs; Thu, 01 Jul 2021 07:52:41 +0000
Received: by outflank-mailman (input) for mailman id 148287;
 Thu, 01 Jul 2021 07:52:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=yAUn=LZ=kernel.org=nathan@srs-us1.protection.inumbo.net>)
 id 1lyrV1-0005Ft-Sp
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 07:52:40 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 466e0b03-d9b0-4e8e-9057-56e1b2e8b14f;
 Thu, 01 Jul 2021 07:52:26 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 7BB4E61351;
 Thu,  1 Jul 2021 07:52:22 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 466e0b03-d9b0-4e8e-9057-56e1b2e8b14f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625125945;
	bh=QndjmPenV8a1ARJ/CYAif4b2Us0jdUg0dSO79bVovDA=;
	h=Subject:To:Cc:References:From:Date:In-Reply-To:From;
	b=nnxCLJsKH74DPJHDm+HcQZih1fLSgaJVvC7j3cdPh/OF7r1B9tsxdPKQ5FxEtfhBM
	 iZ0Yzf1KSEHevNGHP3EiUqmC6+XTZIETbzjx/GEc8bN9IUr26xhUElmwVhRm582nkG
	 vH64jaARDtajCmxzKl95Y1zyhZpPYIWeQSENETStW3IMfcjGnC5D+sCj2uFwHv9zQ6
	 ovDoD3MYh/yUU9H2+Pm/AgE67sN4y2n7rYx+x6ill/khw6yUT/RJVDwLaoycXGkGr5
	 LPbJ41TFUMqqkG0VUBkpmpWlQQqwV0/4u41g3VMpXGT0JWIwiqnpogEzqOunG+jmb6
	 zZ+RAdMyuKqGA==
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
To: Will Deacon <will@kernel.org>
Cc: Claire Chang <tientzu@chromium.org>, Rob Herring <robh+dt@kernel.org>,
 mpe@ellerman.id.au, Joerg Roedel <joro@8bytes.org>,
 Frank Rowand <frowand.list@gmail.com>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, boris.ostrovsky@oracle.com,
 jgross@suse.com, Christoph Hellwig <hch@lst.de>,
 Marek Szyprowski <m.szyprowski@samsung.com>, benh@kernel.crashing.org,
 paulus@samba.org,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Robin Murphy <robin.murphy@arm.com>, grant.likely@arm.com,
 xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>, mingo@kernel.org,
 bauerman@linux.ibm.com, peterz@infradead.org,
 Greg KH <gregkh@linuxfoundation.org>, Saravana Kannan
 <saravanak@google.com>, "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 heikki.krogerus@linux.intel.com,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
 Randy Dunlap <rdunlap@infradead.org>, Dan Williams
 <dan.j.williams@intel.com>, Bartosz Golaszewski <bgolaszewski@baylibre.com>,
 linux-devicetree <devicetree@vger.kernel.org>,
 lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
 xen-devel@lists.xenproject.org, Nicolas Boichat <drinkcat@chromium.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, Tomasz Figa <tfiga@chromium.org>,
 bskeggs@redhat.com, Bjorn Helgaas <bhelgaas@google.com>,
 chris@chris-wilson.co.uk, Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
 dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
 jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
 joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
 maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
 rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
 Tom Lendacky <thomas.lendacky@amd.com>, Qian Cai <quic_qiancai@quicinc.com>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-7-tientzu@chromium.org>
 <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
From: Nathan Chancellor <nathan@kernel.org>
Message-ID: <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
Date: Thu, 1 Jul 2021 00:52:20 -0700
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210701074045.GA9436@willie-the-truck>
Content-Type: multipart/mixed;
 boundary="------------6AC692267CC088E7165122E4"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------6AC692267CC088E7165122E4
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

On 7/1/2021 12:40 AM, Will Deacon wrote:
> On Wed, Jun 30, 2021 at 08:56:51AM -0700, Nathan Chancellor wrote:
>> On Wed, Jun 30, 2021 at 12:43:48PM +0100, Will Deacon wrote:
>>> On Wed, Jun 30, 2021 at 05:17:27PM +0800, Claire Chang wrote:
>>>> `BUG: unable to handle page fault for address: 00000000003a8290` and
>>>> the fact it crashed at `_raw_spin_lock_irqsave` look like the memory
>>>> (maybe dev->dma_io_tlb_mem) was corrupted?
>>>> The dev->dma_io_tlb_mem should be set here
>>>> (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/pci/probe.c#n2528)
>>>> through device_initialize.
>>>
>>> I'm less sure about this. 'dma_io_tlb_mem' should be pointing at
>>> 'io_tlb_default_mem', which is a page-aligned allocation from memblock.
>>> The spinlock is at offset 0x24 in that structure, and looking at the
>>> register dump from the crash:
>>>
>>> Jun 29 18:28:42 hp-4300G kernel: RSP: 0018:ffffadb4013db9e8 EFLAGS: 00010006
>>> Jun 29 18:28:42 hp-4300G kernel: RAX: 00000000003a8290 RBX: 0000000000000000 RCX: ffff8900572ad580
>>> Jun 29 18:28:42 hp-4300G kernel: RDX: ffff89005653f024 RSI: 00000000000c0000 RDI: 0000000000001d17
>>> Jun 29 18:28:42 hp-4300G kernel: RBP: 000000000a20d000 R08: 00000000000c0000 R09: 0000000000000000
>>> Jun 29 18:28:42 hp-4300G kernel: R10: 000000000a20d000 R11: ffff89005653f000 R12: 0000000000000212
>>> Jun 29 18:28:42 hp-4300G kernel: R13: 0000000000001000 R14: 0000000000000002 R15: 0000000000200000
>>> Jun 29 18:28:42 hp-4300G kernel: FS:  00007f1f8898ea40(0000) GS:ffff890057280000(0000) knlGS:0000000000000000
>>> Jun 29 18:28:42 hp-4300G kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> Jun 29 18:28:42 hp-4300G kernel: CR2: 00000000003a8290 CR3: 00000001020d0000 CR4: 0000000000350ee0
>>> Jun 29 18:28:42 hp-4300G kernel: Call Trace:
>>> Jun 29 18:28:42 hp-4300G kernel:  _raw_spin_lock_irqsave+0x39/0x50
>>> Jun 29 18:28:42 hp-4300G kernel:  swiotlb_tbl_map_single+0x12b/0x4c0
>>>
>>> Then that correlates with R11 holding the 'dma_io_tlb_mem' pointer and
>>> RDX pointing at the spinlock. Yet RAX is holding junk :/
>>>
>>> I agree that enabling KASAN would be a good idea, but I also think we
>>> probably need to get some more information out of swiotlb_tbl_map_single()
>>> to see see what exactly is going wrong in there.
>>
>> I can certainly enable KASAN and if there is any debug print I can add
>> or dump anything, let me know!
> 
> I bit the bullet and took v5.13 with swiotlb/for-linus-5.14 merged in, built
> x86 defconfig and ran it on my laptop. However, it seems to work fine!
> 
> Please can you share your .config?

Sure thing, it is attached. It is just Arch Linux's config run through 
olddefconfig. The original is below in case you need to diff it.

https://raw.githubusercontent.com/archlinux/svntogit-packages/9045405dc835527164f3034b3ceb9a67c7a53cd4/trunk/config

If there is anything more that I can provide, please let me know.

Cheers,
Nathan

--------------6AC692267CC088E7165122E4
Content-Type: text/plain; charset=UTF-8;
 name=".config"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=".config"

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4
L3g4NiA1LjEyLjAtcmMzIEtlcm5lbCBDb25maWd1cmF0aW9uCiMKQ09ORklHX0NDX1ZFUlNJ
T05fVEVYVD0iZ2NjIChHQ0MpIDExLjEuMCIKQ09ORklHX0NDX0lTX0dDQz15CkNPTkZJR19H
Q0NfVkVSU0lPTj0xMTAxMDAKQ09ORklHX0NMQU5HX1ZFUlNJT049MApDT05GSUdfTERfSVNf
QkZEPXkKQ09ORklHX0xEX1ZFUlNJT049MjM2MDEKQ09ORklHX0xMRF9WRVJTSU9OPTAKQ09O
RklHX0NDX0NBTl9MSU5LPXkKQ09ORklHX0NDX0NBTl9MSU5LX1NUQVRJQz15CkNPTkZJR19D
Q19IQVNfQVNNX0dPVE89eQpDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX09VVFBVVD15CkNPTkZJ
R19DQ19IQVNfQVNNX0lOTElORT15CkNPTkZJR19JUlFfV09SSz15CkNPTkZJR19CVUlMRFRJ
TUVfVEFCTEVfU09SVD15CkNPTkZJR19USFJFQURfSU5GT19JTl9UQVNLPXkKCiMKIyBHZW5l
cmFsIHNldHVwCiMKQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgojIENPTkZJR19DT01Q
SUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfTE9DQUxWRVJTSU9OPSIiCkNPTkZJR19MT0NB
TFZFUlNJT05fQVVUTz15CkNPTkZJR19CVUlMRF9TQUxUPSIiCkNPTkZJR19IQVZFX0tFUk5F
TF9HWklQPXkKQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKQ09ORklHX0hBVkVfS0VSTkVM
X0xaTUE9eQpDT05GSUdfSEFWRV9LRVJORUxfWFo9eQpDT05GSUdfSEFWRV9LRVJORUxfTFpP
PXkKQ09ORklHX0hBVkVfS0VSTkVMX0xaND15CkNPTkZJR19IQVZFX0tFUk5FTF9aU1REPXkK
IyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAojIENPTkZJR19LRVJORUxfQlpJUDIg
aXMgbm90IHNldAojIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0tF
Uk5FTF9YWiBpcyBub3Qgc2V0CiMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAojIENP
TkZJR19LRVJORUxfTFo0IGlzIG5vdCBzZXQKQ09ORklHX0tFUk5FTF9aU1REPXkKQ09ORklH
X0RFRkFVTFRfSU5JVD0iIgpDT05GSUdfREVGQVVMVF9IT1NUTkFNRT0iYXJjaGxpbnV4IgpD
T05GSUdfU1dBUD15CkNPTkZJR19TWVNWSVBDPXkKQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkK
Q09ORklHX1BPU0lYX01RVUVVRT15CkNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKQ09O
RklHX1dBVENIX1FVRVVFPXkKQ09ORklHX0NST1NTX01FTU9SWV9BVFRBQ0g9eQojIENPTkZJ
R19VU0VMSUIgaXMgbm90IHNldApDT05GSUdfQVVESVQ9eQpDT05GSUdfSEFWRV9BUkNIX0FV
RElUU1lTQ0FMTD15CkNPTkZJR19BVURJVFNZU0NBTEw9eQoKIwojIElSUSBzdWJzeXN0ZW0K
IwpDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQpDT05GSUdfR0VORVJJQ19JUlFfU0hPVz15
CkNPTkZJR19HRU5FUklDX0lSUV9FRkZFQ1RJVkVfQUZGX01BU0s9eQpDT05GSUdfR0VORVJJ
Q19QRU5ESU5HX0lSUT15CkNPTkZJR19HRU5FUklDX0lSUV9NSUdSQVRJT049eQpDT05GSUdf
R0VORVJJQ19JUlFfSU5KRUNUSU9OPXkKQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CkNP
TkZJR19HRU5FUklDX0lSUV9DSElQPXkKQ09ORklHX0lSUV9ET01BSU49eQpDT05GSUdfSVJR
X1NJTT15CkNPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWT15CkNPTkZJR19HRU5FUklDX01T
SV9JUlE9eQpDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTj15CkNPTkZJR19JUlFfTVNJ
X0lPTU1VPXkKQ09ORklHX0dFTkVSSUNfSVJRX01BVFJJWF9BTExPQ0FUT1I9eQpDT05GSUdf
R0VORVJJQ19JUlFfUkVTRVJWQVRJT05fTU9ERT15CkNPTkZJR19JUlFfRk9SQ0VEX1RIUkVB
RElORz15CkNPTkZJR19TUEFSU0VfSVJRPXkKIyBDT05GSUdfR0VORVJJQ19JUlFfREVCVUdG
UyBpcyBub3Qgc2V0CiMgZW5kIG9mIElSUSBzdWJzeXN0ZW0KCkNPTkZJR19DTE9DS1NPVVJD
RV9XQVRDSERPRz15CkNPTkZJR19BUkNIX0NMT0NLU09VUkNFX0lOSVQ9eQpDT05GSUdfQ0xP
Q0tTT1VSQ0VfVkFMSURBVEVfTEFTVF9DWUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZ
U0NBTEw9eQpDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NM
T0NLRVZFTlRTX0JST0FEQ0FTVD15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9B
REpVU1Q9eQpDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CkNPTkZJR19IQVZFX1BPU0lY
X0NQVV9USU1FUlNfVEFTS19XT1JLPXkKQ09ORklHX1BPU0lYX0NQVV9USU1FUlNfVEFTS19X
T1JLPXkKCiMKIyBUaW1lcnMgc3Vic3lzdGVtCiMKQ09ORklHX1RJQ0tfT05FU0hPVD15CkNP
TkZJR19OT19IWl9DT01NT049eQojIENPTkZJR19IWl9QRVJJT0RJQyBpcyBub3Qgc2V0CkNP
TkZJR19OT19IWl9JRExFPXkKIyBDT05GSUdfTk9fSFpfRlVMTCBpcyBub3Qgc2V0CkNPTkZJ
R19OT19IWj15CkNPTkZJR19ISUdIX1JFU19USU1FUlM9eQojIGVuZCBvZiBUaW1lcnMgc3Vi
c3lzdGVtCgojIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAojIENPTkZJR19QUkVF
TVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CkNPTkZJR19QUkVFTVBUPXkKQ09ORklHX1BSRUVN
UFRfQ09VTlQ9eQpDT05GSUdfUFJFRU1QVElPTj15CkNPTkZJR19QUkVFTVBUX0RZTkFNSUM9
eQoKIwojIENQVS9UYXNrIHRpbWUgYW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVElD
S19DUFVfQUNDT1VOVElORz15CiMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlz
IG5vdCBzZXQKQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkc9eQpDT05GSUdfSEFWRV9TQ0hF
RF9BVkdfSVJRPXkKQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQpDT05GSUdfQlNEX1BST0NF
U1NfQUNDVF9WMz15CkNPTkZJR19UQVNLU1RBVFM9eQpDT05GSUdfVEFTS19ERUxBWV9BQ0NU
PXkKQ09ORklHX1RBU0tfWEFDQ1Q9eQpDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKQ09O
RklHX1BTST15CiMgQ09ORklHX1BTSV9ERUZBVUxUX0RJU0FCTEVEIGlzIG5vdCBzZXQKIyBl
bmQgb2YgQ1BVL1Rhc2sgdGltZSBhbmQgc3RhdHMgYWNjb3VudGluZwoKQ09ORklHX0NQVV9J
U09MQVRJT049eQoKIwojIFJDVSBTdWJzeXN0ZW0KIwpDT05GSUdfVFJFRV9SQ1U9eQpDT05G
SUdfUFJFRU1QVF9SQ1U9eQpDT05GSUdfUkNVX0VYUEVSVD15CkNPTkZJR19TUkNVPXkKQ09O
RklHX1RSRUVfU1JDVT15CkNPTkZJR19UQVNLU19SQ1VfR0VORVJJQz15CkNPTkZJR19UQVNL
U19SQ1U9eQpDT05GSUdfVEFTS1NfUlVERV9SQ1U9eQpDT05GSUdfVEFTS1NfVFJBQ0VfUkNV
PXkKQ09ORklHX1JDVV9TVEFMTF9DT01NT049eQpDT05GSUdfUkNVX05FRURfU0VHQ0JMSVNU
PXkKQ09ORklHX1JDVV9GQU5PVVQ9NjQKQ09ORklHX1JDVV9GQU5PVVRfTEVBRj0xNgpDT05G
SUdfUkNVX0ZBU1RfTk9fSFo9eQpDT05GSUdfUkNVX0JPT1NUPXkKQ09ORklHX1JDVV9CT09T
VF9ERUxBWT01MDAKIyBDT05GSUdfUkNVX05PQ0JfQ1BVIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEFTS1NfVFJBQ0VfUkNVX1JFQURfTUIgaXMgbm90IHNldAojIGVuZCBvZiBSQ1UgU3Vic3lz
dGVtCgpDT05GSUdfQlVJTERfQklOMkM9eQpDT05GSUdfSUtDT05GSUc9eQpDT05GSUdfSUtD
T05GSUdfUFJPQz15CkNPTkZJR19JS0hFQURFUlM9bQpDT05GSUdfTE9HX0JVRl9TSElGVD0x
NwpDT05GSUdfTE9HX0NQVV9NQVhfQlVGX1NISUZUPTEyCkNPTkZJR19QUklOVEtfU0FGRV9M
T0dfQlVGX1NISUZUPTEzCkNPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLPXkKCiMK
IyBTY2hlZHVsZXIgZmVhdHVyZXMKIwpDT05GSUdfVUNMQU1QX1RBU0s9eQpDT05GSUdfVUNM
QU1QX0JVQ0tFVFNfQ09VTlQ9NQojIGVuZCBvZiBTY2hlZHVsZXIgZmVhdHVyZXMKCkNPTkZJ
R19BUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HPXkKQ09ORklHX0FSQ0hfV0FOVF9CQVRD
SEVEX1VOTUFQX1RMQl9GTFVTSD15CkNPTkZJR19DQ19IQVNfSU5UMTI4PXkKQ09ORklHX0FS
Q0hfU1VQUE9SVFNfSU5UMTI4PXkKQ09ORklHX05VTUFfQkFMQU5DSU5HPXkKQ09ORklHX05V
TUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRD15CkNPTkZJR19DR1JPVVBTPXkKQ09ORklH
X1BBR0VfQ09VTlRFUj15CkNPTkZJR19NRU1DRz15CkNPTkZJR19NRU1DR19TV0FQPXkKQ09O
RklHX01FTUNHX0tNRU09eQpDT05GSUdfQkxLX0NHUk9VUD15CkNPTkZJR19DR1JPVVBfV1JJ
VEVCQUNLPXkKQ09ORklHX0NHUk9VUF9TQ0hFRD15CkNPTkZJR19GQUlSX0dST1VQX1NDSEVE
PXkKQ09ORklHX0NGU19CQU5EV0lEVEg9eQojIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBu
b3Qgc2V0CkNPTkZJR19VQ0xBTVBfVEFTS19HUk9VUD15CkNPTkZJR19DR1JPVVBfUElEUz15
CkNPTkZJR19DR1JPVVBfUkRNQT15CkNPTkZJR19DR1JPVVBfRlJFRVpFUj15CkNPTkZJR19D
R1JPVVBfSFVHRVRMQj15CkNPTkZJR19DUFVTRVRTPXkKQ09ORklHX1BST0NfUElEX0NQVVNF
VD15CkNPTkZJR19DR1JPVVBfREVWSUNFPXkKQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKQ09O
RklHX0NHUk9VUF9QRVJGPXkKQ09ORklHX0NHUk9VUF9CUEY9eQojIENPTkZJR19DR1JPVVBf
REVCVUcgaXMgbm90IHNldApDT05GSUdfU09DS19DR1JPVVBfREFUQT15CkNPTkZJR19OQU1F
U1BBQ0VTPXkKQ09ORklHX1VUU19OUz15CkNPTkZJR19USU1FX05TPXkKQ09ORklHX0lQQ19O
Uz15CkNPTkZJR19VU0VSX05TPXkKQ09ORklHX1BJRF9OUz15CkNPTkZJR19ORVRfTlM9eQpD
T05GSUdfQ0hFQ0tQT0lOVF9SRVNUT1JFPXkKQ09ORklHX1NDSEVEX0FVVE9HUk9VUD15CiMg
Q09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldApDT05GSUdfUkVMQVk9eQpDT05G
SUdfQkxLX0RFVl9JTklUUkQ9eQpDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgpDT05GSUdf
UkRfR1pJUD15CkNPTkZJR19SRF9CWklQMj15CkNPTkZJR19SRF9MWk1BPXkKQ09ORklHX1JE
X1haPXkKQ09ORklHX1JEX0xaTz15CkNPTkZJR19SRF9MWjQ9eQpDT05GSUdfUkRfWlNURD15
CkNPTkZJR19CT09UX0NPTkZJRz15CkNPTkZJR19DQ19PUFRJTUlaRV9GT1JfUEVSRk9STUFO
Q0U9eQojIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkNPTkZJR19M
RF9PUlBIQU5fV0FSTj15CkNPTkZJR19TWVNDVEw9eQpDT05GSUdfSEFWRV9VSUQxNj15CkNP
TkZJR19TWVNDVExfRVhDRVBUSU9OX1RSQUNFPXkKQ09ORklHX0hBVkVfUENTUEtSX1BMQVRG
T1JNPXkKQ09ORklHX0JQRj15CiMgQ09ORklHX0VYUEVSVCBpcyBub3Qgc2V0CkNPTkZJR19V
SUQxNj15CkNPTkZJR19NVUxUSVVTRVI9eQpDT05GSUdfU0dFVE1BU0tfU1lTQ0FMTD15CkNP
TkZJR19TWVNGU19TWVNDQUxMPXkKQ09ORklHX0ZIQU5ETEU9eQpDT05GSUdfUE9TSVhfVElN
RVJTPXkKQ09ORklHX1BSSU5USz15CkNPTkZJR19QUklOVEtfTk1JPXkKQ09ORklHX0JVRz15
CkNPTkZJR19FTEZfQ09SRT15CkNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQpDT05GSUdfQkFT
RV9GVUxMPXkKQ09ORklHX0ZVVEVYPXkKQ09ORklHX0ZVVEVYX1BJPXkKQ09ORklHX0VQT0xM
PXkKQ09ORklHX1NJR05BTEZEPXkKQ09ORklHX1RJTUVSRkQ9eQpDT05GSUdfRVZFTlRGRD15
CkNPTkZJR19TSE1FTT15CkNPTkZJR19BSU89eQpDT05GSUdfSU9fVVJJTkc9eQpDT05GSUdf
QURWSVNFX1NZU0NBTExTPXkKQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUD15CkNP
TkZJR19NRU1CQVJSSUVSPXkKQ09ORklHX0tBTExTWU1TPXkKQ09ORklHX0tBTExTWU1TX0FM
TD15CkNPTkZJR19LQUxMU1lNU19BQlNPTFVURV9QRVJDUFU9eQpDT05GSUdfS0FMTFNZTVNf
QkFTRV9SRUxBVElWRT15CkNPTkZJR19CUEZfTFNNPXkKQ09ORklHX0JQRl9TWVNDQUxMPXkK
Q09ORklHX0FSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQ9eQpDT05GSUdfQlBGX0pJVF9BTFdB
WVNfT049eQpDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OPXkKQ09ORklHX1VTRVJNT0RFX0RS
SVZFUj15CkNPTkZJR19CUEZfUFJFTE9BRD15CkNPTkZJR19CUEZfUFJFTE9BRF9VTUQ9bQpD
T05GSUdfVVNFUkZBVUxURkQ9eQpDT05GSUdfQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NP
UkU9eQpDT05GSUdfS0NNUD15CkNPTkZJR19SU0VRPXkKIyBDT05GSUdfRU1CRURERUQgaXMg
bm90IHNldApDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CgojCiMgS2VybmVsIFBlcmZvcm1h
bmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05GSUdfUEVSRl9FVkVOVFM9eQojIENPTkZJ
R19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIyBlbmQgb2YgS2VybmVsIFBl
cmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKCkNPTkZJR19WTV9FVkVOVF9DT1VOVEVS
Uz15CkNPTkZJR19TTFVCX0RFQlVHPXkKIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NMQUIgaXMgbm90IHNldApDT05GSUdfU0xVQj15CkNPTkZJR19TTEFCX01F
UkdFX0RFRkFVTFQ9eQpDT05GSUdfU0xBQl9GUkVFTElTVF9SQU5ET009eQpDT05GSUdfU0xB
Ql9GUkVFTElTVF9IQVJERU5FRD15CkNPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SPXkK
Q09ORklHX1NMVUJfQ1BVX1BBUlRJQUw9eQpDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FU
SU9OPXkKQ09ORklHX1BST0ZJTElORz15CkNPTkZJR19UUkFDRVBPSU5UUz15CiMgZW5kIG9m
IEdlbmVyYWwgc2V0dXAKCkNPTkZJR182NEJJVD15CkNPTkZJR19YODZfNjQ9eQpDT05GSUdf
WDg2PXkKQ09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpDT05GSUdfT1VUUFVUX0ZPUk1B
VD0iZWxmNjQteDg2LTY0IgpDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQ09ORklHX1NUQUNL
VFJBQ0VfU1VQUE9SVD15CkNPTkZJR19NTVU9eQpDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRT
X01JTj0yOApDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRTX01BWD0zMgpDT05GSUdfQVJDSF9N
TUFQX1JORF9DT01QQVRfQklUU19NSU49OApDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRf
QklUU19NQVg9MTYKQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0JV
Rz15CkNPTkZJR19HRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSUz15CkNPTkZJR19BUkNI
X01BWV9IQVZFX1BDX0ZEQz15CkNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CkNP
TkZJR19BUkNIX0hBU19DUFVfUkVMQVg9eQpDT05GSUdfQVJDSF9IQVNfQ0FDSEVfTElORV9T
SVpFPXkKQ09ORklHX0FSQ0hfSEFTX0ZJTFRFUl9QR1BST1Q9eQpDT05GSUdfSEFWRV9TRVRV
UF9QRVJfQ1BVX0FSRUE9eQpDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5L
PXkKQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LPXkKQ09ORklHX0FSQ0hf
SElCRVJOQVRJT05fUE9TU0lCTEU9eQpDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkK
Q09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEI9eQpDT05GSUdfWk9ORV9ETUEzMj15
CkNPTkZJR19BVURJVF9BUkNIPXkKQ09ORklHX0hBVkVfSU5URUxfVFhUPXkKQ09ORklHX1g4
Nl82NF9TTVA9eQpDT05GSUdfQVJDSF9TVVBQT1JUU19VUFJPQkVTPXkKQ09ORklHX0ZJWF9F
QVJMWUNPTl9NRU09eQpDT05GSUdfRFlOQU1JQ19QSFlTSUNBTF9NQVNLPXkKQ09ORklHX1BH
VEFCTEVfTEVWRUxTPTUKQ09ORklHX0NDX0hBU19TQU5FX1NUQUNLUFJPVEVDVE9SPXkKCiMK
IyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKIwpDT05GSUdfWk9ORV9ETUE9eQpDT05G
SUdfU01QPXkKQ09ORklHX1g4Nl9GRUFUVVJFX05BTUVTPXkKQ09ORklHX1g4Nl9YMkFQSUM9
eQpDT05GSUdfWDg2X01QUEFSU0U9eQojIENPTkZJR19HT0xERklTSCBpcyBub3Qgc2V0CkNP
TkZJR19SRVRQT0xJTkU9eQpDT05GSUdfWDg2X0NQVV9SRVNDVFJMPXkKIyBDT05GSUdfWDg2
X0VYVEVOREVEX1BMQVRGT1JNIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9JTlRFTF9MUFNTPXkK
Q09ORklHX1g4Nl9BTURfUExBVEZPUk1fREVWSUNFPXkKQ09ORklHX0lPU0ZfTUJJPXkKIyBD
T05GSUdfSU9TRl9NQklfREVCVUcgaXMgbm90IHNldApDT05GSUdfWDg2X1NVUFBPUlRTX01F
TU9SWV9GQUlMVVJFPXkKQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CkNPTkZJ
R19IWVBFUlZJU09SX0dVRVNUPXkKQ09ORklHX1BBUkFWSVJUPXkKQ09ORklHX1BBUkFWSVJU
X1hYTD15CiMgQ09ORklHX1BBUkFWSVJUX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1BBUkFW
SVJUX1NQSU5MT0NLUz15CkNPTkZJR19YODZfSFZfQ0FMTEJBQ0tfVkVDVE9SPXkKQ09ORklH
X1hFTj15CkNPTkZJR19YRU5fUFY9eQpDT05GSUdfWEVOXzUxMkdCPXkKQ09ORklHX1hFTl9Q
Vl9TTVA9eQpDT05GSUdfWEVOX0RPTTA9eQpDT05GSUdfWEVOX1BWSFZNPXkKQ09ORklHX1hF
Tl9QVkhWTV9TTVA9eQpDT05GSUdfWEVOX1BWSFZNX0dVRVNUPXkKQ09ORklHX1hFTl9TQVZF
X1JFU1RPUkU9eQojIENPTkZJR19YRU5fREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfWEVO
X1BWSD15CkNPTkZJR19LVk1fR1VFU1Q9eQpDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xM
PXkKQ09ORklHX1BWSD15CkNPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkc9eQpDT05G
SUdfUEFSQVZJUlRfQ0xPQ0s9eQpDT05GSUdfSkFJTEhPVVNFX0dVRVNUPXkKQ09ORklHX0FD
Uk5fR1VFU1Q9eQojIENPTkZJR19NSzggaXMgbm90IHNldAojIENPTkZJR19NUFNDIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUNPUkUyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFUT00gaXMgbm90
IHNldApDT05GSUdfR0VORVJJQ19DUFU9eQpDT05GSUdfWDg2X0lOVEVSTk9ERV9DQUNIRV9T
SElGVD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpDT05GSUdfWDg2X1RTQz15CkNP
TkZJR19YODZfQ01QWENIRzY0PXkKQ09ORklHX1g4Nl9DTU9WPXkKQ09ORklHX1g4Nl9NSU5J
TVVNX0NQVV9GQU1JTFk9NjQKQ09ORklHX1g4Nl9ERUJVR0NUTE1TUj15CkNPTkZJR19JQTMy
X0ZFQVRfQ1RMPXkKQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FUz15CkNPTkZJR19DUFVf
U1VQX0lOVEVMPXkKQ09ORklHX0NQVV9TVVBfQU1EPXkKQ09ORklHX0NQVV9TVVBfSFlHT049
eQpDT05GSUdfQ1BVX1NVUF9DRU5UQVVSPXkKQ09ORklHX0NQVV9TVVBfWkhBT1hJTj15CkNP
TkZJR19IUEVUX1RJTUVSPXkKQ09ORklHX0hQRVRfRU1VTEFURV9SVEM9eQpDT05GSUdfRE1J
PXkKIyBDT05GSUdfR0FSVF9JT01NVSBpcyBub3Qgc2V0CiMgQ09ORklHX01BWFNNUCBpcyBu
b3Qgc2V0CkNPTkZJR19OUl9DUFVTX1JBTkdFX0JFR0lOPTIKQ09ORklHX05SX0NQVVNfUkFO
R0VfRU5EPTUxMgpDT05GSUdfTlJfQ1BVU19ERUZBVUxUPTY0CkNPTkZJR19OUl9DUFVTPTMy
MApDT05GSUdfU0NIRURfU01UPXkKQ09ORklHX1NDSEVEX01DPXkKQ09ORklHX1NDSEVEX01D
X1BSSU89eQpDT05GSUdfWDg2X0xPQ0FMX0FQSUM9eQpDT05GSUdfWDg2X0lPX0FQSUM9eQpD
T05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVM9eQpDT05GSUdfWDg2X01D
RT15CiMgQ09ORklHX1g4Nl9NQ0VMT0dfTEVHQUNZIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9N
Q0VfSU5URUw9eQpDT05GSUdfWDg2X01DRV9BTUQ9eQpDT05GSUdfWDg2X01DRV9USFJFU0hP
TEQ9eQpDT05GSUdfWDg2X01DRV9JTkpFQ1Q9bQoKIwojIFBlcmZvcm1hbmNlIG1vbml0b3Jp
bmcKIwpDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFPW0KQ09ORklHX1BFUkZfRVZF
TlRTX0lOVEVMX1JBUEw9bQpDT05GSUdfUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFPW0KQ09O
RklHX1BFUkZfRVZFTlRTX0FNRF9QT1dFUj1tCiMgZW5kIG9mIFBlcmZvcm1hbmNlIG1vbml0
b3JpbmcKCkNPTkZJR19YODZfMTZCSVQ9eQpDT05GSUdfWDg2X0VTUEZJWDY0PXkKQ09ORklH
X1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT049eQpDT05GSUdfWDg2X0lPUExfSU9QRVJNPXkKQ09O
RklHX0k4Sz1tCkNPTkZJR19NSUNST0NPREU9eQpDT05GSUdfTUlDUk9DT0RFX0lOVEVMPXkK
Q09ORklHX01JQ1JPQ09ERV9BTUQ9eQojIENPTkZJR19NSUNST0NPREVfT0xEX0lOVEVSRkFD
RSBpcyBub3Qgc2V0CkNPTkZJR19YODZfTVNSPXkKQ09ORklHX1g4Nl9DUFVJRD15CkNPTkZJ
R19YODZfNUxFVkVMPXkKQ09ORklHX1g4Nl9ESVJFQ1RfR0JQQUdFUz15CkNPTkZJR19YODZf
Q1BBX1NUQVRJU1RJQ1M9eQpDT05GSUdfQU1EX01FTV9FTkNSWVBUPXkKIyBDT05GSUdfQU1E
X01FTV9FTkNSWVBUX0FDVElWRV9CWV9ERUZBVUxUIGlzIG5vdCBzZXQKQ09ORklHX05VTUE9
eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2XzY0X0FDUElfTlVNQT15CiMgQ09ORklH
X05VTUFfRU1VIGlzIG5vdCBzZXQKQ09ORklHX05PREVTX1NISUZUPTUKQ09ORklHX0FSQ0hf
U1BBUlNFTUVNX0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKQ09O
RklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiMgQ09ORklHX0FSQ0hfTUVNT1JZX1BS
T0JFIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lM
TEVHQUxfUE9JTlRFUl9WQUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKQ09ORklHX1g4Nl9QTUVN
X0xFR0FDWV9ERVZJQ0U9eQpDT05GSUdfWDg2X1BNRU1fTEVHQUNZPW0KQ09ORklHX1g4Nl9D
SEVDS19CSU9TX0NPUlJVUFRJT049eQpDT05GSUdfWDg2X0JPT1RQQVJBTV9NRU1PUllfQ09S
UlVQVElPTl9DSEVDSz15CkNPTkZJR19YODZfUkVTRVJWRV9MT1c9NjQKQ09ORklHX01UUlI9
eQpDT05GSUdfTVRSUl9TQU5JVElaRVI9eQpDT05GSUdfTVRSUl9TQU5JVElaRVJfRU5BQkxF
X0RFRkFVTFQ9MQpDT05GSUdfTVRSUl9TQU5JVElaRVJfU1BBUkVfUkVHX05SX0RFRkFVTFQ9
MApDT05GSUdfWDg2X1BBVD15CkNPTkZJR19BUkNIX1VTRVNfUEdfVU5DQUNIRUQ9eQpDT05G
SUdfQVJDSF9SQU5ET009eQpDT05GSUdfWDg2X1NNQVA9eQpDT05GSUdfWDg2X1VNSVA9eQpD
T05GSUdfWDg2X0lOVEVMX01FTU9SWV9QUk9URUNUSU9OX0tFWVM9eQojIENPTkZJR19YODZf
SU5URUxfVFNYX01PREVfT0ZGIGlzIG5vdCBzZXQKIyBDT05GSUdfWDg2X0lOVEVMX1RTWF9N
T0RFX09OIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9JTlRFTF9UU1hfTU9ERV9BVVRPPXkKQ09O
RklHX1g4Nl9TR1g9eQpDT05GSUdfRUZJPXkKQ09ORklHX0VGSV9TVFVCPXkKQ09ORklHX0VG
SV9NSVhFRD15CiMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0haXzI1MCBp
cyBub3Qgc2V0CkNPTkZJR19IWl8zMDA9eQojIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQK
Q09ORklHX0haPTMwMApDT05GSUdfU0NIRURfSFJUSUNLPXkKQ09ORklHX0tFWEVDPXkKQ09O
RklHX0tFWEVDX0ZJTEU9eQpDT05GSUdfQVJDSF9IQVNfS0VYRUNfUFVSR0FUT1JZPXkKIyBD
T05GSUdfS0VYRUNfU0lHIGlzIG5vdCBzZXQKQ09ORklHX0NSQVNIX0RVTVA9eQpDT05GSUdf
S0VYRUNfSlVNUD15CkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAKQ09ORklHX1JF
TE9DQVRBQkxFPXkKQ09ORklHX1JBTkRPTUlaRV9CQVNFPXkKQ09ORklHX1g4Nl9ORUVEX1JF
TE9DUz15CkNPTkZJR19QSFlTSUNBTF9BTElHTj0weDIwMDAwMApDT05GSUdfRFlOQU1JQ19N
RU1PUllfTEFZT1VUPXkKQ09ORklHX1JBTkRPTUlaRV9NRU1PUlk9eQpDT05GSUdfUkFORE9N
SVpFX01FTU9SWV9QSFlTSUNBTF9QQURESU5HPTB4YQpDT05GSUdfSE9UUExVR19DUFU9eQoj
IENPTkZJR19CT09UUEFSQU1fSE9UUExVR19DUFUwIGlzIG5vdCBzZXQKIyBDT05GSUdfREVC
VUdfSE9UUExVR19DUFUwIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NUEFUX1ZEU08gaXMgbm90
IHNldAojIENPTkZJR19MRUdBQ1lfVlNZU0NBTExfRU1VTEFURSBpcyBub3Qgc2V0CkNPTkZJ
R19MRUdBQ1lfVlNZU0NBTExfWE9OTFk9eQojIENPTkZJR19MRUdBQ1lfVlNZU0NBTExfTk9O
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CkNPTkZJR19N
T0RJRllfTERUX1NZU0NBTEw9eQpDT05GSUdfSEFWRV9MSVZFUEFUQ0g9eQojIENPTkZJR19M
SVZFUEFUQ0ggaXMgbm90IHNldAojIGVuZCBvZiBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVy
ZXMKCkNPTkZJR19BUkNIX0hBU19BRERfUEFHRVM9eQpDT05GSUdfQVJDSF9FTkFCTEVfTUVN
T1JZX0hPVFBMVUc9eQpDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CkNP
TkZJR19VU0VfUEVSQ1BVX05VTUFfTk9ERV9JRD15CkNPTkZJR19BUkNIX0VOQUJMRV9TUExJ
VF9QTURfUFRMT0NLPXkKQ09ORklHX0FSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTj15
CkNPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OPXkKCiMKIyBQb3dlciBtYW5hZ2Vt
ZW50IGFuZCBBQ1BJIG9wdGlvbnMKIwpDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9IRUFERVI9
eQpDT05GSUdfU1VTUEVORD15CkNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQpDT05GSUdfSElC
RVJOQVRFX0NBTExCQUNLUz15CkNPTkZJR19ISUJFUk5BVElPTj15CkNPTkZJR19ISUJFUk5B
VElPTl9TTkFQU0hPVF9ERVY9eQpDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgpDT05GSUdf
UE1fU0xFRVA9eQpDT05GSUdfUE1fU0xFRVBfU01QPXkKIyBDT05GSUdfUE1fQVVUT1NMRUVQ
IGlzIG5vdCBzZXQKIyBDT05GSUdfUE1fV0FLRUxPQ0tTIGlzIG5vdCBzZXQKQ09ORklHX1BN
PXkKQ09ORklHX1BNX0RFQlVHPXkKIyBDT05GSUdfUE1fQURWQU5DRURfREVCVUcgaXMgbm90
IHNldAojIENPTkZJR19QTV9URVNUX1NVU1BFTkQgaXMgbm90IHNldApDT05GSUdfUE1fU0xF
RVBfREVCVUc9eQpDT05GSUdfUE1fVFJBQ0U9eQpDT05GSUdfUE1fVFJBQ0VfUlRDPXkKQ09O
RklHX1BNX0NMSz15CkNPTkZJR19QTV9HRU5FUklDX0RPTUFJTlM9eQpDT05GSUdfV1FfUE9X
RVJfRUZGSUNJRU5UX0RFRkFVTFQ9eQpDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TX1NMRUVQ
PXkKQ09ORklHX0VORVJHWV9NT0RFTD15CkNPTkZJR19BUkNIX1NVUFBPUlRTX0FDUEk9eQpD
T05GSUdfQUNQST15CkNPTkZJR19BQ1BJX0xFR0FDWV9UQUJMRVNfTE9PS1VQPXkKQ09ORklH
X0FSQ0hfTUlHSFRfSEFWRV9BQ1BJX1BEQz15CkNPTkZJR19BQ1BJX1NZU1RFTV9QT1dFUl9T
VEFURVNfU1VQUE9SVD15CiMgQ09ORklHX0FDUElfREVCVUdHRVIgaXMgbm90IHNldApDT05G
SUdfQUNQSV9TUENSX1RBQkxFPXkKQ09ORklHX0FDUElfRlBEVD15CkNPTkZJR19BQ1BJX0xQ
SVQ9eQpDT05GSUdfQUNQSV9TTEVFUD15CkNPTkZJR19BQ1BJX1JFVl9PVkVSUklERV9QT1NT
SUJMRT15CkNPTkZJR19BQ1BJX0VDX0RFQlVHRlM9bQpDT05GSUdfQUNQSV9BQz15CkNPTkZJ
R19BQ1BJX0JBVFRFUlk9eQpDT05GSUdfQUNQSV9CVVRUT049eQpDT05GSUdfQUNQSV9WSURF
Tz1tCkNPTkZJR19BQ1BJX0ZBTj15CkNPTkZJR19BQ1BJX1RBRD1tCkNPTkZJR19BQ1BJX0RP
Q0s9eQpDT05GSUdfQUNQSV9DUFVfRlJFUV9QU1M9eQpDT05GSUdfQUNQSV9QUk9DRVNTT1Jf
Q1NUQVRFPXkKQ09ORklHX0FDUElfUFJPQ0VTU09SX0lETEU9eQpDT05GSUdfQUNQSV9DUFBD
X0xJQj15CkNPTkZJR19BQ1BJX1BST0NFU1NPUj15CkNPTkZJR19BQ1BJX0lQTUk9bQpDT05G
SUdfQUNQSV9IT1RQTFVHX0NQVT15CkNPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9S
PW0KQ09ORklHX0FDUElfVEhFUk1BTD15CkNPTkZJR19BQ1BJX1BMQVRGT1JNX1BST0ZJTEU9
bQpDT05GSUdfQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFPXkKQ09ORklHX0FDUElfVEFC
TEVfVVBHUkFERT15CkNPTkZJR19BQ1BJX0RFQlVHPXkKQ09ORklHX0FDUElfUENJX1NMT1Q9
eQpDT05GSUdfQUNQSV9DT05UQUlORVI9eQpDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWT15
CkNPTkZJR19BQ1BJX0hPVFBMVUdfSU9BUElDPXkKQ09ORklHX0FDUElfU0JTPW0KQ09ORklH
X0FDUElfSEVEPXkKQ09ORklHX0FDUElfQ1VTVE9NX01FVEhPRD1tCkNPTkZJR19BQ1BJX0JH
UlQ9eQpDT05GSUdfQUNQSV9ORklUPW0KIyBDT05GSUdfTkZJVF9TRUNVUklUWV9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19BQ1BJX05VTUE9eQpDT05GSUdfQUNQSV9ITUFUPXkKQ09ORklH
X0hBVkVfQUNQSV9BUEVJPXkKQ09ORklHX0hBVkVfQUNQSV9BUEVJX05NST15CkNPTkZJR19B
Q1BJX0FQRUk9eQpDT05GSUdfQUNQSV9BUEVJX0dIRVM9eQpDT05GSUdfQUNQSV9BUEVJX1BD
SUVBRVI9eQpDT05GSUdfQUNQSV9BUEVJX01FTU9SWV9GQUlMVVJFPXkKQ09ORklHX0FDUElf
QVBFSV9FSU5KPW0KQ09ORklHX0FDUElfQVBFSV9FUlNUX0RFQlVHPW0KQ09ORklHX0FDUElf
RFBURj15CkNPTkZJR19EUFRGX1BPV0VSPW0KQ09ORklHX0RQVEZfUENIX0ZJVlI9bQpDT05G
SUdfQUNQSV9XQVRDSERPRz15CkNPTkZJR19BQ1BJX0VYVExPRz1tCkNPTkZJR19BQ1BJX0FE
WEw9eQpDT05GSUdfQUNQSV9DT05GSUdGUz1tCkNPTkZJR19QTUlDX09QUkVHSU9OPXkKQ09O
RklHX0JZVENSQ19QTUlDX09QUkVHSU9OPXkKQ09ORklHX0NIVENSQ19QTUlDX09QUkVHSU9O
PXkKQ09ORklHX1hQT1dFUl9QTUlDX09QUkVHSU9OPXkKQ09ORklHX0JYVF9XQ19QTUlDX09Q
UkVHSU9OPXkKQ09ORklHX0NIVF9XQ19QTUlDX09QUkVHSU9OPXkKQ09ORklHX0NIVF9EQ19U
SV9QTUlDX09QUkVHSU9OPXkKQ09ORklHX1RQUzY4NDcwX1BNSUNfT1BSRUdJT049eQpDT05G
SUdfWDg2X1BNX1RJTUVSPXkKCiMKIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKIwpDT05GSUdf
Q1BVX0ZSRVE9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX0FUVFJfU0VUPXkKQ09ORklHX0NQVV9G
UkVRX0dPVl9DT01NT049eQpDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CiMgQ09ORklHX0NQVV9G
UkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0ZS
RVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0ZSRVFf
REVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKQ09ORklHX0NQVV9GUkVRX0RFRkFV
TFRfR09WX1NDSEVEVVRJTD15CkNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQpD
T05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfVVNF
UlNQQUNFPXkKQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CkNPTkZJR19DUFVfRlJF
UV9HT1ZfQ09OU0VSVkFUSVZFPXkKQ09ORklHX0NQVV9GUkVRX0dPVl9TQ0hFRFVUSUw9eQoK
IwojIENQVSBmcmVxdWVuY3kgc2NhbGluZyBkcml2ZXJzCiMKQ09ORklHX1g4Nl9JTlRFTF9Q
U1RBVEU9eQpDT05GSUdfWDg2X1BDQ19DUFVGUkVRPW0KQ09ORklHX1g4Nl9BQ1BJX0NQVUZS
RVE9bQpDT05GSUdfWDg2X0FDUElfQ1BVRlJFUV9DUEI9eQpDT05GSUdfWDg2X1BPV0VSTk9X
X0s4PW0KQ09ORklHX1g4Nl9BTURfRlJFUV9TRU5TSVRJVklUWT1tCiMgQ09ORklHX1g4Nl9T
UEVFRFNURVBfQ0VOVFJJTk8gaXMgbm90IHNldApDT05GSUdfWDg2X1A0X0NMT0NLTU9EPW0K
CiMKIyBzaGFyZWQgb3B0aW9ucwojCkNPTkZJR19YODZfU1BFRURTVEVQX0xJQj1tCiMgZW5k
IG9mIENQVSBGcmVxdWVuY3kgc2NhbGluZwoKIwojIENQVSBJZGxlCiMKQ09ORklHX0NQVV9J
RExFPXkKQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQpDT05GSUdfQ1BVX0lETEVfR09W
X01FTlU9eQpDT05GSUdfQ1BVX0lETEVfR09WX1RFTz15CkNPTkZJR19DUFVfSURMRV9HT1Zf
SEFMVFBPTEw9eQpDT05GSUdfSEFMVFBPTExfQ1BVSURMRT1tCiMgZW5kIG9mIENQVSBJZGxl
CgpDT05GSUdfSU5URUxfSURMRT15CiMgZW5kIG9mIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFD
UEkgb3B0aW9ucwoKIwojIEJ1cyBvcHRpb25zIChQQ0kgZXRjLikKIwpDT05GSUdfUENJX0RJ
UkVDVD15CkNPTkZJR19QQ0lfTU1DT05GSUc9eQpDT05GSUdfUENJX1hFTj15CkNPTkZJR19N
TUNPTkZfRkFNMTBIPXkKQ09ORklHX0lTQV9ETUFfQVBJPXkKQ09ORklHX0FNRF9OQj15CiMg
Q09ORklHX1g4Nl9TWVNGQiBpcyBub3Qgc2V0CiMgZW5kIG9mIEJ1cyBvcHRpb25zIChQQ0kg
ZXRjLikKCiMKIyBCaW5hcnkgRW11bGF0aW9ucwojCkNPTkZJR19JQTMyX0VNVUxBVElPTj15
CiMgQ09ORklHX1g4Nl9YMzIgaXMgbm90IHNldApDT05GSUdfQ09NUEFUXzMyPXkKQ09ORklH
X0NPTVBBVD15CkNPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQ9eQpDT05GSUdfU1lT
VklQQ19DT01QQVQ9eQojIGVuZCBvZiBCaW5hcnkgRW11bGF0aW9ucwoKIwojIEZpcm13YXJl
IERyaXZlcnMKIwpDT05GSUdfRUREPW0KIyBDT05GSUdfRUREX09GRiBpcyBub3Qgc2V0CkNP
TkZJR19GSVJNV0FSRV9NRU1NQVA9eQpDT05GSUdfRE1JSUQ9eQpDT05GSUdfRE1JX1NZU0ZT
PXkKQ09ORklHX0RNSV9TQ0FOX01BQ0hJTkVfTk9OX0VGSV9GQUxMQkFDSz15CkNPTkZJR19J
U0NTSV9JQkZUX0ZJTkQ9eQpDT05GSUdfSVNDU0lfSUJGVD1tCkNPTkZJR19GV19DRkdfU1lT
RlM9bQojIENPTkZJR19GV19DRkdfU1lTRlNfQ01ETElORSBpcyBub3Qgc2V0CkNPTkZJR19H
T09HTEVfRklSTVdBUkU9eQojIENPTkZJR19HT09HTEVfU01JIGlzIG5vdCBzZXQKQ09ORklH
X0dPT0dMRV9DT1JFQk9PVF9UQUJMRT1tCkNPTkZJR19HT09HTEVfTUVNQ09OU09MRT1tCiMg
Q09ORklHX0dPT0dMRV9NRU1DT05TT0xFX1g4Nl9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdf
R09PR0xFX0ZSQU1FQlVGRkVSX0NPUkVCT09UPW0KQ09ORklHX0dPT0dMRV9NRU1DT05TT0xF
X0NPUkVCT09UPW0KQ09ORklHX0dPT0dMRV9WUEQ9bQoKIwojIEVGSSAoRXh0ZW5zaWJsZSBG
aXJtd2FyZSBJbnRlcmZhY2UpIFN1cHBvcnQKIwojIENPTkZJR19FRklfVkFSUyBpcyBub3Qg
c2V0CkNPTkZJR19FRklfRVNSVD15CkNPTkZJR19FRklfVkFSU19QU1RPUkU9eQpDT05GSUdf
RUZJX1ZBUlNfUFNUT1JFX0RFRkFVTFRfRElTQUJMRT15CkNPTkZJR19FRklfUlVOVElNRV9N
QVA9eQojIENPTkZJR19FRklfRkFLRV9NRU1NQVAgaXMgbm90IHNldApDT05GSUdfRUZJX1NP
RlRfUkVTRVJWRT15CkNPTkZJR19FRklfUlVOVElNRV9XUkFQUEVSUz15CkNPTkZJR19FRklf
R0VORVJJQ19TVFVCX0lOSVRSRF9DTURMSU5FX0xPQURFUj15CkNPTkZJR19FRklfQk9PVExP
QURFUl9DT05UUk9MPW0KQ09ORklHX0VGSV9DQVBTVUxFX0xPQURFUj1tCiMgQ09ORklHX0VG
SV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX0FQUExFX1BST1BFUlRJRVM9eQojIENPTkZJR19S
RVNFVF9BVFRBQ0tfTUlUSUdBVElPTiBpcyBub3Qgc2V0CkNPTkZJR19FRklfUkNJMl9UQUJM
RT15CiMgQ09ORklHX0VGSV9ESVNBQkxFX1BDSV9ETUEgaXMgbm90IHNldAojIGVuZCBvZiBF
RkkgKEV4dGVuc2libGUgRmlybXdhcmUgSW50ZXJmYWNlKSBTdXBwb3J0CgpDT05GSUdfRUZJ
X0VNQkVEREVEX0ZJUk1XQVJFPXkKQ09ORklHX1VFRklfQ1BFUj15CkNPTkZJR19VRUZJX0NQ
RVJfWDg2PXkKQ09ORklHX0VGSV9ERVZfUEFUSF9QQVJTRVI9eQpDT05GSUdfRUZJX0VBUkxZ
Q09OPXkKQ09ORklHX0VGSV9DVVNUT01fU1NEVF9PVkVSTEFZUz15CgojCiMgVGVncmEgZmly
bXdhcmUgZHJpdmVyCiMKIyBlbmQgb2YgVGVncmEgZmlybXdhcmUgZHJpdmVyCiMgZW5kIG9m
IEZpcm13YXJlIERyaXZlcnMKCkNPTkZJR19IQVZFX0tWTT15CkNPTkZJR19IQVZFX0tWTV9J
UlFDSElQPXkKQ09ORklHX0hBVkVfS1ZNX0lSUUZEPXkKQ09ORklHX0hBVkVfS1ZNX0lSUV9S
T1VUSU5HPXkKQ09ORklHX0hBVkVfS1ZNX0VWRU5URkQ9eQpDT05GSUdfS1ZNX01NSU89eQpD
T05GSUdfS1ZNX0FTWU5DX1BGPXkKQ09ORklHX0hBVkVfS1ZNX01TST15CkNPTkZJR19IQVZF
X0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUPXkKQ09ORklHX0tWTV9WRklPPXkKQ09ORklHX0tW
TV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVD15CkNPTkZJR19LVk1fQ09NUEFUPXkK
Q09ORklHX0hBVkVfS1ZNX0lSUV9CWVBBU1M9eQpDT05GSUdfSEFWRV9LVk1fTk9fUE9MTD15
CkNPTkZJR19LVk1fWEZFUl9UT19HVUVTVF9XT1JLPXkKQ09ORklHX1ZJUlRVQUxJWkFUSU9O
PXkKQ09ORklHX0tWTT1tCkNPTkZJR19LVk1fSU5URUw9bQpDT05GSUdfS1ZNX0FNRD1tCkNP
TkZJR19LVk1fQU1EX1NFVj15CkNPTkZJR19LVk1fWEVOPXkKQ09ORklHX0tWTV9NTVVfQVVE
SVQ9eQpDT05GSUdfQVNfQVZYNTEyPXkKQ09ORklHX0FTX1NIQTFfTkk9eQpDT05GSUdfQVNf
U0hBMjU2X05JPXkKQ09ORklHX0FTX1RQQVVTRT15CgojCiMgR2VuZXJhbCBhcmNoaXRlY3R1
cmUtZGVwZW5kZW50IG9wdGlvbnMKIwpDT05GSUdfQ1JBU0hfQ09SRT15CkNPTkZJR19LRVhF
Q19DT1JFPXkKQ09ORklHX0hPVFBMVUdfU01UPXkKQ09ORklHX0dFTkVSSUNfRU5UUlk9eQpD
T05GSUdfS1BST0JFUz15CkNPTkZJR19KVU1QX0xBQkVMPXkKIyBDT05GSUdfU1RBVElDX0tF
WVNfU0VMRlRFU1QgaXMgbm90IHNldAojIENPTkZJR19TVEFUSUNfQ0FMTF9TRUxGVEVTVCBp
cyBub3Qgc2V0CkNPTkZJR19PUFRQUk9CRVM9eQpDT05GSUdfS1BST0JFU19PTl9GVFJBQ0U9
eQpDT05GSUdfVVBST0JFUz15CkNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUND
RVNTPXkKQ09ORklHX0FSQ0hfVVNFX0JVSUxUSU5fQlNXQVA9eQpDT05GSUdfS1JFVFBST0JF
Uz15CkNPTkZJR19VU0VSX1JFVFVSTl9OT1RJRklFUj15CkNPTkZJR19IQVZFX0lPUkVNQVBf
UFJPVD15CkNPTkZJR19IQVZFX0tQUk9CRVM9eQpDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkK
Q09ORklHX0hBVkVfT1BUUFJPQkVTPXkKQ09ORklHX0hBVkVfS1BST0JFU19PTl9GVFJBQ0U9
eQpDT05GSUdfSEFWRV9GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT049eQpDT05GSUdfSEFWRV9O
TUk9eQpDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CkNPTkZJR19IQVZFX0RNQV9DT05U
SUdVT1VTPXkKQ09ORklHX0dFTkVSSUNfU01QX0lETEVfVEhSRUFEPXkKQ09ORklHX0FSQ0hf
SEFTX0ZPUlRJRllfU09VUkNFPXkKQ09ORklHX0FSQ0hfSEFTX1NFVF9NRU1PUlk9eQpDT05G
SUdfQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVA9eQpDT05GSUdfSEFWRV9BUkNIX1RIUkVBRF9T
VFJVQ1RfV0hJVEVMSVNUPXkKQ09ORklHX0FSQ0hfV0FOVFNfRFlOQU1JQ19UQVNLX1NUUlVD
VD15CkNPTkZJR19IQVZFX0FTTV9NT0RWRVJTSU9OUz15CkNPTkZJR19IQVZFX1JFR1NfQU5E
X1NUQUNLX0FDQ0VTU19BUEk9eQpDT05GSUdfSEFWRV9SU0VRPXkKQ09ORklHX0hBVkVfRlVO
Q1RJT05fQVJHX0FDQ0VTU19BUEk9eQpDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UPXkKQ09O
RklHX0hBVkVfTUlYRURfQlJFQUtQT0lOVFNfUkVHUz15CkNPTkZJR19IQVZFX1VTRVJfUkVU
VVJOX05PVElGSUVSPXkKQ09ORklHX0hBVkVfUEVSRl9FVkVOVFNfTk1JPXkKQ09ORklHX0hB
VkVfSEFSRExPQ0tVUF9ERVRFQ1RPUl9QRVJGPXkKQ09ORklHX0hBVkVfUEVSRl9SRUdTPXkK
Q09ORklHX0hBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVA9eQpDT05GSUdfSEFWRV9BUkNIX0pV
TVBfTEFCRUw9eQpDT05GSUdfSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkU9eQpDT05G
SUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFPXkKQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxF
X0ZSRUU9eQpDT05GSUdfQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEc9eQpDT05GSUdfSEFW
RV9BTElHTkVEX1NUUlVDVF9QQUdFPXkKQ09ORklHX0hBVkVfQ01QWENIR19MT0NBTD15CkNP
TkZJR19IQVZFX0NNUFhDSEdfRE9VQkxFPXkKQ09ORklHX0FSQ0hfV0FOVF9DT01QQVRfSVBD
X1BBUlNFX1ZFUlNJT049eQpDT05GSUdfQVJDSF9XQU5UX09MRF9DT01QQVRfSVBDPXkKQ09O
RklHX0hBVkVfQVJDSF9TRUNDT01QPXkKQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRF
Uj15CkNPTkZJR19TRUNDT01QPXkKQ09ORklHX1NFQ0NPTVBfRklMVEVSPXkKIyBDT05GSUdf
U0VDQ09NUF9DQUNIRV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0FSQ0hfU1RBQ0tM
RUFLPXkKQ09ORklHX0hBVkVfU1RBQ0tQUk9URUNUT1I9eQpDT05GSUdfU1RBQ0tQUk9URUNU
T1I9eQpDT05GSUdfU1RBQ0tQUk9URUNUT1JfU1RST05HPXkKQ09ORklHX0FSQ0hfU1VQUE9S
VFNfTFRPX0NMQU5HPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU49eQpD
T05GSUdfTFRPX05PTkU9eQpDT05GSUdfSEFWRV9BUkNIX1dJVEhJTl9TVEFDS19GUkFNRVM9
eQpDT05GSUdfSEFWRV9DT05URVhUX1RSQUNLSU5HPXkKQ09ORklHX0hBVkVfQ09OVEVYVF9U
UkFDS0lOR19PRkZTVEFDSz15CkNPTkZJR19IQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VO
PXkKQ09ORklHX0hBVkVfSVJRX1RJTUVfQUNDT1VOVElORz15CkNPTkZJR19IQVZFX01PVkVf
UFVEPXkKQ09ORklHX0hBVkVfTU9WRV9QTUQ9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFS
RU5UX0hVR0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9Q
VUQ9eQpDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUD15CkNPTkZJR19BUkNIX1dBTlRfSFVH
RV9QTURfU0hBUkU9eQpDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFk9eQpDT05GSUdfSEFW
RV9NT0RfQVJDSF9TUEVDSUZJQz15CkNPTkZJR19NT0RVTEVTX1VTRV9FTEZfUkVMQT15CkNP
TkZJR19IQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDSz15CkNPTkZJR19IQVZFX1NPRlRJUlFf
T05fT1dOX1NUQUNLPXkKQ09ORklHX0FSQ0hfSEFTX0VMRl9SQU5ET01JWkU9eQpDT05GSUdf
SEFWRV9BUkNIX01NQVBfUk5EX0JJVFM9eQpDT05GSUdfSEFWRV9FWElUX1RIUkVBRD15CkNP
TkZJR19BUkNIX01NQVBfUk5EX0JJVFM9MjgKQ09ORklHX0hBVkVfQVJDSF9NTUFQX1JORF9D
T01QQVRfQklUUz15CkNPTkZJR19BUkNIX01NQVBfUk5EX0NPTVBBVF9CSVRTPTgKQ09ORklH
X0hBVkVfQVJDSF9DT01QQVRfTU1BUF9CQVNFUz15CkNPTkZJR19IQVZFX1NUQUNLX1ZBTElE
QVRJT049eQpDT05GSUdfSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFPXkKQ09ORklHX0lTQV9C
VVNfQVBJPXkKQ09ORklHX09MRF9TSUdTVVNQRU5EMz15CkNPTkZJR19DT01QQVRfT0xEX1NJ
R0FDVElPTj15CkNPTkZJR19DT01QQVRfMzJCSVRfVElNRT15CkNPTkZJR19IQVZFX0FSQ0hf
Vk1BUF9TVEFDSz15CkNPTkZJR19WTUFQX1NUQUNLPXkKQ09ORklHX0FSQ0hfSEFTX1NUUklD
VF9LRVJORUxfUldYPXkKQ09ORklHX1NUUklDVF9LRVJORUxfUldYPXkKQ09ORklHX0FSQ0hf
SEFTX1NUUklDVF9NT0RVTEVfUldYPXkKQ09ORklHX1NUUklDVF9NT0RVTEVfUldYPXkKQ09O
RklHX0hBVkVfQVJDSF9QUkVMMzJfUkVMT0NBVElPTlM9eQpDT05GSUdfQVJDSF9VU0VfTUVN
UkVNQVBfUFJPVD15CkNPTkZJR19MT0NLX0VWRU5UX0NPVU5UUz15CkNPTkZJR19BUkNIX0hB
U19NRU1fRU5DUllQVD15CkNPTkZJR19IQVZFX1NUQVRJQ19DQUxMPXkKQ09ORklHX0hBVkVf
U1RBVElDX0NBTExfSU5MSU5FPXkKQ09ORklHX0hBVkVfUFJFRU1QVF9EWU5BTUlDPXkKQ09O
RklHX0FSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTj15CkNPTkZJR19BUkNIX1NVUFBPUlRTX0RF
QlVHX1BBR0VBTExPQz15CkNPTkZJR19BUkNIX0hBU19FTEZDT1JFX0NPTVBBVD15CgojCiMg
R0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiMKIyBDT05GSUdfR0NPVl9LRVJORUwgaXMg
bm90IHNldApDT05GSUdfQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTD15CiMgZW5kIG9mIEdD
T1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwoKQ09ORklHX0hBVkVfR0NDX1BMVUdJTlM9eQpD
T05GSUdfR0NDX1BMVUdJTlM9eQojIENPTkZJR19HQ0NfUExVR0lOX0xBVEVOVF9FTlRST1BZ
IGlzIG5vdCBzZXQKIyBDT05GSUdfR0NDX1BMVUdJTl9SQU5EU1RSVUNUIGlzIG5vdCBzZXQK
IyBlbmQgb2YgR2VuZXJhbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IG9wdGlvbnMKCkNPTkZJ
R19SVF9NVVRFWEVTPXkKQ09ORklHX0JBU0VfU01BTEw9MApDT05GSUdfTU9EVUxFX1NJR19G
T1JNQVQ9eQpDT05GSUdfTU9EVUxFUz15CkNPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRD15CkNP
TkZJR19NT0RVTEVfVU5MT0FEPXkKQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQojIENP
TkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CkNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9B
TEw9eQpDT05GSUdfTU9EVUxFX1NJRz15CiMgQ09ORklHX01PRFVMRV9TSUdfRk9SQ0UgaXMg
bm90IHNldApDT05GSUdfTU9EVUxFX1NJR19BTEw9eQojIENPTkZJR19NT0RVTEVfU0lHX1NI
QTEgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfU0lHX1NIQTIyNCBpcyBub3Qgc2V0CiMg
Q09ORklHX01PRFVMRV9TSUdfU0hBMjU2IGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVUxFX1NJ
R19TSEEzODQgaXMgbm90IHNldApDT05GSUdfTU9EVUxFX1NJR19TSEE1MTI9eQpDT05GSUdf
TU9EVUxFX1NJR19IQVNIPSJzaGE1MTIiCkNPTkZJR19NT0RVTEVfQ09NUFJFU1M9eQojIENP
TkZJR19NT0RVTEVfQ09NUFJFU1NfR1pJUCBpcyBub3Qgc2V0CkNPTkZJR19NT0RVTEVfQ09N
UFJFU1NfWFo9eQpDT05GSUdfTU9EVUxFX0FMTE9XX01JU1NJTkdfTkFNRVNQQUNFX0lNUE9S
VFM9eQpDT05GSUdfTU9EVUxFU19UUkVFX0xPT0tVUD15CkNPTkZJR19CTE9DSz15CkNPTkZJ
R19CTEtfUlFfQUxMT0NfVElNRT15CkNPTkZJR19CTEtfU0NTSV9SRVFVRVNUPXkKQ09ORklH
X0JMS19DR1JPVVBfUldTVEFUPXkKQ09ORklHX0JMS19ERVZfQlNHPXkKQ09ORklHX0JMS19E
RVZfQlNHTElCPXkKQ09ORklHX0JMS19ERVZfSU5URUdSSVRZPXkKQ09ORklHX0JMS19ERVZf
SU5URUdSSVRZX1QxMD15CkNPTkZJR19CTEtfREVWX1pPTkVEPXkKQ09ORklHX0JMS19ERVZf
VEhST1RUTElORz15CkNPTkZJR19CTEtfREVWX1RIUk9UVExJTkdfTE9XPXkKIyBDT05GSUdf
QkxLX0NNRExJTkVfUEFSU0VSIGlzIG5vdCBzZXQKQ09ORklHX0JMS19XQlQ9eQpDT05GSUdf
QkxLX0NHUk9VUF9JT0xBVEVOQ1k9eQpDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eQpDT05G
SUdfQkxLX1dCVF9NUT15CkNPTkZJR19CTEtfREVCVUdfRlM9eQpDT05GSUdfQkxLX0RFQlVH
X0ZTX1pPTkVEPXkKQ09ORklHX0JMS19TRURfT1BBTD15CkNPTkZJR19CTEtfSU5MSU5FX0VO
Q1JZUFRJT049eQpDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLPXkKCiMK
IyBQYXJ0aXRpb24gVHlwZXMKIwpDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIyBDT05G
SUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0FJWF9QQVJUSVRJT049eQoj
IENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfQU1JR0FfUEFSVElU
SU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09O
RklHX01BQ19QQVJUSVRJT049eQpDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKQ09ORklHX0JT
RF9ESVNLTEFCRUw9eQpDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKQ09ORklHX1NPTEFS
SVNfWDg2X1BBUlRJVElPTj15CiMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qg
c2V0CkNPTkZJR19MRE1fUEFSVElUSU9OPXkKIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX1VMVFJJWF9Q
QVJUSVRJT04gaXMgbm90IHNldAojIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQK
Q09ORklHX0tBUk1BX1BBUlRJVElPTj15CkNPTkZJR19FRklfUEFSVElUSU9OPXkKIyBDT05G
SUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNRExJTkVfUEFSVElU
SU9OIGlzIG5vdCBzZXQKIyBlbmQgb2YgUGFydGl0aW9uIFR5cGVzCgpDT05GSUdfQkxPQ0tf
Q09NUEFUPXkKQ09ORklHX0JMS19NUV9QQ0k9eQpDT05GSUdfQkxLX01RX1ZJUlRJTz15CkNP
TkZJR19CTEtfTVFfUkRNQT15CkNPTkZJR19CTEtfUE09eQoKIwojIElPIFNjaGVkdWxlcnMK
IwpDT05GSUdfTVFfSU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19NUV9JT1NDSEVEX0tZQkVS
PXkKQ09ORklHX0lPU0NIRURfQkZRPXkKQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXkKIyBD
T05GSUdfQkZRX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CiMgZW5kIG9mIElPIFNjaGVkdWxl
cnMKCkNPTkZJR19QUkVFTVBUX05PVElGSUVSUz15CkNPTkZJR19QQURBVEE9eQpDT05GSUdf
QVNOMT15CkNPTkZJR19VTklOTElORV9TUElOX1VOTE9DSz15CkNPTkZJR19BUkNIX1NVUFBP
UlRTX0FUT01JQ19STVc9eQpDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CkNPTkZJR19S
V1NFTV9TUElOX09OX09XTkVSPXkKQ09ORklHX0xPQ0tfU1BJTl9PTl9PV05FUj15CkNPTkZJ
R19BUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTPXkKQ09ORklHX1FVRVVFRF9TUElOTE9DS1M9
eQpDT05GSUdfQVJDSF9VU0VfUVVFVUVEX1JXTE9DS1M9eQpDT05GSUdfUVVFVUVEX1JXTE9D
S1M9eQpDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0U9eQpD
T05GSUdfQVJDSF9IQVNfU1lOQ19DT1JFX0JFRk9SRV9VU0VSTU9ERT15CkNPTkZJR19BUkNI
X0hBU19TWVNDQUxMX1dSQVBQRVI9eQpDT05GSUdfRlJFRVpFUj15CgojCiMgRXhlY3V0YWJs
ZSBmaWxlIGZvcm1hdHMKIwpDT05GSUdfQklORk1UX0VMRj15CkNPTkZJR19DT01QQVRfQklO
Rk1UX0VMRj15CkNPTkZJR19FTEZDT1JFPXkKQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VM
Rl9IRUFERVJTPXkKQ09ORklHX0JJTkZNVF9TQ1JJUFQ9eQpDT05GSUdfQklORk1UX01JU0M9
eQpDT05GSUdfQ09SRURVTVA9eQojIGVuZCBvZiBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwoK
IwojIE1lbW9yeSBNYW5hZ2VtZW50IG9wdGlvbnMKIwpDT05GSUdfU0VMRUNUX01FTU9SWV9N
T0RFTD15CkNPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKQ09ORklHX1NQQVJTRU1FTT15CkNP
TkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkK
Q09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CkNPTkZJR19TUEFSU0VNRU1fVk1F
TU1BUD15CkNPTkZJR19IQVZFX0ZBU1RfR1VQPXkKQ09ORklHX05VTUFfS0VFUF9NRU1JTkZP
PXkKQ09ORklHX01FTU9SWV9JU09MQVRJT049eQpDT05GSUdfSEFWRV9CT09UTUVNX0lORk9f
Tk9ERT15CkNPTkZJR19NRU1PUllfSE9UUExVRz15CkNPTkZJR19NRU1PUllfSE9UUExVR19T
UEFSU0U9eQpDT05GSUdfTUVNT1JZX0hPVFBMVUdfREVGQVVMVF9PTkxJTkU9eQpDT05GSUdf
TUVNT1JZX0hPVFJFTU9WRT15CkNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CkNPTkZJR19N
RU1PUllfQkFMTE9PTj15CkNPTkZJR19CQUxMT09OX0NPTVBBQ1RJT049eQpDT05GSUdfQ09N
UEFDVElPTj15CkNPTkZJR19QQUdFX1JFUE9SVElORz15CkNPTkZJR19NSUdSQVRJT049eQpD
T05GSUdfQ09OVElHX0FMTE9DPXkKQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQ09ORklH
X0JPVU5DRT15CkNPTkZJR19WSVJUX1RPX0JVUz15CkNPTkZJR19NTVVfTk9USUZJRVI9eQpD
T05GSUdfS1NNPXkKQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj02NTUzNgpDT05GSUdf
QVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRT15CkNPTkZJR19NRU1PUllfRkFJTFVSRT15
CkNPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bQpDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9
eQojIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVMgaXMgbm90IHNldApDT05G
SUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRT15CkNPTkZJR19BUkNIX1dBTlRTX1RI
UF9TV0FQPXkKQ09ORklHX1RIUF9TV0FQPXkKQ09ORklHX0NMRUFOQ0FDSEU9eQpDT05GSUdf
RlJPTlRTV0FQPXkKQ09ORklHX0NNQT15CiMgQ09ORklHX0NNQV9ERUJVRyBpcyBub3Qgc2V0
CkNPTkZJR19DTUFfREVCVUdGUz15CkNPTkZJR19DTUFfQVJFQVM9NwpDT05GSUdfTUVNX1NP
RlRfRElSVFk9eQpDT05GSUdfWlNXQVA9eQojIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RF
RkFVTFRfREVGTEFURSBpcyBub3Qgc2V0CiMgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVG
QVVMVF9MWk8gaXMgbm90IHNldAojIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFRf
ODQyIGlzIG5vdCBzZXQKQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjQ9eQoj
IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SEMgaXMgbm90IHNldAojIENP
TkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURCBpcyBub3Qgc2V0CkNPTkZJR19a
U1dBUF9DT01QUkVTU09SX0RFRkFVTFQ9Imx6NCIKIyBDT05GSUdfWlNXQVBfWlBPT0xfREVG
QVVMVF9aQlVEIGlzIG5vdCBzZXQKQ09ORklHX1pTV0FQX1pQT09MX0RFRkFVTFRfWjNGT0xE
PXkKIyBDT05GSUdfWlNXQVBfWlBPT0xfREVGQVVMVF9aU01BTExPQyBpcyBub3Qgc2V0CkNP
TkZJR19aU1dBUF9aUE9PTF9ERUZBVUxUPSJ6M2ZvbGQiCkNPTkZJR19aU1dBUF9ERUZBVUxU
X09OPXkKQ09ORklHX1pQT09MPXkKQ09ORklHX1pCVUQ9eQpDT05GSUdfWjNGT0xEPXkKQ09O
RklHX1pTTUFMTE9DPXkKIyBDT05GSUdfWlNNQUxMT0NfU1RBVCBpcyBub3Qgc2V0CkNPTkZJ
R19HRU5FUklDX0VBUkxZX0lPUkVNQVA9eQojIENPTkZJR19ERUZFUlJFRF9TVFJVQ1RfUEFH
RV9JTklUIGlzIG5vdCBzZXQKQ09ORklHX0lETEVfUEFHRV9UUkFDS0lORz15CkNPTkZJR19B
UkNIX0hBU19QVEVfREVWTUFQPXkKQ09ORklHX1pPTkVfREVWSUNFPXkKQ09ORklHX0RFVl9Q
QUdFTUFQX09QUz15CkNPTkZJR19ITU1fTUlSUk9SPXkKQ09ORklHX0RFVklDRV9QUklWQVRF
PXkKQ09ORklHX1ZNQVBfUEZOPXkKQ09ORklHX0FSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHUz15
CkNPTkZJR19BUkNIX0hBU19QS0VZUz15CiMgQ09ORklHX1BFUkNQVV9TVEFUUyBpcyBub3Qg
c2V0CiMgQ09ORklHX0dVUF9URVNUIGlzIG5vdCBzZXQKQ09ORklHX1JFQURfT05MWV9USFBf
Rk9SX0ZTPXkKQ09ORklHX0FSQ0hfSEFTX1BURV9TUEVDSUFMPXkKQ09ORklHX01BUFBJTkdf
RElSVFlfSEVMUEVSUz15CiMgZW5kIG9mIE1lbW9yeSBNYW5hZ2VtZW50IG9wdGlvbnMKCkNP
TkZJR19ORVQ9eQpDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQpDT05GSUdfTkVU
X0lOR1JFU1M9eQpDT05GSUdfTkVUX0VHUkVTUz15CkNPTkZJR19ORVRfUkVESVJFQ1Q9eQpD
T05GSUdfU0tCX0VYVEVOU0lPTlM9eQoKIwojIE5ldHdvcmtpbmcgb3B0aW9ucwojCkNPTkZJ
R19QQUNLRVQ9eQpDT05GSUdfUEFDS0VUX0RJQUc9bQpDT05GSUdfVU5JWD15CkNPTkZJR19V
TklYX1NDTT15CkNPTkZJR19VTklYX0RJQUc9bQpDT05GSUdfVExTPW0KQ09ORklHX1RMU19E
RVZJQ0U9eQojIENPTkZJR19UTFNfVE9FIGlzIG5vdCBzZXQKQ09ORklHX1hGUk09eQpDT05G
SUdfWEZSTV9PRkZMT0FEPXkKQ09ORklHX1hGUk1fQUxHTz15CkNPTkZJR19YRlJNX1VTRVI9
eQojIENPTkZJR19YRlJNX1VTRVJfQ09NUEFUIGlzIG5vdCBzZXQKQ09ORklHX1hGUk1fSU5U
RVJGQUNFPW0KQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CkNPTkZJR19YRlJNX01JR1JBVEU9
eQpDT05GSUdfWEZSTV9TVEFUSVNUSUNTPXkKQ09ORklHX1hGUk1fQUg9bQpDT05GSUdfWEZS
TV9FU1A9bQpDT05GSUdfWEZSTV9JUENPTVA9bQpDT05GSUdfTkVUX0tFWT1tCkNPTkZJR19O
RVRfS0VZX01JR1JBVEU9eQpDT05GSUdfWEZSTV9FU1BJTlRDUD15CkNPTkZJR19TTUM9bQpD
T05GSUdfU01DX0RJQUc9bQpDT05GSUdfWERQX1NPQ0tFVFM9eQpDT05GSUdfWERQX1NPQ0tF
VFNfRElBRz1tCkNPTkZJR19JTkVUPXkKQ09ORklHX0lQX01VTFRJQ0FTVD15CkNPTkZJR19J
UF9BRFZBTkNFRF9ST1VURVI9eQpDT05GSUdfSVBfRklCX1RSSUVfU1RBVFM9eQpDT05GSUdf
SVBfTVVMVElQTEVfVEFCTEVTPXkKQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CkNPTkZJ
R19JUF9ST1VURV9WRVJCT1NFPXkKQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQ9eQojIENPTkZJ
R19JUF9QTlAgaXMgbm90IHNldApDT05GSUdfTkVUX0lQSVA9bQpDT05GSUdfTkVUX0lQR1JF
X0RFTVVYPW0KQ09ORklHX05FVF9JUF9UVU5ORUw9bQpDT05GSUdfTkVUX0lQR1JFPW0KQ09O
RklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQpDT05GSUdfSVBfTVJPVVRFX0NPTU1PTj15CkNP
TkZJR19JUF9NUk9VVEU9eQpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15CkNP
TkZJR19JUF9QSU1TTV9WMT15CkNPTkZJR19JUF9QSU1TTV9WMj15CkNPTkZJR19TWU5fQ09P
S0lFUz15CkNPTkZJR19ORVRfSVBWVEk9bQpDT05GSUdfTkVUX1VEUF9UVU5ORUw9bQpDT05G
SUdfTkVUX0ZPVT1tCkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eQpDT05GSUdfSU5FVF9B
SD1tCkNPTkZJR19JTkVUX0VTUD1tCkNPTkZJR19JTkVUX0VTUF9PRkZMT0FEPW0KQ09ORklH
X0lORVRfRVNQSU5UQ1A9eQpDT05GSUdfSU5FVF9JUENPTVA9bQpDT05GSUdfSU5FVF9YRlJN
X1RVTk5FTD1tCkNPTkZJR19JTkVUX1RVTk5FTD1tCkNPTkZJR19JTkVUX0RJQUc9bQpDT05G
SUdfSU5FVF9UQ1BfRElBRz1tCkNPTkZJR19JTkVUX1VEUF9ESUFHPW0KQ09ORklHX0lORVRf
UkFXX0RJQUc9bQpDT05GSUdfSU5FVF9ESUFHX0RFU1RST1k9eQpDT05GSUdfVENQX0NPTkdf
QURWQU5DRUQ9eQpDT05GSUdfVENQX0NPTkdfQklDPW0KQ09ORklHX1RDUF9DT05HX0NVQklD
PXkKQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KQ09ORklHX1RDUF9DT05HX0hUQ1A9bQpD
T05GSUdfVENQX0NPTkdfSFNUQ1A9bQpDT05GSUdfVENQX0NPTkdfSFlCTEE9bQpDT05GSUdf
VENQX0NPTkdfVkVHQVM9bQpDT05GSUdfVENQX0NPTkdfTlY9bQpDT05GSUdfVENQX0NPTkdf
U0NBTEFCTEU9bQpDT05GSUdfVENQX0NPTkdfTFA9bQpDT05GSUdfVENQX0NPTkdfVkVOTz1t
CkNPTkZJR19UQ1BfQ09OR19ZRUFIPW0KQ09ORklHX1RDUF9DT05HX0lMTElOT0lTPW0KQ09O
RklHX1RDUF9DT05HX0RDVENQPW0KQ09ORklHX1RDUF9DT05HX0NERz1tCkNPTkZJR19UQ1Bf
Q09OR19CQlI9bQpDT05GSUdfREVGQVVMVF9DVUJJQz15CiMgQ09ORklHX0RFRkFVTFRfUkVO
TyBpcyBub3Qgc2V0CkNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKQ09ORklHX1RD
UF9NRDVTSUc9eQpDT05GSUdfSVBWNj15CkNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKQ09O
RklHX0lQVjZfUk9VVEVfSU5GTz15CkNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXkKQ09O
RklHX0lORVQ2X0FIPW0KQ09ORklHX0lORVQ2X0VTUD1tCkNPTkZJR19JTkVUNl9FU1BfT0ZG
TE9BRD1tCkNPTkZJR19JTkVUNl9FU1BJTlRDUD15CkNPTkZJR19JTkVUNl9JUENPTVA9bQpD
T05GSUdfSVBWNl9NSVA2PW0KQ09ORklHX0lQVjZfSUxBPW0KQ09ORklHX0lORVQ2X1hGUk1f
VFVOTkVMPW0KQ09ORklHX0lORVQ2X1RVTk5FTD1tCkNPTkZJR19JUFY2X1ZUST1tCkNPTkZJ
R19JUFY2X1NJVD1tCkNPTkZJR19JUFY2X1NJVF82UkQ9eQpDT05GSUdfSVBWNl9ORElTQ19O
T0RFVFlQRT15CkNPTkZJR19JUFY2X1RVTk5FTD1tCkNPTkZJR19JUFY2X0dSRT1tCkNPTkZJ
R19JUFY2X0ZPVT1tCkNPTkZJR19JUFY2X0ZPVV9UVU5ORUw9bQpDT05GSUdfSVBWNl9NVUxU
SVBMRV9UQUJMRVM9eQpDT05GSUdfSVBWNl9TVUJUUkVFUz15CkNPTkZJR19JUFY2X01ST1VU
RT15CkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdfSVBWNl9Q
SU1TTV9WMj15CkNPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUw9eQpDT05GSUdfSVBWNl9TRUc2
X0hNQUM9eQpDT05GSUdfSVBWNl9TRUc2X0JQRj15CkNPTkZJR19JUFY2X1JQTF9MV1RVTk5F
TD15CkNPTkZJR19ORVRMQUJFTD15CkNPTkZJR19NUFRDUD15CkNPTkZJR19JTkVUX01QVENQ
X0RJQUc9bQpDT05GSUdfTVBUQ1BfSVBWNj15CkNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQpD
T05GSUdfTkVUX1BUUF9DTEFTU0lGWT15CkNPTkZJR19ORVRXT1JLX1BIWV9USU1FU1RBTVBJ
Tkc9eQpDT05GSUdfTkVURklMVEVSPXkKQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CkNP
TkZJR19CUklER0VfTkVURklMVEVSPW0KCiMKIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0
aW9uCiMKQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTPXkKQ09ORklHX05FVEZJTFRFUl9ORVRM
SU5LPW0KQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFPXkKQ09ORklHX05FVEZJTFRF
Ul9GQU1JTFlfQVJQPXkKQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0FDQ1Q9bQpDT05GSUdf
TkVURklMVEVSX05FVExJTktfUVVFVUU9bQpDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9H
PW0KQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX09TRj1tCkNPTkZJR19ORl9DT05OVFJBQ0s9
bQpDT05GSUdfTkZfTE9HX0NPTU1PTj1tCkNPTkZJR19ORl9MT0dfTkVUREVWPW0KQ09ORklH
X05FVEZJTFRFUl9DT05OQ09VTlQ9bQpDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQpDT05G
SUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQpDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTPXkK
Q09ORklHX05GX0NPTk5UUkFDS19QUk9DRlM9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5U
Uz15CkNPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVD15CkNPTkZJR19ORl9DT05OVFJBQ0tf
VElNRVNUQU1QPXkKQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFM9eQpDT05GSUdfTkZfQ1Rf
UFJPVE9fRENDUD15CkNPTkZJR19ORl9DVF9QUk9UT19HUkU9eQpDT05GSUdfTkZfQ1RfUFJP
VE9fU0NUUD15CkNPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPXkKQ09ORklHX05GX0NPTk5U
UkFDS19BTUFOREE9bQpDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCkNPTkZJR19ORl9DT05O
VFJBQ0tfSDMyMz1tCkNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KQ09ORklHX05GX0NPTk5U
UkFDS19CUk9BRENBU1Q9bQpDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQpDT05G
SUdfTkZfQ09OTlRSQUNLX1NOTVA9bQpDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQpDT05G
SUdfTkZfQ09OTlRSQUNLX1NBTkU9bQpDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfVEZUUD1tCkNPTkZJR19ORl9DVF9ORVRMSU5LPW0KQ09ORklHX05G
X0NUX05FVExJTktfVElNRU9VVD1tCkNPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUj1tCkNP
TkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUPXkKQ09ORklHX05GX05BVD1tCkNPTkZJ
R19ORl9OQVRfQU1BTkRBPW0KQ09ORklHX05GX05BVF9GVFA9bQpDT05GSUdfTkZfTkFUX0lS
Qz1tCkNPTkZJR19ORl9OQVRfU0lQPW0KQ09ORklHX05GX05BVF9URlRQPW0KQ09ORklHX05G
X05BVF9SRURJUkVDVD15CkNPTkZJR19ORl9OQVRfTUFTUVVFUkFERT15CkNPTkZJR19ORVRG
SUxURVJfU1lOUFJPWFk9bQpDT05GSUdfTkZfVEFCTEVTPW0KQ09ORklHX05GX1RBQkxFU19J
TkVUPXkKQ09ORklHX05GX1RBQkxFU19ORVRERVY9eQpDT05GSUdfTkZUX05VTUdFTj1tCkNP
TkZJR19ORlRfQ1Q9bQpDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRD1tCkNPTkZJR19ORlRfQ09V
TlRFUj1tCkNPTkZJR19ORlRfQ09OTkxJTUlUPW0KQ09ORklHX05GVF9MT0c9bQpDT05GSUdf
TkZUX0xJTUlUPW0KQ09ORklHX05GVF9NQVNRPW0KQ09ORklHX05GVF9SRURJUj1tCkNPTkZJ
R19ORlRfTkFUPW0KQ09ORklHX05GVF9UVU5ORUw9bQpDT05GSUdfTkZUX09CSlJFRj1tCkNP
TkZJR19ORlRfUVVFVUU9bQpDT05GSUdfTkZUX1FVT1RBPW0KQ09ORklHX05GVF9SRUpFQ1Q9
bQpDT05GSUdfTkZUX1JFSkVDVF9JTkVUPW0KQ09ORklHX05GVF9DT01QQVQ9bQpDT05GSUdf
TkZUX0hBU0g9bQpDT05GSUdfTkZUX0ZJQj1tCkNPTkZJR19ORlRfRklCX0lORVQ9bQpDT05G
SUdfTkZUX1hGUk09bQpDT05GSUdfTkZUX1NPQ0tFVD1tCkNPTkZJR19ORlRfT1NGPW0KQ09O
RklHX05GVF9UUFJPWFk9bQpDT05GSUdfTkZUX1NZTlBST1hZPW0KQ09ORklHX05GX0RVUF9O
RVRERVY9bQpDT05GSUdfTkZUX0RVUF9ORVRERVY9bQpDT05GSUdfTkZUX0ZXRF9ORVRERVY9
bQpDT05GSUdfTkZUX0ZJQl9ORVRERVY9bQpDT05GSUdfTkZUX1JFSkVDVF9ORVRERVY9bQpD
T05GSUdfTkZfRkxPV19UQUJMRV9JTkVUPW0KQ09ORklHX05GX0ZMT1dfVEFCTEU9bQpDT05G
SUdfTkVURklMVEVSX1hUQUJMRVM9bQoKIwojIFh0YWJsZXMgY29tYmluZWQgbW9kdWxlcwoj
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFSSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1B
Uks9bQpDT05GSUdfTkVURklMVEVSX1hUX1NFVD1tCgojCiMgWHRhYmxlcyB0YXJnZXRzCiMK
Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQVVESVQ9bQpDT05GSUdfTkVURklMVEVSX1hU
X1RBUkdFVF9DSEVDS1NVTT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZ
PW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQpDT05GSUdfTkVURklM
VEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VU
X0NUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCkNPTkZJR19ORVRGSUxU
RVJfWFRfVEFSR0VUX0hMPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bQpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bQpDT05GSUdfTkVURklMVEVS
X1hUX1RBUkdFVF9MRUQ9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bQpDT05G
SUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9OQVQ9
bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORVRNQVA9bQpDT05GSUdfTkVURklMVEVS
X1hUX1RBUkdFVF9ORkxPRz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9
bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9UQVJHRVRfUkFURUVTVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JFRElS
RUNUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19O
RVRGSUxURVJfWFRfVEFSR0VUX1RFRT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQ
Uk9YWT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RD
UE1TUz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KCiMKIyBY
dGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0FERFJUWVBFPW0K
Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEY9bQpDT05GSUdfTkVURklMVEVSX1hUX01B
VENIX0NHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUj1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFU
Q0hfQ09OTkJZVEVTPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTEFCRUw9bQpD
T05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfTUFUQ0hfQ09OTk1BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFD
Sz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ1BVPW0KQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9EQ0NQPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ERVZHUk9VUD1tCkNP
TkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFU
Q0hfRUNOPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQpDT05GSUdfTkVURklM
VEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVM
UEVSPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfTUFUQ0hfSVBDT01QPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0K
Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZTPW0KQ09ORklHX05FVEZJTFRFUl9YVF9N
QVRDSF9MMlRQPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQpDT05GSUdf
TkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9N
QUM9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQpDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX01VTFRJUE9SVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTkZBQ0NU
PW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0Y9bQpDT05GSUdfTkVURklMVEVSX1hU
X01BVENIX09XTkVSPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQpDT05G
SUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9bQpDT05GSUdfTkVURklMVEVSX1hUX01B
VENIX1BLVFRZUEU9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KQ09ORklH
X05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRD
SF9SRUFMTT1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UPW0KQ09ORklHX05F
VEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TT0NL
RVQ9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9TVEFUSVNUSUM9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklO
Rz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9USU1FPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQojIGVu
ZCBvZiBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCgpDT05GSUdfSVBfU0VUPW0KQ09O
RklHX0lQX1NFVF9NQVg9MjU2CkNPTkZJR19JUF9TRVRfQklUTUFQX0lQPW0KQ09ORklHX0lQ
X1NFVF9CSVRNQVBfSVBNQUM9bQpDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KQ09ORklH
X0lQX1NFVF9IQVNIX0lQPW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCkNPTkZJR19J
UF9TRVRfSEFTSF9JUFBPUlQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQpDT05G
SUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFDPW0K
Q09ORklHX0lQX1NFVF9IQVNIX01BQz1tCkNPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUTkVU
PW0KQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCkNPTkZJR19JUF9TRVRfSEFTSF9ORVRORVQ9
bQpDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVD1tCkNPTkZJR19JUF9TRVRfSEFTSF9ORVRJ
RkFDRT1tCkNPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQpDT05GSUdfSVBfVlM9bQpDT05GSUdf
SVBfVlNfSVBWNj15CiMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lQ
X1ZTX1RBQl9CSVRTPTE1CgojCiMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxh
bmNpbmcgc3VwcG9ydAojCkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQpDT05GSUdfSVBfVlNf
UFJPVE9fVURQPXkKQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUD15CkNPTkZJR19JUF9WU19Q
Uk9UT19FU1A9eQpDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQpDT05GSUdfSVBfVlNfUFJPVE9f
U0NUUD15CgojCiMgSVBWUyBzY2hlZHVsZXIKIwpDT05GSUdfSVBfVlNfUlI9bQpDT05GSUdf
SVBfVlNfV1JSPW0KQ09ORklHX0lQX1ZTX0xDPW0KQ09ORklHX0lQX1ZTX1dMQz1tCkNPTkZJ
R19JUF9WU19GTz1tCkNPTkZJR19JUF9WU19PVkY9bQpDT05GSUdfSVBfVlNfTEJMQz1tCkNP
TkZJR19JUF9WU19MQkxDUj1tCkNPTkZJR19JUF9WU19ESD1tCkNPTkZJR19JUF9WU19TSD1t
CkNPTkZJR19JUF9WU19NSD1tCkNPTkZJR19JUF9WU19TRUQ9bQpDT05GSUdfSVBfVlNfTlE9
bQpDT05GSUdfSVBfVlNfVFdPUz1tCgojCiMgSVBWUyBTSCBzY2hlZHVsZXIKIwpDT05GSUdf
SVBfVlNfU0hfVEFCX0JJVFM9OAoKIwojIElQVlMgTUggc2NoZWR1bGVyCiMKQ09ORklHX0lQ
X1ZTX01IX1RBQl9JTkRFWD0xMgoKIwojIElQVlMgYXBwbGljYXRpb24gaGVscGVyCiMKQ09O
RklHX0lQX1ZTX0ZUUD1tCkNPTkZJR19JUF9WU19ORkNUPXkKQ09ORklHX0lQX1ZTX1BFX1NJ
UD1tCgojCiMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklHX05GX0RFRlJB
R19JUFY0PW0KQ09ORklHX05GX1NPQ0tFVF9JUFY0PW0KQ09ORklHX05GX1RQUk9YWV9JUFY0
PW0KQ09ORklHX05GX1RBQkxFU19JUFY0PXkKQ09ORklHX05GVF9SRUpFQ1RfSVBWND1tCkNP
TkZJR19ORlRfRFVQX0lQVjQ9bQpDT05GSUdfTkZUX0ZJQl9JUFY0PW0KQ09ORklHX05GX1RB
QkxFU19BUlA9eQpDT05GSUdfTkZfRkxPV19UQUJMRV9JUFY0PW0KQ09ORklHX05GX0RVUF9J
UFY0PW0KQ09ORklHX05GX0xPR19BUlA9bQpDT05GSUdfTkZfTE9HX0lQVjQ9bQpDT05GSUdf
TkZfUkVKRUNUX0lQVjQ9bQpDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQpDT05GSUdfTkZf
TkFUX1BQVFA9bQpDT05GSUdfTkZfTkFUX0gzMjM9bQpDT05GSUdfSVBfTkZfSVBUQUJMRVM9
bQpDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQpDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KQ09O
RklHX0lQX05GX01BVENIX1JQRklMVEVSPW0KQ09ORklHX0lQX05GX01BVENIX1RUTD1tCkNP
TkZJR19JUF9ORl9GSUxURVI9bQpDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCkNPTkZJ
R19JUF9ORl9UQVJHRVRfU1lOUFJPWFk9bQpDT05GSUdfSVBfTkZfTkFUPW0KQ09ORklHX0lQ
X05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQpD
T05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KQ09ORklHX0lQX05GX01BTkdMRT1tCkNP
TkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KQ09ORklHX0lQX05GX1RBUkdFVF9FQ049
bQpDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCkNPTkZJR19JUF9ORl9SQVc9bQpDT05GSUdf
SVBfTkZfU0VDVVJJVFk9bQpDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KQ09ORklHX0lQX05G
X0FSUEZJTFRFUj1tCkNPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIyBlbmQgb2YgSVA6IE5l
dGZpbHRlciBDb25maWd1cmF0aW9uCgojCiMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRp
b24KIwpDT05GSUdfTkZfU09DS0VUX0lQVjY9bQpDT05GSUdfTkZfVFBST1hZX0lQVjY9bQpD
T05GSUdfTkZfVEFCTEVTX0lQVjY9eQpDT05GSUdfTkZUX1JFSkVDVF9JUFY2PW0KQ09ORklH
X05GVF9EVVBfSVBWNj1tCkNPTkZJR19ORlRfRklCX0lQVjY9bQpDT05GSUdfTkZfRkxPV19U
QUJMRV9JUFY2PW0KQ09ORklHX05GX0RVUF9JUFY2PW0KQ09ORklHX05GX1JFSkVDVF9JUFY2
PW0KQ09ORklHX05GX0xPR19JUFY2PW0KQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCkNPTkZJ
R19JUDZfTkZfTUFUQ0hfQUg9bQpDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KQ09ORklH
X0lQNl9ORl9NQVRDSF9GUkFHPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KQ09ORklH
X0lQNl9ORl9NQVRDSF9ITD1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfTUg9bQpDT05GSUdfSVA2X05GX01BVENIX1JQRklMVEVSPW0K
Q09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfU1JIPW0KQ09O
RklHX0lQNl9ORl9UQVJHRVRfSEw9bQpDT05GSUdfSVA2X05GX0ZJTFRFUj1tCkNPTkZJR19J
UDZfTkZfVEFSR0VUX1JFSkVDVD1tCkNPTkZJR19JUDZfTkZfVEFSR0VUX1NZTlBST1hZPW0K
Q09ORklHX0lQNl9ORl9NQU5HTEU9bQpDT05GSUdfSVA2X05GX1JBVz1tCkNPTkZJR19JUDZf
TkZfU0VDVVJJVFk9bQpDT05GSUdfSVA2X05GX05BVD1tCkNPTkZJR19JUDZfTkZfVEFSR0VU
X01BU1FVRVJBREU9bQpDT05GSUdfSVA2X05GX1RBUkdFVF9OUFQ9bQojIGVuZCBvZiBJUHY2
OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgoKQ09ORklHX05GX0RFRlJBR19JUFY2PW0KQ09O
RklHX05GX1RBQkxFU19CUklER0U9bQpDT05GSUdfTkZUX0JSSURHRV9NRVRBPW0KQ09ORklH
X05GVF9CUklER0VfUkVKRUNUPW0KQ09ORklHX05GX0xPR19CUklER0U9bQpDT05GSUdfTkZf
Q09OTlRSQUNLX0JSSURHRT1tCkNPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQpDT05GSUdf
QlJJREdFX0VCVF9CUk9VVEU9bQpDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCkNPTkZJ
R19CUklER0VfRUJUX1RfTkFUPW0KQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQpDT05GSUdf
QlJJREdFX0VCVF9BTU9ORz1tCkNPTkZJR19CUklER0VfRUJUX0FSUD1tCkNPTkZJR19CUklE
R0VfRUJUX0lQPW0KQ09ORklHX0JSSURHRV9FQlRfSVA2PW0KQ09ORklHX0JSSURHRV9FQlRf
TElNSVQ9bQpDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KQ09ORklHX0JSSURHRV9FQlRfUEtU
VFlQRT1tCkNPTkZJR19CUklER0VfRUJUX1NUUD1tCkNPTkZJR19CUklER0VfRUJUX1ZMQU49
bQpDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCkNPTkZJR19CUklER0VfRUJUX0ROQVQ9
bQpDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQpDT05GSUdfQlJJREdFX0VCVF9SRURJUkVD
VD1tCkNPTkZJR19CUklER0VfRUJUX1NOQVQ9bQpDT05GSUdfQlJJREdFX0VCVF9MT0c9bQpD
T05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCiMgQ09ORklHX0JQRklMVEVSIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkNPTkZJR19JUF9TQ1RQPW0KIyBDT05GSUdf
U0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJ
RV9ITUFDX01ENSBpcyBub3Qgc2V0CkNPTkZJR19TQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNf
U0hBMT15CiMgQ09ORklHX1NDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FIGlzIG5vdCBz
ZXQKQ09ORklHX1NDVFBfQ09PS0lFX0hNQUNfTUQ1PXkKQ09ORklHX1NDVFBfQ09PS0lFX0hN
QUNfU0hBMT15CkNPTkZJR19JTkVUX1NDVFBfRElBRz1tCkNPTkZJR19SRFM9bQpDT05GSUdf
UkRTX1JETUE9bQpDT05GSUdfUkRTX1RDUD1tCiMgQ09ORklHX1JEU19ERUJVRyBpcyBub3Qg
c2V0CkNPTkZJR19USVBDPW0KQ09ORklHX1RJUENfTUVESUFfSUI9eQpDT05GSUdfVElQQ19N
RURJQV9VRFA9eQpDT05GSUdfVElQQ19DUllQVE89eQpDT05GSUdfVElQQ19ESUFHPW0KQ09O
RklHX0FUTT1tCkNPTkZJR19BVE1fQ0xJUD1tCiMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAg
aXMgbm90IHNldApDT05GSUdfQVRNX0xBTkU9bQpDT05GSUdfQVRNX01QT0E9bQpDT05GSUdf
QVRNX0JSMjY4ND1tCiMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldApD
T05GSUdfTDJUUD1tCkNPTkZJR19MMlRQX0RFQlVHRlM9bQpDT05GSUdfTDJUUF9WMz15CkNP
TkZJR19MMlRQX0lQPW0KQ09ORklHX0wyVFBfRVRIPW0KQ09ORklHX1NUUD1tCkNPTkZJR19H
QVJQPW0KQ09ORklHX01SUD1tCkNPTkZJR19CUklER0U9bQpDT05GSUdfQlJJREdFX0lHTVBf
U05PT1BJTkc9eQpDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HPXkKQ09ORklHX0JSSURH
RV9NUlA9eQpDT05GSUdfQlJJREdFX0NGTT15CkNPTkZJR19IQVZFX05FVF9EU0E9eQpDT05G
SUdfTkVUX0RTQT1tCkNPTkZJR19ORVRfRFNBX1RBR184MDIxUT1tCkNPTkZJR19ORVRfRFNB
X1RBR19BUjkzMzE9bQpDT05GSUdfTkVUX0RTQV9UQUdfQlJDTV9DT01NT049bQpDT05GSUdf
TkVUX0RTQV9UQUdfQlJDTT1tCkNPTkZJR19ORVRfRFNBX1RBR19CUkNNX1BSRVBFTkQ9bQpD
T05GSUdfTkVUX0RTQV9UQUdfSEVMTENSRUVLPW0KQ09ORklHX05FVF9EU0FfVEFHX0dTV0lQ
PW0KQ09ORklHX05FVF9EU0FfVEFHX0RTQV9DT01NT049bQpDT05GSUdfTkVUX0RTQV9UQUdf
RFNBPW0KQ09ORklHX05FVF9EU0FfVEFHX0VEU0E9bQpDT05GSUdfTkVUX0RTQV9UQUdfTVRL
PW0KQ09ORklHX05FVF9EU0FfVEFHX0tTWj1tCkNPTkZJR19ORVRfRFNBX1RBR19SVEw0X0E9
bQpDT05GSUdfTkVUX0RTQV9UQUdfT0NFTE9UPW0KQ09ORklHX05FVF9EU0FfVEFHX09DRUxP
VF84MDIxUT1tCkNPTkZJR19ORVRfRFNBX1RBR19RQ0E9bQpDT05GSUdfTkVUX0RTQV9UQUdf
TEFOOTMwMz1tCkNPTkZJR19ORVRfRFNBX1RBR19TSkExMTA1PW0KQ09ORklHX05FVF9EU0Ff
VEFHX1RSQUlMRVI9bQpDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWD1tCkNPTkZJR19WTEFO
XzgwMjFRPW0KQ09ORklHX1ZMQU5fODAyMVFfR1ZSUD15CkNPTkZJR19WTEFOXzgwMjFRX01W
UlA9eQojIENPTkZJR19ERUNORVQgaXMgbm90IHNldApDT05GSUdfTExDPW0KQ09ORklHX0xM
QzI9bQpDT05GSUdfQVRBTEs9bQpDT05GSUdfREVWX0FQUExFVEFMSz1tCkNPTkZJR19JUERE
UD1tCkNPTkZJR19JUEREUF9FTkNBUD15CiMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiMgQ09O
RklHX0xBUEIgaXMgbm90IHNldApDT05GSUdfUEhPTkVUPW0KQ09ORklHXzZMT1dQQU49bQpD
T05GSUdfNkxPV1BBTl9ERUJVR0ZTPXkKQ09ORklHXzZMT1dQQU5fTkhDPW0KQ09ORklHXzZM
T1dQQU5fTkhDX0RFU1Q9bQpDT05GSUdfNkxPV1BBTl9OSENfRlJBR01FTlQ9bQpDT05GSUdf
NkxPV1BBTl9OSENfSE9QPW0KQ09ORklHXzZMT1dQQU5fTkhDX0lQVjY9bQpDT05GSUdfNkxP
V1BBTl9OSENfTU9CSUxJVFk9bQpDT05GSUdfNkxPV1BBTl9OSENfUk9VVElORz1tCkNPTkZJ
R182TE9XUEFOX05IQ19VRFA9bQpDT05GSUdfNkxPV1BBTl9HSENfRVhUX0hEUl9IT1A9bQpD
T05GSUdfNkxPV1BBTl9HSENfVURQPW0KQ09ORklHXzZMT1dQQU5fR0hDX0lDTVBWNj1tCkNP
TkZJR182TE9XUEFOX0dIQ19FWFRfSERSX0RFU1Q9bQpDT05GSUdfNkxPV1BBTl9HSENfRVhU
X0hEUl9GUkFHPW0KQ09ORklHXzZMT1dQQU5fR0hDX0VYVF9IRFJfUk9VVEU9bQpDT05GSUdf
SUVFRTgwMjE1ND1tCkNPTkZJR19JRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTD15
CkNPTkZJR19JRUVFODAyMTU0X1NPQ0tFVD1tCkNPTkZJR19JRUVFODAyMTU0XzZMT1dQQU49
bQpDT05GSUdfTUFDODAyMTU0PW0KQ09ORklHX05FVF9TQ0hFRD15CgojCiMgUXVldWVpbmcv
U2NoZWR1bGluZwojCkNPTkZJR19ORVRfU0NIX0NCUT1tCkNPTkZJR19ORVRfU0NIX0hUQj1t
CkNPTkZJR19ORVRfU0NIX0hGU0M9bQpDT05GSUdfTkVUX1NDSF9BVE09bQpDT05GSUdfTkVU
X1NDSF9QUklPPW0KQ09ORklHX05FVF9TQ0hfTVVMVElRPW0KQ09ORklHX05FVF9TQ0hfUkVE
PW0KQ09ORklHX05FVF9TQ0hfU0ZCPW0KQ09ORklHX05FVF9TQ0hfU0ZRPW0KQ09ORklHX05F
VF9TQ0hfVEVRTD1tCkNPTkZJR19ORVRfU0NIX1RCRj1tCkNPTkZJR19ORVRfU0NIX0NCUz1t
CkNPTkZJR19ORVRfU0NIX0VURj1tCkNPTkZJR19ORVRfU0NIX1RBUFJJTz1tCkNPTkZJR19O
RVRfU0NIX0dSRUQ9bQpDT05GSUdfTkVUX1NDSF9EU01BUks9bQpDT05GSUdfTkVUX1NDSF9O
RVRFTT1tCkNPTkZJR19ORVRfU0NIX0RSUj1tCkNPTkZJR19ORVRfU0NIX01RUFJJTz1tCkNP
TkZJR19ORVRfU0NIX1NLQlBSSU89bQpDT05GSUdfTkVUX1NDSF9DSE9LRT1tCkNPTkZJR19O
RVRfU0NIX1FGUT1tCkNPTkZJR19ORVRfU0NIX0NPREVMPW0KQ09ORklHX05FVF9TQ0hfRlFf
Q09ERUw9eQpDT05GSUdfTkVUX1NDSF9DQUtFPW0KQ09ORklHX05FVF9TQ0hfRlE9bQpDT05G
SUdfTkVUX1NDSF9ISEY9bQpDT05GSUdfTkVUX1NDSF9QSUU9bQpDT05GSUdfTkVUX1NDSF9G
UV9QSUU9bQpDT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KQ09ORklHX05FVF9TQ0hfUExVRz1t
CkNPTkZJR19ORVRfU0NIX0VUUz1tCkNPTkZJR19ORVRfU0NIX0RFRkFVTFQ9eQojIENPTkZJ
R19ERUZBVUxUX0ZRIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9DT0RFTCBpcyBub3Qg
c2V0CkNPTkZJR19ERUZBVUxUX0ZRX0NPREVMPXkKIyBDT05GSUdfREVGQVVMVF9GUV9QSUUg
aXMgbm90IHNldAojIENPTkZJR19ERUZBVUxUX1NGUSBpcyBub3Qgc2V0CiMgQ09ORklHX0RF
RkFVTFRfUEZJRk9fRkFTVCBpcyBub3Qgc2V0CkNPTkZJR19ERUZBVUxUX05FVF9TQ0g9ImZx
X2NvZGVsIgoKIwojIENsYXNzaWZpY2F0aW9uCiMKQ09ORklHX05FVF9DTFM9eQpDT05GSUdf
TkVUX0NMU19CQVNJQz1tCkNPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQpDT05GSUdfTkVUX0NM
U19ST1VURTQ9bQpDT05GSUdfTkVUX0NMU19GVz1tCkNPTkZJR19ORVRfQ0xTX1UzMj1tCkNP
TkZJR19DTFNfVTMyX1BFUkY9eQpDT05GSUdfQ0xTX1UzMl9NQVJLPXkKQ09ORklHX05FVF9D
TFNfUlNWUD1tCkNPTkZJR19ORVRfQ0xTX1JTVlA2PW0KQ09ORklHX05FVF9DTFNfRkxPVz1t
CkNPTkZJR19ORVRfQ0xTX0NHUk9VUD1tCkNPTkZJR19ORVRfQ0xTX0JQRj1tCkNPTkZJR19O
RVRfQ0xTX0ZMT1dFUj1tCkNPTkZJR19ORVRfQ0xTX01BVENIQUxMPW0KQ09ORklHX05FVF9F
TUFUQ0g9eQpDT05GSUdfTkVUX0VNQVRDSF9TVEFDSz0zMgpDT05GSUdfTkVUX0VNQVRDSF9D
TVA9bQpDT05GSUdfTkVUX0VNQVRDSF9OQllURT1tCkNPTkZJR19ORVRfRU1BVENIX1UzMj1t
CkNPTkZJR19ORVRfRU1BVENIX01FVEE9bQpDT05GSUdfTkVUX0VNQVRDSF9URVhUPW0KQ09O
RklHX05FVF9FTUFUQ0hfQ0FOSUQ9bQpDT05GSUdfTkVUX0VNQVRDSF9JUFNFVD1tCkNPTkZJ
R19ORVRfRU1BVENIX0lQVD1tCkNPTkZJR19ORVRfQ0xTX0FDVD15CkNPTkZJR19ORVRfQUNU
X1BPTElDRT1tCkNPTkZJR19ORVRfQUNUX0dBQ1Q9bQpDT05GSUdfR0FDVF9QUk9CPXkKQ09O
RklHX05FVF9BQ1RfTUlSUkVEPW0KQ09ORklHX05FVF9BQ1RfU0FNUExFPW0KQ09ORklHX05F
VF9BQ1RfSVBUPW0KQ09ORklHX05FVF9BQ1RfTkFUPW0KQ09ORklHX05FVF9BQ1RfUEVESVQ9
bQpDT05GSUdfTkVUX0FDVF9TSU1QPW0KQ09ORklHX05FVF9BQ1RfU0tCRURJVD1tCkNPTkZJ
R19ORVRfQUNUX0NTVU09bQpDT05GSUdfTkVUX0FDVF9NUExTPW0KQ09ORklHX05FVF9BQ1Rf
VkxBTj1tCkNPTkZJR19ORVRfQUNUX0JQRj1tCkNPTkZJR19ORVRfQUNUX0NPTk5NQVJLPW0K
Q09ORklHX05FVF9BQ1RfQ1RJTkZPPW0KQ09ORklHX05FVF9BQ1RfU0tCTU9EPW0KQ09ORklH
X05FVF9BQ1RfSUZFPW0KQ09ORklHX05FVF9BQ1RfVFVOTkVMX0tFWT1tCkNPTkZJR19ORVRf
QUNUX0NUPW0KQ09ORklHX05FVF9BQ1RfR0FURT1tCkNPTkZJR19ORVRfSUZFX1NLQk1BUks9
bQpDT05GSUdfTkVUX0lGRV9TS0JQUklPPW0KQ09ORklHX05FVF9JRkVfU0tCVENJTkRFWD1t
CkNPTkZJR19ORVRfVENfU0tCX0VYVD15CkNPTkZJR19ORVRfU0NIX0ZJRk89eQpDT05GSUdf
RENCPXkKQ09ORklHX0ROU19SRVNPTFZFUj1tCkNPTkZJR19CQVRNQU5fQURWPW0KQ09ORklH
X0JBVE1BTl9BRFZfQkFUTUFOX1Y9eQpDT05GSUdfQkFUTUFOX0FEVl9CTEE9eQpDT05GSUdf
QkFUTUFOX0FEVl9EQVQ9eQpDT05GSUdfQkFUTUFOX0FEVl9OQz15CkNPTkZJR19CQVRNQU5f
QURWX01DQVNUPXkKIyBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0JBVE1BTl9BRFZfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19PUEVOVlNXSVRDSD1t
CkNPTkZJR19PUEVOVlNXSVRDSF9HUkU9bQpDT05GSUdfT1BFTlZTV0lUQ0hfVlhMQU49bQpD
T05GSUdfT1BFTlZTV0lUQ0hfR0VORVZFPW0KQ09ORklHX1ZTT0NLRVRTPW0KQ09ORklHX1ZT
T0NLRVRTX0RJQUc9bQpDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0s9bQpDT05GSUdfVk1XQVJF
X1ZNQ0lfVlNPQ0tFVFM9bQpDT05GSUdfVklSVElPX1ZTT0NLRVRTPW0KQ09ORklHX1ZJUlRJ
T19WU09DS0VUU19DT01NT049bQpDT05GSUdfSFlQRVJWX1ZTT0NLRVRTPW0KQ09ORklHX05F
VExJTktfRElBRz1tCkNPTkZJR19NUExTPXkKQ09ORklHX05FVF9NUExTX0dTTz1tCkNPTkZJ
R19NUExTX1JPVVRJTkc9bQpDT05GSUdfTVBMU19JUFRVTk5FTD1tCkNPTkZJR19ORVRfTlNI
PW0KQ09ORklHX0hTUj1tCkNPTkZJR19ORVRfU1dJVENIREVWPXkKQ09ORklHX05FVF9MM19N
QVNURVJfREVWPXkKQ09ORklHX1FSVFI9bQpDT05GSUdfUVJUUl9TTUQ9bQpDT05GSUdfUVJU
Ul9UVU49bQpDT05GSUdfUVJUUl9NSEk9bQpDT05GSUdfTkVUX05DU0k9eQpDT05GSUdfTkNT
SV9PRU1fQ01EX0dFVF9NQUM9eQpDT05GSUdfUlBTPXkKQ09ORklHX1JGU19BQ0NFTD15CkNP
TkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkc9eQpDT05GSUdfWFBTPXkKQ09ORklHX0NHUk9V
UF9ORVRfUFJJTz15CkNPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQ9eQpDT05GSUdfTkVUX1JY
X0JVU1lfUE9MTD15CkNPTkZJR19CUUw9eQpDT05GSUdfQlBGX0pJVD15CkNPTkZJR19CUEZf
U1RSRUFNX1BBUlNFUj15CkNPTkZJR19ORVRfRkxPV19MSU1JVD15CgojCiMgTmV0d29yayB0
ZXN0aW5nCiMKQ09ORklHX05FVF9QS1RHRU49bQpDT05GSUdfTkVUX0RST1BfTU9OSVRPUj15
CiMgZW5kIG9mIE5ldHdvcmsgdGVzdGluZwojIGVuZCBvZiBOZXR3b3JraW5nIG9wdGlvbnMK
CkNPTkZJR19IQU1SQURJTz15CgojCiMgUGFja2V0IFJhZGlvIHByb3RvY29scwojCkNPTkZJ
R19BWDI1PW0KQ09ORklHX0FYMjVfREFNQV9TTEFWRT15CkNPTkZJR19ORVRST009bQpDT05G
SUdfUk9TRT1tCgojCiMgQVguMjUgbmV0d29yayBkZXZpY2UgZHJpdmVycwojCkNPTkZJR19N
S0lTUz1tCkNPTkZJR182UEFDSz1tCkNPTkZJR19CUFFFVEhFUj1tCkNPTkZJR19CQVlDT01f
U0VSX0ZEWD1tCkNPTkZJR19CQVlDT01fU0VSX0hEWD1tCkNPTkZJR19CQVlDT01fUEFSPW0K
Q09ORklHX1lBTT1tCiMgZW5kIG9mIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKCkNP
TkZJR19DQU49bQpDT05GSUdfQ0FOX1JBVz1tCkNPTkZJR19DQU5fQkNNPW0KQ09ORklHX0NB
Tl9HVz1tCkNPTkZJR19DQU5fSjE5Mzk9bQpDT05GSUdfQ0FOX0lTT1RQPW0KCiMKIyBDQU4g
RGV2aWNlIERyaXZlcnMKIwpDT05GSUdfQ0FOX1ZDQU49bQpDT05GSUdfQ0FOX1ZYQ0FOPW0K
Q09ORklHX0NBTl9TTENBTj1tCkNPTkZJR19DQU5fREVWPW0KQ09ORklHX0NBTl9DQUxDX0JJ
VFRJTUlORz15CkNPTkZJR19DQU5fSkFOWl9JQ0FOMz1tCkNPTkZJR19DQU5fS1ZBU0VSX1BD
SUVGRD1tCkNPTkZJR19DQU5fQ19DQU49bQpDT05GSUdfQ0FOX0NfQ0FOX1BMQVRGT1JNPW0K
Q09ORklHX0NBTl9DX0NBTl9QQ0k9bQpDT05GSUdfQ0FOX0NDNzcwPW0KIyBDT05GSUdfQ0FO
X0NDNzcwX0lTQSBpcyBub3Qgc2V0CkNPTkZJR19DQU5fQ0M3NzBfUExBVEZPUk09bQpDT05G
SUdfQ0FOX0lGSV9DQU5GRD1tCkNPTkZJR19DQU5fTV9DQU49bQpDT05GSUdfQ0FOX01fQ0FO
X1BDST1tCkNPTkZJR19DQU5fTV9DQU5fUExBVEZPUk09bQpDT05GSUdfQ0FOX01fQ0FOX1RD
QU40WDVYPW0KQ09ORklHX0NBTl9QRUFLX1BDSUVGRD1tCkNPTkZJR19DQU5fU0pBMTAwMD1t
CkNPTkZJR19DQU5fRU1TX1BDST1tCiMgQ09ORklHX0NBTl9FTVNfUENNQ0lBIGlzIG5vdCBz
ZXQKQ09ORklHX0NBTl9GODE2MDE9bQpDT05GSUdfQ0FOX0tWQVNFUl9QQ0k9bQpDT05GSUdf
Q0FOX1BFQUtfUENJPW0KQ09ORklHX0NBTl9QRUFLX1BDSUVDPXkKQ09ORklHX0NBTl9QRUFL
X1BDTUNJQT1tCkNPTkZJR19DQU5fUExYX1BDST1tCiMgQ09ORklHX0NBTl9TSkExMDAwX0lT
QSBpcyBub3Qgc2V0CkNPTkZJR19DQU5fU0pBMTAwMF9QTEFURk9STT1tCkNPTkZJR19DQU5f
U09GVElORz1tCkNPTkZJR19DQU5fU09GVElOR19DUz1tCgojCiMgQ0FOIFNQSSBpbnRlcmZh
Y2VzCiMKQ09ORklHX0NBTl9ISTMxMVg9bQpDT05GSUdfQ0FOX01DUDI1MVg9bQpDT05GSUdf
Q0FOX01DUDI1MVhGRD1tCiMgQ09ORklHX0NBTl9NQ1AyNTFYRkRfU0FOSVRZIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgQ0FOIFNQSSBpbnRlcmZhY2VzCgojCiMgQ0FOIFVTQiBpbnRlcmZhY2Vz
CiMKQ09ORklHX0NBTl84REVWX1VTQj1tCkNPTkZJR19DQU5fRU1TX1VTQj1tCkNPTkZJR19D
QU5fRVNEX1VTQjI9bQpDT05GSUdfQ0FOX0dTX1VTQj1tCkNPTkZJR19DQU5fS1ZBU0VSX1VT
Qj1tCkNPTkZJR19DQU5fTUNCQV9VU0I9bQpDT05GSUdfQ0FOX1BFQUtfVVNCPW0KQ09ORklH
X0NBTl9VQ0FOPW0KIyBlbmQgb2YgQ0FOIFVTQiBpbnRlcmZhY2VzCgojIENPTkZJR19DQU5f
REVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CiMgZW5kIG9mIENBTiBEZXZpY2UgRHJpdmVycwoK
Q09ORklHX0JUPW0KQ09ORklHX0JUX0JSRURSPXkKQ09ORklHX0JUX1JGQ09NTT1tCkNPTkZJ
R19CVF9SRkNPTU1fVFRZPXkKQ09ORklHX0JUX0JORVA9bQpDT05GSUdfQlRfQk5FUF9NQ19G
SUxURVI9eQpDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQpDT05GSUdfQlRfQ01UUD1t
CkNPTkZJR19CVF9ISURQPW0KIyBDT05GSUdfQlRfSFMgaXMgbm90IHNldApDT05GSUdfQlRf
TEU9eQpDT05GSUdfQlRfNkxPV1BBTj1tCkNPTkZJR19CVF9MRURTPXkKQ09ORklHX0JUX01T
RlRFWFQ9eQpDT05GSUdfQlRfREVCVUdGUz15CiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5v
dCBzZXQKCiMKIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdfQlRfSU5URUw9
bQpDT05GSUdfQlRfQkNNPW0KQ09ORklHX0JUX1JUTD1tCkNPTkZJR19CVF9RQ0E9bQpDT05G
SUdfQlRfSENJQlRVU0I9bQpDT05GSUdfQlRfSENJQlRVU0JfQVVUT1NVU1BFTkQ9eQpDT05G
SUdfQlRfSENJQlRVU0JfQkNNPXkKQ09ORklHX0JUX0hDSUJUVVNCX01USz15CkNPTkZJR19C
VF9IQ0lCVFVTQl9SVEw9eQpDT05GSUdfQlRfSENJQlRTRElPPW0KQ09ORklHX0JUX0hDSVVB
UlQ9bQpDT05GSUdfQlRfSENJVUFSVF9TRVJERVY9eQpDT05GSUdfQlRfSENJVUFSVF9IND15
CkNPTkZJR19CVF9IQ0lVQVJUX05PS0lBPW0KQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CkNP
TkZJR19CVF9IQ0lVQVJUX0FUSDNLPXkKQ09ORklHX0JUX0hDSVVBUlRfTEw9eQpDT05GSUdf
QlRfSENJVUFSVF8zV0lSRT15CkNPTkZJR19CVF9IQ0lVQVJUX0lOVEVMPXkKQ09ORklHX0JU
X0hDSVVBUlRfQkNNPXkKQ09ORklHX0JUX0hDSVVBUlRfUlRMPXkKQ09ORklHX0JUX0hDSVVB
UlRfUUNBPXkKQ09ORklHX0JUX0hDSVVBUlRfQUc2WFg9eQpDT05GSUdfQlRfSENJVUFSVF9N
UlZMPXkKQ09ORklHX0JUX0hDSUJDTTIwM1g9bQpDT05GSUdfQlRfSENJQlBBMTBYPW0KQ09O
RklHX0JUX0hDSUJGVVNCPW0KQ09ORklHX0JUX0hDSURUTDE9bQpDT05GSUdfQlRfSENJQlQz
Qz1tCkNPTkZJR19CVF9IQ0lCTFVFQ0FSRD1tCkNPTkZJR19CVF9IQ0lWSENJPW0KQ09ORklH
X0JUX01SVkw9bQpDT05GSUdfQlRfTVJWTF9TRElPPW0KQ09ORklHX0JUX0FUSDNLPW0KQ09O
RklHX0JUX01US1NESU89bQpDT05GSUdfQlRfTVRLVUFSVD1tCkNPTkZJR19CVF9IQ0lSU0k9
bQojIGVuZCBvZiBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKCkNPTkZJR19BRl9SWFJQQz1t
CkNPTkZJR19BRl9SWFJQQ19JUFY2PXkKIyBDT05GSUdfQUZfUlhSUENfSU5KRUNUX0xPU1Mg
aXMgbm90IHNldApDT05GSUdfQUZfUlhSUENfREVCVUc9eQpDT05GSUdfUlhLQUQ9eQpDT05G
SUdfQUZfS0NNPW0KQ09ORklHX1NUUkVBTV9QQVJTRVI9eQpDT05GSUdfRklCX1JVTEVTPXkK
Q09ORklHX1dJUkVMRVNTPXkKQ09ORklHX1dJUkVMRVNTX0VYVD15CkNPTkZJR19XRVhUX0NP
UkU9eQpDT05GSUdfV0VYVF9QUk9DPXkKQ09ORklHX1dFWFRfU1BZPXkKQ09ORklHX1dFWFRf
UFJJVj15CkNPTkZJR19DRkc4MDIxMT1tCiMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMg
bm90IHNldAojIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNl
dApDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREI9eQpDT05GSUdfQ0ZHODAy
MTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTPXkKQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9
eQpDT05GSUdfQ0ZHODAyMTFfREVCVUdGUz15CkNPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBP
UlQ9eQpDT05GSUdfQ0ZHODAyMTFfV0VYVD15CkNPTkZJR19DRkc4MDIxMV9XRVhUX0VYUE9S
VD15CkNPTkZJR19MSUI4MDIxMT1tCkNPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9bQpDT05G
SUdfTElCODAyMTFfQ1JZUFRfQ0NNUD1tCkNPTkZJR19MSUI4MDIxMV9DUllQVF9US0lQPW0K
IyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTE9bQpD
T05GSUdfTUFDODAyMTFfSEFTX1JDPXkKQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkK
Q09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQpDT05GSUdfTUFDODAyMTFf
UkNfREVGQVVMVD0ibWluc3RyZWxfaHQiCkNPTkZJR19NQUM4MDIxMV9NRVNIPXkKQ09ORklH
X01BQzgwMjExX0xFRFM9eQpDT05GSUdfTUFDODAyMTFfREVCVUdGUz15CiMgQ09ORklHX01B
QzgwMjExX01FU1NBR0VfVFJBQ0lORyBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0RF
QlVHX01FTlUgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkU9
MApDT05GSUdfUkZLSUxMPW0KQ09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklHX1JGS0lMTF9J
TlBVVD15CkNPTkZJR19SRktJTExfR1BJTz1tCkNPTkZJR19ORVRfOVA9bQpDT05GSUdfTkVU
XzlQX1ZJUlRJTz1tCkNPTkZJR19ORVRfOVBfWEVOPW0KQ09ORklHX05FVF85UF9SRE1BPW0K
IyBDT05GSUdfTkVUXzlQX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FJRiBpcyBub3Qg
c2V0CkNPTkZJR19DRVBIX0xJQj1tCkNPTkZJR19DRVBIX0xJQl9QUkVUVFlERUJVRz15CkNP
TkZJR19DRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSPXkKQ09ORklHX05GQz1tCkNPTkZJR19O
RkNfRElHSVRBTD1tCkNPTkZJR19ORkNfTkNJPW0KQ09ORklHX05GQ19OQ0lfU1BJPW0KQ09O
RklHX05GQ19OQ0lfVUFSVD1tCkNPTkZJR19ORkNfSENJPW0KQ09ORklHX05GQ19TSERMQz15
CgojCiMgTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXMKIwpDT05GSUdf
TkZDX1RSRjc5NzBBPW0KQ09ORklHX05GQ19NRUlfUEhZPW0KQ09ORklHX05GQ19TSU09bQpD
T05GSUdfTkZDX1BPUlQxMDA9bQpDT05GSUdfTkZDX1ZJUlRVQUxfTkNJPW0KQ09ORklHX05G
Q19GRFA9bQpDT05GSUdfTkZDX0ZEUF9JMkM9bQpDT05GSUdfTkZDX1BONTQ0PW0KQ09ORklH
X05GQ19QTjU0NF9JMkM9bQpDT05GSUdfTkZDX1BONTQ0X01FST1tCkNPTkZJR19ORkNfUE41
MzM9bQpDT05GSUdfTkZDX1BONTMzX1VTQj1tCkNPTkZJR19ORkNfUE41MzNfSTJDPW0KQ09O
RklHX05GQ19QTjUzMl9VQVJUPW0KQ09ORklHX05GQ19NSUNST1JFQUQ9bQpDT05GSUdfTkZD
X01JQ1JPUkVBRF9JMkM9bQpDT05GSUdfTkZDX01JQ1JPUkVBRF9NRUk9bQpDT05GSUdfTkZD
X01SVkw9bQpDT05GSUdfTkZDX01SVkxfVVNCPW0KQ09ORklHX05GQ19NUlZMX1VBUlQ9bQpD
T05GSUdfTkZDX01SVkxfSTJDPW0KQ09ORklHX05GQ19NUlZMX1NQST1tCkNPTkZJR19ORkNf
U1QyMU5GQ0E9bQpDT05GSUdfTkZDX1NUMjFORkNBX0kyQz1tCkNPTkZJR19ORkNfU1RfTkNJ
PW0KQ09ORklHX05GQ19TVF9OQ0lfSTJDPW0KQ09ORklHX05GQ19TVF9OQ0lfU1BJPW0KQ09O
RklHX05GQ19OWFBfTkNJPW0KQ09ORklHX05GQ19OWFBfTkNJX0kyQz1tCkNPTkZJR19ORkNf
UzNGV1JONT1tCkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bQpDT05GSUdfTkZDX1MzRldSTjgy
X1VBUlQ9bQpDT05GSUdfTkZDX1NUOTVIRj1tCiMgZW5kIG9mIE5lYXIgRmllbGQgQ29tbXVu
aWNhdGlvbiAoTkZDKSBkZXZpY2VzCgpDT05GSUdfUFNBTVBMRT1tCkNPTkZJR19ORVRfSUZF
PW0KQ09ORklHX0xXVFVOTkVMPXkKQ09ORklHX0xXVFVOTkVMX0JQRj15CkNPTkZJR19EU1Rf
Q0FDSEU9eQpDT05GSUdfR1JPX0NFTExTPXkKQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVD15
CkNPTkZJR19ORVRfU09DS19NU0c9eQpDT05GSUdfTkVUX0RFVkxJTks9eQpDT05GSUdfUEFH
RV9QT09MPXkKQ09ORklHX0ZBSUxPVkVSPW0KQ09ORklHX0VUSFRPT0xfTkVUTElOSz15CkNP
TkZJR19IQVZFX0VCUEZfSklUPXkKCiMKIyBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19IQVZF
X0VJU0E9eQojIENPTkZJR19FSVNBIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfUENJPXkKQ09O
RklHX1BDST15CkNPTkZJR19QQ0lfRE9NQUlOUz15CkNPTkZJR19QQ0lFUE9SVEJVUz15CkNP
TkZJR19IT1RQTFVHX1BDSV9QQ0lFPXkKQ09ORklHX1BDSUVBRVI9eQpDT05GSUdfUENJRUFF
Ul9JTkpFQ1Q9bQpDT05GSUdfUENJRV9FQ1JDPXkKQ09ORklHX1BDSUVBU1BNPXkKQ09ORklH
X1BDSUVBU1BNX0RFRkFVTFQ9eQojIENPTkZJR19QQ0lFQVNQTV9QT1dFUlNBVkUgaXMgbm90
IHNldAojIENPTkZJR19QQ0lFQVNQTV9QT1dFUl9TVVBFUlNBVkUgaXMgbm90IHNldAojIENP
TkZJR19QQ0lFQVNQTV9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CkNPTkZJR19QQ0lFX1BNRT15
CkNPTkZJR19QQ0lFX0RQQz15CkNPTkZJR19QQ0lFX1BUTT15CkNPTkZJR19QQ0lFX0VEUj15
CkNPTkZJR19QQ0lfTVNJPXkKQ09ORklHX1BDSV9NU0lfSVJRX0RPTUFJTj15CkNPTkZJR19Q
Q0lfUVVJUktTPXkKIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJ
X1JFQUxMT0NfRU5BQkxFX0FVVE8gaXMgbm90IHNldApDT05GSUdfUENJX1NUVUI9eQpDT05G
SUdfUENJX1BGX1NUVUI9bQpDT05GSUdfWEVOX1BDSURFVl9GUk9OVEVORD1tCkNPTkZJR19Q
Q0lfQVRTPXkKQ09ORklHX1BDSV9MT0NLTEVTU19DT05GSUc9eQpDT05GSUdfUENJX0lPVj15
CkNPTkZJR19QQ0lfUFJJPXkKQ09ORklHX1BDSV9QQVNJRD15CkNPTkZJR19QQ0lfUDJQRE1B
PXkKQ09ORklHX1BDSV9MQUJFTD15CkNPTkZJR19QQ0lfSFlQRVJWPW0KQ09ORklHX0hPVFBM
VUdfUENJPXkKQ09ORklHX0hPVFBMVUdfUENJX0FDUEk9eQpDT05GSUdfSE9UUExVR19QQ0lf
QUNQSV9JQk09bQpDT05GSUdfSE9UUExVR19QQ0lfQ1BDST15CkNPTkZJR19IT1RQTFVHX1BD
SV9DUENJX1pUNTU1MD1tCkNPTkZJR19IT1RQTFVHX1BDSV9DUENJX0dFTkVSSUM9bQpDT05G
SUdfSE9UUExVR19QQ0lfU0hQQz15CgojCiMgUENJIGNvbnRyb2xsZXIgZHJpdmVycwojCkNP
TkZJR19WTUQ9bQpDT05GSUdfUENJX0hZUEVSVl9JTlRFUkZBQ0U9bQoKIwojIERlc2lnbldh
cmUgUENJIENvcmUgU3VwcG9ydAojCkNPTkZJR19QQ0lFX0RXPXkKQ09ORklHX1BDSUVfRFdf
SE9TVD15CkNPTkZJR19QQ0lFX0RXX1BMQVQ9eQpDT05GSUdfUENJRV9EV19QTEFUX0hPU1Q9
eQpDT05GSUdfUENJX01FU09OPXkKIyBlbmQgb2YgRGVzaWduV2FyZSBQQ0kgQ29yZSBTdXBw
b3J0CgojCiMgTW9iaXZlaWwgUENJZSBDb3JlIFN1cHBvcnQKIwojIGVuZCBvZiBNb2JpdmVp
bCBQQ0llIENvcmUgU3VwcG9ydAoKIwojIENhZGVuY2UgUENJZSBjb250cm9sbGVycyBzdXBw
b3J0CiMKIyBlbmQgb2YgQ2FkZW5jZSBQQ0llIGNvbnRyb2xsZXJzIHN1cHBvcnQKIyBlbmQg
b2YgUENJIGNvbnRyb2xsZXIgZHJpdmVycwoKIwojIFBDSSBFbmRwb2ludAojCiMgQ09ORklH
X1BDSV9FTkRQT0lOVCBpcyBub3Qgc2V0CiMgZW5kIG9mIFBDSSBFbmRwb2ludAoKIwojIFBD
SSBzd2l0Y2ggY29udHJvbGxlciBkcml2ZXJzCiMKQ09ORklHX1BDSV9TV19TV0lUQ0hURUM9
bQojIGVuZCBvZiBQQ0kgc3dpdGNoIGNvbnRyb2xsZXIgZHJpdmVycwoKQ09ORklHX0NYTF9C
VVM9bQpDT05GSUdfQ1hMX01FTT1tCiMgQ09ORklHX0NYTF9NRU1fUkFXX0NPTU1BTkRTIGlz
IG5vdCBzZXQKQ09ORklHX1BDQ0FSRD1tCkNPTkZJR19QQ01DSUE9bQpDT05GSUdfUENNQ0lB
X0xPQURfQ0lTPXkKQ09ORklHX0NBUkRCVVM9eQoKIwojIFBDLWNhcmQgYnJpZGdlcwojCkNP
TkZJR19ZRU5UQT1tCkNPTkZJR19ZRU5UQV9PMj15CkNPTkZJR19ZRU5UQV9SSUNPSD15CkNP
TkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9FTkVfVFVORT15CkNPTkZJR19ZRU5UQV9U
T1NISUJBPXkKQ09ORklHX1BENjcyOT1tCkNPTkZJR19JODIwOTI9bQpDT05GSUdfUENDQVJE
X05PTlNUQVRJQz15CiMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAoKIwojIEdlbmVyaWMg
RHJpdmVyIE9wdGlvbnMKIwpDT05GSUdfQVVYSUxJQVJZX0JVUz15CiMgQ09ORklHX1VFVkVO
VF9IRUxQRVIgaXMgbm90IHNldApDT05GSUdfREVWVE1QRlM9eQpDT05GSUdfREVWVE1QRlNf
TU9VTlQ9eQpDT05GSUdfU1RBTkRBTE9ORT15CkNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JV
SUxEPXkKCiMKIyBGaXJtd2FyZSBsb2FkZXIKIwpDT05GSUdfRldfTE9BREVSPXkKQ09ORklH
X0ZXX0xPQURFUl9QQUdFRF9CVUY9eQpDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKIyBDT05G
SUdfRldfTE9BREVSX1VTRVJfSEVMUEVSIGlzIG5vdCBzZXQKQ09ORklHX0ZXX0xPQURFUl9D
T01QUkVTUz15CkNPTkZJR19GV19DQUNIRT15CiMgZW5kIG9mIEZpcm13YXJlIGxvYWRlcgoK
Q09ORklHX1dBTlRfREVWX0NPUkVEVU1QPXkKQ09ORklHX0FMTE9XX0RFVl9DT1JFRFVNUD15
CkNPTkZJR19ERVZfQ09SRURVTVA9eQojIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNl
dAojIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19URVNU
X0RSSVZFUl9SRU1PVkUgaXMgbm90IHNldApDT05GSUdfSE1FTV9SRVBPUlRJTkc9eQojIENP
TkZJR19URVNUX0FTWU5DX0RSSVZFUl9QUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19TWVNfSFlQ
RVJWSVNPUj15CkNPTkZJR19HRU5FUklDX0NQVV9BVVRPUFJPQkU9eQpDT05GSUdfR0VORVJJ
Q19DUFVfVlVMTkVSQUJJTElUSUVTPXkKQ09ORklHX1JFR01BUD15CkNPTkZJR19SRUdNQVBf
STJDPXkKQ09ORklHX1JFR01BUF9TTElNQlVTPW0KQ09ORklHX1JFR01BUF9TUEk9eQpDT05G
SUdfUkVHTUFQX1cxPW0KQ09ORklHX1JFR01BUF9NTUlPPXkKQ09ORklHX1JFR01BUF9JUlE9
eQpDT05GSUdfUkVHTUFQX1NPVU5EV0lSRT1tCkNPTkZJR19SRUdNQVBfU0NDQj1tCkNPTkZJ
R19SRUdNQVBfU1BJX0FWTU09bQpDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVI9eQojIENPTkZJ
R19ETUFfRkVOQ0VfVFJBQ0UgaXMgbm90IHNldAojIGVuZCBvZiBHZW5lcmljIERyaXZlciBP
cHRpb25zCgojCiMgQnVzIGRldmljZXMKIwpDT05GSUdfTUhJX0JVUz1tCiMgQ09ORklHX01I
SV9CVVNfREVCVUcgaXMgbm90IHNldApDT05GSUdfTUhJX0JVU19QQ0lfR0VORVJJQz1tCiMg
ZW5kIG9mIEJ1cyBkZXZpY2VzCgpDT05GSUdfQ09OTkVDVE9SPXkKQ09ORklHX1BST0NfRVZF
TlRTPXkKQ09ORklHX0dOU1M9bQpDT05GSUdfR05TU19TRVJJQUw9bQpDT05GSUdfR05TU19N
VEtfU0VSSUFMPW0KQ09ORklHX0dOU1NfU0lSRl9TRVJJQUw9bQpDT05GSUdfR05TU19VQlhf
U0VSSUFMPW0KQ09ORklHX01URD1tCiMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Cgoj
CiMgUGFydGl0aW9uIHBhcnNlcnMKIwojIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAojIENPTkZJR19NVERf
UkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiMgZW5kIG9mIFBhcnRpdGlvbiBwYXJzZXJzCgoj
CiMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKIwpDT05GSUdfTVREX0JM
S0RFVlM9bQpDT05GSUdfTVREX0JMT0NLPW0KIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5v
dCBzZXQKIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0
CiMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIyBDT05GSUdfU01fRlRMIGlzIG5vdCBzZXQK
IyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldApDT05GSUdfTVREX1BTVE9SRT1tCiMgQ09O
RklHX01URF9TV0FQIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX1BBUlRJVElPTkVEX01BU1RF
UiBpcyBub3Qgc2V0CgojCiMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKIwojIENPTkZJ
R19NVERfQ0ZJIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNl
dApDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQpDT05GSUdfTVREX01BUF9CQU5LX1dJ
RFRIXzI9eQpDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQpDT05GSUdfTVREX0NGSV9J
MT15CkNPTkZJR19NVERfQ0ZJX0kyPXkKQ09ORklHX01URF9SQU09bQpDT05GSUdfTVREX1JP
TT1tCiMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAojIGVuZCBvZiBSQU0vUk9NL0Zs
YXNoIGNoaXAgZHJpdmVycwoKIwojIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MK
IwojIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9QSFlTTUFQIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qg
c2V0CkNPTkZJR19NVERfUExBVFJBTT1tCiMgZW5kIG9mIE1hcHBpbmcgZHJpdmVycyBmb3Ig
Y2hpcCBhY2Nlc3MKCiMKIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKIwoj
IENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0RBVEFGTEFTSCBp
cyBub3Qgc2V0CiMgQ09ORklHX01URF9NQ0hQMjNLMjU2IGlzIG5vdCBzZXQKIyBDT05GSUdf
TVREX1NTVDI1TCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CkNP
TkZJR19NVERfUEhSQU09bQojIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQ09ORklH
X01URF9CTE9DSzJNVEQ9bQoKIwojIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwojCiMg
Q09ORklHX01URF9ET0NHMyBpcyBub3Qgc2V0CiMgZW5kIG9mIFNlbGYtY29udGFpbmVkIE1U
RCBkZXZpY2UgZHJpdmVycwoKIwojIE5BTkQKIwpDT05GSUdfTVREX05BTkRfQ09SRT1tCiMg
Q09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKQ09ORklHX01URF9SQVdfTkFORD1tCgoj
CiMgUmF3L3BhcmFsbGVsIE5BTkQgZmxhc2ggY29udHJvbGxlcnMKIwojIENPTkZJR19NVERf
TkFORF9ERU5BTElfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX01YSUMgaXMgbm90IHNldAojIENPTkZJR19NVERf
TkFORF9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90
IHNldAojIENPTkZJR19NVERfTkFORF9BUkFTQU4gaXMgbm90IHNldAoKIwojIE1pc2MKIwpD
T05GSUdfTVREX05BTkRfTkFORFNJTT1tCiMgQ09ORklHX01URF9OQU5EX1JJQ09IIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiMgQ09ORklH
X01URF9TUElfTkFORCBpcyBub3Qgc2V0CgojCiMgRUNDIGVuZ2luZSBzdXBwb3J0CiMKQ09O
RklHX01URF9OQU5EX0VDQz15CkNPTkZJR19NVERfTkFORF9FQ0NfU1dfSEFNTUlORz15CkNP
TkZJR19NVERfTkFORF9FQ0NfU1dfSEFNTUlOR19TTUM9eQpDT05GSUdfTVREX05BTkRfRUND
X1NXX0JDSD15CiMgZW5kIG9mIEVDQyBlbmdpbmUgc3VwcG9ydAojIGVuZCBvZiBOQU5ECgoj
CiMgTFBERFIgJiBMUEREUjIgUENNIG1lbW9yeSBkcml2ZXJzCiMKIyBDT05GSUdfTVREX0xQ
RERSIGlzIG5vdCBzZXQKIyBlbmQgb2YgTFBERFIgJiBMUEREUjIgUENNIG1lbW9yeSBkcml2
ZXJzCgpDT05GSUdfTVREX1NQSV9OT1I9bQpDT05GSUdfTVREX1NQSV9OT1JfVVNFXzRLX1NF
Q1RPUlM9eQojIENPTkZJR19NVERfU1BJX05PUl9TV1BfRElTQUJMRSBpcyBub3Qgc2V0CkNP
TkZJR19NVERfU1BJX05PUl9TV1BfRElTQUJMRV9PTl9WT0xBVElMRT15CiMgQ09ORklHX01U
RF9TUElfTk9SX1NXUF9LRUVQIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9JTlRFTF9TUEk9bQpD
T05GSUdfU1BJX0lOVEVMX1NQSV9QQ0k9bQpDT05GSUdfU1BJX0lOVEVMX1NQSV9QTEFURk9S
TT1tCkNPTkZJR19NVERfVUJJPW0KQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYK
Q09ORklHX01URF9VQklfQkVCX0xJTUlUPTIwCiMgQ09ORklHX01URF9VQklfRkFTVE1BUCBp
cyBub3Qgc2V0CiMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKIyBDT05GSUdf
TVREX1VCSV9CTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9IWVBFUkJVUyBpcyBub3Qg
c2V0CiMgQ09ORklHX09GIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfTUlHSFRfSEFWRV9QQ19Q
QVJQT1JUPXkKQ09ORklHX1BBUlBPUlQ9bQpDT05GSUdfUEFSUE9SVF9QQz1tCkNPTkZJR19Q
QVJQT1JUX1NFUklBTD1tCkNPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQpDT05GSUdfUEFSUE9S
VF9QQ19TVVBFUklPPXkKQ09ORklHX1BBUlBPUlRfUENfUENNQ0lBPW0KQ09ORklHX1BBUlBP
UlRfQVg4ODc5Nj1tCkNPTkZJR19QQVJQT1JUXzEyODQ9eQpDT05GSUdfUEFSUE9SVF9OT1Rf
UEM9eQpDT05GSUdfUE5QPXkKQ09ORklHX1BOUF9ERUJVR19NRVNTQUdFUz15CgojCiMgUHJv
dG9jb2xzCiMKQ09ORklHX1BOUEFDUEk9eQpDT05GSUdfQkxLX0RFVj15CkNPTkZJR19CTEtf
REVWX05VTExfQkxLPW0KQ09ORklHX0JMS19ERVZfRkQ9bQpDT05GSUdfQ0RST009bQojIENP
TkZJR19QQVJJREUgaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9QQ0lFU1NEX01USVAzMlhY
PW0KQ09ORklHX1pSQU09bQpDT05GSUdfWlJBTV9ERUZfQ09NUF9MWk9STEU9eQojIENPTkZJ
R19aUkFNX0RFRl9DT01QX1pTVEQgaXMgbm90IHNldAojIENPTkZJR19aUkFNX0RFRl9DT01Q
X0xaNCBpcyBub3Qgc2V0CiMgQ09ORklHX1pSQU1fREVGX0NPTVBfTFpPIGlzIG5vdCBzZXQK
IyBDT05GSUdfWlJBTV9ERUZfQ09NUF9MWjRIQyBpcyBub3Qgc2V0CiMgQ09ORklHX1pSQU1f
REVGX0NPTVBfODQyIGlzIG5vdCBzZXQKQ09ORklHX1pSQU1fREVGX0NPTVA9Imx6by1ybGUi
CkNPTkZJR19aUkFNX1dSSVRFQkFDSz15CiMgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5H
IGlzIG5vdCBzZXQKQ09ORklHX0JMS19ERVZfVU1FTT1tCkNPTkZJR19CTEtfREVWX0xPT1A9
bQpDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVD0wCkNPTkZJR19CTEtfREVWX0NSWVBU
T0xPT1A9bQpDT05GSUdfQkxLX0RFVl9EUkJEPW0KIyBDT05GSUdfRFJCRF9GQVVMVF9JTkpF
Q1RJT04gaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9OQkQ9bQpDT05GSUdfQkxLX0RFVl9T
WDg9bQpDT05GSUdfQkxLX0RFVl9SQU09bQpDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYK
Q09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKQ09ORklHX0NEUk9NX1BLVENEVkQ9bQpD
T05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9X
Q0FDSEUgaXMgbm90IHNldApDT05GSUdfQVRBX09WRVJfRVRIPW0KQ09ORklHX1hFTl9CTEtE
RVZfRlJPTlRFTkQ9bQpDT05GSUdfWEVOX0JMS0RFVl9CQUNLRU5EPW0KQ09ORklHX1ZJUlRJ
T19CTEs9bQpDT05GSUdfQkxLX0RFVl9SQkQ9bQpDT05GSUdfQkxLX0RFVl9SU1hYPW0KQ09O
RklHX0JMS19ERVZfUk5CRD15CkNPTkZJR19CTEtfREVWX1JOQkRfQ0xJRU5UPW0KQ09ORklH
X0JMS19ERVZfUk5CRF9TRVJWRVI9bQoKIwojIE5WTUUgU3VwcG9ydAojCkNPTkZJR19OVk1F
X0NPUkU9eQpDT05GSUdfQkxLX0RFVl9OVk1FPXkKQ09ORklHX05WTUVfTVVMVElQQVRIPXkK
Q09ORklHX05WTUVfSFdNT049eQpDT05GSUdfTlZNRV9GQUJSSUNTPW0KQ09ORklHX05WTUVf
UkRNQT1tCkNPTkZJR19OVk1FX0ZDPW0KQ09ORklHX05WTUVfVENQPW0KQ09ORklHX05WTUVf
VEFSR0VUPW0KQ09ORklHX05WTUVfVEFSR0VUX1BBU1NUSFJVPXkKQ09ORklHX05WTUVfVEFS
R0VUX0xPT1A9bQpDT05GSUdfTlZNRV9UQVJHRVRfUkRNQT1tCkNPTkZJR19OVk1FX1RBUkdF
VF9GQz1tCkNPTkZJR19OVk1FX1RBUkdFVF9GQ0xPT1A9bQpDT05GSUdfTlZNRV9UQVJHRVRf
VENQPW0KIyBlbmQgb2YgTlZNRSBTdXBwb3J0CgojCiMgTWlzYyBkZXZpY2VzCiMKQ09ORklH
X1NFTlNPUlNfTElTM0xWMDJEPW0KQ09ORklHX0FENTI1WF9EUE9UPW0KQ09ORklHX0FENTI1
WF9EUE9UX0kyQz1tCkNPTkZJR19BRDUyNVhfRFBPVF9TUEk9bQojIENPTkZJR19EVU1NWV9J
UlEgaXMgbm90IHNldApDT05GSUdfSUJNX0FTTT1tCkNPTkZJR19QSEFOVE9NPW0KQ09ORklH
X1RJRk1fQ09SRT1tCkNPTkZJR19USUZNXzdYWDE9bQpDT05GSUdfSUNTOTMyUzQwMT1tCkNP
TkZJR19FTkNMT1NVUkVfU0VSVklDRVM9bQpDT05GSUdfSFBfSUxPPW0KQ09ORklHX0FQRFM5
ODAyQUxTPW0KQ09ORklHX0lTTDI5MDAzPW0KQ09ORklHX0lTTDI5MDIwPW0KQ09ORklHX1NF
TlNPUlNfVFNMMjU1MD1tCkNPTkZJR19TRU5TT1JTX0JIMTc3MD1tCkNPTkZJR19TRU5TT1JT
X0FQRFM5OTBYPW0KQ09ORklHX0hNQzYzNTI9bQpDT05GSUdfRFMxNjgyPW0KQ09ORklHX1ZN
V0FSRV9CQUxMT09OPW0KQ09ORklHX0xBVFRJQ0VfRUNQM19DT05GSUc9bQojIENPTkZJR19T
UkFNIGlzIG5vdCBzZXQKQ09ORklHX1BDSV9FTkRQT0lOVF9URVNUPW0KQ09ORklHX1hJTElO
WF9TREZFQz1tCkNPTkZJR19NSVNDX1JUU1g9bQpDT05GSUdfUFZQQU5JQz1tCkNPTkZJR19D
MlBPUlQ9bQpDT05GSUdfQzJQT1JUX0RVUkFNQVJfMjE1MD1tCgojCiMgRUVQUk9NIHN1cHBv
cnQKIwpDT05GSUdfRUVQUk9NX0FUMjQ9bQojIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qg
c2V0CkNPTkZJR19FRVBST01fTEVHQUNZPW0KQ09ORklHX0VFUFJPTV9NQVg2ODc1PW0KQ09O
RklHX0VFUFJPTV85M0NYNj1tCiMgQ09ORklHX0VFUFJPTV85M1hYNDYgaXMgbm90IHNldApD
T05GSUdfRUVQUk9NX0lEVF84OUhQRVNYPW0KQ09ORklHX0VFUFJPTV9FRTEwMDQ9bQojIGVu
ZCBvZiBFRVBST00gc3VwcG9ydAoKQ09ORklHX0NCNzEwX0NPUkU9bQojIENPTkZJR19DQjcx
MF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DQjcxMF9ERUJVR19BU1NVTVBUSU9OUz15Cgoj
CiMgVGV4YXMgSW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUK
IwpDT05GSUdfVElfU1Q9bQojIGVuZCBvZiBUZXhhcyBJbnN0cnVtZW50cyBzaGFyZWQgdHJh
bnNwb3J0IGxpbmUgZGlzY2lwbGluZQoKQ09ORklHX1NFTlNPUlNfTElTM19JMkM9bQpDT05G
SUdfQUxURVJBX1NUQVBMPW0KQ09ORklHX0lOVEVMX01FST1tCkNPTkZJR19JTlRFTF9NRUlf
TUU9bQpDT05GSUdfSU5URUxfTUVJX1RYRT1tCkNPTkZJR19JTlRFTF9NRUlfSERDUD1tCkNP
TkZJR19WTVdBUkVfVk1DST1tCkNPTkZJR19HRU5XUUU9bQpDT05GSUdfR0VOV1FFX1BMQVRG
T1JNX0VSUk9SX1JFQ09WRVJZPTAKQ09ORklHX0VDSE89bQpDT05GSUdfQkNNX1ZLPW0KQ09O
RklHX0JDTV9WS19UVFk9eQpDT05GSUdfTUlTQ19BTENPUl9QQ0k9bQpDT05GSUdfTUlTQ19S
VFNYX1BDST1tCkNPTkZJR19NSVNDX1JUU1hfVVNCPW0KQ09ORklHX0hBQkFOQV9BST1tCkNP
TkZJR19VQUNDRT1tCiMgZW5kIG9mIE1pc2MgZGV2aWNlcwoKQ09ORklHX0hBVkVfSURFPXkK
IyBDT05GSUdfSURFIGlzIG5vdCBzZXQKCiMKIyBTQ1NJIGRldmljZSBzdXBwb3J0CiMKQ09O
RklHX1NDU0lfTU9EPXkKQ09ORklHX1JBSURfQVRUUlM9bQpDT05GSUdfU0NTST15CkNPTkZJ
R19TQ1NJX0RNQT15CkNPTkZJR19TQ1NJX05FVExJTks9eQpDT05GSUdfU0NTSV9QUk9DX0ZT
PXkKCiMKIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQojCkNPTkZJ
R19CTEtfREVWX1NEPXkKQ09ORklHX0NIUl9ERVZfU1Q9bQpDT05GSUdfQkxLX0RFVl9TUj1t
CkNPTkZJR19DSFJfREVWX1NHPW0KQ09ORklHX0NIUl9ERVZfU0NIPW0KQ09ORklHX1NDU0lf
RU5DTE9TVVJFPW0KQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKQ09ORklHX1NDU0lfTE9HR0lO
Rz15CkNPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQoKIwojIFNDU0kgVHJhbnNwb3J0cwojCkNP
TkZJR19TQ1NJX1NQSV9BVFRSUz1tCkNPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KQ09ORklHX1ND
U0lfSVNDU0lfQVRUUlM9bQpDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQpDT05GSUdfU0NTSV9T
QVNfTElCU0FTPW0KQ09ORklHX1NDU0lfU0FTX0FUQT15CkNPTkZJR19TQ1NJX1NBU19IT1NU
X1NNUD15CkNPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCiMgZW5kIG9mIFNDU0kgVHJhbnNwb3J0
cwoKQ09ORklHX1NDU0lfTE9XTEVWRUw9eQpDT05GSUdfSVNDU0lfVENQPW0KQ09ORklHX0lT
Q1NJX0JPT1RfU1lTRlM9bQpDT05GSUdfU0NTSV9DWEdCM19JU0NTST1tCkNPTkZJR19TQ1NJ
X0NYR0I0X0lTQ1NJPW0KQ09ORklHX1NDU0lfQk5YMl9JU0NTST1tCkNPTkZJR19TQ1NJX0JO
WDJYX0ZDT0U9bQpDT05GSUdfQkUySVNDU0k9bQpDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JB
SUQ9bQpDT05GSUdfU0NTSV9IUFNBPW0KQ09ORklHX1NDU0lfM1dfOVhYWD1tCkNPTkZJR19T
Q1NJXzNXX1NBUz1tCkNPTkZJR19TQ1NJX0FDQVJEPW0KQ09ORklHX1NDU0lfQUFDUkFJRD1t
CkNPTkZJR19TQ1NJX0FJQzdYWFg9bQpDT05GSUdfQUlDN1hYWF9DTURTX1BFUl9ERVZJQ0U9
MzIKQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKQ09ORklHX0FJQzdYWFhf
REVCVUdfRU5BQkxFPXkKQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCkNPTkZJR19BSUM3
WFhYX1JFR19QUkVUVFlfUFJJTlQ9eQpDT05GSUdfU0NTSV9BSUM3OVhYPW0KQ09ORklHX0FJ
Qzc5WFhfQ01EU19QRVJfREVWSUNFPTMyCkNPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZX01T
PTE1MDAwCkNPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRT15CkNPTkZJR19BSUM3OVhYX0RF
QlVHX01BU0s9MApDT05GSUdfQUlDNzlYWF9SRUdfUFJFVFRZX1BSSU5UPXkKQ09ORklHX1ND
U0lfQUlDOTRYWD1tCkNPTkZJR19BSUM5NFhYX0RFQlVHPXkKQ09ORklHX1NDU0lfTVZTQVM9
bQpDT05GSUdfU0NTSV9NVlNBU19ERUJVRz15CkNPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQ9
eQpDT05GSUdfU0NTSV9NVlVNST1tCkNPTkZJR19TQ1NJX0RQVF9JMk89bQpDT05GSUdfU0NT
SV9BRFZBTlNZUz1tCkNPTkZJR19TQ1NJX0FSQ01TUj1tCkNPTkZJR19TQ1NJX0VTQVMyUj1t
CkNPTkZJR19NRUdBUkFJRF9ORVdHRU49eQpDT05GSUdfTUVHQVJBSURfTU09bQpDT05GSUdf
TUVHQVJBSURfTUFJTEJPWD1tCkNPTkZJR19NRUdBUkFJRF9MRUdBQ1k9bQpDT05GSUdfTUVH
QVJBSURfU0FTPW0KQ09ORklHX1NDU0lfTVBUM1NBUz1tCkNPTkZJR19TQ1NJX01QVDJTQVNf
TUFYX1NHRT0xMjgKQ09ORklHX1NDU0lfTVBUM1NBU19NQVhfU0dFPTEyOApDT05GSUdfU0NT
SV9NUFQyU0FTPW0KQ09ORklHX1NDU0lfU01BUlRQUUk9bQpDT05GSUdfU0NTSV9VRlNIQ0Q9
bQpDT05GSUdfU0NTSV9VRlNIQ0RfUENJPW0KIyBDT05GSUdfU0NTSV9VRlNfRFdDX1RDX1BD
SSBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX1VGU0hDRF9QTEFURk9STT1tCkNPTkZJR19TQ1NJ
X1VGU19DRE5TX1BMQVRGT1JNPW0KIyBDT05GSUdfU0NTSV9VRlNfRFdDX1RDX1BMQVRGT1JN
IGlzIG5vdCBzZXQKQ09ORklHX1NDU0lfVUZTX0JTRz15CkNPTkZJR19TQ1NJX1VGU19DUllQ
VE89eQpDT05GSUdfU0NTSV9IUFRJT1A9bQpDT05GSUdfU0NTSV9CVVNMT0dJQz1tCkNPTkZJ
R19TQ1NJX0ZMQVNIUE9JTlQ9eQpDT05GSUdfU0NTSV9NWVJCPW0KQ09ORklHX1NDU0lfTVlS
Uz1tCkNPTkZJR19WTVdBUkVfUFZTQ1NJPW0KQ09ORklHX1hFTl9TQ1NJX0ZST05URU5EPW0K
Q09ORklHX0hZUEVSVl9TVE9SQUdFPW0KQ09ORklHX0xJQkZDPW0KQ09ORklHX0xJQkZDT0U9
bQpDT05GSUdfRkNPRT1tCkNPTkZJR19GQ09FX0ZOSUM9bQpDT05GSUdfU0NTSV9TTklDPW0K
IyBDT05GSUdfU0NTSV9TTklDX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1NDU0lfRE1Y
MzE5MUQ9bQpDT05GSUdfU0NTSV9GRE9NQUlOPW0KQ09ORklHX1NDU0lfRkRPTUFJTl9QQ0k9
bQpDT05GSUdfU0NTSV9JU0NJPW0KQ09ORklHX1NDU0lfSVBTPW0KQ09ORklHX1NDU0lfSU5J
VElPPW0KQ09ORklHX1NDU0lfSU5JQTEwMD1tCkNPTkZJR19TQ1NJX1BQQT1tCkNPTkZJR19T
Q1NJX0lNTT1tCiMgQ09ORklHX1NDU0lfSVpJUF9FUFAxNiBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfSVpJUF9TTE9XX0NUUiBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX1NURVg9bQpDT05G
SUdfU0NTSV9TWU01M0M4WFhfMj1tCkNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVT
U0lOR19NT0RFPTEKQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgpDT05G
SUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKQ09ORklHX1NDU0lfU1lNNTNDOFhYX01N
SU89eQpDT05GSUdfU0NTSV9JUFI9bQpDT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQpDT05GSUdf
U0NTSV9JUFJfRFVNUD15CkNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPW0KQ09ORklHX1NDU0lf
UUxBX0ZDPW0KQ09ORklHX1RDTV9RTEEyWFhYPW0KIyBDT05GSUdfVENNX1FMQTJYWFhfREVC
VUcgaXMgbm90IHNldApDT05GSUdfU0NTSV9RTEFfSVNDU0k9bQpDT05GSUdfUUVEST1tCkNP
TkZJR19RRURGPW0KQ09ORklHX1NDU0lfTFBGQz1tCiMgQ09ORklHX1NDU0lfTFBGQ19ERUJV
R19GUyBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX0RDMzk1eD1tCkNPTkZJR19TQ1NJX0FNNTND
OTc0PW0KQ09ORklHX1NDU0lfV0Q3MTlYPW0KQ09ORklHX1NDU0lfREVCVUc9bQpDT05GSUdf
U0NTSV9QTUNSQUlEPW0KQ09ORklHX1NDU0lfUE04MDAxPW0KQ09ORklHX1NDU0lfQkZBX0ZD
PW0KQ09ORklHX1NDU0lfVklSVElPPW0KQ09ORklHX1NDU0lfQ0hFTFNJT19GQ09FPW0KQ09O
RklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBPXkKQ09ORklHX1BDTUNJQV9BSEExNTJYPW0KQ09O
RklHX1BDTUNJQV9GRE9NQUlOPW0KQ09ORklHX1BDTUNJQV9RTE9HSUM9bQpDT05GSUdfUENN
Q0lBX1NZTTUzQzUwMD1tCkNPTkZJR19TQ1NJX0RIPXkKQ09ORklHX1NDU0lfREhfUkRBQz1t
CkNPTkZJR19TQ1NJX0RIX0hQX1NXPW0KQ09ORklHX1NDU0lfREhfRU1DPW0KQ09ORklHX1ND
U0lfREhfQUxVQT1tCiMgZW5kIG9mIFNDU0kgZGV2aWNlIHN1cHBvcnQKCkNPTkZJR19BVEE9
eQpDT05GSUdfU0FUQV9IT1NUPXkKQ09ORklHX1BBVEFfVElNSU5HUz15CkNPTkZJR19BVEFf
VkVSQk9TRV9FUlJPUj15CkNPTkZJR19BVEFfRk9SQ0U9eQpDT05GSUdfQVRBX0FDUEk9eQpD
T05GSUdfU0FUQV9aUE9ERD15CkNPTkZJR19TQVRBX1BNUD15CgojCiMgQ29udHJvbGxlcnMg
d2l0aCBub24tU0ZGIG5hdGl2ZSBpbnRlcmZhY2UKIwpDT05GSUdfU0FUQV9BSENJPXkKQ09O
RklHX1NBVEFfTU9CSUxFX0xQTV9QT0xJQ1k9MwpDT05GSUdfU0FUQV9BSENJX1BMQVRGT1JN
PW0KQ09ORklHX1NBVEFfSU5JQzE2Mlg9bQpDT05GSUdfU0FUQV9BQ0FSRF9BSENJPW0KQ09O
RklHX1NBVEFfU0lMMjQ9bQpDT05GSUdfQVRBX1NGRj15CgojCiMgU0ZGIGNvbnRyb2xsZXJz
IHdpdGggY3VzdG9tIERNQSBpbnRlcmZhY2UKIwpDT05GSUdfUERDX0FETUE9bQpDT05GSUdf
U0FUQV9RU1RPUj1tCkNPTkZJR19TQVRBX1NYND1tCkNPTkZJR19BVEFfQk1ETUE9eQoKIwoj
IFNBVEEgU0ZGIGNvbnRyb2xsZXJzIHdpdGggQk1ETUEKIwpDT05GSUdfQVRBX1BJSVg9bQpD
T05GSUdfU0FUQV9EV0M9bQojIENPTkZJR19TQVRBX0RXQ19PTERfRE1BIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0FUQV9EV0NfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0FUQV9NVj1tCkNP
TkZJR19TQVRBX05WPW0KQ09ORklHX1NBVEFfUFJPTUlTRT1tCkNPTkZJR19TQVRBX1NJTD1t
CkNPTkZJR19TQVRBX1NJUz1tCkNPTkZJR19TQVRBX1NWVz1tCkNPTkZJR19TQVRBX1VMST1t
CkNPTkZJR19TQVRBX1ZJQT1tCkNPTkZJR19TQVRBX1ZJVEVTU0U9bQoKIwojIFBBVEEgU0ZG
IGNvbnRyb2xsZXJzIHdpdGggQk1ETUEKIwpDT05GSUdfUEFUQV9BTEk9bQpDT05GSUdfUEFU
QV9BTUQ9bQpDT05GSUdfUEFUQV9BUlRPUD1tCkNPTkZJR19QQVRBX0FUSUlYUD1tCkNPTkZJ
R19QQVRBX0FUUDg2N1g9bQpDT05GSUdfUEFUQV9DTUQ2NFg9bQpDT05GSUdfUEFUQV9DWVBS
RVNTPW0KQ09ORklHX1BBVEFfRUZBUj1tCkNPTkZJR19QQVRBX0hQVDM2Nj1tCkNPTkZJR19Q
QVRBX0hQVDM3WD1tCkNPTkZJR19QQVRBX0hQVDNYMk49bQpDT05GSUdfUEFUQV9IUFQzWDM9
bQpDT05GSUdfUEFUQV9IUFQzWDNfRE1BPXkKQ09ORklHX1BBVEFfSVQ4MjEzPW0KQ09ORklH
X1BBVEFfSVQ4MjFYPW0KQ09ORklHX1BBVEFfSk1JQ1JPTj1tCkNPTkZJR19QQVRBX01BUlZF
TEw9bQpDT05GSUdfUEFUQV9ORVRDRUxMPW0KQ09ORklHX1BBVEFfTklOSkEzMj1tCkNPTkZJ
R19QQVRBX05TODc0MTU9bQpDT05GSUdfUEFUQV9PTERQSUlYPW0KQ09ORklHX1BBVEFfT1BU
SURNQT1tCkNPTkZJR19QQVRBX1BEQzIwMjdYPW0KQ09ORklHX1BBVEFfUERDX09MRD1tCkNP
TkZJR19QQVRBX1JBRElTWVM9bQpDT05GSUdfUEFUQV9SREM9bQpDT05GSUdfUEFUQV9TQ0g9
bQpDT05GSUdfUEFUQV9TRVJWRVJXT1JLUz1tCkNPTkZJR19QQVRBX1NJTDY4MD1tCkNPTkZJ
R19QQVRBX1NJUz1tCkNPTkZJR19QQVRBX1RPU0hJQkE9bQpDT05GSUdfUEFUQV9UUklGTEVY
PW0KQ09ORklHX1BBVEFfVklBPW0KQ09ORklHX1BBVEFfV0lOQk9ORD1tCgojCiMgUElPLW9u
bHkgU0ZGIGNvbnRyb2xsZXJzCiMKQ09ORklHX1BBVEFfQ01ENjQwX1BDST1tCkNPTkZJR19Q
QVRBX01QSUlYPW0KQ09ORklHX1BBVEFfTlM4NzQxMD1tCkNPTkZJR19QQVRBX09QVEk9bQpD
T05GSUdfUEFUQV9QQ01DSUE9bQpDT05GSUdfUEFUQV9SWjEwMDA9bQoKIwojIEdlbmVyaWMg
ZmFsbGJhY2sgLyBsZWdhY3kgZHJpdmVycwojCkNPTkZJR19QQVRBX0FDUEk9bQpDT05GSUdf
QVRBX0dFTkVSSUM9bQpDT05GSUdfUEFUQV9MRUdBQ1k9bQpDT05GSUdfTUQ9eQpDT05GSUdf
QkxLX0RFVl9NRD1tCkNPTkZJR19NRF9MSU5FQVI9bQpDT05GSUdfTURfUkFJRDA9bQpDT05G
SUdfTURfUkFJRDE9bQpDT05GSUdfTURfUkFJRDEwPW0KQ09ORklHX01EX1JBSUQ0NTY9bQpD
T05GSUdfTURfTVVMVElQQVRIPW0KQ09ORklHX01EX0ZBVUxUWT1tCkNPTkZJR19NRF9DTFVT
VEVSPW0KQ09ORklHX0JDQUNIRT1tCiMgQ09ORklHX0JDQUNIRV9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX0JDQUNIRV9DTE9TVVJFU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19CQ0FD
SEVfQVNZTkNfUkVHSVNUUkFUSU9OPXkKQ09ORklHX0JMS19ERVZfRE1fQlVJTFRJTj15CkNP
TkZJR19CTEtfREVWX0RNPW0KQ09ORklHX0RNX0RFQlVHPXkKQ09ORklHX0RNX0JVRklPPW0K
Q09ORklHX0RNX0RFQlVHX0JMT0NLX01BTkFHRVJfTE9DS0lORz15CiMgQ09ORklHX0RNX0RF
QlVHX0JMT0NLX1NUQUNLX1RSQUNJTkcgaXMgbm90IHNldApDT05GSUdfRE1fQklPX1BSSVNP
Tj1tCkNPTkZJR19ETV9QRVJTSVNURU5UX0RBVEE9bQpDT05GSUdfRE1fVU5TVFJJUEVEPW0K
Q09ORklHX0RNX0NSWVBUPW0KQ09ORklHX0RNX1NOQVBTSE9UPW0KQ09ORklHX0RNX1RISU5f
UFJPVklTSU9OSU5HPW0KQ09ORklHX0RNX0NBQ0hFPW0KQ09ORklHX0RNX0NBQ0hFX1NNUT1t
CkNPTkZJR19ETV9XUklURUNBQ0hFPW0KQ09ORklHX0RNX0VCUz1tCkNPTkZJR19ETV9FUkE9
bQpDT05GSUdfRE1fQ0xPTkU9bQpDT05GSUdfRE1fTUlSUk9SPW0KQ09ORklHX0RNX0xPR19V
U0VSU1BBQ0U9bQpDT05GSUdfRE1fUkFJRD1tCkNPTkZJR19ETV9aRVJPPW0KQ09ORklHX0RN
X01VTFRJUEFUSD1tCkNPTkZJR19ETV9NVUxUSVBBVEhfUUw9bQpDT05GSUdfRE1fTVVMVElQ
QVRIX1NUPW0KQ09ORklHX0RNX01VTFRJUEFUSF9IU1Q9bQpDT05GSUdfRE1fTVVMVElQQVRI
X0lPQT1tCkNPTkZJR19ETV9ERUxBWT1tCkNPTkZJR19ETV9EVVNUPW0KQ09ORklHX0RNX1VF
VkVOVD15CkNPTkZJR19ETV9GTEFLRVk9bQpDT05GSUdfRE1fVkVSSVRZPW0KQ09ORklHX0RN
X1ZFUklUWV9WRVJJRllfUk9PVEhBU0hfU0lHPXkKIyBDT05GSUdfRE1fVkVSSVRZX1ZFUklG
WV9ST09USEFTSF9TSUdfU0VDT05EQVJZX0tFWVJJTkcgaXMgbm90IHNldApDT05GSUdfRE1f
VkVSSVRZX0ZFQz15CkNPTkZJR19ETV9TV0lUQ0g9bQpDT05GSUdfRE1fTE9HX1dSSVRFUz1t
CkNPTkZJR19ETV9JTlRFR1JJVFk9bQpDT05GSUdfRE1fWk9ORUQ9bQpDT05GSUdfVEFSR0VU
X0NPUkU9bQpDT05GSUdfVENNX0lCTE9DSz1tCkNPTkZJR19UQ01fRklMRUlPPW0KQ09ORklH
X1RDTV9QU0NTST1tCkNPTkZJR19UQ01fVVNFUjI9bQpDT05GSUdfTE9PUEJBQ0tfVEFSR0VU
PW0KQ09ORklHX1RDTV9GQz1tCkNPTkZJR19JU0NTSV9UQVJHRVQ9bQpDT05GSUdfSVNDU0lf
VEFSR0VUX0NYR0I0PW0KQ09ORklHX1NCUF9UQVJHRVQ9bQpDT05GSUdfRlVTSU9OPXkKQ09O
RklHX0ZVU0lPTl9TUEk9bQpDT05GSUdfRlVTSU9OX0ZDPW0KQ09ORklHX0ZVU0lPTl9TQVM9
bQpDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CkNPTkZJR19GVVNJT05fQ1RMPW0KQ09ORklH
X0ZVU0lPTl9MQU49bQojIENPTkZJR19GVVNJT05fTE9HR0lORyBpcyBub3Qgc2V0CgojCiMg
SUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAojCkNPTkZJR19GSVJFV0lSRT1tCkNPTkZJ
R19GSVJFV0lSRV9PSENJPW0KQ09ORklHX0ZJUkVXSVJFX1NCUDI9bQpDT05GSUdfRklSRVdJ
UkVfTkVUPW0KQ09ORklHX0ZJUkVXSVJFX05PU1k9bQojIGVuZCBvZiBJRUVFIDEzOTQgKEZp
cmVXaXJlKSBzdXBwb3J0CgpDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQpDT05GSUdfTUFD
X0VNVU1PVVNFQlROPW0KQ09ORklHX05FVERFVklDRVM9eQpDT05GSUdfTUlJPW0KQ09ORklH
X05FVF9DT1JFPXkKQ09ORklHX0JPTkRJTkc9bQpDT05GSUdfRFVNTVk9bQpDT05GSUdfV0lS
RUdVQVJEPW0KIyBDT05GSUdfV0lSRUdVQVJEX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0VR
VUFMSVpFUj1tCkNPTkZJR19ORVRfRkM9eQpDT05GSUdfSUZCPW0KQ09ORklHX05FVF9URUFN
PW0KQ09ORklHX05FVF9URUFNX01PREVfQlJPQURDQVNUPW0KQ09ORklHX05FVF9URUFNX01P
REVfUk9VTkRST0JJTj1tCkNPTkZJR19ORVRfVEVBTV9NT0RFX1JBTkRPTT1tCkNPTkZJR19O
RVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCkNPTkZJR19ORVRfVEVBTV9NT0RFX0xPQURC
QUxBTkNFPW0KQ09ORklHX01BQ1ZMQU49bQpDT05GSUdfTUFDVlRBUD1tCkNPTkZJR19JUFZM
QU5fTDNTPXkKQ09ORklHX0lQVkxBTj1tCkNPTkZJR19JUFZUQVA9bQpDT05GSUdfVlhMQU49
bQpDT05GSUdfR0VORVZFPW0KQ09ORklHX0JBUkVVRFA9bQpDT05GSUdfR1RQPW0KQ09ORklH
X01BQ1NFQz1tCkNPTkZJR19ORVRDT05TT0xFPW0KQ09ORklHX05FVENPTlNPTEVfRFlOQU1J
Qz15CkNPTkZJR19ORVRQT0xMPXkKQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQpDT05G
SUdfTlRCX05FVERFVj1tCkNPTkZJR19UVU49bQpDT05GSUdfVEFQPW0KIyBDT05GSUdfVFVO
X1ZORVRfQ1JPU1NfTEUgaXMgbm90IHNldApDT05GSUdfVkVUSD1tCkNPTkZJR19WSVJUSU9f
TkVUPW0KQ09ORklHX05MTU9OPW0KQ09ORklHX05FVF9WUkY9bQpDT05GSUdfVlNPQ0tNT049
bQpDT05GSUdfTUhJX05FVD1tCkNPTkZJR19TVU5HRU1fUEhZPW0KIyBDT05GSUdfQVJDTkVU
IGlzIG5vdCBzZXQKQ09ORklHX0FUTV9EUklWRVJTPXkKIyBDT05GSUdfQVRNX0RVTU1ZIGlz
IG5vdCBzZXQKQ09ORklHX0FUTV9UQ1A9bQpDT05GSUdfQVRNX0xBTkFJPW0KQ09ORklHX0FU
TV9FTkk9bQojIENPTkZJR19BVE1fRU5JX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRN
X0VOSV9UVU5FX0JVUlNUIGlzIG5vdCBzZXQKQ09ORklHX0FUTV9GSVJFU1RSRUFNPW0KQ09O
RklHX0FUTV9aQVRNPW0KIyBDT05GSUdfQVRNX1pBVE1fREVCVUcgaXMgbm90IHNldApDT05G
SUdfQVRNX05JQ1NUQVI9bQojIENPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VOSSBpcyBub3Qg
c2V0CiMgQ09ORklHX0FUTV9OSUNTVEFSX1VTRV9JRFQ3NzEwNSBpcyBub3Qgc2V0CkNPTkZJ
R19BVE1fSURUNzcyNTI9bQojIENPTkZJR19BVE1fSURUNzcyNTJfREVCVUcgaXMgbm90IHNl
dAojIENPTkZJR19BVE1fSURUNzcyNTJfUkNWX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19BVE1f
SURUNzcyNTJfVVNFX1NVTkk9eQpDT05GSUdfQVRNX0FNQkFTU0FET1I9bQojIENPTkZJR19B
VE1fQU1CQVNTQURPUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVE1fSE9SSVpPTj1tCiMg
Q09ORklHX0FUTV9IT1JJWk9OX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0FUTV9JQT1tCiMg
Q09ORklHX0FUTV9JQV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVE1fRk9SRTIwMEU9bQpD
T05GSUdfQVRNX0ZPUkUyMDBFX1VTRV9UQVNLTEVUPXkKQ09ORklHX0FUTV9GT1JFMjAwRV9U
WF9SRVRSWT0xNgpDT05GSUdfQVRNX0ZPUkUyMDBFX0RFQlVHPTAKQ09ORklHX0FUTV9IRT1t
CkNPTkZJR19BVE1fSEVfVVNFX1NVTkk9eQpDT05GSUdfQVRNX1NPTE9TPW0KCiMKIyBEaXN0
cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIGRyaXZlcnMKIwpDT05GSUdfQjUzPW0KQ09O
RklHX0I1M19TUElfRFJJVkVSPW0KQ09ORklHX0I1M19NRElPX0RSSVZFUj1tCkNPTkZJR19C
NTNfTU1BUF9EUklWRVI9bQpDT05GSUdfQjUzX1NSQUJfRFJJVkVSPW0KQ09ORklHX0I1M19T
RVJERVM9bQpDT05GSUdfTkVUX0RTQV9CQ01fU0YyPW0KQ09ORklHX05FVF9EU0FfTE9PUD1t
CkNPTkZJR19ORVRfRFNBX0hJUlNDSE1BTk5fSEVMTENSRUVLPW0KIyBDT05GSUdfTkVUX0RT
QV9MQU5USVFfR1NXSVAgaXMgbm90IHNldApDT05GSUdfTkVUX0RTQV9NVDc1MzA9bQpDT05G
SUdfTkVUX0RTQV9NVjg4RTYwNjA9bQpDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX0NP
TU1PTj1tCkNPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3PW0KQ09ORklHX05FVF9E
U0FfTUlDUk9DSElQX0tTWjk0NzdfSTJDPW0KQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tT
Wjk0NzdfU1BJPW0KQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjg3OTU9bQpDT05GSUdf
TkVUX0RTQV9NSUNST0NISVBfS1NaODc5NV9TUEk9bQpDT05GSUdfTkVUX0RTQV9NVjg4RTZY
WFg9bQpDT05GSUdfTkVUX0RTQV9NVjg4RTZYWFhfUFRQPXkKQ09ORklHX05FVF9EU0FfTVND
Q19TRVZJTExFPW0KQ09ORklHX05FVF9EU0FfQVI5MzMxPW0KQ09ORklHX05FVF9EU0FfU0pB
MTEwNT1tCkNPTkZJR19ORVRfRFNBX1NKQTExMDVfUFRQPXkKQ09ORklHX05FVF9EU0FfU0pB
MTEwNV9UQVM9eQpDT05GSUdfTkVUX0RTQV9TSkExMTA1X1ZMPXkKQ09ORklHX05FVF9EU0Ff
WFJTNzAwWD1tCkNPTkZJR19ORVRfRFNBX1hSUzcwMFhfSTJDPW0KQ09ORklHX05FVF9EU0Ff
WFJTNzAwWF9NRElPPW0KQ09ORklHX05FVF9EU0FfUUNBOEs9bQpDT05GSUdfTkVUX0RTQV9S
RUFMVEVLX1NNST1tCkNPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwMz1tCkNPTkZJR19ORVRf
RFNBX1NNU0NfTEFOOTMwM19JMkM9bQpDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJ
Tz1tCkNPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWD1tCkNPTkZJR19ORVRfRFNBX1ZJ
VEVTU0VfVlNDNzNYWF9TUEk9bQpDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExB
VEZPUk09bQojIGVuZCBvZiBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIGRyaXZl
cnMKCkNPTkZJR19FVEhFUk5FVD15CkNPTkZJR19NRElPPW0KQ09ORklHX05FVF9WRU5ET1Jf
M0NPTT15CkNPTkZJR19QQ01DSUFfM0M1NzQ9bQpDT05GSUdfUENNQ0lBXzNDNTg5PW0KQ09O
RklHX1ZPUlRFWD1tCkNPTkZJR19UWVBIT09OPW0KQ09ORklHX05FVF9WRU5ET1JfQURBUFRF
Qz15CkNPTkZJR19BREFQVEVDX1NUQVJGSVJFPW0KQ09ORklHX05FVF9WRU5ET1JfQUdFUkU9
eQpDT05GSUdfRVQxMzFYPW0KQ09ORklHX05FVF9WRU5ET1JfQUxBQ1JJVEVDSD15CkNPTkZJ
R19TTElDT1NTPW0KQ09ORklHX05FVF9WRU5ET1JfQUxURU9OPXkKQ09ORklHX0FDRU5JQz1t
CiMgQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0kgaXMgbm90IHNldApDT05GSUdfQUxURVJB
X1RTRT1tCkNPTkZJR19ORVRfVkVORE9SX0FNQVpPTj15CkNPTkZJR19FTkFfRVRIRVJORVQ9
bQpDT05GSUdfTkVUX1ZFTkRPUl9BTUQ9eQpDT05GSUdfQU1EODExMV9FVEg9bQpDT05GSUdf
UENORVQzMj1tCkNPTkZJR19QQ01DSUFfTk1DTEFOPW0KQ09ORklHX0FNRF9YR0JFPW0KQ09O
RklHX0FNRF9YR0JFX0RDQj15CkNPTkZJR19BTURfWEdCRV9IQVZFX0VDQz15CkNPTkZJR19O
RVRfVkVORE9SX0FRVUFOVElBPXkKQ09ORklHX0FRVElPTj1tCkNPTkZJR19ORVRfVkVORE9S
X0FSQz15CkNPTkZJR19ORVRfVkVORE9SX0FUSEVST1M9eQpDT05GSUdfQVRMMj1tCkNPTkZJ
R19BVEwxPW0KQ09ORklHX0FUTDFFPW0KQ09ORklHX0FUTDFDPW0KQ09ORklHX0FMWD1tCkNP
TkZJR19ORVRfVkVORE9SX0JST0FEQ09NPXkKQ09ORklHX0I0ND1tCkNPTkZJR19CNDRfUENJ
X0FVVE9TRUxFQ1Q9eQpDT05GSUdfQjQ0X1BDSUNPUkVfQVVUT1NFTEVDVD15CkNPTkZJR19C
NDRfUENJPXkKQ09ORklHX0JDTUdFTkVUPW0KQ09ORklHX0JOWDI9bQpDT05GSUdfQ05JQz1t
CkNPTkZJR19USUdPTjM9bQpDT05GSUdfVElHT04zX0hXTU9OPXkKQ09ORklHX0JOWDJYPW0K
Q09ORklHX0JOWDJYX1NSSU9WPXkKQ09ORklHX1NZU1RFTVBPUlQ9bQpDT05GSUdfQk5YVD1t
CkNPTkZJR19CTlhUX1NSSU9WPXkKQ09ORklHX0JOWFRfRkxPV0VSX09GRkxPQUQ9eQpDT05G
SUdfQk5YVF9EQ0I9eQpDT05GSUdfQk5YVF9IV01PTj15CkNPTkZJR19ORVRfVkVORE9SX0JS
T0NBREU9eQpDT05GSUdfQk5BPW0KQ09ORklHX05FVF9WRU5ET1JfQ0FERU5DRT15CkNPTkZJ
R19NQUNCPW0KQ09ORklHX01BQ0JfVVNFX0hXU1RBTVA9eQpDT05GSUdfTUFDQl9QQ0k9bQpD
T05GSUdfTkVUX1ZFTkRPUl9DQVZJVU09eQpDT05GSUdfVEhVTkRFUl9OSUNfUEY9bQpDT05G
SUdfVEhVTkRFUl9OSUNfVkY9bQpDT05GSUdfVEhVTkRFUl9OSUNfQkdYPW0KQ09ORklHX1RI
VU5ERVJfTklDX1JHWD1tCkNPTkZJR19DQVZJVU1fUFRQPW0KQ09ORklHX0xJUVVJRElPPW0K
Q09ORklHX0xJUVVJRElPX1ZGPW0KQ09ORklHX05FVF9WRU5ET1JfQ0hFTFNJTz15CkNPTkZJ
R19DSEVMU0lPX1QxPW0KQ09ORklHX0NIRUxTSU9fVDFfMUc9eQpDT05GSUdfQ0hFTFNJT19U
Mz1tCkNPTkZJR19DSEVMU0lPX1Q0PW0KQ09ORklHX0NIRUxTSU9fVDRfRENCPXkKQ09ORklH
X0NIRUxTSU9fVDRfRkNPRT15CkNPTkZJR19DSEVMU0lPX1Q0VkY9bQpDT05GSUdfQ0hFTFNJ
T19MSUI9bQpDT05GSUdfQ0hFTFNJT19JTkxJTkVfQ1JZUFRPPXkKQ09ORklHX0NIRUxTSU9f
SVBTRUNfSU5MSU5FPW0KQ09ORklHX0NIRUxTSU9fVExTX0RFVklDRT1tCkNPTkZJR19ORVRf
VkVORE9SX0NJU0NPPXkKQ09ORklHX0VOSUM9bQpDT05GSUdfTkVUX1ZFTkRPUl9DT1JUSU5B
PXkKQ09ORklHX0NYX0VDQVQ9bQpDT05GSUdfRE5FVD1tCkNPTkZJR19ORVRfVkVORE9SX0RF
Qz15CkNPTkZJR19ORVRfVFVMSVA9eQpDT05GSUdfREUyMTA0WD1tCkNPTkZJR19ERTIxMDRY
X0RTTD0wCkNPTkZJR19UVUxJUD1tCkNPTkZJR19UVUxJUF9NV0k9eQpDT05GSUdfVFVMSVBf
TU1JTz15CkNPTkZJR19UVUxJUF9OQVBJPXkKQ09ORklHX1RVTElQX05BUElfSFdfTUlUSUdB
VElPTj15CkNPTkZJR19ERTRYNT1tCkNPTkZJR19XSU5CT05EXzg0MD1tCkNPTkZJR19ETTkx
MDI9bQpDT05GSUdfVUxJNTI2WD1tCkNPTkZJR19QQ01DSUFfWElSQ09NPW0KQ09ORklHX05F
VF9WRU5ET1JfRExJTks9eQpDT05GSUdfREwySz1tCkNPTkZJR19TVU5EQU5DRT1tCiMgQ09O
RklHX1NVTkRBTkNFX01NSU8gaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9FTVVMRVg9
eQpDT05GSUdfQkUyTkVUPW0KQ09ORklHX0JFMk5FVF9IV01PTj15CkNPTkZJR19CRTJORVRf
QkUyPXkKQ09ORklHX0JFMk5FVF9CRTM9eQpDT05GSUdfQkUyTkVUX0xBTkNFUj15CkNPTkZJ
R19CRTJORVRfU0tZSEFXSz15CkNPTkZJR19ORVRfVkVORE9SX0VaQ0hJUD15CkNPTkZJR19O
RVRfVkVORE9SX0ZVSklUU1U9eQpDT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQpDT05GSUdfTkVU
X1ZFTkRPUl9HT09HTEU9eQpDT05GSUdfR1ZFPW0KQ09ORklHX05FVF9WRU5ET1JfSFVBV0VJ
PXkKQ09ORklHX0hJTklDPW0KQ09ORklHX05FVF9WRU5ET1JfSTgyNVhYPXkKQ09ORklHX05F
VF9WRU5ET1JfSU5URUw9eQpDT05GSUdfRTEwMD1tCkNPTkZJR19FMTAwMD1tCkNPTkZJR19F
MTAwMEU9bQpDT05GSUdfRTEwMDBFX0hXVFM9eQpDT05GSUdfSUdCPW0KQ09ORklHX0lHQl9I
V01PTj15CkNPTkZJR19JR0JfRENBPXkKQ09ORklHX0lHQlZGPW0KQ09ORklHX0lYR0I9bQpD
T05GSUdfSVhHQkU9bQpDT05GSUdfSVhHQkVfSFdNT049eQpDT05GSUdfSVhHQkVfRENBPXkK
Q09ORklHX0lYR0JFX0RDQj15CiMgQ09ORklHX0lYR0JFX0lQU0VDIGlzIG5vdCBzZXQKQ09O
RklHX0lYR0JFVkY9bQpDT05GSUdfSVhHQkVWRl9JUFNFQz15CkNPTkZJR19JNDBFPW0KQ09O
RklHX0k0MEVfRENCPXkKQ09ORklHX0lBVkY9bQpDT05GSUdfSTQwRVZGPW0KQ09ORklHX0lD
RT1tCkNPTkZJR19GTTEwSz1tCkNPTkZJR19JR0M9bQpDT05GSUdfSk1FPW0KQ09ORklHX05F
VF9WRU5ET1JfTUFSVkVMTD15CkNPTkZJR19NVk1ESU89bQpDT05GSUdfU0tHRT1tCiMgQ09O
RklHX1NLR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0tHRV9HRU5FU0lTPXkKQ09ORklH
X1NLWTI9bQojIENPTkZJR19TS1kyX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1BSRVNURVJB
PW0KQ09ORklHX1BSRVNURVJBX1BDST1tCkNPTkZJR19ORVRfVkVORE9SX01FTExBTk9YPXkK
Q09ORklHX01MWDRfRU49bQpDT05GSUdfTUxYNF9FTl9EQ0I9eQpDT05GSUdfTUxYNF9DT1JF
PW0KQ09ORklHX01MWDRfREVCVUc9eQpDT05GSUdfTUxYNF9DT1JFX0dFTjI9eQpDT05GSUdf
TUxYNV9DT1JFPW0KQ09ORklHX01MWDVfQUNDRUw9eQpDT05GSUdfTUxYNV9GUEdBPXkKQ09O
RklHX01MWDVfQ09SRV9FTj15CkNPTkZJR19NTFg1X0VOX0FSRlM9eQpDT05GSUdfTUxYNV9F
Tl9SWE5GQz15CkNPTkZJR19NTFg1X01QRlM9eQpDT05GSUdfTUxYNV9FU1dJVENIPXkKQ09O
RklHX01MWDVfQ0xTX0FDVD15CkNPTkZJR19NTFg1X1RDX0NUPXkKQ09ORklHX01MWDVfQ09S
RV9FTl9EQ0I9eQpDT05GSUdfTUxYNV9DT1JFX0lQT0lCPXkKQ09ORklHX01MWDVfRlBHQV9J
UFNFQz15CkNPTkZJR19NTFg1X0lQU0VDPXkKQ09ORklHX01MWDVfRU5fSVBTRUM9eQpDT05G
SUdfTUxYNV9GUEdBX1RMUz15CkNPTkZJR19NTFg1X1RMUz15CkNPTkZJR19NTFg1X0VOX1RM
Uz15CkNPTkZJR19NTFg1X1NXX1NURUVSSU5HPXkKQ09ORklHX01MWDVfU0Y9eQpDT05GSUdf
TUxYNV9TRl9NQU5BR0VSPXkKQ09ORklHX01MWFNXX0NPUkU9bQpDT05GSUdfTUxYU1dfQ09S
RV9IV01PTj15CkNPTkZJR19NTFhTV19DT1JFX1RIRVJNQUw9eQpDT05GSUdfTUxYU1dfUENJ
PW0KQ09ORklHX01MWFNXX0kyQz1tCkNPTkZJR19NTFhTV19TV0lUQ0hJQj1tCkNPTkZJR19N
TFhTV19TV0lUQ0hYMj1tCkNPTkZJR19NTFhTV19TUEVDVFJVTT1tCkNPTkZJR19NTFhTV19T
UEVDVFJVTV9EQ0I9eQpDT05GSUdfTUxYU1dfTUlOSU1BTD1tCkNPTkZJR19NTFhGVz1tCkNP
TkZJR19ORVRfVkVORE9SX01JQ1JFTD15CkNPTkZJR19LUzg4NDI9bQpDT05GSUdfS1M4ODUx
PW0KQ09ORklHX0tTODg1MV9NTEw9bQpDT05GSUdfS1NaODg0WF9QQ0k9bQpDT05GSUdfTkVU
X1ZFTkRPUl9NSUNST0NISVA9eQpDT05GSUdfRU5DMjhKNjA9bQojIENPTkZJR19FTkMyOEo2
MF9XUklURVZFUklGWSBpcyBub3Qgc2V0CkNPTkZJR19FTkNYMjRKNjAwPW0KQ09ORklHX0xB
Tjc0M1g9bQpDT05GSUdfTkVUX1ZFTkRPUl9NSUNST1NFTUk9eQpDT05GSUdfTVNDQ19PQ0VM
T1RfU1dJVENIX0xJQj1tCkNPTkZJR19ORVRfVkVORE9SX01ZUkk9eQpDT05GSUdfTVlSSTEw
R0U9bQpDT05GSUdfTVlSSTEwR0VfRENBPXkKQ09ORklHX0ZFQUxOWD1tCkNPTkZJR19ORVRf
VkVORE9SX05BVFNFTUk9eQpDT05GSUdfTkFUU0VNST1tCkNPTkZJR19OUzgzODIwPW0KQ09O
RklHX05FVF9WRU5ET1JfTkVURVJJT049eQpDT05GSUdfUzJJTz1tCkNPTkZJR19WWEdFPW0K
IyBDT05GSUdfVlhHRV9ERUJVR19UUkFDRV9BTEwgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9ORVRST05PTUU9eQpDT05GSUdfTkZQPW0KQ09ORklHX05GUF9BUFBfRkxPV0VSPXkK
Q09ORklHX05GUF9BUFBfQUJNX05JQz15CiMgQ09ORklHX05GUF9ERUJVRyBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX05JPXkKQ09ORklHX05JX1hHRV9NQU5BR0VNRU5UX0VORVQ9
bQpDT05GSUdfTkVUX1ZFTkRPUl84MzkwPXkKQ09ORklHX1BDTUNJQV9BWE5FVD1tCkNPTkZJ
R19ORTJLX1BDST1tCkNPTkZJR19QQ01DSUFfUENORVQ9bQpDT05GSUdfTkVUX1ZFTkRPUl9O
VklESUE9eQpDT05GSUdfRk9SQ0VERVRIPW0KQ09ORklHX05FVF9WRU5ET1JfT0tJPXkKQ09O
RklHX0VUSE9DPW0KQ09ORklHX05FVF9WRU5ET1JfUEFDS0VUX0VOR0lORVM9eQpDT05GSUdf
SEFNQUNIST1tCkNPTkZJR19ZRUxMT1dGSU49bQpDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5E
Tz15CkNPTkZJR19JT05JQz1tCkNPTkZJR19ORVRfVkVORE9SX1FMT0dJQz15CkNPTkZJR19R
TEEzWFhYPW0KQ09ORklHX1FMQ05JQz1tCkNPTkZJR19RTENOSUNfU1JJT1Y9eQpDT05GSUdf
UUxDTklDX0RDQj15CkNPTkZJR19RTENOSUNfSFdNT049eQpDT05GSUdfTkVUWEVOX05JQz1t
CkNPTkZJR19RRUQ9bQpDT05GSUdfUUVEX0xMMj15CkNPTkZJR19RRURfU1JJT1Y9eQpDT05G
SUdfUUVERT1tCkNPTkZJR19RRURfUkRNQT15CkNPTkZJR19RRURfSVNDU0k9eQpDT05GSUdf
UUVEX0ZDT0U9eQpDT05GSUdfUUVEX09PTz15CkNPTkZJR19ORVRfVkVORE9SX1FVQUxDT01N
PXkKQ09ORklHX1FDT01fRU1BQz1tCkNPTkZJR19STU5FVD1tCkNPTkZJR19ORVRfVkVORE9S
X1JEQz15CkNPTkZJR19SNjA0MD1tCkNPTkZJR19ORVRfVkVORE9SX1JFQUxURUs9eQpDT05G
SUdfQVRQPW0KQ09ORklHXzgxMzlDUD1tCkNPTkZJR184MTM5VE9PPW0KIyBDT05GSUdfODEz
OVRPT19QSU8gaXMgbm90IHNldApDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQpDT05G
SUdfODEzOVRPT184MTI5PXkKIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNl
dApDT05GSUdfUjgxNjk9bQpDT05GSUdfTkVUX1ZFTkRPUl9SRU5FU0FTPXkKQ09ORklHX05F
VF9WRU5ET1JfUk9DS0VSPXkKQ09ORklHX1JPQ0tFUj1tCkNPTkZJR19ORVRfVkVORE9SX1NB
TVNVTkc9eQpDT05GSUdfU1hHQkVfRVRIPW0KQ09ORklHX05FVF9WRU5ET1JfU0VFUT15CkNP
TkZJR19ORVRfVkVORE9SX1NPTEFSRkxBUkU9eQpDT05GSUdfU0ZDPW0KQ09ORklHX1NGQ19N
VEQ9eQpDT05GSUdfU0ZDX01DRElfTU9OPXkKQ09ORklHX1NGQ19TUklPVj15CkNPTkZJR19T
RkNfTUNESV9MT0dHSU5HPXkKQ09ORklHX1NGQ19GQUxDT049bQpDT05GSUdfU0ZDX0ZBTENP
Tl9NVEQ9eQpDT05GSUdfTkVUX1ZFTkRPUl9TSUxBTj15CkNPTkZJR19TQzkyMDMxPW0KQ09O
RklHX05FVF9WRU5ET1JfU0lTPXkKQ09ORklHX1NJUzkwMD1tCkNPTkZJR19TSVMxOTA9bQpD
T05GSUdfTkVUX1ZFTkRPUl9TTVNDPXkKQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCkNPTkZJ
R19FUElDMTAwPW0KQ09ORklHX1NNU0M5MTFYPW0KQ09ORklHX1NNU0M5NDIwPW0KQ09ORklH
X05FVF9WRU5ET1JfU09DSU9ORVhUPXkKQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTz15CkNP
TkZJR19TVE1NQUNfRVRIPW0KIyBDT05GSUdfU1RNTUFDX1NFTEZURVNUUyBpcyBub3Qgc2V0
CkNPTkZJR19TVE1NQUNfUExBVEZPUk09bQpDT05GSUdfRFdNQUNfR0VORVJJQz1tCkNPTkZJ
R19EV01BQ19JTlRFTD1tCkNPTkZJR19TVE1NQUNfUENJPW0KQ09ORklHX05FVF9WRU5ET1Jf
U1VOPXkKQ09ORklHX0hBUFBZTUVBTD1tCkNPTkZJR19TVU5HRU09bQpDT05GSUdfQ0FTU0lO
ST1tCkNPTkZJR19OSVU9bQpDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUz15CkNPTkZJR19E
V0NfWExHTUFDPW0KQ09ORklHX0RXQ19YTEdNQUNfUENJPW0KQ09ORklHX05FVF9WRU5ET1Jf
VEVIVVRJPXkKQ09ORklHX1RFSFVUST1tCkNPTkZJR19ORVRfVkVORE9SX1RJPXkKIyBDT05G
SUdfVElfQ1BTV19QSFlfU0VMIGlzIG5vdCBzZXQKQ09ORklHX1RMQU49bQpDT05GSUdfTkVU
X1ZFTkRPUl9WSUE9eQpDT05GSUdfVklBX1JISU5FPW0KQ09ORklHX1ZJQV9SSElORV9NTUlP
PXkKQ09ORklHX1ZJQV9WRUxPQ0lUWT1tCkNPTkZJR19ORVRfVkVORE9SX1dJWk5FVD15CkNP
TkZJR19XSVpORVRfVzUxMDA9bQpDT05GSUdfV0laTkVUX1c1MzAwPW0KIyBDT05GSUdfV0la
TkVUX0JVU19ESVJFQ1QgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfQlVTX0lORElSRUNU
IGlzIG5vdCBzZXQKQ09ORklHX1dJWk5FVF9CVVNfQU5ZPXkKQ09ORklHX1dJWk5FVF9XNTEw
MF9TUEk9bQpDT05GSUdfTkVUX1ZFTkRPUl9YSUxJTlg9eQpDT05GSUdfWElMSU5YX0VNQUNM
SVRFPW0KQ09ORklHX1hJTElOWF9BWElfRU1BQz1tCkNPTkZJR19YSUxJTlhfTExfVEVNQUM9
bQpDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT009eQpDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQpD
T05GSUdfRkREST1tCkNPTkZJR19ERUZYWD1tCkNPTkZJR19ERUZYWF9NTUlPPXkKQ09ORklH
X1NLRlA9bQojIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfU0IxMDAwPW0K
Q09ORklHX1BIWUxJTks9bQpDT05GSUdfUEhZTElCPW0KQ09ORklHX1NXUEhZPXkKQ09ORklH
X0xFRF9UUklHR0VSX1BIWT15CkNPTkZJR19GSVhFRF9QSFk9bQpDT05GSUdfU0ZQPW0KCiMK
IyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiMKQ09ORklHX0FNRF9QSFk9bQpDT05GSUdfQURJ
Tl9QSFk9bQpDT05GSUdfQVFVQU5USUFfUEhZPW0KQ09ORklHX0FYODg3OTZCX1BIWT1tCkNP
TkZJR19CUk9BRENPTV9QSFk9bQpDT05GSUdfQkNNNTQxNDBfUEhZPW0KQ09ORklHX0JDTTdY
WFhfUEhZPW0KQ09ORklHX0JDTTg0ODgxX1BIWT1tCkNPTkZJR19CQ004N1hYX1BIWT1tCkNP
TkZJR19CQ01fTkVUX1BIWUxJQj1tCkNPTkZJR19DSUNBREFfUEhZPW0KQ09ORklHX0NPUlRJ
TkFfUEhZPW0KQ09ORklHX0RBVklDT01fUEhZPW0KQ09ORklHX0lDUExVU19QSFk9bQpDT05G
SUdfTFhUX1BIWT1tCkNPTkZJR19JTlRFTF9YV0FZX1BIWT1tCkNPTkZJR19MU0lfRVQxMDEx
Q19QSFk9bQpDT05GSUdfTUFSVkVMTF9QSFk9bQpDT05GSUdfTUFSVkVMTF8xMEdfUEhZPW0K
Q09ORklHX01JQ1JFTF9QSFk9bQpDT05GSUdfTUlDUk9DSElQX1BIWT1tCkNPTkZJR19NSUNS
T0NISVBfVDFfUEhZPW0KQ09ORklHX01JQ1JPU0VNSV9QSFk9bQpDT05GSUdfTkFUSU9OQUxf
UEhZPW0KQ09ORklHX05YUF9USkExMVhYX1BIWT1tCkNPTkZJR19BVDgwM1hfUEhZPW0KQ09O
RklHX1FTRU1JX1BIWT1tCkNPTkZJR19SRUFMVEVLX1BIWT1tCkNPTkZJR19SRU5FU0FTX1BI
WT1tCiMgQ09ORklHX1JPQ0tDSElQX1BIWSBpcyBub3Qgc2V0CkNPTkZJR19TTVNDX1BIWT1t
CkNPTkZJR19TVEUxMFhQPW0KQ09ORklHX1RFUkFORVRJQ1NfUEhZPW0KQ09ORklHX0RQODM4
MjJfUEhZPW0KQ09ORklHX0RQODNUQzgxMV9QSFk9bQpDT05GSUdfRFA4Mzg0OF9QSFk9bQpD
T05GSUdfRFA4Mzg2N19QSFk9bQpDT05GSUdfRFA4Mzg2OV9QSFk9bQpDT05GSUdfVklURVNT
RV9QSFk9bQpDT05GSUdfWElMSU5YX0dNSUkyUkdNSUk9bQpDT05GSUdfTUlDUkVMX0tTODk5
NU1BPW0KQ09ORklHX01ESU9fREVWSUNFPW0KQ09ORklHX01ESU9fQlVTPW0KQ09ORklHX01E
SU9fREVWUkVTPW0KQ09ORklHX01ESU9fQklUQkFORz1tCkNPTkZJR19NRElPX0JDTV9VTklN
QUM9bQpDT05GSUdfTURJT19DQVZJVU09bQpDT05GSUdfTURJT19HUElPPW0KQ09ORklHX01E
SU9fSTJDPW0KQ09ORklHX01ESU9fTVZVU0I9bQpDT05GSUdfTURJT19NU0NDX01JSU09bQpD
T05GSUdfTURJT19USFVOREVSPW0KCiMKIyBNRElPIE11bHRpcGxleGVycwojCgojCiMgUENT
IGRldmljZSBkcml2ZXJzCiMKQ09ORklHX1BDU19YUENTPW0KQ09ORklHX1BDU19MWU5YPW0K
IyBlbmQgb2YgUENTIGRldmljZSBkcml2ZXJzCgpDT05GSUdfUExJUD1tCkNPTkZJR19QUFA9
bQpDT05GSUdfUFBQX0JTRENPTVA9bQpDT05GSUdfUFBQX0RFRkxBVEU9bQpDT05GSUdfUFBQ
X0ZJTFRFUj15CkNPTkZJR19QUFBfTVBQRT1tCkNPTkZJR19QUFBfTVVMVElMSU5LPXkKQ09O
RklHX1BQUE9BVE09bQpDT05GSUdfUFBQT0U9bQpDT05GSUdfUFBUUD1tCkNPTkZJR19QUFBP
TDJUUD1tCkNPTkZJR19QUFBfQVNZTkM9bQpDT05GSUdfUFBQX1NZTkNfVFRZPW0KQ09ORklH
X1NMSVA9bQpDT05GSUdfU0xIQz1tCkNPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQpDT05GSUdf
U0xJUF9TTUFSVD15CkNPTkZJR19TTElQX01PREVfU0xJUDY9eQpDT05GSUdfVVNCX05FVF9E
UklWRVJTPW0KQ09ORklHX1VTQl9DQVRDPW0KQ09ORklHX1VTQl9LQVdFVEg9bQpDT05GSUdf
VVNCX1BFR0FTVVM9bQpDT05GSUdfVVNCX1JUTDgxNTA9bQpDT05GSUdfVVNCX1JUTDgxNTI9
bQpDT05GSUdfVVNCX0xBTjc4WFg9bQpDT05GSUdfVVNCX1VTQk5FVD1tCkNPTkZJR19VU0Jf
TkVUX0FYODgxN1g9bQpDT05GSUdfVVNCX05FVF9BWDg4MTc5XzE3OEE9bQpDT05GSUdfVVNC
X05FVF9DRENFVEhFUj1tCkNPTkZJR19VU0JfTkVUX0NEQ19FRU09bQpDT05GSUdfVVNCX05F
VF9DRENfTkNNPW0KQ09ORklHX1VTQl9ORVRfSFVBV0VJX0NEQ19OQ009bQpDT05GSUdfVVNC
X05FVF9DRENfTUJJTT1tCkNPTkZJR19VU0JfTkVUX0RNOTYwMT1tCkNPTkZJR19VU0JfTkVU
X1NSOTcwMD1tCkNPTkZJR19VU0JfTkVUX1NSOTgwMD1tCkNPTkZJR19VU0JfTkVUX1NNU0M3
NVhYPW0KQ09ORklHX1VTQl9ORVRfU01TQzk1WFg9bQpDT05GSUdfVVNCX05FVF9HTDYyMEE9
bQpDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KQ09ORklHX1VTQl9ORVRfUExVU0I9bQpDT05G
SUdfVVNCX05FVF9NQ1M3ODMwPW0KQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCkNPTkZJ
R19VU0JfTkVUX0NEQ19TVUJTRVRfRU5BQkxFPW0KQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNF
VD1tCkNPTkZJR19VU0JfQUxJX001NjMyPXkKQ09ORklHX1VTQl9BTjI3MjA9eQpDT05GSUdf
VVNCX0JFTEtJTj15CkNPTkZJR19VU0JfQVJNTElOVVg9eQpDT05GSUdfVVNCX0VQU09OMjg4
OD15CkNPTkZJR19VU0JfS0MyMTkwPXkKQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KQ09ORklH
X1VTQl9ORVRfQ1g4MjMxMF9FVEg9bQpDT05GSUdfVVNCX05FVF9LQUxNSUE9bQpDT05GSUdf
VVNCX05FVF9RTUlfV1dBTj1tCkNPTkZJR19VU0JfSFNPPW0KQ09ORklHX1VTQl9ORVRfSU5U
NTFYMT1tCkNPTkZJR19VU0JfQ0RDX1BIT05FVD1tCkNPTkZJR19VU0JfSVBIRVRIPW0KQ09O
RklHX1VTQl9TSUVSUkFfTkVUPW0KQ09ORklHX1VTQl9WTDYwMD1tCkNPTkZJR19VU0JfTkVU
X0NIOTIwMD1tCkNPTkZJR19VU0JfTkVUX0FRQzExMT1tCkNPTkZJR19VU0JfUlRMODE1M19F
Q009bQpDT05GSUdfV0xBTj15CkNPTkZJR19XTEFOX1ZFTkRPUl9BRE1URUs9eQpDT05GSUdf
QURNODIxMT1tCkNPTkZJR19BVEhfQ09NTU9OPW0KQ09ORklHX1dMQU5fVkVORE9SX0FUSD15
CiMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVEg1Sz1tCkNPTkZJR19B
VEg1S19ERUJVRz15CkNPTkZJR19BVEg1S19UUkFDRVI9eQpDT05GSUdfQVRINUtfUENJPXkK
Q09ORklHX0FUSDlLX0hXPW0KQ09ORklHX0FUSDlLX0NPTU1PTj1tCkNPTkZJR19BVEg5S19D
T01NT05fREVCVUc9eQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBPUlQ9eQpDT05GSUdfQVRI
OUs9bQpDT05GSUdfQVRIOUtfUENJPXkKQ09ORklHX0FUSDlLX0FIQj15CkNPTkZJR19BVEg5
S19ERUJVR0ZTPXkKQ09ORklHX0FUSDlLX1NUQVRJT05fU1RBVElTVElDUz15CkNPTkZJR19B
VEg5S19EWU5BQ0s9eQpDT05GSUdfQVRIOUtfV09XPXkKQ09ORklHX0FUSDlLX1JGS0lMTD15
CkNPTkZJR19BVEg5S19DSEFOTkVMX0NPTlRFWFQ9eQpDT05GSUdfQVRIOUtfUENPRU09eQpD
T05GSUdfQVRIOUtfUENJX05PX0VFUFJPTT1tCkNPTkZJR19BVEg5S19IVEM9bQpDT05GSUdf
QVRIOUtfSFRDX0RFQlVHRlM9eQpDT05GSUdfQVRIOUtfSFdSTkc9eQpDT05GSUdfQVRIOUtf
Q09NTU9OX1NQRUNUUkFMPXkKQ09ORklHX0NBUkw5MTcwPW0KQ09ORklHX0NBUkw5MTcwX0xF
RFM9eQpDT05GSUdfQ0FSTDkxNzBfREVCVUdGUz15CkNPTkZJR19DQVJMOTE3MF9XUEM9eQoj
IENPTkZJR19DQVJMOTE3MF9IV1JORyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0w9bQpDT05G
SUdfQVRINktMX1NESU89bQpDT05GSUdfQVRINktMX1VTQj1tCkNPTkZJR19BVEg2S0xfREVC
VUc9eQpDT05GSUdfQVRINktMX1RSQUNJTkc9eQpDT05GSUdfQVI1NTIzPW0KQ09ORklHX1dJ
TDYyMTA9bQpDT05GSUdfV0lMNjIxMF9JU1JfQ09SPXkKQ09ORklHX1dJTDYyMTBfVFJBQ0lO
Rz15CkNPTkZJR19XSUw2MjEwX0RFQlVHRlM9eQpDT05GSUdfQVRIMTBLPW0KQ09ORklHX0FU
SDEwS19DRT15CkNPTkZJR19BVEgxMEtfUENJPW0KQ09ORklHX0FUSDEwS19TRElPPW0KQ09O
RklHX0FUSDEwS19VU0I9bQpDT05GSUdfQVRIMTBLX0RFQlVHPXkKQ09ORklHX0FUSDEwS19E
RUJVR0ZTPXkKQ09ORklHX0FUSDEwS19TUEVDVFJBTD15CkNPTkZJR19BVEgxMEtfVFJBQ0lO
Rz15CkNPTkZJR19XQ04zNlhYPW0KQ09ORklHX1dDTjM2WFhfREVCVUdGUz15CkNPTkZJR19B
VEgxMUs9bQpDT05GSUdfQVRIMTFLX0FIQj1tCkNPTkZJR19BVEgxMUtfUENJPW0KQ09ORklH
X0FUSDExS19ERUJVRz15CkNPTkZJR19BVEgxMUtfREVCVUdGUz15CiMgQ09ORklHX0FUSDEx
S19UUkFDSU5HIGlzIG5vdCBzZXQKQ09ORklHX0FUSDExS19TUEVDVFJBTD15CkNPTkZJR19X
TEFOX1ZFTkRPUl9BVE1FTD15CkNPTkZJR19BVE1FTD1tCkNPTkZJR19QQ0lfQVRNRUw9bQpD
T05GSUdfUENNQ0lBX0FUTUVMPW0KQ09ORklHX0FUNzZDNTBYX1VTQj1tCkNPTkZJR19XTEFO
X1ZFTkRPUl9CUk9BRENPTT15CkNPTkZJR19CNDM9bQpDT05GSUdfQjQzX0JDTUE9eQpDT05G
SUdfQjQzX1NTQj15CkNPTkZJR19CNDNfQlVTRVNfQkNNQV9BTkRfU1NCPXkKIyBDT05GSUdf
QjQzX0JVU0VTX0JDTUEgaXMgbm90IHNldAojIENPTkZJR19CNDNfQlVTRVNfU1NCIGlzIG5v
dCBzZXQKQ09ORklHX0I0M19QQ0lfQVVUT1NFTEVDVD15CkNPTkZJR19CNDNfUENJQ09SRV9B
VVRPU0VMRUNUPXkKQ09ORklHX0I0M19TRElPPXkKQ09ORklHX0I0M19CQ01BX1BJTz15CkNP
TkZJR19CNDNfUElPPXkKQ09ORklHX0I0M19QSFlfRz15CkNPTkZJR19CNDNfUEhZX049eQpD
T05GSUdfQjQzX1BIWV9MUD15CkNPTkZJR19CNDNfUEhZX0hUPXkKQ09ORklHX0I0M19MRURT
PXkKQ09ORklHX0I0M19IV1JORz15CiMgQ09ORklHX0I0M19ERUJVRyBpcyBub3Qgc2V0CkNP
TkZJR19CNDNMRUdBQ1k9bQpDT05GSUdfQjQzTEVHQUNZX1BDSV9BVVRPU0VMRUNUPXkKQ09O
RklHX0I0M0xFR0FDWV9QQ0lDT1JFX0FVVE9TRUxFQ1Q9eQpDT05GSUdfQjQzTEVHQUNZX0xF
RFM9eQpDT05GSUdfQjQzTEVHQUNZX0hXUk5HPXkKQ09ORklHX0I0M0xFR0FDWV9ERUJVRz15
CkNPTkZJR19CNDNMRUdBQ1lfRE1BPXkKQ09ORklHX0I0M0xFR0FDWV9QSU89eQpDT05GSUdf
QjQzTEVHQUNZX0RNQV9BTkRfUElPX01PREU9eQojIENPTkZJR19CNDNMRUdBQ1lfRE1BX01P
REUgaXMgbm90IHNldAojIENPTkZJR19CNDNMRUdBQ1lfUElPX01PREUgaXMgbm90IHNldApD
T05GSUdfQlJDTVVUSUw9bQpDT05GSUdfQlJDTVNNQUM9bQpDT05GSUdfQlJDTUZNQUM9bQpD
T05GSUdfQlJDTUZNQUNfUFJPVE9fQkNEQz15CkNPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dC
VUY9eQpDT05GSUdfQlJDTUZNQUNfU0RJTz15CkNPTkZJR19CUkNNRk1BQ19VU0I9eQpDT05G
SUdfQlJDTUZNQUNfUENJRT15CkNPTkZJR19CUkNNX1RSQUNJTkc9eQpDT05GSUdfQlJDTURC
Rz15CkNPTkZJR19XTEFOX1ZFTkRPUl9DSVNDTz15CkNPTkZJR19BSVJPPW0KQ09ORklHX0FJ
Uk9fQ1M9bQpDT05GSUdfV0xBTl9WRU5ET1JfSU5URUw9eQpDT05GSUdfSVBXMjEwMD1tCkNP
TkZJR19JUFcyMTAwX01PTklUT1I9eQojIENPTkZJR19JUFcyMTAwX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0lQVzIyMDA9bQpDT05GSUdfSVBXMjIwMF9NT05JVE9SPXkKQ09ORklHX0lQ
VzIyMDBfUkFESU9UQVA9eQpDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUz15CkNPTkZJR19J
UFcyMjAwX1FPUz15CiMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdf
TElCSVBXPW0KIyBDT05GSUdfTElCSVBXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lXTEVH
QUNZPW0KQ09ORklHX0lXTDQ5NjU9bQpDT05GSUdfSVdMMzk0NT1tCgojCiMgaXdsMzk0NSAv
IGl3bDQ5NjUgRGVidWdnaW5nIE9wdGlvbnMKIwpDT05GSUdfSVdMRUdBQ1lfREVCVUc9eQpD
T05GSUdfSVdMRUdBQ1lfREVCVUdGUz15CiMgZW5kIG9mIGl3bDM5NDUgLyBpd2w0OTY1IERl
YnVnZ2luZyBPcHRpb25zCgpDT05GSUdfSVdMV0lGST1tCkNPTkZJR19JV0xXSUZJX0xFRFM9
eQpDT05GSUdfSVdMRFZNPW0KQ09ORklHX0lXTE1WTT1tCkNPTkZJR19JV0xXSUZJX09QTU9E
RV9NT0RVTEFSPXkKIyBDT05GSUdfSVdMV0lGSV9CQ0FTVF9GSUxURVJJTkcgaXMgbm90IHNl
dAoKIwojIERlYnVnZ2luZyBPcHRpb25zCiMKQ09ORklHX0lXTFdJRklfREVCVUc9eQpDT05G
SUdfSVdMV0lGSV9ERUJVR0ZTPXkKQ09ORklHX0lXTFdJRklfREVWSUNFX1RSQUNJTkc9eQoj
IGVuZCBvZiBEZWJ1Z2dpbmcgT3B0aW9ucwoKQ09ORklHX1dMQU5fVkVORE9SX0lOVEVSU0lM
PXkKQ09ORklHX0hPU1RBUD1tCkNPTkZJR19IT1NUQVBfRklSTVdBUkU9eQpDT05GSUdfSE9T
VEFQX0ZJUk1XQVJFX05WUkFNPXkKQ09ORklHX0hPU1RBUF9QTFg9bQpDT05GSUdfSE9TVEFQ
X1BDST1tCkNPTkZJR19IT1NUQVBfQ1M9bQpDT05GSUdfSEVSTUVTPW0KQ09ORklHX0hFUk1F
U19QUklTTT15CkNPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CkNPTkZJR19QTFhf
SEVSTUVTPW0KQ09ORklHX1RNRF9IRVJNRVM9bQpDT05GSUdfTk9SVEVMX0hFUk1FUz1tCkNP
TkZJR19QQ0lfSEVSTUVTPW0KQ09ORklHX1BDTUNJQV9IRVJNRVM9bQpDT05GSUdfUENNQ0lB
X1NQRUNUUlVNPW0KQ09ORklHX09SSU5PQ09fVVNCPW0KQ09ORklHX1A1NF9DT01NT049bQpD
T05GSUdfUDU0X1VTQj1tCkNPTkZJR19QNTRfUENJPW0KQ09ORklHX1A1NF9TUEk9bQojIENP
TkZJR19QNTRfU1BJX0RFRkFVTFRfRUVQUk9NIGlzIG5vdCBzZXQKQ09ORklHX1A1NF9MRURT
PXkKQ09ORklHX1BSSVNNNTQ9bQpDT05GSUdfV0xBTl9WRU5ET1JfTUFSVkVMTD15CkNPTkZJ
R19MSUJFUlRBUz1tCkNPTkZJR19MSUJFUlRBU19VU0I9bQpDT05GSUdfTElCRVJUQVNfQ1M9
bQpDT05GSUdfTElCRVJUQVNfU0RJTz1tCkNPTkZJR19MSUJFUlRBU19TUEk9bQojIENPTkZJ
R19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19MSUJFUlRBU19NRVNIPXkKQ09O
RklHX0xJQkVSVEFTX1RISU5GSVJNPW0KIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk1fREVC
VUcgaXMgbm90IHNldApDT05GSUdfTElCRVJUQVNfVEhJTkZJUk1fVVNCPW0KQ09ORklHX01X
SUZJRVg9bQpDT05GSUdfTVdJRklFWF9TRElPPW0KQ09ORklHX01XSUZJRVhfUENJRT1tCkNP
TkZJR19NV0lGSUVYX1VTQj1tCkNPTkZJR19NV0w4Sz1tCkNPTkZJR19XTEFOX1ZFTkRPUl9N
RURJQVRFSz15CkNPTkZJR19NVDc2MDFVPW0KQ09ORklHX01UNzZfQ09SRT1tCkNPTkZJR19N
VDc2X0xFRFM9eQpDT05GSUdfTVQ3Nl9VU0I9bQpDT05GSUdfTVQ3Nl9TRElPPW0KQ09ORklH
X01UNzZ4MDJfTElCPW0KQ09ORklHX01UNzZ4MDJfVVNCPW0KQ09ORklHX01UNzZfQ09OTkFD
X0xJQj1tCkNPTkZJR19NVDc2eDBfQ09NTU9OPW0KQ09ORklHX01UNzZ4MFU9bQpDT05GSUdf
TVQ3NngwRT1tCkNPTkZJR19NVDc2eDJfQ09NTU9OPW0KQ09ORklHX01UNzZ4MkU9bQpDT05G
SUdfTVQ3NngyVT1tCkNPTkZJR19NVDc2MDNFPW0KQ09ORklHX01UNzYxNV9DT01NT049bQpD
T05GSUdfTVQ3NjE1RT1tCkNPTkZJR19NVDc2NjNfVVNCX1NESU9fQ09NTU9OPW0KQ09ORklH
X01UNzY2M1U9bQpDT05GSUdfTVQ3NjYzUz1tCkNPTkZJR19NVDc5MTVFPW0KQ09ORklHX01U
NzkyMUU9bQpDT05GSUdfV0xBTl9WRU5ET1JfTUlDUk9DSElQPXkKQ09ORklHX1dJTEMxMDAw
PW0KQ09ORklHX1dJTEMxMDAwX1NESU89bQpDT05GSUdfV0lMQzEwMDBfU1BJPW0KIyBDT05G
SUdfV0lMQzEwMDBfSFdfT09CX0lOVFIgaXMgbm90IHNldApDT05GSUdfV0xBTl9WRU5ET1Jf
UkFMSU5LPXkKQ09ORklHX1JUMlgwMD1tCkNPTkZJR19SVDI0MDBQQ0k9bQpDT05GSUdfUlQy
NTAwUENJPW0KQ09ORklHX1JUNjFQQ0k9bQpDT05GSUdfUlQyODAwUENJPW0KQ09ORklHX1JU
MjgwMFBDSV9SVDMzWFg9eQpDT05GSUdfUlQyODAwUENJX1JUMzVYWD15CkNPTkZJR19SVDI4
MDBQQ0lfUlQ1M1hYPXkKQ09ORklHX1JUMjgwMFBDSV9SVDMyOTA9eQpDT05GSUdfUlQyNTAw
VVNCPW0KQ09ORklHX1JUNzNVU0I9bQpDT05GSUdfUlQyODAwVVNCPW0KQ09ORklHX1JUMjgw
MFVTQl9SVDMzWFg9eQpDT05GSUdfUlQyODAwVVNCX1JUMzVYWD15CkNPTkZJR19SVDI4MDBV
U0JfUlQzNTczPXkKQ09ORklHX1JUMjgwMFVTQl9SVDUzWFg9eQpDT05GSUdfUlQyODAwVVNC
X1JUNTVYWD15CkNPTkZJR19SVDI4MDBVU0JfVU5LTk9XTj15CkNPTkZJR19SVDI4MDBfTElC
PW0KQ09ORklHX1JUMjgwMF9MSUJfTU1JTz1tCkNPTkZJR19SVDJYMDBfTElCX01NSU89bQpD
T05GSUdfUlQyWDAwX0xJQl9QQ0k9bQpDT05GSUdfUlQyWDAwX0xJQl9VU0I9bQpDT05GSUdf
UlQyWDAwX0xJQj1tCkNPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFPXkKQ09ORklHX1JUMlgw
MF9MSUJfQ1JZUFRPPXkKQ09ORklHX1JUMlgwMF9MSUJfTEVEUz15CkNPTkZJR19SVDJYMDBf
TElCX0RFQlVHRlM9eQojIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdf
V0xBTl9WRU5ET1JfUkVBTFRFSz15CkNPTkZJR19SVEw4MTgwPW0KQ09ORklHX1JUTDgxODc9
bQpDT05GSUdfUlRMODE4N19MRURTPXkKQ09ORklHX1JUTF9DQVJEUz1tCkNPTkZJR19SVEw4
MTkyQ0U9bQpDT05GSUdfUlRMODE5MlNFPW0KQ09ORklHX1JUTDgxOTJERT1tCkNPTkZJR19S
VEw4NzIzQUU9bQpDT05GSUdfUlRMODcyM0JFPW0KQ09ORklHX1JUTDgxODhFRT1tCkNPTkZJ
R19SVEw4MTkyRUU9bQpDT05GSUdfUlRMODgyMUFFPW0KQ09ORklHX1JUTDgxOTJDVT1tCkNP
TkZJR19SVExXSUZJPW0KQ09ORklHX1JUTFdJRklfUENJPW0KQ09ORklHX1JUTFdJRklfVVNC
PW0KQ09ORklHX1JUTFdJRklfREVCVUc9eQpDT05GSUdfUlRMODE5MkNfQ09NTU9OPW0KQ09O
RklHX1JUTDg3MjNfQ09NTU9OPW0KQ09ORklHX1JUTEJUQ09FWElTVD1tCkNPTkZJR19SVEw4
WFhYVT1tCkNPTkZJR19SVEw4WFhYVV9VTlRFU1RFRD15CkNPTkZJR19SVFc4OD1tCkNPTkZJ
R19SVFc4OF9DT1JFPW0KQ09ORklHX1JUVzg4X1BDST1tCkNPTkZJR19SVFc4OF84ODIyQj1t
CkNPTkZJR19SVFc4OF84ODIyQz1tCkNPTkZJR19SVFc4OF84NzIzRD1tCkNPTkZJR19SVFc4
OF84ODIxQz1tCkNPTkZJR19SVFc4OF84ODIyQkU9bQpDT05GSUdfUlRXODhfODgyMkNFPW0K
Q09ORklHX1JUVzg4Xzg3MjNERT1tCkNPTkZJR19SVFc4OF84ODIxQ0U9bQpDT05GSUdfUlRX
ODhfREVCVUc9eQpDT05GSUdfUlRXODhfREVCVUdGUz15CkNPTkZJR19XTEFOX1ZFTkRPUl9S
U0k9eQpDT05GSUdfUlNJXzkxWD1tCkNPTkZJR19SU0lfREVCVUdGUz15CkNPTkZJR19SU0lf
U0RJTz1tCkNPTkZJR19SU0lfVVNCPW0KQ09ORklHX1JTSV9DT0VYPXkKQ09ORklHX1dMQU5f
VkVORE9SX1NUPXkKQ09ORklHX0NXMTIwMD1tCkNPTkZJR19DVzEyMDBfV0xBTl9TRElPPW0K
Q09ORklHX0NXMTIwMF9XTEFOX1NQST1tCkNPTkZJR19XTEFOX1ZFTkRPUl9UST15CkNPTkZJ
R19XTDEyNTE9bQpDT05GSUdfV0wxMjUxX1NQST1tCkNPTkZJR19XTDEyNTFfU0RJTz1tCkNP
TkZJR19XTDEyWFg9bQpDT05GSUdfV0wxOFhYPW0KQ09ORklHX1dMQ09SRT1tCkNPTkZJR19X
TENPUkVfU0RJTz1tCkNPTkZJR19XSUxJTktfUExBVEZPUk1fREFUQT15CkNPTkZJR19XTEFO
X1ZFTkRPUl9aWURBUz15CkNPTkZJR19VU0JfWkQxMjAxPW0KQ09ORklHX1pEMTIxMVJXPW0K
IyBDT05GSUdfWkQxMjExUldfREVCVUcgaXMgbm90IHNldApDT05GSUdfV0xBTl9WRU5ET1Jf
UVVBTlRFTk5BPXkKQ09ORklHX1FUTkZNQUM9bQpDT05GSUdfUVRORk1BQ19QQ0lFPW0KQ09O
RklHX1BDTUNJQV9SQVlDUz1tCkNPTkZJR19QQ01DSUFfV0wzNTAxPW0KQ09ORklHX01BQzgw
MjExX0hXU0lNPW0KQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTj1tCkNPTkZJR19WSVJUX1dJ
Rkk9bQojIENPTkZJR19XQU4gaXMgbm90IHNldApDT05GSUdfSUVFRTgwMjE1NF9EUklWRVJT
PW0KQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCPW0KQ09ORklHX0lFRUU4MDIxNTRfQVQ4NlJG
MjMwPW0KIyBDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzBfREVCVUdGUyBpcyBub3Qgc2V0
CkNPTkZJR19JRUVFODAyMTU0X01SRjI0SjQwPW0KQ09ORklHX0lFRUU4MDIxNTRfQ0MyNTIw
PW0KQ09ORklHX0lFRUU4MDIxNTRfQVRVU0I9bQpDT05GSUdfSUVFRTgwMjE1NF9BREY3MjQy
PW0KQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwPW0KIyBDT05GSUdfSUVFRTgwMjE1NF9DQTgy
MTBfREVCVUdGUyBpcyBub3Qgc2V0CkNPTkZJR19JRUVFODAyMTU0X01DUjIwQT1tCkNPTkZJ
R19JRUVFODAyMTU0X0hXU0lNPW0KQ09ORklHX1hFTl9ORVRERVZfRlJPTlRFTkQ9bQpDT05G
SUdfWEVOX05FVERFVl9CQUNLRU5EPW0KQ09ORklHX1ZNWE5FVDM9bQpDT05GSUdfRlVKSVRT
VV9FUz1tCkNPTkZJR19VU0I0X05FVD1tCkNPTkZJR19IWVBFUlZfTkVUPW0KQ09ORklHX05F
VERFVlNJTT1tCkNPTkZJR19ORVRfRkFJTE9WRVI9bQpDT05GSUdfSVNETj15CkNPTkZJR19J
U0ROX0NBUEk9eQpDT05GSUdfQ0FQSV9UUkFDRT15CkNPTkZJR19JU0ROX0NBUElfTUlERExF
V0FSRT15CkNPTkZJR19NSVNETj1tCkNPTkZJR19NSVNETl9EU1A9bQpDT05GSUdfTUlTRE5f
TDFPSVA9bQoKIwojIG1JU0ROIGhhcmR3YXJlIGRyaXZlcnMKIwpDT05GSUdfTUlTRE5fSEZD
UENJPW0KQ09ORklHX01JU0ROX0hGQ01VTFRJPW0KQ09ORklHX01JU0ROX0hGQ1VTQj1tCkNP
TkZJR19NSVNETl9BVk1GUklUWj1tCkNPTkZJR19NSVNETl9TUEVFREZBWD1tCkNPTkZJR19N
SVNETl9JTkZJTkVPTj1tCkNPTkZJR19NSVNETl9XNjY5Mj1tCkNPTkZJR19NSVNETl9ORVRK
RVQ9bQpDT05GSUdfTUlTRE5fSERMQz1tCkNPTkZJR19NSVNETl9JUEFDPW0KQ09ORklHX01J
U0ROX0lTQVI9bQpDT05GSUdfTlZNPXkKQ09ORklHX05WTV9QQkxLPW0KIyBDT05GSUdfTlZN
X1BCTEtfREVCVUcgaXMgbm90IHNldAoKIwojIElucHV0IGRldmljZSBzdXBwb3J0CiMKQ09O
RklHX0lOUFVUPXkKQ09ORklHX0lOUFVUX0xFRFM9eQpDT05GSUdfSU5QVVRfRkZfTUVNTEVT
Uz1tCkNPTkZJR19JTlBVVF9TUEFSU0VLTUFQPW0KQ09ORklHX0lOUFVUX01BVFJJWEtNQVA9
bQoKIwojIFVzZXJsYW5kIGludGVyZmFjZXMKIwpDT05GSUdfSU5QVVRfTU9VU0VERVY9bQpD
T05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQpDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NS
RUVOX1g9MTAyNApDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CkNPTkZJR19J
TlBVVF9KT1lERVY9bQpDT05GSUdfSU5QVVRfRVZERVY9eQojIENPTkZJR19JTlBVVF9FVkJV
RyBpcyBub3Qgc2V0CgojCiMgSW5wdXQgRGV2aWNlIERyaXZlcnMKIwpDT05GSUdfSU5QVVRf
S0VZQk9BUkQ9eQpDT05GSUdfS0VZQk9BUkRfQURDPW0KQ09ORklHX0tFWUJPQVJEX0FEUDU1
MjA9bQpDT05GSUdfS0VZQk9BUkRfQURQNTU4OD1tCkNPTkZJR19LRVlCT0FSRF9BRFA1NTg5
PW0KQ09ORklHX0tFWUJPQVJEX0FQUExFU1BJPW0KQ09ORklHX0tFWUJPQVJEX0FUS0JEPW0K
Q09ORklHX0tFWUJPQVJEX1FUMTA1MD1tCkNPTkZJR19LRVlCT0FSRF9RVDEwNzA9bQpDT05G
SUdfS0VZQk9BUkRfUVQyMTYwPW0KQ09ORklHX0tFWUJPQVJEX0RMSU5LX0RJUjY4NT1tCkNP
TkZJR19LRVlCT0FSRF9MS0tCRD1tCkNPTkZJR19LRVlCT0FSRF9HUElPPW0KQ09ORklHX0tF
WUJPQVJEX0dQSU9fUE9MTEVEPW0KQ09ORklHX0tFWUJPQVJEX1RDQTY0MTY9bQpDT05GSUdf
S0VZQk9BUkRfVENBODQxOD1tCkNPTkZJR19LRVlCT0FSRF9NQVRSSVg9bQpDT05GSUdfS0VZ
Qk9BUkRfTE04MzIzPW0KQ09ORklHX0tFWUJPQVJEX0xNODMzMz1tCkNPTkZJR19LRVlCT0FS
RF9NQVg3MzU5PW0KQ09ORklHX0tFWUJPQVJEX01DUz1tCkNPTkZJR19LRVlCT0FSRF9NUFIx
MjE9bQpDT05GSUdfS0VZQk9BUkRfTkVXVE9OPW0KQ09ORklHX0tFWUJPQVJEX09QRU5DT1JF
Uz1tCkNPTkZJR19LRVlCT0FSRF9TQU1TVU5HPW0KQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZ
PW0KQ09ORklHX0tFWUJPQVJEX1NVTktCRD1tCkNPTkZJR19LRVlCT0FSRF9JUVM2Mlg9bQpD
T05GSUdfS0VZQk9BUkRfVE0yX1RPVUNIS0VZPW0KQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9
bQpDT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQpDT05GSUdfS0VZQk9BUkRfQ1JPU19FQz1tCkNP
TkZJR19LRVlCT0FSRF9NVEtfUE1JQz1tCkNPTkZJR19JTlBVVF9NT1VTRT15CkNPTkZJR19N
T1VTRV9QUzI9bQpDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQpDT05GSUdfTU9VU0VfUFMyX0JZ
RD15CkNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKQ09ORklHX01PVVNFX1BTMl9TWU5B
UFRJQ1M9eQpDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDU19TTUJVUz15CkNPTkZJR19NT1VT
RV9QUzJfQ1lQUkVTUz15CkNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQpDT05GSUdfTU9V
U0VfUFMyX1RSQUNLUE9JTlQ9eQpDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIPXkKQ09ORklH
X01PVVNFX1BTMl9FTEFOVEVDSF9TTUJVUz15CkNPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUM9
eQpDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUPXkKQ09ORklHX01PVVNFX1BTMl9GT0NBTFRF
Q0g9eQpDT05GSUdfTU9VU0VfUFMyX1ZNTU9VU0U9eQpDT05GSUdfTU9VU0VfUFMyX1NNQlVT
PXkKQ09ORklHX01PVVNFX1NFUklBTD1tCkNPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KQ09O
RklHX01PVVNFX0JDTTU5NzQ9bQpDT05GSUdfTU9VU0VfQ1lBUEE9bQpDT05GSUdfTU9VU0Vf
RUxBTl9JMkM9bQpDT05GSUdfTU9VU0VfRUxBTl9JMkNfSTJDPXkKQ09ORklHX01PVVNFX0VM
QU5fSTJDX1NNQlVTPXkKQ09ORklHX01PVVNFX1ZTWFhYQUE9bQpDT05GSUdfTU9VU0VfR1BJ
Tz1tCkNPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDPW0KQ09ORklHX01PVVNFX1NZTkFQVElD
U19VU0I9bQpDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQpDT05GSUdfSk9ZU1RJQ0tfQU5BTE9H
PW0KQ09ORklHX0pPWVNUSUNLX0EzRD1tCkNPTkZJR19KT1lTVElDS19BREM9bQpDT05GSUdf
Sk9ZU1RJQ0tfQURJPW0KQ09ORklHX0pPWVNUSUNLX0NPQlJBPW0KQ09ORklHX0pPWVNUSUNL
X0dGMks9bQpDT05GSUdfSk9ZU1RJQ0tfR1JJUD1tCkNPTkZJR19KT1lTVElDS19HUklQX01Q
PW0KQ09ORklHX0pPWVNUSUNLX0dVSUxMRU1PVD1tCkNPTkZJR19KT1lTVElDS19JTlRFUkFD
VD1tCkNPTkZJR19KT1lTVElDS19TSURFV0lOREVSPW0KQ09ORklHX0pPWVNUSUNLX1RNREM9
bQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFPW0KQ09ORklHX0pPWVNUSUNLX0lGT1JDRV9VU0I9
bQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMj1tCkNPTkZJR19KT1lTVElDS19XQVJSSU9S
PW0KQ09ORklHX0pPWVNUSUNLX01BR0VMTEFOPW0KQ09ORklHX0pPWVNUSUNLX1NQQUNFT1JC
PW0KQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTD1tCkNPTkZJR19KT1lTVElDS19TVElOR0VS
PW0KQ09ORklHX0pPWVNUSUNLX1RXSURKT1k9bQpDT05GSUdfSk9ZU1RJQ0tfWkhFTkhVQT1t
CkNPTkZJR19KT1lTVElDS19EQjk9bQpDT05GSUdfSk9ZU1RJQ0tfR0FNRUNPTj1tCkNPTkZJ
R19KT1lTVElDS19UVVJCT0dSQUZYPW0KQ09ORklHX0pPWVNUSUNLX0FTNTAxMT1tCkNPTkZJ
R19KT1lTVElDS19KT1lEVU1QPW0KQ09ORklHX0pPWVNUSUNLX1hQQUQ9bQpDT05GSUdfSk9Z
U1RJQ0tfWFBBRF9GRj15CkNPTkZJR19KT1lTVElDS19YUEFEX0xFRFM9eQpDT05GSUdfSk9Z
U1RJQ0tfV0FMS0VSQTA3MDE9bQpDT05GSUdfSk9ZU1RJQ0tfUFNYUEFEX1NQST1tCkNPTkZJ
R19KT1lTVElDS19QU1hQQURfU1BJX0ZGPXkKQ09ORklHX0pPWVNUSUNLX1BYUkM9bQpDT05G
SUdfSk9ZU1RJQ0tfRlNJQTZCPW0KQ09ORklHX0lOUFVUX1RBQkxFVD15CkNPTkZJR19UQUJM
RVRfVVNCX0FDRUNBRD1tCkNPTkZJR19UQUJMRVRfVVNCX0FJUFRFSz1tCkNPTkZJR19UQUJM
RVRfVVNCX0hBTldBTkc9bQpDT05GSUdfVEFCTEVUX1VTQl9LQlRBQj1tCkNPTkZJR19UQUJM
RVRfVVNCX1BFR0FTVVM9bQpDT05GSUdfVEFCTEVUX1NFUklBTF9XQUNPTTQ9bQpDT05GSUdf
SU5QVVRfVE9VQ0hTQ1JFRU49eQpDT05GSUdfVE9VQ0hTQ1JFRU5fUFJPUEVSVElFUz15CkNP
TkZJR19UT1VDSFNDUkVFTl84OFBNODYwWD1tCkNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2
PW0KQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3Nz1tCkNPTkZJR19UT1VDSFNDUkVFTl9BRDc4
Nzk9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQz1tCkNPTkZJR19UT1VDSFNDUkVF
Tl9BRDc4NzlfU1BJPW0KQ09ORklHX1RPVUNIU0NSRUVOX0FEQz1tCkNPTkZJR19UT1VDSFND
UkVFTl9BVE1FTF9NWFQ9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfTVhUX1QzNz15CkNP
TkZJR19UT1VDSFNDUkVFTl9BVU9fUElYQ0lSPW0KQ09ORklHX1RPVUNIU0NSRUVOX0JVMjEw
MTM9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQlUyMTAyOT1tCkNPTkZJR19UT1VDSFNDUkVFTl9D
SElQT05FX0lDTjg1MDU9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RNQTE0MD1tCkNPTkZJ
R19UT1VDSFNDUkVFTl9DWThDVE1HMTEwPW0KQ09ORklHX1RPVUNIU0NSRUVOX0NZVFRTUF9D
T1JFPW0KQ09ORklHX1RPVUNIU0NSRUVOX0NZVFRTUF9JMkM9bQpDT05GSUdfVE9VQ0hTQ1JF
RU5fQ1lUVFNQX1NQST1tCkNPTkZJR19UT1VDSFNDUkVFTl9DWVRUU1A0X0NPUkU9bQpDT05G
SUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9JMkM9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQ
NF9TUEk9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fREE5MDM0PW0KQ09ORklHX1RPVUNIU0NSRUVO
X0RBOTA1Mj1tCkNPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPPW0KQ09ORklHX1RPVUNIU0NS
RUVOX0hBTVBTSElSRT1tCkNPTkZJR19UT1VDSFNDUkVFTl9FRVRJPW0KQ09ORklHX1RPVUNI
U0NSRUVOX0VHQUxBWF9TRVJJQUw9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRVhDMzAwMD1tCkNP
TkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVPW0KQ09ORklHX1RPVUNIU0NSRUVOX0dPT0RJWD1t
CkNPTkZJR19UT1VDSFNDUkVFTl9ISURFRVA9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fSUxJMjEw
WD1tCkNPTkZJR19UT1VDSFNDUkVFTl9TNlNZNzYxPW0KQ09ORklHX1RPVUNIU0NSRUVOX0dV
TlpFPW0KQ09ORklHX1RPVUNIU0NSRUVOX0VLVEYyMTI3PW0KQ09ORklHX1RPVUNIU0NSRUVO
X0VMQU49bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPPW0KQ09ORklHX1RPVUNIU0NSRUVOX1dB
Q09NX1c4MDAxPW0KQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX0kyQz1tCkNPTkZJR19UT1VD
SFNDUkVFTl9NQVgxMTgwMT1tCkNPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwPW0KQ09ORklH
X1RPVUNIU0NSRUVOX01NUzExND1tCkNPTkZJR19UT1VDSFNDUkVFTl9NRUxGQVNfTUlQND1t
CkNPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0g9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElP
PW0KQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyPW0KQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1P
VU5UPW0KQ09ORklHX1RPVUNIU0NSRUVOX0VEVF9GVDVYMDY9bQpDT05GSUdfVE9VQ0hTQ1JF
RU5fVE9VQ0hSSUdIVD1tCkNPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTj1tCkNPTkZJR19U
T1VDSFNDUkVFTl9USV9BTTMzNVhfVFNDPW0KQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDA9
bQpDT05GSUdfVE9VQ0hTQ1JFRU5fUElYQ0lSPW0KQ09ORklHX1RPVUNIU0NSRUVOX1dEVDg3
WFhfSTJDPW0KQ09ORklHX1RPVUNIU0NSRUVOX1dNODMxWD1tCkNPTkZJR19UT1VDSFNDUkVF
Tl9XTTk3WFg9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1PXkKQ09ORklHX1RPVUNIU0NS
RUVOX1dNOTcxMj15CkNPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTM9eQpDT05GSUdfVE9VQ0hT
Q1JFRU5fVVNCX0NPTVBPU0lURT1tCkNPTkZJR19UT1VDSFNDUkVFTl9NQzEzNzgzPW0KQ09O
RklHX1RPVUNIU0NSRUVOX1VTQl9FR0FMQVg9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX1BB
TkpJVD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfM009eQpDT05GSUdfVE9VQ0hTQ1JFRU5f
VVNCX0lUTT15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRVRVUkJPPXkKQ09ORklHX1RPVUNI
U0NSRUVOX1VTQl9HVU5aRT15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRE1DX1RTQzEwPXkK
Q09ORklHX1RPVUNIU0NSRUVOX1VTQl9JUlRPVUNIPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VT
Ql9JREVBTFRFSz15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfR0VORVJBTF9UT1VDSD15CkNP
TkZJR19UT1VDSFNDUkVFTl9VU0JfR09UT1A9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0pB
U1RFQz15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUxPPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9FMkk9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX1pZVFJPTklDPXkKQ09ORklHX1RP
VUNIU0NSRUVOX1VTQl9FVFRfVEM0NVVTQj15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfTkVY
SU89eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VBU1lUT1VDSD15CkNPTkZJR19UT1VDSFND
UkVFTl9UT1VDSElUMjEzPW0KQ09ORklHX1RPVUNIU0NSRUVOX1RTQ19TRVJJTz1tCkNPTkZJ
R19UT1VDSFNDUkVFTl9UU0MyMDBYX0NPUkU9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAw
ND1tCkNPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1PW0KQ09ORklHX1RPVUNIU0NSRUVOX1RT
QzIwMDc9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwN19JSU89eQpDT05GSUdfVE9VQ0hT
Q1JFRU5fUENBUD1tCkNPTkZJR19UT1VDSFNDUkVFTl9STV9UUz1tCkNPTkZJR19UT1VDSFND
UkVFTl9TSUxFQUQ9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fU0lTX0kyQz1tCkNPTkZJR19UT1VD
SFNDUkVFTl9TVDEyMzI9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fU1RNRlRTPW0KQ09ORklHX1RP
VUNIU0NSRUVOX1NVUjQwPW0KQ09ORklHX1RPVUNIU0NSRUVOX1NVUkZBQ0UzX1NQST1tCkNP
TkZJR19UT1VDSFNDUkVFTl9TWDg2NTQ9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fVFBTNjUwN1g9
bQpDT05GSUdfVE9VQ0hTQ1JFRU5fWkVUNjIyMz1tCkNPTkZJR19UT1VDSFNDUkVFTl9aRk9S
Q0U9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fUk9ITV9CVTIxMDIzPW0KQ09ORklHX1RPVUNIU0NS
RUVOX0lRUzVYWD1tCkNPTkZJR19UT1VDSFNDUkVFTl9aSU5JVElYPW0KQ09ORklHX0lOUFVU
X01JU0M9eQpDT05GSUdfSU5QVVRfODhQTTg2MFhfT05LRVk9bQpDT05GSUdfSU5QVVRfODhQ
TTgwWF9PTktFWT1tCkNPTkZJR19JTlBVVF9BRDcxNFg9bQpDT05GSUdfSU5QVVRfQUQ3MTRY
X0kyQz1tCkNPTkZJR19JTlBVVF9BRDcxNFhfU1BJPW0KQ09ORklHX0lOUFVUX0FSSVpPTkFf
SEFQVElDUz1tCkNPTkZJR19JTlBVVF9CTUExNTA9bQpDT05GSUdfSU5QVVRfRTNYMF9CVVRU
T049bQpDT05GSUdfSU5QVVRfUENTUEtSPW0KQ09ORklHX0lOUFVUX01BWDc3NjkzX0hBUFRJ
Qz1tCkNPTkZJR19JTlBVVF9NQVg4OTI1X09OS0VZPW0KQ09ORklHX0lOUFVUX01BWDg5OTdf
SEFQVElDPW0KQ09ORklHX0lOUFVUX01DMTM3ODNfUFdSQlVUVE9OPW0KQ09ORklHX0lOUFVU
X01NQTg0NTA9bQpDT05GSUdfSU5QVVRfQVBBTkVMPW0KQ09ORklHX0lOUFVUX0dQSU9fQkVF
UEVSPW0KQ09ORklHX0lOUFVUX0dQSU9fREVDT0RFUj1tCkNPTkZJR19JTlBVVF9HUElPX1ZJ
QlJBPW0KQ09ORklHX0lOUFVUX0FUTEFTX0JUTlM9bQpDT05GSUdfSU5QVVRfQVRJX1JFTU9U
RTI9bQpDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEU9bQpDT05GSUdfSU5QVVRfS1hUSjk9
bQpDT05GSUdfSU5QVVRfUE9XRVJNQVRFPW0KQ09ORklHX0lOUFVUX1lFQUxJTks9bQpDT05G
SUdfSU5QVVRfQ00xMDk9bQpDT05GSUdfSU5QVVRfUkVHVUxBVE9SX0hBUFRJQz1tCkNPTkZJ
R19JTlBVVF9SRVRVX1BXUkJVVFRPTj1tCkNPTkZJR19JTlBVVF9BWFAyMFhfUEVLPW0KQ09O
RklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPW0KQ09ORklHX0lOUFVUX1RXTDQwMzBfVklC
UkE9bQpDT05GSUdfSU5QVVRfVFdMNjA0MF9WSUJSQT1tCkNPTkZJR19JTlBVVF9VSU5QVVQ9
bQpDT05GSUdfSU5QVVRfUEFMTUFTX1BXUkJVVFRPTj1tCkNPTkZJR19JTlBVVF9QQ0Y1MDYz
M19QTVU9bQpDT05GSUdfSU5QVVRfUENGODU3ND1tCkNPTkZJR19JTlBVVF9QV01fQkVFUEVS
PW0KQ09ORklHX0lOUFVUX1BXTV9WSUJSQT1tCkNPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9F
TkNPREVSPW0KQ09ORklHX0lOUFVUX0RBNzI4MF9IQVBUSUNTPW0KQ09ORklHX0lOUFVUX0RB
OTA1Ml9PTktFWT1tCkNPTkZJR19JTlBVVF9EQTkwNTVfT05LRVk9bQpDT05GSUdfSU5QVVRf
REE5MDYzX09OS0VZPW0KQ09ORklHX0lOUFVUX1dNODMxWF9PTj1tCkNPTkZJR19JTlBVVF9Q
Q0FQPW0KQ09ORklHX0lOUFVUX0FEWEwzNFg9bQpDT05GSUdfSU5QVVRfQURYTDM0WF9JMkM9
bQpDT05GSUdfSU5QVVRfQURYTDM0WF9TUEk9bQpDT05GSUdfSU5QVVRfSU1TX1BDVT1tCkNP
TkZJR19JTlBVVF9JUVMyNjlBPW0KQ09ORklHX0lOUFVUX0NNQTMwMDA9bQpDT05GSUdfSU5Q
VVRfQ01BMzAwMF9JMkM9bQpDT05GSUdfSU5QVVRfWEVOX0tCRERFVl9GUk9OVEVORD1tCkNP
TkZJR19JTlBVVF9JREVBUEFEX1NMSURFQkFSPW0KQ09ORklHX0lOUFVUX1NPQ19CVVRUT05f
QVJSQVk9bQpDT05GSUdfSU5QVVRfRFJWMjYwWF9IQVBUSUNTPW0KQ09ORklHX0lOUFVUX0RS
VjI2NjVfSEFQVElDUz1tCkNPTkZJR19JTlBVVF9EUlYyNjY3X0hBUFRJQ1M9bQpDT05GSUdf
SU5QVVRfUkFWRV9TUF9QV1JCVVRUT049bQpDT05GSUdfUk1JNF9DT1JFPW0KQ09ORklHX1JN
STRfSTJDPW0KQ09ORklHX1JNSTRfU1BJPW0KQ09ORklHX1JNSTRfU01CPW0KQ09ORklHX1JN
STRfRjAzPXkKQ09ORklHX1JNSTRfRjAzX1NFUklPPW0KQ09ORklHX1JNSTRfMkRfU0VOU09S
PXkKQ09ORklHX1JNSTRfRjExPXkKQ09ORklHX1JNSTRfRjEyPXkKQ09ORklHX1JNSTRfRjMw
PXkKQ09ORklHX1JNSTRfRjM0PXkKQ09ORklHX1JNSTRfRjNBPXkKIyBDT05GSUdfUk1JNF9G
NTQgaXMgbm90IHNldApDT05GSUdfUk1JNF9GNTU9eQoKIwojIEhhcmR3YXJlIEkvTyBwb3J0
cwojCkNPTkZJR19TRVJJTz1tCkNPTkZJR19BUkNIX01JR0hUX0hBVkVfUENfU0VSSU89eQpD
T05GSUdfU0VSSU9fSTgwNDI9bQpDT05GSUdfU0VSSU9fU0VSUE9SVD1tCkNPTkZJR19TRVJJ
T19DVDgyQzcxMD1tCkNPTkZJR19TRVJJT19QQVJLQkQ9bQpDT05GSUdfU0VSSU9fUENJUFMy
PW0KQ09ORklHX1NFUklPX0xJQlBTMj1tCkNPTkZJR19TRVJJT19SQVc9bQpDT05GSUdfU0VS
SU9fQUxURVJBX1BTMj1tCkNPTkZJR19TRVJJT19QUzJNVUxUPW0KQ09ORklHX1NFUklPX0FS
Q19QUzI9bQpDT05GSUdfSFlQRVJWX0tFWUJPQVJEPW0KQ09ORklHX1NFUklPX0dQSU9fUFMy
PW0KQ09ORklHX1VTRVJJTz1tCkNPTkZJR19HQU1FUE9SVD1tCkNPTkZJR19HQU1FUE9SVF9O
UzU1OD1tCkNPTkZJR19HQU1FUE9SVF9MND1tCkNPTkZJR19HQU1FUE9SVF9FTVUxMEsxPW0K
Q09ORklHX0dBTUVQT1JUX0ZNODAxPW0KIyBlbmQgb2YgSGFyZHdhcmUgSS9PIHBvcnRzCiMg
ZW5kIG9mIElucHV0IGRldmljZSBzdXBwb3J0CgojCiMgQ2hhcmFjdGVyIGRldmljZXMKIwpD
T05GSUdfVFRZPXkKQ09ORklHX1ZUPXkKQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkK
Q09ORklHX1ZUX0NPTlNPTEU9eQpDT05GSUdfVlRfQ09OU09MRV9TTEVFUD15CkNPTkZJR19I
V19DT05TT0xFPXkKQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CkNPTkZJR19VTklY
OThfUFRZUz15CiMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKQ09ORklHX0xESVND
X0FVVE9MT0FEPXkKCiMKIyBTZXJpYWwgZHJpdmVycwojCkNPTkZJR19TRVJJQUxfRUFSTFlD
T049eQpDT05GSUdfU0VSSUFMXzgyNTA9eQojIENPTkZJR19TRVJJQUxfODI1MF9ERVBSRUNB
VEVEX09QVElPTlMgaXMgbm90IHNldApDT05GSUdfU0VSSUFMXzgyNTBfUE5QPXkKIyBDT05G
SUdfU0VSSUFMXzgyNTBfMTY1NTBBX1ZBUklBTlRTIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF84MjUwX0ZJTlRFSz15CkNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQ09ORklHX1NF
UklBTF84MjUwX0RNQT15CkNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFM
XzgyNTBfRVhBUj1tCkNPTkZJR19TRVJJQUxfODI1MF9DUz1tCkNPTkZJR19TRVJJQUxfODI1
MF9NRU5fTUNCPW0KQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCkNPTkZJR19TRVJJ
QUxfODI1MF9SVU5USU1FX1VBUlRTPTMyCkNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15
CkNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKQ09ORklHX1NFUklBTF84MjUwX1NI
QVJFX0lSUT15CiMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldApD
T05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKQ09ORklHX1NFUklBTF84MjUwX0RXTElCPXkKQ09O
RklHX1NFUklBTF84MjUwX0RXPW0KQ09ORklHX1NFUklBTF84MjUwX1JUMjg4WD15CkNPTkZJ
R19TRVJJQUxfODI1MF9MUFNTPXkKQ09ORklHX1NFUklBTF84MjUwX01JRD15CgojCiMgTm9u
LTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAojCkNPTkZJR19TRVJJQUxfTUFYMzEwMD1tCkNP
TkZJR19TRVJJQUxfTUFYMzEwWD1tCkNPTkZJR19TRVJJQUxfVUFSVExJVEU9bQpDT05GSUdf
U0VSSUFMX1VBUlRMSVRFX05SX1VBUlRTPTEKQ09ORklHX1NFUklBTF9DT1JFPXkKQ09ORklH
X1NFUklBTF9DT1JFX0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX0pTTT1tCiMgQ09ORklHX1NF
UklBTF9MQU5USVEgaXMgbm90IHNldApDT05GSUdfU0VSSUFMX1NDQ05YUD1tCkNPTkZJR19T
RVJJQUxfU0MxNklTN1hYX0NPUkU9bQpDT05GSUdfU0VSSUFMX1NDMTZJUzdYWD1tCkNPTkZJ
R19TRVJJQUxfU0MxNklTN1hYX0kyQz15CkNPTkZJR19TRVJJQUxfU0MxNklTN1hYX1NQST15
CiMgQ09ORklHX1NFUklBTF9CQ002M1hYIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9BTFRF
UkFfSlRBR1VBUlQ9bQpDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUPW0KQ09ORklHX1NFUklB
TF9BTFRFUkFfVUFSVF9NQVhQT1JUUz00CkNPTkZJR19TRVJJQUxfQUxURVJBX1VBUlRfQkFV
RFJBVEU9MTE1MjAwCkNPTkZJR19TRVJJQUxfQVJDPW0KQ09ORklHX1NFUklBTF9BUkNfTlJf
UE9SVFM9MQpDT05GSUdfU0VSSUFMX1JQMj1tCkNPTkZJR19TRVJJQUxfUlAyX05SX1VBUlRT
PTMyCkNPTkZJR19TRVJJQUxfRlNMX0xQVUFSVD1tCkNPTkZJR19TRVJJQUxfRlNMX0xJTkZM
RVhVQVJUPW0KQ09ORklHX1NFUklBTF9NRU5fWjEzNT1tCkNPTkZJR19TRVJJQUxfU1BSRD1t
CiMgZW5kIG9mIFNlcmlhbCBkcml2ZXJzCgpDT05GSUdfU0VSSUFMX01DVFJMX0dQSU89eQpD
T05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKQ09ORklHX1JPQ0tFVFBPUlQ9bQpDT05GSUdf
Q1lDTEFERVM9bQpDT05GSUdfQ1laX0lOVFI9eQpDT05GSUdfTU9YQV9JTlRFTExJTz1tCkNP
TkZJR19NT1hBX1NNQVJUSU89bQpDT05GSUdfU1lOQ0xJTktfR1Q9bQpDT05GSUdfSVNJPW0K
Q09ORklHX05fSERMQz1tCkNPTkZJR19OX0dTTT1tCkNPTkZJR19OT1pPTUk9bQpDT05GSUdf
TlVMTF9UVFk9bQpDT05GSUdfVFJBQ0VfUk9VVEVSPW0KQ09ORklHX1RSQUNFX1NJTks9bQpD
T05GSUdfSFZDX0RSSVZFUj15CkNPTkZJR19IVkNfSVJRPXkKQ09ORklHX0hWQ19YRU49eQpD
T05GSUdfSFZDX1hFTl9GUk9OVEVORD15CkNPTkZJR19TRVJJQUxfREVWX0JVUz15CkNPTkZJ
R19TRVJJQUxfREVWX0NUUkxfVFRZUE9SVD15CkNPTkZJR19QUklOVEVSPW0KQ09ORklHX0xQ
X0NPTlNPTEU9eQpDT05GSUdfUFBERVY9bQpDT05GSUdfVklSVElPX0NPTlNPTEU9bQpDT05G
SUdfSVBNSV9IQU5ETEVSPW0KQ09ORklHX0lQTUlfRE1JX0RFQ09ERT15CkNPTkZJR19JUE1J
X1BMQVRfREFUQT15CiMgQ09ORklHX0lQTUlfUEFOSUNfRVZFTlQgaXMgbm90IHNldApDT05G
SUdfSVBNSV9ERVZJQ0VfSU5URVJGQUNFPW0KQ09ORklHX0lQTUlfU0k9bQpDT05GSUdfSVBN
SV9TU0lGPW0KQ09ORklHX0lQTUlfV0FUQ0hET0c9bQpDT05GSUdfSVBNSV9QT1dFUk9GRj1t
CkNPTkZJR19JUE1CX0RFVklDRV9JTlRFUkZBQ0U9bQpDT05GSUdfSFdfUkFORE9NPW0KQ09O
RklHX0hXX1JBTkRPTV9USU1FUklPTUVNPW0KQ09ORklHX0hXX1JBTkRPTV9JTlRFTD1tCkNP
TkZJR19IV19SQU5ET01fQU1EPW0KQ09ORklHX0hXX1JBTkRPTV9CQTQzMT1tCkNPTkZJR19I
V19SQU5ET01fVklBPW0KQ09ORklHX0hXX1JBTkRPTV9WSVJUSU89bQpDT05GSUdfSFdfUkFO
RE9NX1hJUEhFUkE9bQpDT05GSUdfQVBQTElDT009bQoKIwojIFBDTUNJQSBjaGFyYWN0ZXIg
ZGV2aWNlcwojCkNPTkZJR19TWU5DTElOS19DUz1tCkNPTkZJR19DQVJETUFOXzQwMDA9bQpD
T05GSUdfQ0FSRE1BTl80MDQwPW0KQ09ORklHX1NDUjI0WD1tCkNPTkZJR19JUFdJUkVMRVNT
PW0KIyBlbmQgb2YgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCgpDT05GSUdfTVdBVkU9bQpD
T05GSUdfREVWTUVNPXkKIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CkNPTkZJR19OVlJB
TT15CkNPTkZJR19SQVdfRFJJVkVSPW0KQ09ORklHX01BWF9SQVdfREVWUz04MTkyCkNPTkZJ
R19ERVZQT1JUPXkKQ09ORklHX0hQRVQ9eQojIENPTkZJR19IUEVUX01NQVAgaXMgbm90IHNl
dApDT05GSUdfSEFOR0NIRUNLX1RJTUVSPW0KQ09ORklHX1RDR19UUE09bQpDT05GSUdfSFdf
UkFORE9NX1RQTT15CkNPTkZJR19UQ0dfVElTX0NPUkU9bQpDT05GSUdfVENHX1RJUz1tCkNP
TkZJR19UQ0dfVElTX1NQST1tCkNPTkZJR19UQ0dfVElTX1NQSV9DUjUwPXkKQ09ORklHX1RD
R19USVNfSTJDX0NSNTA9bQpDT05GSUdfVENHX1RJU19JMkNfQVRNRUw9bQpDT05GSUdfVENH
X1RJU19JMkNfSU5GSU5FT049bQpDT05GSUdfVENHX1RJU19JMkNfTlVWT1RPTj1tCkNPTkZJ
R19UQ0dfTlNDPW0KQ09ORklHX1RDR19BVE1FTD1tCkNPTkZJR19UQ0dfSU5GSU5FT049bQpD
T05GSUdfVENHX1hFTj1tCkNPTkZJR19UQ0dfQ1JCPW0KQ09ORklHX1RDR19WVFBNX1BST1hZ
PW0KQ09ORklHX1RDR19USVNfU1QzM1pQMjQ9bQpDT05GSUdfVENHX1RJU19TVDMzWlAyNF9J
MkM9bQpDT05GSUdfVENHX1RJU19TVDMzWlAyNF9TUEk9bQpDT05GSUdfVEVMQ0xPQ0s9bQpD
T05GSUdfWElMTFlCVVM9bQpDT05GSUdfWElMTFlCVVNfUENJRT1tCiMgZW5kIG9mIENoYXJh
Y3RlciBkZXZpY2VzCgojIENPTkZJR19SQU5ET01fVFJVU1RfQ1BVIGlzIG5vdCBzZXQKIyBD
T05GSUdfUkFORE9NX1RSVVNUX0JPT1RMT0FERVIgaXMgbm90IHNldAoKIwojIEkyQyBzdXBw
b3J0CiMKQ09ORklHX0kyQz15CkNPTkZJR19BQ1BJX0kyQ19PUFJFR0lPTj15CkNPTkZJR19J
MkNfQk9BUkRJTkZPPXkKQ09ORklHX0kyQ19DT01QQVQ9eQpDT05GSUdfSTJDX0NIQVJERVY9
bQpDT05GSUdfSTJDX01VWD1tCgojCiMgTXVsdGlwbGV4ZXIgSTJDIENoaXAgc3VwcG9ydAoj
CkNPTkZJR19JMkNfTVVYX0dQSU89bQpDT05GSUdfSTJDX01VWF9MVEM0MzA2PW0KQ09ORklH
X0kyQ19NVVhfUENBOTU0MT1tCkNPTkZJR19JMkNfTVVYX1BDQTk1NHg9bQpDT05GSUdfSTJD
X01VWF9SRUc9bQpDT05GSUdfSTJDX01VWF9NTFhDUExEPW0KIyBlbmQgb2YgTXVsdGlwbGV4
ZXIgSTJDIENoaXAgc3VwcG9ydAoKQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CkNPTkZJR19J
MkNfU01CVVM9bQpDT05GSUdfSTJDX0FMR09CSVQ9bQpDT05GSUdfSTJDX0FMR09QQ0E9bQoK
IwojIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAojCgojCiMgUEMgU01CdXMgaG9zdCBjb250
cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfSTJDX0FMSTE1MzU9bQpDT05GSUdfSTJDX0FMSTE1
NjM9bQpDT05GSUdfSTJDX0FMSTE1WDM9bQpDT05GSUdfSTJDX0FNRDc1Nj1tCkNPTkZJR19J
MkNfQU1ENzU2X1M0ODgyPW0KQ09ORklHX0kyQ19BTUQ4MTExPW0KQ09ORklHX0kyQ19BTURf
TVAyPW0KQ09ORklHX0kyQ19JODAxPW0KQ09ORklHX0kyQ19JU0NIPW0KQ09ORklHX0kyQ19J
U01UPW0KQ09ORklHX0kyQ19QSUlYND1tCkNPTkZJR19JMkNfQ0hUX1dDPW0KQ09ORklHX0ky
Q19ORk9SQ0UyPW0KQ09ORklHX0kyQ19ORk9SQ0UyX1M0OTg1PW0KQ09ORklHX0kyQ19OVklE
SUFfR1BVPW0KQ09ORklHX0kyQ19TSVM1NTk1PW0KQ09ORklHX0kyQ19TSVM2MzA9bQpDT05G
SUdfSTJDX1NJUzk2WD1tCkNPTkZJR19JMkNfVklBPW0KQ09ORklHX0kyQ19WSUFQUk89bQoK
IwojIEFDUEkgZHJpdmVycwojCkNPTkZJR19JMkNfU0NNST1tCgojCiMgSTJDIHN5c3RlbSBi
dXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiMKQ09ORklH
X0kyQ19DQlVTX0dQSU89bQpDT05GSUdfSTJDX0RFU0lHTldBUkVfQ09SRT15CkNPTkZJR19J
MkNfREVTSUdOV0FSRV9TTEFWRT15CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT15
CkNPTkZJR19JMkNfREVTSUdOV0FSRV9CQVlUUkFJTD15CkNPTkZJR19JMkNfREVTSUdOV0FS
RV9QQ0k9eQpDT05GSUdfSTJDX0VNRVYyPW0KQ09ORklHX0kyQ19HUElPPW0KIyBDT05GSUdf
STJDX0dQSU9fRkFVTFRfSU5KRUNUT1IgaXMgbm90IHNldApDT05GSUdfSTJDX0tFTVBMRD1t
CkNPTkZJR19JMkNfT0NPUkVTPW0KQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09bQpDT05GSUdf
STJDX1NJTVRFQz1tCkNPTkZJR19JMkNfWElMSU5YPW0KCiMKIyBFeHRlcm5hbCBJMkMvU01C
dXMgYWRhcHRlciBkcml2ZXJzCiMKQ09ORklHX0kyQ19ESU9MQU5fVTJDPW0KQ09ORklHX0ky
Q19ETE4yPW0KQ09ORklHX0kyQ19QQVJQT1JUPW0KQ09ORklHX0kyQ19ST0JPVEZVWlpfT1NJ
Rj1tCkNPTkZJR19JMkNfVEFPU19FVk09bQpDT05GSUdfSTJDX1RJTllfVVNCPW0KQ09ORklH
X0kyQ19WSVBFUkJPQVJEPW0KCiMKIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKIwpD
T05GSUdfSTJDX01MWENQTEQ9bQpDT05GSUdfSTJDX0NST1NfRUNfVFVOTkVMPW0KIyBlbmQg
b2YgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CgpDT05GSUdfSTJDX1NUVUI9bQpDT05GSUdf
STJDX1NMQVZFPXkKQ09ORklHX0kyQ19TTEFWRV9FRVBST009bQpDT05GSUdfSTJDX1NMQVZF
X1RFU1RVTklUPW0KIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAojIENPTkZJ
R19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMg
bm90IHNldAojIGVuZCBvZiBJMkMgc3VwcG9ydAoKIyBDT05GSUdfSTNDIGlzIG5vdCBzZXQK
Q09ORklHX1NQST15CiMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19TUElf
TUFTVEVSPXkKQ09ORklHX1NQSV9NRU09eQoKIwojIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBE
cml2ZXJzCiMKQ09ORklHX1NQSV9BTFRFUkE9bQpDT05GSUdfU1BJX0FYSV9TUElfRU5HSU5F
PW0KQ09ORklHX1NQSV9CSVRCQU5HPW0KQ09ORklHX1NQSV9CVVRURVJGTFk9bQpDT05GSUdf
U1BJX0NBREVOQ0U9bQpDT05GSUdfU1BJX0RFU0lHTldBUkU9bQpDT05GSUdfU1BJX0RXX0RN
QT15CkNPTkZJR19TUElfRFdfUENJPW0KQ09ORklHX1NQSV9EV19NTUlPPW0KQ09ORklHX1NQ
SV9ETE4yPW0KQ09ORklHX1NQSV9OWFBfRkxFWFNQST1tCkNPTkZJR19TUElfR1BJTz1tCkNP
TkZJR19TUElfTE03MF9MTFA9bQojIENPTkZJR19TUElfTEFOVElRX1NTQyBpcyBub3Qgc2V0
CkNPTkZJR19TUElfT0NfVElOWT1tCkNPTkZJR19TUElfUFhBMlhYPW0KQ09ORklHX1NQSV9Q
WEEyWFhfUENJPW0KIyBDT05GSUdfU1BJX1JPQ0tDSElQIGlzIG5vdCBzZXQKQ09ORklHX1NQ
SV9TQzE4SVM2MDI9bQpDT05GSUdfU1BJX1NJRklWRT1tCkNPTkZJR19TUElfTVhJQz1tCkNP
TkZJR19TUElfWENPTU09bQpDT05GSUdfU1BJX1hJTElOWD1tCkNPTkZJR19TUElfWllOUU1Q
X0dRU1BJPW0KQ09ORklHX1NQSV9BTUQ9bQoKIwojIFNQSSBNdWx0aXBsZXhlciBzdXBwb3J0
CiMKQ09ORklHX1NQSV9NVVg9bQoKIwojIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiMKQ09ORklH
X1NQSV9TUElERVY9bQpDT05GSUdfU1BJX0xPT1BCQUNLX1RFU1Q9bQpDT05GSUdfU1BJX1RM
RTYyWDA9bQpDT05GSUdfU1BJX1NMQVZFPXkKQ09ORklHX1NQSV9TTEFWRV9USU1FPW0KQ09O
RklHX1NQSV9TTEFWRV9TWVNURU1fQ09OVFJPTD1tCkNPTkZJR19TUElfRFlOQU1JQz15CiMg
Q09ORklHX1NQTUkgaXMgbm90IHNldAojIENPTkZJR19IU0kgaXMgbm90IHNldApDT05GSUdf
UFBTPXkKIyBDT05GSUdfUFBTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBz
dXBwb3J0CiMKQ09ORklHX1BQU19DTElFTlRfS1RJTUVSPW0KQ09ORklHX1BQU19DTElFTlRf
TERJU0M9bQpDT05GSUdfUFBTX0NMSUVOVF9QQVJQT1JUPW0KQ09ORklHX1BQU19DTElFTlRf
R1BJTz1tCgojCiMgUFBTIGdlbmVyYXRvcnMgc3VwcG9ydAojCgojCiMgUFRQIGNsb2NrIHN1
cHBvcnQKIwpDT05GSUdfUFRQXzE1ODhfQ0xPQ0s9eQpDT05GSUdfRFA4MzY0MF9QSFk9bQpD
T05GSUdfUFRQXzE1ODhfQ0xPQ0tfSU5FUz1tCkNPTkZJR19QVFBfMTU4OF9DTE9DS19LVk09
bQpDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfSURUODJQMzM9bQpDT05GSUdfUFRQXzE1ODhfQ0xP
Q0tfSURUQ009bQpDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfVk1XPW0KQ09ORklHX1BUUF8xNTg4
X0NMT0NLX09DUD1tCiMgZW5kIG9mIFBUUCBjbG9jayBzdXBwb3J0CgpDT05GSUdfUElOQ1RS
TD15CkNPTkZJR19QSU5NVVg9eQpDT05GSUdfUElOQ09ORj15CkNPTkZJR19HRU5FUklDX1BJ
TkNPTkY9eQojIENPTkZJR19ERUJVR19QSU5DVFJMIGlzIG5vdCBzZXQKQ09ORklHX1BJTkNU
UkxfQU1EPW0KQ09ORklHX1BJTkNUUkxfREE5MDYyPW0KQ09ORklHX1BJTkNUUkxfTUNQMjNT
MDhfSTJDPW0KQ09ORklHX1BJTkNUUkxfTUNQMjNTMDhfU1BJPW0KQ09ORklHX1BJTkNUUkxf
TUNQMjNTMDg9bQpDT05GSUdfUElOQ1RSTF9TWDE1MFg9eQpDT05GSUdfUElOQ1RSTF9CQVlU
UkFJTD15CkNPTkZJR19QSU5DVFJMX0NIRVJSWVZJRVc9eQpDT05GSUdfUElOQ1RSTF9MWU5Y
UE9JTlQ9eQpDT05GSUdfUElOQ1RSTF9JTlRFTD15CkNPTkZJR19QSU5DVFJMX0FMREVSTEFL
RT15CkNPTkZJR19QSU5DVFJMX0JST1hUT049eQpDT05GSUdfUElOQ1RSTF9DQU5OT05MQUtF
PXkKQ09ORklHX1BJTkNUUkxfQ0VEQVJGT1JLPXkKQ09ORklHX1BJTkNUUkxfREVOVkVSVE9O
PXkKQ09ORklHX1BJTkNUUkxfRUxLSEFSVExBS0U9eQpDT05GSUdfUElOQ1RSTF9FTU1JVFNC
VVJHPXkKQ09ORklHX1BJTkNUUkxfR0VNSU5JTEFLRT15CkNPTkZJR19QSU5DVFJMX0lDRUxB
S0U9eQpDT05GSUdfUElOQ1RSTF9KQVNQRVJMQUtFPXkKQ09ORklHX1BJTkNUUkxfTEFLRUZJ
RUxEPXkKQ09ORklHX1BJTkNUUkxfTEVXSVNCVVJHPXkKQ09ORklHX1BJTkNUUkxfU1VOUklT
RVBPSU5UPXkKQ09ORklHX1BJTkNUUkxfVElHRVJMQUtFPXkKCiMKIyBSZW5lc2FzIHBpbmN0
cmwgZHJpdmVycwojCiMgZW5kIG9mIFJlbmVzYXMgcGluY3RybCBkcml2ZXJzCgpDT05GSUdf
UElOQ1RSTF9NQURFUkE9bQpDT05GSUdfUElOQ1RSTF9DUzQ3TDE1PXkKQ09ORklHX1BJTkNU
UkxfQ1M0N0wzNT15CkNPTkZJR19QSU5DVFJMX0NTNDdMODU9eQpDT05GSUdfUElOQ1RSTF9D
UzQ3TDkwPXkKQ09ORklHX1BJTkNUUkxfQ1M0N0w5Mj15CkNPTkZJR19HUElPTElCPXkKQ09O
RklHX0dQSU9MSUJfRkFTVFBBVEhfTElNSVQ9NTEyCkNPTkZJR19HUElPX0FDUEk9eQpDT05G
SUdfR1BJT0xJQl9JUlFDSElQPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkNP
TkZJR19HUElPX0NERVY9eQpDT05GSUdfR1BJT19DREVWX1YxPXkKQ09ORklHX0dQSU9fR0VO
RVJJQz1tCkNPTkZJR19HUElPX01BWDczMFg9bQoKIwojIE1lbW9yeSBtYXBwZWQgR1BJTyBk
cml2ZXJzCiMKQ09ORklHX0dQSU9fQU1EUFQ9bQpDT05GSUdfR1BJT19EV0FQQj1tCkNPTkZJ
R19HUElPX0VYQVI9bQpDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNPW0KQ09ORklHX0dQ
SU9fSUNIPW0KQ09ORklHX0dQSU9fTUI4NlM3WD1tCkNPTkZJR19HUElPX01FTloxMjc9bQpD
T05GSUdfR1BJT19TSU9YPW0KQ09ORklHX0dQSU9fVlg4NTU9bQpDT05GSUdfR1BJT19BTURf
RkNIPW0KIyBlbmQgb2YgTWVtb3J5IG1hcHBlZCBHUElPIGRyaXZlcnMKCiMKIyBQb3J0LW1h
cHBlZCBJL08gR1BJTyBkcml2ZXJzCiMKQ09ORklHX0dQSU9fRjcxODhYPW0KQ09ORklHX0dQ
SU9fSVQ4Nz1tCkNPTkZJR19HUElPX1NDSD1tCkNPTkZJR19HUElPX1NDSDMxMVg9bQpDT05G
SUdfR1BJT19XSU5CT05EPW0KQ09ORklHX0dQSU9fV1MxNkM0OD1tCiMgZW5kIG9mIFBvcnQt
bWFwcGVkIEkvTyBHUElPIGRyaXZlcnMKCiMKIyBJMkMgR1BJTyBleHBhbmRlcnMKIwpDT05G
SUdfR1BJT19BRFA1NTg4PW0KQ09ORklHX0dQSU9fTUFYNzMwMD1tCkNPTkZJR19HUElPX01B
WDczMlg9bQpDT05GSUdfR1BJT19QQ0E5NTNYPW0KQ09ORklHX0dQSU9fUENBOTUzWF9JUlE9
eQpDT05GSUdfR1BJT19QQ0E5NTcwPW0KQ09ORklHX0dQSU9fUENGODU3WD1tCkNPTkZJR19H
UElPX1RQSUMyODEwPW0KIyBlbmQgb2YgSTJDIEdQSU8gZXhwYW5kZXJzCgojCiMgTUZEIEdQ
SU8gZXhwYW5kZXJzCiMKQ09ORklHX0dQSU9fQURQNTUyMD1tCkNPTkZJR19HUElPX0FSSVpP
TkE9bQpDT05GSUdfR1BJT19CRDk1NzFNV1Y9bQpDT05GSUdfR1BJT19DUllTVEFMX0NPVkU9
bQpDT05GSUdfR1BJT19EQTkwNTI9bQpDT05GSUdfR1BJT19EQTkwNTU9bQpDT05GSUdfR1BJ
T19ETE4yPW0KQ09ORklHX0dQSU9fSkFOWl9UVEw9bQpDT05GSUdfR1BJT19LRU1QTEQ9bQpD
T05GSUdfR1BJT19MUDM5NDM9bQpDT05GSUdfR1BJT19MUDg3M1g9bQpDT05GSUdfR1BJT19N
QURFUkE9bQpDT05GSUdfR1BJT19QQUxNQVM9eQpDT05GSUdfR1BJT19SQzVUNTgzPXkKQ09O
RklHX0dQSU9fVFBTNjUwODY9bQpDT05GSUdfR1BJT19UUFM2NTg2WD15CkNPTkZJR19HUElP
X1RQUzY1OTEwPXkKQ09ORklHX0dQSU9fVFBTNjU5MTI9bQpDT05GSUdfR1BJT19UUFM2ODQ3
MD15CkNPTkZJR19HUElPX1RRTVg4Nj1tCkNPTkZJR19HUElPX1RXTDQwMzA9bQpDT05GSUdf
R1BJT19UV0w2MDQwPW0KQ09ORklHX0dQSU9fVUNCMTQwMD1tCkNPTkZJR19HUElPX1dISVNL
RVlfQ09WRT1tCkNPTkZJR19HUElPX1dNODMxWD1tCkNPTkZJR19HUElPX1dNODM1MD1tCkNP
TkZJR19HUElPX1dNODk5ND1tCiMgZW5kIG9mIE1GRCBHUElPIGV4cGFuZGVycwoKIwojIFBD
SSBHUElPIGV4cGFuZGVycwojCkNPTkZJR19HUElPX0FNRDgxMTE9bQpDT05GSUdfR1BJT19N
TF9JT0g9bQpDT05GSUdfR1BJT19QQ0lfSURJT18xNj1tCkNPTkZJR19HUElPX1BDSUVfSURJ
T18yND1tCkNPTkZJR19HUElPX1JEQzMyMVg9bQojIGVuZCBvZiBQQ0kgR1BJTyBleHBhbmRl
cnMKCiMKIyBTUEkgR1BJTyBleHBhbmRlcnMKIwpDT05GSUdfR1BJT19NQVgzMTkxWD1tCkNP
TkZJR19HUElPX01BWDczMDE9bQpDT05GSUdfR1BJT19NQzMzODgwPW0KQ09ORklHX0dQSU9f
UElTT1NSPW0KQ09ORklHX0dQSU9fWFJBMTQwMz1tCiMgZW5kIG9mIFNQSSBHUElPIGV4cGFu
ZGVycwoKIwojIFVTQiBHUElPIGV4cGFuZGVycwojCkNPTkZJR19HUElPX1ZJUEVSQk9BUkQ9
bQojIGVuZCBvZiBVU0IgR1BJTyBleHBhbmRlcnMKCiMKIyBWaXJ0dWFsIEdQSU8gZHJpdmVy
cwojCkNPTkZJR19HUElPX0FHR1JFR0FUT1I9bQpDT05GSUdfR1BJT19NT0NLVVA9bQojIGVu
ZCBvZiBWaXJ0dWFsIEdQSU8gZHJpdmVycwoKQ09ORklHX1cxPW0KQ09ORklHX1cxX0NPTj15
CgojCiMgMS13aXJlIEJ1cyBNYXN0ZXJzCiMKQ09ORklHX1cxX01BU1RFUl9NQVRST1g9bQpD
T05GSUdfVzFfTUFTVEVSX0RTMjQ5MD1tCkNPTkZJR19XMV9NQVNURVJfRFMyNDgyPW0KQ09O
RklHX1cxX01BU1RFUl9EUzFXTT1tCkNPTkZJR19XMV9NQVNURVJfR1BJTz1tCkNPTkZJR19X
MV9NQVNURVJfU0dJPW0KIyBlbmQgb2YgMS13aXJlIEJ1cyBNYXN0ZXJzCgojCiMgMS13aXJl
IFNsYXZlcwojCkNPTkZJR19XMV9TTEFWRV9USEVSTT1tCkNPTkZJR19XMV9TTEFWRV9TTUVN
PW0KQ09ORklHX1cxX1NMQVZFX0RTMjQwNT1tCkNPTkZJR19XMV9TTEFWRV9EUzI0MDg9bQoj
IENPTkZJR19XMV9TTEFWRV9EUzI0MDhfUkVBREJBQ0sgaXMgbm90IHNldApDT05GSUdfVzFf
U0xBVkVfRFMyNDEzPW0KQ09ORklHX1cxX1NMQVZFX0RTMjQwNj1tCkNPTkZJR19XMV9TTEFW
RV9EUzI0MjM9bQpDT05GSUdfVzFfU0xBVkVfRFMyODA1PW0KQ09ORklHX1cxX1NMQVZFX0RT
MjQzMD1tCkNPTkZJR19XMV9TTEFWRV9EUzI0MzE9bQpDT05GSUdfVzFfU0xBVkVfRFMyNDMz
PW0KIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzX0NSQyBpcyBub3Qgc2V0CkNPTkZJR19XMV9T
TEFWRV9EUzI0Mzg9bQpDT05GSUdfVzFfU0xBVkVfRFMyNTBYPW0KQ09ORklHX1cxX1NMQVZF
X0RTMjc4MD1tCkNPTkZJR19XMV9TTEFWRV9EUzI3ODE9bQpDT05GSUdfVzFfU0xBVkVfRFMy
OEUwND1tCkNPTkZJR19XMV9TTEFWRV9EUzI4RTE3PW0KIyBlbmQgb2YgMS13aXJlIFNsYXZl
cwoKQ09ORklHX1BPV0VSX1JFU0VUPXkKQ09ORklHX1BPV0VSX1JFU0VUX01UNjMyMz15CkNP
TkZJR19QT1dFUl9SRVNFVF9SRVNUQVJUPXkKQ09ORklHX1BPV0VSX1NVUFBMWT15CiMgQ09O
RklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QT1dFUl9TVVBQTFlf
SFdNT049eQpDT05GSUdfUERBX1BPV0VSPW0KQ09ORklHX0dFTkVSSUNfQURDX0JBVFRFUlk9
bQpDT05GSUdfTUFYODkyNV9QT1dFUj1tCkNPTkZJR19XTTgzMVhfQkFDS1VQPW0KQ09ORklH
X1dNODMxWF9QT1dFUj1tCkNPTkZJR19XTTgzNTBfUE9XRVI9bQpDT05GSUdfVEVTVF9QT1dF
Uj1tCkNPTkZJR19CQVRURVJZXzg4UE04NjBYPW0KQ09ORklHX0NIQVJHRVJfQURQNTA2MT1t
CkNPTkZJR19CQVRURVJZX0NXMjAxNT1tCkNPTkZJR19CQVRURVJZX0RTMjc2MD1tCkNPTkZJ
R19CQVRURVJZX0RTMjc4MD1tCkNPTkZJR19CQVRURVJZX0RTMjc4MT1tCkNPTkZJR19CQVRU
RVJZX0RTMjc4Mj1tCkNPTkZJR19CQVRURVJZX1NCUz1tCkNPTkZJR19DSEFSR0VSX1NCUz1t
CkNPTkZJR19NQU5BR0VSX1NCUz1tCkNPTkZJR19CQVRURVJZX0JRMjdYWFg9bQpDT05GSUdf
QkFUVEVSWV9CUTI3WFhYX0kyQz1tCkNPTkZJR19CQVRURVJZX0JRMjdYWFhfSERRPW0KIyBD
T05GSUdfQkFUVEVSWV9CUTI3WFhYX0RUX1VQREFURVNfTlZNIGlzIG5vdCBzZXQKQ09ORklH
X0JBVFRFUllfREE5MDMwPW0KQ09ORklHX0JBVFRFUllfREE5MDUyPW0KQ09ORklHX0NIQVJH
RVJfREE5MTUwPW0KQ09ORklHX0JBVFRFUllfREE5MTUwPW0KQ09ORklHX0NIQVJHRVJfQVhQ
MjBYPW0KQ09ORklHX0JBVFRFUllfQVhQMjBYPW0KQ09ORklHX0FYUDIwWF9QT1dFUj1tCkNP
TkZJR19BWFAyODhfQ0hBUkdFUj1tCkNPTkZJR19BWFAyODhfRlVFTF9HQVVHRT1tCkNPTkZJ
R19CQVRURVJZX01BWDE3MDQwPW0KQ09ORklHX0JBVFRFUllfTUFYMTcwNDI9bQpDT05GSUdf
QkFUVEVSWV9NQVgxNzIxWD1tCkNPTkZJR19CQVRURVJZX1RXTDQwMzBfTUFEQz1tCkNPTkZJ
R19DSEFSR0VSXzg4UE04NjBYPW0KQ09ORklHX0NIQVJHRVJfUENGNTA2MzM9bQpDT05GSUdf
QkFUVEVSWV9SWDUxPW0KQ09ORklHX0NIQVJHRVJfSVNQMTcwND1tCkNPTkZJR19DSEFSR0VS
X01BWDg5MDM9bQpDT05GSUdfQ0hBUkdFUl9UV0w0MDMwPW0KQ09ORklHX0NIQVJHRVJfTFA4
NzI3PW0KQ09ORklHX0NIQVJHRVJfTFA4Nzg4PW0KQ09ORklHX0NIQVJHRVJfR1BJTz1tCkNP
TkZJR19DSEFSR0VSX01BTkFHRVI9eQpDT05GSUdfQ0hBUkdFUl9MVDM2NTE9bQpDT05GSUdf
Q0hBUkdFUl9MVEM0MTYyTD1tCkNPTkZJR19DSEFSR0VSX01BWDE0NTc3PW0KQ09ORklHX0NI
QVJHRVJfTUFYNzc2OTM9bQpDT05GSUdfQ0hBUkdFUl9NQVg4OTk3PW0KQ09ORklHX0NIQVJH
RVJfTUFYODk5OD1tCkNPTkZJR19DSEFSR0VSX01QMjYyOT1tCkNPTkZJR19DSEFSR0VSX0JR
MjQxNVg9bQpDT05GSUdfQ0hBUkdFUl9CUTI0MTkwPW0KQ09ORklHX0NIQVJHRVJfQlEyNDI1
Nz1tCkNPTkZJR19DSEFSR0VSX0JRMjQ3MzU9bQpDT05GSUdfQ0hBUkdFUl9CUTI1MTVYPW0K
Q09ORklHX0NIQVJHRVJfQlEyNTg5MD1tCkNPTkZJR19DSEFSR0VSX0JRMjU5ODA9bQpDT05G
SUdfQ0hBUkdFUl9CUTI1NlhYPW0KQ09ORklHX0NIQVJHRVJfU01CMzQ3PW0KQ09ORklHX0NI
QVJHRVJfVFBTNjUwOTA9bQpDT05GSUdfQkFUVEVSWV9HQVVHRV9MVEMyOTQxPW0KQ09ORklH
X0JBVFRFUllfUlQ1MDMzPW0KQ09ORklHX0NIQVJHRVJfUlQ5NDU1PW0KQ09ORklHX0NIQVJH
RVJfQ1JPU19VU0JQRD1tCkNPTkZJR19DSEFSR0VSX0JEOTk5NTQ9bQpDT05GSUdfQ0hBUkdF
Ul9XSUxDTz1tCkNPTkZJR19IV01PTj15CkNPTkZJR19IV01PTl9WSUQ9bQojIENPTkZJR19I
V01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKCiMKIyBOYXRpdmUgZHJpdmVycwojCkNPTkZJ
R19TRU5TT1JTX0FCSVRVR1VSVT1tCkNPTkZJR19TRU5TT1JTX0FCSVRVR1VSVTM9bQpDT05G
SUdfU0VOU09SU19BRDczMTQ9bQpDT05GSUdfU0VOU09SU19BRDc0MTQ9bQpDT05GSUdfU0VO
U09SU19BRDc0MTg9bQpDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQ09ORklHX1NFTlNPUlNf
QURNMTAyNT1tCkNPTkZJR19TRU5TT1JTX0FETTEwMjY9bQpDT05GSUdfU0VOU09SU19BRE0x
MDI5PW0KQ09ORklHX1NFTlNPUlNfQURNMTAzMT1tCkNPTkZJR19TRU5TT1JTX0FETTExNzc9
bQpDT05GSUdfU0VOU09SU19BRE05MjQwPW0KQ09ORklHX1NFTlNPUlNfQURUN1gxMD1tCkNP
TkZJR19TRU5TT1JTX0FEVDczMTA9bQpDT05GSUdfU0VOU09SU19BRFQ3NDEwPW0KQ09ORklH
X1NFTlNPUlNfQURUNzQxMT1tCkNPTkZJR19TRU5TT1JTX0FEVDc0NjI9bQpDT05GSUdfU0VO
U09SU19BRFQ3NDcwPW0KQ09ORklHX1NFTlNPUlNfQURUNzQ3NT1tCkNPTkZJR19TRU5TT1JT
X0FIVDEwPW0KQ09ORklHX1NFTlNPUlNfQVMzNzA9bQpDT05GSUdfU0VOU09SU19BU0M3NjIx
PW0KQ09ORklHX1NFTlNPUlNfQVhJX0ZBTl9DT05UUk9MPW0KQ09ORklHX1NFTlNPUlNfSzhU
RU1QPW0KQ09ORklHX1NFTlNPUlNfSzEwVEVNUD1tCkNPTkZJR19TRU5TT1JTX0ZBTTE1SF9Q
T1dFUj1tCkNPTkZJR19TRU5TT1JTX0FNRF9FTkVSR1k9bQpDT05GSUdfU0VOU09SU19BUFBM
RVNNQz1tCkNPTkZJR19TRU5TT1JTX0FTQjEwMD1tCkNPTkZJR19TRU5TT1JTX0FTUEVFRD1t
CkNPTkZJR19TRU5TT1JTX0FUWFAxPW0KQ09ORklHX1NFTlNPUlNfQ09SU0FJUl9DUFJPPW0K
Q09ORklHX1NFTlNPUlNfQ09SU0FJUl9QU1U9bQpDT05GSUdfU0VOU09SU19EUklWRVRFTVA9
bQpDT05GSUdfU0VOU09SU19EUzYyMD1tCkNPTkZJR19TRU5TT1JTX0RTMTYyMT1tCkNPTkZJ
R19TRU5TT1JTX0RFTExfU01NPW0KQ09ORklHX1NFTlNPUlNfREE5MDUyX0FEQz1tCkNPTkZJ
R19TRU5TT1JTX0RBOTA1NT1tCkNPTkZJR19TRU5TT1JTX0k1S19BTUI9bQpDT05GSUdfU0VO
U09SU19GNzE4MDVGPW0KQ09ORklHX1NFTlNPUlNfRjcxODgyRkc9bQpDT05GSUdfU0VOU09S
U19GNzUzNzVTPW0KQ09ORklHX1NFTlNPUlNfTUMxMzc4M19BREM9bQpDT05GSUdfU0VOU09S
U19GU0NITUQ9bQpDT05GSUdfU0VOU09SU19GVFNURVVUQVRFUz1tCkNPTkZJR19TRU5TT1JT
X0dMNTE4U009bQpDT05GSUdfU0VOU09SU19HTDUyMFNNPW0KQ09ORklHX1NFTlNPUlNfRzc2
MEE9bQpDT05GSUdfU0VOU09SU19HNzYyPW0KQ09ORklHX1NFTlNPUlNfSElINjEzMD1tCkNP
TkZJR19TRU5TT1JTX0lCTUFFTT1tCkNPTkZJR19TRU5TT1JTX0lCTVBFWD1tCkNPTkZJR19T
RU5TT1JTX0lJT19IV01PTj1tCkNPTkZJR19TRU5TT1JTX0k1NTAwPW0KQ09ORklHX1NFTlNP
UlNfQ09SRVRFTVA9bQpDT05GSUdfU0VOU09SU19JVDg3PW0KQ09ORklHX1NFTlNPUlNfSkM0
Mj1tCkNPTkZJR19TRU5TT1JTX1BPV1IxMjIwPW0KQ09ORklHX1NFTlNPUlNfTElORUFHRT1t
CkNPTkZJR19TRU5TT1JTX0xUQzI5NDU9bQpDT05GSUdfU0VOU09SU19MVEMyOTQ3PW0KQ09O
RklHX1NFTlNPUlNfTFRDMjk0N19JMkM9bQpDT05GSUdfU0VOU09SU19MVEMyOTQ3X1NQST1t
CkNPTkZJR19TRU5TT1JTX0xUQzI5OTA9bQpDT05GSUdfU0VOU09SU19MVEMyOTkyPW0KQ09O
RklHX1NFTlNPUlNfTFRDNDE1MT1tCkNPTkZJR19TRU5TT1JTX0xUQzQyMTU9bQpDT05GSUdf
U0VOU09SU19MVEM0MjIyPW0KQ09ORklHX1NFTlNPUlNfTFRDNDI0NT1tCkNPTkZJR19TRU5T
T1JTX0xUQzQyNjA9bQpDT05GSUdfU0VOU09SU19MVEM0MjYxPW0KQ09ORklHX1NFTlNPUlNf
TUFYMTExMT1tCkNPTkZJR19TRU5TT1JTX01BWDEyNz1tCkNPTkZJR19TRU5TT1JTX01BWDE2
MDY1PW0KQ09ORklHX1NFTlNPUlNfTUFYMTYxOT1tCkNPTkZJR19TRU5TT1JTX01BWDE2Njg9
bQpDT05GSUdfU0VOU09SU19NQVgxOTc9bQpDT05GSUdfU0VOU09SU19NQVgzMTcyMj1tCkNP
TkZJR19TRU5TT1JTX01BWDMxNzMwPW0KQ09ORklHX1NFTlNPUlNfTUFYNjYyMT1tCkNPTkZJ
R19TRU5TT1JTX01BWDY2Mzk9bQpDT05GSUdfU0VOU09SU19NQVg2NjQyPW0KQ09ORklHX1NF
TlNPUlNfTUFYNjY1MD1tCkNPTkZJR19TRU5TT1JTX01BWDY2OTc9bQpDT05GSUdfU0VOU09S
U19NQVgzMTc5MD1tCkNPTkZJR19TRU5TT1JTX01DUDMwMjE9bQpDT05GSUdfU0VOU09SU19N
TFhSRUdfRkFOPW0KQ09ORklHX1NFTlNPUlNfVEM2NTQ9bQpDT05GSUdfU0VOU09SU19UUFMy
Mzg2MT1tCkNPTkZJR19TRU5TT1JTX01FTkYyMUJNQ19IV01PTj1tCkNPTkZJR19TRU5TT1JT
X01SNzUyMDM9bQpDT05GSUdfU0VOU09SU19BRENYWD1tCkNPTkZJR19TRU5TT1JTX0xNNjM9
bQpDT05GSUdfU0VOU09SU19MTTcwPW0KQ09ORklHX1NFTlNPUlNfTE03Mz1tCkNPTkZJR19T
RU5TT1JTX0xNNzU9bQpDT05GSUdfU0VOU09SU19MTTc3PW0KQ09ORklHX1NFTlNPUlNfTE03
OD1tCkNPTkZJR19TRU5TT1JTX0xNODA9bQpDT05GSUdfU0VOU09SU19MTTgzPW0KQ09ORklH
X1NFTlNPUlNfTE04NT1tCkNPTkZJR19TRU5TT1JTX0xNODc9bQpDT05GSUdfU0VOU09SU19M
TTkwPW0KQ09ORklHX1NFTlNPUlNfTE05Mj1tCkNPTkZJR19TRU5TT1JTX0xNOTM9bQpDT05G
SUdfU0VOU09SU19MTTk1MjM0PW0KQ09ORklHX1NFTlNPUlNfTE05NTI0MT1tCkNPTkZJR19T
RU5TT1JTX0xNOTUyNDU9bQpDT05GSUdfU0VOU09SU19QQzg3MzYwPW0KQ09ORklHX1NFTlNP
UlNfUEM4NzQyNz1tCkNPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SPW0KQ09ORklHX1NF
TlNPUlNfTkNUNjY4Mz1tCkNPTkZJR19TRU5TT1JTX05DVDY3NzU9bQpDT05GSUdfU0VOU09S
U19OQ1Q3ODAyPW0KQ09ORklHX1NFTlNPUlNfTkNUNzkwND1tCkNPTkZJR19TRU5TT1JTX05Q
Q003WFg9bQpDT05GSUdfU0VOU09SU19QQ0Y4NTkxPW0KQ09ORklHX1BNQlVTPW0KQ09ORklH
X1NFTlNPUlNfUE1CVVM9bQpDT05GSUdfU0VOU09SU19BRE0xMjY2PW0KQ09ORklHX1NFTlNP
UlNfQURNMTI3NT1tCkNPTkZJR19TRU5TT1JTX0JFTF9QRkU9bQpDT05GSUdfU0VOU09SU19J
Qk1fQ0ZGUFM9bQpDT05GSUdfU0VOU09SU19JTlNQVVJfSVBTUFM9bQpDT05GSUdfU0VOU09S
U19JUjM1MjIxPW0KQ09ORklHX1NFTlNPUlNfSVIzODA2ND1tCkNPTkZJR19TRU5TT1JTX0lS
UFM1NDAxPW0KQ09ORklHX1NFTlNPUlNfSVNMNjgxMzc9bQpDT05GSUdfU0VOU09SU19MTTI1
MDY2PW0KQ09ORklHX1NFTlNPUlNfTFRDMjk3OD1tCiMgQ09ORklHX1NFTlNPUlNfTFRDMjk3
OF9SRUdVTEFUT1IgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19MVEMzODE1PW0KQ09ORklH
X1NFTlNPUlNfTUFYMTYwNjQ9bQpDT05GSUdfU0VOU09SU19NQVgxNjYwMT1tCkNPTkZJR19T
RU5TT1JTX01BWDIwNzMwPW0KQ09ORklHX1NFTlNPUlNfTUFYMjA3NTE9bQpDT05GSUdfU0VO
U09SU19NQVgzMTc4NT1tCkNPTkZJR19TRU5TT1JTX01BWDM0NDQwPW0KQ09ORklHX1NFTlNP
UlNfTUFYODY4OD1tCkNPTkZJR19TRU5TT1JTX01QMjk3NT1tCkNPTkZJR19TRU5TT1JTX1BN
Njc2NFRSPW0KQ09ORklHX1NFTlNPUlNfUFhFMTYxMD1tCkNPTkZJR19TRU5TT1JTX1E1NFNK
MTA4QTI9bQpDT05GSUdfU0VOU09SU19UUFM0MDQyMj1tCkNPTkZJR19TRU5TT1JTX1RQUzUz
Njc5PW0KQ09ORklHX1NFTlNPUlNfVUNEOTAwMD1tCkNPTkZJR19TRU5TT1JTX1VDRDkyMDA9
bQpDT05GSUdfU0VOU09SU19YRFBFMTIyPW0KQ09ORklHX1NFTlNPUlNfWkw2MTAwPW0KQ09O
RklHX1NFTlNPUlNfU0JUU0k9bQpDT05GSUdfU0VOU09SU19TSFQxNT1tCkNPTkZJR19TRU5T
T1JTX1NIVDIxPW0KQ09ORklHX1NFTlNPUlNfU0hUM3g9bQpDT05GSUdfU0VOU09SU19TSFRD
MT1tCkNPTkZJR19TRU5TT1JTX1NJUzU1OTU9bQpDT05GSUdfU0VOU09SU19ETUUxNzM3PW0K
Q09ORklHX1NFTlNPUlNfRU1DMTQwMz1tCkNPTkZJR19TRU5TT1JTX0VNQzIxMDM9bQpDT05G
SUdfU0VOU09SU19FTUM2VzIwMT1tCkNPTkZJR19TRU5TT1JTX1NNU0M0N00xPW0KQ09ORklH
X1NFTlNPUlNfU01TQzQ3TTE5Mj1tCkNPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTc9bQpDT05G
SUdfU0VOU09SU19TQ0g1NlhYX0NPTU1PTj1tCkNPTkZJR19TRU5TT1JTX1NDSDU2Mjc9bQpD
T05GSUdfU0VOU09SU19TQ0g1NjM2PW0KQ09ORklHX1NFTlNPUlNfU1RUUzc1MT1tCkNPTkZJ
R19TRU5TT1JTX1NNTTY2NT1tCkNPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTg9bQpDT05GSUdf
U0VOU09SU19BRFM3ODI4PW0KQ09ORklHX1NFTlNPUlNfQURTNzg3MT1tCkNPTkZJR19TRU5T
T1JTX0FNQzY4MjE9bQpDT05GSUdfU0VOU09SU19JTkEyMDk9bQpDT05GSUdfU0VOU09SU19J
TkEyWFg9bQpDT05GSUdfU0VOU09SU19JTkEzMjIxPW0KQ09ORklHX1NFTlNPUlNfVEM3ND1t
CkNPTkZJR19TRU5TT1JTX1RITUM1MD1tCkNPTkZJR19TRU5TT1JTX1RNUDEwMj1tCkNPTkZJ
R19TRU5TT1JTX1RNUDEwMz1tCkNPTkZJR19TRU5TT1JTX1RNUDEwOD1tCkNPTkZJR19TRU5T
T1JTX1RNUDQwMT1tCkNPTkZJR19TRU5TT1JTX1RNUDQyMT1tCkNPTkZJR19TRU5TT1JTX1RN
UDUxMz1tCkNPTkZJR19TRU5TT1JTX1ZJQV9DUFVURU1QPW0KQ09ORklHX1NFTlNPUlNfVklB
Njg2QT1tCkNPTkZJR19TRU5TT1JTX1ZUMTIxMT1tCkNPTkZJR19TRU5TT1JTX1ZUODIzMT1t
CkNPTkZJR19TRU5TT1JTX1c4Mzc3M0c9bQpDT05GSUdfU0VOU09SU19XODM3ODFEPW0KQ09O
RklHX1NFTlNPUlNfVzgzNzkxRD1tCkNPTkZJR19TRU5TT1JTX1c4Mzc5MkQ9bQpDT05GSUdf
U0VOU09SU19XODM3OTM9bQpDT05GSUdfU0VOU09SU19XODM3OTU9bQojIENPTkZJR19TRU5T
T1JTX1c4Mzc5NV9GQU5DVFJMIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRT
PW0KQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HPW0KQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9
bQpDT05GSUdfU0VOU09SU19XODM2MjdFSEY9bQpDT05GSUdfU0VOU09SU19XTTgzMVg9bQpD
T05GSUdfU0VOU09SU19XTTgzNTA9bQpDT05GSUdfU0VOU09SU19YR0VORT1tCkNPTkZJR19T
RU5TT1JTX0lOVEVMX00xMF9CTUNfSFdNT049bQoKIwojIEFDUEkgZHJpdmVycwojCkNPTkZJ
R19TRU5TT1JTX0FDUElfUE9XRVI9bQpDT05GSUdfU0VOU09SU19BVEswMTEwPW0KQ09ORklH
X1RIRVJNQUw9eQpDT05GSUdfVEhFUk1BTF9ORVRMSU5LPXkKIyBDT05GSUdfVEhFUk1BTF9T
VEFUSVNUSUNTIGlzIG5vdCBzZXQKQ09ORklHX1RIRVJNQUxfRU1FUkdFTkNZX1BPV0VST0ZG
X0RFTEFZX01TPTEwMApDT05GSUdfVEhFUk1BTF9IV01PTj15CkNPTkZJR19USEVSTUFMX1dS
SVRBQkxFX1RSSVBTPXkKQ09ORklHX1RIRVJNQUxfREVGQVVMVF9HT1ZfU1RFUF9XSVNFPXkK
IyBDT05GSUdfVEhFUk1BTF9ERUZBVUxUX0dPVl9GQUlSX1NIQVJFIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEhFUk1BTF9ERUZBVUxUX0dPVl9VU0VSX1NQQUNFIGlzIG5vdCBzZXQKIyBDT05G
SUdfVEhFUk1BTF9ERUZBVUxUX0dPVl9QT1dFUl9BTExPQ0FUT1IgaXMgbm90IHNldApDT05G
SUdfVEhFUk1BTF9HT1ZfRkFJUl9TSEFSRT15CkNPTkZJR19USEVSTUFMX0dPVl9TVEVQX1dJ
U0U9eQpDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HPXkKQ09ORklHX1RIRVJNQUxfR09W
X1VTRVJfU1BBQ0U9eQpDT05GSUdfVEhFUk1BTF9HT1ZfUE9XRVJfQUxMT0NBVE9SPXkKQ09O
RklHX0RFVkZSRVFfVEhFUk1BTD15CiMgQ09ORklHX1RIRVJNQUxfRU1VTEFUSU9OIGlzIG5v
dCBzZXQKCiMKIyBJbnRlbCB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfSU5URUxfUE9XRVJD
TEFNUD1tCkNPTkZJR19YODZfVEhFUk1BTF9WRUNUT1I9eQpDT05GSUdfWDg2X1BLR19URU1Q
X1RIRVJNQUw9bQpDT05GSUdfSU5URUxfU09DX0RUU19JT1NGX0NPUkU9bQpDT05GSUdfSU5U
RUxfU09DX0RUU19USEVSTUFMPW0KCiMKIyBBQ1BJIElOVDM0MFggdGhlcm1hbCBkcml2ZXJz
CiMKQ09ORklHX0lOVDM0MFhfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX1RIRVJNQUxfUkVMPW0K
Q09ORklHX0lOVDM0MDZfVEhFUk1BTD1tCkNPTkZJR19QUk9DX1RIRVJNQUxfTU1JT19SQVBM
PW0KIyBlbmQgb2YgQUNQSSBJTlQzNDBYIHRoZXJtYWwgZHJpdmVycwoKQ09ORklHX0lOVEVM
X0JYVF9QTUlDX1RIRVJNQUw9bQpDT05GSUdfSU5URUxfUENIX1RIRVJNQUw9bQojIGVuZCBv
ZiBJbnRlbCB0aGVybWFsIGRyaXZlcnMKCkNPTkZJR19HRU5FUklDX0FEQ19USEVSTUFMPW0K
Q09ORklHX1dBVENIRE9HPXkKQ09ORklHX1dBVENIRE9HX0NPUkU9eQojIENPTkZJR19XQVRD
SERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CkNPTkZJR19XQVRDSERPR19IQU5ETEVfQk9PVF9F
TkFCTEVEPXkKQ09ORklHX1dBVENIRE9HX09QRU5fVElNRU9VVD0wCkNPTkZJR19XQVRDSERP
R19TWVNGUz15CgojCiMgV2F0Y2hkb2cgUHJldGltZW91dCBHb3Zlcm5vcnMKIwpDT05GSUdf
V0FUQ0hET0dfUFJFVElNRU9VVF9HT1Y9eQpDT05GSUdfV0FUQ0hET0dfUFJFVElNRU9VVF9H
T1ZfU0VMPW0KQ09ORklHX1dBVENIRE9HX1BSRVRJTUVPVVRfR09WX05PT1A9bQpDT05GSUdf
V0FUQ0hET0dfUFJFVElNRU9VVF9HT1ZfUEFOSUM9eQojIENPTkZJR19XQVRDSERPR19QUkVU
SU1FT1VUX0RFRkFVTFRfR09WX05PT1AgaXMgbm90IHNldApDT05GSUdfV0FUQ0hET0dfUFJF
VElNRU9VVF9ERUZBVUxUX0dPVl9QQU5JQz15CgojCiMgV2F0Y2hkb2cgRGV2aWNlIERyaXZl
cnMKIwpDT05GSUdfU09GVF9XQVRDSERPRz1tCiMgQ09ORklHX1NPRlRfV0FUQ0hET0dfUFJF
VElNRU9VVCBpcyBub3Qgc2V0CkNPTkZJR19EQTkwNTJfV0FUQ0hET0c9bQpDT05GSUdfREE5
MDU1X1dBVENIRE9HPW0KQ09ORklHX0RBOTA2M19XQVRDSERPRz1tCkNPTkZJR19EQTkwNjJf
V0FUQ0hET0c9bQpDT05GSUdfTUVORjIxQk1DX1dBVENIRE9HPW0KQ09ORklHX01FTlowNjlf
V0FUQ0hET0c9bQpDT05GSUdfV0RBVF9XRFQ9bQpDT05GSUdfV004MzFYX1dBVENIRE9HPW0K
Q09ORklHX1dNODM1MF9XQVRDSERPRz1tCkNPTkZJR19YSUxJTlhfV0FUQ0hET0c9bQpDT05G
SUdfWklJUkFWRV9XQVRDSERPRz1tCkNPTkZJR19SQVZFX1NQX1dBVENIRE9HPW0KQ09ORklH
X01MWF9XRFQ9bQpDT05GSUdfQ0FERU5DRV9XQVRDSERPRz1tCkNPTkZJR19EV19XQVRDSERP
Rz1tCkNPTkZJR19UV0w0MDMwX1dBVENIRE9HPW0KQ09ORklHX01BWDYzWFhfV0FUQ0hET0c9
bQpDT05GSUdfUkVUVV9XQVRDSERPRz1tCkNPTkZJR19BQ1FVSVJFX1dEVD1tCkNPTkZJR19B
RFZBTlRFQ0hfV0RUPW0KQ09ORklHX0FMSU0xNTM1X1dEVD1tCkNPTkZJR19BTElNNzEwMV9X
RFQ9bQpDT05GSUdfRUJDX0MzODRfV0RUPW0KQ09ORklHX0Y3MTgwOEVfV0RUPW0KQ09ORklH
X1NQNTEwMF9UQ089bQpDT05GSUdfU0JDX0ZJVFBDMl9XQVRDSERPRz1tCkNPTkZJR19FVVJP
VEVDSF9XRFQ9bQpDT05GSUdfSUI3MDBfV0RUPW0KQ09ORklHX0lCTUFTUj1tCkNPTkZJR19X
QUZFUl9XRFQ9bQpDT05GSUdfSTYzMDBFU0JfV0RUPW0KQ09ORklHX0lFNlhYX1dEVD1tCkNP
TkZJR19JVENPX1dEVD1tCkNPTkZJR19JVENPX1ZFTkRPUl9TVVBQT1JUPXkKQ09ORklHX0lU
ODcxMkZfV0RUPW0KQ09ORklHX0lUODdfV0RUPW0KQ09ORklHX0hQX1dBVENIRE9HPW0KQ09O
RklHX0hQV0RUX05NSV9ERUNPRElORz15CkNPTkZJR19LRU1QTERfV0RUPW0KQ09ORklHX1ND
MTIwMF9XRFQ9bQpDT05GSUdfUEM4NzQxM19XRFQ9bQpDT05GSUdfTlZfVENPPW0KQ09ORklH
XzYwWFhfV0RUPW0KQ09ORklHX0NQVTVfV0RUPW0KQ09ORklHX1NNU0NfU0NIMzExWF9XRFQ9
bQpDT05GSUdfU01TQzM3Qjc4N19XRFQ9bQpDT05GSUdfVFFNWDg2X1dEVD1tCkNPTkZJR19W
SUFfV0RUPW0KQ09ORklHX1c4MzYyN0hGX1dEVD1tCkNPTkZJR19XODM4NzdGX1dEVD1tCkNP
TkZJR19XODM5NzdGX1dEVD1tCkNPTkZJR19NQUNIWl9XRFQ9bQpDT05GSUdfU0JDX0VQWF9D
M19XQVRDSERPRz1tCkNPTkZJR19JTlRFTF9NRUlfV0RUPW0KQ09ORklHX05JOTAzWF9XRFQ9
bQpDT05GSUdfTklDNzAxOF9XRFQ9bQpDT05GSUdfTUVOX0EyMV9XRFQ9bQpDT05GSUdfWEVO
X1dEVD1tCgojCiMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCiMKQ09ORklHX1BDSVBDV0FU
Q0hET0c9bQpDT05GSUdfV0RUUENJPW0KCiMKIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMK
IwpDT05GSUdfVVNCUENXQVRDSERPRz1tCkNPTkZJR19TU0JfUE9TU0lCTEU9eQpDT05GSUdf
U1NCPW0KQ09ORklHX1NTQl9TUFJPTT15CkNPTkZJR19TU0JfQkxPQ0tJTz15CkNPTkZJR19T
U0JfUENJSE9TVF9QT1NTSUJMRT15CkNPTkZJR19TU0JfUENJSE9TVD15CkNPTkZJR19TU0Jf
QjQzX1BDSV9CUklER0U9eQpDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEU9eQpDT05G
SUdfU1NCX1BDTUNJQUhPU1Q9eQpDT05GSUdfU1NCX1NESU9IT1NUX1BPU1NJQkxFPXkKQ09O
RklHX1NTQl9TRElPSE9TVD15CkNPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkVfUE9TU0lCTEU9
eQpDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFPXkKQ09ORklHX1NTQl9EUklWRVJfR1BJTz15
CkNPTkZJR19CQ01BX1BPU1NJQkxFPXkKQ09ORklHX0JDTUE9bQpDT05GSUdfQkNNQV9CTE9D
S0lPPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQpDT05GSUdfQkNNQV9IT1NU
X1BDST15CiMgQ09ORklHX0JDTUFfSE9TVF9TT0MgaXMgbm90IHNldApDT05GSUdfQkNNQV9E
UklWRVJfUENJPXkKQ09ORklHX0JDTUFfRFJJVkVSX0dNQUNfQ01OPXkKQ09ORklHX0JDTUFf
RFJJVkVSX0dQSU89eQojIENPTkZJR19CQ01BX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBNdWx0
aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiMKQ09ORklHX01GRF9DT1JFPXkKQ09ORklHX01G
RF9BUzM3MTE9eQpDT05GSUdfUE1JQ19BRFA1NTIwPXkKQ09ORklHX01GRF9BQVQyODcwX0NP
UkU9eQpDT05GSUdfTUZEX0JDTTU5MFhYPW0KQ09ORklHX01GRF9CRDk1NzFNV1Y9bQpDT05G
SUdfTUZEX0FYUDIwWD1tCkNPTkZJR19NRkRfQVhQMjBYX0kyQz1tCkNPTkZJR19NRkRfQ1JP
U19FQ19ERVY9bQpDT05GSUdfTUZEX01BREVSQT1tCkNPTkZJR19NRkRfTUFERVJBX0kyQz1t
CkNPTkZJR19NRkRfTUFERVJBX1NQST1tCkNPTkZJR19NRkRfQ1M0N0wxNT15CkNPTkZJR19N
RkRfQ1M0N0wzNT15CkNPTkZJR19NRkRfQ1M0N0w4NT15CkNPTkZJR19NRkRfQ1M0N0w5MD15
CkNPTkZJR19NRkRfQ1M0N0w5Mj15CkNPTkZJR19QTUlDX0RBOTAzWD15CkNPTkZJR19QTUlD
X0RBOTA1Mj15CkNPTkZJR19NRkRfREE5MDUyX1NQST15CkNPTkZJR19NRkRfREE5MDUyX0ky
Qz15CkNPTkZJR19NRkRfREE5MDU1PXkKQ09ORklHX01GRF9EQTkwNjI9bQpDT05GSUdfTUZE
X0RBOTA2Mz1tCkNPTkZJR19NRkRfREE5MTUwPW0KQ09ORklHX01GRF9ETE4yPW0KQ09ORklH
X01GRF9NQzEzWFhYPW0KQ09ORklHX01GRF9NQzEzWFhYX1NQST1tCkNPTkZJR19NRkRfTUMx
M1hYWF9JMkM9bQpDT05GSUdfTUZEX01QMjYyOT1tCkNPTkZJR19IVENfUEFTSUMzPW0KQ09O
RklHX0hUQ19JMkNQTEQ9eQpDT05GSUdfTUZEX0lOVEVMX1FVQVJLX0kyQ19HUElPPW0KQ09O
RklHX0xQQ19JQ0g9bQpDT05GSUdfTFBDX1NDSD1tCkNPTkZJR19JTlRFTF9TT0NfUE1JQz15
CkNPTkZJR19JTlRFTF9TT0NfUE1JQ19CWFRXQz1tCkNPTkZJR19JTlRFTF9TT0NfUE1JQ19D
SFRXQz15CkNPTkZJR19JTlRFTF9TT0NfUE1JQ19DSFREQ19UST1tCkNPTkZJR19JTlRFTF9T
T0NfUE1JQ19NUkZMRD1tCkNPTkZJR19NRkRfSU5URUxfTFBTUz1tCkNPTkZJR19NRkRfSU5U
RUxfTFBTU19BQ1BJPW0KQ09ORklHX01GRF9JTlRFTF9MUFNTX1BDST1tCkNPTkZJR19NRkRf
SU5URUxfUE1DX0JYVD1tCkNPTkZJR19NRkRfSU5URUxfUE1UPW0KQ09ORklHX01GRF9JUVM2
Mlg9bQpDT05GSUdfTUZEX0pBTlpfQ01PRElPPW0KQ09ORklHX01GRF9LRU1QTEQ9bQpDT05G
SUdfTUZEXzg4UE04MDA9bQpDT05GSUdfTUZEXzg4UE04MDU9bQpDT05GSUdfTUZEXzg4UE04
NjBYPXkKQ09ORklHX01GRF9NQVgxNDU3Nz1tCkNPTkZJR19NRkRfTUFYNzc2OTM9bQpDT05G
SUdfTUZEX01BWDc3ODQzPXkKQ09ORklHX01GRF9NQVg4OTA3PW0KQ09ORklHX01GRF9NQVg4
OTI1PXkKQ09ORklHX01GRF9NQVg4OTk3PXkKQ09ORklHX01GRF9NQVg4OTk4PXkKQ09ORklH
X01GRF9NVDYzNjA9bQpDT05GSUdfTUZEX01UNjM5Nz1tCkNPTkZJR19NRkRfTUVORjIxQk1D
PW0KQ09ORklHX0VaWF9QQ0FQPXkKQ09ORklHX01GRF9WSVBFUkJPQVJEPW0KQ09ORklHX01G
RF9SRVRVPW0KQ09ORklHX01GRF9QQ0Y1MDYzMz1tCkNPTkZJR19QQ0Y1MDYzM19BREM9bQpD
T05GSUdfUENGNTA2MzNfR1BJTz1tCkNPTkZJR19VQ0IxNDAwX0NPUkU9bQpDT05GSUdfTUZE
X1JEQzMyMVg9bQpDT05GSUdfTUZEX1JUNTAzMz1tCkNPTkZJR19NRkRfUkM1VDU4Mz15CkNP
TkZJR19NRkRfU0VDX0NPUkU9eQpDT05GSUdfTUZEX1NJNDc2WF9DT1JFPW0KQ09ORklHX01G
RF9TTTUwMT1tCkNPTkZJR19NRkRfU001MDFfR1BJTz15CkNPTkZJR19NRkRfU0tZODE0NTI9
bQpDT05GSUdfQUJYNTAwX0NPUkU9eQpDT05GSUdfQUIzMTAwX0NPUkU9eQpDT05GSUdfQUIz
MTAwX09UUD15CkNPTkZJR19NRkRfU1lTQ09OPXkKQ09ORklHX01GRF9USV9BTTMzNVhfVFND
QURDPW0KQ09ORklHX01GRF9MUDM5NDM9bQpDT05GSUdfTUZEX0xQODc4OD15CkNPTkZJR19N
RkRfVElfTE1VPW0KQ09ORklHX01GRF9QQUxNQVM9eQpDT05GSUdfVFBTNjEwNVg9bQpDT05G
SUdfVFBTNjUwMTA9bQpDT05GSUdfVFBTNjUwN1g9bQpDT05GSUdfTUZEX1RQUzY1MDg2PW0K
Q09ORklHX01GRF9UUFM2NTA5MD15CkNPTkZJR19NRkRfVFBTNjg0NzA9eQpDT05GSUdfTUZE
X1RJX0xQODczWD1tCkNPTkZJR19NRkRfVFBTNjU4Nlg9eQpDT05GSUdfTUZEX1RQUzY1OTEw
PXkKQ09ORklHX01GRF9UUFM2NTkxMj1tCkNPTkZJR19NRkRfVFBTNjU5MTJfSTJDPW0KQ09O
RklHX01GRF9UUFM2NTkxMl9TUEk9bQpDT05GSUdfTUZEX1RQUzgwMDMxPXkKQ09ORklHX1RX
TDQwMzBfQ09SRT15CkNPTkZJR19NRkRfVFdMNDAzMF9BVURJTz15CkNPTkZJR19UV0w2MDQw
X0NPUkU9eQpDT05GSUdfTUZEX1dMMTI3M19DT1JFPW0KQ09ORklHX01GRF9MTTM1MzM9bQpD
T05GSUdfTUZEX1RRTVg4Nj1tCkNPTkZJR19NRkRfVlg4NTU9bQpDT05GSUdfTUZEX0FSSVpP
TkE9eQpDT05GSUdfTUZEX0FSSVpPTkFfSTJDPW0KQ09ORklHX01GRF9BUklaT05BX1NQST1t
CkNPTkZJR19NRkRfQ1M0N0wyND15CkNPTkZJR19NRkRfV001MTAyPXkKQ09ORklHX01GRF9X
TTUxMTA9eQpDT05GSUdfTUZEX1dNODk5Nz15CkNPTkZJR19NRkRfV004OTk4PXkKQ09ORklH
X01GRF9XTTg0MDA9eQpDT05GSUdfTUZEX1dNODMxWD15CkNPTkZJR19NRkRfV004MzFYX0ky
Qz15CkNPTkZJR19NRkRfV004MzFYX1NQST15CkNPTkZJR19NRkRfV004MzUwPXkKQ09ORklH
X01GRF9XTTgzNTBfSTJDPXkKQ09ORklHX01GRF9XTTg5OTQ9bQpDT05GSUdfTUZEX1dDRDkz
NFg9bQpDT05GSUdfUkFWRV9TUF9DT1JFPW0KQ09ORklHX01GRF9JTlRFTF9NMTBfQk1DPW0K
IyBlbmQgb2YgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwoKQ09ORklHX1JFR1VMQVRP
Uj15CiMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SRUdVTEFU
T1JfRklYRURfVk9MVEFHRT1tCkNPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUj1t
CkNPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSPW0KQ09ORklHX1JFR1VMQVRP
Ul84OFBHODZYPW0KQ09ORklHX1JFR1VMQVRPUl84OFBNODAwPW0KQ09ORklHX1JFR1VMQVRP
Ul84OFBNODYwNz1tCkNPTkZJR19SRUdVTEFUT1JfQUNUODg2NT1tCkNPTkZJR19SRUdVTEFU
T1JfQUQ1Mzk4PW0KQ09ORklHX1JFR1VMQVRPUl9BQVQyODcwPW0KQ09ORklHX1JFR1VMQVRP
Ul9BUklaT05BX0xETzE9bQpDT05GSUdfUkVHVUxBVE9SX0FSSVpPTkFfTUlDU1VQUD1tCkNP
TkZJR19SRUdVTEFUT1JfQVMzNzExPW0KQ09ORklHX1JFR1VMQVRPUl9BWFAyMFg9bQpDT05G
SUdfUkVHVUxBVE9SX0JDTTU5MFhYPW0KQ09ORklHX1JFR1VMQVRPUl9CRDk1NzFNV1Y9bQpD
T05GSUdfUkVHVUxBVE9SX0RBOTAzWD1tCkNPTkZJR19SRUdVTEFUT1JfREE5MDUyPW0KQ09O
RklHX1JFR1VMQVRPUl9EQTkwNTU9bQpDT05GSUdfUkVHVUxBVE9SX0RBOTA2Mj1tCkNPTkZJ
R19SRUdVTEFUT1JfREE5MjEwPW0KQ09ORklHX1JFR1VMQVRPUl9EQTkyMTE9bQpDT05GSUdf
UkVHVUxBVE9SX0ZBTjUzNTU1PW0KQ09ORklHX1JFR1VMQVRPUl9HUElPPW0KQ09ORklHX1JF
R1VMQVRPUl9JU0w5MzA1PW0KQ09ORklHX1JFR1VMQVRPUl9JU0w2MjcxQT1tCkNPTkZJR19S
RUdVTEFUT1JfTE0zNjNYPW0KQ09ORklHX1JFR1VMQVRPUl9MUDM5NzE9bQpDT05GSUdfUkVH
VUxBVE9SX0xQMzk3Mj1tCkNPTkZJR19SRUdVTEFUT1JfTFA4NzJYPW0KQ09ORklHX1JFR1VM
QVRPUl9MUDg3NTU9bQpDT05GSUdfUkVHVUxBVE9SX0xQODc4OD1tCkNPTkZJR19SRUdVTEFU
T1JfTFRDMzU4OT1tCkNPTkZJR19SRUdVTEFUT1JfTFRDMzY3Nj1tCkNPTkZJR19SRUdVTEFU
T1JfTUFYMTQ1Nzc9bQpDT05GSUdfUkVHVUxBVE9SX01BWDE1ODY9bQpDT05GSUdfUkVHVUxB
VE9SX01BWDg2NDk9bQpDT05GSUdfUkVHVUxBVE9SX01BWDg2NjA9bQpDT05GSUdfUkVHVUxB
VE9SX01BWDg5MDc9bQpDT05GSUdfUkVHVUxBVE9SX01BWDg5MjU9bQpDT05GSUdfUkVHVUxB
VE9SX01BWDg5NTI9bQpDT05GSUdfUkVHVUxBVE9SX01BWDg5OTc9bQpDT05GSUdfUkVHVUxB
VE9SX01BWDg5OTg9bQpDT05GSUdfUkVHVUxBVE9SX01BWDc3NjkzPW0KQ09ORklHX1JFR1VM
QVRPUl9NQVg3NzgyNj1tCkNPTkZJR19SRUdVTEFUT1JfTUMxM1hYWF9DT1JFPW0KQ09ORklH
X1JFR1VMQVRPUl9NQzEzNzgzPW0KQ09ORklHX1JFR1VMQVRPUl9NQzEzODkyPW0KQ09ORklH
X1JFR1VMQVRPUl9NUDg4NTk9bQpDT05GSUdfUkVHVUxBVE9SX01UNjMxMT1tCkNPTkZJR19S
RUdVTEFUT1JfTVQ2MzIzPW0KQ09ORklHX1JFR1VMQVRPUl9NVDYzNTg9bQpDT05GSUdfUkVH
VUxBVE9SX01UNjM2MD1tCkNPTkZJR19SRUdVTEFUT1JfTVQ2Mzk3PW0KQ09ORklHX1JFR1VM
QVRPUl9QQUxNQVM9bQpDT05GSUdfUkVHVUxBVE9SX1BDQTk0NTA9bQpDT05GSUdfUkVHVUxB
VE9SX1BDQVA9bQpDT05GSUdfUkVHVUxBVE9SX1BDRjUwNjMzPW0KQ09ORklHX1JFR1VMQVRP
Ul9QVjg4MDYwPW0KQ09ORklHX1JFR1VMQVRPUl9QVjg4MDgwPW0KQ09ORklHX1JFR1VMQVRP
Ul9QVjg4MDkwPW0KQ09ORklHX1JFR1VMQVRPUl9QV009bQpDT05GSUdfUkVHVUxBVE9SX1JB
U1BCRVJSWVBJX1RPVUNIU0NSRUVOX0FUVElOWT1tCkNPTkZJR19SRUdVTEFUT1JfUkM1VDU4
Mz1tCkNPTkZJR19SRUdVTEFUT1JfUlQ0ODAxPW0KQ09ORklHX1JFR1VMQVRPUl9SVDUwMzM9
bQpDT05GSUdfUkVHVUxBVE9SX1JUTVYyMD1tCkNPTkZJR19SRUdVTEFUT1JfUzJNUEEwMT1t
CkNPTkZJR19SRUdVTEFUT1JfUzJNUFMxMT1tCkNPTkZJR19SRUdVTEFUT1JfUzVNODc2Nz1t
CkNPTkZJR19SRUdVTEFUT1JfU0tZODE0NTI9bQpDT05GSUdfUkVHVUxBVE9SX1NMRzUxMDAw
PW0KQ09ORklHX1JFR1VMQVRPUl9UUFM1MTYzMj1tCkNPTkZJR19SRUdVTEFUT1JfVFBTNjEw
NVg9bQpDT05GSUdfUkVHVUxBVE9SX1RQUzYyMzYwPW0KQ09ORklHX1JFR1VMQVRPUl9UUFM2
NTAyMz1tCkNPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1g9bQpDT05GSUdfUkVHVUxBVE9SX1RQ
UzY1MDg2PW0KQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA5MD1tCkNPTkZJR19SRUdVTEFUT1Jf
VFBTNjUxMzI9bQpDT05GSUdfUkVHVUxBVE9SX1RQUzY1MjRYPW0KQ09ORklHX1JFR1VMQVRP
Ul9UUFM2NTg2WD1tCkNPTkZJR19SRUdVTEFUT1JfVFBTNjU5MTA9bQpDT05GSUdfUkVHVUxB
VE9SX1RQUzY1OTEyPW0KQ09ORklHX1JFR1VMQVRPUl9UUFM4MDAzMT1tCkNPTkZJR19SRUdV
TEFUT1JfVFdMNDAzMD1tCkNPTkZJR19SRUdVTEFUT1JfV004MzFYPW0KQ09ORklHX1JFR1VM
QVRPUl9XTTgzNTA9bQpDT05GSUdfUkVHVUxBVE9SX1dNODQwMD1tCkNPTkZJR19SRUdVTEFU
T1JfV004OTk0PW0KQ09ORklHX1JDX0NPUkU9eQpDT05GSUdfUkNfTUFQPW0KQ09ORklHX0xJ
UkM9eQpDT05GSUdfQlBGX0xJUkNfTU9ERTI9eQpDT05GSUdfUkNfREVDT0RFUlM9eQpDT05G
SUdfSVJfTkVDX0RFQ09ERVI9bQpDT05GSUdfSVJfUkM1X0RFQ09ERVI9bQpDT05GSUdfSVJf
UkM2X0RFQ09ERVI9bQpDT05GSUdfSVJfSlZDX0RFQ09ERVI9bQpDT05GSUdfSVJfU09OWV9E
RUNPREVSPW0KQ09ORklHX0lSX1NBTllPX0RFQ09ERVI9bQpDT05GSUdfSVJfU0hBUlBfREVD
T0RFUj1tCkNPTkZJR19JUl9NQ0VfS0JEX0RFQ09ERVI9bQpDT05GSUdfSVJfWE1QX0RFQ09E
RVI9bQpDT05GSUdfSVJfSU1PTl9ERUNPREVSPW0KQ09ORklHX0lSX1JDTU1fREVDT0RFUj1t
CkNPTkZJR19SQ19ERVZJQ0VTPXkKQ09ORklHX1JDX0FUSV9SRU1PVEU9bQpDT05GSUdfSVJf
RU5FPW0KQ09ORklHX0lSX0lNT049bQpDT05GSUdfSVJfSU1PTl9SQVc9bQpDT05GSUdfSVJf
TUNFVVNCPW0KQ09ORklHX0lSX0lURV9DSVI9bQpDT05GSUdfSVJfRklOVEVLPW0KQ09ORklH
X0lSX05VVk9UT049bQpDT05GSUdfSVJfUkVEUkFUMz1tCkNPTkZJR19JUl9TVFJFQU1aQVA9
bQpDT05GSUdfSVJfV0lOQk9ORF9DSVI9bQpDT05GSUdfSVJfSUdPUlBMVUdVU0I9bQpDT05G
SUdfSVJfSUdVQU5BPW0KQ09ORklHX0lSX1RUVVNCSVI9bQpDT05GSUdfUkNfTE9PUEJBQ0s9
bQpDT05GSUdfSVJfU0VSSUFMPW0KQ09ORklHX0lSX1NFUklBTF9UUkFOU01JVFRFUj15CkNP
TkZJR19JUl9TSVI9bQpDT05GSUdfUkNfWEJPWF9EVkQ9bQpDT05GSUdfSVJfVE9ZPW0KQ09O
RklHX0NFQ19DT1JFPW0KQ09ORklHX0NFQ19OT1RJRklFUj15CkNPTkZJR19DRUNfUElOPXkK
Q09ORklHX01FRElBX0NFQ19SQz15CiMgQ09ORklHX0NFQ19QSU5fRVJST1JfSU5KIGlzIG5v
dCBzZXQKQ09ORklHX01FRElBX0NFQ19TVVBQT1JUPXkKQ09ORklHX0NFQ19DSDczMjI9bQpD
T05GSUdfQ0VDX0NST1NfRUM9bQpDT05GSUdfQ0VDX0dQSU89bQpDT05GSUdfQ0VDX1NFQ089
bQpDT05GSUdfQ0VDX1NFQ09fUkM9eQpDT05GSUdfVVNCX1BVTFNFOF9DRUM9bQpDT05GSUdf
VVNCX1JBSU5TSEFET1dfQ0VDPW0KQ09ORklHX01FRElBX1NVUFBPUlQ9bQpDT05GSUdfTUVE
SUFfU1VQUE9SVF9GSUxURVI9eQpDT05GSUdfTUVESUFfU1VCRFJWX0FVVE9TRUxFQ1Q9eQoK
IwojIE1lZGlhIGRldmljZSB0eXBlcwojCkNPTkZJR19NRURJQV9DQU1FUkFfU1VQUE9SVD15
CkNPTkZJR19NRURJQV9BTkFMT0dfVFZfU1VQUE9SVD15CkNPTkZJR19NRURJQV9ESUdJVEFM
X1RWX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfUkFESU9fU1VQUE9SVD15CiMgQ09ORklHX01F
RElBX1NEUl9TVVBQT1JUIGlzIG5vdCBzZXQKQ09ORklHX01FRElBX1BMQVRGT1JNX1NVUFBP
UlQ9eQpDT05GSUdfTUVESUFfVEVTVF9TVVBQT1JUPXkKIyBlbmQgb2YgTWVkaWEgZGV2aWNl
IHR5cGVzCgpDT05GSUdfVklERU9fREVWPW0KQ09ORklHX01FRElBX0NPTlRST0xMRVI9eQpD
T05GSUdfRFZCX0NPUkU9bQoKIwojIFZpZGVvNExpbnV4IG9wdGlvbnMKIwpDT05GSUdfVklE
RU9fVjRMMj1tCkNPTkZJR19WSURFT19WNEwyX0kyQz15CkNPTkZJR19WSURFT19WNEwyX1NV
QkRFVl9BUEk9eQojIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAojIENPTkZJ
R19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldApDT05GSUdfVklERU9fVFVO
RVI9bQpDT05GSUdfVjRMMl9NRU0yTUVNX0RFVj1tCkNPTkZJR19WNEwyX0ZMQVNIX0xFRF9D
TEFTUz1tCkNPTkZJR19WNEwyX0ZXTk9ERT1tCkNPTkZJR19WSURFT0JVRl9HRU49bQpDT05G
SUdfVklERU9CVUZfRE1BX1NHPW0KQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0M9bQojIGVuZCBv
ZiBWaWRlbzRMaW51eCBvcHRpb25zCgojCiMgTWVkaWEgY29udHJvbGxlciBvcHRpb25zCiMK
Q09ORklHX01FRElBX0NPTlRST0xMRVJfRFZCPXkKQ09ORklHX01FRElBX0NPTlRST0xMRVJf
UkVRVUVTVF9BUEk9eQoKIwojIFBsZWFzZSBub3RpY2UgdGhhdCB0aGUgZW5hYmxlZCBNZWRp
YSBjb250cm9sbGVyIFJlcXVlc3QgQVBJIGlzIEVYUEVSSU1FTlRBTAojCiMgZW5kIG9mIE1l
ZGlhIGNvbnRyb2xsZXIgb3B0aW9ucwoKIwojIERpZ2l0YWwgVFYgb3B0aW9ucwojCkNPTkZJ
R19EVkJfTU1BUD15CkNPTkZJR19EVkJfTkVUPXkKQ09ORklHX0RWQl9NQVhfQURBUFRFUlM9
MTYKQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUz15CiMgQ09ORklHX0RWQl9ERU1VWF9TRUNU
SU9OX0xPU1NfTE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1VMRV9ERUJVRyBpcyBub3Qg
c2V0CiMgZW5kIG9mIERpZ2l0YWwgVFYgb3B0aW9ucwoKIwojIE1lZGlhIGRyaXZlcnMKIwoK
IwojIERyaXZlcnMgZmlsdGVyZWQgYXMgc2VsZWN0ZWQgYXQgJ0ZpbHRlciBtZWRpYSBkcml2
ZXJzJwojCkNPTkZJR19UVFBDSV9FRVBST009bQpDT05GSUdfTUVESUFfVVNCX1NVUFBPUlQ9
eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09ORklHX1VTQl9WSURFT19DTEFTUz1tCkNPTkZJ
R19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQpDT05GSUdfVVNCX0dTUENBPW0KQ09O
RklHX1VTQl9NNTYwMj1tCkNPTkZJR19VU0JfU1RWMDZYWD1tCkNPTkZJR19VU0JfR0w4NjA9
bQpDT05GSUdfVVNCX0dTUENBX0JFTlE9bQpDT05GSUdfVVNCX0dTUENBX0NPTkVYPW0KQ09O
RklHX1VTQl9HU1BDQV9DUElBMT1tCkNPTkZJR19VU0JfR1NQQ0FfRFRDUzAzMz1tCkNPTkZJ
R19VU0JfR1NQQ0FfRVRPTVM9bQpDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVg9bQpDT05GSUdf
VVNCX0dTUENBX0pFSUxJTko9bQpDT05GSUdfVVNCX0dTUENBX0pMMjAwNUJDRD1tCkNPTkZJ
R19VU0JfR1NQQ0FfS0lORUNUPW0KQ09ORklHX1VTQl9HU1BDQV9LT05JQ0E9bQpDT05GSUdf
VVNCX0dTUENBX01BUlM9bQpDT05GSUdfVVNCX0dTUENBX01SOTczMTBBPW0KQ09ORklHX1VT
Ql9HU1BDQV9OVzgwWD1tCkNPTkZJR19VU0JfR1NQQ0FfT1Y1MTk9bQpDT05GSUdfVVNCX0dT
UENBX09WNTM0PW0KQ09ORklHX1VTQl9HU1BDQV9PVjUzNF85PW0KQ09ORklHX1VTQl9HU1BD
QV9QQUMyMDc9bQpDT05GSUdfVVNCX0dTUENBX1BBQzczMDI9bQpDT05GSUdfVVNCX0dTUENB
X1BBQzczMTE9bQpDT05GSUdfVVNCX0dTUENBX1NFNDAxPW0KQ09ORklHX1VTQl9HU1BDQV9T
TjlDMjAyOD1tCkNPTkZJR19VU0JfR1NQQ0FfU045QzIwWD1tCkNPTkZJR19VU0JfR1NQQ0Ff
U09OSVhCPW0KQ09ORklHX1VTQl9HU1BDQV9TT05JWEo9bQpDT05GSUdfVVNCX0dTUENBX1NQ
Q0E1MDA9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9bQpDT05GSUdfVVNCX0dTUENBX1NQ
Q0E1MDU9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9bQpDT05GSUdfVVNCX0dTUENBX1NQ
Q0E1MDg9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9bQpDT05GSUdfVVNCX0dTUENBX1NQ
Q0ExNTI4PW0KQ09ORklHX1VTQl9HU1BDQV9TUTkwNT1tCkNPTkZJR19VU0JfR1NQQ0FfU1E5
MDVDPW0KQ09ORklHX1VTQl9HU1BDQV9TUTkzMFg9bQpDT05GSUdfVVNCX0dTUENBX1NUSzAx
ND1tCkNPTkZJR19VU0JfR1NQQ0FfU1RLMTEzNT1tCkNPTkZJR19VU0JfR1NQQ0FfU1RWMDY4
MD1tCkNPTkZJR19VU0JfR1NQQ0FfU1VOUExVUz1tCkNPTkZJR19VU0JfR1NQQ0FfVDYxMz1t
CkNPTkZJR19VU0JfR1NQQ0FfVE9QUk89bQpDT05GSUdfVVNCX0dTUENBX1RPVVBURUs9bQpD
T05GSUdfVVNCX0dTUENBX1RWODUzMj1tCkNPTkZJR19VU0JfR1NQQ0FfVkMwMzJYPW0KQ09O
RklHX1VTQl9HU1BDQV9WSUNBTT1tCkNPTkZJR19VU0JfR1NQQ0FfWElSTElOS19DSVQ9bQpD
T05GSUdfVVNCX0dTUENBX1pDM1hYPW0KQ09ORklHX1VTQl9QV0M9bQojIENPTkZJR19VU0Jf
UFdDX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVY9eQpDT05G
SUdfVklERU9fQ1BJQTI9bQpDT05GSUdfVVNCX1pSMzY0WFg9bQpDT05GSUdfVVNCX1NUS1dF
QkNBTT1tCkNPTkZJR19VU0JfUzIyNTU9bQpDT05GSUdfVklERU9fVVNCVFY9bQoKIwojIEFu
YWxvZyBUViBVU0IgZGV2aWNlcwojCkNPTkZJR19WSURFT19QVlJVU0IyPW0KQ09ORklHX1ZJ
REVPX1BWUlVTQjJfU1lTRlM9eQpDT05GSUdfVklERU9fUFZSVVNCMl9EVkI9eQojIENPTkZJ
R19WSURFT19QVlJVU0IyX0RFQlVHSUZDIGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX0hEUFZS
PW0KQ09ORklHX1ZJREVPX1NUSzExNjBfQ09NTU9OPW0KQ09ORklHX1ZJREVPX1NUSzExNjA9
bQpDT05GSUdfVklERU9fR083MDA3PW0KQ09ORklHX1ZJREVPX0dPNzAwN19VU0I9bQpDT05G
SUdfVklERU9fR083MDA3X0xPQURFUj1tCkNPTkZJR19WSURFT19HTzcwMDdfVVNCX1MyMjUw
X0JPQVJEPW0KCiMKIyBBbmFsb2cvZGlnaXRhbCBUViBVU0IgZGV2aWNlcwojCkNPTkZJR19W
SURFT19BVTA4Mjg9bQpDT05GSUdfVklERU9fQVUwODI4X1Y0TDI9eQpDT05GSUdfVklERU9f
QVUwODI4X1JDPXkKQ09ORklHX1ZJREVPX0NYMjMxWFg9bQpDT05GSUdfVklERU9fQ1gyMzFY
WF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYX0FMU0E9bQpDT05GSUdfVklERU9fQ1gyMzFY
WF9EVkI9bQpDT05GSUdfVklERU9fVE02MDAwPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9BTFNB
PW0KQ09ORklHX1ZJREVPX1RNNjAwMF9EVkI9bQoKIwojIERpZ2l0YWwgVFYgVVNCIGRldmlj
ZXMKIwpDT05GSUdfRFZCX1VTQj1tCiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90IHNl
dApDT05GSUdfRFZCX1VTQl9ESUIzMDAwTUM9bQpDT05GSUdfRFZCX1VTQl9BODAwPW0KQ09O
RklHX0RWQl9VU0JfRElCVVNCX01CPW0KQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxU
WT15CkNPTkZJR19EVkJfVVNCX0RJQlVTQl9NQz1tCkNPTkZJR19EVkJfVVNCX0RJQjA3MDA9
bQpDT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KQ09ORklHX0RWQl9VU0JfQ1hVU0I9bQpDT05G
SUdfRFZCX1VTQl9DWFVTQl9BTkFMT0c9eQpDT05GSUdfRFZCX1VTQl9NOTIwWD1tCkNPTkZJ
R19EVkJfVVNCX0RJR0lUVj1tCkNPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCkNPTkZJR19EVkJf
VVNCX1ZQNzAyWD1tCkNPTkZJR19EVkJfVVNCX0dQOFBTSz1tCkNPTkZJR19EVkJfVVNCX05P
VkFfVF9VU0IyPW0KQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KQ09ORklHX0RWQl9VU0JfRFRU
MjAwVT1tCkNPTkZJR19EVkJfVVNCX09QRVJBMT1tCkNPTkZJR19EVkJfVVNCX0FGOTAwNT1t
CkNPTkZJR19EVkJfVVNCX0FGOTAwNV9SRU1PVEU9bQpDT05GSUdfRFZCX1VTQl9QQ1RWNDUy
RT1tCkNPTkZJR19EVkJfVVNCX0RXMjEwMj1tCkNPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDI9
bQpDT05GSUdfRFZCX1VTQl9EVFY1MTAwPW0KQ09ORklHX0RWQl9VU0JfQVo2MDI3PW0KQ09O
RklHX0RWQl9VU0JfVEVDSE5JU0FUX1VTQjI9bQpDT05GSUdfRFZCX1VTQl9WMj1tCkNPTkZJ
R19EVkJfVVNCX0FGOTAxNT1tCkNPTkZJR19EVkJfVVNCX0FGOTAzNT1tCkNPTkZJR19EVkJf
VVNCX0FOWVNFRT1tCkNPTkZJR19EVkJfVVNCX0FVNjYxMD1tCkNPTkZJR19EVkJfVVNCX0Fa
NjAwNz1tCkNPTkZJR19EVkJfVVNCX0NFNjIzMD1tCkNPTkZJR19EVkJfVVNCX0VDMTY4PW0K
Q09ORklHX0RWQl9VU0JfR0w4NjE9bQpDT05GSUdfRFZCX1VTQl9MTUUyNTEwPW0KQ09ORklH
X0RWQl9VU0JfTVhMMTExU0Y9bQpDT05GSUdfRFZCX1VTQl9SVEwyOFhYVT1tCkNPTkZJR19E
VkJfVVNCX0RWQlNLWT1tCkNPTkZJR19EVkJfVVNCX1pEMTMwMT1tCkNPTkZJR19EVkJfVFRV
U0JfQlVER0VUPW0KQ09ORklHX0RWQl9UVFVTQl9ERUM9bQpDT05GSUdfU01TX1VTQl9EUlY9
bQpDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9VU0I9bQojIENPTkZJR19EVkJfQjJDMl9GTEVY
Q09QX1VTQl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19EVkJfQVMxMDI9bQoKIwojIFdlYmNh
bSwgVFYgKGFuYWxvZy9kaWdpdGFsKSBVU0IgZGV2aWNlcwojCkNPTkZJR19WSURFT19FTTI4
WFg9bQpDT05GSUdfVklERU9fRU0yOFhYX1Y0TDI9bQpDT05GSUdfVklERU9fRU0yOFhYX0FM
U0E9bQpDT05GSUdfVklERU9fRU0yOFhYX0RWQj1tCkNPTkZJR19WSURFT19FTTI4WFhfUkM9
bQpDT05GSUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1cmUgc3VwcG9y
dAojCkNPTkZJR19WSURFT19NRVlFPW0KQ09ORklHX1ZJREVPX1NPTE82WDEwPW0KQ09ORklH
X1ZJREVPX1RXNTg2ND1tCkNPTkZJR19WSURFT19UVzY4PW0KQ09ORklHX1ZJREVPX1RXNjg2
WD1tCgojCiMgTWVkaWEgY2FwdHVyZS9hbmFsb2cgVFYgc3VwcG9ydAojCkNPTkZJR19WSURF
T19JVlRWPW0KIyBDT05GSUdfVklERU9fSVZUVl9ERVBSRUNBVEVEX0lPQ1RMUyBpcyBub3Qg
c2V0CkNPTkZJR19WSURFT19JVlRWX0FMU0E9bQpDT05GSUdfVklERU9fRkJfSVZUVj1tCiMg
Q09ORklHX1ZJREVPX0ZCX0lWVFZfRk9SQ0VfUEFUIGlzIG5vdCBzZXQKQ09ORklHX1ZJREVP
X0hFWElVTV9HRU1JTkk9bQpDT05GSUdfVklERU9fSEVYSVVNX09SSU9OPW0KQ09ORklHX1ZJ
REVPX01YQj1tCkNPTkZJR19WSURFT19EVDMxNTU9bQoKIwojIE1lZGlhIGNhcHR1cmUvYW5h
bG9nL2h5YnJpZCBUViBzdXBwb3J0CiMKQ09ORklHX1ZJREVPX0NYMTg9bQpDT05GSUdfVklE
RU9fQ1gxOF9BTFNBPW0KQ09ORklHX1ZJREVPX0NYMjM4ODU9bQpDT05GSUdfTUVESUFfQUxU
RVJBX0NJPW0KQ09ORklHX1ZJREVPX0NYMjU4MjE9bQpDT05GSUdfVklERU9fQ1gyNTgyMV9B
TFNBPW0KQ09ORklHX1ZJREVPX0NYODg9bQpDT05GSUdfVklERU9fQ1g4OF9BTFNBPW0KQ09O
RklHX1ZJREVPX0NYODhfQkxBQ0tCSVJEPW0KQ09ORklHX1ZJREVPX0NYODhfRFZCPW0KQ09O
RklHX1ZJREVPX0NYODhfRU5BQkxFX1ZQMzA1ND15CkNPTkZJR19WSURFT19DWDg4X1ZQMzA1
ND1tCkNPTkZJR19WSURFT19DWDg4X01QRUc9bQpDT05GSUdfVklERU9fQlQ4NDg9bQpDT05G
SUdfRFZCX0JUOFhYPW0KQ09ORklHX1ZJREVPX1NBQTcxMzQ9bQpDT05GSUdfVklERU9fU0FB
NzEzNF9BTFNBPW0KQ09ORklHX1ZJREVPX1NBQTcxMzRfUkM9eQpDT05GSUdfVklERU9fU0FB
NzEzNF9EVkI9bQpDT05GSUdfVklERU9fU0FBNzEzNF9HTzcwMDc9bQpDT05GSUdfVklERU9f
U0FBNzE2ND1tCgojCiMgTWVkaWEgZGlnaXRhbCBUViBQQ0kgQWRhcHRlcnMKIwpDT05GSUdf
RFZCX0FWNzExMF9JUj15CkNPTkZJR19EVkJfQVY3MTEwPW0KQ09ORklHX0RWQl9BVjcxMTBf
T1NEPXkKQ09ORklHX0RWQl9CVURHRVRfQ09SRT1tCkNPTkZJR19EVkJfQlVER0VUPW0KQ09O
RklHX0RWQl9CVURHRVRfQ0k9bQpDT05GSUdfRFZCX0JVREdFVF9BVj1tCkNPTkZJR19EVkJf
QlVER0VUX1BBVENIPW0KQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfUENJPW0KIyBDT05GSUdf
RFZCX0IyQzJfRkxFWENPUF9QQ0lfREVCVUcgaXMgbm90IHNldApDT05GSUdfRFZCX1BMVVRP
Mj1tCkNPTkZJR19EVkJfRE0xMTA1PW0KQ09ORklHX0RWQl9QVDE9bQpDT05GSUdfRFZCX1BU
Mz1tCkNPTkZJR19NQU5USVNfQ09SRT1tCkNPTkZJR19EVkJfTUFOVElTPW0KQ09ORklHX0RW
Ql9IT1BQRVI9bQpDT05GSUdfRFZCX05HRU5FPW0KQ09ORklHX0RWQl9EREJSSURHRT1tCiMg
Q09ORklHX0RWQl9EREJSSURHRV9NU0lFTkFCTEUgaXMgbm90IHNldApDT05GSUdfRFZCX1NN
SVBDSUU9bQpDT05GSUdfRFZCX05FVFVQX1VOSURWQj1tCkNPTkZJR19WSURFT19JUFUzX0NJ
TzI9bQpDT05GSUdfQ0lPMl9CUklER0U9eQpDT05GSUdfUkFESU9fQURBUFRFUlM9eQpDT05G
SUdfUkFESU9fVEVBNTc1WD1tCkNPTkZJR19SQURJT19TSTQ3MFg9bQpDT05GSUdfVVNCX1NJ
NDcwWD1tCkNPTkZJR19JMkNfU0k0NzBYPW0KQ09ORklHX1JBRElPX1NJNDcxMz1tCkNPTkZJ
R19VU0JfU0k0NzEzPW0KQ09ORklHX1BMQVRGT1JNX1NJNDcxMz1tCkNPTkZJR19JMkNfU0k0
NzEzPW0KQ09ORklHX1JBRElPX1NJNDc2WD1tCkNPTkZJR19VU0JfTVI4MDA9bQpDT05GSUdf
VVNCX0RTQlI9bQpDT05GSUdfUkFESU9fTUFYSVJBRElPPW0KQ09ORklHX1JBRElPX1NIQVJL
PW0KQ09ORklHX1JBRElPX1NIQVJLMj1tCkNPTkZJR19VU0JfS0VFTkU9bQpDT05GSUdfVVNC
X1JBUkVNT05PPW0KQ09ORklHX1VTQl9NQTkwMT1tCkNPTkZJR19SQURJT19URUE1NzY0PW0K
Q09ORklHX1JBRElPX1NBQTc3MDZIPW0KQ09ORklHX1JBRElPX1RFRjY4NjI9bQpDT05GSUdf
UkFESU9fV0wxMjczPW0KQ09ORklHX1JBRElPX1dMMTI4WD1tCkNPTkZJR19NRURJQV9DT01N
T05fT1BUSU9OUz15CgojCiMgY29tbW9uIGRyaXZlciBvcHRpb25zCiMKQ09ORklHX1ZJREVP
X0NYMjM0MVg9bQpDT05GSUdfVklERU9fVFZFRVBST009bQpDT05GSUdfQ1lQUkVTU19GSVJN
V0FSRT1tCkNPTkZJR19WSURFT0JVRjJfQ09SRT1tCkNPTkZJR19WSURFT0JVRjJfVjRMMj1t
CkNPTkZJR19WSURFT0JVRjJfTUVNT1BTPW0KQ09ORklHX1ZJREVPQlVGMl9ETUFfQ09OVElH
PW0KQ09ORklHX1ZJREVPQlVGMl9WTUFMTE9DPW0KQ09ORklHX1ZJREVPQlVGMl9ETUFfU0c9
bQpDT05GSUdfVklERU9CVUYyX0RWQj1tCkNPTkZJR19EVkJfQjJDMl9GTEVYQ09QPW0KQ09O
RklHX1ZJREVPX1NBQTcxNDY9bQpDT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCkNPTkZJR19T
TVNfU0lBTk9fTURUVj1tCkNPTkZJR19TTVNfU0lBTk9fUkM9eQojIENPTkZJR19TTVNfU0lB
Tk9fREVCVUdGUyBpcyBub3Qgc2V0CkNPTkZJR19WSURFT19WNEwyX1RQRz1tCkNPTkZJR19W
NExfUExBVEZPUk1fRFJJVkVSUz15CkNPTkZJR19WSURFT19DQUZFX0NDSUM9bQpDT05GSUdf
VklERU9fQ0FERU5DRT15CkNPTkZJR19WSURFT19DQURFTkNFX0NTSTJSWD1tCkNPTkZJR19W
SURFT19DQURFTkNFX0NTSTJUWD1tCkNPTkZJR19WSURFT19BU1BFRUQ9bQpDT05GSUdfVjRM
X01FTTJNRU1fRFJJVkVSUz15CkNPTkZJR19WSURFT19NRU0yTUVNX0RFSU5URVJMQUNFPW0K
Q09ORklHX0RWQl9QTEFURk9STV9EUklWRVJTPXkKCiMKIyBNTUMvU0RJTyBEVkIgYWRhcHRl
cnMKIwpDT05GSUdfU01TX1NESU9fRFJWPW0KQ09ORklHX1Y0TF9URVNUX0RSSVZFUlM9eQpD
T05GSUdfVklERU9fVklNQz1tCkNPTkZJR19WSURFT19WSVZJRD1tCkNPTkZJR19WSURFT19W
SVZJRF9DRUM9eQpDT05GSUdfVklERU9fVklWSURfTUFYX0RFVlM9NjQKQ09ORklHX1ZJREVP
X1ZJTTJNPW0KQ09ORklHX1ZJREVPX1ZJQ09ERUM9bQpDT05GSUdfRFZCX1RFU1RfRFJJVkVS
Uz15CkNPTkZJR19EVkJfVklEVFY9bQoKIwojIEZpcmVXaXJlIChJRUVFIDEzOTQpIEFkYXB0
ZXJzCiMKQ09ORklHX0RWQl9GSVJFRFRWPW0KQ09ORklHX0RWQl9GSVJFRFRWX0lOUFVUPXkK
IyBlbmQgb2YgTWVkaWEgZHJpdmVycwoKQ09ORklHX01FRElBX0hJREVfQU5DSUxMQVJZX1NV
QkRSVj15CgojCiMgTWVkaWEgYW5jaWxsYXJ5IGRyaXZlcnMKIwpDT05GSUdfTUVESUFfQVRU
QUNIPXkKCiMKIyBJUiBJMkMgZHJpdmVyIGF1dG8tc2VsZWN0ZWQgYnkgJ0F1dG9zZWxlY3Qg
YW5jaWxsYXJ5IGRyaXZlcnMnCiMKQ09ORklHX1ZJREVPX0lSX0kyQz1tCgojCiMgYXVkaW8s
IHZpZGVvIGFuZCByYWRpbyBJMkMgZHJpdmVycyBhdXRvLXNlbGVjdGVkIGJ5ICdBdXRvc2Vs
ZWN0IGFuY2lsbGFyeSBkcml2ZXJzJwojCkNPTkZJR19WSURFT19UVkFVRElPPW0KQ09ORklH
X1ZJREVPX1REQTc0MzI9bQpDT05GSUdfVklERU9fVERBOTg0MD1tCkNPTkZJR19WSURFT19U
RUE2NDE1Qz1tCkNPTkZJR19WSURFT19URUE2NDIwPW0KQ09ORklHX1ZJREVPX01TUDM0MDA9
bQpDT05GSUdfVklERU9fQ1MzMzA4PW0KQ09ORklHX1ZJREVPX0NTNTM0NT1tCkNPTkZJR19W
SURFT19DUzUzTDMyQT1tCkNPTkZJR19WSURFT19VREExMzQyPW0KQ09ORklHX1ZJREVPX1dN
ODc3NT1tCkNPTkZJR19WSURFT19XTTg3Mzk9bQpDT05GSUdfVklERU9fVlAyN1NNUFg9bQpD
T05GSUdfVklERU9fU09OWV9CVEZfTVBYPW0KQ09ORklHX1ZJREVPX1NBQTY1ODg9bQpDT05G
SUdfVklERU9fU0FBNzExWD1tCkNPTkZJR19WSURFT19UVlA1MTUwPW0KQ09ORklHX1ZJREVP
X1RXMjgwND1tCkNPTkZJR19WSURFT19UVzk5MDM9bQpDT05GSUdfVklERU9fVFc5OTA2PW0K
CiMKIyBWaWRlbyBhbmQgYXVkaW8gZGVjb2RlcnMKIwpDT05GSUdfVklERU9fU0FBNzE3WD1t
CkNPTkZJR19WSURFT19DWDI1ODQwPW0KQ09ORklHX1ZJREVPX1NBQTcxMjc9bQpDT05GSUdf
VklERU9fVVBENjQwMzFBPW0KQ09ORklHX1ZJREVPX1VQRDY0MDgzPW0KQ09ORklHX1ZJREVP
X1NBQTY3NTJIUz1tCkNPTkZJR19WSURFT19NNTI3OTA9bQoKIwojIENhbWVyYSBzZW5zb3Ig
ZGV2aWNlcwojCkNPTkZJR19WSURFT19BUFRJTkFfUExMPW0KQ09ORklHX1ZJREVPX0NDU19Q
TEw9bQpDT05GSUdfVklERU9fSEk1NTY9bQpDT05GSUdfVklERU9fSU1YMjE0PW0KQ09ORklH
X1ZJREVPX0lNWDIxOT1tCkNPTkZJR19WSURFT19JTVgyNTg9bQpDT05GSUdfVklERU9fSU1Y
Mjc0PW0KQ09ORklHX1ZJREVPX0lNWDI5MD1tCkNPTkZJR19WSURFT19JTVgzMTk9bQpDT05G
SUdfVklERU9fSU1YMzU1PW0KQ09ORklHX1ZJREVPX09WMDJBMTA9bQpDT05GSUdfVklERU9f
T1YyNjQwPW0KQ09ORklHX1ZJREVPX09WMjY1OT1tCkNPTkZJR19WSURFT19PVjI2ODA9bQpD
T05GSUdfVklERU9fT1YyNjg1PW0KQ09ORklHX1ZJREVPX09WMjc0MD1tCkNPTkZJR19WSURF
T19PVjU2NDc9bQpDT05GSUdfVklERU9fT1Y1NjQ4PW0KQ09ORklHX1ZJREVPX09WNjY1MD1t
CkNPTkZJR19WSURFT19PVjU2NzA9bQpDT05GSUdfVklERU9fT1Y1Njc1PW0KQ09ORklHX1ZJ
REVPX09WNTY5NT1tCkNPTkZJR19WSURFT19PVjcyNTE9bQpDT05GSUdfVklERU9fT1Y3NzJY
PW0KQ09ORklHX1ZJREVPX09WNzY0MD1tCkNPTkZJR19WSURFT19PVjc2NzA9bQpDT05GSUdf
VklERU9fT1Y3NzQwPW0KQ09ORklHX1ZJREVPX09WODg1Nj1tCkNPTkZJR19WSURFT19PVjg4
NjU9bQpDT05GSUdfVklERU9fT1Y5NjQwPW0KQ09ORklHX1ZJREVPX09WOTY1MD1tCkNPTkZJ
R19WSURFT19PVjk3MzQ9bQpDT05GSUdfVklERU9fT1YxMzg1OD1tCkNPTkZJR19WSURFT19W
UzY2MjQ9bQpDT05GSUdfVklERU9fTVQ5TTAwMT1tCkNPTkZJR19WSURFT19NVDlNMDMyPW0K
Q09ORklHX1ZJREVPX01UOU0xMTE9bQpDT05GSUdfVklERU9fTVQ5UDAzMT1tCkNPTkZJR19W
SURFT19NVDlUMDAxPW0KQ09ORklHX1ZJREVPX01UOVQxMTI9bQpDT05GSUdfVklERU9fTVQ5
VjAxMT1tCkNPTkZJR19WSURFT19NVDlWMDMyPW0KQ09ORklHX1ZJREVPX01UOVYxMTE9bQpD
T05GSUdfVklERU9fU1IwMzBQQzMwPW0KQ09ORklHX1ZJREVPX05PT04wMTBQQzMwPW0KQ09O
RklHX1ZJREVPX001TU9MUz1tCkNPTkZJR19WSURFT19NQVg5MjcxX0xJQj1tCkNPTkZJR19W
SURFT19SREFDTTIwPW0KQ09ORklHX1ZJREVPX1JEQUNNMjE9bQpDT05GSUdfVklERU9fUko1
NE4xPW0KQ09ORklHX1ZJREVPX1M1SzZBQT1tCkNPTkZJR19WSURFT19TNUs2QTM9bQpDT05G
SUdfVklERU9fUzVLNEVDR1g9bQpDT05GSUdfVklERU9fUzVLNUJBRj1tCkNPTkZJR19WSURF
T19DQ1M9bQpDT05GSUdfVklERU9fRVQ4RUs4PW0KQ09ORklHX1ZJREVPX1M1QzczTTM9bQoj
IGVuZCBvZiBDYW1lcmEgc2Vuc29yIGRldmljZXMKCiMKIyBMZW5zIGRyaXZlcnMKIwpDT05G
SUdfVklERU9fQUQ1ODIwPW0KQ09ORklHX1ZJREVPX0FLNzM3NT1tCkNPTkZJR19WSURFT19E
Vzk3MTQ9bQpDT05GSUdfVklERU9fRFc5NzY4PW0KQ09ORklHX1ZJREVPX0RXOTgwN19WQ009
bQojIGVuZCBvZiBMZW5zIGRyaXZlcnMKCiMKIyBGbGFzaCBkZXZpY2VzCiMKQ09ORklHX1ZJ
REVPX0FEUDE2NTM9bQpDT05GSUdfVklERU9fTE0zNTYwPW0KQ09ORklHX1ZJREVPX0xNMzY0
Nj1tCiMgZW5kIG9mIEZsYXNoIGRldmljZXMKCiMKIyBTUEkgSTJDIGRyaXZlcnMgYXV0by1z
ZWxlY3RlZCBieSAnQXV0b3NlbGVjdCBhbmNpbGxhcnkgZHJpdmVycycKIwoKIwojIE1lZGlh
IFNQSSBBZGFwdGVycwojCkNPTkZJR19DWEQyODgwX1NQSV9EUlY9bQojIGVuZCBvZiBNZWRp
YSBTUEkgQWRhcHRlcnMKCkNPTkZJR19NRURJQV9UVU5FUj1tCgojCiMgVHVuZXIgZHJpdmVy
cyBhdXRvLXNlbGVjdGVkIGJ5ICdBdXRvc2VsZWN0IGFuY2lsbGFyeSBkcml2ZXJzJwojCkNP
TkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNTA9
bQpDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCkNPTkZJR19NRURJQV9UVU5FUl9UREE4
MjdYPW0KQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjcxPW0KQ09ORklHX01FRElBX1RVTkVS
X1REQTk4ODc9bQpDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCkNPTkZJR19NRURJQV9U
VU5FUl9URUE1NzY3PW0KQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCkNPTkZJR19NRURJ
QV9UVU5FUl9NVDIwNjA9bQpDT05GSUdfTUVESUFfVFVORVJfTVQyMDYzPW0KQ09ORklHX01F
RElBX1RVTkVSX01UMjI2Nj1tCkNPTkZJR19NRURJQV9UVU5FUl9NVDIxMzE9bQpDT05GSUdf
TUVESUFfVFVORVJfUVQxMDEwPW0KQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCkNPTkZJ
R19NRURJQV9UVU5FUl9YQzUwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfWEM0MDAwPW0KQ09O
RklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdU
PW0KQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KQ09ORklHX01FRElBX1RVTkVSX01B
WDIxNjU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTg9bQpDT05GSUdfTUVESUFfVFVO
RVJfRkMwMDExPW0KQ09ORklHX01FRElBX1RVTkVSX0ZDMDAxMj1tCkNPTkZJR19NRURJQV9U
VU5FUl9GQzAwMTM9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTI9bQpDT05GSUdfTUVE
SUFfVFVORVJfRTQwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfRkMyNTgwPW0KQ09ORklHX01F
RElBX1RVTkVSX004OFJTNjAwMFQ9bQpDT05GSUdfTUVESUFfVFVORVJfVFVBOTAwMT1tCkNP
TkZJR19NRURJQV9UVU5FUl9TSTIxNTc9bQpDT05GSUdfTUVESUFfVFVORVJfSVQ5MTNYPW0K
Q09ORklHX01FRElBX1RVTkVSX1I4MjBUPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDMwMVJG
PW0KQ09ORklHX01FRElBX1RVTkVSX1FNMUQxQzAwNDI9bQpDT05GSUdfTUVESUFfVFVORVJf
UU0xRDFCMDAwND1tCgojCiMgRFZCIEZyb250ZW5kIGRyaXZlcnMgYXV0by1zZWxlY3RlZCBi
eSAnQXV0b3NlbGVjdCBhbmNpbGxhcnkgZHJpdmVycycKIwoKIwojIE11bHRpc3RhbmRhcmQg
KHNhdGVsbGl0ZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TVEIwODk5PW0KQ09ORklHX0RW
Ql9TVEI2MTAwPW0KQ09ORklHX0RWQl9TVFYwOTB4PW0KQ09ORklHX0RWQl9TVFYwOTEwPW0K
Q09ORklHX0RWQl9TVFY2MTEweD1tCkNPTkZJR19EVkJfU1RWNjExMT1tCkNPTkZJR19EVkJf
TVhMNVhYPW0KQ09ORklHX0RWQl9NODhEUzMxMDM9bQoKIwojIE11bHRpc3RhbmRhcmQgKGNh
YmxlICsgdGVycmVzdHJpYWwpIGZyb250ZW5kcwojCkNPTkZJR19EVkJfRFJYSz1tCkNPTkZJ
R19EVkJfVERBMTgyNzFDMkREPW0KQ09ORklHX0RWQl9TSTIxNjU9bQpDT05GSUdfRFZCX01O
ODg0NzI9bQpDT05GSUdfRFZCX01OODg0NzM9bQoKIwojIERWQi1TIChzYXRlbGxpdGUpIGZy
b250ZW5kcwojCkNPTkZJR19EVkJfQ1gyNDExMD1tCkNPTkZJR19EVkJfQ1gyNDEyMz1tCkNP
TkZJR19EVkJfTVQzMTI9bQpDT05GSUdfRFZCX1pMMTAwMzY9bQpDT05GSUdfRFZCX1pMMTAw
Mzk9bQpDT05GSUdfRFZCX1M1SDE0MjA9bQpDT05GSUdfRFZCX1NUVjAyODg9bQpDT05GSUdf
RFZCX1NUQjYwMDA9bQpDT05GSUdfRFZCX1NUVjAyOTk9bQpDT05GSUdfRFZCX1NUVjYxMTA9
bQpDT05GSUdfRFZCX1NUVjA5MDA9bQpDT05GSUdfRFZCX1REQTgwODM9bQpDT05GSUdfRFZC
X1REQTEwMDg2PW0KQ09ORklHX0RWQl9UREE4MjYxPW0KQ09ORklHX0RWQl9WRVMxWDkzPW0K
Q09ORklHX0RWQl9UVU5FUl9JVEQxMDAwPW0KQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzPW0K
Q09ORklHX0RWQl9UREE4MjZYPW0KQ09ORklHX0RWQl9UVUE2MTAwPW0KQ09ORklHX0RWQl9D
WDI0MTE2PW0KQ09ORklHX0RWQl9DWDI0MTE3PW0KQ09ORklHX0RWQl9DWDI0MTIwPW0KQ09O
RklHX0RWQl9TSTIxWFg9bQpDT05GSUdfRFZCX1RTMjAyMD1tCkNPTkZJR19EVkJfRFMzMDAw
PW0KQ09ORklHX0RWQl9NQjg2QTE2PW0KQ09ORklHX0RWQl9UREExMDA3MT1tCgojCiMgRFZC
LVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1NQODg3MD1tCkNPTkZJ
R19EVkJfU1A4ODdYPW0KQ09ORklHX0RWQl9DWDIyNzAwPW0KQ09ORklHX0RWQl9DWDIyNzAy
PW0KQ09ORklHX0RWQl9EUlhEPW0KQ09ORklHX0RWQl9MNjQ3ODE9bQpDT05GSUdfRFZCX1RE
QTEwMDRYPW0KQ09ORklHX0RWQl9OWFQ2MDAwPW0KQ09ORklHX0RWQl9NVDM1Mj1tCkNPTkZJ
R19EVkJfWkwxMDM1Mz1tCkNPTkZJR19EVkJfRElCMzAwME1CPW0KQ09ORklHX0RWQl9ESUIz
MDAwTUM9bQpDT05GSUdfRFZCX0RJQjcwMDBNPW0KQ09ORklHX0RWQl9ESUI3MDAwUD1tCkNP
TkZJR19EVkJfVERBMTAwNDg9bQpDT05GSUdfRFZCX0FGOTAxMz1tCkNPTkZJR19EVkJfRUMx
MDA9bQpDT05GSUdfRFZCX1NUVjAzNjc9bQpDT05GSUdfRFZCX0NYRDI4MjBSPW0KQ09ORklH
X0RWQl9DWEQyODQxRVI9bQpDT05GSUdfRFZCX1JUTDI4MzA9bQpDT05GSUdfRFZCX1JUTDI4
MzI9bQpDT05GSUdfRFZCX1NJMjE2OD1tCkNPTkZJR19EVkJfQVMxMDJfRkU9bQpDT05GSUdf
RFZCX1pEMTMwMV9ERU1PRD1tCkNPTkZJR19EVkJfR1A4UFNLX0ZFPW0KCiMKIyBEVkItQyAo
Y2FibGUpIGZyb250ZW5kcwojCkNPTkZJR19EVkJfVkVTMTgyMD1tCkNPTkZJR19EVkJfVERB
MTAwMjE9bQpDT05GSUdfRFZCX1REQTEwMDIzPW0KQ09ORklHX0RWQl9TVFYwMjk3PW0KCiMK
IyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBm
cm9udGVuZHMKIwpDT05GSUdfRFZCX05YVDIwMFg9bQpDT05GSUdfRFZCX09SNTEyMTE9bQpD
T05GSUdfRFZCX09SNTExMzI9bQpDT05GSUdfRFZCX0JDTTM1MTA9bQpDT05GSUdfRFZCX0xH
RFQzMzBYPW0KQ09ORklHX0RWQl9MR0RUMzMwNT1tCkNPTkZJR19EVkJfTEdEVDMzMDZBPW0K
Q09ORklHX0RWQl9MRzIxNjA9bQpDT05GSUdfRFZCX1M1SDE0MDk9bQpDT05GSUdfRFZCX0FV
ODUyMj1tCkNPTkZJR19EVkJfQVU4NTIyX0RUVj1tCkNPTkZJR19EVkJfQVU4NTIyX1Y0TD1t
CkNPTkZJR19EVkJfUzVIMTQxMT1tCkNPTkZJR19EVkJfTVhMNjkyPW0KCiMKIyBJU0RCLVQg
KHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1M5MjE9bQpDT05GSUdfRFZC
X0RJQjgwMDA9bQpDT05GSUdfRFZCX01CODZBMjBTPW0KCiMKIyBJU0RCLVMgKHNhdGVsbGl0
ZSkgJiBJU0RCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1RDOTA1
MjI9bQoKIwojIERpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCiMKQ09ORklH
X0RWQl9QTEw9bQpDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzA9bQpDT05GSUdfRFZCX1RVTkVS
X0RJQjAwOTA9bQoKIwojIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKQ09ORklH
X0RWQl9EUlgzOVhZSj1tCkNPTkZJR19EVkJfTE5CSDI1PW0KQ09ORklHX0RWQl9MTkJQMjE9
bQpDT05GSUdfRFZCX0xOQlAyMj1tCkNPTkZJR19EVkJfSVNMNjQwNT1tCkNPTkZJR19EVkJf
SVNMNjQyMT1tCkNPTkZJR19EVkJfSVNMNjQyMz1tCkNPTkZJR19EVkJfQTgyOTM9bQpDT05G
SUdfRFZCX0xHUzhHWFg9bQpDT05GSUdfRFZCX0FUQk04ODMwPW0KQ09ORklHX0RWQl9UREE2
NjV4PW0KQ09ORklHX0RWQl9JWDI1MDVWPW0KQ09ORklHX0RWQl9NODhSUzIwMDA9bQpDT05G
SUdfRFZCX0FGOTAzMz1tCkNPTkZJR19EVkJfSE9SVVMzQT1tCkNPTkZJR19EVkJfQVNDT1Qy
RT1tCkNPTkZJR19EVkJfSEVMRU5FPW0KCiMKIyBDb21tb24gSW50ZXJmYWNlIChFTjUwMjIx
KSBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfRFZCX0NYRDIwOTk9bQpDT05GSUdfRFZC
X1NQMj1tCgojCiMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCiMKQ09ORklHX0RW
Ql9EVU1NWV9GRT1tCiMgZW5kIG9mIE1lZGlhIGFuY2lsbGFyeSBkcml2ZXJzCgojCiMgR3Jh
cGhpY3Mgc3VwcG9ydAojCkNPTkZJR19BR1A9bQpDT05GSUdfQUdQX0FNRDY0PW0KQ09ORklH
X0FHUF9JTlRFTD1tCkNPTkZJR19BR1BfU0lTPW0KQ09ORklHX0FHUF9WSUE9bQpDT05GSUdf
SU5URUxfR1RUPW0KQ09ORklHX1ZHQV9BUkI9eQpDT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0x
MApDT05GSUdfVkdBX1NXSVRDSEVST089eQpDT05GSUdfRFJNPW0KQ09ORklHX0RSTV9NSVBJ
X0RCST1tCkNPTkZJR19EUk1fTUlQSV9EU0k9eQpDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVW
PXkKIyBDT05GSUdfRFJNX0RFQlVHX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9L
TVNfSEVMUEVSPW0KQ09ORklHX0RSTV9LTVNfRkJfSEVMUEVSPXkKQ09ORklHX0RSTV9GQkRF
Vl9FTVVMQVRJT049eQpDT05GSUdfRFJNX0ZCREVWX09WRVJBTExPQz0xMDAKQ09ORklHX0RS
TV9MT0FEX0VESURfRklSTVdBUkU9eQpDT05GSUdfRFJNX0RQX0NFQz15CkNPTkZJR19EUk1f
VFRNPW0KQ09ORklHX0RSTV9WUkFNX0hFTFBFUj1tCkNPTkZJR19EUk1fVFRNX0hFTFBFUj1t
CkNPTkZJR19EUk1fR0VNX0NNQV9IRUxQRVI9eQpDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVS
PXkKQ09ORklHX0RSTV9HRU1fU0hNRU1fSEVMUEVSPXkKQ09ORklHX0RSTV9TQ0hFRD1tCgoj
CiMgSTJDIGVuY29kZXIgb3IgaGVscGVyIGNoaXBzCiMKQ09ORklHX0RSTV9JMkNfQ0g3MDA2
PW0KQ09ORklHX0RSTV9JMkNfU0lMMTY0PW0KQ09ORklHX0RSTV9JMkNfTlhQX1REQTk5OFg9
bQpDT05GSUdfRFJNX0kyQ19OWFBfVERBOTk1MD1tCiMgZW5kIG9mIEkyQyBlbmNvZGVyIG9y
IGhlbHBlciBjaGlwcwoKIwojIEFSTSBkZXZpY2VzCiMKIyBlbmQgb2YgQVJNIGRldmljZXMK
CkNPTkZJR19EUk1fUkFERU9OPW0KQ09ORklHX0RSTV9SQURFT05fVVNFUlBUUj15CkNPTkZJ
R19EUk1fQU1ER1BVPW0KQ09ORklHX0RSTV9BTURHUFVfU0k9eQpDT05GSUdfRFJNX0FNREdQ
VV9DSUs9eQpDT05GSUdfRFJNX0FNREdQVV9VU0VSUFRSPXkKIyBDT05GSUdfRFJNX0FNREdQ
VV9HQVJUX0RFQlVHRlMgaXMgbm90IHNldAoKIwojIEFDUCAoQXVkaW8gQ29Qcm9jZXNzb3Ip
IENvbmZpZ3VyYXRpb24KIwpDT05GSUdfRFJNX0FNRF9BQ1A9eQojIGVuZCBvZiBBQ1AgKEF1
ZGlvIENvUHJvY2Vzc29yKSBDb25maWd1cmF0aW9uCgojCiMgRGlzcGxheSBFbmdpbmUgQ29u
ZmlndXJhdGlvbgojCkNPTkZJR19EUk1fQU1EX0RDPXkKQ09ORklHX0RSTV9BTURfRENfRENO
PXkKQ09ORklHX0RSTV9BTURfRENfSERDUD15CkNPTkZJR19EUk1fQU1EX0RDX1NJPXkKIyBl
bmQgb2YgRGlzcGxheSBFbmdpbmUgQ29uZmlndXJhdGlvbgoKQ09ORklHX0hTQV9BTUQ9eQpD
T05GSUdfRFJNX05PVVZFQVU9bQojIENPTkZJR19OT1VWRUFVX0xFR0FDWV9DVFhfU1VQUE9S
VCBpcyBub3Qgc2V0CkNPTkZJR19OT1VWRUFVX0RFQlVHPTUKQ09ORklHX05PVVZFQVVfREVC
VUdfREVGQVVMVD0zCiMgQ09ORklHX05PVVZFQVVfREVCVUdfTU1VIGlzIG5vdCBzZXQKIyBD
T05GSUdfTk9VVkVBVV9ERUJVR19QVVNIIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9OT1VWRUFV
X0JBQ0tMSUdIVD15CkNPTkZJR19EUk1fTk9VVkVBVV9TVk09eQpDT05GSUdfRFJNX0k5MTU9
bQpDT05GSUdfRFJNX0k5MTVfRk9SQ0VfUFJPQkU9IioiCkNPTkZJR19EUk1fSTkxNV9DQVBU
VVJFX0VSUk9SPXkKQ09ORklHX0RSTV9JOTE1X0NPTVBSRVNTX0VSUk9SPXkKQ09ORklHX0RS
TV9JOTE1X1VTRVJQVFI9eQpDT05GSUdfRFJNX0k5MTVfR1ZUPXkKQ09ORklHX0RSTV9JOTE1
X0dWVF9LVk1HVD1tCkNPTkZJR19EUk1fSTkxNV9GRU5DRV9USU1FT1VUPTEwMDAwCkNPTkZJ
R19EUk1fSTkxNV9VU0VSRkFVTFRfQVVUT1NVU1BFTkQ9MjUwCkNPTkZJR19EUk1fSTkxNV9I
RUFSVEJFQVRfSU5URVJWQUw9MjUwMApDT05GSUdfRFJNX0k5MTVfUFJFRU1QVF9USU1FT1VU
PTY0MApDT05GSUdfRFJNX0k5MTVfTUFYX1JFUVVFU1RfQlVTWVdBSVQ9ODAwMApDT05GSUdf
RFJNX0k5MTVfU1RPUF9USU1FT1VUPTEwMApDT05GSUdfRFJNX0k5MTVfVElNRVNMSUNFX0RV
UkFUSU9OPTEKQ09ORklHX0RSTV9WR0VNPW0KQ09ORklHX0RSTV9WS01TPW0KQ09ORklHX0RS
TV9WTVdHRlg9bQpDT05GSUdfRFJNX1ZNV0dGWF9GQkNPTj15CkNPTkZJR19EUk1fR01BNTAw
PW0KQ09ORklHX0RSTV9HTUE2MDA9eQpDT05GSUdfRFJNX1VETD1tCkNPTkZJR19EUk1fQVNU
PW0KQ09ORklHX0RSTV9NR0FHMjAwPW0KQ09ORklHX0RSTV9RWEw9bQpDT05GSUdfRFJNX0JP
Q0hTPW0KQ09ORklHX0RSTV9WSVJUSU9fR1BVPW0KQ09ORklHX0RSTV9QQU5FTD15CgojCiMg
RGlzcGxheSBQYW5lbHMKIwpDT05GSUdfRFJNX1BBTkVMX1JBU1BCRVJSWVBJX1RPVUNIU0NS
RUVOPW0KIyBlbmQgb2YgRGlzcGxheSBQYW5lbHMKCkNPTkZJR19EUk1fQlJJREdFPXkKQ09O
RklHX0RSTV9QQU5FTF9CUklER0U9eQoKIwojIERpc3BsYXkgSW50ZXJmYWNlIEJyaWRnZXMK
IwpDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDc4WFg9bQpDT05GSUdfRFJNX0FOQUxPR0lYX0RQ
PW0KIyBlbmQgb2YgRGlzcGxheSBJbnRlcmZhY2UgQnJpZGdlcwoKIyBDT05GSUdfRFJNX0VU
TkFWSVYgaXMgbm90IHNldApDT05GSUdfRFJNX0NJUlJVU19RRU1VPW0KQ09ORklHX0RSTV9H
TTEyVTMyMD1tCkNPTkZJR19USU5ZRFJNX0hYODM1N0Q9bQpDT05GSUdfVElOWURSTV9JTEk5
MjI1PW0KQ09ORklHX1RJTllEUk1fSUxJOTM0MT1tCkNPTkZJR19USU5ZRFJNX0lMSTk0ODY9
bQpDT05GSUdfVElOWURSTV9NSTAyODNRVD1tCkNPTkZJR19USU5ZRFJNX1JFUEFQRVI9bQpD
T05GSUdfVElOWURSTV9TVDc1ODY9bQpDT05GSUdfVElOWURSTV9TVDc3MzVSPW0KQ09ORklH
X0RSTV9YRU49eQpDT05GSUdfRFJNX1hFTl9GUk9OVEVORD1tCkNPTkZJR19EUk1fVkJPWFZJ
REVPPW0KIyBDT05GSUdfRFJNX0xFR0FDWSBpcyBub3Qgc2V0CkNPTkZJR19EUk1fUEFORUxf
T1JJRU5UQVRJT05fUVVJUktTPXkKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwojCkNPTkZJ
R19GQl9DTURMSU5FPXkKQ09ORklHX0ZCX05PVElGWT15CkNPTkZJR19GQj15CkNPTkZJR19G
SVJNV0FSRV9FRElEPXkKQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUPXkKQ09ORklHX0ZC
X0NGQl9GSUxMUkVDVD15CkNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQpDT05GSUdfRkJfQ0ZC
X0lNQUdFQkxJVD15CkNPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQpDT05GSUdfRkJfU1lTX0NP
UFlBUkVBPW0KQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQojIENPTkZJR19GQl9GT1JFSUdO
X0VORElBTiBpcyBub3Qgc2V0CkNPTkZJR19GQl9TWVNfRk9QUz1tCkNPTkZJR19GQl9ERUZF
UlJFRF9JTz15CkNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQpDT05GSUdfRkJfVElMRUJMSVRU
SU5HPXkKCiMKIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwojCiMgQ09ORklHX0ZC
X0NJUlJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CiMgQ09ORklH
X0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FSQyBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90
IHNldAojIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CkNPTkZJR19GQl9VVkVTQT1tCkNP
TkZJR19GQl9WRVNBPXkKQ09ORklHX0ZCX0VGST15CiMgQ09ORklHX0ZCX040MTEgaXMgbm90
IHNldAojIENPTkZJR19GQl9IR0EgaXMgbm90IHNldAojIENPTkZJR19GQl9PUEVOQ09SRVMg
aXMgbm90IHNldAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZC
X05WSURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAojIENPTkZJ
R19GQl9JNzQwIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTEU4MDU3OCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FUWSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU0FWQUdFIGlz
IG5vdCBzZXQKIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVklBIGlz
IG5vdCBzZXQKIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAojIENPTkZJR19GQl9L
WVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZC
X1ZPT0RPTzEgaXMgbm90IHNldAojIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAojIENP
TkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX1NNNTAxIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU01TQ1VGWCBp
cyBub3Qgc2V0CiMgQ09ORklHX0ZCX1VETCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0lCTV9H
WFQ0NTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJ
R19YRU5fRkJERVZfRlJPTlRFTkQ9bQojIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNl
dAojIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKQ09ORklHX0ZCX0hZUEVSVj1tCkNP
TkZJR19GQl9TSU1QTEU9eQojIENPTkZJR19GQl9TTTcxMiBpcyBub3Qgc2V0CiMgZW5kIG9m
IEZyYW1lIGJ1ZmZlciBEZXZpY2VzCgojCiMgQmFja2xpZ2h0ICYgTENEIGRldmljZSBzdXBw
b3J0CiMKQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQpDT05GSUdfTENEX0w0RjAwMjQyVDAz
PW0KQ09ORklHX0xDRF9MTVMyODNHRjA1PW0KQ09ORklHX0xDRF9MVFYzNTBRVj1tCkNPTkZJ
R19MQ0RfSUxJOTIyWD1tCkNPTkZJR19MQ0RfSUxJOTMyMD1tCkNPTkZJR19MQ0RfVERPMjRN
PW0KQ09ORklHX0xDRF9WR0cyNDMyQTQ9bQpDT05GSUdfTENEX1BMQVRGT1JNPW0KQ09ORklH
X0xDRF9BTVMzNjlGRzA2PW0KQ09ORklHX0xDRF9MTVM1MDFLRjAzPW0KQ09ORklHX0xDRF9I
WDgzNTc9bQpDT05GSUdfTENEX09UTTMyMjVBPW0KQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19E
RVZJQ0U9eQpDT05GSUdfQkFDS0xJR0hUX0tURDI1Mz1tCkNPTkZJR19CQUNLTElHSFRfTE0z
NTMzPW0KQ09ORklHX0JBQ0tMSUdIVF9QV009bQpDT05GSUdfQkFDS0xJR0hUX0RBOTAzWD1t
CkNPTkZJR19CQUNLTElHSFRfREE5MDUyPW0KQ09ORklHX0JBQ0tMSUdIVF9NQVg4OTI1PW0K
Q09ORklHX0JBQ0tMSUdIVF9BUFBMRT1tCkNPTkZJR19CQUNLTElHSFRfUUNPTV9XTEVEPW0K
Q09ORklHX0JBQ0tMSUdIVF9TQUhBUkE9bQpDT05GSUdfQkFDS0xJR0hUX1dNODMxWD1tCkNP
TkZJR19CQUNLTElHSFRfQURQNTUyMD1tCkNPTkZJR19CQUNLTElHSFRfQURQODg2MD1tCkNP
TkZJR19CQUNLTElHSFRfQURQODg3MD1tCkNPTkZJR19CQUNLTElHSFRfODhQTTg2MFg9bQpD
T05GSUdfQkFDS0xJR0hUX1BDRjUwNjMzPW0KQ09ORklHX0JBQ0tMSUdIVF9BQVQyODcwPW0K
Q09ORklHX0JBQ0tMSUdIVF9MTTM2MzBBPW0KQ09ORklHX0JBQ0tMSUdIVF9MTTM2Mzk9bQpD
T05GSUdfQkFDS0xJR0hUX0xQODU1WD1tCkNPTkZJR19CQUNLTElHSFRfTFA4Nzg4PW0KQ09O
RklHX0JBQ0tMSUdIVF9QQU5ET1JBPW0KQ09ORklHX0JBQ0tMSUdIVF9TS1k4MTQ1Mj1tCkNP
TkZJR19CQUNLTElHSFRfQVMzNzExPW0KQ09ORklHX0JBQ0tMSUdIVF9HUElPPW0KQ09ORklH
X0JBQ0tMSUdIVF9MVjUyMDdMUD1tCkNPTkZJR19CQUNLTElHSFRfQkQ2MTA3PW0KQ09ORklH
X0JBQ0tMSUdIVF9BUkNYQ05OPW0KQ09ORklHX0JBQ0tMSUdIVF9SQVZFX1NQPW0KIyBlbmQg
b2YgQmFja2xpZ2h0ICYgTENEIGRldmljZSBzdXBwb3J0CgpDT05GSUdfVklERU9NT0RFX0hF
TFBFUlM9eQpDT05GSUdfSERNST15CgojCiMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBw
b3J0CiMKQ09ORklHX1ZHQV9DT05TT0xFPXkKQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQpDT05G
SUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TPTgwCkNPTkZJR19EVU1NWV9DT05TT0xFX1JPV1M9
MjUKQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQpDT05GSUdfRlJBTUVCVUZGRVJfQ09O
U09MRV9ERVRFQ1RfUFJJTUFSWT15CkNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFU
SU9OPXkKQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVI9eQoj
IGVuZCBvZiBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKCiMgQ09ORklHX0xPR08g
aXMgbm90IHNldAojIGVuZCBvZiBHcmFwaGljcyBzdXBwb3J0CgpDT05GSUdfU09VTkQ9bQpD
T05GSUdfU09VTkRfT1NTX0NPUkU9eQojIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJ
TSBpcyBub3Qgc2V0CkNPTkZJR19TTkQ9bQpDT05GSUdfU05EX1RJTUVSPW0KQ09ORklHX1NO
RF9QQ009bQpDT05GSUdfU05EX1BDTV9FTEQ9eQpDT05GSUdfU05EX1BDTV9JRUM5NTg9eQpD
T05GSUdfU05EX0RNQUVOR0lORV9QQ009bQpDT05GSUdfU05EX0hXREVQPW0KQ09ORklHX1NO
RF9TRVFfREVWSUNFPW0KQ09ORklHX1NORF9SQVdNSURJPW0KQ09ORklHX1NORF9DT01QUkVT
U19PRkZMT0FEPW0KQ09ORklHX1NORF9KQUNLPXkKQ09ORklHX1NORF9KQUNLX0lOUFVUX0RF
Vj15CkNPTkZJR19TTkRfT1NTRU1VTD15CkNPTkZJR19TTkRfTUlYRVJfT1NTPW0KQ09ORklH
X1NORF9QQ01fT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQpDT05GSUdfU05E
X1BDTV9USU1FUj15CkNPTkZJR19TTkRfSFJUSU1FUj1tCkNPTkZJR19TTkRfRFlOQU1JQ19N
SU5PUlM9eQpDT05GSUdfU05EX01BWF9DQVJEUz0zMgojIENPTkZJR19TTkRfU1VQUE9SVF9P
TERfQVBJIGlzIG5vdCBzZXQKQ09ORklHX1NORF9QUk9DX0ZTPXkKQ09ORklHX1NORF9WRVJC
T1NFX1BST0NGUz15CkNPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQpDT05GSUdfU05EX0RF
QlVHPXkKIyBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UgaXMgbm90IHNldAojIENPTkZJR19T
TkRfUENNX1hSVU5fREVCVUcgaXMgbm90IHNldAojIENPTkZJR19TTkRfQ1RMX1ZBTElEQVRJ
T04gaXMgbm90IHNldAojIENPTkZJR19TTkRfSkFDS19JTkpFQ1RJT05fREVCVUcgaXMgbm90
IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05GSUdfU05EX0RNQV9TR0JVRj15CkNPTkZJ
R19TTkRfU0VRVUVOQ0VSPW0KQ09ORklHX1NORF9TRVFfRFVNTVk9bQpDT05GSUdfU05EX1NF
UVVFTkNFUl9PU1M9bQpDT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQpDT05GSUdf
U05EX1NFUV9NSURJX0VWRU5UPW0KQ09ORklHX1NORF9TRVFfTUlEST1tCkNPTkZJR19TTkRf
U0VRX01JRElfRU1VTD1tCkNPTkZJR19TTkRfU0VRX1ZJUk1JREk9bQpDT05GSUdfU05EX01Q
VTQwMV9VQVJUPW0KQ09ORklHX1NORF9PUEwzX0xJQj1tCkNPTkZJR19TTkRfT1BMM19MSUJf
U0VRPW0KQ09ORklHX1NORF9WWF9MSUI9bQpDT05GSUdfU05EX0FDOTdfQ09ERUM9bQpDT05G
SUdfU05EX0RSSVZFUlM9eQojIENPTkZJR19TTkRfUENTUCBpcyBub3Qgc2V0CkNPTkZJR19T
TkRfRFVNTVk9bQpDT05GSUdfU05EX0FMT09QPW0KQ09ORklHX1NORF9WSVJNSURJPW0KQ09O
RklHX1NORF9NVFBBVj1tCkNPTkZJR19TTkRfTVRTNjQ9bQpDT05GSUdfU05EX1NFUklBTF9V
MTY1NTA9bQpDT05GSUdfU05EX01QVTQwMT1tCkNPTkZJR19TTkRfUE9SVE1BTjJYND1tCkNP
TkZJR19TTkRfQUM5N19QT1dFUl9TQVZFPXkKQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVf
REVGQVVMVD0wCkNPTkZJR19TTkRfU0JfQ09NTU9OPW0KQ09ORklHX1NORF9QQ0k9eQpDT05G
SUdfU05EX0FEMTg4OT1tCkNPTkZJR19TTkRfQUxTMzAwPW0KQ09ORklHX1NORF9BTFM0MDAw
PW0KQ09ORklHX1NORF9BTEk1NDUxPW0KQ09ORklHX1NORF9BU0lIUEk9bQpDT05GSUdfU05E
X0FUSUlYUD1tCkNPTkZJR19TTkRfQVRJSVhQX01PREVNPW0KQ09ORklHX1NORF9BVTg4MTA9
bQpDT05GSUdfU05EX0FVODgyMD1tCkNPTkZJR19TTkRfQVU4ODMwPW0KQ09ORklHX1NORF9B
VzI9bQpDT05GSUdfU05EX0FaVDMzMjg9bQpDT05GSUdfU05EX0JUODdYPW0KIyBDT05GSUdf
U05EX0JUODdYX09WRVJDTE9DSyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfQ0EwMTA2PW0KQ09O
RklHX1NORF9DTUlQQ0k9bQpDT05GSUdfU05EX09YWUdFTl9MSUI9bQpDT05GSUdfU05EX09Y
WUdFTj1tCkNPTkZJR19TTkRfQ1M0MjgxPW0KQ09ORklHX1NORF9DUzQ2WFg9bQpDT05GSUdf
U05EX0NTNDZYWF9ORVdfRFNQPXkKQ09ORklHX1NORF9DVFhGST1tCkNPTkZJR19TTkRfREFS
TEEyMD1tCkNPTkZJR19TTkRfR0lOQTIwPW0KQ09ORklHX1NORF9MQVlMQTIwPW0KQ09ORklH
X1NORF9EQVJMQTI0PW0KQ09ORklHX1NORF9HSU5BMjQ9bQpDT05GSUdfU05EX0xBWUxBMjQ9
bQpDT05GSUdfU05EX01PTkE9bQpDT05GSUdfU05EX01JQT1tCkNPTkZJR19TTkRfRUNITzNH
PW0KQ09ORklHX1NORF9JTkRJR089bQpDT05GSUdfU05EX0lORElHT0lPPW0KQ09ORklHX1NO
RF9JTkRJR09ESj1tCkNPTkZJR19TTkRfSU5ESUdPSU9YPW0KQ09ORklHX1NORF9JTkRJR09E
Slg9bQpDT05GSUdfU05EX0VNVTEwSzE9bQpDT05GSUdfU05EX0VNVTEwSzFfU0VRPW0KQ09O
RklHX1NORF9FTVUxMEsxWD1tCkNPTkZJR19TTkRfRU5TMTM3MD1tCkNPTkZJR19TTkRfRU5T
MTM3MT1tCkNPTkZJR19TTkRfRVMxOTM4PW0KQ09ORklHX1NORF9FUzE5Njg9bQpDT05GSUdf
U05EX0VTMTk2OF9JTlBVVD15CkNPTkZJR19TTkRfRVMxOTY4X1JBRElPPXkKQ09ORklHX1NO
RF9GTTgwMT1tCkNPTkZJR19TTkRfRk04MDFfVEVBNTc1WF9CT09MPXkKQ09ORklHX1NORF9I
RFNQPW0KQ09ORklHX1NORF9IRFNQTT1tCkNPTkZJR19TTkRfSUNFMTcxMj1tCkNPTkZJR19T
TkRfSUNFMTcyND1tCkNPTkZJR19TTkRfSU5URUw4WDA9bQpDT05GSUdfU05EX0lOVEVMOFgw
TT1tCkNPTkZJR19TTkRfS09SRzEyMTI9bQpDT05GSUdfU05EX0xPTEE9bQpDT05GSUdfU05E
X0xYNjQ2NEVTPW0KQ09ORklHX1NORF9NQUVTVFJPMz1tCkNPTkZJR19TTkRfTUFFU1RSTzNf
SU5QVVQ9eQpDT05GSUdfU05EX01JWEFSVD1tCkNPTkZJR19TTkRfTk0yNTY9bQpDT05GSUdf
U05EX1BDWEhSPW0KQ09ORklHX1NORF9SSVBUSURFPW0KQ09ORklHX1NORF9STUUzMj1tCkNP
TkZJR19TTkRfUk1FOTY9bQpDT05GSUdfU05EX1JNRTk2NTI9bQpDT05GSUdfU05EX1NPTklD
VklCRVM9bQpDT05GSUdfU05EX1RSSURFTlQ9bQpDT05GSUdfU05EX1ZJQTgyWFg9bQpDT05G
SUdfU05EX1ZJQTgyWFhfTU9ERU09bQpDT05GSUdfU05EX1ZJUlRVT1NPPW0KQ09ORklHX1NO
RF9WWDIyMj1tCkNPTkZJR19TTkRfWU1GUENJPW0KCiMKIyBIRC1BdWRpbwojCkNPTkZJR19T
TkRfSERBPW0KQ09ORklHX1NORF9IREFfR0VORVJJQ19MRURTPXkKQ09ORklHX1NORF9IREFf
SU5URUw9bQpDT05GSUdfU05EX0hEQV9IV0RFUD15CkNPTkZJR19TTkRfSERBX1JFQ09ORklH
PXkKQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUD15CkNPTkZJR19TTkRfSERBX0lOUFVUX0JF
RVBfTU9ERT0wCkNPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUj15CkNPTkZJR19TTkRfSERB
X0NPREVDX1JFQUxURUs9bQpDT05GSUdfU05EX0hEQV9DT0RFQ19BTkFMT0c9bQpDT05GSUdf
U05EX0hEQV9DT0RFQ19TSUdNQVRFTD1tCkNPTkZJR19TTkRfSERBX0NPREVDX1ZJQT1tCkNP
TkZJR19TTkRfSERBX0NPREVDX0hETUk9bQpDT05GSUdfU05EX0hEQV9DT0RFQ19DSVJSVVM9
bQpDT05GSUdfU05EX0hEQV9DT0RFQ19DT05FWEFOVD1tCkNPTkZJR19TTkRfSERBX0NPREVD
X0NBMDExMD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEzMj1tCkNPTkZJR19TTkRfSERB
X0NPREVDX0NBMDEzMl9EU1A9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DTUVESUE9bQpDT05G
SUdfU05EX0hEQV9DT0RFQ19TSTMwNTQ9bQpDT05GSUdfU05EX0hEQV9HRU5FUklDPW0KQ09O
RklHX1NORF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTEKQ09ORklHX1NORF9IREFfSU5URUxf
SERNSV9TSUxFTlRfU1RSRUFNPXkKIyBlbmQgb2YgSEQtQXVkaW8KCkNPTkZJR19TTkRfSERB
X0NPUkU9bQpDT05GSUdfU05EX0hEQV9EU1BfTE9BREVSPXkKQ09ORklHX1NORF9IREFfQ09N
UE9ORU5UPXkKQ09ORklHX1NORF9IREFfSTkxNT15CkNPTkZJR19TTkRfSERBX0VYVF9DT1JF
PW0KQ09ORklHX1NORF9IREFfUFJFQUxMT0NfU0laRT0wCkNPTkZJR19TTkRfSU5URUxfTkhM
VD15CkNPTkZJR19TTkRfSU5URUxfRFNQX0NPTkZJRz1tCkNPTkZJR19TTkRfSU5URUxfU09V
TkRXSVJFX0FDUEk9bQpDT05GSUdfU05EX0lOVEVMX0JZVF9QUkVGRVJfU09GPXkKQ09ORklH
X1NORF9TUEk9eQpDT05GSUdfU05EX1VTQj15CkNPTkZJR19TTkRfVVNCX0FVRElPPW0KQ09O
RklHX1NORF9VU0JfQVVESU9fVVNFX01FRElBX0NPTlRST0xMRVI9eQpDT05GSUdfU05EX1VT
Ql9VQTEwMT1tCkNPTkZJR19TTkRfVVNCX1VTWDJZPW0KQ09ORklHX1NORF9VU0JfQ0FJQVE9
bQpDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15CkNPTkZJR19TTkRfVVNCX1VTMTIyTD1t
CkNPTkZJR19TTkRfVVNCXzZGSVJFPW0KQ09ORklHX1NORF9VU0JfSElGQUNFPW0KQ09ORklH
X1NORF9CQ0QyMDAwPW0KQ09ORklHX1NORF9VU0JfTElORTY9bQpDT05GSUdfU05EX1VTQl9Q
T0Q9bQpDT05GSUdfU05EX1VTQl9QT0RIRD1tCkNPTkZJR19TTkRfVVNCX1RPTkVQT1JUPW0K
Q09ORklHX1NORF9VU0JfVkFSSUFYPW0KQ09ORklHX1NORF9GSVJFV0lSRT15CkNPTkZJR19T
TkRfRklSRVdJUkVfTElCPW0KQ09ORklHX1NORF9ESUNFPW0KQ09ORklHX1NORF9PWEZXPW0K
Q09ORklHX1NORF9JU0lHSFQ9bQpDT05GSUdfU05EX0ZJUkVXT1JLUz1tCkNPTkZJR19TTkRf
QkVCT0I9bQpDT05GSUdfU05EX0ZJUkVXSVJFX0RJR0kwMFg9bQpDT05GSUdfU05EX0ZJUkVX
SVJFX1RBU0NBTT1tCkNPTkZJR19TTkRfRklSRVdJUkVfTU9UVT1tCkNPTkZJR19TTkRfRklS
RUZBQ0U9bQpDT05GSUdfU05EX1BDTUNJQT15CkNPTkZJR19TTkRfVlhQT0NLRVQ9bQpDT05G
SUdfU05EX1BEQVVESU9DRj1tCkNPTkZJR19TTkRfU09DPW0KQ09ORklHX1NORF9TT0NfQUM5
N19CVVM9eQpDT05GSUdfU05EX1NPQ19HRU5FUklDX0RNQUVOR0lORV9QQ009eQpDT05GSUdf
U05EX1NPQ19DT01QUkVTUz15CkNPTkZJR19TTkRfU09DX1RPUE9MT0dZPXkKQ09ORklHX1NO
RF9TT0NfQUNQST1tCkNPTkZJR19TTkRfU09DX0FEST1tCkNPTkZJR19TTkRfU09DX0FESV9B
WElfSTJTPW0KQ09ORklHX1NORF9TT0NfQURJX0FYSV9TUERJRj1tCkNPTkZJR19TTkRfU09D
X0FNRF9BQ1A9bQpDT05GSUdfU05EX1NPQ19BTURfQ1pfREE3MjE5TVg5ODM1N19NQUNIPW0K
Q09ORklHX1NORF9TT0NfQU1EX0NaX1JUNTY0NV9NQUNIPW0KQ09ORklHX1NORF9TT0NfQU1E
X0FDUDN4PW0KQ09ORklHX1NORF9TT0NfQU1EX1JWX1JUNTY4Ml9NQUNIPW0KQ09ORklHX1NO
RF9TT0NfQU1EX1JFTk9JUj1tCkNPTkZJR19TTkRfU09DX0FNRF9SRU5PSVJfTUFDSD1tCkNP
TkZJR19TTkRfQVRNRUxfU09DPW0KIyBDT05GSUdfU05EX0JDTTYzWFhfSTJTX1dISVNUTEVS
IGlzIG5vdCBzZXQKQ09ORklHX1NORF9ERVNJR05XQVJFX0kyUz1tCkNPTkZJR19TTkRfREVT
SUdOV0FSRV9QQ009eQoKIwojIFNvQyBBdWRpbyBmb3IgRnJlZXNjYWxlIENQVXMKIwoKIwoj
IENvbW1vbiBTb0MgQXVkaW8gb3B0aW9ucyBmb3IgRnJlZXNjYWxlIENQVXM6CiMKIyBDT05G
SUdfU05EX1NPQ19GU0xfQVNSQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfRlNMX1NB
SSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfRlNMX0FVRE1JWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9TT0NfRlNMX1NTSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfRlNM
X1NQRElGIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfRVNBSSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfRlNMX01JQ0ZJTCBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09D
X0ZTTF9YQ1ZSPW0KIyBDT05GSUdfU05EX1NPQ19JTVhfQVVETVVYIGlzIG5vdCBzZXQKIyBl
bmQgb2YgU29DIEF1ZGlvIGZvciBGcmVlc2NhbGUgQ1BVcwoKQ09ORklHX1NORF9JMlNfSEk2
MjEwX0kyUz1tCkNPTkZJR19TTkRfU09DX0lNRz15CkNPTkZJR19TTkRfU09DX0lNR19JMlNf
SU49bQpDT05GSUdfU05EX1NPQ19JTUdfSTJTX09VVD1tCkNPTkZJR19TTkRfU09DX0lNR19Q
QVJBTExFTF9PVVQ9bQpDT05GSUdfU05EX1NPQ19JTUdfU1BESUZfSU49bQpDT05GSUdfU05E
X1NPQ19JTUdfU1BESUZfT1VUPW0KQ09ORklHX1NORF9TT0NfSU1HX1BJU1RBQ0hJT19JTlRF
Uk5BTF9EQUM9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9TU1RfVE9QTEVWRUw9eQpDT05GSUdf
U05EX1NPQ19JTlRFTF9TU1Q9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9DQVRQVD1tCkNPTkZJ
R19TTkRfU1NUX0FUT01fSElGSTJfUExBVEZPUk09bQpDT05GSUdfU05EX1NTVF9BVE9NX0hJ
RkkyX1BMQVRGT1JNX1BDST1tCkNPTkZJR19TTkRfU1NUX0FUT01fSElGSTJfUExBVEZPUk1f
QUNQST1tCkNPTkZJR19TTkRfU09DX0lOVEVMX1NLWUxBS0U9bQpDT05GSUdfU05EX1NPQ19J
TlRFTF9TS0w9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9BUEw9bQpDT05GSUdfU05EX1NPQ19J
TlRFTF9LQkw9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9HTEs9bQpDT05GSUdfU05EX1NPQ19J
TlRFTF9DTkw9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9DRkw9bQpDT05GSUdfU05EX1NPQ19J
TlRFTF9DTUxfSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX0NNTF9MUD1tCkNPTkZJR19TTkRf
U09DX0lOVEVMX1NLWUxBS0VfRkFNSUxZPW0KQ09ORklHX1NORF9TT0NfSU5URUxfU0tZTEFL
RV9TU1BfQ0xLPW0KQ09ORklHX1NORF9TT0NfSU5URUxfU0tZTEFLRV9IREFVRElPX0NPREVD
PXkKQ09ORklHX1NORF9TT0NfSU5URUxfU0tZTEFLRV9DT01NT049bQpDT05GSUdfU05EX1NP
Q19BQ1BJX0lOVEVMX01BVENIPW0KQ09ORklHX1NORF9TT0NfSU5URUxfTUFDSD15CkNPTkZJ
R19TTkRfU09DX0lOVEVMX1VTRVJfRlJJRU5ETFlfTE9OR19OQU1FUz15CkNPTkZJR19TTkRf
U09DX0lOVEVMX0hBU1dFTExfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX0JEV19SVDU2
NTBfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX0JEV19SVDU2NzdfTUFDSD1tCkNPTkZJ
R19TTkRfU09DX0lOVEVMX0JST0FEV0VMTF9NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5URUxf
QllUQ1JfUlQ1NjQwX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRDUl9SVDU2NTFf
TUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX0JZVENSX1dNNTEwMl9NQUNIPW0KQ09ORklH
X1NORF9TT0NfSU5URUxfQ0hUX0JTV19SVDU2NzJfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lO
VEVMX0NIVF9CU1dfUlQ1NjQ1X01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9DSFRfQlNX
X01BWDk4MDkwX1RJX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9DSFRfQlNXX05BVTg4
MjRfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX0JZVF9DSFRfQ1gyMDcyWF9NQUNIPW0K
Q09ORklHX1NORF9TT0NfSU5URUxfQllUX0NIVF9EQTcyMTNfTUFDSD1tCkNPTkZJR19TTkRf
U09DX0lOVEVMX0JZVF9DSFRfRVM4MzE2X01BQ0g9bQojIENPTkZJR19TTkRfU09DX0lOVEVM
X0JZVF9DSFRfTk9DT0RFQ19NQUNIIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfSU5URUxf
U0tMX1JUMjg2X01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9TS0xfTkFVODhMMjVfU1NN
NDU2N19NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5URUxfU0tMX05BVTg4TDI1X01BWDk4MzU3
QV9NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5URUxfREE3MjE5X01BWDk4MzU3QV9HRU5FUklD
PW0KQ09ORklHX1NORF9TT0NfSU5URUxfQlhUX0RBNzIxOV9NQVg5ODM1N0FfQ09NTU9OPW0K
Q09ORklHX1NORF9TT0NfSU5URUxfQlhUX0RBNzIxOV9NQVg5ODM1N0FfTUFDSD1tCkNPTkZJ
R19TTkRfU09DX0lOVEVMX0JYVF9SVDI5OF9NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5URUxf
U09GX1dNODgwNF9NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5URUxfS0JMX1JUNTY2M19NQVg5
ODkyN19NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5URUxfS0JMX1JUNTY2M19SVDU1MTRfTUFY
OTg5MjdfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX0tCTF9EQTcyMTlfTUFYOTgzNTdB
X01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9LQkxfREE3MjE5X01BWDk4OTI3X01BQ0g9
bQpDT05GSUdfU05EX1NPQ19JTlRFTF9LQkxfUlQ1NjYwX01BQ0g9bQpDT05GSUdfU05EX1NP
Q19JTlRFTF9HTEtfREE3MjE5X01BWDk4MzU3QV9NQUNIPW0KQ09ORklHX1NORF9TT0NfSU5U
RUxfR0xLX1JUNTY4Ml9NQVg5ODM1N0FfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX1NL
TF9IREFfRFNQX0dFTkVSSUNfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX1NPRl9SVDU2
ODJfTUFDSD1tCkNPTkZJR19TTkRfU09DX0lOVEVMX1NPRl9QQ001MTJ4X01BQ0g9bQpDT05G
SUdfU05EX1NPQ19JTlRFTF9DTUxfTFBfREE3MjE5X01BWDk4MzU3QV9NQUNIPW0KQ09ORklH
X1NORF9TT0NfSU5URUxfU09GX0NNTF9SVDEwMTFfUlQ1NjgyX01BQ0g9bQpDT05GSUdfU05E
X1NPQ19JTlRFTF9TT0ZfREE3MjE5X01BWDk4MzczX01BQ0g9bQpDT05GSUdfU05EX1NPQ19J
TlRFTF9FSExfUlQ1NjYwX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9TT1VORFdJUkVf
U09GX01BQ0g9bQpDT05GSUdfU05EX1NPQ19NVEtfQlRDVlNEPW0KQ09ORklHX1NORF9TT0Nf
U09GX1RPUExFVkVMPXkKQ09ORklHX1NORF9TT0NfU09GX1BDSV9ERVY9bQpDT05GSUdfU05E
X1NPQ19TT0ZfUENJPW0KQ09ORklHX1NORF9TT0NfU09GX0FDUEk9bQpDT05GSUdfU05EX1NP
Q19TT0ZfQUNQSV9ERVY9bQojIENPTkZJR19TTkRfU09DX1NPRl9ERUJVR19QUk9CRVMgaXMg
bm90IHNldApDT05GSUdfU05EX1NPQ19TT0Y9bQpDT05GSUdfU05EX1NPQ19TT0ZfUFJPQkVf
V09SS19RVUVVRT15CkNPTkZJR19TTkRfU09DX1NPRl9JTlRFTF9UT1BMRVZFTD15CkNPTkZJ
R19TTkRfU09DX1NPRl9JTlRFTF9ISUZJX0VQX0lQQz1tCkNPTkZJR19TTkRfU09DX1NPRl9J
TlRFTF9BVE9NX0hJRklfRVA9bQpDT05GSUdfU05EX1NPQ19TT0ZfSU5URUxfQ09NTU9OPW0K
Q09ORklHX1NORF9TT0NfU09GX0JBWVRSQUlMPW0KIyBDT05GSUdfU05EX1NPQ19TT0ZfQlJP
QURXRUxMIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfU09GX01FUlJJRklFTEQ9bQpDT05G
SUdfU05EX1NPQ19TT0ZfSU5URUxfQVBMPW0KQ09ORklHX1NORF9TT0NfU09GX0FQT0xMT0xB
S0U9bQpDT05GSUdfU05EX1NPQ19TT0ZfR0VNSU5JTEFLRT1tCkNPTkZJR19TTkRfU09DX1NP
Rl9JTlRFTF9DTkw9bQpDT05GSUdfU05EX1NPQ19TT0ZfQ0FOTk9OTEFLRT1tCkNPTkZJR19T
TkRfU09DX1NPRl9DT0ZGRUVMQUtFPW0KQ09ORklHX1NORF9TT0NfU09GX0NPTUVUTEFLRT1t
CkNPTkZJR19TTkRfU09DX1NPRl9JTlRFTF9JQ0w9bQpDT05GSUdfU05EX1NPQ19TT0ZfSUNF
TEFLRT1tCkNPTkZJR19TTkRfU09DX1NPRl9KQVNQRVJMQUtFPW0KQ09ORklHX1NORF9TT0Nf
U09GX0lOVEVMX1RHTD1tCkNPTkZJR19TTkRfU09DX1NPRl9USUdFUkxBS0U9bQpDT05GSUdf
U05EX1NPQ19TT0ZfRUxLSEFSVExBS0U9bQpDT05GSUdfU05EX1NPQ19TT0ZfQUxERVJMQUtF
PW0KQ09ORklHX1NORF9TT0NfU09GX0hEQV9DT01NT049bQpDT05GSUdfU05EX1NPQ19TT0Zf
SERBX0xJTks9eQpDT05GSUdfU05EX1NPQ19TT0ZfSERBX0FVRElPX0NPREVDPXkKIyBDT05G
SUdfU05EX1NPQ19TT0ZfSERBX0FMV0FZU19FTkFCTEVfRE1JX0wxIGlzIG5vdCBzZXQKQ09O
RklHX1NORF9TT0NfU09GX0hEQV9MSU5LX0JBU0VMSU5FPW0KQ09ORklHX1NORF9TT0NfU09G
X0hEQT1tCkNPTkZJR19TTkRfU09DX1NPRl9JTlRFTF9TT1VORFdJUkVfTElOS19CQVNFTElO
RT1tCkNPTkZJR19TTkRfU09DX1NPRl9JTlRFTF9TT1VORFdJUkU9bQpDT05GSUdfU05EX1NP
Q19TT0ZfWFRFTlNBPW0KCiMKIyBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzIgU09DIGF1ZGlv
IHN1cHBvcnQKIwojIGVuZCBvZiBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzIgU09DIGF1ZGlv
IHN1cHBvcnQKCkNPTkZJR19TTkRfU09DX1hJTElOWF9JMlM9bQpDT05GSUdfU05EX1NPQ19Y
SUxJTlhfQVVESU9fRk9STUFUVEVSPW0KQ09ORklHX1NORF9TT0NfWElMSU5YX1NQRElGPW0K
Q09ORklHX1NORF9TT0NfWFRGUEdBX0kyUz1tCkNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJ
PW0KCiMKIyBDT0RFQyBkcml2ZXJzCiMKQ09ORklHX1NORF9TT0NfQVJJWk9OQT1tCkNPTkZJ
R19TTkRfU09DX1dNX0FEU1A9bQpDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDPW0KQ09ORklH
X1NORF9TT0NfQURBVV9VVElMUz1tCkNPTkZJR19TTkRfU09DX0FEQVUxMzcyPW0KQ09ORklH
X1NORF9TT0NfQURBVTEzNzJfSTJDPW0KQ09ORklHX1NORF9TT0NfQURBVTEzNzJfU1BJPW0K
Q09ORklHX1NORF9TT0NfQURBVTE3MDE9bQpDT05GSUdfU05EX1NPQ19BREFVMTdYMT1tCkNP
TkZJR19TTkRfU09DX0FEQVUxNzYxPW0KQ09ORklHX1NORF9TT0NfQURBVTE3NjFfSTJDPW0K
Q09ORklHX1NORF9TT0NfQURBVTE3NjFfU1BJPW0KQ09ORklHX1NORF9TT0NfQURBVTcwMDI9
bQpDT05GSUdfU05EX1NPQ19BREFVNzExOD1tCkNPTkZJR19TTkRfU09DX0FEQVU3MTE4X0hX
PW0KQ09ORklHX1NORF9TT0NfQURBVTcxMThfSTJDPW0KQ09ORklHX1NORF9TT0NfQUs0MTA0
PW0KQ09ORklHX1NORF9TT0NfQUs0MTE4PW0KQ09ORklHX1NORF9TT0NfQUs0NDU4PW0KQ09O
RklHX1NORF9TT0NfQUs0NTU0PW0KQ09ORklHX1NORF9TT0NfQUs0NjEzPW0KQ09ORklHX1NO
RF9TT0NfQUs0NjQyPW0KQ09ORklHX1NORF9TT0NfQUs1Mzg2PW0KQ09ORklHX1NORF9TT0Nf
QUs1NTU4PW0KQ09ORklHX1NORF9TT0NfQUxDNTYyMz1tCkNPTkZJR19TTkRfU09DX0JEMjg2
MjM9bQojIENPTkZJR19TTkRfU09DX0JUX1NDTyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09D
X0NST1NfRUNfQ09ERUM9bQpDT05GSUdfU05EX1NPQ19DUzM1TDMyPW0KQ09ORklHX1NORF9T
T0NfQ1MzNUwzMz1tCkNPTkZJR19TTkRfU09DX0NTMzVMMzQ9bQpDT05GSUdfU05EX1NPQ19D
UzM1TDM1PW0KQ09ORklHX1NORF9TT0NfQ1MzNUwzNj1tCkNPTkZJR19TTkRfU09DX0NTNDJM
NDI9bQpDT05GSUdfU05EX1NPQ19DUzQyTDUxPW0KQ09ORklHX1NORF9TT0NfQ1M0Mkw1MV9J
MkM9bQpDT05GSUdfU05EX1NPQ19DUzQyTDUyPW0KQ09ORklHX1NORF9TT0NfQ1M0Mkw1Nj1t
CkNPTkZJR19TTkRfU09DX0NTNDJMNzM9bQpDT05GSUdfU05EX1NPQ19DUzQyMzQ9bQpDT05G
SUdfU05EX1NPQ19DUzQyNjU9bQpDT05GSUdfU05EX1NPQ19DUzQyNzA9bQpDT05GSUdfU05E
X1NPQ19DUzQyNzE9bQpDT05GSUdfU05EX1NPQ19DUzQyNzFfSTJDPW0KQ09ORklHX1NORF9T
T0NfQ1M0MjcxX1NQST1tCkNPTkZJR19TTkRfU09DX0NTNDJYWDg9bQpDT05GSUdfU05EX1NP
Q19DUzQyWFg4X0kyQz1tCkNPTkZJR19TTkRfU09DX0NTNDMxMzA9bQpDT05GSUdfU05EX1NP
Q19DUzQzNDE9bQpDT05GSUdfU05EX1NPQ19DUzQzNDk9bQpDT05GSUdfU05EX1NPQ19DUzUz
TDMwPW0KQ09ORklHX1NORF9TT0NfQ1gyMDcyWD1tCkNPTkZJR19TTkRfU09DX0RBNzIxMz1t
CkNPTkZJR19TTkRfU09DX0RBNzIxOT1tCkNPTkZJR19TTkRfU09DX0RNSUM9bQpDT05GSUdf
U05EX1NPQ19IRE1JX0NPREVDPW0KQ09ORklHX1NORF9TT0NfRVM3MTM0PW0KQ09ORklHX1NO
RF9TT0NfRVM3MjQxPW0KQ09ORklHX1NORF9TT0NfRVM4MzE2PW0KQ09ORklHX1NORF9TT0Nf
RVM4MzI4PW0KQ09ORklHX1NORF9TT0NfRVM4MzI4X0kyQz1tCkNPTkZJR19TTkRfU09DX0VT
ODMyOF9TUEk9bQpDT05GSUdfU05EX1NPQ19HVE02MDE9bQpDT05GSUdfU05EX1NPQ19IREFD
X0hETUk9bQpDT05GSUdfU05EX1NPQ19IREFDX0hEQT1tCkNPTkZJR19TTkRfU09DX0lOTk9f
UkszMDM2PW0KQ09ORklHX1NORF9TT0NfTUFYOTgwODg9bQpDT05GSUdfU05EX1NPQ19NQVg5
ODA5MD1tCkNPTkZJR19TTkRfU09DX01BWDk4MzU3QT1tCkNPTkZJR19TTkRfU09DX01BWDk4
NTA0PW0KQ09ORklHX1NORF9TT0NfTUFYOTg2Nz1tCkNPTkZJR19TTkRfU09DX01BWDk4OTI3
PW0KQ09ORklHX1NORF9TT0NfTUFYOTgzNzM9bQpDT05GSUdfU05EX1NPQ19NQVg5ODM3M19J
MkM9bQpDT05GSUdfU05EX1NPQ19NQVg5ODM3M19TRFc9bQpDT05GSUdfU05EX1NPQ19NQVg5
ODM5MD1tCkNPTkZJR19TTkRfU09DX01BWDk4NjA9bQpDT05GSUdfU05EX1NPQ19NU004OTE2
X1dDRF9ESUdJVEFMPW0KQ09ORklHX1NORF9TT0NfUENNMTY4MT1tCkNPTkZJR19TTkRfU09D
X1BDTTE3ODk9bQpDT05GSUdfU05EX1NPQ19QQ00xNzg5X0kyQz1tCkNPTkZJR19TTkRfU09D
X1BDTTE3OVg9bQpDT05GSUdfU05EX1NPQ19QQ00xNzlYX0kyQz1tCkNPTkZJR19TTkRfU09D
X1BDTTE3OVhfU1BJPW0KQ09ORklHX1NORF9TT0NfUENNMTg2WD1tCkNPTkZJR19TTkRfU09D
X1BDTTE4NlhfSTJDPW0KQ09ORklHX1NORF9TT0NfUENNMTg2WF9TUEk9bQpDT05GSUdfU05E
X1NPQ19QQ00zMDYwPW0KQ09ORklHX1NORF9TT0NfUENNMzA2MF9JMkM9bQpDT05GSUdfU05E
X1NPQ19QQ00zMDYwX1NQST1tCkNPTkZJR19TTkRfU09DX1BDTTMxNjhBPW0KQ09ORklHX1NO
RF9TT0NfUENNMzE2OEFfSTJDPW0KQ09ORklHX1NORF9TT0NfUENNMzE2OEFfU1BJPW0KQ09O
RklHX1NORF9TT0NfUENNNTEwMkE9bQpDT05GSUdfU05EX1NPQ19QQ001MTJ4PW0KQ09ORklH
X1NORF9TT0NfUENNNTEyeF9JMkM9bQpDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQST1tCkNP
TkZJR19TTkRfU09DX1JLMzMyOD1tCkNPTkZJR19TTkRfU09DX1JMNjIzMT1tCkNPTkZJR19T
TkRfU09DX1JMNjM0N0E9bQpDT05GSUdfU05EX1NPQ19SVDI4Nj1tCkNPTkZJR19TTkRfU09D
X1JUMjk4PW0KQ09ORklHX1NORF9TT0NfUlQxMDExPW0KQ09ORklHX1NORF9TT0NfUlQxMDE1
PW0KQ09ORklHX1NORF9TT0NfUlQxMzA4PW0KQ09ORklHX1NORF9TT0NfUlQxMzA4X1NEVz1t
CkNPTkZJR19TTkRfU09DX1JUNTUxND1tCkNPTkZJR19TTkRfU09DX1JUNTUxNF9TUEk9bQpD
T05GSUdfU05EX1NPQ19SVDU2MTY9bQpDT05GSUdfU05EX1NPQ19SVDU2MzE9bQpDT05GSUdf
U05EX1NPQ19SVDU2NDA9bQpDT05GSUdfU05EX1NPQ19SVDU2NDU9bQpDT05GSUdfU05EX1NP
Q19SVDU2NTE9bQpDT05GSUdfU05EX1NPQ19SVDU2NTk9bQpDT05GSUdfU05EX1NPQ19SVDU2
NjA9bQpDT05GSUdfU05EX1NPQ19SVDU2NjM9bQpDT05GSUdfU05EX1NPQ19SVDU2NzA9bQpD
T05GSUdfU05EX1NPQ19SVDU2Nzc9bQpDT05GSUdfU05EX1NPQ19SVDU2NzdfU1BJPW0KQ09O
RklHX1NORF9TT0NfUlQ1NjgyPW0KQ09ORklHX1NORF9TT0NfUlQ1NjgyX0kyQz1tCkNPTkZJ
R19TTkRfU09DX1JUNTY4Ml9TRFc9bQpDT05GSUdfU05EX1NPQ19SVDcwMD1tCkNPTkZJR19T
TkRfU09DX1JUNzAwX1NEVz1tCkNPTkZJR19TTkRfU09DX1JUNzExPW0KQ09ORklHX1NORF9T
T0NfUlQ3MTFfU0RXPW0KQ09ORklHX1NORF9TT0NfUlQ3MTU9bQpDT05GSUdfU05EX1NPQ19S
VDcxNV9TRFc9bQpDT05GSUdfU05EX1NPQ19TR1RMNTAwMD1tCkNPTkZJR19TTkRfU09DX1NJ
NDc2WD1tCkNPTkZJR19TTkRfU09DX1NJR01BRFNQPW0KQ09ORklHX1NORF9TT0NfU0lHTUFE
U1BfSTJDPW0KQ09ORklHX1NORF9TT0NfU0lHTUFEU1BfUkVHTUFQPW0KQ09ORklHX1NORF9T
T0NfU0lNUExFX0FNUExJRklFUj1tCkNPTkZJR19TTkRfU09DX1NJTVBMRV9NVVg9bQojIENP
TkZJR19TTkRfU09DX1NJUkZfQVVESU9fQ09ERUMgaXMgbm90IHNldApDT05GSUdfU05EX1NP
Q19TUERJRj1tCkNPTkZJR19TTkRfU09DX1NTTTIzMDU9bQpDT05GSUdfU05EX1NPQ19TU00y
NjAyPW0KQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEk9bQpDT05GSUdfU05EX1NPQ19TU00y
NjAyX0kyQz1tCkNPTkZJR19TTkRfU09DX1NTTTQ1Njc9bQpDT05GSUdfU05EX1NPQ19TVEEz
Mlg9bQpDT05GSUdfU05EX1NPQ19TVEEzNTA9bQpDT05GSUdfU05EX1NPQ19TVElfU0FTPW0K
Q09ORklHX1NORF9TT0NfVEFTMjU1Mj1tCkNPTkZJR19TTkRfU09DX1RBUzI1NjI9bQpDT05G
SUdfU05EX1NPQ19UQVMyNzY0PW0KQ09ORklHX1NORF9TT0NfVEFTMjc3MD1tCkNPTkZJR19T
TkRfU09DX1RBUzUwODY9bQpDT05GSUdfU05EX1NPQ19UQVM1NzFYPW0KQ09ORklHX1NORF9T
T0NfVEFTNTcyMD1tCkNPTkZJR19TTkRfU09DX1RBUzY0MjQ9bQpDT05GSUdfU05EX1NPQ19U
REE3NDE5PW0KQ09ORklHX1NORF9TT0NfVEZBOTg3OT1tCkNPTkZJR19TTkRfU09DX1RMVjMy
MEFJQzIzPW0KQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjNfSTJDPW0KQ09ORklHX1NORF9T
T0NfVExWMzIwQUlDMjNfU1BJPW0KQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMzFYWD1tCkNP
TkZJR19TTkRfU09DX1RMVjMyMEFJQzMyWDQ9bQpDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMz
Mlg0X0kyQz1tCkNPTkZJR19TTkRfU09DX1RMVjMyMEFJQzMyWDRfU1BJPW0KQ09ORklHX1NO
RF9TT0NfVExWMzIwQUlDM1g9bQpDT05GSUdfU05EX1NPQ19UTFYzMjBBRENYMTQwPW0KQ09O
RklHX1NORF9TT0NfVFMzQTIyN0U9bQpDT05GSUdfU05EX1NPQ19UU0NTNDJYWD1tCkNPTkZJ
R19TTkRfU09DX1RTQ1M0NTQ9bQpDT05GSUdfU05EX1NPQ19VREExMzM0PW0KQ09ORklHX1NO
RF9TT0NfV0NEOTMzNT1tCkNPTkZJR19TTkRfU09DX1dDRDkzNFg9bQpDT05GSUdfU05EX1NP
Q19XTTUxMDI9bQpDT05GSUdfU05EX1NPQ19XTTg1MTA9bQpDT05GSUdfU05EX1NPQ19XTTg1
MjM9bQpDT05GSUdfU05EX1NPQ19XTTg1MjQ9bQpDT05GSUdfU05EX1NPQ19XTTg1ODA9bQpD
T05GSUdfU05EX1NPQ19XTTg3MTE9bQpDT05GSUdfU05EX1NPQ19XTTg3Mjg9bQpDT05GSUdf
U05EX1NPQ19XTTg3MzE9bQpDT05GSUdfU05EX1NPQ19XTTg3Mzc9bQpDT05GSUdfU05EX1NP
Q19XTTg3NDE9bQpDT05GSUdfU05EX1NPQ19XTTg3NTA9bQpDT05GSUdfU05EX1NPQ19XTTg3
NTM9bQpDT05GSUdfU05EX1NPQ19XTTg3NzA9bQpDT05GSUdfU05EX1NPQ19XTTg3NzY9bQpD
T05GSUdfU05EX1NPQ19XTTg3ODI9bQpDT05GSUdfU05EX1NPQ19XTTg4MDQ9bQpDT05GSUdf
U05EX1NPQ19XTTg4MDRfSTJDPW0KQ09ORklHX1NORF9TT0NfV004ODA0X1NQST1tCkNPTkZJ
R19TTkRfU09DX1dNODkwMz1tCkNPTkZJR19TTkRfU09DX1dNODkwND1tCkNPTkZJR19TTkRf
U09DX1dNODk2MD1tCkNPTkZJR19TTkRfU09DX1dNODk2Mj1tCkNPTkZJR19TTkRfU09DX1dN
ODk3ND1tCkNPTkZJR19TTkRfU09DX1dNODk3OD1tCkNPTkZJR19TTkRfU09DX1dNODk4NT1t
CkNPTkZJR19TTkRfU09DX1dTQTg4MVg9bQpDT05GSUdfU05EX1NPQ19aTDM4MDYwPW0KQ09O
RklHX1NORF9TT0NfWlhfQVVEOTZQMjI9bQpDT05GSUdfU05EX1NPQ19NQVg5NzU5PW0KQ09O
RklHX1NORF9TT0NfTVQ2MzUxPW0KQ09ORklHX1NORF9TT0NfTVQ2MzU4PW0KQ09ORklHX1NO
RF9TT0NfTVQ2NjYwPW0KQ09ORklHX1NORF9TT0NfTkFVODMxNT1tCkNPTkZJR19TTkRfU09D
X05BVTg1NDA9bQpDT05GSUdfU05EX1NPQ19OQVU4ODEwPW0KQ09ORklHX1NORF9TT0NfTkFV
ODgyMj1tCkNPTkZJR19TTkRfU09DX05BVTg4MjQ9bQpDT05GSUdfU05EX1NPQ19OQVU4ODI1
PW0KQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyPW0KQ09ORklHX1NORF9TT0NfTFBBU1NfV1NB
X01BQ1JPPW0KQ09ORklHX1NORF9TT0NfTFBBU1NfVkFfTUFDUk89bQpDT05GSUdfU05EX1NP
Q19MUEFTU19SWF9NQUNSTz1tCkNPTkZJR19TTkRfU09DX0xQQVNTX1RYX01BQ1JPPW0KIyBl
bmQgb2YgQ09ERUMgZHJpdmVycwoKQ09ORklHX1NORF9TSU1QTEVfQ0FSRF9VVElMUz1tCkNP
TkZJR19TTkRfU0lNUExFX0NBUkQ9bQpDT05GSUdfU05EX1g4Nj15CkNPTkZJR19IRE1JX0xQ
RV9BVURJTz1tCkNPTkZJR19TTkRfU1lOVEhfRU1VWD1tCkNPTkZJR19TTkRfWEVOX0ZST05U
RU5EPW0KQ09ORklHX0FDOTdfQlVTPW0KCiMKIyBISUQgc3VwcG9ydAojCkNPTkZJR19ISUQ9
eQpDT05GSUdfSElEX0JBVFRFUllfU1RSRU5HVEg9eQpDT05GSUdfSElEUkFXPXkKQ09ORklH
X1VISUQ9bQpDT05GSUdfSElEX0dFTkVSSUM9eQoKIwojIFNwZWNpYWwgSElEIGRyaXZlcnMK
IwpDT05GSUdfSElEX0E0VEVDSD1tCkNPTkZJR19ISURfQUNDVVRPVUNIPW0KQ09ORklHX0hJ
RF9BQ1JVWD1tCkNPTkZJR19ISURfQUNSVVhfRkY9eQpDT05GSUdfSElEX0FQUExFPW0KQ09O
RklHX0hJRF9BUFBMRUlSPW0KQ09ORklHX0hJRF9BU1VTPW0KQ09ORklHX0hJRF9BVVJFQUw9
bQpDT05GSUdfSElEX0JFTEtJTj1tCkNPTkZJR19ISURfQkVUT1BfRkY9bQpDT05GSUdfSElE
X0JJR0JFTl9GRj1tCkNPTkZJR19ISURfQ0hFUlJZPW0KQ09ORklHX0hJRF9DSElDT05ZPW0K
Q09ORklHX0hJRF9DT1JTQUlSPW0KQ09ORklHX0hJRF9DT1VHQVI9bQpDT05GSUdfSElEX01B
Q0FMTFk9bQpDT05GSUdfSElEX1BST0RJS0VZUz1tCkNPTkZJR19ISURfQ01FRElBPW0KQ09O
RklHX0hJRF9DUDIxMTI9bQpDT05GSUdfSElEX0NSRUFUSVZFX1NCMDU0MD1tCkNPTkZJR19I
SURfQ1lQUkVTUz1tCkNPTkZJR19ISURfRFJBR09OUklTRT1tCkNPTkZJR19EUkFHT05SSVNF
X0ZGPXkKQ09ORklHX0hJRF9FTVNfRkY9bQpDT05GSUdfSElEX0VMQU49bQpDT05GSUdfSElE
X0VMRUNPTT1tCkNPTkZJR19ISURfRUxPPW0KQ09ORklHX0hJRF9FWktFWT1tCkNPTkZJR19I
SURfR0VNQklSRD1tCkNPTkZJR19ISURfR0ZSTT1tCkNPTkZJR19ISURfR0xPUklPVVM9bQpD
T05GSUdfSElEX0hPTFRFSz1tCkNPTkZJR19IT0xURUtfRkY9eQpDT05GSUdfSElEX0dPT0dM
RV9IQU1NRVI9bQpDT05GSUdfSElEX1ZJVkFMREk9bQpDT05GSUdfSElEX0dUNjgzUj1tCkNP
TkZJR19ISURfS0VZVE9VQ0g9bQpDT05GSUdfSElEX0tZRT1tCkNPTkZJR19ISURfVUNMT0dJ
Qz1tCkNPTkZJR19ISURfV0FMVE9QPW0KQ09ORklHX0hJRF9WSUVXU09OSUM9bQpDT05GSUdf
SElEX0dZUkFUSU9OPW0KQ09ORklHX0hJRF9JQ0FERT1tCkNPTkZJR19ISURfSVRFPW0KQ09O
RklHX0hJRF9KQUJSQT1tCkNPTkZJR19ISURfVFdJTkhBTj1tCkNPTkZJR19ISURfS0VOU0lO
R1RPTj1tCkNPTkZJR19ISURfTENQT1dFUj1tCkNPTkZJR19ISURfTEVEPW0KQ09ORklHX0hJ
RF9MRU5PVk89bQpDT05GSUdfSElEX0xPR0lURUNIPW0KQ09ORklHX0hJRF9MT0dJVEVDSF9E
Sj1tCkNPTkZJR19ISURfTE9HSVRFQ0hfSElEUFA9bQpDT05GSUdfTE9HSVRFQ0hfRkY9eQpD
T05GSUdfTE9HSVJVTUJMRVBBRDJfRkY9eQpDT05GSUdfTE9HSUc5NDBfRkY9eQpDT05GSUdf
TE9HSVdIRUVMU19GRj15CkNPTkZJR19ISURfTUFHSUNNT1VTRT1tCkNPTkZJR19ISURfTUFM
VFJPTj1tCkNPTkZJR19ISURfTUFZRkxBU0g9bQpDT05GSUdfSElEX1JFRFJBR09OPW0KQ09O
RklHX0hJRF9NSUNST1NPRlQ9bQpDT05GSUdfSElEX01PTlRFUkVZPW0KQ09ORklHX0hJRF9N
VUxUSVRPVUNIPW0KQ09ORklHX0hJRF9OVEk9bQpDT05GSUdfSElEX05UUklHPW0KQ09ORklH
X0hJRF9PUlRFSz1tCkNPTkZJR19ISURfUEFOVEhFUkxPUkQ9bQpDT05GSUdfUEFOVEhFUkxP
UkRfRkY9eQpDT05GSUdfSElEX1BFTk1PVU5UPW0KQ09ORklHX0hJRF9QRVRBTFlOWD1tCkNP
TkZJR19ISURfUElDT0xDRD1tCkNPTkZJR19ISURfUElDT0xDRF9GQj15CkNPTkZJR19ISURf
UElDT0xDRF9CQUNLTElHSFQ9eQpDT05GSUdfSElEX1BJQ09MQ0RfTENEPXkKQ09ORklHX0hJ
RF9QSUNPTENEX0xFRFM9eQpDT05GSUdfSElEX1BJQ09MQ0RfQ0lSPXkKQ09ORklHX0hJRF9Q
TEFOVFJPTklDUz1tCkNPTkZJR19ISURfUExBWVNUQVRJT049bQpDT05GSUdfUExBWVNUQVRJ
T05fRkY9eQpDT05GSUdfSElEX1BSSU1BWD1tCkNPTkZJR19ISURfUkVUUk9ERT1tCkNPTkZJ
R19ISURfUk9DQ0FUPW0KQ09ORklHX0hJRF9TQUlURUs9bQpDT05GSUdfSElEX1NBTVNVTkc9
bQpDT05GSUdfSElEX1NPTlk9bQpDT05GSUdfU09OWV9GRj15CkNPTkZJR19ISURfU1BFRURM
SU5LPW0KQ09ORklHX0hJRF9TVEVBTT1tCkNPTkZJR19ISURfU1RFRUxTRVJJRVM9bQpDT05G
SUdfSElEX1NVTlBMVVM9bQpDT05GSUdfSElEX1JNST1tCkNPTkZJR19ISURfR1JFRU5BU0lB
PW0KQ09ORklHX0dSRUVOQVNJQV9GRj15CkNPTkZJR19ISURfSFlQRVJWX01PVVNFPW0KQ09O
RklHX0hJRF9TTUFSVEpPWVBMVVM9bQpDT05GSUdfU01BUlRKT1lQTFVTX0ZGPXkKQ09ORklH
X0hJRF9USVZPPW0KQ09ORklHX0hJRF9UT1BTRUVEPW0KQ09ORklHX0hJRF9USElOR009bQpD
T05GSUdfSElEX1RIUlVTVE1BU1RFUj1tCkNPTkZJR19USFJVU1RNQVNURVJfRkY9eQpDT05G
SUdfSElEX1VEUkFXX1BTMz1tCkNPTkZJR19ISURfVTJGWkVSTz1tCkNPTkZJR19ISURfV0FD
T009bQpDT05GSUdfSElEX1dJSU1PVEU9bQpDT05GSUdfSElEX1hJTk1PPW0KQ09ORklHX0hJ
RF9aRVJPUExVUz1tCkNPTkZJR19aRVJPUExVU19GRj15CkNPTkZJR19ISURfWllEQUNST049
bQpDT05GSUdfSElEX1NFTlNPUl9IVUI9bQpDT05GSUdfSElEX1NFTlNPUl9DVVNUT01fU0VO
U09SPW0KQ09ORklHX0hJRF9BTFBTPW0KQ09ORklHX0hJRF9NQ1AyMjIxPW0KIyBlbmQgb2Yg
U3BlY2lhbCBISUQgZHJpdmVycwoKIwojIFVTQiBISUQgc3VwcG9ydAojCkNPTkZJR19VU0Jf
SElEPW0KQ09ORklHX0hJRF9QSUQ9eQpDT05GSUdfVVNCX0hJRERFVj15CiMgZW5kIG9mIFVT
QiBISUQgc3VwcG9ydAoKIwojIEkyQyBISUQgc3VwcG9ydAojCkNPTkZJR19JMkNfSElEX0FD
UEk9bQojIGVuZCBvZiBJMkMgSElEIHN1cHBvcnQKCkNPTkZJR19JMkNfSElEX0NPUkU9bQoK
IwojIEludGVsIElTSCBISUQgc3VwcG9ydAojCkNPTkZJR19JTlRFTF9JU0hfSElEPW0KQ09O
RklHX0lOVEVMX0lTSF9GSVJNV0FSRV9ET1dOTE9BREVSPW0KIyBlbmQgb2YgSW50ZWwgSVNI
IEhJRCBzdXBwb3J0CgojCiMgQU1EIFNGSCBISUQgU3VwcG9ydAojCkNPTkZJR19BTURfU0ZI
X0hJRD1tCiMgZW5kIG9mIEFNRCBTRkggSElEIFN1cHBvcnQKIyBlbmQgb2YgSElEIHN1cHBv
cnQKCkNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKQ09ORklHX1VTQl9TVVBQT1JU
PXkKQ09ORklHX1VTQl9DT01NT049eQpDT05GSUdfVVNCX0xFRF9UUklHPXkKQ09ORklHX1VT
Ql9VTFBJX0JVUz1tCkNPTkZJR19VU0JfQ09OTl9HUElPPW0KQ09ORklHX1VTQl9BUkNIX0hB
U19IQ0Q9eQpDT05GSUdfVVNCPXkKQ09ORklHX1VTQl9QQ0k9eQpDT05GSUdfVVNCX0FOTk9V
TkNFX05FV19ERVZJQ0VTPXkKCiMKIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiMKQ09O
RklHX1VTQl9ERUZBVUxUX1BFUlNJU1Q9eQojIENPTkZJR19VU0JfRkVXX0lOSVRfUkVUUklF
UyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9PVEcgaXMgbm90IHNldAojIENPTkZJR19VU0JfT1RHX1BST0RVQ1RMSVNU
IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9MRURTX1RSSUdHRVJfVVNCUE9SVD1tCkNPTkZJR19V
U0JfQVVUT1NVU1BFTkRfREVMQVk9MgpDT05GSUdfVVNCX01PTj1tCgojCiMgVVNCIEhvc3Qg
Q29udHJvbGxlciBEcml2ZXJzCiMKQ09ORklHX1VTQl9DNjdYMDBfSENEPW0KQ09ORklHX1VT
Ql9YSENJX0hDRD15CiMgQ09ORklHX1VTQl9YSENJX0RCR0NBUCBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfWEhDSV9QQ0k9bQpDT05GSUdfVVNCX1hIQ0lfUENJX1JFTkVTQVM9bQpDT05GSUdf
VVNCX1hIQ0lfUExBVEZPUk09bQpDT05GSUdfVVNCX0VIQ0lfSENEPXkKQ09ORklHX1VTQl9F
SENJX1JPT1RfSFVCX1RUPXkKQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKQ09ORklH
X1VTQl9FSENJX1BDST15CkNPTkZJR19VU0JfRUhDSV9GU0w9bQpDT05GSUdfVVNCX0VIQ0lf
SENEX1BMQVRGT1JNPW0KQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0Q9bQpDT05GSUdfVVNCX0lT
UDExNlhfSENEPW0KQ09ORklHX1VTQl9GT1RHMjEwX0hDRD1tCkNPTkZJR19VU0JfTUFYMzQy
MV9IQ0Q9bQpDT05GSUdfVVNCX09IQ0lfSENEPXkKQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9
eQpDT05GSUdfVVNCX09IQ0lfSENEX1BMQVRGT1JNPW0KQ09ORklHX1VTQl9VSENJX0hDRD15
CkNPTkZJR19VU0JfVTEzMl9IQ0Q9bQpDT05GSUdfVVNCX1NMODExX0hDRD1tCiMgQ09ORklH
X1VTQl9TTDgxMV9IQ0RfSVNPIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9TTDgxMV9DUz1tCkNP
TkZJR19VU0JfUjhBNjY1OTdfSENEPW0KQ09ORklHX1VTQl9IQ0RfQkNNQT1tCkNPTkZJR19V
U0JfSENEX1NTQj1tCiMgQ09ORklHX1VTQl9IQ0RfVEVTVF9NT0RFIGlzIG5vdCBzZXQKCiMK
IyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKIwpDT05GSUdfVVNCX0FDTT1tCkNPTkZJR19V
U0JfUFJJTlRFUj1tCkNPTkZJR19VU0JfV0RNPW0KQ09ORklHX1VTQl9UTUM9bQoKIwojIE5P
VEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKIwoK
IwojIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZv
CiMKQ09ORklHX1VTQl9TVE9SQUdFPW0KIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMg
bm90IHNldApDT05GSUdfVVNCX1NUT1JBR0VfUkVBTFRFSz1tCkNPTkZJR19SRUFMVEVLX0FV
VE9QTT15CkNPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPW0KQ09ORklHX1VTQl9TVE9SQUdF
X0ZSRUVDT009bQpDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPW0KQ09ORklHX1VTQl9TVE9S
QUdFX1VTQkFUPW0KQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT1tCkNPTkZJR19VU0JfU1RP
UkFHRV9TRERSNTU9bQpDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9bQpDT05GSUdfVVNC
X1NUT1JBR0VfQUxBVURBPW0KQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIPW0KQ09ORklH
X1VTQl9TVE9SQUdFX0tBUk1BPW0KQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0I9
bQpDT05GSUdfVVNCX1NUT1JBR0VfRU5FX1VCNjI1MD1tCkNPTkZJR19VU0JfVUFTPW0KCiMK
IyBVU0IgSW1hZ2luZyBkZXZpY2VzCiMKQ09ORklHX1VTQl9NREM4MDA9bQpDT05GSUdfVVNC
X01JQ1JPVEVLPW0KQ09ORklHX1VTQklQX0NPUkU9bQpDT05GSUdfVVNCSVBfVkhDSV9IQ0Q9
bQpDT05GSUdfVVNCSVBfVkhDSV9IQ19QT1JUUz04CkNPTkZJR19VU0JJUF9WSENJX05SX0hD
Uz0xCkNPTkZJR19VU0JJUF9IT1NUPW0KQ09ORklHX1VTQklQX1ZVREM9bQojIENPTkZJR19V
U0JJUF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfQ0ROU19TVVBQT1JUPW0KQ09ORklH
X1VTQl9DRE5TX0hPU1Q9eQpDT05GSUdfVVNCX0NETlMzPW0KQ09ORklHX1VTQl9DRE5TM19H
QURHRVQ9eQpDT05GSUdfVVNCX0NETlMzX0hPU1Q9eQpDT05GSUdfVVNCX0NETlMzX1BDSV9X
UkFQPW0KQ09ORklHX1VTQl9DRE5TUF9QQ0k9bQpDT05GSUdfVVNCX0NETlNQX0dBREdFVD15
CkNPTkZJR19VU0JfQ0ROU1BfSE9TVD15CkNPTkZJR19VU0JfTVVTQl9IRFJDPW0KIyBDT05G
SUdfVVNCX01VU0JfSE9TVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NVVNCX0dBREdFVCBp
cyBub3Qgc2V0CkNPTkZJR19VU0JfTVVTQl9EVUFMX1JPTEU9eQoKIwojIFBsYXRmb3JtIEds
dWUgTGF5ZXIKIwoKIwojIE1VU0IgRE1BIG1vZGUKIwojIENPTkZJR19NVVNCX1BJT19PTkxZ
IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9EV0MzPW0KQ09ORklHX1VTQl9EV0MzX1VMUEk9eQoj
IENPTkZJR19VU0JfRFdDM19IT1NUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzNfR0FE
R0VUIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9EV0MzX0RVQUxfUk9MRT15CgojCiMgUGxhdGZv
cm0gR2x1ZSBEcml2ZXIgU3VwcG9ydAojCkNPTkZJR19VU0JfRFdDM19QQ0k9bQpDT05GSUdf
VVNCX0RXQzNfSEFQUz1tCkNPTkZJR19VU0JfRFdDMj1tCiMgQ09ORklHX1VTQl9EV0MyX0hP
U1QgaXMgbm90IHNldAoKIwojIEdhZGdldC9EdWFsLXJvbGUgbW9kZSByZXF1aXJlcyBVU0Ig
R2FkZ2V0IHN1cHBvcnQgdG8gYmUgZW5hYmxlZAojCiMgQ09ORklHX1VTQl9EV0MyX1BFUklQ
SEVSQUwgaXMgbm90IHNldApDT05GSUdfVVNCX0RXQzJfRFVBTF9ST0xFPXkKQ09ORklHX1VT
Ql9EV0MyX1BDST1tCiMgQ09ORklHX1VTQl9EV0MyX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0RXQzJfVFJBQ0tfTUlTU0VEX1NPRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0NI
SVBJREVBPW0KQ09ORklHX1VTQl9DSElQSURFQV9VREM9eQpDT05GSUdfVVNCX0NISVBJREVB
X0hPU1Q9eQpDT05GSUdfVVNCX0NISVBJREVBX1BDST1tCkNPTkZJR19VU0JfQ0hJUElERUFf
TVNNPW0KQ09ORklHX1VTQl9DSElQSURFQV9HRU5FUklDPW0KQ09ORklHX1VTQl9JU1AxNzYw
PW0KQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CkNPTkZJR19VU0JfSVNQMTc2MV9VREM9eQoj
IENPTkZJR19VU0JfSVNQMTc2MF9IT1NUX1JPTEUgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
SVNQMTc2MF9HQURHRVRfUk9MRSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfSVNQMTc2MF9EVUFM
X1JPTEU9eQoKIwojIFVTQiBwb3J0IGRyaXZlcnMKIwpDT05GSUdfVVNCX1VTUzcyMD1tCkNP
TkZJR19VU0JfU0VSSUFMPXkKQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15CkNPTkZJR19V
U0JfU0VSSUFMX0dFTkVSSUM9eQpDT05GSUdfVVNCX1NFUklBTF9TSU1QTEU9bQpDT05GSUdf
VVNCX1NFUklBTF9BSVJDQUJMRT1tCkNPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9bQpDT05G
SUdfVVNCX1NFUklBTF9CRUxLSU49bQpDT05GSUdfVVNCX1NFUklBTF9DSDM0MT1tCkNPTkZJ
R19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCkNPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxF
UE9SVD1tCkNPTkZJR19VU0JfU0VSSUFMX0NQMjEwWD1tCkNPTkZJR19VU0JfU0VSSUFMX0NZ
UFJFU1NfTTg9bQpDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCkNPTkZJR19VU0JfU0VSSUFM
X0ZURElfU0lPPW0KQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9bQpDT05GSUdfVVNCX1NFUklB
TF9JUEFRPW0KQ09ORklHX1VTQl9TRVJJQUxfSVI9bQpDT05GSUdfVVNCX1NFUklBTF9FREdF
UE9SVD1tCkNPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KQ09ORklHX1VTQl9TRVJJ
QUxfRjgxMjMyPW0KQ09ORklHX1VTQl9TRVJJQUxfRjgxNTNYPW0KQ09ORklHX1VTQl9TRVJJ
QUxfR0FSTUlOPW0KQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KQ09ORklHX1VTQl9TRVJJQUxf
SVVVPW0KQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQpDT05GSUdfVVNCX1NFUklB
TF9LRVlTUEFOPW0KQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCkNPTkZJR19VU0JfU0VSSUFM
X0tPQklMX1NDVD1tCkNPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KQ09ORklHX1VTQl9T
RVJJQUxfTUVUUk89bQpDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwPW0KQ09ORklHX1VTQl9T
RVJJQUxfTU9TNzcxNV9QQVJQT1JUPXkKQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MD1tCkNP
TkZJR19VU0JfU0VSSUFMX01YVVBPUlQ9bQpDT05GSUdfVVNCX1NFUklBTF9OQVZNQU49bQpD
T05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQpDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4PW0K
Q09ORklHX1VTQl9TRVJJQUxfUUNBVVg9bQpDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTT1t
CkNPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDU9bQpDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0K
IyBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRCBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
U0VSSUFMX1NJRVJSQVdJUkVMRVNTPW0KQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MPW0KQ09O
RklHX1VTQl9TRVJJQUxfVEk9bQpDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQpDT05G
SUdfVVNCX1NFUklBTF9XV0FOPW0KQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OPW0KQ09ORklH
X1VTQl9TRVJJQUxfT01OSU5FVD1tCkNPTkZJR19VU0JfU0VSSUFMX09QVElDT049bQpDT05G
SUdfVVNCX1NFUklBTF9YU0VOU19NVD1tCkNPTkZJR19VU0JfU0VSSUFMX1dJU0hCT05FPW0K
Q09ORklHX1VTQl9TRVJJQUxfU1NVMTAwPW0KQ09ORklHX1VTQl9TRVJJQUxfUVQyPW0KQ09O
RklHX1VTQl9TRVJJQUxfVVBENzhGMDczMD1tCkNPTkZJR19VU0JfU0VSSUFMX1hSPW0KQ09O
RklHX1VTQl9TRVJJQUxfREVCVUc9bQoKIwojIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMK
IwpDT05GSUdfVVNCX0VNSTYyPW0KQ09ORklHX1VTQl9FTUkyNj1tCkNPTkZJR19VU0JfQURV
VFVYPW0KQ09ORklHX1VTQl9TRVZTRUc9bQpDT05GSUdfVVNCX0xFR09UT1dFUj1tCkNPTkZJ
R19VU0JfTENEPW0KQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2Mz1tCkNPTkZJR19VU0JfQ1lU
SEVSTT1tCkNPTkZJR19VU0JfSURNT1VTRT1tCkNPTkZJR19VU0JfRlRESV9FTEFOPW0KQ09O
RklHX1VTQl9BUFBMRURJU1BMQVk9bQpDT05GSUdfQVBQTEVfTUZJX0ZBU1RDSEFSR0U9bQpD
T05GSUdfVVNCX1NJU1VTQlZHQT1tCkNPTkZJR19VU0JfTEQ9bQpDT05GSUdfVVNCX1RSQU5D
RVZJQlJBVE9SPW0KQ09ORklHX1VTQl9JT1dBUlJJT1I9bQpDT05GSUdfVVNCX1RFU1Q9bQpD
T05GSUdfVVNCX0VIU0VUX1RFU1RfRklYVFVSRT1tCkNPTkZJR19VU0JfSVNJR0hURlc9bQpD
T05GSUdfVVNCX1lVUkVYPW0KQ09ORklHX1VTQl9FWlVTQl9GWDI9bQpDT05GSUdfVVNCX0hV
Ql9VU0IyNTFYQj1tCkNPTkZJR19VU0JfSFNJQ19VU0IzNTAzPW0KQ09ORklHX1VTQl9IU0lD
X1VTQjQ2MDQ9bQpDT05GSUdfVVNCX0xJTktfTEFZRVJfVEVTVD1tCkNPTkZJR19VU0JfQ0hB
T1NLRVk9bQpDT05GSUdfVVNCX0FUTT1tCkNPTkZJR19VU0JfU1BFRURUT1VDSD1tCkNPTkZJ
R19VU0JfQ1hBQ1JVPW0KQ09ORklHX1VTQl9VRUFHTEVBVE09bQpDT05GSUdfVVNCX1hVU0JB
VE09bQoKIwojIFVTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzCiMKQ09ORklHX1VTQl9QSFk9
eQpDT05GSUdfTk9QX1VTQl9YQ0VJVj1tCkNPTkZJR19VU0JfR1BJT19WQlVTPW0KQ09ORklH
X1RBSFZPX1VTQj1tCiMgQ09ORklHX1RBSFZPX1VTQl9IT1NUX0JZX0RFRkFVTFQgaXMgbm90
IHNldApDT05GSUdfVVNCX0lTUDEzMDE9bQojIGVuZCBvZiBVU0IgUGh5c2ljYWwgTGF5ZXIg
ZHJpdmVycwoKQ09ORklHX1VTQl9HQURHRVQ9bQojIENPTkZJR19VU0JfR0FER0VUX0RFQlVH
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0dB
REdFVF9WQlVTX0RSQVc9MgpDT05GSUdfVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJT
PTIKQ09ORklHX1VfU0VSSUFMX0NPTlNPTEU9eQoKIwojIFVTQiBQZXJpcGhlcmFsIENvbnRy
b2xsZXIKIwpDT05GSUdfVVNCX0ZPVEcyMTBfVURDPW0KQ09ORklHX1VTQl9HUl9VREM9bQpD
T05GSUdfVVNCX1I4QTY2NTk3PW0KQ09ORklHX1VTQl9QWEEyN1g9bQpDT05GSUdfVVNCX01W
X1VEQz1tCkNPTkZJR19VU0JfTVZfVTNEPW0KQ09ORklHX1VTQl9TTlBfQ09SRT1tCkNPTkZJ
R19VU0JfTTY2NTkyPW0KQ09ORklHX1VTQl9CRENfVURDPW0KQ09ORklHX1VTQl9BTUQ1NTM2
VURDPW0KQ09ORklHX1VTQl9ORVQyMjcyPW0KIyBDT05GSUdfVVNCX05FVDIyNzJfRE1BIGlz
IG5vdCBzZXQKQ09ORklHX1VTQl9ORVQyMjgwPW0KQ09ORklHX1VTQl9HT0tVPW0KQ09ORklH
X1VTQl9FRzIwVD1tCkNPTkZJR19VU0JfTUFYMzQyMF9VREM9bQpDT05GSUdfVVNCX0RVTU1Z
X0hDRD1tCiMgZW5kIG9mIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIKCkNPTkZJR19VU0Jf
TElCQ09NUE9TSVRFPW0KQ09ORklHX1VTQl9GX0FDTT1tCkNPTkZJR19VU0JfRl9TU19MQj1t
CkNPTkZJR19VU0JfVV9TRVJJQUw9bQpDT05GSUdfVVNCX1VfRVRIRVI9bQpDT05GSUdfVVNC
X1VfQVVESU89bQpDT05GSUdfVVNCX0ZfU0VSSUFMPW0KQ09ORklHX1VTQl9GX09CRVg9bQpD
T05GSUdfVVNCX0ZfTkNNPW0KQ09ORklHX1VTQl9GX0VDTT1tCkNPTkZJR19VU0JfRl9QSE9O
RVQ9bQpDT05GSUdfVVNCX0ZfRUVNPW0KQ09ORklHX1VTQl9GX1NVQlNFVD1tCkNPTkZJR19V
U0JfRl9STkRJUz1tCkNPTkZJR19VU0JfRl9NQVNTX1NUT1JBR0U9bQpDT05GSUdfVVNCX0Zf
RlM9bQpDT05GSUdfVVNCX0ZfVUFDMT1tCkNPTkZJR19VU0JfRl9VQUMxX0xFR0FDWT1tCkNP
TkZJR19VU0JfRl9VQUMyPW0KQ09ORklHX1VTQl9GX1VWQz1tCkNPTkZJR19VU0JfRl9NSURJ
PW0KQ09ORklHX1VTQl9GX0hJRD1tCkNPTkZJR19VU0JfRl9QUklOVEVSPW0KQ09ORklHX1VT
Ql9GX1RDTT1tCkNPTkZJR19VU0JfQ09ORklHRlM9bQpDT05GSUdfVVNCX0NPTkZJR0ZTX1NF
UklBTD15CkNPTkZJR19VU0JfQ09ORklHRlNfQUNNPXkKQ09ORklHX1VTQl9DT05GSUdGU19P
QkVYPXkKQ09ORklHX1VTQl9DT05GSUdGU19OQ009eQpDT05GSUdfVVNCX0NPTkZJR0ZTX0VD
TT15CkNPTkZJR19VU0JfQ09ORklHRlNfRUNNX1NVQlNFVD15CkNPTkZJR19VU0JfQ09ORklH
RlNfUk5ESVM9eQpDT05GSUdfVVNCX0NPTkZJR0ZTX0VFTT15CkNPTkZJR19VU0JfQ09ORklH
RlNfUEhPTkVUPXkKQ09ORklHX1VTQl9DT05GSUdGU19NQVNTX1NUT1JBR0U9eQpDT05GSUdf
VVNCX0NPTkZJR0ZTX0ZfTEJfU1M9eQpDT05GSUdfVVNCX0NPTkZJR0ZTX0ZfRlM9eQpDT05G
SUdfVVNCX0NPTkZJR0ZTX0ZfVUFDMT15CkNPTkZJR19VU0JfQ09ORklHRlNfRl9VQUMxX0xF
R0FDWT15CkNPTkZJR19VU0JfQ09ORklHRlNfRl9VQUMyPXkKQ09ORklHX1VTQl9DT05GSUdG
U19GX01JREk9eQpDT05GSUdfVVNCX0NPTkZJR0ZTX0ZfSElEPXkKQ09ORklHX1VTQl9DT05G
SUdGU19GX1VWQz15CkNPTkZJR19VU0JfQ09ORklHRlNfRl9QUklOVEVSPXkKQ09ORklHX1VT
Ql9DT05GSUdGU19GX1RDTT15CgojCiMgVVNCIEdhZGdldCBwcmVjb21wb3NlZCBjb25maWd1
cmF0aW9ucwojCkNPTkZJR19VU0JfWkVSTz1tCkNPTkZJR19VU0JfQVVESU89bQojIENPTkZJ
R19HQURHRVRfVUFDMSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRVRIPW0KQ09ORklHX1VTQl9F
VEhfUk5ESVM9eQpDT05GSUdfVVNCX0VUSF9FRU09eQpDT05GSUdfVVNCX0dfTkNNPW0KQ09O
RklHX1VTQl9HQURHRVRGUz1tCkNPTkZJR19VU0JfRlVOQ1RJT05GUz1tCkNPTkZJR19VU0Jf
RlVOQ1RJT05GU19FVEg9eQpDT05GSUdfVVNCX0ZVTkNUSU9ORlNfUk5ESVM9eQpDT05GSUdf
VVNCX0ZVTkNUSU9ORlNfR0VORVJJQz15CkNPTkZJR19VU0JfTUFTU19TVE9SQUdFPW0KQ09O
RklHX1VTQl9HQURHRVRfVEFSR0VUPW0KQ09ORklHX1VTQl9HX1NFUklBTD1tCkNPTkZJR19V
U0JfTUlESV9HQURHRVQ9bQpDT05GSUdfVVNCX0dfUFJJTlRFUj1tCkNPTkZJR19VU0JfQ0RD
X0NPTVBPU0lURT1tCkNPTkZJR19VU0JfR19OT0tJQT1tCkNPTkZJR19VU0JfR19BQ01fTVM9
bQpDT05GSUdfVVNCX0dfTVVMVEk9bQpDT05GSUdfVVNCX0dfTVVMVElfUk5ESVM9eQpDT05G
SUdfVVNCX0dfTVVMVElfQ0RDPXkKQ09ORklHX1VTQl9HX0hJRD1tCkNPTkZJR19VU0JfR19E
QkdQPW0KIyBDT05GSUdfVVNCX0dfREJHUF9QUklOVEsgaXMgbm90IHNldApDT05GSUdfVVNC
X0dfREJHUF9TRVJJQUw9eQpDT05GSUdfVVNCX0dfV0VCQ0FNPW0KQ09ORklHX1VTQl9SQVdf
R0FER0VUPW0KIyBlbmQgb2YgVVNCIEdhZGdldCBwcmVjb21wb3NlZCBjb25maWd1cmF0aW9u
cwoKQ09ORklHX1RZUEVDPW0KQ09ORklHX1RZUEVDX1RDUE09bQpDT05GSUdfVFlQRUNfVENQ
Q0k9bQpDT05GSUdfVFlQRUNfUlQxNzExSD1tCkNPTkZJR19UWVBFQ19NVDYzNjA9bQpDT05G
SUdfVFlQRUNfVENQQ0lfTUFYSU09bQpDT05GSUdfVFlQRUNfRlVTQjMwMj1tCkNPTkZJR19U
WVBFQ19XQ09WRT1tCkNPTkZJR19UWVBFQ19VQ1NJPW0KQ09ORklHX1VDU0lfQ0NHPW0KQ09O
RklHX1VDU0lfQUNQST1tCkNPTkZJR19UWVBFQ19IRDNTUzMyMjA9bQpDT05GSUdfVFlQRUNf
VFBTNjU5OFg9bQpDT05GSUdfVFlQRUNfU1RVU0IxNjBYPW0KCiMKIyBVU0IgVHlwZS1DIE11
bHRpcGxleGVyL0RlTXVsdGlwbGV4ZXIgU3dpdGNoIHN1cHBvcnQKIwpDT05GSUdfVFlQRUNf
TVVYX1BJM1VTQjMwNTMyPW0KQ09ORklHX1RZUEVDX01VWF9JTlRFTF9QTUM9bQojIGVuZCBv
ZiBVU0IgVHlwZS1DIE11bHRpcGxleGVyL0RlTXVsdGlwbGV4ZXIgU3dpdGNoIHN1cHBvcnQK
CiMKIyBVU0IgVHlwZS1DIEFsdGVybmF0ZSBNb2RlIGRyaXZlcnMKIwpDT05GSUdfVFlQRUNf
RFBfQUxUTU9ERT1tCkNPTkZJR19UWVBFQ19OVklESUFfQUxUTU9ERT1tCiMgZW5kIG9mIFVT
QiBUeXBlLUMgQWx0ZXJuYXRlIE1vZGUgZHJpdmVycwoKQ09ORklHX1VTQl9ST0xFX1NXSVRD
SD1tCkNPTkZJR19VU0JfUk9MRVNfSU5URUxfWEhDST1tCkNPTkZJR19NTUM9bQpDT05GSUdf
TU1DX0JMT0NLPW0KQ09ORklHX01NQ19CTE9DS19NSU5PUlM9OApDT05GSUdfU0RJT19VQVJU
PW0KQ09ORklHX01NQ19URVNUPW0KQ09ORklHX01NQ19DUllQVE89eQoKIwojIE1NQy9TRC9T
RElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiMKIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5v
dCBzZXQKQ09ORklHX01NQ19TREhDST1tCkNPTkZJR19NTUNfU0RIQ0lfSU9fQUNDRVNTT1JT
PXkKQ09ORklHX01NQ19TREhDSV9QQ0k9bQpDT05GSUdfTU1DX1JJQ09IX01NQz15CkNPTkZJ
R19NTUNfU0RIQ0lfQUNQST1tCkNPTkZJR19NTUNfU0RIQ0lfUExURk09bQpDT05GSUdfTU1D
X1NESENJX0ZfU0RIMzA9bQpDT05GSUdfTU1DX1dCU0Q9bQpDT05GSUdfTU1DX0FMQ09SPW0K
Q09ORklHX01NQ19USUZNX1NEPW0KQ09ORklHX01NQ19TUEk9bQpDT05GSUdfTU1DX1NEUklD
T0hfQ1M9bQpDT05GSUdfTU1DX0NCNzEwPW0KQ09ORklHX01NQ19WSUFfU0RNTUM9bQpDT05G
SUdfTU1DX1ZVQjMwMD1tCkNPTkZJR19NTUNfVVNIQz1tCkNPTkZJR19NTUNfVVNESEk2Uk9M
MD1tCkNPTkZJR19NTUNfUkVBTFRFS19QQ0k9bQpDT05GSUdfTU1DX1JFQUxURUtfVVNCPW0K
Q09ORklHX01NQ19DUUhDST1tCkNPTkZJR19NTUNfSFNRPW0KQ09ORklHX01NQ19UT1NISUJB
X1BDST1tCkNPTkZJR19NTUNfTVRLPW0KQ09ORklHX01NQ19TREhDSV9YRU5PTj1tCkNPTkZJ
R19NRU1TVElDSz1tCiMgQ09ORklHX01FTVNUSUNLX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBN
ZW1vcnlTdGljayBkcml2ZXJzCiMKIyBDT05GSUdfTUVNU1RJQ0tfVU5TQUZFX1JFU1VNRSBp
cyBub3Qgc2V0CkNPTkZJR19NU1BST19CTE9DSz1tCkNPTkZJR19NU19CTE9DSz1tCgojCiMg
TWVtb3J5U3RpY2sgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfTUVNU1RJQ0tf
VElGTV9NUz1tCkNPTkZJR19NRU1TVElDS19KTUlDUk9OXzM4WD1tCkNPTkZJR19NRU1TVElD
S19SNTkyPW0KQ09ORklHX01FTVNUSUNLX1JFQUxURUtfUENJPW0KQ09ORklHX01FTVNUSUNL
X1JFQUxURUtfVVNCPW0KQ09ORklHX05FV19MRURTPXkKQ09ORklHX0xFRFNfQ0xBU1M9eQpD
T05GSUdfTEVEU19DTEFTU19GTEFTSD1tCkNPTkZJR19MRURTX0NMQVNTX01VTFRJQ09MT1I9
bQpDT05GSUdfTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRUQ9eQoKIwojIExFRCBkcml2ZXJz
CiMKQ09ORklHX0xFRFNfODhQTTg2MFg9bQpDT05GSUdfTEVEU19BUFU9bQpDT05GSUdfTEVE
U19BUzM2NDVBPW0KQ09ORklHX0xFRFNfTE0zNTMwPW0KQ09ORklHX0xFRFNfTE0zNTMyPW0K
Q09ORklHX0xFRFNfTE0zNTMzPW0KQ09ORklHX0xFRFNfTE0zNjQyPW0KQ09ORklHX0xFRFNf
TE0zNjAxWD1tCkNPTkZJR19MRURTX01UNjMyMz1tCkNPTkZJR19MRURTX1BDQTk1MzI9bQpD
T05GSUdfTEVEU19QQ0E5NTMyX0dQSU89eQpDT05GSUdfTEVEU19HUElPPW0KQ09ORklHX0xF
RFNfTFAzOTQ0PW0KQ09ORklHX0xFRFNfTFAzOTUyPW0KQ09ORklHX0xFRFNfTFA1MFhYPW0K
Q09ORklHX0xFRFNfTFA4Nzg4PW0KQ09ORklHX0xFRFNfQ0xFVk9fTUFJTD1tCkNPTkZJR19M
RURTX1BDQTk1NVg9bQpDT05GSUdfTEVEU19QQ0E5NTVYX0dQSU89eQpDT05GSUdfTEVEU19Q
Q0E5NjNYPW0KQ09ORklHX0xFRFNfV004MzFYX1NUQVRVUz1tCkNPTkZJR19MRURTX1dNODM1
MD1tCkNPTkZJR19MRURTX0RBOTAzWD1tCkNPTkZJR19MRURTX0RBOTA1Mj1tCkNPTkZJR19M
RURTX0RBQzEyNFMwODU9bQpDT05GSUdfTEVEU19QV009bQpDT05GSUdfTEVEU19SRUdVTEFU
T1I9bQpDT05GSUdfTEVEU19CRDI4MDI9bQpDT05GSUdfTEVEU19JTlRFTF9TUzQyMDA9bQpD
T05GSUdfTEVEU19BRFA1NTIwPW0KQ09ORklHX0xFRFNfTUMxMzc4Mz1tCkNPTkZJR19MRURT
X1RDQTY1MDc9bQpDT05GSUdfTEVEU19UTEM1OTFYWD1tCkNPTkZJR19MRURTX01BWDg5OTc9
bQpDT05GSUdfTEVEU19MTTM1NXg9bQpDT05GSUdfTEVEU19NRU5GMjFCTUM9bQoKIwojIExF
RCBkcml2ZXIgZm9yIGJsaW5rKDEpIFVTQiBSR0IgTEVEIGlzIHVuZGVyIFNwZWNpYWwgSElE
IGRyaXZlcnMgKEhJRF9USElOR00pCiMKQ09ORklHX0xFRFNfQkxJTktNPW0KQ09ORklHX0xF
RFNfTUxYQ1BMRD1tCkNPTkZJR19MRURTX01MWFJFRz1tCkNPTkZJR19MRURTX1VTRVI9bQpD
T05GSUdfTEVEU19OSUM3OEJYPW0KQ09ORklHX0xFRFNfVElfTE1VX0NPTU1PTj1tCkNPTkZJ
R19MRURTX0xNMzYyNzQ9bQpDT05GSUdfTEVEU19UUFM2MTA1WD1tCkNPTkZJR19MRURTX1NH
TTMxNDA9bQoKIwojIEZsYXNoIGFuZCBUb3JjaCBMRUQgZHJpdmVycwojCkNPTkZJR19MRURT
X1JUODUxNT1tCgojCiMgTEVEIFRyaWdnZXJzCiMKQ09ORklHX0xFRFNfVFJJR0dFUlM9eQpD
T05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KQ09ORklHX0xFRFNfVFJJR0dFUl9PTkVTSE9U
PW0KQ09ORklHX0xFRFNfVFJJR0dFUl9ESVNLPXkKQ09ORklHX0xFRFNfVFJJR0dFUl9NVEQ9
eQpDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCkNPTkZJR19MRURTX1RSSUdHRVJf
QkFDS0xJR0hUPW0KQ09ORklHX0xFRFNfVFJJR0dFUl9DUFU9eQpDT05GSUdfTEVEU19UUklH
R0VSX0FDVElWSVRZPW0KQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPW0KQ09ORklHX0xFRFNf
VFJJR0dFUl9ERUZBVUxUX09OPW0KCiMKIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5l
dGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiMKQ09ORklHX0xFRFNfVFJJR0dFUl9UUkFO
U0lFTlQ9bQpDT05GSUdfTEVEU19UUklHR0VSX0NBTUVSQT1tCkNPTkZJR19MRURTX1RSSUdH
RVJfUEFOSUM9eQpDT05GSUdfTEVEU19UUklHR0VSX05FVERFVj1tCkNPTkZJR19MRURTX1RS
SUdHRVJfUEFUVEVSTj1tCkNPTkZJR19MRURTX1RSSUdHRVJfQVVESU89bQpDT05GSUdfTEVE
U19UUklHR0VSX1RUWT1tCgojCiMgTEVEIEJsaW5rCiMKQ09ORklHX0xFRFNfQkxJTks9eQpD
T05GSUdfQUNDRVNTSUJJTElUWT15CkNPTkZJR19BMTFZX0JSQUlMTEVfQ09OU09MRT15Cgoj
CiMgU3BlYWt1cCBjb25zb2xlIHNwZWVjaAojCkNPTkZJR19TUEVBS1VQPW0KQ09ORklHX1NQ
RUFLVVBfU1lOVEhfQUNOVFNBPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfQVBPTExPPW0KQ09O
RklHX1NQRUFLVVBfU1lOVEhfQVVEUFRSPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfQk5TPW0K
Q09ORklHX1NQRUFLVVBfU1lOVEhfREVDVExLPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfREVD
RVhUPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfTFRMSz1tCkNPTkZJR19TUEVBS1VQX1NZTlRI
X1NPRlQ9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9TUEtPVVQ9bQpDT05GSUdfU1BFQUtVUF9T
WU5USF9UWFBSVD1tCkNPTkZJR19TUEVBS1VQX1NZTlRIX0RVTU1ZPW0KIyBlbmQgb2YgU3Bl
YWt1cCBjb25zb2xlIHNwZWVjaAoKQ09ORklHX0lORklOSUJBTkQ9bQpDT05GSUdfSU5GSU5J
QkFORF9VU0VSX01BRD1tCkNPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KQ09ORklH
X0lORklOSUJBTkRfVVNFUl9NRU09eQpDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFH
SU5HPXkKQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CkNPTkZJR19JTkZJTklCQU5E
X0FERFJfVFJBTlNfQ09ORklHRlM9eQpDT05GSUdfSU5GSU5JQkFORF9WSVJUX0RNQT15CkNP
TkZJR19JTkZJTklCQU5EX01USENBPW0KQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9
eQpDT05GSUdfSU5GSU5JQkFORF9RSUI9bQpDT05GSUdfSU5GSU5JQkFORF9RSUJfRENBPXkK
Q09ORklHX0lORklOSUJBTkRfQ1hHQjQ9bQpDT05GSUdfSU5GSU5JQkFORF9FRkE9bQpDT05G
SUdfSU5GSU5JQkFORF9JNDBJVz1tCkNPTkZJR19NTFg0X0lORklOSUJBTkQ9bQpDT05GSUdf
TUxYNV9JTkZJTklCQU5EPW0KQ09ORklHX0lORklOSUJBTkRfT0NSRE1BPW0KQ09ORklHX0lO
RklOSUJBTkRfVk1XQVJFX1BWUkRNQT1tCkNPTkZJR19JTkZJTklCQU5EX1VTTklDPW0KQ09O
RklHX0lORklOSUJBTkRfQk5YVF9SRT1tCkNPTkZJR19JTkZJTklCQU5EX0hGSTE9bQojIENP
TkZJR19IRkkxX0RFQlVHX1NETUFfT1JERVIgaXMgbm90IHNldAojIENPTkZJR19TRE1BX1ZF
UkJPU0lUWSBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklCQU5EX1FFRFI9bQpDT05GSUdfSU5G
SU5JQkFORF9SRE1BVlQ9bQpDT05GSUdfUkRNQV9SWEU9bQpDT05GSUdfUkRNQV9TSVc9bQpD
T05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCkNPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNPXkK
Q09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQojIENPTkZJR19JTkZJTklCQU5EX0lQ
T0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldApDT05GSUdfSU5GSU5JQkFORF9TUlA9bQpDT05G
SUdfSU5GSU5JQkFORF9TUlBUPW0KQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCkNPTkZJR19J
TkZJTklCQU5EX0lTRVJUPW0KQ09ORklHX0lORklOSUJBTkRfUlRSUz1tCkNPTkZJR19JTkZJ
TklCQU5EX1JUUlNfQ0xJRU5UPW0KQ09ORklHX0lORklOSUJBTkRfUlRSU19TRVJWRVI9bQpD
T05GSUdfSU5GSU5JQkFORF9PUEFfVk5JQz1tCkNPTkZJR19FREFDX0FUT01JQ19TQ1JVQj15
CkNPTkZJR19FREFDX1NVUFBPUlQ9eQpDT05GSUdfRURBQz15CkNPTkZJR19FREFDX0xFR0FD
WV9TWVNGUz15CiMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRURBQ19E
RUNPREVfTUNFPW0KQ09ORklHX0VEQUNfR0hFUz15CkNPTkZJR19FREFDX0FNRDY0PW0KQ09O
RklHX0VEQUNfRTc1Mlg9bQpDT05GSUdfRURBQ19JODI5NzVYPW0KQ09ORklHX0VEQUNfSTMw
MDA9bQpDT05GSUdfRURBQ19JMzIwMD1tCkNPTkZJR19FREFDX0lFMzEyMDA9bQpDT05GSUdf
RURBQ19YMzg9bQpDT05GSUdfRURBQ19JNTQwMD1tCkNPTkZJR19FREFDX0k3Q09SRT1tCkNP
TkZJR19FREFDX0k1MDAwPW0KQ09ORklHX0VEQUNfSTUxMDA9bQpDT05GSUdfRURBQ19JNzMw
MD1tCkNPTkZJR19FREFDX1NCUklER0U9bQpDT05GSUdfRURBQ19TS1g9bQpDT05GSUdfRURB
Q19JMTBOTT1tCkNPTkZJR19FREFDX1BORDI9bQpDT05GSUdfRURBQ19JR0VONj1tCkNPTkZJ
R19SVENfTElCPXkKQ09ORklHX1JUQ19NQzE0NjgxOF9MSUI9eQpDT05GSUdfUlRDX0NMQVNT
PXkKQ09ORklHX1JUQ19IQ1RPU1lTPXkKQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRj
MCIKQ09ORklHX1JUQ19TWVNUT0hDPXkKQ09ORklHX1JUQ19TWVNUT0hDX0RFVklDRT0icnRj
MCIKIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1JUQ19OVk1FTT15Cgoj
CiMgUlRDIGludGVyZmFjZXMKIwpDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQpDT05GSUdfUlRD
X0lOVEZfUFJPQz15CkNPTkZJR19SVENfSU5URl9ERVY9eQpDT05GSUdfUlRDX0lOVEZfREVW
X1VJRV9FTVVMPXkKIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKCiMKIyBJMkMg
UlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RSVl84OFBNODYwWD1tCkNPTkZJR19SVENfRFJW
Xzg4UE04MFg9bQpDT05GSUdfUlRDX0RSVl9BQkI1WkVTMz1tCkNPTkZJR19SVENfRFJWX0FC
RU9aOT1tCkNPTkZJR19SVENfRFJWX0FCWDgwWD1tCkNPTkZJR19SVENfRFJWX0RTMTMwNz1t
CkNPTkZJR19SVENfRFJWX0RTMTMwN19DRU5UVVJZPXkKQ09ORklHX1JUQ19EUlZfRFMxMzc0
PW0KQ09ORklHX1JUQ19EUlZfRFMxMzc0X1dEVD15CkNPTkZJR19SVENfRFJWX0RTMTY3Mj1t
CkNPTkZJR19SVENfRFJWX0xQODc4OD1tCkNPTkZJR19SVENfRFJWX01BWDY5MDA9bQpDT05G
SUdfUlRDX0RSVl9NQVg4OTA3PW0KQ09ORklHX1JUQ19EUlZfTUFYODkyNT1tCkNPTkZJR19S
VENfRFJWX01BWDg5OTg9bQpDT05GSUdfUlRDX0RSVl9NQVg4OTk3PW0KQ09ORklHX1JUQ19E
UlZfUlM1QzM3Mj1tCkNPTkZJR19SVENfRFJWX0lTTDEyMDg9bQpDT05GSUdfUlRDX0RSVl9J
U0wxMjAyMj1tCkNPTkZJR19SVENfRFJWX1gxMjA1PW0KQ09ORklHX1JUQ19EUlZfUENGODUy
Mz1tCkNPTkZJR19SVENfRFJWX1BDRjg1MDYzPW0KQ09ORklHX1JUQ19EUlZfUENGODUzNjM9
bQpDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPW0KQ09ORklHX1JUQ19EUlZfUENGODU4Mz1tCkNP
TkZJR19SVENfRFJWX000MVQ4MD1tCkNPTkZJR19SVENfRFJWX000MVQ4MF9XRFQ9eQpDT05G
SUdfUlRDX0RSVl9CUTMySz1tCkNPTkZJR19SVENfRFJWX1BBTE1BUz1tCkNPTkZJR19SVENf
RFJWX1RQUzY1ODZYPW0KQ09ORklHX1JUQ19EUlZfVFBTNjU5MTA9bQpDT05GSUdfUlRDX0RS
Vl9UUFM4MDAzMT1tCkNPTkZJR19SVENfRFJWX1JDNVQ1ODM9bQpDT05GSUdfUlRDX0RSVl9T
MzUzOTBBPW0KQ09ORklHX1JUQ19EUlZfRk0zMTMwPW0KQ09ORklHX1JUQ19EUlZfUlg4MDEw
PW0KQ09ORklHX1JUQ19EUlZfUlg4NTgxPW0KQ09ORklHX1JUQ19EUlZfUlg4MDI1PW0KQ09O
RklHX1JUQ19EUlZfRU0zMDI3PW0KQ09ORklHX1JUQ19EUlZfUlYzMDI4PW0KQ09ORklHX1JU
Q19EUlZfUlYzMDMyPW0KQ09ORklHX1JUQ19EUlZfUlY4ODAzPW0KQ09ORklHX1JUQ19EUlZf
UzVNPW0KQ09ORklHX1JUQ19EUlZfU0QzMDc4PW0KCiMKIyBTUEkgUlRDIGRyaXZlcnMKIwpD
T05GSUdfUlRDX0RSVl9NNDFUOTM9bQpDT05GSUdfUlRDX0RSVl9NNDFUOTQ9bQpDT05GSUdf
UlRDX0RSVl9EUzEzMDI9bQpDT05GSUdfUlRDX0RSVl9EUzEzMDU9bQpDT05GSUdfUlRDX0RS
Vl9EUzEzNDM9bQpDT05GSUdfUlRDX0RSVl9EUzEzNDc9bQpDT05GSUdfUlRDX0RSVl9EUzEz
OTA9bQpDT05GSUdfUlRDX0RSVl9NQVg2OTE2PW0KQ09ORklHX1JUQ19EUlZfUjk3MDE9bQpD
T05GSUdfUlRDX0RSVl9SWDQ1ODE9bQpDT05GSUdfUlRDX0RSVl9SUzVDMzQ4PW0KQ09ORklH
X1JUQ19EUlZfTUFYNjkwMj1tCkNPTkZJR19SVENfRFJWX1BDRjIxMjM9bQpDT05GSUdfUlRD
X0RSVl9NQ1A3OTU9bQpDT05GSUdfUlRDX0kyQ19BTkRfU1BJPXkKCiMKIyBTUEkgYW5kIEky
QyBSVEMgZHJpdmVycwojCkNPTkZJR19SVENfRFJWX0RTMzIzMj1tCkNPTkZJR19SVENfRFJW
X0RTMzIzMl9IV01PTj15CkNPTkZJR19SVENfRFJWX1BDRjIxMjc9bQpDT05GSUdfUlRDX0RS
Vl9SVjMwMjlDMj1tCkNPTkZJR19SVENfRFJWX1JWMzAyOV9IV01PTj15CkNPTkZJR19SVENf
RFJWX1JYNjExMD1tCgojCiMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RS
Vl9DTU9TPXkKQ09ORklHX1JUQ19EUlZfRFMxMjg2PW0KQ09ORklHX1JUQ19EUlZfRFMxNTEx
PW0KQ09ORklHX1JUQ19EUlZfRFMxNTUzPW0KQ09ORklHX1JUQ19EUlZfRFMxNjg1X0ZBTUlM
WT1tCkNPTkZJR19SVENfRFJWX0RTMTY4NT15CiMgQ09ORklHX1JUQ19EUlZfRFMxNjg5IGlz
IG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE3Mjg1IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE3NDg1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE3ODg1IGlz
IG5vdCBzZXQKQ09ORklHX1JUQ19EUlZfRFMxNzQyPW0KQ09ORklHX1JUQ19EUlZfRFMyNDA0
PW0KQ09ORklHX1JUQ19EUlZfREE5MDUyPW0KQ09ORklHX1JUQ19EUlZfREE5MDU1PW0KQ09O
RklHX1JUQ19EUlZfREE5MDYzPW0KQ09ORklHX1JUQ19EUlZfU1RLMTdUQTg9bQpDT05GSUdf
UlRDX0RSVl9NNDhUODY9bQpDT05GSUdfUlRDX0RSVl9NNDhUMzU9bQpDT05GSUdfUlRDX0RS
Vl9NNDhUNTk9bQpDT05GSUdfUlRDX0RSVl9NU002MjQyPW0KQ09ORklHX1JUQ19EUlZfQlE0
ODAyPW0KQ09ORklHX1JUQ19EUlZfUlA1QzAxPW0KQ09ORklHX1JUQ19EUlZfVjMwMjA9bQpD
T05GSUdfUlRDX0RSVl9XTTgzMVg9bQpDT05GSUdfUlRDX0RSVl9XTTgzNTA9bQpDT05GSUdf
UlRDX0RSVl9QQ0Y1MDYzMz1tCkNPTkZJR19SVENfRFJWX0NST1NfRUM9bQoKIwojIG9uLUNQ
VSBSVEMgZHJpdmVycwojCkNPTkZJR19SVENfRFJWX0ZUUlRDMDEwPW0KQ09ORklHX1JUQ19E
UlZfUENBUD1tCkNPTkZJR19SVENfRFJWX01DMTNYWFg9bQpDT05GSUdfUlRDX0RSVl9NVDYz
OTc9bQoKIwojIEhJRCBTZW5zb3IgUlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RSVl9ISURf
U0VOU09SX1RJTUU9bQpDT05GSUdfUlRDX0RSVl9XSUxDT19FQz1tCkNPTkZJR19ETUFERVZJ
Q0VTPXkKIyBDT05GSUdfRE1BREVWSUNFU19ERUJVRyBpcyBub3Qgc2V0CgojCiMgRE1BIERl
dmljZXMKIwpDT05GSUdfRE1BX0VOR0lORT15CkNPTkZJR19ETUFfVklSVFVBTF9DSEFOTkVM
Uz15CkNPTkZJR19ETUFfQUNQST15CkNPTkZJR19BTFRFUkFfTVNHRE1BPW0KQ09ORklHX0lO
VEVMX0lETUE2ND1tCkNPTkZJR19JTlRFTF9JRFhEPW0KQ09ORklHX0lOVEVMX0lEWERfU1ZN
PXkKQ09ORklHX0lOVEVMX0lPQVRETUE9bQpDT05GSUdfUExYX0RNQT1tCkNPTkZJR19YSUxJ
TlhfWllOUU1QX0RQRE1BPW0KQ09ORklHX1FDT01fSElETUFfTUdNVD1tCkNPTkZJR19RQ09N
X0hJRE1BPW0KQ09ORklHX0RXX0RNQUNfQ09SRT15CkNPTkZJR19EV19ETUFDPW0KQ09ORklH
X0RXX0RNQUNfUENJPXkKQ09ORklHX0RXX0VETUE9bQpDT05GSUdfRFdfRURNQV9QQ0lFPW0K
Q09ORklHX0hTVV9ETUE9eQpDT05GSUdfU0ZfUERNQT1tCkNPTkZJR19JTlRFTF9MRE1BPXkK
CiMKIyBETUEgQ2xpZW50cwojCkNPTkZJR19BU1lOQ19UWF9ETUE9eQojIENPTkZJR19ETUFU
RVNUIGlzIG5vdCBzZXQKQ09ORklHX0RNQV9FTkdJTkVfUkFJRD15CgojCiMgRE1BQlVGIG9w
dGlvbnMKIwpDT05GSUdfU1lOQ19GSUxFPXkKIyBDT05GSUdfU1dfU1lOQyBpcyBub3Qgc2V0
CkNPTkZJR19VRE1BQlVGPXkKIyBDT05GSUdfRE1BQlVGX01PVkVfTk9USUZZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRE1BQlVGX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BQlVGX1NF
TEZURVNUUyBpcyBub3Qgc2V0CkNPTkZJR19ETUFCVUZfSEVBUFM9eQpDT05GSUdfRE1BQlVG
X0hFQVBTX1NZU1RFTT15CkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXkKIyBlbmQgb2YgRE1B
QlVGIG9wdGlvbnMKCkNPTkZJR19EQ0E9bQpDT05GSUdfQVVYRElTUExBWT15CkNPTkZJR19D
SEFSTENEPW0KQ09ORklHX0hENDQ3ODBfQ09NTU9OPW0KQ09ORklHX0hENDQ3ODA9bQpDT05G
SUdfS1MwMTA4PW0KQ09ORklHX0tTMDEwOF9QT1JUPTB4Mzc4CkNPTkZJR19LUzAxMDhfREVM
QVk9MgpDT05GSUdfQ0ZBRzEyODY0Qj1tCkNPTkZJR19DRkFHMTI4NjRCX1JBVEU9MjAKQ09O
RklHX0lNR19BU0NJSV9MQ0Q9bQpDT05GSUdfTENEMlM9bQpDT05GSUdfUEFSUE9SVF9QQU5F
TD1tCkNPTkZJR19QQU5FTF9QQVJQT1JUPTAKQ09ORklHX1BBTkVMX1BST0ZJTEU9NQojIENP
TkZJR19QQU5FTF9DSEFOR0VfTUVTU0FHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJMQ0Rf
QkxfT0ZGIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkxDRF9CTF9PTiBpcyBub3Qgc2V0CkNP
TkZJR19DSEFSTENEX0JMX0ZMQVNIPXkKQ09ORklHX1BBTkVMPW0KQ09ORklHX1VJTz1tCkNP
TkZJR19VSU9fQ0lGPW0KQ09ORklHX1VJT19QRFJWX0dFTklSUT1tCkNPTkZJR19VSU9fRE1F
TV9HRU5JUlE9bQpDT05GSUdfVUlPX0FFQz1tCkNPTkZJR19VSU9fU0VSQ09TMz1tCkNPTkZJ
R19VSU9fUENJX0dFTkVSSUM9bQpDT05GSUdfVUlPX05FVFg9bQpDT05GSUdfVUlPX1BSVVNT
PW0KQ09ORklHX1VJT19NRjYyND1tCkNPTkZJR19VSU9fSFZfR0VORVJJQz1tCkNPTkZJR19W
RklPX0lPTU1VX1RZUEUxPW0KQ09ORklHX1ZGSU9fVklSUUZEPW0KQ09ORklHX1ZGSU89bQoj
IENPTkZJR19WRklPX05PSU9NTVUgaXMgbm90IHNldApDT05GSUdfVkZJT19QQ0k9bQpDT05G
SUdfVkZJT19QQ0lfVkdBPXkKQ09ORklHX1ZGSU9fUENJX01NQVA9eQpDT05GSUdfVkZJT19Q
Q0lfSU5UWD15CkNPTkZJR19WRklPX1BDSV9JR0Q9eQpDT05GSUdfVkZJT19NREVWPW0KQ09O
RklHX1ZGSU9fTURFVl9ERVZJQ0U9bQpDT05GSUdfSVJRX0JZUEFTU19NQU5BR0VSPW0KQ09O
RklHX1ZJUlRfRFJJVkVSUz15CkNPTkZJR19WQk9YR1VFU1Q9bQpDT05GSUdfTklUUk9fRU5D
TEFWRVM9bQpDT05GSUdfQUNSTl9IU009bQpDT05GSUdfVklSVElPPXkKQ09ORklHX1ZJUlRJ
T19QQ0lfTElCPW0KQ09ORklHX1ZJUlRJT19NRU5VPXkKQ09ORklHX1ZJUlRJT19QQ0k9bQpD
T05GSUdfVklSVElPX1BDSV9MRUdBQ1k9eQpDT05GSUdfVklSVElPX1ZEUEE9bQpDT05GSUdf
VklSVElPX1BNRU09bQpDT05GSUdfVklSVElPX0JBTExPT049bQpDT05GSUdfVklSVElPX01F
TT1tCkNPTkZJR19WSVJUSU9fSU5QVVQ9bQpDT05GSUdfVklSVElPX01NSU89bQpDT05GSUdf
VklSVElPX01NSU9fQ01ETElORV9ERVZJQ0VTPXkKQ09ORklHX1ZJUlRJT19ETUFfU0hBUkVE
X0JVRkZFUj1tCkNPTkZJR19WRFBBPW0KQ09ORklHX1ZEUEFfU0lNPW0KQ09ORklHX1ZEUEFf
U0lNX05FVD1tCkNPTkZJR19JRkNWRj1tCkNPTkZJR19NTFg1X1ZEUEE9eQpDT05GSUdfTUxY
NV9WRFBBX05FVD1tCkNPTkZJR19WSE9TVF9JT1RMQj1tCkNPTkZJR19WSE9TVF9SSU5HPW0K
Q09ORklHX1ZIT1NUPW0KQ09ORklHX1ZIT1NUX01FTlU9eQpDT05GSUdfVkhPU1RfTkVUPW0K
Q09ORklHX1ZIT1NUX1NDU0k9bQpDT05GSUdfVkhPU1RfVlNPQ0s9bQpDT05GSUdfVkhPU1Rf
VkRQQT1tCiMgQ09ORklHX1ZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1kgaXMgbm90IHNldAoK
IwojIE1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnQKIwpDT05GSUdfSFlQRVJWPW0K
Q09ORklHX0hZUEVSVl9USU1FUj15CkNPTkZJR19IWVBFUlZfVVRJTFM9bQpDT05GSUdfSFlQ
RVJWX0JBTExPT049bQojIGVuZCBvZiBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBzdXBwb3J0
CgojCiMgWGVuIGRyaXZlciBzdXBwb3J0CiMKQ09ORklHX1hFTl9CQUxMT09OPXkKQ09ORklH
X1hFTl9CQUxMT09OX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX1hFTl9CQUxMT09OX01FTU9S
WV9IT1RQTFVHX0xJTUlUPTUxMgpDT05GSUdfWEVOX1NDUlVCX1BBR0VTX0RFRkFVTFQ9eQpD
T05GSUdfWEVOX0RFVl9FVlRDSE49bQpDT05GSUdfWEVOX0JBQ0tFTkQ9eQpDT05GSUdfWEVO
RlM9bQpDT05GSUdfWEVOX0NPTVBBVF9YRU5GUz15CkNPTkZJR19YRU5fU1lTX0hZUEVSVklT
T1I9eQpDT05GSUdfWEVOX1hFTkJVU19GUk9OVEVORD15CkNPTkZJR19YRU5fR05UREVWPW0K
Q09ORklHX1hFTl9HTlRERVZfRE1BQlVGPXkKQ09ORklHX1hFTl9HUkFOVF9ERVZfQUxMT0M9
bQpDT05GSUdfWEVOX0dSQU5UX0RNQV9BTExPQz15CkNPTkZJR19TV0lPVExCX1hFTj15CkNP
TkZJR19YRU5fUENJREVWX0JBQ0tFTkQ9bQpDT05GSUdfWEVOX1BWQ0FMTFNfRlJPTlRFTkQ9
bQpDT05GSUdfWEVOX1BWQ0FMTFNfQkFDS0VORD15CkNPTkZJR19YRU5fU0NTSV9CQUNLRU5E
PW0KQ09ORklHX1hFTl9QUklWQ01EPW0KQ09ORklHX1hFTl9BQ1BJX1BST0NFU1NPUj1tCkNP
TkZJR19YRU5fTUNFX0xPRz15CkNPTkZJR19YRU5fSEFWRV9QVk1NVT15CkNPTkZJR19YRU5f
RUZJPXkKQ09ORklHX1hFTl9BVVRPX1hMQVRFPXkKQ09ORklHX1hFTl9BQ1BJPXkKQ09ORklH
X1hFTl9TWU1TPXkKQ09ORklHX1hFTl9IQVZFX1ZQTVU9eQpDT05GSUdfWEVOX0ZST05UX1BH
RElSX1NIQlVGPW0KQ09ORklHX1hFTl9VTlBPUFVMQVRFRF9BTExPQz15CiMgZW5kIG9mIFhl
biBkcml2ZXIgc3VwcG9ydAoKIyBDT05GSUdfR1JFWUJVUyBpcyBub3Qgc2V0CkNPTkZJR19T
VEFHSU5HPXkKQ09ORklHX1BSSVNNMl9VU0I9bQojIENPTkZJR19DT01FREkgaXMgbm90IHNl
dApDT05GSUdfUlRMODE5MlU9bQpDT05GSUdfUlRMTElCPW0KQ09ORklHX1JUTExJQl9DUllQ
VE9fQ0NNUD1tCkNPTkZJR19SVExMSUJfQ1JZUFRPX1RLSVA9bQpDT05GSUdfUlRMTElCX0NS
WVBUT19XRVA9bQpDT05GSUdfUlRMODE5MkU9bQpDT05GSUdfUlRMODcyM0JTPW0KQ09ORklH
X1I4NzEyVT1tCkNPTkZJR19SODE4OEVVPW0KQ09ORklHXzg4RVVfQVBfTU9ERT15CkNPTkZJ
R19SVFM1MjA4PW0KQ09ORklHX1ZUNjY1NT1tCkNPTkZJR19WVDY2NTY9bQoKIwojIElJTyBz
dGFnaW5nIGRyaXZlcnMKIwoKIwojIEFjY2VsZXJvbWV0ZXJzCiMKQ09ORklHX0FESVMxNjIw
Mz1tCkNPTkZJR19BRElTMTYyNDA9bQojIGVuZCBvZiBBY2NlbGVyb21ldGVycwoKIwojIEFu
YWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwpDT05GSUdfQUQ3ODE2PW0KQ09ORklHX0FE
NzI4MD1tCiMgZW5kIG9mIEFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKCiMKIyBBbmFs
b2cgZGlnaXRhbCBiaS1kaXJlY3Rpb24gY29udmVydGVycwojCkNPTkZJR19BRFQ3MzE2PW0K
Q09ORklHX0FEVDczMTZfU1BJPW0KQ09ORklHX0FEVDczMTZfSTJDPW0KIyBlbmQgb2YgQW5h
bG9nIGRpZ2l0YWwgYmktZGlyZWN0aW9uIGNvbnZlcnRlcnMKCiMKIyBDYXBhY2l0YW5jZSB0
byBkaWdpdGFsIGNvbnZlcnRlcnMKIwpDT05GSUdfQUQ3MTUwPW0KQ09ORklHX0FENzc0Nj1t
CiMgZW5kIG9mIENhcGFjaXRhbmNlIHRvIGRpZ2l0YWwgY29udmVydGVycwoKIwojIERpcmVj
dCBEaWdpdGFsIFN5bnRoZXNpcwojCkNPTkZJR19BRDk4MzI9bQpDT05GSUdfQUQ5ODM0PW0K
IyBlbmQgb2YgRGlyZWN0IERpZ2l0YWwgU3ludGhlc2lzCgojCiMgTmV0d29yayBBbmFseXpl
ciwgSW1wZWRhbmNlIENvbnZlcnRlcnMKIwpDT05GSUdfQUQ1OTMzPW0KIyBlbmQgb2YgTmV0
d29yayBBbmFseXplciwgSW1wZWRhbmNlIENvbnZlcnRlcnMKCiMKIyBBY3RpdmUgZW5lcmd5
IG1ldGVyaW5nIElDCiMKQ09ORklHX0FERTc4NTQ9bQpDT05GSUdfQURFNzg1NF9JMkM9bQpD
T05GSUdfQURFNzg1NF9TUEk9bQojIGVuZCBvZiBBY3RpdmUgZW5lcmd5IG1ldGVyaW5nIElD
CgojCiMgUmVzb2x2ZXIgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKQ09ORklHX0FEMlMxMjEw
PW0KIyBlbmQgb2YgUmVzb2x2ZXIgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMgZW5kIG9mIElJ
TyBzdGFnaW5nIGRyaXZlcnMKCiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBzZXQKQ09ORklH
X1NUQUdJTkdfTUVESUE9eQpDT05GSUdfSU5URUxfQVRPTUlTUD15CkNPTkZJR19WSURFT19B
VE9NSVNQPW0KQ09ORklHX1ZJREVPX0FUT01JU1BfSVNQMjQwMT15CkNPTkZJR19WSURFT19B
VE9NSVNQX09WMjcyMj1tCkNPTkZJR19WSURFT19BVE9NSVNQX0dDMjIzNT1tCkNPTkZJR19W
SURFT19BVE9NSVNQX01TUkxJU1RfSEVMUEVSPW0KQ09ORklHX1ZJREVPX0FUT01JU1BfTVQ5
TTExND1tCkNPTkZJR19WSURFT19BVE9NSVNQX0dDMDMxMD1tCkNPTkZJR19WSURFT19BVE9N
SVNQX09WMjY4MD1tCkNPTkZJR19WSURFT19BVE9NSVNQX09WNTY5Mz1tCkNPTkZJR19WSURF
T19BVE9NSVNQX0xNMzU1ND1tCiMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5vdCBzZXQKQ09O
RklHX1ZJREVPX0lQVTNfSU1HVT1tCgojCiMgQW5kcm9pZAojCiMgZW5kIG9mIEFuZHJvaWQK
CkNPTkZJR19MVEVfR0RNNzI0WD1tCkNPTkZJR19GSVJFV0lSRV9TRVJJQUw9bQpDT05GSUdf
RldUVFlfTUFYX1RPVEFMX1BPUlRTPTY0CkNPTkZJR19GV1RUWV9NQVhfQ0FSRF9QT1JUUz0z
MgpDT05GSUdfR1NfRlBHQUJPT1Q9bQpDT05GSUdfVU5JU1lTU1BBUj15CkNPTkZJR19VTklT
WVNfVklTT1JOSUM9bQpDT05GSUdfVU5JU1lTX1ZJU09SSU5QVVQ9bQpDT05GSUdfVU5JU1lT
X1ZJU09SSEJBPW0KIyBDT05GSUdfRkJfVEZUIGlzIG5vdCBzZXQKQ09ORklHX01PU1RfQ09N
UE9ORU5UUz1tCkNPTkZJR19NT1NUX05FVD1tCkNPTkZJR19NT1NUX1NPVU5EPW0KQ09ORklH
X01PU1RfVklERU89bQpDT05GSUdfTU9TVF9JMkM9bQpDT05GSUdfS1M3MDEwPW0KQ09ORklH
X1BJNDMzPW0KCiMKIyBHYXNrZXQgZGV2aWNlcwojCkNPTkZJR19TVEFHSU5HX0dBU0tFVF9G
UkFNRVdPUks9bQpDT05GSUdfU1RBR0lOR19BUEVYX0RSSVZFUj1tCiMgZW5kIG9mIEdhc2tl
dCBkZXZpY2VzCgpDT05GSUdfRklFTERCVVNfREVWPW0KQ09ORklHX0tQQzIwMDA9eQpDT05G
SUdfS1BDMjAwMF9DT1JFPW0KQ09ORklHX0tQQzIwMDBfU1BJPW0KQ09ORklHX0tQQzIwMDBf
STJDPW0KQ09ORklHX0tQQzIwMDBfRE1BPW0KQ09ORklHX1FMR0U9bQpDT05GSUdfV0lNQVg9
bQpDT05GSUdfV0lNQVhfREVCVUdfTEVWRUw9OApDT05GSUdfV0lNQVhfSTI0MDBNPW0KQ09O
RklHX1dJTUFYX0kyNDAwTV9VU0I9bQpDT05GSUdfV0lNQVhfSTI0MDBNX0RFQlVHX0xFVkVM
PTgKQ09ORklHX1dGWD1tCkNPTkZJR19YODZfUExBVEZPUk1fREVWSUNFUz15CkNPTkZJR19B
Q1BJX1dNST1tCkNPTkZJR19XTUlfQk1PRj1tCkNPTkZJR19IVUFXRUlfV01JPW0KQ09ORklH
X0lOVEVMX1dNSV9TQkxfRldfVVBEQVRFPW0KQ09ORklHX0lOVEVMX1dNSV9USFVOREVSQk9M
VD1tCkNPTkZJR19NWE1fV01JPW0KQ09ORklHX1BFQVFfV01JPW0KQ09ORklHX1hJQU9NSV9X
TUk9bQpDT05GSUdfQUNFUkhERj1tCkNPTkZJR19BQ0VSX1dJUkVMRVNTPW0KQ09ORklHX0FD
RVJfV01JPW0KQ09ORklHX0FNRF9QTUM9bQpDT05GSUdfQVBQTEVfR01VWD1tCkNPTkZJR19B
U1VTX0xBUFRPUD1tCkNPTkZJR19BU1VTX1dJUkVMRVNTPW0KQ09ORklHX0FTVVNfV01JPW0K
Q09ORklHX0FTVVNfTkJfV01JPW0KQ09ORklHX0VFRVBDX0xBUFRPUD1tCkNPTkZJR19FRUVQ
Q19XTUk9bQpDT05GSUdfWDg2X1BMQVRGT1JNX0RSSVZFUlNfREVMTD15CkNPTkZJR19BTElF
TldBUkVfV01JPW0KQ09ORklHX0RDREJBUz1tCkNPTkZJR19ERUxMX0xBUFRPUD1tCiMgQ09O
RklHX0RFTExfUkJVIGlzIG5vdCBzZXQKQ09ORklHX0RFTExfUkJUTj1tCkNPTkZJR19ERUxM
X1NNQklPUz1tCkNPTkZJR19ERUxMX1NNQklPU19XTUk9eQpDT05GSUdfREVMTF9TTUJJT1Nf
U01NPXkKQ09ORklHX0RFTExfU01PODgwMD1tCkNPTkZJR19ERUxMX1dNST1tCkNPTkZJR19E
RUxMX1dNSV9BSU89bQpDT05GSUdfREVMTF9XTUlfREVTQ1JJUFRPUj1tCkNPTkZJR19ERUxM
X1dNSV9MRUQ9bQpDT05GSUdfREVMTF9XTUlfU1lTTUFOPW0KQ09ORklHX0FNSUxPX1JGS0lM
TD1tCkNPTkZJR19GVUpJVFNVX0xBUFRPUD1tCkNPTkZJR19GVUpJVFNVX1RBQkxFVD1tCkNP
TkZJR19HUERfUE9DS0VUX0ZBTj1tCkNPTkZJR19IUF9BQ0NFTD1tCkNPTkZJR19IUF9XSVJF
TEVTUz1tCkNPTkZJR19IUF9XTUk9bQpDT05GSUdfSUJNX1JUTD1tCkNPTkZJR19JREVBUEFE
X0xBUFRPUD1tCkNPTkZJR19TRU5TT1JTX0hEQVBTPW0KQ09ORklHX1RISU5LUEFEX0FDUEk9
bQpDT05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQ9eQojIENPTkZJR19USElOS1BB
RF9BQ1BJX0RFQlVHRkFDSUxJVElFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RISU5LUEFEX0FD
UElfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURT
IGlzIG5vdCBzZXQKQ09ORklHX1RISU5LUEFEX0FDUElfVklERU89eQpDT05GSUdfVEhJTktQ
QURfQUNQSV9IT1RLRVlfUE9MTD15CkNPTkZJR19JTlRFTF9BVE9NSVNQMl9MRUQ9bQpDT05G
SUdfSU5URUxfQ0hUX0lOVDMzRkU9bQpDT05GSUdfSU5URUxfSElEX0VWRU5UPW0KQ09ORklH
X0lOVEVMX0lOVDAwMDJfVkdQSU89bQpDT05GSUdfSU5URUxfTUVOTE9XPW0KQ09ORklHX0lO
VEVMX09BS1RSQUlMPW0KQ09ORklHX0lOVEVMX1ZCVE49bQpDT05GSUdfTVNJX0xBUFRPUD1t
CkNPTkZJR19NU0lfV01JPW0KQ09ORklHX1BDRU5HSU5FU19BUFUyPW0KQ09ORklHX1NBTVNV
TkdfTEFQVE9QPW0KQ09ORklHX1NBTVNVTkdfUTEwPW0KQ09ORklHX0FDUElfVE9TSElCQT1t
CkNPTkZJR19UT1NISUJBX0JUX1JGS0lMTD1tCkNPTkZJR19UT1NISUJBX0hBUFM9bQpDT05G
SUdfVE9TSElCQV9XTUk9bQpDT05GSUdfQUNQSV9DTVBDPW0KQ09ORklHX0NPTVBBTF9MQVBU
T1A9bQpDT05GSUdfTEdfTEFQVE9QPW0KQ09ORklHX1BBTkFTT05JQ19MQVBUT1A9bQpDT05G
SUdfU09OWV9MQVBUT1A9bQpDT05GSUdfU09OWVBJX0NPTVBBVD15CkNPTkZJR19TWVNURU03
Nl9BQ1BJPW0KQ09ORklHX1RPUFNUQVJfTEFQVE9QPW0KQ09ORklHX0kyQ19NVUxUSV9JTlNU
QU5USUFURT1tCkNPTkZJR19NTFhfUExBVEZPUk09bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRE1J
PXkKQ09ORklHX0lOVEVMX0lQUz1tCkNPTkZJR19JTlRFTF9SU1Q9bQpDT05GSUdfSU5URUxf
U01BUlRDT05ORUNUPW0KCiMKIyBJbnRlbCBTcGVlZCBTZWxlY3QgVGVjaG5vbG9neSBpbnRl
cmZhY2Ugc3VwcG9ydAojCkNPTkZJR19JTlRFTF9TUEVFRF9TRUxFQ1RfSU5URVJGQUNFPW0K
IyBlbmQgb2YgSW50ZWwgU3BlZWQgU2VsZWN0IFRlY2hub2xvZ3kgaW50ZXJmYWNlIHN1cHBv
cnQKCkNPTkZJR19JTlRFTF9UVVJCT19NQVhfMz15CkNPTkZJR19JTlRFTF9VTkNPUkVfRlJF
UV9DT05UUk9MPW0KQ09ORklHX0lOVEVMX0JYVFdDX1BNSUNfVE1VPW0KQ09ORklHX0lOVEVM
X0NIVERDX1RJX1BXUkJUTj1tCkNPTkZJR19JTlRFTF9NUkZMRF9QV1JCVE49bQpDT05GSUdf
SU5URUxfUE1DX0NPUkU9eQpDT05GSUdfSU5URUxfUE1UX0NMQVNTPW0KQ09ORklHX0lOVEVM
X1BNVF9URUxFTUVUUlk9bQpDT05GSUdfSU5URUxfUE1UX0NSQVNITE9HPW0KQ09ORklHX0lO
VEVMX1BVTklUX0lQQz1tCkNPTkZJR19JTlRFTF9TQ1VfSVBDPXkKQ09ORklHX0lOVEVMX1ND
VT15CkNPTkZJR19JTlRFTF9TQ1VfUENJPXkKQ09ORklHX0lOVEVMX1NDVV9QTEFURk9STT1t
CkNPTkZJR19JTlRFTF9TQ1VfSVBDX1VUSUw9bQpDT05GSUdfSU5URUxfVEVMRU1FVFJZPW0K
Q09ORklHX1BNQ19BVE9NPXkKQ09ORklHX0NIUk9NRV9QTEFURk9STVM9eQpDT05GSUdfQ0hS
T01FT1NfTEFQVE9QPW0KQ09ORklHX0NIUk9NRU9TX1BTVE9SRT1tCkNPTkZJR19DSFJPTUVP
U19UQk1DPW0KQ09ORklHX0NST1NfRUM9bQpDT05GSUdfQ1JPU19FQ19JMkM9bQpDT05GSUdf
Q1JPU19FQ19JU0hUUD1tCkNPTkZJR19DUk9TX0VDX1NQST1tCkNPTkZJR19DUk9TX0VDX0xQ
Qz1tCkNPTkZJR19DUk9TX0VDX1BST1RPPXkKQ09ORklHX0NST1NfS0JEX0xFRF9CQUNLTElH
SFQ9bQpDT05GSUdfQ1JPU19FQ19DSEFSREVWPW0KQ09ORklHX0NST1NfRUNfTElHSFRCQVI9
bQpDT05GSUdfQ1JPU19FQ19ERUJVR0ZTPW0KQ09ORklHX0NST1NfRUNfU0VOU09SSFVCPW0K
Q09ORklHX0NST1NfRUNfU1lTRlM9bQpDT05GSUdfQ1JPU19FQ19UWVBFQz1tCkNPTkZJR19D
Uk9TX1VTQlBEX0xPR0dFUj1tCkNPTkZJR19DUk9TX1VTQlBEX05PVElGWT1tCkNPTkZJR19X
SUxDT19FQz1tCkNPTkZJR19XSUxDT19FQ19ERUJVR0ZTPW0KQ09ORklHX1dJTENPX0VDX0VW
RU5UUz1tCkNPTkZJR19XSUxDT19FQ19URUxFTUVUUlk9bQpDT05GSUdfTUVMTEFOT1hfUExB
VEZPUk09eQpDT05GSUdfTUxYUkVHX0hPVFBMVUc9bQpDT05GSUdfTUxYUkVHX0lPPW0KQ09O
RklHX1NVUkZBQ0VfUExBVEZPUk1TPXkKQ09ORklHX1NVUkZBQ0UzX1dNST1tCkNPTkZJR19T
VVJGQUNFXzNfQlVUVE9OPW0KQ09ORklHX1NVUkZBQ0VfM19QT1dFUl9PUFJFR0lPTj1tCkNP
TkZJR19TVVJGQUNFX0FDUElfTk9USUZZPW0KQ09ORklHX1NVUkZBQ0VfQUdHUkVHQVRPUl9D
REVWPW0KQ09ORklHX1NVUkZBQ0VfR1BFPW0KQ09ORklHX1NVUkZBQ0VfSE9UUExVRz1tCkNP
TkZJR19TVVJGQUNFX1BSTzNfQlVUVE9OPW0KQ09ORklHX1NVUkZBQ0VfQUdHUkVHQVRPUj1t
CkNPTkZJR19TVVJGQUNFX0FHR1JFR0FUT1JfQlVTPXkKIyBDT05GSUdfU1VSRkFDRV9BR0dS
RUdBVE9SX0VSUk9SX0lOSkVDVElPTiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0NMSz15CkNP
TkZJR19DTEtERVZfTE9PS1VQPXkKQ09ORklHX0hBVkVfQ0xLX1BSRVBBUkU9eQpDT05GSUdf
Q09NTU9OX0NMSz15CkNPTkZJR19DT01NT05fQ0xLX1dNODMxWD1tCkNPTkZJR19DT01NT05f
Q0xLX01BWDk0ODU9bQpDT05GSUdfQ09NTU9OX0NMS19TSTUzNDE9bQpDT05GSUdfQ09NTU9O
X0NMS19TSTUzNTE9bQpDT05GSUdfQ09NTU9OX0NMS19TSTU0ND1tCkNPTkZJR19DT01NT05f
Q0xLX0NEQ0U3MDY9bQpDT05GSUdfQ09NTU9OX0NMS19DUzIwMDBfQ1A9bQpDT05GSUdfQ09N
TU9OX0NMS19TMk1QUzExPW0KQ09ORklHX0NMS19UV0w2MDQwPW0KQ09ORklHX0NPTU1PTl9D
TEtfUEFMTUFTPW0KQ09ORklHX0NPTU1PTl9DTEtfUFdNPW0KQ09ORklHX1hJTElOWF9WQ1U9
bQpDT05GSUdfSFdTUElOTE9DSz15CgojCiMgQ2xvY2sgU291cmNlIGRyaXZlcnMKIwpDT05G
SUdfQ0xLRVZUX0k4MjUzPXkKQ09ORklHX0k4MjUzX0xPQ0s9eQpDT05GSUdfQ0xLQkxEX0k4
MjUzPXkKIyBlbmQgb2YgQ2xvY2sgU291cmNlIGRyaXZlcnMKCkNPTkZJR19NQUlMQk9YPXkK
Q09ORklHX1BDQz15CkNPTkZJR19BTFRFUkFfTUJPWD1tCkNPTkZJR19JT01NVV9JT1ZBPXkK
Q09ORklHX0lPQVNJRD15CkNPTkZJR19JT01NVV9BUEk9eQpDT05GSUdfSU9NTVVfU1VQUE9S
VD15CgojCiMgR2VuZXJpYyBJT01NVSBQYWdldGFibGUgU3VwcG9ydAojCkNPTkZJR19JT01N
VV9JT19QR1RBQkxFPXkKIyBlbmQgb2YgR2VuZXJpYyBJT01NVSBQYWdldGFibGUgU3VwcG9y
dAoKIyBDT05GSUdfSU9NTVVfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lPTU1VX0RF
RkFVTFRfUEFTU1RIUk9VR0ggaXMgbm90IHNldApDT05GSUdfSU9NTVVfRE1BPXkKQ09ORklH
X0FNRF9JT01NVT15CkNPTkZJR19BTURfSU9NTVVfVjI9eQpDT05GSUdfRE1BUl9UQUJMRT15
CkNPTkZJR19JTlRFTF9JT01NVT15CkNPTkZJR19JTlRFTF9JT01NVV9TVk09eQojIENPTkZJ
R19JTlRFTF9JT01NVV9ERUZBVUxUX09OIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVMX0lPTU1V
X0ZMT1BQWV9XQT15CkNPTkZJR19JTlRFTF9JT01NVV9TQ0FMQUJMRV9NT0RFX0RFRkFVTFRf
T049eQpDT05GSUdfSVJRX1JFTUFQPXkKQ09ORklHX0hZUEVSVl9JT01NVT15CgojCiMgUmVt
b3RlcHJvYyBkcml2ZXJzCiMKQ09ORklHX1JFTU9URVBST0M9eQpDT05GSUdfUkVNT1RFUFJP
Q19DREVWPXkKIyBlbmQgb2YgUmVtb3RlcHJvYyBkcml2ZXJzCgojCiMgUnBtc2cgZHJpdmVy
cwojCkNPTkZJR19SUE1TRz1tCkNPTkZJR19SUE1TR19DSEFSPW0KQ09ORklHX1JQTVNHX05T
PW0KQ09ORklHX1JQTVNHX1FDT01fR0xJTks9bQpDT05GSUdfUlBNU0dfUUNPTV9HTElOS19S
UE09bQpDT05GSUdfUlBNU0dfVklSVElPPW0KIyBlbmQgb2YgUnBtc2cgZHJpdmVycwoKQ09O
RklHX1NPVU5EV0lSRT1tCgojCiMgU291bmRXaXJlIERldmljZXMKIwpDT05GSUdfU09VTkRX
SVJFX0NBREVOQ0U9bQpDT05GSUdfU09VTkRXSVJFX0lOVEVMPW0KQ09ORklHX1NPVU5EV0lS
RV9RQ09NPW0KQ09ORklHX1NPVU5EV0lSRV9HRU5FUklDX0FMTE9DQVRJT049bQoKIwojIFNP
QyAoU3lzdGVtIE9uIENoaXApIHNwZWNpZmljIERyaXZlcnMKIwoKIwojIEFtbG9naWMgU29D
IGRyaXZlcnMKIwojIGVuZCBvZiBBbWxvZ2ljIFNvQyBkcml2ZXJzCgojCiMgQnJvYWRjb20g
U29DIGRyaXZlcnMKIwojIGVuZCBvZiBCcm9hZGNvbSBTb0MgZHJpdmVycwoKIwojIE5YUC9G
cmVlc2NhbGUgUW9ySVEgU29DIGRyaXZlcnMKIwojIGVuZCBvZiBOWFAvRnJlZXNjYWxlIFFv
cklRIFNvQyBkcml2ZXJzCgojCiMgaS5NWCBTb0MgZHJpdmVycwojCiMgZW5kIG9mIGkuTVgg
U29DIGRyaXZlcnMKCiMKIyBFbmFibGUgTGl0ZVggU29DIEJ1aWxkZXIgc3BlY2lmaWMgZHJp
dmVycwojCiMgZW5kIG9mIEVuYWJsZSBMaXRlWCBTb0MgQnVpbGRlciBzcGVjaWZpYyBkcml2
ZXJzCgojCiMgUXVhbGNvbW0gU29DIGRyaXZlcnMKIwpDT05GSUdfUUNPTV9RTUlfSEVMUEVS
Uz1tCiMgZW5kIG9mIFF1YWxjb21tIFNvQyBkcml2ZXJzCgpDT05GSUdfU09DX1RJPXkKCiMK
IyBYaWxpbnggU29DIGRyaXZlcnMKIwojIGVuZCBvZiBYaWxpbnggU29DIGRyaXZlcnMKIyBl
bmQgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkgc3BlY2lmaWMgRHJpdmVycwoKQ09ORklHX1BN
X0RFVkZSRVE9eQoKIwojIERFVkZSRVEgR292ZXJub3JzCiMKQ09ORklHX0RFVkZSRVFfR09W
X1NJTVBMRV9PTkRFTUFORD1tCkNPTkZJR19ERVZGUkVRX0dPVl9QRVJGT1JNQU5DRT1tCkNP
TkZJR19ERVZGUkVRX0dPVl9QT1dFUlNBVkU9bQpDT05GSUdfREVWRlJFUV9HT1ZfVVNFUlNQ
QUNFPW0KQ09ORklHX0RFVkZSRVFfR09WX1BBU1NJVkU9bQoKIwojIERFVkZSRVEgRHJpdmVy
cwojCkNPTkZJR19QTV9ERVZGUkVRX0VWRU5UPXkKQ09ORklHX0VYVENPTj15CgojCiMgRXh0
Y29uIERldmljZSBEcml2ZXJzCiMKQ09ORklHX0VYVENPTl9BRENfSkFDSz1tCkNPTkZJR19F
WFRDT05fQVJJWk9OQT1tCkNPTkZJR19FWFRDT05fQVhQMjg4PW0KQ09ORklHX0VYVENPTl9G
U0E5NDgwPW0KQ09ORklHX0VYVENPTl9HUElPPW0KQ09ORklHX0VYVENPTl9JTlRFTF9JTlQz
NDk2PW0KQ09ORklHX0VYVENPTl9JTlRFTF9DSFRfV0M9bQpDT05GSUdfRVhUQ09OX0lOVEVM
X01SRkxEPW0KQ09ORklHX0VYVENPTl9NQVgxNDU3Nz1tCkNPTkZJR19FWFRDT05fTUFYMzM1
NT1tCkNPTkZJR19FWFRDT05fTUFYNzc2OTM9bQpDT05GSUdfRVhUQ09OX01BWDc3ODQzPW0K
Q09ORklHX0VYVENPTl9NQVg4OTk3PW0KQ09ORklHX0VYVENPTl9QQUxNQVM9bQpDT05GSUdf
RVhUQ09OX1BUTjUxNTA9bQpDT05GSUdfRVhUQ09OX1JUODk3M0E9bQpDT05GSUdfRVhUQ09O
X1NNNTUwMj1tCkNPTkZJR19FWFRDT05fVVNCX0dQSU89bQpDT05GSUdfRVhUQ09OX1VTQkNf
Q1JPU19FQz1tCkNPTkZJR19FWFRDT05fVVNCQ19UVVNCMzIwPW0KQ09ORklHX01FTU9SWT15
CkNPTkZJR19GUEdBX0RGTF9FTUlGPW0KQ09ORklHX0lJTz1tCkNPTkZJR19JSU9fQlVGRkVS
PXkKQ09ORklHX0lJT19CVUZGRVJfQ0I9bQpDT05GSUdfSUlPX0JVRkZFUl9ETUE9bQpDT05G
SUdfSUlPX0JVRkZFUl9ETUFFTkdJTkU9bQpDT05GSUdfSUlPX0JVRkZFUl9IV19DT05TVU1F
Uj1tCkNPTkZJR19JSU9fS0ZJRk9fQlVGPW0KQ09ORklHX0lJT19UUklHR0VSRURfQlVGRkVS
PW0KQ09ORklHX0lJT19DT05GSUdGUz1tCkNPTkZJR19JSU9fVFJJR0dFUj15CkNPTkZJR19J
SU9fQ09OU1VNRVJTX1BFUl9UUklHR0VSPTIKQ09ORklHX0lJT19TV19ERVZJQ0U9bQpDT05G
SUdfSUlPX1NXX1RSSUdHRVI9bQpDT05GSUdfSUlPX1RSSUdHRVJFRF9FVkVOVD1tCgojCiMg
QWNjZWxlcm9tZXRlcnMKIwpDT05GSUdfQURJUzE2MjAxPW0KQ09ORklHX0FESVMxNjIwOT1t
CkNPTkZJR19BRFhMMzcyPW0KQ09ORklHX0FEWEwzNzJfU1BJPW0KQ09ORklHX0FEWEwzNzJf
STJDPW0KQ09ORklHX0JNQTIyMD1tCkNPTkZJR19CTUE0MDA9bQpDT05GSUdfQk1BNDAwX0ky
Qz1tCkNPTkZJR19CTUE0MDBfU1BJPW0KQ09ORklHX0JNQzE1MF9BQ0NFTD1tCkNPTkZJR19C
TUMxNTBfQUNDRUxfSTJDPW0KQ09ORklHX0JNQzE1MF9BQ0NFTF9TUEk9bQpDT05GSUdfREEy
ODA9bQpDT05GSUdfREEzMTE9bQpDT05GSUdfRE1BUkQwOT1tCkNPTkZJR19ETUFSRDEwPW0K
Q09ORklHX0hJRF9TRU5TT1JfQUNDRUxfM0Q9bQpDT05GSUdfSUlPX0NST1NfRUNfQUNDRUxf
TEVHQUNZPW0KQ09ORklHX0lJT19TVF9BQ0NFTF8zQVhJUz1tCkNPTkZJR19JSU9fU1RfQUND
RUxfSTJDXzNBWElTPW0KQ09ORklHX0lJT19TVF9BQ0NFTF9TUElfM0FYSVM9bQpDT05GSUdf
S1hTRDk9bQpDT05GSUdfS1hTRDlfU1BJPW0KQ09ORklHX0tYU0Q5X0kyQz1tCkNPTkZJR19L
WENKSzEwMTM9bQpDT05GSUdfTUMzMjMwPW0KQ09ORklHX01NQTc0NTU9bQpDT05GSUdfTU1B
NzQ1NV9JMkM9bQpDT05GSUdfTU1BNzQ1NV9TUEk9bQpDT05GSUdfTU1BNzY2MD1tCkNPTkZJ
R19NTUE4NDUyPW0KQ09ORklHX01NQTk1NTFfQ09SRT1tCkNPTkZJR19NTUE5NTUxPW0KQ09O
RklHX01NQTk1NTM9bQpDT05GSUdfTVhDNDAwNT1tCkNPTkZJR19NWEM2MjU1PW0KQ09ORklH
X1NDQTMwMDA9bQpDT05GSUdfU1RLODMxMj1tCkNPTkZJR19TVEs4QkE1MD1tCiMgZW5kIG9m
IEFjY2VsZXJvbWV0ZXJzCgojCiMgQW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVycwojCkNP
TkZJR19BRF9TSUdNQV9ERUxUQT1tCkNPTkZJR19BRDcwOTFSNT1tCkNPTkZJR19BRDcxMjQ9
bQpDT05GSUdfQUQ3MTkyPW0KQ09ORklHX0FENzI2Nj1tCkNPTkZJR19BRDcyOTE9bQpDT05G
SUdfQUQ3MjkyPW0KQ09ORklHX0FENzI5OD1tCkNPTkZJR19BRDc0NzY9bQpDT05GSUdfQUQ3
NjA2PW0KQ09ORklHX0FENzYwNl9JRkFDRV9QQVJBTExFTD1tCkNPTkZJR19BRDc2MDZfSUZB
Q0VfU1BJPW0KQ09ORklHX0FENzc2Nj1tCkNPTkZJR19BRDc3NjhfMT1tCkNPTkZJR19BRDc3
ODA9bQpDT05GSUdfQUQ3NzkxPW0KQ09ORklHX0FENzc5Mz1tCkNPTkZJR19BRDc4ODc9bQpD
T05GSUdfQUQ3OTIzPW0KQ09ORklHX0FENzk0OT1tCkNPTkZJR19BRDc5OVg9bQojIENPTkZJ
R19BRDk0NjcgaXMgbm90IHNldAojIENPTkZJR19BRElfQVhJX0FEQyBpcyBub3Qgc2V0CkNP
TkZJR19BWFAyMFhfQURDPW0KQ09ORklHX0FYUDI4OF9BREM9bQpDT05GSUdfQ0MxMDAwMV9B
REM9bQpDT05GSUdfREE5MTUwX0dQQURDPW0KQ09ORklHX0RMTjJfQURDPW0KQ09ORklHX0hJ
ODQzNT1tCkNPTkZJR19IWDcxMT1tCkNPTkZJR19JTkEyWFhfQURDPW0KQ09ORklHX0lOVEVM
X01SRkxEX0FEQz1tCkNPTkZJR19MUDg3ODhfQURDPW0KQ09ORklHX0xUQzI0NzE9bQpDT05G
SUdfTFRDMjQ4NT1tCkNPTkZJR19MVEMyNDk2PW0KQ09ORklHX0xUQzI0OTc9bQpDT05GSUdf
TUFYMTAyNz1tCkNPTkZJR19NQVgxMTEwMD1tCkNPTkZJR19NQVgxMTE4PW0KQ09ORklHX01B
WDEyNDE9bQpDT05GSUdfTUFYMTM2Mz1tCkNPTkZJR19NQVg5NjExPW0KQ09ORklHX01DUDMy
MFg9bQpDT05GSUdfTUNQMzQyMj1tCkNPTkZJR19NQ1AzOTExPW0KQ09ORklHX01FRElBVEVL
X01UNjM2MF9BREM9bQpDT05GSUdfTUVOX1oxODhfQURDPW0KQ09ORklHX01QMjYyOV9BREM9
bQpDT05GSUdfTkFVNzgwMj1tCkNPTkZJR19QQUxNQVNfR1BBREM9bQpDT05GSUdfVElfQURD
MDgxQz1tCkNPTkZJR19USV9BREMwODMyPW0KQ09ORklHX1RJX0FEQzA4NFMwMjE9bQpDT05G
SUdfVElfQURDMTIxMzg9bQpDT05GSUdfVElfQURDMTA4UzEwMj1tCkNPTkZJR19USV9BREMx
MjhTMDUyPW0KQ09ORklHX1RJX0FEQzE2MVM2MjY9bQpDT05GSUdfVElfQURTMTAxNT1tCkNP
TkZJR19USV9BRFM3OTUwPW0KQ09ORklHX1RJX0FNMzM1WF9BREM9bQpDT05GSUdfVElfVExD
NDU0MT1tCkNPTkZJR19UV0w0MDMwX01BREM9bQpDT05GSUdfVFdMNjAzMF9HUEFEQz1tCkNP
TkZJR19WSVBFUkJPQVJEX0FEQz1tCkNPTkZJR19YSUxJTlhfWEFEQz1tCiMgZW5kIG9mIEFu
YWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKCiMKIyBBbmFsb2cgRnJvbnQgRW5kcwojCiMg
ZW5kIG9mIEFuYWxvZyBGcm9udCBFbmRzCgojCiMgQW1wbGlmaWVycwojCkNPTkZJR19BRDgz
NjY9bQpDT05GSUdfSE1DNDI1PW0KIyBlbmQgb2YgQW1wbGlmaWVycwoKIwojIENoZW1pY2Fs
IFNlbnNvcnMKIwpDT05GSUdfQVRMQVNfUEhfU0VOU09SPW0KQ09ORklHX0FUTEFTX0VaT19T
RU5TT1I9bQpDT05GSUdfQk1FNjgwPW0KQ09ORklHX0JNRTY4MF9JMkM9bQpDT05GSUdfQk1F
NjgwX1NQST1tCkNPTkZJR19DQ1M4MTE9bQpDT05GSUdfSUFRQ09SRT1tCkNPTkZJR19QTVM3
MDAzPW0KQ09ORklHX1NDRDMwX0NPUkU9bQpDT05GSUdfU0NEMzBfSTJDPW0KQ09ORklHX1ND
RDMwX1NFUklBTD1tCkNPTkZJR19TRU5TSVJJT05fU0dQMzA9bQpDT05GSUdfU1BTMzA9bQpD
T05GSUdfVlo4OVg9bQojIGVuZCBvZiBDaGVtaWNhbCBTZW5zb3JzCgpDT05GSUdfSUlPX0NS
T1NfRUNfU0VOU09SU19DT1JFPW0KQ09ORklHX0lJT19DUk9TX0VDX1NFTlNPUlM9bQpDT05G
SUdfSUlPX0NST1NfRUNfU0VOU09SU19MSURfQU5HTEU9bQoKIwojIEhpZCBTZW5zb3IgSUlP
IENvbW1vbgojCkNPTkZJR19ISURfU0VOU09SX0lJT19DT01NT049bQpDT05GSUdfSElEX1NF
TlNPUl9JSU9fVFJJR0dFUj1tCiMgZW5kIG9mIEhpZCBTZW5zb3IgSUlPIENvbW1vbgoKQ09O
RklHX0lJT19NU19TRU5TT1JTX0kyQz1tCgojCiMgU1NQIFNlbnNvciBDb21tb24KIwpDT05G
SUdfSUlPX1NTUF9TRU5TT1JTX0NPTU1PTlM9bQpDT05GSUdfSUlPX1NTUF9TRU5TT1JIVUI9
bQojIGVuZCBvZiBTU1AgU2Vuc29yIENvbW1vbgoKQ09ORklHX0lJT19TVF9TRU5TT1JTX0ky
Qz1tCkNPTkZJR19JSU9fU1RfU0VOU09SU19TUEk9bQpDT05GSUdfSUlPX1NUX1NFTlNPUlNf
Q09SRT1tCgojCiMgRGlnaXRhbCB0byBhbmFsb2cgY29udmVydGVycwojCkNPTkZJR19BRDUw
NjQ9bQpDT05GSUdfQUQ1MzYwPW0KQ09ORklHX0FENTM4MD1tCkNPTkZJR19BRDU0MjE9bQpD
T05GSUdfQUQ1NDQ2PW0KQ09ORklHX0FENTQ0OT1tCkNPTkZJR19BRDU1OTJSX0JBU0U9bQpD
T05GSUdfQUQ1NTkyUj1tCkNPTkZJR19BRDU1OTNSPW0KQ09ORklHX0FENTUwND1tCkNPTkZJ
R19BRDU2MjRSX1NQST1tCkNPTkZJR19BRDU2ODY9bQpDT05GSUdfQUQ1Njg2X1NQST1tCkNP
TkZJR19BRDU2OTZfSTJDPW0KQ09ORklHX0FENTc1NT1tCkNPTkZJR19BRDU3NTg9bQpDT05G
SUdfQUQ1NzYxPW0KQ09ORklHX0FENTc2ND1tCkNPTkZJR19BRDU3NjY9bQpDT05GSUdfQUQ1
NzcwUj1tCkNPTkZJR19BRDU3OTE9bQpDT05GSUdfQUQ3MzAzPW0KQ09ORklHX0FEODgwMT1t
CkNPTkZJR19EUzQ0MjQ9bQpDT05GSUdfTFRDMTY2MD1tCkNPTkZJR19MVEMyNjMyPW0KQ09O
RklHX002MjMzMj1tCkNPTkZJR19NQVg1MTc9bQpDT05GSUdfTUNQNDcyNT1tCkNPTkZJR19N
Q1A0OTIyPW0KQ09ORklHX1RJX0RBQzA4MlMwODU9bQpDT05GSUdfVElfREFDNTU3MT1tCkNP
TkZJR19USV9EQUM3MzExPW0KQ09ORklHX1RJX0RBQzc2MTI9bQojIGVuZCBvZiBEaWdpdGFs
IHRvIGFuYWxvZyBjb252ZXJ0ZXJzCgojCiMgSUlPIGR1bW15IGRyaXZlcgojCiMgQ09ORklH
X0lJT19TSU1QTEVfRFVNTVkgaXMgbm90IHNldAojIGVuZCBvZiBJSU8gZHVtbXkgZHJpdmVy
CgojCiMgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCiMKCiMKIyBDbG9jayBHZW5l
cmF0b3IvRGlzdHJpYnV0aW9uCiMKQ09ORklHX0FEOTUyMz1tCiMgZW5kIG9mIENsb2NrIEdl
bmVyYXRvci9EaXN0cmlidXRpb24KCiMKIyBQaGFzZS1Mb2NrZWQgTG9vcCAoUExMKSBmcmVx
dWVuY3kgc3ludGhlc2l6ZXJzCiMKQ09ORklHX0FERjQzNTA9bQpDT05GSUdfQURGNDM3MT1t
CiMgZW5kIG9mIFBoYXNlLUxvY2tlZCBMb29wIChQTEwpIGZyZXF1ZW5jeSBzeW50aGVzaXpl
cnMKIyBlbmQgb2YgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCgojCiMgRGlnaXRh
bCBneXJvc2NvcGUgc2Vuc29ycwojCkNPTkZJR19BRElTMTYwODA9bQpDT05GSUdfQURJUzE2
MTMwPW0KQ09ORklHX0FESVMxNjEzNj1tCkNPTkZJR19BRElTMTYyNjA9bQpDT05GSUdfQURY
UlMyOTA9bQpDT05GSUdfQURYUlM0NTA9bQpDT05GSUdfQk1HMTYwPW0KQ09ORklHX0JNRzE2
MF9JMkM9bQpDT05GSUdfQk1HMTYwX1NQST1tCkNPTkZJR19GWEFTMjEwMDJDPW0KQ09ORklH
X0ZYQVMyMTAwMkNfSTJDPW0KQ09ORklHX0ZYQVMyMTAwMkNfU1BJPW0KQ09ORklHX0hJRF9T
RU5TT1JfR1lST18zRD1tCkNPTkZJR19NUFUzMDUwPW0KQ09ORklHX01QVTMwNTBfSTJDPW0K
Q09ORklHX0lJT19TVF9HWVJPXzNBWElTPW0KQ09ORklHX0lJT19TVF9HWVJPX0kyQ18zQVhJ
Uz1tCkNPTkZJR19JSU9fU1RfR1lST19TUElfM0FYSVM9bQpDT05GSUdfSVRHMzIwMD1tCiMg
ZW5kIG9mIERpZ2l0YWwgZ3lyb3Njb3BlIHNlbnNvcnMKCiMKIyBIZWFsdGggU2Vuc29ycwoj
CgojCiMgSGVhcnQgUmF0ZSBNb25pdG9ycwojCkNPTkZJR19BRkU0NDAzPW0KQ09ORklHX0FG
RTQ0MDQ9bQpDT05GSUdfTUFYMzAxMDA9bQpDT05GSUdfTUFYMzAxMDI9bQojIGVuZCBvZiBI
ZWFydCBSYXRlIE1vbml0b3JzCiMgZW5kIG9mIEhlYWx0aCBTZW5zb3JzCgojCiMgSHVtaWRp
dHkgc2Vuc29ycwojCkNPTkZJR19BTTIzMTU9bQpDT05GSUdfREhUMTE9bQpDT05GSUdfSERD
MTAwWD1tCkNPTkZJR19IREMyMDEwPW0KQ09ORklHX0hJRF9TRU5TT1JfSFVNSURJVFk9bQpD
T05GSUdfSFRTMjIxPW0KQ09ORklHX0hUUzIyMV9JMkM9bQpDT05GSUdfSFRTMjIxX1NQST1t
CkNPTkZJR19IVFUyMT1tCkNPTkZJR19TSTcwMDU9bQpDT05GSUdfU0k3MDIwPW0KIyBlbmQg
b2YgSHVtaWRpdHkgc2Vuc29ycwoKIwojIEluZXJ0aWFsIG1lYXN1cmVtZW50IHVuaXRzCiMK
Q09ORklHX0FESVMxNjQwMD1tCkNPTkZJR19BRElTMTY0NjA9bQpDT05GSUdfQURJUzE2NDc1
PW0KQ09ORklHX0FESVMxNjQ4MD1tCkNPTkZJR19CTUkxNjA9bQpDT05GSUdfQk1JMTYwX0ky
Qz1tCkNPTkZJR19CTUkxNjBfU1BJPW0KQ09ORklHX0ZYT1M4NzAwPW0KQ09ORklHX0ZYT1M4
NzAwX0kyQz1tCkNPTkZJR19GWE9TODcwMF9TUEk9bQpDT05GSUdfS01YNjE9bQpDT05GSUdf
SU5WX0lDTTQyNjAwPW0KQ09ORklHX0lOVl9JQ000MjYwMF9JMkM9bQpDT05GSUdfSU5WX0lD
TTQyNjAwX1NQST1tCkNPTkZJR19JTlZfTVBVNjA1MF9JSU89bQpDT05GSUdfSU5WX01QVTYw
NTBfSTJDPW0KQ09ORklHX0lOVl9NUFU2MDUwX1NQST1tCkNPTkZJR19JSU9fU1RfTFNNNkRT
WD1tCkNPTkZJR19JSU9fU1RfTFNNNkRTWF9JMkM9bQpDT05GSUdfSUlPX1NUX0xTTTZEU1hf
U1BJPW0KIyBlbmQgb2YgSW5lcnRpYWwgbWVhc3VyZW1lbnQgdW5pdHMKCkNPTkZJR19JSU9f
QURJU19MSUI9bQpDT05GSUdfSUlPX0FESVNfTElCX0JVRkZFUj15CgojCiMgTGlnaHQgc2Vu
c29ycwojCkNPTkZJR19BQ1BJX0FMUz1tCkNPTkZJR19BREpEX1MzMTE9bQpDT05GSUdfQURV
WDEwMjA9bQpDT05GSUdfQUwzMDEwPW0KQ09ORklHX0FMMzMyMEE9bQpDT05GSUdfQVBEUzkz
MDA9bQpDT05GSUdfQVBEUzk5NjA9bQpDT05GSUdfQVM3MzIxMT1tCkNPTkZJR19CSDE3NTA9
bQpDT05GSUdfQkgxNzgwPW0KQ09ORklHX0NNMzIxODE9bQpDT05GSUdfQ00zMjMyPW0KQ09O
RklHX0NNMzMyMz1tCkNPTkZJR19DTTM2NjUxPW0KQ09ORklHX0lJT19DUk9TX0VDX0xJR0hU
X1BST1g9bQpDT05GSUdfR1AyQVAwMDI9bQpDT05GSUdfR1AyQVAwMjBBMDBGPW0KQ09ORklH
X0lRUzYyMV9BTFM9bQpDT05GSUdfU0VOU09SU19JU0wyOTAxOD1tCkNPTkZJR19TRU5TT1JT
X0lTTDI5MDI4PW0KQ09ORklHX0lTTDI5MTI1PW0KQ09ORklHX0hJRF9TRU5TT1JfQUxTPW0K
Q09ORklHX0hJRF9TRU5TT1JfUFJPWD1tCkNPTkZJR19KU0ExMjEyPW0KQ09ORklHX1JQUjA1
MjE9bQpDT05GSUdfU0VOU09SU19MTTM1MzM9bQpDT05GSUdfTFRSNTAxPW0KQ09ORklHX0xW
MDEwNENTPW0KQ09ORklHX01BWDQ0MDAwPW0KQ09ORklHX01BWDQ0MDA5PW0KQ09ORklHX05P
QTEzMDU9bQpDT05GSUdfT1BUMzAwMT1tCkNPTkZJR19QQTEyMjAzMDAxPW0KQ09ORklHX1NJ
MTEzMz1tCkNPTkZJR19TSTExNDU9bQpDT05GSUdfU1RLMzMxMD1tCkNPTkZJR19TVF9VVklT
MjU9bQpDT05GSUdfU1RfVVZJUzI1X0kyQz1tCkNPTkZJR19TVF9VVklTMjVfU1BJPW0KQ09O
RklHX1RDUzM0MTQ9bQpDT05GSUdfVENTMzQ3Mj1tCkNPTkZJR19TRU5TT1JTX1RTTDI1NjM9
bQpDT05GSUdfVFNMMjU4Mz1tCkNPTkZJR19UU0wyNzcyPW0KQ09ORklHX1RTTDQ1MzE9bQpD
T05GSUdfVVM1MTgyRD1tCkNPTkZJR19WQ05MNDAwMD1tCkNPTkZJR19WQ05MNDAzNT1tCkNP
TkZJR19WRU1MNjAzMD1tCkNPTkZJR19WRU1MNjA3MD1tCkNPTkZJR19WTDYxODA9bQpDT05G
SUdfWk9QVDIyMDE9bQojIGVuZCBvZiBMaWdodCBzZW5zb3JzCgojCiMgTWFnbmV0b21ldGVy
IHNlbnNvcnMKIwpDT05GSUdfQUs4OTc1PW0KQ09ORklHX0FLMDk5MTE9bQpDT05GSUdfQk1D
MTUwX01BR049bQpDT05GSUdfQk1DMTUwX01BR05fSTJDPW0KQ09ORklHX0JNQzE1MF9NQUdO
X1NQST1tCkNPTkZJR19NQUczMTEwPW0KQ09ORklHX0hJRF9TRU5TT1JfTUFHTkVUT01FVEVS
XzNEPW0KQ09ORklHX01NQzM1MjQwPW0KQ09ORklHX0lJT19TVF9NQUdOXzNBWElTPW0KQ09O
RklHX0lJT19TVF9NQUdOX0kyQ18zQVhJUz1tCkNPTkZJR19JSU9fU1RfTUFHTl9TUElfM0FY
SVM9bQpDT05GSUdfU0VOU09SU19ITUM1ODQzPW0KQ09ORklHX1NFTlNPUlNfSE1DNTg0M19J
MkM9bQpDT05GSUdfU0VOU09SU19ITUM1ODQzX1NQST1tCkNPTkZJR19TRU5TT1JTX1JNMzEw
MD1tCkNPTkZJR19TRU5TT1JTX1JNMzEwMF9JMkM9bQpDT05GSUdfU0VOU09SU19STTMxMDBf
U1BJPW0KQ09ORklHX1lBTUFIQV9ZQVM1MzA9bQojIGVuZCBvZiBNYWduZXRvbWV0ZXIgc2Vu
c29ycwoKIwojIE11bHRpcGxleGVycwojCiMgZW5kIG9mIE11bHRpcGxleGVycwoKIwojIElu
Y2xpbm9tZXRlciBzZW5zb3JzCiMKQ09ORklHX0hJRF9TRU5TT1JfSU5DTElOT01FVEVSXzNE
PW0KQ09ORklHX0hJRF9TRU5TT1JfREVWSUNFX1JPVEFUSU9OPW0KIyBlbmQgb2YgSW5jbGlu
b21ldGVyIHNlbnNvcnMKCiMKIyBUcmlnZ2VycyAtIHN0YW5kYWxvbmUKIwpDT05GSUdfSUlP
X0hSVElNRVJfVFJJR0dFUj1tCkNPTkZJR19JSU9fSU5URVJSVVBUX1RSSUdHRVI9bQpDT05G
SUdfSUlPX1RJR0hUTE9PUF9UUklHR0VSPW0KQ09ORklHX0lJT19TWVNGU19UUklHR0VSPW0K
IyBlbmQgb2YgVHJpZ2dlcnMgLSBzdGFuZGFsb25lCgojCiMgTGluZWFyIGFuZCBhbmd1bGFy
IHBvc2l0aW9uIHNlbnNvcnMKIwpDT05GSUdfSVFTNjI0X1BPUz1tCkNPTkZJR19ISURfU0VO
U09SX0NVU1RPTV9JTlRFTF9ISU5HRT1tCiMgZW5kIG9mIExpbmVhciBhbmQgYW5ndWxhciBw
b3NpdGlvbiBzZW5zb3JzCgojCiMgRGlnaXRhbCBwb3RlbnRpb21ldGVycwojCkNPTkZJR19B
RDUyNzI9bQpDT05GSUdfRFMxODAzPW0KQ09ORklHX01BWDU0MzI9bQpDT05GSUdfTUFYNTQ4
MT1tCkNPTkZJR19NQVg1NDg3PW0KQ09ORklHX01DUDQwMTg9bQpDT05GSUdfTUNQNDEzMT1t
CkNPTkZJR19NQ1A0NTMxPW0KQ09ORklHX01DUDQxMDEwPW0KQ09ORklHX1RQTDAxMDI9bQoj
IGVuZCBvZiBEaWdpdGFsIHBvdGVudGlvbWV0ZXJzCgojCiMgRGlnaXRhbCBwb3RlbnRpb3N0
YXRzCiMKQ09ORklHX0xNUDkxMDAwPW0KIyBlbmQgb2YgRGlnaXRhbCBwb3RlbnRpb3N0YXRz
CgojCiMgUHJlc3N1cmUgc2Vuc29ycwojCkNPTkZJR19BQlAwNjBNRz1tCkNPTkZJR19CTVAy
ODA9bQpDT05GSUdfQk1QMjgwX0kyQz1tCkNPTkZJR19CTVAyODBfU1BJPW0KQ09ORklHX0lJ
T19DUk9TX0VDX0JBUk89bQpDT05GSUdfRExITDYwRD1tCkNPTkZJR19EUFMzMTA9bQpDT05G
SUdfSElEX1NFTlNPUl9QUkVTUz1tCkNPTkZJR19IUDAzPW0KQ09ORklHX0lDUDEwMTAwPW0K
Q09ORklHX01QTDExNT1tCkNPTkZJR19NUEwxMTVfSTJDPW0KQ09ORklHX01QTDExNV9TUEk9
bQpDT05GSUdfTVBMMzExNT1tCkNPTkZJR19NUzU2MTE9bQpDT05GSUdfTVM1NjExX0kyQz1t
CkNPTkZJR19NUzU2MTFfU1BJPW0KQ09ORklHX01TNTYzNz1tCkNPTkZJR19JSU9fU1RfUFJF
U1M9bQpDT05GSUdfSUlPX1NUX1BSRVNTX0kyQz1tCkNPTkZJR19JSU9fU1RfUFJFU1NfU1BJ
PW0KQ09ORklHX1Q1NDAzPW0KQ09ORklHX0hQMjA2Qz1tCkNPTkZJR19aUEEyMzI2PW0KQ09O
RklHX1pQQTIzMjZfSTJDPW0KQ09ORklHX1pQQTIzMjZfU1BJPW0KIyBlbmQgb2YgUHJlc3N1
cmUgc2Vuc29ycwoKIwojIExpZ2h0bmluZyBzZW5zb3JzCiMKQ09ORklHX0FTMzkzNT1tCiMg
ZW5kIG9mIExpZ2h0bmluZyBzZW5zb3JzCgojCiMgUHJveGltaXR5IGFuZCBkaXN0YW5jZSBz
ZW5zb3JzCiMKQ09ORklHX0lTTDI5NTAxPW0KQ09ORklHX0xJREFSX0xJVEVfVjI9bQpDT05G
SUdfTUIxMjMyPW0KQ09ORklHX1BJTkc9bQpDT05GSUdfUkZENzc0MDI9bQpDT05GSUdfU1JG
MDQ9bQpDT05GSUdfU1g5MzEwPW0KQ09ORklHX1NYOTUwMD1tCkNPTkZJR19TUkYwOD1tCkNP
TkZJR19WQ05MMzAyMD1tCkNPTkZJR19WTDUzTDBYX0kyQz1tCiMgZW5kIG9mIFByb3hpbWl0
eSBhbmQgZGlzdGFuY2Ugc2Vuc29ycwoKIwojIFJlc29sdmVyIHRvIGRpZ2l0YWwgY29udmVy
dGVycwojCkNPTkZJR19BRDJTOTA9bQpDT05GSUdfQUQyUzEyMDA9bQojIGVuZCBvZiBSZXNv
bHZlciB0byBkaWdpdGFsIGNvbnZlcnRlcnMKCiMKIyBUZW1wZXJhdHVyZSBzZW5zb3JzCiMK
Q09ORklHX0lRUzYyMEFUX1RFTVA9bQpDT05GSUdfTFRDMjk4Mz1tCkNPTkZJR19NQVhJTV9U
SEVSTU9DT1VQTEU9bQpDT05GSUdfSElEX1NFTlNPUl9URU1QPW0KQ09ORklHX01MWDkwNjE0
PW0KQ09ORklHX01MWDkwNjMyPW0KQ09ORklHX1RNUDAwNj1tCkNPTkZJR19UTVAwMDc9bQpD
T05GSUdfVFNZUzAxPW0KQ09ORklHX1RTWVMwMkQ9bQpDT05GSUdfTUFYMzE4NTY9bQojIGVu
ZCBvZiBUZW1wZXJhdHVyZSBzZW5zb3JzCgpDT05GSUdfTlRCPW0KQ09ORklHX05UQl9NU0k9
eQpDT05GSUdfTlRCX0FNRD1tCkNPTkZJR19OVEJfSURUPW0KQ09ORklHX05UQl9JTlRFTD1t
CkNPTkZJR19OVEJfRVBGPW0KQ09ORklHX05UQl9TV0lUQ0hURUM9bQojIENPTkZJR19OVEJf
UElOR1BPTkcgaXMgbm90IHNldAojIENPTkZJR19OVEJfVE9PTCBpcyBub3Qgc2V0CiMgQ09O
RklHX05UQl9QRVJGIGlzIG5vdCBzZXQKIyBDT05GSUdfTlRCX01TSV9URVNUIGlzIG5vdCBz
ZXQKQ09ORklHX05UQl9UUkFOU1BPUlQ9bQojIENPTkZJR19WTUVfQlVTIGlzIG5vdCBzZXQK
Q09ORklHX1BXTT15CkNPTkZJR19QV01fU1lTRlM9eQojIENPTkZJR19QV01fREVCVUcgaXMg
bm90IHNldApDT05GSUdfUFdNX0NSQz15CkNPTkZJR19QV01fQ1JPU19FQz1tCkNPTkZJR19Q
V01fRFdDPW0KQ09ORklHX1BXTV9JUVM2MjBBPW0KQ09ORklHX1BXTV9MUDM5NDM9bQpDT05G
SUdfUFdNX0xQU1M9bQpDT05GSUdfUFdNX0xQU1NfUENJPW0KQ09ORklHX1BXTV9MUFNTX1BM
QVRGT1JNPW0KQ09ORklHX1BXTV9QQ0E5Njg1PW0KQ09ORklHX1BXTV9UV0w9bQpDT05GSUdf
UFdNX1RXTF9MRUQ9bQoKIwojIElSUSBjaGlwIHN1cHBvcnQKIwpDT05GSUdfTUFERVJBX0lS
UT1tCiMgZW5kIG9mIElSUSBjaGlwIHN1cHBvcnQKCkNPTkZJR19JUEFDS19CVVM9bQpDT05G
SUdfQk9BUkRfVFBDSTIwMD1tCkNPTkZJR19TRVJJQUxfSVBPQ1RBTD1tCkNPTkZJR19SRVNF
VF9DT05UUk9MTEVSPXkKQ09ORklHX1JFU0VUX0JSQ01TVEJfUkVTQ0FMPXkKQ09ORklHX1JF
U0VUX1RJX1NZU0NPTj1tCgojCiMgUEhZIFN1YnN5c3RlbQojCkNPTkZJR19HRU5FUklDX1BI
WT15CkNPTkZJR19VU0JfTEdNX1BIWT1tCkNPTkZJR19CQ01fS09OQV9VU0IyX1BIWT1tCkNP
TkZJR19QSFlfUFhBXzI4Tk1fSFNJQz1tCkNPTkZJR19QSFlfUFhBXzI4Tk1fVVNCMj1tCkNP
TkZJR19QSFlfQ1BDQVBfVVNCPW0KQ09ORklHX1BIWV9RQ09NX1VTQl9IUz1tCkNPTkZJR19Q
SFlfUUNPTV9VU0JfSFNJQz1tCkNPTkZJR19QSFlfU0FNU1VOR19VU0IyPW0KQ09ORklHX1BI
WV9UVVNCMTIxMD1tCkNPTkZJR19QSFlfSU5URUxfTEdNX0VNTUM9bQojIGVuZCBvZiBQSFkg
U3Vic3lzdGVtCgpDT05GSUdfUE9XRVJDQVA9eQpDT05GSUdfSU5URUxfUkFQTF9DT1JFPW0K
Q09ORklHX0lOVEVMX1JBUEw9bQpDT05GSUdfSURMRV9JTkpFQ1Q9eQpDT05GSUdfRFRQTT15
CkNPTkZJR19EVFBNX0NQVT15CkNPTkZJR19NQ0I9bQpDT05GSUdfTUNCX1BDST1tCkNPTkZJ
R19NQ0JfTFBDPW0KCiMKIyBQZXJmb3JtYW5jZSBtb25pdG9yIHN1cHBvcnQKIwojIGVuZCBv
ZiBQZXJmb3JtYW5jZSBtb25pdG9yIHN1cHBvcnQKCkNPTkZJR19SQVM9eQpDT05GSUdfUkFT
X0NFQz15CiMgQ09ORklHX1JBU19DRUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfVVNCND1t
CiMgQ09ORklHX1VTQjRfREVCVUdGU19XUklURSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQjRf
RE1BX1RFU1QgaXMgbm90IHNldAoKIwojIEFuZHJvaWQKIwojIENPTkZJR19BTkRST0lEIGlz
IG5vdCBzZXQKIyBlbmQgb2YgQW5kcm9pZAoKQ09ORklHX0xJQk5WRElNTT15CkNPTkZJR19C
TEtfREVWX1BNRU09bQpDT05GSUdfTkRfQkxLPW0KQ09ORklHX05EX0NMQUlNPXkKQ09ORklH
X05EX0JUVD1tCkNPTkZJR19CVFQ9eQpDT05GSUdfTkRfUEZOPW0KQ09ORklHX05WRElNTV9Q
Rk49eQpDT05GSUdfTlZESU1NX0RBWD15CkNPTkZJR19EQVhfRFJJVkVSPXkKQ09ORklHX0RB
WD15CkNPTkZJR19ERVZfREFYPW0KQ09ORklHX0RFVl9EQVhfUE1FTT1tCkNPTkZJR19ERVZf
REFYX0hNRU09bQpDT05GSUdfREVWX0RBWF9ITUVNX0RFVklDRVM9eQpDT05GSUdfREVWX0RB
WF9LTUVNPW0KQ09ORklHX0RFVl9EQVhfUE1FTV9DT01QQVQ9bQpDT05GSUdfTlZNRU09eQpD
T05GSUdfTlZNRU1fU1lTRlM9eQpDT05GSUdfUkFWRV9TUF9FRVBST009bQpDT05GSUdfTlZN
RU1fUk1FTT1tCgojCiMgSFcgdHJhY2luZyBzdXBwb3J0CiMKQ09ORklHX1NUTT1tCkNPTkZJ
R19TVE1fUFJPVE9fQkFTSUM9bQpDT05GSUdfU1RNX1BST1RPX1NZU19UPW0KIyBDT05GSUdf
U1RNX0RVTU1ZIGlzIG5vdCBzZXQKQ09ORklHX1NUTV9TT1VSQ0VfQ09OU09MRT1tCkNPTkZJ
R19TVE1fU09VUkNFX0hFQVJUQkVBVD1tCkNPTkZJR19TVE1fU09VUkNFX0ZUUkFDRT1tCkNP
TkZJR19JTlRFTF9USD1tCkNPTkZJR19JTlRFTF9USF9QQ0k9bQpDT05GSUdfSU5URUxfVEhf
QUNQST1tCkNPTkZJR19JTlRFTF9USF9HVEg9bQpDT05GSUdfSU5URUxfVEhfU1RIPW0KQ09O
RklHX0lOVEVMX1RIX01TVT1tCkNPTkZJR19JTlRFTF9USF9QVEk9bQojIENPTkZJR19JTlRF
TF9USF9ERUJVRyBpcyBub3Qgc2V0CiMgZW5kIG9mIEhXIHRyYWNpbmcgc3VwcG9ydAoKQ09O
RklHX0ZQR0E9bQpDT05GSUdfQUxURVJBX1BSX0lQX0NPUkU9bQpDT05GSUdfRlBHQV9NR1Jf
QUxURVJBX1BTX1NQST1tCkNPTkZJR19GUEdBX01HUl9BTFRFUkFfQ1ZQPW0KQ09ORklHX0ZQ
R0FfTUdSX1hJTElOWF9TUEk9bQpDT05GSUdfRlBHQV9NR1JfTUFDSFhPMl9TUEk9bQpDT05G
SUdfRlBHQV9CUklER0U9bQpDT05GSUdfQUxURVJBX0ZSRUVaRV9CUklER0U9bQpDT05GSUdf
WElMSU5YX1BSX0RFQ09VUExFUj1tCkNPTkZJR19GUEdBX1JFR0lPTj1tCkNPTkZJR19GUEdB
X0RGTD1tCkNPTkZJR19GUEdBX0RGTF9GTUU9bQpDT05GSUdfRlBHQV9ERkxfRk1FX01HUj1t
CkNPTkZJR19GUEdBX0RGTF9GTUVfQlJJREdFPW0KQ09ORklHX0ZQR0FfREZMX0ZNRV9SRUdJ
T049bQpDT05GSUdfRlBHQV9ERkxfQUZVPW0KQ09ORklHX0ZQR0FfREZMX05JT1NfSU5URUxf
UEFDX04zMDAwPW0KQ09ORklHX0ZQR0FfREZMX1BDST1tCkNPTkZJR19URUU9bQoKIwojIFRF
RSBkcml2ZXJzCiMKQ09ORklHX0FNRFRFRT1tCiMgZW5kIG9mIFRFRSBkcml2ZXJzCgpDT05G
SUdfTVVMVElQTEVYRVI9bQoKIwojIE11bHRpcGxleGVyIGRyaXZlcnMKIwpDT05GSUdfTVVY
X0FERzc5MkE9bQpDT05GSUdfTVVYX0FER1MxNDA4PW0KQ09ORklHX01VWF9HUElPPW0KIyBl
bmQgb2YgTXVsdGlwbGV4ZXIgZHJpdmVycwoKQ09ORklHX1BNX09QUD15CkNPTkZJR19VTklT
WVNfVklTT1JCVVM9bQpDT05GSUdfU0lPWD1tCkNPTkZJR19TSU9YX0JVU19HUElPPW0KQ09O
RklHX1NMSU1CVVM9bQpDT05GSUdfU0xJTV9RQ09NX0NUUkw9bQpDT05GSUdfSU5URVJDT05O
RUNUPXkKQ09ORklHX0NPVU5URVI9bQpDT05GSUdfTU9TVD1tCkNPTkZJR19NT1NUX1VTQl9I
RE09bQpDT05GSUdfTU9TVF9DREVWPW0KIyBlbmQgb2YgRGV2aWNlIERyaXZlcnMKCiMKIyBG
aWxlIHN5c3RlbXMKIwpDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTPXkKQ09ORklHX1ZBTElE
QVRFX0ZTX1BBUlNFUj15CkNPTkZJR19GU19JT01BUD15CiMgQ09ORklHX0VYVDJfRlMgaXMg
bm90IHNldAojIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKQ09ORklHX0VYVDRfRlM9bQpD
T05GSUdfRVhUNF9VU0VfRk9SX0VYVDI9eQpDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQpD
T05GSUdfRVhUNF9GU19TRUNVUklUWT15CiMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNl
dApDT05GSUdfSkJEMj1tCiMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldApDT05GSUdf
RlNfTUJDQUNIRT1tCkNPTkZJR19SRUlTRVJGU19GUz1tCiMgQ09ORklHX1JFSVNFUkZTX0NI
RUNLIGlzIG5vdCBzZXQKQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CkNPTkZJR19SRUlT
RVJGU19GU19YQVRUUj15CkNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQpDT05GSUdf
UkVJU0VSRlNfRlNfU0VDVVJJVFk9eQpDT05GSUdfSkZTX0ZTPW0KQ09ORklHX0pGU19QT1NJ
WF9BQ0w9eQpDT05GSUdfSkZTX1NFQ1VSSVRZPXkKIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5v
dCBzZXQKQ09ORklHX0pGU19TVEFUSVNUSUNTPXkKQ09ORklHX1hGU19GUz1tCkNPTkZJR19Y
RlNfU1VQUE9SVF9WND15CkNPTkZJR19YRlNfUVVPVEE9eQpDT05GSUdfWEZTX1BPU0lYX0FD
TD15CkNPTkZJR19YRlNfUlQ9eQpDT05GSUdfWEZTX09OTElORV9TQ1JVQj15CkNPTkZJR19Y
RlNfT05MSU5FX1JFUEFJUj15CiMgQ09ORklHX1hGU19XQVJOIGlzIG5vdCBzZXQKIyBDT05G
SUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0dGUzJfRlM9bQpDT05GSUdfR0ZTMl9G
U19MT0NLSU5HX0RMTT15CkNPTkZJR19PQ0ZTMl9GUz1tCkNPTkZJR19PQ0ZTMl9GU19PMkNC
PW0KQ09ORklHX09DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSPW0KQ09ORklHX09DRlMyX0ZT
X1NUQVRTPXkKQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQojIENPTkZJR19PQ0ZTMl9E
RUJVR19GUyBpcyBub3Qgc2V0CkNPTkZJR19CVFJGU19GUz1tCkNPTkZJR19CVFJGU19GU19Q
T1NJWF9BQ0w9eQojIENPTkZJR19CVFJGU19GU19DSEVDS19JTlRFR1JJVFkgaXMgbm90IHNl
dAojIENPTkZJR19CVFJGU19GU19SVU5fU0FOSVRZX1RFU1RTIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlRSRlNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19CVFJGU19BU1NFUlQgaXMgbm90
IHNldAojIENPTkZJR19CVFJGU19GU19SRUZfVkVSSUZZIGlzIG5vdCBzZXQKQ09ORklHX05J
TEZTMl9GUz1tCkNPTkZJR19GMkZTX0ZTPW0KQ09ORklHX0YyRlNfU1RBVF9GUz15CkNPTkZJ
R19GMkZTX0ZTX1hBVFRSPXkKQ09ORklHX0YyRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0Yy
RlNfRlNfU0VDVVJJVFk9eQpDT05GSUdfRjJGU19DSEVDS19GUz15CiMgQ09ORklHX0YyRlNf
RkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0YyRlNfRlNfQ09NUFJFU1NJT049
eQpDT05GSUdfRjJGU19GU19MWk89eQpDT05GSUdfRjJGU19GU19MWjQ9eQpDT05GSUdfRjJG
U19GU19MWjRIQz15CkNPTkZJR19GMkZTX0ZTX1pTVEQ9eQpDT05GSUdfRjJGU19GU19MWk9S
TEU9eQpDT05GSUdfWk9ORUZTX0ZTPW0KQ09ORklHX0ZTX0RBWD15CkNPTkZJR19GU19EQVhf
UE1EPXkKQ09ORklHX0ZTX1BPU0lYX0FDTD15CkNPTkZJR19FWFBPUlRGUz15CkNPTkZJR19F
WFBPUlRGU19CTE9DS19PUFM9eQpDT05GSUdfRklMRV9MT0NLSU5HPXkKIyBDT05GSUdfTUFO
REFUT1JZX0ZJTEVfTE9DS0lORyBpcyBub3Qgc2V0CkNPTkZJR19GU19FTkNSWVBUSU9OPXkK
Q09ORklHX0ZTX0VOQ1JZUFRJT05fQUxHUz1tCkNPTkZJR19GU19FTkNSWVBUSU9OX0lOTElO
RV9DUllQVD15CkNPTkZJR19GU19WRVJJVFk9eQojIENPTkZJR19GU19WRVJJVFlfREVCVUcg
aXMgbm90IHNldApDT05GSUdfRlNfVkVSSVRZX0JVSUxUSU5fU0lHTkFUVVJFUz15CkNPTkZJ
R19GU05PVElGWT15CkNPTkZJR19ETk9USUZZPXkKQ09ORklHX0lOT1RJRllfVVNFUj15CkNP
TkZJR19GQU5PVElGWT15CkNPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlM9eQpD
T05GSUdfUVVPVEE9eQpDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQojIENPTkZJ
R19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfUVVPVEFfREVCVUcg
aXMgbm90IHNldApDT05GSUdfUVVPVEFfVFJFRT1tCkNPTkZJR19RRk1UX1YxPW0KQ09ORklH
X1FGTVRfVjI9bQpDT05GSUdfUVVPVEFDVEw9eQpDT05GSUdfQVVUT0ZTNF9GUz15CkNPTkZJ
R19BVVRPRlNfRlM9eQpDT05GSUdfRlVTRV9GUz1tCkNPTkZJR19DVVNFPW0KQ09ORklHX1ZJ
UlRJT19GUz1tCkNPTkZJR19GVVNFX0RBWD15CkNPTkZJR19PVkVSTEFZX0ZTPW0KQ09ORklH
X09WRVJMQVlfRlNfUkVESVJFQ1RfRElSPXkKIyBDT05GSUdfT1ZFUkxBWV9GU19SRURJUkVD
VF9BTFdBWVNfRk9MTE9XIGlzIG5vdCBzZXQKQ09ORklHX09WRVJMQVlfRlNfSU5ERVg9eQpD
T05GSUdfT1ZFUkxBWV9GU19YSU5PX0FVVE89eQpDT05GSUdfT1ZFUkxBWV9GU19NRVRBQ09Q
WT15CgojCiMgQ2FjaGVzCiMKQ09ORklHX0ZTQ0FDSEU9bQpDT05GSUdfRlNDQUNIRV9TVEFU
Uz15CiMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQKIyBDT05GSUdfRlND
QUNIRV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUPXkKQ09O
RklHX0NBQ0hFRklMRVM9bQojIENPTkZJR19DQUNIRUZJTEVTX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0FDSEVGSUxFU19ISVNUT0dSQU0gaXMgbm90IHNldAojIGVuZCBvZiBDYWNo
ZXMKCiMKIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiMKQ09ORklHX0lTTzk2NjBfRlM9bQpD
T05GSUdfSk9MSUVUPXkKQ09ORklHX1pJU09GUz15CkNPTkZJR19VREZfRlM9bQojIGVuZCBv
ZiBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCgojCiMgRE9TL0ZBVC9FWEZBVC9OVCBGaWxlc3lz
dGVtcwojCkNPTkZJR19GQVRfRlM9bQpDT05GSUdfTVNET1NfRlM9bQpDT05GSUdfVkZBVF9G
Uz1tCkNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKQ09ORklHX0ZBVF9ERUZBVUxU
X0lPQ0hBUlNFVD0iYXNjaWkiCkNPTkZJR19GQVRfREVGQVVMVF9VVEY4PXkKQ09ORklHX0VY
RkFUX0ZTPW0KQ09ORklHX0VYRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJ1dGY4IgojIENPTkZJ
R19OVEZTX0ZTIGlzIG5vdCBzZXQKIyBlbmQgb2YgRE9TL0ZBVC9FWEZBVC9OVCBGaWxlc3lz
dGVtcwoKIwojIFBzZXVkbyBmaWxlc3lzdGVtcwojCkNPTkZJR19QUk9DX0ZTPXkKQ09ORklH
X1BST0NfS0NPUkU9eQpDT05GSUdfUFJPQ19WTUNPUkU9eQpDT05GSUdfUFJPQ19WTUNPUkVf
REVWSUNFX0RVTVA9eQpDT05GSUdfUFJPQ19TWVNDVEw9eQpDT05GSUdfUFJPQ19QQUdFX01P
TklUT1I9eQpDT05GSUdfUFJPQ19DSElMRFJFTj15CkNPTkZJR19QUk9DX1BJRF9BUkNIX1NU
QVRVUz15CkNPTkZJR19QUk9DX0NQVV9SRVNDVFJMPXkKQ09ORklHX0tFUk5GUz15CkNPTkZJ
R19TWVNGUz15CkNPTkZJR19UTVBGUz15CkNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQpDT05G
SUdfVE1QRlNfWEFUVFI9eQpDT05GSUdfVE1QRlNfSU5PREU2ND15CkNPTkZJR19IVUdFVExC
RlM9eQpDT05GSUdfSFVHRVRMQl9QQUdFPXkKQ09ORklHX01FTUZEX0NSRUFURT15CkNPTkZJ
R19BUkNIX0hBU19HSUdBTlRJQ19QQUdFPXkKQ09ORklHX0NPTkZJR0ZTX0ZTPXkKQ09ORklH
X0VGSVZBUl9GUz15CiMgZW5kIG9mIFBzZXVkbyBmaWxlc3lzdGVtcwoKQ09ORklHX01JU0Nf
RklMRVNZU1RFTVM9eQpDT05GSUdfT1JBTkdFRlNfRlM9bQojIENPTkZJR19BREZTX0ZTIGlz
IG5vdCBzZXQKQ09ORklHX0FGRlNfRlM9bQpDT05GSUdfRUNSWVBUX0ZTPW0KIyBDT05GSUdf
RUNSWVBUX0ZTX01FU1NBR0lORyBpcyBub3Qgc2V0CkNPTkZJR19IRlNfRlM9bQpDT05GSUdf
SEZTUExVU19GUz1tCkNPTkZJR19CRUZTX0ZTPW0KIyBDT05GSUdfQkVGU19ERUJVRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VGU19GUyBpcyBu
b3Qgc2V0CkNPTkZJR19KRkZTMl9GUz1tCkNPTkZJR19KRkZTMl9GU19ERUJVRz0wCkNPTkZJ
R19KRkZTMl9GU19XUklURUJVRkZFUj15CiMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZ
IGlzIG5vdCBzZXQKQ09ORklHX0pGRlMyX1NVTU1BUlk9eQpDT05GSUdfSkZGUzJfRlNfWEFU
VFI9eQpDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0pGRlMyX0ZTX1NFQ1VS
SVRZPXkKIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CkNP
TkZJR19KRkZTMl9aTElCPXkKQ09ORklHX0pGRlMyX1JUSU1FPXkKQ09ORklHX1VCSUZTX0ZT
PW0KIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldApDT05GSUdf
VUJJRlNfRlNfTFpPPXkKQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQpDT05GSUdfVUJJRlNfRlNf
WlNURD15CkNPTkZJR19VQklGU19BVElNRV9TVVBQT1JUPXkKQ09ORklHX1VCSUZTX0ZTX1hB
VFRSPXkKQ09ORklHX1VCSUZTX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX1VCSUZTX0ZTX0FVVEhF
TlRJQ0FUSU9OPXkKQ09ORklHX0NSQU1GUz1tCkNPTkZJR19DUkFNRlNfQkxPQ0tERVY9eQpD
T05GSUdfQ1JBTUZTX01URD15CkNPTkZJR19TUVVBU0hGUz1tCiMgQ09ORklHX1NRVUFTSEZT
X0ZJTEVfQ0FDSEUgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNfRklMRV9ESVJFQ1Q9eQoj
IENPTkZJR19TUVVBU0hGU19ERUNPTVBfU0lOR0xFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1FV
QVNIRlNfREVDT01QX01VTFRJIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9N
VUxUSV9QRVJDUFU9eQpDT05GSUdfU1FVQVNIRlNfWEFUVFI9eQpDT05GSUdfU1FVQVNIRlNf
WkxJQj15CkNPTkZJR19TUVVBU0hGU19MWjQ9eQpDT05GSUdfU1FVQVNIRlNfTFpPPXkKQ09O
RklHX1NRVUFTSEZTX1haPXkKQ09ORklHX1NRVUFTSEZTX1pTVEQ9eQojIENPTkZJR19TUVVB
U0hGU180S19ERVZCTEtfU0laRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NRVUFTSEZTX0VNQkVE
REVEIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9Mwoj
IENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQ09ORklHX01JTklYX0ZTPW0KQ09ORklHX09N
RlNfRlM9bQojIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfUU5YNEZTX0ZT
IGlzIG5vdCBzZXQKIyBDT05GSUdfUU5YNkZTX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1JPTUZT
X0ZTPW0KQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15CiMgQ09ORklHX1JPTUZTX0JB
Q0tFRF9CWV9NVEQgaXMgbm90IHNldAojIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBp
cyBub3Qgc2V0CkNPTkZJR19ST01GU19PTl9CTE9DSz15CkNPTkZJR19QU1RPUkU9eQpDT05G
SUdfUFNUT1JFX0RFRkFVTFRfS01TR19CWVRFUz0xMDI0MApDT05GSUdfUFNUT1JFX0RFRkxB
VEVfQ09NUFJFU1M9bQpDT05GSUdfUFNUT1JFX0xaT19DT01QUkVTUz1tCkNPTkZJR19QU1RP
UkVfTFo0X0NPTVBSRVNTPW0KQ09ORklHX1BTVE9SRV9MWjRIQ19DT01QUkVTUz1tCiMgQ09O
RklHX1BTVE9SRV84NDJfQ09NUFJFU1MgaXMgbm90IHNldApDT05GSUdfUFNUT1JFX1pTVERf
Q09NUFJFU1M9eQpDT05GSUdfUFNUT1JFX0NPTVBSRVNTPXkKIyBDT05GSUdfUFNUT1JFX0RF
RkxBVEVfQ09NUFJFU1NfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BTVE9SRV9MWk9f
Q09NUFJFU1NfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BTVE9SRV9MWjRfQ09NUFJF
U1NfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BTVE9SRV9MWjRIQ19DT01QUkVTU19E
RUZBVUxUIGlzIG5vdCBzZXQKQ09ORklHX1BTVE9SRV9aU1REX0NPTVBSRVNTX0RFRkFVTFQ9
eQpDT05GSUdfUFNUT1JFX0NPTVBSRVNTX0RFRkFVTFQ9InpzdGQiCiMgQ09ORklHX1BTVE9S
RV9DT05TT0xFIGlzIG5vdCBzZXQKIyBDT05GSUdfUFNUT1JFX1BNU0cgaXMgbm90IHNldAoj
IENPTkZJR19QU1RPUkVfRlRSQUNFIGlzIG5vdCBzZXQKQ09ORklHX1BTVE9SRV9SQU09bQpD
T05GSUdfUFNUT1JFX1pPTkU9bQpDT05GSUdfUFNUT1JFX0JMSz1tCkNPTkZJR19QU1RPUkVf
QkxLX0JMS0RFVj0iIgpDT05GSUdfUFNUT1JFX0JMS19LTVNHX1NJWkU9NjQKQ09ORklHX1BT
VE9SRV9CTEtfTUFYX1JFQVNPTj0yCiMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldApDT05G
SUdfVUZTX0ZTPW0KIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKIyBDT05GSUdf
VUZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0VST0ZTX0ZTPW0KIyBDT05GSUdfRVJPRlNf
RlNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRVJPRlNfRlNfWEFUVFI9eQpDT05GSUdfRVJP
RlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0VST0ZTX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX0VS
T0ZTX0ZTX1pJUD15CkNPTkZJR19FUk9GU19GU19DTFVTVEVSX1BBR0VfTElNSVQ9MgpDT05G
SUdfVkJPWFNGX0ZTPW0KQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpDT05GSUdfTkZT
X0ZTPW0KQ09ORklHX05GU19WMj1tCkNPTkZJR19ORlNfVjM9bQpDT05GSUdfTkZTX1YzX0FD
TD15CkNPTkZJR19ORlNfVjQ9bQpDT05GSUdfTkZTX1NXQVA9eQpDT05GSUdfTkZTX1Y0XzE9
eQpDT05GSUdfTkZTX1Y0XzI9eQpDT05GSUdfUE5GU19GSUxFX0xBWU9VVD1tCkNPTkZJR19Q
TkZTX0JMT0NLPW0KQ09ORklHX1BORlNfRkxFWEZJTEVfTEFZT1VUPW0KQ09ORklHX05GU19W
NF8xX0lNUExFTUVOVEFUSU9OX0lEX0RPTUFJTj0ia2VybmVsLm9yZyIKQ09ORklHX05GU19W
NF8xX01JR1JBVElPTj15CkNPTkZJR19ORlNfVjRfU0VDVVJJVFlfTEFCRUw9eQpDT05GSUdf
TkZTX0ZTQ0FDSEU9eQojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90IHNldApD
T05GSUdfTkZTX1VTRV9LRVJORUxfRE5TPXkKQ09ORklHX05GU19ERUJVRz15CiMgQ09ORklH
X05GU19ESVNBQkxFX1VEUF9TVVBQT1JUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZTX1Y0XzJf
UkVBRF9QTFVTIGlzIG5vdCBzZXQKQ09ORklHX05GU0Q9bQpDT05GSUdfTkZTRF9WMl9BQ0w9
eQpDT05GSUdfTkZTRF9WMz15CkNPTkZJR19ORlNEX1YzX0FDTD15CkNPTkZJR19ORlNEX1Y0
PXkKQ09ORklHX05GU0RfUE5GUz15CkNPTkZJR19ORlNEX0JMT0NLTEFZT1VUPXkKQ09ORklH
X05GU0RfU0NTSUxBWU9VVD15CiMgQ09ORklHX05GU0RfRkxFWEZJTEVMQVlPVVQgaXMgbm90
IHNldApDT05GSUdfTkZTRF9WNF8yX0lOVEVSX1NTQz15CkNPTkZJR19ORlNEX1Y0X1NFQ1VS
SVRZX0xBQkVMPXkKQ09ORklHX0dSQUNFX1BFUklPRD1tCkNPTkZJR19MT0NLRD1tCkNPTkZJ
R19MT0NLRF9WND15CkNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQpDT05GSUdfTkZTX0NPTU1P
Tj15CkNPTkZJR19ORlNfVjRfMl9TU0NfSEVMUEVSPW0KQ09ORklHX1NVTlJQQz1tCkNPTkZJ
R19TVU5SUENfR1NTPW0KQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTD15CkNPTkZJR19TVU5S
UENfU1dBUD15CkNPTkZJR19SUENTRUNfR1NTX0tSQjU9bQpDT05GSUdfU1VOUlBDX0RJU0FC
TEVfSU5TRUNVUkVfRU5DVFlQRVM9eQpDT05GSUdfU1VOUlBDX0RFQlVHPXkKQ09ORklHX1NV
TlJQQ19YUFJUX1JETUE9bQpDT05GSUdfQ0VQSF9GUz1tCkNPTkZJR19DRVBIX0ZTQ0FDSEU9
eQpDT05GSUdfQ0VQSF9GU19QT1NJWF9BQ0w9eQpDT05GSUdfQ0VQSF9GU19TRUNVUklUWV9M
QUJFTD15CkNPTkZJR19DSUZTPW0KIyBDT05GSUdfQ0lGU19TVEFUUzIgaXMgbm90IHNldApD
T05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1k9eQojIENPTkZJR19DSUZTX1dFQUtf
UFdfSEFTSCBpcyBub3Qgc2V0CkNPTkZJR19DSUZTX1VQQ0FMTD15CkNPTkZJR19DSUZTX1hB
VFRSPXkKQ09ORklHX0NJRlNfUE9TSVg9eQpDT05GSUdfQ0lGU19ERUJVRz15CiMgQ09ORklH
X0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0lGU19ERUJVR19EVU1QX0tFWVMg
aXMgbm90IHNldApDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKQ09ORklHX0NJRlNfU1dOX1VQ
Q0FMTD15CiMgQ09ORklHX0NJRlNfU01CX0RJUkVDVCBpcyBub3Qgc2V0CkNPTkZJR19DSUZT
X0ZTQ0FDSEU9eQpDT05GSUdfQ09EQV9GUz1tCkNPTkZJR19BRlNfRlM9bQojIENPTkZJR19B
RlNfREVCVUcgaXMgbm90IHNldApDT05GSUdfQUZTX0ZTQ0FDSEU9eQojIENPTkZJR19BRlNf
REVCVUdfQ1VSU09SIGlzIG5vdCBzZXQKQ09ORklHXzlQX0ZTPW0KQ09ORklHXzlQX0ZTQ0FD
SEU9eQpDT05GSUdfOVBfRlNfUE9TSVhfQUNMPXkKQ09ORklHXzlQX0ZTX1NFQ1VSSVRZPXkK
Q09ORklHX05MUz15CkNPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKQ09ORklHX05MU19DT0RF
UEFHRV80Mzc9eQpDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCkNPTkZJR19OTFNfQ09ERVBB
R0VfNzc1PW0KQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQpDT05GSUdfTkxTX0NPREVQQUdF
Xzg1Mj1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KQ09ORklHX05MU19DT0RFUEFHRV84
NTc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODYx
PW0KQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1t
CkNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQpD
T05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KQ09O
RklHX05MU19DT0RFUEFHRV85MzY9bQpDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCkNPTkZJ
R19OTFNfQ09ERVBBR0VfOTMyPW0KQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQpDT05GSUdf
TkxTX0NPREVQQUdFXzg3ND1tCkNPTkZJR19OTFNfSVNPODg1OV84PW0KQ09ORklHX05MU19D
T0RFUEFHRV8xMjUwPW0KQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KQ09ORklHX05MU19B
U0NJST15CkNPTkZJR19OTFNfSVNPODg1OV8xPW0KQ09ORklHX05MU19JU084ODU5XzI9bQpD
T05GSUdfTkxTX0lTTzg4NTlfMz1tCkNPTkZJR19OTFNfSVNPODg1OV80PW0KQ09ORklHX05M
U19JU084ODU5XzU9bQpDT05GSUdfTkxTX0lTTzg4NTlfNj1tCkNPTkZJR19OTFNfSVNPODg1
OV83PW0KQ09ORklHX05MU19JU084ODU5Xzk9bQpDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQpD
T05GSUdfTkxTX0lTTzg4NTlfMTQ9bQpDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQpDT05GSUdf
TkxTX0tPSThfUj1tCkNPTkZJR19OTFNfS09JOF9VPW0KQ09ORklHX05MU19NQUNfUk9NQU49
bQpDT05GSUdfTkxTX01BQ19DRUxUSUM9bQpDT05GSUdfTkxTX01BQ19DRU5URVVSTz1tCkNP
TkZJR19OTFNfTUFDX0NST0FUSUFOPW0KQ09ORklHX05MU19NQUNfQ1lSSUxMSUM9bQpDT05G
SUdfTkxTX01BQ19HQUVMSUM9bQpDT05GSUdfTkxTX01BQ19HUkVFSz1tCkNPTkZJR19OTFNf
TUFDX0lDRUxBTkQ9bQpDT05GSUdfTkxTX01BQ19JTlVJVD1tCkNPTkZJR19OTFNfTUFDX1JP
TUFOSUFOPW0KQ09ORklHX05MU19NQUNfVFVSS0lTSD1tCkNPTkZJR19OTFNfVVRGOD1tCkNP
TkZJR19ETE09bQpDT05GSUdfRExNX0RFQlVHPXkKQ09ORklHX1VOSUNPREU9eQojIENPTkZJ
R19VTklDT0RFX05PUk1BTElaQVRJT05fU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdfSU9f
V1E9eQojIGVuZCBvZiBGaWxlIHN5c3RlbXMKCiMKIyBTZWN1cml0eSBvcHRpb25zCiMKQ09O
RklHX0tFWVM9eQpDT05GSUdfS0VZU19SRVFVRVNUX0NBQ0hFPXkKQ09ORklHX1BFUlNJU1RF
TlRfS0VZUklOR1M9eQpDT05GSUdfVFJVU1RFRF9LRVlTPW0KQ09ORklHX0VOQ1JZUFRFRF9L
RVlTPW0KQ09ORklHX0tFWV9ESF9PUEVSQVRJT05TPXkKQ09ORklHX0tFWV9OT1RJRklDQVRJ
T05TPXkKQ09ORklHX1NFQ1VSSVRZX0RNRVNHX1JFU1RSSUNUPXkKQ09ORklHX1NFQ1VSSVRZ
PXkKQ09ORklHX1NFQ1VSSVRZRlM9eQpDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CkNPTkZJ
R19QQUdFX1RBQkxFX0lTT0xBVElPTj15CkNPTkZJR19TRUNVUklUWV9JTkZJTklCQU5EPXkK
Q09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkK
IyBDT05GSUdfSU5URUxfVFhUIGlzIG5vdCBzZXQKQ09ORklHX0xTTV9NTUFQX01JTl9BRERS
PTY1NTM2CkNPTkZJR19IQVZFX0hBUkRFTkVEX1VTRVJDT1BZX0FMTE9DQVRPUj15CkNPTkZJ
R19IQVJERU5FRF9VU0VSQ09QWT15CkNPTkZJR19IQVJERU5FRF9VU0VSQ09QWV9GQUxMQkFD
Sz15CkNPTkZJR19GT1JUSUZZX1NPVVJDRT15CiMgQ09ORklHX1NUQVRJQ19VU0VSTU9ERUhF
TFBFUiBpcyBub3Qgc2V0CkNPTkZJR19TRUNVUklUWV9TRUxJTlVYPXkKQ09ORklHX1NFQ1VS
SVRZX1NFTElOVVhfQk9PVFBBUkFNPXkKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ESVNB
QkxFIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUD15CkNPTkZJ
R19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUUz15CkNPTkZJR19TRUNVUklUWV9TRUxJTlVY
X0NIRUNLUkVRUFJPVF9WQUxVRT0wCkNPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9I
QVNIX0JJVFM9OQpDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkU9
MjU2CkNPTkZJR19TRUNVUklUWV9TTUFDSz15CkNPTkZJR19TRUNVUklUWV9TTUFDS19CUklO
R1VQPXkKQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUj15CkNPTkZJR19TRUNVUklU
WV9TTUFDS19BUFBFTkRfU0lHTkFMUz15CkNPTkZJR19TRUNVUklUWV9UT01PWU89eQpDT05G
SUdfU0VDVVJJVFlfVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlk9MjA0OApDT05GSUdfU0VDVVJJ
VFlfVE9NT1lPX01BWF9BVURJVF9MT0c9MTAyNAojIENPTkZJR19TRUNVUklUWV9UT01PWU9f
T01JVF9VU0VSU1BBQ0VfTE9BREVSIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VSSVRZX1RPTU9Z
T19QT0xJQ1lfTE9BREVSPSIvdXNyL2Jpbi90b21veW8taW5pdCIKQ09ORklHX1NFQ1VSSVRZ
X1RPTU9ZT19BQ1RJVkFUSU9OX1RSSUdHRVI9Ii91c3IvbGliL3N5c3RlbWQvc3lzdGVtZCIK
IyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPX0lOU0VDVVJFX0JVSUxUSU5fU0VUVElORyBpcyBu
b3Qgc2V0CkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUj15CkNPTkZJR19TRUNVUklUWV9BUFBB
Uk1PUl9IQVNIPXkKQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVD15CiMg
Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX0xPQURQSU49eQpDT05GSUdfU0VDVVJJVFlfTE9BRFBJTl9FTkZPUkNFPXkKQ09ORklH
X1NFQ1VSSVRZX1lBTUE9eQpDT05GSUdfU0VDVVJJVFlfU0FGRVNFVElEPXkKQ09ORklHX1NF
Q1VSSVRZX0xPQ0tET1dOX0xTTT15CiMgQ09ORklHX1NFQ1VSSVRZX0xPQ0tET1dOX0xTTV9F
QVJMWSBpcyBub3Qgc2V0CkNPTkZJR19MT0NLX0RPV05fS0VSTkVMX0ZPUkNFX05PTkU9eQoj
IENPTkZJR19MT0NLX0RPV05fS0VSTkVMX0ZPUkNFX0lOVEVHUklUWSBpcyBub3Qgc2V0CiMg
Q09ORklHX0xPQ0tfRE9XTl9LRVJORUxfRk9SQ0VfQ09ORklERU5USUFMSVRZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU5URUdSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfSU1BX1NFQ1VSRV9B
TkRfT1JfVFJVU1RFRF9CT09UIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklU
WV9TRUxJTlVYIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBp
cyBub3Qgc2V0CiMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUiBpcyBub3Qgc2V0CkNPTkZJR19E
RUZBVUxUX1NFQ1VSSVRZX0RBQz15CkNPTkZJR19MU009ImxvY2tkb3duLHlhbWEiCgojCiMg
S2VybmVsIGhhcmRlbmluZyBvcHRpb25zCiMKQ09ORklHX0dDQ19QTFVHSU5fU1RSVUNUTEVB
Sz15CgojCiMgTWVtb3J5IGluaXRpYWxpemF0aW9uCiMKIyBDT05GSUdfSU5JVF9TVEFDS19O
T05FIGlzIG5vdCBzZXQKIyBDT05GSUdfR0NDX1BMVUdJTl9TVFJVQ1RMRUFLX1VTRVIgaXMg
bm90IHNldAojIENPTkZJR19HQ0NfUExVR0lOX1NUUlVDVExFQUtfQllSRUYgaXMgbm90IHNl
dApDT05GSUdfR0NDX1BMVUdJTl9TVFJVQ1RMRUFLX0JZUkVGX0FMTD15CiMgQ09ORklHX0dD
Q19QTFVHSU5fU1RSVUNUTEVBS19WRVJCT1NFIGlzIG5vdCBzZXQKIyBDT05GSUdfR0NDX1BM
VUdJTl9TVEFDS0xFQUsgaXMgbm90IHNldApDT05GSUdfSU5JVF9PTl9BTExPQ19ERUZBVUxU
X09OPXkKIyBDT05GSUdfSU5JVF9PTl9GUkVFX0RFRkFVTFRfT04gaXMgbm90IHNldAojIGVu
ZCBvZiBNZW1vcnkgaW5pdGlhbGl6YXRpb24KIyBlbmQgb2YgS2VybmVsIGhhcmRlbmluZyBv
cHRpb25zCiMgZW5kIG9mIFNlY3VyaXR5IG9wdGlvbnMKCkNPTkZJR19YT1JfQkxPQ0tTPW0K
Q09ORklHX0FTWU5DX0NPUkU9bQpDT05GSUdfQVNZTkNfTUVNQ1BZPW0KQ09ORklHX0FTWU5D
X1hPUj1tCkNPTkZJR19BU1lOQ19QUT1tCkNPTkZJR19BU1lOQ19SQUlENl9SRUNPVj1tCkNP
TkZJR19DUllQVE89eQoKIwojIENyeXB0byBjb3JlIG9yIGhlbHBlcgojCkNPTkZJR19DUllQ
VE9fQUxHQVBJPXkKQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKQ09ORklHX0NSWVBUT19BRUFE
PW0KQ09ORklHX0NSWVBUT19BRUFEMj15CkNPTkZJR19DUllQVE9fU0tDSVBIRVI9eQpDT05G
SUdfQ1JZUFRPX1NLQ0lQSEVSMj15CkNPTkZJR19DUllQVE9fSEFTSD15CkNPTkZJR19DUllQ
VE9fSEFTSDI9eQpDT05GSUdfQ1JZUFRPX1JORz15CkNPTkZJR19DUllQVE9fUk5HMj15CkNP
TkZJR19DUllQVE9fUk5HX0RFRkFVTFQ9bQpDT05GSUdfQ1JZUFRPX0FLQ0lQSEVSMj15CkNP
TkZJR19DUllQVE9fQUtDSVBIRVI9eQpDT05GSUdfQ1JZUFRPX0tQUDI9eQpDT05GSUdfQ1JZ
UFRPX0tQUD15CkNPTkZJR19DUllQVE9fQUNPTVAyPXkKQ09ORklHX0NSWVBUT19NQU5BR0VS
PXkKQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CkNPTkZJR19DUllQVE9fVVNFUj1tCkNPTkZJ
R19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTPXkKQ09ORklHX0NSWVBUT19HRjEyOE1V
TD1tCkNPTkZJR19DUllQVE9fTlVMTD1tCkNPTkZJR19DUllQVE9fTlVMTDI9eQpDT05GSUdf
Q1JZUFRPX1BDUllQVD1tCkNPTkZJR19DUllQVE9fQ1JZUFREPW0KQ09ORklHX0NSWVBUT19B
VVRIRU5DPW0KQ09ORklHX0NSWVBUT19URVNUPW0KQ09ORklHX0NSWVBUT19TSU1EPW0KQ09O
RklHX0NSWVBUT19FTkdJTkU9bQoKIwojIFB1YmxpYy1rZXkgY3J5cHRvZ3JhcGh5CiMKQ09O
RklHX0NSWVBUT19SU0E9eQpDT05GSUdfQ1JZUFRPX0RIPXkKQ09ORklHX0NSWVBUT19FQ0M9
bQpDT05GSUdfQ1JZUFRPX0VDREg9bQpDT05GSUdfQ1JZUFRPX0VDUkRTQT1tCkNPTkZJR19D
UllQVE9fU00yPW0KQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5PW0KQ09ORklHX0NSWVBUT19D
VVJWRTI1NTE5X1g4Nj1tCgojCiMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNz
b2NpYXRlZCBEYXRhCiMKQ09ORklHX0NSWVBUT19DQ009bQpDT05GSUdfQ1JZUFRPX0dDTT1t
CkNPTkZJR19DUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNT1tCkNPTkZJR19DUllQVE9fQUVHSVMx
Mjg9bQpDT05GSUdfQ1JZUFRPX0FFR0lTMTI4X0FFU05JX1NTRTI9bQpDT05GSUdfQ1JZUFRP
X1NFUUlWPW0KQ09ORklHX0NSWVBUT19FQ0hBSU5JVj1tCgojCiMgQmxvY2sgbW9kZXMKIwpD
T05GSUdfQ1JZUFRPX0NCQz1tCkNPTkZJR19DUllQVE9fQ0ZCPW0KQ09ORklHX0NSWVBUT19D
VFI9eQpDT05GSUdfQ1JZUFRPX0NUUz1tCkNPTkZJR19DUllQVE9fRUNCPW0KQ09ORklHX0NS
WVBUT19MUlc9bQpDT05GSUdfQ1JZUFRPX09GQj1tCkNPTkZJR19DUllQVE9fUENCQz1tCkNP
TkZJR19DUllQVE9fWFRTPW0KQ09ORklHX0NSWVBUT19LRVlXUkFQPW0KQ09ORklHX0NSWVBU
T19OSFBPTFkxMzA1PW0KQ09ORklHX0NSWVBUT19OSFBPTFkxMzA1X1NTRTI9bQpDT05GSUdf
Q1JZUFRPX05IUE9MWTEzMDVfQVZYMj1tCkNPTkZJR19DUllQVE9fQURJQU5UVU09bQpDT05G
SUdfQ1JZUFRPX0VTU0lWPW0KCiMKIyBIYXNoIG1vZGVzCiMKQ09ORklHX0NSWVBUT19DTUFD
PW0KQ09ORklHX0NSWVBUT19ITUFDPXkKQ09ORklHX0NSWVBUT19YQ0JDPW0KQ09ORklHX0NS
WVBUT19WTUFDPW0KCiMKIyBEaWdlc3QKIwpDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCkNPTkZJ
R19DUllQVE9fQ1JDMzJDX0lOVEVMPW0KQ09ORklHX0NSWVBUT19DUkMzMj1tCkNPTkZJR19D
UllQVE9fQ1JDMzJfUENMTVVMPW0KQ09ORklHX0NSWVBUT19YWEhBU0g9bQpDT05GSUdfQ1JZ
UFRPX0JMQUtFMkI9bQpDT05GSUdfQ1JZUFRPX0JMQUtFMlM9bQpDT05GSUdfQ1JZUFRPX0JM
QUtFMlNfWDg2PW0KQ09ORklHX0NSWVBUT19DUkNUMTBESUY9eQpDT05GSUdfQ1JZUFRPX0NS
Q1QxMERJRl9QQ0xNVUw9bQpDT05GSUdfQ1JZUFRPX0dIQVNIPW0KQ09ORklHX0NSWVBUT19Q
T0xZMTMwNT1tCkNPTkZJR19DUllQVE9fUE9MWTEzMDVfWDg2XzY0PW0KQ09ORklHX0NSWVBU
T19NRDQ9bQpDT05GSUdfQ1JZUFRPX01ENT15CkNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9
bQpDT05GSUdfQ1JZUFRPX1JNRDE2MD1tCkNPTkZJR19DUllQVE9fU0hBMT15CkNPTkZJR19D
UllQVE9fU0hBMV9TU1NFMz1tCkNPTkZJR19DUllQVE9fU0hBMjU2X1NTU0UzPW0KQ09ORklH
X0NSWVBUT19TSEE1MTJfU1NTRTM9bQpDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CkNPTkZJR19D
UllQVE9fU0hBNTEyPXkKQ09ORklHX0NSWVBUT19TSEEzPW0KQ09ORklHX0NSWVBUT19TTTM9
bQpDT05GSUdfQ1JZUFRPX1NUUkVFQk9HPW0KQ09ORklHX0NSWVBUT19XUDUxMj1tCkNPTkZJ
R19DUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUw9bQoKIwojIENpcGhlcnMKIwpDT05GSUdf
Q1JZUFRPX0FFUz15CkNPTkZJR19DUllQVE9fQUVTX1RJPW0KQ09ORklHX0NSWVBUT19BRVNf
TklfSU5URUw9bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KQ09ORklHX0NSWVBUT19CTE9X
RklTSF9DT01NT049bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIX1g4Nl82ND1tCkNPTkZJR19D
UllQVE9fQ0FNRUxMSUE9bQpDT05GSUdfQ1JZUFRPX0NBTUVMTElBX1g4Nl82ND1tCkNPTkZJ
R19DUllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fQ0FN
RUxMSUFfQUVTTklfQVZYMl9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX0NBU1RfQ09NTU9OPW0K
Q09ORklHX0NSWVBUT19DQVNUNT1tCkNPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82ND1t
CkNPTkZJR19DUllQVE9fQ0FTVDY9bQpDT05GSUdfQ1JZUFRPX0NBU1Q2X0FWWF9YODZfNjQ9
bQpDT05GSUdfQ1JZUFRPX0RFUz1tCkNPTkZJR19DUllQVE9fREVTM19FREVfWDg2XzY0PW0K
Q09ORklHX0NSWVBUT19GQ1JZUFQ9bQpDT05GSUdfQ1JZUFRPX0NIQUNIQTIwPW0KQ09ORklH
X0NSWVBUT19DSEFDSEEyMF9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQpDT05G
SUdfQ1JZUFRPX1NFUlBFTlRfU1NFMl9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX1NFUlBFTlRf
QVZYX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fU0VSUEVOVF9BVlgyX1g4Nl82ND1tCkNPTkZJ
R19DUllQVE9fU000PW0KQ09ORklHX0NSWVBUT19UV09GSVNIPW0KQ09ORklHX0NSWVBUT19U
V09GSVNIX0NPTU1PTj1tCkNPTkZJR19DUllQVE9fVFdPRklTSF9YODZfNjQ9bQpDT05GSUdf
Q1JZUFRPX1RXT0ZJU0hfWDg2XzY0XzNXQVk9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQVZY
X1g4Nl82ND1tCgojCiMgQ29tcHJlc3Npb24KIwpDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQpD
T05GSUdfQ1JZUFRPX0xaTz1tCkNPTkZJR19DUllQVE9fODQyPW0KQ09ORklHX0NSWVBUT19M
WjQ9eQpDT05GSUdfQ1JZUFRPX0xaNEhDPW0KQ09ORklHX0NSWVBUT19aU1REPXkKCiMKIyBS
YW5kb20gTnVtYmVyIEdlbmVyYXRpb24KIwpDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQpD
T05GSUdfQ1JZUFRPX0RSQkdfTUVOVT1tCkNPTkZJR19DUllQVE9fRFJCR19ITUFDPXkKQ09O
RklHX0NSWVBUT19EUkJHX0hBU0g9eQpDT05GSUdfQ1JZUFRPX0RSQkdfQ1RSPXkKQ09ORklH
X0NSWVBUT19EUkJHPW0KQ09ORklHX0NSWVBUT19KSVRURVJFTlRST1BZPXkKQ09ORklHX0NS
WVBUT19VU0VSX0FQST1tCkNPTkZJR19DUllQVE9fVVNFUl9BUElfSEFTSD1tCkNPTkZJR19D
UllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQpDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1JORz1t
CiMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9STkdfQ0FWUCBpcyBub3Qgc2V0CkNPTkZJR19D
UllQVE9fVVNFUl9BUElfQUVBRD1tCiMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9FTkFCTEVf
T0JTT0xFVEUgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX1NUQVRTPXkKQ09ORklHX0NSWVBU
T19IQVNIX0lORk89eQoKIwojIENyeXB0byBsaWJyYXJ5IHJvdXRpbmVzCiMKQ09ORklHX0NS
WVBUT19MSUJfQUVTPXkKQ09ORklHX0NSWVBUT19MSUJfQVJDND1tCkNPTkZJR19DUllQVE9f
QVJDSF9IQVZFX0xJQl9CTEFLRTJTPW0KQ09ORklHX0NSWVBUT19MSUJfQkxBS0UyU19HRU5F
UklDPW0KQ09ORklHX0NSWVBUT19MSUJfQkxBS0UyUz1tCkNPTkZJR19DUllQVE9fQVJDSF9I
QVZFX0xJQl9DSEFDSEE9bQpDT05GSUdfQ1JZUFRPX0xJQl9DSEFDSEFfR0VORVJJQz1tCkNP
TkZJR19DUllQVE9fTElCX0NIQUNIQT1tCkNPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9D
VVJWRTI1NTE5PW0KQ09ORklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOV9HRU5FUklDPW0KQ09O
RklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOT1tCkNPTkZJR19DUllQVE9fTElCX0RFUz1tCkNP
TkZJR19DUllQVE9fTElCX1BPTFkxMzA1X1JTSVpFPTExCkNPTkZJR19DUllQVE9fQVJDSF9I
QVZFX0xJQl9QT0xZMTMwNT1tCkNPTkZJR19DUllQVE9fTElCX1BPTFkxMzA1X0dFTkVSSUM9
bQpDT05GSUdfQ1JZUFRPX0xJQl9QT0xZMTMwNT1tCkNPTkZJR19DUllQVE9fTElCX0NIQUNI
QTIwUE9MWTEzMDU9bQpDT05GSUdfQ1JZUFRPX0xJQl9TSEEyNTY9eQpDT05GSUdfQ1JZUFRP
X0hXPXkKQ09ORklHX0NSWVBUT19ERVZfUEFETE9DSz1tCkNPTkZJR19DUllQVE9fREVWX1BB
RExPQ0tfQUVTPW0KQ09ORklHX0NSWVBUT19ERVZfUEFETE9DS19TSEE9bQpDT05GSUdfQ1JZ
UFRPX0RFVl9BVE1FTF9JMkM9bQpDT05GSUdfQ1JZUFRPX0RFVl9BVE1FTF9FQ0M9bQpDT05G
SUdfQ1JZUFRPX0RFVl9BVE1FTF9TSEEyMDRBPW0KQ09ORklHX0NSWVBUT19ERVZfQ0NQPXkK
Q09ORklHX0NSWVBUT19ERVZfQ0NQX0REPW0KQ09ORklHX0NSWVBUT19ERVZfU1BfQ0NQPXkK
Q09ORklHX0NSWVBUT19ERVZfQ0NQX0NSWVBUTz1tCkNPTkZJR19DUllQVE9fREVWX1NQX1BT
UD15CkNPTkZJR19DUllQVE9fREVWX0NDUF9ERUJVR0ZTPXkKQ09ORklHX0NSWVBUT19ERVZf
UUFUPW0KQ09ORklHX0NSWVBUT19ERVZfUUFUX0RIODk1eENDPW0KQ09ORklHX0NSWVBUT19E
RVZfUUFUX0MzWFhYPW0KQ09ORklHX0NSWVBUT19ERVZfUUFUX0M2Mlg9bQpDT05GSUdfQ1JZ
UFRPX0RFVl9RQVRfNFhYWD1tCkNPTkZJR19DUllQVE9fREVWX1FBVF9ESDg5NXhDQ1ZGPW0K
Q09ORklHX0NSWVBUT19ERVZfUUFUX0MzWFhYVkY9bQpDT05GSUdfQ1JZUFRPX0RFVl9RQVRf
QzYyWFZGPW0KQ09ORklHX0NSWVBUT19ERVZfTklUUk9YPW0KQ09ORklHX0NSWVBUT19ERVZf
TklUUk9YX0NOTjU1WFg9bQpDT05GSUdfQ1JZUFRPX0RFVl9DSEVMU0lPPW0KQ09ORklHX0NS
WVBUT19ERVZfVklSVElPPW0KQ09ORklHX0NSWVBUT19ERVZfU0FGRVhDRUw9bQpDT05GSUdf
Q1JZUFRPX0RFVl9BTUxPR0lDX0dYTD1tCkNPTkZJR19DUllQVE9fREVWX0FNTE9HSUNfR1hM
X0RFQlVHPXkKQ09ORklHX0FTWU1NRVRSSUNfS0VZX1RZUEU9eQpDT05GSUdfQVNZTU1FVFJJ
Q19QVUJMSUNfS0VZX1NVQlRZUEU9eQpDT05GSUdfQVNZTU1FVFJJQ19UUE1fS0VZX1NVQlRZ
UEU9bQpDT05GSUdfWDUwOV9DRVJUSUZJQ0FURV9QQVJTRVI9eQpDT05GSUdfUEtDUzhfUFJJ
VkFURV9LRVlfUEFSU0VSPW0KQ09ORklHX1RQTV9LRVlfUEFSU0VSPW0KQ09ORklHX1BLQ1M3
X01FU1NBR0VfUEFSU0VSPXkKIyBDT05GSUdfUEtDUzdfVEVTVF9LRVkgaXMgbm90IHNldApD
T05GSUdfU0lHTkVEX1BFX0ZJTEVfVkVSSUZJQ0FUSU9OPXkKCiMKIyBDZXJ0aWZpY2F0ZXMg
Zm9yIHNpZ25hdHVyZSBjaGVja2luZwojCkNPTkZJR19NT0RVTEVfU0lHX0tFWT0iY2VydHMv
c2lnbmluZ19rZXkucGVtIgpDT05GSUdfU1lTVEVNX1RSVVNURURfS0VZUklORz15CkNPTkZJ
R19TWVNURU1fVFJVU1RFRF9LRVlTPSIiCiMgQ09ORklHX1NZU1RFTV9FWFRSQV9DRVJUSUZJ
Q0FURSBpcyBub3Qgc2V0CkNPTkZJR19TRUNPTkRBUllfVFJVU1RFRF9LRVlSSU5HPXkKQ09O
RklHX1NZU1RFTV9CTEFDS0xJU1RfS0VZUklORz15CkNPTkZJR19TWVNURU1fQkxBQ0tMSVNU
X0hBU0hfTElTVD0iIgojIGVuZCBvZiBDZXJ0aWZpY2F0ZXMgZm9yIHNpZ25hdHVyZSBjaGVj
a2luZwoKQ09ORklHX0JJTkFSWV9QUklOVEY9eQoKIwojIExpYnJhcnkgcm91dGluZXMKIwpD
T05GSUdfUkFJRDZfUFE9bQojIENPTkZJR19SQUlENl9QUV9CRU5DSE1BUksgaXMgbm90IHNl
dApDT05GSUdfTElORUFSX1JBTkdFUz15CkNPTkZJR19QQUNLSU5HPXkKQ09ORklHX0JJVFJF
VkVSU0U9eQpDT05GSUdfR0VORVJJQ19TVFJOQ1BZX0ZST01fVVNFUj15CkNPTkZJR19HRU5F
UklDX1NUUk5MRU5fVVNFUj15CkNPTkZJR19HRU5FUklDX05FVF9VVElMUz15CkNPTkZJR19H
RU5FUklDX0ZJTkRfRklSU1RfQklUPXkKQ09ORklHX0NPUkRJQz1tCiMgQ09ORklHX1BSSU1F
X05VTUJFUlMgaXMgbm90IHNldApDT05GSUdfUkFUSU9OQUw9eQpDT05GSUdfR0VORVJJQ19Q
Q0lfSU9NQVA9eQpDT05GSUdfR0VORVJJQ19JT01BUD15CkNPTkZJR19BUkNIX1VTRV9DTVBY
Q0hHX0xPQ0tSRUY9eQpDT05GSUdfQVJDSF9IQVNfRkFTVF9NVUxUSVBMSUVSPXkKQ09ORklH
X0FSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OUz15CkNPTkZJR19DUkNfQ0NJVFQ9eQpDT05GSUdf
Q1JDMTY9bQpDT05GSUdfQ1JDX1QxMERJRj15CkNPTkZJR19DUkNfSVRVX1Q9bQpDT05GSUdf
Q1JDMzI9eQojIENPTkZJR19DUkMzMl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNPTkZJR19DUkMz
Ml9TTElDRUJZOD15CiMgQ09ORklHX0NSQzMyX1NMSUNFQlk0IGlzIG5vdCBzZXQKIyBDT05G
SUdfQ1JDMzJfU0FSV0FURSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzMyX0JJVCBpcyBub3Qg
c2V0CkNPTkZJR19DUkM2ND1tCkNPTkZJR19DUkM0PW0KQ09ORklHX0NSQzc9bQpDT05GSUdf
TElCQ1JDMzJDPW0KQ09ORklHX0NSQzg9bQpDT05GSUdfWFhIQVNIPXkKIyBDT05GSUdfUkFO
RE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdfODQyX0NPTVBSRVNTPW0KQ09ORklH
Xzg0Ml9ERUNPTVBSRVNTPW0KQ09ORklHX1pMSUJfSU5GTEFURT15CkNPTkZJR19aTElCX0RF
RkxBVEU9eQpDT05GSUdfTFpPX0NPTVBSRVNTPXkKQ09ORklHX0xaT19ERUNPTVBSRVNTPXkK
Q09ORklHX0xaNF9DT01QUkVTUz15CkNPTkZJR19MWjRIQ19DT01QUkVTUz15CkNPTkZJR19M
WjRfREVDT01QUkVTUz15CkNPTkZJR19aU1REX0NPTVBSRVNTPXkKQ09ORklHX1pTVERfREVD
T01QUkVTUz15CkNPTkZJR19YWl9ERUM9eQpDT05GSUdfWFpfREVDX1g4Nj15CkNPTkZJR19Y
Wl9ERUNfUE9XRVJQQz15CkNPTkZJR19YWl9ERUNfSUE2ND15CkNPTkZJR19YWl9ERUNfQVJN
PXkKQ09ORklHX1haX0RFQ19BUk1USFVNQj15CkNPTkZJR19YWl9ERUNfU1BBUkM9eQpDT05G
SUdfWFpfREVDX0JDSj15CiMgQ09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklH
X0RFQ09NUFJFU1NfR1pJUD15CkNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RF
Q09NUFJFU1NfTFpNQT15CkNPTkZJR19ERUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJF
U1NfTFpPPXkKQ09ORklHX0RFQ09NUFJFU1NfTFo0PXkKQ09ORklHX0RFQ09NUFJFU1NfWlNU
RD15CkNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CkNPTkZJR19SRUVEX1NPTE9NT049bQpD
T05GSUdfUkVFRF9TT0xPTU9OX0VOQzg9eQpDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzg9eQpD
T05GSUdfQkNIPW0KQ09ORklHX1RFWFRTRUFSQ0g9eQpDT05GSUdfVEVYVFNFQVJDSF9LTVA9
bQpDT05GSUdfVEVYVFNFQVJDSF9CTT1tCkNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCkNPTkZJ
R19CVFJFRT15CkNPTkZJR19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX1hBUlJBWV9NVUxUST15
CkNPTkZJR19BU1NPQ0lBVElWRV9BUlJBWT15CkNPTkZJR19IQVNfSU9NRU09eQpDT05GSUdf
SEFTX0lPUE9SVF9NQVA9eQpDT05GSUdfSEFTX0RNQT15CkNPTkZJR19ETUFfT1BTPXkKQ09O
RklHX05FRURfU0dfRE1BX0xFTkdUSD15CkNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQpD
T05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUPXkKQ09ORklHX0FSQ0hfSEFTX0ZPUkNFX0RN
QV9VTkVOQ1JZUFRFRD15CkNPTkZJR19TV0lPVExCPXkKQ09ORklHX0RNQV9DT0hFUkVOVF9Q
T09MPXkKQ09ORklHX0RNQV9DTUE9eQojIENPTkZJR19ETUFfUEVSTlVNQV9DTUEgaXMgbm90
IHNldAoKIwojIERlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOgojCkNPTkZJ
R19DTUFfU0laRV9NQllURVM9MApDT05GSUdfQ01BX1NJWkVfU0VMX01CWVRFUz15CiMgQ09O
RklHX0NNQV9TSVpFX1NFTF9QRVJDRU5UQUdFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ01BX1NJ
WkVfU0VMX01JTiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNQV9TSVpFX1NFTF9NQVggaXMgbm90
IHNldApDT05GSUdfQ01BX0FMSUdOTUVOVD04CiMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMg
bm90IHNldAojIENPTkZJR19ETUFfTUFQX0JFTkNITUFSSyBpcyBub3Qgc2V0CkNPTkZJR19T
R0xfQUxMT0M9eQpDT05GSUdfQ0hFQ0tfU0lHTkFUVVJFPXkKQ09ORklHX0NQVV9STUFQPXkK
Q09ORklHX0RRTD15CkNPTkZJR19HTE9CPXkKIyBDT05GSUdfR0xPQl9TRUxGVEVTVCBpcyBu
b3Qgc2V0CkNPTkZJR19OTEFUVFI9eQpDT05GSUdfTFJVX0NBQ0hFPW0KQ09ORklHX0NMWl9U
QUI9eQpDT05GSUdfSVJRX1BPTEw9eQpDT05GSUdfTVBJTElCPXkKQ09ORklHX0RJTUxJQj15
CkNPTkZJR19PSURfUkVHSVNUUlk9eQpDT05GSUdfVUNTMl9TVFJJTkc9eQpDT05GSUdfSEFW
RV9HRU5FUklDX1ZEU089eQpDT05GSUdfR0VORVJJQ19HRVRUSU1FT0ZEQVk9eQpDT05GSUdf
R0VORVJJQ19WRFNPX1RJTUVfTlM9eQpDT05GSUdfRk9OVF9TVVBQT1JUPXkKQ09ORklHX0ZP
TlRTPXkKIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldApDT05GSUdfRk9OVF84eDE2PXkK
IyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKIyBDT05GSUdfRk9OVF83eDE0IGlzIG5v
dCBzZXQKIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAojIENPTkZJR19GT05U
X0FDT1JOXzh4OCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNl
dAojIENPTkZJR19GT05UXzZ4MTAgaXMgbm90IHNldAojIENPTkZJR19GT05UXzEweDE4IGlz
IG5vdCBzZXQKIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKIyBDT05GSUdfRk9O
VF9TVU4xMngyMiBpcyBub3Qgc2V0CkNPTkZJR19GT05UX1RFUjE2eDMyPXkKIyBDT05GSUdf
Rk9OVF82eDggaXMgbm90IHNldApDT05GSUdfU0dfUE9PTD15CkNPTkZJR19BUkNIX0hBU19Q
TUVNX0FQST15CkNPTkZJR19NRU1SRUdJT049eQpDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19G
TFVTSENBQ0hFPXkKQ09ORklHX0FSQ0hfSEFTX0NPUFlfTUM9eQpDT05GSUdfQVJDSF9TVEFD
S1dBTEs9eQpDT05GSUdfU0JJVE1BUD15CkNPTkZJR19QQVJNQU49bQpDT05GSUdfT0JKQUdH
PW0KIyBDT05GSUdfU1RSSU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKIyBlbmQgb2YgTGlicmFy
eSByb3V0aW5lcwoKQ09ORklHX1BMRE1GVz15CgojCiMgS2VybmVsIGhhY2tpbmcKIwoKIwoj
IHByaW50ayBhbmQgZG1lc2cgb3B0aW9ucwojCkNPTkZJR19QUklOVEtfVElNRT15CiMgQ09O
RklHX1BSSU5US19DQUxMRVIgaXMgbm90IHNldApDT05GSUdfQ09OU09MRV9MT0dMRVZFTF9E
RUZBVUxUPTQKQ09ORklHX0NPTlNPTEVfTE9HTEVWRUxfUVVJRVQ9MQpDT05GSUdfTUVTU0FH
RV9MT0dMRVZFTF9ERUZBVUxUPTQKQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZPXkKQ09ORklH
X0RZTkFNSUNfREVCVUc9eQpDT05GSUdfRFlOQU1JQ19ERUJVR19DT1JFPXkKQ09ORklHX1NZ
TUJPTElDX0VSUk5BTUU9eQpDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiMgZW5kIG9mIHBy
aW50ayBhbmQgZG1lc2cgb3B0aW9ucwoKIwojIENvbXBpbGUtdGltZSBjaGVja3MgYW5kIGNv
bXBpbGVyIG9wdGlvbnMKIwpDT05GSUdfREVCVUdfSU5GTz15CiMgQ09ORklHX0RFQlVHX0lO
Rk9fUkVEVUNFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fQ09NUFJFU1NFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fU1BMSVQgaXMgbm90IHNldAojIENPTkZJ
R19ERUJVR19JTkZPX0RXQVJGX1RPT0xDSEFJTl9ERUZBVUxUIGlzIG5vdCBzZXQKQ09ORklH
X0RFQlVHX0lORk9fRFdBUkY0PXkKQ09ORklHX0RFQlVHX0lORk9fQlRGPXkKIyBDT05GSUdf
R0RCX1NDUklQVFMgaXMgbm90IHNldApDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CkNPTkZJR19T
VFJJUF9BU01fU1lNUz15CiMgQ09ORklHX1JFQURBQkxFX0FTTSBpcyBub3Qgc2V0CiMgQ09O
RklHX0hFQURFUlNfSU5TVEFMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1NFQ1RJT05f
TUlTTUFUQ0ggaXMgbm90IHNldApDT05GSUdfU0VDVElPTl9NSVNNQVRDSF9XQVJOX09OTFk9
eQpDT05GSUdfU1RBQ0tfVkFMSURBVElPTj15CiMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtf
UEVSX0NQVSBpcyBub3Qgc2V0CiMgZW5kIG9mIENvbXBpbGUtdGltZSBjaGVja3MgYW5kIGNv
bXBpbGVyIG9wdGlvbnMKCiMKIyBHZW5lcmljIEtlcm5lbCBEZWJ1Z2dpbmcgSW5zdHJ1bWVu
dHMKIwpDT05GSUdfTUFHSUNfU1lTUlE9eQpDT05GSUdfTUFHSUNfU1lTUlFfREVGQVVMVF9F
TkFCTEU9MHgwCkNPTkZJR19NQUdJQ19TWVNSUV9TRVJJQUw9eQpDT05GSUdfTUFHSUNfU1lT
UlFfU0VSSUFMX1NFUVVFTkNFPSIiCkNPTkZJR19ERUJVR19GUz15CkNPTkZJR19ERUJVR19G
U19BTExPV19BTEw9eQojIENPTkZJR19ERUJVR19GU19ESVNBTExPV19NT1VOVCBpcyBub3Qg
c2V0CiMgQ09ORklHX0RFQlVHX0ZTX0FMTE9XX05PTkUgaXMgbm90IHNldApDT05GSUdfSEFW
RV9BUkNIX0tHREI9eQojIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFT
X1VCU0FOX1NBTklUSVpFX0FMTD15CiMgQ09ORklHX1VCU0FOIGlzIG5vdCBzZXQKQ09ORklH
X0hBVkVfQVJDSF9LQ1NBTj15CkNPTkZJR19IQVZFX0tDU0FOX0NPTVBJTEVSPXkKIyBDT05G
SUdfS0NTQU4gaXMgbm90IHNldAojIGVuZCBvZiBHZW5lcmljIEtlcm5lbCBEZWJ1Z2dpbmcg
SW5zdHJ1bWVudHMKCkNPTkZJR19ERUJVR19LRVJORUw9eQojIENPTkZJR19ERUJVR19NSVND
IGlzIG5vdCBzZXQKCiMKIyBNZW1vcnkgRGVidWdnaW5nCiMKIyBDT05GSUdfUEFHRV9FWFRF
TlNJT04gaXMgbm90IHNldAojIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAoj
IENPTkZJR19QQUdFX09XTkVSIGlzIG5vdCBzZXQKQ09ORklHX1BBR0VfUE9JU09OSU5HPXkK
IyBDT05GSUdfREVCVUdfUEFHRV9SRUYgaXMgbm90IHNldApDT05GSUdfREVCVUdfUk9EQVRB
X1RFU1Q9eQpDT05GSUdfQVJDSF9IQVNfREVCVUdfV1g9eQpDT05GSUdfREVCVUdfV1g9eQpD
T05GSUdfR0VORVJJQ19QVERVTVA9eQpDT05GSUdfUFREVU1QX0NPUkU9eQojIENPTkZJR19Q
VERVTVBfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90
IHNldAojIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKIyBDT05GSUdfU0xVQl9T
VEFUUyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVHX0tNRU1MRUFLPXkKIyBDT05GSUdf
REVCVUdfS01FTUxFQUsgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBp
cyBub3Qgc2V0CkNPTkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0s9eQpDT05GSUdfQVJDSF9I
QVNfREVCVUdfVk1fUEdUQUJMRT15CiMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIyBD
T05GSUdfREVCVUdfVk1fUEdUQUJMRSBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX0hBU19ERUJV
R19WSVJUVUFMPXkKIyBDT05GSUdfREVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJR19E
RUJVR19NRU1PUllfSU5JVD15CiMgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qg
c2V0CkNPTkZJR19BUkNIX1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQPXkKIyBDT05G
SUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVAgaXMgbm90IHNldApDT05GSUdfSEFWRV9B
UkNIX0tBU0FOPXkKQ09ORklHX0hBVkVfQVJDSF9LQVNBTl9WTUFMTE9DPXkKQ09ORklHX0ND
X0hBU19LQVNBTl9HRU5FUklDPXkKQ09ORklHX0NDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVf
QUREUkVTUz15CiMgQ09ORklHX0tBU0FOIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfQVJDSF9L
RkVOQ0U9eQpDT05GSUdfS0ZFTkNFPXkKQ09ORklHX0tGRU5DRV9TVEFUSUNfS0VZUz15CkNP
TkZJR19LRkVOQ0VfU0FNUExFX0lOVEVSVkFMPTAKQ09ORklHX0tGRU5DRV9OVU1fT0JKRUNU
Uz0yNTUKQ09ORklHX0tGRU5DRV9TVFJFU1NfVEVTVF9GQVVMVFM9MAojIGVuZCBvZiBNZW1v
cnkgRGVidWdnaW5nCgpDT05GSUdfREVCVUdfU0hJUlE9eQoKIwojIERlYnVnIE9vcHMsIExv
Y2t1cHMgYW5kIEhhbmdzCiMKIyBDT05GSUdfUEFOSUNfT05fT09QUyBpcyBub3Qgc2V0CkNP
TkZJR19QQU5JQ19PTl9PT1BTX1ZBTFVFPTAKQ09ORklHX1BBTklDX1RJTUVPVVQ9MApDT05G
SUdfTE9DS1VQX0RFVEVDVE9SPXkKQ09ORklHX1NPRlRMT0NLVVBfREVURUNUT1I9eQojIENP
TkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CkNPTkZJR19CT09U
UEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCkNPTkZJR19IQVJETE9DS1VQX0RFVEVD
VE9SX1BFUkY9eQpDT05GSUdfSEFSRExPQ0tVUF9DSEVDS19USU1FU1RBTVA9eQpDT05GSUdf
SEFSRExPQ0tVUF9ERVRFQ1RPUj15CiMgQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BB
TklDIGlzIG5vdCBzZXQKQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDX1ZBTFVF
PTAKQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpDT05GSUdfREVGQVVMVF9IVU5HX1RBU0tf
VElNRU9VVD0xMjAKIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qg
c2V0CkNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIyBDT05GSUdf
V1FfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19URVNUX0xPQ0tVUCBpcyBub3Qgc2V0
CiMgZW5kIG9mIERlYnVnIE9vcHMsIExvY2t1cHMgYW5kIEhhbmdzCgojCiMgU2NoZWR1bGVy
IERlYnVnZ2luZwojCkNPTkZJR19TQ0hFRF9ERUJVRz15CkNPTkZJR19TQ0hFRF9JTkZPPXkK
Q09ORklHX1NDSEVEU1RBVFM9eQojIGVuZCBvZiBTY2hlZHVsZXIgRGVidWdnaW5nCgojIENP
TkZJR19ERUJVR19USU1FS0VFUElORyBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1BSRUVN
UFQgaXMgbm90IHNldAoKIwojIExvY2sgRGVidWdnaW5nIChzcGlubG9ja3MsIG11dGV4ZXMs
IGV0Yy4uLikKIwpDT05GSUdfTE9DS19ERUJVR0dJTkdfU1VQUE9SVD15CiMgQ09ORklHX1BS
T1ZFX0xPQ0tJTkcgaXMgbm90IHNldAojIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAoj
IENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfU1BJ
TkxPQ0sgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKIyBD
T05GSUdfREVCVUdfV1dfTVVURVhfU0xPV1BBVEggaXMgbm90IHNldAojIENPTkZJR19ERUJV
R19SV1NFTVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQIGlzIG5vdCBzZXQKIyBDT05GSUdfREVC
VUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9DS19UT1JU
VVJFX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19XV19NVVRFWF9TRUxGVEVTVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NDRl9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19DU0Rf
TE9DS19XQUlUX0RFQlVHIGlzIG5vdCBzZXQKIyBlbmQgb2YgTG9jayBEZWJ1Z2dpbmcgKHNw
aW5sb2NrcywgbXV0ZXhlcywgZXRjLi4uKQoKIyBDT05GSUdfREVCVUdfSVJRRkxBR1MgaXMg
bm90IHNldApDT05GSUdfU1RBQ0tUUkFDRT15CiMgQ09ORklHX1dBUk5fQUxMX1VOU0VFREVE
X1JBTkRPTSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAoK
IwojIERlYnVnIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMKIwpDT05GSUdfREVCVUdfTElTVD15
CiMgQ09ORklHX0RFQlVHX1BMSVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfU0cgaXMg
bm90IHNldAojIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAojIENPTkZJR19C
VUdfT05fREFUQV9DT1JSVVBUSU9OIGlzIG5vdCBzZXQKIyBlbmQgb2YgRGVidWcga2VybmVs
IGRhdGEgc3RydWN0dXJlcwoKIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNl
dAoKIwojIFJDVSBEZWJ1Z2dpbmcKIwojIENPTkZJR19SQ1VfU0NBTEVfVEVTVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SQ1Vf
UkVGX1NDQUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1FT1VU
PTYwCiMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiMgQ09ORklHX1JDVV9FUVNfREVC
VUcgaXMgbm90IHNldAojIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCBpcyBub3Qg
c2V0CiMgZW5kIG9mIFJDVSBEZWJ1Z2dpbmcKCiMgQ09ORklHX0RFQlVHX1dRX0ZPUkNFX1JS
X0NQVSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1BVX0hPVFBMVUdfU1RBVEVfQ09OVFJPTCBpcyBub3Qgc2V0CkNPTkZJ
R19MQVRFTkNZVE9QPXkKQ09ORklHX1VTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQ09ORklH
X05PUF9UUkFDRVI9eQpDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfSEFW
RV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15
CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUz15CkNPTkZJR19IQVZFX0RZ
TkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTPXkKQ09ORklHX0hBVkVfRFlOQU1JQ19G
VFJBQ0VfV0lUSF9BUkdTPXkKQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpD
T05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKQ09ORklHX0hBVkVfRkVOVFJZPXkK
Q09ORklHX0hBVkVfT0JKVE9PTF9NQ09VTlQ9eQpDT05GSUdfSEFWRV9DX1JFQ09SRE1DT1VO
VD15CkNPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKQ09ORklHX1RSQUNFX0NMT0NLPXkKQ09O
RklHX1JJTkdfQlVGRkVSPXkKQ09ORklHX0VWRU5UX1RSQUNJTkc9eQpDT05GSUdfQ09OVEVY
VF9TV0lUQ0hfVFJBQ0VSPXkKQ09ORklHX1RSQUNJTkc9eQpDT05GSUdfR0VORVJJQ19UUkFD
RVI9eQpDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKQ09ORklHX0ZUUkFDRT15CkNPTkZJR19C
T09UVElNRV9UUkFDSU5HPXkKQ09ORklHX0ZVTkNUSU9OX1RSQUNFUj15CkNPTkZJR19GVU5D
VElPTl9HUkFQSF9UUkFDRVI9eQpDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQpDT05GSUdfRFlO
QU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElS
RUNUX0NBTExTPXkKQ09ORklHX0ZVTkNUSU9OX1BST0ZJTEVSPXkKQ09ORklHX1NUQUNLX1RS
QUNFUj15CiMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJF
RU1QVF9UUkFDRVIgaXMgbm90IHNldApDT05GSUdfU0NIRURfVFJBQ0VSPXkKQ09ORklHX0hX
TEFUX1RSQUNFUj15CkNPTkZJR19NTUlPVFJBQ0U9eQpDT05GSUdfRlRSQUNFX1NZU0NBTExT
PXkKQ09ORklHX1RSQUNFUl9TTkFQU0hPVD15CiMgQ09ORklHX1RSQUNFUl9TTkFQU0hPVF9Q
RVJfQ1BVX1NXQVAgaXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiMg
Q09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQ09ORklHX0JM
S19ERVZfSU9fVFJBQ0U9eQpDT05GSUdfS1BST0JFX0VWRU5UUz15CiMgQ09ORklHX0tQUk9C
RV9FVkVOVFNfT05fTk9UUkFDRSBpcyBub3Qgc2V0CkNPTkZJR19VUFJPQkVfRVZFTlRTPXkK
Q09ORklHX0JQRl9FVkVOVFM9eQpDT05GSUdfRFlOQU1JQ19FVkVOVFM9eQpDT05GSUdfUFJP
QkVfRVZFTlRTPXkKQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREU9eQpDT05GSUdfRlRSQUNF
X01DT1VOVF9SRUNPUkQ9eQpDT05GSUdfRlRSQUNFX01DT1VOVF9VU0VfQ0M9eQpDT05GSUdf
VFJBQ0lOR19NQVA9eQpDT05GSUdfU1lOVEhfRVZFTlRTPXkKQ09ORklHX0hJU1RfVFJJR0dF
UlM9eQojIENPTkZJR19UUkFDRV9FVkVOVF9JTkpFQ1QgaXMgbm90IHNldAojIENPTkZJR19U
UkFDRVBPSU5UX0JFTkNITUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX1JJTkdfQlVGRkVSX0JF
TkNITUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSQUNFX0VWQUxfTUFQX0ZJTEUgaXMgbm90
IHNldAojIENPTkZJR19GVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTiBpcyBub3Qgc2V0CiMgQ09O
RklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZF
Ul9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9WQUxJREFU
RV9USU1FX0RFTFRBUyBpcyBub3Qgc2V0CiMgQ09ORklHX01NSU9UUkFDRV9URVNUIGlzIG5v
dCBzZXQKIyBDT05GSUdfUFJFRU1QVElSUV9ERUxBWV9URVNUIGlzIG5vdCBzZXQKIyBDT05G
SUdfU1lOVEhfRVZFTlRfR0VOX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19LUFJPQkVfRVZF
TlRfR0VOX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19ISVNUX1RSSUdHRVJTX0RFQlVHIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVWTUVNX0lT
X0FMTE9XRUQ9eQpDT05GSUdfU1RSSUNUX0RFVk1FTT15CkNPTkZJR19JT19TVFJJQ1RfREVW
TUVNPXkKCiMKIyB4ODYgRGVidWdnaW5nCiMKQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBP
UlQ9eQpDT05GSUdfVFJBQ0VfSVJRRkxBR1NfTk1JX1NVUFBPUlQ9eQpDT05GSUdfRUFSTFlf
UFJJTlRLX1VTQj15CiMgQ09ORklHX1g4Nl9WRVJCT1NFX0JPT1RVUCBpcyBub3Qgc2V0CkNP
TkZJR19FQVJMWV9QUklOVEs9eQpDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQpDT05GSUdf
RUFSTFlfUFJJTlRLX1VTQl9YREJDPXkKIyBDT05GSUdfRUZJX1BHVF9EVU1QIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfVExCRkxVU0ggaXMgbm90IHNldApDT05GSUdfSEFWRV9NTUlP
VFJBQ0VfU1VQUE9SVD15CkNPTkZJR19YODZfREVDT0RFUl9TRUxGVEVTVD15CkNPTkZJR19J
T19ERUxBWV8wWDgwPXkKIyBDT05GSUdfSU9fREVMQVlfMFhFRCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lPX0RFTEFZX1VERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklHX0lPX0RFTEFZX05PTkUg
aXMgbm90IHNldApDT05GSUdfREVCVUdfQk9PVF9QQVJBTVM9eQojIENPTkZJR19DUEFfREVC
VUcgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19FTlRSWSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RFQlVHX05NSV9TRUxGVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1g4Nl9ERUJVR19GUFUg
aXMgbm90IHNldAojIENPTkZJR19QVU5JVF9BVE9NX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1VOV0lOREVSX09SQz15CiMgQ09ORklHX1VOV0lOREVSX0ZSQU1FX1BPSU5URVIgaXMgbm90
IHNldAojIGVuZCBvZiB4ODYgRGVidWdnaW5nCgojCiMgS2VybmVsIFRlc3RpbmcgYW5kIENv
dmVyYWdlCiMKIyBDT05GSUdfS1VOSVQgaXMgbm90IHNldAojIENPTkZJR19OT1RJRklFUl9F
UlJPUl9JTkpFQ1RJT04gaXMgbm90IHNldApDT05GSUdfRlVOQ1RJT05fRVJST1JfSU5KRUNU
SU9OPXkKIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hf
SEFTX0tDT1Y9eQpDT05GSUdfQ0NfSEFTX1NBTkNPVl9UUkFDRV9QQz15CiMgQ09ORklHX0tD
T1YgaXMgbm90IHNldApDT05GSUdfUlVOVElNRV9URVNUSU5HX01FTlU9eQojIENPTkZJR19M
S0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTElTVF9TT1JUIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEVTVF9NSU5fSEVBUCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfU09SVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAojIENPTkZJ
R19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUkJUUkVFX1RFU1Qg
aXMgbm90IHNldAojIENPTkZJR19SRUVEX1NPTE9NT05fVEVTVCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOVEVSVkFMX1RSRUVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BFUkNQVV9URVNU
IGlzIG5vdCBzZXQKIyBDT05GSUdfQVRPTUlDNjRfU0VMRlRFU1QgaXMgbm90IHNldApDT05G
SUdfQVNZTkNfUkFJRDZfVEVTVD1tCiMgQ09ORklHX1RFU1RfSEVYRFVNUCBpcyBub3Qgc2V0
CiMgQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlMgaXMgbm90IHNldAojIENPTkZJR19URVNU
X1NUUlNDUFkgaXMgbm90IHNldAojIENPTkZJR19URVNUX0tTVFJUT1ggaXMgbm90IHNldAoj
IENPTkZJR19URVNUX1BSSU5URiBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQklUTUFQIGlz
IG5vdCBzZXQKIyBDT05GSUdfVEVTVF9VVUlEIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9Y
QVJSQVkgaXMgbm90IHNldAojIENPTkZJR19URVNUX09WRVJGTE9XIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEVTVF9SSEFTSFRBQkxFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9IQVNIIGlz
IG5vdCBzZXQKIyBDT05GSUdfVEVTVF9JREEgaXMgbm90IHNldAojIENPTkZJR19URVNUX1BB
Uk1BTiBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTEtNIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEVTVF9CSVRPUFMgaXMgbm90IHNldAojIENPTkZJR19URVNUX1ZNQUxMT0MgaXMgbm90IHNl
dAojIENPTkZJR19URVNUX1VTRVJfQ09QWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQlBG
IGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9CTEFDS0hPTEVfREVWIGlzIG5vdCBzZXQKIyBD
T05GSUdfRklORF9CSVRfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9GSVJN
V0FSRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfU1lTQ1RMIGlzIG5vdCBzZXQKIyBDT05G
SUdfVEVTVF9VREVMQVkgaXMgbm90IHNldAojIENPTkZJR19URVNUX1NUQVRJQ19LRVlTIGlz
IG5vdCBzZXQKIyBDT05GSUdfVEVTVF9LTU9EIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9N
RU1DQVRfUCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfT0JKQUdHIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEVTVF9TVEFDS0lOSVQgaXMgbm90IHNldAojIENPTkZJR19URVNUX01FTUlOSVQg
aXMgbm90IHNldAojIENPTkZJR19URVNUX0hNTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1Rf
RlJFRV9QQUdFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfRlBVIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUVNVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0hZUEVSVl9URVNUSU5HIGlzIG5v
dCBzZXQKIyBlbmQgb2YgS2VybmVsIFRlc3RpbmcgYW5kIENvdmVyYWdlCiMgZW5kIG9mIEtl
cm5lbCBoYWNraW5nCg==
--------------6AC692267CC088E7165122E4--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 08:20:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 08:20:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148296.274060 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyrvN-0008G7-7m; Thu, 01 Jul 2021 08:19:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148296.274060; Thu, 01 Jul 2021 08:19:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyrvN-0008G0-4n; Thu, 01 Jul 2021 08:19:53 +0000
Received: by outflank-mailman (input) for mailman id 148296;
 Thu, 01 Jul 2021 08:19:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=MHxG=LZ=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1lyrvL-0008Fu-AE
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 08:19:51 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id b867633c-3fc2-499f-8127-b45c4d8b2ed0;
 Thu, 01 Jul 2021 08:19:50 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BF5E9D6E;
 Thu,  1 Jul 2021 01:19:49 -0700 (PDT)
Received: from [10.57.12.251] (unknown [10.57.12.251])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 566B93F694;
 Thu,  1 Jul 2021 01:19:47 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b867633c-3fc2-499f-8127-b45c4d8b2ed0
Subject: Re: [PATCH v3 10/10] arm64: Change type of hsr, cpsr, spsr_el1 to
 uint64_t
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com,
 wei.chen@arm.com
References: <20210505074308.11016-1-michal.orzel@arm.com>
 <20210505074308.11016-11-michal.orzel@arm.com>
 <d3fa0269-3779-c893-8adb-4db0e22f28c1@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <9bc0a398-8920-3a95-1bb4-f32e8753972b@arm.com>
Date: Thu, 1 Jul 2021 10:19:42 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <d3fa0269-3779-c893-8adb-4db0e22f28c1@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

Hi Julien,

On 07.06.2021 15:31, Julien Grall wrote:
> Hi,
> 
> On 05/05/2021 08:43, Michal Orzel wrote:
>> AArch64 registers are 64bit whereas AArch32 registers
>> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
>> we should get rid of helpers READ/WRITE_SYSREG32
>> in favour of using READ/WRITE_SYSREG.
>> We should also use register_t type when reading sysregs
>> which can correspond to uint64_t or uint32_t.
>> Even though many AArch64 registers have upper 32bit reserved
>> it does not mean that they can't be widen in the future.
>>
>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
>> Previously we relied on the padding after SPSR_EL1.
>> As we removed the padding, modify the union to be 64bit so we don't corrupt SPSR_FIQ.
>> No need to modify the assembly code becuase the accesses were based on 64bit
> 
> s/becuase/because/
> 
Will do.
>> registers as there was a 32bit padding after SPSR_EL1.
>>
>> Remove 32bit padding in cpu_user_regs before spsr_fiq
>> as it is no longer needed due to upper union being 64bit now.
>> Add 64bit padding in cpu_user_regs before spsr_el1
>> because offset of spsr_el1 must be a multiple of 8.
>>
>> Change type of cpsr to uint64_t in the public outside interface
>> "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
>> Increment XEN_DOMCTL_INTERFACE_VERSION.
>>
>> Change type of cpsr to uint64_t in the public outside interface
>> "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
> [...]
> 
>> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
>> index e7384381cc..c8f9773566 100644
>> --- a/xen/arch/arm/traps.c
>> +++ b/xen/arch/arm/traps.c
>> @@ -546,7 +546,7 @@ void inject_undef64_exception(struct cpu_user_regs *regs, int instr_len)
>>           PSR_IRQ_MASK | PSR_DBG_MASK;
>>       regs->pc = handler;
>>   -    WRITE_SYSREG32(esr.bits, ESR_EL1);
>> +    WRITE_SYSREG(esr.bits, ESR_EL1);
>>   }
>>     /* Inject an abort exception into a 64 bit guest */
>> @@ -580,7 +580,7 @@ static void inject_abt64_exception(struct cpu_user_regs *regs,
>>       regs->pc = handler;
>>         WRITE_SYSREG(addr, FAR_EL1);
>> -    WRITE_SYSREG32(esr.bits, ESR_EL1);
>> +    WRITE_SYSREG(esr.bits, ESR_EL1);
>>   }
>>     static void inject_dabt64_exception(struct cpu_user_regs *regs,
>> @@ -717,7 +717,7 @@ struct reg_ctxt {
>>       uint64_t vttbr_el2;
>>   };
>>   -static const char *mode_string(uint32_t cpsr)
>> +static const char *mode_string(register_t cpsr)
>>   {
>>       uint32_t mode;
>>       static const char *mode_strings[] = {
>> @@ -756,14 +756,16 @@ static void show_registers_32(const struct cpu_user_regs *regs,
>>   #ifdef CONFIG_ARM_64
>>       BUG_ON( ! (regs->cpsr & PSR_MODE_BIT) );
>>       printk("PC:     %08"PRIx32"\n", regs->pc32);
>> +    printk("CPSR:   %016"PRIx64" MODE:%s\n", regs->cpsr,
>> +           mode_string(regs->cpsr));
> Why do you now need to duplicate this line? Can't we use PRIregister you did everywhere else a register is printed?
> 
Indeed we do not need. It was needed at the beginning but I do not remember why. I will fix it.
>>   #else
>>       printk("PC:     %08"PRIx32, regs->pc);
>>       if ( !guest_mode )
>>           printk(" %pS", _p(regs->pc));
>>       printk("\n");
>> -#endif
>>       printk("CPSR:   %08"PRIx32" MODE:%s\n", regs->cpsr,
>>              mode_string(regs->cpsr));
>> +#endif
> 
> [...]
> 
>> diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/include/asm-arm/arm64/processor.h
>> index 81dfc5e615..0e86079cbb 100644
>> --- a/xen/include/asm-arm/arm64/processor.h
>> +++ b/xen/include/asm-arm/arm64/processor.h
>> @@ -63,18 +63,19 @@ struct cpu_user_regs
>>         /* Return address and mode */
>>       __DECL_REG(pc,           pc32);             /* ELR_EL2 */
>> -    uint32_t cpsr;                              /* SPSR_EL2 */
>> -    uint32_t hsr;                               /* ESR_EL2 */
>> +    uint64_t cpsr;                              /* SPSR_EL2 */
>> +    uint64_t hsr;                               /* ESR_EL2 */
>> +
>> +    /* Offset of spsr_el1 must be a multiple of 8 */
> 
> I am guessing you are saying it should be 8-byte aligned, right? If so, the field before is a 64-bit value, therefore the offset should already be a multiple of 8. Did I miss anything?
> 
Well, instead of 8 I should write 16.
We have 2 bug_on checks:
1) BUILD_BUG_ON((sizeof (struct cpu_user_regs)) & 0xf);
2) BUILD_BUG_ON((offsetof(struct cpu_user_regs, spsr_el1)) & 0xf);

Total size of cpu_user_regs without padding is 344 which does not pass the first check.
With the padding it is 352 and it passes the first check.

The offset without padding is 280 which does not pass the second check.
The offset with padding is 288 which passes the second check.

So I should write:
"/* Offset of spsr_el1 must be a multiple of 16 bytes */"

Is it ok for you?
If yes, I will push v3.
>> +    uint64_t pad0;
>>         /* Outer guest frame only from here on... */
>>         union {
>> -        uint32_t spsr_el1;       /* AArch64 */
>> +        uint64_t spsr_el1;       /* AArch64 */
>>           uint32_t spsr_svc;       /* AArch32 */
>>       };
>>   -    uint32_t pad1; /* Doubleword-align the user half of the frame */
>> -
>>       /* AArch32 guests only */
>>       uint32_t spsr_fiq, spsr_irq, spsr_und, spsr_abt;
>>   diff --git a/xen/include/asm-arm/hsr.h b/xen/include/asm-arm/hsr.h
>> index 29d4531f40..9b91b28c48 100644
>> --- a/xen/include/asm-arm/hsr.h
>> +++ b/xen/include/asm-arm/hsr.h
>> @@ -16,7 +16,7 @@ enum dabt_size {
>>   };
>>     union hsr {
>> -    uint32_t bits;
>> +    register_t bits;
>>       struct {
>>           unsigned long iss:25;  /* Instruction Specific Syndrome */
>>           unsigned long len:1;   /* Instruction length */
>> diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
>> index 713fd65317..64a2ca30da 100644
>> --- a/xen/include/public/arch-arm.h
>> +++ b/xen/include/public/arch-arm.h
>> @@ -267,10 +267,10 @@ struct vcpu_guest_core_regs
>>         /* Return address and mode */
>>       __DECL_REG(pc64,         pc32);             /* ELR_EL2 */
>> -    uint32_t cpsr;                              /* SPSR_EL2 */
>> +    uint64_t cpsr;                              /* SPSR_EL2 */
>>         union {
>> -        uint32_t spsr_el1;       /* AArch64 */
>> +        uint64_t spsr_el1;       /* AArch64 */
>>           uint32_t spsr_svc;       /* AArch32 */
>>       };
>>   diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
>> index 4dbf107785..d576bfabd6 100644
>> --- a/xen/include/public/domctl.h
>> +++ b/xen/include/public/domctl.h
>> @@ -38,7 +38,7 @@
>>   #include "hvm/save.h"
>>   #include "memory.h"
>>   -#define XEN_DOMCTL_INTERFACE_VERSION 0x00000013
>> +#define XEN_DOMCTL_INTERFACE_VERSION 0x00000014
>>     /*
>>    * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
>> diff --git a/xen/include/public/vm_event.h b/xen/include/public/vm_event.h
>> index 36135ba4f1..bb003d21d0 100644
>> --- a/xen/include/public/vm_event.h
>> +++ b/xen/include/public/vm_event.h
>> @@ -266,8 +266,7 @@ struct vm_event_regs_arm {
>>       uint64_t ttbr1;
>>       uint64_t ttbcr;
>>       uint64_t pc;
>> -    uint32_t cpsr;
>> -    uint32_t _pad;
>> +    uint64_t cpsr;
>>   };
>>     /*
>>
> 

Cheers,
Michal


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 08:27:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 08:27:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148301.274072 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lys2O-0001E5-0h; Thu, 01 Jul 2021 08:27:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148301.274072; Thu, 01 Jul 2021 08:27:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lys2N-0001Dy-Sp; Thu, 01 Jul 2021 08:27:07 +0000
Received: by outflank-mailman (input) for mailman id 148301;
 Thu, 01 Jul 2021 08:27:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=zJ+h=LZ=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1lys2M-0001Ds-HG
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 08:27:06 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 46bb03ec-53d9-4000-9b0d-cabd097af8e1;
 Thu, 01 Jul 2021 08:27:04 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-32-NvfE6PnSNJqBlFGOdLjQIA-1; Thu, 01 Jul 2021 10:27:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2335.eurprd04.prod.outlook.com (2603:10a6:800:2e::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Thu, 1 Jul
 2021 08:26:59 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.023; Thu, 1 Jul 2021
 08:26:59 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P189CA0001.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 08:26:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 46bb03ec-53d9-4000-9b0d-cabd097af8e1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625128023;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=DnD25fAzwh8fY86OSuBQt1PTJe6MeV91euHHkyaJBhU=;
	b=Edd1B1J2ZKvoZOdknV0WIqrn+KsJQhByDUzom+oHTlSZ+h7qgxCfkgb+bt8kvyUKu1YeT4
	qSxrSPs3RoclQn1X7yyWDwhXBo2OjTcWotNm1OtfCnpiZrEVcskz+MkKZgJysZEQMXgVZu
	TEkAFhfO2Zba4S5bES2DN7RPYUNpmPk=
X-MC-Unique: NvfE6PnSNJqBlFGOdLjQIA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kHlvt6D4NESpSTphFp0jZEke9TjTAWNZh6TOiESjztlc+BLWg1exP0pRIoIaa4MN1a3fC31JbrwHnGveIZTudVsQnJatEAx5C5bzkDMXDQTiwVPHo/vj2e1UlNm4uoqX07YnvGlNuqkeV5EiUgzJB5lj2ZIJ2cwwCPSxYC0golZCsHIK5/BKGzfmg6uZUtw3zyip0ouwsLiuV6JeYUmoue+sQpe2MYTOYPzIUWnm9scRjv+GStIidMJ0zofb/zpi+snobZ22h1o46bf4w0p5AjFTVoR2fKGiP+QUcF0SZPMVJD0qBj1mkl1krOlFM7SuToG0+DMxQSX3wKjvUwKanQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DnD25fAzwh8fY86OSuBQt1PTJe6MeV91euHHkyaJBhU=;
 b=DwOdih7sGDrbbhcSwC+qWyGjDe+94UJwMHuysFwT7U3+n8r7bB8c1g2zJRR3qexx0oXGHaXOubJb7+MzONJZvhFX45DYVn71AhSMS+SZlqEBH9BASCidhXqRe+8NkXWmP5YfcPxAKKPLNLCc8nSPL0ptm1Ss45zPH2SFxY2iFp4huEy8YfI9oouuZ2SS4DbJ81nQVnlW/zziR5xccVV+6sLkOz0zl8tfNFmK7sqz6s0DVsq+5F1ZzR8o+pgTtf6HrsLuKHqoIVkPgJV2/h4QIwXI8m0gF2Jk3u4h9Lc99l8yx0n3bFua3m6Q0K6KbITqjkl7rKMKgY3egDcOkC+mqw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 5/9] xen: introduce assign_pages_nr
To: Julien Grall <julien@xen.org>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org,
 Penny Zheng <penny.zheng@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-6-penny.zheng@arm.com>
 <41a7389b-630c-6cf4-fa28-7d80cb79176b@suse.com>
 <e7e89abb-1601-0cdf-71d2-c22af86057c4@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <dab3331b-f3b9-4318-bf43-9f994c7d1121@suse.com>
Date: Thu, 1 Jul 2021 10:26:57 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <e7e89abb-1601-0cdf-71d2-c22af86057c4@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P189CA0001.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:102:52::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1f00bab8-97a7-47f5-ba73-08d93c69fe82
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2335:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB233544CDCFFFD4DAE269D227B3009@VI1PR0401MB2335.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	WfOupHHZe+VofinmFWHwCgwUTzh3XPRv5NiyaHjsbjTudZksD5QJ8kxmKXganpHzImctcXyMJb8F/fOD7dNKP0KxrC+FrV1vcvcWipKzuRd6hYyagChh2jpvXljwiDXMOFjDXLK9D2WPI6KAtReaAyAgvN3Scdu4lc78SLn46pjJ2RDwZwJJNEZb7r4XIP2nTsW1UCMgMkLTL8Wzxh6XAI0GyOb7+gbh3vvUUR32b5wH/EoGduZhvgxVd7oBhMEnqpDBWRDFxAmogLz31jkZ0ltI7FKcYaLmWmqsrqJe1vBF5Rxa4bI9haj8B8T3yF8uCUn4ZTOane2c7lIKptPWHaR71oCwElDJPEsGeTNG9ZuE5ASTVxvO86xsinpua/zeYfi6+8AZ3F4/Njc1sqJWDHH3NwgP565SViA1BN7X87Hw4grQNQCQpYya13oyPwPzQimCqMrZQ8ozDgcEHr/FHCjvIf54Dr5hx2tv42/Iw5x2/5mtb1jOW3b+UuCsdZz+CkYn6Cvkj7PiXDld61yoxgvx/8BXJx7ybou62jZzepXKwsoTmewtlh2edyaPn+q8z+BzoGCZIBJbJHCKLQsFh4QHO2LYeJpyVf4XavsswMsvDHRu4y5IqkS/QLItcj4Bg6epKcqCfdJLOc0a8G3euyK+x06Im1h/+VBzhKiV35jWQ5VkfIWD+HpJRJjXjug8+wI/IICwLcoYwMLrEheAHlSOPnE3XouFbVMGyi3DrOA=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(39830400003)(136003)(366004)(376002)(2616005)(956004)(83380400001)(26005)(2906002)(4326008)(36756003)(16526019)(186003)(6486002)(8936002)(16576012)(66476007)(31686004)(66946007)(478600001)(66556008)(6916009)(5660300002)(31696002)(86362001)(53546011)(316002)(38100700002)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1f00bab8-97a7-47f5-ba73-08d93c69fe82
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 08:26:58.9598
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: A7FyyUfTp9ZNs0bQl2wVNyVzjmfSGIKjfg+2PHCOPQQDz7pUX6TeefwsnxdALB8KI3B6+aQ0YQLeRQ6FZhLE0Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2335

On 30.06.2021 20:29, Julien Grall wrote:
> On 10/06/2021 10:49, Jan Beulich wrote:
>> On 07.06.2021 04:43, Penny Zheng wrote:
>>> Introduce new interface assign_pages_nr to deal with when page number is
>>> not in a power-of-two, which will save the trouble each time user needs
>>> to split the size in a power of 2 to use assign_pages.
>>
>> First of all I still don't see why in this one special case it is a
>> meaningful burden to do the count-to-order conversion in the caller you
>> mean to add,
> 
> This sort of works for one caller. However, I would expect some more 
> user in the future (we use it for Live-Update).
> 
>> and hence why we really need this new function (to keep it
>> simple, you could even have the caller not break down to arbitrary
>> power-of-2 chunks, but simply iterate over all individual [order-0]
>> pages).
> 
> The function assign_pages() will always use 1U << order (and sadly 1 << 
> order). So we would end up to convert the count in multiple order for 
> then directly converting back to a number. To me, this sounds rather 
> pointless...
> 
> There are also a slight benefits to call assign_pages() a single time 
> during boot because it will reduce the number of time we need to 
> lock/unlock d->page_alloc_lock.

Well, all of this is why I did add ...

>> The more that I'm not happy with the chosen name, despite it
>> having been suggested during v1 review. _If_ we needed two functions,
>> imo they ought to be named assign_page() (dealing with a single page of
>> the given order) and assign_pages(). Backporting confusion could be
>> helped by altering the order of parameters, such that the compiler
>> would point out that adjustments at call sites are needed.

... this. Not sure whether you not commenting on it means you agree
with the proposal.

>>> --- a/xen/common/page_alloc.c
>>> +++ b/xen/common/page_alloc.c
>>> @@ -2301,14 +2301,14 @@ void init_domheap_pages(paddr_t ps, paddr_t pe)
>>>   }
>>>   
>>>   
>>> -int assign_pages(
>>> +int assign_pages_nr(
>>>       struct domain *d,
>>>       struct page_info *pg,
>>> -    unsigned int order,
>>> +    unsigned int nr_pfns,
>>
>> Even leaving the naming aspect of "pfns" aside, I can't see why this
>> can't be simply "nr" (of appropriate type, see next remark).
>>
>>>       unsigned int memflags)
>>>   {
>>>       int rc = 0;
>>> -    unsigned long i;
>>> +    unsigned int i;
>>
>> This is not an acceptable type change, at least not as long as it's not
>> justified at all in the description. While both Arm and x86 will be
>> fine this way, the code here is supposed to be generic, and hence would
>> better remain generally correct.
> 
> I would like to point out the code is already not correct as we are 
> using 1U << order or worse 1 << order :).

Indeed there are improvements (towards being consistent) to be made. But
this is not an excuse to make things worse here. At least one of the two
loops already properly uses 1ul; sadly that's only debugging code. And
of course something like domain_tot_pages() (and the underlying field)
dealing with "unsigned int" doesn't help consistency either. As it stands
we're limiting ourselves to 8Tb VMs, as it seems, and for no good reason.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 08:47:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 08:47:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148306.274083 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lysMI-0003Ya-Ot; Thu, 01 Jul 2021 08:47:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148306.274083; Thu, 01 Jul 2021 08:47:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lysMI-0003YT-La; Thu, 01 Jul 2021 08:47:42 +0000
Received: by outflank-mailman (input) for mailman id 148306;
 Thu, 01 Jul 2021 08:47:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lysMH-0003YJ-O5; Thu, 01 Jul 2021 08:47:41 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lysMH-0000Wv-Ic; Thu, 01 Jul 2021 08:47:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lysMH-0007VY-18; Thu, 01 Jul 2021 08:47:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lysMH-0007ku-0Z; Thu, 01 Jul 2021 08:47:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=6EbKupzEtwh9+Z75UGVdFYGztqVoirvxDAlIJS46Sfg=; b=4AICSCKoMW+P5K5j/4PAKwWS5s
	AxEDf2ZNZ7E856+zUHTk8eQKOYDrw6vOUtz4WDV8iCPcWNflOxls06msIBLJ/5SzhTqUOBLPhcyJp
	QQXG7QmntQj+KoBePuS9HVkF/nFl7iu/OoGRaZVJMafVJ19CyyoZ9jiGKn2h+Pvpag/U=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163205-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163205: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=bb33c27fbed6c1ed39d243bedd407e8e93a2b3a9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 08:47:41 +0000

flight 163205 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163205/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 bb33c27fbed6c1ed39d243bedd407e8e93a2b3a9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   27 days
Failing since        162368  2021-06-04 15:42:59 Z   26 days   68 attempts
Testing same since   163205  2021-07-01 00:10:20 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3191 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:02:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:02:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148312.274096 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lysad-0005pf-4R; Thu, 01 Jul 2021 09:02:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148312.274096; Thu, 01 Jul 2021 09:02:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lysad-0005pY-1Q; Thu, 01 Jul 2021 09:02:31 +0000
Received: by outflank-mailman (input) for mailman id 148312;
 Thu, 01 Jul 2021 09:02:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lysab-0005pO-G9; Thu, 01 Jul 2021 09:02:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lysab-0000nN-8j; Thu, 01 Jul 2021 09:02:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lysaa-0008FY-SW; Thu, 01 Jul 2021 09:02:28 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lysaa-0000ZH-S0; Thu, 01 Jul 2021 09:02:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=BsH2SBUye/IZQ30KsaQMaNneKN8RUr72kk5cHNoagpE=; b=hI6FaJGCoGIbHVW7HNx54HDKCr
	zJpYEIKa624zm68YqRiTV54Duh3ZXDyBuTwMjhyiU1dyPhpcFXhF7nea1UYUpF+0tiGI1eX/kjqKE
	mTzW03n79bZDIsIEo2oS9+fz138wdafSyI0yrcTW/ksdop7J8vNqVXXCLN3Td7RmXa/c=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163208-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163208: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=15073504dbb624d3f6c911e85557019d3620fdb2
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 09:02:28 +0000

flight 163208 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163208/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              15073504dbb624d3f6c911e85557019d3620fdb2
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  356 days
Failing since        151818  2020-07-11 04:18:52 Z  355 days  347 attempts
Testing same since   163208  2021-07-01 04:20:07 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63631 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:24:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:24:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148321.274111 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lysw2-0008E0-5K; Thu, 01 Jul 2021 09:24:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148321.274111; Thu, 01 Jul 2021 09:24:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lysw2-0008Dt-2K; Thu, 01 Jul 2021 09:24:38 +0000
Received: by outflank-mailman (input) for mailman id 148321;
 Thu, 01 Jul 2021 09:24:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lysw1-0008Dl-1m
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:24:37 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lysw0-0001Az-RV; Thu, 01 Jul 2021 09:24:36 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lysw0-0004A1-LE; Thu, 01 Jul 2021 09:24:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=V9NFK2lNy9CaNbbZHIo9REyjCJIGDMiOwcehHQbUPIU=; b=jFn1yYam50B8QuzUsAepb1skS+
	FvcJMKbPvhzP4wFrcqzal3j51OvEnH8fruVbz6eYAVf0TxbVMXJo9cgBt4hAgwOl4tuaYMZDUchM9
	gxBqH4IvW8MFH5frsJx6zOXsH5BMEpeAo5lsnT5fWh4CIRXVLUf4FRs3m3sTmEpXGbyQ=;
Subject: Re: [PATCH 5/9] xen: introduce assign_pages_nr
To: Jan Beulich <jbeulich@suse.com>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org,
 Penny Zheng <penny.zheng@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-6-penny.zheng@arm.com>
 <41a7389b-630c-6cf4-fa28-7d80cb79176b@suse.com>
 <e7e89abb-1601-0cdf-71d2-c22af86057c4@xen.org>
 <dab3331b-f3b9-4318-bf43-9f994c7d1121@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <b7220a85-6eec-278f-8b1d-d474470406a6@xen.org>
Date: Thu, 1 Jul 2021 10:24:34 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <dab3331b-f3b9-4318-bf43-9f994c7d1121@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 01/07/2021 09:26, Jan Beulich wrote:
> On 30.06.2021 20:29, Julien Grall wrote:
>> On 10/06/2021 10:49, Jan Beulich wrote:
>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>> Introduce new interface assign_pages_nr to deal with when page number is
>>>> not in a power-of-two, which will save the trouble each time user needs
>>>> to split the size in a power of 2 to use assign_pages.
>>>
>>> First of all I still don't see why in this one special case it is a
>>> meaningful burden to do the count-to-order conversion in the caller you
>>> mean to add,
>>
>> This sort of works for one caller. However, I would expect some more
>> user in the future (we use it for Live-Update).
>>
>>> and hence why we really need this new function (to keep it
>>> simple, you could even have the caller not break down to arbitrary
>>> power-of-2 chunks, but simply iterate over all individual [order-0]
>>> pages).
>>
>> The function assign_pages() will always use 1U << order (and sadly 1 <<
>> order). So we would end up to convert the count in multiple order for
>> then directly converting back to a number. To me, this sounds rather
>> pointless...
>>
>> There are also a slight benefits to call assign_pages() a single time
>> during boot because it will reduce the number of time we need to
>> lock/unlock d->page_alloc_lock.
> 
> Well, all of this is why I did add ...
> 
>>> The more that I'm not happy with the chosen name, despite it
>>> having been suggested during v1 review. _If_ we needed two functions,
>>> imo they ought to be named assign_page() (dealing with a single page of
>>> the given order) and assign_pages(). Backporting confusion could be
>>> helped by altering the order of parameters, such that the compiler
>>> would point out that adjustments at call sites are needed.
> 
> ... this. 

Oh, it wasn't entirely clear whether you were objecting of offering the 
possibility to pass a number of pages rather than an order.

> Not sure whether you not commenting on it means you agree
> with the proposal.

Yes I am happy with your proposal.

> 
>>>> --- a/xen/common/page_alloc.c
>>>> +++ b/xen/common/page_alloc.c
>>>> @@ -2301,14 +2301,14 @@ void init_domheap_pages(paddr_t ps, paddr_t pe)
>>>>    }
>>>>    
>>>>    
>>>> -int assign_pages(
>>>> +int assign_pages_nr(
>>>>        struct domain *d,
>>>>        struct page_info *pg,
>>>> -    unsigned int order,
>>>> +    unsigned int nr_pfns,
>>>
>>> Even leaving the naming aspect of "pfns" aside, I can't see why this
>>> can't be simply "nr" (of appropriate type, see next remark).
>>>
>>>>        unsigned int memflags)
>>>>    {
>>>>        int rc = 0;
>>>> -    unsigned long i;
>>>> +    unsigned int i;
>>>
>>> This is not an acceptable type change, at least not as long as it's not
>>> justified at all in the description. While both Arm and x86 will be
>>> fine this way, the code here is supposed to be generic, and hence would
>>> better remain generally correct.
>>
>> I would like to point out the code is already not correct as we are
>> using 1U << order or worse 1 << order :).
> 
> Indeed there are improvements (towards being consistent) to be made. But
> this is not an excuse to make things worse here. At least one of the two
> loops already properly uses 1ul; sadly that's only debugging code. And
> of course something like domain_tot_pages() (and the underlying field)
> dealing with "unsigned int" doesn't help consistency either. As it stands
> we're limiting ourselves to 8Tb VMs, as it seems, and for no good reason.

I actually have a patch in my queue that hardens assign_pages(). I will 
aim to send it later today.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:37:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:37:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148326.274122 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyt86-0001H5-CI; Thu, 01 Jul 2021 09:37:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148326.274122; Thu, 01 Jul 2021 09:37:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyt86-0001Gy-6o; Thu, 01 Jul 2021 09:37:06 +0000
Received: by outflank-mailman (input) for mailman id 148326;
 Thu, 01 Jul 2021 09:37:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyt85-0001Gs-4v
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:37:05 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 53b870e0-8784-4b35-93c2-ed344a96744e;
 Thu, 01 Jul 2021 09:37:02 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 53b870e0-8784-4b35-93c2-ed344a96744e
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625132222;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=aMEQcTsDPgXtR1BmN6Rp3x+v5tEnrdawfN3Wbzs5MIQ=;
  b=Gk1bK/9RyibTwUPC5Atdsg/GtMcf08F7ouNdWobZWwiMuN/2P1Qma4nn
   z56HbMj4kdRJY6ot4g0j3nhr6MMNpdlUqW9tVRceHOJ9I4vqHDtLCPyoK
   6Fav301b/Hv5iAmLl5cn9icC50meGBrnJX/aABxHx/OZ8Hphh0a+gOjKg
   U=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: D7sASBiW/pQzogWFFQWPVDciAodScg54xMExaFQMaLFKTfiUAVd5vN8t7M99S4jCzohkvw2Kt3
 bHMkP4dM/TFe8F7qUIcJ+RlejgCz/IlbSxbuQZuY3TU+pLnx95CvIamn9/YJLU9Zmhbp+Lf91E
 lKrq1jMS+JiidRfnaICSipkHYoVz73/RiuTdiu7GRf1sT5GoqILTVLzQ1bQ4I6rmY039O3iErN
 AvIr34ve66y9IkNUqLxvx+pgCF4nj81u3ikbi+p48Y7Tg05sqzoA0LpxVbhi8qISeQbLSdrEod
 LF8=
X-SBRS: 5.1
X-MesageID: 47361710
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:aV8rXagP0EaouoqsIqvy4nXxn3BQXtgji2hC6mlwRA09TySZ//
 rOoB0+726StN9xYgBFpTnuAsW9qB/nmqKdpLNhW4tKPzOW3VdATrsSjrcKqgeIc0aVm9K1l5
 0QEZSWYOeAdGSS5vyb3ODXKbgd/OU=
X-IronPort-AV: E=Sophos;i="5.83,313,1616472000"; 
   d="scan'208";a="47361710"
Date: Thu, 1 Jul 2021 10:36:58 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Andrew Cooper
	<andrew.cooper3@citrix.com>
Subject: Re: [PATCH] libxl/x86: check return value of
 SHADOW_OP_SET_ALLOCATION domctl
Message-ID: <YN2Mujj8jKGv7tik@perard>
References: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>

On Mon, Jun 28, 2021 at 01:47:03PM +0200, Jan Beulich wrote:
> The hypervisor may not have enough memory to satisfy the request.
> 
> Requested-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> Especially if the request was mostly fulfilled, guests may have done
> fine despite the failure, so there is a risk of perceived regressions
> here. But not checking the error at all was certainly wrong.
> 
> --- a/tools/libs/light/libxl_x86.c
> +++ b/tools/libs/light/libxl_x86.c
> @@ -531,8 +531,18 @@ int libxl__arch_domain_create(libxl__gc
>      if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
>          unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
>                                             1024);
> -        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
> -                          NULL, 0, &shadow, 0, NULL);
> +        int rc = xc_shadow_control(ctx->xch, domid,

Could you use 'r' instead of 'rc' ? The later is reserved for libxl
error codes while the former is for system and libxc calls.

> +                                   XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
> +                                   NULL, 0, &shadow, 0, NULL);
> +
> +        if (rc) {

xc_shadow_control seems to return "domctl.u.shadow_op.pages" in some
cases, are all non-zero return value errors?

> +            LOGED(ERROR, domid,
> +                  "Failed to set %s allocation: %d (errno:%d)\n",

LOGED already prints prints the meaning of the "errno" value, so we
don't need to log it.

> +                  libxl_defbool_val(d_config->c_info.hap) ? "HAP" : "shadow",
> +                  rc, errno);

Is the return value of xc_shadow_control() actually useful when errno is
already logged?

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:53:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:53:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148332.274133 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytNs-0003cD-M6; Thu, 01 Jul 2021 09:53:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148332.274133; Thu, 01 Jul 2021 09:53:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytNs-0003c6-HV; Thu, 01 Jul 2021 09:53:24 +0000
Received: by outflank-mailman (input) for mailman id 148332;
 Thu, 01 Jul 2021 09:53:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tPK9=LZ=citrix.com=george.dunlap@srs-us1.protection.inumbo.net>)
 id 1lytNr-0003c0-Nc
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:53:23 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bd37892f-0c37-4f5e-be58-2abef2c5c548;
 Thu, 01 Jul 2021 09:53:22 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bd37892f-0c37-4f5e-be58-2abef2c5c548
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625133202;
  h=from:to:cc:subject:date:message-id:content-id:
   content-transfer-encoding:mime-version;
  bh=8wf6RvJkTbeOhCP6B745KER9GHhknPb8hrfHAWHomBk=;
  b=C+zOOcJCXky0bBLkmrOGr35WGV1/ozr0V02Yzck4O4V0L/KZjy7hojRY
   pK04p+DDUs0tN6L9vDJgOivjO0mqxo/5jyd9Xd/4XsK/62WLsVaCGIerP
   5mDsMHB4aqaxiJFZUuaiitXSqA0UF18hRt3gzl0o5RgDagX3neLRiTjLv
   8=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: u/C5ZsslG05/7yqjD58kdugYC8n7y+Br0abBWktXlDHVxDaU1tPiLfZFDQqWjaOC49Em8zOJ4X
 +qVcXW/FoVpmCW2V0pP/+PGe1CQcaLOclXlHx4dAF+DOcSstneXWUU7Cf10wRUc1oBsyuLR1DI
 p44HQ2AdtK1jkeVq2nXsFrtS7SBajPi4lZj/HW5xHz9WersN3mV37NUzoFV2Tx/osQvpCdqHJs
 6yl1ta4tIZ1Nl3liIVg24UxOqi2jYKezkSA4PW9TDibgTcruvSy49wio+9qSXMSZvASvq7hce6
 Fgc=
X-SBRS: 5.1
X-MesageID: 47354412
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:H8ZTYq2o64qVtneerPQc4AqjBTZyeYIsimQD101hICG9Lfb3qy
 n+ppsmPEHP5Ar5AEtQ4+xpOMG7MBfhHQYc2/heAV7QZniahILOFvAi0WKC+UyuJ8SazI9gPM
 hbAtBD4bHLfDpHZKXBkUmF+rQbsaK6GcmT7I+0pRoMPGJXgslbnl1E422gYypLrXx9dOME/e
 2nl6x6TlSbCBEqR/X+IkNAc/nIptXNmp6jSwUBHQQb5A6Hii7twKLmEjCDty1uEA9n8PMHyy
 zoggb57qKsv7WQ0RnHzVLe6JxQhZ/I1sZDPsqRkcIYQw+cyDpAJb4RHoFqjgpF591H22xa1u
 UkZC1QZvib3kmhOl1dZyGdgzUIngxesEMKgmXo/UcL6faJOw7STfAx2L6xOyGpmnYIrZVy1r
 lG0HmesIcSBRTcnD7l79yNTB1ykFGoyEBS2tL6HxRkIPUjgZJq3MUiFXluYd899ePBmfQaOf
 grCNuZ6OddcFucYXyctm5zwMa0VnB2GhudWEANtsGczjATxRlCvgYl7d1amm1F+IM2SpFC6e
 iBOqN0lKtWRstTaa5mHu8OTca+F2SISxPRN2CZJ0jhCcg8SjjwQl7MkcMIDcSRCdA1JbcJ6e
 b8uWJjxBkPkhjVeL6zNbVwg2XwqUuGLETQ9v0=
X-IronPort-AV: E=Sophos;i="5.83,313,1616472000"; 
   d="scan'208";a="47354412"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CnvPwk6hH/JdnMxYA1wt8MhYMQxe7ihTp5c8omXrXOMPpHa9ViWaSXanPoK+zDhKmWCSxeqQkRWhMIsM71IlOwanSlnW4TXPvQr0LudtUuav+2zKXDdOWBUSS0okG5Epm6OskBWRVTr33DGn4EBLYpyYS6T4AsA918zb7EsxQf6NFuWxgE6GMCsJHz9neSKhfL/LXtoZOmEQB8QIpxPePO751JoAmfs0qkExrojcIwPdSKA/9wMF3mnxxh23WI090B1c2hIgOo7/bT/EPX/eINUoq2zKgu+niVAslf1S644nbeOTfrGiNOTAz27FtF+lIc+qtdh+slLyJVtN5phX8A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8wf6RvJkTbeOhCP6B745KER9GHhknPb8hrfHAWHomBk=;
 b=K2OvDO5Y1yq+BRjJ/GypNSA1LPywxShqxW30IeQYmcPQ5v7f6/BvvYukmAvdWuH7mDZbV4c6RsUS6S2PR0Cjc6U2l1Qg6q6pT+PUuP6EO/L4wR2aKDNAomI16jKxo99ALgujs7mOCfBebw+wLY1kSIphFkH3ESMpC/Bq+WmnS7cRsGUm5kFRS3dmoR3HRckSC6GIR2WwMOdu8LisT3xx5RS9caimdKQIWyH/QGEZJZfDfTQZsRUaofIHI+ZBB5hLFSDjyzUZk8budHrOins5O0REfDHSd1g/FtKLkgLtA4Ngyf62rw5UdCP3/ZQs1NjbaeH/xsK5jq8IoWRKieAERQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8wf6RvJkTbeOhCP6B745KER9GHhknPb8hrfHAWHomBk=;
 b=P9kXoGCtLhdSub4W3+B7Yl9HOkuAkrep8LzC9BGyiVHvRl48F5tzVJ47kbXDbQF5UbK02Sw3zG4D79PS+gP4jgY2c5hKHrMYc/4783/1h26OwN1Kdrg1mHNdmJwJkzU2lEXwl968CGVjNeOIxYI1MnQ1VUhRiMQXMsekKrn7nsg=
From: George Dunlap <George.Dunlap@citrix.com>
To: xen-devel <xen-devel@lists.xenproject.org>
CC: Ashley Weltz <aweltz@linuxfoundation.org>
Subject: JULY COMMUNITY CALL POSTPONED AND RESCHEDULED
Thread-Topic: JULY COMMUNITY CALL POSTPONED AND RESCHEDULED
Thread-Index: AQHXbl7rLw5NXgB2c0+Ak/Tp5fP82g==
Date: Thu, 1 Jul 2021 09:53:19 +0000
Message-ID: <3DF8B46A-308E-4992-A975-7F2E1737AD64@citrix.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.60.0.2.21)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 646c6f49-454a-432a-aae9-08d93c760e3b
x-ms-traffictypediagnostic: PH0PR03MB6300:
x-microsoft-antispam-prvs: <PH0PR03MB6300422E6BD121268946AD3A99009@PH0PR03MB6300.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: puG0lVI4rdZ3DRW+89T3Vhxv8QcYhNad3MZ72gC50KOaweiwEHCAsaFLaztLmYsywFioLAfX5L2CRDHJT+dmIzbH5Wnzc5T9G1UUzy3/NYye/sLzVB0eEjZwQ6DX1ko4MIGkfO/bqdJSMS+i/GeMJTab9NngCQkCUXRhqy9FK4Jce9HyI5DdEbtO4vXuOBQp+zwMiLyrY8zMvVtrz1nkKtK1RNeKFpOWLbTpGDa5cDpfdRVjfkKjYo33RIWpjQey3q4PAa1oTnuQG8N5UiE3tEbwbm0Fmy7mjTx5ncZQHHScpRVM02N8pMBpCDHov09mzZbffNrk0UG2eTTCJ2GeDdFcYjTkCm0n1lii/Wnv5PtthMtOPJxP/xmZViS87X6JsH8zY7O+McDjTRDluA4qVPQOFO5fT08RaoOErES9bGk5yXH07eyvghLIBQrKyxJxYvWL2HZgOFMMqRDJ5BIpc6ZaZTp1b3pPDONzz5S2ivY9Gm+vuyw3BmkwWFTAk4eXBqhaGjy4MsrkzfKsWNKKTey1Czcm7AONj4fcUD3zqbbs1cos2lCetHwIYU/acWyruOOTLUBoKo6it4lP7bRJ+HxM3DFN20fcSeac/phQMXwk9KPTa5Tt/W6KcakJihebWLNHGIg41jQrvPLFORO6kkKHXfMnWPI/iuY0Ph7yP+jHfgbcR0igWWvvv01r72yvE3pspzZ1FYWUWtZ+mqEYrg==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR03MB5669.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(376002)(396003)(39860400002)(366004)(64756008)(66946007)(6486002)(6506007)(66556008)(2616005)(2906002)(66446008)(66476007)(36756003)(8676002)(5660300002)(478600001)(26005)(6916009)(91956017)(6512007)(186003)(86362001)(71200400001)(33656002)(8936002)(76116006)(316002)(4326008)(122000001)(38100700002)(83380400001)(4744005)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <AF9AC13DF2C83C4EA12904DA2535452F@namprd03.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR03MB5669.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 646c6f49-454a-432a-aae9-08d93c760e3b
X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jul 2021 09:53:19.1627
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: nt9IYMluKzasGroa65jAR3O6fiuTECanmEnPOGAEWHB3FTuB7Bxj9yRg1syPxiYoDUlDCtmfYbn0s4D1qZoe6cy2PF5flmD9uDEnGJWU7Zo=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB6300
X-OriginatorOrg: citrix.com

U29ycnkgZXZlcnlvbmUgZm9yIG5vdCBpbmNsdWRpbmcgeGVuLWRldmVsIGluIHRoaXMgYW5ub3Vu
Y2VtZW50IGVhcmxpZXIuDQoNClRIRVJFIFdJTEwgQkUgTk8gQ09NTVVOSVRZIENBTEwgVE9EQVku
ICBXZSB3aWxsIGhhdmUgdGhlIGNhbGwgbmV4dCB3ZWVrLCBhdCBhIHRpbWUgdG8gYmUgYW5ub3Vu
Y2VkIGxhdGVyIHRvZGF5Lg0KDQpXZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZmluZGluZyBhIG5l
dyB0aW1lIChhIHN1cnZleSB3YXMgYWxyZWFkeSBzZW50IG91dCB0byBwZW9wbGUgb24gdGhlIGNv
bW11bml0eSBjYWxsIHNpZ24tdXAgbGlzdCksIHNvIHdlIGRlY2lkZWQgdG8gcHVzaCB0aGUgY2Fs
bCBiYWNrIG9uZSB3ZWVrLiAgSSBzZW50IGFuIGVtYWlsIHRvIHRoZSBjb21tdW5pdHkgY2FsbCBz
aWduLXVwIGxpc3QgbGFzdCB3ZWVrLCBidXQgZm9yZ290IHRvIGNjIHhlbi1kZXZlbDsgc29ycnkg
YWJvdXQgdGhhdC4NCg0KSeKAmWxsIHNlbmQgYW4gYW5ub3VuY2VtZW50IGZvciB0aGUgbmV3IHRp
bWUsIGFuZCBhIGxpbmsgdG8gdGhlIGFnZW5kYSwgbGF0ZXIgdG9kYXkuDQoNClBlYWNlLA0KIC1H
ZW9yZ2U=


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:56:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:56:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148337.274143 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytR6-0004Gb-4i; Thu, 01 Jul 2021 09:56:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148337.274143; Thu, 01 Jul 2021 09:56:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytR6-0004GU-1Z; Thu, 01 Jul 2021 09:56:44 +0000
Received: by outflank-mailman (input) for mailman id 148337;
 Thu, 01 Jul 2021 09:56:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytR4-0004GK-GV
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:56:42 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.216])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cda51e26-ea01-4063-ae86-dd01630ea630;
 Thu, 01 Jul 2021 09:56:40 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ud5Mb
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:39 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cda51e26-ea01-4063-ae86-dd01630ea630
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133399;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=mmOmmVOJVCc+eRhOPZx2VydYF30S3wGYCPZsoZJsYV4=;
    b=dE6LowpAE0s4/lMlnv5dd2IMkbK1L0V6kqIfDmXjAORSb5CrEGED/BmO+Vq1kSFPtz
    bsvJiQnPRysqb7szkH5DzQO4aCZjc93Hqi3ck4pwD/cF1MaZTh5BAm20WC7x3nBW4r5c
    Ybh1hHcRLbBpdwUHg5ZuwY5ba/5irsTf45ygIhtyhk3xwzu3RMdcjEhxbJS1+l2D/tOB
    rwZTd5Xeh6qj2GAnEv+2z/m0M59U/fVfYUW5FN8kpaCccRhZ4tr1vEQ1ZBMSwJzvdG1a
    akAvKwpQLWkmo/hg1KKR+FED3ui9hvYLZ7QHO84pTKSkG95W/ipARKJsSbC6C+1Z94i7
    bVHg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>
Subject: [PATCH v20210701 00/40] leftover from 2020
Date: Thu,  1 Jul 2021 11:55:55 +0200
Message-Id: <20210701095635.15648-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Various unreviewed changes, rebase to f95b7b37cf.

Olaf Hering (40):
  hotplug/Linux: fix starting of xenstored with restarting systemd
  tools: add API to work with sevaral bits at once
  xl: fix description of migrate --debug
  tools: use integer division in convert-legacy-stream
  tools: handle libxl__physmap_info.name properly in convert-legacy-stream
  tools: fix Python3.4 TypeError in format string
  tools: create libxensaverestore
  MAINTAINERS: add myself as saverestore maintainer
  tools: add readv_exact to libxenctrl
  tools: add xc_is_known_page_type to libxenctrl
  tools: use sr_is_known_page_type
  tools: unify type checking for data pfns in migration stream
  tools: unify type checking for data pfns in migration stream
  tools: show migration transfer rate in send_dirty_pages
  tools: prepare to allocate saverestore arrays once
  tools: save: move mfns array
  tools: save: move types array
  tools: save: move errors array
  tools: save: move iov array
  tools: save: move rec_pfns array
  tools: save: move guest_data array
  tools: save: move local_pages array
  tools: restore: move types array
  tools: restore: move mfns array
  tools: restore: move map_errs array
  tools: restore: move mfns array in populate_pfns
  tools: restore: move pfns array in populate_pfns
  tools: restore: split record processing
  tools: restore: split handle_page_data
  tools: restore: write data directly into guest
  tools: recognize LIBXL_API_VERSION for 4.16
  tools: adjust libxl_domain_suspend to receive a struct props
  tools: change struct precopy_stats to precopy_stats_t
  tools: add callback to libxl for precopy_policy and precopy_stats_t
  tools: add --max_iters to libxl_domain_suspend
  tools: add --min_remaining to libxl_domain_suspend
  tools: add --abort_if_busy to libxl_domain_suspend
  tools: add API for expandable bitmaps
  tools: use xg_sr_bitmap for populated_pfns
  tools/libxc: use superpages during restore of HVM guest

 .gitignore                                    |   2 +
 MAINTAINERS                                   |   6 +
 docs/man/xl.1.pod.in                          |  22 +-
 tools/hotplug/Linux/init.d/xencommons.in      |   2 +-
 tools/hotplug/Linux/launch-xenstore.in        |  40 +-
 .../Linux/systemd/xenstored.service.in        |   2 +-
 tools/include/libxl.h                         |  32 +-
 tools/include/xenguest.h                      | 186 -----
 tools/include/xensaverestore.h                | 207 ++++++
 tools/libs/Makefile                           |   1 +
 tools/libs/ctrl/xc_bitops.h                   |  28 +
 tools/libs/ctrl/xc_private.c                  |  57 +-
 tools/libs/ctrl/xc_private.h                  |   1 +
 tools/libs/guest/Makefile                     |  11 -
 tools/libs/guest/xg_dom_x86.c                 |   5 -
 tools/libs/guest/xg_offline_page.c            |   1 -
 tools/libs/guest/xg_private.h                 |   5 +
 tools/libs/guest/xg_sr_restore_x86_hvm.c      | 274 --------
 tools/libs/light/Makefile                     |   4 +-
 tools/libs/light/libxl_dom_save.c             |  24 +
 tools/libs/light/libxl_domain.c               |  10 +-
 tools/libs/light/libxl_internal.h             |   7 +
 tools/libs/light/libxl_save_helper.c          |   1 +
 tools/libs/light/libxl_save_msgs_gen.pl       |   5 +-
 tools/libs/light/libxl_stream_write.c         |   9 +-
 tools/libs/light/libxl_types.idl              |   1 +
 tools/libs/saverestore/Makefile               |  38 ++
 .../xg_sr_common.c => saverestore/common.c}   |  75 +-
 .../xg_sr_common.h => saverestore/common.h}   | 271 +++++++-
 .../common_x86.c}                             |   2 +-
 .../common_x86.h}                             |   2 +-
 .../common_x86_pv.c}                          |   2 +-
 .../common_x86_pv.h}                          |   2 +-
 .../nomigrate.c}                              |   2 +-
 .../xg_sr_restore.c => saverestore/restore.c} | 617 +++++++++--------
 tools/libs/saverestore/restore_x86_hvm.c      | 645 ++++++++++++++++++
 .../restore_x86_pv.c}                         |  70 +-
 .../xg_sr_save.c => saverestore/save.c}       | 165 ++---
 .../save_restore.h}                           |   2 -
 .../save_x86_hvm.c}                           |   7 +-
 .../save_x86_pv.c}                            |  33 +-
 .../stream_format.h}                          |   0
 tools/libs/uselibs.mk                         |   4 +-
 tools/ocaml/libs/xl/xenlight_stubs.c          |   3 +-
 tools/python/scripts/convert-legacy-stream    |  24 +-
 tools/xl/xl_cmdtable.c                        |  26 +-
 tools/xl/xl_migrate.c                         |  54 +-
 tools/xl/xl_saverestore.c                     |   3 +-
 48 files changed, 2037 insertions(+), 953 deletions(-)
 create mode 100644 tools/include/xensaverestore.h
 delete mode 100644 tools/libs/guest/xg_sr_restore_x86_hvm.c
 create mode 100644 tools/libs/saverestore/Makefile
 rename tools/libs/{guest/xg_sr_common.c => saverestore/common.c} (72%)
 rename tools/libs/{guest/xg_sr_common.h => saverestore/common.h} (67%)
 rename tools/libs/{guest/xg_sr_common_x86.c => saverestore/common_x86.c} (99%)
 rename tools/libs/{guest/xg_sr_common_x86.h => saverestore/common_x86.h} (98%)
 rename tools/libs/{guest/xg_sr_common_x86_pv.c => saverestore/common_x86_pv.c} (99%)
 rename tools/libs/{guest/xg_sr_common_x86_pv.h => saverestore/common_x86_pv.h} (98%)
 rename tools/libs/{guest/xg_nomigrate.c => saverestore/nomigrate.c} (98%)
 rename tools/libs/{guest/xg_sr_restore.c => saverestore/restore.c} (66%)
 create mode 100644 tools/libs/saverestore/restore_x86_hvm.c
 rename tools/libs/{guest/xg_sr_restore_x86_pv.c => saverestore/restore_x86_pv.c} (94%)
 rename tools/libs/{guest/xg_sr_save.c => saverestore/save.c} (88%)
 rename tools/libs/{guest/xg_save_restore.h => saverestore/save_restore.h} (98%)
 rename tools/libs/{guest/xg_sr_save_x86_hvm.c => saverestore/save_x86_hvm.c} (96%)
 rename tools/libs/{guest/xg_sr_save_x86_pv.c => saverestore/save_x86_pv.c} (97%)
 rename tools/libs/{guest/xg_sr_stream_format.h => saverestore/stream_format.h} (100%)



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:56:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:56:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148338.274154 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytR9-0004YZ-Gu; Thu, 01 Jul 2021 09:56:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148338.274154; Thu, 01 Jul 2021 09:56:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytR9-0004YQ-DP; Thu, 01 Jul 2021 09:56:47 +0000
Received: by outflank-mailman (input) for mailman id 148338;
 Thu, 01 Jul 2021 09:56:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytR7-0004XT-T6
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:56:45 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 94438a9c-bd82-4226-aad3-be2c35a408c7;
 Thu, 01 Jul 2021 09:56:45 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ue5Md
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:40 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 94438a9c-bd82-4226-aad3-be2c35a408c7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133400;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=DqV9Bza4xh4lmngXwj1J3LSRM3kpJQsPapKBO4Z/YvI=;
    b=qRRlDNFKwfDufQp5NUYrSrgtwMMfk6ATaFHjiH2amRD/NqCWF8dxxGWit6C8hcwGvg
    PY3/9ws3knYQO0b3lWTEK/A+csdqAk7ICvmTYNqADEesAA13Ryhnwo+BmJNb5LIzXrPz
    EKYRdzSJjdYT8BsvqMfD9JPD3+lLP589pKAvCUuKDpgmSUV/JW2P64aAeLvixE6CYdYi
    U7sPBkFcM9v9OjhSZXzDnc7W70rQIhHTfBrmSVJtviidhqsSSP6FQOLraTibzvWbejf1
    Lib5d04DrwkNqIB50v5EgtPSt8d69WXfc30eQ2ehB57NnrZlLuZxPxnveDllsQDjy2sY
    NMbg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 02/40] tools: add API to work with sevaral bits at once
Date: Thu,  1 Jul 2021 11:55:57 +0200
Message-Id: <20210701095635.15648-3-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Introduce new API to test if a fixed number of bits is clear or set,
and clear or set them all at once.

The caller has to make sure the input bitnumber is a multiple of BITS_PER_LONG.

This API avoids the loop over each bit in a known range just to see
if all of them are either clear or set.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- change return type from int to bool (jgross)
---
 tools/libs/ctrl/xc_bitops.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/tools/libs/ctrl/xc_bitops.h b/tools/libs/ctrl/xc_bitops.h
index f0bac4a071..8e8c6efb45 100644
--- a/tools/libs/ctrl/xc_bitops.h
+++ b/tools/libs/ctrl/xc_bitops.h
@@ -3,6 +3,7 @@
 
 /* bitmap operations for single threaded access */
 
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -77,4 +78,31 @@ static inline void bitmap_or(void *_dst, const void *_other,
         dst[i] |= other[i];
 }
 
+static inline bool test_bit_long_set(unsigned long nr_base, const void *_addr)
+{
+    const unsigned long *addr = _addr;
+    unsigned long val = addr[nr_base / BITS_PER_LONG];
+
+    return val == ~0;
+}
+
+static inline bool test_bit_long_clear(unsigned long nr_base, const void *_addr)
+{
+    const unsigned long *addr = _addr;
+    unsigned long val = addr[nr_base / BITS_PER_LONG];
+
+    return val == 0;
+}
+
+static inline void clear_bit_long(unsigned long nr_base, void *_addr)
+{
+    unsigned long *addr = _addr;
+    addr[nr_base / BITS_PER_LONG] = 0;
+}
+
+static inline void set_bit_long(unsigned long nr_base, void *_addr)
+{
+    unsigned long *addr = _addr;
+    addr[nr_base / BITS_PER_LONG] = ~0;
+}
 #endif  /* XC_BITOPS_H */


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:56:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:56:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148339.274166 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRC-0004sG-Qj; Thu, 01 Jul 2021 09:56:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148339.274166; Thu, 01 Jul 2021 09:56:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRC-0004s5-MR; Thu, 01 Jul 2021 09:56:50 +0000
Received: by outflank-mailman (input) for mailman id 148339;
 Thu, 01 Jul 2021 09:56:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRB-0004r4-QC
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:56:49 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.83])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d52abfb2-6848-46b5-b4ea-10d4ede7358d;
 Thu, 01 Jul 2021 09:56:48 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uh5Mo
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:43 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d52abfb2-6848-46b5-b4ea-10d4ede7358d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133403;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=SltAKnmIMSX68HfayYsjFaeam+P2Dd+kaJUi7g+KP5U=;
    b=Ac4RxG/KTWjphnMXvXeZe9Akw4GLKnElRV50Qy3tRHtyTCIYoYa4Zj4bN5ByvSjvSy
    bw21oNTVatYIeDyRIlVEzlXbUChDoKdsc9vk8hSCxguIR/l6q7SgLR9P09GAGOBFo4vI
    j6nKrYiBc+ORocgKs7brvWg92wxRNwc8TMHrPaFIV5Q3ylbqqfN2oZc/pa3PGhFyOG5X
    bQTbVug0Qb3oCkcLQPbTqXSkF7EFmkAeKbuP2l4C13yXi5h4zxLBApYT6PCEkflFBs/g
    RQDw9XHuyoBFp5lu7vhTdIKoqFicS2utbnCiMpvgRaLDJbESEVru0jZYgc1/ajfNzQbB
    26dQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 09/40] tools: add readv_exact to libxenctrl
Date: Thu,  1 Jul 2021 11:56:04 +0200
Message-Id: <20210701095635.15648-10-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Read a batch of iovec's.

Short reads are the common case, finish the trailing iov with read_exact.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v2:
- add comment to short-read handling
---
 tools/libs/ctrl/xc_private.c | 57 +++++++++++++++++++++++++++++++++++-
 tools/libs/ctrl/xc_private.h |  1 +
 2 files changed, 57 insertions(+), 1 deletion(-)

diff --git a/tools/libs/ctrl/xc_private.c b/tools/libs/ctrl/xc_private.c
index c0422662f0..bab9a31a70 100644
--- a/tools/libs/ctrl/xc_private.c
+++ b/tools/libs/ctrl/xc_private.c
@@ -698,8 +698,23 @@ int write_exact(int fd, const void *data, size_t size)
 
 #if defined(__MINIOS__)
 /*
- * MiniOS's libc doesn't know about writev(). Implement it as multiple write()s.
+ * MiniOS's libc doesn't know about readv/writev().
+ * Implement it as multiple read/write()s.
  */
+int readv_exact(int fd, const struct iovec *iov, int iovcnt)
+{
+    int rc, i;
+
+    for ( i = 0; i < iovcnt; ++i )
+    {
+        rc = read_exact(fd, iov[i].iov_base, iov[i].iov_len);
+        if ( rc )
+            return rc;
+    }
+
+    return 0;
+}
+
 int writev_exact(int fd, const struct iovec *iov, int iovcnt)
 {
     int rc, i;
@@ -714,6 +729,46 @@ int writev_exact(int fd, const struct iovec *iov, int iovcnt)
     return 0;
 }
 #else
+int readv_exact(int fd, const struct iovec *iov, int iovcnt)
+{
+    int rc = 0, idx = 0;
+    ssize_t len;
+
+    while ( idx < iovcnt )
+    {
+        len = readv(fd, &iov[idx], min(iovcnt - idx, IOV_MAX));
+        if ( len == -1 && errno == EINTR )
+            continue;
+        if ( len <= 0 )
+        {
+            rc = -1;
+            goto out;
+        }
+
+        /* Finish a potential short read in the last iov */
+        while ( len > 0 && idx < iovcnt )
+        {
+            if ( len >= iov[idx].iov_len )
+            {
+                len -= iov[idx].iov_len;
+            }
+            else
+            {
+                void *p = iov[idx].iov_base + len;
+                size_t l = iov[idx].iov_len - len;
+
+                rc = read_exact(fd, p, l);
+                if ( rc )
+                    goto out;
+                len = 0;
+            }
+            idx++;
+        }
+    }
+out:
+    return rc;
+}
+
 int writev_exact(int fd, const struct iovec *iov, int iovcnt)
 {
     struct iovec *local_iov = NULL;
diff --git a/tools/libs/ctrl/xc_private.h b/tools/libs/ctrl/xc_private.h
index 3e299b943f..66086ef19f 100644
--- a/tools/libs/ctrl/xc_private.h
+++ b/tools/libs/ctrl/xc_private.h
@@ -410,6 +410,7 @@ int xc_flush_mmu_updates(xc_interface *xch, struct xc_mmu *mmu);
 
 /* Return 0 on success; -1 on error setting errno. */
 int read_exact(int fd, void *data, size_t size); /* EOF => -1, errno=0 */
+int readv_exact(int fd, const struct iovec *iov, int iovcnt);
 int write_exact(int fd, const void *data, size_t size);
 int writev_exact(int fd, const struct iovec *iov, int iovcnt);
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:56:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:56:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148340.274177 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRE-0005A7-3k; Thu, 01 Jul 2021 09:56:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148340.274177; Thu, 01 Jul 2021 09:56:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRD-00059G-Vx; Thu, 01 Jul 2021 09:56:51 +0000
Received: by outflank-mailman (input) for mailman id 148340;
 Thu, 01 Jul 2021 09:56:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRC-0004XT-RV
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:56:50 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.220])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 42f4d1d9-810f-4e51-9cb2-0241aa5f3c98;
 Thu, 01 Jul 2021 09:56:45 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ud5Mc
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:39 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 42f4d1d9-810f-4e51-9cb2-0241aa5f3c98
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133399;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=fttDAmpegUqwpOBB61SFRLpHBJB9wPmVo+V4iKyUqQw=;
    b=fdQxUB5TzFIqwLyw1ED69LqOX2s3AglEWwdkPeuOY77rvPZXAxr7oyaDtElA5HaxG/
    wS4anPwPRoe21WhiTF4NF0UDQSEKY7xlfvJw7NXq++Z9tsjtnxn9L+wTxPpvsjWyCYY1
    gj6tzo/roDRzABQgRJeCYDoQATMedXnZpQP5EKFKV2vFg6HLn4TUmAmG2veH10UyyQf1
    q1TuYC6yjJViUCZYU4mLKxw5Pkx9s1D6mmfKWG79qHBTdITAd+/XNTFo1o8mvrJ28bMV
    MRN/8q40YmRXsYRxxjPbfVO9tfzSzVT3bz6iZDk/z43VEwtGyk5Wi5AUta6onqy0C4DV
    QNNg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 01/40] hotplug/Linux: fix starting of xenstored with restarting systemd
Date: Thu,  1 Jul 2021 11:55:56 +0200
Message-Id: <20210701095635.15648-2-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

A hard to trigger race with another unrelated systemd service and
xenstored.service unveiled a bug in the way how xenstored is launched
with systemd.

launch-xenstore may start either a daemon or a domain. In case a domain
is used, systemd-notify was called. If another service triggered a
restart of systemd while xenstored.service was executed, systemd may
temporary lose track of services with Type=notify. As a result,
xenstored.service would be marked as failed and units that depend on it
will not be started. This breaks the enire Xen toolstack.

The chain of events is basically: xenstored.service sends the
notification to systemd, this is a one-way event. Then systemd may be
restarted by the other unit. During this time, xenstored.service is done
and exits. Once systemd is done with its restart, it collects the pending
notifications and childs. If it does not find the unit which sent the
notification it will declare it as failed.

A workaround for this scenario is to leave the child processes running
for a short time after sending the "READY=1" notification. If systemd
happens to restart it will still find the unit it launched.

Adjust the callers of launch-xenstore to specifiy the init system:
Do not fork xenstored with systemd, preserve pid. This wil also avoid
the need for a sleep because the process which sent the "READY=1" (the
previously forked child) is still alive.

Remove the --pid-file in the systemd case because the pid of the child
is known, and the file had probably little effect anyway due to lack of
PidFile= and Type=forking in the unit file.

Be verbose about xenstored startup only with sysv to avoid interleaved
output in systemd journal. Do the same also for domain case, even if is
not strictly needed because init-xenstore-domain has no output.

The fix for upstream systemd which is supposed to fix it:
575b300b795b6 ("pid1: rework how we dispatch SIGCHLD and other signals")

Signed-off-by: Olaf Hering <olaf@aepfle.de>

--
v04:
- do mkdir unconditionally because init-xenstore-domain writes the domid to
  xenstored.pid
v03:
- remove run_xenstored function, follow style of shell built-in test function
v02:
- preserve Type=notify
---
 tools/hotplug/Linux/init.d/xencommons.in      |  2 +-
 tools/hotplug/Linux/launch-xenstore.in        | 40 ++++++++++++++-----
 .../Linux/systemd/xenstored.service.in        |  2 +-
 3 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/tools/hotplug/Linux/init.d/xencommons.in b/tools/hotplug/Linux/init.d/xencommons.in
index 7fd6903b98..dcb0ce4b73 100644
--- a/tools/hotplug/Linux/init.d/xencommons.in
+++ b/tools/hotplug/Linux/init.d/xencommons.in
@@ -60,7 +60,7 @@ do_start () {
 	mkdir -m700 -p ${XEN_LOCK_DIR}
 	mkdir -p ${XEN_LOG_DIR}
 
-	@XEN_SCRIPT_DIR@/launch-xenstore || exit 1
+	@XEN_SCRIPT_DIR@/launch-xenstore 'sysv' || exit 1
 
 	echo Setting domain 0 name, domid and JSON config...
 	${LIBEXEC_BIN}/xen-init-dom0 ${XEN_DOM0_UUID}
diff --git a/tools/hotplug/Linux/launch-xenstore.in b/tools/hotplug/Linux/launch-xenstore.in
index 019f9d6f4d..d40c66482a 100644
--- a/tools/hotplug/Linux/launch-xenstore.in
+++ b/tools/hotplug/Linux/launch-xenstore.in
@@ -15,6 +15,17 @@
 # License along with this library; If not, see <http://www.gnu.org/licenses/>.
 #
 
+initd=$1
+
+case "$initd" in
+	sysv) nonl='-n' ;;
+	systemd) nonl= ;;
+	*)
+	echo "first argument must be 'sysv' or 'systemd'"
+	exit 1
+	;;
+esac
+
 XENSTORED=@XENSTORED@
 
 . @XEN_SCRIPT_DIR@/hotplugpath.sh
@@ -44,14 +55,16 @@ timeout_xenstore () {
 	return 0
 }
 
-test_xenstore && exit 0
+mkdir -p @XEN_RUN_DIR@
+
+if test "$initd" = 'sysv' ; then
+	test_xenstore && exit 0
+fi
 
 test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons
 
 [ "$XENSTORETYPE" = "" ] && XENSTORETYPE=daemon
 
-/bin/mkdir -p @XEN_RUN_DIR@
-
 [ "$XENSTORETYPE" = "daemon" ] && {
 	[ -z "$XENSTORED_TRACE" ] || XENSTORED_ARGS="$XENSTORED_ARGS -T @XEN_LOG_DIR@/xenstored-trace.log"
 	[ -z "$XENSTORED" ] && XENSTORED=@XENSTORED@
@@ -59,13 +72,15 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 		echo "No xenstored found"
 		exit 1
 	}
+	[ "$initd" = 'sysv' ] && {
+		echo $nonl Starting $XENSTORED...
+		$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
+		timeout_xenstore $XENSTORED || exit 1
+		exit 0
+	}
 
-	echo -n Starting $XENSTORED...
-	$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
-
-	systemd-notify --booted 2>/dev/null || timeout_xenstore $XENSTORED || exit 1
-
-	exit 0
+	exec $XENSTORED -N $XENSTORED_ARGS
+	exit 1
 }
 
 [ "$XENSTORETYPE" = "domain" ] && {
@@ -75,9 +90,12 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 	XENSTORE_DOMAIN_ARGS="$XENSTORE_DOMAIN_ARGS --memory $XENSTORE_DOMAIN_SIZE"
 	[ -z "$XENSTORE_MAX_DOMAIN_SIZE" ] || XENSTORE_DOMAIN_ARGS="$XENSTORE_DOMAIN_ARGS --maxmem $XENSTORE_MAX_DOMAIN_SIZE"
 
-	echo -n Starting $XENSTORE_DOMAIN_KERNEL...
+	echo $nonl Starting $XENSTORE_DOMAIN_KERNEL...
 	${LIBEXEC_BIN}/init-xenstore-domain $XENSTORE_DOMAIN_ARGS || exit 1
-	systemd-notify --ready 2>/dev/null
+	[ "$initd" = 'systemd' ] && {
+		systemd-notify --ready
+		sleep 9
+	}
 
 	exit 0
 }
diff --git a/tools/hotplug/Linux/systemd/xenstored.service.in b/tools/hotplug/Linux/systemd/xenstored.service.in
index 80c1d408a5..c226eb3635 100644
--- a/tools/hotplug/Linux/systemd/xenstored.service.in
+++ b/tools/hotplug/Linux/systemd/xenstored.service.in
@@ -11,7 +11,7 @@ Type=notify
 NotifyAccess=all
 RemainAfterExit=true
 ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
-ExecStart=@XEN_SCRIPT_DIR@/launch-xenstore
+ExecStart=@XEN_SCRIPT_DIR@/launch-xenstore 'systemd'
 
 [Install]
 WantedBy=multi-user.target


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:56:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:56:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148341.274188 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRG-0005VQ-Ex; Thu, 01 Jul 2021 09:56:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148341.274188; Thu, 01 Jul 2021 09:56:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRG-0005V9-Am; Thu, 01 Jul 2021 09:56:54 +0000
Received: by outflank-mailman (input) for mailman id 148341;
 Thu, 01 Jul 2021 09:56:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRE-0004r4-FY
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:56:52 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dab754d8-b797-494a-b08a-c551f11e7521;
 Thu, 01 Jul 2021 09:56:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ue5Mh
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:40 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dab754d8-b797-494a-b08a-c551f11e7521
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133401;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=7VCnrhtz6PkcA6hU43Dz4SRyiupndGcq7UxNqTELglw=;
    b=Qn1iK4PuvrSQRmBbDFH3T3UsDMsI+qEEMBs1jKHvz2iCrUS7YTnMSloI4wNLXg9N8K
    xynwKO4T4U863Sc2tP5Oluf6xC3SY7p41f1WZFwVEqeKgQbNwCjmJLa1lcvXpDxusejM
    lHflf7IPDlNibxhWELktw0CVFMUwe794DPg32iF/4E2rdXLUAzBJTl7vYWS4efGoDDY8
    ae7qn5EG4Z+SKtc0cw4+d5w/z1vdqx6DdwXRL0N9QgWIW/AWl7WLs0he0k5kZ0jmIMJk
    qyoNWj82+xBpLqYO4UqvAHveEftafbJUjsuFUEesN2p2VbfNiwHpsAWd7GPOcoG+pT5L
    D9qw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	=?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 04/40] tools: use integer division in convert-legacy-stream
Date: Thu,  1 Jul 2021 11:55:59 +0200
Message-Id: <20210701095635.15648-5-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

A single slash gives a float, a double slash gives an int.

    bitmap = unpack_exact("Q" * ((max_id/64) + 1))
TypeError: can't multiply sequence by non-int of type 'float'

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- import division to remain compatible with python2.7 (andrew)
- white space in max_id chunk (andrew)
---
 tools/python/scripts/convert-legacy-stream | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
index ca93a93848..66ee3d2f5d 100755
--- a/tools/python/scripts/convert-legacy-stream
+++ b/tools/python/scripts/convert-legacy-stream
@@ -6,6 +6,7 @@ Convert a legacy migration stream to a v2 stream.
 """
 
 from __future__ import print_function
+from __future__ import division
 
 import sys
 import os, os.path
@@ -163,7 +164,7 @@ def write_libxc_hvm_params(params):
         raise RuntimeError("Expected even length list of hvm parameters")
 
     write_record(libxc.REC_TYPE_hvm_params,
-                 pack(libxc.HVM_PARAMS_FORMAT, len(params) / 2, 0),
+                 pack(libxc.HVM_PARAMS_FORMAT, len(params) // 2, 0),
                  pack("Q" * len(params), *params))
 
 def write_libxc_static_data_end():
@@ -264,8 +265,8 @@ def read_pv_extended_info(vm):
                           (so_far - total_length, ))
 
 def read_pv_p2m_frames(vm):
-    fpp = 4096 / vm.width
-    p2m_frame_len = (vm.p2m_size - 1) / fpp + 1
+    fpp = 4096 // vm.width
+    p2m_frame_len = (vm.p2m_size - 1) // fpp + 1
 
     info("P2M frames: fpp %d, p2m_frame_len %d" % (fpp, p2m_frame_len))
     write_libxc_pv_p2m_frames(vm, unpack_ulongs(p2m_frame_len))
@@ -405,7 +406,7 @@ def read_chunks(vm):
                                   (max_id, legacy.MAX_VCPU_ID))
 
             vm.max_vcpu_id = max_id
-            bitmap = unpack_exact("Q" * ((max_id/64) + 1))
+            bitmap = unpack_exact("Q" * ((max_id // 64) + 1))
 
             for idx, word in enumerate(bitmap):
                 bit_idx = 0


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:56:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:56:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148342.274199 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRI-0005tF-Ra; Thu, 01 Jul 2021 09:56:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148342.274199; Thu, 01 Jul 2021 09:56:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRI-0005su-My; Thu, 01 Jul 2021 09:56:56 +0000
Received: by outflank-mailman (input) for mailman id 148342;
 Thu, 01 Jul 2021 09:56:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRH-0004XT-RY
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:56:55 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.82])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 13d81159-b2fa-4d56-9e43-7e36d5b2af87;
 Thu, 01 Jul 2021 09:56:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uf5Mk
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:41 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 13d81159-b2fa-4d56-9e43-7e36d5b2af87
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133402;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=w7dbe+kbBj9TSW8hk0eL96KxDDaP2dTnYnGMLgLRSqI=;
    b=SbESxQvE2mOzRcBik9DJArk5eOy7F3cFOwsCKAO0xVAbzKozcTyr7yCt2b8XIKrhvp
    Xc/2AXKIaE8g2517el7vNKDDYcoSVXWrA3tjowsgWUtH/OngnWswcKSg8PaSrx+fiR5L
    4yRhX2EsZQ1zVKqBbgdpB/vBBHHxtibQuWigSmEEQcykJQG574C3X/NXucFLBMVFwsqc
    YmInlN/HOO7a0dPfKtyunjZqtkBKWBTw4SEzAX7k8mF5vBlYnW2F98RP+6rORfNVMRwt
    D8vYCLwcc2rQ3GEa+8HjeB+O4HK5k45zu5fGzCi4mWLTli5Qq/O5mSFVKiO2vLcdVaar
    aggw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	=?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in format string
Date: Thu,  1 Jul 2021 11:56:01 +0200
Message-Id: <20210701095635.15648-7-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Using the first element of a tuple for a format specifier fails with
python3.4 as included in SLE12:
    b = b"string/%x" % (i, )
TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'

It happens to work with python 2.7 and 3.6.
Use a syntax that is handled by all three variants.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/python/scripts/convert-legacy-stream | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
index 9003ac4f6d..235b922ff5 100755
--- a/tools/python/scripts/convert-legacy-stream
+++ b/tools/python/scripts/convert-legacy-stream
@@ -347,9 +347,9 @@ def read_libxl_toolstack(vm, data):
         if nil != 0:
             raise StreamError("physmap name not NUL terminated")
 
-        root = b"physmap/%x" % (phys, )
-        kv = [root + b"/start_addr", b"%x" % (start, ),
-              root + b"/size",       b"%x" % (size, ),
+        root = bytes(("physmap/%x" % phys).encode('utf-8'))
+        kv = [root + b"/start_addr", bytes(("%x" % start).encode('utf-8')),
+              root + b"/size",       bytes(("%x" % size).encode('utf-8')),
               root + b"/name",       name]
 
         for key, val in zip(kv[0::2], kv[1::2]):


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148346.274210 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRO-0006X7-9B; Thu, 01 Jul 2021 09:57:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148346.274210; Thu, 01 Jul 2021 09:57:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRO-0006Wq-4t; Thu, 01 Jul 2021 09:57:02 +0000
Received: by outflank-mailman (input) for mailman id 148346;
 Thu, 01 Jul 2021 09:57:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRM-0004XT-Rr
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:00 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ef2dd189-357d-4b4a-8416-ff4c5bf7bfa6;
 Thu, 01 Jul 2021 09:56:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ue5Mg
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:40 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ef2dd189-357d-4b4a-8416-ff4c5bf7bfa6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133400;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=WwrXv/hX+8hePyd4mOYFfrU0MUgrTtUZ8Gjzx55scrs=;
    b=X40nb9sxbjnVV1nAwDlmHOrl3IpT3EDdb5MM+s5mXJNeggyrJFdvy4UKL79A3twwkP
    +GgMYKeLI2azO1neoyTzxlVOnk4/L2Gy7xZCGEEfkoeofS2KIvBh4UFk1X9JGrcFjxW2
    45NQz5Q3u3KT+4TDeSyj8jS5AHNlDWtvHGbSorrR8r2ziEFd6zVLf0rxEpnDsEjIBAib
    9ktCG0zE9JmsWZSW0RCrX4SrSXe9uf3UfgFfkCzRXivSBfRt8vg/CRdyJSzCJmna5Gks
    j7aivrJk7fEaB7AbSpFZzedvlaKaj1bNHamNVOGR0IiRVI+wY/CfzsFZnFhxU5bmbseQ
    DpUQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: [PATCH v20210701 03/40] xl: fix description of migrate --debug
Date: Thu,  1 Jul 2021 11:55:58 +0200
Message-Id: <20210701095635.15648-4-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

xl migrate --debug used to track every pfn in every batch of pages.
But these times are gone. The code in xc_domain_save is the consumer
of this knob, but it considers it only for the remus and colo case.

Adjust the help text to tell what --debug does today: Nothing.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>

v02:
- the option has no effect anymore
---
 docs/man/xl.1.pod.in   | 2 +-
 tools/xl/xl_cmdtable.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index e2176bd696..70a6ebf438 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -481,7 +481,7 @@ domain.
 
 =item B<--debug>
 
-Display huge (!) amount of debug information during the migration process.
+This option has no effect. It is preserved for compatibility reasons.
 
 =item B<-p>
 
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index 661323d488..ca1dfa3525 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -172,7 +172,7 @@ const struct cmd_spec cmd_table[] = {
       "                migrate-receive [-d -e]\n"
       "-e              Do not wait in the background (on <host>) for the death\n"
       "                of the domain.\n"
-      "--debug         Print huge (!) amount of debug during the migration process.\n"
+      "--debug         Ignored.\n"
       "-p              Do not unpause domain after migrating it.\n"
       "-D              Preserve the domain id"
     },


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148348.274221 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRQ-00072E-U8; Thu, 01 Jul 2021 09:57:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148348.274221; Thu, 01 Jul 2021 09:57:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRQ-00071t-LN; Thu, 01 Jul 2021 09:57:04 +0000
Received: by outflank-mailman (input) for mailman id 148348;
 Thu, 01 Jul 2021 09:57:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRO-0004r4-Fp
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:02 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c587559b-37c5-434a-b906-25f3b6bdca35;
 Thu, 01 Jul 2021 09:56:53 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ul5N8
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:47 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c587559b-37c5-434a-b906-25f3b6bdca35
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133408;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=JtFmFI89VrmWr2vsArcScvsm4YNWIztizbLrNUj8v3A=;
    b=KF+/i2w2jn0OOsptwi4M0yyQC9/LaijzHsOLKpPAEf0C//wVSKbRIk+XVjsQX7aMP5
    pqFw6zhfu/4rm4fwzY7XBLDKe5PvzWH4M8FtlsYYGhly0yYXTG18oArFTlndqyD+SzzY
    8ZflkpY0K5epQ2Ns/L1DGVkdHLE/nD1yHWF3SN+6aerEc29EbxuJYB8XtQJyQUbNdfqo
    wdVfiAXgkTDLT3ucJ3KGWEczM0iB0VgTqX1LXMoGKL4zS1o+SkqUFfiy1FY+piUdnnfn
    UbS0/7qxmjisfu+6SzRoywgIDRYJ3L+ACrbYCrQfWlGvW/j+EnHRwjtNSNIcF2olHkCQ
    CSPw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 18/40] tools: save: move errors array
Date: Thu,  1 Jul 2021 11:56:13 +0200
Message-Id: <20210701095635.15648-19-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move errors array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h | 2 ++
 tools/libs/saverestore/save.c   | 7 ++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 5bd2913cb6..25ee8fcb0f 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -229,6 +229,8 @@ struct sr_save_arrays {
     xen_pfn_t mfns[MAX_BATCH_SIZE];
     /* write_batch: Types of the batch pfns. */
     xen_pfn_t types[MAX_BATCH_SIZE];
+    /* write_batch: Errors from attempting to map the gfns. */
+    int errors[MAX_BATCH_SIZE];
 };
 
 struct sr_restore_arrays {
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 0883c1fac0..9ebbf00ce7 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -92,7 +92,7 @@ static int write_batch(struct xc_sr_context *ctx)
     void *guest_mapping = NULL;
     void **guest_data = NULL;
     void **local_pages = NULL;
-    int *errors = NULL, rc = -1;
+    int *errors = ctx->save.m->errors, rc = -1;
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
     void *page, *orig_page;
@@ -105,8 +105,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Errors from attempting to map the gfns. */
-    errors = malloc(nr_pfns * sizeof(*errors));
     /* Pointers to page data to send.  Mapped gfns or local allocations. */
     guest_data = calloc(nr_pfns, sizeof(*guest_data));
     /* Pointers to locally allocated pages.  Need freeing. */
@@ -114,7 +112,7 @@ static int write_batch(struct xc_sr_context *ctx)
     /* iovec[] for writev(). */
     iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !errors || !guest_data || !local_pages || !iov )
+    if ( !guest_data || !local_pages || !iov )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -271,7 +269,6 @@ static int write_batch(struct xc_sr_context *ctx)
     free(iov);
     free(local_pages);
     free(guest_data);
-    free(errors);
 
     return rc;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148351.274232 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRT-0007Zx-Bs; Thu, 01 Jul 2021 09:57:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148351.274232; Thu, 01 Jul 2021 09:57:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRT-0007ZV-4z; Thu, 01 Jul 2021 09:57:07 +0000
Received: by outflank-mailman (input) for mailman id 148351;
 Thu, 01 Jul 2021 09:57:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRR-0004XT-S0
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:05 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.170])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0941045a-39ea-4084-bd5e-22ff734b2a6c;
 Thu, 01 Jul 2021 09:56:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ui5Ms
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:44 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0941045a-39ea-4084-bd5e-22ff734b2a6c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133404;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=ex4r4d11Mg1k2Zn9qFLItgRI9LdfJn43Y1sVEepvWiU=;
    b=MINrfXc5iyKU6L0b0y1toSzNvOC3EMNFBf2mAqFKmcHh5kEPrAhRw/niCitYKxPoD3
    AowdVRraJeFi3mHit3amy7y4SjQAE+dxJG4R3Nq/bPV+R8iXK8btER1ImH6EO9Bqpkkq
    U1AgaOznJ0o9KcNiU6NNBxp6wu5AcYQoAYCTooDiCKF7U572lWW117vDDYNKpcYQay6h
    fOVZS8/EYQ1ggUZDguUR8z3Ap0/M80632/OnVF4Jw81Uy6Dh22jVKkh+KhGZjXAEJlZI
    tTk33dwwugQ4fd9FTNsqK3od7UFonplaU7wAzYOBL9QzoK3RBWRc6z/L8nqKUco8XBCd
    KzBA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 11/40] tools: use sr_is_known_page_type
Date: Thu,  1 Jul 2021 11:56:06 +0200
Message-Id: <20210701095635.15648-12-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Verify pfn type on sending side, also verify incoming batch of pfns.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>

v02:
- use sr_is_known_page_type instead of xc_is_known_page_type
---
 tools/libs/saverestore/restore.c | 3 +--
 tools/libs/saverestore/save.c    | 6 ++++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index be259a1c6b..324b9050e2 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -406,8 +406,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         }
 
         type = (pages->pfn[i] & PAGE_DATA_TYPE_MASK) >> 32;
-        if ( ((type >> XEN_DOMCTL_PFINFO_LTAB_SHIFT) >= 5) &&
-             ((type >> XEN_DOMCTL_PFINFO_LTAB_SHIFT) <= 8) )
+        if ( sr_is_known_page_type(type) == false )
         {
             ERROR("Invalid type %#"PRIx32" for pfn %#"PRIpfn" (index %u)",
                   type, pfn, i);
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index ae3e8797d0..6f820ea432 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -147,6 +147,12 @@ static int write_batch(struct xc_sr_context *ctx)
 
     for ( i = 0; i < nr_pfns; ++i )
     {
+        if ( sr_is_known_page_type(types[i]) == false )
+        {
+            ERROR("Wrong type %#"PRIpfn" for pfn %#"PRIpfn, types[i], mfns[i]);
+            goto err;
+        }
+
         switch ( types[i] )
         {
         case XEN_DOMCTL_PFINFO_BROKEN:


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148353.274241 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRU-0007sC-Nc; Thu, 01 Jul 2021 09:57:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148353.274241; Thu, 01 Jul 2021 09:57:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRU-0007rS-Gg; Thu, 01 Jul 2021 09:57:08 +0000
Received: by outflank-mailman (input) for mailman id 148353;
 Thu, 01 Jul 2021 09:57:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRT-0004r4-Fz
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:07 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.81])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 05bcbd22-3dea-4a3b-a0ca-18bda5380d99;
 Thu, 01 Jul 2021 09:56:54 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uh5Mn
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:43 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 05bcbd22-3dea-4a3b-a0ca-18bda5380d99
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133403;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=+KbVruLtdIEtwG93Soc7D+UJBCIYv9cMILQskmOXes4=;
    b=D7SisCzfa2rafDqJS+Cmj1d+KIdVX6sD5wo/ADBI8YzE11YqWd4yX3vfLjVoUlZz7t
    D+JpnF79BDH8B8kztS+G+l95eXmYfQTfZF5WjWSLWJmH/Q0gfRaDOKbbOikCdMgX4yDG
    46MaGdrgIep0sk9B/gYuRl/tg0ygFUZuzOUnK/X/4Wgp0fZXtDveil6JgzMfdQtQem8P
    f+k6PAwPyg+ZJlN1kEJsoWTOzHYhaxQ6SmhcXEFSFMmcPPPPiBLgT58+El2Qb0ZtCU83
    taMYjCtjJx8tRQQwNAjSvtc/AYJdDlHRikICCtf/mpzPsNc3z5bLy/4Hy0nqF9Bl0+rt
    kMJQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 08/40] MAINTAINERS: add myself as saverestore maintainer
Date: Thu,  1 Jul 2021 11:56:03 +0200
Message-Id: <20210701095635.15648-9-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

I touched it last.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 MAINTAINERS | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 8a52a03969..36dc634958 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -381,6 +381,12 @@ R:	Juergen Gross <jgross@suse.com>
 S:	Supported
 F:	tools/libs/
 
+LIBSAVERESTORE:
+M:	Olaf Hering <olaf@aepfle.de>
+S:	Supported
+F:	tools/include/xensaverestore.h
+F:	tools/libs/saverestore/
+
 LIBXENLIGHT
 M:	Ian Jackson <iwj@xenproject.org>
 M:	Wei Liu <wl@xen.org>


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148355.274253 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRZ-0000I3-17; Thu, 01 Jul 2021 09:57:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148355.274253; Thu, 01 Jul 2021 09:57:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRY-0000Hk-S9; Thu, 01 Jul 2021 09:57:12 +0000
Received: by outflank-mailman (input) for mailman id 148355;
 Thu, 01 Jul 2021 09:57:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRW-0004XT-Rt
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:10 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.83])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c60b6e97-d7a6-4b2a-a322-8cfde3b17073;
 Thu, 01 Jul 2021 09:56:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ui5Mq
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:44 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c60b6e97-d7a6-4b2a-a322-8cfde3b17073
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133404;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=deA9YRVAOQ9im7B/3eOo3ZnuGujRxb1REyjDaCpxsfY=;
    b=ArRTIdul3rn/jRUBaAMtWUjGSvhOeN0c6D25JquFZzJlpSlu3P2UqIQYqBDbCGwQAz
    4LQUy0Vg4i+wmTHxvFW3F1mxWXSmwNyv4jBz2FdL/n0FQSUrqpwJpGPp0bizAWHIt+vt
    dMw4APZU8EWIUaL+/xg5WdwEJ1qtIkIMhmqSYLDyBUVBhGziDzlUmEDAwwUsE/cjScCE
    grgpPzR7B/03fXb8fsN40E+jlWIerDK/UKoGHqjifE64ierjRRJUk3vnT3w/O/yVx9+L
    2/46uUjfv/wGpTz9lN4C6WCm9VkWRVKsDTjqgd0C+n0hB/D3mrf56htE97a8wolGbWzs
    s+gg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 10/40] tools: add xc_is_known_page_type to libxenctrl
Date: Thu,  1 Jul 2021 11:56:05 +0200
Message-Id: <20210701095635.15648-11-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Users of xc_get_pfn_type_batch may want to sanity check the data
returned by Xen. Add a simple helper for this purpose.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- rename xc_is_known_page_type to sr_is_known_page_type
- move from ctrl/xc_private.h to saverestore/common.h (jgross)
---
 tools/libs/saverestore/common.h | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index ca2eb47a4f..07c506360c 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -467,6 +467,39 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 /* Handle a STATIC_DATA_END record. */
 int handle_static_data_end(struct xc_sr_context *ctx);
 
+/* Sanitiy check for types returned by Xen */
+static inline bool sr_is_known_page_type(xen_pfn_t type)
+{
+    bool ret;
+
+    switch (type)
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_XALLOC: /* Synthetic type in Xen 4.2 - 4.5 */
+    case XEN_DOMCTL_PFINFO_BROKEN:
+        ret = true;
+        break;
+    default:
+        ret = false;
+        break;
+    }
+    return ret;
+}
+
 #endif
 /*
  * Local variables:


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148356.274258 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRZ-0000Ms-GA; Thu, 01 Jul 2021 09:57:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148356.274258; Thu, 01 Jul 2021 09:57:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRZ-0000ME-92; Thu, 01 Jul 2021 09:57:13 +0000
Received: by outflank-mailman (input) for mailman id 148356;
 Thu, 01 Jul 2021 09:57:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRY-0004r4-GD
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:12 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.170])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a52234a9-c9c2-4701-8d14-db772e6547a8;
 Thu, 01 Jul 2021 09:56:53 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uk5N2
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:46 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a52234a9-c9c2-4701-8d14-db772e6547a8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133406;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=6RnKPQsH20PdbTfVhW2egX9qSzfuCkrvoyMFtE/0GwA=;
    b=cquN494lrm7ljI6MEKPtT9XjxAa3kyMZOzySwPXws847LMv75F/o/r3Bcv9727yP7h
    9I+k2OiyQPa3l0jMlVeudm7hB1ShHv9IygEH4da018Z4/dEr55bbxrEedIQcXpvc3qQX
    Bvd5Ezbc7s/qvIfQR1dsm9PbM5Z3+0B8zWdcLUR9I5oHUbfffnbfSrLrGkk8W7Wix4cm
    3hbzvHBNlHvjHB1M7VWiamhHsXshQi8u7CPBj+2VGjr+OuGj1sTloYnFmhfamf7Hhsxz
    SLQ0KTybcvu+tan3ojBvYivYKkqJ31UrEhYFXXKB3EslYuxwRJ7GhbWtAZXmKw61HWoV
    2a+w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 15/40] tools: prepare to allocate saverestore arrays once
Date: Thu,  1 Jul 2021 11:56:10 +0200
Message-Id: <20210701095635.15648-16-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The hotpath 'send_dirty_pages' is supposed to do just one thing: sending.
The other end 'handle_page_data' is supposed to do just receiving.

But instead both do other costly work like memory allocations and data moving.
Do the allocations once, the array sizes are a compiletime constant.
Avoid unneeded copying of data by receiving data directly into mapped guest memory.

This patch is just prepartion, subsequent changes will populate the arrays.

Once all changes are applied, migration of a busy HVM domU changes like that:

Without this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a20963b3 xen_testing):
2020-10-29 10:23:10.711+0000: xc: show_transfer_rate: 23663128 bytes + 2879563 pages in 55.324905335 sec, 203 MiB/sec: Internal error
2020-10-29 10:23:35.115+0000: xc: show_transfer_rate: 16829632 bytes + 2097552 pages in 24.401179720 sec, 335 MiB/sec: Internal error
2020-10-29 10:23:59.436+0000: xc: show_transfer_rate: 16829032 bytes + 2097478 pages in 24.319025928 sec, 336 MiB/sec: Internal error
2020-10-29 10:24:23.844+0000: xc: show_transfer_rate: 16829024 bytes + 2097477 pages in 24.406992500 sec, 335 MiB/sec: Internal error
2020-10-29 10:24:48.292+0000: xc: show_transfer_rate: 16828912 bytes + 2097463 pages in 24.446489027 sec, 335 MiB/sec: Internal error
2020-10-29 10:25:01.816+0000: xc: show_transfer_rate: 16836080 bytes + 2098356 pages in 13.447091818 sec, 609 MiB/sec: Internal error

With this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a20963b3 xen_unstable):
2020-10-28 21:26:05.074+0000: xc: show_transfer_rate: 23663128 bytes + 2879563 pages in 52.564054368 sec, 213 MiB/sec: Internal error
2020-10-28 21:26:23.527+0000: xc: show_transfer_rate: 16830040 bytes + 2097603 pages in 18.450592015 sec, 444 MiB/sec: Internal error
2020-10-28 21:26:41.926+0000: xc: show_transfer_rate: 16830944 bytes + 2097717 pages in 18.397862306 sec, 445 MiB/sec: Internal error
2020-10-28 21:27:00.339+0000: xc: show_transfer_rate: 16829176 bytes + 2097498 pages in 18.411973339 sec, 445 MiB/sec: Internal error
2020-10-28 21:27:18.643+0000: xc: show_transfer_rate: 16828592 bytes + 2097425 pages in 18.303326695 sec, 447 MiB/sec: Internal error
2020-10-28 21:27:26.289+0000: xc: show_transfer_rate: 16835952 bytes + 2098342 pages in 7.579846749 sec, 1081 MiB/sec: Internal error

Note: the performance improvement depends on the used network cards,
wirespeed and the host:
- No improvement is expected with a 1G link.
- Improvement can be seen as shown above on a 10G link.
- Just a slight improvment can be seen on a 100G link.

This change also populates sr_save_arrays with "batch_pfns", and
sr_restore_arrays with "pfns" to make sure malloc is always called
with a non-zero value.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- rename xc_sr_save_arrays to sr_save_arrays
- rename xc_sr_restore_arrays to sr_restore_arrays
- merge handling of "batch_pfns" and "pfns" to make sure malloc is
  called with a non-zero size value (jgross)
---
 tools/libs/saverestore/common.h  | 12 +++++++++++-
 tools/libs/saverestore/restore.c | 14 ++++++++++----
 tools/libs/saverestore/save.c    | 27 +++++++++++++--------------
 3 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 252076cf51..968bb8af13 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -223,6 +223,15 @@ static inline int update_blob(struct xc_sr_blob *blob,
     return 0;
 }
 
+struct sr_save_arrays {
+    xen_pfn_t batch_pfns[MAX_BATCH_SIZE];
+};
+
+struct sr_restore_arrays {
+    /* handle_page_data */
+    xen_pfn_t pfns[MAX_BATCH_SIZE];
+};
+
 struct xc_sr_context
 {
     xc_interface *xch;
@@ -255,11 +264,11 @@ struct xc_sr_context
 
             struct precopy_stats stats;
 
-            xen_pfn_t *batch_pfns;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
             xc_hypercall_buffer_t dirty_bitmap_hbuf;
+            struct sr_save_arrays *m;
         } save;
 
         struct /* Restore data. */
@@ -311,6 +320,7 @@ struct xc_sr_context
 
             /* Sender has invoked verify mode on the stream. */
             bool verify;
+            struct sr_restore_arrays *m;
         } restore;
     };
 
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 799170c7a1..c203ce503d 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -315,7 +315,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     unsigned int i, pages_of_data = 0;
     int rc = -1;
 
-    xen_pfn_t *pfns = NULL, pfn;
+    xen_pfn_t *pfns = ctx->restore.m->pfns, pfn;
     uint32_t *types = NULL, type;
 
     /*
@@ -363,9 +363,8 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    pfns = malloc(pages->count * sizeof(*pfns));
     types = malloc(pages->count * sizeof(*types));
-    if ( !pfns || !types )
+    if ( !types )
     {
         ERROR("Unable to allocate enough memory for %u pfns",
               pages->count);
@@ -412,7 +411,6 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
                            &pages->pfn[pages->count]);
  err:
     free(types);
-    free(pfns);
 
     return rc;
 }
@@ -739,6 +737,13 @@ static int setup(struct xc_sr_context *ctx)
     }
     ctx->restore.allocated_rec_num = DEFAULT_BUF_RECORDS;
 
+    ctx->restore.m = malloc(sizeof(*ctx->restore.m));
+    if ( !ctx->restore.m ) {
+        ERROR("Unable to allocate memory for arrays");
+        rc = -1;
+        goto err;
+    }
+
  err:
     return rc;
 }
@@ -757,6 +762,7 @@ static void cleanup(struct xc_sr_context *ctx)
         xc_hypercall_buffer_free_pages(
             xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->restore.p2m_size)));
 
+    free(ctx->restore.m);
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
 
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index f8fbe7a742..e29b6e1d66 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -77,7 +77,7 @@ static int write_checkpoint_record(struct xc_sr_context *ctx)
 
 /*
  * Writes a batch of memory as a PAGE_DATA record into the stream.  The batch
- * is constructed in ctx->save.batch_pfns.
+ * is constructed in ctx->save.m->batch_pfns.
  *
  * This function:
  * - gets the types for each pfn in the batch.
@@ -128,12 +128,12 @@ static int write_batch(struct xc_sr_context *ctx)
     for ( i = 0; i < nr_pfns; ++i )
     {
         types[i] = mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
-                                                      ctx->save.batch_pfns[i]);
+                                                      ctx->save.m->batch_pfns[i]);
 
         /* Likely a ballooned page. */
         if ( mfns[i] == INVALID_MFN )
         {
-            set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
+            set_bit(ctx->save.m->batch_pfns[i], ctx->save.deferred_pages);
             ++ctx->save.nr_deferred_pages;
         }
     }
@@ -179,7 +179,7 @@ static int write_batch(struct xc_sr_context *ctx)
             if ( errors[p] )
             {
                 ERROR("Mapping of pfn %#"PRIpfn" (mfn %#"PRIpfn") failed %d",
-                      ctx->save.batch_pfns[i], mfns[p], errors[p]);
+                      ctx->save.m->batch_pfns[i], mfns[p], errors[p]);
                 goto err;
             }
 
@@ -193,7 +193,7 @@ static int write_batch(struct xc_sr_context *ctx)
             {
                 if ( rc == -1 && errno == EAGAIN )
                 {
-                    set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
+                    set_bit(ctx->save.m->batch_pfns[i], ctx->save.deferred_pages);
                     ++ctx->save.nr_deferred_pages;
                     types[i] = XEN_DOMCTL_PFINFO_XTAB;
                     --nr_pages;
@@ -224,7 +224,7 @@ static int write_batch(struct xc_sr_context *ctx)
     rec.length += nr_pages * PAGE_SIZE;
 
     for ( i = 0; i < nr_pfns; ++i )
-        rec_pfns[i] = ((uint64_t)(types[i]) << 32) | ctx->save.batch_pfns[i];
+        rec_pfns[i] = ((uint64_t)(types[i]) << 32) | ctx->save.m->batch_pfns[i];
 
     iov[0].iov_base = &rec.type;
     iov[0].iov_len = sizeof(rec.type);
@@ -296,9 +296,9 @@ static int flush_batch(struct xc_sr_context *ctx)
 
     if ( !rc )
     {
-        VALGRIND_MAKE_MEM_UNDEFINED(ctx->save.batch_pfns,
+        VALGRIND_MAKE_MEM_UNDEFINED(ctx->save.m->batch_pfns,
                                     MAX_BATCH_SIZE *
-                                    sizeof(*ctx->save.batch_pfns));
+                                    sizeof(*ctx->save.m->batch_pfns));
     }
 
     return rc;
@@ -315,7 +315,7 @@ static int add_to_batch(struct xc_sr_context *ctx, xen_pfn_t pfn)
         rc = flush_batch(ctx);
 
     if ( rc == 0 )
-        ctx->save.batch_pfns[ctx->save.nr_batch_pfns++] = pfn;
+        ctx->save.m->batch_pfns[ctx->save.nr_batch_pfns++] = pfn;
 
     return rc;
 }
@@ -849,13 +849,12 @@ static int setup(struct xc_sr_context *ctx)
 
     dirty_bitmap = xc_hypercall_buffer_alloc_pages(
         xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)));
-    ctx->save.batch_pfns = malloc(MAX_BATCH_SIZE *
-                                  sizeof(*ctx->save.batch_pfns));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
+    ctx->save.m = malloc(sizeof(*ctx->save.m));
 
-    if ( !ctx->save.batch_pfns || !dirty_bitmap || !ctx->save.deferred_pages )
+    if ( !ctx->save.m || !dirty_bitmap || !ctx->save.deferred_pages )
     {
-        ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
+        ERROR("Unable to allocate memory for dirty bitmaps and"
               " deferred pages");
         rc = -1;
         errno = ENOMEM;
@@ -884,7 +883,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
-    free(ctx->save.batch_pfns);
+    free(ctx->save.m);
 }
 
 /*


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148357.274276 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRd-0001BI-AD; Thu, 01 Jul 2021 09:57:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148357.274276; Thu, 01 Jul 2021 09:57:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRd-0001Az-4G; Thu, 01 Jul 2021 09:57:17 +0000
Received: by outflank-mailman (input) for mailman id 148357;
 Thu, 01 Jul 2021 09:57:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRb-0004XT-Rv
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:15 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.82])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c2f72f25-cc87-4aca-9cb6-6f6e2dcd9778;
 Thu, 01 Jul 2021 09:56:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uf5Mi
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:41 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c2f72f25-cc87-4aca-9cb6-6f6e2dcd9778
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133401;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=tMf89Ke5Bo6A5Pju27XJS58XTaKNVAzyOo/JUVzZcLo=;
    b=nWvRnJWLur55V1tgXMbgxhtwgiY/CRv+DqprRK4PbMxuavZgH5yfVh6Ft1q6K0pILK
    ukoX/5a8uZ1sWLc2Dl59Eo1P8rfuFG5CeX1tkPuaiO1Yp13sffMDQCoXL9BtIc88MGxC
    xaewNcFmtlO6jV0QGeHsyjupGZkh3fhdXtuAVgjL9vjObeMtg+zcORScKLD9Q3q0aIG8
    mWLyRU+I9vvlWbHwTxEK9ZiwmNdPdaf07uDSeTPf1nAr36mF38LC/W0irQXludbzbgZW
    6zJkmdBGWIhWfs1EdSfjDEE9mss+4Zk9z3hGYyssgufhn2QBpe2er1jvzpcmJYqZ+/2W
    oLhw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	=?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 05/40] tools: handle libxl__physmap_info.name properly in convert-legacy-stream
Date: Thu,  1 Jul 2021 11:56:00 +0200
Message-Id: <20210701095635.15648-6-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The trailing member name[] in libxl__physmap_info is written as a
cstring into the stream. The current code does a sanity check if the
last byte is zero. This attempt fails with python3.4 because name[-1]
returns a type int. As a result the comparison with byte(\00) fails:

  File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
    raise StreamError("physmap name not NUL terminated")
StreamError: physmap name not NUL terminated

To handle both python variants the cstring is unpacked into the actual
string and the trailing nil.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/python/scripts/convert-legacy-stream | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
index 66ee3d2f5d..9003ac4f6d 100755
--- a/tools/python/scripts/convert-legacy-stream
+++ b/tools/python/scripts/convert-legacy-stream
@@ -336,20 +336,21 @@ def read_libxl_toolstack(vm, data):
         if len(data) < namelen:
             raise StreamError("Remaining data too short for physmap name")
 
-        name = data[:namelen]
+        c_string = data[:namelen]
         data = data[namelen:]
 
         # Strip padding off the end of name
         if twidth == 64:
-            name = name[:-4]
+            c_string = c_string[:-4]
 
-        if name[-1] != b'\x00':
+        name, nil = unpack("={0}sB".format(len(c_string) - 1), c_string)
+        if nil != 0:
             raise StreamError("physmap name not NUL terminated")
 
         root = b"physmap/%x" % (phys, )
         kv = [root + b"/start_addr", b"%x" % (start, ),
               root + b"/size",       b"%x" % (size, ),
-              root + b"/name",       name[:-1]]
+              root + b"/name",       name]
 
         for key, val in zip(kv[0::2], kv[1::2]):
             info("    '%s' = '%s'" % (key.decode(), val.decode()))


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148359.274284 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRe-0001Yz-PG; Thu, 01 Jul 2021 09:57:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148359.274284; Thu, 01 Jul 2021 09:57:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRe-0001Xo-JS; Thu, 01 Jul 2021 09:57:18 +0000
Received: by outflank-mailman (input) for mailman id 148359;
 Thu, 01 Jul 2021 09:57:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRd-0004r4-Gd
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:17 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.104])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d5bf76a4-ed1b-4216-9294-edd5278aaf94;
 Thu, 01 Jul 2021 09:56:55 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619un5NC
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:49 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d5bf76a4-ed1b-4216-9294-edd5278aaf94
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133409;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=0ENk4UcCha2plreo4qu8AQV+ZCOBGywsK+BeOcrXNEw=;
    b=hvsGNz2aPTyUlje9u2IN1cqOqVzxnm8zakXYxhY4Dh3rUTNsVHK9vn9sEFbKoLqQrO
    zabF6S0hEqENSsCUFdqV6+pRBRaSAX9Xh7vdUFlHWHowuAvORi+vCclXXQi6Dv7ePMIH
    9KjOwKV6v1TpW4hegVz0r4mxxNUBiFBlYaYCLWWrvXFkR7oVqeNz5dMiuE5QCWmphRoc
    O9UwdBLMExdfaT/LKBbvXao0iIwni+8tyTBpkFELF7ec4Vrjbzsi3DjkizKlFq1eGFBm
    3+sAyGbAF6aMjpoUjwe8iovH4XqJGJI4yBA1O89Lrh2uIZgXvJt7OxE82YUzT/Ryhbi7
    uV8Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 21/40] tools: save: move guest_data array
Date: Thu,  1 Jul 2021 11:56:16 +0200
Message-Id: <20210701095635.15648-22-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move guest_data array into preallocated space.

Because this was allocated with calloc:
Adjust the loop to clear unused entries as needed.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h |  2 ++
 tools/libs/saverestore/save.c   | 11 ++++++-----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 3994ab3844..c3570e0c9a 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -235,6 +235,8 @@ struct sr_save_arrays {
     struct iovec iov[MAX_BATCH_SIZE + 4];
     /* write_batch */
     uint64_t rec_pfns[MAX_BATCH_SIZE];
+    /* write_batch: Pointers to page data to send. Mapped gfns or local allocations. */
+    void *guest_data[MAX_BATCH_SIZE];
 };
 
 struct sr_restore_arrays {
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 0f02988ff9..ea04cb1a74 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -90,7 +90,7 @@ static int write_batch(struct xc_sr_context *ctx)
     xc_interface *xch = ctx->xch;
     xen_pfn_t *mfns = ctx->save.m->mfns, *types = ctx->save.m->types;
     void *guest_mapping = NULL;
-    void **guest_data = NULL;
+    void **guest_data = ctx->save.m->guest_data;
     void **local_pages = NULL;
     int *errors = ctx->save.m->errors, rc = -1;
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
@@ -105,12 +105,10 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Pointers to page data to send.  Mapped gfns or local allocations. */
-    guest_data = calloc(nr_pfns, sizeof(*guest_data));
     /* Pointers to locally allocated pages.  Need freeing. */
     local_pages = calloc(nr_pfns, sizeof(*local_pages));
 
-    if ( !guest_data || !local_pages )
+    if ( !local_pages )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -166,7 +164,10 @@ static int write_batch(struct xc_sr_context *ctx)
         for ( i = 0, p = 0; i < nr_pfns; ++i )
         {
             if ( page_type_has_stream_data(types[i]) == false )
+            {
+                guest_data[i] = NULL;
                 continue;
+            }
 
             if ( errors[p] )
             {
@@ -183,6 +184,7 @@ static int write_batch(struct xc_sr_context *ctx)
 
             if ( rc )
             {
+                guest_data[i] = NULL;
                 if ( rc == -1 && errno == EAGAIN )
                 {
                     set_bit(ctx->save.m->batch_pfns[i], ctx->save.deferred_pages);
@@ -256,7 +258,6 @@ static int write_batch(struct xc_sr_context *ctx)
     for ( i = 0; local_pages && i < nr_pfns; ++i )
         free(local_pages[i]);
     free(local_pages);
-    free(guest_data);
 
     return rc;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148361.274298 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRj-0002Oa-8u; Thu, 01 Jul 2021 09:57:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148361.274298; Thu, 01 Jul 2021 09:57:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRj-0002Nz-0W; Thu, 01 Jul 2021 09:57:23 +0000
Received: by outflank-mailman (input) for mailman id 148361;
 Thu, 01 Jul 2021 09:57:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRg-0004XT-SM
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:20 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8a889ee9-8a7f-45e2-9550-29b8986b84eb;
 Thu, 01 Jul 2021 09:56:50 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ui5Mt
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:44 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8a889ee9-8a7f-45e2-9550-29b8986b84eb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133405;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=ZxRdsP8qr4H2zPhSJi5htgzgprczUQRiHOrKeRY262U=;
    b=pySoDWwLANK1H+EV2djdxCEct7RE0o92/5MBJbj9uBZ20QaDBrkor4fsJbbwF94Qn9
    oF1R0s3ZGgNTnRhVBs2zFr9xUaFrc05L/dLZ9Nzt/Dm8OED46IxiswjcVursv+j1XV33
    AoGb2AbwrJHSbv3JRr2z5oLqykleezJJsMFrzc2GynrNFEQuCPjitiAdlsMojAPB7yCD
    Vm75lhMVX30wiJ8nX34ukRMOo4OMFU9JS0L4jqN62m9qq9MbSqo9C+whOKhmgYkc1nb+
    K8s6BcDCbkJD5IEq2RrYG7wuVdlm9mtUdqVg3VuHlqDnCWXxPdwBIkdYWk2BL3NfKV9e
    7m2A==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 12/40] tools: unify type checking for data pfns in migration stream
Date: Thu,  1 Jul 2021 11:56:07 +0200
Message-Id: <20210701095635.15648-13-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Introduce a helper which decides if a given pfn in the migration
stream is backed by memory.

This specifically deals with type XEN_DOMCTL_PFINFO_XALLOC, which was
a synthetic toolstack-only type used in Xen 4.2 to 4.5. It indicated a
dirty page on the sending side for which no data will be send in the
initial iteration.

No change in behavior intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/saverestore/common.h  | 17 +++++++++++++++++
 tools/libs/saverestore/restore.c |  5 ++---
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 07c506360c..fa242e808d 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -500,6 +500,23 @@ static inline bool sr_is_known_page_type(xen_pfn_t type)
     return ret;
 }
 
+static inline bool page_type_to_populate(uint32_t type)
+{
+    bool ret;
+
+    switch (type)
+    {
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_BROKEN:
+        ret = false;
+        break;
+    case XEN_DOMCTL_PFINFO_XALLOC:
+    default:
+        ret = true;
+        break;
+    }
+    return ret;
+}
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 324b9050e2..477b7527a1 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -152,9 +152,8 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 
     for ( i = 0; i < count; ++i )
     {
-        if ( (!types || (types &&
-                         (types[i] != XEN_DOMCTL_PFINFO_XTAB &&
-                          types[i] != XEN_DOMCTL_PFINFO_BROKEN))) &&
+        if ( (!types ||
+              (types && page_type_to_populate(types[i]) == true)) &&
              !pfn_is_populated(ctx, original_pfns[i]) )
         {
             rc = pfn_set_populated(ctx, original_pfns[i]);


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148362.274303 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRk-0002Xs-3G; Thu, 01 Jul 2021 09:57:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148362.274303; Thu, 01 Jul 2021 09:57:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRj-0002WF-Ni; Thu, 01 Jul 2021 09:57:23 +0000
Received: by outflank-mailman (input) for mailman id 148362;
 Thu, 01 Jul 2021 09:57:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRi-0004r4-Gk
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:22 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.101])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b3f38ebc-a56c-4e01-8323-f92017ee84eb;
 Thu, 01 Jul 2021 09:56:57 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619up5NL
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:51 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b3f38ebc-a56c-4e01-8323-f92017ee84eb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133411;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=6ENQhbtthK4eIjkXxFO8V/gNE/sF6qih6TLZLeOb+b0=;
    b=tXgf/73seA2ReRIm8D/JvX4Ys0pziOMDW4aurCKsesPhuWp5kqvEKayk+88kKUk4FQ
    a1798geALsJt37Y5/f/RrZn6uJh2462CYxJwdMIfw8h7sXroDhjML12aaxRwKDgRoytd
    oQ9hwexHpCtTDxA70biVJOi8pSGynJ4nXJWgoxdOYJchetsXIMdXJioL0B9Y5ujMLWRG
    eZzZ3aTgGqEIWr0XgQvxepGEPbmx5vntjJEPKZDqHe9ZwHuTfwvgN9hxrxVNJZT/0qMF
    wnYCEkn4Ao6LrXPnvy4cn5BPloAViOynzk9AmdmLAiXfbZW4gkbxiuuJ2cLmWz8vsH6R
    ROIw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 26/40] tools: restore: move mfns array in populate_pfns
Date: Thu,  1 Jul 2021 11:56:21 +0200
Message-Id: <20210701095635.15648-27-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move populate_pfns mfns array into preallocated space.
Use some prefix to avoid conflict with an array used in handle_page_data.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h  | 2 ++
 tools/libs/saverestore/restore.c | 5 ++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 7684c35e22..9d2ea96583 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -242,6 +242,8 @@ struct sr_restore_arrays {
     /* process_page_data */
     xen_pfn_t mfns[MAX_BATCH_SIZE];
     int map_errs[MAX_BATCH_SIZE];
+    /* populate_pfns */
+    xen_pfn_t pp_mfns[MAX_BATCH_SIZE];
 };
 
 struct xc_sr_context
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 578ee1accb..7418abf1c5 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -138,12 +138,12 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
                   const xen_pfn_t *original_pfns, const uint32_t *types)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = malloc(count * sizeof(*mfns)),
+    xen_pfn_t *mfns = ctx->restore.m->pp_mfns,
         *pfns = malloc(count * sizeof(*pfns));
     unsigned int i, nr_pfns = 0;
     int rc = -1;
 
-    if ( !mfns || !pfns )
+    if ( !pfns )
     {
         ERROR("Failed to allocate %zu bytes for populating the physmap",
               2 * count * sizeof(*mfns));
@@ -191,7 +191,6 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 
  err:
     free(pfns);
-    free(mfns);
 
     return rc;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148367.274319 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRo-0003a5-DY; Thu, 01 Jul 2021 09:57:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148367.274319; Thu, 01 Jul 2021 09:57:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRo-0003Zp-92; Thu, 01 Jul 2021 09:57:28 +0000
Received: by outflank-mailman (input) for mailman id 148367;
 Thu, 01 Jul 2021 09:57:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRl-0004XT-SS
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:25 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 844743a8-e2aa-4a5c-ba0d-5227f666b505;
 Thu, 01 Jul 2021 09:56:51 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uj5Mz
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:45 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 844743a8-e2aa-4a5c-ba0d-5227f666b505
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133406;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=HjAuQTbWmPJqlcbKtv74PXHy29j5qe7IwbSTeBBg19U=;
    b=SjBOdI0lSSEEBQqOqmxQDxpMY6Z2JwrcX6hsX0vTDg6IX2qrCx8zFagH0CYUx9FDE+
    wJr0ifynv8UbIBIIvZjp5jAtunFRKxNBT/NdyMtv6pYFgu6xgXfTxqfGXFokLeH9Wjca
    hrpAgUMNdhwAK5C+hRl9w+nJE6i4D9qc2Jnw4yMlgPYR7BOl9GnbamSFM9Yol9wyHafY
    13efq1OZf5k4nXDcCviHNuk4ZS8R8tn9vflUVzmcWboXv4iBmVyE07bkJyBpQRuAVFIo
    fqU88xLfamB95nhRkQ3M07BpcGhEjF2dYq0mNcafBhglJO4zNjXWmwu+7rglBUC5N6kQ
    9wPA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 14/40] tools: show migration transfer rate in send_dirty_pages
Date: Thu,  1 Jul 2021 11:56:09 +0200
Message-Id: <20210701095635.15648-15-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Show how fast domU pages are transferred in each iteration.

The relevant data is how fast the pfns travel, not so much how much
protocol overhead exists. So the reported MiB/sec is just for pfns.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- rearrange MiB_sec calculation (jgross)
---
 tools/libs/saverestore/common.h |  2 ++
 tools/libs/saverestore/save.c   | 46 +++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 905b4078f6..252076cf51 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -250,6 +250,8 @@ struct xc_sr_context
             bool debug;
 
             unsigned long p2m_size;
+            size_t pages_sent;
+            size_t overhead_sent;
 
             struct precopy_stats stats;
 
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 12598bd4e2..f8fbe7a742 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -1,5 +1,6 @@
 #include <assert.h>
 #include <arpa/inet.h>
+#include <time.h>
 
 #include "common.h"
 
@@ -238,6 +239,8 @@ static int write_batch(struct xc_sr_context *ctx)
     iov[3].iov_len = nr_pfns * sizeof(*rec_pfns);
 
     iovcnt = 4;
+    ctx->save.pages_sent += nr_pages;
+    ctx->save.overhead_sent += sizeof(rec) + sizeof(hdr) + nr_pfns * sizeof(*rec_pfns);
 
     if ( nr_pages )
     {
@@ -357,6 +360,42 @@ static int suspend_domain(struct xc_sr_context *ctx)
     return 0;
 }
 
+static void show_transfer_rate(struct xc_sr_context *ctx, struct timespec *start)
+{
+    xc_interface *xch = ctx->xch;
+    struct timespec end = {}, diff = {};
+    size_t ms, MiB_sec;
+
+    if (!ctx->save.pages_sent)
+        return;
+
+    if ( clock_gettime(CLOCK_MONOTONIC, &end) )
+        PERROR("clock_gettime");
+
+    if ( (end.tv_nsec - start->tv_nsec) < 0 )
+    {
+        diff.tv_sec = end.tv_sec - start->tv_sec - 1;
+        diff.tv_nsec = end.tv_nsec - start->tv_nsec + (1000U*1000U*1000U);
+    }
+    else
+    {
+        diff.tv_sec = end.tv_sec - start->tv_sec;
+        diff.tv_nsec = end.tv_nsec - start->tv_nsec;
+    }
+
+    ms = (diff.tv_nsec / (1000U*1000U));
+    ms += (diff.tv_sec * 1000U);
+    if (!ms)
+        ms = 1;
+
+    MiB_sec = (ctx->save.pages_sent * PAGE_SIZE * 1000U) / ms / (1024U*1024U);
+
+    errno = 0;
+    IPRINTF("%s: %zu bytes + %zu pages in %ld.%09ld sec, %zu MiB/sec", __func__,
+            ctx->save.overhead_sent, ctx->save.pages_sent,
+            diff.tv_sec, diff.tv_nsec, MiB_sec);
+}
+
 /*
  * Send a subset of pages in the guests p2m, according to the dirty bitmap.
  * Used for each subsequent iteration of the live migration loop.
@@ -370,9 +409,15 @@ static int send_dirty_pages(struct xc_sr_context *ctx,
     xen_pfn_t p;
     unsigned long written;
     int rc;
+    struct timespec start = {};
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->save.dirty_bitmap_hbuf);
 
+    ctx->save.pages_sent = 0;
+    ctx->save.overhead_sent = 0;
+    if ( clock_gettime(CLOCK_MONOTONIC, &start) )
+        PERROR("clock_gettime");
+
     for ( p = 0, written = 0; p < ctx->save.p2m_size; ++p )
     {
         if ( !test_bit(p, dirty_bitmap) )
@@ -396,6 +441,7 @@ static int send_dirty_pages(struct xc_sr_context *ctx,
     if ( written > entries )
         DPRINTF("Bitmap contained more entries than expected...");
 
+    show_transfer_rate(ctx, &start);
     xc_report_progress_step(xch, entries, entries);
 
     return ctx->save.ops.check_vm_state(ctx);


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148369.274324 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRp-0003di-2h; Thu, 01 Jul 2021 09:57:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148369.274324; Thu, 01 Jul 2021 09:57:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRo-0003cV-NY; Thu, 01 Jul 2021 09:57:28 +0000
Received: by outflank-mailman (input) for mailman id 148369;
 Thu, 01 Jul 2021 09:57:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRn-0004r4-H2
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:27 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7318a437-6aec-4f53-a2a0-10214f3fbcac;
 Thu, 01 Jul 2021 09:56:57 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619un5NE
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:49 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7318a437-6aec-4f53-a2a0-10214f3fbcac
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133409;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=VXXP7tsnRC41xaA88qzwrHhQNrSFmDSbSlav6Il7DHM=;
    b=nek8SgSXMYp0YyFkVQajq+6uAJthx4pNaB9Z7RNljK3npjfWHTOJMlzeveUeT19Qxh
    C/fpM2lj2ShtHYL2QqLRL5+Qe7jOSTRRdMFpFspPLIy0nC5Dqcico76IlIqTmOHTTdQ2
    xKw2M4fnke3Z4OivG0VsFPM9ddzkhn7LgJhb2K5dcjmMm2ExIl+Ul5F5tG6TyxpS2c0M
    DIZQu4aL5NWfl2XkGcIukLAwSql3alv6ieqLDsyD87t5zbw9uZv3pZbrZHLI2XqEvire
    GsMFVQpwxh3d02bJrqCatpgwaFVPsd2R9skFSpklyDUoKVBpx4tonUlnlAM7p/JJZjTs
    Wsfw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 22/40] tools: save: move local_pages array
Date: Thu,  1 Jul 2021 11:56:17 +0200
Message-Id: <20210701095635.15648-23-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move local_pages array into preallocated space.

Adjust the code to use the src page as is in case of HVM.
In case of PV the page may need to be normalised, use a private memory
area for this purpose.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h       | 22 ++++++++++---------
 tools/libs/saverestore/save.c         | 25 +++------------------
 tools/libs/saverestore/save_x86_hvm.c |  5 +++--
 tools/libs/saverestore/save_x86_pv.c  | 31 ++++++++++++++++++---------
 4 files changed, 39 insertions(+), 44 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index c3570e0c9a..8089449011 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -45,16 +45,12 @@ struct xc_sr_save_ops
      * Optionally transform the contents of a page from being specific to the
      * sending environment, to being generic for the stream.
      *
-     * The page of data at the end of 'page' may be a read-only mapping of a
-     * running guest; it must not be modified.  If no transformation is
-     * required, the callee should leave '*pages' untouched.
+     * The page of data '*src' may be a read-only mapping of a running guest;
+     * it must not be modified. If no transformation is required, the callee
+     * should leave '*src' untouched, and return it via '**ptr'.
      *
-     * If a transformation is required, the callee should allocate themselves
-     * a local page using malloc() and return it via '*page'.
-     *
-     * The caller shall free() '*page' in all cases.  In the case that the
-     * callee encounters an error, it should *NOT* free() the memory it
-     * allocated for '*page'.
+     * If a transformation is required, the callee should provide the
+     * transformed page in a private buffer and return it via '**ptr'.
      *
      * It is valid to fail with EAGAIN if the transformation is not able to be
      * completed at this point.  The page shall be retried later.
@@ -62,7 +58,7 @@ struct xc_sr_save_ops
      * @returns 0 for success, -1 for failure, with errno appropriately set.
      */
     int (*normalise_page)(struct xc_sr_context *ctx, xen_pfn_t type,
-                          void **page);
+                          void *src, unsigned int idx, void **ptr);
 
     /**
      * Set up local environment to save a domain. (Typically querying
@@ -385,6 +381,12 @@ struct xc_sr_context
 
                 union
                 {
+                    struct
+                    {
+                        /* Used by write_batch for modified pages. */
+                        void *normalised_pages;
+                    } save;
+
                     struct
                     {
                         /* State machine for the order of received records. */
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index ea04cb1a74..fa83648f9a 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -91,11 +91,10 @@ static int write_batch(struct xc_sr_context *ctx)
     xen_pfn_t *mfns = ctx->save.m->mfns, *types = ctx->save.m->types;
     void *guest_mapping = NULL;
     void **guest_data = ctx->save.m->guest_data;
-    void **local_pages = NULL;
     int *errors = ctx->save.m->errors, rc = -1;
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
-    void *page, *orig_page;
+    void *src;
     uint64_t *rec_pfns = ctx->save.m->rec_pfns;
     struct iovec *iov = ctx->save.m->iov; int iovcnt = 0;
     struct xc_sr_rec_page_data_header hdr = { 0 };
@@ -105,16 +104,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Pointers to locally allocated pages.  Need freeing. */
-    local_pages = calloc(nr_pfns, sizeof(*local_pages));
-
-    if ( !local_pages )
-    {
-        ERROR("Unable to allocate arrays for a batch of %u pages",
-              nr_pfns);
-        goto err;
-    }
-
     for ( i = 0; i < nr_pfns; ++i )
     {
         types[i] = mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
@@ -176,11 +165,8 @@ static int write_batch(struct xc_sr_context *ctx)
                 goto err;
             }
 
-            orig_page = page = guest_mapping + (p * PAGE_SIZE);
-            rc = ctx->save.ops.normalise_page(ctx, types[i], &page);
-
-            if ( orig_page != page )
-                local_pages[i] = page;
+            src = guest_mapping + (p * PAGE_SIZE);
+            rc = ctx->save.ops.normalise_page(ctx, types[i], src, i, &guest_data[i]);
 
             if ( rc )
             {
@@ -195,8 +181,6 @@ static int write_batch(struct xc_sr_context *ctx)
                 else
                     goto err;
             }
-            else
-                guest_data[i] = page;
 
             rc = -1;
             ++p;
@@ -255,9 +239,6 @@ static int write_batch(struct xc_sr_context *ctx)
  err:
     if ( guest_mapping )
         xenforeignmemory_unmap(xch->fmem, guest_mapping, nr_pages_mapped);
-    for ( i = 0; local_pages && i < nr_pfns; ++i )
-        free(local_pages[i]);
-    free(local_pages);
 
     return rc;
 }
diff --git a/tools/libs/saverestore/save_x86_hvm.c b/tools/libs/saverestore/save_x86_hvm.c
index 91c2cb99ab..26f49ee267 100644
--- a/tools/libs/saverestore/save_x86_hvm.c
+++ b/tools/libs/saverestore/save_x86_hvm.c
@@ -129,9 +129,10 @@ static xen_pfn_t x86_hvm_pfn_to_gfn(const struct xc_sr_context *ctx,
     return pfn;
 }
 
-static int x86_hvm_normalise_page(struct xc_sr_context *ctx,
-                                  xen_pfn_t type, void **page)
+static int x86_hvm_normalise_page(struct xc_sr_context *ctx, xen_pfn_t type,
+                                  void *src, unsigned int idx, void **ptr)
 {
+    *ptr = src;
     return 0;
 }
 
diff --git a/tools/libs/saverestore/save_x86_pv.c b/tools/libs/saverestore/save_x86_pv.c
index 92f77fad0f..159ff59480 100644
--- a/tools/libs/saverestore/save_x86_pv.c
+++ b/tools/libs/saverestore/save_x86_pv.c
@@ -999,29 +999,31 @@ static xen_pfn_t x86_pv_pfn_to_gfn(const struct xc_sr_context *ctx,
  * save_ops function.  Performs pagetable normalisation on appropriate pages.
  */
 static int x86_pv_normalise_page(struct xc_sr_context *ctx, xen_pfn_t type,
-                                 void **page)
+                                  void *src, unsigned int idx, void **ptr)
 {
     xc_interface *xch = ctx->xch;
-    void *local_page;
     int rc;
+    void *dst;
 
     type &= XEN_DOMCTL_PFINFO_LTABTYPE_MASK;
 
     if ( type < XEN_DOMCTL_PFINFO_L1TAB || type > XEN_DOMCTL_PFINFO_L4TAB )
+    {
+        *ptr = src;
         return 0;
+    }
 
-    local_page = malloc(PAGE_SIZE);
-    if ( !local_page )
+    if ( idx >= MAX_BATCH_SIZE )
     {
-        ERROR("Unable to allocate scratch page");
-        rc = -1;
-        goto out;
+        ERROR("idx %u out of range", idx);
+        errno = ERANGE;
+        return -1;
     }
 
-    rc = normalise_pagetable(ctx, *page, local_page, type);
-    *page = local_page;
+    dst = ctx->x86.pv.save.normalised_pages + idx * PAGE_SIZE;
+    rc = normalise_pagetable(ctx, src, dst, type);
+    *ptr = dst;
 
- out:
     return rc;
 }
 
@@ -1031,8 +1033,16 @@ static int x86_pv_normalise_page(struct xc_sr_context *ctx, xen_pfn_t type,
  */
 static int x86_pv_setup(struct xc_sr_context *ctx)
 {
+    xc_interface *xch = ctx->xch;
     int rc;
 
+    ctx->x86.pv.save.normalised_pages = malloc(MAX_BATCH_SIZE * PAGE_SIZE);
+    if ( !ctx->x86.pv.save.normalised_pages )
+    {
+        PERROR("Failed to allocate normalised_pages");
+        return -1;
+    }
+
     rc = x86_pv_domain_info(ctx);
     if ( rc )
         return rc;
@@ -1118,6 +1128,7 @@ static int x86_pv_check_vm_state(struct xc_sr_context *ctx)
 
 static int x86_pv_cleanup(struct xc_sr_context *ctx)
 {
+    free(ctx->x86.pv.save.normalised_pages);
     free(ctx->x86.pv.p2m_pfns);
 
     if ( ctx->x86.pv.p2m )


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148371.274341 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRs-0004Q7-6I; Thu, 01 Jul 2021 09:57:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148371.274341; Thu, 01 Jul 2021 09:57:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRr-0004PF-S8; Thu, 01 Jul 2021 09:57:31 +0000
Received: by outflank-mailman (input) for mailman id 148371;
 Thu, 01 Jul 2021 09:57:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRq-0004XT-Sn
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:30 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8e4898ce-ebf0-4c88-89ea-58c01de1f9ad;
 Thu, 01 Jul 2021 09:56:51 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uj5Mv
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:45 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8e4898ce-ebf0-4c88-89ea-58c01de1f9ad
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133405;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=GgpmM75SuN6FuifeSB8D7d7fIQ+maSMtt/6dbwwV1Ko=;
    b=fiU5zy87RwXUPFQisX2pONK2at9yvFQtBp4h+9vdYhCJe+SDgRUQXXk+jxeGclFdqd
    Ev2LkmLKf+hBiwswf4p6m1UocGilzfNq+eBXul8GlnD3tJWgjyH/+kEmDoWYxezduoTK
    CgAiWo/H73nDfl4vEdBQL/9mwk1YrznITa/wIbO7lEFxg8M4Y2M2MjirFLgVM5KHavnD
    o6hXDTKFpCQCA1/rR+MXQhWjIDDh4rJFu8I2L2Yj/mnCcTiDu0OVAI+SlScDm0hgsPM1
    V0sAhTynfn9HTOUc/kLsT/4Nia9xhWLPZLdRWlwHfM1TNqpUmW8d9jFfjBD7/s7720hk
    yd6g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 13/40] tools: unify type checking for data pfns in migration stream
Date: Thu,  1 Jul 2021 11:56:08 +0200
Message-Id: <20210701095635.15648-14-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Introduce a helper which decides if a given pfn type has data
in the migration stream.

No change in behavior intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/saverestore/common.h  | 18 ++++++++++++++++++
 tools/libs/saverestore/restore.c | 29 +++--------------------------
 tools/libs/saverestore/save.c    | 14 ++------------
 3 files changed, 23 insertions(+), 38 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index fa242e808d..905b4078f6 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -517,6 +517,24 @@ static inline bool page_type_to_populate(uint32_t type)
     }
     return ret;
 }
+
+static inline bool page_type_has_stream_data(uint32_t type)
+{
+    bool ret;
+
+    switch (type)
+    {
+    case XEN_DOMCTL_PFINFO_BROKEN:
+    case XEN_DOMCTL_PFINFO_XALLOC:
+    case XEN_DOMCTL_PFINFO_XTAB:
+        ret = false;
+        break;
+    default:
+        ret = true;
+        break;
+    }
+    return ret;
+}
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 477b7527a1..799170c7a1 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -232,25 +232,8 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
     {
         ctx->restore.ops.set_page_type(ctx, pfns[i], types[i]);
 
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_NOTAB:
-
-        case XEN_DOMCTL_PFINFO_L1TAB:
-        case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L2TAB:
-        case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L3TAB:
-        case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L4TAB:
-        case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
+        if ( page_type_has_stream_data(types[i]) == true )
             mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
-            break;
-        }
     }
 
     /* Nothing to do? */
@@ -270,14 +253,8 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
 
     for ( i = 0, j = 0; i < count; ++i )
     {
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_XTAB:
-        case XEN_DOMCTL_PFINFO_BROKEN:
-        case XEN_DOMCTL_PFINFO_XALLOC:
-            /* No page data to deal with. */
+        if ( page_type_has_stream_data(types[i]) == false )
             continue;
-        }
 
         if ( map_errs[j] )
         {
@@ -412,7 +389,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
             goto err;
         }
 
-        if ( type < XEN_DOMCTL_PFINFO_BROKEN )
+        if ( page_type_has_stream_data(type) == true )
             /* NOTAB and all L1 through L4 tables (including pinned) should
              * have a page worth of data in the record. */
             pages_of_data++;
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 6f820ea432..12598bd4e2 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -153,13 +153,8 @@ static int write_batch(struct xc_sr_context *ctx)
             goto err;
         }
 
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_BROKEN:
-        case XEN_DOMCTL_PFINFO_XALLOC:
-        case XEN_DOMCTL_PFINFO_XTAB:
+        if ( page_type_has_stream_data(types[i]) == false )
             continue;
-        }
 
         mfns[nr_pages++] = mfns[i];
     }
@@ -177,13 +172,8 @@ static int write_batch(struct xc_sr_context *ctx)
 
         for ( i = 0, p = 0; i < nr_pfns; ++i )
         {
-            switch ( types[i] )
-            {
-            case XEN_DOMCTL_PFINFO_BROKEN:
-            case XEN_DOMCTL_PFINFO_XALLOC:
-            case XEN_DOMCTL_PFINFO_XTAB:
+            if ( page_type_has_stream_data(types[i]) == false )
                 continue;
-            }
 
             if ( errors[p] )
             {


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 09:57:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 09:57:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148372.274351 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRu-0004xk-8j; Thu, 01 Jul 2021 09:57:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148372.274351; Thu, 01 Jul 2021 09:57:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytRt-0004vX-Rc; Thu, 01 Jul 2021 09:57:33 +0000
Received: by outflank-mailman (input) for mailman id 148372;
 Thu, 01 Jul 2021 09:57:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRs-0004r4-Gv
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:32 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.174])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 939893d0-0ec4-4a0f-851d-a8ce2ba947db;
 Thu, 01 Jul 2021 09:56:58 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ur5NU
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:53 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 939893d0-0ec4-4a0f-851d-a8ce2ba947db
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133413;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=0LMXyjqr5dhJU6Kt86LbarPPbfCTtmro+NAOq1cH7Ts=;
    b=seFXjeMiXQjNm4nJiNtEFRc+qmrE0unG8gUnEIVDqgAeVpEvsTsvGZSg4/4ql9gK8g
    cdFrWui1BKKNZGYpm40Ag3p60mxyBCejkMlVaK/sVCdOsCK8dMAG2+mHagXV4SI3yqh8
    UZsS1DtArQncExBuQWRlMmpBc4oCSmmIDhlT3Fza8Zwpv1GYEXZU7ZuOnyhGYOA3etGI
    CIg6Y/lHH3UpqRrT45x+1nI6IFWL4RGo4yxOVk0/gvPL+lFDJyOoKwRIK9lUyFiHj9Cn
    ruKBzH319FojoxPzWwdJxefYUWRPoursepKTRW6/ePrJizBiGdusb6Y7I+DtbZeC45zA
    2yNA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 31/40] tools: recognize LIBXL_API_VERSION for 4.16
Date: Thu,  1 Jul 2021 11:56:26 +0200
Message-Id: <20210701095635.15648-32-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This is required by upcoming API changes.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/include/libxl.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index ae7fe27c1f..29931626a2 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -729,7 +729,8 @@ typedef struct libxl__ctx libxl_ctx;
 #if LIBXL_API_VERSION != 0x040200 && LIBXL_API_VERSION != 0x040300 && \
     LIBXL_API_VERSION != 0x040400 && LIBXL_API_VERSION != 0x040500 && \
     LIBXL_API_VERSION != 0x040700 && LIBXL_API_VERSION != 0x040800 && \
-    LIBXL_API_VERSION != 0x041300 && LIBXL_API_VERSION != 0x041400
+    LIBXL_API_VERSION != 0x041300 && LIBXL_API_VERSION != 0x041400 && \
+    LIBXL_API_VERSION != 0x041600
 #error Unknown LIBXL_API_VERSION
 #endif
 #endif


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:01:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:01:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148404.274375 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVp-0000pB-22; Thu, 01 Jul 2021 10:01:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148404.274375; Thu, 01 Jul 2021 10:01:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVo-0000p4-Ut; Thu, 01 Jul 2021 10:01:36 +0000
Received: by outflank-mailman (input) for mailman id 148404;
 Thu, 01 Jul 2021 10:01:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSP-0004XT-Tc
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:05 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f8574b62-670a-4575-96ac-f040367c0885;
 Thu, 01 Jul 2021 09:56:56 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uo5NH
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:50 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f8574b62-670a-4575-96ac-f040367c0885
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133410;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=bOrjMbCsuneuqIIJGmLTblCtP85a/JTG2OAkzH1Hjtw=;
    b=UySDWzQOP77+pL/xjXP2xA3spFqJTyKI8ZU213fh6F8cBA86GlpSiFZxX8QijfCNiw
    Jfo3XaYQmD3whcWUQshSBLK4zqALkCB4lyYz3Bo1T5nVTNxYygD7FHny+M4MHwX1P8Iy
    paU6qPJ8lEqBgUoarSRb2cuD4xtDMc5TZdUK99UpSZvbM6gCxi5CXpysGzLtvDFuY60l
    ogE8q5SN6+rVMh8z4U/iK+rg3FX6AhHwq5kBEYSci+saoI7LuxBgqUFB6YL28x2wKA78
    g1FYYIEd8SOTGJW+Q8Zq7QqZy5EjvlO9Katji2gV5+5mRz1AmE+b6g97qYL6rykTniZ2
    juEg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 24/40] tools: restore: move mfns array
Date: Thu,  1 Jul 2021 11:56:19 +0200
Message-Id: <20210701095635.15648-25-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move mfns array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h  | 2 ++
 tools/libs/saverestore/restore.c | 5 ++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index d798b79745..9d7efff03d 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -239,6 +239,8 @@ struct sr_restore_arrays {
     /* handle_page_data */
     xen_pfn_t pfns[MAX_BATCH_SIZE];
     uint32_t types[MAX_BATCH_SIZE];
+    /* process_page_data */
+    xen_pfn_t mfns[MAX_BATCH_SIZE];
 };
 
 struct xc_sr_context
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 8ea125cf73..d7ea52b89e 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -205,7 +205,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
                              xen_pfn_t *pfns, uint32_t *types, void *page_data)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = malloc(count * sizeof(*mfns));
+    xen_pfn_t *mfns = ctx->restore.m->mfns;
     int *map_errs = malloc(count * sizeof(*map_errs));
     int rc;
     void *mapping = NULL, *guest_page = NULL;
@@ -213,7 +213,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         j,          /* j indexes the subset of pfns we decide to map. */
         nr_pages = 0;
 
-    if ( !mfns || !map_errs )
+    if ( !map_errs )
     {
         rc = -1;
         ERROR("Failed to allocate %zu bytes to process page data",
@@ -299,7 +299,6 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         xenforeignmemory_unmap(xch->fmem, mapping, nr_pages);
 
     free(map_errs);
-    free(mfns);
 
     return rc;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:01:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:01:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148400.274364 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVn-0000Yy-QB; Thu, 01 Jul 2021 10:01:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148400.274364; Thu, 01 Jul 2021 10:01:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVn-0000Yr-Ml; Thu, 01 Jul 2021 10:01:35 +0000
Received: by outflank-mailman (input) for mailman id 148400;
 Thu, 01 Jul 2021 10:01:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSM-0004r4-I9
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:02 +0000
Received: from mo4-p04-ob.smtp.rzone.de (unknown [85.215.255.122])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1484be7f-e3e1-4bc4-ab2f-7a05b66e3d57;
 Thu, 01 Jul 2021 09:57:03 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uw5Nl
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:58 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1484be7f-e3e1-4bc4-ab2f-7a05b66e3d57
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133418;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=Oumv/ZrrKNwjWjAhsQKBr42sudweonBRtwKbyL8SE78=;
    b=IydUb5tErdauBPAIJFpbM8CuvoK9RaRo2nZFUhcwRrajNbMwvAvcEtGQBd9vJtZec0
    Nl0NJfWLBwXaEA3C5u6S3Eh76OlZW8zwH3kxa46UVDGk2icwpahjTyNBEMGIWr7jTYt0
    1coCcLp67mgcr+rLn51crUs05ZxIjRuC76I+JfQ9bOdAgfm2LAyXlNTEWNmc0GhDFALa
    S+19YftOqIvZ2kgYNVz2V+g8UGObGDigiFdmhyeFbTiiBODeqjAmPs3dm34a3jTRLL1m
    ajm/TWPsmpOy9YwGv8VKD2BVbAy+Zo1X4vH+EDJMeGB2K2CdDhBfHDR4jEm2wsWc4VW5
    h+LA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 39/40] tools: use xg_sr_bitmap for populated_pfns
Date: Thu,  1 Jul 2021 11:56:34 +0200
Message-Id: <20210701095635.15648-40-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- remove xg_ prefix from called functions
---
 tools/libs/saverestore/common.h          | 21 +++++++-
 tools/libs/saverestore/restore.c         | 69 ------------------------
 tools/libs/saverestore/restore_x86_hvm.c |  9 ++++
 tools/libs/saverestore/restore_x86_pv.c  |  7 +++
 4 files changed, 35 insertions(+), 71 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index e6a269c482..a610483fe7 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -403,8 +403,7 @@ struct xc_sr_context
             uint32_t     xenstore_domid,  console_domid;
 
             /* Bitmap of currently populated PFNs during restore. */
-            unsigned long *populated_pfns;
-            xen_pfn_t max_populated_pfn;
+            struct sr_bitmap populated_pfns;
 
             /* Sender has invoked verify mode on the stream. */
             bool verify;
@@ -647,6 +646,24 @@ static inline bool page_type_has_stream_data(uint32_t type)
     }
     return ret;
 }
+
+static inline bool pfn_is_populated(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    return sr_test_bit(pfn, &ctx->restore.populated_pfns);
+}
+
+static inline int pfn_set_populated(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    xc_interface *xch = ctx->xch;
+
+    if ( sr_set_bit(pfn, &ctx->restore.populated_pfns) == false )
+    {
+        PERROR("Failed to realloc populated_pfns bitmap");
+        errno = ENOMEM;
+        return -1;
+    }
+    return 0;
+}
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 53f05f1b65..baf8ea44e5 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -71,64 +71,6 @@ static int read_headers(struct xc_sr_context *ctx)
     return 0;
 }
 
-/*
- * Is a pfn populated?
- */
-static bool pfn_is_populated(const struct xc_sr_context *ctx, xen_pfn_t pfn)
-{
-    if ( pfn > ctx->restore.max_populated_pfn )
-        return false;
-    return test_bit(pfn, ctx->restore.populated_pfns);
-}
-
-/*
- * Set a pfn as populated, expanding the tracking structures if needed. To
- * avoid realloc()ing too excessively, the size increased to the nearest power
- * of two large enough to contain the required pfn.
- */
-static int pfn_set_populated(struct xc_sr_context *ctx, xen_pfn_t pfn)
-{
-    xc_interface *xch = ctx->xch;
-
-    if ( pfn > ctx->restore.max_populated_pfn )
-    {
-        xen_pfn_t new_max;
-        size_t old_sz, new_sz;
-        unsigned long *p;
-
-        /* Round up to the nearest power of two larger than pfn, less 1. */
-        new_max = pfn;
-        new_max |= new_max >> 1;
-        new_max |= new_max >> 2;
-        new_max |= new_max >> 4;
-        new_max |= new_max >> 8;
-        new_max |= new_max >> 16;
-#ifdef __x86_64__
-        new_max |= new_max >> 32;
-#endif
-
-        old_sz = bitmap_size(ctx->restore.max_populated_pfn + 1);
-        new_sz = bitmap_size(new_max + 1);
-        p = realloc(ctx->restore.populated_pfns, new_sz);
-        if ( !p )
-        {
-            ERROR("Failed to realloc populated bitmap");
-            errno = ENOMEM;
-            return -1;
-        }
-
-        memset((uint8_t *)p + old_sz, 0x00, new_sz - old_sz);
-
-        ctx->restore.populated_pfns    = p;
-        ctx->restore.max_populated_pfn = new_max;
-    }
-
-    assert(!test_bit(pfn, ctx->restore.populated_pfns));
-    set_bit(pfn, ctx->restore.populated_pfns);
-
-    return 0;
-}
-
 /*
  * Given a set of pfns, obtain memory from Xen to fill the physmap for the
  * unpopulated subset.  If types is NULL, no page type checking is performed
@@ -929,16 +871,6 @@ static int setup(struct xc_sr_context *ctx)
     if ( rc )
         goto err;
 
-    ctx->restore.max_populated_pfn = (32 * 1024 / 4) - 1;
-    ctx->restore.populated_pfns = bitmap_alloc(
-        ctx->restore.max_populated_pfn + 1);
-    if ( !ctx->restore.populated_pfns )
-    {
-        ERROR("Unable to allocate memory for populated_pfns bitmap");
-        rc = -1;
-        goto err;
-    }
-
     ctx->restore.buffered_records = malloc(
         DEFAULT_BUF_RECORDS * sizeof(struct xc_sr_record));
     if ( !ctx->restore.buffered_records )
@@ -977,7 +909,6 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.m);
     free(ctx->restore.buffered_records);
-    free(ctx->restore.populated_pfns);
 
     if ( ctx->restore.ops.cleanup(ctx) )
         PERROR("Failed to clean up");
diff --git a/tools/libs/saverestore/restore_x86_hvm.c b/tools/libs/saverestore/restore_x86_hvm.c
index bd63bd2818..97e7e0f48c 100644
--- a/tools/libs/saverestore/restore_x86_hvm.c
+++ b/tools/libs/saverestore/restore_x86_hvm.c
@@ -136,6 +136,7 @@ static int x86_hvm_localise_page(struct xc_sr_context *ctx,
 static int x86_hvm_setup(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
+    unsigned long max_pfn;
 
     if ( ctx->restore.guest_type != DHDR_TYPE_X86_HVM )
     {
@@ -161,6 +162,13 @@ static int x86_hvm_setup(struct xc_sr_context *ctx)
     }
 #endif
 
+    max_pfn = max(ctx->restore.p2m_size, ctx->dominfo.max_memkb >> (PAGE_SHIFT-10));
+    if ( !sr_bitmap_expand(&ctx->restore.populated_pfns, max_pfn) )
+    {
+        PERROR("Unable to allocate memory for populated_pfns bitmap");
+        return -1;
+    }
+
     return 0;
 }
 
@@ -241,6 +249,7 @@ static int x86_hvm_stream_complete(struct xc_sr_context *ctx)
 
 static int x86_hvm_cleanup(struct xc_sr_context *ctx)
 {
+    sr_bitmap_free(&ctx->restore.populated_pfns);
     free(ctx->x86.hvm.restore.context.ptr);
 
     free(ctx->x86.restore.cpuid.ptr);
diff --git a/tools/libs/saverestore/restore_x86_pv.c b/tools/libs/saverestore/restore_x86_pv.c
index 96608e5231..c73a3cd99f 100644
--- a/tools/libs/saverestore/restore_x86_pv.c
+++ b/tools/libs/saverestore/restore_x86_pv.c
@@ -1060,6 +1060,12 @@ static int x86_pv_setup(struct xc_sr_context *ctx)
     if ( rc )
         return rc;
 
+    if ( !sr_bitmap_expand(&ctx->restore.populated_pfns, 32 * 1024 / 4) )
+    {
+        PERROR("Unable to allocate memory for populated_pfns bitmap");
+        return -1;
+    }
+
     ctx->x86.pv.restore.nr_vcpus = ctx->dominfo.max_vcpu_id + 1;
     ctx->x86.pv.restore.vcpus = calloc(sizeof(struct xc_sr_x86_pv_restore_vcpu),
                                        ctx->x86.pv.restore.nr_vcpus);
@@ -1153,6 +1159,7 @@ static int x86_pv_stream_complete(struct xc_sr_context *ctx)
  */
 static int x86_pv_cleanup(struct xc_sr_context *ctx)
 {
+    sr_bitmap_free(&ctx->restore.populated_pfns);
     free(ctx->x86.pv.p2m);
     free(ctx->x86.pv.p2m_pfns);
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:01:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:01:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148406.274386 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVw-0001Cn-DO; Thu, 01 Jul 2021 10:01:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148406.274386; Thu, 01 Jul 2021 10:01:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVw-0001CU-8P; Thu, 01 Jul 2021 10:01:44 +0000
Received: by outflank-mailman (input) for mailman id 148406;
 Thu, 01 Jul 2021 10:01:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytS0-0004XT-Su
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:40 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 675c9bdf-ecdf-4f97-98b0-3206d03c9de6;
 Thu, 01 Jul 2021 09:56:53 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ul5N5
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:47 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 675c9bdf-ecdf-4f97-98b0-3206d03c9de6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133407;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=IfTAu6csmKih3Ul30va1DloKz84aTf69Oy5gDcqna/s=;
    b=XsemlVKcnJEPbQEhuTh/f1/P0zNwYk0GDD5ZFuuNMui6+I/UoY1e6NDIuYcO19mwvm
    s/eXT+Fh3UD049CqyU/fJmDpnjQzCe+OQpFcvEcaUeFZSf+A0l9zGa4BMziPLBXkIu09
    Su8fRSH5+dNneKXI21FBmwHRoZubAnptMo/D6E0GoSJ1iExRZ+kINd8RCJU6m74/I2XF
    iO76syePZoRLpr71rO453SjEadeizZOC7cpU9DcxFXrhYuYBQVKvbLrgj3OEayRwWCEp
    93dHtlIrraIEWffntlkPa6bGCK+AOa3T05EswFZrM8BMVd6j1+c81mWtqOB4TQi63TGb
    seUw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 17/40] tools: save: move types array
Date: Thu,  1 Jul 2021 11:56:12 +0200
Message-Id: <20210701095635.15648-18-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move types array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h | 2 ++
 tools/libs/saverestore/save.c   | 7 ++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 1415a182d2..5bd2913cb6 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -227,6 +227,8 @@ struct sr_save_arrays {
     xen_pfn_t batch_pfns[MAX_BATCH_SIZE];
     /* write_batch: Mfns of the batch pfns. */
     xen_pfn_t mfns[MAX_BATCH_SIZE];
+    /* write_batch: Types of the batch pfns. */
+    xen_pfn_t types[MAX_BATCH_SIZE];
 };
 
 struct sr_restore_arrays {
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 6b09784be8..0883c1fac0 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -88,7 +88,7 @@ static int write_checkpoint_record(struct xc_sr_context *ctx)
 static int write_batch(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = ctx->save.m->mfns, *types = NULL;
+    xen_pfn_t *mfns = ctx->save.m->mfns, *types = ctx->save.m->types;
     void *guest_mapping = NULL;
     void **guest_data = NULL;
     void **local_pages = NULL;
@@ -105,8 +105,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Types of the batch pfns. */
-    types = malloc(nr_pfns * sizeof(*types));
     /* Errors from attempting to map the gfns. */
     errors = malloc(nr_pfns * sizeof(*errors));
     /* Pointers to page data to send.  Mapped gfns or local allocations. */
@@ -116,7 +114,7 @@ static int write_batch(struct xc_sr_context *ctx)
     /* iovec[] for writev(). */
     iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !types || !errors || !guest_data || !local_pages || !iov )
+    if ( !errors || !guest_data || !local_pages || !iov )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -274,7 +272,6 @@ static int write_batch(struct xc_sr_context *ctx)
     free(local_pages);
     free(guest_data);
     free(errors);
-    free(types);
 
     return rc;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:01:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:01:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148414.274397 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVx-0001UF-QN; Thu, 01 Jul 2021 10:01:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148414.274397; Thu, 01 Jul 2021 10:01:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytVx-0001TK-JF; Thu, 01 Jul 2021 10:01:45 +0000
Received: by outflank-mailman (input) for mailman id 148414;
 Thu, 01 Jul 2021 10:01:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSl-0004r4-Iq
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:27 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.174])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 93bd6b54-8972-4d8c-89ba-2a118f2d9f0d;
 Thu, 01 Jul 2021 09:57:05 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uv5Nd
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:57 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 93bd6b54-8972-4d8c-89ba-2a118f2d9f0d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133417;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=qkM58ppJmICGaCKigNV7+3gfD18mpe/eRIOurb3atVw=;
    b=opoJ9CuscHfKh938XdynCg6vYytGey1HlnnFvP5xY6scsH5sGuFIjFHDgyJ0rG5TzJ
    IMDQr8WmfR9w13tt5VFtKJhRXJjLQaufI43ltCdjZu1xFaZI3pDQ8ZcBvoDXbsQKGMIV
    E4/yqUbeaoMIXaru42ILvbuIQ27xrRx8IhLpjOB2sfG83qt2tWBLobXwOk183ZHCKtEU
    YGzlh7HHR5YZhBVNKvC4jKvazGZUF1Ymp2Llc2ToElFqUZa9LJoxHzDbO7VWxecRsH8U
    2udlcuogzyR9SpSWDYUvZvr8I2gXlhpoYFSQj2VGC0efQFSrxZ121c3mDnOT5t8ukWul
    CPKw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 36/40] tools: add --min_remaining to libxl_domain_suspend
Date: Thu,  1 Jul 2021 11:56:31 +0200
Message-Id: <20210701095635.15648-37-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The decision to stop+move a domU to the new host must be based on two factors:
- the available network bandwidth for the migration stream
- the maximum time a workload within a domU can be savely suspended

Both values define how many dirty pages a workload may produce prior the
final stop+move.

The default value of 50 pages is much too low with todays network bandwidths.
On an idle 1GiB link these 200K will be transferred within ~2ms.

Give the admin a knob to adjust the point when the final stop+move will
be done, so he can base this decision on his own needs.

This patch adjusts xl(1) and the libxl API.
External users check LIBXL_HAVE_DOMAIN_SUSPEND_PROPS for the availibility
of the new .min_remaining property.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 docs/man/xl.1.pod.in              |  8 ++++++++
 tools/include/libxl.h             |  1 +
 tools/libs/light/libxl_dom_save.c |  2 +-
 tools/libs/light/libxl_domain.c   |  1 +
 tools/libs/light/libxl_internal.h |  1 +
 tools/xl/xl_cmdtable.c            | 23 ++++++++++++-----------
 tools/xl/xl_migrate.c             |  9 ++++++++-
 7 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index 594387bcf4..09e866ad87 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -498,6 +498,14 @@ possible to use this option for a 'localhost' migration.
 
 Number of copy iterations before final suspend+move (default: 5)
 
+=item B<--min_remaing> I<pages>
+
+Number of remaining dirty pages. If the number of dirty pages drops that
+low, the guest is suspended and the domU will finally be moved to I<host>.
+
+This allows the host admin to control for how long the domU will likely
+be suspended during transit.
+
 =back
 
 =item B<remus> [I<OPTIONS>] I<domain-id> I<host>
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index bf77da0524..28d70b1078 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1715,6 +1715,7 @@ static inline int libxl_retrieve_domain_configuration_0x041200(
 typedef struct {
     uint32_t flags; /* LIBXL_SUSPEND_* */
     uint32_t max_iters;
+    uint32_t min_remaining;
 } libxl_domain_suspend_props;
 #define LIBXL_SUSPEND_DEBUG 1
 #define LIBXL_SUSPEND_LIVE 2
diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 938c0127f3..ad5df89b2c 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -381,7 +381,7 @@ static int libxl__domain_save_precopy_policy(precopy_stats_t stats, void *user)
 
     LOGD(DEBUG, shs->domid, "iteration %u dirty_count %ld total_written %lu",
          stats.iteration, stats.dirty_count, stats.total_written);
-    if (stats.dirty_count >= 0 && stats.dirty_count < LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT)
+    if (stats.dirty_count >= 0 && stats.dirty_count < dss->min_remaining)
         goto stop_copy;
     if (stats.iteration >= dss->max_iters)
         goto stop_copy;
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 9f98cd7f2b..06ca7a7df6 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -528,6 +528,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
     dss->fd = fd;
     dss->type = type;
     dss->max_iters = props->max_iters ?: LIBXL_XGS_POLICY_MAX_ITERATIONS;
+    dss->min_remaining = props->min_remaining ?: LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT;
     dss->live = props->flags & LIBXL_SUSPEND_LIVE;
     dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index 8cbcc5282c..e4bfb34085 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -3650,6 +3650,7 @@ struct libxl__domain_save_state {
     int debug;
     int checkpointed_stream;
     uint32_t max_iters;
+    uint32_t min_remaining;
     const libxl_domain_remus_info *remus;
     /* private */
     int rc;
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index 9b6b3c99aa..2cb4980c80 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -165,17 +165,18 @@ const struct cmd_spec cmd_table[] = {
       &main_migrate, 0, 1,
       "Migrate a domain to another host",
       "[options] <Domain> <host>",
-      "-h              Print this help.\n"
-      "-C <config>     Send <config> instead of config file from creation.\n"
-      "-s <sshcommand> Use <sshcommand> instead of ssh.  String will be passed\n"
-      "                to sh. If empty, run <host> instead of ssh <host> xl\n"
-      "                migrate-receive [-d -e]\n"
-      "-e              Do not wait in the background (on <host>) for the death\n"
-      "                of the domain.\n"
-      "--debug         Ignored.\n"
-      "-p              Do not unpause domain after migrating it.\n"
-      "-D              Preserve the domain id\n"
-      "--max_iters N   Number of copy iterations before final stop+move"
+      "-h                Print this help.\n"
+      "-C <config>       Send <config> instead of config file from creation.\n"
+      "-s <sshcommand>   Use <sshcommand> instead of ssh.  String will be passed\n"
+      "                  to sh. If empty, run <host> instead of ssh <host> xl\n"
+      "                  migrate-receive [-d -e]\n"
+      "-e                Do not wait in the background (on <host>) for the death\n"
+      "                  of the domain.\n"
+      "--debug           Ignored.\n"
+      "-p                Do not unpause domain after migrating it.\n"
+      "-D                Preserve the domain id\n"
+      "--max_iters N     Number of copy iterations before final stop+move\n"
+      "--min_remaining N Number of remaining dirty pages before final stop+move"
     },
     { "restore",
       &main_restore, 0, 1,
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index af117d4d56..14feb2b7ec 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -179,6 +179,7 @@ static void migrate_do_preamble(int send_fd, int recv_fd, pid_t child,
 static void migrate_domain(uint32_t domid, int preserve_domid,
                            const char *rune, int debug,
                            uint32_t max_iters,
+                           uint32_t min_remaining,
                            const char *override_config_file)
 {
     pid_t child = -1;
@@ -191,6 +192,7 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     libxl_domain_suspend_props props = {
         .flags = LIBXL_SUSPEND_LIVE,
         .max_iters = max_iters,
+        .min_remaining = min_remaining,
         };
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
@@ -545,9 +547,11 @@ int main_migrate(int argc, char **argv)
     int opt, daemonize = 1, monitor = 1, debug = 0, pause_after_migration = 0;
     int preserve_domid = 0;
     uint32_t max_iters = 0;
+    uint32_t min_remaining = 0;
     static struct option opts[] = {
         {"debug", 0, 0, 0x100},
         {"max_iters", 1, 0, 0x101},
+        {"min_remaining", 1, 0, 0x102},
         {"live", 0, 0, 0x200},
         COMMON_LONG_OPTS
     };
@@ -578,6 +582,9 @@ int main_migrate(int argc, char **argv)
     case 0x101: /* --max_iters */
         max_iters = atoi(optarg);
         break;
+    case 0x102: /* --min_remaining */
+        min_remaining = atoi(optarg);
+        break;
     case 0x200: /* --live */
         /* ignored for compatibility with xm */
         break;
@@ -613,7 +620,7 @@ int main_migrate(int argc, char **argv)
     }
 
     migrate_domain(domid, preserve_domid, rune, debug,
-                   max_iters, config_filename);
+                   max_iters, min_remaining, config_filename);
     return EXIT_SUCCESS;
 }
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:01:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:01:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148421.274408 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytW3-0001zk-AG; Thu, 01 Jul 2021 10:01:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148421.274408; Thu, 01 Jul 2021 10:01:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytW3-0001zX-6q; Thu, 01 Jul 2021 10:01:51 +0000
Received: by outflank-mailman (input) for mailman id 148421;
 Thu, 01 Jul 2021 10:01:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytTS-0004XT-W1
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:59:11 +0000
Received: from mo4-p04-ob.smtp.rzone.de (unknown [85.215.255.122])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f973a37b-9f1f-4660-8e4f-726fae1d291d;
 Thu, 01 Jul 2021 09:57:07 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uv5Nf
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:57 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f973a37b-9f1f-4660-8e4f-726fae1d291d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133417;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=+vXVfBW28MRAf3KK7IPzTuDzNHY/m8g7e2aJIg9hVrs=;
    b=mQJXm+gETkM4L9PcGKaP0zQZrcAyvvuvqZfXYqF43MKmkyonGJtqflRsmgEpgSEDQM
    bCgEy8MGNe6QGTsNoy25Jly2+iKZ47dScLpt+ytN+fqTFx6ad8MXve5I7oiYABck4EG9
    YwTWFQJc149KIgNCQOz8xP0cK6P/27jc+gIUn3naWAHKfXPedfTScX3X8qPHz3b6d+di
    mXdeumlqDMz7Q0cYUKJ8n2zB/c1KVBAJXarUesHdXJ+BuIPuIOPb3SFOgEm48Kf4dH7O
    GCKWGyqMqaKn3g0gUFzFB4bQERGAEr1kXZFFzDHBHOTJwOwyGAu/5g2DJOe1aslur9Un
    iRPg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 37/40] tools: add --abort_if_busy to libxl_domain_suspend
Date: Thu,  1 Jul 2021 11:56:32 +0200
Message-Id: <20210701095635.15648-38-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Provide a knob to the host admin to abort the live migration of a
running domU if the downtime during final transit will be too long
for the workload within domU.

Adjust error reporting. Add ERROR_MIGRATION_ABORTED to allow callers of
libxl_domain_suspend to distinguish between errors and the requested
constraint.

Adjust precopy_policy to simplify reporting of remaining dirty pages.
The loop in send_memory_live populates ->dirty_count in a different
place than ->iteration. Let it proceeed one more time to provide the
desired information before leaving the loop.

This patch adjusts xl(1) and the libxl API.
External users check LIBXL_HAVE_DOMAIN_SUSPEND_PROPS for the availibility
of the new .abort_if_busy property.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 docs/man/xl.1.pod.in                  |  8 +++++++
 tools/include/libxl.h                 |  1 +
 tools/libs/light/libxl_dom_save.c     |  7 ++++++-
 tools/libs/light/libxl_domain.c       |  1 +
 tools/libs/light/libxl_internal.h     |  2 ++
 tools/libs/light/libxl_stream_write.c |  9 +++++++-
 tools/libs/light/libxl_types.idl      |  1 +
 tools/xl/xl_cmdtable.c                |  6 +++++-
 tools/xl/xl_migrate.c                 | 30 ++++++++++++++++++++-------
 9 files changed, 55 insertions(+), 10 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index 09e866ad87..37267c9171 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -506,6 +506,14 @@ low, the guest is suspended and the domU will finally be moved to I<host>.
 This allows the host admin to control for how long the domU will likely
 be suspended during transit.
 
+=item B<--abort_if_busy>
+
+Abort migration instead of doing final suspend/move/resume if the
+guest produced more than I<min_remaining> dirty pages during th number
+of I<max_iters> iterations.
+This avoids long periods of time where the guest is suspended, which
+may confuse the workload within domU.
+
 =back
 
 =item B<remus> [I<OPTIONS>] I<domain-id> I<host>
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 28d70b1078..cc056ed627 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1719,6 +1719,7 @@ typedef struct {
 } libxl_domain_suspend_props;
 #define LIBXL_SUSPEND_DEBUG 1
 #define LIBXL_SUSPEND_LIVE 2
+#define LIBXL_SUSPEND_ABORT_IF_BUSY 4
 
 int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
                          libxl_domain_suspend_props *props,
diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index ad5df89b2c..1999a8997f 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -383,11 +383,16 @@ static int libxl__domain_save_precopy_policy(precopy_stats_t stats, void *user)
          stats.iteration, stats.dirty_count, stats.total_written);
     if (stats.dirty_count >= 0 && stats.dirty_count < dss->min_remaining)
         goto stop_copy;
-    if (stats.iteration >= dss->max_iters)
+    if (stats.dirty_count >= 0 && stats.iteration >= dss->max_iters)
         goto stop_copy;
     return XGS_POLICY_CONTINUE_PRECOPY;
 
 stop_copy:
+    if (dss->abort_if_busy)
+    {
+        dss->remaining_dirty_pages = stats.dirty_count;
+        return XGS_POLICY_ABORT;
+    }
     return XGS_POLICY_STOP_AND_COPY;
 }
 
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 06ca7a7df6..e4740b063e 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -529,6 +529,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
     dss->type = type;
     dss->max_iters = props->max_iters ?: LIBXL_XGS_POLICY_MAX_ITERATIONS;
     dss->min_remaining = props->min_remaining ?: LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT;
+    dss->abort_if_busy = props->flags & LIBXL_SUSPEND_ABORT_IF_BUSY;
     dss->live = props->flags & LIBXL_SUSPEND_LIVE;
     dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index e4bfb34085..905d5179ba 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -3648,9 +3648,11 @@ struct libxl__domain_save_state {
     libxl_domain_type type;
     int live;
     int debug;
+    int abort_if_busy;
     int checkpointed_stream;
     uint32_t max_iters;
     uint32_t min_remaining;
+    long remaining_dirty_pages;
     const libxl_domain_remus_info *remus;
     /* private */
     int rc;
diff --git a/tools/libs/light/libxl_stream_write.c b/tools/libs/light/libxl_stream_write.c
index 634f3240d1..1ab3943f3e 100644
--- a/tools/libs/light/libxl_stream_write.c
+++ b/tools/libs/light/libxl_stream_write.c
@@ -344,11 +344,18 @@ void libxl__xc_domain_save_done(libxl__egc *egc, void *dss_void,
         goto err;
 
     if (retval) {
+        if (dss->remaining_dirty_pages) {
+            LOGD(NOTICE, dss->domid, "saving domain: aborted,"
+                 " %ld remaining dirty pages.", dss->remaining_dirty_pages);
+        } else {
         LOGEVD(ERROR, errnoval, dss->domid, "saving domain: %s",
               dss->dsps.guest_responded ?
               "domain responded to suspend request" :
               "domain did not respond to suspend request");
-        if (!dss->dsps.guest_responded)
+        }
+        if (dss->remaining_dirty_pages)
+           rc = ERROR_MIGRATION_ABORTED;
+        else if(!dss->dsps.guest_responded)
             rc = ERROR_GUEST_TIMEDOUT;
         else if (dss->rc)
             rc = dss->rc;
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index f45adddab0..b91769ee10 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -76,6 +76,7 @@ libxl_error = Enumeration("error", [
     (-30, "QMP_DEVICE_NOT_ACTIVE"), # a device has failed to be become active
     (-31, "QMP_DEVICE_NOT_FOUND"), # the requested device has not been found
     (-32, "QEMU_API"), # QEMU's replies don't contains expected members
+    (-33, "MIGRATION_ABORTED"),
     ], value_namespace = "")
 
 libxl_domain_type = Enumeration("domain_type", [
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index 2cb4980c80..322a47c2bc 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -176,7 +176,11 @@ const struct cmd_spec cmd_table[] = {
       "-p                Do not unpause domain after migrating it.\n"
       "-D                Preserve the domain id\n"
       "--max_iters N     Number of copy iterations before final stop+move\n"
-      "--min_remaining N Number of remaining dirty pages before final stop+move"
+      "--min_remaining N Number of remaining dirty pages before final stop+move\n"
+      "--abort_if_busy   Abort migration instead of doing final stop+move,\n"
+      "                  if the number of dirty pages is higher than <min_remaining>\n"
+      "                  after <max_iters> iterations. Otherwise the amount of memory\n"
+      "                  to be transfered would exceed maximum allowed domU downtime."
     },
     { "restore",
       &main_restore, 0, 1,
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 14feb2b7ec..f523746e5b 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -177,7 +177,7 @@ static void migrate_do_preamble(int send_fd, int recv_fd, pid_t child,
 }
 
 static void migrate_domain(uint32_t domid, int preserve_domid,
-                           const char *rune, int debug,
+                           const char *rune, int debug, int abort_if_busy,
                            uint32_t max_iters,
                            uint32_t min_remaining,
                            const char *override_config_file)
@@ -213,14 +213,20 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
 
     if (debug)
         props.flags |= LIBXL_SUSPEND_DEBUG;
+    if (abort_if_busy)
+        props.flags |= LIBXL_SUSPEND_ABORT_IF_BUSY;
     rc = libxl_domain_suspend(ctx, domid, send_fd, &props, NULL);
     if (rc) {
         fprintf(stderr, "migration sender: libxl_domain_suspend failed"
                 " (rc=%d)\n", rc);
-        if (rc == ERROR_GUEST_TIMEDOUT)
-            goto failed_suspend;
-        else
-            goto failed_resume;
+        switch (rc) {
+            case ERROR_GUEST_TIMEDOUT:
+                goto failed_suspend;
+            case ERROR_MIGRATION_ABORTED:
+                goto failed_busy;
+            default:
+                goto failed_resume;
+        }
     }
 
     //fprintf(stderr, "migration sender: Transfer complete.\n");
@@ -302,6 +308,12 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     fprintf(stderr, "Migration failed, failed to suspend at sender.\n");
     exit(EXIT_FAILURE);
 
+ failed_busy:
+    close(send_fd);
+    migration_child_report(recv_fd);
+    fprintf(stderr, "Migration aborted as requested, domain is too busy.\n");
+    exit(EXIT_FAILURE);
+
  failed_resume:
     close(send_fd);
     migration_child_report(recv_fd);
@@ -545,13 +557,14 @@ int main_migrate(int argc, char **argv)
     char *rune = NULL;
     char *host;
     int opt, daemonize = 1, monitor = 1, debug = 0, pause_after_migration = 0;
-    int preserve_domid = 0;
+    int preserve_domid = 0, abort_if_busy = 0;
     uint32_t max_iters = 0;
     uint32_t min_remaining = 0;
     static struct option opts[] = {
         {"debug", 0, 0, 0x100},
         {"max_iters", 1, 0, 0x101},
         {"min_remaining", 1, 0, 0x102},
+        {"abort_if_busy", 0, 0, 0x103},
         {"live", 0, 0, 0x200},
         COMMON_LONG_OPTS
     };
@@ -585,6 +598,9 @@ int main_migrate(int argc, char **argv)
     case 0x102: /* --min_remaining */
         min_remaining = atoi(optarg);
         break;
+    case 0x103: /* --abort_if_busy */
+        abort_if_busy = 1;
+        break;
     case 0x200: /* --live */
         /* ignored for compatibility with xm */
         break;
@@ -619,7 +635,7 @@ int main_migrate(int argc, char **argv)
                   pause_after_migration ? " -p" : "");
     }
 
-    migrate_domain(domid, preserve_domid, rune, debug,
+    migrate_domain(domid, preserve_domid, rune, debug, abort_if_busy,
                    max_iters, min_remaining, config_filename);
     return EXIT_SUCCESS;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:01:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:01:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148427.274419 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytW9-0002eA-MT; Thu, 01 Jul 2021 10:01:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148427.274419; Thu, 01 Jul 2021 10:01:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytW9-0002dt-Ig; Thu, 01 Jul 2021 10:01:57 +0000
Received: by outflank-mailman (input) for mailman id 148427;
 Thu, 01 Jul 2021 10:01:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytTI-0004XT-VW
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:59:01 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b57223e9-2c81-48e3-9cc3-386dc2e0c882;
 Thu, 01 Jul 2021 09:57:05 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uu5Nc
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:56 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b57223e9-2c81-48e3-9cc3-386dc2e0c882
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133416;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=6LebzrvgpkRPMXPrQvQqUEqJ9oCT3tBlpGnE42P4LCk=;
    b=KT2oEP6NW3z/fhQra9nm6nrr4OkR+aMBAw2WhNwMdqzOjgFtj+nsKLqMH86Gu9OeWF
    LlSiZsZfYcSSTGdtpJwmH9jhuSYaI4DNAmpNp7nsDwkHmo5V5bQgQ/px8d5dckC+DVyw
    TAU1oeCtFoEWkjIvFi+7KJK6by5ZsOTEGJcronSu3U38UPGInxxfvw4LZRSDgMJsmJYw
    5HuK9FOnwghE93c8NjAhB4WyPgINB0buk62Cs4AiIkddIWHu7t4K7fAHU3jZGNk7ISMg
    Ui1ph1RrWR9SXkTLHFXGAjGxsQyUGPBDT7d6F31zGVzX8W2oY4CM1KuZ/Me6ZY5rBazA
    t+/w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 35/40] tools: add --max_iters to libxl_domain_suspend
Date: Thu,  1 Jul 2021 11:56:30 +0200
Message-Id: <20210701095635.15648-36-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Migrating a large, and potentially busy, domU will take more
time than neccessary due to excessive number of copying iterations.

Allow to host admin to control the number of iterations which
copy cumulated domU dirty pages to the target host.

The default remains 5, which means one initial iteration to copy the
entire domU memory, and up to 4 additional iterations to copy dirty
memory from the still running domU. After the given number of iterations
the domU is suspended, remaining dirty memory is copied and the domU is
finally moved to the target host.

This patch adjusts xl(1) and the libxl API.
External users check LIBXL_HAVE_DOMAIN_SUSPEND_PROPS for the availibility
of the new .max_iters property.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 docs/man/xl.1.pod.in              |  4 ++++
 tools/include/libxl.h             |  1 +
 tools/libs/light/libxl_dom_save.c |  2 +-
 tools/libs/light/libxl_domain.c   |  1 +
 tools/libs/light/libxl_internal.h |  1 +
 tools/xl/xl_cmdtable.c            |  3 ++-
 tools/xl/xl_migrate.c             | 10 +++++++++-
 7 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index 70a6ebf438..594387bcf4 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -494,6 +494,10 @@ such that it will be identical on the destination host, unless that
 configuration is overridden using the B<-C> option. Note that it is not
 possible to use this option for a 'localhost' migration.
 
+=item B<--max_iters> I<iterations>
+
+Number of copy iterations before final suspend+move (default: 5)
+
 =back
 
 =item B<remus> [I<OPTIONS>] I<domain-id> I<host>
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 9a4d7514ed..bf77da0524 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1714,6 +1714,7 @@ static inline int libxl_retrieve_domain_configuration_0x041200(
 
 typedef struct {
     uint32_t flags; /* LIBXL_SUSPEND_* */
+    uint32_t max_iters;
 } libxl_domain_suspend_props;
 #define LIBXL_SUSPEND_DEBUG 1
 #define LIBXL_SUSPEND_LIVE 2
diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 3f3cff0342..938c0127f3 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -383,7 +383,7 @@ static int libxl__domain_save_precopy_policy(precopy_stats_t stats, void *user)
          stats.iteration, stats.dirty_count, stats.total_written);
     if (stats.dirty_count >= 0 && stats.dirty_count < LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT)
         goto stop_copy;
-    if (stats.iteration >= LIBXL_XGS_POLICY_MAX_ITERATIONS)
+    if (stats.iteration >= dss->max_iters)
         goto stop_copy;
     return XGS_POLICY_CONTINUE_PRECOPY;
 
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 5dbd27900f..9f98cd7f2b 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -527,6 +527,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
     dss->domid = domid;
     dss->fd = fd;
     dss->type = type;
+    dss->max_iters = props->max_iters ?: LIBXL_XGS_POLICY_MAX_ITERATIONS;
     dss->live = props->flags & LIBXL_SUSPEND_LIVE;
     dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index 57d7e4b4b8..8cbcc5282c 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -3649,6 +3649,7 @@ struct libxl__domain_save_state {
     int live;
     int debug;
     int checkpointed_stream;
+    uint32_t max_iters;
     const libxl_domain_remus_info *remus;
     /* private */
     int rc;
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index ca1dfa3525..9b6b3c99aa 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -174,7 +174,8 @@ const struct cmd_spec cmd_table[] = {
       "                of the domain.\n"
       "--debug         Ignored.\n"
       "-p              Do not unpause domain after migrating it.\n"
-      "-D              Preserve the domain id"
+      "-D              Preserve the domain id\n"
+      "--max_iters N   Number of copy iterations before final stop+move"
     },
     { "restore",
       &main_restore, 0, 1,
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 144890924f..af117d4d56 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -178,6 +178,7 @@ static void migrate_do_preamble(int send_fd, int recv_fd, pid_t child,
 
 static void migrate_domain(uint32_t domid, int preserve_domid,
                            const char *rune, int debug,
+                           uint32_t max_iters,
                            const char *override_config_file)
 {
     pid_t child = -1;
@@ -189,6 +190,7 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     int config_len;
     libxl_domain_suspend_props props = {
         .flags = LIBXL_SUSPEND_LIVE,
+        .max_iters = max_iters,
         };
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
@@ -542,8 +544,10 @@ int main_migrate(int argc, char **argv)
     char *host;
     int opt, daemonize = 1, monitor = 1, debug = 0, pause_after_migration = 0;
     int preserve_domid = 0;
+    uint32_t max_iters = 0;
     static struct option opts[] = {
         {"debug", 0, 0, 0x100},
+        {"max_iters", 1, 0, 0x101},
         {"live", 0, 0, 0x200},
         COMMON_LONG_OPTS
     };
@@ -571,6 +575,9 @@ int main_migrate(int argc, char **argv)
     case 0x100: /* --debug */
         debug = 1;
         break;
+    case 0x101: /* --max_iters */
+        max_iters = atoi(optarg);
+        break;
     case 0x200: /* --live */
         /* ignored for compatibility with xm */
         break;
@@ -605,7 +612,8 @@ int main_migrate(int argc, char **argv)
                   pause_after_migration ? " -p" : "");
     }
 
-    migrate_domain(domid, preserve_domid, rune, debug, config_filename);
+    migrate_domain(domid, preserve_domid, rune, debug,
+                   max_iters, config_filename);
     return EXIT_SUCCESS;
 }
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148441.274430 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWH-0003LB-4z; Thu, 01 Jul 2021 10:02:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148441.274430; Thu, 01 Jul 2021 10:02:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWG-0003Ky-U4; Thu, 01 Jul 2021 10:02:04 +0000
Received: by outflank-mailman (input) for mailman id 148441;
 Thu, 01 Jul 2021 10:02:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytTN-0004XT-Vj
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:59:06 +0000
Received: from mo4-p04-ob.smtp.rzone.de (unknown [85.215.255.122])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d24312b3-d57c-445e-b1b2-eafe1123a619;
 Thu, 01 Jul 2021 09:57:05 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uw5Nm
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:58 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d24312b3-d57c-445e-b1b2-eafe1123a619
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133419;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=4BSb6eeDkPifgS8HDSbSVDpKklU68Xf6WI9Hag1dmvM=;
    b=jBLrRaJpTQvsf6M1Gf2VBUS4pkLKBkyObynQud5Q4/eSVIM/iRSt15fDhO0tHwnAlv
    1FKyCbr7cEwRob38K+L9xBwQyGemJtmQDHZW1RGBJFV3r9uh2FchWrUoJmWK/peMHWaY
    Om7XyUXvaijdTNHWG5kOq0G0K1qv7u2zLFzoAYkDdWIkAbPjXkk9x6WEKk7tzQRtltFK
    u9snzNkHACAukU58d3VqFGSKIwnXOTNuP7q+2QhWLUBTAS5dUTFQECkZ4GMvuRDQ3KfV
    zAfJOSNmOWLmxW8r7SHCxOJSGXBfR5kLsYoDK7bb6YOi9NScjR25bpmL09IgfslKHBTl
    zchA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 40/40] tools/libxc: use superpages during restore of HVM guest
Date: Thu,  1 Jul 2021 11:56:35 +0200
Message-Id: <20210701095635.15648-41-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

During creating of a HVM domU meminit_hvm() tries to map superpages.
After save/restore or migration this mapping is lost, everything is
allocated in single pages. This causes a performance degradation after
migration.

Add neccessary code to preallocate a superpage for an incoming chunk of
pfns. In case a pfn was not populated on the sending side, it must be
freed on the receiving side to avoid over-allocation.

The existing code for x86_pv is moved unmodified into its own file.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v02:
- remove xg_ prefix from called functions
---
 tools/libs/guest/xg_dom_x86.c            |   5 -
 tools/libs/guest/xg_private.h            |   5 +
 tools/libs/saverestore/common.c          |   1 -
 tools/libs/saverestore/common.h          |  28 +-
 tools/libs/saverestore/restore.c         |  62 +---
 tools/libs/saverestore/restore_x86_hvm.c | 370 ++++++++++++++++++++++-
 tools/libs/saverestore/restore_x86_pv.c  |  61 +++-
 7 files changed, 455 insertions(+), 77 deletions(-)

diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c
index d2eb89ce01..ec0d18fd60 100644
--- a/tools/libs/guest/xg_dom_x86.c
+++ b/tools/libs/guest/xg_dom_x86.c
@@ -44,11 +44,6 @@
 
 #define SUPERPAGE_BATCH_SIZE 512
 
-#define SUPERPAGE_2MB_SHIFT   9
-#define SUPERPAGE_2MB_NR_PFNS (1UL << SUPERPAGE_2MB_SHIFT)
-#define SUPERPAGE_1GB_SHIFT   18
-#define SUPERPAGE_1GB_NR_PFNS (1UL << SUPERPAGE_1GB_SHIFT)
-
 #define X86_CR0_PE 0x01
 #define X86_CR0_ET 0x10
 
diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h
index 28441ee13f..b7372e6bd5 100644
--- a/tools/libs/guest/xg_private.h
+++ b/tools/libs/guest/xg_private.h
@@ -179,4 +179,9 @@ struct xc_cpu_policy {
 };
 #endif /* x86 */
 
+#define SUPERPAGE_2MB_SHIFT   9
+#define SUPERPAGE_2MB_NR_PFNS (1UL << SUPERPAGE_2MB_SHIFT)
+#define SUPERPAGE_1GB_SHIFT   18
+#define SUPERPAGE_1GB_NR_PFNS (1UL << SUPERPAGE_1GB_SHIFT)
+
 #endif /* XG_PRIVATE_H */
diff --git a/tools/libs/saverestore/common.c b/tools/libs/saverestore/common.c
index e96173eea2..8dbd516b1b 100644
--- a/tools/libs/saverestore/common.c
+++ b/tools/libs/saverestore/common.c
@@ -1,5 +1,4 @@
 #include <assert.h>
-
 #include "common.h"
 
 #include <xen-tools/libs.h>
diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index a610483fe7..3d392f1ac9 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -219,6 +219,16 @@ struct xc_sr_restore_ops
      */
     int (*setup)(struct xc_sr_context *ctx);
 
+    /**
+     * Populate PFNs
+     *
+     * Given a set of pfns, obtain memory from Xen to fill the physmap for the
+     * unpopulated subset.
+     */
+    int (*populate_pfns)(struct xc_sr_context *ctx, unsigned count,
+                         const xen_pfn_t *original_pfns, const uint32_t *types);
+
+
     /**
      * Process an individual record from the stream.  The caller shall take
      * care of processing common records (e.g. END, PAGE_DATA).
@@ -366,6 +376,8 @@ struct xc_sr_context
 
             int send_back_fd;
             unsigned long p2m_size;
+            unsigned long max_pages;
+            unsigned long tot_pages;
             xc_hypercall_buffer_t dirty_bitmap_hbuf;
 
             /* From Image Header. */
@@ -503,6 +515,14 @@ struct xc_sr_context
                     {
                         /* HVM context blob. */
                         struct xc_sr_blob context;
+
+                        /* Bitmap of currently allocated PFNs during restore. */
+                        struct sr_bitmap attempted_1g;
+                        struct sr_bitmap attempted_2m;
+                        struct sr_bitmap allocated_pfns;
+                        xen_pfn_t prev_populated_pfn;
+                        xen_pfn_t iteration_tracker_pfn;
+                        unsigned long iteration;
                     } restore;
                 };
             } hvm;
@@ -567,14 +587,6 @@ int read_record_header(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhd
 int read_record_data(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr,
                      struct xc_sr_record *rec);
 
-/*
- * This would ideally be private in restore.c, but is needed by
- * x86_pv_localise_page() if we receive pagetables frames ahead of the
- * contents of the frames they point at.
- */
-int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
-                  const xen_pfn_t *original_pfns, const uint32_t *types);
-
 /* Handle a STATIC_DATA_END record. */
 int handle_static_data_end(struct xc_sr_context *ctx);
 
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index baf8ea44e5..5ad3df49ba 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -71,63 +71,6 @@ static int read_headers(struct xc_sr_context *ctx)
     return 0;
 }
 
-/*
- * Given a set of pfns, obtain memory from Xen to fill the physmap for the
- * unpopulated subset.  If types is NULL, no page type checking is performed
- * and all unpopulated pfns are populated.
- */
-int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
-                  const xen_pfn_t *original_pfns, const uint32_t *types)
-{
-    xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = ctx->restore.m->pp_mfns,
-        *pfns = ctx->restore.m->pp_pfns;
-    unsigned int i, nr_pfns = 0;
-    int rc = -1;
-
-    for ( i = 0; i < count; ++i )
-    {
-        if ( (!types ||
-              (types && page_type_to_populate(types[i]) == true)) &&
-             !pfn_is_populated(ctx, original_pfns[i]) )
-        {
-            rc = pfn_set_populated(ctx, original_pfns[i]);
-            if ( rc )
-                goto err;
-            pfns[nr_pfns] = mfns[nr_pfns] = original_pfns[i];
-            ++nr_pfns;
-        }
-    }
-
-    if ( nr_pfns )
-    {
-        rc = xc_domain_populate_physmap_exact(
-            xch, ctx->domid, nr_pfns, 0, 0, mfns);
-        if ( rc )
-        {
-            PERROR("Failed to populate physmap");
-            goto err;
-        }
-
-        for ( i = 0; i < nr_pfns; ++i )
-        {
-            if ( mfns[i] == INVALID_MFN )
-            {
-                ERROR("Populate physmap failed for pfn %u", i);
-                rc = -1;
-                goto err;
-            }
-
-            ctx->restore.ops.set_gfn(ctx, pfns[i], mfns[i]);
-        }
-    }
-
-    rc = 0;
-
- err:
-    return rc;
-}
-
 static int handle_static_data_end_v2(struct xc_sr_context *ctx)
 {
     int rc = 0;
@@ -270,7 +213,7 @@ static int map_guest_pages(struct xc_sr_context *ctx,
     uint32_t i, p;
     int rc;
 
-    rc = populate_pfns(ctx, pages->count, m->pfns, m->types);
+    rc = ctx->restore.ops.populate_pfns(ctx, pages->count, m->pfns, m->types);
     if ( rc )
     {
         ERROR("Failed to populate pfns for batch of %u pages", pages->count);
@@ -1077,6 +1020,9 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
         return -1;
     }
 
+    /* See xc_domain_getinfo */
+    ctx.restore.max_pages = ctx.dominfo.max_memkb >> (PAGE_SHIFT-10);
+    ctx.restore.tot_pages = ctx.dominfo.nr_pages;
     ctx.restore.p2m_size = nr_pfns;
     ctx.restore.ops = ctx.dominfo.hvm
         ? restore_ops_x86_hvm : restore_ops_x86_pv;
diff --git a/tools/libs/saverestore/restore_x86_hvm.c b/tools/libs/saverestore/restore_x86_hvm.c
index 97e7e0f48c..f45635613f 100644
--- a/tools/libs/saverestore/restore_x86_hvm.c
+++ b/tools/libs/saverestore/restore_x86_hvm.c
@@ -130,6 +130,25 @@ static int x86_hvm_localise_page(struct xc_sr_context *ctx,
     return 0;
 }
 
+static bool x86_hvm_expand_sp_bitmaps(struct xc_sr_context *ctx, unsigned long max_pfn)
+{
+    struct sr_bitmap *bm;
+
+    bm = &ctx->x86.hvm.restore.attempted_1g;
+    if ( !sr_bitmap_expand(bm, max_pfn >> SUPERPAGE_1GB_SHIFT) )
+        return false;
+
+    bm = &ctx->x86.hvm.restore.attempted_2m;
+    if ( !sr_bitmap_expand(bm, max_pfn >> SUPERPAGE_2MB_SHIFT) )
+        return false;
+
+    bm = &ctx->x86.hvm.restore.allocated_pfns;
+    if ( !sr_bitmap_expand(bm, max_pfn) )
+        return false;
+
+    return true;
+}
+
 /*
  * restore_ops function. Confirms the stream matches the domain.
  */
@@ -164,12 +183,21 @@ static int x86_hvm_setup(struct xc_sr_context *ctx)
 
     max_pfn = max(ctx->restore.p2m_size, ctx->dominfo.max_memkb >> (PAGE_SHIFT-10));
     if ( !sr_bitmap_expand(&ctx->restore.populated_pfns, max_pfn) )
-    {
-        PERROR("Unable to allocate memory for populated_pfns bitmap");
-        return -1;
-    }
+        goto out;
+
+    if ( !x86_hvm_expand_sp_bitmaps(ctx, max_pfn) )
+        goto out;
+
+    /* FIXME: distinguish between PVH and HVM */
+    /* No superpage in 1st 2MB due to VGA hole */
+    sr_set_bit(0, &ctx->x86.hvm.restore.attempted_1g);
+    sr_set_bit(0, &ctx->x86.hvm.restore.attempted_2m);
 
     return 0;
+
+out:
+    PERROR("Unable to allocate memory for pfn bitmaps");
+    return -1;
 }
 
 /*
@@ -250,6 +278,9 @@ static int x86_hvm_stream_complete(struct xc_sr_context *ctx)
 static int x86_hvm_cleanup(struct xc_sr_context *ctx)
 {
     sr_bitmap_free(&ctx->restore.populated_pfns);
+    sr_bitmap_free(&ctx->x86.hvm.restore.attempted_1g);
+    sr_bitmap_free(&ctx->x86.hvm.restore.attempted_2m);
+    sr_bitmap_free(&ctx->x86.hvm.restore.allocated_pfns);
     free(ctx->x86.hvm.restore.context.ptr);
 
     free(ctx->x86.restore.cpuid.ptr);
@@ -258,6 +289,336 @@ static int x86_hvm_cleanup(struct xc_sr_context *ctx)
     return 0;
 }
 
+/*
+ * Set a range of pfns as allocated
+ */
+static void pfn_set_long_allocated(struct xc_sr_context *ctx, xen_pfn_t base_pfn)
+{
+    sr_set_long_bit(base_pfn, &ctx->x86.hvm.restore.allocated_pfns);
+}
+
+static void pfn_set_allocated(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    sr_set_bit(pfn, &ctx->x86.hvm.restore.allocated_pfns);
+}
+
+struct x86_hvm_sp {
+    xen_pfn_t pfn;
+    xen_pfn_t base_pfn;
+    unsigned long index;
+    unsigned long count;
+};
+
+/*
+ * Try to allocate a 1GB page for this pfn, but avoid Over-allocation.
+ * If this succeeds, mark the range of 2MB pages as busy.
+ */
+static bool x86_hvm_alloc_1g(struct xc_sr_context *ctx, struct x86_hvm_sp *sp)
+{
+    xc_interface *xch = ctx->xch;
+    unsigned int order;
+    int i, done;
+    xen_pfn_t extent;
+
+    /* Only one attempt to avoid overlapping allocation */
+    if ( sr_test_and_set_bit(sp->index, &ctx->x86.hvm.restore.attempted_1g) )
+        return false;
+
+    order = SUPERPAGE_1GB_SHIFT;
+    sp->count = SUPERPAGE_1GB_NR_PFNS;
+
+    /* Allocate only if there is room for another superpage */
+    if ( ctx->restore.tot_pages + sp->count > ctx->restore.max_pages )
+        return false;
+
+    extent = sp->base_pfn = (sp->pfn >> order) << order;
+    done = xc_domain_populate_physmap(xch, ctx->domid, 1, order, 0, &extent);
+    if ( done < 0 ) {
+        PERROR("populate_physmap failed.");
+        return false;
+    }
+    if ( done == 0 )
+        return false;
+
+    DPRINTF("1G %" PRI_xen_pfn "\n", sp->base_pfn);
+
+    /* Mark all 2MB pages as done to avoid overlapping allocation */
+    for ( i = 0; i < (SUPERPAGE_1GB_NR_PFNS/SUPERPAGE_2MB_NR_PFNS); i++ )
+        sr_set_bit((sp->base_pfn >> SUPERPAGE_2MB_SHIFT) + i, &ctx->x86.hvm.restore.attempted_2m);
+
+    return true;
+}
+
+/* Allocate a 2MB page if x86_hvm_alloc_1g failed, avoid Over-allocation. */
+static bool x86_hvm_alloc_2m(struct xc_sr_context *ctx, struct x86_hvm_sp *sp)
+{
+    xc_interface *xch = ctx->xch;
+    unsigned int order;
+    int done;
+    xen_pfn_t extent;
+
+    /* Only one attempt to avoid overlapping allocation */
+    if ( sr_test_and_set_bit(sp->index, &ctx->x86.hvm.restore.attempted_2m) )
+        return false;
+
+    order = SUPERPAGE_2MB_SHIFT;
+    sp->count = SUPERPAGE_2MB_NR_PFNS;
+
+    /* Allocate only if there is room for another superpage */
+    if ( ctx->restore.tot_pages + sp->count > ctx->restore.max_pages )
+        return false;
+
+    extent = sp->base_pfn = (sp->pfn >> order) << order;
+    done = xc_domain_populate_physmap(xch, ctx->domid, 1, order, 0, &extent);
+    if ( done < 0 ) {
+        PERROR("populate_physmap failed.");
+        return false;
+    }
+    if ( done == 0 )
+        return false;
+
+    DPRINTF("2M %" PRI_xen_pfn "\n", sp->base_pfn);
+    return true;
+}
+
+/* Allocate a single page if x86_hvm_alloc_2m failed. */
+static bool x86_hvm_alloc_4k(struct xc_sr_context *ctx, struct x86_hvm_sp *sp)
+{
+    xc_interface *xch = ctx->xch;
+    unsigned int order;
+    int done;
+    xen_pfn_t extent;
+
+    order = 0;
+    sp->count = 1UL;
+
+    /* Allocate only if there is room for another page */
+    if ( ctx->restore.tot_pages + sp->count > ctx->restore.max_pages ) {
+        errno = E2BIG;
+        return false;
+    }
+
+    extent = sp->base_pfn = (sp->pfn >> order) << order;
+    done = xc_domain_populate_physmap(xch, ctx->domid, 1, order, 0, &extent);
+    if ( done < 0 ) {
+        PERROR("populate_physmap failed.");
+        return false;
+    }
+    if ( done == 0 ) {
+        errno = ENOMEM;
+        return false;
+    }
+
+    DPRINTF("4K %" PRI_xen_pfn "\n", sp->base_pfn);
+    return true;
+}
+/*
+ * Attempt to allocate a superpage where the pfn resides.
+ */
+static int x86_hvm_allocate_pfn(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    bool success;
+    unsigned long idx_1g, idx_2m;
+    struct x86_hvm_sp sp = {
+        .pfn = pfn
+    };
+
+    if ( sr_test_bit(pfn, &ctx->x86.hvm.restore.allocated_pfns) )
+        return 0;
+
+    idx_1g = pfn >> SUPERPAGE_1GB_SHIFT;
+    idx_2m = pfn >> SUPERPAGE_2MB_SHIFT;
+
+    sp.index = idx_1g;
+    success = x86_hvm_alloc_1g(ctx, &sp);
+
+    if ( success == false ) {
+        sp.index = idx_2m;
+        success = x86_hvm_alloc_2m(ctx, &sp);
+    }
+
+    if ( success == false ) {
+        sp.index = 0;
+        success = x86_hvm_alloc_4k(ctx, &sp);
+    }
+
+    if ( success == false )
+        return -1;
+
+    do {
+        if ( sp.count >= BITS_PER_LONG ) {
+            sp.count -= BITS_PER_LONG;
+            ctx->restore.tot_pages += BITS_PER_LONG;
+            pfn_set_long_allocated(ctx, sp.base_pfn + sp.count);
+        } else {
+            sp.count--;
+            ctx->restore.tot_pages++;
+            pfn_set_allocated(ctx, sp.base_pfn + sp.count);
+        }
+    } while ( sp.count );
+
+    return 0;
+}
+
+/*
+ * Deallocate memory.
+ * There was likely an optimistic superpage allocation.
+ * This means more pages may have been allocated past gap_end.
+ * This range is not freed now. Incoming higher pfns will release it.
+ */
+static int x86_hvm_punch_hole(struct xc_sr_context *ctx,
+                               xen_pfn_t gap_start, xen_pfn_t gap_end)
+{
+    xc_interface *xch = ctx->xch;
+    xen_pfn_t _pfn, pfn;
+    uint32_t domid, freed = 0;
+    int rc;
+
+    pfn = gap_start >> SUPERPAGE_1GB_SHIFT;
+    do
+    {
+        sr_set_bit(pfn, &ctx->x86.hvm.restore.attempted_1g);
+    } while (++pfn <= gap_end >> SUPERPAGE_1GB_SHIFT);
+
+    pfn = gap_start >> SUPERPAGE_2MB_SHIFT;
+    do
+    {
+        sr_set_bit(pfn, &ctx->x86.hvm.restore.attempted_2m);
+    } while (++pfn <= gap_end >> SUPERPAGE_2MB_SHIFT);
+
+    pfn = gap_start;
+
+    while ( pfn <= gap_end )
+    {
+        if ( sr_test_and_clear_bit(pfn, &ctx->x86.hvm.restore.allocated_pfns) )
+        {
+            domid = ctx->domid;
+            _pfn = pfn;
+            rc = xc_domain_decrease_reservation_exact(xch, domid, 1, 0, &_pfn);
+            if ( rc )
+            {
+                PERROR("Failed to release pfn %" PRI_xen_pfn, pfn);
+                return -1;
+            }
+            ctx->restore.tot_pages--;
+            freed++;
+        }
+        pfn++;
+    }
+    if ( freed )
+        DPRINTF("freed %u between %" PRI_xen_pfn " %" PRI_xen_pfn "\n",
+                freed, gap_start, gap_end);
+    return 0;
+}
+
+static int x86_hvm_unpopulate_page(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    sr_clear_bit(pfn, &ctx->restore.populated_pfns);
+    return x86_hvm_punch_hole(ctx, pfn, pfn);
+}
+
+static int x86_hvm_populate_page(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    xen_pfn_t gap_start, gap_end;
+    bool has_gap, first_iteration;
+    int rc;
+
+    /*
+     * Check for a gap between the previous populated pfn and this pfn.
+     * In case a gap exists, it is required to punch a hole to release memory,
+     * starting after the previous pfn and before this pfn.
+     *
+     * But: this can be done only during the first iteration, which is the
+     * only place there superpage allocations are attempted. All following
+     * iterations lack the info to properly maintain prev_populated_pfn.
+     */
+    has_gap = ctx->x86.hvm.restore.prev_populated_pfn + 1 < pfn;
+    first_iteration = ctx->x86.hvm.restore.iteration == 0;
+    if ( has_gap && first_iteration )
+    {
+        gap_start = ctx->x86.hvm.restore.prev_populated_pfn + 1;
+        gap_end = pfn - 1;
+
+        rc = x86_hvm_punch_hole(ctx, gap_start, gap_end);
+        if ( rc )
+            goto err;
+    }
+
+    rc = x86_hvm_allocate_pfn(ctx, pfn);
+    if ( rc )
+        goto err;
+    pfn_set_populated(ctx, pfn);
+    ctx->x86.hvm.restore.prev_populated_pfn = pfn;
+
+    rc = 0;
+err:
+    return rc;
+}
+
+/*
+ * Try to allocate superpages.
+ * This works without memory map because the pfns arrive in incremental order.
+ * All pfn numbers and their type are submitted.
+ * Only pfns with data will have also pfn content transmitted.
+ */
+static int x86_hvm_populate_pfns(struct xc_sr_context *ctx, unsigned count,
+                                 const xen_pfn_t *original_pfns,
+                                 const uint32_t *types)
+{
+    xc_interface *xch = ctx->xch;
+    xen_pfn_t pfn, min_pfn, max_pfn;
+    bool to_populate, populated;
+    unsigned i = count;
+    int rc = 0;
+
+    min_pfn = count ? original_pfns[0] : 0;
+    max_pfn = count ? original_pfns[count - 1] : 0;
+    DPRINTF("batch of %u pfns between %" PRI_xen_pfn " %" PRI_xen_pfn "\n",
+            count, min_pfn, max_pfn);
+
+    if ( !x86_hvm_expand_sp_bitmaps(ctx, max_pfn) )
+    {
+        ERROR("Unable to allocate memory for pfn bitmaps");
+        return -1;
+    }
+
+    /*
+     * There is no indicator for a new iteration.
+     * Simulate it by checking if a lower pfn is coming in.
+     * In the end it matters only to know if this iteration is the first one.
+     */
+    if ( min_pfn < ctx->x86.hvm.restore.iteration_tracker_pfn )
+        ctx->x86.hvm.restore.iteration++;
+    ctx->x86.hvm.restore.iteration_tracker_pfn = min_pfn;
+
+    for ( i = 0; i < count; ++i )
+    {
+        pfn = original_pfns[i];
+
+        to_populate = page_type_to_populate(types[i]);
+        populated = pfn_is_populated(ctx, pfn);
+
+        /*
+         * page has data, pfn populated: nothing to do
+         * page has data, pfn not populated: likely never seen before
+         * page has no data, pfn populated: likely ballooned out during migration
+         * page has no data, pfn not populated: nothing to do
+         */
+        if ( to_populate && !populated )
+        {
+            rc = x86_hvm_populate_page(ctx, pfn);
+        } else if ( !to_populate && populated )
+        {
+            rc = x86_hvm_unpopulate_page(ctx, pfn);
+        }
+        if ( rc )
+            break;
+    }
+
+    return rc;
+}
+
+
 struct xc_sr_restore_ops restore_ops_x86_hvm =
 {
     .pfn_is_valid    = x86_hvm_pfn_is_valid,
@@ -266,6 +627,7 @@ struct xc_sr_restore_ops restore_ops_x86_hvm =
     .set_page_type   = x86_hvm_set_page_type,
     .localise_page   = x86_hvm_localise_page,
     .setup           = x86_hvm_setup,
+    .populate_pfns   = x86_hvm_populate_pfns,
     .process_record  = x86_hvm_process_record,
     .static_data_complete = x86_static_data_complete,
     .stream_complete = x86_hvm_stream_complete,
diff --git a/tools/libs/saverestore/restore_x86_pv.c b/tools/libs/saverestore/restore_x86_pv.c
index c73a3cd99f..244f1da218 100644
--- a/tools/libs/saverestore/restore_x86_pv.c
+++ b/tools/libs/saverestore/restore_x86_pv.c
@@ -959,6 +959,64 @@ static void x86_pv_set_gfn(struct xc_sr_context *ctx, xen_pfn_t pfn,
         ((uint32_t *)ctx->x86.pv.p2m)[pfn] = mfn;
 }
 
+/*
+ * Given a set of pfns, obtain memory from Xen to fill the physmap for the
+ * unpopulated subset.  If types is NULL, no page type checking is performed
+ * and all unpopulated pfns are populated.
+ */
+static int x86_pv_populate_pfns(struct xc_sr_context *ctx, unsigned count,
+                                const xen_pfn_t *original_pfns,
+                                const uint32_t *types)
+{
+    xc_interface *xch = ctx->xch;
+    xen_pfn_t *mfns = ctx->restore.m->pp_mfns,
+        *pfns = ctx->restore.m->pp_pfns;
+    unsigned int i, nr_pfns = 0;
+    int rc = -1;
+
+    for ( i = 0; i < count; ++i )
+    {
+        if ( (!types ||
+              (types && page_type_has_stream_data(types[i]) == true)) &&
+             !pfn_is_populated(ctx, original_pfns[i]) )
+        {
+            rc = pfn_set_populated(ctx, original_pfns[i]);
+            if ( rc )
+                goto err;
+            pfns[nr_pfns] = mfns[nr_pfns] = original_pfns[i];
+            ++nr_pfns;
+        }
+    }
+
+    if ( nr_pfns )
+    {
+        rc = xc_domain_populate_physmap_exact(
+            xch, ctx->domid, nr_pfns, 0, 0, mfns);
+        if ( rc )
+        {
+            PERROR("Failed to populate physmap");
+            goto err;
+        }
+
+        for ( i = 0; i < nr_pfns; ++i )
+        {
+            if ( mfns[i] == INVALID_MFN )
+            {
+                ERROR("Populate physmap failed for pfn %u", i);
+                rc = -1;
+                goto err;
+            }
+
+            ctx->restore.ops.set_gfn(ctx, pfns[i], mfns[i]);
+        }
+    }
+
+    rc = 0;
+
+ err:
+    return rc;
+}
+
 /*
  * restore_ops function.  Convert pfns back to mfns in pagetables.  Possibly
  * needs to populate new frames if a PTE is found referring to a frame which
@@ -1003,7 +1061,7 @@ static int x86_pv_localise_page(struct xc_sr_context *ctx,
         }
     }
 
-    if ( to_populate && populate_pfns(ctx, to_populate, pfns, NULL) )
+    if ( to_populate && x86_pv_populate_pfns(ctx, to_populate, pfns, NULL) )
         return -1;
 
     for ( i = 0; i < (PAGE_SIZE / sizeof(uint64_t)); ++i )
@@ -1200,6 +1258,7 @@ struct xc_sr_restore_ops restore_ops_x86_pv =
     .set_gfn         = x86_pv_set_gfn,
     .localise_page   = x86_pv_localise_page,
     .setup           = x86_pv_setup,
+    .populate_pfns   = x86_pv_populate_pfns,
     .process_record  = x86_pv_process_record,
     .static_data_complete = x86_static_data_complete,
     .stream_complete = x86_pv_stream_complete,


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148445.274435 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWH-0003Qx-J7; Thu, 01 Jul 2021 10:02:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148445.274435; Thu, 01 Jul 2021 10:02:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWH-0003P2-AU; Thu, 01 Jul 2021 10:02:05 +0000
Received: by outflank-mailman (input) for mailman id 148445;
 Thu, 01 Jul 2021 10:02:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSR-0004r4-IA
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:07 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.103])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c67c5005-9db6-4605-a9a1-894bd03374d3;
 Thu, 01 Jul 2021 09:57:04 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ut5NZ
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:55 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c67c5005-9db6-4605-a9a1-894bd03374d3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133416;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=am1tugVzg71doIb/LdiNWtayiDvPFoCjZNyMmciOrqY=;
    b=S31S0Jt1lo62PKxR9+Zf+Yg69D9KtTrkK70UgDAz146NRRLagnFrm5ubU1mi6Qkg/q
    Q2GmvdaoeUv8qexauJe8nt7STm03F5HQ7NsRv++KlTNGUhXly65XZCvY9WmJ4DblKL01
    l2FXO2a1tIKUC0XNjvSZsGBQcye/w0Ec2WQiUQCiDE0VGBu0cm4GjYGlak4zXxa6dV4Z
    YWNhhVHIhlrsyOBFjkKkSlItkPEeHUs2TLaYO6bZACVXFZv2yZ4nk+DN1wD5ArOT9tVl
    qwBaTla3EyL/J+ttb+EPxMC840ZGALDGTFqS9LCu32ZjbyWEHwjO5IIlNjijU0BufqPj
    sxFA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 34/40] tools: add callback to libxl for precopy_policy and precopy_stats_t
Date: Thu,  1 Jul 2021 11:56:29 +0200
Message-Id: <20210701095635.15648-35-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This duplicates simple_precopy_policy. To recap its purpose:
- do up to 5 iterations of copying dirty domU memory to target,
  including the initial copying of all domU memory, excluding
  the final copying while the domU is suspended
- do fewer iterations in case the domU dirtied less than 50 pages

Take the opportunity to also move xen_pfn_t into qw().

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/light/libxl_dom_save.c       | 19 +++++++++++++++++++
 tools/libs/light/libxl_internal.h       |  2 ++
 tools/libs/light/libxl_save_msgs_gen.pl |  3 ++-
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 32e3cb5a13..3f3cff0342 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -373,6 +373,24 @@ int libxl__save_emulator_xenstore_data(libxl__domain_save_state *dss,
     return rc;
 }
 
+static int libxl__domain_save_precopy_policy(precopy_stats_t stats, void *user)
+{
+    libxl__save_helper_state *shs = user;
+    libxl__domain_save_state *dss = shs->caller_state;
+    STATE_AO_GC(dss->ao);
+
+    LOGD(DEBUG, shs->domid, "iteration %u dirty_count %ld total_written %lu",
+         stats.iteration, stats.dirty_count, stats.total_written);
+    if (stats.dirty_count >= 0 && stats.dirty_count < LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT)
+        goto stop_copy;
+    if (stats.iteration >= LIBXL_XGS_POLICY_MAX_ITERATIONS)
+        goto stop_copy;
+    return XGS_POLICY_CONTINUE_PRECOPY;
+
+stop_copy:
+    return XGS_POLICY_STOP_AND_COPY;
+}
+
 /*----- main code for saving, in order of execution -----*/
 
 void libxl__domain_save(libxl__egc *egc, libxl__domain_save_state *dss)
@@ -430,6 +448,7 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_save_state *dss)
         callbacks->suspend = libxl__domain_suspend_callback;
 
     callbacks->switch_qemu_logdirty = libxl__domain_suspend_common_switch_qemu_logdirty;
+    callbacks->precopy_policy = libxl__domain_save_precopy_policy;
 
     dss->sws.ao  = dss->ao;
     dss->sws.dss = dss;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index 439c654733..57d7e4b4b8 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -125,6 +125,8 @@
 #define DOMID_XS_PATH "domid"
 #define PVSHIM_BASENAME "xen-shim"
 #define PVSHIM_CMDLINE "pv-shim console=xen,pv"
+#define LIBXL_XGS_POLICY_MAX_ITERATIONS 5
+#define LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT 50
 
 /* Size macros. */
 #define __AC(X,Y)   (X##Y)
diff --git a/tools/libs/light/libxl_save_msgs_gen.pl b/tools/libs/light/libxl_save_msgs_gen.pl
index f263ee01bb..ab55c81644 100755
--- a/tools/libs/light/libxl_save_msgs_gen.pl
+++ b/tools/libs/light/libxl_save_msgs_gen.pl
@@ -23,6 +23,7 @@ our @msgs = (
                                              STRING doing_what),
                                             'unsigned long', 'done',
                                             'unsigned long', 'total'] ],
+    [ 'scxW',   "precopy_policy", ['precopy_stats_t', 'stats'] ],
     [ 'srcxA',  "suspend", [] ],
     [ 'srcxA',  "postcopy", [] ],
     [ 'srcxA',  "checkpoint", [] ],
@@ -142,7 +143,7 @@ static void bytes_put(unsigned char *const buf, int *len,
 
 END
 
-foreach my $simpletype (qw(int uint16_t uint32_t unsigned), 'unsigned long', 'xen_pfn_t') {
+foreach my $simpletype (qw(int uint16_t uint32_t unsigned precopy_stats_t xen_pfn_t), 'unsigned long') {
     my $typeid = typeid($simpletype);
     $out_body{'callout'} .= <<END;
 static int ${typeid}_get(const unsigned char **msg,


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148450.274442 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWI-0003fq-EY; Thu, 01 Jul 2021 10:02:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148450.274442; Thu, 01 Jul 2021 10:02:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWI-0003e4-4A; Thu, 01 Jul 2021 10:02:06 +0000
Received: by outflank-mailman (input) for mailman id 148450;
 Thu, 01 Jul 2021 10:02:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSF-0004XT-T9
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:55 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8f5aaa21-467c-4219-8fba-a36d20e9b099;
 Thu, 01 Jul 2021 09:56:54 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619um5NA
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:48 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8f5aaa21-467c-4219-8fba-a36d20e9b099
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133408;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=xJ7EM0+9FDIAYOBy0R8s1Qys8qJMuiw+N5Xy4+8lTRo=;
    b=ecp23n+S6r+4J3vKtWX10SGOt6Su4h9JFji2tuLPVYzQv5MY7bYqyPFuHG0tK9wydu
    K+2wARe/QyYDm/49/2uQKd5An2WKG5l5LORbdXBW5WK3FMqSkUb/cIb076s16lRmodRN
    JrxlWRGRFwju9v/xJgdjLsjsp7vKDolsGue95kwLbMUbtQd8LPIZtEOAeaZslf6aC2pA
    Sw/ZPth5/AqS4Lz5laaV64HIPImMq3W4Pcexyxa4QPra1O8tQhiKM41ym+zRxs8pNo+/
    EdAMzXYxblAPDipzbkUjyYm1f9JyxZDInIfzDsVGatH7e+M/2lcKgIm+p0WHbAQSzFVN
    AUmA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 20/40] tools: save: move rec_pfns array
Date: Thu,  1 Jul 2021 11:56:15 +0200
Message-Id: <20210701095635.15648-21-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move rec_pfns array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h |  2 ++
 tools/libs/saverestore/save.c   | 11 +----------
 2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index c8a30acf7b..3994ab3844 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -233,6 +233,8 @@ struct sr_save_arrays {
     int errors[MAX_BATCH_SIZE];
     /* write_batch: iovec[] for writev(). */
     struct iovec iov[MAX_BATCH_SIZE + 4];
+    /* write_batch */
+    uint64_t rec_pfns[MAX_BATCH_SIZE];
 };
 
 struct sr_restore_arrays {
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 1a5f3d29ea..0f02988ff9 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -96,7 +96,7 @@ static int write_batch(struct xc_sr_context *ctx)
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
     void *page, *orig_page;
-    uint64_t *rec_pfns = NULL;
+    uint64_t *rec_pfns = ctx->save.m->rec_pfns;
     struct iovec *iov = ctx->save.m->iov; int iovcnt = 0;
     struct xc_sr_rec_page_data_header hdr = { 0 };
     struct xc_sr_record rec = {
@@ -201,14 +201,6 @@ static int write_batch(struct xc_sr_context *ctx)
         }
     }
 
-    rec_pfns = malloc(nr_pfns * sizeof(*rec_pfns));
-    if ( !rec_pfns )
-    {
-        ERROR("Unable to allocate %zu bytes of memory for page data pfn list",
-              nr_pfns * sizeof(*rec_pfns));
-        goto err;
-    }
-
     hdr.count = nr_pfns;
 
     rec.length = sizeof(hdr);
@@ -259,7 +251,6 @@ static int write_batch(struct xc_sr_context *ctx)
     rc = ctx->save.nr_batch_pfns = 0;
 
  err:
-    free(rec_pfns);
     if ( guest_mapping )
         xenforeignmemory_unmap(xch->fmem, guest_mapping, nr_pages_mapped);
     for ( i = 0; local_pages && i < nr_pfns; ++i )


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148459.274463 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWN-0004bp-RC; Thu, 01 Jul 2021 10:02:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148459.274463; Thu, 01 Jul 2021 10:02:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWN-0004bZ-LD; Thu, 01 Jul 2021 10:02:11 +0000
Received: by outflank-mailman (input) for mailman id 148459;
 Thu, 01 Jul 2021 10:02:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytT3-0004XT-Uz
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:45 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ce866e23-22a8-4ca0-a2a8-b1be12cba45e;
 Thu, 01 Jul 2021 09:57:01 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619us5NY
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:54 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ce866e23-22a8-4ca0-a2a8-b1be12cba45e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133415;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=yuafVLq2aG35iRtmsU2Mgmytxa4WOaE4NXl9z9jSB2o=;
    b=Hsg1ND1EL5IMwp88Gl0qTaM2/mCUSaQ17bsPAiq++O+Xz533TUGNCQ3NxadVT/GIIY
    uLhJnjczyyus/WqAMECiOsPEBr3LTv4pBs/BseMGMUDqadXrkjFsxCRRzD9uNNUSaASc
    BaxACe1wOrs8ksgFb6aEvc9SA27yse1vqdrBazsAvVDFuHFkeNGRaT7kt/ARBWpVe0KW
    O7sn9ayndZrsZsEccohssOWkCT5FqkoxS6tPywhCAdfkKxkNKJPalCyHzNrIS3ctgP14
    xOVq8qVVtfqTDHqP8ImXwEwTvVFBh0PEm8M/SC7Swoo6zTKFZnypQLhVBPZw0Zno5Lro
    sq9Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 33/40] tools: change struct precopy_stats to precopy_stats_t
Date: Thu,  1 Jul 2021 11:56:28 +0200
Message-Id: <20210701095635.15648-34-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This will help libxl_save_msgs_gen.pl to copy the struct as a region of memory.

No change in behavior intented.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/include/xensaverestore.h  | 7 +++----
 tools/libs/saverestore/common.h | 2 +-
 tools/libs/saverestore/save.c   | 6 +++---
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/tools/include/xensaverestore.h b/tools/include/xensaverestore.h
index 0410f0469e..dca0134605 100644
--- a/tools/include/xensaverestore.h
+++ b/tools/include/xensaverestore.h
@@ -23,18 +23,17 @@
 #define XCFLAGS_DEBUG     (1 << 1)
 
 /* For save's precopy_policy(). */
-struct precopy_stats
-{
+typedef struct {
     unsigned int iteration;
     unsigned long total_written;
     long dirty_count; /* -1 if unknown */
-};
+} precopy_stats_t;
 
 /*
  * A precopy_policy callback may not be running in the same address
  * space as libxc an so precopy_stats is passed by value.
  */
-typedef int (*precopy_policy_t)(struct precopy_stats, void *);
+typedef int (*precopy_policy_t)(precopy_stats_t, void *);
 
 /* callbacks provided by xc_domain_save */
 struct save_callbacks {
diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 3adcf2f83f..bb7e437291 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -283,7 +283,7 @@ struct xc_sr_context
             size_t pages_sent;
             size_t overhead_sent;
 
-            struct precopy_stats stats;
+            precopy_stats_t stats;
 
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index e486bce96f..537b977ba8 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -488,7 +488,7 @@ static int update_progress_string(struct xc_sr_context *ctx, char **str)
 #define SPP_MAX_ITERATIONS      5
 #define SPP_TARGET_DIRTY_COUNT 50
 
-static int simple_precopy_policy(struct precopy_stats stats, void *user)
+static int simple_precopy_policy(precopy_stats_t stats, void *user)
 {
     return ((stats.dirty_count >= 0 &&
              stats.dirty_count < SPP_TARGET_DIRTY_COUNT) ||
@@ -515,13 +515,13 @@ static int send_memory_live(struct xc_sr_context *ctx)
     precopy_policy_t precopy_policy = ctx->save.callbacks->precopy_policy;
     void *data = ctx->save.callbacks->data;
 
-    struct precopy_stats *policy_stats;
+    precopy_stats_t *policy_stats;
 
     rc = update_progress_string(ctx, &progress_str);
     if ( rc )
         goto out;
 
-    ctx->save.stats = (struct precopy_stats){
+    ctx->save.stats = (precopy_stats_t){
         .dirty_count = ctx->save.p2m_size,
     };
     policy_stats = &ctx->save.stats;


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148461.274473 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWP-0004vl-7L; Thu, 01 Jul 2021 10:02:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148461.274473; Thu, 01 Jul 2021 10:02:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWP-0004vW-1d; Thu, 01 Jul 2021 10:02:13 +0000
Received: by outflank-mailman (input) for mailman id 148461;
 Thu, 01 Jul 2021 10:02:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRx-0004r4-H0
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:37 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 290751bb-7f5b-49db-83ad-786e01024b54;
 Thu, 01 Jul 2021 09:56:58 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ur5NT
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:53 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 290751bb-7f5b-49db-83ad-786e01024b54
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133413;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=CECljmMn7PUdmmrOXwMW+tlXTDlbFy0SLwiI5WugPX4=;
    b=p+92q4HQUSPoR2cRBMqVwfDE0UMRi9sa92T7loltuZ6QafgAURxR0r+r8QcTf+NOJ/
    vz9CPzssgi19g8KRpxs0qzc6jNV0mY9LmjjCQ1ydnJmZk9gOOC78BpMIhRY4qBf8dBCe
    y0AJKW4+155VlDHfKBBd3I25YfcE2psg1x/B/lg+mUQfSg4Xh6464NoX1JNvSmrOa7/d
    5okyWBC0JN5DtTCc5GJHFqOKzK4alpCbvtfVGIP5nTFJYuIEC7lOad1yf10WrJ5irDLM
    Ln+hxBX7pnvM7XrIWxm4ZjcXBxjTTPfXXnvWLipxM0E9246GfFhsMoGa+EdIbxW/6qiA
    aXHw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 30/40] tools: restore: write data directly into guest
Date: Thu,  1 Jul 2021 11:56:25 +0200
Message-Id: <20210701095635.15648-31-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Read incoming migration stream directly into the guest memory.
This avoids the memory allocation and copying, and the resulting
performance penalty.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/saverestore/common.h  |   1 +
 tools/libs/saverestore/restore.c | 132 ++++++++++++++++++++++++++++++-
 2 files changed, 129 insertions(+), 4 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 96bd0ab80e..3adcf2f83f 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -243,6 +243,7 @@ struct sr_restore_arrays {
     xen_pfn_t mfns[MAX_BATCH_SIZE];
     int map_errs[MAX_BATCH_SIZE];
     void *guest_data[MAX_BATCH_SIZE];
+    struct iovec iov[MAX_BATCH_SIZE];
 
     /* populate_pfns */
     xen_pfn_t pp_mfns[MAX_BATCH_SIZE];
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 7643de58e0..53f05f1b65 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -392,6 +392,122 @@ err:
     return rc;
 }
 
+/*
+ * Handle PAGE_DATA record from the stream.
+ * Given a list of pfns, their types, and a block of page data from the
+ * stream, populate and record their types, map the relevant subset and copy
+ * the data into the guest.
+ */
+static int handle_incoming_page_data(struct xc_sr_context *ctx,
+                                     struct xc_sr_rhdr *rhdr)
+{
+    xc_interface *xch = ctx->xch;
+    struct sr_restore_arrays *m = ctx->restore.m;
+    struct xc_sr_rec_page_data_header *pages = &m->pages;
+    uint64_t *pfn_nums = m->pages.pfn;
+    uint32_t i;
+    int rc, iov_idx;
+
+    rc = handle_static_data_end_v2(ctx);
+    if ( rc )
+        goto err;
+
+    /* First read and verify the header */
+    rc = read_exact(ctx->fd, pages, sizeof(*pages));
+    if ( rc )
+    {
+        PERROR("Could not read rec_pfn header");
+        goto err;
+    }
+
+    if ( verify_rec_page_hdr(ctx, rhdr->length, pages) == false )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Then read and verify the incoming pfn numbers */
+    rc = read_exact(ctx->fd, pfn_nums, sizeof(*pfn_nums) * pages->count);
+    if ( rc )
+    {
+        PERROR("Could not read rec_pfn data");
+        goto err;
+    }
+
+    if ( verify_rec_page_pfns(ctx, rhdr->length, pages) == false )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Finally read and verify the incoming pfn data */
+    rc = map_guest_pages(ctx, pages);
+    if ( rc )
+        goto err;
+
+    /* Prepare read buffers, either guest or throw away memory */
+    for ( i = 0, iov_idx = 0; i < pages->count; i++ )
+    {
+        if ( !m->guest_data[i] )
+            continue;
+
+        m->iov[iov_idx].iov_len = PAGE_SIZE;
+        if ( ctx->restore.verify )
+            m->iov[iov_idx].iov_base = ctx->restore.verify_buf + i * PAGE_SIZE;
+        else
+            m->iov[iov_idx].iov_base = m->guest_data[i];
+        iov_idx++;
+    }
+
+    if ( !iov_idx )
+        goto done;
+
+    rc = readv_exact(ctx->fd, m->iov, iov_idx);
+    if ( rc )
+    {
+        PERROR("read of %d pages failed", iov_idx);
+        goto err;
+    }
+
+    /* Post-processing of pfn data */
+    for ( i = 0, iov_idx = 0; i < pages->count; i++ )
+    {
+        if ( !m->guest_data[i] )
+            continue;
+
+        rc = ctx->restore.ops.localise_page(ctx, m->types[i], m->iov[iov_idx].iov_base);
+        if ( rc )
+        {
+            ERROR("Failed to localise pfn %#"PRIpfn" (type %#"PRIx32")",
+                  m->pfns[i], m->types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+            goto err;
+
+        }
+
+        if ( ctx->restore.verify )
+        {
+            if ( memcmp(m->guest_data[i], m->iov[iov_idx].iov_base, PAGE_SIZE) )
+            {
+                ERROR("verify pfn %#"PRIpfn" failed (type %#"PRIx32")",
+                      m->pfns[i], m->types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+            }
+        }
+
+        iov_idx++;
+    }
+
+done:
+    rc = 0;
+
+err:
+    if ( ctx->restore.guest_mapping )
+    {
+        xenforeignmemory_unmap(xch->fmem, ctx->restore.guest_mapping, ctx->restore.nr_mapped_pages);
+        ctx->restore.guest_mapping = NULL;
+    }
+    return rc;
+}
+
 /*
  * Handle PAGE_DATA record from an existing buffer
  * Given a list of pfns, their types, and a block of page data from the
@@ -773,11 +889,19 @@ static int process_incoming_record_header(struct xc_sr_context *ctx, struct xc_s
     struct xc_sr_record rec;
     int rc;
 
-    rc = read_record_data(ctx, ctx->fd, rhdr, &rec);
-    if ( rc )
-        return rc;
+    switch ( rhdr->type )
+    {
+    case REC_TYPE_PAGE_DATA:
+        rc = handle_incoming_page_data(ctx, rhdr);
+        break;
+    default:
+        rc = read_record_data(ctx, ctx->fd, rhdr, &rec);
+        if ( rc == 0 )
+            rc = process_buffered_record(ctx, &rec);;
+        break;
+    }
 
-    return process_buffered_record(ctx, &rec);
+    return rc;
 }
 
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148463.274479 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWP-00051S-R2; Thu, 01 Jul 2021 10:02:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148463.274479; Thu, 01 Jul 2021 10:02:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWP-0004zr-Dc; Thu, 01 Jul 2021 10:02:13 +0000
Received: by outflank-mailman (input) for mailman id 148463;
 Thu, 01 Jul 2021 10:02:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSW-0004r4-IF
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:12 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.82])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 323d7809-47e8-408f-a235-91f0414dce21;
 Thu, 01 Jul 2021 09:57:03 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619ug5Mm
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:42 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 323d7809-47e8-408f-a235-91f0414dce21
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133402;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=NHXITGMwQK1fkhH9Z9SjS8KzA+TTnDL8//gJ5t70QPA=;
    b=oluRZMKVNr1Zr0vhtJJwgqz8JuGf78CLNRObGsF4RqcuV82oxD1XP1eNN8wAw+CV4M
    dcN1wT3qh1k2ufVHGmHEIx478TqNCH4DJ4f6bng+a8up24s5qVcFd5l6Y1He0c5J3mre
    KFeeHmun3oOJ7LlzpeqigPFAFU3zmIJTKBPglniKNsG+Wkp25kjh8r5zve0GlqYOcjqf
    zC11EWYYjCRHRgzuCBs7Oh2L6QCYoCGHrgN5c3VK9dSaktijG5vsnI1q+FgoAxpyd8ya
    JQ74oXqHoAsYpHM+/Vyl1lg2VJgkh98zybLEqvyKomHyojbKH024tHzCpCLAPxF+Su52
    Ob+Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Wei Liu <wl@xen.org>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Juergen Gross <jgross@suse.com>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: [PATCH v20210701 07/40] tools: create libxensaverestore
Date: Thu,  1 Jul 2021 11:56:02 +0200
Message-Id: <20210701095635.15648-8-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Move all save/restore related code from libxenguest.so into a separate
library libxensaverestore.so. The only consumer is libxl-save-helper.
There is no need to have the moved code mapped all the time in binaries
where libxenguest.so is used.

According to size(1) the change is:
   text	   data	    bss	    dec	    hex	filename
 187183	   4304	     48	 191535	  2ec2f	guest/libxenguest.so.4.15.0

 124106	   3376	     48	 127530	  1f22a	guest/libxenguest.so.4.15.0
  67841	   1872	      8	  69721	  11059	saverestore/libxensaverestore.so.4.15.0

While touching the files anyway, take the opportunity to drop the
redundant xg_sr_ filename prefix.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Wei Liu <wl@xen.org>

v6:
- fix build of nomigrate.c
v5:
- fix spelling in description
v4:
- drop xg_ prefix from filenames (jgross)
- drop sr_ prefix from filenames (jbeulich)
v3:
- repost in time for 4.16
v2:
- copy also license header
- move xg_nomigrate.c
- add size(1) output to commit msg
- remove change from libxl_create.c
---
 .gitignore                                    |   2 +
 tools/include/xenguest.h                      | 186 ----------------
 tools/include/xensaverestore.h                | 208 ++++++++++++++++++
 tools/libs/Makefile                           |   1 +
 tools/libs/guest/Makefile                     |  11 -
 tools/libs/guest/xg_offline_page.c            |   1 -
 tools/libs/light/Makefile                     |   4 +-
 tools/libs/light/libxl_internal.h             |   1 +
 tools/libs/light/libxl_save_helper.c          |   1 +
 tools/libs/light/libxl_save_msgs_gen.pl       |   2 +-
 tools/libs/saverestore/Makefile               |  38 ++++
 .../xg_sr_common.c => saverestore/common.c}   |   2 +-
 .../xg_sr_common.h => saverestore/common.h}   |  16 +-
 .../common_x86.c}                             |   2 +-
 .../common_x86.h}                             |   2 +-
 .../common_x86_pv.c}                          |   2 +-
 .../common_x86_pv.h}                          |   2 +-
 .../nomigrate.c}                              |   2 +-
 .../xg_sr_restore.c => saverestore/restore.c} |   2 +-
 .../restore_x86_hvm.c}                        |   2 +-
 .../restore_x86_pv.c}                         |   2 +-
 .../xg_sr_save.c => saverestore/save.c}       |   2 +-
 .../save_restore.h}                           |   2 -
 .../save_x86_hvm.c}                           |   2 +-
 .../save_x86_pv.c}                            |   2 +-
 .../stream_format.h}                          |   0
 tools/libs/uselibs.mk                         |   4 +-
 27 files changed, 283 insertions(+), 218 deletions(-)
 create mode 100644 tools/include/xensaverestore.h
 create mode 100644 tools/libs/saverestore/Makefile
 rename tools/libs/{guest/xg_sr_common.c => saverestore/common.c} (99%)
 rename tools/libs/{guest/xg_sr_common.h => saverestore/common.h} (98%)
 rename tools/libs/{guest/xg_sr_common_x86.c => saverestore/common_x86.c} (99%)
 rename tools/libs/{guest/xg_sr_common_x86.h => saverestore/common_x86.h} (98%)
 rename tools/libs/{guest/xg_sr_common_x86_pv.c => saverestore/common_x86_pv.c} (99%)
 rename tools/libs/{guest/xg_sr_common_x86_pv.h => saverestore/common_x86_pv.h} (98%)
 rename tools/libs/{guest/xg_nomigrate.c => saverestore/nomigrate.c} (98%)
 rename tools/libs/{guest/xg_sr_restore.c => saverestore/restore.c} (99%)
 rename tools/libs/{guest/xg_sr_restore_x86_hvm.c => saverestore/restore_x86_hvm.c} (99%)
 rename tools/libs/{guest/xg_sr_restore_x86_pv.c => saverestore/restore_x86_pv.c} (99%)
 rename tools/libs/{guest/xg_sr_save.c => saverestore/save.c} (99%)
 rename tools/libs/{guest/xg_save_restore.h => saverestore/save_restore.h} (98%)
 rename tools/libs/{guest/xg_sr_save_x86_hvm.c => saverestore/save_x86_hvm.c} (99%)
 rename tools/libs/{guest/xg_sr_save_x86_pv.c => saverestore/save_x86_pv.c} (99%)
 rename tools/libs/{guest/xg_sr_stream_format.h => saverestore/stream_format.h} (100%)

diff --git a/.gitignore b/.gitignore
index 38a085e398..08a321e995 100644
--- a/.gitignore
+++ b/.gitignore
@@ -147,6 +147,8 @@ tools/libs/light/test_timedereg
 tools/libs/light/test_fdderegrace
 tools/libs/light/tmp.*
 tools/libs/light/xenlight.pc
+tools/libs/saverestore/libxensaverestore.map
+tools/libs/saverestore/xensaverestore.pc
 tools/libs/stat/_paths.h
 tools/libs/stat/headers.chk
 tools/libs/stat/libxenstat.map
diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index 61d0a82f48..7417675b3b 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -24,9 +24,6 @@
 
 #define XC_NUMA_NO_NODE   (~0U)
 
-#define XCFLAGS_LIVE      (1 << 0)
-#define XCFLAGS_DEBUG     (1 << 1)
-
 #define X86_64_B_SIZE   64 
 #define X86_32_B_SIZE   32
 
@@ -433,189 +430,6 @@ static inline xen_pfn_t xc_dom_p2m(struct xc_dom_image *dom, xen_pfn_t pfn)
  */
 struct xenevtchn_handle;
 
-/* For save's precopy_policy(). */
-struct precopy_stats
-{
-    unsigned int iteration;
-    unsigned long total_written;
-    long dirty_count; /* -1 if unknown */
-};
-
-/*
- * A precopy_policy callback may not be running in the same address
- * space as libxc an so precopy_stats is passed by value.
- */
-typedef int (*precopy_policy_t)(struct precopy_stats, void *);
-
-/* callbacks provided by xc_domain_save */
-struct save_callbacks {
-    /*
-     * Called after expiration of checkpoint interval,
-     * to suspend the guest.
-     */
-    int (*suspend)(void *data);
-
-    /*
-     * Called before and after every batch of page data sent during
-     * the precopy phase of a live migration to ask the caller what
-     * to do next based on the current state of the precopy migration.
-     *
-     * Should return one of the values listed below:
-     */
-#define XGS_POLICY_ABORT          (-1) /* Abandon the migration entirely
-                                        * and tidy up. */
-#define XGS_POLICY_CONTINUE_PRECOPY 0  /* Remain in the precopy phase. */
-#define XGS_POLICY_STOP_AND_COPY    1  /* Immediately suspend and transmit the
-                                        * remaining dirty pages. */
-    precopy_policy_t precopy_policy;
-
-    /*
-     * Called after the guest's dirty pages have been
-     *  copied into an output buffer.
-     * Callback function resumes the guest & the device model,
-     *  returns to xc_domain_save.
-     * xc_domain_save then flushes the output buffer, while the
-     *  guest continues to run.
-     */
-    int (*postcopy)(void *data);
-
-    /*
-     * Called after the memory checkpoint has been flushed
-     * out into the network. Typical actions performed in this
-     * callback include:
-     *   (a) send the saved device model state (for HVM guests),
-     *   (b) wait for checkpoint ack
-     *   (c) release the network output buffer pertaining to the acked checkpoint.
-     *   (c) sleep for the checkpoint interval.
-     *
-     * returns:
-     * 0: terminate checkpointing gracefully
-     * 1: take another checkpoint
-     */
-    int (*checkpoint)(void *data);
-
-    /*
-     * Called after the checkpoint callback.
-     *
-     * returns:
-     * 0: terminate checkpointing gracefully
-     * 1: take another checkpoint
-     */
-    int (*wait_checkpoint)(void *data);
-
-    /* Enable qemu-dm logging dirty pages to xen */
-    int (*switch_qemu_logdirty)(uint32_t domid, unsigned enable, void *data); /* HVM only */
-
-    /* to be provided as the last argument to each callback function */
-    void *data;
-};
-
-/* Type of stream.  Plain, or using a continuous replication protocol? */
-typedef enum {
-    XC_STREAM_PLAIN,
-    XC_STREAM_REMUS,
-    XC_STREAM_COLO,
-} xc_stream_type_t;
-
-/**
- * This function will save a running domain.
- *
- * @param xch a handle to an open hypervisor interface
- * @param io_fd the file descriptor to save a domain to
- * @param dom the id of the domain
- * @param flags XCFLAGS_xxx
- * @param stream_type XC_STREAM_PLAIN if the far end of the stream
- *        doesn't use checkpointing
- * @param recv_fd Only used for XC_STREAM_COLO.  Contains backchannel from
- *        the destination side.
- * @return 0 on success, -1 on failure
- */
-int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
-                   uint32_t flags, struct save_callbacks *callbacks,
-                   xc_stream_type_t stream_type, int recv_fd);
-
-/* callbacks provided by xc_domain_restore */
-struct restore_callbacks {
-    /*
-     * Called once the STATIC_DATA_END record has been received/inferred.
-     *
-     * For compatibility with older streams, provides a list of static data
-     * expected to be found in the stream, which was missing.  A higher level
-     * toolstack is responsible for providing any necessary compatibiltiy.
-     */
-#define XGR_SDD_MISSING_CPUID (1 << 0)
-#define XGR_SDD_MISSING_MSR   (1 << 1)
-    int (*static_data_done)(unsigned int missing, void *data);
-
-    /* Called after a new checkpoint to suspend the guest. */
-    int (*suspend)(void *data);
-
-    /*
-     * Called after the secondary vm is ready to resume.
-     * Callback function resumes the guest & the device model,
-     * returns to xc_domain_restore.
-     */
-    int (*postcopy)(void *data);
-
-    /*
-     * A checkpoint record has been found in the stream.
-     * returns:
-     */
-#define XGR_CHECKPOINT_ERROR    0 /* Terminate processing */
-#define XGR_CHECKPOINT_SUCCESS  1 /* Continue reading more data from the stream */
-#define XGR_CHECKPOINT_FAILOVER 2 /* Failover and resume VM */
-    int (*checkpoint)(void *data);
-
-    /*
-     * Called after the checkpoint callback.
-     *
-     * returns:
-     * 0: terminate checkpointing gracefully
-     * 1: take another checkpoint
-     */
-    int (*wait_checkpoint)(void *data);
-
-    /*
-     * callback to send store gfn and console gfn to xl
-     * if we want to resume vm before xc_domain_save()
-     * exits.
-     */
-    void (*restore_results)(xen_pfn_t store_gfn, xen_pfn_t console_gfn,
-                            void *data);
-
-    /* to be provided as the last argument to each callback function */
-    void *data;
-};
-
-/**
- * This function will restore a saved domain.
- *
- * Domain is restored in a suspended state ready to be unpaused.
- *
- * @param xch a handle to an open hypervisor interface
- * @param io_fd the file descriptor to restore a domain from
- * @param dom the id of the domain
- * @param store_evtchn the xenstore event channel for this domain to use
- * @param store_mfn filled with the gfn of the store page
- * @param store_domid the backend domain for xenstore
- * @param console_evtchn the console event channel for this domain to use
- * @param console_mfn filled with the gfn of the console page
- * @param console_domid the backend domain for xenconsole
- * @param stream_type XC_STREAM_PLAIN if the far end of the stream is using
- *        checkpointing
- * @param callbacks non-NULL to receive a callback to restore toolstack
- *        specific data
- * @param send_back_fd Only used for XC_STREAM_COLO.  Contains backchannel to
- *        the source side.
- * @return 0 on success, -1 on failure
- */
-int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
-                      unsigned int store_evtchn, unsigned long *store_mfn,
-                      uint32_t store_domid, unsigned int console_evtchn,
-                      unsigned long *console_mfn, uint32_t console_domid,
-                      xc_stream_type_t stream_type,
-                      struct restore_callbacks *callbacks, int send_back_fd);
-
 /**
  * This function will create a domain for a paravirtualized Linux
  * using file names pointing to kernel and ramdisk
diff --git a/tools/include/xensaverestore.h b/tools/include/xensaverestore.h
new file mode 100644
index 0000000000..0410f0469e
--- /dev/null
+++ b/tools/include/xensaverestore.h
@@ -0,0 +1,208 @@
+/******************************************************************************
+ * A library for guest domain save/restore/migration in Xen.
+ *
+ * Copyright (c) 2003-2004, K A Fraser.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef XENSAVERESTORE_H
+#define XENSAVERESTORE_H
+
+#define XCFLAGS_LIVE      (1 << 0)
+#define XCFLAGS_DEBUG     (1 << 1)
+
+/* For save's precopy_policy(). */
+struct precopy_stats
+{
+    unsigned int iteration;
+    unsigned long total_written;
+    long dirty_count; /* -1 if unknown */
+};
+
+/*
+ * A precopy_policy callback may not be running in the same address
+ * space as libxc an so precopy_stats is passed by value.
+ */
+typedef int (*precopy_policy_t)(struct precopy_stats, void *);
+
+/* callbacks provided by xc_domain_save */
+struct save_callbacks {
+    /*
+     * Called after expiration of checkpoint interval,
+     * to suspend the guest.
+     */
+    int (*suspend)(void *data);
+
+    /*
+     * Called before and after every batch of page data sent during
+     * the precopy phase of a live migration to ask the caller what
+     * to do next based on the current state of the precopy migration.
+     *
+     * Should return one of the values listed below:
+     */
+#define XGS_POLICY_ABORT          (-1) /* Abandon the migration entirely
+                                        * and tidy up. */
+#define XGS_POLICY_CONTINUE_PRECOPY 0  /* Remain in the precopy phase. */
+#define XGS_POLICY_STOP_AND_COPY    1  /* Immediately suspend and transmit the
+                                        * remaining dirty pages. */
+    precopy_policy_t precopy_policy;
+
+    /*
+     * Called after the guest's dirty pages have been
+     *  copied into an output buffer.
+     * Callback function resumes the guest & the device model,
+     *  returns to xc_domain_save.
+     * xc_domain_save then flushes the output buffer, while the
+     *  guest continues to run.
+     */
+    int (*postcopy)(void *data);
+
+    /*
+     * Called after the memory checkpoint has been flushed
+     * out into the network. Typical actions performed in this
+     * callback include:
+     *   (a) send the saved device model state (for HVM guests),
+     *   (b) wait for checkpoint ack
+     *   (c) release the network output buffer pertaining to the acked checkpoint.
+     *   (c) sleep for the checkpoint interval.
+     *
+     * returns:
+     * 0: terminate checkpointing gracefully
+     * 1: take another checkpoint
+     */
+    int (*checkpoint)(void *data);
+
+    /*
+     * Called after the checkpoint callback.
+     *
+     * returns:
+     * 0: terminate checkpointing gracefully
+     * 1: take another checkpoint
+     */
+    int (*wait_checkpoint)(void *data);
+
+    /* Enable qemu-dm logging dirty pages to xen */
+    int (*switch_qemu_logdirty)(uint32_t domid, unsigned enable, void *data); /* HVM only */
+
+    /* to be provided as the last argument to each callback function */
+    void *data;
+};
+
+/* Type of stream.  Plain, or using a continuous replication protocol? */
+typedef enum {
+    XC_STREAM_PLAIN,
+    XC_STREAM_REMUS,
+    XC_STREAM_COLO,
+} xc_stream_type_t;
+
+/**
+ * This function will save a running domain.
+ *
+ * @param xch a handle to an open hypervisor interface
+ * @param io_fd the file descriptor to save a domain to
+ * @param dom the id of the domain
+ * @param flags XCFLAGS_xxx
+ * @param stream_type XC_STREAM_PLAIN if the far end of the stream
+ *        doesn't use checkpointing
+ * @param recv_fd Only used for XC_STREAM_COLO.  Contains backchannel from
+ *        the destination side.
+ * @return 0 on success, -1 on failure
+ */
+int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
+                   uint32_t flags, struct save_callbacks *callbacks,
+                   xc_stream_type_t stream_type, int recv_fd);
+
+/* callbacks provided by xc_domain_restore */
+struct restore_callbacks {
+    /*
+     * Called once the STATIC_DATA_END record has been received/inferred.
+     *
+     * For compatibility with older streams, provides a list of static data
+     * expected to be found in the stream, which was missing.  A higher level
+     * toolstack is responsible for providing any necessary compatibiltiy.
+     */
+#define XGR_SDD_MISSING_CPUID (1 << 0)
+#define XGR_SDD_MISSING_MSR   (1 << 1)
+    int (*static_data_done)(unsigned int missing, void *data);
+
+    /* Called after a new checkpoint to suspend the guest. */
+    int (*suspend)(void *data);
+
+    /*
+     * Called after the secondary vm is ready to resume.
+     * Callback function resumes the guest & the device model,
+     * returns to xc_domain_restore.
+     */
+    int (*postcopy)(void *data);
+
+    /*
+     * A checkpoint record has been found in the stream.
+     * returns:
+     */
+#define XGR_CHECKPOINT_ERROR    0 /* Terminate processing */
+#define XGR_CHECKPOINT_SUCCESS  1 /* Continue reading more data from the stream */
+#define XGR_CHECKPOINT_FAILOVER 2 /* Failover and resume VM */
+    int (*checkpoint)(void *data);
+
+    /*
+     * Called after the checkpoint callback.
+     *
+     * returns:
+     * 0: terminate checkpointing gracefully
+     * 1: take another checkpoint
+     */
+    int (*wait_checkpoint)(void *data);
+
+    /*
+     * callback to send store gfn and console gfn to xl
+     * if we want to resume vm before xc_domain_save()
+     * exits.
+     */
+    void (*restore_results)(xen_pfn_t store_gfn, xen_pfn_t console_gfn,
+                            void *data);
+
+    /* to be provided as the last argument to each callback function */
+    void *data;
+};
+
+/**
+ * This function will restore a saved domain.
+ *
+ * Domain is restored in a suspended state ready to be unpaused.
+ *
+ * @param xch a handle to an open hypervisor interface
+ * @param io_fd the file descriptor to restore a domain from
+ * @param dom the id of the domain
+ * @param store_evtchn the xenstore event channel for this domain to use
+ * @param store_mfn filled with the gfn of the store page
+ * @param store_domid the backend domain for xenstore
+ * @param console_evtchn the console event channel for this domain to use
+ * @param console_mfn filled with the gfn of the console page
+ * @param console_domid the backend domain for xenconsole
+ * @param stream_type XC_STREAM_PLAIN if the far end of the stream is using
+ *        checkpointing
+ * @param callbacks non-NULL to receive a callback to restore toolstack
+ *        specific data
+ * @param send_back_fd Only used for XC_STREAM_COLO.  Contains backchannel to
+ *        the source side.
+ * @return 0 on success, -1 on failure
+ */
+int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
+                      unsigned int store_evtchn, unsigned long *store_mfn,
+                      uint32_t store_domid, unsigned int console_evtchn,
+                      unsigned long *console_mfn, uint32_t console_domid,
+                      xc_stream_type_t stream_type,
+                      struct restore_callbacks *callbacks, int send_back_fd);
+
+#endif /* XENSAVERESTORE_H */
diff --git a/tools/libs/Makefile b/tools/libs/Makefile
index 1afcd12e2b..ca43c66777 100644
--- a/tools/libs/Makefile
+++ b/tools/libs/Makefile
@@ -12,6 +12,7 @@ SUBDIRS-y += devicemodel
 SUBDIRS-y += ctrl
 SUBDIRS-y += guest
 SUBDIRS-y += hypfs
+SUBDIRS-y += saverestore
 SUBDIRS-y += store
 SUBDIRS-y += stat
 SUBDIRS-$(CONFIG_Linux) += vchan
diff --git a/tools/libs/guest/Makefile b/tools/libs/guest/Makefile
index 2ce92d247e..4cf5459bb1 100644
--- a/tools/libs/guest/Makefile
+++ b/tools/libs/guest/Makefile
@@ -11,18 +11,7 @@ SRCS-y += xg_domain.c
 SRCS-y += xg_suspend.c
 SRCS-y += xg_resume.c
 ifeq ($(CONFIG_MIGRATE),y)
-SRCS-y += xg_sr_common.c
-SRCS-$(CONFIG_X86) += xg_sr_common_x86.c
-SRCS-$(CONFIG_X86) += xg_sr_common_x86_pv.c
-SRCS-$(CONFIG_X86) += xg_sr_restore_x86_pv.c
-SRCS-$(CONFIG_X86) += xg_sr_restore_x86_hvm.c
-SRCS-$(CONFIG_X86) += xg_sr_save_x86_pv.c
-SRCS-$(CONFIG_X86) += xg_sr_save_x86_hvm.c
-SRCS-y += xg_sr_restore.c
-SRCS-y += xg_sr_save.c
 SRCS-y += xg_offline_page.c
-else
-SRCS-y += xg_nomigrate.c
 endif
 SRCS-y       += xg_core.c
 SRCS-$(CONFIG_X86) += xg_core_x86.c
diff --git a/tools/libs/guest/xg_offline_page.c b/tools/libs/guest/xg_offline_page.c
index cfe0e2d537..92b65243b1 100644
--- a/tools/libs/guest/xg_offline_page.c
+++ b/tools/libs/guest/xg_offline_page.c
@@ -29,7 +29,6 @@
 
 #include "xc_private.h"
 #include "xg_private.h"
-#include "xg_save_restore.h"
 
 struct pte_backup_entry
 {
diff --git a/tools/libs/light/Makefile b/tools/libs/light/Makefile
index 7d8c51d492..68e51dd13c 100644
--- a/tools/libs/light/Makefile
+++ b/tools/libs/light/Makefile
@@ -179,7 +179,7 @@ $(ACPI_OBJS) $(ACPI_PIC_OBJS): CFLAGS += -I. -DLIBACPI_STDUTILS=\"$(CURDIR)/libx
 $(TEST_PROG_OBJS) _libxl.api-for-check: CFLAGS += $(CFLAGS_libxentoollog) $(CFLAGS_libxentoolcore)
 libxl_dom.o libxl_dom.opic: CFLAGS += -I$(XEN_ROOT)/tools  # include libacpi/x86.h
 libxl_x86_acpi.o libxl_x86_acpi.opic: CFLAGS += -I$(XEN_ROOT)/tools
-$(SAVE_HELPER_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenevtchn) $(CFLAGS_libxenguest)
+$(SAVE_HELPER_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenevtchn) $(CFLAGS_libxensaverestore)
 
 testidl.o: CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenlight)
 testidl.c: libxl_types.idl gentest.py $(XEN_INCLUDE)/libxl.h $(AUTOINCS)
@@ -241,7 +241,7 @@ test_%: test_%.o test_common.o libxenlight_test.so
 	$(CC) $(LDFLAGS) -o $@ $^ $(filter-out %libxenlight.so, $(LDLIBS_libxenlight)) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) -lyajl $(APPEND_LDFLAGS)
 
 libxl-save-helper: $(SAVE_HELPER_OBJS) libxenlight.so
-	$(CC) $(LDFLAGS) -o $@ $(SAVE_HELPER_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
+	$(CC) $(LDFLAGS) -o $@ $(SAVE_HELPER_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxenctrl) $(LDLIBS_libxensaverestore) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
 
 testidl: testidl.o libxenlight.so
 	$(CC) $(LDFLAGS) -o $@ testidl.o $(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index 0b4671318c..439c654733 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -56,6 +56,7 @@
 #define XC_WANT_COMPAT_MAP_FOREIGN_API
 #include <xenctrl.h>
 #include <xenguest.h>
+#include <xensaverestore.h>
 #include <xenhypfs.h>
 
 #include <xen-tools/libs.h>
diff --git a/tools/libs/light/libxl_save_helper.c b/tools/libs/light/libxl_save_helper.c
index 65dff389bf..896e845a2f 100644
--- a/tools/libs/light/libxl_save_helper.c
+++ b/tools/libs/light/libxl_save_helper.c
@@ -48,6 +48,7 @@
 
 #include "xenctrl.h"
 #include "xenguest.h"
+#include "xensaverestore.h"
 #include "_libxl_save_msgs_helper.h"
 
 /*----- logger -----*/
diff --git a/tools/libs/light/libxl_save_msgs_gen.pl b/tools/libs/light/libxl_save_msgs_gen.pl
index 9d425b1dee..f263ee01bb 100755
--- a/tools/libs/light/libxl_save_msgs_gen.pl
+++ b/tools/libs/light/libxl_save_msgs_gen.pl
@@ -72,7 +72,7 @@ END_BOTH
 END_CALLOUT
 
 #include <xenctrl.h>
-#include <xenguest.h>
+#include <xensaverestore.h>
 #include "_libxl_save_msgs_${ah}.h"
 
 END_HELPER
diff --git a/tools/libs/saverestore/Makefile b/tools/libs/saverestore/Makefile
new file mode 100644
index 0000000000..48728b3be2
--- /dev/null
+++ b/tools/libs/saverestore/Makefile
@@ -0,0 +1,38 @@
+XEN_ROOT = $(CURDIR)/../../..
+include $(XEN_ROOT)/tools/Rules.mk
+
+ifeq ($(CONFIG_MIGRATE),y)
+SRCS-y += common.c
+SRCS-$(CONFIG_X86) += common_x86.c
+SRCS-$(CONFIG_X86) += common_x86_pv.c
+SRCS-$(CONFIG_X86) += restore_x86_pv.c
+SRCS-$(CONFIG_X86) += restore_x86_hvm.c
+SRCS-$(CONFIG_X86) += save_x86_pv.c
+SRCS-$(CONFIG_X86) += save_x86_hvm.c
+SRCS-y += restore.c
+SRCS-y += save.c
+else
+SRCS-y += nomigrate.c
+endif
+
+CFLAGS += -I$(XEN_libxenctrl)
+CFLAGS += -I$(XEN_libxenguest)
+
+-include $(XEN_TARGET_ARCH)/Makefile
+
+CFLAGS   += -Werror -Wmissing-prototypes
+CFLAGS   += -I. -I./include $(CFLAGS_xeninclude)
+CFLAGS   += -D__XEN_TOOLS__
+CFLAGS   += -include $(XEN_ROOT)/tools/config.h
+# Needed for asprintf()
+CFLAGS-$(CONFIG_Linux) += -D_GNU_SOURCE
+
+LIBHEADER := xensaverestore.h
+
+NO_HEADERS_CHK := y
+
+include $(XEN_ROOT)/tools/libs/libs.mk
+
+.PHONY: cleanlocal
+cleanlocal:
+	rm -f libxensaverestore.map
diff --git a/tools/libs/guest/xg_sr_common.c b/tools/libs/saverestore/common.c
similarity index 99%
rename from tools/libs/guest/xg_sr_common.c
rename to tools/libs/saverestore/common.c
index 17567ab133..77128bc747 100644
--- a/tools/libs/guest/xg_sr_common.c
+++ b/tools/libs/saverestore/common.c
@@ -1,6 +1,6 @@
 #include <assert.h>
 
-#include "xg_sr_common.h"
+#include "common.h"
 
 #include <xen-tools/libs.h>
 
diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/saverestore/common.h
similarity index 98%
rename from tools/libs/guest/xg_sr_common.h
rename to tools/libs/saverestore/common.h
index e2994e18ac..ca2eb47a4f 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/saverestore/common.h
@@ -1,13 +1,25 @@
 #ifndef __COMMON__H
 #define __COMMON__H
 
+#include <unistd.h>
+#include <errno.h>
 #include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "xc_private.h"
+#include "xenguest.h"
+#include "xensaverestore.h"
 
 #include "xg_private.h"
-#include "xg_save_restore.h"
+#include "save_restore.h"
 #include "xc_bitops.h"
 
-#include "xg_sr_stream_format.h"
+#include "stream_format.h"
 
 /* String representation of Domain Header types. */
 const char *dhdr_type_to_str(uint32_t type);
diff --git a/tools/libs/guest/xg_sr_common_x86.c b/tools/libs/saverestore/common_x86.c
similarity index 99%
rename from tools/libs/guest/xg_sr_common_x86.c
rename to tools/libs/saverestore/common_x86.c
index 563b4f0168..f1beb234ae 100644
--- a/tools/libs/guest/xg_sr_common_x86.c
+++ b/tools/libs/saverestore/common_x86.c
@@ -1,4 +1,4 @@
-#include "xg_sr_common_x86.h"
+#include "common_x86.h"
 
 int write_x86_tsc_info(struct xc_sr_context *ctx)
 {
diff --git a/tools/libs/guest/xg_sr_common_x86.h b/tools/libs/saverestore/common_x86.h
similarity index 98%
rename from tools/libs/guest/xg_sr_common_x86.h
rename to tools/libs/saverestore/common_x86.h
index b55758c96d..3a2d91dcb8 100644
--- a/tools/libs/guest/xg_sr_common_x86.h
+++ b/tools/libs/saverestore/common_x86.h
@@ -1,7 +1,7 @@
 #ifndef __COMMON_X86__H
 #define __COMMON_X86__H
 
-#include "xg_sr_common.h"
+#include "common.h"
 
 /*
  * Obtains a domains TSC information from Xen and writes a X86_TSC_INFO record
diff --git a/tools/libs/guest/xg_sr_common_x86_pv.c b/tools/libs/saverestore/common_x86_pv.c
similarity index 99%
rename from tools/libs/guest/xg_sr_common_x86_pv.c
rename to tools/libs/saverestore/common_x86_pv.c
index c0acf00f90..cfe1b24bed 100644
--- a/tools/libs/guest/xg_sr_common_x86_pv.c
+++ b/tools/libs/saverestore/common_x86_pv.c
@@ -1,6 +1,6 @@
 #include <assert.h>
 
-#include "xg_sr_common_x86_pv.h"
+#include "common_x86_pv.h"
 
 xen_pfn_t mfn_to_pfn(struct xc_sr_context *ctx, xen_pfn_t mfn)
 {
diff --git a/tools/libs/guest/xg_sr_common_x86_pv.h b/tools/libs/saverestore/common_x86_pv.h
similarity index 98%
rename from tools/libs/guest/xg_sr_common_x86_pv.h
rename to tools/libs/saverestore/common_x86_pv.h
index 953b5bfb8d..a9f8c970e3 100644
--- a/tools/libs/guest/xg_sr_common_x86_pv.h
+++ b/tools/libs/saverestore/common_x86_pv.h
@@ -1,7 +1,7 @@
 #ifndef __COMMON_X86_PV_H
 #define __COMMON_X86_PV_H
 
-#include "xg_sr_common_x86.h"
+#include "common_x86.h"
 
 /* Virtual address ranges reserved for hypervisor. */
 #define HYPERVISOR_VIRT_START_X86_64 0xFFFF800000000000ULL
diff --git a/tools/libs/guest/xg_nomigrate.c b/tools/libs/saverestore/nomigrate.c
similarity index 98%
rename from tools/libs/guest/xg_nomigrate.c
rename to tools/libs/saverestore/nomigrate.c
index 6795c62ddc..67e58d353a 100644
--- a/tools/libs/guest/xg_nomigrate.c
+++ b/tools/libs/saverestore/nomigrate.c
@@ -18,7 +18,7 @@
 #include <inttypes.h>
 #include <errno.h>
 #include <xenctrl.h>
-#include <xenguest.h>
+#include <xensaverestore.h>
 
 int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom, uint32_t flags,
                    struct save_callbacks *callbacks,
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/saverestore/restore.c
similarity index 99%
rename from tools/libs/guest/xg_sr_restore.c
rename to tools/libs/saverestore/restore.c
index b57a787519..be259a1c6b 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -2,7 +2,7 @@
 
 #include <assert.h>
 
-#include "xg_sr_common.h"
+#include "common.h"
 
 /*
  * Read and validate the Image and Domain headers.
diff --git a/tools/libs/guest/xg_sr_restore_x86_hvm.c b/tools/libs/saverestore/restore_x86_hvm.c
similarity index 99%
rename from tools/libs/guest/xg_sr_restore_x86_hvm.c
rename to tools/libs/saverestore/restore_x86_hvm.c
index d6ea6f3012..bd63bd2818 100644
--- a/tools/libs/guest/xg_sr_restore_x86_hvm.c
+++ b/tools/libs/saverestore/restore_x86_hvm.c
@@ -1,7 +1,7 @@
 #include <assert.h>
 #include <arpa/inet.h>
 
-#include "xg_sr_common_x86.h"
+#include "common_x86.h"
 
 /*
  * Process an HVM_CONTEXT record from the stream.
diff --git a/tools/libs/guest/xg_sr_restore_x86_pv.c b/tools/libs/saverestore/restore_x86_pv.c
similarity index 99%
rename from tools/libs/guest/xg_sr_restore_x86_pv.c
rename to tools/libs/saverestore/restore_x86_pv.c
index dc50b0f5a8..96608e5231 100644
--- a/tools/libs/guest/xg_sr_restore_x86_pv.c
+++ b/tools/libs/saverestore/restore_x86_pv.c
@@ -1,6 +1,6 @@
 #include <assert.h>
 
-#include "xg_sr_common_x86_pv.h"
+#include "common_x86_pv.h"
 
 static xen_pfn_t pfn_to_mfn(const struct xc_sr_context *ctx, xen_pfn_t pfn)
 {
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/saverestore/save.c
similarity index 99%
rename from tools/libs/guest/xg_sr_save.c
rename to tools/libs/saverestore/save.c
index 2ba7c3200c..ae3e8797d0 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/saverestore/save.c
@@ -1,7 +1,7 @@
 #include <assert.h>
 #include <arpa/inet.h>
 
-#include "xg_sr_common.h"
+#include "common.h"
 
 /*
  * Writes an Image header and Domain header into the stream.
diff --git a/tools/libs/guest/xg_save_restore.h b/tools/libs/saverestore/save_restore.h
similarity index 98%
rename from tools/libs/guest/xg_save_restore.h
rename to tools/libs/saverestore/save_restore.h
index 3dbbc8dcd2..20bd3d30a5 100644
--- a/tools/libs/guest/xg_save_restore.h
+++ b/tools/libs/saverestore/save_restore.h
@@ -15,8 +15,6 @@
  * License along with this library; If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "xc_private.h"
-
 #include <xen/foreign/x86_32.h>
 #include <xen/foreign/x86_64.h>
 
diff --git a/tools/libs/guest/xg_sr_save_x86_hvm.c b/tools/libs/saverestore/save_x86_hvm.c
similarity index 99%
rename from tools/libs/guest/xg_sr_save_x86_hvm.c
rename to tools/libs/saverestore/save_x86_hvm.c
index 1634a7bc43..91c2cb99ab 100644
--- a/tools/libs/guest/xg_sr_save_x86_hvm.c
+++ b/tools/libs/saverestore/save_x86_hvm.c
@@ -1,6 +1,6 @@
 #include <assert.h>
 
-#include "xg_sr_common_x86.h"
+#include "common_x86.h"
 
 #include <xen/hvm/params.h>
 
diff --git a/tools/libs/guest/xg_sr_save_x86_pv.c b/tools/libs/saverestore/save_x86_pv.c
similarity index 99%
rename from tools/libs/guest/xg_sr_save_x86_pv.c
rename to tools/libs/saverestore/save_x86_pv.c
index 4964f1f7b8..92f77fad0f 100644
--- a/tools/libs/guest/xg_sr_save_x86_pv.c
+++ b/tools/libs/saverestore/save_x86_pv.c
@@ -1,7 +1,7 @@
 #include <assert.h>
 #include <limits.h>
 
-#include "xg_sr_common_x86_pv.h"
+#include "common_x86_pv.h"
 
 /* Check a 64 bit virtual address for being canonical. */
 static inline bool is_canonical_address(xen_vaddr_t vaddr)
diff --git a/tools/libs/guest/xg_sr_stream_format.h b/tools/libs/saverestore/stream_format.h
similarity index 100%
rename from tools/libs/guest/xg_sr_stream_format.h
rename to tools/libs/saverestore/stream_format.h
diff --git a/tools/libs/uselibs.mk b/tools/libs/uselibs.mk
index efd7a475ba..62a2990b95 100644
--- a/tools/libs/uselibs.mk
+++ b/tools/libs/uselibs.mk
@@ -20,6 +20,8 @@ LIBS_LIBS += ctrl
 USELIBS_ctrl := toollog call evtchn gnttab foreignmemory devicemodel
 LIBS_LIBS += guest
 USELIBS_guest := evtchn ctrl
+LIBS_LIBS += saverestore
+USELIBS_saverestore := guest ctrl
 LIBS_LIBS += store
 USELIBS_store := toolcore
 LIBS_LIBS += vchan
@@ -27,7 +29,7 @@ USELIBS_vchan := toollog store gnttab evtchn
 LIBS_LIBS += stat
 USELIBS_stat := ctrl store
 LIBS_LIBS += light
-USELIBS_light := toollog evtchn toolcore ctrl store hypfs guest
+USELIBS_light := toollog evtchn toolcore ctrl store hypfs guest saverestore
 LIBS_LIBS += util
 USELIBS_util := light
 FILENAME_util := xlutil


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148469.274496 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWU-0005wF-R4; Thu, 01 Jul 2021 10:02:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148469.274496; Thu, 01 Jul 2021 10:02:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWU-0005vl-Jx; Thu, 01 Jul 2021 10:02:18 +0000
Received: by outflank-mailman (input) for mailman id 148469;
 Thu, 01 Jul 2021 10:02:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytRv-0004XT-Sy
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:35 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.82])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a76f642b-8ab8-4845-afd7-b6e202d99543;
 Thu, 01 Jul 2021 09:56:52 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uk5N3
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:46 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a76f642b-8ab8-4845-afd7-b6e202d99543
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133406;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=KnwsPxLRJB68rPXEArkMW6OSaI/spxXLS3HmgXIKcHw=;
    b=F9jVJ1N144s3xumrT8kJVbYSY9MfWREIAi4QGQ0tQpX+AHdjKtnEIBCUSYTo8GG9jL
    RJBHhn5HrnUp5abb3C6hYg4cv2g9tPC6W9JJjWlxGAayaRpmA0+UOC5OvsuTVgjoE+Qg
    3UqSMgQq5+gXYGmDjTPoRAf46TSFqrMYWtivGdddA4StQEO5e1HUqD5nSzVE2EvZ79Mx
    MsiulUUErQpT+YKwx/1BCRmrl9FynwGYNWkxSard0VRpDefefTQMy7e7mNSwOKIJYs70
    qQsuXmTYeeN8b0om/Z9fgO7CFd+QHOVUBo47dj4q7AfhkP+Juw8Ci7u5+yiAZpeNjj82
    aUuA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 16/40] tools: save: move mfns array
Date: Thu,  1 Jul 2021 11:56:11 +0200
Message-Id: <20210701095635.15648-17-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move mfns array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h | 2 ++
 tools/libs/saverestore/save.c   | 7 ++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 968bb8af13..1415a182d2 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -225,6 +225,8 @@ static inline int update_blob(struct xc_sr_blob *blob,
 
 struct sr_save_arrays {
     xen_pfn_t batch_pfns[MAX_BATCH_SIZE];
+    /* write_batch: Mfns of the batch pfns. */
+    xen_pfn_t mfns[MAX_BATCH_SIZE];
 };
 
 struct sr_restore_arrays {
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index e29b6e1d66..6b09784be8 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -88,7 +88,7 @@ static int write_checkpoint_record(struct xc_sr_context *ctx)
 static int write_batch(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = NULL, *types = NULL;
+    xen_pfn_t *mfns = ctx->save.m->mfns, *types = NULL;
     void *guest_mapping = NULL;
     void **guest_data = NULL;
     void **local_pages = NULL;
@@ -105,8 +105,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Mfns of the batch pfns. */
-    mfns = malloc(nr_pfns * sizeof(*mfns));
     /* Types of the batch pfns. */
     types = malloc(nr_pfns * sizeof(*types));
     /* Errors from attempting to map the gfns. */
@@ -118,7 +116,7 @@ static int write_batch(struct xc_sr_context *ctx)
     /* iovec[] for writev(). */
     iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !mfns || !types || !errors || !guest_data || !local_pages || !iov )
+    if ( !types || !errors || !guest_data || !local_pages || !iov )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -277,7 +275,6 @@ static int write_batch(struct xc_sr_context *ctx)
     free(guest_data);
     free(errors);
     free(types);
-    free(mfns);
 
     return rc;
 }


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148470.274500 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWV-00060W-Af; Thu, 01 Jul 2021 10:02:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148470.274500; Thu, 01 Jul 2021 10:02:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWV-0005zS-3L; Thu, 01 Jul 2021 10:02:19 +0000
Received: by outflank-mailman (input) for mailman id 148470;
 Thu, 01 Jul 2021 10:02:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSt-0004XT-Ur
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:35 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.104])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 54087ce2-f123-4ec4-8ca2-5a6be09f5c48;
 Thu, 01 Jul 2021 09:56:59 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uq5NO
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:52 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 54087ce2-f123-4ec4-8ca2-5a6be09f5c48
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133412;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=VqP0dtxOpIShGdDn4ROCdSzLaQrNr0I+/+0oMjV5WeY=;
    b=UFGSIIpkg+JgbdLPDmn3OdvsTFfseQqaPhGrvOXbhe/uB5U7dX2bRe6fm82aOAzv6C
    X0d6/imN+D3oOuuKMXBdKeWkEpIcXH2zsRr0iuK/+RPwVorJRHLCQn/NCfNfwFkmKjIq
    m//sv8oBnG17YgVmeqv0zoWAipjIk3umKhJF/9feD4DNSmS1UC4n96jFN5hTrC7B7cZj
    ygPYoz9+fmXWicc9OmC4Bx/uM3xqKXgKPg3C8/5+QFto54nGXpoVs9pA1URADAM2sk9A
    IbOlPFO0CkBI1lNXrttEXpVjcbBVapWpol4rMcBUOUQwyKpjDxfS1+bq55V9iDPo1DCM
    M/fQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 28/40] tools: restore: split record processing
Date: Thu,  1 Jul 2021 11:56:23 +0200
Message-Id: <20210701095635.15648-29-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

handle_page_data must be able to read directly into mapped guest memory.
This will avoid unneccesary memcpy calls for data which can be consumed verbatim.

Rearrange the code to allow decisions based on the incoming record.

This change is preparation for future changes in handle_page_data,
no change in behavior is intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.c  | 33 ++++++++++++---------
 tools/libs/saverestore/common.h  |  4 ++-
 tools/libs/saverestore/restore.c | 49 ++++++++++++++++++++++----------
 tools/libs/saverestore/save.c    |  7 ++++-
 4 files changed, 63 insertions(+), 30 deletions(-)

diff --git a/tools/libs/saverestore/common.c b/tools/libs/saverestore/common.c
index 77128bc747..7da7fa4e2c 100644
--- a/tools/libs/saverestore/common.c
+++ b/tools/libs/saverestore/common.c
@@ -91,26 +91,33 @@ int write_split_record(struct xc_sr_context *ctx, struct xc_sr_record *rec,
     return -1;
 }
 
-int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec)
+int read_record_header(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr)
 {
     xc_interface *xch = ctx->xch;
-    struct xc_sr_rhdr rhdr;
-    size_t datasz;
 
-    if ( read_exact(fd, &rhdr, sizeof(rhdr)) )
+    if ( read_exact(fd, rhdr, sizeof(*rhdr)) )
     {
         PERROR("Failed to read Record Header from stream");
         return -1;
     }
 
-    if ( rhdr.length > REC_LENGTH_MAX )
+    if ( rhdr->length > REC_LENGTH_MAX )
     {
-        ERROR("Record (0x%08x, %s) length %#x exceeds max (%#x)", rhdr.type,
-              rec_type_to_str(rhdr.type), rhdr.length, REC_LENGTH_MAX);
+        ERROR("Record (0x%08x, %s) length %#x exceeds max (%#x)", rhdr->type,
+              rec_type_to_str(rhdr->type), rhdr->length, REC_LENGTH_MAX);
         return -1;
     }
 
-    datasz = ROUNDUP(rhdr.length, REC_ALIGN_ORDER);
+    return 0;
+}
+
+int read_record_data(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr,
+                     struct xc_sr_record *rec)
+{
+    xc_interface *xch = ctx->xch;
+    size_t datasz;
+
+    datasz = ROUNDUP(rhdr->length, REC_ALIGN_ORDER);
 
     if ( datasz )
     {
@@ -119,7 +126,7 @@ int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec)
         if ( !rec->data )
         {
             ERROR("Unable to allocate %zu bytes for record data (0x%08x, %s)",
-                  datasz, rhdr.type, rec_type_to_str(rhdr.type));
+                  datasz, rhdr->type, rec_type_to_str(rhdr->type));
             return -1;
         }
 
@@ -128,18 +135,18 @@ int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec)
             free(rec->data);
             rec->data = NULL;
             PERROR("Failed to read %zu bytes of data for record (0x%08x, %s)",
-                   datasz, rhdr.type, rec_type_to_str(rhdr.type));
+                   datasz, rhdr->type, rec_type_to_str(rhdr->type));
             return -1;
         }
     }
     else
         rec->data = NULL;
 
-    rec->type   = rhdr.type;
-    rec->length = rhdr.length;
+    rec->type   = rhdr->type;
+    rec->length = rhdr->length;
 
     return 0;
-};
+}
 
 static void __attribute__((unused)) build_assertions(void)
 {
diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index c319148f8f..580eafacc8 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -487,7 +487,9 @@ static inline int write_record(struct xc_sr_context *ctx,
  *
  * On failure, the contents of the record structure are undefined.
  */
-int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec);
+int read_record_header(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr);
+int read_record_data(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr,
+                     struct xc_sr_record *rec);
 
 /*
  * This would ideally be private in restore.c, but is needed by
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 2a6ccce847..e75380155d 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -471,7 +471,7 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
     return rc;
 }
 
-static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec);
+static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_record *rec);
 static int handle_checkpoint(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
@@ -510,7 +510,7 @@ static int handle_checkpoint(struct xc_sr_context *ctx)
 
         for ( i = 0; i < ctx->restore.buffered_rec_num; i++ )
         {
-            rc = process_record(ctx, &ctx->restore.buffered_records[i]);
+            rc = process_buffered_record(ctx, &ctx->restore.buffered_records[i]);
             if ( rc )
                 goto err;
         }
@@ -571,10 +571,11 @@ static int handle_checkpoint(struct xc_sr_context *ctx)
     return rc;
 }
 
-static int buffer_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
+static int buffer_record(struct xc_sr_context *ctx, struct xc_sr_rhdr *rhdr)
 {
     xc_interface *xch = ctx->xch;
     unsigned int new_alloc_num;
+    struct xc_sr_record rec;
     struct xc_sr_record *p;
 
     if ( ctx->restore.buffered_rec_num >= ctx->restore.allocated_rec_num )
@@ -592,8 +593,13 @@ static int buffer_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         ctx->restore.allocated_rec_num = new_alloc_num;
     }
 
+    if ( read_record_data(ctx, ctx->fd, rhdr, &rec) )
+    {
+        return -1;
+    }
+
     memcpy(&ctx->restore.buffered_records[ctx->restore.buffered_rec_num++],
-           rec, sizeof(*rec));
+           &rec, sizeof(rec));
 
     return 0;
 }
@@ -624,7 +630,7 @@ int handle_static_data_end(struct xc_sr_context *ctx)
     return rc;
 }
 
-static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
+static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
 {
     xc_interface *xch = ctx->xch;
     int rc = 0;
@@ -662,6 +668,19 @@ static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     return rc;
 }
 
+static int process_incoming_record_header(struct xc_sr_context *ctx, struct xc_sr_rhdr *rhdr)
+{
+    struct xc_sr_record rec;
+    int rc;
+
+    rc = read_record_data(ctx, ctx->fd, rhdr, &rec);
+    if ( rc )
+        return rc;
+
+    return process_buffered_record(ctx, &rec);
+}
+
+
 static int setup(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
@@ -745,7 +764,7 @@ static void cleanup(struct xc_sr_context *ctx)
 static int restore(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    struct xc_sr_record rec;
+    struct xc_sr_rhdr rhdr;
     int rc, saved_rc = 0, saved_errno = 0;
 
     IPRINTF("Restoring domain");
@@ -756,7 +775,7 @@ static int restore(struct xc_sr_context *ctx)
 
     do
     {
-        rc = read_record(ctx, ctx->fd, &rec);
+        rc = read_record_header(ctx, ctx->fd, &rhdr);
         if ( rc )
         {
             if ( ctx->restore.buffer_all_records )
@@ -766,25 +785,25 @@ static int restore(struct xc_sr_context *ctx)
         }
 
         if ( ctx->restore.buffer_all_records &&
-             rec.type != REC_TYPE_END &&
-             rec.type != REC_TYPE_CHECKPOINT )
+             rhdr.type != REC_TYPE_END &&
+             rhdr.type != REC_TYPE_CHECKPOINT )
         {
-            rc = buffer_record(ctx, &rec);
+            rc = buffer_record(ctx, &rhdr);
             if ( rc )
                 goto err;
         }
         else
         {
-            rc = process_record(ctx, &rec);
+            rc = process_incoming_record_header(ctx, &rhdr);
             if ( rc == RECORD_NOT_PROCESSED )
             {
-                if ( rec.type & REC_TYPE_OPTIONAL )
+                if ( rhdr.type & REC_TYPE_OPTIONAL )
                     DPRINTF("Ignoring optional record %#x (%s)",
-                            rec.type, rec_type_to_str(rec.type));
+                            rhdr.type, rec_type_to_str(rhdr.type));
                 else
                 {
                     ERROR("Mandatory record %#x (%s) not handled",
-                          rec.type, rec_type_to_str(rec.type));
+                          rhdr.type, rec_type_to_str(rhdr.type));
                     rc = -1;
                     goto err;
                 }
@@ -795,7 +814,7 @@ static int restore(struct xc_sr_context *ctx)
                 goto err;
         }
 
-    } while ( rec.type != REC_TYPE_END );
+    } while ( rhdr.type != REC_TYPE_END );
 
  remus_failover:
     if ( ctx->stream_type == XC_STREAM_COLO )
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index fa83648f9a..e486bce96f 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -589,6 +589,7 @@ static int send_memory_live(struct xc_sr_context *ctx)
 static int colo_merge_secondary_dirty_bitmap(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
+    struct xc_sr_rhdr rhdr;
     struct xc_sr_record rec;
     uint64_t *pfns = NULL;
     uint64_t pfn;
@@ -597,7 +598,11 @@ static int colo_merge_secondary_dirty_bitmap(struct xc_sr_context *ctx)
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->save.dirty_bitmap_hbuf);
 
-    rc = read_record(ctx, ctx->save.recv_fd, &rec);
+    rc = read_record_header(ctx, ctx->save.recv_fd, &rhdr);
+    if ( rc )
+        goto err;
+
+    rc = read_record_data(ctx, ctx->save.recv_fd, &rhdr, &rec);
     if ( rc )
         goto err;
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148490.274518 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWh-0007lU-TK; Thu, 01 Jul 2021 10:02:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148490.274518; Thu, 01 Jul 2021 10:02:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWh-0007lJ-MX; Thu, 01 Jul 2021 10:02:31 +0000
Received: by outflank-mailman (input) for mailman id 148490;
 Thu, 01 Jul 2021 10:02:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSU-0004XT-Tu
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:10 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.104])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7ba2abb8-8840-41fd-a5d0-ee4432074b69;
 Thu, 01 Jul 2021 09:56:56 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619un5NF
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:49 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7ba2abb8-8840-41fd-a5d0-ee4432074b69
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133410;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=SEmlTCun49Bu0J5Hduo4Ou5xOCzHrO1gLgKtshkEibk=;
    b=leNKNgImZhFpMAUfRvKFT4UTuw7NNJ/AvWciHuO8ximTBy06TMcEBStzALzWRO3rBe
    H+ej4+CDkSuH0BtA0Sfuxbw1jSA2WpfBjAI+EgLyb/5ECI9CO3bPmHq5vXC3iGBjpihu
    Sn994HSbXw2wHckqAlMC5FzL2gMQv7wAaOY1B9I3GHZB8kFAV980UQu30b2xaCPlWHue
    UYLT52fitrn8J6w7JbF1QpSy03aY1an/h9nveX+G+mL04/Y9I9Skq+c5z5+c3fDLhuVR
    55Me5xHBvzm6+2jnIMSDcai8W1SaEc1vRc6+RZfdSWShl7Z3sgHxhHWYwKVIZfvgXYta
    wsyA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 23/40] tools: restore: move types array
Date: Thu,  1 Jul 2021 11:56:18 +0200
Message-Id: <20210701095635.15648-24-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move types array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h  |  1 +
 tools/libs/saverestore/restore.c | 12 +-----------
 2 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 8089449011..d798b79745 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -238,6 +238,7 @@ struct sr_save_arrays {
 struct sr_restore_arrays {
     /* handle_page_data */
     xen_pfn_t pfns[MAX_BATCH_SIZE];
+    uint32_t types[MAX_BATCH_SIZE];
 };
 
 struct xc_sr_context
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index c203ce503d..8ea125cf73 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -316,7 +316,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     int rc = -1;
 
     xen_pfn_t *pfns = ctx->restore.m->pfns, pfn;
-    uint32_t *types = NULL, type;
+    uint32_t *types = ctx->restore.m->types, type;
 
     /*
      * v2 compatibility only exists for x86 streams.  This is a bit of a
@@ -363,14 +363,6 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    types = malloc(pages->count * sizeof(*types));
-    if ( !types )
-    {
-        ERROR("Unable to allocate enough memory for %u pfns",
-              pages->count);
-        goto err;
-    }
-
     for ( i = 0; i < pages->count; ++i )
     {
         pfn = pages->pfn[i] & PAGE_DATA_PFN_MASK;
@@ -410,8 +402,6 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     rc = process_page_data(ctx, pages->count, pfns, types,
                            &pages->pfn[pages->count]);
  err:
-    free(types);
-
     return rc;
 }
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148491.274524 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWi-0007sH-E3; Thu, 01 Jul 2021 10:02:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148491.274524; Thu, 01 Jul 2021 10:02:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWi-0007qw-5p; Thu, 01 Jul 2021 10:02:32 +0000
Received: by outflank-mailman (input) for mailman id 148491;
 Thu, 01 Jul 2021 10:02:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSj-0004XT-UH
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:25 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2bf55f4c-8ccb-4310-b27b-a0a9200a22e3;
 Thu, 01 Jul 2021 09:56:57 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619up5NN
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:51 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2bf55f4c-8ccb-4310-b27b-a0a9200a22e3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133411;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=NzRIOkyxxUnksLPgAOMJtNoYSt71bd12f8S/qdAp4ys=;
    b=E3E63ORgeCjrZTaxjNFk+nyNw7JY0SiH/yHCVGqWhuC+TMeeeO3l/fAfSOgtVCoqjk
    GQ0o3YUjOVWcNJOMoO/SLpZLuQuE7110MjTbSJ8jSo9wfgkfQvE1z6FBr4+fZT+TK3Wx
    RNhXmirclaWDaJSgkxd6i/XqP7taUsITGTpjfgqjHXsbD7UxsCLi0o2MkJqQtmiS3pQY
    GkTWSjv1rNqGPCt1J7CZqv35cj7LRlB8qlC6uBqMkD9Pj1SMoVvEu2GxXwGjj26xvl8O
    tweDh0TQpuEb86rHI8sma/iiu6EhE03FQLd4yZQLNMr3j079ckgF1POvpg7OjQaU+k7d
    2qvg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 27/40] tools: restore: move pfns array in populate_pfns
Date: Thu,  1 Jul 2021 11:56:22 +0200
Message-Id: <20210701095635.15648-28-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move populate_pfns' pfns array into preallocated space.
Use some prefix to avoid conflict with an array used in handle_page_data.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h  |  1 +
 tools/libs/saverestore/restore.c | 11 +----------
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 9d2ea96583..c319148f8f 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -244,6 +244,7 @@ struct sr_restore_arrays {
     int map_errs[MAX_BATCH_SIZE];
     /* populate_pfns */
     xen_pfn_t pp_mfns[MAX_BATCH_SIZE];
+    xen_pfn_t pp_pfns[MAX_BATCH_SIZE];
 };
 
 struct xc_sr_context
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index 7418abf1c5..2a6ccce847 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -139,17 +139,10 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 {
     xc_interface *xch = ctx->xch;
     xen_pfn_t *mfns = ctx->restore.m->pp_mfns,
-        *pfns = malloc(count * sizeof(*pfns));
+        *pfns = ctx->restore.m->pp_pfns;
     unsigned int i, nr_pfns = 0;
     int rc = -1;
 
-    if ( !pfns )
-    {
-        ERROR("Failed to allocate %zu bytes for populating the physmap",
-              2 * count * sizeof(*mfns));
-        goto err;
-    }
-
     for ( i = 0; i < count; ++i )
     {
         if ( (!types ||
@@ -190,8 +183,6 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
     rc = 0;
 
  err:
-    free(pfns);
-
     return rc;
 }
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148497.274540 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWl-0000ER-LQ; Thu, 01 Jul 2021 10:02:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148497.274540; Thu, 01 Jul 2021 10:02:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWl-0000E6-Ga; Thu, 01 Jul 2021 10:02:35 +0000
Received: by outflank-mailman (input) for mailman id 148497;
 Thu, 01 Jul 2021 10:02:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSH-0004r4-Ht
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:57 +0000
Received: from mo4-p04-ob.smtp.rzone.de (unknown [85.215.255.123])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0fea3b19-9598-4b0d-8e2a-c7057ee0a005;
 Thu, 01 Jul 2021 09:57:03 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uv5Nj
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:57 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0fea3b19-9598-4b0d-8e2a-c7057ee0a005
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133418;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=i+CtqX1HY7Q0UrDFSipaIMys+n7R0U7HixGDrxWfeJY=;
    b=hO+V6Ivo6IqbiuUjPoOD4+qcc8FkwAB9Ci1Ygzs+u7DBYKfrbswow5XDZaZiMnqPDM
    j4EEfMoB/HMaP2JxuESRHJbw5SNvW8fDAy26jNIE73+Lx5sYncXt2/sYF1wNR9d/Urm0
    zhq4gle6Hkg946CQEFSV9rt3g7rOukJXm6yTuhRnkLoEajBapO9Qzo0yW8DI45mw8uTu
    WR5nk4+xYe6xOloLF0VlHUWVhEij2IQrcKhuUApPZ3w/czVD+Wx5J5IbbwD0RRNNn5Uh
    RTLOSFZowP0fiHcvjCDqKqihtd7EJmo5NeoPgUNim8sP+XpjZM+npzvS3J8LdYWXjEjD
    Idbw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 38/40] tools: add API for expandable bitmaps
Date: Thu,  1 Jul 2021 11:56:33 +0200
Message-Id: <20210701095635.15648-39-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Since the incoming migration stream lacks info about what the highest pfn
will be, some data structures can not be allocated upfront.

Add an API for expandable bitmaps, loosely based on pfn_set_populated.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/saverestore/common.c | 39 +++++++++++++++++++
 tools/libs/saverestore/common.h | 67 +++++++++++++++++++++++++++++++++
 2 files changed, 106 insertions(+)

diff --git a/tools/libs/saverestore/common.c b/tools/libs/saverestore/common.c
index 7da7fa4e2c..e96173eea2 100644
--- a/tools/libs/saverestore/common.c
+++ b/tools/libs/saverestore/common.c
@@ -163,6 +163,45 @@ static void __attribute__((unused)) build_assertions(void)
     BUILD_BUG_ON(sizeof(struct xc_sr_rec_hvm_params)        != 8);
 }
 
+/*
+ * Expand the tracking structures as needed.
+ * To avoid realloc()ing too excessively, the size increased to the nearest
+ * power of two large enough to contain the required number of bits.
+ */
+bool _sr_bitmap_expand(struct sr_bitmap *bm, unsigned long bits)
+{
+    size_t new_max;
+    size_t old_sz, new_sz;
+    void *p;
+
+    if (bits <= bm->bits)
+        return true;
+
+    /* Round up to the nearest power of two larger than bit, less 1. */
+    new_max = bits;
+    new_max |= new_max >> 1;
+    new_max |= new_max >> 2;
+    new_max |= new_max >> 4;
+    new_max |= new_max >> 8;
+    new_max |= new_max >> 16;
+    new_max |= sizeof(unsigned long) > 4 ? new_max >> 32 : 0;
+
+    /* Allocate units of unsigned long */
+    new_max = (new_max + BITS_PER_LONG - 1) & ~(BITS_PER_LONG - 1);
+
+    old_sz = bitmap_size(bm->bits);
+    new_sz = bitmap_size(new_max);
+    p = realloc(bm->p, new_sz);
+    if (!p)
+        return false;
+
+    memset(p + old_sz, 0, new_sz - old_sz);
+    bm->p = p;
+    bm->bits = new_max;
+
+    return true;
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index bb7e437291..e6a269c482 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -30,6 +30,73 @@ const char *rec_type_to_str(uint32_t type);
 struct xc_sr_context;
 struct xc_sr_record;
 
+struct sr_bitmap
+{
+    void *p;
+    unsigned long bits;
+};
+
+extern bool _sr_bitmap_expand(struct sr_bitmap *bm, unsigned long bits);
+
+static inline bool sr_bitmap_expand(struct sr_bitmap *bm, unsigned long bits)
+{
+    if (bits > bm->bits)
+        return _sr_bitmap_expand(bm, bits);
+    return true;
+}
+
+static inline void sr_bitmap_free(struct sr_bitmap *bm)
+{
+    free(bm->p);
+    bm->p = NULL;
+}
+
+static inline bool sr_set_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (sr_bitmap_expand(bm, bit) == false)
+        return false;
+
+    set_bit(bit, bm->p);
+    return true;
+}
+
+static inline bool sr_test_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit > bm->bits)
+        return false;
+    return !!test_bit(bit, bm->p);
+}
+
+static inline void sr_clear_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit <= bm->bits)
+        clear_bit(bit, bm->p);
+}
+
+static inline bool sr_test_and_clear_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit > bm->bits)
+        return false;
+    return !!test_and_clear_bit(bit, bm->p);
+}
+
+/* No way to report potential allocation error, bitmap must be expanded prior usage */
+static inline bool sr_test_and_set_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit > bm->bits)
+        return false;
+    return !!test_and_set_bit(bit, bm->p);
+}
+
+static inline bool sr_set_long_bit(unsigned long base_bit, struct sr_bitmap *bm)
+{
+    if (sr_bitmap_expand(bm, base_bit + BITS_PER_LONG) == false)
+        return false;
+
+    set_bit_long(base_bit, bm->p);
+    return true;
+}
+
 /**
  * Save operations.  To be implemented for each type of guest, for use by the
  * common save algorithm.


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148504.274556 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWp-0000rP-P2; Thu, 01 Jul 2021 10:02:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148504.274556; Thu, 01 Jul 2021 10:02:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWp-0000qG-Fp; Thu, 01 Jul 2021 10:02:39 +0000
Received: by outflank-mailman (input) for mailman id 148504;
 Thu, 01 Jul 2021 10:02:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSA-0004XT-T4
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:50 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.174])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 086b66b3-062c-4f5c-b56c-b9cf69dfab2d;
 Thu, 01 Jul 2021 09:56:54 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619um5N9
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:48 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 086b66b3-062c-4f5c-b56c-b9cf69dfab2d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133408;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=43SvGtyUka0RJRv5k5wfzNrETGLrxHTj64zykGKQL1Q=;
    b=Vj7qzvDcXM4w4xzTRvoqwCtgS94+Xdcvmq/iAUm6RQQF+XzTP3l2LkKk8uk2ijxQGR
    FsglZZU0fiNrVk6j4R2pBm5V6iohYwZo28xkOEdvllPaizwYAOe7OvarbDJiE5K84TPD
    OPLdIoXnQ8D7j/tPK6b3YCbNHVVFQWSraMoZInJO9lJCT/iIxsZvivkAK4T9aoYiRWyQ
    kxCXCPt4924Mu89+91b9XLjdMdbTWGxQwYMcm+fMHFmYeLHOOESPpq8kbei2RzNSo9H0
    T+FH2EnuUm2v0CHLo7qC4yHN/1vnNU2qr9zT/7+ahbg2XliUJk7Z38SsZwAXgsxErdk3
    JqwA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 19/40] tools: save: move iov array
Date: Thu,  1 Jul 2021 11:56:14 +0200
Message-Id: <20210701095635.15648-20-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move iov array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h | 2 ++
 tools/libs/saverestore/save.c   | 7 ++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 25ee8fcb0f..c8a30acf7b 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -231,6 +231,8 @@ struct sr_save_arrays {
     xen_pfn_t types[MAX_BATCH_SIZE];
     /* write_batch: Errors from attempting to map the gfns. */
     int errors[MAX_BATCH_SIZE];
+    /* write_batch: iovec[] for writev(). */
+    struct iovec iov[MAX_BATCH_SIZE + 4];
 };
 
 struct sr_restore_arrays {
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 9ebbf00ce7..1a5f3d29ea 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -97,7 +97,7 @@ static int write_batch(struct xc_sr_context *ctx)
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
     void *page, *orig_page;
     uint64_t *rec_pfns = NULL;
-    struct iovec *iov = NULL; int iovcnt = 0;
+    struct iovec *iov = ctx->save.m->iov; int iovcnt = 0;
     struct xc_sr_rec_page_data_header hdr = { 0 };
     struct xc_sr_record rec = {
         .type = REC_TYPE_PAGE_DATA,
@@ -109,10 +109,8 @@ static int write_batch(struct xc_sr_context *ctx)
     guest_data = calloc(nr_pfns, sizeof(*guest_data));
     /* Pointers to locally allocated pages.  Need freeing. */
     local_pages = calloc(nr_pfns, sizeof(*local_pages));
-    /* iovec[] for writev(). */
-    iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !guest_data || !local_pages || !iov )
+    if ( !guest_data || !local_pages )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -266,7 +264,6 @@ static int write_batch(struct xc_sr_context *ctx)
         xenforeignmemory_unmap(xch->fmem, guest_mapping, nr_pages_mapped);
     for ( i = 0; local_pages && i < nr_pfns; ++i )
         free(local_pages[i]);
-    free(iov);
     free(local_pages);
     free(guest_data);
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148501.274551 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWp-0000n1-8S; Thu, 01 Jul 2021 10:02:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148501.274551; Thu, 01 Jul 2021 10:02:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWp-0000mW-41; Thu, 01 Jul 2021 10:02:39 +0000
Received: by outflank-mailman (input) for mailman id 148501;
 Thu, 01 Jul 2021 10:02:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytS7-0004r4-HY
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:57:47 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8fb93b39-fa31-4fd4-b68b-bf10d2e2264c;
 Thu, 01 Jul 2021 09:57:00 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uq5NR
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:52 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8fb93b39-fa31-4fd4-b68b-bf10d2e2264c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133412;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=BF1RLVhIB1BINrph0oGFlHcI4RXAoWr7u8tCO2/nmZw=;
    b=Cm3516N0bw8SQ/Ki/WWHQi6r4HjWgWgj5xxASFu1AZkoJQIACx2212nqjH5dm0ouAN
    UvTL56YGB12xLGngtgO7Az7s7a42jOWIGQskDHHUIrFgjpuMeBoaEMSyx1a0VfOGmOMq
    Z2ub8mBu2XLoZEi8bS6dkMpseRQLeAmSaZMqtUk5T/kPT2foO1GwRkZdXm9yDLcUtva9
    x1CEB4cO5XD7bbpMeFKoEfEEjfiq2Sd8jiCdKYPNt68JF7f7/oveqdvlzywL5Y2OcNZu
    IVRw2HRHEelfUAnd7qpBFvdaJsJVXojGDv3QKlEdlsMXUFEyTEmtGi1kttrzo1ycKubo
    JbQw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210701 29/40] tools: restore: split handle_page_data
Date: Thu,  1 Jul 2021 11:56:24 +0200
Message-Id: <20210701095635.15648-30-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

handle_page_data must be able to read directly into mapped guest memory.
This will avoid unneccesary memcpy calls for data that can be consumed verbatim.

Split the various steps of record processing:
- move processing to handle_buffered_page_data
- adjust xenforeignmemory_map to set errno in case of failure
- adjust verify mode to set errno in case of failure

This change is preparation for future changes in handle_page_data,
no change in behavior is intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/saverestore/common.h  |   9 +
 tools/libs/saverestore/restore.c | 343 ++++++++++++++++++++-----------
 2 files changed, 231 insertions(+), 121 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 580eafacc8..96bd0ab80e 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -242,9 +242,14 @@ struct sr_restore_arrays {
     /* process_page_data */
     xen_pfn_t mfns[MAX_BATCH_SIZE];
     int map_errs[MAX_BATCH_SIZE];
+    void *guest_data[MAX_BATCH_SIZE];
+
     /* populate_pfns */
     xen_pfn_t pp_mfns[MAX_BATCH_SIZE];
     xen_pfn_t pp_pfns[MAX_BATCH_SIZE];
+
+    /* Must be the last member */
+    struct xc_sr_rec_page_data_header pages;
 };
 
 struct xc_sr_context
@@ -335,7 +340,11 @@ struct xc_sr_context
 
             /* Sender has invoked verify mode on the stream. */
             bool verify;
+            void *verify_buf;
+
             struct sr_restore_arrays *m;
+            void *guest_mapping;
+            uint32_t nr_mapped_pages;
         } restore;
     };
 
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index e75380155d..7643de58e0 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -186,123 +186,18 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
     return rc;
 }
 
-/*
- * Given a list of pfns, their types, and a block of page data from the
- * stream, populate and record their types, map the relevant subset and copy
- * the data into the guest.
- */
-static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
-                             xen_pfn_t *pfns, uint32_t *types, void *page_data)
+static int handle_static_data_end_v2(struct xc_sr_context *ctx)
 {
-    xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = ctx->restore.m->mfns;
-    int *map_errs = ctx->restore.m->map_errs;
-    int rc;
-    void *mapping = NULL, *guest_page = NULL;
-    unsigned int i, /* i indexes the pfns from the record. */
-        j,          /* j indexes the subset of pfns we decide to map. */
-        nr_pages = 0;
-
-    rc = populate_pfns(ctx, count, pfns, types);
-    if ( rc )
-    {
-        ERROR("Failed to populate pfns for batch of %u pages", count);
-        goto err;
-    }
-
-    for ( i = 0; i < count; ++i )
-    {
-        ctx->restore.ops.set_page_type(ctx, pfns[i], types[i]);
-
-        if ( page_type_has_stream_data(types[i]) == true )
-            mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
-    }
-
-    /* Nothing to do? */
-    if ( nr_pages == 0 )
-        goto done;
-
-    mapping = guest_page = xenforeignmemory_map(
-        xch->fmem, ctx->domid, PROT_READ | PROT_WRITE,
-        nr_pages, mfns, map_errs);
-    if ( !mapping )
-    {
-        rc = -1;
-        PERROR("Unable to map %u mfns for %u pages of data",
-               nr_pages, count);
-        goto err;
-    }
-
-    for ( i = 0, j = 0; i < count; ++i )
-    {
-        if ( page_type_has_stream_data(types[i]) == false )
-            continue;
-
-        if ( map_errs[j] )
-        {
-            rc = -1;
-            ERROR("Mapping pfn %#"PRIpfn" (mfn %#"PRIpfn", type %#"PRIx32") failed with %d",
-                  pfns[i], mfns[j], types[i], map_errs[j]);
-            goto err;
-        }
-
-        /* Undo page normalisation done by the saver. */
-        rc = ctx->restore.ops.localise_page(ctx, types[i], page_data);
-        if ( rc )
-        {
-            ERROR("Failed to localise pfn %#"PRIpfn" (type %#"PRIx32")",
-                  pfns[i], types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
-            goto err;
-        }
-
-        if ( ctx->restore.verify )
-        {
-            /* Verify mode - compare incoming data to what we already have. */
-            if ( memcmp(guest_page, page_data, PAGE_SIZE) )
-                ERROR("verify pfn %#"PRIpfn" failed (type %#"PRIx32")",
-                      pfns[i], types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
-        }
-        else
-        {
-            /* Regular mode - copy incoming data into place. */
-            memcpy(guest_page, page_data, PAGE_SIZE);
-        }
-
-        ++j;
-        guest_page += PAGE_SIZE;
-        page_data += PAGE_SIZE;
-    }
-
- done:
-    rc = 0;
-
- err:
-    if ( mapping )
-        xenforeignmemory_unmap(xch->fmem, mapping, nr_pages);
-
-    return rc;
-}
+    int rc = 0;
 
-/*
- * Validate a PAGE_DATA record from the stream, and pass the results to
- * process_page_data() to actually perform the legwork.
- */
-static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
-{
+#if defined(__i386__) || defined(__x86_64__)
     xc_interface *xch = ctx->xch;
-    struct xc_sr_rec_page_data_header *pages = rec->data;
-    unsigned int i, pages_of_data = 0;
-    int rc = -1;
-
-    xen_pfn_t *pfns = ctx->restore.m->pfns, pfn;
-    uint32_t *types = ctx->restore.m->types, type;
-
     /*
      * v2 compatibility only exists for x86 streams.  This is a bit of a
      * bodge, but it is less bad than duplicating handle_page_data() between
      * different architectures.
      */
-#if defined(__i386__) || defined(__x86_64__)
+
     /* v2 compat.  Infer the position of STATIC_DATA_END. */
     if ( ctx->restore.format_version < 3 && !ctx->restore.seen_static_data_end )
     {
@@ -320,12 +215,26 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         ERROR("No STATIC_DATA_END seen");
         goto err;
     }
+
+    rc = 0;
+err:
 #endif
 
-    if ( rec->length < sizeof(*pages) )
+    return rc;
+}
+
+static bool verify_rec_page_hdr(struct xc_sr_context *ctx, uint32_t rec_length,
+                                 struct xc_sr_rec_page_data_header *pages)
+{
+    xc_interface *xch = ctx->xch;
+    bool ret = false;
+
+    errno = EINVAL;
+
+    if ( rec_length < sizeof(*pages) )
     {
         ERROR("PAGE_DATA record truncated: length %u, min %zu",
-              rec->length, sizeof(*pages));
+              rec_length, sizeof(*pages));
         goto err;
     }
 
@@ -335,13 +244,35 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    if ( rec->length < sizeof(*pages) + (pages->count * sizeof(uint64_t)) )
+    if ( pages->count > MAX_BATCH_SIZE )
+    {
+        ERROR("pfn count %u in PAGE_DATA record too large", pages->count);
+        errno = E2BIG;
+        goto err;
+    }
+
+    if ( rec_length < sizeof(*pages) + (pages->count * sizeof(uint64_t)) )
     {
         ERROR("PAGE_DATA record (length %u) too short to contain %u"
-              " pfns worth of information", rec->length, pages->count);
+              " pfns worth of information", rec_length, pages->count);
         goto err;
     }
 
+    ret = true;
+
+err:
+    return ret;
+}
+
+static bool verify_rec_page_pfns(struct xc_sr_context *ctx, uint32_t rec_length,
+                                 struct xc_sr_rec_page_data_header *pages)
+{
+    xc_interface *xch = ctx->xch;
+    uint32_t i, pages_of_data = 0;
+    xen_pfn_t pfn;
+    uint32_t type;
+    bool ret = false;
+
     for ( i = 0; i < pages->count; ++i )
     {
         pfn = pages->pfn[i] & PAGE_DATA_PFN_MASK;
@@ -364,23 +295,183 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
              * have a page worth of data in the record. */
             pages_of_data++;
 
-        pfns[i] = pfn;
-        types[i] = type;
+        ctx->restore.m->pfns[i] = pfn;
+        ctx->restore.m->types[i] = type;
     }
 
-    if ( rec->length != (sizeof(*pages) +
+    if ( rec_length != (sizeof(*pages) +
                          (sizeof(uint64_t) * pages->count) +
                          (PAGE_SIZE * pages_of_data)) )
     {
         ERROR("PAGE_DATA record wrong size: length %u, expected "
-              "%zu + %zu + %lu", rec->length, sizeof(*pages),
+              "%zu + %zu + %lu", rec_length, sizeof(*pages),
               (sizeof(uint64_t) * pages->count), (PAGE_SIZE * pages_of_data));
         goto err;
     }
 
-    rc = process_page_data(ctx, pages->count, pfns, types,
-                           &pages->pfn[pages->count]);
+    ret = true;
+
+err:
+    return ret;
+}
+
+/*
+ * Populate pfns, if required
+ * Fill m->guest_data with either mapped address or NULL
+ * The caller must unmap guest_mapping
+ */
+static int map_guest_pages(struct xc_sr_context *ctx,
+                           struct xc_sr_rec_page_data_header *pages)
+{
+    xc_interface *xch = ctx->xch;
+    struct sr_restore_arrays *m = ctx->restore.m;
+    uint32_t i, p;
+    int rc;
+
+    rc = populate_pfns(ctx, pages->count, m->pfns, m->types);
+    if ( rc )
+    {
+        ERROR("Failed to populate pfns for batch of %u pages", pages->count);
+        goto err;
+    }
+
+    ctx->restore.nr_mapped_pages = 0;
+
+    for ( i = 0; i < pages->count; i++ )
+    {
+        ctx->restore.ops.set_page_type(ctx, m->pfns[i], m->types[i]);
+
+        if ( page_type_has_stream_data(m->types[i]) == false )
+        {
+            m->guest_data[i] = NULL;
+            continue;
+        }
+
+        m->mfns[ctx->restore.nr_mapped_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, m->pfns[i]);
+    }
+
+    /* Nothing to do? */
+    if ( ctx->restore.nr_mapped_pages == 0 )
+        goto done;
+
+    ctx->restore.guest_mapping = xenforeignmemory_map(xch->fmem, ctx->domid,
+            PROT_READ | PROT_WRITE, ctx->restore.nr_mapped_pages,
+            m->mfns, m->map_errs);
+    if ( !ctx->restore.guest_mapping )
+    {
+        rc = -1;
+        PERROR("Unable to map %u mfns for %u pages of data",
+               ctx->restore.nr_mapped_pages, pages->count);
+        goto err;
+    }
+
+    /* Verify mapping, and assign address to pfn data */
+    for ( i = 0, p = 0; i < pages->count; i++ )
+    {
+        if ( page_type_has_stream_data(m->types[i]) == false )
+            continue;
+
+        if ( m->map_errs[p] == 0 )
+        {
+            m->guest_data[i] = ctx->restore.guest_mapping + (p * PAGE_SIZE);
+            p++;
+            continue;
+        }
+
+        errno = m->map_errs[p];
+        rc = -1;
+        PERROR("Mapping pfn %#"PRIpfn" (mfn %#"PRIpfn", type %#"PRIx32") failed",
+              m->pfns[i], m->mfns[p], m->types[i]);
+        goto err;
+    }
+
+done:
+    rc = 0;
+
+err:
+    return rc;
+}
+
+/*
+ * Handle PAGE_DATA record from an existing buffer
+ * Given a list of pfns, their types, and a block of page data from the
+ * stream, populate and record their types, map the relevant subset and copy
+ * the data into the guest.
+ */
+static int handle_buffered_page_data(struct xc_sr_context *ctx,
+                                     struct xc_sr_record *rec)
+{
+    xc_interface *xch = ctx->xch;
+    struct xc_sr_rec_page_data_header *pages = rec->data;
+    struct sr_restore_arrays *m = ctx->restore.m;
+    void *p;
+    uint32_t i;
+    int rc = -1, idx;
+
+    rc = handle_static_data_end_v2(ctx);
+    if ( rc )
+        goto err;
+
+    /* First read and verify the header */
+    if ( verify_rec_page_hdr(ctx, rec->length, pages) == false )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Then read and verify the pfn numbers */
+    if ( verify_rec_page_pfns(ctx, rec->length, pages) == false )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Map the target pfn */
+    rc = map_guest_pages(ctx, pages);
+    if ( rc )
+        goto err;
+
+    for ( i = 0, idx = 0; i < pages->count; i++ )
+    {
+        if ( !m->guest_data[i] )
+            continue;
+
+        p = &pages->pfn[pages->count] + (idx * PAGE_SIZE);
+        rc = ctx->restore.ops.localise_page(ctx, m->types[i], p);
+        if ( rc )
+        {
+            ERROR("Failed to localise pfn %#"PRIpfn" (type %#"PRIx32")",
+                  m->pfns[i], m->types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+            goto err;
+
+        }
+
+        if ( ctx->restore.verify )
+        {
+            if ( memcmp(m->guest_data[i], p, PAGE_SIZE) )
+            {
+                errno = EIO;
+                ERROR("verify pfn %#"PRIpfn" failed (type %#"PRIx32")",
+                      m->pfns[i], m->types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+                goto err;
+            }
+        }
+        else
+        {
+            memcpy(m->guest_data[i], p, PAGE_SIZE);
+        }
+
+        idx++;
+    }
+
+    rc = 0;
+
  err:
+    if ( ctx->restore.guest_mapping )
+    {
+        xenforeignmemory_unmap(xch->fmem, ctx->restore.guest_mapping, ctx->restore.nr_mapped_pages);
+        ctx->restore.guest_mapping = NULL;
+    }
     return rc;
 }
 
@@ -641,12 +732,21 @@ static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_recor
         break;
 
     case REC_TYPE_PAGE_DATA:
-        rc = handle_page_data(ctx, rec);
+        rc = handle_buffered_page_data(ctx, rec);
         break;
 
     case REC_TYPE_VERIFY:
         DPRINTF("Verify mode enabled");
         ctx->restore.verify = true;
+        if ( !ctx->restore.verify_buf )
+        {
+            ctx->restore.verify_buf = malloc(MAX_BATCH_SIZE * PAGE_SIZE);
+            if ( !ctx->restore.verify_buf )
+            {
+                rc = -1;
+                PERROR("Unable to allocate verify_buf");
+            }
+        }
         break;
 
     case REC_TYPE_CHECKPOINT:
@@ -725,7 +825,8 @@ static int setup(struct xc_sr_context *ctx)
     }
     ctx->restore.allocated_rec_num = DEFAULT_BUF_RECORDS;
 
-    ctx->restore.m = malloc(sizeof(*ctx->restore.m));
+    ctx->restore.m = malloc(sizeof(*ctx->restore.m) +
+            (sizeof(*ctx->restore.m->pages.pfn) * MAX_BATCH_SIZE));
     if ( !ctx->restore.m ) {
         ERROR("Unable to allocate memory for arrays");
         rc = -1;


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148507.274561 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWq-0000z8-9n; Thu, 01 Jul 2021 10:02:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148507.274561; Thu, 01 Jul 2021 10:02:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWq-0000wq-0h; Thu, 01 Jul 2021 10:02:40 +0000
Received: by outflank-mailman (input) for mailman id 148507;
 Thu, 01 Jul 2021 10:02:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytSe-0004XT-UD
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 09:58:20 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1bd39e47-8d61-453f-8021-3b2516e0ff03;
 Thu, 01 Jul 2021 09:56:57 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619uo5NK
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:50 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1bd39e47-8d61-453f-8021-3b2516e0ff03
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133411;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=fv8u8kOPgs+5gp4rBj+tXUjGXKsfh+8d1IsW+dkfVk4=;
    b=S+Xl4Z1zszliY0TzkrzXrYIBAHGDew/2RqvBacfbRbmSaLzzwduoKo4x79mMCm/5g/
    nDuK2IfnqsEdrhAxeKKyVqZJ2Mhv5EI6ybX2QNeiJypMRtsZUGbvjXJBthCOmhe13XmN
    lOjt8ppHej1Y/J8H/BBSmEx+9MBpvruf8K7hKVnI2cP0fPOXESbiD/qXoYUNb/+mhW/A
    xqUUq/CwFuevuGKoDO9vuZsYBvzHrDVFapY3ZH+xnZedCUQQvUK3u97yncGPW5rz7vEJ
    8nlvmt+H4eGDZ/ti0AXEwA4ibB7rn7Dg9iiSJ0oJzsLY/y+NoryAToCjPJyYWveR0HPV
    U7gA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210701 25/40] tools: restore: move map_errs array
Date: Thu,  1 Jul 2021 11:56:20 +0200
Message-Id: <20210701095635.15648-26-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove allocation from hotpath, move map_errs array into preallocated space.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/saverestore/common.h  |  1 +
 tools/libs/saverestore/restore.c | 12 +-----------
 2 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index 9d7efff03d..7684c35e22 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -241,6 +241,7 @@ struct sr_restore_arrays {
     uint32_t types[MAX_BATCH_SIZE];
     /* process_page_data */
     xen_pfn_t mfns[MAX_BATCH_SIZE];
+    int map_errs[MAX_BATCH_SIZE];
 };
 
 struct xc_sr_context
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index d7ea52b89e..578ee1accb 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -206,21 +206,13 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
 {
     xc_interface *xch = ctx->xch;
     xen_pfn_t *mfns = ctx->restore.m->mfns;
-    int *map_errs = malloc(count * sizeof(*map_errs));
+    int *map_errs = ctx->restore.m->map_errs;
     int rc;
     void *mapping = NULL, *guest_page = NULL;
     unsigned int i, /* i indexes the pfns from the record. */
         j,          /* j indexes the subset of pfns we decide to map. */
         nr_pages = 0;
 
-    if ( !map_errs )
-    {
-        rc = -1;
-        ERROR("Failed to allocate %zu bytes to process page data",
-              count * (sizeof(*mfns) + sizeof(*map_errs)));
-        goto err;
-    }
-
     rc = populate_pfns(ctx, count, pfns, types);
     if ( rc )
     {
@@ -298,8 +290,6 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
     if ( mapping )
         xenforeignmemory_unmap(xch->fmem, mapping, nr_pages);
 
-    free(map_errs);
-
     return rc;
 }
 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:02:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:02:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148509.274580 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWs-0001kx-Vt; Thu, 01 Jul 2021 10:02:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148509.274580; Thu, 01 Jul 2021 10:02:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytWs-0001iZ-Gy; Thu, 01 Jul 2021 10:02:42 +0000
Received: by outflank-mailman (input) for mailman id 148509;
 Thu, 01 Jul 2021 10:02:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytVZ-0004XT-4H
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 10:01:21 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ac119f06-72cf-4881-9e7d-d1a78e7b3b1d;
 Thu, 01 Jul 2021 09:58:18 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx619us5NW
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 11:56:54 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ac119f06-72cf-4881-9e7d-d1a78e7b3b1d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625133414;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=n0d0gwWXlJ/Ban5eVrK506Di/gOt/MD61K+N2RGQBbA=;
    b=Gl58uIDpytNCd08vTi0ztylENVBl+fRtA6BJJFBS4K+oAMI4fOQRThcxhH9ZUenr1p
    LSGgV3d0plPdsJmtYrjw8IErqZWLZk05W83mq33yvMopOnlMNIgywtuHWkA1KMwkk5NX
    yllcZGagVS2KO3XT/EARqFZoC16c753PHIjD3vlr7pMx6I9WtNVCUUs4Ps75yCOTF/uu
    34eLqRIzWxCGH4+2EkcF2cXdzxQdEavqUKZQcZeA0L58nQ2CoMu/NVsYg+ZZ+1SJMEGt
    IM6PcldeVJJGQx+XoRzBf0Ba9VSNxnbc1IGFRQPAHtxPOuzMD83paaMsrKDQzmKlXmg9
    KCwA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Christian Lindig <christian.lindig@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	David Scott <dave@recoil.org>
Subject: [PATCH v20210701 32/40] tools: adjust libxl_domain_suspend to receive a struct props
Date: Thu,  1 Jul 2021 11:56:27 +0200
Message-Id: <20210701095635.15648-33-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210701095635.15648-1-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Upcoming changes will pass more knobs down to xc_domain_save.
Adjust the libxl_domain_suspend API to allow easy adding of additional knobs.

No change in behavior intented.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
---
 tools/include/libxl.h                | 26 +++++++++++++++++++++++---
 tools/libs/light/libxl_domain.c      |  7 ++++---
 tools/ocaml/libs/xl/xenlight_stubs.c |  3 ++-
 tools/xl/xl_migrate.c                |  9 ++++++---
 tools/xl/xl_saverestore.c            |  3 ++-
 5 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 29931626a2..9a4d7514ed 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1706,12 +1706,32 @@ static inline int libxl_retrieve_domain_configuration_0x041200(
     libxl_retrieve_domain_configuration_0x041200
 #endif
 
+/*
+ * LIBXL_HAVE_DOMAIN_SUSPEND_PROPS indicates that the
+ * libxl_domain_suspend_props() function takes a props struct.
+ */
+#define LIBXL_HAVE_DOMAIN_SUSPEND_PROPS 1
+
+typedef struct {
+    uint32_t flags; /* LIBXL_SUSPEND_* */
+} libxl_domain_suspend_props;
+#define LIBXL_SUSPEND_DEBUG 1
+#define LIBXL_SUSPEND_LIVE 2
+
 int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
-                         int flags, /* LIBXL_SUSPEND_* */
+                         libxl_domain_suspend_props *props,
                          const libxl_asyncop_how *ao_how)
                          LIBXL_EXTERNAL_CALLERS_ONLY;
-#define LIBXL_SUSPEND_DEBUG 1
-#define LIBXL_SUSPEND_LIVE 2
+#if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION < 0x041600
+static inline int libxl_domain_suspend_0x041500(libxl_ctx *ctx, uint32_t domid,
+                         int fd, int flags, /* LIBXL_SUSPEND_* */
+                         const libxl_asyncop_how *ao_how)
+{
+    libxl_domain_suspend_props props = { .flags = flags, };
+    return libxl_domain_suspend(ctx, domid, fd, &props, ao_how);
+}
+#define libxl_domain_suspend libxl_domain_suspend_0x041500
+#endif
 
 /*
  * Only suspend domain, do not save its state to file, do not destroy it.
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index c00c36c928..5dbd27900f 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -505,7 +505,8 @@ static void domain_suspend_cb(libxl__egc *egc,
 
 }
 
-int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags,
+int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
+                         libxl_domain_suspend_props *props,
                          const libxl_asyncop_how *ao_how)
 {
     AO_CREATE(ctx, domid, ao_how);
@@ -526,8 +527,8 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags,
     dss->domid = domid;
     dss->fd = fd;
     dss->type = type;
-    dss->live = flags & LIBXL_SUSPEND_LIVE;
-    dss->debug = flags & LIBXL_SUSPEND_DEBUG;
+    dss->live = props->flags & LIBXL_SUSPEND_LIVE;
+    dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
 
     rc = libxl__fd_flags_modify_save(gc, dss->fd,
diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c
index 352a00134d..eaf7bce35a 100644
--- a/tools/ocaml/libs/xl/xenlight_stubs.c
+++ b/tools/ocaml/libs/xl/xenlight_stubs.c
@@ -614,10 +614,11 @@ value stub_libxl_domain_suspend(value ctx, value domid, value fd, value async, v
 	int ret;
 	uint32_t c_domid = Int_val(domid);
 	int c_fd = Int_val(fd);
+    libxl_domain_suspend_props props = {};
 	libxl_asyncop_how *ao_how = aohow_val(async);
 
 	caml_enter_blocking_section();
-	ret = libxl_domain_suspend(CTX, c_domid, c_fd, 0, ao_how);
+	ret = libxl_domain_suspend(CTX, c_domid, c_fd, &props, ao_how);
 	caml_leave_blocking_section();
 
 	free(ao_how);
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index b8594f44a5..144890924f 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -186,7 +186,10 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     char *away_domname;
     char rc_buf;
     uint8_t *config_data;
-    int config_len, flags = LIBXL_SUSPEND_LIVE;
+    int config_len;
+    libxl_domain_suspend_props props = {
+        .flags = LIBXL_SUSPEND_LIVE,
+        };
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
                            &config_data, &config_len);
@@ -205,8 +208,8 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     xtl_stdiostream_adjust_flags(logger, XTL_STDIOSTREAM_HIDE_PROGRESS, 0);
 
     if (debug)
-        flags |= LIBXL_SUSPEND_DEBUG;
-    rc = libxl_domain_suspend(ctx, domid, send_fd, flags, NULL);
+        props.flags |= LIBXL_SUSPEND_DEBUG;
+    rc = libxl_domain_suspend(ctx, domid, send_fd, &props, NULL);
     if (rc) {
         fprintf(stderr, "migration sender: libxl_domain_suspend failed"
                 " (rc=%d)\n", rc);
diff --git a/tools/xl/xl_saverestore.c b/tools/xl/xl_saverestore.c
index 953d791d1a..476d4d9a6a 100644
--- a/tools/xl/xl_saverestore.c
+++ b/tools/xl/xl_saverestore.c
@@ -130,6 +130,7 @@ static int save_domain(uint32_t domid, int preserve_domid,
     int fd;
     uint8_t *config_data;
     int config_len;
+    libxl_domain_suspend_props props = {};
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
                            &config_data, &config_len);
@@ -146,7 +147,7 @@ static int save_domain(uint32_t domid, int preserve_domid,
 
     save_domain_core_writeconfig(fd, filename, config_data, config_len);
 
-    int rc = libxl_domain_suspend(ctx, domid, fd, 0, NULL);
+    int rc = libxl_domain_suspend(ctx, domid, fd, &props, NULL);
     close(fd);
 
     if (rc < 0) {


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:13:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:13:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148574.274595 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lythQ-0006HL-FN; Thu, 01 Jul 2021 10:13:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148574.274595; Thu, 01 Jul 2021 10:13:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lythQ-0006HE-BK; Thu, 01 Jul 2021 10:13:36 +0000
Received: by outflank-mailman (input) for mailman id 148574;
 Thu, 01 Jul 2021 10:13:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=zJ+h=LZ=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1lythP-0006H8-6F
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 10:13:35 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9fcd3858-5b16-4314-9be1-40ca547d3c6d;
 Thu, 01 Jul 2021 10:13:34 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2110.outbound.protection.outlook.com [104.47.18.110])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-31-F0waoWd6NVW-5zIx2J01vw-1; Thu, 01 Jul 2021 12:13:27 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4381.eurprd04.prod.outlook.com (2603:10a6:803:6d::30)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Thu, 1 Jul
 2021 10:13:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.023; Thu, 1 Jul 2021
 10:13:25 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0003.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4264.18 via Frontend Transport; Thu, 1 Jul 2021 10:13:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9fcd3858-5b16-4314-9be1-40ca547d3c6d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625134411;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=JCunioa4EWZjq32fQIVqtUhOCPm1ECOwtCYNIITpjdM=;
	b=VzWSA3WLrDLvmvLy3Src2Y+MPH7GlY/Xmb+ESWsHr4W7Ui9OLTOzpwYBDc40Fpx8tuT5er
	brsMw6ttA+/4Oxrk0clxBJD1BaNqX3crQHiUCGTvKjiTeslNM8O0EOir+qAdeev/VbRv/m
	FnIRi80Nt5FsP6wV/OSE5gFFuzEUmt0=
X-MC-Unique: F0waoWd6NVW-5zIx2J01vw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=h9ytCMHPYpi7BNJt6dukBjOsPTmGUL+qSrRSGOZ4ThlwYz4TjIbazNNEnKYaW+NO8A1qoY4+95gLRkNKgMbhWlLMHxT4RGuKPvZSvUbz1cfQ0yO3+D6CxmIRjtMRlShTayjpgdYFu9utMPobnMgmqda6FcCqV2ypN8fm1neJvHMnQbD1bgdhVR9exrop3zYl3XA8/jS3FaoCkffkIkm0P90qub+n7qPJTa7ejwsEL8vPif7t9+Uzvq344fk7ceRWlLgXudhAopO+Jt9pbxOJDCQjPXgU1yD1dOllXkWctbqx07sZifDDdBLwPfVOkdbUVp0nOnQOWeCXVZ1dlA0mAg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=JCunioa4EWZjq32fQIVqtUhOCPm1ECOwtCYNIITpjdM=;
 b=K2TDbsRv91wKJQmTHUEPBTujtMGoDy6Ge+jKHiw5koZfiLTkX409ALE386wOkapLzVNPkh/GI4OV5JReN5csQLANhKNvjWSj+KZH3dmmFdA+QZ4R0YVr1dcEc4AEbYmHbjs+evYR5UHVr/tgAvKD1x71MH+UU2t1WuBXgejIzKEennZs2obG5yvuJOUhx8bWEx/9TXTy/rOclOfj5FhSUsqksb414WBDbnDOOuu8ytxwMXDFOOqVh3wqXyN6kWlFB2OFf8EuLyVk0bq1IKGIIPD1oW4bUqDAHqIRE6yi0SnQ2uIrIUCyu4kQJyaylbuWQZCiUIeauRvSWQZsAjJPjw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 5/9] xen: introduce assign_pages_nr
To: Julien Grall <julien@xen.org>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org,
 Penny Zheng <penny.zheng@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-6-penny.zheng@arm.com>
 <41a7389b-630c-6cf4-fa28-7d80cb79176b@suse.com>
 <e7e89abb-1601-0cdf-71d2-c22af86057c4@xen.org>
 <dab3331b-f3b9-4318-bf43-9f994c7d1121@suse.com>
 <b7220a85-6eec-278f-8b1d-d474470406a6@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <fa5f4ba1-c07a-ccbd-6ca3-7e1d6819b5d6@suse.com>
Date: Thu, 1 Jul 2021 12:13:24 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <b7220a85-6eec-278f-8b1d-d474470406a6@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P191CA0003.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5a98f9be-f3f5-41ca-fd4a-08d93c78dcec
X-MS-TrafficTypeDiagnostic: VI1PR04MB4381:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB43812147E59E2976D4C81B6DB3009@VI1PR04MB4381.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	jjKTi1diZH3eUNBZIioFIzZdsmm2tuv3OXmgAzojGohzv47EmMVLm9kkrWHMaSny7RXnOgpjNd4hxswO71PT/WFY9M0idEC3COAruvi6XPUvmKHtrTp4AP6hMGbrFaAZBsYDP3o5oXel5b86QF5EF4j+oDENjUy3zkROdhl9Fgmqehnqp8Swz8K5nJbOGY834muaTAdfQJwHIEMtFc5KZ8sK0TY9Qv+gUqml0/QCijFpRgWN7eRCC5o9nad5NqvxtdtaO2yvvF9w6IOy3gcOm3/cwRAmYQWMjBlRS1xLSKesP6kHgltTvRvVFQjQQu5fgj4YSYYRhhLrvJAYzZQ4KibMMQ+DJEMiW9xMKZOWEE/zUqFTDRuvNa0dVtIeFblk2aOTEN2qf7OhdoG0ekPMkzW4KuaIJwp0bW10ssAOWANMmjsZ+FEZpoM0Ew9nQG7IoFdbIrXf4GEkzWmMUO6irxB6hIGmtzV4TtDFOh5HYVcHqeAiDKvc7ZeF0PrIjxAdglWqp2ozWL2xTW7jbCQmnqYYDnRBWS3T6iesr4Di+pjLr568zE69BjOmfdJ1uIyu/a6m9MOrVBTDtn5/zuod0cvm4fYMvLjy7wzv7p+yKid/6mZAOeNkhi3f5oNEcCNT6MiY31As8DuwNys/UjZt17zKysq+DK5LTq/XfqY4pJeZXuJLcFhmi8dx9HJm42HF/K2Gl7e0fAfswH5ypI27NTt6UEtQ1uJoX7OJxkzreow=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(366004)(39850400004)(346002)(376002)(956004)(5660300002)(86362001)(2616005)(8936002)(6486002)(31696002)(53546011)(6916009)(66946007)(478600001)(83380400001)(38100700002)(26005)(8676002)(66556008)(66476007)(31686004)(186003)(36756003)(316002)(2906002)(16526019)(16576012)(4326008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5a98f9be-f3f5-41ca-fd4a-08d93c78dcec
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 10:13:25.2195
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 7mFr0k7tdkUes3HWt21wlYxwNLxXGNbkH0VS3hjvyV7VGzN/kClro73ewJhSZgrETFRX3vE+dzc/xxTLSJL11Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4381

On 01.07.2021 11:24, Julien Grall wrote:
> On 01/07/2021 09:26, Jan Beulich wrote:
>> On 30.06.2021 20:29, Julien Grall wrote:
>>> On 10/06/2021 10:49, Jan Beulich wrote:
>>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>>> Introduce new interface assign_pages_nr to deal with when page number is
>>>>> not in a power-of-two, which will save the trouble each time user needs
>>>>> to split the size in a power of 2 to use assign_pages.
>>>>
>>>> First of all I still don't see why in this one special case it is a
>>>> meaningful burden to do the count-to-order conversion in the caller you
>>>> mean to add,
>>>
>>> This sort of works for one caller. However, I would expect some more
>>> user in the future (we use it for Live-Update).
>>>
>>>> and hence why we really need this new function (to keep it
>>>> simple, you could even have the caller not break down to arbitrary
>>>> power-of-2 chunks, but simply iterate over all individual [order-0]
>>>> pages).
>>>
>>> The function assign_pages() will always use 1U << order (and sadly 1 <<
>>> order). So we would end up to convert the count in multiple order for
>>> then directly converting back to a number. To me, this sounds rather
>>> pointless...
>>>
>>> There are also a slight benefits to call assign_pages() a single time
>>> during boot because it will reduce the number of time we need to
>>> lock/unlock d->page_alloc_lock.
>>
>> Well, all of this is why I did add ...
>>
>>>> The more that I'm not happy with the chosen name, despite it
>>>> having been suggested during v1 review. _If_ we needed two functions,
>>>> imo they ought to be named assign_page() (dealing with a single page of
>>>> the given order) and assign_pages(). Backporting confusion could be
>>>> helped by altering the order of parameters, such that the compiler
>>>> would point out that adjustments at call sites are needed.
>>
>> ... this. 
> 
> Oh, it wasn't entirely clear whether you were objecting of offering the 
> possibility to pass a number of pages rather than an order.

Easily understood: I indeed we trying to express my preference to stick
to what we have, but trying to suggest a variant that I think I could
live with.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:31:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:31:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148603.274606 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytyK-0000LR-Uv; Thu, 01 Jul 2021 10:31:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148603.274606; Thu, 01 Jul 2021 10:31:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lytyK-0000LK-RQ; Thu, 01 Jul 2021 10:31:04 +0000
Received: by outflank-mailman (input) for mailman id 148603;
 Thu, 01 Jul 2021 10:31:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lytyJ-0000LE-72
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 10:31:03 +0000
Received: from mo4-p04-ob.smtp.rzone.de (unknown [85.215.255.120])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 113a42b9-ebec-470d-bd68-3ad1e2e5905c;
 Thu, 01 Jul 2021 10:31:01 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61AUo5ih
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 12:30:50 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 113a42b9-ebec-470d-bd68-3ad1e2e5905c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625135451;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=Y/umBz55iRwFQy474jplT7NWH63BSvriXmAsJ0ambaI=;
    b=QzRhUIRiFIqv4idpt40UEApO3wutsIy7YRQVAentS+hsL8Q5twDr5JWtMRU9/9NOCV
    YbPh/E88DAcxEX0dMRu1ZsAIEZ0xWVbINPtXhUw1M8Y48/zU0xWM3gdEUaFHG7LV0JOG
    Luyr//yX04nTWjvlP/WtaSbVLb9gvRcK4lvWUv2hf1ZHErHAuLpni3atR2AvcoGopnFW
    +QeUSRrdUElcbHQYv6lDqMxnk+Ekj9JxFETjFbBaDZguLgzb3QRm54QOhzwDIql62x2O
    Zeq5tI+TcCyCOcgx1bpx7DyHmdzuJ5yF740b3fSFPl3z12GbgrLpOLVw+32LjhXmntvv
    PkFw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAg5lqlz7EsstGyDcxK3Mbajr+SQKopp1Cb0CyyaZQQ=="
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v1] tools: fix comment typo in libxl__cpuid_legacy
Date: Thu,  1 Jul 2021 12:30:48 +0200
Message-Id: <20210701103048.971-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Replace emualted with emulated.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/light/libxl_cpuid.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/libs/light/libxl_cpuid.c b/tools/libs/light/libxl_cpuid.c
index eb6feaa96d..b2c673841a 100644
--- a/tools/libs/light/libxl_cpuid.c
+++ b/tools/libs/light/libxl_cpuid.c
@@ -465,7 +465,7 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid, bool restore,
      * isn't going to migrate, then the current hardware is all that matters.
      *
      * Alternatively, an internal property of vTSC is that the values read are
-     * invariant.  Advertise ITSC when we know the domain will have emualted
+     * invariant.  Advertise ITSC when we know the domain will have emulated
      * TSC everywhere it goes.
      */
     itsc = (libxl_defbool_val(info->disable_migrate) ||


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:37:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:37:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148608.274617 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyu4Y-000193-Mi; Thu, 01 Jul 2021 10:37:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148608.274617; Thu, 01 Jul 2021 10:37:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyu4Y-00018w-Ig; Thu, 01 Jul 2021 10:37:30 +0000
Received: by outflank-mailman (input) for mailman id 148608;
 Thu, 01 Jul 2021 10:37:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lyu4X-00018q-5w
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 10:37:29 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 822fb6e9-e771-4340-bc09-db7355af4b2c;
 Thu, 01 Jul 2021 10:37:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 822fb6e9-e771-4340-bc09-db7355af4b2c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625135847;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=WSCKT4OxFnyTL2XKksw+AQ3g+XGkrMfygXLYy+0V/Hg=;
  b=SWmG7SNpNvnS37iCYCvtfddWrEdlYlg7mXE0IRMdWPL+PpZJ9mvk2WOu
   KL1IqpxkXzSnabSYgTcNbXJq0VU5U3otmDe6mGifpT2Ax0edbzC5liJQW
   hZ39+UfNWrLtXDtNLtGJUAmuiJR5RiQTf6JM5jw+6dxhwnlMlbTNt1hN6
   0=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: kH4uyMaTgITXJB/Q66akr59F0sAN4W4KT+idpgkEgvZbLUizONMRudOyTSCCp0htWucfSva+gr
 a8l1XE009Ndffr7A7icfTCE/nj2tEpckrvm4C3bJV/MjqTD8xkJZIJOKJQjORKSpY311u+PDos
 2lbiVD7EI4UaPow0aZz3oH178oeCWkZdFn4hMVZP/k0cZ7FG8R6I+7xqv3x5l0Re3AT4i7CAxE
 /ctWOrroUo1wTTPk0NWLicKzkwAGjv6UCc7Yto6VTdU3epE2WQqJAPg8UkwKo8EU7V7lH5Iat8
 Ons=
X-SBRS: 5.1
X-MesageID: 47075608
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:DWI9SqpUDqWpGsZbaBHjvE4aV5vJL9V00zEX/kB9WHVpm5Oj+P
 xGzc526farslsssREb+OxpOMG7MBfhHO1OkPYs1NCZLXXbUQqTXfxfBO7ZrQEIdBeOjtK1uZ
 0QFZSWTeeAd2SS7vyKkzVQcexQueVvmZrA7Yy1rwYPPHRXguNbnmBE426gYz1LrWJ9dPgE/f
 Snl696TnabCA8qhpPRPAh1YwGPnayFqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD79jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbU811rhOkWO5Tf90Qjp1zgjr1X4z0WDvHflqcvlABonFston+tiA1nkwntlmOs5/L
 NA3mqfuZYSJwjHhj7B69/BUAwvvlaooEAljfUYgxVkIMgjgYdq3MgiFX5uYdA99HqQ0vFgLA
 AuNrCd2B9uSyLeU5iD1VMfmeBFNx8Ib2W7qktrgL3e79EZpgEg86O0rPZv10voz6hNPKWs0d
 60eZiApIs+OvP+UpgNctvpYfHHR1AlEii8fF57HzzcZek60iX22uDKCfMOlbqXRKA=
X-IronPort-AV: E=Sophos;i="5.83,313,1616472000"; 
   d="scan'208";a="47075608"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=a1QY/Bs03C3Re4fmkQogDI7qvPqug9oNl/aFQ4mXt1QY4HaNnboCyyWIpDYZHEmOn2slsuObchK/aQ8/EcD/vHaqIDKpMs4tc1XEOfVMN5CNVoHVE+iS2U2MTlB9UtqMy98f0WaS+RDr/Ui7MuXD9YsuiJJQQ5gis/AjRXUKI9x4kZ+pFbQS2nBDM95RM5P5S+p6U+tIEGLlVdz/NoORor+cY5kG5vHXjCjgP4G9APy9M3Sw7gb+n5DlneqBZ75DMplv7T69oSfEwAP8/lIS8R0X4l8QjuwnNvjHThGGazu29b3pNTp6IT3/i1kpCOH6jF117BC0f4gL1Hrs0miHug==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WSCKT4OxFnyTL2XKksw+AQ3g+XGkrMfygXLYy+0V/Hg=;
 b=QONwnpLk55o5W/Cxl4KqG3mI16XlPq+cZAqAwy0pq+pg5ev21Pnzl6/jR/2RLRn9YPSFqoozOS5UBmuAqmUIXpzEDYYqBl8nmDPISH77dL7aEr0IKAsMHvHGAGYHLd3ZQFCajrskYH1GnwvfR7m9/vWn2KFvv9w2FPw38QZ4ymHpppzfZ0OMIsixxzL5w+H6fp1QUqQ0Jqb4FSmcImj+AGsX/6yBKG01p6027efz7rlqZygbzgom2WY8BdkNRx3TNsJ530JpuuVF/DDIEvHrqVj3jag4hCX8JqGbjrBkMwd/o+qHRw1qLVzi6PjvRnnOHjRuScMMaThDbBzp54rFtQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WSCKT4OxFnyTL2XKksw+AQ3g+XGkrMfygXLYy+0V/Hg=;
 b=TbhqcEv/hbP4m3vIMyiOAeTgTJ1QPsYDLPGLvtgB4cc3k0wjxWozXqII1injOJCAFPulIE+7ZpwIJ08VimuNS72RRaCiMLRQrb3EuVvUUxmgFYfOZPO08PRdHa8bOzq2SbHOZ93pBw+nB0r94fTQRSXYygh4IZvu/yxyfMkWSbw=
Subject: Re: [PATCH v1] tools: fix comment typo in libxl__cpuid_legacy
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Anthony PERARD
	<anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>
References: <20210701103048.971-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <b6b4937d-dc71-bbdd-e00a-8777af9892d5@citrix.com>
Date: Thu, 1 Jul 2021 11:37:10 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701103048.971-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0223.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:b::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2697696b-9d7f-4cd5-2189-08d93c7c32ab
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5648:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5648FBACDB8DAB2FD882BF64BA009@SJ0PR03MB5648.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:400;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: geMAGgO56xMb+rDh4PbuWwH2VD5//WBGT09ARHFKGmjnlNwEILt56KdY1Zwa2XY+XDL2dWg3/LTPta8wSPLPfI0B7inkn9giNwkQVgG7jH7z9U38yJX5lKYQAimpgr+f7uEb3C9tzTtNjNL1EXXf89DOefERFHfz5kP9kw0iiVO0DwK1RgU47IvfHwNc+itwP0QrDIkNnbs+J5PTUn60lbJNTfNlCY4JutRiSZLTwtagpcAu6ZzFww0w4j50HN+0Qy0vSWRyYUokaZLgO34ZhzVol+gzy9O41/bOL3RtUSmu7obRyy4C2gQQthBJT1NGRpM7vYRbhnT1u1aVTbL1760M6vmXAPhATnngI6upZQ0q1xxH9b7fDETWgr5Ya6rj/lRPshnD7zMDrICUwdicgAbTODJSOLuf6GTIl0/X7uabGZ7p6GxArUwOVBfPjFAuVmRTSw9L/OHFaexgIhsoPJnMquNcrxPgO8RIijIfvdgBPX8WPkYJJiq0dtPwFgq5plpejdQcXMdHBoirJJ1rcXx4P8DUrMFMTbGClNZFqQ6c+lVANWHrSqk94rN6QmgN0JgbNYkxbo1RfIDB5xmEZg5gqWaN5DLwYQxISTnKuez4WmYkDD55Y/jmBjWvvo0xqwInrbxunHYmxOY1eWHIqrf2JGXWp8j3gQIvFDB8LiPJIW5wnS24jb8JTF0Ygss2i4vBFitTkXiIX5sIPBnSmeBQr+faR0q+LUwxcT0mzOPzBIzui642RGhO/ykr9GOMFPSCVLFOBUHTZC3BEjuzkw==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(376002)(366004)(39850400004)(346002)(5660300002)(86362001)(186003)(31686004)(16526019)(53546011)(31696002)(2906002)(8936002)(558084003)(6486002)(8676002)(478600001)(38100700002)(66946007)(2616005)(66476007)(66556008)(956004)(16576012)(26005)(36756003)(4326008)(6666004)(316002)(54906003)(101420200003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?Z/yEli98FUlj5rmciuAODS3Byn7A/okgYisGkgI?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 2697696b-9d7f-4cd5-2189-08d93c7c32ab
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 10:37:17.5192
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: vktocXS2LQAYFPcIbcmV/1YvpmYkRO0tJ/P+9X/OOaC8ysVc86WDOg0m5BiQZQxhYdYixXHEwRr0lV6OJOYhhXpnsIkSl0KTNAf1KzRW+Ws=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5648
X-OriginatorOrg: citrix.com

On 01/07/2021 11:30, Olaf Hering wrote:
> Replace emualted with emulated.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:39:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:39:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148612.274627 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyu6F-0001k9-1h; Thu, 01 Jul 2021 10:39:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148612.274627; Thu, 01 Jul 2021 10:39:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyu6E-0001k2-Un; Thu, 01 Jul 2021 10:39:14 +0000
Received: by outflank-mailman (input) for mailman id 148612;
 Thu, 01 Jul 2021 10:39:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=zJ+h=LZ=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1lyu6D-0001jw-IL
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 10:39:13 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a7fa66ee-63d5-46cb-a6c1-0a4362cdce9d;
 Thu, 01 Jul 2021 10:39:11 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2110.outbound.protection.outlook.com [104.47.17.110])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-23-n8oveD0ROeKPuBcTvYZ7xg-1; Thu, 01 Jul 2021 12:39:09 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5599.eurprd04.prod.outlook.com (2603:10a6:803:de::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Thu, 1 Jul
 2021 10:39:07 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.023; Thu, 1 Jul 2021
 10:39:07 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR05CA0117.eurprd05.prod.outlook.com (2603:10a6:207:2::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.23 via Frontend Transport; Thu, 1 Jul 2021 10:39:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a7fa66ee-63d5-46cb-a6c1-0a4362cdce9d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625135950;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=b0xtOFMSUTTAQEmkk1wxyYJrt+czH7YUmCcT1A65bl0=;
	b=XtPw6nwZixxZNpDrjNDVIxhboZXNpBwyJCyK7767U3Kb01nr8tnJOPVvmaIm0dzpUK3JRI
	h+x430LSTCa3AKWzLrTSmQLDrR3PrsTwnb7hTAiKum6Pm1ueSsIfWpFuELNwn88QHJLjj+
	nF46Lff2+LI7VkA/WWeTvnFl2k9rAYs=
X-MC-Unique: n8oveD0ROeKPuBcTvYZ7xg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=mNZkTjo0MY2ruxaD+3erLgT7+G3Ew0Kor0OjbuqI5SZ7HdkCJ6X+kpqCue+99GOO/11CgVPCiErX9ZE478yJesA+n+LVmP7WRjX1L1gXulvD0dADo9yUAAxSIHXjT08Na3HrfdIBqTBOArSk2S8L3AVZAcBXCKGhw4CF6QDPqPD+MEE60+CfdxPO4SwWuV8az/I05b4GQ2XorWPqGPVMYEwd44DeaoB0i0VjRmNMFd6AFYv+DbAbKjC05udVRV1rFgixPPo4VqF639BHmaHc2vqm571ClxVOeRIAb7aEFyC2jTdI6KjqZj8GIdOsdL30z86Fuy8MTO8212cMTl4pXQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=b0xtOFMSUTTAQEmkk1wxyYJrt+czH7YUmCcT1A65bl0=;
 b=UqbT22COKc+pYZJOP0m6HrZZegXz8ZOJ6+VHdsQdtrNx48BItCpojTy1DP893zCyqRvE0JbHzqshAmuPqy85c9bHkO3bmLuGio9EM9Y2iwu7Era9sb1vnuJG8VyBZWYh9MNKfXzXwT+0QsCru6q70C3iizmPUibuzGEtBRxsIy6CSs1SWWnSPfP0qPK7n1O6t9D8auCsUBI068bP5fYoEiHh2cUsxXVrTSf1fn3JLTOVVMgNMnsMXsGzS19RwbOIjeOWj3gPZCqfDBqzqwwu1XxzZZpaaGuSBnn4OVFwJlHd7qNNUBDs91wOIliq8zNPRwU2RhzKyRXz17WY9mB96w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v20210701 08/40] MAINTAINERS: add myself as saverestore
 maintainer
To: Olaf Hering <olaf@aepfle.de>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-9-olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <13a963c1-639f-5135-734b-9cc1c8d9034e@suse.com>
Date: Thu, 1 Jul 2021 12:39:06 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-9-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM3PR05CA0117.eurprd05.prod.outlook.com
 (2603:10a6:207:2::19) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 981d1cc9-293d-4264-dbd7-08d93c7c7417
X-MS-TrafficTypeDiagnostic: VI1PR04MB5599:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5599BD8DAB7A1A2244E9FA9CB3009@VI1PR04MB5599.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Y+/CU+GgGyuzU5w8K515II4xYotgvSuXGuLGeG52Zu4WPau6QF44c94bfBdZfN8OBZy+0eWyNkoEnA4fKAZmuTBt4x+yw8Edyhc+p9E7eQMEgQZjbZizJBStIpGpcuLcQTuxvc5nIGWSu21LDQrLiny8KjKd/LIU7BUI3V0znzlnRQXL7ceyX5GvMjWsJkWtqpqi7135doWRl9dSQoInv51OSejL/1GLPJMYukZX6IchCSV2lDYtUDOETPbUAcMIAzj7EXKaO4zqKJoglvAsNPMB4ZprTt9qXBVLKQdogrbzoHX4FU8A6AL/Ox/zxppvPEHrivYD3sZMcdwARs8tKLlW4wvCSMm5KcMkCE1eaYRF9CT2c2w9hidKjJHcVoId+sYM6YNpHi0P/ydJMBloHN+juZv8SKDjSvBswId5woTxWRFIRbAZCNaQeXhrgWiJWNbToB5Xo0QAQHFimplSrd0ZxNMgxjre4yshoOmVRTLG2zp8Y7OD6mKcJiREaMdWUUYU+AlAm8HDu6v8fpehRaqquzYQzJN2xITwfFceE0V+tMHjzRH7jQPGFHxxpd7IcFyrCWhu3c/tsYpYqUdD88imrLmBxHFkYCK3mHWnFg6I0rdJmBukdc1qb8iv47iPF1r8cz2CXGfITX+t/0BUA3Hn4Mfy08hydIf/SCo5eMG/vw4yb7JVq+vFCwyoeRmzx/t8k0m5k86lu6CxLesyDF2ezZf2gOYb/O7VO2vrB5u0H+FnTabWUTHm8ZV3kE2x
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(366004)(39860400002)(136003)(376002)(53546011)(4326008)(5660300002)(31696002)(36756003)(26005)(16576012)(86362001)(316002)(6916009)(54906003)(8676002)(478600001)(6486002)(8936002)(66476007)(2616005)(956004)(31686004)(83380400001)(186003)(16526019)(2906002)(38100700002)(66946007)(66556008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 981d1cc9-293d-4264-dbd7-08d93c7c7417
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 10:39:07.2207
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: KqMCRx/av09Rv2Z61n9kfvyYoBQw5pGnL7ixf+HRXtJ3pwtwq/eUfZNz9ZZKpBbH6w57KpsgFvAN2UrmU4YAkQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5599

On 01.07.2021 11:56, Olaf Hering wrote:
> I touched it last.

For my taste, this is too little as a justification.

> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -381,6 +381,12 @@ R:	Juergen Gross <jgross@suse.com>
>  S:	Supported
>  F:	tools/libs/
>  
> +LIBSAVERESTORE:

Nit: DYM LIBXENSAVERESTORE (and hence for the new entry to be below
LIBXENLIGHT)?

> +M:	Olaf Hering <olaf@aepfle.de>
> +S:	Supported
> +F:	tools/include/xensaverestore.h
> +F:	tools/libs/saverestore/

I'm afraid this goes too far: This way you remove all prior
(direct) maintainers (see "The meaning of nesting" in
./MAINTAINERS). And I'm sure Andrew, who has written much of
this, ought to be considered to become the maintainer of this
code then as well.

Personally I think you may want to take a smaller step first and
insert yourself as reviewer for this library. See e.g. what we
had done a while back for "VM EVENT, MEM ACCESS and MONITOR" when
new maintainers had been proposed. I may not have a sufficiently
good picture of reviews you've done in the past for this part of
the tree, so I'm sorry if I'm missing significant work you've
done there, but surely my recent series fixing code in this area
could have been a good opportunity to actually do a full round of
review, when you have the intention expressed here.

Jan

>  LIBXENLIGHT
>  M:	Ian Jackson <iwj@xenproject.org>
>  M:	Wei Liu <wl@xen.org>
> 



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 10:56:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 10:56:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148619.274639 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyuN1-0004E6-MX; Thu, 01 Jul 2021 10:56:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148619.274639; Thu, 01 Jul 2021 10:56:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyuN1-0004Dz-JZ; Thu, 01 Jul 2021 10:56:35 +0000
Received: by outflank-mailman (input) for mailman id 148619;
 Thu, 01 Jul 2021 10:56:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyuMz-0004Dt-Q9
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 10:56:34 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.24])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3e62e775-6d61-48c8-baee-50645f63130d;
 Thu, 01 Jul 2021 10:56:32 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61AuU5sD
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate)
 for <xen-devel@lists.xenproject.org>;
 Thu, 1 Jul 2021 12:56:30 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3e62e775-6d61-48c8-baee-50645f63130d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625136990;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-ID:Subject:To:From:Date:Cc:Date:From:Subject:Sender;
    bh=ymHzSP6b77tUdg3MpeJDDfVcEVfHHO864QOF6PwBG1g=;
    b=Dwb/yeksOmWR9RF2Osz7ByQzel3gLf2HXdzXMWDs+cqt5v6EgN7oe3gxD4XYDX7J40
    iy+XLrCCfDRrFxLyhTixVVv2M+ehIqn4EVrLbGaIJ43Ht4zPR3L7IZf3zZXqb5rUi0Pc
    gfEHf+R9TsS/To50i9gKO+ddvJOTlLA3rMaabrsFOiz3rLQbpXIA6WqbwPs8B7WjtnUe
    cryYqw4UIlvUJ3a4Zi5hESGmyo6x82TBds2anp8EQRpXuqJiMdpo3Rq4r+HqJV4z5nM1
    2KXIkqFrWkqQHqZKmOUpbQH2Wy9km5Wbq+/hSPwMluJepX2uxL8jigL8Xo7zqa00Pfsh
    ryFg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 12:56:23 +0200
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Subject: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701125623.593fe3ae.olaf@aepfle.de>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/LWVxqIjpQLVhhKfHVDp2z55";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/LWVxqIjpQLVhhKfHVDp2z55
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

For some reason migration of HVM domUs from pre-4.14 to staging is broken.

It seems xc_cpuid_apply_policy gets nr_leaves=3D119 from XEN_SYSCTL_get_cpu=
_policy.
Later XEN_SYSCTL_cpu_policy_hvm_default truncates this value to 31.
As a result x86_cpuid_copy_to_buffer returns -ENOBUFS. It would copy up to =
51 leaves in my testing.

I suspect commit 34990446ca91d9e201ff17bd4e3f43bfe3ad308e just revealed a l=
ogic error somewhere.

What is supposed to happen in libxl__srm_callout_callback_static_data_done =
when XGR_SDD_MISSING_CPUID is set?

Olaf

--Sig_/LWVxqIjpQLVhhKfHVDp2z55
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDdn1cACgkQ86SN7mm1
DoCOoQ//cITmXnQdiJkpKKzg8mZhmG8UsxVmRg4uB3npq/hLTHxBFFeDABexv3h3
59A40YTjwTK+iqYfWeayFG00XM+QP8DbgUup2gpSbmRBUH7iEBVe0EY4jvS99avb
S6QB9Xn3Qy/dqCDN5CM+I0fnxsivPrdnztL1IGeKdnOHvAqwdvJ4DFBH2OLhy17E
rnODuM9B0/D2fEXDjXUdPxdoeNIVbhaKBvmaItG6dqfT1ttnhBgXsCWEzha198vN
7F8QsuBeLMV65TEpKwWhSSoKembh9h7MVgcoX26R4aZSv9RXdERzjNBDFsYWTrlw
0BZHL/TE3awSFh2p5dNUTTPRdshtjW5jKqGf+ynEOz0HZFq9I3m47rbo2fwC7j+S
IaRMFLEkeR/VDggM316dFxP2zAc/1nQImqBhgYN0EkXHp+hc/AU3luitzb/6Ir/D
nnykhMuMQ7dWLJ69j/n5mflQor6Gid2lLdFp3x8S7UlTLgs2FbfltuSRBRnDMF6X
JQ4h8psNqYV7ccXhoeTXFAofPZ/F5mF/AhnIP/cK+kKfAZV/rHE13ISoHrJESXQN
TYHwCrVFrVihnOAqObU0xBmcGuDUfI8v23P4TmPXXI4jlN/gTxKspfyLYxsayTDo
oVr3wQrq+p7LlZhD3Cm7pF+Lftu65c1Z3n9lmSX/4QsQN7XorSE=
=lUM+
-----END PGP SIGNATURE-----

--Sig_/LWVxqIjpQLVhhKfHVDp2z55--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 11:02:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 11:02:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148625.274650 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyuSC-0005fM-AQ; Thu, 01 Jul 2021 11:01:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148625.274650; Thu, 01 Jul 2021 11:01:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyuSC-0005fF-7D; Thu, 01 Jul 2021 11:01:56 +0000
Received: by outflank-mailman (input) for mailman id 148625;
 Thu, 01 Jul 2021 11:01:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyuSB-0005f9-2J
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 11:01:55 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.53])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a5879899-d063-4e70-95ec-c059ee4bf8fb;
 Thu, 01 Jul 2021 11:01:54 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61B1q5uX
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 13:01:52 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a5879899-d063-4e70-95ec-c059ee4bf8fb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625137312;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=1Ft3d4S2jt1ugXiZnrYmhDGS1ySaDt8cXXFb/3BIPAA=;
    b=ODtG48Ub/xAzJCrdWPRb54gQQ4meZRvv8XJLwtn+vaFX9shs4mT4hHtaKxM/lRz773
    fzHH5xIjNzxT7JQrNeS6K6QWDeCz5W0lBX6mmC9SY0cSU9gwuq7fKfHgCKpi5wcLFOzb
    sbBzA1jF3e/eZuWx2mU7sE+wo2cGCDnU2MuNCIBs8AA83KWmRiRv5rEKwxm9Xnko+9tT
    BSC13rke64cE9AuByc97Nuk+u3zumFpSesiIvWwN7V0Si7jaYhOc35Q/VnDpZRzV5xg5
    nUhPwZnK37s0xTADktkS+0xGe7WV5DWMf3u1fxn9MJ21ocZhiyz2JfDZ3ARdjz1efOzn
    DAxA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 13:01:43 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
 <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
 <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
 <wl@xen.org>, xen-devel@lists.xenproject.org
Subject: Re: [PATCH v20210701 08/40] MAINTAINERS: add myself as saverestore
 maintainer
Message-ID: <20210701130143.2b8cfce3.olaf@aepfle.de>
In-Reply-To: <13a963c1-639f-5135-734b-9cc1c8d9034e@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-9-olaf@aepfle.de>
	<13a963c1-639f-5135-734b-9cc1c8d9034e@suse.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/hnFDd7g=OsxECGa+S219NuQ";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/hnFDd7g=OsxECGa+S219NuQ
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 12:39:06 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> I'm afraid this goes too far: This way you remove all prior
> (direct) maintainers (see "The meaning of nesting" in
> ./MAINTAINERS). And I'm sure Andrew, who has written much of
> this, ought to be considered to become the maintainer of this
> code then as well.

I think this was copy&paste from some other entry, which would still includ=
e the tools/ maintainers when using get_maintainer.pl. I do not remember wh=
ich one it was.

Also I think if Andrew would have a desire to be in there he would have add=
ed himself already.


Olaf

--Sig_/hnFDd7g=OsxECGa+S219NuQ
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDdoJcACgkQ86SN7mm1
DoAmCQ/8Dcu9wPw+Og2BtFApKoZlKp2HGXc+NttVZ3mUwhPP2Zf+epS70Fp6tY+m
SkFWXCd/xHUN0/S9xEMYtq1cDO9+QzhThUZU3w328UJqWd0t5wtYeVWo6eynxZGI
lOPV+f7zfKseuP6C5owS2Nakl26XhucE+XOa8f+zb2PAGC4kcK+1GnOOJ0hLDdtq
Ip0dTi3z94zZqXzqv1D68Ce/hYxrCeutH8Xt8oD5SgjGWOSX9BAHPnJXSebcmKbN
IYBGYWTJDxKlV9kmyPLHuTxXJPy8TuyH+dQc0qDYQG5fjyhZBJc7MGeKrF7xWurt
nQHC7WlXHAFbWRJkL1JpZPxIKOAkO6GlKOSrMQAgqlg2BTrJNdPMevZ4HJrtN0di
Se7Y7q7LQgUmE82ozwb/yUMdFwFIRtkl//DDV/X4aIWWy5DnddVI8bhp8nCSnpOV
b5swpfyvZFll0H5RO8aavuOWZL516F+/voAYQk/EqqMHZ0jPCn1NQ5uVj8yKvOGq
qRLwBqAVhFAezqvGyT/CvfHK1KB37ir6qZnJBUgpPzOjQT9unt79NwZyGeGHgrRu
Cd//7GRENf1p5ZgCOHw5u54GchNbhIK878TeD1kjsLNTtx6t6Vq89Cot535veKWF
JYVCR9BsSsv0cr+OvjHzTg7tK6OA3jwVbh/VOSACCx4812Ojyn8=
=G4ey
-----END PGP SIGNATURE-----

--Sig_/hnFDd7g=OsxECGa+S219NuQ--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 11:19:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 11:19:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148630.274661 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyujJ-0007Ee-Q6; Thu, 01 Jul 2021 11:19:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148630.274661; Thu, 01 Jul 2021 11:19:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyujJ-0007EX-N1; Thu, 01 Jul 2021 11:19:37 +0000
Received: by outflank-mailman (input) for mailman id 148630;
 Thu, 01 Jul 2021 11:19:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lyujI-0007ER-3R
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 11:19:36 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4acf82cb-6e15-41ed-b175-bdd9967fd515;
 Thu, 01 Jul 2021 11:19:35 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4acf82cb-6e15-41ed-b175-bdd9967fd515
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625138375;
  h=to:references:from:subject:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=QNk+aQRxXzhpWD8DJgJK2eEl3dKt+LtyV24JvxMfyak=;
  b=J0vFS9WGa17ivU79sY7N0f60OuAh59eh1vrgXZQ2yw3TQUuIOHUQqMdQ
   wgqkTLmyyhZrHQJJgNjjw/leXaT6vG7yFGY1Vj/wHbhZF/9CbNfXYP2/e
   gapjQ9fh6tDekApqX2SFqdMbjgZn8bbHV2+TOhtXMGpJccTWHMoT2N++i
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: PqilrLgr1TMgFGVyEJrz/LHvpEtxIAuTvH7IISt0frdnVyLRolnwk8kW2WL2xIXaFQ9zG5DTCc
 pfOFX5lDTo1ZFj+BKSw/bIrdjW9UE9ELyZ+rmcnrTk3SZiM7yDlNC5BoLglBhMrXrGUih4O5WG
 5YkhZAq2vTYZTlr/YoVZOs/Ve/v3iUZNHgJ0nbLcnnBLwo6rAgbK9mchyvc4R2bu2GUz4h+jpX
 BPNye/QGX5Hp739xO7IjBmnGCMCScWHO6OnZ4JeYZlWIGgml5vu7VCqgM71qOtzR2/gg+/uDUo
 mPo=
X-SBRS: 5.1
X-MesageID: 47359628
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Wb35+ansY0b5XNqHBc2tMp76svnpDfPaimdD5ihNYBxZY6Wkfp
 +V8sjzhCWatN9OYh0dcLC7WJVoMkmsiqKdhrNhQYtKPTOWxVdASbsC0WKM+UyZJ8STzJ876U
 4kSdkFNDSSNykIsS+Z2njALz9I+rDum8rE9ISurQYZcegpUdAF0+4QMHfqLqQcfnghOXNWLu
 v42iMKnUvaRZxBBf7Ld0XtEtKz6+HjpdbDW1orFhQn4A6BgXeB76P7KQGR2lM7XylUybkv3G
 DZm0ihj5/T/c2T+1v57Sv+/p5WkNzuxp9qA9GNsNEcLnHJhhyzbIpsdrWetHQeof2p6nwtjN
 7Qyi1QcPhb2jf0RCWYsBHt0w7v3HIF8Hn502KVhnPlvIjQWC86I9Apv/MbTjLpr24b+P1s2q
 NC2GyU87BNCwnboSj779/UEzl3i0uPp2Y4m+J7tQ0ebWInUs4VkWUjxjIQLH9ZdxiKr7zPUd
 MeTf003cwmM29zNBvizy9SKLXGZAVAIv+EKnJy8fB9nQImxUyR9HFos/D3qE1wvK7Ve6M0k9
 gsDZ4Y4o2mbvVmJ56VV91xDPdeNAT2MFvx2TWpUCra/ec8Sirwl6I=
X-IronPort-AV: E=Sophos;i="5.83,313,1616472000"; 
   d="scan'208";a="47359628"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OLVPvGC/+I4u7z3fPaFbPGIhSxMLIKQBzOeIOryKStZy4xuvQ7/GEgiMg9G4eqcMK/HbPNUMraIJWc+b4IxYfxIrsSXYKrugIujkqCA629M5SSryAesxhzn08QSJ52QHo4WCarrP53zEkQDk7/vS0eh4eUCh9DPkviIN8dOHjrYzXymCLFxXR96SjTphsO8/PA5Mq3R9+r9emG6iCoCN7/ytZEmAelBn6r3iwCKRWac/RtXT4hhNHhMIsfjxHJd6yaSahiOTBVAZ0kmPQyquB7HhmJ2F5538l+fdMlRzH/d1v9MoHu9Bug5JH0jmdWiQDrg3RbpNabrAmT4ww96DUg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=QNk+aQRxXzhpWD8DJgJK2eEl3dKt+LtyV24JvxMfyak=;
 b=G6jRGKX2UBwoczsfrYgdjrwb/bsaATk7QFBEKUMhn4gMPlOAFDgNyWk/hFZDNTU2f9LNlFxXfAwXW7FETEt8SsQEpzKE10jden9/UEZk7tGYwymvHdngniUNV9TslZ3i6CpBP7l0C9PNmfPjSYyjcnuXIitFhKGSlqW1YaJoRCc3XNdXn2r0n1iQfi56bZySOZtTdrqFQTVCCqOzoAL/qskrT9wuBso16I8BneB9eu6m6FIderZnF/yC4z92lpDkbrJpGRZCjPqfM6dTYkaJeoiDGrw1h6Vfq0OMUhTQAPV6vX1X8jekifoDfMGqelJZisq/GqB9nfO6Vm0bxv5jGg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=QNk+aQRxXzhpWD8DJgJK2eEl3dKt+LtyV24JvxMfyak=;
 b=r1q7EkHk4cHhXbaanPLT5JZuq/1PqCnjsFpD4ozokQGDO8EAlUC75MjwWQfSrBNfPBB3fAf5O9myCaePgM95TfFrjllP2C9v+wjY7S1zKAroo0TqJH2NyPG5yP+FL6jUM/iQ3r4Z9dtuWO3oo/UnkNpr3GOFEV28iqAMnsHg9ws=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
Date: Thu, 1 Jul 2021 12:19:24 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701125623.593fe3ae.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0461.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1aa::16) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fdae81e4-c57d-4dd2-ba8c-08d93c82185c
X-MS-TrafficTypeDiagnostic: BY5PR03MB5078:
X-Microsoft-Antispam-PRVS: <BY5PR03MB5078DE3E38FB1C8851D502EBBA009@BY5PR03MB5078.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: HLPSbBFfc5GuCT2D6+ShGQcV65qBligUPvR5dh0nvLa8oEenFzdRU3EKhzmBXPdc9zNiSaZ1lCBWSjvGe+C2nB6zYz3344niWIX4ninMZ6+u5AaWNhni1o+ihQpMCvj1LJflGknis0c6y0wGIG8DH2h8SBKE15PYNGdYbFgWkum6VsMOYO9eDeh3kxE/bwfk5LnPMSv3SbhMneE7EfiV6Cplsz5+Fm0BTAH2MHidH1PMqnrtEWZHjkGbHtxreFjdLL+AxH34kalO4QK+P1lO2k6+CTDWBhUTfyuINHnlM2RvtrvgMWi1jtk9wqQ3kahE9493GrX6ez8SNYl7v8koD+TgvM87s8e0I1VBQkqLcgNEnAJb/WLhg41S624wTS3zhOYcTWBDFbklbQ6C9VSMFSwoa75V3iAj2rhAS00LOOJbOTb/+P+dbIbBLiEekKr9Vo0onaQptFJULVvsi7/QYBqo3rCoe0T1S876ISwabGHt1Ugk3uxUGwJiv9qFiTBPvNzsTxvhDbeGKwTMr2f9z22rzagaCmPHLOfkenPKOeGQeZJfd5OegTnYg47Q093Tz/9NDRZIKF+fwIdc/TRcWJCGmDFucmcVeVqwKYNyd0LkRW8u1JkVYyIdsE7qXsfX33gkSugUmzDuPizV0PPUQtVm4U8dA3XnwKUBpgFBx8oCqnL6CSotOpueZ6nol0TYgrP0HCGllgtYDDR/+FMHfEirx8jPtM0yvZYeSpB6B1NK92NQzy1DivnLa+7CMi4k
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(346002)(396003)(366004)(39860400002)(8936002)(956004)(6666004)(31696002)(2616005)(186003)(16526019)(16576012)(8676002)(86362001)(316002)(31686004)(66556008)(66476007)(36756003)(5660300002)(66946007)(83380400001)(26005)(478600001)(53546011)(6486002)(38100700002)(2906002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?1mqasmpYFXQjRP17cqCC0DEbipN8BHSjBOtsAvU6xH+3DHY7rDOctxYK?=
 =?Windows-1252?Q?ijpfHvKhSiHJej2eM3MF10fuAzPOhx8fgcZWlrflTvWyoj4Lrcbgf62N?=
 =?Windows-1252?Q?v/iMQbjSXreQQqz/OSlq0LQLUz4QMDQvR4pgRLQWlTYqlIsxdVuhMAdB?=
 =?Windows-1252?Q?fcGnEKD6OGC9DaDyez9NI76YcbGFcNzQGaWO8MYAnugVykGaDlTFn/oK?=
 =?Windows-1252?Q?FCLz5lmpYo8YL1Lows5GI7Sfd8jD1q2sLjn7z5zpPlXtiM9QpS1GTLDn?=
 =?Windows-1252?Q?3jcFHD42f9MWlH3FmEHyR7KoJnYxd7VYV8CBuN3fmzCfCWIcO289iT9h?=
 =?Windows-1252?Q?PQ03rCpa17NrXAyEkRaPnvR6GtkbyCK6ASOwZPvJICOT90QBwr+x9xU+?=
 =?Windows-1252?Q?LSH/LZRYNLzODTH+RuRv96bXUabDoLRWdnvNdNkZhJtJyoAB2ymHNxb6?=
 =?Windows-1252?Q?l4KqYUpqHqd+j1RrKET8mWyd6L3PYq5tN5CUBDEpCUgdjN213tKOA5LE?=
 =?Windows-1252?Q?NqI/3NJF4vzNuD30Rvcu5isHZTu2f5N+xQkSdKYRdNqBRTkO6vv2DTyA?=
 =?Windows-1252?Q?JZbEEMaLe1n2gamxlUIT6oQwkWB75Y/nKzo+d306B70WNFf2uVGxreXZ?=
 =?Windows-1252?Q?9oJ/rIB+HSPW2jzh5WKsG7tnAuS9rDXKHS5ddVVpjNNKEMIZxnk6sHsX?=
 =?Windows-1252?Q?tl7ItK9tEWs5rEdzDRCW+dlUT95Nn4ppAzptiCXXEFGHQjg1clSXaXC5?=
 =?Windows-1252?Q?RbhMNJm2xHJqQXhtR3oQSJeVMTvmKvVYSxF3AupU0V188HYhEyau35Mu?=
 =?Windows-1252?Q?Tlv4cjzgNEo92foswatWIMvbCmDAzb0Z1umqEA6P6fSBVbeRnpUw4igC?=
 =?Windows-1252?Q?aDrznjakEpLVBKQs3AqT7aqR6oToOxiyYF48NYbol+Ko4mf0MZsaYnzE?=
 =?Windows-1252?Q?OhvtyVETQHC3CzRMTArVT5NS84oCsAkkXeGMtgWXPZyL/JPDgQdtXr09?=
 =?Windows-1252?Q?4/lwstqVgZ/0n+UrKWJD4HzAs2AjR6r5Q6GHc9vsGCFPByGrQco7fWM2?=
 =?Windows-1252?Q?v89d6dY9CmCtqEP6uje7REeI8Cz4qdc14dgPd6H5fJT008fOzPd8h/5l?=
 =?Windows-1252?Q?3AfDRPKXTHvYJK3gDfR1Hz9aZI5QnOjcmdLJpOLyPiRLOqLxHXb8UOXT?=
 =?Windows-1252?Q?HsPGPBRnwI6Aai+ppto3UWMhOcdpHE0pVKt2A7XLHDJpERoL0nCNN7pN?=
 =?Windows-1252?Q?TneVZRwHGX9jt/aVsd//VpTCcCbYv8nbJ5E2PigSJ5KrTtneRo8VPUvp?=
 =?Windows-1252?Q?C9ciwFVyrFxVRm5rCreDHKErfhjTqSFW5mNUsbDkpScHjeaUGK8fodpw?=
 =?Windows-1252?Q?wKtSSlt1/rYlKkva1oYyxJGsPjmxJ26NBIKEAHdixWljBvl+KZ35QkaP?=
X-MS-Exchange-CrossTenant-Network-Message-Id: fdae81e4-c57d-4dd2-ba8c-08d93c82185c
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 11:19:30.3600
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ZItATBG/H11RrX+qDqMB3qJZOcqulfQie7JvDUItxnd7V1NIEQiP3ByjHWXglQHBtg7nlMUv5JUAdlZasJV7nuOZY/lciRX852i4lPs9Liw=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5078
X-OriginatorOrg: citrix.com

On 01/07/2021 11:56, Olaf Hering wrote:
> For some reason migration of HVM domUs from pre-4.14 to staging is broken=
.
>
> It seems xc_cpuid_apply_policy gets nr_leaves=3D119 from XEN_SYSCTL_get_c=
pu_policy.
> Later XEN_SYSCTL_cpu_policy_hvm_default truncates this value to 31.

119 is the maximum number of leaves to cover sizeof(struct cpuid_policy).

But no CPU hits both Intel and AMD max leaf, so we can unambiguously
represent the policy with fewer than 119 leaves.=A0 31 is the count of
leaves with data in, on this particular system.

> As a result x86_cpuid_copy_to_buffer returns -ENOBUFS. It would copy up t=
o 51 leaves in my testing.
>
> I suspect commit 34990446ca91d9e201ff17bd4e3f43bfe3ad308e just revealed a=
 logic error somewhere.
>
> What is supposed to happen in libxl__srm_callout_callback_static_data_don=
e when XGR_SDD_MISSING_CPUID is set?

One of the many totally broken things about Xen migration was that the
guests CPUID data never used to be part of the stream.=A0 It was always
reinvented from scratch on the destination host.

This had fun properties such as the CPU's family/model/stepping changing
underfoot (I'm still amazed that VMs didn't complain more about this -
windows would happily install a new HAL driver and call itself done),
and less fun properties where some features just disappeared totally due
to changes in xc_cpuid_apply_policy() logic.

Starting in 4.14, after I'd added a "please get the guest's view of
CPUID" hypercall, the CPUID settings the VM saw move in the migrate
stream with it.

XGR_SDD_MISSING_CPUID is the signal of "this is a pre-4.14 VM with no
CPUID data", which means "you need to reinvent CPUID as the toolstack in
4.13 would have done".

This *ought* to be "grab default, edit a few details, send back to
Xen".=A0 Where is the 51 leaves coming in?=A0 Do you have cpuid=3D lines in
the xl cfg file?

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 11:36:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 11:36:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148637.274671 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyuzo-00016K-CH; Thu, 01 Jul 2021 11:36:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148637.274671; Thu, 01 Jul 2021 11:36:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyuzo-00016D-9G; Thu, 01 Jul 2021 11:36:40 +0000
Received: by outflank-mailman (input) for mailman id 148637;
 Thu, 01 Jul 2021 11:36:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyuzm-000167-Oy
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 11:36:39 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e469171b-012d-4977-9272-025a76b7e0f0;
 Thu, 01 Jul 2021 11:36:37 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61BaZ6AK
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 13:36:35 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e469171b-012d-4977-9272-025a76b7e0f0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625139396;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=EaTkDCsxmG/5LAoOL5R5PfPFMnYdKWar3UPZ1YO5J0w=;
    b=hKQzMm0H8qKtThJK/InXZzNpNWjZbVuJEX5fsWtiGnp1nsYyTINWEfhaFtawIBOJcp
    NRmjKF6DMjoY/4XXzTOTLrAAn9MMo6GhW/R5NlyZ5007Qr274aV0ymAg3c7oh8uR2Bjb
    fE70EB8VfcdSMLkGA81f5JoujOdPUDO8dxC4zXRayQSU7vuOc27fWdhNv9r56J62IlIz
    VjcRPb+tSsTAqBgL4rbv5i3R3ceVFfjv7AtK7/7cupCrfFgd+RlIp+FGTun/S9gAn55V
    /IABpN7o1iflBlwalipOOCVQ93VGmcWWZimtWvZmf3DfgWMPz7W9SX9dJQE17zvC9eqx
    EK/w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 13:36:28 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701133628.1667a344.olaf@aepfle.de>
In-Reply-To: <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
	<20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/V3f5fxObco4H8QqtSU1IZEa";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/V3f5fxObco4H8QqtSU1IZEa
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 12:19:24 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> This *ought* to be "grab default, edit a few details, send back to
> Xen".=C2=A0 Where is the 51 leaves coming in?=C2=A0 Do you have cpuid=3D =
lines in
> the xl cfg file?

No cpuid=3D or anything in domU.cfg or Xen cmdline.
If I understand x86_cpuid_copy_to_buffer correctly, it copies all of basic+=
extd and viridian+xen leaves, which is apparently more than 31.

Olaf=20

--Sig_/V3f5fxObco4H8QqtSU1IZEa
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDdqL0ACgkQ86SN7mm1
DoBpUA//SB0yjRi7AFikeKxfZKvWSpI00sf+1jzVHYGWzQEwH7jT5qtRLpRYwgBS
PQm/nyc34yBQDZN7OJWbzrFBOPifrhM3DkQqp3H9tcg5xfogvUOWRV7x/U+i86iP
1ibN4h9rwldj+AYQ0EXKHdt1DWMPQ6KIDpDuXNJscLEECE7B5wy8zOyglVOsivYJ
ZnlnOy13xzPmf1V3B7aW4R5pDLkGu3rO8xxB9bsTLDrEdSMzFoPlAaqjBJgo1fLE
pj+ycafjcFLXL5W8hrIofJ4cGfJVu8S2DNhuPHRo/D+aO1yESIfUh4sveYItQO2n
Ds8Q2NwLgcFmRr7wmNYvKFeRDRIemz/F+eQPbH/L0c/2mZxg3mU3rIsPJzLtwbCI
RDeY1JX2ZLL+CIf0NDilePOeytalJlnfJLlPb9HcgDaAia2qzBY1FEM6Qn0tmc4m
HeHA6/7Ck0KDTIspfdfrYekH6nBLoAoTOfWQWeI+WVMZna55n17vQFQqFcxQDX0k
rsjHTnq90HKDTE2uHSnmqoBCq+w2621Bn4ifL/0PGpnEjMeGWPxx5ZHCdrgTU+Bc
Imrh+xrLq6cCnzgY/WwZRIm10yCw78mkCWBp0p+MuV76/AFrSuaXS+hX+DjmXjMM
q83aoyRxMggFAYU03oVLUGVj01jB5SVBCof/H2O3NyHOItuhU+I=
=FgNt
-----END PGP SIGNATURE-----

--Sig_/V3f5fxObco4H8QqtSU1IZEa--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 11:40:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 11:40:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148641.274683 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyv3F-0002SQ-T4; Thu, 01 Jul 2021 11:40:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148641.274683; Thu, 01 Jul 2021 11:40:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyv3F-0002SJ-PO; Thu, 01 Jul 2021 11:40:13 +0000
Received: by outflank-mailman (input) for mailman id 148641;
 Thu, 01 Jul 2021 11:40:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lyv3F-0002SD-52
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 11:40:13 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lyv3D-0003nr-Qg; Thu, 01 Jul 2021 11:40:11 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lyv3D-0006D6-KH; Thu, 01 Jul 2021 11:40:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=qrHHKDwLGVAwuZ8YDEmJvO1B5Md1+6hA43DjhdVqj5k=; b=cdVZosP6NNW3LlUp4gI+YlaFds
	A4msxS1TOnxTapS/qF/mqe6pfUwGxn1UZoqn0IFkRrlisJiGQo6CBUwtUmZqWLXltzWWDpribNapr
	8+je9hJkcReo0/3T1RSa423bI9mWRcHH3f01t0keDjeFU+4FAUiOk6QTaZ4Tq+h1oAZ0=;
Subject: Re: [PATCH v20210701 08/40] MAINTAINERS: add myself as saverestore
 maintainer
To: Olaf Hering <olaf@aepfle.de>, Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-9-olaf@aepfle.de>
 <13a963c1-639f-5135-734b-9cc1c8d9034e@suse.com>
 <20210701130143.2b8cfce3.olaf@aepfle.de>
From: Julien Grall <julien@xen.org>
Message-ID: <07174c4e-cf39-66c2-c3cb-27b728dc5819@xen.org>
Date: Thu, 1 Jul 2021 12:40:09 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210701130143.2b8cfce3.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Olaf,

On 01/07/2021 12:01, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 12:39:06 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>> I'm afraid this goes too far: This way you remove all prior
>> (direct) maintainers (see "The meaning of nesting" in
>> ./MAINTAINERS). And I'm sure Andrew, who has written much of
>> this, ought to be considered to become the maintainer of this
>> code then as well.
> 
> I think this was copy&paste from some other entry, which would still include the tools/ maintainers when using get_maintainer.pl. I do not remember which one it was.

You are mixing CCing and actual maintainers. You can be CCed without 
maintaining a directory.

Jan's point is tools/ maintainers would not be directly maintaining the 
library. You would be the sole maintainer of the directory and Jan was 
referring the following paragraph:

1. Under normal circumstances, the Ack of the most specific maintainer
is both necessary and sufficient to get a change to a given file
committed.  So a change to xen/arch/x86/mm/shadow/multi.c requires the
the Ack of the xen/arch/x86/mm/shadow maintainer for that part of the
patch, but would not require the Ack of the xen/arch/x86 maintainer or
the xen/arch/x86/mm maintainer.

Regarding your proposal to maintain the directory. I don't follow much 
the tools side and therefore can't judge the merit of the proposal.

However... this is not new code per-se and therefore the fact you touch 
last is not sufficient (otherwise I could claim the same tomorrow if I 
send a patch to the directory ;)).

For the commit message, I would suggest to provide some information 
about your contribution (including review) to the area. Also, was this 
discussed with the tools maintainers?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 12:01:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 12:01:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148650.274694 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyvMy-0004vG-P4; Thu, 01 Jul 2021 12:00:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148650.274694; Thu, 01 Jul 2021 12:00:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyvMy-0004v9-M8; Thu, 01 Jul 2021 12:00:36 +0000
Received: by outflank-mailman (input) for mailman id 148650;
 Thu, 01 Jul 2021 12:00:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyvMx-0004s1-IP
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 12:00:35 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.52])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9304a282-d197-4ffb-8038-c59ec8c8cf4e;
 Thu, 01 Jul 2021 12:00:27 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61C0P6Ko
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 14:00:25 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9304a282-d197-4ffb-8038-c59ec8c8cf4e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625140825;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=LA6pzunebxl1hoyt8xGJaWSXCjL5ktBek1fDgycFaFw=;
    b=MOOqYp4xHn8EqButhLA9ZbhK4Fxew1EiYl4MxKZh/T8maXTkLEwRx880ndy/n8HHGi
    +9zLexcWfwzsXfFW3J7qeSxOiPlHQN94Xh/ZAJsHAwF/T57MRO2u2xHZu/O202+5NO5Y
    wcL3KtnaHsRUZzXaaPe5JHJxvX4E7v4uK/JgJ1f6Plt/tai4C7PZ+iSS0WysdjhtWzD7
    GbM6IMi75lSIaPXVBrrMW01Xm6MwlD/wDzfpnIJ4s+H9E2scWpsWm52YYD1RbJ6zgp8k
    d7A5PW0wTf2Mu7qouAr4dm2pAk0PDhtKsYCcYMgpMsVOERYbcQY8PZ+rcb7irQDnvAGv
    wFMQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 14:00:07 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Julien Grall <julien@xen.org>
Cc: Jan Beulich <jbeulich@suse.com>, Andrew Cooper
 <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, Ian
 Jackson <iwj@xenproject.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
Subject: Re: [PATCH v20210701 08/40] MAINTAINERS: add myself as saverestore
 maintainer
Message-ID: <20210701140007.77132794.olaf@aepfle.de>
In-Reply-To: <07174c4e-cf39-66c2-c3cb-27b728dc5819@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-9-olaf@aepfle.de>
	<13a963c1-639f-5135-734b-9cc1c8d9034e@suse.com>
	<20210701130143.2b8cfce3.olaf@aepfle.de>
	<07174c4e-cf39-66c2-c3cb-27b728dc5819@xen.org>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/NoXEhtjrK0YWGGgMN0OHnvu";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/NoXEhtjrK0YWGGgMN0OHnvu
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 12:40:09 +0100
schrieb Julien Grall <julien@xen.org>:

> You would be the sole maintainer of the directory

Yes that is the point, it changes the count from zero to one.

Olaf

--Sig_/NoXEhtjrK0YWGGgMN0OHnvu
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDdrkcACgkQ86SN7mm1
DoBtPxAAnpoF09PNlYiJu/jqdqRzOs92MOvNjH+VZWZ4gmr46oZ4evOv1OCKIS1y
JVEr4Fb5ARXae+8MRU9yNpLVMRZeIeaEh8So4ZARJ2BQUGg4iRnK3qSaOvAYBeG/
Mz87T9+RJRVFWWtfwLv6sTPZL6VpsdSqyDQchSL2CVb7PlsWUCiesdxCgu32mRQu
cef4lQUk4JN4aGfq61niTR2Kgne1b0H0qY8bWr82HgzPWqp1Wp5S0IVvPZBMjIHU
On6pM6TdiHrooB7LHx+rm0nB3OxGU7o2l5Xo/Xamrxal77RYFNQefMow+2+jl4jR
9DvEH053YX5r6EzgaFI/hnxr3FsLRfQLIOBqAf2iclXI+Ia27uKt5sSyHVDVezGG
Ni51Xdm+jG0ErD4ZQaVzI6CdKSaNoQ0T3cmbNGSwjDG/yk4hFCaZLON1q3agnfw1
QxHwUbVV/BrIOUnAv4RIrSNJ7d2w3UUFy918u9EC1Vzg0NhUAogupD3EvsKL1+ZV
d8l6lwJzZirFLFSUkHXU7EIDtAeOlgzsMzy3TQNLig7KiG6AcIiMkOi/PZ5exQ/v
gfra5XTBg8V2tslvoBAv3/c0c43l61+OJBOnv2P2jbeoCXff7qqx5RP3IUU1Mf5i
pt+Vj4Tc3AqiUGzwWb3Hiuf86744VvlpKUmX0ORwhvZI2xCXCbo=
=BOyd
-----END PGP SIGNATURE-----

--Sig_/NoXEhtjrK0YWGGgMN0OHnvu--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 12:09:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 12:09:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148655.274705 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyvVL-0005g7-Jh; Thu, 01 Jul 2021 12:09:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148655.274705; Thu, 01 Jul 2021 12:09:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyvVL-0005g0-G0; Thu, 01 Jul 2021 12:09:15 +0000
Received: by outflank-mailman (input) for mailman id 148655;
 Thu, 01 Jul 2021 12:09:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lyvVK-0005fu-Eb
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 12:09:14 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lyvVJ-0004Js-8L; Thu, 01 Jul 2021 12:09:13 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lyvVJ-0008Vk-1w; Thu, 01 Jul 2021 12:09:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=KRmNipCF9JIWLcYk1qw3J6A7B0Feg12knd8BAk5qQs0=; b=X9BhITvKIUwFhnilezbc2wA0QG
	8Bqs8kFJU95c9T9vcU+VyFGW8R2PprvTaEau33F9g9aPQSEzYxefEum98LeNMUmlVvwlxEBHQy9oI
	iUPM4om/bvURpA1PAdJltQviM0f81skNaZ72qQT/UrkzoDQB+eJrxBgrez/N7Ytu9veQ=;
Subject: Re: [PATCH v20210701 08/40] MAINTAINERS: add myself as saverestore
 maintainer
To: Olaf Hering <olaf@aepfle.de>
Cc: Jan Beulich <jbeulich@suse.com>, Andrew Cooper
 <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Stefano Stabellini
 <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-9-olaf@aepfle.de>
 <13a963c1-639f-5135-734b-9cc1c8d9034e@suse.com>
 <20210701130143.2b8cfce3.olaf@aepfle.de>
 <07174c4e-cf39-66c2-c3cb-27b728dc5819@xen.org>
 <20210701140007.77132794.olaf@aepfle.de>
From: Julien Grall <julien@xen.org>
Message-ID: <aecdfba7-ea09-6278-6425-6eaa4c9a7ee8@xen.org>
Date: Thu, 1 Jul 2021 13:09:10 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210701140007.77132794.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Olaf,

On 01/07/2021 13:00, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 12:40:09 +0100
> schrieb Julien Grall <julien@xen.org>:
> 
>> You would be the sole maintainer of the directory
> 
> Yes that is the point, it changes the count from zero to one.

The code you are moving is already maintained by the tools maintainers.
So I am guessing you are saying they are unresponsive...

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 12:35:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 12:35:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148660.274716 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyvur-0000Nl-OW; Thu, 01 Jul 2021 12:35:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148660.274716; Thu, 01 Jul 2021 12:35:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyvur-0000Ne-L3; Thu, 01 Jul 2021 12:35:37 +0000
Received: by outflank-mailman (input) for mailman id 148660;
 Thu, 01 Jul 2021 12:35:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lyvup-0000NY-8u
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 12:35:35 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d3d48362-da68-11eb-830f-12813bfff9fa;
 Thu, 01 Jul 2021 12:35:33 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d3d48362-da68-11eb-830f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625142933;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=IKAGF7D6OKxUEI5hSQIjI5M/65C8tk+mCvXLhbx6tbY=;
  b=Mtg6VTQlVw+UlzxsZE+YtzQZpxUD7neDwaFbkEQy3XpIs73VqtMwltaC
   ddZuDydZsPWipPv5DV4eb4qT6JziPVW005p0mIt5wzM8/ry3jC5+RErKP
   SakPgSWdqn1y9UW52V45UBXyOsQ1kogjv2V2YZH4srtuilqOmUqq0Z+EX
   k=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: vytxaQ/PTWbXs12TUrr1PT41/o/f2nLoNaPLOZ6OZqBUA59JDsmHiUa10ICiOqubdj8odXZsXM
 53jsR686OZTU+cxiwg5TKGKzd9+Ww0So5tSZwWtv2aJM6Xqi7gn5rd2qsSvEYJNHvljMSYFTkI
 zFhpwBvZf+GvSbelSv749CRF/crcE5yodde/MKSffV9kyBvEAcJP+Mjglgh0jiypa08mnVtrId
 sqNxg3DOXvjtTfwd+ZEWDMOIZrLnJ2bpqTaQaGiQWNILcS+DD6PgylfdZXMbyQyuLcAB3Teu0B
 +R8=
X-SBRS: 5.1
X-MesageID: 47744962
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:o2uHR68Wgs1wYCNCFjhuk+DcI+orL9Y04lQ7vn2ZOiYlF/Bw9v
 re+MjzsCWetN9/YgBGpTn+AtjifZqxz/JICPAqTNWftWrd1ldATrsSi7cKqgeIc0fDH4Vmup
 uIHZISNDQlNzlHZbCW2mmFL+o=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47744962"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Qsj8wdjrnLSeB62sRJPBATB+PmcPbbsIKZxXIKzvMAsYIUX3knIA+qAwP8myydXAsQgbqWuB31zYD4JRE9GPLTIhAUMOcMJJxUDuvgduUUCFTu3vkF02iJxH8je9t7zrPbsdsMbvAf9T5iHmHBSQHiIq8xVjKB0TjsH06iPXjIkJSLp20hIYtVegA+Qax8DSfOTLUooPF9n4Yz/zhDwK33Vl2Mi04MYPE0Z+jNORviYiifl36d9ahbRD/Kt5amfeZ5KovsLbitL3o2bU650ZQJxq2Q0OFBkX4aVxfdwb02RtHiRQcVO31JgwEFTU1fxm9sEk2voiEjZug4it/YQSPA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IKAGF7D6OKxUEI5hSQIjI5M/65C8tk+mCvXLhbx6tbY=;
 b=itXhyXAywnUWEN6nFasFPBC1mHu2kzqWDzqgkKtCjcmCbC15HHnmQV7yV6jgFcsoEp6rvWrqqjUbnuz8sKbQREu8J0dG3K+imDppkXchqmgDodPZgKOwQVu1JIUo+225j3E7iaGxwjEhs0NwKIdQYKMCP5VW/rx1qejuJQjwwL1CzkmslHZbiO3T20fRZ4joKRtigDLOcJ20Ar/o3McVrPq9y3BUBpkIZeYq7U9VqOKlBuhFexXtqBNbJzZy1VEY1u0zC+vPEZAsZ9hjkRjYI5M19lFpMiDZJdu2lnP1dPw8w0JY7RX4yAYNSm7Ve5Gvt4IuAfw/25fdQ5wCfatzQQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IKAGF7D6OKxUEI5hSQIjI5M/65C8tk+mCvXLhbx6tbY=;
 b=MM7dXUJ3+oAnp0omN7DNpvNWdV1qDKfS3aIW5XNLvy2SKk8QCKA5UZkMk2robbYViTtUoLEOg4COKu2vRCnharGuISOW3vSY0TRmiwpFm+9MpbZaQ1qr1RjTqsoCbOcLOyGTsxs6m1dYkT6ZRZ1s8X5q/IUGhoGNbGbK47A5ATg=
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
 <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
 <20210701133628.1667a344.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <67f50c0d-753c-936e-bf1e-11a708150851@citrix.com>
Date: Thu, 1 Jul 2021 13:35:20 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701133628.1667a344.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0026.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:151::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fa32f038-ec66-49b6-20d7-08d93c8cb472
X-MS-TrafficTypeDiagnostic: BYAPR03MB3861:
X-Microsoft-Antispam-PRVS: <BYAPR03MB38612A73FCE283D55146C50FBA009@BYAPR03MB3861.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: bS1F6UHvmS6Ds3QJm6QgphrcsqALKQis5LlwFRr6ct3gjBRJep7VhfsMub0B59KraqJVlBd36Af2KwsWgTunbC1om77BhHtQ/L47MYCbuoVn4QBbzUAS2mBfKLBX/0CcuZg3PT1DysDu0XGnemHq/HJqvZktBYqixBjFgwCM4VXn4AqZK3bQIy9UfHz2IBqJ0QGkPrXqSByZ9ZQD+ilLFhPbv37crzi5oIPL1HhN2ybcy9DtTraMPfbJZ2+gWQWy06J0XeDJoD7Nos6l6NFt3fJnyo547mFgimmSt7blYhM5AI6CYrzDbV1a6yD1Bdn8nBDUt8WXn4VvegbE/pXRIRFE9SIEo2PUQeCd4N0T/mljaYqKO4tgNMYpW7L9Nsd5PYapEhLa7H5ivKQajt1rXvmtTkVGWzKb5WaUj9fdiwcrAknYMB4duE2J82KlMmIY6PRA6a4HmkeSlmRw4FKpgmSqdX8+511VT+ivAMGSH08e6AjEleTq3rpJf5AlFSAErIYeVEbgH6glJWL1qzeQz+UJDCVkXsI8oD203rvaQEGHGw5Tl4XkgZfgf/boI+V/HqtbqPAuM2knoDVlfqzoj5dkxdLQsDZCiqKmIu5QAi3ZMsrjDJJBPDgnZ56PaK2vfYvJVwRVAv5qv4CrDw4DC76ZVbXhy6kCgI1MR2fUTCYCzkK8DAgGE3UJE9OM70x8WAUJn8LabE0OCW4+F7eUkJMVB/Wc30c1cdHRnwfFod4=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(346002)(366004)(376002)(396003)(6916009)(4326008)(4744005)(2616005)(66476007)(16526019)(26005)(38100700002)(66946007)(53546011)(6486002)(956004)(16576012)(316002)(186003)(6666004)(31696002)(66556008)(2906002)(8936002)(8676002)(5660300002)(86362001)(83380400001)(36756003)(31686004)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?jad/msG43e7wxFGYFo3FGUaAZdwimpZa2Q8k1RJ?=
X-MS-Exchange-CrossTenant-Network-Message-Id: fa32f038-ec66-49b6-20d7-08d93c8cb472
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 12:35:27.3100
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 5X6Ab17oDPzRCfQFjtITaRM3X6BoGqqlt4kgBAHID8HRv2U993I/bjgSjQZ57aWkaZ/WgRw17eMXPBa45jrwPCdEJw+v7btHr1xZkQjP+ek=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3861
X-OriginatorOrg: citrix.com

On 01/07/2021 12:36, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 12:19:24 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> This *ought* to be "grab default, edit a few details, send back to
>> Xen".=C2=A0 Where is the 51 leaves coming in?=C2=A0 Do you have cpuid=3D=
 lines in
>> the xl cfg file?
> No cpuid=3D or anything in domU.cfg or Xen cmdline.
> If I understand x86_cpuid_copy_to_buffer correctly, it copies all of basi=
c+extd and viridian+xen leaves, which is apparently more than 31.

It will copy the subset based on things like max_leaf, etc.

Can you grab xen-cpuid -p from this system please?

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 13:05:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 13:05:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148666.274726 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lywNJ-0003aB-3h; Thu, 01 Jul 2021 13:05:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148666.274726; Thu, 01 Jul 2021 13:05:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lywNJ-0003a4-0h; Thu, 01 Jul 2021 13:05:01 +0000
Received: by outflank-mailman (input) for mailman id 148666;
 Thu, 01 Jul 2021 13:04:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=T0jQ=LZ=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1lywNH-0003Zy-HD
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 13:04:59 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.77]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id eef0ed59-da6c-11eb-8315-12813bfff9fa;
 Thu, 01 Jul 2021 13:04:57 +0000 (UTC)
Received: from DB3PR08CA0027.eurprd08.prod.outlook.com (2603:10a6:8::40) by
 VI1PR08MB3550.eurprd08.prod.outlook.com (2603:10a6:803:84::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22; Thu, 1 Jul 2021 13:04:54 +0000
Received: from DB5EUR03FT052.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:8:0:cafe::2d) by DB3PR08CA0027.outlook.office365.com
 (2603:10a6:8::40) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Thu, 1 Jul 2021 13:04:54 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT052.mail.protection.outlook.com (10.152.21.82) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 13:04:54 +0000
Received: ("Tessian outbound c836dc7aad98:v97");
 Thu, 01 Jul 2021 13:04:54 +0000
Received: from 62cba1562938.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A500274B-1F25-45E9-B540-386AFFCD65D0.1; 
 Thu, 01 Jul 2021 13:04:21 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 62cba1562938.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 01 Jul 2021 13:04:21 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PAXPR08MB6414.eurprd08.prod.outlook.com (2603:10a6:102:12e::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Thu, 1 Jul
 2021 13:04:19 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025%7]) with mapi id 15.20.4264.026; Thu, 1 Jul 2021
 13:04:18 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO2P265CA0356.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:d::32) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Thu, 1 Jul 2021 13:04:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: eef0ed59-da6c-11eb-8315-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qkfW9EFB2q2P7/g6zZD+KOXOcZxry0Qw1WOUthlY+AU=;
 b=KMmwUSWamm2G93bATLbdtbrwZqRTOeH6Dqjc8FCzczGX2xBQ6jX4VRa9f2xRISVIkOctkNrdbx3g6EaIlhRJMcGRCdxnsX2ybaDSmlB8S+dtoYWsd6thUQLgkUsV8I1uky8bujWLavPkUQ2frLkogJp640134sR8wtDvL+HJMxg=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 1bce61ad77d499c2
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OAjmqtnOPV3pNsVwMTgnk3FVVW8IGjs4uYdUWFdQRtGgmORC+xALLLdfzo09ZPtBvoB4wQEqMkfSQPyKQTSYI9WbWzlPlcycfzx/w4rP006NobIugnf8R3uJErhXxQZHvuX4cLKOZXTOq2lkb2uT2+ZfdGRJDM0uCp1GiP/nlTvHxtCUPdf3FHbEYBDUmfdXEoAmL8PKHFxbSm0rZX6sW90jh18iw+3Oz4C/YYEMkIc2fhoTaOA5y2UNXVNXG4aJqRCFYRDCMmJHITj4caQkldOdr7cK23q+eoV+sWu+DvQLcME+8lAPexslx1QrAA7F9k4P45Q85Ulm8u5CJ2Qf2Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qkfW9EFB2q2P7/g6zZD+KOXOcZxry0Qw1WOUthlY+AU=;
 b=lctB6daPaK074qTrjWz4FVwUlSaNJUjeCI4Woss0ZTBmIYRWPvfxTCBoBQygI511S44klfmdfyScMY0aM24jSVLfI+10ZPcvOuj54qEW/GTtbAyMaA325F9wbT9VLxwEJi5VwBISTkEzN2N1bTOivtiHWeju+UHN5aqBlB7yyG8VX3eydoaBWfkTv44TYRzC4FWqGLgu+if5X9PReNm6y1F9wzTgsX5MglP4WplkdzMsyz76pqGy7vOEwYHO1pJMPLBmEbW6llv6AURK7fhwRB2g7m99rOdEpOX5cM7wNcqrgnqXQolJrn4qbgrYepqZGJwFl1TjRKITs4YrKWcGJg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qkfW9EFB2q2P7/g6zZD+KOXOcZxry0Qw1WOUthlY+AU=;
 b=KMmwUSWamm2G93bATLbdtbrwZqRTOeH6Dqjc8FCzczGX2xBQ6jX4VRa9f2xRISVIkOctkNrdbx3g6EaIlhRJMcGRCdxnsX2ybaDSmlB8S+dtoYWsd6thUQLgkUsV8I1uky8bujWLavPkUQ2frLkogJp640134sR8wtDvL+HJMxg=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v6 6/9] docs: add doxygen preprocessor and related files
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2106231456290.24906@sstabellini-ThinkPad-T480s>
Date: Thu, 1 Jul 2021 14:04:11 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <5D3534B9-30AC-484F-B2CF-02822D3D1226@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-7-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231456290.24906@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO2P265CA0356.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:d::32) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3dba9457-aec9-4f1b-3dff-08d93c90d20f
X-MS-TrafficTypeDiagnostic: PAXPR08MB6414:|VI1PR08MB3550:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR08MB3550A5D37A56F26CF17D4F9AE4009@VI1PR08MB3550.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 XZOS+bvUR2FfY1emeJGouVdbxzw4GOrmwlZ2NqUdoHUGRpzWvbDkk9K3ZA/vzuoLks445PvEdZwangs+5L423wgnIJMOtsD0BiRTaRzrjQULwbgWEQSxT21NbiBzTvIn5Pboz6fYSCbDwM3wvIpN67aVTuM7oCDiLBbM3D75XPRr9gxlE1TCvmQt27i05KzgN/SOxIP/zvA45WC0QRCZgYQpVOu6IaRvZ7lvdU9ap5apq7IJadDlUrXosh8Rox/Qx3dni12iuPG1ufA3d3ZPqYpXp2oJCt//bQgX427NbsOjxW59jNldrGLBsgls845L+HThrdQrlkpFZOddMHfg2MgpVPlgUeaqAEp90c93XLAJmncg8NBdbNFa8qAkyD8bcbTQWrfahpTGibFuYfIcKuZh6xgkIB0OJuYRLYfu6G73TWzKPeFiZ+IjQuTouqWpbkqWT/uZvcl6/TGCf8W7h1aPnpL2XtuQwpsxoLVf+uof6P8Dd/oSTyLa19CnQ1W5tsBQYk65tZ5I/jNZnwEjns6WkJLIIZmUBd8iM4oc7Ei4vQAeSZ+RvRT0XZnsflZwUCWWhkBp0Vf7XGbjJz4BuUBaHsykdAxdT6kyyXfki1tk4HufygD01fiDLRYESWWp+8eg2AFofhnJ+TOpQqLa9FSldXZO4AN7nQBPUVbF72ZO+0p0f/7ZO5BYrEMLOTaaQps+6AS/QAGa7TQMaxiiU2/Q+XjyI90Lt3Q4d6/JDjc=
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(136003)(366004)(346002)(39850400004)(376002)(478600001)(186003)(316002)(6512007)(6666004)(38350700002)(16526019)(6486002)(4326008)(54906003)(5660300002)(53546011)(38100700002)(83380400001)(66946007)(956004)(33656002)(86362001)(26005)(6506007)(44832011)(8676002)(66556008)(2906002)(66476007)(6916009)(2616005)(36756003)(8936002)(52116002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
 =?utf-8?Q?Ex9Y7BtLj/fEKTTAgI/Oz1lpg4i2XClsEhxkQz2?=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6414
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT052.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	384fa76a-92bd-442c-65b3-08d93c90bc43
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	vwIG/kIHqNdIHIiYmKBAM+Bc23G0H88UqKgK9iOUaUkwleFfD+ybXbDMuHdkcd0yp0TRehz6ezZJTlOtsrFaJgC2cidSOMpQuAnV6l4ffwGTIUVDhtaXd3Qk2paLRlr3rSqcLDHVY+iPpp3WciRPfWhxQL3zqlgLD9CFouSXxBUg+Vh3KGFL8ziQJh9ZOvZDM5Bx61F21Y6QTZpjWHfXPiYqjI6yj6cJOB+uigjwnr85YM6LFkMYES2hET6+Dw3GSwsnwbfBkqZU3aHPM8Icrc3UD0P0ybAm5Fztb+hMXZfSlWclQT1XOIgurimp6qNOHZevN06nDoyA16tGWvEcT3ByAmZeCqJKJHoTmoo8pQJi075/pC/YuKQlbb+oBXu3zfaFcU8c1GUP4sIjU6FfZJ5wnTn/r+7an2DvMmFQVG/LHGX6AfPS0gwtrTSkMrKoQku8BCXp43Kll/Pm7IA2ny2/sJAYwKswY5zjDUWUk+LvdLJypTen07tnWQYT211yCmooxhNU5SjIXZEAgBu/P1pOsiTdfDpTXiTLZ2bPmObSJeudLckUrxHUf5WlPnT80yKCpoSQTAjAp3lvjKyCf/dpTjAgJhENhXdXh8i2Di2zsascoMnCQ+DwXPpVXBICJxzx4RD7dLW5I/Xy6FeT59o1rzAGeUzXSq9lb3K53GBJX1qZzT88HQ8W9LpRLt5c2eXVE/zmbfa9Sj+4snrb5Q==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(376002)(136003)(346002)(396003)(46966006)(36840700001)(4326008)(82310400003)(6512007)(336012)(2906002)(6486002)(956004)(36860700001)(44832011)(47076005)(2616005)(33656002)(54906003)(83380400001)(82740400003)(81166007)(26005)(53546011)(6506007)(70586007)(8936002)(8676002)(86362001)(6666004)(6862004)(36756003)(5660300002)(70206006)(356005)(186003)(478600001)(316002)(16526019);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 13:04:54.6737
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 3dba9457-aec9-4f1b-3dff-08d93c90d20f
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT052.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3550



> On 23 Jun 2021, at 23:03, Stefano Stabellini <sstabellini@kernel.org> wro=
te:
>=20
> On Mon, 10 May 2021, Luca Fancellu wrote:
>> Add preprocessor called by doxygen before parsing headers,
>> it will include in every header a doxygen_include.h file
>> that provides missing defines and includes that are
>> usually passed by the compiler.
>>=20
>> Add doxy_input.list that is a text file containing the
>> relative path to the source code file to be parsed by
>> doxygen. The path sould be relative to the xen folder:
>> E.g. xen/include/public/grant_table.h
>>=20
>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>> ---
>> docs/xen-doxygen/doxy-preprocessor.py | 110 ++++++++++++++++++++++++++
>> docs/xen-doxygen/doxy_input.list      |   0
>> docs/xen-doxygen/doxygen_include.h.in |  32 ++++++++
>> 3 files changed, 142 insertions(+)
>> create mode 100755 docs/xen-doxygen/doxy-preprocessor.py
>> create mode 100644 docs/xen-doxygen/doxy_input.list
>> create mode 100644 docs/xen-doxygen/doxygen_include.h.in
>>=20
>> diff --git a/docs/xen-doxygen/doxy-preprocessor.py b/docs/xen-doxygen/do=
xy-preprocessor.py
>> new file mode 100755
>> index 0000000000..496899d8e6
>> --- /dev/null
>> +++ b/docs/xen-doxygen/doxy-preprocessor.py
>> @@ -0,0 +1,110 @@
>> +#!/usr/bin/python3
>> +#
>> +# Copyright (c) 2021, Arm Limited.
>> +#
>> +# SPDX-License-Identifier: GPL-2.0
>> +#
>> +
>> +import os, sys, re
>> +
>> +
>> +# Variables that holds the preprocessed header text
>> +output_text =3D ""
>> +header_file_name =3D ""
>> +
>> +# Variables to enumerate the anonymous structs/unions
>> +anonymous_struct_count =3D 0
>> +anonymous_union_count =3D 0
>> +
>> +
>> +def error(text):
>> +    sys.stderr.write("{}\n".format(text))
>> +    sys.exit(1)
>> +
>> +
>> +def write_to_output(text):
>> +    sys.stdout.write(text)
>> +
>> +
>> +def insert_doxygen_header(text):
>> +    # Here the strategy is to insert the #include <doxygen_include.h> i=
n the
>> +    # first line of the header
>> +    abspath =3D os.path.dirname(os.path.abspath(__file__))
>> +    text +=3D "#include \"{}/doxygen_include.h\"\n".format(abspath)
>> +
>> +    return text
>> +
>> +
>> +def enumerate_anonymous(match):
>> +    global anonymous_struct_count
>> +    global anonymous_union_count
>> +
>> +    if "struct" in match.group(1):
>> +        label =3D "anonymous_struct_%d" % anonymous_struct_count
>> +        anonymous_struct_count +=3D 1
>> +    else:
>> +        label =3D "anonymous_union_%d" % anonymous_union_count
>> +        anonymous_union_count +=3D 1
>> +
>> +    return match.group(1) + " " + label + " {"
>> +
>> +
>> +def manage_anonymous_structs_unions(text):
>> +    # Match anonymous unions/structs with this pattern:
>> +    # struct/union {
>> +    #     [...]
>> +    #
>> +    # and substitute it in this way:
>> +    #
>> +    # struct anonymous_struct_# {
>> +    #     [...]
>> +    # or
>> +    # union anonymous_union_# {
>> +    #     [...]
>> +    # where # is a counter starting from zero, different between struct=
s and
>> +    # unions
>> +    #
>> +    # We don't count anonymous union/struct that are part of a typedef =
because
>> +    # they don't create any issue for doxygen
>> +    text =3D re.sub(
>> +        "(?<!typedef\s)(struct|union)\s+?\{",
>> +        enumerate_anonymous,
>> +        text,
>> +        flags=3Dre.S
>> +    )

Hi Stefano,

>=20
> My python is a bit rusty but I thought this is really clever!
>=20
> One question: given that anonymous_struct_count is local per file being
> processed, it always starts at 0 for each header. I think that is
> actually better from a documentation readability point of view.
>=20
> However, is it possible that Doxygen gets confused in a case where we
> can multiple "struct anonymous_struct_0", e.g. one for grant_table.h,
> one for event_channel.h, etc. ?

Yes this is a very good point, I did some experiment and it can happen, how=
ever so far we didn=E2=80=99t notice any
problem because all the anonymous union/struct were part of other data stru=
cture, in that case there is no
problem at all because we have upper_data_structure::anonymous_{struct/unio=
n}_0/1/2=E2=80=A6

So given the fact that is difficult to have clash, I would say we can handl=
e any future case separately.

Having a global numbering can solve the issue but because the script is cal=
led separately for each header,
Implementing it will involve some changes, there should be a file to mainta=
in the number across invocation
and so on.

Let me know what do you think about that and if in your opinion we can proc=
eed the way it is now.

Cheers,

Luca





From xen-devel-bounces@lists.xenproject.org Thu Jul 01 13:15:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 13:15:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148673.274737 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lywXb-00056A-8c; Thu, 01 Jul 2021 13:15:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148673.274737; Thu, 01 Jul 2021 13:15:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lywXb-000563-5O; Thu, 01 Jul 2021 13:15:39 +0000
Received: by outflank-mailman (input) for mailman id 148673;
 Thu, 01 Jul 2021 13:15:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lywXa-00055x-6d
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 13:15:38 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.24])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 173f5661-7eed-4ab8-9411-85344c6e75a6;
 Thu, 01 Jul 2021 13:15:36 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61DFY6p7
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 15:15:34 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 173f5661-7eed-4ab8-9411-85344c6e75a6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625145335;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=VUOe4fD/9EB6E2UIF6q276ktoXEd68aVUwnt106S2n8=;
    b=XGTlNS8dM8WpPYBxTisbx9wciJxLSBTlGvfdM4LURUjZTVgF2hOIAg6uzp41BnXT+x
    jTP7yXgnRDycuyLeq4f97oYW7UC2kz1ez+rYRkvug7o7aTH5b9D9vDIMtXdXYpf5yhM8
    KynSLBEID477Hp/9c+or/78v6r9QxdNHclWws+vTInVlvrjPK0dK3accYHD1ZmgP8OPA
    Ny9wZ5Q0pwjQhzeOmtfu175e912BFUPrBY711AHUmX2KPNIpTs5DYBTHPw/aJ2laJvAM
    POMAI+9CjQpJHPSAqj9yyUuofBvSUIa3CYJssWtL1exxTTS2vQdCirPcGrOZEiJ69cnG
    bf/Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 15:15:28 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701151528.08d1f503.olaf@aepfle.de>
In-Reply-To: <67f50c0d-753c-936e-bf1e-11a708150851@citrix.com>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
	<20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
	<20210701133628.1667a344.olaf@aepfle.de>
	<67f50c0d-753c-936e-bf1e-11a708150851@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/dPfTf=+Bc/xAS28jgJQu.9b";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/dPfTf=+Bc/xAS28jgJQu.9b
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 13:35:20 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Can you grab xen-cpuid -p from this system please?

Two PowerEdge T320 with E5-2430L.

Xen reports there are maximum 119 leaves and 2 MSRs
Raw policy: 32 leaves, 2 MSRs
 CPUID:
  leaf     subleaf  -> eax      ebx      ecx      edx    =20
  00000000:ffffffff -> 0000000d:756e6547:6c65746e:49656e69
  00000001:ffffffff -> 000306e4:00200800:7fbee3ff:bfebfbff
  00000002:ffffffff -> 76036301:00f0b2ff:00000000:00ca0000
  00000004:00000000 -> 3c004121:01c0003f:0000003f:00000000
  00000004:00000001 -> 3c004122:01c0003f:0000003f:00000000
  00000004:00000002 -> 3c004143:01c0003f:000001ff:00000000
  00000004:00000003 -> 3c07c163:04c0003f:00002fff:00000006
  00000005:ffffffff -> 00000040:00000040:00000003:00001120
  00000006:ffffffff -> 00000077:00000002:00000001:00000000
  00000007:00000000 -> 00000000:00000281:00000000:9c000400
  0000000a:ffffffff -> 07300403:00000000:00000000:00000603
  0000000b:00000000 -> 00000001:00000002:00000100:00000000
  0000000b:00000001 -> 00000005:0000000c:00000201:00000000
  0000000d:00000000 -> 00000007:00000340:00000340:00000000
  0000000d:00000001 -> 00000001:00000000:00000000:00000000
  0000000d:00000002 -> 00000100:00000240:00000000:00000000
  80000000:ffffffff -> 80000008:00000000:00000000:00000000
  80000001:ffffffff -> 00000000:00000000:00000001:2c100800
  80000002:ffffffff -> 20202020:746e4920:52286c65:65582029
  80000003:ffffffff -> 52286e6f:50432029:35452055:3334322d
  80000004:ffffffff -> 76204c30:20402032:30342e32:007a4847
  80000006:ffffffff -> 00000000:00000000:01006040:00000000
  80000007:ffffffff -> 00000000:00000000:00000000:00000100
  80000008:ffffffff -> 0000302e:00000000:00000000:00000000
 MSRs:
  index    -> value          =20
  000000ce -> 0000000080000000
  0000010a -> 0000000000000000
Host policy: 31 leaves, 2 MSRs
 CPUID:
  leaf     subleaf  -> eax      ebx      ecx      edx    =20
  00000000:ffffffff -> 0000000d:756e6547:6c65746e:49656e69
  00000001:ffffffff -> 000306e4:00200800:77bee3ff:bfebfbff
  00000002:ffffffff -> 76036301:00f0b2ff:00000000:00ca0000
  00000004:00000000 -> 3c004121:01c0003f:0000003f:00000000
  00000004:00000001 -> 3c004122:01c0003f:0000003f:00000000
  00000004:00000002 -> 3c004143:01c0003f:000001ff:00000000
  00000004:00000003 -> 3c07c163:04c0003f:00002fff:00000006
  00000007:00000000 -> 00000000:00000281:00000000:9c000400
  0000000d:00000000 -> 00000007:00000000:00000340:00000000
  0000000d:00000001 -> 00000001:00000000:00000000:00000000
  0000000d:00000002 -> 00000100:00000240:00000000:00000000
  80000000:ffffffff -> 80000008:00000000:00000000:00000000
  80000001:ffffffff -> 00000000:00000000:00000001:2c100800
  80000002:ffffffff -> 20202020:746e4920:52286c65:65582029
  80000003:ffffffff -> 52286e6f:50432029:35452055:3334322d
  80000004:ffffffff -> 76204c30:20402032:30342e32:007a4847
  80000006:ffffffff -> 00000000:00000000:01006040:00000000
  80000007:ffffffff -> 00000000:00000000:00000000:00000100
  80000008:ffffffff -> 0000302e:00000000:00000000:00000000
 MSRs:
  index    -> value          =20
  000000ce -> 0000000080000000
  0000010a -> 0000000000000000
PV Max policy: 31 leaves, 2 MSRs
 CPUID:
  leaf     subleaf  -> eax      ebx      ecx      edx    =20
  00000000:ffffffff -> 0000000d:756e6547:6c65746e:49656e69
  00000001:ffffffff -> 000306e4:00200800:f6b82203:1fc9cbf5
  00000002:ffffffff -> 76036301:00f0b2ff:00000000:00ca0000
  00000004:00000000 -> 3c004121:01c0003f:0000003f:00000000
  00000004:00000001 -> 3c004122:01c0003f:0000003f:00000000
  00000004:00000002 -> 3c004143:01c0003f:000001ff:00000000
  00000004:00000003 -> 3c07c163:04c0003f:00002fff:00000006
  00000007:00000000 -> 00000000:00000201:00000000:8c000400
  0000000d:00000000 -> 00000007:00000000:00000340:00000000
  0000000d:00000001 -> 00000001:00000000:00000000:00000000
  0000000d:00000002 -> 00000100:00000240:00000000:00000000
  80000000:ffffffff -> 80000008:00000000:00000000:00000000
  80000001:ffffffff -> 00000000:00000000:00000001:28100800
  80000002:ffffffff -> 20202020:746e4920:52286c65:65582029
  80000003:ffffffff -> 52286e6f:50432029:35452055:3334322d
  80000004:ffffffff -> 76204c30:20402032:30342e32:007a4847
  80000006:ffffffff -> 00000000:00000000:01006040:00000000
  80000007:ffffffff -> 00000000:00000000:00000000:00000100
  80000008:ffffffff -> 0000302e:00001000:00000000:00000000
 MSRs:
  index    -> value          =20
  000000ce -> 0000000080000000
  0000010a -> 0000000000000000
HVM Max policy: 31 leaves, 2 MSRs
 CPUID:
  leaf     subleaf  -> eax      ebx      ecx      edx    =20
  00000000:ffffffff -> 0000000d:756e6547:6c65746e:49656e69
  00000001:ffffffff -> 000306e4:00200800:f7ba2223:1fcbfbff
  00000002:ffffffff -> 76036301:00f0b2ff:00000000:00ca0000
  00000004:00000000 -> 3c004121:01c0003f:0000003f:00000000
  00000004:00000001 -> 3c004122:01c0003f:0000003f:00000000
  00000004:00000002 -> 3c004143:01c0003f:000001ff:00000000
  00000004:00000003 -> 3c07c163:04c0003f:00002fff:00000006
  00000007:00000000 -> 00000000:00000281:00000000:9c000400
  0000000d:00000000 -> 00000007:00000000:00000340:00000000
  0000000d:00000001 -> 00000001:00000000:00000000:00000000
  0000000d:00000002 -> 00000100:00000240:00000000:00000000
  80000000:ffffffff -> 80000008:00000000:00000000:00000000
  80000001:ffffffff -> 00000000:00000000:00000001:2c100800
  80000002:ffffffff -> 20202020:746e4920:52286c65:65582029
  80000003:ffffffff -> 52286e6f:50432029:35452055:3334322d
  80000004:ffffffff -> 76204c30:20402032:30342e32:007a4847
  80000006:ffffffff -> 00000000:00000000:01006040:00000000
  80000007:ffffffff -> 00000000:00000000:00000000:00000100
  80000008:ffffffff -> 0000302e:00101000:00000000:00000000
 MSRs:
  index    -> value          =20
  000000ce -> 0000000080000000
  0000010a -> 0000000000000000
PV Default policy: 31 leaves, 2 MSRs
 CPUID:
  leaf     subleaf  -> eax      ebx      ecx      edx    =20
  00000000:ffffffff -> 0000000d:756e6547:6c65746e:49656e69
  00000001:ffffffff -> 000306e4:00200800:f6b82203:1fc9cbf5
  00000002:ffffffff -> 76036301:00f0b2ff:00000000:00ca0000
  00000004:00000000 -> 3c004121:01c0003f:0000003f:00000000
  00000004:00000001 -> 3c004122:01c0003f:0000003f:00000000
  00000004:00000002 -> 3c004143:01c0003f:000001ff:00000000
  00000004:00000003 -> 3c07c163:04c0003f:00002fff:00000006
  00000007:00000000 -> 00000000:00000201:00000000:8c000400
  0000000d:00000000 -> 00000007:00000000:00000340:00000000
  0000000d:00000001 -> 00000001:00000000:00000000:00000000
  0000000d:00000002 -> 00000100:00000240:00000000:00000000
  80000000:ffffffff -> 80000008:00000000:00000000:00000000
  80000001:ffffffff -> 00000000:00000000:00000001:28100800
  80000002:ffffffff -> 20202020:746e4920:52286c65:65582029
  80000003:ffffffff -> 52286e6f:50432029:35452055:3334322d
  80000004:ffffffff -> 76204c30:20402032:30342e32:007a4847
  80000006:ffffffff -> 00000000:00000000:01006040:00000000
  80000008:ffffffff -> 0000302e:00001000:00000000:00000000
 MSRs:
  index    -> value          =20
  000000ce -> 0000000080000000
  0000010a -> 0000000000000000
HVM Default policy: 31 leaves, 2 MSRs
 CPUID:
  leaf     subleaf  -> eax      ebx      ecx      edx    =20
  00000000:ffffffff -> 0000000d:756e6547:6c65746e:49656e69
  00000001:ffffffff -> 000306e4:00200800:f7ba2203:1fcbfbff
  00000002:ffffffff -> 76036301:00f0b2ff:00000000:00ca0000
  00000004:00000000 -> 3c004121:01c0003f:0000003f:00000000
  00000004:00000001 -> 3c004122:01c0003f:0000003f:00000000
  00000004:00000002 -> 3c004143:01c0003f:000001ff:00000000
  00000004:00000003 -> 3c07c163:04c0003f:00002fff:00000006
  00000007:00000000 -> 00000000:00000281:00000000:9c000400
  0000000d:00000000 -> 00000007:00000000:00000340:00000000
  0000000d:00000001 -> 00000001:00000000:00000000:00000000
  0000000d:00000002 -> 00000100:00000240:00000000:00000000
  80000000:ffffffff -> 80000008:00000000:00000000:00000000
  80000001:ffffffff -> 00000000:00000000:00000001:2c100800
  80000002:ffffffff -> 20202020:746e4920:52286c65:65582029
  80000003:ffffffff -> 52286e6f:50432029:35452055:3334322d
  80000004:ffffffff -> 76204c30:20402032:30342e32:007a4847
  80000006:ffffffff -> 00000000:00000000:01006040:00000000
  80000008:ffffffff -> 0000302e:00101000:00000000:00000000
 MSRs:
  index    -> value          =20
  000000ce -> 0000000080000000
  0000010a -> 0000000000000000

--Sig_/dPfTf=+Bc/xAS28jgJQu.9b
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDdv/AACgkQ86SN7mm1
DoAn2Q/9HgV8MwFT1qRJIr38MAahDjeqntfhTfmUjZe39MIfb6NHKY520NQg/BM8
XltxWN0jKP8yKcHBtSXQZIhkndgYWVhbvHjRhHaCUyaHPO9ZwQG5Y9pV6K0CNwoT
mkifrC0WxSHwxuWBSdQU/zyUJVdvMSbwJ5g0uzALP8zRueiz7Gfqj1h+WJ2RWlM4
fLLX+OSAf/Txzyl6C4eZl/nykSLv1iH5FQ3ebO7G2yCfb1nMSd9wPWj2hiQQVj6j
oinGV97fMUtBjDKE/ttyCRgFuW1LGLyvd2wsvTCoD+tX3Jaeoo7VIcwKeSA3um8S
YUIniMd5y3D53FwKtyb7NpC6DeIC2/woetqRZ/qIVNPzdC29qIlTgukEp2ortxrX
vh2fjEg7cAFlLB6Y1nKzxIbIVz1TEhSRSeoyukU+wHX79X/Ww1N02EgFyIavOjiI
kc5v6f0xbcMyCifjk+fwhXXRbc0Ss9MzGf5mY4fH/y6VKKv4BKyonYW9XTRcNxu5
VEdRWhV2cc4sMljFCsr/JCUAE/usb803GIuP3srQY5KZ1lej7LuI+qJFNdsX5lS0
e6zjUEQUj9s0wsjCZCCuBT8EHZ2HjJh4BByoSMd2VNJRaP9+e/JzXlY0kD+ywe83
jGqtJdjtlMzkrSvL1OKKyDUyZTU1ElUshwEl9quzwUhUMldL2/A=
=usa2
-----END PGP SIGNATURE-----

--Sig_/dPfTf=+Bc/xAS28jgJQu.9b--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 13:37:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 13:37:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148678.274749 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lywt6-0007P2-T4; Thu, 01 Jul 2021 13:37:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148678.274749; Thu, 01 Jul 2021 13:37:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lywt6-0007Ov-Pb; Thu, 01 Jul 2021 13:37:52 +0000
Received: by outflank-mailman (input) for mailman id 148678;
 Thu, 01 Jul 2021 13:37:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=T0jQ=LZ=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1lywt5-0007Op-4P
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 13:37:51 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.13.87]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 85c838ae-da71-11eb-831f-12813bfff9fa;
 Thu, 01 Jul 2021 13:37:48 +0000 (UTC)
Received: from DB6PR0202CA0010.eurprd02.prod.outlook.com (2603:10a6:4:29::20)
 by DBAPR08MB5800.eurprd08.prod.outlook.com (2603:10a6:10:1a9::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Thu, 1 Jul
 2021 13:37:45 +0000
Received: from DB5EUR03FT011.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:29:cafe::5f) by DB6PR0202CA0010.outlook.office365.com
 (2603:10a6:4:29::20) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Thu, 1 Jul 2021 13:37:45 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT011.mail.protection.outlook.com (10.152.20.95) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 13:37:45 +0000
Received: ("Tessian outbound f29a5a293366:v97");
 Thu, 01 Jul 2021 13:37:45 +0000
Received: from 9c5152fe1225.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 BFA2122E-116F-4386-821D-CC30FC2A63B2.1; 
 Thu, 01 Jul 2021 13:37:07 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9c5152fe1225.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 01 Jul 2021 13:37:07 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PAXPR08MB6735.eurprd08.prod.outlook.com (2603:10a6:102:138::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Thu, 1 Jul
 2021 13:37:05 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025%7]) with mapi id 15.20.4264.026; Thu, 1 Jul 2021
 13:37:05 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO4P123CA0104.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:191::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 13:37:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 85c838ae-da71-11eb-831f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZPq7tTnEUcaJiVPkylVzrXBdU6+dNvknwRZOA2iUTws=;
 b=QntHPWYSKzhDc6QLcsxr7s1sgf5J2I0LBw3TgxiRuDN7IDJqzLuPG8ePn/zF2bHil3+rpzhEcnhBLYTT8x3jl0cGq50wfBv0G2UA40Sfk89uQrOAgcqqQXOwA54fTWfHeR1v3xystXQBuhS1Vf20FaIvcaIB8k45pdvd2HB48pA=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: c784443f5173c14d
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=f9XKCYcweWI0VVELHkjaKCAG7aRohgBNyPvN3XM4CSNREPSgt0MDeTc/HcxoSvCYYI17kBU76kdFVqqgqRMVBtA0KqWtNDNTN5XusQv8nnEB9LNKdQL7F2p4VCzVfS3yRcGzLHARq0zD+rpdTU7odN5b3SEhkeVT5+MKHxH8ex1G9tht6NZ8e0g39FnXBXAxqjtdn7S96GxlanCeqlj2naxUYZ0wiBCJVC+tuMtxxlIt/o4pkZHKjCnS4ZyYg4RKCuqa7j5aQbrTx0vjmCvC5kkaoOYPlVzcLfIN81ANKa93E3KeX8QoKID73E6pu09H+CfS9GfHupfoaVEjE7vxJw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZPq7tTnEUcaJiVPkylVzrXBdU6+dNvknwRZOA2iUTws=;
 b=fPoC+4PfqX6OaRKmlB5GDQOmPoDl/WFVIbZubY0OhlY/FAMoiw6W6sibfo1ZwbCMs8NtAcfabjT1UbZEa1XG7kjhTViJISRxnQ1tj7L9CUpQ3FuODt3XL/ZPdSEp8owy5fMnOFvMUET0zO3PQQExfvMduZmijcRkDZ9tIyK+gdkVQY8aCQf9bHxsjpn8mbWH7xn+C2+mDMZsxP0w9XO/mAQhDWjACi4W453Vcace1syDutoP92/cnx349uIhJ6ek8XTIQ0/g75lcDcoRzAMaBcNbsPMw1NrRbumNLvtdMdPx7uFA+mT26Jxk2Ts6o3GhXdYkOIXF837jk8HRGAaRCA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZPq7tTnEUcaJiVPkylVzrXBdU6+dNvknwRZOA2iUTws=;
 b=QntHPWYSKzhDc6QLcsxr7s1sgf5J2I0LBw3TgxiRuDN7IDJqzLuPG8ePn/zF2bHil3+rpzhEcnhBLYTT8x3jl0cGq50wfBv0G2UA40Sfk89uQrOAgcqqQXOwA54fTWfHeR1v3xystXQBuhS1Vf20FaIvcaIB8k45pdvd2HB48pA=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v6 7/9] docs: Change Makefile and sphinx configuration for
 doxygen
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2106231506040.24906@sstabellini-ThinkPad-T480s>
Date: Thu, 1 Jul 2021 14:36:59 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <1FC1E8DF-8AED-4ABD-BE9A-DBBD9D66EDBB@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-8-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231506040.24906@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO4P123CA0104.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:191::19) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1ae41800-3dd9-4e41-b110-08d93c9568e7
X-MS-TrafficTypeDiagnostic: PAXPR08MB6735:|DBAPR08MB5800:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<DBAPR08MB5800BFBEE2998BBF73A10C9FE4009@DBAPR08MB5800.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 qL1dMJwDE7OqZNHXK78em6+jJje9hI7Fn2XX4k1AiM8ehDbbWBElbGIUf0PaGIPg9Zhx/xts/kUxZjIvLsH7vnYkD71s+Wup+XYSQwP5xhYvvKOFM3FNvpZPS1Imlj/NSqAJOyHenSBBEoRKk2mXoEdYbWpqw5p7hdhq3cJO8NZru9RvDYJaVcsChUn7g59rUkkoyzGWF5QumSlM4mBZhCh1kMRRDm9/ViJ+l56Ms8bUcLGqwNQJApswGdrSTOXJ6Zqzm9UR94YcPdSXRYES85QzS7u6hyM0uMGvryIpLFB+24g1PtcqfERqH78zQEuAgZkhEGhkXu04WeVQZsfQVtrLuGynha4k5FxQZCaib4RYzv5AAQ1a8lXH7B1cX8GoWf6ubm58bQAmpjdJyL9Ov3TY70iMb1Jot1knxFFMVUNdwD4GEXZDmO4zP3E0D9SeW21TaOmahePbmjpKLaNzdOiWqL70/PTJujHu8+IqixctO7n0c+OatKv18tJjEsBpxaN9NKzZZ1HUbvdDyx9EZTjTlkmoe2xYdpwdErz5CCIrPzJIBVCYhpZ4StxaLEW/q7JKbJKaKQnRfRoCNyWZLkY/6yUxXIGvxonnm4+KzuTaEMT8Wg+6o8ZiGAROVc+sWfz+DJv2LhoYhzlQF8I46GbpKTP46PEajcI/VblCLEtl2wGuyOmviNlfR9bonyWlMqFo5NPQmcA4F1sIhf9diiS2rvUmpm5jvp7Fw/d5DkkQIzWv4c8WxU5PQ4tEtBNH
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(366004)(136003)(346002)(376002)(39850400004)(83380400001)(66476007)(956004)(44832011)(38350700002)(66556008)(66946007)(2616005)(38100700002)(186003)(16526019)(2906002)(6666004)(86362001)(316002)(5660300002)(53546011)(4326008)(6506007)(36756003)(6512007)(8676002)(26005)(8936002)(6486002)(478600001)(52116002)(33656002)(6916009)(54906003)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
 =?utf-8?Q?rn4LjPy+nWaiDJZN0owIuvO/qBTwJcaYq4HCnKm?=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6735
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT011.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	a4abdd86-0b3c-4503-5540-08d93c9550c9
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	SAtR1rzYfWTmsdlEGioA7NP9gvmeoiTq+JRTATkVmTJkIWExQiq0OwfDKBUzbUw6sNx5YhYjRB4V5DbgjKB1HufxHtzYs/kVr0OkQtkCsod1LoPUCO/v4dDgoBi4hEDBaF+e3yXXUNPuzniW9d63Wg+5x4P88la7fKdZIVDBuhmc5hLwGHC6I02Rf0ZNNLv8ha3lQUnV6dR7Zvu26/OypIQrwVJlSsoCxxPH0CmOFhacVDkQbQVRBdHKpfDVho/SeXisnxy7rmPBnp+IfcGBw8941nBoTOKU/pFov0M4fl9UySns3mIthUwKEyrGLNG7N1ZbNk/e2SeBrxHcOUDCtjlfc/nswLs7J/ovWm7Eo+9ViOzhj10vmQm++pzkOOOO6uGI+Sydw/tqbbkJCm02FWpmxajXjaB4zXOVEo8rgUt4K1WhPULWfpvkcb08yJDLrPlht3J51GG+gVAqi4gK6/v20vrP+YF6J87mLOLO7+6kCr9UYN05/r6yDeVkC7SF2ZH3WYW/5Ql7y6c7s5zfxkF8Y763PW15CPASm7ujN/qW20nOPBl/BElGwNhQlkjpoUKngPjz6LEJsm18lHI82g0wjwezW1WExAn4tEyMENiA0j/ezsl3iwqg/D+6mXC4JVcLmKd3R0wRN4ApJp3/PbTpOnc+Np+gF06kCHtFPG8TC/zmMhDLP7sZk9YsmNzW1D0H085syAA4/VbIbjbWpw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(39850400004)(376002)(396003)(346002)(36840700001)(46966006)(6666004)(4326008)(6486002)(5660300002)(16526019)(82740400003)(186003)(36860700001)(8936002)(478600001)(956004)(81166007)(70206006)(6862004)(70586007)(356005)(26005)(6506007)(53546011)(336012)(36756003)(2616005)(316002)(2906002)(6512007)(86362001)(47076005)(54906003)(33656002)(82310400003)(83380400001)(44832011)(8676002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 13:37:45.7364
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 1ae41800-3dd9-4e41-b110-08d93c9568e7
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT011.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5800



> On 24 Jun 2021, at 00:33, Stefano Stabellini <sstabellini@kernel.org> wro=
te:
>=20
> On Mon, 10 May 2021, Luca Fancellu wrote:
>> Modify docs/Makefile to call doxygen and generate sphinx
>> html documentation given the doxygen XML output.
>>=20
>> Modify docs/conf.py sphinx configuration file to setup
>> the breathe extension that works as bridge between
>> sphinx and doxygen.
>>=20
>> Add some files to the .gitignore to ignore some
>> generated files for doxygen.
>>=20
>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>> ---
>> .gitignore    |  6 ++++++
>> docs/Makefile | 42 +++++++++++++++++++++++++++++++++++++++---
>> docs/conf.py  | 48 +++++++++++++++++++++++++++++++++++++++++++++---
>> 3 files changed, 90 insertions(+), 6 deletions(-)
>>=20
>> diff --git a/.gitignore b/.gitignore
>> index 1c2fa1530b..d271e0ce6a 100644
>> --- a/.gitignore
>> +++ b/.gitignore
>> @@ -58,6 +58,12 @@ docs/man7/
>> docs/man8/
>> docs/pdf/
>> docs/txt/
>> +docs/doxygen-output
>> +docs/sphinx
>> +docs/xen.doxyfile
>> +docs/xen.doxyfile.tmp
>> +docs/xen-doxygen/doxygen_include.h
>> +docs/xen-doxygen/doxygen_include.h.tmp
>> extras/mini-os*
>> install/*
>> stubdom/*-minios-config.mk
>> diff --git a/docs/Makefile b/docs/Makefile
>> index 8de1efb6f5..2f784c36ce 100644
>> --- a/docs/Makefile
>> +++ b/docs/Makefile
>> @@ -17,6 +17,18 @@ TXTSRC-y :=3D $(sort $(shell find misc -name '*.txt' =
-print))
>>=20
>> PANDOCSRC-y :=3D $(sort $(shell find designs/ features/ misc/ process/ s=
pecs/ \( -name '*.pandoc' -o -name '*.md' \) -print))
>>=20
>> +# Directory in which the doxygen documentation is created
>> +# This must be kept in sync with breathe_projects value in conf.py
>> +DOXYGEN_OUTPUT =3D doxygen-output
>> +
>> +# Doxygen input headers from xen-doxygen/doxy_input.list file
>> +DOXY_LIST_SOURCES !=3D cat "xen-doxygen/doxy_input.list"
>> +DOXY_LIST_SOURCES :=3D $(realpath $(addprefix $(XEN_ROOT)/,$(DOXY_LIST_=
SOURCES)))

Hi Stefano,

>=20
> I cannot find exactly who is populating doxy_input.list. I can see it is
> empty in patch #6. Does it get populated during the build?

doxy_input.list is the only file that should be modified by the developer w=
hen he/she wants to add documentation
for a new file to be parsed by Doxygen, in my patch about documenting grant=
_tables.h you can see I add
there the path =E2=80=9Cxen/include/public/grant_table.h"

>=20
>=20
>> +DOXY_DEPS :=3D xen.doxyfile \
>> +			 xen-doxygen/mainpage.md \
>> +			 xen-doxygen/doxygen_include.h
>> +
>> # Documentation targets
>> $(foreach i,$(MAN_SECTIONS), \
>>   $(eval DOC_MAN$(i) :=3D $(patsubst man/%.$(i),man$(i)/%.$(i), \
>> @@ -46,8 +58,28 @@ all: build
>> build: html txt pdf man-pages figs
>>=20
>> .PHONY: sphinx-html
>> -sphinx-html:
>> -	sphinx-build -b html . sphinx/html
>> +sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
>> +ifneq ($(SPHINXBUILD),no)
>=20
> This check on SPHINXBUILD is new, it wasn't there before. Why do we need
> it now? We are not really changing anything in regards to Sphinx, just
> adding Doxygen support. Or was it a mistake that it was missing even
> before this patch?

Yes this is new, I saw that we didn=E2=80=99t look if sphinx was installed =
in the system, so now we did

>=20
>=20
>> +	$(DOXYGEN) xen.doxyfile
>> +	XEN_ROOT=3D$(realpath $(XEN_ROOT)) $(SPHINXBUILD) -b html . sphinx/htm=
l
>> +else
>> +	@echo "Sphinx is not installed; skipping sphinx-html documentation."
>> +endif
>> +
>> +xen.doxyfile: xen.doxyfile.in xen-doxygen/doxy_input.list
>> +	@echo "Generating $@"
>> +	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< \
>> +		| sed -e "s,@DOXY_OUT@,$(DOXYGEN_OUTPUT),g" > $@.tmp
>> +	@$(foreach inc,\
>> +		$(DOXY_LIST_SOURCES),\
>> +		echo "INPUT +=3D \"$(inc)\"" >> $@.tmp; \
>> +	)
>> +	mv $@.tmp $@
>> +
>> +xen-doxygen/doxygen_include.h: xen-doxygen/doxygen_include.h.in
>> +	@echo "Generating $@"
>> +	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< > $@.tmp
>> +	@mv $@.tmp $@
>=20
> Is the absolute path required? If not, we can probably get rid of this
> generation step and simply have the relative path in
> xen-doxygen/doxygen_include.h. I think this could apply to
> xen.doxyfile.in above.

Unfortunately yes, the doxygen_include.h is a file that is included in ever=
y documented header before=20
starting the doxygen parser, since we don=E2=80=99t have all the headers in=
 one path, it is impossible to have here
a relative path that is good for every header in Xen.

>=20
>=20
>> .PHONY: html
>> html: $(DOC_HTML) html/index.html
>> @@ -71,7 +103,11 @@ clean: clean-man-pages
>> 	$(MAKE) -C figs clean
>> 	rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~
>> 	rm -rf *.ilg *.log *.ind *.toc *.bak *.tmp core
>> -	rm -rf html txt pdf sphinx/html
>> +	rm -rf html txt pdf sphinx $(DOXYGEN_OUTPUT)
>> +	rm -f xen.doxyfile
>> +	rm -f xen.doxyfile.tmp
>> +	rm -f xen-doxygen/doxygen_include.h
>> +	rm -f xen-doxygen/doxygen_include.h.tmp
>>=20
>> .PHONY: distclean
>> distclean: clean
>> diff --git a/docs/conf.py b/docs/conf.py
>> index 50e41501db..a48de42331 100644
>> --- a/docs/conf.py
>> +++ b/docs/conf.py
>> @@ -13,13 +13,17 @@
>> # add these directories to sys.path here. If the directory is relative t=
o the
>> # documentation root, use os.path.abspath to make it absolute, like show=
n here.
>> #
>> -# import os
>> -# import sys
>> +import os
>> +import sys
>> # sys.path.insert(0, os.path.abspath('.'))
>>=20
>>=20
>> # -- Project information -----------------------------------------------=
------
>>=20
>> +if "XEN_ROOT" not in os.environ:
>> +    sys.exit("$XEN_ROOT environment variable undefined.")
>> +XEN_ROOT =3D os.path.abspath(os.environ["XEN_ROOT"])
>> +
>> project =3D u'Xen'
>> copyright =3D u'2019, The Xen development community'
>> author =3D u'The Xen development community'
>> @@ -35,6 +39,7 @@ try:
>>             xen_subver =3D line.split(u"=3D")[1].strip()
>>         elif line.startswith(u"export XEN_EXTRAVERSION"):
>>             xen_extra =3D line.split(u"=3D")[1].split(u"$", 1)[0].strip(=
)
>> +
>=20
> spurious change?

I think I=E2=80=99ve intentionally added a new line to separate the code fr=
om the except: below,
but if it is a problem I can remove it

>=20
>=20
>> except:
>>     pass
>> finally:
>> @@ -44,6 +49,15 @@ finally:
>>     else:
>>         version =3D release =3D u"unknown version"
>>=20
>> +try:
>> +    xen_doxygen_output =3D None
>> +
>> +    for line in open(u"Makefile"):
>> +        if line.startswith(u"DOXYGEN_OUTPUT"):
>> +                xen_doxygen_output =3D line.split(u"=3D")[1].strip()
>> +except:
>> +    sys.exit("DOXYGEN_OUTPUT variable undefined.")
>=20
> This is a bit strange: isn't there a better way to get the
> DOXYGEN_OUTPUT variable than reading the Makefile?
>=20
> At that point I think it would be better to define DOXYGEN_OUTPUT a
> second time in conf.py. But maybe it could be passed as an evironmental
> variable?

Yes we could pass it as an environment variable as we do with XEN_ROOT,
I will fix it in a next release.

>=20
>=20
>> # -- General configuration ---------------------------------------------=
------
>>=20
>> # If your documentation needs a minimal Sphinx version, state it here.
>> @@ -53,7 +67,8 @@ needs_sphinx =3D '1.4'
>> # Add any Sphinx extension module names here, as strings. They can be
>> # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
>> # ones.
>> -extensions =3D []
>> +# breathe -> extension that integrates doxygen xml output with sphinx
>> +extensions =3D ['breathe']
>>=20
>> # Add any paths that contain templates here, relative to this directory.
>> templates_path =3D ['_templates']
>> @@ -175,6 +190,33 @@ texinfo_documents =3D [
>>      'Miscellaneous'),
>> ]
>>=20
>> +# -- Options for Breathe extension ------------------------------------=
-------
>> +
>> +breathe_projects =3D {
>> +    "Xen": "{}/docs/{}/xml".format(XEN_ROOT, xen_doxygen_output)
>> +}
>> +breathe_default_project =3D "Xen"
>> +
>> +breathe_domain_by_extension =3D {
>> +    "h": "c",
>> +    "c": "c",
>> +}
>> +breathe_separate_member_pages =3D True
>> +breathe_show_enumvalue_initializer =3D True
>> +breathe_show_define_initializer =3D True
>> +
>> +# Qualifiers to a function are causing Sphihx/Breathe to warn about
>> +# Error when parsing function declaration and more.  This is a list
>> +# of strings that the parser additionally should accept as
>> +# attributes.
>> +cpp_id_attributes =3D [
>> +    '__syscall', '__deprecated', '__may_alias',
>> +    '__used', '__unused', '__weak',
>> +    '__DEPRECATED_MACRO', 'FUNC_NORETURN',
>> +    '__subsystem',
>=20
> Should we also have any of following:
>=20
> __packed
> __init
> __attribute__
> __aligned__
>=20
> in the list? In any case, we don't have to add them right now, we could
> add them later as we expand Doxygen coverage if they become needed.

Sure it is possible, I can add them now since I have to push a fix for this=
 patch
If you want.

Cheers,

Luca


>=20
>=20
>> +]
>> +c_id_attributes =3D cpp_id_attributes
>> +
>>=20
>> # -- Options for Epub output -------------------------------------------=
------



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 13:51:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 13:51:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148684.274760 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyx66-0001EH-6o; Thu, 01 Jul 2021 13:51:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148684.274760; Thu, 01 Jul 2021 13:51:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyx66-0001EA-3j; Thu, 01 Jul 2021 13:51:18 +0000
Received: by outflank-mailman (input) for mailman id 148684;
 Thu, 01 Jul 2021 13:51:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyx64-0001E0-RT; Thu, 01 Jul 2021 13:51:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyx64-0005xy-FX; Thu, 01 Jul 2021 13:51:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyx64-00080V-65; Thu, 01 Jul 2021 13:51:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lyx64-0002Ul-5b; Thu, 01 Jul 2021 13:51:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=cCsX2d3Uq9ajqqHEqWFqUPjBIMcSs3MLSgYGJ793iw4=; b=YOKr3xD04Dvl/ZA6RHxgl39pnE
	T7speR6AUYiUP6g0JBY6hotQAfUJAdTizPHOgZHbrotnDRX98JovwoqjX79aVZdLS7D1Tc2/7lX0D
	FTH0eHBgT6FgjoILF8CZbyflLqJ4tByz6VB43NKasJbjSMDYMxLd4jbl/ecjF+S0Xxxc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163204-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163204: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=d940d468e29bff5eb5669c0dd8f3de0c3de17bfb
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 13:51:16 +0000

flight 163204 qemu-mainline real [real]
flight 163211 qemu-mainline real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163204/
http://logs.test-lab.xenproject.org/osstest/logs/163211/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 152631
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1       fail REGR. vs. 152631

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                d940d468e29bff5eb5669c0dd8f3de0c3de17bfb
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  315 days
Failing since        152659  2020-08-21 14:07:39 Z  313 days  576 attempts
Testing same since   163204  2021-07-01 00:09:43 Z    0 days    1 attempts

------------------------------------------------------------
552 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 179833 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:03:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:03:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148690.274774 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxHe-0002ny-BF; Thu, 01 Jul 2021 14:03:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148690.274774; Thu, 01 Jul 2021 14:03:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxHe-0002nr-7I; Thu, 01 Jul 2021 14:03:14 +0000
Received: by outflank-mailman (input) for mailman id 148690;
 Thu, 01 Jul 2021 14:03:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lyxHd-0002nl-Gs
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:03:13 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lyxHc-0006Gm-5r; Thu, 01 Jul 2021 14:03:12 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lyxHb-0008GN-Sd; Thu, 01 Jul 2021 14:03:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Message-Id:Date:Subject:Cc:To:From;
	bh=mC+UL4mB6P83vegs7bksrkog22RhQJHUhe6zIy+isK0=; b=YhkOwdPHoTuIAE0LUzHmnBJGbS
	Z0/Otu0JTPcagSPeuI7vAPr1+4ju6vqMCe6VbRq8Nh7gra46cpv9tLNOO52SddmwFeIR84LiAMtxz
	BHUKTKl0T8zDMoM9uC08oNDVSRo1hiAnajgdtK1bgbLaEBw2QnZDL1KJZ4v7HYCs+EdQ=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: raphning@amazon.co.uk,
	doebel@amazon.de,
	Julien Grall <jgrall@amazon.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>,
	Julien Grall <julien@xen.org>
Subject: [PATCH] tools/xenstored: Stash the correct request in lu_status->in
Date: Thu,  1 Jul 2021 15:03:07 +0100
Message-Id: <20210701140307.2516-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1

From: Julien Grall <jgrall@amazon.com>

When Live-Updating with some load, Xenstored may hit the assert
req->in == lu_status->in in do_lu_start().

This is happening because the request is stashed when Live-Update
begins. This happens in a different request (see call lu_begin()
when select the new binary) from the one performing Live-Update.

To avoid the problem, stash the request in lu_start().

Fixes: 65f19ed62aa1 ("tools/xenstore: Don't assume conn->in points to the LU request")
Reported-by: Michael Kurth <mku@amazon.com>
Signed-off-by: Julien Grall <jgrall@amazon.com>

----

This was sadly missed because the on my testing the 2 requests were
residing at the same place in memory.

This was reproduced by creating domain while Live-Updating. Without
the patch, Xenstored will crash.
---
 tools/xenstore/xenstored_control.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/xenstore/xenstored_control.c b/tools/xenstore/xenstored_control.c
index a1b1bd5a718d..ff9863c17fa4 100644
--- a/tools/xenstore/xenstored_control.c
+++ b/tools/xenstore/xenstored_control.c
@@ -103,7 +103,6 @@ static const char *lu_begin(struct connection *conn)
 	if (!lu_status)
 		return "Allocation failure.";
 	lu_status->conn = conn;
-	lu_status->in = conn->in;
 	talloc_set_destructor(lu_status, lu_destroy);
 
 	return NULL;
@@ -757,6 +756,7 @@ static const char *lu_start(const void *ctx, struct connection *conn,
 	lu_status->force = force;
 	lu_status->timeout = to;
 	lu_status->started_at = time(NULL);
+	lu_status->in = conn->in;
 
 	errno = delay_request(conn, conn->in, do_lu_start, conn, false);
 
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:06:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:06:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148695.274784 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxKy-0003Qn-Qo; Thu, 01 Jul 2021 14:06:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148695.274784; Thu, 01 Jul 2021 14:06:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxKy-0003Qg-Nq; Thu, 01 Jul 2021 14:06:40 +0000
Received: by outflank-mailman (input) for mailman id 148695;
 Thu, 01 Jul 2021 14:06:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=T0jQ=LZ=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1lyxKx-0003QY-Sb
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:06:40 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.21.44]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8be6d3fe-da75-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:06:36 +0000 (UTC)
Received: from DU2PR04CA0341.eurprd04.prod.outlook.com (2603:10a6:10:2b4::30)
 by AM8PR08MB5858.eurprd08.prod.outlook.com (2603:10a6:20b:1dc::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Thu, 1 Jul
 2021 14:06:27 +0000
Received: from DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:2b4:cafe::93) by DU2PR04CA0341.outlook.office365.com
 (2603:10a6:10:2b4::30) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Thu, 1 Jul 2021 14:06:27 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT057.mail.protection.outlook.com (10.152.20.235) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 14:06:27 +0000
Received: ("Tessian outbound 80741586f868:v97");
 Thu, 01 Jul 2021 14:06:27 +0000
Received: from e3cd01550ddd.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A076492F-2A74-474E-9194-9D26169C7376.1; 
 Thu, 01 Jul 2021 14:06:18 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e3cd01550ddd.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 01 Jul 2021 14:06:18 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PA4PR08MB6045.eurprd08.prod.outlook.com (2603:10a6:102:ef::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.24; Thu, 1 Jul
 2021 14:06:13 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025%7]) with mapi id 15.20.4264.026; Thu, 1 Jul 2021
 14:06:13 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO4P123CA0147.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:188::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 14:06:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8be6d3fe-da75-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IbKTHFU2AlA3cBd5ckibrMKo40WTXMTV53PLkroJV10=;
 b=BNO//h8TpjYA6+RJFklsa3GppskxxId8MvR9JmJg2HHcoYdCBZqz9dh8miBEU3H2il1RCQ8KGlrT+4e7Ee9W50u3mZARViSzvf7grrYyDKDlKzbObTTGBO2I0kh/3JpX7sfSJjViPW9Q7aXCkrAqsfDPo6SkCpB2gYYFk+j9z14=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 6ad17504501bd2e0
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MK8solLtVlI4K3xA3usEuwd6uz5J/N/3rb5HGtTuHQQC8nS9ETYfUUn/GwfXe9cxeoVfnKunkMF25SSoxtB3oHNyn5UDi8rKGaLPwnDDUhq6lxSkpSvup0cVQdiV6StwIHgm2ftO+JZ/eIJK8PG5aQ3x+Lo5Exkou7twkkorlklA4fzsvu3VV5VubUREy3gyBpNvm12zyD5MCVgB3BYmO94+AXfuJ8FGPHbR9FEy9Wlaj8ao8Sf6u5MZG/25Ehp/MlcYN80Jxj3inuVcod4FC8RnqzkCjd3l995ywlc35CvxUXC8NbYGCJI7XQx9J3OTHbaS0rTJV8oNhLNeIMeTQg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IbKTHFU2AlA3cBd5ckibrMKo40WTXMTV53PLkroJV10=;
 b=UpWlRr0U/1UWuq4DCd4/mx9hs7eVAYnXELNvLcpzf3PvM9xdsplI+Vs+4E9TdPxMjvWD4JkHlt9MnG8Xodk8V6hMva2s8qTlfVGToXO5oJLkRvbifrJ9sbjH9yuic59u/ZIxnq8BfWig+wNkJU0I+fmMSpFEJXna2kyQRBlLdHSMxnXaz5NetUiybOaJCTntkz6zR9GAeuMW5AHdHbsk8U28bnR3nEKazmhXXp/PTyjD2MTcALJu3zs2ESKDk1qx0rEk9wSC1DuACD53dMWmTmFWWmVsqws7ZBqpyTbFHQFI/gLUwu0WWeL5fQKs74VMZiDe9rTtaF0587bFyjHttw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IbKTHFU2AlA3cBd5ckibrMKo40WTXMTV53PLkroJV10=;
 b=BNO//h8TpjYA6+RJFklsa3GppskxxId8MvR9JmJg2HHcoYdCBZqz9dh8miBEU3H2il1RCQ8KGlrT+4e7Ee9W50u3mZARViSzvf7grrYyDKDlKzbObTTGBO2I0kh/3JpX7sfSJjViPW9Q7aXCkrAqsfDPo6SkCpB2gYYFk+j9z14=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=us-ascii
Subject: Re: [PATCH v6 8/9] docs: hypercalls sphinx skeleton for generated
 html
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2106231523210.24906@sstabellini-ThinkPad-T480s>
Date: Thu, 1 Jul 2021 15:06:06 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <D2BAA7F7-4396-4EE7-977B-AE300A50589D@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-9-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231523210.24906@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO4P123CA0147.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:188::8) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 03ad84dd-f8e8-43fe-9843-08d93c996afb
X-MS-TrafficTypeDiagnostic: PA4PR08MB6045:|AM8PR08MB5858:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<AM8PR08MB5858B06B75F12812091D0EFEE4009@AM8PR08MB5858.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 ltVqP6y7aoZV2LZwUfzYaADxENnOwI4o/t/GHpfj61BawkNgSL+915iIsBrn44SEM3td2mFjhWrqEj0D52PD1iCMbxq7ELLtjPVPVHu0yk94cucgdnifa0747mGoresGsJIAiKKS7lc8Wbv3mef1SELLpas5E3bRVTkKl6WGVu7DH3haOXY66QK2kURpSM/vSDeYzd6XqNE60R4fHj/ufqDez2zzJ9tJY+aCwXCjqSFGUst/OJLmDL04513uWOCW2rfWYftlylDz5ovjWTe44oTvNG9O1isQWcsaio63wQwkD6MgI/5oZhhJj4l79lyHgxk8SqBV+UEjnJYGoWO5OrrjUx8Q2aTd8MZEqGRQtY/y8ivRqD8jG3FKjGCt6Mc+xQ0sQFp8xPNbkH09aAexFaAS96vhs5A/PLcTdbjVeD4O1L6QEuDiir5my6WlO7yUqojvUg7cyOHKHcJ5Yk+jN88uJS/HzJVmkbfFM7+zS7VSI8BDTw9l0V5Z9E9TX5HYyVq+icJInQtYgOgn9GwbKhnECbzTkf9u8+eB83pXMQ5ZRIJiLb1PQFfUhbgpC/0hc/nJqQM02gE9dS+c3r+QAdzH9d3AH4FepE5mE2sDwt/9kxIGhRQ5VLJyTfhtNLZCVZlORAejoMGc3NB9ccNGmWIe2512DRR9TMnIF7YCPfBew8BgyPy1uSHg9vtHUdPMSohlhxWlCMu+kjRWBrnqFFP4oy2yDPOiIPfar22QQOQ=
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(366004)(376002)(39850400004)(346002)(396003)(316002)(44832011)(6486002)(54906003)(38350700002)(38100700002)(186003)(16526019)(26005)(6512007)(6666004)(6506007)(53546011)(66946007)(52116002)(2906002)(33656002)(36756003)(86362001)(4326008)(66556008)(66476007)(956004)(2616005)(6916009)(8676002)(8936002)(5660300002)(478600001)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 =?us-ascii?Q?JxTDEZ30QfPigQbNDsjMSUam8ezmIS/Kwv9JsffETV8jGKhmd1sM3ezZwUIs?=
 =?us-ascii?Q?jFJUWZn5XnZx/LqOg/zPhLLf1rpD+rGI46huTzT+ljviKVP0FDfTZOyG7khN?=
 =?us-ascii?Q?fDZPucmwf+z+guPpMPYRIfDHRjf/VA5UaYfkX7xE+Nm/mx/CD9eezoGKi1FV?=
 =?us-ascii?Q?MW731QjIOfV5C2UkOzvqHY/aDDW0YZCxqCJbZv4FuC8fs+oYdZNae2EgWHKv?=
 =?us-ascii?Q?4WbkYZtW0/YBgtxv7pEw85RIIGsyqYGODqJuW6k/xKwGA+lGyPNf5Ni6Q0xL?=
 =?us-ascii?Q?lx47lKsuLXvOAy8IcBXRrxSNTz4ZPn7BZFinyH45soR9X8lZhDrr18gIRqwK?=
 =?us-ascii?Q?ZyZ1m5gdN8VfZYC9dXx86pEIfpJ9078IiU1NhJbdsyo6G+gKnb9UcVi4MKHC?=
 =?us-ascii?Q?NDBam42k5orp9RDyeQ9FTJPyNgTJnFyOyxQJerngE0El5k5Ww8v79+Fg0Yai?=
 =?us-ascii?Q?i+l0Y2VhMx7weq6+kKKiJsCi8cpv/GbxRFZxzVmiqdyLse6Kr5oG1cQZoGq4?=
 =?us-ascii?Q?pqfsgAgRQAlw5v/0Fzbu5gqoniJG2z30k88KWJvpnEPXuLYP5fWkoEtqd5lx?=
 =?us-ascii?Q?V2cqEjBC5Ui2zJSpX1MH4ituu1vndqibQwOc8VLnyTxvLRgVsNgUpgJJYfE9?=
 =?us-ascii?Q?mAlSx+HMYNdyDWD6jaF4nO5FZaVQ1KF+ukMRgVSO8CwnHV6IA2M7vr+g0Esv?=
 =?us-ascii?Q?Z5a0FBfrpDHoqSTUXWkC39AsYuo3blYMNlyqwDdqwtN/XAqm+96ecaWxhbx6?=
 =?us-ascii?Q?ct6Lz+LxL87LcIV+nc0UlRO8EYjH5QJ+h2P1tJe56rhXOdLylE9uJisrL24m?=
 =?us-ascii?Q?IoJG2nXw+MNfQFt6Y6asKxbPTEZ/ywi/31wbxM8xk1ZVvrWJY8o1t7TgOrqV?=
 =?us-ascii?Q?roRJ8cc2vVaZrpxxZgxs4Ui3QLItzIpxH6SOe+rsVgswRJM5QHZ5mUrCekzj?=
 =?us-ascii?Q?sMQ6d1NpIEW5r/iQqAuAoMY6DuzphyDbrnBA37cQhtSZ6jR+Im8zP2l+pYM/?=
 =?us-ascii?Q?Sl9WLrhaCj+r/LaByaK3PyhAT7wNIZXFQjBn1tx4egHVVpC0Uw2L0dJgE917?=
 =?us-ascii?Q?/Eced9S6Xn3Ewj6MnurFN5u/3iL2+oF8WlkN5rMY0bQrgu1+x7sC81CeZ3WU?=
 =?us-ascii?Q?DIa8zbhxCU26KC8udNSkUFv/kqq5qMVWcqmtdeN1a2WaMsipRLGfynRV2wnB?=
 =?us-ascii?Q?9KCoi1uvQJ+T4REJlx2fMFr3ljae8Xc7M2ocskU4j8bNXiIuoA8mq62siYDs?=
 =?us-ascii?Q?E8R5DTuOGIZMjY4KGMwagly9Z5YKf0EP2H42GvoA4U0NqPsFF5hWgLbSYeNf?=
 =?us-ascii?Q?Fnjf9XHPp8pw8o4tjAPkaEAV?=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6045
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4653e4a1-2bea-4081-3ef5-08d93c99626d
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	tazJGIVRTSP185RR6UsagtV0/cyihD9ctUekBWN3h7jJlyTzjLFxxEUgcgs8/o63DsITBYpY/T1vjZuVJO9n7KtzYzMl4LDucQkAJxoFgZaLEytCCLc6g5t4W60P3j/1NxyezyZb9TZOXxHJW+BZrS4+zZ26TMQLLqjOWwbBU8TtreaeRCeFYmSA9h7+QmYxi67elV2W2xXJlMveIYYM25QjoqMHVd+AMe8wfUaKKM/SHU9LXonNsij2RjafiCfFTMz+sP5m+5IeY7QBOrhJ6pQ2DlIDec6hJd+aAL9nkagqgHZqaM8U2C7IDm0SY3yd8d7CaCLNvXwzmKw0ef5m/MDH7IfojTJyw23WQ3oxdMLdnV/ykMg9RBhI8AT0YxgwvZt4QjdZreyIyXStZhG6OpRc/3ZJUQFdvwCSTCHfPA4XREBBPFfkOZv1YlRd/aMiH+uicmA5YhTorpSreNDMeM8WQNi1+0Vd6epuNHeAIebk1z3kxboFFSKMOJi3vPuzw14jpnK4dH3XIums0l8oPW+LrMkV6re7Wr+zSh5rkN31ZQWIx4ib8kGSjZWZ8MhEVW/Y7UXF+kHdToArVEv98c+PsKycwPb57AQXZQ1heRe0I/cO/lxrJj/YUxXu3j4tUAWOapYyNBtKkDn02lLfnt8jMJwCdvvzMf+i3zIq//ttTFLIEh5LomJniiepuvt1pU1/wx3SAwcgTFJ4GIVD1Q==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(396003)(136003)(346002)(376002)(36840700001)(46966006)(81166007)(70206006)(82740400003)(8676002)(6862004)(2616005)(356005)(33656002)(2906002)(4326008)(36860700001)(956004)(478600001)(5660300002)(47076005)(336012)(6506007)(70586007)(316002)(6486002)(6666004)(26005)(186003)(16526019)(53546011)(82310400003)(36756003)(8936002)(86362001)(54906003)(6512007)(44832011);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 14:06:27.2092
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 03ad84dd-f8e8-43fe-9843-08d93c996afb
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB5858



> On 24 Jun 2021, at 00:34, Stefano Stabellini <sstabellini@kernel.org> wro=
te:
>=20
> On Mon, 10 May 2021, Luca Fancellu wrote:
>> Create a skeleton for the documentation about hypercalls
>>=20
>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>> ---
>> v6 changes:
>> - Now every platform has the same sections in .rst files
>> ---
>> .gitignore                             |  1 +
>> docs/Makefile                          |  4 ++++
>> docs/hypercall-interfaces/arm32.rst    | 32 ++++++++++++++++++++++++++
>> docs/hypercall-interfaces/arm64.rst    | 32 ++++++++++++++++++++++++++
>> docs/hypercall-interfaces/index.rst.in |  7 ++++++
>> docs/hypercall-interfaces/x86_64.rst   | 32 ++++++++++++++++++++++++++
>> docs/index.rst                         |  8 +++++++
>> 7 files changed, 116 insertions(+)
>> create mode 100644 docs/hypercall-interfaces/arm32.rst
>> create mode 100644 docs/hypercall-interfaces/arm64.rst
>> create mode 100644 docs/hypercall-interfaces/index.rst.in
>> create mode 100644 docs/hypercall-interfaces/x86_64.rst
>>=20
>> diff --git a/.gitignore b/.gitignore
>> index d271e0ce6a..a9aab120ae 100644
>> --- a/.gitignore
>> +++ b/.gitignore
>> @@ -64,6 +64,7 @@ docs/xen.doxyfile
>> docs/xen.doxyfile.tmp
>> docs/xen-doxygen/doxygen_include.h
>> docs/xen-doxygen/doxygen_include.h.tmp
>> +docs/hypercall-interfaces/index.rst
>> extras/mini-os*
>> install/*
>> stubdom/*-minios-config.mk
>> diff --git a/docs/Makefile b/docs/Makefile
>> index 2f784c36ce..b02c3dfb79 100644
>> --- a/docs/Makefile
>> +++ b/docs/Makefile
>> @@ -61,6 +61,9 @@ build: html txt pdf man-pages figs
>> sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
>> ifneq ($(SPHINXBUILD),no)
>> 	$(DOXYGEN) xen.doxyfile
>> +	@echo "Generating hypercall-interfaces/index.rst"
>> +	@sed -e "s,@XEN_TARGET_ARCH@,$(XEN_TARGET_ARCH),g" \
>> +		hypercall-interfaces/index.rst.in > hypercall-interfaces/index.rst
>=20

Hi Stefano,

> I take that this means we are going to generate docs only for the
> architecture that we are building? So if we build for x86, then the docs
> are for x86 (no arm32 and arm64 docs.) Is that right?
>=20
> Is that because Doxygen relies somehow on the compiler to extract data?
> I am asking because if Doxygen doesn't rely on the compiler, then it
> could probably generate the docs for all architectures in one go?

Doxygen rely on the headers generated from the KConfig system to properly s=
olve
the preprocessor step, for that reason here we need that.

It can be improved for sure, but it needs to call a defconfig for each arch=
itecture and
have separate Doxygen-output folders for each one, then on the rst files yo=
u can choose
from which arch you want the data.

I think this step can be done in a future serie.

Cheers,

Luca

>=20
>=20
>=20
>> 	XEN_ROOT=3D$(realpath $(XEN_ROOT)) $(SPHINXBUILD) -b html . sphinx/html
>> else
>> 	@echo "Sphinx is not installed; skipping sphinx-html documentation."
>> @@ -108,6 +111,7 @@ clean: clean-man-pages
>> 	rm -f xen.doxyfile.tmp
>> 	rm -f xen-doxygen/doxygen_include.h
>> 	rm -f xen-doxygen/doxygen_include.h.tmp
>> +	rm -f hypercall-interfaces/index.rst
>>=20
>> .PHONY: distclean
>> distclean: clean
>> diff --git a/docs/hypercall-interfaces/arm32.rst b/docs/hypercall-interf=
aces/arm32.rst
>> new file mode 100644
>> index 0000000000..6762d9fc7c
>> --- /dev/null
>> +++ b/docs/hypercall-interfaces/arm32.rst
>> @@ -0,0 +1,32 @@
>> +.. SPDX-License-Identifier: CC-BY-4.0
>> +
>> +Hypercall Interfaces - arm32
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
>> +
>> +Starting points
>> +---------------
>> +.. toctree::
>> +   :maxdepth: 2
>> +
>> +
>> +
>> +Functions
>> +---------
>> +
>> +
>> +Structs
>> +-------
>> +
>> +
>> +Enums and sets of #defines
>> +--------------------------
>> +
>> +
>> +Typedefs
>> +--------
>> +
>> +
>> +Enum values and individual #defines
>> +-----------------------------------
>> +
>> +
>> diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interf=
aces/arm64.rst
>> new file mode 100644
>> index 0000000000..5e701a2adc
>> --- /dev/null
>> +++ b/docs/hypercall-interfaces/arm64.rst
>> @@ -0,0 +1,32 @@
>> +.. SPDX-License-Identifier: CC-BY-4.0
>> +
>> +Hypercall Interfaces - arm64
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
>> +
>> +Starting points
>> +---------------
>> +.. toctree::
>> +   :maxdepth: 2
>> +
>> +
>> +
>> +Functions
>> +---------
>> +
>> +
>> +Structs
>> +-------
>> +
>> +
>> +Enums and sets of #defines
>> +--------------------------
>> +
>> +
>> +Typedefs
>> +--------
>> +
>> +
>> +Enum values and individual #defines
>> +-----------------------------------
>> +
>> +
>> diff --git a/docs/hypercall-interfaces/index.rst.in b/docs/hypercall-int=
erfaces/index.rst.in
>> new file mode 100644
>> index 0000000000..e4dcc5db8d
>> --- /dev/null
>> +++ b/docs/hypercall-interfaces/index.rst.in
>> @@ -0,0 +1,7 @@
>> +.. SPDX-License-Identifier: CC-BY-4.0
>> +
>> +Hypercall Interfaces
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> +
>> +.. toctree::
>> +   @XEN_TARGET_ARCH@
>> diff --git a/docs/hypercall-interfaces/x86_64.rst b/docs/hypercall-inter=
faces/x86_64.rst
>> new file mode 100644
>> index 0000000000..59e948900c
>> --- /dev/null
>> +++ b/docs/hypercall-interfaces/x86_64.rst
>> @@ -0,0 +1,32 @@
>> +.. SPDX-License-Identifier: CC-BY-4.0
>> +
>> +Hypercall Interfaces - x86_64
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
>> +
>> +Starting points
>> +---------------
>> +.. toctree::
>> +   :maxdepth: 2
>> +
>> +
>> +
>> +Functions
>> +---------
>> +
>> +
>> +Structs
>> +-------
>> +
>> +
>> +Enums and sets of #defines
>> +--------------------------
>> +
>> +
>> +Typedefs
>> +--------
>> +
>> +
>> +Enum values and individual #defines
>> +-----------------------------------
>> +
>> +
>> diff --git a/docs/index.rst b/docs/index.rst
>> index b75487a05d..52226a42d8 100644
>> --- a/docs/index.rst
>> +++ b/docs/index.rst
>> @@ -53,6 +53,14 @@ kind of development environment.
>>    hypervisor-guide/index
>>=20
>>=20
>> +Hypercall Interfaces documentation
>> +----------------------------------
>> +
>> +.. toctree::
>> +   :maxdepth: 2
>> +
>> +   hypercall-interfaces/index
>> +
>> Miscellanea
>> -----------
>>=20
>> --=20
>> 2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148699.274796 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxO9-00049J-Dv; Thu, 01 Jul 2021 14:09:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148699.274796; Thu, 01 Jul 2021 14:09:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxO9-00049C-Au; Thu, 01 Jul 2021 14:09:57 +0000
Received: by outflank-mailman (input) for mailman id 148699;
 Thu, 01 Jul 2021 14:09:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tPK9=LZ=citrix.com=George.Dunlap@srs-us1.protection.inumbo.net>)
 id 1lyxO7-000494-IF
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:09:55 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 01f3054a-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:09:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 01f3054a-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148594;
  h=from:to:cc:subject:date:message-id:references:
   in-reply-to:content-id:content-transfer-encoding:
   mime-version;
  bh=eon9sNIahDWrgyFAaZIRX9vSn77mUv2BAx0W5C/4uLU=;
  b=Wx75YNY9LOa5kRcpypnMNepNLrG9gzXckmBvynwelH3WryqptFXs8yip
   1FBXFf8Bw3wQPhBd2Jr4S3msgXibRPl+tYZqNdBSeJ9YHtJjBF/xgp7Tm
   UVxKWuwC2VFyTfzKft2HtSR1+k4xs8BkP5jLY9mFM1eeQAL50XERUpSKe
   E=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: o9Qqq7SGbEV6l5QW3XrwILTlDeqGYpAUgteR5Vu1gdwLny5S/sMadyZdRaS+9/Cow6ExD2BDkq
 g+8eH5/P/qdxQ2F7hoO/ijmGhqJ2S8GWaBVEGxMLPIEH8o4ugdeGl8dbAOTdvfb3bUjqc0O8Kp
 ruKE9CUBNFJvfEjUNacScMFqzmVCtuYvlIsYKWN7fd4GcHK27zDkHluwv7k6YdepgD1PvBXwlr
 9BVZskAfqt3K48DtwIfHckZfL9ribz9Tnf96kCjbUBYnX7tp5G+/ACtpjf4QwUrKAVZ9T9Tl51
 c6Y=
X-SBRS: 5.1
X-MesageID: 47755271
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Fk5ipako6LEsygqkS23Q05rCX4LpDfLW3DAbv31ZSRFFG/Fw9/
 rCoB3U73/JYVcqKRUdcLW7UpVoLkmyyXcY2+cs1NSZLWzbUQmTXeJfBOLZqlWNJ8SXzIVgPM
 xbAspD4bPLbGSTjazBkXSF+9RL+qj6zEh/792usEuETmtRGt9dBx8SMHf9LqXvLjM2fqbQEv
 Cnl6x6jgvlQ1s7ROKhCEIIWuDSzue77q4PMXY9dmcaABDlt0LR1ILH
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755271"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Oodp9vd6P11DdzvMGYL9E6521Yrd6TG3yhfgft3MMBkwVdV30EgPuQIglGIQsx/HzBdddttG4jPBLktByEc0aHDkLjZBjMNluMvAuiPQlXCwcK/7PZAjF/VulDBE461JsxBWkhjsGfMWTy1Z/sYYy7cj78INNAa5X/a3qj52HhCUli7hpSxMnws7t99JLiJ/0NHIP+eotT1im731W8qcjwDxL35WhzgfLzaXqsInTCcV2T0xGpyoiPmP+dPnYuytYJyqxjINwrjf837f6KUa34+QWao/T7b7/U7sMfTzGt8p6UErImO41M/SM7DXe1RfGEXan/hvktJxmVhZZKUHKQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=eon9sNIahDWrgyFAaZIRX9vSn77mUv2BAx0W5C/4uLU=;
 b=Wv11+SGLNeQVpLEyxKH+VVC/PnLVi4YRqYSDqnseWqKx1vHQzOgSvwMJwZsonxnTGUCmnBzWqdcubQMjIC+V37TJxBpuJ9UJ+atHyQUztN4Y5NfU95Dx5ltuKM/esv8FkGTS+nOHOV5Nh7k6BuYzykT+VFuecV4JI67CsB8zKTQSOUPmleal4RfWR0yGtmAn+oyEafGZG6WFm/r+WOJGkEJuVynYnXpA02SI0gboHzAGVoNIo8Bh4OH0c666NNUzkf5o2jDH3Smrqu191K5VmiVeWrpJuny9D32z5e9+cJ/YQRkWNwx2jnZCahfw1qWkLVopEwB0UId2aNDCA++5Eg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=eon9sNIahDWrgyFAaZIRX9vSn77mUv2BAx0W5C/4uLU=;
 b=EkadcRHnp6mohxfNjOh5cf4duVm8cwi+hTJd0Rz6yNW4eOcmSEMGFEnm2hmBlxq8CD1bSH6AcbhEaupI/PwRhUQcLarekjZnNLekZRR0kAcQfXX9ZhhF5rm1RwhdEJ6bpGRl5vEpvY3JHXeHcTPxU9gekEW+k5aUZi14uXQVOww=
From: George Dunlap <George.Dunlap@citrix.com>
To: Nick Rosbrook <rosbrookn@gmail.com>
CC: xen-devel <xen-devel@lists.xenproject.org>, Nick Rosbrook
	<rosbrookn@ainfosec.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
Subject: Re: [RESEND PATCH 03/12] golang/xenlight: fix string conversion in
 generated toC functions
Thread-Topic: [RESEND PATCH 03/12] golang/xenlight: fix string conversion in
 generated toC functions
Thread-Index: AQHXUNysz1ZbuKJBuU+rSVrlC2Thy6sZwI6AgAUN5YCAD5VSgA==
Date: Thu, 1 Jul 2021 14:09:47 +0000
Message-ID: <22BCDDFA-0EDB-466D-B644-54A956C0D84C@citrix.com>
References: <cover.1621887506.git.rosbrookn@ainfosec.com>
 <06763aceff41167d3d3bbd603f729572c1f55c77.1621887506.git.rosbrookn@ainfosec.com>
 <6BAF6F60-EC63-41AC-A46E-2045E746C7E1@citrix.com>
 <YNC6LzVHXCcNfg+E@FED-nrosbr-BE.crux.rad.ainfosec.com>
In-Reply-To: <YNC6LzVHXCcNfg+E@FED-nrosbr-BE.crux.rad.ainfosec.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.60.0.2.21)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 9ab6c070-b370-4bb4-0b04-08d93c99e26f
x-ms-traffictypediagnostic: PH0PR03MB5861:
x-microsoft-antispam-prvs: <PH0PR03MB58616F35B6AD996E89B3CDB499009@PH0PR03MB5861.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:2657;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: LonZVojVwI2lxyM/GygovcG73eGjvI2RwYS4m24HD3uUib3pZgWwv+vCohsXQ8oLfwLpXiqJ746TPwDPYVaJsb6X4y0RA8OGS4VoU4ZhEeIZn8fPWCLwyg55E7Fs7xxvaEWGRhEVF1RHGrS/1IEXwPhRHsBMirqnUu/Psp17mRjAMWsKfDFobyU+P/4Qlgobk2PvZNom5pKDpw4Y/UkZehLheHZ+dlTiyt2FadxWuOWaIjn3nBYBHho9HbXWIFtyDNOjxF12R/tTPN8mvl+6hqStrYGdBBPAt0xU25UaEZQt4Agi2T9Um41i85E4NJG807Vbnd7LZYA5uqcm3DNzZ5q4WWzXgG2ThYFHjGkHhaqjwVuFFg5kBwtKSQSxYZ2DGAPe+HDSWkSySXrGjAkpcQPQgD5RYl8OIoAAPIfgNOK9y1MfqKeGjl/mnAH7ueiDI+71GKQiHrTuw4jjLStfwpVlNjQrs+u3UgXcBukouK7VgyxuRT11TIs/bSHNOJSfSPi9NcRzd8PYi2EeZNt4nbvGIOIIjYql0/TDIQWEOIw5q/WzQqyUVYBSKa+rrfFLgrOGeyhbvA/UHxqzTG7jw7o/dMSzwOBnroxkg/rr58cMlj8L7m5/Uz9avXDWv/IUleOEFgsYbNYdp55rIX2v2ua/Vj7kamP8tfZaDvYdTGZf5JROM5Ht3funN/7+IPlCaFDG22No0gn9VrUmmJ82MA==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR03MB5669.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(346002)(376002)(39850400004)(396003)(478600001)(91956017)(76116006)(316002)(4326008)(2906002)(8936002)(122000001)(38100700002)(66946007)(2616005)(8676002)(71200400001)(83380400001)(186003)(86362001)(6486002)(54906003)(5660300002)(36756003)(53546011)(64756008)(66476007)(66556008)(6512007)(66446008)(26005)(6916009)(33656002)(6506007)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
 =?utf-8?Q?W+yo/j8dHxDU2nyILgkQHA9fM/mKUrzD/6xWqFF?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <D2298BC982799344B85740357D1014E4@namprd03.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR03MB5669.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 9ab6c070-b370-4bb4-0b04-08d93c99e26f
X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jul 2021 14:09:47.5509
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ZShJsr0mMGx2wRebhN05T8pUr89VxC8alXwKWvozpcPH5UCUSZym+Cb77Z7PGgSVvdRhyVHDx6MHaQclyb7bYP8a6B/J6hcaZnfw/tcb0/E=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5861
X-OriginatorOrg: citrix.com

DQoNCj4gT24gSnVuIDIxLCAyMDIxLCBhdCA1OjExIFBNLCBOaWNrIFJvc2Jyb29rIDxyb3Nicm9v
a25AZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIEZyaSwgSnVuIDE4LCAyMDIxIGF0IDExOjAw
OjI2QU0gKzAwMDAsIEdlb3JnZSBEdW5sYXAgd3JvdGU6DQo+PiANCj4+IA0KPj4+IE9uIE1heSAy
NCwgMjAyMSwgYXQgOTozNiBQTSwgTmljayBSb3Nicm9vayA8cm9zYnJvb2tuQGdtYWlsLmNvbT4g
d3JvdGU6DQo+Pj4gDQo+Pj4gSW4gZ2VuZ290eXBlcy5weSwgdGhlIHRvQyBmdW5jdGlvbnMgb25s
eSBzZXQgQyBzdHJpbmcgZmllbGRzIHdoZW4NCj4+PiB0aGUgR28gc3RyaW5ncyBhcmUgbm9uLWVt
cHR5LiBIb3dldmVyLCB0byBwcmV2ZW50IHNlZ2ZhdWx0cyBpbiBzb21lDQo+Pj4gY2FzZXMsIHRo
ZXNlIGZpZWxkcyBzaG91bGQgYWx3YXlzIGF0IGxlYXN0IGJlIHNldCB0byBuaWwgc28gdGhhdCB0
aGUgQw0KPj4+IG1lbW9yeSBpcyB6ZXJvZWQgb3V0Lg0KPj4+IA0KPj4+IFVwZGF0ZSBnZW5nb3R5
cGVzLnB5IHNvIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGFsd2F5cyBzZXRzIHRoZXNlIGZpZWxk
cw0KPj4+IHRvIG5pbCBmaXJzdCwgYW5kIHRoZW4gcHJvY2VlZHMgdG8gY2hlY2sgaWYgdGhlIEdv
IHN0cmluZyBpcyBub24tZW1wdHkuDQo+Pj4gQW5kLCBjb21taXQgdGhlIG5ldyBnZW5lcmF0ZWQg
Y29kZS4NCj4+PiANCj4+PiBTaWduZWQtb2ZmLWJ5OiBOaWNrIFJvc2Jyb29rIDxyb3Nicm9va25A
YWluZm9zZWMuY29tPg0KPj4gDQo+PiBTbyB3YWl0IOKAlCBpZiB5b3UgZG8NCj4+IA0KPj4gdmFy
IGZvbyBDLnR5cGVuYW1lDQo+PiANCj4+IFRoZW4gZ29sYW5nIHdvbuKAmXQgYXV0b21hdGljYWxs
eSB6ZXJvIG91dCBgZm9vYD8NCj4+IA0KPj4gVGhhdCBzZWVtcyBsaWtlIGEgYnVnIHJlYWxseTsg
YnV0IGFzc3VtaW5nIHRoaXMgZml4ZXMgcmVhbCBiZWhhdmlvciB5b3XigJl2ZSBlbmNvdW50ZXJl
ZDoNCj4gDQo+IEkgd291bGQgaGF2ZSB0byBkaWcgaW4gYWdhaW4gdG8gZmlndXJlIG91dCBleGFj
dGx5IHdoYXQgR28vY2dvIGlzIGRvaW5nDQo+IGhlcmUsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlz
IGlzIGEgYnVnLiBCdXQsIHRoZSBiZWhhdmlvciBJIG9ic2VydmVkIHdhcw0KPiB0aGF0IHdpdGhv
dXQgdGhlc2UgbmlsIGFzc2lnbm1lbnRzLCBJIHdvdWxkIHNvbWV0aW1lcyBnZXQgc2VnZmF1bHRz
IGluDQo+IGxpYnhsX3N0cmluZ19jb3B5LiBUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBsaWJ4bF9f
c3RyX2R1cCBpcyBub3QgY2FsbGVkDQo+IGluIHRoZSBlbXB0eSBzdHJpbmcgY2FzZSwgdGh1cyBh
dm9pZGluZyB0aGUgc2VnZmF1bHQuDQoNCkkgc2tpbW1lZCB0aHJvdWdoIHRoZSBDR28gcGFnZSBh
Z2FpbiB3aGVuIEkgd2FzIGxvb2tpbmcgYXQgdGhpcywgYW5kIGRpZG7igJl0IHNlZSBhbnl0aGlu
ZyBzcGVjaWZpZWQgYWJvdXQgd2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBpcyBwYXNzZWQgdG8g
YSBDIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyB1c2VkIGJ5IGdvbGFuZy4gIElmIHlvdSBnZXQgYSBj
aGFuY2UsIEkgdGhpbmsgaXQgd291bGQgYmUgZ29vZCB0byB0cnkgdG8gZmlsZSBhIHRpY2tldCB3
aXRoIHRoZSBnb2xhbmcgcHJvamVjdCwgcG9pbnRpbmcgb3V0IHRoZSBvYnNlcnZlZCBiZWhhdmlv
ciwgYW5kIGFza2luZyB0aGVtIHRvIGVpdGhlcjoNCg0KMS4gRG9jdW1lbnQgdGhhdCB0aGUgZ29s
YW5nIGNvbXBpbGVyIG1heSBub3QgaW5pdGlhbGl6ZSBhIHN0cnVjdHVyZSBiZWZvcmUgcGFzc2lu
ZyBpdCBpbiB0byBhIEMgZnVuY3Rpb24NCg0KMi4gRG9jdW1lbnQgdGhhdCBpdCAqd2lsbCogaW5p
dGlhbGl6ZSB2YWx1ZXMgdG8gemVybywgYW5kIGZpeCB0aGUgYnVnLg0KDQogLUdlb3JnZQ==


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148703.274807 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOY-0005MA-PT; Thu, 01 Jul 2021 14:10:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148703.274807; Thu, 01 Jul 2021 14:10:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOY-0005Lz-KM; Thu, 01 Jul 2021 14:10:22 +0000
Received: by outflank-mailman (input) for mailman id 148703;
 Thu, 01 Jul 2021 14:10:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOX-0005KT-06
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:21 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f6d7bec2-fc7c-4841-b48a-662147126978;
 Thu, 01 Jul 2021 14:10:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6d7bec2-fc7c-4841-b48a-662147126978
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148620;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=M6ZtiyzeBF8+xl4b4ReAdiPAiV8nv9ZrRcrwPVwToLw=;
  b=djwyYSDoGnR6L0cB6cL3Ot8ERH+w5cv68Z4FwVCd36NJVLcFClINhzuj
   zw6WaNMO9NO0nzDNbPLpTlthkz1ta+Fy6uAAX9IXK/2PZT6Saf67I0jeA
   /BOKHCb2EN1m+fehpijz0S9wCzU9J7AGB4mfS+kjedfnmxEcggBICTner
   Q=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: JX4PJpMfXqJB1Jhc9vF/KyT0TFFbWgzenewcihWWkjultgZsxthgoZfN8cTFCjsO6R1XQjOUNI
 YqP1GKUk8RP6E8GblNXfOkRA0t1D8Qdyuu5BnyqdGQP+1wNcu8dN3PnDHQfNESfq/JMyBSswqB
 qATb211dJjZxLrrxHwX4kr/u9OclwZPqzLTjpedJSmsAjtFyycNPsSF4CgXNupgYFKaUOOf6ts
 xRZIWI0yfrkFsxbo9jZRibB7KrQ4mMbTh9UiOzbf9OkVD9CWYVkyTPajS7w1bPzGUJ1m12YX8G
 BMQ=
X-SBRS: 5.1
X-MesageID: 47093296
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Txlc0KOGQSvGR8BcTvmjsMiBIKoaSvp037Eqv3oedfUzSL3/qy
 nOpoVi6faaslYssR0b9exofZPwJE80lqQFhrX5X43SPzUO0VHAROoJgLcKgQeQfxEWntQtrJ
 uIGJIeNDSfNzdHZL7BkWuFL+o=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47093296"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 01/31] build: fix %.s: %.S rule
Date: Thu, 1 Jul 2021 15:09:41 +0100
Message-ID: <20210701141011.785641-2-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Fixes: e321576f4047 ("xen/build: start using if_changed")
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v6:
    - new patch

 xen/Rules.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index ceb3d204b84f..d65d6a48993b 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -227,8 +227,8 @@ cmd_cpp_i_c = $(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -MQ $@ -o $@ $<
 quiet_cmd_cc_s_c = CC      $@
 cmd_cc_s_c = $(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -S $< -o $@
 
-quiet_cmd_s_S = CPP     $@
-cmd_s_S = $(CPP) $(filter-out -Wa$(comma)%,$(a_flags)) -MQ $@ -o $@ $<
+quiet_cmd_cpp_s_S = CPP     $@
+cmd_cpp_s_S = $(CPP) $(filter-out -Wa$(comma)%,$(a_flags)) -MQ $@ -o $@ $<
 
 %.i: %.c FORCE
 	$(call if_changed,cpp_i_c)
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148705.274818 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOe-0005gD-1Q; Thu, 01 Jul 2021 14:10:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148705.274818; Thu, 01 Jul 2021 14:10:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOd-0005g4-T0; Thu, 01 Jul 2021 14:10:27 +0000
Received: by outflank-mailman (input) for mailman id 148705;
 Thu, 01 Jul 2021 14:10:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOd-0005F9-Ie
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:27 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 115b20d1-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:21 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 115b20d1-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148621;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=8wF1OZRVMN+i4dPl8jzrjodmwU9+O8uvhRvJWa7YhLU=;
  b=Gz3SFPxQKsGE1TkVWplAILoectsooQsY0ULsu7CldwrHwWfZW8V8qwQi
   c7PNBI5LYPj4YyWObbQ53qgXqG70Bn9ZIcH+6TcHfaMVroBSDz7gNlRHx
   VApIUhdwcmks6RoAt7I0Bar0J0pblA0EP6cYaI7Mu6LJfFQSYOPLtbe4u
   A=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: GfoBV98qFKEsx0+8+X25twMo7xYrQOCMiSGiXjJZB00zgSiOH6Lux/lC1O6UFX7cFaijWpt7+Y
 6YGank19UXg9Vy2SnUXE/ovuzUQzsCjw+Tp7a+CG+0IPS3imfW82NlbM0UNPi1PZaLzbtq6cL1
 XIn4nznTdeF4Urw+kOU4ii9xCz8WKrP9ajKMKRcj5wIDAx4Cv66KR/r6S4zVwIxIQ3zkxgrAtV
 /+vhiM9a03xW0Sggftt9t1CqRmL2S65JsVekG59dibwnpuVw1Jq3ke7lyH+tt1agKyfLzHYrKp
 y8k=
X-SBRS: 5.1
X-MesageID: 47376076
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:hmFiDqAkgXNXX0vlHemq55DYdb4zR+YMi2TC1yhKJiC9Ffbo8P
 xG/c5rrCMc5wxxZJhNo7290ey7MBHhHP1OkO0s1NWZPDUO0VHAROoJ0WKh+UyEJ8SXzJ866U
 4KScZD4bPLYWSS9fyKgzWFLw==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47376076"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Tim Deegan <tim@xen.org>
Subject: [XEN PATCH v6 02/31] build: introduce cpp_flags macro
Date: Thu, 1 Jul 2021 15:09:42 +0100
Message-ID: <20210701141011.785641-3-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v6:
    - switch to a macro as suggested
      which allows to be used with both a_flags and c_flags
    
    v5:
    - new patch

 xen/Rules.mk                    | 7 +++++--
 xen/arch/x86/mm/Makefile        | 2 +-
 xen/arch/x86/mm/hap/Makefile    | 2 +-
 xen/arch/x86/mm/shadow/Makefile | 2 +-
 4 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index d65d6a48993b..f778058f80a6 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -133,6 +133,9 @@ endif
 # Always build obj-bin files as binary even if they come from C source. 
 $(obj-bin-y): XEN_CFLAGS := $(filter-out -flto,$(XEN_CFLAGS))
 
+# To be use with $(a_flags) or $(c_flags) to produce CPP flags
+cpp_flags = $(filter-out -Wa$(comma)%,$(1))
+
 # Calculation of flags, first the generic flags, then the arch specific flags,
 # and last the flags modified for a target or a directory.
 
@@ -222,13 +225,13 @@ $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
 	$(call if_changed,obj_init_o)
 
 quiet_cmd_cpp_i_c = CPP     $@
-cmd_cpp_i_c = $(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -MQ $@ -o $@ $<
+cmd_cpp_i_c = $(CPP) $(call cpp_flags,$(c_flags)) -MQ $@ -o $@ $<
 
 quiet_cmd_cc_s_c = CC      $@
 cmd_cc_s_c = $(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -S $< -o $@
 
 quiet_cmd_cpp_s_S = CPP     $@
-cmd_cpp_s_S = $(CPP) $(filter-out -Wa$(comma)%,$(a_flags)) -MQ $@ -o $@ $<
+cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
 %.i: %.c FORCE
 	$(call if_changed,cpp_i_c)
diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
index b31041644fe8..2818c066f76a 100644
--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -15,7 +15,7 @@ guest_walk_%.o: guest_walk.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%.i: guest_walk.c Makefile
-	$(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
+	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%.s: guest_walk.c Makefile
 	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/hap/Makefile b/xen/arch/x86/mm/hap/Makefile
index 22e7ad54bd33..c6d296b51720 100644
--- a/xen/arch/x86/mm/hap/Makefile
+++ b/xen/arch/x86/mm/hap/Makefile
@@ -9,7 +9,7 @@ guest_walk_%level.o: guest_walk.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%level.i: guest_walk.c Makefile
-	$(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
+	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%level.s: guest_walk.c Makefile
 	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/shadow/Makefile b/xen/arch/x86/mm/shadow/Makefile
index 770213fe9d84..fd64b4dda925 100644
--- a/xen/arch/x86/mm/shadow/Makefile
+++ b/xen/arch/x86/mm/shadow/Makefile
@@ -10,7 +10,7 @@ guest_%.o: multi.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_%.i: multi.c Makefile
-	$(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
+	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_%.s: multi.c Makefile
 	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148706.274829 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOg-0005yi-90; Thu, 01 Jul 2021 14:10:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148706.274829; Thu, 01 Jul 2021 14:10:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOg-0005yZ-5H; Thu, 01 Jul 2021 14:10:30 +0000
Received: by outflank-mailman (input) for mailman id 148706;
 Thu, 01 Jul 2021 14:10:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOe-0005tj-Qs
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:28 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4f84f67f-f63d-4cae-b70a-ea7d3a3e3488;
 Thu, 01 Jul 2021 14:10:27 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4f84f67f-f63d-4cae-b70a-ea7d3a3e3488
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148627;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=p6A2leGuQ6JJnCHw9Z1yFaAvywh0FWS/+VLlHmt9w9U=;
  b=iZiJaWtS487i5ED1ZAtL/56t2zzQWIuZy1hlrXx6D2BibDt74kJajkrw
   vBJvOUuYDCh6CEbsAM8FC+kgoxMGAVkzhM+2XPH9FoRHRZXJm8NUQt2PS
   U5BlxW+HiaYzhPYRAlrXcbTOtyyGpyDNJP3O+mZ/z7G9BZAUjbEbfjUkq
   s=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: lpM6xOx65WR1xO9xPvAF4rH8L42azngx5PsW6pYxbGjjFYhFCC57hXKs7GPPlu4WVaDss+yIfs
 dZOSG6QaRCMZYkADD6HlldN3PzKiMAYzStupabtHI/mHcA1q1GlyAxtH8wGSFltma4xqLDN11p
 gDYd9ysXahhsx+DRr5tKSGulFaDV3fgyaOd3iMZR1BNo3qF8Gf3fTkGP6OOieOFJPznu4Oeh4x
 gFD2NAiiIL/tNb2y+M9OjKfRT1z30/ZCXFJl3x4w6xeoqXff3LmadGAgcmxWBZG4/MI+QVRE3V
 OJo=
X-SBRS: 5.1
X-MesageID: 49007452
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:1jaZlq2nFwHYrwlAs77h1gqjBGEkLtp133Aq2lEZdPWaSL36qy
 nIpoVh6fYuskdoZJhEo7u90ca7MBThHPJOjrX5eI3OYOCEghrQEGgB1/qG/9SIIUSXygce78
 tdmodFebnN5DNB4/oSjjPZLz6oq+PszEgn7d2uskuEkWlRGttdxjY8KAqWC3d7QxQuP/sE/O
 P23Lsgm9PZQwV0UviG
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="49007452"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Tim Deegan <tim@xen.org>
Subject: [XEN PATCH v6 06/31] x86/mm: avoid building multiple .o from a single .c file
Date: Thu, 1 Jul 2021 15:09:46 +0100
Message-ID: <20210701141011.785641-7-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This replace the use of a single .c file use for multiple .o file by
creating multiple .c file including the first one.

There's quite a few issues with trying to build more than one object
file from a single source file: there's is a duplication of the make
rules to generate those targets; there is an additional ".file" symbol
added in order to differentiate between the object files; and the
tools/symbols have an heuristic to try to pick up the right ".file".

This patch adds new .c source file which avoid the need to add a
second ".file" symbol and thus avoid the need to deal with those
issues.

Also remove __OBJECT_FILE__ from $(CC) command line as it isn't used
anywhere anymore. And remove the macro "build-intermediate" since the
generic rules for single targets can be used.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v6:
    - new patch
      to replace both from v5:
        xen,symbols: rework file symbols selection
        build: use if_changed to build mm/*/guest_%.o
    
    The changes in the patch for symbols.c was too complicated to explain,
    and I probably didn't realize one important fact about the tool: it deal
    with all *.o been concatenated to each other, without a way to figure
    out which symbol belong to which original file, and certainly no way to
    figure out if there's more than one ".file" symbol to choose from beside
    some fragile heuristic.

 xen/Makefile                            | 11 -----------
 xen/Rules.mk                            |  2 +-
 xen/arch/x86/mm/Makefile                |  9 ---------
 xen/arch/x86/mm/guest_walk.c            |  3 ---
 xen/arch/x86/mm/guest_walk_2.c          |  2 ++
 xen/arch/x86/mm/guest_walk_3.c          |  2 ++
 xen/arch/x86/mm/guest_walk_4.c          |  2 ++
 xen/arch/x86/mm/hap/Makefile            |  9 ---------
 xen/arch/x86/mm/hap/guest_walk.c        |  3 ---
 xen/arch/x86/mm/hap/guest_walk_2level.c |  2 ++
 xen/arch/x86/mm/hap/guest_walk_3level.c |  2 ++
 xen/arch/x86/mm/hap/guest_walk_4level.c |  2 ++
 xen/arch/x86/mm/shadow/Makefile         |  9 ---------
 xen/arch/x86/mm/shadow/guest_2.c        |  2 ++
 xen/arch/x86/mm/shadow/guest_3.c        |  2 ++
 xen/arch/x86/mm/shadow/guest_4.c        |  2 ++
 xen/arch/x86/mm/shadow/multi.c          |  3 ---
 xen/tools/symbols.c                     | 18 ++----------------
 18 files changed, 21 insertions(+), 64 deletions(-)
 create mode 100644 xen/arch/x86/mm/guest_walk_2.c
 create mode 100644 xen/arch/x86/mm/guest_walk_3.c
 create mode 100644 xen/arch/x86/mm/guest_walk_4.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_2level.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_3level.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_4level.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_2.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_3.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_4.c

diff --git a/xen/Makefile b/xen/Makefile
index 89879fad4cb2..360b4a1d1867 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -476,17 +476,6 @@ _MAP:
 %/: FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o built_in_bin.o
 
-build-intermediate = $(eval $(call build-intermediate-closure,$(1)))
-define build-intermediate-closure
-$(1): FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $$(@D) $$(@F)
-endef
-
-$(foreach base,arch/x86/mm/guest_walk_% \
-               arch/x86/mm/hap/guest_walk_%level \
-               arch/x86/mm/shadow/guest_%, \
-    $(foreach ext,o i s,$(call build-intermediate,$(base).$(ext))))
-
 .PHONY: cloc
 cloc:
 	$(eval tmpfile := $(shell mktemp))
diff --git a/xen/Rules.mk b/xen/Rules.mk
index f05b2d3f0399..ede408efc515 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -139,7 +139,7 @@ cpp_flags = $(filter-out -Wa$(comma)%,$(1))
 # Calculation of flags, first the generic flags, then the arch specific flags,
 # and last the flags modified for a target or a directory.
 
-c_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_CFLAGS) '-D__OBJECT_FILE__="$@"'
+c_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_CFLAGS)
 a_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_AFLAGS)
 
 include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
index 2818c066f76a..6b7882d992bb 100644
--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -10,12 +10,3 @@ obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
 obj-y += p2m.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o p2m-pt.o
 obj-y += paging.o
-
-guest_walk_%.o: guest_walk.c Makefile
-	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%.i: guest_walk.c Makefile
-	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%.s: guest_walk.c Makefile
-	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/guest_walk.c b/xen/arch/x86/mm/guest_walk.c
index 30d83cf1e0e6..b9f607272c39 100644
--- a/xen/arch/x86/mm/guest_walk.c
+++ b/xen/arch/x86/mm/guest_walk.c
@@ -21,9 +21,6 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* Allow uniquely identifying static symbols in the 3 generated objects. */
-asm(".file \"" __OBJECT_FILE__ "\"");
-
 #include <xen/types.h>
 #include <xen/mm.h>
 #include <xen/paging.h>
diff --git a/xen/arch/x86/mm/guest_walk_2.c b/xen/arch/x86/mm/guest_walk_2.c
new file mode 100644
index 000000000000..defcd59bc260
--- /dev/null
+++ b/xen/arch/x86/mm/guest_walk_2.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 2
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/guest_walk_3.c b/xen/arch/x86/mm/guest_walk_3.c
new file mode 100644
index 000000000000..1c9eca37741e
--- /dev/null
+++ b/xen/arch/x86/mm/guest_walk_3.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 3
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/guest_walk_4.c b/xen/arch/x86/mm/guest_walk_4.c
new file mode 100644
index 000000000000..aa3900338a2d
--- /dev/null
+++ b/xen/arch/x86/mm/guest_walk_4.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 4
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/hap/Makefile b/xen/arch/x86/mm/hap/Makefile
index c6d296b51720..32aef9b4ba26 100644
--- a/xen/arch/x86/mm/hap/Makefile
+++ b/xen/arch/x86/mm/hap/Makefile
@@ -4,12 +4,3 @@ obj-y += guest_walk_3level.o
 obj-y += guest_walk_4level.o
 obj-y += nested_hap.o
 obj-y += nested_ept.o
-
-guest_walk_%level.o: guest_walk.c Makefile
-	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%level.i: guest_walk.c Makefile
-	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%level.s: guest_walk.c Makefile
-	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/hap/guest_walk.c b/xen/arch/x86/mm/hap/guest_walk.c
index f59ebc84a290..832a8058471e 100644
--- a/xen/arch/x86/mm/hap/guest_walk.c
+++ b/xen/arch/x86/mm/hap/guest_walk.c
@@ -18,9 +18,6 @@
  * this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* Allow uniquely identifying static symbols in the 3 generated objects. */
-asm(".file \"" __OBJECT_FILE__ "\"");
-
 #include <xen/domain_page.h>
 #include <xen/paging.h>
 #include <xen/sched.h>
diff --git a/xen/arch/x86/mm/hap/guest_walk_2level.c b/xen/arch/x86/mm/hap/guest_walk_2level.c
new file mode 100644
index 000000000000..defcd59bc260
--- /dev/null
+++ b/xen/arch/x86/mm/hap/guest_walk_2level.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 2
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/hap/guest_walk_3level.c b/xen/arch/x86/mm/hap/guest_walk_3level.c
new file mode 100644
index 000000000000..1c9eca37741e
--- /dev/null
+++ b/xen/arch/x86/mm/hap/guest_walk_3level.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 3
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/hap/guest_walk_4level.c b/xen/arch/x86/mm/hap/guest_walk_4level.c
new file mode 100644
index 000000000000..aa3900338a2d
--- /dev/null
+++ b/xen/arch/x86/mm/hap/guest_walk_4level.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 4
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/shadow/Makefile b/xen/arch/x86/mm/shadow/Makefile
index fd64b4dda925..b4a1620b6920 100644
--- a/xen/arch/x86/mm/shadow/Makefile
+++ b/xen/arch/x86/mm/shadow/Makefile
@@ -5,12 +5,3 @@ obj-$(CONFIG_PV) += pv.o guest_4.o
 else
 obj-y += none.o
 endif
-
-guest_%.o: multi.c Makefile
-	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_%.i: multi.c Makefile
-	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_%.s: multi.c Makefile
-	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/shadow/guest_2.c b/xen/arch/x86/mm/shadow/guest_2.c
new file mode 100644
index 000000000000..288b229982b0
--- /dev/null
+++ b/xen/arch/x86/mm/shadow/guest_2.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 2
+#include "multi.c"
diff --git a/xen/arch/x86/mm/shadow/guest_3.c b/xen/arch/x86/mm/shadow/guest_3.c
new file mode 100644
index 000000000000..04e17b0b8adc
--- /dev/null
+++ b/xen/arch/x86/mm/shadow/guest_3.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 3
+#include "multi.c"
diff --git a/xen/arch/x86/mm/shadow/guest_4.c b/xen/arch/x86/mm/shadow/guest_4.c
new file mode 100644
index 000000000000..c0c5d3cb11ad
--- /dev/null
+++ b/xen/arch/x86/mm/shadow/guest_4.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 4
+#include "multi.c"
diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c
index 8bb028c2e2fa..7207fcf9e75f 100644
--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -20,9 +20,6 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* Allow uniquely identifying static symbols in the 3 generated objects. */
-asm(".file \"" __OBJECT_FILE__ "\"");
-
 #include <xen/types.h>
 #include <xen/mm.h>
 #include <xen/trace.h>
diff --git a/xen/tools/symbols.c b/xen/tools/symbols.c
index 0b124526165d..710e9785d348 100644
--- a/xen/tools/symbols.c
+++ b/xen/tools/symbols.c
@@ -84,7 +84,6 @@ static int read_symbol(FILE *in, struct sym_entry *s)
 {
 	char str[500], type[20] = "";
 	char *sym, stype;
-	static enum { symbol, single_source, multi_source } last;
 	static char *filename;
 	int rc = -1;
 
@@ -118,24 +117,11 @@ static int read_symbol(FILE *in, struct sym_entry *s)
 	      */
 	     input_format == fmt_sysv && !*type && stype == '?' && sym &&
 	     sym[1] && strchr("cSsoh", sym[1]) && !sym[2])) {
-		/*
-		 * gas prior to binutils commit fbdf9406b0 (expected to appear
-		 * in 2.27) outputs symbol table entries resulting from .file
-		 * in reverse order. If we get two consecutive file symbols,
-		 * prefer the first one if that names an object file or has a
-		 * directory component (to cover multiply compiled files).
-		 */
-		bool multi = strchr(str, '/') || (sym && sym[1] == 'o');
-
-		if (multi || last != multi_source) {
-			free(filename);
-			filename = *str ? strdup(str) : NULL;
-		}
-		last = multi ? multi_source : single_source;
+		free(filename);
+		filename = *str ? strdup(str) : NULL;
 		goto skip_tail;
 	}
 
-	last = symbol;
 	rc = -1;
 
 	sym = str;
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148707.274840 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOi-0006Kh-Ns; Thu, 01 Jul 2021 14:10:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148707.274840; Thu, 01 Jul 2021 14:10:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOi-0006KQ-K6; Thu, 01 Jul 2021 14:10:32 +0000
Received: by outflank-mailman (input) for mailman id 148707;
 Thu, 01 Jul 2021 14:10:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOg-0005tj-Vv
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:31 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 55f3a9fb-720c-452f-92ed-fae6b830b800;
 Thu, 01 Jul 2021 14:10:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 55f3a9fb-720c-452f-92ed-fae6b830b800
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148628;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=WNQw53D2CBl7IfW7DXoevzSfofTFknY56S4ZzC5yIeA=;
  b=I088QyBYbmJgARWg3Rl1kWwYGKh6OVysOFfctpmQYsAubBdFIKYgeTnm
   ZlQdcg2xM0y3FfYb4JNNyqZN5ibFk1BE7nn9S7xc6uV+sROVx3m/pZbiE
   +SBh5maz81JC7ojjj7EyO7Pl02efi6Of4zPCe12jcxA2Y9W1SyEO2aAWn
   A=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: R+4i4GvhQ/bsJUtm/f25GRNBFTY3QnEzZIDpOXXFfnM5XPyNmcnKTNMALl1I858HTbrVLZVixL
 FgY6jes9ShraMHqbhQlMzSz8xTfRFUc9jB7H1cETWgAamV0+K9rrCleR8qbkJ0a0BRdAQ9eYaP
 nUvRrZOqNNPCZlfHQPUvTRpOcY27WfA4TJ5l//hJnCFFvDQvJ2gox59VU6cgAH4FAwStzGRh0f
 IvuCpRqKjohQzU3SLVpZMJktlV2zWnSMmKVSs5/fCBnhAyBheMMWULR8HDZNLd5afZ0WMwzF3W
 Izk=
X-SBRS: 5.1
X-MesageID: 47093323
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:fExu1qhU81WMd6RejdhUkxV2BnBQXuIji2hC6mlwRA09TySZ//
 rBoB19726TtN9xYgBZpTnuAsm9qB/nmaKdpLNhWItKPzOW31dATrsSjrcKqgeIc0aVm9K1l5
 0QF5SWYOeAdGSS5vya3ODXKbkdKaG8gcKVuds=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47093323"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Jan Beulich
	<jbeulich@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 07/31] build,include: rework compat-build-source.py
Date: Thu, 1 Jul 2021 15:09:47 +0100
Message-ID: <20210701141011.785641-8-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Improvement are:
- give the path to xlat.lst as argument
- include `grep -v` in compat-build-source.py script, we don't need to
  write this in several scripted language.

Also remove dependency on Makefile as the file generation doesn't
depend on it anymore.

No changes in final compat/%.h headers.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v6:
    - remove dependency on Makefile as it's not needed anymore
    
    v5:
    - removed "have 'xlat.lst' path as a variable" from the patch.
    
    v4:
    - new patch

 xen/include/Makefile             | 5 ++---
 xen/tools/compat-build-source.py | 8 +++++++-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index c8ca97eed0fc..be3b81485bdc 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -59,10 +59,9 @@ compat/%.h: compat/%.i Makefile $(BASEDIR)/tools/compat-build-header.py
 compat/%.i: compat/%.c Makefile
 	$(CPP) $(filter-out -Wa$(comma)% -include %/include/xen/config.h,$(XEN_CFLAGS)) $(cppflags-y) -o $@ $<
 
-compat/%.c: public/%.h xlat.lst Makefile $(BASEDIR)/tools/compat-build-source.py
+compat/%.c: public/%.h xlat.lst $(BASEDIR)/tools/compat-build-source.py
 	mkdir -p $(@D)
-	grep -v 'DEFINE_XEN_GUEST_HANDLE(long)' $< | \
-	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py >$@.new
+	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
 compat/.xlat/%.h: compat/%.h compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh Makefile
diff --git a/xen/tools/compat-build-source.py b/xen/tools/compat-build-source.py
index 2bcaf27d05a3..274d6917ab7f 100755
--- a/xen/tools/compat-build-source.py
+++ b/xen/tools/compat-build-source.py
@@ -13,7 +13,11 @@ pats = [
  [ r"XEN_GUEST_HANDLE", r"COMPAT_HANDLE" ],
 ];
 
-xlatf = open('xlat.lst', 'r')
+try:
+    xlatf = open(sys.argv[1], 'r')
+except IndexError:
+    print('missing path to xlat.lst argument')
+    sys.exit(1)
 for line in xlatf.readlines():
     match = re.subn(r"^\s*\?\s+(\w*)\s.*", r"\1", line.rstrip())
     if match[1]:
@@ -25,6 +29,8 @@ for pat in pats:
     pat[0] = re.compile(pat[0])
 
 for line in sys.stdin.readlines():
+    if 'DEFINE_XEN_GUEST_HANDLE(long)' in line:
+        continue
     for pat in pats:
         line = re.sub(pat[0], pat[1], line)
     print(line.rstrip())
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148708.274851 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOk-0006ct-3t; Thu, 01 Jul 2021 14:10:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148708.274851; Thu, 01 Jul 2021 14:10:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOj-0006bk-Ud; Thu, 01 Jul 2021 14:10:33 +0000
Received: by outflank-mailman (input) for mailman id 148708;
 Thu, 01 Jul 2021 14:10:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOi-0005F9-Iq
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:32 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1306551c-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:22 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1306551c-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148622;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=Pns9739RItoS5khKorq30ivslZu4OAvxwnMWwlNaAu0=;
  b=VRv/d+8Ab4l2j1QVYGgQcCxHaz8rTmAQeQrfE1oKYLgn5HNXE9mUXUjA
   rJp0lfZIAbEsB2ytZirznyASonnzg279ZlBq26kmCurs935yfhuJGmj1S
   GYNr2Mrhbnh5kpeKXW7Vc37rpRD5gmklejF83uIMOqVKEbuyZKmwBKd5K
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 3rn9hvSyOIjLz1zTcJ0VvqoZ9PirUNBSml1KaMuBm1To5iUDM40jDpjk2yN3b96kmcikzwI4RA
 Xr1IRL8o9y59sV6bV14kzfBa3mxb3sEvKoOi2sZf63yle3ertoEX4j9QzuRASTeqgJ0Y/UzwCC
 xPGrTOKhsPmvaF5ZJwAZAnQ5KEPJW3WgLNMQyQQtTn+dnbaShaVYZ+mIlpBlIpWZP6A5uC1BKp
 YA/AnW17sGoh9nKyvdO5EBUdS37Og6FCULGh/TCTw1GGna1+ymE6WAN54Ez9rGPxPWHlut3gNS
 fv4=
X-SBRS: 5.1
X-MesageID: 47376079
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:FEn/IagvOulIic/Rfb6eLCv9enBQXuIji2hC6mlwRA09TySZ//
 rBoB19726TtN9xYgBZpTnuAsm9qB/nmaKdpLNhWItKPzOW31dATrsSjrcKqgeIc0aVm9K1l5
 0QF5SWYOeAdGSS5vya3ODXKbkdKaG8gcKVuds=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47376079"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Jan Beulich
	<jbeulich@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 03/31] build: use if_changed on built_in.o
Date: Thu, 1 Jul 2021 15:09:43 +0100
Message-ID: <20210701141011.785641-4-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

In the case where $(obj-y) is empty, we also replace $(c_flags) by
$(XEN_CFLAGS) to avoid generating an .%.d dependency file. This avoid
make trying to include %.h file in the ld command if $(obj-y) isn't
empty anymore on a second run.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v6:
    - use $(if $(strip $(obj-y)),ld_builtin,cc_builtin)
      as suggested
    - rebased
    
    v4:
    - Have cmd_ld_builtin depends on CONFIG_LTO, which simplify built_in.o
      rule.

 xen/Rules.mk | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index f778058f80a6..6a0cdfde2eed 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -147,17 +147,22 @@ include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
 c_flags += $(CFLAGS-y)
 a_flags += $(CFLAGS-y) $(AFLAGS-y)
 
-built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y)
-ifeq ($(strip $(obj-y)),)
-	$(CC) $(c_flags) -c -x c /dev/null -o $@
-else
+quiet_cmd_cc_builtin = LD      $@
+cmd_cc_builtin = \
+    $(CC) $(XEN_CFLAGS) -c -x c /dev/null -o $@
+
+quiet_cmd_ld_builtin = LD      $@
 ifeq ($(CONFIG_LTO),y)
-	$(LD_LTO) -r -o $@ $(filter $(obj-y),$^)
+cmd_ld_builtin = \
+    $(LD_LTO) -r -o $@ $(filter $(obj-y),$(real-prereqs))
 else
-	$(LD) $(XEN_LDFLAGS) -r -o $@ $(filter $(obj-y),$^)
-endif
+cmd_ld_builtin = \
+    $(LD) $(XEN_LDFLAGS) -r -o $@ $(filter $(obj-y),$(real-prereqs))
 endif
 
+built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y) FORCE
+	$(call if_changed,$(if $(strip $(obj-y)),ld_builtin,cc_builtin))
+
 lib.a: $(lib-y) FORCE
 	$(call if_changed,ar)
 
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148709.274862 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOn-00073f-Fi; Thu, 01 Jul 2021 14:10:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148709.274862; Thu, 01 Jul 2021 14:10:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOn-00072Q-BJ; Thu, 01 Jul 2021 14:10:37 +0000
Received: by outflank-mailman (input) for mailman id 148709;
 Thu, 01 Jul 2021 14:10:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOl-0005tj-Vm
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:36 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 09ef554a-cc6f-4393-bec9-018267e96a0b;
 Thu, 01 Jul 2021 14:10:30 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 09ef554a-cc6f-4393-bec9-018267e96a0b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148630;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=P2E0W/gctKSv9qL8/o+vMgXc//AFHVWuP07uAhIiJh4=;
  b=h5xlRTJERNCZIb4MfXn0paw4thhIvhuz4PWdYI5X/5WeGLwmd0TTHhcj
   TLco105FdRIfN/THbmt5aCfmuEYBZijGMYw24xYgDsxx7iqSvdrH3t0Z8
   SliOPRpgmjl99il0uI1biOQyIm5D0wrpcr0+wlp9tjl74Y4LgZ0iXbhDG
   c=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: grgSpt4fWT8iOSPspjf8uGICLMQU/Xg+FsFXwSYR71Q1UMQ4NXITI5Ow9zIJmjSDTLUBsLj4jg
 aJ6z9LmtP+5zzltsferH1oYFnsZq0MwBaMpxYjdmGoShRUxE0zMoVmlsXVzpACaIuNzfcgg7H+
 +p0Wd02cOtVzWOGVP+sEpW4lBhuJFxX/VBWwwibFp89aAg5m0EoNZYpAe8oRpObtzuJEKkZp3h
 1EGdSuFWbRjkiQVVccDCelGLnUvEJ0hHq/Nx6lc0sKJim81fqlIIb6feaEZv7dS3K2IPpbcQQZ
 JDw=
X-SBRS: 5.1
X-MesageID: 47446790
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:2+1tPq6o+GDVMMmE2APXwM7XdLJyesId70hD6qhwISY7TiX+rb
 HIoB17726MtN9/YhAdcLy7VZVoBEmsl6KdgrNhWYtKPjOHhILAFugLhuHfKn/bakjDH4ZmpM
 FdmsNFZuEYY2IXsS+D2njaL+od
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47446790"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Wei Liu <wl@xen.org>, "Andrew
 Cooper" <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Jan Beulich
	<jbeulich@suse.com>, "Julien Grall" <julien@xen.org>, Stefano Stabellini
	<sstabellini@kernel.org>
Subject: [XEN PATCH v6 08/31] build,include: rework compat-build-header.py
Date: Thu, 1 Jul 2021 15:09:48 +0100
Message-ID: <20210701141011.785641-9-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Replace a mix of shell script and python script by all python script.

Also remove dependency on Makefile as the file generation doesn't
depend on it anymore.

No change to the final generated headers.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Wei Liu <wl@xen.org>
---

Notes:
    v6:
    - removed handling of $(prefix-y) and $(suffix-y), they've been removed.
    - remove dependency on Makefile as it's not needed anymore
    - rebased
    
    v5:
    - Removed -P from CPP when generating compat/%.i
      -> keep removing linemarkers and keep de-duplicating empty lines.
      So that all the blank line that currently exist in the generated
      headers stays in place.
    
    v4:
    - new patch

 xen/include/Makefile             | 11 ++------
 xen/tools/compat-build-header.py | 44 ++++++++++++++++++++++++++++++--
 2 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index be3b81485bdc..9feb57545ef1 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -45,15 +45,8 @@ public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h)
 .PHONY: all
 all: $(headers-y)
 
-compat/%.h: compat/%.i Makefile $(BASEDIR)/tools/compat-build-header.py
-	set -e; id=_$$(echo $@ | tr '[:lower:]-/.' '[:upper:]___'); \
-	echo "#ifndef $$id" >$@.new; \
-	echo "#define $$id" >>$@.new; \
-	echo "#include <xen/compat.h>" >>$@.new; \
-	$(if $(filter-out compat/arch-%.h,$@),echo "#include <$(patsubst compat/%,public/%,$@)>" >>$@.new;) \
-	grep -v '^# [0-9]' $< | \
-	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py | uniq >>$@.new; \
-	echo "#endif /* $$id */" >>$@.new
+compat/%.h: compat/%.i $(BASEDIR)/tools/compat-build-header.py
+	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $@ >>$@.new; \
 	mv -f $@.new $@
 
 compat/%.i: compat/%.c Makefile
diff --git a/xen/tools/compat-build-header.py b/xen/tools/compat-build-header.py
index 065d3b1b6ee8..5f5474fba051 100755
--- a/xen/tools/compat-build-header.py
+++ b/xen/tools/compat-build-header.py
@@ -2,6 +2,12 @@
 
 import re,sys
 
+try:
+    maketrans = str.maketrans
+except AttributeError:
+    # For python2
+    from string import maketrans
+
 pats = [
  [ r"__InClUdE__(.*)", r"#include\1" ],
  [ r"__IfDeF__ (XEN_HAVE.*)", r"#ifdef \1" ],
@@ -23,7 +29,41 @@ pats = [
  [ r"(^|[^\w])long([^\w]|$$)", r"\1int\2" ]
 ];
 
+output_filename = sys.argv[1]
+
+# tr '[:lower:]-/.' '[:upper:]___'
+header_id = '_' + \
+    output_filename.upper().translate(maketrans('-/.','___'))
+
+header = """#ifndef {0}
+#define {0}
+#include <xen/compat.h>""".format(header_id)
+
+print(header)
+
+if not re.match("compat/arch-.*.h$", output_filename):
+    x = output_filename.replace("compat/","public/")
+    print('#include <%s>' % x)
+
+last_line_empty = False
 for line in sys.stdin.readlines():
+    line = line.rstrip()
+
+    # Remove linemarkers generated by the preprocessor.
+    if re.match(r"^# \d", line):
+        continue
+
+    # De-duplicate empty lines.
+    if len(line) == 0:
+        if not last_line_empty:
+            print(line)
+            last_line_empty = True
+        continue
+    else:
+        last_line_empty = False
+
     for pat in pats:
-        line = re.subn(pat[0], pat[1], line)[0]
-    print(line.rstrip())
+        line = re.sub(pat[0], pat[1], line)
+    print(line)
+
+print("#endif /* %s */" % header_id)
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148710.274872 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOp-0007MU-02; Thu, 01 Jul 2021 14:10:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148710.274872; Thu, 01 Jul 2021 14:10:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOo-0007ME-Q6; Thu, 01 Jul 2021 14:10:38 +0000
Received: by outflank-mailman (input) for mailman id 148710;
 Thu, 01 Jul 2021 14:10:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOn-0005F9-JC
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:37 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0fe08080-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:19 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0fe08080-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148620;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=QdYelS8NaZ6G8BQPcUzIhJ1B8dc4YjNwoApXWn17CtM=;
  b=IjrJ5W+pShq2A1x5gJnE9NsjlOh1IQXTmuBLbMhgMrAIXy+PahNZk74w
   M4yXEZTE8X/uynk0SSlGcnGRIObPKy50kO+OjERC9dQ+TsYUl9UwNkx36
   n17FJJBSEOQaKZOSyV+UtoWhyNHQetvLsI8bgLQVYLFsAz20WkxMCqmMG
   4=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 7bgFLSzrs+Zu58NlCL1z+vgNXhDSUuJL27/RRn0GCfNfZokSPc0lqN08hTAvVA36oRoMprbeZL
 rYfTMQihX5kDoEZBAMfRemW6qg1E1W5v/xOpx/vuXsPrj55ASR97Z/K+qBRTP2vK9mXSrsBYKM
 608+w651r8XaXHEaJKQXY4ZnJo/dzSpgDjQRlE3ZbSftRQeRAqFkvQ/Meagabl8tt8+BbFeXj2
 c33vHYxWqg6urQ+eyzgCiJzdnEmiDE/hXU/anWyBkH2J6oLyQhwi8aqSYYp9w2EGrt5Lm77V7Q
 rsw=
X-SBRS: 5.1
X-MesageID: 47755309
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:0OyC3ataI8u22IOSFmrXKua67skDjNV00zEX/kB9WHVpm6yj+v
 xGUs566faUskd0ZJhEo7q90ca7Lk80maQa3WBzB8bGYOCFghrKEGgK1+KLrwEIcxeUygc379
 YDT0ERMrzN5VgRt7eG3OG7eexQvOVuJsqT9JjjJ3QGd3AVV0l5hT0JbTpyiidNNXJ77ZxSLu
 v72uN34wCOVF4wdcqBCnwMT4H41qf2fMKPW29+O/Y/gjP+9Q+V1A==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755309"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Tim Deegan <tim@xen.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Petre Pircalabu
	<ppircalabu@bitdefender.com>, Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Jan
 Beulich" <jbeulich@suse.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Kevin Tian <kevin.tian@intel.com>, "Ross
 Lagerwall" <ross.lagerwall@citrix.com>, Alexandru Isaila
	<aisaila@bitdefender.com>, Wei Liu <wl@xen.org>, Bob Eshleman
	<bobbyeshleman@gmail.com>, Stefano Stabellini <sstabellini@kernel.org>, "Jun
 Nakajima" <jun.nakajima@intel.com>, Lukasz Hawrylko
	<lukasz.hawrylko@linux.intel.com>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?=
	<roger.pau@citrix.com>, Paul Durrant <paul@xen.org>, Tamas K Lengyel
	<tamas@tklengyel.com>, Julien Grall <julien@xen.org>, Alistair Francis
	<alistair.francis@wdc.com>, Connor Davis <connojdavis@gmail.com>, "Daniel P.
 Smith" <dpsmith@apertussolutions.com>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [XEN PATCH v6 00/31] xen: Build system improvements
Date: Thu, 1 Jul 2021 15:09:40 +0100
Message-ID: <20210701141011.785641-1-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.build-system-xen-v6

v6:
    This new version of the series get's us very close to be able to do
    out-of-tree build, but I've stop at been able to use Linux's `fixdep` and
    getting rid of those annoying *.d2 files generation.

    There a few patch left from the previous round within the first 8 patches
    (mixed with new or replaced patches). All the rest is new.

    The main patch is probably "build: build everything from the root dir, use
    obj=$subdir" which has still quite a few changes left. I might be still be
    able to break it down even more if needed to help with review (and might
    allow me to better explain some changes in it).

v5:
https://lore.kernel.org/xen-devel/20200421161208.2429539-1-anthony.perard@citrix.com/
- few changes detailed in patch notes.
- 1 new patch

Hi,

I have work toward building Xen (the hypervisor) with Linux's build system,
Kbuild.

The main reason for that is to be able to have out-of-tree build. It's annoying
when a build fail because of the pvshim. Other benefit is a much faster
rebuild, and `make clean` doesn't take ages, and better dependencies to figure
out what needs to be rebuild.

This new version of the series get's us very close to be able to do out-of-tree
build, but I've stop at been able to use Linux's `fixdep` and getting rid of
those annoying *.d2 files.

Cheers,

Anthony PERARD (31):
  build: fix %.s: %.S rule
  build: introduce cpp_flags macro
  build: use if_changed on built_in.o
  build: use if_changed_rules with %.o:%.c targets
  build: factorise generation of the linker scripts
  x86/mm: avoid building multiple .o from a single .c file
  build,include: rework compat-build-source.py
  build,include: rework compat-build-header.py
  build: clean "lib.a"
  build: use $(kconfig) shortcut in clean rule
  build: fix clean targets when subdir-y is used
  build: use subdir-y in test/Makefile
  build,tools: have default rules depends on symbols
  build,arm: move LDFLAGS change to arch.mk
  build: move make option changes check earlier
  build: avoid building arm/arm/*/head.o twice
  build: convert binfile use to if_changed
  xen: move include/asm-* to include/arch-*/asm
  build: rework .banner generation
  build: generate "include/xen/compile.h" with filechk
  build: set XEN_BUILD_EFI earlier
  build: fix $(TARGET).efi creation in arch/arm
  build: fix arch/x86/node.o rule
  build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
  build: remove unneeded deps of x86_emulate.o
  build: clean common temporary files from root makefile
  build: prepare to always invoke $(MAKE) from xen/, use $(obj)
  build: rework test/livepatch/Makefile
  build: build everything from the root dir, use obj=$subdir
  build: introduce if_changed_deps
  build,riscv: tell the build system about riscv64/head.S

 .gitignore                                    |   6 +-
 MAINTAINERS                                   |  36 +-
 tools/include/Makefile                        |   2 +-
 tools/misc/xen-access.c                       |   4 +-
 tools/tests/vhpet/Makefile                    |   2 +-
 xen/Makefile                                  | 209 ++++++---
 xen/Rules.mk                                  | 222 +++++-----
 xen/arch/arm/Makefile                         |  50 +--
 xen/arch/arm/README.LinuxPrimitives           |  10 +-
 xen/arch/arm/arch.mk                          |  13 +-
 xen/arch/arm/arm32/Makefile                   |   1 +
 xen/arch/arm/arm32/head.S                     |   2 +-
 xen/arch/arm/arm64/Makefile                   |   2 +
 xen/arch/arm/arm64/head.S                     |   2 +-
 xen/arch/arm/smpboot.c                        |   2 +-
 xen/arch/arm/vpsci.c                          |   2 +-
 xen/arch/riscv/arch.mk                        |   3 +-
 xen/arch/riscv/riscv64/Makefile               |   1 +
 xen/arch/x86/Makefile                         | 105 ++---
 xen/arch/x86/Rules.mk                         |   4 +-
 xen/arch/x86/arch.mk                          |  16 +-
 xen/arch/x86/boot/Makefile                    |  14 +-
 xen/arch/x86/efi/Makefile                     |   6 +-
 xen/arch/x86/mm/Makefile                      |   9 -
 xen/arch/x86/mm/guest_walk.c                  |   3 -
 xen/arch/x86/mm/guest_walk_2.c                |   2 +
 xen/arch/x86/mm/guest_walk_3.c                |   2 +
 xen/arch/x86/mm/guest_walk_4.c                |   2 +
 xen/arch/x86/mm/hap/Makefile                  |   9 -
 xen/arch/x86/mm/hap/guest_walk.c              |   3 -
 xen/arch/x86/mm/hap/guest_walk_2level.c       |   2 +
 xen/arch/x86/mm/hap/guest_walk_3level.c       |   2 +
 xen/arch/x86/mm/hap/guest_walk_4level.c       |   2 +
 xen/arch/x86/mm/shadow/Makefile               |   9 -
 xen/arch/x86/mm/shadow/guest_2.c              |   2 +
 xen/arch/x86/mm/shadow/guest_3.c              |   2 +
 xen/arch/x86/mm/shadow/guest_4.c              |   2 +
 xen/arch/x86/mm/shadow/multi.c                |   3 -
 xen/common/Makefile                           |  12 +-
 xen/common/efi/runtime.c                      |  14 +-
 xen/common/libelf/Makefile                    |   4 +-
 xen/common/libfdt/Makefile                    |   6 +-
 xen/common/page_alloc.c                       |   2 +-
 xen/include/Makefile                          |  60 ++-
 xen/include/{asm-arm => arch-arm/asm}/acpi.h  |   0
 .../{asm-arm => arch-arm/asm}/alternative.h   |   0
 .../{asm-arm => arch-arm/asm}/altp2m.h        |   0
 .../{asm-arm => arch-arm/asm}/arm32/atomic.h  |   0
 .../{asm-arm => arch-arm/asm}/arm32/bitops.h  |   0
 .../{asm-arm => arch-arm/asm}/arm32/bug.h     |   0
 .../{asm-arm => arch-arm/asm}/arm32/cmpxchg.h |   0
 .../asm}/arm32/flushtlb.h                     |   0
 .../{asm-arm => arch-arm/asm}/arm32/insn.h    |   0
 .../{asm-arm => arch-arm/asm}/arm32/io.h      |   0
 .../{asm-arm => arch-arm/asm}/arm32/macros.h  |   0
 .../{asm-arm => arch-arm/asm}/arm32/mm.h      |   0
 .../{asm-arm => arch-arm/asm}/arm32/page.h    |   0
 .../asm}/arm32/processor.h                    |   0
 .../{asm-arm => arch-arm/asm}/arm32/sysregs.h |   0
 .../{asm-arm => arch-arm/asm}/arm32/system.h  |   0
 .../{asm-arm => arch-arm/asm}/arm32/traps.h   |   0
 .../{asm-arm => arch-arm/asm}/arm32/vfp.h     |   0
 .../{asm-arm => arch-arm/asm}/arm64/atomic.h  |   0
 .../{asm-arm => arch-arm/asm}/arm64/bitops.h  |   0
 .../{asm-arm => arch-arm/asm}/arm64/brk.h     |   0
 .../{asm-arm => arch-arm/asm}/arm64/bug.h     |   0
 .../{asm-arm => arch-arm/asm}/arm64/cmpxchg.h |   0
 .../{asm-arm => arch-arm/asm}/arm64/efibind.h |   0
 .../asm}/arm64/flushtlb.h                     |   0
 .../{asm-arm => arch-arm/asm}/arm64/hsr.h     |   0
 .../{asm-arm => arch-arm/asm}/arm64/insn.h    |   0
 .../{asm-arm => arch-arm/asm}/arm64/io.h      |   0
 .../{asm-arm => arch-arm/asm}/arm64/macros.h  |   0
 .../{asm-arm => arch-arm/asm}/arm64/mm.h      |   0
 .../{asm-arm => arch-arm/asm}/arm64/page.h    |   0
 .../asm}/arm64/processor.h                    |   0
 .../{asm-arm => arch-arm/asm}/arm64/sysregs.h |   0
 .../{asm-arm => arch-arm/asm}/arm64/system.h  |   0
 .../{asm-arm => arch-arm/asm}/arm64/traps.h   |   0
 .../{asm-arm => arch-arm/asm}/arm64/vfp.h     |   0
 .../{asm-arm => arch-arm/asm}/asm_defns.h     |   0
 .../{asm-arm => arch-arm/asm}/atomic.h        |   0
 .../{asm-arm => arch-arm/asm}/bitops.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/bug.h   |   0
 .../{asm-arm => arch-arm/asm}/byteorder.h     |   0
 xen/include/{asm-arm => arch-arm/asm}/cache.h |   0
 .../{asm-arm => arch-arm/asm}/cadence-uart.h  |   0
 .../{asm-arm => arch-arm/asm}/config.h        |   0
 .../{asm-arm => arch-arm/asm}/cpregs.h        |   0
 .../{asm-arm => arch-arm/asm}/cpuerrata.h     |   0
 .../{asm-arm => arch-arm/asm}/cpufeature.h    |   0
 .../{asm-arm => arch-arm/asm}/current.h       |   0
 .../{asm-arm => arch-arm/asm}/debugger.h      |   0
 xen/include/{asm-arm => arch-arm/asm}/delay.h |   0
 xen/include/{asm-arm => arch-arm/asm}/desc.h  |   0
 .../{asm-arm => arch-arm/asm}/device.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/div64.h |   0
 .../{asm-arm => arch-arm/asm}/domain.h        |   0
 .../{asm-arm => arch-arm/asm}/domain_build.h  |   0
 .../{asm-arm => arch-arm/asm}/early_printk.h  |   0
 .../{asm-arm => arch-arm/asm}/efibind.h       |   0
 xen/include/{asm-arm => arch-arm/asm}/elf.h   |   0
 xen/include/{asm-arm => arch-arm/asm}/event.h |   0
 .../asm}/exynos4210-uart.h                    |   0
 .../{asm-arm => arch-arm/asm}/flushtlb.h      |   0
 xen/include/{asm-arm => arch-arm/asm}/gic.h   |   0
 .../{asm-arm => arch-arm/asm}/gic_v3_defs.h   |   0
 .../{asm-arm => arch-arm/asm}/gic_v3_its.h    |   0
 .../{asm-arm => arch-arm/asm}/grant_table.h   |   0
 .../{asm-arm => arch-arm/asm}/guest_access.h  |   0
 .../{asm-arm => arch-arm/asm}/guest_atomics.h |   0
 .../{asm-arm => arch-arm/asm}/guest_walk.h    |   0
 .../{asm-arm => arch-arm/asm}/hardirq.h       |   0
 xen/include/{asm-arm => arch-arm/asm}/hsr.h   |   0
 .../{asm-arm => arch-arm/asm}/hypercall.h     |   0
 xen/include/{asm-arm => arch-arm/asm}/init.h  |   0
 xen/include/{asm-arm => arch-arm/asm}/insn.h  |   0
 xen/include/{asm-arm => arch-arm/asm}/io.h    |   0
 xen/include/{asm-arm => arch-arm/asm}/iocap.h |   0
 xen/include/{asm-arm => arch-arm/asm}/iommu.h |   0
 .../{asm-arm => arch-arm/asm}/iommu_fwspec.h  |   0
 xen/include/{asm-arm => arch-arm/asm}/ioreq.h |   0
 xen/include/{asm-arm => arch-arm/asm}/irq.h   |   0
 .../{asm-arm => arch-arm/asm}/kernel.h        |   0
 .../{asm-arm => arch-arm/asm}/livepatch.h     |   0
 xen/include/{asm-arm => arch-arm/asm}/lpae.h  |   0
 .../{asm-arm => arch-arm/asm}/macros.h        |   0
 .../{asm-arm => arch-arm/asm}/mem_access.h    |   0
 xen/include/{asm-arm => arch-arm/asm}/mm.h    |   0
 xen/include/{asm-arm => arch-arm/asm}/mmio.h  |   0
 .../{asm-arm => arch-arm/asm}/monitor.h       |   0
 .../{asm-arm => arch-arm/asm}/new_vgic.h      |   0
 .../{asm-arm => arch-arm/asm}/nospec.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/numa.h  |   0
 xen/include/{asm-arm => arch-arm/asm}/p2m.h   |   0
 .../{asm-arm => arch-arm/asm}/page-bits.h     |   0
 xen/include/{asm-arm => arch-arm/asm}/page.h  |   0
 .../{asm-arm => arch-arm/asm}/paging.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/pci.h   |   0
 .../{asm-arm => arch-arm/asm}/percpu.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/perfc.h |   0
 .../{asm-arm => arch-arm/asm}/perfc_defn.h    |   0
 .../{asm-arm => arch-arm/asm}/pl011-uart.h    |   0
 .../{asm-arm => arch-arm/asm}/platform.h      |   0
 .../asm}/platforms/exynos5.h                  |   0
 .../asm}/platforms/midway.h                   |   0
 .../asm}/platforms/omap5.h                    |   0
 .../asm}/platforms/vexpress.h                 |   0
 .../asm}/platforms/xilinx-zynqmp-eemi.h       |   0
 .../{asm-arm => arch-arm/asm}/processor.h     |   0
 .../{asm-arm => arch-arm/asm}/procinfo.h      |   0
 xen/include/{asm-arm => arch-arm/asm}/psci.h  |   0
 .../{asm-arm => arch-arm/asm}/random.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/regs.h  |   0
 .../{asm-arm => arch-arm/asm}/scif-uart.h     |   0
 xen/include/{asm-arm => arch-arm/asm}/setup.h |   0
 .../{asm-arm => arch-arm/asm}/short-desc.h    |   0
 xen/include/{asm-arm => arch-arm/asm}/smccc.h |   0
 xen/include/{asm-arm => arch-arm/asm}/smp.h   |   0
 .../{asm-arm => arch-arm/asm}/softirq.h       |   0
 .../{asm-arm => arch-arm/asm}/spinlock.h      |   0
 .../{asm-arm => arch-arm/asm}/string.h        |   0
 .../{asm-arm => arch-arm/asm}/sysregs.h       |   0
 .../{asm-arm => arch-arm/asm}/system.h        |   0
 .../{asm-arm => arch-arm/asm}/tee/optee_msg.h |   0
 .../asm}/tee/optee_rpc_cmd.h                  |   0
 .../{asm-arm => arch-arm/asm}/tee/optee_smc.h |   0
 .../{asm-arm => arch-arm/asm}/tee/tee.h       |   0
 xen/include/{asm-arm => arch-arm/asm}/time.h  |   0
 xen/include/{asm-arm => arch-arm/asm}/trace.h |   0
 xen/include/{asm-arm => arch-arm/asm}/traps.h |   0
 xen/include/{asm-arm => arch-arm/asm}/types.h |   0
 xen/include/{asm-arm => arch-arm/asm}/vfp.h   |   0
 .../{asm-arm => arch-arm/asm}/vgic-emul.h     |   0
 xen/include/{asm-arm => arch-arm/asm}/vgic.h  |   0
 .../{asm-arm => arch-arm/asm}/vm_event.h      |   0
 .../{asm-arm => arch-arm/asm}/vpl011.h        |   0
 xen/include/{asm-arm => arch-arm/asm}/vpsci.h |   0
 xen/include/{asm-arm => arch-arm/asm}/vreg.h  |   0
 .../{asm-arm => arch-arm/asm}/vtimer.h        |   0
 .../{asm-arm => arch-arm/asm}/xenoprof.h      |   0
 .../{asm-riscv => arch-riscv/asm}/config.h    |   0
 xen/include/{asm-x86 => arch-x86/asm}/acpi.h  |   0
 .../asm}/alternative-asm.h                    |   0
 .../{asm-x86 => arch-x86/asm}/alternative.h   |   0
 .../{asm-x86 => arch-x86/asm}/altp2m.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/amd.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/apic.h  |   0
 .../{asm-x86 => arch-x86/asm}/apicdef.h       |   0
 .../{asm-x86 => arch-x86/asm}/asm-defns.h     |   0
 .../{asm-x86 => arch-x86/asm}/asm_defns.h     |   0
 .../{asm-x86 => arch-x86/asm}/atomic.h        |   0
 .../{asm-x86 => arch-x86/asm}/bitops.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/bug.h   |   0
 .../{asm-x86 => arch-x86/asm}/byteorder.h     |   0
 .../{asm-x86 => arch-x86/asm}/bzimage.h       |   0
 xen/include/{asm-x86 => arch-x86/asm}/cache.h |   0
 .../{asm-x86 => arch-x86/asm}/compat.h        |   0
 .../{asm-x86 => arch-x86/asm}/config.h        |   0
 .../{asm-x86 => arch-x86/asm}/cpufeature.h    |   0
 .../{asm-x86 => arch-x86/asm}/cpufeatures.h   |   0
 .../{asm-x86 => arch-x86/asm}/cpufeatureset.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/cpuid.h |   0
 .../{asm-x86 => arch-x86/asm}/cpuidle.h       |   0
 .../{asm-x86 => arch-x86/asm}/current.h       |   2 +-
 .../{asm-x86 => arch-x86/asm}/debugger.h      |   0
 .../{asm-x86 => arch-x86/asm}/debugreg.h      |   0
 xen/include/{asm-x86 => arch-x86/asm}/delay.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/desc.h  |   0
 .../{asm-x86 => arch-x86/asm}/device.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/div64.h |   0
 .../{asm-x86 => arch-x86/asm}/dom0_build.h    |   0
 .../{asm-x86 => arch-x86/asm}/domain.h        |   2 +-
 xen/include/{asm-x86 => arch-x86/asm}/e820.h  |   0
 xen/include/{asm-x86 => arch-x86/asm}/edd.h   |   0
 .../{asm-x86 => arch-x86/asm}/efibind.h       |   0
 xen/include/{asm-x86 => arch-x86/asm}/elf.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/event.h |   0
 .../{asm-x86 => arch-x86/asm}/fixmap.h        |   0
 .../{asm-x86 => arch-x86/asm}/flushtlb.h      |   0
 .../{asm-x86 => arch-x86/asm}/genapic.h       |   0
 .../{asm-x86 => arch-x86/asm}/grant_table.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/guest.h |   0
 .../asm}/guest/hyperv-hcall.h                 |   0
 .../asm}/guest/hyperv-tlfs.h                  |   0
 .../{asm-x86 => arch-x86/asm}/guest/hyperv.h  |   0
 .../asm}/guest/hypervisor.h                   |   0
 .../asm}/guest/pvh-boot.h                     |   0
 .../asm}/guest/xen-hcall.h                    |   0
 .../{asm-x86 => arch-x86/asm}/guest/xen.h     |   0
 .../{asm-x86 => arch-x86/asm}/guest_access.h  |   0
 .../{asm-x86 => arch-x86/asm}/guest_atomics.h |   0
 .../{asm-x86 => arch-x86/asm}/guest_pt.h      |   0
 xen/include/{asm-x86 => arch-x86/asm}/hap.h   |   0
 .../{asm-x86 => arch-x86/asm}/hardirq.h       |   0
 xen/include/{asm-x86 => arch-x86/asm}/hpet.h  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/asid.h      |   0
 .../{asm-x86 => arch-x86/asm}/hvm/cacheattr.h |   0
 .../{asm-x86 => arch-x86/asm}/hvm/domain.h    |   0
 .../{asm-x86 => arch-x86/asm}/hvm/emulate.h   |   0
 .../asm}/hvm/grant_table.h                    |   0
 .../asm}/hvm/guest_access.h                   |   0
 .../{asm-x86 => arch-x86/asm}/hvm/hvm.h       |   0
 .../{asm-x86 => arch-x86/asm}/hvm/io.h        |   0
 .../{asm-x86 => arch-x86/asm}/hvm/ioreq.h     |   0
 .../{asm-x86 => arch-x86/asm}/hvm/irq.h       |   0
 .../{asm-x86 => arch-x86/asm}/hvm/monitor.h   |   0
 .../{asm-x86 => arch-x86/asm}/hvm/nestedhvm.h |   0
 .../{asm-x86 => arch-x86/asm}/hvm/save.h      |   0
 .../{asm-x86 => arch-x86/asm}/hvm/support.h   |   0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/asid.h  |   0
 .../asm}/hvm/svm/emulate.h                    |   0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/intr.h  |   0
 .../asm}/hvm/svm/nestedsvm.h                  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/svm.h   |   0
 .../asm}/hvm/svm/svmdebug.h                   |   0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/vmcb.h  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/trace.h     |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vcpu.h      |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vioapic.h   |   0
 .../{asm-x86 => arch-x86/asm}/hvm/viridian.h  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vlapic.h    |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vm_event.h  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vmx/vmcs.h  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vmx/vmx.h   |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vmx/vvmx.h  |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vpic.h      |   0
 .../{asm-x86 => arch-x86/asm}/hvm/vpt.h       |   0
 .../{asm-x86 => arch-x86/asm}/hypercall.h     |   0
 xen/include/{asm-x86 => arch-x86/asm}/i387.h  |   0
 xen/include/{asm-x86 => arch-x86/asm}/init.h  |   0
 .../{asm-x86 => arch-x86/asm}/invpcid.h       |   0
 xen/include/{asm-x86 => arch-x86/asm}/io.h    |   0
 .../{asm-x86 => arch-x86/asm}/io_apic.h       |   0
 xen/include/{asm-x86 => arch-x86/asm}/iocap.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/iommu.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/ioreq.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/irq.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/ldt.h   |   0
 .../{asm-x86 => arch-x86/asm}/livepatch.h     |   0
 .../asm}/mach-default/bios_ebda.h             |   0
 .../asm}/mach-default/io_ports.h              |   0
 .../asm}/mach-default/irq_vectors.h           |   0
 .../asm}/mach-default/mach_mpparse.h          |   0
 .../asm}/mach-default/mach_mpspec.h           |   0
 .../asm}/mach-generic/mach_apic.h             |   0
 .../asm}/mach-generic/mach_mpparse.h          |   0
 .../{asm-x86 => arch-x86/asm}/machine_kexec.h |   0
 .../{asm-x86 => arch-x86/asm}/mc146818rtc.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/mce.h   |   0
 .../{asm-x86 => arch-x86/asm}/mem_access.h    |   0
 .../{asm-x86 => arch-x86/asm}/mem_paging.h    |   0
 .../{asm-x86 => arch-x86/asm}/mem_sharing.h   |   0
 .../{asm-x86 => arch-x86/asm}/microcode.h     |   0
 xen/include/{asm-x86 => arch-x86/asm}/mm.h    |   0
 .../{asm-x86 => arch-x86/asm}/monitor.h       |   0
 .../{asm-x86 => arch-x86/asm}/mpspec.h        |   0
 .../{asm-x86 => arch-x86/asm}/mpspec_def.h    |   0
 xen/include/{asm-x86 => arch-x86/asm}/msi.h   |   0
 .../{asm-x86 => arch-x86/asm}/msr-index.h     |   0
 xen/include/{asm-x86 => arch-x86/asm}/msr.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/mtrr.h  |   0
 .../{asm-x86 => arch-x86/asm}/multicall.h     |   0
 xen/include/{asm-x86 => arch-x86/asm}/mwait.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/nmi.h   |   0
 xen/include/{asm-x86 => arch-x86/asm}/nops.h  |   0
 .../{asm-x86 => arch-x86/asm}/nospec.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/numa.h  |   0
 xen/include/{asm-x86 => arch-x86/asm}/p2m.h   |   0
 .../{asm-x86 => arch-x86/asm}/page-bits.h     |   0
 xen/include/{asm-x86 => arch-x86/asm}/page.h  |   0
 .../{asm-x86 => arch-x86/asm}/paging.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/pci.h   |   0
 .../{asm-x86 => arch-x86/asm}/percpu.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/perfc.h |   0
 .../{asm-x86 => arch-x86/asm}/perfc_defn.h    |   0
 .../{asm-x86 => arch-x86/asm}/processor.h     |   0
 xen/include/{asm-x86 => arch-x86/asm}/psr.h   |   0
 .../{asm-x86 => arch-x86/asm}/pv/domain.h     |   0
 .../asm}/pv/grant_table.h                     |   0
 xen/include/{asm-x86 => arch-x86/asm}/pv/mm.h |   0
 .../{asm-x86 => arch-x86/asm}/pv/shim.h       |   0
 .../{asm-x86 => arch-x86/asm}/pv/traps.h      |   0
 .../{asm-x86 => arch-x86/asm}/random.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/regs.h  |   0
 xen/include/{asm-x86 => arch-x86/asm}/setup.h |   0
 .../{asm-x86 => arch-x86/asm}/shadow.h        |   0
 .../{asm-x86 => arch-x86/asm}/shared.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/smp.h   |   0
 .../{asm-x86 => arch-x86/asm}/softirq.h       |   0
 .../{asm-x86 => arch-x86/asm}/spec_ctrl.h     |   0
 .../{asm-x86 => arch-x86/asm}/spec_ctrl_asm.h |   0
 .../{asm-x86 => arch-x86/asm}/spinlock.h      |   0
 .../{asm-x86 => arch-x86/asm}/string.h        |   0
 .../{asm-x86 => arch-x86/asm}/system.h        |   0
 xen/include/{asm-x86 => arch-x86/asm}/tboot.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/time.h  |   0
 xen/include/{asm-x86 => arch-x86/asm}/trace.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/traps.h |   0
 xen/include/{asm-x86 => arch-x86/asm}/types.h |   0
 .../{asm-x86 => arch-x86/asm}/uaccess.h       |   0
 .../{asm-x86 => arch-x86/asm}/unaligned.h     |   0
 .../{asm-x86 => arch-x86/asm}/vm_event.h      |   0
 xen/include/{asm-x86 => arch-x86/asm}/vpmu.h  |   0
 .../{asm-x86 => arch-x86/asm}/x86-defns.h     |   0
 .../{asm-x86 => arch-x86/asm}/x86-vendors.h   |   0
 .../asm}/x86_64/efibind.h                     |   0
 .../{asm-x86 => arch-x86/asm}/x86_64/elf.h    |   0
 .../{asm-x86 => arch-x86/asm}/x86_64/page.h   |   0
 .../{asm-x86 => arch-x86/asm}/x86_64/regs.h   |   0
 .../{asm-x86 => arch-x86/asm}/x86_64/system.h |   0
 .../asm}/x86_64/uaccess.h                     |   0
 .../{asm-x86 => arch-x86/asm}/x86_emulate.h   |   0
 .../{asm-x86 => arch-x86/asm}/xenoprof.h      |   0
 .../{asm-x86 => arch-x86/asm}/xstate.h        |   0
 xen/include/xen/acpi.h                        |   4 +-
 xen/include/xen/bitmap.h                      |   2 +-
 xen/scripts/Kbuild.include                    |  80 +++-
 xen/scripts/Makefile.clean                    |  20 +-
 xen/test/Makefile                             |  16 +-
 xen/test/livepatch/Makefile                   | 215 ++++------
 xen/tools/Makefile                            |   8 +-
 xen/tools/compat-build-header.py              |  44 +-
 xen/tools/compat-build-source.py              |   8 +-
 xen/tools/fixdep.c                            | 404 ++++++++++++++++++
 xen/tools/symbols.c                           |  18 +-
 xen/xsm/flask/Makefile                        |  40 +-
 xen/xsm/flask/policy/mkaccess_vector.sh       |   7 +-
 xen/xsm/flask/ss/Makefile                     |   2 +-
 369 files changed, 1122 insertions(+), 616 deletions(-)
 create mode 100644 xen/arch/riscv/riscv64/Makefile
 create mode 100644 xen/arch/x86/mm/guest_walk_2.c
 create mode 100644 xen/arch/x86/mm/guest_walk_3.c
 create mode 100644 xen/arch/x86/mm/guest_walk_4.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_2level.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_3level.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_4level.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_2.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_3.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_4.c
 rename xen/include/{asm-arm => arch-arm/asm}/acpi.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/alternative.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/altp2m.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/atomic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/bitops.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/bug.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/cmpxchg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/flushtlb.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/insn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/io.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/macros.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/mm.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/page.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/processor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/sysregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/system.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/traps.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/vfp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/atomic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/bitops.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/brk.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/bug.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/cmpxchg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/efibind.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/flushtlb.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/hsr.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/insn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/io.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/macros.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/mm.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/page.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/processor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/sysregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/system.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/traps.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/vfp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/asm_defns.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/atomic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/bitops.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/bug.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/byteorder.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cache.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cadence-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/config.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cpregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cpuerrata.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cpufeature.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/current.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/debugger.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/delay.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/desc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/device.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/div64.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/domain.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/domain_build.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/early_printk.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/efibind.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/elf.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/event.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/exynos4210-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/flushtlb.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/gic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/gic_v3_defs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/gic_v3_its.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/grant_table.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/guest_access.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/guest_atomics.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/guest_walk.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/hardirq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/hsr.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/hypercall.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/init.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/insn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/io.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/iocap.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/iommu.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/iommu_fwspec.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/ioreq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/irq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/kernel.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/livepatch.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/lpae.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/macros.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/mem_access.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/mm.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/mmio.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/monitor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/new_vgic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/nospec.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/numa.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/p2m.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/page-bits.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/page.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/paging.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/pci.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/percpu.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/perfc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/perfc_defn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/pl011-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platform.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/exynos5.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/midway.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/omap5.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/vexpress.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/xilinx-zynqmp-eemi.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/processor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/procinfo.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/psci.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/random.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/regs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/scif-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/setup.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/short-desc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/smccc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/smp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/softirq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/spinlock.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/string.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/sysregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/system.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/optee_msg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/optee_rpc_cmd.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/optee_smc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/tee.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/time.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/trace.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/traps.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/types.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vfp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vgic-emul.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vgic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vm_event.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vpl011.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vpsci.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vreg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vtimer.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/xenoprof.h (100%)
 rename xen/include/{asm-riscv => arch-riscv/asm}/config.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/acpi.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/alternative-asm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/alternative.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/altp2m.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/amd.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/apic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/apicdef.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/asm-defns.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/asm_defns.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/atomic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/bitops.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/bug.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/byteorder.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/bzimage.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cache.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/compat.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/config.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpufeature.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpufeatures.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpufeatureset.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpuid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpuidle.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/current.h (99%)
 rename xen/include/{asm-x86 => arch-x86/asm}/debugger.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/debugreg.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/delay.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/desc.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/device.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/div64.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/dom0_build.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/domain.h (99%)
 rename xen/include/{asm-x86 => arch-x86/asm}/e820.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/edd.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/efibind.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/elf.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/event.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/fixmap.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/flushtlb.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/genapic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/grant_table.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hyperv-hcall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hyperv-tlfs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hyperv.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hypervisor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/pvh-boot.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/xen-hcall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/xen.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest_access.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest_atomics.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest_pt.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hap.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hardirq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hpet.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/asid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/cacheattr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/domain.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/emulate.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/grant_table.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/guest_access.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/hvm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/io.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/ioreq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/irq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/monitor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/nestedhvm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/save.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/support.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/asid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/emulate.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/intr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/nestedsvm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/svm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/svmdebug.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/vmcb.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/trace.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vcpu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vioapic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/viridian.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vlapic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vm_event.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vmx/vmcs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vmx/vmx.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vmx/vvmx.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vpic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vpt.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hypercall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/i387.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/init.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/invpcid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/io.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/io_apic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/iocap.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/iommu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/ioreq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/irq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/ldt.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/livepatch.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/bios_ebda.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/io_ports.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/irq_vectors.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/mach_mpparse.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/mach_mpspec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-generic/mach_apic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-generic/mach_mpparse.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/machine_kexec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mc146818rtc.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mce.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mem_access.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mem_paging.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mem_sharing.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/microcode.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/monitor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mpspec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mpspec_def.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/msi.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/msr-index.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/msr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mtrr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/multicall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mwait.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/nmi.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/nops.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/nospec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/numa.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/p2m.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/page-bits.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/page.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/paging.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pci.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/percpu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/perfc.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/perfc_defn.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/processor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/psr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/domain.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/grant_table.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/mm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/shim.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/traps.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/random.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/regs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/setup.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/shadow.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/shared.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/smp.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/softirq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/spec_ctrl.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/spec_ctrl_asm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/spinlock.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/string.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/system.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/tboot.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/time.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/trace.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/traps.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/types.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/uaccess.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/unaligned.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/vm_event.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/vpmu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86-defns.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86-vendors.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/efibind.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/elf.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/page.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/regs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/system.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/uaccess.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_emulate.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/xenoprof.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/xstate.h (100%)
 create mode 100644 xen/tools/fixdep.c

-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148712.274884 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOt-0007wz-JN; Thu, 01 Jul 2021 14:10:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148712.274884; Thu, 01 Jul 2021 14:10:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOt-0007wh-Ea; Thu, 01 Jul 2021 14:10:43 +0000
Received: by outflank-mailman (input) for mailman id 148712;
 Thu, 01 Jul 2021 14:10:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOs-0005F9-JC
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:42 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1306551d-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:23 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1306551d-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148623;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=W3w4kLLs4D474Vdd8fHK3XAA2OqyxxyERzR7s4cMOP0=;
  b=aeHrKohN/N6ShuMLamw3YwrNUV+XmzYHaPzfkdTwszQe4z+SVD0Ebspl
   hCZkKgq6ERoqlvnAdCERLPjbcTe5QVy4W7OsDNL/EJafRcRXpKqf2URTi
   xJ+22QUI53O40dm+qu7ZglvRXTwVGFSd2NxYBNfLiU+ghYqWh7+AW5Fzp
   I=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: GJ4PkxF6CblU0SjvcOwQOGT/BmredQqQ0MdquCllOKVewtxBRYzL6QA28aZcNVrL+XEhv6o3ml
 XdeCsmaWHLpttZeaEIuUaE0YO+gADtL1B/TT93ZIh2UUJErWB08+WCmKpMba7IqB8OvzGtMuCV
 eE/88p2AKPyUGSPfYlMeyMYlMOqZ+fOG2n9FWHh8vL2W+ps8SAod92gG6fCwot0niJnFFkOW12
 83oaxkGGLABKF2auaGR9f5ziN7N+wW2Rf9OROX4sU8lFjs4D5PttLTay6aUhh6gyQpvI4lXfjH
 maQ=
X-SBRS: 5.1
X-MesageID: 47384355
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Ms3X/qNZ9Q7d5sBcTsejsMiBIKoaSvp037Eqv3ofdfUzSL3+qy
 nOpoVj6faaslcssR0b9OxofZPwI080lqQFhbX5X43DYOCOggLBR+tfBMnZsljd8kXFh4hgPM
 xbHZSWZuedMbEDt7eY3DWF
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47384355"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Jan Beulich
	<jbeulich@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 04/31] build: use if_changed_rules with %.o:%.c targets
Date: Thu, 1 Jul 2021 15:09:44 +0100
Message-ID: <20210701141011.785641-5-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Use $(dot-target) to have the target name prefix with a dot.

Now, when the CC command has run, it is recorded in .*.cmd
file, then if_changed_rules will compare it on subsequent runs.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
 xen/Rules.mk | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 6a0cdfde2eed..4adc90eec80d 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -192,19 +192,27 @@ FORCE:
 
 SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
 
-%.o: %.c Makefile
+quiet_cmd_cc_o_c = CC      $@
 ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
-	$(CC) $(c_flags) -c $< -o $(@D)/.$(@F).tmp -MQ $@
-ifeq ($(CONFIG_CC_IS_CLANG),y)
-	$(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(@D)/.$(@F).tmp $@
-else
-	$(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(@D)/.$(@F).tmp $@
-endif
-	rm -f $(@D)/.$(@F).tmp
+    cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
+    ifeq ($(CONFIG_CC_IS_CLANG),y)
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
+    else
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
+    endif
+    cmd_objcopy_fix_sym += && rm -f $(dot-target).tmp
 else
-	$(CC) $(c_flags) -c $< -o $@
+    cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $@
 endif
 
+define rule_cc_o_c
+    $(call cmd_and_record,cc_o_c)
+    $(call cmd,objcopy_fix_sym)
+endef
+
+%.o: %.c FORCE
+	$(call if_changed_rule,cc_o_c)
+
 quiet_cmd_cc_o_S = CC      $@
 cmd_cc_o_S = $(CC) $(a_flags) -c $< -o $@
 
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148714.274895 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOz-0000I6-1K; Thu, 01 Jul 2021 14:10:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148714.274895; Thu, 01 Jul 2021 14:10:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxOy-0000HI-Rn; Thu, 01 Jul 2021 14:10:48 +0000
Received: by outflank-mailman (input) for mailman id 148714;
 Thu, 01 Jul 2021 14:10:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxOx-0005F9-JU
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:47 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 13833227-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 13833227-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148624;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=uuyAZES2mXpdo7RpfZEYfJQS/0KceaGe4Dk4hEnlg9Y=;
  b=OorIn9AQhSLuRrI7wKdJAjWWVd2dGx264u+hA7yjIbS8MgJL89TB9SW8
   vDjmdvlFK2LMcB4rRHns/WgBNJtjNobiUN8r1Akta/SI/9oRADIL6NhGJ
   MG+GArcMDN3GjYVAJDcGWweOYTkBiz9ByKfIyz56CMp1dPxAdA6YFKVB3
   Q=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: UlKbJEVjkqdCitesAqRIdhA8VQWWfhTd7M/0fsiuU0CO2T4g9F0Ctuf7n35sXw7vU/LXF4tKlM
 B0Ue5Zn3H4PMY98To+f9RmB369r56t7ttJBaYJwh20kxxE51o6BO6jNHd/RG/9czYtKYEjskkq
 mwLIaNv/SKjHgzFywA4Xmjkg9/UH35ps0I08xVhxpcTlRFnWdtqF0OfD5X73p+ChcH676VTUcP
 xdinlcsmcByDfuTKArF5Ju2WzVt474neclk7Wedw1gPAWNIomnOOwErYPFr93UJE+LOqT51n+P
 wVs=
X-SBRS: 5.1
X-MesageID: 47755333
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:+QPBhaMw/wec98BcTjujsMiBIKoaSvp037BK7S1MoNJuEvBw9v
 re+MjzsCWftN9/Yh4dcLy7VpVoIkmskKKdg7NhXotKNTOO0AeVxelZhrcKqAeQeREWmNQ96U
 9hGZIOdeEZDzJB/LrHCN/TKade/DGFmprY+9s31x1WPGZXgzkL1XYDNu6ceHcGIjVuNN4CO7
 e3wNFInDakcWR/VLXAOpFUN9Kz3uEijfjdEGY7OyI=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755333"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Subject: [XEN PATCH v6 05/31] build: factorise generation of the linker scripts
Date: Thu, 1 Jul 2021 15:09:45 +0100
Message-ID: <20210701141011.785641-6-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

In Arm and X86 makefile, generating the linker script is the same, so
we can simply have both call the same macro.

We need to add *.lds files into extra-y so that Rules.mk can find the
.*.cmd dependency file and load it.

Change made to the command line:
- Use cpp_flags macro which simply filter -Wa,% options from $(a_flags).
- Added -D__LINKER__ even it is only used by Arm's lds.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v6:
    - CPP already used instead of CC -E
    - -Ui386 already removed
    - cpp_flags is now a macro
    - rebased
    
    v5:
    - rename cc_lds_S to cpp_lds_S as the binary runned is now CPP
    - Use new cpp_flags instead of the open-coded filter of a_flags.
    
    v4:
    - fix rebuild by adding FORCE as dependency
    - Use $(CPP)
    - remove -Ui386
    - avoid using "define" for cmd_cc_lds_S, as adding '; \' on each line is
      still mandatory for if_changed (or cmd) macro to work.

 xen/Rules.mk          | 4 ++++
 xen/arch/arm/Makefile | 6 ++++--
 xen/arch/x86/Makefile | 6 ++++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 4adc90eec80d..f05b2d3f0399 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -255,6 +255,10 @@ cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 %.s: %.S FORCE
 	$(call if_changed,cpp_s_S)
 
+# Linker scripts, .lds.S -> .lds
+quiet_cmd_cpp_lds_S = LDS     $@
+cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -D__LINKER__ -MQ $@ -o $@ $<
+
 # Add intermediate targets:
 # When building objects with specific suffix patterns, add intermediate
 # targets that the final targets are derived from.
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 3d3b97b5b440..0edd9dee6f49 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -66,6 +66,8 @@ obj-y += vpsci.o
 obj-y += vuart.o
 extra-y += $(TARGET_SUBARCH)/head.o
 
+extra-y += xen.lds
+
 #obj-bin-y += ....o
 
 ifneq ($(CONFIG_DTB_FILE),"")
@@ -133,8 +135,8 @@ $(TARGET)-syms: prelink.o xen.lds
 .PHONY: include
 include:
 
-xen.lds: xen.lds.S
-	$(CPP) -P $(a_flags) -D__LINKER__ -MQ $@ -o $@ $<
+xen.lds: xen.lds.S FORCE
+	$(call if_changed,cpp_lds_S)
 
 dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 2ec883456e48..08a4ec1944d3 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -79,6 +79,7 @@ obj-y += sysctl.o
 endif
 
 extra-y += asm-macros.i
+extra-y += xen.lds
 
 ifneq ($(CONFIG_HVM),y)
 x86_emulate.o: CFLAGS-y += -Wno-unused-label
@@ -240,6 +241,7 @@ endif
 note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
+extra-y += efi.lds
 $(TARGET).efi: prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
@@ -292,8 +294,8 @@ $(BASEDIR)/include/asm-x86/asm-macros.h: asm-macros.i Makefile
 	$(call move-if-changed,$@.new,$@)
 
 efi.lds: AFLAGS-y += -DEFI
-xen.lds efi.lds: xen.lds.S
-	$(CPP) -P $(filter-out -Wa$(comma)%,$(a_flags)) -MQ $@ -o $@ $<
+xen.lds efi.lds: xen.lds.S FORCE
+	$(call if_changed,cpp_lds_S)
 
 boot/mkelf32: boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148715.274906 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxP2-0000mx-Dy; Thu, 01 Jul 2021 14:10:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148715.274906; Thu, 01 Jul 2021 14:10:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxP2-0000lI-8H; Thu, 01 Jul 2021 14:10:52 +0000
Received: by outflank-mailman (input) for mailman id 148715;
 Thu, 01 Jul 2021 14:10:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxP1-0005tj-0R
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:51 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9750316e-8fc7-49fa-b4c6-65a7a8682684;
 Thu, 01 Jul 2021 14:10:38 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9750316e-8fc7-49fa-b4c6-65a7a8682684
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148637;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=y8SWyJ3p44fQ34F09ahZsCZGxd9yD3VsNGECNl35lHA=;
  b=BTkP9KZIzGwZ7ZB+cXXI9i1FEA1V0tKRob8pKou46ZcfUpIDC6d4nTL6
   ODnG2sGoqvrkwkB4NeS6oVgvJwM6fPCLPYSxFKmc2soMQfep794qGABEG
   0JCey909r8rjdmUe4zq3P0rqEqaaPa7TR0ehnc05LL8082A/HItU/bOf5
   c=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: WhFgH9js5xlwKlXGtlC/Joz2aE4ybEandDbTUzHIuxQO6BOpDJqr3Dn/Eirb1DIDOWqRv9Eefh
 0wH0QuXKhojgvB/yfeaNs0r61VHO24F68ufD9SDGF8ffW+xWBvp0Q5tVnHTOd4N6/1wNjQLEAx
 aI1BVhHu1lQPbW3POgx8ENbE8TqlmLBlGORSiqRv5yzOCYjWQfFkHDXCA/2bEyPvvNfkpzWHAR
 sVOTYK9kkBQrPMBQmf0in8M7rahj/jAp79FuNDbtxhtHPokOTN0Xj2J6r0AKj/RLyiAwyeZWIf
 eew=
X-SBRS: 5.1
X-MesageID: 49007486
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:+M8RiK27SzyZ8UGeKRg56wqjBLQkLtp133Aq2lEZdPRUGvb2qy
 nIpoV96faUskdpZJhOo7G90cW7LE80sKQFg7X5Xo3SODUO2lHJEGgK1+KLqFfd8m/Fh4tgPM
 9bAs5D4bbLY2SS4/yX3ODBKadC/OW6
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="49007486"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 13/31] build,tools: have default rules depends on symbols
Date: Thu, 1 Jul 2021 15:09:53 +0100
Message-ID: <20210701141011.785641-14-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

No need to call $(MAKE) again.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/tools/Makefile | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/xen/tools/Makefile b/xen/tools/Makefile
index e940939d61f4..4e42163f981c 100644
--- a/xen/tools/Makefile
+++ b/xen/tools/Makefile
@@ -2,8 +2,7 @@
 include $(XEN_ROOT)/Config.mk
 
 .PHONY: default
-default:
-	$(MAKE) symbols
+default: symbols
 
 .PHONY: clean
 clean:
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148716.274916 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxP3-0001A3-R1; Thu, 01 Jul 2021 14:10:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148716.274916; Thu, 01 Jul 2021 14:10:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxP3-000183-Kq; Thu, 01 Jul 2021 14:10:53 +0000
Received: by outflank-mailman (input) for mailman id 148716;
 Thu, 01 Jul 2021 14:10:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxP2-0005F9-Jg
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:52 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 184bf81a-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:32 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 184bf81a-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148632;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=2WFDUvnAZmIMKGyUlu8KLXOxi1z1do7+jNPMy5fEh9Q=;
  b=HHS8m3PJMqEfShbC3br1fxuy3izyozdQk/J38+Hy6N3sd1/jHIfwoVMc
   yfr9Ow9m8VeSAU/yiBGlp3ZOY0tdQopWz78F/9LNmr28WI0xkz6JQk4ib
   AY+SS/AZJAdT90Rpr10Kh0s0Cc2S6UMTSbO41g1UXfl+HaJ9Zs53TzLD5
   Y=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Dls+lF5hiBXijky5vM+9nnAjrwEmsB23wra86iApibKZRVfZotBLVIGeJJHEQCC3VHZNUfkrja
 fSc+3ONCMCyMlkuaqQIuOVu5QsGl1xefaLtUoQAt0Wxg/dj88YZl0Ca8yAbAN+8jBVaClGtoth
 p0R3omGJRkxD+4qRurT1zmOcBkhfuNaAPi4ITsStNBMAo2T3VX6aHp+QRPZLWTec4Sz0GwBrW9
 WSi50YZ5JYuJsOmL4sfCCXgdIYT6lM9l282r2voKg4fBp63/bCFWPsWHTojhS7nZuMv1mJNdq+
 Wxs=
X-SBRS: 5.1
X-MesageID: 47755348
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:U8zI+6N+cOO1kcBcT1H155DYdb4zR+YMi2TDiHoddfUFSKalfp
 6V98jzjSWE8wr4WBkb6LO90dq7MAnhHP9OkMQs1NKZMDUO11HYS72KgbGC/9SkIVyHygc/79
 YtT0EdMqyXMbESt6+Tj2eF+pQbsaC6GcuT9IXjJgJWPGVXgtZbnmJE42igcnFedU1jP94UBZ
 Cc7s1Iq36LYnIMdPm2AXEDQqzqu8DLvIiOW29JOzcXrC21yR+44r/zFBaVmj0EVSlU/Lsk+W
 /Z1yTk+6SYte2hwBO07R6T030Woqqg9jJwPr3PtiEnEESotu9uXvUkZ1S2hkF3nAho0idsrD
 CDmWZnAy050QKtQoj8m2qQ5+Cn6kdg15aq8y7mvVLz5cP+Xz40EMxHmMZQdQbY8VMpuJVm3L
 tMxH/xjesfMfrsplWL2zHzbWAdqqN0mwtRrccDy3hEFYcOYr5YqoISuEtTDZcbBSr/rIQqCv
 NnAs3Q7OtfNQryVQGTgkB/hNi3GngjFBaPRUYP/sSTzjhNhXh8i08V3tYWkHsM/I80D5NE++
 PHOKJ1k6wmdL5fUUu8PpZ0fSKTMB2GffvhChPjHb3XLtBzB5uWke+H3Fwc3pDYRHUn9upNpK
 j8
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755348"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 09/31] build: clean "lib.a"
Date: Thu, 1 Jul 2021 15:09:49 +0100
Message-ID: <20210701141011.785641-10-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/Makefile b/xen/Makefile
index 360b4a1d1867..e4deceab2c9a 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -343,7 +343,7 @@ _clean: delete-unfresh-files
 	$(MAKE) $(clean) test
 	$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) clean
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
-		-o -name "*.gcno" -o -name ".*.cmd" \) -exec rm -f {} \;
+		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s include/asm-*/asm-offsets.h
 	rm -f .banner
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:10:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:10:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148718.274928 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxP9-0001xe-CI; Thu, 01 Jul 2021 14:10:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148718.274928; Thu, 01 Jul 2021 14:10:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxP9-0001xE-7k; Thu, 01 Jul 2021 14:10:59 +0000
Received: by outflank-mailman (input) for mailman id 148718;
 Thu, 01 Jul 2021 14:10:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxP7-0005F9-Jw
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:10:57 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1916428c-da76-11eb-8327-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:33 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1916428c-da76-11eb-8327-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148633;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=+mNOgsYjrFmWoNxBPJggXZS7DoTw6+WYH4Z2rQexo4M=;
  b=BvH0y00sbPb2wB7+eBju3BUjPhtXsz16o6bbZ1Crzt+2rd4ya9512AiR
   rAkvqhCK3T0A/hNYo2N0rUwhAWVSQ4kSxi6wXg0wftkN61YYQ6cmPxgCn
   DTIHjbIAsmdpPK3XoyUZ8N1CT2OG6+rCjDQ6nmYYvr5zMxK0s9EGJIhsx
   8=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: r1gCmWINHhjbKSKErWNZwtKtXPUGKanRJOUw7HRnVp3h3EFpmQgP8qOxcR/IRhXRfYbYBcJbM7
 sqsfpJRbq1Yer9qI3BSlMVATSaXhUbEj+4o63sdDuME7897nsFrWG4Y6wPVVtfGtS1WlcqBMRR
 wjVhMVZHjYW3SDXlm23C/zm9ryuW17cgmLnas8MyxF0xF1L8DkvoHFZ97Q92cM6FurGnPiBsum
 rpgKHuonpnXKhUB38Gy2NyrGh05JcVY+cgyZwcN7obuVT1nw4vxNnliaeTolltbMlUsriwMRou
 J5w=
X-SBRS: 5.1
X-MesageID: 47384384
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:pqbNFK2Fb+IAVhT9QkyFfwqjBLQkLtp133Aq2lEZdPRUGvb2qy
 nIpoV96faUskdpZJhOo7G90cW7LE80sKQFg7X5Xo3SODUO2lHJEGgK1+KLqFfd8m/Fh4tgPM
 9bAs5D4bbLY2SS4/yX3ODBKadC/OW6
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47384384"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 10/31] build: use $(kconfig) shortcut in clean rule
Date: Thu, 1 Jul 2021 15:09:50 +0100
Message-ID: <20210701141011.785641-11-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/Makefile b/xen/Makefile
index e4deceab2c9a..dae0247067ff 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -341,7 +341,7 @@ _clean: delete-unfresh-files
 	$(MAKE) $(clean) arch/riscv
 	$(MAKE) $(clean) arch/x86
 	$(MAKE) $(clean) test
-	$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) clean
+	$(MAKE) $(kconfig) clean
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148719.274939 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPB-0002OX-Pc; Thu, 01 Jul 2021 14:11:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148719.274939; Thu, 01 Jul 2021 14:11:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPB-0002O2-Jm; Thu, 01 Jul 2021 14:11:01 +0000
Received: by outflank-mailman (input) for mailman id 148719;
 Thu, 01 Jul 2021 14:11:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPB-0005tj-1K
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:01 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dc51d3e3-e9ff-4cf0-8250-e11fa1c9f0c9;
 Thu, 01 Jul 2021 14:10:38 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dc51d3e3-e9ff-4cf0-8250-e11fa1c9f0c9
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148638;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=uLKI3ja1OUbts2SnkXQR8tTgRcFYuztp8ELRrsey8HY=;
  b=GzMrmv93g75dGvqNHP/ElWe5XWY5IsPA/7go3q8fnKFgzZZaRgbp5Cg2
   wIGhO229pBS4nowzeIHkpnnrH1vSpQHK1HnTdu2FFtp27EvL+E0kIjZ4p
   yFzc92awQV9mjR16peojouoWcKDDWA8653djOcor0Y3qbR+dijDuabRsT
   s=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: wIO4LSAo1RB0HaT/akOTS3NCz9fKPQLBQUbVveOV7ZDsxOUA6h6frkF1StbkTbFdNID1zjly80
 pWCRm8a8pjU4Nrv+jvHD8wTjx+0gqGylMuUCK4JnKgI1f/Yy/YR3KbTu+0E2P3D7o0Xu8TZQ2i
 C/TDLPzF1zcft4irDJL81YbVQwxjfyVLArodacQF7kUFEh2JlwmD1h32z61mi43PctvgQdaTBQ
 quhDcHx9v0aM1oQBZC/dAgjzkegd/OZtGjZsb6QUI4l2AD3BCeqk/wCCQ5TFvywtHae1rrkabJ
 ncQ=
X-SBRS: 5.1
X-MesageID: 49007487
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:kwHH2qx3bz8ADejhFK2EKrPwFL1zdoMgy1knxilNoRw8SKKlfq
 eV7ZImPH7P+U4ssR4b+exoVJPtfZqYz+8R3WBzB8bEYOCFghrKEGgK1+KLqFeMJ8S9zJ846U
 4JSdkGNDSaNzlHZKjBjzVQa+xQouW6zA==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="49007487"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>
Subject: [XEN PATCH v6 14/31] build,arm: move LDFLAGS change to arch.mk
Date: Thu, 1 Jul 2021 15:09:54 +0100
Message-ID: <20210701141011.785641-15-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/arm/Makefile | 8 --------
 xen/arch/arm/arch.mk  | 8 ++++++++
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 0edd9dee6f49..3d0af8ebc93c 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -104,14 +104,6 @@ prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
 	$(call if_changed,ld)
 endif
 
-ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
-    ifeq ($(call ld-option, --fix-cortex-a53-843419),n)
-        $(warning ld does not support --fix-cortex-a53-843419; xen may be susceptible to erratum)
-    else
-        XEN_LDFLAGS += --fix-cortex-a53-843419
-    endif
-endif
-
 targets += prelink.o
 
 $(TARGET)-syms: prelink.o xen.lds
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index 11caec86ba14..6a2982059486 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -17,3 +17,11 @@ $(call cc-option-add,CFLAGS-$(CONFIG_ARM_64),CC,-mno-outline-atomics)
 ifneq ($(filter command line environment,$(origin CONFIG_EARLY_PRINTK)),)
     $(error You must use 'make menuconfig' to enable/disable early printk now)
 endif
+
+ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
+    ifeq ($(call ld-option, --fix-cortex-a53-843419),n)
+        $(warning ld does not support --fix-cortex-a53-843419; xen may be susceptible to erratum)
+    else
+        LDFLAGS += --fix-cortex-a53-843419
+    endif
+endif
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148720.274950 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPE-0002x2-44; Thu, 01 Jul 2021 14:11:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148720.274950; Thu, 01 Jul 2021 14:11:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPD-0002wk-Vq; Thu, 01 Jul 2021 14:11:03 +0000
Received: by outflank-mailman (input) for mailman id 148720;
 Thu, 01 Jul 2021 14:11:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPC-0005F9-K1
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:02 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1a1c1c88-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:35 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1a1c1c88-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148635;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=YsKdP5YvQwz72PyZst34Fs58LUxCUW3nm9UPTFm+erc=;
  b=Q29apw6ypftOH/490vEziVLWVjfQGeauMxZ4Tiydmp6pRzvvAa0Bjtcs
   ica8vX0JMeGcvEDf1uoUZFYq1DhlgnObzoC+pivXhmxmVEyA617PGZUcR
   8apwQ3ippUKZdHew5PH4JzfjKQ/qzybivUxH2hBrMj36aPQI2YJ25Omhc
   8=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Gl7gpFD2pCJm/M7MRaZCSy0jIjUuheQt71gIpKzZRJmorny4R1wgXdIXEWx2kMSa9kQ0I+OU9G
 NQzZK/HFxxwJXY6u9HXFz2LCU4pyaCe6qhszmQW+uYfpIywGumUK/u5/xhhm8FIpqA2oAZ6nL4
 1jwQaOfeYXlEqqJrawW9TZI6LGRJ5Y/FXqD3F6oQYBgh5lf4LEw118uw5/1b/uEN7rLbRZRCjM
 HxyNweZqtU3IAURTb1tAaEBFSwWE7aD0+m/av9OPsp8qk8OeIiBAmVkw9FC4JeldeCnhz4Z/rb
 u6E=
X-SBRS: 5.1
X-MesageID: 47376107
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Vun1V6ljqiwuiZcxmBJSZYTwKj/pDfIm3DAbv31ZSRFFG/Fw9/
 re/8jztCWE7Ar5N0tMpTntAsW9qBDnlaKdg7N+AV7KZmCP01dAR7sC0WKN+VLd84CUzIRgPS
 AKSdkaNDUlZmIK7/rH3A==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47376107"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 11/31] build: fix clean targets when subdir-y is used
Date: Thu, 1 Jul 2021 15:09:51 +0100
Message-ID: <20210701141011.785641-12-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

The make variable $(subdir-y) isn't used yet but will be in a
following patch. Anything in $(subdir-y) doesn't to have a '/' as
suffix as we already now it's a directory.

Rework the rules so that it doesn't matter whether there is a '/' or
not. It also mimic more closely to the way Linux's Kbuild descend in
subdirectories.

FORCE phony target isn't needed anymore running clean, so it can be
removed.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/scripts/Makefile.clean | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 53379e6102cc..027c200c0efc 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -12,19 +12,18 @@ include Makefile
 # Figure out what we need to clean from the various variables
 # ==========================================================================
 subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
-              $(filter %/, $(obj-y) $(obj-n) $(obj-))
+              $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
 DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
 .PHONY: clean
-clean:: $(addprefix _clean_, $(subdir-all))
+clean:: $(subdir-all)
 	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
 
 # Descending
 # ---------------------------------------------------------------------------
 
-_clean_%/: FORCE
-	$(MAKE) $(clean) $*
+PHONY += $(subdir-all)
+$(subdir-all):
+	$(MAKE) $(clean) $@
 
-# Force execution of pattern rules (for which PHONY cannot be directly used).
-.PHONY: FORCE
-FORCE:
+.PHONY: $(PHONY)
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148722.274961 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPM-00040O-Lz; Thu, 01 Jul 2021 14:11:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148722.274961; Thu, 01 Jul 2021 14:11:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPM-000406-Hy; Thu, 01 Jul 2021 14:11:12 +0000
Received: by outflank-mailman (input) for mailman id 148722;
 Thu, 01 Jul 2021 14:11:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPL-0005tj-1D
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:11 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c3ababa9-cdb4-485b-a491-5eb323d0578c;
 Thu, 01 Jul 2021 14:10:40 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c3ababa9-cdb4-485b-a491-5eb323d0578c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148640;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=mqaWfEcjARBVnWLFkl8yloMkvtnZhEKKi1UvpQrE8eE=;
  b=V/QnKzyBSD7idx/X9I+01F7g53WK5ZZqgkGaBOJkxYze6WhJztK+wVT8
   4OAfgRSIt1NgODyl3oS435XuEeY/bSC5FyfE0rd9ORpAUPlvzpHO1UkG4
   FymPQRCVQKJXVLRl3kOTppKQxtmDLC3eXVTAECcYgiC1WANA9TA1TK87T
   M=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: QB1JIgJBju7vB+HZgMiwhjOl7rzVaEimuCoCTSoV99oRVVvqXoPWgfEZzlAV0yt9Z/h6VjZ+Xi
 Kg+yqw86il+GmltT/+2CWPXZsFpY+GYXHVxVuSNVDplj1hCAQYJ/iC4+bvuP8OAhXhCxH1rKGS
 t6RM0ZoMFNGYdkxwRKHOEw6pTfxcDzVVNJ2ZRFEjm553cpvVqYRvv7MIAm4O8PJW8K967KPYzv
 D/h/2BlvgGKhRlcNSpw5+d6pM6nqRmrlt+XI4mCRY2Y+SQRTveRw41dd+BlOLBGoaTVWRI7KNj
 atU=
X-SBRS: 5.1
X-MesageID: 47093349
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:GlAQNKqRnYb+k9v+WBdo34saV5oTeYIsimQD101hICG8cqSj+f
 xG+85rsyMc6QxhIE3I9urhBEDtex/hHNtOkOws1NSZLW7bUQmTXeJfBOLZqlWKcUDDH6xmpM
 NdmsBFeaTN5DNB7PoSjjPWLz9Z+qjkzJyV
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47093349"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 15/31] build: move make option changes check earlier
Date: Thu, 1 Jul 2021 15:09:55 +0100
Message-ID: <20210701141011.785641-16-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

And thus avoiding checking for those variable over and over again.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile | 22 ++++++++++++++++++++++
 xen/Rules.mk | 22 ----------------------
 2 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index dae0247067ff..06d7bfab3e2c 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -56,6 +56,28 @@ include scripts/Kbuild.include
 ifneq ($(root-make-done),y)
 # section to run before calling Rules.mk, but only once.
 
+ifneq ($(origin crash_debug),undefined)
+$(error "You must use 'make menuconfig' to enable/disable crash_debug now.")
+endif
+ifeq ($(origin debug),command line)
+$(warning "You must use 'make menuconfig' to enable/disable debug now.")
+endif
+ifneq ($(origin frame_pointer),undefined)
+$(error "You must use 'make menuconfig' to enable/disable frame_pointer now.")
+endif
+ifneq ($(origin kexec),undefined)
+$(error "You must use 'make menuconfig' to enable/disable kexec now.")
+endif
+ifneq ($(origin lock_profile),undefined)
+$(error "You must use 'make menuconfig' to enable/disable lock_profile now.")
+endif
+ifneq ($(origin perfc),undefined)
+$(error "You must use 'make menuconfig' to enable/disable perfc now.")
+endif
+ifneq ($(origin verbose),undefined)
+$(error "You must use 'make menuconfig' to enable/disable verbose now.")
+endif
+
 # Beautify output
 # ---------------------------------------------------------------------------
 #
diff --git a/xen/Rules.mk b/xen/Rules.mk
index ede408efc515..894f2b83a04e 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -9,28 +9,6 @@ include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
 
-ifneq ($(origin crash_debug),undefined)
-$(error "You must use 'make menuconfig' to enable/disable crash_debug now.")
-endif
-ifeq ($(origin debug),command line)
-$(warning "You must use 'make menuconfig' to enable/disable debug now.")
-endif
-ifneq ($(origin frame_pointer),undefined)
-$(error "You must use 'make menuconfig' to enable/disable frame_pointer now.")
-endif
-ifneq ($(origin kexec),undefined)
-$(error "You must use 'make menuconfig' to enable/disable kexec now.")
-endif
-ifneq ($(origin lock_profile),undefined)
-$(error "You must use 'make menuconfig' to enable/disable lock_profile now.")
-endif
-ifneq ($(origin perfc),undefined)
-$(error "You must use 'make menuconfig' to enable/disable perfc now.")
-endif
-ifneq ($(origin verbose),undefined)
-$(error "You must use 'make menuconfig' to enable/disable verbose now.")
-endif
-
 TARGET := $(BASEDIR)/xen
 
 # Note that link order matters!
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148723.274972 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPj-0005br-1X; Thu, 01 Jul 2021 14:11:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148723.274972; Thu, 01 Jul 2021 14:11:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPi-0005bc-UR; Thu, 01 Jul 2021 14:11:34 +0000
Received: by outflank-mailman (input) for mailman id 148723;
 Thu, 01 Jul 2021 14:11:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPQ-0005tj-1B
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:16 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b66e1eab-b8ae-48a5-a179-fd2a76fe5be5;
 Thu, 01 Jul 2021 14:10:42 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b66e1eab-b8ae-48a5-a179-fd2a76fe5be5
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148642;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=fDJGU3FkNLcK/b6b+O2MvcAjqOVoHCERsz8l937Wo3Y=;
  b=RITo4k8GBDsKxs9WtVh7mdRGibRgzUglQn76NioOkl2tPHswO3a4xB67
   pxnkSkcAdU/F4LNBFunTSUti8i4P+ookTmXoNIC1O14BhzR54znyrO3bp
   aMQXTSG1P9nAEcN9wGouZB60jpyjX+BNequ+nQsIFs28xy3R+bMcRL319
   o=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: ME0FSXPCr5qneEQ3bqxXA1FhkzMSN+hx4FUkzBNSr/GN+K+AAw0cdUFgmbQSgJbvKeUq1CR7Hk
 XP6/NlvO0uNNo4KjAZW8lfl8mU9oEXU+ZW2Om8tmobiLYCtgnAQhrC2BQ0HRnGRqJFK08kQaZ0
 4illMf3xHfttdTutn/1CgxAw+GUOBvW6EQtVl+EGQSzFZqnEKwF999DP72dm+Hne07AG3uvdF4
 76A4We69tsBzDNNoujunXbhWQ3yQyDAt2ZXicuUhZ6MlhZtp1LsbNUne6OJ5CoAjg0XCIgCAHZ
 8c8=
X-SBRS: 5.1
X-MesageID: 47093352
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:dtpGEa9pNNDiOdvCFWBuk+DgI+orL9Y04lQ7vn2YSXRuHPBw8P
 re+sjztCWE8Ar5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQiVxehZhOOIqVDd8m/Fh4pgPM
 9bAtFD4bbLbGSS4/yU3ODBKadD/OW6
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47093352"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>
Subject: [XEN PATCH v6 16/31] build: avoid building arm/arm/*/head.o twice
Date: Thu, 1 Jul 2021 15:09:56 +0100
Message-ID: <20210701141011.785641-17-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

head.o is been built twice, once because it is in $(ALL_OBJS) and a
second time because it is in $(extra-y) and thus it is rebuilt when
building "arch/arm/built_in.o".

Fix this by adding a dependency of "head.o" on the directory
"arch/arm/".

Also, we should avoid building object that are in subdirectories, so
move the declaration in there. This doesn't change anything as
"arch/arm/built_in.o" depends on "arch/arm/$subarch/built_in.o" which
depends on $(extra-y), so we still need to depend on
"arch/arm/built_in.o".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/arm/Makefile       | 7 ++++++-
 xen/arch/arm/arm32/Makefile | 1 +
 xen/arch/arm/arm64/Makefile | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 3d0af8ebc93c..cc90d9796e6e 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -64,7 +64,6 @@ obj-$(CONFIG_SBSA_VUART_CONSOLE) += vpl011.o
 obj-y += vsmc.o
 obj-y += vpsci.o
 obj-y += vuart.o
-extra-y += $(TARGET_SUBARCH)/head.o
 
 extra-y += xen.lds
 
@@ -76,6 +75,12 @@ endif
 
 ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
 
+# head.o is built by descending into the sub-directory, depends on the part of
+# $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and build
+# head.o
+$(TARGET_SUBARCH)/head.o: $(BASEDIR)/arch/arm/built_in.o
+$(TARGET_SUBARCH)/head.o: ;
+
 ifdef CONFIG_LIVEPATCH
 all_symbols = --all-symbols
 ifdef CONFIG_FAST_SYMBOL_LOOKUP
diff --git a/xen/arch/arm/arm32/Makefile b/xen/arch/arm/arm32/Makefile
index 96105d238307..3040eabce3ad 100644
--- a/xen/arch/arm/arm32/Makefile
+++ b/xen/arch/arm/arm32/Makefile
@@ -11,3 +11,4 @@ obj-y += smpboot.o
 obj-y += traps.o
 obj-y += vfp.o
 
+extra-y += head.o
diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile
index 40642ff57494..0bb284dedab2 100644
--- a/xen/arch/arm/arm64/Makefile
+++ b/xen/arch/arm/arm64/Makefile
@@ -13,3 +13,5 @@ obj-y += smpboot.o
 obj-y += traps.o
 obj-y += vfp.o
 obj-y += vsysreg.o
+
+extra-y += head.o
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148725.274983 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPl-0005wC-BE; Thu, 01 Jul 2021 14:11:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148725.274983; Thu, 01 Jul 2021 14:11:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPl-0005vu-7S; Thu, 01 Jul 2021 14:11:37 +0000
Received: by outflank-mailman (input) for mailman id 148725;
 Thu, 01 Jul 2021 14:11:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPH-0005F9-KI
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:07 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1af898a2-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:36 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1af898a2-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148635;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=aeF7Kv7O4DhLszrRehfv9wqocK16xFjPyQnD/pOHJvE=;
  b=WL8qr6MQA+x8RdrBCE95NyrnzLnsiXABHSyLSZcVkr4ZyQVlbnW00MBj
   mr8GZpa4Y5hEhb3sckHQLmeChjfBdimVPZlqukINYTrlizr+HilQ3uvvH
   uckt1fprX5Mw8n2Wf9RMOIWBIudUQtCYf3DRyc/535Z+dPo6sKGW8OaEB
   I=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: T+nZT/JsDbYrezwdPi3ALHuuwvixwOuxi/FNoer4yP4Pnaf60DhTs+1eP/80q+GMRH94ovSYSd
 c53NoQcvvGgP1cYWY7Gk9ZYtghKWbTT0Bz/w2BTBZHJHTssm5raqpAOmmFSjrZvDgECmdiD7q4
 CeooBiqXRxbHMni5y2ATcAQCcsvGo+dVnaEvhSuh4dzFHwZXD4zFQl2xJpnJsOWGNWCYUoOPDy
 C7UnsoBV5aomfgtaq9lkm53rQOnE7xwIHj4MnXGbKuVuiQq3D3NdY1toOIVbLqAox7BIYXlbWN
 QKw=
X-SBRS: 5.1
X-MesageID: 47384392
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:GxVxraBj3K7mmOjlHemq55DYdb4zR+YMi2TC1yhKJiC9Ffbo8P
 xG/c5rrCMc5wxxZJhNo7290ey7MBHhHP1OkO0s1NWZPDUO0VHAROoJ0WKh+UyEJ8SXzJ866U
 4KScZD4bPLYWSS9fyKgzWFLw==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47384392"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 12/31] build: use subdir-y in test/Makefile
Date: Thu, 1 Jul 2021 15:09:52 +0100
Message-ID: <20210701141011.785641-13-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This allows Makefile.clean to recurse into livepatch without help.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/test/Makefile | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/xen/test/Makefile b/xen/test/Makefile
index aaa499664396..41e4d7bdb78b 100644
--- a/xen/test/Makefile
+++ b/xen/test/Makefile
@@ -4,15 +4,10 @@ tests all: build
 
 ifneq ($(XEN_TARGET_ARCH),x86_32)
 # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
-SUBDIRS += livepatch
+subdir-y += livepatch
 endif
 
 install build subtree-force-update uninstall: %:
-	set -e; for s in $(SUBDIRS); do \
+	set -e; for s in $(subdir-y); do \
 		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
 	done
-
-clean::
-	set -e; for s in $(SUBDIRS); do \
-		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $@; \
-	done
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148726.274988 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPl-0005zt-PE; Thu, 01 Jul 2021 14:11:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148726.274988; Thu, 01 Jul 2021 14:11:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPl-0005ye-HZ; Thu, 01 Jul 2021 14:11:37 +0000
Received: by outflank-mailman (input) for mailman id 148726;
 Thu, 01 Jul 2021 14:11:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPb-0005F9-Kl
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:27 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 24f283d7-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:10:53 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 24f283d7-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148653;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=HKKAaSAElL9br6IexbYT6ScUQSIaudpvDa7uCaCfemU=;
  b=M4n8wD+ugtQ8U61VBR2T5tZYuntbk2Yggx3x/rh4wKJzmw51/UY3ZMVr
   DQnag2aARDNisgYDuiXlRqmchYC/qZxCkGLv7xq66MSTbha2vhaAd6Z4o
   xmRnJMLpbkQt+uC4p44557eWwBEMQfHsX2ttLzm0uJaZ7P+BwVpaxqs3Q
   U=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: c1g5C7KdNCNvpUtARA66zPxQUkkAdOp4jynR3zRqXL/E2Pj/rbHwP7Iv3z2mgxMIr1fd+laPTd
 sznJd1GPoWlhW+uCcD6lfdVVF2kc70PCQYoUU+loHcP0Sv3QhN/Jq0t1K+E7vH5B/52DqavoRU
 n0Y6ZCnNj0K14ZxTcoZV/I9IO/wxfWKWP1+XE21ON5BRcpDhSrbF4FmoSa8AJFOqTLpGuZ/xJL
 KHQPkjPsQshE0VGdyV0vghnTA2mxqEBTxbjRmGpU7AktCT8b+PbJU+oZACjWuZcM07BJXNCohn
 bRk=
X-SBRS: 5.1
X-MesageID: 47755379
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:a8e4m69QadqLNsZAVJZuk+DgI+orL9Y04lQ7vn2YSXRuHPBw8P
 re+sjztCWE8Ar5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQiVxehZhOOIqVDd8m/Fh4pgPM
 9bAtFD4bbLbGSS4/yU3ODBKadD/OW6
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755379"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 20/31] build: generate "include/xen/compile.h" with filechk
Date: Thu, 1 Jul 2021 15:10:00 +0100
Message-ID: <20210701141011.785641-21-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This will always try regenerate the content of compile.h, but if it
didn't change the file isn't updated.

Also, as it's currently the case, the file isn't regenerated during
`sudo make install` if it exist and does belong to a different user.

Thus, we can remove the target "delete-unfresh-files".
Target $(TARGET) still need a phony dependency, so add FORCE.

This patch imports the macro 'filechk' from Linux v5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile               | 51 +++++++++++++++++++-------------------
 xen/scripts/Kbuild.include | 31 +++++++++++++++++++++++
 2 files changed, 56 insertions(+), 26 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 267ae77aef7a..4c4990a753df 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -351,7 +351,7 @@ _debug:
 	$(OBJDUMP) -D -S $(TARGET)-syms > $(TARGET).s
 
 .PHONY: _clean
-_clean: delete-unfresh-files
+_clean:
 	$(MAKE) -C tools clean
 	$(MAKE) $(clean) include
 	$(MAKE) $(clean) common
@@ -368,7 +368,7 @@ _clean: delete-unfresh-files
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s include/arch-*/asm/asm-offsets.h
-	rm -f .banner
+	rm -f .banner include/xen/compile.h
 
 .PHONY: _distclean
 _distclean: clean
@@ -378,7 +378,7 @@ $(TARGET).gz: $(TARGET)
 	gzip -n -f -9 < $< > $@.new
 	mv $@.new $@
 
-$(TARGET): delete-unfresh-files
+$(TARGET): FORCE
 	$(MAKE) -C tools
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
@@ -391,14 +391,6 @@ $(TARGET): delete-unfresh-files
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/arch-$(TARGET_ARCH)/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
-# drivers/char/console.o contains static banner/compile info. Blow it away.
-# Don't refresh these files during e.g., 'sudo make install'
-.PHONY: delete-unfresh-files
-delete-unfresh-files:
-	@if [ ! -r include/xen/compile.h -o -O include/xen/compile.h ]; then \
-		rm -f include/xen/compile.h; \
-	fi
-
 quiet_cmd_banner = BANNER  $@
 define cmd_banner
     if which figlet >/dev/null 2>&1 ; then \
@@ -413,22 +405,29 @@ endef
 	$(call if_changed,banner)
 targets += .banner
 
-# compile.h contains dynamic build info. Rebuilt on every 'make' invocation.
-include/xen/compile.h: include/xen/compile.h.in .banner
-	@sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
-	    -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
-	    -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
-	    -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
-	    -e 's/@@hostname@@/$(XEN_BUILD_HOST)/g' \
-	    -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head -1)!g' \
-	    -e 's/@@version@@/$(XEN_VERSION)/g' \
-	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
-	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
-	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
-	    < include/xen/compile.h.in > $@.new
+# Don't refresh this files during e.g., 'sudo make install'
+define filechk_compile.h
+    if [ ! -r $@ -o -O $@ ]; then \
+    sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
+        -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
+        -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
+        -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
+        -e 's/@@hostname@@/$(XEN_BUILD_HOST)/g' \
+        -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head -1)!g' \
+        -e 's/@@version@@/$(XEN_VERSION)/g' \
+        -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
+        -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
+        -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
+	< $<; \
+    sed -rf tools/process-banner.sed < .banner; \
+    else \
+	cat $@; \
+    fi
+endef
+
+include/xen/compile.h: include/xen/compile.h.in .banner FORCE
 	@cat .banner
-	@sed -rf tools/process-banner.sed < .banner >> $@.new
-	@mv -f $@.new $@
+	$(call filechk,compile.h)
 
 asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
 	$(CC) $(filter-out -Wa$(comma)% -flto,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 83c7e1457baa..838c9440f35e 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -26,6 +26,37 @@ real-prereqs = $(filter-out $(PHONY), $^)
 # Escape single quote for use in echo statements
 escsq = $(subst $(squote),'\$(squote)',$1)
 
+###
+# Easy method for doing a status message
+       kecho := :
+ quiet_kecho := echo
+silent_kecho := :
+kecho := $($(quiet)kecho)
+
+###
+# filechk is used to check if the content of a generated file is updated.
+# Sample usage:
+#
+# filechk_sample = echo $(KERNELRELEASE)
+# version.h: FORCE
+#	$(call filechk,sample)
+#
+# The rule defined shall write to stdout the content of the new file.
+# The existing file will be compared with the new one.
+# - If no file exist it is created
+# - If the content differ the new file is used
+# - If they are equal no change, and no timestamp update
+define filechk
+	$(Q)set -e;						\
+	mkdir -p $(dir $@);					\
+	trap "rm -f $(dot-target).tmp" EXIT;			\
+	{ $(filechk_$(1)); } > $(dot-target).tmp;		\
+	if [ ! -r $@ ] || ! cmp -s $@ $(dot-target).tmp; then	\
+		$(kecho) '  UPD     $@';			\
+		mv -f $(dot-target).tmp $@;			\
+	fi
+endef
+
 # as-insn: Check whether assembler supports an instruction.
 # Usage: cflags-y += $(call as-insn,CC FLAGS,"insn",option-yes,option-no)
 as-insn = $(if $(shell echo 'void _(void) { asm volatile ( $(2) ); }' \
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:11:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:11:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148728.274994 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPm-00063p-5y; Thu, 01 Jul 2021 14:11:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148728.274994; Thu, 01 Jul 2021 14:11:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxPl-00061q-So; Thu, 01 Jul 2021 14:11:37 +0000
Received: by outflank-mailman (input) for mailman id 148728;
 Thu, 01 Jul 2021 14:11:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPa-0005tj-1k
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:26 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f25f2d19-cf1c-4c7d-836e-4235e74b1443;
 Thu, 01 Jul 2021 14:10:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f25f2d19-cf1c-4c7d-836e-4235e74b1443
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148644;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=PhrWzllsmLHVtsvEGcbavRIVcyx12iALMT+0SLc+Lhs=;
  b=QDp7U/jDvk/GYunNHwWNG1Jbmm5eBEkeRjBJx55HcvbRjAJQSHtIBnxA
   maVvccfueKvfOpapATahyjuSl8Ww9O0K5eM/fBK6aoL1Pn+wObPRooyZe
   7TB/O3mNFSuKl/kcFOEtDIhfNn8VvPQXRtSeY488R4Ja+jPIwSyisb4lG
   4=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: EXPDeoC24V8gZrB7FKnrI6Hlp/UMZnCQskM3aLrQz5qmeKZoJKWdRMQtbs+qoED/o4hvORc5Zo
 1fggobvKcCsk61ozDgD2rc9452v19ekrMDIi988o8VhT6f3a9Sze0DCYqk3BdlK9NjCxECes1Y
 QsqKjq3yHLFPKBKpETAj+5pu9onZx0h24DDHEbN6vGnIl3BL5e2JUz1URQya6xXaFxUNCxKPR3
 WOQCrWldnhbyhv2uvezBX4cfqK/aC++ah8qPIDjBmkcOk4MaH/0EA/xONuiv1FYtjvLqKF1xlv
 zyg=
X-SBRS: 5.1
X-MesageID: 47755362
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:kw4536p8biEpunqYJdebNQgaV5r5eYIsimQD101hICG9E/b4qy
 nAppwmPHPP4wr5eUtQ+uxoW5PvfZq/z/JICOAqVItKOjONhILBFvAG0WKI+VLd8kPFm9K1rp
 0BT0C1YOeAaWSTTq7BkW6F+6xL+qj/zEjy792ut0uECWpRGtxdB8IQMHf8LqWzLDM2fqbQ0/
 Knl7B6T87JQwV0UviG
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755362"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>
Subject: [XEN PATCH v6 17/31] build: convert binfile use to if_changed
Date: Thu, 1 Jul 2021 15:09:57 +0100
Message-ID: <20210701141011.785641-18-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This will allow to detect command line changes and allow to regenerate
the file in that case.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/common/Makefile    | 8 ++++++--
 xen/xsm/flask/Makefile | 8 ++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/xen/common/Makefile b/xen/common/Makefile
index 54de70d42278..93df3178b71f 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -80,8 +80,12 @@ config.gz: $(CONF_FILE)
 
 config_data.o: config.gz
 
-config_data.S: $(BASEDIR)/tools/binfile
-	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
+quiet_cmd_binfile = BINFILE $@
+cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data
+
+config_data.S: $(BASEDIR)/tools/binfile FORCE
+	$(call if_changed,binfile)
+targets += config_data.S
 
 clean::
 	rm -f config_data.S config.gz 2>/dev/null
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 637159ad8276..0ad15cb16606 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -35,8 +35,12 @@ $(subst include/,%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
 obj-bin-$(CONFIG_XSM_FLASK_POLICY) += flask-policy.o
 flask-policy.o: policy.bin
 
-flask-policy.S: $(BASEDIR)/tools/binfile
-	$(SHELL) $(BASEDIR)/tools/binfile -i $@ policy.bin xsm_flask_init_policy
+quiet_cmd_binfile = BINFILE $@
+cmd_binfile = $(SHELL) $< -i $@ policy.bin xsm_flask_init_policy
+
+flask-policy.S: $(BASEDIR)/tools/binfile FORCE
+	$(call if_changed,binfile)
+targets += flask-policy.S
 
 FLASK_BUILD_DIR := $(CURDIR)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:20:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:20:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148754.275016 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxY0-00012d-Uk; Thu, 01 Jul 2021 14:20:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148754.275016; Thu, 01 Jul 2021 14:20:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxY0-00012W-RS; Thu, 01 Jul 2021 14:20:08 +0000
Received: by outflank-mailman (input) for mailman id 148754;
 Thu, 01 Jul 2021 14:20:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=T0jQ=LZ=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1lyxXz-0000yy-PZ
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:20:07 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:7d00::62e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 38eb7b32-fdc7-40c8-9b92-6a2105e133d0;
 Thu, 01 Jul 2021 14:20:03 +0000 (UTC)
Received: from AS8PR04CA0102.eurprd04.prod.outlook.com (2603:10a6:20b:31e::17)
 by HE1PR0802MB2572.eurprd08.prod.outlook.com (2603:10a6:3:db::8) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Thu, 1 Jul
 2021 14:19:58 +0000
Received: from VE1EUR03FT062.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:31e:cafe::dd) by AS8PR04CA0102.outlook.office365.com
 (2603:10a6:20b:31e::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Thu, 1 Jul 2021 14:19:58 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT062.mail.protection.outlook.com (10.152.18.252) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Thu, 1 Jul 2021 14:19:58 +0000
Received: ("Tessian outbound 71a9bd19c2b9:v97");
 Thu, 01 Jul 2021 14:19:57 +0000
Received: from 17edf0b672d7.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 D9F1A26D-C978-49D6-8C77-92BDDDF02473.1; 
 Thu, 01 Jul 2021 14:19:36 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 17edf0b672d7.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 01 Jul 2021 14:19:36 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PAXPR08MB6575.eurprd08.prod.outlook.com (2603:10a6:102:156::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Thu, 1 Jul
 2021 14:19:34 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025%7]) with mapi id 15.20.4264.026; Thu, 1 Jul 2021
 14:19:34 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO2P265CA0361.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a3::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Thu, 1 Jul 2021 14:19:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 38eb7b32-fdc7-40c8-9b92-6a2105e133d0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=afscDBvgHhKc1x2AyQTYXc6zkHtTRdwpHFcfhh+V0Ek=;
 b=P5KAjpJq8xgSYK3l7kIqnfMRT64IvYQDtuoBwoSn4Z64iuRLAmhf9P7hEXhehrFBUGjlSI/rriBToq4oJ6acEu440KoUhcGY+YeZ8CSBD52eYXd5OwaREptPnidbP42fyN2eUtnWlNYhtb2a4CLPFxlTwIsZMfYUpc2vZydu6dQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: b6f5b7374b0fbda0
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=aa6SXLjh1XpdbylyNhV7WEFW4td9/ACt4/04bjfUBHMQE909iJL7EPV0uM3HxvTwpMs6eJfxkCnX7v6oFNE5nTP942O7amT4vkI59A7wSc8WvVR+f2kkz4P6yZpJZJFN6CBJ8Wr0lnzZ3OK4jQslobE3QTC3AnRXxqimMSzPstyyzXfjzJuLqFvoVIsJ87VJ9XVxpNaOgzUzb1tLtyZLO6Ui4EQoXq3kUXTRCzXmYTf6QA+8NORydRd805+Urkj3I3nN8WAtnCjGuA/XQjaSIJA4iMXnyFPvMFIUUgoAyRiXujyR/i9mqzsL/lrIeXKqEFU962+V4kbk1O15c7etBg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=afscDBvgHhKc1x2AyQTYXc6zkHtTRdwpHFcfhh+V0Ek=;
 b=mKCdumG2JH49HjeT8jN2eaQih/2d4zV8N8FaouJW/S/eizzhZi4nfgkW2mpquewnah7j5SsRNvNhEUrrYC3K3P3fdLor+hxmiBgpEXwAyg3X0BNCnpXjIgpB42H62WQhK4t3dFHanRUFF1gMOMMFHkMw+pUZez2IBqDKHQKV8wsXZzuzvMS5X33QbMH9iEbD5xNUpKbemFFS3FsCFpA8TWyLUaf6+3ES4H05DyO1s1DxqlxxkA6TbHn0trv2UsPWrxFz/AWBtFGBOSaDBpGOy6IZKSNasalwjNCYwon7V81f8qPaLR5yVaQvJQawLL2a2KAcHB0+eTFsEHmWcgID8A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=afscDBvgHhKc1x2AyQTYXc6zkHtTRdwpHFcfhh+V0Ek=;
 b=P5KAjpJq8xgSYK3l7kIqnfMRT64IvYQDtuoBwoSn4Z64iuRLAmhf9P7hEXhehrFBUGjlSI/rriBToq4oJ6acEu440KoUhcGY+YeZ8CSBD52eYXd5OwaREptPnidbP42fyN2eUtnWlNYhtb2a4CLPFxlTwIsZMfYUpc2vZydu6dQ=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v6 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2106231530320.24906@sstabellini-ThinkPad-T480s>
Date: Thu, 1 Jul 2021 15:19:28 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <31171081-1007-4B4E-91CC-25EA1041EB58@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-10-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231530320.24906@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO2P265CA0361.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a3::13) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 418a0670-7b2e-4ec5-6ce3-08d93c9b4e64
X-MS-TrafficTypeDiagnostic: PAXPR08MB6575:|HE1PR0802MB2572:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<HE1PR0802MB2572A177328DA730C715BB15E4009@HE1PR0802MB2572.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:2803;OLM:2803;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 L6b6686e6d80gydqVVakp+j2V8WkCGO9vFDQaDPQOlKgZgFmNtJDW3pXd0ImOmUZlCtm774kxqYK0yRWLYxHfvOUw1T9P4xekJiHyaxC2hfWrsdu2mpYBECOWg8jU2YCmf6FbRAhY1ilPDqOfM1BKCxw7AZBIYByF/F5dLmYMB12Mkkpg5qt4/rqt06kg3TMcBsVbfqxfsblMpKqroHYm1pdftNIMKrR+wz77dZpOCpQMVarosfuWPdnldgQIHTvi+u0Ee1mCYfVacOmmnRgDmDUg/FP7vzrmtCzpoWp6VBqUErMIMLz3QSHm8+RcMk7n8AH9eP4/rr71kjLXLI3WU462d4kzyS0ueKsqrOg+4jG+tNJjJKMQHgIkYlZjSHGtiC//c51FFx4ck0VLdLNodsmnTpJUX08vTCjY37g6XdK1x1c2cBG8c85bbLi1+Ygt1NfyUO5KbzIhMWeEj3K0hxq62VEaGk1njp2XUo/qXyAdtl7RGeLkHcfOBYkSa8IaQWZ5+KHx3Y5hAF/LDDTzqv9LdSqyJE3jA2gNzeFuX76Z/mDcEzV1o2EvFpQf/isv88x9F7Tl+IgaSaaRxnh1BcUExLmkYhyrSBl+xgKHcK+MWkRnZHADBWHEq6aXs3ENJ84QAJu2c9te//mVFW1PetU4ydThEqeF1tU7AC8UxlO7ogqORGHOrU1durNo04YyDIf1ytxUBeLZ4QSo5tDTWSlN1aom4vma4ben9tvyUKRte/G5k6YoUDqhu80tQdGudEV3Uy9kDU8RNU+TVMkP9w1sIgKADMLOE6ISUPKnNsDpISjWrlpFPCEAYAF+yPfdlsMTWfZx+viCZg0J/4MaOb7q4v6QmD4ppwt/s7E3W0h+enWf3+Y5+dEQYYFIzty
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(83380400001)(5660300002)(86362001)(966005)(956004)(6512007)(66476007)(498600001)(2616005)(52116002)(33656002)(6486002)(6506007)(6666004)(66556008)(66946007)(4326008)(44832011)(36756003)(8936002)(30864003)(8676002)(53546011)(6916009)(186003)(38100700002)(2906002)(26005)(38350700002)(16526019)(54906003)(21314003)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6575
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT062.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	5ca3f7c7-25f5-4139-8d9f-08d93c9b4025
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	6F4ktY+k2TFmQDQrdc8yh4LmD2GNxT6J6665TYxG572Gk0rxcUAyPnmrVJRfSeKLWo64E8cJFkGeDonbxAiosP1wxwWe2hfZO8g4wusv+VRn6z5E7f1efuoeMCPRP1THP9zFzbCXgBD60YVYA4Y5A3IqHbryJ5LzlDxzOR874+qEWN/oYn/q0GH6dxJq/TwmkCMrwX6wM9D72tYE93Y8DoboLagdP9eP8R6JW8EVPS0Zfh6qcIDdO2Plz5yUXO5kmSsN0RsvGh+2XWY5GDVfdoP3/xFXpB4ohagc1cjzaf66Pi8QGjf7VxBsxqPzXRfGEBwevOXfFMN/X+SlUa37fFJk1sOFlyDCdJBmPtaxGT/BTJRGA+owRp1E6ty3WZNetbvoSxeP42j3/AlC469Tm9vzddLj2i4j0rgMIVY7Mr/vbFaKUN5ns57Bldb/2tLmm/+Tw8c8xqB4b/DjjfVLIDs5j8ReC3W3ChST8t+Z/aQIz4XqQp7tcIbc3CYwDeHRk/CuxHi5OgwqxPk+thDwSViIpV3kZtBLa1cqFr+gGX2CRMjIO3GFDZu738AdF/TZzGnXtxzml6AtrLY/f1T2xzo4xSOSF83Tv2doPNDXprYUrSrJkAypglLWg/l2BodUK/IQfowP6X75BT15rPCSBGJNgFMlmaXduLz3GJssSqrVNeRO7LS6sokeZIpsjqADswSsfZL41LC46vkWksY8IyyFVNcJcCzWIKK/YI6PRQPmsxh79HDsTI7xO7kgf7woS6LTIwDnR62caIjusE/FkX2w8vfFNPRsCpT36Ornji+mT9O97lwzofj3I4uJ7SdfQEdgXKrzKidpwB7U3/S8GYktnU896NPOlvA9TJHQ5l4=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(6512007)(83380400001)(36860700001)(82310400003)(33656002)(36756003)(6486002)(8676002)(336012)(186003)(16526019)(53546011)(6666004)(966005)(6506007)(956004)(2616005)(44832011)(26005)(6862004)(47076005)(70206006)(4326008)(5660300002)(2906002)(8936002)(498600001)(70586007)(86362001)(30864003)(81166007)(356005)(54906003)(21314003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 14:19:58.0908
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 418a0670-7b2e-4ec5-6ce3-08d93c9b4e64
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT062.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2572


Hi Stefano,

> On 24 Jun 2021, at 00:34, Stefano Stabellini <sstabellini@kernel.org> wro=
te:
>=20
> On Mon, 10 May 2021, Luca Fancellu wrote:
>> Modification to include/public/grant_table.h:
>>=20
>> 1) Add doxygen tags to:
>> - Create Grant tables section
>> - include variables in the generated documentation
>> - Used @keepindent/@endkeepindent to enclose comment
>>   section that are indented using spaces, to keep
>>   the indentation.
>> 2) Add .rst file for grant table for Arm64
>=20
> Why only arm64?

This is a mistake, it should be just =E2=80=9CAdd .rst file for grant table=
"

>=20
>=20
>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>> ---
>> v6 changes:
>> - Fix misaligned comment
>> - Moved comments to make them display in the docs
>> - Included more documentation in the docs
>>  (see output here: https://luca.fancellu.gitlab.io/xen-docs/hypercall-in=
terfaces/common/grant_tables.html)
>=20
> It looks much much better. All the info we care about seems to be there.
> The only things that I noticed missing and might be good to keep is the
> small comment about HYPERVISOR_grant_table_op:
>=20
> /* ` enum neg_errnoval
> * ` HYPERVISOR_grant_table_op(enum grant_table_op cmd,
> * `                           void *args,
> * `                           unsigned int count)
> * `
> *
> * @args points to an array of a per-command data structure. The array
> * has @count members

Where do you want me to put this comment in the html page? In the end of th=
e description in the top of the page?

Cheers,

Luca

>=20
> All the changes look good to me.
>=20
>=20
>=20
>> v5 changes:
>> - Move GNTCOPY_* define next to the flags field
>> v4 changes:
>> - Used @keepindent/@endkeepindent doxygen commands
>>  to keep text with spaces indentation.
>> - drop changes to grant_entry_v1 comment, it will
>>  be changed and included in the docs in a future patch
>> - Move docs .rst to "common" folder
>> v3 changes:
>> - removed tags to skip anonymous union/struct
>> - moved back comment pointed out by Jan
>> - moved down defines related to struct gnttab_copy
>>  as pointed out by Jan
>> v2 changes:
>> - Revert back to anonymous union/struct
>> - add doxygen tags to skip anonymous union/struct
>> ---
>> docs/hypercall-interfaces/arm64.rst           |   1 +
>> .../common/grant_tables.rst                   |   9 +
>> docs/xen-doxygen/doxy_input.list              |   1 +
>> xen/include/public/grant_table.h              | 387 +++++++++++-------
>> 4 files changed, 245 insertions(+), 153 deletions(-)
>> create mode 100644 docs/hypercall-interfaces/common/grant_tables.rst
>>=20
>> diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interf=
aces/arm64.rst
>> index 5e701a2adc..cb4c0d13de 100644
>> --- a/docs/hypercall-interfaces/arm64.rst
>> +++ b/docs/hypercall-interfaces/arm64.rst
>> @@ -8,6 +8,7 @@ Starting points
>> .. toctree::
>>    :maxdepth: 2
>>=20
>> +   common/grant_tables
>>=20
>>=20
>> Functions
>> diff --git a/docs/hypercall-interfaces/common/grant_tables.rst b/docs/hy=
percall-interfaces/common/grant_tables.rst
>> new file mode 100644
>> index 0000000000..b8a1ef8759
>> --- /dev/null
>> +++ b/docs/hypercall-interfaces/common/grant_tables.rst
>> @@ -0,0 +1,9 @@
>> +.. SPDX-License-Identifier: CC-BY-4.0
>> +
>> +Grant Tables
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> +
>> +.. doxygengroup:: grant_table
>> +   :project: Xen
>> +   :members:
>> +   :undoc-members:
>> diff --git a/docs/xen-doxygen/doxy_input.list b/docs/xen-doxygen/doxy_in=
put.list
>> index e69de29bb2..233d692fa7 100644
>> --- a/docs/xen-doxygen/doxy_input.list
>> +++ b/docs/xen-doxygen/doxy_input.list
>> @@ -0,0 +1 @@
>> +xen/include/public/grant_table.h
>> diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant=
_table.h
>> index 84b1d26b36..dfa5155927 100644
>> --- a/xen/include/public/grant_table.h
>> +++ b/xen/include/public/grant_table.h
>> @@ -25,15 +25,19 @@
>>  * Copyright (c) 2004, K A Fraser
>>  */
>>=20
>> +/**
>> + * @file
>> + * @brief Interface for granting foreign access to page frames, and rec=
eiving
>> + * page-ownership transfers.
>> + */
>> +
>> #ifndef __XEN_PUBLIC_GRANT_TABLE_H__
>> #define __XEN_PUBLIC_GRANT_TABLE_H__
>>=20
>> #include "xen.h"
>>=20
>> -/*
>> - * `incontents 150 gnttab Grant Tables
>> - *
>> - * Xen's grant tables provide a generic mechanism to memory sharing
>> +/**
>> + * @brief Xen's grant tables provide a generic mechanism to memory shar=
ing
>>  * between domains. This shared memory interface underpins the split
>>  * device drivers for block and network IO.
>>  *
>> @@ -51,13 +55,13 @@
>>  * know the real machine address of a page it is sharing. This makes
>>  * it possible to share memory correctly with domains running in
>>  * fully virtualised memory.
>> - */
>> -
>> -/***********************************
>> + *
>>  * GRANT TABLE REPRESENTATION
>> - */
>> -
>> -/* Some rough guidelines on accessing and updating grant-table entries
>> + *
>> + * A grant table comprises a packed array of grant entries in one or mo=
re
>> + * page frames shared between Xen and a guest.
>> + *
>> + * Some rough guidelines on accessing and updating grant-table entries
>>  * in a concurrency-safe manner. For more information, Linux contains a
>>  * reference implementation for guest OSes (drivers/xen/grant_table.c, s=
ee
>>  * http://git.kernel.org/?p=3Dlinux/kernel/git/torvalds/linux.git;a=3Dbl=
ob;f=3Ddrivers/xen/grant-table.c;hb=3DHEAD
>> @@ -66,6 +70,7 @@
>>  *     compiler barrier will still be required.
>>  *
>>  * Introducing a valid entry into the grant table:
>> + * @keepindent
>>  *  1. Write ent->domid.
>>  *  2. Write ent->frame:
>>  *      GTF_permit_access:   Frame to which access is permitted.
>> @@ -73,20 +78,25 @@
>>  *                           frame, or zero if none.
>>  *  3. Write memory barrier (WMB).
>>  *  4. Write ent->flags, inc. valid type.
>> + * @endkeepindent
>>  *
>>  * Invalidating an unused GTF_permit_access entry:
>> + * @keepindent
>>  *  1. flags =3D ent->flags.
>>  *  2. Observe that !(flags & (GTF_reading|GTF_writing)).
>>  *  3. Check result of SMP-safe CMPXCHG(&ent->flags, flags, 0).
>>  *  NB. No need for WMB as reuse of entry is control-dependent on succes=
s of
>>  *      step 3, and all architectures guarantee ordering of ctrl-dep wri=
tes.
>> + * @endkeepindent
>>  *
>>  * Invalidating an in-use GTF_permit_access entry:
>> + *
>>  *  This cannot be done directly. Request assistance from the domain con=
troller
>>  *  which can set a timeout on the use of a grant entry and take necessa=
ry
>>  *  action. (NB. This is not yet implemented!).
>>  *
>>  * Invalidating an unused GTF_accept_transfer entry:
>> + * @keepindent
>>  *  1. flags =3D ent->flags.
>>  *  2. Observe that !(flags & GTF_transfer_committed). [*]
>>  *  3. Check result of SMP-safe CMPXCHG(&ent->flags, flags, 0).
>> @@ -97,29 +107,32 @@
>>  *      transferred frame is written. It is safe for the guest to spin w=
aiting
>>  *      for this to occur (detect by observing GTF_transfer_completed in
>>  *      ent->flags).
>> + * @endkeepindent
>>  *
>>  * Invalidating a committed GTF_accept_transfer entry:
>>  *  1. Wait for (ent->flags & GTF_transfer_completed).
>>  *
>>  * Changing a GTF_permit_access from writable to read-only:
>> + *
>>  *  Use SMP-safe CMPXCHG to set GTF_readonly, while checking !GTF_writin=
g.
>>  *
>>  * Changing a GTF_permit_access from read-only to writable:
>> + *
>>  *  Use SMP-safe bit-setting instruction.
>> + *
>> + * Data structure fields or defines described below have the following =
tags:
>> + * * [XEN]: This field is written by Xen and read by the sharing guest.
>> + * * [GST]: This field is written by the guest and read by Xen.
>> + *
>> + * @addtogroup grant_table Grant Tables
>> + * @{
>>  */
>>=20
>> -/*
>> +/**
>>  * Reference to a grant entry in a specified domain's grant table.
>>  */
>> typedef uint32_t grant_ref_t;
>>=20
>> -/*
>> - * A grant table comprises a packed array of grant entries in one or mo=
re
>> - * page frames shared between Xen and a guest.
>> - * [XEN]: This field is written by Xen and read by the sharing guest.
>> - * [GST]: This field is written by the guest and read by Xen.
>> - */
>> -
>> /*
>>  * Version 1 of the grant table entry structure is maintained purely
>>  * for backwards compatibility.  New guests should use version 2.
>> @@ -129,15 +142,17 @@ typedef uint32_t grant_ref_t;
>> #define grant_entry_v1_t grant_entry_t
>> #endif
>> struct grant_entry_v1 {
>> -    /* GTF_xxx: various type and flag information.  [XEN,GST] */
>> +    /** GTF_xxx: various type and flag information.  [XEN,GST] */
>>     uint16_t flags;
>> -    /* The domain being granted foreign privileges. [GST] */
>> +    /** The domain being granted foreign privileges. [GST] */
>>     domid_t  domid;
>> -    /*
>> +    /**
>> +     * @keepindent
>>      * GTF_permit_access: GFN that @domid is allowed to map and access. =
[GST]
>>      * GTF_accept_transfer: GFN that @domid is allowed to transfer into.=
 [GST]
>>      * GTF_transfer_completed: MFN whose ownership transferred by @domid
>>      *                         (non-translated guests only). [XEN]
>> +     * @endkeepindent
>>      */
>>     uint32_t frame;
>> };
>> @@ -150,60 +165,99 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
>> #define GNTTAB_RESERVED_CONSOLE        0
>> #define GNTTAB_RESERVED_XENSTORE       1
>>=20
>> -/*
>> - * Type of grant entry.
>> - *  GTF_invalid: This grant entry grants no privileges.
>> - *  GTF_permit_access: Allow @domid to map/access @frame.
>> - *  GTF_accept_transfer: Allow @domid to transfer ownership of one page=
 frame
>> - *                       to this guest. Xen writes the page number to @=
frame.
>> - *  GTF_transitive: Allow @domid to transitively access a subrange of
>> - *                  @trans_grant in @trans_domid.  No mappings are allo=
wed.
>> - */
>> +/** This type of grant entry grants no privileges. */
>> #define GTF_invalid         (0U<<0)
>> +
>> +/** This type of grant entry allow \@domid to map/access \@frame. */
>> #define GTF_permit_access   (1U<<0)
>> +
>> +/**
>> + * This type of grant entry allow \@domid to transfer ownership of one =
pageframe
>> + * to this guest. Xen writes the page number to \@frame.
>> + */
>> #define GTF_accept_transfer (2U<<0)
>> +
>> +/**
>> + * This type of grant entry allow \@domid to transitively access a subr=
ange of
>> + * \@trans_grant in \@trans_domid.  No mappings are allowed.
>> + */
>> #define GTF_transitive      (3U<<0)
>> +
>> #define GTF_type_mask       (3U<<0)
>>=20
>> -/*
>> - * Subflags for GTF_permit_access and GTF_transitive.
>> - *  GTF_readonly: Restrict @domid to read-only mappings and accesses. [=
GST]
>> - *  GTF_reading: Grant entry is currently mapped for reading by @domid.=
 [XEN]
>> - *  GTF_writing: Grant entry is currently mapped for writing by @domid.=
 [XEN]
>> - * Further subflags for GTF_permit_access only.
>> - *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used f=
or
>> - *                             mappings of the grant [GST]
>> - *  GTF_sub_page: Grant access to only a subrange of the page.  @domid
>> - *                will only be allowed to copy from the grant, and not
>> - *                map it. [GST]
>> +/**
>> + * @def GTF_readonly
>> + * Subflag for GTF_permit_access and GTF_transitive: Restrict \@domid t=
o
>> + * read-only mappings and accesses. [GST]
>>  */
>> #define _GTF_readonly       (2)
>> #define GTF_readonly        (1U<<_GTF_readonly)
>> +
>> +/**
>> + * @def GTF_reading
>> + * Subflag for GTF_permit_access and GTF_transitive: Grant entry is cur=
rently
>> + * mapped for reading by \@domid. [XEN]
>> + */
>> #define _GTF_reading        (3)
>> #define GTF_reading         (1U<<_GTF_reading)
>> +
>> +/**
>> + * @def GTF_writing
>> + * Subflag for GTF_permit_access and GTF_transitive: Grant entry is cur=
rently
>> + * mapped for writing by \@domid. [XEN]
>> + */
>> #define _GTF_writing        (4)
>> #define GTF_writing         (1U<<_GTF_writing)
>> +
>> +/**
>> + * @def GTF_PWT
>> + * Subflag for GTF_permit_access only: (x86) cache attribute flags to b=
e used
>> + * for mappings of the grant [GST]
>> + */
>> #define _GTF_PWT            (5)
>> #define GTF_PWT             (1U<<_GTF_PWT)
>> +
>> +/**
>> + * @def GTF_PCD
>> + * Subflag for GTF_permit_access only: (x86) cache attribute flags to b=
e used
>> + * for mappings of the grant [GST]
>> + */
>> #define _GTF_PCD            (6)
>> #define GTF_PCD             (1U<<_GTF_PCD)
>> +
>> +/**
>> + * @def GTF_PAT
>> + * Subflag for GTF_permit_access only: (x86) cache attribute flags to b=
e used
>> + * for mappings of the grant [GST]
>> + */
>> #define _GTF_PAT            (7)
>> #define GTF_PAT             (1U<<_GTF_PAT)
>> +
>> +/**
>> + * @def GTF_sub_page
>> + * Subflag for GTF_permit_access only: Grant access to only a subrange =
of the
>> + * page. \@domid will only be allowed to copy from the grant, and not m=
ap it.
>> + * [GST]
>> + */
>> #define _GTF_sub_page       (8)
>> #define GTF_sub_page        (1U<<_GTF_sub_page)
>>=20
>> -/*
>> - * Subflags for GTF_accept_transfer:
>> - *  GTF_transfer_committed: Xen sets this flag to indicate that it is c=
ommitted
>> - *      to transferring ownership of a page frame. When a guest sees th=
is flag
>> - *      it must /not/ modify the grant entry until GTF_transfer_complet=
ed is
>> - *      set by Xen.
>> - *  GTF_transfer_completed: It is safe for the guest to spin-wait on th=
is flag
>> - *      after reading GTF_transfer_committed. Xen will always write the=
 frame
>> - *      address, followed by ORing this flag, in a timely manner.
>> +/**
>> + * @def GTF_transfer_committed
>> + * Subflag for GTF_accept_transfer: Xen sets this flag to indicate that=
 it is
>> + * committed to transferring ownership of a page frame. When a guest se=
es this
>> + * flag it must /not/ modify the grant entry until GTF_transfer_complet=
ed is
>> + * set by Xen.
>>  */
>> #define _GTF_transfer_committed (2)
>> #define GTF_transfer_committed  (1U<<_GTF_transfer_committed)
>> +
>> +/**
>> + * @def GTF_transfer_completed
>> + * Subflag for GTF_accept_transfer: It is safe for the guest to spin-wa=
it on
>> + * this flag after reading GTF_transfer_committed. Xen will always writ=
e the
>> + * frame address, followed by ORing this flag, in a timely manner.
>> + */
>> #define _GTF_transfer_completed (3)
>> #define GTF_transfer_completed  (1U<<_GTF_transfer_completed)
>>=20
>> @@ -228,17 +282,17 @@ struct grant_entry_header {
>> };
>> typedef struct grant_entry_header grant_entry_header_t;
>>=20
>> -/*
>> +/**
>>  * Version 2 of the grant entry structure.
>>  */
>> union grant_entry_v2 {
>>     grant_entry_header_t hdr;
>>=20
>> -    /*
>> +    /**
>>      * This member is used for V1-style full page grants, where either:
>>      *
>> -     * -- hdr.type is GTF_accept_transfer, or
>> -     * -- hdr.type is GTF_permit_access and GTF_sub_page is not set.
>> +     * * hdr.type is GTF_accept_transfer, or
>> +     * * hdr.type is GTF_permit_access and GTF_sub_page is not set.
>>      *
>>      * In that case, the frame field has the same semantics as the
>>      * field of the same name in the V1 entry structure.
>> @@ -249,10 +303,10 @@ union grant_entry_v2 {
>>         uint64_t frame;
>>     } full_page;
>>=20
>> -    /*
>> +    /**
>>      * If the grant type is GTF_grant_access and GTF_sub_page is set,
>> -     * @domid is allowed to access bytes [@page_off,@page_off+@length)
>> -     * in frame @frame.
>> +     * \@domid is allowed to access bytes [\@page_off,\@page_off+\@leng=
th)
>> +     * in frame \@frame.
>>      */
>>     struct {
>>         grant_entry_header_t hdr;
>> @@ -261,9 +315,9 @@ union grant_entry_v2 {
>>         uint64_t frame;
>>     } sub_page;
>>=20
>> -    /*
>> -     * If the grant is GTF_transitive, @domid is allowed to use the
>> -     * grant @gref in domain @trans_domid, as if it was the local
>> +    /**
>> +     * If the grant is GTF_transitive, \@domid is allowed to use the
>> +     * grant \@gref in domain \@trans_domid, as if it was the local
>>      * domain.  Obviously, the transitive access must be compatible
>>      * with the original grant.
>>      *
>> @@ -277,7 +331,7 @@ union grant_entry_v2 {
>>         grant_ref_t gref;
>>     } transitive;
>>=20
>> -    uint32_t __spacer[4]; /* Pad to a power of two */
>> +    uint32_t __spacer[4]; /**< Pad to a power of two */
>> };
>> typedef union grant_entry_v2 grant_entry_v2_t;
>>=20
>> @@ -317,24 +371,25 @@ typedef uint16_t grant_status_t;
>> #endif /* __XEN_INTERFACE_VERSION__ */
>> /* ` } */
>>=20
>> -/*
>> +/**
>>  * Handle to track a mapping created via a grant reference.
>>  */
>> typedef uint32_t grant_handle_t;
>>=20
>> -/*
>> - * GNTTABOP_map_grant_ref: Map the grant entry (<dom>,<ref>) for access
>> - * by devices and/or host CPUs. If successful, <handle> is a tracking n=
umber
>> - * that must be presented later to destroy the mapping(s). On error, <s=
tatus>
>> +/**
>> + * GNTTABOP_map_grant_ref: Map the grant entry (\@dom,\@ref) for access
>> + * by devices and/or host CPUs. If successful, \@handle is a tracking n=
umber
>> + * that must be presented later to destroy the mapping(s). On error, \@=
status
>>  * is a negative status code.
>> + *
>>  * NOTES:
>> - *  1. If GNTMAP_device_map is specified then <dev_bus_addr> is the add=
ress
>> + *  1. If GNTMAP_device_map is specified then \@dev_bus_addr is the add=
ress
>>  *     via which I/O devices may access the granted frame.
>>  *  2. If GNTMAP_host_map is specified then a mapping will be added at
>>  *     either a host virtual address in the current address space, or at
>>  *     a PTE at the specified machine address.  The type of mapping to
>>  *     perform is selected through the GNTMAP_contains_pte flag, and the
>> - *     address is specified in <host_addr>.
>> + *     address is specified in \@host_addr.
>>  *  3. Mappings should only be destroyed via GNTTABOP_unmap_grant_ref. I=
f a
>>  *     host mapping is destroyed by other means then it is *NOT* guarant=
eed
>>  *     to be accounted to the correct grant reference!
>> @@ -342,25 +397,26 @@ typedef uint32_t grant_handle_t;
>> struct gnttab_map_grant_ref {
>>     /* IN parameters. */
>>     uint64_t host_addr;
>> -    uint32_t flags;               /* GNTMAP_* */
>> +    uint32_t flags;               /**< GNTMAP_* */
>>     grant_ref_t ref;
>>     domid_t  dom;
>>     /* OUT parameters. */
>> -    int16_t  status;              /* =3D> enum grant_status */
>> +    int16_t  status;              /**< GNTST_* status code */
>>     grant_handle_t handle;
>>     uint64_t dev_bus_addr;
>> };
>> typedef struct gnttab_map_grant_ref gnttab_map_grant_ref_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_map_grant_ref_t);
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_unmap_grant_ref: Destroy one or more grant-reference mapping=
s
>> - * tracked by <handle>. If <host_addr> or <dev_bus_addr> is zero, that
>> + * tracked by \@handle. If \@host_addr or \@dev_bus_addr is zero, that
>>  * field is ignored. If non-zero, they must refer to a device/host mappi=
ng
>> - * that is tracked by <handle>
>> + * that is tracked by \@handle
>> + *
>>  * NOTES:
>>  *  1. The call may fail in an undefined manner if either mapping is not
>> - *     tracked by <handle>.
>> + *     tracked by \@handle.
>>  *  3. After executing a batch of unmaps, it is guaranteed that no stale
>>  *     mappings will remain in the device or host TLBs.
>>  */
>> @@ -370,18 +426,19 @@ struct gnttab_unmap_grant_ref {
>>     uint64_t dev_bus_addr;
>>     grant_handle_t handle;
>>     /* OUT parameters. */
>> -    int16_t  status;              /* =3D> enum grant_status */
>> +    int16_t  status;              /**< GNTST_* status code */
>> };
>> typedef struct gnttab_unmap_grant_ref gnttab_unmap_grant_ref_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t);
>>=20
>> -/*
>> - * GNTTABOP_setup_table: Set up a grant table for <dom> comprising at l=
east
>> - * <nr_frames> pages. The frame addresses are written to the <frame_lis=
t>.
>> - * Only <nr_frames> addresses are written, even if the table is larger.
>> +/**
>> + * GNTTABOP_setup_table: Set up a grant table for \@dom comprising at l=
east
>> + * \@nr_frames pages. The frame addresses are written to the \@frame_li=
st.
>> + * Only \@nr_frames addresses are written, even if the table is larger.
>> + *
>>  * NOTES:
>> - *  1. <dom> may be specified as DOMID_SELF.
>> - *  2. Only a sufficiently-privileged domain may specify <dom> !=3D DOM=
ID_SELF.
>> + *  1. \@dom may be specified as DOMID_SELF.
>> + *  2. Only a sufficiently-privileged domain may specify \@dom !=3D DOM=
ID_SELF.
>>  *  3. Xen may not support more than a single grant-table page per domai=
n.
>>  */
>> struct gnttab_setup_table {
>> @@ -389,7 +446,7 @@ struct gnttab_setup_table {
>>     domid_t  dom;
>>     uint32_t nr_frames;
>>     /* OUT parameters. */
>> -    int16_t  status;              /* =3D> enum grant_status */
>> +    int16_t  status;              /**< GNTST_* status code */
>> #if __XEN_INTERFACE_VERSION__ < 0x00040300
>>     XEN_GUEST_HANDLE(ulong) frame_list;
>> #else
>> @@ -399,7 +456,7 @@ struct gnttab_setup_table {
>> typedef struct gnttab_setup_table gnttab_setup_table_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_setup_table_t);
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_dump_table: Dump the contents of the grant table to the
>>  * xen console. Debugging use only.
>>  */
>> @@ -407,14 +464,14 @@ struct gnttab_dump_table {
>>     /* IN parameters. */
>>     domid_t dom;
>>     /* OUT parameters. */
>> -    int16_t status;               /* =3D> enum grant_status */
>> +    int16_t status;               /**< GNTST_* status code */
>> };
>> typedef struct gnttab_dump_table gnttab_dump_table_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_dump_table_t);
>>=20
>> -/*
>> - * GNTTABOP_transfer: Transfer <frame> to a foreign domain. The foreign=
 domain
>> - * has previously registered its interest in the transfer via <domid, r=
ef>.
>> +/**
>> + * GNTTABOP_transfer: Transfer \@frame to a foreign domain. The foreign=
 domain
>> + * has previously registered its interest in the transfer via \@domid, =
\@ref.
>>  *
>>  * Note that, even if the transfer fails, the specified page no longer b=
elongs
>>  * to the calling domain *unless* the error is GNTST_bad_page.
>> @@ -427,13 +484,13 @@ struct gnttab_transfer {
>>     domid_t       domid;
>>     grant_ref_t   ref;
>>     /* OUT parameters. */
>> -    int16_t       status;
>> +    int16_t       status;               /**< GNTST_* status code */
>> };
>> typedef struct gnttab_transfer gnttab_transfer_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_transfer_t);
>>=20
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_copy: Hypervisor based copy
>>  * source and destinations can be eithers MFNs or, for foreign domains,
>>  * grant references. the foreign domain has to grant read/write access
>> @@ -451,11 +508,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_transfer_t);
>>  * bytes to be copied.
>>  */
>>=20
>> -#define _GNTCOPY_source_gref      (0)
>> -#define GNTCOPY_source_gref       (1<<_GNTCOPY_source_gref)
>> -#define _GNTCOPY_dest_gref        (1)
>> -#define GNTCOPY_dest_gref         (1<<_GNTCOPY_dest_gref)
>> -
>> struct gnttab_copy {
>>     /* IN parameters. */
>>     struct gnttab_copy_ptr {
>> @@ -467,19 +519,24 @@ struct gnttab_copy {
>>         uint16_t offset;
>>     } source, dest;
>>     uint16_t      len;
>> -    uint16_t      flags;          /* GNTCOPY_* */
>> +    uint16_t      flags;          /**< GNTCOPY_* */
>> +#define _GNTCOPY_source_gref      (0)
>> +#define GNTCOPY_source_gref       (1<<_GNTCOPY_source_gref)
>> +#define _GNTCOPY_dest_gref        (1)
>> +#define GNTCOPY_dest_gref         (1<<_GNTCOPY_dest_gref)
>>     /* OUT parameters. */
>>     int16_t       status;
>> };
>> typedef struct gnttab_copy  gnttab_copy_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_copy_t);
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_query_size: Query the current and maximum sizes of the share=
d
>>  * grant table.
>> + *
>>  * NOTES:
>> - *  1. <dom> may be specified as DOMID_SELF.
>> - *  2. Only a sufficiently-privileged domain may specify <dom> !=3D DOM=
ID_SELF.
>> + *  1. \@dom may be specified as DOMID_SELF.
>> + *  2. Only a sufficiently-privileged domain may specify \@dom !=3D DOM=
ID_SELF.
>>  */
>> struct gnttab_query_size {
>>     /* IN parameters. */
>> @@ -487,19 +544,20 @@ struct gnttab_query_size {
>>     /* OUT parameters. */
>>     uint32_t nr_frames;
>>     uint32_t max_nr_frames;
>> -    int16_t  status;              /* =3D> enum grant_status */
>> +    int16_t  status;              /**< GNTST_* status code */
>> };
>> typedef struct gnttab_query_size gnttab_query_size_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_query_size_t);
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_unmap_and_replace: Destroy one or more grant-reference mappi=
ngs
>> - * tracked by <handle> but atomically replace the page table entry with=
 one
>> - * pointing to the machine address under <new_addr>.  <new_addr> will b=
e
>> + * tracked by \@handle but atomically replace the page table entry with=
 one
>> + * pointing to the machine address under \@new_addr. \@new_addr will be
>>  * redirected to the null entry.
>> + *
>>  * NOTES:
>>  *  1. The call may fail in an undefined manner if either mapping is not
>> - *     tracked by <handle>.
>> + *     tracked by \@handle.
>>  *  2. After executing a batch of unmaps, it is guaranteed that no stale
>>  *     mappings will remain in the device or host TLBs.
>>  */
>> @@ -509,13 +567,13 @@ struct gnttab_unmap_and_replace {
>>     uint64_t new_addr;
>>     grant_handle_t handle;
>>     /* OUT parameters. */
>> -    int16_t  status;              /* =3D> enum grant_status */
>> +    int16_t  status;              /**< GNTST_* status code */
>> };
>> typedef struct gnttab_unmap_and_replace gnttab_unmap_and_replace_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t);
>>=20
>> #if __XEN_INTERFACE_VERSION__ >=3D 0x0003020a
>> -/*
>> +/**
>>  * GNTTABOP_set_version: Request a particular version of the grant
>>  * table shared table structure.  This operation may be used to toggle
>>  * between different versions, but must be performed while no grants
>> @@ -529,32 +587,33 @@ typedef struct gnttab_set_version gnttab_set_versi=
on_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_set_version_t);
>>=20
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_get_status_frames: Get the list of frames used to store gran=
t
>> - * status for <dom>. In grant format version 2, the status is separated
>> + * status for \@dom. In grant format version 2, the status is separated
>>  * from the other shared grant fields to allow more efficient synchroniz=
ation
>>  * using barriers instead of atomic cmpexch operations.
>> - * <nr_frames> specify the size of vector <frame_list>.
>> - * The frame addresses are returned in the <frame_list>.
>> - * Only <nr_frames> addresses are returned, even if the table is larger=
.
>> + * \@nr_frames specify the size of vector \@frame_list.
>> + * The frame addresses are returned in the \@frame_list.
>> + * Only \@nr_frames addresses are returned, even if the table is larger=
.
>> + *
>>  * NOTES:
>> - *  1. <dom> may be specified as DOMID_SELF.
>> - *  2. Only a sufficiently-privileged domain may specify <dom> !=3D DOM=
ID_SELF.
>> + *  1. \@dom may be specified as DOMID_SELF.
>> + *  2. Only a sufficiently-privileged domain may specify \@dom !=3D DOM=
ID_SELF.
>>  */
>> struct gnttab_get_status_frames {
>>     /* IN parameters. */
>>     uint32_t nr_frames;
>>     domid_t  dom;
>>     /* OUT parameters. */
>> -    int16_t  status;              /* =3D> enum grant_status */
>> +    int16_t  status;              /**< GNTST_* status code */
>>     XEN_GUEST_HANDLE(uint64_t) frame_list;
>> };
>> typedef struct gnttab_get_status_frames gnttab_get_status_frames_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_get_status_frames_t);
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_get_version: Get the grant table version which is in
>> - * effect for domain <dom>.
>> + * effect for domain \@dom.
>>  */
>> struct gnttab_get_version {
>>     /* IN parameters */
>> @@ -566,7 +625,7 @@ struct gnttab_get_version {
>> typedef struct gnttab_get_version gnttab_get_version_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_get_version_t);
>>=20
>> -/*
>> +/**
>>  * GNTTABOP_swap_grant_ref: Swap the contents of two grant entries.
>>  */
>> struct gnttab_swap_grant_ref {
>> @@ -574,12 +633,12 @@ struct gnttab_swap_grant_ref {
>>     grant_ref_t ref_a;
>>     grant_ref_t ref_b;
>>     /* OUT parameters */
>> -    int16_t status;             /* =3D> enum grant_status */
>> +    int16_t status;             /**< GNTST_* status code */
>> };
>> typedef struct gnttab_swap_grant_ref gnttab_swap_grant_ref_t;
>> DEFINE_XEN_GUEST_HANDLE(gnttab_swap_grant_ref_t);
>>=20
>> -/*
>> +/**
>>  * Issue one or more cache maintenance operations on a portion of a
>>  * page granted to the calling domain by a foreign domain.
>>  */
>> @@ -588,8 +647,8 @@ struct gnttab_cache_flush {
>>         uint64_t dev_bus_addr;
>>         grant_ref_t ref;
>>     } a;
>> -    uint16_t offset; /* offset from start of grant */
>> -    uint16_t length; /* size within the grant */
>> +    uint16_t offset; /**< offset from start of grant */
>> +    uint16_t length; /**< size within the grant */
>> #define GNTTAB_CACHE_CLEAN          (1u<<0)
>> #define GNTTAB_CACHE_INVAL          (1u<<1)
>> #define GNTTAB_CACHE_SOURCE_GREF    (1u<<31)
>> @@ -600,40 +659,60 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
>>=20
>> #endif /* __XEN_INTERFACE_VERSION__ */
>>=20
>> -/*
>> - * Bitfield values for gnttab_map_grant_ref.flags.
>> +/**
>> + * @def GNTMAP_device_map
>> + * Bitfield value for gnttab_map_grant_ref.flags: Map the grant entry f=
or
>> + * access by I/O devices.
>>  */
>> - /* Map the grant entry for access by I/O devices. */
>> #define _GNTMAP_device_map      (0)
>> #define GNTMAP_device_map       (1<<_GNTMAP_device_map)
>> - /* Map the grant entry for access by host CPUs. */
>> +
>> +/**
>> + * @def GNTMAP_host_map
>> + * Bitfield value for gnttab_map_grant_ref.flags: Map the grant entry f=
or
>> + * access by host CPUs.
>> + */
>> #define _GNTMAP_host_map        (1)
>> #define GNTMAP_host_map         (1<<_GNTMAP_host_map)
>> - /* Accesses to the granted frame will be restricted to read-only acces=
s. */
>> +
>> +/**
>> + * @def GNTMAP_readonly
>> + * Bitfield value for gnttab_map_grant_ref.flags: Accesses to the grant=
ed frame
>> + * will be restricted to read-only access.
>> + */
>> #define _GNTMAP_readonly        (2)
>> #define GNTMAP_readonly         (1<<_GNTMAP_readonly)
>> - /*
>> -  * GNTMAP_host_map subflag:
>> -  *  0 =3D> The host mapping is usable only by the guest OS.
>> -  *  1 =3D> The host mapping is usable by guest OS + current applicatio=
n.
>> -  */
>> +
>> +/**
>> + * @def GNTMAP_application_map
>> + * Bitfield value for gnttab_map_grant_ref.flags.
>> + *
>> + * GNTMAP_host_map subflag:
>> + * * 0 =3D> The host mapping is usable only by the guest OS.
>> + * * 1 =3D> The host mapping is usable by guest OS + current applicatio=
n.
>> + */
>> #define _GNTMAP_application_map (3)
>> #define GNTMAP_application_map  (1<<_GNTMAP_application_map)
>>=20
>> - /*
>> -  * GNTMAP_contains_pte subflag:
>> -  *  0 =3D> This map request contains a host virtual address.
>> -  *  1 =3D> This map request contains the machine addess of the PTE to =
update.
>> -  */
>> +/**
>> + * @def GNTMAP_contains_pte
>> + * Bitfield value for gnttab_map_grant_ref.flags.
>> + *
>> + * GNTMAP_contains_pte subflag:
>> + * * 0 =3D> This map request contains a host virtual address.
>> + * * 1 =3D> This map request contains the machine addess of the PTE to =
update.
>> + */
>> #define _GNTMAP_contains_pte    (4)
>> #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
>>=20
>> #define _GNTMAP_can_fail        (5)
>> #define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
>>=20
>> -/*
>> - * Bits to be placed in guest kernel available PTE bits (architecture
>> - * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set)=
.
>> +/**
>> + * @def GNTMAP_guest_avail_mask
>> + * Bitfield value for gnttab_map_grant_ref.flags: Bits to be placed in =
guest
>> + * kernel available PTE bits (architecture dependent; only supported wh=
en
>> + * XENFEAT_gnttab_map_avail_bits is set).
>>  */
>> #define _GNTMAP_guest_avail0    (16)
>> #define GNTMAP_guest_avail_mask ((uint32_t)~0 << _GNTMAP_guest_avail0)
>> @@ -641,21 +720,19 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
>> /*
>>  * Values for error status returns. All errors are -ve.
>>  */
>> -/* ` enum grant_status { */
>> -#define GNTST_okay             (0)  /* Normal return.                  =
      */
>> -#define GNTST_general_error    (-1) /* General undefined error.        =
      */
>> -#define GNTST_bad_domain       (-2) /* Unrecognsed domain id.          =
      */
>> -#define GNTST_bad_gntref       (-3) /* Unrecognised or inappropriate gn=
tref. */
>> -#define GNTST_bad_handle       (-4) /* Unrecognised or inappropriate ha=
ndle. */
>> -#define GNTST_bad_virt_addr    (-5) /* Inappropriate virtual address to=
 map. */
>> -#define GNTST_bad_dev_addr     (-6) /* Inappropriate device address to =
unmap.*/
>> -#define GNTST_no_device_space  (-7) /* Out of space in I/O MMU.        =
      */
>> -#define GNTST_permission_denied (-8) /* Not enough privilege for operat=
ion.  */
>> -#define GNTST_bad_page         (-9) /* Specified page was invalid for o=
p.    */
>> -#define GNTST_bad_copy_arg    (-10) /* copy arguments cross page bounda=
ry.   */
>> -#define GNTST_address_too_big (-11) /* transfer page address too large.=
      */
>> -#define GNTST_eagain          (-12) /* Operation not done; try again.  =
      */
>> -/* ` } */
>> +#define GNTST_okay             (0)  /**< Normal return.                =
        */
>> +#define GNTST_general_error    (-1) /**< General undefined error.      =
        */
>> +#define GNTST_bad_domain       (-2) /**< Unrecognsed domain id.        =
        */
>> +#define GNTST_bad_gntref       (-3) /**< Unrecognised or inappropriate =
gntref. */
>> +#define GNTST_bad_handle       (-4) /**< Unrecognised or inappropriate =
handle. */
>> +#define GNTST_bad_virt_addr    (-5) /**< Inappropriate virtual address =
to map. */
>> +#define GNTST_bad_dev_addr     (-6) /**< Inappropriate device address t=
o unmap.*/
>> +#define GNTST_no_device_space  (-7) /**< Out of space in I/O MMU.      =
        */
>> +#define GNTST_permission_denied (-8) /**< Not enough privilege for oper=
ation.  */
>> +#define GNTST_bad_page         (-9) /**< Specified page was invalid for=
 op.    */
>> +#define GNTST_bad_copy_arg    (-10) /**< copy arguments cross page boun=
dary.   */
>> +#define GNTST_address_too_big (-11) /**< transfer page address too larg=
e.      */
>> +#define GNTST_eagain          (-12) /**< Operation not done; try again.=
        */
>>=20
>> #define GNTTABOP_error_msgs {                   \
>>     "okay",                                     \
>> @@ -673,6 +750,10 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
>>     "operation not done; try again"             \
>> }
>>=20
>> +/**
>> + * @}
>> + */
>> +
>> #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
>>=20
>> /*
>> --=20
>> 2.17.1
>>=20



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148759.275027 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZS-0001hQ-FV; Thu, 01 Jul 2021 14:21:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148759.275027; Thu, 01 Jul 2021 14:21:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZS-0001hE-As; Thu, 01 Jul 2021 14:21:38 +0000
Received: by outflank-mailman (input) for mailman id 148759;
 Thu, 01 Jul 2021 14:21:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxRI-0005F9-Nd
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:13:12 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3d926230-da76-11eb-8329-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:34 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3d926230-da76-11eb-8329-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148693;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=/FUmArmLEUIthNAppG6akBLHO3pJX78uJKbRrb4d2EI=;
  b=P76S3OAdIgeozLRn43x2LzFcy8Ykwb3pT6tREUw+i1f1TRhCXgKi11FT
   luKAOnUWzXjeZjs2QbBcF45Gxdk/ZSL7b9+Lfw/E6OkUHp8uObbADquIh
   jx7vDYEbB09TYP9Uu1IyVSWGRHdnwGDDR44OJm47lkvi2ZQvyxW03rukc
   o=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: D09gFO1M0EXikMGbZhcoxD0O0fKSoGY0TXjcb8GYPlxlc7KacMjEeVYluQbadkrpN2DOgsrbKo
 kL7I5nHQgmOEPSmDh+o9f87QkmVlDS7u0Q0vLW8ZTpt41vNJI9eMyqhzF5PY63z94yrlb+81/z
 +WBED6UtQSVx+LZf/CMufdk+sCJSLL6IUdlieCOvKpBKM/UfDhxp8rGaAYCc1ttHDOouiD/33r
 6GXm+WARdUc7qI+zzKkwBOiChCl1glM4g44nIXHQ2ppr1+4dASBCq1HcN2Ncz2Bt93f387BIzM
 5Oo=
X-SBRS: 5.1
X-MesageID: 47755478
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:amjLI675VHwyieoSTwPXwM7XdLJyesId70hD6qhwISY7TiX+rb
 HIoB17726MtN9/YhAdcLy7VZVoBEmsl6KdgrNhWYtKPjOHhILAFugLhuHfKn/bakjDH4ZmpM
 FdmsNFZuEYY2IXsS+D2njaL+od
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755478"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 26/31] build: clean common temporary files from root makefile
Date: Thu, 1 Jul 2021 15:10:06 +0100
Message-ID: <20210701141011.785641-27-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile               | 1 +
 xen/scripts/Makefile.clean | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index fd002ecd52d0..6aac68750b4d 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -378,6 +378,7 @@ _clean:
 	$(MAKE) $(clean) test
 	$(MAKE) $(kconfig) clean
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
+		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s include/arch-*/asm/asm-offsets.h
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 027c200c0efc..b6df9e861e6e 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -14,10 +14,8 @@ include Makefile
 subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
               $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
-DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
 .PHONY: clean
 clean:: $(subdir-all)
-	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
 
 # Descending
 # ---------------------------------------------------------------------------
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148771.275037 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZU-0001zi-NN; Thu, 01 Jul 2021 14:21:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148771.275037; Thu, 01 Jul 2021 14:21:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZU-0001zW-Jj; Thu, 01 Jul 2021 14:21:40 +0000
Received: by outflank-mailman (input) for mailman id 148771;
 Thu, 01 Jul 2021 14:21:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQU-0005F9-Lo
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:22 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2de16752-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:08 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2de16752-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148668;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=TiF+907ZnxR32g7xJeKX/Svu6O0iCgKs/yul2z4hMQ4=;
  b=CBuk5V9VccZamEJRTJymR4scMjHj2aHBEGnBFK1CV3SwhGe0CVVlznaM
   tMnVBtp6UQQsOx+sDgA9tjRz2JlIbGmQPggyF4+gN02Z0gcZ5eaKE2gEH
   4bF2bG3KIZ+OLNmOPk+dTNHF61ZToPFEWpRHpcnLhB+vgslUUaAv5Azgv
   E=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: u+Xbk3Z39cB6nUXv0SAaMfHYUNdz/kdlSAuw+iemQtkxF3Ev3vKIJ+Vo9jqvmoOcBa2Oc1nFm3
 sT/lZFhcqIxiIorpvbR3mvcEpzOB2seiMC8tD0yCU91aLbxCZGxHWBk1H30yQIpD1V4TgYJBuR
 NF58oOEGPFNOzEMMezFevA2hGyGi0okItpnwQtabOKIkSkKjomxpXK3BTsz/6jvhyC0HEW3qXK
 Zo3JAsMo6+8Zeb1nSaICus+kpeVysCAdZ+lvpCEFADZQ4ubiI7OfBl497DXr4EYmwY7uTG30Hm
 y4I=
X-SBRS: 5.1
X-MesageID: 47093433
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:DOVDqq1EypBCfQJyd5Ir0AqjBHYkLtp133Aq2lEZdPU0SKGlfq
 GV7ZEmPHrP4gr5N0tOpTntAse9qBDnhPxICOsqXYtKNTOO0AeVxelZhrcKqAeQeBEWmNQ96U
 9hGZIOcuEZDzJB/LvHCN/TKadd/DGFmprY+ts31x1WPGVXgzkL1XYANu6ceHcGIzVuNN4CO7
 e3wNFInDakcWR/VLXBOpFUN9KzweEijfjdEGc7OyI=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47093433"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, Bob Eshleman
	<bobbyeshleman@gmail.com>, Alistair Francis <alistair.francis@wdc.com>,
	Connor Davis <connojdavis@gmail.com>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?=
	<roger.pau@citrix.com>, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, "Ross
 Lagerwall" <ross.lagerwall@citrix.com>, Daniel De Graaf
	<dgdegra@tycho.nsa.gov>, "Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: [XEN PATCH v6 29/31] build: build everything from the root dir, use obj=$subdir
Date: Thu, 1 Jul 2021 15:10:09 +0100
Message-ID: <20210701141011.785641-30-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

A subdirectory is now built by setting "$(obj)" instead of changing
directory. "$(obj)" should always be set when using "Rules.mk" and
thus a shortcut "$(build)" is introduced and should be used.

A new variable "$(need-builtin)" is introduce. It is to be used
whenever a "built_in.o" is wanted from a subdirectory. "built_in.o"
isn't the main target anymore, and thus only needs to depends on the
objects that should be part of "built_in.o".

Introduce $(srctree) and $(objtree) to replace $(BASEDIR) in cases a
relative path is better.

DEPS is updated as the existing macro to deal with it doesn't know
about $(obj).

There's some changes in "Rules.mk" which in addition to deal with
"$(obj)" also make it's looks more like "Makefile.build" from Linux
v5.12.

test/Makefile doesn't need special handling in order to build
everything under test/, Rules.mk will visit test/livepatch via
$(subdir-y), thus "tests" "all" and "build" target are removed.
"subtree-force-update" target isn't useful so it is removed as well.

test/livepatch/Makefile doesn't need default target anymore, Rules.mk
will build everything in $(extra-y) and thus all *.livepatch.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile                |  46 ++++++++-----
 xen/Rules.mk                | 131 +++++++++++++++++++++++-------------
 xen/arch/arm/Makefile       |   4 +-
 xen/arch/arm/arch.mk        |   4 +-
 xen/arch/riscv/arch.mk      |   3 +-
 xen/arch/x86/Makefile       |  13 ++--
 xen/arch/x86/Rules.mk       |   4 +-
 xen/arch/x86/arch.mk        |  10 +--
 xen/arch/x86/boot/Makefile  |   8 +--
 xen/include/Makefile        |   6 +-
 xen/scripts/Kbuild.include  |   6 ++
 xen/test/Makefile           |   7 +-
 xen/test/livepatch/Makefile |   6 --
 xen/xsm/flask/Makefile      |   2 +-
 xen/xsm/flask/ss/Makefile   |   2 +-
 15 files changed, 151 insertions(+), 101 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 6aac68750b4d..71f098cd6374 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -20,6 +20,10 @@ export PYTHON		?= $(PYTHON_INTERPRETER)
 export BASEDIR := $(CURDIR)
 export XEN_ROOT := $(BASEDIR)/..
 
+srctree := .
+objtree := .
+export srctree objtree
+
 # Do not use make's built-in rules and variables
 MAKEFLAGS += -rR
 
@@ -234,7 +238,7 @@ endif
 CFLAGS += -nostdinc -fno-builtin -fno-common
 CFLAGS += -Werror -Wredundant-decls -Wno-pointer-arith
 $(call cc-option-add,CFLAGS,CC,-Wvla)
-CFLAGS += -pipe -D__XEN__ -include $(BASEDIR)/include/xen/config.h
+CFLAGS += -pipe -D__XEN__ -include $(objtree)/include/xen/config.h
 CFLAGS-$(CONFIG_DEBUG_INFO) += -g
 
 ifneq ($(CONFIG_CC_IS_CLANG),y)
@@ -295,7 +299,7 @@ endif # need-config
 .PHONY: build install uninstall clean distclean MAP
 build install uninstall debug clean distclean MAP::
 ifneq ($(XEN_TARGET_ARCH),x86_32)
-	$(MAKE) -f Rules.mk _$@
+	$(MAKE) $(build)=. _$@
 else
 	echo "*** Xen x86/32 target no longer supported!"
 endif
@@ -335,10 +339,10 @@ _install: $(TARGET)$(CONFIG_XEN_INSTALL_SUFFIX)
 
 .PHONY: tests
 tests:
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C test tests
+	$(MAKE) $(build)=test
 .PHONY: install-tests
 install-tests:
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C test install
+	$(MAKE) $(build)=test install
 
 .PHONY: _uninstall
 _uninstall: D=$(DESTDIR)
@@ -395,23 +399,26 @@ $(TARGET).gz: $(TARGET)
 PHONY += prepare
 prepare:
 	$(MAKE) -C tools
-	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
+	$(MAKE) $(build)=. include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
 		do test -r arch/$(TARGET_ARCH)/efi/$$f || \
 		   ln -nsf ../../../common/efi/$$f arch/$(TARGET_ARCH)/efi/; \
 		done; \
 		true
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
-	$(MAKE) -f $(BASEDIR)/Rules.mk include/arch-$(TARGET_ARCH)/asm/asm-offsets.h
+	$(MAKE) $(build)=include all
+	$(MAKE) $(build)=arch/$(TARGET_ARCH) include
+	$(MAKE) $(build)=. include/arch-$(TARGET_ARCH)/asm/asm-offsets.h
+
+# The actual objects are generated when descending,
+# make sure no implicit rule kicks in
+$(sort $(ALL_OBJS) $(ALL_LIBS)): descend ;
 
-$(ALL_OBJS) $(ALL_LIBS): prepare
+build-dirs := $(patsubst %/built_in.o,%,$(filter %/built_in.o,$(ALL_OBJS) $(ALL_LIBS)))
 
-# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
-# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
-# build head.o
-arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
-arch/arm/$(TARGET_SUBARCH)/head.o: ;
+PHONY += descend $(build-dirs)
+descend: $(build-dirs)
+$(build-dirs): prepare
+	$(MAKE) $(build)=$@ need-builtin=1
 
 ifeq ($(CONFIG_LTO),y)
 # Gather all LTO objects together
@@ -429,7 +436,7 @@ endif
 targets += prelink.o
 
 $(TARGET): prelink.o FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
+	$(MAKE) $(build)=arch/$(TARGET_ARCH) $@
 
 quiet_cmd_banner = BANNER  $@
 define cmd_banner
@@ -533,14 +540,17 @@ cscope:
 _MAP:
 	$(NM) -n $(TARGET)-syms | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' > System.map
 
+# Avoid those single target rules when Makefile is included by Rules.mk
+ifndef obj
 %.o %.i %.s: %.c FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $(*D) $(@F)
+	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
 %.o %.s: %.S FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $(*D) $(@F)
+	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
 %/: FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o built_in_bin.o
+	$(MAKE) $(build)=$* need-builtin=1
+endif
 
 .PHONY: cloc
 cloc:
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 0f8d90844455..4b3abf0ea880 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -3,20 +3,27 @@
 # Makefile and are consumed by Rules.mk
 #
 
-obj := .
 src := $(obj)
 
+PHONY := __build
+__build:
+
 -include $(BASEDIR)/include/config/auto.conf
 
 include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
+ifndef obj
+$(warning kbuild: Makefile.build is included improperly)
+endif
 
-TARGET := $(BASEDIR)/xen
+TARGET := xen
 
 # Initialise some variables
+obj-y :=
 lib-y :=
 targets :=
+subdir-y :=
 CFLAGS-y :=
 AFLAGS-y :=
 
@@ -47,27 +54,52 @@ cmd_ar = rm -f $@; $(AR) cr $@ $(real-prereqs)
 quiet_cmd_objcopy = OBJCOPY $@
 cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
 
-define gendep
-    ifneq ($(1),$(subst /,:,$(1)))
-        DEPS += $(dir $(1)).$(notdir $(1)).d
-    endif
-endef
-$(foreach o,$(filter-out %/,$(obj-y) $(obj-bin-y) $(extra-y)),$(eval $(call gendep,$(o))))
+# Figure out what we need to build from the various variables
+# ===========================================================================
+
+# Libraries are always collected in one lib file.
+# Filter out objects already built-in
+lib-y := $(filter-out $(obj-y), $(sort $(lib-y)))
+
+# Subdirectories we need to descend into
+subdir-y := $(subdir-y) $(patsubst %/,%,$(filter %/, $(obj-y)))
 
 # Handle objects in subdirs
-# ---------------------------------------------------------------------------
-# o if we encounter foo/ in $(obj-y), replace it by foo/built_in.o
-#   and add the directory to the list of dirs to descend into: $(subdir-y)
-subdir-y := $(subdir-y) $(filter %/, $(obj-y))
+# - if we encounter foo/ in $(obj-y), replace it by foo/built_in.o
+ifdef need-builtin
 obj-y    := $(patsubst %/, %/built_in.o, $(obj-y))
+else
+obj-y    := $(filter-out %/, $(obj-y))
+endif
 
-# $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
-# tell kbuild to descend
-subdir-obj-y := $(filter %/built_in.o, $(obj-y))
+# Add subdir path
 
-# Libraries are always collected in one lib file.
-# Filter out objects already built-in
-lib-y := $(filter-out $(obj-y), $(sort $(lib-y)))
+extra-y         := $(addprefix $(obj)/,$(extra-y))
+targets         := $(addprefix $(obj)/,$(targets))
+lib-y           := $(addprefix $(obj)/,$(lib-y))
+obj-y           := $(addprefix $(obj)/,$(obj-y))
+obj-bin-y       := $(addprefix $(obj)/,$(obj-bin-y))
+subdir-y        := $(addprefix $(obj)/,$(subdir-y))
+
+# subdir-builtin may contain duplications. Use $(sort ...)
+subdir-builtin := $(sort $(filter %/built_in.o, $(obj-y)))
+
+targets-for-builtin := $(extra-y)
+
+ifneq ($(strip $(lib-y)),)
+    targets-for-builtin += $(obj)/lib.a
+endif
+
+ifdef need-builtin
+    targets-for-builtin += $(obj)/built_in.o
+    ifneq ($(strip $(obj-bin-y)),)
+        ifeq ($(CONFIG_LTO),y)
+            targets-for-builtin += $(obj)/built_in_bin.o
+        endif
+    endif
+endif
+
+targets += $(targets-for-builtin)
 
 $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS-y += -DINIT_SECTIONS_ONLY
 
@@ -119,29 +151,28 @@ quiet_cmd_cc_builtin = LD      $@
 cmd_cc_builtin = \
     $(CC) $(XEN_CFLAGS) -c -x c /dev/null -o $@
 
+# To build objects in subdirs, we need to descend into the directories
+$(subdir-builtin): $(obj)/%/built_in.o: $(obj)/% ;
+
 quiet_cmd_ld_builtin = LD      $@
 ifeq ($(CONFIG_LTO),y)
 cmd_ld_builtin = \
-    $(LD_LTO) -r -o $@ $(filter $(obj-y),$(real-prereqs))
+    $(LD_LTO) -r -o $@ $(real-prereqs)
 else
 cmd_ld_builtin = \
-    $(LD) $(XEN_LDFLAGS) -r -o $@ $(filter $(obj-y),$(real-prereqs))
+    $(LD) $(XEN_LDFLAGS) -r -o $@ $(real-prereqs)
 endif
 
-built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y) FORCE
+$(obj)/built_in.o: $(obj-y) FORCE
 	$(call if_changed,$(if $(strip $(obj-y)),ld_builtin,cc_builtin))
 
-lib.a: $(lib-y) FORCE
+$(obj)/lib.a: $(lib-y) FORCE
 	$(call if_changed,ar)
 
-targets += built_in.o
-ifneq ($(strip $(lib-y)),)
-targets += lib.a
-endif
-targets += $(filter-out $(subdir-obj-y), $(obj-y) $(lib-y)) $(extra-y)
-targets += $(MAKECMDGOALS)
+targets += $(filter-out $(subdir-builtin), $(obj-y))
+targets += $(lib-y) $(MAKECMDGOALS)
 
-built_in_bin.o: $(obj-bin-y) $(extra-y)
+$(obj)/built_in_bin.o: $(obj-bin-y)
 ifeq ($(strip $(obj-bin-y)),)
 	$(CC) $(a_flags) -c -x assembler /dev/null -o $@
 else
@@ -152,21 +183,13 @@ endif
 PHONY += FORCE
 FORCE:
 
-%/built_in.o %/lib.a: FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o
-
-%/built_in_bin.o: FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in_bin.o
-
-SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
-
 quiet_cmd_cc_o_c = CC      $@
 ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
     cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
     ifeq ($(CONFIG_CC_IS_CLANG),y)
-        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
     else
-        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
     endif
     cmd_objcopy_fix_sym += && rm -f $(dot-target).tmp
 else
@@ -178,13 +201,13 @@ define rule_cc_o_c
     $(call cmd,objcopy_fix_sym)
 endef
 
-%.o: %.c FORCE
+$(obj)/%.o: $(src)/%.c FORCE
 	$(call if_changed_rule,cc_o_c)
 
 quiet_cmd_cc_o_S = CC      $@
 cmd_cc_o_S = $(CC) $(a_flags) -c $< -o $@
 
-%.o: %.S FORCE
+$(obj)/%.o: $(src)/%.S FORCE
 	$(call if_changed,cc_o_S)
 
 
@@ -202,7 +225,7 @@ define cmd_obj_init_o
     $(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section .$(s)=.init.$(s)) $< $@
 endef
 
-$(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
+$(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): $(obj)/%.init.o: $(obj)/%.o FORCE
 	$(call if_changed,obj_init_o)
 
 quiet_cmd_cpp_i_c = CPP     $@
@@ -214,19 +237,21 @@ cmd_cc_s_c = $(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -S $< -o $@
 quiet_cmd_cpp_s_S = CPP     $@
 cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
-%.i: %.c FORCE
+$(obj)/%.i: $(src)/%.c FORCE
 	$(call if_changed,cpp_i_c)
 
-%.s: %.c FORCE
+$(obj)/%.s: $(src)/%.c FORCE
 	$(call if_changed,cc_s_c)
 
-%.s: %.S FORCE
+$(obj)/%.s: $(src)/%.S FORCE
 	$(call if_changed,cpp_s_S)
 
 # Linker scripts, .lds.S -> .lds
 quiet_cmd_cpp_lds_S = LDS     $@
 cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -D__LINKER__ -MQ $@ -o $@ $<
 
+targets := $(filter-out $(PHONY), $(targets))
+
 # Add intermediate targets:
 # When building objects with specific suffix patterns, add intermediate
 # targets that the final targets are derived from.
@@ -236,7 +261,18 @@ intermediate_targets = $(foreach sfx, $(2), \
 # %.init.o <- %.o
 targets += $(call intermediate_targets, .init.o, .o)
 
--include $(DEPS_INCLUDE)
+# Build
+# ---------------------------------------------------------------------------
+
+__build: $(targets-for-builtin) $(subdir-y)
+	@:
+
+# Descending
+# ---------------------------------------------------------------------------
+
+PHONY += $(subdir-y)
+$(subdir-y):
+	$(Q)$(MAKE) $(build)=$@ need-builtin=$(if $(filter $@/built_in.o, $(subdir-builtin)),1)
 
 # Read all saved command lines and dependencies for the $(targets) we
 # may be building above, using $(if_changed{,_dep}). As an
@@ -247,6 +283,9 @@ existing-targets := $(wildcard $(sort $(targets)))
 
 -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
 
+DEPS:= $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).d)
+-include $(DEPS_INCLUDE)
+
 # Declare the contents of the PHONY variable as phony.  We keep that
 # information in a variable so we can use it in if_changed and friends.
 .PHONY: $(PHONY)
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 9f9c73aa6c5d..a3204d22d17b 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -93,12 +93,12 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).0.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).1.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index 8a2b202f698e..0a6ae6c2fe60 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -1,8 +1,8 @@
 ########################################
 # arm-specific definitions
 
-CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/include/arch-$(TARGET_ARCH)
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/include/arch-$(TARGET_ARCH)
 
 $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
 $(call cc-option-add,CFLAGS,CC,-Wnested-externs)
diff --git a/xen/arch/riscv/arch.mk b/xen/arch/riscv/arch.mk
index 53dadb897591..8aa2206184fa 100644
--- a/xen/arch/riscv/arch.mk
+++ b/xen/arch/riscv/arch.mk
@@ -11,4 +11,5 @@ riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
 # -mcmodel=medlow would force Xen into the lower half.
 
 CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
-CFLAGS += -I$(BASEDIR)/include
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/include/arch-$(TARGET_ARCH)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 2cc67d6e0e84..c5e87f3db35b 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -81,6 +81,9 @@ endif
 extra-y += asm-macros.i
 extra-y += xen.lds
 
+# Allows usercopy.c to includes itself
+$(obj)/usercopy.o: CFLAGS-y += -I.
+
 ifneq ($(CONFIG_HVM),y)
 $(obj)/x86_emulate.o: CFLAGS-y += -Wno-unused-label
 endif
@@ -166,13 +169,13 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).0.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).1.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
@@ -234,14 +237,14 @@ endif
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
+	$(MAKE) $(build)=$(@D) .$(@F).0r.o .$(@F).0s.o
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
 	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
+	$(MAKE) $(build)=$(@D) .$(@F).1r.o .$(@F).1s.o
 	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
@@ -253,7 +256,7 @@ $(TARGET).efi: FORCE
 	echo '$(if $(filter y,$(XEN_BUILD_EFI)),xen.efi generation,EFI support) disabled'
 endif
 
-$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
+$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: arch/x86/efi/built_in.o
 $(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
 
 .PHONY: include
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index 56fe22c979ea..2d12c2dca208 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -2,9 +2,9 @@
 # x86-specific definitions
 
 ifneq ($(filter -DHAVE_AS_QUOTED_SYM,$(XEN_CFLAGS)),)
-object_label_flags = '-D__OBJECT_LABEL__=$(subst $(BASEDIR)/,,$(CURDIR))/$@'
+object_label_flags = '-D__OBJECT_LABEL__=$@'
 else
-object_label_flags = '-D__OBJECT_LABEL__=$(subst /,$$,$(subst -,_,$(subst $(BASEDIR)/,,$(CURDIR))/$@))'
+object_label_flags = '-D__OBJECT_LABEL__=$(subst /,$$,$(subst -,_,$@))'
 endif
 c_flags += $(object_label_flags) $(CFLAGS-stack-boundary)
 a_flags += $(object_label_flags) $(CFLAGS-stack-boundary)
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index c95caa303db8..3f181f616188 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -3,10 +3,10 @@
 
 export XEN_IMG_OFFSET := 0x200000
 
-CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/include/arch-$(TARGET_ARCH)
-CFLAGS += -I$(BASEDIR)/include/arch-x86/asm/mach-generic
-CFLAGS += -I$(BASEDIR)/include/arch-x86/asm/mach-default
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/include/arch-$(TARGET_ARCH)
+CFLAGS += -I$(srctree)/include/arch-x86/asm/mach-generic
+CFLAGS += -I$(srctree)/include/arch-x86/asm/mach-default
 CFLAGS += -DXEN_IMG_OFFSET=$(XEN_IMG_OFFSET)
 
 # Prevent floating-point variables from creeping into Xen.
@@ -66,6 +66,6 @@ export XEN_BUILD_EFI := $(call try-run,$(CC) $(CFLAGS) -c arch/x86/efi/check.c -
 endif
 
 # Set up the assembler include path properly for older toolchains.
-CFLAGS += -Wa,-I$(BASEDIR)/include
+CFLAGS += -Wa,-I$(srctree)/include
 
 ALL_OBJS-y := arch/x86/boot/built_in.o arch/x86/efi/built_in.o $(ALL_OBJS-y)
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 53d357489df2..2469ca7c4530 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -1,8 +1,8 @@
 obj-bin-y += head.o
 
-DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
+DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
 
-CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h
+CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h
 
 RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/generated/autoconf.h \
@@ -14,7 +14,7 @@ RELOC_DEPS = $(DEFS_H_DEPS) \
 $(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
 
 $(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS)
-	$(MAKE) -f build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
+	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
 
 $(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS)
-	$(MAKE) -f build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
+	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
diff --git a/xen/include/Makefile b/xen/include/Makefile
index a969e76ddcad..b318bdaab094 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -61,7 +61,7 @@ $(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/
 	export PYTHON=$(PYTHON); \
 	while read what name; do \
 		$(SHELL) $(BASEDIR)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
-	done <$(patsubst compat/%,compat/.xlat/%,$(basename $<)).lst >$@.new
+	done <$(patsubst $(obj)/compat/%,$(obj)/compat/.xlat/%,$(basename $<)).lst >$@.new
 	mv -f $@.new $@
 
 .PRECIOUS: $(obj)/compat/.xlat/%.lst
@@ -86,8 +86,8 @@ PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(
 PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
 PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
 
-public/io/9pfs.h-prereq := string
-public/io/pvcalls.h-prereq := string
+$(src)/public/io/9pfs.h-prereq := string
+$(src)/public/io/pvcalls.h-prereq := string
 
 $(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
 	for i in $(filter %.h,$^); do \
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 7cb55b181dcb..788929cdca38 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -107,6 +107,12 @@ ld-option = $(call success,$(LD) -v $(1))
 # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
 cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
 
+###
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
+# Usage:
+# $(Q)$(MAKE) $(build)=dir
+build := -f $(BASEDIR)/Rules.mk obj
+
 # Shorthand for $(MAKE) clean
 # Usage:
 # $(MAKE) $(clean) dir
diff --git a/xen/test/Makefile b/xen/test/Makefile
index 41e4d7bdb78b..080763c80766 100644
--- a/xen/test/Makefile
+++ b/xen/test/Makefile
@@ -1,13 +1,10 @@
 
-tests all: build
-
-
 ifneq ($(XEN_TARGET_ARCH),x86_32)
 # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
 subdir-y += livepatch
 endif
 
-install build subtree-force-update uninstall: %:
+install uninstall: %:
 	set -e; for s in $(subdir-y); do \
-		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
+		$(MAKE) $(build)=$$s $*; \
 	done
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index e59245323e92..52ee58a08c5f 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -11,9 +11,6 @@ endif
 CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
 CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
 
-.PHONY: default
-build default: livepatch
-
 extra-y += xen_hello_world.livepatch
 xen_hello_world-objs := xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
 $(obj)/xen_hello_world.o: $(obj)/config.h
@@ -156,9 +153,6 @@ LIVEPATCHES := $(filter %.livepatch,$(extra-y))
 
 LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch
 
-.PHONY: livepatch
-livepatch: $(LIVEPATCHES)
-
 install: $(addprefix $(obj)/,$(LIVEPATCHES))
 	$(INSTALL_DIR) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
 	$(INSTALL_DATA) $(addprefix $(obj)/,$(LIVEPATCHES)) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 3ea726d66f8b..267ca5c47437 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -42,7 +42,7 @@ $(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
 	$(call if_changed,binfile)
 targets += flask-policy.S
 
-FLASK_BUILD_DIR := $(CURDIR)
+FLASK_BUILD_DIR := $(BASEDIR)/$(obj)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
 
 $(obj)/policy.bin: FORCE
diff --git a/xen/xsm/flask/ss/Makefile b/xen/xsm/flask/ss/Makefile
index d32b9e07138e..efd21f138df3 100644
--- a/xen/xsm/flask/ss/Makefile
+++ b/xen/xsm/flask/ss/Makefile
@@ -8,4 +8,4 @@ obj-y += services.o
 obj-y += conditional.o
 obj-y += mls.o
 
-CFLAGS-y += -I../include
+CFLAGS-y += -Ixsm/flask/include
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148775.275042 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZV-00024m-6j; Thu, 01 Jul 2021 14:21:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148775.275042; Thu, 01 Jul 2021 14:21:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZV-00023H-1Y; Thu, 01 Jul 2021 14:21:41 +0000
Received: by outflank-mailman (input) for mailman id 148775;
 Thu, 01 Jul 2021 14:21:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQZ-0005F9-M3
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:27 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 309bf640-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:12 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 309bf640-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148672;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=APF1/u5jPnrWo/5Fqte+sYKklT316xDw+oribOSGvg8=;
  b=Ge6JnMP34vCiOXZ5Txyu4meDPNMNAynK3t9TiXzuMm2lShhXr17ahCV0
   EvGodJ6a+OOxrvKi7uBl+5WIxADfht6XdlXfZgo1aw71cUnDL5vTHzlfC
   9gyQaO3QWP/cu30I9Oxv/6NemNkZoFjZbN853zlsrBeRALg1TbFFQ3Km9
   k=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: DPse08MoYbUEHN87mCBV8I3seFbD0iRz6VH/LPSxzcuPuQZQjOtYLAmTnXANpYULIIjcgv/Px1
 Sp8OkTpY2yODr15n27DBnTkPKjJAuOP/poJnHJYFkXpneEmop0a2vGCerd0fNZxzJ5Bpr0/OAx
 /bnaBSfuzwAbVrgLqW7FtuEKTszwqufSVO4Oab/tDf/0NSuC5rOa8tT/uHSDaHfSQMsB94SMhP
 0YHBhgI51ECOkvrmJsOaDm4UH+uUu2VnVFOUd6nz1UJXNGjNJYdjKSrlVdWOtmVuku3Egi8Fay
 vd8=
X-SBRS: 5.1
X-MesageID: 47093441
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:qrnDPqpWRqPpvhTp/nkAj0waV5rveYIsimQD101hICG9Evb0qy
 nOpoV/6faQslwssR4b9uxoVJPvfZq+z+8W3WByB9eftWDd0QPFEGgL1+DfKlbbak7DH4BmtJ
 uJc8JFeafN5VoRt7eG3OFveexQvOVu88qT9JjjJ28Gd3APV0n5hT0JcjpyFCdNNW57LKt8Lr
 WwzOxdqQGtfHwGB/7LfUXsD4D41rv2fIuNW29+OyIa
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47093441"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Subject: [XEN PATCH v6 30/31] build: introduce if_changed_deps
Date: Thu, 1 Jul 2021 15:10:10 +0100
Message-ID: <20210701141011.785641-31-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This macro does compare command line like if_changed, but it also
rewrite the dependencies generated by $(CC) in order to depend on a
CONFIG_* as generated by kconfig instead of depending on autoconf.h.
This allow to make a change in kconfig options and only rebuild the
object that uses that CONFIG_* option.

cmd_and_record isn't needed anymore as it is replace by
cmd_and_fixdep.

There's only one .*.d dependency file left which is explicitly
included as a workound, all the other are been absorb into the .*.cmd
dependency files via `fixdep`. So including .*.d can be removed from
the makefile.

This imports fixdep.c and if_changed_deps macro from Linux v5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 .gitignore                 |   1 +
 xen/Makefile               |  16 +-
 xen/Rules.mk               |  17 +-
 xen/arch/x86/Makefile      |   8 +-
 xen/scripts/Kbuild.include |  17 +-
 xen/tools/Makefile         |   7 +-
 xen/tools/fixdep.c         | 404 +++++++++++++++++++++++++++++++++++++
 7 files changed, 441 insertions(+), 29 deletions(-)
 create mode 100644 xen/tools/fixdep.c

diff --git a/.gitignore b/.gitignore
index 91ae22ae9216..1c9c8a47aac6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -341,6 +341,7 @@ xen/include/xen/lib/x86/cpuid-autogen.h
 xen/test/livepatch/config.h
 xen/test/livepatch/expect_config.h
 xen/test/livepatch/*.livepatch
+xen/tools/fixdep
 xen/tools/kconfig/.tmp_gtkcheck
 xen/tools/kconfig/.tmp_qtcheck
 xen/tools/symbols
diff --git a/xen/Makefile b/xen/Makefile
index 71f098cd6374..d8dedca206a1 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -185,6 +185,13 @@ endif
 export root-make-done := y
 endif # root-make-done
 
+# ===========================================================================
+# Rules shared between *config targets and build targets
+
+PHONY += tools_fixdep
+tools_fixdep:
+	$(MAKE) -C tools fixdep
+
 # Shorthand for kconfig
 kconfig = -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) HOSTCC="$(HOSTCC)" HOSTCXX="$(HOSTCXX)"
 
@@ -397,7 +404,7 @@ $(TARGET).gz: $(TARGET)
 	mv $@.new $@
 
 PHONY += prepare
-prepare:
+prepare: tools_fixdep
 	$(MAKE) -C tools
 	$(MAKE) $(build)=. include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
@@ -476,6 +483,7 @@ include/xen/compile.h: include/xen/compile.h.in .banner FORCE
 	@cat .banner
 	$(call filechk,compile.h)
 
+-include $(wildcard .asm-offsets.s.d)
 asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
 	$(CC) $(filter-out -Wa$(comma)% -flto,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
 	$(call move-if-changed,$@.new,$@)
@@ -542,13 +550,13 @@ _MAP:
 
 # Avoid those single target rules when Makefile is included by Rules.mk
 ifndef obj
-%.o %.i %.s: %.c FORCE
+%.o %.i %.s: %.c tools_fixdep FORCE
 	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
-%.o %.s: %.S FORCE
+%.o %.s: %.S tools_fixdep FORCE
 	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
-%/: FORCE
+%/: tools_fixdep FORCE
 	$(MAKE) $(build)=$* need-builtin=1
 endif
 
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 4b3abf0ea880..f2af4a6e0644 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -139,8 +139,8 @@ cpp_flags = $(filter-out -Wa$(comma)%,$(1))
 # Calculation of flags, first the generic flags, then the arch specific flags,
 # and last the flags modified for a target or a directory.
 
-c_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_CFLAGS)
-a_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_AFLAGS)
+c_flags = -MMD -MP -MF $(depfile) $(XEN_CFLAGS)
+a_flags = -MMD -MP -MF $(depfile) $(XEN_AFLAGS)
 
 include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
 
@@ -197,7 +197,7 @@ else
 endif
 
 define rule_cc_o_c
-    $(call cmd_and_record,cc_o_c)
+    $(call cmd_and_fixdep,cc_o_c)
     $(call cmd,objcopy_fix_sym)
 endef
 
@@ -208,7 +208,7 @@ quiet_cmd_cc_o_S = CC      $@
 cmd_cc_o_S = $(CC) $(a_flags) -c $< -o $@
 
 $(obj)/%.o: $(src)/%.S FORCE
-	$(call if_changed,cc_o_S)
+	$(call if_changed_dep,cc_o_S)
 
 
 quiet_cmd_obj_init_o = INIT_O  $@
@@ -238,13 +238,13 @@ quiet_cmd_cpp_s_S = CPP     $@
 cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
 $(obj)/%.i: $(src)/%.c FORCE
-	$(call if_changed,cpp_i_c)
+	$(call if_changed_dep,cpp_i_c)
 
 $(obj)/%.s: $(src)/%.c FORCE
-	$(call if_changed,cc_s_c)
+	$(call if_changed_dep,cc_s_c)
 
 $(obj)/%.s: $(src)/%.S FORCE
-	$(call if_changed,cpp_s_S)
+	$(call if_changed_dep,cpp_s_S)
 
 # Linker scripts, .lds.S -> .lds
 quiet_cmd_cpp_lds_S = LDS     $@
@@ -283,9 +283,6 @@ existing-targets := $(wildcard $(sort $(targets)))
 
 -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
 
-DEPS:= $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).d)
--include $(DEPS_INCLUDE)
-
 # Declare the contents of the PHONY variable as phony.  We keep that
 # information in a variable so we can use it in if_changed and friends.
 .PHONY: $(PHONY)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index c5e87f3db35b..bcb140756b98 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -280,7 +280,7 @@ $(BASEDIR)/include/arch-x86/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefil
 
 $(obj)/efi.lds: AFLAGS-y += -DEFI
 $(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
-	$(call if_changed,cpp_lds_S)
+	$(call if_changed_dep,cpp_lds_S)
 
 $(obj)/boot/mkelf32: $(src)/boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
@@ -296,9 +296,3 @@ clean::
 	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
 	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
 	rm -f note.o
-
-# Suppress loading of DEPS files for internal, temporary target files.  This
-# then also suppresses re-generation of the respective .*.d2 files.
-ifeq ($(filter-out .xen%.o,$(notdir $(MAKECMDGOALS))),)
-DEPS_INCLUDE:=
-endif
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 788929cdca38..b56bbc4300f0 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -15,8 +15,7 @@ dot-target = $(@D)/.$(@F)
 
 ###
 # dependencies
-DEPS = .*.d
-DEPS_INCLUDE = $(addsuffix .d2, $(basename $(wildcard $(DEPS))))
+depfile = $(dot-target).d
 
 ###
 # real prerequisites without phony targets
@@ -129,6 +128,8 @@ cmd = @set -e; $(echo-cmd) $(cmd_$(1))
 ###
 # if_changed      - execute command if any prerequisite is newer than
 #                   target, or command line has changed
+# if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
+#                   including used config symbols
 # if_changed_rule - as if_changed but execute rule instead
 
 ifneq ($(KBUILD_NOCMDDEP),1)
@@ -157,15 +158,19 @@ if_changed = $(if $(any-prereq)$(cmd-check),                                 \
         $(cmd);                                                              \
         printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
 
+# Execute the command and also postprocess generated .d dependencies file.
+if_changed_dep = $(if $(any-prereq)$(cmd-check),$(cmd_and_fixdep),@:)
+
+cmd_and_fixdep =                                                             \
+        $(cmd);                                                              \
+        tools/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;        \
+        rm -f $(depfile)
+
 # Usage: $(call if_changed_rule,foo)
 # Will check if $(cmd_foo) or any of the prerequisites changed,
 # and if so will execute $(rule_foo).
 if_changed_rule = $(if $(any-prereq)$(cmd-check),$(rule_$(1)),@:)
 
-cmd_and_record =                                                             \
-        $(cmd);                                                              \
-        printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd
-
 ###
 # why - tell why a target got built
 #       enabled by make V=2
diff --git a/xen/tools/Makefile b/xen/tools/Makefile
index 4e42163f981c..722f3664549d 100644
--- a/xen/tools/Makefile
+++ b/xen/tools/Makefile
@@ -2,11 +2,14 @@
 include $(XEN_ROOT)/Config.mk
 
 .PHONY: default
-default: symbols
+default: symbols fixdep
 
 .PHONY: clean
 clean:
-	rm -f *.o symbols
+	rm -f *.o symbols fixdep
 
 symbols: symbols.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
+
+fixdep: fixdep.c
+	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
diff --git a/xen/tools/fixdep.c b/xen/tools/fixdep.c
new file mode 100644
index 000000000000..d98540552941
--- /dev/null
+++ b/xen/tools/fixdep.c
@@ -0,0 +1,404 @@
+/*
+ * "Optimize" a list of dependencies as spit out by gcc -MD
+ * for the kernel build
+ * ===========================================================================
+ *
+ * Author       Kai Germaschewski
+ * Copyright    2002 by Kai Germaschewski  <kai.germaschewski@gmx.de>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ *
+ * Introduction:
+ *
+ * gcc produces a very nice and correct list of dependencies which
+ * tells make when to remake a file.
+ *
+ * To use this list as-is however has the drawback that virtually
+ * every file in the kernel includes autoconf.h.
+ *
+ * If the user re-runs make *config, autoconf.h will be
+ * regenerated.  make notices that and will rebuild every file which
+ * includes autoconf.h, i.e. basically all files. This is extremely
+ * annoying if the user just changed CONFIG_HIS_DRIVER from n to m.
+ *
+ * So we play the same trick that "mkdep" played before. We replace
+ * the dependency on autoconf.h by a dependency on every config
+ * option which is mentioned in any of the listed prerequisites.
+ *
+ * kconfig populates a tree in include/config/ with an empty file
+ * for each config symbol and when the configuration is updated
+ * the files representing changed config options are touched
+ * which then let make pick up the changes and the files that use
+ * the config symbols are rebuilt.
+ *
+ * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
+ * which depend on "include/config/his/driver.h" will be rebuilt,
+ * so most likely only his driver ;-)
+ *
+ * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
+ *
+ * So to get dependencies right, there are two issues:
+ * o if any of the files the compiler read changed, we need to rebuild
+ * o if the command line given to the compile the file changed, we
+ *   better rebuild as well.
+ *
+ * The former is handled by using the -MD output, the later by saving
+ * the command line used to compile the old object and comparing it
+ * to the one we would now use.
+ *
+ * Again, also this idea is pretty old and has been discussed on
+ * kbuild-devel a long time ago. I don't have a sensibly working
+ * internet connection right now, so I rather don't mention names
+ * without double checking.
+ *
+ * This code here has been based partially based on mkdep.c, which
+ * says the following about its history:
+ *
+ *   Copyright abandoned, Michael Chastain, <mailto:mec@shout.net>.
+ *   This is a C version of syncdep.pl by Werner Almesberger.
+ *
+ *
+ * It is invoked as
+ *
+ *   fixdep <depfile> <target> <cmdline>
+ *
+ * and will read the dependency file <depfile>
+ *
+ * The transformed dependency snipped is written to stdout.
+ *
+ * It first generates a line
+ *
+ *   cmd_<target> = <cmdline>
+ *
+ * and then basically copies the .<target>.d file to stdout, in the
+ * process filtering out the dependency on autoconf.h and adding
+ * dependencies on include/config/my/option.h for every
+ * CONFIG_MY_OPTION encountered in any of the prerequisites.
+ *
+ * We don't even try to really parse the header files, but
+ * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will
+ * be picked up as well. It's not a problem with respect to
+ * correctness, since that can only give too many dependencies, thus
+ * we cannot miss a rebuild. Since people tend to not mention totally
+ * unrelated CONFIG_ options all over the place, it's not an
+ * efficiency problem either.
+ *
+ * (Note: it'd be easy to port over the complete mkdep state machine,
+ *  but I don't think the added complexity is worth it)
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+static void usage(void)
+{
+	fprintf(stderr, "Usage: fixdep <depfile> <target> <cmdline>\n");
+	exit(1);
+}
+
+/*
+ * In the intended usage of this program, the stdout is redirected to .*.cmd
+ * files. The return value of printf() and putchar() must be checked to catch
+ * any error, e.g. "No space left on device".
+ */
+static void xprintf(const char *format, ...)
+{
+	va_list ap;
+	int ret;
+
+	va_start(ap, format);
+	ret = vprintf(format, ap);
+	if (ret < 0) {
+		perror("fixdep");
+		exit(1);
+	}
+	va_end(ap);
+}
+
+static void xputchar(int c)
+{
+	int ret;
+
+	ret = putchar(c);
+	if (ret == EOF) {
+		perror("fixdep");
+		exit(1);
+	}
+}
+
+/*
+ * Print out a dependency path from a symbol name
+ */
+static void print_dep(const char *m, int slen, const char *dir)
+{
+	int c, prev_c = '/', i;
+
+	xprintf("    $(wildcard %s/", dir);
+	for (i = 0; i < slen; i++) {
+		c = m[i];
+		if (c == '_')
+			c = '/';
+		else
+			c = tolower(c);
+		if (c != '/' || prev_c != '/')
+			xputchar(c);
+		prev_c = c;
+	}
+	xprintf(".h) \\\n");
+}
+
+struct item {
+	struct item	*next;
+	unsigned int	len;
+	unsigned int	hash;
+	char		name[];
+};
+
+#define HASHSZ 256
+static struct item *hashtab[HASHSZ];
+
+static unsigned int strhash(const char *str, unsigned int sz)
+{
+	/* fnv32 hash */
+	unsigned int i, hash = 2166136261U;
+
+	for (i = 0; i < sz; i++)
+		hash = (hash ^ str[i]) * 0x01000193;
+	return hash;
+}
+
+/*
+ * Lookup a value in the configuration string.
+ */
+static int is_defined_config(const char *name, int len, unsigned int hash)
+{
+	struct item *aux;
+
+	for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
+		if (aux->hash == hash && aux->len == len &&
+		    memcmp(aux->name, name, len) == 0)
+			return 1;
+	}
+	return 0;
+}
+
+/*
+ * Add a new value to the configuration string.
+ */
+static void define_config(const char *name, int len, unsigned int hash)
+{
+	struct item *aux = malloc(sizeof(*aux) + len);
+
+	if (!aux) {
+		perror("fixdep:malloc");
+		exit(1);
+	}
+	memcpy(aux->name, name, len);
+	aux->len = len;
+	aux->hash = hash;
+	aux->next = hashtab[hash % HASHSZ];
+	hashtab[hash % HASHSZ] = aux;
+}
+
+/*
+ * Record the use of a CONFIG_* word.
+ */
+static void use_config(const char *m, int slen)
+{
+	unsigned int hash = strhash(m, slen);
+
+	if (is_defined_config(m, slen, hash))
+	    return;
+
+	define_config(m, slen, hash);
+	print_dep(m, slen, "include/config");
+}
+
+/* test if s ends in sub */
+static int str_ends_with(const char *s, int slen, const char *sub)
+{
+	int sublen = strlen(sub);
+
+	if (sublen > slen)
+		return 0;
+
+	return !memcmp(s + slen - sublen, sub, sublen);
+}
+
+static void parse_config_file(const char *p)
+{
+	const char *q, *r;
+	const char *start = p;
+
+	while ((p = strstr(p, "CONFIG_"))) {
+		if (p > start && (isalnum(p[-1]) || p[-1] == '_')) {
+			p += 7;
+			continue;
+		}
+		p += 7;
+		q = p;
+		while (isalnum(*q) || *q == '_')
+			q++;
+		if (str_ends_with(p, q - p, "_MODULE"))
+			r = q - 7;
+		else
+			r = q;
+		if (r > p)
+			use_config(p, r - p);
+		p = q;
+	}
+}
+
+static void *read_file(const char *filename)
+{
+	struct stat st;
+	int fd;
+	char *buf;
+
+	fd = open(filename, O_RDONLY);
+	if (fd < 0) {
+		fprintf(stderr, "fixdep: error opening file: ");
+		perror(filename);
+		exit(2);
+	}
+	if (fstat(fd, &st) < 0) {
+		fprintf(stderr, "fixdep: error fstat'ing file: ");
+		perror(filename);
+		exit(2);
+	}
+	buf = malloc(st.st_size + 1);
+	if (!buf) {
+		perror("fixdep: malloc");
+		exit(2);
+	}
+	if (read(fd, buf, st.st_size) != st.st_size) {
+		perror("fixdep: read");
+		exit(2);
+	}
+	buf[st.st_size] = '\0';
+	close(fd);
+
+	return buf;
+}
+
+/* Ignore certain dependencies */
+static int is_ignored_file(const char *s, int len)
+{
+	return str_ends_with(s, len, "include/generated/autoconf.h") ||
+	       str_ends_with(s, len, "include/generated/autoksyms.h");
+}
+
+/*
+ * Important: The below generated source_foo.o and deps_foo.o variable
+ * assignments are parsed not only by make, but also by the rather simple
+ * parser in scripts/mod/sumversion.c.
+ */
+static void parse_dep_file(char *m, const char *target)
+{
+	char *p;
+	int is_last, is_target;
+	int saw_any_target = 0;
+	int is_first_dep = 0;
+	void *buf;
+
+	while (1) {
+		/* Skip any "white space" */
+		while (*m == ' ' || *m == '\\' || *m == '\n')
+			m++;
+
+		if (!*m)
+			break;
+
+		/* Find next "white space" */
+		p = m;
+		while (*p && *p != ' ' && *p != '\\' && *p != '\n')
+			p++;
+		is_last = (*p == '\0');
+		/* Is the token we found a target name? */
+		is_target = (*(p-1) == ':');
+		/* Don't write any target names into the dependency file */
+		if (is_target) {
+			/* The /next/ file is the first dependency */
+			is_first_dep = 1;
+		} else if (!is_ignored_file(m, p - m)) {
+			*p = '\0';
+
+			/*
+			 * Do not list the source file as dependency, so that
+			 * kbuild is not confused if a .c file is rewritten
+			 * into .S or vice versa. Storing it in source_* is
+			 * needed for modpost to compute srcversions.
+			 */
+			if (is_first_dep) {
+				/*
+				 * If processing the concatenation of multiple
+				 * dependency files, only process the first
+				 * target name, which will be the original
+				 * source name, and ignore any other target
+				 * names, which will be intermediate temporary
+				 * files.
+				 */
+				if (!saw_any_target) {
+					saw_any_target = 1;
+					xprintf("source_%s := %s\n\n",
+						target, m);
+					xprintf("deps_%s := \\\n", target);
+				}
+				is_first_dep = 0;
+			} else {
+				xprintf("  %s \\\n", m);
+			}
+
+			buf = read_file(m);
+			parse_config_file(buf);
+			free(buf);
+		}
+
+		if (is_last)
+			break;
+
+		/*
+		 * Start searching for next token immediately after the first
+		 * "whitespace" character that follows this token.
+		 */
+		m = p + 1;
+	}
+
+	if (!saw_any_target) {
+		fprintf(stderr, "fixdep: parse error; no targets found\n");
+		exit(1);
+	}
+
+	xprintf("\n%s: $(deps_%s)\n\n", target, target);
+	xprintf("$(deps_%s):\n", target);
+}
+
+int main(int argc, char *argv[])
+{
+	const char *depfile, *target, *cmdline;
+	void *buf;
+
+	if (argc != 4)
+		usage();
+
+	depfile = argv[1];
+	target = argv[2];
+	cmdline = argv[3];
+
+	xprintf("cmd_%s := %s\n\n", target, cmdline);
+
+	buf = read_file(depfile);
+	parse_dep_file(buf, target);
+	free(buf);
+
+	return 0;
+}
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148778.275049 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZV-00028B-Q2; Thu, 01 Jul 2021 14:21:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148778.275049; Thu, 01 Jul 2021 14:21:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZV-00026g-BJ; Thu, 01 Jul 2021 14:21:41 +0000
Received: by outflank-mailman (input) for mailman id 148778;
 Thu, 01 Jul 2021 14:21:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQT-0005tj-33
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:21 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a4370ab4-7d26-431f-8643-4db42b9cbd9d;
 Thu, 01 Jul 2021 14:10:59 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a4370ab4-7d26-431f-8643-4db42b9cbd9d
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148659;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=FW24mf7gQhBpHHcg9GJm9hyluG+ERn9X5WYN2UmMbPk=;
  b=cbdYfVzPIy5KNJccFmRaz2ouIUyoBrGCGeHeYbXyzxTttZRmy2wp2iKV
   I6gRqVwE+5oidon18IaiLTgC5r3QmsI7YS6miijS5RtoDH28XeOujqPFq
   xM/C3VwEBDTzkpPV74Pt+d3hZYHvFKPeEf3e4CEoFSdtj8rQDVbO/8NwL
   g=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: X0x55L6E6elZNa5DJCSBz8AQs/xTDbH104JZsGk/ivXRryutvpwmKbBMTXXbLDFK4nPOb5IBzZ
 0N5u5mvjxwK5S7vfU9LXCRVSlic9OhDTTNnw/iycBej8XIsnoDmq/Ff9iAU6aEOJ55V+0ymsHi
 TCbaTwrM+aSUTSccuqsEZUvJ1CHW7CvDDyh1RHwTU3KvT1V4SScRuwj87NJu3HuSjBOK3pQrar
 Z773hjmZAvEW7Q12YELsTT8HyTYIHhhf0A+2/YncVPuxcjkg8aR7xlQXE74+qETDW2FWTC8vEh
 YmE=
X-SBRS: 5.1
X-MesageID: 47384424
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:RoSt96FZ/cY7VNDdpLqE0MeALOsnbusQ8zAXP0AYc3Jom6uj5q
 aTdZUgpGfJYVkqOE3I9ertBEDEewK4yXcX2/h3AV7BZniEhILAFugLhuGO/9SjIVybygc079
 YYT0EUMrzN5DZB4voSmDPIceod/A==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47384424"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>
Subject: [XEN PATCH v6 22/31] build: fix $(TARGET).efi creation in arch/arm
Date: Thu, 1 Jul 2021 15:10:02 +0100
Message-ID: <20210701141011.785641-23-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

There is no need to try to guess a relative path to the "xen.efi" file,
we can simply use $@. Also, there's no need to use `notdir`, make
already do that work via $(@F).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/arm/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index cc90d9796e6e..dc1d09c8b429 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -93,7 +93,7 @@ endif
 $(TARGET): $(TARGET)-syms
 	$(OBJCOPY) -O binary -S $< $@
 ifeq ($(CONFIG_ARM_64),y)
-	ln -sf $(notdir $@)  ../../$(notdir $@).efi
+	ln -sf $(@F) $@.efi
 endif
 
 ifeq ($(CONFIG_LTO),y)
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148782.275064 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZX-0002cM-4A; Thu, 01 Jul 2021 14:21:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148782.275064; Thu, 01 Jul 2021 14:21:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZW-0002aP-Ps; Thu, 01 Jul 2021 14:21:42 +0000
Received: by outflank-mailman (input) for mailman id 148782;
 Thu, 01 Jul 2021 14:21:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQ0-0005F9-LG
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:52 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2bdb2267-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:04 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2bdb2267-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148664;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=L4z28cvrDDLSI9snpUNcl7132wPxxWZfLbL6aTtX99c=;
  b=ifqFwcjzosPIACXs41EiqBd9MOlWyHRkIaX06IdoUEehh31yvKh2+58C
   wEj+XOtP0JgQ/EH5eNf7yVtVlHLoQ79up2CgVX95lgl7eYSMNm39ojmaM
   y5OCiPOXmhm0hlsHziT+5x5/Xf3XrgtwRaCkKjfVVefpgYSiAeut8p9aj
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: TtXDA0ONg0zB4imPwD6CLtxyuHHm1I96tSnPRl398FpKbpk7Af2z1y8E2fAHku/RucW6k0kY3P
 S1rBcaLI/FSNaTMFtuAVQB/EAjHR+qmS1/nA+RJwGPHyYU56m+9Vn7xcbpaUpf2emxv8VRA7Jf
 tMc4UbIgXOAvigD0AnbxPxP8KDyMAc1IEuq2Yw41MlM1catRC55unN1ikPQXMSlGzB54i1p1a8
 rtR/5DL6F9vvHOvTYMG/zBucORtPOF1sMcyyHddy/wdX1QI88ZStPqm1/PJbqVO8DRI+g12lBf
 A04=
X-SBRS: 5.1
X-MesageID: 47446882
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:vO3cIKx73XAkVg1w2ma1KrPxu+skLtp133Aq2lEZdPULSKKlfp
 GV88jziyWZtN9IYgBcpTiBUJPwJE80hqQFnbX5XI3SEDUO11HYVb2KgbGSoAEIXheOjNK1tp
 0QPJSWaueAdWSS5PySiGLTfrdB/DDEytHSuQ639QY1cegAUdAF0+4NMHf8LqQAfnggOXNWLu
 v/2uN34x6bPVgHZMWyAXcIG8LZocfQqZ7gaRkaQzY69Qinl1qTmfDHOind+i1bfyJEwL8k/2
 SAuRf+/L+fv/ayzQKZ/3PP7q5RhMDqxrJ4dY2xY4kuW3XRYzSTFcZcso65zXUISSaUmRIXee
 z30lQd1gJImjTsly+O0F3QMkLboUkTAjfZuCGlaD3Y0JTErL5RMbsbuWsRSGqp12Mw+N57y6
 5FxGSfqt5eCg7Bhj3045zSWwhtjVfcmwtorQc/tQ0XbWIlUs4YkWXfxjIgLL4QWCbhrIw3Gu
 hnC8/RoP5QbFOBdnjc+m1i2salUHg/FgqPBhFqgL3Z7xFG2HRii0cIzs0WmXkNsJo7Vplf/u
 zBdqBljqtHQMMaZb90QO0BXcy0AGrQRg+kChPZHb0mLtBwB5vpke+D3FwY3pDYRHU49upEpH
 2aaiIpiYcbQTOdNfGz
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47446882"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Ross Lagerwall
	<ross.lagerwall@citrix.com>
Subject: [XEN PATCH v6 28/31] build: rework test/livepatch/Makefile
Date: Thu, 1 Jul 2021 15:10:08 +0100
Message-ID: <20210701141011.785641-29-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This rework the livepatch/Makefile to make it less repetitive and make
use of the facilities. All the targets to be built are now listed in
$(extra-y) which will allow Rules.mk to build them without the need of
a local target in a future patch.

There are some changes/fixes in this patch:
- when "xen-syms" is used for a target, it is added to the dependency
  list of the target, which allow to rebuild the target when xen-syms
  changes. But if "xen-syms" is missing, make simply fails.
- modinfo.o wasn't removing it's $@.bin file like the other targets,
  this is now done.
- The command to build *.livepatch targets as been fixed to use
  $(XEN_LDFLAGS) rather than just $(LDFLAGS) which is a fallout from
  2740d96efdd3 ("xen/build: have the root Makefile generates the
  CFLAGS")

make will findout the dependencies of the *.livepatch files and thus
what to built by "looking" at the objects listed in the *-objs
variables. The actual dependencies is generated by the new
"multi_depend" macro.

"$(targets)" needs to be updated with the objects listed in the
different *-objs variables to allow make to load the .*.cmd dependency
files.

This patch copies the macro "multi_depend" from Linux 5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/scripts/Kbuild.include  |   9 ++
 xen/test/livepatch/Makefile | 213 ++++++++++++++----------------------
 2 files changed, 91 insertions(+), 131 deletions(-)

diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 5fe13a7c5abd..7cb55b181dcb 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -199,3 +199,12 @@ why =                                                                        \
 
 echo-why = $(call escsq, $(strip $(why)))
 endif
+
+# Useful for describing the dependency of composite objects
+# Usage:
+#   $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
+define multi_depend
+$(foreach m, $(notdir $1), \
+	$(eval $(obj)/$m: \
+	$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
+endef
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index 148dddb90473..e59245323e92 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -12,81 +12,29 @@ CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
 CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
 
 .PHONY: default
-
-LIVEPATCH := xen_hello_world.livepatch
-LIVEPATCH_BYE := xen_bye_world.livepatch
-LIVEPATCH_REPLACE := xen_replace_world.livepatch
-LIVEPATCH_NOP := xen_nop.livepatch
-LIVEPATCH_NO_XEN_BUILDID := xen_no_xen_buildid.livepatch
-LIVEPATCH_PREPOST_HOOKS := xen_prepost_hooks.livepatch
-LIVEPATCH_PREPOST_HOOKS_FAIL := xen_prepost_hooks_fail.livepatch
-LIVEPATCH_ACTION_HOOKS := xen_action_hooks.livepatch
-LIVEPATCH_ACTION_HOOKS_NOFUNC := xen_action_hooks_nofunc.livepatch
-LIVEPATCH_ACTION_HOOKS_MARKER:= xen_action_hooks_marker.livepatch
-LIVEPATCH_ACTION_HOOKS_NOAPPLY:= xen_action_hooks_noapply.livepatch
-LIVEPATCH_ACTION_HOOKS_NOREVERT:= xen_action_hooks_norevert.livepatch
-LIVEPATCH_EXPECTATIONS:= xen_expectations.livepatch
-LIVEPATCH_EXPECTATIONS_FAIL:= xen_expectations_fail.livepatch
-
-LIVEPATCHES += $(LIVEPATCH)
-LIVEPATCHES += $(LIVEPATCH_BYE)
-LIVEPATCHES += $(LIVEPATCH_REPLACE)
-LIVEPATCHES += $(LIVEPATCH_NOP)
-LIVEPATCHES += $(LIVEPATCH_NO_XEN_BUILDID)
-LIVEPATCHES += $(LIVEPATCH_PREPOST_HOOKS)
-LIVEPATCHES += $(LIVEPATCH_PREPOST_HOOKS_FAIL)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOFUNC)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_MARKER)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOAPPLY)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOREVERT)
-LIVEPATCHES += $(LIVEPATCH_EXPECTATIONS)
-LIVEPATCHES += $(LIVEPATCH_EXPECTATIONS_FAIL)
-
-LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch
-
 build default: livepatch
 
-install: livepatch
-	$(INSTALL_DIR) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
-	$(INSTALL_DATA) $(LIVEPATCHES) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
-
-uninstall:
-	cd $(DESTDIR)$(LIVEPATCH_DEBUG_DIR) && rm -f $(LIVEPATCHES)
-
-.PHONY: clean
-clean::
-	rm -f *.o .*.o.d *.livepatch config.h expect_config.h
+extra-y += xen_hello_world.livepatch
+xen_hello_world-objs := xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
+$(obj)/xen_hello_world.o: $(obj)/config.h
 
 #
 # To compute these values we need the binary files: xen-syms
 # and xen_hello_world_func.o to be already compiled.
 #
-.PHONY: config.h
-config.h: OLD_CODE_SZ=$(call CODE_SZ,$(BASEDIR)/xen-syms,xen_extra_version)
-config.h: NEW_CODE_SZ=$(call CODE_SZ,$<,xen_hello_world)
-config.h: MINOR_VERSION_SZ=$(call CODE_SZ,$(BASEDIR)/xen-syms,xen_minor_version)
-config.h: MINOR_VERSION_ADDR=$(call CODE_ADDR,$(BASEDIR)/xen-syms,xen_minor_version)
-config.h: xen_hello_world_func.o
+$(obj)/config.h: $(obj)/xen_hello_world_func.o
 	(set -e; \
-	 echo "#define NEW_CODE_SZ $(NEW_CODE_SZ)"; \
-	 echo "#define MINOR_VERSION_SZ $(MINOR_VERSION_SZ)"; \
-	 echo "#define MINOR_VERSION_ADDR $(MINOR_VERSION_ADDR)"; \
-	 echo "#define OLD_CODE_SZ $(OLD_CODE_SZ)") > $@
+	 echo "#define NEW_CODE_SZ $(call CODE_SZ,$<,xen_hello_world)"; \
+	 echo "#define MINOR_VERSION_SZ $(call CODE_SZ,$(BASEDIR)/xen-syms,xen_minor_version)"; \
+	 echo "#define MINOR_VERSION_ADDR $(call CODE_ADDR,$(BASEDIR)/xen-syms,xen_minor_version)"; \
+	 echo "#define OLD_CODE_SZ $(call CODE_SZ,$(BASEDIR)/xen-syms,xen_extra_version)") > $@
 
-xen_hello_world.o: config.h
-
-.PHONY: $(LIVEPATCH)
-$(LIVEPATCH): xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH) $^
-
-.PHONY: modinfo.o
-modinfo.o:
+$(obj)/modinfo.o:
 	(set -e; \
 	 printf "LIVEPATCH_RULEZ\0") > $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.modinfo,alloc,load,readonly,data,contents -S $@.bin $@
-	#rm -f $@.bin
+	rm -f $@.bin
 
 #
 # This target is only accessible if CONFIG_LIVEPATCH is defined, which
@@ -97,9 +45,8 @@ modinfo.o:
 # not be built (it is for EFI builds), and that we do not have
 # the note.o.bin to muck with (as it gets deleted)
 #
-.PHONY: note.o
-note.o:
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
+$(obj)/note.o: $(BASEDIR)/xen-syms
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
@@ -108,9 +55,8 @@ note.o:
 # Append .livepatch.xen_depends section
 # with Xen build-id derived from xen-syms.
 #
-.PHONY: xen_note.o
-xen_note.o:
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
+$(obj)/xen_note.o: $(BASEDIR)/xen-syms
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.xen_depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
@@ -119,102 +65,107 @@ xen_note.o:
 # Extract the build-id of the xen_hello_world.livepatch
 # (which xen_bye_world will depend on).
 #
-.PHONY: hello_world_note.o
-hello_world_note.o: $(LIVEPATCH)
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(LIVEPATCH) $@.bin
+$(obj)/hello_world_note.o: $(obj)/xen_hello_world.livepatch
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
 
-xen_bye_world.o: config.h
 
-.PHONY: $(LIVEPATCH_BYE)
-$(LIVEPATCH_BYE): xen_bye_world_func.o xen_bye_world.o hello_world_note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_BYE) $^
+extra-y += xen_bye_world.livepatch
+xen_bye_world-objs := xen_bye_world_func.o xen_bye_world.o hello_world_note.o xen_note.o
+$(obj)/xen_bye_world.o: $(obj)/config.h
 
-xen_replace_world.o: config.h
 
-.PHONY: $(LIVEPATCH_REPLACE)
-$(LIVEPATCH_REPLACE): xen_replace_world_func.o xen_replace_world.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_REPLACE) $^
+extra-y += xen_replace_world.livepatch
+xen_replace_world-objs := xen_replace_world_func.o xen_replace_world.o note.o xen_note.o
+$(obj)/xen_replace_world.o: $(obj)/config.h
 
-xen_nop.o: config.h
 
-.PHONY: $(LIVEPATCH_NOP)
-$(LIVEPATCH_NOP): xen_nop.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_NOP) $^
+extra-y += xen_nop.livepatch
+xen_nop-objs := xen_nop.o note.o xen_note.o
+$(obj)/xen_nop.o: $(obj)/config.h
 
 # This one always fails upon upload, because it deliberately
 # does not have a .livepatch.xen_depends (xen_note.o) section.
-xen_no_xen_buildid.o: config.h
-
-.PHONY: $(LIVEPATCH_NO_XEN_BUILDID)
-$(LIVEPATCH_NO_XEN_BUILDID): xen_nop.o note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_NO_XEN_BUILDID) $^
+extra-y += xen_no_xen_buildid.livepatch
+xen_no_xen_buildid-objs := xen_nop.o note.o
 
-xen_prepost_hooks.o: config.h
+$(obj)/xen_prepost_hooks.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_PREPOST_HOOKS)
-$(LIVEPATCH_PREPOST_HOOKS): xen_prepost_hooks.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_PREPOST_HOOKS) $^
+extra-y += xen_prepost_hooks.livepatch
+xen_prepost_hooks-objs := xen_prepost_hooks.o xen_hello_world_func.o note.o xen_note.o
 
-xen_prepost_hooks_fail.o: config.h
+$(obj)/xen_prepost_hooks_fail.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_PREPOST_HOOKS_FAIL)
-$(LIVEPATCH_PREPOST_HOOKS_FAIL): xen_prepost_hooks_fail.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_PREPOST_HOOKS_FAIL) $^
+extra-y += xen_prepost_hooks_fail.livepatch
+xen_prepost_hooks_fail-objs := xen_prepost_hooks_fail.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks.o: config.h
+$(obj)/xen_action_hooks.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS)
-$(LIVEPATCH_ACTION_HOOKS): xen_action_hooks.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS) $^
+extra-y += xen_action_hooks.livepatch
+xen_action_hooks-objs := xen_action_hooks.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks_nofunc.o: config.h
+$(obj)/xen_action_hooks_nofunc.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_NOFUNC)
-$(LIVEPATCH_ACTION_HOOKS_NOFUNC): xen_action_hooks_nofunc.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_NOFUNC) $^
+extra-y += xen_action_hooks_nofunc.livepatch
+xen_action_hooks_nofunc-objs := xen_action_hooks_nofunc.o note.o xen_note.o
 
-xen_action_hooks_marker.o: config.h
+$(obj)/xen_action_hooks_marker.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_MARKER)
-$(LIVEPATCH_ACTION_HOOKS_MARKER): xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_MARKER) $^
+extra-y += xen_action_hooks_marker.livepatch
+xen_action_hooks_marker-objs := xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks_noapply.o: config.h
+$(obj)/xen_action_hooks_noapply.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_NOAPPLY)
-$(LIVEPATCH_ACTION_HOOKS_NOAPPLY): xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_NOAPPLY) $^
+extra-y += xen_action_hooks_noapply.livepatch
+xen_action_hooks_noapply-objs := xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks_norevert.o: config.h
+$(obj)/xen_action_hooks_norevert.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_NOREVERT)
-$(LIVEPATCH_ACTION_HOOKS_NOREVERT): xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_NOREVERT) $^
+extra-y += xen_action_hooks_norevert.livepatch
+xen_action_hooks_norevert-objs := xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
 
 EXPECT_BYTES_COUNT := 8
 CODE_GET_EXPECT=$(shell $(OBJDUMP) -d --insn-width=1 $(1) | sed -n -e '/<'$(2)'>:$$/,/^$$/ p' | tail -n +2 | head -n $(EXPECT_BYTES_COUNT) | awk '{$$0=$$2; printf "%s", substr($$0,length-1)}' | sed 's/.\{2\}/0x&,/g' | sed 's/^/{/;s/,$$/}/g')
-.PHONY: expect_config.h
-expect_config.h: EXPECT_BYTES=$(call CODE_GET_EXPECT,$(BASEDIR)/xen-syms,xen_extra_version)
-expect_config.h:
+$(obj)/expect_config.h: $(BASEDIR)/xen-syms
 	(set -e; \
-	 echo "#define EXPECT_BYTES $(EXPECT_BYTES)"; \
+	 echo "#define EXPECT_BYTES $(call CODE_GET_EXPECT,$<,xen_extra_version)"; \
          echo "#define EXPECT_BYTES_COUNT $(EXPECT_BYTES_COUNT)") > $@
 
-xen_expectations.o: expect_config.h
+$(obj)/xen_expectations.o: $(obj)/expect_config.h
 
-.PHONY: $(LIVEPATCH_EXPECTATIONS)
-$(LIVEPATCH_EXPECTATIONS): xen_expectations.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_EXPECTATIONS) $^
+extra-y += xen_expectations.livepatch
+xen_expectations-objs := xen_expectations.o xen_hello_world_func.o note.o xen_note.o
 
-.PHONY: $(LIVEPATCH_EXPECTATIONS_FAIL)
-$(LIVEPATCH_EXPECTATIONS_FAIL): xen_expectations_fail.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_EXPECTATIONS_FAIL) $^
+extra-y += xen_expectations_fail.livepatch
+xen_expectations_fail-objs := xen_expectations_fail.o xen_hello_world_func.o note.o xen_note.o
+
+
+quiet_cmd_livepatch = LD      $@
+cmd_livepatch = $(LD) $(XEN_LDFLAGS) $(build_id_linker) -r -o $@ $(real-prereqs)
+
+$(obj)/%.livepatch: FORCE
+	$(call if_changed,livepatch)
+
+$(call multi_depend, $(filter %.livepatch,$(extra-y)), .livepatch, -objs)
+targets += $(sort $(foreach m,$(basename $(notdir $(filter %.livepatch,$(extra-y)))), \
+    $($(m)-objs)))
+
+LIVEPATCHES := $(filter %.livepatch,$(extra-y))
+
+LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch
 
 .PHONY: livepatch
-livepatch: $(LIVEPATCH) $(LIVEPATCH_BYE) $(LIVEPATCH_REPLACE) $(LIVEPATCH_NOP) $(LIVEPATCH_NO_XEN_BUILDID) \
-           $(LIVEPATCH_PREPOST_HOOKS) $(LIVEPATCH_PREPOST_HOOKS_FAIL) $(LIVEPATCH_ACTION_HOOKS) \
-           $(LIVEPATCH_ACTION_HOOKS_NOFUNC) $(LIVEPATCH_ACTION_HOOKS_MARKER) $(LIVEPATCH_ACTION_HOOKS_NOAPPLY) \
-           $(LIVEPATCH_ACTION_HOOKS_NOREVERT) $(LIVEPATCH_EXPECTATIONS) $(LIVEPATCH_EXPECTATIONS_FAIL)
+livepatch: $(LIVEPATCHES)
+
+install: $(addprefix $(obj)/,$(LIVEPATCHES))
+	$(INSTALL_DIR) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
+	$(INSTALL_DATA) $(addprefix $(obj)/,$(LIVEPATCHES)) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
+
+uninstall:
+	cd $(DESTDIR)$(LIVEPATCH_DEBUG_DIR) && rm -f $(LIVEPATCHES)
+
+.PHONY: clean
+clean::
+	rm -f *.o .*.o.d *.livepatch config.h expect_config.h
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148784.275072 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZX-0002jG-OV; Thu, 01 Jul 2021 14:21:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148784.275072; Thu, 01 Jul 2021 14:21:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZX-0002gM-8e; Thu, 01 Jul 2021 14:21:43 +0000
Received: by outflank-mailman (input) for mailman id 148784;
 Thu, 01 Jul 2021 14:21:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxRD-0005F9-Na
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:13:07 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3b5a5f69-da76-11eb-8329-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:31 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3b5a5f69-da76-11eb-8329-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148691;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=CtRalG/rFOQIYxbwoHgfh6QYWVwTFjvwiv9qJRymPB4=;
  b=BvC/kxtgp+ZZGHJ7RQnkw9TtvgRaLMN/k/BTi9tbkOenesMiE6m3bJFj
   /FvDOtvKznlFuLgy5UfHw85TWleo3JjVkGp76mEnsuES+ytaNRsfcDpWO
   WpnaEjj6/6oMTwCboedwv4YC3IdnMBeAC2vHuqzm3bLOhCoHK9DqL4Q2c
   I=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: hLraOvlV2hORj0lqUItCLBjZMvgB6Np5KQPQmbLQq7tRXZDkSZqLXMNuP5nJX0jwLPLTi+GI8h
 2wc2Rx6pQ3QQKSVTCRtnliw8GKo5seGDbzPoA8KRhfOde0K5cK7GRvOMmVihKoYULs7Tvu5m8y
 +p66ShJfuBdsQ6kzRQn2bMaIhoNd1yXwEkIVhcPSS0vEt/u7Rhk8tWEuWXbtUp1gQYTNBv4j8G
 Dqc6PmRbcbpZGEAJ0wPj/4YOScR8+96Q947kR0pTcQr13mJbEUF6HMVVEhgjM4ZP2q9V+anktx
 ZT8=
X-SBRS: 5.1
X-MesageID: 47755476
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:/igxba3JE7yzpCgXmBPKpAqjBIokLtp133Aq2lEZdPRUGvb3qy
 nIpoV86faUskdoZJhOo7C90cW7LU80sKQFhLX5Xo3SOzUO2lHYT72KhLGKq1aLdhEWtNQtsZ
 uIG5IOceEYZmIasS+V2maF+q4bsbu6zJw=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755476"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Subject: [XEN PATCH v6 24/31] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
Date: Thu, 1 Jul 2021 15:10:04 +0100
Message-ID: <20210701141011.785641-25-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This is to avoid arch/$arch/Makefile having to recurse into parents
directories.

This avoid duplication of the logic to build prelink.o between arches.

In order to do that, we cut the $(TARGET) target in the main Makefile in
two, there is a "prepare" phase/target runned before starting to build
"prelink.o" which will prepare "include/" among other things, the all
the $(ALL_OBJS) will be generated in order to build "prelink.o" and
finally $(TARGET) will be generated by calling into "arch/*/" to make
$(TARGET).

Now we don't need to prefix $(ALL_OBJS) with $(BASEDIR) as it is now
only used from the main Makefile. Other changes is using "$<" instead
of spelling "prelink.o" in the target "$(TARGET)" in both
arch/*/Makefile.

Beside "prelink.o" been at a different location, no other functional
change intended.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile          | 41 ++++++++++++++++++++++++++++++++++++++++-
 xen/Rules.mk          | 13 -------------
 xen/arch/arm/Makefile | 31 ++++---------------------------
 xen/arch/arm/arch.mk  |  2 ++
 xen/arch/x86/Makefile | 27 +++++----------------------
 xen/arch/x86/arch.mk  |  2 ++
 6 files changed, 53 insertions(+), 63 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 4c4990a753df..fd002ecd52d0 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -269,8 +269,21 @@ CFLAGS += -flto
 LDFLAGS-$(CONFIG_CC_IS_CLANG) += -plugin LLVMgold.so
 endif
 
+# Note that link order matters!
+ALL_OBJS-y               := common/built_in.o
+ALL_OBJS-y               += drivers/built_in.o
+ALL_OBJS-y               += lib/built_in.o
+ALL_OBJS-y               += xsm/built_in.o
+ALL_OBJS-y               += arch/$(TARGET_ARCH)/built_in.o
+ALL_OBJS-$(CONFIG_CRYPTO)   += crypto/built_in.o
+
+ALL_LIBS-y               := lib/lib.a
+
 include $(BASEDIR)/arch/$(TARGET_ARCH)/arch.mk
 
+export ALL_OBJS := $(ALL_OBJS-y)
+export ALL_LIBS := $(ALL_LIBS-y)
+
 # define new variables to avoid the ones defined in Config.mk
 export XEN_CFLAGS := $(CFLAGS)
 export XEN_AFLAGS := $(AFLAGS)
@@ -378,7 +391,8 @@ $(TARGET).gz: $(TARGET)
 	gzip -n -f -9 < $< > $@.new
 	mv $@.new $@
 
-$(TARGET): FORCE
+PHONY += prepare
+prepare:
 	$(MAKE) -C tools
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
@@ -389,6 +403,31 @@ $(TARGET): FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/arch-$(TARGET_ARCH)/asm/asm-offsets.h
+
+$(ALL_OBJS) $(ALL_LIBS): prepare
+
+# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
+# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
+# build head.o
+arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
+arch/arm/$(TARGET_SUBARCH)/head.o: ;
+
+ifeq ($(CONFIG_LTO),y)
+# Gather all LTO objects together
+prelink_lto.o: $(ALL_OBJS) $(ALL_LIBS)
+	$(LD_LTO) -r -o $@ $(filter-out %.a,$^) --start-group $(filter %.a,$^) --end-group
+
+# Link it with all the binary objects
+prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o FORCE
+	$(call if_changed,ld)
+else
+prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
+	$(call if_changed,ld)
+endif
+
+targets += prelink.o
+
+$(TARGET): prelink.o FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
 quiet_cmd_banner = BANNER  $@
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 894f2b83a04e..530aefa43ad9 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -11,25 +11,12 @@ include $(BASEDIR)/scripts/Kbuild.include
 
 TARGET := $(BASEDIR)/xen
 
-# Note that link order matters!
-ALL_OBJS-y               += $(BASEDIR)/common/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/drivers/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/lib/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/xsm/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/arch/$(TARGET_ARCH)/built_in.o
-ALL_OBJS-$(CONFIG_CRYPTO)   += $(BASEDIR)/crypto/built_in.o
-
-ALL_LIBS-y               := $(BASEDIR)/lib/lib.a
-
 # Initialise some variables
 lib-y :=
 targets :=
 CFLAGS-y :=
 AFLAGS-y :=
 
-ALL_OBJS := $(ALL_OBJS-y)
-ALL_LIBS := $(ALL_LIBS-y)
-
 SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                                             $(foreach w,1 2 4, \
                                                         rodata.str$(w).$(a)) \
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index dc1d09c8b429..067c0d9844e4 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -73,14 +73,6 @@ ifneq ($(CONFIG_DTB_FILE),"")
 obj-y += dtb.o
 endif
 
-ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
-
-# head.o is built by descending into the sub-directory, depends on the part of
-# $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and build
-# head.o
-$(TARGET_SUBARCH)/head.o: $(BASEDIR)/arch/arm/built_in.o
-$(TARGET_SUBARCH)/head.o: ;
-
 ifdef CONFIG_LIVEPATCH
 all_symbols = --all-symbols
 ifdef CONFIG_FAST_SYMBOL_LOOKUP
@@ -96,33 +88,18 @@ ifeq ($(CONFIG_ARM_64),y)
 	ln -sf $(@F) $@.efi
 endif
 
-ifeq ($(CONFIG_LTO),y)
-# Gather all LTO objects together
-prelink_lto.o: $(ALL_OBJS) $(ALL_LIBS)
-	$(LD_LTO) -r -o $@ $(filter-out %.a,$^) --start-group $(filter %.a,$^) --end-group
-
-# Link it with all the binary objects
-prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o
-	$(call if_changed,ld)
-else
-prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
-	$(call if_changed,ld)
-endif
-
-targets += prelink.o
-
-$(TARGET)-syms: prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o \
+$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index f54e602301be..8a2b202f698e 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -26,3 +26,5 @@ ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
         LDFLAGS += --fix-cortex-a53-843419
     endif
 endif
+
+ALL_OBJS-y := arch/arm/$(TARGET_SUBARCH)/head.o $(ALL_OBJS-y)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index d84062f48dfa..3bd302d28ccf 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -161,37 +161,20 @@ endif # $(XEN_BUILD_PE)
 
 endif # $(efi-y)
 
-ALL_OBJS := $(BASEDIR)/arch/x86/boot/built_in.o $(BASEDIR)/arch/x86/efi/built_in.o $(ALL_OBJS)
-
-ifeq ($(CONFIG_LTO),y)
-# Gather all LTO objects together
-prelink_lto.o: $(ALL_OBJS) $(ALL_LIBS)
-	$(LD_LTO) -r -o $@ $(filter-out %.a,$^) --start-group $(filter %.a,$^) --end-group
-
-# Link it with all the binary objects
-prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o FORCE
-	$(call if_changed,ld)
-else
-prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
-	$(call if_changed,ld)
-endif
-
-targets += prelink.o
-
-$(TARGET)-syms: prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
@@ -242,7 +225,7 @@ note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
 extra-y += efi.lds
-$(TARGET).efi: prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
+$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
 endif
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 5a4a1704636f..c95caa303db8 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -67,3 +67,5 @@ endif
 
 # Set up the assembler include path properly for older toolchains.
 CFLAGS += -Wa,-I$(BASEDIR)/include
+
+ALL_OBJS-y := arch/x86/boot/built_in.o arch/x86/efi/built_in.o $(ALL_OBJS-y)
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148785.275080 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZY-0002uU-P9; Thu, 01 Jul 2021 14:21:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148785.275080; Thu, 01 Jul 2021 14:21:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZY-0002rG-21; Thu, 01 Jul 2021 14:21:44 +0000
Received: by outflank-mailman (input) for mailman id 148785;
 Thu, 01 Jul 2021 14:21:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxRb-0005tj-5G
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:13:31 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5d4dca46-106a-46ea-9165-196c4265a912;
 Thu, 01 Jul 2021 14:11:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5d4dca46-106a-46ea-9165-196c4265a912
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148714;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=6rzhumebECyq+XiEsQEAKIp6M61wPTFJkWWEM129pgo=;
  b=AFGokSHhDEgAP8thXEvGJHRfizIv4LXicz2NLK2MyX95HscgnWKvB1d+
   8xjc4XMjk/c4a+yDhQdaLANMCR8dgs4lQvsVo1ROk+FxV45EtfNyPR7WO
   8jwJdsChaSv9HAH0A2vDe7MHgqfr5Q0C1xbskLI/ldec7eN6lUROWSYjI
   c=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: beZsAYtNPf2SM4Ps0NfM6EpbWKc4iQA7fVx7nNYGwHqBAdQC659W00WQSrlxFzDDBJoY9XD9Ro
 M8ZCP8a3zIeKsPnDGdPX3Wp6aTYC1+DqClpsg0mJdvUIbi/SfZcPcOIeg+UmpyBKKQY0VNK/NL
 +iHo3AVMih1F+amcAVNC5ChIVGBYZYZ6fbD7z/2BI3r5s+fSore5mYyyCAm0Sn4jTD/g7C3inT
 fwZBjnKWlAhcdbp3hs+1h/8JNcAlkbnY6VooLi9CQ31CwnY61U9FppeH1BH/4p+4q96ZAB7Fxc
 mMQ=
X-SBRS: 5.1
X-MesageID: 47376243
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:dtuHaKFnMr5sYYKKpLqE0MeALOsnbusQ8zAXP0AYc3Jom6uj5q
 aTdZUgpGfJYVkqOE3I9ertBEDEewK4yXcX2/h3AV7BZniEhILAFugLhuGO/9SjIVybygc079
 YYT0EUMrzN5DZB4voSmDPIceod/A==
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47376243"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Bob Eshleman
	<bobbyeshleman@gmail.com>, Alistair Francis <alistair.francis@wdc.com>,
	Connor Davis <connojdavis@gmail.com>
Subject: [XEN PATCH v6 31/31] build,riscv: tell the build system about riscv64/head.S
Date: Thu, 1 Jul 2021 15:10:11 +0100
Message-ID: <20210701141011.785641-32-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This allows to `make arch/riscv/riscv64/head.o`.

Example of rune on a fresh copy of the repository:
    make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu- KBUILD_DEFCONFIG=tiny64_defconfig arch/riscv/riscv64/head.o

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/riscv/riscv64/Makefile | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 xen/arch/riscv/riscv64/Makefile

diff --git a/xen/arch/riscv/riscv64/Makefile b/xen/arch/riscv/riscv64/Makefile
new file mode 100644
index 000000000000..15a4a65f6615
--- /dev/null
+++ b/xen/arch/riscv/riscv64/Makefile
@@ -0,0 +1 @@
+extra-y += head.o
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148786.275086 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZZ-00036P-DP; Thu, 01 Jul 2021 14:21:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148786.275086; Thu, 01 Jul 2021 14:21:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZZ-00033E-0w; Thu, 01 Jul 2021 14:21:45 +0000
Received: by outflank-mailman (input) for mailman id 148786;
 Thu, 01 Jul 2021 14:21:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQY-0005tj-3C
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:26 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 15a5bb7c-acdc-4168-94ea-f77cf4018776;
 Thu, 01 Jul 2021 14:11:00 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 15a5bb7c-acdc-4168-94ea-f77cf4018776
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148660;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=VYtJdbyxr0lMfwQQB1MSi1pDA6ObAawqWdtJQrYS9po=;
  b=RZ/AqPFO3RtE2bZM2a+6ZjsbgbADUyMHPIDxzmx6D5qKXQhpI1vjhDId
   RAUPCyKWq8X3Mugkan2g73J+wRj90HQHgOY3K0TP9T0a0EUu84Q3lfx/T
   GT+3ZCXDbjxdhjWhOe4heqipxkx69anfEIwsBU1CB+01THxdbpZ9JmznZ
   k=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: gCca3NaYK5NXXlP8zzfd2Es4Q6xWeJKic81AuQvAcHairi0uqKEAhynP3h64VNELTzpd3ikKwM
 vEVBgmeZRmBSvAyOtMBkdqIRtxmfnlfe8ZP0vs+dv+3xKahhvusr5uPnPLxK5aAub7l+1/oDfa
 BKz61EK8oqKIwfan9lo0UbG9P6X/ZIoT/8Os/0uk5ubJm4MfIUSkj7bEuX5Gusb7hwVKCGIHa3
 dTrlNQNp5zX7EXEdjmsk4Vqa3e0kpl+/WKUdJaFqvP2j4Syp3PEJqcmQEvlNOqc/MUrwC+xJxw
 2L4=
X-SBRS: 5.1
X-MesageID: 47384444
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:zoJpmqosS7oNlMtgtLh3LAYaV5rReYIsimQD101hICG9Evb0qy
 lhppQmPH7P+VIssRQb8+xoV5PufZqxz/BICOoqTNKftWvdyQiVxehZhOOP/9SJIUbDH4VmpM
 VdmsZFaeEZDTJB/LvHCAvTKadd/DFQmprY+ts3zB1WPH9Xg7kL1XYfNu4CeHcGPzWvA/ACZf
 yhz/sCnRWMU1INYP+2A3EUNtKz3eEixPrdEGc77wdM0nj3sQ+V
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47384444"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Jan Beulich
	<jbeulich@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 25/31] build: remove unneeded deps of x86_emulate.o
Date: Thu, 1 Jul 2021 15:10:05 +0100
Message-ID: <20210701141011.785641-26-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Those two dependencies already exist so make doesn't need to know
about them. The dependency will be generated by $(CC).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/Makefile | 1 -
 1 file changed, 1 deletion(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 3bd302d28ccf..fc719247eac9 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -84,7 +84,6 @@ extra-y += xen.lds
 ifneq ($(CONFIG_HVM),y)
 x86_emulate.o: CFLAGS-y += -Wno-unused-label
 endif
-x86_emulate.o: x86_emulate/x86_emulate.c x86_emulate/x86_emulate.h
 
 efi-y := $(shell if [ ! -r $(BASEDIR)/include/xen/compile.h -o \
                       -O $(BASEDIR)/include/xen/compile.h ]; then \
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148792.275101 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZb-0003gP-CC; Thu, 01 Jul 2021 14:21:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148792.275101; Thu, 01 Jul 2021 14:21:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZb-0003ed-14; Thu, 01 Jul 2021 14:21:47 +0000
Received: by outflank-mailman (input) for mailman id 148792;
 Thu, 01 Jul 2021 14:21:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxR8-0005F9-NK
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:13:02 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3b5a5f68-da76-11eb-8329-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:30 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3b5a5f68-da76-11eb-8329-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148690;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=dwFmFNnNGaBSF9VKRHGAEd86YUDOMJh2c843ZdLeZ+U=;
  b=UaT1H5wWuAlS8O4fXfRyOffTdO5CO12l8DM3eTC0PdaXiCVqRaylTdNa
   uRp9Cqq75uKmJsVkczMyS2ZNRI6MlcL8qazTZ/YGq64hDGxVQbAVr9Qjt
   dLY+e5K9ZAq0+8AJzcxh6X6tA9PkMo8xchxsKddHzMKZ4dNsaR2nmkGoY
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: j9+odOWZg4WcY/KWgEG94tzUNJeVT2HdKgX+qswkboAx+QonpZd9WL3w2XDUoAzi684TV5EWTb
 GOREf2oposR+Kt+yYxPmp/+USQMe37X2fPaofRQg72ypwUaIKEcmOl1XGtkfsdf2+37Q/XceCh
 GquF6WT4xVEVhSC7JWg95l1kleCPLNwV9EFwE4dkWcirzPHucNuUmjjdYqf6hwjoxa2WsQacUW
 +AszIaVkwXz3HCPSr31vNhycyAEc7xmH6jBIK+ZJVvmoEq0sHCr7cAN+nnGD+wvvzpxA4szQkK
 jIc=
X-SBRS: 5.1
X-MesageID: 47755474
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:/x1tbK+wxuMrCvGmQSZuk+DgI+orL9Y04lQ7vn2YSXRuHPBw8P
 re+sjztCWE8Ar5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQiVxehZhOOIqVDd8m/Fh4pgPM
 9bAtFD4bbLbGSS4/yU3ODBKadD/OW6
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755474"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Jan Beulich
	<jbeulich@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 23/31] build: fix arch/x86/node.o rule
Date: Thu, 1 Jul 2021 15:10:03 +0100
Message-ID: <20210701141011.785641-24-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Avoid different spelling for the location of "xen-syms", and simply
use the dependency variable. This avoid the assumption about $(TARGET)
value.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index d3e38e4e9f02..d84062f48dfa 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -199,7 +199,7 @@ $(TARGET)-syms: prelink.o xen.lds
 	rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
 
 note.o: $(TARGET)-syms
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id  $(BASEDIR)/xen-syms $@.bin
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
 		--rename-section=.data=.note.gnu.build-id -S $@.bin $@
 	rm -f $@.bin
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148800.275125 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZf-0004c3-GI; Thu, 01 Jul 2021 14:21:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148800.275125; Thu, 01 Jul 2021 14:21:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZf-0004aL-4a; Thu, 01 Jul 2021 14:21:51 +0000
Received: by outflank-mailman (input) for mailman id 148800;
 Thu, 01 Jul 2021 14:21:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQ9-0005tj-2T
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:01 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 14314842-9033-4700-8274-ee518aa90883;
 Thu, 01 Jul 2021 14:10:50 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 14314842-9033-4700-8274-ee518aa90883
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148650;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=wMjlawSRiHWoCe7r05Ixqb8i36LDLWl65IFqglV03NE=;
  b=do6jNoofOfnXTttEgepaHSGq5kt9anqnWGtjZzxTgkM1ZO2Ww799UQZS
   U2Jskkcj+nlx6MV6ZDNCC922rAWy78EW4af/Q/BntHTLpNTz4/2nnteGx
   bwYqmek8Sl4c/REyHmRYheBpy4WxRGE7BqFTHgJPmBZ/pabi4ropw4JZ7
   w=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: KgwEwwFdSBHbhudaD0OB5De4OnkPFINgasweJBn6pR6QQ/NUuqOlmp6gehc6fy/LN+yub+3WJp
 XzCi6DTGhEu2+nsdMT897ZyEx0H4InQTwmoIdV1NSD+tkJuJukgjQAiDSUh6yJ5FJnlNrK6CGE
 +4XHn1lDokFsEGeECg0IcP3OgBEJzWfrILQYCdTmveOxs51UaT4L+4XEyqfohwOw//jC/U2Y/o
 MhY+W9uwbqDrplUwc2mHnf3OOczOxMwr2FrI80eYKHZhZOCI56swkvU7KcnBHSyTGtwvDSlDQu
 sfY=
X-SBRS: 5.1
X-MesageID: 47446833
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:8nisKqj4p6cD5EExsIYXmfKnd3BQXgkji2hC6mlwRA09TyVXrb
 HMoB19726OtN/LYgBZpTnkAsK9qBznhPlICOUqUotKGTOKhILKFvAa0WKB+UyEJ8SWzIc06U
 4jScRD4fLLfDxHZK3BjjVQfexB/DEPm5rDuQ9Rp00dMD2Dt8lbnn1EIzfeMEF7XTNLAodRLv
 uhDrMtnUvHRZ1uVLXYOkU4
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47446833"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Tamas K Lengyel <tamas@tklengyel.com>, Alexandru Isaila
	<aisaila@bitdefender.com>, Petre Pircalabu <ppircalabu@bitdefender.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>, "Konrad
 Rzeszutek Wilk" <konrad.wilk@oracle.com>, Ross Lagerwall
	<ross.lagerwall@citrix.com>, Paul Durrant <paul@xen.org>, Jun Nakajima
	<jun.nakajima@intel.com>, "Kevin Tian" <kevin.tian@intel.com>, Lukasz
 Hawrylko <lukasz.hawrylko@linux.intel.com>, Bob Eshleman
	<bobbyeshleman@gmail.com>, Alistair Francis <alistair.francis@wdc.com>,
	Connor Davis <connojdavis@gmail.com>
Subject: [XEN PATCH v6 18/31] xen: move include/asm-* to include/arch-*/asm
Date: Thu, 1 Jul 2021 15:09:58 +0100
Message-ID: <20210701141011.785641-19-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

This avoid the need to create the symbolic link "include/asm".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Other possible locations that I could think of:
include/arch/*/asm
arch/*/include/asm
---
 .gitignore                                    |  5 ++-
 MAINTAINERS                                   | 36 +++++++++----------
 tools/include/Makefile                        |  2 +-
 tools/misc/xen-access.c                       |  4 +--
 tools/tests/vhpet/Makefile                    |  2 +-
 xen/Makefile                                  | 13 ++++---
 xen/arch/arm/README.LinuxPrimitives           | 10 +++---
 xen/arch/arm/arch.mk                          |  1 +
 xen/arch/arm/arm32/head.S                     |  2 +-
 xen/arch/arm/arm64/head.S                     |  2 +-
 xen/arch/arm/smpboot.c                        |  2 +-
 xen/arch/arm/vpsci.c                          |  2 +-
 xen/arch/x86/Makefile                         |  6 ++--
 xen/arch/x86/arch.mk                          |  5 +--
 xen/common/efi/runtime.c                      | 14 ++++----
 xen/common/page_alloc.c                       |  2 +-
 xen/include/{asm-arm => arch-arm/asm}/acpi.h  |  0
 .../{asm-arm => arch-arm/asm}/alternative.h   |  0
 .../{asm-arm => arch-arm/asm}/altp2m.h        |  0
 .../{asm-arm => arch-arm/asm}/arm32/atomic.h  |  0
 .../{asm-arm => arch-arm/asm}/arm32/bitops.h  |  0
 .../{asm-arm => arch-arm/asm}/arm32/bug.h     |  0
 .../{asm-arm => arch-arm/asm}/arm32/cmpxchg.h |  0
 .../asm}/arm32/flushtlb.h                     |  0
 .../{asm-arm => arch-arm/asm}/arm32/insn.h    |  0
 .../{asm-arm => arch-arm/asm}/arm32/io.h      |  0
 .../{asm-arm => arch-arm/asm}/arm32/macros.h  |  0
 .../{asm-arm => arch-arm/asm}/arm32/mm.h      |  0
 .../{asm-arm => arch-arm/asm}/arm32/page.h    |  0
 .../asm}/arm32/processor.h                    |  0
 .../{asm-arm => arch-arm/asm}/arm32/sysregs.h |  0
 .../{asm-arm => arch-arm/asm}/arm32/system.h  |  0
 .../{asm-arm => arch-arm/asm}/arm32/traps.h   |  0
 .../{asm-arm => arch-arm/asm}/arm32/vfp.h     |  0
 .../{asm-arm => arch-arm/asm}/arm64/atomic.h  |  0
 .../{asm-arm => arch-arm/asm}/arm64/bitops.h  |  0
 .../{asm-arm => arch-arm/asm}/arm64/brk.h     |  0
 .../{asm-arm => arch-arm/asm}/arm64/bug.h     |  0
 .../{asm-arm => arch-arm/asm}/arm64/cmpxchg.h |  0
 .../{asm-arm => arch-arm/asm}/arm64/efibind.h |  0
 .../asm}/arm64/flushtlb.h                     |  0
 .../{asm-arm => arch-arm/asm}/arm64/hsr.h     |  0
 .../{asm-arm => arch-arm/asm}/arm64/insn.h    |  0
 .../{asm-arm => arch-arm/asm}/arm64/io.h      |  0
 .../{asm-arm => arch-arm/asm}/arm64/macros.h  |  0
 .../{asm-arm => arch-arm/asm}/arm64/mm.h      |  0
 .../{asm-arm => arch-arm/asm}/arm64/page.h    |  0
 .../asm}/arm64/processor.h                    |  0
 .../{asm-arm => arch-arm/asm}/arm64/sysregs.h |  0
 .../{asm-arm => arch-arm/asm}/arm64/system.h  |  0
 .../{asm-arm => arch-arm/asm}/arm64/traps.h   |  0
 .../{asm-arm => arch-arm/asm}/arm64/vfp.h     |  0
 .../{asm-arm => arch-arm/asm}/asm_defns.h     |  0
 .../{asm-arm => arch-arm/asm}/atomic.h        |  0
 .../{asm-arm => arch-arm/asm}/bitops.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/bug.h   |  0
 .../{asm-arm => arch-arm/asm}/byteorder.h     |  0
 xen/include/{asm-arm => arch-arm/asm}/cache.h |  0
 .../{asm-arm => arch-arm/asm}/cadence-uart.h  |  0
 .../{asm-arm => arch-arm/asm}/config.h        |  0
 .../{asm-arm => arch-arm/asm}/cpregs.h        |  0
 .../{asm-arm => arch-arm/asm}/cpuerrata.h     |  0
 .../{asm-arm => arch-arm/asm}/cpufeature.h    |  0
 .../{asm-arm => arch-arm/asm}/current.h       |  0
 .../{asm-arm => arch-arm/asm}/debugger.h      |  0
 xen/include/{asm-arm => arch-arm/asm}/delay.h |  0
 xen/include/{asm-arm => arch-arm/asm}/desc.h  |  0
 .../{asm-arm => arch-arm/asm}/device.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/div64.h |  0
 .../{asm-arm => arch-arm/asm}/domain.h        |  0
 .../{asm-arm => arch-arm/asm}/domain_build.h  |  0
 .../{asm-arm => arch-arm/asm}/early_printk.h  |  0
 .../{asm-arm => arch-arm/asm}/efibind.h       |  0
 xen/include/{asm-arm => arch-arm/asm}/elf.h   |  0
 xen/include/{asm-arm => arch-arm/asm}/event.h |  0
 .../asm}/exynos4210-uart.h                    |  0
 .../{asm-arm => arch-arm/asm}/flushtlb.h      |  0
 xen/include/{asm-arm => arch-arm/asm}/gic.h   |  0
 .../{asm-arm => arch-arm/asm}/gic_v3_defs.h   |  0
 .../{asm-arm => arch-arm/asm}/gic_v3_its.h    |  0
 .../{asm-arm => arch-arm/asm}/grant_table.h   |  0
 .../{asm-arm => arch-arm/asm}/guest_access.h  |  0
 .../{asm-arm => arch-arm/asm}/guest_atomics.h |  0
 .../{asm-arm => arch-arm/asm}/guest_walk.h    |  0
 .../{asm-arm => arch-arm/asm}/hardirq.h       |  0
 xen/include/{asm-arm => arch-arm/asm}/hsr.h   |  0
 .../{asm-arm => arch-arm/asm}/hypercall.h     |  0
 xen/include/{asm-arm => arch-arm/asm}/init.h  |  0
 xen/include/{asm-arm => arch-arm/asm}/insn.h  |  0
 xen/include/{asm-arm => arch-arm/asm}/io.h    |  0
 xen/include/{asm-arm => arch-arm/asm}/iocap.h |  0
 xen/include/{asm-arm => arch-arm/asm}/iommu.h |  0
 .../{asm-arm => arch-arm/asm}/iommu_fwspec.h  |  0
 xen/include/{asm-arm => arch-arm/asm}/ioreq.h |  0
 xen/include/{asm-arm => arch-arm/asm}/irq.h   |  0
 .../{asm-arm => arch-arm/asm}/kernel.h        |  0
 .../{asm-arm => arch-arm/asm}/livepatch.h     |  0
 xen/include/{asm-arm => arch-arm/asm}/lpae.h  |  0
 .../{asm-arm => arch-arm/asm}/macros.h        |  0
 .../{asm-arm => arch-arm/asm}/mem_access.h    |  0
 xen/include/{asm-arm => arch-arm/asm}/mm.h    |  0
 xen/include/{asm-arm => arch-arm/asm}/mmio.h  |  0
 .../{asm-arm => arch-arm/asm}/monitor.h       |  0
 .../{asm-arm => arch-arm/asm}/new_vgic.h      |  0
 .../{asm-arm => arch-arm/asm}/nospec.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/numa.h  |  0
 xen/include/{asm-arm => arch-arm/asm}/p2m.h   |  0
 .../{asm-arm => arch-arm/asm}/page-bits.h     |  0
 xen/include/{asm-arm => arch-arm/asm}/page.h  |  0
 .../{asm-arm => arch-arm/asm}/paging.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/pci.h   |  0
 .../{asm-arm => arch-arm/asm}/percpu.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/perfc.h |  0
 .../{asm-arm => arch-arm/asm}/perfc_defn.h    |  0
 .../{asm-arm => arch-arm/asm}/pl011-uart.h    |  0
 .../{asm-arm => arch-arm/asm}/platform.h      |  0
 .../asm}/platforms/exynos5.h                  |  0
 .../asm}/platforms/midway.h                   |  0
 .../asm}/platforms/omap5.h                    |  0
 .../asm}/platforms/vexpress.h                 |  0
 .../asm}/platforms/xilinx-zynqmp-eemi.h       |  0
 .../{asm-arm => arch-arm/asm}/processor.h     |  0
 .../{asm-arm => arch-arm/asm}/procinfo.h      |  0
 xen/include/{asm-arm => arch-arm/asm}/psci.h  |  0
 .../{asm-arm => arch-arm/asm}/random.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/regs.h  |  0
 .../{asm-arm => arch-arm/asm}/scif-uart.h     |  0
 xen/include/{asm-arm => arch-arm/asm}/setup.h |  0
 .../{asm-arm => arch-arm/asm}/short-desc.h    |  0
 xen/include/{asm-arm => arch-arm/asm}/smccc.h |  0
 xen/include/{asm-arm => arch-arm/asm}/smp.h   |  0
 .../{asm-arm => arch-arm/asm}/softirq.h       |  0
 .../{asm-arm => arch-arm/asm}/spinlock.h      |  0
 .../{asm-arm => arch-arm/asm}/string.h        |  0
 .../{asm-arm => arch-arm/asm}/sysregs.h       |  0
 .../{asm-arm => arch-arm/asm}/system.h        |  0
 .../{asm-arm => arch-arm/asm}/tee/optee_msg.h |  0
 .../asm}/tee/optee_rpc_cmd.h                  |  0
 .../{asm-arm => arch-arm/asm}/tee/optee_smc.h |  0
 .../{asm-arm => arch-arm/asm}/tee/tee.h       |  0
 xen/include/{asm-arm => arch-arm/asm}/time.h  |  0
 xen/include/{asm-arm => arch-arm/asm}/trace.h |  0
 xen/include/{asm-arm => arch-arm/asm}/traps.h |  0
 xen/include/{asm-arm => arch-arm/asm}/types.h |  0
 xen/include/{asm-arm => arch-arm/asm}/vfp.h   |  0
 .../{asm-arm => arch-arm/asm}/vgic-emul.h     |  0
 xen/include/{asm-arm => arch-arm/asm}/vgic.h  |  0
 .../{asm-arm => arch-arm/asm}/vm_event.h      |  0
 .../{asm-arm => arch-arm/asm}/vpl011.h        |  0
 xen/include/{asm-arm => arch-arm/asm}/vpsci.h |  0
 xen/include/{asm-arm => arch-arm/asm}/vreg.h  |  0
 .../{asm-arm => arch-arm/asm}/vtimer.h        |  0
 .../{asm-arm => arch-arm/asm}/xenoprof.h      |  0
 .../{asm-riscv => arch-riscv/asm}/config.h    |  0
 xen/include/{asm-x86 => arch-x86/asm}/acpi.h  |  0
 .../asm}/alternative-asm.h                    |  0
 .../{asm-x86 => arch-x86/asm}/alternative.h   |  0
 .../{asm-x86 => arch-x86/asm}/altp2m.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/amd.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/apic.h  |  0
 .../{asm-x86 => arch-x86/asm}/apicdef.h       |  0
 .../{asm-x86 => arch-x86/asm}/asm-defns.h     |  0
 .../{asm-x86 => arch-x86/asm}/asm_defns.h     |  0
 .../{asm-x86 => arch-x86/asm}/atomic.h        |  0
 .../{asm-x86 => arch-x86/asm}/bitops.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/bug.h   |  0
 .../{asm-x86 => arch-x86/asm}/byteorder.h     |  0
 .../{asm-x86 => arch-x86/asm}/bzimage.h       |  0
 xen/include/{asm-x86 => arch-x86/asm}/cache.h |  0
 .../{asm-x86 => arch-x86/asm}/compat.h        |  0
 .../{asm-x86 => arch-x86/asm}/config.h        |  0
 .../{asm-x86 => arch-x86/asm}/cpufeature.h    |  0
 .../{asm-x86 => arch-x86/asm}/cpufeatures.h   |  0
 .../{asm-x86 => arch-x86/asm}/cpufeatureset.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/cpuid.h |  0
 .../{asm-x86 => arch-x86/asm}/cpuidle.h       |  0
 .../{asm-x86 => arch-x86/asm}/current.h       |  2 +-
 .../{asm-x86 => arch-x86/asm}/debugger.h      |  0
 .../{asm-x86 => arch-x86/asm}/debugreg.h      |  0
 xen/include/{asm-x86 => arch-x86/asm}/delay.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/desc.h  |  0
 .../{asm-x86 => arch-x86/asm}/device.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/div64.h |  0
 .../{asm-x86 => arch-x86/asm}/dom0_build.h    |  0
 .../{asm-x86 => arch-x86/asm}/domain.h        |  2 +-
 xen/include/{asm-x86 => arch-x86/asm}/e820.h  |  0
 xen/include/{asm-x86 => arch-x86/asm}/edd.h   |  0
 .../{asm-x86 => arch-x86/asm}/efibind.h       |  0
 xen/include/{asm-x86 => arch-x86/asm}/elf.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/event.h |  0
 .../{asm-x86 => arch-x86/asm}/fixmap.h        |  0
 .../{asm-x86 => arch-x86/asm}/flushtlb.h      |  0
 .../{asm-x86 => arch-x86/asm}/genapic.h       |  0
 .../{asm-x86 => arch-x86/asm}/grant_table.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/guest.h |  0
 .../asm}/guest/hyperv-hcall.h                 |  0
 .../asm}/guest/hyperv-tlfs.h                  |  0
 .../{asm-x86 => arch-x86/asm}/guest/hyperv.h  |  0
 .../asm}/guest/hypervisor.h                   |  0
 .../asm}/guest/pvh-boot.h                     |  0
 .../asm}/guest/xen-hcall.h                    |  0
 .../{asm-x86 => arch-x86/asm}/guest/xen.h     |  0
 .../{asm-x86 => arch-x86/asm}/guest_access.h  |  0
 .../{asm-x86 => arch-x86/asm}/guest_atomics.h |  0
 .../{asm-x86 => arch-x86/asm}/guest_pt.h      |  0
 xen/include/{asm-x86 => arch-x86/asm}/hap.h   |  0
 .../{asm-x86 => arch-x86/asm}/hardirq.h       |  0
 xen/include/{asm-x86 => arch-x86/asm}/hpet.h  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/asid.h      |  0
 .../{asm-x86 => arch-x86/asm}/hvm/cacheattr.h |  0
 .../{asm-x86 => arch-x86/asm}/hvm/domain.h    |  0
 .../{asm-x86 => arch-x86/asm}/hvm/emulate.h   |  0
 .../asm}/hvm/grant_table.h                    |  0
 .../asm}/hvm/guest_access.h                   |  0
 .../{asm-x86 => arch-x86/asm}/hvm/hvm.h       |  0
 .../{asm-x86 => arch-x86/asm}/hvm/io.h        |  0
 .../{asm-x86 => arch-x86/asm}/hvm/ioreq.h     |  0
 .../{asm-x86 => arch-x86/asm}/hvm/irq.h       |  0
 .../{asm-x86 => arch-x86/asm}/hvm/monitor.h   |  0
 .../{asm-x86 => arch-x86/asm}/hvm/nestedhvm.h |  0
 .../{asm-x86 => arch-x86/asm}/hvm/save.h      |  0
 .../{asm-x86 => arch-x86/asm}/hvm/support.h   |  0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/asid.h  |  0
 .../asm}/hvm/svm/emulate.h                    |  0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/intr.h  |  0
 .../asm}/hvm/svm/nestedsvm.h                  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/svm.h   |  0
 .../asm}/hvm/svm/svmdebug.h                   |  0
 .../{asm-x86 => arch-x86/asm}/hvm/svm/vmcb.h  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/trace.h     |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vcpu.h      |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vioapic.h   |  0
 .../{asm-x86 => arch-x86/asm}/hvm/viridian.h  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vlapic.h    |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vm_event.h  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vmx/vmcs.h  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vmx/vmx.h   |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vmx/vvmx.h  |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vpic.h      |  0
 .../{asm-x86 => arch-x86/asm}/hvm/vpt.h       |  0
 .../{asm-x86 => arch-x86/asm}/hypercall.h     |  0
 xen/include/{asm-x86 => arch-x86/asm}/i387.h  |  0
 xen/include/{asm-x86 => arch-x86/asm}/init.h  |  0
 .../{asm-x86 => arch-x86/asm}/invpcid.h       |  0
 xen/include/{asm-x86 => arch-x86/asm}/io.h    |  0
 .../{asm-x86 => arch-x86/asm}/io_apic.h       |  0
 xen/include/{asm-x86 => arch-x86/asm}/iocap.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/iommu.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/ioreq.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/irq.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/ldt.h   |  0
 .../{asm-x86 => arch-x86/asm}/livepatch.h     |  0
 .../asm}/mach-default/bios_ebda.h             |  0
 .../asm}/mach-default/io_ports.h              |  0
 .../asm}/mach-default/irq_vectors.h           |  0
 .../asm}/mach-default/mach_mpparse.h          |  0
 .../asm}/mach-default/mach_mpspec.h           |  0
 .../asm}/mach-generic/mach_apic.h             |  0
 .../asm}/mach-generic/mach_mpparse.h          |  0
 .../{asm-x86 => arch-x86/asm}/machine_kexec.h |  0
 .../{asm-x86 => arch-x86/asm}/mc146818rtc.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/mce.h   |  0
 .../{asm-x86 => arch-x86/asm}/mem_access.h    |  0
 .../{asm-x86 => arch-x86/asm}/mem_paging.h    |  0
 .../{asm-x86 => arch-x86/asm}/mem_sharing.h   |  0
 .../{asm-x86 => arch-x86/asm}/microcode.h     |  0
 xen/include/{asm-x86 => arch-x86/asm}/mm.h    |  0
 .../{asm-x86 => arch-x86/asm}/monitor.h       |  0
 .../{asm-x86 => arch-x86/asm}/mpspec.h        |  0
 .../{asm-x86 => arch-x86/asm}/mpspec_def.h    |  0
 xen/include/{asm-x86 => arch-x86/asm}/msi.h   |  0
 .../{asm-x86 => arch-x86/asm}/msr-index.h     |  0
 xen/include/{asm-x86 => arch-x86/asm}/msr.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/mtrr.h  |  0
 .../{asm-x86 => arch-x86/asm}/multicall.h     |  0
 xen/include/{asm-x86 => arch-x86/asm}/mwait.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/nmi.h   |  0
 xen/include/{asm-x86 => arch-x86/asm}/nops.h  |  0
 .../{asm-x86 => arch-x86/asm}/nospec.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/numa.h  |  0
 xen/include/{asm-x86 => arch-x86/asm}/p2m.h   |  0
 .../{asm-x86 => arch-x86/asm}/page-bits.h     |  0
 xen/include/{asm-x86 => arch-x86/asm}/page.h  |  0
 .../{asm-x86 => arch-x86/asm}/paging.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/pci.h   |  0
 .../{asm-x86 => arch-x86/asm}/percpu.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/perfc.h |  0
 .../{asm-x86 => arch-x86/asm}/perfc_defn.h    |  0
 .../{asm-x86 => arch-x86/asm}/processor.h     |  0
 xen/include/{asm-x86 => arch-x86/asm}/psr.h   |  0
 .../{asm-x86 => arch-x86/asm}/pv/domain.h     |  0
 .../asm}/pv/grant_table.h                     |  0
 xen/include/{asm-x86 => arch-x86/asm}/pv/mm.h |  0
 .../{asm-x86 => arch-x86/asm}/pv/shim.h       |  0
 .../{asm-x86 => arch-x86/asm}/pv/traps.h      |  0
 .../{asm-x86 => arch-x86/asm}/random.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/regs.h  |  0
 xen/include/{asm-x86 => arch-x86/asm}/setup.h |  0
 .../{asm-x86 => arch-x86/asm}/shadow.h        |  0
 .../{asm-x86 => arch-x86/asm}/shared.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/smp.h   |  0
 .../{asm-x86 => arch-x86/asm}/softirq.h       |  0
 .../{asm-x86 => arch-x86/asm}/spec_ctrl.h     |  0
 .../{asm-x86 => arch-x86/asm}/spec_ctrl_asm.h |  0
 .../{asm-x86 => arch-x86/asm}/spinlock.h      |  0
 .../{asm-x86 => arch-x86/asm}/string.h        |  0
 .../{asm-x86 => arch-x86/asm}/system.h        |  0
 xen/include/{asm-x86 => arch-x86/asm}/tboot.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/time.h  |  0
 xen/include/{asm-x86 => arch-x86/asm}/trace.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/traps.h |  0
 xen/include/{asm-x86 => arch-x86/asm}/types.h |  0
 .../{asm-x86 => arch-x86/asm}/uaccess.h       |  0
 .../{asm-x86 => arch-x86/asm}/unaligned.h     |  0
 .../{asm-x86 => arch-x86/asm}/vm_event.h      |  0
 xen/include/{asm-x86 => arch-x86/asm}/vpmu.h  |  0
 .../{asm-x86 => arch-x86/asm}/x86-defns.h     |  0
 .../{asm-x86 => arch-x86/asm}/x86-vendors.h   |  0
 .../asm}/x86_64/efibind.h                     |  0
 .../{asm-x86 => arch-x86/asm}/x86_64/elf.h    |  0
 .../{asm-x86 => arch-x86/asm}/x86_64/page.h   |  0
 .../{asm-x86 => arch-x86/asm}/x86_64/regs.h   |  0
 .../{asm-x86 => arch-x86/asm}/x86_64/system.h |  0
 .../asm}/x86_64/uaccess.h                     |  0
 .../{asm-x86 => arch-x86/asm}/x86_emulate.h   |  0
 .../{asm-x86 => arch-x86/asm}/xenoprof.h      |  0
 .../{asm-x86 => arch-x86/asm}/xstate.h        |  0
 xen/include/xen/acpi.h                        |  4 +--
 xen/include/xen/bitmap.h                      |  2 +-
 329 files changed, 59 insertions(+), 59 deletions(-)
 rename xen/include/{asm-arm => arch-arm/asm}/acpi.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/alternative.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/altp2m.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/atomic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/bitops.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/bug.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/cmpxchg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/flushtlb.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/insn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/io.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/macros.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/mm.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/page.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/processor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/sysregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/system.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/traps.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm32/vfp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/atomic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/bitops.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/brk.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/bug.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/cmpxchg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/efibind.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/flushtlb.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/hsr.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/insn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/io.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/macros.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/mm.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/page.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/processor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/sysregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/system.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/traps.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/arm64/vfp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/asm_defns.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/atomic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/bitops.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/bug.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/byteorder.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cache.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cadence-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/config.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cpregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cpuerrata.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/cpufeature.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/current.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/debugger.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/delay.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/desc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/device.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/div64.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/domain.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/domain_build.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/early_printk.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/efibind.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/elf.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/event.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/exynos4210-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/flushtlb.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/gic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/gic_v3_defs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/gic_v3_its.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/grant_table.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/guest_access.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/guest_atomics.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/guest_walk.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/hardirq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/hsr.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/hypercall.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/init.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/insn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/io.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/iocap.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/iommu.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/iommu_fwspec.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/ioreq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/irq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/kernel.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/livepatch.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/lpae.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/macros.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/mem_access.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/mm.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/mmio.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/monitor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/new_vgic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/nospec.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/numa.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/p2m.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/page-bits.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/page.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/paging.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/pci.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/percpu.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/perfc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/perfc_defn.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/pl011-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platform.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/exynos5.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/midway.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/omap5.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/vexpress.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/platforms/xilinx-zynqmp-eemi.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/processor.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/procinfo.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/psci.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/random.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/regs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/scif-uart.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/setup.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/short-desc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/smccc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/smp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/softirq.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/spinlock.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/string.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/sysregs.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/system.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/optee_msg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/optee_rpc_cmd.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/optee_smc.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/tee/tee.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/time.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/trace.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/traps.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/types.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vfp.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vgic-emul.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vgic.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vm_event.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vpl011.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vpsci.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vreg.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/vtimer.h (100%)
 rename xen/include/{asm-arm => arch-arm/asm}/xenoprof.h (100%)
 rename xen/include/{asm-riscv => arch-riscv/asm}/config.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/acpi.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/alternative-asm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/alternative.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/altp2m.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/amd.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/apic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/apicdef.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/asm-defns.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/asm_defns.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/atomic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/bitops.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/bug.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/byteorder.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/bzimage.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cache.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/compat.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/config.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpufeature.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpufeatures.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpufeatureset.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpuid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/cpuidle.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/current.h (99%)
 rename xen/include/{asm-x86 => arch-x86/asm}/debugger.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/debugreg.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/delay.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/desc.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/device.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/div64.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/dom0_build.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/domain.h (99%)
 rename xen/include/{asm-x86 => arch-x86/asm}/e820.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/edd.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/efibind.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/elf.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/event.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/fixmap.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/flushtlb.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/genapic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/grant_table.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hyperv-hcall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hyperv-tlfs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hyperv.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/hypervisor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/pvh-boot.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/xen-hcall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest/xen.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest_access.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest_atomics.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/guest_pt.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hap.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hardirq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hpet.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/asid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/cacheattr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/domain.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/emulate.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/grant_table.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/guest_access.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/hvm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/io.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/ioreq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/irq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/monitor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/nestedhvm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/save.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/support.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/asid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/emulate.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/intr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/nestedsvm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/svm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/svmdebug.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/svm/vmcb.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/trace.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vcpu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vioapic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/viridian.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vlapic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vm_event.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vmx/vmcs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vmx/vmx.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vmx/vvmx.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vpic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hvm/vpt.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/hypercall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/i387.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/init.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/invpcid.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/io.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/io_apic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/iocap.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/iommu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/ioreq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/irq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/ldt.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/livepatch.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/bios_ebda.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/io_ports.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/irq_vectors.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/mach_mpparse.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-default/mach_mpspec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-generic/mach_apic.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mach-generic/mach_mpparse.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/machine_kexec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mc146818rtc.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mce.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mem_access.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mem_paging.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mem_sharing.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/microcode.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/monitor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mpspec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mpspec_def.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/msi.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/msr-index.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/msr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mtrr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/multicall.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/mwait.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/nmi.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/nops.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/nospec.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/numa.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/p2m.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/page-bits.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/page.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/paging.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pci.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/percpu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/perfc.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/perfc_defn.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/processor.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/psr.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/domain.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/grant_table.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/mm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/shim.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/pv/traps.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/random.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/regs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/setup.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/shadow.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/shared.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/smp.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/softirq.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/spec_ctrl.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/spec_ctrl_asm.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/spinlock.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/string.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/system.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/tboot.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/time.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/trace.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/traps.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/types.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/uaccess.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/unaligned.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/vm_event.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/vpmu.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86-defns.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86-vendors.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/efibind.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/elf.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/page.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/regs.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/system.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_64/uaccess.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/x86_emulate.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/xenoprof.h (100%)
 rename xen/include/{asm-x86 => arch-x86/asm}/xstate.h (100%)

diff --git a/.gitignore b/.gitignore
index 38a085e398e3..91ae22ae9216 100644
--- a/.gitignore
+++ b/.gitignore
@@ -328,9 +328,8 @@ xen/asm-offsets.s
 xen/common/config_data.S
 xen/common/config.gz
 xen/include/headers*.chk
-xen/include/asm
-xen/include/asm-*/asm-offsets.h
-xen/include/asm-x86/asm-macros.h
+xen/include/arch-*/asm/asm-offsets.h
+xen/include/arch-x86/asm/asm-macros.h
 xen/include/compat/*
 xen/include/config/
 xen/include/generated/
diff --git a/MAINTAINERS b/MAINTAINERS
index 8a52a03969fe..03a5553116a8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -245,7 +245,7 @@ F:	xen/drivers/char/omap-uart.c
 F:	xen/drivers/char/pl011.c
 F:	xen/drivers/char/scif-uart.c
 F:	xen/drivers/passthrough/arm/
-F:	xen/include/asm-arm/
+F:	xen/include/arch-arm/
 F:	xen/include/public/arch-arm/
 F:	xen/include/public/arch-arm.h
 
@@ -293,8 +293,8 @@ S:	Supported
 F:	xen/arch/x86/efi/
 F:	xen/common/efi/
 F:	xen/include/efi/
-F:	xen/include/asm-x86/efi*.h
-F:	xen/include/asm-x86/x86_*/efi*.h
+F:	xen/include/arch-x86/asm/efi*.h
+F:	xen/include/arch-x86/asm/x86_*/efi*.h
 
 GDBSX DEBUGGER
 M:	Elena Ufimtseva <elena.ufimtseva@oracle.com>
@@ -321,7 +321,7 @@ INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
 R:	Lukasz Hawrylko <lukasz.hawrylko@linux.intel.com>
 S:	Odd Fixes
 F:	xen/arch/x86/tboot.c
-F:	xen/include/asm-x86/tboot.h
+F:	xen/include/arch-x86/asm/tboot.h
 
 INTEL(R) VT FOR DIRECTED I/O (VT-D)
 M:	Kevin Tian <kevin.tian@intel.com>
@@ -334,7 +334,7 @@ M:	Kevin Tian <kevin.tian@intel.com>
 S:	Supported
 F:	xen/arch/x86/hvm/vmx/
 F:	xen/arch/x86/mm/p2m-ept.c
-F:	xen/include/asm-x86/hvm/vmx/
+F:	xen/include/arch-x86/asm/hvm/vmx/
 F:	xen/arch/x86/cpu/vpmu_intel.c
 
 IOMMU VENDOR INDEPENDENT CODE
@@ -399,7 +399,7 @@ F:	tools/misc/xen-livepatch.c
 F:	xen/arch/*/livepatch*
 F:	xen/arch/*/*/livepatch*
 F:	xen/common/livepatch*
-F:	xen/include/asm-*/livepatch.h
+F:	xen/include/arch-*/asm/livepatch.h
 F:	xen/include/xen/livepatch*
 F:	xen/test/livepatch/*
 
@@ -500,7 +500,7 @@ TEE MEDIATORS
 M:	Volodymyr Babchuk <volodymyr_babchuk@epam.com>
 S:	Supported
 F:	xen/arch/arm/tee/
-F:	xen/include/asm-arm/tee
+F:	xen/include/arch-arm/asm/tee
 
 TOOLSTACK
 M:	Ian Jackson <iwj@xenproject.org>
@@ -537,8 +537,8 @@ F:	xen/common/vm_event.c
 F:	xen/include/*/mem_access.h
 F:	xen/include/*/monitor.h
 F:	xen/include/*/vm_event.h
-F:	xen/include/asm-x86/hvm/monitor.h
-F:	xen/include/asm-x86/hvm/vm_event.h
+F:	xen/include/arch-x86/asm/hvm/monitor.h
+F:	xen/include/arch-x86/asm/hvm/vm_event.h
 
 VPCI
 M:	Roger Pau Monné <roger.pau@citrix.com>
@@ -564,7 +564,7 @@ R:	Wei Liu <wl@xen.org>
 S:	Supported
 L:	xen-devel@lists.xenproject.org
 F:	xen/arch/x86/
-F:	xen/include/asm-x86/
+F:	xen/include/arch-x86/
 F:	xen/include/public/arch-x86/
 F:	xen/include/xen/lib/x86
 F:	xen/lib/x86
@@ -584,10 +584,10 @@ F:	xen/arch/x86/hvm/emulate.c
 F:	xen/arch/x86/hvm/intercept.c
 F:	xen/arch/x86/hvm/io.c
 F:	xen/arch/x86/hvm/ioreq.c
-F:	xen/include/asm-x86/hvm/emulate.h
-F:	xen/include/asm-x86/hvm/io.h
-F:	xen/include/asm-x86/hvm/ioreq.h
-F:	xen/include/asm-x86/ioreq.h
+F:	xen/include/arch-x86/asm/hvm/emulate.h
+F:	xen/include/arch-x86/asm/hvm/io.h
+F:	xen/include/arch-x86/asm/hvm/ioreq.h
+F:	xen/include/arch-x86/asm/ioreq.h
 
 X86 MEMORY MANAGEMENT
 M:	Jan Beulich <jbeulich@suse.com>
@@ -619,10 +619,10 @@ M:	Wei Liu <wl@xen.org>
 S:	Supported
 F:	xen/arch/x86/guest/hyperv/
 F:	xen/arch/x86/hvm/viridian/
-F:	xen/include/asm-x86/guest/hyperv.h
-F:	xen/include/asm-x86/guest/hyperv-hcall.h
-F:	xen/include/asm-x86/guest/hyperv-tlfs.h
-F:	xen/include/asm-x86/hvm/viridian.h
+F:	xen/include/arch-x86/asm/guest/hyperv.h
+F:	xen/include/arch-x86/asm/guest/hyperv-hcall.h
+F:	xen/include/arch-x86/asm/guest/hyperv-tlfs.h
+F:	xen/include/arch-x86/asm/hvm/viridian.h
 
 XENSTORE
 M:	Ian Jackson <iwj@xenproject.org>
diff --git a/tools/include/Makefile b/tools/include/Makefile
index 42605d46b937..85b105173741 100644
--- a/tools/include/Makefile
+++ b/tools/include/Makefile
@@ -30,7 +30,7 @@ xen-dir:
 	ln -s $(XEN_ROOT)/xen/include/acpi/platform acpi/
 	ln -s $(XEN_ROOT)/xen/include/acpi/ac*.h acpi/
 ifeq ($(CONFIG_X86),y)
-	ln -s $(XEN_ROOT)/xen/include/asm-x86 xen/asm
+	ln -s $(XEN_ROOT)/xen/include/arch-x86/asm xen/asm
 	mkdir -p xen/lib/x86
 	ln -s $(filter-out %autogen.h,$(wildcard $(XEN_ROOT)/xen/include/xen/lib/x86/*.h)) xen/lib/x86/
 	ln -s $(XEN_ROOT)/xen/include/xen/lib/x86/Makefile xen/lib/x86/
diff --git a/tools/misc/xen-access.c b/tools/misc/xen-access.c
index 4bbef0bd2e10..d87325800c5b 100644
--- a/tools/misc/xen-access.c
+++ b/tools/misc/xen-access.c
@@ -56,11 +56,11 @@
 #define ERROR(a, b...) fprintf(stderr, a "\n", ## b)
 #define PERROR(a, b...) fprintf(stderr, a ": %s\n", ## b, strerror(errno))
 
-/* From xen/include/asm-x86/processor.h */
+/* From xen/include/arch-x86/asm/processor.h */
 #define X86_TRAP_DEBUG  1
 #define X86_TRAP_INT3   3
 
-/* From xen/include/asm-x86/x86-defns.h */
+/* From xen/include/arch-x86/asm/x86-defns.h */
 #define X86_CR4_PGE        0x00000080 /* enable global pages */
 
 typedef struct vm_event {
diff --git a/tools/tests/vhpet/Makefile b/tools/tests/vhpet/Makefile
index cb88dd01c5f8..72f08dea22d8 100644
--- a/tools/tests/vhpet/Makefile
+++ b/tools/tests/vhpet/Makefile
@@ -32,7 +32,7 @@ distclean: clean
 .PHONY: install
 install:
 
-hpet.h: $(XEN_ROOT)/xen/include/asm-x86/hpet.h
+hpet.h: $(XEN_ROOT)/xen/include/arch-x86/asm/hpet.h
 	cp $< $@
 
 hpet.c: $(XEN_ROOT)/xen/arch/x86/hvm/hpet.c
diff --git a/xen/Makefile b/xen/Makefile
index 06d7bfab3e2c..7e3e4c42d77b 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -164,7 +164,7 @@ ifeq ($(TARGET_ARCH),x86)
 t1 = $(call as-insn,$(CC),".L0: .L1: .skip (.L1 - .L0)",,-no-integrated-as)
 
 # Check whether clang asm()-s support .include.
-t2 = $(call as-insn,$(CC) -I$(BASEDIR)/include,".include \"asm-x86/asm-defns.h\"",,-no-integrated-as)
+t2 = $(call as-insn,$(CC) -I$(BASEDIR)/include/arch-x86,".include \"asm/asm-defns.h\"",,-no-integrated-as)
 
 # Check whether clang keeps .macro-s between asm()-s:
 # https://bugs.llvm.org/show_bug.cgi?id=36110
@@ -367,7 +367,7 @@ _clean: delete-unfresh-files
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
-	rm -f asm-offsets.s include/asm-*/asm-offsets.h
+	rm -f asm-offsets.s include/arch-*/asm/asm-offsets.h
 	rm -f .banner
 
 .PHONY: _distclean
@@ -381,7 +381,6 @@ $(TARGET).gz: $(TARGET)
 $(TARGET): delete-unfresh-files
 	$(MAKE) -C tools
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
-	[ -e include/asm ] || ln -sf asm-$(TARGET_ARCH) include/asm
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
 		do test -r arch/$(TARGET_ARCH)/efi/$$f || \
 		   ln -nsf ../../../common/efi/$$f arch/$(TARGET_ARCH)/efi/; \
@@ -389,7 +388,7 @@ $(TARGET): delete-unfresh-files
 		true
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
-	$(MAKE) -f $(BASEDIR)/Rules.mk include/asm-$(TARGET_ARCH)/asm-offsets.h
+	$(MAKE) -f $(BASEDIR)/Rules.mk include/arch-$(TARGET_ARCH)/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
 # drivers/char/console.o contains static banner/compile info. Blow it away.
@@ -429,7 +428,7 @@ asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
 	$(CC) $(filter-out -Wa$(comma)% -flto,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
 	$(call move-if-changed,$@.new,$@)
 
-include/asm-$(TARGET_ARCH)/asm-offsets.h: asm-offsets.s
+include/arch-$(TARGET_ARCH)/asm/asm-offsets.h: asm-offsets.s
 	@(set -e; \
 	  echo "/*"; \
 	  echo " * DO NOT MODIFY."; \
@@ -447,8 +446,8 @@ include/asm-$(TARGET_ARCH)/asm-offsets.h: asm-offsets.s
 
 SUBDIRS = xsm arch/$(TARGET_ARCH) common drivers lib test
 define all_sources
-    ( find include/asm-$(TARGET_ARCH) -name '*.h' -print; \
-      find include -name 'asm-*' -prune -o -name '*.h' -print; \
+    ( find include/arch-$(TARGET_ARCH) -name '*.h' -print; \
+      find include -name 'arch-*' -prune -o -name '*.h' -print; \
       find $(SUBDIRS) -name '*.[chS]' -print )
 endef
 
diff --git a/xen/arch/arm/README.LinuxPrimitives b/xen/arch/arm/README.LinuxPrimitives
index 664a9f89ed27..733cc22c2cd5 100644
--- a/xen/arch/arm/README.LinuxPrimitives
+++ b/xen/arch/arm/README.LinuxPrimitives
@@ -8,19 +8,19 @@ arm64:
 
 bitops: last sync @ v3.16-rc6 (last commit: 8715466b6027)
 
-linux/arch/arm64/include/asm/bitops.h   xen/include/asm-arm/arm64/bitops.h
+linux/arch/arm64/include/asm/bitops.h   xen/include/arch-arm/asm/arm64/bitops.h
 
 ---------------------------------------------------------------------
 
 cmpxchg: last sync @ v3.16-rc6 (last commit: e1dfda9ced9b)
 
-linux/arch/arm64/include/asm/cmpxchg.h  xen/include/asm-arm/arm64/cmpxchg.h
+linux/arch/arm64/include/asm/cmpxchg.h  xen/include/arch-arm/asm/arm64/cmpxchg.h
 
 ---------------------------------------------------------------------
 
 atomics: last sync @ v3.16-rc6 (last commit: 8715466b6027)
 
-linux/arch/arm64/include/asm/atomic.h   xen/include/asm-arm/arm64/atomic.h
+linux/arch/arm64/include/asm/atomic.h   xen/include/arch-arm/asm/arm64/atomic.h
 
 The following functions were taken from Linux:
     atomic_add(), atomic_add_return(), atomic_sub(), atomic_sub_return(),
@@ -76,13 +76,13 @@ diff -u ../linux/arch/arm/lib/findbit.S xen/arch/arm/arm32/lib/findbit.S
 
 cmpxchg: last sync @ v3.16-rc6 (last commit: c32ffce0f66e)
 
-linux/arch/arm/include/asm/cmpxchg.h    xen/include/asm-arm/arm32/cmpxchg.h
+linux/arch/arm/include/asm/cmpxchg.h    xen/include/arch-arm/asm/arm32/cmpxchg.h
 
 ---------------------------------------------------------------------
 
 atomics: last sync @ v3.16-rc6 (last commit: 030d0178bdbd)
 
-linux/arch/arm/include/asm/atomic.h     xen/include/asm-arm/arm32/atomic.h
+linux/arch/arm/include/asm/atomic.h     xen/include/arch-arm/asm/arm32/atomic.h
 
 The following functions were taken from Linux:
     atomic_add(), atomic_add_return(), atomic_sub(), atomic_sub_return(),
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index 6a2982059486..f54e602301be 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -2,6 +2,7 @@
 # arm-specific definitions
 
 CFLAGS += -I$(BASEDIR)/include
+CFLAGS += -I$(BASEDIR)/include/arch-$(TARGET_ARCH)
 
 $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
 $(call cc-option-add,CFLAGS,CC,-Wnested-externs)
diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
index 7178865f48c3..5cd4f19aa199 100644
--- a/xen/arch/arm/arm32/head.S
+++ b/xen/arch/arm/arm32/head.S
@@ -599,7 +599,7 @@ remove_identity_mapping:
         strd  r2, r3, [r0, r1]
 
 identity_mapping_removed:
-        /* See asm-arm/arm32/flushtlb.h for the explanation of the sequence. */
+        /* See arch-arm/asm/arm32/flushtlb.h for the explanation of the sequence. */
         dsb   nshst
         mcr   CP32(r0, TLBIALLH)
         dsb   nsh
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index aa1f88c76498..135fdccabdf0 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -737,7 +737,7 @@ remove_identity_mapping:
         str   xzr, [x0, x1, lsl #3]
 
 identity_mapping_removed:
-        /* See asm-arm/arm64/flushtlb.h for the explanation of the sequence. */
+        /* See arch-arm/asm/arm64/flushtlb.h for the explanation of the sequence. */
         dsb   nshst
         tlbi  alle2
         dsb   nsh
diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
index a1ee3146efeb..df10c617c8f7 100644
--- a/xen/arch/arm/smpboot.c
+++ b/xen/arch/arm/smpboot.c
@@ -46,7 +46,7 @@ struct cpuinfo_arm cpu_data[NR_CPUS];
 /* CPU logical map: map xen cpuid to an MPIDR */
 register_t __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID };
 
-/* Fake one node for now. See also include/asm-arm/numa.h */
+/* Fake one node for now. See also include/arch-arm/asm/numa.h */
 nodemask_t __read_mostly node_online_map = { { [0] = 1UL } };
 
 /* Xen stack for bringing up the first CPU. */
diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c
index c1e250be5967..8b93fd2cd5b7 100644
--- a/xen/arch/arm/vpsci.c
+++ b/xen/arch/arm/vpsci.c
@@ -278,7 +278,7 @@ bool do_vpsci_0_1_call(struct cpu_user_regs *regs, uint32_t fid)
 bool do_vpsci_0_2_call(struct cpu_user_regs *regs, uint32_t fid)
 {
     /*
-     * /!\ VPSCI_NR_FUNCS (in asm-arm/vpsci.h) should be updated when
+     * /!\ VPSCI_NR_FUNCS (in arch-arm/asm/vpsci.h) should be updated when
      * adding/removing a function. SCCC_SMCCC_*_REVISION should be
      * updated once per release.
      */
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 08a4ec1944d3..bb446a1b928d 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -275,11 +275,11 @@ efi/buildid.o efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
 efi/buildid.o efi/relocs-dummy.o: ;
 
 .PHONY: include
-include: $(BASEDIR)/include/asm-x86/asm-macros.h
+include: $(BASEDIR)/include/arch-x86/asm/asm-macros.h
 
 asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
 
-$(BASEDIR)/include/asm-x86/asm-macros.h: asm-macros.i Makefile
+$(BASEDIR)/include/arch-x86/asm/asm-macros.h: asm-macros.i Makefile
 	echo '#if 0' >$@.new
 	echo '.if 0' >>$@.new
 	echo '#endif' >>$@.new
@@ -306,7 +306,7 @@ efi/mkreloc: efi/mkreloc.c
 .PHONY: clean
 clean::
 	rm -f *.lds *.new boot/*.o boot/*~ boot/core boot/mkelf32
-	rm -f asm-macros.i $(BASEDIR)/include/asm-x86/asm-macros.*
+	rm -f asm-macros.i $(BASEDIR)/include/arch-x86/asm/asm-macros.*
 	rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d $(BASEDIR)/.xen.elf32
 	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
 	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index ce0c1a0e7fb2..9f5fade39e91 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -4,8 +4,9 @@
 export XEN_IMG_OFFSET := 0x200000
 
 CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/include/asm-x86/mach-generic
-CFLAGS += -I$(BASEDIR)/include/asm-x86/mach-default
+CFLAGS += -I$(BASEDIR)/include/arch-$(TARGET_ARCH)
+CFLAGS += -I$(BASEDIR)/include/arch-x86/asm/mach-generic
+CFLAGS += -I$(BASEDIR)/include/arch-x86/asm/mach-default
 CFLAGS += -DXEN_IMG_OFFSET=$(XEN_IMG_OFFSET)
 
 # Prevent floating-point variables from creeping into Xen.
diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c
index 375b94229e13..d54bae560487 100644
--- a/xen/common/efi/runtime.c
+++ b/xen/common/efi/runtime.c
@@ -12,13 +12,13 @@ struct efi_rs_state {
 #ifdef CONFIG_X86
  /*
   * The way stacks get set up leads to them always being on an 8-byte
-  * boundary not evenly divisible by 16 (see asm-x86/current.h). The EFI ABI,
-  * just like the CPU one, however requires stacks to be 16-byte aligned
-  * before every function call. Since the compiler assumes this (unless
-  * passing it -mpreferred-stack-boundary=3), it wouldn't generate code to
-  * align the stack to 16 bytes even if putting a 16-byte aligned object
-  * there. Hence we need to force larger than 16-byte alignment, even if we
-  * don't strictly need that.
+  * boundary not evenly divisible by 16 (see arch-x86/asm/current.h). The
+  * EFI ABI, just like the CPU one, however requires stacks to be 16-byte
+  * aligned before every function call. Since the compiler assumes this
+  * (unless passing it -mpreferred-stack-boundary=3), it wouldn't generate
+  * code to align the stack to 16 bytes even if putting a 16-byte aligned
+  * object there. Hence we need to force larger than 16-byte alignment,
+  * even if we don't strictly need that.
   */
  unsigned long __aligned(32) cr3;
 #endif
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 958ba0cd9256..5cf9b3011cdb 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -241,7 +241,7 @@ PAGE_LIST_HEAD(page_broken_list);
 
 /*
  * first_valid_mfn is exported because it is use in ARM specific NUMA
- * helpers. See comment in asm-arm/numa.h.
+ * helpers. See comment in arch-arm/asm/numa.h.
  */
 mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;
 
diff --git a/xen/include/asm-arm/acpi.h b/xen/include/arch-arm/asm/acpi.h
similarity index 100%
rename from xen/include/asm-arm/acpi.h
rename to xen/include/arch-arm/asm/acpi.h
diff --git a/xen/include/asm-arm/alternative.h b/xen/include/arch-arm/asm/alternative.h
similarity index 100%
rename from xen/include/asm-arm/alternative.h
rename to xen/include/arch-arm/asm/alternative.h
diff --git a/xen/include/asm-arm/altp2m.h b/xen/include/arch-arm/asm/altp2m.h
similarity index 100%
rename from xen/include/asm-arm/altp2m.h
rename to xen/include/arch-arm/asm/altp2m.h
diff --git a/xen/include/asm-arm/arm32/atomic.h b/xen/include/arch-arm/asm/arm32/atomic.h
similarity index 100%
rename from xen/include/asm-arm/arm32/atomic.h
rename to xen/include/arch-arm/asm/arm32/atomic.h
diff --git a/xen/include/asm-arm/arm32/bitops.h b/xen/include/arch-arm/asm/arm32/bitops.h
similarity index 100%
rename from xen/include/asm-arm/arm32/bitops.h
rename to xen/include/arch-arm/asm/arm32/bitops.h
diff --git a/xen/include/asm-arm/arm32/bug.h b/xen/include/arch-arm/asm/arm32/bug.h
similarity index 100%
rename from xen/include/asm-arm/arm32/bug.h
rename to xen/include/arch-arm/asm/arm32/bug.h
diff --git a/xen/include/asm-arm/arm32/cmpxchg.h b/xen/include/arch-arm/asm/arm32/cmpxchg.h
similarity index 100%
rename from xen/include/asm-arm/arm32/cmpxchg.h
rename to xen/include/arch-arm/asm/arm32/cmpxchg.h
diff --git a/xen/include/asm-arm/arm32/flushtlb.h b/xen/include/arch-arm/asm/arm32/flushtlb.h
similarity index 100%
rename from xen/include/asm-arm/arm32/flushtlb.h
rename to xen/include/arch-arm/asm/arm32/flushtlb.h
diff --git a/xen/include/asm-arm/arm32/insn.h b/xen/include/arch-arm/asm/arm32/insn.h
similarity index 100%
rename from xen/include/asm-arm/arm32/insn.h
rename to xen/include/arch-arm/asm/arm32/insn.h
diff --git a/xen/include/asm-arm/arm32/io.h b/xen/include/arch-arm/asm/arm32/io.h
similarity index 100%
rename from xen/include/asm-arm/arm32/io.h
rename to xen/include/arch-arm/asm/arm32/io.h
diff --git a/xen/include/asm-arm/arm32/macros.h b/xen/include/arch-arm/asm/arm32/macros.h
similarity index 100%
rename from xen/include/asm-arm/arm32/macros.h
rename to xen/include/arch-arm/asm/arm32/macros.h
diff --git a/xen/include/asm-arm/arm32/mm.h b/xen/include/arch-arm/asm/arm32/mm.h
similarity index 100%
rename from xen/include/asm-arm/arm32/mm.h
rename to xen/include/arch-arm/asm/arm32/mm.h
diff --git a/xen/include/asm-arm/arm32/page.h b/xen/include/arch-arm/asm/arm32/page.h
similarity index 100%
rename from xen/include/asm-arm/arm32/page.h
rename to xen/include/arch-arm/asm/arm32/page.h
diff --git a/xen/include/asm-arm/arm32/processor.h b/xen/include/arch-arm/asm/arm32/processor.h
similarity index 100%
rename from xen/include/asm-arm/arm32/processor.h
rename to xen/include/arch-arm/asm/arm32/processor.h
diff --git a/xen/include/asm-arm/arm32/sysregs.h b/xen/include/arch-arm/asm/arm32/sysregs.h
similarity index 100%
rename from xen/include/asm-arm/arm32/sysregs.h
rename to xen/include/arch-arm/asm/arm32/sysregs.h
diff --git a/xen/include/asm-arm/arm32/system.h b/xen/include/arch-arm/asm/arm32/system.h
similarity index 100%
rename from xen/include/asm-arm/arm32/system.h
rename to xen/include/arch-arm/asm/arm32/system.h
diff --git a/xen/include/asm-arm/arm32/traps.h b/xen/include/arch-arm/asm/arm32/traps.h
similarity index 100%
rename from xen/include/asm-arm/arm32/traps.h
rename to xen/include/arch-arm/asm/arm32/traps.h
diff --git a/xen/include/asm-arm/arm32/vfp.h b/xen/include/arch-arm/asm/arm32/vfp.h
similarity index 100%
rename from xen/include/asm-arm/arm32/vfp.h
rename to xen/include/arch-arm/asm/arm32/vfp.h
diff --git a/xen/include/asm-arm/arm64/atomic.h b/xen/include/arch-arm/asm/arm64/atomic.h
similarity index 100%
rename from xen/include/asm-arm/arm64/atomic.h
rename to xen/include/arch-arm/asm/arm64/atomic.h
diff --git a/xen/include/asm-arm/arm64/bitops.h b/xen/include/arch-arm/asm/arm64/bitops.h
similarity index 100%
rename from xen/include/asm-arm/arm64/bitops.h
rename to xen/include/arch-arm/asm/arm64/bitops.h
diff --git a/xen/include/asm-arm/arm64/brk.h b/xen/include/arch-arm/asm/arm64/brk.h
similarity index 100%
rename from xen/include/asm-arm/arm64/brk.h
rename to xen/include/arch-arm/asm/arm64/brk.h
diff --git a/xen/include/asm-arm/arm64/bug.h b/xen/include/arch-arm/asm/arm64/bug.h
similarity index 100%
rename from xen/include/asm-arm/arm64/bug.h
rename to xen/include/arch-arm/asm/arm64/bug.h
diff --git a/xen/include/asm-arm/arm64/cmpxchg.h b/xen/include/arch-arm/asm/arm64/cmpxchg.h
similarity index 100%
rename from xen/include/asm-arm/arm64/cmpxchg.h
rename to xen/include/arch-arm/asm/arm64/cmpxchg.h
diff --git a/xen/include/asm-arm/arm64/efibind.h b/xen/include/arch-arm/asm/arm64/efibind.h
similarity index 100%
rename from xen/include/asm-arm/arm64/efibind.h
rename to xen/include/arch-arm/asm/arm64/efibind.h
diff --git a/xen/include/asm-arm/arm64/flushtlb.h b/xen/include/arch-arm/asm/arm64/flushtlb.h
similarity index 100%
rename from xen/include/asm-arm/arm64/flushtlb.h
rename to xen/include/arch-arm/asm/arm64/flushtlb.h
diff --git a/xen/include/asm-arm/arm64/hsr.h b/xen/include/arch-arm/asm/arm64/hsr.h
similarity index 100%
rename from xen/include/asm-arm/arm64/hsr.h
rename to xen/include/arch-arm/asm/arm64/hsr.h
diff --git a/xen/include/asm-arm/arm64/insn.h b/xen/include/arch-arm/asm/arm64/insn.h
similarity index 100%
rename from xen/include/asm-arm/arm64/insn.h
rename to xen/include/arch-arm/asm/arm64/insn.h
diff --git a/xen/include/asm-arm/arm64/io.h b/xen/include/arch-arm/asm/arm64/io.h
similarity index 100%
rename from xen/include/asm-arm/arm64/io.h
rename to xen/include/arch-arm/asm/arm64/io.h
diff --git a/xen/include/asm-arm/arm64/macros.h b/xen/include/arch-arm/asm/arm64/macros.h
similarity index 100%
rename from xen/include/asm-arm/arm64/macros.h
rename to xen/include/arch-arm/asm/arm64/macros.h
diff --git a/xen/include/asm-arm/arm64/mm.h b/xen/include/arch-arm/asm/arm64/mm.h
similarity index 100%
rename from xen/include/asm-arm/arm64/mm.h
rename to xen/include/arch-arm/asm/arm64/mm.h
diff --git a/xen/include/asm-arm/arm64/page.h b/xen/include/arch-arm/asm/arm64/page.h
similarity index 100%
rename from xen/include/asm-arm/arm64/page.h
rename to xen/include/arch-arm/asm/arm64/page.h
diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/include/arch-arm/asm/arm64/processor.h
similarity index 100%
rename from xen/include/asm-arm/arm64/processor.h
rename to xen/include/arch-arm/asm/arm64/processor.h
diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/arch-arm/asm/arm64/sysregs.h
similarity index 100%
rename from xen/include/asm-arm/arm64/sysregs.h
rename to xen/include/arch-arm/asm/arm64/sysregs.h
diff --git a/xen/include/asm-arm/arm64/system.h b/xen/include/arch-arm/asm/arm64/system.h
similarity index 100%
rename from xen/include/asm-arm/arm64/system.h
rename to xen/include/arch-arm/asm/arm64/system.h
diff --git a/xen/include/asm-arm/arm64/traps.h b/xen/include/arch-arm/asm/arm64/traps.h
similarity index 100%
rename from xen/include/asm-arm/arm64/traps.h
rename to xen/include/arch-arm/asm/arm64/traps.h
diff --git a/xen/include/asm-arm/arm64/vfp.h b/xen/include/arch-arm/asm/arm64/vfp.h
similarity index 100%
rename from xen/include/asm-arm/arm64/vfp.h
rename to xen/include/arch-arm/asm/arm64/vfp.h
diff --git a/xen/include/asm-arm/asm_defns.h b/xen/include/arch-arm/asm/asm_defns.h
similarity index 100%
rename from xen/include/asm-arm/asm_defns.h
rename to xen/include/arch-arm/asm/asm_defns.h
diff --git a/xen/include/asm-arm/atomic.h b/xen/include/arch-arm/asm/atomic.h
similarity index 100%
rename from xen/include/asm-arm/atomic.h
rename to xen/include/arch-arm/asm/atomic.h
diff --git a/xen/include/asm-arm/bitops.h b/xen/include/arch-arm/asm/bitops.h
similarity index 100%
rename from xen/include/asm-arm/bitops.h
rename to xen/include/arch-arm/asm/bitops.h
diff --git a/xen/include/asm-arm/bug.h b/xen/include/arch-arm/asm/bug.h
similarity index 100%
rename from xen/include/asm-arm/bug.h
rename to xen/include/arch-arm/asm/bug.h
diff --git a/xen/include/asm-arm/byteorder.h b/xen/include/arch-arm/asm/byteorder.h
similarity index 100%
rename from xen/include/asm-arm/byteorder.h
rename to xen/include/arch-arm/asm/byteorder.h
diff --git a/xen/include/asm-arm/cache.h b/xen/include/arch-arm/asm/cache.h
similarity index 100%
rename from xen/include/asm-arm/cache.h
rename to xen/include/arch-arm/asm/cache.h
diff --git a/xen/include/asm-arm/cadence-uart.h b/xen/include/arch-arm/asm/cadence-uart.h
similarity index 100%
rename from xen/include/asm-arm/cadence-uart.h
rename to xen/include/arch-arm/asm/cadence-uart.h
diff --git a/xen/include/asm-arm/config.h b/xen/include/arch-arm/asm/config.h
similarity index 100%
rename from xen/include/asm-arm/config.h
rename to xen/include/arch-arm/asm/config.h
diff --git a/xen/include/asm-arm/cpregs.h b/xen/include/arch-arm/asm/cpregs.h
similarity index 100%
rename from xen/include/asm-arm/cpregs.h
rename to xen/include/arch-arm/asm/cpregs.h
diff --git a/xen/include/asm-arm/cpuerrata.h b/xen/include/arch-arm/asm/cpuerrata.h
similarity index 100%
rename from xen/include/asm-arm/cpuerrata.h
rename to xen/include/arch-arm/asm/cpuerrata.h
diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/arch-arm/asm/cpufeature.h
similarity index 100%
rename from xen/include/asm-arm/cpufeature.h
rename to xen/include/arch-arm/asm/cpufeature.h
diff --git a/xen/include/asm-arm/current.h b/xen/include/arch-arm/asm/current.h
similarity index 100%
rename from xen/include/asm-arm/current.h
rename to xen/include/arch-arm/asm/current.h
diff --git a/xen/include/asm-arm/debugger.h b/xen/include/arch-arm/asm/debugger.h
similarity index 100%
rename from xen/include/asm-arm/debugger.h
rename to xen/include/arch-arm/asm/debugger.h
diff --git a/xen/include/asm-arm/delay.h b/xen/include/arch-arm/asm/delay.h
similarity index 100%
rename from xen/include/asm-arm/delay.h
rename to xen/include/arch-arm/asm/delay.h
diff --git a/xen/include/asm-arm/desc.h b/xen/include/arch-arm/asm/desc.h
similarity index 100%
rename from xen/include/asm-arm/desc.h
rename to xen/include/arch-arm/asm/desc.h
diff --git a/xen/include/asm-arm/device.h b/xen/include/arch-arm/asm/device.h
similarity index 100%
rename from xen/include/asm-arm/device.h
rename to xen/include/arch-arm/asm/device.h
diff --git a/xen/include/asm-arm/div64.h b/xen/include/arch-arm/asm/div64.h
similarity index 100%
rename from xen/include/asm-arm/div64.h
rename to xen/include/arch-arm/asm/div64.h
diff --git a/xen/include/asm-arm/domain.h b/xen/include/arch-arm/asm/domain.h
similarity index 100%
rename from xen/include/asm-arm/domain.h
rename to xen/include/arch-arm/asm/domain.h
diff --git a/xen/include/asm-arm/domain_build.h b/xen/include/arch-arm/asm/domain_build.h
similarity index 100%
rename from xen/include/asm-arm/domain_build.h
rename to xen/include/arch-arm/asm/domain_build.h
diff --git a/xen/include/asm-arm/early_printk.h b/xen/include/arch-arm/asm/early_printk.h
similarity index 100%
rename from xen/include/asm-arm/early_printk.h
rename to xen/include/arch-arm/asm/early_printk.h
diff --git a/xen/include/asm-arm/efibind.h b/xen/include/arch-arm/asm/efibind.h
similarity index 100%
rename from xen/include/asm-arm/efibind.h
rename to xen/include/arch-arm/asm/efibind.h
diff --git a/xen/include/asm-arm/elf.h b/xen/include/arch-arm/asm/elf.h
similarity index 100%
rename from xen/include/asm-arm/elf.h
rename to xen/include/arch-arm/asm/elf.h
diff --git a/xen/include/asm-arm/event.h b/xen/include/arch-arm/asm/event.h
similarity index 100%
rename from xen/include/asm-arm/event.h
rename to xen/include/arch-arm/asm/event.h
diff --git a/xen/include/asm-arm/exynos4210-uart.h b/xen/include/arch-arm/asm/exynos4210-uart.h
similarity index 100%
rename from xen/include/asm-arm/exynos4210-uart.h
rename to xen/include/arch-arm/asm/exynos4210-uart.h
diff --git a/xen/include/asm-arm/flushtlb.h b/xen/include/arch-arm/asm/flushtlb.h
similarity index 100%
rename from xen/include/asm-arm/flushtlb.h
rename to xen/include/arch-arm/asm/flushtlb.h
diff --git a/xen/include/asm-arm/gic.h b/xen/include/arch-arm/asm/gic.h
similarity index 100%
rename from xen/include/asm-arm/gic.h
rename to xen/include/arch-arm/asm/gic.h
diff --git a/xen/include/asm-arm/gic_v3_defs.h b/xen/include/arch-arm/asm/gic_v3_defs.h
similarity index 100%
rename from xen/include/asm-arm/gic_v3_defs.h
rename to xen/include/arch-arm/asm/gic_v3_defs.h
diff --git a/xen/include/asm-arm/gic_v3_its.h b/xen/include/arch-arm/asm/gic_v3_its.h
similarity index 100%
rename from xen/include/asm-arm/gic_v3_its.h
rename to xen/include/arch-arm/asm/gic_v3_its.h
diff --git a/xen/include/asm-arm/grant_table.h b/xen/include/arch-arm/asm/grant_table.h
similarity index 100%
rename from xen/include/asm-arm/grant_table.h
rename to xen/include/arch-arm/asm/grant_table.h
diff --git a/xen/include/asm-arm/guest_access.h b/xen/include/arch-arm/asm/guest_access.h
similarity index 100%
rename from xen/include/asm-arm/guest_access.h
rename to xen/include/arch-arm/asm/guest_access.h
diff --git a/xen/include/asm-arm/guest_atomics.h b/xen/include/arch-arm/asm/guest_atomics.h
similarity index 100%
rename from xen/include/asm-arm/guest_atomics.h
rename to xen/include/arch-arm/asm/guest_atomics.h
diff --git a/xen/include/asm-arm/guest_walk.h b/xen/include/arch-arm/asm/guest_walk.h
similarity index 100%
rename from xen/include/asm-arm/guest_walk.h
rename to xen/include/arch-arm/asm/guest_walk.h
diff --git a/xen/include/asm-arm/hardirq.h b/xen/include/arch-arm/asm/hardirq.h
similarity index 100%
rename from xen/include/asm-arm/hardirq.h
rename to xen/include/arch-arm/asm/hardirq.h
diff --git a/xen/include/asm-arm/hsr.h b/xen/include/arch-arm/asm/hsr.h
similarity index 100%
rename from xen/include/asm-arm/hsr.h
rename to xen/include/arch-arm/asm/hsr.h
diff --git a/xen/include/asm-arm/hypercall.h b/xen/include/arch-arm/asm/hypercall.h
similarity index 100%
rename from xen/include/asm-arm/hypercall.h
rename to xen/include/arch-arm/asm/hypercall.h
diff --git a/xen/include/asm-arm/init.h b/xen/include/arch-arm/asm/init.h
similarity index 100%
rename from xen/include/asm-arm/init.h
rename to xen/include/arch-arm/asm/init.h
diff --git a/xen/include/asm-arm/insn.h b/xen/include/arch-arm/asm/insn.h
similarity index 100%
rename from xen/include/asm-arm/insn.h
rename to xen/include/arch-arm/asm/insn.h
diff --git a/xen/include/asm-arm/io.h b/xen/include/arch-arm/asm/io.h
similarity index 100%
rename from xen/include/asm-arm/io.h
rename to xen/include/arch-arm/asm/io.h
diff --git a/xen/include/asm-arm/iocap.h b/xen/include/arch-arm/asm/iocap.h
similarity index 100%
rename from xen/include/asm-arm/iocap.h
rename to xen/include/arch-arm/asm/iocap.h
diff --git a/xen/include/asm-arm/iommu.h b/xen/include/arch-arm/asm/iommu.h
similarity index 100%
rename from xen/include/asm-arm/iommu.h
rename to xen/include/arch-arm/asm/iommu.h
diff --git a/xen/include/asm-arm/iommu_fwspec.h b/xen/include/arch-arm/asm/iommu_fwspec.h
similarity index 100%
rename from xen/include/asm-arm/iommu_fwspec.h
rename to xen/include/arch-arm/asm/iommu_fwspec.h
diff --git a/xen/include/asm-arm/ioreq.h b/xen/include/arch-arm/asm/ioreq.h
similarity index 100%
rename from xen/include/asm-arm/ioreq.h
rename to xen/include/arch-arm/asm/ioreq.h
diff --git a/xen/include/asm-arm/irq.h b/xen/include/arch-arm/asm/irq.h
similarity index 100%
rename from xen/include/asm-arm/irq.h
rename to xen/include/arch-arm/asm/irq.h
diff --git a/xen/include/asm-arm/kernel.h b/xen/include/arch-arm/asm/kernel.h
similarity index 100%
rename from xen/include/asm-arm/kernel.h
rename to xen/include/arch-arm/asm/kernel.h
diff --git a/xen/include/asm-arm/livepatch.h b/xen/include/arch-arm/asm/livepatch.h
similarity index 100%
rename from xen/include/asm-arm/livepatch.h
rename to xen/include/arch-arm/asm/livepatch.h
diff --git a/xen/include/asm-arm/lpae.h b/xen/include/arch-arm/asm/lpae.h
similarity index 100%
rename from xen/include/asm-arm/lpae.h
rename to xen/include/arch-arm/asm/lpae.h
diff --git a/xen/include/asm-arm/macros.h b/xen/include/arch-arm/asm/macros.h
similarity index 100%
rename from xen/include/asm-arm/macros.h
rename to xen/include/arch-arm/asm/macros.h
diff --git a/xen/include/asm-arm/mem_access.h b/xen/include/arch-arm/asm/mem_access.h
similarity index 100%
rename from xen/include/asm-arm/mem_access.h
rename to xen/include/arch-arm/asm/mem_access.h
diff --git a/xen/include/asm-arm/mm.h b/xen/include/arch-arm/asm/mm.h
similarity index 100%
rename from xen/include/asm-arm/mm.h
rename to xen/include/arch-arm/asm/mm.h
diff --git a/xen/include/asm-arm/mmio.h b/xen/include/arch-arm/asm/mmio.h
similarity index 100%
rename from xen/include/asm-arm/mmio.h
rename to xen/include/arch-arm/asm/mmio.h
diff --git a/xen/include/asm-arm/monitor.h b/xen/include/arch-arm/asm/monitor.h
similarity index 100%
rename from xen/include/asm-arm/monitor.h
rename to xen/include/arch-arm/asm/monitor.h
diff --git a/xen/include/asm-arm/new_vgic.h b/xen/include/arch-arm/asm/new_vgic.h
similarity index 100%
rename from xen/include/asm-arm/new_vgic.h
rename to xen/include/arch-arm/asm/new_vgic.h
diff --git a/xen/include/asm-arm/nospec.h b/xen/include/arch-arm/asm/nospec.h
similarity index 100%
rename from xen/include/asm-arm/nospec.h
rename to xen/include/arch-arm/asm/nospec.h
diff --git a/xen/include/asm-arm/numa.h b/xen/include/arch-arm/asm/numa.h
similarity index 100%
rename from xen/include/asm-arm/numa.h
rename to xen/include/arch-arm/asm/numa.h
diff --git a/xen/include/asm-arm/p2m.h b/xen/include/arch-arm/asm/p2m.h
similarity index 100%
rename from xen/include/asm-arm/p2m.h
rename to xen/include/arch-arm/asm/p2m.h
diff --git a/xen/include/asm-arm/page-bits.h b/xen/include/arch-arm/asm/page-bits.h
similarity index 100%
rename from xen/include/asm-arm/page-bits.h
rename to xen/include/arch-arm/asm/page-bits.h
diff --git a/xen/include/asm-arm/page.h b/xen/include/arch-arm/asm/page.h
similarity index 100%
rename from xen/include/asm-arm/page.h
rename to xen/include/arch-arm/asm/page.h
diff --git a/xen/include/asm-arm/paging.h b/xen/include/arch-arm/asm/paging.h
similarity index 100%
rename from xen/include/asm-arm/paging.h
rename to xen/include/arch-arm/asm/paging.h
diff --git a/xen/include/asm-arm/pci.h b/xen/include/arch-arm/asm/pci.h
similarity index 100%
rename from xen/include/asm-arm/pci.h
rename to xen/include/arch-arm/asm/pci.h
diff --git a/xen/include/asm-arm/percpu.h b/xen/include/arch-arm/asm/percpu.h
similarity index 100%
rename from xen/include/asm-arm/percpu.h
rename to xen/include/arch-arm/asm/percpu.h
diff --git a/xen/include/asm-arm/perfc.h b/xen/include/arch-arm/asm/perfc.h
similarity index 100%
rename from xen/include/asm-arm/perfc.h
rename to xen/include/arch-arm/asm/perfc.h
diff --git a/xen/include/asm-arm/perfc_defn.h b/xen/include/arch-arm/asm/perfc_defn.h
similarity index 100%
rename from xen/include/asm-arm/perfc_defn.h
rename to xen/include/arch-arm/asm/perfc_defn.h
diff --git a/xen/include/asm-arm/pl011-uart.h b/xen/include/arch-arm/asm/pl011-uart.h
similarity index 100%
rename from xen/include/asm-arm/pl011-uart.h
rename to xen/include/arch-arm/asm/pl011-uart.h
diff --git a/xen/include/asm-arm/platform.h b/xen/include/arch-arm/asm/platform.h
similarity index 100%
rename from xen/include/asm-arm/platform.h
rename to xen/include/arch-arm/asm/platform.h
diff --git a/xen/include/asm-arm/platforms/exynos5.h b/xen/include/arch-arm/asm/platforms/exynos5.h
similarity index 100%
rename from xen/include/asm-arm/platforms/exynos5.h
rename to xen/include/arch-arm/asm/platforms/exynos5.h
diff --git a/xen/include/asm-arm/platforms/midway.h b/xen/include/arch-arm/asm/platforms/midway.h
similarity index 100%
rename from xen/include/asm-arm/platforms/midway.h
rename to xen/include/arch-arm/asm/platforms/midway.h
diff --git a/xen/include/asm-arm/platforms/omap5.h b/xen/include/arch-arm/asm/platforms/omap5.h
similarity index 100%
rename from xen/include/asm-arm/platforms/omap5.h
rename to xen/include/arch-arm/asm/platforms/omap5.h
diff --git a/xen/include/asm-arm/platforms/vexpress.h b/xen/include/arch-arm/asm/platforms/vexpress.h
similarity index 100%
rename from xen/include/asm-arm/platforms/vexpress.h
rename to xen/include/arch-arm/asm/platforms/vexpress.h
diff --git a/xen/include/asm-arm/platforms/xilinx-zynqmp-eemi.h b/xen/include/arch-arm/asm/platforms/xilinx-zynqmp-eemi.h
similarity index 100%
rename from xen/include/asm-arm/platforms/xilinx-zynqmp-eemi.h
rename to xen/include/arch-arm/asm/platforms/xilinx-zynqmp-eemi.h
diff --git a/xen/include/asm-arm/processor.h b/xen/include/arch-arm/asm/processor.h
similarity index 100%
rename from xen/include/asm-arm/processor.h
rename to xen/include/arch-arm/asm/processor.h
diff --git a/xen/include/asm-arm/procinfo.h b/xen/include/arch-arm/asm/procinfo.h
similarity index 100%
rename from xen/include/asm-arm/procinfo.h
rename to xen/include/arch-arm/asm/procinfo.h
diff --git a/xen/include/asm-arm/psci.h b/xen/include/arch-arm/asm/psci.h
similarity index 100%
rename from xen/include/asm-arm/psci.h
rename to xen/include/arch-arm/asm/psci.h
diff --git a/xen/include/asm-arm/random.h b/xen/include/arch-arm/asm/random.h
similarity index 100%
rename from xen/include/asm-arm/random.h
rename to xen/include/arch-arm/asm/random.h
diff --git a/xen/include/asm-arm/regs.h b/xen/include/arch-arm/asm/regs.h
similarity index 100%
rename from xen/include/asm-arm/regs.h
rename to xen/include/arch-arm/asm/regs.h
diff --git a/xen/include/asm-arm/scif-uart.h b/xen/include/arch-arm/asm/scif-uart.h
similarity index 100%
rename from xen/include/asm-arm/scif-uart.h
rename to xen/include/arch-arm/asm/scif-uart.h
diff --git a/xen/include/asm-arm/setup.h b/xen/include/arch-arm/asm/setup.h
similarity index 100%
rename from xen/include/asm-arm/setup.h
rename to xen/include/arch-arm/asm/setup.h
diff --git a/xen/include/asm-arm/short-desc.h b/xen/include/arch-arm/asm/short-desc.h
similarity index 100%
rename from xen/include/asm-arm/short-desc.h
rename to xen/include/arch-arm/asm/short-desc.h
diff --git a/xen/include/asm-arm/smccc.h b/xen/include/arch-arm/asm/smccc.h
similarity index 100%
rename from xen/include/asm-arm/smccc.h
rename to xen/include/arch-arm/asm/smccc.h
diff --git a/xen/include/asm-arm/smp.h b/xen/include/arch-arm/asm/smp.h
similarity index 100%
rename from xen/include/asm-arm/smp.h
rename to xen/include/arch-arm/asm/smp.h
diff --git a/xen/include/asm-arm/softirq.h b/xen/include/arch-arm/asm/softirq.h
similarity index 100%
rename from xen/include/asm-arm/softirq.h
rename to xen/include/arch-arm/asm/softirq.h
diff --git a/xen/include/asm-arm/spinlock.h b/xen/include/arch-arm/asm/spinlock.h
similarity index 100%
rename from xen/include/asm-arm/spinlock.h
rename to xen/include/arch-arm/asm/spinlock.h
diff --git a/xen/include/asm-arm/string.h b/xen/include/arch-arm/asm/string.h
similarity index 100%
rename from xen/include/asm-arm/string.h
rename to xen/include/arch-arm/asm/string.h
diff --git a/xen/include/asm-arm/sysregs.h b/xen/include/arch-arm/asm/sysregs.h
similarity index 100%
rename from xen/include/asm-arm/sysregs.h
rename to xen/include/arch-arm/asm/sysregs.h
diff --git a/xen/include/asm-arm/system.h b/xen/include/arch-arm/asm/system.h
similarity index 100%
rename from xen/include/asm-arm/system.h
rename to xen/include/arch-arm/asm/system.h
diff --git a/xen/include/asm-arm/tee/optee_msg.h b/xen/include/arch-arm/asm/tee/optee_msg.h
similarity index 100%
rename from xen/include/asm-arm/tee/optee_msg.h
rename to xen/include/arch-arm/asm/tee/optee_msg.h
diff --git a/xen/include/asm-arm/tee/optee_rpc_cmd.h b/xen/include/arch-arm/asm/tee/optee_rpc_cmd.h
similarity index 100%
rename from xen/include/asm-arm/tee/optee_rpc_cmd.h
rename to xen/include/arch-arm/asm/tee/optee_rpc_cmd.h
diff --git a/xen/include/asm-arm/tee/optee_smc.h b/xen/include/arch-arm/asm/tee/optee_smc.h
similarity index 100%
rename from xen/include/asm-arm/tee/optee_smc.h
rename to xen/include/arch-arm/asm/tee/optee_smc.h
diff --git a/xen/include/asm-arm/tee/tee.h b/xen/include/arch-arm/asm/tee/tee.h
similarity index 100%
rename from xen/include/asm-arm/tee/tee.h
rename to xen/include/arch-arm/asm/tee/tee.h
diff --git a/xen/include/asm-arm/time.h b/xen/include/arch-arm/asm/time.h
similarity index 100%
rename from xen/include/asm-arm/time.h
rename to xen/include/arch-arm/asm/time.h
diff --git a/xen/include/asm-arm/trace.h b/xen/include/arch-arm/asm/trace.h
similarity index 100%
rename from xen/include/asm-arm/trace.h
rename to xen/include/arch-arm/asm/trace.h
diff --git a/xen/include/asm-arm/traps.h b/xen/include/arch-arm/asm/traps.h
similarity index 100%
rename from xen/include/asm-arm/traps.h
rename to xen/include/arch-arm/asm/traps.h
diff --git a/xen/include/asm-arm/types.h b/xen/include/arch-arm/asm/types.h
similarity index 100%
rename from xen/include/asm-arm/types.h
rename to xen/include/arch-arm/asm/types.h
diff --git a/xen/include/asm-arm/vfp.h b/xen/include/arch-arm/asm/vfp.h
similarity index 100%
rename from xen/include/asm-arm/vfp.h
rename to xen/include/arch-arm/asm/vfp.h
diff --git a/xen/include/asm-arm/vgic-emul.h b/xen/include/arch-arm/asm/vgic-emul.h
similarity index 100%
rename from xen/include/asm-arm/vgic-emul.h
rename to xen/include/arch-arm/asm/vgic-emul.h
diff --git a/xen/include/asm-arm/vgic.h b/xen/include/arch-arm/asm/vgic.h
similarity index 100%
rename from xen/include/asm-arm/vgic.h
rename to xen/include/arch-arm/asm/vgic.h
diff --git a/xen/include/asm-arm/vm_event.h b/xen/include/arch-arm/asm/vm_event.h
similarity index 100%
rename from xen/include/asm-arm/vm_event.h
rename to xen/include/arch-arm/asm/vm_event.h
diff --git a/xen/include/asm-arm/vpl011.h b/xen/include/arch-arm/asm/vpl011.h
similarity index 100%
rename from xen/include/asm-arm/vpl011.h
rename to xen/include/arch-arm/asm/vpl011.h
diff --git a/xen/include/asm-arm/vpsci.h b/xen/include/arch-arm/asm/vpsci.h
similarity index 100%
rename from xen/include/asm-arm/vpsci.h
rename to xen/include/arch-arm/asm/vpsci.h
diff --git a/xen/include/asm-arm/vreg.h b/xen/include/arch-arm/asm/vreg.h
similarity index 100%
rename from xen/include/asm-arm/vreg.h
rename to xen/include/arch-arm/asm/vreg.h
diff --git a/xen/include/asm-arm/vtimer.h b/xen/include/arch-arm/asm/vtimer.h
similarity index 100%
rename from xen/include/asm-arm/vtimer.h
rename to xen/include/arch-arm/asm/vtimer.h
diff --git a/xen/include/asm-arm/xenoprof.h b/xen/include/arch-arm/asm/xenoprof.h
similarity index 100%
rename from xen/include/asm-arm/xenoprof.h
rename to xen/include/arch-arm/asm/xenoprof.h
diff --git a/xen/include/asm-riscv/config.h b/xen/include/arch-riscv/asm/config.h
similarity index 100%
rename from xen/include/asm-riscv/config.h
rename to xen/include/arch-riscv/asm/config.h
diff --git a/xen/include/asm-x86/acpi.h b/xen/include/arch-x86/asm/acpi.h
similarity index 100%
rename from xen/include/asm-x86/acpi.h
rename to xen/include/arch-x86/asm/acpi.h
diff --git a/xen/include/asm-x86/alternative-asm.h b/xen/include/arch-x86/asm/alternative-asm.h
similarity index 100%
rename from xen/include/asm-x86/alternative-asm.h
rename to xen/include/arch-x86/asm/alternative-asm.h
diff --git a/xen/include/asm-x86/alternative.h b/xen/include/arch-x86/asm/alternative.h
similarity index 100%
rename from xen/include/asm-x86/alternative.h
rename to xen/include/arch-x86/asm/alternative.h
diff --git a/xen/include/asm-x86/altp2m.h b/xen/include/arch-x86/asm/altp2m.h
similarity index 100%
rename from xen/include/asm-x86/altp2m.h
rename to xen/include/arch-x86/asm/altp2m.h
diff --git a/xen/include/asm-x86/amd.h b/xen/include/arch-x86/asm/amd.h
similarity index 100%
rename from xen/include/asm-x86/amd.h
rename to xen/include/arch-x86/asm/amd.h
diff --git a/xen/include/asm-x86/apic.h b/xen/include/arch-x86/asm/apic.h
similarity index 100%
rename from xen/include/asm-x86/apic.h
rename to xen/include/arch-x86/asm/apic.h
diff --git a/xen/include/asm-x86/apicdef.h b/xen/include/arch-x86/asm/apicdef.h
similarity index 100%
rename from xen/include/asm-x86/apicdef.h
rename to xen/include/arch-x86/asm/apicdef.h
diff --git a/xen/include/asm-x86/asm-defns.h b/xen/include/arch-x86/asm/asm-defns.h
similarity index 100%
rename from xen/include/asm-x86/asm-defns.h
rename to xen/include/arch-x86/asm/asm-defns.h
diff --git a/xen/include/asm-x86/asm_defns.h b/xen/include/arch-x86/asm/asm_defns.h
similarity index 100%
rename from xen/include/asm-x86/asm_defns.h
rename to xen/include/arch-x86/asm/asm_defns.h
diff --git a/xen/include/asm-x86/atomic.h b/xen/include/arch-x86/asm/atomic.h
similarity index 100%
rename from xen/include/asm-x86/atomic.h
rename to xen/include/arch-x86/asm/atomic.h
diff --git a/xen/include/asm-x86/bitops.h b/xen/include/arch-x86/asm/bitops.h
similarity index 100%
rename from xen/include/asm-x86/bitops.h
rename to xen/include/arch-x86/asm/bitops.h
diff --git a/xen/include/asm-x86/bug.h b/xen/include/arch-x86/asm/bug.h
similarity index 100%
rename from xen/include/asm-x86/bug.h
rename to xen/include/arch-x86/asm/bug.h
diff --git a/xen/include/asm-x86/byteorder.h b/xen/include/arch-x86/asm/byteorder.h
similarity index 100%
rename from xen/include/asm-x86/byteorder.h
rename to xen/include/arch-x86/asm/byteorder.h
diff --git a/xen/include/asm-x86/bzimage.h b/xen/include/arch-x86/asm/bzimage.h
similarity index 100%
rename from xen/include/asm-x86/bzimage.h
rename to xen/include/arch-x86/asm/bzimage.h
diff --git a/xen/include/asm-x86/cache.h b/xen/include/arch-x86/asm/cache.h
similarity index 100%
rename from xen/include/asm-x86/cache.h
rename to xen/include/arch-x86/asm/cache.h
diff --git a/xen/include/asm-x86/compat.h b/xen/include/arch-x86/asm/compat.h
similarity index 100%
rename from xen/include/asm-x86/compat.h
rename to xen/include/arch-x86/asm/compat.h
diff --git a/xen/include/asm-x86/config.h b/xen/include/arch-x86/asm/config.h
similarity index 100%
rename from xen/include/asm-x86/config.h
rename to xen/include/arch-x86/asm/config.h
diff --git a/xen/include/asm-x86/cpufeature.h b/xen/include/arch-x86/asm/cpufeature.h
similarity index 100%
rename from xen/include/asm-x86/cpufeature.h
rename to xen/include/arch-x86/asm/cpufeature.h
diff --git a/xen/include/asm-x86/cpufeatures.h b/xen/include/arch-x86/asm/cpufeatures.h
similarity index 100%
rename from xen/include/asm-x86/cpufeatures.h
rename to xen/include/arch-x86/asm/cpufeatures.h
diff --git a/xen/include/asm-x86/cpufeatureset.h b/xen/include/arch-x86/asm/cpufeatureset.h
similarity index 100%
rename from xen/include/asm-x86/cpufeatureset.h
rename to xen/include/arch-x86/asm/cpufeatureset.h
diff --git a/xen/include/asm-x86/cpuid.h b/xen/include/arch-x86/asm/cpuid.h
similarity index 100%
rename from xen/include/asm-x86/cpuid.h
rename to xen/include/arch-x86/asm/cpuid.h
diff --git a/xen/include/asm-x86/cpuidle.h b/xen/include/arch-x86/asm/cpuidle.h
similarity index 100%
rename from xen/include/asm-x86/cpuidle.h
rename to xen/include/arch-x86/asm/cpuidle.h
diff --git a/xen/include/asm-x86/current.h b/xen/include/arch-x86/asm/current.h
similarity index 99%
rename from xen/include/asm-x86/current.h
rename to xen/include/arch-x86/asm/current.h
index a74ad4bc4c44..c0f949eb2a19 100644
--- a/xen/include/asm-x86/current.h
+++ b/xen/include/arch-x86/asm/current.h
@@ -53,7 +53,7 @@ struct cpu_info {
     unsigned long xen_cr3;
     unsigned long pv_cr3;
 
-    /* See asm-x86/spec_ctrl_asm.h for usage. */
+    /* See arch-x86/asm/spec_ctrl_asm.h for usage. */
     unsigned int shadow_spec_ctrl;
     uint8_t      xen_spec_ctrl;
     uint8_t      spec_ctrl_flags;
diff --git a/xen/include/asm-x86/debugger.h b/xen/include/arch-x86/asm/debugger.h
similarity index 100%
rename from xen/include/asm-x86/debugger.h
rename to xen/include/arch-x86/asm/debugger.h
diff --git a/xen/include/asm-x86/debugreg.h b/xen/include/arch-x86/asm/debugreg.h
similarity index 100%
rename from xen/include/asm-x86/debugreg.h
rename to xen/include/arch-x86/asm/debugreg.h
diff --git a/xen/include/asm-x86/delay.h b/xen/include/arch-x86/asm/delay.h
similarity index 100%
rename from xen/include/asm-x86/delay.h
rename to xen/include/arch-x86/asm/delay.h
diff --git a/xen/include/asm-x86/desc.h b/xen/include/arch-x86/asm/desc.h
similarity index 100%
rename from xen/include/asm-x86/desc.h
rename to xen/include/arch-x86/asm/desc.h
diff --git a/xen/include/asm-x86/device.h b/xen/include/arch-x86/asm/device.h
similarity index 100%
rename from xen/include/asm-x86/device.h
rename to xen/include/arch-x86/asm/device.h
diff --git a/xen/include/asm-x86/div64.h b/xen/include/arch-x86/asm/div64.h
similarity index 100%
rename from xen/include/asm-x86/div64.h
rename to xen/include/arch-x86/asm/div64.h
diff --git a/xen/include/asm-x86/dom0_build.h b/xen/include/arch-x86/asm/dom0_build.h
similarity index 100%
rename from xen/include/asm-x86/dom0_build.h
rename to xen/include/arch-x86/asm/dom0_build.h
diff --git a/xen/include/asm-x86/domain.h b/xen/include/arch-x86/asm/domain.h
similarity index 99%
rename from xen/include/asm-x86/domain.h
rename to xen/include/arch-x86/asm/domain.h
index 92d54de0b9a1..85ad302c0e92 100644
--- a/xen/include/asm-x86/domain.h
+++ b/xen/include/arch-x86/asm/domain.h
@@ -384,7 +384,7 @@ struct arch_domain
     struct PITState vpit;
 
     /* TSC management (emulation, pv, scaling, stats) */
-    int tsc_mode;            /* see include/asm-x86/time.h */
+    int tsc_mode;            /* see include/arch-x86/asm/time.h */
     bool_t vtsc;             /* tsc is emulated (may change after migrate) */
     s_time_t vtsc_last;      /* previous TSC value (guarantee monotonicity) */
     uint64_t vtsc_offset;    /* adjustment for save/restore/migrate */
diff --git a/xen/include/asm-x86/e820.h b/xen/include/arch-x86/asm/e820.h
similarity index 100%
rename from xen/include/asm-x86/e820.h
rename to xen/include/arch-x86/asm/e820.h
diff --git a/xen/include/asm-x86/edd.h b/xen/include/arch-x86/asm/edd.h
similarity index 100%
rename from xen/include/asm-x86/edd.h
rename to xen/include/arch-x86/asm/edd.h
diff --git a/xen/include/asm-x86/efibind.h b/xen/include/arch-x86/asm/efibind.h
similarity index 100%
rename from xen/include/asm-x86/efibind.h
rename to xen/include/arch-x86/asm/efibind.h
diff --git a/xen/include/asm-x86/elf.h b/xen/include/arch-x86/asm/elf.h
similarity index 100%
rename from xen/include/asm-x86/elf.h
rename to xen/include/arch-x86/asm/elf.h
diff --git a/xen/include/asm-x86/event.h b/xen/include/arch-x86/asm/event.h
similarity index 100%
rename from xen/include/asm-x86/event.h
rename to xen/include/arch-x86/asm/event.h
diff --git a/xen/include/asm-x86/fixmap.h b/xen/include/arch-x86/asm/fixmap.h
similarity index 100%
rename from xen/include/asm-x86/fixmap.h
rename to xen/include/arch-x86/asm/fixmap.h
diff --git a/xen/include/asm-x86/flushtlb.h b/xen/include/arch-x86/asm/flushtlb.h
similarity index 100%
rename from xen/include/asm-x86/flushtlb.h
rename to xen/include/arch-x86/asm/flushtlb.h
diff --git a/xen/include/asm-x86/genapic.h b/xen/include/arch-x86/asm/genapic.h
similarity index 100%
rename from xen/include/asm-x86/genapic.h
rename to xen/include/arch-x86/asm/genapic.h
diff --git a/xen/include/asm-x86/grant_table.h b/xen/include/arch-x86/asm/grant_table.h
similarity index 100%
rename from xen/include/asm-x86/grant_table.h
rename to xen/include/arch-x86/asm/grant_table.h
diff --git a/xen/include/asm-x86/guest.h b/xen/include/arch-x86/asm/guest.h
similarity index 100%
rename from xen/include/asm-x86/guest.h
rename to xen/include/arch-x86/asm/guest.h
diff --git a/xen/include/asm-x86/guest/hyperv-hcall.h b/xen/include/arch-x86/asm/guest/hyperv-hcall.h
similarity index 100%
rename from xen/include/asm-x86/guest/hyperv-hcall.h
rename to xen/include/arch-x86/asm/guest/hyperv-hcall.h
diff --git a/xen/include/asm-x86/guest/hyperv-tlfs.h b/xen/include/arch-x86/asm/guest/hyperv-tlfs.h
similarity index 100%
rename from xen/include/asm-x86/guest/hyperv-tlfs.h
rename to xen/include/arch-x86/asm/guest/hyperv-tlfs.h
diff --git a/xen/include/asm-x86/guest/hyperv.h b/xen/include/arch-x86/asm/guest/hyperv.h
similarity index 100%
rename from xen/include/asm-x86/guest/hyperv.h
rename to xen/include/arch-x86/asm/guest/hyperv.h
diff --git a/xen/include/asm-x86/guest/hypervisor.h b/xen/include/arch-x86/asm/guest/hypervisor.h
similarity index 100%
rename from xen/include/asm-x86/guest/hypervisor.h
rename to xen/include/arch-x86/asm/guest/hypervisor.h
diff --git a/xen/include/asm-x86/guest/pvh-boot.h b/xen/include/arch-x86/asm/guest/pvh-boot.h
similarity index 100%
rename from xen/include/asm-x86/guest/pvh-boot.h
rename to xen/include/arch-x86/asm/guest/pvh-boot.h
diff --git a/xen/include/asm-x86/guest/xen-hcall.h b/xen/include/arch-x86/asm/guest/xen-hcall.h
similarity index 100%
rename from xen/include/asm-x86/guest/xen-hcall.h
rename to xen/include/arch-x86/asm/guest/xen-hcall.h
diff --git a/xen/include/asm-x86/guest/xen.h b/xen/include/arch-x86/asm/guest/xen.h
similarity index 100%
rename from xen/include/asm-x86/guest/xen.h
rename to xen/include/arch-x86/asm/guest/xen.h
diff --git a/xen/include/asm-x86/guest_access.h b/xen/include/arch-x86/asm/guest_access.h
similarity index 100%
rename from xen/include/asm-x86/guest_access.h
rename to xen/include/arch-x86/asm/guest_access.h
diff --git a/xen/include/asm-x86/guest_atomics.h b/xen/include/arch-x86/asm/guest_atomics.h
similarity index 100%
rename from xen/include/asm-x86/guest_atomics.h
rename to xen/include/arch-x86/asm/guest_atomics.h
diff --git a/xen/include/asm-x86/guest_pt.h b/xen/include/arch-x86/asm/guest_pt.h
similarity index 100%
rename from xen/include/asm-x86/guest_pt.h
rename to xen/include/arch-x86/asm/guest_pt.h
diff --git a/xen/include/asm-x86/hap.h b/xen/include/arch-x86/asm/hap.h
similarity index 100%
rename from xen/include/asm-x86/hap.h
rename to xen/include/arch-x86/asm/hap.h
diff --git a/xen/include/asm-x86/hardirq.h b/xen/include/arch-x86/asm/hardirq.h
similarity index 100%
rename from xen/include/asm-x86/hardirq.h
rename to xen/include/arch-x86/asm/hardirq.h
diff --git a/xen/include/asm-x86/hpet.h b/xen/include/arch-x86/asm/hpet.h
similarity index 100%
rename from xen/include/asm-x86/hpet.h
rename to xen/include/arch-x86/asm/hpet.h
diff --git a/xen/include/asm-x86/hvm/asid.h b/xen/include/arch-x86/asm/hvm/asid.h
similarity index 100%
rename from xen/include/asm-x86/hvm/asid.h
rename to xen/include/arch-x86/asm/hvm/asid.h
diff --git a/xen/include/asm-x86/hvm/cacheattr.h b/xen/include/arch-x86/asm/hvm/cacheattr.h
similarity index 100%
rename from xen/include/asm-x86/hvm/cacheattr.h
rename to xen/include/arch-x86/asm/hvm/cacheattr.h
diff --git a/xen/include/asm-x86/hvm/domain.h b/xen/include/arch-x86/asm/hvm/domain.h
similarity index 100%
rename from xen/include/asm-x86/hvm/domain.h
rename to xen/include/arch-x86/asm/hvm/domain.h
diff --git a/xen/include/asm-x86/hvm/emulate.h b/xen/include/arch-x86/asm/hvm/emulate.h
similarity index 100%
rename from xen/include/asm-x86/hvm/emulate.h
rename to xen/include/arch-x86/asm/hvm/emulate.h
diff --git a/xen/include/asm-x86/hvm/grant_table.h b/xen/include/arch-x86/asm/hvm/grant_table.h
similarity index 100%
rename from xen/include/asm-x86/hvm/grant_table.h
rename to xen/include/arch-x86/asm/hvm/grant_table.h
diff --git a/xen/include/asm-x86/hvm/guest_access.h b/xen/include/arch-x86/asm/hvm/guest_access.h
similarity index 100%
rename from xen/include/asm-x86/hvm/guest_access.h
rename to xen/include/arch-x86/asm/hvm/guest_access.h
diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/arch-x86/asm/hvm/hvm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/hvm.h
rename to xen/include/arch-x86/asm/hvm/hvm.h
diff --git a/xen/include/asm-x86/hvm/io.h b/xen/include/arch-x86/asm/hvm/io.h
similarity index 100%
rename from xen/include/asm-x86/hvm/io.h
rename to xen/include/arch-x86/asm/hvm/io.h
diff --git a/xen/include/asm-x86/hvm/ioreq.h b/xen/include/arch-x86/asm/hvm/ioreq.h
similarity index 100%
rename from xen/include/asm-x86/hvm/ioreq.h
rename to xen/include/arch-x86/asm/hvm/ioreq.h
diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/arch-x86/asm/hvm/irq.h
similarity index 100%
rename from xen/include/asm-x86/hvm/irq.h
rename to xen/include/arch-x86/asm/hvm/irq.h
diff --git a/xen/include/asm-x86/hvm/monitor.h b/xen/include/arch-x86/asm/hvm/monitor.h
similarity index 100%
rename from xen/include/asm-x86/hvm/monitor.h
rename to xen/include/arch-x86/asm/hvm/monitor.h
diff --git a/xen/include/asm-x86/hvm/nestedhvm.h b/xen/include/arch-x86/asm/hvm/nestedhvm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/nestedhvm.h
rename to xen/include/arch-x86/asm/hvm/nestedhvm.h
diff --git a/xen/include/asm-x86/hvm/save.h b/xen/include/arch-x86/asm/hvm/save.h
similarity index 100%
rename from xen/include/asm-x86/hvm/save.h
rename to xen/include/arch-x86/asm/hvm/save.h
diff --git a/xen/include/asm-x86/hvm/support.h b/xen/include/arch-x86/asm/hvm/support.h
similarity index 100%
rename from xen/include/asm-x86/hvm/support.h
rename to xen/include/arch-x86/asm/hvm/support.h
diff --git a/xen/include/asm-x86/hvm/svm/asid.h b/xen/include/arch-x86/asm/hvm/svm/asid.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/asid.h
rename to xen/include/arch-x86/asm/hvm/svm/asid.h
diff --git a/xen/include/asm-x86/hvm/svm/emulate.h b/xen/include/arch-x86/asm/hvm/svm/emulate.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/emulate.h
rename to xen/include/arch-x86/asm/hvm/svm/emulate.h
diff --git a/xen/include/asm-x86/hvm/svm/intr.h b/xen/include/arch-x86/asm/hvm/svm/intr.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/intr.h
rename to xen/include/arch-x86/asm/hvm/svm/intr.h
diff --git a/xen/include/asm-x86/hvm/svm/nestedsvm.h b/xen/include/arch-x86/asm/hvm/svm/nestedsvm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/nestedsvm.h
rename to xen/include/arch-x86/asm/hvm/svm/nestedsvm.h
diff --git a/xen/include/asm-x86/hvm/svm/svm.h b/xen/include/arch-x86/asm/hvm/svm/svm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/svm.h
rename to xen/include/arch-x86/asm/hvm/svm/svm.h
diff --git a/xen/include/asm-x86/hvm/svm/svmdebug.h b/xen/include/arch-x86/asm/hvm/svm/svmdebug.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/svmdebug.h
rename to xen/include/arch-x86/asm/hvm/svm/svmdebug.h
diff --git a/xen/include/asm-x86/hvm/svm/vmcb.h b/xen/include/arch-x86/asm/hvm/svm/vmcb.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/vmcb.h
rename to xen/include/arch-x86/asm/hvm/svm/vmcb.h
diff --git a/xen/include/asm-x86/hvm/trace.h b/xen/include/arch-x86/asm/hvm/trace.h
similarity index 100%
rename from xen/include/asm-x86/hvm/trace.h
rename to xen/include/arch-x86/asm/hvm/trace.h
diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/include/arch-x86/asm/hvm/vcpu.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vcpu.h
rename to xen/include/arch-x86/asm/hvm/vcpu.h
diff --git a/xen/include/asm-x86/hvm/vioapic.h b/xen/include/arch-x86/asm/hvm/vioapic.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vioapic.h
rename to xen/include/arch-x86/asm/hvm/vioapic.h
diff --git a/xen/include/asm-x86/hvm/viridian.h b/xen/include/arch-x86/asm/hvm/viridian.h
similarity index 100%
rename from xen/include/asm-x86/hvm/viridian.h
rename to xen/include/arch-x86/asm/hvm/viridian.h
diff --git a/xen/include/asm-x86/hvm/vlapic.h b/xen/include/arch-x86/asm/hvm/vlapic.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vlapic.h
rename to xen/include/arch-x86/asm/hvm/vlapic.h
diff --git a/xen/include/asm-x86/hvm/vm_event.h b/xen/include/arch-x86/asm/hvm/vm_event.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vm_event.h
rename to xen/include/arch-x86/asm/hvm/vm_event.h
diff --git a/xen/include/asm-x86/hvm/vmx/vmcs.h b/xen/include/arch-x86/asm/hvm/vmx/vmcs.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vmx/vmcs.h
rename to xen/include/arch-x86/asm/hvm/vmx/vmcs.h
diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/arch-x86/asm/hvm/vmx/vmx.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vmx/vmx.h
rename to xen/include/arch-x86/asm/hvm/vmx/vmx.h
diff --git a/xen/include/asm-x86/hvm/vmx/vvmx.h b/xen/include/arch-x86/asm/hvm/vmx/vvmx.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vmx/vvmx.h
rename to xen/include/arch-x86/asm/hvm/vmx/vvmx.h
diff --git a/xen/include/asm-x86/hvm/vpic.h b/xen/include/arch-x86/asm/hvm/vpic.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vpic.h
rename to xen/include/arch-x86/asm/hvm/vpic.h
diff --git a/xen/include/asm-x86/hvm/vpt.h b/xen/include/arch-x86/asm/hvm/vpt.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vpt.h
rename to xen/include/arch-x86/asm/hvm/vpt.h
diff --git a/xen/include/asm-x86/hypercall.h b/xen/include/arch-x86/asm/hypercall.h
similarity index 100%
rename from xen/include/asm-x86/hypercall.h
rename to xen/include/arch-x86/asm/hypercall.h
diff --git a/xen/include/asm-x86/i387.h b/xen/include/arch-x86/asm/i387.h
similarity index 100%
rename from xen/include/asm-x86/i387.h
rename to xen/include/arch-x86/asm/i387.h
diff --git a/xen/include/asm-x86/init.h b/xen/include/arch-x86/asm/init.h
similarity index 100%
rename from xen/include/asm-x86/init.h
rename to xen/include/arch-x86/asm/init.h
diff --git a/xen/include/asm-x86/invpcid.h b/xen/include/arch-x86/asm/invpcid.h
similarity index 100%
rename from xen/include/asm-x86/invpcid.h
rename to xen/include/arch-x86/asm/invpcid.h
diff --git a/xen/include/asm-x86/io.h b/xen/include/arch-x86/asm/io.h
similarity index 100%
rename from xen/include/asm-x86/io.h
rename to xen/include/arch-x86/asm/io.h
diff --git a/xen/include/asm-x86/io_apic.h b/xen/include/arch-x86/asm/io_apic.h
similarity index 100%
rename from xen/include/asm-x86/io_apic.h
rename to xen/include/arch-x86/asm/io_apic.h
diff --git a/xen/include/asm-x86/iocap.h b/xen/include/arch-x86/asm/iocap.h
similarity index 100%
rename from xen/include/asm-x86/iocap.h
rename to xen/include/arch-x86/asm/iocap.h
diff --git a/xen/include/asm-x86/iommu.h b/xen/include/arch-x86/asm/iommu.h
similarity index 100%
rename from xen/include/asm-x86/iommu.h
rename to xen/include/arch-x86/asm/iommu.h
diff --git a/xen/include/asm-x86/ioreq.h b/xen/include/arch-x86/asm/ioreq.h
similarity index 100%
rename from xen/include/asm-x86/ioreq.h
rename to xen/include/arch-x86/asm/ioreq.h
diff --git a/xen/include/asm-x86/irq.h b/xen/include/arch-x86/asm/irq.h
similarity index 100%
rename from xen/include/asm-x86/irq.h
rename to xen/include/arch-x86/asm/irq.h
diff --git a/xen/include/asm-x86/ldt.h b/xen/include/arch-x86/asm/ldt.h
similarity index 100%
rename from xen/include/asm-x86/ldt.h
rename to xen/include/arch-x86/asm/ldt.h
diff --git a/xen/include/asm-x86/livepatch.h b/xen/include/arch-x86/asm/livepatch.h
similarity index 100%
rename from xen/include/asm-x86/livepatch.h
rename to xen/include/arch-x86/asm/livepatch.h
diff --git a/xen/include/asm-x86/mach-default/bios_ebda.h b/xen/include/arch-x86/asm/mach-default/bios_ebda.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/bios_ebda.h
rename to xen/include/arch-x86/asm/mach-default/bios_ebda.h
diff --git a/xen/include/asm-x86/mach-default/io_ports.h b/xen/include/arch-x86/asm/mach-default/io_ports.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/io_ports.h
rename to xen/include/arch-x86/asm/mach-default/io_ports.h
diff --git a/xen/include/asm-x86/mach-default/irq_vectors.h b/xen/include/arch-x86/asm/mach-default/irq_vectors.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/irq_vectors.h
rename to xen/include/arch-x86/asm/mach-default/irq_vectors.h
diff --git a/xen/include/asm-x86/mach-default/mach_mpparse.h b/xen/include/arch-x86/asm/mach-default/mach_mpparse.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/mach_mpparse.h
rename to xen/include/arch-x86/asm/mach-default/mach_mpparse.h
diff --git a/xen/include/asm-x86/mach-default/mach_mpspec.h b/xen/include/arch-x86/asm/mach-default/mach_mpspec.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/mach_mpspec.h
rename to xen/include/arch-x86/asm/mach-default/mach_mpspec.h
diff --git a/xen/include/asm-x86/mach-generic/mach_apic.h b/xen/include/arch-x86/asm/mach-generic/mach_apic.h
similarity index 100%
rename from xen/include/asm-x86/mach-generic/mach_apic.h
rename to xen/include/arch-x86/asm/mach-generic/mach_apic.h
diff --git a/xen/include/asm-x86/mach-generic/mach_mpparse.h b/xen/include/arch-x86/asm/mach-generic/mach_mpparse.h
similarity index 100%
rename from xen/include/asm-x86/mach-generic/mach_mpparse.h
rename to xen/include/arch-x86/asm/mach-generic/mach_mpparse.h
diff --git a/xen/include/asm-x86/machine_kexec.h b/xen/include/arch-x86/asm/machine_kexec.h
similarity index 100%
rename from xen/include/asm-x86/machine_kexec.h
rename to xen/include/arch-x86/asm/machine_kexec.h
diff --git a/xen/include/asm-x86/mc146818rtc.h b/xen/include/arch-x86/asm/mc146818rtc.h
similarity index 100%
rename from xen/include/asm-x86/mc146818rtc.h
rename to xen/include/arch-x86/asm/mc146818rtc.h
diff --git a/xen/include/asm-x86/mce.h b/xen/include/arch-x86/asm/mce.h
similarity index 100%
rename from xen/include/asm-x86/mce.h
rename to xen/include/arch-x86/asm/mce.h
diff --git a/xen/include/asm-x86/mem_access.h b/xen/include/arch-x86/asm/mem_access.h
similarity index 100%
rename from xen/include/asm-x86/mem_access.h
rename to xen/include/arch-x86/asm/mem_access.h
diff --git a/xen/include/asm-x86/mem_paging.h b/xen/include/arch-x86/asm/mem_paging.h
similarity index 100%
rename from xen/include/asm-x86/mem_paging.h
rename to xen/include/arch-x86/asm/mem_paging.h
diff --git a/xen/include/asm-x86/mem_sharing.h b/xen/include/arch-x86/asm/mem_sharing.h
similarity index 100%
rename from xen/include/asm-x86/mem_sharing.h
rename to xen/include/arch-x86/asm/mem_sharing.h
diff --git a/xen/include/asm-x86/microcode.h b/xen/include/arch-x86/asm/microcode.h
similarity index 100%
rename from xen/include/asm-x86/microcode.h
rename to xen/include/arch-x86/asm/microcode.h
diff --git a/xen/include/asm-x86/mm.h b/xen/include/arch-x86/asm/mm.h
similarity index 100%
rename from xen/include/asm-x86/mm.h
rename to xen/include/arch-x86/asm/mm.h
diff --git a/xen/include/asm-x86/monitor.h b/xen/include/arch-x86/asm/monitor.h
similarity index 100%
rename from xen/include/asm-x86/monitor.h
rename to xen/include/arch-x86/asm/monitor.h
diff --git a/xen/include/asm-x86/mpspec.h b/xen/include/arch-x86/asm/mpspec.h
similarity index 100%
rename from xen/include/asm-x86/mpspec.h
rename to xen/include/arch-x86/asm/mpspec.h
diff --git a/xen/include/asm-x86/mpspec_def.h b/xen/include/arch-x86/asm/mpspec_def.h
similarity index 100%
rename from xen/include/asm-x86/mpspec_def.h
rename to xen/include/arch-x86/asm/mpspec_def.h
diff --git a/xen/include/asm-x86/msi.h b/xen/include/arch-x86/asm/msi.h
similarity index 100%
rename from xen/include/asm-x86/msi.h
rename to xen/include/arch-x86/asm/msi.h
diff --git a/xen/include/asm-x86/msr-index.h b/xen/include/arch-x86/asm/msr-index.h
similarity index 100%
rename from xen/include/asm-x86/msr-index.h
rename to xen/include/arch-x86/asm/msr-index.h
diff --git a/xen/include/asm-x86/msr.h b/xen/include/arch-x86/asm/msr.h
similarity index 100%
rename from xen/include/asm-x86/msr.h
rename to xen/include/arch-x86/asm/msr.h
diff --git a/xen/include/asm-x86/mtrr.h b/xen/include/arch-x86/asm/mtrr.h
similarity index 100%
rename from xen/include/asm-x86/mtrr.h
rename to xen/include/arch-x86/asm/mtrr.h
diff --git a/xen/include/asm-x86/multicall.h b/xen/include/arch-x86/asm/multicall.h
similarity index 100%
rename from xen/include/asm-x86/multicall.h
rename to xen/include/arch-x86/asm/multicall.h
diff --git a/xen/include/asm-x86/mwait.h b/xen/include/arch-x86/asm/mwait.h
similarity index 100%
rename from xen/include/asm-x86/mwait.h
rename to xen/include/arch-x86/asm/mwait.h
diff --git a/xen/include/asm-x86/nmi.h b/xen/include/arch-x86/asm/nmi.h
similarity index 100%
rename from xen/include/asm-x86/nmi.h
rename to xen/include/arch-x86/asm/nmi.h
diff --git a/xen/include/asm-x86/nops.h b/xen/include/arch-x86/asm/nops.h
similarity index 100%
rename from xen/include/asm-x86/nops.h
rename to xen/include/arch-x86/asm/nops.h
diff --git a/xen/include/asm-x86/nospec.h b/xen/include/arch-x86/asm/nospec.h
similarity index 100%
rename from xen/include/asm-x86/nospec.h
rename to xen/include/arch-x86/asm/nospec.h
diff --git a/xen/include/asm-x86/numa.h b/xen/include/arch-x86/asm/numa.h
similarity index 100%
rename from xen/include/asm-x86/numa.h
rename to xen/include/arch-x86/asm/numa.h
diff --git a/xen/include/asm-x86/p2m.h b/xen/include/arch-x86/asm/p2m.h
similarity index 100%
rename from xen/include/asm-x86/p2m.h
rename to xen/include/arch-x86/asm/p2m.h
diff --git a/xen/include/asm-x86/page-bits.h b/xen/include/arch-x86/asm/page-bits.h
similarity index 100%
rename from xen/include/asm-x86/page-bits.h
rename to xen/include/arch-x86/asm/page-bits.h
diff --git a/xen/include/asm-x86/page.h b/xen/include/arch-x86/asm/page.h
similarity index 100%
rename from xen/include/asm-x86/page.h
rename to xen/include/arch-x86/asm/page.h
diff --git a/xen/include/asm-x86/paging.h b/xen/include/arch-x86/asm/paging.h
similarity index 100%
rename from xen/include/asm-x86/paging.h
rename to xen/include/arch-x86/asm/paging.h
diff --git a/xen/include/asm-x86/pci.h b/xen/include/arch-x86/asm/pci.h
similarity index 100%
rename from xen/include/asm-x86/pci.h
rename to xen/include/arch-x86/asm/pci.h
diff --git a/xen/include/asm-x86/percpu.h b/xen/include/arch-x86/asm/percpu.h
similarity index 100%
rename from xen/include/asm-x86/percpu.h
rename to xen/include/arch-x86/asm/percpu.h
diff --git a/xen/include/asm-x86/perfc.h b/xen/include/arch-x86/asm/perfc.h
similarity index 100%
rename from xen/include/asm-x86/perfc.h
rename to xen/include/arch-x86/asm/perfc.h
diff --git a/xen/include/asm-x86/perfc_defn.h b/xen/include/arch-x86/asm/perfc_defn.h
similarity index 100%
rename from xen/include/asm-x86/perfc_defn.h
rename to xen/include/arch-x86/asm/perfc_defn.h
diff --git a/xen/include/asm-x86/processor.h b/xen/include/arch-x86/asm/processor.h
similarity index 100%
rename from xen/include/asm-x86/processor.h
rename to xen/include/arch-x86/asm/processor.h
diff --git a/xen/include/asm-x86/psr.h b/xen/include/arch-x86/asm/psr.h
similarity index 100%
rename from xen/include/asm-x86/psr.h
rename to xen/include/arch-x86/asm/psr.h
diff --git a/xen/include/asm-x86/pv/domain.h b/xen/include/arch-x86/asm/pv/domain.h
similarity index 100%
rename from xen/include/asm-x86/pv/domain.h
rename to xen/include/arch-x86/asm/pv/domain.h
diff --git a/xen/include/asm-x86/pv/grant_table.h b/xen/include/arch-x86/asm/pv/grant_table.h
similarity index 100%
rename from xen/include/asm-x86/pv/grant_table.h
rename to xen/include/arch-x86/asm/pv/grant_table.h
diff --git a/xen/include/asm-x86/pv/mm.h b/xen/include/arch-x86/asm/pv/mm.h
similarity index 100%
rename from xen/include/asm-x86/pv/mm.h
rename to xen/include/arch-x86/asm/pv/mm.h
diff --git a/xen/include/asm-x86/pv/shim.h b/xen/include/arch-x86/asm/pv/shim.h
similarity index 100%
rename from xen/include/asm-x86/pv/shim.h
rename to xen/include/arch-x86/asm/pv/shim.h
diff --git a/xen/include/asm-x86/pv/traps.h b/xen/include/arch-x86/asm/pv/traps.h
similarity index 100%
rename from xen/include/asm-x86/pv/traps.h
rename to xen/include/arch-x86/asm/pv/traps.h
diff --git a/xen/include/asm-x86/random.h b/xen/include/arch-x86/asm/random.h
similarity index 100%
rename from xen/include/asm-x86/random.h
rename to xen/include/arch-x86/asm/random.h
diff --git a/xen/include/asm-x86/regs.h b/xen/include/arch-x86/asm/regs.h
similarity index 100%
rename from xen/include/asm-x86/regs.h
rename to xen/include/arch-x86/asm/regs.h
diff --git a/xen/include/asm-x86/setup.h b/xen/include/arch-x86/asm/setup.h
similarity index 100%
rename from xen/include/asm-x86/setup.h
rename to xen/include/arch-x86/asm/setup.h
diff --git a/xen/include/asm-x86/shadow.h b/xen/include/arch-x86/asm/shadow.h
similarity index 100%
rename from xen/include/asm-x86/shadow.h
rename to xen/include/arch-x86/asm/shadow.h
diff --git a/xen/include/asm-x86/shared.h b/xen/include/arch-x86/asm/shared.h
similarity index 100%
rename from xen/include/asm-x86/shared.h
rename to xen/include/arch-x86/asm/shared.h
diff --git a/xen/include/asm-x86/smp.h b/xen/include/arch-x86/asm/smp.h
similarity index 100%
rename from xen/include/asm-x86/smp.h
rename to xen/include/arch-x86/asm/smp.h
diff --git a/xen/include/asm-x86/softirq.h b/xen/include/arch-x86/asm/softirq.h
similarity index 100%
rename from xen/include/asm-x86/softirq.h
rename to xen/include/arch-x86/asm/softirq.h
diff --git a/xen/include/asm-x86/spec_ctrl.h b/xen/include/arch-x86/asm/spec_ctrl.h
similarity index 100%
rename from xen/include/asm-x86/spec_ctrl.h
rename to xen/include/arch-x86/asm/spec_ctrl.h
diff --git a/xen/include/asm-x86/spec_ctrl_asm.h b/xen/include/arch-x86/asm/spec_ctrl_asm.h
similarity index 100%
rename from xen/include/asm-x86/spec_ctrl_asm.h
rename to xen/include/arch-x86/asm/spec_ctrl_asm.h
diff --git a/xen/include/asm-x86/spinlock.h b/xen/include/arch-x86/asm/spinlock.h
similarity index 100%
rename from xen/include/asm-x86/spinlock.h
rename to xen/include/arch-x86/asm/spinlock.h
diff --git a/xen/include/asm-x86/string.h b/xen/include/arch-x86/asm/string.h
similarity index 100%
rename from xen/include/asm-x86/string.h
rename to xen/include/arch-x86/asm/string.h
diff --git a/xen/include/asm-x86/system.h b/xen/include/arch-x86/asm/system.h
similarity index 100%
rename from xen/include/asm-x86/system.h
rename to xen/include/arch-x86/asm/system.h
diff --git a/xen/include/asm-x86/tboot.h b/xen/include/arch-x86/asm/tboot.h
similarity index 100%
rename from xen/include/asm-x86/tboot.h
rename to xen/include/arch-x86/asm/tboot.h
diff --git a/xen/include/asm-x86/time.h b/xen/include/arch-x86/asm/time.h
similarity index 100%
rename from xen/include/asm-x86/time.h
rename to xen/include/arch-x86/asm/time.h
diff --git a/xen/include/asm-x86/trace.h b/xen/include/arch-x86/asm/trace.h
similarity index 100%
rename from xen/include/asm-x86/trace.h
rename to xen/include/arch-x86/asm/trace.h
diff --git a/xen/include/asm-x86/traps.h b/xen/include/arch-x86/asm/traps.h
similarity index 100%
rename from xen/include/asm-x86/traps.h
rename to xen/include/arch-x86/asm/traps.h
diff --git a/xen/include/asm-x86/types.h b/xen/include/arch-x86/asm/types.h
similarity index 100%
rename from xen/include/asm-x86/types.h
rename to xen/include/arch-x86/asm/types.h
diff --git a/xen/include/asm-x86/uaccess.h b/xen/include/arch-x86/asm/uaccess.h
similarity index 100%
rename from xen/include/asm-x86/uaccess.h
rename to xen/include/arch-x86/asm/uaccess.h
diff --git a/xen/include/asm-x86/unaligned.h b/xen/include/arch-x86/asm/unaligned.h
similarity index 100%
rename from xen/include/asm-x86/unaligned.h
rename to xen/include/arch-x86/asm/unaligned.h
diff --git a/xen/include/asm-x86/vm_event.h b/xen/include/arch-x86/asm/vm_event.h
similarity index 100%
rename from xen/include/asm-x86/vm_event.h
rename to xen/include/arch-x86/asm/vm_event.h
diff --git a/xen/include/asm-x86/vpmu.h b/xen/include/arch-x86/asm/vpmu.h
similarity index 100%
rename from xen/include/asm-x86/vpmu.h
rename to xen/include/arch-x86/asm/vpmu.h
diff --git a/xen/include/asm-x86/x86-defns.h b/xen/include/arch-x86/asm/x86-defns.h
similarity index 100%
rename from xen/include/asm-x86/x86-defns.h
rename to xen/include/arch-x86/asm/x86-defns.h
diff --git a/xen/include/asm-x86/x86-vendors.h b/xen/include/arch-x86/asm/x86-vendors.h
similarity index 100%
rename from xen/include/asm-x86/x86-vendors.h
rename to xen/include/arch-x86/asm/x86-vendors.h
diff --git a/xen/include/asm-x86/x86_64/efibind.h b/xen/include/arch-x86/asm/x86_64/efibind.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/efibind.h
rename to xen/include/arch-x86/asm/x86_64/efibind.h
diff --git a/xen/include/asm-x86/x86_64/elf.h b/xen/include/arch-x86/asm/x86_64/elf.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/elf.h
rename to xen/include/arch-x86/asm/x86_64/elf.h
diff --git a/xen/include/asm-x86/x86_64/page.h b/xen/include/arch-x86/asm/x86_64/page.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/page.h
rename to xen/include/arch-x86/asm/x86_64/page.h
diff --git a/xen/include/asm-x86/x86_64/regs.h b/xen/include/arch-x86/asm/x86_64/regs.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/regs.h
rename to xen/include/arch-x86/asm/x86_64/regs.h
diff --git a/xen/include/asm-x86/x86_64/system.h b/xen/include/arch-x86/asm/x86_64/system.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/system.h
rename to xen/include/arch-x86/asm/x86_64/system.h
diff --git a/xen/include/asm-x86/x86_64/uaccess.h b/xen/include/arch-x86/asm/x86_64/uaccess.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/uaccess.h
rename to xen/include/arch-x86/asm/x86_64/uaccess.h
diff --git a/xen/include/asm-x86/x86_emulate.h b/xen/include/arch-x86/asm/x86_emulate.h
similarity index 100%
rename from xen/include/asm-x86/x86_emulate.h
rename to xen/include/arch-x86/asm/x86_emulate.h
diff --git a/xen/include/asm-x86/xenoprof.h b/xen/include/arch-x86/asm/xenoprof.h
similarity index 100%
rename from xen/include/asm-x86/xenoprof.h
rename to xen/include/arch-x86/asm/xenoprof.h
diff --git a/xen/include/asm-x86/xstate.h b/xen/include/arch-x86/asm/xstate.h
similarity index 100%
rename from xen/include/asm-x86/xstate.h
rename to xen/include/arch-x86/asm/xstate.h
diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index 088c238a504a..e03ae4e74ee3 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -40,8 +40,8 @@
 #define ACPI_MADT_GET_TRIGGER(inti)	ACPI_MADT_GET_(TRIGGER, inti)
 
 /*
- * Fixmap pages to reserve for ACPI boot-time tables (see asm-x86/fixmap.h or
- * asm-arm/config.h, 64 pages(256KB) is large enough for most cases.)
+ * Fixmap pages to reserve for ACPI boot-time tables (see arch-x86/asm/fixmap.h
+ * or arch-arm/asm/config.h, 64 pages(256KB) is large enough for most cases.)
  */
 #define NUM_FIXMAP_ACPI_PAGES  64
 
diff --git a/xen/include/xen/bitmap.h b/xen/include/xen/bitmap.h
index 634a259645fb..6d69c72c2e03 100644
--- a/xen/include/xen/bitmap.h
+++ b/xen/include/xen/bitmap.h
@@ -14,7 +14,7 @@
  *
  * Function implementations generic to all architectures are in
  * lib/bitmap.c.  Functions implementations that are architecture
- * specific are in various include/asm-<arch>/bitops.h headers
+ * specific are in various include/arch-<arch>/asm/bitops.h headers
  * and other arch/<arch> specific files.
  *
  * See lib/bitmap.c for more details.
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148811.275137 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZj-0005IG-RI; Thu, 01 Jul 2021 14:21:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148811.275137; Thu, 01 Jul 2021 14:21:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZj-0005Gh-Dt; Thu, 01 Jul 2021 14:21:55 +0000
Received: by outflank-mailman (input) for mailman id 148811;
 Thu, 01 Jul 2021 14:21:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxPv-0005F9-L9
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:11:47 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2af6936c-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:03 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2af6936c-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148663;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=d78ReIC4dkXR+RmdsCXwSdPyXPKAHSLgx1r8az094Oo=;
  b=eIxBi1MBjmYipGvvmIhPEBPKrG9UCNUsnwW5XXsZC9PgxcdePe5u9w+n
   3x11jLRKnJG5OFZbKfcoHCct53ACGks3fCV35UFd7j5wQWJHcPuVdTvPp
   HVkFdjJ1t8il1sTlP/H7w6Mhh7wDdwFwt3KV8j2OW02nyxv00lF36OLJK
   g=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: HUVxGlcv97ZQa0q3AG+QVFZyCim0+EctzY0AQqEJU9/a4O2q/VswMmJj2dscPL3gGS5BYDUtXu
 Ln5LcK0JeLj8SLBWQUwwPZcb+CBR0MgtYDN6Z2eKiGPu3pey4nckyiNJkJgawA9ga4padMIavk
 MLQeozwN95dAxhRg5I7rV8lpyOE2HMyCqFUVBERAhuVgHVHCUChau1oPTa0m60KwD/pveGDB8u
 5nw3wXwQep8VcCvGKUxSGPXDNh4CyEMmxS82mYFkvOVaEVcRxv5+iPxyP+T2lT+PFDjW2aqVKp
 zdQ=
X-SBRS: 5.1
X-MesageID: 49007566
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:qE7bfKiEd9bH3XMDcANDU6kM4HBQXtwji2hC6mlwRA09TySZ//
 rAoB19726StN9xYgBYpTnuAsi9qB/nmKKdpLNhX4tKPzOW3FdATrsD0WKK+VSJcEfDH6xmpM
 JdmsBFebvN5DNB4/oSjjPVLz9Z+qjlzJyV
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="49007566"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>, Daniel De Graaf
	<dgdegra@tycho.nsa.gov>, "Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: [XEN PATCH v6 27/31] build: prepare to always invoke $(MAKE) from xen/, use $(obj)
Date: Thu, 1 Jul 2021 15:10:07 +0100
Message-ID: <20210701141011.785641-28-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

In a future patch, when building a subdirectory, we will set
"obj=$subdir" rather than change directory.

Before that, we add "$(obj)" and "$(src)" in as many places as
possible where we will need to know which subdirectory is been built.
"$(obj)" is for files been generated during the build, and "$(src)" is
for files present in the source tree.

For now, we set both to "." in Rules.mk and Makefile.clean.

A few places don't tolerate the addition of "./", this is because make
remove the leading "./" in targets and dependencies in rules, so these
will be change later.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Rules.mk                            |  5 ++-
 xen/arch/arm/Makefile                   | 14 +++---
 xen/arch/x86/Makefile                   | 60 ++++++++++++-------------
 xen/arch/x86/boot/Makefile              | 14 +++---
 xen/arch/x86/efi/Makefile               |  6 +--
 xen/common/Makefile                     |  8 ++--
 xen/common/libelf/Makefile              |  4 +-
 xen/common/libfdt/Makefile              |  6 +--
 xen/include/Makefile                    | 44 +++++++++---------
 xen/scripts/Makefile.clean              |  5 ++-
 xen/xsm/flask/Makefile                  | 34 +++++++-------
 xen/xsm/flask/policy/mkaccess_vector.sh |  7 ++-
 12 files changed, 108 insertions(+), 99 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 530aefa43ad9..0f8d90844455 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -3,6 +3,9 @@
 # Makefile and are consumed by Rules.mk
 #
 
+obj := .
+src := $(obj)
+
 -include $(BASEDIR)/include/config/auto.conf
 
 include $(XEN_ROOT)/Config.mk
@@ -23,7 +26,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                                             rodata.cst$(a)) \
                          $(foreach r,rel rel.ro,data.$(r).local)
 
-include Makefile
+include $(src)/Makefile
 
 # Linking
 # ---------------------------------------------------------------------------
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 067c0d9844e4..9f9c73aa6c5d 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -88,18 +88,18 @@ ifeq ($(CONFIG_ARM_64),y)
 	ln -sf $(@F) $@.efi
 endif
 
-$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
+$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
@@ -109,13 +109,13 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
 .PHONY: include
 include:
 
-xen.lds: xen.lds.S FORCE
+$(obj)/xen.lds: $(src)/xen.lds.S FORCE
 	$(call if_changed,cpp_lds_S)
 
-dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
+$(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 
 .PHONY: clean
 clean::
-	rm -f xen.lds
+	rm -f $(obj)/xen.lds
 	rm -f $(BASEDIR)/.xen-syms.[0-9]*
 	rm -f $(TARGET).efi
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index fc719247eac9..2cc67d6e0e84 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -82,7 +82,7 @@ extra-y += asm-macros.i
 extra-y += xen.lds
 
 ifneq ($(CONFIG_HVM),y)
-x86_emulate.o: CFLAGS-y += -Wno-unused-label
+$(obj)/x86_emulate.o: CFLAGS-y += -Wno-unused-label
 endif
 
 efi-y := $(shell if [ ! -r $(BASEDIR)/include/xen/compile.h -o \
@@ -113,8 +113,8 @@ syms-warn-dup-$(CONFIG_SUPPRESS_DUPLICATE_SYMBOL_WARNINGS) :=
 syms-warn-dup-$(CONFIG_ENFORCE_UNIQUE_SYMBOLS) := --error-dup
 
 $(TARGET): TMP = $(@D)/.$(@F).elf32
-$(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
-	./boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TMP) $(XEN_IMG_OFFSET) \
+$(TARGET): $(TARGET)-syms $(efi-y) $(obj)/boot/mkelf32
+	$(obj)/boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TMP) $(XEN_IMG_OFFSET) \
 	               `$(NM) $(TARGET)-syms | sed -ne 's/^\([^ ]*\) . __2M_rwdata_end$$/0x\1/p'`
 	od -t x4 -N 8192 $(TMP)  | grep 1badb002 > /dev/null || \
 		{ echo "No Multiboot1 header found" >&2; false; }
@@ -125,29 +125,29 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
 ifneq ($(efi-y),)
 
 # Check if the compiler supports the MS ABI.
-XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
+XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c $(src)/efi/check.c -o $(obj)/efi/check.o 2>/dev/null && echo y)
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
 
 # Check if the linker supports PE.
 EFI_LDFLAGS = $(patsubst -m%,-mi386pep,$(XEN_LDFLAGS)) --subsystem=10
-XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o))
+XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o $(obj)/efi/check.efi $(obj)/efi/check.o))
 # If the above failed, it may be merely because of the linker not dealing well
 # with debug info. Try again with stripping it.
 ifeq ($(CONFIG_DEBUG_INFO)-$(XEN_BUILD_PE),y-n)
 EFI_LDFLAGS += --strip-debug
-XEN_BUILD_PE := $(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o)
+XEN_BUILD_PE := $(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o $(obj)/efi/check.efi $(obj)/efi/check.o)
 endif
 
 ifeq ($(XEN_BUILD_PE),y)
 
 # Check if the linker produces fixups in PE by default
-nr-fixups := $(shell $(OBJDUMP) -p efi/check.efi | grep '^[[:blank:]]*reloc[[:blank:]]*[0-9][[:blank:]].*DIR64$$' | wc -l)
+nr-fixups := $(shell $(OBJDUMP) -p $(obj)/efi/check.efi | grep '^[[:blank:]]*reloc[[:blank:]]*[0-9][[:blank:]].*DIR64$$' | wc -l)
 ifeq ($(nr-fixups),2)
 MKRELOC := :
 relocs-dummy :=
 else
-MKRELOC := efi/mkreloc
-relocs-dummy := efi/relocs-dummy.o
+MKRELOC := $(obj)/efi/mkreloc
+relocs-dummy := $(obj)/efi/relocs-dummy.o
 # If the linker produced fixups but not precisely two of them, we need to
 # disable it doing so.  But if it didn't produce any fixups, it also wouldn't
 # recognize the option.
@@ -160,27 +160,27 @@ endif # $(XEN_BUILD_PE)
 
 endif # $(efi-y)
 
-$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
 		>$(@D)/$(@F).map
 	rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
 
-note.o: $(TARGET)-syms
+$(obj)/note.o: $(TARGET)-syms
 	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
 		--rename-section=.data=.note.gnu.build-id -S $@.bin $@
@@ -199,23 +199,23 @@ ifdef SOURCE_DATE_EPOCH
 EFI_LDFLAGS += --no-insert-timestamp
 endif
 
-$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
+$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) $(obj)/efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
 ifeq ($(MKRELOC),:)
 $(TARGET).efi: ALT_BASE :=
 else
-$(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
+$(TARGET).efi: ALT_BASE = 0x$(shell $(NM) $(obj)/efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
 endif
 
 ifneq ($(build_id_linker),)
 ifeq ($(call ld-ver-build-id,$(LD) $(filter -m%,$(EFI_LDFLAGS))),y)
 CFLAGS-y += -DBUILD_ID_EFI
 EFI_LDFLAGS += $(build_id_linker)
-note_file := efi/buildid.o
+note_file := $(obj)/efi/buildid.o
 # NB: this must be the last input in the linker call, because inputs following
 # the -b option will all be treated as being in the specified format.
 note_file_option := -b pe-x86-64 $(note_file)
 else
-note_file := note.o
+note_file := $(obj)/note.o
 endif
 else
 note_file :=
@@ -224,25 +224,25 @@ note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
 extra-y += efi.lds
-$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
+$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) $(obj)/efi.lds $(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
 endif
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
-	          $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< $(relocs-dummy) \
+	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< $(relocs-dummy) \
 	                $(BASEDIR)/common/symbols-dummy.o $(note_file_option) -o $(@D)/.$(@F).$(base).0 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
-	          $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
+	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
-	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
+	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort >$(@D)/$(@F).map
@@ -253,15 +253,15 @@ $(TARGET).efi: FORCE
 	echo '$(if $(filter y,$(XEN_BUILD_EFI)),xen.efi generation,EFI support) disabled'
 endif
 
-efi/buildid.o efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
-efi/buildid.o efi/relocs-dummy.o: ;
+$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
+$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
 
 .PHONY: include
 include: $(BASEDIR)/include/arch-x86/asm/asm-macros.h
 
-asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
+$(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
 
-$(BASEDIR)/include/arch-x86/asm/asm-macros.h: asm-macros.i Makefile
+$(BASEDIR)/include/arch-x86/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
 	echo '#if 0' >$@.new
 	echo '.if 0' >>$@.new
 	echo '#endif' >>$@.new
@@ -275,14 +275,14 @@ $(BASEDIR)/include/arch-x86/asm/asm-macros.h: asm-macros.i Makefile
 	echo '#endif' >>$@.new
 	$(call move-if-changed,$@.new,$@)
 
-efi.lds: AFLAGS-y += -DEFI
-xen.lds efi.lds: xen.lds.S FORCE
+$(obj)/efi.lds: AFLAGS-y += -DEFI
+$(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
 	$(call if_changed,cpp_lds_S)
 
-boot/mkelf32: boot/mkelf32.c
+$(obj)/boot/mkelf32: $(src)/boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
 
-efi/mkreloc: efi/mkreloc.c
+$(obj)/efi/mkreloc: $(src)/efi/mkreloc.c
 	$(HOSTCC) $(HOSTCFLAGS) -g -o $@ $<
 
 .PHONY: clean
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 9b31bfcbfb8a..53d357489df2 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -1,8 +1,8 @@
 obj-bin-y += head.o
 
-DEFS_H_DEPS = defs.h $(BASEDIR)/include/xen/stdbool.h
+DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
 
-CMDLINE_DEPS = $(DEFS_H_DEPS) video.h
+CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h
 
 RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/generated/autoconf.h \
@@ -11,10 +11,10 @@ RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/xen/multiboot2.h \
 	     $(BASEDIR)/include/public/arch-x86/hvm/start_info.h
 
-head.o: cmdline.S reloc.S
+$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
 
-cmdline.S: cmdline.c $(CMDLINE_DEPS)
-	$(MAKE) -f build32.mk $@ CMDLINE_DEPS="$(CMDLINE_DEPS)"
+$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS)
+	$(MAKE) -f build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
 
-reloc.S: reloc.c $(RELOC_DEPS)
-	$(MAKE) -f build32.mk $@ RELOC_DEPS="$(RELOC_DEPS)"
+$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS)
+	$(MAKE) -f build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index 87b927ed865b..ac815f02cb5e 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -3,16 +3,16 @@ CFLAGS-y += -fshort-wchar
 quiet_cmd_objcopy_o_ihex = OBJCOPY $@
 cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
 
-%.o: %.ihex FORCE
+$(obj)/%.o: $(src)/%.ihex FORCE
 	$(call if_changed,objcopy_o_ihex)
 
-boot.init.o: buildid.o
+$(obj)/boot.init.o: $(obj)/buildid.o
 
 EFIOBJ-y := boot.init.o pe.init.o ebmalloc.o runtime.o
 EFIOBJ-$(CONFIG_COMPAT) += compat.o
 
 $(call cc-option-add,cflags-stack-boundary,CC,-mpreferred-stack-boundary=4)
-$(EFIOBJ-y): CFLAGS-stack-boundary := $(cflags-stack-boundary)
+$(addprefix $(obj)/,$(EFIOBJ-y)): CFLAGS-stack-boundary := $(cflags-stack-boundary)
 
 obj-y := stub.o
 obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 93df3178b71f..0d5509583427 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -75,15 +75,15 @@ obj-$(CONFIG_NEEDS_LIBELF) += libelf/
 obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/
 
 CONF_FILE := $(if $(patsubst /%,,$(KCONFIG_CONFIG)),$(BASEDIR)/)$(KCONFIG_CONFIG)
-config.gz: $(CONF_FILE)
+$(obj)/config.gz: $(CONF_FILE)
 	gzip -n -c $< >$@
 
-config_data.o: config.gz
+$(obj)/config_data.o: $(obj)/config.gz
 
 quiet_cmd_binfile = BINFILE $@
-cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data
+cmd_binfile = $(SHELL) $< $@ $(obj)/config.gz xen_config_data
 
-config_data.S: $(BASEDIR)/tools/binfile FORCE
+$(obj)/config_data.S: $(BASEDIR)/tools/binfile FORCE
 	$(call if_changed,binfile)
 targets += config_data.S
 
diff --git a/xen/common/libelf/Makefile b/xen/common/libelf/Makefile
index a92326c982e9..8a4522e4e141 100644
--- a/xen/common/libelf/Makefile
+++ b/xen/common/libelf/Makefile
@@ -7,10 +7,10 @@ OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
 
 CFLAGS-y += -Wno-pointer-sign
 
-libelf.o: libelf-temp.o FORCE
+$(obj)/libelf.o: $(obj)/libelf-temp.o FORCE
 	$(call if_changed,objcopy)
 
-libelf-temp.o: $(libelf-objs) FORCE
+$(obj)/libelf-temp.o: $(addprefix $(obj)/,$(libelf-objs)) FORCE
 	$(call if_changed,ld)
 
 extra-y += libelf-temp.o $(libelf-objs)
diff --git a/xen/common/libfdt/Makefile b/xen/common/libfdt/Makefile
index 6bd207cf8ffa..6708af12e583 100644
--- a/xen/common/libfdt/Makefile
+++ b/xen/common/libfdt/Makefile
@@ -1,4 +1,4 @@
-include Makefile.libfdt
+include $(src)/Makefile.libfdt
 
 SECTIONS := text data $(SPECIAL_DATA_SECTIONS)
 OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
@@ -8,10 +8,10 @@ nocov-y += libfdt.o
 
 CFLAGS-y += -I$(BASEDIR)/include/xen/libfdt/
 
-libfdt.o: libfdt-temp.o FORCE
+$(obj)/libfdt.o: $(obj)/libfdt-temp.o FORCE
 	$(call if_changed,objcopy)
 
-libfdt-temp.o: $(LIBFDT_OBJS) FORCE
+$(obj)/libfdt-temp.o: $(addprefix $(obj)/,$(LIBFDT_OBJS)) FORCE
 	$(call if_changed,ld)
 
 extra-y += libfdt-temp.o $(LIBFDT_OBJS)
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 9feb57545ef1..a969e76ddcad 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -39,57 +39,57 @@ cppflags-$(CONFIG_X86)    += -m32
 
 endif
 
-public-$(CONFIG_X86) := $(wildcard public/arch-x86/*.h public/arch-x86/*/*.h)
-public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h)
+public-$(CONFIG_X86) := $(wildcard $(src)/public/arch-x86/*.h $(src)/public/arch-x86/*/*.h)
+public-$(CONFIG_ARM) := $(wildcard $(src)/public/arch-arm/*.h $(src)/public/arch-arm/*/*.h)
 
 .PHONY: all
-all: $(headers-y)
+all: $(addprefix $(obj)/,$(headers-y))
 
-compat/%.h: compat/%.i $(BASEDIR)/tools/compat-build-header.py
-	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $@ >>$@.new; \
+$(obj)/compat/%.h: $(obj)/compat/%.i $(BASEDIR)/tools/compat-build-header.py
+	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $(patsubst $(obj)/%,%,$@) >>$@.new; \
 	mv -f $@.new $@
 
-compat/%.i: compat/%.c Makefile
+$(obj)/compat/%.i: $(obj)/compat/%.c $(src)/Makefile
 	$(CPP) $(filter-out -Wa$(comma)% -include %/include/xen/config.h,$(XEN_CFLAGS)) $(cppflags-y) -o $@ $<
 
-compat/%.c: public/%.h xlat.lst $(BASEDIR)/tools/compat-build-source.py
+$(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(BASEDIR)/tools/compat-build-source.py
 	mkdir -p $(@D)
-	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py xlat.lst <$< >$@.new
+	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py $(src)/xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
-compat/.xlat/%.h: compat/%.h compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh Makefile
+$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh $(src)/Makefile
 	export PYTHON=$(PYTHON); \
 	while read what name; do \
 		$(SHELL) $(BASEDIR)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
 	done <$(patsubst compat/%,compat/.xlat/%,$(basename $<)).lst >$@.new
 	mv -f $@.new $@
 
-.PRECIOUS: compat/.xlat/%.lst
-compat/.xlat/%.lst: xlat.lst Makefile
+.PRECIOUS: $(obj)/compat/.xlat/%.lst
+$(obj)/compat/.xlat/%.lst: $(src)/xlat.lst $(src)/Makefile
 	mkdir -p $(@D)
 	grep -v '^[[:blank:]]*#' $< | sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,[[:blank:]]+$*\.h[[:blank:]]*$$,,p' >$@.new
 	$(call move-if-changed,$@.new,$@)
 
-xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' xlat.lst | uniq)
+xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' $(src)/xlat.lst | uniq)
 xlat-y := $(filter $(patsubst compat/%,%,$(headers-y)),$(xlat-y))
 
-compat/xlat.h: $(addprefix compat/.xlat/,$(xlat-y)) config/auto.conf Makefile
+$(obj)/compat/xlat.h: $(addprefix $(obj)/compat/.xlat/,$(xlat-y)) $(obj)/config/auto.conf $(src)/Makefile
 	cat $(filter %.h,$^) >$@.new
 	mv -f $@.new $@
 
 ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
 
-all: headers.chk headers99.chk headers++.chk
+all: $(obj)/headers.chk $(obj)/headers99.chk $(obj)/headers++.chk
 
-PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h) $(public-y))
+PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(wildcard $(src)/public/*.h $(src)/public/*/*.h) $(public-y))
 
-PUBLIC_C99_HEADERS := public/io/9pfs.h public/io/pvcalls.h
-PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
+PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
+PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
 
 public/io/9pfs.h-prereq := string
 public/io/pvcalls.h-prereq := string
 
-headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
+$(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
 	for i in $(filter %.h,$^); do \
 	    $(CC) -x c -ansi -Wall -Werror -include stdint.h \
 	          -S -o /dev/null $$i || exit 1; \
@@ -97,7 +97,7 @@ headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
 	done >$@.new
 	mv $@.new $@
 
-headers99.chk: $(PUBLIC_C99_HEADERS) Makefile
+$(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
 	rm -f $@.new
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
@@ -107,7 +107,7 @@ headers99.chk: $(PUBLIC_C99_HEADERS) Makefile
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
 
-headers++.chk: $(PUBLIC_HEADERS) Makefile
+$(obj)/headers++.chk: $(PUBLIC_HEADERS) $(src)/Makefile
 	rm -f $@.new
 	if ! $(CXX) -v >/dev/null 2>&1; then                                  \
 	    touch $@.new;                                                     \
@@ -116,7 +116,7 @@ headers++.chk: $(PUBLIC_HEADERS) Makefile
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
 	    | $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__        \
-	      -include stdint.h -include public/xen.h                         \
+	      -include stdint.h -include $(src)/public/xen.h                  \
 	      $(foreach j, $($(i)-prereq), -include c$(j)) -S -o /dev/null -  \
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
@@ -126,7 +126,7 @@ endif
 ifeq ($(XEN_TARGET_ARCH),x86_64)
 .PHONY: lib-x86-all
 lib-x86-all:
-	$(MAKE) -C xen/lib/x86 all
+	$(MAKE) -C $(obj)/xen/lib/x86 all
 
 all: lib-x86-all
 endif
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index b6df9e861e6e..36b7e7e92f93 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -3,11 +3,14 @@
 # Cleaning up
 # ==========================================================================
 
+obj := .
+src := $(obj)
+
 clean::
 
 include $(BASEDIR)/scripts/Kbuild.include
 
-include Makefile
+include $(src)/Makefile
 
 # Figure out what we need to clean from the various variables
 # ==========================================================================
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 0ad15cb16606..3ea726d66f8b 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -4,48 +4,48 @@ obj-y += flask_op.o
 
 obj-y += ss/
 
-CFLAGS-y += -I./include
+CFLAGS-y += -I$(obj)/include
 
 AWK = awk
 
-FLASK_H_DEPEND = policy/security_classes policy/initial_sids
-AV_H_DEPEND = policy/access_vectors
+FLASK_H_DEPEND := $(addprefix $(src)/policy/,security_classes initial_sids)
+AV_H_DEPEND = $(src)/policy/access_vectors
 
-FLASK_H_FILES = include/flask.h include/class_to_string.h include/initial_sid_to_string.h
-AV_H_FILES = include/av_perm_to_string.h include/av_permissions.h
-ALL_H_FILES = $(FLASK_H_FILES) $(AV_H_FILES)
+FLASK_H_FILES := flask.h class_to_string.h initial_sid_to_string.h
+AV_H_FILES := av_perm_to_string.h av_permissions.h
+ALL_H_FILES := $(addprefix include/,$(FLASK_H_FILES) $(AV_H_FILES))
 
-$(obj-y) ss/built_in.o: $(ALL_H_FILES)
+$(addprefix $(obj)/,$(obj-y)) $(obj)/ss/built_in.o: $(addprefix $(obj)/,$(ALL_H_FILES))
 extra-y += $(ALL_H_FILES)
 
-mkflask := policy/mkflask.sh
+mkflask := $(src)/policy/mkflask.sh
 quiet_cmd_mkflask = MKFLASK $@
-cmd_mkflask = $(SHELL) $(mkflask) $(AWK) include $(FLASK_H_DEPEND)
+cmd_mkflask = $(SHELL) $(mkflask) $(AWK) $(obj)/include $(FLASK_H_DEPEND)
 
-$(subst include/,%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
+$(addprefix $(obj)/%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
 	$(call if_changed,mkflask)
 
-mkaccess := policy/mkaccess_vector.sh
+mkaccess := $(src)/policy/mkaccess_vector.sh
 quiet_cmd_mkaccess = MKACCESS VECTOR $@
-cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(AV_H_DEPEND)
+cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(obj)/include $(AV_H_DEPEND)
 
-$(subst include/,%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
+$(addprefix $(obj)/%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
 	$(call if_changed,mkaccess)
 
 obj-bin-$(CONFIG_XSM_FLASK_POLICY) += flask-policy.o
-flask-policy.o: policy.bin
+$(obj)/flask-policy.o: $(obj)/policy.bin
 
 quiet_cmd_binfile = BINFILE $@
-cmd_binfile = $(SHELL) $< -i $@ policy.bin xsm_flask_init_policy
+cmd_binfile = $(SHELL) $< -i $@ $(obj)/policy.bin xsm_flask_init_policy
 
-flask-policy.S: $(BASEDIR)/tools/binfile FORCE
+$(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
 	$(call if_changed,binfile)
 targets += flask-policy.S
 
 FLASK_BUILD_DIR := $(CURDIR)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
 
-policy.bin: FORCE
+$(obj)/policy.bin: FORCE
 	$(MAKE) -f $(XEN_ROOT)/tools/flask/policy/Makefile.common -C $(XEN_ROOT)/tools/flask/policy FLASK_BUILD_DIR=$(FLASK_BUILD_DIR)
 	cmp -s $(POLICY_SRC) $@ || cp $(POLICY_SRC) $@
 
diff --git a/xen/xsm/flask/policy/mkaccess_vector.sh b/xen/xsm/flask/policy/mkaccess_vector.sh
index 942ede4713f1..ad9772193bff 100755
--- a/xen/xsm/flask/policy/mkaccess_vector.sh
+++ b/xen/xsm/flask/policy/mkaccess_vector.sh
@@ -8,9 +8,12 @@ set -e
 awk=$1
 shift
 
+output_dir=$1
+shift
+
 # output files
-av_permissions="include/av_permissions.h"
-av_perm_to_string="include/av_perm_to_string.h"
+av_permissions="$output_dir/av_permissions.h"
+av_perm_to_string="$output_dir/av_perm_to_string.h"
 
 cat $* | $awk "
 BEGIN	{
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:21:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:21:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148818.275146 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZl-0005bc-Qk; Thu, 01 Jul 2021 14:21:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148818.275146; Thu, 01 Jul 2021 14:21:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZl-0005at-79; Thu, 01 Jul 2021 14:21:57 +0000
Received: by outflank-mailman (input) for mailman id 148818;
 Thu, 01 Jul 2021 14:21:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxQE-0005tj-2W
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:06 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3e185f9f-3ef5-4d01-9e93-0151a4543101;
 Thu, 01 Jul 2021 14:10:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3e185f9f-3ef5-4d01-9e93-0151a4543101
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148653;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=eij+P9eDuvxcdz2BMz8URUEWDz4oxMoXS30U0EZ+aiI=;
  b=PrzDv+PO8Jqkr8w9iAZHblqYaVAR+qK6k+WRdqr7uLSg2MYSgmX1PmJC
   /sgUYjMEKwCAW4KZvxyGjJZYheyGFSyU4FEP8oh0GwU6iesrw0Uk6mZ/P
   uLIbyhbbnYfoxofiv/SD9KQ6DI7Geo+jFt9qnj4frOjW9My+WPe2mPKC3
   E=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 2hiLc/rv5YZvB7xMScsNK+RP/DATlm5u6nfbHqoWNzyv1NQyIIuaanwfVS39WtqpwOYZNQ8+2a
 RvpZzFe3OTjhWGav6qmSOnFL8xyZ7ScmeY6WWzMYVpkPhGTdeSLk+gk4lFPYrCRotosrCWGXSe
 7pBW1G+btqkPQyeCg1XfZfMWD191C4rG1P4D0YVxNcrCL2AoKP54WH/GW7pXVkBSvJjejxXB0i
 oHhzFYY7X3ocHEc+VfgeJKzVtNt8vm7Qf24tNrFzZSZ7iOg4WgxbFr5nPykBOgvmf/T2ud2paL
 IqA=
X-SBRS: 5.1
X-MesageID: 47384421
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:9LtKtq7leBdzp6fg6APXwDLXdLJyesId70hD6qkQc3FomwKj9/
 xG/c5rsSMc7Qx6ZJhOo7+90cW7L080lqQFhLX5X43SPzUO0VHARO1fBOPZqAEIcBeOlNK1u5
 0AT0B/YueAcGSTj6zBkXWF+wBL+qj5zEiq792usUuEVWtRGsZdB58SMHfhLqVxLjM2Y6YRJd
 6nyedsgSGvQngTZtTTPAh+YwCSz+e77a4PeHQ9dmYa1DU=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47384421"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Jan Beulich
	<jbeulich@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>, Wei Liu
	<wl@xen.org>, George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Julien Grall <julien@xen.org>, Stefano Stabellini
	<sstabellini@kernel.org>
Subject: [XEN PATCH v6 21/31] build: set XEN_BUILD_EFI earlier
Date: Thu, 1 Jul 2021 15:10:01 +0100
Message-ID: <20210701141011.785641-22-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

We are going to need the variable XEN_BUILD_EFI earlier.

This early check is using "try-run" to allow to have a temporary
output file in case it is needed for $(CC) to build the *.c file.

The "efi/check.o" file is still needed in "arch/x86/Makefile" so the
check is currently duplicated.

This patch imports the macro "try-run" from Linux v5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/Makefile      |  2 +-
 xen/arch/x86/arch.mk       |  5 +++++
 xen/scripts/Kbuild.include | 17 +++++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index bb446a1b928d..d3e38e4e9f02 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -126,7 +126,7 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
 ifneq ($(efi-y),)
 
 # Check if the compiler supports the MS ABI.
-export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
+XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
 
 # Check if the linker supports PE.
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 9f5fade39e91..5a4a1704636f 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -60,5 +60,10 @@ ifeq ($(CONFIG_UBSAN),y)
 $(call cc-option-add,CFLAGS_UBSAN,CC,-fno-sanitize=alignment)
 endif
 
+ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y)
+# Check if the compiler supports the MS ABI.
+export XEN_BUILD_EFI := $(call try-run,$(CC) $(CFLAGS) -c arch/x86/efi/check.c -o "$$TMPO",y)
+endif
+
 # Set up the assembler include path properly for older toolchains.
 CFLAGS += -Wa,-I$(BASEDIR)/include
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 838c9440f35e..5fe13a7c5abd 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -57,6 +57,23 @@ define filechk
 	fi
 endef
 
+# output directory for tests below
+TMPOUT = .tmp_$$$$
+
+# try-run
+# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
+# Exit code chooses option. "$$TMP" serves as a temporary file and is
+# automatically cleaned up.
+try-run = $(shell set -e;		\
+	TMP=$(TMPOUT)/tmp;		\
+	TMPO=$(TMPOUT)/tmp.o;		\
+	mkdir -p $(TMPOUT);		\
+	trap "rm -rf $(TMPOUT)" EXIT;	\
+	if ($(1)) >/dev/null 2>&1;	\
+	then echo "$(2)";		\
+	else echo "$(3)";		\
+	fi)
+
 # as-insn: Check whether assembler supports an instruction.
 # Usage: cflags-y += $(call as-insn,CC FLAGS,"insn",option-yes,option-no)
 as-insn = $(if $(shell echo 'void _(void) { asm volatile ( $(2) ); }' \
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:22:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:22:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148824.275159 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZp-0006Gf-3o; Thu, 01 Jul 2021 14:22:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148824.275159; Thu, 01 Jul 2021 14:22:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxZo-0006F0-IP; Thu, 01 Jul 2021 14:22:00 +0000
Received: by outflank-mailman (input) for mailman id 148824;
 Thu, 01 Jul 2021 14:21:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxR3-0005F9-NI
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:12:57 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3a858c7a-da76-11eb-8328-12813bfff9fa;
 Thu, 01 Jul 2021 14:11:29 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3a858c7a-da76-11eb-8328-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625148689;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=OrEgff/HihyncUiqJLBMZO5p+YLhIkvLwk8ijwp7Og0=;
  b=IUfo/cC9BJbSiM1KYJctmiuzcp9to3pjLOtjRa4ds9PpHv3vFqDyWefd
   IjctC1G7l8j6oAmARtzjKsdhKfm1V64W+ZW6SN70bhiZ7ryl6zndGM/If
   U16WeVEpgDuFxwXZqap56dQIclNMKjCb1W+0HqqBTEKaFuZpyuuV9XP5h
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: NZ/MaMEfgDUzcZbO6KcGdvFFBkHR6NU6p9DlxJ715VT6RLQFJVjuh+XWDqbgfYwIUafNmoXmMD
 s5GWIkHuy3tIdJLKyBUd38fMpUhl7cgGEMYmMn1ljii3q4QxU/+6/kllIcIZR9FVnHja/7ft2S
 XfcCt8A1gjJ8Nr70Y062zL0eqCSZwEGMUzGKj44Pw2bwN9tbGbB6R1QkAwNSNffdD5qSKV8yG1
 +TwvxqSndDA8dZvxdN/pxcne3QiUmMutVWbk5vMssasw8CCES/aRV+71vb0L7eGqP7O0AgEOUj
 ODY=
X-SBRS: 5.1
X-MesageID: 47755472
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:CZGT3q1O+8E7RG7SPjPV7gqjBIokLtp133Aq2lEZdPRUGvb3qy
 nIpoV86faUskdoZJhOo7C90cW7LU80sKQFhLX5Xo3SOzUO2lHYT72KhLGKq1aLdhEWtNQtsZ
 uIG5IOceEYZmIasS+V2maF+q4bsbu6zJw=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47755472"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v6 19/31] build: rework .banner generation
Date: Thu, 1 Jul 2021 15:09:59 +0100
Message-ID: <20210701141011.785641-20-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210701141011.785641-1-anthony.perard@citrix.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Avoid depending on Makefile but still allow to rebuild the banner when
$(XEN_FULLVERSION) changes.

Also add a dependency on tools/xen.flf, even if not expected to
change.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 7e3e4c42d77b..267ae77aef7a 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -399,13 +399,19 @@ delete-unfresh-files:
 		rm -f include/xen/compile.h; \
 	fi
 
-.banner: Makefile
-	@if which figlet >/dev/null 2>&1 ; then \
-		echo " Xen $(XEN_FULLVERSION)" | figlet -f tools/xen.flf > $@.tmp; \
-	else \
-		echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
-	fi
-	@mv -f $@.tmp $@
+quiet_cmd_banner = BANNER  $@
+define cmd_banner
+    if which figlet >/dev/null 2>&1 ; then \
+	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
+    else \
+	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
+    fi; \
+    mv -f $@.tmp $@
+endef
+
+.banner: tools/xen.flf FORCE
+	$(call if_changed,banner)
+targets += .banner
 
 # compile.h contains dynamic build info. Rebuilt on every 'make' invocation.
 include/xen/compile.h: include/xen/compile.h.in .banner
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:30:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:30:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148863.275170 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxiA-0002IQ-MA; Thu, 01 Jul 2021 14:30:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148863.275170; Thu, 01 Jul 2021 14:30:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxiA-0002IJ-Hv; Thu, 01 Jul 2021 14:30:38 +0000
Received: by outflank-mailman (input) for mailman id 148863;
 Thu, 01 Jul 2021 14:30:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyxiA-0002ID-74
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:30:38 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8620c3ba-85d4-4967-a97b-25e717a56970;
 Thu, 01 Jul 2021 14:30:37 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8620c3ba-85d4-4967-a97b-25e717a56970
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625149837;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=8P7vlfIkLcqeQmKRDzO/5KvCw9VoEUvvaKYjxrs4Lwg=;
  b=HqWMkZ4DwZIO3z2jfbbQCGH8zhWO9uBSQDWntAngR08PQpgD+pA2qrFI
   i/v/5RaomjdQcQ1e9BJpurJbAY75kiemE6S+ndYh+mvrcfPeZEsW33Gc9
   ri+a3pk2ohFDQkIv3Zh71VKwKFrfPzvI14DbrJJGtIuRLUG75rWQQ6Q80
   k=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 0U1C1McnJVqImh+3s74LGBKcPf1DBgdVWaCmAN72OFr7ip3r/fvcZatKZRncr3nBw86BL6sK4Z
 MXEMr9upMFzYfh673TZttU3Rzq8Cx7WIbOcwBU5MlHu9RBWFws3F7hC4tlZBfSifwOKJBbwCz2
 J6810PWChACoESqdR7fxf8PUvL5ZyQJZkTOWjCIhHfFKP2wdqu67XumFbzU3nIswprHq5sNxva
 7GFqVGyC6ULkLUiD8g1iwFzKrOmSFw9ViPIuEn5+po7BchG13I11D8fgMAF9C4SinVdLhA0nJG
 Ils=
X-SBRS: 5.1
X-MesageID: 47448780
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ojxwZqP58v8aVsBcTjejsMiBIKoaSvp037BK7S1MoNJuEvBw9v
 re+sjzsCWftN9/Yh4dcLy7VpVoBEmsl6KdgrNhWotKPjOW21dARbsKheffKn/bakjDH4Zmvp
 uIGJIObOEYY2IasS77ijPIbOrJwrO8gd6VbTG19QYdceloAZsQnzuQEmygYzRLrJEtP+tFKH
 KbjPA33waISDAsQemQIGIKZOTHr82jruObXfZXbyRXkzVnlFmTmcTHLyQ=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47448780"
Date: Thu, 1 Jul 2021 15:30:33 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH v20210701 03/40] xl: fix description of migrate --debug
Message-ID: <YN3RidqHX3fvzAUO@perard>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-4-olaf@aepfle.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210701095635.15648-4-olaf@aepfle.de>

On Thu, Jul 01, 2021 at 11:55:58AM +0200, Olaf Hering wrote:
> xl migrate --debug used to track every pfn in every batch of pages.
> But these times are gone. The code in xc_domain_save is the consumer
> of this knob, but it considers it only for the remus and colo case.
> 
> Adjust the help text to tell what --debug does today: Nothing.
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> Reviewed-by: Juergen Gross <jgross@suse.com>
> 
> v02:
> - the option has no effect anymore

Acked-by: Anthony PERARD <anthony.perard@citrix.com>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:34:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:34:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148885.275181 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxlQ-0003AF-5P; Thu, 01 Jul 2021 14:34:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148885.275181; Thu, 01 Jul 2021 14:34:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxlQ-0003A8-2C; Thu, 01 Jul 2021 14:34:00 +0000
Received: by outflank-mailman (input) for mailman id 148885;
 Thu, 01 Jul 2021 14:33:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lyxlP-00039z-6z
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:33:59 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5e768744-da79-11eb-832e-12813bfff9fa;
 Thu, 01 Jul 2021 14:33:58 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5e768744-da79-11eb-832e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625150037;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=O+qBSKO2+RUDIgebvioIm+C3sLL6oFNRAelxqHCs84k=;
  b=BybZb352AEPxijSZ8XS9NKNBZM1BdfF1tYuYcb7KnoMPcupm7a+4pqG/
   hOFKHXFCVNU0HwHXi/rM8bfOlhnq9lWntlwuM2KOkv2sfMqJYZ6qO7SFy
   az7wGcAXCx4SaHzGaoDiUup7xMVuaFBuhKrQCkP0EE8c5ZRejPwOtdIrn
   E=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: a82aOPRQx/nSrCKDlwoAPX+syTSqIQMruZz6N7vZvfjX53EuxnwUx5Y5U00pKK1V5aESPaCPqy
 LbfG/z/C1aJwhCNpDZprRt1VZZ0A/9s3neohdXPFIi41wi2irekK3ejEYd/uHei3m7/+0P7K86
 lQxY7JbO+BP6PqKjxwNWzxqlKNRGdG40JdW+zWDXoNx3OPdJ2C8hI24+iVQPWDH7G/gEtaRp9I
 ye78RetwUPCClRYJEw1ZSPlcaUR5FqwKp7kSY5jRMyOb+FqM4cDckMKDXTIsPuWAPIb7x92Hta
 stc=
X-SBRS: 5.1
X-MesageID: 47095733
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:RqCfVa/rb8CwgErhkKJuk+E6db1zdoMgy1knxilNoENuHfBwxv
 rDoB1E73LJYVYqOU3Jmbi7Sc29qADnhOFICO4qTMuftWjdyRaVxeRZg7cKrAeQYxEWmtQts5
 uINpIOcuEYbmIK/voSgjPIaurIqePvmMvD5Za8vgJQpENRGsZdBm9Ce3am+yZNNWt77PQCZf
 +hD4Z81kGdkSN9VLXLOpBJZZmNm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjMTSSlGz7sO+X
 XM11WR3NTjj9iLjjvnk0PD5ZVfn9XsjvNFGcy3k8AQbhHhkByhaohNU6CL+Bo1vOaswlA3l8
 SkmWZvA+1Dr1fqOk2lqxrk3AftlBw07WX59FOeiXz/5eTkWTMTEaN69MBkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l3CzvWEpnYco/j9iuLMlGftsRLEkjQRo+M9qJlO91GlnKp
 gvMCjk3ocSTbvABEqp51WGqbeXLwYO9hTveDlJhiXa6UkPoJjVp3FojfD3pU1wg67VfaM0rN
 gsAp4Y4I2mcfVmG56VJN1xDPdfWVa9DS4lDgqpUBza/fY8SgzwQtjMke4I2N0=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47095733"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ORCvRhTxcMcbFhHVBzx5dBP6q90Dbidu+UgIrbQ95wTnvG88orMYgiQ/L5mMF4CFRghmMChaxzdMHqvGMtJHIX/N9yYHCX6RucQ3dM+p2bkjhG9AX7ilvBzdaHn7LwARAr17q2NVH7H21DILhBvy26ZXNc6fITt7s8oGkkjHfWrHX9jUB4SJTk/Sn3afhNaMJ9II+dmsaXhFH6cZ049fKYf+6E1pP5NsMaGzD29JaCDnzH4lHkN/5nlZfpTkwqrnF35EALVHAPKIoRY6IuL4+yMo1o6xNcckYdftJN+hVXzK4t6sRoH8efEhHibWY1SBVfwhRI1gM6otAbMCtCmgsw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=O+qBSKO2+RUDIgebvioIm+C3sLL6oFNRAelxqHCs84k=;
 b=fcdthvYqjpJT5i/BpEpGoN2l0TMBWqO+Daw4x3+q7uKBkV5xPwHeCiC6pcupYtjMyDKA3dviV/Rv8LidOiPnfyZy+4aIWMisWKeMNQ6aLemVP2xOESSCd0/KmkQbPJZpllJLrCYRg4dtMHcUggp/E7TS3RJcnSgCHqdirCcgFEcQxPiyKce/n5uk+Tx0/mys1t25J22FBiDa70RjZjYkdzTiXth6gC21jlsCrLzLdUO3NEfN7zHFIdFtDrWPJ6HrU+BPMzaWGSOKHFtOYi9KPXVLY5o51Jjf+cLnBV0xknlifwyLmLB2HwnTuBkayNLmd1L6OEzr6Na/wECdeXmOqg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=O+qBSKO2+RUDIgebvioIm+C3sLL6oFNRAelxqHCs84k=;
 b=eDMaATME1a0urN0y5W1vG+FSPC/YctRhTMz7eJjU6Sat8enGcvw/SH+pOlwe1Gz3MM9YpayiIcTFZ2BHxFeOekD2jTQlhjBcCUtUI916Dimbuy+8Pq+NoQWgAMV26+IxnXRr1Rss4THhCj0Ou/Kxv7U1ehn8QEuNf4xXK9nqx8o=
Subject: Re: [PATCH v20210701 03/40] xl: fix description of migrate --debug
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Juergen Gross <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>, Anthony PERARD <anthony.perard@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-4-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <038fa686-c7e8-4afc-e84d-216c3a3f6d5b@citrix.com>
Date: Thu, 1 Jul 2021 15:33:47 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-4-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0396.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:f::24) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 67879142-c152-47e9-6bb4-08d93c9d40c0
X-MS-TrafficTypeDiagnostic: BYAPR03MB3991:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB3991DF4E79825DDC659E967BBA009@BYAPR03MB3991.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 0DdLtBlum8CrVPv+HqM8us89Vd3hFwjWFj4S1AIt88pfEy60Hntw0UpR4AzGwBJpqSD4CSotI6ChIhQx0LEY3LykKgR+J9AKT00Hy7xlRA7KZYIN/scuiKMgyKU2ho1CFhuJ1no8Cy9jYqflHRRyfbcY4mPhWu5XylM9ovXERvbyQVJgCT3oXT9aiHRx9C22DkRj8+lNz/B0NECThl08TPSwMyqK5vIOif3FZ+mjZeyLQOA4s/8IknR7/AEPrhoYuEaZBim36Ps4eDO3QB2bUhDMvdQPLdQiOQdllO/c4O39kU1kcpq8n3377KbbUZdSZypwUOUUDKhrI/y/KC+yPNgU1uhdDmKSnPCIxxezF0R9CNZCo/yqjmYed3iP8hdb2ew/yx88QiU+d5AYYa19sS64G0eqKrWXJY8/eJAd4vkvBA4AgCYkLB6ZFOuE2SSJqUbN8NA1LoWiL54RyXXbJn75Kv3akGscUoTDUdHh57Ql1FFunKCUfnnM2euEdQnqGwu9bhTgOZafIls8aER8bvpGHMYt/nTb7LIaz/t6TlNPJvXV6vpEvnT6JsIp9hTsM+SycH129PZltaf2lrKjVTOjE3tCoyEMsvI200fxLKgQ+HX7Y86SK0xSE639qybkNjP2XmMzF+4bliQyTkXDHvZ9asdD8ud0jA82QoHSaEFoZNLHneOpYiaf52faeqmhRpwj73+4dXIfaZtlSy0D8pY/G4UIc/SM/wbnjeB2AEo=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39850400004)(136003)(396003)(376002)(346002)(2906002)(316002)(31696002)(54906003)(66476007)(5660300002)(6666004)(86362001)(4326008)(16576012)(4744005)(107886003)(26005)(38100700002)(6486002)(186003)(66556008)(16526019)(956004)(36756003)(8676002)(31686004)(2616005)(8936002)(66946007)(53546011)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bnlWc2lDUDJvb2NvNEViVWRzRWNwRXg4WEp4eDlrcEhMMDYzV3lmbUFrVzYw?=
 =?utf-8?B?UlV0alNOVTRIZldTY1ZwNW5qb0w3UnNIc1hQd1RWNXlPVlJKS2JyVTN4RENz?=
 =?utf-8?B?NURYZC9XYTFxYXM0S29lRG85eWtIaDkxS2VPS2llTTkxWHNZclpraUxnUis5?=
 =?utf-8?B?VmRhWUZ4MkRhQzhjS2Q2cXo2RWtIVEVsdzFBcWRxL001Y1lQVW5oamhtSkZx?=
 =?utf-8?B?N09XcjVrZXdObzUwcTRCbUI4U3hwYnZIbkZ4NHpHQk5NVExaTFdUMlFmOFhu?=
 =?utf-8?B?d0x4SlFtOFFURFRFN1B2Y1dxK1VqRTM3eEtrT0REZDZNSkp3MFpFZHF1ZnlU?=
 =?utf-8?B?MnRSVXRveDhoRkFna0NTN2RNRVVUMFFnd2tGRWVYVFc1OWFnNlJ6OEdYN0ls?=
 =?utf-8?B?ay8wUjQrekFrMnRXOVMvM1l2RlJ5dmt3N0d2K051QzB6Zm93dEZMaDM1eVZM?=
 =?utf-8?B?TEJxWDR0b1JhclF3bW9BVTBZNDBVYXlhRXNWR2Y4ZUVTRXB1TXdJZm1NeEk3?=
 =?utf-8?B?N0tlejhmekp0ei9KL3FSSXdrbXRkM1lrbVJOVzRQanM4TWVEaVdzNENaMzdk?=
 =?utf-8?B?c0ZVNGZpSVhWRktqZnFxcWdqcHJVM1kvaEowSjVaUkxYYVlzRk8zYThkbDRq?=
 =?utf-8?B?dnFJbTVQZERjWER5cWt4cUlvd1FEVlBQb0UwWjYva3o5MXlvQ3RrQ1U2OXpN?=
 =?utf-8?B?WC9jd2RkbXM3OE1NRXVsZ3NTZVUybUx0S3NqQW0vMk1ueFhPeVAyVEtwdUt0?=
 =?utf-8?B?bFpLcXJmdFBBb0tralNGT1hqTDVxSEpKeVIvNVRpMFpZZHRaNWo3UU9BOVBp?=
 =?utf-8?B?S1dINmMxdm0xczdUeGVtc2hWWTBLdmpSdlAyV05tb3E2UFVRZ3l1N29Dckp2?=
 =?utf-8?B?TFNjRVVUb1RvTHUvbWNHMEdhYllxbHN0TW13bWljUTAvQll0cC83Z0dyVHpU?=
 =?utf-8?B?bVFLTStrdEpSU1BmWkREMVk5Mm9WL0poSFdwMDNmL1FTb3pjRmt4blFFS0pa?=
 =?utf-8?B?NjE5eXlkTm15Z1NKbkVZdVQrSmJYRkhzeElwaTRCMVE1a3dOSnduWFFISVRB?=
 =?utf-8?B?NjBpb2Zyc3FzZWhXNytHNzRDZ2xvK1JySGhsYUd0THZUTW5MQXVwODROTktQ?=
 =?utf-8?B?bDFXVmhmSUs4NWdwcHl4a3plWVQ4U256TVliWWhaWEMwaW9oNkcvSjhtT2lB?=
 =?utf-8?B?QjNYS1ZRQ0JnbW84WWR5RW5CZkdYWG40cjJFRVhIRWpqSDdEQWdHU1Vtb2VK?=
 =?utf-8?B?UlVDbFUwL0tDZG0wb2Z3WW84ZVoyclRDclc4cENSbVRmVlJvWGxNKy8xaTI0?=
 =?utf-8?B?NnlpSGJnbDVLSXRWZVFpOEh2SHR5L3BmUkNXS0lzdzdGSE5iUHJidG1hcU5s?=
 =?utf-8?B?U0d5RiswVDVaUVQwc2NyMzh3YWtiLzJjRXNnQ1Jnb0NzZ0FFU3BoMEZnZzIw?=
 =?utf-8?B?K0hRaXJkcEFqakVRQ3F2OWpQVGpIQUNSOVIrQnBtMC94TzVvS0o4L2ZjYXoz?=
 =?utf-8?B?UWNDUTBvNU1GTEZ2cmxLdUZTbFdLUWFYbTkvRmRkZmRRZm8vOUhRdmZyZ0hR?=
 =?utf-8?B?MzlIbnJBa2RrMXB0cHliQnlRSDBtdnFNRGFGaGgzQUxEQVFPOXdya0Q1QUJz?=
 =?utf-8?B?clJrT0ZMbm1uSStkZ3dWLzRQcFIzVVNlWXFvZU0zRFJNazZWTVdEdGRHMzhu?=
 =?utf-8?B?WmtjaFE2UHNqQnNqMWVkVFpWSm11UXZxSGJRd3YvQ3E1Z2h3WS9oZDJMTW4v?=
 =?utf-8?Q?7DNzGpO0AgOZsWPRSsRywFS2y2sq/QUC+daWfhi?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 67879142-c152-47e9-6bb4-08d93c9d40c0
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 14:33:54.5798
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ZDBjX5j/JH1QJABXqGWJCWKX1uowpdwWzAzSqeu+6uR3PMsVdOEAtHd3jF3oPKbEPVTUt0DdnJu3gphzBVvZHb+078M+SAnnxgr7Ih8NgkU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3991
X-OriginatorOrg: citrix.com

On 01/07/2021 10:55, Olaf Hering wrote:
> xl migrate --debug used to track every pfn in every batch of pages.
> But these times are gone. The code in xc_domain_save is the consumer
> of this knob, but it considers it only for the remus and colo case.
>
> Adjust the help text to tell what --debug does today: Nothing.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> Reviewed-by: Juergen Gross <jgross@suse.com>
>
> v02:
> - the option has no effect anymore

Since when?  It was absolutely critical to debugging issues during the
development of migration v2.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:41:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:41:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148892.275192 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxsU-0004dI-Uk; Thu, 01 Jul 2021 14:41:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148892.275192; Thu, 01 Jul 2021 14:41:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxsU-0004dB-Rh; Thu, 01 Jul 2021 14:41:18 +0000
Received: by outflank-mailman (input) for mailman id 148892;
 Thu, 01 Jul 2021 14:41:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyxsT-0004d5-6h
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:41:17 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.21])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fb43a995-f0da-4761-a821-cac8bb61fb1a;
 Thu, 01 Jul 2021 14:41:16 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61Ef97JZ
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 16:41:09 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fb43a995-f0da-4761-a821-cac8bb61fb1a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625150469;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=5q+N2VBHAtQyFyml4WQuHRm2+lkqKSKOPkDkryAxlx8=;
    b=oXhof0CeDekuGnHNaHvW1SY2Rx8afQ8QXxwsK44yqadzuXh7Ua4g8bmAlu+89P8Fu5
    t9LK++7IOBPa/K8wUlGmcTWNAI2rh9xITHdCcKNBhFTE1O8jGD2MhGSbkciUbSyKpKbo
    IBTbpr6Jf1i3O/1jQTVGM9qHGW2LnBXg87tUXy9VaTzQX3NcI//tz4VjG7HbAw/KqN5Y
    5lT57MTeRzi5HYtzLYOHFP3Gdn3UawkP6jO6+ZlBeAaYj0/+RYaReQP+k4V4pS4/UCeq
    q0+KbirbjRAobQEJf23KJa7XngdvhDaOu6G69LBeG8tbo+BtVRAx6udw4i3Ygb2mpq7f
    cU7w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 16:40:55 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Anthony PERARD
 <anthony.perard@citrix.com>
Subject: Re: [PATCH v20210701 03/40] xl: fix description of migrate --debug
Message-ID: <20210701164055.6f373be1.olaf@aepfle.de>
In-Reply-To: <038fa686-c7e8-4afc-e84d-216c3a3f6d5b@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-4-olaf@aepfle.de>
	<038fa686-c7e8-4afc-e84d-216c3a3f6d5b@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/TdB8zB_riXzFLIKxwGc9yRx";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/TdB8zB_riXzFLIKxwGc9yRx
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 15:33:47 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Since when?=C2=A0 It was absolutely critical to debugging issues during t=
he
> development of migration v2.

Well, I can find out if needed.
What could would it enable today?
Last time I looked there was none.

Olaf

--Sig_/TdB8zB_riXzFLIKxwGc9yRx
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd0/cACgkQ86SN7mm1
DoA0pQ//eZ+/5fW3H7knOOLBHA2FOr3+k/hbEzF8pu0KBV7v6SU0WKtxtAqrvtpL
c/Yrlo3TSyjoo/svV1hqc3Ojn/kogClZW03tsUPw7rd4G7xoXoxCaFAV0NiiYlYy
f9MdwDzMoIfP3NZGzapxorLX2BdsbpDOz1s1EMUJ4eB5NzM9fQfr7r83uVSTADn0
12d98uKMDQEzVzYnLkbehu2tyLsUaXtGTgcNLLolkhFDm8E2R2VVbXpLOHYGXFiy
+2iS7+N2iTREMaHiDH22tj1VJ6L1O468fliQuQSwsvIek/HoleujJXHkksOFt8ed
puvQrhD7qVhPZP8udj1Wd7dMWvtU4EmeLAq1MfwIG9L9QXIJ45yiAjhv1qo6dBpT
/E6fSoiay/L+Gvoy8MJ3xQY/+XoecpRr/xXEwtR8acfyvMyZuqkXRGhiNhhmfudz
hh8HsbSnpol5GRFJaB8P9F9i83t3NcJ21fV95Med5Y8GylXQy6fzJz6fdPRwybAt
WKebKefFKn7FNUur0RWUDTPzZ7RTgIOeAR7+zviMpD40SKkzqifWjfW1ZCjfrqhP
dRB6e6NV6eOPX0aeg5Z90H2Y9HIWkLDM4ISLFXqvwNeutPx80Ug+DA1a9FYRjy0e
hc6LzTfWxNMs6XS10Fjzke+O0fvaCru0Fjhhf2bypqOMtEFX2Lk=
=Fsp2
-----END PGP SIGNATURE-----

--Sig_/TdB8zB_riXzFLIKxwGc9yRx--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:41:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:41:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148897.275203 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxsv-00056h-8Y; Thu, 01 Jul 2021 14:41:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148897.275203; Thu, 01 Jul 2021 14:41:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyxsv-00056a-4J; Thu, 01 Jul 2021 14:41:45 +0000
Received: by outflank-mailman (input) for mailman id 148897;
 Thu, 01 Jul 2021 14:41:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyxst-00052g-6J
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:41:43 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 73148ac4-da7a-11eb-8330-12813bfff9fa;
 Thu, 01 Jul 2021 14:41:42 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61Efa7Ji
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 16:41:36 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 73148ac4-da7a-11eb-8330-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625150497;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=JgvL2sC//ao7ppxnTpjo8vPlzd0G6gPifGziXQs2OzA=;
    b=XHUjnWf/aM4NltKDeHfnyPkt/qYhoW6PWtYJsajWBQ+QJ1eBo15M0UOBwjBGt9crLX
    T9zb8iBBNH47iQRN3PwesVfxiAWVJqPFpdjbGQi9NkVndMa6rA3yZtvskZ9HxVGmIYXx
    zFR6fzEDIYL/1YzXnUqRStZOXrFWh1SSgYQfdw6yQyie2jf1E26nMn70i3FYraGwE8hu
    gpUaD41yV9kqYVJbqt97tvPePxtZ5+019NihxFjE4lyhW+NfUNgGjcMpqonpAg0Z2rQI
    QVBUH/PwpZbn+g3DN0JtoWEo1Gx4shznntdziFdXnCD16W//4h7a4Ymw2S/L8iMAit4j
    vWOA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 16:41:35 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Anthony PERARD
 <anthony.perard@citrix.com>
Subject: Re: [PATCH v20210701 03/40] xl: fix description of migrate --debug
Message-ID: <20210701164135.5ba31381.olaf@aepfle.de>
In-Reply-To: <20210701164055.6f373be1.olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-4-olaf@aepfle.de>
	<038fa686-c7e8-4afc-e84d-216c3a3f6d5b@citrix.com>
	<20210701164055.6f373be1.olaf@aepfle.de>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/sLH2SbXlvagca7zYZblvAT2";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/sLH2SbXlvagca7zYZblvAT2
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 16:40:55 +0200
schrieb Olaf Hering <olaf@aepfle.de>:

> could

"code", sorry.

Olaf

--Sig_/sLH2SbXlvagca7zYZblvAT2
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd1B8ACgkQ86SN7mm1
DoDjGhAApUD5tFAYDpuaLWcvhrvLfaxl0Z6QGPz6A0FBpRntVONciHmApGynJUAN
QJPZ7ZKqTWGBe6qMUmPe9RUyNhj512n592tlk9uc0MBzOgLH7zrBAXEWBbNAtzoS
lf2elpLn+bWNP5YR2sYGeOk0NYw9+VRz8JjueTzH0Mhee3JLjm/fvaUeJUAXOMWS
9THptflu+j2waLZcXIH+f+HeB/vq6pN5s6eikPPaQpmia6B1JRWGtTz0VbbAA5KN
TNEyXwOYau3PCWnm8Ntt0iuqqYvSvdBE9bl/TQwTWttzulVQQZqxgdLSmIDOhieI
7NNmGRj9oKRbE9+el6J2Km2V5UsfCOlnzz02nSTdKcKSQC9nyx1d1n4eC/yrlPYP
MLrubbRAtDLu0WItg4NRQhfSY65/NzkGZmoK1RIA0g/D0AEG+T6N5O8OwffyPIMn
GPeIYvJbD8kYcJlxy7/og5Dt1VTh0UDfKJr45ocAFaB4CoNpC94d5oBzxg71OUFD
b3cCH2uI04d5Vd+E9XX5WMo8kO8apJA9jZTf7hvpTwd/e5G9WUnNwdHFDJXa2BOO
uR9vY7KO0nAOLE9V1CI/R9AimvkIROKMwIxVUCreJYmxCmybrGOzxYS8MyCDWhox
voEklUxfsue8MOKVaeBQGpu3D/wM6IIe1g6k05lgX76ofcuuGOM=
=X+eI
-----END PGP SIGNATURE-----

--Sig_/sLH2SbXlvagca7zYZblvAT2--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 14:49:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 14:49:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148904.275214 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyy0J-00062t-0t; Thu, 01 Jul 2021 14:49:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148904.275214; Thu, 01 Jul 2021 14:49:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyy0I-00062m-Tt; Thu, 01 Jul 2021 14:49:22 +0000
Received: by outflank-mailman (input) for mailman id 148904;
 Thu, 01 Jul 2021 14:49:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lyy0G-00062a-Oh
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 14:49:20 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 83d38364-da7b-11eb-8336-12813bfff9fa;
 Thu, 01 Jul 2021 14:49:19 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 83d38364-da7b-11eb-8336-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625150959;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=ly2MHXC/HzUrKwuKhJfH6agfT2Fbq0RaeOLGcGtYp/4=;
  b=FIu2beEhp0ziIYAqE+SDrr/6eBH+qKf+mvPoKJ3/BSz9iEV8xWonIDf1
   MXr9nZShk6Wl5pazZ1M4i0rIdat0blTBQhukapZDb6nVL1oF1ZXFiXH1p
   wZmm1139F+o0+96aii182/qo9knvy+zS0F+qja7h2UEbE2DoNE2etTZsq
   Q=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: YiQg9rQX8RuCbXSbGTf5LxfSIyqEKAWH5aNvcdpkltPWuKQqxyyHHAg3oYGQRe/8rUiKOUGab0
 LL5PdnizmSL05cXlbAwL2xHrn3CzpkPnDNj6LmkL1BcTq0ydT9HqIn7/3ikleSBWvCuQ/V+sLW
 gN8zWfOUq4ZiPy06x1gTiwKXtoAgej/RLRJh7puTWwTcg/U9VXyXq2K9Pf64yloQNDFdCcuk2K
 O5m2Jc24bv/80GQ7YgvFX2H4HM2OuOrtWTplWqVz1lsRhNlvdwKZGsDpW10PrvsuLN3tLCbEsz
 zas=
X-SBRS: 5.1
X-MesageID: 47097391
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:TWuzlKOVqTZRBsBcTjujsMiBIKoaSvp037BK7S1MoNJuEvBw9v
 re+MjzsCWftN9/Yh4dcLy7VpVoIkmskKKdg7NhXotKNTOO0AeVxelZhrcKqAeQeREWmNQ96U
 9hGZIOdeEZDzJB/LrHCN/TKade/DGFmprY+9s31x1WPGZXgzkL1XYDNu6ceHcGIjVuNN4CO7
 e3wNFInDakcWR/VLXAOpFUN9Kz3uEijfjdEGY7OyI=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47097391"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=SnlMfewsKxTRXm+Z2aKZMZ2yFqtnlBBElwrZY9FlSzqRvps7gvJ7hpPnc0TgY1tS4Z0HOSiJn1TrqigFLSpp6rrbQOqVAHbLZspuq01PTolVw7KiH4J2FHi/O2JPk1bcs9JOfS078s8ILfjvVdBeYQbr2d38tUQ6ZoMk/fX/atcr1aLtY5Ok3+EMIIM+GvNx4N6T8wIDnMGEVtH9py8KFT6RWNFyQdP1j3n34NlVRMeMhmqhyofHBBqNEh/Z1duC+eVwOtfwneoap3EK0xWUWl32zsfsVW3M09C90xSFRPqY+IlXTBfOA6XCQit0Q4iybgfl+lwGLQmhBqwNs+lj5g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ly2MHXC/HzUrKwuKhJfH6agfT2Fbq0RaeOLGcGtYp/4=;
 b=AVDHm/kR0zUWXM4btI1ILVvIuIfgWR7zVK9/9qx5T1Q5aQlBPHLl8D8Pdm5MzAp+ludy1drpIXBPAKzIubVsgS3qU12HGxJinPC2JGrO83mDpf5GWNaIXQHopemipkqbHqG4xMJNcuzd+FcRvoGAgH0Krd5PkURLlDyrLKxKIRu/iMxXj2Bj0XflEg/C+2+XNTYs2hknrPTuXMPVQ026AWc48fonoy+mCExEbOsSBkxJ9+fR6eGPu0FvCbo3MdgrhKgK3s9jfufB2pnkuTA2E19ACOnMpoboL7CyPF1TsTh/hPOO0+zFskhGUeSdPvdQ1w8hTNEmJphY0BMBiFAJzw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ly2MHXC/HzUrKwuKhJfH6agfT2Fbq0RaeOLGcGtYp/4=;
 b=mKRbH+kimVgfbiAKVxNBfupg/aeaJsRJ5/oc5IUozv/gLDJDYJlbLQV8TtpmSBzB3pYLEvLH/jWDjl+PQXaT1g/WBlPeg5PviMXEe8AVj69FTSmhhaqEOHT8I9Fw3EslOMmHphqPndRNwf/Bgcs4odzrvgZPAfDUzHuqZta9KGE=
Subject: Re: [PATCH v20210701 03/40] xl: fix description of migrate --debug
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Anthony PERARD
	<anthony.perard@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-4-olaf@aepfle.de>
 <038fa686-c7e8-4afc-e84d-216c3a3f6d5b@citrix.com>
 <20210701164055.6f373be1.olaf@aepfle.de>
 <20210701164135.5ba31381.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <c8251c66-0b3c-427b-c459-7d587ab85ba7@citrix.com>
Date: Thu, 1 Jul 2021 15:49:08 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701164135.5ba31381.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0068.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:153::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d5495471-4c39-44ca-714a-08d93c9f65e5
X-MS-TrafficTypeDiagnostic: BYAPR03MB3992:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB399261854C6FDABF0A629C27BA009@BYAPR03MB3992.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: VgNpODmaIdhW04XW27kBP7F7RHlGuXu5pwQI9jK8tBp0rXD4EvonsuOBrDI+ysnOyAgyyXrEHJ/HKdEShxD/6lrlpGhWrwGdlcFS3VdHWg4ZB9NVeiaLL+5o71Rc/TuB2gJ3MgPcx3zi1uj6sIEiBY+v6LN0N0vPpZ0647u3BW8IHejK4EsYQUACIj4w/J2N9ukno3u5mYc+RSL7huGozhFx/hef0ze1y0LVHqZdMMVb4fEBowPMSU8dLUhCum0zszSIz/KAeM/+/vXDW6GY+57r2zDr4DoefDnJwIhDkmVpAtP69d0HvB/maSzVa8ogZi7YNJxMZN0FKKhI4o5gdR2QzcDsoonmGakYL9rSRNPDK5X68K3+f4CafW4GsSSldCP9cQLierhjn6yw+SVqPWfOn4MO+x0oa4f8qtKm90uaBrm+Lwt82a+NFdX+QVYZH+P4w5dCaSGZ3mwhnYajqzUzNv9CJfRs/g7PVUbnEOm2VCS6it5Gy2PSRedd4Z9l0nwFz52VRHN4lfQSe0IN76NxR2ABYDwR5p3cHmZn1snv86GrJRbcfY6hW5NnuonhkjOIyPg8KJKz+1/xMcDZAWeWRBVL9+xM1nP+6z9RW0Ha6IZUAAigix72NnJHUfdQz1Q8sMHkLcjRvLqRPrreIYMSxNGc72eVc4cXwTFbc7RrfJ8IFMuQfo4P9tJ7hXzX9V+IzJjCEQVksxZAJI3/eLLQhIYGnKQU0udgc19K6Pf/GejPHk84UyuPx9j7PHeA
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(39850400004)(396003)(136003)(376002)(5660300002)(107886003)(4326008)(16526019)(86362001)(54906003)(8676002)(316002)(31686004)(6916009)(38100700002)(6666004)(31696002)(186003)(6486002)(53546011)(36756003)(956004)(2616005)(478600001)(66556008)(8936002)(66946007)(2906002)(16576012)(4744005)(26005)(66476007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?lZpeWYWThORshXljfvQQMCg5iSge6fIh1CgQSSeTurnipc8duPuATTVz?=
 =?Windows-1252?Q?KED8iG25w2rrjwzjl52bHQHA7OlxrclYkAFMs4c4pBixPAvj8KUg7JgG?=
 =?Windows-1252?Q?wzKri5e5W55Z8Zk1WLNB82vODGE7rUIHrS2egfdM32bjNwTovSof9R7b?=
 =?Windows-1252?Q?UV4/RcdCzIp4+Y+iU7ntopae1Tx++hL4qwatHPJqckSFPvHdPfP6ZGHi?=
 =?Windows-1252?Q?bUb3pXrZybxNzkx7arDH1KpitIGA5b5zZFxZAVL7raQi+Tq5m1zpNm81?=
 =?Windows-1252?Q?YTMfqXkhMSYK8MGY54136ObzEqskN/Who011TP95K+JveE+9DQHjDdmJ?=
 =?Windows-1252?Q?9hlUJfx8otzyp90UuOY0l9rFZl1BybTh4jWMsIsjvBIg/Cj+eayUkgSa?=
 =?Windows-1252?Q?lrU0UhIbFtbzqha4uqlWBHtJEisrRyxi3F2KIc773aIL1w77oEmN6VFQ?=
 =?Windows-1252?Q?br1d6do5wv4vQTC/ZBt9b2+jK/ESHWSaIGDz5T8UdJwvYixAXJgLwk/e?=
 =?Windows-1252?Q?Xs0omwq5CykksPNsjgn84UeThEDbGFWlIhuJ/fHl5vqxmIKnXlsWO1CJ?=
 =?Windows-1252?Q?jkJ018vZMkcyb6e/nRvU1ZiwB6dG1LiyHJGha6DJe9gRsRkDidGAp8Cw?=
 =?Windows-1252?Q?PHwIsG+CHSCJ7gg0uOA29cmJXzGhO5gyGCodkBlDSeq/N+a/nNRBdjuY?=
 =?Windows-1252?Q?H6i1SWs2qI7vXxloC7AL7EJf+1Mo4ZoIIhQPsY7J20hsN8zp8K1Z9KQ0?=
 =?Windows-1252?Q?cXQExptj0K8CSUFcDNm5aMp3UZT/ml0nxLqmY5RtysRRQB8p0025xoES?=
 =?Windows-1252?Q?rptCS+rfTo7X6HQ+LyeioAn4VHqCH34hdKqYF4mzJIRoKNfknMv58GcV?=
 =?Windows-1252?Q?LDNHS1f17IB1ukKSy7t9t/hwZINkHqmIYKnZENp06rqSqrPUdTtHLw2s?=
 =?Windows-1252?Q?92Hftn4P7upHuoiTPlUsBSzWHPt2pvWuu3XiEIMIwHiuDYfaNPFyaOK9?=
 =?Windows-1252?Q?whTxsPrZuIsZ8FwqAXDXgQoWogXpfGNEOMY9kgmumw9UgcrmYlWSU1XA?=
 =?Windows-1252?Q?I79IBHWfR0No3rui1A67TexYHoncyLmN3hFA/9AmamOJmrnHd/88BlTn?=
 =?Windows-1252?Q?N4rCzfzHTEgF+FNJS7x3ZKEFmPLcPsTXls//DB2F/iEvgPSJ/XRZ7fiG?=
 =?Windows-1252?Q?g5fChOPe6JqLyyfhxvPscowi4QlC9Hred16s/Wf0FuhJv9VRZ+L7N7M8?=
 =?Windows-1252?Q?zPipGk4NXGPmaEYjGz3sYJtsIoTvkrmcLh8t3rIyguu/9aO17QXXHqnI?=
 =?Windows-1252?Q?pSKMIR0t1TMt05rsf7JMhkbF3bNiVucfodGY5ALijerJaCxQcwWB1FQ0?=
 =?Windows-1252?Q?kSUkhhJR0bGKqqf8lvnyB+qMK0FEc10orrbmerJHyWWcFSUMiEieQAhM?=
X-MS-Exchange-CrossTenant-Network-Message-Id: d5495471-4c39-44ca-714a-08d93c9f65e5
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 14:49:15.7917
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: WCkSwxn7XiR5CJRDpGbHnI03T56L4dk/E71XKb/AM1gbVuZVlTm+JW+qVq/Nx4iydU6UVMaTHUkqCRmPn7PKREX38OV89SFdm3rBb9braM0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3992
X-OriginatorOrg: citrix.com

On 01/07/2021 15:41, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 16:40:55 +0200
> schrieb Olaf Hering <olaf@aepfle.de>:
>
>> could
> "code", sorry.

c/s 7449fb36c6c81d2ba10a40b59e61a9f420cd8450 was buggy and inverted the
condition while making the code transformation.

--debug makes no sense at all in a checkpointed stream.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:00:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:00:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148913.275225 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyAu-0008MI-5b; Thu, 01 Jul 2021 15:00:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148913.275225; Thu, 01 Jul 2021 15:00:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyAu-0008MB-2Y; Thu, 01 Jul 2021 15:00:20 +0000
Received: by outflank-mailman (input) for mailman id 148913;
 Thu, 01 Jul 2021 15:00:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyyAt-0008M5-1l
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 15:00:19 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.164])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 68fc91ca-6281-4814-93ea-fcf68e3bd5db;
 Thu, 01 Jul 2021 15:00:18 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61F0G7NZ
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 17:00:16 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 68fc91ca-6281-4814-93ea-fcf68e3bd5db
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625151616;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=1FRUTA3lx1xmpOp1mKwuBsgpUX+KYHxPk64HZkc7MTI=;
    b=g/z5yD0aJ3oSy0UuR/Wra5UCgZdzo9XYOnqfa10HvSojgcWl5dxTVtKSK3CUFPloeJ
    upFEiKVN7QwYHNGzv9bi7BofWM6I1o9blVSLWEB1XbMTW5wkiHxRa1JxwQx7Blymj7qx
    SO1zVjPQ0bBoO/BO6SAL+zTabDIH9fZdp6FJpzh9DDUARMzb0vwHkHUvrV4w5qi1oshC
    f9B5+/nCk3NRDpzm5rE8gg7toFMnrMZ72pVpqZNljhfT51yqW20SA+pJuDZnN13GXyMd
    HMTwmSoiTV3FpHRo+56eWLfZ60oPm5OqSpjVnQFXzP41ckIC0JekOYbOhPOdyMe/v1L7
    UgWw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 17:00:09 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701170009.5a8be33f.olaf@aepfle.de>
In-Reply-To: <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
	<20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/_MbKKWyEwa/888gyYOByhSd";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/_MbKKWyEwa/888gyYOByhSd
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 12:19:24 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

>  Where is the 51 leaves coming in?

I suspect the bug is this line, and the magic "0x1c" value:

p->extd.max_leaf =3D min(p->extd.max_leaf, 0x1cu);

In my testing basic remains at 13, while extd is truncated from 0x80000008 =
to 28.
I think it should be truncated to CPUID_GUEST_NR_EXTD_INTEL?

Olaf

--Sig_/_MbKKWyEwa/888gyYOByhSd
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd2HkACgkQ86SN7mm1
DoAt5RAAi7YY8rPut4dXconVpm/h1wjL1WGHXNCYK5cNxb7vUjo5nzcWyvUWYGyW
f50OsYYJTtLUt7pjuvymmPNPMomOAnYu6E3lYJ5zNu0yGW4FmB8ekh5IohMeFEdi
RDT725qmdE4vofiR+Apnk6OQ59t0a4u2g2FEPnomsk0Vmj0p9fz3wrbbTNBWPPr+
N61Irs6OtspnBZ/I+qwL5jSCBhE9JvxB+Ni52O0HwTU015zOJQAlqkDpl+bVMrkl
ZZgEmbTs5kKZ/0JvqRm+TMNK0fCHm/f6Olt5lNu4wyDaZEmzjDBgOEGO1WlcASXf
hCzv0WSL5opHRc8GwdHuOipiVR4s2L4w1TCo7+J16+g+96Ctkx10vTKKUjat+xxj
PfZi/+MMeqcKcAmQOoMbcloXBYssW+dDNf9pc3DYxLpMtThC8cn9YX//nEVyLeeg
yHQXxg1usZQLqrcx7Jyj3w6oMsrRPG1jE4vkUtfRBXJ4WGLG4+ObHQw8seyA6KIU
J3oJY1fV0ZAR1kfbnw4w/CreiyKZ86TpBMNx5r2JZPNX9r0xusG3WCrwZneOcnHT
nUoNx8D4+0gnowP8JLSWgAdvl5jrZ/Sd8opSE9muh+6pI0eIsjNFYTJJpUic3sLM
iHkuawfChvXN54vWpEAhnQYACTxgEWPuMLdK2MQJP9aVyDKsjqE=
=Zc2q
-----END PGP SIGNATURE-----

--Sig_/_MbKKWyEwa/888gyYOByhSd--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:08:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:08:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148918.275235 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyIy-0000jk-0F; Thu, 01 Jul 2021 15:08:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148918.275235; Thu, 01 Jul 2021 15:08:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyIx-0000jd-Tb; Thu, 01 Jul 2021 15:08:39 +0000
Received: by outflank-mailman (input) for mailman id 148918;
 Thu, 01 Jul 2021 15:08:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyyIw-0000jX-7D
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 15:08:38 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.52])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 35a43b2c-da7e-11eb-8338-12813bfff9fa;
 Thu, 01 Jul 2021 15:08:37 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61F8U7Pv
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 17:08:30 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 35a43b2c-da7e-11eb-8338-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625152111;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=190ANC80fjmodXC6Is3P8V2pQJsWM0E1YXYCwyxcwEY=;
    b=ZzJGVDtZmXTZ3Ofr3cVbT+YGqtdrDav4z2D6FEYR322AOlY9C8hdZIGlI56RNmzUak
    oaqfcndKl9O3lfchPsQgecXprNAkGovqMV9nKK3bmdyrjgO87HPXvctUammknrRRSrPp
    bSIuaqeMaXNaIfOptH1lzws6g/2GP6W8SLzbee1HCksWIHvrud0uAHb0e3j7Fz7Gi0oP
    y3UV5JOowwXBIdhDwmIjSIgpxmPuXVRFq9j5gt+NhZPn2riIpaDcYEtrOFySU5JrBHZI
    O5mzAbzeCH1gfwvNsvX5vHYcHAD/9jmIgn7ee0XNin2ptzi8+SY9zRrMaMSmt5j7Yhz3
    PBAQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 17:08:21 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Anthony PERARD
 <anthony.perard@citrix.com>
Subject: Re: [PATCH v20210701 03/40] xl: fix description of migrate --debug
Message-ID: <20210701170821.1f6cdd80.olaf@aepfle.de>
In-Reply-To: <c8251c66-0b3c-427b-c459-7d587ab85ba7@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-4-olaf@aepfle.de>
	<038fa686-c7e8-4afc-e84d-216c3a3f6d5b@citrix.com>
	<20210701164055.6f373be1.olaf@aepfle.de>
	<20210701164135.5ba31381.olaf@aepfle.de>
	<c8251c66-0b3c-427b-c459-7d587ab85ba7@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/XR_bpdG+7Xi0.jilAwYy4hu";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/XR_bpdG+7Xi0.jilAwYy4hu
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 15:49:08 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> --debug makes no sense at all in a checkpointed stream.

This should probably have become "ctx->save.checkpointed =3D=3D MIG_STREAM_=
NONE".

But this still leaves the question what value this code branch has when ver=
ify_frames does not, and most likely can not, work.
I think fixing it requires to expose details like which pages are grant pag=
es.

Olaf

--Sig_/XR_bpdG+7Xi0.jilAwYy4hu
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd2mUACgkQ86SN7mm1
DoABWw//VFy/dW3EykCZhfeTJWq51gBWbxz8QeOA1yyeg49Tyskjcr7wPpnWrGv3
whafIYj9nGBlfkdbhWerd4Zv645kYvXteGyPMlQ2MilgtJ2qwYyzuuMXRK50sAjc
sbiAxc56RGc0IgD8cczZIzw/H+6qQ1UQMY2zJcFsbOkplaYTcfbxAgHZuU5Q79lH
s48A8uTf17EVkaU4JNQ92MTzaQ7VeAIZARDWkUol0a1pbCADIw0iTwheATWEodQ3
Ch09e5NHI7wUmb4CMvyaVBeLFKNOjWGZyUszdgscql6YzVT2lc3DeTev2pgqkcAi
1NkUIdi15hB/E/NUcgdCLQhl07JJ3vmCgQRJS09oB4X2aC5Gr/1rwKOuWxOyzGZ4
rtqrRP48dh6xtU3U0+gX+GIGXnK1sEPtGSsVMfSUj51I1jIhp92x1nyeWLJ2m1hQ
5dV6r1fpog080Hg3CJhOeJ6ruqBBF2s4C18gjgVTnPIxB3CiZPegm0Q9piYmGEu9
mfKwd4jo788Vp61Xv5+9cUnXPsf9GV2v/gCURUV75P1DuBJj5jJNlyyWKbw/md8A
1WeEFWZry5p4wuQ+PRp8egsdZZm0n+pGnSvEmDoP0iZIBHj3mo+cyrA34kqzY3t8
/ecZ2MVhLvH5QqgPZcngFi3tkPEIiI7K19QRpb01fi3F1ip9MwQ=
=1izF
-----END PGP SIGNATURE-----

--Sig_/XR_bpdG+7Xi0.jilAwYy4hu--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:13:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:13:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148923.275246 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyNf-0002BQ-Jq; Thu, 01 Jul 2021 15:13:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148923.275246; Thu, 01 Jul 2021 15:13:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyNf-0002BJ-GQ; Thu, 01 Jul 2021 15:13:31 +0000
Received: by outflank-mailman (input) for mailman id 148923;
 Thu, 01 Jul 2021 15:13:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lyyNd-0002BD-C8
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 15:13:29 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 87d385b9-34e5-4e9f-ba2a-d1d4dbe27994;
 Thu, 01 Jul 2021 15:13:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 87d385b9-34e5-4e9f-ba2a-d1d4dbe27994
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625152408;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=ydcrTrLAzfXe3aNjGfjl5WB8cgTZLWAMYtc9G5cGdTo=;
  b=gnzr3f7e72Qu/Chbm41/FVdUEqzS7KiGHxlHRLuDKoR30x8D1ixHszNr
   nO9pukMuDJ2OzN+waRzXZzrs5p/ML9b8T4YNsZW+rAfZ7i3CjbZHxsKPi
   kO6YvxNsW7dYMyCNC4duY8Q56wjqHGpkIIK78Dh4PVIld0mMOdFF0jLU8
   8=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 6zI9ZKMYwdDrFHIvYFY2ic19yUSQSrDwKs6wgxS/4c0ougVrejlwwcN7Nye4PNbrguV7dWMQ0U
 OrNEfgnX77O03+MpTn13/xladx/CiSN0ut64Q01DrlKzPRtcmNDDzpPE40vibCGN1AsFSMCT1W
 kVlKCBas7kebf7yirIBh7ERku9+XYdLz/ub55Tc65DrTqSBh2+T+gueSbhyIyQcBrhl3ItPf9p
 Zhrhjw87tnCmkcP+DQm8AwekuWQwf352s5wqfhIXqWo94oIKiNe9ITPGy9YB+AXkWau5JSNogH
 fr0=
X-SBRS: 5.1
X-MesageID: 47391768
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:viFdeK/7gbOtc9MSIk1uk+AuI+orL9Y04lQ7vn2ZKSY5TiVXra
 CTdZUgpHnJYVMqMk3I9uruBEDtex3hHNtOkOss1NSZLW7bUQmTXeJfBOLZqlWNJ8S9zJ856U
 4JScND4bbLfDxHZKjBgTVRE7wbsaa6GKLDv5ah85+6JzsaGp2J7G1Ce3am+lUdfng+OXKgfq
 Dsm/auoVCbCAwqR/X+PFYpdc7ZqebGkZr3CCR2eyLOuGG1/EiVAKeRKWnj4isj
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47391768"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OxycDaqTSqXA31CRNt4Bg7MVYYSWtPTqRW30unpo0noBzIBEv9HjrZ4CTTmurEAUh0jowPXDYutmyeXGscOTflyMGdbX/AWgGDjTlKYTlF6VrQlvyzWXIqgiOaKWMWsfiXhEEbqTY07/vnYWWoJP+6W9U0w7UKzT/5vbPk71U7bd44spO1FuPuzIjMhcy1kyvMn2xsA2IVZdgUgHSh2Adx1vl90tuuSN4ILLslEJt67xixqXqpLsrpm6X5BCn7tzuiJzZsen/Ru+D1XLpYGFAWE9GGRG2QCWp+pqxKr4l+S2ow8vWFNk1yAcEFjlqeCN+xdeUki1OfWlTD6XOeDF+g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OMFB/iP2HOsEBbJCx9O3lVcQ2RR3FXbB/e+5SkWgTGQ=;
 b=g4Sk1FHeSiA2UfQt0wmG8VUm92Y4VhYW2P+/5Mf0WqsK8TfipaZhpgMWUeC2hLeKqIN1jbd+/DSErdzULT0dgvJBpXBaH57VtitNyqpPUaaGlF0mFjIkXwNh0mAA3yPT3lYaDJ8nyPC//hqow4kO/Q/PGZtTT1EzvjPn+McxyqyCdnPqa1alFDDOMbYvs4uzxhkvBjAyhoYuNNddDG9LtnM1Hml7LypI4vppzovEYOL3BkoPOvXaWW9lJa9PtjfiYq9NcHK06qgIKLexNcR5eed2xE3BvPMepqqE4i58TeuyHT98DpL8YrD5iha8Zzy1J4LlpNvikTmzOLtvHvp9bA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OMFB/iP2HOsEBbJCx9O3lVcQ2RR3FXbB/e+5SkWgTGQ=;
 b=BJRc4md1llc/1xYAbTE3YwR69FMBQUNikqKpmJyMTjdoYWcyDSa4eCbfWmNOMtVpZPGYkFbRn+owZabppogEkXsi/NylTqFvl5La8FIJ+xG13Rnh2vOoNUUcvvFBR8vJVo6iBwdpnsroDjLuaa0Gv97cmRjCEEL1s4gB/ya6Tf0=
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
 <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
 <20210701170009.5a8be33f.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
Date: Thu, 1 Jul 2021 16:13:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701170009.5a8be33f.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0095.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:76::35) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a838265e-6ee5-461c-9fbe-08d93ca2c63d
X-MS-TrafficTypeDiagnostic: BY5PR03MB4968:
X-Microsoft-Antispam-PRVS: <BY5PR03MB49684C55485B24908806C92BBA009@BY5PR03MB4968.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: MjFIq2unBIf3KpVRwV/z4e1Yawwb0/n4M8VTSgM8TODPr8Ktn8B6yI6QeoZWAHEN41lYbPXXPSIde/4VdNd5aqm7LkxnVTxtgY7XFj4Xw3Re10KMAEgRvmTs4B6WexrFwqb0kootZLy9FaX7dHF+LYIsoc4knEhDrweld2kYxv1CylGgZHNJzpVV/ZMHT8v9diVBR/dcL8pcKfE2QDBjy1x9GW6RW2vWurVbxQ4dMH8ltkQD2qY4KeB2ZGOBpr6E6jKVoriTcDVa8PWYiEB5/S/PxtiePyMNe+pvnTheML9VoEvIdE8tny5akQ8Go4iWXW2biRJHmI48UhDhYJqaAr9H6ZqXfpfAktmX/YyhTjUPFKe95RhFY2oTNoIjkbwcEjek74CYYgI4bnWJwStLiy9nQQxE7Ag6W/JeBg5Eq0/qJpcE030u/Ac+7h/VyZyNJ5V8bzoS6qFfsMc//X7sJaxqtbfewFkmdBYkHudN6Imc5RmWZPsWQJVN41BiIubE9zRmqFAgXzQ0oRPEnpWnydLlM4+4iYKVGUrmW/TcXpf7qp1s+8zk4n+YOrB/qvePFywKH3cJ+B3x76YV9lxmz3R0DyCBP8N+qoYJJSIO26trzRNlVIi0n04UVMny5qLEa8zL77U6xDq1OV/iKcC43gYRU59SEfMUDKwQ2s9XvcpreH9Iw7WDmqiZIMfF7Xn17FJJFtF4PVnI5Y+Gg9PAN466TQZ7GqDlLeYSEkQiCWxS78knw673+Wx9kSj4Ri4T
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39860400002)(136003)(376002)(346002)(396003)(66946007)(31696002)(6666004)(6486002)(31686004)(4326008)(186003)(16526019)(86362001)(38100700002)(26005)(36756003)(8936002)(2616005)(16576012)(2906002)(53546011)(4744005)(316002)(8676002)(956004)(478600001)(6916009)(5660300002)(66476007)(66556008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?xf0GqOsqzCzKwcDaIH42zAuDY1moxoh/L+uD0HQhqDfwAbT5yI/S8Sv5?=
 =?Windows-1252?Q?nQF/XW+WPecvzY/Rnd+/90gGJyTEjDiOf96V7Eb0zHAUrNya1U5Ht5AH?=
 =?Windows-1252?Q?8YdjB/s+MyUsOUOslTtqO2sobSaRjvy85rTiSE2aE2Qd/1srolnwGAkn?=
 =?Windows-1252?Q?G4UpG39XRssZgtEivRqY1bngXguu3IB9B5LbTY8gyYI75u6Lewm1/LRA?=
 =?Windows-1252?Q?qioSiUn5GIHHKO0BhHCMk/d7byhpMkZppVM0vEbI9V7kDnNVyAxDuuwm?=
 =?Windows-1252?Q?jLXj7/i8C7+4EJ+pmTRt1m+NP/acpzJmUYN4BRPmkUII1k8kHTIHETvw?=
 =?Windows-1252?Q?DK/NEd0THx1cJ7xNp4zp3NI+zGdYYcOX6xNOWXdLfXwoWNkllIW0SKBh?=
 =?Windows-1252?Q?Wr7bPaP5fGk+9Xaq5poYov8ckuW9dru98jvL+UaFdCY8dmKi25u7d/+8?=
 =?Windows-1252?Q?SoT5crCps8qWuHVFNAcyWJhTb/fy39LjLNZuAx6Ls3KfhI/3jAqHallU?=
 =?Windows-1252?Q?LLJIfnmRvyNOUME4AyfJQZRKxdt8BSy99M5CA6hUKNx3vFInAB5ek0p+?=
 =?Windows-1252?Q?o+8xi8v7QaEes+xZLvsZunpzpSpnvAU97LxkIoHI0sey1NHTHESTvRxe?=
 =?Windows-1252?Q?p/yGgJC2m8NhqAEst16HsPbtLfNDb5B63dxeiSXElLdwaTmeDWhSfA37?=
 =?Windows-1252?Q?U7JP9EN2wZknTZYNztKLaldnNT2OFfG6bx7uRNql4mcbJgqb82NlYkav?=
 =?Windows-1252?Q?VqXzsK0uYreNEbQyXgrjO/zJh7oTwpyI2Bm4gC5EKdCzZXnN3B0KaLLq?=
 =?Windows-1252?Q?iZoGKW7gSmZ5X0q0UfvLEoJWiBCaW9IVGviQM97Tzcju6ZqYJRZMMesX?=
 =?Windows-1252?Q?h1k0g+RXn5WEbr2hPxeXn3xY253AQMhlgths1vMAZfV19ImVjP6sfmN/?=
 =?Windows-1252?Q?BBaujtZWlB3yWwNwSsN+UsjvJ5VOSdgcUM4q/RQKwdN+mtXXEAATvtCy?=
 =?Windows-1252?Q?t/O7JCPv5SQQPFWcPi5sx54exGRGgJlbHuRhRibl9BL3VpvIWw0+33YB?=
 =?Windows-1252?Q?ri0qOhtPzo1ZT59ykgERcSHSvdrLAj7A7HBYOYmm6MA2xZePgzYXvecR?=
 =?Windows-1252?Q?Lqvq6GO6cVsXuvgwV8qbRiTdG4cN0CxzYHCFxUuP27v/iBL3idioSLtJ?=
 =?Windows-1252?Q?19zVIRqWGheJto3/SKivHPXHxDJb3gCA3IblBsMcTbpQ9//xsWO5J5Im?=
 =?Windows-1252?Q?a58+yoRSwBRVFDL2k8UepUxT/cV0zDURfi/zfCfcGy6tTdfg0YCm/9ss?=
 =?Windows-1252?Q?eUsah8NX1gl/jCS5XKrzTjMl7mi6+fB7i5b3/LK+PlotsBzGvP90LI3o?=
 =?Windows-1252?Q?quAip6lMfp6gUCxt18fUaIQFqSuaZ1M5WV737i3cALm3MvLrYDkvYoBC?=
X-MS-Exchange-CrossTenant-Network-Message-Id: a838265e-6ee5-461c-9fbe-08d93ca2c63d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 15:13:25.9360
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: uByN7qHxXAOIyQ18s0Gw1hBRvN7l+rPRqSoqRBvI0xA6SOgrCx3R02gfwBUFwC35ijgWYYyC6G64ua730KXaiFlVigezGjl7t+e+NkTSY0U=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB4968
X-OriginatorOrg: citrix.com

On 01/07/2021 16:00, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 12:19:24 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>>  Where is the 51 leaves coming in?
> I suspect the bug is this line, and the magic "0x1c" value:
>
> p->extd.max_leaf =3D min(p->extd.max_leaf, 0x1cu);
>
> In my testing basic remains at 13, while extd is truncated from 0x8000000=
8 to 28.
> I think it should be truncated to CPUID_GUEST_NR_EXTD_INTEL?

That logic is definitely incorrect, but using a different constant isn't
right.=A0 I think it has been copied from elsewhere else and incorrectly
simplified.

I'll see about trying to fix it...

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:18:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:18:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148928.275258 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyySP-0002qK-6b; Thu, 01 Jul 2021 15:18:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148928.275258; Thu, 01 Jul 2021 15:18:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyySP-0002qD-3L; Thu, 01 Jul 2021 15:18:25 +0000
Received: by outflank-mailman (input) for mailman id 148928;
 Thu, 01 Jul 2021 15:18:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyySN-0002q7-LK
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 15:18:23 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.81])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 916c577d-da7f-11eb-833c-12813bfff9fa;
 Thu, 01 Jul 2021 15:18:22 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61FIL7Rm
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 17:18:21 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 916c577d-da7f-11eb-833c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625152701;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=M0ebOvnNW5hhMGkl7OSyZD6UvWcOLfEJiyQEs07Unyk=;
    b=Nd44gLvNb/EU0v4TzAYlo+ljMN/MkE1qlaaMUNq5FfVALjgVxFelHsVmo9k1GGcWPj
    dHmnjSGj34Gk5Uu+FaOKIpaczF5EXZ/j5sZngwNx61IUPDd/0NiKkICyxmc9fa5lVl/d
    SF1CIVHRciAJDQylULsq5wmOYjyABZtt58oZ8nmUbVuNVNIpHXO+twSawxdv6ZTPTttQ
    KmSc4idpFhvXDFQit+HlTdlhQVQmret8sWoSMBOAVr8V0ga2vlNGiNFKmLu706tbn53Y
    QdfW/DRBWS6QsLxaLKHhDsvkZxps8Hbd8risvDbKe2KQvNSqtN8VdFr3E0UOxOX/shXi
    i3CQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 17:18:19 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701171819.67968d4d.olaf@aepfle.de>
In-Reply-To: <48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
	<20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
	<20210701170009.5a8be33f.olaf@aepfle.de>
	<48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/m4YsW8EoIBaGu/zB3IzQXN2";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/m4YsW8EoIBaGu/zB3IzQXN2
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 16:13:21 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> That logic is definitely incorrect, but using a different constant isn't
> right.

Yeah, that occurred to me after sending this email.
I think in the end the values should probably get closer to 51, not smaller=
 than the current one.


Olaf

--Sig_/m4YsW8EoIBaGu/zB3IzQXN2
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd3LsACgkQ86SN7mm1
DoC3mRAAjJLu7G7sMzLBGdG25ssHNsvBfA1ylw9kf7OJ7Mp5Z3A7t9SLRGieSFIV
zMrSU0D34FyV7YMqS+UUO8o2tmWR9Tlk3o+aWRL8EYoRhwF+fsHYfsTUok1Kxge7
hE6rPCL0triPJe1iFrRRep5zEMruMDALmsrcu2VFTYz9S74cmpjkhE3fPmHgxhbJ
yOtP8R8xSUudPBBP64URngxEko8xtXkTVJNC77kEXYLWe2Z7T+5pYg/SykoXlNRW
BGODq2Rd25ZCPdJfmWhv1BQNodnV6mo907xPwe4+PfjMRm5Gu2OhlqrB44LfVzWB
UK7VsfXnCuLhIOsHg7E14iOHq64hPzQ9cFdnxdfaexoF+v7PGlEFUUW1jO9I+nfD
OfgAWHf7kbArEP357YCK2wBlLjzbs3EukaNmHP4QS9uWq0rlMgHfiaPZpxNP+Q9j
ZcBD0vHWv5jZB1mkdo+bl5By8ELsog0AxjvCJrsWrwHfGzOqDCWLVlSf7cgN+Bs8
Koak+qvGlXEIf30spvcAdLvIEwvS2edEm4tZv/M0XVa3Fl/l53EPYnIGegmbxPcY
cTXsEfzr9aps78KtmNV1BkFQ2I1AGIB6ohFXwJStnNStw7t7LJiU9Xic32NlwNDf
njPFX4SRsVlOED1np3A3vxF5/BwI2SyTn0Y2ZHKZ53YtOmCmr+Y=
=dn6K
-----END PGP SIGNATURE-----

--Sig_/m4YsW8EoIBaGu/zB3IzQXN2--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:25:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:25:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148936.275269 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyZ8-0004Il-UM; Thu, 01 Jul 2021 15:25:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148936.275269; Thu, 01 Jul 2021 15:25:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyZ8-0004Ie-RR; Thu, 01 Jul 2021 15:25:22 +0000
Received: by outflank-mailman (input) for mailman id 148936;
 Thu, 01 Jul 2021 15:25:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lyyZ8-0004IY-BK
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 15:25:22 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8c44fd48-da80-11eb-8340-12813bfff9fa;
 Thu, 01 Jul 2021 15:25:21 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8c44fd48-da80-11eb-8340-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625153121;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=X/V5ibCYQ5Ltjst3E1u/yOTCJtEyYzUZXQwk3N3+N8A=;
  b=SuZU4Sq/kFh51r6PDK8rqJPQR9NkpLnUAMySwSCxwiGL9oB38SNUStf5
   oHFi3Dxmc/BGFLQiTMTwHNdVcpKXEjrRLytpOZi9LotlZpaZhYuwnthSY
   qD0KBy/WpL4eUv+801B4rHAsF+Oo+Z9QeOrHkJXAJq0rk/46Cum5aEimG
   Y=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: AxWbYp+n8zJn626r/8nVZagjrA9vK/HRgctX5sBjxiDLboBgojMajFNpOTFsSElb5+qVLt7UDm
 IzAHNGI4G3xjdlzOejouTclhEtTm4PxRXidxT5fL49gcTR8G1yuokBppr/DvDxVU5ReZNNIRfy
 Cs1kNimiawwRwnjF0rUnVICOeVGeZsf707zZ1UErjLxxpivEDaBHiItlctrdueRbM9sKbVLhSE
 hULnDmfDd/3GPJlMDBNUVzTR2ox74swBN8G3d4V4mXGnxKoAt8esZG8eqp0IYB38+Ju662EAAR
 Io8=
X-SBRS: 5.1
X-MesageID: 47455352
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:5a/oW6+ZpwXnPhFqhxRuk+E1db1zdoMgy1knxilNoENuHPBwxv
 rAoB1E73PJYVYqOE3Jmbi7Sc69qADnhOBICO4qTMiftWjdyReVxeRZjLcKrAeQYBEWmtQtrJ
 uINpIOdeEYbmIK//oSgjPIa+rIqePvmMvD6Ja8vhUdOT2CKZsQiTuRYjzrYXGeLzM2YKbReq
 Dsgvav6wDQA0j+Oa+Adwk4tqX41pL2vaOjRSRDKw8s6QGIgz/twLnmEyKA1hNbdz9U278t/U
 XMjgS8v8yYwrCG4y6Z81WWw4VdmdPnxNcGLMuQivINIjGprgqzfoxuV5CLoThwiuCy71QBls
 XKvn4bTopOwkKUWlvwjQrm2gHm3jprwWTl00WkjXzqptG8bC4mCuJa7LgpMCfx2g4FhpVRwa
 hL12WWu958FhXbhhnw4NDOSlVDile0m3w/iuQe5kYvErf2UIUh6bD3wXklV6vpREnBmcYa+a
 hVfYHhDc9tABanhyuzhBg3/DTENU5DaytvQSA5y4aoOnZt7ShEJnAjtboid0E7hdkAoql/lp
 P525tT5fhzp+8tHO9A7bQ6MIeK4lKke2OFDIvEGyWXKEhAAQOXl6LK
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47455352"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=f4mgmGHWxsu3RaQMRFAyOgsPoC7dttGOOkH8Xor5Eqy/jKYgViChM7RywtYpqOhvKwDqMDUO1jiadE07A9MCmmk6Ji87GmY+XyLo7ROQL/qlxMKB36npglfBiCzzLefyv9p50yNHTfkLqhxMWt5vBDscvwXBMc+V/MoQhkojkxhIpaoFPDJkNqkXH9ieY6ewKCXv7qiBEhTYTt9+pvQ7UKZFNYPl0ZXn2FwoxjhyN3SoiDHuIr6QLp6baCQbj3Niu7SP29XJsRoEqG2DfRfsnFOj4quEML5SE0vISguo8cfCgTPXVinTeC9VVtyqx65dagV33vB7TYGz46/GBFNEmw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=mjwVxX4GgIrAQoSzUjcjTbNJwYYZxd6+6mayAKz3JtU=;
 b=Dax8dpeRQJNFqEhNGHJhsSYPuF43nWL/aR5pUff6noAFwBWgMQuSzE4BL7ntgqwVQHdncMP+hmZt1MLr4zOBsd4sk0uVwDo7TjB98buc8eqU4mA0FveZyKjIMODq+5zEWLU9OpONzfdgtSxPSa7YNXqW5qT6YdNM98ch2LusgppMsTKj8yod7XOwp5zMWBlTMWlZsAOoZ/itJV4X7aGq9T11+Sm0y169yCNVBdtUho5QPX/IEc6gvU+3l+p3XwpQKisG2ZB/C70cXTQk1Z/Ky55ilfObNmo7oJ19sLp+oC/K3mcaUyl2GgMdmlYatdE2TmVJbHti426GAXd2qpkEBQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=mjwVxX4GgIrAQoSzUjcjTbNJwYYZxd6+6mayAKz3JtU=;
 b=W9Y4S3+IpzqVGGQUm03nPFM/w7U8NHdORGcZjp6gnL1uMZGsbh9DSQIIFWQ4iIJmCJS3LmC4zvwHRzQpYyFP94QUMeg4cc3ClfhnZ7cDHq2WICLed8Xab3/AZNcbrIsiBvwo30Lxj/t891tX6mVgF7GPsoEtY9safsYdcE8CECk=
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
 <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
 <20210701170009.5a8be33f.olaf@aepfle.de>
 <48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
 <20210701171819.67968d4d.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <dc9af473-b613-721c-87b8-d259a2448c09@citrix.com>
Date: Thu, 1 Jul 2021 16:25:10 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701171819.67968d4d.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0256.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:194::9) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0ca967e3-da94-412b-5dfe-08d93ca46e0d
X-MS-TrafficTypeDiagnostic: BYAPR03MB4680:
X-Microsoft-Antispam-PRVS: <BYAPR03MB46800E081772566FDAC3F370BA009@BYAPR03MB4680.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1227;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: VBIHtrEeW7g7sgbxbguMX1tdpK/bg6/tlIs1jb1LZ/RGowor7dRaJKOTyvPg620dtx7wuuz4u46nJ8TT41PGvBLdTIxYtAlFojK87xTLZlQzHAR4GKffz27O1HEC3mrxqFCCBcKQx+d6SKqvXyz19q47vx+HLQplYUHk+pYYIHJLYi+LiwuJd605wO4duLlQ+imA21gSUc2SLYSyGo7nNtJDZOIpOhapXO0b1TkdZMZfNeXcRsLOg5AywJP3IBwmd7N++gNeAJx+h0R/PeiZsjr8l185QjAbaQOehWlqrh7nKX7Xya6V9U5Tr2TkKmwCiVDxv1u0tHgAAxJ9RT8n5K5TX6xjCoTbWM/9f16sweANF1FRtkmegmUDf4kSlDnCc5VHsy/xUITjnj8qBXWISIQqo2Of1OVPxafZSCSa2IA+sXTwvxTiDtWMXbe/x4XVt+v0IEEu9emY6fo6qUTsXRvpdXFGR2UhV1HXhTIrLoD3IMYD8adAEOq0eAg6AKK/xCguX/hWg9tsDJ62G4dfV/zmxEAT4w0pe3b+gqwnkUeAPMa60O80gWwrCqgB1e/WEFplE3baR1q+dhYMIEb25KqeCCV3k6gAqBT2Hzlz6IkhY4VMhcxG+UBI9SA6C9SpcEn3mzakvEkim6W5twINKzGZbHiK4pxinl1NcdjBUsTp4/OaI36s7Amm9mZmsyJDXwnuMjGgxO2CkP7FU6p4CDBMEwJ0sn3TmAH0uk0tzZvMSz1U9ZZZHa/amBm1aN21
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(376002)(346002)(396003)(366004)(8676002)(186003)(83380400001)(16526019)(6916009)(53546011)(38100700002)(26005)(6666004)(31686004)(478600001)(5660300002)(36756003)(2906002)(31696002)(86362001)(16576012)(316002)(956004)(4326008)(66946007)(66556008)(8936002)(2616005)(66476007)(6486002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?GreJc3SMVHfRXYwURNJzmrwnk6axbm1G4rK2Ee2c2V/6kBOeZ4Cna4nP?=
 =?Windows-1252?Q?Cr+wZuNuIU1ks3woRGFpYp5XWgfKASzLfKStnvgxEpDyjQCexF1KN8FF?=
 =?Windows-1252?Q?nGEBNiMdgUgPJ54gEjalXwEwJhl2KzA3nsyZzwP54vM03pLOZvG3aw2s?=
 =?Windows-1252?Q?3lHFPEJiVy+siseGAzaOKBSm4WJNkg4k5gBnwUICD23wIsKWyEZ4o+tI?=
 =?Windows-1252?Q?Q0cd2ir9Dxx7pkTdrlUhjexQxY6esQYIYfCHprnJF8EaxbAypBCrUvSK?=
 =?Windows-1252?Q?UA6oX+pV5sF/laCOO5KMwvCqalF8aV3Q+SO4Q3NZKWkpW6H5YqN4JBMl?=
 =?Windows-1252?Q?s0m5N8axsFDgOj2aJMREfqjuIrNV8BiCB6RTfNToDhtsLLHb0Q2yZ7Si?=
 =?Windows-1252?Q?Eb+2dm1BcqsB40YwtxzYbi9ymUTnMJnaS//81cv4T5JI29tHSxaK87LG?=
 =?Windows-1252?Q?o0joUKp4kwL3tC4DeL5J1ckwilY4ESAtkVadS2jegzuVGFp1ChR7KCpV?=
 =?Windows-1252?Q?Hm8n/uMad7fyPPRZWzj7IoEJu3Y5gq7MNaRAh51/mDavU+JH0EO6nEVb?=
 =?Windows-1252?Q?V3MPRugXB+MLFd4xQput38semNl4SLGUA8gAMTMakqHBvKd0lou+3cJW?=
 =?Windows-1252?Q?UarDYrAhcsT7WWUU9HWB3tmCTvtFbmsxRAPOyYLrJi1O+x/QXK2zsMEY?=
 =?Windows-1252?Q?0l/RNvlM0CfN9YWfwAi0XWrufD9oYTsT97idg8m8ApcbC7hzEuLu5+It?=
 =?Windows-1252?Q?ay7sJ5e63VC7pT7jsfFiNTsB2SHRI4CH3ORTjRpUGkH4iyfPiKqF3DrX?=
 =?Windows-1252?Q?zHCQKBAJG1BQKC6SwVlgI05kNhoYfZIN68qecRHVx9dqpMyFwH/16WgN?=
 =?Windows-1252?Q?Qrl5J3Fh3GZPVGfHQck15LSpnFeJdaJPWywRoyU57cPZWufznQXYny00?=
 =?Windows-1252?Q?2cSjEJ2++AfJru0Jeyu+GzLgwmTz+Jg4itw8dzcTponruErL2XDCZs0I?=
 =?Windows-1252?Q?FEKcVOqtoanbxamUgz+/qkKq4MSrkeqD/giwQuzPn1RBILctvwEMbIHV?=
 =?Windows-1252?Q?UGL+1Nex75p6XxwoNRzTeNRWSF76WOF9xwSKd6hacoH1toL0n91mu3j4?=
 =?Windows-1252?Q?k3qsTp0CxmdqpHzgPfXUjnOk54MyvCxEK9IS3Qeiuifeo04aq5Uq2+WF?=
 =?Windows-1252?Q?cdiwJjQeX9z/qhExVeimlxZ0ZSUa1u1uRAcY0gQjG9nQmdvaKt0JDRCG?=
 =?Windows-1252?Q?QSeBFqGZ1UNbQAG/Ld+IrMapy4B97f4usATSpUtgsowQ+BfL+IMCjD0P?=
 =?Windows-1252?Q?n65biZQuMgCMHhnHSIdclOe0bqXJ4d6IVFRLJscRb0YBwj5q81Yvue6C?=
 =?Windows-1252?Q?s3irPoe2ab5e59twv/XFzOwFy6k3PaEMAS6phikJSKoD8t3nswiJlGkk?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 0ca967e3-da94-412b-5dfe-08d93ca46e0d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 15:25:16.9757
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: xrYH1kp6hYoUOuKDajInr5xtH5jj/A6gCwYLjVWMxXEAKI++nwvSi2stIgeAcgj+kHWTg+LsNnEwgB4G9dRJfFgxBEbcawVFsgJEzL4Erxg=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4680
X-OriginatorOrg: citrix.com

On 01/07/2021 16:18, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 16:13:21 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> That logic is definitely incorrect, but using a different constant isn't
>> right.
> Yeah, that occurred to me after sending this email.
> I think in the end the values should probably get closer to 51, not smaller than the current one.

Can you give this a spin? (Sorry - I'm busy with another task right now
- I'll do a commit message in due course)

~Andrew

diff --git a/tools/libs/guest/xg_cpuid_x86.c
b/tools/libs/guest/xg_cpuid_x86.c
index e01d657e03..e1fa33d708 100644
--- a/tools/libs/guest/xg_cpuid_x86.c
+++ b/tools/libs/guest/xg_cpuid_x86.c
@@ -513,7 +513,7 @@ int xc_cpuid_apply_policy(xc_interface *xch,
uint32_t domid, bool restore,
 /* Clamp maximum leaves to the ones supported on 4.12. */
 p->basic.max_leaf = min(p->basic.max_leaf, 0xdu);
 p->feat.max_subleaf = 0;
- p->extd.max_leaf = min(p->extd.max_leaf, 0x1cu);
+ p->extd.max_leaf = 0x80000000 | min(p->extd.max_leaf & 0xffff,
0x1cu);
 }

 if ( featureset )



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:43:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:43:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148943.275280 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyqg-0006iB-LB; Thu, 01 Jul 2021 15:43:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148943.275280; Thu, 01 Jul 2021 15:43:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyqg-0006i4-Gz; Thu, 01 Jul 2021 15:43:30 +0000
Received: by outflank-mailman (input) for mailman id 148943;
 Thu, 01 Jul 2021 15:43:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyyqf-0006hu-It; Thu, 01 Jul 2021 15:43:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyyqf-0008A0-DI; Thu, 01 Jul 2021 15:43:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lyyqf-0004FY-43; Thu, 01 Jul 2021 15:43:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lyyqf-0000dW-3U; Thu, 01 Jul 2021 15:43:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=8hDzVsvnQdC8oYQ6Ruqk5A0ejVENUULzYfeJB+I0mKE=; b=MeMcp70Nc3dtLEQnWfCus3vz37
	BrrsF5u5P7SiO8uMlUnMFsi3fbgqCrTS3Y6oDFYgs07IkNdRzIAEnhCHrCT2Fev3U7NMCoexb/R7n
	pwVps4ECx7Td2CTo5y21XDHRVect0DsaHaS1UedikOCSFMRq/vjvEUY3rlSSXcH24d1M=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163212-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xtf test] 163212: all pass - PUSHED
X-Osstest-Versions-This:
    xtf=cdef9568c1b1f8831f3b8f644073e635d47f0ec4
X-Osstest-Versions-That:
    xtf=93b29b886e8665e368598c711279d45b7e5d066c
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 15:43:29 +0000

flight 163212 xtf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163212/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xtf                  cdef9568c1b1f8831f3b8f644073e635d47f0ec4
baseline version:
 xtf                  93b29b886e8665e368598c711279d45b7e5d066c

Last test of basis   163016  2021-06-24 11:41:21 Z    7 days
Testing same since   163212  2021-07-01 12:40:06 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Pranjal Singh <008pranjalsingh@gmail.com>

jobs:
 build-amd64-xtf                                              pass    
 build-amd64                                                  pass    
 build-amd64-pvops                                            pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       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/xtf.git
   93b29b8..cdef956  cdef9568c1b1f8831f3b8f644073e635d47f0ec4 -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 15:53:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 15:53:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148949.275294 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyzq-0008Aj-HZ; Thu, 01 Jul 2021 15:52:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148949.275294; Thu, 01 Jul 2021 15:52:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyyzq-0008Ac-Eb; Thu, 01 Jul 2021 15:52:58 +0000
Received: by outflank-mailman (input) for mailman id 148949;
 Thu, 01 Jul 2021 15:52:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyyzo-0008AW-Oa
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 15:52:56 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a85c2024-3b38-412d-90ee-51c082d3b1f3;
 Thu, 01 Jul 2021 15:52:55 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a85c2024-3b38-412d-90ee-51c082d3b1f3
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625154775;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=y1e/4dsezIMJVg+0zwuh7zOhGcr3k456Pu74dnN3TXA=;
  b=e+AHZWVh+LwlAwwa4M+pHEYe7PyKqzGqjVMQr04nJC8NRCcTo3Lhb+Zp
   yp/REsdT2aK/Z2NYMmQwH+vgnvPdN4ZhPiwmJABxqpoSefS2HIBNaOCRW
   lEGlXqwon7KFoluPjV+pzvTZ+Wl/d4ODbEaHFrrGWhW7dWMqwswXW+8SH
   Y=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: jX2BKWaZ/WBhxDFAMELTQV8xH2CfNJ9KXSV9dZET0cXK1d+bFtMJeTBJKkuKB/5kjeJ75IhsGo
 tlPU0JKCOQ7pal0SCRwUrliD3GLvoQrxxrSJE9GAVjN2vIS+1/Wr4nrAlkk5LsS2+7l0h2TQEi
 K1+JN3P4aIV8NYWn32U9/UiyfGcXjJk206IvAlakO4DRHUOilCRGEwKEL57o8C51B6s4iA1DpT
 WG5evNjBmDL/sdD1RRaHMZqGJydHOtapEw2fiZ3eapakYK0ayqpYryAdpgIXIuMGI/HAkckYHk
 C88=
X-SBRS: 5.1
X-MesageID: 47458429
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:4aWhxa3v25HBFFW0JFs9yAqjBT5yeYIsimQD101hICG9Lfb3qy
 n+ppsmPEHP5Ar5AEtQ5OxoS5PwPU80lKQFr7X5WI3CYOCIghrQEGgP1/qB/9SkIVyFygc/79
 YgT0EdMqyJMbESt6+Ti2PUc6dC/DDEytHSuQ639QY3cegAUdAF0+4NMHf8LqQAfnggOXNWLu
 v42uN34x6bPVgHZMWyAXcIG8LZocfQqZ7gaRkaQzY69Qinl1qTmf7HOind+i1bfyJEwL8k/2
 SAuRf+/L+fv/ayzQKZ/3PP7q5RhMDqxrJ4dY+xY4kuW3fRYzSTFcBcso65zXcISSaUmRAXee
 z30lId1gJImirsly+O0EPQMkLboUkTAjfZuCGlaD3Y0JbErXsBerp8bY41SGqp12Mw+N57y6
 5FxGSfqt5eCg7Bhj3045zSWwhtjVfcmwtprQc/tQ0WbWIlUs4bkWXfxjIjLL4QWCbhrIw3Gu
 hnC8/RoP5QbFOBdnjc+m1i2salUHg/FgqPBhFqgL3Y7xFG2HRii0cIzs0WmXkNsJo7Vplf/u
 zBdqBljqtHQMMaZb90QO0BXcy0AGrQRg+kChPeHb0mLtBPB5vpke+53FwY3pDeRHU49upFpH
 2aaiIriYcbQTObNSSh5uw5zizw
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="47458429"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>, Anthony PERARD <anthony.perard@citrix.com>
Subject: [XEN PATCH] MAINTAINERS: Updating after change to tools/include/
Date: Thu, 1 Jul 2021 16:52:32 +0100
Message-ID: <20210701155232.792978-1-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

The LIBS section doesn't mention the headers associated with the
libraries, same for LIBXENLIGHT section.

They aren't any ':' in other section names, so remove it.

Fixes: 4664034cdc72 ("tools/libs: move official headers to common directory")
Fixes: f7079d7ef69f ("MAINTAINERS: add myself as tools/libs reviewer")
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 MAINTAINERS | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 8a52a03969fe..56d16e4328cf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -374,11 +374,25 @@ F:	xen/include/{kexec,kimage}.h
 F:	xen/arch/x86/machine_kexec.c
 F:	xen/arch/x86/x86_64/kexec_reloc.S
 
-LIBS:
+LIBS
 M:	Ian Jackson <iwj@xenproject.org>
 M:	Wei Liu <wl@xen.org>
 R:	Juergen Gross <jgross@suse.com>
 S:	Supported
+F:	tools/include/libxenvchan.h
+F:	tools/include/xencall.h
+F:	tools/include/xenctrl*.h
+F:	tools/include/xendevicemodel.h
+F:	tools/include/xenevtchn.h
+F:	tools/include/xenforeignmemory.h
+F:	tools/include/xengnttab.h
+F:	tools/include/xenguest.h
+F:	tools/include/xenhypfs.h
+F:	tools/include/xenstat.h
+F:	tools/include/xenstore*.h
+F:	tools/include/xenstore-compat/*.h
+F:	tools/include/xentoolcore*.h
+F:	tools/include/xentoollog.h
 F:	tools/libs/
 
 LIBXENLIGHT
@@ -386,6 +400,7 @@ M:	Ian Jackson <iwj@xenproject.org>
 M:	Wei Liu <wl@xen.org>
 M:	Anthony PERARD <anthony.perard@citrix.com>
 S:	Supported
+F:	tools/include/libxl*.h
 F:	tools/libs/light/
 F:	tools/libs/util/
 F:	tools/xl/
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 16:23:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 16:23:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148954.275305 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzTF-0003Qq-SH; Thu, 01 Jul 2021 16:23:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148954.275305; Thu, 01 Jul 2021 16:23:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzTF-0003Qj-PL; Thu, 01 Jul 2021 16:23:21 +0000
Received: by outflank-mailman (input) for mailman id 148954;
 Thu, 01 Jul 2021 16:23:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyzTD-0003Qd-S5
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 16:23:20 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id deb8d0ca-a45b-4ab6-ac30-1b552949c886;
 Thu, 01 Jul 2021 16:23:18 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61GNH7g0
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 18:23:17 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: deb8d0ca-a45b-4ab6-ac30-1b552949c886
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625156597;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=Vn+2Cg38JHefu8IRGLFILggWXxBZgWIPgtfWkr3bmLM=;
    b=IDY0PVhJXUOoCm9WsGq9/yjF/VTVf4T3uOdPDv7BA8XmrL9UNn3jbQARfHPrZeZM+j
    hYOs2SeTPGpNLdG2p1J+6514KdTXQ8vmnRnroxhzEBLuc31h4Ssw63/8UQKzTXlI9gAC
    tyCIgTs71fxdHHr0k8odhnGQKkkCUAMifi+S4BtkpSUjRW8B92sWTMPIWMqbQz9fC9aA
    Asiqjla9ZgLBwBnrao6osi+NmSpLx4OmWFXDwIxA0GjVZWyvd+0ZNlyfKsFICezZjgJW
    2oXRxFXtBWAgDaIt8k+K/h4TE/4c9yxfO4Cntn5QAtD0NE81AFIkf2m02CBkmvTGTg8k
    YbDg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 18:23:03 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701182303.53756e1e.olaf@aepfle.de>
In-Reply-To: <dc9af473-b613-721c-87b8-d259a2448c09@citrix.com>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
	<20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
	<20210701170009.5a8be33f.olaf@aepfle.de>
	<48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
	<20210701171819.67968d4d.olaf@aepfle.de>
	<dc9af473-b613-721c-87b8-d259a2448c09@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/ZX8F8fCP.bKboWIEMyMZzaB";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/ZX8F8fCP.bKboWIEMyMZzaB
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 16:25:10 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 p->extd.max_leaf =3D min(p->e=
xtd.max_leaf, 0x1cu);
> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 p->extd.max_leaf =3D 0x800000=
00 | min(p->extd.max_leaf & 0xffff,
> 0x1cu);

Yes, this fixes it for me. Thanks.

Olaf

--Sig_/ZX8F8fCP.bKboWIEMyMZzaB
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd6+cACgkQ86SN7mm1
DoBVgg/8C3Qwwaw/1t1Suul1ZLu8HXZ44bMfBfQjLkLWuo9+Gp/ixpMVrKUxGerL
g13cBrMpUiByf4C1TMn4s/SWNBUKcrnF8GlMwQCQXe0eSjxTGYVTMU51x+wTLUXm
I6YXzUdEo+yrJDdrFWcd7mWP3o69qfMTnnmMcjHsVStDTXrtjOxutGMPjwi1eu/Z
21mcH7OjMUeZlxr+g/msYwFWPOHROw7Uj/eD0HubGYKx+VGwpzc2poHcz9NKTZ9F
5rPsGhf35oEzhZWMkvN7XxdwG1RrP0ZP+F/WQ2UkGEQ8pVH8KLHykRpw3I8eLjhP
X514TVcOu4nJvONmbGVeMvMutGAPygoEuuBkYdO/VzlEe55impmaxXo1RYh18PZ1
Yo9x7X/TFwwG4B1n4axBL7A1twR35OklbIdLpsnhbR+FSWJFTx4PfIX0+qCVHyMg
ZxtWbz4o7Li5JO2AeRq0X9B2yY1AiV7Ewul+iO5mpTQlPAHOni4fZxm/WTaTC4VS
wnhJ3dwe4K4iOuWaQuRuWlRO/FK0cq/GRJ2ReVzuXrto8+WgFJ2GtaN3BCTdyp5Q
hA9vzqnKtIVhJAKkIiBN1HWCrqM5p2rCCM04Zu4jONq8/kPSBZHDHNy0hVrMqh7c
oRULMLBTMyeK2eN8YLY1UD2JzbYKlDp+EzJU7BP3rVOIzkPaOD0=
=lpa2
-----END PGP SIGNATURE-----

--Sig_/ZX8F8fCP.bKboWIEMyMZzaB--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 16:28:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 16:28:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148959.275316 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzYN-00046i-Fb; Thu, 01 Jul 2021 16:28:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148959.275316; Thu, 01 Jul 2021 16:28:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzYN-00046b-CX; Thu, 01 Jul 2021 16:28:39 +0000
Received: by outflank-mailman (input) for mailman id 148959;
 Thu, 01 Jul 2021 16:28:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xRek=LZ=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lyzYM-00046V-FC
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 16:28:38 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 62ce21de-da89-11eb-834a-12813bfff9fa;
 Thu, 01 Jul 2021 16:28:37 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 62ce21de-da89-11eb-834a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625156917;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=dO6qQWqwyorMYGU7047AcVjW2mxs/SQxbE8+jVjUZWI=;
  b=ByXBlmBNYdB9ugbnI9INh6mDIL1OLa/LFpn8mpNx8+Vo/HRjlfGGDoQJ
   glfKYX4vNFNaQ01ARDK3ELxW9/KW4AJ8HQiKYN85UgmeAb0l1GwXIR6f1
   FJTHC1G5dA4odyM++AWdXMFQeQehoBf3CCuuTVtUIHTfIWEgahfRZG8gD
   c=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: MckqqaUWzpl+kSosY7VrEv+yDz6/amnJt6NQWllmdDNpuc6Qufdef20kgUP/pgXanXQ5Dr9iOC
 WgFtWMM9PADZkplQBx0tISiwVXezP2XwF8x1mcAwu3remqrwnydUab4hk/8Hsz2eI6DgW061yo
 d9cJawgrxeZJBqTroxi60bnVkfXHkuWaLmEQ5X07NZu1cbX6kocr+HZ2d1ztswa6n45NpgHE8/
 CLyaH31pb/qG6Z3Z6Qig3D5ZoumS+JbMH2xRMBD0/HkKPQy/fkFpuolRHE2OMGkMALgpPZEGWw
 6sU=
X-SBRS: 5.1
X-MesageID: 49024238
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:2pcpYahlRlYpNpddzo9X7mGYM3BQXh4ji2hC6mlwRA09TyX5ra
 2TdZUgpHrJYVMqMk3I9uruBEDtex3hHP1OkOss1NWZPDUO0VHARO1fBOPZqAEIcBeOldK1u5
 0AT0B/YueAd2STj6zBkXSF+wBL+qj6zEiq792usEuEVWtRGsVdB58SMHfiLqVxLjM2YqYRJd
 6nyedsgSGvQngTZtTTPAh/YwCSz+e78q4PeHQ9dmca1DU=
X-IronPort-AV: E=Sophos;i="5.83,314,1616472000"; 
   d="scan'208";a="49024238"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=RWYt9vbgBRREqjxjyp+x0YJS4vbOmDFc9i8uaZjaCW8DtGVtgqxREsU4aDQ62X2/ZUPfo99iFViS1v+QwUw+H3TI84PDM2NTAwSIgn+JIJUyc6eFd1Z38BRr8BwsmQksJ2sXQynnlB91zW4CLLDBoRJW/MQvnkGtVdY8+BQcGYj36OlWRCNcfMOx4kvGFQ0TGspRI6EfP6FGztUzKw6APSXQh5VOmQQ2WQLMxzLu/QhsPF2GL3CNOdyYAIGf/9q2fBxKCleoc0tSrZriO4QuONfcuVij8SJjBs0brwlJRsl03ETh0WZ6MqLwjAnZdZfUDhsgCCgunkgAqWNkjjoEGQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dO6qQWqwyorMYGU7047AcVjW2mxs/SQxbE8+jVjUZWI=;
 b=l+kcMhYMgSxzE5imh4hLEOk8L+0dLrhfjnxXV35+sdB9Mtt/HwDaS8RtTdD3W2jtAJ7zzjGjyCULAeDAg8ZE41CNsRMQfDP3jvBSQQrBRvP2NLnsvCA4RnG5DZ3kK1/TleoTpbuLmfMSdbi61XclX2bMv+Xo4OcGZuePVQypZMzOdRJFhkGEegwkars8Kyv/lw9ovzZi3nNLBo301ViqUCYf8166Vt7PtmA2MXAHxKwsxP7z82+va8xLDrhib13BcKahKeIIUydZ+ZwSUhECUDbOJmw0lm7OGBLWeffj5oqOAKKosMhI3Mn73qvRSDgChgZO9iaX9Qky/k6fErJ9GQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dO6qQWqwyorMYGU7047AcVjW2mxs/SQxbE8+jVjUZWI=;
 b=gWgkisaODfoSLdV4kbIjfj1gT2anbeFdrIFXpnqR4XXqdrLvPmDiKzN7vQK8+TNBJw/qF9yM0HhUfQsY4Jc8QwSqKqOFHrH8DM8lnLlxhno24enU3HVZeo49Re0hXsxN1H0uM8hoq30KEP3qbTaXXcEn/KHOKlmzwzb37EV/WvU=
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
 <20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
 <20210701170009.5a8be33f.olaf@aepfle.de>
 <48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
 <20210701171819.67968d4d.olaf@aepfle.de>
 <dc9af473-b613-721c-87b8-d259a2448c09@citrix.com>
 <20210701182303.53756e1e.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <967b6463-c1bd-6ced-bec6-bafe02310e09@citrix.com>
Date: Thu, 1 Jul 2021 17:28:25 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701182303.53756e1e.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0003.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:62::15) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 67977f58-f8b5-4ba1-ddf0-08d93cad439f
X-MS-TrafficTypeDiagnostic: BYAPR03MB4120:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4120EC256EFBF4CB108345D7BA009@BYAPR03MB4120.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 0/1fXh+xcW1tXou7PzziEIAPwxnucCpJ9HvcQfCu2lg8XFuR5LmUvTHv7LJ45HvW2DcUuP7rYCkTiqxhfCGfsr4Msz8C89TjdDihZEg+pyp1uUdHKDAJXRU8iXYmPXtbcnuj22PFm/u/ORW0Af1GEJZFszzPrl6ibpWmjqAMGUNcOxxIm8/1O/HhJDzMlUjX5AfOPXdzOSy3tv+t3JpNGNFVtCy/N68QA58OvK7nyDDCrsJ0zD0FU58LUIPff9V237Q0PKLxS1VGRN2hnfpbkdQRvagB9adFpPk7GzcIjGMVrlcxTGCRvGY7dwstLcEU2z8ZsbVTQqY2VRfnF6mmLDCxH+SJ925nzzRhFa4gFfsSDjI5Hu2B+Ya5PovWAPsyF/psyikjLM8FT+n8+vIxgARZ909iSywskHqnxztSkEDbM2lRhvLFqGVfKJxROUhLvIJQgRQHEnB6SCnNXQU54I4HkKwKt48frhOjpY1ZyocIUsbtkmipGMh6HQYRu3HzDhBLlIOT07YtIWkXJI9wBqRcS4ZOmjr8uQEOcXcekGaV1pzatEqj+MKiGWRPFKspIhP9z0mIH8lNm9ZPjBlbrkUTiDYWNQhNSh9eFVwq5E6CvJBei40Uhohr4YtFWmHNl7Y4+hZEfqs9iocXbckfjsw1WtHxQO8vWEBFRJAqPLbOM1hPG9XyRgERTaQHEauf0G2ytIeQwAcXW+oGSrTx+RMli+UJAuTJMi1T8VwvGFfivt52ZJIsAn9VZYx9ON12
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(66946007)(66556008)(66476007)(8936002)(2616005)(956004)(6916009)(5660300002)(4744005)(16576012)(86362001)(4326008)(186003)(2906002)(16526019)(53546011)(498600001)(36756003)(38100700002)(6486002)(31686004)(31696002)(6666004)(8676002)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UzIvTXp3L3ZFam5Mc1F4WUVkUHF5RnFtTXRWVFBob0wxTDBqWTNDMHlRK2hO?=
 =?utf-8?B?T25lOENzcGtMVjg2d3B0QmhKeWRFbktJSEVzOTJHOWNYbnBlZXVpTTJDeXBC?=
 =?utf-8?B?ZHlNTnVwU0xNNTl2Ni9VMG1yREdIZGJUcTdPMG8rV2FDelJvQWN4Q2x3L0pa?=
 =?utf-8?B?N2pMRm9VdW9WR1J5aGc2YTJMZEVKRmNmeG5jWDY3VmVrOWNDbEpPeWtMYlZo?=
 =?utf-8?B?TXc2QTY0ckdSeTVzSjJuRUFtU1RrNGJvaWpKV0czUWRiYkRha1ZzZmtYbmlm?=
 =?utf-8?B?M0RPb2s4S05tR3MxVnlhV3B3MEUvMWZxeFpUOXA2YnB3NmpkN0RKSnVIbzh2?=
 =?utf-8?B?RWhyTkVUakNvQWpvaFF4NXFIL1FyQ1M1WVNaaFJZM2lsN290NGwxdmlndmlT?=
 =?utf-8?B?c0Rya2hsN1JUY21NSXJFb2J3YkdMUE1OY0FRMXA4U0JZK3dCZ1JaUzUrSEUy?=
 =?utf-8?B?Y3FFQzB5anh5WHJzdm5uY083STgzdHZYbnJ5NUlISVBodlYwdTRTVDl2SGZr?=
 =?utf-8?B?c0NvRVlmZ3NyTnRBSFp4VTZZYk1ydC9MSkhydGpNR05QdDFxMkdPM1NRS0Y3?=
 =?utf-8?B?dDRST3RzVjZDUXFDRnhBQVlaQTFsUWZsWFA2S1NQbkxKeU1DM2UxL3ZwSmkz?=
 =?utf-8?B?OGtFR2l4Q2VCYWZ6cy9paENIdlNjQnQ0UExpSFZmeU4zV2tteXdlT1pVN0d6?=
 =?utf-8?B?U21TYThUcTBUSXdsRStxVWhNeFZpa09XTm8rSlUrZGpWa0NUczdudlo3TmJQ?=
 =?utf-8?B?eHQvU01lUjRxOUV2S0FPMEpDdndxTCtjdU5VYWE5bDRzakd5K2tUbHc2MHYr?=
 =?utf-8?B?R3RnN05OQ0lDM3VJMXNCVVhSZGVLSUNRRUhlRGpRVk9nMWt4MVhqa0lXbWtP?=
 =?utf-8?B?TVNMZG5kS003TDVDcUJ3WVJDRmt3ckp2K3ZLZlloaGo4YzlHbmVLN29oN091?=
 =?utf-8?B?dHJwY0FwdlhKamlkM2FlTWFkbTBwSDlRTnFoZTB0RHBVMW5GNGU5WW9HWSta?=
 =?utf-8?B?Yk80bTMvbmFNaUlQR2ZjS2VLS0hvbEZXUXgvaXhiRjJrbkszWG5YSnhsb3pu?=
 =?utf-8?B?dVVlNHdUcE15OE9YSzRsZWE4VVpzUG5oWDRQYWtDRmttY2lYODVxVHI2aUU1?=
 =?utf-8?B?ZzcwcVhWRXZVTmsxUGpaME5oRWxOaVFwZTJlMjNmeHp1d1BjeFRuM2hMOGRX?=
 =?utf-8?B?U0J3clFoT2tMRFV4SWxQY3BYWUZYeUlYZ201MWpWZFQ0RjArV3Nmc3A2S0Ns?=
 =?utf-8?B?Q2pnNWpJeVdTVHYvY1VmcVBoTjlDanFHT1V2eHBYdXp6SEVxdWFadmhaMEFD?=
 =?utf-8?B?VXN4bVRMVTJUb2F1SnZjenphK3ZsaHJ4NVNTdEFsZUwvRGNtdmFjM0JzSkIv?=
 =?utf-8?B?bDJjU29MeXF2bnM2TzVjQnRaOTd1Mk9ST2lZMUVuS3dvd2JlOFdOMzZSUzNT?=
 =?utf-8?B?dlUvRUN0UFdaSjVEYmJHZ0ZhWlRRZFpMOWJMZmg0Z0Y2bXJNR0hhKzRZSzdz?=
 =?utf-8?B?bUFHMmVzblBTMGozbUJYOGZOam4zMnhOVDloRVFZRGpGenplNUdaazB1VFdM?=
 =?utf-8?B?OE02RUhWWU12bFlyOXN4RmpmSXZwdFJKVmxhODErTkthemFhZTEyZVMweFN3?=
 =?utf-8?B?YzB4cEZPVUpkTXY2TFJIWjBRVzVMaUwrU25UczJmU2hQU0dTMU84bFcvQjFB?=
 =?utf-8?B?OFlFV0d2NC9wSC84N0UrZ2FPbFVxdjNaOXZGQi9YSUxNYnhhcStyU1hpOThx?=
 =?utf-8?Q?P+EbFUf6T4B9TPL3OK+FYihcwPg1Ol8abypPe0f?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 67977f58-f8b5-4ba1-ddf0-08d93cad439f
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2021 16:28:31.2554
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: DjmYlwwnhZeREY6qVlXUqKbxtCqh5HqbRKSpAzLwLOs/LyGhIHFn5NiCHX25T1ecjUE45ErMPm6p4as3W8LI7xlV1PfNVESeJllMzHrPhHM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4120
X-OriginatorOrg: citrix.com

On 01/07/2021 17:23, Olaf Hering wrote:
> Am Thu, 1 Jul 2021 16:25:10 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> -        p->extd.max_leaf = min(p->extd.max_leaf, 0x1cu);
>> +        p->extd.max_leaf = 0x80000000 | min(p->extd.max_leaf & 0xffff,
>> 0x1cu);
> Yes, this fixes it for me. Thanks.

Fantastic.  I'll try and do a proper patch in due course.

On further thought, I think I'm going to go with the slightly simpler

p->extd.max_leaf = min(p->extd.max_leaf, 0x8000001c);

This is a policy obtained directly from Xen, which means it is running
on a 64bit capable system, which means that 0x80000008 is the lowest
number which can possibly exist in extd.max_leaf.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 16:32:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 16:32:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148964.275327 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzcB-0005TB-0e; Thu, 01 Jul 2021 16:32:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148964.275327; Thu, 01 Jul 2021 16:32:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzcA-0005T4-Ti; Thu, 01 Jul 2021 16:32:34 +0000
Received: by outflank-mailman (input) for mailman id 148964;
 Thu, 01 Jul 2021 16:32:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lyzcA-0005Sy-5W
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 16:32:34 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.20])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e8da98a7-81f9-4a80-86bd-e6db86daf426;
 Thu, 01 Jul 2021 16:32:33 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61GWV7iX
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 18:32:31 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e8da98a7-81f9-4a80-86bd-e6db86daf426
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625157152;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=SZ8Fozes6rdvs8EE03cNo6FUdtEDZhZS+j9Mr6fLabc=;
    b=M3+6Dnu+8a/OcGv7v7viNn4SWJhYeTg3dC6RZk0YWFvR3V+yE41+hjZmivdl3SYuf0
    NEExnm2XaMpEhcfuo+/EGLIIRiNJ5U6PZytg05CfCsZx1JpKYENTPxWN1hbYDNs6UBiV
    zLkZSndErpXicfyH1LmjbB0OpMYy/VzQOcNcp7hIBcSKvXmzrNW0nCDe7ni9bt+MdYDJ
    PJSxfXR3M6lUfEAjHRjFrE6Gjp/7XKMP4CGHwbD440CBxrPeNNvSmVXvlHFoMF7vAjVV
    ytqod8O8jqFDJlxl0t9LIlxlShogKY/HVxKvtY1f/04pcyoDfhPAhLdBie90pXfVjvi1
    I1/w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 18:32:28 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>
Subject: Re: XEN_SYSCTL_cpu_policy_hvm_default truncates leaf count
Message-ID: <20210701183228.1f8fce35.olaf@aepfle.de>
In-Reply-To: <967b6463-c1bd-6ced-bec6-bafe02310e09@citrix.com>
References: <20210701125623.593fe3ae.olaf@aepfle.de>
	<20e828c9-e7dc-4401-9307-a6d72eb618d8@citrix.com>
	<20210701170009.5a8be33f.olaf@aepfle.de>
	<48cfe27b-70fe-36aa-833a-7d78e205528c@citrix.com>
	<20210701171819.67968d4d.olaf@aepfle.de>
	<dc9af473-b613-721c-87b8-d259a2448c09@citrix.com>
	<20210701182303.53756e1e.olaf@aepfle.de>
	<967b6463-c1bd-6ced-bec6-bafe02310e09@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/Ty1JdHR.1N6X/Iy9fAyrNi2";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/Ty1JdHR.1N6X/Iy9fAyrNi2
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 17:28:25 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> 0x8000001c

Dues this need to be tagged as unsigned with a trailing U?

Olaf

--Sig_/Ty1JdHR.1N6X/Iy9fAyrNi2
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd7hwACgkQ86SN7mm1
DoCzXhAAjFSj9QS1/D0i46vC6isNk/+CkpqcQAgOLlmDgdOxF4EFjufGKXNkKixx
XN/ErlxqOK0uyrKFVH58QLJAOIDSdy593WELqc9tu3o3oYxAoyBSFFxol3EORJqr
e9iA7Tp2a+4dVmQ3iRXw6s5Zapo4r/G/pKoTapWW/lpH1aG02GwBO+p088T88eTp
bkaaaaK+8rKO1la1dPgRqIjhhpXS3o3kCVhEM6tAlbw9VREXQP8ubZ0Larigyn5W
TdEJwPrJrBsKqgITfUrY831a/4X/ceqimTe/ZSseY/MA2Py5uWpFJ/GSzFAm4aI/
KxEW3fWY2TIk1eki3SqWDy3e+lsaS+k1A0ut0cVr38gy7LBCaZ80PC2Hvcur/vqW
Zizsgu/uV3jwwwc0HFhi6Ukn0/7lZPK4NHtDewsDyzsHjEQUqTLIug7ioYG14a66
RuXdWL/NpIrEID2KNlLjY6isvthW9BAzHUSmwA5rW6pquDjj1ULm43k3Z6c684fP
UtFeNmR93iAar4Wn2650hCTpuiKAuruZZw1lNoL+51E3YTGzPQORBw/xyhOPLhNc
x9p3e0GFcl2yTpwzHvKYyCkSLI5zWTfFbvTrCMjs9TfOTVP4Kb7/sDPsdYkpYM4C
77PXaGR5elYEeFsfS9zlCllITofCNUZLcJvd3SmD0BV1W5sbEdc=
=+Aaz
-----END PGP SIGNATURE-----

--Sig_/Ty1JdHR.1N6X/Iy9fAyrNi2--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 16:45:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 16:45:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148969.275337 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzoa-0006uj-6l; Thu, 01 Jul 2021 16:45:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148969.275337; Thu, 01 Jul 2021 16:45:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lyzoa-0006uc-3o; Thu, 01 Jul 2021 16:45:24 +0000
Received: by outflank-mailman (input) for mailman id 148969;
 Thu, 01 Jul 2021 16:45:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=vXwC=LZ=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lyzoY-0006uW-Rl
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 16:45:22 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b923b309-da8b-11eb-834c-12813bfff9fa;
 Thu, 01 Jul 2021 16:45:21 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b923b309-da8b-11eb-834c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625157921;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=ZwU/kaaaYYYQFi6JKPF0BJjEhDRHt0Zz/RNYp0r6Jw4=;
  b=YwxXfbr4QKaHgKvWV9a4TuXqesXWmEwPPdSrTIsweFH9oBxbrNWAB8iZ
   nth7dk2pkLB/VXOvP9+FJphs1EYLJLJDhSYD0pKPJYH7j5m8B6tlHJhA3
   XulpaWJpp2AQIBPcqvCcTdGSVa/NJwEUIzbfCnhD3G2XEMQNoU8MEHOnC
   s=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: x4UbEOTOCt/EN0W4ahuZCEizoyTjrBKdA67OJj+ehW6gThDWBnpdpnhgEZlyEAXZs/emnv/DO3
 DRLVm7WxKM/FIJVxmH12g+onW/f6oty6E+fEpPBaTe2om5Xr1b13vbykLIMydZtGSXmCGeFUnS
 Mba8I6R63TF0qEdQj9A0D1cxV7h8PsxLeGYceIy3uf8K8dtwyqbiDqStVBscctlYQ2T5K0ZZos
 MJdh4BwKQ8/rAXFj3cSs4n8NOqLnu5fZGbDv8yVo9JRiIaBwiiDOM6vjuMkhMIcr2mwr7wgYH/
 TIo=
X-SBRS: 5.1
X-MesageID: 47392510
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:c5dWiakvNne2PxP/O1u4kVnY4nDpDfMqiWdD5ihNYBxZY6Wkfp
 +V8cjzhCWftN9OYhodcIi7SdO9qXO1z+8X3WBjB8beYOCGghrrEGgG1+ffKlLbakvDH4JmtJ
 uINpIOc+EYbmIKyPoSgjPIaurIqePvmM/HuQ6d9QYUcehEUdAG0+4TMHf4LqQCfngjOXNPLu
 v42iMonVqdUEVSSv7+KmgOXuDFqdGOvonhewQ6Cxku7xTLpS+06ZbheiLomSs2Yndq+/MP4G
 LFmwv26uGIqPeg0CLR0GfV8tB/hMbh8N1eH8aB4/JlbAkEyzzYPbiJaYfy5wzdk9vfsmrCV+
 O8/ivICv4Ds085uFvF/ScFlTOQjwrGoEWStWNwyUGT3vARAghKT/apzLgpDCfx+g4uuspx37
 lM2H/cv51LDQnYlCC4/NTQUQp2/3DE4EYKgKoWgRVkIMIjQa4UqYJa9F5JGJ0AGC789ekcYa
 JTJdCZ4PgTa1+ccnvI+mJm2tPEZAV6Iv6qeDlMhiWu6UkZoJm59Tpv+OUP2nMbsJ4tQZhN4O
 rJdqxuibFVV8cTKaZwHv0IT8e7AnHEBUukChPQHX33UKUcf37doZ/+57s4oOmsZZwT1ZM33J
 DMSklRu2I+c1/nTceOwJpI+BbQR3jVZ0Ws9il0j6IJy4EUhICbfRGrWRQriY+tsv8fCsrUV7
 KoOZpMD/LmJWvqEoBZmxb5R4RTLncXXsETp5IjQFSFrtjQJoCCjJ2uTB/3HsubLd8JYBKMPp
 IzZkm/GCwb1DHZZpbRummlZ5rCQD2OwbtgVLPX5u4J1cwHPpdC9g4IlF+++saHQAcy+JALQA
 ==
X-IronPort-AV: E=Sophos;i="5.83,315,1616472000"; 
   d="scan'208";a="47392510"
Date: Thu, 1 Jul 2021 17:45:12 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 33/40] tools: change struct precopy_stats to
 precopy_stats_t
Message-ID: <YN3xGNq2vkTXqwZv@perard>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-34-olaf@aepfle.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210701095635.15648-34-olaf@aepfle.de>

On Thu, Jul 01, 2021 at 11:56:28AM +0200, Olaf Hering wrote:
> This will help libxl_save_msgs_gen.pl to copy the struct as a region of memory.
> 
> No change in behavior intented.
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>  tools/include/xensaverestore.h  | 7 +++----
>  tools/libs/saverestore/common.h | 2 +-
>  tools/libs/saverestore/save.c   | 6 +++---
>  3 files changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/include/xensaverestore.h b/tools/include/xensaverestore.h
> index 0410f0469e..dca0134605 100644
> --- a/tools/include/xensaverestore.h
> +++ b/tools/include/xensaverestore.h
> @@ -23,18 +23,17 @@
>  #define XCFLAGS_DEBUG     (1 << 1)
>  
>  /* For save's precopy_policy(). */
> -struct precopy_stats

I don't think changing the existing API is a good idea. It's probably ok
to add a typedef. But can't libxl_save_msgs_gen.pl been able to deal with
thing like 'struct precopy_stats' ? It seems to be able to deal with
'unsigned long'.

> -{
> +typedef struct {
>      unsigned int iteration;
>      unsigned long total_written;
>      long dirty_count; /* -1 if unknown */
> -};
> +} precopy_stats_t;
>  

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:08:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:08:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148975.275349 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0BE-0000tM-86; Thu, 01 Jul 2021 17:08:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148975.275349; Thu, 01 Jul 2021 17:08:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0BE-0000t9-4u; Thu, 01 Jul 2021 17:08:48 +0000
Received: by outflank-mailman (input) for mailman id 148975;
 Thu, 01 Jul 2021 17:08:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lvjd=LZ=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1lz0BC-0000t1-CU
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:08:46 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fde8654e-da8e-11eb-8351-12813bfff9fa;
 Thu, 01 Jul 2021 17:08:45 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx61H8c7rD
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 1 Jul 2021 19:08:38 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fde8654e-da8e-11eb-8351-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625159318;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=LIhm0s7MYVUQghllSXbu6oUayBlInZOsy10OIdm7s0I=;
    b=SBrVmwUHsTuXkXkTY5WYeyyCWBhZ0q2qkZ0N5BDgJU+LyTvI3Vp064+97g2hk8UivV
    8/qu/Yx4VPUElj4Gyw54CjjBt3n9d4W+1GRYqedrWDZuDgBpV/SBIVGX57Eq1Svs9TY7
    Z0ru3kIjPLgmD23Ua3YsCA7lEZAWcS5msXfbSyGDjKuJOtqoTVCb+z4s5u/EdMyY5xmj
    gMAa7OUDfl8dn3vur7+rX2CaJBn0Dq5LGOwRVcWDYSM/GN7yvguurUhCN/FKuOZYt7pj
    47/e1dCNh6Qq8z4iO9sJarz3uLMYA+slNn40QN0cRjf5QQ+/FIgMozs8CUvuC78sCgX1
    78pg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsBBSIa03sY9BUY2ao0oygRsMfcqA6zjDLeeWXNg=="
X-RZG-CLASS-ID: mo00
Date: Thu, 1 Jul 2021 19:08:31 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 33/40] tools: change struct precopy_stats to
 precopy_stats_t
Message-ID: <20210701190831.4bee9632.olaf@aepfle.de>
In-Reply-To: <YN3xGNq2vkTXqwZv@perard>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-34-olaf@aepfle.de>
	<YN3xGNq2vkTXqwZv@perard>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/3dctEgGIi/JgQQnvlhc7Xxj";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/3dctEgGIi/JgQQnvlhc7Xxj
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 1 Jul 2021 17:45:12 +0100
schrieb Anthony PERARD <anthony.perard@citrix.com>:

> But can't libxl_save_msgs_gen.pl been able to deal with
> thing like 'struct precopy_stats' ? It seems to be able to deal with
> 'unsigned long'.

Yes, this is apparently possible.
I have to check why I thought it was required to turn this into a typedef.
Right now I do not see the reason in the code comments.

Olaf

--Sig_/3dctEgGIi/JgQQnvlhc7Xxj
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDd9o8ACgkQ86SN7mm1
DoBmFw/7BEB4hxB/i2Pgr7FCI7N41L0qjTC5QwSjJhbD3xC5GxULbccTqGUlGlqw
zrCXcgMLeauNYQ33EUWLU5q7GqlhIvnK0hTpjJAIdw8AWXINTog0CqQIfYTvPGxR
y0wqdUkePVmAugyMy7/zPm6lYTKTrgbcVLgS5nhuSwNW46DXjXJV2Ox0d33wygo6
ThV9Gey/IuIB3wtt9dbJoDr1URWaP+pWX9PTQt4/m1bVdEiYWdO9IBbbQXzbZsa4
xwrgjlplR2uW16CLez4+++T698WkK6nr1wcCqIoNF8Tyx+dZbzdBhNh+qyFofBQ3
3YyPwlP0Do0bEVw0Kyy7CH19gi2th/RBUlJ3JGsNGYN9ip4hOQR9vDCG+TEA9rNs
6Z7/NPySd0HPUQZ4SqVxGJAFWeYpxId6rzgUMI++heE6t0Xb9n04Dxa1AD0FoK7B
nmTX5/2TlmTJGu9e7viVabvplRfaXRWRg14txM2Mqc8JvFXjyWGH6kJFpCA3ArrE
YolOAuoY8cpXbSQpNIkASx2//Am3XXx1RawZUBsJKrlMcRyhLWohmOt+YAwJEZ8e
ZcM41hFjabbSZJxFk+87CDjVMP9l/fZa1ITotgIRQ8NhVCpGYEJ1Pt9wVWIH1rOA
h/KjyFDxkHT7rtEGTGBNBnx4V1XQvfMMp11mGMggbTTBgo04B2U=
=EGPx
-----END PGP SIGNATURE-----

--Sig_/3dctEgGIi/JgQQnvlhc7Xxj--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:25:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:25:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148981.275370 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0Qn-0003MJ-Tq; Thu, 01 Jul 2021 17:24:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148981.275370; Thu, 01 Jul 2021 17:24:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0Qn-0003MC-QT; Thu, 01 Jul 2021 17:24:53 +0000
Received: by outflank-mailman (input) for mailman id 148981;
 Thu, 01 Jul 2021 17:24:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=30oQ=LZ=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1lz0Qm-00035P-HO
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:24:52 +0000
Received: from mail-wm1-x335.google.com (unknown [2a00:1450:4864:20::335])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f0c10b64-d8a7-4662-9e9f-01bc1a1ab55f;
 Thu, 01 Jul 2021 17:24:47 +0000 (UTC)
Received: by mail-wm1-x335.google.com with SMTP id
 a5-20020a7bc1c50000b02901e3bbe0939bso4633198wmj.0
 for <xen-devel@lists.xenproject.org>; Thu, 01 Jul 2021 10:24:47 -0700 (PDT)
Received: from ?IPv6:2a00:23c5:5785:9a01:dd08:98e8:6495:64d2?
 ([2a00:23c5:5785:9a01:dd08:98e8:6495:64d2])
 by smtp.gmail.com with ESMTPSA id o3sm613049wrw.56.2021.07.01.10.24.45
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 01 Jul 2021 10:24:46 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f0c10b64-d8a7-4662-9e9f-01bc1a1ab55f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=bM636ttOBoWSgPMiqkDWtkSD1pigvPw7drXBJk2dQSo=;
        b=CoYAhA25qZuZPHQ03Z3conMZVB/j7nIxyTpV8KAfawMUJcGMdM2D6rJgltGNtKQtg3
         Nudzew74AD9NWYs5euIQatfkbrD1P4ZdJjFelHclGcN6HD3itT3LzuUtdyI5or17Oo7M
         WOUnlUWG/ix7ZxEk5RQEhWxPd3PohJpGrM8dCRCE0kRF9k9+3TIRA2GvzpzEvq8VQDPQ
         T451NjlwgFDG9QX0dEdb8WYHkyX5VCmgKvqvNrT1Rtao2bMxOwJbCCp5I0fdTnhcaPfT
         kjBvboXlWxoajNEUbdErN9UHqMlPBQkpBPDF6sD4icsJsGehTGjCNkjZM0M3c+XVFMZJ
         42MQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=bM636ttOBoWSgPMiqkDWtkSD1pigvPw7drXBJk2dQSo=;
        b=aVL0R1xjxMBrmyytx5EVVaG3msTUmXci+BHL8FMXRp1BpsSyag6I7XJMVPAlzXazF2
         9SBIwA8sx2h1qmNX8ooYYW772t4BMvcBGTHGL348xUJOzjdhxfCb8l/sGXoHh5hZT33L
         D7oksgxvcCyIIn6Zk+VUhxKHxwhudWtyK4jS3eDzEiHDLb5Z7JVrlFx1YHcCnEqhwgrP
         uYmTNwF5LX7OYiRuW23p1FdD4L0nfhRgtxiSmNsJkxHMwFwjMyahF4I4JWKYDV95aa8Y
         bHIqEfEBDuTs4+Ex3lC1hbTCirNJjHH2rBIdF1imI/Z0GCibsXMDHFFL/HvggfKlj8tq
         j1EA==
X-Gm-Message-State: AOAM530MF92Lcr8CrX23LbXYcS23FvsTvjs2k6zZTnmkGZqvBy4eI7F3
	LYeT5LKceJ/6A2yk18LRPno=
X-Google-Smtp-Source: ABdhPJzR73BRmIIfFijATpWTS27jawGoNo9rHaVB8ejaBTxpMp3GuQyBgjKXZ0J3VDzp6rMyNUNe3Q==
X-Received: by 2002:a05:600c:5112:: with SMTP id o18mr797431wms.15.1625160287101;
        Thu, 01 Jul 2021 10:24:47 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: [XEN PATCH v6 18/31] xen: move include/asm-* to
 include/arch-*/asm
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 Ross Lagerwall <ross.lagerwall@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 Lukasz Hawrylko <lukasz.hawrylko@linux.intel.com>,
 Bob Eshleman <bobbyeshleman@gmail.com>,
 Alistair Francis <alistair.francis@wdc.com>,
 Connor Davis <connojdavis@gmail.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-19-anthony.perard@citrix.com>
Message-ID: <bf148f2b-8256-0be0-0ad1-91e1f7b05482@xen.org>
Date: Thu, 1 Jul 2021 18:24:45 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210701141011.785641-19-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 01/07/2021 15:09, Anthony PERARD wrote:
> This avoid the need to create the symbolic link "include/asm".
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Paul Durrant <paul@xen.org>


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:25:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:25:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148980.275360 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0Qi-00035c-LX; Thu, 01 Jul 2021 17:24:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148980.275360; Thu, 01 Jul 2021 17:24:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0Qi-00035V-Hx; Thu, 01 Jul 2021 17:24:48 +0000
Received: by outflank-mailman (input) for mailman id 148980;
 Thu, 01 Jul 2021 17:24:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uD8v=LZ=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lz0Qh-00035P-OC
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:24:47 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 37b6940f-3c0c-4c7d-a8fa-60a10fc43cf1;
 Thu, 01 Jul 2021 17:24:47 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0107661406;
 Thu,  1 Jul 2021 17:24:45 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 37b6940f-3c0c-4c7d-a8fa-60a10fc43cf1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625160286;
	bh=9C0/uCMUMnP6PwBqwBxTxBmKbrPiPpORig3xR+otpIo=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=IumK+bakb+BzvaRbTIy5m7Pe4tOdjTxdUWEDtnrq1aMz8LD55FX+Dcm4/b5qq/ZhF
	 GxddFJuuRmQIW5u4kGskSa5tfPaiFbeM3MJ8dUtmp1+WTk5PiPiSLNQX7SYr0VdoVW
	 DBCF3/871//LY+dXsvQ94HRNH0iCDCBJx5vIPUKFSBSXez2VIEZRMRwsdxc5vX20AA
	 0SFrLwatHHhKN0BBeJf+WB/yi8OdYJM6Q/1WegZ20t4tXo835Wyn3I4CRMxL+0Qncs
	 OShgkVl+gklNCRXx7RnryhEIDXPdw4I2qAlDqmAKf66BdIJSXzOcmC44XGIrBk3y8B
	 0XQC+D99s2LUQ==
Date: Thu, 1 Jul 2021 10:24:45 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, 
    Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, 
    Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 8/9] docs: hypercalls sphinx skeleton for generated
 html
In-Reply-To: <D2BAA7F7-4396-4EE7-977B-AE300A50589D@arm.com>
Message-ID: <alpine.DEB.2.21.2107011024220.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-9-luca.fancellu@arm.com> <alpine.DEB.2.21.2106231523210.24906@sstabellini-ThinkPad-T480s> <D2BAA7F7-4396-4EE7-977B-AE300A50589D@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Thu, 1 Jul 2021, Luca Fancellu wrote:
> > On 24 Jun 2021, at 00:34, Stefano Stabellini <sstabellini@kernel.org> wrote:
> > 
> > On Mon, 10 May 2021, Luca Fancellu wrote:
> >> Create a skeleton for the documentation about hypercalls
> >> 
> >> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> >> ---
> >> v6 changes:
> >> - Now every platform has the same sections in .rst files
> >> ---
> >> .gitignore                             |  1 +
> >> docs/Makefile                          |  4 ++++
> >> docs/hypercall-interfaces/arm32.rst    | 32 ++++++++++++++++++++++++++
> >> docs/hypercall-interfaces/arm64.rst    | 32 ++++++++++++++++++++++++++
> >> docs/hypercall-interfaces/index.rst.in |  7 ++++++
> >> docs/hypercall-interfaces/x86_64.rst   | 32 ++++++++++++++++++++++++++
> >> docs/index.rst                         |  8 +++++++
> >> 7 files changed, 116 insertions(+)
> >> create mode 100644 docs/hypercall-interfaces/arm32.rst
> >> create mode 100644 docs/hypercall-interfaces/arm64.rst
> >> create mode 100644 docs/hypercall-interfaces/index.rst.in
> >> create mode 100644 docs/hypercall-interfaces/x86_64.rst
> >> 
> >> diff --git a/.gitignore b/.gitignore
> >> index d271e0ce6a..a9aab120ae 100644
> >> --- a/.gitignore
> >> +++ b/.gitignore
> >> @@ -64,6 +64,7 @@ docs/xen.doxyfile
> >> docs/xen.doxyfile.tmp
> >> docs/xen-doxygen/doxygen_include.h
> >> docs/xen-doxygen/doxygen_include.h.tmp
> >> +docs/hypercall-interfaces/index.rst
> >> extras/mini-os*
> >> install/*
> >> stubdom/*-minios-config.mk
> >> diff --git a/docs/Makefile b/docs/Makefile
> >> index 2f784c36ce..b02c3dfb79 100644
> >> --- a/docs/Makefile
> >> +++ b/docs/Makefile
> >> @@ -61,6 +61,9 @@ build: html txt pdf man-pages figs
> >> sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
> >> ifneq ($(SPHINXBUILD),no)
> >> 	$(DOXYGEN) xen.doxyfile
> >> +	@echo "Generating hypercall-interfaces/index.rst"
> >> +	@sed -e "s,@XEN_TARGET_ARCH@,$(XEN_TARGET_ARCH),g" \
> >> +		hypercall-interfaces/index.rst.in > hypercall-interfaces/index.rst
> > 
> 
> Hi Stefano,
> 
> > I take that this means we are going to generate docs only for the
> > architecture that we are building? So if we build for x86, then the docs
> > are for x86 (no arm32 and arm64 docs.) Is that right?
> > 
> > Is that because Doxygen relies somehow on the compiler to extract data?
> > I am asking because if Doxygen doesn't rely on the compiler, then it
> > could probably generate the docs for all architectures in one go?
> 
> Doxygen rely on the headers generated from the KConfig system to properly solve
> the preprocessor step, for that reason here we need that.
> 
> It can be improved for sure, but it needs to call a defconfig for each architecture and
> have separate Doxygen-output folders for each one, then on the rst files you can choose
> from which arch you want the data.
> 
> I think this step can be done in a future serie.

OK. Maybe add a note about this to one of the commit messages.


> > 
> > 
> > 
> >> 	XEN_ROOT=$(realpath $(XEN_ROOT)) $(SPHINXBUILD) -b html . sphinx/html
> >> else
> >> 	@echo "Sphinx is not installed; skipping sphinx-html documentation."
> >> @@ -108,6 +111,7 @@ clean: clean-man-pages
> >> 	rm -f xen.doxyfile.tmp
> >> 	rm -f xen-doxygen/doxygen_include.h
> >> 	rm -f xen-doxygen/doxygen_include.h.tmp
> >> +	rm -f hypercall-interfaces/index.rst
> >> 
> >> .PHONY: distclean
> >> distclean: clean
> >> diff --git a/docs/hypercall-interfaces/arm32.rst b/docs/hypercall-interfaces/arm32.rst
> >> new file mode 100644
> >> index 0000000000..6762d9fc7c
> >> --- /dev/null
> >> +++ b/docs/hypercall-interfaces/arm32.rst
> >> @@ -0,0 +1,32 @@
> >> +.. SPDX-License-Identifier: CC-BY-4.0
> >> +
> >> +Hypercall Interfaces - arm32
> >> +============================
> >> +
> >> +Starting points
> >> +---------------
> >> +.. toctree::
> >> +   :maxdepth: 2
> >> +
> >> +
> >> +
> >> +Functions
> >> +---------
> >> +
> >> +
> >> +Structs
> >> +-------
> >> +
> >> +
> >> +Enums and sets of #defines
> >> +--------------------------
> >> +
> >> +
> >> +Typedefs
> >> +--------
> >> +
> >> +
> >> +Enum values and individual #defines
> >> +-----------------------------------
> >> +
> >> +
> >> diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interfaces/arm64.rst
> >> new file mode 100644
> >> index 0000000000..5e701a2adc
> >> --- /dev/null
> >> +++ b/docs/hypercall-interfaces/arm64.rst
> >> @@ -0,0 +1,32 @@
> >> +.. SPDX-License-Identifier: CC-BY-4.0
> >> +
> >> +Hypercall Interfaces - arm64
> >> +============================
> >> +
> >> +Starting points
> >> +---------------
> >> +.. toctree::
> >> +   :maxdepth: 2
> >> +
> >> +
> >> +
> >> +Functions
> >> +---------
> >> +
> >> +
> >> +Structs
> >> +-------
> >> +
> >> +
> >> +Enums and sets of #defines
> >> +--------------------------
> >> +
> >> +
> >> +Typedefs
> >> +--------
> >> +
> >> +
> >> +Enum values and individual #defines
> >> +-----------------------------------
> >> +
> >> +
> >> diff --git a/docs/hypercall-interfaces/index.rst.in b/docs/hypercall-interfaces/index.rst.in
> >> new file mode 100644
> >> index 0000000000..e4dcc5db8d
> >> --- /dev/null
> >> +++ b/docs/hypercall-interfaces/index.rst.in
> >> @@ -0,0 +1,7 @@
> >> +.. SPDX-License-Identifier: CC-BY-4.0
> >> +
> >> +Hypercall Interfaces
> >> +====================
> >> +
> >> +.. toctree::
> >> +   @XEN_TARGET_ARCH@
> >> diff --git a/docs/hypercall-interfaces/x86_64.rst b/docs/hypercall-interfaces/x86_64.rst
> >> new file mode 100644
> >> index 0000000000..59e948900c
> >> --- /dev/null
> >> +++ b/docs/hypercall-interfaces/x86_64.rst
> >> @@ -0,0 +1,32 @@
> >> +.. SPDX-License-Identifier: CC-BY-4.0
> >> +
> >> +Hypercall Interfaces - x86_64
> >> +=============================
> >> +
> >> +Starting points
> >> +---------------
> >> +.. toctree::
> >> +   :maxdepth: 2
> >> +
> >> +
> >> +
> >> +Functions
> >> +---------
> >> +
> >> +
> >> +Structs
> >> +-------
> >> +
> >> +
> >> +Enums and sets of #defines
> >> +--------------------------
> >> +
> >> +
> >> +Typedefs
> >> +--------
> >> +
> >> +
> >> +Enum values and individual #defines
> >> +-----------------------------------
> >> +
> >> +
> >> diff --git a/docs/index.rst b/docs/index.rst
> >> index b75487a05d..52226a42d8 100644
> >> --- a/docs/index.rst
> >> +++ b/docs/index.rst
> >> @@ -53,6 +53,14 @@ kind of development environment.
> >>    hypervisor-guide/index
> >> 
> >> 
> >> +Hypercall Interfaces documentation
> >> +----------------------------------
> >> +
> >> +.. toctree::
> >> +   :maxdepth: 2
> >> +
> >> +   hypercall-interfaces/index
> >> +
> >> Miscellanea
> >> -----------
> >> 
> >> -- 
> >> 2.17.1
> 


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:26:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:26:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148987.275383 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0SK-0004Gf-Ae; Thu, 01 Jul 2021 17:26:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148987.275383; Thu, 01 Jul 2021 17:26:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0SK-0004GY-4z; Thu, 01 Jul 2021 17:26:28 +0000
Received: by outflank-mailman (input) for mailman id 148987;
 Thu, 01 Jul 2021 17:26:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=YaNF=LZ=gmail.com=bobbyeshleman@srs-us1.protection.inumbo.net>)
 id 1lz0SJ-0004GD-8w
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:26:27 +0000
Received: from mail-pg1-x536.google.com (unknown [2607:f8b0:4864:20::536])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5a742286-a903-48e6-a2e0-21818705cd04;
 Thu, 01 Jul 2021 17:26:26 +0000 (UTC)
Received: by mail-pg1-x536.google.com with SMTP id d12so6739044pgd.9
 for <xen-devel@lists.xenproject.org>; Thu, 01 Jul 2021 10:26:26 -0700 (PDT)
Received: from ?IPv6:2602:4b:a45e:ca01::9? ([2602:4b:a45e:ca01::9])
 by smtp.gmail.com with ESMTPSA id 195sm582873pfw.133.2021.07.01.10.26.23
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 01 Jul 2021 10:26:25 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5a742286-a903-48e6-a2e0-21818705cd04
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:organization:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=puxaSWmR8dmzghTaq+DldI0mhH3+zGEkF2xlex2SX4Q=;
        b=UXU9U2NdEUjg94KzE69NDcWVVpTV8Eyi8ROyPNW2c39AtFlt7eXEQadQeHlu56Lsv+
         SUHAzZA9Jnsm7KaGSmGskyNKdyE4dXockf+63snrMghLbFnnXyJ/483cHpsuF2lr/AOz
         P77YoSQMz2zKICzPoEIe0lmm5w+iu36g+dI1XjKeCHrMnEKzXmPeRJ30aF0nSbyEDpWV
         Wqo6PPCyJrA63v6emMUxwO+W4HYBiPMUum3q6JZaFEJ6V6XDlMaIYfmJmIpbcVQUZFRy
         jiiBDM3hlezav5GP7GdgdTVe3Kcz3yecN2xnLHkr5gXDTqh24nfnhFf9U0QMMcmAdpfC
         txsw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:organization
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=puxaSWmR8dmzghTaq+DldI0mhH3+zGEkF2xlex2SX4Q=;
        b=PIXsK6oYWZY4Vm5jeXymfGUFZneDDhnk0sBTOsdQscgla7GbwEFO8ISJOp6jfu/6uu
         r/HUJAxSM6+aR9kMfhmjPw/duy8u7OmcnXDTmTIpziTLLAqeq+QaNZrIMm326656jhhx
         ViNnH5eWJPwvbqO3PM0NUvK+K2GdaImMW4JzqEZ+x3VlYDVoBy47689S4+blK1OH9CWJ
         JTpdh/7R3ZlzjL/H47yMFL9lAvDzM3305QgUCwytYv0IIkasE/MwF6Qd8GCOEA8ogd7G
         iZxuwkcQeEIO2NQgjoEK2DBP9oF7IgKONTnEFOPXZnxSk7lKhi3OAZtdpLKM00G/OwmW
         37Rw==
X-Gm-Message-State: AOAM533yqQ+Zd8Mnb1sR1THaQy7NLwzjgWc2EZ+ut9LNzfKiWYsHz4ZI
	K1q2OY8DfH4jTAAWPPjHUp0=
X-Google-Smtp-Source: ABdhPJxphjOfc/JZOSY1gk6URvPa4YBCzTNdtVQUy1Bc7b1e9ZtfVks+RUPKNCuJKNkzxbWvDEqEXQ==
X-Received: by 2002:aa7:8884:0:b029:307:4e14:14c9 with SMTP id z4-20020aa788840000b02903074e1414c9mr790039pfe.62.1625160385619;
        Thu, 01 Jul 2021 10:26:25 -0700 (PDT)
Subject: Re: [XEN PATCH v6 18/31] xen: move include/asm-* to
 include/arch-*/asm
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 Ross Lagerwall <ross.lagerwall@citrix.com>, Paul Durrant <paul@xen.org>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 Lukasz Hawrylko <lukasz.hawrylko@linux.intel.com>,
 Alistair Francis <alistair.francis@wdc.com>,
 Connor Davis <connojdavis@gmail.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-19-anthony.perard@citrix.com>
From: Bob Eshleman <bobbyeshleman@gmail.com>
Organization: Vates SAS
Message-ID: <c25255f5-8b46-7bc1-0627-cc9304fa3c0e@gmail.com>
Date: Thu, 1 Jul 2021 10:26:22 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.6.1
MIME-Version: 1.0
In-Reply-To: <20210701141011.785641-19-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hey Anthony,

> diff --git a/MAINTAINERS b/MAINTAINERS
> index 8a52a03969fe..03a5553116a8 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> -F:	xen/include/asm-arm/
> +F:	xen/include/arch-arm/

... snip ...

> -F:	xen/include/asm-x86/
> +F:	xen/include/arch-x86/


It looks like riscv will also need the same in its "xen/include/asm-riscv/" F entry.


Thanks

-- 
Bobby Eshleman
SE at Vates SAS


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:34:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:34:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.148995.275392 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0aA-0005jZ-3I; Thu, 01 Jul 2021 17:34:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 148995.275392; Thu, 01 Jul 2021 17:34:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0aA-0005jS-0A; Thu, 01 Jul 2021 17:34:34 +0000
Received: by outflank-mailman (input) for mailman id 148995;
 Thu, 01 Jul 2021 17:34:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz0a8-0005jI-OU; Thu, 01 Jul 2021 17:34:32 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz0a8-00026y-Jg; Thu, 01 Jul 2021 17:34:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz0a8-0008OT-A9; Thu, 01 Jul 2021 17:34:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz0a8-0007d8-9a; Thu, 01 Jul 2021 17:34:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Cm/Tba5D96BQmgvO4+zA9lHmk99fIp/2NNakT155y+0=; b=LmuMgRw4wGAFPAGaunkCXuk211
	fla2YjyBA57LbWHU0vXIElqhC2gogtoBUQNuWDJcjas+VCnG+dgOzOERotd2JXxf+YQnI2vWhUpAd
	C0roVDKV9MxxN/kx2mRZGSV0Qq/BWyQ6yiJPK/+PDpI7+adEo5sk7aQyANGlyJEy93Hg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163210-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163210: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=bb33c27fbed6c1ed39d243bedd407e8e93a2b3a9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 17:34:32 +0000

flight 163210 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163210/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 bb33c27fbed6c1ed39d243bedd407e8e93a2b3a9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   27 days
Failing since        162368  2021-06-04 15:42:59 Z   27 days   69 attempts
Testing same since   163205  2021-07-01 00:10:20 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3191 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:36:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:36:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149002.275407 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0cG-0006PD-M7; Thu, 01 Jul 2021 17:36:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149002.275407; Thu, 01 Jul 2021 17:36:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0cG-0006P6-Iy; Thu, 01 Jul 2021 17:36:44 +0000
Received: by outflank-mailman (input) for mailman id 149002;
 Thu, 01 Jul 2021 17:36:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uD8v=LZ=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lz0cG-0006P0-0s
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:36:44 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e5bd724f-da92-11eb-835a-12813bfff9fa;
 Thu, 01 Jul 2021 17:36:42 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 348F36138C;
 Thu,  1 Jul 2021 17:36:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e5bd724f-da92-11eb-835a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625161001;
	bh=ifTalwTLDbilj/hbcd+BpJi1t2wEHaUzCH7wDp147tU=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=WP1DaP9iCaHruWwoXcaetrJwzcAxMFS+ilw//fhmsk/NdfiFIypgDX/HuM7NfvviQ
	 4L8T0WQLhGJJPHOgMZQPzD5wNdocLAsiARnwleKPWQgZx80W5w4G6gMKaXcwdn/S6n
	 zB3/ECvedFJcxr2jay3ZBE7yYwmHr1y7srtEG9v7MiHHX/OFe93x1JbH6/FzoRXFFB
	 irqvOgFb7VcGRIP+/tu8ZeVi/hvWeWe70vfdrz64OuGnypkoxXSNhL2xc3NVbO7PNg
	 o+PFzj9YZdmtMoV+YEwzXzgRZtMiJERzjDtvCEezVCquKr9DZseYcMbDhEoPj/FmEO
	 Wh/ekf5rPQbHA==
Date: Thu, 1 Jul 2021 10:36:40 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, 
    Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, 
    Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 6/9] docs: add doxygen preprocessor and related
 files
In-Reply-To: <5D3534B9-30AC-484F-B2CF-02822D3D1226@arm.com>
Message-ID: <alpine.DEB.2.21.2107011034470.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-7-luca.fancellu@arm.com> <alpine.DEB.2.21.2106231456290.24906@sstabellini-ThinkPad-T480s> <5D3534B9-30AC-484F-B2CF-02822D3D1226@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="8323329-1068870486-1625161001=:9437"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-1068870486-1625161001=:9437
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8BIT

On Thu, 1 Jul 2021, Luca Fancellu wrote:
> > On 23 Jun 2021, at 23:03, Stefano Stabellini <sstabellini@kernel.org> wrote:
> > 
> > On Mon, 10 May 2021, Luca Fancellu wrote:
> >> Add preprocessor called by doxygen before parsing headers,
> >> it will include in every header a doxygen_include.h file
> >> that provides missing defines and includes that are
> >> usually passed by the compiler.
> >> 
> >> Add doxy_input.list that is a text file containing the
> >> relative path to the source code file to be parsed by
> >> doxygen. The path sould be relative to the xen folder:
> >> E.g. xen/include/public/grant_table.h
> >> 
> >> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> >> ---
> >> docs/xen-doxygen/doxy-preprocessor.py | 110 ++++++++++++++++++++++++++
> >> docs/xen-doxygen/doxy_input.list      |   0
> >> docs/xen-doxygen/doxygen_include.h.in |  32 ++++++++
> >> 3 files changed, 142 insertions(+)
> >> create mode 100755 docs/xen-doxygen/doxy-preprocessor.py
> >> create mode 100644 docs/xen-doxygen/doxy_input.list
> >> create mode 100644 docs/xen-doxygen/doxygen_include.h.in
> >> 
> >> diff --git a/docs/xen-doxygen/doxy-preprocessor.py b/docs/xen-doxygen/doxy-preprocessor.py
> >> new file mode 100755
> >> index 0000000000..496899d8e6
> >> --- /dev/null
> >> +++ b/docs/xen-doxygen/doxy-preprocessor.py
> >> @@ -0,0 +1,110 @@
> >> +#!/usr/bin/python3
> >> +#
> >> +# Copyright (c) 2021, Arm Limited.
> >> +#
> >> +# SPDX-License-Identifier: GPL-2.0
> >> +#
> >> +
> >> +import os, sys, re
> >> +
> >> +
> >> +# Variables that holds the preprocessed header text
> >> +output_text = ""
> >> +header_file_name = ""
> >> +
> >> +# Variables to enumerate the anonymous structs/unions
> >> +anonymous_struct_count = 0
> >> +anonymous_union_count = 0
> >> +
> >> +
> >> +def error(text):
> >> +    sys.stderr.write("{}\n".format(text))
> >> +    sys.exit(1)
> >> +
> >> +
> >> +def write_to_output(text):
> >> +    sys.stdout.write(text)
> >> +
> >> +
> >> +def insert_doxygen_header(text):
> >> +    # Here the strategy is to insert the #include <doxygen_include.h> in the
> >> +    # first line of the header
> >> +    abspath = os.path.dirname(os.path.abspath(__file__))
> >> +    text += "#include \"{}/doxygen_include.h\"\n".format(abspath)
> >> +
> >> +    return text
> >> +
> >> +
> >> +def enumerate_anonymous(match):
> >> +    global anonymous_struct_count
> >> +    global anonymous_union_count
> >> +
> >> +    if "struct" in match.group(1):
> >> +        label = "anonymous_struct_%d" % anonymous_struct_count
> >> +        anonymous_struct_count += 1
> >> +    else:
> >> +        label = "anonymous_union_%d" % anonymous_union_count
> >> +        anonymous_union_count += 1
> >> +
> >> +    return match.group(1) + " " + label + " {"
> >> +
> >> +
> >> +def manage_anonymous_structs_unions(text):
> >> +    # Match anonymous unions/structs with this pattern:
> >> +    # struct/union {
> >> +    #     [...]
> >> +    #
> >> +    # and substitute it in this way:
> >> +    #
> >> +    # struct anonymous_struct_# {
> >> +    #     [...]
> >> +    # or
> >> +    # union anonymous_union_# {
> >> +    #     [...]
> >> +    # where # is a counter starting from zero, different between structs and
> >> +    # unions
> >> +    #
> >> +    # We don't count anonymous union/struct that are part of a typedef because
> >> +    # they don't create any issue for doxygen
> >> +    text = re.sub(
> >> +        "(?<!typedef\s)(struct|union)\s+?\{",
> >> +        enumerate_anonymous,
> >> +        text,
> >> +        flags=re.S
> >> +    )
> 
> Hi Stefano,
> 
> > 
> > My python is a bit rusty but I thought this is really clever!
> > 
> > One question: given that anonymous_struct_count is local per file being
> > processed, it always starts at 0 for each header. I think that is
> > actually better from a documentation readability point of view.
> > 
> > However, is it possible that Doxygen gets confused in a case where we
> > can multiple "struct anonymous_struct_0", e.g. one for grant_table.h,
> > one for event_channel.h, etc. ?
> 
> Yes this is a very good point, I did some experiment and it can happen, however so far we didn’t notice any
> problem because all the anonymous union/struct were part of other data structure, in that case there is no
> problem at all because we have upper_data_structure::anonymous_{struct/union}_0/1/2…
> 
> So given the fact that is difficult to have clash, I would say we can handle any future case separately.
> 
> Having a global numbering can solve the issue but because the script is called separately for each header,
> Implementing it will involve some changes, there should be a file to maintain the number across invocation
> and so on.
> 
> Let me know what do you think about that and if in your opinion we can proceed the way it is now.

I think anonymous union/struct are always part of another data struct in
our headers, so we shouldn't have a problem. I think we can get away
without a global numbering system. Maybe you should add a note about
this limitation in the commit message or an in-code comment.
--8323329-1068870486-1625161001=:9437--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:43:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:43:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149008.275417 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0ia-0007pL-DL; Thu, 01 Jul 2021 17:43:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149008.275417; Thu, 01 Jul 2021 17:43:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0ia-0007pE-A6; Thu, 01 Jul 2021 17:43:16 +0000
Received: by outflank-mailman (input) for mailman id 149008;
 Thu, 01 Jul 2021 17:43:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uD8v=LZ=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lz0iY-0007os-RA
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:43:14 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ce647b15-da93-11eb-835a-12813bfff9fa;
 Thu, 01 Jul 2021 17:43:12 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 960E9613CF;
 Thu,  1 Jul 2021 17:43:11 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ce647b15-da93-11eb-835a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625161392;
	bh=n3cChlAKPWbsfGn3St/MEGP7YDIKX5dMWBEnm3z0uGI=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=ZQVoGOWLkJlm7to26A7enQV1QMXZY4dVC6mwxEd1WOf1hkO5JBQ17zABeMU4T4kqO
	 oHX1C+mIJmu+Wlpv7GiIRfmsWUD5Vx1ceAbx1z5MKykhtjtW8mgPP6I4K5MbiGRV7C
	 fGwSJHIo9euM/qgihWrsClb12IEbKylyPM1h+vh1chABxhZNazTtlr1BftYJbRPJ0s
	 TpgcOPX4aqHsCT8xFmZkbSXQbYoOQTklnUIT5UVGL+wDxKNZFad53XX1Xf3udR20k+
	 ThnqldElZvrw7HgZhfAqcTozT0Y6Q/V+yxCNIL0QAAu8ZHzkuvWgc+VuoYR10ZGkps
	 Ab121NZ+6hKOQ==
Date: Thu, 1 Jul 2021 10:43:11 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, 
    Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, 
    Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 7/9] docs: Change Makefile and sphinx configuration
 for doxygen
In-Reply-To: <1FC1E8DF-8AED-4ABD-BE9A-DBBD9D66EDBB@arm.com>
Message-ID: <alpine.DEB.2.21.2107011037580.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-8-luca.fancellu@arm.com> <alpine.DEB.2.21.2106231506040.24906@sstabellini-ThinkPad-T480s> <1FC1E8DF-8AED-4ABD-BE9A-DBBD9D66EDBB@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="8323329-683733543-1625161391=:9437"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-683733543-1625161391=:9437
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8BIT

On Thu, 1 Jul 2021, Luca Fancellu wrote:
> > On 24 Jun 2021, at 00:33, Stefano Stabellini <sstabellini@kernel.org> wrote:
> > 
> > On Mon, 10 May 2021, Luca Fancellu wrote:
> >> Modify docs/Makefile to call doxygen and generate sphinx
> >> html documentation given the doxygen XML output.
> >> 
> >> Modify docs/conf.py sphinx configuration file to setup
> >> the breathe extension that works as bridge between
> >> sphinx and doxygen.
> >> 
> >> Add some files to the .gitignore to ignore some
> >> generated files for doxygen.
> >> 
> >> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> >> ---
> >> .gitignore    |  6 ++++++
> >> docs/Makefile | 42 +++++++++++++++++++++++++++++++++++++++---
> >> docs/conf.py  | 48 +++++++++++++++++++++++++++++++++++++++++++++---
> >> 3 files changed, 90 insertions(+), 6 deletions(-)
> >> 
> >> diff --git a/.gitignore b/.gitignore
> >> index 1c2fa1530b..d271e0ce6a 100644
> >> --- a/.gitignore
> >> +++ b/.gitignore
> >> @@ -58,6 +58,12 @@ docs/man7/
> >> docs/man8/
> >> docs/pdf/
> >> docs/txt/
> >> +docs/doxygen-output
> >> +docs/sphinx
> >> +docs/xen.doxyfile
> >> +docs/xen.doxyfile.tmp
> >> +docs/xen-doxygen/doxygen_include.h
> >> +docs/xen-doxygen/doxygen_include.h.tmp
> >> extras/mini-os*
> >> install/*
> >> stubdom/*-minios-config.mk
> >> diff --git a/docs/Makefile b/docs/Makefile
> >> index 8de1efb6f5..2f784c36ce 100644
> >> --- a/docs/Makefile
> >> +++ b/docs/Makefile
> >> @@ -17,6 +17,18 @@ TXTSRC-y := $(sort $(shell find misc -name '*.txt' -print))
> >> 
> >> PANDOCSRC-y := $(sort $(shell find designs/ features/ misc/ process/ specs/ \( -name '*.pandoc' -o -name '*.md' \) -print))
> >> 
> >> +# Directory in which the doxygen documentation is created
> >> +# This must be kept in sync with breathe_projects value in conf.py
> >> +DOXYGEN_OUTPUT = doxygen-output
> >> +
> >> +# Doxygen input headers from xen-doxygen/doxy_input.list file
> >> +DOXY_LIST_SOURCES != cat "xen-doxygen/doxy_input.list"
> >> +DOXY_LIST_SOURCES := $(realpath $(addprefix $(XEN_ROOT)/,$(DOXY_LIST_SOURCES)))
> 
> Hi Stefano,
> 
> > 
> > I cannot find exactly who is populating doxy_input.list. I can see it is
> > empty in patch #6. Does it get populated during the build?
> 
> doxy_input.list is the only file that should be modified by the developer when he/she wants to add documentation
> for a new file to be parsed by Doxygen, in my patch about documenting grant_tables.h you can see I add
> there the path “xen/include/public/grant_table.h"

OK, thanks. I missed that addition.


> > 
> >> +DOXY_DEPS := xen.doxyfile \
> >> +			 xen-doxygen/mainpage.md \
> >> +			 xen-doxygen/doxygen_include.h
> >> +
> >> # Documentation targets
> >> $(foreach i,$(MAN_SECTIONS), \
> >>   $(eval DOC_MAN$(i) := $(patsubst man/%.$(i),man$(i)/%.$(i), \
> >> @@ -46,8 +58,28 @@ all: build
> >> build: html txt pdf man-pages figs
> >> 
> >> .PHONY: sphinx-html
> >> -sphinx-html:
> >> -	sphinx-build -b html . sphinx/html
> >> +sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
> >> +ifneq ($(SPHINXBUILD),no)
> > 
> > This check on SPHINXBUILD is new, it wasn't there before. Why do we need
> > it now? We are not really changing anything in regards to Sphinx, just
> > adding Doxygen support. Or was it a mistake that it was missing even
> > before this patch?
> 
> Yes this is new, I saw that we didn’t look if sphinx was installed in the system, so now we did

In that case, I think anything related to SPHINXBUILD and whether sphinx
is installed or not, should be a separate patch at the beginning of the
series. It could be committed independently before the rest of the
series. When we get to this patch, SPHINXBUILD should be already there.


> >> +	$(DOXYGEN) xen.doxyfile
> >> +	XEN_ROOT=$(realpath $(XEN_ROOT)) $(SPHINXBUILD) -b html . sphinx/html
> >> +else
> >> +	@echo "Sphinx is not installed; skipping sphinx-html documentation."
> >> +endif
> >> +
> >> +xen.doxyfile: xen.doxyfile.in xen-doxygen/doxy_input.list
> >> +	@echo "Generating $@"
> >> +	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< \
> >> +		| sed -e "s,@DOXY_OUT@,$(DOXYGEN_OUTPUT),g" > $@.tmp
> >> +	@$(foreach inc,\
> >> +		$(DOXY_LIST_SOURCES),\
> >> +		echo "INPUT += \"$(inc)\"" >> $@.tmp; \
> >> +	)
> >> +	mv $@.tmp $@
> >> +
> >> +xen-doxygen/doxygen_include.h: xen-doxygen/doxygen_include.h.in
> >> +	@echo "Generating $@"
> >> +	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< > $@.tmp
> >> +	@mv $@.tmp $@
> > 
> > Is the absolute path required? If not, we can probably get rid of this
> > generation step and simply have the relative path in
> > xen-doxygen/doxygen_include.h. I think this could apply to
> > xen.doxyfile.in above.
> 
> Unfortunately yes, the doxygen_include.h is a file that is included in every documented header before 
> starting the doxygen parser, since we don’t have all the headers in one path, it is impossible to have here
> a relative path that is good for every header in Xen.

OK :-/


> > 
> > 
> >> .PHONY: html
> >> html: $(DOC_HTML) html/index.html
> >> @@ -71,7 +103,11 @@ clean: clean-man-pages
> >> 	$(MAKE) -C figs clean
> >> 	rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~
> >> 	rm -rf *.ilg *.log *.ind *.toc *.bak *.tmp core
> >> -	rm -rf html txt pdf sphinx/html
> >> +	rm -rf html txt pdf sphinx $(DOXYGEN_OUTPUT)
> >> +	rm -f xen.doxyfile
> >> +	rm -f xen.doxyfile.tmp
> >> +	rm -f xen-doxygen/doxygen_include.h
> >> +	rm -f xen-doxygen/doxygen_include.h.tmp
> >> 
> >> .PHONY: distclean
> >> distclean: clean
> >> diff --git a/docs/conf.py b/docs/conf.py
> >> index 50e41501db..a48de42331 100644
> >> --- a/docs/conf.py
> >> +++ b/docs/conf.py
> >> @@ -13,13 +13,17 @@
> >> # add these directories to sys.path here. If the directory is relative to the
> >> # documentation root, use os.path.abspath to make it absolute, like shown here.
> >> #
> >> -# import os
> >> -# import sys
> >> +import os
> >> +import sys
> >> # sys.path.insert(0, os.path.abspath('.'))
> >> 
> >> 
> >> # -- Project information -----------------------------------------------------
> >> 
> >> +if "XEN_ROOT" not in os.environ:
> >> +    sys.exit("$XEN_ROOT environment variable undefined.")
> >> +XEN_ROOT = os.path.abspath(os.environ["XEN_ROOT"])
> >> +
> >> project = u'Xen'
> >> copyright = u'2019, The Xen development community'
> >> author = u'The Xen development community'
> >> @@ -35,6 +39,7 @@ try:
> >>             xen_subver = line.split(u"=")[1].strip()
> >>         elif line.startswith(u"export XEN_EXTRAVERSION"):
> >>             xen_extra = line.split(u"=")[1].split(u"$", 1)[0].strip()
> >> +
> > 
> > spurious change?
> 
> I think I’ve intentionally added a new line to separate the code from the except: below,
> but if it is a problem I can remove it

Better to remove it or to move it to a separate patch


> > 
> >> except:
> >>     pass
> >> finally:
> >> @@ -44,6 +49,15 @@ finally:
> >>     else:
> >>         version = release = u"unknown version"
> >> 
> >> +try:
> >> +    xen_doxygen_output = None
> >> +
> >> +    for line in open(u"Makefile"):
> >> +        if line.startswith(u"DOXYGEN_OUTPUT"):
> >> +                xen_doxygen_output = line.split(u"=")[1].strip()
> >> +except:
> >> +    sys.exit("DOXYGEN_OUTPUT variable undefined.")
> > 
> > This is a bit strange: isn't there a better way to get the
> > DOXYGEN_OUTPUT variable than reading the Makefile?
> > 
> > At that point I think it would be better to define DOXYGEN_OUTPUT a
> > second time in conf.py. But maybe it could be passed as an evironmental
> > variable?
> 
> Yes we could pass it as an environment variable as we do with XEN_ROOT,
> I will fix it in a next release.

Great


 
> > 
> >> # -- General configuration ---------------------------------------------------
> >> 
> >> # If your documentation needs a minimal Sphinx version, state it here.
> >> @@ -53,7 +67,8 @@ needs_sphinx = '1.4'
> >> # Add any Sphinx extension module names here, as strings. They can be
> >> # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
> >> # ones.
> >> -extensions = []
> >> +# breathe -> extension that integrates doxygen xml output with sphinx
> >> +extensions = ['breathe']
> >> 
> >> # Add any paths that contain templates here, relative to this directory.
> >> templates_path = ['_templates']
> >> @@ -175,6 +190,33 @@ texinfo_documents = [
> >>      'Miscellaneous'),
> >> ]
> >> 
> >> +# -- Options for Breathe extension -------------------------------------------
> >> +
> >> +breathe_projects = {
> >> +    "Xen": "{}/docs/{}/xml".format(XEN_ROOT, xen_doxygen_output)
> >> +}
> >> +breathe_default_project = "Xen"
> >> +
> >> +breathe_domain_by_extension = {
> >> +    "h": "c",
> >> +    "c": "c",
> >> +}
> >> +breathe_separate_member_pages = True
> >> +breathe_show_enumvalue_initializer = True
> >> +breathe_show_define_initializer = True
> >> +
> >> +# Qualifiers to a function are causing Sphihx/Breathe to warn about
> >> +# Error when parsing function declaration and more.  This is a list
> >> +# of strings that the parser additionally should accept as
> >> +# attributes.
> >> +cpp_id_attributes = [
> >> +    '__syscall', '__deprecated', '__may_alias',
> >> +    '__used', '__unused', '__weak',
> >> +    '__DEPRECATED_MACRO', 'FUNC_NORETURN',
> >> +    '__subsystem',
> > 
> > Should we also have any of following:
> > 
> > __packed
> > __init
> > __attribute__
> > __aligned__
> > 
> > in the list? In any case, we don't have to add them right now, we could
> > add them later as we expand Doxygen coverage if they become needed.
> 
> Sure it is possible, I can add them now since I have to push a fix for this patch
> If you want.

I would add them now even if they are not strictly required to parse the
public headers. But this is the kind of thing where others might have a
different opinion.
--8323329-683733543-1625161391=:9437--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:44:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:44:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149012.275429 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0jS-0008Na-O4; Thu, 01 Jul 2021 17:44:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149012.275429; Thu, 01 Jul 2021 17:44:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0jS-0008NT-Kn; Thu, 01 Jul 2021 17:44:10 +0000
Received: by outflank-mailman (input) for mailman id 149012;
 Thu, 01 Jul 2021 17:44:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uD8v=LZ=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lz0jR-0008NH-GZ
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:44:09 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id efca23bc-da93-11eb-835a-12813bfff9fa;
 Thu, 01 Jul 2021 17:44:08 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id A8826613CF;
 Thu,  1 Jul 2021 17:44:07 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: efca23bc-da93-11eb-835a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625161448;
	bh=XauLEPYd/jYs64JpDvfc3TTx0NmqPddBd+EF4qXuebY=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=ftAZdRrGVvCCdWd5M8VuIzp7elLONE46uxBOuj9DIWNsBFgAgVYq8ya9Qn8HfwCRN
	 Sb0fx9YoPUuhyfkECYmDkS4xDZBnmiAxSVCQhVSr8R2OmsrSERhkphlyOeHgVIvRyG
	 dr7rGmmAD9Id4oALVGq0GO7XiSB0sggnNYpREAaF7GtsGWQ6WSmDVFbLMBwLNrWVc3
	 xQ/aSGXYLRcU2kABPAUkkV73EBtIZ4Nla/iSsW0L3sNgAaWlu0SKygGhDS70FEdFCU
	 yBa4ASUV4J7GNYXfLEANoTaOjR/kiB4M9NywuUjsi7iLLTz5Lnu+nbp29efUJMFon/
	 0Y6RUfF2fKEqg==
Date: Thu, 1 Jul 2021 10:44:06 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, 
    Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, 
    Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
In-Reply-To: <31171081-1007-4B4E-91CC-25EA1041EB58@arm.com>
Message-ID: <alpine.DEB.2.21.2107011043410.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-10-luca.fancellu@arm.com> <alpine.DEB.2.21.2106231530320.24906@sstabellini-ThinkPad-T480s> <31171081-1007-4B4E-91CC-25EA1041EB58@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="8323329-1419850380-1625161448=:9437"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-1419850380-1625161448=:9437
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8BIT

On Thu, 1 Jul 2021, Luca Fancellu wrote:
> Hi Stefano,
> 
> > On 24 Jun 2021, at 00:34, Stefano Stabellini <sstabellini@kernel.org> wrote:
> > 
> > On Mon, 10 May 2021, Luca Fancellu wrote:
> >> Modification to include/public/grant_table.h:
> >> 
> >> 1) Add doxygen tags to:
> >> - Create Grant tables section
> >> - include variables in the generated documentation
> >> - Used @keepindent/@endkeepindent to enclose comment
> >>   section that are indented using spaces, to keep
> >>   the indentation.
> >> 2) Add .rst file for grant table for Arm64
> > 
> > Why only arm64?
> 
> This is a mistake, it should be just “Add .rst file for grant table"
> 
> > 
> > 
> >> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> >> ---
> >> v6 changes:
> >> - Fix misaligned comment
> >> - Moved comments to make them display in the docs
> >> - Included more documentation in the docs
> >>  (see output here: https://luca.fancellu.gitlab.io/xen-docs/hypercall-interfaces/common/grant_tables.html)
> > 
> > It looks much much better. All the info we care about seems to be there.
> > The only things that I noticed missing and might be good to keep is the
> > small comment about HYPERVISOR_grant_table_op:
> > 
> > /* ` enum neg_errnoval
> > * ` HYPERVISOR_grant_table_op(enum grant_table_op cmd,
> > * `                           void *args,
> > * `                           unsigned int count)
> > * `
> > *
> > * @args points to an array of a per-command data structure. The array
> > * has @count members
> 
> Where do you want me to put this comment in the html page? In the end of the description in the top of the page?

Yeah, that looks like a good place
--8323329-1419850380-1625161448=:9437--


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:49:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:49:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149018.275440 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0oj-0000fg-D7; Thu, 01 Jul 2021 17:49:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149018.275440; Thu, 01 Jul 2021 17:49:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0oj-0000fZ-8n; Thu, 01 Jul 2021 17:49:37 +0000
Received: by outflank-mailman (input) for mailman id 149018;
 Thu, 01 Jul 2021 17:49:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=YaNF=LZ=gmail.com=bobbyeshleman@srs-us1.protection.inumbo.net>)
 id 1lz0oh-0000fT-UF
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:49:35 +0000
Received: from mail-pf1-x42d.google.com (unknown [2607:f8b0:4864:20::42d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e7e92e8e-5db8-4b7d-a5e0-5679b76c1516;
 Thu, 01 Jul 2021 17:49:34 +0000 (UTC)
Received: by mail-pf1-x42d.google.com with SMTP id b12so5453965pfv.6
 for <xen-devel@lists.xenproject.org>; Thu, 01 Jul 2021 10:49:34 -0700 (PDT)
Received: from ?IPv6:2602:4b:a45e:ca01::9? ([2602:4b:a45e:ca01::9])
 by smtp.gmail.com with ESMTPSA id m10sm657377pfh.62.2021.07.01.10.49.30
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 01 Jul 2021 10:49:33 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e7e92e8e-5db8-4b7d-a5e0-5679b76c1516
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:organization:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=U+W37TQ3T1y+C5Q0xHkEVJ/uCWV5n7YOCtXmRIz31uY=;
        b=jRnDwladYCmFPktuYJ+57+1jrKD8YE06vTGnV7pkX/UMK5G3bcT8TqfrJJJXb2Weqy
         RBuh2sljZadfP6HBgqhLruw+PmYKuKHhXWsD5BncdcTWQnUmS/K9T5ELezU9Z2JZDk+O
         0bLmGYloYifTymMYr/pelIlNJh/pMYQeDBvn7I5ine7GNWDSgjPpJSyLFxppdrs7da2K
         MrCPfG0nAaYd8Tv6qmn8zWktZr5wZ7irLNfR19HqyU/P32AZ4EMCAl8cPb52Z0qw6aOG
         d1kqRL9tuuoO6FcQGWMtpZXXKyZ92n/h/AjDFRTbiskmLkt5jnfPMNrA+ORuVPfH/I7+
         6kdQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:organization
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=U+W37TQ3T1y+C5Q0xHkEVJ/uCWV5n7YOCtXmRIz31uY=;
        b=OyPuHZhwEhXo/xrB45TPjMUUAoacDj16RJOvSE57OMu9Rdny4YW0cg4553Fin4VA6K
         ZTdh2M4l4U1qjVci2IvF+KMgG1L7OIs/NwNX7I7VvA25eJZGS35ECXJDsDZHzqEJKVKg
         skDPj16fppkwBcPISHkWGqzDLSa2tx7zJTL9PNFZbJWZo+v6UMRgTNhMRuxpoKyujv9Y
         z7jAXvrlpidp/2XmvQFCaDa1B4kXiK5GeEpjFyC0VdZtjVcHH1uyTXYmmJbjGu9uP3zV
         nevVINMd3FDsSXHFRxmlkopzkp1WLOxS+UAqRVJUucwNV8hDKDTSH03DJLhqBJ9/bFrh
         F93g==
X-Gm-Message-State: AOAM530/WkelUiCQw4uNRJmVy5C7GZPSUzfBFMPpf7FBfk5IrHsS2vFA
	wIeBiGkcbymBv8Lj1nCDoVk=
X-Google-Smtp-Source: ABdhPJyORDWdcFyyra64spz9FVC6hyprvWsHXOD0m5Bwuv7ne7Q5OU+IPwzohxffdUCZNpj+bB+WoA==
X-Received: by 2002:a63:ef44:: with SMTP id c4mr753464pgk.162.1625161774060;
        Thu, 01 Jul 2021 10:49:34 -0700 (PDT)
Subject: Re: [XEN PATCH v6 29/31] build: build everything from the root dir,
 use obj=$subdir
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Alistair Francis <alistair.francis@wdc.com>,
 Connor Davis <connojdavis@gmail.com>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 Ross Lagerwall <ross.lagerwall@citrix.com>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-30-anthony.perard@citrix.com>
From: Bob Eshleman <bobbyeshleman@gmail.com>
Organization: Vates SAS
Message-ID: <11c9c305-9053-e492-ecd6-c0ab22c93ed1@gmail.com>
Date: Thu, 1 Jul 2021 10:49:26 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.6.1
MIME-Version: 1.0
In-Reply-To: <20210701141011.785641-30-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/1/21 7:10 AM, Anthony PERARD wrote:
> A subdirectory is now built by setting "$(obj)" instead of changing
> directory. "$(obj)" should always be set when using "Rules.mk" and
> thus a shortcut "$(build)" is introduced and should be used.
> 
> A new variable "$(need-builtin)" is introduce. It is to be used
> whenever a "built_in.o" is wanted from a subdirectory. "built_in.o"
> isn't the main target anymore, and thus only needs to depends on the
> objects that should be part of "built_in.o".
> 
> Introduce $(srctree) and $(objtree) to replace $(BASEDIR) in cases a
> relative path is better.
> 
> DEPS is updated as the existing macro to deal with it doesn't know
> about $(obj).
> 
> There's some changes in "Rules.mk" which in addition to deal with
> "$(obj)" also make it's looks more like "Makefile.build" from Linux
> v5.12.
> 
> test/Makefile doesn't need special handling in order to build
> everything under test/, Rules.mk will visit test/livepatch via
> $(subdir-y), thus "tests" "all" and "build" target are removed.
> "subtree-force-update" target isn't useful so it is removed as well.
> 
> test/livepatch/Makefile doesn't need default target anymore, Rules.mk
> will build everything in $(extra-y) and thus all *.livepatch.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Bob Eshleman <bobbyeshleman@gmail.com>

Thanks,
Bobby


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 17:52:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 17:52:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149023.275450 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0rR-000259-Vr; Thu, 01 Jul 2021 17:52:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149023.275450; Thu, 01 Jul 2021 17:52:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz0rR-000252-Sl; Thu, 01 Jul 2021 17:52:25 +0000
Received: by outflank-mailman (input) for mailman id 149023;
 Thu, 01 Jul 2021 17:52:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=YaNF=LZ=gmail.com=bobbyeshleman@srs-us1.protection.inumbo.net>)
 id 1lz0rQ-00024p-WD
 for xen-devel@lists.xenproject.org; Thu, 01 Jul 2021 17:52:25 +0000
Received: from mail-pj1-x1029.google.com (unknown [2607:f8b0:4864:20::1029])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b30768fb-0fb2-413e-a749-f44269e4bae8;
 Thu, 01 Jul 2021 17:52:24 +0000 (UTC)
Received: by mail-pj1-x1029.google.com with SMTP id l11so4719373pji.5
 for <xen-devel@lists.xenproject.org>; Thu, 01 Jul 2021 10:52:24 -0700 (PDT)
Received: from ?IPv6:2602:4b:a45e:ca01::9? ([2602:4b:a45e:ca01::9])
 by smtp.gmail.com with ESMTPSA id c21sm616684pfv.138.2021.07.01.10.52.20
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 01 Jul 2021 10:52:23 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b30768fb-0fb2-413e-a749-f44269e4bae8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:organization:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=0Vsex3I4g2OE7oG/neSBO+550Ku5bwDkSc1VWgWklJM=;
        b=On3F/DLFrInmIVnIoyaTcrsbnbqpU3BpzOCQYFEznAuC+3DFHOQ6+JjCPOoSTdGZVA
         byUJh5p1wd0b0FjyGvzfmFss1+urhZ+mj07fvFoNqlIDhGhOMCjXEFmFFnA9alnJ2ARR
         XbcVkLAr0O91ygXq1Izd16SulB2/JE1dIwja8atj+lqaQdhhR091/Rh94CKrUuyr0eft
         jAjobzsj+Y2uJ+jFoCUgNnLQMr3eUXV4/KnIGgdlzZGwnWhPXGRU2fd+5bD/U3xz2b8U
         wrxCBRsdEMQQQDp2B13jiHzx7nQ/9/yGc/FiFaUuozCpNIE+Pfopku0MOg6S3wJnNvm6
         OO5w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:organization
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=0Vsex3I4g2OE7oG/neSBO+550Ku5bwDkSc1VWgWklJM=;
        b=kzDSrWVyZYCtMuEfZr1gRTRS/pABGLCiKMtBtBUjEnN+qN4ZFwAI8gCr+XTpi0TLs4
         4j1N+KMVUWGJTHBBzGSW0XXswkd6RQvE33hoAd5xJzgOfO11SSB/V0X7K4nY+nF+7DAr
         RHjyMg7JJGb2A/s3Vhct38wWQSvYrmT1TFfKlZDrY5oI84C2XXBeKjctivgpNypRfX3K
         TxZ64UjAqks2RxTg3rQTXzEiRUdDs1ox8imEc81K0lXmIxbpbzCeM5fgoH/VIHJmLCZb
         gjnMz8nnhujm8NuxYeBkANvyY9cnTawXSqt11bRRSy+Xl4pLWvJiFX/bJHU6hHUmqbkD
         R2MA==
X-Gm-Message-State: AOAM5333GxMguvf0opSiHghDKMyJ+fha+a06ui9wxV2WXCFzRIrBCYjm
	QWnCX2o2euXviA6WUWbYNds=
X-Google-Smtp-Source: ABdhPJy5IhU4yYYT5O819bfLHWpyYviWFKlRWlUTu4WevT8HGP6l22zduT9xqn3d5FvMIrGyDVNARg==
X-Received: by 2002:a17:902:d102:b029:128:e250:ebca with SMTP id w2-20020a170902d102b0290128e250ebcamr678585plw.14.1625161943699;
        Thu, 01 Jul 2021 10:52:23 -0700 (PDT)
Subject: Re: [XEN PATCH v6 31/31] build,riscv: tell the build system about
 riscv64/head.S
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Connor Davis <connojdavis@gmail.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-32-anthony.perard@citrix.com>
From: Bob Eshleman <bobbyeshleman@gmail.com>
Organization: Vates SAS
Message-ID: <40116c39-1437-de8c-23bd-0454e4551478@gmail.com>
Date: Thu, 1 Jul 2021 10:52:19 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.6.1
MIME-Version: 1.0
In-Reply-To: <20210701141011.785641-32-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/1/21 7:10 AM, Anthony PERARD wrote:
> This allows to `make arch/riscv/riscv64/head.o`.
> 
> Example of rune on a fresh copy of the repository:
>     make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu- KBUILD_DEFCONFIG=tiny64_defconfig arch/riscv/riscv64/head.o
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>  xen/arch/riscv/riscv64/Makefile | 1 +
>  1 file changed, 1 insertion(+)
>  create mode 100644 xen/arch/riscv/riscv64/Makefile
> 
> diff --git a/xen/arch/riscv/riscv64/Makefile b/xen/arch/riscv/riscv64/Makefile
> new file mode 100644
> index 000000000000..15a4a65f6615
> --- /dev/null
> +++ b/xen/arch/riscv/riscv64/Makefile
> @@ -0,0 +1 @@
> +extra-y += head.o
> 

Acked-by: Bob Eshleman <bobbyeshleman@gmail.com>

-- 
Bobby Eshleman
SE at Vates SAS


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 18:06:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 18:06:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149029.275461 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz14h-0003d6-3g; Thu, 01 Jul 2021 18:06:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149029.275461; Thu, 01 Jul 2021 18:06:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz14h-0003cz-0m; Thu, 01 Jul 2021 18:06:07 +0000
Received: by outflank-mailman (input) for mailman id 149029;
 Thu, 01 Jul 2021 18:06:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz14f-0003cp-Nl; Thu, 01 Jul 2021 18:06:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz14f-0002jS-HF; Thu, 01 Jul 2021 18:06:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz14f-00016D-71; Thu, 01 Jul 2021 18:06:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz14f-0006BZ-6Z; Thu, 01 Jul 2021 18:06:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tfK3+WTsBZ4TdBWk+Tzr3sj4cN/p6mhzyBfak1rchZQ=; b=uu6F15xvIi0BQwbe4Zwvw9v5Ht
	rDZhPyJvzStejtlG/YdE5G5u7Xrv/oR+iOtyjspbHUutWHlHeyuMxnY07y8qnvIdtNlAteOYDE1Ev
	3EHUVPKxHi4UwwzdE+j9xXyPRbQhYMiVbNF81lEQee2Ck3nzfgxVq/k5bppBS+bxkJOY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163206-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163206: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-unstable:test-armhf-armhf-libvirt-raw:xen-boot:fail:heisenbug
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
X-Osstest-Versions-That:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 18:06:05 +0000

flight 163206 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163206/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail in 163190 pass in 163206
 test-armhf-armhf-libvirt-raw  8 xen-boot                   fail pass in 163190

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

version targeted for testing:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0
baseline version:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0

Last test of basis   163206  2021-07-01 01:51:36 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Thu Jul 01 19:32:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 19:32:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149035.275476 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz2Ph-0003FG-OD; Thu, 01 Jul 2021 19:31:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149035.275476; Thu, 01 Jul 2021 19:31:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz2Ph-0003F9-Kh; Thu, 01 Jul 2021 19:31:53 +0000
Received: by outflank-mailman (input) for mailman id 149035;
 Thu, 01 Jul 2021 19:31:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz2Pg-0003Ez-7z; Thu, 01 Jul 2021 19:31:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz2Pg-00043v-1S; Thu, 01 Jul 2021 19:31:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz2Pf-0004A6-Lk; Thu, 01 Jul 2021 19:31:51 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz2Pf-0000lT-LF; Thu, 01 Jul 2021 19:31:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=nHoKSs46Gn4WnaN1vOJmjfGDBwLzw66dsPrcx5W69fs=; b=AZfncMenmhTUDT9rA/dA8bH2qr
	dfpREGWIgEGBT3gtJisrkJXGrqmSFmJiATU4kMRF5JMoIVbUn83WdWHjoWtw0B0uksWBGxysmjzH8
	8tqe9W/PMrBmOr8tDy5FDJ+NxLFy6Bc276QQr671ASiQBVj7c1kKAD9QVkN/14hwmbPo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163207-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163207: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=dbe69e43372212527abf48609aba7fc39a6daa27
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 19:31:51 +0000

flight 163207 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163207/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-examine      4 memdisk-try-append       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass

version targeted for testing:
 linux                dbe69e43372212527abf48609aba7fc39a6daa27
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  334 days
Failing since        152366  2020-08-01 20:49:34 Z  333 days  568 attempts
Testing same since   163207  2021-07-01 02:12:24 Z    0 days    1 attempts

------------------------------------------------------------
6412 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1802647 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 01 22:12:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 01 Jul 2021 22:12:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149044.275493 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz4ug-0000lq-Bo; Thu, 01 Jul 2021 22:12:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149044.275493; Thu, 01 Jul 2021 22:12:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz4ug-0000lj-8g; Thu, 01 Jul 2021 22:12:02 +0000
Received: by outflank-mailman (input) for mailman id 149044;
 Thu, 01 Jul 2021 22:12:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz4ue-0000lZ-SY; Thu, 01 Jul 2021 22:12:00 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz4ue-0006jR-IQ; Thu, 01 Jul 2021 22:12:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz4ue-00047i-8k; Thu, 01 Jul 2021 22:12:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz4ue-0004L5-8J; Thu, 01 Jul 2021 22:12:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=YF8sTuGrs37hcmO1B5NjG/UyDSgLfYwUWERAcDZkJ3U=; b=F/CppXG3yPjSpYP0PAk56TG+SM
	s5Wp6/5nEJ15B3fW9Sxx0APmL3BQbV6yQ/oxyM30WqUtHLyHz/4w3RZdOjeTlROuQDtaA3DDkiWOl
	Us9zjQh2FJuq8lWOyeYHoZyqvGsy1XPW9q+DbNWWY81fW6lk+UGT4ywGecJp66gRKdt0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163214-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163214: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=8697dc60cc28b2673aed4998fb6b21b9bf54a76d
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 01 Jul 2021 22:12:00 +0000

flight 163214 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163214/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 8697dc60cc28b2673aed4998fb6b21b9bf54a76d
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   27 days
Failing since        162368  2021-06-04 15:42:59 Z   27 days   70 attempts
Testing same since   163214  2021-07-01 17:42:29 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3210 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 01:07:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 01:07:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149051.275508 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz7e9-0002bP-VI; Fri, 02 Jul 2021 01:07:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149051.275508; Fri, 02 Jul 2021 01:07:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz7e9-0002bH-P7; Fri, 02 Jul 2021 01:07:09 +0000
Received: by outflank-mailman (input) for mailman id 149051;
 Fri, 02 Jul 2021 01:07:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz7e9-0002b7-4x; Fri, 02 Jul 2021 01:07:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz7e8-0004ao-Tt; Fri, 02 Jul 2021 01:07:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz7e8-0001Il-Kt; Fri, 02 Jul 2021 01:07:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz7e8-00088r-KN; Fri, 02 Jul 2021 01:07:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/kHQCQtIatzVct0oByhL8yCJaYtoAb4L1/GaW3l6IUw=; b=5V1RxqaL8HW0MpRFo+zhVHDFOE
	02wYwNwHNt5172ohR0xA5PRDQahc7vydxZ33pl+vlOwUlAB7+1fKGWaywPFnrCliOQdbZ/Egkia8P
	M0yzKl8qHV4Jacg0e3BDtKv5gFxtEwS/4x8LPC+tYAPXDjPluUrMS0iZ67/SvPutyE2o=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163216-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163216: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 01:07:08 +0000

flight 163216 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163216/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   27 days
Failing since        162368  2021-06-04 15:42:59 Z   27 days   71 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 02:24:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 02:24:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149059.275521 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz8qv-0001o4-P7; Fri, 02 Jul 2021 02:24:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149059.275521; Fri, 02 Jul 2021 02:24:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz8qv-0001nx-Li; Fri, 02 Jul 2021 02:24:25 +0000
Received: by outflank-mailman (input) for mailman id 149059;
 Fri, 02 Jul 2021 02:24:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8qu-0001nn-JK; Fri, 02 Jul 2021 02:24:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8qu-0006GY-CD; Fri, 02 Jul 2021 02:24:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8qt-0003Oe-Tj; Fri, 02 Jul 2021 02:24:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8qt-0005Lf-Sz; Fri, 02 Jul 2021 02:24:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=L6gc9hzGIPABbXmTfLYuJidhHWCcVY1YBxwTks4jR2c=; b=qarcLd/QeuOtuNsrt2nXrpQ6L+
	FtgWqN+FnuYIHsYtkP6LqfWXYiLAvdHvGleASkqMQoCQqzWWrLvOksuxkUySG0C1ivbFVyeItinVf
	DJ2EnANMJqV2QUqJnRk5AzWnY7zaLLVQkjI1F8NXAZLaHxz4+aPO7+AUJqORDvEg6zFY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163213-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163213: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=1ec2cd0ce2ca94292ce237becc2c21b4eb9edca0
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 02:24:23 +0000

flight 163213 qemu-mainline real [real]
flight 163218 qemu-mainline real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163213/
http://logs.test-lab.xenproject.org/osstest/logs/163218/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 152631
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1       fail REGR. vs. 152631

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                1ec2cd0ce2ca94292ce237becc2c21b4eb9edca0
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  315 days
Failing since        152659  2020-08-21 14:07:39 Z  314 days  577 attempts
Testing same since   163213  2021-07-01 13:53:26 Z    0 days    1 attempts

------------------------------------------------------------
552 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 180246 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 02:25:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 02:25:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149064.275535 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz8rf-0002Nc-84; Fri, 02 Jul 2021 02:25:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149064.275535; Fri, 02 Jul 2021 02:25:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz8rf-0002NV-4l; Fri, 02 Jul 2021 02:25:11 +0000
Received: by outflank-mailman (input) for mailman id 149064;
 Fri, 02 Jul 2021 02:25:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8rd-0002M7-0p; Fri, 02 Jul 2021 02:25:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8rc-0006HD-Tl; Fri, 02 Jul 2021 02:25:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8rc-0003Pa-Ms; Fri, 02 Jul 2021 02:25:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lz8rc-00060J-MM; Fri, 02 Jul 2021 02:25:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=d3UaKIeA4lHwc6/4H75FWl/cQx1DtVsUDC4KcemtYfE=; b=DyMAfVkQqGnixUbWeH+UhkOETl
	/FsXqVAsG8pE7bbkA1u0hRhiIlZbfaWKV3qjMdB49jeF+795dE35RU+hVMUDivgvUpcSBNLqkyWMv
	+WyBMcQQYOv4i+Fxmt/n1DPzMd6o0EF453TOUGSJi9IJAWTxb93Rmf4NSXiWoJoq1TbQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163217-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163217: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 02:25:08 +0000

flight 163217 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163217/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   27 days
Failing since        162368  2021-06-04 15:42:59 Z   27 days   72 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 03:08:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 03:08:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149074.275549 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz9XH-0006Tk-Kv; Fri, 02 Jul 2021 03:08:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149074.275549; Fri, 02 Jul 2021 03:08:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lz9XH-0006Td-Ho; Fri, 02 Jul 2021 03:08:11 +0000
Received: by outflank-mailman (input) for mailman id 149074;
 Fri, 02 Jul 2021 03:08:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=j+um=L2=gmail.com=groeck7@srs-us1.protection.inumbo.net>)
 id 1lz9XG-0006TX-KM
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 03:08:10 +0000
Received: from mail-oi1-x230.google.com (unknown [2607:f8b0:4864:20::230])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8e046331-4739-4c0c-92e9-9cdf01347cc6;
 Fri, 02 Jul 2021 03:08:09 +0000 (UTC)
Received: by mail-oi1-x230.google.com with SMTP id t3so9797238oic.5
 for <xen-devel@lists.xenproject.org>; Thu, 01 Jul 2021 20:08:09 -0700 (PDT)
Received: from localhost ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c])
 by smtp.gmail.com with ESMTPSA id l2sm374555otl.27.2021.07.01.20.08.07
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 01 Jul 2021 20:08:08 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 8e046331-4739-4c0c-92e9-9cdf01347cc6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:in-reply-to;
        bh=vnC0TqPJlyIMqLOncGpr5zl9pmbmcIIyiC4phT6PUIQ=;
        b=rcatVMwnoboRAVBm6z7P2HYmOyqx+HWthzA0HOg5zSVWMr7WIAx3ZVtmMQBABS3jSs
         ll3cBrlaV5N4g4Rvy938v3Mka2o7BKSsLAnp0j9BVKtd6G0HRyhUAM117EPetSB6PYk4
         aIzksvokAZwg7oj60y4L3zka5GOYTYtCADcKKqh9eOpTeqFos+tdtKUeh13pl/ncaATb
         z+gsly2qHHMFdyn0yxdy8vih0i6Y3VD1swKheCHmBE++JlII4Ajp+FJ6942Kfxfr0p9t
         PlSPUBKWfUPw26fCx2/8jDss0gWJ7ZhSbqGnHJzN7Y9CqXNOHLSOGPQ6Z7xfZJI1OXzp
         hIRw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:date:from:to:cc:subject:message-id
         :references:mime-version:content-disposition:in-reply-to;
        bh=vnC0TqPJlyIMqLOncGpr5zl9pmbmcIIyiC4phT6PUIQ=;
        b=jKTSJqkGiP/4D2KKl8/Qr5dFRC3kumAd81fH4dh93nwa4C4eEWChRYZpDYBwq0rsFc
         bqW8ZZZI0g9u3i4T2vU6d4K2y3JDQV7hX2wzkaWM2cZgjymgtopv+F/CwpicvTecMftF
         MUBk+pKOmk4P+xe/L/ihO8xYrNCYS5Y3Id+/Vxm5TExDIqGOaYKViFOt7OChEydQTSGN
         HNDSk8p+aTmrhqYjAZTL+155BwbAk7oejqAF3Vd9qWg+4ClmxVR2i10YbKEKzEs+6KCv
         UXhT8iVAuQ+trDLRWQrNbfFQCDwTqoo9i71chTlVD/bo76HBaGPmu4Dks9pHizx1Q1Gu
         9MvQ==
X-Gm-Message-State: AOAM530gcWXJtZNXIpeSYGNeu0U1rnKCPCyVgXxOrii6JfvE5Og+HgTv
	taSvOMTqq4d+0kLppwymUfE=
X-Google-Smtp-Source: ABdhPJxROyx59a65CULGKnIjDKL6LEkceViIozGHO/6JCiILIO/ostWPfjk3TYymGpFPnNGZwku3+w==
X-Received: by 2002:a54:4187:: with SMTP id 7mr2101677oiy.127.1625195289117;
        Thu, 01 Jul 2021 20:08:09 -0700 (PDT)
Sender: Guenter Roeck <groeck7@gmail.com>
Date: Thu, 1 Jul 2021 20:08:07 -0700
From: Guenter Roeck <linux@roeck-us.net>
To: Claire Chang <tientzu@chromium.org>
Cc: Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	mingo@kernel.org, jxgao@google.com, sstabellini@kernel.org,
	Saravana Kannan <saravanak@google.com>, xypron.glpk@gmx.de,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>, airlied@linux.ie,
	Robin Murphy <robin.murphy@arm.com>,
	Nicolas Boichat <drinkcat@chromium.org>, rodrigo.vivi@intel.com,
	bhelgaas@google.com, Dan Williams <dan.j.williams@intel.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>, quic_qiancai@quicinc.com,
	lkml <linux-kernel@vger.kernel.org>, tfiga@chromium.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, thomas.lendacky@amd.com,
	linuxppc-dev@lists.ozlabs.org, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 12/12] of: Add plumbing for restricted DMA pool
Message-ID: <20210702030807.GA2685166@roeck-us.net>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-13-tientzu@chromium.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210624155526.2775863-13-tientzu@chromium.org>

Hi,

On Thu, Jun 24, 2021 at 11:55:26PM +0800, Claire Chang wrote:
> If a device is not behind an IOMMU, we look up the device node and set
> up the restricted DMA when the restricted-dma-pool is presented.
> 
> Signed-off-by: Claire Chang <tientzu@chromium.org>
> Tested-by: Stefano Stabellini <sstabellini@kernel.org>
> Tested-by: Will Deacon <will@kernel.org>

With this patch in place, all sparc and sparc64 qemu emulations
fail to boot. Symptom is that the root file system is not found.
Reverting this patch fixes the problem. Bisect log is attached.

Guenter

---
# bad: [fb0ca446157a86b75502c1636b0d81e642fe6bf1] Add linux-next specific files for 20210701
# good: [62fb9874f5da54fdb243003b386128037319b219] Linux 5.13
git bisect start 'HEAD' 'v5.13'
# bad: [f63c4fda987a19b1194cc45cb72fd5bf968d9d90] Merge remote-tracking branch 'rdma/for-next'
git bisect bad f63c4fda987a19b1194cc45cb72fd5bf968d9d90
# good: [46bb5dd1d2a63e906e374e97dfd4a5e33934b1c4] Merge remote-tracking branch 'ipsec/master'
git bisect good 46bb5dd1d2a63e906e374e97dfd4a5e33934b1c4
# good: [43ba6969cfb8185353a7a6fc79070f13b9e3d6d3] Merge remote-tracking branch 'clk/clk-next'
git bisect good 43ba6969cfb8185353a7a6fc79070f13b9e3d6d3
# good: [1ca5eddcf8dca1d6345471c6404e7364af0d7019] Merge remote-tracking branch 'fuse/for-next'
git bisect good 1ca5eddcf8dca1d6345471c6404e7364af0d7019
# good: [8f6d7b3248705920187263a4e7147b0752ec7dcf] Merge remote-tracking branch 'pci/next'
git bisect good 8f6d7b3248705920187263a4e7147b0752ec7dcf
# good: [df1885a755784da3ef285f36d9230c1d090ef186] RDMA/rtrs_clt: Alloc less memory with write path fast memory registration
git bisect good df1885a755784da3ef285f36d9230c1d090ef186
# good: [93d31efb58c8ad4a66bbedbc2d082df458c04e45] Merge remote-tracking branch 'cpufreq-arm/cpufreq/arm/linux-next'
git bisect good 93d31efb58c8ad4a66bbedbc2d082df458c04e45
# good: [46308965ae6fdc7c25deb2e8c048510ae51bbe66] RDMA/irdma: Check contents of user-space irdma_mem_reg_req object
git bisect good 46308965ae6fdc7c25deb2e8c048510ae51bbe66
# good: [6de7a1d006ea9db235492b288312838d6878385f] thermal/drivers/int340x/processor_thermal: Split enumeration and processing part
git bisect good 6de7a1d006ea9db235492b288312838d6878385f
# good: [081bec2577cda3d04f6559c60b6f4e2242853520] dt-bindings: of: Add restricted DMA pool
git bisect good 081bec2577cda3d04f6559c60b6f4e2242853520
# good: [bf95ac0bcd69979af146852f6a617a60285ebbc1] Merge remote-tracking branch 'thermal/thermal/linux-next'
git bisect good bf95ac0bcd69979af146852f6a617a60285ebbc1
# good: [3d8287544223a3d2f37981c1f9ffd94d0b5e9ffc] RDMA/core: Always release restrack object
git bisect good 3d8287544223a3d2f37981c1f9ffd94d0b5e9ffc
# bad: [cff1f23fad6e0bd7d671acce0d15285c709f259c] Merge remote-tracking branch 'swiotlb/linux-next'
git bisect bad cff1f23fad6e0bd7d671acce0d15285c709f259c
# bad: [b655006619b7bccd0dc1e055bd72de5d613e7b5c] of: Add plumbing for restricted DMA pool
git bisect bad b655006619b7bccd0dc1e055bd72de5d613e7b5c
# first bad commit: [b655006619b7bccd0dc1e055bd72de5d613e7b5c] of: Add plumbing for restricted DMA pool


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 03:51:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 03:51:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149078.275560 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzACf-0002ek-0N; Fri, 02 Jul 2021 03:50:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149078.275560; Fri, 02 Jul 2021 03:50:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzACe-0002ed-Rl; Fri, 02 Jul 2021 03:50:56 +0000
Received: by outflank-mailman (input) for mailman id 149078;
 Fri, 02 Jul 2021 03:50:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzACd-0002eT-1q; Fri, 02 Jul 2021 03:50:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzACc-0007fb-Qw; Fri, 02 Jul 2021 03:50:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzACc-0006I9-9p; Fri, 02 Jul 2021 03:50:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzACc-0006Iu-9J; Fri, 02 Jul 2021 03:50:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=f4IrwvRjcovpIIV+F7WxvebaqdkwFWTbbDQ1oSCBBLM=; b=IKOrE7RBC9oe7LsLZMsx9sBciI
	muCdR8M3qro2qchd/neFor+jAKZVCWgqqhhw97jx+x937pM3/IrcsRIqR2PRYHADOFrvlKDCF7uXs
	kEAtPxtGdI46D5MGjzzpPwNEav7F/actvwd5/KyWmPCZhqcJsksCE7ux3Ta2jSifVQ8E=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163215-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163215: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-xsm:guest-start/debian.repeat:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=c288d9cd710433e5991d58a0764c4d08a933b871
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 03:50:54 +0000

flight 163215 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163215/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-xl-xsm     22 guest-start/debian.repeat fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                c288d9cd710433e5991d58a0764c4d08a933b871
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  335 days
Failing since        152366  2020-08-01 20:49:34 Z  334 days  569 attempts
Testing same since   163215  2021-07-01 19:41:07 Z    0 days    1 attempts

------------------------------------------------------------
6418 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      fail    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1805615 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 04:46:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 04:46:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149083.275574 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzB3r-0007k2-9M; Fri, 02 Jul 2021 04:45:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149083.275574; Fri, 02 Jul 2021 04:45:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzB3r-0007jv-4B; Fri, 02 Jul 2021 04:45:55 +0000
Received: by outflank-mailman (input) for mailman id 149083;
 Fri, 02 Jul 2021 04:45:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tiW2=L2=gmail.com=alistair23@srs-us1.protection.inumbo.net>)
 id 1lzB3q-0007jp-9f
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 04:45:54 +0000
Received: from mail-io1-xd2f.google.com (unknown [2607:f8b0:4864:20::d2f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c84291fa-e516-4e66-99a1-616021f2c5e9;
 Fri, 02 Jul 2021 04:45:53 +0000 (UTC)
Received: by mail-io1-xd2f.google.com with SMTP id f21so10153651ioh.13
 for <xen-devel@lists.xenproject.org>; Thu, 01 Jul 2021 21:45:53 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c84291fa-e516-4e66-99a1-616021f2c5e9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=8R7vzE3sMCLc8J7Cy3dbusGdeTZZo2sinRkBhrCFmms=;
        b=vTaC25hO73MXSL3xPAej+rc5V6NNcyjA9e2gk6Na2UN5AUZ1b/LvUAbsUFub2TeDcQ
         SnqMKnU1xekNb5TZe3LTGZsa+H92Mgzidgh8lJs6k8U8cb19GBvj9nvbkj+0R3g73LUQ
         1oZXDB9ybhX+tWcSb2W/PZdwfhpndH0+/E0CrN8ZeoihyFsdxRZbVhvRC0qVoBGVbdP/
         mfIbtSgVyP2Hg5NFeFxNs2eePudXkESuG3pTsc3XbtaeCXAi3JlVxIohSVbW9UAqOAzX
         GCzI8CenBjICm6Nkuym/wIxaxHIVoyJt44yKBheMwDSH6GN+zp3Iog5FXgD9E4DSEEsd
         sUDw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=8R7vzE3sMCLc8J7Cy3dbusGdeTZZo2sinRkBhrCFmms=;
        b=fNK6I2z5b74QCm832t8TnQXlnnrO/gs2MvrJn1o5gGnv5kYoIc2U6Kdf3Zdwvro3Li
         THMDq0cNQhHs79qAthzai0uKzaqLcb8iAQxk2XJt9yeN6xLtN+vCrIYwudym9CNOZSdI
         fpxTjhZK5Hy1riEK3B8uQwe7R8XhadOgkJ1acBNc0K6sJT1C7mJUHlBauNgAs+M3Jdbz
         YDoohHfvIm6lGmPuObBvTWqa7BHOFf/0HJv5TBemzNyxlI0bpJcYWx/SVwWOsQdos9MI
         qLWuCwU3Csbdhs2bxldGtTf72BKrlb0+PrdF88c58Rg7xnWMjaFEldNrbrhAP2Am3D1W
         RNtw==
X-Gm-Message-State: AOAM53250Cke1zojy6IkZsNNjlDMUGMkV73BOO+1chvfj2Kyrury7wFS
	M/tBDR87tYOEzSXWI7q/793KM981FS5xsWZ1I2Q=
X-Google-Smtp-Source: ABdhPJz/iJbO1+nGINTuz8kFu1jMtHs4zerb1uteu5ERhzJm1QbC8Dwd/Dv4EFWPHaHVIu7q2TjJ3GL4VMz7W4JsHG8=
X-Received: by 2002:a05:6638:614:: with SMTP id g20mr2722369jar.135.1625201153073;
 Thu, 01 Jul 2021 21:45:53 -0700 (PDT)
MIME-Version: 1.0
References: <20210701141011.785641-1-anthony.perard@citrix.com> <20210701141011.785641-32-anthony.perard@citrix.com>
In-Reply-To: <20210701141011.785641-32-anthony.perard@citrix.com>
From: Alistair Francis <alistair23@gmail.com>
Date: Fri, 2 Jul 2021 14:45:27 +1000
Message-ID: <CAKmqyKOAw3qWw=moLLeqE5EoehBBLeJMuV+7t3Vn0QiMMA16Gg@mail.gmail.com>
Subject: Re: [XEN PATCH v6 31/31] build,riscv: tell the build system about riscv64/head.S
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: "open list:X86" <xen-devel@lists.xenproject.org>, Bob Eshleman <bobbyeshleman@gmail.com>, 
	Alistair Francis <alistair.francis@wdc.com>, Connor Davis <connojdavis@gmail.com>
Content-Type: text/plain; charset="UTF-8"

On Fri, Jul 2, 2021 at 12:22 AM Anthony PERARD
<anthony.perard@citrix.com> wrote:
>
> This allows to `make arch/riscv/riscv64/head.o`.
>
> Example of rune on a fresh copy of the repository:
>     make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu- KBUILD_DEFCONFIG=tiny64_defconfig arch/riscv/riscv64/head.o
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  xen/arch/riscv/riscv64/Makefile | 1 +
>  1 file changed, 1 insertion(+)
>  create mode 100644 xen/arch/riscv/riscv64/Makefile
>
> diff --git a/xen/arch/riscv/riscv64/Makefile b/xen/arch/riscv/riscv64/Makefile
> new file mode 100644
> index 000000000000..15a4a65f6615
> --- /dev/null
> +++ b/xen/arch/riscv/riscv64/Makefile
> @@ -0,0 +1 @@
> +extra-y += head.o
> --
> Anthony PERARD
>
>


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 09:31:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 09:31:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149095.275585 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzFWI-00086Z-Ky; Fri, 02 Jul 2021 09:31:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149095.275585; Fri, 02 Jul 2021 09:31:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzFWI-00086S-Hk; Fri, 02 Jul 2021 09:31:34 +0000
Received: by outflank-mailman (input) for mailman id 149095;
 Fri, 02 Jul 2021 09:31:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=0qe+=L2=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1lzFWH-00086J-3M
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 09:31:33 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.5.55]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 18c9b473-f96f-42f0-87e2-392c2b5709c4;
 Fri, 02 Jul 2021 09:31:30 +0000 (UTC)
Received: from AM4PR05CA0022.eurprd05.prod.outlook.com (2603:10a6:205::35) by
 PAXPR08MB6955.eurprd08.prod.outlook.com (2603:10a6:102:1da::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Fri, 2 Jul
 2021 09:31:18 +0000
Received: from VE1EUR03FT030.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:205:0:cafe::38) by AM4PR05CA0022.outlook.office365.com
 (2603:10a6:205::35) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Fri, 2 Jul 2021 09:31:18 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT030.mail.protection.outlook.com (10.152.18.66) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:31:17 +0000
Received: ("Tessian outbound 80741586f868:v97");
 Fri, 02 Jul 2021 09:31:17 +0000
Received: from bc0f1798548d.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 68A4D265-0723-4ECC-9A55-98121966B23C.1; 
 Fri, 02 Jul 2021 09:30:39 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id bc0f1798548d.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 02 Jul 2021 09:30:39 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PR3PR08MB5866.eurprd08.prod.outlook.com (2603:10a6:102:85::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Fri, 2 Jul
 2021 09:30:30 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025%7]) with mapi id 15.20.4264.026; Fri, 2 Jul 2021
 09:30:30 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO2P123CA0021.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:a6::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:30:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 18c9b473-f96f-42f0-87e2-392c2b5709c4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=afZC5+m0/GvuAmPp0xHyVWxSco3LvhffrIB4q/FSOh8=;
 b=K+y8FldURuIGqC3iYIwubf4Om2Du1QiQVNAUYgbqiB2njaykVtrfGA5tqqWMb60nkTo/pQQ9/leJ9N/VT6DtdrIDelSX3gMMJXB5JL8r0nulPvJNyzkGEKpIxXsMuMfskk138yBFyQYqfls+C39O1KXuffmsYoOPmd9H9XdHIeQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: c7c573d22bb97714
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Nqr1SwRXFlxau1MXEPGw+/kHHLsKeEZIAhlDzrfHqhrWeUuW+Z4jc1HEPiLnPK0GEOOzbkYWauI5ET153HIXfRl19r4W9gKygPPBgA646n72Xshif56rhaUPDrMtQVu9w78tYNkyQw9pILR6PQtsFGorZqT6fsaEFHd4iM5ebyyggC0PW0YuCVlpOsOH5e68KWkMecQa5JVH4yD+ML9aTNhS6XchXgkKdlb9fzvaIm7T4m/b7tQPXkPN6k87MHiz+s7szj3gznqlTCaihz1i48bU3fXFKwEF/nXbuaSW7ZfF5Di/rED1FFigK7noJKOhYg9pSNxv6v9j1NXUU+Mz2Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=afZC5+m0/GvuAmPp0xHyVWxSco3LvhffrIB4q/FSOh8=;
 b=RNIBMnT4ahWJSgVNSI6QU70oX+bR2X2NKAVPc58svowFUgrySmHllZKjSnaedcAT6JSgriDgxYXqHsBpP/owEKCgdVbMzrFBo+VSvQVgLn10iorh6DUT9QkYsaQ+16kqtcctlrS7hFL7bT1uFx9sr4k763pMCo5KksQCWb2f6TaVD2bFmZTxtRprefSB+22tn7StuqxKWqv+hbdkioNi/vBURysh0vTkmSNjEXdVq9t5smeXTAccMdPeBpbFeNL+zgPNngEb3NH2QfMThNMe+LfVfRk11fPYD2tpdF5zRy84rQUsjesadRIL3vUHiCLnpacdMrf/YElviRyL91P4FQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=afZC5+m0/GvuAmPp0xHyVWxSco3LvhffrIB4q/FSOh8=;
 b=K+y8FldURuIGqC3iYIwubf4Om2Du1QiQVNAUYgbqiB2njaykVtrfGA5tqqWMb60nkTo/pQQ9/leJ9N/VT6DtdrIDelSX3gMMJXB5JL8r0nulPvJNyzkGEKpIxXsMuMfskk138yBFyQYqfls+C39O1KXuffmsYoOPmd9H9XdHIeQ=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v6 7/9] docs: Change Makefile and sphinx configuration for
 doxygen
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2107011037580.9437@sstabellini-ThinkPad-T480s>
Date: Fri, 2 Jul 2021 10:30:23 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <7C3269F1-3C61-4F39-82F9-9DE4C563849B@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-8-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231506040.24906@sstabellini-ThinkPad-T480s>
 <1FC1E8DF-8AED-4ABD-BE9A-DBBD9D66EDBB@arm.com>
 <alpine.DEB.2.21.2107011037580.9437@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO2P123CA0021.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:a6::33) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: db3f9d5b-1269-44d7-ce11-08d93d3c250e
X-MS-TrafficTypeDiagnostic: PR3PR08MB5866:|PAXPR08MB6955:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<PAXPR08MB69554580522BA77243741AA9E41F9@PAXPR08MB6955.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 YCRIufPq1sbx7UI19GfoxIjo1SlxgrYbFQ5rfa3oOZw4zBT3Qoh7TEW8xhga1YFq+Rmr/OyoHgyacCe15ZRKSreO9GDOb8nT3wvzLjOTeIiaNLwRZQ4U3d7bM7BqE92zCqnklhecclldsXvAK5fbvQ4WJAnau5geTLopjkUXhs+rfFy9IQb3KGR01V4e+8A9M/e9aCYXCIFjcIPlLaQKuOm6K4WV4znzotgr6iHX2KctUF38ba6VkyjV6ZEXwp5OL3dSHbzOFT/cYBGNc/0kIngy+jFqejc9v2Fd6GriQo12fcVHfn0AYKe6MFlx5rQdhBFMeW2s/+ru0+PoS8BVS5+vpcoB/Jf1JPbslri/3TXl5hvrjUHTC0nZFdXDId5grjjbpIOMONodDMSs0IL9sDWcCd9ROGc/kDPnqW/5qYIW1rRz/LKWrPxkPq2fxZERMC5IjPK0WcYynpE5vqWH3XNdhH/OCu3BM+0g88YCECH6+dg7oOpjz76LWbsXva2mqjbE7GoaWrHLm9NFMmdMovF0u/41VlVcGHEZMjUCfB/JOKo0wACvespH4M3fkSBFIp+RLdrARTnWaKGwGC9IN57xURWmL75YYb/dFdfcp7XQS8xra8s5damxxx3n9vU5ljW2SxlIig8KwcCxyXcC8SMJMwIk/NFd9+tj+fMG+J4IpuiwEumKAiz0VX5psoexxPENfgDECNdEfS8Pt790x+LkUki8iitAY8Pp4GSGl90=
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(136003)(39850400004)(346002)(366004)(376002)(26005)(2616005)(53546011)(16526019)(83380400001)(6486002)(186003)(38100700002)(2906002)(66476007)(66946007)(8676002)(44832011)(66556008)(52116002)(956004)(6512007)(5660300002)(478600001)(38350700002)(30864003)(6506007)(54906003)(6916009)(86362001)(4326008)(8936002)(36756003)(33656002)(316002)(6666004)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 =?utf-8?B?TkpCbzgrUlVYUzJMU1VOOEdWZ0Z2ejF2R0ZYK3JGQ0VkWGpSV3JmUEhrbVdj?=
 =?utf-8?B?K1lPZW84WXZVMDc1TlBSWGxMVW5QemJSRStRaG14cXhZeUJGWjl4R3pOajU2?=
 =?utf-8?B?VEtCSjNRYTRKenhpcVFhdUxqOTIzbml1VEZYb2JySHpjb05oWVZwb0hmZTB5?=
 =?utf-8?B?VFRmeXhMMjJkRWNldUE4SkdhSE5lR05kNGJBQUxmOGZUL3IvWkFWN0ZuVzhX?=
 =?utf-8?B?SUNJUW1NZm9wcUN2QlZ3bnRjZ1RwSmg1VUZzanNkRkZYQkppTzIySDArZzg5?=
 =?utf-8?B?eHM4NGRDTUxlMzhCTEZEeksrSnZkMDhTUHZSRnBya2c4d2xwMkUyUC8vYjdU?=
 =?utf-8?B?cUJIb0RSeTNWY0Y4eWkvTUhhYkQzVEdBbEtRanNRYVhmUTZicmxsU3pySVE5?=
 =?utf-8?B?OWxhRFFXakk3ZHlETmpSbjNOVWlaQi9WZGdnVy95TG5EMHd0emptdXBuVUVh?=
 =?utf-8?B?akZZczRURmMxYXFlb3VKazA1aEMrRlNWYi92VU5mb3JVWFVCTWFuY1dhU0NP?=
 =?utf-8?B?ZmpOYm9HQ0R1K1Z0N3BLbE5jZHBxOFp0KzQyY2NhRVV6Z1BQOUxuM2xZNE9F?=
 =?utf-8?B?WUJoWkpIZGVMa3o3clBqaTVGbmRSVFBNWTU0N3oxS3RQQTRGN2JhVGo5U295?=
 =?utf-8?B?Y3E3ZVJuYjZlSUNJR0RlL3FLZmN1UVJzQVZGZEsxMXA2aGVXeDBOM0hDU25r?=
 =?utf-8?B?bksydWlCYVdzbjd5R085dDJIYWR5TjVBS0xpTEUvRmE5QlNsczh3VnhrVEp1?=
 =?utf-8?B?VU9WZUJOL0xuNUZZSzVpekd4YUxGUVR4c3JDNXBUK2ZrY1NvaS9CTEx0ZWhQ?=
 =?utf-8?B?MUFCUTV0REJKTTJPeHNKQ0IyZnV0dFR1LzlTMTRZWXlZQzByZzZIT2RGOFBM?=
 =?utf-8?B?S0xhSllZbnJwYllkY3pxTHZCQUVpQXNoWDczYkR0a1hhSjRWUFM1ZFNMVXd6?=
 =?utf-8?B?cEZxUEJCcTBOQlQwU0RuSEtQaEhBdllkNkNicllUY3ZPM08wT0dvNWI3NzVG?=
 =?utf-8?B?NGRkY3c4a3VlbVg4eFhUc1MxWVcvc2R0MjNWTHRFWDFNa2ovWmxwU1RlclJL?=
 =?utf-8?B?QU1PNFBVY25FNXAwS21vMWd0UUFmeHltMUg0Zk9mQTJ0Z0txcTQ4dmFCcy9p?=
 =?utf-8?B?eXF2OTBid2pLWXNTNWVmZUFXVGNZNy9LeDV3ejdHMDM4SCsvaHVoMEJSbjlT?=
 =?utf-8?B?T1BvUjgyckRkL1JtaTJPWGpGSm1pc1dZRE0vMEtWL2k0aytKTU0xNGwwbXlR?=
 =?utf-8?B?b1IzdFYzRmhiMEkwWURZVERNcVpTMDN1ZlB6WjNxZENZTkRCSjlMMSswempI?=
 =?utf-8?B?S1JpSjRwWFdnb0E3a2ZrVkthdTc0b1o5OWRaSzVBTXJuUGJxd3BPNkZIU2R1?=
 =?utf-8?B?NGdJRjdjVTBZU1FKTThXWXBPLzZEVGhwME9sZGhtc1ByWkxZS3ppN0szaTVE?=
 =?utf-8?B?WEdQb3FRNFRNMUdkZVJJQm1iVXVPeno1OTM2MzVtajQrTC8xbzBVRHkwenpC?=
 =?utf-8?B?MHNCc3pKbzFuU0F0VnJsU1ptTFI4MVNDUUorRm5BeTZETnpkNlJieldac0wz?=
 =?utf-8?B?VDNvNC84NlRaTklUcWlwcDE4RnNiaHhkODJvYWpVT2Z3Mk9UWm5UdnBBbkRC?=
 =?utf-8?B?eUFLM292bzhXOXVJclZiZEpmbFVjUThHRHhtdHJDcmpEN002ZXd3aitzWFpt?=
 =?utf-8?B?Ly8vajRGVTJVc29sMThUbXNpV1cxR2I2dkVDcVJGTDVpTTJPdFErR0FHRS9t?=
 =?utf-8?Q?ypkmD3k751ZJCAQRvdrcIUD7MJkCW/H6vz2lrli?=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5866
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT030.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4f38b49f-1ab9-4441-bc3b-08d93d3c0840
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	yO+BJL5dldzcMznlFRlymTfvKTmr3zLujwX+Qv5DsSMgEXJwVQycydtD0YqpcvlJhetbrt27CUzteC8MReStj3c3B/qqyzuknZDGKjUsFWKrOu1fEo1+f79WOT0j7kb4uRC0fQpoQY9tbem2VjfTQuMmQS/p/TKgqm6BPfuSOom95AgLnJ2LsKT/X2a6+SrM/iVjE0Rfbs9nE7jImRQ6qk4HMZy4VFSwekVq/SVWmd1BuuqfEKBnMmJJiN+N5KxqZvjd8KeIthl/r/+Q5XUvKdihGFKOcHInYTAIsGjTX6DC0qY9th/dHsgD9vTqTLDLdBAuqGvHkQC4J45u3+OvU6J+EV86DVdLtBFLV7G/0AYLOepfERgqrRz/pk4SCLAWcqPmIc+Mlpf/hG720lTlPaLkDXn+b+xEXft3C3QBPKVrohUa22n+TpGTlALQfN66mGNKYVcrXbttYotapL64KMzE7w60mzlRxZlH/wQz7XeU9g9ELGwazLAJCrhSQyMs8L7vCbJB7xMDg1HIZ5lpgZZEGQn+h2/JPMt8g7WHYFhKkCYmkxfnB+8LuEx53I9UwVGoQOvi3XUXiJQYeKrmTVpZ8mOQuuIQhdtnMzL3jLzhPq+xWzLykw6h0e5JRJ11h5lH4Wp1H+aT8jvHUONCuwybYqqDyLAu8J6ZhcM1U+e2/gzpjV4R5MhETA7GLmNQDs6zTw3dx6Fz23TbqxeAvw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(396003)(39860400002)(376002)(46966006)(36840700001)(478600001)(186003)(70586007)(26005)(956004)(6512007)(33656002)(8676002)(30864003)(70206006)(82310400003)(316002)(36860700001)(16526019)(6862004)(54906003)(6486002)(5660300002)(356005)(4326008)(81166007)(83380400001)(6666004)(47076005)(8936002)(86362001)(336012)(82740400003)(53546011)(44832011)(2616005)(2906002)(36756003)(6506007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 09:31:17.7075
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: db3f9d5b-1269-44d7-ce11-08d93d3c250e
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT030.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6955

Hi Stefano,


> On 1 Jul 2021, at 18:43, Stefano Stabellini <sstabellini@kernel.org> wrot=
e:
>=20
> On Thu, 1 Jul 2021, Luca Fancellu wrote:
>>> On 24 Jun 2021, at 00:33, Stefano Stabellini <sstabellini@kernel.org> w=
rote:
>>>=20
>>> On Mon, 10 May 2021, Luca Fancellu wrote:
>>>> Modify docs/Makefile to call doxygen and generate sphinx
>>>> html documentation given the doxygen XML output.
>>>>=20
>>>> Modify docs/conf.py sphinx configuration file to setup
>>>> the breathe extension that works as bridge between
>>>> sphinx and doxygen.
>>>>=20
>>>> Add some files to the .gitignore to ignore some
>>>> generated files for doxygen.
>>>>=20
>>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>>>> ---
>>>> .gitignore    |  6 ++++++
>>>> docs/Makefile | 42 +++++++++++++++++++++++++++++++++++++++---
>>>> docs/conf.py  | 48 +++++++++++++++++++++++++++++++++++++++++++++---
>>>> 3 files changed, 90 insertions(+), 6 deletions(-)
>>>>=20
>>>> diff --git a/.gitignore b/.gitignore
>>>> index 1c2fa1530b..d271e0ce6a 100644
>>>> --- a/.gitignore
>>>> +++ b/.gitignore
>>>> @@ -58,6 +58,12 @@ docs/man7/
>>>> docs/man8/
>>>> docs/pdf/
>>>> docs/txt/
>>>> +docs/doxygen-output
>>>> +docs/sphinx
>>>> +docs/xen.doxyfile
>>>> +docs/xen.doxyfile.tmp
>>>> +docs/xen-doxygen/doxygen_include.h
>>>> +docs/xen-doxygen/doxygen_include.h.tmp
>>>> extras/mini-os*
>>>> install/*
>>>> stubdom/*-minios-config.mk
>>>> diff --git a/docs/Makefile b/docs/Makefile
>>>> index 8de1efb6f5..2f784c36ce 100644
>>>> --- a/docs/Makefile
>>>> +++ b/docs/Makefile
>>>> @@ -17,6 +17,18 @@ TXTSRC-y :=3D $(sort $(shell find misc -name '*.txt=
' -print))
>>>>=20
>>>> PANDOCSRC-y :=3D $(sort $(shell find designs/ features/ misc/ process/=
 specs/ \( -name '*.pandoc' -o -name '*.md' \) -print))
>>>>=20
>>>> +# Directory in which the doxygen documentation is created
>>>> +# This must be kept in sync with breathe_projects value in conf.py
>>>> +DOXYGEN_OUTPUT =3D doxygen-output
>>>> +
>>>> +# Doxygen input headers from xen-doxygen/doxy_input.list file
>>>> +DOXY_LIST_SOURCES !=3D cat "xen-doxygen/doxy_input.list"
>>>> +DOXY_LIST_SOURCES :=3D $(realpath $(addprefix $(XEN_ROOT)/,$(DOXY_LIS=
T_SOURCES)))
>>=20
>> Hi Stefano,
>>=20
>>>=20
>>> I cannot find exactly who is populating doxy_input.list. I can see it i=
s
>>> empty in patch #6. Does it get populated during the build?
>>=20
>> doxy_input.list is the only file that should be modified by the develope=
r when he/she wants to add documentation
>> for a new file to be parsed by Doxygen, in my patch about documenting gr=
ant_tables.h you can see I add
>> there the path =E2=80=9Cxen/include/public/grant_table.h"
>=20
> OK, thanks. I missed that addition.
>=20
>=20
>>>=20
>>>> +DOXY_DEPS :=3D xen.doxyfile \
>>>> +			 xen-doxygen/mainpage.md \
>>>> +			 xen-doxygen/doxygen_include.h
>>>> +
>>>> # Documentation targets
>>>> $(foreach i,$(MAN_SECTIONS), \
>>>>  $(eval DOC_MAN$(i) :=3D $(patsubst man/%.$(i),man$(i)/%.$(i), \
>>>> @@ -46,8 +58,28 @@ all: build
>>>> build: html txt pdf man-pages figs
>>>>=20
>>>> .PHONY: sphinx-html
>>>> -sphinx-html:
>>>> -	sphinx-build -b html . sphinx/html
>>>> +sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
>>>> +ifneq ($(SPHINXBUILD),no)
>>>=20
>>> This check on SPHINXBUILD is new, it wasn't there before. Why do we nee=
d
>>> it now? We are not really changing anything in regards to Sphinx, just
>>> adding Doxygen support. Or was it a mistake that it was missing even
>>> before this patch?
>>=20
>> Yes this is new, I saw that we didn=E2=80=99t look if sphinx was install=
ed in the system, so now we did
>=20
> In that case, I think anything related to SPHINXBUILD and whether sphinx
> is installed or not, should be a separate patch at the beginning of the
> series. It could be committed independently before the rest of the
> series. When we get to this patch, SPHINXBUILD should be already there.

I=E2=80=99ve introduced SPHINXBUILD in this patch: [PATCH v6 5/9] docs: add=
 checks to configure for sphinx and doxygen,
In your commend do you mean that you would like it to be outside this serie=
 and this serie to be based on top of that one?


>=20
>=20
>>>> +	$(DOXYGEN) xen.doxyfile
>>>> +	XEN_ROOT=3D$(realpath $(XEN_ROOT)) $(SPHINXBUILD) -b html . sphinx/h=
tml
>>>> +else
>>>> +	@echo "Sphinx is not installed; skipping sphinx-html documentation."
>>>> +endif
>>>> +
>>>> +xen.doxyfile: xen.doxyfile.in xen-doxygen/doxy_input.list
>>>> +	@echo "Generating $@"
>>>> +	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< \
>>>> +		| sed -e "s,@DOXY_OUT@,$(DOXYGEN_OUTPUT),g" > $@.tmp
>>>> +	@$(foreach inc,\
>>>> +		$(DOXY_LIST_SOURCES),\
>>>> +		echo "INPUT +=3D \"$(inc)\"" >> $@.tmp; \
>>>> +	)
>>>> +	mv $@.tmp $@
>>>> +
>>>> +xen-doxygen/doxygen_include.h: xen-doxygen/doxygen_include.h.in
>>>> +	@echo "Generating $@"
>>>> +	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< > $@.tmp
>>>> +	@mv $@.tmp $@
>>>=20
>>> Is the absolute path required? If not, we can probably get rid of this
>>> generation step and simply have the relative path in
>>> xen-doxygen/doxygen_include.h. I think this could apply to
>>> xen.doxyfile.in above.
>>=20
>> Unfortunately yes, the doxygen_include.h is a file that is included in e=
very documented header before=20
>> starting the doxygen parser, since we don=E2=80=99t have all the headers=
 in one path, it is impossible to have here
>> a relative path that is good for every header in Xen.
>=20
> OK :-/
>=20
>=20
>>>=20
>>>=20
>>>> .PHONY: html
>>>> html: $(DOC_HTML) html/index.html
>>>> @@ -71,7 +103,11 @@ clean: clean-man-pages
>>>> 	$(MAKE) -C figs clean
>>>> 	rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~
>>>> 	rm -rf *.ilg *.log *.ind *.toc *.bak *.tmp core
>>>> -	rm -rf html txt pdf sphinx/html
>>>> +	rm -rf html txt pdf sphinx $(DOXYGEN_OUTPUT)
>>>> +	rm -f xen.doxyfile
>>>> +	rm -f xen.doxyfile.tmp
>>>> +	rm -f xen-doxygen/doxygen_include.h
>>>> +	rm -f xen-doxygen/doxygen_include.h.tmp
>>>>=20
>>>> .PHONY: distclean
>>>> distclean: clean
>>>> diff --git a/docs/conf.py b/docs/conf.py
>>>> index 50e41501db..a48de42331 100644
>>>> --- a/docs/conf.py
>>>> +++ b/docs/conf.py
>>>> @@ -13,13 +13,17 @@
>>>> # add these directories to sys.path here. If the directory is relative=
 to the
>>>> # documentation root, use os.path.abspath to make it absolute, like sh=
own here.
>>>> #
>>>> -# import os
>>>> -# import sys
>>>> +import os
>>>> +import sys
>>>> # sys.path.insert(0, os.path.abspath('.'))
>>>>=20
>>>>=20
>>>> # -- Project information ---------------------------------------------=
--------
>>>>=20
>>>> +if "XEN_ROOT" not in os.environ:
>>>> +    sys.exit("$XEN_ROOT environment variable undefined.")
>>>> +XEN_ROOT =3D os.path.abspath(os.environ["XEN_ROOT"])
>>>> +
>>>> project =3D u'Xen'
>>>> copyright =3D u'2019, The Xen development community'
>>>> author =3D u'The Xen development community'
>>>> @@ -35,6 +39,7 @@ try:
>>>>            xen_subver =3D line.split(u"=3D")[1].strip()
>>>>        elif line.startswith(u"export XEN_EXTRAVERSION"):
>>>>            xen_extra =3D line.split(u"=3D")[1].split(u"$", 1)[0].strip=
()
>>>> +
>>>=20
>>> spurious change?
>>=20
>> I think I=E2=80=99ve intentionally added a new line to separate the code=
 from the except: below,
>> but if it is a problem I can remove it
>=20
> Better to remove it or to move it to a separate patch

Sure I=E2=80=99ll fix it

>=20
>=20
>>>=20
>>>> except:
>>>>    pass
>>>> finally:
>>>> @@ -44,6 +49,15 @@ finally:
>>>>    else:
>>>>        version =3D release =3D u"unknown version"
>>>>=20
>>>> +try:
>>>> +    xen_doxygen_output =3D None
>>>> +
>>>> +    for line in open(u"Makefile"):
>>>> +        if line.startswith(u"DOXYGEN_OUTPUT"):
>>>> +                xen_doxygen_output =3D line.split(u"=3D")[1].strip()
>>>> +except:
>>>> +    sys.exit("DOXYGEN_OUTPUT variable undefined.")
>>>=20
>>> This is a bit strange: isn't there a better way to get the
>>> DOXYGEN_OUTPUT variable than reading the Makefile?
>>>=20
>>> At that point I think it would be better to define DOXYGEN_OUTPUT a
>>> second time in conf.py. But maybe it could be passed as an evironmental
>>> variable?
>>=20
>> Yes we could pass it as an environment variable as we do with XEN_ROOT,
>> I will fix it in a next release.
>=20
> Great
>=20
>=20
>=20
>>>=20
>>>> # -- General configuration -------------------------------------------=
--------
>>>>=20
>>>> # If your documentation needs a minimal Sphinx version, state it here.
>>>> @@ -53,7 +67,8 @@ needs_sphinx =3D '1.4'
>>>> # Add any Sphinx extension module names here, as strings. They can be
>>>> # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
>>>> # ones.
>>>> -extensions =3D []
>>>> +# breathe -> extension that integrates doxygen xml output with sphinx
>>>> +extensions =3D ['breathe']
>>>>=20
>>>> # Add any paths that contain templates here, relative to this director=
y.
>>>> templates_path =3D ['_templates']
>>>> @@ -175,6 +190,33 @@ texinfo_documents =3D [
>>>>     'Miscellaneous'),
>>>> ]
>>>>=20
>>>> +# -- Options for Breathe extension ----------------------------------=
---------
>>>> +
>>>> +breathe_projects =3D {
>>>> +    "Xen": "{}/docs/{}/xml".format(XEN_ROOT, xen_doxygen_output)
>>>> +}
>>>> +breathe_default_project =3D "Xen"
>>>> +
>>>> +breathe_domain_by_extension =3D {
>>>> +    "h": "c",
>>>> +    "c": "c",
>>>> +}
>>>> +breathe_separate_member_pages =3D True
>>>> +breathe_show_enumvalue_initializer =3D True
>>>> +breathe_show_define_initializer =3D True
>>>> +
>>>> +# Qualifiers to a function are causing Sphihx/Breathe to warn about
>>>> +# Error when parsing function declaration and more.  This is a list
>>>> +# of strings that the parser additionally should accept as
>>>> +# attributes.
>>>> +cpp_id_attributes =3D [
>>>> +    '__syscall', '__deprecated', '__may_alias',
>>>> +    '__used', '__unused', '__weak',
>>>> +    '__DEPRECATED_MACRO', 'FUNC_NORETURN',
>>>> +    '__subsystem',
>>>=20
>>> Should we also have any of following:
>>>=20
>>> __packed
>>> __init
>>> __attribute__
>>> __aligned__
>>>=20
>>> in the list? In any case, we don't have to add them right now, we could
>>> add them later as we expand Doxygen coverage if they become needed.
>>=20
>> Sure it is possible, I can add them now since I have to push a fix for t=
his patch
>> If you want.
>=20
> I would add them now even if they are not strictly required to parse the
> public headers. But this is the kind of thing where others might have a
> different opinion.

Ok I will add them now if no one object to that.

Cheers,

Luca




From xen-devel-bounces@lists.xenproject.org Fri Jul 02 09:55:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 09:55:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149100.275595 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzFtX-000201-Dm; Fri, 02 Jul 2021 09:55:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149100.275595; Fri, 02 Jul 2021 09:55:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzFtX-0001zu-AQ; Fri, 02 Jul 2021 09:55:35 +0000
Received: by outflank-mailman (input) for mailman id 149100;
 Fri, 02 Jul 2021 09:55:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UVfj=L2=arm.com=rahul.singh@srs-us1.protection.inumbo.net>)
 id 1lzFtV-0001zo-EB
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 09:55:33 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.67]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8fbf92dc-1a8b-4f12-99ea-c3a9077968d1;
 Fri, 02 Jul 2021 09:55:31 +0000 (UTC)
Received: from AM5PR0402CA0019.eurprd04.prod.outlook.com
 (2603:10a6:203:90::29) by VE1PR08MB4912.eurprd08.prod.outlook.com
 (2603:10a6:802:a9::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Fri, 2 Jul
 2021 09:55:29 +0000
Received: from VE1EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:90:cafe::26) by AM5PR0402CA0019.outlook.office365.com
 (2603:10a6:203:90::29) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Fri, 2 Jul 2021 09:55:28 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT023.mail.protection.outlook.com (10.152.18.133) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:55:28 +0000
Received: ("Tessian outbound 1763b1d84bc3:v97");
 Fri, 02 Jul 2021 09:55:28 +0000
Received: from aa0dd6780e09.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 B04FDB58-CCF6-4D29-92AB-2AE20734A897.1; 
 Fri, 02 Jul 2021 09:54:44 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id aa0dd6780e09.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 02 Jul 2021 09:54:44 +0000
Received: from AS8PR08MB6919.eurprd08.prod.outlook.com (2603:10a6:20b:39e::10)
 by AM6PR08MB3880.eurprd08.prod.outlook.com (2603:10a6:20b:86::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Fri, 2 Jul
 2021 09:54:42 +0000
Received: from AS8PR08MB6919.eurprd08.prod.outlook.com
 ([fe80::2de3:452a:87cf:3ff5]) by AS8PR08MB6919.eurprd08.prod.outlook.com
 ([fe80::2de3:452a:87cf:3ff5%9]) with mapi id 15.20.4264.026; Fri, 2 Jul 2021
 09:54:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8fbf92dc-1a8b-4f12-99ea-c3a9077968d1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MAeN4g9hFqVqKa89MWTgNV1qnWJrfTy96z5kl5qbVYA=;
 b=MNXREkDXf83qR398MUpiuQJLdvHrPl3X9Qz5gZAAWYOtNt75pd9BitsZpVK02DW9fztpmkMMoZRTF7sZOqf86uep+OpQhveni7byob6+rKnO4mbDpqFFPZo3fCErnHDZeoeW6mkxcegkfuUBWYlMMb8nqmsDCBatiC0XMQx/a/I=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: ebc7a716a0c72ea9
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cbFLS3PzWzUmJyoa9Or9fsW3CJC5o6FOGVqf26D2iERwhuaOsKuq5gzrUt0yRFxR1R1f8Wexjx/ZZJhHl2idazLC89VXSRAnpVZwFO/NKB/IklB+pN3dmBHjLbrbaObvDycj2TaFZVdG6kYbAmv6ZbafRWoslStY2W7MKd3TPm3/Hqg3LeeKEY47vuoLRUsGdQzjOOmRX/Xy1fu5UikeE8Oomld+w5AkKhRRxpOz0qdukJgF7nfF4Dys76qHdPNFEJu2JIPnMGzn/JNSunED+jzbyv38sOKhxAWH8dBd+GL4ByzFKtn6R77w0U5LbqSbnO+duewW6zqj0SOFTqK8hQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MAeN4g9hFqVqKa89MWTgNV1qnWJrfTy96z5kl5qbVYA=;
 b=HG+Gk7zB3fHUKzDVDLTTV1BHXkmia1NrPsbIn0C2hkY4U6ZZvCzzZ4X+6W/8JrK78zexZOqdmPYXxieKvz862ItYtEyZnXXQ+81pB4CmEZ/CbVNs/+hprJXWRkah66IRs8h1sqC06h5WTnvHZBwPNaP6rzbyVltz53POGfP8kMSIunfelu+0CkqYVbiHgcNgW+KxTmEISv4pg9fUZ0Ylv2YgE5nHnI20vEjIRC3N6Atz4U7kLqXlQlmLcRiOHwI9Izho0gesjNkfvzo/jisoHd3/g+Cfuv1M9GiuOO3V7hMp8uOP4g2V4aA1Fj6RyGCeN2eYRFjCSlxU3L8l22k5+Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MAeN4g9hFqVqKa89MWTgNV1qnWJrfTy96z5kl5qbVYA=;
 b=MNXREkDXf83qR398MUpiuQJLdvHrPl3X9Qz5gZAAWYOtNt75pd9BitsZpVK02DW9fztpmkMMoZRTF7sZOqf86uep+OpQhveni7byob6+rKnO4mbDpqFFPZo3fCErnHDZeoeW6mkxcegkfuUBWYlMMb8nqmsDCBatiC0XMQx/a/I=
From: Rahul Singh <Rahul.Singh@arm.com>
To: Julien Grall <julien@xen.org>
CC: xen-devel <xen-devel@lists.xenproject.org>, Bertrand Marquis
	<Bertrand.Marquis@arm.com>, Stefano Stabellini <sstabellini@kernel.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH] xen/arm: smmuv1: Fixed stream matching register
 allocation
Thread-Topic: [PATCH] xen/arm: smmuv1: Fixed stream matching register
 allocation
Thread-Index: AQHXaeBuO8lC15Rvy0GU2dq6zulC56ssS6GAgACREoCAAAMWgIACnQOA
Date: Fri, 2 Jul 2021 09:54:41 +0000
Message-ID: <8BD37A47-7F82-4710-A37C-9C9C933913A9@arm.com>
References:
 <612e7f61c19e60019bb7829888342fda95fd36be.1624546532.git.rahul.singh@arm.com>
 <11df0a34-724a-63ad-1822-4bd8aa364ab0@xen.org>
 <BE2AB42D-A896-4FFE-856C-DA494D8DF1C8@arm.com>
 <f1a4cdb5-c525-8d6b-5f4d-7e2f2c090dcf@xen.org>
In-Reply-To: <f1a4cdb5-c525-8d6b-5f4d-7e2f2c090dcf@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [80.1.41.211]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 0834fae0-2706-47c4-69a6-08d93d3f85bd
x-ms-traffictypediagnostic: AM6PR08MB3880:|VE1PR08MB4912:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<VE1PR08MB4912213EBA88665262BB05D4FC1F9@VE1PR08MB4912.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 qHGMzuIxcPRy0HgoUcHUwKbf/XpCK5P07x5yS8GU4kV/jyuIl0X/943gsNQuXSHtWxLmBTjiE+rbq0qUl3SS82zeXJURjz3ACuxzuAP8bRrkd/6KjhqI7HE7YXdBYJ5D1xPBY5EgGi8B4f1YxQHIacvfqf7DVZxX7zZyWb8Y8s44v2tsYocTngySrByPvzGNOp0X6KIrDB4lhDVOPZ97qYMCuuVDvB3vpB+18mgCz4kCeEdO5NheSqX0C4zAIFuDYpV44tVRWNtf0JX1zzVhFZwBnKwnj5i+ndG04GtFPga8cPcIaKeVNBRprWaKhk7rX2Y0ShXXPxXAyU2e59BA5MXy4/LwY1FbpKv1K0ppfBwkngF62ntN0fB2GvAPk45R6jJNAWT1F1Dwdv4g7Y3m4SdzrVlfxv3xUEnaovdkD5p0BciX4w1eRBGVjZa3YXoKwmBzIHivz+d85dqrMxW8on8C/pqKn1TBkAFloM7OMxc35JtnmlLhEDVoTdLuCveHvIbtd64J0T2Yh2H23I4TOkoELvAFKHbLdlb3cath6dl9gvotbuF4dh6VoWFTR4ai8X0sl1Bkl4T191TWga0IpAiP3+2f6CV2W9VYATrebK12S4uEBtqFQcG25jp8gFO/u4iqHj1eSy5qvKB5/5xxoUOntmDuLph0FViFFhQzITu+5gN6NBCqPcNkHWnc81IhyDHqnaDYg2+89xyoJMTz6A==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6919.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(136003)(376002)(366004)(39850400004)(396003)(8936002)(26005)(6506007)(53546011)(86362001)(4326008)(2616005)(36756003)(186003)(83380400001)(8676002)(64756008)(66476007)(33656002)(6512007)(122000001)(71200400001)(38100700002)(2906002)(6916009)(76116006)(91956017)(54906003)(66446008)(5660300002)(478600001)(66946007)(316002)(6486002)(66556008)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?Il2Mn1fX1U/ECRXTvI1RMcLDkRebICnJ/bpMENTQgx0gGbmjEzaZErG+BFJn?=
 =?us-ascii?Q?GuqI1Dzfny8E6ZPncDagFaRVj4FAIrnMPM11gzCmS6Rlgx4T+gbxI+U/XRXU?=
 =?us-ascii?Q?cKNwqkAZ4LR0leSit0lnkJ5W0r8KREV4igr4xfyadXrCOVPQVipdAbpRcv3z?=
 =?us-ascii?Q?6BBLlEe5LV0/SHRaYE0wwZLIVcVTYofVw3QGzNm+q4y1ymz6YFE17TeZpFvB?=
 =?us-ascii?Q?76yHgn0KEZ7HjGLG+hl5tg0A6XokC1557HFDod5QNh6P1sQk1v4Uevf0j9z7?=
 =?us-ascii?Q?uhf+c4tLQaH4gQKrItM8pMkmVhvhrYa+NUxFP2uQZe1sc3ctKB8LJ9wG6gCU?=
 =?us-ascii?Q?260jlSp3hxL77L77wBDtmQV6Y9SqX/a0m9DwZVX0uDb62pe+W5qfioB+SLPG?=
 =?us-ascii?Q?scl3UC4M/8Nvaw16gSvJ8bTSnLXxiVLijRmZJoxrygNNnRX+ds09EDvJDadB?=
 =?us-ascii?Q?WlFQzYYvhQS1CRWXVvUpHcgYnhLXCRgOnRqyTLxpIUgxZ4l9xshbjdBFv4ZI?=
 =?us-ascii?Q?Yu8Tc8kPonHVFps7MNxG/uT5d73Lz5evD8rtho1KJJbvSVNbojmqdZVLPOuD?=
 =?us-ascii?Q?bOJpXbs1R3N0CfLTlwuxcXunrCsFRmehMyAMWpumJQ5WyGMaLmBsoEP3jPt9?=
 =?us-ascii?Q?VrpUy8cy/n4fuCMQcdV3sYWT79eAchvYQAuGAjL1F8AzEYbjV11Jgb2R7tmm?=
 =?us-ascii?Q?urlV0dpcU9Wpj/eXbbxUDBv+KFruUhiWMxw8s0EOr52NoDr+/WPeJVahE3Jy?=
 =?us-ascii?Q?IIQqgz0bekK6oGhObRCVsTbFLhNed7fvBQTzYp2dUnjVwdvgZxTL72oI0Scy?=
 =?us-ascii?Q?4ikxC9CqxmJtcpxEl358jI1orQ8YKcA2uXA89zcgh9uR0UryHZNxa7JQFkHg?=
 =?us-ascii?Q?wNVxl4hxPJKreVZ9/lBgmI/+sl4p2t/dYIsY13u0i17YoSr++FlJ5FbKE8GR?=
 =?us-ascii?Q?BWIAuOanQoQwaTAGw25faGkE4D4DIJ3ffRghAB/BavGvTWyFJa0FRt7ojtjw?=
 =?us-ascii?Q?9IptX//eIEMJhvEn3D8Y+R6VSk8s4eg/luYb/pl/iI8I/LC7fEr6/mtLRyKr?=
 =?us-ascii?Q?Q1cTis8aIq7VxMruUXAh2FCYDfRoiim2Y30oCtTToXmhVZWXNL2497/D05gH?=
 =?us-ascii?Q?hc3mUe1zZJqMXkaCA16lD9dXOayEBN5XiuxVxUB5j2JW4hld5T+vTO0pZD2U?=
 =?us-ascii?Q?yhJUITw6+zhzpscznxb4dEiNniWMqGbnE1AwatAvWX8aFx6jQu0rXyv5v8Lf?=
 =?us-ascii?Q?wxbhss7TvQQfykj3pSeHWAD74RyTEffE0a9y3MsGq905xA8dvFqM0Kwr0Zjg?=
 =?us-ascii?Q?OTao+ipjHweig/CZfGJA03uu?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <C020664E04687A4CA6FDCE216D7383AD@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3880
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	ba9d5ff7-9b82-436a-972b-08d93d3f6a12
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	G6Lqg5eGLpcQdNM3ZgZtvHg5lmtmy+uJ7pPjZ+3/ZJo3SuSzNxq2W59F/TQ5AzFrn9n1Kb4jo3AeMeWBfiPriZdWYTEA9l7++CehywaLFkFLPR5vYk7HG0oscSRPbgbVW14ybDmuH61youdxXr+k0x+NUIdbruRW1i2R+E8O+lhbfvWLk9V8VVbiCye5N0g2PjQk4Mk/caBS0JBQsZopWjl4OVNBiBpH63wqXJcMfTV89FAZTUSTNAiNQHtYSe2SJ0o7rrE/6NiE14gkrG6VndMKDPIDkKPhd3Z/Jy1cb9fUqomenauGkRYvHqrfgj3EZDR/bsGZfTYf/XxAJj5e+2KZWXCq6kmQv98LE9ACJ6F6DHpiCiWNX4DMyI7pYisM+WoXbXEtiyAdXYKMIQRHp2f5TQWyoOVXhnVj8J3K/J+JdxttfynkaDii14rV3kPBHh2RKNw1ztPoDOMoZHGE4VWy6hilgGWcimfl3rHI5IFe2XeOD0+XrnlaojRuv+CZqT/Ldgz1ONuiCnDGG+Z2Plh+70O28W18lnnEI0yQRRY9vKq67SIOu+PzCVzKvS5NmekrTSrParD7H3E2EY2EVqg9IeJi2SvWhqakHZaiLLX4FtmmqiC0xJdJwA5Z2qB0gKtJ5sGm7XjoQowpugm2km/Hz3alh9SLo04r91D2GrEgaWTwN45bcr2qO3IrGmxcZ6y1tOkhZShF43SwgOwGaA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(376002)(136003)(39850400004)(396003)(36840700001)(46966006)(478600001)(54906003)(6486002)(316002)(336012)(2616005)(6862004)(2906002)(81166007)(47076005)(8936002)(4326008)(33656002)(8676002)(82740400003)(107886003)(83380400001)(356005)(82310400003)(36860700001)(86362001)(70206006)(70586007)(6506007)(53546011)(6512007)(36756003)(5660300002)(26005)(186003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 09:55:28.4453
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 0834fae0-2706-47c4-69a6-08d93d3f85bd
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4912

Hi Julien,

> On 30 Jun 2021, at 7:00 pm, Julien Grall <julien@xen.org> wrote:
>=20
>=20
>=20
> On 30/06/2021 18:49, Rahul Singh wrote:
>> Hi Julien,
>=20
> Hi,
>=20
>>> On 30 Jun 2021, at 10:09 am, Julien Grall <julien@xen.org> wrote:
>>>=20
>>> Hi Rahul,
>>>=20
>>> On 25/06/2021 17:37, Rahul Singh wrote:
>>>> SMR allocation should be based on the number of supported stream
>>>> matching register for each SMMU device.
>>>> Issue introduced by commit 5e08586afbb90b2e2d56c175c07db77a4afa873c
>>>> when backported the patches from Linux to XEN to fix the stream match
>>>> conflict issue when two devices have the same stream-id.
>>>> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
>>>> Tested-by: Stefano Stabellini <sstabellini@kernel.org>
>>>> Signed-off-by: Rahul Singh <rahul.singh@arm.com>
>>>> ---
>>>>  xen/drivers/passthrough/arm/smmu.c | 3 ++-
>>>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>>> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthro=
ugh/arm/smmu.c
>>>> index d9a3a0cbf6..da2cd457d7 100644
>>>> --- a/xen/drivers/passthrough/arm/smmu.c
>>>> +++ b/xen/drivers/passthrough/arm/smmu.c
>>>> @@ -149,6 +149,7 @@ typedef enum irqreturn irqreturn_t;
>>>>  #define kzalloc(size, flags)		_xzalloc(size, sizeof(void *))
>>>>  #define devm_kzalloc(dev, size, flags)	_xzalloc(size, sizeof(void *))
>>>>  #define kmalloc_array(size, n, flags)	_xmalloc_array(size, sizeof(voi=
d *), n)
>>>> +#define kzalloc_array(size, n, flags)	_xzalloc_array(size, sizeof(voi=
d *), n)
>>>>    static void __iomem *devm_ioremap_resource(struct device *dev,
>>>>  					   struct resource *res)
>>>> @@ -2221,7 +2222,7 @@ static int arm_smmu_device_cfg_probe(struct arm_=
smmu_device *smmu)
>>>>  		smmu->smr_mask_mask =3D smr >> SMR_MASK_SHIFT;
>>>>    		/* Zero-initialised to mark as invalid */
>>>> -		smmu->smrs =3D devm_kzalloc(smmu->dev, sizeof(*smmu->smrs), GFP_KER=
NEL);
>>>> +		smmu->smrs =3D kzalloc_array(sizeof(*smmu->smrs), size, GFP_KERNEL)=
;
>>>=20
>>> I noticed this is already in... However, I am a bit puzzled into why th=
is was switched devm_kzalloc() to kzalloc_array(). This doesn't matter for =
Xen as they are just wrappers to x*alloc() but a mention in the commit mess=
age would have been useful.
>> Yes we can use the devm_kzalloc(..) but then we have to pass (sizeof(*sm=
mu->smrs) * size ) as size argument to devm_kzalloc(..)
>> I thought for better code readability I will use kzalloc_array() as the =
function name suggests we are allocating memory for an array.
>=20
> My point is devm_k*alloc() and k*alloc() are quite different on the paper=
. One will allocate memory for a given device while the other is unknown me=
mory.
>=20
> It would have been better to call the function devm_kzalloc_array() to ke=
ep to keep the code coherent. Can you please send a patch to make the switc=
h?

Ok. I will modify the code as per your request as below . I will use devm_k=
calloc(..) as this will be more coherent.

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/a=
rm/smmu.c
index da2cd457d7..658c40433c 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -149,7 +149,8 @@ typedef enum irqreturn irqreturn_t;
 #define kzalloc(size, flags)           _xzalloc(size, sizeof(void *))
 #define devm_kzalloc(dev, size, flags) _xzalloc(size, sizeof(void *))
 #define kmalloc_array(size, n, flags)  _xmalloc_array(size, sizeof(void *)=
, n)
-#define kzalloc_array(size, n, flags)  _xzalloc_array(size, sizeof(void *)=
, n)
+#define devm_kcalloc(dev, n, size, flags)                      \
+       _xzalloc_array(size, sizeof(void *), n)
=20
 static void __iomem *devm_ioremap_resource(struct device *dev,
                                           struct resource *res)
@@ -2222,7 +2223,8 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_=
device *smmu)
                smmu->smr_mask_mask =3D smr >> SMR_MASK_SHIFT;
=20
                /* Zero-initialised to mark as invalid */
-               smmu->smrs =3D kzalloc_array(sizeof(*smmu->smrs), size, GFP=
_KERNEL);
+               smmu->smrs =3D devm_kcalloc(smmu->dev, size, sizeof(*smmu->=
smrs),
+                                                               GFP_KERNEL)=
;
                if (!smmu->smrs)
                        return -ENOMEM;

Regards,
Rahul

>=20
> Cheers,
>=20
> --=20
> Julien Grall



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 10:34:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 10:34:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149104.275607 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzGUa-00069T-Hb; Fri, 02 Jul 2021 10:33:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149104.275607; Fri, 02 Jul 2021 10:33:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzGUa-00069M-ED; Fri, 02 Jul 2021 10:33:52 +0000
Received: by outflank-mailman (input) for mailman id 149104;
 Fri, 02 Jul 2021 10:33:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzGUZ-00069C-4F; Fri, 02 Jul 2021 10:33:51 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzGUY-00071c-SR; Fri, 02 Jul 2021 10:33:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzGUY-0001Bv-JO; Fri, 02 Jul 2021 10:33:50 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzGUY-0005Ms-It; Fri, 02 Jul 2021 10:33:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=M0w3TDJUzps+F3T3E+IEEnxvCx6FbJfmonQk2/Q/WSo=; b=nJ8GnylnVZaqIc8ZumyRTx0wYI
	w7zRqKgXPhn33/Iy5H7tp+TuDqc/0tMH/Qn5zEFIustJQIdiX9Wm4XTelsYQ3tyZp/Lb3rwoHltjT
	uEjpaA83TyaVjGXBdxC0FS0/xj8v1gJqCGdepGjsJJ3eI2xhcMj6GqozYIn2WpWDrgCA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163223-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163223: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=dfa1e9b3eb438866c122e4b8d0b4f99679f47cd2
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 10:33:50 +0000

flight 163223 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163223/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              dfa1e9b3eb438866c122e4b8d0b4f99679f47cd2
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  357 days
Failing since        151818  2020-07-11 04:18:52 Z  356 days  348 attempts
Testing same since   163223  2021-07-02 04:20:05 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63918 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 11:02:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 11:02:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149110.275621 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzGvn-0000mE-TK; Fri, 02 Jul 2021 11:01:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149110.275621; Fri, 02 Jul 2021 11:01:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzGvn-0000m7-PR; Fri, 02 Jul 2021 11:01:59 +0000
Received: by outflank-mailman (input) for mailman id 149110;
 Fri, 02 Jul 2021 11:01:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=0qe+=L2=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1lzGvm-0000m1-KT
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 11:01:58 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.71]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ea23cef5-db24-11eb-839e-12813bfff9fa;
 Fri, 02 Jul 2021 11:01:56 +0000 (UTC)
Received: from PR0P264CA0106.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::22)
 by AS8PR08MB6760.eurprd08.prod.outlook.com (2603:10a6:20b:393::18) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 2 Jul
 2021 11:01:54 +0000
Received: from VE1EUR03FT035.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:100:19:cafe::b7) by PR0P264CA0106.outlook.office365.com
 (2603:10a6:100:19::22) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Fri, 2 Jul 2021 11:01:54 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT035.mail.protection.outlook.com (10.152.18.110) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 11:01:53 +0000
Received: ("Tessian outbound 71a9bd19c2b9:v97");
 Fri, 02 Jul 2021 11:01:53 +0000
Received: from 003c9c2ec04b.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 311EB26B-1CE6-47B0-B5D5-46A8F6316B03.1; 
 Fri, 02 Jul 2021 11:01:15 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 003c9c2ec04b.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 02 Jul 2021 11:01:15 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PR3PR08MB5723.eurprd08.prod.outlook.com (2603:10a6:102:89::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Fri, 2 Jul
 2021 11:01:13 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::7cfd:a8eb:b25a:f025%7]) with mapi id 15.20.4264.026; Fri, 2 Jul 2021
 11:01:13 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO4P123CA0103.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:191::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 11:01:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ea23cef5-db24-11eb-839e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+uRhU4AslYb7IzQtRiQCkU8K6Wvpoh3wjruFiJ715nI=;
 b=EqjdiY7NLR8H/RhTL2HrQbqn/JKFUS0LjBpYBOrKPEML/Tg7KTjNDHah3WUwy4GqGacEU0IIGE8aOdFLOQ93/fRMrZQ+pwIY8n9tsX5DBC6HHkZhbOKLo+8wKNYtJ/uRL1Gr47BjwjoNxVRDEcI+AH0og57U3VInduB64tNbSN0=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 53e80b0f3dae74a7
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=E7hgOx7q9j482y+72cuLBiTRM6XghXxYeCUw4oT0TAQL7GExmYJAX9w/E6KTbsOyVNopeAk1L/z4dW2P6T6unX+qnafOsyxAh7yrkcreEDmd7YLXlXpBDCeZwj9DfpDCnNTnJyO7591BWuUaC96K6iLj7V/xEY1V5tvomeNaa0Ss8WMMGUp0m4j49r/UMiylQR+U6tOldx28bi/a78/xjqeppZomR15ukShnrdQGma2Xmv02/cNJiFlzmub2qKiJvtT4SVCDA1x0khDn0KUCV2vaBqBKuDP99zy5DjjC0LoliutG7jSCfLpYz1YTS8TzLIXaoS8j8VWLeixgsxB4uQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+uRhU4AslYb7IzQtRiQCkU8K6Wvpoh3wjruFiJ715nI=;
 b=jihwjj7qwUpTBDtb8m9/iR3RG/YbFzd/45kMgbBa9aM72Tnd7cWpdZGmmnLH/2JMWlyEKampQ2y6zuRM42BGr3w3kkG+Gw4prY1prO4WvQK/YW1lYvOq9MkvIvX/PSlGSv9cBnPPcfv9Ot1jrrgpXhhkGdTnqlN1mj90IPjjlEGWSa+mUw4riKwykm2DXbALLPvYY4LZ8O6YOCN6Z87mZk857cYPardFewXqKjHEWn/ByBI1UjC5G/6dHV36NBfA50hQ9VP1puUf7vqIcQ2RvBH28W0HoR8j648ZJ9FRzJTaYs2uVN7u5CZ6UyBz1OHMnx1a0HgKmBBzdnZk1ho/7A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+uRhU4AslYb7IzQtRiQCkU8K6Wvpoh3wjruFiJ715nI=;
 b=EqjdiY7NLR8H/RhTL2HrQbqn/JKFUS0LjBpYBOrKPEML/Tg7KTjNDHah3WUwy4GqGacEU0IIGE8aOdFLOQ93/fRMrZQ+pwIY8n9tsX5DBC6HHkZhbOKLo+8wKNYtJ/uRL1Gr47BjwjoNxVRDEcI+AH0og57U3VInduB64tNbSN0=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v6 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2107011043410.9437@sstabellini-ThinkPad-T480s>
Date: Fri, 2 Jul 2021 12:01:06 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <4E85233D-5371-4862-A0A5-2B653C677D54@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-10-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231530320.24906@sstabellini-ThinkPad-T480s>
 <31171081-1007-4B4E-91CC-25EA1041EB58@arm.com>
 <alpine.DEB.2.21.2107011043410.9437@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO4P123CA0103.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:191::18) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5ec88e60-a8d7-468f-1b97-08d93d48cd2e
X-MS-TrafficTypeDiagnostic: PR3PR08MB5723:|AS8PR08MB6760:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<AS8PR08MB67602BADB3BEDA40B7FBD68DE41F9@AS8PR08MB6760.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 iQmreDM5gfMKXoW47LtiF5fKBLuCy0tD3g0xtiroG/R5L94cbj+xR//6BDc62bdmRYoDqg5nC9FDVPTAaaXMiKtQN7atKsSlBomzpDtjwCbVG9ksWjErIWJrKWC46Gbt3zVmwHHWz1V5fozpYvTr5ehmNcduugM5PCYXILqm+HMRNFjTuQLjy0KkotujVCD57r4wwF8fLucA8Lyfh203bMmIcJ1SBjKN4D1oVM/KD4JBz1yXcyOMiQ/Z4QiN0ZeriJwRKwi2j1F4cSQIVg6fllKWBl8LGqgljBCerC72xhNvwpIUn/MXx+tXdDCQgPSc2+plUBkm2D5JxDyiSiYbhjz/YvB2njVCAKyjHgAmvENy0o7iDzf9yK5QbDGecTfbgjPWAWb2lciNTMEyOwFlKr13Z8gN5DHEavOYe1t7jgkK1pV3N/eKUZ8LjvU1/9jtcK9ZnxbEvr/ZowxsSfDOE4ZmDdcwT1CFvbSbxovAUCmU/MVIoLKJSIqn3xbP10bwCotAo8s2nTN4ynqOhz9NMMrAW4UYPbvyMbFS7wOO4bfMMqnNlrpxH4R5brbXO3ED9iiHjW8fm80SeY3dur7NOuQq5VCd2KjKYWT3fkJfapHafedACX/NH2qmAgVgmdV40YwnGKUzy4tmTX+cGbudEPIyAYXt/vb9FiEI1ST7i+XwEaFCuwuDagPAuUpCMirZ8AsFxQKP8VNGafxjsckHWH3CSc3JctmL6vGrEGJvLAck4A5z4CazONATcn63vUdrEoaUvENWK80rx2GxKojnRw==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(366004)(376002)(396003)(136003)(346002)(478600001)(5660300002)(66556008)(6916009)(956004)(2616005)(2906002)(66476007)(6486002)(6512007)(4326008)(316002)(44832011)(966005)(6666004)(66946007)(54906003)(26005)(53546011)(6506007)(52116002)(186003)(83380400001)(86362001)(33656002)(8936002)(36756003)(8676002)(16526019)(38350700002)(38100700002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5723
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT035.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	dd3599ae-0382-43c9-a46f-08d93d48b518
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	IJa7sfTYtyS9rZ8pTTW8r4Z7miadTkfdfZJZw82uDkONR/5xhRdZOHTmRoWuNoW1wPyDLT8swnRC19X+0jWhN2XLXsh0Cmk3thif6KhVzndP48wMMRw3WQAzYvXd8niJnk5vg/DL/jWSOc01ZioBcjgLpHMlK+bPh3Bbt48UANmBtBjHBMVvdLv6dFSiCPQe6HreIAbrpCh4STBQlHzLB31lohfodbngEmAsQctWXk9HpRsh/0K44Yl2u3IleSCb2dFMuaHZ4sGTyXxbp0Cpu5rDpOXupfnrf5zStaWF9/GJJAbxr47yJage+Tu21Kyqn9AdISFZ5uZ4XCuRObBylanV0RgR/Ocg2xZxeSgFcG4keyijzbHIu3+m8OqQsmYVBibiC0WraoxDpyriOMzj0Nw2agUfl/pxM+uAL80nErIYBNq+EukqIGkepJ5KjqkGWTJfy5Fh/ctrJ9IbU/rn1hKU7K1cRUHIi7/qtIr4mUDLj9pirSe16Tqii1CvGEHJ6riOI+It34YInuxXuo0Yq0lvWH7oeKIJSQwoeG0SzgZJRy9Kv1uB6UHIzOWmjJT9DdPMBCU6mMlJNg+ZgUiRLZUrMmO3sFJ2bL9VcHTpgmrHMmM/Pa44HwsHbylkLxahs9nUE5a1MZorcVtFW5pEQFZgIl1lERP/BcGux5uZTode27ckZT/ZEbeeaGM5wpXXqaYhSogng2FZQ76q1nNgx47xxfMdDTonppQRYSCTzZlZN0NkC+2Vi4TB5B/cuIOO
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(346002)(136003)(396003)(39850400004)(46966006)(36840700001)(2616005)(53546011)(6506007)(36756003)(956004)(186003)(33656002)(44832011)(16526019)(478600001)(8676002)(2906002)(26005)(336012)(47076005)(6486002)(86362001)(8936002)(36860700001)(6512007)(966005)(70586007)(82740400003)(6862004)(4326008)(5660300002)(70206006)(356005)(316002)(83380400001)(54906003)(82310400003)(6666004)(81166007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 11:01:53.7767
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 5ec88e60-a8d7-468f-1b97-08d93d48cd2e
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT035.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6760



> On 1 Jul 2021, at 18:44, Stefano Stabellini <sstabellini@kernel.org> wrot=
e:
>=20
> On Thu, 1 Jul 2021, Luca Fancellu wrote:
>> Hi Stefano,
>>=20
>>> On 24 Jun 2021, at 00:34, Stefano Stabellini <sstabellini@kernel.org> w=
rote:
>>>=20
>>> On Mon, 10 May 2021, Luca Fancellu wrote:
>>>> Modification to include/public/grant_table.h:
>>>>=20
>>>> 1) Add doxygen tags to:
>>>> - Create Grant tables section
>>>> - include variables in the generated documentation
>>>> - Used @keepindent/@endkeepindent to enclose comment
>>>>  section that are indented using spaces, to keep
>>>>  the indentation.
>>>> 2) Add .rst file for grant table for Arm64
>>>=20
>>> Why only arm64?
>>=20
>> This is a mistake, it should be just =E2=80=9CAdd .rst file for grant ta=
ble"
>>=20
>>>=20
>>>=20
>>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>>>> ---
>>>> v6 changes:
>>>> - Fix misaligned comment
>>>> - Moved comments to make them display in the docs
>>>> - Included more documentation in the docs
>>>> (see output here: https://luca.fancellu.gitlab.io/xen-docs/hypercall-i=
nterfaces/common/grant_tables.html)
>>>=20
>>> It looks much much better. All the info we care about seems to be there=
.
>>> The only things that I noticed missing and might be good to keep is the
>>> small comment about HYPERVISOR_grant_table_op:
>>>=20
>>> /* ` enum neg_errnoval
>>> * ` HYPERVISOR_grant_table_op(enum grant_table_op cmd,
>>> * `                           void *args,
>>> * `                           unsigned int count)
>>> * `
>>> *
>>> * @args points to an array of a per-command data structure. The array
>>> * has @count members
>>=20
>> Where do you want me to put this comment in the html page? In the end of=
 the description in the top of the page?
>=20
> Yeah, that looks like a good place

Great, for a preview, have a look on this: https://luca.fancellu.gitlab.io/=
xen-docs/hypercall-interfaces/common/grant_tables.html



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 11:15:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 11:15:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149116.275632 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzH8N-0002KH-4U; Fri, 02 Jul 2021 11:14:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149116.275632; Fri, 02 Jul 2021 11:14:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzH8N-0002KA-1N; Fri, 02 Jul 2021 11:14:59 +0000
Received: by outflank-mailman (input) for mailman id 149116;
 Fri, 02 Jul 2021 11:14:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzH8L-0002K0-CS; Fri, 02 Jul 2021 11:14:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzH8L-0007h5-5I; Fri, 02 Jul 2021 11:14:57 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzH8K-0003ew-Rx; Fri, 02 Jul 2021 11:14:56 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzH8K-0002aW-RT; Fri, 02 Jul 2021 11:14:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xNepEykTUdR1+8m4UdxuBL02+UAFLM2p/TH5Mmkw9GM=; b=SP57u/iGzKpk0YuNLqpoGASeUS
	vfwBB+96emEwPmmobLJz/qCLThR6t0pBOEUeqU7gMai7ZWTgNRzH3f1LQQSYbnTcPb0gHYd6BZ1Ma
	e6lspqfG/q7vHXe0jgD4uuaXXl5vpp1hi8iX4Ta23eaEJEalT7GVGtorJHisLHhhaEHE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163221-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163221: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 11:14:56 +0000

flight 163221 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163221/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   28 days
Failing since        162368  2021-06-04 15:42:59 Z   27 days   73 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 11:22:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 11:22:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149121.275645 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzHFy-0003jg-UJ; Fri, 02 Jul 2021 11:22:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149121.275645; Fri, 02 Jul 2021 11:22:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzHFy-0003jZ-R9; Fri, 02 Jul 2021 11:22:50 +0000
Received: by outflank-mailman (input) for mailman id 149121;
 Fri, 02 Jul 2021 11:22:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8c6G=L2=infradead.org=peterz@srs-us1.protection.inumbo.net>)
 id 1lzHFx-0003jT-Jr
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 11:22:50 +0000
Received: from desiato.infradead.org (unknown
 [2001:8b0:10b:1:d65d:64ff:fe57:4e05])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8bbc85ee-dc99-4ae4-9610-1b3e840d2519;
 Fri, 02 Jul 2021 11:22:45 +0000 (UTC)
Received: from j217100.upc-j.chello.nl ([24.132.217.100]
 helo=noisy.programming.kicks-ass.net)
 by desiato.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux))
 id 1lzHFD-00DqNT-HJ; Fri, 02 Jul 2021 11:22:03 +0000
Received: from hirez.programming.kicks-ass.net
 (hirez.programming.kicks-ass.net [192.168.1.225])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits))
 (Client did not present a certificate)
 by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 43862300091;
 Fri,  2 Jul 2021 13:22:00 +0200 (CEST)
Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000)
 id D797A20244CE2; Fri,  2 Jul 2021 13:22:00 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8bbc85ee-dc99-4ae4-9610-1b3e840d2519
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version:
	References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:
	Content-Transfer-Encoding:Content-ID:Content-Description;
	bh=O5Uqso+ww5amQ01DKigcD3vJJ7N3bwtD7LxAeQZ8NGo=; b=JYJbKRCaTtVjDzb/7N8Vg5ALJK
	Z9z+lgf5/nby+DFt32t6/4uiGrBJeKjTLVqqlBekOg4CgVhfQqk4bd+I/0DRjmpHrmNI77IlDRhYn
	JTJlDJI2+gb1fvdiaPk1sAjttTyO6N8hHeBFR/6wiUzGir5xO+zjr18vT2GDa7ueMv3jA0DvapxgS
	sORLkZ7+5aVcnyqMrOOh2sxuewdQjUzEt/H8Pa02qexOzNdz5irUkHr2OVQIQ7TUGNBbfjA6/qU55
	KLYzKy4dbIvNoL9okqBh6IPngAIxJ8W8lD+1vYchcUWAbhBempd1bUMgvDJN85yD8fulHZbpEdfXJ
	Z5/MAk+w==;
Date: Fri, 2 Jul 2021 13:22:00 +0200
From: Peter Zijlstra <peterz@infradead.org>
To: Zhu Lingshan <lingshan.zhu@intel.com>
Cc: pbonzini@redhat.com, bp@alien8.de, seanjc@google.com,
	vkuznets@redhat.com, wanpengli@tencent.com, jmattson@google.com,
	joro@8bytes.org, weijiang.yang@intel.com, kan.liang@linux.intel.com,
	ak@linux.intel.com, wei.w.wang@intel.com, eranian@google.com,
	liuxiangdong5@huawei.com, linux-kernel@vger.kernel.org,
	x86@kernel.org, kvm@vger.kernel.org, like.xu.linux@gmail.com,
	Like Xu <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>,
	Marc Zyngier <maz@kernel.org>, Guo Ren <guoren@kernel.org>,
	Nick Hu <nickhu@andestech.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu,
	linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
Message-ID: <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
 <20210622094306.8336-2-lingshan.zhu@intel.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210622094306.8336-2-lingshan.zhu@intel.com>

On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
> diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> index 8f71dd72ef95..c71af4cfba9b 100644
> --- a/arch/x86/events/core.c
> +++ b/arch/x86/events/core.c
> @@ -90,6 +90,27 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
>   */
>  DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
>  
> +DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
> +DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
> +DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
> +
> +void arch_perf_update_guest_cbs(void)
> +{
> +	static_call_update(x86_guest_state, (void *)&__static_call_return0);
> +	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
> +	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
> +
> +	if (perf_guest_cbs && perf_guest_cbs->state)
> +		static_call_update(x86_guest_state, perf_guest_cbs->state);
> +
> +	if (perf_guest_cbs && perf_guest_cbs->get_ip)
> +		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
> +
> +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
> +		static_call_update(x86_guest_handle_intel_pt_intr,
> +				   perf_guest_cbs->handle_intel_pt_intr);
> +}

Coding style wants { } on that last if().


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 11:33:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 11:33:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149125.275657 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzHQG-0005AQ-Vt; Fri, 02 Jul 2021 11:33:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149125.275657; Fri, 02 Jul 2021 11:33:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzHQG-0005AJ-S1; Fri, 02 Jul 2021 11:33:28 +0000
Received: by outflank-mailman (input) for mailman id 149125;
 Fri, 02 Jul 2021 11:33:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzHQF-00059t-Jv; Fri, 02 Jul 2021 11:33:27 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzHQF-000810-9v; Fri, 02 Jul 2021 11:33:27 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzHQE-0004N3-6E; Fri, 02 Jul 2021 11:33:26 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzHQE-0001dl-5j; Fri, 02 Jul 2021 11:33:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=pjKkfDJ92AvRweYX4G4aIbQEq8Zdil9QSca9w0f35KM=; b=HLeLvRcusHYCnW/SPxdmo1i8ks
	p+6AMMNBm6ygshEjzB6ToFO/dIvjwGPqpWpNwlUv6lAtLiXCIc0wiPTh7BBJOz250D9xQDmI3MNGA
	oW8Rv7qh9ZoscGFN7xK/thZp9FdpkSAsxiHPkD0psFBJWpZ5m3nEe1lwCROwYuqHupb0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163219-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163219: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-armhf-armhf-libvirt-raw:xen-boot:fail:heisenbug
    xen-unstable:test-amd64-i386-libvirt:xen-boot:fail:heisenbug
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
X-Osstest-Versions-That:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 11:33:26 +0000

flight 163219 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163219/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-libvirt-raw  8 xen-boot         fail in 163206 pass in 163219
 test-amd64-i386-libvirt       8 xen-boot                   fail pass in 163206

Tests which did not succeed, but are not blocking:
 test-amd64-i386-libvirt     15 migrate-support-check fail in 163206 never pass
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163190
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163206
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163206
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163206
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163206
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163206
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163206
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163206
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163206
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163206
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163206
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0
baseline version:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0

Last test of basis   163219  2021-07-02 01:52:38 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 11:40:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 11:40:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149130.275671 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzHWU-0005uL-St; Fri, 02 Jul 2021 11:39:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149130.275671; Fri, 02 Jul 2021 11:39:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzHWU-0005uE-Ps; Fri, 02 Jul 2021 11:39:54 +0000
Received: by outflank-mailman (input) for mailman id 149130;
 Fri, 02 Jul 2021 11:39:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=cwfD=L2=arm.com=robin.murphy@srs-us1.protection.inumbo.net>)
 id 1lzHWT-0005u7-70
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 11:39:53 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 796f2f0c-04b6-407f-a078-4c6ad2d07b3c;
 Fri, 02 Jul 2021 11:39:51 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 773371FB;
 Fri,  2 Jul 2021 04:39:51 -0700 (PDT)
Received: from [10.57.40.45] (unknown [10.57.40.45])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A5E473F718;
 Fri,  2 Jul 2021 04:39:44 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 796f2f0c-04b6-407f-a078-4c6ad2d07b3c
Subject: Re: [PATCH v15 12/12] of: Add plumbing for restricted DMA pool
To: Guenter Roeck <linux@roeck-us.net>, Claire Chang <tientzu@chromium.org>
Cc: Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
 Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
 Frank Rowand <frowand.list@gmail.com>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, boris.ostrovsky@oracle.com,
 jgross@suse.com, Christoph Hellwig <hch@lst.de>,
 Marek Szyprowski <m.szyprowski@samsung.com>,
 heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
 peterz@infradead.org, dri-devel@lists.freedesktop.org,
 chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
 mingo@kernel.org, jxgao@google.com, sstabellini@kernel.org,
 Saravana Kannan <saravanak@google.com>, xypron.glpk@gmx.de,
 "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
 linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
 Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
 matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
 airlied@linux.ie, Nicolas Boichat <drinkcat@chromium.org>,
 rodrigo.vivi@intel.com, bhelgaas@google.com,
 Dan Williams <dan.j.williams@intel.com>,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
 Greg KH <gregkh@linuxfoundation.org>, Randy Dunlap <rdunlap@infradead.org>,
 quic_qiancai@quicinc.com, lkml <linux-kernel@vger.kernel.org>,
 tfiga@chromium.org,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, thomas.lendacky@amd.com,
 linuxppc-dev@lists.ozlabs.org, bauerman@linux.ibm.com
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-13-tientzu@chromium.org>
 <20210702030807.GA2685166@roeck-us.net>
From: Robin Murphy <robin.murphy@arm.com>
Message-ID: <87ca3ada-22ed-f40c-0089-ca6fffc04f24@arm.com>
Date: Fri, 2 Jul 2021 12:39:41 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210702030807.GA2685166@roeck-us.net>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 2021-07-02 04:08, Guenter Roeck wrote:
> Hi,
> 
> On Thu, Jun 24, 2021 at 11:55:26PM +0800, Claire Chang wrote:
>> If a device is not behind an IOMMU, we look up the device node and set
>> up the restricted DMA when the restricted-dma-pool is presented.
>>
>> Signed-off-by: Claire Chang <tientzu@chromium.org>
>> Tested-by: Stefano Stabellini <sstabellini@kernel.org>
>> Tested-by: Will Deacon <will@kernel.org>
> 
> With this patch in place, all sparc and sparc64 qemu emulations
> fail to boot. Symptom is that the root file system is not found.
> Reverting this patch fixes the problem. Bisect log is attached.

Ah, OF_ADDRESS depends on !SPARC, so of_dma_configure_id() is presumably 
returning an unexpected -ENODEV from the of_dma_set_restricted_buffer() 
stub. That should probably be returning 0 instead, since either way it's 
not an error condition for it to simply do nothing.

Robin.

> 
> Guenter
> 
> ---
> # bad: [fb0ca446157a86b75502c1636b0d81e642fe6bf1] Add linux-next specific files for 20210701
> # good: [62fb9874f5da54fdb243003b386128037319b219] Linux 5.13
> git bisect start 'HEAD' 'v5.13'
> # bad: [f63c4fda987a19b1194cc45cb72fd5bf968d9d90] Merge remote-tracking branch 'rdma/for-next'
> git bisect bad f63c4fda987a19b1194cc45cb72fd5bf968d9d90
> # good: [46bb5dd1d2a63e906e374e97dfd4a5e33934b1c4] Merge remote-tracking branch 'ipsec/master'
> git bisect good 46bb5dd1d2a63e906e374e97dfd4a5e33934b1c4
> # good: [43ba6969cfb8185353a7a6fc79070f13b9e3d6d3] Merge remote-tracking branch 'clk/clk-next'
> git bisect good 43ba6969cfb8185353a7a6fc79070f13b9e3d6d3
> # good: [1ca5eddcf8dca1d6345471c6404e7364af0d7019] Merge remote-tracking branch 'fuse/for-next'
> git bisect good 1ca5eddcf8dca1d6345471c6404e7364af0d7019
> # good: [8f6d7b3248705920187263a4e7147b0752ec7dcf] Merge remote-tracking branch 'pci/next'
> git bisect good 8f6d7b3248705920187263a4e7147b0752ec7dcf
> # good: [df1885a755784da3ef285f36d9230c1d090ef186] RDMA/rtrs_clt: Alloc less memory with write path fast memory registration
> git bisect good df1885a755784da3ef285f36d9230c1d090ef186
> # good: [93d31efb58c8ad4a66bbedbc2d082df458c04e45] Merge remote-tracking branch 'cpufreq-arm/cpufreq/arm/linux-next'
> git bisect good 93d31efb58c8ad4a66bbedbc2d082df458c04e45
> # good: [46308965ae6fdc7c25deb2e8c048510ae51bbe66] RDMA/irdma: Check contents of user-space irdma_mem_reg_req object
> git bisect good 46308965ae6fdc7c25deb2e8c048510ae51bbe66
> # good: [6de7a1d006ea9db235492b288312838d6878385f] thermal/drivers/int340x/processor_thermal: Split enumeration and processing part
> git bisect good 6de7a1d006ea9db235492b288312838d6878385f
> # good: [081bec2577cda3d04f6559c60b6f4e2242853520] dt-bindings: of: Add restricted DMA pool
> git bisect good 081bec2577cda3d04f6559c60b6f4e2242853520
> # good: [bf95ac0bcd69979af146852f6a617a60285ebbc1] Merge remote-tracking branch 'thermal/thermal/linux-next'
> git bisect good bf95ac0bcd69979af146852f6a617a60285ebbc1
> # good: [3d8287544223a3d2f37981c1f9ffd94d0b5e9ffc] RDMA/core: Always release restrack object
> git bisect good 3d8287544223a3d2f37981c1f9ffd94d0b5e9ffc
> # bad: [cff1f23fad6e0bd7d671acce0d15285c709f259c] Merge remote-tracking branch 'swiotlb/linux-next'
> git bisect bad cff1f23fad6e0bd7d671acce0d15285c709f259c
> # bad: [b655006619b7bccd0dc1e055bd72de5d613e7b5c] of: Add plumbing for restricted DMA pool
> git bisect bad b655006619b7bccd0dc1e055bd72de5d613e7b5c
> # first bad commit: [b655006619b7bccd0dc1e055bd72de5d613e7b5c] of: Add plumbing for restricted DMA pool
> 


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 12:29:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 12:29:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149135.275681 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzIIe-0002KW-Pv; Fri, 02 Jul 2021 12:29:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149135.275681; Fri, 02 Jul 2021 12:29:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzIIe-0002KP-Mm; Fri, 02 Jul 2021 12:29:40 +0000
Received: by outflank-mailman (input) for mailman id 149135;
 Fri, 02 Jul 2021 12:29:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=mhJ0=L2=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1lzIId-0002KJ-Bm
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 12:29:39 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 29b1941e-db31-11eb-83ab-12813bfff9fa;
 Fri, 02 Jul 2021 12:29:37 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2050.outbound.protection.outlook.com [104.47.13.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-vftSAFXgONertm_4dqtRnA-1; Fri, 02 Jul 2021 14:29:35 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3934.eurprd04.prod.outlook.com (2603:10a6:803:1b::29)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.20; Fri, 2 Jul
 2021 12:29:32 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.023; Fri, 2 Jul 2021
 12:29:32 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0012.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Fri, 2 Jul 2021 12:29:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 29b1941e-db31-11eb-83ab-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625228976;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=OXCXkoq7qZBEYwgC4hG+ro2jpvJk8JLQN6Z4zTZq0hQ=;
	b=nwZR5yMPlkSU5sDEzmSpPiWKQAQ7wDxVFXs3oX2WUxi4ViZPbPOaCpNM2C9oUsmf6XoS0q
	PvWGbg1Jd9rC+19cWEWi7XKQE9koaV74dCPOJ3816LzzOQ2q3bhzSfrocVuynndcaHp7Pn
	XAuzrMj+MY/7dd37OnRVoyGlZ0vAv9Q=
X-MC-Unique: vftSAFXgONertm_4dqtRnA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=P8bN8gQjkon8mrsXNk5pu8YrATEWXhKBB7d79E4HJOXut9fJeZzyhXI1/wXiz+4CNQGMAkXiv8x1svRVx644n2K80k7hVojrpwAPrphXqjxW9TzRicvKLbrEudlaamrbQ0b9YCkpicjgow5JaA+nbFl6v1rmjJBUfdWkbUOUCV2yCSJHAy8XZCMKmxjMkgSs+PSVPz4BWy6ewHwvCqORN3u1eqpBZhRyClHQrZB3oqDz6PhWDvZ8k4F+Fb4yZ3aiM3AoXK5xDf1vtuhEqv+kHLRuEohCLIsG/jU128lO7AL+lsbrASzF00dkVz1ouGB5QOGIN97OZ4FHAHzpaXew9g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OXCXkoq7qZBEYwgC4hG+ro2jpvJk8JLQN6Z4zTZq0hQ=;
 b=VOHuIxbCpg5GR8qL0gR41u7D2F1Cg4TwWivihmQV4vQsdtsxBlZ5yDgNmsba33qgXpjCG/5Xo2L4cE+LyoE/wFA/shuM3R7Rl+P4w7k5e7qRXn5lMgYB08XB3bwK50t5bpX5Uwz4NEZ8miL0Gc2iFO0nD96NnqSSwGEIeXkKKz/K3XsiEu2Eo+jE1Dm1ph0BROlKEF0OsSBJyF9JtP5tFex8C4bYhRHblEb7BsdohngBAjzXREkJrrmaQzjNv0BbDhqccqpf0J6RRSCB8UsMLTUJ52VRCfwibcU/0JkXhrpK9RFUjL4j3EpFvwXYj0Wlj2CizK86vD37ri/Tjhpr6Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] libxl/x86: check return value of SHADOW_OP_SET_ALLOCATION
 domctl
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>
References: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>
 <YN2Mujj8jKGv7tik@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <4913d3f6-cd16-1865-9c19-99f7db615ded@suse.com>
Date: Fri, 2 Jul 2021 14:29:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YN2Mujj8jKGv7tik@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0012.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1d::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7e9c49c5-a595-4117-6b45-08d93d550b69
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3934:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB393443779A2C13B6B379532AB31F9@VI1PR0402MB3934.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	+mxBPYuRUJI13yJgLB/a88r9N90OUyhTD411Pq4Pug0avOvFH7cX1R69BoBePIyFg3HyZKBLFzWZUkgc+Zp1kPHHOmvsPwf0Ewb1AjOF+TJf1lTQ9aQj9SVc5KfK5wKk33whkmkFauIevkLS85Q4hj6HFODqveLkhptozecxVzZQYNzkIcU/r2WM5nchu0E+rIo0DyBrn0DD5Orhlawz98naWvbJlBaL0xlObSbSr/A63ZYowpNp/3DtIjgYU5tPKHIvaM/2Rsf6/MXeg6Aw0HfrTzmmWOuuLNS8VlGZ/Ea2SIdnVTKA5J1znwjJQonQJT7WTp5cJ8df5DyEZ3vQVPHY+C2cH3ZdVB0FB0Gvul7LPt+cFtuqVdeGRkgT39TsdYB9/42bfNDKdxw1i97u+IvANnE2S3GoI1Jq1H7GNQJ7/NyRioG9fb/btaytbJ9aLpzSSDEMXyupxU1rBe38tMy5YyHDL9BQf3lsnUdkjQwdHPa/juuitkN2GWhOiUtj9q4e2ikvUT561+cXJE3Ql8Dxl5NM34NXeFUXQdRPtTIdq7CjFYPTkDxF8gs28enx//1ckTrPvTc4hqqx2EozHqAgkmcr7D7TthjEo7btgmFSuUIXM4wh+yfv1+YPfI4brq/IbE8H9hTy0xcWNtM28JcPsZLFXWj2+qa74IC9zYZ8BteAZJeDgO6oEuohHNg2jsmSY9TVygvwcp95QtvGHvbiLMNkZoMMGW+7iCXg+Ik=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(366004)(136003)(346002)(376002)(26005)(36756003)(478600001)(8676002)(8936002)(16526019)(186003)(66946007)(66556008)(66476007)(6916009)(16576012)(86362001)(316002)(6486002)(38100700002)(53546011)(31686004)(54906003)(2616005)(956004)(2906002)(4326008)(5660300002)(31696002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7e9c49c5-a595-4117-6b45-08d93d550b69
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 12:29:32.5067
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yJQisQjKkzqC0Cbcz2WDT+xDX+9oS7v8RE64d1nfEKtDm66iHAbMe9QH8RCy0Ag9x6YDLTSfS4jEn/s24U0vgg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3934

On 01.07.2021 11:36, Anthony PERARD wrote:
> On Mon, Jun 28, 2021 at 01:47:03PM +0200, Jan Beulich wrote:
>> --- a/tools/libs/light/libxl_x86.c
>> +++ b/tools/libs/light/libxl_x86.c
>> @@ -531,8 +531,18 @@ int libxl__arch_domain_create(libxl__gc
>>      if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
>>          unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
>>                                             1024);
>> -        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
>> -                          NULL, 0, &shadow, 0, NULL);
>> +        int rc = xc_shadow_control(ctx->xch, domid,
> 
> Could you use 'r' instead of 'rc' ? The later is reserved for libxl
> error codes while the former is for system and libxc calls.

Of course I can, but I did look at the rest of the function and
found that it uses "ret" for the purpose of what you now say
"rc" ought to be used for. Seeing "ret", I decided to avoid it
(knowing you use different names for different kinds of return
values). While I've switched to "r" for now, I'd be rather
inclined to re-use "ret" instead. (Or actually, as per the
remark further down, I can get away without any local variable
then.)

>> +                                   XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
>> +                                   NULL, 0, &shadow, 0, NULL);
>> +
>> +        if (rc) {
> 
> xc_shadow_control seems to return "domctl.u.shadow_op.pages" in some
> cases, are all non-zero return value errors?

Indeed it does, but (a) we pass in zero here and (b) this
operation doesn't alter (nor even care about) the value. So I'd
prefer to stick to what I have, but if you tell me to switch to
"... < 0", I will.

>> +            LOGED(ERROR, domid,
>> +                  "Failed to set %s allocation: %d (errno:%d)\n",
> 
> LOGED already prints prints the meaning of the "errno" value, so we
> don't need to log it.

I see. Please note that again I took neighboring code (a few lines
down) for reference. Judging from other call sites (not the one
right below here) I infer I also shouldn't have \n in the format
string?

>> +                  libxl_defbool_val(d_config->c_info.hap) ? "HAP" : "shadow",
>> +                  rc, errno);
> 
> Is the return value of xc_shadow_control() actually useful when errno is
> already logged?

I don't know. Again what I had matches what can be found a few
lines down in the same function. But looking at other uses (in
other files) I'm getting the impression that it's useless -
dropped.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 13:18:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 13:18:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149140.275692 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJ48-00074w-Kw; Fri, 02 Jul 2021 13:18:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149140.275692; Fri, 02 Jul 2021 13:18:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJ48-00074p-I2; Fri, 02 Jul 2021 13:18:44 +0000
Received: by outflank-mailman (input) for mailman id 149140;
 Fri, 02 Jul 2021 13:18:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=t0DC=L2=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1lzJ47-00074j-AX
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 13:18:43 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04cb8054-db38-11eb-83ac-12813bfff9fa;
 Fri, 02 Jul 2021 13:18:41 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 4D3B36109D;
 Fri,  2 Jul 2021 13:18:33 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 04cb8054-db38-11eb-83ac-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625231920;
	bh=GDNc99vWU2EKYVywroGm/MONGRMfJ1bw5GtcP1Kxyew=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=UpJXnxcF4r+u8N9In3Ngt/3KsBiIssEtR46hbKVGD4imJoDwZps2CiNu9/tX6XODL
	 RkRPeCMJzkowmvGyx+vBIS2hY1z4ccknZBrbZdUt3JmjE2xh4ItTea2grkiScPUhIn
	 HLmoRTEOJQbfW+p5GY0xQ0VKUewGU1RsIqEJOhMbpuv3pp74w18YlrSAOnrKBIP55s
	 v+J/uIyo0HZY5XHsn1OOtuplTl/3fBAHP0aXr8wAQJjJJZ7gIcW+IXijJkOA5vhe1e
	 A78+z8Z0KIiDl7b4jtkq2bGKSaVHIDksVIMFkEDwiE3IncWj68Vxm0ezE9lm9A76mg
	 Qcdpn8Gt/MWYA==
Date: Fri, 2 Jul 2021 14:18:29 +0100
From: Will Deacon <will@kernel.org>
To: Robin Murphy <robin.murphy@arm.com>
Cc: Guenter Roeck <linux@roeck-us.net>, Claire Chang <tientzu@chromium.org>,
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	mingo@kernel.org, jxgao@google.com, sstabellini@kernel.org,
	Saravana Kannan <saravanak@google.com>, xypron.glpk@gmx.de,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>, airlied@linux.ie,
	Nicolas Boichat <drinkcat@chromium.org>, rodrigo.vivi@intel.com,
	bhelgaas@google.com, Dan Williams <dan.j.williams@intel.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>, quic_qiancai@quicinc.com,
	lkml <linux-kernel@vger.kernel.org>, tfiga@chromium.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, thomas.lendacky@amd.com,
	linuxppc-dev@lists.ozlabs.org, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 12/12] of: Add plumbing for restricted DMA pool
Message-ID: <20210702131829.GA11132@willie-the-truck>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-13-tientzu@chromium.org>
 <20210702030807.GA2685166@roeck-us.net>
 <87ca3ada-22ed-f40c-0089-ca6fffc04f24@arm.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <87ca3ada-22ed-f40c-0089-ca6fffc04f24@arm.com>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Fri, Jul 02, 2021 at 12:39:41PM +0100, Robin Murphy wrote:
> On 2021-07-02 04:08, Guenter Roeck wrote:
> > On Thu, Jun 24, 2021 at 11:55:26PM +0800, Claire Chang wrote:
> > > If a device is not behind an IOMMU, we look up the device node and set
> > > up the restricted DMA when the restricted-dma-pool is presented.
> > > 
> > > Signed-off-by: Claire Chang <tientzu@chromium.org>
> > > Tested-by: Stefano Stabellini <sstabellini@kernel.org>
> > > Tested-by: Will Deacon <will@kernel.org>
> > 
> > With this patch in place, all sparc and sparc64 qemu emulations
> > fail to boot. Symptom is that the root file system is not found.
> > Reverting this patch fixes the problem. Bisect log is attached.
> 
> Ah, OF_ADDRESS depends on !SPARC, so of_dma_configure_id() is presumably
> returning an unexpected -ENODEV from the of_dma_set_restricted_buffer()
> stub. That should probably be returning 0 instead, since either way it's not
> an error condition for it to simply do nothing.

Something like below?

Will

--->8

>From 4d9dcb9210c1f37435b6088284e04b6b36ee8c4d Mon Sep 17 00:00:00 2001
From: Will Deacon <will@kernel.org>
Date: Fri, 2 Jul 2021 14:13:28 +0100
Subject: [PATCH] of: Return success from of_dma_set_restricted_buffer() when
 !OF_ADDRESS

When CONFIG_OF_ADDRESS=n, of_dma_set_restricted_buffer() returns -ENODEV
and breaks the boot for sparc[64] machines. Return 0 instead, since the
function is essentially a glorified NOP in this configuration.

Cc: Claire Chang <tientzu@chromium.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reported-by: Guenter Roeck <linux@roeck-us.net>
Suggested-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/20210702030807.GA2685166@roeck-us.net
Signed-off-by: Will Deacon <will@kernel.org>
---
 drivers/of/of_private.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
index 8fde97565d11..34dd548c5eac 100644
--- a/drivers/of/of_private.h
+++ b/drivers/of/of_private.h
@@ -173,7 +173,8 @@ static inline int of_dma_get_range(struct device_node *np,
 static inline int of_dma_set_restricted_buffer(struct device *dev,
 					       struct device_node *np)
 {
-	return -ENODEV;
+	/* Do nothing, successfully. */
+	return 0;
 }
 #endif
 
-- 
2.32.0.93.g670b81a890-goog



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 13:49:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 13:49:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149145.275703 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJXT-0001iC-W7; Fri, 02 Jul 2021 13:49:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149145.275703; Fri, 02 Jul 2021 13:49:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJXT-0001i5-SI; Fri, 02 Jul 2021 13:49:03 +0000
Received: by outflank-mailman (input) for mailman id 149145;
 Fri, 02 Jul 2021 13:49:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=j+um=L2=gmail.com=groeck7@srs-us1.protection.inumbo.net>)
 id 1lzJXS-0001hz-1h
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 13:49:02 +0000
Received: from mail-ot1-x333.google.com (unknown [2607:f8b0:4864:20::333])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2da892b3-a654-4c8e-8c23-2ccfa732e28c;
 Fri, 02 Jul 2021 13:49:01 +0000 (UTC)
Received: by mail-ot1-x333.google.com with SMTP id
 i12-20020a05683033ecb02903346fa0f74dso10074494otu.10
 for <xen-devel@lists.xenproject.org>; Fri, 02 Jul 2021 06:49:01 -0700 (PDT)
Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c])
 by smtp.gmail.com with ESMTPSA id
 n26sm599488oos.14.2021.07.02.06.48.55
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Fri, 02 Jul 2021 06:48:59 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 2da892b3-a654-4c8e-8c23-2ccfa732e28c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=9x+juvDeOlaCtKmozneQfrCt9yo0Whbh1MNkOy7JJZU=;
        b=UEjOTwG3dEw4BMs9zskTAlB/qyEqwJyHyp2F3uc3IEyjANLR6uP1/H9KR/MbGUoN+q
         uXXp5fn/iI8ZGaLxshXE1VQxeK5/3UWORkO2pNxSV6JX6TB55C98dgtqR+ifQCzwR/+E
         tWXw5g4HJNLzPOLmN5ZESxRdKK1SlSI9vIjSxu/oxrzoNqDVDJAp6devlE/I9vjje1jl
         UriRs+KKNlto9yhu5Cc6j3zBlDtCEQbiH6DoyRIcLxwtvRuZjbkzbi0yal/mv3qJLt2a
         3fiDvGnsl5Hudqdx9BEktUwL9MS3wAY6jCzLNb0Q5Ly1c+F45rGX3brSqu3cPed6aviv
         JOqw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:subject:to:cc:references:from:message-id
         :date:user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=9x+juvDeOlaCtKmozneQfrCt9yo0Whbh1MNkOy7JJZU=;
        b=ZCTGP4CyT+8Z9LyRsplfQinqlw+A048EpprqlN0KfKpgs9CzGHx0FQYQRfCfTeNOIc
         0j3s3OYrbDVqyJomjoaDrEOvhMxpQp/M82NUu2qIBH/jv9TccfQfTsO8dnRLNe4iGg/6
         cjuyDohMLfbrX+nRQ6rotVEnFgtPl0bd2KL9a56CV4rCPNKCBYY2Lvc1q+TKvn/cG/Kw
         t2giVmLbl8kANcdLKvhgedbs2lMKZAxrIlZp5hP+g4Gjwr5MbDklW56cTBl22XjnPIoK
         GDWqy9dSZrhMbePFdwqipvT47zxwXpG6nllaTYYNj5syFbwrUQWNQJy1/cPm5ygUaY6W
         ZKOQ==
X-Gm-Message-State: AOAM530LKbpqS8LMRXTV0010TE8god9sjpeSwifWmuPE2MefWqKVAA6W
	D6kXX987wcf8VXbSeqn3KQo=
X-Google-Smtp-Source: ABdhPJzlnGPxxKYZSXkVHHmfsdkLH9E7ecEfVsvBHCQZR82klKUBGGO/PYD4fEoEphoBmS1gKABKng==
X-Received: by 2002:a05:6830:823:: with SMTP id t3mr4518459ots.334.1625233740480;
        Fri, 02 Jul 2021 06:49:00 -0700 (PDT)
Sender: Guenter Roeck <groeck7@gmail.com>
Subject: Re: [PATCH v15 12/12] of: Add plumbing for restricted DMA pool
To: Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>
Cc: Claire Chang <tientzu@chromium.org>, Rob Herring <robh+dt@kernel.org>,
 mpe@ellerman.id.au, Joerg Roedel <joro@8bytes.org>,
 Frank Rowand <frowand.list@gmail.com>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, boris.ostrovsky@oracle.com,
 jgross@suse.com, Christoph Hellwig <hch@lst.de>,
 Marek Szyprowski <m.szyprowski@samsung.com>,
 heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
 peterz@infradead.org, dri-devel@lists.freedesktop.org,
 chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
 mingo@kernel.org, jxgao@google.com, sstabellini@kernel.org,
 Saravana Kannan <saravanak@google.com>, xypron.glpk@gmx.de,
 "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
 linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
 Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
 matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
 airlied@linux.ie, Nicolas Boichat <drinkcat@chromium.org>,
 rodrigo.vivi@intel.com, bhelgaas@google.com,
 Dan Williams <dan.j.williams@intel.com>,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
 Greg KH <gregkh@linuxfoundation.org>, Randy Dunlap <rdunlap@infradead.org>,
 quic_qiancai@quicinc.com, lkml <linux-kernel@vger.kernel.org>,
 tfiga@chromium.org,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, thomas.lendacky@amd.com,
 linuxppc-dev@lists.ozlabs.org, bauerman@linux.ibm.com
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-13-tientzu@chromium.org>
 <20210702030807.GA2685166@roeck-us.net>
 <87ca3ada-22ed-f40c-0089-ca6fffc04f24@arm.com>
 <20210702131829.GA11132@willie-the-truck>
From: Guenter Roeck <linux@roeck-us.net>
Message-ID: <2f2d6633-2457-f7eb-81c1-355f56dc34ce@roeck-us.net>
Date: Fri, 2 Jul 2021 06:48:54 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210702131829.GA11132@willie-the-truck>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/2/21 6:18 AM, Will Deacon wrote:
> On Fri, Jul 02, 2021 at 12:39:41PM +0100, Robin Murphy wrote:
>> On 2021-07-02 04:08, Guenter Roeck wrote:
>>> On Thu, Jun 24, 2021 at 11:55:26PM +0800, Claire Chang wrote:
>>>> If a device is not behind an IOMMU, we look up the device node and set
>>>> up the restricted DMA when the restricted-dma-pool is presented.
>>>>
>>>> Signed-off-by: Claire Chang <tientzu@chromium.org>
>>>> Tested-by: Stefano Stabellini <sstabellini@kernel.org>
>>>> Tested-by: Will Deacon <will@kernel.org>
>>>
>>> With this patch in place, all sparc and sparc64 qemu emulations
>>> fail to boot. Symptom is that the root file system is not found.
>>> Reverting this patch fixes the problem. Bisect log is attached.
>>
>> Ah, OF_ADDRESS depends on !SPARC, so of_dma_configure_id() is presumably
>> returning an unexpected -ENODEV from the of_dma_set_restricted_buffer()
>> stub. That should probably be returning 0 instead, since either way it's not
>> an error condition for it to simply do nothing.
> 
> Something like below?
> 

Yes, that does the trick.

> Will
> 
> --->8
> 
>>From 4d9dcb9210c1f37435b6088284e04b6b36ee8c4d Mon Sep 17 00:00:00 2001
> From: Will Deacon <will@kernel.org>
> Date: Fri, 2 Jul 2021 14:13:28 +0100
> Subject: [PATCH] of: Return success from of_dma_set_restricted_buffer() when
>   !OF_ADDRESS
> 
> When CONFIG_OF_ADDRESS=n, of_dma_set_restricted_buffer() returns -ENODEV
> and breaks the boot for sparc[64] machines. Return 0 instead, since the
> function is essentially a glorified NOP in this configuration.
> 
> Cc: Claire Chang <tientzu@chromium.org>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Suggested-by: Robin Murphy <robin.murphy@arm.com>
> Link: https://lore.kernel.org/r/20210702030807.GA2685166@roeck-us.net
> Signed-off-by: Will Deacon <will@kernel.org>

Tested-by: Guenter Roeck <linux@roeck-us.net>

> ---
>   drivers/of/of_private.h | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
> index 8fde97565d11..34dd548c5eac 100644
> --- a/drivers/of/of_private.h
> +++ b/drivers/of/of_private.h
> @@ -173,7 +173,8 @@ static inline int of_dma_get_range(struct device_node *np,
>   static inline int of_dma_set_restricted_buffer(struct device *dev,
>   					       struct device_node *np)
>   {
> -	return -ENODEV;
> +	/* Do nothing, successfully. */
> +	return 0;
>   }
>   #endif
>   
> 



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 13:59:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 13:59:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149150.275714 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJhH-00039E-SX; Fri, 02 Jul 2021 13:59:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149150.275714; Fri, 02 Jul 2021 13:59:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJhH-000397-PU; Fri, 02 Jul 2021 13:59:11 +0000
Received: by outflank-mailman (input) for mailman id 149150;
 Fri, 02 Jul 2021 13:59:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=t0DC=L2=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1lzJhG-000391-FL
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 13:59:10 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fef40f88-8c4d-448c-8a71-2bca51ebaed8;
 Fri, 02 Jul 2021 13:59:09 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id E67B26142B;
 Fri,  2 Jul 2021 13:59:00 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fef40f88-8c4d-448c-8a71-2bca51ebaed8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625234348;
	bh=GAzz+9Wi5F3smddcMqAPXL+yX+g6y+b7+ZdyCyCYk6o=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=DRFf+Wzi4/1+CXjK9WTjhUw5flwP67NTwGefIxgOECtBfi65Tj3m3RZAnGmMeaHWN
	 2nB6ydioSV2HMouSGryEIIBRdSlehAFMTcH+PJ43Fzncx1dyolaRkF7sppvivPuZf7
	 cPX4Boe7jQMJiyFe3ZHKT4MFIZG39Q+YJQliaRWFbkh7/vzRbU7bxJi79Z1ru+gtBo
	 ad1ubKsTeSBiWjEpbwdaLM3RhLgyMoL6khfdtq+W/6U3noQUe78qA62SPzsLgc5K4n
	 HLEZtG+/PJtTdlqtEwnI8LIwqrv30Hz5pVN+cgBES579vlL24El76ac3B9gttOgNJw
	 +e4R0HS7ObwsQ==
Date: Fri, 2 Jul 2021 14:58:57 +0100
From: Will Deacon <will@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Claire Chang <tientzu@chromium.org>, Rob Herring <robh+dt@kernel.org>,
	mpe@ellerman.id.au, Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210702135856.GB11132@willie-the-truck>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-7-tientzu@chromium.org>
 <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
User-Agent: Mutt/1.10.1 (2018-07-13)

Hi Nathan,

On Thu, Jul 01, 2021 at 12:52:20AM -0700, Nathan Chancellor wrote:
> On 7/1/2021 12:40 AM, Will Deacon wrote:
> > On Wed, Jun 30, 2021 at 08:56:51AM -0700, Nathan Chancellor wrote:
> > > On Wed, Jun 30, 2021 at 12:43:48PM +0100, Will Deacon wrote:
> > > > On Wed, Jun 30, 2021 at 05:17:27PM +0800, Claire Chang wrote:
> > > > > `BUG: unable to handle page fault for address: 00000000003a8290` and
> > > > > the fact it crashed at `_raw_spin_lock_irqsave` look like the memory
> > > > > (maybe dev->dma_io_tlb_mem) was corrupted?
> > > > > The dev->dma_io_tlb_mem should be set here
> > > > > (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/pci/probe.c#n2528)
> > > > > through device_initialize.
> > > > 
> > > > I'm less sure about this. 'dma_io_tlb_mem' should be pointing at
> > > > 'io_tlb_default_mem', which is a page-aligned allocation from memblock.
> > > > The spinlock is at offset 0x24 in that structure, and looking at the
> > > > register dump from the crash:
> > > > 
> > > > Jun 29 18:28:42 hp-4300G kernel: RSP: 0018:ffffadb4013db9e8 EFLAGS: 00010006
> > > > Jun 29 18:28:42 hp-4300G kernel: RAX: 00000000003a8290 RBX: 0000000000000000 RCX: ffff8900572ad580
> > > > Jun 29 18:28:42 hp-4300G kernel: RDX: ffff89005653f024 RSI: 00000000000c0000 RDI: 0000000000001d17
> > > > Jun 29 18:28:42 hp-4300G kernel: RBP: 000000000a20d000 R08: 00000000000c0000 R09: 0000000000000000
> > > > Jun 29 18:28:42 hp-4300G kernel: R10: 000000000a20d000 R11: ffff89005653f000 R12: 0000000000000212
> > > > Jun 29 18:28:42 hp-4300G kernel: R13: 0000000000001000 R14: 0000000000000002 R15: 0000000000200000
> > > > Jun 29 18:28:42 hp-4300G kernel: FS:  00007f1f8898ea40(0000) GS:ffff890057280000(0000) knlGS:0000000000000000
> > > > Jun 29 18:28:42 hp-4300G kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > > > Jun 29 18:28:42 hp-4300G kernel: CR2: 00000000003a8290 CR3: 00000001020d0000 CR4: 0000000000350ee0
> > > > Jun 29 18:28:42 hp-4300G kernel: Call Trace:
> > > > Jun 29 18:28:42 hp-4300G kernel:  _raw_spin_lock_irqsave+0x39/0x50
> > > > Jun 29 18:28:42 hp-4300G kernel:  swiotlb_tbl_map_single+0x12b/0x4c0
> > > > 
> > > > Then that correlates with R11 holding the 'dma_io_tlb_mem' pointer and
> > > > RDX pointing at the spinlock. Yet RAX is holding junk :/
> > > > 
> > > > I agree that enabling KASAN would be a good idea, but I also think we
> > > > probably need to get some more information out of swiotlb_tbl_map_single()
> > > > to see see what exactly is going wrong in there.
> > > 
> > > I can certainly enable KASAN and if there is any debug print I can add
> > > or dump anything, let me know!
> > 
> > I bit the bullet and took v5.13 with swiotlb/for-linus-5.14 merged in, built
> > x86 defconfig and ran it on my laptop. However, it seems to work fine!
> > 
> > Please can you share your .config?
> 
> Sure thing, it is attached. It is just Arch Linux's config run through
> olddefconfig. The original is below in case you need to diff it.
> 
> https://raw.githubusercontent.com/archlinux/svntogit-packages/9045405dc835527164f3034b3ceb9a67c7a53cd4/trunk/config
> 
> If there is anything more that I can provide, please let me know.

I eventually got this booting (for some reason it was causing LD to SEGV
trying to link it for a while...) and sadly it works fine on my laptop. Hmm.

Did you manage to try again with KASAN?

It might also be worth taking the IOMMU out of the equation, since that
interfaces differently with SWIOTLB and I couldn't figure out the code path
from the log you provided. What happens if you boot with "amd_iommu=off
swiotlb=force"?

(although word of warning here: i915 dies horribly on my laptop if I pass
swiotlb=force, even with the distro 5.10 kernel)

Will


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 14:04:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 14:04:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149154.275725 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJmb-0004fI-Ku; Fri, 02 Jul 2021 14:04:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149154.275725; Fri, 02 Jul 2021 14:04:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJmb-0004fB-I0; Fri, 02 Jul 2021 14:04:41 +0000
Received: by outflank-mailman (input) for mailman id 149154;
 Fri, 02 Jul 2021 14:04:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzJmb-0004f5-4I
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 14:04:41 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzJmZ-000282-1D; Fri, 02 Jul 2021 14:04:39 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzJmY-0008EW-RB; Fri, 02 Jul 2021 14:04:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=6EtD5SqbRZJNvHvLZGtuLrFhx1G/nd/OrXMKhDJ1chI=; b=qkbpf3/7L3zxazPEqvUwNJEF3h
	me/qnG0UXHl2hv8SZx97S0v+791Kl2O0JMxlK6MzKLqwDUF6UqrIkmUW2bF0JjsBaSYIVPB0QCh+S
	6WV71OiNu+yA/svhIKwqy4lgVs3lrvLlMnkJTDtNdTHR5bESOZuPCzwjGeAfzHoAgYFc=;
Subject: Re: [XEN PATCH] Config.mk: re-pin OVMF changeset and unpin qemu-xen
To: Ian Jackson <iwj@xenproject.org>,
 Anthony PERARD <anthony.perard@citrix.com>
Cc: xen-devel@lists.xenproject.org, Andrew Cooper
 <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>,
 Jan Beulich <jbeulich@suse.com>, Stefano Stabellini
 <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <20210628134217.47622-1-anthony.perard@citrix.com>
 <24793.54037.159770.159505@mariner.uk.xensource.com>
From: Julien Grall <julien@xen.org>
Message-ID: <ed929363-2b15-bf5f-5a7d-d9e330d79025@xen.org>
Date: Fri, 2 Jul 2021 15:04:36 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <24793.54037.159770.159505@mariner.uk.xensource.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 28/06/2021 14:48, Ian Jackson wrote:
> Anthony PERARD writes ("[XEN PATCH] Config.mk: re-pin OVMF changeset and unpin qemu-xen"):
>> qemu-xen tree have a osstest gate and doesn't need to be pinned.
>>
>> On the other hand, OVMF's xen repository doesn't have a gate and needs
>> to be pinned. The "master" branch correspond now to the tag
>> "edk2-stable202105", so pin to that commit.
>>
>> Fixes: a04509d34d72 ("Branching: Update version files etc. for newly unstable")
>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Acked-by: Ian Jackson <iwj@xenproject.org>
> 
> Looks like I adjusted the wrong line in a04509d34d72.  Sorry.

I have committed it.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 14:07:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 14:07:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149157.275736 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJpk-0005J6-4S; Fri, 02 Jul 2021 14:07:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149157.275736; Fri, 02 Jul 2021 14:07:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzJpk-0005Iz-1S; Fri, 02 Jul 2021 14:07:56 +0000
Received: by outflank-mailman (input) for mailman id 149157;
 Fri, 02 Jul 2021 14:07:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzJpi-0005Ir-TV
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 14:07:54 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzJpi-0002AY-Lb; Fri, 02 Jul 2021 14:07:54 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzJpi-0008Vt-G8; Fri, 02 Jul 2021 14:07:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:Cc:References:To:Subject;
	bh=Nk9KjwhaCTd13rM719XKrXuTMUVVzXZ5x4wfekoB+lE=; b=ndiOxL6/JJ1LTocE7hP+QUJ7y4
	mOF/z4vlYVVUkwDlbZjPrbdIrnJ5iJPmrFTXLvLHYYrrqM54vMBQYYHkC4qwVJg11fb3QxcPWH8Zr
	GECscAVKpTeh39zlkZBiKXbUzq3CvHo+Br8iALKAmIlS4NSr5ZLbi3CIG2Akxmr64axU=;
Subject: Re: Some more QEMU 6.0 fixes
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
References: <20210628100157.5010-1-anthony.perard@citrix.com>
Cc: Ian Jackson <iwj@xenproject.org>
From: Julien Grall <julien@xen.org>
Message-ID: <0a4325fd-97f4-7301-1402-27ee7ee2fe8c@xen.org>
Date: Fri, 2 Jul 2021 15:07:53 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210628100157.5010-1-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 28/06/2021 11:01, Anthony PERARD wrote:
> Follow-up of
>      [XEN PATCH v2 0/8] Fix libxl with QEMU 6.0 + remove some more deprecated usages
> to fix few missing bits.

I have committed the series.
> 
> To be backported to Xen 4.15 as well.

@Ian can you queue it for backport?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 14:30:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 14:30:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149168.275760 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKAy-0007ko-4l; Fri, 02 Jul 2021 14:29:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149168.275760; Fri, 02 Jul 2021 14:29:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKAy-0007kh-00; Fri, 02 Jul 2021 14:29:52 +0000
Received: by outflank-mailman (input) for mailman id 149168;
 Fri, 02 Jul 2021 14:29:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jBuN=L2=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1lzKAv-0007kb-VF
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 14:29:50 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f3c3f818-db41-11eb-83b0-12813bfff9fa;
 Fri, 02 Jul 2021 14:29:48 +0000 (UTC)
Received: from imap.suse.de (imap-alt.suse-dmz.suse.de [192.168.254.47])
 (using TLSv1.2 with cipher ECDHE-ECDSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 0805C2260D;
 Fri,  2 Jul 2021 14:29:47 +0000 (UTC)
Received: from imap3-int (imap-alt.suse-dmz.suse.de [192.168.254.47])
 by imap.suse.de (Postfix) with ESMTP id CA8FD11C84;
 Fri,  2 Jul 2021 14:29:46 +0000 (UTC)
Received: from director2.suse.de ([192.168.254.72]) by imap3-int with ESMTPSA
 id TJVoL9oi32A9YwAALh3uQQ
 (envelope-from <jgross@suse.com>); Fri, 02 Jul 2021 14:29:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f3c3f818-db41-11eb-83b0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625236187; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=CvTtdyfy/5mwGsdpXhBqLdVczADRr3EuF8hDT43aDaE=;
	b=oEh9QJ6D5NNXMiS096947GW9oZsES4Y0+fGyrn3rhZKA2hP0eCVwo6zBWBCp8S7lgEFTWV
	bgZEG2Dbo47R8uQqlZ7s9KO63XnkvlEZJAncltlWWtFY8T6Vk9fLaTYrWPtqtqhG5oVptW
	Wh5G97aGtwOAvwXl9ZXIhiPXXNCtvgY=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625236187; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=CvTtdyfy/5mwGsdpXhBqLdVczADRr3EuF8hDT43aDaE=;
	b=oEh9QJ6D5NNXMiS096947GW9oZsES4Y0+fGyrn3rhZKA2hP0eCVwo6zBWBCp8S7lgEFTWV
	bgZEG2Dbo47R8uQqlZ7s9KO63XnkvlEZJAncltlWWtFY8T6Vk9fLaTYrWPtqtqhG5oVptW
	Wh5G97aGtwOAvwXl9ZXIhiPXXNCtvgY=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH-4.15] tools/libs/ctrl: fix xc_core_arch_map_p2m() to support linear p2m table
Date: Fri,  2 Jul 2021 16:29:44 +0200
Message-Id: <20210702142944.1698-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The core of a pv linux guest produced via "xl dump-core" is not usable
as since kernel 4.14 only the linear p2m table is kept if Xen indicates
it is supporting that. Unfortunately xc_core_arch_map_p2m() is still
supporting the 3-level p2m tree only.

Fix that by copying the functionality of map_p2m() from libxenguest to
libxenctrl.

Additionally the mapped p2m isn't of a fixed length now, so the
interface to the mapping functions needs to be adapted. In order not to
add even more parameters, expand struct domain_info_context and use a
pointer to that as a parameter.

This is a backport of upstream commit bd7a29c3d0b937ab542a.

As the original patch includes a modification of a data structure
passed via pointer to a library function, the related function in the
library is renamed in order to be able to spot any external users of
that function. Note that it is extremely unlikely any such users
outside the Xen git tree are existing, so the risk to break any
existing programs is very unlikely. In case such a user is existing,
changing the name of xc_map_domain_meminfo() will at least avoid
silent breakage.

Fixes: dc6d60937121 ("libxc: set flag for support of linear p2m list in domain builder")
Signed-off-by: Juergen Gross <jgross@suse.com>
---
 tools/include/xenguest.h      |   2 +
 tools/libs/ctrl/xc_core.c     |   5 +-
 tools/libs/ctrl/xc_core.h     |   8 +-
 tools/libs/ctrl/xc_core_arm.c |  23 +--
 tools/libs/ctrl/xc_core_x86.c | 256 ++++++++++++++++++++++++++++------
 tools/libs/ctrl/xc_private.h  |   1 +
 tools/libs/guest/xg_domain.c  |  17 +--
 7 files changed, 234 insertions(+), 78 deletions(-)

diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index 217022b6e7..36a26deba4 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -700,8 +700,10 @@ struct xc_domain_meminfo {
     xen_pfn_t *pfn_type;
     xen_pfn_t *p2m_table;
     unsigned long p2m_size;
+    unsigned int p2m_frames;
 };
 
+#define xc_map_domain_meminfo xc_map_domain_meminfo_mod
 int xc_map_domain_meminfo(xc_interface *xch, uint32_t domid,
                           struct xc_domain_meminfo *minfo);
 
diff --git a/tools/libs/ctrl/xc_core.c b/tools/libs/ctrl/xc_core.c
index b47ab2f6d8..9576bec5a3 100644
--- a/tools/libs/ctrl/xc_core.c
+++ b/tools/libs/ctrl/xc_core.c
@@ -574,8 +574,7 @@ xc_domain_dumpcore_via_callback(xc_interface *xch,
             goto out;
         }
 
-        sts = xc_core_arch_map_p2m(xch, dinfo->guest_width, &info, live_shinfo,
-                                   &p2m, &dinfo->p2m_size);
+        sts = xc_core_arch_map_p2m(xch, dinfo, &info, live_shinfo, &p2m);
         if ( sts != 0 )
             goto out;
 
@@ -945,7 +944,7 @@ out:
     if ( memory_map != NULL )
         free(memory_map);
     if ( p2m != NULL )
-        munmap(p2m, PAGE_SIZE * P2M_FL_ENTRIES);
+        munmap(p2m, PAGE_SIZE * dinfo->p2m_frames);
     if ( p2m_array != NULL )
         free(p2m_array);
     if ( pfn_array != NULL )
diff --git a/tools/libs/ctrl/xc_core.h b/tools/libs/ctrl/xc_core.h
index 36fb755da2..8ea1f93a10 100644
--- a/tools/libs/ctrl/xc_core.h
+++ b/tools/libs/ctrl/xc_core.h
@@ -138,14 +138,14 @@ int xc_core_arch_memory_map_get(xc_interface *xch,
                                 xc_dominfo_t *info, shared_info_any_t *live_shinfo,
                                 xc_core_memory_map_t **mapp,
                                 unsigned int *nr_entries);
-int xc_core_arch_map_p2m(xc_interface *xch, unsigned int guest_width,
+int xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo,
                          xc_dominfo_t *info, shared_info_any_t *live_shinfo,
-                         xen_pfn_t **live_p2m, unsigned long *pfnp);
+                         xen_pfn_t **live_p2m);
 
-int xc_core_arch_map_p2m_writable(xc_interface *xch, unsigned int guest_width,
+int xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_context *dinfo,
                                   xc_dominfo_t *info,
                                   shared_info_any_t *live_shinfo,
-                                  xen_pfn_t **live_p2m, unsigned long *pfnp);
+                                  xen_pfn_t **live_p2m);
 
 int xc_core_arch_get_scratch_gpfn(xc_interface *xch, uint32_t domid,
                                   xen_pfn_t *gpfn);
diff --git a/tools/libs/ctrl/xc_core_arm.c b/tools/libs/ctrl/xc_core_arm.c
index 7b587b4cc5..93765a565f 100644
--- a/tools/libs/ctrl/xc_core_arm.c
+++ b/tools/libs/ctrl/xc_core_arm.c
@@ -66,33 +66,24 @@ xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context *unus
 
 static int
 xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
-                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m,
-                        unsigned long *pfnp, int rw)
+                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m, int rw)
 {
     errno = ENOSYS;
     return -1;
 }
 
 int
-xc_core_arch_map_p2m(xc_interface *xch, unsigned int guest_width, xc_dominfo_t *info,
-                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m,
-                        unsigned long *pfnp)
+xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
+                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m)
 {
-    struct domain_info_context _dinfo = { .guest_width = guest_width };
-    struct domain_info_context *dinfo = &_dinfo;
-    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
-                                   live_shinfo, live_p2m, pfnp, 0);
+    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m, 0);
 }
 
 int
-xc_core_arch_map_p2m_writable(xc_interface *xch, unsigned int guest_width, xc_dominfo_t *info,
-                              shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m,
-                              unsigned long *pfnp)
+xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
+                              shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m)
 {
-    struct domain_info_context _dinfo = { .guest_width = guest_width };
-    struct domain_info_context *dinfo = &_dinfo;
-    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
-                                   live_shinfo, live_p2m, pfnp, 1);
+    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m, 1);
 }
 
 int
diff --git a/tools/libs/ctrl/xc_core_x86.c b/tools/libs/ctrl/xc_core_x86.c
index cb76e6207b..c8f71d4b75 100644
--- a/tools/libs/ctrl/xc_core_x86.c
+++ b/tools/libs/ctrl/xc_core_x86.c
@@ -17,6 +17,7 @@
  *
  */
 
+#include <inttypes.h>
 #include "xc_private.h"
 #include "xc_core.h"
 #include <xen/hvm/e820.h>
@@ -65,34 +66,169 @@ xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context *unus
     return 0;
 }
 
-static int
-xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
-                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m,
-                        unsigned long *pfnp, int rw)
+static inline bool is_canonical_address(uint64_t vaddr)
 {
-    /* Double and single indirect references to the live P2M table */
-    xen_pfn_t *live_p2m_frame_list_list = NULL;
-    xen_pfn_t *live_p2m_frame_list = NULL;
-    /* Copies of the above. */
-    xen_pfn_t *p2m_frame_list_list = NULL;
-    xen_pfn_t *p2m_frame_list = NULL;
+    return ((int64_t)vaddr >> 47) == ((int64_t)vaddr >> 63);
+}
 
-    uint32_t dom = info->domid;
-    int ret = -1;
-    int err;
-    int i;
+/* Virtual address ranges reserved for hypervisor. */
+#define HYPERVISOR_VIRT_START_X86_64 0xFFFF800000000000ULL
+#define HYPERVISOR_VIRT_END_X86_64   0xFFFF87FFFFFFFFFFULL
 
-    if ( xc_domain_nr_gpfns(xch, info->domid, &dinfo->p2m_size) < 0 )
+#define HYPERVISOR_VIRT_START_X86_32 0x00000000F5800000ULL
+#define HYPERVISOR_VIRT_END_X86_32   0x00000000FFFFFFFFULL
+
+static xen_pfn_t *
+xc_core_arch_map_p2m_list_rw(xc_interface *xch, struct domain_info_context *dinfo,
+                             uint32_t dom, shared_info_any_t *live_shinfo,
+                             uint64_t p2m_cr3)
+{
+    uint64_t p2m_vaddr, p2m_end, mask, off;
+    xen_pfn_t p2m_mfn, mfn, saved_mfn, max_pfn;
+    uint64_t *ptes = NULL;
+    xen_pfn_t *mfns = NULL;
+    unsigned int fpp, n_pages, level, n_levels, shift,
+                 idx_start, idx_end, idx, saved_idx;
+
+    p2m_vaddr = GET_FIELD(live_shinfo, arch.p2m_vaddr, dinfo->guest_width);
+    fpp = PAGE_SIZE / dinfo->guest_width;
+    dinfo->p2m_frames = (dinfo->p2m_size - 1) / fpp + 1;
+    p2m_end = p2m_vaddr + dinfo->p2m_frames * PAGE_SIZE - 1;
+
+    if ( dinfo->guest_width == 8 )
     {
-        ERROR("Could not get maximum GPFN!");
-        goto out;
+        mask = 0x0000ffffffffffffULL;
+        n_levels = 4;
+        p2m_mfn = p2m_cr3 >> 12;
+        if ( !is_canonical_address(p2m_vaddr) ||
+             !is_canonical_address(p2m_end) ||
+             p2m_end < p2m_vaddr ||
+             (p2m_vaddr <= HYPERVISOR_VIRT_END_X86_64 &&
+              p2m_end > HYPERVISOR_VIRT_START_X86_64) )
+        {
+            ERROR("Bad virtual p2m address range %#" PRIx64 "-%#" PRIx64,
+                  p2m_vaddr, p2m_end);
+            errno = ERANGE;
+            goto out;
+        }
+    }
+    else
+    {
+        mask = 0x00000000ffffffffULL;
+        n_levels = 3;
+        if ( p2m_cr3 & ~mask )
+            p2m_mfn = ~0UL;
+        else
+            p2m_mfn = (uint32_t)((p2m_cr3 >> 12) | (p2m_cr3 << 20));
+        if ( p2m_vaddr > mask || p2m_end > mask || p2m_end < p2m_vaddr ||
+             (p2m_vaddr <= HYPERVISOR_VIRT_END_X86_32 &&
+              p2m_end > HYPERVISOR_VIRT_START_X86_32) )
+        {
+            ERROR("Bad virtual p2m address range %#" PRIx64 "-%#" PRIx64,
+                  p2m_vaddr, p2m_end);
+            errno = ERANGE;
+            goto out;
+        }
     }
 
-    if ( dinfo->p2m_size < info->nr_pages  )
+    mfns = malloc(sizeof(*mfns));
+    if ( !mfns )
     {
-        ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, info->nr_pages - 1);
+        ERROR("Cannot allocate memory for array of %u mfns", 1);
         goto out;
     }
+    mfns[0] = p2m_mfn;
+    off = 0;
+    saved_mfn = 0;
+    idx_start = idx_end = saved_idx = 0;
+
+    for ( level = n_levels; level > 0; level-- )
+    {
+        n_pages = idx_end - idx_start + 1;
+        ptes = xc_map_foreign_pages(xch, dom, PROT_READ, mfns, n_pages);
+        if ( !ptes )
+        {
+            PERROR("Failed to map %u page table pages for p2m list", n_pages);
+            goto out;
+        }
+        free(mfns);
+
+        shift = level * 9 + 3;
+        idx_start = ((p2m_vaddr - off) & mask) >> shift;
+        idx_end = ((p2m_end - off) & mask) >> shift;
+        idx = idx_end - idx_start + 1;
+        mfns = malloc(sizeof(*mfns) * idx);
+        if ( !mfns )
+        {
+            ERROR("Cannot allocate memory for array of %u mfns", idx);
+            goto out;
+        }
+
+        for ( idx = idx_start; idx <= idx_end; idx++ )
+        {
+            mfn = (ptes[idx] & 0x000ffffffffff000ULL) >> PAGE_SHIFT;
+            if ( mfn == 0 )
+            {
+                ERROR("Bad mfn %#lx during page table walk for vaddr %#" PRIx64 " at level %d of p2m list",
+                      mfn, off + ((uint64_t)idx << shift), level);
+                errno = ERANGE;
+                goto out;
+            }
+            mfns[idx - idx_start] = mfn;
+
+            /* Maximum pfn check at level 2. Same reasoning as for p2m tree. */
+            if ( level == 2 )
+            {
+                if ( mfn != saved_mfn )
+                {
+                    saved_mfn = mfn;
+                    saved_idx = idx - idx_start;
+                }
+            }
+        }
+
+        if ( level == 2 )
+        {
+            if ( saved_idx == idx_end )
+                saved_idx++;
+            max_pfn = ((xen_pfn_t)saved_idx << 9) * fpp;
+            if ( max_pfn < dinfo->p2m_size )
+            {
+                dinfo->p2m_size = max_pfn;
+                dinfo->p2m_frames = (dinfo->p2m_size + fpp - 1) / fpp;
+                p2m_end = p2m_vaddr + dinfo->p2m_frames * PAGE_SIZE - 1;
+                idx_end = idx_start + saved_idx;
+            }
+        }
+
+        munmap(ptes, n_pages * PAGE_SIZE);
+        ptes = NULL;
+        off = p2m_vaddr & ((mask >> shift) << shift);
+    }
+
+    return mfns;
+
+ out:
+    free(mfns);
+    if ( ptes )
+        munmap(ptes, n_pages * PAGE_SIZE);
+
+    return NULL;
+}
+
+static xen_pfn_t *
+xc_core_arch_map_p2m_tree_rw(xc_interface *xch, struct domain_info_context *dinfo,
+                             uint32_t dom, shared_info_any_t *live_shinfo)
+{
+    /* Double and single indirect references to the live P2M table */
+    xen_pfn_t *live_p2m_frame_list_list;
+    xen_pfn_t *live_p2m_frame_list = NULL;
+    /* Copies of the above. */
+    xen_pfn_t *p2m_frame_list_list = NULL;
+    xen_pfn_t *p2m_frame_list;
+
+    int err;
+    int i;
 
     live_p2m_frame_list_list =
         xc_map_foreign_range(xch, dom, PAGE_SIZE, PROT_READ,
@@ -151,10 +287,60 @@ xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *dinfo, xc
         for ( i = P2M_FL_ENTRIES - 1; i >= 0; i-- )
             p2m_frame_list[i] = ((uint32_t *)p2m_frame_list)[i];
 
+    dinfo->p2m_frames = P2M_FL_ENTRIES;
+
+    return p2m_frame_list;
+
+ out:
+    err = errno;
+
+    if ( live_p2m_frame_list_list )
+        munmap(live_p2m_frame_list_list, PAGE_SIZE);
+
+    if ( live_p2m_frame_list )
+        munmap(live_p2m_frame_list, P2M_FLL_ENTRIES * PAGE_SIZE);
+
+    free(p2m_frame_list_list);
+
+    errno = err;
+
+    return NULL;
+}
+
+static int
+xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
+                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m, int rw)
+{
+    xen_pfn_t *p2m_frame_list = NULL;
+    uint64_t p2m_cr3;
+    uint32_t dom = info->domid;
+    int ret = -1;
+    int err;
+
+    if ( xc_domain_nr_gpfns(xch, info->domid, &dinfo->p2m_size) < 0 )
+    {
+        ERROR("Could not get maximum GPFN!");
+        goto out;
+    }
+
+    if ( dinfo->p2m_size < info->nr_pages  )
+    {
+        ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, info->nr_pages - 1);
+        goto out;
+    }
+
+    p2m_cr3 = GET_FIELD(live_shinfo, arch.p2m_cr3, dinfo->guest_width);
+
+    p2m_frame_list = p2m_cr3 ? xc_core_arch_map_p2m_list_rw(xch, dinfo, dom, live_shinfo, p2m_cr3)
+                             : xc_core_arch_map_p2m_tree_rw(xch, dinfo, dom, live_shinfo);
+
+    if ( !p2m_frame_list )
+        goto out;
+
     *live_p2m = xc_map_foreign_pages(xch, dom,
                                     rw ? (PROT_READ | PROT_WRITE) : PROT_READ,
                                     p2m_frame_list,
-                                    P2M_FL_ENTRIES);
+                                    dinfo->p2m_frames);
 
     if ( !*live_p2m )
     {
@@ -162,21 +348,11 @@ xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *dinfo, xc
         goto out;
     }
 
-    *pfnp = dinfo->p2m_size;
-
     ret = 0;
 
 out:
     err = errno;
 
-    if ( live_p2m_frame_list_list )
-        munmap(live_p2m_frame_list_list, PAGE_SIZE);
-
-    if ( live_p2m_frame_list )
-        munmap(live_p2m_frame_list, P2M_FLL_ENTRIES * PAGE_SIZE);
-
-    free(p2m_frame_list_list);
-
     free(p2m_frame_list);
 
     errno = err;
@@ -184,25 +360,17 @@ out:
 }
 
 int
-xc_core_arch_map_p2m(xc_interface *xch, unsigned int guest_width, xc_dominfo_t *info,
-                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m,
-                        unsigned long *pfnp)
+xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
+                        shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m)
 {
-    struct domain_info_context _dinfo = { .guest_width = guest_width };
-    struct domain_info_context *dinfo = &_dinfo;
-    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
-                                   live_shinfo, live_p2m, pfnp, 0);
+    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m, 0);
 }
 
 int
-xc_core_arch_map_p2m_writable(xc_interface *xch, unsigned int guest_width, xc_dominfo_t *info,
-                              shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m,
-                              unsigned long *pfnp)
+xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_context *dinfo, xc_dominfo_t *info,
+                              shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m)
 {
-    struct domain_info_context _dinfo = { .guest_width = guest_width };
-    struct domain_info_context *dinfo = &_dinfo;
-    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
-                                   live_shinfo, live_p2m, pfnp, 1);
+    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m, 1);
 }
 
 int
diff --git a/tools/libs/ctrl/xc_private.h b/tools/libs/ctrl/xc_private.h
index f0b5f83ac8..8ebc0b59da 100644
--- a/tools/libs/ctrl/xc_private.h
+++ b/tools/libs/ctrl/xc_private.h
@@ -79,6 +79,7 @@ struct iovec {
 
 struct domain_info_context {
     unsigned int guest_width;
+    unsigned int p2m_frames;
     unsigned long p2m_size;
 };
 
diff --git a/tools/libs/guest/xg_domain.c b/tools/libs/guest/xg_domain.c
index 5019c84e0e..dd7db2cbd8 100644
--- a/tools/libs/guest/xg_domain.c
+++ b/tools/libs/guest/xg_domain.c
@@ -24,13 +24,9 @@
 
 int xc_unmap_domain_meminfo(xc_interface *xch, struct xc_domain_meminfo *minfo)
 {
-    struct domain_info_context _di = { .guest_width = minfo->guest_width,
-                                       .p2m_size = minfo->p2m_size};
-    struct domain_info_context *dinfo = &_di;
-
     free(minfo->pfn_type);
     if ( minfo->p2m_table )
-        munmap(minfo->p2m_table, P2M_FL_ENTRIES * PAGE_SIZE);
+        munmap(minfo->p2m_table, minfo->p2m_frames * PAGE_SIZE);
     minfo->p2m_table = NULL;
 
     return 0;
@@ -40,7 +36,6 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32_t domid,
                           struct xc_domain_meminfo *minfo)
 {
     struct domain_info_context _di;
-    struct domain_info_context *dinfo = &_di;
 
     xc_dominfo_t info;
     shared_info_any_t *live_shinfo;
@@ -96,16 +91,16 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32_t domid,
         return -1;
     }
 
-    if ( xc_core_arch_map_p2m_writable(xch, minfo->guest_width, &info,
-                                       live_shinfo, &minfo->p2m_table,
-                                       &minfo->p2m_size) )
+    if ( xc_core_arch_map_p2m_writable(xch, &_di, &info,
+                                       live_shinfo, &minfo->p2m_table) )
     {
         PERROR("Could not map the P2M table");
         munmap(live_shinfo, PAGE_SIZE);
         return -1;
     }
     munmap(live_shinfo, PAGE_SIZE);
-    _di.p2m_size = minfo->p2m_size;
+    minfo->p2m_size = _di.p2m_size;
+    minfo->p2m_frames = _di.p2m_frames;
 
     /* Make space and prepare for getting the PFN types */
     minfo->pfn_type = calloc(sizeof(*minfo->pfn_type), minfo->p2m_size);
@@ -141,7 +136,7 @@ failed:
     }
     if ( minfo->p2m_table )
     {
-        munmap(minfo->p2m_table, P2M_FL_ENTRIES * PAGE_SIZE);
+        munmap(minfo->p2m_table, minfo->p2m_frames * PAGE_SIZE);
         minfo->p2m_table = NULL;
     }
 
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 14:47:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 14:47:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149173.275771 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKRb-0001Z7-Ey; Fri, 02 Jul 2021 14:47:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149173.275771; Fri, 02 Jul 2021 14:47:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKRb-0001Z0-BP; Fri, 02 Jul 2021 14:47:03 +0000
Received: by outflank-mailman (input) for mailman id 149173;
 Fri, 02 Jul 2021 14:47:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2GKt=L2=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lzKRZ-0001Yu-HE
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 14:47:01 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9a14a27a-5f20-40ac-8431-b9b52b3e89bd;
 Fri, 02 Jul 2021 14:46:59 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9a14a27a-5f20-40ac-8431-b9b52b3e89bd
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625237219;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=0Qi9xaAYZUBrgWX3jmYBGQmATiOhIRK7rRkjsrCzGo4=;
  b=SvIL6fV09b6n7Ctz1FqheMjLToffbl+bsIgOg/YNh1nhgE9MjhoaxYJZ
   51w5Drc8KtzeMTkN3FY/GHyra9fyoF2zJpEQtElA3y2Mq/9Vzzuj8hiuw
   ZVPZ3pRaWBuEDkJCHDFsVa7oZUmTHEbKWzZVC7u6RpOW84sUQXoAwmG7h
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 9rj2FTI6x1eMY5mXLo4ddIeOtwqaK6NYq8KmE2VXdmIBpKYlFef4xb72oSnibNNPysbBJHKgFz
 +IGyU9lNkYW+6Gtk/+TpkbdcUmQ3JIBxD/YRJEGAXNNwqCjBZocTrq5VtW8OGeX8jwTnCW9Jpq
 8caGMW8Gl7wbR6cpFMLlZg0UeHFuFSve28mDXw2R8e9yb3MPdjM6O2BaAc8/KDAZ27QsZ6mwzQ
 FovJouoaH7XlFCxRT30xyxej2vbC3rrkK2b59z6oI6FOfhIlEQXYeGBGDxFdcUsExZmrzAwBI3
 Rhk=
X-SBRS: 5.1
X-MesageID: 47536243
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:YSlH9anXw4fUlBhX+wIxnB4EFaLpDfLW3DAbv31ZSRFFG/Fw9/
 rCoB3U73/JYVcqKRUdcLW7UpVoLkmyyXcY2+cs1NSZLWzbUQmTXeJfBOLZqlWNJ8SXzIVgPM
 xbAspD4bPLbGSTjazBkXSF+9RL+qj6zEh/792usEuETmtRGt9dBx8SMHf9LqXvLjM2fqbQEv
 Cnl6x6jgvlQ1s7ROKhCEIIWuDSzue77q4PMXY9dmcaABDlt0LR1ILH
X-IronPort-AV: E=Sophos;i="5.83,317,1616472000"; 
   d="scan'208";a="47536243"
Date: Fri, 2 Jul 2021 15:46:56 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Andrew Cooper
	<andrew.cooper3@citrix.com>
Subject: Re: [PATCH] libxl/x86: check return value of
 SHADOW_OP_SET_ALLOCATION domctl
Message-ID: <YN8m4BBYrb++fEYN@perard>
References: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>
 <YN2Mujj8jKGv7tik@perard> <4913d3f6-cd16-1865-9c19-99f7db615ded@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <4913d3f6-cd16-1865-9c19-99f7db615ded@suse.com>

On Fri, Jul 02, 2021 at 02:29:31PM +0200, Jan Beulich wrote:
> On 01.07.2021 11:36, Anthony PERARD wrote:
> > On Mon, Jun 28, 2021 at 01:47:03PM +0200, Jan Beulich wrote:
> >> --- a/tools/libs/light/libxl_x86.c
> >> +++ b/tools/libs/light/libxl_x86.c
> >> @@ -531,8 +531,18 @@ int libxl__arch_domain_create(libxl__gc
> >>      if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
> >>          unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
> >>                                             1024);
> >> -        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
> >> -                          NULL, 0, &shadow, 0, NULL);
> >> +        int rc = xc_shadow_control(ctx->xch, domid,
> > 
> > Could you use 'r' instead of 'rc' ? The later is reserved for libxl
> > error codes while the former is for system and libxc calls.
> 
> Of course I can, but I did look at the rest of the function and
> found that it uses "ret" for the purpose of what you now say
> "rc" ought to be used for. Seeing "ret", I decided to avoid it
> (knowing you use different names for different kinds of return
> values). While I've switched to "r" for now, I'd be rather
> inclined to re-use "ret" instead. (Or actually, as per the
> remark further down, I can get away without any local variable
> then.)

I know there's quite a few (many?) coding style issue in libxl. I'm
trying to prevent new issue without asking to fix the existing one.
The use of "ret" is an already existing issue, so I'm fine with it been
use in this patch for libxl error code in the function.

BTW, you still need to store the return value of xc_shadow_control()
into a "r" variable before checking it for error.

> 
> >> +                                   XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
> >> +                                   NULL, 0, &shadow, 0, NULL);
> >> +
> >> +        if (rc) {
> > 
> > xc_shadow_control seems to return "domctl.u.shadow_op.pages" in some
> > cases, are all non-zero return value errors?
> 
> Indeed it does, but (a) we pass in zero here and (b) this
> operation doesn't alter (nor even care about) the value. So I'd
> prefer to stick to what I have, but if you tell me to switch to
> "... < 0", I will.

That's fine, no need to change.

> 
> >> +            LOGED(ERROR, domid,
> >> +                  "Failed to set %s allocation: %d (errno:%d)\n",
> > 
> > LOGED already prints prints the meaning of the "errno" value, so we
> > don't need to log it.
> 
> I see. Please note that again I took neighboring code (a few lines
> down) for reference. Judging from other call sites (not the one
> right below here) I infer I also shouldn't have \n in the format
> string?

Ah, indeed, the '\n' isn't needed.

> >> +                  libxl_defbool_val(d_config->c_info.hap) ? "HAP" : "shadow",
> >> +                  rc, errno);
> > 
> > Is the return value of xc_shadow_control() actually useful when errno is
> > already logged?
> 
> I don't know. Again what I had matches what can be found a few
> lines down in the same function. But looking at other uses (in
> other files) I'm getting the impression that it's useless -
> dropped.

Whether or not the return value is useful to be logged depends only on
xc_shadow_control(). But thanks.

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:11:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:11:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149178.275782 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKpI-0004rd-Dv; Fri, 02 Jul 2021 15:11:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149178.275782; Fri, 02 Jul 2021 15:11:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKpI-0004rW-Ay; Fri, 02 Jul 2021 15:11:32 +0000
Received: by outflank-mailman (input) for mailman id 149178;
 Fri, 02 Jul 2021 15:11:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lzKpG-0004rA-87
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 15:11:30 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c64f449a-db47-11eb-83b6-12813bfff9fa;
 Fri, 02 Jul 2021 15:11:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c64f449a-db47-11eb-83b6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625238689;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=JI+dDqQPttl8nzl/yOMoLNzy4H96SN8XpCcjUNK2YwM=;
  b=RySVpkIf6bfxpGj0Koa4Z/y321q7H6TI8wGRMLVce22Yr75LF7A05wLq
   vTV4BNz3T77ly+My8gMGC2qDeIDiX029CsZqitwMSN/ZY0RbC6h2Bskr1
   eBeAPjkb8nq/qI0OpKt7oKoSCdiIfWKc4iqbduWzMfzTK/QZ5VCaSZrRa
   A=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 7/nf6TXk7FrQch/Gw677QhGLfCPjL7mDCrOnJtasPrGpclEp2TAuvuJPe7OHw4OtaiXzM0ObuO
 4QXB+M1hc7QZJ+RMtV7VzBWitP1ne2CFHRRFN7RW7hEOsH+CLbH2yxbbmtcVknU8azrkXzL1As
 upGF02rXXDMey4k2U8nmekaBwEA5eU3H0d6yzuGLBLVex80NAr9gN42itnqPWuQCRadw1yCKBv
 vowcNkhvgWXb4gB1lWEls6CAHHcydP2MmgjOnm4YWKecW376wtJiIgavg6IKSp9+ADaljkQz8w
 CHw=
X-SBRS: 5.1
X-MesageID: 47465486
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:IlFjX62MGfcf3nVHnik3BQqjBA4kLtp133Aq2lEZdPU1SL3nqy
 nKppomPHDP+VUssR0b6K290Yi7MBbhHNtOkPIs1NSZLXbbUQmTXfhfBOLZqlWLexEWtNQtrZ
 uIGJIOauEYeGIK6/oSjjPIb+rJsLO8m5xBq43lvhNQpdwGUc5dBzMSMHftLqUJLjM2dKbQMv
 enl7l6T0nLQxkqR/X+LXEfRODIu9DC0KnMRFo6HAI89QWCyRyv86DzCBWVxX4lPw+mtt0ZgB
 z4e32S3NTSjxnIoCWspVP73tB4nt39xsArPq2xY7AuW0/RY32TFeNcsmK5zUUInN0=
X-IronPort-AV: E=Sophos;i="5.83,317,1616472000"; 
   d="scan'208";a="47465486"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fhx6vNeM4jkOXXPw7dkciqz6Ot6hen26hr5zASHvgaz+oNV1cUB75FcJviSpYDuLRUK8rp83H6RDDhLKP2KTHWoo1WOBbIvtRWLlbfhWMtNhV2ZJnsK0+Z4haD1Z15gsob3//Af9qiofUhkV4DGKu+SBRQ7Vdtj5b3Pxbx6GjpaVph+ZqaH++BCAh1jMokb18yrbSkN6Pe6U9Ye4iFOioeZZnfL6bi+DybxZo1F11r01zG4oTWDz8syqjV3sNbElA1UIlIVbxBE97cDE4WSS8rxoW2H5kzznfH2+CWcRalRNrb/WVAuhBAq5UqwUtmxNQGKTpXPL5NlsCiPbx3aQ4A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wp9CG1bfiQgdmUIW+LcgwupYphZ5zCiU5UJbXg//STM=;
 b=IimciG5FkO+18HUQe/WG6ssRs5/lO1AEUEXC/bEYU1GkLdDMo2oW0hQ/4GG9vYlyYzHvhwwQoiC5dZlejcQ87YjEdTDGSQ4OqvXkBALeYbizVdsfExLuXL2Y8q68IyGQ5aYu9GH2KsgH8kAfXwucCD7X8PqbXuHosDoy4uiOWX35KSOhaFsRMr8I+EyMaYAHUkfitv2C+0M6dBTiCPsR9D4lKGlouLm6ytt6Y8Puzqk8Gm8m9Zjal5vBWK1DHZFutX7vT0bFZreL28e/bj3WsJ5X5IFMT7HCvyZt5zdaztPg9hxrtTu5n6sOPwOQJIfI0dZSq3YiXkv2CyfPmdxhKA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wp9CG1bfiQgdmUIW+LcgwupYphZ5zCiU5UJbXg//STM=;
 b=fqs5gS4dK7WaREEA0sXhi29dMGJYaxAAh3VAeekT25x5KAW/h78gicDUhZQzr6C99EEEhkkgA9zCr/mpzwHbLR9KeMFFK6/ivTVsfyT5lCMnJ8nanBvuO6CocoNf2k0VCl2dBgYod89QVGA2Ic0EI5H8lCB1JG36h8dXHY0pJSA=
Subject: Re: [PATCH v20210701 04/40] tools: use integer division in
 convert-legacy-stream
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-5-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <4db50fa9-638f-97e1-1b1c-e044cf4714d7@citrix.com>
Date: Fri, 2 Jul 2021 16:10:53 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-5-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0069.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:60::33) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e4ee487f-3d75-4cc0-a2f8-08d93d6b9a4d
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6224:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB6224F9881D3B777CA26E436FBA1F9@SJ0PR03MB6224.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:196;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 3UHYVmzWYpq75pAXO68zFgujrEweUH/lM/Pkpk4Q/4GbmJ8dorcJjzmgQk00ow/pVemdwF46pmhp58nt3k3PxybXPBXKiknmW1XNHy/Hvwk0sMBxUUyDFkI4AJA3sOBvwC4xDRCY8geqBcB+magweORg3fqtnlC7dtFzuR4IYgczGc0ETtr1JKjg7ikkKhwMEl9FwrHZ2Epv6e9FlBWTFNLpL/9Hurs4ejeLrdVTGGAV/jx2rM9bofv3Uq5P4Y5XX3nTFq/dMCvCzA34VrtgW/CAR2jF56FQzQNGDwR0/aXvC2sO7pBApFqlu5aaaZle4JLvpUk5OTklxjNjBSrIFT4WZs5Q4Z8NTXL5BldxUcz6ypiYkK2En6ehT4hab4F2vA6sCrtcu7FvN1PFoYYMTq/NH4eZ0/poexNnWuOfxInf+mAfOHU+oD3hapB05iCZq0Glhc4TqzSPeMTAHY7sKnUE7v6yND3jwBIy6zh2zJGzUsZWpw7M6l1uwuNxQnGNrMKuZ3W9PRs7hsxuM15acfVpe4rc1FYFNYhH05IXKFSTkNwlbLLpvfYJHybmA8haeoacM88p8LzPr8P9Q+Z52PbyTdgfxb51FH+KMSpVAAoFSoXFWhrBJ0aWkid93w6XPQ9/XmjarM2tQ7LI5itveBemn0szxrwCJZx9HXXYaTqa1ciUhGSBcypQ+Rth8sZrMhVHezzMI63QfEtBrrhnQq2N/iDk2w0bNO1A8RBI5Ydt5ihbKfuFF12k8MH8r3FN
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(136003)(396003)(39860400002)(346002)(16526019)(5660300002)(53546011)(186003)(86362001)(31686004)(2906002)(6486002)(4744005)(31696002)(66476007)(54906003)(478600001)(26005)(16576012)(956004)(2616005)(66946007)(6666004)(36756003)(66556008)(8936002)(38100700002)(316002)(8676002)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?LaoCvaM/we8G9kCG4utSVujkJI7FIcTSvUt1Wop?=
X-MS-Exchange-CrossTenant-Network-Message-Id: e4ee487f-3d75-4cc0-a2f8-08d93d6b9a4d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 15:11:01.5116
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: XZ/DKHpqeGYQAf5Q/sOGFelI3QKBQ9+hGJLsM9QqRk7NyHQ0tN76fdZYQR5EFYeBZIXp/l313O4AD5GD9iG/HvnpwZk2iUh4Pj37kcKTSm4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6224
X-OriginatorOrg: citrix.com

On 01/07/2021 10:55, Olaf Hering wrote:
> A single slash gives a float, a double slash gives an int.
>
>     bitmap = unpack_exact("Q" * ((max_id/64) + 1))
> TypeError: can't multiply sequence by non-int of type 'float'
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:12:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:12:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149181.275792 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKqD-0005RR-PM; Fri, 02 Jul 2021 15:12:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149181.275792; Fri, 02 Jul 2021 15:12:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKqD-0005RK-M4; Fri, 02 Jul 2021 15:12:29 +0000
Received: by outflank-mailman (input) for mailman id 149181;
 Fri, 02 Jul 2021 15:12:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=mhJ0=L2=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1lzKqD-0005RE-48
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 15:12:29 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5d71f225-76bf-482a-b128-9d567b530083;
 Fri, 02 Jul 2021 15:12:28 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2176.outbound.protection.outlook.com [104.47.17.176])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-23-PKfjgzwWPQGkgLnazFl3Sw-1; Fri, 02 Jul 2021 17:12:26 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2704.eurprd04.prod.outlook.com (2603:10a6:800:b5::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Fri, 2 Jul
 2021 15:12:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.023; Fri, 2 Jul 2021
 15:12:25 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0031.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:55::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.23 via Frontend Transport; Fri, 2 Jul 2021 15:12:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5d71f225-76bf-482a-b128-9d567b530083
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625238747;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=wbvhHxlLO1642pXBaDEfWehMsyn88DfKcSTKtOiE1n0=;
	b=PKgEP4eYnCZlwujdIQ/HmWozQors7iNk9r5tJ4WDLQyfROe91wwFfUjYqwBP/pz2ITS5Fc
	1oLxz3IpKeuXbNLnE/6ijSCli84l54vqSH1vGcrXN0UKgABUfyOkUL+mJR1rAOUlA/aLR7
	SzwAY97q7bEh5dO8OVozOp/ixLQUkdA=
X-MC-Unique: PKfjgzwWPQGkgLnazFl3Sw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QegQI+5Yx1cT9Qu0lJdAJAZ2/YsRmf9BXjHfHnvllBQ+LszI8kBGhDAfN/tCZ7T2EeDU5w8GVoKwVdsFcfOeQeLE4t3hznM9/ouvKQxZM8Fn0imUt0M5qFxa3hso4xzG+XcX8xMseEIU5Xc8bOuX+PvMZa/obs9AtvLrdCz5alwDRWGaWEL0MmXLKnH3ym3f0mJ+e7FvvMs2LThkvJC4QQkYCWt+t56mxajmsA5f57g/G8ZbOiIaC2DD0kip92jFkHEWo21UIVdF3wkMh7K5rcf5m3XJfvkuyPaJMiPbLCARLJHE6lba6rQQ41X2szOtBulPYhwevHdLN0UW4/Flxw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wbvhHxlLO1642pXBaDEfWehMsyn88DfKcSTKtOiE1n0=;
 b=D9Pryn99mQ679F8yuBBI5Rn70ZJlUYAw+7iO11dPz1w3oM3L7cAQBNazFkHaTe8EP8JaWd7X7P/JR0ON0aJYN287/KOQrsrNXjakMFBPZfMduXLvsd3imoqODhu1Ix3g7323hemNfSbzDrDopbsiQszmCNeHJwuZqKmD9N+7BXMXOwIOk7YmBkkS8ODOGN+MW92APWndYS3hUo1tguuNRLXomsYK+XHlILIUgTnxnY/SKOCJ0q86ha5uB1ueIyogK0dL4GBaePwi4ETQE5vILIsXTYmuSl8DPr9kzKAnli9XZ15dO+kRKnhWWTBRuKGvW1jfSUf/i+fcG0+k7xZiSg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] libxl/x86: check return value of SHADOW_OP_SET_ALLOCATION
 domctl
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>
References: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>
 <YN2Mujj8jKGv7tik@perard> <4913d3f6-cd16-1865-9c19-99f7db615ded@suse.com>
 <YN8m4BBYrb++fEYN@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <89ccd8b7-42e1-0e86-5929-2a33fa1b9c4b@suse.com>
Date: Fri, 2 Jul 2021 17:12:23 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YN8m4BBYrb++fEYN@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P191CA0031.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:55::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6bfbefd7-6d54-4f40-54ed-08d93d6bcc84
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2704:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2704F21BADCAFD3B4F5BB215B31F9@VI1PR0402MB2704.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	9svFSW+O7ePAVbnfzlUHtlKF+85Z8OxN+n3dODLhgBouEv0xCtvymuq3AmNxVu9QNkC+TM1mU8yk788bcHGI5OKwo2Vzu9zqxCEvGPXP5xlxBrdosFfGhCHYe4HlZCUrGiuXXY/NxT7XntEo5Nrwn5kA957Xl5KqkfjCP+S3TD+eybvv4GXMkVAtQbVG8cektXJq+VwoqGyXVDHuFuRXRNAU7yuzaxjl8K8l2sxsHoGdiFRy80EKvy4whyECfukW/6wB3otpw72HRNiMpRe71mt/zZo194p/GRsHUZL/7plsWeqZEeSuJ4RtxxzQ9XmI3sbIPJAXPcR2i/9LEkMpSmfa/eWBnNGb8J7tdg/cds5rCdRLyfT1vpZvPI23ON5jWvXaH/nGMqmhnvGUFcXNNIgeRj//pYN/sevDo2/tRMCgaobK26RZLqezhzwQ+5lGtV+YlfcrAcdhMIjo6QgOU9MVl2yrCG0YOMkJ65uxM6aIabXoEquwIB0rLIT6XsaiTtjuJMp78dZjlS+oCQ7IPrBQaYJWi+AUpG+TqignFEdh4uHNh/rlWvBINzEHjw6ONOuRuHYdZhB8PH5SgcZRFNxHk8Y9sLjXwsf+6aBCBchij3qV1KhlTbEMILcx1R6cVdiq0rafgCeKWvchDMVy6JGkIJM/8g5fSGHGNXgNpQBuTExBr7NaFVMjxihsPudPf5s3V6sMRbyOc98h8Je6wgZ8nFi46DhrMjhr4mRj4ZnYfNigCffCcAAQP9lQVl16
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(136003)(346002)(396003)(366004)(39860400002)(478600001)(956004)(31696002)(6486002)(66556008)(83380400001)(26005)(4326008)(2616005)(16576012)(186003)(36756003)(6916009)(8936002)(86362001)(316002)(66946007)(8676002)(54906003)(66476007)(2906002)(38100700002)(53546011)(16526019)(5660300002)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6bfbefd7-6d54-4f40-54ed-08d93d6bcc84
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 15:12:25.2434
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: r2OvLFuJCcrhp5WlaJhvBXd+Iq7sidep7Uowq47mDlKzyrj5vn5HQxV9myuqtCfAPhurULwjEje6iHSpkKeo+w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2704

On 02.07.2021 16:46, Anthony PERARD wrote:
> On Fri, Jul 02, 2021 at 02:29:31PM +0200, Jan Beulich wrote:
>> On 01.07.2021 11:36, Anthony PERARD wrote:
>>> On Mon, Jun 28, 2021 at 01:47:03PM +0200, Jan Beulich wrote:
>>>> --- a/tools/libs/light/libxl_x86.c
>>>> +++ b/tools/libs/light/libxl_x86.c
>>>> @@ -531,8 +531,18 @@ int libxl__arch_domain_create(libxl__gc
>>>>      if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
>>>>          unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
>>>>                                             1024);
>>>> -        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
>>>> -                          NULL, 0, &shadow, 0, NULL);
>>>> +        int rc = xc_shadow_control(ctx->xch, domid,
>>>
>>> Could you use 'r' instead of 'rc' ? The later is reserved for libxl
>>> error codes while the former is for system and libxc calls.
>>
>> Of course I can, but I did look at the rest of the function and
>> found that it uses "ret" for the purpose of what you now say
>> "rc" ought to be used for. Seeing "ret", I decided to avoid it
>> (knowing you use different names for different kinds of return
>> values). While I've switched to "r" for now, I'd be rather
>> inclined to re-use "ret" instead. (Or actually, as per the
>> remark further down, I can get away without any local variable
>> then.)
> 
> I know there's quite a few (many?) coding style issue in libxl. I'm
> trying to prevent new issue without asking to fix the existing one.
> The use of "ret" is an already existing issue, so I'm fine with it been
> use in this patch for libxl error code in the function.
> 
> BTW, you still need to store the return value of xc_shadow_control()
> into a "r" variable before checking it for error.

Are you saying that

        if (xc_shadow_control(ctx->xch, domid,
                              XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
                              NULL, 0, &shadow_mb, 0, NULL)) {

is not acceptable, style-wise? If indeed you are, please disambiguate
your statement above regarding the use of "ret": May I or may I not
use it? IOW do I need to introduce "r", or can I get away with the
existing local variables.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:14:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:14:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149185.275804 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKrm-00064w-5R; Fri, 02 Jul 2021 15:14:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149185.275804; Fri, 02 Jul 2021 15:14:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKrm-00064p-1Q; Fri, 02 Jul 2021 15:14:06 +0000
Received: by outflank-mailman (input) for mailman id 149185;
 Fri, 02 Jul 2021 15:14:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=cwfD=L2=arm.com=robin.murphy@srs-us1.protection.inumbo.net>)
 id 1lzKrk-00064e-IR
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 15:14:04 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 22640be4-db48-11eb-83b6-12813bfff9fa;
 Fri, 02 Jul 2021 15:14:02 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 26FB4D6E;
 Fri,  2 Jul 2021 08:14:02 -0700 (PDT)
Received: from [10.57.40.45] (unknown [10.57.40.45])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A13EA3F5A1;
 Fri,  2 Jul 2021 08:13:54 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 22640be4-db48-11eb-83b6-12813bfff9fa
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
To: Will Deacon <will@kernel.org>, Nathan Chancellor <nathan@kernel.org>
Cc: Claire Chang <tientzu@chromium.org>, Rob Herring <robh+dt@kernel.org>,
 mpe@ellerman.id.au, Joerg Roedel <joro@8bytes.org>,
 Frank Rowand <frowand.list@gmail.com>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, boris.ostrovsky@oracle.com,
 jgross@suse.com, Christoph Hellwig <hch@lst.de>,
 Marek Szyprowski <m.szyprowski@samsung.com>, benh@kernel.crashing.org,
 paulus@samba.org,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com,
 xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>, mingo@kernel.org,
 bauerman@linux.ibm.com, peterz@infradead.org,
 Greg KH <gregkh@linuxfoundation.org>, Saravana Kannan
 <saravanak@google.com>, "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 heikki.krogerus@linux.intel.com,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
 Randy Dunlap <rdunlap@infradead.org>, Dan Williams
 <dan.j.williams@intel.com>, Bartosz Golaszewski <bgolaszewski@baylibre.com>,
 linux-devicetree <devicetree@vger.kernel.org>,
 lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
 xen-devel@lists.xenproject.org, Nicolas Boichat <drinkcat@chromium.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, Tomasz Figa <tfiga@chromium.org>,
 bskeggs@redhat.com, Bjorn Helgaas <bhelgaas@google.com>,
 chris@chris-wilson.co.uk, Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
 dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
 jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
 joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
 maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
 rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
 Tom Lendacky <thomas.lendacky@amd.com>, Qian Cai <quic_qiancai@quicinc.com>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-7-tientzu@chromium.org>
 <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
From: Robin Murphy <robin.murphy@arm.com>
Message-ID: <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
Date: Fri, 2 Jul 2021 16:13:50 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210702135856.GB11132@willie-the-truck>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 2021-07-02 14:58, Will Deacon wrote:
> Hi Nathan,
> 
> On Thu, Jul 01, 2021 at 12:52:20AM -0700, Nathan Chancellor wrote:
>> On 7/1/2021 12:40 AM, Will Deacon wrote:
>>> On Wed, Jun 30, 2021 at 08:56:51AM -0700, Nathan Chancellor wrote:
>>>> On Wed, Jun 30, 2021 at 12:43:48PM +0100, Will Deacon wrote:
>>>>> On Wed, Jun 30, 2021 at 05:17:27PM +0800, Claire Chang wrote:
>>>>>> `BUG: unable to handle page fault for address: 00000000003a8290` and
>>>>>> the fact it crashed at `_raw_spin_lock_irqsave` look like the memory
>>>>>> (maybe dev->dma_io_tlb_mem) was corrupted?
>>>>>> The dev->dma_io_tlb_mem should be set here
>>>>>> (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/pci/probe.c#n2528)
>>>>>> through device_initialize.
>>>>>
>>>>> I'm less sure about this. 'dma_io_tlb_mem' should be pointing at
>>>>> 'io_tlb_default_mem', which is a page-aligned allocation from memblock.
>>>>> The spinlock is at offset 0x24 in that structure, and looking at the
>>>>> register dump from the crash:
>>>>>
>>>>> Jun 29 18:28:42 hp-4300G kernel: RSP: 0018:ffffadb4013db9e8 EFLAGS: 00010006
>>>>> Jun 29 18:28:42 hp-4300G kernel: RAX: 00000000003a8290 RBX: 0000000000000000 RCX: ffff8900572ad580
>>>>> Jun 29 18:28:42 hp-4300G kernel: RDX: ffff89005653f024 RSI: 00000000000c0000 RDI: 0000000000001d17
>>>>> Jun 29 18:28:42 hp-4300G kernel: RBP: 000000000a20d000 R08: 00000000000c0000 R09: 0000000000000000
>>>>> Jun 29 18:28:42 hp-4300G kernel: R10: 000000000a20d000 R11: ffff89005653f000 R12: 0000000000000212
>>>>> Jun 29 18:28:42 hp-4300G kernel: R13: 0000000000001000 R14: 0000000000000002 R15: 0000000000200000
>>>>> Jun 29 18:28:42 hp-4300G kernel: FS:  00007f1f8898ea40(0000) GS:ffff890057280000(0000) knlGS:0000000000000000
>>>>> Jun 29 18:28:42 hp-4300G kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>>>> Jun 29 18:28:42 hp-4300G kernel: CR2: 00000000003a8290 CR3: 00000001020d0000 CR4: 0000000000350ee0
>>>>> Jun 29 18:28:42 hp-4300G kernel: Call Trace:
>>>>> Jun 29 18:28:42 hp-4300G kernel:  _raw_spin_lock_irqsave+0x39/0x50
>>>>> Jun 29 18:28:42 hp-4300G kernel:  swiotlb_tbl_map_single+0x12b/0x4c0
>>>>>
>>>>> Then that correlates with R11 holding the 'dma_io_tlb_mem' pointer and
>>>>> RDX pointing at the spinlock. Yet RAX is holding junk :/
>>>>>
>>>>> I agree that enabling KASAN would be a good idea, but I also think we
>>>>> probably need to get some more information out of swiotlb_tbl_map_single()
>>>>> to see see what exactly is going wrong in there.
>>>>
>>>> I can certainly enable KASAN and if there is any debug print I can add
>>>> or dump anything, let me know!
>>>
>>> I bit the bullet and took v5.13 with swiotlb/for-linus-5.14 merged in, built
>>> x86 defconfig and ran it on my laptop. However, it seems to work fine!
>>>
>>> Please can you share your .config?
>>
>> Sure thing, it is attached. It is just Arch Linux's config run through
>> olddefconfig. The original is below in case you need to diff it.
>>
>> https://raw.githubusercontent.com/archlinux/svntogit-packages/9045405dc835527164f3034b3ceb9a67c7a53cd4/trunk/config
>>
>> If there is anything more that I can provide, please let me know.
> 
> I eventually got this booting (for some reason it was causing LD to SEGV
> trying to link it for a while...) and sadly it works fine on my laptop. Hmm.
> 
> Did you manage to try again with KASAN?
> 
> It might also be worth taking the IOMMU out of the equation, since that
> interfaces differently with SWIOTLB and I couldn't figure out the code path
> from the log you provided. What happens if you boot with "amd_iommu=off
> swiotlb=force"?

Oh, now there's a thing... the chat from the IOMMU API in the boot log 
implies that the IOMMU *should* be in the picture - we see that default 
domains are IOMMU_DOMAIN_DMA default and the GPU 0000:0c:00.0 was added 
to a group. That means dev->dma_ops should be set and DMA API calls 
should be going through iommu-dma, yet the callstack in the crash says 
we've gone straight from dma_map_page_attrs() to swiotlb_map(), implying 
the inline dma_direct_map_page() path.

If dev->dma_ops didn't look right in the first place, it's perhaps less 
surprising that dev->dma_io_tlb_mem might be wild as well. It doesn't 
seem plausible that we should have a race between initialising the 
device and probing its driver, so maybe the whole dev pointer is getting 
trampled earlier in the callchain (or is fundamentally wrong to begin 
with, but from a quick skim of the amdgpu code it did look like 
adev->dev and adev->pdev are appropriately set early on by 
amdgpu_pci_probe()).

> (although word of warning here: i915 dies horribly on my laptop if I pass
> swiotlb=force, even with the distro 5.10 kernel)

FWIW I'd imagine you probably need to massively increase the SWIOTLB 
buffer size to have hope of that working.

Robin.


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:14:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:14:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149188.275815 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKsQ-0006iq-Ib; Fri, 02 Jul 2021 15:14:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149188.275815; Fri, 02 Jul 2021 15:14:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzKsQ-0006ij-FM; Fri, 02 Jul 2021 15:14:46 +0000
Received: by outflank-mailman (input) for mailman id 149188;
 Fri, 02 Jul 2021 15:14:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=mhJ0=L2=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1lzKsP-0006iX-D2
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 15:14:45 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3aec3538-db48-11eb-83b6-12813bfff9fa;
 Fri, 02 Jul 2021 15:14:44 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2058.outbound.protection.outlook.com [104.47.8.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-5-nrIufyHbMh2YzeEsGJwyaw-1;
 Fri, 02 Jul 2021 17:14:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7040.eurprd04.prod.outlook.com (2603:10a6:800:121::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Fri, 2 Jul
 2021 15:14:41 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.023; Fri, 2 Jul 2021
 15:14:41 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR2P281CA0021.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.7 via Frontend Transport; Fri, 2 Jul 2021 15:14:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3aec3538-db48-11eb-83b6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625238883;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=hC94+a97j6kslkLN67tYNOJce5dy4+/q6ruAJmaPGJE=;
	b=BebwIASDqahviqLcMIIDG1PSe2kcbMSPk0NbzlVRSud/B8WiQu8rnhUpJTrG/lqXvrVHT/
	edAHOimGP+QsFT+e7nUaUTfYH67G4V/+RSjdLXxj/yF2M2eyP+XlZXGINeEVliZvq3ucNq
	XUxwMGucVMomaGAc+UHuFGd8hgIJIno=
X-MC-Unique: nrIufyHbMh2YzeEsGJwyaw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=a8QTSxu/aRY6ivBtt2kvuaxGpn7UYZx8BwtrJpUSeCT0JCU9JoEli8F6gboIrlfP+AM9sADEhRTTSWql9bU9xcTwWC0rSdsn2UTgmzR39F4IAFqnZWEEcJZLFT5J86HJwnQ7iAY7/qXUi50NFrMPHxjqCpB/4Emd6fprTbFIsXSAoZ2gWn66pS3PHOyCU10S4XRKXGpj0T2eRGbTzFfqz64oF+/hKXF7yEU7G2pI0yxwb7CcRnr0E43ZVvDx7tmmbvuJ5cGHnpkfzu8lZWk+qiYzMGAkZlyyji0F3dyus38TzN1PJ4WqhjzviAy+s4gsGDnw328CQfdm1llZ2jtF0A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hC94+a97j6kslkLN67tYNOJce5dy4+/q6ruAJmaPGJE=;
 b=EiiCxLKvOiPViHbuCAVonkDNUu5gXIP/bu9v/tA0nSdD+adpKO3Gnkj0E6713kI0MlO9gzy+mxMkna7MZYjb9dMAZtRqPhEURMn+vXwq+TBLz1pviHGj7CpR3hlW31fFqrU0p8VZVFNQDjPoWrDoecV4A1jh2G/cTtJOkZ/xStFYONhYmQ6W98oxsUyw1avX+LooSemVM7PxoD2GV6ot8hLqGhLvfQp3B25iZORiAX/CmTl+0b1jUDzyRjFVKcZ6G2cVN24HoVHfHwC0J9T6U7gvXDhfPG28aAnwkwH4oUOBmmHOjnLa8/uIMtT9xuRkzjogKpV+G+uNXfnH9v6g1A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] libxl/x86: check return value of SHADOW_OP_SET_ALLOCATION
 domctl
From: Jan Beulich <jbeulich@suse.com>
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>
References: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>
 <YN2Mujj8jKGv7tik@perard> <4913d3f6-cd16-1865-9c19-99f7db615ded@suse.com>
 <YN8m4BBYrb++fEYN@perard> <89ccd8b7-42e1-0e86-5929-2a33fa1b9c4b@suse.com>
Message-ID: <61f96b68-cd29-84c2-33ca-e114a6fc7714@suse.com>
Date: Fri, 2 Jul 2021 17:14:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <89ccd8b7-42e1-0e86-5929-2a33fa1b9c4b@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR2P281CA0021.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:14::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3efd04ac-4729-4db5-35ab-08d93d6c1df4
X-MS-TrafficTypeDiagnostic: VI1PR04MB7040:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7040646E986D9C00B6A1C9B0B31F9@VI1PR04MB7040.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	HzT5jq46pR/Yt11R6iQAR9p1zs/+7HZJDIxroBSwJxBzu6ltfHEgWiVKh8ISqTzB7Fl4CGiNQpBc4Ee4nUSQPvdwj3Eaf6/Km/K4DRMNOd/C9zaZgPWA11ZK/ZbIFG7FArDIcxhz8ZfF2I/36sYfLHp5CUmW4CwzVIc3+Aru+G19m8f6FRkkppRhozF8mvRtT/NdUwYvLtLaA/K+EGbgGuvIMAuZHrf1jFlIQgi+EMoEDPD2eA/a2Jdy9H9qspaNAkx8Q0VG/GE+JD3lXI9hYLncBy3vNcC3m9QJ+AZAkYNZ1gS8jD56tmVqp4vicIBX4Rjp4YOabPdgYlq91MKYzQB2G9cHD611qKMXOII+PZ6+vLTz97KJ4BqNSTxuYitDQLj3o0I+Z18afu0Zgb6JBKSHC1OacSeAjOksl3DLcEaVayXKuw6Wp5wW8HJwu2GNh2ZENBpECBoe0tPJkySh7/koonpBd3AKpBbH2GgFu6XwQGpyHd5XP2xKsPEf843doLhCGUHy88fG9HGr9mh6qiANbhv+VW7pjowIA6gtX0LC00jkS/TIFZjshfP2lJHKWzpMsAQ+nWt2I6GtvtrM7P+Ik6kKzz91NpSQEsbx0S1Ovct4s3yGsmOkYkaMigmUdCM67t65CG/RER25bY4zRtk7ZRrrMu5PMr0LsHM3wCi7cdMezo1CePRg7ecJDZJWbzvKQP0voTD/+WACk3SjpGv7dptfXwO1EdrbwGsWpdmpF6cCbEDYijZBiSYrU3Kc
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(136003)(366004)(346002)(396003)(39860400002)(16526019)(86362001)(6486002)(8936002)(54906003)(36756003)(5660300002)(186003)(53546011)(316002)(83380400001)(26005)(2906002)(66476007)(66946007)(38100700002)(66556008)(31686004)(8676002)(478600001)(16576012)(31696002)(6916009)(956004)(4326008)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?0yITrBQ26sHhqyH/k00XOHsOm9BNWvrF9N4pfbV?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3efd04ac-4729-4db5-35ab-08d93d6c1df4
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 15:14:41.8591
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: F0W+yx/I2k52wG8mkb1oTpD3crdx+gNkEC4aD3HsvXmVAIHIykMK+YS9FSpTalg2anvuXf39Amv4cwnDkFuKpQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7040

On 02.07.2021 17:12, Jan Beulich wrote:
> On 02.07.2021 16:46, Anthony PERARD wrote:
>> On Fri, Jul 02, 2021 at 02:29:31PM +0200, Jan Beulich wrote:
>>> On 01.07.2021 11:36, Anthony PERARD wrote:
>>>> On Mon, Jun 28, 2021 at 01:47:03PM +0200, Jan Beulich wrote:
>>>>> --- a/tools/libs/light/libxl_x86.c
>>>>> +++ b/tools/libs/light/libxl_x86.c
>>>>> @@ -531,8 +531,18 @@ int libxl__arch_domain_create(libxl__gc
>>>>>      if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
>>>>>          unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
>>>>>                                             1024);
>>>>> -        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
>>>>> -                          NULL, 0, &shadow, 0, NULL);
>>>>> +        int rc = xc_shadow_control(ctx->xch, domid,
>>>>
>>>> Could you use 'r' instead of 'rc' ? The later is reserved for libxl
>>>> error codes while the former is for system and libxc calls.
>>>
>>> Of course I can, but I did look at the rest of the function and
>>> found that it uses "ret" for the purpose of what you now say
>>> "rc" ought to be used for. Seeing "ret", I decided to avoid it
>>> (knowing you use different names for different kinds of return
>>> values). While I've switched to "r" for now, I'd be rather
>>> inclined to re-use "ret" instead. (Or actually, as per the
>>> remark further down, I can get away without any local variable
>>> then.)
>>
>> I know there's quite a few (many?) coding style issue in libxl. I'm
>> trying to prevent new issue without asking to fix the existing one.
>> The use of "ret" is an already existing issue, so I'm fine with it been
>> use in this patch for libxl error code in the function.
>>
>> BTW, you still need to store the return value of xc_shadow_control()
>> into a "r" variable before checking it for error.
> 
> Are you saying that
> 
>         if (xc_shadow_control(ctx->xch, domid,
>                               XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
>                               NULL, 0, &shadow_mb, 0, NULL)) {
> 
> is not acceptable, style-wise?

Oh, there is indeed such a rule under "ERROR HANDLING". Which means ...

> If indeed you are, please disambiguate
> your statement above regarding the use of "ret": May I or may I not
> use it? IOW do I need to introduce "r", or can I get away with the
> existing local variables.

... I need this to be clarified.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:33:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:33:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149197.275825 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLA2-0000aT-4T; Fri, 02 Jul 2021 15:32:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149197.275825; Fri, 02 Jul 2021 15:32:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLA2-0000aM-1O; Fri, 02 Jul 2021 15:32:58 +0000
Received: by outflank-mailman (input) for mailman id 149197;
 Fri, 02 Jul 2021 15:32:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzL9z-0000aC-T8; Fri, 02 Jul 2021 15:32:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzL9z-0003Zd-OD; Fri, 02 Jul 2021 15:32:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzL9z-00055J-88; Fri, 02 Jul 2021 15:32:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzL9z-0003dp-7f; Fri, 02 Jul 2021 15:32:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3brfxfD38pg/aiw/Xf9DGQdUqKyB26eO1It5iUHHGX4=; b=d+6wTVUwcN2hNsBy0+TREMOKRK
	6+wNMH1V5xe/9YzbrHa+i7aefn99XTLc1/QKfzT3mrJDxYli7aPCDGd01aNHYMxpEFtbnvDMsfcIt
	5JWNPktz3atm5kON8JbMta+MrS586o57JJEMX+9s4UrFK8oZ9wUSdxgPeEJFatOYBZKU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163224-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163224: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 15:32:55 +0000

flight 163224 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163224/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   28 days
Failing since        162368  2021-06-04 15:42:59 Z   27 days   74 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    0 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:35:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:35:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149202.275840 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLCb-0001Cb-JC; Fri, 02 Jul 2021 15:35:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149202.275840; Fri, 02 Jul 2021 15:35:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLCb-0001CU-Fu; Fri, 02 Jul 2021 15:35:37 +0000
Received: by outflank-mailman (input) for mailman id 149202;
 Fri, 02 Jul 2021 15:35:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzLCa-0001CM-5b
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 15:35:36 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d895ea47-b7af-43a3-9b5e-ec75117c23c0;
 Fri, 02 Jul 2021 15:35:34 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d895ea47-b7af-43a3-9b5e-ec75117c23c0
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625240134;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Xdt+eIuEGaCpuykJfuYIIg+7Kj59yE98PXgv392ZAJ4=;
  b=MMM+nvbCw1QUlqwLL7AZVSO47YoTB7aWGrFo1QWuBXnx9Wy007CBa08f
   Zk+nk+Iutq7Fp4DrIfr2+ZPQY2HFRhzUDIZ43HRWNFI9FODwnla1V/f2S
   m99Zev3R4vhbD8qUFwqgdRFjEP/VuHTbeDxyMkYjowY5tEEEfh9oUE6CR
   Q=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 1/29cVpA2oXfCqfhtd/WEHdvrfxhXutm1y+HlRoIXACK/EO2+3KcUcNdpPAms/wzbk2ug9d/J/
 n4yFqdpU3WPS/Oxyd9fi0yjPntSwQP5tSifzZfMyBX5qgg5GAdSt9GutOJ1U/9MLZWbHP6+Wfi
 Gq4i8cLgqHr8fHZht86ON5hmVzZreB+zUUBdqGv9uv6DTtRUPK/eMvtSMJY8r8LNGQS/L2BLfY
 WP7wQZMNAElKazjjBmTPqZyexYpCOwFO/abyAl0OA62YsCRD5J3b+E0n0NXm32y/ZQBdeR0ER/
 vtY=
X-SBRS: 5.1
X-MesageID: 47540000
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Z4Ksh6Ajwsk9XYDlHemF55DYdb4zR+YMi2TDgXoBMSC9Ffbo8/
 xG/c5rsCMd6l4qMk3I/OrsBEDuex/hHPJOjrX5Xo3SPjUO2lHJEGg41/qa/9SIIUSXndK1s5
 0PT0EUMqySMbEVt6fHCKbTKada/DEqmprY4ts3bh1WPGdXV50=
X-IronPort-AV: E=Sophos;i="5.83,317,1616472000"; 
   d="scan'208";a="47540000"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fO1w+OdEBMESOjluxe2el3EnkiK/tK7r+REyQiaMPDQMZGnRLn8C4fmTGlP8MGuZe2iQSEDBLidJgBuJCgivIYvY261rfaXoCXbBb2a4yh8uY2hzzwCq9LW5U4kI+FUz//PSqmq98ZUFTojAzfW4XEPm0H72QonXcMcsvU+u3I1qctiIbBvIvPoY9iQCt67IFRLTvaVaX1jw/TRu3heCtipt77qenW4z6xd85TTCGH+NY8iddmVT2AwgB4/MG/alX42UX1jpE28BNL2nZD/rz4Mi01q4edAoow6foL+egxzgYGcVIzlnMqgYBFQUn//3f5mr/YX06GqsocxobB0zjw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Tpf0x1XJffsQgLTaKqZ/nNiSJRvmEJFmmAdpmrR+uYQ=;
 b=L5XeoRmSfYxio5XBrtX4aWFBnazWWcphZVtdtc7kSLsyghQZZoD5oCpjRoEDDCnsn0BaHNOxmSQ5/5KH9kHu66W9ro/TVMNtZxjtiGSKJvrJb2QxsfUXJyXay3mE6i8xR8habWStaL9S/egqepV8qMF9ZPlAaqCOzlGc9jW1Z+7K/ro1PWDDj5ByPvSqR4RYonML8JZuJpQ5nlhvl6ppEEuvZOPJ3CLVjgxL3wamtH21UnOEswxVXb7qGoK0Hsyd0OkK5gZy1tsULV3n/hcyOnFVcV5jJWc7VrxDLwC2WsDISQnjiDVQijSHYZoD7wmeib+ZdVLoiB05je1ioIes8g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Tpf0x1XJffsQgLTaKqZ/nNiSJRvmEJFmmAdpmrR+uYQ=;
 b=BXjP2bjCbLgUaGqjfIheUjLWLiTuoOFRyKLmH4glYmYco+GxjIOu4D+fWJuxIRwqB1gsVYz2J8iP+xej15t+8DPn89hp9u/DoL2pAMstGlRd9rQ5YoGFvt2Ye96OWp9O1YAXZYmkr2Pwpvs4R4aQ0vqnldghEH1jxsVBpNDH+LI=
Subject: Re: [PATCH v20210701 05/40] tools: handle libxl__physmap_info.name
 properly in convert-legacy-stream
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-6-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <c05bb29b-4a32-fc56-9493-62836f3dcd3d@citrix.com>
Date: Fri, 2 Jul 2021 16:35:24 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-6-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0319.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:197::18) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f41efe5a-6d21-4e95-7b55-08d93d6f06a6
X-MS-TrafficTypeDiagnostic: BY5PR03MB4998:
X-Microsoft-Antispam-PRVS: <BY5PR03MB49981702F8D00D5AC47EB78DBA1F9@BY5PR03MB4998.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Z71qIZGWFFJupdhXFnQrbT+gf5F4xmmck7OHjzPdLZBU2Yb8GR0jOBk39TKuTA+WtAhbwJhC0oSZnVM6duP76mpydoWSAKsk5GfxUMdy7+n3dU+/h1j14ifMMe1yRlQ6bvR2A8de/JLnp7z0w8nWLPR9/WSQaDsNahyPFwrRVvumWdA3accvuVg/Rts0fQ/OlCmEh8KLlX4CLZ/TkzG9zg9lBvM0hipGjeiO5iurmw+XXNCvjTFrcXVxSZpqUPq6aXhVfqJdQ/B/EDdpQass8HWmXaHZxWUMas2abdkgnFThPuEcxMbFkbbNsSZF4zUsfBdL7R+VvbJA0eVN1VphW3+r/GTc10IPzupvsFlaQZ1Y3k59rbdK+PUdLtCF2G8DwRH2GN+zEC+WaqojOxgKgGoJlFNhpfv3wc8S7WF5dbuGjJweQct0nM3M+VOn91hNqNhbPoHvYppB9sg2G30liP2pDe34RE2Z7FSd9qlxqfZX1Je5UWLu4FtyfHm0qeUn1gCKPXiTTf6C9VWmrjexYIb/jBpmtT2vVHv+k3qT82/eHokaR8OsH/Ux/eFi9UmUTN8HSJLCBg8lvI6yZhe6pGLAUpnJNyWY0q9Ot2wR7Um6d5qj798EjIz5YjE5sqpp2kcY+EH/4a+xtSCNzdxMK/uyyVTPaYH9NT0FaWfL82tchTzNUrt3jhJQFE+5aI93zzsQLp650uosqHZGwnJCDQGaRbwx+k1isc2Vc4MuIEx0lAJCsITeB1dfF72eojFaOdVC1BTz+PBV2+bI9jK2+w==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(396003)(346002)(39860400002)(366004)(8676002)(26005)(186003)(6486002)(16526019)(5660300002)(86362001)(53546011)(31686004)(36756003)(66556008)(956004)(31696002)(4326008)(2906002)(54906003)(66946007)(8936002)(2616005)(316002)(16576012)(478600001)(38100700002)(6666004)(66476007)(101420200003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: f41efe5a-6d21-4e95-7b55-08d93d6f06a6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 15:35:31.4092
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: cn7BI7VlOyQ5YyUgCnDGlN6zSsjgMXRQ5WNmQ832ZjXvB3DCllUDT2KFoZqERwELST5hxCEpU2zVPDAZ8pCihD3uexyUZwfmjzR5ZgZc9Ok=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB4998
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
> index 66ee3d2f5d..9003ac4f6d 100755
> --- a/tools/python/scripts/convert-legacy-stream
> +++ b/tools/python/scripts/convert-legacy-stream
> @@ -336,20 +336,21 @@ def read_libxl_toolstack(vm, data):
>          if len(data) < namelen:
>              raise StreamError("Remaining data too short for physmap name")
>  
> -        name = data[:namelen]
> +        c_string = data[:namelen]
>          data = data[namelen:]
>  
>          # Strip padding off the end of name
>          if twidth == 64:
> -            name = name[:-4]
> +            c_string = c_string[:-4]
>  
> -        if name[-1] != b'\x00':
> +        name, nil = unpack("={0}sB".format(len(c_string) - 1), c_string)

This is rather invasive.  How about simply:

diff --git a/tools/python/scripts/convert-legacy-stream
b/tools/python/scripts/convert-legacy-stream
index ca93a93848ec..d4ae94c02f21 100755
--- a/tools/python/scripts/convert-legacy-stream
+++ b/tools/python/scripts/convert-legacy-stream
@@ -342,7 +342,7 @@ def read_libxl_toolstack(vm, data):
         if twidth == 64:
             name = name[:-4]
 
-        if name[-1] != b'\x00':
+        if bytearray(name)[-1] != 0:
             raise StreamError("physmap name not NUL terminated")
 
         root = b"physmap/%x" % (phys, )

which is rather more contained, and looks to work from Py2.6 and later?

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 15:51:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 15:51:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149208.275851 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLSD-0003QK-0i; Fri, 02 Jul 2021 15:51:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149208.275851; Fri, 02 Jul 2021 15:51:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLSC-0003QD-T4; Fri, 02 Jul 2021 15:51:44 +0000
Received: by outflank-mailman (input) for mailman id 149208;
 Fri, 02 Jul 2021 15:51:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2GKt=L2=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1lzLSB-0003Q3-ED
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 15:51:43 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c74e55fe-1ce7-4883-84a5-2eb606b27198;
 Fri, 02 Jul 2021 15:51:42 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c74e55fe-1ce7-4883-84a5-2eb606b27198
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625241102;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=BjTqGy4abhKp1gc8m9BKzlsOJmsOYRUY/uoo8dZsolQ=;
  b=EQqDyzzQPjL0k+7ZjWEExH0mNVwd4haNuq07kAD01UMQQUrEMhAajjug
   IKyZdJRHgZqCFSWrqc57Qg1F5gdGKKy3qzLzJFDbXY64Dj+OsvX51mUD+
   VCGzp6gxp2cXs88nSa5JTsgUfjtGMcKvERurc5jFtqvik39+3U/Ngejql
   I=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 5FoqbxpJvQGHXpeWq5UWrpKAmtCthWJJNpCeswrd1d7pWx0OOKa/ZXTwLhcwOGYxOAQ+gSgXs6
 8ux9AbSoaLOnQNXjAUTfpYGka1zRj1uNydN8tUF/CRJUxaUya8W4ebsI57CaAlUcQqhpuER9O0
 t3lJBz851hpY/cRinxO/dy0kyeLyg/dwoVggGwozafZ3HkrhxZoGynJqNcCY9n7IMDbvTiftAG
 DZi1TYerS3BMJEnTsVcB2xpL/6SLsWl643LwV92jQ5ypxZNEjr3bNnW190dmRYmnRZQYg+2kpZ
 3Ak=
X-SBRS: 5.1
X-MesageID: 49104571
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:PmKBF6iKTgOr8h62UT8Hcq/G4nBQXtgji2hC6mlwRA09TySZ//
 rOoB0+726StN9xYgBFpTnuAsW9qB/nmqKdpLNhW4tKPzOW3VdATrsSjrcKqgeIc0aVm9K1l5
 0QEZSWYOeAdGSS5vyb3ODXKbgd/OU=
X-IronPort-AV: E=Sophos;i="5.83,317,1616472000"; 
   d="scan'208";a="49104571"
Date: Fri, 2 Jul 2021 16:51:38 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Andrew Cooper
	<andrew.cooper3@citrix.com>
Subject: Re: [PATCH] libxl/x86: check return value of
 SHADOW_OP_SET_ALLOCATION domctl
Message-ID: <YN82Cns3v7OouqTE@perard>
References: <5d2bb2cf-8c0c-7300-c895-75bef0e50817@suse.com>
 <YN2Mujj8jKGv7tik@perard> <4913d3f6-cd16-1865-9c19-99f7db615ded@suse.com>
 <YN8m4BBYrb++fEYN@perard> <89ccd8b7-42e1-0e86-5929-2a33fa1b9c4b@suse.com>
 <61f96b68-cd29-84c2-33ca-e114a6fc7714@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <61f96b68-cd29-84c2-33ca-e114a6fc7714@suse.com>

On Fri, Jul 02, 2021 at 05:14:40PM +0200, Jan Beulich wrote:
> On 02.07.2021 17:12, Jan Beulich wrote:
> > On 02.07.2021 16:46, Anthony PERARD wrote:
> >> On Fri, Jul 02, 2021 at 02:29:31PM +0200, Jan Beulich wrote:
> >>> On 01.07.2021 11:36, Anthony PERARD wrote:
> >>>> On Mon, Jun 28, 2021 at 01:47:03PM +0200, Jan Beulich wrote:
> >>>>> --- a/tools/libs/light/libxl_x86.c
> >>>>> +++ b/tools/libs/light/libxl_x86.c
> >>>>> @@ -531,8 +531,18 @@ int libxl__arch_domain_create(libxl__gc
> >>>>>      if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
> >>>>>          unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
> >>>>>                                             1024);
> >>>>> -        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
> >>>>> -                          NULL, 0, &shadow, 0, NULL);
> >>>>> +        int rc = xc_shadow_control(ctx->xch, domid,
> >>>>
> >>>> Could you use 'r' instead of 'rc' ? The later is reserved for libxl
> >>>> error codes while the former is for system and libxc calls.
> >>>
> >>> Of course I can, but I did look at the rest of the function and
> >>> found that it uses "ret" for the purpose of what you now say
> >>> "rc" ought to be used for. Seeing "ret", I decided to avoid it
> >>> (knowing you use different names for different kinds of return
> >>> values). While I've switched to "r" for now, I'd be rather
> >>> inclined to re-use "ret" instead. (Or actually, as per the
> >>> remark further down, I can get away without any local variable
> >>> then.)
> >>
> >> I know there's quite a few (many?) coding style issue in libxl. I'm
> >> trying to prevent new issue without asking to fix the existing one.
> >> The use of "ret" is an already existing issue, so I'm fine with it been
> >> use in this patch for libxl error code in the function.
> >>
> >> BTW, you still need to store the return value of xc_shadow_control()
> >> into a "r" variable before checking it for error.
> > 
> > Are you saying that
> > 
> >         if (xc_shadow_control(ctx->xch, domid,
> >                               XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
> >                               NULL, 0, &shadow_mb, 0, NULL)) {
> > 
> > is not acceptable, style-wise?
> 
> Oh, there is indeed such a rule under "ERROR HANDLING". Which means ...
> 
> > If indeed you are, please disambiguate
> > your statement above regarding the use of "ret": May I or may I not
> > use it? IOW do I need to introduce "r", or can I get away with the
> > existing local variables.
> 
> ... I need this to be clarified.

You need to introduce the "r" local variable, to store xc_shadow_control
return value.
Then, set "ret" to ERROR_FAIL before "goto out;".

Hope that's clearer.

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:00:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:00:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149215.275862 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLam-0005SF-1N; Fri, 02 Jul 2021 16:00:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149215.275862; Fri, 02 Jul 2021 16:00:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLal-0005S8-UJ; Fri, 02 Jul 2021 16:00:35 +0000
Received: by outflank-mailman (input) for mailman id 149215;
 Fri, 02 Jul 2021 16:00:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+naa=L2=perches.com=joe@srs-us1.protection.inumbo.net>)
 id 1lzLak-0005S2-Qz
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:00:34 +0000
Received: from smtprelay.hostedemail.com (unknown [216.40.44.36])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a21a0c34-db4e-11eb-83b7-12813bfff9fa;
 Fri, 02 Jul 2021 16:00:34 +0000 (UTC)
Received: from omf08.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60])
 by smtprelay07.hostedemail.com (Postfix) with ESMTP id 5E8CE181D207E;
 Fri,  2 Jul 2021 16:00:33 +0000 (UTC)
Received: from [HIDDEN] (Authenticated sender: joe@perches.com) by
 omf08.hostedemail.com (Postfix) with ESMTPA id 850751A29F9; 
 Fri,  2 Jul 2021 16:00:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a21a0c34-db4e-11eb-83b7-12813bfff9fa
Message-ID: <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
From: Joe Perches <joe@perches.com>
To: Peter Zijlstra <peterz@infradead.org>, Zhu Lingshan
 <lingshan.zhu@intel.com>
Cc: pbonzini@redhat.com, bp@alien8.de, seanjc@google.com,
 vkuznets@redhat.com,  wanpengli@tencent.com, jmattson@google.com,
 joro@8bytes.org,  weijiang.yang@intel.com, kan.liang@linux.intel.com,
 ak@linux.intel.com,  wei.w.wang@intel.com, eranian@google.com,
 liuxiangdong5@huawei.com,  linux-kernel@vger.kernel.org, x86@kernel.org,
 kvm@vger.kernel.org,  like.xu.linux@gmail.com, Like Xu
 <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>, Marc Zyngier
 <maz@kernel.org>, Guo Ren <guoren@kernel.org>,  Nick Hu
 <nickhu@andestech.com>, Paul Walmsley <paul.walmsley@sifive.com>, Boris
 Ostrovsky <boris.ostrovsky@oracle.com>,
 linux-arm-kernel@lists.infradead.org,  kvmarm@lists.cs.columbia.edu,
 linux-csky@vger.kernel.org,  linux-riscv@lists.infradead.org,
 xen-devel@lists.xenproject.org
Date: Fri, 02 Jul 2021 09:00:22 -0700
In-Reply-To: <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
	 <20210622094306.8336-2-lingshan.zhu@intel.com>
	 <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
Content-Type: text/plain; charset="ISO-8859-1"
User-Agent: Evolution 3.40.0-1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Rspamd-Queue-Id: 850751A29F9
X-Spam-Status: No, score=-1.40
X-Stat-Signature: shha9bwa3wcuy6qog6sh3abeec4qbbut
X-Rspamd-Server: rspamout03
X-Session-Marker: 6A6F6540706572636865732E636F6D
X-Session-ID: U2FsdGVkX18c3UUJH2LcjAG65GSZ68xha895S86OjZI=
X-HE-Tag: 1625241625-20610

On Fri, 2021-07-02 at 13:22 +0200, Peter Zijlstra wrote:
> On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
> > diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
[]
> > @@ -90,6 +90,27 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
> > */
> > DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
> > 
> > 
> > +DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
> > +DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
> > +DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
> > +
> > +void arch_perf_update_guest_cbs(void)
> > +{
> > +	static_call_update(x86_guest_state, (void *)&__static_call_return0);
> > +	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
> > +	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
> > +
> > +	if (perf_guest_cbs && perf_guest_cbs->state)
> > +		static_call_update(x86_guest_state, perf_guest_cbs->state);
> > +
> > +	if (perf_guest_cbs && perf_guest_cbs->get_ip)
> > +		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
> > +
> > +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
> > +		static_call_update(x86_guest_handle_intel_pt_intr,
> > +				   perf_guest_cbs->handle_intel_pt_intr);
> > +}
> 
> Coding style wants { } on that last if().

That's just your personal preference.

The coding-style document doesn't require that.

It just says single statement.  It's not the number of
vertical lines or characters required for the statement.

----------------------------------

Do not unnecessarily use braces where a single statement will do.

.. code-block:: c

	if (condition)
		action();

and

.. code-block:: none

	if (condition)
		do_this();
	else
		do_that();

This does not apply if only one branch of a conditional statement is a single
statement; in the latter case use braces in both branches:




From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:19:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:19:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149219.275873 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLtN-00070M-K3; Fri, 02 Jul 2021 16:19:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149219.275873; Fri, 02 Jul 2021 16:19:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLtN-00070F-H1; Fri, 02 Jul 2021 16:19:49 +0000
Received: by outflank-mailman (input) for mailman id 149219;
 Fri, 02 Jul 2021 16:19:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=lind=L2=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1lzLtL-000709-6A
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:19:47 +0000
Received: from wout4-smtp.messagingengine.com (unknown [64.147.123.20])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 50603c45-db51-11eb-83bb-12813bfff9fa;
 Fri, 02 Jul 2021 16:19:45 +0000 (UTC)
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
 by mailout.west.internal (Postfix) with ESMTP id 4F51A3200939;
 Fri,  2 Jul 2021 12:19:44 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute4.internal (MEProxy); Fri, 02 Jul 2021 12:19:44 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri,
 2 Jul 2021 12:19:42 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 50603c45-db51-11eb-83bb-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=YBZ4tJ
	Ng0hQZ1NvEYHvKXLF8rlfuU8r7NDnfsiqj9Ro=; b=iy34pu1U4GN3CfPS7M38hT
	VW9wqV5xo42lUIyjebAdcxpIZU0DX5U1v/4vQEVg0g7T+evI6CGmLJHNvsAbhPDM
	6HJhgjvrd42MwgjGgUascf2L5j4FEWJhGGrYjP1IoBm7hXOtE4nxY13xd/mzQMyR
	oLJwRkONmkll9Txi13eqEDsd0S0HavUv8UCYrYPb8+/9iyD0RGp8nlN8JBx5y9DM
	la85lJZUivZMAOT0EKCSz8ZckQvVyzVCGyw2ozg1NRODOFGqyLb2sU1sc9/C1loG
	c/+pLFThAzbsPLhVm7u9MVccQVKkduw3bPOGRuMXI+tcqmUENfRZnFZrF1/7n3cg
	==
X-ME-Sender: <xms:nzzfYLw524BTFM5p6bhA5DBcBLW1z5b9vNKu0UyLk9VdYScZbsJJBg>
    <xme:nzzfYDSZfFzHA15RZOnxc2SXiGe2QatpxBlxf5SHElJfsoQcaSeaPpy8brtY6Pifd
    KvIcQmBSXrCAQ>
X-ME-Received: <xmr:nzzfYFVLAp72KlprQxaNuKifDaNJpEIcqAI3U6LyI8gp67hjiPWPbngTGL0IRVBq9NAv7Ez20LIpYTLyT5uZ6AlyhW4miaC5>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrfeeikedgleekucetufdoteggodetrfdotf
    fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen
    uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne
    cujfgurhepfffhvffukfhfgggtuggjsehgtderredttdejnecuhfhrohhmpeforghrvghk
    ucforghrtgiihihkohifshhkihdqifpkrhgvtghkihcuoehmrghrmhgrrhgvkhesihhnvh
    hishhisghlvghthhhinhhgshhlrggsrdgtohhmqeenucggtffrrghtthgvrhhnpeetveff
    iefghfekhffggeeffffhgeevieektedthfehveeiheeiiedtudegfeetffenucevlhhush
    htvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehmrghrmhgrrhgvkhes
    ihhnvhhishhisghlvghthhhinhhgshhlrggsrdgtohhm
X-ME-Proxy: <xmx:nzzfYFjd58MyAlwHDmxUmd8JlfRe7whp3rzBv_39A_Pxbg4ctOvBqw>
    <xmx:nzzfYNAS-lN3U4fjPEocLhVUcTEHwWlC_-K5zYlOR3sLW2fG_9zJSw>
    <xmx:nzzfYOJ-B6eQNj_girhEge9aybFCLThnfBnB7aa8hcJhZ47Eeh-TFw>
    <xmx:nzzfYK47bAQ9JrtzxEyosuwgMS6W770Mc8TrvYQ_ixr5iB83fKNJ-Q>
Date: Fri, 2 Jul 2021 18:19:39 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Olaf Hering <olaf@aepfle.de>
Cc: xen-devel@lists.xenproject.org, Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in format
 string
Message-ID: <YN88m0tvHKxF7+NI@mail-itl>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-7-olaf@aepfle.de>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="0PxFz+rlyW/ZVH6j"
Content-Disposition: inline
In-Reply-To: <20210701095635.15648-7-olaf@aepfle.de>


--0PxFz+rlyW/ZVH6j
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Fri, 2 Jul 2021 18:19:39 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Olaf Hering <olaf@aepfle.de>
Cc: xen-devel@lists.xenproject.org, Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in format
 string

On Thu, Jul 01, 2021 at 11:56:01AM +0200, Olaf Hering wrote:
> Using the first element of a tuple for a format specifier fails with
> python3.4 as included in SLE12:
>     b =3D b"string/%x" % (i, )
> TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
>=20
> It happens to work with python 2.7 and 3.6.
> Use a syntax that is handled by all three variants.
>=20
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>  tools/python/scripts/convert-legacy-stream | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>=20
> diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/sc=
ripts/convert-legacy-stream
> index 9003ac4f6d..235b922ff5 100755
> --- a/tools/python/scripts/convert-legacy-stream
> +++ b/tools/python/scripts/convert-legacy-stream
> @@ -347,9 +347,9 @@ def read_libxl_toolstack(vm, data):
>          if nil !=3D 0:
>              raise StreamError("physmap name not NUL terminated")
> =20
> -        root =3D b"physmap/%x" % (phys, )
> -        kv =3D [root + b"/start_addr", b"%x" % (start, ),
> -              root + b"/size",       b"%x" % (size, ),
> +        root =3D bytes(("physmap/%x" % phys).encode('utf-8'))
> +        kv =3D [root + b"/start_addr", bytes(("%x" % start).encode('utf-=
8')),
> +              root + b"/size",       bytes(("%x" % size).encode('utf-8')=
),

Why bytes()? Encode does already return bytes type.

>                root + b"/name",       name]
> =20
>          for key, val in zip(kv[0::2], kv[1::2]):

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--0PxFz+rlyW/ZVH6j
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmDfPJsACgkQ24/THMrX
1yxGhggAhvkfFO/jUgXBIVvtXKv0oCbmo0tJGq/QRQz7KkyXy+ZfwaSzLD1EdOgE
hiJcUUfA1+o+vKXfYrQIuoIhQ7o8Unt8Y/qW1eJVweRMB9oHJ2JvCuwzZnFu7gyk
m1mU5xByavGhHLC+z9OYTmWTgTh/MvUF10UZDzXsJwciWSLUYKZPqI64C1cUlgBm
sCdccuaWPCrwAu3SLrlF2xMvFIPo8hKZ80YGnzpqjJfMUOkWqMo2vGWkzpX6d3Nk
urNH86r/RDs3x2kB9KRd8XxTKz28JuHS2Jt8FhFBK7HrLxTdprCfbrr9AyZMNZHh
yCdfKlpPfqXkb/mwzA/7Our3VJ8g+w==
=Vc5l
-----END PGP SIGNATURE-----

--0PxFz+rlyW/ZVH6j--


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:21:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:21:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149223.275884 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLuo-0008Hn-06; Fri, 02 Jul 2021 16:21:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149223.275884; Fri, 02 Jul 2021 16:21:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzLun-0008Hg-Ra; Fri, 02 Jul 2021 16:21:17 +0000
Received: by outflank-mailman (input) for mailman id 149223;
 Fri, 02 Jul 2021 16:21:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8c6G=L2=infradead.org=peterz@srs-us1.protection.inumbo.net>)
 id 1lzLum-0008HW-II
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:21:17 +0000
Received: from casper.infradead.org (unknown [2001:8b0:10b:1236::1])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5675a5e2-f293-45b3-8fc4-d5e4a817d9cc;
 Fri, 02 Jul 2021 16:21:13 +0000 (UTC)
Received: from j217100.upc-j.chello.nl ([24.132.217.100]
 helo=noisy.programming.kicks-ass.net)
 by casper.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux))
 id 1lzLtX-007r9Y-4l; Fri, 02 Jul 2021 16:20:02 +0000
Received: from hirez.programming.kicks-ass.net
 (hirez.programming.kicks-ass.net [192.168.1.225])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits))
 (Client did not present a certificate)
 by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 65FA830007E;
 Fri,  2 Jul 2021 18:19:56 +0200 (CEST)
Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000)
 id 484942B759E47; Fri,  2 Jul 2021 18:19:56 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5675a5e2-f293-45b3-8fc4-d5e4a817d9cc
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding:
	Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:
	Sender:Reply-To:Content-ID:Content-Description;
	bh=1zeioteA+jdIxWL/dgp30Yr4n/h54VyVtqBx1y8dmpw=; b=fYXRPL+pdyd6pWTWgyqUpSCon6
	hVRsaqHU4sbIFMylpPESw6s1ds+Ne9pVmfvWssHCPh1tDhQ9NkyStK+h+EbWgWCnW12z5BtIVCdGe
	f+zT2Z6CPo0EeWU9hw197UGVVVwpfo/M/LWBBZmP19BuXpyZ9vOQSoLzX4yYf8flnCnzPjudhIe5I
	nAPW1UA4YFmGzh9Tr8facSLDTW5eGOBQNDmEGJQ9f2Ue8KDsvmGSbeYOcfg67qbyPcb5an5v85HpA
	uIFMkJLiWxHwoIg2+vPo84aLIc+3qyJICFoRdiDRt5ZJq1EXAve92cC7Nu/lybkzevKBEV34ZCENu
	mIazXrTg==;
Date: Fri, 2 Jul 2021 18:19:56 +0200
From: Peter Zijlstra <peterz@infradead.org>
To: Joe Perches <joe@perches.com>
Cc: Zhu Lingshan <lingshan.zhu@intel.com>, pbonzini@redhat.com,
	bp@alien8.de, seanjc@google.com, vkuznets@redhat.com,
	wanpengli@tencent.com, jmattson@google.com, joro@8bytes.org,
	weijiang.yang@intel.com, kan.liang@linux.intel.com,
	ak@linux.intel.com, wei.w.wang@intel.com, eranian@google.com,
	liuxiangdong5@huawei.com, linux-kernel@vger.kernel.org,
	x86@kernel.org, kvm@vger.kernel.org, like.xu.linux@gmail.com,
	Like Xu <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>,
	Marc Zyngier <maz@kernel.org>, Guo Ren <guoren@kernel.org>,
	Nick Hu <nickhu@andestech.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu,
	linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
Message-ID: <YN88rE+cxb7HrEtI@hirez.programming.kicks-ass.net>
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
 <20210622094306.8336-2-lingshan.zhu@intel.com>
 <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
 <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>

On Fri, Jul 02, 2021 at 09:00:22AM -0700, Joe Perches wrote:
> On Fri, 2021-07-02 at 13:22 +0200, Peter Zijlstra wrote:
> > On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
> > > diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> []
> > > @@ -90,6 +90,27 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
> > > */
> > > DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
> > > 
> > > 
> > > +DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
> > > +DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
> > > +DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
> > > +
> > > +void arch_perf_update_guest_cbs(void)
> > > +{
> > > +	static_call_update(x86_guest_state, (void *)&__static_call_return0);
> > > +	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
> > > +	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
> > > +
> > > +	if (perf_guest_cbs && perf_guest_cbs->state)
> > > +		static_call_update(x86_guest_state, perf_guest_cbs->state);
> > > +
> > > +	if (perf_guest_cbs && perf_guest_cbs->get_ip)
> > > +		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
> > > +
> > > +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
> > > +		static_call_update(x86_guest_handle_intel_pt_intr,
> > > +				   perf_guest_cbs->handle_intel_pt_intr);
> > > +}
> > 
> > Coding style wants { } on that last if().
> 
> That's just your personal preference.

As a maintainer, those carry weight, also that's tip rules:

  https://lore.kernel.org/lkml/20181107171149.165693799@linutronix.de/


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:39:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:39:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149229.275895 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMBi-0001QH-DK; Fri, 02 Jul 2021 16:38:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149229.275895; Fri, 02 Jul 2021 16:38:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMBi-0001QA-9j; Fri, 02 Jul 2021 16:38:46 +0000
Received: by outflank-mailman (input) for mailman id 149229;
 Fri, 02 Jul 2021 16:38:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ErTj=L2=arm.com=mark.rutland@srs-us1.protection.inumbo.net>)
 id 1lzMBh-0001Q4-EN
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:38:45 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id f6edbfb2-db53-11eb-83bc-12813bfff9fa;
 Fri, 02 Jul 2021 16:38:43 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 45060147A;
 Fri,  2 Jul 2021 09:38:43 -0700 (PDT)
Received: from C02TD0UTHF1T.local (unknown [10.57.15.239])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 94E3C3F5A1;
 Fri,  2 Jul 2021 09:38:38 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6edbfb2-db53-11eb-83bc-12813bfff9fa
Date: Fri, 2 Jul 2021 17:38:36 +0100
From: Mark Rutland <mark.rutland@arm.com>
To: Joe Perches <joe@perches.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Zhu Lingshan <lingshan.zhu@intel.com>, wanpengli@tencent.com,
	Like Xu <like.xu@linux.intel.com>, eranian@google.com,
	weijiang.yang@intel.com, Guo Ren <guoren@kernel.org>,
	linux-riscv@lists.infradead.org, Will Deacon <will@kernel.org>,
	kvmarm@lists.cs.columbia.edu, kan.liang@linux.intel.com,
	ak@linux.intel.com, kvm@vger.kernel.org,
	Marc Zyngier <maz@kernel.org>, joro@8bytes.org, x86@kernel.org,
	linux-csky@vger.kernel.org, wei.w.wang@intel.com,
	xen-devel@lists.xenproject.org, liuxiangdong5@huawei.com,
	bp@alien8.de, Paul Walmsley <paul.walmsley@sifive.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	linux-arm-kernel@lists.infradead.org, jmattson@google.com,
	like.xu.linux@gmail.com, Nick Hu <nickhu@andestech.com>,
	seanjc@google.com, linux-kernel@vger.kernel.org,
	pbonzini@redhat.com, vkuznets@redhat.com
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
Message-ID: <20210702163836.GB94260@C02TD0UTHF1T.local>
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
 <20210622094306.8336-2-lingshan.zhu@intel.com>
 <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
 <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>

On Fri, Jul 02, 2021 at 09:00:22AM -0700, Joe Perches wrote:
> On Fri, 2021-07-02 at 13:22 +0200, Peter Zijlstra wrote:
> > On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
> > > diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> []
> > > @@ -90,6 +90,27 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
> > >   */
> > >  DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
> > >  
> > > 
> > > +DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
> > > +DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
> > > +DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
> > > +
> > > +void arch_perf_update_guest_cbs(void)
> > > +{
> > > +	static_call_update(x86_guest_state, (void *)&__static_call_return0);
> > > +	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
> > > +	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
> > > +
> > > +	if (perf_guest_cbs && perf_guest_cbs->state)
> > > +		static_call_update(x86_guest_state, perf_guest_cbs->state);
> > > +
> > > +	if (perf_guest_cbs && perf_guest_cbs->get_ip)
> > > +		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
> > > +
> > > +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
> > > +		static_call_update(x86_guest_handle_intel_pt_intr,
> > > +				   perf_guest_cbs->handle_intel_pt_intr);
> > > +}
> > 
> > Coding style wants { } on that last if().
> 
> That's just your personal preference.
> 
> The coding-style document doesn't require that.
> 
> It just says single statement.  It's not the number of
> vertical lines or characters required for the statement.
> 
> ----------------------------------
> 
> Do not unnecessarily use braces where a single statement will do.
> 
> .. code-block:: c
> 
> 	if (condition)
> 		action();
> 
> and
> 
> .. code-block:: none
> 
> 	if (condition)
> 		do_this();
> 	else
> 		do_that();
> 
> This does not apply if only one branch of a conditional statement is a single
> statement; in the latter case use braces in both branches:

Immediately after this, we say:

| Also, use braces when a loop contains more than a single simple statement:
|
| .. code-block:: c
| 
|         while (condition) {
|                 if (test)
|                         do_something();
|         }
| 

... and while that says "a loop", the principle is obviously supposed to
apply to conditionals too; structurally they're no different. We should
just fix the documentation to say "a loop or conditional", or something
to that effect.

Mark.


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:40:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:40:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149232.275906 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMD1-0002hR-NR; Fri, 02 Jul 2021 16:40:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149232.275906; Fri, 02 Jul 2021 16:40:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMD1-0002hK-KD; Fri, 02 Jul 2021 16:40:07 +0000
Received: by outflank-mailman (input) for mailman id 149232;
 Fri, 02 Jul 2021 16:40:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lzMD0-0002h8-D2
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:40:06 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2739fb90-db54-11eb-83bc-12813bfff9fa;
 Fri, 02 Jul 2021 16:40:05 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2739fb90-db54-11eb-83bc-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625244005;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=QNDiYe7qVvD77weSt/RSAqaII0v+IS7MsePnmosmZoc=;
  b=aZ+B1dvSV/EP5yq6ShYqffUn7bQnn4FxG2SmQuf1tIrtNQvZOXobi8cL
   gK8prKz4M9vAcLo++ROrH5hEFP2wTUouq8TzgAtYwKfM7VKkivXeaArtB
   JEs+OWO6afiZCXZCJojVdnz50cpCJ9MJ9Y/xgBzEa4NZhFjNyeqxRWz8+
   Y=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: AKWCZRCYTFADERGXdBnNoVgL8cG1cUINEViI9ewxcS1f3XMCLff/dXSyBI4O4fn7qtQiorhgEP
 ozMKJS4GPp7LRG9FIBFThXbZ/kOiAUT/ZlxjtyW/V2XUiyhApogGG+4s7L90Tu/DAb0T/8OBae
 nhPTMCeN2cw0T1kkeHeWf1494R2xktTLTgQBNSWrUBXKjXidY5xE9ZU3JHdnxD6WTZcuxhT2r9
 8eDjvT0gBYDd7epne/8sLGMqpTn4lY/wIXE2Sh8GT1g2k+x3W1m/RJfs6hN+04BI/v+kPLj+Dt
 qFo=
X-SBRS: 5.1
X-MesageID: 47544408
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:cgiyBqPF8dnZYsBcTyr155DYdb4zR+YMi2TDiHofdfUFSKClfp
 6V8cjztSWUtN4QMEtQ/exoS5PwPk80kqQFnbX5XI3SITUO3VHHEGgM1/qb/9SNIVyZygcZ79
 YbT0EcMqyCMbEZt7eC3ODQKb9Jq7PmgcPY8Ns2jU0dKj2CA5sQnzuRYTzrcHGeKjM2YKbRWK
 Dsnfau8FGbCAUqh4mAdzU4dtmGg+eOuIPtYBYACRJiwA6SjQmw4Lq/NxSDxB8RXx5G3L9nqA
 H+4kLEz5Tml8v+5g7X1mfV4ZgTsNz9yuFbDMjJrsQOMD3jhiuheYwkcbyfuzIepv2p9T8R4Z
 bxiiZlG/42x2Laf2mzrxeo8RLnyiwS53jrzkLdqWf/oOTiLQhKSPZptMZ8SF/0+kAgtNZz3O
 ZgxGSCradaChvGgWDU+8XIbRd3jUC5yEBS0dL7t0YvFLf2VYUh6bD2pChuYdA99WPBmcEa+d
 BVfYPhDK08SyLdU5ix1VMfsuBFXRwIb1y7qwY5y5WoOgNt7QdEJn0jtYQid0c7heYAoqZ/lp
 L524RT5ftzp5wtHO9A7Nloe7r/NoWbe2OzDIvVGyW+KJ06
X-IronPort-AV: E=Sophos;i="5.83,317,1616472000"; 
   d="scan'208";a="47544408"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dGFbQr0/jn0AE2GyCa/iadBmTp0FVWMg0cx3KANoN1L9/ELG8Lo22P0IXgjRQJo8S2SSfOibPy5moFL0m4yvtGk5hz++whJ9dmR8piBdSi6QetT/t3O0Gawvt4+xZdcdiJ7JmXh8x5XtEXx8+NEiEvzvHZsd6XRndywV68t3vHzN14mxoPCLF+whPymWyKvb7EwxgFoUOEBz4OzSEEi7ZNMBksOtukxJdGPNWB5+3QBV8AD+O0Du2OAI43FJBXyH88virPlLR9pq7X3QbZfTN25iTih1RIFu5BJkdKD6IP9XiH+vPuQC2utBbflbCbMpgZq0q1v7KbdNwQ5mCK7N2g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PxkcVonICac42Pbf/BOtB1iAtPYZZwEMizz0Pojn5Xs=;
 b=dqB7GuavQ5hltphivSfSED2D6wA2NOisMq29uLOcl9grBKpIJnH955ZYO3f0o6z7pqT/RqZOYnZvytdoMpSUA3gAuU8kwGfsA3+5vgoTtqxZUavn/vtW1875i2HujBg4XO4AGlMNCFkxQOsTuS2ZaXQDJW+GSScWFxk4lVq+mefa1s9pzMndtsH3K+PC5diKEbYc512KAHmz6zLfJCUUXAITb8stcKHFeqDmGIogkuN904AWygI3nNCrVDX0JhOij6YFJQVfLNQIzS68nGch6MVYNHCN6/QMMbF5AVeNNTjNIx2itTP9nsscLNseaT3LJ/YnmPqJ3dd7LG/yWWbSsw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PxkcVonICac42Pbf/BOtB1iAtPYZZwEMizz0Pojn5Xs=;
 b=uuJnD5Y1w2TG3pBfKH5+bYzVjqLWtHiYb5WiBu2vJvmD7oQQxzwJEOP7gfNBUQZkoH4gDmgEYrdFirPWpiK193Xqn0rU46FKUZHXSpiIpdPDYsL2mxkEDypAHEKhrinFbYo3WlCKzSmbUbT/mSHiLoP2nEbD5lXD/WygQBcF3zQ=
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in format
 string
To: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-7-olaf@aepfle.de> <YN88m0tvHKxF7+NI@mail-itl>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <e285cef0-4c85-35a1-37a9-f56ec9122002@citrix.com>
Date: Fri, 2 Jul 2021 17:39:54 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YN88m0tvHKxF7+NI@mail-itl>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0423.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18b::14) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 68badc1b-971b-4609-547f-08d93d7808e6
X-MS-TrafficTypeDiagnostic: BYAPR03MB4166:
X-Microsoft-Antispam-PRVS: <BYAPR03MB41662E31E88747986123B647BA1F9@BYAPR03MB4166.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3044;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: V93+PyxjLhMoQ7hmRua8HwSUDtVlpPzWWyItnsP3kA9UYM7DY34uHjqvBIHlr035D8cFKRpVpxByyJR+5ut3uMLFqxX2lbw5P6uq9DAlAADh6p1vck4jqaJnw/hrqmunH79RFc7UCIF0bczq5Tb1kCDGskcXfOIGmKqhNTwF6HQoeIuWkHkgeUYktuLigf2BIf62p6fvEAUDmaXkqUaTy+/PcyVJpU3jQEJdeJ2CY3QUknY6x0QwWn/sWtrZGQgINQ8s2BzHUzZjPfWVBBrXjz6TDX1WvH+Y3MYuUofqRUrMKFhuZX+5nEb1nCEI2KJg4q5C7rWJZz5xQoYRj1n0PlhsPh4duqaZwbZ/KQia8GGLVVT4V7L3/dLgLROnQc3f7tKIlTSl27cSc+vy5DjwUA20oNFunqVGS1tM7pmNHNXCTCzcfoPng2iggkpMTvEWGPEw50P/4POvkTB/v+17VjpWMUGbTsX7glbeRF1phjDsjoQeMsugMmorxxqDvJ50rRZGG9iwsiJouCkIDeh6DAgTf8LIVHmBjgNJDP5LUP84c1JY0ZW+FA+8YKXGeh9lIWTUYONRA6ti6hpW2kpjW++I+VBbTHUWsanP74XNkNgKMOmoSD9szXgGEJY7X7229PFV/gPOotc0BCW0R1YK1FKuZA8t/btQPGk/kUomLoHexnfFDB2TJT1YvK5xPItRUFcMlCL97YozaxhW3j30dPPmW2g5xeb56Ipw9OyTnQ61eCHKqwigkBV92q+ojNqO8FlIwWPj3rAebRVT5vL2ojV2XtIc5J9ONO6TKveX0A5TFgEzFwkTI1a20OPPIC5h
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(396003)(346002)(39860400002)(136003)(316002)(6666004)(16576012)(8676002)(16526019)(31686004)(110136005)(31696002)(6486002)(2906002)(86362001)(8936002)(5660300002)(38100700002)(54906003)(956004)(2616005)(83380400001)(966005)(36756003)(66476007)(478600001)(66946007)(186003)(26005)(66556008)(4326008)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 68badc1b-971b-4609-547f-08d93d7808e6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 16:40:00.6097
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: iNBr8bs/awouGz0XcaFq4mCvg+q/GUUN+mPTf2Fg9cAzeoSnR7o1jniXjzi2MvmvQfofQtwWMFQ8HFhpxaUQnjKIfWFpY6RbOL/e10+1ze0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4166
X-OriginatorOrg: citrix.com

On 02/07/2021 17:19, Marek Marczykowski-Górecki wrote:
> On Thu, Jul 01, 2021 at 11:56:01AM +0200, Olaf Hering wrote:
>> Using the first element of a tuple for a format specifier fails with
>> python3.4 as included in SLE12:
>>     b = b"string/%x" % (i, )
>> TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
>>
>> It happens to work with python 2.7 and 3.6.
>> Use a syntax that is handled by all three variants.
>>
>> Signed-off-by: Olaf Hering <olaf@aepfle.de>
>> ---
>>  tools/python/scripts/convert-legacy-stream | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
>> index 9003ac4f6d..235b922ff5 100755
>> --- a/tools/python/scripts/convert-legacy-stream
>> +++ b/tools/python/scripts/convert-legacy-stream
>> @@ -347,9 +347,9 @@ def read_libxl_toolstack(vm, data):
>>          if nil != 0:
>>              raise StreamError("physmap name not NUL terminated")
>>  
>> -        root = b"physmap/%x" % (phys, )
>> -        kv = [root + b"/start_addr", b"%x" % (start, ),
>> -              root + b"/size",       b"%x" % (size, ),
>> +        root = bytes(("physmap/%x" % phys).encode('utf-8'))
>> +        kv = [root + b"/start_addr", bytes(("%x" % start).encode('utf-8')),
>> +              root + b"/size",       bytes(("%x" % size).encode('utf-8')),
> Why bytes()? Encode does already return bytes type.

Yes - I've just tried this out on various version of python (including
https://www.onlinegdb.com/online_python_interpreter which is the only
place I can find Python 3.4 easily available)

.encode() does return bytes (Py3) or str (Py2) so doesn't need the
surrounding bytes().

However, the % (phys, ) with the trailing comma is deliberate to work
around a common python error, so wants to remain if you're keeping the
%-formatting.

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:42:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:42:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149237.275917 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMFR-0003SL-BZ; Fri, 02 Jul 2021 16:42:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149237.275917; Fri, 02 Jul 2021 16:42:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMFR-0003SE-7m; Fri, 02 Jul 2021 16:42:37 +0000
Received: by outflank-mailman (input) for mailman id 149237;
 Fri, 02 Jul 2021 16:42:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+naa=L2=perches.com=joe@srs-us1.protection.inumbo.net>)
 id 1lzMFQ-0003S8-2m
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:42:36 +0000
Received: from smtprelay.hostedemail.com (unknown [216.40.44.201])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ce75d36e-57c0-44ea-883c-acb8a663e0c1;
 Fri, 02 Jul 2021 16:42:35 +0000 (UTC)
Received: from omf19.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60])
 by smtprelay04.hostedemail.com (Postfix) with ESMTP id C507B180A9C91;
 Fri,  2 Jul 2021 16:42:34 +0000 (UTC)
Received: from [HIDDEN] (Authenticated sender: joe@perches.com) by
 omf19.hostedemail.com (Postfix) with ESMTPA id 10EBB20D764; 
 Fri,  2 Jul 2021 16:42:26 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ce75d36e-57c0-44ea-883c-acb8a663e0c1
Message-ID: <34a668a0606092990326207d2acc5441592756d6.camel@perches.com>
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
From: Joe Perches <joe@perches.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Zhu Lingshan <lingshan.zhu@intel.com>, pbonzini@redhat.com,
 bp@alien8.de,  seanjc@google.com, vkuznets@redhat.com,
 wanpengli@tencent.com, jmattson@google.com,  joro@8bytes.org,
 weijiang.yang@intel.com, kan.liang@linux.intel.com,  ak@linux.intel.com,
 wei.w.wang@intel.com, eranian@google.com,  liuxiangdong5@huawei.com,
 linux-kernel@vger.kernel.org, x86@kernel.org,  kvm@vger.kernel.org,
 like.xu.linux@gmail.com, Like Xu <like.xu@linux.intel.com>,  Will Deacon
 <will@kernel.org>, Marc Zyngier <maz@kernel.org>, Guo Ren
 <guoren@kernel.org>, Nick Hu <nickhu@andestech.com>, Paul Walmsley
 <paul.walmsley@sifive.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 linux-arm-kernel@lists.infradead.org,  kvmarm@lists.cs.columbia.edu,
 linux-csky@vger.kernel.org,  linux-riscv@lists.infradead.org,
 xen-devel@lists.xenproject.org
Date: Fri, 02 Jul 2021 09:42:25 -0700
In-Reply-To: <YN88rE+cxb7HrEtI@hirez.programming.kicks-ass.net>
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
	 <20210622094306.8336-2-lingshan.zhu@intel.com>
	 <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
	 <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>
	 <YN88rE+cxb7HrEtI@hirez.programming.kicks-ass.net>
Content-Type: text/plain; charset="ISO-8859-1"
User-Agent: Evolution 3.40.0-1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-1.40
X-Stat-Signature: ycuw4tc4dkddxofnskkdygh116nc5379
X-Rspamd-Server: rspamout04
X-Rspamd-Queue-Id: 10EBB20D764
X-Session-Marker: 6A6F6540706572636865732E636F6D
X-Session-ID: U2FsdGVkX18HOccKXnefKVhqRarv+ICfPC7oSScH3Ls=
X-HE-Tag: 1625244146-824246

On Fri, 2021-07-02 at 18:19 +0200, Peter Zijlstra wrote:
> On Fri, Jul 02, 2021 at 09:00:22AM -0700, Joe Perches wrote:
> > On Fri, 2021-07-02 at 13:22 +0200, Peter Zijlstra wrote:
> > > On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
> > > > diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> > []
> > > > +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
> > > > +		static_call_update(x86_guest_handle_intel_pt_intr,
> > > > +				   perf_guest_cbs->handle_intel_pt_intr);
> > > > +}
> > > 
> > > Coding style wants { } on that last if().
> > 
> > That's just your personal preference.
> 
> As a maintainer, those carry weight, also that's tip rules:
> 
> https://lore.kernel.org/lkml/20181107171149.165693799@linutronix.de/

Right, definitely so.

But merely referencing 'coding style' is ambiguous at best.

btw:

ASCII commonly refers to '{' and '}', the curly brackets, to be braces
and '[' and ']', the square brackets, to be brackets.

It might be clearer to use that terminology.

belts and braces, etc...

cheers, Joe

----------------

+Bracket rules
+^^^^^^^^^^^^^
+
+Brackets should be omitted only if the statement which follows 'if', 'for',
+'while' etc. is truly a single line::
+
+	if (foo)
+		do_something();
+
+The following is not considered to be a single line statement even
+though C does not require brackets::
+
+	for (i = 0; i < end; i++)
+		if (foo[i])
+			do_something(foo[i]);
+
+Adding brackets around the outer loop enhances the reading flow::
+
+	for (i = 0; i < end; i++) {
+		if (foo[i])
+			do_something(foo[i]);
+	}




From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:49:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:49:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149243.275928 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMLe-000481-2L; Fri, 02 Jul 2021 16:49:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149243.275928; Fri, 02 Jul 2021 16:49:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMLd-00047u-VI; Fri, 02 Jul 2021 16:49:01 +0000
Received: by outflank-mailman (input) for mailman id 149243;
 Fri, 02 Jul 2021 16:49:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMLd-00047k-Da; Fri, 02 Jul 2021 16:49:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMLd-0005Mp-77; Fri, 02 Jul 2021 16:49:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMLc-0007DX-SJ; Fri, 02 Jul 2021 16:49:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMLc-0004lk-Rq; Fri, 02 Jul 2021 16:49:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tlIp1cihvGVnO5SMtNwoPZsubtnbIaZyb7hkURA6icg=; b=05LJW/St6EhmfrYpBhjo1CPyiz
	v2LC+nWfaXdF5G8nuOzfPZ8grqCMfkHMyVZ7oLqyufbebWDnqD7yAypQY9o8Nc0ThOeWFpnfomqLu
	xPX3osu1cbCMm3MwZ83g9m78XP3hVKjQ7jGfkdDWdCnJLYzPWbEzDp25wex4YI24VcIY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163220-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163220: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=dd62bf14b756821fa293e3465955a41e9d460deb
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 16:49:00 +0000

flight 163220 qemu-mainline real [real]
flight 163226 qemu-mainline real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163220/
http://logs.test-lab.xenproject.org/osstest/logs/163226/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 152631
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1       fail REGR. vs. 152631

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                dd62bf14b756821fa293e3465955a41e9d460deb
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  316 days
Failing since        152659  2020-08-21 14:07:39 Z  315 days  578 attempts
Testing same since   163220  2021-07-02 02:27:48 Z    0 days    1 attempts

------------------------------------------------------------
552 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 180596 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 16:57:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 16:57:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149252.275950 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMTR-0005ck-03; Fri, 02 Jul 2021 16:57:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149252.275950; Fri, 02 Jul 2021 16:57:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMTQ-0005cd-TD; Fri, 02 Jul 2021 16:57:04 +0000
Received: by outflank-mailman (input) for mailman id 149252;
 Fri, 02 Jul 2021 16:57:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+naa=L2=perches.com=joe@srs-us1.protection.inumbo.net>)
 id 1lzMTP-0005cX-7b
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 16:57:03 +0000
Received: from smtprelay.hostedemail.com (unknown [216.40.44.146])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 859efe72-db56-11eb-83be-12813bfff9fa;
 Fri, 02 Jul 2021 16:57:02 +0000 (UTC)
Received: from omf04.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60])
 by smtprelay03.hostedemail.com (Postfix) with ESMTP id 1BBDF837F27E;
 Fri,  2 Jul 2021 16:57:01 +0000 (UTC)
Received: from [HIDDEN] (Authenticated sender: joe@perches.com) by
 omf04.hostedemail.com (Postfix) with ESMTPA id D6515D1517; 
 Fri,  2 Jul 2021 16:56:52 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 859efe72-db56-11eb-83be-12813bfff9fa
Message-ID: <7a2ef915bd08a1c0277b9633e20905c0ca62c568.camel@perches.com>
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
From: Joe Perches <joe@perches.com>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>, Zhu Lingshan
 <lingshan.zhu@intel.com>,  wanpengli@tencent.com, Like Xu
 <like.xu@linux.intel.com>, eranian@google.com,  weijiang.yang@intel.com,
 Guo Ren <guoren@kernel.org>,  linux-riscv@lists.infradead.org, Will Deacon
 <will@kernel.org>,  kvmarm@lists.cs.columbia.edu,
 kan.liang@linux.intel.com, ak@linux.intel.com,  kvm@vger.kernel.org, Marc
 Zyngier <maz@kernel.org>, joro@8bytes.org,  x86@kernel.org,
 linux-csky@vger.kernel.org, wei.w.wang@intel.com, 
 xen-devel@lists.xenproject.org, liuxiangdong5@huawei.com, bp@alien8.de,
 Paul Walmsley <paul.walmsley@sifive.com>, Boris Ostrovsky
 <boris.ostrovsky@oracle.com>,  linux-arm-kernel@lists.infradead.org,
 jmattson@google.com,  like.xu.linux@gmail.com, Nick Hu
 <nickhu@andestech.com>, seanjc@google.com,  linux-kernel@vger.kernel.org,
 pbonzini@redhat.com, vkuznets@redhat.com
Date: Fri, 02 Jul 2021 09:56:51 -0700
In-Reply-To: <20210702163836.GB94260@C02TD0UTHF1T.local>
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
	 <20210622094306.8336-2-lingshan.zhu@intel.com>
	 <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
	 <7379289718c6826dd1affec5824b749be2aee0a4.camel@perches.com>
	 <20210702163836.GB94260@C02TD0UTHF1T.local>
Content-Type: text/plain; charset="ISO-8859-1"
User-Agent: Evolution 3.40.0-1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-Spam-Status: No, score=-1.40
X-Rspamd-Server: rspamout01
X-Rspamd-Queue-Id: D6515D1517
X-Stat-Signature: yfcchsbgyrrjqd9annscud3jta5gtkxi
X-Session-Marker: 6A6F6540706572636865732E636F6D
X-Session-ID: U2FsdGVkX1/FrPSf3Ewjv8gI9yMKoa9Lq2JHlpGAS2Q=
X-HE-Tag: 1625245012-826405

On Fri, 2021-07-02 at 17:38 +0100, Mark Rutland wrote:
> On Fri, Jul 02, 2021 at 09:00:22AM -0700, Joe Perches wrote:
> > On Fri, 2021-07-02 at 13:22 +0200, Peter Zijlstra wrote:
> > > On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
[]
> > > > +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
> > > > +		static_call_update(x86_guest_handle_intel_pt_intr,
> > > > +				   perf_guest_cbs->handle_intel_pt_intr);
> > > > +}
> > > 
> > > Coding style wants { } on that last if().
> > 
> > That's just your personal preference.
> > 
> > The coding-style document doesn't require that.
> > 
> > It just says single statement.  It's not the number of
> > vertical lines or characters required for the statement.
> > 
> > ----------------------------------
> > 
> > Do not unnecessarily use braces where a single statement will do.
> > 
> > .. code-block:: c
> > 
> > 	if (condition)
> > 		action();
> > 
> > and
> > 
> > .. code-block:: none
> > 
> > 	if (condition)
> > 		do_this();
> > 	else
> > 		do_that();
> > 
> > This does not apply if only one branch of a conditional statement is a single
> > statement; in the latter case use braces in both branches:
> 
> Immediately after this, we say:
> 
> > Also, use braces when a loop contains more than a single simple statement:
> > 
> > .. code-block:: c
> > 
> > while (condition) {
> > if (test)
> > do_something();
> > }
> > 
> 
> ... and while that says "a loop", the principle is obviously supposed to
> apply to conditionals too; structurally they're no different. We should
> just fix the documentation to say "a loop or conditional", or something
> to that effect.

<shrug>  Maybe.

I think there are _way_ too many existing obvious uses where the
statement that follows a conditional is multi-line.

	if (foo)
		printk(fmt,
		       args...);

where the braces wouldn't add anything other than more vertical space.

I don't much care one way or another other than Peter's somewhat ambiguous
use of the phrase "coding style".

checkpatch doesn't emit a message either way.
-----------------------------------------
$ cat t_multiline.c
// SPDX-License-Identifier: GPL-2.0-only

void foo(void)
{
	if (foo) {
		pr_info(fmt,
			args);
	}

	if (foo)
		pr_info(fmt,
			args);

	if (foo)
		pr_info(fmt, args);
}

$ ./scripts/checkpatch.pl -f --strict t_multiline.c
total: 0 errors, 0 warnings, 0 checks, 16 lines checked

t_multiline.c has no obvious style problems and is ready for submission.
-----------------------------------------

cheers, Joe




From xen-devel-bounces@lists.xenproject.org Fri Jul 02 17:17:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 17:17:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149259.275961 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMmv-0007uD-KA; Fri, 02 Jul 2021 17:17:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149259.275961; Fri, 02 Jul 2021 17:17:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMmv-0007u6-HI; Fri, 02 Jul 2021 17:17:13 +0000
Received: by outflank-mailman (input) for mailman id 149259;
 Fri, 02 Jul 2021 17:17:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMmu-0007tw-BT; Fri, 02 Jul 2021 17:17:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMmu-0005re-3x; Fri, 02 Jul 2021 17:17:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMmt-0007sA-Sf; Fri, 02 Jul 2021 17:17:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzMmt-0003YK-SD; Fri, 02 Jul 2021 17:17:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rD9bOTF/TefSSw/VO4rgXAsRt7RJgVaCE5CB+OeIYMg=; b=tUXEpVRxlqoD0m9+PfRjHgxLPI
	D6DJiLuH2qARjrOsNfDvwyV4qI1ZuXhEOyIJ2+hUXyrcnijJZ+DT68Whm0yr/dIEn62hmc+ObV5x9
	pBeuk2BGxykBVpkREwkX2kKWZaOEohglzDSqwGijHrW8tS2qum7zZT+N7pkEMjUtwef4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163227-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163227: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 17:17:11 +0000

flight 163227 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163227/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   28 days
Failing since        162368  2021-06-04 15:42:59 Z   28 days   75 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    0 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 17:30:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 17:30:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149257.275975 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzN00-0001kV-2x; Fri, 02 Jul 2021 17:30:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149257.275975; Fri, 02 Jul 2021 17:30:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzMzz-0001kO-W5; Fri, 02 Jul 2021 17:30:43 +0000
Received: by outflank-mailman (input) for mailman id 149257;
 Fri, 02 Jul 2021 17:06:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=rO+z=L2=gmail.com=fontaine.fabrice@srs-us1.protection.inumbo.net>)
 id 1lzMcB-000741-5K
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 17:06:07 +0000
Received: from mail-wm1-x330.google.com (unknown [2a00:1450:4864:20::330])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3db709d6-a894-4da3-bbc2-bb6d1936be93;
 Fri, 02 Jul 2021 17:06:06 +0000 (UTC)
Received: by mail-wm1-x330.google.com with SMTP id
 m9-20020a05600c3b09b02901f246b43bbeso6828395wms.3
 for <xen-devel@lists.xenproject.org>; Fri, 02 Jul 2021 10:06:06 -0700 (PDT)
Received: from kali.home (lfbn-ren-1-1383-171.w86-229.abo.wanadoo.fr.
 [86.229.230.171])
 by smtp.gmail.com with ESMTPSA id n12sm4370181wmq.5.2021.07.02.10.06.04
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 02 Jul 2021 10:06:04 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3db709d6-a894-4da3-bbc2-bb6d1936be93
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=+y3LpJdUbFsVjWi7bT1uPxcUXlW8ZvzJtS1CGiUFEoo=;
        b=ilQbxJZxwKMQGTpGuzdy2jZotnl+hTG1GP4+nZqcxx6Wu3HRxX+IFGgRK1DGLxQGgd
         h3gdASG5noFqMPPnMiB6852ttDLWp7ZMoStdBXAV1idqIbRF5ykv47ft1QkqsEL8Fjxl
         rTTIv5Cm+c355oUdyh98s+oOjMZPVYVKVvhKAN/UvqbBnvzAQaVRmYPfODi/RYIOwgz7
         AH0QFd1iTK7+dK3hRoALQls6lUIQcdscDMVnimOCq5pg5DKqQRdTPA+ICoC264k45SAQ
         +l3rhIpC2jEJLZqpfrtA7X2c2ITr93N71nPhV4Eq07wD0AZnEunxS1V9Q3TixbrVqhlS
         BKow==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=+y3LpJdUbFsVjWi7bT1uPxcUXlW8ZvzJtS1CGiUFEoo=;
        b=s0//jmCdVudbrhdmAuw4WML5x45IB+eKjLbqLmCZ+0Cpm9iUlIV10a5tZ4kPfgfOtr
         brnj6upOYSMYEVxzV6eMKX6wETO1/QHlh/lJwyzuz+V0nwA6HSWROvFOx3sUA+FkBqhJ
         Mw4nFzQtotJknNGz6QKBoxRouLaez6BCTtFTWoDYugXvEagWLnV6hVQYhOpcTSAUCS+4
         tzGs56X50tXwWd/MW8mmbwCgIc6ZsL8MllFFb4CvJAQffIhxVOtw+XNb9oQDKdNnx5qO
         N/RYndAaI6hdFPGwniB+9yggakdJwEUElrZvApPuvzkLM7p5xGtFggsyAe6UvuzsT26H
         PGYQ==
X-Gm-Message-State: AOAM5311i9obDgj4r9DVpVuBju8jBuX1fwZy/Oy64eEzaR03DcuNVGGV
	kC+b/tqSYmv3bliUiEKxYUq6XylQLsh+pQ==
X-Google-Smtp-Source: ABdhPJxbi5ZQiX8O7rrXK+xP2VIa2tUOiIAMTkTa6+eQgtwqaghu4H4YtFcpyXK3OcgJc0/nmrubSg==
X-Received: by 2002:a1c:2cc3:: with SMTP id s186mr849419wms.150.1625245565163;
        Fri, 02 Jul 2021 10:06:05 -0700 (PDT)
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Subject: [PATCH] xen/Makefile: drop -Werror
Date: Fri,  2 Jul 2021 19:06:02 +0200
Message-Id: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Drop -Werror to avoid the following build failure with -DNDEBUG:

In file included from <command-line>:0:0:
/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/xen-4.14.2/xen/include/xen/config.h:94:0: error: "NDEBUG" redefined [-Werror]
 #define NDEBUG

<command-line>:0:0: note: this is the location of the previous definition

Fixes:
 - http://autobuild.buildroot.org/results/66573ad0abc4244c0dfeac8b684a7bfcc31c0d4d

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 xen/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/Makefile b/xen/Makefile
index 89879fad4c..cf9f83b1fb 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -210,7 +210,7 @@ CFLAGS += -fomit-frame-pointer
 endif
 
 CFLAGS += -nostdinc -fno-builtin -fno-common
-CFLAGS += -Werror -Wredundant-decls -Wno-pointer-arith
+CFLAGS += -Wredundant-decls -Wno-pointer-arith
 $(call cc-option-add,CFLAGS,CC,-Wvla)
 CFLAGS += -pipe -D__XEN__ -include $(BASEDIR)/include/xen/config.h
 CFLAGS-$(CONFIG_DEBUG_INFO) += -g
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 17:34:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 17:34:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149272.275985 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzN3g-0002PL-JJ; Fri, 02 Jul 2021 17:34:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149272.275985; Fri, 02 Jul 2021 17:34:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzN3g-0002PE-GI; Fri, 02 Jul 2021 17:34:32 +0000
Received: by outflank-mailman (input) for mailman id 149272;
 Fri, 02 Jul 2021 17:34:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzN3f-0002Op-FW
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 17:34:31 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 21030f05-1198-4c84-b98a-983ba5d6a80f;
 Fri, 02 Jul 2021 17:34:30 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 21030f05-1198-4c84-b98a-983ba5d6a80f
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625247270;
  h=subject:to:references:from:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=oKIxEfPmbuVRb1uO8qr3dJruNe1XRbrn7LXjL9ztNYk=;
  b=cqJKPk7UcNtPAtOVJkYtStRChHIsyjGKVEK+Kcf0dcAUXY9O1LndINYx
   JEuCjXCo7kBp5EArlfGSzppDk79y58hm9c21XuH/1V9L7qW03jksOHtVE
   5v/1zZ9WDs60Qacizofo7aytv9lXwdAIyM65aY0ggA4pG7sNGyN8Qgvwu
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: lvLqR0Xt8Hcv7hJcDkOC6Idfk8jMj1X4SDYxuoBcRpETUo4IVNCAXBIPn+s3WW0sBW6hDtBT+i
 yzIKQiYHvUFJRwoYq0QobDvuZbEj5sRdGalSVxhPTFibO20vqrgwr2KHiy6RpNH6pU4PDmqwYM
 6X96ZrK23J9MXHCr237pN9wmoKM40zj8jso7ryukTC+WeHIpOb44oNOPziP4GUUwpOtx5DeH1V
 AnDAHOBDr+ZaFiYp9pwykDTgvVh9v36k5+TvFN7p+woxAxEycwwKmJxVVJ3NzoaF5NW6t5u2UP
 Y9Y=
X-SBRS: 5.1
X-MesageID: 47858398
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:kF/XpKgFMhyVawMVP3gCZrJ7s3BQXzl13DAbv31ZSRFFG/FwyP
 rCoB1L73XJYWgqM03IwerwQJVoMkmsjqKdgLNhdotKOTOLhILGFvAH0WKP+Vzd8mjFh5dgPM
 RbAuJD4b/LfD9HZK/BiWHWferIguP3lpxA7t2urEuFODsaDp2ImD0JaDpzfHcXeCB2Qb4CUL
 aM7MtOoDStPV4NaN6gO3UDV+/f4/XWiZPPe3c9dlIawTjLqQntxK/xEhCe0BtbeShI260e/W
 /MlBG8zrm/ssu81gTX2wbonttrcZrau5V+7f63+4gowwbX+0WVjUNaKv+/VQUO0aCSAZAR4Z
 zxSlkbToBOAjjqDxuISFPWqnTdOXAVmjLfIBaj8AfeiN28SzQgB8Vbg4VFNhPf9ko7pdl5lL
 lGxmSDqvNsfGX9dQnGlqz1vitR5z2JSLsZ4J0upm0aVZFbZK5arIQZ8k8QGJAcHDji4IRiFO
 V1FsnT6PtfbFvfNhnizyFS6c3pWm52EgaNQ0AEtMDQ2z9KnGphx09dwMAEhH8P+J80VpEB7e
 XZNaZjkq1IU6YtHOtA7Sc6ML6K40n2MGLx2U6pUCra/ZA8SgDwQsTMkcoIDcmRCe018Kc=
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47858398"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MBTr9ko5XPMPiY67MCrTYkdglpF4NPKVMZvW6TulUwZ9RvVW96W3Ws2jjoALr6VXqk+46Y9F8MMObqUCZTQnQJ8wthvXYgk49Mx2YIPFVtwBn8hBAOsL5UrO0iVdZeZVuK6Z+zSbzzZgP5NJJwPIrmFRS1oK7gKjIuiLGO2zNFaiZJXEaod2FlpyK5+8j66A4Uq9RJoRDT1wzdMM2ZBSkCsikhvSq3dLrERxTK004RVUg0x04+7wexAGvircOrv3NrrSY5Lx5YQo58xSciNpLO2fy7NDELE9vhL8ybQcjcmR3nzS2nvnaSphiskxeEbzyvlPzZBMmIls4ErK6fgsBA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bROnHpnTR/M8aKMS4PXc+XiJb4a9Hhm+XOczIWCLeyE=;
 b=R6Xnme82RYiYm4K3ty+nPoBRtYZDxGopbK4zv5Hf4iUA+oCaoQWiCVlhzxA+sjOJbMZv23D+xADdKB85qBwdojbEVDxjqdulYqdG9WnmeVaqqsFMKSY0gl7TkCyuU+uoLMLI3rGMna5IieGhPlzbdKbF05c+Fn5kT9CU/N7qwFkTtvljxc+KsofDO8gik1C9tsKzY5bzoe5YnFpa4x2TmnwaSDSiRBVjnZp5nKKlUM6k37O7C8iVT2NBvGmIEfMqS9OMtl2AydSznjCTE2cplvwpPnK8Ls7k5W2889lX7wrwY1Bk5J7YGUgPGWurwFd6OK1cnSv1OzkNAbFQkUC42A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bROnHpnTR/M8aKMS4PXc+XiJb4a9Hhm+XOczIWCLeyE=;
 b=Y6CE3L2zo86eB+Y7ZIkcWS6UQCg9a87psgaeT7JqjlVt4RKDVqjb2MebzeQtXes5jLNFhKNUTuU2+0R332/+oFr0p/r/Z/y0FBKWIcGMnQt9imVSzwwvlC11so8IZ0wU/q/G567NiWAvJDvd3EN02BfeD/epO4zs3Nh0LGwgfwo=
Subject: Re: [PATCH] xen/Makefile: drop -Werror
To: Fabrice Fontaine <fontaine.fabrice@gmail.com>,
	<xen-devel@lists.xenproject.org>
References: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com>
Date: Fri, 2 Jul 2021 18:34:11 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0396.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18f::23) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a3800f9e-5a6a-4a2e-14c2-08d93d7fa278
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5775:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5775A33E5BAA06F7564D4967BA1F9@SJ0PR03MB5775.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: yGJNu/cugMsqhTJ+M05GhZDVvxZVmFgzr2d8Rn13wgtg2jDom3c3x9pNWrmkrPzp/byTe7t8Vpu1Qz9Nfs+OkloY3RMqpcMhiV2BEg1pFfuxlQTy/pegfEa/q5WRxu1652/EgFT4glP0q3cVZ5RkKKcCsny0a6Z59aftMhei9h4XpnPmVBLB/9zSB8pm6ZUnK0M4ckfN73EN4mFedRR9DuihlWlNK8g6fRmLlBRF1fOvZ4NkRtW5q3Hx72KGcuiTbVxCUEde+QOAzHTIVgXdZMxZlIwhNndkYYNbX7OHUjgLuDl+xJsrewzO+nH2+3Xy6e5rTD1EoScYzcTTluNdQ38FaTisQs2LHFZgTLx1HU8fbFDcrNvcQaAAq7vr0KDpcl10aeYwMCrgWml5zjqLEg4Xvff4YxeNNSLl+s/hbnsxZ2Kl8Cgm9A1Pp1K1oKLVj4wN+yQWrahTjcOlNARWofWh9AqmuwFzzf6TqZGXU/Au/TuTMs4e8F4TF1tAjcb9GfnBTbZzvdRK/DdMh3w5GwyD5F434XTTtLik5h8Xdb7cvMnyaSr14rurLrJYGi1HjpX6qdetwXcW68or9QWDD1UNfk9VeBy8rj/bRr94MdXE3iILSZorSPxzX8IH7JOH3hGJT5SgRc6l17R9A4Hvsmlu6dL1S2W54U10C/Q+IdBPxtZeQxVULt6HXWlzRrQcEhT8ftiD3yiqelfTB9tjWAKOFqsaAIOFQRvE8tx8dbLKg9dux2AxbKhZGURWg6q9TH3lkCH4jM5L8M5UHwOcXsj1BuWV4MZB48c/quX90Y9Ec203tMMCUESRqhoJubNF
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(366004)(376002)(396003)(136003)(4744005)(2616005)(66556008)(66946007)(16526019)(478600001)(66476007)(38100700002)(26005)(956004)(36756003)(6666004)(8676002)(6486002)(8936002)(31696002)(186003)(966005)(5660300002)(316002)(16576012)(53546011)(86362001)(2906002)(31686004)(83380400001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?TFVty/GOoYUB9TgzvAIVkXPBLZrEdmcehG19qj8?=
X-MS-Exchange-CrossTenant-Network-Message-Id: a3800f9e-5a6a-4a2e-14c2-08d93d7fa278
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 17:34:24.7774
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ZlWLryENd9iZ5rvbw8MK2Gh+dALsGLPzwyEVcekx08hx0KQhLGW5jPQMefBXQojqvOJme9Ic6TIfyNFIwJmixt3qCKFxtaXQ1NVmEh/py+E=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5775
X-OriginatorOrg: citrix.com

On 02/07/2021 18:06, Fabrice Fontaine wrote:
> Drop -Werror to avoid the following build failure with -DNDEBUG:
>
> In file included from <command-line>:0:0:
> /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/xen-4.14.2/xen/include/xen/config.h:94:0: error: "NDEBUG" redefined [-Werror]
>  #define NDEBUG
>
> <command-line>:0:0: note: this is the location of the previous definition
>
> Fixes:
>  - http://autobuild.buildroot.org/results/66573ad0abc4244c0dfeac8b684a7bfcc31c0d4d
>
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

For better or worse, It is Xen's policy that -Werror will remain.  95%
of the time, it is the right thing.  We will however build failures
whenever they crop up.

This one is weird though.  How is NDEBUG getting in twice?  What does
the rest of this build environment look like?

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 17:52:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 17:52:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149276.275997 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzNKl-0004dV-3T; Fri, 02 Jul 2021 17:52:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149276.275997; Fri, 02 Jul 2021 17:52:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzNKl-0004dO-0e; Fri, 02 Jul 2021 17:52:11 +0000
Received: by outflank-mailman (input) for mailman id 149276;
 Fri, 02 Jul 2021 17:52:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=rO+z=L2=gmail.com=fontaine.fabrice@srs-us1.protection.inumbo.net>)
 id 1lzNKj-0004dI-5y
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 17:52:09 +0000
Received: from mail-lj1-x229.google.com (unknown [2a00:1450:4864:20::229])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 15aaf7df-18c3-4cf0-912f-c7bf1e1679f1;
 Fri, 02 Jul 2021 17:52:08 +0000 (UTC)
Received: by mail-lj1-x229.google.com with SMTP id d25so14364479lji.7
 for <xen-devel@lists.xenproject.org>; Fri, 02 Jul 2021 10:52:07 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 15aaf7df-18c3-4cf0-912f-c7bf1e1679f1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=G2DWgRozu9su2algE9H6/nQBT1eyOu01WcxyUE3AsBE=;
        b=mkMCV75SY8+wfIzunLgxIV5LXUF2CB5nOsK2zV4hdpp0m8XgvifkpIL+0iykiRL1BQ
         wYBndNe1f9mTDwnR7fjXWBF8stpg/t6PS2p+81Gz0vO/kgoVDPNHyX292uy+nPte/j/3
         N+HXt3RoaDwJXTy1TFQ3b/j6gy9th8pmX7sx5OQfyCHniSxYt79e956lQUOw51T6tCKO
         eJSLjd+xNCgzE988kA3X5CmQk2R9qnqr0S8Ijet//OvYD8mBTBbgTSh6WOZ/MiqQ/aLk
         RC13BxEX7FfT8rwW/AYhvkHyJcUMfNMdvZD4hn+mNl6UB5kybZF7xi5hG2GggH8/ITT+
         c05w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=G2DWgRozu9su2algE9H6/nQBT1eyOu01WcxyUE3AsBE=;
        b=krnoGug4ZVRRv0Y9Cdhs3x5Fa0VWLdG4RJO/lZyWsWC2kWvTk6D4EtkBQruB7G8SBo
         Z7Za6ZXDOmBptWx965gMZO1Zs0n0mMANqk+Gc7+vSp+bx5oEtHUiUoOYnhLK8SLr4r2a
         UjItmV5bcmIi9/Z7VFj1/kd9xSc+q5iRlsOn3oQaUKdaK4MjMvxF+0FustV8t3l6F6Qg
         lZWibOA9bR6L6Q2eNc8xk2i/SMe7AmQZEOlJk3L0D/Lqgr3KdxV4YXS2C6nph4OdO9WS
         C7/C2cajK4S4mcUjBXJaZ9Wus7HKzWCFP+otEUGmWc2PrLJof1tIUK0lN0X2fPV+/dZY
         FLgQ==
X-Gm-Message-State: AOAM5311qwZusUVD1Nzu6BKw/tJC0SyE+vpYuRyDrnkwV3lf2z7AT6lT
	TxoMVvjfP23aUv24CJZAqMKbcsEoym9hOtAlxdQ=
X-Google-Smtp-Source: ABdhPJzVpDWXuKaemUBNBmQ/eQiF1wV5SuMI0cEswVjNX2AgvVfmgRZZgPYnNu4xANi3guT/pupNAUBsjS100xr5InU=
X-Received: by 2002:a2e:6e09:: with SMTP id j9mr470491ljc.319.1625248326760;
 Fri, 02 Jul 2021 10:52:06 -0700 (PDT)
MIME-Version: 1.0
References: <20210702170602.890817-1-fontaine.fabrice@gmail.com> <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com>
In-Reply-To: <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com>
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date: Fri, 2 Jul 2021 19:51:55 +0200
Message-ID: <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
Subject: Re: [PATCH] xen/Makefile: drop -Werror
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: xen-devel@lists.xenproject.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Le ven. 2 juil. 2021 =C3=A0 19:34, Andrew Cooper
<andrew.cooper3@citrix.com> a =C3=A9crit :
>
> On 02/07/2021 18:06, Fabrice Fontaine wrote:
> > Drop -Werror to avoid the following build failure with -DNDEBUG:
> >
> > In file included from <command-line>:0:0:
> > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/xen=
-4.14.2/xen/include/xen/config.h:94:0: error: "NDEBUG" redefined [-Werror]
> >  #define NDEBUG
> >
> > <command-line>:0:0: note: this is the location of the previous definiti=
on
> >
> > Fixes:
> >  - http://autobuild.buildroot.org/results/66573ad0abc4244c0dfeac8b684a7=
bfcc31c0d4d
> >
> > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
>
> For better or worse, It is Xen's policy that -Werror will remain.  95%
> of the time, it is the right thing.  We will however build failures
> whenever they crop up.
>
> This one is weird though.  How is NDEBUG getting in twice?  What does
> the rest of this build environment look like?
NDEBUG is added by buildroot in the command line if the user sets
BR2_ENABLE_RUNTIME_DEBUG to false since
https://git.buildroot.net/buildroot/commit/?id=3D5a8c50fe05afacc3cbe8e7347e=
238da9f242fab0

I do agree that setting -Werror is generally perfectly valid for upstream.
However, for downstream packager, it is generally seen as an issue as
it will always raise unexepected build failures with older, newer, or
exotic toolchains, see
https://embeddedartistry.com/blog/2017/05/22/werror-is-not-your-friend.
It would be good to, at least, have an option to disable -Werror for
example through a XEN_DISABLE_WERROR.
>
> ~Andrew
Best Regards,

Fabrice


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 17:56:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 17:56:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149281.276008 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzNOa-0005IF-Kq; Fri, 02 Jul 2021 17:56:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149281.276008; Fri, 02 Jul 2021 17:56:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzNOa-0005I8-Hr; Fri, 02 Jul 2021 17:56:08 +0000
Received: by outflank-mailman (input) for mailman id 149281;
 Fri, 02 Jul 2021 17:56:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNOZ-0005Hx-1e; Fri, 02 Jul 2021 17:56:07 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNOY-0006Vb-Si; Fri, 02 Jul 2021 17:56:06 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNOY-0000ON-GG; Fri, 02 Jul 2021 17:56:06 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNOY-0000ph-Fk; Fri, 02 Jul 2021 17:56:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=dEB21GecrvnwaKoxNxqsrYehj5BhE3Nh22Xi2rFa/90=; b=mh7KdqEKc2s1aYAtR65XneSD14
	jQlEoZaiI5lmSO/H7rijQRplwgFCP7mr6vma7rlxhkhRdAlBpfdr/rB7m7NXhAB9VZczQK7r7v04/
	wP7ETSNnGAwTCPTWLsYDAcOG7+sDSUSORB33v4ak47zLGfP5gMo+m37bRTkdfb2BqrCo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163225-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163225: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3bc3be978fd61f8099797864136c5f447c0e4aae
X-Osstest-Versions-That:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 17:56:06 +0000

flight 163225 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163225/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  3bc3be978fd61f8099797864136c5f447c0e4aae
baseline version:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0

Last test of basis   163183  2021-06-29 13:01:32 Z    3 days
Testing same since   163225  2021-07-02 15:01:35 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Ian Jackson <iwj@xenproject.org>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   f95b7b37cf..3bc3be978f  3bc3be978fd61f8099797864136c5f447c0e4aae -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 18:17:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 18:17:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149290.276021 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzNio-0007d1-2d; Fri, 02 Jul 2021 18:17:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149290.276021; Fri, 02 Jul 2021 18:17:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzNin-0007cu-VX; Fri, 02 Jul 2021 18:17:01 +0000
Received: by outflank-mailman (input) for mailman id 149290;
 Fri, 02 Jul 2021 18:17:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNim-0007ck-Vj; Fri, 02 Jul 2021 18:17:00 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNim-0006w4-EM; Fri, 02 Jul 2021 18:17:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNim-0001K2-4f; Fri, 02 Jul 2021 18:17:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzNim-00010L-4D; Fri, 02 Jul 2021 18:17:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/5MpkBBk0swxaI9bAqSxgRMi8d5AYsiwdiK2RghOxaA=; b=qE8HRgQm178nXmwC3CSvA5W//D
	tr6+L1PKRHfwYsl4zCfHBiSIuex5ZUChNoDgXAuferMf2hd+syWKkxC+mtsIoo0qbK6donX7jyeH1
	s/cujL8aE3ptPWaUP81/hU32+wnfN7LAoFy1xt0LPIuUjt7qJDtJzckh4LQ9+sC6aKTM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163222-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163222: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=3dbdb38e286903ec220aaf1fb29a8d94297da246
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 18:17:00 +0000

flight 163222 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163222/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                3dbdb38e286903ec220aaf1fb29a8d94297da246
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  335 days
Failing since        152366  2020-08-01 20:49:34 Z  334 days  570 attempts
Testing same since   163222  2021-07-02 03:54:04 Z    0 days    1 attempts

------------------------------------------------------------
6483 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1844969 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 18:53:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 18:53:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149297.276035 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOHg-00038f-VX; Fri, 02 Jul 2021 18:53:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149297.276035; Fri, 02 Jul 2021 18:53:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOHg-00038Y-SW; Fri, 02 Jul 2021 18:53:04 +0000
Received: by outflank-mailman (input) for mailman id 149297;
 Fri, 02 Jul 2021 18:53:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aFP0=L2=m5p.com=ehem@srs-us1.protection.inumbo.net>)
 id 1lzOHf-00038S-1E
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 18:53:03 +0000
Received: from mailhost.m5p.com (unknown [74.104.188.4])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b9a71bfe-db66-11eb-83c4-12813bfff9fa;
 Fri, 02 Jul 2021 18:53:01 +0000 (UTC)
Received: from m5p.com (mailhost.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:f7])
 by mailhost.m5p.com (8.16.1/8.15.2) with ESMTPS id 162IqlBN003070
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO);
 Fri, 2 Jul 2021 14:52:53 -0400 (EDT) (envelope-from ehem@m5p.com)
Received: (from ehem@localhost)
 by m5p.com (8.16.1/8.15.2/Submit) id 162Iqlv7003069;
 Fri, 2 Jul 2021 11:52:47 -0700 (PDT) (envelope-from ehem)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b9a71bfe-db66-11eb-83c4-12813bfff9fa
Date: Fri, 2 Jul 2021 11:52:47 -0700
From: Elliott Mitchell <ehem+xen@m5p.com>
To: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Subject: Re: [PATCH] xen/Makefile: drop -Werror
Message-ID: <YN9gf2vhyH7w7V1X@mattapan.m5p.com>
References: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
 <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com>
 <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
X-Spam-Status: No, score=0.4 required=10.0 tests=KHOP_HELO_FCRDNS autolearn=no
	autolearn_force=no version=3.4.5
X-Spam-Checker-Version: SpamAssassin 3.4.5 (2021-03-20) on mattapan.m5p.com

On Fri, Jul 02, 2021 at 07:51:55PM +0200, Fabrice Fontaine wrote:
> 
> I do agree that setting -Werror is generally perfectly valid for upstream.
> However, for downstream packager, it is generally seen as an issue as
> it will always raise unexepected build failures with older, newer, or
> exotic toolchains, see
> https://embeddedartistry.com/blog/2017/05/22/werror-is-not-your-friend.
> It would be good to, at least, have an option to disable -Werror for
> example through a XEN_DISABLE_WERROR.

Two people don't make it a majority opinion, but if this was a meeting
this opinion would get a second.

I don't know where everyone is on the spectrum, but I also strongly
dislike -Werror yet do like -Wall and tend to get rid of warnings.
-Werror is good for continuous integration systems, not so great for
releases or active development.

-Werror kind of seems like Stack Ranking, good for use during brief
periods, but poor for long term continuous use.


-- 
(\___(\___(\______          --=> 8-) EHM <=--          ______/)___/)___/)
 \BS (    |         ehem+sigmsg@m5p.com  PGP 87145445         |    )   /
  \_CS\   |  _____  -O #include <stddisclaimer.h> O-   _____  |   /  _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445




From xen-devel-bounces@lists.xenproject.org Fri Jul 02 19:03:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 19:03:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149302.276046 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOS4-0004bM-Vq; Fri, 02 Jul 2021 19:03:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149302.276046; Fri, 02 Jul 2021 19:03:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOS4-0004bF-Sm; Fri, 02 Jul 2021 19:03:48 +0000
Received: by outflank-mailman (input) for mailman id 149302;
 Fri, 02 Jul 2021 19:03:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzOS4-0004b9-9L
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 19:03:48 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c6e9edb3-9766-4be2-bc1d-fa69b044b748;
 Fri, 02 Jul 2021 19:03:47 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c6e9edb3-9766-4be2-bc1d-fa69b044b748
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625252627;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=9SOX91f3hRKaTPe6o7t7fdvabRZeV3+jzwC4q2f8vfM=;
  b=bn69MBVXlWBsAm+FCU7jyg8GCjykMDEfQihg/+C26zyHbZcSmVB8tIq3
   lAAHfeXfiAkMveYiW2ZDU54qQM0ubs82BsFf9xXFLZsHZHSor6/ZjeuTO
   /NkaO05AZyIebkEiDONwdno/GE1kLJqAPkcC8lZsrqSagbLztFEcOjwjn
   E=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: kZ7R2aNXK7xosx3lmuMrbGttPgNSIrQL4vk030p8lm94pJ0XiFcPJ5cnbqHXIgiYpJ1fRRzs1d
 Jn8CVj4R/RVg1LutiETFu30iA8dulbNCkvsRwxEMRBT0FG0/rUENVek2trmRLlyuPhaX+RPfKV
 sxau0udUq26yzxUNkVtKZhkrNLMuO4zDz+t4T2b13vRztdqxK6Oa3UUja4c1j6uU8cbBYT68rN
 IjX2CMRY5ovRksE//znyjRH3qVcfsLYatG7TLaKJREabVFFUFxwZSRd+HxRQzkfO3k8f8q5w2x
 7A4=
X-SBRS: 5.1
X-MesageID: 47863081
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:vmWBBK2BjUq/ipG/pBjcaQqjBLwkLtp133Aq2lEZdPRUGvb4qy
 nIpoV86faUskd3ZJhOo6HiBEDtexzhHP1OkO0s1NWZLWvbUQKTRekIh+aP/9SJIVyGygc378
 ddmsZFZuEYdWIK6PrH3A==
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47863081"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich
	<JBeulich@suse.com>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?=
	<roger.pau@citrix.com>, Wei Liu <wl@xen.org>, Ian Jackson
	<iwj@xenproject.org>, Olaf Hering <olaf@aepfle.de>
Subject: [PATCH] tools/libxenguest: Fix max_extd_leaf calculation for legacy restore
Date: Fri, 2 Jul 2021 20:03:34 +0100
Message-ID: <20210702190334.31271-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

0x1c is lower than any value which will actually be observed in
p->extd.max_leaf, but higher than the logical 9 leaves worth of extended data
on Intel systems, causing x86_cpuid_copy_to_buffer() to fail with -ENOBUFS.

Correct the calculation.

The problem was first noticed in c/s 34990446ca9 "libxl: don't ignore the
return value from xc_cpuid_apply_policy" but introduced earlier.

Fixes: 34990446ca91 ("libxl: don't ignore the return value from xc_cpuid_apply_policy")
Reported-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Wei Liu <wl@xen.org>
CC: Ian Jackson <iwj@xenproject.org>
CC: Olaf Hering <olaf@aepfle.de>

Olaf - as I've changed the fix, I haven't included your T-by tag, but I'm
confident that this will suitably address the issue.
---
 tools/libs/guest/xg_cpuid_x86.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
index e01d657e0394..0c9c4fefc1ef 100644
--- a/tools/libs/guest/xg_cpuid_x86.c
+++ b/tools/libs/guest/xg_cpuid_x86.c
@@ -513,7 +513,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore,
         /* Clamp maximum leaves to the ones supported on 4.12. */
         p->basic.max_leaf = min(p->basic.max_leaf, 0xdu);
         p->feat.max_subleaf = 0;
-        p->extd.max_leaf = min(p->extd.max_leaf, 0x1cu);
+        p->extd.max_leaf = min(p->extd.max_leaf, 0x8000001c);
     }
 
     if ( featureset )
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 19:03:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 19:03:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149303.276058 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOSA-0004t2-6n; Fri, 02 Jul 2021 19:03:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149303.276058; Fri, 02 Jul 2021 19:03:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOSA-0004sv-3n; Fri, 02 Jul 2021 19:03:54 +0000
Received: by outflank-mailman (input) for mailman id 149303;
 Fri, 02 Jul 2021 19:03:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzOS9-0004b9-01
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 19:03:53 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ee2ce74b-9f90-4eab-b1ff-80532c0c4121;
 Fri, 02 Jul 2021 19:03:51 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ee2ce74b-9f90-4eab-b1ff-80532c0c4121
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625252631;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=gfmANs3MCnxiFwWReGm72wEovDSLU4AH2fTV/7XxIgU=;
  b=Lq1K3KAox0l97aU1NuuBVTcFZhdMiX+Ak0kCTntpFADV8kc0+XY1yYA2
   eejJQejnnxgIdonn/Yc8ABKN6FKS+Ip2a7weU4NoRzxRjXaEs7bXaEp8D
   pWx7uBPPr7JkjahfXHm6AcT7ibaSYcTBlU3XIkKUKC+Msfy6O9BbDt6sX
   w=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Y3L9KClQ1ZJnN9B06enohAJUu2Ta2Qkokk56xo83VZvvCU8ypoUZxh3VQZeCVgmIM1GFuuLzV/
 EWgF2qO8KKmygTzDozzfUR51wsBm+eu6fqwWtSlqaQ3+FkjM3+1izAwHB7ioYUvitAJkULp6G8
 JOr5OrOh7DaHg47dmDdzyxsQSrGxItvwXNJt6VnW0xz6/kWcdBeojyrl6Di2jil2CN8souhyWr
 Xt14Q8QwAmTLPErsnxwktX+InRZOCcCUCjm1t7LTIdEQ2ieqBQfqx6a6BzHvyJ93Dzr0JksZ+N
 Ki4=
X-SBRS: 5.1
X-MesageID: 47863089
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:CAGIEql2HENup4MFrxNEeSw2tFXpDfIk3DAbv31ZSRFFG/Fxl6
 iV/cjztCWE7gr5N0tQ+uxoVJPufZq+z+8T3WByB8bBYOCOggLBR+sOgbcKqweQfxEWndQ86U
 4PScZD4aXLfD1Hsfo=
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47863089"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Olaf Hering <olaf@aepfle.de>
Subject: [PATCH] tools/libxenguest: Fix migration's debug option
Date: Fri, 2 Jul 2021 20:03:42 +0100
Message-ID: <20210702190342.31319-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain

The code has gone through many refactors, but the first refactor was the one
which broke it by inverting the check with respect to checkpointed streams.

Fixes: 7449fb36c6c8 ("migration/save: pass checkpointed_stream from libxl to libxc")
Reported-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Ian Jackson <iwj@xenproject.org>
CC: Wei Liu <wl@xen.org>
CC: Olaf Hering <olaf@aepfle.de>

`xl migrate --debug` might not be perfect, but this at least brings it back to
mostly working.

I don't think dropping it is a sensible move.  In particular, it is invaluable
for testing the logdirty infrastructure when migrating a memtest VM.

If anyone has a clever idea to fix the grant problem, then we can.  It is
after all a debug option, without any specific prescribed behaviour.
---
 tools/libs/guest/xg_sr_save.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 2ba7c3200cd5..f0e2bd048d37 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -752,7 +752,7 @@ static int send_domain_memory_live(struct xc_sr_context *ctx)
     if ( rc )
         goto out;
 
-    if ( ctx->save.debug && ctx->stream_type != XC_STREAM_PLAIN )
+    if ( ctx->save.debug && ctx->stream_type == XC_STREAM_PLAIN )
     {
         rc = verify_frames(ctx);
         if ( rc )
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 19:20:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 19:20:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149312.276069 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOi7-0007P6-Kd; Fri, 02 Jul 2021 19:20:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149312.276069; Fri, 02 Jul 2021 19:20:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOi7-0007Oz-Gn; Fri, 02 Jul 2021 19:20:23 +0000
Received: by outflank-mailman (input) for mailman id 149312;
 Fri, 02 Jul 2021 19:20:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzOi5-0007Ot-Pl
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 19:20:21 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 839e4e15-2028-4f20-acd0-a4a6cfecbec9;
 Fri, 02 Jul 2021 19:20:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 839e4e15-2028-4f20-acd0-a4a6cfecbec9
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625253620;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=8gPoalEr9Re1SNhKgmmyuCgslTud+udKlbclHPxuTBE=;
  b=N/FSOkVQ5vLd8p25MRY77hy3rw6rbT43qYsco6GUrUSZzChS+aTYJJgp
   UJRQ9tzsssQzLv62+0S5vTCmWtB+lnb1BpF53BTDuQYacLWEi/nbI0ab9
   2No6YMLPJik/65B2FYxH8zP+ECeVnDjle7D4WkIddTpEWL1TTsZMYnYM8
   Y=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 22pzsmOhQAFc27y794eckw6i84WlBRb0t1PSNfqbPJk3s3VlGLLKvBIgFmSFAQDr6tN4ODiuoG
 qo/HLqw4GlEkzK8RjwHLEjXP06CpV5DO8wnv7xyUCplaYBZHRSPawKqHzNgRnBrtL2z32pKunn
 a+2IdQZtyhmwcg1M3yFhfEVW9mRmoMCIsaZQJW+XGN7Wds1oUL1/S+MUhYdBJu/YGc73oHvNip
 9wXgZtJO3UgRRTMss8dYhJTA9JW1xQRsk2Lm6sox6HZ11ZYhh609dTsAVg7TboVQ9y+gNcs+TZ
 mY0=
X-SBRS: 5.1
X-MesageID: 47864053
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ERxzZKNDbhuMxMBcTyz155DYdb4zR+YMi2TDiHoedfUFSKOlfp
 6V8MjztSWVtN4QMEtQ/uxoS5PwP080kqQFnrX5XI3SIDUO3VHIEGgM1/qY/9SNIVyGygcZ79
 YcT0EcMqyDMbEZt7eD3ODQKb9Jq7PrgcPY55ar854ud3ANV0gJ1XYLNu/xKDwSeOApP+tcKH
 PR3Ls8m9L2Ek5nHvhTS0N1ENTrlpnurtbLcBQGDxko5E2nii6p0qfzF1y90g0FWz1C7L8++S
 yd+jaJp5mLgrWe8FvxxmXT55NZlJ/IzcZCPtWFjowwJi/3ggilSYx9U/mpvSwzosuo9FE2+e
 O87SsIDoBW0Tf8b2u1qRzi103LyzA18ULvzleenD/KvdH5bChSMbsCuatpNj/ir2YwttB116
 xGm0iDsYBMMB/GlCPho/DVShBRkFauq3ZKq59Rs5Vma/pbVFZtl/1ZwKsMe61wWh4SqbpXUN
 WGNfusocq/KjihHinkVgAF+q3YYpwxdi32CHTq9PbliwS+p0oJuXfw8vZv1UvoxKhNPKWs2N
 60e5iAtIs+A/P+PpgNSNvof6OMeyTwqEX3QROvyBLcZfo6B04=
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47864053"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FWmXMFlUsYPYaa0J63xGwXHvwW+zF3VEDFAwkLAgVGUov2CRhLrSNcVW/MvN3cRygJoOCxI/p1wUSpjSoeU9yUG+eYg3+zusGcDFyhrxiqSmHeYrfcOiqOg6hmeAGmXy0h+5c3Qc+B5+/i0SNSSKPLkv7Pw3JYxi09Z5uSYv7ympHd5Jg3TZfINUFY/oGUhb9cMiKt02zqVnsCoLgJLQtu/83urnMbuaKoBF7RDDQKe9bfqyXDWDUMVZjJyKS5mOjVrDE3fCJ2u52Yqr2zkvtovYuLi2VfcmtVzglv4foC4vjoy/Oi/tToO84DwrZ+NtdyrCmF5KXFLljXtU30zG+w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8ZyIw04UjhrPa5KiX5OOX2k6ZBfrmL8RM/sb7+4MSIE=;
 b=TMDQgzPIxdCoTC9sjbjDm24DnCGj4OrbmxrJJjLhYDzX4Ms0rtPLcXZsREPCKlVCypioIhxPp54Q+Qf4+yWd+VxQasXFKC0ctMRcDabw30Sp/p62TZpol6zzI1QQBuOBtFDIBpMlqPWz+xwGwl7m3dJjVruPEgIzqphAtYdPGn4iRA03J3CGQRkyBk4JtfnRT/0cfcMkLDgXZtoYzBVSqwxJEfBSswit5BVotZP9Z5Xx8+HnQRH4d4V/XxJ/y0LCE/90o6bEKulLhGjxeMnEGMzewlZB+A+jM9keYEGYSF/Yx4q3seU6mnea6k72unhabuoo9BW9QahzjcdzgVf7Xw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8ZyIw04UjhrPa5KiX5OOX2k6ZBfrmL8RM/sb7+4MSIE=;
 b=lf4haiG22LiV7Nu3DJZIcBD8fbGSKU+vpKa7nQW+3HyLg5pMdnhYu1muQ0xc4Q8IBNfZQghqMyTDGiZfN7/uXcb4kUyMDnnH3G4PXQl1iiQAgFYXSCc2T7As/Xt8lsUWQOud2/XPDdqWzagNksWsaX68wxiz/zBT9W47TKCXQXE=
Subject: Re: [PATCH v20210701 10/40] tools: add xc_is_known_page_type to
 libxenctrl
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-11-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <3c0efa9b-aaff-b4b7-0fd5-9eed32b20e01@citrix.com>
Date: Fri, 2 Jul 2021 20:20:08 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-11-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0441.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:e::21) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 9492f2bb-36ff-474b-8095-08d93d8e6bc6
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6392:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB639276FE4D8895879A5754DDBA1F9@SJ0PR03MB6392.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:843;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: u5ySoHgNeKv60/5SxJ04wuYdgId3IgVF/BMq1F7eILVRxPF6iv4Ta34Bc4sgBSXrsO+EubnFMVTbp9iEGnxuKfIoLeLP9NmypTqwCbsY8LJbZSytPXtRCxdjHBFk9ssdUk57fPVB2HXYIXITL2c3W6RcsQwDe/Am68oN2bI287Mc7Y+x2jlq4F7/gFQWsWqMgy7XXgamDO6bqSr22/1f6EnS7Qsg7+gWtO9rHJyLl0ZxCOZg5bK7EjYDu9OsE/Hfd5tzYB39OXuEesSuHUX8KJHW34nZ5mp+fSi1l/276/M9RFNcNN39WYFoZ4Vz9jpTdN/FecKv44lg+x+YzHhjr2I97SV9lZKsUGmm1QYEZZryGMr9sTcvEXirgG/uNAdU+TpwoH8A+bwbWFFgJPlU2VULT+2HBRGYDSbebMPv4pDwKkFhjf9M7J+gmAKKbJ1+GFSFvyeroNjkIfJya1HIn9aQJGNAAd6Wo8COKdL+QpL5i8jJjNHOfn/zqxPh8JRbS1A///kvgNXCTEkWfixAAUT4H6AKynlyNqpH8fg8+/hKKZkRzjCDENpe/tLYt0xgkaBgGm5jgdOQlcXQK8tQaqctHBsL2ak7JIjkRbnFueXZSTmPZJR0R4MbkzYQw0GIg9HTXJLQJgQ4sqmHu03RexSaa5lsCj4mqkrbgL8f1yzAZXWaPUNKoYNvBI7CF3Luem0jk/QWvoDucEoYfsQ/YnKAZJwS+FQCjwAfh0KYt4XeQFpww1yT4UrGjdWyl+LV
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(366004)(396003)(136003)(39860400002)(16576012)(83380400001)(2616005)(316002)(478600001)(6666004)(86362001)(956004)(54906003)(4326008)(36756003)(2906002)(8676002)(31686004)(31696002)(66946007)(186003)(16526019)(66556008)(26005)(8936002)(5660300002)(6486002)(38100700002)(66476007)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 9492f2bb-36ff-474b-8095-08d93d8e6bc6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 19:20:15.5825
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: AO7QSuJNpKVkkIJlRZog8Kov/+d3RONxx0Bnp/adVGyL5cJNeoU/oXN+2y/ikfDV5ZF26BY8/Xz05i+nlZc7t9E1Z3rwaToeXHy50xL5G64=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6392
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> Users of xc_get_pfn_type_batch may want to sanity check the data
> returned by Xen. Add a simple helper for this purpose.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Subject needs correcting after v2.

However, given that this is in the save/restore common header, does it
really need a prefix?  Simply is_known_page_type() seems good enough.

>
> v02:
> - rename xc_is_known_page_type to sr_is_known_page_type
> - move from ctrl/xc_private.h to saverestore/common.h (jgross)
> ---
>  tools/libs/saverestore/common.h | 33 +++++++++++++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
>
> diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
> index ca2eb47a4f..07c506360c 100644
> --- a/tools/libs/saverestore/common.h
> +++ b/tools/libs/saverestore/common.h
> @@ -467,6 +467,39 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
>  /* Handle a STATIC_DATA_END record. */
>  int handle_static_data_end(struct xc_sr_context *ctx);
>  
> +/* Sanitiy check for types returned by Xen */
> +static inline bool sr_is_known_page_type(xen_pfn_t type)

uint32_t

> +{
> +    bool ret;

The logic will be rather shorter and cleaner to read by dropping ret and
using return directly out of the switch.

> +
> +    switch (type)

Spaces.

I can fix up everything on commit if you're happy with the suggestions.

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 19:27:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 19:27:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149317.276080 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOp5-00086t-CH; Fri, 02 Jul 2021 19:27:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149317.276080; Fri, 02 Jul 2021 19:27:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzOp5-00086m-8Y; Fri, 02 Jul 2021 19:27:35 +0000
Received: by outflank-mailman (input) for mailman id 149317;
 Fri, 02 Jul 2021 19:27:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1lzOp4-00086g-0h
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 19:27:34 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8c2e29e2-db6b-11eb-83c4-12813bfff9fa;
 Fri, 02 Jul 2021 19:27:33 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8c2e29e2-db6b-11eb-83c4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625254052;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=GJMO5191+CEUfBDPyW4CErq1LZvZxrTzZ4s7qNnQgnc=;
  b=fmKjq6q8da+8RH19x8hXGOOhv+UqeiQyVs2bjGIuGKImsU2eyt0d6uAw
   MxuGUdto2aCfGyap2ZCN7LUpNio5Y9DNuHvC6s5fbtsu1Y3S2CGWI1+Tt
   EBG3lClI1FPj4fr3euaupM+uBkh3dWr1b7+p7tw/evCW7rvobiAsIxAPz
   0=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: cnogoSSIE4oS8gDmKv9t9zMdRiq3AhzJb2wkvLQ1BUT3N6p7TmXNTub01jxdJh0vteV4LJMaLu
 cCkEjjt0vsxK8rM9MfJoTG7EJ+nKRP/smE+CQasZtDZqUz2fOfFa94f9E5UVZwNQp+GMtxEFQc
 +iVKBk2XIhgfvTJOrguQXyDTAszsy3vbWaAQqqOpzVQqSL73c0dE/1CINOF6byBTi2qWfm4ick
 mSgUDrWg3Dhs9+HGYDFXAtceSUInjSFROGLmIUC89u1J/opKz4vy+j7gybOdiUH5V3yWvEiW7s
 Qnc=
X-SBRS: 5.1
X-MesageID: 47864395
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:5MTxEqrI+gQyl9ZdqT3U/A4aV5vGL9V00zEX/kB9WHVpm5Oj+f
 xGzc516farslossREb+expOMG7MBfhHO1OkPcs1NCZLXbbUQqTXf1fBO7ZogEIdBeOjdK1uZ
 0QFZSWTeeAcGSS7vyKkjVQcexQuOVvmZrA7Yy1ogYPPGMaH52IrT0JbTpzencGNzWubqBJba
 Z0iPA3wgZINU5nFPhSURI+Lpj+TpDw5d3bSC9DIyRixBiFjDuu5rK/Ox+E3i0GWzcK5bs562
 DKnyHw+63m6piAu17h/l6Wy64TtMrqy9NFCsDJos8JKg/0ggLtQIh6QbWNsB08venqwlc3l9
 vnpQsmIq1Imj3sV1DwhSGo9xjr0T4o5XOn40Sfm2HfrcvwQy9/I9ZdhKpCGyGpqXYIjZVZ6u
 ZmzmiZv51YAVfrhyLm/eXFUBlsiw6dvWciq+gOlHZSOLFuK4O5lbZvuH+9La1wWx4TsOscYa
 9T5YDnlbZrmGqhHjXkVjIF+q30YpxbdS32N3TruaSuonJrdT5CvhMlLfck7wE9HaQGOtJ5Dt
 T/Q9NVfY51P4YrhIJGdao8qJiMeyDwqSylChPbHb2xLtB3B5uKke+t3IkI
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47864395"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CFREmW0qSW+js5FCssGjV33+CmubV88SX+z0J6S9d8qeMovrLFm6Mqy5ivRig2L1OQuJVRgm/baruWRDK3l5QoXsYh1HUE4ovJSBCTVstlSOMc4cWwgB2E6nXHPcMWqq8m6yPHsTFF+kAp4+BlgABMsA1NZw+CbKSgBd9/4MvXSrcPqlWvrno6fG8A2xEXhhnw5jlGFK9cQLqeVUzuc2r9Ho50psoXymE3t5cBQyG3VjbZN663B4TSyOiXU5OmN400aF5YZEi8C1zmadxBW8MNdqGfEl2lGUJAjrjbY5O93XlXDJ6gdCSLSlwepfjyT6Ph4D3VM8NIuITF6LjqyaRQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PdVih0xujv8YQmEXpMnahM4rVK+2iTrv8F5oQBUTJx0=;
 b=J1m54eCE956lJbm/Ne36GRfMdwB9Vf8Pv25+7e6SKrYCzq2F7b2hPxeBOfrO3dHHod+shmlFHbJWh5pYt7L1/XsqBhSzzJl778/VwoyuC6ogykJxH4jmisGrXCgPxm7uqOOt8MRH6j7xUYtnNceDD7pfn3EEjCGzKR8eWMApbJLeqm9GuCjgJr8Pjcd8RVEOHJTzLNYCf4Xkdj5UBSETUjTT1OJtWOVVWk61xaaCdbHUoqQoy7xUgTfR9dGQOcHbIIcB+XNiZnkzRyEWeN9PkcET1GvwhJZivSsHFW+7b8wy8XcKBnBGFfl41Lbm2iAGW1ntqhnPPRHxsVUHHlskQw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PdVih0xujv8YQmEXpMnahM4rVK+2iTrv8F5oQBUTJx0=;
 b=ht4Z116AcTCBMAwmEFtTE0647+IQ+NyhnIod+EbHYHD1AXiUgVUVad+yTkW9Hinu5HEFXXGzEAp9enNR1xptulV1+V8TakRJ/6JFwug3tVReWHCaEbHrVDIJ+awL+jiGhyuwKj1bbsZb2qYXm0RyNw+F53obEUYcs2I21yYJ4sA=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Juergen Gross <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-12-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 11/40] tools: use sr_is_known_page_type
Message-ID: <b026dd29-4c6c-3e6d-879d-b0339f2c208b@citrix.com>
Date: Fri, 2 Jul 2021 20:27:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-12-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0001.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:a6::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6e5a2f8d-4304-4e45-ac05-08d93d8f6e5e
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5837:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5837EDA887D1CFAA4067D3B2BA1F9@SJ0PR03MB5837.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2657;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Hc2ZoRZ/HdrdkR6YeHUs4ExgYyWzVqbJfhsaoTZt1V0E/RC1O7eGdCtjo2bsKzByEB2975NrnMNYvL8TtwEmhNd4yWdzj8TPq1obIB44k5DApWVkJ3mWW0LYXx8EO4RN2mcCeNCVyy0yijy+fXhCaRxc/IXSUIwE2dhnhgug3XKPT1ex6IphfoDZY0dEqa2jfMHDGCdsW5wVBFk/mOgPYuyLe4y+gm0daQeqDjNFi+GIwq3GQVkfyUDJRBhklIdBwoMb1yeaCd/Ll2TNGOle8K/Bct0Mzl2j7Nm4u+NpT70GKQ0jyFlkczcFmZwt7mskuLQaJM8CRXBOxoL2lkoHtjxqUwRnqMrs+WdyTDwDL/HW0ZXN/BmkBpQpT0ddTiVDoAfd1Y+Aulsm8YxTRLu4Wlu508nTKMSZ/d+uah6bCi7IEr9kgtulSw/1UQbCl0UihR9MZgdNZZLByQz1hXVZOP0KKVPA7j8rG5ZwkwL0L0z57+ccYTUf5e5T8R3zs37rFZgclMR/gSbKtLj2WmKhjVUXTFmpIfPiY+0EfwGl4Inv3dXSn+LVvM3VH+ifdnWxaxJQWEJiZfh5YYqLHa43vy3Z78IVILi561ruOt1mgeO5uNyhsdAv4gZucepex2dxxT0t14WXA+ZQoP3mj8uisJphjuQUvQ2qvVG4Y1ibgssNnQ4aQh5Tdo/qaPloWERyXbtS5wsTbFvudY63FuSvVB8QcuGVEREvGz06BoQOwSYiJxG4NVQxVWllFXisIGuF
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(136003)(396003)(346002)(39860400002)(36756003)(956004)(31696002)(86362001)(186003)(83380400001)(8676002)(8936002)(2616005)(26005)(31686004)(16526019)(6486002)(54906003)(66946007)(5660300002)(66476007)(316002)(4326008)(16576012)(38100700002)(66556008)(6666004)(4744005)(2906002)(478600001)(53546011)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dDh5ejlSdmVUc0VqVnhMWEZsN2ExVUJiU2RTMlJvRUM2NzhHcjQyTFZRRDdR?=
 =?utf-8?B?M0V2V2c3Vi9hR0xYNmNheHpOczNpVER4V0tFa0pXRk91d3hoQkdHeGJrZFB0?=
 =?utf-8?B?UFVsamJFQzFobE5lTDNDdEVhWTEzYVl2Z1Q3QlRvcm5WUE9td2k2andmS2Mw?=
 =?utf-8?B?R3h0bTl4T0RiU3h5RWNMRTV1dFMzQmJCQXBtaFUvNWJZaHN4UzVkK3VHYlRl?=
 =?utf-8?B?a1JlVzFYV2QxajZ2Z25GbHlIVjhuQTZ1Z3lkZFlqbWxvQmx6WURCaVVmMGFP?=
 =?utf-8?B?Y0g4TG9iZngrUzEwZVR0NXNwR3B3RmlKN1FzNEIzUG9xVlNOUHQxK3UvTU5o?=
 =?utf-8?B?ZnBzRTZZMGhxMkpCK0U5L0J5enVDRmpxVmIzNEdZNktFb1h2bURIT1kvM2F4?=
 =?utf-8?B?dVJXQ1BzU1dmZU9ydDNDUnVpUDJxZi9tYk9hSkhqQjlvbWRNaEJJbzRiMGRP?=
 =?utf-8?B?d1FDaEpVeVMveUR6cHEvdStGM1lwbmZCVzVRMEdzNGR0TmRieG5SSHhlS0Ru?=
 =?utf-8?B?MlVtbDBQdkwzVUpybWUxTE1oZk9xTlJ3aTVuU3FXSnpkSFBmcXJmNUlZQnlY?=
 =?utf-8?B?MFhidlhEQkF2ejBlNEJud3BKVUhyTG1uS3NlSkx1ZVF2ejc3OGNIRDkrMTlq?=
 =?utf-8?B?ZnZ5eW8zZzRsMFFwT0NHWDVWNzRhV2RCZEgwcGVtampwa3oxVHc4cUxac0Y1?=
 =?utf-8?B?UlBhSmo3SnlockZ1cVdDWlc4bFhzQXBBV2ZmREhNQUlhckdIeHR1eGYzY0V3?=
 =?utf-8?B?TU5ZZXdsT2NxQldiM2FBaFIvWW40OVBzREZsZEpKVXlBWXJYSmdFWDVGYUhC?=
 =?utf-8?B?aVUrYnlVKzR0SGFVRXN6VFVTKzA4QlRBQkhiMXd6RHBnMEpFTTlxVHMrY2wz?=
 =?utf-8?B?YU9NUG8xVWdjTHhUd1FNekdrWHVFVEcrTlBNZ1VsbkZpRTRyVVliejcvWjdG?=
 =?utf-8?B?L3h6dENqK0JiVk5vaFN6ZFZOTllGNnJXKzU1K1pMeGUyRXpTeFpodUpQQnZr?=
 =?utf-8?B?SVdZVGR5SVR3MGJ0QVBpZHJscGdwRHZENE9NM3RoQVpPTTMvUWIxYXB3QW9U?=
 =?utf-8?B?dlBPS1VibzZvM0hGT0VOOU1VSzN2OU5JN1JiZlYzRHp1ZUE1VHhoNUxHV1g2?=
 =?utf-8?B?eTNXUlBPbjlyVXF2T0RDVFYrYnBLb0Fiay9VdG9IZGdkSGtDYTkxdlg3QVdp?=
 =?utf-8?B?Y0kwQkdjT3dma3FwTkpLWlh5VlFwZmhJdnhib1F5amVxa1lYYWVJNHk4Mmpq?=
 =?utf-8?B?U0VoaXdxSk9EU29DOWlSenJEdjFVVms0WGlIN01tZ0RvQjc2bndON1d0Mlpl?=
 =?utf-8?B?RHJUcHkxM3EyS3pzSDdoSWppNVFPMFlKY09TeXdCbWFDaG1HUnlLTDJxTE14?=
 =?utf-8?B?bUJpMTJtczQ0K1JHQ2tWZ1gvRVpNWjFIci9leEZZLzNzRXUrN2NkRzMvNElt?=
 =?utf-8?B?VzNUV1VYYS9KY2lCWlhHNDEyN2xFTHgrR1YzZzAyRCtVSS9icUI4RnFwcjZu?=
 =?utf-8?B?OCs4ZlpKS25BbHJjcG5HbVJsaERBanU3cVZOQk5sQytLSmh3VGwrUnh1WFJO?=
 =?utf-8?B?cDFkMWwwT21XZU1uOC9yeElsbHhERG83eERTN0lKZEpEZ3pGWStkUFEyN2hJ?=
 =?utf-8?B?SVBvMjRmSG1lYkFuUWtPV0RDNDhPUkpSTm9zOXMwakJvcysyckdzbHpGYm5h?=
 =?utf-8?B?MnZJLzNWSWhiK3pnVHVjVWlsakVBU3NXU0dha2YvN0ZvT1BiQ09obmVYZ0N5?=
 =?utf-8?Q?LQyJUpkIgpemWGb8FiQ4eQ+2brHlUoXdoZIELfj?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 6e5a2f8d-4304-4e45-ac05-08d93d8f6e5e
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 19:27:29.2860
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: kohGHpSfhKy6OGhT3r23R2jExywl1DVkvH/q7OLRq96rygVc7dG+XzC0UWtSH6itzZzjTvinYSBnMVHEhR/+ttg2p9WEazqNmilrgnhRXKA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5837
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> Verify pfn type on sending side, also verify incoming batch of pfns.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> Reviewed-by: Juergen Gross <jgross@suse.com>

Any reason this isn't folded into the previous patch, like your
subsequent two page type helper patches are?

> diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.=
c
> index ae3e8797d0..6f820ea432 100644
> --- a/tools/libs/saverestore/save.c
> +++ b/tools/libs/saverestore/save.c
> @@ -147,6 +147,12 @@ static int write_batch(struct xc_sr_context *ctx)
> =20
>      for ( i =3D 0; i < nr_pfns; ++i )
>      {
> +        if ( sr_is_known_page_type(types[i]) =3D=3D false )
> +        {
> +            ERROR("Wrong type %#"PRIpfn" for pfn %#"PRIpfn, types[i], mf=
ns[i]);

"Unknown type" would be more accurate.

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 19:43:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 19:43:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149322.276090 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzP4Q-0001wk-QJ; Fri, 02 Jul 2021 19:43:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149322.276090; Fri, 02 Jul 2021 19:43:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzP4Q-0001wd-NR; Fri, 02 Jul 2021 19:43:26 +0000
Received: by outflank-mailman (input) for mailman id 149322;
 Fri, 02 Jul 2021 19:43:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzP4O-0001wX-HU
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 19:43:24 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1f750bb6-9dc6-43da-9a2a-418389247bea;
 Fri, 02 Jul 2021 19:43:23 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1f750bb6-9dc6-43da-9a2a-418389247bea
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625255002;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=HY/2zx7JsDsDRDIO7jca5fPF13HZXmGu/pYGKlWarDk=;
  b=OTM0LFid8mms3YinhnnGu+K9Yy7vDmI88b4injOPrr6Q5g35i3K6bB1b
   wGFVRCY3wDgiWX9I2/1vqgAQRc4BpSbfOwJP610Ed7skQAihiLNOMH8Wy
   KuDXUeJLEM2lHwZK6CjhtAIveBl8YCzUK63LgfcbbTVBy5l3eqdtJw5SL
   w=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: /uMgw+MXHXzfAZzVVxrrweiVstwx+G33gy7ZY9viQjp5y9Nhp4y55Srmzn5Ku0WGN84qA4xvEa
 GkbGjBL45GUmKEqvfQzKE1Jv2Y44Rfd9asVnlbHNNpKVG7Z435+zyY4w3HZXOLtc63fPc3NxX5
 adEhQ2fEkjIdk04OlCtSyk0VsZw+jnrGE3JNouneXs4aeETeX6IadtOzZW65KG35tbZvaqbU7U
 juDmMCxPtDsuiS3LA2yp4hrNDmJ5C+4bYI2KDhXtLlOrVF38Him1joKQfOoHeT+c8hc+RPOown
 Nl8=
X-SBRS: 5.1
X-MesageID: 47198654
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:JSp1Hah2mG4jYPZ6R3kLjb2ZwXBQXzF13DAbv31ZSRFFG/FwyP
 rAoB1L73PJYWgqNU3I+ergBEGBKUmskKKdkrNhQotKOzOWxFdATbsSkLcKpgePJ8SQzJ8k6U
 4NSdkYNDS0NykBsS+Y2njKLz9D+qj/zEnAv463pB0MPGIaHp2IrT0JbjpzencGNDWubqBJcq
 Z0iPA3xQZINU5nFfhSURI+Lpn+TpDw5d7bSC9DIyRixBiFjDuu5rK/Ox+E3i0GWzcK5bs562
 DKnyHw+63m6piAu1Hh/l6Wy64TtMrqy9NFCsDJos8JKg/0ggLtQIh6QbWNsB08venqwlc3l9
 vnpQsmIq1ImjzsV1DwhSGo9xjr0T4o5XOn40Sfm2HfrcvwQy9/I9ZdhKpCGyGpqHYIjZVZ6u
 ZmzmiZv51YAVfrhyLm/eXFUBlsiw6dvWciq+gOlHZSOLFuKIO5lbZvuX+9La1wWB4TsOscYa
 5T5YDnlbdrmGqhHjLkVjIF+q3rYpxbdS32MHTruaSuonNrdT5CvhIlLfck7wA9HaQGOtF5Dt
 T/Q9BVfY51P7krhIJGda08qJiMeyHwqSylChPaHb2xLtB4B5uKke+u3IkI
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47198654"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=W00Z/toL/YgW0tAhVjwDX+ObOdXSiqzHfGIIzUPo6JFYSncPw8znVQPMlBtDpiL1lUhhS4Ipm3P6i1LYiArskxpKMCwCI34ukUEUGevcxjg5hROyyCs3T5BrzDjDKiuk6Z6mLUshbaJewd4wLLuSXDUmx6tCoBc36+GxqTHerbeKXAeiE9Xef5yW83XHV6pLGuUOpVLbIhlWWy7mBJXT17OrU5jTgY6dXdabDw9owIJL8XJZHWZXyjIbrNRSmklL6l7FxNa2NNlYaNpyi5hvugnGkXQNibESRCPiJgTB2YscLdAtL9ReMhhqrC2DexftxMstpH0sUhp9UXWg+u196Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WQm8/LM5DZNPep69o2xTgCMxTO2rUFu6G+DGUi9imyU=;
 b=ZnnIDGJidU8W4yLPGT9cYTIQMi32QAQUQ5M5S1Ej2jT6v/EHwO7S7LMEGcJfW1d/S5ZXXqEZXpWRgF9rqs/xdOleae0cHICI7HYcW2wd1RA/+nImaVSf/0mT86bw3fb7owIF1QUBsYck9DnRRjFu5icGadJfpGmjruqeQSMacYYTNUv9NN2qFFsK1imLA8BCSEssDPSrjPJlMFNXKKzxKkJy3zkTIbkjlGvRIf7aOW+4bm/tPITo9JmRUgazTH6ovxC+2nWw/xbJ5f0h4X8EsbQlpb/9EkeP0rWTrb27awZqNLqDm9Hfw7g7l6DTCMqlwVQ8t56v2Ekw4S5/dPGdog==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WQm8/LM5DZNPep69o2xTgCMxTO2rUFu6G+DGUi9imyU=;
 b=ruW8BmgGsRvEBH/BDqZpS0dfqShZZQQuZ8jHw4INtRvaJ52dA6ywyYURMOO8Rv8bue4rRwzCKRqMtG0skI1ue10+gJKcUf0FWxgb2KpcP7gU0QYa3K1rWCYDd1oW0Vg2L2nzKeCE6wEabgznPXPPIIITwLkqXXi9WC7FPXqvCyw=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-13-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data pfns
 in migration stream
Message-ID: <9db50e05-233b-e279-307d-548fc23d0115@citrix.com>
Date: Fri, 2 Jul 2021 20:43:13 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-13-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0098.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:191::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e18f3e4b-8cc5-4cfc-4a88-08d93d91a4ad
X-MS-TrafficTypeDiagnostic: BYAPR03MB3942:
X-Microsoft-Antispam-PRVS: <BYAPR03MB394298FCE598C5A15CC40260BA1F9@BYAPR03MB3942.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 8W7sJJuSfv6ny0N+g2nd4Zdaig2Fsk2WfD5IigFQ2ZWBYi613rpbCib150suxs1C4CTQ4ngvMqgHSca71W9e5X6bKJSSiUwTVOOtXPIjRcF8/HTBkM8kTaC3hHZVe4JGoZ2d0EHKl4UfEacJbaad7jF6C5in/DeznZJSrJAfnRzcPnuhDeI5bGcH6bIZbxAU3GTJ86k4nYCAbOdlmCrFUSTNlKbn8uuoJnoPvENSKlBnDSg6B0QaLA/KQef9K20yyzs9AwkisyvCvR8WysIZTdrH65cxVlXP2HPaVis9/p7sDjziDMLrXZm2JGKymji39jKqG1/JdYULPdiYYVYXkIk7s3l7ZX3QO6fRV17CDB04pBlbs8L9xuGs7ym+hyTDR9BFMWdcaXqQU2cQv+waidschGSndYytDWmfEvcuG4vk3ekrft6rAo7VJT7yGW5geuNJM+F196+9E1eQroNEGNuVLoWdV8ws2eLr8aJ75I6Favx0JjCN1OzXSVTww15ZwUlcG7XhgMgZNHF4dbKXC3rURpvNzc+f6EdZ1+AWZTtZ9ieZ/cOSb1icBG2AkdRVN3YdM3x++hwqYFe4hCOYYTuiT2RJTTlffrUeVOP2lgYxM2BEkUOyuVpQsSHvOBE6pQ2Qj48Oc9Nm2S2C2p4qkb+artD/KRcftSJ4t+K4slhy/RNrF7Zvcm2IO0dvwXQ+oLwnedUMTlAw7qYcP5GtRVjUvltc5dhA3Bt70i2UYdtPPKcjI/5dlylxr5qgXO1L
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(136003)(366004)(39860400002)(396003)(26005)(36756003)(6666004)(5660300002)(478600001)(66946007)(66476007)(66556008)(16576012)(54906003)(316002)(16526019)(2906002)(186003)(8676002)(6486002)(53546011)(86362001)(83380400001)(38100700002)(8936002)(31696002)(31686004)(4326008)(956004)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: e18f3e4b-8cc5-4cfc-4a88-08d93d91a4ad
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 19:43:19.5956
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RteaGOXmWeExst11eY0mwr9zVBfnM1xyXsolp9ore1yqFP6CRr3HX5cSQQl+oHEbeBoVgIdSaq2RYLAs+Co1z2LQdEVhgbxdvqtAioO+P/I=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3942
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> Introduce a helper which decides if a given pfn in the migration
> stream is backed by memory.
>
> This specifically deals with type XEN_DOMCTL_PFINFO_XALLOC, which was
> a synthetic toolstack-only type used in Xen 4.2 to 4.5. It indicated a
> dirty page on the sending side for which no data will be send in the
> initial iteration.
>
> No change in behavior intended.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>  tools/libs/saverestore/common.h  | 17 +++++++++++++++++
>  tools/libs/saverestore/restore.c |  5 ++---
>  2 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/com=
mon.h
> index 07c506360c..fa242e808d 100644
> --- a/tools/libs/saverestore/common.h
> +++ b/tools/libs/saverestore/common.h
> @@ -500,6 +500,23 @@ static inline bool sr_is_known_page_type(xen_pfn_t t=
ype)
>      return ret;
>  }
> =20
> +static inline bool page_type_to_populate(uint32_t type)
> +{
> +    bool ret;
> +
> +    switch (type)
> +    {

Same style comments as before.

> +    case XEN_DOMCTL_PFINFO_XTAB:
> +    case XEN_DOMCTL_PFINFO_BROKEN:
> +        ret =3D false;
> +        break;
> +    case XEN_DOMCTL_PFINFO_XALLOC:
> +    default:
> +        ret =3D true;
> +        break;

I know you're replacing the logic as-was, but in hindsight, I'm not sure
it was great to begin with.=C2=A0 It defaults the unallocated types to bein=
g
considered populated, which isn't a clever idea.

Anyone adding a new page type is going to have to audit/edit each of
these helpers.=C2=A0 I think it would be better to write all the true cases
explicitly.

> +    }
> +    return ret;
> +}
>  #endif
>  /*
>   * Local variables:
> diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/re=
store.c
> index 324b9050e2..477b7527a1 100644
> --- a/tools/libs/saverestore/restore.c
> +++ b/tools/libs/saverestore/restore.c
> @@ -152,9 +152,8 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned=
 int count,
> =20
>      for ( i =3D 0; i < count; ++i )
>      {
> -        if ( (!types || (types &&
> -                         (types[i] !=3D XEN_DOMCTL_PFINFO_XTAB &&
> -                          types[i] !=3D XEN_DOMCTL_PFINFO_BROKEN))) &&
> +        if ( (!types ||
> +              (types && page_type_to_populate(types[i]) =3D=3D true)) &&

I'm surprised not to have seen a compiler or static analysis complaint
about this.

!A || (A && B) is redundant, and simplifies to !A || B.

Clearly need to blame whichever numpty wrote this code to begin with.

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 19:49:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 19:49:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149327.276102 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzPAA-0002c8-H9; Fri, 02 Jul 2021 19:49:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149327.276102; Fri, 02 Jul 2021 19:49:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzPAA-0002c1-Ci; Fri, 02 Jul 2021 19:49:22 +0000
Received: by outflank-mailman (input) for mailman id 149327;
 Fri, 02 Jul 2021 19:49:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wENR=L2=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1lzPA9-0002bp-1u
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 19:49:21 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f6bfad3a-4bfc-4041-ba76-585be361874c;
 Fri, 02 Jul 2021 19:49:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6bfad3a-4bfc-4041-ba76-585be361874c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625255360;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=rgW8C+eifQjwPHLKw03S1HEEEfQoGZN/ty46eG1nTFs=;
  b=fSQQlGrdRtuBJfpnmnpSCn8a6t8nqbl8mBHf2Q8OZPAe1v9A5Sgd0ZIV
   tatc7hZijhFKBzEbXKfZjal+/2+slG0Y8LpAWeWoGZeBBfRT8XZKGQYa/
   fKWeJZHOmLzUUByJ5cs1yDjuahzB2fQDWyRifh6LXFzLi3Ex+Otx0cB6f
   A=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: Pu2RNO5O3GfQ+IKxB5dpfof/CEFUGnAJlX8ZsnBjyIkelvLKbbS3odC2nBqAYL43kADqnBWBxj
 Ph4E/YmoX1cuLUOEAz/GqQSiiq/wyyZsNTnKIXKq2uMDOq/G/ewxxeybk3Nl6Z3U4orW+xs7u4
 LXFcEwPZm4uoBV6DE91OnqIwIxf2OZdSZuqrEyQMHbzRaVsUnCdOoHDgyvHkVmgPI66MO+08Dl
 fPseAJDASZ7eRjiXv9FaP86F9BVQ2r/pdICEQvHlQDqqgaLo/FFGVL04rbZDhasIVYplDBKGhs
 jik=
X-SBRS: 5.1
X-MesageID: 47554560
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:T4Cwj63a8bWsp/GYzP8Y7QqjBV9yeYIsimQD101hICG9Lfb3qy
 n+ppsmPEHP5Ar5OEtBpTiBUJPwJU80hqQFn7X5Wo3SIzUO2VHYUL2KiLGC/9SOIVyEygcw79
 YHT0E6MqyMMbEYt7eJ3ODbKadZ/DDvysnB7o2yvhQdL3AfV0gj1XYfNu/yKDwEeOAsP+tBKH
 Pz3Lsjm9PtQwVsUiztbUN1L9Qr6ue7267OUFojPVoK+QOOhTSn5PrTFAWZ5A4XV3dqza05+W
 bIvgTl7uH72svLiyP05iv21dB7idHhwtxMCIiljdUUECzljkKNaJ56U7OPkTgpqKWE6Uoskv
 PLvxA8Vv4DpU/5TyWQm1/AygPg2DEh5zvJ0lmDm0bupsT/WXYTF9dBrZgxSGqa12MQ+PVHlI
 5b1WOQsJRaSTnamj7m2tTOXxZ20mKpvHsZl/IJhXA3a/pcVFZol/1awKppKuZGIMqjg7pXVt
 WGTfuspMq+SGnqKkww5QJUsYWRth1ZJGbyfqAA0vblmQS+0koJl3fw//Zv6EvowqhNAKWs19
 60RZiAq4s+B/P+TZgNSdvpEvHHRlAkf3r3QSqvyAPcZdA60jT22sXK3Ik=
X-IronPort-AV: E=Sophos;i="5.83,319,1616472000"; 
   d="scan'208";a="47554560"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=g1TJij7fKF6HiWndX2m0nt5bcF+Vh3JnQlduLBdB1oz9bC1dghIcCUKYvGosUv3OkjZ5ddtfcZQsk0FJUmO8a1BDYx9sBmBTCGOCx+B/sCRB43OFnyHVh2BDi+PwbpfgDesg+l04LxRYvfZS52FMGiI2H783kmVrAYXom3Ym8clh+D3E/wyDr3Kp22fi1bmnipY3pzCcPx2BZ2wKFJ30y/cMVbKhjPTqxfeDSf6HZJcrR7loa/MbfxoEqV19C6EEEuX5R8pS6XBTNij/X54UPhntgpGonz0sELF171+UY+LW6OzNBl3zHp6u6yx6QWc8KOWQr8ZzYKa6Zbb+PMjUhQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=i7N68Ya0uhCMnAoSNn5iCyw/Z8cNK+0b8HcO4R8m5OY=;
 b=PlrTqP6A8mpZ240ZHFAhu9HRJ1pPQzlJ9g8MPebYgP+4FqEXARHq+mXWRux0YXc6PDEEVh+eu5XwD7qtDsff3BnaSXgzpTc4xeZsg1Ha2YcOaXyozHu5bzAIiaUQLRq2ca46itDnWqgIGAdtUiuxfGl7p6Yp7gL515k2NZxqf4vyXa3hyCsaCZl8ZiodS84CNG5ZuxqiY07UhDXtOvwCtOFD879Mmshz29GLbCG+k1E1CJ2XRRBXfIuvy70yCeP5QUkd0VGBMRlXXjDtXT6K32pfw7pkXjzOnSxZKsttF1EO2LshdJ+hc99mdbGzvqXjvnAu2LFYcOZx2AD/HUg8Ag==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=i7N68Ya0uhCMnAoSNn5iCyw/Z8cNK+0b8HcO4R8m5OY=;
 b=sMQb0CSSObXLe570VqDhfq+/+KMcQZW4qrXu7KcgL4rWtoM3e2J3BguryJElvqExx5ThgpBj69AqT5uux9Y7EUNts/fK6V6lzuUBmFtUn6kyfIi7eBV6ffLA8Ybl2pVCQIanCmGZ1+5JBOxJ2ToNIPTsS9CNQrRFq4HNghCMVo0=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-14-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 13/40] tools: unify type checking for data pfns
 in migration stream
Message-ID: <c8735173-53b2-6b50-49cb-ebfee8863e3f@citrix.com>
Date: Fri, 2 Jul 2021 20:49:09 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-14-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0054.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1::18) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 861b2a03-5e29-4148-5e8d-08d93d9279c1
X-MS-TrafficTypeDiagnostic: BYAPR03MB3942:
X-Microsoft-Antispam-PRVS: <BYAPR03MB394205437C0313478B8493F9BA1F9@BYAPR03MB3942.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:644;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: YJLadaferQiwVYamK8BYiLInt0yRxrv+D+jF5tnjZpjORTM/SV4nqxdmftajLzYDzCvi3P0wDXPWm+V0I730+0zWztBnEarbhMXOJftE2Q25up2oFLLj1LGsqSIX2T73hecnGNiztrfFSNdQy5atrhZg3y20yANfMivBAW1+YAeWZb1fjhyDatX4dQvYuP6VhPTOX4aidXeiEFzTrrWxPstogoAGVUi5+z43wZG9uhsEu8EFTNcoEC7nLbLnHpJDmJPx6iGwA469iuSxWiZcYrrEicP6e10wvvLTgQ25zCWooMYNAyZzUyo/hGCj43N3IxpGhjckM86OPk8Twtbc+h7d1u/NpOzDI+N9jRKWahI8AtkGWHVRlHM+EjZJrens6hBXLOxfz6LQk4ayZQnmMnOHw66qox9z0skN7Mb+aNXlD8GrCaqU1EeRGGmBeQzY7V8yP4yxLtFLwucBPrn/zS3Mh5mkuStlujRxo+rO502FQLBZDs9DcpWteWK4xv/MmP6+tfXAUNbWh8e9BKM+fTwB89h7E/LLtcUmVLZH/Kb5qoSEr842X3a8GeMdVElwzuHKodfCubZ1BTjgYCd3PWTS4zLQys+Q1Cm8WF5UKNpWCRQcOjBv+VgpwvaxrVKzAql2KD4zo/t0ZBXg8Au2FzR8nBXp+PmCI8bq3nvlzSQehGbwajrG5tLRIqfh0ab+1Md5ufIY4SjEZRAMlhnJche5Hopq6KHodk0jSvePGmtX7DF34zV5k8fR2HqnAhFW
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(39860400002)(366004)(136003)(376002)(346002)(31686004)(86362001)(83380400001)(38100700002)(31696002)(8936002)(4326008)(2616005)(956004)(66946007)(66476007)(66556008)(16576012)(26005)(36756003)(478600001)(5660300002)(6666004)(53546011)(4744005)(316002)(54906003)(8676002)(6486002)(16526019)(2906002)(186003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 861b2a03-5e29-4148-5e8d-08d93d9279c1
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 19:49:16.8780
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: jnJyu0vtBs0Fvx5040oIxy18gABPryTzteri4YjULepcZnqSlXtgJIHI+KBdyZfpxoJdyoPMoeyqyJbE6DEIhwqDpqTken1xxW+jUJeIORo=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3942
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/com=
mon.h
> index fa242e808d..905b4078f6 100644
> --- a/tools/libs/saverestore/common.h
> +++ b/tools/libs/saverestore/common.h
> @@ -517,6 +517,24 @@ static inline bool page_type_to_populate(uint32_t ty=
pe)
>      }
>      return ret;
>  }
> +
> +static inline bool page_type_has_stream_data(uint32_t type)
> +{
> +    bool ret;
> +
> +    switch (type)
> +    {
> +    case XEN_DOMCTL_PFINFO_BROKEN:
> +    case XEN_DOMCTL_PFINFO_XALLOC:
> +    case XEN_DOMCTL_PFINFO_XTAB:
> +        ret =3D false;
> +        break;
> +    default:
> +        ret =3D true;
> +        break;

As with page_type_to_populate(), we shouldn't really default the
unallocated types to having stream data.

Subject to this and the other style concerned, Reviewed-by: Andrew
Cooper <andrew.cooper3@citrix.com>

I'm happy to fix up all the issue for the page type helpers on commit,
if you're happy.

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 02 20:22:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 20:22:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149332.276112 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzPff-0006Ta-33; Fri, 02 Jul 2021 20:21:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149332.276112; Fri, 02 Jul 2021 20:21:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzPff-0006TT-01; Fri, 02 Jul 2021 20:21:55 +0000
Received: by outflank-mailman (input) for mailman id 149332;
 Fri, 02 Jul 2021 20:21:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2ZMt=L2=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lzPfd-0006TN-B2
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 20:21:53 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 85a8db1a-5c85-477b-8308-ad06038d411d;
 Fri, 02 Jul 2021 20:21:52 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id C20356135C;
 Fri,  2 Jul 2021 20:21:51 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 85a8db1a-5c85-477b-8308-ad06038d411d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625257312;
	bh=3+1YcGhflKHl8OpcsTPtGA8KDvz83imejjTVs+ylYh0=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=Y0Kch2H7zr5Ri4/kM40qBxllmmjbe6wpcRRiVUXYPDIk3pjErcYgP/RdLXvbPSlOe
	 IyC753h8MhHdNVEVIeJeZP7PugY+SQMb+wEiCD8WY8Fal/ACu81aCFwk+3XaKV2hLt
	 ZDPXqH3hf7nJWIrK5oVudVB9P/BME/iPoOPJq6w7IJScej9DUqWHPworbjH1T5PBsd
	 tR/201Fs7xBu6Cl4Cun795ZVhZDMXonsOh2RVBp09nKTz7hj0+DHVTo63wePSCGSDk
	 jN19uhXKfizBui+Oo8L1Bt+TxuRTqAksb+/4xYepZT8SOgacJEKcNOGow98XBVxsNX
	 8skinA0SbvqYg==
Date: Fri, 2 Jul 2021 13:21:51 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, 
    Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, 
    Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
In-Reply-To: <4E85233D-5371-4862-A0A5-2B653C677D54@arm.com>
Message-ID: <alpine.DEB.2.21.2107021321440.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-10-luca.fancellu@arm.com> <alpine.DEB.2.21.2106231530320.24906@sstabellini-ThinkPad-T480s> <31171081-1007-4B4E-91CC-25EA1041EB58@arm.com> <alpine.DEB.2.21.2107011043410.9437@sstabellini-ThinkPad-T480s>
 <4E85233D-5371-4862-A0A5-2B653C677D54@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="8323329-961216169-1625257312=:9437"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-961216169-1625257312=:9437
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8BIT

On Fri, 2 Jul 2021, Luca Fancellu wrote:
> > On 1 Jul 2021, at 18:44, Stefano Stabellini <sstabellini@kernel.org> wrote:
> > 
> > On Thu, 1 Jul 2021, Luca Fancellu wrote:
> >> Hi Stefano,
> >> 
> >>> On 24 Jun 2021, at 00:34, Stefano Stabellini <sstabellini@kernel.org> wrote:
> >>> 
> >>> On Mon, 10 May 2021, Luca Fancellu wrote:
> >>>> Modification to include/public/grant_table.h:
> >>>> 
> >>>> 1) Add doxygen tags to:
> >>>> - Create Grant tables section
> >>>> - include variables in the generated documentation
> >>>> - Used @keepindent/@endkeepindent to enclose comment
> >>>>  section that are indented using spaces, to keep
> >>>>  the indentation.
> >>>> 2) Add .rst file for grant table for Arm64
> >>> 
> >>> Why only arm64?
> >> 
> >> This is a mistake, it should be just “Add .rst file for grant table"
> >> 
> >>> 
> >>> 
> >>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> >>>> ---
> >>>> v6 changes:
> >>>> - Fix misaligned comment
> >>>> - Moved comments to make them display in the docs
> >>>> - Included more documentation in the docs
> >>>> (see output here: https://luca.fancellu.gitlab.io/xen-docs/hypercall-interfaces/common/grant_tables.html)
> >>> 
> >>> It looks much much better. All the info we care about seems to be there.
> >>> The only things that I noticed missing and might be good to keep is the
> >>> small comment about HYPERVISOR_grant_table_op:
> >>> 
> >>> /* ` enum neg_errnoval
> >>> * ` HYPERVISOR_grant_table_op(enum grant_table_op cmd,
> >>> * `                           void *args,
> >>> * `                           unsigned int count)
> >>> * `
> >>> *
> >>> * @args points to an array of a per-command data structure. The array
> >>> * has @count members
> >> 
> >> Where do you want me to put this comment in the html page? In the end of the description in the top of the page?
> > 
> > Yeah, that looks like a good place
> 
> Great, for a preview, have a look on this: https://luca.fancellu.gitlab.io/xen-docs/hypercall-interfaces/common/grant_tables.html

Looks good!
--8323329-961216169-1625257312=:9437--


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 20:56:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 20:56:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149338.276123 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzQCd-00019y-QK; Fri, 02 Jul 2021 20:55:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149338.276123; Fri, 02 Jul 2021 20:55:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzQCd-00019r-NB; Fri, 02 Jul 2021 20:55:59 +0000
Received: by outflank-mailman (input) for mailman id 149338;
 Fri, 02 Jul 2021 20:55:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzQCc-00019h-LY; Fri, 02 Jul 2021 20:55:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzQCc-0001Ew-DT; Fri, 02 Jul 2021 20:55:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzQCc-0000Eb-4Z; Fri, 02 Jul 2021 20:55:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzQCc-0005pG-45; Fri, 02 Jul 2021 20:55:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=c59bnYu/bzOBS0V0n6q3LIARBQUeUknpTp+nOsjO+lE=; b=1FdWPl0TVxNHHKnoqJ4wsHxkXA
	4iicJ1MPWMUbaM5p6/gi6L8VM4E6EuP+NRzL4PGkD/m1ZWdRIES3h+J3BrVrtEqBTzwcNUVRIaIGa
	+ClazDdUvVNmjCaHQReGbwGuS8x2MUqnbV9ez87+dvFZ8HJJ5aIQFQtCBZeWnq4sN1aE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163230-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163230: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
X-Osstest-Versions-That:
    xen=3bc3be978fd61f8099797864136c5f447c0e4aae
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 20:55:58 +0000

flight 163230 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163230/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8
baseline version:
 xen                  3bc3be978fd61f8099797864136c5f447c0e4aae

Last test of basis   163225  2021-07-02 15:01:35 Z    0 days
Testing same since   163230  2021-07-02 18:01:38 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   3bc3be978f..74d044d51b  74d044d51b19bb697eac5c3deafa140f6afafec8 -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 22:23:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 22:23:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149351.276149 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRYr-00017g-Ng; Fri, 02 Jul 2021 22:23:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149351.276149; Fri, 02 Jul 2021 22:23:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRYr-00017X-KC; Fri, 02 Jul 2021 22:23:01 +0000
Received: by outflank-mailman (input) for mailman id 149351;
 Fri, 02 Jul 2021 22:22:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2ZMt=L2=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lzRYp-00016l-RJ
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 22:22:59 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0e08e4da-db84-11eb-83c9-12813bfff9fa;
 Fri, 02 Jul 2021 22:22:58 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id CDEB2613D8;
 Fri,  2 Jul 2021 22:22:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e08e4da-db84-11eb-83c9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625264578;
	bh=Fy+lh0gdDpIUJ31/KI+4mZyM1dnS4gMtNFLuAyMxMmw=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=Kh1lN74M1X59uKKPgGFrOx3YV4nt3Bdy9y9MFmMdAhJ7xYJoBVwh+NkbOq0ruAaaA
	 XuNQ+W2G1VwTObfay7JKaPkaKL4b7YlJXVoNISLIJp3O5zVvuhPrwmk2YgGsX7XIf4
	 y3F5TiFodCHV5DwUg3M2waV6Gln4RXBCjncpRJMeRc4kiivcAUq5PVi6l/qxUTAs7A
	 HTrLXuZGJ8UCi9ZfzJHMSvUnvW4Trn9Il68cXhx2B07TqZrFUAM6iPqVIt9K7jjjm+
	 CBD0uO7DAKBZjyb5fs1jOhyoiMKZjFFKk31fPY7L1lnC1prsixQILhkqOz/wfX+m3c
	 ynGvPBNpp7kTg==
Date: Fri, 2 Jul 2021 15:22:57 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: xen-devel@lists.xenproject.org, bertrand.marquis@arm.com, wei.chen@arm.com, 
    Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 4/9] m4/python: add function to docs_tool.m4 and new
 m4 module
In-Reply-To: <20210510084105.17108-5-luca.fancellu@arm.com>
Message-ID: <alpine.DEB.2.21.2107021456281.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-5-luca.fancellu@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Mon, 10 May 2021, Luca Fancellu wrote:
> Add ax_python_module.m4 to have a way to check if
> a python module is installed in the system.
> 
> Add a function to docs_tool.m4 to throw an error if the
> required docs tool is missing.
> 
> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>

Acked-by: Stefano Stabellini <sstabellini@kernel.org>


> ---
>  m4/ax_python_module.m4 | 56 ++++++++++++++++++++++++++++++++++++++++++
>  m4/docs_tool.m4        |  9 +++++++
>  2 files changed, 65 insertions(+)
>  create mode 100644 m4/ax_python_module.m4
> 
> diff --git a/m4/ax_python_module.m4 b/m4/ax_python_module.m4
> new file mode 100644
> index 0000000000..107d88264a
> --- /dev/null
> +++ b/m4/ax_python_module.m4
> @@ -0,0 +1,56 @@
> +# ===========================================================================
> +#     https://www.gnu.org/software/autoconf-archive/ax_python_module.html
> +# ===========================================================================
> +#
> +# SYNOPSIS
> +#
> +#   AX_PYTHON_MODULE(modname[, fatal, python])
> +#
> +# DESCRIPTION
> +#
> +#   Checks for Python module.
> +#
> +#   If fatal is non-empty then absence of a module will trigger an error.
> +#   The third parameter can either be "python" for Python 2 or "python3" for
> +#   Python 3; defaults to Python 3.
> +#
> +# LICENSE
> +#
> +#   Copyright (c) 2008 Andrew Collier
> +#
> +#   Copying and distribution of this file, with or without modification, are
> +#   permitted in any medium without royalty provided the copyright notice
> +#   and this notice are preserved. This file is offered as-is, without any
> +#   warranty.
> +
> +#serial 9
> +
> +AU_ALIAS([AC_PYTHON_MODULE], [AX_PYTHON_MODULE])
> +AC_DEFUN([AX_PYTHON_MODULE],[
> +    if test -z $PYTHON;
> +    then
> +        if test -z "$3";
> +        then
> +            PYTHON="python3"
> +        else
> +            PYTHON="$3"
> +        fi
> +    fi
> +    PYTHON_NAME=`basename $PYTHON`
> +    AC_MSG_CHECKING($PYTHON_NAME module: $1)
> +    $PYTHON -c "import $1" 2>/dev/null
> +    if test $? -eq 0;
> +    then
> +        AC_MSG_RESULT(yes)
> +        eval AS_TR_CPP(HAVE_PYMOD_$1)=yes
> +    else
> +        AC_MSG_RESULT(no)
> +        eval AS_TR_CPP(HAVE_PYMOD_$1)=no
> +        #
> +        if test -n "$2"
> +        then
> +            AC_MSG_ERROR(failed to find required module $1)
> +            exit 1
> +        fi
> +    fi
> +])
> \ No newline at end of file
> diff --git a/m4/docs_tool.m4 b/m4/docs_tool.m4
> index 3e8814ac8d..39aa348026 100644
> --- a/m4/docs_tool.m4
> +++ b/m4/docs_tool.m4
> @@ -15,3 +15,12 @@ dnl
>          AC_MSG_WARN([$2 is not available so some documentation won't be built])
>      ])
>  ])
> +
> +AC_DEFUN([AX_DOCS_TOOL_REQ_PROG], [
> +dnl
> +    AC_ARG_VAR([$1], [Path to $2 tool])
> +    AC_PATH_PROG([$1], [$2])
> +    AS_IF([! test -x "$ac_cv_path_$1"], [
> +        AC_MSG_ERROR([$2 is needed])
> +    ])
> +])
> \ No newline at end of file
> -- 
> 2.17.1
> 
> 


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 22:23:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 22:23:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149350.276138 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRYl-0000qP-Fg; Fri, 02 Jul 2021 22:22:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149350.276138; Fri, 02 Jul 2021 22:22:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRYl-0000qI-CV; Fri, 02 Jul 2021 22:22:55 +0000
Received: by outflank-mailman (input) for mailman id 149350;
 Fri, 02 Jul 2021 22:22:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2ZMt=L2=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lzRYk-0000q8-Ah
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 22:22:54 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 80df7d79-ec09-4269-aa45-50be355b2d5a;
 Fri, 02 Jul 2021 22:22:53 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 5B51D61405;
 Fri,  2 Jul 2021 22:22:52 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 80df7d79-ec09-4269-aa45-50be355b2d5a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625264572;
	bh=Iqikf0GglF2rjBlBCK0w5hpWr/YpU8lp+Uws8c+boYk=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=HJm0//bOy6goiu9XQ7lonVgUlGlRzOWGpffun0TVuoG2xI/XSIbtiZsyKQ+Xa4d0B
	 5+QM6JkxnaVt0+I2CKIRhdK7r9HL1I7QjFUcVSE/1GTKm0LlAED08iKpYGwpSk6pnC
	 vH8/N3PQndhw2mXJpb2hJVFyizG3EyEWcqNS0Txx72D4vbZhlIwOhNkdA3nig7QXtV
	 n9jJUWLwcnBXHncNCFtLpE7zRsRnzag5I0tDuYB6kyg8TLuvoyKQ9l7ROpJf3RQO28
	 1perlfYzM7rn68V3KpBcVEs3uT5SRL7orG0ZG7H6MJYXmsrq8251hhsU7pIJ2jLb5o
	 tOc+skz85q0+w==
Date: Fri, 2 Jul 2021 15:22:51 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: xen-devel@lists.xenproject.org, bertrand.marquis@arm.com, wei.chen@arm.com, 
    Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 5/9] docs: add checks to configure for sphinx and
 doxygen
In-Reply-To: <20210510084105.17108-6-luca.fancellu@arm.com>
Message-ID: <alpine.DEB.2.21.2107021456440.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-6-luca.fancellu@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Mon, 10 May 2021, Luca Fancellu wrote:
> Add checks in the configure files to see if the system
> is capable of generate the sphinx html docs using
            ^ of generating

> doxygen and sphinx-breathe tools.

I take you updated the configure script but running autoconf again,
right?

Assuming that is the case:

Acked-by: Stefano Stabellini <sstabellini@kernel.org>


> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> ---
>  config/Docs.mk.in |   2 +
>  docs/configure    | 258 ++++++++++++++++++++++++++++++++++++++++++++++
>  docs/configure.ac |  15 +++
>  3 files changed, 275 insertions(+)
> 
> diff --git a/config/Docs.mk.in b/config/Docs.mk.in
> index e76e5cd5ff..dfd4a02838 100644
> --- a/config/Docs.mk.in
> +++ b/config/Docs.mk.in
> @@ -7,3 +7,5 @@ POD2HTML            := @POD2HTML@
>  POD2TEXT            := @POD2TEXT@
>  PANDOC              := @PANDOC@
>  PERL                := @PERL@
> +SPHINXBUILD         := @SPHINXBUILD@
> +DOXYGEN             := @DOXYGEN@
> diff --git a/docs/configure b/docs/configure
> index 569bd4c2ff..0ebf046a79 100755
> --- a/docs/configure
> +++ b/docs/configure
> @@ -588,6 +588,8 @@ ac_unique_file="misc/xen-command-line.pandoc"
>  ac_subst_vars='LTLIBOBJS
>  LIBOBJS
>  PERL
> +DOXYGEN
> +SPHINXBUILD
>  PANDOC
>  POD2TEXT
>  POD2HTML
> @@ -673,6 +675,7 @@ POD2MAN
>  POD2HTML
>  POD2TEXT
>  PANDOC
> +DOXYGEN
>  PERL'
>  
>  
> @@ -1318,6 +1321,7 @@ Some influential environment variables:
>    POD2HTML    Path to pod2html tool
>    POD2TEXT    Path to pod2text tool
>    PANDOC      Path to pandoc tool
> +  DOXYGEN     Path to doxygen tool
>    PERL        Path to Perl parser
>  
>  Use these variables to override the choices made by `configure' or to help
> @@ -1800,6 +1804,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
>  
>  
>  
> +
>  case "$host_os" in
>  *freebsd*) XENSTORED_KVA=/dev/xen/xenstored ;;
>  *) XENSTORED_KVA=/proc/xen/xsd_kva ;;
> @@ -1812,6 +1817,53 @@ case "$host_os" in
>  esac
>  
>  
> +# ===========================================================================
> +#     https://www.gnu.org/software/autoconf-archive/ax_python_module.html
> +# ===========================================================================
> +#
> +# SYNOPSIS
> +#
> +#   AX_PYTHON_MODULE(modname[, fatal, python])
> +#
> +# DESCRIPTION
> +#
> +#   Checks for Python module.
> +#
> +#   If fatal is non-empty then absence of a module will trigger an error.
> +#   The third parameter can either be "python" for Python 2 or "python3" for
> +#   Python 3; defaults to Python 3.
> +#
> +# LICENSE
> +#
> +#   Copyright (c) 2008 Andrew Collier
> +#
> +#   Copying and distribution of this file, with or without modification, are
> +#   permitted in any medium without royalty provided the copyright notice
> +#   and this notice are preserved. This file is offered as-is, without any
> +#   warranty.
> +
> +#serial 9
> +
> +# This is what autoupdate's m4 run will expand.  It fires
> +# the warning (with _au_warn_XXX), outputs it into the
> +# updated configure.ac (with AC_DIAGNOSE), and then outputs
> +# the replacement expansion.
> +
> +
> +# This is an auxiliary macro that is also run when
> +# autoupdate runs m4.  It simply calls m4_warning, but
> +# we need a wrapper so that each warning is emitted only
> +# once.  We break the quoting in m4_warning's argument in
> +# order to expand this macro's arguments, not AU_DEFUN's.
> +
> +
> +# Finally, this is the expansion that is picked up by
> +# autoconf.  It tells the user to run autoupdate, and
> +# then outputs the replacement expansion.  We do not care
> +# about autoupdate's warning because that contains
> +# information on what to do *after* running autoupdate.
>  
>  
>  test "x$prefix" = "xNONE" && prefix=$ac_default_prefix
> @@ -2232,6 +2284,212 @@ $as_echo "$as_me: WARNING: pandoc is not available so some documentation won't b
>  fi
>  
>  
> +# If sphinx is installed, make sure to have also the dependencies to build
> +# Sphinx documentation.
> +for ac_prog in sphinx-build
> +do
> +  # Extract the first word of "$ac_prog", so it can be a program name with args.
> +set dummy $ac_prog; ac_word=$2
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
> +$as_echo_n "checking for $ac_word... " >&6; }
> +if ${ac_cv_prog_SPHINXBUILD+:} false; then :
> +  $as_echo_n "(cached) " >&6
> +else
> +  if test -n "$SPHINXBUILD"; then
> +  ac_cv_prog_SPHINXBUILD="$SPHINXBUILD" # Let the user override the test.
> +else
> +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> +for as_dir in $PATH
> +do
> +  IFS=$as_save_IFS
> +  test -z "$as_dir" && as_dir=.
> +    for ac_exec_ext in '' $ac_executable_extensions; do
> +  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
> +    ac_cv_prog_SPHINXBUILD="$ac_prog"
> +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
> +    break 2
> +  fi
> +done
> +  done
> +IFS=$as_save_IFS
> +
> +fi
> +fi
> +SPHINXBUILD=$ac_cv_prog_SPHINXBUILD
> +if test -n "$SPHINXBUILD"; then
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINXBUILD" >&5
> +$as_echo "$SPHINXBUILD" >&6; }
> +else
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +fi
> +
> +
> +  test -n "$SPHINXBUILD" && break
> +done
> +test -n "$SPHINXBUILD" || SPHINXBUILD="no"
> +
> +    if test "x$SPHINXBUILD" = xno; then :
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sphinx-build is not available so sphinx documentation \
> +won't be built" >&5
> +$as_echo "$as_me: WARNING: sphinx-build is not available so sphinx documentation \
> +won't be built" >&2;}
> +else
> +
> +            # Extract the first word of "sphinx-build", so it can be a program name with args.
> +set dummy sphinx-build; ac_word=$2
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
> +$as_echo_n "checking for $ac_word... " >&6; }
> +if ${ac_cv_path_SPHINXBUILD+:} false; then :
> +  $as_echo_n "(cached) " >&6
> +else
> +  case $SPHINXBUILD in
> +  [\\/]* | ?:[\\/]*)
> +  ac_cv_path_SPHINXBUILD="$SPHINXBUILD" # Let the user override the test with a path.
> +  ;;
> +  *)
> +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> +for as_dir in $PATH
> +do
> +  IFS=$as_save_IFS
> +  test -z "$as_dir" && as_dir=.
> +    for ac_exec_ext in '' $ac_executable_extensions; do
> +  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
> +    ac_cv_path_SPHINXBUILD="$as_dir/$ac_word$ac_exec_ext"
> +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
> +    break 2
> +  fi
> +done
> +  done
> +IFS=$as_save_IFS
> +
> +  ;;
> +esac
> +fi
> +SPHINXBUILD=$ac_cv_path_SPHINXBUILD
> +if test -n "$SPHINXBUILD"; then
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINXBUILD" >&5
> +$as_echo "$SPHINXBUILD" >&6; }
> +else
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +fi
> +
> +
> +
> +
> +    # Extract the first word of "doxygen", so it can be a program name with args.
> +set dummy doxygen; ac_word=$2
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
> +$as_echo_n "checking for $ac_word... " >&6; }
> +if ${ac_cv_path_DOXYGEN+:} false; then :
> +  $as_echo_n "(cached) " >&6
> +else
> +  case $DOXYGEN in
> +  [\\/]* | ?:[\\/]*)
> +  ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path.
> +  ;;
> +  *)
> +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> +for as_dir in $PATH
> +do
> +  IFS=$as_save_IFS
> +  test -z "$as_dir" && as_dir=.
> +    for ac_exec_ext in '' $ac_executable_extensions; do
> +  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
> +    ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
> +    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
> +    break 2
> +  fi
> +done
> +  done
> +IFS=$as_save_IFS
> +
> +  ;;
> +esac
> +fi
> +DOXYGEN=$ac_cv_path_DOXYGEN
> +if test -n "$DOXYGEN"; then
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
> +$as_echo "$DOXYGEN" >&6; }
> +else
> +  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +fi
> +
> +
> +    if ! test -x "$ac_cv_path_DOXYGEN"; then :
> +
> +        as_fn_error $? "doxygen is needed" "$LINENO" 5
> +
> +fi
> +
> +
> +    if test -z $PYTHON;
> +    then
> +        if test -z "";
> +        then
> +            PYTHON="python3"
> +        else
> +            PYTHON=""
> +        fi
> +    fi
> +    PYTHON_NAME=`basename $PYTHON`
> +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking $PYTHON_NAME module: breathe" >&5
> +$as_echo_n "checking $PYTHON_NAME module: breathe... " >&6; }
> +    $PYTHON -c "import breathe" 2>/dev/null
> +    if test $? -eq 0;
> +    then
> +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
> +$as_echo "yes" >&6; }
> +        eval HAVE_PYMOD_BREATHE=yes
> +    else
> +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +        eval HAVE_PYMOD_BREATHE=no
> +        #
> +        if test -n "yes"
> +        then
> +            as_fn_error $? "failed to find required module breathe" "$LINENO" 5
> +            exit 1
> +        fi
> +    fi
> +
> +
> +    if test -z $PYTHON;
> +    then
> +        if test -z "";
> +        then
> +            PYTHON="python3"
> +        else
> +            PYTHON=""
> +        fi
> +    fi
> +    PYTHON_NAME=`basename $PYTHON`
> +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking $PYTHON_NAME module: sphinx_rtd_theme" >&5
> +$as_echo_n "checking $PYTHON_NAME module: sphinx_rtd_theme... " >&6; }
> +    $PYTHON -c "import sphinx_rtd_theme" 2>/dev/null
> +    if test $? -eq 0;
> +    then
> +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
> +$as_echo "yes" >&6; }
> +        eval HAVE_PYMOD_SPHINX_RTD_THEME=yes
> +    else
> +        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +        eval HAVE_PYMOD_SPHINX_RTD_THEME=no
> +        #
> +        if test -n "yes"
> +        then
> +            as_fn_error $? "failed to find required module sphinx_rtd_theme" "$LINENO" 5
> +            exit 1
> +        fi
> +    fi
> +
> +
> +
> +fi
> +
>  
>  # Extract the first word of "perl", so it can be a program name with args.
>  set dummy perl; ac_word=$2
> diff --git a/docs/configure.ac b/docs/configure.ac
> index c2e5edd3b3..a2ff55f30a 100644
> --- a/docs/configure.ac
> +++ b/docs/configure.ac
> @@ -20,6 +20,7 @@ m4_include([../m4/docs_tool.m4])
>  m4_include([../m4/path_or_fail.m4])
>  m4_include([../m4/features.m4])
>  m4_include([../m4/paths.m4])
> +m4_include([../m4/ax_python_module.m4])
>  
>  AX_XEN_EXPAND_CONFIG()
>  
> @@ -29,6 +30,20 @@ AX_DOCS_TOOL_PROG([POD2HTML], [pod2html])
>  AX_DOCS_TOOL_PROG([POD2TEXT], [pod2text])
>  AX_DOCS_TOOL_PROG([PANDOC], [pandoc])
>  
> +# If sphinx is installed, make sure to have also the dependencies to build
> +# Sphinx documentation.
> +AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build], [no])
> +    AS_IF([test "x$SPHINXBUILD" = xno],
> +        [AC_MSG_WARN(sphinx-build is not available so sphinx documentation \
> +won't be built)],
> +        [
> +            AC_PATH_PROG([SPHINXBUILD], [sphinx-build])
> +            AX_DOCS_TOOL_REQ_PROG([DOXYGEN], [doxygen])
> +            AX_PYTHON_MODULE([breathe],[yes])
> +            AX_PYTHON_MODULE([sphinx_rtd_theme], [yes])
> +        ]
> +    )
> +
>  AC_ARG_VAR([PERL], [Path to Perl parser])
>  AX_PATH_PROG_OR_FAIL([PERL], [perl])


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 22:23:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 22:23:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149354.276160 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRZ2-0001XW-02; Fri, 02 Jul 2021 22:23:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149354.276160; Fri, 02 Jul 2021 22:23:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRZ1-0001XN-So; Fri, 02 Jul 2021 22:23:11 +0000
Received: by outflank-mailman (input) for mailman id 149354;
 Fri, 02 Jul 2021 22:23:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2ZMt=L2=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1lzRYz-0001TB-UK
 for xen-devel@lists.xenproject.org; Fri, 02 Jul 2021 22:23:09 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 142bdc0a-db84-11eb-83c9-12813bfff9fa;
 Fri, 02 Jul 2021 22:23:08 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id F1AD5613D8;
 Fri,  2 Jul 2021 22:23:07 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 142bdc0a-db84-11eb-83c9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625264588;
	bh=zQNj7JPmp8LSW80+gBSqlEodeUICaVTJJkxXZfv6L2I=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=BirKJ1REFub07HLbB102mTrRvf8LWj3y34qKXKdfeNv4zLO3NJtweDeDVYvBVWlRV
	 fpoOzRlon/BvfeSwbTKQu3v9Ko5/uajP43/awOp4pMtVDkhRettlJqudcCSkrOaZmY
	 rMCDfY2enO3AkhqoKi66jH61G+PfkLZrtfvSAvmAXvxNGiu7ioCwvNlMnxY7L/YIIN
	 jimb94yZV4k75ZjwtsrbYm6C5BdPrltfCp4yHQNAzz14gps9wLOrPHCtl3DGQQLyE/
	 KV2iXxdhujkkaJ7V4UJYqRnA4ZvoyQLvoLgraiIA3XH1bPm93Ddccx8LhCP5c0CBbq
	 XYjoY9WHI21iQ==
Date: Fri, 2 Jul 2021 15:23:07 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Luca Fancellu <luca.fancellu@arm.com>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, 
    Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, 
    Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH v6 7/9] docs: Change Makefile and sphinx configuration
 for doxygen
In-Reply-To: <7C3269F1-3C61-4F39-82F9-9DE4C563849B@arm.com>
Message-ID: <alpine.DEB.2.21.2107021324090.9437@sstabellini-ThinkPad-T480s>
References: <20210510084105.17108-1-luca.fancellu@arm.com> <20210510084105.17108-8-luca.fancellu@arm.com> <alpine.DEB.2.21.2106231506040.24906@sstabellini-ThinkPad-T480s> <1FC1E8DF-8AED-4ABD-BE9A-DBBD9D66EDBB@arm.com> <alpine.DEB.2.21.2107011037580.9437@sstabellini-ThinkPad-T480s>
 <7C3269F1-3C61-4F39-82F9-9DE4C563849B@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; BOUNDARY="8323329-766106159-1625257521=:9437"
Content-ID: <alpine.DEB.2.21.2107021337540.9437@sstabellini-ThinkPad-T480s>

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-766106159-1625257521=:9437
Content-Type: text/plain; CHARSET=UTF-8
Content-Transfer-Encoding: 8BIT
Content-ID: <alpine.DEB.2.21.2107021337541.9437@sstabellini-ThinkPad-T480s>

On Fri, 2 Jul 2021, Luca Fancellu wrote:
> > On 1 Jul 2021, at 18:43, Stefano Stabellini <sstabellini@kernel.org> wrote:
> > 
> > On Thu, 1 Jul 2021, Luca Fancellu wrote:
> >>> On 24 Jun 2021, at 00:33, Stefano Stabellini <sstabellini@kernel.org> wrote:
> >>> 
> >>> On Mon, 10 May 2021, Luca Fancellu wrote:
> >>>> Modify docs/Makefile to call doxygen and generate sphinx
> >>>> html documentation given the doxygen XML output.
> >>>> 
> >>>> Modify docs/conf.py sphinx configuration file to setup
> >>>> the breathe extension that works as bridge between
> >>>> sphinx and doxygen.
> >>>> 
> >>>> Add some files to the .gitignore to ignore some
> >>>> generated files for doxygen.
> >>>> 
> >>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> >>>> ---
> >>>> .gitignore    |  6 ++++++
> >>>> docs/Makefile | 42 +++++++++++++++++++++++++++++++++++++++---
> >>>> docs/conf.py  | 48 +++++++++++++++++++++++++++++++++++++++++++++---
> >>>> 3 files changed, 90 insertions(+), 6 deletions(-)
> >>>> 
> >>>> diff --git a/.gitignore b/.gitignore
> >>>> index 1c2fa1530b..d271e0ce6a 100644
> >>>> --- a/.gitignore
> >>>> +++ b/.gitignore
> >>>> @@ -58,6 +58,12 @@ docs/man7/
> >>>> docs/man8/
> >>>> docs/pdf/
> >>>> docs/txt/
> >>>> +docs/doxygen-output
> >>>> +docs/sphinx
> >>>> +docs/xen.doxyfile
> >>>> +docs/xen.doxyfile.tmp
> >>>> +docs/xen-doxygen/doxygen_include.h
> >>>> +docs/xen-doxygen/doxygen_include.h.tmp
> >>>> extras/mini-os*
> >>>> install/*
> >>>> stubdom/*-minios-config.mk
> >>>> diff --git a/docs/Makefile b/docs/Makefile
> >>>> index 8de1efb6f5..2f784c36ce 100644
> >>>> --- a/docs/Makefile
> >>>> +++ b/docs/Makefile
> >>>> @@ -17,6 +17,18 @@ TXTSRC-y := $(sort $(shell find misc -name '*.txt' -print))
> >>>> 
> >>>> PANDOCSRC-y := $(sort $(shell find designs/ features/ misc/ process/ specs/ \( -name '*.pandoc' -o -name '*.md' \) -print))
> >>>> 
> >>>> +# Directory in which the doxygen documentation is created
> >>>> +# This must be kept in sync with breathe_projects value in conf.py
> >>>> +DOXYGEN_OUTPUT = doxygen-output
> >>>> +
> >>>> +# Doxygen input headers from xen-doxygen/doxy_input.list file
> >>>> +DOXY_LIST_SOURCES != cat "xen-doxygen/doxy_input.list"
> >>>> +DOXY_LIST_SOURCES := $(realpath $(addprefix $(XEN_ROOT)/,$(DOXY_LIST_SOURCES)))
> >> 
> >> Hi Stefano,
> >> 
> >>> 
> >>> I cannot find exactly who is populating doxy_input.list. I can see it is
> >>> empty in patch #6. Does it get populated during the build?
> >> 
> >> doxy_input.list is the only file that should be modified by the developer when he/she wants to add documentation
> >> for a new file to be parsed by Doxygen, in my patch about documenting grant_tables.h you can see I add
> >> there the path “xen/include/public/grant_table.h"
> > 
> > OK, thanks. I missed that addition.
> > 
> > 
> >>> 
> >>>> +DOXY_DEPS := xen.doxyfile \
> >>>> +			 xen-doxygen/mainpage.md \
> >>>> +			 xen-doxygen/doxygen_include.h
> >>>> +
> >>>> # Documentation targets
> >>>> $(foreach i,$(MAN_SECTIONS), \
> >>>>  $(eval DOC_MAN$(i) := $(patsubst man/%.$(i),man$(i)/%.$(i), \
> >>>> @@ -46,8 +58,28 @@ all: build
> >>>> build: html txt pdf man-pages figs
> >>>> 
> >>>> .PHONY: sphinx-html
> >>>> -sphinx-html:
> >>>> -	sphinx-build -b html . sphinx/html
> >>>> +sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
> >>>> +ifneq ($(SPHINXBUILD),no)
> >>> 
> >>> This check on SPHINXBUILD is new, it wasn't there before. Why do we need
> >>> it now? We are not really changing anything in regards to Sphinx, just
> >>> adding Doxygen support. Or was it a mistake that it was missing even
> >>> before this patch?
> >> 
> >> Yes this is new, I saw that we didn’t look if sphinx was installed in the system, so now we did
> > 
> > In that case, I think anything related to SPHINXBUILD and whether sphinx
> > is installed or not, should be a separate patch at the beginning of the
> > series. It could be committed independently before the rest of the
> > series. When we get to this patch, SPHINXBUILD should be already there.
> 
> I’ve introduced SPHINXBUILD in this patch: [PATCH v6 5/9] docs: add checks to configure for sphinx and doxygen,
> In your commend do you mean that you would like it to be outside this serie and this serie to be based on top of that one?

I totally missed patches 4 and 5. Can you please CC me to the whole
series next time?

I meant as a separate patch, like you have done in patch #5. It doesn't
necessarily need to be at the beginning of the series so what you have
already done is OK.
--8323329-766106159-1625257521=:9437--


From xen-devel-bounces@lists.xenproject.org Fri Jul 02 22:30:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 02 Jul 2021 22:30:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149364.276171 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRgB-0003Rr-PZ; Fri, 02 Jul 2021 22:30:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149364.276171; Fri, 02 Jul 2021 22:30:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzRgB-0003Rk-Lk; Fri, 02 Jul 2021 22:30:35 +0000
Received: by outflank-mailman (input) for mailman id 149364;
 Fri, 02 Jul 2021 22:30:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzRgA-0003RH-Af; Fri, 02 Jul 2021 22:30:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzRgA-0002pS-3K; Fri, 02 Jul 2021 22:30:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzRg9-0003mY-RQ; Fri, 02 Jul 2021 22:30:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzRg9-0006Uh-Qs; Fri, 02 Jul 2021 22:30:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NojLvlH1NVB8CmWm4l0BaNToK+GO9YRY7D2DplensKA=; b=IpePY04y/AQwTiciFSkBvOwZzC
	llXcN4u/qodbvK/rtAnBX5i2xewQ6+G/sT8oPnlqhgmPpsp0C1awHxbIxJkFJ04+Uj6gUWf58Py7z
	lEqSbUm8uqzaAru5f5Hx7YHEBevyuYAWdl6Ha4fmn/LKcwfvnuX4Iv7hwTaXUPaUHhRw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163229-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163229: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 02 Jul 2021 22:30:33 +0000

flight 163229 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163229/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   28 days
Failing since        162368  2021-06-04 15:42:59 Z   28 days   76 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    0 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 03:25:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 03:25:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149379.276185 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzWH0-0004wa-Mp; Sat, 03 Jul 2021 03:24:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149379.276185; Sat, 03 Jul 2021 03:24:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzWH0-0004wT-Im; Sat, 03 Jul 2021 03:24:54 +0000
Received: by outflank-mailman (input) for mailman id 149379;
 Sat, 03 Jul 2021 03:24:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzWGy-0004wJ-Lf; Sat, 03 Jul 2021 03:24:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzWGy-0000xF-Dc; Sat, 03 Jul 2021 03:24:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzWGy-00040Z-3c; Sat, 03 Jul 2021 03:24:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzWGy-0007AV-38; Sat, 03 Jul 2021 03:24:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=IdE53JjzXI2sRcR+kZUW30o7yRiGX69hnKFgJZVFbtY=; b=y4tIWkFlB6TFBiw/MImDo7mJkN
	mDtIO/0W4eJWJbHV4bZ1li3mL8usyQXyYcmQKHRehVVbhPH/n9kfb8Up9nI1yDfP1jqMDo175UjJJ
	l5y4Cv1jeb4poOnlio1zf1Cteyb5AE4SnR1fWqj32356o7v09yHIiBDZ6S2bJHt/AhlU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163228-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163228: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-i386-xl-xsm:guest-localmigrate/x10:fail:heisenbug
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start.2:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 03:24:52 +0000

flight 163228 qemu-mainline real [real]
flight 163234 qemu-mainline real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163228/
http://logs.test-lab.xenproject.org/osstest/logs/163234/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 152631
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1       fail REGR. vs. 152631

Tests which are failing intermittently (not blocking):
 test-amd64-i386-xl-xsm    20 guest-localmigrate/x10 fail pass in 163234-retest

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-rtds     19 guest-start.2           fail blocked in 152631
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  316 days
Failing since        152659  2020-08-21 14:07:39 Z  315 days  579 attempts
Testing same since   163228  2021-07-02 17:08:27 Z    0 days    1 attempts

------------------------------------------------------------
554 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 182071 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 05:55:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 05:55:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149388.276199 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzYcq-0001Z9-3C; Sat, 03 Jul 2021 05:55:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149388.276199; Sat, 03 Jul 2021 05:55:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzYcp-0001Z2-TW; Sat, 03 Jul 2021 05:55:35 +0000
Received: by outflank-mailman (input) for mailman id 149388;
 Sat, 03 Jul 2021 05:55:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=qA5B=L3=kernel.org=nathan@srs-us1.protection.inumbo.net>)
 id 1lzYco-0001Yw-9z
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 05:55:34 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 431d9276-dbc3-11eb-83d5-12813bfff9fa;
 Sat, 03 Jul 2021 05:55:26 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 74FC461424;
 Sat,  3 Jul 2021 05:55:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 431d9276-dbc3-11eb-83d5-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625291725;
	bh=HbboShhJw0f/xTnUHQfXIFinz/CiXs1HWoUcY3xQXJE=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=I0O6LGfdCvtS7x+XbgKrTkXDiWa9+ydNpeJ+Hpd6thPwMt/pojOE7wFc9EaMa5s/7
	 fzphfhgg11VE20oFX64ca0R8nMN+8vPQbIU1BgmW4rl6XbnuFKZDhNjV8cRQqP0aY/
	 FYsbmLfYPBUSfZ61FOTt8DbsSGB4+VMnlmpSxUQAttiKVwK+o8pXqyAD2ddyoHmIgj
	 0e7EjrXmY1/a7Nazd1WwuwVUez38Y6EoEwEcX6CsBiVsyBW0zgITA8LugP+eVTC2Bd
	 ov/kHYh9GLPWR8A0vxWjZQwwD5frujwFh8tpknLuguSreNmEDXPVqcNA1c0N8kxgBn
	 Wddj3pL7y93qw==
Date: Fri, 2 Jul 2021 22:55:17 -0700
From: Nathan Chancellor <nathan@kernel.org>
To: Robin Murphy <robin.murphy@arm.com>
Cc: Will Deacon <will@kernel.org>, Claire Chang <tientzu@chromium.org>,
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-7-tientzu@chromium.org>
 <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="IzhtKCoR/XhZJq5z"
Content-Disposition: inline
In-Reply-To: <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>


--IzhtKCoR/XhZJq5z
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi Will and Robin,

On Fri, Jul 02, 2021 at 04:13:50PM +0100, Robin Murphy wrote:
> On 2021-07-02 14:58, Will Deacon wrote:
> > Hi Nathan,
> > 
> > On Thu, Jul 01, 2021 at 12:52:20AM -0700, Nathan Chancellor wrote:
> > > On 7/1/2021 12:40 AM, Will Deacon wrote:
> > > > On Wed, Jun 30, 2021 at 08:56:51AM -0700, Nathan Chancellor wrote:
> > > > > On Wed, Jun 30, 2021 at 12:43:48PM +0100, Will Deacon wrote:
> > > > > > On Wed, Jun 30, 2021 at 05:17:27PM +0800, Claire Chang wrote:
> > > > > > > `BUG: unable to handle page fault for address: 00000000003a8290` and
> > > > > > > the fact it crashed at `_raw_spin_lock_irqsave` look like the memory
> > > > > > > (maybe dev->dma_io_tlb_mem) was corrupted?
> > > > > > > The dev->dma_io_tlb_mem should be set here
> > > > > > > (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/pci/probe.c#n2528)
> > > > > > > through device_initialize.
> > > > > > 
> > > > > > I'm less sure about this. 'dma_io_tlb_mem' should be pointing at
> > > > > > 'io_tlb_default_mem', which is a page-aligned allocation from memblock.
> > > > > > The spinlock is at offset 0x24 in that structure, and looking at the
> > > > > > register dump from the crash:
> > > > > > 
> > > > > > Jun 29 18:28:42 hp-4300G kernel: RSP: 0018:ffffadb4013db9e8 EFLAGS: 00010006
> > > > > > Jun 29 18:28:42 hp-4300G kernel: RAX: 00000000003a8290 RBX: 0000000000000000 RCX: ffff8900572ad580
> > > > > > Jun 29 18:28:42 hp-4300G kernel: RDX: ffff89005653f024 RSI: 00000000000c0000 RDI: 0000000000001d17
> > > > > > Jun 29 18:28:42 hp-4300G kernel: RBP: 000000000a20d000 R08: 00000000000c0000 R09: 0000000000000000
> > > > > > Jun 29 18:28:42 hp-4300G kernel: R10: 000000000a20d000 R11: ffff89005653f000 R12: 0000000000000212
> > > > > > Jun 29 18:28:42 hp-4300G kernel: R13: 0000000000001000 R14: 0000000000000002 R15: 0000000000200000
> > > > > > Jun 29 18:28:42 hp-4300G kernel: FS:  00007f1f8898ea40(0000) GS:ffff890057280000(0000) knlGS:0000000000000000
> > > > > > Jun 29 18:28:42 hp-4300G kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > > > > > Jun 29 18:28:42 hp-4300G kernel: CR2: 00000000003a8290 CR3: 00000001020d0000 CR4: 0000000000350ee0
> > > > > > Jun 29 18:28:42 hp-4300G kernel: Call Trace:
> > > > > > Jun 29 18:28:42 hp-4300G kernel:  _raw_spin_lock_irqsave+0x39/0x50
> > > > > > Jun 29 18:28:42 hp-4300G kernel:  swiotlb_tbl_map_single+0x12b/0x4c0
> > > > > > 
> > > > > > Then that correlates with R11 holding the 'dma_io_tlb_mem' pointer and
> > > > > > RDX pointing at the spinlock. Yet RAX is holding junk :/
> > > > > > 
> > > > > > I agree that enabling KASAN would be a good idea, but I also think we
> > > > > > probably need to get some more information out of swiotlb_tbl_map_single()
> > > > > > to see see what exactly is going wrong in there.
> > > > > 
> > > > > I can certainly enable KASAN and if there is any debug print I can add
> > > > > or dump anything, let me know!
> > > > 
> > > > I bit the bullet and took v5.13 with swiotlb/for-linus-5.14 merged in, built
> > > > x86 defconfig and ran it on my laptop. However, it seems to work fine!
> > > > 
> > > > Please can you share your .config?
> > > 
> > > Sure thing, it is attached. It is just Arch Linux's config run through
> > > olddefconfig. The original is below in case you need to diff it.
> > > 
> > > https://raw.githubusercontent.com/archlinux/svntogit-packages/9045405dc835527164f3034b3ceb9a67c7a53cd4/trunk/config
> > > 
> > > If there is anything more that I can provide, please let me know.
> > 
> > I eventually got this booting (for some reason it was causing LD to SEGV
> > trying to link it for a while...) and sadly it works fine on my laptop. Hmm.

Seems like it might be something specific to the amdgpu module?

> > Did you manage to try again with KASAN?

Yes, it took a few times to reproduce the issue but I did manage to get
a dmesg, please find it attached. I build from commit 7d31f1c65cc9 ("swiotlb:
fix implicit debugfs declarations") in Konrad's tree.

> > It might also be worth taking the IOMMU out of the equation, since that
> > interfaces differently with SWIOTLB and I couldn't figure out the code path
> > from the log you provided. What happens if you boot with "amd_iommu=off
> > swiotlb=force"?
> 
> Oh, now there's a thing... the chat from the IOMMU API in the boot log
> implies that the IOMMU *should* be in the picture - we see that default
> domains are IOMMU_DOMAIN_DMA default and the GPU 0000:0c:00.0 was added to a
> group. That means dev->dma_ops should be set and DMA API calls should be
> going through iommu-dma, yet the callstack in the crash says we've gone
> straight from dma_map_page_attrs() to swiotlb_map(), implying the inline
> dma_direct_map_page() path.
> 
> If dev->dma_ops didn't look right in the first place, it's perhaps less
> surprising that dev->dma_io_tlb_mem might be wild as well. It doesn't seem
> plausible that we should have a race between initialising the device and
> probing its driver, so maybe the whole dev pointer is getting trampled
> earlier in the callchain (or is fundamentally wrong to begin with, but from
> a quick skim of the amdgpu code it did look like adev->dev and adev->pdev
> are appropriately set early on by amdgpu_pci_probe()).
> 
> > (although word of warning here: i915 dies horribly on my laptop if I pass
> > swiotlb=force, even with the distro 5.10 kernel)
> 
> FWIW I'd imagine you probably need to massively increase the SWIOTLB buffer
> size to have hope of that working.

Is it worth trying this still then?

Cheers,
Nathan

--IzhtKCoR/XhZJq5z
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="7d31f1c65cc9-kasan.log"

[    0.000000] Linux version 5.12.0-rc3-debug (nathan@archlinux-ax161) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 2.36.1) #1 SMP PREEMPT Fri Jul 2 22:22:23 MST 2021
[    0.000000] Command line: initrd=\amd-ucode.img initrd=\initramfs-linux-mainline-llvm.img root=PARTUUID=8680aa0c-cf09-4a69-8cf3-970478040ee7 rw intel_pstate=no_hwp debug ignore_loglevel earlyprintk=efi,keep log_buf_len=16M
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'compacted' format.
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000009c0ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000009c10000-0x0000000009ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000000a000000-0x000000000a1fffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000a200000-0x000000000a20cfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000000a20d000-0x000000000affffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000b000000-0x000000000b01ffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000000b020000-0x00000000b838ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000b8390000-0x00000000b86c5fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000b86c6000-0x00000000b8721fff] ACPI data
[    0.000000] BIOS-e820: [mem 0x00000000b8722000-0x00000000b8a14fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000b8a15000-0x00000000badfefff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000badff000-0x00000000bbffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000bc000000-0x00000000bdffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000bf000000-0x00000000bfffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fd200000-0x00000000fd2fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fd600000-0x00000000fd6fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fea00000-0x00000000fea0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000feb80000-0x00000000fec01fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec10000-0x00000000fec10fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec30000-0x00000000fec30fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed00000-0x00000000fed00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed40000-0x00000000fed44fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed80000-0x00000000fed8ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fedc2000-0x00000000fedcffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fedd4000-0x00000000fedd5fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021f37ffff] usable
[    0.000000] BIOS-e820: [mem 0x000000021f380000-0x000000023fffffff] reserved
[    0.000000] intel_pstate: HWP disabled
[    0.000000] printk: debug: ignoring loglevel setting.
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] e820: update [mem 0xb4c66018-0xb4c73457] usable ==> usable
[    0.000000] e820: update [mem 0xb4c66018-0xb4c73457] usable ==> usable
[    0.000000] extended physical RAM map:
[    0.000000] reserve setup_data: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] reserve setup_data: [mem 0x00000000000a0000-0x00000000000fffff] reserved
[    0.000000] reserve setup_data: [mem 0x0000000000100000-0x0000000009c0ffff] usable
[    0.000000] reserve setup_data: [mem 0x0000000009c10000-0x0000000009ffffff] reserved
[    0.000000] reserve setup_data: [mem 0x000000000a000000-0x000000000a1fffff] usable
[    0.000000] reserve setup_data: [mem 0x000000000a200000-0x000000000a20cfff] ACPI NVS
[    0.000000] reserve setup_data: [mem 0x000000000a20d000-0x000000000affffff] usable
[    0.000000] reserve setup_data: [mem 0x000000000b000000-0x000000000b01ffff] reserved
[    0.000000] reserve setup_data: [mem 0x000000000b020000-0x00000000b4c66017] usable
[    0.000000] reserve setup_data: [mem 0x00000000b4c66018-0x00000000b4c73457] usable
[    0.000000] reserve setup_data: [mem 0x00000000b4c73458-0x00000000b838ffff] usable
[    0.000000] reserve setup_data: [mem 0x00000000b8390000-0x00000000b86c5fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000b86c6000-0x00000000b8721fff] ACPI data
[    0.000000] reserve setup_data: [mem 0x00000000b8722000-0x00000000b8a14fff] ACPI NVS
[    0.000000] reserve setup_data: [mem 0x00000000b8a15000-0x00000000badfefff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000badff000-0x00000000bbffffff] usable
[    0.000000] reserve setup_data: [mem 0x00000000bc000000-0x00000000bdffffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000bf000000-0x00000000bfffffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fd200000-0x00000000fd2fffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fd600000-0x00000000fd6fffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fea00000-0x00000000fea0ffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000feb80000-0x00000000fec01fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fec10000-0x00000000fec10fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fec30000-0x00000000fec30fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed00000-0x00000000fed00fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed40000-0x00000000fed44fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed80000-0x00000000fed8ffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fedc2000-0x00000000fedcffff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fedd4000-0x00000000fedd5fff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] reserve setup_data: [mem 0x0000000100000000-0x000000021f37ffff] usable
[    0.000000] reserve setup_data: [mem 0x000000021f380000-0x000000023fffffff] reserved
[    0.000000] efi: EFI v2.70 by American Megatrends
[    0.000000] efi: ACPI=0xb8721000 ACPI 2.0=0xb8721014 TPMFinalLog=0xb89c8000 SMBIOS=0xbac0f000 SMBIOS 3.0=0xbac0e000 MEMATTR=0xb5184018 ESRT=0xb6dde918 RNG=0xbac3e998 TPMEventLog=0xb5185018 
[    0.000000] efi: seeding entropy pool
[    0.000000] SMBIOS 3.3.0 present.
[    0.000000] DMI: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 3793.113 MHz processor
[    0.000282] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000289] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000312] last_pfn = 0x21f380 max_arch_pfn = 0x400000000
[    0.000759] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  
[    0.001796] e820: update [mem 0xc0000000-0xffffffff] usable ==> reserved
[    0.001811] last_pfn = 0xbc000 max_arch_pfn = 0x400000000
[    0.006400] esrt: Reserving ESRT space from 0x00000000b6dde918 to 0x00000000b6dde950.
[    0.006423] e820: update [mem 0xb6dde000-0xb6ddefff] usable ==> reserved
[    0.006833] check: Scanning 1 areas for low memory corruption
[    0.006842] Using GB pages for direct mapping
[    0.028975] printk: log_buf_len: 16777216 bytes
[    0.028982] printk: early log buf free: 123936(94%)
[    0.028986] Secure boot disabled
[    0.028988] RAMDISK: [mem 0x7f7c7000-0x7fff5fff]
[    0.029012] ACPI: Early table checksum verification disabled
[    0.029022] ACPI: RSDP 0x00000000B8721014 000024 (v02 HPQOEM)
[    0.029032] ACPI: XSDT 0x00000000B8720728 0000EC (v01 HPQOEM SLIC-CPC 01072009 AMI  01000013)
[    0.029045] ACPI: FACP 0x00000000B870F000 000114 (v06 HPQOEM SLIC-CPC 01072009 AMI  00010013)
[    0.029059] ACPI: DSDT 0x00000000B86FE000 01050C (v02 HPQOEM SLIC-CPC 01072009 INTL 20120913)
[    0.029068] ACPI: FACS 0x00000000B89F8000 000040
[    0.029076] ACPI: MSDM 0x00000000B871F000 000055 (v03 HPQOEM SLIC-CPC 01072009 AMI  01000013)
[    0.029085] ACPI: SSDT 0x00000000B871E000 000050 (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029093] ACPI: IVRS 0x00000000B871D000 0000D0 (v02 HPQOEM SLIC-CPC 00000001 AMD  00000000)
[    0.029102] ACPI: SSDT 0x00000000B8715000 007229 (v02 HPQOEM SLIC-CPC 00000002 MSFT 04000000)
[    0.029110] ACPI: SSDT 0x00000000B8711000 003BA1 (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029119] ACPI: SSDT 0x00000000B8710000 000094 (v02 HPQOEM SLIC-CPC 01072009 AMI  01072009)
[    0.029128] ACPI: FIDT 0x00000000B86FD000 00009C (v01 HPQOEM SLIC-CPC 01072009 AMI  00010013)
[    0.029136] ACPI: MCFG 0x00000000B86FC000 00003C (v01 HPQOEM SLIC-CPC 01072009 MSFT 00010013)
[    0.029145] ACPI: HPET 0x00000000B86FB000 000038 (v01 HPQOEM SLIC-CPC 01072009 AMI  00000005)
[    0.029154] ACPI: VFCT 0x00000000B86ED000 00D484 (v01 HPQOEM SLIC-CPC 00000001 AMD  31504F47)
[    0.029162] ACPI: BGRT 0x00000000B86EC000 000038 (v01 HPQOEM SLIC-CPC 01072009 AMI  00010013)
[    0.029171] ACPI: TPM2 0x00000000B86EB000 00004C (v04 HPQOEM SLIC-CPC 00000001 AMI  00000000)
[    0.029179] ACPI: SSDT 0x00000000B86E9000 001CE4 (v02 HPQOEM SLIC-CPC 00000001 AMD  00000001)
[    0.029188] ACPI: CRAT 0x00000000B86E8000 0007E8 (v01 HPQOEM SLIC-CPC 00000001 AMD  00000001)
[    0.029197] ACPI: CDIT 0x00000000B86E7000 000029 (v01 HPQOEM SLIC-CPC 00000001 AMD  00000001)
[    0.029205] ACPI: SSDT 0x00000000B86E6000 000D37 (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029214] ACPI: SSDT 0x00000000B86E4000 0010A5 (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029222] ACPI: SSDT 0x00000000B86E0000 00333E (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029231] ACPI: SSDT 0x00000000B86DF000 0000BF (v01 HPQOEM SLIC-CPC 00001000 INTL 20120913)
[    0.029240] ACPI: WSMT 0x00000000B86DE000 000028 (v01 HPQOEM SLIC-CPC 01072009 AMI  00010013)
[    0.029248] ACPI: APIC 0x00000000B86DD000 00015E (v03 HPQOEM SLIC-CPC 01072009 AMI  00010013)
[    0.029257] ACPI: SSDT 0x00000000B86DC000 000517 (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029266] ACPI: SSDT 0x00000000B86DA000 0010AF (v01 HPQOEM SLIC-CPC 00000001 INTL 20120913)
[    0.029274] ACPI: FPDT 0x00000000B86D9000 000044 (v01 HPQOEM SLIC-CPC 01072009 AMI  01000013)
[    0.029288] ACPI: Local APIC address 0xfee00000
[    0.029611] No NUMA configuration found
[    0.029614] Faking a node at [mem 0x0000000000000000-0x000000021f37ffff]
[    0.029626] NODE_DATA(0) allocated [mem 0x21ab7c000-0x21ab7ffff]
[    0.029690] Zone ranges:
[    0.029693]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.029698]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.029702]   Normal   [mem 0x0000000100000000-0x000000021f37ffff]
[    0.029707]   Device   empty
[    0.029710] Movable zone start for each node
[    0.029713] Early memory node ranges
[    0.029715]   node   0: [mem 0x0000000000001000-0x000000000009ffff]
[    0.029718]   node   0: [mem 0x0000000000100000-0x0000000009c0ffff]
[    0.029722]   node   0: [mem 0x000000000a000000-0x000000000a1fffff]
[    0.029725]   node   0: [mem 0x000000000a20d000-0x000000000affffff]
[    0.029728]   node   0: [mem 0x000000000b020000-0x00000000b838ffff]
[    0.029732]   node   0: [mem 0x00000000badff000-0x00000000bbffffff]
[    0.029735]   node   0: [mem 0x0000000100000000-0x000000021f37ffff]
[    0.029740] Initmem setup node 0 [mem 0x0000000000001000-0x000000021f37ffff]
[    0.029744] On node 0 totalpages: 1934483
[    0.029748]   DMA zone: 64 pages used for memmap
[    0.029751]   DMA zone: 26 pages reserved
[    0.029754]   DMA zone: 3999 pages, LIFO batch:0
[    0.032133]   DMA zone: 28769 pages in unavailable ranges
[    0.032137]   DMA32 zone: 11782 pages used for memmap
[    0.032140]   DMA32 zone: 754036 pages, LIFO batch:63
[    0.076694]   DMA32 zone: 28300 pages in unavailable ranges
[    0.076706]   Normal zone: 18382 pages used for memmap
[    0.076709]   Normal zone: 1176448 pages, LIFO batch:63
[    0.143245]   Normal zone: 3200 pages in unavailable ranges
[    0.274167] kasan: KernelAddressSanitizer initialized
[    0.274679] ACPI: PM-Timer IO Port: 0x808
[    0.274683] ACPI: Local APIC address 0xfee00000
[    0.274697] ACPI: LAPIC_NMI (acpi_id[0xff] high edge lint[0x1])
[    0.274714] IOAPIC[0]: apic_id 9, version 33, address 0xfec00000, GSI 0-23
[    0.274723] IOAPIC[1]: apic_id 10, version 33, address 0xfec01000, GSI 24-55
[    0.274729] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.274733] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
[    0.274738] ACPI: IRQ0 used by override.
[    0.274742] ACPI: IRQ9 used by override.
[    0.274747] Using ACPI (MADT) for SMP configuration information
[    0.274751] ACPI: HPET id: 0x10228201 base: 0xfed00000
[    0.274779] e820: update [mem 0xb5158000-0xb517ffff] usable ==> reserved
[    0.274812] smpboot: Allowing 32 CPUs, 24 hotplug CPUs
[    0.274935] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.274943] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]
[    0.274951] PM: hibernation: Registered nosave memory: [mem 0x09c10000-0x09ffffff]
[    0.274959] PM: hibernation: Registered nosave memory: [mem 0x0a200000-0x0a20cfff]
[    0.274967] PM: hibernation: Registered nosave memory: [mem 0x0b000000-0x0b01ffff]
[    0.274975] PM: hibernation: Registered nosave memory: [mem 0xb4c66000-0xb4c66fff]
[    0.274983] PM: hibernation: Registered nosave memory: [mem 0xb4c73000-0xb4c73fff]
[    0.274991] PM: hibernation: Registered nosave memory: [mem 0xb5158000-0xb517ffff]
[    0.274999] PM: hibernation: Registered nosave memory: [mem 0xb6dde000-0xb6ddefff]
[    0.275007] PM: hibernation: Registered nosave memory: [mem 0xb8390000-0xb86c5fff]
[    0.275010] PM: hibernation: Registered nosave memory: [mem 0xb86c6000-0xb8721fff]
[    0.275013] PM: hibernation: Registered nosave memory: [mem 0xb8722000-0xb8a14fff]
[    0.275016] PM: hibernation: Registered nosave memory: [mem 0xb8a15000-0xbadfefff]
[    0.275024] PM: hibernation: Registered nosave memory: [mem 0xbc000000-0xbdffffff]
[    0.275028] PM: hibernation: Registered nosave memory: [mem 0xbe000000-0xbeffffff]
[    0.275031] PM: hibernation: Registered nosave memory: [mem 0xbf000000-0xbfffffff]
[    0.275034] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0xefffffff]
[    0.275037] PM: hibernation: Registered nosave memory: [mem 0xf0000000-0xf7ffffff]
[    0.275040] PM: hibernation: Registered nosave memory: [mem 0xf8000000-0xfd1fffff]
[    0.275043] PM: hibernation: Registered nosave memory: [mem 0xfd200000-0xfd2fffff]
[    0.275046] PM: hibernation: Registered nosave memory: [mem 0xfd300000-0xfd5fffff]
[    0.275049] PM: hibernation: Registered nosave memory: [mem 0xfd600000-0xfd6fffff]
[    0.275052] PM: hibernation: Registered nosave memory: [mem 0xfd700000-0xfe9fffff]
[    0.275055] PM: hibernation: Registered nosave memory: [mem 0xfea00000-0xfea0ffff]
[    0.275058] PM: hibernation: Registered nosave memory: [mem 0xfea10000-0xfeb7ffff]
[    0.275061] PM: hibernation: Registered nosave memory: [mem 0xfeb80000-0xfec01fff]
[    0.275064] PM: hibernation: Registered nosave memory: [mem 0xfec02000-0xfec0ffff]
[    0.275067] PM: hibernation: Registered nosave memory: [mem 0xfec10000-0xfec10fff]
[    0.275070] PM: hibernation: Registered nosave memory: [mem 0xfec11000-0xfec2ffff]
[    0.275073] PM: hibernation: Registered nosave memory: [mem 0xfec30000-0xfec30fff]
[    0.275076] PM: hibernation: Registered nosave memory: [mem 0xfec31000-0xfecfffff]
[    0.275079] PM: hibernation: Registered nosave memory: [mem 0xfed00000-0xfed00fff]
[    0.275082] PM: hibernation: Registered nosave memory: [mem 0xfed01000-0xfed3ffff]
[    0.275085] PM: hibernation: Registered nosave memory: [mem 0xfed40000-0xfed44fff]
[    0.275088] PM: hibernation: Registered nosave memory: [mem 0xfed45000-0xfed7ffff]
[    0.275091] PM: hibernation: Registered nosave memory: [mem 0xfed80000-0xfed8ffff]
[    0.275095] PM: hibernation: Registered nosave memory: [mem 0xfed90000-0xfedc1fff]
[    0.275098] PM: hibernation: Registered nosave memory: [mem 0xfedc2000-0xfedcffff]
[    0.275101] PM: hibernation: Registered nosave memory: [mem 0xfedd0000-0xfedd3fff]
[    0.275104] PM: hibernation: Registered nosave memory: [mem 0xfedd4000-0xfedd5fff]
[    0.275107] PM: hibernation: Registered nosave memory: [mem 0xfedd6000-0xfeffffff]
[    0.275110] PM: hibernation: Registered nosave memory: [mem 0xff000000-0xffffffff]
[    0.275116] [mem 0xc0000000-0xefffffff] available for PCI devices
[    0.275120] Booting paravirtualized kernel on bare hardware
[    0.275125] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6370452778343963 ns
[    0.283746] setup_percpu: NR_CPUS:320 nr_cpumask_bits:320 nr_cpu_ids:32 nr_node_ids:1
[    0.285877] percpu: Embedded 64 pages/cpu s225280 r8192 d28672 u262144
[    0.285919] pcpu-alloc: s225280 r8192 d28672 u262144 alloc=1*2097152
[    0.285926] pcpu-alloc: [0] 00 01 02 03 04 05 06 07 [0] 08 09 10 11 12 13 14 15 
[    0.285954] pcpu-alloc: [0] 16 17 18 19 20 21 22 23 [0] 24 25 26 27 28 29 30 31 
[    0.286068] Built 1 zonelists, mobility grouping on.  Total pages: 1904229
[    0.286072] Policy zone: Normal
[    0.286075] Kernel command line: initrd=\amd-ucode.img initrd=\initramfs-linux-mainline-llvm.img root=PARTUUID=8680aa0c-cf09-4a69-8cf3-970478040ee7 rw intel_pstate=no_hwp debug ignore_loglevel earlyprintk=efi,keep log_buf_len=16M
[    0.287383] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)
[    0.288005] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[    0.288283] mem auto-init: stack:off, heap alloc:on, heap free:off
[    0.487941] Memory: 6325388K/7737932K available (20488K kernel code, 7278K rwdata, 8472K rodata, 2012K init, 5244K bss, 1412288K reserved, 0K cma-reserved)
[    0.487959] random: get_random_u64 called from __kmem_cache_create+0x2a/0x540 with crng_init=0
[    0.488611] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=32, Nodes=1
[    0.488656] ftrace: allocating 41984 entries in 165 pages
[    0.513537] ftrace: allocated 164 pages with 3 groups
[    0.514222] rcu: Preemptible hierarchical RCU implementation.
[    0.514225] rcu: 	RCU dyntick-idle grace-period acceleration is enabled.
[    0.514228] rcu: 	RCU restricting CPUs from NR_CPUS=320 to nr_cpu_ids=32.
[    0.514230] rcu: 	RCU priority boosting: priority 1 delay 500 ms.
[    0.514234] 	Trampoline variant of Tasks RCU enabled.
[    0.514236] 	Rude variant of Tasks RCU enabled.
[    0.514238] 	Tracing variant of Tasks RCU enabled.
[    0.514240] rcu: RCU calculated value of scheduler-enlistment delay is 30 jiffies.
[    0.514243] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=32
[    0.530610] NR_IRQS: 20736, nr_irqs: 1224, preallocated irqs: 16
[    0.531305] Console: colour dummy device 80x25
[    0.532581] printk: console [tty0] enabled
[    0.532672] ACPI: Core revision 20210105
[    0.534075] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 133484873504 ns
[    0.534108] APIC: Switch to symmetric I/O mode setup
[    0.536014] Switched APIC routing to physical flat.
[    0.536980] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.550788] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x6d59da3440c, max_idle_ns: 881590460744 ns
[    0.550813] Calibrating delay loop (skipped), value calculated using timer frequency.. 7589.31 BogoMIPS (lpj=12643710)
[    0.550826] pid_max: default: 32768 minimum: 301
[    0.560533] LSM: Security Framework initializing
[    0.560572] Yama: becoming mindful.
[    0.560704] Mount-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.560737] Mountpoint-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.561938] x86/cpu: User Mode Instruction Prevention (UMIP) activated
[    0.562014] LVT offset 1 assigned for vector 0xf9
[    0.562063] LVT offset 2 assigned for vector 0xf4
[    0.562083] Last level iTLB entries: 4KB 1024, 2MB 1024, 4MB 512
[    0.562090] Last level dTLB entries: 4KB 2048, 2MB 2048, 4MB 1024, 1GB 0
[    0.562103] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization
[    0.562113] Spectre V2 : Mitigation: Full AMD retpoline
[    0.562119] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch
[    0.562127] Spectre V2 : Enabling Restricted Speculation for firmware calls
[    0.562134] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier
[    0.562143] Spectre V2 : User space: Mitigation: STIBP via seccomp and prctl
[    0.562151] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp
[    0.562517] Freeing SMP alternatives memory: 32K
[    0.670524] smpboot: CPU0: AMD Ryzen 3 4300G with Radeon Graphics (family: 0x17, model: 0x60, stepping: 0x1)
[    0.670806] Performance Events: Fam17h+ core perfctr, AMD PMU driver.
[    0.670806] ... version:                0
[    0.670806] ... bit width:              48
[    0.670806] ... generic registers:      6
[    0.670806] ... value mask:             0000ffffffffffff
[    0.670806] ... max period:             00007fffffffffff
[    0.670806] ... fixed-purpose events:   0
[    0.670806] ... event mask:             000000000000003f
[    0.670806] rcu: Hierarchical SRCU implementation.
[    0.670898] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
[    0.672692] smp: Bringing up secondary CPUs ...
[    0.673345] x86: Booting SMP configuration:
[    0.673351] .... node  #0, CPUs:        #1  #2  #3  #4  #5  #6  #7
[    0.693536] smp: Brought up 1 node, 8 CPUs
[    0.693536] smpboot: Max logical packages: 4
[    0.693536] smpboot: Total of 8 processors activated (60714.55 BogoMIPS)
[    0.695830] devtmpfs: initialized
[    0.695830] x86/mm: Memory block size: 128MB
[    0.705546] PM: Registering ACPI NVS region [mem 0x0a200000-0x0a20cfff] (53248 bytes)
[    0.705546] PM: Registering ACPI NVS region [mem 0xb8722000-0xb8a14fff] (3092480 bytes)
[    0.707584] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6370867519511994 ns
[    0.707638] futex hash table entries: 8192 (order: 7, 524288 bytes, linear)
[    0.708029] pinctrl core: initialized pinctrl subsystem
[    0.708720] PM: RTC time: 05:52:33, date: 2021-07-03
[    0.709499] NET: Registered protocol family 16
[    0.710265] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[    0.710411] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.710565] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.710649] audit: initializing netlink subsys (disabled)
[    0.710823] audit: type=2000 audit(1625291553.176:1): state=initialized audit_enabled=0 res=1
[    0.711826] thermal_sys: Registered thermal governor 'fair_share'
[    0.711829] thermal_sys: Registered thermal governor 'bang_bang'
[    0.711837] thermal_sys: Registered thermal governor 'step_wise'
[    0.711842] thermal_sys: Registered thermal governor 'user_space'
[    0.711848] thermal_sys: Registered thermal governor 'power_allocator'
[    0.711909] cpuidle: using governor ladder
[    0.711909] cpuidle: using governor menu
[    0.711909] ACPI: bus type PCI registered
[    0.711909] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.711909] PCI: MMCONFIG for domain 0000 [bus 00-7f] at [mem 0xf0000000-0xf7ffffff] (base 0xf0000000)
[    0.711909] PCI: MMCONFIG at [mem 0xf0000000-0xf7ffffff] reserved in E820
[    0.719382] PCI: Using configuration type 1 for base access
[    0.734924] Kprobes globally optimized
[    0.734949] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    0.734949] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.738422] fbcon: Taking over console
[    0.738518] ACPI: Added _OSI(Module Device)
[    0.738524] ACPI: Added _OSI(Processor Device)
[    0.738529] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.738534] ACPI: Added _OSI(Processor Aggregator Device)
[    0.738545] ACPI: Added _OSI(Linux-Dell-Video)
[    0.738555] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
[    0.738565] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)
[    1.267709] ACPI: 12 ACPI AML tables successfully acquired and loaded
[    1.300337] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    1.393616] ACPI: EC: EC started
[    1.393628] ACPI: EC: interrupt blocked
[    1.393658] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    1.393669] ACPI: \_SB_.PCI0.SBRG.EC0_: Boot DSDT EC used to handle transactions
[    1.393680] ACPI: Interpreter enabled
[    1.393805] ACPI: (supports S0 S3 S4 S5)
[    1.393811] ACPI: Using IOAPIC for interrupt routing
[    1.397606] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    1.407707] ACPI: Enabled 4 GPEs in block 00 to 1F
[    1.658446] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[    1.658486] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI EDR HPX-Type3]
[    1.664502] acpi PNP0A08:00: _OSC: platform does not support [SHPCHotplug AER LTR DPC]
[    1.670343] acpi PNP0A08:00: _OSC: OS now controls [PCIeHotplug PME PCIeCapability]
[    1.670482] acpi PNP0A08:00: [Firmware Info]: MMCONFIG for domain 0000 [bus 00-7f] only partially covers this bridge
[    1.680552] PCI host bridge to bus 0000:00
[    1.680564] pci_bus 0000:00: root bus resource [io  0x0000-0x03af window]
[    1.680577] pci_bus 0000:00: root bus resource [io  0x03e0-0x0cf7 window]
[    1.680588] pci_bus 0000:00: root bus resource [io  0x03b0-0x03df window]
[    1.680599] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    1.680610] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    1.680623] pci_bus 0000:00: root bus resource [mem 0x000c0000-0x000dffff window]
[    1.680635] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfec2ffff window]
[    1.680647] pci_bus 0000:00: root bus resource [mem 0xfee00000-0xffffffff window]
[    1.680660] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.680766] pci 0000:00:00.0: [1022:1630] type 00 class 0x060000
[    1.682372] pci 0000:00:00.2: [1022:1631] type 00 class 0x080600
[    1.683965] pci 0000:00:01.0: [1022:1632] type 00 class 0x060000
[    1.685111] pci 0000:00:02.0: [1022:1632] type 00 class 0x060000
[    1.686247] pci 0000:00:02.1: [1022:1634] type 01 class 0x060400
[    1.686276] pci 0000:00:02.1: enabling Extended Tags
[    1.686363] pci 0000:00:02.1: PME# supported from D0 D3hot D3cold
[    1.689305] pci 0000:00:02.2: [1022:1634] type 01 class 0x060400
[    1.689335] pci 0000:00:02.2: enabling Extended Tags
[    1.689421] pci 0000:00:02.2: PME# supported from D0 D3hot D3cold
[    1.691208] pci 0000:00:08.0: [1022:1632] type 00 class 0x060000
[    1.692342] pci 0000:00:08.1: [1022:1635] type 01 class 0x060400
[    1.692370] pci 0000:00:08.1: enabling Extended Tags
[    1.692452] pci 0000:00:08.1: PME# supported from D0 D3hot D3cold
[    1.694225] pci 0000:00:08.2: [1022:1635] type 01 class 0x060400
[    1.694252] pci 0000:00:08.2: enabling Extended Tags
[    1.694335] pci 0000:00:08.2: PME# supported from D0 D3hot D3cold
[    1.696116] pci 0000:00:14.0: [1022:790b] type 00 class 0x0c0500
[    1.697735] pci 0000:00:14.3: [1022:790e] type 00 class 0x060100
[    1.699364] pci 0000:00:18.0: [1022:1448] type 00 class 0x060000
[    1.700480] pci 0000:00:18.1: [1022:1449] type 00 class 0x060000
[    1.701595] pci 0000:00:18.2: [1022:144a] type 00 class 0x060000
[    1.702711] pci 0000:00:18.3: [1022:144b] type 00 class 0x060000
[    1.703821] pci 0000:00:18.4: [1022:144c] type 00 class 0x060000
[    1.704933] pci 0000:00:18.5: [1022:144d] type 00 class 0x060000
[    1.706045] pci 0000:00:18.6: [1022:144e] type 00 class 0x060000
[    1.707156] pci 0000:00:18.7: [1022:144f] type 00 class 0x060000
[    1.708924] pci 0000:01:00.0: [1022:43d1] type 00 class 0x0c0330
[    1.708949] pci 0000:01:00.0: reg 0x10: [mem 0xfcda0000-0xfcda7fff 64bit]
[    1.708994] pci 0000:01:00.0: enabling Extended Tags
[    1.709154] pci 0000:01:00.0: PME# supported from D3hot D3cold
[    1.710181] pci 0000:01:00.1: [1022:43c8] type 00 class 0x010601
[    1.710222] pci 0000:01:00.1: reg 0x24: [mem 0xfcd80000-0xfcd9ffff]
[    1.710234] pci 0000:01:00.1: reg 0x30: [mem 0xfcd00000-0xfcd7ffff pref]
[    1.710247] pci 0000:01:00.1: enabling Extended Tags
[    1.710386] pci 0000:01:00.1: PME# supported from D3hot D3cold
[    1.716376] pci 0000:01:00.2: [1022:43c6] type 01 class 0x060400
[    1.716425] pci 0000:01:00.2: enabling Extended Tags
[    1.716567] pci 0000:01:00.2: PME# supported from D3hot D3cold
[    1.717573] pci 0000:00:02.1: PCI bridge to [bus 01-0a]
[    1.717584] pci 0000:00:02.1:   bridge window [io  0xd000-0xefff]
[    1.717592] pci 0000:00:02.1:   bridge window [mem 0xfcb00000-0xfcdfffff]
[    1.719436] pci 0000:02:00.0: [1022:43c7] type 01 class 0x060400
[    1.719487] pci 0000:02:00.0: enabling Extended Tags
[    1.719697] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    1.720977] pci 0000:02:01.0: [1022:43c7] type 01 class 0x060400
[    1.721029] pci 0000:02:01.0: enabling Extended Tags
[    1.721242] pci 0000:02:01.0: PME# supported from D3hot D3cold
[    1.722508] pci 0000:02:02.0: [1022:43c7] type 01 class 0x060400
[    1.722559] pci 0000:02:02.0: enabling Extended Tags
[    1.722767] pci 0000:02:02.0: PME# supported from D3hot D3cold
[    1.724053] pci 0000:02:03.0: [1022:43c7] type 01 class 0x060400
[    1.724105] pci 0000:02:03.0: enabling Extended Tags
[    1.724316] pci 0000:02:03.0: PME# supported from D3hot D3cold
[    1.725577] pci 0000:02:04.0: [1022:43c7] type 01 class 0x060400
[    1.725628] pci 0000:02:04.0: enabling Extended Tags
[    1.725836] pci 0000:02:04.0: PME# supported from D3hot D3cold
[    1.727111] pci 0000:02:05.0: [1022:43c7] type 01 class 0x060400
[    1.727162] pci 0000:02:05.0: enabling Extended Tags
[    1.727370] pci 0000:02:05.0: PME# supported from D3hot D3cold
[    1.728654] pci 0000:02:06.0: [1022:43c7] type 01 class 0x060400
[    1.728706] pci 0000:02:06.0: enabling Extended Tags
[    1.728914] pci 0000:02:06.0: PME# supported from D3hot D3cold
[    1.730188] pci 0000:02:07.0: [1022:43c7] type 01 class 0x060400
[    1.730239] pci 0000:02:07.0: enabling Extended Tags
[    1.730448] pci 0000:02:07.0: PME# supported from D3hot D3cold
[    1.731709] pci 0000:01:00.2: PCI bridge to [bus 02-0a]
[    1.731721] pci 0000:01:00.2:   bridge window [io  0xd000-0xefff]
[    1.731730] pci 0000:01:00.2:   bridge window [mem 0xfcb00000-0xfccfffff]
[    1.732133] pci 0000:02:00.0: PCI bridge to [bus 03]
[    1.732535] pci 0000:02:01.0: PCI bridge to [bus 04]
[    1.732932] pci 0000:02:02.0: PCI bridge to [bus 05]
[    1.733334] pci 0000:02:03.0: PCI bridge to [bus 06]
[    1.733741] pci 0000:02:04.0: PCI bridge to [bus 07]
[    1.733934] pci 0000:02:05.0: PCI bridge to [bus 08]
[    1.734170] pci 0000:09:00.0: [10ec:c821] type 00 class 0x028000
[    1.734203] pci 0000:09:00.0: reg 0x10: [io  0xe000-0xe0ff]
[    1.734242] pci 0000:09:00.0: reg 0x18: [mem 0xfcc00000-0xfcc0ffff 64bit]
[    1.734638] pci 0000:09:00.0: supports D1 D2
[    1.734644] pci 0000:09:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.735243] pci 0000:02:06.0: PCI bridge to [bus 09]
[    1.735254] pci 0000:02:06.0:   bridge window [io  0xe000-0xefff]
[    1.735263] pci 0000:02:06.0:   bridge window [mem 0xfcc00000-0xfccfffff]
[    1.735488] pci 0000:0a:00.0: [10ec:8168] type 00 class 0x020000
[    1.735521] pci 0000:0a:00.0: reg 0x10: [io  0xd000-0xd0ff]
[    1.735564] pci 0000:0a:00.0: reg 0x18: [mem 0xfcb04000-0xfcb04fff 64bit]
[    1.735593] pci 0000:0a:00.0: reg 0x20: [mem 0xfcb00000-0xfcb03fff 64bit]
[    1.735965] pci 0000:0a:00.0: supports D1 D2
[    1.735971] pci 0000:0a:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.736571] pci 0000:02:07.0: PCI bridge to [bus 0a]
[    1.736582] pci 0000:02:07.0:   bridge window [io  0xd000-0xdfff]
[    1.736590] pci 0000:02:07.0:   bridge window [mem 0xfcb00000-0xfcbfffff]
[    1.737022] pci 0000:0b:00.0: [1c5c:1339] type 00 class 0x010802
[    1.737046] pci 0000:0b:00.0: reg 0x10: [mem 0xfcf00000-0xfcf03fff 64bit]
[    1.737248] pci 0000:0b:00.0: supports D1
[    1.737254] pci 0000:0b:00.0: PME# supported from D0 D1 D3hot
[    1.737325] pci 0000:0b:00.0: 15.752 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x2 link at 0000:00:02.2 (capable of 31.504 Gb/s with 8.0 GT/s PCIe x4 link)
[    1.737750] pci 0000:00:02.2: PCI bridge to [bus 0b]
[    1.737760] pci 0000:00:02.2:   bridge window [mem 0xfcf00000-0xfcffffff]
[    1.739105] pci 0000:0c:00.0: [1002:1636] type 00 class 0x030000
[    1.739123] pci 0000:0c:00.0: reg 0x10: [mem 0xd0000000-0xdfffffff 64bit pref]
[    1.739138] pci 0000:0c:00.0: reg 0x18: [mem 0xe0000000-0xe01fffff 64bit pref]
[    1.739150] pci 0000:0c:00.0: reg 0x20: [io  0xf000-0xf0ff]
[    1.739161] pci 0000:0c:00.0: reg 0x24: [mem 0xfca00000-0xfca7ffff]
[    1.739176] pci 0000:0c:00.0: enabling Extended Tags
[    1.739281] pci 0000:0c:00.0: BAR 0: assigned to efifb
[    1.739327] pci 0000:0c:00.0: PME# supported from D1 D2 D3hot D3cold
[    1.739367] pci 0000:0c:00.0: 126.016 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x16 link at 0000:00:08.1 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
[    1.740514] pci 0000:0c:00.1: [1002:1637] type 00 class 0x040300
[    1.740528] pci 0000:0c:00.1: reg 0x10: [mem 0xfca88000-0xfca8bfff]
[    1.740555] pci 0000:0c:00.1: enabling Extended Tags
[    1.740684] pci 0000:0c:00.1: PME# supported from D1 D2 D3hot D3cold
[    1.741827] pci 0000:0c:00.2: [1022:15df] type 00 class 0x108000
[    1.741847] pci 0000:0c:00.2: reg 0x18: [mem 0xfc900000-0xfc9fffff]
[    1.741863] pci 0000:0c:00.2: reg 0x24: [mem 0xfca8c000-0xfca8dfff]
[    1.741876] pci 0000:0c:00.2: enabling Extended Tags
[    1.743084] pci 0000:0c:00.3: [1022:1639] type 00 class 0x0c0330
[    1.743102] pci 0000:0c:00.3: reg 0x10: [mem 0xfc800000-0xfc8fffff 64bit]
[    1.743131] pci 0000:0c:00.3: enabling Extended Tags
[    1.743261] pci 0000:0c:00.3: PME# supported from D0 D3hot D3cold
[    1.744407] pci 0000:0c:00.4: [1022:1639] type 00 class 0x0c0330
[    1.744425] pci 0000:0c:00.4: reg 0x10: [mem 0xfc700000-0xfc7fffff 64bit]
[    1.744455] pci 0000:0c:00.4: enabling Extended Tags
[    1.744583] pci 0000:0c:00.4: PME# supported from D0 D3hot D3cold
[    1.745722] pci 0000:0c:00.6: [1022:15e3] type 00 class 0x040300
[    1.745737] pci 0000:0c:00.6: reg 0x10: [mem 0xfca80000-0xfca87fff]
[    1.745764] pci 0000:0c:00.6: enabling Extended Tags
[    1.745892] pci 0000:0c:00.6: PME# supported from D0 D3hot D3cold
[    1.747111] pci 0000:00:08.1: PCI bridge to [bus 0c]
[    1.747120] pci 0000:00:08.1:   bridge window [io  0xf000-0xffff]
[    1.747128] pci 0000:00:08.1:   bridge window [mem 0xfc700000-0xfcafffff]
[    1.747137] pci 0000:00:08.1:   bridge window [mem 0xd0000000-0xe01fffff 64bit pref]
[    1.747640] pci 0000:0d:00.0: [1022:7901] type 00 class 0x010601
[    1.747668] pci 0000:0d:00.0: reg 0x24: [mem 0xfce01000-0xfce017ff]
[    1.747681] pci 0000:0d:00.0: enabling Extended Tags
[    1.747842] pci 0000:0d:00.0: 126.016 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x16 link at 0000:00:08.2 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
[    1.748684] pci 0000:0d:00.1: [1022:7901] type 00 class 0x010601
[    1.748712] pci 0000:0d:00.1: reg 0x24: [mem 0xfce00000-0xfce007ff]
[    1.748725] pci 0000:0d:00.1: enabling Extended Tags
[    1.749708] pci 0000:00:08.2: PCI bridge to [bus 0d]
[    1.749718] pci 0000:00:08.2:   bridge window [mem 0xfce00000-0xfcefffff]
[    1.758356] ACPI: PCI Interrupt Link [LNKA] (IRQs 4 5 7 10 11 14 15) *0
[    1.759656] ACPI: PCI Interrupt Link [LNKB] (IRQs 4 5 7 10 11 14 15) *0
[    1.760873] ACPI: PCI Interrupt Link [LNKC] (IRQs 4 5 7 10 11 14 15) *0
[    1.762239] ACPI: PCI Interrupt Link [LNKD] (IRQs 4 5 7 10 11 14 15) *0
[    1.763530] ACPI: PCI Interrupt Link [LNKE] (IRQs 4 5 7 10 11 14 15) *0
[    1.764630] ACPI: PCI Interrupt Link [LNKF] (IRQs 4 5 7 10 11 14 15) *0
[    1.765726] ACPI: PCI Interrupt Link [LNKG] (IRQs 4 5 7 10 11 14 15) *0
[    1.766833] ACPI: PCI Interrupt Link [LNKH] (IRQs 4 5 7 10 11 14 15) *0
[    1.779473] ACPI: EC: interrupt unblocked
[    1.779480] ACPI: EC: event unblocked
[    1.779489] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    1.779495] ACPI: EC: GPE=0x3
[    1.779505] ACPI: \_SB_.PCI0.SBRG.EC0_: Boot DSDT EC initialization complete
[    1.779523] ACPI: \_SB_.PCI0.SBRG.EC0_: EC: Used to handle transactions and events
[    1.779871] iommu: Default domain type: Translated 
[    1.779965] pci 0000:0c:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[    1.779965] pci 0000:0c:00.0: vgaarb: bridge control possible
[    1.779965] pci 0000:0c:00.0: vgaarb: setting as boot device
[    1.779965] vgaarb: loaded
[    1.781850] SCSI subsystem initialized
[    1.781893] libata version 3.00 loaded.
[    1.781893] ACPI: bus type USB registered
[    1.781893] usbcore: registered new interface driver usbfs
[    1.781893] usbcore: registered new interface driver hub
[    1.781893] usbcore: registered new device driver usb
[    1.781893] pps_core: LinuxPPS API ver. 1 registered
[    1.781893] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.781893] PTP clock support registered
[    1.781893] EDAC MC: Ver: 3.0.0
[    1.781893] Registered efivars operations
[    1.785136] NetLabel: Initializing
[    1.785143] NetLabel:  domain hash size = 128
[    1.785148] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO
[    1.785246] NetLabel:  unlabeled traffic allowed by default
[    1.785269] PCI: Using ACPI for IRQ routing
[    1.789174] PCI: pci_cache_line_size set to 64 bytes
[    1.789273] e820: reserve RAM buffer [mem 0x09c10000-0x0bffffff]
[    1.789288] e820: reserve RAM buffer [mem 0x0a200000-0x0bffffff]
[    1.789300] e820: reserve RAM buffer [mem 0x0b000000-0x0bffffff]
[    1.789312] e820: reserve RAM buffer [mem 0xb4c66018-0xb7ffffff]
[    1.789324] e820: reserve RAM buffer [mem 0xb5158000-0xb7ffffff]
[    1.789336] e820: reserve RAM buffer [mem 0xb6dde000-0xb7ffffff]
[    1.789347] e820: reserve RAM buffer [mem 0xb8390000-0xbbffffff]
[    1.789360] e820: reserve RAM buffer [mem 0x21f380000-0x21fffffff]
[    1.789385] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[    1.789385] hpet0: 3 comparators, 32-bit 14.318180 MHz counter
[    1.791525] clocksource: Switched to clocksource tsc-early
[    1.886355] VFS: Disk quotas dquot_6.6.0
[    1.886463] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    1.887380] pnp: PnP ACPI init
[    1.888708] system 00:00: [mem 0xf0000000-0xf7ffffff] has been reserved
[    1.888751] system 00:00: Plug and Play ACPI device, IDs PNP0c01 (active)
[    1.889901] system 00:01: [mem 0x220000000-0x23fffffff window] has been reserved
[    1.889932] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
[    1.892039] pnp 00:02: Plug and Play ACPI device, IDs PNP0b00 (active)
[    1.904512] system 00:03: [io  0x0a00-0x0a0f] has been reserved
[    1.904531] system 00:03: [io  0x0a10-0x0a1f] has been reserved
[    1.904547] system 00:03: [io  0x0a20-0x0a2f] has been reserved
[    1.904564] system 00:03: [io  0x0a30-0x0a3f] has been reserved
[    1.904580] system 00:03: [io  0x0a40-0x0a4f] has been reserved
[    1.904596] system 00:03: [io  0x0a50-0x0a5f] has been reserved
[    1.904614] system 00:03: [io  0x0a60-0x0a6f] has been reserved
[    1.904630] system 00:03: [io  0x0a70-0x0a7f] has been reserved
[    1.904646] system 00:03: [io  0x0a80-0x0a8f] has been reserved
[    1.904662] system 00:03: [io  0x0a90-0x0b8e] has been reserved
[    1.904678] system 00:03: [io  0x0aa0-0x0aaf] has been reserved
[    1.904694] system 00:03: [io  0x0ab0-0x0abf] has been reserved
[    1.904711] system 00:03: [io  0x0ac0-0x0acf] has been reserved
[    1.904727] system 00:03: [io  0x0ad0-0x0adf] has been reserved
[    1.904755] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    1.909811] system 00:04: [io  0x04d0-0x04d1] has been reserved
[    1.909829] system 00:04: [io  0x040b] has been reserved
[    1.909845] system 00:04: [io  0x04d6] has been reserved
[    1.909861] system 00:04: [io  0x0c00-0x0c01] has been reserved
[    1.909877] system 00:04: [io  0x0c14] has been reserved
[    1.909893] system 00:04: [io  0x0c50-0x0c51] has been reserved
[    1.909909] system 00:04: [io  0x0c52] has been reserved
[    1.909925] system 00:04: [io  0x0c6c] has been reserved
[    1.909941] system 00:04: [io  0x0c6f] has been reserved
[    1.909957] system 00:04: [io  0x0cd0-0x0cd1] has been reserved
[    1.909973] system 00:04: [io  0x0cd2-0x0cd3] has been reserved
[    1.909990] system 00:04: [io  0x0cd4-0x0cd5] has been reserved
[    1.910006] system 00:04: [io  0x0cd6-0x0cd7] has been reserved
[    1.910022] system 00:04: [io  0x0cd8-0x0cdf] has been reserved
[    1.910038] system 00:04: [io  0x0800-0x089f] has been reserved
[    1.910055] system 00:04: [io  0x0b00-0x0b0f] has been reserved
[    1.910071] system 00:04: [io  0x0b20-0x0b3f] has been reserved
[    1.910088] system 00:04: [io  0x0900-0x090f] has been reserved
[    1.910104] system 00:04: [io  0x0910-0x091f] has been reserved
[    1.910132] system 00:04: [mem 0xfec00000-0xfec00fff] could not be reserved
[    1.910159] system 00:04: [mem 0xfec01000-0xfec01fff] could not be reserved
[    1.910179] system 00:04: [mem 0xfedc0000-0xfedc0fff] has been reserved
[    1.910202] system 00:04: [mem 0xfee00000-0xfee00fff] has been reserved
[    1.910229] system 00:04: [mem 0xfed80000-0xfed8ffff] could not be reserved
[    1.910248] system 00:04: [mem 0xfec10000-0xfec10fff] has been reserved
[    1.910266] system 00:04: [mem 0xff000000-0xffffffff] has been reserved
[    1.910296] system 00:04: Plug and Play ACPI device, IDs PNP0c02 (active)
[    1.920974] pnp: PnP ACPI: found 5 devices
[    1.934928] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    1.935177] NET: Registered protocol family 2
[    1.936737] tcp_listen_portaddr_hash hash table entries: 4096 (order: 4, 65536 bytes, linear)
[    1.936894] TCP established hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    1.937457] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes, linear)
[    1.937992] TCP: Hash tables configured (established 65536 bind 65536)
[    1.938701] MPTCP token hash table entries: 8192 (order: 5, 196608 bytes, linear)
[    1.938849] UDP hash table entries: 4096 (order: 5, 131072 bytes, linear)
[    1.938946] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes, linear)
[    1.939477] NET: Registered protocol family 1
[    1.939502] NET: Registered protocol family 44
[    1.939541] pci 0000:02:00.0: PCI bridge to [bus 03]
[    1.939565] pci 0000:02:01.0: PCI bridge to [bus 04]
[    1.939580] pci 0000:02:02.0: PCI bridge to [bus 05]
[    1.939595] pci 0000:02:03.0: PCI bridge to [bus 06]
[    1.939610] pci 0000:02:04.0: PCI bridge to [bus 07]
[    1.939625] pci 0000:02:05.0: PCI bridge to [bus 08]
[    1.939640] pci 0000:02:06.0: PCI bridge to [bus 09]
[    1.939647] pci 0000:02:06.0:   bridge window [io  0xe000-0xefff]
[    1.939657] pci 0000:02:06.0:   bridge window [mem 0xfcc00000-0xfccfffff]
[    1.939671] pci 0000:02:07.0: PCI bridge to [bus 0a]
[    1.939678] pci 0000:02:07.0:   bridge window [io  0xd000-0xdfff]
[    1.939687] pci 0000:02:07.0:   bridge window [mem 0xfcb00000-0xfcbfffff]
[    1.939700] pci 0000:01:00.2: PCI bridge to [bus 02-0a]
[    1.939707] pci 0000:01:00.2:   bridge window [io  0xd000-0xefff]
[    1.939717] pci 0000:01:00.2:   bridge window [mem 0xfcb00000-0xfccfffff]
[    1.939730] pci 0000:00:02.1: PCI bridge to [bus 01-0a]
[    1.939736] pci 0000:00:02.1:   bridge window [io  0xd000-0xefff]
[    1.939744] pci 0000:00:02.1:   bridge window [mem 0xfcb00000-0xfcdfffff]
[    1.939755] pci 0000:00:02.2: PCI bridge to [bus 0b]
[    1.939762] pci 0000:00:02.2:   bridge window [mem 0xfcf00000-0xfcffffff]
[    1.939775] pci 0000:00:08.1: PCI bridge to [bus 0c]
[    1.939782] pci 0000:00:08.1:   bridge window [io  0xf000-0xffff]
[    1.939790] pci 0000:00:08.1:   bridge window [mem 0xfc700000-0xfcafffff]
[    1.939798] pci 0000:00:08.1:   bridge window [mem 0xd0000000-0xe01fffff 64bit pref]
[    1.939809] pci 0000:00:08.2: PCI bridge to [bus 0d]
[    1.939816] pci 0000:00:08.2:   bridge window [mem 0xfce00000-0xfcefffff]
[    1.939830] pci_bus 0000:00: resource 4 [io  0x0000-0x03af window]
[    1.939838] pci_bus 0000:00: resource 5 [io  0x03e0-0x0cf7 window]
[    1.939845] pci_bus 0000:00: resource 6 [io  0x03b0-0x03df window]
[    1.939852] pci_bus 0000:00: resource 7 [io  0x0d00-0xffff window]
[    1.939859] pci_bus 0000:00: resource 8 [mem 0x000a0000-0x000bffff window]
[    1.939866] pci_bus 0000:00: resource 9 [mem 0x000c0000-0x000dffff window]
[    1.939873] pci_bus 0000:00: resource 10 [mem 0xc0000000-0xfec2ffff window]
[    1.939881] pci_bus 0000:00: resource 11 [mem 0xfee00000-0xffffffff window]
[    1.939889] pci_bus 0000:01: resource 0 [io  0xd000-0xefff]
[    1.939895] pci_bus 0000:01: resource 1 [mem 0xfcb00000-0xfcdfffff]
[    1.939902] pci_bus 0000:02: resource 0 [io  0xd000-0xefff]
[    1.939909] pci_bus 0000:02: resource 1 [mem 0xfcb00000-0xfccfffff]
[    1.939916] pci_bus 0000:09: resource 0 [io  0xe000-0xefff]
[    1.939923] pci_bus 0000:09: resource 1 [mem 0xfcc00000-0xfccfffff]
[    1.939930] pci_bus 0000:0a: resource 0 [io  0xd000-0xdfff]
[    1.939937] pci_bus 0000:0a: resource 1 [mem 0xfcb00000-0xfcbfffff]
[    1.939944] pci_bus 0000:0b: resource 1 [mem 0xfcf00000-0xfcffffff]
[    1.939952] pci_bus 0000:0c: resource 0 [io  0xf000-0xffff]
[    1.939958] pci_bus 0000:0c: resource 1 [mem 0xfc700000-0xfcafffff]
[    1.939965] pci_bus 0000:0c: resource 2 [mem 0xd0000000-0xe01fffff 64bit pref]
[    1.939974] pci_bus 0000:0d: resource 1 [mem 0xfce00000-0xfcefffff]
[    1.942791] pci 0000:0c:00.1: D0 power state depends on 0000:0c:00.0
[    1.945901] PCI: CLS 64 bytes, default 64
[    1.946192] Trying to unpack rootfs image as initramfs...
[    2.206923] Freeing initrd memory: 8380K
[    2.337507] pci 0000:00:00.2: AMD-Vi: Unable to read/write to IOMMU perf counter.
[    2.338662] pci 0000:00:00.2: can't derive routing for PCI INT A
[    2.338673] pci 0000:00:00.2: PCI INT A: not connected
[    2.338859] pci 0000:00:01.0: Adding to iommu group 0
[    2.338992] pci 0000:00:02.0: Adding to iommu group 1
[    2.339096] pci 0000:00:02.1: Adding to iommu group 2
[    2.339204] pci 0000:00:02.2: Adding to iommu group 3
[    2.339341] pci 0000:00:08.0: Adding to iommu group 4
[    2.339407] pci 0000:00:08.1: Adding to iommu group 4
[    2.339475] pci 0000:00:08.2: Adding to iommu group 4
[    2.339588] pci 0000:00:14.0: Adding to iommu group 5
[    2.339638] pci 0000:00:14.3: Adding to iommu group 5
[    2.339789] pci 0000:00:18.0: Adding to iommu group 6
[    2.339839] pci 0000:00:18.1: Adding to iommu group 6
[    2.339895] pci 0000:00:18.2: Adding to iommu group 6
[    2.339951] pci 0000:00:18.3: Adding to iommu group 6
[    2.340000] pci 0000:00:18.4: Adding to iommu group 6
[    2.340050] pci 0000:00:18.5: Adding to iommu group 6
[    2.340101] pci 0000:00:18.6: Adding to iommu group 6
[    2.340151] pci 0000:00:18.7: Adding to iommu group 6
[    2.340254] pci 0000:01:00.0: Adding to iommu group 7
[    2.340308] pci 0000:01:00.1: Adding to iommu group 7
[    2.340362] pci 0000:01:00.2: Adding to iommu group 7
[    2.340402] pci 0000:02:00.0: Adding to iommu group 7
[    2.340441] pci 0000:02:01.0: Adding to iommu group 7
[    2.340481] pci 0000:02:02.0: Adding to iommu group 7
[    2.340524] pci 0000:02:03.0: Adding to iommu group 7
[    2.340566] pci 0000:02:04.0: Adding to iommu group 7
[    2.340606] pci 0000:02:05.0: Adding to iommu group 7
[    2.340651] pci 0000:02:06.0: Adding to iommu group 7
[    2.340690] pci 0000:02:07.0: Adding to iommu group 7
[    2.340731] pci 0000:09:00.0: Adding to iommu group 7
[    2.340774] pci 0000:0a:00.0: Adding to iommu group 7
[    2.340865] pci 0000:0b:00.0: Adding to iommu group 8
[    2.340917] pci 0000:0c:00.0: Adding to iommu group 4
[    2.340956] pci 0000:0c:00.1: Adding to iommu group 4
[    2.340996] pci 0000:0c:00.2: Adding to iommu group 4
[    2.341038] pci 0000:0c:00.3: Adding to iommu group 4
[    2.341078] pci 0000:0c:00.4: Adding to iommu group 4
[    2.341122] pci 0000:0c:00.6: Adding to iommu group 4
[    2.341163] pci 0000:0d:00.0: Adding to iommu group 4
[    2.341203] pci 0000:0d:00.1: Adding to iommu group 4
[    2.361821] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40
[    2.361839] pci 0000:00:00.2: AMD-Vi: Extended features (0x206d73ef22254ade):
[    2.361846]  PPR X2APIC NX GT IA GA PC GA_vAPIC
[    2.361861] AMD-Vi: Interrupt remapping enabled
[    2.361865] AMD-Vi: Virtual APIC enabled
[    2.361870] AMD-Vi: X2APIC enabled
[    2.362272] AMD-Vi: Lazy IO/TLB flushing enabled
[    2.362422] amd_uncore: 4  amd_df counters detected
[    2.362449] amd_uncore: 6  amd_l3 counters detected
[    2.363111] LVT offset 0 assigned for vector 0x400
[    2.363391] perf: AMD IBS detected (0x000003ff)
[    2.366963] check: Scanning for low memory corruption every 60 seconds
[    2.370830] Initialise system trusted keyrings
[    2.370874] Key type blacklist registered
[    2.371070] workingset: timestamp_bits=41 max_order=21 bucket_order=0
[    2.387358] zbud: loaded
[    2.392535] Key type asymmetric registered
[    2.392543] Asymmetric key parser 'x509' registered
[    2.392593] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 243)
[    2.392758] io scheduler mq-deadline registered
[    2.392767] io scheduler kyber registered
[    2.393069] io scheduler bfq registered
[    2.395473] pcieport 0000:00:02.1: PME: Signaling with IRQ 26
[    2.396128] pcieport 0000:00:02.2: PME: Signaling with IRQ 27
[    2.396753] pcieport 0000:00:08.1: PME: Signaling with IRQ 28
[    2.398314] pcieport 0000:00:08.2: PME: Signaling with IRQ 29
[    2.408158] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    2.408334] efifb: probing for efifb
[    2.408723] efifb: framebuffer at 0xd0000000, using 3072k, total 3072k
[    2.408731] efifb: mode is 1024x768x32, linelength=4096, pages=1
[    2.408737] efifb: scrolling: redraw
[    2.408741] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    2.409539] Console: switching to colour frame buffer device 128x48
[    2.414601] fb0: EFI VGA frame buffer device
[    2.415135] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
[    2.415443] ACPI: button: Power Button [PWRB]
[    2.415762] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1
[    2.417681] ACPI: button: Power Button [PWRF]
[    2.418097] Monitor-Mwait will be used to enter C-1 state
[    2.418214] ACPI: \_PR_.C000: Found 3 idle states
[    2.419216] ACPI: \_PR_.C002: Found 3 idle states
[    2.420364] ACPI: \_PR_.C004: Found 3 idle states
[    2.421422] ACPI: \_PR_.C006: Found 3 idle states
[    2.422445] ACPI: \_PR_.C001: Found 3 idle states
[    2.423446] ACPI: \_PR_.C003: Found 3 idle states
[    2.424566] ACPI: \_PR_.C005: Found 3 idle states
[    2.426058] ACPI: \_PR_.C007: Found 3 idle states
[    2.438042] thermal LNXTHERM:00: registered as thermal_zone0
[    2.438115] ACPI: thermal: Thermal Zone [HPTZ] (30 C)
[    2.439130] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    2.452629] Non-volatile memory driver v1.3
[    2.452687] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
[    2.459169] nvme nvme0: pci function 0000:0b:00.0
[    2.459441] ahci 0000:01:00.1: version 3.0
[    2.459494] ahci 0000:01:00.1: enabling device (0100 -> 0102)
[    2.460857] ahci 0000:01:00.1: SSS flag set, parallel bus scan disabled
[    2.462739] ahci 0000:01:00.1: AHCI 0001.0301 32 slots 8 ports 6 Gbps 0xff impl SATA mode
[    2.464583] ahci 0000:01:00.1: flags: 64bit ncq sntf stag pm led clo only pmp pio slum part sxs deso sadm sds apst 
[    2.464969] ==================================================================
[    2.468288] BUG: KASAN: use-after-free in __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.468288] Read of size 8 at addr ffff8881d7830000 by task swapper/0/0

[    2.468288] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.12.0-rc3-debug #1
[    2.468288] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[    2.468288] Call Trace:
[    2.468288]  <IRQ>
[    2.479433]  dump_stack+0x9c/0xcf
[    2.479433]  print_address_description.constprop.0+0x18/0x130
[    2.479433]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.479433]  kasan_report.cold+0x7f/0x111
[    2.479433]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.479433]  __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.479433]  nvme_pci_complete_rq+0x73/0x130
[    2.479433]  blk_complete_reqs+0x6f/0x80
[    2.479433]  __do_softirq+0xfc/0x3be
[    2.479433]  irq_exit_rcu+0xce/0x120
[    2.479433]  common_interrupt+0x80/0xa0
[    2.479433]  </IRQ>
[    2.479433]  asm_common_interrupt+0x1e/0x40
[    2.479433] RIP: 0010:cpuidle_enter_state+0xf9/0x590
[    2.479433] Code: 3d 24 0f 37 6d e8 67 ac 49 ff 49 89 c5 0f 1f 44 00 00 31 ff e8 28 c1 49 ff 80 3c 24 00 0f 85 aa 02 00 00 fb 66 0f 1f 44 00 00 <45> 85 f6 0f 88 39 02 00 00 49 63 ee 48 8d 44 6d 00 48 8d 44 85 00
[    2.479433] RSP: 0018:ffffffff94007df0 EFLAGS: 00000246
[    2.479433] RAX: 0000000000000000 RBX: ffff8881075a8000 RCX: ffffffff92144885
[    2.479433] RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff8881d6a35648
[    2.479433] RBP: 0000000000000003 R08: 0000000000000001 R09: ffff8881d6a356d7
[    2.479433] R10: ffffed103ad46ada R11: 0000000000000001 R12: ffffffff9445ba80
[    2.479433] R13: 0000000092ec3156 R14: 0000000000000003 R15: ffffffff9445bc10
[    2.479433]  ? sched_idle_set_state+0x25/0x30
[    2.479433]  ? ladder_select_state+0x350/0x370
[    2.479433]  cpuidle_enter+0x3c/0x60
[    2.525920]  do_idle+0x2fa/0x3c0
[    2.525920]  ? arch_cpu_idle_exit+0x40/0x40
[    2.525920]  cpu_startup_entry+0x19/0x20
[    2.525920]  start_kernel+0x3a9/0x3c7
[    2.525920]  secondary_startup_64_no_verify+0xc2/0xcb

[    2.525920] The buggy address belongs to the page:
[    2.525920] page:0000000016c8183d refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1d7830
[    2.525920] flags: 0x2ffff0000000000()
[    2.525920] raw: 02ffff0000000000 dead000000000100 dead000000000122 0000000000000000
[    2.525920] raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
[    2.525920] page dumped because: kasan: bad access detected

[    2.525920] Memory state around the buggy address:
[    2.525920]  ffff8881d782ff00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    2.525920]  ffff8881d782ff80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    2.525920] >ffff8881d7830000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    2.525920]                    ^
[    2.525920]  ffff8881d7830080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    2.525920]  ffff8881d7830100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    2.525920] ==================================================================
[    2.525920] Disabling lock debugging due to kernel taint
[    2.566191] nvme nvme0: missing or invalid SUBNQN field.
[    2.566573] scsi host0: ahci
[    2.571284] scsi host1: ahci
[    2.573925] scsi host2: ahci
[    2.575531] nvme nvme0: 16/0/0 default/read/poll queues
[    2.576652] scsi host3: ahci
[    2.580305] scsi host4: ahci
[    2.582369]  nvme0n1: p1 p2
[    2.583114] scsi host5: ahci
[    2.586918] scsi host6: ahci
[    2.589693] scsi host7: ahci
[    2.591895] ata1: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80100 irq 44
[    2.593562] ata2: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80180 irq 44
[    2.595213] ata3: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80200 irq 44
[    2.596830] ata4: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80280 irq 44
[    2.598384] ata5: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80300 irq 44
[    2.599856] ata6: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80380 irq 44
[    2.601282] ata7: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80400 irq 44
[    2.602663] ata8: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80480 irq 44
[    2.604233] ahci 0000:0d:00.0: enabling device (0100 -> 0102)
[    2.624072] ahci 0000:0d:00.0: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
[    2.626047] ahci 0000:0d:00.0: flags: 64bit ncq sntf ilck pm led clo only pmp fbs pio slum part 
[    2.629115] scsi host8: ahci
[    2.631134] ata9: SATA max UDMA/133 abar m2048@0xfce01000 port 0xfce01100 irq 62
[    2.632725] ahci 0000:0d:00.1: enabling device (0100 -> 0102)
[    2.645647] ahci 0000:0d:00.1: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
[    2.647377] ahci 0000:0d:00.1: flags: 64bit ncq sntf ilck pm led clo only pmp fbs pio slum part 
[    2.650684] scsi host9: ahci
[    2.652987] ata10: SATA max UDMA/133 abar m2048@0xfce00000 port 0xfce00100 irq 64
[    2.654771] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    2.656479] ehci-pci: EHCI PCI platform driver
[    2.658223] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    2.659922] ohci-pci: OHCI PCI platform driver
[    2.661613] uhci_hcd: USB Universal Host Controller Interface driver
[    2.663598] usbcore: registered new interface driver usbserial_generic
[    2.665273] usbserial: USB Serial support registered for generic
[    2.667509] rtc_cmos 00:02: RTC can wake from S4
[    2.670325] rtc_cmos 00:02: registered as rtc0
[    2.672456] rtc_cmos 00:02: setting system clock to 2021-07-03T05:52:35 UTC (1625291555)
[    2.674292] rtc_cmos 00:02: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
[    2.676648] ledtrig-cpu: registered to indicate activity on CPUs
[    2.680761] hid: raw HID events driver (C) Jiri Kosina
[    2.682838] drop_monitor: Initializing network drop monitor service
[    2.684723] Initializing XFRM netlink socket
[    2.687522] NET: Registered protocol family 10
[    2.706529] Segment Routing with IPv6
[    2.708311] RPL Segment Routing with IPv6
[    2.710080] NET: Registered protocol family 17
[    2.717145] microcode: CPU0: patch_level=0x08600106
[    2.719302] microcode: CPU1: patch_level=0x08600106
[    2.721700] microcode: CPU2: patch_level=0x08600106
[    2.723611] microcode: CPU3: patch_level=0x08600106
[    2.725354] microcode: CPU4: patch_level=0x08600106
[    2.727673] microcode: CPU5: patch_level=0x08600106
[    2.729894] microcode: CPU6: patch_level=0x08600106
[    2.732003] microcode: CPU7: patch_level=0x08600106
[    2.733779] microcode: Microcode Update Driver: v2.2.
[    2.734648] resctrl: L3 allocation detected
[    2.738008] resctrl: L3DATA allocation detected
[    2.739649] resctrl: L3CODE allocation detected
[    2.741298] resctrl: MB allocation detected
[    2.742960] resctrl: L3 monitoring detected
[    2.744639] IPI shorthand broadcast: enabled
[    2.746420] sched_clock: Marking stable (2741486890, 3147034)->(2749935265, -5301341)
[    2.748947] registered taskstats version 1
[    2.750823] Loading compiled-in X.509 certificates
[    2.762366] Loaded X.509 cert 'Build time autogenerated kernel key: 2e7560f4a0c00f3b7155a946e3c119b89f094b3b'
[    2.768372] zswap: loaded using pool lz4/z3fold
[    2.771903] Key type ._fscrypt registered
[    2.773785] Key type .fscrypt registered
[    2.775622] Key type fscrypt-provisioning registered
[    2.784028] PM:   Magic number: 13:98:870
[    2.787045] RAS: Correctable Errors collector initialized.
[    2.917218] ata1: SATA link down (SStatus 0 SControl 300)
[    2.943732] ata9: SATA link down (SStatus 0 SControl 300)
[    2.966342] ata10: SATA link down (SStatus 0 SControl 300)
[    3.233062] ata2: SATA link down (SStatus 0 SControl 300)
[    3.384422] tsc: Refined TSC clocksource calibration: 3819.247 MHz
[    3.386233] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x6e1abb3f6be, max_idle_ns: 881590761792 ns
[    3.388357] clocksource: Switched to clocksource tsc
[    3.546862] ata3: SATA link down (SStatus 0 SControl 300)
[    3.859988] ata4: SATA link down (SStatus 0 SControl 300)
[    4.173723] ata5: SATA link down (SStatus 0 SControl 300)
[    4.485990] ata6: SATA link down (SStatus 0 SControl 300)
[    4.800108] ata7: SATA link down (SStatus 0 SControl 300)
[    5.113290] ata8: SATA link down (SStatus 0 SControl 300)
[    5.124842] Freeing unused decrypted memory: 2036K
[    5.127293] Freeing unused kernel image (initmem) memory: 2012K
[    5.128839] Write protecting the kernel read-only data: 32768k
[    5.131774] Freeing unused kernel image (text/rodata gap) memory: 2036K
[    5.134151] Freeing unused kernel image (rodata/data gap) memory: 1768K
[    5.193177] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[    5.194740] rodata_test: all tests were successful
[    5.196302] Run /init as init process
[    5.197816]   with arguments:
[    5.199318]     /init
[    5.200791]   with environment:
[    5.202284]     HOME=/
[    5.203786]     TERM=linux
[    5.672103] xhci_hcd 0000:01:00.0: xHCI Host Controller
[    5.674778] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 1
[    5.731851] xhci_hcd 0000:01:00.0: hcc params 0x0200ef81 hci version 0x110 quirks 0x0000000000000410
[    5.736868] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.12
[    5.738700] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.740524] usb usb1: Product: xHCI Host Controller
[    5.742360] usb usb1: Manufacturer: Linux 5.12.0-rc3-debug xhci-hcd
[    5.744342] usb usb1: SerialNumber: 0000:01:00.0
[    5.747557] hub 1-0:1.0: USB hub found
[    5.749393] hub 1-0:1.0: 14 ports detected
[    5.758482] xhci_hcd 0000:01:00.0: xHCI Host Controller
[    5.760257] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 2
[    5.761988] xhci_hcd 0000:01:00.0: Host supports USB 3.1 Enhanced SuperSpeed
[    5.763890] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    5.766015] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.12
[    5.767821] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.769624] usb usb2: Product: xHCI Host Controller
[    5.771537] usb usb2: Manufacturer: Linux 5.12.0-rc3-debug xhci-hcd
[    5.773341] usb usb2: SerialNumber: 0000:01:00.0
[    5.776368] hub 2-0:1.0: USB hub found
[    5.778218] hub 2-0:1.0: 8 ports detected
[    5.786159] xhci_hcd 0000:0c:00.3: xHCI Host Controller
[    5.788013] xhci_hcd 0000:0c:00.3: new USB bus registered, assigned bus number 3
[    5.790016] xhci_hcd 0000:0c:00.3: hcc params 0x0268ffe5 hci version 0x110 quirks 0x0000000000000410
[    5.794538] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.12
[    5.796327] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.798153] usb usb3: Product: xHCI Host Controller
[    5.799989] usb usb3: Manufacturer: Linux 5.12.0-rc3-debug xhci-hcd
[    5.801878] usb usb3: SerialNumber: 0000:0c:00.3
[    5.804989] hub 3-0:1.0: USB hub found
[    5.806943] hub 3-0:1.0: 4 ports detected
[    5.810968] xhci_hcd 0000:0c:00.3: xHCI Host Controller
[    5.812911] xhci_hcd 0000:0c:00.3: new USB bus registered, assigned bus number 4
[    5.814852] xhci_hcd 0000:0c:00.3: Host supports USB 3.1 Enhanced SuperSpeed
[    5.816914] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    5.819226] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.12
[    5.821220] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.823188] usb usb4: Product: xHCI Host Controller
[    5.825148] usb usb4: Manufacturer: Linux 5.12.0-rc3-debug xhci-hcd
[    5.827132] usb usb4: SerialNumber: 0000:0c:00.3
[    5.830304] hub 4-0:1.0: USB hub found
[    5.832356] hub 4-0:1.0: 2 ports detected
[    5.836607] xhci_hcd 0000:0c:00.4: xHCI Host Controller
[    5.838724] xhci_hcd 0000:0c:00.4: new USB bus registered, assigned bus number 5
[    5.841046] xhci_hcd 0000:0c:00.4: hcc params 0x0268ffe5 hci version 0x110 quirks 0x0000000000000410
[    5.845927] usb usb5: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.12
[    5.848104] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.850279] usb usb5: Product: xHCI Host Controller
[    5.852448] usb usb5: Manufacturer: Linux 5.12.0-rc3-debug xhci-hcd
[    5.854628] usb usb5: SerialNumber: 0000:0c:00.4
[    5.857964] hub 5-0:1.0: USB hub found
[    5.860097] hub 5-0:1.0: 4 ports detected
[    5.864318] xhci_hcd 0000:0c:00.4: xHCI Host Controller
[    5.866417] xhci_hcd 0000:0c:00.4: new USB bus registered, assigned bus number 6
[    5.868521] xhci_hcd 0000:0c:00.4: Host supports USB 3.1 Enhanced SuperSpeed
[    5.870764] usb usb6: We don't know the algorithms for LPM for this host, disabling LPM.
[    5.873234] usb usb6: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.12
[    5.875410] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    5.877581] usb usb6: Product: xHCI Host Controller
[    5.879736] usb usb6: Manufacturer: Linux 5.12.0-rc3-debug xhci-hcd
[    5.881917] usb usb6: SerialNumber: 0000:0c:00.4
[    5.885175] hub 6-0:1.0: USB hub found
[    5.887373] hub 6-0:1.0: 2 ports detected
[    5.972196] random: fast init done
[    6.087608] usb 1-11: new full-speed USB device number 2 using xhci_hcd
[    6.273180] SGI XFS with ACLs, security attributes, realtime, scrub, repair, quota, no debug enabled
[    6.283881] XFS (nvme0n1p2): Mounting V5 Filesystem
[    6.301438] XFS (nvme0n1p2): Ending clean mount
[    6.307594] xfs filesystem being mounted at /new_root supports timestamps until 2038 (0x7fffffff)
[    6.423979] usb 1-11: New USB device found, idVendor=046d, idProduct=c534, bcdDevice=29.01
[    6.426964] usb 1-11: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    6.429116] usb 1-11: Product: USB Receiver
[    6.431270] usb 1-11: Manufacturer: Logitech
[    6.512460] random: crng init done
[    6.514601] systemd[1]: Successfully credited entropy passed from boot loader.
[    6.519182] systemd[1]: systemd 248.3-2-arch running in system mode. (+PAM +AUDIT -SELINUX -APPARMOR -IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY +P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +XKBCOMMON +UTMP -SYSVINIT default-hierarchy=unified)
[    6.526303] systemd[1]: No virtualization found in DMI
[    6.544505] systemd[1]: UML virtualization not found in /proc/cpuinfo.
[    6.547123] systemd[1]: No virtualization found in CPUID
[    6.549421] systemd[1]: Virtualization XEN not found, /proc/xen does not exist
[    6.551947] systemd[1]: This platform does not support /proc/device-tree
[    6.554174] systemd[1]: This platform does not support /proc/sysinfo
[    6.556362] systemd[1]: Found VM virtualization none
[    6.558608] systemd[1]: Detected architecture x86-64.
[    6.561488] systemd[1]: Detected initialized system, this is not the first boot.
[    6.572027] systemd[1]: Hostname set to <hp-4300G>.
[    6.575932] systemd[1]: Successfully added address 127.0.0.1 to loopback interface
[    6.578272] systemd[1]: Successfully added address ::1 to loopback interface
[    6.580513] systemd[1]: Successfully brought loopback interface up
[    6.583278] systemd[1]: Setting 'fs/file-max' to '9223372036854775807'.
[    6.585597] systemd[1]: Setting 'fs/nr_open' to '2147483640'.
[    6.587895] systemd[1]: Couldn't write fs.nr_open as 2147483640, halving it.
[    6.590142] systemd[1]: Setting 'fs/nr_open' to '1073741816'.
[    6.592386] systemd[1]: Successfully bumped fs.nr_open to 1073741816
[    6.596797] systemd[1]: Found cgroup2 on /sys/fs/cgroup/, full unified hierarchy
[    6.599105] systemd[1]: Unified cgroup hierarchy is located at /sys/fs/cgroup.
[    6.612552] systemd[1]: Got EBADF when using BPF_F_ALLOW_MULTI, which indicates it is supported. Yay!
[    6.615700] systemd[1]: Controller 'cpu' supported: yes
[    6.618063] systemd[1]: Controller 'cpuacct' supported: no
[    6.620391] systemd[1]: Controller 'cpuset' supported: yes
[    6.622710] systemd[1]: Controller 'io' supported: yes
[    6.624999] systemd[1]: Controller 'blkio' supported: no
[    6.627232] systemd[1]: Controller 'memory' supported: yes
[    6.629416] systemd[1]: Controller 'devices' supported: no
[    6.631609] systemd[1]: Controller 'pids' supported: yes
[    6.633741] systemd[1]: Controller 'bpf-firewall' supported: yes
[    6.635832] systemd[1]: Controller 'bpf-devices' supported: yes
[    6.637483] usb 1-12: new full-speed USB device number 3 using xhci_hcd
[    6.638244] systemd[1]: Set up TFD_TIMER_CANCEL_ON_SET timerfd.
[    6.643315] systemd[1]: Enabling (yes) showing of status (commandline).
[    6.646012] systemd[1]: Serializing system-environment-generators to memfd.
[    6.649222] systemd[1]: Successfully forked off '(sd-executor)' as PID 242.
[    6.650166] systemd[242]: Serializing 10-arch to memfd.
[    6.654825] systemd[242]: Successfully forked off '(direxec)' as PID 243.
[    6.676007] systemd[242]: /usr/lib/systemd/system-environment-generators/10-arch succeeded.
[    6.680054] systemd[1]: (sd-executor) succeeded.
[    6.683877] systemd[1]: Successfully forked off '(sd-executor)' as PID 244.
[    6.687068] systemd[244]: Successfully forked off '(direxec)' as PID 245.
[    6.690471] systemd[244]: Successfully forked off '(direxec)' as PID 246.
[    6.693787] systemd[244]: Successfully forked off '(direxec)' as PID 247.
[    6.694955] systemd-bless-boot-generator[245]: Skipping generator, not booted with boot counting in effect.
[    6.697112] systemd[244]: Successfully forked off '(direxec)' as PID 248.
[    6.703122] systemd[244]: Successfully forked off '(direxec)' as PID 249.
[    6.707898] systemd[244]: Successfully forked off '(direxec)' as PID 250.
[    6.708383] systemd-fstab-generator[248]: Parsing /etc/fstab...
[    6.712179] systemd[244]: Successfully forked off '(direxec)' as PID 251.
[    6.713256] systemd-fstab-generator[248]: Found entry what=tmpfs where=/tmp type=tmpfs makefs=no growfs=no noauto=no nofail=no
[    6.715761] systemd-gpt-auto-generator[250]: Disabling root partition auto-detection, root= is defined.
[    6.717146] systemd[244]: Successfully forked off '(direxec)' as PID 252.
[    6.719246] systemd[244]: Successfully forked off '(direxec)' as PID 253.
[    6.719689] systemd-hibernate-resume-generator[251]: Not running in an initrd, quitting.
[    6.721290] systemd[244]: Successfully forked off '(direxec)' as PID 254.
[    6.721414] systemd[244]: /usr/lib/systemd/system-generators/systemd-bless-boot-generator succeeded.
[    6.721802] systemd-fstab-generator[248]: Found entry what=/dev/disk/by-uuid/5457d04f-1fb0-4138-8f28-be95c401b449 where=/ type=xfs makefs=no growfs=no noauto=no nofail=no
[    6.725160] systemd-gpt-auto-generator[250]: Failed to chase block device '/', ignoring: No such file or directory
[    6.728250] systemd-fstab-generator[248]: Found entry what=
[    6.730487] systemd[244]: /usr/lib/systemd/system-generators/systemd-veritysetup-generator succeeded.
[    6.731508] systemd-gpt-auto-generator[250]: nvme0n1p2: Root device /dev/nvme0n1.
[    6.732467] systemd-fstab-generator[248]:  where= type= makefs=no growfs=no noauto=no nofail=no
[    6.735097] systemd[244]: /usr/lib/systemd/system-generators/systemd-debug-generator succeeded.
[    6.737246] systemd-fstab-generator[248]: Mount point  is not a valid path, ignoring.
[    6.759523] systemd-fstab-generator[248]: Found entry what=/dev/disk/by-uuid/BABE-8F35 where=/boot type=vfat makefs=no growfs=no noauto=no nofail=no
[    6.759864] systemd-fstab-generator[248]: Checking was requested for /dev/disk/by-uuid/BABE-8F35, but fsck.vfat does not exist.
[    6.767403] systemd[244]: /usr/lib/systemd/system-generators/systemd-getty-generator succeeded.
[    6.770973] systemd-fstab-generator[248]: Found entry what=
[    6.772029] systemd-gpt-auto-generator[250]: /boot specified in fstab, ignoring.
[    6.773734] systemd[244]: /usr/lib/systemd/system-generators/systemd-gpt-auto-generator succeeded.
[    6.776211] systemd-fstab-generator[248]:  where= type= makefs=no growfs=no noauto=no nofail=no
[    6.778971] systemd[244]: /usr/lib/systemd/system-generators/systemd-cryptsetup-generator succeeded.
[    6.781788] systemd-fstab-generator[248]: Mount point  is not a valid path, ignoring.
[    6.784696] systemd[244]: /usr/lib/systemd/system-generators/systemd-run-generator succeeded.
[    6.793437] systemd[244]: /usr/lib/systemd/system-generators/systemd-fstab-generator succeeded.
[    6.796378] systemd[244]: /usr/lib/systemd/system-generators/systemd-system-update-generator succeeded.
[    6.799363] systemd[244]: /usr/lib/systemd/system-generators/systemd-hibernate-resume-generator succeeded.
[    6.803548] systemd[1]: (sd-executor) succeeded.
[    6.806739] systemd[1]: Looking for unit files in (higher priority first):
[    6.809609] systemd[1]: 	/etc/systemd/system.control
[    6.812462] systemd[1]: 	/run/systemd/system.control
[    6.815276] systemd[1]: 	/run/systemd/transient
[    6.818037] systemd[1]: 	/run/systemd/generator.early
[    6.820789] systemd[1]: 	/etc/systemd/system
[    6.823485] systemd[1]: 	/etc/systemd/system.attached
[    6.826236] systemd[1]: 	/run/systemd/system
[    6.828956] systemd[1]: 	/run/systemd/system.attached
[    6.831666] systemd[1]: 	/run/systemd/generator
[    6.834269] systemd[1]: 	/usr/local/lib/systemd/system
[    6.836896] systemd[1]: 	/usr/lib/systemd/system
[    6.839528] systemd[1]: 	/run/systemd/generator.late
[    6.845675] systemd[1]: Modification times have changed, need to update cache.
[    6.850304] systemd[1]: unit_file_build_name_map: alias: /etc/systemd/system/dbus-org.freedesktop.network1.service \xe2\x86\x92 systemd-networkd.service
[    6.856480] systemd[1]: unit_file_build_name_map: alias: /etc/systemd/system/dbus-org.freedesktop.resolve1.service \xe2\x86\x92 systemd-resolved.service
[    6.863257] systemd[1]: unit_file_build_name_map: alias: /etc/systemd/system/display-manager.service \xe2\x86\x92 lightdm.service
[    6.866353] systemd[1]: unit_file_build_name_map: normal unit file: /run/systemd/generator/boot.mount
[    6.869294] systemd[1]: unit_file_build_name_map: normal unit file: /run/systemd/generator/-.mount
[    6.872181] systemd[1]: unit_file_build_name_map: normal unit file: /run/systemd/generator/tmp.mount
[    6.875369] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/nscd.service
[    6.878183] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/e2scrub@.service
[    6.880963] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/e2scrub_all.service
[    6.883569] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/e2scrub_all.timer
[    6.886114] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/e2scrub_fail@.service
[    6.888620] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/e2scrub_reap.service
[    6.891050] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/krb5-kadmind.service
[    6.893434] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/krb5-kdc.service
[    6.895760] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/krb5-kpropd.service
[    6.898037] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/krb5-kpropd.socket
[    6.900256] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/krb5-kpropd@.service
[    6.902397] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/auditd.service
[    6.904446] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/pam_namespace.service
[    6.906420] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/shadow.service
[    6.908333] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/shadow.timer
[    6.910192] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/fstrim.service
[    6.912016] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/fstrim.timer
[    6.913777] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/rfkill-block@.service
[    6.915500] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/rfkill-unblock@.service
[    6.917175] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/uuidd.service
[    6.918800] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/uuidd.socket
[    6.920355] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/dm-event.service
[    6.921915] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/dm-event.socket
[    6.923449] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/dbus.service
[    6.924964] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/dbus.socket
[    6.926407] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/ip6tables.service
[    6.927831] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/iptables.service
[    6.930110] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/autovt@.service \xe2\x86\x92 getty@.service
[    6.931600] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/basic.target
[    6.933085] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/blockdev@.target
[    6.934657] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/bluetooth.target
[    6.936130] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/boot-complete.target
[    6.937632] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/console-getty.service
[    6.939126] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/container-getty@.service
[    6.940631] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/cryptsetup-pre.target
[    6.942179] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/cryptsetup.target
[    6.944347] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/ctrl-alt-del.target \xe2\x86\x92 reboot.target
[    6.946586] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service \xe2\x86\x92 systemd-hostnamed.service
[    6.948141] usb 1-12: New USB device found, idVendor=0bda, idProduct=b00a, bcdDevice= 1.10
[    6.949923] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.import1.service \xe2\x86\x92 systemd-importd.service
[    6.951214] usb 1-12: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    6.951218] usb 1-12: Product: Bluetooth Radio 
[    6.951221] usb 1-12: Manufacturer: Realtek 
[    6.951224] usb 1-12: SerialNumber: 00e04c000001
[    6.960240] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.locale1.service \xe2\x86\x92 systemd-localed.service
[    6.963512] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.login1.service \xe2\x86\x92 systemd-logind.service
[    6.967129] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.machine1.service \xe2\x86\x92 systemd-machined.service
[    6.971105] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.oom1.service \xe2\x86\x92 systemd-oomd.service
[    6.975430] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.portable1.service \xe2\x86\x92 systemd-portabled.service
[    6.980097] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/dbus-org.freedesktop.timedate1.service \xe2\x86\x92 systemd-timedated.service
[    6.984954] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/debug-shell.service
[    6.987737] systemd[1]: unit_file_build_name_map: alias: /usr/lib/systemd/system/default.target \xe2\x86\x92 graphical.target
[    6.990354] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/dev-hugepages.mount
[    6.993004] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/dev-mqueue.mount
[    6.995660] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/emergency.service
[    6.998322] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/emergency.target
[    7.000974] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/exit.target
[    7.003615] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/final.target
[    7.006254] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/first-boot-complete.target
[    7.008911] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/getty-pre.target
[    7.011574] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/getty.target
[    7.014226] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/getty@.service
[    7.016876] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/graphical.target
[    7.019531] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/halt.target
[    7.022186] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/hibernate.target
[    7.024847] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/hybrid-sleep.target
[    7.027513] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-cleanup.service
[    7.030139] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-fs.target
[    7.032744] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-parse-etc.service
[    7.035352] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-root-device.target
[    7.037972] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-root-fs.target
[    7.040576] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-switch-root.service
[    7.043185] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-switch-root.target
[    7.045788] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd-udevadm-cleanup-db.service
[    7.048385] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/initrd.target
[    7.050982] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/kexec.target
[    7.053539] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/kmod-static-nodes.service
[    7.056091] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/ldconfig.service
[    7.058560] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/local-fs-pre.target
[    7.061013] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/local-fs.target
[    7.063340] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/machine.slice
[    7.065635] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/machines.target
[    7.067821] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/modprobe@.service
[    7.069984] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/multi-user.target
[    7.072149] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/network-online.target
[    7.074314] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/network-pre.target
[    7.076390] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/network.target
[    7.078380] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/nss-lookup.target
[    7.080285] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/nss-user-lookup.target
[    7.082114] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/paths.target
[    7.083838] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/poweroff.target
[    7.085486] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/printer.target
[    7.087037] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/proc-sys-fs-binfmt_misc.automount
[    7.088535] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/proc-sys-fs-binfmt_misc.mount
[    7.089934] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/quotaon.service
[    7.091252] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/reboot.target
[    7.092494] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/remote-cryptsetup.target
[    7.093651] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/remote-fs-pre.target
[    7.094730] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/remote-fs.target
[    7.095759] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/remote-veritysetup.target
[    7.096760] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/rescue.service
[    7.097755] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/rescue.target
[    7.098738] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/rpcbind.target
[    7.099729] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/serial-getty@.service
[    7.100725] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/shutdown.target
[    7.101726] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sigpwr.target
[    7.102714] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sleep.target
[    7.103691] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/slices.target
[    7.104668] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/smartcard.target
[    7.105647] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sockets.target
[    7.106628] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sound.target
[    7.107608] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/suspend-then-hibernate.target
[    7.108608] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/suspend.target
[    7.109596] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/swap.target
[    7.110574] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sys-fs-fuse-connections.mount
[    7.111581] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sys-kernel-config.mount
[    7.112589] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sys-kernel-debug.mount
[    7.113585] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sys-kernel-tracing.mount
[    7.114596] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/sysinit.target
[    7.115592] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/syslog.socket
[    7.116586] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/system-systemd\x2dcryptsetup.slice
[    7.118571] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/system-update-cleanup.service
[    7.119742] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/system-update-pre.target
[    7.120901] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/system-update.target
[    7.122044] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-ask-password-console.path
[    7.123206] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-ask-password-console.service
[    7.125488] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-ask-password-wall.path
[    7.126811] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-ask-password-wall.service
[    7.128135] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-backlight@.service
[    7.129455] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-binfmt.service
[    7.130771] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-bless-boot.service
[    7.132096] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-boot-check-no-failures.service
[    7.134745] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-boot-system-token.service
[    7.136252] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-coredump.socket
[    7.137755] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-coredump@.service
[    7.139256] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-exit.service
[    7.140757] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-firstboot.service
[    7.142252] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-fsck-root.service
[    7.143740] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-fsck@.service
[    7.145216] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-halt.service
[    7.146691] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-hibernate-resume@.service
[    7.148178] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-hibernate.service
[    7.149658] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-homed-activate.service
[    7.151143] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-homed.service
[    7.152627] systemd[1]: unit_file_build_name_map: normal unit file: /usr/lib/systemd/system/systemd-hostnamed.service
[    7.324732] Linux agpgart interface v0.103
[    7.339568] fuse: init (API version 7.33)
[    7.355563] systemd-journald[265]: Auditing in kernel turned on.
[    7.359014] systemd-journald[265]: Journal effective settings seal=no keyed_hash=yes compress=yes compress_threshold_bytes=512B
[    7.359112] systemd-journald[265]: Fixed min_use=16.0M max_use=313.3M max_size=39.1M min_size=512.0K keep_free=156.6M n_max_files=100
[    7.367696] XFS: attr2 mount option is deprecated.
[    7.368118] systemd-journald[265]: Reserving 333 entries in field hash table.
[    7.372374] xfs filesystem being remounted at / supports timestamps until 2038 (0x7fffffff)
[    7.374992] Asymmetric key parser 'pkcs8' registered
[    7.377914] systemd-journald[265]: Reserving 71310 entries in data hash table.
[    7.381564] systemd-journald[265]: Vacuuming...
[    7.381627] systemd-journald[265]: Vacuuming done, freed 0B of archived journals from /run/log/journal/983425690c9a4432866996cdc56b7fd4.
[    7.381665] systemd-journald[265]: Flushing /dev/kmsg...
[    7.404037] audit: type=1130 audit(1625291560.226:2): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=kmod-static-nodes comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.412624] audit: type=1130 audit(1625291560.236:3): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=modprobe@configfs comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.419004] audit: type=1131 audit(1625291560.236:4): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=modprobe@configfs comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.427185] audit: type=1130 audit(1625291560.249:5): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=modprobe@drm comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.434060] audit: type=1131 audit(1625291560.249:6): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=modprobe@drm comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.444751] audit: type=1130 audit(1625291560.266:7): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=modprobe@fuse comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.451199] audit: type=1131 audit(1625291560.266:8): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=modprobe@fuse comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.462023] audit: type=1130 audit(1625291560.286:9): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-modules-load comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.472536] audit: type=1130 audit(1625291560.296:10): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-remount-fs comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.554217] audit: type=1130 audit(1625291560.376:11): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-binfmt comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[    7.619871] systemd-journald[265]: systemd-journald running as PID 265 for the system.
[    7.620170] systemd-journald[265]: Sent READY=1 notification.
[    7.620230] systemd-journald[265]: Sent WATCHDOG=1 notification.
[    7.622326] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.636767] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.640546] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.645323] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.649119] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.649502] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.649868] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.650251] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.650623] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.651251] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.651514] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.652468] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.677672] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.680654] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.681201] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.681611] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.682019] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.682430] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.683685] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.698929] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.702646] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.711638] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    7.721958] systemd-journald[265]: n/a: New incoming connection.
[    7.723759] systemd-journald[265]: varlink-20: varlink: setting state idle-server
[    7.726435] systemd-journald[265]: varlink-20: New incoming message: {"method":"io.systemd.Journal.FlushToVar","parameters":{}}
[    7.730145] systemd-journald[265]: varlink-20: varlink: changing state idle-server \xe2\x86\x92 processing-method
[    7.732073] systemd-journald[265]: Received client request to flush runtime journal.
[    7.734994] systemd-journald[265]: Journal effective settings seal=yes keyed_hash=yes compress=yes compress_threshold_bytes=512B
[    7.741586] systemd-journald[265]: Fixed min_use=16.0M max_use=4.0G max_size=128.0M min_size=512.0K keep_free=4.0G n_max_files=100
[    7.758328] systemd-journald[265]: Flushing to /var/log/journal/983425690c9a4432866996cdc56b7fd4...
[    7.760632] systemd-journald[265]: Considering root directory '/run/log/journal'.
[    7.762999] systemd-journald[265]: Root directory /run/log/journal added.
[    7.765265] systemd-journald[265]: Considering directory '/run/log/journal/983425690c9a4432866996cdc56b7fd4'.
[    7.767501] systemd-journald[265]: Directory /run/log/journal/983425690c9a4432866996cdc56b7fd4 added.
[    7.769900] systemd-journald[265]: Journal effective settings seal=no keyed_hash=yes compress=no compress_threshold_bytes=8B
[    7.772279] systemd-journald[265]: File /run/log/journal/983425690c9a4432866996cdc56b7fd4/system.journal added.
[    7.774603] systemd-journald[265]: Considering root directory '/var/log/journal'.
[    7.776898] systemd-journald[265]: Considering root directory '/var/log/journal/remote'.
[    8.150185] systemd-journald[265]: Root directory /run/log/journal removed.
[    8.152553] systemd-journald[265]: Directory /run/log/journal/983425690c9a4432866996cdc56b7fd4 removed.
[    8.154907] systemd-journald[265]: mmap cache statistics: 109427 context cache hit, 3 window list hit, 1 miss
[    8.157320] systemd-journald[265]: Journal effective settings seal=no keyed_hash=yes compress=yes compress_threshold_bytes=512B
[    8.162642] systemd-journald[265]: Vacuuming...
[    8.221524] systemd-journald[265]: Vacuuming done, freed 0B of archived journals from /var/log/journal/983425690c9a4432866996cdc56b7fd4.
[    8.232172] systemd-journald[265]: varlink-20: Sending message: {"parameters":{}}
[    8.234888] systemd-journald[265]: varlink-20: varlink: changing state processing-method \xe2\x86\x92 processed-method
[    8.237737] systemd-journald[265]: varlink-20: varlink: changing state processed-method \xe2\x86\x92 idle-server
[    8.243581] systemd-journald[265]: varlink-20: Got POLLHUP from socket.
[    8.246412] systemd-journald[265]: varlink-20: varlink: changing state idle-server \xe2\x86\x92 pending-disconnect
[    8.249306] systemd-journald[265]: varlink-20: varlink: changing state pending-disconnect \xe2\x86\x92 processing-disconnect
[    8.252261] systemd-journald[265]: varlink-20: varlink: changing state processing-disconnect \xe2\x86\x92 disconnected
[    8.308619] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    8.517310] acpi_cpufreq: overriding BIOS provided _PSD data
[    8.540118] acpi-tad ACPI000E:00: Missing _PRW
[    8.607758] ACPI: video: Video Device [VGA1] (multi-head: yes  rom: no  post: no)
[    8.618373] acpi device:1e: registered as cooling_device8
[    8.626848] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1d/LNXVIDEO:01/input/input2
[    8.825614] acpi PNP0C14:01: duplicate WMI GUID 05901221-D566-11D1-B2F0-00A0C9062910 (first instance was on PNP0C14:00)
[    8.902194] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.0/0003:046D:C534.0001/input/input3
[    8.939361] ccp 0000:0c:00.2: enabling device (0100 -> 0102)
[    8.955972] ccp 0000:0c:00.2: ccp: unable to access the device: you might be running a broken BIOS.
[    8.963592] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    8.970655] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:01:00.0-11/input0
[    8.971435] ccp 0000:0c:00.2: tee enabled
[    8.983107] ccp 0000:0c:00.2: psp enabled
[    8.993491] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, revision 0
[    8.997884] piix4_smbus 0000:00:14.0: Using register 0x02 for SMBus port selection
[    9.001767] piix4_smbus 0000:00:14.0: Auxiliary SMBus Host Controller at 0xb20
[    9.007282] input: Logitech USB Receiver Mouse as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/input/input4
[    9.019415] input: Logitech USB Receiver Consumer Control as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/input/input5
[    9.034973] input: PC Speaker as /devices/platform/pcspkr/input/input9
[    9.046118] FAT-fs (nvme0n1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[    9.054500] sp5100_tco: SP5100/SB800 TCO WatchDog Timer Driver
[    9.057035] sp5100-tco sp5100-tco: Using 0xfeb00000 for watchdog MMIO address
[    9.059986] sp5100-tco sp5100-tco: initialized. heartbeat=60 sec (nowayout=0)
[    9.081027] libphy: r8169: probed
[    9.082100] input: Logitech USB Receiver System Control as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/input/input6
[    9.087214] r8169 0000:0a:00.0 eth0: RTL8168h/8111h, 00:68:eb:ad:98:43, XID 541, IRQ 91
[    9.094618] hid-generic 0003:046D:C534.0002: input,hiddev96,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:01:00.0-11/input1
[    9.097120] r8169 0000:0a:00.0 eth0: jumbo features [frames: 9194 bytes, tx checksumming: ko]
[    9.104420] usbcore: registered new interface driver usbhid
[    9.112544] usbhid: USB HID core driver
[    9.124878] Bluetooth: Core ver 2.22
[    9.130875] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    9.144288] NET: Registered protocol family 31
[    9.149041] Bluetooth: HCI device and connection manager initialized
[    9.153017] Bluetooth: HCI socket layer initialized
[    9.156925] Bluetooth: L2CAP socket layer initialized
[    9.160735] Bluetooth: SCO socket layer initialized
[    9.209776] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    9.215973] RAPL PMU: API unit is 2^-32 Joules, 1 fixed counters, 163840 ms ovfl timer
[    9.237135] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    9.242388] RAPL PMU: hw unit of domain package 2^-16 Joules
[    9.243515] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    9.251002] cfg80211: failed to load regulatory.db
[    9.258468] usbcore: registered new interface driver btusb
[    9.263470] Bluetooth: hci0: RTL: examining hci_ver=08 hci_rev=000c lmp_ver=08 lmp_subver=8821
[    9.271407] Bluetooth: hci0: RTL: rom_version status=0 version=1
[    9.276096] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_fw.bin
[    9.282586] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_config.bin
[    9.286578] cryptd: max_cpu_qlen set to 1000
[    9.290204] Bluetooth: hci0: RTL: cfg_sz 10, total sz 31990
[    9.304981] irq 7: nobody cared (try booting with the "irqpoll" option)
[    9.308994] CPU: 4 PID: 308 Comm: systemd-udevd Tainted: G    B             5.12.0-rc3-debug #1
[    9.313266] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[    9.317902] Call Trace:
[    9.322386]  <IRQ>
[    9.326452]  dump_stack+0x9c/0xcf
[    9.330599]  __report_bad_irq+0x43/0xde
[    9.334691]  note_interrupt.cold+0x28/0x8b
[    9.339026]  ? add_interrupt_randomness+0x152/0x270
[    9.343255]  handle_irq_event+0x14e/0x160
[    9.347069]  ? handle_irq_event_percpu+0xf0/0xf0
[    9.350865]  ? _raw_spin_lock+0x81/0xe0
[    9.354551]  ? _raw_spin_lock_bh+0xe0/0xe0
[    9.358106]  handle_fasteoi_irq+0xfa/0x370
[    9.361574]  __common_interrupt+0x4f/0xc0
[    9.365067]  common_interrupt+0x7b/0xa0
[    9.368562]  </IRQ>
[    9.371968]  asm_common_interrupt+0x1e/0x40
[    9.375328] RIP: 0010:mpihelp_submul_1+0x4a/0x100
[    9.378586] Code: 48 83 ec 20 48 89 5c 24 08 31 db 48 89 7c 24 10 48 89 74 24 18 48 89 04 24 eb 03 49 63 c5 48 2b 04 24 4c 8d 34 c5 00 00 00 00 <48> 8b 44 24 18 4e 8d 24 30 4c 89 e7 e8 55 85 c4 ff 49 8b 34 24 48
[    9.385354] RSP: 0018:ffffc90001dc7360 EFLAGS: 00000202
[    9.388625] RAX: 000000000000003d RBX: 58b15c7a1664d4fd RCX: ffffffff92809c85
[    9.391896] RDX: dffffc0000000000 RSI: 95a5834bb0a7f6e5 RDI: ffff8881035301e8
[    9.395056] RBP: 00000000901b3ef1 R08: 6ee397ce901b3ef1 R09: 000000003f8f75f4
[    9.398127] R10: fffffbfff298d729 R11: 0000000000000001 R12: 7c892be55ef82e4f
[    9.401275] R13: 00000000fffffffd R14: 00000000000001e8 R15: 58b15c7972392b28
[    9.404440]  ? mpihelp_submul_1+0xd5/0x100
[    9.407665]  mpihelp_divrem+0x167/0x9e0
[    9.410828]  mpi_powm+0x86e/0xe00
[    9.413898]  ? mpihelp_mul_karatsuba_case+0x5b0/0x5b0
[    9.416845]  ? asm_common_interrupt+0x1e/0x40
[    9.419918]  ? __sg_page_iter_next+0xa7/0x100
[    9.422804]  ? mpihelp_cmp+0x4f/0x80
[    9.425790]  rsa_enc+0x140/0x1f0
[    9.428676]  ? rsa_dec+0x1f0/0x1f0
[    9.431576]  pkcs1pad_verify+0x296/0x320
[    9.434458]  public_key_verify_signature+0x548/0x6f0
[    9.437358]  ? software_key_eds_op+0x620/0x620
[    9.440180]  ? keyring_search+0x136/0x190
[    9.442934]  ? common_interrupt+0x1c/0xa0
[    9.445676]  ? asm_common_interrupt+0x1e/0x40
[    9.448371]  ? pkcs7_validate_trust+0x2f7/0x330
[    9.451023]  pkcs7_validate_trust+0x303/0x330
[    9.453667]  verify_pkcs7_message_sig+0xe2/0x190
[    9.456285]  ? restrict_link_by_builtin_trusted+0x20/0x20
[    9.458959]  ? kfree+0xc3/0x480
[    9.461558]  verify_pkcs7_signature+0x4c/0x80
[    9.464115]  mod_verify_sig+0xe6/0x130
[    9.466542]  ? is_module_text_address+0x30/0x30
[    9.469037]  ? common_interrupt+0x1c/0xa0
[    9.471471]  load_module+0x48f/0x41a0
[    9.473945]  ? __kernel_read+0x338/0x4f0
[    9.476449]  ? __kernel_read+0x340/0x4f0
[    9.478938]  ? __x64_sys_sendfile64+0x140/0x140
[    9.481427]  ? module_frob_arch_sections+0x20/0x20
[    9.481442]  ? kernel_read+0x46/0xb0
[    9.481450]  ? kernel_read_file+0x1d2/0x3e0
[    9.481458]  ? __x64_sys_fspick+0x230/0x230
[    9.481464]  ? kasan_check_range+0x185/0x1d0
[    9.481470]  ? _raw_write_unlock+0x30/0x30
[    9.481478]  ? __do_sys_finit_module+0x110/0x1a0
[    9.481484]  __do_sys_finit_module+0x110/0x1a0
[    9.481491]  ? __ia32_sys_init_module+0x40/0x40
[    9.481496]  ? get_nth_filter.part.0+0x170/0x170
[    9.481503]  ? rcu_momentary_dyntick_idle+0x50/0x50
[    9.481512]  ? __do_softirq+0x209/0x3be
[    9.481517]  ? __audit_syscall_entry+0x193/0x1f0
[    9.481522]  ? ktime_get_coarse_real_ts64+0x4a/0x70
[    9.516734]  do_syscall_64+0x33/0x40
[    9.516747]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[    9.516754] RIP: 0033:0x7f079a72618d
[    9.516759] Code: b4 0c 00 0f 05 eb a9 66 0f 1f 44 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b3 6c 0c 00 f7 d8 64 89 01 48
[    9.516763] RSP: 002b:00007ffdde055848 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[    9.516768] RAX: ffffffffffffffda RBX: 0000559b1868c870 RCX: 00007f079a72618d
[    9.516772] RDX: 0000000000000000 RSI: 00007f079a883a9d RDI: 0000000000000015
[    9.516774] RBP: 0000000000020000 R08: 0000000000000000 R09: 0000559b1868c870
[    9.516777] R10: 0000000000000015 R11: 0000000000000246 R12: 00007f079a883a9d
[    9.516779] R13: 0000000000000000 R14: 0000559b1869b820 R15: 0000559b1868c870
[    9.516785] handlers:
[    9.516786] [<00000000619962db>] amd_gpio_irq_handler [pinctrl_amd]
[    9.516796] Disabling IRQ #7
[    9.518500] AVX2 version of gcm_enc/dec engaged.
[    9.518550] AES CTR mode by8 optimization enabled
[    9.518794] snd_hda_intel 0000:0c:00.1: enabling device (0100 -> 0102)
[    9.519962] snd_hda_intel 0000:0c:00.1: Handle vga_switcheroo audio client
[    9.570729] snd_hda_intel 0000:0c:00.6: enabling device (0100 -> 0102)
[    9.614031] input: HD-Audio Generic HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:08.1/0000:0c:00.1/sound/card0/input10
[    9.705675] snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC671: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:line
[    9.708420] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    9.708761] snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    9.714896] snd_hda_codec_realtek hdaudioC1D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[    9.718876] snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=0x0
[    9.718897] snd_hda_codec_realtek hdaudioC1D0:    inputs:
[    9.718904] snd_hda_codec_realtek hdaudioC1D0:      Mic=0x19
[    9.718915] snd_hda_codec_realtek hdaudioC1D0:      Line=0x1b
[    9.749261] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    9.770716] input: HD-Audio Generic Mic as /devices/pci0000:00/0000:00:08.1/0000:0c:00.6/sound/card1/input11
[    9.771375] input: HD-Audio Generic Line as /devices/pci0000:00/0000:00:08.1/0000:0c:00.6/sound/card1/input12
[    9.771987] input: HD-Audio Generic Line Out as /devices/pci0000:00/0000:00:08.1/0000:0c:00.6/sound/card1/input13
[    9.772603] input: HD-Audio Generic Front Headphone as /devices/pci0000:00/0000:00:08.1/0000:0c:00.6/sound/card1/input14
[    9.797844] rtw_8821ce 0000:09:00.0: enabling device (0100 -> 0103)
[    9.798837] rtw_8821ce 0000:09:00.0: Firmware version 24.8.0, H2C version 12
[    9.861369] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    9.920626] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[    9.968295] kvm: Nested Virtualization enabled
[    9.970665] [drm] amdgpu kernel modesetting enabled.
[    9.971787] SVM: kvm: Nested Paging enabled
[    9.975655] Virtual CRAT table created for CPU
[    9.977941] SVM: Virtual VMLOAD VMSAVE supported
[    9.977945] SVM: Virtual GIF supported
[    9.989227] amdgpu: Topology: Add CPU node
[    9.993923] checking generic (d0000000 300000) vs hw (d0000000 10000000)
[    9.998240] fb0: switching to amdgpudrmfb from EFI VGA
[   10.002978] Console: switching to colour dummy device 80x25
[   10.003328] amdgpu 0000:0c:00.0: vgaarb: deactivate vga console
[   10.004163] amdgpu 0000:0c:00.0: enabling device (0106 -> 0107)
[   10.005925] [drm] initializing kernel modesetting (RENOIR 0x1002:0x1636 0x103C:0x87D6 0xCA).
[   10.005985] amdgpu 0000:0c:00.0: amdgpu: Trusted Memory Zone (TMZ) feature disabled as experimental (default)
[   10.006259] [drm] register mmio base: 0xFCA00000
[   10.006288] [drm] register mmio size: 524288
[   10.006317] [drm] PCIE atomic ops is not supported
[   10.007372] [drm] add ip block number 0 <soc15_common>
[   10.007411] [drm] add ip block number 1 <gmc_v9_0>
[   10.007474] [drm] add ip block number 2 <vega10_ih>
[   10.007492] [drm] add ip block number 3 <psp>
[   10.007498] [drm] add ip block number 4 <smu>
[   10.007505] [drm] add ip block number 5 <gfx_v9_0>
[   10.007512] [drm] add ip block number 6 <sdma_v4_0>
[   10.007520] [drm] add ip block number 7 <dm>
[   10.007527] [drm] add ip block number 8 <vcn_v2_0>
[   10.007562] [drm] add ip block number 9 <jpeg_v2_0>
[   10.007700] amdgpu 0000:0c:00.0: amdgpu: Fetched VBIOS from VFCT
[   10.007815] amdgpu: ATOM BIOS: 113-RENOIR-026
[   10.010428] [drm] VCN decode is enabled in VM mode
[   10.010443] [drm] VCN encode is enabled in VM mode
[   10.010448] [drm] JPEG decode is enabled in VM mode
[   10.011043] [drm] vm size is 262144 GB, 4 levels, block size is 9-bit, fragment size is 9-bit
[   10.011118] amdgpu 0000:0c:00.0: amdgpu: VRAM: 512M 0x000000F400000000 - 0x000000F41FFFFFFF (512M used)
[   10.011133] amdgpu 0000:0c:00.0: amdgpu: GART: 1024M 0x0000000000000000 - 0x000000003FFFFFFF
[   10.011146] amdgpu 0000:0c:00.0: amdgpu: AGP: 267419648M 0x000000F800000000 - 0x0000FFFFFFFFFFFF
[   10.011192] [drm] Detected VRAM RAM=512M, BAR=512M
[   10.011201] [drm] RAM width 64bits DDR4
[   10.011685] [TTM] Zone  kernel: Available graphics memory: 3208866 KiB
[   10.011699] [TTM] Zone   dma32: Available graphics memory: 2097152 KiB
[   10.046111] MCE: In-kernel MCE decoding enabled.
[   10.050870] [drm] amdgpu: 512M of VRAM memory ready
[   10.050941] [drm] amdgpu: 3072M of GTT memory ready.
[   10.051000] general protection fault, probably for non-canonical address 0xff2439eaff279143: 0000 [#1] PREEMPT SMP KASAN NOPTI
[   10.051018] CPU: 1 PID: 294 Comm: systemd-udevd Tainted: G    B             5.12.0-rc3-debug #1
[   10.051033] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[   10.051043] RIP: 0010:native_queued_spin_lock_slowpath+0x317/0x490
[   10.051064] Code: 3c d5 00 d9 db 93 48 89 14 24 49 81 c7 40 57 03 00 e8 9d f2 2c 00 48 8b 14 24 4c 03 3c d5 00 d9 db 93 4c 89 ff e8 29 f3 2c 00 <49> 89 2f eb 02 f3 90 4c 89 f7 e8 3a f1 2c 00 8b 45 08 85 c0 74 ef
[   10.051087] RSP: 0018:ffffc9000089f050 EFLAGS: 00010086
[   10.051099] RAX: 0000000000000000 RBX: ffff8881d7830024 RCX: ffffffff92182ed7
[   10.051110] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ff2439eaff279143
[   10.051121] RBP: ffff8881d6a75740 R08: 0000000000000001 R09: ffff8881d7830027
[   10.051132] R10: ffffed103af06004 R11: 0000000000000001 R12: 0000000000080000
[   10.051143] R13: 1ffff92000113e0b R14: ffff8881d6a75748 R15: ff2439eaff279143
[   10.051155] FS:  00007f0799df6a40(0000) GS:ffff8881d6a40000(0000) knlGS:0000000000000000
[   10.051168] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   10.051179] CR2: 00007f14f6fa9f10 CR3: 000000010a888000 CR4: 0000000000350ee0
[   10.051190] Call Trace:
[   10.051197]  ? .slowpath+0xe/0xe
[   10.051207]  ? kasan_save_stack+0x32/0x40
[   10.051223]  ? __kasan_kmalloc+0x99/0xc0
[   10.051235]  ? amdgpu_ttm_init.cold+0x153/0x16f [amdgpu]
[   10.052171]  ? gmc_v9_0_sw_init+0x64c/0x980 [amdgpu]
[   10.053184]  ? amdgpu_device_init.cold+0x1483/0x2400 [amdgpu]
[   10.054225]  ? amdgpu_driver_load_kms+0xb1/0x3f0 [amdgpu]
[   10.055217]  ? amdgpu_pci_probe+0x172/0x200 [amdgpu]
[   10.056218]  ? local_pci_probe+0x74/0xc0
[   10.056234]  _raw_spin_lock_irqsave+0xe0/0xf0
[   10.056247]  ? _raw_write_unlock_bh+0x30/0x30
[   10.056257]  ? __do_sys_finit_module+0x110/0x1a0
[   10.056271]  ? entry_SYSCALL_64_after_hwframe+0x44/0xae
[   10.056285]  swiotlb_tbl_map_single+0x1de/0x6f0
[   10.056298]  ? irq_work_queue+0xb/0x40
[   10.056314]  ? add_hole+0x294/0x310 [drm]
[   10.056457]  swiotlb_map+0xc1/0x3f0
[   10.056467]  ? drm_mm_init+0x126/0x140 [drm]
[   10.056607]  ? swiotlb_sync_single_for_cpu+0x20/0x20
[   10.056620]  ? ttm_range_man_init+0xdd/0x100 [ttm]
[   10.056650]  ? amdgpu_ttm_init.cold+0x153/0x16f [amdgpu]
[   10.057586]  dma_map_page_attrs+0x299/0x390
[   10.057599]  ? dmam_free_coherent+0xe0/0xe0
[   10.057611]  amdgpu_gart_init+0x77/0xf0 [amdgpu]
[   10.058480]  gmc_v9_0_sw_init+0x910/0x980 [amdgpu]
[   10.059373]  ? gmc_v9_0_late_init+0xe0/0xe0 [amdgpu]
[   10.060260]  ? __drmm_add_action+0xf0/0x140 [drm]
[   10.060386]  ? drm_mode_config_cleanup+0x480/0x480 [drm]
[   10.060513]  ? drm_mode_config_cleanup+0x480/0x480 [drm]
[   10.060641]  amdgpu_device_init.cold+0x1483/0x2400 [amdgpu]
[   10.061600]  ? amdgpu_device_cache_pci_state+0x90/0x90 [amdgpu]
[   10.062639]  ? pci_find_saved_ext_cap+0x80/0x80
[   10.062654]  ? pci_enable_device_flags+0xcb/0x250
[   10.062667]  ? pci_enable_device_flags+0x19c/0x250
[   10.062679]  ? pci_enable_bridge+0xe0/0xe0
[   10.062690]  amdgpu_driver_load_kms+0xb1/0x3f0 [amdgpu]
[   10.063709]  amdgpu_pci_probe+0x172/0x200 [amdgpu]
[   10.064737]  ? amdgpu_pci_remove+0x80/0x80 [amdgpu]
[   10.065697]  local_pci_probe+0x74/0xc0
[   10.065710]  pci_device_probe+0x1ee/0x300
[   10.065721]  ? pci_device_remove+0x100/0x100
[   10.065732]  ? kernfs_put+0x18/0x30
[   10.065741]  ? sysfs_do_create_link_sd+0x76/0xd0
[   10.065754]  really_probe+0x185/0x6c0
[   10.065764]  driver_probe_device+0x13f/0x1d0
[   10.065774]  device_driver_attach+0x110/0x120
[   10.065784]  ? device_driver_attach+0x120/0x120
[   10.065793]  __driver_attach+0xae/0x1a0
[   10.065803]  ? device_driver_attach+0x120/0x120
[   10.065812]  bus_for_each_dev+0xe6/0x140
[   10.065823]  ? subsys_dev_iter_exit+0x10/0x10
[   10.065833]  ? __list_add_valid+0x2b/0xa0
[   10.065844]  bus_add_driver+0x1f8/0x2e0
[   10.065857]  driver_register+0x10f/0x190
[   10.065866]  ? 0xffffffffc133b000
[   10.065875]  do_one_initcall+0x89/0x2a0
[   10.065886]  ? perf_trace_initcall_level+0x230/0x230
[   10.065897]  ? kfree+0xc3/0x480
[   10.065907]  ? kasan_set_track+0x1c/0x30
[   10.065917]  ? kasan_unpoison+0x3a/0x60
[   10.065927]  ? kasan_unpoison+0x3a/0x60
[   10.065938]  do_init_module+0xfd/0x3c0
[   10.065950]  load_module+0x3f44/0x41a0
[   10.065961]  ? xfs_file_buffered_read+0x82/0x130 [xfs]
[   10.066346]  ? module_frob_arch_sections+0x20/0x20
[   10.066358]  ? kernel_read+0x46/0xb0
[   10.066369]  ? kernel_read_file+0x1d2/0x3e0
[   10.066384]  ? __do_sys_finit_module+0x110/0x1a0
[   10.066394]  __do_sys_finit_module+0x110/0x1a0
[   10.066404]  ? __ia32_sys_init_module+0x40/0x40
[   10.066414]  ? get_nth_filter.part.0+0x170/0x170
[   10.066426]  ? randomize_stack_top+0x80/0x80
[   10.066436]  ? __ia32_compat_sys_newlstat+0x30/0x30
[   10.066450]  ? __audit_syscall_entry+0x193/0x1f0
[   10.066459]  ? ktime_get_coarse_real_ts64+0x4a/0x70
[   10.066471]  do_syscall_64+0x33/0x40
[   10.066482]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[   10.066494] RIP: 0033:0x7f079a72618d
[   10.066502] Code: b4 0c 00 0f 05 eb a9 66 0f 1f 44 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b3 6c 0c 00 f7 d8 64 89 01 48
[   10.066522] RSP: 002b:00007ffdde055848 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[   10.066535] RAX: ffffffffffffffda RBX: 0000559b1868c810 RCX: 00007f079a72618d
[   10.066545] RDX: 0000000000000000 RSI: 00007f079a883a9d RDI: 0000000000000018
[   10.066554] RBP: 0000000000020000 R08: 0000000000000000 R09: 00007f079aab65ea
[   10.066564] R10: 0000000000000018 R11: 0000000000000246 R12: 00007f079a883a9d
[   10.066573] R13: 0000000000000000 R14: 0000559b18690b60 R15: 0000559b1868c810
[   10.066585] Modules linked in: edac_mce_amd fjes(-) kvm_amd rtw88_8821ce kvm rtw88_8821c rtw88_pci amdgpu(+) rtw88_core irqbypass snd_hda_codec_realtek crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi mac80211 aesni_intel snd_hda_intel snd_intel_dspcfg crypto_simd cryptd gpu_sched snd_intel_sdw_acpi btusb i2c_algo_bit snd_hda_codec btrtl drm_ttm_helper btbcm btintel rapl ttm snd_hda_core drm_kms_helper cfg80211 snd_hwdep bluetooth sp5100_tco vfat pcspkr snd_pcm ecdh_generic k10temp fat r8169 i2c_piix4 cec snd_timer syscopyarea realtek sysfillrect snd mdio_devres sysimgblt rfkill ccp fb_sys_fops soundcore libphy libarc4 ecc usbhid crc16 wmi tpm_crb tpm_tis tpm_tis_core video tpm gpio_amdpt gpio_generic rng_core pinctrl_amd mac_hid acpi_tad acpi_cpufreq pkcs8_key_parser drm fuse agpgart bpf_preload ip_tables x_tables xfs libcrc32c crc32c_generic crc32c_intel xhci_pci xhci_pci_renesas
[   10.066824] ---[ end trace f566d89392370240 ]---
[   10.066831] RIP: 0010:native_queued_spin_lock_slowpath+0x317/0x490
[   10.066844] Code: 3c d5 00 d9 db 93 48 89 14 24 49 81 c7 40 57 03 00 e8 9d f2 2c 00 48 8b 14 24 4c 03 3c d5 00 d9 db 93 4c 89 ff e8 29 f3 2c 00 <49> 89 2f eb 02 f3 90 4c 89 f7 e8 3a f1 2c 00 8b 45 08 85 c0 74 ef
[   10.066863] RSP: 0018:ffffc9000089f050 EFLAGS: 00010086
[   10.066873] RAX: 0000000000000000 RBX: ffff8881d7830024 RCX: ffffffff92182ed7
[   10.066882] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ff2439eaff279143
[   10.066892] RBP: ffff8881d6a75740 R08: 0000000000000001 R09: ffff8881d7830027
[   10.066903] R10: ffffed103af06004 R11: 0000000000000001 R12: 0000000000080000
[   10.066913] R13: 1ffff92000113e0b R14: ffff8881d6a75748 R15: ff2439eaff279143
[   10.066924] FS:  00007f0799df6a40(0000) GS:ffff8881d6a40000(0000) knlGS:0000000000000000
[   10.066936] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   10.066944] CR2: 00007f14f6fa9f10 CR3: 000000010a888000 CR4: 0000000000350ee0
[   10.066955] note: systemd-udevd[294] exited with preempt_count 1
[   10.074564] systemd-journald[265]: Compressed data object 946 -> 537 using ZSTD
[   10.076050] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   10.089990] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   10.114635] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   10.226512] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   10.234727] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   10.249690] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   10.292469] r8169 0000:0a:00.0 enp10s0: renamed from eth0
[   10.321331] input: HP WMI hotkeys as /devices/virtual/input/input15
[   10.356875] logitech-djreceiver 0003:046D:C534.0001: hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:01:00.0-11/input0
[   10.478801] intel_rapl_common: Found RAPL domain package
[   10.478843] intel_rapl_common: Found RAPL domain core
[   10.561785] logitech-djreceiver 0003:046D:C534.0002: hiddev96,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:01:00.0-11/input1
[   10.601569] Bluetooth: hci0: RTL: fw version 0x829a7644
[   10.633053] logitech-djreceiver 0003:046D:C534.0002: device of type eQUAD nano Lite (0x0a) connected on slot 1
[   10.635027] logitech-djreceiver 0003:046D:C534.0002: device of type eQUAD nano Lite (0x0a) connected on slot 2
[   10.635611] input: Logitech Wireless Keyboard PID:4075 Keyboard as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003:046D:4075.0003/input/input16
[   10.638901] hid-generic 0003:046D:4075.0003: input,hidraw2: USB HID v1.11 Keyboard [Logitech Wireless Keyboard PID:4075] on usb-0000:01:00.0-11/input1:1
[   10.640688] input: Logitech Wireless Mouse PID:4054 Mouse as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003:046D:4054.0004/input/input21
[   10.641990] hid-generic 0003:046D:4054.0004: input,hidraw3: USB HID v1.11 Mouse [Logitech Wireless Mouse PID:4054] on usb-0000:01:00.0-11/input1:2
[   10.688794] mousedev: PS/2 mouse device common for all mice
[   10.918080] input: Logitech Wireless Keyboard PID:4075 as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003:046D:4075.0003/input/input25
[   10.923263] logitech-hidpp-device 0003:046D:4075.0003: input,hidraw2: USB HID v1.11 Keyboard [Logitech Wireless Keyboard PID:4075] on usb-0000:01:00.0-11/input1:1
[   10.933008] rtw_8821ce 0000:09:00.0: start vif 74:12:b3:a0:4a:cb on port 0
[   10.981496] input: Logitech Wireless Mouse as /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003:046D:4054.0004/input/input26
[   10.983168] logitech-hidpp-device 0003:046D:4054.0004: input,hidraw3: USB HID v1.11 Mouse [Logitech Wireless Mouse] on usb-0000:01:00.0-11/input1:2
[   11.004242] Generic FE-GE Realtek PHY r8169-a00:00: attached PHY driver (mii_bus:phy_addr=r8169-a00:00, irq=MAC)
[   11.174788] r8169 0000:0a:00.0 enp10s0: Link is Down
[   14.177070] r8169 0000:0a:00.0 enp10s0: Link is Up - 1Gbps/Full - flow control rx/tx
[   14.177144] IPv6: ADDRCONF(NETDEV_CHANGE): enp10s0: link becomes ready
[   15.422075] kauditd_printk_skb: 28 callbacks suppressed
[   15.422088] audit: type=1131 audit(1625291568.246:40): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-rfkill comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[   21.356047] audit: type=1101 audit(1625291574.179:41): pid=416 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:accounting grantors=pam_access,pam_unix,pam_permit,pam_time acct="nathan" exe="/usr/bin/sshd" hostname=192.168.4.54 addr=192.168.4.54 terminal=ssh res=success'
[   21.363309] audit: type=1103 audit(1625291574.186:42): pid=416 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:setcred grantors=pam_shells,pam_faillock,pam_permit,pam_env,pam_faillock acct="nathan" exe="/usr/bin/sshd" hostname=192.168.4.54 addr=192.168.4.54 terminal=ssh res=success'
[   21.363633] audit: type=1006 audit(1625291574.186:43): pid=416 uid=0 old-auid=4294967295 auid=1000 tty=(none) old-ses=4294967295 ses=1 res=1
[   21.363684] audit: type=1300 audit(1625291574.186:43): arch=c000003e syscall=1 success=yes exit=4 a0=3 a1=7ffc39581740 a2=4 a3=3e8 items=0 ppid=373 pid=416 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=1 comm="sshd" exe="/usr/bin/sshd" key=(null)
[   21.363717] audit: type=1327 audit(1625291574.186:43): proctitle=737368643A206E617468616E205B707269765D
[   21.395973] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   21.432227] audit: type=1130 audit(1625291574.256:44): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=user-runtime-dir@1000 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[   21.440727] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   21.454764] audit: type=1101 audit(1625291574.279:45): pid=419 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:accounting grantors=pam_access,pam_unix,pam_permit,pam_time acct="nathan" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[   21.454837] audit: type=1103 audit(1625291574.279:46): pid=419 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:setcred grantors=? acct="nathan" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
[   21.455123] audit: type=1006 audit(1625291574.279:47): pid=419 uid=0 old-auid=4294967295 auid=1000 tty=(none) old-ses=4294967295 ses=2 res=1
[   21.455183] audit: type=1300 audit(1625291574.279:47): arch=c000003e syscall=1 success=yes exit=4 a0=9 a1=7ffe190ef1b0 a2=4 a3=3e8 items=0 ppid=1 pid=419 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=2 comm="(systemd)" exe="/usr/lib/systemd/systemd" key=(null)
[   21.465054] systemd-journald[265]: Journal effective settings seal=yes keyed_hash=yes compress=yes compress_threshold_bytes=512B
[   21.466322] systemd-journald[265]: Fixed min_use=848.1M max_use=4.0G max_size=128.0M min_size=512.0K keep_free=4.0G n_max_files=100
[   21.493502] systemd-journald[265]: Journal effective settings seal=no keyed_hash=yes compress=yes compress_threshold_bytes=512B
[   21.629644] systemd-journald[265]: Successfully sent stream file descriptor to service manager.
[   21.681781] systemd-journald[265]: Data hash table of /var/log/journal/983425690c9a4432866996cdc56b7fd4/system.journal has a fill level at 75.0 (174763 of 233016 items, 109051904 file size, 623 bytes per hash table item), suggesting rotation.
[   21.681842] systemd-journald[265]: /var/log/journal/983425690c9a4432866996cdc56b7fd4/system.journal: Journal header limits reached or header out-of-date, rotating.
[   21.681883] systemd-journald[265]: Rotating...
[   21.684864] systemd-journald[265]: Journal effective settings seal=yes keyed_hash=yes compress=yes compress_threshold_bytes=512B
[   21.692779] systemd-journald[265]: Reserving 333 entries in field hash table.
[   21.693953] systemd-journald[265]: Reserving 233016 entries in data hash table.
[   21.728897] systemd-journald[265]: Reserving 333 entries in field hash table.
[   21.730060] systemd-journald[265]: Reserving 233016 entries in data hash table.
[   21.742082] systemd-journald[265]: Failed to parse UID from file name 'user-1000@a73e8f336cda47d99c78d917f661fa32-00000000000005cf-0005c5f19f949d34.journal', ignoring: Invalid argument
[   21.742154] systemd-journald[265]: Failed to parse UID from file name 'user-1000@2d53deb7d71c4bdb85af714a4c578449-000000000003a0f5-0005c630924d4800.journal', ignoring: Invalid argument
[   21.742209] systemd-journald[265]: Failed to parse UID from file name 'user-1000@2d53deb7d71c4bdb85af714a4c578449-000000000004b76d-0005c630bea3393f.journal', ignoring: Invalid argument
[   21.742267] systemd-journald[265]: Failed to parse UID from file name 'user-1000@2d53deb7d71c4bdb85af714a4c578449-0000000000081997-0005c6314a613b2b.journal', ignoring: Invalid argument
[   21.742342] systemd-journald[265]: Vacuuming...
[   21.752710] systemd-journald[265]: Vacuuming done, freed 0B of archived journals from /var/log/journal/983425690c9a4432866996cdc56b7fd4.
[   21.752772] systemd-journald[265]: Journal effective settings seal=no keyed_hash=yes compress=yes compress_threshold_bytes=512B
[   24.053852] systemd-journald[265]: Compressed data object 628 -> 263 using ZSTD
[   27.567518] kauditd_printk_skb: 11 callbacks suppressed
[   27.567531] audit: type=1100 audit(1625291580.389:56): pid=582 uid=1000 auid=1000 ses=1 msg='op=PAM:authentication grantors=pam_faillock,pam_permit,pam_faillock acct="nathan" exe="/usr/bin/doas" hostname=hp-4300G addr=? terminal=pts/0 res=success'
[   27.571597] audit: type=1101 audit(1625291580.396:57): pid=582 uid=1000 auid=1000 ses=1 msg='op=PAM:accounting grantors=pam_unix,pam_permit,pam_time acct="nathan" exe="/usr/bin/doas" hostname=hp-4300G addr=? terminal=pts/0 res=success'
[   27.572223] audit: type=1110 audit(1625291580.396:58): pid=582 uid=1000 auid=1000 ses=1 msg='op=PAM:setcred grantors=pam_faillock,pam_permit,pam_faillock acct="root" exe="/usr/bin/doas" hostname=hp-4300G addr=? terminal=pts/0 res=success'
[   27.573162] audit: type=1105 audit(1625291580.396:59): pid=582 uid=1000 auid=1000 ses=1 msg='op=PAM:session_open grantors=pam_limits,pam_unix,pam_permit acct="root" exe="/usr/bin/doas" hostname=hp-4300G addr=? terminal=pts/0 res=success'

--IzhtKCoR/XhZJq5z--


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 06:44:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 06:44:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149394.276210 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzZNb-0006QS-U3; Sat, 03 Jul 2021 06:43:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149394.276210; Sat, 03 Jul 2021 06:43:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzZNb-0006QL-Qt; Sat, 03 Jul 2021 06:43:55 +0000
Received: by outflank-mailman (input) for mailman id 149394;
 Sat, 03 Jul 2021 06:43:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZNa-0006QB-GT; Sat, 03 Jul 2021 06:43:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZNa-0004gk-8t; Sat, 03 Jul 2021 06:43:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZNZ-0003HT-VK; Sat, 03 Jul 2021 06:43:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZNZ-0003nV-Up; Sat, 03 Jul 2021 06:43:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=XcbsxQ3W5DOfYs9eCcnO9Ko1m3sQ4RcsDruS9WrS+ew=; b=2ZS7xDzBHajrh1cCR8huW66qhK
	GdkmxcQrMtoprW3pAmRQDw0cstXPA5JHJySuJlrJ3OI9qLZpTYz5+Lpcrsg5Pt7NWJNuxNZiGbrca
	/Sbap2uU9um6RfFATVZNJsaZyWPl6kHw0Qd/Wjvm4ORtde7/aWym3hc4Qw9rR8zzLEXE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163233-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163233: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 06:43:53 +0000

flight 163233 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163233/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   29 days
Failing since        162368  2021-06-04 15:42:59 Z   28 days   77 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    1 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 06:46:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 06:46:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149399.276223 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzZQR-00072n-Dz; Sat, 03 Jul 2021 06:46:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149399.276223; Sat, 03 Jul 2021 06:46:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzZQR-00072g-B5; Sat, 03 Jul 2021 06:46:51 +0000
Received: by outflank-mailman (input) for mailman id 149399;
 Sat, 03 Jul 2021 06:46:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZQQ-00072U-1A; Sat, 03 Jul 2021 06:46:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZQP-0004j9-TE; Sat, 03 Jul 2021 06:46:49 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZQP-0003NB-M3; Sat, 03 Jul 2021 06:46:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzZQP-0005HN-LY; Sat, 03 Jul 2021 06:46:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/i9FYedQppDQ8FbEtC2gQtue7dDKnxutrh3s50gqqhI=; b=kh7nFGeNx+EMuiz3Dk+LGYUlBe
	ZTEI+au0rPpcc8zJJhNIu8BD0Z22vVXg47VhvnhxF75yKOdbRsD5+wXB0dZw8wjuvDwhEDJMExQxQ
	du7WMNeMol5ZX3g4DkAZsxSHc3g9/l5//V5eOPuGrR6F9XeENuWIgKQlR2PSN5dabFaI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163231-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163231: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:regression
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3bc3be978fd61f8099797864136c5f447c0e4aae
X-Osstest-Versions-That:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 06:46:49 +0000

flight 163231 xen-unstable real [real]
flight 163237 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163231/
http://logs.test-lab.xenproject.org/osstest/logs/163237/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-examine      4 memdisk-try-append       fail REGR. vs. 163219

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163219

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

version targeted for testing:
 xen                  3bc3be978fd61f8099797864136c5f447c0e4aae
baseline version:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0

Last test of basis   163219  2021-07-02 01:52:38 Z    1 days
Testing same since   163231  2021-07-02 18:06:46 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Ian Jackson <iwj@xenproject.org>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 3bc3be978fd61f8099797864136c5f447c0e4aae
Author: Anthony PERARD <anthony.perard@citrix.com>
Date:   Mon Jun 28 11:01:57 2021 +0100

    libxl: Fix QEMU cmdline for scsi device
    
    Usage of 'scsi-disk' device is deprecated and removed from QEMU,
    instead we need to use 'scsi-hd' for hard drives.
    See QEMU 879be3af49 (hw/scsi: remove 'scsi-disk' device)
    
    Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
    Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

commit 217eef30f7b9b85ba6e27c81a791dae8f6fcdbe7
Author: Anthony PERARD <anthony.perard@citrix.com>
Date:   Mon Jun 28 11:01:56 2021 +0100

    libxl: Replace short-form boolean for QEMU's -vnc
    
    f3f778c81769 forgot one boolean parameter.
    
    Fixes: f3f778c81769 ("libxl: Replace QEMU's command line short-form boolean option")
    Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
    Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

commit 07d6dd51a5c508cc0f3c93a876f8b4e3102ecf60
Author: Anthony PERARD <anthony.perard@citrix.com>
Date:   Mon Jun 28 14:42:17 2021 +0100

    Config.mk: re-pin OVMF changeset and unpin qemu-xen
    
    qemu-xen tree have a osstest gate and doesn't need to be pinned.
    
    On the other hand, OVMF's xen repository doesn't have a gate and needs
    to be pinned. The "master" branch correspond now to the tag
    "edk2-stable202105", so pin to that commit.
    
    Fixes: a04509d34d72 ("Branching: Update version files etc. for newly unstable")
    Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 08:13:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 08:13:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149419.276265 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzamD-0007K6-LS; Sat, 03 Jul 2021 08:13:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149419.276265; Sat, 03 Jul 2021 08:13:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzamD-0007Jz-IQ; Sat, 03 Jul 2021 08:13:25 +0000
Received: by outflank-mailman (input) for mailman id 149419;
 Sat, 03 Jul 2021 08:13:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzamC-0007Jp-O2; Sat, 03 Jul 2021 08:13:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzamC-0006fT-EM; Sat, 03 Jul 2021 08:13:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzamC-0006TI-2w; Sat, 03 Jul 2021 08:13:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzamC-0003fC-2R; Sat, 03 Jul 2021 08:13:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Zb0VWkvqAapk1WpKpOQ3BvazcGHFAXQ0x9MBgAYawSQ=; b=P9dmWhRfhPYVWgkG+x1bdJ17dZ
	6mQAj+Q5+kTwxeampWazkOU52wmIm84mFO1iPsTyCFoWYKqLMi3M3IF9Zzr05v8Nt2S6FK6JRi5qJ
	CgZhx9t84WsWFPVYYRSXLhb6f28jMxnQqRa1B4U5/uQQSa89xDs8r58OZLke6wwF4PD4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163236-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163236: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 08:13:24 +0000

flight 163236 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163236/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  358 days
Failing since        151818  2020-07-11 04:18:52 Z  357 days  349 attempts
Testing same since   163236  2021-07-03 04:20:01 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63952 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 08:32:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 08:32:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149427.276287 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzb49-0001Cv-Qy; Sat, 03 Jul 2021 08:31:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149427.276287; Sat, 03 Jul 2021 08:31:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzb49-0001Co-Nn; Sat, 03 Jul 2021 08:31:57 +0000
Received: by outflank-mailman (input) for mailman id 149427;
 Sat, 03 Jul 2021 08:31:56 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzb48-0001Ce-AP; Sat, 03 Jul 2021 08:31:56 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzb48-0006wh-6D; Sat, 03 Jul 2021 08:31:56 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzb47-0007Pd-Rn; Sat, 03 Jul 2021 08:31:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzb47-0007KR-RK; Sat, 03 Jul 2021 08:31:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=XJzaSN/obYPiUmqi+AEXPVfXhO7ZYKR7cP+rDZI/W34=; b=vdhjYKpAtA0cofdKtrVR/tBTjl
	os5ZdXU8TAVRu55z6nhFPZUNbrv/RmFnjLKLZ2PcsbVXytjzvf1jpl9DxoSjiXhpIiTTeTnzqKBGI
	dzgHYreqTmuMxxyZmHcHD9QXzJbx8ESBexFkomDy9BRhNd5ongtAXChmrDuL53/Okpf0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163232-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163232: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=3dbdb38e286903ec220aaf1fb29a8d94297da246
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 08:31:55 +0000

flight 163232 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163232/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-examine      4 memdisk-try-append         fail pass in 163222
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 163222

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                3dbdb38e286903ec220aaf1fb29a8d94297da246
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  336 days
Failing since        152366  2020-08-01 20:49:34 Z  335 days  571 attempts
Testing same since   163222  2021-07-02 03:54:04 Z    1 days    2 attempts

------------------------------------------------------------
6483 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1844969 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 09:21:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 09:21:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149440.276326 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzbpy-00062g-9F; Sat, 03 Jul 2021 09:21:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149440.276326; Sat, 03 Jul 2021 09:21:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzbpy-00062Z-5y; Sat, 03 Jul 2021 09:21:22 +0000
Received: by outflank-mailman (input) for mailman id 149440;
 Sat, 03 Jul 2021 09:21:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=c6Yl=L3=xen.org=tim@srs-us1.protection.inumbo.net>)
 id 1lzbpx-00062T-1e
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 09:21:21 +0000
Received: from deinos.phlegethon.org (unknown [5.39.92.215])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 526fe32f-c4a4-4a83-9879-c8026fb4986f;
 Sat, 03 Jul 2021 09:21:18 +0000 (UTC)
Received: from tjd by deinos.phlegethon.org with local (Exim 4.94.2 (FreeBSD))
 (envelope-from <tim@xen.org>)
 id 1lzbPW-000Hw7-CP; Sat, 03 Jul 2021 08:54:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 526fe32f-c4a4-4a83-9879-c8026fb4986f
Date: Sat, 3 Jul 2021 09:54:02 +0100
From: Tim Deegan <tim@xen.org>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Roberto Bagnara <roberto.bagnara@bugseng.com>
Subject: Re: [PATCH] x86/shadow: drop callback_mask pseudo-variables
Message-ID: <YOAlqnHqHQ7nfs2X@deinos.phlegethon.org>
References: <b791d89f-5c9d-9c04-00ed-0cbaae68536a@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
In-Reply-To: <b791d89f-5c9d-9c04-00ed-0cbaae68536a@suse.com>
X-SA-Known-Good: Yes
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: tim@xen.org
X-SA-Exim-Scanned: No (on deinos.phlegethon.org); SAEximRunCond expanded to false

At 08:42 +0200 on 30 Jun (1625042541), Jan Beulich wrote:
> In commit 90629587e16e ("x86/shadow: replace stale literal numbers in
> hash_{vcpu,domain}_foreach()") I had to work around a clang shortcoming
> (if you like), leveraging that gcc tolerates static const variables in
> otherwise integer constant expressions. Roberto suggests that we'd
> better not rely on such behavior. Drop the involved static const-s,
> using their "expansions" in both of the prior use sites each. This then
> allows dropping the short-circuiting of the check for clang.
> 
> Requested-by: Roberto Bagnara <roberto.bagnara@bugseng.com>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Tim Deegan <tim@xen.org>


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 10:58:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 10:58:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149460.276376 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzdLT-00061F-Vf; Sat, 03 Jul 2021 10:57:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149460.276376; Sat, 03 Jul 2021 10:57:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzdLT-000618-S1; Sat, 03 Jul 2021 10:57:59 +0000
Received: by outflank-mailman (input) for mailman id 149460;
 Sat, 03 Jul 2021 10:57:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzdLS-00060y-S9; Sat, 03 Jul 2021 10:57:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzdLS-0000wl-K0; Sat, 03 Jul 2021 10:57:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzdLS-00062S-Ai; Sat, 03 Jul 2021 10:57:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzdLS-0002h5-AJ; Sat, 03 Jul 2021 10:57:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=irzwUJPmp5vHU+ysbGQryHQQLaVALTW+OxiJS6wV+zE=; b=pNP+pbcexEKpby4GZ6IkqbjCDW
	459n3pqxCU2c3PZSlTx+R2YpGpet8AqR5pE/TqLkXSGoiDf65Gc2n8jLeaHuMsLY814ZzTV/esOG7
	ejrxyHWVuTEQqCJ8XyHDZkhJ347gkxBmLuy4ZI0boEEDaGSN2FzkN/UgxAfKyCgdfUSk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163238-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163238: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 10:57:58 +0000

flight 163238 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163238/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   29 days
Failing since        162368  2021-06-04 15:42:59 Z   28 days   78 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    1 days    8 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 12:28:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 12:28:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149480.276426 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzekv-00063G-5i; Sat, 03 Jul 2021 12:28:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149480.276426; Sat, 03 Jul 2021 12:28:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzekv-000639-1i; Sat, 03 Jul 2021 12:28:21 +0000
Received: by outflank-mailman (input) for mailman id 149480;
 Sat, 03 Jul 2021 12:28:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzekt-000633-5E
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 12:28:19 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzeks-0002Nz-6L; Sat, 03 Jul 2021 12:28:18 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzeks-0003uY-00; Sat, 03 Jul 2021 12:28:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=0zUiP+P98Sc6vMw+tiPFrjzxhhszNT4g9boL1IJzXeY=; b=j48VZlFNb7WH9PI4sHXqRDOLEX
	XCbYx9btQmzrCL5/LkW9q7wacmX2ZnsGijJZmvGosKBHIdNTUX2DUSeuXJEc3t1+CU3UZeFp2n3Cc
	LbMbMA/YRzbVpoXzCjAeEiX0prtBcvI4CX93KJrVI0kWOgprhAFboaUtO0OLlQ8DnpMo=;
Subject: Re: [PATCH] xen/arm: smmuv1: Fixed stream matching register
 allocation
To: Rahul Singh <Rahul.Singh@arm.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
 Bertrand Marquis <Bertrand.Marquis@arm.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <612e7f61c19e60019bb7829888342fda95fd36be.1624546532.git.rahul.singh@arm.com>
 <11df0a34-724a-63ad-1822-4bd8aa364ab0@xen.org>
 <BE2AB42D-A896-4FFE-856C-DA494D8DF1C8@arm.com>
 <f1a4cdb5-c525-8d6b-5f4d-7e2f2c090dcf@xen.org>
 <8BD37A47-7F82-4710-A37C-9C9C933913A9@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <fe6d6f6e-42ed-3e42-72b4-478af0e86029@xen.org>
Date: Sat, 3 Jul 2021 13:28:16 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <8BD37A47-7F82-4710-A37C-9C9C933913A9@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 02/07/2021 10:54, Rahul Singh wrote:
> Hi Julien,

Hi Rahul,

>> On 30 Jun 2021, at 7:00 pm, Julien Grall <julien@xen.org> wrote:
>>
>>
>>
>> On 30/06/2021 18:49, Rahul Singh wrote:
>>> Hi Julien,
>>
>> Hi,
>>
>>>> On 30 Jun 2021, at 10:09 am, Julien Grall <julien@xen.org> wrote:
>>>>
>>>> Hi Rahul,
>>>>
>>>> On 25/06/2021 17:37, Rahul Singh wrote:
>>>>> SMR allocation should be based on the number of supported stream
>>>>> matching register for each SMMU device.
>>>>> Issue introduced by commit 5e08586afbb90b2e2d56c175c07db77a4afa873c
>>>>> when backported the patches from Linux to XEN to fix the stream match
>>>>> conflict issue when two devices have the same stream-id.
>>>>> Acked-by: Stefano Stabellini <sstabellini@kernel.org>
>>>>> Tested-by: Stefano Stabellini <sstabellini@kernel.org>
>>>>> Signed-off-by: Rahul Singh <rahul.singh@arm.com>
>>>>> ---
>>>>>   xen/drivers/passthrough/arm/smmu.c | 3 ++-
>>>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>>> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
>>>>> index d9a3a0cbf6..da2cd457d7 100644
>>>>> --- a/xen/drivers/passthrough/arm/smmu.c
>>>>> +++ b/xen/drivers/passthrough/arm/smmu.c
>>>>> @@ -149,6 +149,7 @@ typedef enum irqreturn irqreturn_t;
>>>>>   #define kzalloc(size, flags)		_xzalloc(size, sizeof(void *))
>>>>>   #define devm_kzalloc(dev, size, flags)	_xzalloc(size, sizeof(void *))
>>>>>   #define kmalloc_array(size, n, flags)	_xmalloc_array(size, sizeof(void *), n)
>>>>> +#define kzalloc_array(size, n, flags)	_xzalloc_array(size, sizeof(void *), n)
>>>>>     static void __iomem *devm_ioremap_resource(struct device *dev,
>>>>>   					   struct resource *res)
>>>>> @@ -2221,7 +2222,7 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
>>>>>   		smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
>>>>>     		/* Zero-initialised to mark as invalid */
>>>>> -		smmu->smrs = devm_kzalloc(smmu->dev, sizeof(*smmu->smrs), GFP_KERNEL);
>>>>> +		smmu->smrs = kzalloc_array(sizeof(*smmu->smrs), size, GFP_KERNEL);
>>>>
>>>> I noticed this is already in... However, I am a bit puzzled into why this was switched devm_kzalloc() to kzalloc_array(). This doesn't matter for Xen as they are just wrappers to x*alloc() but a mention in the commit message would have been useful.
>>> Yes we can use the devm_kzalloc(..) but then we have to pass (sizeof(*smmu->smrs) * size ) as size argument to devm_kzalloc(..)
>>> I thought for better code readability I will use kzalloc_array() as the function name suggests we are allocating memory for an array.
>>
>> My point is devm_k*alloc() and k*alloc() are quite different on the paper. One will allocate memory for a given device while the other is unknown memory.
>>
>> It would have been better to call the function devm_kzalloc_array() to keep to keep the code coherent. Can you please send a patch to make the switch?
> 
> Ok. I will modify the code as per your request as below . I will use devm_kcalloc(..) as this will be more coherent.
> 
> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
> index da2cd457d7..658c40433c 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -149,7 +149,8 @@ typedef enum irqreturn irqreturn_t;
>   #define kzalloc(size, flags)           _xzalloc(size, sizeof(void *))
>   #define devm_kzalloc(dev, size, flags) _xzalloc(size, sizeof(void *))
>   #define kmalloc_array(size, n, flags)  _xmalloc_array(size, sizeof(void *), n)
> -#define kzalloc_array(size, n, flags)  _xzalloc_array(size, sizeof(void *), n)
> +#define devm_kcalloc(dev, n, size, flags)                      \
> +       _xzalloc_array(size, sizeof(void *), n)
>   
>   static void __iomem *devm_ioremap_resource(struct device *dev,
>                                             struct resource *res)
> @@ -2222,7 +2223,8 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
>                  smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
>   
>                  /* Zero-initialised to mark as invalid */
> -               smmu->smrs = kzalloc_array(sizeof(*smmu->smrs), size, GFP_KERNEL);
> +               smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
> +                                                               GFP_KERNEL);
>                  if (!smmu->smrs)
>                          return -ENOMEM;

This sounds good to me.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 13:26:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 13:26:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149492.276458 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzfeo-0003QN-B0; Sat, 03 Jul 2021 13:26:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149492.276458; Sat, 03 Jul 2021 13:26:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzfeo-0003QG-6t; Sat, 03 Jul 2021 13:26:06 +0000
Received: by outflank-mailman (input) for mailman id 149492;
 Sat, 03 Jul 2021 13:26:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzfen-0003Q8-1E
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 13:26:05 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzfem-0003Ii-05; Sat, 03 Jul 2021 13:26:04 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzfel-0008Jb-QL; Sat, 03 Jul 2021 13:26:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=XvOslK9tGoMg5XCnqq1G7RAZ5HOjX1mCqIZCMegLo/o=; b=ZejDebksHYUqdBzcK0Ke96f5Ur
	YV6L7sYc2QTM+fh5w2BYL64VBm++kc0NiQDkRLoFQ6NMiaNbzHb2SDhDKKk3/nVAm78p64jXepciA
	A4tLQlZlWfCXcv8WXuKqll1XAg1cH7LGzZVpky9IJtXT1x4+w9ZmvaV0Yew0LNKeBfYc=;
Subject: Re: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
To: Penny Zheng <penny.zheng@arm.com>, xen-devel@lists.xenproject.org,
 sstabellini@kernel.org, jbeulich@suse.com
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-9-penny.zheng@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <f613372a-eac8-f79b-2941-b7cce3e1e0e7@xen.org>
Date: Sat, 3 Jul 2021 14:26:01 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210607024318.3988467-9-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Penny,

On 07/06/2021 03:43, Penny Zheng wrote:
> This commit checks `xen,static-mem` device tree property in /domUx node,
> to determine whether domain is on Static Allocation, when constructing
> domain during boot-up.
> 
> Right now, the implementation of allocate_static_memory is missing, and
> will be introduced later. It just BUG() out at the moment.
> 
> And if the `memory` property and `xen,static-mem` are both set, it shall
> be verified that if the memory size defined in both is consistent.
> 
> Signed-off-by: Penny Zheng <penny.zheng@arm.com>
> ---
> changes v2:
> - remove parsing procedure here
> - check the consistency when `xen,static-mem` and `memory` are both defined
> ---
>   xen/arch/arm/domain_build.c | 37 +++++++++++++++++++++++++++++++------
>   1 file changed, 31 insertions(+), 6 deletions(-)
> 
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 282416e74d..4166d7993c 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -2424,23 +2424,47 @@ static int __init construct_domU(struct domain *d,
>   {
>       struct kernel_info kinfo = {};
>       int rc;
> -    u64 mem;
> +    u64 mem, static_mem_size = 0;
> +    const struct dt_property *prop;
> +    bool static_mem = false;
> +
> +    d->max_pages = ~0U;
> +    /*
> +     * Guest RAM could be of static memory from static allocation,
> +     * which will be specified through "xen,static-mem" phandle.
> +     */
> +    prop = dt_find_property(node, "xen,static-mem", NULL);
> +    if ( prop )
> +    {
> +        static_mem = true;
> +        /* static_mem_size = allocate_static_memory(...); */
> +        BUG();
> +    }

I would prefer if the static memory is allocated close to 
allocate_memory() below. AFAICT, the reason you allocate here is because 
you want to have the property "memory" optional.

However, I am not entirely convinced this is a good idea to make 
optional. It would be easier for a reader to figure out from the 
device-tree how much memory we give to the guest.

>   
>       rc = dt_property_read_u64(node, "memory", &mem);
> -    if ( !rc )
> +    if ( !static_mem && !rc )
>       {
>           printk("Error building DomU: cannot read \"memory\" property\n");
>           return -EINVAL;
> +    } else if ( rc && static_mem )
> +    {
> +        if ( static_mem_size != mem * SZ_1K )
> +        {
> +            printk("Memory size in \"memory\" property isn't consistent with"
> +                   "the ones defined in \"xen,static-mem\".\n");
> +            return -EINVAL;
> +        }
>       } > -    kinfo.unassigned_mem = (paddr_t)mem * SZ_1K;
> +    kinfo.unassigned_mem = static_mem ? 0 : (paddr_t)mem * SZ_1K; >
> -    printk("*** LOADING DOMU cpus=%u memory=%"PRIx64"KB ***\n", d->max_vcpus, mem);
> +    printk("*** LOADING DOMU cpus=%u memory=%"PRIx64"KB ***\n",
> +            d->max_vcpus,
> +            static_mem ? static_mem_size : (kinfo.unassigned_mem) >> 10);


If we mandate the property "memory", then kinfo.unassigned_mem doesn't 
need to be touched. Instead, you could simply check the 
kinfo.unassigned_mem is equivalent to static_mem_size.

>   
>       kinfo.vpl011 = dt_property_read_bool(node, "vpl011");
>   
>       if ( vcpu_create(d, 0) == NULL )
>           return -ENOMEM;
> -    d->max_pages = ~0U;
>   
>       kinfo.d = d;
>   
> @@ -2452,7 +2476,8 @@ static int __init construct_domU(struct domain *d,
>       /* type must be set before allocate memory */
>       d->arch.type = kinfo.type;
>   #endif
> -    allocate_memory(d, &kinfo);
> +    if ( !static_mem )
> +        allocate_memory(d, &kinfo);
>   
>       rc = prepare_dtb_domU(d, &kinfo);
>       if ( rc < 0 )
> 

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 14:18:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 14:18:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149506.276493 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzgTV-0008QY-6v; Sat, 03 Jul 2021 14:18:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149506.276493; Sat, 03 Jul 2021 14:18:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzgTV-0008QR-3d; Sat, 03 Jul 2021 14:18:29 +0000
Received: by outflank-mailman (input) for mailman id 149506;
 Sat, 03 Jul 2021 14:18:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzgTT-0008QL-SQ
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 14:18:27 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzgTS-0004DU-S8; Sat, 03 Jul 2021 14:18:26 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzgTS-00047J-M3; Sat, 03 Jul 2021 14:18:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=bRemhQ55eR5N+qtxTTz/MFJuQxVe1NVLs8GT4w9nAH0=; b=fztnM04/UR1wONB2/4DJOpiDXA
	e2zfSGzXpiOyzUjjT4vwAic0Z20NhaF43aYqwiizKHRa1ctlthZp2GRbioiEcqYWviuEe9Ob51jCE
	Ie59YwIaLjWw2CH2rb/czF2UigJofq6NY5hzZ0q6eU1cl0AtgOsUKROTNkQHkGtXfB7I=;
Subject: Re: [PATCH 9/9] xen/arm: introduce allocate_static_memory
To: Penny Zheng <penny.zheng@arm.com>, xen-devel@lists.xenproject.org,
 sstabellini@kernel.org, jbeulich@suse.com
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-10-penny.zheng@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <2dc9387c-1c6c-70af-5bf5-8b606b62cc79@xen.org>
Date: Sat, 3 Jul 2021 15:18:24 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210607024318.3988467-10-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Penny,

On 07/06/2021 03:43, Penny Zheng wrote:
> This commit introduces allocate_static_memory to allocate static memory as
> guest RAM for Domain on Static Allocation.
> 
> It uses alloc_domstatic_pages to allocate pre-configured static memory banks
> for this domain, and uses guest_physmap_add_page to set up P2M table.
> These pre-defiend static memory ranges shall be firstly mapped to the
> fixed guest RAM address `GUEST_RAM0_BASE`. And until it exhausts the
> `GUEST_RAM0_SIZE`, it will seek to `GUEST_RAM1_BASE`.
> `GUEST_RAM0` may take up several pre-defined physical RAM regions.
> 
> Signed-off-by: Penny Zheng <penny.zheng@arm.com>
> ---
> changes v2:
> - rename the values, like prefix it g/p
> - fix the scalability issue
> - allocate when parse
> ---
>   xen/arch/arm/domain_build.c | 155 +++++++++++++++++++++++++++++++++++-
>   1 file changed, 153 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 4166d7993c..63b6a97b2c 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -437,6 +437,48 @@ static bool __init allocate_bank_memory(struct domain *d,
>       return true;
>   }
>   
> +/*
> + * Static memory bank at #smfn of #gsize shall be mapped to #sgfn of #gsize,
> + * and #sgfn will be next guest address to map when returning.
> + */
> +static bool __init allocate_static_bank_memory(struct domain *d,
> +                                               struct kernel_info *kinfo,
> +                                               int gbank,

Please use unsigned int for index.

> +                                               gfn_t* sgfn,
> +                                               mfn_t smfn,
> +                                               paddr_t gsize)

This function doesn't allocate memory and neither a "bank" per-se. So 
would suggest to rename to (or something similar):

append_static_memory_to_bank()

Also, I don't think you need all those parameters. You can infer the 
next GFN to use from the bank information. So how about something like:

static bool __init append_static_memory_to_bank(struct domain *d,
                                                 struct membank *bank,
                                                 mfn_t smfn,
                                                 paddr_t size)
{
    gfn_t sgfn = gaddr_to_gfn(bank->start + bank->size);

    [....]
}

> +{
> +    int res;
> +    paddr_t tot_size = gsize;
> +    const uint64_t rambase[] = GUEST_RAM_BANK_BASES;

I don't like the idea of introducing rambase here. Can't the bank be 
initialized in the caller?

> +
> +    while ( tot_size > 0 )
> +    {
> +        unsigned int order = get_allocation_size(tot_size);
> +
> +        res = guest_physmap_add_page(d, *sgfn, smfn, order);
> +        if ( res )
> +        {
> +            dprintk(XENLOG_ERR, "Failed map pages to DOMU: %d", res);
> +            return false;
> +        }
> +
> +        *sgfn = gfn_add(*sgfn, 1UL << order);
> +        smfn = mfn_add(smfn, 1UL << order);
> +        tot_size -= (1ULL << (PAGE_SHIFT + order));
> +    }
> +
> +    /* Guest RAM bank in kinfo hasn't been initialized. */
> +    if ( gbank == kinfo->mem.nr_banks )
> +    {
> +        kinfo->mem.bank[gbank].start = rambase[gbank];
> +        kinfo->mem.nr_banks++;
> +    }
> +    kinfo->mem.bank[gbank].size += gsize;
> +
> +    return true;
> +}
> +
>   static void __init allocate_memory(struct domain *d, struct kernel_info *kinfo)

It feels a bit odd that the two functions you introduced are not 
together. Can they be moved together?

>   {
>       unsigned int i;
> @@ -480,6 +522,116 @@ fail:
>             (unsigned long)kinfo->unassigned_mem >> 10);
>   }
>   
> +/* Allocate memory from static memory as RAM for one specific domain d. */
> +static u64 __init allocate_static_memory(struct domain *d,
> +                                          struct kernel_info *kinfo,
> +                                          const struct dt_device_node *node)
> +{
> +    int nr_banks, bank = 0, gbank = 0;
> +    const uint64_t rambase[] = GUEST_RAM_BANK_BASES;
> +    const uint64_t ramsize[] = GUEST_RAM_BANK_SIZES;
> +    const __be32 *cell;
> +    const struct dt_property *prop;
> +    struct dt_device_node *static_mem_node;
> +    const struct dt_device_node *parent = dt_find_node_by_path("/reserved-memory");
> +    u32 addr_cells = 2, size_cells = 2, reg_cells;
> +    u64 tot_size;
> +
> +    paddr_t pbase, psize, gsize;
> +    gfn_t sgfn;
> +    mfn_t smfn;
> +
> +    kinfo->mem.nr_banks = 0;
> +    /* Start with GUEST_RAM0. */
> +    gsize = ramsize[gbank];
> +    sgfn = gaddr_to_gfn(rambase[gbank]);
> +
> +    /* Parse phandle in `xen,static-mem`. */
> +    static_mem_node = dt_parse_phandle(node, "xen,static-mem", 0);
> +    if ( !static_mem_node )
> +        goto fail;
> +
> +    /*
> +     * #address-cells and #size-cells must be consistent with the parent node,
> +     * "reserved-memory".
> +     */
> +    dt_property_read_u32(parent, "#address-cells", &addr_cells);
> +    dt_property_read_u32(parent, "#size-cells", &size_cells);

The return for dt_property_read_u32() should be checked.

> +    BUG_ON(size_cells > 2 || addr_cells > 2);
> +    reg_cells = addr_cells + size_cells;
> +
> +    prop = dt_find_property(static_mem_node, "reg", NULL);
> +    if ( !prop )
> +        goto fail;
> +    cell = (const __be32 *)prop->value;
> +    nr_banks = (prop->length) / (reg_cells * sizeof (u32));
> +    BUG_ON(nr_banks > NR_MEM_BANKS);
> +
> +    while ( bank < nr_banks )
> +    {
> +        device_tree_get_reg(&cell, addr_cells, size_cells, &pbase, &psize);

We seem to have quite a few functions now that will iterate over "regs". 
It would be worth considering to introduce a helper to iterate it.

> +        tot_size += (u64)psize;

This cast seems unnecessary.

> +        smfn = maddr_to_mfn(pbase);
> +
> +        if ( !alloc_domstatic_pages(d, psize >> PAGE_SHIFT, smfn, 0) )
> +        {
> +            printk(XENLOG_ERR
> +                    "%pd: cannot allocate static memory"
> +                    "(0x%"PRIpaddr" - 0x%"PRIpaddr")",
> +                    d, pbase, pbase + psize);
> +            goto fail;
> +        }
> +
> +        printk(XENLOG_INFO "%pd STATIC BANK[%d] %#"PRIpaddr"-%#"PRIpaddr"\n",
> +               d, bank, pbase, pbase + psize);
> +
> +        /*
> +         * It shall be mapped to the fixed guest RAM address rambase[i],
> +         * And until it exhausts the ramsize[i], it will seek to the next
> +         * rambase[i+1].
> +         */
> +        while ( 1 )
> +        {
> +            if ( gsize >= psize )
> +            {
> +                if ( !allocate_static_bank_memory(d, kinfo, gbank,
> +                                                  &sgfn, smfn, psize) )
> +                    goto fail;
> +
> +                gsize = gsize - psize;
> +                bank++;
> +                break;
> +            }
> +            else
> +            {
> +                if ( !allocate_static_bank_memory(d, kinfo, gbank,
> +                                                  &sgfn, smfn, gsize) )
> +                    goto fail;
> +
> +                /*
> +                 * Physical bank hasn't been totally mapped,
> +                 * seeking to the next guest RAM i+1, if exist.
> +                 */
> +                if ( ++gbank < GUEST_RAM_BANKS )
> +                {
> +                    psize = psize - gsize;
> +                    smfn = mfn_add(smfn, gsize >> PAGE_SHIFT);
> +                    gsize = ramsize[gbank];
> +                    sgfn = gaddr_to_gfn(rambase[gbank]);
> +                }
> +                else
> +                    goto fail;
> +            }

The double loop is not nice but I can't think of a better way. However, 
I think the code in the loop can be simplified. You could write 
something like:

/* Map as much as possible the static range to the guest bank */
if ( !allocate_static_bank(..., min(psize, gsize) )
   goto fail;

/* The physical bank is fully mapped. Handle the next bank. */
if ( gsize >= psize )
{
     gsize = gsize - psize;
     bank++;
     break;
}
/* We still have memory to map. Check if we have another guest bank 
available */
else if ( ++gbank > GUEST_RAM_BANKS ) {
    printk("Exhausted the number of guest bank\n");
    goto fail;
}

[Update to the next guest bank]

> +        }
> +    }
> +    return tot_size;
> +
> +fail:
> +    panic("Failed to allocate requested static memory for domain %pd."
> +          "Fix the VMs configurations.\n",
> +          d);
> +}
> +
>   static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
>                                      const struct dt_device_node *node)
>   {
> @@ -2437,8 +2589,7 @@ static int __init construct_domU(struct domain *d,
>       if ( prop )
>       {
>           static_mem = true;
> -        /* static_mem_size = allocate_static_memory(...); */
> -        BUG();
> +        static_mem_size = allocate_static_memory(d, &kinfo, node);
>       }
>   
>       rc = dt_property_read_u64(node, "memory", &mem);
> 

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 14:42:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 14:42:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149514.276513 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzgqi-00032I-Gk; Sat, 03 Jul 2021 14:42:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149514.276513; Sat, 03 Jul 2021 14:42:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzgqi-00032B-DM; Sat, 03 Jul 2021 14:42:28 +0000
Received: by outflank-mailman (input) for mailman id 149514;
 Sat, 03 Jul 2021 14:42:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzgqh-000325-JD
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 14:42:27 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzgqZ-0004aN-49; Sat, 03 Jul 2021 14:42:19 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzgqY-0006IK-Sp; Sat, 03 Jul 2021 14:42:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=GmGfj4CP4QhiHxEv9OGxje+2tXPZSSTOYjEoiJtqazA=; b=QQHcl4/apn4T/UBYefJVqgACSS
	lEz+3Zwrs7wA6fxFbJWMDvDW+9QBV7R0/kWZXVi8JKtSmoZ0T48WwWSMUkyLJwQbklYbPYZAIYYcu
	sY1H4IU3pGOEUgiEssRUfpk0RLd6KztJLh8qZoW6PKoXmAD2idPVZfCeqXhUfkstbRLY=;
Subject: Re: [PATCH v3 10/10] arm64: Change type of hsr, cpsr, spsr_el1 to
 uint64_t
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com,
 wei.chen@arm.com
References: <20210505074308.11016-1-michal.orzel@arm.com>
 <20210505074308.11016-11-michal.orzel@arm.com>
 <d3fa0269-3779-c893-8adb-4db0e22f28c1@xen.org>
 <9bc0a398-8920-3a95-1bb4-f32e8753972b@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <dc976871-f7ce-9f53-e59c-bafbec8c77db@xen.org>
Date: Sat, 3 Jul 2021 15:42:15 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <9bc0a398-8920-3a95-1bb4-f32e8753972b@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 01/07/2021 09:19, Michal Orzel wrote:
> Hi Julien,

Hi Michal,

> On 07.06.2021 15:31, Julien Grall wrote:
>> Hi,
>>
>> On 05/05/2021 08:43, Michal Orzel wrote:
>>> AArch64 registers are 64bit whereas AArch32 registers
>>> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
>>> we should get rid of helpers READ/WRITE_SYSREG32
>>> in favour of using READ/WRITE_SYSREG.
>>> We should also use register_t type when reading sysregs
>>> which can correspond to uint64_t or uint32_t.
>>> Even though many AArch64 registers have upper 32bit reserved
>>> it does not mean that they can't be widen in the future.
>>>
>>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
>>> Previously we relied on the padding after SPSR_EL1.
>>> As we removed the padding, modify the union to be 64bit so we don't corrupt SPSR_FIQ.
>>> No need to modify the assembly code becuase the accesses were based on 64bit
>>
>> s/becuase/because/
>>
> Will do.
>>> registers as there was a 32bit padding after SPSR_EL1.
>>>
>>> Remove 32bit padding in cpu_user_regs before spsr_fiq
>>> as it is no longer needed due to upper union being 64bit now.
>>> Add 64bit padding in cpu_user_regs before spsr_el1
>>> because offset of spsr_el1 must be a multiple of 8.
>>>
>>> Change type of cpsr to uint64_t in the public outside interface
>>> "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
>>> Increment XEN_DOMCTL_INTERFACE_VERSION.
>>>
>>> Change type of cpsr to uint64_t in the public outside interface
>>> "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
>> [...]
>>
>>> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
>>> index e7384381cc..c8f9773566 100644
>>> --- a/xen/arch/arm/traps.c
>>> +++ b/xen/arch/arm/traps.c
>>> @@ -546,7 +546,7 @@ void inject_undef64_exception(struct cpu_user_regs *regs, int instr_len)
>>>            PSR_IRQ_MASK | PSR_DBG_MASK;
>>>        regs->pc = handler;
>>>    -    WRITE_SYSREG32(esr.bits, ESR_EL1);
>>> +    WRITE_SYSREG(esr.bits, ESR_EL1);
>>>    }
>>>      /* Inject an abort exception into a 64 bit guest */
>>> @@ -580,7 +580,7 @@ static void inject_abt64_exception(struct cpu_user_regs *regs,
>>>        regs->pc = handler;
>>>          WRITE_SYSREG(addr, FAR_EL1);
>>> -    WRITE_SYSREG32(esr.bits, ESR_EL1);
>>> +    WRITE_SYSREG(esr.bits, ESR_EL1);
>>>    }
>>>      static void inject_dabt64_exception(struct cpu_user_regs *regs,
>>> @@ -717,7 +717,7 @@ struct reg_ctxt {
>>>        uint64_t vttbr_el2;
>>>    };
>>>    -static const char *mode_string(uint32_t cpsr)
>>> +static const char *mode_string(register_t cpsr)
>>>    {
>>>        uint32_t mode;
>>>        static const char *mode_strings[] = {
>>> @@ -756,14 +756,16 @@ static void show_registers_32(const struct cpu_user_regs *regs,
>>>    #ifdef CONFIG_ARM_64
>>>        BUG_ON( ! (regs->cpsr & PSR_MODE_BIT) );
>>>        printk("PC:     %08"PRIx32"\n", regs->pc32);
>>> +    printk("CPSR:   %016"PRIx64" MODE:%s\n", regs->cpsr,
>>> +           mode_string(regs->cpsr));
>> Why do you now need to duplicate this line? Can't we use PRIregister you did everywhere else a register is printed?
>>
> Indeed we do not need. It was needed at the beginning but I do not remember why. I will fix it.
>>>    #else
>>>        printk("PC:     %08"PRIx32, regs->pc);
>>>        if ( !guest_mode )
>>>            printk(" %pS", _p(regs->pc));
>>>        printk("\n");
>>> -#endif
>>>        printk("CPSR:   %08"PRIx32" MODE:%s\n", regs->cpsr,
>>>               mode_string(regs->cpsr));
>>> +#endif
>>
>> [...]
>>
>>> diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/include/asm-arm/arm64/processor.h
>>> index 81dfc5e615..0e86079cbb 100644
>>> --- a/xen/include/asm-arm/arm64/processor.h
>>> +++ b/xen/include/asm-arm/arm64/processor.h
>>> @@ -63,18 +63,19 @@ struct cpu_user_regs
>>>          /* Return address and mode */
>>>        __DECL_REG(pc,           pc32);             /* ELR_EL2 */
>>> -    uint32_t cpsr;                              /* SPSR_EL2 */
>>> -    uint32_t hsr;                               /* ESR_EL2 */
>>> +    uint64_t cpsr;                              /* SPSR_EL2 */
>>> +    uint64_t hsr;                               /* ESR_EL2 */
>>> +
>>> +    /* Offset of spsr_el1 must be a multiple of 8 */
>>
>> I am guessing you are saying it should be 8-byte aligned, right? If so, the field before is a 64-bit value, therefore the offset should already be a multiple of 8. Did I miss anything?
>>
> Well, instead of 8 I should write 16.
> We have 2 bug_on checks:
> 1) BUILD_BUG_ON((sizeof (struct cpu_user_regs)) & 0xf);
> 2) BUILD_BUG_ON((offsetof(struct cpu_user_regs, spsr_el1)) & 0xf);
> 
> Total size of cpu_user_regs without padding is 344 which does not pass the first check.
> With the padding it is 352 and it passes the first check.
> 
> The offset without padding is 280 which does not pass the second check.
> The offset with padding is 288 which passes the second check.

Ah yes, I forgot that the stack should always be 16-byte aligned.

> 
> So I should write:
> "/* Offset of spsr_el1 must be a multiple of 16 bytes */"
I would suggest the following comment:

/* The kernel frame should be 16-byte aligned. */

So this would make clear that the 16-byte requirement is for the frame 
itself.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 14:58:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 14:58:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149522.276530 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzh6B-0004cZ-6n; Sat, 03 Jul 2021 14:58:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149522.276530; Sat, 03 Jul 2021 14:58:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzh6B-0004cS-3H; Sat, 03 Jul 2021 14:58:27 +0000
Received: by outflank-mailman (input) for mailman id 149522;
 Sat, 03 Jul 2021 14:58:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzh69-0004cI-Fb; Sat, 03 Jul 2021 14:58:25 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzh69-0004s5-8j; Sat, 03 Jul 2021 14:58:25 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzh68-0000mz-Ve; Sat, 03 Jul 2021 14:58:25 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzh68-0002Xo-V7; Sat, 03 Jul 2021 14:58:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=MA0fhymsYjcx/1c/QGxNY81YbqHBRc5bPNLPLGbwntE=; b=iujC3O102jjwf87ZgbWEtIeYl0
	ptLOclOwCOhuFwEFi/gu+68SD9ib4UgDjGTAXi693jLzRA8HPCK6Qh766PYNOC6Km231Xm0LOr59U
	kX8Yiwopnc2YIQTipRUjFu9MLtKSxyk46NSae22kmltnr2uLaCppNkkvpK5wAPU/DQGo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163235-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163235: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 14:58:24 +0000

flight 163235 qemu-mainline real [real]
flight 163270 qemu-mainline real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163235/
http://logs.test-lab.xenproject.org/osstest/logs/163270/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 152631
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1       fail REGR. vs. 152631

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  317 days
Failing since        152659  2020-08-21 14:07:39 Z  316 days  580 attempts
Testing same since   163228  2021-07-02 17:08:27 Z    0 days    2 attempts

------------------------------------------------------------
554 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 182071 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:12:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:12:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149550.276628 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBW-0001DT-PM; Sat, 03 Jul 2021 17:12:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149550.276628; Sat, 03 Jul 2021 17:12:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBW-0001Ae-H8; Sat, 03 Jul 2021 17:12:06 +0000
Received: by outflank-mailman (input) for mailman id 149550;
 Sat, 03 Jul 2021 17:12:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjBV-0000rQ-2j
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:12:05 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBT-0007c2-FM; Sat, 03 Jul 2021 17:12:03 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBT-0005vs-6h; Sat, 03 Jul 2021 17:12:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From;
	 bh=2pkpvyGryxTS4uBplOORxJnDBZlpgWoUp7jdUVlTkUk=; b=PsTwUivc5yu22Oe9pxT9BLzvy
	k0g6AirkHbuRzdlKfdYTloWhxO6D+Mx9hrsSY0OdqAOQJByi7WjKJAvRVmFYtflr3dt1GM1NNhBWQ
	g0DUfCflztgPKFN9OGedj1wtuzDkfaS9zl78dzASKACE17rKh08kOZXcKjG6CG6CbSM3k=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <julien.grall@arm.com>,
	Jan Beulich <jbeulich@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Stefano Stabellini <sstabellini@kernel.org>
Subject: [PATCH v5 2/4] xen: arm: Stop returning a bogus GFN for the shared info
Date: Sat,  3 Jul 2021 18:11:50 +0100
Message-Id: <20210703171152.15874-3-julien@xen.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210703171152.15874-1-julien@xen.org>
References: <20210703171152.15874-1-julien@xen.org>

From: Julien Grall <julien.grall@arm.com>

While Arm never had a M2P, the implementation of mfn_to_gfn() is pretty
bogus as we directly return the MFN passed in parameter.

The last use of mfn_to_gfn() on Arm is in getdomaininfo(). It looks
like this is mostly used for mapping the P2M Of PV guest. Furthermore,
the structure on Arm doesn't seem to contain a lot of useful
information. Therefore it is unclear whether we want to allow the
toolstack to map it.

As there is a high change that RISC-V will not implement an M2P,
provide a new wrapper that will by default return an invalid GFN and
move the code to find the GFN in an x86 specific helper.

If in the future we want to map the shared info, then we should
consider to do it using the acquire hypercall.

Note that as INVALID_GFN is unsigned long, we can't return directly
because the value would differ between 64-bit and 32-bit. Instead,
a fixed value needs to be introduced.

While the fixed value could be shared with other field storing a
GFN, we unfortunately use a mix of type (unsigned long, uint64_t)
for exposing it externally. So to avoid any misuse, it is better to
define a fixed value for just the shared_info_gfn field.

Signed-off-by Julien Grall <julien.grall@arm.com>

---
    I am not comfortable with introduce a generic invalid GFN fixed
    value because we don't use a common type. I also didn't get any
    feedback on whether it would be acceptable to focus on one type.

    So the fixed value has not been changed. I think this is acceptable
    because this a DOMCTL and therefore not stable. If someone still
    disagree, then please provide concrete steps how to solve
    the mixing of type.

    Changes in v5:
        - This was originally "xen: Introduce HAS_M2P config and use to
        protect mfn_to_gmfn call".
        - Rebase to the latest Xen.
        - Rename the helper to arch_shared_info_gfn()
        - The default stub now return INVALID_GFN rather than using the
        M2P

    Changes in v4:
        - The IOMMU code doesn't use the M2P anymore, so this can be
        dropped.
        - Reword the commit message
        - Fix rebase conflict

    Changes in v3:
        - Move the BUG_ON() in domain_shared_info_gfn()
        - Use a fixed value when the field shared_info_frame is not
        supported.
        - Add an ASSERT_UNREACHABLE in iommu_hwdom_init + move printk
        within the #ifdef.

    Changes in v2:
        - Add a warning in public headers
        - Constify local variable in domain_shared_info_gfn
        - Invert the naming (_d / d) in domain_shared_info_gfn
        - Use -EOPNOTSUPP rather than -ENOSYS
        - Rework how the memory_exchange hypercall is removed from Arm
---
 xen/arch/x86/domain.c        |  9 +++++++++
 xen/common/Kconfig           |  3 +++
 xen/common/domctl.c          | 10 +++++++---
 xen/include/asm-x86/domain.h |  3 +++
 xen/include/public/domctl.h  |  6 ++++++
 xen/include/xen/domain.h     |  7 +++++++
 6 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index ef1812dc1402..b3f216cd6f51 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -2553,6 +2553,15 @@ void domain_pause_for_debugger(void)
 #endif
 }
 
+gfn_t arch_shared_info_gfn(const struct domain *d)
+{
+    gfn_t gfn = mfn_to_gfn(d, _mfn(__virt_to_mfn(d->shared_info)));
+
+    BUG_ON(SHARED_M2P(gfn_x(gfn)));
+
+    return gfn;
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 0ddd18e11af3..cd5b89f2f02e 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -64,6 +64,9 @@ config MEM_ACCESS
 	  Framework to configure memory access types for guests and receive
 	  related events in userspace.
 
+config HAS_M2P
+	bool
+
 config NEEDS_LIBELF
 	bool
 
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index 12d6144d2896..834a2183fda1 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -68,6 +68,7 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info)
     u64 cpu_time = 0;
     int flags = XEN_DOMINF_blocked;
     struct vcpu_runstate_info runstate;
+    gfn_t shared_info_frame;
 
     info->domain = d->domain_id;
     info->max_vcpu_id = XEN_INVALID_MAX_VCPU_ID;
@@ -111,9 +112,12 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info)
     info->outstanding_pages = d->outstanding_pages;
     info->shr_pages         = atomic_read(&d->shr_pages);
     info->paged_pages       = atomic_read(&d->paged_pages);
-    info->shared_info_frame =
-        gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info))));
-    BUG_ON(SHARED_M2P(info->shared_info_frame));
+
+    shared_info_frame = arch_shared_info_gfn(d);
+    if ( gfn_eq(shared_info_frame, INVALID_GFN) )
+        info->shared_info_frame = XEN_INVALID_SHARED_INFO_FRAME;
+    else
+        info->shared_info_frame = gfn_x(shared_info_frame);
 
     info->cpupool = cpupool_get_id(d);
 
diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h
index 92d54de0b9a1..912a545c93f6 100644
--- a/xen/include/asm-x86/domain.h
+++ b/xen/include/asm-x86/domain.h
@@ -756,6 +756,9 @@ static inline void pv_inject_sw_interrupt(unsigned int vector)
                       : is_pv_32bit_domain(d) ? PV32_VM_ASSIST_MASK \
                                               : PV64_VM_ASSIST_MASK)
 
+gfn_t arch_shared_info_gfn(const struct domain *d);
+#define arch_shared_info_gfn arch_shared_info_gfn
+
 #endif /* __ASM_DOMAIN_H__ */
 
 /*
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 4dbf107785c3..02a2bfa969ec 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -141,6 +141,12 @@ struct xen_domctl_getdomaininfo {
     uint64_aligned_t outstanding_pages;
     uint64_aligned_t shr_pages;
     uint64_aligned_t paged_pages;
+#define XEN_INVALID_SHARED_INFO_FRAME (~(uint64_t)0)
+    /*
+     * GFN of shared_info struct. Some architectures (e.g Arm) may not
+     * provide a mappable address in the field. In that case, the field
+     * will be set to XEN_INVALID_SHARED_INFO_FRAME.
+     */
     uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
     uint64_aligned_t cpu_time;
     uint32_t nr_online_vcpus;    /* Number of VCPUs currently online. */
diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h
index 1708c369642e..d8044b7936ae 100644
--- a/xen/include/xen/domain.h
+++ b/xen/include/xen/domain.h
@@ -133,4 +133,11 @@ static inline void vnuma_destroy(struct vnuma_info *vnuma) { ASSERT(!vnuma); }
 
 extern bool vmtrace_available;
 
+#ifndef arch_shared_info_gfn
+static inline gfn_t arch_shared_info_gfn(const struct domain *d)
+{
+    return INVALID_GFN;
+}
+#endif
+
 #endif /* __XEN_DOMAIN_H__ */
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:12:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:12:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149551.276641 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBZ-0001eJ-0U; Sat, 03 Jul 2021 17:12:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149551.276641; Sat, 03 Jul 2021 17:12:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBY-0001e6-SB; Sat, 03 Jul 2021 17:12:08 +0000
Received: by outflank-mailman (input) for mailman id 149551;
 Sat, 03 Jul 2021 17:12:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjBX-0001Wu-HV
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:12:07 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBW-0007ce-5b; Sat, 03 Jul 2021 17:12:06 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBV-0005vs-TO; Sat, 03 Jul 2021 17:12:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From;
	 bh=aIWtWhcuPOkNdbKN38vfGnv+lqziWSfdZNPE+Udjlj8=; b=Vf9Vm+yQSPcRJdNGq9MMtxp0c
	OwQStU5yFNCZGF9m4yO8Pu6lx/vbibpnPWFR9QnVeKuAkEiUFDn6XVxdISUM3N4mXJ4NHvMMt04dy
	sE4oKpjcoW3XIFTKfFmtGH+k0h9mh0kWm9Zj3Ax4nVGFt6J66u2ZlfhKRuclXqXTypGnc=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <julien.grall@arm.com>,
	Jan Beulich <jbeulich@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: [PATCH v5 4/4] xen/mm: Provide dummy M2P-related helpers when the M2P is not supported
Date: Sat,  3 Jul 2021 18:11:52 +0100
Message-Id: <20210703171152.15874-5-julien@xen.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210703171152.15874-1-julien@xen.org>
References: <20210703171152.15874-1-julien@xen.org>

From: Julien Grall <julien.grall@arm.com>

At the moment, Arm is providing a dummy implementation for the M2P
helpers used in common code. However, they are quite isolated and could
be used by other architecture in the future. So move the helpers
necessary for compilation in xen/mm.h and gate them with a new config
!HAS_M2P. The other M2P related helpers are removed.

Take the opportunity to encode that CONFIG_MEM_SHARING requires
the M2P. It is done in the header rather than the Kconfig because
the option is not defined in the common Kconfig.

Signed-off-by: Julien Grall <julien.grall@arm.com>

---
    INVALID_M2P_ENTRY needs to be defined because it is a parameter
    of set_gpfn_from_mfn(). The alternative would be to not
    evaluate the parameter 'pfn' (e.g. leave the helper as a macro)
    however this is a bit risky.

    Changes in v5:
        - Check that MEM_SHARING is not enabled without the M2P.

    Changes in v4:
        - The tags were dropped as the previous version was sent a long
        time ago.

    Changes in v3:
        - Add Stefano's reviewed-by
        - Add George's acked-by

    Changes in v2:
        - Patch added
---
 xen/arch/x86/Kconfig     |  1 +
 xen/include/asm-arm/mm.h | 11 -----------
 xen/include/xen/mm.h     | 17 +++++++++++++++++
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 9b164db64187..a083d8194680 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -16,6 +16,7 @@ config X86
 	select HAS_FAST_MULTIPLY
 	select HAS_IOPORTS
 	select HAS_KEXEC
+	select HAS_M2P
 	select HAS_NS16550
 	select HAS_PASSTHROUGH
 	select HAS_PCI
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index 07c24654a0b6..beff43786bda 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -318,17 +318,6 @@ static inline void *page_to_virt(const struct page_info *pg)
 struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va,
                                     unsigned long flags);
 
-/*
- * Arm does not have an M2P, but common code expects a handful of
- * M2P-related defines and functions. Provide dummy versions of these.
- */
-#define INVALID_M2P_ENTRY        (~0UL)
-#define SHARED_M2P_ENTRY         (~0UL - 1UL)
-#define SHARED_M2P(_e)           ((_e) == SHARED_M2P_ENTRY)
-
-/* We don't have a M2P on Arm */
-#define set_gpfn_from_mfn(mfn, pfn) do { (void) (mfn), (void)(pfn); } while (0)
-
 /* Arch-specific portion of memory_op hypercall. */
 long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
 
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 667f9dac83a4..b98a1a7f423f 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -612,4 +612,21 @@ static inline void put_page_alloc_ref(struct page_info *page)
     }
 }
 
+/*
+ * Dummy implementation of M2P-related helpers for common code when
+ * the architecture doesn't have an M2P.
+ */
+#ifndef CONFIG_HAS_M2P
+
+#ifdef CONFIG_MEM_SHARING
+# error "Memory sharing depends on the M2P"
+#endif
+
+#define INVALID_M2P_ENTRY        (~0UL)
+#define SHARED_M2P(_e)           ((void)(_e), false)
+
+static inline void set_gpfn_from_mfn(unsigned long mfn, unsigned long pfn) {}
+
+#endif
+
 #endif /* __XEN_MM_H__ */
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:12:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:12:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149549.276620 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBW-00014u-5H; Sat, 03 Jul 2021 17:12:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149549.276620; Sat, 03 Jul 2021 17:12:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBW-00014n-1z; Sat, 03 Jul 2021 17:12:06 +0000
Received: by outflank-mailman (input) for mailman id 149549;
 Sat, 03 Jul 2021 17:12:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjBU-0000oO-Ne
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:12:04 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBU-0007cA-Fg; Sat, 03 Jul 2021 17:12:04 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBU-0005vs-7I; Sat, 03 Jul 2021 17:12:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From;
	 bh=FR0yQDCD2iJpaV70AOOT+E3zRKLyD/84/EMXzs8PXvw=; b=zZ9vO3J39ZF/biDQHuJOiEOO7
	4ShvOFdqg6iNCoF7G/1vB3Zbg+oEe4b8sh2XDSLlkE9CdpFbfo1c8aTAAzK0eRUrxcm7IIrQG2557
	eTV9edB03YJBc5W8D8aZ/alX34kzdIOMlRt6xwND8xrjoLgnMKLYrukvjO6xAZdzpKz20=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <julien.grall@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: [PATCH v5 3/4] xen: arm: Remove mfn_to_gfn() macro
Date: Sat,  3 Jul 2021 18:11:51 +0100
Message-Id: <20210703171152.15874-4-julien@xen.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210703171152.15874-1-julien@xen.org>
References: <20210703171152.15874-1-julien@xen.org>

From: Julien Grall <julien.grall@arm.com>

The current implementation of mfn_to_gfn() is completely bogus and
there are no plan to implement an M2P on Arm. As there are no more
users, drop the helper.

At the same time rework a comment in Arm code that does not make sense.

Signed-off-by: Julien Grall <julien.grall@arm.com>

---
    Changes in v5:
        - Rebase to the latest Xen
        - The patch is now arm only because mfn_to_gmfn() has
        been dropped on x86 and the arm helper was renamed to
        mfn_to_gfn().

    Changes in v4:
        - Remove acks as the patch is old

    Changes in v2:
        - Add Jan's and Stefano's acked-by
---
 xen/include/asm-arm/mm.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index ded74d29da0c..07c24654a0b6 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -326,9 +326,8 @@ struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va,
 #define SHARED_M2P_ENTRY         (~0UL - 1UL)
 #define SHARED_M2P(_e)           ((_e) == SHARED_M2P_ENTRY)
 
-/* Xen always owns P2M on ARM */
+/* We don't have a M2P on Arm */
 #define set_gpfn_from_mfn(mfn, pfn) do { (void) (mfn), (void)(pfn); } while (0)
-#define mfn_to_gfn(d, mfn) ((void)(d), _gfn(mfn_x(mfn)))
 
 /* Arch-specific portion of memory_op hypercall. */
 long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:12:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:12:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149548.276609 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBU-0000oa-UO; Sat, 03 Jul 2021 17:12:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149548.276609; Sat, 03 Jul 2021 17:12:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBU-0000oT-Pc; Sat, 03 Jul 2021 17:12:04 +0000
Received: by outflank-mailman (input) for mailman id 149548;
 Sat, 03 Jul 2021 17:12:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjBT-0000YD-BV
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:12:03 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBR-0007bT-Ta; Sat, 03 Jul 2021 17:12:01 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBR-0005vs-KR; Sat, 03 Jul 2021 17:12:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From;
	 bh=Mi7EgN/CRi27LYrSm9zQaxJ46g16tr2Wj55yCnIlKA4=; b=I/EuoQBYvNK1bKaRntBYRnGvh
	FJ43TXmrBKZj4zbksjE7SIxxWCUKk6nfjSWCj0x0iJJ7YgMKjcCmrz8/L0gJwva1bxEltPCOYbypW
	buNjjooGqQMKG6EXQ6nAueboG2EfwBVx6u/Sn0arGUPWI1///rBxo1zrPXvaKuBnFnhK0=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v5 1/4] xen: XENMEM_exchange should only be used/compiled for arch supporting PV guest
Date: Sat,  3 Jul 2021 18:11:49 +0100
Message-Id: <20210703171152.15874-2-julien@xen.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210703171152.15874-1-julien@xen.org>
References: <20210703171152.15874-1-julien@xen.org>

From: Julien Grall <jgrall@amazon.com>

XENMEM_exchange can only be used by PV guest but the check is well
hidden in steal_page(). This is because paging_model_external() will
return false only for PV domain.

To make clearer this is PV only, add a check at the beginning of the
implementation.

In a follow-up patch, mfn_to_gfn() will be completely removed for
arch not supporting M2P as it is a call for trouble to use it.
Take the opportunity to compile out the code if CONFIG_PV is not set.

Ideally, we would want to to move the hypercall implementation in
arch/x86/pv/mm.c. But this is incredibly tangled.

Signed-off-by: Julien Grall <jgrall@amazon.com>

---

Ideally we would want to move the hypercall implementation in
arch/x86/pv/mm.c. But this is a bit messy. So for now just #ifdef it.

Changes in v5:
    - Removed the #ifdef CONFIG_X86 as they are not necessary anymore
    - Used paging_mode_translate() rather than is_pv_domain()
    - Reword the commit message to explain why the #ifdef rather than
      implementing mfn_to_gfn() using a BUG_ON() or moving the code
      to arch/x86/pv.

Changes in v4:
    - Patch added
---
 xen/common/memory.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/xen/common/memory.c b/xen/common/memory.c
index e07bd9a5ea4b..9bc78aae35db 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -522,6 +522,7 @@ static bool propagate_node(unsigned int xmf, unsigned int *memflags)
 
 static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
 {
+#ifdef CONFIG_PV
     struct xen_memory_exchange exch;
     PAGE_LIST_HEAD(in_chunk_list);
     PAGE_LIST_HEAD(out_chunk_list);
@@ -609,6 +610,13 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
         goto fail_early;
     }
 
+    if ( paging_mode_translate(d) )
+    {
+        rc = -EOPNOTSUPP;
+        rcu_unlock_domain(d);
+        goto fail_early;
+    }
+
     rc = xsm_memory_exchange(XSM_TARGET, d);
     if ( rc )
     {
@@ -648,7 +656,6 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
 
             for ( k = 0; k < (1UL << exch.in.extent_order); k++ )
             {
-#ifdef CONFIG_X86
                 p2m_type_t p2mt;
 
                 /* Shared pages cannot be exchanged */
@@ -659,14 +666,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
                     rc = -ENOMEM;
                     goto fail; 
                 }
-#else /* !CONFIG_X86 */
-                mfn = gfn_to_mfn(d, _gfn(gmfn + k));
-#endif
                 if ( unlikely(!mfn_valid(mfn)) )
                 {
-#ifdef CONFIG_X86
                     put_gfn(d, gmfn + k);
-#endif
                     rc = -EINVAL;
                     goto fail;
                 }
@@ -676,16 +678,12 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
                 rc = steal_page(d, page, MEMF_no_refcount);
                 if ( unlikely(rc) )
                 {
-#ifdef CONFIG_X86
                     put_gfn(d, gmfn + k);
-#endif
                     goto fail;
                 }
 
                 page_list_add(page, &in_chunk_list);
-#ifdef CONFIG_X86
                 put_gfn(d, gmfn + k);
-#endif
             }
         }
 
@@ -768,8 +766,7 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
             guest_physmap_add_page(d, _gfn(gpfn), mfn,
                                    exch.out.extent_order);
 
-            if ( !paging_mode_translate(d) &&
-                 __copy_mfn_to_guest_offset(exch.out.extent_start,
+            if ( __copy_mfn_to_guest_offset(exch.out.extent_start,
                                             (i << out_chunk_order) + j,
                                             mfn) )
                 rc = -EFAULT;
@@ -815,6 +812,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
     if ( __copy_field_to_guest(arg, &exch, nr_exchanged) )
         rc = -EFAULT;
     return rc;
+#else /* !CONFIG_PV */
+    return -EOPNOTSUPP;
+#endif
 }
 
 int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp,
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:12:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:12:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149547.276598 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBT-0000YQ-KW; Sat, 03 Jul 2021 17:12:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149547.276598; Sat, 03 Jul 2021 17:12:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjBT-0000YI-Gt; Sat, 03 Jul 2021 17:12:03 +0000
Received: by outflank-mailman (input) for mailman id 149547;
 Sat, 03 Jul 2021 17:12:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjBS-0000Y7-9U
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:12:02 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBQ-0007bO-Ff; Sat, 03 Jul 2021 17:12:00 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjBQ-0005vs-5R; Sat, 03 Jul 2021 17:12:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Message-Id:Date:Subject:Cc:To:From;
	bh=vTIblyBJkpB3RsYgL5DJmQYV9pVCyJkl3ZpMr+Zl/bY=; b=qibpoE9J4RlwAnl6LmKai9Kq6R
	HeBOO/oWwtwGxjM5OEv5/PgsxaIAB1vwYh4BJOjIQQhx5ilym+0MCFFpHmSPinch9Yy23nhrUvKGk
	70xot3ergBj8VyVDZOoC3ol8DFsTyTBY77Ec4QLIePcq6Lz2npq60s5RNBkxa1BQSzLU=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: [PATCH v5 0/4] xen/arm: Properly disable M2P on Arm
Date: Sat,  3 Jul 2021 18:11:48 +0100
Message-Id: <20210703171152.15874-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1

From: Julien Grall <jgrall@amazon.com>

Hi all,

Arm never supported a M2P yet there are some helpers implemented to deal with
the common code. However, the implementation of mfn_to_gmfn is completely
bogus.

This series aims to properly disable the M2P on Arm.

Cheers,

Julien Grall (4):
  xen: XENMEM_exchange should only be used/compiled for arch supporting
    PV guest
  xen: arm: Stop returning a bogus GFN for the shared info
  xen: arm: Remove mfn_to_gfn() macro
  xen/mm: Provide dummy M2P-related helpers when the M2P is not
    supported

 xen/arch/x86/Kconfig         |  1 +
 xen/arch/x86/domain.c        |  9 +++++++++
 xen/common/Kconfig           |  3 +++
 xen/common/domctl.c          | 10 +++++++---
 xen/common/memory.c          | 24 ++++++++++++------------
 xen/include/asm-arm/mm.h     | 12 ------------
 xen/include/asm-x86/domain.h |  3 +++
 xen/include/public/domctl.h  |  6 ++++++
 xen/include/xen/domain.h     |  7 +++++++
 xen/include/xen/mm.h         | 17 +++++++++++++++++
 10 files changed, 65 insertions(+), 27 deletions(-)

-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:17:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:17:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149570.276656 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjH4-0003k1-QF; Sat, 03 Jul 2021 17:17:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149570.276656; Sat, 03 Jul 2021 17:17:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjH4-0003ju-Ma; Sat, 03 Jul 2021 17:17:50 +0000
Received: by outflank-mailman (input) for mailman id 149570;
 Sat, 03 Jul 2021 17:17:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjH3-0003jo-Fs
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:17:49 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjH1-0007lM-LK; Sat, 03 Jul 2021 17:17:47 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjH1-0006Hx-Ep; Sat, 03 Jul 2021 17:17:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=3UfzSvMMnZkxcyV4Kvv08/v+z5+aqf8C6iBaDyXpPcM=; b=K5ELL+7YlduhIpK/sI+E1DPzeC
	KFxa7HiFU2JbztqXPVClRqDSJgKhFf5sgDhcJb1HKETr/ndBJdUMALy95+PXcMdgAtcHBeFv+i3G5
	HbBcvyzpzyXBsUrFoqnBL+DM+uQGeUuhI5jfNjKtO8UEm2FcXG0wbR4FiwrsN14QNlZU=;
Subject: Re: Uses of /hypervisor memory range (was: FreeBSD/Xen/ARM issues)
To: Oleksandr Andrushchenko <andr2000@gmail.com>,
 Stefano Stabellini <sstabellini@kernel.org>
Cc: Elliott Mitchell <ehem+xen@m5p.com>, xen-devel@lists.xenproject.org,
 Roger Pau Monn?? <royger@freebsd.org>, Mitchell Horne <mhorne@freebsd.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Artem Mygaiev <Artem_Mygaiev@epam.com>,
 Anastasiia Lukianenko <Anastasiia_Lukianenko@epam.com>
References: <YIptpndhk6MOJFod@Air-de-Roger>
 <YItwHirnih6iUtRS@mattapan.m5p.com> <YIu80FNQHKS3+jVN@Air-de-Roger>
 <YJDcDjjgCsQUdsZ7@mattapan.m5p.com> <YJURGaqAVBSYnMRf@Air-de-Roger>
 <YJYem5CW/97k/e5A@mattapan.m5p.com> <YJs/YAgB8molh7e5@mattapan.m5p.com>
 <54427968-9b13-36e6-0001-27fb49f85635@xen.org>
 <YJ3jlGSxs60Io+dp@mattapan.m5p.com>
 <93936406-574f-7fd0-53bf-3bafaa4b1947@xen.org>
 <YJ8hTE/JbJygtVAL@mattapan.m5p.com>
 <f7360dac-5d83-733b-7ec5-c73d4dc0350d@xen.org>
 <alpine.DEB.2.21.2105191611540.14426@sstabellini-ThinkPad-T480s>
 <b6fe6e06-517c-ee4c-5b71-a1bee4d4df13@xen.org>
 <alpine.DEB.2.21.2105200919100.14426@sstabellini-ThinkPad-T480s>
 <2d18f588-5e76-e3da-e7df-5c754516f8d6@gmail.com>
From: Julien Grall <julien@xen.org>
Message-ID: <b9247885-8fc0-3a74-8f86-740997b4453e@xen.org>
Date: Sat, 3 Jul 2021 18:17:45 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <2d18f588-5e76-e3da-e7df-5c754516f8d6@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 18/06/2021 13:19, Oleksandr Andrushchenko wrote:
> Hi, all!

Hi,

Sorry for the late reply.

> What do we need in order to move on on this?

The next steps would be
  1) Write a PoC to confirm the approach is feasible
  2) Write a design document

Unfortunately, I will not have time to work on it any time soon. Is it 
something you plan to work on?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:32:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:32:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149581.276673 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjVY-00066n-5k; Sat, 03 Jul 2021 17:32:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149581.276673; Sat, 03 Jul 2021 17:32:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjVY-00066g-2j; Sat, 03 Jul 2021 17:32:48 +0000
Received: by outflank-mailman (input) for mailman id 149581;
 Sat, 03 Jul 2021 17:32:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjVX-00066a-CU
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:32:47 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjVV-00084K-K9; Sat, 03 Jul 2021 17:32:45 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjVV-0007Gb-Dx; Sat, 03 Jul 2021 17:32:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=3Tza1UvXeufzHbNeU33KlJq7y0V7wQ/yltCLXkHqNMw=; b=zjHKeanavASjFJ6MALVKr2cEwn
	rXrcD9cn6UiDzTNkCQgBksG8jpDVAtcUV62yxOCOz3HjreoFf80Yo58Tx+9s5Bk9zmLlp65gZULuh
	hjbgHLcv0h4ZzW2GdFV07KjqtlpE7Bd9fk6anKajX/WYSc+9ECx2DC/1QdBLQmE/GzBE=;
Subject: Re: [PATCH RFCv2 02/15] xen/arm: lpae: Use the generic helpers to
 defined the Xen PT helpers
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, Wei.Chen@arm.com, Henry.Wang@arm.com,
 Penny.Zheng@arm.com, Bertrand.Marquis@arm.com,
 Julien Grall <jgrall@amazon.com>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <20210425201318.15447-1-julien@xen.org>
 <20210425201318.15447-3-julien@xen.org>
 <alpine.DEB.2.21.2105111515470.5018@sstabellini-ThinkPad-T480s>
 <94e364a7-de40-93ab-6cde-a2f493540439@xen.org>
 <alpine.DEB.2.21.2105121425500.5018@sstabellini-ThinkPad-T480s>
 <e834b447-46c2-14fe-a39c-209d4d6ca5fe@xen.org>
 <alpine.DEB.2.21.2105131533070.5018@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <9397d94d-5a22-c026-7c66-400b7397c2fa@xen.org>
Date: Sat, 3 Jul 2021 18:32:43 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2105131533070.5018@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

Sorry for the late answer.

On 13/05/2021 23:44, Stefano Stabellini wrote:
> On Wed, 12 May 2021, Julien Grall wrote:
>> Hi Stefano,
>>
>> On 12/05/2021 22:30, Stefano Stabellini wrote:
>>> On Wed, 12 May 2021, Julien Grall wrote:
>>>>>> +#define LPAE_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
>>>>>> +#define LPAE_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
>>>>>> +#define LPAE_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
>>>>>>
>>>>>> +#define LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
>>>>>> +#define LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
>>>>>> +#define LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
>>>>>> +#define LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
>>>>>
>>>>> I would avoid adding these 4 macros. It would be OK if they were just
>>>>> used within this file but lpae.h is a header: they could end up be used
>>>>> anywhere in the xen/ code and they have a very generic name. My
>>>>> suggestion would be to skip them and just do:
>>>>
>>>> Those macros will be used in follow-up patches. They are pretty useful to
>>>> avoid introduce static array with the different information for each
>>>> level.
>>>>
>>>> Would prefix them with XEN_ be better?
>>>
>>> Maybe. The concern I have is that there are multiple page granularities
>>> (4kb, 16kb, etc) and multiple page sizes (4kb, 2mb, etc). If I just see
>>> LEVEL_ORDER it is not immediately obvious what granularity and what size
>>> we are talking about.
>>
>> I am a bit puzzled with your answer. AFAIU, you are happy with the existing
>> macros (THIRD_*, SECOND_*) but not with the new macros.
>>
>> In reality, there is no difference because THIRD_* doesn't tell you the exact
>> size but only "this is a level 3 mapping".
>>
>> So can you clarify what you are after? IOW is it reworking the current naming
>> scheme?
> 
> You are right -- there is no real difference between THIRD_*, SECOND_*
> and LEVEL_*.
> 
> The original reason for my comments is that I hadn't read the following
> patches, and the definition of LEVEL_* macros is simple, they could be
> open coded. It looked like they were only going to be used to make the
> definition of THIRD_*, SECOND_* a bit easier. So, at first, I was
> wondering if they were needed at all.
> 
> Secondly, I realized that they were going to be used in *.c files by
> other patches. That's why they are there. But I started thinking whether
> we should find a way to make it a bit clearer that they are for Xen
> pages, currently at 4KB granularity. THIRD_*, SECOND_*, etc. are already
> generic names which don't convey the granularity or whether they are Xen
> pages at all. But LEVEL_* seem even more generic.
> 
> As I mentioned, I don't have any good suggestions for changes to make
> here, so unless you can come up with a good idea let's keep it as is.

I am thinking to use the following naming (diff on top of this patch):

-#define LPAE_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
-#define LPAE_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
-#define LPAE_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
+#define XEN_PT_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
+#define XEN_PT_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
+#define XEN_PT_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)

-#define LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
-#define LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
-#define LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
-#define LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
+#define XEN_PT_LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
+#define XEN_PT_LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
+#define XEN_PT_LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
+#define XEN_PT_LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))

  /* Convenience aliases */
-#define THIRD_SHIFT         LEVEL_SHIFT(3)
-#define THIRD_ORDER         LEVEL_ORDER(3)
-#define THIRD_SIZE          LEVEL_SIZE(3)
-#define THIRD_MASK          LEVEL_MASK(3)
-
-#define SECOND_SHIFT        LEVEL_SHIFT(2)
-#define SECOND_ORDER        LEVEL_ORDER(2)
-#define SECOND_SIZE         LEVEL_SIZE(2)
-#define SECOND_MASK         LEVEL_MASK(2)
-
-#define FIRST_SHIFT         LEVEL_SHIFT(1)
-#define FIRST_ORDER         LEVEL_ORDER(1)
-#define FIRST_SIZE          LEVEL_SIZE(1)
-#define FIRST_MASK          LEVEL_MASK(1)
-
-#define ZEROETH_SHIFT       LEVEL_SHIFT(0)
-#define ZEROETH_ORDER       LEVEL_ORDER(0)
-#define ZEROETH_SIZE        LEVEL_SIZE(0)
-#define ZEROETH_MASK        LEVEL_MASK(0)
+#define THIRD_SHIFT         XEN_PT_LEVEL_SHIFT(3)
+#define THIRD_ORDER         XEN_PT_LEVEL_ORDER(3)
+#define THIRD_SIZE          XEN_PT_LEVEL_SIZE(3)
+#define THIRD_MASK          XEN_PT_LEVEL_MASK(3)
+
+#define SECOND_SHIFT        XEN_PT_LEVEL_SHIFT(2)
+#define SECOND_ORDER        XEN_PT_LEVEL_ORDER(2)
+#define SECOND_SIZE         XEN_PT_LEVEL_SIZE(2)
+#define SECOND_MASK         XEN_PT_LEVEL_MASK(2)
+
+#define FIRST_SHIFT         XEN_PT_LEVEL_SHIFT(1)
+#define FIRST_ORDER         XEN_PT_LEVEL_ORDER(1)
+#define FIRST_SIZE          XEN_PT_LEVEL_SIZE(1)
+#define FIRST_MASK          XEN_PT_LEVEL_MASK(1)
+
+#define ZEROETH_SHIFT       XEN_PT_LEVEL_SHIFT(0)
+#define ZEROETH_ORDER       XEN_PT_LEVEL_ORDER(0)
+#define ZEROETH_SIZE        XEN_PT_LEVEL_SIZE(0)
+#define ZEROETH_MASK        XEN_PT_LEVEL_MASK(0)

I don't plan to modify the nameing for ZEROETH*, FIRST*, SECOND*, THIRD*.

Let me know if you prefer it over the currrent naming.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 17:57:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 17:57:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149588.276690 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjtL-0008Ov-EX; Sat, 03 Jul 2021 17:57:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149588.276690; Sat, 03 Jul 2021 17:57:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjtL-0008Oo-BF; Sat, 03 Jul 2021 17:57:23 +0000
Received: by outflank-mailman (input) for mailman id 149588;
 Sat, 03 Jul 2021 17:57:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1lzjtJ-0008Oi-Mk
 for xen-devel@lists.xenproject.org; Sat, 03 Jul 2021 17:57:21 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjtE-0008Uk-Nj; Sat, 03 Jul 2021 17:57:16 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1lzjtE-0000vw-Gj; Sat, 03 Jul 2021 17:57:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=FRoQj8C3a/dd4DePsdlLWSExr9beT/irMjZWmijnTms=; b=GlSU7MO5pQkAJ80zHghZQJdXMJ
	4NmTGQSIq/Sh5GpysruccZSB6tZyNovC5m0eX6YI+LVrk0f4jJVTaYhmrCXjKsETc0kmZ0WCN9XT+
	44n6XVqRffAcgDAqeLmrG1owUYZk4eR1vBtW+TSoPD4pjMlg++yVrcamKfauzdmh3FwQ=;
Subject: Re: [PATCH RFCv2 12/15] xen/arm: add Persistent Map (PMAP)
 infrastructure
To: "Xia, Hongyan" <hongyxia@amazon.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: "Penny.Zheng@arm.com" <Penny.Zheng@arm.com>,
 "Bertrand.Marquis@arm.com" <Bertrand.Marquis@arm.com>,
 "Wei.Chen@arm.com" <Wei.Chen@arm.com>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 "wei.liu2@citrix.com" <wei.liu2@citrix.com>,
 "andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>,
 "roger.pau@citrix.com" <roger.pau@citrix.com>,
 "Volodymyr_Babchuk@epam.com" <Volodymyr_Babchuk@epam.com>,
 "hongyax@amazon.com" <hongyax@amazon.com>,
 "Henry.Wang@arm.com" <Henry.Wang@arm.com>, "wl@xen.org" <wl@xen.org>,
 "Grall, Julien" <jgrall@amazon.co.uk>, "jbeulich@suse.com"
 <jbeulich@suse.com>
References: <20210425201318.15447-1-julien@xen.org>
 <20210425201318.15447-13-julien@xen.org>
 <baccb4ab6c71a655a4ac19cc27f2eacc116b8d4b.camel@amazon.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d3bdec7f-837e-a055-4fe5-a5ceff0c5a51@xen.org>
Date: Sat, 3 Jul 2021 18:57:13 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <baccb4ab6c71a655a4ac19cc27f2eacc116b8d4b.camel@amazon.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Hongyan,

On 26/04/2021 10:41, Xia, Hongyan wrote:
> On Sun, 2021-04-25 at 21:13 +0100, Julien Grall wrote:
>> From: Wei Liu <wei.liu2@citrix.com>
>>
>> The basic idea is like Persistent Kernel Map (PKMAP) in Linux. We
>> pre-populate all the relevant page tables before the system is fully
>> set up.
>>
>> We will need it on Arm in order to rework the arm64 version of
>> xenheap_setup_mappings() as we may need to use pages allocated from
>> the boot allocator before they are effectively mapped.
>>
>> This infrastructure is not lock-protected therefore can only be used
>> before smpboot. After smpboot, map_domain_page() has to be used.
>>
>> This is based on the x86 version [1] that was originally implemented
>> by Wei Liu.
>>
>> Take the opportunity to switch the parameter attr from unsigned to
>> unsigned int.
>>
>> [1] <
>> e92da4ad6015b6089737fcccba3ec1d6424649a5.1588278317.git.hongyxia@amazon.com
>>>
>>
>> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>> Signed-off-by: Hongyan Xia <hongyxia@amazon.com>
>> [julien: Adapted for Arm]
>> Signed-off-by: Julien Grall <jgrall@amazon.com>
> 
> [...]
> 
>> diff --git a/xen/arch/arm/pmap.c b/xen/arch/arm/pmap.c
>> new file mode 100644
>> index 000000000000..702b1bde982d
>> --- /dev/null
>> +++ b/xen/arch/arm/pmap.c
>> @@ -0,0 +1,101 @@
>> +#include <xen/init.h>
>> +#include <xen/mm.h>
>> +
>> +#include <asm/bitops.h>
>> +#include <asm/flushtlb.h>
>> +#include <asm/pmap.h>
>> +
>> +/*
>> + * To be able to use FIXMAP_PMAP_BEGIN.
>> + * XXX: move fixmap definition in a separate header
>> + */
>> +#include <xen/acpi.h>
>> +
>> +/*
>> + * Simple mapping infrastructure to map / unmap pages in fixed map.
>> + * This is used to set up the page table for mapcache, which is used
>> + * by map domain page infrastructure.
>> + *
>> + * This structure is not protected by any locks, so it must not be
>> used after
>> + * smp bring-up.
>> + */
>> +
>> +/* Bitmap to track which slot is used */
>> +static unsigned long __initdata inuse;
>> +
>> +/* XXX: Find an header to declare it */
>> +extern lpae_t xen_fixmap[LPAE_ENTRIES];
>> +
>> +void *__init pmap_map(mfn_t mfn)
>> +{
>> +    unsigned long flags;
>> +    unsigned int idx;
>> +    vaddr_t linear;
>> +    unsigned int slot;
>> +    lpae_t *entry, pte;
>> +
>> +    BUILD_BUG_ON(sizeof(inuse) * BITS_PER_LONG < NUM_FIX_PMAP);
> 
> This seems wrong to me. It should multiply with something like
> BITS_PER_BYTE.

Good spot! I have updated my tree.

> 
> I noticed this line was already present before the Arm version so
> probably my fault :(, which also needs to be fixed.

This should be taken care as the next version will create the pmap in 
common code :).

> 
>> +
>> +    ASSERT(system_state < SYS_STATE_smp_boot);
>> +
>> +    local_irq_save(flags);
>> +
>> +    idx = find_first_zero_bit(&inuse, NUM_FIX_PMAP);
>> +    if ( idx == NUM_FIX_PMAP )
>> +        panic("Out of PMAP slots\n");
>> +
>> +    __set_bit(idx, &inuse);
>> +
>> +    slot = idx + FIXMAP_PMAP_BEGIN;
>> +    ASSERT(slot >= FIXMAP_PMAP_BEGIN && slot <= FIXMAP_PMAP_END);
>> +
> 
>  From here...
> 
>> +    linear = FIXMAP_ADDR(slot);
>> +    /*
>> +     * We cannot use set_fixmap() here. We use PMAP when there is no
>> direct map,
>> +     * so map_pages_to_xen() called by set_fixmap() needs to map
>> pages on
>> +     * demand, which then calls pmap() again, resulting in a loop.
>> Modify the
>> +     * PTEs directly instead. The same is true for pmap_unmap().
>> +     */
>> +    entry = &xen_fixmap[third_table_offset(linear)];
>> +
>> +    ASSERT(!lpae_is_valid(*entry));
>> +
>> +    pte = mfn_to_xen_entry(mfn, PAGE_HYPERVISOR_RW);
>> +    pte.pt.table = 1;
>> +    write_pte(entry, pte);
>> +
> 
> ...to here, I wonder if we can move this chunk into arch (like void
> *arch_write_pmap_slot(slot)). Such an arch function hides how fixmap is
> handled and how page table entry is written behind arch, and the rest
> can just be common.

This is similar to what I had in mind. Let me give a try for the next 
version.

> 
>> +    local_irq_restore(flags);
>> +
>> +    return (void *)linear;
>> +}
>> +
>> +void __init pmap_unmap(const void *p)
>> +{
>> +    unsigned long flags;
>> +    unsigned int idx;
>> +    lpae_t *entry;
>> +    lpae_t pte = { 0 };
>> +    unsigned int slot = third_table_offset((vaddr_t)p);
>> +
>> +    ASSERT(system_state < SYS_STATE_smp_boot);
>> +    ASSERT(slot >= FIXMAP_PMAP_BEGIN && slot <= FIXMAP_PMAP_END);
>> +
>> +    idx = slot - FIXMAP_PMAP_BEGIN;
>> +    local_irq_save(flags);
>> +
>> +    __clear_bit(idx, &inuse);
>> +    entry = &xen_fixmap[third_table_offset((vaddr_t)p)];
>> +    write_pte(entry, pte);
>> +    flush_xen_tlb_range_va_local((vaddr_t)p, PAGE_SIZE);
> 
> and the same for the above, something like arch_clear_pmap(void *) and
> the rest into common.
> 
>  From a quick glance, I don't think x86 and Arm share any useful TLB
> flush helpers? So the TLB flush probably should be behind arch as well.

We could potential define flush_tlb_one_local() on Arm. But, I am not 
sure this is worth it because the page table manipulation is mainly 
happening in arch code so far. Although, this might change in the future.

> 
>> +
>> +    local_irq_restore(flags);
>> +}
>> +
>> +/*
>> + * Local variables:
>> + * mode: C
>> + * c-file-style: "BSD"
>> + * c-basic-offset: 4
>> + * indent-tabs-mode: nil
>> + * End:
>> + */
> 
> [...]
> 
>> diff --git a/xen/include/asm-arm/pmap.h b/xen/include/asm-arm/pmap.h
>> new file mode 100644
>> index 000000000000..8e1dce93f8e4
>> --- /dev/null
>> +++ b/xen/include/asm-arm/pmap.h
>> @@ -0,0 +1,10 @@
>> +#ifndef __ASM_PMAP_H__
>> +#define __ARM_PMAP_H__
> 
> This line doesn't seem to match the #ifndef, but if the functions are
> moved to common, this header can be moved to common as well.

Stefano pointed out the same. I have fixed it in my tree but I will 
likely rename the guard as the header will be moved in common.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 18:01:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 18:01:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149600.276723 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjx6-0001j6-Be; Sat, 03 Jul 2021 18:01:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149600.276723; Sat, 03 Jul 2021 18:01:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzjx6-0001iz-8l; Sat, 03 Jul 2021 18:01:16 +0000
Received: by outflank-mailman (input) for mailman id 149600;
 Sat, 03 Jul 2021 18:01:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzjx5-0001ip-Ac; Sat, 03 Jul 2021 18:01:15 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzjx5-0000Ff-3a; Sat, 03 Jul 2021 18:01:15 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzjx4-0001mK-Nb; Sat, 03 Jul 2021 18:01:14 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzjx4-0001TB-N8; Sat, 03 Jul 2021 18:01:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+E1MTzXRSG5qBKjaS0paHjhAHKaobaobHcoFLIXDobU=; b=WP/1WFx100EdS6xdk2hmzZuql1
	LBSxyXVaimUrs3a5d6enijsX2q1QZo4KorDBhn4ZyXpZyLdU+1ZsHyo+MBDiIItAQED9OjyHcsPEx
	Udj1/5UPt2YBExOHaNWUx8zffDL74vV72lvbdWfbwkYlhiJyeTJQKzblP9mim1iPrPZY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163239-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163239: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
X-Osstest-Versions-That:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 18:01:14 +0000

flight 163239 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163239/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163219

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

version targeted for testing:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8
baseline version:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0

Last test of basis   163219  2021-07-02 01:52:38 Z    1 days
Failing since        163231  2021-07-02 18:06:46 Z    0 days    2 attempts
Testing same since   163239  2021-07-03 06:48:53 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ian Jackson <iwj@xenproject.org>
  Olaf Hering <olaf@aepfle.de>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   f95b7b37cf..74d044d51b  74d044d51b19bb697eac5c3deafa140f6afafec8 -> master


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 18:06:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 18:06:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149611.276738 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzk2O-0002Ph-1s; Sat, 03 Jul 2021 18:06:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149611.276738; Sat, 03 Jul 2021 18:06:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzk2N-0002Pa-Ty; Sat, 03 Jul 2021 18:06:43 +0000
Received: by outflank-mailman (input) for mailman id 149611;
 Sat, 03 Jul 2021 18:06:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzk2N-0002PQ-7I; Sat, 03 Jul 2021 18:06:43 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzk2N-0000LW-1P; Sat, 03 Jul 2021 18:06:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzk2M-0001wl-Qw; Sat, 03 Jul 2021 18:06:42 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzk2M-0006PI-QM; Sat, 03 Jul 2021 18:06:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xfPByzuy9ya9E1B0xTyj3b3FsRny4iojOhnChI8sIck=; b=YFDVt0v/7y3VOjMfAQytvZ1rpq
	bqX6k4tTz8P3nyFbNkBAno5g4UipqWEGULgWpOjZpc0l4IrrD3zHT7kvVrK00tiE1X6F+TkVIPy+C
	ujWnVAsT3GAUTTF6DzQGPevhR5uo0944EUhJjq8U9zJncE7vaKtUE2luGswCHlPdwiEk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163259-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163259: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 18:06:42 +0000

flight 163259 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163259/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   29 days
Failing since        162368  2021-06-04 15:42:59 Z   29 days   79 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    1 days    9 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 21:53:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 21:53:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149618.276755 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lznZf-0005Dd-H5; Sat, 03 Jul 2021 21:53:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149618.276755; Sat, 03 Jul 2021 21:53:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lznZf-0005DW-Dl; Sat, 03 Jul 2021 21:53:19 +0000
Received: by outflank-mailman (input) for mailman id 149618;
 Sat, 03 Jul 2021 21:53:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lznZd-0005DJ-To; Sat, 03 Jul 2021 21:53:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lznZd-00041u-L3; Sat, 03 Jul 2021 21:53:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lznZd-0003Qc-9M; Sat, 03 Jul 2021 21:53:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lznZd-0001E2-8s; Sat, 03 Jul 2021 21:53:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=kpWidmv6G5muS/aDPN4JUP0+KDlVisU0eWHEbtZqsIE=; b=CbEGjlE0XZ99okxZ6R/TnWXbnG
	dCZBxdpu1+kiMrFbXm4mKdR2ykZ4q5yASKEEgkJP6Ow+qjROa3bGGPVO8jJiIrMOcaNcnxWKxYWBa
	PfeQa5hKskmruva1GqZaKUiVCbhe3VoZL1BhAyC52/0nPeQz7CKXdjZbbAZBhSivyoTQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163247-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163247: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl:guest-start/debian.repeat:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start/freebsd.repeat:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=4b820e167bf6f410ace479d8df5b15a574000e75
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 21:53:17 +0000

flight 163247 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163247/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-xl         22 guest-start/debian.repeat fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-amd64-qemuu-freebsd12-amd64 21 guest-start/freebsd.repeat fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                4b820e167bf6f410ace479d8df5b15a574000e75
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  337 days
Failing since        152366  2020-08-01 20:49:34 Z  336 days  572 attempts
Testing same since   163247  2021-07-03 08:35:18 Z    0 days    1 attempts

------------------------------------------------------------
6531 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          fail    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1883242 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 03 22:30:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 03 Jul 2021 22:30:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149626.276768 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzo9U-0000j3-II; Sat, 03 Jul 2021 22:30:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149626.276768; Sat, 03 Jul 2021 22:30:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzo9U-0000iw-FR; Sat, 03 Jul 2021 22:30:20 +0000
Received: by outflank-mailman (input) for mailman id 149626;
 Sat, 03 Jul 2021 22:30:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzo9S-0000im-S5; Sat, 03 Jul 2021 22:30:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzo9S-0004cq-Kq; Sat, 03 Jul 2021 22:30:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzo9S-0004XG-Bq; Sat, 03 Jul 2021 22:30:18 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzo9S-0004HW-BL; Sat, 03 Jul 2021 22:30:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=DxHshweDV9gVaRgSXRGNByA/bCajxFexYwqS2ILhYvk=; b=Hk1x9zhN9bGWQDgaTCBaa2zOL5
	KK2I/643QiC8Y/YQZ/3A2x9gBKkKyvQ30dxjWY05iouiIoiJTcO4aXq1Wpq6hTfnR51rmuywoGBeq
	TcjgjAZ/1s5+q2PeHV85eO3lrhFsr85G0GXUgr4DAYL6GK2XxW2WHuEFt/IPlP1TfDRI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163289-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163289: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 03 Jul 2021 22:30:18 +0000

flight 163289 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163289/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   29 days
Failing since        162368  2021-06-04 15:42:59 Z   29 days   80 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    1 days   10 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 00:58:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 00:58:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149633.276782 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzqSW-0005Hy-Jm; Sun, 04 Jul 2021 00:58:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149633.276782; Sun, 04 Jul 2021 00:58:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzqSW-0005Hr-Gm; Sun, 04 Jul 2021 00:58:08 +0000
Received: by outflank-mailman (input) for mailman id 149633;
 Sun, 04 Jul 2021 00:58:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzqSV-0005Hh-DZ; Sun, 04 Jul 2021 00:58:07 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzqSV-0007bF-7N; Sun, 04 Jul 2021 00:58:07 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzqSU-0002uT-RX; Sun, 04 Jul 2021 00:58:06 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzqSU-0000MF-R4; Sun, 04 Jul 2021 00:58:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=dr4DmJAIpCZEcSxOHf+lHSnW6VpHuG5UrtrdXd5oV/s=; b=vThNbRnUUdGUZ5sPLBSl7RBlI4
	kYHyLl1HzQ8Awo0lwgzcLy7RzqZwfwkclqZl2dVBDUEVs/9AXLQlf41iKTLas2dF9gAzmdGcG+Avs
	ybaxDJLgxg6rB2Qr2ToqEVc3T/fSAND9VV0U9BQkebyjCTG+sKi3DkrQNF9tCU1fUEg8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163276-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163276: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:regression
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start:fail:heisenbug
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 00:58:06 +0000

flight 163276 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163276/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 152631
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1       fail REGR. vs. 152631

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds     14 guest-start                fail pass in 163235

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-rtds 18 guest-start/debian.repeat fail in 163235 like 152631
 test-armhf-armhf-xl-rtds    15 migrate-support-check fail in 163235 never pass
 test-armhf-armhf-xl-rtds 16 saverestore-support-check fail in 163235 never pass
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  317 days
Failing since        152659  2020-08-21 14:07:39 Z  316 days  581 attempts
Testing same since   163228  2021-07-02 17:08:27 Z    1 days    3 attempts

------------------------------------------------------------
554 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 182071 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 02:47:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 02:47:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149640.276797 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzs9s-0007wy-9H; Sun, 04 Jul 2021 02:47:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149640.276797; Sun, 04 Jul 2021 02:47:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzs9s-0007wj-2n; Sun, 04 Jul 2021 02:47:00 +0000
Received: by outflank-mailman (input) for mailman id 149640;
 Sun, 04 Jul 2021 02:46:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzs9r-0007wa-NG; Sun, 04 Jul 2021 02:46:59 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzs9r-0001wS-GE; Sun, 04 Jul 2021 02:46:59 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzs9q-00062b-Mb; Sun, 04 Jul 2021 02:46:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzs9q-0001e3-M7; Sun, 04 Jul 2021 02:46:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tzQHLeM8RxlSuQ50k4+KUxzQGvcEKXSclTzHf1i8xX4=; b=Aq5tZ4JpNtSk22QV33APk6GCwJ
	PpAZBGzyD1JAd0WX/pKipi9hzHlwY0fAH32P5+Y+C3tHGOkCZ2SSwwZGi0iYxLnCRAJz1tdxu13O4
	7qxfSLkLyS5ZRkZHFaHJa3zGRz9jWc+yAS5ej9BCdmYt6sUlRkzfV0JhjToSFXUt+hE8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163291-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163291: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 02:46:58 +0000

flight 163291 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163291/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   29 days
Failing since        162368  2021-06-04 15:42:59 Z   29 days   81 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    2 days   11 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 05:47:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 05:47:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149647.276811 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzuxt-0007Bi-LG; Sun, 04 Jul 2021 05:46:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149647.276811; Sun, 04 Jul 2021 05:46:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzuxt-0007BG-Cz; Sun, 04 Jul 2021 05:46:49 +0000
Received: by outflank-mailman (input) for mailman id 149647;
 Sun, 04 Jul 2021 05:46:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzuxr-0007B6-Pg; Sun, 04 Jul 2021 05:46:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzuxr-0005Ks-HL; Sun, 04 Jul 2021 05:46:47 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzuxq-0005S5-CN; Sun, 04 Jul 2021 05:46:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzuxq-00009a-9v; Sun, 04 Jul 2021 05:46:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=p71YwfGylOGfGFyzTAPeA9Lwilpxz59pOib2pROUSkU=; b=e+zn5kQIkLyHEW7bgptATjPVcZ
	ZIz+C4ECQvz3+zJ1P86bo+eJsgeyIAfdPQJnPA+IujNuSSir5C5wG6hdDGe4pT5itsOANB9fsYUA+
	o6vjV5eChQ8WpRo9O1Je6U2VdZWySZ5h4gZn/se0iWU8QTmlJXp77tDwpTqyPAeHMWhc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163290-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163290: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=303392fd5c160822bf778270b28ec5ea50cab2b4
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 05:46:46 +0000

flight 163290 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163290/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                303392fd5c160822bf778270b28ec5ea50cab2b4
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  337 days
Failing since        152366  2020-08-01 20:49:34 Z  336 days  573 attempts
Testing same since   163290  2021-07-03 22:11:05 Z    0 days    1 attempts

------------------------------------------------------------
6537 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1888347 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 08:02:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 08:02:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149656.276824 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzx4o-0003D3-HM; Sun, 04 Jul 2021 08:02:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149656.276824; Sun, 04 Jul 2021 08:02:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzx4o-0003Cw-EI; Sun, 04 Jul 2021 08:02:06 +0000
Received: by outflank-mailman (input) for mailman id 149656;
 Sun, 04 Jul 2021 08:02:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzx4m-0003Cm-As; Sun, 04 Jul 2021 08:02:04 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzx4m-00086L-5D; Sun, 04 Jul 2021 08:02:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzx4l-0003nu-TU; Sun, 04 Jul 2021 08:02:03 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzx4l-00028o-Sg; Sun, 04 Jul 2021 08:02:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=AyK5t5UnC6eQpnf4fejdlq1si7G7IhWMNiwN9ooEdIg=; b=QG+XmoAW7pJaHIhI0iUcdN0xvo
	JcHbIu4xU/GuQ9Rn/nGVbZWOaIO9ohlV+WwZl/2jPqj/5v6HpKgcmiaAt/4xGpZogG6O6d2+ReGd9
	Rgfwx6RzkGn7mFnfBp5ocoqJRmDw4IYFxILqtEMJpMXAMUpJu4NExUaQbkFDQC+Sj6Dc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163295-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163295: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 08:02:03 +0000

flight 163295 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163295/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  359 days
Failing since        151818  2020-07-11 04:18:52 Z  358 days  350 attempts
Testing same since   163236  2021-07-03 04:20:01 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63952 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 09:34:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 09:34:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149663.276838 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzyWC-0002wh-S1; Sun, 04 Jul 2021 09:34:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149663.276838; Sun, 04 Jul 2021 09:34:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzyWC-0002wa-P1; Sun, 04 Jul 2021 09:34:28 +0000
Received: by outflank-mailman (input) for mailman id 149663;
 Sun, 04 Jul 2021 09:34:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyWB-0002wO-0K; Sun, 04 Jul 2021 09:34:27 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyWA-00017z-R6; Sun, 04 Jul 2021 09:34:26 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyWA-0001tC-ED; Sun, 04 Jul 2021 09:34:26 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyWA-0001fA-DU; Sun, 04 Jul 2021 09:34:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ZGL/v4vv8FQWnqCuoisJ6crTio/E6QL/PClZ5VvCcWc=; b=wWlpDdj4tm1eTacJ80f3zu0asl
	o6dsWwWIC1J7TdE+7P5u3Ki4D64ZL9zlbfV0bm2f04ctn430c516dCzHus+LVJ5VCoIkQbPPPNxLp
	riRKZPNIHO2i97muHqtDNAeYoHelFQqrqndFqy2Pb/bW5S9gu+B1XSYu2Y7xMBNF+HIU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163292-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163292: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
X-Osstest-Versions-That:
    qemuu=1d806cef0e38b5db8347a8e12f214d543204a314
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 09:34:26 +0000

flight 163292 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163292/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152631
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 152631
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152631
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152631
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 152631
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152631
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
baseline version:
 qemuu                1d806cef0e38b5db8347a8e12f214d543204a314

Last test of basis   152631  2020-08-20 09:07:46 Z  318 days
Failing since        152659  2020-08-21 14:07:39 Z  316 days  582 attempts
Testing same since   163228  2021-07-02 17:08:27 Z    1 days    4 attempts

------------------------------------------------------------
554 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   1d806cef0e..9c2647f750  9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 09:59:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 09:59:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149669.276853 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzyuM-0005Fu-0e; Sun, 04 Jul 2021 09:59:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149669.276853; Sun, 04 Jul 2021 09:59:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1lzyuL-0005Fn-TW; Sun, 04 Jul 2021 09:59:25 +0000
Received: by outflank-mailman (input) for mailman id 149669;
 Sun, 04 Jul 2021 09:59:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyuK-0005Fd-70; Sun, 04 Jul 2021 09:59:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyuJ-0001Vx-Vf; Sun, 04 Jul 2021 09:59:23 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyuJ-0002uv-M6; Sun, 04 Jul 2021 09:59:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1lzyuJ-00020b-Lf; Sun, 04 Jul 2021 09:59:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=V/EigjgZn+tf/83AHSyx4rFygNlFfT+Y9bS6F0eTaN4=; b=Tl161iJnEMTx2j+mG2rIWCGsdD
	k5mgBSwrJIoxHydLb2X0kZrEQEbiYQKiV5Aatl5oe1SFwJdRslmeDLTOLeLKmGpWkyO8xusg3m2oV
	QPYaYlf83BV+gbN9rJwlwr5DoOvNDeLIPHKtUKKA4p7YX8HPntMxTSdTvHaBqC1Bqei8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163297-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-coverity test] 163297: all pass - PUSHED
X-Osstest-Versions-This:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
X-Osstest-Versions-That:
    xen=f95b7b37cfc6d4613721df9357090d14712013c0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 09:59:23 +0000

flight 163297 xen-unstable-coverity real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163297/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8
baseline version:
 xen                  f95b7b37cfc6d4613721df9357090d14712013c0

Last test of basis   163196  2021-06-30 09:18:32 Z    4 days
Testing same since   163297  2021-07-04 09:20:47 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ian Jackson <iwj@xenproject.org>
  Olaf Hering <olaf@aepfle.de>

jobs:
 coverity-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/xen.git
   f95b7b37cf..74d044d51b  74d044d51b19bb697eac5c3deafa140f6afafec8 -> coverity-tested/smoke


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 11:58:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 11:58:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149675.276867 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m00kj-0007Vf-1u; Sun, 04 Jul 2021 11:57:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149675.276867; Sun, 04 Jul 2021 11:57:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m00ki-0007VY-Uy; Sun, 04 Jul 2021 11:57:36 +0000
Received: by outflank-mailman (input) for mailman id 149675;
 Sun, 04 Jul 2021 11:57:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m00kg-0007VO-QT; Sun, 04 Jul 2021 11:57:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m00kg-0003Rx-K9; Sun, 04 Jul 2021 11:57:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m00kg-000873-AE; Sun, 04 Jul 2021 11:57:34 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m00kg-0000XL-9f; Sun, 04 Jul 2021 11:57:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=QQ/HPssXFRRoYYbVC37VvY1bR4Tpf8+dhJosMkL2nus=; b=dgZjtL9gxle4HAUxQTWfsiJon1
	IKLEQlJge94q0+rg301syLr/vJ2AAZJ0GpPfs7aZ5+KB+TSrnGYQ8Iz6KYh41N384L+LKdSIyPbSg
	++KP338J5BQHqTf5C0RN/nmnFKsC7KPEWUJEj9LEaJ0ARW3ZIMb2/qd16Y2OUWcFizX4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163294-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163294: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 11:57:34 +0000

flight 163294 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163294/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   30 days
Failing since        162368  2021-06-04 15:42:59 Z   29 days   82 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    2 days   12 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 15:22:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 15:22:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149682.276881 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m03wN-0000Da-VR; Sun, 04 Jul 2021 15:21:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149682.276881; Sun, 04 Jul 2021 15:21:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m03wN-0000DT-Rg; Sun, 04 Jul 2021 15:21:51 +0000
Received: by outflank-mailman (input) for mailman id 149682;
 Sun, 04 Jul 2021 15:21:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m03wM-0000DE-Pd; Sun, 04 Jul 2021 15:21:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m03wM-0006lR-Gf; Sun, 04 Jul 2021 15:21:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m03wM-0006x9-71; Sun, 04 Jul 2021 15:21:50 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m03wM-0001k5-6Y; Sun, 04 Jul 2021 15:21:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=YHUp7QBuPrUrD4sePcxo8oZB531nfZ+S80wYpyaL3ds=; b=sqjorhZUCD+Tpnv3cX65FhjWnz
	sq25N9WqbUlGxI6MN1gNrOnfgIoikGxQSl4RCK6Ugx3vKsKB/cdC+yJRR61AW7J82PjlkOGXns7lF
	oyzj8OZJ9tOveBqNztxN4jl4NQevjjw0EsF/QZNdY/SZI+3z3ggSyxbUk+r95FPEnw50=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163298-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163298: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 15:21:50 +0000

flight 163298 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163298/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   30 days
Failing since        162368  2021-06-04 15:42:59 Z   29 days   83 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    2 days   13 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 15:41:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 15:41:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149689.276895 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m04FG-0002VE-Jq; Sun, 04 Jul 2021 15:41:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149689.276895; Sun, 04 Jul 2021 15:41:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m04FG-0002V7-GQ; Sun, 04 Jul 2021 15:41:22 +0000
Received: by outflank-mailman (input) for mailman id 149689;
 Sun, 04 Jul 2021 15:41:22 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m04FG-0002Ux-4D; Sun, 04 Jul 2021 15:41:22 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m04FF-00074D-PT; Sun, 04 Jul 2021 15:41:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m04FF-0007k0-GD; Sun, 04 Jul 2021 15:41:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m04FF-0002iD-Fg; Sun, 04 Jul 2021 15:41:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=YTpRxhyHmmj5jJhXdtiJBUjkQFoLj6MOzuJZ1wIuhQI=; b=1z7XuB47+wzB9ms1m4NNKXPFVf
	P2Xo4c4w6LVRF8LviOAKvAUDbC41FVrZd8tBU1vQFQtOE74frH+ylVZGvfKnhe3dRpdHtW5pw5RhT
	CaBnKnXaw8t0b/H+8kmGJSmC7p4KsnZCixJIiEYgSwbdPn6b/yRPPnNFVvHOQOAfe8jU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163293-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163293: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-libvirt-vhd:guest-saverestore:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
X-Osstest-Versions-That:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 15:41:21 +0000

flight 163293 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163293/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds 18 guest-start/debian.repeat fail in 163239 pass in 163293
 test-amd64-amd64-libvirt-vhd 16 guest-saverestore          fail pass in 163239
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 163239

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

version targeted for testing:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8
baseline version:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8

Last test of basis   163293  2021-07-04 01:52:08 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Sun Jul 04 18:22:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 18:22:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149700.276909 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m06ka-00006C-C5; Sun, 04 Jul 2021 18:21:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149700.276909; Sun, 04 Jul 2021 18:21:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m06ka-000065-8s; Sun, 04 Jul 2021 18:21:52 +0000
Received: by outflank-mailman (input) for mailman id 149700;
 Sun, 04 Jul 2021 18:21:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m06kY-00005u-D5; Sun, 04 Jul 2021 18:21:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m06kY-0001nC-33; Sun, 04 Jul 2021 18:21:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m06kX-00075T-QA; Sun, 04 Jul 2021 18:21:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m06kX-0004dr-Pe; Sun, 04 Jul 2021 18:21:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=dx33L3hCC56N6mawbpgp7oljCH4GJSMNor+k1047G+E=; b=J6G8xPkpuFR975deGr7cbAHkXR
	hEITtVPgAh6gKq1R0TDIy6HjgG6X3mrMw+FlIdu64HIAJHOfsKttTrcbbxnGIwvkq09BVim5RuOVe
	X3qO6kwauGc89JSzkrqqz4DwtRaCEnK9Vt4cK+qMaZgzeIJGsumGYf7wPXYWP2YN75js=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163296-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163296: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=303392fd5c160822bf778270b28ec5ea50cab2b4
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 18:21:49 +0000

flight 163296 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163296/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163290

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                303392fd5c160822bf778270b28ec5ea50cab2b4
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  337 days
Failing since        152366  2020-08-01 20:49:34 Z  336 days  574 attempts
Testing same since   163290  2021-07-03 22:11:05 Z    0 days    2 attempts

------------------------------------------------------------
6537 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1888347 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 18:50:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 18:50:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149710.276922 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m07CW-0003Go-U8; Sun, 04 Jul 2021 18:50:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149710.276922; Sun, 04 Jul 2021 18:50:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m07CW-0003Gh-RE; Sun, 04 Jul 2021 18:50:44 +0000
Received: by outflank-mailman (input) for mailman id 149710;
 Sun, 04 Jul 2021 18:50:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m07CV-0003GX-Qt; Sun, 04 Jul 2021 18:50:43 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m07CV-0002Ey-JS; Sun, 04 Jul 2021 18:50:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m07CV-000804-As; Sun, 04 Jul 2021 18:50:43 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m07CV-0005G1-AL; Sun, 04 Jul 2021 18:50:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=nJmrZIR6Zytt4njVbacmOyYtAJCgG4zmI+AaUc7OGlY=; b=5kddQ3bHcKcJAe+kTeckFpaS8Z
	SjCFk1705p2ZdGS8CEG/PuapX5lL27XiVa7lXoltEBExBJt9uRxT/hHPoAJUIfbc3TZRKHKPfw5vd
	beoIZEEaZ/i8yCqcKLk3QwhOeQiedAsoZiOikswpnGzLscJrdvj6N85dO6hoVsbyfxhc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163300-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163300: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 18:50:43 +0000

flight 163300 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163300/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   30 days
Failing since        162368  2021-06-04 15:42:59 Z   30 days   84 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    2 days   14 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 20:39:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 20:39:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149718.276937 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m08tC-0003t3-2A; Sun, 04 Jul 2021 20:38:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149718.276937; Sun, 04 Jul 2021 20:38:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m08tB-0003sw-Ux; Sun, 04 Jul 2021 20:38:53 +0000
Received: by outflank-mailman (input) for mailman id 149718;
 Sun, 04 Jul 2021 20:38:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m08tA-0003sm-PC; Sun, 04 Jul 2021 20:38:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m08tA-00044u-HM; Sun, 04 Jul 2021 20:38:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m08tA-0004e8-6H; Sun, 04 Jul 2021 20:38:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m08tA-0005Ef-5p; Sun, 04 Jul 2021 20:38:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NJCsu7xn5KcQ3UMIMSh+3+49cbVisrLWJTtgfKqNI6M=; b=DkaX+wvyr+S+7c86Ku3PCNHpIh
	ZCQ7f68BVmrBbxRG6K9EUxGcSb94f30yZdPEEhhZd6aXuQh6AR7mrZIqoau2M+cdPb46eIHZSOjvJ
	uB4sFNIiOe5nhlvuHRcOcxlI2JrrnuPFo07W9J7CPZrXJ6sSz5ir6usUp0/OnyyWujYQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163299-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163299: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=73c8bf4ccff8951d228b8a0d49968c56e32da4de
X-Osstest-Versions-That:
    qemuu=9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 20:38:52 +0000

flight 163299 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163299/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163292
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163292
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163292
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163292
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163292
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163292
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163292
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                73c8bf4ccff8951d228b8a0d49968c56e32da4de
baseline version:
 qemuu                9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1

Last test of basis   163292  2021-07-04 01:11:27 Z    0 days
Testing same since   163299  2021-07-04 13:37:55 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Joe Komlodi <joe.komlodi@xilinx.com>
  Maxim Uvarov <maxim.uvarov@linaro.org>
  Nolan Leake <nolan@sigbus.net>
  Patrick Venture <venture@google.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   9c2647f750..73c8bf4ccf  73c8bf4ccff8951d228b8a0d49968c56e32da4de -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Sun Jul 04 22:54:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 04 Jul 2021 22:54:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149727.276951 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Azt-0007Zw-QJ; Sun, 04 Jul 2021 22:53:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149727.276951; Sun, 04 Jul 2021 22:53:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Azt-0007Zp-N5; Sun, 04 Jul 2021 22:53:57 +0000
Received: by outflank-mailman (input) for mailman id 149727;
 Sun, 04 Jul 2021 22:53:56 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Azs-0007Zf-7N; Sun, 04 Jul 2021 22:53:56 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Azs-0006DM-06; Sun, 04 Jul 2021 22:53:56 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Azr-0000lV-Nj; Sun, 04 Jul 2021 22:53:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Azr-0006GE-NE; Sun, 04 Jul 2021 22:53:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=MvhZm8XBhvbvkC8X5UM4UYbKZEtFV8lndOSAxq1uSIk=; b=00ZDk25KP4fpYYg0ICL8SmSZJu
	vcYtwlP6ycB5efCZUenLy0w6HGRhvM34BBuYAXFk6RA9BS8vCx5ZXvvGc66iHRbEDRxvrXtGNdtSo
	Q62592khSTkT+iIjXWvIMmKA9HVrsaE1BYL+WouYVuPI6X0SULNyAjxRdbV/ef+KVaew=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163302-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163302: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 04 Jul 2021 22:53:55 +0000

flight 163302 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163302/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   30 days
Failing since        162368  2021-06-04 15:42:59 Z   30 days   85 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    3 days   15 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 01:39:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 01:39:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149737.276965 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0DZa-0006Hk-P5; Mon, 05 Jul 2021 01:38:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149737.276965; Mon, 05 Jul 2021 01:38:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0DZa-0006Hc-Jk; Mon, 05 Jul 2021 01:38:58 +0000
Received: by outflank-mailman (input) for mailman id 149737;
 Mon, 05 Jul 2021 01:38:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0DZZ-0006HS-1a; Mon, 05 Jul 2021 01:38:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0DZY-0001dt-Mm; Mon, 05 Jul 2021 01:38:56 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0DZY-00087l-9g; Mon, 05 Jul 2021 01:38:56 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0DZY-0006cO-9B; Mon, 05 Jul 2021 01:38:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=FK9ykQ+2iPycUwlEc+W7N0u90UBBN0OfqfC3rLYvRmM=; b=TEteGQ8l4SmnwkbNt+h/5LTcwz
	HDBrbdyo+JHobxbf0FTU8lgdyDmlsP4CDtuobgcXtyvE6DDxoNGnBx924Vu4BTu3g1BEJII01f3aM
	2elCtfx465Td2LuoxdsVoFKfiat+VSsDYtHEi7HtKyrisdYOm5AFXjvjoMJKaNorNvNU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163301-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163301: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=303392fd5c160822bf778270b28ec5ea50cab2b4
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 01:38:56 +0000

flight 163301 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163301/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds 20 guest-localmigrate/x10 fail in 163296 pass in 163290
 test-amd64-amd64-xl-rtds     18 guest-localmigrate         fail pass in 163296
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 163296

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                303392fd5c160822bf778270b28ec5ea50cab2b4
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  338 days
Failing since        152366  2020-08-01 20:49:34 Z  337 days  575 attempts
Testing same since   163290  2021-07-03 22:11:05 Z    1 days    3 attempts

------------------------------------------------------------
6537 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1888347 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 02:40:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 02:40:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149746.276979 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0EWf-00040Q-Fa; Mon, 05 Jul 2021 02:40:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149746.276979; Mon, 05 Jul 2021 02:40:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0EWf-0003zs-Ak; Mon, 05 Jul 2021 02:40:01 +0000
Received: by outflank-mailman (input) for mailman id 149746;
 Mon, 05 Jul 2021 02:40:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0EWe-0003wk-ER; Mon, 05 Jul 2021 02:40:00 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0EWe-0003A5-6v; Mon, 05 Jul 2021 02:40:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0EWd-0002Vn-Sl; Mon, 05 Jul 2021 02:39:59 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0EWd-0000li-SE; Mon, 05 Jul 2021 02:39:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/OptFA5HxTTJ9k6r4ee3hkkWmACw8J1FQ7f2BqfFiZw=; b=1fkBV4UiocDOvt5sS5vgA6xIEi
	K91ekTQw/7SiuhTQ7s2JXT7XQ4nb70teDqHhquP90PSDGaOA3a4G4BTeq6EOKnHUGNI+p00QYd06E
	vr9BV9eX2g1TEE7roGvNlvOpibhI5Vzzib8hRLTtUXstg7iuSbrlYQBvrpcjc/BXZ6FU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163304-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163304: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 02:39:59 +0000

flight 163304 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163304/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   30 days
Failing since        162368  2021-06-04 15:42:59 Z   30 days   86 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    3 days   16 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 03:09:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 03:09:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149754.276993 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0EzV-0007XW-Ss; Mon, 05 Jul 2021 03:09:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149754.276993; Mon, 05 Jul 2021 03:09:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0EzV-0007XP-Pj; Mon, 05 Jul 2021 03:09:49 +0000
Received: by outflank-mailman (input) for mailman id 149754;
 Mon, 05 Jul 2021 03:09:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2kFf=L5=arm.com=penny.zheng@srs-us1.protection.inumbo.net>)
 id 1m0EzT-0007XJ-NW
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 03:09:47 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.15.80]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dbd37de5-cea5-4b67-a6f6-007332e21343;
 Mon, 05 Jul 2021 03:09:44 +0000 (UTC)
Received: from DB6P193CA0006.EURP193.PROD.OUTLOOK.COM (2603:10a6:6:29::16) by
 VE1PR08MB4848.eurprd08.prod.outlook.com (2603:10a6:802:a7::10) with
 Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.27; Mon, 5 Jul 2021 03:09:41 +0000
Received: from DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:6:29:cafe::30) by DB6P193CA0006.outlook.office365.com
 (2603:10a6:6:29::16) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Mon, 5 Jul 2021 03:09:41 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT045.mail.protection.outlook.com (10.152.21.164) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 03:09:41 +0000
Received: ("Tessian outbound f29a5a293366:v97");
 Mon, 05 Jul 2021 03:09:41 +0000
Received: from eb2d3a3425a8.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 2983975C-BBAA-46B7-918F-BB8C0C493DE3.1; 
 Mon, 05 Jul 2021 03:09:34 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id eb2d3a3425a8.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 03:09:34 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB5392.eurprd08.prod.outlook.com (2603:10a6:803:131::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 03:09:32 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 03:09:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dbd37de5-cea5-4b67-a6f6-007332e21343
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9xVWplOtYYC77d8mpvdrZFeZ/VyCcv1cqSvaZfi6Ieg=;
 b=9ocUjIbGQZvPA2JMrUlD6e0pwRaA4jtjuET4r+4q2dUNqtpZqaaeNmFaBCzIPRa7j5Lux9euTQcrCOTL65ccQaXbRVxOuG6z5LahyNiy4kmS2KaHJAJPR8AmUiXroee4IvZh8u1+We6KhpuSbluAIJB+4uPs3rfz+aChmF15T/Y=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=mNUMXFM+0MT/PkCH0pWa57hQxQ/QyCqWTAyxm5nv3XlbgfR83ut+mLEj9bI59fYXlSU5zv2EsoiLGEGHlf3O2Zp1g50MR2Jm+mV749xSPg7SPASdhnZtG79dXM4Usont1aCa36hrT472cgIm9CejB4sst2EBW1rcxpgcHe32LsMe/hEopV4jodcyVe4KT+s9tyAjRLewR/u3IJQd90ytMi0SBB2FDd+2r86649bMhet6iHutFOiCVuCz5oX6cEawPqYNMfS42xc5fTLd68yGZk5QHJRTYQxHT/7ZqxhNKFq4HaI/uH6KJtqKP8UXwXFKHRsWOLYDBIl2kvimD29HcA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9xVWplOtYYC77d8mpvdrZFeZ/VyCcv1cqSvaZfi6Ieg=;
 b=L7cC3f+feDMKAxguBPNPNyqydLwjFVxekOUiqe4f/BjbKr88BjvxIr/Ui7AlGt9bSyqApnV6UVGpkz+P7BuWIBkS0NBetyQJz3kGfiSiHHfvL310hofGGVLtnxeP7E1MU3aobGEs9xdar/gc3ZUrK2/XgKRzuCpBYegQg9YyqdyotKiHqn9Vzbje5CD1Dp5zKVQV1HgulSZj49TLDwtSLA5qkLsikOMO6QJWa4zo0mW+x1q6zzUe0bxeSPGVGLt+Bje8cukFhxLlCHQqYy0FYylv5WKv3FXJjG09rbjZoFrVtUvYAuR3WJiPMRhM2yuvi4dk56+dTNMgRTi6ITVjSA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9xVWplOtYYC77d8mpvdrZFeZ/VyCcv1cqSvaZfi6Ieg=;
 b=9ocUjIbGQZvPA2JMrUlD6e0pwRaA4jtjuET4r+4q2dUNqtpZqaaeNmFaBCzIPRa7j5Lux9euTQcrCOTL65ccQaXbRVxOuG6z5LahyNiy4kmS2KaHJAJPR8AmUiXroee4IvZh8u1+We6KhpuSbluAIJB+4uPs3rfz+aChmF15T/Y=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "jbeulich@suse.com" <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 2/9] xen/arm: introduce PGC_reserved
Thread-Topic: [PATCH 2/9] xen/arm: introduce PGC_reserved
Thread-Index: AQHXW0bwHTQXl1IIhEKAMxa4O5onFKss+IkAgAbmToA=
Date: Mon, 5 Jul 2021 03:09:31 +0000
Message-ID:
 <VE1PR08MB52159420DF3B478AD65AB5B5F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-3-penny.zheng@arm.com>
 <1f1c1567-1a53-3b6a-2868-b7673d9180b3@xen.org>
In-Reply-To: <1f1c1567-1a53-3b6a-2868-b7673d9180b3@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 0020D2901BDBC644AFD49EC76997419B.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.113]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 0915e13d-4faf-49ac-35d6-08d93f62550b
x-ms-traffictypediagnostic: VI1PR08MB5392:|VE1PR08MB4848:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<VE1PR08MB48481159EFB81F8A8D831AC3F71C9@VE1PR08MB4848.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:4125;OLM:4125;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 if3dEiRB+uxo3tWzY0MrZwMBZUGHz/6fBvYmQFWbq5oKbsNpR3gHQ2TqWmhJeeH0It4Nk0C1CaufF/GtMZC55Yidw2QtY3M6DPlyeOMMBoqXk8cuCgzWANj5/y4LUqGNlPFtxaBUQnVaicolbGc9nYkwL9his7FLtMuXpqKGbW/xfPqtH/Uf+n7/SMxdIMAQMy9lElRnhu0vJumMPFrFvKLqLomwlHQ7GdC6yMjmeZ9TpaN4rU3kS8qP1Vbez21YRyn/FyWnCDxkTy9/I4YG8kz2lQg+qgt4Xm1YfsOkMxhlAnYVjudYSjI0/rj7gCYXVyCwYjNLrvvqFnsOZBzImE/rEFPdJX7GFdA3DviE1uul2lO/oUdfKSoDgM7jkTjzruK4KwHp5cOwwDEPR4CRD3ILCH94+xf7PtijAKzLRMRcCANOMuLp6jPYNmywJ4KnZEjENrhKrKt/YYVsqlKeyRwKXgEM5HvXeZh6NrGmmfmkhyRZhQ1AF7EPdqPCrA2fMYWFF7V4zxY6uwCioaKC5gvBLE+32D6OKE5my0a48hazqiID29cg69vw86g6cW3e7igBPA+R+iAK6IDguesOqxuw/LH/S0abHlEU/IYhMC/fJMUvGdCcDHCid07QKS+QbH+kK+7pzMknFJOkehb9ag==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(396003)(346002)(39850400004)(366004)(7696005)(186003)(8936002)(2906002)(33656002)(5660300002)(6506007)(53546011)(83380400001)(8676002)(52536014)(9686003)(66446008)(76116006)(66946007)(66476007)(66556008)(86362001)(122000001)(64756008)(38100700002)(26005)(55016002)(54906003)(110136005)(316002)(71200400001)(478600001)(4326008);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?h/yorh+oilpeFMTBt0=3D?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5392
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	6d8b8a36-8466-4673-6926-08d93f624f60
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	cbpMzkf4y4BLHiiFRF/n4HHjR9SjLbYON/oDMn5zJKA0Zcsh6OfJzyFr4COzI4HLL0G5XrGoq7mySOm8o1RAS8Umq0EgYp+J78dg6SPbr1CtrMreuMJsryRdmzEq3mLd29wYAyWhBcI82ohybLyx7zBDkp06SCA8lJzPBFcYjvomBo4oiJhzRdeTzpxf1S1IgbQqgqq5bhmTL5oUVndEUX7NuABKni7dUvFI3FaIwLL9wIYKai6aeKdjT/DQD0A4iZwaAtKxsMyNbfSxd7Bm9/jL+f1H3SEEuSxu3V04P20S0JJZR583zxJtLdYEzt7Y9KlgU7EYnuHI2jG68dPwwqse6qc49+u5aSId9S4fuaB6IYNdkwy3DZDJPLE2mBYcE6II23CehXupe3iV3bua/Uz2XhyFyhu0SDTZIHnyi71cFqpbeTUwL6WNJe2q8geMIIs/5tXVUi/5POiqca1IdO78Y5XZgf1+gGUBC6EOZ6ShrBRROSS3HbDRRn2oav53tK116/Gkl/15Dk5GbwydgQ2I7+a/udPRJSyPdhfOujq8W/GFvGAPB9BLOZ6gnTYv82MoGy8K7ID3oL5KQhYIxygmJlwMHl51MVrXrWXcy0jTrtCQRN3jRWWxMTmYaxgNvDBVva6wJO42/CJNi+zZpdzLfyejOolOKVF9rU0XNlJ4/04/VIRe6eHbx5AJy3kynWE17zG9hdSKLnYRA9glPQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(396003)(136003)(376002)(346002)(46966006)(36840700001)(4326008)(36860700001)(82310400003)(70586007)(7696005)(70206006)(8676002)(5660300002)(47076005)(336012)(478600001)(186003)(8936002)(83380400001)(86362001)(33656002)(54906003)(356005)(53546011)(6506007)(110136005)(9686003)(52536014)(2906002)(81166007)(55016002)(82740400003)(316002)(26005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 03:09:41.5698
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 0915e13d-4faf-49ac-35d6-08d93f62550b
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4848

SGkgSnVsaWVuDQoNClNvcnJ5IGZvciBzbyBsb25nIHRvIHJlc3BvbmQsIGp1c3QgYmFjayBmcm9t
IGEgbG9uZyBob2xpZGF5LiDwn5iJDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g
RnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4NCj4gU2VudDogVGh1cnNkYXksIEp1
bHkgMSwgMjAyMSAxOjQ0IEFNDQo+IFRvOiBQZW5ueSBaaGVuZyA8UGVubnkuWmhlbmdAYXJtLmNv
bT47IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gc3N0YWJlbGxpbmlAa2VybmVs
Lm9yZzsgamJldWxpY2hAc3VzZS5jb20NCj4gQ2M6IEJlcnRyYW5kIE1hcnF1aXMgPEJlcnRyYW5k
Lk1hcnF1aXNAYXJtLmNvbT47IFdlaSBDaGVuDQo+IDxXZWkuQ2hlbkBhcm0uY29tPg0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIDIvOV0geGVuL2FybTogaW50cm9kdWNlIFBHQ19yZXNlcnZlZA0KPiAN
Cj4gSGkgUGVubnksDQo+IA0KPiBPbiAwNy8wNi8yMDIxIDAzOjQzLCBQZW5ueSBaaGVuZyB3cm90
ZToNCj4gPiBJbiBvcmRlciB0byBkaWZmZXJlbnRpYXRlIHBhZ2VzIG9mIHN0YXRpYyBtZW1vcnks
IGZyb20gdGhvc2UgYWxsb2NhdGVkDQo+ID4gZnJvbSBoZWFwLCB0aGlzIHBhdGNoIGludHJvZHVj
ZXMgYSBuZXcgcGFnZSBmbGFnIFBHQ19yZXNlcnZlZCB0byB0ZWxsLg0KPiANCj4gSSB3b3VsZCBw
cmVmZXIgaWYgdGhpcyBwYXRjaCBpcyBmb2xkZWQgaW4gdGhlIHBhdGNoIGZpcnN0IHVzaW5nIGl0
LiBUaGlzIHdpbGwgYmUNCj4gZWFzaWVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmxhZyB3aWxs
IGJlIHVzZWQuDQo+IA0KPiBDaGVlcnMsDQoNClN1cmUsIEknbGwgcmUtb3JnYW5pemUgdGhpcyBj
b21taXQuDQoNCj4gDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBQZW5ueSBaaGVuZyA8cGVubnku
emhlbmdAYXJtLmNvbT4NCj4gPiAtLS0NCj4gPiBjaGFuZ2VzIHYyOg0KPiA+IC0gcmVtb3ZlIHVu
dXNlZCByZXNlcnZlZCBmaWVsZCBpbiBzdHJ1Y3QgcGFnZV9pbmZvDQo+ID4gLSByZW1vdmUgdW51
c2VkIGhlbHBlciBwYWdlX2dldF9yZXNlcnZlZF9vd25lciBhbmQNCj4gPiBwYWdlX3NldF9yZXNl
cnZlZF9vd25lcg0KPiA+IC0tLQ0KPiA+ICAgeGVuL2luY2x1ZGUvYXNtLWFybS9tbS5oIHwgMyAr
KysNCj4gPiAgIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykNCj4gPg0KPiA+IGRpZmYg
LS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL21tLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL21t
LmgNCj4gaW5kZXgNCj4gPiAwYjdkZTMxMDJlLi43MDM0ZmFlMWI2IDEwMDY0NA0KPiA+IC0tLSBh
L3hlbi9pbmNsdWRlL2FzbS1hcm0vbW0uaA0KPiA+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0v
bW0uaA0KPiA+IEBAIC0xMDgsNiArMTA4LDkgQEAgc3RydWN0IHBhZ2VfaW5mbw0KPiA+ICAgICAv
KiBQYWdlIGlzIFhlbiBoZWFwPyAqLw0KPiA+ICAgI2RlZmluZSBfUEdDX3hlbl9oZWFwICAgICBQ
R19zaGlmdCgyKQ0KPiA+ICAgI2RlZmluZSBQR0NfeGVuX2hlYXAgICAgICBQR19tYXNrKDEsIDIp
DQo+ID4gKyAgLyogUGFnZSBpcyByZXNlcnZlZCAqLw0KPiA+ICsjZGVmaW5lIF9QR0NfcmVzZXJ2
ZWQgICAgIFBHX3NoaWZ0KDMpDQo+ID4gKyNkZWZpbmUgUEdDX3Jlc2VydmVkICAgICAgUEdfbWFz
aygxLCAzKQ0KPiA+ICAgLyogLi4uICovDQo+ID4gICAvKiBQYWdlIGlzIGJyb2tlbj8gKi8NCj4g
PiAgICNkZWZpbmUgX1BHQ19icm9rZW4gICAgICAgUEdfc2hpZnQoNykNCj4gPg0KPiANCj4gLS0N
Cj4gSnVsaWVuIEdyYWxsDQoNCg0KQ2hlZXJzDQoNCi0tDQpQZW5ueSBaaGVuZw0K


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 03:17:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 03:17:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149762.277004 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0F6X-0000Z1-TN; Mon, 05 Jul 2021 03:17:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149762.277004; Mon, 05 Jul 2021 03:17:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0F6X-0000Yu-Pd; Mon, 05 Jul 2021 03:17:05 +0000
Received: by outflank-mailman (input) for mailman id 149762;
 Mon, 05 Jul 2021 03:17:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2kFf=L5=arm.com=penny.zheng@srs-us1.protection.inumbo.net>)
 id 1m0F6X-0000Yo-0w
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 03:17:05 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.52]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 32530c8a-8f39-421c-8548-e82f639e6859;
 Mon, 05 Jul 2021 03:17:02 +0000 (UTC)
Received: from AM5PR0701CA0063.eurprd07.prod.outlook.com (2603:10a6:203:2::25)
 by DBBPR08MB4316.eurprd08.prod.outlook.com (2603:10a6:10:c6::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 03:16:59 +0000
Received: from AM5EUR03FT027.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:2:cafe::f8) by AM5PR0701CA0063.outlook.office365.com
 (2603:10a6:203:2::25) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.8 via Frontend
 Transport; Mon, 5 Jul 2021 03:16:59 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT027.mail.protection.outlook.com (10.152.16.138) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 03:16:59 +0000
Received: ("Tessian outbound 80741586f868:v97");
 Mon, 05 Jul 2021 03:16:59 +0000
Received: from 1337886d1385.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 BF0E60CF-C531-4486-B880-0FA62D4363E7.1; 
 Mon, 05 Jul 2021 03:16:49 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1337886d1385.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 03:16:49 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB5392.eurprd08.prod.outlook.com (2603:10a6:803:131::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 03:16:47 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 03:16:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 32530c8a-8f39-421c-8548-e82f639e6859
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jnVNcCm/QzGCSGwzbXT6ZdtSblAWVZ7Mm2ZbLdBHPQA=;
 b=08BybUnxuXT78ffxsnn17m4+lTNHNxdnrf+O2qtGVEVkI1vd2IDK49M0LbEjRErj5YXZSlc4JpGA9sK5nj2uYT4nrx10h70HcS92ihLcsgk+a38iWpnJ3Y3PKQwu6sR2qhZ8zQDWcUHJftU58KMFKKIcQBLu9oDAMaS2eU7eO7Y=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FqoC8OqlGTDVXRCFytDoLvJ1iyUZzOy683TXJIEHSJkuoLnagbyz43uXIEQFhz1Nocq9xhN5LqNtVMpHssQjKT3toct8yXH/Jh2xuvJ1vtCLpVCNT5r6ASybE9epwBgY1XVG9udn2OG92e69QVTfXiHsej3YWMLSRArrwP+wvv4XdLG66F3Esi9X/07bGhsuZEJH1Z+KzPhtpDO5tJH3G71/lnfBstTikxNDFfus5hOneq9+6wl7vbUCOpaMjtqxCs5DN4vKLu/tXFcDV5jtvqIVkjbbB08kNRagw235vgMc+Q5FJvoy0NG8Mn4aBYiF63TzRj9ghlCeToLGFtcs5A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jnVNcCm/QzGCSGwzbXT6ZdtSblAWVZ7Mm2ZbLdBHPQA=;
 b=ZayfpNC8QPWg/VyMRdsxPVLrefIt/bzWMjyAF8VHycyAR26OFsAQCO68cJwtOrsstRFpoUB/yEIhRfgUUzs2z9OnhM8FBB15OJXJ+Nl2V2hQuXMX24iq3KheEeOhYJpZaDlWGT/Se+DPH6vHRGWB/ByrLSqGoYmClnsnWG2jOL60jhK8y9AtK87YE3j0NwFK7vAmAhj+gXZ0X82mgJ4S4VPKK4rrR70tzUjXfgGpumm65MeCiY18Rpi1cAHysW1zS5wJKQ3hMkoI2NyHisWOHYbRWSdKzGsgzy+G1TLT1P93kD++Jgtxy/QpVaQCcJsZz9ikLUtpkfKp80+J32uUsw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jnVNcCm/QzGCSGwzbXT6ZdtSblAWVZ7Mm2ZbLdBHPQA=;
 b=08BybUnxuXT78ffxsnn17m4+lTNHNxdnrf+O2qtGVEVkI1vd2IDK49M0LbEjRErj5YXZSlc4JpGA9sK5nj2uYT4nrx10h70HcS92ihLcsgk+a38iWpnJ3Y3PKQwu6sR2qhZ8zQDWcUHJftU58KMFKKIcQBLu9oDAMaS2eU7eO7Y=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "jbeulich@suse.com" <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 3/9] xen/arm: introduce CONFIG_STATIC_ALLOCATION
Thread-Topic: [PATCH 3/9] xen/arm: introduce CONFIG_STATIC_ALLOCATION
Thread-Index: AQHXW0b0CeS4ToPVJE2MjFHfl516uass+MuAgAbnTUA=
Date: Mon, 5 Jul 2021 03:16:46 +0000
Message-ID:
 <VE1PR08MB521501B025580BE50594A440F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-4-penny.zheng@arm.com>
 <2b604aba-1d12-7957-ad9b-114f6ad1f857@xen.org>
In-Reply-To: <2b604aba-1d12-7957-ad9b-114f6ad1f857@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 485948836F92834993335243B6FEA32D.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.113]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: f6b452ad-3003-43e5-8096-08d93f635a30
x-ms-traffictypediagnostic: VI1PR08MB5392:|DBBPR08MB4316:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DBBPR08MB4316BD2BEE9BA339A193FB67F71C9@DBBPR08MB4316.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:3513;OLM:3513;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 4QP0DlyVVWOzZTecZYA5Rbph7fC5qXWk9Mbj9snnY8NpBXdWWBFNvmTOTnWVxt3oueKIgeDd7nlGoX4YVVmgMaV2JYbtWYozbq9BVrFp1WQDMy2T0emIywmkmwsOhDRWSzwTdM0qU7aHg6vkw4MyBlgXE763zsmPKMLfYsLOuMHQwsk2YBlqTIVz5zmgv28rsylBPfH4TObEuZshHzSiUdE1+ijV+BisFIqMTyhXhG8n8uVum3mcxQFNJVtGCVYDUOk0AvWLncs4Cgjk9FtRZEeW6ZC1HS0FLU9Q2W9HerumVYCB1Ejx0U/1iViHpgP5EJTvgXKYvxc6jXfeVIrVxuSbkwD2slZXgdISurKYaSztkzRj8XuBYr13RIdYLBP9yV3nrfZnxbkC0HRgT2nr/KVfBzUJPRA1Nf/uHV+t06zwfrQU/rRxSsyhhcpC1i6ztKCKw5ozv34wug4dj35ar3YJMBUvXfXA4XL6127ZPEQEdmfVu4gYFWXnk79jBnJL1RqtJaiA1nBBg453AuV7U3EffCiO7tuG+Ag44QKvFs9yBYUOgnyDqC+pNu2WChnif4qpthWqBNs6y/NVtV4BdGIeRJVR1CvcuxDNIePcrhVTxndPbKKGqf/6tvk18SbWWlTUzW+i6oP5ok7WQhG01Q==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(396003)(376002)(136003)(39850400004)(71200400001)(54906003)(110136005)(316002)(4326008)(478600001)(2906002)(33656002)(8936002)(6506007)(53546011)(5660300002)(7696005)(186003)(76116006)(66946007)(66476007)(66556008)(66446008)(26005)(55016002)(38100700002)(86362001)(122000001)(64756008)(83380400001)(9686003)(8676002)(52536014);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5392
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT027.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	108bf1b6-4e62-492e-84fd-08d93f6352b2
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	4OaXcgDA4vVXfzh9CxS7izIOmnkIclINveAoTs4V3q43aa2QNX86wj+3RPl5kt0ewEfguRFyuyS8ikiMJkzQT6Ov7PQLqj7Wlycy7FSmUBHobzG5quHpbUFeBvZrnClo4e+wU5Y819tyIx0UFcrQkftpGRa/45yp81SunKWSQQFe7AtECk+h+jF8suKcItRd0LEQ8FzvkCefkjp3/kbpnVNB/cadU3/HSvZcRVL1uTlVwYa+oK/xhm2+p3cyLwvLw382OJgyDMqWe1O62MyGr9P4wC70MB6Qaf4CX95/cO7TCESTYf8EFEShhfL43S9yABGpHnmoehYt3eapOlXVlkvRbRTySQcR/Qvi3uoDyzRRf0PBrHfX3QgJGx8pMPmpIgpj/osHHpm5eo3lYsdFEEGMxNq78mfvi1O/oBc4ULyJ/joYI0++3EGQrng0HiiQlJ/p+hlkQIQOHinCXzVoyxCtcsWgtY+zHzM6YpnWGMbaHvwD6DAGXA3giKuZn/X6KUr9bPKD1xK4Gyzs8yxkbuehfOWLTTQn3ZJBKcWcLfEtgNYJsx/PSoX1aNKGwARep1IVaWZ343KOjZ7+pKMcosET/kULzcKYtG4ta4W1BJ3AINFAVPJzAsbN53EkgTv44y4aOqpbiW680u3EzYM2yJSnGkGIxdJ71LuzaM1mKqciib5bfEKwfI7NY1fme2GHQxwmd/GUsoy5Rpw7pNrxog==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(396003)(39850400004)(136003)(346002)(376002)(46966006)(36840700001)(52536014)(47076005)(2906002)(82740400003)(70586007)(186003)(70206006)(82310400003)(36860700001)(86362001)(110136005)(5660300002)(8936002)(7696005)(83380400001)(33656002)(8676002)(336012)(53546011)(55016002)(54906003)(6506007)(9686003)(316002)(478600001)(4326008)(26005)(81166007)(356005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 03:16:59.6446
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: f6b452ad-3003-43e5-8096-08d93f635a30
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT027.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4316

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4NCj4gU2VudDogVGh1cnNkYXksIEp1bHkgMSwgMjAyMSAx
OjQ1IEFNDQo+IFRvOiBQZW5ueSBaaGVuZyA8UGVubnkuWmhlbmdAYXJtLmNvbT47IHhlbi1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gc3N0YWJlbGxpbmlAa2VybmVsLm9yZzsgamJldWxp
Y2hAc3VzZS5jb20NCj4gQ2M6IEJlcnRyYW5kIE1hcnF1aXMgPEJlcnRyYW5kLk1hcnF1aXNAYXJt
LmNvbT47IFdlaSBDaGVuDQo+IDxXZWkuQ2hlbkBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1BB
VENIIDMvOV0geGVuL2FybTogaW50cm9kdWNlIENPTkZJR19TVEFUSUNfQUxMT0NBVElPTg0KPiAN
Cj4gSGkgUGVubnksDQo+IA0KPiBPbiAwNy8wNi8yMDIxIDAzOjQzLCBQZW5ueSBaaGVuZyB3cm90
ZToNCj4gPiBGb3Igbm93LCBzaW5jZSB0aGUgZmVhdHVyZSBvZiBEb21haW4gb24gU3RhdGljIEFs
bG9jYXRpb24gaXMgb25seQ0KPiA+IHN1cHBvcnRlZCBvbiBBUk0gQXJjaGl0ZWN0dXJlLCB0aGlz
IGNvbW1pdCBpbnRyb2R1Y2VzIG5ldw0KPiA+IENPTkZJR19TVEFUSUNfQUxMT0NBVElPTiB0byBh
dm9pZCBicmluZ2luZyBkZWFkIGNvZGVzIGluIG90aGVyIGFyY2hzLg0KPiANCj4gU2ltaWxhcmx5
IHRvIHBhdGNoICMyLCBJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBpbnRyb2R1Y2UgdGhp
cyBLY29uZmlnIHdoZW4NCj4gaXQgaXMgdXNlZCBvciBhZnRlciB0aGUgY29tbW9uIGNvZGUgaXMg
aW50cm9kdWNlZC4gVGhpcyB3b3VsZCBwcmV2ZW50IGRlYWQNCj4gS2NvbmZpZy4NCj4gDQoNCnN1
cmUsIEknbGwgcmVtb3ZlIHRoaXMgY29tbWl0LCBhbmQgY29tYmluZSBpdCB3aXRoIHRoZSBjb2Rl
cyB3aGVyZSB0aGlzIGNvbmZpZyBpcyBmaXJzdGx5IHVzZWQuDQoNCkNoZWVycw0KDQo+IENoZWVy
cywNCj4gDQo+ID4gU2lnbmVkLW9mZi1ieTogUGVubnkgWmhlbmcgPHBlbm55LnpoZW5nQGFybS5j
b20+DQo+ID4gLS0tDQo+ID4gY2hhbmdlcyB2MjoNCj4gPiAtIG5ldyBjb21taXQNCj4gPiAtLS0N
Cj4gPiAgIHhlbi9hcmNoL2FybS9LY29uZmlnIHwgMyArKysNCj4gPiAgIDEgZmlsZSBjaGFuZ2Vk
LCAzIGluc2VydGlvbnMoKykNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vS2Nv
bmZpZyBiL3hlbi9hcmNoL2FybS9LY29uZmlnIGluZGV4DQo+ID4gZWNmYTY4MjJlNC4uZjE2NWRi
OGVjZCAxMDA2NDQNCj4gPiAtLS0gYS94ZW4vYXJjaC9hcm0vS2NvbmZpZw0KPiA+ICsrKyBiL3hl
bi9hcmNoL2FybS9LY29uZmlnDQo+ID4gQEAgLTI3OCw2ICsyNzgsOSBAQCBjb25maWcgQVJNNjRf
RVJSQVRVTV8xMjg2ODA3DQo+ID4NCj4gPiAgIAkgIElmIHVuc3VyZSwgc2F5IFkuDQo+ID4NCj4g
PiArY29uZmlnIFNUQVRJQ19BTExPQ0FUSU9ODQo+ID4gKyAgICBkZWZfYm9vbCB5DQo+ID4gKw0K
PiA+ICAgZW5kbWVudQ0KPiA+DQo+ID4gICBjb25maWcgQVJNNjRfSEFSREVOX0JSQU5DSF9QUkVE
SUNUT1INCj4gPg0KPiANCj4gLS0NCj4gSnVsaWVuIEdyYWxsDQoNCi0tDQpQZW5ueSBaaGVuZw0K


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 04:47:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 04:47:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149769.277015 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0GVa-0000Lv-FQ; Mon, 05 Jul 2021 04:47:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149769.277015; Mon, 05 Jul 2021 04:47:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0GVa-0000Lo-AL; Mon, 05 Jul 2021 04:47:02 +0000
Received: by outflank-mailman (input) for mailman id 149769;
 Mon, 05 Jul 2021 04:47:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=cjuk=L5=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0GVY-0000Li-OF
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 04:47:00 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 07de7eac-dd4c-11eb-8438-12813bfff9fa;
 Mon, 05 Jul 2021 04:46:59 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 12390226C8;
 Mon,  5 Jul 2021 04:46:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id DADF013418;
 Mon,  5 Jul 2021 04:46:57 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 2YCAM8GO4mAjBgAAGKfGzw
 (envelope-from <jgross@suse.com>); Mon, 05 Jul 2021 04:46:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 07de7eac-dd4c-11eb-8438-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625460418; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=/Km2dS5zjKyg+Dq8IqCDYsh2P1T0EACyZgZYYwwx928=;
	b=tyLD2F5ijKTx1xkWBZDv4m3bJpYpZ5WKiUb4YmB/TjJdDl3u2tkBl7NR1ZPs7AE47Envur
	eYbw2Ndwna/fewJCkVWM9KjbgtgJtVJzqKv32VfS6BNcyPYeP/qqj/NMtd0PjdIXr6FI/s
	Oznrk/SLFcqssUbVo7kuz9CataSzRjA=
Subject: Re: [XEN PATCH] MAINTAINERS: Updating after change to tools/include/
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210701155232.792978-1-anthony.perard@citrix.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <3b617ddd-773a-5321-9485-8815bdc69e9a@suse.com>
Date: Mon, 5 Jul 2021 06:46:57 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <20210701155232.792978-1-anthony.perard@citrix.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="U91K0s5BeczmSENTuuaFlbFQXq0DOqQEB"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--U91K0s5BeczmSENTuuaFlbFQXq0DOqQEB
Content-Type: multipart/mixed; boundary="kQcxdNuidNUnHcJvWJdR0HPSW1XxKOQo5";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Message-ID: <3b617ddd-773a-5321-9485-8815bdc69e9a@suse.com>
Subject: Re: [XEN PATCH] MAINTAINERS: Updating after change to tools/include/
References: <20210701155232.792978-1-anthony.perard@citrix.com>
In-Reply-To: <20210701155232.792978-1-anthony.perard@citrix.com>

--kQcxdNuidNUnHcJvWJdR0HPSW1XxKOQo5
Content-Type: multipart/mixed;
 boundary="------------A9A438DAC6AA6759B1DDF9A9"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------A9A438DAC6AA6759B1DDF9A9
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 01.07.21 17:52, Anthony PERARD wrote:
> The LIBS section doesn't mention the headers associated with the
> libraries, same for LIBXENLIGHT section.
>=20
> They aren't any ':' in other section names, so remove it.
>=20
> Fixes: 4664034cdc72 ("tools/libs: move official headers to common direc=
tory")
> Fixes: f7079d7ef69f ("MAINTAINERS: add myself as tools/libs reviewer")
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

--------------A9A438DAC6AA6759B1DDF9A9
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------A9A438DAC6AA6759B1DDF9A9--

--kQcxdNuidNUnHcJvWJdR0HPSW1XxKOQo5--

--U91K0s5BeczmSENTuuaFlbFQXq0DOqQEB
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDijsEFAwAAAAAACgkQsN6d1ii/Ey/Z
/ggAiVENLbIp6/VjelCwAKngvUtq+nYuA/58tref4RbxSmBMje0uEeHC9QCf04175uJX92Y3fb9z
q0+yYaJqvKKCbpdV1HNUJsjrgKCQdnmmfugW+IQUVq29P159jEuZXyxWqvfnMvyQ3GOxjBwJxGl5
3a8DZZcQ/5bHpJ4JqqbWt9n9Pb/a8IyVsPTFec53CO2k5akSsfiFiXveesFOh9HYOpEN9REoQaqn
rtNuSjsoFsE+39UAG9rT3yV17t909NBCjHslG/X6fTa7FkOxpaJnga7qfRGjrvK/CU2zDFGSI8zj
G+OW8+VMok/hy6J7w9cLGsjgzl7h8vqqqz3zplRl0w==
=F9Z7
-----END PGP SIGNATURE-----

--U91K0s5BeczmSENTuuaFlbFQXq0DOqQEB--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 05:07:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 05:07:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149776.277026 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Goq-0002vS-33; Mon, 05 Jul 2021 05:06:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149776.277026; Mon, 05 Jul 2021 05:06:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Gop-0002vL-Vl; Mon, 05 Jul 2021 05:06:55 +0000
Received: by outflank-mailman (input) for mailman id 149776;
 Mon, 05 Jul 2021 05:06:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Goo-0002vB-Gx; Mon, 05 Jul 2021 05:06:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Goo-0006W5-9Q; Mon, 05 Jul 2021 05:06:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Gon-00088P-Tl; Mon, 05 Jul 2021 05:06:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Gon-0000RV-TD; Mon, 05 Jul 2021 05:06:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=W0l0vfoWX20htbHCM2fNfAgbjfRtRENZsHYGVPct0aw=; b=UQTjRqSI07Ul959yUqTwwrdvOr
	hO/oW4qXLFNMOlmZeS+KR92ZkgfDr0wqzv/bmcDuBv7ZtfRNU+nlXpOabClZQt36aeEPSuaUOdJp7
	gE5VlMeN53lmKhhSfXvxe8Kus+Z2MoSmyyuXvWgLIuzSzQTpZE+HL45tBfWgcV0W6Xe8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163303-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163303: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=711c0418c8c1ce3a24346f058b001c4c5a2f0f81
X-Osstest-Versions-That:
    qemuu=73c8bf4ccff8951d228b8a0d49968c56e32da4de
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 05:06:53 +0000

flight 163303 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163303/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163299
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163299
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163299
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163299
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163299
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163299
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163299
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                711c0418c8c1ce3a24346f058b001c4c5a2f0f81
baseline version:
 qemuu                73c8bf4ccff8951d228b8a0d49968c56e32da4de

Last test of basis   163299  2021-07-04 13:37:55 Z    0 days
Testing same since   163303  2021-07-04 21:08:01 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  BALATON Zoltan <balaton@eik.bme.hu>
  Finn Thain <fthain@linux-m68k.org>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   73c8bf4ccf..711c0418c8  711c0418c8c1ce3a24346f058b001c4c5a2f0f81 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 05:22:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 05:22:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149784.277040 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0H3r-0005DA-Hp; Mon, 05 Jul 2021 05:22:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149784.277040; Mon, 05 Jul 2021 05:22:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0H3r-0005D3-EE; Mon, 05 Jul 2021 05:22:27 +0000
Received: by outflank-mailman (input) for mailman id 149784;
 Mon, 05 Jul 2021 05:22:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2kFf=L5=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0H3q-0005Cx-4J
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 05:22:26 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.81]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fa53cf44-dd50-11eb-8439-12813bfff9fa;
 Mon, 05 Jul 2021 05:22:23 +0000 (UTC)
Received: from DU2PR04CA0255.eurprd04.prod.outlook.com (2603:10a6:10:28e::20)
 by DB7PR08MB3628.eurprd08.prod.outlook.com (2603:10a6:10:44::28) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Mon, 5 Jul
 2021 05:22:21 +0000
Received: from DB5EUR03FT054.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:28e:cafe::ef) by DU2PR04CA0255.outlook.office365.com
 (2603:10a6:10:28e::20) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 05:22:21 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT054.mail.protection.outlook.com (10.152.20.248) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 05:22:21 +0000
Received: ("Tessian outbound 2e56506fe389:v97");
 Mon, 05 Jul 2021 05:22:21 +0000
Received: from f073af98f6a2.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 E3C03425-9106-426A-BC87-38A17EA73601.1; 
 Mon, 05 Jul 2021 05:22:11 +0000
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f073af98f6a2.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 05:22:11 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB5535.eurprd08.prod.outlook.com (2603:10a6:803:13e::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Mon, 5 Jul
 2021 05:22:07 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 05:22:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fa53cf44-dd50-11eb-8439-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2OGhvD8CfzA774M3J3ivX1/+nTSAE75dy61AKqLYvS8=;
 b=8fGFTknBODM4oK0YtE0sOx9A5MR6+EeNvOBGMGvp7G3BBJAjT1X6ZNaPq055E2u18yH35+/dXWssQR4eX5gobTwu/nl6M3eouk3Rv+FI6ypj9BnqpBnFAjFaQFOljOsnuFfql72S8cxLHUpVuVbsVEMQtMWi3qeWIe98+C9jJ5E=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=J9Z7gKZZrhJenUcIadU2b6knDTGDYZ67kDVeqNlLzAZt/JlmcCgeQXLSuHRe+M2fSxlRKv3MmZbl9pk6KAnvrEcZs/5wTrZKbrymkBWEswjyjGZCERBHt04h9Vv5VTKflf1Z3qJpX8D/JgM0QD+3mQrHCBlniPPK+Y5zERa0Qpw6PlfzGuAw4b/ilxHWrQJ45kizsrs+8motvwEJiCr+5miYox4cHpLiR1HSAAL2u49KqTRXpfv9IOCZ45H/ODWpVrMoU8z3keJq1fv+5YA2+noPi7rj/w5rtwoJSlsj14cKOjIOXhLIuCx15RN6ggvmuL3OwpRv8e3+z8m49uApZw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2OGhvD8CfzA774M3J3ivX1/+nTSAE75dy61AKqLYvS8=;
 b=M0UMzMWdzkGfhPCrl8TcIJE+ObcOmN5+me6xZ3oDR8Y2/o4Y2YSxT+8OR80+B2DEcnmMcNZ8+H+LSXAHt4fuDoKmu288SD0pGsNQrQJDo0Vm2Kb8IsZLwWDgjpMzHN6Y21+aRjAlfi6g5WiVRRuIakK/dAJOAkRJayYIwe3ifNHfboSCgno5O8jjZv4TQcAE10F5nnqYQrK8W81zLavCZ2tav18++w9iXhP6Y9UzuCJiaxv8i97v32Fpd45o7Rc4gIZIyRHlg3NQNcDOzb95JcuueEGiUZ0GT7MD9f3BhFo5en3e+OTaVvTRICquoYp0Sv4If+lP9xy/OeIcLYiITg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2OGhvD8CfzA774M3J3ivX1/+nTSAE75dy61AKqLYvS8=;
 b=8fGFTknBODM4oK0YtE0sOx9A5MR6+EeNvOBGMGvp7G3BBJAjT1X6ZNaPq055E2u18yH35+/dXWssQR4eX5gobTwu/nl6M3eouk3Rv+FI6ypj9BnqpBnFAjFaQFOljOsnuFfql72S8cxLHUpVuVbsVEMQtMWi3qeWIe98+C9jJ5E=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>
Subject: RE: [PATCH 4/9] xen/arm: static memory initialization
Thread-Topic: [PATCH 4/9] xen/arm: static memory initialization
Thread-Index: AQHXW0b3OiAcoe7xDE2AVcNY0dwUCqsNAWAAgB/3qYCABuqiQA==
Date: Mon, 5 Jul 2021 05:22:07 +0000
Message-ID:
 <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <e0a312a1-f430-3ff0-6dd6-fcfe18e58071@suse.com>
 <7f77349f-015e-83d3-d646-af9897e31348@xen.org>
In-Reply-To: <7f77349f-015e-83d3-d646-af9897e31348@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 7786580DF9C5D843A331F94601885256.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.113]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: f8ef3700-517e-4836-4def-08d93f74dd79
x-ms-traffictypediagnostic: VI1PR08MB5535:|DB7PR08MB3628:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB7PR08MB3628D5F92CB19EC6B754D5BFF71C9@DB7PR08MB3628.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 a/wPqC2HRjyacr7JbeXWqkVzwT994y1wJaAvJjcNLoq7xbZsKqCdgdxllfgWdmuQTKHXoMyfDkZZGKNqXNJYfw8Z7rQJgGdxvzC1fNTbgE116dgRTArO59p4zsKzIG0KmawHWUypZ6Kc0DVFThjY5aCPhUG3C2YFjH/Jj2H1JRmEBWATEmKehTiKZUH5tJCHLVYonzyso5vEfhsNmGfhAUp5wq8eoI9058JcfScmytJltMYzkE7wLA67ouwVGrd1RmXwb4eW7QPLlIDUGahPkk2McEh43cTh0hzTpmtmbRj4zM+tQltYlRg2as/W+DVGg50uAxe5L2ZtRtv4txxx/XVVNIQrzj4SSXVOzzA53kKUsEwnrRAdcd8PW0LJEXWym55AdpmpFSZXvp6TXDZ/75t8qjGN1uuEhJN4jCzWqqqcFQICvt4AqBfEUhkPS4w+Pq6tiRAU1Pqxh6N/eMlhooBVTPlqqEFYd38vjbwNn0bxucHg+2FnzEfMqOYVtTQ7mmThkGyM1r8LQeMc1euRtdb4rMinhMVwxNO/BQCpmG3bo+/MeQ44mUQf6FHE1DsbbRmT8LtdN/16ITFL++rKpDGddiAMs0EmKZBNYIiJEWdA/C9yjBxBtjux1ux5zVbg/zDUvq0jCP2F7xdQU7I8xw==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(346002)(366004)(39850400004)(396003)(5660300002)(7696005)(8936002)(478600001)(6506007)(66946007)(66446008)(66476007)(53546011)(66556008)(64756008)(26005)(33656002)(54906003)(8676002)(4326008)(76116006)(71200400001)(122000001)(55016002)(9686003)(110136005)(86362001)(83380400001)(38100700002)(2906002)(52536014)(316002)(186003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5535
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT054.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	c12c467a-298c-4b38-0172-08d93f74d539
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	7/kKs6aknlsowqzNKyn8VMMXoV+CCzQ7Xz+SvoX6iRbzTKwriIg3pnxwJuBJVf+K1iP8PdqtoCUnmkdZ+8kD7GF74l4b4AWMXeIfMhw2fW+/ZooLADOfnLLoCJPgHLALYCGv3dXtcR5DKn/Vbx4o0js5B2+VPx/tSwmzdSZKy4kX5EhajPl8BD7dLPk+mPFTAQyEhSU3p0xnnIyA2bdfJP0ur3yCJlvTVw6snvXGpdfniq8pUfEwh+b0W/3vVx3jxsoW7yShaXtzmH3yi0WEqEZDCLu0ZYHTehuP1yh3sgAy28glGJwB6txzFW+OFv9ejW5XmHMIJi44Y+McUUlanGKwnQkrTrXJzGmdP/cVhjxhdC4861f99JsDXxWogIz2PSqqY88RkO+AlEzKHrtuKoaMtMEsH5SsMvkSquDBe1013pzlKQYHKEY5Qptgka2W1wzEbabN2P4ANps8I5pOVfHn6PmiVFFkVw47p4nnmv62455c8/oSrk7ZezPsS4ODWGMkXZzE7s+kfyaNW5z+V7VGpm2hKv0r2W1d4E7B6mO9UoFbwfQB+Cxhc0IFgrcZ38mwuOErSaPPeYQwj+akV/WcrSEmjdZmXWO/ZZxuSH/b18Ibi8t+qlyNRj3FC09NZVb7WUO3JFoQUvmHHRT1LLxB87mfMmhBPB+nTWKk9BqioU5/3Qnl3NPdUIFeUarvHml11/rO4cN5CWJipQ3jOA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(39850400004)(396003)(346002)(136003)(46966006)(36840700001)(47076005)(2906002)(186003)(36860700001)(9686003)(8936002)(82740400003)(478600001)(55016002)(26005)(33656002)(82310400003)(107886003)(86362001)(110136005)(52536014)(70586007)(5660300002)(54906003)(8676002)(81166007)(336012)(53546011)(4326008)(83380400001)(316002)(6506007)(7696005)(70206006)(356005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 05:22:21.4016
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: f8ef3700-517e-4836-4def-08d93f74dd79
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT054.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3628

SGkgSnVsaWVuIGFuZCBKYW4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t
OiBKdWxpZW4gR3JhbGwgPGp1bGllbkB4ZW4ub3JnPg0KPiBTZW50OiBUaHVyc2RheSwgSnVseSAx
LCAyMDIxIDE6NDYgQU0NCj4gVG86IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT47IFBl
bm55IFpoZW5nIDxQZW5ueS5aaGVuZ0Bhcm0uY29tPg0KPiBDYzogQmVydHJhbmQgTWFycXVpcyA8
QmVydHJhbmQuTWFycXVpc0Bhcm0uY29tPjsgV2VpIENoZW4NCj4gPFdlaS5DaGVuQGFybS5jb20+
OyB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7DQo+IHNzdGFiZWxsaW5pQGtlcm5lbC5v
cmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCA0LzldIHhlbi9hcm06IHN0YXRpYyBtZW1vcnkgaW5p
dGlhbGl6YXRpb24NCj4gDQo+IEhpLA0KPiANCj4gT24gMTAvMDYvMjAyMSAxMDozNSwgSmFuIEJl
dWxpY2ggd3JvdGU6DQo+ID4gT24gMDcuMDYuMjAyMSAwNDo0MywgUGVubnkgWmhlbmcgd3JvdGU6
DQo+ID4+IC0tLSBhL3hlbi9hcmNoL2FybS9zZXR1cC5jDQo+ID4+ICsrKyBiL3hlbi9hcmNoL2Fy
bS9zZXR1cC5jDQo+ID4+IEBAIC02MTEsNiArNjExLDMwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBp
bml0X3BkeCh2b2lkKQ0KPiA+PiAgICAgICB9DQo+ID4+ICAgfQ0KPiA+Pg0KPiA+PiArLyogU3Rh
dGljIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqLw0KPiA+PiArc3RhdGljIHZvaWQgX19pbml0IGlu
aXRfc3RhdGljbWVtX3BhZ2VzKHZvaWQpIHsNCj4gPj4gKyAgICBpbnQgYmFuazsNCj4gPg0KPiA+
IFdoaWxlIEknbSBub3QgYSBtYWludGFpbmVyIG9mIHRoaXMgY29kZSwgSSdkIHN0aWxsIGxpa2Ug
dG8gcG9pbnQgb3V0DQo+ID4gdGhhdCB3aGVyZXZlciBwb3NzaWJsZSB3ZSBwcmVmZXIgInVuc2ln
bmVkIGludCIgd2hlbiBkZWFsaW5nIHdpdGggb25seQ0KPiA+IG5vbi1uZWdhdGl2ZSB2YWx1ZXMs
IGFuZCBldmVuIG1vcmUgc28gd2hlbiB1c2luZyB0aGVtIGFzIGFycmF5DQo+ID4gaW5kZXhlcy4N
Cj4gDQo+ICsxLg0KPg0KDQpVbmRlcnN0b29kLiBUaHguDQoNCj4gPg0KPiA+PiArICAgIC8qDQo+
ID4+ICsgICAgICogVE9ETzogQ29uc2lkZXJpbmcgTlVNQS1zdXBwb3J0IHNjZW5hcmlvLg0KPiA+
PiArICAgICAqLw0KPiA+DQo+ID4gTml0OiBDb21tZW50IHN0eWxlLg0KPiA+DQoNClN1cmUsIHRo
eC4NCg0KPiA+PiBAQCAtODcyLDYgKzg5Niw5IEBAIHZvaWQgX19pbml0IHN0YXJ0X3hlbih1bnNp
Z25lZCBsb25nDQo+IGJvb3RfcGh5c19vZmZzZXQsDQo+ID4+ICAgICAgIGNtZGxpbmVfcGFyc2Uo
Y21kbGluZSk7DQo+ID4+DQo+ID4+ICAgICAgIHNldHVwX21tKCk7DQo+ID4+ICsgICAgLyogSWYg
ZXhpc3RzLCBTdGF0aWMgTWVtb3J5IEluaXRpYWxpemF0aW9uLiAqLw0KPiA+PiArICAgIGlmICgg
Ym9vdGluZm8uc3RhdGljX21lbS5ucl9iYW5rcyA+IDAgKQ0KPiA+PiArICAgICAgICBpbml0X3N0
YXRpY21lbV9wYWdlcygpOw0KPiA+DQo+ID4gSSBkb24ndCB0aGluayB0aGUgY29uZGl0aW9uYWwg
aXMgcmVhbGx5IG5lZWRlZCBoZXJlPw0KPiA+DQoNClN1cmUsIHJpZ2h0LiANCkxpa2Ugd2hhdCBK
dWxpZW4gc3VnZ2VzdHMsICBpbml0X3N0YXRpY21lbV9wYWdlcygpIGlzIGFscmVhZHkgYWJsZSB0
byBjb3BlIHdpdGggbnJfYmFua3MgPT0gMC4NCg0KPiA+PiAtLS0gYS94ZW4vY29tbW9uL3BhZ2Vf
YWxsb2MuYw0KPiA+PiArKysgYi94ZW4vY29tbW9uL3BhZ2VfYWxsb2MuYw0KPiA+PiBAQCAtMTM3
Niw2ICsxMzc2LDM3IEBAIGJvb2wgc2NydWJfZnJlZV9wYWdlcyh2b2lkKQ0KPiA+PiAgICAgICBy
ZXR1cm4gbm9kZV90b19zY3J1YihmYWxzZSkgIT0gTlVNQV9OT19OT0RFOw0KPiA+PiAgIH0NCj4g
Pj4NCj4gPj4gK3N0YXRpYyB2b2lkIGZyZWVfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwZywgYm9v
bCBuZWVkX3NjcnViKSB7DQo+ID4+ICsgICAgbWZuX3QgbWZuID0gcGFnZV90b19tZm4ocGcpOw0K
PiA+DQo+ID4gV2l0aCBwZHggY29tcHJlc3Npb24gdGhpcyBpcyBhIG5vbi10cml2aWFsIGNvbnZl
cnNpb24uIFRoZSBmdW5jdGlvbg0KPiA+IGJlaW5nIGFuIGludGVybmFsIGhlbHBlciBhbmQgdGhl
IGNhbGxlciBhbHJlYWR5IGhvbGRpbmcgdGhlIE1GTiwgSQ0KPiA+IHRoaW5rIGl0IHdvdWxkIGJl
IHByZWZlcmFibGUgaWYgdGhlIE1GTiB3YXMgcGFzc2VkIGluIGhlcmUuIElmIGRvbmUNCj4gPiB0
aGlzIHdheSwgeW91IG1heSB3YW50IHRvIGNvbnNpZGVyIGFkZGluZyBhbiBBU1NFUlQoKSB0byBk
b3VibGUgY2hlY2sNCj4gPiBib3RoIHBhc3NlZCBpbiBhcmd1bWVudHMgbWF0Y2ggdXAuDQo+ID4N
Cg0KVGhhbmsgZm9yIHRoZSBzdWdnZXN0aW9ufg0KDQo+ID4+ICsgICAgLyogSWYgYSBwYWdlIGhh
cyBubyBvd25lciBpdCB3aWxsIG5lZWQgbm8gc2FmZXR5IFRMQiBmbHVzaC4gKi8NCj4gPj4gKyAg
ICBwZy0+dS5mcmVlLm5lZWRfdGxiZmx1c2ggPSAocGFnZV9nZXRfb3duZXIocGcpICE9IE5VTEwp
Ow0KPiA+PiArICAgIGlmICggcGctPnUuZnJlZS5uZWVkX3RsYmZsdXNoICkNCj4gPj4gKyAgICAg
ICAgcGFnZV9zZXRfdGxiZmx1c2hfdGltZXN0YW1wKHBnKTsNCj4gPj4gKw0KPiA+PiArICAgIC8q
IFRoaXMgcGFnZSBpcyBub3QgYSBndWVzdCBmcmFtZSBhbnkgbW9yZS4gKi8NCj4gPj4gKyAgICBw
YWdlX3NldF9vd25lcihwZywgTlVMTCk7IC8qIHNldF9ncGZuX2Zyb21fbWZuIHNub29wcyBwZyBv
d25lcg0KPiAqLw0KPiA+PiArICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbl94KG1mbiksIElOVkFM
SURfTTJQX0VOVFJZKTsNCj4gPj4gKw0KPiA+PiArI2lmZGVmIENPTkZJR19BUk0NCj4gPg0KPiA+
IElmIGF2b2lkYWJsZSB0aGVyZSBzaG91bGQgYmUgbm8gYXJjaC1zcGVjaWZpYyBjb2RlIGFkZGVk
IHRvIHRoaXMgZmlsZS4NCj4gPiBBc3N1bWluZyBhbm90aGVyIGFyY2ggZ2FpbmVkIFBHQ19yZXNl
cnZlZCwgd2hhdCdzIHdyb25nIHdpdGggZW5hYmxpbmcNCj4gPiB0aGlzIGNvZGUgcmlnaHQgYXdh
eSBmb3IgdGhlbSBhcyB3ZWxsPyBJLmUuIHVzZSBQR0NfcmVzZXJ2ZWQgaGVyZQ0KPiA+IGluc3Rl
YWQgb2YgQ09ORklHX0FSTT8gQWx0ZXJuYXRpdmVseSB0aGlzIG1heSB3YW50IHRvIGJlDQo+ID4g
Q09ORklHX1NUQVRJQ19BTExPQ0FUSU9OLCBhc3N1bWluZyB3ZSBjb25zaWRlciBQR0NfcmVzZXJ2
ZWQgdGllZCB0bw0KPiA+IGl0Lg0KPiA+DQoNClRvIG5vdCBicmluZyBkZWFkIGNvZGVzIGluIG90
aGVyIGFyY2hzLCBJJ2xsIHVzZSBtb3JlIGdlbmVyaWMgb3B0aW9uIENPTkZJR19TVEFUSUNfQUxM
T0NBVElPTi4NCg0KPiA+PiArICAgIGlmICggcGctPmNvdW50X2luZm8gJiBQR0NfcmVzZXJ2ZWQg
KQ0KPiA+PiArICAgIHsNCj4gPj4gKyAgICAgICAgLyogVE9ETzogYXN5bmNocm9ub3VzIHNjcnVi
YmluZy4gKi8NCj4gPj4gKyAgICAgICAgaWYgKCBuZWVkX3NjcnViICkNCj4gPj4gKyAgICAgICAg
ICAgIHNjcnViX29uZV9wYWdlKHBnKTsNCj4gPj4gKyAgICAgICAgcmV0dXJuOw0KPiA+PiArICAg
IH0NCj4gPj4gKyNlbmRpZg0KPiA+PiArICAgIGlmICggbmVlZF9zY3J1YiApDQo+ID4NCj4gPiBO
aXQ6IFBsZWFzZSBoYXZlIGEgYmxhbmsgbGluZSBiZXR3ZWVuIHRoZXNlIGxhc3QgdHdvLg0KPiA+
DQoNClN1cmUuIFdpbGwgZG8uDQoNCj4gPj4gKyAgICB7DQo+ID4+ICsgICAgICAgIHBnLT5jb3Vu
dF9pbmZvIHw9IFBHQ19uZWVkX3NjcnViOw0KPiA+PiArICAgICAgICBwb2lzb25fb25lX3BhZ2Uo
cGcpOw0KPiA+PiArICAgIH0NCj4gPj4gKw0KPiA+PiArICAgIHJldHVybjsNCj4gPg0KPiA+IFBs
ZWFzZSBvbWl0IHJldHVybiBzdGF0ZW1lbnRzIGF0IHRoZSBlbmQgb2YgZnVuY3Rpb25zIHJldHVy
bmluZyB2b2lkLg0KPiA+DQoNClN1cmUsIHRoeA0KDQo+ID4+ICt9DQo+ID4NCj4gPiBPbiB0aGUg
d2hvbGUsIGJpa2Ugc2hlZGRpbmcgb3Igbm90LCBJJ20gYWZyYWlkIHRoZSBmdW5jdGlvbidzIG5h
bWUNCj4gPiBkb2Vzbid0IG1hdGNoIHdoYXQgaXQgZG9lczogVGhlcmUncyBubyBmcmVlaW5nIG9m
IGEgcGFnZSBoZXJlLiBXaGF0DQo+ID4gZ2V0cyBkb25lIGlzIG1hcmtpbmcgb2YgYSBwYWdlIGFz
IGZyZWUuIEhlbmNlIG1heWJlIG1hcmtfcGFnZV9mcmVlKCkNCj4gPiBvciBtYXJrX2ZyZWVfcGFn
ZSgpIG9yIHNvbWUgc3VjaD8NCj4gPg0KDQpPay4gVGh4LiBBbHdheXMgbm90IGdvb2QgYXQgZ2l2
aW5nIG5hbWVzLiBJJ2xsIHRha2UgbWFya19wYWdlX2ZyZWUoKQ0KDQo+ID4+IEBAIC0xNTEyLDYg
KzE1MzAsMzggQEAgc3RhdGljIHZvaWQgZnJlZV9oZWFwX3BhZ2VzKA0KPiA+PiAgICAgICBzcGlu
X3VubG9jaygmaGVhcF9sb2NrKTsNCj4gPj4gICB9DQo+ID4+DQo+ID4+ICsjaWZkZWYgQ09ORklH
X1NUQVRJQ19BTExPQ0FUSU9ODQo+ID4+ICsvKiBFcXVpdmFsZW50IG9mIGZyZWVfaGVhcF9wYWdl
cyB0byBmcmVlIG5yX21mbnMgcGFnZXMgb2Ygc3RhdGljDQo+ID4+ICttZW1vcnkuICovIHZvaWQg
X19pbml0IGZyZWVfc3RhdGljbWVtX3BhZ2VzKHN0cnVjdCBwYWdlX2luZm8gKnBnLA0KPiB1bnNp
Z25lZCBsb25nIG5yX21mbnMsDQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIG5lZWRfc2NydWIpIHsNCj4gPj4gKyAgICBtZm5fdCBtZm4gPSBwYWdlX3RvX21mbihw
Zyk7DQo+ID4+ICsgICAgdW5zaWduZWQgbG9uZyBpOw0KPiA+PiArDQo+ID4+ICsgICAgZm9yICgg
aSA9IDA7IGkgPCBucl9tZm5zOyBpKysgKQ0KPiA+PiArICAgIHsNCj4gPj4gKyAgICAgICAgc3dp
dGNoICggcGdbaV0uY291bnRfaW5mbyAmIFBHQ19zdGF0ZSApDQo+ID4+ICsgICAgICAgIHsNCj4g
Pj4gKyAgICAgICAgY2FzZSBQR0Nfc3RhdGVfaW51c2U6DQo+ID4+ICsgICAgICAgICAgICBCVUdf
T04ocGdbaV0uY291bnRfaW5mbyAmIFBHQ19icm9rZW4pOw0KPiA+PiArICAgICAgICAgICAgLyog
TWFyayBpdCBmcmVlIGFuZCByZXNlcnZlZC4gKi8NCj4gPj4gKyAgICAgICAgICAgIHBnW2ldLmNv
dW50X2luZm8gPSBQR0Nfc3RhdGVfZnJlZSB8IFBHQ19yZXNlcnZlZDsNCj4gPj4gKyAgICAgICAg
ICAgIGJyZWFrOw0KPiA+PiArDQo+ID4+ICsgICAgICAgIGRlZmF1bHQ6DQo+ID4+ICsgICAgICAg
ICAgICBwcmludGsoWEVOTE9HX0VSUg0KPiA+PiArICAgICAgICAgICAgICAgICAgICJQYWdlIHN0
YXRlIHNoYWxsIGJlIG9ubHkgaW4gUEdDX3N0YXRlX2ludXNlLiAiDQo+ID4NCj4gPiBXaHk/IEEg
cGFnZSAoc3RhdGljIG9yIG5vdCkgY2FuIGJlY29tZSBicm9rZW4gd2hpbGUgaW4gdXNlLiBJT1cg
SQ0KPiA+IGRvbid0IHRoaW5rIHlvdSBjYW4gYXZvaWQgaGFuZGxpbmcgUEdDX3N0YXRlX29mZmxp
bmluZyBoZXJlLiBBdCB3aGljaA0KPiA+IHBvaW50IHRoaXMgY29kZSB3aWxsIG1hdGNoIGZyZWVf
aGVhcF9wYWdlcygpJ2VzLCBhbmQgaGVuY2UgbGlrZWx5IHdpbGwNCj4gPiB3YW50IGZvbGRpbmcg
YXMgd2VsbC4NCj4gPg0KDQpZZWFoLCBJIHdhcyBmb2xsb3dpbmcgdGhlIGxvZ2ljIGluIGZyZWVf
aGVhcF9wYWdlcy4NCkhtbW0sIEkgY291bGQgbm90IHRoaW5rIG9mIGFueSBzY2VuYXJpbyB0aGF0
IHdpbGwgbGVhZCB0byBQR0Nfc3RhdGVfb2ZmbGluaW5nLCB0aGF0J3Mgd2h5DQpJIHdhcyBub3Qg
aW5jbHVkaW5nIGl0IGF0IHRoZSBmaXJzdCBwbGFjZS4NCkZvciBicm9rZW4gaXNzdWUsIHRiaCwg
SSBqdXN0IGNvcHkgdGhlIGJ1Z19vbiBmcm9tIGZyZWVfaGVhcF9wYWdlcywgYWZ0ZXIgcXVpdGUg
YSB0aW1lIHRoaW5raW5nLA0KSSBhbHNvIGNvdWxkIG5vdCBmaW5kIGFueSBzY2VuYXJpbyB3aGVu
IGEgcGFnZShzdGF0aWMgb3Igbm90KSBjYW4gYmVjb21lIGJyb2tlbiB3aGlsZSBpbiB1c2UuIDsv
DQoNCj4gPj4gLS0tIGEveGVuL2luY2x1ZGUveGVuL21tLmgNCj4gPj4gKysrIGIveGVuL2luY2x1
ZGUveGVuL21tLmgNCj4gPj4gQEAgLTg1LDYgKzg1LDEyIEBAIGJvb2wgc2NydWJfZnJlZV9wYWdl
cyh2b2lkKTsNCj4gPj4gICB9IHdoaWxlICggZmFsc2UgKQ0KPiA+PiAgICNkZWZpbmUgRlJFRV9Y
RU5IRUFQX1BBR0UocCkgRlJFRV9YRU5IRUFQX1BBR0VTKHAsIDApDQo+ID4+DQo+ID4+ICsjaWZk
ZWYgQ09ORklHX0FSTQ0KPiA+DQo+ID4gSVRZTSBDT05GSUdfU1RBVElDX0FMTE9DQVRJT04gaGVy
ZT8NCj4gPg0KPiA+IEphbg0KPiA+DQo+IA0KPiAtLQ0KPiBKdWxpZW4gR3JhbGwNCg0KQ2hlZXJz
DQoNCi0tDQpQZW5ueSBaaGVuZw0K


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 06:40:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 06:40:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149790.277051 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0IGx-0003dV-Ok; Mon, 05 Jul 2021 06:40:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149790.277051; Mon, 05 Jul 2021 06:40:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0IGx-0003d0-Ld; Mon, 05 Jul 2021 06:40:03 +0000
Received: by outflank-mailman (input) for mailman id 149790;
 Mon, 05 Jul 2021 06:40:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=WzMM=L5=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m0IGw-0003Qf-FD
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 06:40:02 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id cb8c6b69-9592-4f35-b71b-af600618acb3;
 Mon, 05 Jul 2021 06:40:00 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1BA1C1063;
 Sun,  4 Jul 2021 23:40:00 -0700 (PDT)
Received: from e123311-lin.arm.com (unknown [10.57.13.212])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8E0103F694;
 Sun,  4 Jul 2021 23:39:57 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cb8c6b69-9592-4f35-b71b-af600618acb3
From: Michal Orzel <michal.orzel@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Tamas K Lengyel <tamas@tklengyel.com>,
	Alexandru Isaila <aisaila@bitdefender.com>,
	Petre Pircalabu <ppircalabu@bitdefender.com>,
	bertrand.marquis@arm.com
Subject: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
Date: Mon,  5 Jul 2021 08:39:52 +0200
Message-Id: <20210705063952.25629-1-michal.orzel@arm.com>
X-Mailer: git-send-email 2.29.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

AArch64 registers are 64bit whereas AArch32 registers
are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
we should get rid of helpers READ/WRITE_SYSREG32
in favour of using READ/WRITE_SYSREG.
We should also use register_t type when reading sysregs
which can correspond to uint64_t or uint32_t.
Even though many AArch64 registers have upper 32bit reserved
it does not mean that they can't be widen in the future.

Modify type of hsr, cpsr, spsr_el1 to uint64_t.
Previously we relied on the padding after spsr_el1.
As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
No need to modify the assembly code because the accesses were based on 64bit
registers as there was a 32bit padding after spsr_el1.

Remove 32bit padding in cpu_user_regs before spsr_fiq
as it is no longer needed due to upper union being 64bit now.
Add 64bit padding in cpu_user_regs before spsr_el1
because the kernel frame should be 16-byte aligned.

Change type of cpsr to uint64_t in the public outside interface
"public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
Increment XEN_DOMCTL_INTERFACE_VERSION.

Change type of cpsr to uint64_t in the public outside interface
"public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.

Signed-off-by: Michal Orzel <michal.orzel@arm.com>
---
Changes since v3:
-Fix comment about padding
-Remove duplicated printk
Changes since v2:
-Remove _res0 members from structures inside hsr union
-Update commit message
-Modify type of cpsr to uint64_t in public/arch-arm.h
-Increment XEN_DOMCTL_INTERFACE_VERSION
Changes since v1:
-Modify type of cpsr, spsr_el1
-Remove ifdefery in hsr union protecting _res0 members
-Fix formatting of printk calls
---
 xen/arch/arm/arm64/entry.S            |  4 ++--
 xen/arch/arm/arm64/traps.c            |  2 +-
 xen/arch/arm/arm64/vsysreg.c          |  3 ++-
 xen/arch/arm/domain.c                 |  2 +-
 xen/arch/arm/traps.c                  | 28 ++++++++++++++-------------
 xen/arch/arm/vcpreg.c                 | 13 +++++++------
 xen/include/asm-arm/arm64/processor.h | 11 ++++++-----
 xen/include/asm-arm/hsr.h             |  2 +-
 xen/include/public/arch-arm.h         |  4 ++--
 xen/include/public/domctl.h           |  2 +-
 xen/include/public/vm_event.h         |  3 +--
 11 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S
index ab9a65fc14..fc3811ad0a 100644
--- a/xen/arch/arm/arm64/entry.S
+++ b/xen/arch/arm/arm64/entry.S
@@ -155,7 +155,7 @@
         add     x21, sp, #UREGS_CPSR
         mrs     x22, spsr_el2
         mrs     x23, esr_el2
-        stp     w22, w23, [x21]
+        stp     x22, x23, [x21]
 
         .endm
 
@@ -432,7 +432,7 @@ return_from_trap:
         msr     daifset, #IFLAGS___I_ /* Mask interrupts */
 
         ldr     x21, [sp, #UREGS_PC]            /* load ELR */
-        ldr     w22, [sp, #UREGS_CPSR]          /* load SPSR */
+        ldr     x22, [sp, #UREGS_CPSR]          /* load SPSR */
 
         pop     x0, x1
         pop     x2, x3
diff --git a/xen/arch/arm/arm64/traps.c b/xen/arch/arm/arm64/traps.c
index babfc1d884..9113a15c7a 100644
--- a/xen/arch/arm/arm64/traps.c
+++ b/xen/arch/arm/arm64/traps.c
@@ -36,7 +36,7 @@ void do_bad_mode(struct cpu_user_regs *regs, int reason)
     union hsr hsr = { .bits = regs->hsr };
 
     printk("Bad mode in %s handler detected\n", handler[reason]);
-    printk("ESR=0x%08"PRIx32":  EC=%"PRIx32", IL=%"PRIx32", ISS=%"PRIx32"\n",
+    printk("ESR=%#"PRIregister":  EC=%"PRIx32", IL=%"PRIx32", ISS=%"PRIx32"\n",
            hsr.bits, hsr.ec, hsr.len, hsr.iss);
 
     local_irq_disable();
diff --git a/xen/arch/arm/arm64/vsysreg.c b/xen/arch/arm/arm64/vsysreg.c
index 41f18612c6..caf17174b8 100644
--- a/xen/arch/arm/arm64/vsysreg.c
+++ b/xen/arch/arm/arm64/vsysreg.c
@@ -368,7 +368,8 @@ void do_sysreg(struct cpu_user_regs *regs,
                      sysreg.op2,
                      sysreg.read ? "=>" : "<=",
                      sysreg.reg, regs->pc);
-            gdprintk(XENLOG_ERR, "unhandled 64-bit sysreg access %#x\n",
+            gdprintk(XENLOG_ERR,
+                     "unhandled 64-bit sysreg access %#"PRIregister"\n",
                      hsr.bits & HSR_SYSREG_REGS_MASK);
             inject_undef_exception(regs, hsr);
             return;
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index c021a03c61..74bdbb9082 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -845,7 +845,7 @@ static int is_guest_pv32_psr(uint32_t psr)
 
 
 #ifdef CONFIG_ARM_64
-static int is_guest_pv64_psr(uint32_t psr)
+static int is_guest_pv64_psr(uint64_t psr)
 {
     if ( psr & PSR_MODE_BIT )
         return 0;
diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index e7384381cc..4ccb6e7d18 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -546,7 +546,7 @@ void inject_undef64_exception(struct cpu_user_regs *regs, int instr_len)
         PSR_IRQ_MASK | PSR_DBG_MASK;
     regs->pc = handler;
 
-    WRITE_SYSREG32(esr.bits, ESR_EL1);
+    WRITE_SYSREG(esr.bits, ESR_EL1);
 }
 
 /* Inject an abort exception into a 64 bit guest */
@@ -580,7 +580,7 @@ static void inject_abt64_exception(struct cpu_user_regs *regs,
     regs->pc = handler;
 
     WRITE_SYSREG(addr, FAR_EL1);
-    WRITE_SYSREG32(esr.bits, ESR_EL1);
+    WRITE_SYSREG(esr.bits, ESR_EL1);
 }
 
 static void inject_dabt64_exception(struct cpu_user_regs *regs,
@@ -717,7 +717,7 @@ struct reg_ctxt {
     uint64_t vttbr_el2;
 };
 
-static const char *mode_string(uint32_t cpsr)
+static const char *mode_string(register_t cpsr)
 {
     uint32_t mode;
     static const char *mode_strings[] = {
@@ -762,7 +762,7 @@ static void show_registers_32(const struct cpu_user_regs *regs,
         printk(" %pS", _p(regs->pc));
     printk("\n");
 #endif
-    printk("CPSR:   %08"PRIx32" MODE:%s\n", regs->cpsr,
+    printk("CPSR:   %"PRIregister" MODE:%s\n", regs->cpsr,
            mode_string(regs->cpsr));
     printk("     R0: %08"PRIx32" R1: %08"PRIx32" R2: %08"PRIx32" R3: %08"PRIx32"\n",
            regs->r0, regs->r1, regs->r2, regs->r3);
@@ -846,7 +846,7 @@ static void show_registers_64(const struct cpu_user_regs *regs,
     {
         printk("SP:     %016"PRIx64"\n", regs->sp);
     }
-    printk("CPSR:   %08"PRIx32" MODE:%s\n", regs->cpsr,
+    printk("CPSR:   %016"PRIx64" MODE:%s\n", regs->cpsr,
            mode_string(regs->cpsr));
     printk("     X0: %016"PRIx64"  X1: %016"PRIx64"  X2: %016"PRIx64"\n",
            regs->x0, regs->x1, regs->x2);
@@ -919,7 +919,7 @@ static void _show_registers(const struct cpu_user_regs *regs,
     printk("   HCR_EL2: %"PRIregister"\n", READ_SYSREG(HCR_EL2));
     printk(" TTBR0_EL2: %016"PRIx64"\n", READ_SYSREG64(TTBR0_EL2));
     printk("\n");
-    printk("   ESR_EL2: %08"PRIx32"\n", regs->hsr);
+    printk("   ESR_EL2: %"PRIregister"\n", regs->hsr);
     printk(" HPFAR_EL2: %"PRIregister"\n", READ_SYSREG(HPFAR_EL2));
 
 #ifdef CONFIG_ARM_32
@@ -1599,7 +1599,7 @@ static const unsigned short cc_map[16] = {
 
 int check_conditional_instr(struct cpu_user_regs *regs, const union hsr hsr)
 {
-    unsigned long cpsr, cpsr_cond;
+    register_t cpsr, cpsr_cond;
     int cond;
 
     /*
@@ -1661,7 +1661,7 @@ int check_conditional_instr(struct cpu_user_regs *regs, const union hsr hsr)
 
 void advance_pc(struct cpu_user_regs *regs, const union hsr hsr)
 {
-    unsigned long itbits, cond, cpsr = regs->cpsr;
+    register_t itbits, cond, cpsr = regs->cpsr;
     bool is_thumb = psr_mode_is_32bit(regs) && (cpsr & PSR_THUMB);
 
     if ( is_thumb && (cpsr & PSR_IT_MASK) )
@@ -2004,13 +2004,15 @@ static void do_trap_stage2_abort_guest(struct cpu_user_regs *regs,
 
         break;
     default:
-        gprintk(XENLOG_WARNING, "Unsupported FSC: HSR=%#x DFSC=%#x\n",
+        gprintk(XENLOG_WARNING,
+                "Unsupported FSC: HSR=%#"PRIregister" DFSC=%#x\n",
                 hsr.bits, xabt.fsc);
     }
 
 inject_abt:
-    gdprintk(XENLOG_DEBUG, "HSR=0x%x pc=%#"PRIregister" gva=%#"PRIvaddr
-             " gpa=%#"PRIpaddr"\n", hsr.bits, regs->pc, gva, gpa);
+    gdprintk(XENLOG_DEBUG,
+             "HSR=%#"PRIregister" pc=%#"PRIregister" gva=%#"PRIvaddr" gpa=%#"PRIpaddr"\n",
+             hsr.bits, regs->pc, gva, gpa);
     if ( is_data )
         inject_dabt_exception(regs, gva, hsr.len);
     else
@@ -2204,7 +2206,7 @@ void do_trap_guest_sync(struct cpu_user_regs *regs)
 
     default:
         gprintk(XENLOG_WARNING,
-                "Unknown Guest Trap. HSR=0x%x EC=0x%x IL=%x Syndrome=0x%"PRIx32"\n",
+                "Unknown Guest Trap. HSR=%#"PRIregister" EC=0x%x IL=%x Syndrome=0x%"PRIx32"\n",
                 hsr.bits, hsr.ec, hsr.len, hsr.iss);
         inject_undef_exception(regs, hsr);
     }
@@ -2242,7 +2244,7 @@ void do_trap_hyp_sync(struct cpu_user_regs *regs)
         break;
     }
     default:
-        printk("Hypervisor Trap. HSR=0x%x EC=0x%x IL=%x Syndrome=0x%"PRIx32"\n",
+        printk("Hypervisor Trap. HSR=%#"PRIregister" EC=0x%x IL=%x Syndrome=0x%"PRIx32"\n",
                hsr.bits, hsr.ec, hsr.len, hsr.iss);
         do_unexpected_trap("Hypervisor", regs);
     }
diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
index 55351fc087..f0cdcc8a54 100644
--- a/xen/arch/arm/vcpreg.c
+++ b/xen/arch/arm/vcpreg.c
@@ -385,7 +385,7 @@ void do_cp15_32(struct cpu_user_regs *regs, const union hsr hsr)
                  "%s p15, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
                  cp32.read ? "mrc" : "mcr",
                  cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->pc);
-        gdprintk(XENLOG_ERR, "unhandled 32-bit CP15 access %#x\n",
+        gdprintk(XENLOG_ERR, "unhandled 32-bit CP15 access %#"PRIregister"\n",
                  hsr.bits & HSR_CP32_REGS_MASK);
         inject_undef_exception(regs, hsr);
         return;
@@ -454,7 +454,8 @@ void do_cp15_64(struct cpu_user_regs *regs, const union hsr hsr)
                      "%s p15, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
                      cp64.read ? "mrrc" : "mcrr",
                      cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
-            gdprintk(XENLOG_ERR, "unhandled 64-bit CP15 access %#x\n",
+            gdprintk(XENLOG_ERR,
+                     "unhandled 64-bit CP15 access %#"PRIregister"\n",
                      hsr.bits & HSR_CP64_REGS_MASK);
             inject_undef_exception(regs, hsr);
             return;
@@ -585,7 +586,7 @@ void do_cp14_32(struct cpu_user_regs *regs, const union hsr hsr)
                  "%s p14, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
                   cp32.read ? "mrc" : "mcr",
                   cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->pc);
-        gdprintk(XENLOG_ERR, "unhandled 32-bit cp14 access %#x\n",
+        gdprintk(XENLOG_ERR, "unhandled 32-bit cp14 access %#"PRIregister"\n",
                  hsr.bits & HSR_CP32_REGS_MASK);
         inject_undef_exception(regs, hsr);
         return;
@@ -627,7 +628,7 @@ void do_cp14_64(struct cpu_user_regs *regs, const union hsr hsr)
              "%s p14, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
              cp64.read ? "mrrc" : "mcrr",
              cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
-    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 access %#x\n",
+    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 access %#"PRIregister"\n",
              hsr.bits & HSR_CP64_REGS_MASK);
     inject_undef_exception(regs, hsr);
 }
@@ -658,7 +659,7 @@ void do_cp14_dbg(struct cpu_user_regs *regs, const union hsr hsr)
              "%s p14, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
              cp64.read ? "mrrc" : "mcrr",
              cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
-    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 DBG access %#x\n",
+    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 DBG access %#"PRIregister"\n",
              hsr.bits & HSR_CP64_REGS_MASK);
 
     inject_undef_exception(regs, hsr);
@@ -692,7 +693,7 @@ void do_cp10(struct cpu_user_regs *regs, const union hsr hsr)
                  "%s p10, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
                  cp32.read ? "mrc" : "mcr",
                  cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->pc);
-        gdprintk(XENLOG_ERR, "unhandled 32-bit CP10 access %#x\n",
+        gdprintk(XENLOG_ERR, "unhandled 32-bit CP10 access %#"PRIregister"\n",
                  hsr.bits & HSR_CP32_REGS_MASK);
         inject_undef_exception(regs, hsr);
         return;
diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/include/asm-arm/arm64/processor.h
index 81dfc5e615..c749f80ad9 100644
--- a/xen/include/asm-arm/arm64/processor.h
+++ b/xen/include/asm-arm/arm64/processor.h
@@ -63,18 +63,19 @@ struct cpu_user_regs
 
     /* Return address and mode */
     __DECL_REG(pc,           pc32);             /* ELR_EL2 */
-    uint32_t cpsr;                              /* SPSR_EL2 */
-    uint32_t hsr;                               /* ESR_EL2 */
+    uint64_t cpsr;                              /* SPSR_EL2 */
+    uint64_t hsr;                               /* ESR_EL2 */
+
+    /* The kernel frame should be 16-byte aligned. */
+    uint64_t pad0;
 
     /* Outer guest frame only from here on... */
 
     union {
-        uint32_t spsr_el1;       /* AArch64 */
+        uint64_t spsr_el1;       /* AArch64 */
         uint32_t spsr_svc;       /* AArch32 */
     };
 
-    uint32_t pad1; /* Doubleword-align the user half of the frame */
-
     /* AArch32 guests only */
     uint32_t spsr_fiq, spsr_irq, spsr_und, spsr_abt;
 
diff --git a/xen/include/asm-arm/hsr.h b/xen/include/asm-arm/hsr.h
index 29d4531f40..9b91b28c48 100644
--- a/xen/include/asm-arm/hsr.h
+++ b/xen/include/asm-arm/hsr.h
@@ -16,7 +16,7 @@ enum dabt_size {
 };
 
 union hsr {
-    uint32_t bits;
+    register_t bits;
     struct {
         unsigned long iss:25;  /* Instruction Specific Syndrome */
         unsigned long len:1;   /* Instruction length */
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
index 713fd65317..64a2ca30da 100644
--- a/xen/include/public/arch-arm.h
+++ b/xen/include/public/arch-arm.h
@@ -267,10 +267,10 @@ struct vcpu_guest_core_regs
 
     /* Return address and mode */
     __DECL_REG(pc64,         pc32);             /* ELR_EL2 */
-    uint32_t cpsr;                              /* SPSR_EL2 */
+    uint64_t cpsr;                              /* SPSR_EL2 */
 
     union {
-        uint32_t spsr_el1;       /* AArch64 */
+        uint64_t spsr_el1;       /* AArch64 */
         uint32_t spsr_svc;       /* AArch32 */
     };
 
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 4dbf107785..d576bfabd6 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -38,7 +38,7 @@
 #include "hvm/save.h"
 #include "memory.h"
 
-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000013
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000014
 
 /*
  * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
diff --git a/xen/include/public/vm_event.h b/xen/include/public/vm_event.h
index 36135ba4f1..bb003d21d0 100644
--- a/xen/include/public/vm_event.h
+++ b/xen/include/public/vm_event.h
@@ -266,8 +266,7 @@ struct vm_event_regs_arm {
     uint64_t ttbr1;
     uint64_t ttbcr;
     uint64_t pc;
-    uint32_t cpsr;
-    uint32_t _pad;
+    uint64_t cpsr;
 };
 
 /*
-- 
2.29.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:15:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:15:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149797.277062 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Ios-0007Sc-L8; Mon, 05 Jul 2021 07:15:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149797.277062; Mon, 05 Jul 2021 07:15:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Ios-0007SV-Gv; Mon, 05 Jul 2021 07:15:06 +0000
Received: by outflank-mailman (input) for mailman id 149797;
 Mon, 05 Jul 2021 07:15:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2kFf=L5=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0Ior-0007SP-6K
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:15:05 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.40]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b776510b-dd60-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 07:15:03 +0000 (UTC)
Received: from AM6P195CA0014.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:81::27)
 by AM5PR0801MB1892.eurprd08.prod.outlook.com (2603:10a6:203:4d::7) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 07:15:00 +0000
Received: from VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:81:cafe::db) by AM6P195CA0014.outlook.office365.com
 (2603:10a6:209:81::27) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 07:15:00 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT005.mail.protection.outlook.com (10.152.18.172) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 07:15:00 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Mon, 05 Jul 2021 07:14:59 +0000
Received: from cc79ab84d0a9.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 9AF69E76-84EC-48E3-B1FE-0B9ED816F679.1; 
 Mon, 05 Jul 2021 07:14:53 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id cc79ab84d0a9.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 07:14:53 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VE1PR08MB5598.eurprd08.prod.outlook.com (2603:10a6:800:1a2::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.18; Mon, 5 Jul
 2021 07:14:51 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 07:14:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b776510b-dd60-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=U6qdP3mMKvnmKn7YyujD+j/ep41Pw1sRSneXiEsdZm0=;
 b=jXUI1zG96aW6fVQn4ElU/IbZRIn7XuWoyXZqtZNWdPcZztLYpshdvUpHhaNetMeyau2hOIyzflu8em8PQOoCoYO5nG8RN/B/wApuxLqyJL3uHQ8jZc/ObScohG+o7v1ulN0JBF9NrQPesjtKFGyTUIRRkMRR1v+KuHwHPwzZ4dc=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jLTUpNp0S8gqELKpuxGpt40jzEH1to5NEe1K5KtiNGtofHERIjGrYRvH5WfD8zzu09aYWaL1/iSKhej9ZLClS98IUdze4vCb/ZjV9hbB1jjDg72OmhacgGNmuIwsq7QEdqgnMqLDue/pwPlTOKiyLjw8lz4wcg07Sm/XSZQBKEXlkxSej8Ckb+CNa/ksiZOtFMmjLQnTUYw/UacPJFWe1jdQxtFzbve7PPJbc6eQuJK1dPy5SbBxCnlI1/5hx8OufhXs4FfY7IBjiScB3fy/UDTTP/Lx4MsJt/wl2+WcZ7b2Z0s4HpThXP6jV56W5yzIDyoW5UJopxow1DIf+OUddw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=U6qdP3mMKvnmKn7YyujD+j/ep41Pw1sRSneXiEsdZm0=;
 b=OZR+SZHF/OLQ4By/b9gupxdEuZ0uZlDhSaBNI/F+qG4RYofY5Q+LSW6P83OKUJn/6w35VFmCaCg403u9GOoWMJ+4SWKfwFLB98N9JISOub/fYFIWh4tKYgY23XmlzcayOLahgVyNqNSKCjguWxZbc2fsB6PmlOIFCxNf8ooRh7h7J8AGQzcgaSjpUS86yojmYMC6mO9+/p5uFS94nQqQJGury7ASpteRjjbox/NuXqdWvR/J4ByNfPvQS23KOvp6tB7Rgk8q+O6Af0Wh8wRhx9EAQCSwEqSQJSkiOBg63oFdkQCLDuCR6jINjZsHoJB4YG1N6tydmvV8dvVj38rMnw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=U6qdP3mMKvnmKn7YyujD+j/ep41Pw1sRSneXiEsdZm0=;
 b=jXUI1zG96aW6fVQn4ElU/IbZRIn7XuWoyXZqtZNWdPcZztLYpshdvUpHhaNetMeyau2hOIyzflu8em8PQOoCoYO5nG8RN/B/wApuxLqyJL3uHQ8jZc/ObScohG+o7v1ulN0JBF9NrQPesjtKFGyTUIRRkMRR1v+KuHwHPwzZ4dc=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>, Julien Grall
	<julien@xen.org>
Subject: RE: [PATCH 4/9] xen/arm: static memory initialization
Thread-Topic: [PATCH 4/9] xen/arm: static memory initialization
Thread-Index: AQHXW0b3OiAcoe7xDE2AVcNY0dwUCqsNAWAAgB/3qYCABuqiQIAANggw
Date: Mon, 5 Jul 2021 07:14:51 +0000
Message-ID:
 <VE1PR08MB521538D03677F9CBC6088855F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <e0a312a1-f430-3ff0-6dd6-fcfe18e58071@suse.com>
 <7f77349f-015e-83d3-d646-af9897e31348@xen.org>
 <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
In-Reply-To:
 <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: B630EF36C6B0AB4983EA6A5DD2F2D3EF.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.113]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 6a035659-f4e9-45a0-0cba-08d93f849a20
x-ms-traffictypediagnostic: VE1PR08MB5598:|AM5PR0801MB1892:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM5PR0801MB18928745C04D607FBBF642E2F71C9@AM5PR0801MB1892.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 N7vDkgRI8+BncMjQvH23gcCuDyiRzpFmKZvgjpOxFSWnX/Kh+MMeyRL0m/qzy/umFSQmt8mYGe9j37bOsHBaItbTN5qF9dn1WW2Pt6FcM0TaB/16IkHbBKtTyAP+Xkpc53O6lwqAykJOV5J23putfLOBevLmLsNg6KU3a6U94aLxrR4QTo2ca2yoGBB9nvJu579Sm3DFzqdTtnVqVNhexIQK0QWdKjKdoZtKMPXuh6e2O01noC5W9WKkNJjH1Sk0KTvm8mjsYLxjGvgrmuROXX1m6lY4oU3CvGszDwcWmRQNjAZgR/V8aq6n0xomBgfWlO5+g1drw7hCsVANq2FINCq9R9FBR7JMHKjd+MZVs9v+QZQ7UNWGONPWMeOWd+ZyA8GLzXo03cx3Au7y9DSfYcdRxlC72CRH4I9UGrizgVYhWnxTyjo//1UaWNBNuuF+9/372FT4bdq5GqiA7/LidZPOLe2/etmbmMJw37/rXO3Z0Eu4C7y/VNOKj1KwaIE/FUsvheTAeN7Nii3C6v2nwLXr3cEH46kz7H3/pnoIkusV91icTfUfcQnIIkWB11kb5Qs0kZ+3/zzb/OHLr5PVY+swlprCA5PDgqLod/6BahNlesZwhqVUmwpf5d9tv9VMYEiL1CiMOe0cyshDTiOt/g==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(376002)(396003)(39840400004)(136003)(26005)(186003)(55016002)(478600001)(53546011)(54906003)(2940100002)(122000001)(9686003)(52536014)(83380400001)(7696005)(8676002)(5660300002)(38100700002)(6916009)(71200400001)(316002)(66946007)(66476007)(76116006)(64756008)(66446008)(4326008)(2906002)(66556008)(6506007)(33656002)(8936002)(86362001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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/bM4I?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5598
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	f0f5a155-5d02-4973-983c-08d93f8494ca
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	8Y8yfUNpdKkqiPSwK4BpIe4sGmzqPiZI+Ty+JWNDczxPV6OkTC7YdSNuOe6BP9b7MLQLKOQfScfkS4vsb5lgdSAs4poWRLZqe9JgvBPo3RFHUItq7L3vBVwjnAOPx0Kb1qcDpzVrqnNG7HF6cdRwVBgkv3am4RSzuHWt/aC8IMi9zR0zemhUSDay0UpePF89xTwBkJEIxcvyicnAIL7AoKEwbAwYC9vEkBcbKWwJaUsVikVVk+GctRNyI4KX9QGFuM6AbfoxlHVlu55dKCFCoOc1DpDNlbvplIFPwsCfXvJ1ize+tsuL1W2ds7nIzDFn3ubIgW68s6a97KYZldUolfGDBbr/s+W6fXHZ9aXlU0q2Bl5aJILSXfEHGqd4FGXXkTwyXfgsglZ+06klLz92y7iCSVJ528l69qki3ly3DDY/pKD3GOSMzMuTvrChkApqRNp7XsSFbo3zlWh5BnsmqRk9iqw4SW+wvaXixT0rV4mwtSF7Cx+41iDA/FHhQWG5a2GURV6CMnE7wUXGI5dluU3mQ9hXbSYIH3XSE56B3pYSCdtJefuPaPnpALUZuITn9y/D6y81OsOw/rOMZ87LpDKp0DnT8oN1UAMykqgWTm3nWX/P951mrHOTRj6mIJoKqWmwbt3sTSOlVDHI03/ANb0GUSM9JLE6xQFs6oCslLiTbPjfY2TwHWijLRnpWWTw2AkiJLhwduuDKGxQb00ijA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(396003)(346002)(376002)(136003)(39850400004)(46966006)(36840700001)(4326008)(8676002)(86362001)(47076005)(2940100002)(7696005)(356005)(8936002)(33656002)(336012)(81166007)(54906003)(83380400001)(6862004)(316002)(70206006)(82310400003)(82740400003)(9686003)(70586007)(478600001)(53546011)(6506007)(186003)(52536014)(55016002)(36860700001)(2906002)(26005)(5660300002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 07:15:00.2461
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 6a035659-f4e9-45a0-0cba-08d93f849a20
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1892

SGkgSmFuIA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFBlbm55IFpo
ZW5nDQo+IFNlbnQ6IE1vbmRheSwgSnVseSA1LCAyMDIxIDE6MjIgUE0NCj4gVG86IEp1bGllbiBH
cmFsbCA8anVsaWVuQHhlbi5vcmc+OyBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+DQo+
IENjOiBCZXJ0cmFuZCBNYXJxdWlzIDxCZXJ0cmFuZC5NYXJxdWlzQGFybS5jb20+OyBXZWkgQ2hl
bg0KPiA8V2VpLkNoZW5AYXJtLmNvbT47IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsN
Cj4gc3N0YWJlbGxpbmlAa2VybmVsLm9yZw0KPiBTdWJqZWN0OiBSRTogW1BBVENIIDQvOV0geGVu
L2FybTogc3RhdGljIG1lbW9yeSBpbml0aWFsaXphdGlvbg0KPiANCj4gSGkgSnVsaWVuIGFuZCBK
YW4NCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBKdWxpZW4g
R3JhbGwgPGp1bGllbkB4ZW4ub3JnPg0KPiA+IFNlbnQ6IFRodXJzZGF5LCBKdWx5IDEsIDIwMjEg
MTo0NiBBTQ0KPiA+IFRvOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+OyBQZW5ueSBa
aGVuZw0KPiA8UGVubnkuWmhlbmdAYXJtLmNvbT4NCj4gPiBDYzogQmVydHJhbmQgTWFycXVpcyA8
QmVydHJhbmQuTWFycXVpc0Bhcm0uY29tPjsgV2VpIENoZW4NCj4gPiA8V2VpLkNoZW5AYXJtLmNv
bT47IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gPiBzc3RhYmVsbGluaUBrZXJu
ZWwub3JnDQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCA0LzldIHhlbi9hcm06IHN0YXRpYyBtZW1v
cnkgaW5pdGlhbGl6YXRpb24NCj4gPg0KPiA+IEhpLA0KPiA+DQo+ID4gT24gMTAvMDYvMjAyMSAx
MDozNSwgSmFuIEJldWxpY2ggd3JvdGU6DQo+ID4gPiBPbiAwNy4wNi4yMDIxIDA0OjQzLCBQZW5u
eSBaaGVuZyB3cm90ZToNCj4gPiA+PiAtLS0gYS94ZW4vYXJjaC9hcm0vc2V0dXAuYw0KPiA+ID4+
ICsrKyBiL3hlbi9hcmNoL2FybS9zZXR1cC5jDQo+ID4gPj4gQEAgLTYxMSw2ICs2MTEsMzAgQEAg
c3RhdGljIHZvaWQgX19pbml0IGluaXRfcGR4KHZvaWQpDQo+ID4gPj4gICAgICAgfQ0KPiA+ID4+
ICAgfQ0KPiA+ID4+DQo+ID4gPj4gKy8qIFN0YXRpYyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi8g
c3RhdGljIHZvaWQgX19pbml0DQo+ID4gPj4gK2luaXRfc3RhdGljbWVtX3BhZ2VzKHZvaWQpIHsN
Cj4gPiA+PiArICAgIGludCBiYW5rOw0KPiA+ID4NCj4gPiA+IFdoaWxlIEknbSBub3QgYSBtYWlu
dGFpbmVyIG9mIHRoaXMgY29kZSwgSSdkIHN0aWxsIGxpa2UgdG8gcG9pbnQgb3V0DQo+ID4gPiB0
aGF0IHdoZXJldmVyIHBvc3NpYmxlIHdlIHByZWZlciAidW5zaWduZWQgaW50IiB3aGVuIGRlYWxp
bmcgd2l0aA0KPiA+ID4gb25seSBub24tbmVnYXRpdmUgdmFsdWVzLCBhbmQgZXZlbiBtb3JlIHNv
IHdoZW4gdXNpbmcgdGhlbSBhcyBhcnJheQ0KPiA+ID4gaW5kZXhlcy4NCj4gPg0KPiA+ICsxLg0K
PiA+DQo+IA0KPiBVbmRlcnN0b29kLiBUaHguDQo+IA0KPiA+ID4NCj4gPiA+PiArICAgIC8qDQo+
ID4gPj4gKyAgICAgKiBUT0RPOiBDb25zaWRlcmluZyBOVU1BLXN1cHBvcnQgc2NlbmFyaW8uDQo+
ID4gPj4gKyAgICAgKi8NCj4gPiA+DQo+ID4gPiBOaXQ6IENvbW1lbnQgc3R5bGUuDQo+ID4gPg0K
PiANCj4gU3VyZSwgdGh4Lg0KPiANCj4gPiA+PiBAQCAtODcyLDYgKzg5Niw5IEBAIHZvaWQgX19p
bml0IHN0YXJ0X3hlbih1bnNpZ25lZCBsb25nDQo+ID4gYm9vdF9waHlzX29mZnNldCwNCj4gPiA+
PiAgICAgICBjbWRsaW5lX3BhcnNlKGNtZGxpbmUpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgc2V0
dXBfbW0oKTsNCj4gPiA+PiArICAgIC8qIElmIGV4aXN0cywgU3RhdGljIE1lbW9yeSBJbml0aWFs
aXphdGlvbi4gKi8NCj4gPiA+PiArICAgIGlmICggYm9vdGluZm8uc3RhdGljX21lbS5ucl9iYW5r
cyA+IDAgKQ0KPiA+ID4+ICsgICAgICAgIGluaXRfc3RhdGljbWVtX3BhZ2VzKCk7DQo+ID4gPg0K
PiA+ID4gSSBkb24ndCB0aGluayB0aGUgY29uZGl0aW9uYWwgaXMgcmVhbGx5IG5lZWRlZCBoZXJl
Pw0KPiA+ID4NCj4gDQo+IFN1cmUsIHJpZ2h0Lg0KPiBMaWtlIHdoYXQgSnVsaWVuIHN1Z2dlc3Rz
LCAgaW5pdF9zdGF0aWNtZW1fcGFnZXMoKSBpcyBhbHJlYWR5IGFibGUgdG8gY29wZQ0KPiB3aXRo
IG5yX2JhbmtzID09IDAuDQo+IA0KPiA+ID4+IC0tLSBhL3hlbi9jb21tb24vcGFnZV9hbGxvYy5j
DQo+ID4gPj4gKysrIGIveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMNCj4gPiA+PiBAQCAtMTM3Niw2
ICsxMzc2LDM3IEBAIGJvb2wgc2NydWJfZnJlZV9wYWdlcyh2b2lkKQ0KPiA+ID4+ICAgICAgIHJl
dHVybiBub2RlX3RvX3NjcnViKGZhbHNlKSAhPSBOVU1BX05PX05PREU7DQo+ID4gPj4gICB9DQo+
ID4gPj4NCj4gPiA+PiArc3RhdGljIHZvaWQgZnJlZV9wYWdlKHN0cnVjdCBwYWdlX2luZm8gKnBn
LCBib29sIG5lZWRfc2NydWIpIHsNCj4gPiA+PiArICAgIG1mbl90IG1mbiA9IHBhZ2VfdG9fbWZu
KHBnKTsNCj4gPiA+DQo+ID4gPiBXaXRoIHBkeCBjb21wcmVzc2lvbiB0aGlzIGlzIGEgbm9uLXRy
aXZpYWwgY29udmVyc2lvbi4gVGhlIGZ1bmN0aW9uDQo+ID4gPiBiZWluZyBhbiBpbnRlcm5hbCBo
ZWxwZXIgYW5kIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkaW5nIHRoZSBNRk4sIEkNCj4gPiA+IHRo
aW5rIGl0IHdvdWxkIGJlIHByZWZlcmFibGUgaWYgdGhlIE1GTiB3YXMgcGFzc2VkIGluIGhlcmUu
IElmIGRvbmUNCj4gPiA+IHRoaXMgd2F5LCB5b3UgbWF5IHdhbnQgdG8gY29uc2lkZXIgYWRkaW5n
IGFuIEFTU0VSVCgpIHRvIGRvdWJsZQ0KPiA+ID4gY2hlY2sgYm90aCBwYXNzZWQgaW4gYXJndW1l
bnRzIG1hdGNoIHVwLg0KPiA+ID4NCj4gDQo+IFRoYW5rIGZvciB0aGUgc3VnZ2VzdGlvbn4NCj4g
DQoNCldoaWxlIGFwcGx5aW5nIHlvdXIgc3VnZ2VzdGlvbiBoZXJlLCBpZiBhZGRpbmcgYW4gQVNT
RVJUKCkgdG8gZG91YmxlIGNoZWNrIGJvdGggcGFzc2VkLWluDQphcmd1bWVudHMgbWF0Y2ggdXAs
IGVpdGhlciB1c2UgbGlrZSBwYWdlX3RvX21mbiB0byBlc3RhYmxpc2ggY29ubmVjdGlvbiwgd2hp
Y2ggaXMgYWJzb2x1dGVseQ0KdW5hY2NlcHRhYmxlLCBvciBwYXNzIG1vcmUgcGFyYW1ldGVycyBs
aWtlIGJhc2UgcGFnZS9tZm4gdG8gY29tcGFyZSB0aGUgb2Zmc2V0LiBIbW1tLA0KSSBhbSBub3Qg
aW4gZmF2b3Igb2YgdGhpcywgIHNpbmNlIGJvdGggZXh0cmEgcGFyYW1ldGVycyBhcmUgb25seSB1
c2VkIGluIGFzc2VydGlvbiBvbmx5LiANCiANCj4gPiA+PiArICAgIC8qIElmIGEgcGFnZSBoYXMg
bm8gb3duZXIgaXQgd2lsbCBuZWVkIG5vIHNhZmV0eSBUTEIgZmx1c2guICovDQo+ID4gPj4gKyAg
ICBwZy0+dS5mcmVlLm5lZWRfdGxiZmx1c2ggPSAocGFnZV9nZXRfb3duZXIocGcpICE9IE5VTEwp
Ow0KPiA+ID4+ICsgICAgaWYgKCBwZy0+dS5mcmVlLm5lZWRfdGxiZmx1c2ggKQ0KPiA+ID4+ICsg
ICAgICAgIHBhZ2Vfc2V0X3RsYmZsdXNoX3RpbWVzdGFtcChwZyk7DQo+ID4gPj4gKw0KPiA+ID4+
ICsgICAgLyogVGhpcyBwYWdlIGlzIG5vdCBhIGd1ZXN0IGZyYW1lIGFueSBtb3JlLiAqLw0KPiA+
ID4+ICsgICAgcGFnZV9zZXRfb3duZXIocGcsIE5VTEwpOyAvKiBzZXRfZ3Bmbl9mcm9tX21mbiBz
bm9vcHMgcGcgb3duZXINCj4gPiAqLw0KPiA+ID4+ICsgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZu
X3gobWZuKSwgSU5WQUxJRF9NMlBfRU5UUlkpOw0KPiA+ID4+ICsNCj4gPiA+PiArI2lmZGVmIENP
TkZJR19BUk0NCj4gPiA+DQo+ID4gPiBJZiBhdm9pZGFibGUgdGhlcmUgc2hvdWxkIGJlIG5vIGFy
Y2gtc3BlY2lmaWMgY29kZSBhZGRlZCB0byB0aGlzIGZpbGUuDQo+ID4gPiBBc3N1bWluZyBhbm90
aGVyIGFyY2ggZ2FpbmVkIFBHQ19yZXNlcnZlZCwgd2hhdCdzIHdyb25nIHdpdGgNCj4gPiA+IGVu
YWJsaW5nIHRoaXMgY29kZSByaWdodCBhd2F5IGZvciB0aGVtIGFzIHdlbGw/IEkuZS4gdXNlDQo+
ID4gPiBQR0NfcmVzZXJ2ZWQgaGVyZSBpbnN0ZWFkIG9mIENPTkZJR19BUk0/IEFsdGVybmF0aXZl
bHkgdGhpcyBtYXkgd2FudA0KPiA+ID4gdG8gYmUgQ09ORklHX1NUQVRJQ19BTExPQ0FUSU9OLCBh
c3N1bWluZyB3ZSBjb25zaWRlciBQR0NfcmVzZXJ2ZWQNCj4gPiA+IHRpZWQgdG8gaXQuDQo+ID4g
Pg0KPiANCj4gVG8gbm90IGJyaW5nIGRlYWQgY29kZXMgaW4gb3RoZXIgYXJjaHMsIEknbGwgdXNl
IG1vcmUgZ2VuZXJpYyBvcHRpb24NCj4gQ09ORklHX1NUQVRJQ19BTExPQ0FUSU9OLg0KPiANCj4g
PiA+PiArICAgIGlmICggcGctPmNvdW50X2luZm8gJiBQR0NfcmVzZXJ2ZWQgKQ0KPiA+ID4+ICsg
ICAgew0KPiA+ID4+ICsgICAgICAgIC8qIFRPRE86IGFzeW5jaHJvbm91cyBzY3J1YmJpbmcuICov
DQo+ID4gPj4gKyAgICAgICAgaWYgKCBuZWVkX3NjcnViICkNCj4gPiA+PiArICAgICAgICAgICAg
c2NydWJfb25lX3BhZ2UocGcpOw0KPiA+ID4+ICsgICAgICAgIHJldHVybjsNCj4gPiA+PiArICAg
IH0NCj4gPiA+PiArI2VuZGlmDQo+ID4gPj4gKyAgICBpZiAoIG5lZWRfc2NydWIgKQ0KPiA+ID4N
Cj4gPiA+IE5pdDogUGxlYXNlIGhhdmUgYSBibGFuayBsaW5lIGJldHdlZW4gdGhlc2UgbGFzdCB0
d28uDQo+ID4gPg0KPiANCj4gU3VyZS4gV2lsbCBkby4NCj4gDQo+ID4gPj4gKyAgICB7DQo+ID4g
Pj4gKyAgICAgICAgcGctPmNvdW50X2luZm8gfD0gUEdDX25lZWRfc2NydWI7DQo+ID4gPj4gKyAg
ICAgICAgcG9pc29uX29uZV9wYWdlKHBnKTsNCj4gPiA+PiArICAgIH0NCj4gPiA+PiArDQo+ID4g
Pj4gKyAgICByZXR1cm47DQo+ID4gPg0KPiA+ID4gUGxlYXNlIG9taXQgcmV0dXJuIHN0YXRlbWVu
dHMgYXQgdGhlIGVuZCBvZiBmdW5jdGlvbnMgcmV0dXJuaW5nIHZvaWQuDQo+ID4gPg0KPiANCj4g
U3VyZSwgdGh4DQo+IA0KPiA+ID4+ICt9DQo+ID4gPg0KPiA+ID4gT24gdGhlIHdob2xlLCBiaWtl
IHNoZWRkaW5nIG9yIG5vdCwgSSdtIGFmcmFpZCB0aGUgZnVuY3Rpb24ncyBuYW1lDQo+ID4gPiBk
b2Vzbid0IG1hdGNoIHdoYXQgaXQgZG9lczogVGhlcmUncyBubyBmcmVlaW5nIG9mIGEgcGFnZSBo
ZXJlLiBXaGF0DQo+ID4gPiBnZXRzIGRvbmUgaXMgbWFya2luZyBvZiBhIHBhZ2UgYXMgZnJlZS4g
SGVuY2UgbWF5YmUgbWFya19wYWdlX2ZyZWUoKQ0KPiA+ID4gb3IgbWFya19mcmVlX3BhZ2UoKSBv
ciBzb21lIHN1Y2g/DQo+ID4gPg0KPiANCj4gT2suIFRoeC4gQWx3YXlzIG5vdCBnb29kIGF0IGdp
dmluZyBuYW1lcy4gSSdsbCB0YWtlIG1hcmtfcGFnZV9mcmVlKCkNCj4gDQo+ID4gPj4gQEAgLTE1
MTIsNiArMTUzMCwzOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2hlYXBfcGFnZXMoDQo+ID4gPj4gICAg
ICAgc3Bpbl91bmxvY2soJmhlYXBfbG9jayk7DQo+ID4gPj4gICB9DQo+ID4gPj4NCj4gPiA+PiAr
I2lmZGVmIENPTkZJR19TVEFUSUNfQUxMT0NBVElPTg0KPiA+ID4+ICsvKiBFcXVpdmFsZW50IG9m
IGZyZWVfaGVhcF9wYWdlcyB0byBmcmVlIG5yX21mbnMgcGFnZXMgb2Ygc3RhdGljDQo+ID4gPj4g
K21lbW9yeS4gKi8gdm9pZCBfX2luaXQgZnJlZV9zdGF0aWNtZW1fcGFnZXMoc3RydWN0IHBhZ2Vf
aW5mbyAqcGcsDQo+ID4gdW5zaWduZWQgbG9uZyBucl9tZm5zLA0KPiA+ID4+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWRfc2NydWIpIHsNCj4gPiA+PiArICAgIG1m
bl90IG1mbiA9IHBhZ2VfdG9fbWZuKHBnKTsNCj4gPiA+PiArICAgIHVuc2lnbmVkIGxvbmcgaTsN
Cj4gPiA+PiArDQo+ID4gPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IG5yX21mbnM7IGkrKyApDQo+
ID4gPj4gKyAgICB7DQo+ID4gPj4gKyAgICAgICAgc3dpdGNoICggcGdbaV0uY291bnRfaW5mbyAm
IFBHQ19zdGF0ZSApDQo+ID4gPj4gKyAgICAgICAgew0KPiA+ID4+ICsgICAgICAgIGNhc2UgUEdD
X3N0YXRlX2ludXNlOg0KPiA+ID4+ICsgICAgICAgICAgICBCVUdfT04ocGdbaV0uY291bnRfaW5m
byAmIFBHQ19icm9rZW4pOw0KPiA+ID4+ICsgICAgICAgICAgICAvKiBNYXJrIGl0IGZyZWUgYW5k
IHJlc2VydmVkLiAqLw0KPiA+ID4+ICsgICAgICAgICAgICBwZ1tpXS5jb3VudF9pbmZvID0gUEdD
X3N0YXRlX2ZyZWUgfCBQR0NfcmVzZXJ2ZWQ7DQo+ID4gPj4gKyAgICAgICAgICAgIGJyZWFrOw0K
PiA+ID4+ICsNCj4gPiA+PiArICAgICAgICBkZWZhdWx0Og0KPiA+ID4+ICsgICAgICAgICAgICBw
cmludGsoWEVOTE9HX0VSUg0KPiA+ID4+ICsgICAgICAgICAgICAgICAgICAgIlBhZ2Ugc3RhdGUg
c2hhbGwgYmUgb25seSBpbiBQR0Nfc3RhdGVfaW51c2UuICINCj4gPiA+DQo+ID4gPiBXaHk/IEEg
cGFnZSAoc3RhdGljIG9yIG5vdCkgY2FuIGJlY29tZSBicm9rZW4gd2hpbGUgaW4gdXNlLiBJT1cg
SQ0KPiA+ID4gZG9uJ3QgdGhpbmsgeW91IGNhbiBhdm9pZCBoYW5kbGluZyBQR0Nfc3RhdGVfb2Zm
bGluaW5nIGhlcmUuIEF0DQo+ID4gPiB3aGljaCBwb2ludCB0aGlzIGNvZGUgd2lsbCBtYXRjaCBm
cmVlX2hlYXBfcGFnZXMoKSdlcywgYW5kIGhlbmNlDQo+ID4gPiBsaWtlbHkgd2lsbCB3YW50IGZv
bGRpbmcgYXMgd2VsbC4NCj4gPiA+DQo+IA0KPiBZZWFoLCBJIHdhcyBmb2xsb3dpbmcgdGhlIGxv
Z2ljIGluIGZyZWVfaGVhcF9wYWdlcy4NCj4gSG1tbSwgSSBjb3VsZCBub3QgdGhpbmsgb2YgYW55
IHNjZW5hcmlvIHRoYXQgd2lsbCBsZWFkIHRvIFBHQ19zdGF0ZV9vZmZsaW5pbmcsDQo+IHRoYXQn
cyB3aHkgSSB3YXMgbm90IGluY2x1ZGluZyBpdCBhdCB0aGUgZmlyc3QgcGxhY2UuDQo+IEZvciBi
cm9rZW4gaXNzdWUsIHRiaCwgSSBqdXN0IGNvcHkgdGhlIGJ1Z19vbiBmcm9tIGZyZWVfaGVhcF9w
YWdlcywgYWZ0ZXINCj4gcXVpdGUgYSB0aW1lIHRoaW5raW5nLCBJIGFsc28gY291bGQgbm90IGZp
bmQgYW55IHNjZW5hcmlvIHdoZW4gYSBwYWdlKHN0YXRpYyBvcg0KPiBub3QpIGNhbiBiZWNvbWUg
YnJva2VuIHdoaWxlIGluIHVzZS4gOy8NCj4gDQo+ID4gPj4gLS0tIGEveGVuL2luY2x1ZGUveGVu
L21tLmgNCj4gPiA+PiArKysgYi94ZW4vaW5jbHVkZS94ZW4vbW0uaA0KPiA+ID4+IEBAIC04NSw2
ICs4NSwxMiBAQCBib29sIHNjcnViX2ZyZWVfcGFnZXModm9pZCk7DQo+ID4gPj4gICB9IHdoaWxl
ICggZmFsc2UgKQ0KPiA+ID4+ICAgI2RlZmluZSBGUkVFX1hFTkhFQVBfUEFHRShwKSBGUkVFX1hF
TkhFQVBfUEFHRVMocCwgMCkNCj4gPiA+Pg0KPiA+ID4+ICsjaWZkZWYgQ09ORklHX0FSTQ0KPiA+
ID4NCj4gPiA+IElUWU0gQ09ORklHX1NUQVRJQ19BTExPQ0FUSU9OIGhlcmU/DQo+ID4gPg0KPiA+
ID4gSmFuDQo+ID4gPg0KPiA+DQo+ID4gLS0NCj4gPiBKdWxpZW4gR3JhbGwNCj4gDQo+IENoZWVy
cw0KPiANCj4gLS0NCj4gUGVubnkgWmhlbmcNCg==


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:28:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:28:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149803.277072 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0J1n-0000XK-OR; Mon, 05 Jul 2021 07:28:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149803.277072; Mon, 05 Jul 2021 07:28:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0J1n-0000XD-LP; Mon, 05 Jul 2021 07:28:27 +0000
Received: by outflank-mailman (input) for mailman id 149803;
 Mon, 05 Jul 2021 07:28:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2kFf=L5=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0J1l-0000X7-RW
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:28:25 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (unknown
 [40.107.20.63]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 94c6fa04-dd62-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 07:28:24 +0000 (UTC)
Received: from DU2PR04CA0049.eurprd04.prod.outlook.com (2603:10a6:10:234::24)
 by AM0PR08MB5284.eurprd08.prod.outlook.com (2603:10a6:208:12a::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Mon, 5 Jul
 2021 07:28:21 +0000
Received: from DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:234:cafe::c) by DU2PR04CA0049.outlook.office365.com
 (2603:10a6:10:234::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Mon, 5 Jul 2021 07:28:21 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT063.mail.protection.outlook.com (10.152.20.209) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 07:28:21 +0000
Received: ("Tessian outbound 80741586f868:v97");
 Mon, 05 Jul 2021 07:28:21 +0000
Received: from 4b6eb623dbe7.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 1E58D255-31A6-4774-9E61-2234FCF6FD14.1; 
 Mon, 05 Jul 2021 07:28:15 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 4b6eb623dbe7.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 07:28:15 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR0802MB2493.eurprd08.prod.outlook.com (2603:10a6:800:b3::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 07:28:12 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 07:28:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 94c6fa04-dd62-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EOIWWZIrA5H/6udCiFdhijsfZ4QzQqtstw3sX2CDyjo=;
 b=jzJ8Glsd5TE93jVEexXc0Ppmvk1ft/F5RUVt4Yp2b19ktb2WIAJPomRAXUeGAqq9xu8zrntJ9Zow54QjFDg9i49G9PrBlFIYLazyziGJsJPvW8ZjzMztR1s5ssGfWiKnpGvh27RdImZadnn39ImHSOanTF/UTq+1fUvMKU0D4o4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QqT51YNvTis+Cidhhs2eKfDWWUZ+a8IaE4+HYYCTU2fcfmHsmDMr33UrVmpa0vwn6sDwi0VsLUWmNyxyAGBX6fkPZxIrl2tX80tqq7KktDo8QhqW9IW9IAg9WUq4ZTB6KU7PEPqhwLECbY90ricYM3ZQ2tFavpAH98V4tY6PJqhAgrLdIAcUW94GDgp2pOWp5NQmD4572Yy7BNAzyscuSyr13oW1kFVOGeKVbOaezDirkqvs7j0OJPSgSSEZ4BrsAdy+0StN7A5Qy+a9M8wyizdgMj0BUIBB9MMj1XNsY8gxG6PeqtJ0yRaQxvSQs2EIHoCczSrV8n2SyW1F+7BAgg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EOIWWZIrA5H/6udCiFdhijsfZ4QzQqtstw3sX2CDyjo=;
 b=TlYVm6JO41qat4h/IB7tP8cLggbCUqHP8XjczAAPIdqYJwcsiY0ci1veJ9AZpmpCqRwc8i+iKdJGFPaqSb9IKjCkSrj3ZUg6mSQMrfHE9W7bbp2m/pN0aUtDC83mRPb+aMsHpRgqSAkj4I4fPdIV4vf/l3eq8dWIwDUCS6RW2usXCBgtrro/rIJcU8xvWN0miVZVwz0FuxPLz7wwF6t4Zi8giZo+pnXB2iAL1qyOvhQbe+HSOP9dwpHrH3nZrWYakbTicMXSWjKtLklL44Oc+htrnCOOPMySF2ymCasmcTWG+OIwkpz9MaGkpj9Hp12//yU7k2uHI3L7ZrmdvQt2cQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EOIWWZIrA5H/6udCiFdhijsfZ4QzQqtstw3sX2CDyjo=;
 b=jzJ8Glsd5TE93jVEexXc0Ppmvk1ft/F5RUVt4Yp2b19ktb2WIAJPomRAXUeGAqq9xu8zrntJ9Zow54QjFDg9i49G9PrBlFIYLazyziGJsJPvW8ZjzMztR1s5ssGfWiKnpGvh27RdImZadnn39ImHSOanTF/UTq+1fUvMKU0D4o4=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "jbeulich@suse.com" <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 4/9] xen/arm: static memory initialization
Thread-Topic: [PATCH 4/9] xen/arm: static memory initialization
Thread-Index: AQHXW0b3OiAcoe7xDE2AVcNY0dwUCqss/50AgAck2tA=
Date: Mon, 5 Jul 2021 07:28:12 +0000
Message-ID:
 <VE1PR08MB5215D076B85A22DD9991B64CF71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <1c6530bf-a362-0993-c4c5-953ee2afb1bf@xen.org>
In-Reply-To: <1c6530bf-a362-0993-c4c5-953ee2afb1bf@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 44ABA79DCBF4E44C96E21CA8D1C1C337.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.113]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 18dcb552-6dc6-438e-627c-08d93f867788
x-ms-traffictypediagnostic: VI1PR0802MB2493:|AM0PR08MB5284:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB52845AB9EC832FB45E7FE2FFF71C9@AM0PR08MB5284.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:4502;OLM:4502;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 JLSqBzp9+hxGVj+9cDFYa9RnOwUpP9kEZpjE5eRnyt8n4wUiGTPbFmAqmLvPKjuP8xvPBF8O69LTci5aC5titWecHbaH/o/kubVbNJaP5NBTXqbKtEyWMH8P6U7hlsg/weToF1tAWkn0trS2O8BBvEujs3NtvvLzcYObNne0XV7F7fsprwgoJsz8Bcdj9xTYZxNmkho8E3f8Rks3esKvWBudUTYqljaM0Vr0GtjMSoGsw+lNYtHCtA3kX1oqxoOM/TC3/HAmMDnZUBVElcCsEFTFqThKH5TwoNAe+T5FKBL/GAwD1RGN4fDyjmoG1rZe/8w310clHp73sguatLgBJUUM6zDKEa1NbBGkJC41l2hgbIENwX46s5k55xe/yzkPPKSfBSW4XS46xO4GFMBaAvwKjRsUtUrC0/E98D4BvZZDwDrFWDSrMTIwzhCeSFm6d/I+P7Z2I6M7/pBFdzJwX3hcak/VgSEUul3sgat6xzlVGpF75ADqrvWEzEEuTCHuZzEn2WoMk0KaaF856HL1324LtCgsKzNx/9qmnIskXjJjC7WxO/p956p1+uZ1QsCjlKkMJch6WGPEl0P7KPgQCcSCAnK5LuTN8rUMqKIWk9e21k0l8l3cVlwX+Y160NL3zmyoJkcM11nDnZm85vsPBQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39850400004)(396003)(366004)(136003)(346002)(316002)(83380400001)(54906003)(110136005)(52536014)(9686003)(6506007)(53546011)(66476007)(7696005)(478600001)(55016002)(66446008)(64756008)(76116006)(26005)(66556008)(86362001)(66946007)(8936002)(71200400001)(2906002)(4326008)(122000001)(8676002)(33656002)(5660300002)(186003)(38100700002);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 6YhfUM2kUWcd34/sv02JtyDcAmRJ8KWRYxIpNBomLYqwYkMwuZc+bmg56uJVq+Hxfw5xOdLYWVv1uW7zETFLPjx+UIxHt685l1bcRZY2srENLe9Jq6cZ2OjLr7Xqw+OgL5HQUUM0FCJdXGg3Qf8zCo1Dnpuaj83jVcoSIixu6943P+t2i+JK+OzcDwA42FAVBQMIpHZr+87ilJeJJH+EYotdBMn/RY0SfkRSSNMhuDx5Q73m4ubtQlA6ruq9rJFDjjIzuEhF8I0OQIDIwTSCr7/JTkuSklnaGNFyPUWIeDqEkoF8uZZwPbmAQVBJVF3Fd1lzPyjuSaa8JUr1/WmJPCC9v0VTL13KWs/UWE0eMP78xmdpTfkMXTAFFNNnU+4CrDe27pX4lUeyleUGE38T0upH9XqJK2KimDguoyY68LZWo80bJHbivth1xA1IVfW+RWGsHNGt4E+E2LDTI7gKQV71SJ8zakfB+OTB30lBU/G5UirIILwF3PyVVxj7DeMbKEiJ6kJl+CPO1XTW4Ju/9JBHH2zXUH2Tf89Lz4Bv+gXKBdSJsGdRIANC9Rf/cdQcXOzdbF9g7m5Q3Y2w8wfGD8NvzmTYiyCl2xcnQh/ulu5MfJtGDYF9mBXfn7/WM3L1Mwaq0cxM6e1M3TZJd+RuXYaNl4iJifYnxAZCpLpsSPR79G6Ixp+BNO3oyHU6dLolksa4nx/U2RRBuzgh5uvgVS7K58WkEvlyuKnVhievBig=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2493
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	c4d2a849-028f-430a-510e-08d93f867239
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	phnXyqBPR7Q0wi0E0PeZxa2mXnHFjztrLkCnSFJI4jXObyttMBr7ykdDa2HMjDKWSH9ifhPwuvfNh/tHp39sGclabsGfhlbtzeSn27NKmtB8Fc+6GrGaXXLjiDaG/oB7nnNuEqS2gmGbSDD8iNV3wjF51UgM4TBYqtJGT5Zt+VE3QWpgVqAEzwXjZNo3oEVOw7Ff1xpjsYEqtoraHAli9iRKFk/TJPTTuFaXcEIpkxs7mnW+/s8WUFl+JYjctmXiah8XY2Q0GjnCbTp2qgmxDCvy6YbL+iqhbPmiHLPpKl60HGazuu4pvgCriOaMyH4MbBi8nYherpaXOf6PRlXVOg0mLvPIRukkyRVzvP44Ej+rYjcMs/AGxMBH0/iE2CdSxCqVIMblUJJObDnVi7mXg3jItjN/bhf2dNwt//keSjydmrr3CfJsOjxDd8+qnhGXe6bZxl4mrqoFFbKhiI7LlYEm0WilUIckDDddAbRfkF5DFZnnPvN9/G0hTOb5m0dqR5fPTQZ0QvrcoPlyDtOLmwzDsNOg4Hpy2B/qHk6oj3+noUlz9HKGwcucheFr+Vm5sZJx3OyleWD4qSp8dtteLuOrnDVFhn5XtqXvJjir4vcjA49OTVeK9dJQqN0umpaeHl//j+GsISGxArKwfq0P0Y+/XmfAv32eGZ5CUwxqytrYbxRDpwdcse5GUr9orN6bAFjfX4F+v74WfUJpU0ahPQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(39850400004)(136003)(346002)(36840700001)(46966006)(478600001)(7696005)(316002)(4326008)(47076005)(110136005)(81166007)(336012)(54906003)(83380400001)(70206006)(2906002)(70586007)(8936002)(8676002)(356005)(55016002)(5660300002)(36860700001)(9686003)(33656002)(26005)(82310400003)(186003)(86362001)(53546011)(52536014)(6506007)(82740400003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 07:28:21.3150
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 18dcb552-6dc6-438e-627c-08d93f867788
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT063.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5284

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4NCj4gU2VudDogVGh1cnNkYXksIEp1bHkgMSwgMjAyMSAy
OjEwIEFNDQo+IFRvOiBQZW5ueSBaaGVuZyA8UGVubnkuWmhlbmdAYXJtLmNvbT47IHhlbi1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gc3N0YWJlbGxpbmlAa2VybmVsLm9yZzsgamJldWxp
Y2hAc3VzZS5jb20NCj4gQ2M6IEJlcnRyYW5kIE1hcnF1aXMgPEJlcnRyYW5kLk1hcnF1aXNAYXJt
LmNvbT47IFdlaSBDaGVuDQo+IDxXZWkuQ2hlbkBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1BB
VENIIDQvOV0geGVuL2FybTogc3RhdGljIG1lbW9yeSBpbml0aWFsaXphdGlvbg0KPiANCj4gSGkg
UGVubnksDQo+IA0KPiBPbiAwNy8wNi8yMDIxIDAzOjQzLCBQZW5ueSBaaGVuZyB3cm90ZToNCj4g
PiBUaGlzIHBhdGNoIGludHJvZHVjZXMgc3RhdGljIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZHVy
aW5nIHN5c3RlbSBSQU0gYm9vdA0KPiB1cC4NCj4gDQo+IFRoZSB3b3JkICJSQU0iIGxvb2tzIHNw
dXJpb3VzLg0KPiANCg0KVGh4LiBJIGNoZWNrIHRoZSAic3B1cmlvdXMiIGluIGRpY3Rpb25hcnks
IGl0IG1lYW5zIGZha2U/IFNvIEkgd2lsbCBsZWF2ZSAiZHVyaW5nIHN5c3RlbSBib290IHVwIg0K
aGVyZS4NCg0KPiA+IE5ldyBmdW5jIGluaXRfc3RhdGljbWVtX3BhZ2VzIGlzIHJlc3BvbnNpYmxl
IGZvciBzdGF0aWMgbWVtb3J5DQo+IGluaXRpYWxpemF0aW9uLg0KPiANCj4gcy9OZXcgZnVuYy9U
aGUgbmV3IGZ1bmN0aW9uLw0KPg0KIA0KU3VyZS4gdGh4DQoNCj4gPiBIZWxwZXIgZnJlZV9zdGF0
aWNtZW1fcGFnZXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgZnJlZV9oZWFwX3BhZ2VzLCB0bw0KPiA+
IGZyZWUgbnJfbWZucyBwYWdlcyBvZiBzdGF0aWMgbWVtb3J5Lg0KPiA+DQo+ID4gVGhpcyBjb21t
aXQgZGVmaW5lcyBhIG5ldyBoZWxwZXIgZnJlZV9wYWdlIHRvIGV4dHJhY3QgY29tbW9uIGNvZGUN
Cj4gPiBiZXR3ZWVuIGZyZWVfaGVhcF9wYWdlcyBhbmQgZnJlZV9zdGF0aWNtZW1fcGFnZXMsIGxp
a2UgZm9sbG93aW5nIHRoZQ0KPiA+IHNhbWUgY2FjaGUvVExCIGNvaGVyZW5jeSBwb2xpY3kuDQo+
ID4NCj4gPiBGb3IgZWFjaCBwYWdlLCBmcmVlX3N0YXRpY21lbV9wYWdlcyBpbmNsdWRlcyB0aGUg
Zm9sbG93aW5nIGV4dHJhIHN0ZXBzDQo+ID4gdG8NCj4gPiBpbml0aWFsaXplOg0KPiA+IDEuIGNo
YW5nZSBwYWdlIHN0YXRlIGZyb20gaW51c2UgdG8gZnJlZSBzdGF0ZSBhbmQgZ3JhbnQgUEdDX3Jl
c2VydmVkLg0KPiANCj4gSSB0aGluayB5b3UgbWVhbiAic2V0IiByYXRoZXIgdGhhbiAiZ3JhbnQi
Lg0KPiANCg0KWWVhaC4gIEknbGwgY2hhbmdlIHRvIHNldCBoZXJlfg0KDQo+ID4gMi4gc2NydWIg
dGhlIHBhZ2UgaW4gbmVlZCBzeW5jaHJvbm91c2x5Lg0KPiANCj4gQ2FuIHlvdSBleHBsYWluIHdo
eSB0aGlzIGlzIG5lY2Vzc2FyeT8NCj4NCg0KU2luY2UgSSdtIGJvcnJvd2luZyB0aGUgbG9naWMg
aW4gZnJlZV9oZWFwX3BhZ2VzLCBJJ20gYWxzbyB0cnlpbmcgdG8gY292ZXIgYWxsIHRoZSBzY2Vu
YXJpb3MgaGVyZSBsaWtlIGl0IGRvZXMuDQpTbyBJIGFzc3VtZSB0aGF0IGZyZWVfc3RhdGljbWVt
X3BhZ2Ugd2lsbCBub3Qgb25seSBiZSB1c2VkIG9uIGluaXRpYWxpemF0aW9uLCBidXQgYWxzbyB3
aGVuIGRlc3Ryb3lpbmcvcmVib290aW5nIHRoZSBkb21haW4uDQpPbiB0aGVzZSBjYXNlcywgaXQg
aXMgbmVjZXNzYXJ5IHRvIHNjcnViIHRoZSBwYWdlLCBpZy4NCiANCj4gPg0KPiA+IFNpZ25lZC1v
ZmYtYnk6IFBlbm55IFpoZW5nIDxwZW5ueS56aGVuZ0Bhcm0uY29tPg0KPiA+IC0tLQ0KPiA+IGNo
YW5nZXMgdjI6DQo+ID4gLSByZW5hbWUgdG8gbnJfbWZucw0KPiA+IC0gZXh0cmFjdCBjb21tb24g
Y29kZSBmcm9tIGZyZWVfaGVhcF9wYWdlcyBhbmQgZnJlZV9zdGF0aWNtZW1fcGFnZXMNCj4gPiAt
IHJlbW92ZSBkZWFkIGNvZGVzIGluIG90aGVyIGFyY2hzLCBpbmNsdWRpbmcgbW92ZSBzb21lIHRv
DQo+ID4gYXJtLXNwZWNpZmljIGZpbGUsIGFuZCBwdXQgc29tZSB1bmRlciBDT05GSUdfQVJNDQo+
ID4gLSBtYXJrIGZyZWVfc3RhdGljbWVtX3BhZ2VzIF9faW5pdA0KPiA+IC0tLQ0KPiA+ICAgeGVu
L2FyY2gvYXJtL3NldHVwLmMgICAgfCAyNyArKysrKysrKysrKysrKw0KPiANCj4gSSB0aGluayBp
dCB3b3VsZCBiZSBiZXN0IHRvIHNwbGl0IHRoZSBhcm0gdXNlIGluIGEgc2VwYXJhdGUgcGF0Y2gu
DQoNClN1cmUsIEknbGwgbW92ZSB0aGVtIHRvIGFub3RoZXIgY29tbWl0Lg0KDQo+IA0KPiA+ICAg
eGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMgfCA3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKystLS0NCj4gLS0tLS0NCj4gPiAgIHhlbi9pbmNsdWRlL3hlbi9tbS5oICAgIHwgIDYgKysr
Kw0KPiA+ICAgMyBmaWxlcyBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMo
LSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vc2V0dXAuYyBiL3hlbi9hcmNo
L2FybS9zZXR1cC5jIGluZGV4DQo+ID4gMDBhYWQxYzE5NC4uZGFhZmVhMGFiYiAxMDA2NDQNCj4g
PiAtLS0gYS94ZW4vYXJjaC9hcm0vc2V0dXAuYw0KPiA+ICsrKyBiL3hlbi9hcmNoL2FybS9zZXR1
cC5jDQo+ID4gQEAgLTYxMSw2ICs2MTEsMzAgQEAgc3RhdGljIHZvaWQgX19pbml0IGluaXRfcGR4
KHZvaWQpDQo+ID4gICAgICAgfQ0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qIFN0YXRpYyBtZW1vcnkg
aW5pdGlhbGl6YXRpb24gKi8NCj4gPiArc3RhdGljIHZvaWQgX19pbml0IGluaXRfc3RhdGljbWVt
X3BhZ2VzKHZvaWQpIHsNCj4gPiArICAgIGludCBiYW5rOw0KPiA+ICsNCj4gPiArICAgIC8qDQo+
ID4gKyAgICAgKiBUT0RPOiBDb25zaWRlcmluZyBOVU1BLXN1cHBvcnQgc2NlbmFyaW8uDQo+ID4g
KyAgICAgKi8NCj4gPiArICAgIGZvciAoIGJhbmsgPSAwIDsgYmFuayA8IGJvb3RpbmZvLnN0YXRp
Y19tZW0ubnJfYmFua3M7IGJhbmsrKyApDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgICAgcGFkZHJf
dCBiYW5rX3N0YXJ0ID0gYm9vdGluZm8uc3RhdGljX21lbS5iYW5rW2JhbmtdLnN0YXJ0Ow0KPiA+
ICsgICAgICAgIHBhZGRyX3QgYmFua19zaXplID0gYm9vdGluZm8uc3RhdGljX21lbS5iYW5rW2Jh
bmtdLnNpemU7DQo+ID4gKyAgICAgICAgcGFkZHJfdCBiYW5rX2VuZCA9IGJhbmtfc3RhcnQgKyBi
YW5rX3NpemU7DQo+ID4gKw0KPiA+ICsgICAgICAgIGJhbmtfc3RhcnQgPSByb3VuZF9wZ3VwKGJh
bmtfc3RhcnQpOw0KPiA+ICsgICAgICAgIGJhbmtfZW5kID0gcm91bmRfcGdkb3duKGJhbmtfZW5k
KTsNCj4gPiArICAgICAgICBpZiAoIGJhbmtfZW5kIDw9IGJhbmtfc3RhcnQgKQ0KPiA+ICsgICAg
ICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgICAgIGZyZWVfc3RhdGljbWVtX3BhZ2Vz
KG1hZGRyX3RvX3BhZ2UoYmFua19zdGFydCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoYmFua19lbmQgLSBiYW5rX3N0YXJ0KSA+PiBQQUdFX1NISUZULCBmYWxzZSk7DQo+ID4g
KyAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gICAjaWZkZWYgQ09ORklHX0FSTV8zMg0KPiA+ICAg
c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21tKHZvaWQpDQo+ID4gICB7DQo+ID4gQEAgLTg3Miw2
ICs4OTYsOSBAQCB2b2lkIF9faW5pdCBzdGFydF94ZW4odW5zaWduZWQgbG9uZw0KPiBib290X3Bo
eXNfb2Zmc2V0LA0KPiA+ICAgICAgIGNtZGxpbmVfcGFyc2UoY21kbGluZSk7DQo+ID4NCj4gPiAg
ICAgICBzZXR1cF9tbSgpOw0KPiA+ICsgICAgLyogSWYgZXhpc3RzLCBTdGF0aWMgTWVtb3J5IElu
aXRpYWxpemF0aW9uLiAqLw0KPiA+ICsgICAgaWYgKCBib290aW5mby5zdGF0aWNfbWVtLm5yX2Jh
bmtzID4gMCApDQo+IA0KPiBUaGlzIGNoZWNrIHNlZW1zIGEgcG9pbnRsZXNzIGJlY2F1c2UgaW5p
dF9zdGF0aWNtZW1fcGFnZXMoKSBpcyBhbHJlYWR5IGFibGUNCj4gdG8gY29wZSB3aXRoIG5yX2Jh
bmtzID09IDAuDQo+IA0KPiA+ICsgICAgICAgIGluaXRfc3RhdGljbWVtX3BhZ2VzKCk7DQo+IEkg
d291bGQgcHJlZmVyIGlmIHRoaXMgaXMgZm9sZGVkIGluIHNldHVwX21tKCkuDQo+DQoNClN1cmUu
DQogDQo+ID4NCj4gPiAgICAgICAvKiBQYXJzZSB0aGUgQUNQSSB0YWJsZXMgZm9yIHBvc3NpYmxl
IGJvb3QtdGltZSBjb25maWd1cmF0aW9uICovDQo+ID4gICAgICAgYWNwaV9ib290X3RhYmxlX2lu
aXQoKTsNCj4gPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMgYi94ZW4vY29t
bW9uL3BhZ2VfYWxsb2MuYyBpbmRleA0KPiA+IDk1OGJhMGNkOTIuLjhjMDAyNjJjMDQgMTAwNjQ0
DQo+ID4gLS0tIGEveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMNCj4gPiArKysgYi94ZW4vY29tbW9u
L3BhZ2VfYWxsb2MuYw0KPiA+IEBAIC0xMzc2LDYgKzEzNzYsMzcgQEAgYm9vbCBzY3J1Yl9mcmVl
X3BhZ2VzKHZvaWQpDQo+ID4gICAgICAgcmV0dXJuIG5vZGVfdG9fc2NydWIoZmFsc2UpICE9IE5V
TUFfTk9fTk9ERTsNCj4gPiAgIH0NCj4gPg0KPiA+ICtzdGF0aWMgdm9pZCBmcmVlX3BhZ2Uoc3Ry
dWN0IHBhZ2VfaW5mbyAqcGcsIGJvb2wgbmVlZF9zY3J1Yikgew0KPiA+ICsgICAgbWZuX3QgbWZu
ID0gcGFnZV90b19tZm4ocGcpOw0KPiA+ICsNCj4gPiArICAgIC8qIElmIGEgcGFnZSBoYXMgbm8g
b3duZXIgaXQgd2lsbCBuZWVkIG5vIHNhZmV0eSBUTEIgZmx1c2guICovDQo+ID4gKyAgICBwZy0+
dS5mcmVlLm5lZWRfdGxiZmx1c2ggPSAocGFnZV9nZXRfb3duZXIocGcpICE9IE5VTEwpOw0KPiA+
ICsgICAgaWYgKCBwZy0+dS5mcmVlLm5lZWRfdGxiZmx1c2ggKQ0KPiA+ICsgICAgICAgIHBhZ2Vf
c2V0X3RsYmZsdXNoX3RpbWVzdGFtcChwZyk7DQo+ID4gKw0KPiA+ICsgICAgLyogVGhpcyBwYWdl
IGlzIG5vdCBhIGd1ZXN0IGZyYW1lIGFueSBtb3JlLiAqLw0KPiA+ICsgICAgcGFnZV9zZXRfb3du
ZXIocGcsIE5VTEwpOyAvKiBzZXRfZ3Bmbl9mcm9tX21mbiBzbm9vcHMgcGcgb3duZXIgKi8NCj4g
PiArICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbl94KG1mbiksIElOVkFMSURfTTJQX0VOVFJZKTsN
Cj4gPiArDQo+ID4gKyNpZmRlZiBDT05GSUdfQVJNDQo+IA0KPiBUbyBlY2hvIHdoYXQgSmFuIGFs
cmVhZHkgd3JvdGUsIEkgYW0gbm90IGluIGZhdm9yIG9mIGFkZGluZyBuZXcgI2lmZGVmDQo+IENP
TkZJR188YXJjaD4gaW4gY29tbW9uIGNvZGUuIEkgd291bGQgZXhwZWN0IHRoZSBsb2dpYyBmb3Ig
c3RhdGljIG1lbW9yeQ0KPiB0byBiZSB0aGUgc2FtZSBmb3IgZWFjaCBhcmNoLCBzbyB0aGlzIHNo
b3VsZCBiZSBwcm90ZWN0ZWQgd2l0aCBhIGdlbmVyaWMNCj4gS2NvbmZpZy4NCj4gDQo+ID4gKyAg
ICBpZiAoIHBnLT5jb3VudF9pbmZvICYgUEdDX3Jlc2VydmVkICkNCj4gPiArICAgIHsNCj4gPiAr
ICAgICAgICAvKiBUT0RPOiBhc3luY2hyb25vdXMgc2NydWJiaW5nLiAqLw0KPiA+ICsgICAgICAg
IGlmICggbmVlZF9zY3J1YiApDQo+ID4gKyAgICAgICAgICAgIHNjcnViX29uZV9wYWdlKHBnKTsN
Cj4gPiArICAgICAgICByZXR1cm47DQo+ID4gKyAgICB9DQo+ID4gKyNlbmRpZg0KPiA+ICsgICAg
aWYgKCBuZWVkX3NjcnViICkNCj4gPiArICAgIHsNCj4gPiArICAgICAgICBwZy0+Y291bnRfaW5m
byB8PSBQR0NfbmVlZF9zY3J1YjsNCj4gPiArICAgICAgICBwb2lzb25fb25lX3BhZ2UocGcpOw0K
PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVybjsNCj4gPiArfQ0KPiA+ICsNCj4gPiAg
IC8qIEZyZWUgMl5Ab3JkZXIgc2V0IG9mIHBhZ2VzLiAqLw0KPiA+ICAgc3RhdGljIHZvaWQgZnJl
ZV9oZWFwX3BhZ2VzKA0KPiA+ICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnLCB1bnNpZ25lZCBp
bnQgb3JkZXIsIGJvb2wgbmVlZF9zY3J1YikgQEANCj4gPiAtMTQyNSwyMCArMTQ1Niw3IEBAIHN0
YXRpYyB2b2lkIGZyZWVfaGVhcF9wYWdlcygNCj4gPiAgICAgICAgICAgICAgIEJVRygpOw0KPiA+
ICAgICAgICAgICB9DQo+ID4NCj4gPiAtICAgICAgICAvKiBJZiBhIHBhZ2UgaGFzIG5vIG93bmVy
IGl0IHdpbGwgbmVlZCBubyBzYWZldHkgVExCIGZsdXNoLiAqLw0KPiA+IC0gICAgICAgIHBnW2ld
LnUuZnJlZS5uZWVkX3RsYmZsdXNoID0gKHBhZ2VfZ2V0X293bmVyKCZwZ1tpXSkgIT0gTlVMTCk7
DQo+ID4gLSAgICAgICAgaWYgKCBwZ1tpXS51LmZyZWUubmVlZF90bGJmbHVzaCApDQo+ID4gLSAg
ICAgICAgICAgIHBhZ2Vfc2V0X3RsYmZsdXNoX3RpbWVzdGFtcCgmcGdbaV0pOw0KPiA+IC0NCj4g
PiAtICAgICAgICAvKiBUaGlzIHBhZ2UgaXMgbm90IGEgZ3Vlc3QgZnJhbWUgYW55IG1vcmUuICov
DQo+ID4gLSAgICAgICAgcGFnZV9zZXRfb3duZXIoJnBnW2ldLCBOVUxMKTsgLyogc2V0X2dwZm5f
ZnJvbV9tZm4gc25vb3BzIHBnDQo+IG93bmVyICovDQo+ID4gLSAgICAgICAgc2V0X2dwZm5fZnJv
bV9tZm4obWZuX3gobWZuKSArIGksIElOVkFMSURfTTJQX0VOVFJZKTsNCj4gPiAtDQo+ID4gLSAg
ICAgICAgaWYgKCBuZWVkX3NjcnViICkNCj4gPiAtICAgICAgICB7DQo+ID4gLSAgICAgICAgICAg
IHBnW2ldLmNvdW50X2luZm8gfD0gUEdDX25lZWRfc2NydWI7DQo+ID4gLSAgICAgICAgICAgIHBv
aXNvbl9vbmVfcGFnZSgmcGdbaV0pOw0KPiA+IC0gICAgICAgIH0NCj4gPiArICAgICAgICBmcmVl
X3BhZ2UoJnBnW2ldLCBuZWVkX3NjcnViKTsNCj4gPiAgICAgICB9DQo+ID4NCj4gPiAgICAgICBh
dmFpbFtub2RlXVt6b25lXSArPSAxIDw8IG9yZGVyOyBAQCAtMTUxMiw2ICsxNTMwLDM4IEBAIHN0
YXRpYw0KPiA+IHZvaWQgZnJlZV9oZWFwX3BhZ2VzKA0KPiA+ICAgICAgIHNwaW5fdW5sb2NrKCZo
ZWFwX2xvY2spOw0KPiA+ICAgfQ0KPiA+DQo+ID4gKyNpZmRlZiBDT05GSUdfU1RBVElDX0FMTE9D
QVRJT04NCj4gPiArLyogRXF1aXZhbGVudCBvZiBmcmVlX2hlYXBfcGFnZXMgdG8gZnJlZSBucl9t
Zm5zIHBhZ2VzIG9mIHN0YXRpYw0KPiA+ICttZW1vcnkuICovIHZvaWQgX19pbml0IGZyZWVfc3Rh
dGljbWVtX3BhZ2VzKHN0cnVjdCBwYWdlX2luZm8gKnBnLA0KPiB1bnNpZ25lZCBsb25nIG5yX21m
bnMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9zY3J1
Yikgew0KPiA+ICsgICAgbWZuX3QgbWZuID0gcGFnZV90b19tZm4ocGcpOw0KPiA+ICsgICAgdW5z
aWduZWQgbG9uZyBpOw0KPiA+ICsNCj4gPiArICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfbWZuczsg
aSsrICkNCj4gPiArICAgIHsNCj4gPiArICAgICAgICBzd2l0Y2ggKCBwZ1tpXS5jb3VudF9pbmZv
ICYgUEdDX3N0YXRlICkNCj4gPiArICAgICAgICB7DQo+ID4gKyAgICAgICAgY2FzZSBQR0Nfc3Rh
dGVfaW51c2U6DQo+ID4gKyAgICAgICAgICAgIEJVR19PTihwZ1tpXS5jb3VudF9pbmZvICYgUEdD
X2Jyb2tlbik7DQo+ID4gKyAgICAgICAgICAgIC8qIE1hcmsgaXQgZnJlZSBhbmQgcmVzZXJ2ZWQu
ICovDQo+ID4gKyAgICAgICAgICAgIHBnW2ldLmNvdW50X2luZm8gPSBQR0Nfc3RhdGVfZnJlZSB8
IFBHQ19yZXNlcnZlZDsNCj4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAg
ICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSDQo+ID4gKyAg
ICAgICAgICAgICAgICAgICAiUGFnZSBzdGF0ZSBzaGFsbCBiZSBvbmx5IGluIFBHQ19zdGF0ZV9p
bnVzZS4gIg0KPiA+ICsgICAgICAgICAgICAgICAgICAgInBnWyVsdV0gTUZOICUiUFJJX21mbiIg
Y291bnRfaW5mbz0lI2x4DQo+IHRsYmZsdXNoX3RpbWVzdGFtcD0lI3guXG4iLA0KPiA+ICsgICAg
ICAgICAgICAgICAgICAgaSwgbWZuX3gobWZuKSArIGksDQo+ID4gKyAgICAgICAgICAgICAgICAg
ICBwZ1tpXS5jb3VudF9pbmZvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgcGdbaV0udGxiZmx1
c2hfdGltZXN0YW1wKTsNCj4gPiArICAgICAgICAgICAgQlVHKCk7DQo+ID4gKyAgICAgICAgfQ0K
PiA+ICsNCj4gPiArICAgICAgICBmcmVlX3BhZ2UoJnBnW2ldLCBuZWVkX3NjcnViKTsNCj4gPiAr
ICAgIH0NCj4gPiArfQ0KPiA+ICsjZW5kaWYNCj4gPg0KPiA+ICAgLyoNCj4gPiAgICAqIEZvbGxv
d2luZyBydWxlcyBhcHBsaWVkIGZvciBwYWdlIG9mZmxpbmU6DQo+ID4gZGlmZiAtLWdpdCBhL3hl
bi9pbmNsdWRlL3hlbi9tbS5oIGIveGVuL2luY2x1ZGUveGVuL21tLmggaW5kZXgNCj4gPiA2Njdm
OWRhYzgzLi5kZjI1ZTU1OTY2IDEwMDY0NA0KPiA+IC0tLSBhL3hlbi9pbmNsdWRlL3hlbi9tbS5o
DQo+ID4gKysrIGIveGVuL2luY2x1ZGUveGVuL21tLmgNCj4gPiBAQCAtODUsNiArODUsMTIgQEAg
Ym9vbCBzY3J1Yl9mcmVlX3BhZ2VzKHZvaWQpOw0KPiA+ICAgfSB3aGlsZSAoIGZhbHNlICkNCj4g
PiAgICNkZWZpbmUgRlJFRV9YRU5IRUFQX1BBR0UocCkgRlJFRV9YRU5IRUFQX1BBR0VTKHAsIDAp
DQo+ID4NCj4gPiArI2lmZGVmIENPTkZJR19BUk0NCj4gPiArLyogU3RhdGljIEFsbG9jYXRpb24g
Ki8NCj4gPiArdm9pZCBmcmVlX3N0YXRpY21lbV9wYWdlcyhzdHJ1Y3QgcGFnZV9pbmZvICpwZywg
dW5zaWduZWQgbG9uZyBucl9tZm5zLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbmVlZF9zY3J1Yik7ICNlbmRpZg0KPiA+ICsNCj4gPiAgIC8qIE1hcCBtYWNoaW5lIHBhZ2Ug
cmFuZ2UgaW4gWGVuIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gKi8NCj4gPiAgIGludCBtYXBfcGFn
ZXNfdG9feGVuKA0KPiA+ICAgICAgIHVuc2lnbmVkIGxvbmcgdmlydCwNCj4gPg0KPiANCj4gLS0N
Cj4gSnVsaWVuIEdyYWxsDQoNCg0KQ2hlZXJzDQpQZW5ueSBaaGVuZw0K


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:30:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:30:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149809.277084 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0J3L-0001VC-Aa; Mon, 05 Jul 2021 07:30:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149809.277084; Mon, 05 Jul 2021 07:30:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0J3L-0001Ue-5A; Mon, 05 Jul 2021 07:30:03 +0000
Received: by outflank-mailman (input) for mailman id 149809;
 Mon, 05 Jul 2021 07:30:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+BmT=L5=chromium.org=tientzu@srs-us1.protection.inumbo.net>)
 id 1m0J3J-0001FO-Jv
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:30:01 +0000
Received: from mail-pf1-x429.google.com (unknown [2607:f8b0:4864:20::429])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 702f6c54-ffd1-49b2-b710-ae2a79d9f25a;
 Mon, 05 Jul 2021 07:30:00 +0000 (UTC)
Received: by mail-pf1-x429.google.com with SMTP id w22so12309991pff.5
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 00:30:00 -0700 (PDT)
Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com.
 [209.85.215.171])
 by smtp.gmail.com with ESMTPSA id s15sm11879290pfu.97.2021.07.05.00.29.57
 for <xen-devel@lists.xenproject.org>
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 05 Jul 2021 00:29:58 -0700 (PDT)
Received: by mail-pg1-f171.google.com with SMTP id g22so17490857pgl.7
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 00:29:57 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 702f6c54-ffd1-49b2-b710-ae2a79d9f25a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=chromium.org; s=google;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=Z8aOTxpCpkipy5n3d0JHyfRjSSgUP3aCWoPMsdbSOV4=;
        b=MJjJv9vXGkq68MzcWqJ8Lqqow7NxZ75tHGPZbYF1jhN9Bhg/MWiZ0zY75eGHeJNh5Z
         PszBTQni1VZca3yQMBDVtTmKafxxH3GNCEriEJqlKouIDe5e4/R1nL0etnQNDybC+N/V
         LRgX2z3bSUPhZ4K1Wms/UIusjY+z2apf3AHmo=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=Z8aOTxpCpkipy5n3d0JHyfRjSSgUP3aCWoPMsdbSOV4=;
        b=UH1Z9k+wPbL0CiezMW61kN4b656e8gZT5JinId7SP2BS9TwCpOCTrCInQhj/ZPVPcc
         B5Lczi7TIQb1U4WdoXp4cIVkCC73XQ4iX2sBHlIlDzYqXsq1yEUuWRabP2YXOh19Wss/
         GZlIH/gKLwB2Ba5JG/k2X608WMwUiOioFBLnI4vMDunkJVI7qACQttT4CTsTi1o6OS3u
         DFRMoR+XXfBveQXvlxHaYimkKcnOVlIgBYObhDWvHAL4w+qFxiW5+nJjWh8B6Knb2Dbv
         faXq54EFegFWy9O4nPC/6WHr7hWRja1IGtzcKHU1AHHlojwcPKBs4W+xHfm3Bkn5xRtq
         XRAg==
X-Gm-Message-State: AOAM533oBXQtWEF+Rt0DV0KnbUO/CvmmbR9YVAZdYrzPK28jF7GmT5/4
	FydYLSFKGJ5JnfuyiLRscUek6rs3apQYvA==
X-Google-Smtp-Source: ABdhPJx2yZMmjHVybKWROgzYM78vdzP/2HMB58SzgCyEqZx6AXYDtNzhi4UZl0UnNU9Y2NzsMU434Q==
X-Received: by 2002:a65:6a46:: with SMTP id o6mr13956099pgu.305.1625470199045;
        Mon, 05 Jul 2021 00:29:59 -0700 (PDT)
X-Received: by 2002:a92:d10:: with SMTP id 16mr9764177iln.189.1625470185557;
 Mon, 05 Jul 2021 00:29:45 -0700 (PDT)
MIME-Version: 1.0
References: <20210624155526.2775863-1-tientzu@chromium.org>
 <20210624155526.2775863-7-tientzu@chromium.org> <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck> <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck> <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck> <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
In-Reply-To: <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
From: Claire Chang <tientzu@chromium.org>
Date: Mon, 5 Jul 2021 15:29:34 +0800
X-Gmail-Original-Message-ID: <CALiNf2_ZJq4MoxOGe_m_KFv5xYw8t9SdscTFUwSoLBy5rEuxwQ@mail.gmail.com>
Message-ID: <CALiNf2_ZJq4MoxOGe_m_KFv5xYw8t9SdscTFUwSoLBy5rEuxwQ@mail.gmail.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
To: Nathan Chancellor <nathan@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>, Will Deacon <will@kernel.org>, 
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au, Joerg Roedel <joro@8bytes.org>, 
	Frank Rowand <frowand.list@gmail.com>, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, 
	boris.ostrovsky@oracle.com, jgross@suse.com, Christoph Hellwig <hch@lst.de>, 
	Marek Szyprowski <m.szyprowski@samsung.com>, benh@kernel.crashing.org, paulus@samba.org, 
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>, 
	Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com, xypron.glpk@gmx.de, 
	Thierry Reding <treding@nvidia.com>, mingo@kernel.org, bauerman@linux.ibm.com, 
	peterz@infradead.org, Greg KH <gregkh@linuxfoundation.org>, 
	Saravana Kannan <saravanak@google.com>, "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>, 
	heikki.krogerus@linux.intel.com, 
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Randy Dunlap <rdunlap@infradead.org>, 
	Dan Williams <dan.j.williams@intel.com>, Bartosz Golaszewski <bgolaszewski@baylibre.com>, 
	linux-devicetree <devicetree@vger.kernel.org>, lkml <linux-kernel@vger.kernel.org>, 
	linuxppc-dev@lists.ozlabs.org, xen-devel@lists.xenproject.org, 
	Nicolas Boichat <drinkcat@chromium.org>, Jim Quinlan <james.quinlan@broadcom.com>, 
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com, 
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk, 
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie, dri-devel@lists.freedesktop.org, 
	intel-gfx@lists.freedesktop.org, jani.nikula@linux.intel.com, 
	Jianxiong Gao <jxgao@google.com>, joonas.lahtinen@linux.intel.com, 
	linux-pci@vger.kernel.org, maarten.lankhorst@linux.intel.com, 
	matthew.auld@intel.com, rodrigo.vivi@intel.com, 
	thomas.hellstrom@linux.intel.com, Tom Lendacky <thomas.lendacky@amd.com>, 
	Qian Cai <quic_qiancai@quicinc.com>
Content-Type: text/plain; charset="UTF-8"

On Sat, Jul 3, 2021 at 1:55 PM Nathan Chancellor <nathan@kernel.org> wrote:
>
> Hi Will and Robin,
>
> On Fri, Jul 02, 2021 at 04:13:50PM +0100, Robin Murphy wrote:
> > On 2021-07-02 14:58, Will Deacon wrote:
> > > Hi Nathan,
> > >
> > > On Thu, Jul 01, 2021 at 12:52:20AM -0700, Nathan Chancellor wrote:
> > > > On 7/1/2021 12:40 AM, Will Deacon wrote:
> > > > > On Wed, Jun 30, 2021 at 08:56:51AM -0700, Nathan Chancellor wrote:
> > > > > > On Wed, Jun 30, 2021 at 12:43:48PM +0100, Will Deacon wrote:
> > > > > > > On Wed, Jun 30, 2021 at 05:17:27PM +0800, Claire Chang wrote:
> > > > > > > > `BUG: unable to handle page fault for address: 00000000003a8290` and
> > > > > > > > the fact it crashed at `_raw_spin_lock_irqsave` look like the memory
> > > > > > > > (maybe dev->dma_io_tlb_mem) was corrupted?
> > > > > > > > The dev->dma_io_tlb_mem should be set here
> > > > > > > > (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/pci/probe.c#n2528)
> > > > > > > > through device_initialize.
> > > > > > >
> > > > > > > I'm less sure about this. 'dma_io_tlb_mem' should be pointing at
> > > > > > > 'io_tlb_default_mem', which is a page-aligned allocation from memblock.
> > > > > > > The spinlock is at offset 0x24 in that structure, and looking at the
> > > > > > > register dump from the crash:
> > > > > > >
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: RSP: 0018:ffffadb4013db9e8 EFLAGS: 00010006
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: RAX: 00000000003a8290 RBX: 0000000000000000 RCX: ffff8900572ad580
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: RDX: ffff89005653f024 RSI: 00000000000c0000 RDI: 0000000000001d17
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: RBP: 000000000a20d000 R08: 00000000000c0000 R09: 0000000000000000
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: R10: 000000000a20d000 R11: ffff89005653f000 R12: 0000000000000212
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: R13: 0000000000001000 R14: 0000000000000002 R15: 0000000000200000
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: FS:  00007f1f8898ea40(0000) GS:ffff890057280000(0000) knlGS:0000000000000000
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: CR2: 00000000003a8290 CR3: 00000001020d0000 CR4: 0000000000350ee0
> > > > > > > Jun 29 18:28:42 hp-4300G kernel: Call Trace:
> > > > > > > Jun 29 18:28:42 hp-4300G kernel:  _raw_spin_lock_irqsave+0x39/0x50
> > > > > > > Jun 29 18:28:42 hp-4300G kernel:  swiotlb_tbl_map_single+0x12b/0x4c0
> > > > > > >
> > > > > > > Then that correlates with R11 holding the 'dma_io_tlb_mem' pointer and
> > > > > > > RDX pointing at the spinlock. Yet RAX is holding junk :/
> > > > > > >
> > > > > > > I agree that enabling KASAN would be a good idea, but I also think we
> > > > > > > probably need to get some more information out of swiotlb_tbl_map_single()
> > > > > > > to see see what exactly is going wrong in there.
> > > > > >
> > > > > > I can certainly enable KASAN and if there is any debug print I can add
> > > > > > or dump anything, let me know!
> > > > >
> > > > > I bit the bullet and took v5.13 with swiotlb/for-linus-5.14 merged in, built
> > > > > x86 defconfig and ran it on my laptop. However, it seems to work fine!
> > > > >
> > > > > Please can you share your .config?
> > > >
> > > > Sure thing, it is attached. It is just Arch Linux's config run through
> > > > olddefconfig. The original is below in case you need to diff it.
> > > >
> > > > https://raw.githubusercontent.com/archlinux/svntogit-packages/9045405dc835527164f3034b3ceb9a67c7a53cd4/trunk/config
> > > >
> > > > If there is anything more that I can provide, please let me know.
> > >
> > > I eventually got this booting (for some reason it was causing LD to SEGV
> > > trying to link it for a while...) and sadly it works fine on my laptop. Hmm.
>
> Seems like it might be something specific to the amdgpu module?
>
> > > Did you manage to try again with KASAN?
>
> Yes, it took a few times to reproduce the issue but I did manage to get
> a dmesg, please find it attached. I build from commit 7d31f1c65cc9 ("swiotlb:
> fix implicit debugfs declarations") in Konrad's tree.

Looking at the logs, the use-after-free bug looked somehow relevant
(and it's nvme again. Qian's crash is about nvme too):

[    2.468288] BUG: KASAN: use-after-free in __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.468288] Read of size 8 at addr ffff8881d7830000 by task swapper/0/0

[    2.468288] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.12.0-rc3-debug #1
[    2.468288] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[    2.468288] Call Trace:
[    2.468288]  <IRQ>
[    2.479433]  dump_stack+0x9c/0xcf
[    2.479433]  print_address_description.constprop.0+0x18/0x130
[    2.479433]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.479433]  kasan_report.cold+0x7f/0x111
[    2.479433]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.479433]  __iommu_dma_unmap_swiotlb+0x64/0xb0
[    2.479433]  nvme_pci_complete_rq+0x73/0x130
[    2.479433]  blk_complete_reqs+0x6f/0x80
[    2.479433]  __do_softirq+0xfc/0x3be
[    2.479433]  irq_exit_rcu+0xce/0x120
[    2.479433]  common_interrupt+0x80/0xa0
[    2.479433]  </IRQ>
[    2.479433]  asm_common_interrupt+0x1e/0x40
[    2.479433] RIP: 0010:cpuidle_enter_state+0xf9/0x590

I wonder if this ended up unmapping something wrong and messing up the
dev->dma_io_tlb_mem (i.e. io_tlb_default_mem)?

Could you try this patch on top of 7d31f1c65cc9? This patch helps
check if we try to unmap the wrong address.

```
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index b7f76bca89bf..5ac08d50a394 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -613,6 +613,21 @@ void swiotlb_tbl_unmap_single(struct device *dev,
phys_addr_t tlb_addr,
                              size_t mapping_size, enum dma_data_direction dir,
                              unsigned long attrs)
 {
+       struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+       unsigned int offset = swiotlb_align_offset(dev, tlb_addr);
+       int index;
+
+       if (!is_swiotlb_buffer(dev, tlb_addr - offset)) {
+               dev_err(dev, "%s: attempt to unmap invalid address
(0x%llx, offset=%u)\n", __func__, tlb_addr, offset);
+               return;
+       }
+
+       index = (tlb_addr - offset - mem->start) >> IO_TLB_SHIFT;
+       if (mem->slots[index].orig_addr == INVALID_PHYS_ADDR) {
+               dev_err(dev, "%s: memory is not mapped before (0x%llx,
offset=%u)\n", __func__, tlb_addr, offset);
+               return;
+       }
+
        /*
         * First, sync the memory before unmapping the entry
         */
```
It might be useful to have CONFIG_SLUB_DEBUG=y, CONFIG_SLUB_DEBUG_ON=y
and line numbers (scripts/decode_stacktrace.sh) too.

Thank you so much for helping!

>
> > > It might also be worth taking the IOMMU out of the equation, since that
> > > interfaces differently with SWIOTLB and I couldn't figure out the code path
> > > from the log you provided. What happens if you boot with "amd_iommu=off
> > > swiotlb=force"?
> >
> > Oh, now there's a thing... the chat from the IOMMU API in the boot log
> > implies that the IOMMU *should* be in the picture - we see that default
> > domains are IOMMU_DOMAIN_DMA default and the GPU 0000:0c:00.0 was added to a
> > group. That means dev->dma_ops should be set and DMA API calls should be
> > going through iommu-dma, yet the callstack in the crash says we've gone
> > straight from dma_map_page_attrs() to swiotlb_map(), implying the inline
> > dma_direct_map_page() path.
> >
> > If dev->dma_ops didn't look right in the first place, it's perhaps less
> > surprising that dev->dma_io_tlb_mem might be wild as well. It doesn't seem
> > plausible that we should have a race between initialising the device and
> > probing its driver, so maybe the whole dev pointer is getting trampled
> > earlier in the callchain (or is fundamentally wrong to begin with, but from
> > a quick skim of the amdgpu code it did look like adev->dev and adev->pdev
> > are appropriately set early on by amdgpu_pci_probe()).
> >
> > > (although word of warning here: i915 dies horribly on my laptop if I pass
> > > swiotlb=force, even with the distro 5.10 kernel)
> >
> > FWIW I'd imagine you probably need to massively increase the SWIOTLB buffer
> > size to have hope of that working.
>
> Is it worth trying this still then?
>
> Cheers,
> Nathan


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:35:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:35:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149816.277095 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0J8n-0002av-Uu; Mon, 05 Jul 2021 07:35:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149816.277095; Mon, 05 Jul 2021 07:35:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0J8n-0002ao-QF; Mon, 05 Jul 2021 07:35:41 +0000
Received: by outflank-mailman (input) for mailman id 149816;
 Mon, 05 Jul 2021 07:35:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0J8m-0002ai-AT
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:35:40 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.217])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 98152248-dd63-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 07:35:39 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx657ZWKQR
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 09:35:32 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 98152248-dd63-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625470532;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=iwAZHz+bN1CxIaMVu8XWz95smJ4SdKtO2YuzCZDyDc0=;
    b=JRbSzXG4HwjR5Ey1z38rVJaZiZMc0Rcklf6cr/BcvNqk1Rv7v96MWvyFvJ9As6T5AT
    Vim1kUjv7P7DW6eUVoAhR14zCfyhLGYHVejdCvwiCflKE09RkbS6LyYspS0mrWlblZ5X
    QfVbV7YGprdQ4m+M8qFsAxZcfgVPhkTOmqg5uA5WeKdHH4s+QEtS1/AKtDGANzg9g4pz
    6kNCR/GqlXYZIWIG2kUUtDYj0oErkeb/TMcfNRxiwltYScXnZHoj3a27OR7t6nueE6Ut
    Ct/PAb57hx24/s2jFKjR1nOf1raRISodq6fmueuyrETnZ+NT6TYASSrRTfCNyyutlXkN
    lXaQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 09:35:14 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Jan Beulich
 <JBeulich@suse.com>, Roger Pau =?UTF-8?B?TW9ubsOp?= <roger.pau@citrix.com>,
 Wei Liu <wl@xen.org>, Ian Jackson <iwj@xenproject.org>
Subject: Re: [PATCH] tools/libxenguest: Fix max_extd_leaf calculation for
 legacy restore
Message-ID: <20210705093514.45be9be8.olaf@aepfle.de>
In-Reply-To: <20210702190334.31271-1-andrew.cooper3@citrix.com>
References: <20210702190334.31271-1-andrew.cooper3@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/JbMqPY3W6G1h2t=4_+wlXLO";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/JbMqPY3W6G1h2t=4_+wlXLO
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 20:03:34 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Fixes: 34990446ca91 ("libxl: don't ignore the return value from xc_cpuid_=
apply_policy")

I think it fixes 111c8c33a8a18588f3da3c5dbb7f5c63ddb98ce5 ("x86/cpuid: do n=
ot expand max leaves on restore"), 34990446ca91 just revealed the bug?

Either way, this new variant is what I had tested last week. But with a tra=
iling "u" for the constant. This detail may not make a difference in practi=
ce.

Olaf

--Sig_/JbMqPY3W6G1h2t=4_+wlXLO
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDitjIACgkQ86SN7mm1
DoAnjBAAiRZuQDEjjVhMLjPjG3ICG49Zl+hTzwfvwXHmJW54vN+/LQJjoIcNVrhB
0cS1ZPwZ43fbB8aR5/3m5fcNfRAnDcCGF3obEilhubYuQ7TLVGEpC0Wb/0kYkvsF
uB3HrWlUYWFlq0+FUYtl99rHgahcAKx+nA9C2Ak9clm8eTwkLKRpc42KE6SqZ467
nc93wXGn+YJJfBPLM6L8jMF9jW7e8Ia8WZIgCJlQNftQ87ofDHMLRK1By/8555Ns
ZI2qJ/eAd4WFnjFdLlw/LRgNZgNlYcKSPuYnyuezTYn0DzP3yLdl013GeCmry64N
rMwepRTrNVPNkNTAc4Hwi63X6mwmBud+tTK+Z3uHhT5cTHDwk61Cs1rqRbaAZ2AV
dJsa01rg+ptYPfp3+Xu4sQG2j3KfAhU99DzkrpNi7xP2Yrkxt3vylAbVzi0VSkEQ
z3h4oXqBLgti5lz/OOZBYUeEv08VZ+klmuj7pLRUb3nuEkgasOeFYP9ozjYF+cL4
JjFshN6aYcKiaG8DaUvWtqPt5VSgrvP5+f88TzuzG0I0v+7yML6h6j9oAmdeIwf3
2H8/jieUgeRksq0oywpI1gRCl6k/eMtWGwHxPstegrWw4RrnYWTVH+LvQ3da/JGa
wQhTdn2Ovnil36HgGuQ0VTpeKgVqNjTDOBg+0MSturiRty7lRVE=
=qeNW
-----END PGP SIGNATURE-----

--Sig_/JbMqPY3W6G1h2t=4_+wlXLO--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:48:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:48:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149822.277105 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JLH-000451-1v; Mon, 05 Jul 2021 07:48:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149822.277105; Mon, 05 Jul 2021 07:48:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JLG-00044u-Ux; Mon, 05 Jul 2021 07:48:34 +0000
Received: by outflank-mailman (input) for mailman id 149822;
 Mon, 05 Jul 2021 07:48:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0JLF-00044o-0T
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:48:33 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 640a733e-dd65-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 07:48:31 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2106.outbound.protection.outlook.com [104.47.17.106])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-6-LtSUoOP_M9uh3XynrMA9MA-1; Mon, 05 Jul 2021 09:48:29 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3936.eurprd04.prod.outlook.com (2603:10a6:803:23::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 07:48:26 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 07:48:26 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM9P195CA0005.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:21f::10) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 07:48:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 640a733e-dd65-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625471310;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=379muhCbVU28mtoZW/NN4A3h4S25XYXXLW+AQ/yDtGY=;
	b=YNN1mInCyQQEpiVYaTy3WS1cW2h/Ja8FCEhGv8tuveyHdDJlisVQUj3p3ISsUn5FwHEA/4
	Z/ZNSHwZNI6rH8aJDfhYSIbuokv4i9LjjpO3fSKvYjSxY+de4JoMNIaRpU71vE5z2Hh52m
	a7gJihh4F1R++7zUN4AtxpTp0fX7nu4=
X-MC-Unique: LtSUoOP_M9uh3XynrMA9MA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=U1oW4cccrSM7ihy0ffe9bulXVCPr/QHMVtZwOpRN3XQF8SGLAIsFobSXOHmH++i7N5/t+RmR2UT/J7c/V/V5kp0Q0HwJUj1MlHImY3EIUgJimfhOw3SiyK+6M47uQPJcT2d1w6qb9DpLIqXZuRWhHt7VbUirDpvvBcLo8OPXP0TeGxrEvWnkyrkLBCA0A9KrwN8wX5o1ol/+NuwzeDidBopKfSWpTjpmoXRSc6tvZOTcL+FZIPvSFMyPbIR9uZ+8GwOzAh/5QMD0QxXbUKM4IU4tLyimeNSOHdLnjKIOXGvFP5Gfb+idfctSnI3shr6k2mzrYoxtejvcE9oNTOLbZQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=379muhCbVU28mtoZW/NN4A3h4S25XYXXLW+AQ/yDtGY=;
 b=iOY/Lv7Oj/9fFGgY7WSJhqlpx6c9e4xgAoHzDaiiOPuOz3EHtk1kKVbBinxe3ctd/ceDsvyOCZp0mp71fZLaF5XxBieWXk38LaOpQPtNWhvc1bL51wNzQc1PLuXarnvYrdrVBEP2DyXDsDwHd8SVinKK9KpXCtRq0QS9i3Wuy6H26wO2UGJUVozu0S6MN7gWYXBQkj1AASOkkLkHSxm867C4bQzuZQA4iFEnIu558eVN9yMFxklGMr2Qmrj/kcuLJOHQC58fJeHeTcdQY+H3CsJZoKS0lGIsNrlb5LRgWI1Qwr1OFXxGatEMrtM3XqHYFPwj01lhTlSRJpEF5J4SWQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
To: Penny Zheng <Penny.Zheng@arm.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 Julien Grall <julien@xen.org>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <e0a312a1-f430-3ff0-6dd6-fcfe18e58071@suse.com>
 <7f77349f-015e-83d3-d646-af9897e31348@xen.org>
 <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <13bf976c-20af-f6d5-5532-5f11e75333b0@suse.com>
Date: Mon, 5 Jul 2021 09:48:24 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM9P195CA0005.EURP195.PROD.OUTLOOK.COM
 (2603:10a6:20b:21f::10) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0e4465c7-2cbe-4c92-e275-08d93f8945ec
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3936:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3936F72A09D7C302F05C72E9B31C9@VI1PR0402MB3936.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	wbJ3G3/IaSoU9MEc2A0fh0A9/89YYslc37aipzhjXx6rzJ6g+kgqkMdnYTH1hn3743XtjujHfInLw9cthrM1TKfC6m1UVFRmpoGsYYT9gM8HcM7ODl5u0JnZyPWblZBWG5b+L3PtsFgrb2nWPNiamr1lRSqRnJcXRGRYCXwxjPOxc1Pl13aSfj+Z03gZ8/ozqJs26oLPka9RSOhZx7i+uWXySmOETeLJREZRPeuN60z7u1WUGaRHUXVLhyNKGaaDjC/LQsHWuiGh0qec5Yxx24vL44IP2dlAwk8y/J0t8+fi69gP8WDCaDouNY8EVuSDL5b55WCTbcUmaq3I+uYvNURfyY13BftKqlO+5w4fzZLo+r1A2J3AkkyKaniqXaqtOKjJQeVANpT0OFQCHImUWC5niUuJd8eO5Vj2P+5qrTDSOZo7THjObdkJUSIBWXIKv5TcYS3go71HxBsGJR1sVwFFB+gb8/y+SrTHjiMx8IQzmXvHENdZ1JxHnBniip8SuVSVU0MpbxXtAX7r0jOOVCuBGJOCEquZ6n52X1p2xKUWQFUk9UlHkr8gVHNLimonpPX5nFWklYfkgw/gGHah4rK5TzXm471fV4P05SHJCisEF6h4/dxPdUqPIQsLoiAKZ0QXx+lHBqPxVTBwQG0ncAU7GmfNt8fW8QjZEwmhe4J3Rc1J6xLq5LxiDM6l0ZwBFzGJJ+l5jxH+l8J4t3Xqbd2qvRVkxM6RghhiD57JpG0=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(396003)(346002)(39850400004)(376002)(16576012)(8936002)(6486002)(8676002)(66476007)(66946007)(5660300002)(66556008)(4326008)(54906003)(956004)(6916009)(186003)(2616005)(26005)(86362001)(316002)(53546011)(16526019)(36756003)(31696002)(38100700002)(2906002)(478600001)(83380400001)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?BtjhKyIYL2HBlpTUcrhJbjQe/noy5dkPhjj5I6h?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0e4465c7-2cbe-4c92-e275-08d93f8945ec
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 07:48:26.6867
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: xl271Z8+VQaEF8kYlrVhrHgxDShJwX5K19dCPQxap/mlS/xamFQAF8ZnfUhRmkvbo0zSEW6SlrouCg/dyTjb9A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3936

On 05.07.2021 07:22, Penny Zheng wrote:
>> From: Julien Grall <julien@xen.org>
>> Sent: Thursday, July 1, 2021 1:46 AM
>>
>> On 10/06/2021 10:35, Jan Beulich wrote:
>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>> @@ -1512,6 +1530,38 @@ static void free_heap_pages(
>>>>       spin_unlock(&heap_lock);
>>>>   }
>>>>
>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>> +/* Equivalent of free_heap_pages to free nr_mfns pages of static
>>>> +memory. */ void __init free_staticmem_pages(struct page_info *pg,
>> unsigned long nr_mfns,
>>>> +                                 bool need_scrub) {
>>>> +    mfn_t mfn = page_to_mfn(pg);
>>>> +    unsigned long i;
>>>> +
>>>> +    for ( i = 0; i < nr_mfns; i++ )
>>>> +    {
>>>> +        switch ( pg[i].count_info & PGC_state )
>>>> +        {
>>>> +        case PGC_state_inuse:
>>>> +            BUG_ON(pg[i].count_info & PGC_broken);
>>>> +            /* Mark it free and reserved. */
>>>> +            pg[i].count_info = PGC_state_free | PGC_reserved;
>>>> +            break;
>>>> +
>>>> +        default:
>>>> +            printk(XENLOG_ERR
>>>> +                   "Page state shall be only in PGC_state_inuse. "
>>>
>>> Why? A page (static or not) can become broken while in use. IOW I
>>> don't think you can avoid handling PGC_state_offlining here. At which
>>> point this code will match free_heap_pages()'es, and hence likely will
>>> want folding as well.
>>>
> 
> Yeah, I was following the logic in free_heap_pages.
> Hmmm, I could not think of any scenario that will lead to PGC_state_offlining, that's why
> I was not including it at the first place.
> For broken issue, tbh, I just copy the bug_on from free_heap_pages, after quite a time thinking,
> I also could not find any scenario when a page(static or not) can become broken while in use. ;/

I can see that what you say may be true for Arm, but we're in generic
code here with an arch-independent CONFIG_STATIC_ALLOCATION conditional
around. Hence you want to avoid deliberately not handling a case that
can occur on e.g. x86 (see mark_page_offline() and further related
handling elsewhere). I'd perhaps view this differently if you were
introducing completely new code, but you've specifically said you're
cloning existing code (where the case is being handled). Plus, as said,
you'll likely be able to actually share code by not excluding the case
here.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:50:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:50:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149828.277117 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JNN-0005SQ-Hf; Mon, 05 Jul 2021 07:50:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149828.277117; Mon, 05 Jul 2021 07:50:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JNN-0005SJ-Ec; Mon, 05 Jul 2021 07:50:45 +0000
Received: by outflank-mailman (input) for mailman id 149828;
 Mon, 05 Jul 2021 07:50:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0JNM-0005SD-Sd
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:50:44 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b33554d8-dd65-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 07:50:44 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2111.outbound.protection.outlook.com [104.47.18.111])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-21-5WlD1HSmPfGMa39KOacAsQ-1; Mon, 05 Jul 2021 09:50:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4191.eurprd04.prod.outlook.com (2603:10a6:803:45::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 07:50:41 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 07:50:41 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0176.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::20) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 07:50:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b33554d8-dd65-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625471443;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=K4VFUC7j4ITjPhqjm08Uxuw/7MzYYMilatT3HOIvgcs=;
	b=Wger7dibg4GdO+wDwzDb9ajkZVyf2GDBfu9EW+Gm5RigyuKhKOuTokmIWE2rjGK9hn7Ir2
	mvPh0mdYUSJGtqs1aAjrh61ipGhlWARFmMT5KCVkhKVPQdNIEKV1UNBSvrDsrkFVpE6qtO
	LA2h168OV1PdHuvvb4vGjJh3vWalZhQ=
X-MC-Unique: 5WlD1HSmPfGMa39KOacAsQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Law7G9xve01VCz72no8K/eLehy7F0cF3OShdPrjv9/e5mzp2iW70+kHB+zmks0Ksd4pim5DwsCJhzjDjTbHJ6qZ8vuzJpfAevLOJ4Cr3vrVJcZU7UcaIvbhJJWI6c8psBHkVsPD0n45xoSkE4R+Ruja9g4t9F16XeS18bdFiycQzE0kBZRptPwasmnpx/3OaSEl7GbEq52wFqRd+wloEnQ40sVae3KpkumOmsF6HDaDOKd5BzGY/wRCntryVb3sf/la69y1tAFG7Lrbu9rW3uHzXZlsswiqFIcGNbpxLvSKc4GALR5Xm1uR2KDD5KTvyRKS+uJumM8HQQo0or+jNow==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=K4VFUC7j4ITjPhqjm08Uxuw/7MzYYMilatT3HOIvgcs=;
 b=kMqcHWNO0YJ4Dv91ZvbZFhZH00dknkQrYUYkAVRFAVpRfx36LkMnIkMV3y5OrCPVsAZ+XCpm+hGbfmvCjydWvQ22GsKVW4ifD4jH422VKQprZosSsKf/tHseyN2aOFK2QBQDoaqcQ6sANQcE7CLGTxM/im9q14EoeeyH3MfBxj7uPKPFvl4oFZp73oWj/8yvnpwgP0JC6M4wE34sVLMxrt8Pb0fnBnl8T55FCoksSrAiApxjmwhZBVQOlp2I/1Sd3RxCZr3FcALirJKmpPzG52l3tk3bAwf+2dfM7U3WT9P3UBZ6HCTuxgDntsbcPsIE7er+Ks66seuVVdUIaMl3Hg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
To: Penny Zheng <Penny.Zheng@arm.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 Julien Grall <julien@xen.org>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <e0a312a1-f430-3ff0-6dd6-fcfe18e58071@suse.com>
 <7f77349f-015e-83d3-d646-af9897e31348@xen.org>
 <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <VE1PR08MB521538D03677F9CBC6088855F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <5ce26bab-9ebf-f3c5-44a3-7918227f3afd@suse.com>
Date: Mon, 5 Jul 2021 09:50:39 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <VE1PR08MB521538D03677F9CBC6088855F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0176.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1c::20) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1fa5bff1-0ac9-429f-01ab-08d93f899607
X-MS-TrafficTypeDiagnostic: VI1PR04MB4191:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4191D80C8099D71FCAC61FCFB31C9@VI1PR04MB4191.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	7rKsitMDyxekzeuZPEa2HyClNtioE+hPcT+pNfvDPYvfP7NHQPQ4taDGYJSW1QFSEer8ptPIoQ/sQnx+8Xarp1BlA8cEW7UOywJo0RpJIMNxQQudxA6qIsjC11S7rlA3t4/BG0WuoKndinVXJxgqOI+SWts75u+zlUZHsx10yi8dtZ4vQjtkvTDeZsRPbmoM4qqqXMlebmjQp5ICeHQKyktC/mVKT4GRjYGni+f8S3rumkSSmJQwxBKubicgxiFg0d869SbRCL4egoTF4i7bJvwuJIf3Az8q3NnM2PGZuNPQTZHz5ZTPKV9XRls0eCY+GhuHbMQSod4ZkZNeLCgAJUeK+hJ7UADMmqmNhDtycrkbabTx6Wfk2MeqTXBXaPW1h72XMKCs7Mgtrj4ynLdSSF31NxoVQigt0+sxqpyG1IbTSQb6SxiGPAxP3nDL1FSoejwJTg4frdxs0ZHArJ8igbRRxjHnnRoqHBpc+UtulwMZjIl89mRpAhdYhrWkG0ie9sPGQDnyCYs1rh+YtH/Uyk80w3VtViB20sJO+9vZOizKULvZD0imJpMFOmlDHxoDolCzrUmHWVFyISgF6NbitfLIIrAakg63qDMsF7w5o3ilS++DOzSOWdRmzZ0CIbUfeDoWgmAkSJchAqkYB92qdGFVD54KNQQ6daAagBpmzuF2IDwCShmRenKJSvcR0EfzxlXKJcYmo44nTQ6ZYLYQsPigXqsROFKPxRg3godsBo4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39840400004)(366004)(136003)(346002)(396003)(376002)(16576012)(8936002)(6486002)(8676002)(66556008)(26005)(66476007)(5660300002)(66946007)(4326008)(54906003)(186003)(956004)(6916009)(2616005)(316002)(86362001)(83380400001)(53546011)(36756003)(31696002)(38100700002)(2906002)(478600001)(16526019)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?MAkHDH3nTaKuegxroGlB/8hYhhsJApmIxI9QKqY?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1fa5bff1-0ac9-429f-01ab-08d93f899607
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 07:50:41.0776
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: FcDxyYrXE592S1cuXQSL59mA/AnfhPUs/ywrQU5MFSJxQOYZ+iNKsLZtF6fz+15y91z4a+OTiVeVJiDH31vZLw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4191

On 05.07.2021 09:14, Penny Zheng wrote:
>> From: Penny Zheng
>> Sent: Monday, July 5, 2021 1:22 PM
>>
>>> From: Julien Grall <julien@xen.org>
>>> Sent: Thursday, July 1, 2021 1:46 AM
>>>
>>> On 10/06/2021 10:35, Jan Beulich wrote:
>>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>>> @@ -1512,6 +1530,38 @@ static void free_heap_pages(
>>>>>       spin_unlock(&heap_lock);
>>>>>   }
>>>>>
>>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>>> +/* Equivalent of free_heap_pages to free nr_mfns pages of static
>>>>> +memory. */ void __init free_staticmem_pages(struct page_info *pg,
>>> unsigned long nr_mfns,
>>>>> +                                 bool need_scrub) {
>>>>> +    mfn_t mfn = page_to_mfn(pg);
>>>>> +    unsigned long i;
>>>>> +
>>>>> +    for ( i = 0; i < nr_mfns; i++ )
>>>>> +    {
>>>>> +        switch ( pg[i].count_info & PGC_state )
>>>>> +        {
>>>>> +        case PGC_state_inuse:
>>>>> +            BUG_ON(pg[i].count_info & PGC_broken);
>>>>> +            /* Mark it free and reserved. */
>>>>> +            pg[i].count_info = PGC_state_free | PGC_reserved;
>>>>> +            break;
>>>>> +
>>>>> +        default:
>>>>> +            printk(XENLOG_ERR
>>>>> +                   "Page state shall be only in PGC_state_inuse. "
>>>>
>>>> Why? A page (static or not) can become broken while in use. IOW I
>>>> don't think you can avoid handling PGC_state_offlining here. At
>>>> which point this code will match free_heap_pages()'es, and hence
>>>> likely will want folding as well.
>>>>
>>
>> Yeah, I was following the logic in free_heap_pages.
>> Hmmm, I could not think of any scenario that will lead to PGC_state_offlining,
>> that's why I was not including it at the first place.
>> For broken issue, tbh, I just copy the bug_on from free_heap_pages, after
>> quite a time thinking, I also could not find any scenario when a page(static or
>> not) can become broken while in use. ;/

I'm, afraid I don't understand. Using page_to_mfn(), expensive or not,
in ASSERT() is quite fine. The (expensive) expression won't be evaluated
in release builds. This is specifically different from BUG_ON().

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:53:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:53:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149835.277128 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JQM-00068F-US; Mon, 05 Jul 2021 07:53:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149835.277128; Mon, 05 Jul 2021 07:53:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JQM-000688-Qr; Mon, 05 Jul 2021 07:53:50 +0000
Received: by outflank-mailman (input) for mailman id 149835;
 Mon, 05 Jul 2021 07:53:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0JQM-00067y-6M; Mon, 05 Jul 2021 07:53:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0JQM-0000sP-16; Mon, 05 Jul 2021 07:53:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0JQL-0000q1-JW; Mon, 05 Jul 2021 07:53:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0JQL-0002ah-J0; Mon, 05 Jul 2021 07:53:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=mJ0dQEI43kT8l3SkzHd+o7tDZjp0Jawk5HyYEZyYf2M=; b=qj8+cR4+D5bJ0KQHlUTv3woE/8
	Tuan3srZsdtrcGsHqLu++1glvkypW0j7EHLbtIUKDPucwBn1Ev5UlnR1nZfDC/iM7wSYYlQ99ZOCN
	KxKYVMg0FOZx1oyPYOqdgm/73vc9SJBTcFQSAXOgrrP9dFOhCTi7UfhxThMc8JAQILTc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163308-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163308: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 07:53:49 +0000

flight 163308 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163308/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  360 days
Failing since        151818  2020-07-11 04:18:52 Z  359 days  351 attempts
Testing same since   163236  2021-07-03 04:20:01 Z    2 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63952 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:54:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:54:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149838.277142 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JQf-0006Ya-7J; Mon, 05 Jul 2021 07:54:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149838.277142; Mon, 05 Jul 2021 07:54:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JQf-0006YT-4A; Mon, 05 Jul 2021 07:54:09 +0000
Received: by outflank-mailman (input) for mailman id 149838;
 Mon, 05 Jul 2021 07:54:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0JQe-0006Wy-Ck
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:54:08 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 927b3d5d-f83d-4132-a77f-c0d8e077d985;
 Mon, 05 Jul 2021 07:54:07 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx657s1KWz
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 09:54:01 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 927b3d5d-f83d-4132-a77f-c0d8e077d985
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625471642;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=JV+LJl7nJl9afvBx8gXKE9+tqVLRE/Strneb576nBkM=;
    b=Vq3CZncIhD2KBHvbI/569Mdl7TdD/J58OoZX72jJu3rYVpnEsxB3YTLyyMnhegDuHB
    HPshcmKTNZOc0KpKh4Fi8afXFnIZHUJseK+oHNfL/JGeN9sRuqqMySESCeHV7jPcPFjX
    IU3hpPepe4c6ARsPPotSDJ2HczGnZKHvTkQtiQ52hiMfZDwnXLHjaLxbIbv9+YNV1qBc
    jdXbUn9nc9inyMTfuMO3Mlj1lgZ+14r1YCKc5OY4KJFfQUgS/M+jnVK8T7qhW1+TWUiT
    3pW9vcGXbBvt6XvzqmNfKI3g7zxky9nN6bXYCx1zbrb9jbdJJ/M84ylW92gQJ8eG5u2A
    r6ww==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 09:53:53 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
Message-ID: <20210705095353.6ff58d0f.olaf@aepfle.de>
In-Reply-To: <20210702190342.31319-1-andrew.cooper3@citrix.com>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/vTUTvSUi3yzBKNd.k+04xVq";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/vTUTvSUi3yzBKNd.k+04xVq
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 20:03:42 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> The code has gone through many refactors, but the first refactor was the =
one
> which broke it by inverting the check with respect to checkpointed stream=
s.
>=20
> Fixes: 7449fb36c6c8 ("migration/save: pass checkpointed_stream from libxl=
 to libxc")
> Reported-by: Olaf Hering <olaf@aepfle.de>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Olaf Hering <olaf@aepfle.de>

Olaf

--Sig_/vTUTvSUi3yzBKNd.k+04xVq
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDiupEACgkQ86SN7mm1
DoDIXRAAglTWm3uEwsF1P8g2OClf5p+bXwBXOHbMeCLJSFj9FZDEoapFvZO2/uGB
Txey2rEWf6njre5/AGGHLCJ0czPAbpGxFSf1H4/XeRrhdn/bWmNPvrW38pmCvKjH
vbseyCp4IaF0s2Ub/lBImE45Bxn23LzaVCrIqy+lP/fGlTW1sjfBs+c2pczdnxwX
P+/t5hfuYVhB+oU1b14u9Pg9VMDgzeaVPLPOwfGjrO4X5rJmPHLaE2CKzeL8TfVh
w/9F/zI1VzrlYCQ23exrdK4rU+7odnltxNer5LsURDj+1Qompt1NvGJ69pEcc950
LLX8goyPjhEl4Y0J+dhJaqFcAe254f4Yi/XKiaJdLYQXb8ve5P8QyQGjjyPe5rtS
x/KQNDQkw7IarQ+QZJvsnTkJI933bycHTBCpN7W7xujVPyMvE/z0HzdU0UWn7PAj
M0hVrQ5jXKym4z6NTX3X/Xy5t+4K0RVgAAKdx1PTwGECqPOnw2wpdO8sMZbQvuGr
/Uvl6zazYtjeAXXrjdd1c7ugDRbmUoyeVtrXZaS0hlUhtceok+ijtIm1tNfcmjwa
uGzQDpZ6ozCEdvLE6eg8qMlHpCWq3PpwuZbNbZa/X8icOt3mZ8F3MK7RqwbyYzGl
EZyUxgiVLSR5OJ0VAjtjDcTqpP08xHiqDX3R8p1fwQFe2DED5lw=
=krAC
-----END PGP SIGNATURE-----

--Sig_/vTUTvSUi3yzBKNd.k+04xVq--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 07:57:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 07:57:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149849.277153 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JTt-0007Sj-TL; Mon, 05 Jul 2021 07:57:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149849.277153; Mon, 05 Jul 2021 07:57:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JTt-0007Sc-Q6; Mon, 05 Jul 2021 07:57:29 +0000
Received: by outflank-mailman (input) for mailman id 149849;
 Mon, 05 Jul 2021 07:57:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0JTs-0007SW-Ld
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 07:57:28 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4f6fd98c-e388-48de-bcd3-23975511afbe;
 Mon, 05 Jul 2021 07:57:27 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2050.outbound.protection.outlook.com [104.47.4.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-32-WhUkcdjWPrCmmsqHuORxBw-1; Mon, 05 Jul 2021 09:57:25 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2445.eurprd04.prod.outlook.com (2603:10a6:800:55::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 07:57:23 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 07:57:23 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0047.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::10) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 07:57:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4f6fd98c-e388-48de-bcd3-23975511afbe
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625471846;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=kDakExeGU87B0Ei+ei/sjyL0MKjhCwbbAD1XFe3zn7o=;
	b=Oh/9cwlA60s5WIzqO0HjuspXGpV2gXDOMCf36Rj5krzvyyv17czxKufG/9/XfvI6ZPK4zi
	LJyEpFRyUpq9OsKxEcSYkNOJy2yT//glT6E7E5lki+79p29tD/unnqtrKM5si1cTEKDpiZ
	mNFldAzfxKrNRpPZgWCeQJXMeicjRjY=
X-MC-Unique: WhUkcdjWPrCmmsqHuORxBw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=C2mfF9NRTqm8qMt/aDU8xdS0rYprOLo+idq0pjAZUTvKlkP2ONNranpuEcrObJdco1yFdE/K9xcwE1Z6GclHytF8ttendTQ8+Y7HHaj7oVs6cqtobGKoHCbws2n9yyYXl2akEJtIdy2FmTow2IfWSlMCdkovgdhvRq7RyAzzfYQO199wjOWUEoQC1f9pZOy5uCuydH1//s9FW4XTtPJOnT3RRzkylX41YU+kSxmX4iwiNsQICfU5VkEiXUAzj8j4tf6PuyntojCU0pTppW6GM9u8Zw30svjPNN7z242imgP89LaPfIFK7+Fpdvu92s4ZRuXnWh5t+8gjYH3oP6d49A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kDakExeGU87B0Ei+ei/sjyL0MKjhCwbbAD1XFe3zn7o=;
 b=W0hkntrt2Czsj8Z/hodmvxJK3ZeOLw5Ay57lcqmykKOrZZgoZxpZmlRCzLfr0O8RwStKVDfK8IG5uxHzHB9or65zIlZtjX4214iqrlh09IVfO4T250gOW46ZL7YumyeRCHgzlPhV0TSuE/pI1z4UgAmxwxKikayGRqB2nGMRpLWwPYt2VcLIDWZlcP6wgMi6VpqvZ7ff6LNe9hT/JTu+1BnBB01/aWiWbC/WgnaRuj5R4YSY1YW+X0RKPtNTw/Jl+bfWDNXYLfiFtu3zjuKMGzIzua3f3hN9DQWFBT35JmrUuSDQRRYLosdWspseTS/cLMQGFHsvCE4qiJjPmkRvkA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Olaf Hering <olaf@aepfle.de>, Xen-devel <xen-devel@lists.xenproject.org>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <06968742-355f-ad37-0681-e51eea256414@suse.com>
Date: Mon, 5 Jul 2021 09:57:21 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210702190342.31319-1-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0047.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::10) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d8cc0c70-e2a0-4607-1fbe-08d93f8a85e5
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2445:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2445C866DF92B8BEEAEAA756B31C9@VI1PR0401MB2445.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	m67B1s4LOZ18c52XINyM5OqW/NrQ9UNSFA6cNXoAPWuC1bYfOpAdU6GEXqNzZP3FlIzKPlEaERSlo3m1rD6rcaCAPgydXvTNW39SBbjcKtgktdMgzRujGvotujhCVSER92rGKCevaTaOXbcUr/P8aekAgeedJBNSng+QiUNhDUOiPx25ltnCC5N6lcMM5boYPtwhJKwJn5qSG/+ysZT367oCM1eO4gGOc39WoQ7d6mnexQbIA6+ov2dfTitrvyvXxH43IsJSpP/xxPgaarrq9UIKY3WH7f+Ta+LZay+giudmmOnnE1xCC2PTwghY1f3La5hVab9INoGQzxzi6xcpgEm/bAdo344A6hVgMkxPLZvuPP/dRzY5AZxxhq0JlCTblE/IBSrAP8r3H5vRdeX3OeX7peAIIUypiocHWRV7sXrZccH3bJ75IdsYYuvTF4InChhYy/rg6T6PQeaGLtYz8YkR4H9kZC7D/bodODpX/rzY/xWxEd4PGrW9kMm2TL3hE15xl+T8vHp8gxDbZgyM71cz2Oe4KxJi6urzDUvAOickZ5kXHHBON/LjSw7PW9MlOl1cI4heR8MHKw+KqZ7jbm5+JI1QpvHiYxAPNbTGbKvX+hujpjOvNIkDskn/VTi2w+SpvJDxMFxujxoViCOgfrauFtbWy3GI1+//tFrKOR+dx8JJ3fpgrF6lnI5hU8sE1urkZRNOQpK1bpIhCI7Mu2EuYxg8i1XqGNQY/wejKeGgCl6dMy+ZphLoWOf2mq6q
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(376002)(396003)(366004)(39850400004)(38100700002)(956004)(31696002)(2616005)(16576012)(2906002)(16526019)(54906003)(4326008)(186003)(316002)(6916009)(478600001)(36756003)(66946007)(66476007)(66556008)(8936002)(31686004)(26005)(8676002)(6486002)(86362001)(53546011)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?X4gBvIjWbqFuqgCVk/XMCmJ54U0E0JNl6bL46zf?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d8cc0c70-e2a0-4607-1fbe-08d93f8a85e5
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 07:57:23.4997
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: zcVVI/OFWkVs4NqRQ3GvZPp8LCxKbfwAK3gHL4Gayzr8C8I80uMHRQwLDd/k0BZdISkXSS7ynHI6sTNzfsYlcg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2445

On 02.07.2021 21:03, Andrew Cooper wrote:
> The code has gone through many refactors, but the first refactor was the one
> which broke it by inverting the check with respect to checkpointed streams.
> 
> Fixes: 7449fb36c6c8 ("migration/save: pass checkpointed_stream from libxl to libxc")
> Reported-by: Olaf Hering <olaf@aepfle.de>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

> ---
> CC: Ian Jackson <iwj@xenproject.org>
> CC: Wei Liu <wl@xen.org>
> CC: Olaf Hering <olaf@aepfle.de>
> 
> `xl migrate --debug` might not be perfect, but this at least brings it back to
> mostly working.
> 
> I don't think dropping it is a sensible move.  In particular, it is invaluable
> for testing the logdirty infrastructure when migrating a memtest VM.
> 
> If anyone has a clever idea to fix the grant problem, then we can.  It is
> after all a debug option, without any specific prescribed behaviour.

What is "the grant problem" referring to here? Neither anything above
nor the offending original commit has any reference to grants, or a
problem with them.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:01:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:01:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149857.277164 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JXO-0000wu-JT; Mon, 05 Jul 2021 08:01:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149857.277164; Mon, 05 Jul 2021 08:01:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JXO-0000wn-G3; Mon, 05 Jul 2021 08:01:06 +0000
Received: by outflank-mailman (input) for mailman id 149857;
 Mon, 05 Jul 2021 08:01:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=cjuk=L5=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0JXN-0000wf-IB
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:01:05 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 10557889-e206-4b85-b62c-dc3152fd6907;
 Mon, 05 Jul 2021 08:01:04 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 75D791FE10;
 Mon,  5 Jul 2021 08:01:03 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 4C9DA139A1;
 Mon,  5 Jul 2021 08:01:03 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id QSxPET+84mD5LgAAGKfGzw
 (envelope-from <jgross@suse.com>); Mon, 05 Jul 2021 08:01:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 10557889-e206-4b85-b62c-dc3152fd6907
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625472063; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=zCG1o1PoHWgd44Q4byX5kHQ41zaAVuorzbR1iXUBkd0=;
	b=DGk4atwdt7kKtr+EZhtgn9O/plJKHRKbq9nkZzEDN2FiCDVnEcYK91OwaOwflqi39Stm2n
	FN2xI2Y7jC9I6Pn+OKTF76RtNS/Vr7WLT6/qKOAsG7LaQt3so6xJ/jfsAVz03yRlimuKXb
	dotKik+Qz9CW19vNYpZfBQckDTAiONs=
Subject: Re: [PATCH -next] xen: Use DEVICE_ATTR_*() macro
To: YueHaibing <yuehaibing@huawei.com>, boris.ostrovsky@oracle.com,
 sstabellini@kernel.org
Cc: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org
References: <20210526141019.13752-1-yuehaibing@huawei.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <c3d4bd4c-7012-ec9b-733c-e3db19d2dc7b@suse.com>
Date: Mon, 5 Jul 2021 10:01:02 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <20210526141019.13752-1-yuehaibing@huawei.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="EtmeGcJPJZcXsKIlHqF5OFNd2RoHRw5R9"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--EtmeGcJPJZcXsKIlHqF5OFNd2RoHRw5R9
Content-Type: multipart/mixed; boundary="tBOwrfiwH6vWztjNsO7LDxZno6xcwWQ2E";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: YueHaibing <yuehaibing@huawei.com>, boris.ostrovsky@oracle.com,
 sstabellini@kernel.org
Cc: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org
Message-ID: <c3d4bd4c-7012-ec9b-733c-e3db19d2dc7b@suse.com>
Subject: Re: [PATCH -next] xen: Use DEVICE_ATTR_*() macro
References: <20210526141019.13752-1-yuehaibing@huawei.com>
In-Reply-To: <20210526141019.13752-1-yuehaibing@huawei.com>

--tBOwrfiwH6vWztjNsO7LDxZno6xcwWQ2E
Content-Type: multipart/mixed;
 boundary="------------38A98B3C80FA94D29300F6F4"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------38A98B3C80FA94D29300F6F4
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 26.05.21 16:10, YueHaibing wrote:
> Use DEVICE_ATTR_*() helper instead of plain DEVICE_ATTR(),
> which makes the code a bit shorter and easier to read.
>=20
> Signed-off-by: YueHaibing <yuehaibing@huawei.com>

Pushed to xen/tip.git for-linus-5.14


Juergen

--------------38A98B3C80FA94D29300F6F4
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------38A98B3C80FA94D29300F6F4--

--tBOwrfiwH6vWztjNsO7LDxZno6xcwWQ2E--

--EtmeGcJPJZcXsKIlHqF5OFNd2RoHRw5R9
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDivD4FAwAAAAAACgkQsN6d1ii/Ey8q
Mwf+NF8idU9BsY+BSFf/2P5xnabC58++xUwUpeVX9mIqb79Jy94887c5EDT6EkMBDAZKUy3W/TCf
OKsNRuQg6qKA6Am7IN2WJgRmRz28ZVIXawmDnO3XZq++Idr9pVROG6xLxmw34vs0PnL6QTQ+4e5D
SsmlmmMLLIF7A7/GkZ45dd/QzEIMyTeFNc6NAnhmccMQaVyVavCLSKSZNrTky+y9+xOGmP1S+ZDK
kwje71XNi77tMb9tZAELo6XBGsZsCoTweXWejh+uyYDDMktUAqFfyr6IVZqZmab9pP5LSi+c2kph
mI379lzsFgfJ6XsjfmQRch4bsEMDP1rC2QwKzO+IGw==
=r57y
-----END PGP SIGNATURE-----

--EtmeGcJPJZcXsKIlHqF5OFNd2RoHRw5R9--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:01:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:01:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149863.277175 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JYE-0001X5-Tw; Mon, 05 Jul 2021 08:01:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149863.277175; Mon, 05 Jul 2021 08:01:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JYE-0001Wy-Q2; Mon, 05 Jul 2021 08:01:58 +0000
Received: by outflank-mailman (input) for mailman id 149863;
 Mon, 05 Jul 2021 08:01:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0JYD-0001Wo-62
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:01:57 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 80c7ca93-bd35-409a-a1e5-06daf2cf20fc;
 Mon, 05 Jul 2021 08:01:56 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2054.outbound.protection.outlook.com [104.47.2.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-32-OfGckfCGNp6ZLuaYdH6WKA-1; Mon, 05 Jul 2021 10:01:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2445.eurprd04.prod.outlook.com (2603:10a6:800:55::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 08:01:53 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:01:53 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0208.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::28) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 08:01:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 80c7ca93-bd35-409a-a1e5-06daf2cf20fc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625472115;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=JOFJxj8avjEiD9E0J0VJqC4QnGcKRQ3TOuePJrJC76g=;
	b=SEMVfs9QrA/u53JSWsMJPOdSP9TsRSkNN1LR2vw29IhaRwSpzvim65O11ElVzNfNTuFnXI
	n1vhHUFnYx33MI5Agn5mXdS0KyuPH9sVL6heNQEHzP0chmMrMN4zgphXldgOcFg5nmoTtw
	/4s8J5Z2Abqj8YQ5tnBjOGL2Y8u4iZg=
X-MC-Unique: OfGckfCGNp6ZLuaYdH6WKA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gP3dY94oL876o9YnWUUZ4ls7V7Wvd4vpaCx+dvEVWRmLcY1E0flOrNx5Fbn18JwjEc1ri5iJmhRWkAyN9s7iZ4FhFbF2NCD0AMvMd4WDqjGp5RW3xRxONt1NogMa98HXzqlbywvx7/XGXND3Dz3dR5hceu01wnZ0/veo124oGOu8IUKRv0HXb3/TYopPMhJkG2Kvnb5/g4ZdI3uKZWG+Ck7JPTpwawhuCQyVumS5MoCIBCKBG7u6nfazKSAaQTAfpmnLweXp/R/g152u4Ge1gRh5r2QLKCweqgN3wCHIkOZEjNoiTa8snjtryLI1AA3QUn1JnXyxCxHfJfIXSwPmAA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=JOFJxj8avjEiD9E0J0VJqC4QnGcKRQ3TOuePJrJC76g=;
 b=KaYxCvg/cNzyQ2qa7rjA678zQmZGDo5QzDvFu34daVjqYO72Bl7FQJXqUHQO/YIDEHZ3VPPSs4NUv8gii5ETxbNzk1+yZ7dEclb4P+QEHUBb3e9ArHqBxf3L+UVMQJr7Syiq0n4Ofo09lfhRnSa7sSM1pSKtQErXf4GbCaYIJTtTf4gjF4jWO8N/gb/8Ma8PO+c9/WZm4G5k1vq5VHVxkIirI7hyruYp0buLsioJxAmgJJcdmrSNfbQHEBKLg0kN91irc+a08Ew/FwuqLZU9GQ3UPp8237FifFwa9N7R6jgIvegooCpvhxuZqho/JkeaZANTXmc+sfqHeJAvyMamlw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/libxenguest: Fix max_extd_leaf calculation for
 legacy restore
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Wei Liu <wl@xen.org>, Ian Jackson <iwj@xenproject.org>,
 Olaf Hering <olaf@aepfle.de>, Xen-devel <xen-devel@lists.xenproject.org>
References: <20210702190334.31271-1-andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <5de9c8cf-de15-ac50-16c5-7c786e8963c3@suse.com>
Date: Mon, 5 Jul 2021 10:01:51 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210702190334.31271-1-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0208.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::28) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 58c98bf4-083c-4f9d-e913-08d93f8b269d
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2445:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2445A17899FA57FC545B2B74B31C9@VI1PR0401MB2445.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	RlLJpJ3lnEidsYPUeFCs6NPV3t3SvNcl1OI/8JU3IC/rppjg3GqL+VF4chHrlhcyKBuLvrwvYcP29UhdTraVPxrgsxq2FDShRWFB9xkZCcuUCR6xQIyVCX9ewp91MN3ZO2+BvHy4r+IQoJZ2nUcq3IDB+AhziS9YbXe6v3RLmcC7DhdgvXe6sOOwUzOyc5Yl1dM88NsNUtTJ3kFAfADe38nmsR8ehr7/vdh0WU3cvT6JTblSXFQbovtVcB3eh7jPncdyiqWyRRYTIz/9NQiy3Gc58/Tat571PrG2i1sQWQp1a3M5yVJbT9zwRjf7B29lf1mAhdhOq946TTBkl96R5xbta0si+zGwd1hBHQeW3r8uSQ/5WAY5ToISNzYw9lDQbIu+0fyDBlmOmgFgPeaUkwhlSH6Hm0RRB+2xxDk6jhWd5CSsBk2Ukq2Q0ZVEjzzfSNE3x70fd9HO7IOzWf6vkj9auWKyMkJ7N0ISfv3Vtczm4XBuacmSwmjh8yf7w3QaTeqMLwzUHWSSKHXf3SsFtsGi12A1CQrKBYtAdLQ+skQyNY/qgYhzW7rQgVQs4Wvcc9IwBTDfDthbGBDA6GeiK+KV9ISNjvTPszYs1Vn2GNUlfwCvDIXdgV0tOtDfv2/vN2+mE323yd8IlTKzXsHvzvNqzyOeKMv+KCQJvWVzBd/vX+DU6Bo3ZPycyaCcjWH5KnkHWQnNBwBn480MHm6AtUCHgVk4RxenB+FpzN+R6zYusCUM3MjwsKtQySCSqQGd
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(376002)(346002)(136003)(366004)(4744005)(31686004)(8936002)(36756003)(83380400001)(66946007)(478600001)(66556008)(66476007)(6916009)(6486002)(86362001)(26005)(8676002)(53546011)(5660300002)(316002)(2906002)(38100700002)(31696002)(2616005)(16576012)(956004)(54906003)(4326008)(186003)(16526019)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 58c98bf4-083c-4f9d-e913-08d93f8b269d
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:01:53.2421
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RuOpot4j9hnLohGPagNV7gBUuvEBVeRQ+CzLji+2pAzltrxD1gOniCPBGGxRxklvMrgNdOtc54BgVehK1gTk6Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2445

On 02.07.2021 21:03, Andrew Cooper wrote:
> 0x1c is lower than any value which will actually be observed in
> p->extd.max_leaf, but higher than the logical 9 leaves worth of extended data
> on Intel systems, causing x86_cpuid_copy_to_buffer() to fail with -ENOBUFS.
> 
> Correct the calculation.
> 
> The problem was first noticed in c/s 34990446ca9 "libxl: don't ignore the
> return value from xc_cpuid_apply_policy" but introduced earlier.
> 
> Fixes: 34990446ca91 ("libxl: don't ignore the return value from xc_cpuid_apply_policy")
> Reported-by: Olaf Hering <olaf@aepfle.de>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
perhaps with, as suggested by Olaf, the Fixes: line changed.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:02:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:02:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149867.277185 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JYp-00028T-62; Mon, 05 Jul 2021 08:02:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149867.277185; Mon, 05 Jul 2021 08:02:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JYp-00028M-2z; Mon, 05 Jul 2021 08:02:35 +0000
Received: by outflank-mailman (input) for mailman id 149867;
 Mon, 05 Jul 2021 08:02:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0JYn-000289-FM
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:02:33 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.164])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 59806caa-dd67-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 08:02:32 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6582UKaQ
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:02:30 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 59806caa-dd67-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625472151;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=2a35YCiZlYF+krv9oSYPP0qwc7dNF0JWN07wu+SYq0I=;
    b=g81ylTiAx4n9ra+L0C5ZvJkBTOMFvEO9rnW3zkuwkFEomNx5ojU0NMnDo+dujVKQQ2
    +RjH/pgf/HfxbhJKyk2N7WxY5Lx6Amk4ghWso4Rc4ACpDtRJ2zbXG0OQ1Klpd6L/Pv0I
    uw/UbZx9U/q10Quyml2oE18CqbHjlKSWRXYL83laaB2FnDN3cRYDouR1WgONDId6MbX1
    l7+suYInxLzcfZjGbOdcRTxHvmI1/dgEx79vgmBZqfIdcxJupf+9cD38n2PPLq6R5v7h
    cGwXaICsKcrCLc3nIdgiJ3Fa8oT9WgnGlMqAiCHEoc0UnKclFBeiIunCqu0oY2XYN2ps
    e8bQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:02:28 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Xen-devel
 <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
Message-ID: <20210705100228.4947ed4e.olaf@aepfle.de>
In-Reply-To: <06968742-355f-ad37-0681-e51eea256414@suse.com>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
	<06968742-355f-ad37-0681-e51eea256414@suse.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/bl.bklON165KmYyWfGn78yU";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/bl.bklON165KmYyWfGn78yU
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 09:57:21 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> What is "the grant problem" referring to here? Neither anything above
> nor the offending original commit has any reference to grants, or a
> problem with them.

When the guest is paused during final transit, the backends will continue t=
o write into domU memory. As a result the final additional iteration to ver=
ify memory on both sides will always see errors. The code has no way to kno=
w for which pfn such mismatches in page content can safely be ignored.


Olaf

--Sig_/bl.bklON165KmYyWfGn78yU
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDivJQACgkQ86SN7mm1
DoCxqxAAk7WabDn5fjrO+RWOBvCAdMST89Qxyyox0g8uwbThD3CHKjHKWGMLHfyi
GvMACwgD8s6AX2kFXp2G6jKUJExAfjIvjaQylebdvSP3KqEBqOkqKDopF5RwOyO6
m0WOXq9uGUqXIieuhdLcAQ93hBLRziG/uLN6/RSiN1fAQAWVkcc7dg3S1SgQFfNx
FqVBX1ncYCfWkW5W3CyMWQlIRA+R9HcdA514OXzIERDcGYlDvandICx/RTGAVfvo
lnXzebWZe1ZihY4OZnNdAO7gWiQrSUHNdtD44PBVBmpo4GU6xSKoMpBLWjD+lHBK
8rJrxbf7VRxcIMaBaEdO6omft0uZXBC0vEZ4/GjNI6eKVSpxxFLA5fouSHW64hEc
V99nZkz1Va9bJvrwC5c3i2RkbBd7VaCTusTBiT8LztsPUOmpn4Xgfsj1+2BrdvyG
AMLTG1+35ssqhmQ7Xxa3XBQFMwPh4Qu1EWx1EYvSqxM6+7Rm5HkFxMBb8ToYkmqg
7lBHfUEezH6CkF1JWyLXJ8agL4/BnBWnsJnAbjMH85dGPmdA+cUy6D7PwDUC6oXH
QaZQ2Bg0RCiIuD4QuwLq2GUy/CghHvK+QG9vZNnbyNiMWygduCwitMWcRuCqZJYB
drnUmG/iqnIsKleD3jNePYRggnNgUZRKDXV/twSLahkkeGRoS8Y=
=ZKzQ
-----END PGP SIGNATURE-----

--Sig_/bl.bklON165KmYyWfGn78yU--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:07:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:07:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149877.277197 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JdL-0002wz-TN; Mon, 05 Jul 2021 08:07:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149877.277197; Mon, 05 Jul 2021 08:07:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JdL-0002ws-PS; Mon, 05 Jul 2021 08:07:15 +0000
Received: by outflank-mailman (input) for mailman id 149877;
 Mon, 05 Jul 2021 08:07:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0JdK-0002wT-6g
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:07:14 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.52])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 00ca41c0-dd68-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 08:07:13 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65878KcO
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:07:08 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 00ca41c0-dd68-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625472429;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=wvYRUUMW0u1lIS0ClKqX6IV//60D9uj9l3nt/CtcKzI=;
    b=PT9oG4Vy7eSnKIUIissGUwerOTr55ViFVDgJsfo0SYdcXuig5DCegMgWG486SIsvR0
    T/SLEtZE6FidhjPN+1UovF/lL1J++X8Qq4I3YFkYnrNCfqqDieX07ayEKOgRSd0VWPYu
    C8RcluCJymERLa2x4GaCl014XqLZwgy9Dec1vfZEIeBvfYJRFECQYIfqqKSzH0YpQ+e9
    2S3cpympss2Kq5pGuLcrHnZILTz381zcM15Lmd2vr0J0t8QPPzoSFVhS7GFloEZBOMnD
    eEFooiYMnICmIWi6wpPrqnEKmeixBp1w9v4CkFciLsYr4Mlc8tynW7047QHqsUQPSMZN
    lJ4Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:07:06 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Marek =?UTF-8?B?TWFyY3p5a293c2tpLUfDs3JlY2tp?=
 <marmarek@invisiblethingslab.com>
Cc: xen-devel@lists.xenproject.org, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in
 format string
Message-ID: <20210705100706.48b4a1ef.olaf@aepfle.de>
In-Reply-To: <YN88m0tvHKxF7+NI@mail-itl>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-7-olaf@aepfle.de>
	<YN88m0tvHKxF7+NI@mail-itl>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/nTvfTfR5Apkq/O5_Q/rDeFU";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/nTvfTfR5Apkq/O5_Q/rDeFU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 18:19:39 +0200
schrieb Marek Marczykowski-G=C3=B3recki <marmarek@invisiblethingslab.com>:

> Why bytes()? Encode does already return bytes type.

You are right, this works as well:
  i =3D 123
  b =3D ("str/%x" % (i, )).encode('utf-8')

Any preference regarding the "encoding"? I picked UTF8, but 'ascii' might b=
e more correct in this context. In practice it may not matter.


Olaf

--Sig_/nTvfTfR5Apkq/O5_Q/rDeFU
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDivaoACgkQ86SN7mm1
DoCzuQ/+MfTkkPlSqy3JgXyaZo7J6r6wsH7zFTtot3KMyWvYI6DVyyFL5n4XjE4T
1l0v/02/6DDGa1qNBkXa+1UpZzgEgt5Z5w61bMD/NPwoi1PjgY8A0Zhxgjp+i+y7
wpolbrTc0eNcz0twNbfpsvdco3XqujsSXK0zm2jPmtupDfGRrLjr996V+ikv1Wx6
hCJk91DXUK0piycdffC+apWSzoALXvB5mDgjPMhMhUvc7m23lDwO9fzJFp+NM3Q2
idGZUw+u3F6WjZkssjP+63F0lKYZgyBvOheXaH+un6cMbDfBrNEhqgvmdatG3OJs
hhcguB1/WypQ+/DySgFi2+H0eO+xdjdsZyVe3dVKXnTNbXchgueEZfGoGp60CXyT
7/D2DvuvqZ/CjrXqFRplTHeJes0urZnqStZ6YMJ8Pvtc9sA5e+49VKuJRX6P7Fqr
tV9uaiRWj/vmsJ+BamB6CNQLL3u00mImZUfE8FyxTD2JKSmqPm69RLlpdbWHiiii
A2QsWqpItLiU7Pw0Q6wwtdUUk7JM6ehKdopJWAKSlENiUriPW4d6jDzJjas9ke8E
MHwzVPSbyp3Hj8p4k0d6SlctmICZS2XV0kcIKf4+ple3EFl3Sy33V0gzXLez2hTb
+YThiiEm25BFkOVxuY2fdo7kavyys4b5oM0l7eHfX44LqETw3Is=
=1CbD
-----END PGP SIGNATURE-----

--Sig_/nTvfTfR5Apkq/O5_Q/rDeFU--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:09:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:09:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149882.277207 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jfl-0003aW-9m; Mon, 05 Jul 2021 08:09:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149882.277207; Mon, 05 Jul 2021 08:09:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jfl-0003aP-6g; Mon, 05 Jul 2021 08:09:45 +0000
Received: by outflank-mailman (input) for mailman id 149882;
 Mon, 05 Jul 2021 08:09:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Jfj-0003aJ-Rm
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:09:43 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5a115912-dd68-11eb-843e-12813bfff9fa;
 Mon, 05 Jul 2021 08:09:43 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2057.outbound.protection.outlook.com [104.47.12.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-17-uI4kHMqNM8ylFR3BHhTijw-1; Mon, 05 Jul 2021 10:09:40 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB6669.eurprd04.prod.outlook.com (2603:10a6:803:125::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Mon, 5 Jul
 2021 08:09:38 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:09:38 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR07CA0058.eurprd07.prod.outlook.com (2603:10a6:207:4::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 08:09:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5a115912-dd68-11eb-843e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625472582;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=L3ukqdqargNajk7QomIvgd+mfoUGfHQ8FSpzdFZYCqQ=;
	b=TcSUy3mq8zB0Vu2kIMHXPXZq6RPCiFhIlzXG8MbNxkM166T+FENnOFw3SRgiJ4TuneZP33
	PCziMRHxqeyA3zhR+icrZVcFa19GrjtJNmfcEUYii3m5hoDG4We8RFDgZzwUwK+3uDCjMc
	brcK93qNuI2436XfBpzyoJTnSh/B1vY=
X-MC-Unique: uI4kHMqNM8ylFR3BHhTijw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Se/4kbrB4gyekeCJKQbnUfzb+maUEUaooM6gS5iBcyMGaarmIBZeWjRGDtZm0xqplKNXZyuoxkIq0du6XKVgdopAPzzh3wi6Hv4xIgi9DNNuvhLYCd/k095RpdGhkQuVNpP8mvmSzk7FVt32FEJk3/RRpASfMYoyCJLlx9u8ybX6jyF4lAZP1+8BQNLH8wTtImlrh2pylx+UAy35ZTVE/wwcSnC8ySb4v2fW9Jp6JaB0qLxbrf/Oziwv+N/ant23FcOYvYahu3zSex2es9p9bGfNpZpKnPVts7+JinJIV81Ji/4/hvzuLqgqw9I96AoGJpGqvpQZCXcb9OgZ+K3LHw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=L3ukqdqargNajk7QomIvgd+mfoUGfHQ8FSpzdFZYCqQ=;
 b=GbrempDH+y3B1s39Eo6j5ZweAGdGDxDLE+1ES593WnUYNRcGLyeQfy9Usq1aCGf25hqExG0nzsLMZam+2N7D59RGhZl/aNKrIXA/B2o2gmbcM9DnCSLT440th9i/2ttQtuseMAydgC39x9JBjmZqAZwFsanl+ck4+CbQQuY9TUWg5yqbp7gvv4N6gzSuLc12WYg8UYadvv+A2ZYuH4QvSLSCSFyDR9BQE3fNW04g1zejvpupmE1bcAoSVCDoeuXvilv3ge+htimC7CiDAD1rTYY3J7hW5L3p4l7VZ72uKwxMF3cD+s4ltFBZwhn3rZc1lt6Jjwv040GOvA1LwcLeRw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] xen/Makefile: drop -Werror
To: Elliott Mitchell <ehem+xen@m5p.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 xen-devel@lists.xenproject.org, Fabrice Fontaine <fontaine.fabrice@gmail.com>
References: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
 <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com>
 <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
 <YN9gf2vhyH7w7V1X@mattapan.m5p.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <4dbc8f6f-a283-a5c6-4779-40c39ffb568e@suse.com>
Date: Mon, 5 Jul 2021 10:09:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YN9gf2vhyH7w7V1X@mattapan.m5p.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM3PR07CA0058.eurprd07.prod.outlook.com
 (2603:10a6:207:4::16) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f058d210-73df-4606-1d23-08d93f8c3bf2
X-MS-TrafficTypeDiagnostic: VE1PR04MB6669:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB66695A5D593A5DE1D34890B2B31C9@VE1PR04MB6669.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	JeS1cpS1mPGPfLdzb5xNvf4i10TzA091I/+w954PVbBi1QuQpRD6BGxrTpx700Jb+1tIYFyDDL8O7QN3BxeX8nJ7ZBzwk18a9nDkUfektTnozsdru7d4X6+OlElE8yenLJDT8f27ON2tnNcH53rWL5sarDT2Z0memIrnNiXm55QQrtjWB0ld1+U7MPTT7ZPyfVPgh5El0VMkuAQPxzvtOQyq9hHexB+8UjrZp6wk2qNnLitvyjceqUA0Ovtvt1i2POR6j30oZ3jl+akt8FoFG4AVAt3jScgV/peGeigJqNoMFKYsUmxixQgmyFVgfZwSb6oiBk1PXWoephGd6efbCv3AGrSfzH/7XfnPWbXFGmHTQejHlwh4qUx4nY+6+QfnVgRk2YZZ5RSnktNFPw3F34wTZ/mdQaoAQyazBhG4Vj43TYdVczfCHRHq1YLvuo0djJAKf+FNvRZWyt7TPlhClLQbJpZVDkL113rgDUDBVy208mq6iecCQbF/hpwUcxbKIX/UQACxy9YkMmfjfqiiK7lwus/+fy82OuHS5snGI9f0kFeTp0EKAmN3OwiJKJLtPoQdVqpAS89C/VOl4S+04T9Jv7tiZbHDUNk7SeubUFYTI6ZMSdOznYMJbpVZVJ7QxOd2G4YD1JiJPpCQsSa5XyaPfc5V+fbBXwkxVxApPK7/BTLpO8KniE8nOXndQ+K1gbppSWW0489d8GoLbSXtLIdVgl8N1M/1ZIlY7q0kOG4RnsX3KmNqixa885j76DT8M/skm+Dmeby95XskbXPSDCUk9qKu9kLskfOjAHv73cfq05OuVbsgw/NkPxUTJu+u
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(396003)(136003)(376002)(39850400004)(16526019)(2616005)(956004)(966005)(186003)(31696002)(36756003)(16576012)(316002)(86362001)(6486002)(26005)(31686004)(54906003)(66946007)(66556008)(66476007)(2906002)(38100700002)(8676002)(4326008)(8936002)(478600001)(53546011)(83380400001)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f058d210-73df-4606-1d23-08d93f8c3bf2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:09:38.4849
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: x/aDs50u8X+xdfNANgF1DarQDuFF6Qq22Fc0+C5msszpSkx2bHcKDAm2WPsveJlAVugYPrxiJzmTXBC2WrcADQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6669

On 02.07.2021 20:52, Elliott Mitchell wrote:
> On Fri, Jul 02, 2021 at 07:51:55PM +0200, Fabrice Fontaine wrote:
>>
>> I do agree that setting -Werror is generally perfectly valid for upstream.
>> However, for downstream packager, it is generally seen as an issue as
>> it will always raise unexepected build failures with older, newer, or
>> exotic toolchains, see
>> https://embeddedartistry.com/blog/2017/05/22/werror-is-not-your-friend.
>> It would be good to, at least, have an option to disable -Werror for
>> example through a XEN_DISABLE_WERROR.
> 
> Two people don't make it a majority opinion, but if this was a meeting
> this opinion would get a second.
> 
> I don't know where everyone is on the spectrum, but I also strongly
> dislike -Werror yet do like -Wall and tend to get rid of warnings.
> -Werror is good for continuous integration systems, not so great for
> releases or active development.

Well, my experience with Linux (when I started working there alongside
working on Xen, many years ago) was that many people don't care at all
about compiler warnings their code changes introduce. While Linux has
improved some, I'm still carrying a fair size patch to silence all the
warnings that I observe on various build systems (i.e. with various
compiler versions). I do this because in a build with (perhaps many)
pre-existing warnings it is far easier to miss the one you accidentally
introduce with some code change. -Werror is an imo very appropriate
measure to get people to at least address the warnings they can easily
observe about everywhere. IOW I've always been appreciating Xen being
different from Linux in this regard.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:16:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:16:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149889.277219 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JmR-00050A-41; Mon, 05 Jul 2021 08:16:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149889.277219; Mon, 05 Jul 2021 08:16:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JmR-000503-0g; Mon, 05 Jul 2021 08:16:39 +0000
Received: by outflank-mailman (input) for mailman id 149889;
 Mon, 05 Jul 2021 08:16:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0JmP-0004zv-O0
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:16:37 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 696cd4ad-1918-44cc-999e-e09b143261ec;
 Mon, 05 Jul 2021 08:16:36 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2051.outbound.protection.outlook.com [104.47.4.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-sgVTTz8FNU2OOCCQhsMMZw-1; Mon, 05 Jul 2021 10:16:34 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3295.eurprd04.prod.outlook.com (2603:10a6:802:f::25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 08:16:33 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:16:33 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0016.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.7 via Frontend Transport; Mon, 5 Jul 2021 08:16:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 696cd4ad-1918-44cc-999e-e09b143261ec
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625472995;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=s4bKf5hBbXgEo6a5rVtd54OMqS2mdJQCMJAA/Bq7mGw=;
	b=HFzJL0U9e6VY9li11eMf0BfssvFw/iCWpMWwP5QJ2kaL8nYxVqhBM6zfrfOQOf0LUQldl5
	Wh4mIAzRaQJ0L05QsklxbouwyOWzUNr2zph7tMg9iUiBrcy8i1t16bw7HZurzJ3k0bz4fP
	fxNdHI/penldpnmFSj4eQGHbUI5J/AM=
X-MC-Unique: sgVTTz8FNU2OOCCQhsMMZw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=b8OuvjGo2WBn4reXFgbCk9ESC1683XMZTjE0OYuPvlvEh/xhsjdhKixQR0IG4lP7REOPb0ZVRa3KRqmqMhts88JyvPG81bactes/x6oaXwtVr1DgNTlV0fbHFbE4eJCay+Wd3YyKRuaTGtMJuAjfhuzCqJ8yzJokPh7ui/xOt9D+cHNmj+nh7C9EoSnuT1kvoysxqO1gYNaLzxel5AqOciBEn1AWWVFvn+HNnNycwvMxIYzryvt4GXevuyqUF+yPfePYRxRsDpaAM2BsjbI2uwB+GDpahiNsdmvICwtLXNAA5nzlnRS+lv7PXR4IhkLxzxHAGk6OUSQqiACUkOHU8Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=c9CNVMBAy2PKdkWdmPmAm2tOflzPZitdmZ52sv7Jn/M=;
 b=jy4Aw4JyCOzNuTFx4U0n8MYDpGG6gN8ujwa2x1vkHHqAqw+8L6Hh9GaH0fhqNLUar0KhzIVe7JN393iyGQURuNeOWPH53MHeN0d14tiPLAuYz0PotF/tO3yRSuWEgE6cPh5c9s2hHDkGe+5A3IGDq4HFm1oFYtkTp8ZQt21sviqxakOiyvgqN+Dd24Tm3+MXHkPmXGkTC+6JnfiDh72i2rvJOKuiQ2xJp6Pk8CSW3J/oCVfznv/u6j1v2LnEQvjQygH99FJqewCqZ+wjBvzHjJy+P675HHkp6h2U88INVkJlekTSDD+Lb2mtofF+mCjv5A1/urRAzExNq666ylwMTg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] xen/Makefile: drop -Werror
To: Fabrice Fontaine <fontaine.fabrice@gmail.com>
CC: xen-devel@lists.xenproject.org, Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
 <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com>
 <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <f56c54db-d3b9-33b0-2c8b-6ee9098e633d@suse.com>
Date: Mon, 5 Jul 2021 10:16:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0016.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1d::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 391d14e2-f72d-4c2c-b6e1-08d93f8d330a
X-MS-TrafficTypeDiagnostic: VI1PR04MB3295:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB32954A82A9308C0445ECB4F4B31C9@VI1PR04MB3295.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3276;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	am+6zSCHFwha9591gd5o+rObWULFTHXg4CUFMr+iUMzGC5aYpsmHDyzyZ6lkv4rT4qPddfvYayQVTvvlZGGPhlS6+cziD8ykJw+wXAkCERwqtMZ+rut6NN4wktNkwMJpQNWp2lQPKt592t3bfZOEhUdM0QM4G8lSdZQ7jGyF2v0/NauPZ7vpc0tXrXMSeGjkDGZauH6jb6g5S+oyilh3OB/227YMGMkT1A8F4EYnekglKiU2ZxhxzpuxP3WGQ4jkXPLqMOQHcdEOSBvkvCVFEalcxf3rZYLv/upXq/USSR5HSJJMPcZFjMlqgPcWimzMT2DkDulbdim3N8fRJAsGuV327a/Q8elRf/nv7aeFvcqY/PWnEp2JvdNQNfFoy2BY+Gvv9K/gtOkHobn0FefhFaoVFUotXKvJygVVny/0edW0fowplHpiSAx9rE1/1cOwFfBEtjFqQjO//edbNqVm85r7uEE/nSJgS93xUhwJoYd4TrtrV+cIz/5v2xES1EFuqNn6xGT+HkLRAVqqr8FyErZyGf9n2vLmUGZGJmtTv555vcMnPEUTzbKDI8BgnHlB1JbIZ6QjXXIGbHfrURubE2QztXkRh80rHeaBSNuinK/E7ar1oJintXnLTovBuPSNhsxPfgwyua6NONL+va8QJmrNnpXyIRDLXU2hc/2LuWumkwEg2lPe/An9gmSw6W2POqcdi0Yzpke4pbftbDDNrjVXBTsSlN/tJahxGKizRGNArFGiEyIbR8F0x39tn7soiNbHAXt8LCesZ/dkhXvPJfgPulUG2p6vr7EnU7MztOIcWHlQ1yUoku3JAC2iRXTe
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39850400004)(376002)(346002)(366004)(136003)(66946007)(66476007)(66556008)(66574015)(956004)(53546011)(2616005)(83380400001)(38100700002)(966005)(86362001)(6486002)(8676002)(4326008)(478600001)(2906002)(31696002)(26005)(31686004)(36756003)(316002)(8936002)(6916009)(5660300002)(16526019)(186003)(16576012)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?3euCP8dflLixAMhamcGdQFxH1QN86a9W7IKADArUDOCeh82bQ45TYST8RT+C?=
 =?us-ascii?Q?urAa010GFF0CDNvHK+Up8RQfdBpXdRZmwKMnKL6RACxXB4W4C+br3P8aRCUG?=
 =?us-ascii?Q?pBAOGBdGxYKjNvH7wuJ64DDP7fbO3hVAlQE6wQ+D2AwpSve1CTKxE3tORd8e?=
 =?us-ascii?Q?iTrfHNGD0mi7WJK0lduSGPDWJ5HzkHTOFvBi0CrbRrXDMvxRzqjLIEK40aro?=
 =?us-ascii?Q?HH635AaKtsghJJ6sfPXdFYtrjD7tZglqujaOMEFB4c/aAlUIUq2REq/CVpHZ?=
 =?us-ascii?Q?/F+7ct1CXxtqEBw0b3h3v16SSpaHANPRaq6d6Fu94PM/FIJrlaSLoTX1UfZv?=
 =?us-ascii?Q?M/RmIv1LKCShU2+UL/YPytvnDz9aG1NBnosX5ID5RXudb9I/x97NC1KBGBB6?=
 =?us-ascii?Q?bc60AstpcBXcqCjjVWy4tslSaNxyCXxofDKDpFx+dw+DdEOmI5ntfY8+2Hi/?=
 =?us-ascii?Q?s9+7et0T2zs8nd3/OxA164AI2DKdWLW0p+UXGM60ULyfKqerT/NblBrBvUJw?=
 =?us-ascii?Q?w2c2ROVDzGt2dhnm8m35G7t1XuU//MdhPV52h4/UiM1do1MNaM1yP4O6OeGP?=
 =?us-ascii?Q?PM03346leNxmVzNB3rZO1wjSfhXTMqt9fMAjCMl7XgJE3s9yjEK/WqRjGf/i?=
 =?us-ascii?Q?k6PC4I2MbTFSzGemzTZe9+8iQPm7+MsFbJ1TH7t4iMDiUlUDEvjfbLo3rE8W?=
 =?us-ascii?Q?4AWK9t9Qc0bDYoZOq5WqD7uWaDR8d/yDprV5IUa+G4BIuCFw1/SURp3huhaZ?=
 =?us-ascii?Q?zQKrjadMtTTOYHWU+OIxq0B3/JpvQ6vLuf0UrsmZ2x3Qo1mOA3y2G/4O+Wl4?=
 =?us-ascii?Q?z6KN8a5j4u6GFSLZSWZrnSZ0kPqWFVt8rJ8Rr0cUmITWDZYUTX1y4wz3riz3?=
 =?us-ascii?Q?EI9b/L5s1JwgiaXe1k0yLLRa7YDA+9aPcfInuDZ+taTwH3GnJICSFOETrZLG?=
 =?us-ascii?Q?FAG6aR7r74jfh7a/6+hdXSPiYNq3DBBTXgsIGV96bKJRKw0HTn69EULq6fJr?=
 =?us-ascii?Q?A7kPj3tG7cyX896xzQV0fLcoQTYoC+z3kzJlspqjkANc/RCLd9URiEt0rfu3?=
 =?us-ascii?Q?MMg5nRybOCOBtTww+0HrtRVMouxFRUQH/JIWz8HQw1QmE8+NnPI+imM2Qzbp?=
 =?us-ascii?Q?2zNVu+RyXg87yEPSHVOkj+8u+Xx3nso70R85AwzEXabJlwh6/dZLPgonriC9?=
 =?us-ascii?Q?xiYo3KQzLSbMvxAf00V2Fwi3Cf4sW0XG974tjuifWszKNP49WpwmmMqm2JOM?=
 =?us-ascii?Q?TcL98SVjXTOvK+qjkb9dQiIO3zPJUYPMZwUR8RRgl5UMNKSAxirRAtD/DLtx?=
 =?us-ascii?Q?y/CtMJQ57PTLs/TDy7Sdu9LX?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 391d14e2-f72d-4c2c-b6e1-08d93f8d330a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:16:33.0583
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: uae/tD/rspd66FK2AmluqWm03eFdXcww89PzMI6MnWWX8pOwtRZRL8iX0GCorQ/FCFP+mvmkR7WCidz+bwD/ZA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3295

On 02.07.2021 19:51, Fabrice Fontaine wrote:
> Le ven. 2 juil. 2021 =C3=A0 19:34, Andrew Cooper
> <andrew.cooper3@citrix.com> a =C3=A9crit :
>>
>> On 02/07/2021 18:06, Fabrice Fontaine wrote:
>>> Drop -Werror to avoid the following build failure with -DNDEBUG:
>>>
>>> In file included from <command-line>:0:0:
>>> /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/xen=
-4.14.2/xen/include/xen/config.h:94:0: error: "NDEBUG" redefined [-Werror]
>>>  #define NDEBUG
>>>
>>> <command-line>:0:0: note: this is the location of the previous definiti=
on
>>>
>>> Fixes:
>>>  - http://autobuild.buildroot.org/results/66573ad0abc4244c0dfeac8b684a7=
bfcc31c0d4d
>>>
>>> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
>>
>> For better or worse, It is Xen's policy that -Werror will remain.  95%
>> of the time, it is the right thing.  We will however build failures
>> whenever they crop up.
>>
>> This one is weird though.  How is NDEBUG getting in twice?  What does
>> the rest of this build environment look like?
> NDEBUG is added by buildroot in the command line if the user sets
> BR2_ENABLE_RUNTIME_DEBUG to false since
> https://git.buildroot.net/buildroot/commit/?id=3D5a8c50fe05afacc3cbe8e734=
7e238da9f242fab0

I suppose the build environment setting is really intended for user mode
code. I question its applicability to the building of kernels or
hypervisors, but I can see that opinions may vary here. If we wanted to
honor a pre-existing NDEBUG, how about simply making xen/config.h have

#if !defined(CONFIG_DEBUG) && !defined(NDEBUG)
#define NDEBUG
#endif

? This then raises the question though how an external environment could
achieve the opposite effect of suppressing NDEBUG's definition despite
CONFIG_DEBUG being set. (The main point - hence my view expressed above -
is that we switched to Kconfig to centralize where settings get
established, moving away from taking ones from environment or make
command line.)

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:18:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:18:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149894.277230 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Job-0005ed-Gd; Mon, 05 Jul 2021 08:18:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149894.277230; Mon, 05 Jul 2021 08:18:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Job-0005eW-DV; Mon, 05 Jul 2021 08:18:53 +0000
Received: by outflank-mailman (input) for mailman id 149894;
 Mon, 05 Jul 2021 08:18:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0Joa-0005eQ-5o
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:18:52 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a08dc4ba-dd69-11eb-843f-12813bfff9fa;
 Mon, 05 Jul 2021 08:18:50 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx658IjKh5
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:18:45 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a08dc4ba-dd69-11eb-843f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625473125;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=p+Os4nWW2/EfYs3AdH+v+c1xdUv0OHbHha3a92jlNLA=;
    b=YPJUKZIsn94iV0CtlRLYy+mp5fwwISb0QRsOWgktxznHJPswp4D7pd9Mo2iaG2YJn1
    CMKN6MYSXlF45k96Q4TiqiMOrMvXj8iIc0N+2JhMy6Yh6sn3MXQwKrMO6pRt1k/Utc9f
    ByKPopAZBOJgC1IQoCz6qUm1GeDvl/RwjFp9Pn7MOBI2r7tFaf+okH/sW1szDnseniCC
    8DcvyAiZY8n4wZQ7XaJsgmIPEc0tf2NNOlNI5bFDQVO5RB5xBtEaQ3HJVqfNGU0EYDfz
    fNFf8oXKkzKb9z2l/e60Dw40j2zOBH3c9VemwpYST9PvJ9BXhSVKJLQ9DNB3kCA23Zod
    LH0A==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:18:38 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Marek =?UTF-8?B?TWFyY3p5a293c2tpLUfDs3JlY2tp?=
 <marmarek@invisiblethingslab.com>, <xen-devel@lists.xenproject.org>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in
 format string
Message-ID: <20210705101838.2f760ed9.olaf@aepfle.de>
In-Reply-To: <e285cef0-4c85-35a1-37a9-f56ec9122002@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-7-olaf@aepfle.de>
	<YN88m0tvHKxF7+NI@mail-itl>
	<e285cef0-4c85-35a1-37a9-f56ec9122002@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/vjqlvP02Sqe5JcDvh8/KeO2";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/vjqlvP02Sqe5JcDvh8/KeO2
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 17:39:54 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> However, the % (phys, ) with the trailing comma is deliberate to work
> around a common python error, so wants to remain if you're keeping the
> %-formatting.

What error is that?

Olaf

--Sig_/vjqlvP02Sqe5JcDvh8/KeO2
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDiwF4ACgkQ86SN7mm1
DoCZEw//RgDM8GOUVPL5r5QukLmJy/ZteSw8A6QzvLK4Trtsk+0ASHNCyjdmAY/2
tgK0+PMZcsZUykwA5DDoV0fBKytaMrQG3MRKSCNCtlJkBZq87BngUQI6WCKBqitc
zrfT38gAC/B51Oh9PEjj4G2C/99VkQsAYuMsBepfkcu50Sh04KhBrmAh1h/ZXscd
E2n0qO/ohZWcuEx0eR5nBksju3CPXeo22qv2H3dFNPfsqaSZk1ICtzEQDCtjJ+HN
yYEeQmxlGsikhOq3pJ+H4lE4ZmMj+bcMt+bq3Vch/+74uRNBWBghCsTeLwEvNJHQ
f89/J1LAnxOFPf6/4dDOU2aMGNbTOSMWa529uDOSkyXocWCixl4Rqq4Wam9SYvno
qdNFyKgoMpg4rj9SurxNBcy4zOkuiivHuqmoostUIhzd1t0yTri2p54Zswizl8Hw
U91Btmn+JwR2LTnFUf/wiEuNvTuJxKm3FlRK2adeBpL4a+s7tsPl9DUBLz03e921
T/HG7LFgAmsh4EXvx9FukYGMZSS22sa1s1T2BvYTof6HAkqeQqvRugFbaAUkPfl4
sufhk0z6DS9npMT4BjWrQ0lrQZBOQoaUctu+/y2FwaHL1PtUsSRNXp+I465d8eCC
ajmR9yg5xBgW7IGueIlU3q0ayT/ZlpRoTC+iO0RgRVLTANgtAQw=
=ChGU
-----END PGP SIGNATURE-----

--Sig_/vjqlvP02Sqe5JcDvh8/KeO2--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:22:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:22:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149902.277240 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JsH-00077B-4r; Mon, 05 Jul 2021 08:22:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149902.277240; Mon, 05 Jul 2021 08:22:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0JsH-000774-1S; Mon, 05 Jul 2021 08:22:41 +0000
Received: by outflank-mailman (input) for mailman id 149902;
 Mon, 05 Jul 2021 08:22:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0JsF-00076y-Db
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:22:39 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2860f092-dd6a-11eb-843f-12813bfff9fa;
 Mon, 05 Jul 2021 08:22:38 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx658MWKif
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:22:32 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2860f092-dd6a-11eb-843f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625473353;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=TTZhBPHaLZHYqgrLV6CgQpnqgWoQZfzZzROPIhu2JMs=;
    b=oK8oCkZO00ccyeQLKj013PBi/qR7VwIpyYgMf9bK5Z6doerTQVMZ+4TYdukudELITF
    82VqpnorjyMS5EWbnpz+7iIILAR4d5gXYerIkXJvFH9QdPob7n7JEIhy7ff0erUjM5MI
    R6r56TiaZ7f7AaydwAmimzb3bgVVy0Ug9tWpOaKSrErvjJpwEp+5hwc/yOeafunKdHCK
    BMDSRpk6pXUOr3sdluVBYqgnH3NTm0W4tK2JvOqkBD6q3DPnMJJc66RbRvFpJR5I23z9
    JLdwEoOmUqad1gspSzm3lv87+C7xZJruTFyZc/PTUXLTSPi2WWP7b3Xw0+eiuLaV6HB7
    UlMA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:22:30 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 10/40] tools: add xc_is_known_page_type to
 libxenctrl
Message-ID: <20210705102230.48a86473.olaf@aepfle.de>
In-Reply-To: <3c0efa9b-aaff-b4b7-0fd5-9eed32b20e01@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-11-olaf@aepfle.de>
	<3c0efa9b-aaff-b4b7-0fd5-9eed32b20e01@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/LXSuzQd6=G1afiLJ6WN7rZ1";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/LXSuzQd6=G1afiLJ6WN7rZ1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 20:20:08 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Subject needs correcting after v2.

Apparently I missed some places while removing the old "xc_" prefix.

> However, given that this is in the save/restore common header, does it
> really need a prefix?=C2=A0 Simply is_known_page_type() seems good enough.

Sure, the possibility of clashes is probably low.


> > +/* Sanitiy check for types returned by Xen */
> > +static inline bool sr_is_known_page_type(xen_pfn_t type) =20
> uint32_t

Why is this better than returning 'bool'?

> I can fix up everything on commit if you're happy with the suggestions.

Yes, I'm certainly fine with it.


Olaf

--Sig_/LXSuzQd6=G1afiLJ6WN7rZ1
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDiwUYACgkQ86SN7mm1
DoAFhhAAlAs5jdLBG/51YrRTD7/0TLw1xlnNkmG63DhqGiVBsDvTjjMSo6AjBvq+
I0t+/ytpMuGsiUsMuck3qaW1Gj0EXEXVugqOrBeRClC6YrU00E5ITXh6YDdiRgG/
NdodWDYfu2aBBQ2E+BIRv3oOMSWUi/oEnTzSb9gx7lgVfwjnr3F2nadv79C9Q3Zg
r8Xac52brDzINigl5DAe4ycZDSDGo2tydQVBxLRNCd5T0FB3gRVm1ILLtDjmoorP
sw+qdFWzfRZU/KT+KYBG+1V0guTqPp2wfWRRE3scHaxHlkPqwKcQ0UJpj90Hr60A
HcJ+KcMK1xvDDoBtNsVMVdHUAievcS57YG2LBjWxdf9ni6B6Ha0CKoyMTo237dkW
beqxHvQb2kc15yQ6M3DiYehaLp5NgzNDkKu2UYHWO1h2aPeofcwWvd1fKicL8cHD
H36wz3QvIt9MuVLO+8pMWCKBFJH1mDhg89m2iV9BVMLG+2Unwgjr/LFiGEKTLtWO
ny9ZX8KPJwcJ/v93CuRR7PmG5jj2PfvF3yo6ADo7YDS1ywH3voN+o0k18V7CwXVA
Sc31Go1L58yUHKqgI88jQ8PTQ37U/RfN+1Clu6T6AkEcvDTzXMW5ihEc+DKbLn0I
z6H/1/H7cphjXsletWrACqKlhETfQiivUUwLIGR+qoVfcGF4bk0=
=reY6
-----END PGP SIGNATURE-----

--Sig_/LXSuzQd6=G1afiLJ6WN7rZ1--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:23:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:23:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149906.277251 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jsh-0007dB-D5; Mon, 05 Jul 2021 08:23:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149906.277251; Mon, 05 Jul 2021 08:23:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jsh-0007d4-9t; Mon, 05 Jul 2021 08:23:07 +0000
Received: by outflank-mailman (input) for mailman id 149906;
 Mon, 05 Jul 2021 08:23:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Jsg-0007cu-K0
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:23:06 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 38488aa6-dd6a-11eb-843f-12813bfff9fa;
 Mon, 05 Jul 2021 08:23:05 +0000 (UTC)
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2054.outbound.protection.outlook.com [104.47.9.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-4-NCa0M6c4Nf--oMymD_jP1A-1;
 Mon, 05 Jul 2021 10:23:03 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4381.eurprd04.prod.outlook.com (2603:10a6:803:6d::30)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 08:23:01 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:23:01 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0067.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 08:23:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 38488aa6-dd6a-11eb-843f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625473384;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=6I6mIlcgCPFdIPQ9lBmvmFHFSFqhliUgJ9G7du5aNmQ=;
	b=T78Q3AXumWgU8aiw7Kdnvl7FxJxeFovOp8YFR2XQ2f8UZhlbYaozj5sIHQCyFm+jRN8aMA
	BAexTAOWEz/JK/KImjCuhzlEU7CK5RLNAGIM2k9YQDQwnJdHHM7O7snldNLVq13KO3ArDp
	QYFGKguf9Pv/Uf1oOnwUKS0FZyLGv2s=
X-MC-Unique: NCa0M6c4Nf--oMymD_jP1A-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LDxzAHj0c/X+8UcvDdLaub8tfE/nr6K5tklmYhUfUlBkp7Nl7ZSducvurAEhkOcSo+8pdd2uuNLdIy6Rp/aXPTnup7QmW5BUR8DQwM7b9BEykr3rq7qvet4DG8btCPNzuB4qc72zJglMBo6WoMY+r/9tWLtf04Nu+Hl+2hfcOBuG0cQSNA7ll7DDBxjh4Lt4Rg/pl5XhtGGanc3l+Ece3XUROIJZKHJi0WMEcszcrg40GbBIw5d5w57G3ploScd3jTL/9O29JeeGKUQcb0szTcEAdtICVF5Q3EUB1fjt+pAwUZiwdQd583kk+iu28UAgeeqpf9l2cqaQLs826daSmA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6I6mIlcgCPFdIPQ9lBmvmFHFSFqhliUgJ9G7du5aNmQ=;
 b=UjN7+91zY+GR9dMtgkY0rjIgA7k44ugslwV33lkMWh7ETzcn6gCWbEb0s2d2WlwM3C/DviKMv4Hw9+N+aHaLbK0ft7m2H4ruVDa5Peo5xU+zWjG6Ukm1crB+mWwlmzcuoiUcttQ43jN7tUO/b+D01GkqhXBUdg7KRwgEG3/w6AeXBkil4BHnT5nG/tlbeNHU1c5gohRQrT7RwAzHD51IakoQb9uGqniOescbUvwf7bH2l6eYVWlx+HwT+Jhd84UAz2XSjNGGKFn5QJ3Oqi1FkzRg3XIK5Agxjgmg/R0mx3XzF5CGgkgpxSns7QBVShzoyEg5JvLrVvUrLJs88zkX/g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
To: Olaf Hering <olaf@aepfle.de>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
 <06968742-355f-ad37-0681-e51eea256414@suse.com>
 <20210705100228.4947ed4e.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
Date: Mon, 5 Jul 2021 10:23:00 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705100228.4947ed4e.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR0P281CA0067.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:49::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 804f2bdb-9019-4642-e7b6-08d93f8e1ab6
X-MS-TrafficTypeDiagnostic: VI1PR04MB4381:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB43810754D4DF7390BBC171F5B31C9@VI1PR04MB4381.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3826;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	u3+ZdEfZ2ZD8gB3F/Hdv0cm1w2XTfjwON5dIQeLFI8o47/Ki0uREJOcw1KNbdCnqDTepgFILYh1sXiXLRv5kPmPdTuVm9+4bQ1epwW9VlYX1wz+9JLR9hPszrGP9ykoNhck+UDkM5nt6T53+to5wQvK+Iz32Z4PVsqBVlCzpjfz+YGU7Bhp62nbbTrMmvGfDGhWDWoGPfcyA5aQQrERViDoKGJ/w5WQuTWjRQWiB2Z5wjZNUn8d+nnPFrY9hAvThzr+cf7XjoT5ljJLbinA6gTYGbCRrbEgs+CB2sNhNF03l1ooWsUQgqY5yOtDNhLO4npVnSbYziY9FIALmMgJqtDXgLbvzdWRoJXb5v+IRy0rEfJ6Gr02kzCvSDijDoPo7ymPGHsqjeCrWt4j+HopTIyFpOr1cx/G6IN6Ul58eAjzeJ3BweCOuwd4M5Bo2enaUkcWd1MmLvyNvJgZVeK4f3Uxi7i43Gb/iIsA1XkiMoJA0eph9RkYh+yitSUUM5qgs0yFG+zEC9di7qIu6horoujJy30hI+jycXaIzwEOV0TZ9ELOHmAJDDneTMLh4evEOCefY+QxbEHz0uFERHj5W3runUYuIMsetsReRW0Inwx5ZGcf1TN6TKCqxrf51OnjB3nCwrr0LRu9zajqNyekhHibiOnNC6h7vgvNPXqi9b+KV+hGgeiUJPvQHCvpOvjdPbsy3oeKL6asZs3OoWGfeLWKR3A2m+Ueye0EJV0Si4pU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(376002)(346002)(136003)(366004)(39850400004)(2616005)(38100700002)(6916009)(956004)(54906003)(16526019)(66946007)(186003)(6486002)(31686004)(4744005)(26005)(66476007)(66556008)(478600001)(8936002)(36756003)(8676002)(5660300002)(4326008)(86362001)(316002)(83380400001)(2906002)(16576012)(53546011)(31696002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?Windows-1252?Q?QirCUJ1fU/GF3JnVxbZLBACr1/b8d+TmGc5gj2Dv0m6W0QxkpOgJCI6G?=
 =?Windows-1252?Q?rqaj46R19yNvQ6Kx+BiS8OMa4NjI+KXzBEpYIcPBFmFgPpYh2R9pQS9M?=
 =?Windows-1252?Q?fwejlBfgLdtf/dlp+iifUsiTqXAo/ZaN986eW2uk/VVqgLK7Nf6eSO/f?=
 =?Windows-1252?Q?JmhYCRRpleuvTZIfqjvBUXHU//hgzPAt2XAzJl1wWJC3mkTXLf0rgqmr?=
 =?Windows-1252?Q?6Fs1CAtOsTzNBINALX4UGVlwqEcfiQOpSAHZuKSb2ILxK5jjcmBnZuns?=
 =?Windows-1252?Q?CfmZd2S4oMX/Dth2UNm5/rHJoyubyz4tXSLBpaRYjLMotrxAF6UZlOYr?=
 =?Windows-1252?Q?PPepFEBKW7OUW6CUY255UDAPiFHFUtnIL3dZWd8T1E32UpSW/mmnEQ8d?=
 =?Windows-1252?Q?A/UK7nDADuZGXEgMjNtLpa3txMgWrOK9r98zmswWlDfiy284HHGwy5cu?=
 =?Windows-1252?Q?Im+f3iyZZ4uSnbDxSZ4hhH64EnEvVKuQ+sS6c+3l0nXsbGjcgnORdVuz?=
 =?Windows-1252?Q?Gud7icAIKQfCR608H3uxlUc5Sr4NbZsgPbRQ0scLUZ3KRJ+t35t67roD?=
 =?Windows-1252?Q?ZQ+Oif4iklzr8/pXarYJGeXncZvB891Tm2OrFzYsibjz2vtJTgW/l65u?=
 =?Windows-1252?Q?+N+wbCynrJAqqFzhr/iWg0AsXAlT263/XymiirHC7GXbcyFIAHjMhLrQ?=
 =?Windows-1252?Q?R60R+zjIYDQyz/zAymcG2zrCHibZBlT+wo1ebwdJvQtM09xx4Mq9jOt+?=
 =?Windows-1252?Q?Vmo8BzQOROz9h8G1EaTlGasaxzljGOqcUIUeQaElAzbhKPnb3Vhl+xS5?=
 =?Windows-1252?Q?k9atMdmLCIJ/mEdaPsDFyq2N6lZVlGMuPS7Q4ZlC3xYKjdQr6lbvtrdn?=
 =?Windows-1252?Q?ySGm5u5GhIwQNAD/Z2Uqt6gJ9CcuQGBJwypaWuqZJ1HoxweyoJWI7YDa?=
 =?Windows-1252?Q?pRpFG3Ys7CApNJeDokHmbeYxFGq0Pl/yTo9xZIn4EXoAi2abCZDAzS91?=
 =?Windows-1252?Q?TC8qnS4Pw7mWz8g4R8L8LkKmaCYO7Bqz5K+YCNjiOHAtiIIH4c3SI09I?=
 =?Windows-1252?Q?IgZBEmNlDk2QQU2MEcZwmF0fEeu3hIpBiX0nuWawJ75SYBlwHLRcZRyx?=
 =?Windows-1252?Q?aN8SGHL129A0FVgbwotdTi+QcyJDmj81G99U+n3U+hZUQQthR/R+zN8R?=
 =?Windows-1252?Q?G4XioFjHfgoVul15trlcX+l3ew2mRrGJ8C8+ZZXyr/Zxwj1EzB0bzSRz?=
 =?Windows-1252?Q?bU3Mo9QymM6i8+lDU59dJ9gFAD47x1/8/YsIUCbIbOrHWtNuO4p5A9Wx?=
 =?Windows-1252?Q?oU7BCWZzilgz+kDi3aUzxVFMpD1IxW5KmzwkcKAi6PZJEjwz16Na8YZw?=
 =?Windows-1252?Q?rQDqMBsXLPu6benV36O3uFhH2fGGvNEVmhY0YYzNJw+gNUseh9GvFIp6?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 804f2bdb-9019-4642-e7b6-08d93f8e1ab6
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:23:01.6795
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: DKTN5XDcF/2Bs4OmP9cBjBFODbijo9ghvDFecwj9IDMbi4QlZ8Elh4XW/1R6KVU1eXzYLBPzp9kbY+GMpLPJ9Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4381

On 05.07.2021 10:02, Olaf Hering wrote:
> Am Mon, 5 Jul 2021 09:57:21 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>> What is "the grant problem" referring to here? Neither anything above
>> nor the offending original commit has any reference to grants, or a
>> problem with them.
> 
> When the guest is paused during final transit, the backends will
> continue to write into domU memory. As a result the final additional
> iteration to verify memory on both sides will always see errors.

I see. A similar problem then exists with at least the FIFO event
channel per-vCPU control blocks?

> The code has no way to know for which pfn such mismatches in page
> content can safely be ignored.

Well, in principle this can be known, but it's expensive: For a
paused domain the grant table can't change anymore. Any pages
referenced by a valid non-r/o grant table entry could in principle
change.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:24:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:24:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149912.277263 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jtv-0008JB-Om; Mon, 05 Jul 2021 08:24:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149912.277263; Mon, 05 Jul 2021 08:24:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jtv-0008J4-LJ; Mon, 05 Jul 2021 08:24:23 +0000
Received: by outflank-mailman (input) for mailman id 149912;
 Mon, 05 Jul 2021 08:24:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1m0Jtu-0008Iy-QM
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:24:22 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.80]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 65a38be0-dd6a-11eb-843f-12813bfff9fa;
 Mon, 05 Jul 2021 08:24:21 +0000 (UTC)
Received: from AM7PR02CA0013.eurprd02.prod.outlook.com (2603:10a6:20b:100::23)
 by AM9PR08MB6802.eurprd08.prod.outlook.com (2603:10a6:20b:308::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 08:24:19 +0000
Received: from VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:100:cafe::c9) by AM7PR02CA0013.outlook.office365.com
 (2603:10a6:20b:100::23) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 08:24:19 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT005.mail.protection.outlook.com (10.152.18.172) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 08:24:18 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Mon, 05 Jul 2021 08:24:18 +0000
Received: from f1e79c82518b.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 AC153FE1-2DB6-43C6-86DC-8DFF67DD35E2.1; 
 Mon, 05 Jul 2021 08:24:11 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f1e79c82518b.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 08:24:11 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PAXPR08MB6589.eurprd08.prod.outlook.com (2603:10a6:102:159::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 08:24:10 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5%3]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:24:10 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO4P123CA0461.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1aa::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 08:24:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 65a38be0-dd6a-11eb-843f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=tEl4brartcAHQUPbgw9ZN9Araas3hK5D+e7rf16BL8U=;
 b=qTAvGIb8pc+5GZqweFCFqFdSvU3clQ4SsKOMe+73X98hE/QV7ZUigq/f11r+z+a/U7FUXzKpxf52coQHQoMi5wWJPXjXLWpMZPewKfPWi6zMHk2DkOLMOAt/isRI4QXpUvuhrRVEflAhLlGu1mkJmBBGqlYZtFQo7NI09j3H2EU=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 0d3061f4468de5f4
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FTM334XLOVzTICEGsc2PyISJGN+4eM/70cByTZVuNWl25N6rIrh8z6U/qCdOn/ZoZw6xpTdhpf44OFYRy8nzT293wqlkSIZpXvbbJsoqEob3SyBwjzIOVD+6lQe0bjei2WEww5EkseswITxP9PpPcGg0FcWdn8QuRhNu14HpNZgdqnotijdZs6JycwFFDaPO9ZhI40JaQB24aeKjQVwxbDmiSvKBuV8cGB+8nTK2Lod4i7onNYHmCRp+sU7iqASe0ZK8WJw8AB8743xzV/C2BZP9KA/kuBKUQ5LfkxaEkeIE7ox2oEKLYZ0GiOZHB/q5erDAZu3Atr29fUZSLm4ivg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=tEl4brartcAHQUPbgw9ZN9Araas3hK5D+e7rf16BL8U=;
 b=DqQrucEqNsK8Gk7LjELBg5rkoyFaYLxXZNcuMbu95HjyzZULmGWbFfnjyNyyZYDOetFXlzZG6bnI697g99oz4wA+nGYsgFTn71wt1rdief61tnnO3tMYAAasOhxSURAGDxpShGuVtHdHpj03Ol/oMFWviZY9xTn2kxLuH465ZVLfv8/nUZs2W5FzV+/06ZAlk91wMGGgecFe6viP0fjsQuSV9nEVF+6p80/IXyBgZSFCQ2/wTiXHSZh7D2f7DquxxuUEvahsEAIEAnk5U+4DOC0Mcw2dvgXKyuzycjqNjmt1HV3H7wVKbOyFxp1L3/R6ibi5pw92Y5mNViw4VRl4+A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=tEl4brartcAHQUPbgw9ZN9Araas3hK5D+e7rf16BL8U=;
 b=qTAvGIb8pc+5GZqweFCFqFdSvU3clQ4SsKOMe+73X98hE/QV7ZUigq/f11r+z+a/U7FUXzKpxf52coQHQoMi5wWJPXjXLWpMZPewKfPWi6zMHk2DkOLMOAt/isRI4QXpUvuhrRVEflAhLlGu1mkJmBBGqlYZtFQo7NI09j3H2EU=
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=us-ascii
Subject: Re: [PATCH] tools/xenstored: Stash the correct request in
 lu_status->in
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <20210701140307.2516-1-julien@xen.org>
Date: Mon, 5 Jul 2021 09:24:04 +0100
Cc: xen-devel@lists.xenproject.org,
 raphning@amazon.co.uk,
 doebel@amazon.de,
 Julien Grall <jgrall@amazon.com>,
 Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>
Content-Transfer-Encoding: quoted-printable
Message-Id: <42DD523A-826E-4404-9B50-2BF0494F882B@arm.com>
References: <20210701140307.2516-1-julien@xen.org>
To: Julien Grall <julien@xen.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO4P123CA0461.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1aa::16) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 24b16ae6-a2d8-43e4-c966-08d93f8e48ca
X-MS-TrafficTypeDiagnostic: PAXPR08MB6589:|AM9PR08MB6802:
X-Microsoft-Antispam-PRVS:
	<AM9PR08MB68028276F80EAD1D55DC8B79E41C9@AM9PR08MB6802.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 8koR8Qwg/F0YE+u6TeQCr0UIRT8GHT9ln/fw41Uw6eUt2DpluJznsOOgdneFfn2wjGsBs35MPeTD2WRxGsaJ28Not/GTfqYpdE8iH5RbW5+SpwilITevhWLYxEJh4f62RO2inmmUSGiBwX1EcPuCr0bWHZafhcsKaucPsO8hteRvQ8yU53qs0Kh8mjRFic3Gq5vC7js2Rpl+3Rycj6C7Jm0GEuubkpS3zOSkQPJwMlNkgon5qsmzqoQQrfqLwrQJRphKbSozkwWR77taxUQ4cvi3BQf7IIlezBfvc7BsRmMDh7MsWtjAT3/e6hj3jE0LFnJY+eU3Am75VbOx5JD1Sm1fhuJD8Ri/aWF8+ivuV55Q1cUJk02wwK/gJ8TLjyEAV6hbaQMqt8rWMfzLPtAbYUbLguSE5H6U/htxpNOH+NTMEZKF2c1btM2KDC2Q9CDgdp2yWjKgItoPaUSPmm31CuWDL2yFmgWWcMZm54eBi1GSnVs+n8mtTTuX07oKPnb3lUS822ftjoVRCJQThxN/b86ge58G/2Uk3PSNcz5y9dXArC2EI+t3JPjmUzICjdjt5h9sn89N0N/JJ6zS4eyutPIy4h4I8gV78OfMNRAGezMlMS47kp7tf4FOqsVlFZk9rp8wFQeyvcpbu8dIZ7z9OWqDef/SAWBTGH2VWG8PoS5ML7wo/fKEcV6L3mz2x+VrdKsVLtf6UdvG/Tb37W6vfXiH+jc1WG3A72tdHFdFhaQ=
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(346002)(366004)(136003)(376002)(396003)(86362001)(2906002)(6506007)(478600001)(66476007)(6666004)(36756003)(186003)(16526019)(26005)(66946007)(66556008)(53546011)(5660300002)(38350700002)(38100700002)(6486002)(6512007)(8936002)(54906003)(956004)(6916009)(4326008)(33656002)(44832011)(8676002)(52116002)(2616005)(316002)(83380400001)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 =?us-ascii?Q?N0psGr8S/FxZJ/DkFBVQU/fABub+huovF+Kc2F10Q0Ye1gytExRS21OtKTXR?=
 =?us-ascii?Q?bQ59TEHLFS6/QOHWnAIHkFSemfK+RS2Ldu9a1U0sdbzgpfQVmC1ytMW8k1NG?=
 =?us-ascii?Q?44RYin2RQtuXOvK5DXWfA9oslVpxa+80KArcwPmSUz5j5SH0NSiwkEbREMzD?=
 =?us-ascii?Q?zOg8gyLfyOSrLU8f8+IfuqTTQV5Hb+eoK3BytDM/UpGEQRb202aS2FogyMk5?=
 =?us-ascii?Q?YFIN5q596ul7yCjVK1jm+cS0YQr1eG6JAp8+fH1H4yvrdaLBuBBm2rucIK19?=
 =?us-ascii?Q?mHHup2jQprC0LEJafrFUeMog3plsAmAVO3a1M21ak8UK7s/fTjWLzis0ivO1?=
 =?us-ascii?Q?F55jQu54CgZxBYw4qjifr239KpaGJ7r/ZT/ACDRvK57kjMJ8U7VhWTsTGdwj?=
 =?us-ascii?Q?4Wm6o91pn5u1XDPqhh6wtStMG9LPbvQYnrmNNg7P6pqYbz3QNnYtkcj8wUk+?=
 =?us-ascii?Q?93bVa33HEMnmXWbK7mRrPmYgmw5g93TeZQtmJ8uJDyIlQjkACL3JgwQPMQMj?=
 =?us-ascii?Q?dRMpNDwZoilxLUy5G2VPa/Po9eHQa0+dZV6rjmxPOSWtKXtslWaCfAfYO+W4?=
 =?us-ascii?Q?E7E2DDbr/3n73ueBujPkc6LhY9K9lpWUKoOzZ8VVhFCuTAUfFlUQEn3FcUIY?=
 =?us-ascii?Q?4UJ1D2dVtCj8u9sjHB52pNZTs/pOfZfEcIO4lLUx5FXijw410f+ZTsismsmt?=
 =?us-ascii?Q?rw5b7K/VTTURg7BiM5Q9yla64uqJvF/m13hilxoqfdzH2OhVhXIKfh1CcDBa?=
 =?us-ascii?Q?gQ2Ednu36Jej1CM8OnZ/ckJhGoDo4IYObABYpKf3+33KaVwRK57+B9NR+j08?=
 =?us-ascii?Q?7ONQOmGm34xIR0CH9oIl7/j+eNCOM3bd/OZp7e8TYD4SaO2kzLt0eYxCHWTX?=
 =?us-ascii?Q?+YqDiSSk5YBPY1ddq/a3Pji+vwrSL4/qkq24R1EntT0IN6bK6x7q5hiQyvge?=
 =?us-ascii?Q?qnc3XHvcqPjYbMRrZo2j4zuCxnH6XH0g0MouBN38fdlVUS/cDxoeXZo5Ae4L?=
 =?us-ascii?Q?eVPr02MQdGd4/qoEoNKuqAfpxUkoPN9zPrP+b4H4KONQ7MQ2WLS75ap6Z+Bv?=
 =?us-ascii?Q?iEqonH9SsfvIOfGS5LHJyG2nMvM2nBfCTLDURhgwuYEA8/iyGORx/9VfXtYX?=
 =?us-ascii?Q?5VC0G4tubtj/XB2iORACuMK9cg4kgGsNbyf5sacvIvsC0zuFFfWS7UDDjQP3?=
 =?us-ascii?Q?AgXfKjCC5CJ03LKeVt9ufHNmhxl6y7+2MPFb3Slxp2SveqI0zD6jw7sPpA5a?=
 =?us-ascii?Q?SS+g85Ci0FKk15p2eYWWvD20yYXhxC3fWsdBOUsnwQC1P4hzIoYfKgM8BVNv?=
 =?us-ascii?Q?x54URYqZcxERkJ+HphmAD0If?=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6589
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	9018e6d4-41e6-4f5f-b42b-08d93f8e43c1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	TiexPKlLHeVLqbOJuxEUK3kbhZWwGlhnMvQ5b16D9Ik5/VCfYW9d37zisjgiING223TAKTWK9xcRHmEYd7ZZBiIh/YkEdlq/Jo4O3h0idE0GuX4TNV5D1gT6hGQyaIRvs+99CIRsMrBzkJBoOVDczBrY4z1RHG8XTWNoLaANjAgts7nD46Kv5ADLGKetMxgKW0ybz5gx5jlsunmv/T4iHMgDVXQEOtSQ61vkcRK97EfrpIvRDBmXka/MLfbmG97bpcaKGO89QhYyBbeD+IjHYM1ywNFObzN+Dt0D/ocWrL0KLMen+cuvQ9y+WCOUoJ2mLhUFwhPsO5CZrEXtBDWvSN61De7kE8yw0d3xCV/WkF4dWVwp8AZtHnzIkDoMXNa0+7ErIFkMROEnn2s8gf0iCJRK136xl7iwXBeZhKl8sq1Q18dOUpFZE9YUO6Wt42lr6HXo14jqODvLt5NrFWTC42Myfe84mTayQhZIwQWch7m9GWEsbFOys7/HxWKgIUpTZ95A+xU4N97/icwaJxHzFNHtLmdwbJJJ0waajwE3tlOqD4jLe7wCMyxugC6HxY40PZxooBCooLXe7kJ1Koxhu+aBruLIp5CKUVX7w6HijtfuuyL0ZElzvpvpYlALRCbaXckC/wxq2cm3mGP0s7iEOc4ACX5q+EwiTW2xmTbpum932WmWFqYL1mzIRDAbWv+AMpChlz4I1k4FpgwUOo60Tw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(376002)(39850400004)(136003)(396003)(46966006)(36840700001)(53546011)(44832011)(82740400003)(6506007)(6512007)(107886003)(4326008)(186003)(86362001)(16526019)(6486002)(356005)(6666004)(26005)(33656002)(6862004)(81166007)(36860700001)(47076005)(2906002)(478600001)(336012)(54906003)(5660300002)(316002)(36756003)(83380400001)(70586007)(70206006)(8676002)(2616005)(956004)(82310400003)(8936002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:24:18.7601
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 24b16ae6-a2d8-43e4-c966-08d93f8e48ca
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6802



> On 1 Jul 2021, at 15:03, Julien Grall <julien@xen.org> wrote:
>=20
> From: Julien Grall <jgrall@amazon.com>
>=20
> When Live-Updating with some load, Xenstored may hit the assert
> req->in =3D=3D lu_status->in in do_lu_start().
>=20
> This is happening because the request is stashed when Live-Update
> begins. This happens in a different request (see call lu_begin()
> when select the new binary) from the one performing Live-Update.
>=20
> To avoid the problem, stash the request in lu_start().
>=20
> Fixes: 65f19ed62aa1 ("tools/xenstore: Don't assume conn->in points to the=
 LU request")
> Reported-by: Michael Kurth <mku@amazon.com>
> Signed-off-by: Julien Grall <jgrall@amazon.com>

Reviewed-by: luca.fancellu@arm.com

>=20
> ----
>=20
> This was sadly missed because the on my testing the 2 requests were
> residing at the same place in memory.
>=20
> This was reproduced by creating domain while Live-Updating. Without
> the patch, Xenstored will crash.
> ---
> tools/xenstore/xenstored_control.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>=20
> diff --git a/tools/xenstore/xenstored_control.c b/tools/xenstore/xenstore=
d_control.c
> index a1b1bd5a718d..ff9863c17fa4 100644
> --- a/tools/xenstore/xenstored_control.c
> +++ b/tools/xenstore/xenstored_control.c
> @@ -103,7 +103,6 @@ static const char *lu_begin(struct connection *conn)
> 	if (!lu_status)
> 		return "Allocation failure.";
> 	lu_status->conn =3D conn;
> -	lu_status->in =3D conn->in;
> 	talloc_set_destructor(lu_status, lu_destroy);
>=20
> 	return NULL;
> @@ -757,6 +756,7 @@ static const char *lu_start(const void *ctx, struct c=
onnection *conn,
> 	lu_status->force =3D force;
> 	lu_status->timeout =3D to;
> 	lu_status->started_at =3D time(NULL);
> +	lu_status->in =3D conn->in;
>=20
> 	errno =3D delay_request(conn, conn->in, do_lu_start, conn, false);
>=20
> --=20
> 2.17.1
>=20
>=20



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:25:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:25:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149918.277274 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jul-0000XU-6Z; Mon, 05 Jul 2021 08:25:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149918.277274; Mon, 05 Jul 2021 08:25:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Jul-0000XN-3H; Mon, 05 Jul 2021 08:25:15 +0000
Received: by outflank-mailman (input) for mailman id 149918;
 Mon, 05 Jul 2021 08:25:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0Juj-0000Ws-Ua
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:25:13 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.83])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7dd2b95b-1338-4fa8-945d-0abb6118bcb6;
 Mon, 05 Jul 2021 08:25:12 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx658P7Kjz
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:25:07 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7dd2b95b-1338-4fa8-945d-0abb6118bcb6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625473507;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=ekgrVn9piLsvyOQyD78NTGf1aHgwIbptsXJ4pzNW4R4=;
    b=ZdfLvjSKitZyBpAWb7w3TvnmDq0NuibztZgKjE4jBOj4cwZYhO588gyMw9RgKqsksl
    Vj9YdC2W4739qwDEyySokt2Txiq8p+3rGuS4BXuWOhJKdYPneTwQfjICP31HXAbMOmlN
    ocIMH7VSOx0U34+MUqNq9tHlrZXhc0OxLe+VOxJijFNsNY9z5XPNa6+UKSRziZd5GreC
    CxwGtvbrzc47MYFkIWMIZ3SGg7eA+qDe5em/Kq03fHcNZKuoiwec7U4JD4Fwo06mLV85
    XkoRmGhfvMv2xHz5SfkiUSj2h/W/oj/4h8uuJtCkQqPuDHOEIK56IyfCjy9lOXO9uN03
    eDpg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:25:05 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH v20210701 11/40] tools: use sr_is_known_page_type
Message-ID: <20210705102505.41712140.olaf@aepfle.de>
In-Reply-To: <b026dd29-4c6c-3e6d-879d-b0339f2c208b@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-12-olaf@aepfle.de>
	<b026dd29-4c6c-3e6d-879d-b0339f2c208b@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/CGcRpi7WEaCSzBdx5ZFnTRn";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/CGcRpi7WEaCSzBdx5ZFnTRn
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 20:27:21 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Any reason this isn't folded into the previous patch, like your
> subsequent two page type helper patches are?

I think I wanted to separate this for simpler review, but I forgot to split=
 the followup change as well.

> > +            ERROR("Wrong type %#"PRIpfn" for pfn %#"PRIpfn, types[i], =
mfns[i]); =20
> "Unknown type" would be more accurate.

Yes, this is better. Thanks.

Olaf

--Sig_/CGcRpi7WEaCSzBdx5ZFnTRn
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDiweEACgkQ86SN7mm1
DoCr9w//dGrxVzPUox2VfyW4LChcH/L4cHRhNoCFq8nDUEDBKLJ8AT112EFjmDnK
qlUmxjSFrXIN10CkPazYqsGY7maKe8jb2SbDI3Z47CZuyWV4mRoapaxVvVYWe40f
cHXgzgp2NvX3bDpFyKb34kUovZvnCOTVH8RdZzO9Bg0BhmonTQ6tNTt1oo8SVfB/
yv9CpAc+wYKYpOHaiXADsRcCA2MqIJ/FCiLZw3QIRUJsLN71hX8WD5m9UZU9dPVx
MArR6ysAMQLKujTmJ8ephBKbgowUH5Ndk9g3dOlyolpdfAXe/2DH69WcQdgu3DcO
crbn/WArlVlQjfYMj0UWs7HWFfqhErtYaY6Wsyn4aBcuMSi0/rT07WlppsQ1UmHw
poScS5CvOwRYrTyPUBRYmvSHuajUbSNASaqiuXUYnOTydY27cjqx964M7FT2aTSu
dE49Rt9vHlnf4tMPIrAb7PKNDRaaOh0QBrTFXv4NYnQYoWWa6t9HVu5RVJ07klER
qRBt7PUcP1RaMTVW0BcIInClmeIa0ZzDDT8oc2SRXvtwOnDYGEFm0KY2YkSOkdXe
Gf+z6ScEpFPLG+CV6Tthxpt3T9yNYdAwh7s5faQbggyC7xY4LWlpbRRB1REv3s8s
Xj6hLobeM+NGRT98JXeJkdqdyGn9jHzulsMdylmDEewbNPgAX0M=
=L8Xq
-----END PGP SIGNATURE-----

--Sig_/CGcRpi7WEaCSzBdx5ZFnTRn--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:32:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:32:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149927.277284 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0K1m-00022R-Qq; Mon, 05 Jul 2021 08:32:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149927.277284; Mon, 05 Jul 2021 08:32:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0K1m-00022K-Ni; Mon, 05 Jul 2021 08:32:30 +0000
Received: by outflank-mailman (input) for mailman id 149927;
 Mon, 05 Jul 2021 08:32:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0K1l-00022C-4C
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:32:29 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.84])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id efc23c29-cedd-42a0-b1f2-035551992620;
 Mon, 05 Jul 2021 08:32:27 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx658WQKn9
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:32:26 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: efc23c29-cedd-42a0-b1f2-035551992620
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625473946;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=+WR0Grpii3a1Rkx/QcBQ9lUKVcEax2K181Wqa4C+VMY=;
    b=ttD72Er+ueuQ14qrQ3c3/2ebG3E56jVm+ILNdyULlz/996gq7G48fgg91aTScFHyL3
    5w1VR1YgtPfP20FyYX9GyGnuzATuplJBoASPcSELdQk7mHJJaRiPgTzscIxXlMuPa+Zg
    /64BmYW+fMm9LHpDF2JXyTrZBHEF4DUuCcAI/zXISj+/VsVdfiUD1CK+FXDjpqr0hEWv
    EreEsLKAHyH6ZiJHkEiFshhKXhxwAk/RyRiep+oDE1W7s5YDNhCLdxIvD9VzpMUnAs4z
    lEyllarSEFVZM0RzgHqspIkrLBcUokA1MR5IN4KL0qWmkB+2o9H1NT4eNNYA02sBOKDt
    A/0Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:32:24 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Xen-devel
 <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
Message-ID: <20210705103224.26f3835d.olaf@aepfle.de>
In-Reply-To: <ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
	<06968742-355f-ad37-0681-e51eea256414@suse.com>
	<20210705100228.4947ed4e.olaf@aepfle.de>
	<ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/_tSAvO78fL=Hc3r7J1Cc_lx";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/_tSAvO78fL=Hc3r7J1Cc_lx
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 10:23:00 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> I see. A similar problem then exists with at least the FIFO event
> channel per-vCPU control blocks?

I have not done any debugging how the pages differ and what they are actual=
ly used for.

My guess was that it might be activity from the backends, particularly netb=
ack. I found no API to query the usage of a page, so I declared the interfa=
ce broken..


Olaf

--Sig_/_tSAvO78fL=Hc3r7J1Cc_lx
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDiw5gACgkQ86SN7mm1
DoCpsw//cHJIb+i/s61t77mQZB5eToYHtekdEt6Kfj65jY2rKlI/akXkL0RHAHRA
ZQAfFvVg7E0N+FlQK1FXxbBugrZDaC+xiKDvZU/nV1Tx1F5iBGPgAlURk0cOK8YZ
J7amLS377pmHq3KcQNE2Pk+BhqAckWWO+SekgGSLiEGYMypKqgwstmqBG0Fa6DiJ
gdurZgBlHs0gWawUaF8XuQs92W1O1idiqckR5+Vl9aF9vZUqvn0SgZJtqNW7JVNQ
zGQkjJZ65sP57tSEelLGo98JxupoPbuSphZihQng71uPalCvZykxCPLMekfP6xKo
Eui5fjUrb8AgsA90p7xrG+4h/UVGc2MkOa33X6l/drAjbq2BBvwaJsjuSVWvRKVs
DkpWBoB2uynb/EQjmIR6dUDIT6UfO9RbwiOfzQhQbs214rT+R1DypQjCG2dXjaSV
Ll1KeUTF/baDA9pbQGOfdxKBaSG/p/fwAFPa5SAlqCzzf9+xUm40fA/lEau+/sTr
uERx1vHCQSsDs5q7TZQ+bJVrtcXVaou7PRPkvOLI6ONGrJ84nAjDFxCXKTu2nuGL
MUqb2ZBhcVEE5fJt2sKxrBUo6AVLviuDUORZnbwNikJ5YpG7audCJgx/wESZIMzN
/v/hFg0v8O+QHE7qY00PEjjvysZrjeiO6XL30hMeZ1D6R/sJW6Y=
=0ZiK
-----END PGP SIGNATURE-----

--Sig_/_tSAvO78fL=Hc3r7J1Cc_lx--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:41:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:41:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149933.277296 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KAr-0003Tp-Ob; Mon, 05 Jul 2021 08:41:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149933.277296; Mon, 05 Jul 2021 08:41:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KAr-0003Ti-LJ; Mon, 05 Jul 2021 08:41:53 +0000
Received: by outflank-mailman (input) for mailman id 149933;
 Mon, 05 Jul 2021 08:41:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0KAp-0003Tc-OJ
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:41:51 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d70bfc8e-dd6c-11eb-843f-12813bfff9fa;
 Mon, 05 Jul 2021 08:41:50 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2058.outbound.protection.outlook.com [104.47.12.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-38-Lo65KnIfNPmdJLEGrGc3dg-1; Mon, 05 Jul 2021 10:41:48 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4190.eurprd04.prod.outlook.com (2603:10a6:803:4b::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 08:41:46 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:41:46 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0040.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.16 via Frontend Transport; Mon, 5 Jul 2021 08:41:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d70bfc8e-dd6c-11eb-843f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625474509;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Qi0/A/ZDdzvWCMcpib3gmxbhoynEIspq/aq0JQvdtrs=;
	b=ifwnemfjErIEqyKuxkzTHRMahzT/ggxTpQKgb3HqMZdWE4BOVDn3FnZ9Kc9nOCMxqR+I1d
	r7RGGzGCyKH0Dd86Dt/+yyAGx0EaDMYXQCpD135ulz2VbMLbk9w5ODaZ3KZXbjZeBnndRh
	XbfRYZCg+RAwuxpqaqfF7ZwyCxwkRJI=
X-MC-Unique: Lo65KnIfNPmdJLEGrGc3dg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NWQkJElLYjG8sFAen/WyPc6hNfr9ropa+4mNxpgK5X6nUqEnqzU3JcLARCsGwHI/ULJwETfDKEuqHolopBLvlHacM1/GbQfLs9MQlZ3qnIDwbV0Qwps9SwVS5Rm8skfisMr29OmVHdlg9pb0X/9ShMzKvublN7YBLcG9Gba6wltiubB0imhsUZ+wi/gtjj0V+IDpUVntfmt2uVGzF7vCURcBZVSVShfTnVZFg9K+gSvlI2MmjlFNMYMp8medAtTlXydfWtDK8MReJQ7rBcmkL9Y1QsqRKS6OPt55fQO8yWKlehRE/TTJcUQiQOioqh9zTOUh1XiIGB5TjVtBV4ADbw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Qi0/A/ZDdzvWCMcpib3gmxbhoynEIspq/aq0JQvdtrs=;
 b=OJtRFTJbZlrBp8hKa+NVSNYoRK1F4bBxc9btoXMDILIcylIVn59ncm2JjHgi7PqUo6sDARf/EHlxxMuHrEA3lYsIYF9vPfsZv0JP1ozJeEYpmWYvp4f77QlxDKCN1BWJW1Tg7JvsN4JMnNOI6U3V4w1T0l6vnZgchbQO8zYWmWJ8Q4pDssH4TaJgjqt6sjH4Lbme/fsyOHcFo8Ijk0pOglSUTggwi9gB+bO4YJJ/y7yjsj9V9Gh6IbSbsGdDO+hyclNKWaUMveqbv96fCsT9BS2l7MvMpnA1TS/P8Ju9NewQ1UcVLDJoTtCvf2m20lZFA1TEa64VcE7FzVp5GxJL0g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v5 1/4] xen: XENMEM_exchange should only be used/compiled
 for arch supporting PV guest
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-2-julien@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <8c0100ab-dfd7-9c64-c89d-338db62cf20b@suse.com>
Date: Mon, 5 Jul 2021 10:41:44 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210703171152.15874-2-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0040.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8891937b-9e82-461b-3dc6-08d93f90b8e8
X-MS-TrafficTypeDiagnostic: VI1PR04MB4190:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB41906BF76925DE8F230E87E9B31C9@VI1PR04MB4190.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	9zsPOcYznqGYoVNrmEC3voAUDi1gyhGySeQpNo6/yctJtjbPbhxd/uNaNYnO0O8X+Kd9rjzGNDk+jlv9AdYwac5TiobrfVszeBPsn0iZcyJn+L6tQ/S9HdTtM7b6AlTTiS1hOAZ9hGR2IihR61l86kSlC/pmChXtBFw9AvijHb9/KgJ9bG+S1OANgD+oz7+6VRs5OnL7zvJBorJXskX295jONX6Fev3iDWjk4bNW2nhN5hawjoXYDfqYTnBbqmFRbuNOWBE1K02RLvS3vX/zELHcvfzNNfjOsm0hbbVjWl6hi0IiWUBrbRqxWdpeTHJAm0SHlxDzRG2x4FqmSHgnTIa6znfa++5k/oVxwax/Uut8Y+21vd0cUYoSAmYZmEF0Iw3mqJKjjch699cQQkLlxtBoUR5IaoXye0PkB3/PkKwa0WF4R2o1A72Ipjf4Wu8dsD+VFmmiYabu3/oRs6pc18dUCCfpKuKI3UEjCys3kKg6t55x8Bi4D1Bnx5bMsiIzPuOAi3laHjre1qKJ/FPJ4JmlY4DCJARo4nE1k0iLCc3fpE1bwX0WVgLwU8txgs5fSoK0oM+G8vVjdSYBtJOEBD8RgWF9k0WDhP40YHPKdGLBQVUzLCZ7Om7MCSj64jqlA8ye+traw0Sca2m9r71dzXzzSB5w9OU8D0eqnODSxYJ9SUzORnCNGB7X7t1Bz5kvfig9xFMjgNnr0is7EDF6n22CsgLp14bpbDgJn/sHc/s=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39850400004)(376002)(396003)(366004)(346002)(316002)(16576012)(6916009)(54906003)(53546011)(66476007)(956004)(4744005)(478600001)(66556008)(6486002)(26005)(16526019)(31696002)(86362001)(2906002)(4326008)(66946007)(5660300002)(38100700002)(186003)(36756003)(31686004)(8936002)(8676002)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?FInAa9uvOe/bivYdzGHZ0vpW4md+ZB7yCFubjiB?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 8891937b-9e82-461b-3dc6-08d93f90b8e8
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:41:46.0753
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: +9jBKADDzvXF2K5amDJs3baUo5bJAKgs6EIt6apRs6mWIgRAusYnazdPgGYNE0vOKzHBzASb9ZE9Fy7mrOcEQw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4190

On 03.07.2021 19:11, Julien Grall wrote:
> Changes in v5:
>     - Removed the #ifdef CONFIG_X86 as they are not necessary anymore
>     - Used paging_mode_translate() rather than is_pv_domain()

Is there a particular reason you use this in favor of steal_page()'s
paging_mode_external()?

> @@ -815,6 +812,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
>      if ( __copy_field_to_guest(arg, &exch, nr_exchanged) )
>          rc = -EFAULT;

I'm afraid that for correctness of the interface you need to keep
this part even in the !PV case.

Seeing the 2nd use of steal_page() I wonder if it was too much to
ask you to do a similar transformation for gnttab_transfer(), even
if it's not directly related to the immediate purpose of this
series. If you're not going to do so, I guess I'd put it on my list
(perhaps together with moving x86'es steal_page() and dropping
Arm's stub).

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:56:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:56:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149939.277306 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KPA-0004zx-4P; Mon, 05 Jul 2021 08:56:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149939.277306; Mon, 05 Jul 2021 08:56:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KPA-0004zq-1M; Mon, 05 Jul 2021 08:56:40 +0000
Received: by outflank-mailman (input) for mailman id 149939;
 Mon, 05 Jul 2021 08:56:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0KP9-0004zk-81
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:56:39 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e7d65991-dd6e-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 08:56:37 +0000 (UTC)
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2051.outbound.protection.outlook.com [104.47.9.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-18-avi9yhP5MEWRDkxYy2pj0w-1; Mon, 05 Jul 2021 10:56:35 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2445.eurprd04.prod.outlook.com (2603:10a6:800:55::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 08:56:34 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 08:56:34 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0150.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1b::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 08:56:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e7d65991-dd6e-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625475396;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Z0sX9UpPBwTe/WeXStrn0hiBmxMPQ2Y9eVf+kywyPpQ=;
	b=dDgOqpDtd8i1Kyld3vGYKlefHBXfBX1wLLa67qIC/ngYpyYiF9LzgGrotWNalnka8Pk00x
	A97nyPho0pJXeKr6AAwUpqFwvjzBZEoatfWpuEZZIG3HdpDAZ1gcqaFATeIOcjBk4MErwf
	57CkiVGozcBoNd9NJq0b/Qoft4qyK2I=
X-MC-Unique: avi9yhP5MEWRDkxYy2pj0w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VRYHgJEusGCctAee6pxQtMWmJwy1B34921t/gHVTi7PifZfwVzX4AMaHgGB5mdBx9mv0xmNkDaXyb8g42GFrVPtHVAtFMHJ0/FQeRWrcYbPUOVk0AJCfrvwE0d8ti+nlAtQ/cqQ9GzifLnjYE7zUDMlM0VVqhSzNRxbVzd5oOMyIRwdw5tVhaehHUDhPTvvqJLC6+1UBfxj0S7YIzCszJJBqpdiLdYL70I9+qDSVhsT3z9Bo8PFKpBbmQmFL3YsvWsDFcUBHiOZXqhQZk0wc6qrm5wJXNvTNjDto91pWKEXdVRAbXF/eSkf0xRUHFHxpQ22/bKLcD8gGlYBwOobmbg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Z0sX9UpPBwTe/WeXStrn0hiBmxMPQ2Y9eVf+kywyPpQ=;
 b=j/Pp5yGScaOqJrlauDCAB6BfMiySh0TifiiOFa25k/0WbJ1wxQeQX7QSLVeWNeeXRS61V3M7InZ2OUSV3U4S2JOhSWuwobyGswsaZk066Jltt2xh4RO/wlCrvzYNRG8ZH+HIrnMUIggv7ezjhv5cvBAMr/ykgOxTeWibxybsMFgKgikwGFogWFvsLjTW/5yQivWwQNXrnY8llkNFlZNCKrPKNRmlT4R6em85QQsFUbVy2KJefLnBfl8Vo2DANQ5dNH6vijKY9VDAPAMfzWAm4SlLHuqvp10hlp4YOLie+C6Ev087YOaAdgS1Jzsub8AhyLatrkXCnw+saZ7t92ZgoA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v5 2/4] xen: arm: Stop returning a bogus GFN for the
 shared info
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <julien.grall@arm.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Wei Liu
 <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Stefano Stabellini
 <sstabellini@kernel.org>, xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-3-julien@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <33b32da4-2b25-1dd2-27d3-16ea73ebab48@suse.com>
Date: Mon, 5 Jul 2021 10:56:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210703171152.15874-3-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0150.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1b::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f0d766b4-fdc9-4ac4-4243-08d93f92ca62
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2445:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2445C4D33492CE761C2BEDC5B31C9@VI1PR0401MB2445.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	UV8wZYisAEptIfxF0NAMu1z482W16N8grrMoIrFgbJ3CoJL0QwwROWwTuW9xg8EXRyvD/GnWKpkPZScvOetZyh5mXwDqJYDAtv4nog2cZP4rhm2ygEzzr2HNtTLIWVnTgvtuN2enrTC1Crq6x5/OtjdJW0Wds695VjZMmZcsSUvgds435Wz3bOsxjZEmkIdc+Nn6pUYrVZVtWc3/3DXMZUdSUkgZB7IuwxBLN/i46l4FH3HWZD3LsuAceks9h1GE5KOfmFiasVh6AIxlD/jparQm1QG4J1RK99NchJH5+uPWXzozDAkpV08Jzl14Ey1deP2E7ojRT/bj8I8WshwoIvA0nWWH+vnCEzFUex/b80W12XXXMkmfO/Ptt5pMwv+bWtyQSiJl9ZEDqQOAiGvnCjxZeD8v7ciTHDE+M2T5LY4o89J1LeZoeXPiq96LERpz2fZUnuncYvo13AiBC9X+D81CVisFvlqIY27bcR9ah1SQ+mxkXMsh2qtmzEZ6a2K7SEQF+uk8Et5sTEKrpouDKn7aHkmNFGLu1t0nlufROlF50EyP/UcruUy375fb1n8RB048TW0sYl1oex3HMcj8uSQu2Q7/NCfkdUaRySodWwXii4II7LLTpBHOmSSWB37b+DbRFrVTVYcnUib+27S+z1ooVZ9p700Aq+ssSQ+58Frd/ykxCztY7c+XHol5qDJj3pnG1OqTAEOmJ1yur+hrWX2W2YvpH2IWaSfxl6zIB9M=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(366004)(346002)(136003)(39860400002)(376002)(38100700002)(956004)(31696002)(2616005)(16576012)(2906002)(316002)(186003)(4326008)(54906003)(16526019)(478600001)(66946007)(36756003)(83380400001)(66476007)(66556008)(31686004)(8936002)(26005)(8676002)(6486002)(86362001)(53546011)(5660300002)(6916009)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?em84R3JFeFlDZ3NMc3Qvc2FCK3RmMk1INmRrM3NZV21rVVZTQTROVk5PTVpV?=
 =?utf-8?B?azZTUVRSeHJOaVJyUjJHZXNTeTY2SXZWTEdDUW84bFNaMU1nQk5jVXM4ZFJY?=
 =?utf-8?B?MHJ0dSsrKzk3MDlMbzFyWS9VUFR6RXc4RWswN0MzMDB3cWFSS3QzVGhFZGZh?=
 =?utf-8?B?ekt4N1BVZnBveFMyYmM2MXNsYmc2eDdMR1RJdy81L0pveE9SaXpmQmxjbjc2?=
 =?utf-8?B?cVJKcVByWVNHbjFDa0prQWVvdHVmVExYVkRlaVRXbkRZa1puK3R5V1QrM21w?=
 =?utf-8?B?aVdYb3NTTFdUQ3dkZmhoWDA4dGlWdnRLLzVYdjNWU2NXY2o2UnlzRy9KeHhL?=
 =?utf-8?B?TUQrdnBiY1V1bGl6TjN4ZnNnMkp0ckkzaU9ua1FDSTRkRWIyM0I4YmtYNEFE?=
 =?utf-8?B?UnBSMWRwM01PeHpNVTFyWTJBc1B2dXVUZy9vRC8rZ0tQZ1hHWm1CWWJHREtJ?=
 =?utf-8?B?QXBTZGxZRUszZkNKZzF3azZKTUlUTEJIWUdLcHJrYVVHUHZSWi9ydjFkcEhp?=
 =?utf-8?B?U0x5cUhJSDFkWVlSMWhoN0VaYm1oTEw3bE93WTRTRkxHeCtaQU94Z3I5ZTA1?=
 =?utf-8?B?WkVCVEdBeXVpdDZKWWFpbTBLWkhiVm9UWUQxZ2c3WUhyT3dVWG9pci9HU3hu?=
 =?utf-8?B?cms4M1p5UmVWVHBLTzB1YVUrT3pLbnF4VncwYjFDZXJyYUZ1bzluVDVWMnk2?=
 =?utf-8?B?bldPOFovZkdtVlJCWDE2SGN0c21pTCtDZ2I3WFR4Y2ZIMmZnR25lTWVOQTRj?=
 =?utf-8?B?SVQ3bS9TYnk5aUwrMG1DUzBGTWJOZ09tRlFwbkgvMjN3ZEFEMnZUQmM0b0tR?=
 =?utf-8?B?cFFoRGNoVVg4K2xtV2x5bHlZY2FOWE5qWGlFKzMrYnpIblJ4ODNBcmlsN0pK?=
 =?utf-8?B?TXJOeDB1dG1jVEFjWTJ4ZkZXRVJOZSs2QWpYUExxa21NYmE4Z2FFK3QvZEMw?=
 =?utf-8?B?TkJJY3ppbGNYWWJoaVNzd2ZyTzB4UDByS25mWEpUc3cwK211VmNESjBhdkk1?=
 =?utf-8?B?UU1SUnR0MUNvN1dreDU0NEZpaU1uWWNSMmRZNUZRVmVXUk9SV3Z4em1TZ3RD?=
 =?utf-8?B?VU9xN2xKRXNzOGMyVEs4TWsvUEl1OEUwZDNWWnc2QWprS2E3bVlLV2RPaUI4?=
 =?utf-8?B?bjhsMzR2N3ZsRS9oRnBpT3d2UGRaR1lYVTFIOTAxUXlJTi9XQlRtN2NnWGRt?=
 =?utf-8?B?LzhLZE5ySUtRUzRVMFJqdHhOK3ljOUhyMXo0Yytyc3czbkRiZ2RPRkdpcy9M?=
 =?utf-8?B?YVptZll3NFNBU0oxQzg5bURRVlJCY2J6ci9pSGpmbW9Jb3BnRnVtbFpTdncr?=
 =?utf-8?B?eWFNT1A1UlRDMGZ3b2tBdlB6Qk1DRU9wZGdTUmdzY2JSMUdwK09JTVhucnBS?=
 =?utf-8?B?R1RHTENIRFI2RmsyWmN0VTg1SzcwVTdNNEtjdlNYN01uRXo1eGlkRWFaMVkw?=
 =?utf-8?B?cTY2cHByeGxDWmh4VTcwWk5OSnJHcms0KzNZcy9QbEMzS0FHNjlRZXVtaWVT?=
 =?utf-8?B?UkVKNXkweCthTzdWZlZMam1mM25GTzEra09wMjgvNkttcEFUTkFkWko3RkZo?=
 =?utf-8?B?VHVBbUZ0RFFHYTNZaU5XQjlubnVUVGg5VjlnZlpWcFpVd3lYRWwrSlVFT2JR?=
 =?utf-8?B?TDk5Q0NFb3VuekgranUybUxFTFFxaElhRWg0ZWVuSU5OVDl3N2NsSCtpejdN?=
 =?utf-8?B?TmFDeDhXQkFkNmsvd05uTzcvZ1pGVFk0S0twUm9SWjFjKzhPeGZyaEhSUm01?=
 =?utf-8?Q?pVLShz2haJ+RezAksX8OvGYTVHEE5BtKe8E+M29?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f0d766b4-fdc9-4ac4-4243-08d93f92ca62
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 08:56:34.3577
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Dc4lZzJ2VVkgqQoObsxFLuDMjS3S5T5Axl3bbwCFIl8vcBNgjmjWqKaUMpl0X1JjzZj9ngGQjLQBYb1NmVReLw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2445

On 03.07.2021 19:11, Julien Grall wrote:
> From: Julien Grall <julien.grall@arm.com>
> 
> While Arm never had a M2P, the implementation of mfn_to_gfn() is pretty
> bogus as we directly return the MFN passed in parameter.
> 
> The last use of mfn_to_gfn() on Arm is in getdomaininfo(). It looks
> like this is mostly used for mapping the P2M Of PV guest. Furthermore,
> the structure on Arm doesn't seem to contain a lot of useful
> information. Therefore it is unclear whether we want to allow the
> toolstack to map it.
> 
> As there is a high change that RISC-V will not implement an M2P,
> provide a new wrapper that will by default return an invalid GFN and
> move the code to find the GFN in an x86 specific helper.
> 
> If in the future we want to map the shared info, then we should
> consider to do it using the acquire hypercall.
> 
> Note that as INVALID_GFN is unsigned long, we can't return directly
> because the value would differ between 64-bit and 32-bit. Instead,
> a fixed value needs to be introduced.
> 
> While the fixed value could be shared with other field storing a
> GFN, we unfortunately use a mix of type (unsigned long, uint64_t)
> for exposing it externally. So to avoid any misuse, it is better to
> define a fixed value for just the shared_info_gfn field.
> 
> Signed-off-by Julien Grall <julien.grall@arm.com>
> 
> ---
>     I am not comfortable with introduce a generic invalid GFN fixed
>     value because we don't use a common type. I also didn't get any
>     feedback on whether it would be acceptable to focus on one type.

It's been quite a while since the prior discussion, so "I am not
comfortable" may refer to something you do here but that you'd
prefer not to do, or something that you elected not to do because
you dislike it. Unfortunately "because we don't use a common type"
is insufficient context to tell, and hence I can't very well
support your view or object to it.

>     So the fixed value has not been changed. I think this is acceptable
>     because this a DOMCTL and therefore not stable. If someone still
>     disagree, then please provide concrete steps how to solve
>     the mixing of type.

Mixing of which types? You have explicit translation between
internal and external representation in getdomaininfo() - this
looks okay to me, fwiw.

> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -2553,6 +2553,15 @@ void domain_pause_for_debugger(void)
>  #endif
>  }
>  
> +gfn_t arch_shared_info_gfn(const struct domain *d)
> +{
> +    gfn_t gfn = mfn_to_gfn(d, _mfn(__virt_to_mfn(d->shared_info)));

In order to be able to easily and immediately spot these once
virt_to_mfn() finally becomes a global type-safe wrapper around
__virt_to_mfn(), please retain the prior use of the not-
underscore-prefixed variant.

> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -64,6 +64,9 @@ config MEM_ACCESS
>  	  Framework to configure memory access types for guests and receive
>  	  related events in userspace.
>  
> +config HAS_M2P
> +	bool
> +
>  config NEEDS_LIBELF
>  	bool
>  

Stale change?

> --- a/xen/include/public/domctl.h
> +++ b/xen/include/public/domctl.h
> @@ -141,6 +141,12 @@ struct xen_domctl_getdomaininfo {
>      uint64_aligned_t outstanding_pages;
>      uint64_aligned_t shr_pages;
>      uint64_aligned_t paged_pages;
> +#define XEN_INVALID_SHARED_INFO_FRAME (~(uint64_t)0)
> +    /*
> +     * GFN of shared_info struct. Some architectures (e.g Arm) may not
> +     * provide a mappable address in the field. In that case, the field
> +     * will be set to XEN_INVALID_SHARED_INFO_FRAME.
> +     */
>      uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */

Since you repeat it anyway in the new comment, may I ask that you drop
the old one, thus getting rid of one more instance of "GMFN"?

> --- a/xen/include/xen/domain.h
> +++ b/xen/include/xen/domain.h
> @@ -133,4 +133,11 @@ static inline void vnuma_destroy(struct vnuma_info *vnuma) { ASSERT(!vnuma); }
>  
>  extern bool vmtrace_available;
>  
> +#ifndef arch_shared_info_gfn
> +static inline gfn_t arch_shared_info_gfn(const struct domain *d)
> +{
> +    return INVALID_GFN;
> +}
> +#endif

This doesn't need to live in a header, does it? I don't think there's
any remote expectation that a 2nd caller may surface.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 08:59:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 08:59:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149945.277317 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KS4-0005iV-N2; Mon, 05 Jul 2021 08:59:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149945.277317; Mon, 05 Jul 2021 08:59:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KS4-0005iO-K3; Mon, 05 Jul 2021 08:59:40 +0000
Received: by outflank-mailman (input) for mailman id 149945;
 Mon, 05 Jul 2021 08:59:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0KS3-0005iG-G9
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 08:59:39 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.171])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 53bbcd84-dd6f-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 08:59:38 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx658xWKxT
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 10:59:32 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 53bbcd84-dd6f-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625475572;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=bEbVxWBeCflnuHit0eKhOuE3HAcewAG2Gvvb7jVrBts=;
    b=R0O5u7TZDRNjMw3phGHsDcQnzgvaRtA8YNLWy5AIBGrGpwpibqk9ybcOPpmA0UGqFM
    4iGs9sVcW3r/6u/o2rXHIbToyrFRM53D62tWHHQ7lxDF6qja2RJVCw1SgxUU1GciSsBZ
    VDNXw+DpihHmUMTPYjk4zbuBrvFh3jUGsoAUOGY5sRwkosG1lkbNzS3dLhUZd9pvnBbt
    Cs7uyYlUWUHhBKru1LFvlSbcZM1v5mtLaNNTEbGNpnwneXBLZM1ir5eRpJwXmWzqk+BT
    Ybslxe6Va5z7pVkRAcJT06iSasSJ2SERM3Rva9w1k9mY3OByaPGmq9O+FJchMDkZBN4w
    MYwg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 10:59:17 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data
 pfns in migration stream
Message-ID: <20210705105917.132793c9.olaf@aepfle.de>
In-Reply-To: <9db50e05-233b-e279-307d-548fc23d0115@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-13-olaf@aepfle.de>
	<9db50e05-233b-e279-307d-548fc23d0115@citrix.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/xqhvDPGS.iJwfKNB=6Q_0nZ";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/xqhvDPGS.iJwfKNB=6Q_0nZ
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Fri, 2 Jul 2021 20:43:13 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Anyone adding a new page type is going to have to audit/edit each of
> these helpers.=C2=A0 I think it would be better to write all the true cas=
es
> explicitly.

You mean the check if a page has data or needs to be populated should look =
like sr_is_known_page_type, where each known variant is listed?

Olaf

--Sig_/xqhvDPGS.iJwfKNB=6Q_0nZ
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDiyeUACgkQ86SN7mm1
DoCljg//arNFhP+kCrV1rOksDQaAaAwSF+UHNujyD7RyQCLQY154FOYrDAE1pcCe
NSq1KtGc6behnrxusAF1TrT2CXv52vC+1elQCjsIkx8ZifRHkZZSvV0hy/LpVEaG
j9+ql3A4oMvpPTljI8eXOdkR/8r4pc491w1yQy5QtwphBZdrJpnrdji/aVBmEzGP
0YwLDx9kawNzE1FbTguMx3+0raWeCfFAaopiSj/s7PN0+UO0dsHUYf5vOT5kkxto
hEtyEJKHzRkyNcO4DdnP+vkWgRBHbW1XcJLT0ByvrW6Jbanuru1RBquWqc6zP/3I
wNRZrEUCX68WcIU+FY/7xxtjF7jUaIDYYALEs89oKroi65rpyYgjNr66TkBMO4uJ
mC+lA/2v5H4D50Uo5w+NxUFHJscEiBNjq4BZn8nqNzi4NkkKVRI7po/zv80Z2Ahc
EheNFoYJNDpultmkSI08JScqfNahuMfrpZU7ppVcqzQXlm4b+bRakA/PJidZku2x
I22JSt+g+cfVVJcG2IW94zD+btqM5wEvHcoyYG58evh1oyFHRylbDXuZvHaSpeyf
A7DkaqLuVL1CHydXtA9QLRHPUGltJ8D352Aj22SA2Ez3qNeK1QZl8K/Y8qd+/uva
pzaJC9A1NDg5+uUhR2joYMeNLHa8WHuzzCqpm7YHhkJGB/d+v+w=
=EoB+
-----END PGP SIGNATURE-----

--Sig_/xqhvDPGS.iJwfKNB=6Q_0nZ--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:00:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:00:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149950.277328 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KSf-00070s-3m; Mon, 05 Jul 2021 09:00:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149950.277328; Mon, 05 Jul 2021 09:00:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KSf-00070l-0Z; Mon, 05 Jul 2021 09:00:17 +0000
Received: by outflank-mailman (input) for mailman id 149950;
 Mon, 05 Jul 2021 09:00:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=rHuV=L5=citrix.com=ross.lagerwall@srs-us1.protection.inumbo.net>)
 id 1m0KSd-0006zF-RP
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:00:15 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 695d0bb2-dd6f-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 09:00:14 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 695d0bb2-dd6f-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625475614;
  h=subject:to:cc:references:from:message-id:date:
   mime-version:in-reply-to:content-transfer-encoding;
  bh=gpO5L/u3UREsXqa+45yj/y5IgBmcrphWeBHKfwFoxyU=;
  b=Jru943seSsk1fSyOX+KotrQZ6mabhAopNlZIJlqVnbNZlOO5w0kdouvU
   JWj1WcmlsRso8+xWzOd3ZUR+A2GpAHyMJa0VmjZ9++Mio1k9riOuCUXkv
   1x3v36ZrVU/DsmgINC9JAsL/hsQTYtNNXZijPziyQT4pqCr3sOxtjkCQF
   E=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: yAvmx3gRms4eoTLKidZquDxJgStGcrFGo3KXYKeFxjc8KgZLmpWIGNMk5ApCKEVqkS5fe6i97H
 2S4gql+jqdeG0yMEB5M9+W09Xu6R0Z1vcNifRPqIcRQFFhCOOymfE2DSVsNOlzV4l8MyCSYDcy
 SY7Nwbr1lZIVgKSvcya3OwSlr+Mq/K/ITySj/1Pp+gGBO2adfg/n7P4qsMO9CEeOzULhc3zUar
 G7w2hHcqc3Cb8+fS379AHbyXwheAcyxRb15j6lKdMPUrVPXweSd5vOqWrhc+tOIm3NgqCSL9Jg
 6hQ=
X-SBRS: 5.1
X-MesageID: 49192802
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:032I/qASyTEq38blHemQ55DYdb4zR+YMi2TC1yhKJiC9Afbo8f
 xG+85rrCMc6QxhP03I9urwW5VoLUm8yXcx2/h0AV7AZniChILLFuFfBOLZqlWKcREWtNQy6U
 4JSdkHNDSaNzVHZKjBjDVQX+xQouW6zA==
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="49192802"
Subject: Re: [PATCH] xen/events: reset active flag for lateeoi events later
To: Juergen Gross <jgross@suse.com>, <xen-devel@lists.xenproject.org>,
	<linux-kernel@vger.kernel.org>
CC: Boris Ostrovsky <boris.ostrovsky@oracle.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>
References: <20210623130913.9405-1-jgross@suse.com>
From: Ross Lagerwall <ross.lagerwall@citrix.com>
Message-ID: <41f6aeaa-583f-9b00-7789-d8a6f751b49d@citrix.com>
Date: Mon, 5 Jul 2021 10:00:11 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.8.1
MIME-Version: 1.0
In-Reply-To: <20210623130913.9405-1-jgross@suse.com>
Content-Type: text/plain; charset="utf-8"
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 2021-06-23 14:09, Juergen Gross wrote:
> In order to avoid a race condition for user events when changing
> cpu affinity reset the active flag only when EOI-ing the event.
> 
> This is working fine as all user events are lateeoi events. Note that
> lateeoi_ack_mask_dynirq() is not modified as there is no explicit call
> to xen_irq_lateeoi() expected later.
> 
> Reported-by: Julien Grall <julien@xen.org>
> Fixes: b6622798bc50b62 ("xen/events: avoid handling the same event on two cpus at the same time")
> Tested-by: Julien Grall <julien@xen.org>
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---

Hi Juergen,

Are you planning on backporting this fix to releases <= 5.10?

I think the fix may need some minor adjustment to make it work after
"xen/events: fix setting irq affinity" since both lateeoi_ack_dynirq()
and lateeoi_mask_ack_dynirq() were adjusted to call ack_dynirq().

Thanks,
Ross


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:15:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:15:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149959.277339 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KhD-00007b-EW; Mon, 05 Jul 2021 09:15:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149959.277339; Mon, 05 Jul 2021 09:15:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KhD-00007U-BY; Mon, 05 Jul 2021 09:15:19 +0000
Received: by outflank-mailman (input) for mailman id 149959;
 Mon, 05 Jul 2021 09:15:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0KhC-00007O-HK
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:15:18 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7150d127-b075-4fa9-bb64-d6f9a3c60fbb;
 Mon, 05 Jul 2021 09:15:17 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2174.outbound.protection.outlook.com [104.47.17.174])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-36-9fWCEHhDONO6oCatPwrvPA-1; Mon, 05 Jul 2021 11:15:15 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4384.eurprd04.prod.outlook.com (2603:10a6:803:6f::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 09:15:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 09:15:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR0902CA0017.eurprd09.prod.outlook.com (2603:10a6:200:9b::27) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 09:15:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7150d127-b075-4fa9-bb64-d6f9a3c60fbb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625476516;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=IICWLUsZFk3qAn5agg44BauByHfkS0qV/OmbhxwFnu8=;
	b=MRj5xTI1nwPHYgOB4SntH377D0wgyeYofoHlP6OacgFTQWCsUGMUEp9H6ClO5jBrTkD1+o
	G4UTEnUFu6lOjLJKlpzmcZ+7AhNpIbUAOkEGqEMpxjV+WhWsRS+mcQlLXLegdd/WDDq8rI
	p8o24v7BsScXtkWsjc2vyYk6cj3yvIs=
X-MC-Unique: 9fWCEHhDONO6oCatPwrvPA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=DlPilxXecUCNS8BgTowHDK6fcqTQOoQMtcdjUVEgCk1Q+YIlkuu04lL0YmJcw58c7rfhDyUX4vf4cqfw276pfeeP0fwpSsH+Kgg2Y8nQb+iJb2MmPIua1Q/qUTYwfsqjO8/AGDAon43Gy5KMsZB2+/6DULh/jHmO9qjKyEj41KFtPy85VQmq9JmHbRUaolF23Nc993FkCWD5WWkGbOeC9XlJv1Wo64U7NPXnOcQqDrSXQwcQbzvdYh8Qy8kWnxHW9N4LGdhhXOifpDs8bFzf81LWui/N6ocl42fJeEUXRrohtzVTVkl/kw2T2pOGuZJ63FXP4kLP9hHaqPFIZjyOnw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IICWLUsZFk3qAn5agg44BauByHfkS0qV/OmbhxwFnu8=;
 b=fBYCNizfKu5i8U6dSepy9a1XKazxYeFCUF0kNZ+dVhmRE50DTdfLslY6W9/QLt+q032tQdKs3TXBABZ6dd2vlZGRp8Iu/EeaSDCxTO+8tHL2PaElTB893YPOmxRLmCmGvTIwExEjkT6ENf6MSYb9E9I6AzhNzvwjNPlYm3kCPBcEUl78QSoAAE/Ie+4Itq+idSytOGOiKyD8SOXuNufr07yermGEg2uFSLwDyy8AVGgkvgIfHxxj8BzYsV6x1wz77woLIsoRsptei03Zp1ahRgCPHbvRRan6LB3hizpQhy6PaTa0U76zOC7h7h8QwYRGJTtUj8kijOdtLIxy7lk8oQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v5 4/4] xen/mm: Provide dummy M2P-related helpers when the
 M2P is not supported
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <julien.grall@arm.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Wei Liu
 <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Stefano Stabellini
 <sstabellini@kernel.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-5-julien@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <3ee1496f-aa3d-8784-3d8c-f152958dbfbc@suse.com>
Date: Mon, 5 Jul 2021 11:15:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210703171152.15874-5-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM4PR0902CA0017.eurprd09.prod.outlook.com
 (2603:10a6:200:9b::27) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 44344902-adcd-4505-9230-08d93f95653f
X-MS-TrafficTypeDiagnostic: VI1PR04MB4384:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4384A6BDC088441EA8DBE508B31C9@VI1PR04MB4384.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	pqN/slZkid4y4KQ0D41/M7zhP82UUuD5f+fIFidvTzukMMkzWnq0/uwTyWUgPE3f/7BbGBpdIvF2YJ5rUYBtdRavgDqXLgQOeRL8fPm3BpnOUWuo23oAlSjoNsj1N34IcP1skDBiHTLNcF4dCXMuFF0NyUbqj01UUTw36B3KN2Npe2ZugCZxW9LmaIP4Zbz8zGp/pM3/wv0mSCQoOwSNJsumMJDY7L4B0JDQW/PLyIjlUmUdutT+CPx63EEYVMJ2GLioi/fO1vAwQKN+Vri0mrTP1i6zBR5g7P5BGgM83fCeieZzQt86r+WZs9kKg5iwXQM2LsMA+aFBvJPoCe3wUQYmQ3PiiQB7BfFHN6jXM4ETKTets6S/rXkAidSTHJ4Mv6SGc6mMVN/ZY/6n4zClegsAH3H35iFYmnVjKKfHxrQF/YooYyLMGmTQ/BqFwZ4OwqH/ejhulti+rT3dww373r6+REJmDUqdnbBJV04olLHceWitwHvKNi3sX0toXJAxgT2hh+LRX1GCDdIf8yPUq1Bv0OC6kFH7FgcKsrqfw1Kn74dSqjKMBNBoKPWUIhV1q3iE5mk5YmsL1EQRlcabI5UlT+3mEU0i3SkJ4XDjO/ZCSqpFBHaxpkLESDu8rFX3sX49R7LemJ6Ht0bWD01Ra8e9E12EcOvxNf33Q2Be0upzwiii+QDduE6XrBDMNmFAYXugQiyOUT3zVSq1Cb5DqaMp/pTvtgI9lRMotZ+K+KE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(136003)(376002)(366004)(346002)(396003)(66946007)(38100700002)(478600001)(36756003)(26005)(5660300002)(2906002)(6486002)(31696002)(16526019)(186003)(66556008)(53546011)(66476007)(31686004)(7416002)(4326008)(86362001)(6916009)(8676002)(956004)(54906003)(316002)(16576012)(2616005)(4744005)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 44344902-adcd-4505-9230-08d93f95653f
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:15:13.1997
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Fw2ce7cQJxCJRChQqD9FGvzcLj7n1MJGdJy3Zy3nVKPoVpeohRrxf0ZsewgDKsVAdSg9XJztiqdeTexlxnMOWw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4384

On 03.07.2021 19:11, Julien Grall wrote:
> From: Julien Grall <julien.grall@arm.com>
> 
> At the moment, Arm is providing a dummy implementation for the M2P
> helpers used in common code. However, they are quite isolated and could
> be used by other architecture in the future. So move the helpers
> necessary for compilation in xen/mm.h and gate them with a new config
> !HAS_M2P. The other M2P related helpers are removed.
> 
> Take the opportunity to encode that CONFIG_MEM_SHARING requires
> the M2P. It is done in the header rather than the Kconfig because
> the option is not defined in the common Kconfig.
> 
> Signed-off-by: Julien Grall <julien.grall@arm.com>

With the other Kconfig hunk moved here (from the earlier patch)
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:16:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:16:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149964.277351 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Kic-0000if-S4; Mon, 05 Jul 2021 09:16:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149964.277351; Mon, 05 Jul 2021 09:16:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Kic-0000iY-OK; Mon, 05 Jul 2021 09:16:46 +0000
Received: by outflank-mailman (input) for mailman id 149964;
 Mon, 05 Jul 2021 09:16:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=cjuk=L5=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0Kib-0000iO-H4
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:16:45 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b9e2d87c-01f7-4094-831c-083a1ba081fa;
 Mon, 05 Jul 2021 09:16:44 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 05DDC22622;
 Mon,  5 Jul 2021 09:16:44 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id AFAA6139A1;
 Mon,  5 Jul 2021 09:16:43 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id TuELKfvN4mARSAAAGKfGzw
 (envelope-from <jgross@suse.com>); Mon, 05 Jul 2021 09:16:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b9e2d87c-01f7-4094-831c-083a1ba081fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625476604; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=FKzinTSRNuqJ/0cne276ylTKasgO+NhrI52GsfjHrsc=;
	b=dfAa3dfanPAOQ3AV3UxbeqjaZz7cHclNR5QejhMWNf8TWXWMvY8y/o47a/c/vIoh1E5TlR
	4uB7/ugslreIsPPddQM6By3gTvOt2rAHN58wYvQtPjgxfU3A3xS5X/kvk8NWvvP3ZU/VMQ
	rm3P7M6EQAywv0bdvqAQ8ZJIPF+hf2Y=
Subject: Re: [PATCH] xen/events: reset active flag for lateeoi events later
To: Ross Lagerwall <ross.lagerwall@citrix.com>,
 xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>
References: <20210623130913.9405-1-jgross@suse.com>
 <41f6aeaa-583f-9b00-7789-d8a6f751b49d@citrix.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <f8f83223-061c-84cf-41c6-cc64e8aedfcc@suse.com>
Date: Mon, 5 Jul 2021 11:16:43 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <41f6aeaa-583f-9b00-7789-d8a6f751b49d@citrix.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="x1aACQPEPpalHO3aMzmGsOJpPFY7hqvjU"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--x1aACQPEPpalHO3aMzmGsOJpPFY7hqvjU
Content-Type: multipart/mixed; boundary="NyN0xPKmib9zdzVTUVSMxwGt6rt4Q0QBd";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Ross Lagerwall <ross.lagerwall@citrix.com>,
 xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>
Message-ID: <f8f83223-061c-84cf-41c6-cc64e8aedfcc@suse.com>
Subject: Re: [PATCH] xen/events: reset active flag for lateeoi events later
References: <20210623130913.9405-1-jgross@suse.com>
 <41f6aeaa-583f-9b00-7789-d8a6f751b49d@citrix.com>
In-Reply-To: <41f6aeaa-583f-9b00-7789-d8a6f751b49d@citrix.com>

--NyN0xPKmib9zdzVTUVSMxwGt6rt4Q0QBd
Content-Type: multipart/mixed;
 boundary="------------0DCB1735DA5DDD533E680C3E"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------0DCB1735DA5DDD533E680C3E
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 05.07.21 11:00, Ross Lagerwall wrote:
> On 2021-06-23 14:09, Juergen Gross wrote:
>> In order to avoid a race condition for user events when changing
>> cpu affinity reset the active flag only when EOI-ing the event.
>>
>> This is working fine as all user events are lateeoi events. Note that
>> lateeoi_ack_mask_dynirq() is not modified as there is no explicit call=

>> to xen_irq_lateeoi() expected later.
>>
>> Reported-by: Julien Grall <julien@xen.org>
>> Fixes: b6622798bc50b62 ("xen/events: avoid handling the same event on =
two cpus at the same time")
>> Tested-by: Julien Grall <julien@xen.org>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>=20
> Hi Juergen,
>=20
> Are you planning on backporting this fix to releases <=3D 5.10?

It is on my todo list. :-)


Juergen

--------------0DCB1735DA5DDD533E680C3E
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------0DCB1735DA5DDD533E680C3E--

--NyN0xPKmib9zdzVTUVSMxwGt6rt4Q0QBd--

--x1aACQPEPpalHO3aMzmGsOJpPFY7hqvjU
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDizfsFAwAAAAAACgkQsN6d1ii/Ey8g
AQf/S8AU56191xN6vEeRnV0l+vdq5e2nMzj8f13Y8Cfk1ZPmQIru3bza+8f4Pny87w6Z4EVnX5lc
EytV0p5hPRmaNh29zzTr9ubgSzScztsnqJJCGut5MDAfvU1oJMIdGcAss1RHCWhYRh3eVKlCe4NO
EYqu/+AJ/Wf0bVoo7XDCfvlwHviFWMJc8ucgde+ba8BflMwQEM+Zwuox+88iZm/8Zc+JI6ouZjkg
g87FKsVkhXZFK7IEHgMMh9zwbcsW6cnnp8iSYYMg9tOmv2SXdVoN+hUNbNrb0BrAEFjr5N+I6ZPY
a0/EYlY+ZrEhDbD5NW2NFFUO/rXz8pY36vN37tec2g==
=u8FY
-----END PGP SIGNATURE-----

--x1aACQPEPpalHO3aMzmGsOJpPFY7hqvjU--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:19:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:19:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149971.277362 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Kld-0001Ov-CJ; Mon, 05 Jul 2021 09:19:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149971.277362; Mon, 05 Jul 2021 09:19:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Kld-0001Oo-86; Mon, 05 Jul 2021 09:19:53 +0000
Received: by outflank-mailman (input) for mailman id 149971;
 Mon, 05 Jul 2021 09:19:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2kFf=L5=arm.com=penny.zheng@srs-us1.protection.inumbo.net>)
 id 1m0Klc-0001Oi-4N
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:19:52 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.2.78]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 365991ed-1566-43ac-8cfc-ea3f69af8f99;
 Mon, 05 Jul 2021 09:19:49 +0000 (UTC)
Received: from DB7PR03CA0106.eurprd03.prod.outlook.com (2603:10a6:10:72::47)
 by DB6PR0802MB2424.eurprd08.prod.outlook.com (2603:10a6:4:a0::8) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 09:19:47 +0000
Received: from DB5EUR03FT043.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:72:cafe::76) by DB7PR03CA0106.outlook.office365.com
 (2603:10a6:10:72::47) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Mon, 5 Jul 2021 09:19:47 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT043.mail.protection.outlook.com (10.152.20.236) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:19:47 +0000
Received: ("Tessian outbound 1763b1d84bc3:v97");
 Mon, 05 Jul 2021 09:19:47 +0000
Received: from e20f7bc9831d.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 E9B9BAF0-2501-4D08-AEC0-3C921FB15A77.1; 
 Mon, 05 Jul 2021 09:19:41 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e20f7bc9831d.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 09:19:41 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB5391.eurprd08.prod.outlook.com (2603:10a6:803:138::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 09:19:40 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 09:19:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 365991ed-1566-43ac-8cfc-ea3f69af8f99
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7gaTWNqi+pumqiUecLj+Puq7S7mc3t6LC8iqwbHyXaw=;
 b=yyK4onSM2Sfu5RVAEn+xzb2e6MuSjzeOpodWfPauhPWt7VwMaxk3RJ+FBAddZVcvraebTUUEOoAQh5/nwHYyB0LH8dvoAgH4QOjrxVappYuwgnvChFHCDCKJiPLxGsa7P09QkjPJxq4LvUMnB3amXhK6LC30ZBrdaP81dAbGFj8=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dcZxeB9LoRd21R0CL/dZXQQZTTckIrYudD5EMl16A24gDfLNWdrmh19Gvo22iOmmI+WhbsPny4Cb4d+NuctU708v3bn9BxzgTjxAeZD5oDj4bfPNaOgDH74oLZuWXTpQZSVZ0DO47VNhaPTEcW/nMJZl1YRvBz8FtPe/i8H+n2hJW6NZNcUAObnF+b2u6Vc1yZjXx/POg2MF8EtvLPvjx3Lw4bPJkiHCTXr1d+uJDbTZ2cwi0v/bRv0M4Fl1fWuDLrB/eDiLlv8YFgCzHQKhlf0dTLfDwKap+3wqtIvOLI9ziExfB3xjB0vK1+lR4ztOWhZTcLs9lhcI+eGi8eoZuw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7gaTWNqi+pumqiUecLj+Puq7S7mc3t6LC8iqwbHyXaw=;
 b=Xxj3XSxzdKHPSWO9VVNVD3oOCdGaFO1eACui5GYYI/jW/XXAdjO5vJf36FOXyFDhdNn345hMWbbZBbBWcApS49H6/WUqrvcB+6InqknbvK7JxHGu+vQiz0ataDz9b/QkVo9mRDSG+w4/V5XRRba2G32MQEq/CMKD1A5ukJKf8RNAiwShz+hJN5fPlZJAN0043IyNn7J1NWTFRSUkGnO8JXzQebHtszJ0c0K72ViTxXZquTqYcGNSTB6n7bannNr5Gi0Emh3lVqOkN2b/9qRx7mOzEfLslEH9O1eXfjJetKKkAf/LLZQB0ZtiahqxUfjo1PUg1mS69FQ/fZkJ5BGtgw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7gaTWNqi+pumqiUecLj+Puq7S7mc3t6LC8iqwbHyXaw=;
 b=yyK4onSM2Sfu5RVAEn+xzb2e6MuSjzeOpodWfPauhPWt7VwMaxk3RJ+FBAddZVcvraebTUUEOoAQh5/nwHYyB0LH8dvoAgH4QOjrxVappYuwgnvChFHCDCKJiPLxGsa7P09QkjPJxq4LvUMnB3amXhK6LC30ZBrdaP81dAbGFj8=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>, Julien Grall
	<julien@xen.org>
Subject: RE: [PATCH 4/9] xen/arm: static memory initialization
Thread-Topic: [PATCH 4/9] xen/arm: static memory initialization
Thread-Index:
 AQHXW0b3OiAcoe7xDE2AVcNY0dwUCqsNAWAAgB/3qYCABuqiQIAANggwgAAUo4CAABh8YA==
Date: Mon, 5 Jul 2021 09:19:40 +0000
Message-ID:
 <VE1PR08MB5215A5D978B1B1D2403C53E2F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <e0a312a1-f430-3ff0-6dd6-fcfe18e58071@suse.com>
 <7f77349f-015e-83d3-d646-af9897e31348@xen.org>
 <VE1PR08MB52150F476CA7E1989F9067C7F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <VE1PR08MB521538D03677F9CBC6088855F71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <5ce26bab-9ebf-f3c5-44a3-7918227f3afd@suse.com>
In-Reply-To: <5ce26bab-9ebf-f3c5-44a3-7918227f3afd@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: A2A50A4422C42740B82F6382A645C5B3.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.113]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 8fa349e3-887c-454e-08b5-08d93f9608dc
x-ms-traffictypediagnostic: VI1PR08MB5391:|DB6PR0802MB2424:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB6PR0802MB2424810A92BB5EC3881BF1B5F71C9@DB6PR0802MB2424.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 +r4k56Wv3vb2mQXryeNGwAG7+TYcDm+8slTDl8Jm+6GuJUWiay7DU+DxmWv3BFf3MuIZoIY9g8XcjGIUs4UwhakJQbmYeBP9l12JCGDdXa3wwsbRyDuSnCGm1SU35opK5VONgDDUQTFs5ha79yx3othXyV1tm1nIipJlKmx9FgIPizZyfm4j2z4IXFV9cPQt6FzwmU+5zhZAjZ2tyWzPFBQTwdPrCk5Q9oAOvpY24IBD1HuDQdQzcc+zXSD3Xe6NwAgD2Ugv2azMZTMBS+Iuhje2zJ+e25pAJSi9QvK03QIKQQiiPlq21cVDJU5buThSHDG82aqI8MlQGY6wAv6S79+1KeqigBYh0/l65k0bi15cTYgCukKyl88Z4N8cJZTQb7mi3A2yp6Zic5G/KdtXtRtWKLIAjY33OdlSfHJOmvDqZUw/sb55Gxl3OMtT6hpL1j/cYFM9B9qJpH2qj5i68dsx42x0gTTQgwJ28h8vltNfmAq8eaHZ5xNw9GTRUz33MjV2KSwtCFiMZZIKHUYTRqI/7GKczI4x4uDzDM7JiG3CMS5CiyQfpAQgLks1XYsVta0hbGlLOX1ho/XZKeburQ81ip3ib8KcDd4S6PwJbPycCXR5tQPUkraRIiJvpOs56dg6n5X/heVnB7evUpDgiA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(366004)(396003)(136003)(376002)(346002)(8676002)(4326008)(38100700002)(53546011)(66446008)(316002)(8936002)(6916009)(52536014)(55016002)(86362001)(5660300002)(6506007)(66946007)(66476007)(478600001)(9686003)(33656002)(122000001)(71200400001)(83380400001)(76116006)(54906003)(7696005)(186003)(66556008)(64756008)(2906002)(26005);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5391
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT043.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	d5d60963-af9b-414d-a05d-08d93f960472
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	JOIHbRUS3I8JI1qnfYrnfZgu9mcPnxtY1os12YZklCFHDAyTVrtTBM3NMpUFhsmsVQjRgKLb7BcdVM8YhldhsM28fVQJnyIvs0oUE7PjkrOXqZPPrLc95CioZ+XIEG02ZcXGWNfv0TDo2Dm/wyevMvf/yrXD1nKPRyv3aaqNHYadH0RMHTYUTt8Lx1ZjZ8KFE5vPEjYZY+4+MNlnwgCyu1pl79ibzICkj/GopLEG8cui8yNBRA/3lpT11YjB+r/vfeXX+1QNzzUeoAO/hw7E400DvRWJZzVOSCgQeJb7uO/dDsw8NIjoK/7n7s8Se5m13kHgJEKrV8en9DKwMCaWZVHaO3iGkptyOGtdQNIz/UOsXBK7ytlZ9aehS3ma0uVZRwhqOy+AannH5pC78XI8m/alrnMLE569dxKYklJH3459HbsOugJx4AtbCsh/HdBd/kq+U7DvlQKtUB/GXeB+nIxvazNV5nZ3lJR/KdVm8pzFmtTuFmvyvuwGFqPO+bJbFBtyYpB6W6WigkhjZMvfGOuTLH/7bbFNv7uabKb+Cv69G7KtXJsta3J7/V/NVYUdw7XXgBoD1zQOsK4J0oIbg/1buRthDraiBR709Grqs6iJeXpXfcCYetFWSeAUaECar4+CKTAb0R2btjcJE1ViFLzNxLLoS2Z/lba95dfTOI5EHPgRHuDNaRta569se8KsMefysr8bOI+E2ieLs49JUw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(136003)(396003)(39850400004)(346002)(46966006)(36840700001)(26005)(356005)(55016002)(2906002)(9686003)(81166007)(52536014)(186003)(47076005)(53546011)(6506007)(8676002)(82310400003)(82740400003)(70586007)(54906003)(8936002)(4326008)(7696005)(86362001)(478600001)(83380400001)(70206006)(316002)(33656002)(6862004)(336012)(5660300002)(36860700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:19:47.5843
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 8fa349e3-887c-454e-08b5-08d93f9608dc
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT043.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2424

SGkgSmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBNb25kYXksIEp1bHkgNSwgMjAyMSAzOjUx
IFBNDQo+IFRvOiBQZW5ueSBaaGVuZyA8UGVubnkuWmhlbmdAYXJtLmNvbT4NCj4gQ2M6IEJlcnRy
YW5kIE1hcnF1aXMgPEJlcnRyYW5kLk1hcnF1aXNAYXJtLmNvbT47IFdlaSBDaGVuDQo+IDxXZWku
Q2hlbkBhcm0uY29tPjsgeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOw0KPiBzc3RhYmVs
bGluaUBrZXJuZWwub3JnOyBKdWxpZW4gR3JhbGwgPGp1bGllbkB4ZW4ub3JnPg0KPiBTdWJqZWN0
OiBSZTogW1BBVENIIDQvOV0geGVuL2FybTogc3RhdGljIG1lbW9yeSBpbml0aWFsaXphdGlvbg0K
PiANCj4gT24gMDUuMDcuMjAyMSAwOToxNCwgUGVubnkgWmhlbmcgd3JvdGU6DQo+ID4+IEZyb206
IFBlbm55IFpoZW5nDQo+ID4+IFNlbnQ6IE1vbmRheSwgSnVseSA1LCAyMDIxIDE6MjIgUE0NCj4g
Pj4NCj4gPj4+IEZyb206IEp1bGllbiBHcmFsbCA8anVsaWVuQHhlbi5vcmc+DQo+ID4+PiBTZW50
OiBUaHVyc2RheSwgSnVseSAxLCAyMDIxIDE6NDYgQU0NCj4gPj4+DQo+ID4+PiBPbiAxMC8wNi8y
MDIxIDEwOjM1LCBKYW4gQmV1bGljaCB3cm90ZToNCj4gPj4+PiBPbiAwNy4wNi4yMDIxIDA0OjQz
LCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPj4+Pj4gQEAgLTE1MTIsNiArMTUzMCwzOCBAQCBzdGF0
aWMgdm9pZCBmcmVlX2hlYXBfcGFnZXMoDQo+ID4+Pj4+ICAgICAgIHNwaW5fdW5sb2NrKCZoZWFw
X2xvY2spOw0KPiA+Pj4+PiAgIH0NCj4gPj4+Pj4NCj4gPj4+Pj4gKyNpZmRlZiBDT05GSUdfU1RB
VElDX0FMTE9DQVRJT04NCj4gPj4+Pj4gKy8qIEVxdWl2YWxlbnQgb2YgZnJlZV9oZWFwX3BhZ2Vz
IHRvIGZyZWUgbnJfbWZucyBwYWdlcyBvZiBzdGF0aWMNCj4gPj4+Pj4gK21lbW9yeS4gKi8gdm9p
ZCBfX2luaXQgZnJlZV9zdGF0aWNtZW1fcGFnZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGcsDQo+ID4+
PiB1bnNpZ25lZCBsb25nIG5yX21mbnMsDQo+ID4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIG5lZWRfc2NydWIpIHsNCj4gPj4+Pj4gKyAgICBtZm5fdCBtZm4gPSBw
YWdlX3RvX21mbihwZyk7DQo+ID4+Pj4+ICsgICAgdW5zaWduZWQgbG9uZyBpOw0KPiA+Pj4+PiAr
DQo+ID4+Pj4+ICsgICAgZm9yICggaSA9IDA7IGkgPCBucl9tZm5zOyBpKysgKQ0KPiA+Pj4+PiAr
ICAgIHsNCj4gPj4+Pj4gKyAgICAgICAgc3dpdGNoICggcGdbaV0uY291bnRfaW5mbyAmIFBHQ19z
dGF0ZSApDQo+ID4+Pj4+ICsgICAgICAgIHsNCj4gPj4+Pj4gKyAgICAgICAgY2FzZSBQR0Nfc3Rh
dGVfaW51c2U6DQo+ID4+Pj4+ICsgICAgICAgICAgICBCVUdfT04ocGdbaV0uY291bnRfaW5mbyAm
IFBHQ19icm9rZW4pOw0KPiA+Pj4+PiArICAgICAgICAgICAgLyogTWFyayBpdCBmcmVlIGFuZCBy
ZXNlcnZlZC4gKi8NCj4gPj4+Pj4gKyAgICAgICAgICAgIHBnW2ldLmNvdW50X2luZm8gPSBQR0Nf
c3RhdGVfZnJlZSB8IFBHQ19yZXNlcnZlZDsNCj4gPj4+Pj4gKyAgICAgICAgICAgIGJyZWFrOw0K
PiA+Pj4+PiArDQo+ID4+Pj4+ICsgICAgICAgIGRlZmF1bHQ6DQo+ID4+Pj4+ICsgICAgICAgICAg
ICBwcmludGsoWEVOTE9HX0VSUg0KPiA+Pj4+PiArICAgICAgICAgICAgICAgICAgICJQYWdlIHN0
YXRlIHNoYWxsIGJlIG9ubHkgaW4gUEdDX3N0YXRlX2ludXNlLiAiDQo+ID4+Pj4NCj4gPj4+PiBX
aHk/IEEgcGFnZSAoc3RhdGljIG9yIG5vdCkgY2FuIGJlY29tZSBicm9rZW4gd2hpbGUgaW4gdXNl
LiBJT1cgSQ0KPiA+Pj4+IGRvbid0IHRoaW5rIHlvdSBjYW4gYXZvaWQgaGFuZGxpbmcgUEdDX3N0
YXRlX29mZmxpbmluZyBoZXJlLiBBdA0KPiA+Pj4+IHdoaWNoIHBvaW50IHRoaXMgY29kZSB3aWxs
IG1hdGNoIGZyZWVfaGVhcF9wYWdlcygpJ2VzLCBhbmQgaGVuY2UNCj4gPj4+PiBsaWtlbHkgd2ls
bCB3YW50IGZvbGRpbmcgYXMgd2VsbC4NCj4gPj4+Pg0KPiA+Pg0KPiA+PiBZZWFoLCBJIHdhcyBm
b2xsb3dpbmcgdGhlIGxvZ2ljIGluIGZyZWVfaGVhcF9wYWdlcy4NCj4gPj4gSG1tbSwgSSBjb3Vs
ZCBub3QgdGhpbmsgb2YgYW55IHNjZW5hcmlvIHRoYXQgd2lsbCBsZWFkIHRvDQo+ID4+IFBHQ19z
dGF0ZV9vZmZsaW5pbmcsIHRoYXQncyB3aHkgSSB3YXMgbm90IGluY2x1ZGluZyBpdCBhdCB0aGUg
Zmlyc3QgcGxhY2UuDQo+ID4+IEZvciBicm9rZW4gaXNzdWUsIHRiaCwgSSBqdXN0IGNvcHkgdGhl
IGJ1Z19vbiBmcm9tIGZyZWVfaGVhcF9wYWdlcywNCj4gPj4gYWZ0ZXIgcXVpdGUgYSB0aW1lIHRo
aW5raW5nLCBJIGFsc28gY291bGQgbm90IGZpbmQgYW55IHNjZW5hcmlvIHdoZW4NCj4gPj4gYSBw
YWdlKHN0YXRpYyBvcg0KPiA+PiBub3QpIGNhbiBiZWNvbWUgYnJva2VuIHdoaWxlIGluIHVzZS4g
Oy8NCj4gDQo+IEknbSwgYWZyYWlkIEkgZG9uJ3QgdW5kZXJzdGFuZC4gVXNpbmcgcGFnZV90b19t
Zm4oKSwgZXhwZW5zaXZlIG9yIG5vdCwgaW4NCj4gQVNTRVJUKCkgaXMgcXVpdGUgZmluZS4gVGhl
IChleHBlbnNpdmUpIGV4cHJlc3Npb24gd29uJ3QgYmUgZXZhbHVhdGVkIGluDQo+IHJlbGVhc2Ug
YnVpbGRzLiBUaGlzIGlzIHNwZWNpZmljYWxseSBkaWZmZXJlbnQgZnJvbSBCVUdfT04oKS4NCj4g
DQoNClRoYW5rcyBmb3IgdGhlIGV4cGxhbmF0aW9uLiDwn5iJDQpJJ2xsIHVzZSB0aGUgQVNTRVJU
KCkgdG8gZG8gdGhlIGNoZWNrLg0KDQo+IEphbg0KDQpDaGVlcnMNCg0KUGVubnkgWmhlbmcNCg==


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:20:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:20:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149973.277372 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Klq-0002TR-OP; Mon, 05 Jul 2021 09:20:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149973.277372; Mon, 05 Jul 2021 09:20:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Klq-0002TK-LB; Mon, 05 Jul 2021 09:20:06 +0000
Received: by outflank-mailman (input) for mailman id 149973;
 Mon, 05 Jul 2021 09:20:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Klp-0002KC-Db
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:20:05 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2e4ad8a8-dd72-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 09:20:04 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2171.outbound.protection.outlook.com [104.47.17.171])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-1-oOeDK2uuNx6hhAsZyM1agA-1; Mon, 05 Jul 2021 11:20:02 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7375.eurprd04.prod.outlook.com (2603:10a6:800:1a8::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Mon, 5 Jul
 2021 09:20:01 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 09:20:01 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P251CA0011.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:20:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2e4ad8a8-dd72-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625476803;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=aE2e9I9ykhO9ORR0cizNPluzBg1KOXSa8syIJgFqcac=;
	b=EKlIfNTAc9toIEqHIsXsblxnvX9+vWxYIG4hfpgPc+P6beK0ub7LKQG9xAVA1NjXe5fQN7
	SqgTiILGEwq8vb66AJ36SsLptoZxK5Y4UhKg+D21Brb4wiI3+DzRXAi9jm/IIThObPsF2k
	dwejevughPk0Xsb9g90enRiwZiauQTY=
X-MC-Unique: oOeDK2uuNx6hhAsZyM1agA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hHEAlIJhydj66wlvkPhJ1VmTGJNRlrfSuA1UGIWXMKAS+migzvWDP+EoB7BVKS+x5xu5ZfM8KGQKkbTroSTVfJqq8xoyuYrR+v/mVTxUzZNDAQUu0H10p+mSL8aFgtKfZWI+v3CTLNuFfuEND6ggjYlwV9OeWUcAzeyMeE8uasjao7GvIQSgRpIhnz4FdrlVmA4431O38rKrIsAW37pSSELeBO309DaqEb41/vOI82Dk7OCzUV/JZeWjghGt7+9B5g8SWA2+KgRM+QbEZ25RV9sa6qDqkex8fmOZDZkkyderxW/l0S+Q2kgy+deyBxbYzpF28niSqKipGVpxKWRFRg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=aE2e9I9ykhO9ORR0cizNPluzBg1KOXSa8syIJgFqcac=;
 b=oVUJdXtreh1Cc/r4TrL2GhntsaNyudtmKeT97Ic1M0iyj4hDea++xvKiz6fvQb1qtqvd3iD/Pftt9NJNmdVJBrMrgnGxhqTjsP1EENeq8ZBfEiShtBer6/QhjyS5GWuQ9wjhYsSjBCJ0hqraFgZzI4oghGAX+tHH8dLJJocF9OGgZamB19n7UjoOJtgA6lgBxqG8CImafgnPj2V5hhWEjnNjtUzAC/K4YJ2QPfgMofBgFlc5BvEOD4xo5ADl85YFnZugdhnduGRPbq3sUB9xJKr6L/I2vYjGIxmncQSuE6xb4KzRFL4mb5gW25vwBlviPQLxEbbTWPMRrZS2PNVLXw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
To: Olaf Hering <olaf@aepfle.de>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
 <06968742-355f-ad37-0681-e51eea256414@suse.com>
 <20210705100228.4947ed4e.olaf@aepfle.de>
 <ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
 <20210705103224.26f3835d.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <1e2a3967-06e5-75ec-3aa5-1f39b6700e63@suse.com>
Date: Mon, 5 Jul 2021 11:19:59 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705103224.26f3835d.olaf@aepfle.de>
Content-Type: text/plain; charset=UTF-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P251CA0011.EURP251.PROD.OUTLOOK.COM
 (2603:10a6:102:b5::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 279c6ece-704d-48c3-2d95-08d93f9610e9
X-MS-TrafficTypeDiagnostic: VE1PR04MB7375:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB73750FD287C906704A647E61B31C9@VE1PR04MB7375.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	626IT4OZjeSPolmjiXWPBn+TZIb+6gYUbelKU0iuE2dYiodXOm5b8ci0O7X1cVfBFerhT2WYq1VBJ/dABv5UPTEGwLjW90QZThyWsLJhoWKnIHR4Mt3x370ThwPkzk6mgCYm8iRWSoQAL3qY8ENxuh0W9RjbF/c5a8/ZRCA1Ptd1HV3YIK9GmE1UfTAV3NsHI7vHoE1TtlClLTAXU/o6zrA7qP23aehzrV1+vSohB8/8p56Pblm+FVkXpgxycd1MTSX2moZ3SW53NnWaqlRmgpCeWa7MhGDu5khGbmac9wKtL188NYKA9992IGy8p9cLqq02v9Karbw1ZmHnFMu9BW1tsi7VzvnZVQOZTWgNnNMZLnPzZ+68suBBhAfRR+1c4Vp8YbxaKhMkXvgOjhPfRKI6O6PkM3dJY1kgUqcmGzssmVQcwOsbj6la3x8qe9hilsH/nLusyYLeoiLqtHKUAuT3qNG2Xs9rTMtFvV1SPDY6ZTCLK2PAw8uJz+rkl7dFqZh4fYJtN7hpnNiMy5lbQF8Ig15wb1SFcyXA98YbYUmRuPE0gUYXjjYorXMIbj3fcZSW2BI5XEc2nA4W5sFv1vDYOTNLz1bQE92wbKB/v4x3qxxg6QzKK+Z8nSsRbnzjJ6bdzhZK+5W9bkSemGe9fUjnFfqFQGrU6dviVQAH1Gi26HzUNqCIj/nNgSU6pYDTCw9lxKlyTV6avsbsO8+ibqtGiVkYp460Pt3rPVhrTG8=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(136003)(366004)(396003)(346002)(376002)(2906002)(16526019)(83380400001)(26005)(53546011)(54906003)(36756003)(38100700002)(478600001)(8676002)(31696002)(186003)(16576012)(86362001)(8936002)(31686004)(66946007)(316002)(956004)(2616005)(66476007)(6916009)(4326008)(6486002)(4744005)(66556008)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?FGTEE3RLpU502OZOTGk/LFCJdH0ZsKovHEGZDpq?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 279c6ece-704d-48c3-2d95-08d93f9610e9
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:20:01.1916
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: sq4X54mWjhb9xM//qx2JteHUMR0HzTCKUKonmtSEDue4bMh8SEqRC2UbKwUVqEDMoNSgfyyEI4Itj6g7gz1srA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7375

On 05.07.2021 10:32, Olaf Hering wrote:
> Am Mon, 5 Jul 2021 10:23:00 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>> I see. A similar problem then exists with at least the FIFO event
>> channel per-vCPU control blocks?
> 
> I have not done any debugging how the pages differ and what they are actually used for.
> 
> My guess was that it might be activity from the backends, particularly
> netback. I found no API to query the usage of a page, so I declared the
> interface broken..

"The interface" being which one? The tool stack can map the guest's
grant table, so it is in the position to find out about all grants
without further hypervisor help. Afaict the same isn't true for the
FIFO event channel control blocks, though, and maybe there are
further ways by which pages may get modified for a paused guest.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:26:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:26:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149984.277383 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KrX-0003RX-Ej; Mon, 05 Jul 2021 09:25:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149984.277383; Mon, 05 Jul 2021 09:25:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KrX-0003RQ-Bd; Mon, 05 Jul 2021 09:25:59 +0000
Received: by outflank-mailman (input) for mailman id 149984;
 Mon, 05 Jul 2021 09:25:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0KrW-0003RK-3P
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:25:58 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.166])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 005eda2e-dd73-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 09:25:56 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx659PtL7z
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 11:25:55 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 005eda2e-dd73-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625477155;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=y0Ymbe55rYi3lkV6wS54ZVsWy94bGThXvZ8g5xKRpic=;
    b=VgLFOS80X5gvfv57/M11wD4kwWdFYC1W3T91umskJzNop/4MVki0aXXim68nQ3alM8
    qnMQw7ZQaaXW7omQzOne09REDhLdjWHXB5+aaKHEcY3byJ1qVhzoCpnfxg314LV11GUv
    IawnPQk1P2n7AX9N+K5BTGSxvhrx5K9eHUoaYZnQSASR34vLD4dHIstCo1yttQmxFOqC
    u2+528OBf1lTrvPBsgju1TPf1Vu3fs5qKj0GZ2gBwnvVtQcoWQSCg/ghkTZfm9P3q3AI
    R9nNqdRRNvm7zzHLOU8Ovn2XdWWZl6UXoouccs2osod3+yIfXnKezPT31YtSTXIgr8vE
    FMKQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 11:25:48 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Xen-devel
 <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
Message-ID: <20210705112548.22ae6d20.olaf@aepfle.de>
In-Reply-To: <1e2a3967-06e5-75ec-3aa5-1f39b6700e63@suse.com>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
	<06968742-355f-ad37-0681-e51eea256414@suse.com>
	<20210705100228.4947ed4e.olaf@aepfle.de>
	<ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
	<20210705103224.26f3835d.olaf@aepfle.de>
	<1e2a3967-06e5-75ec-3aa5-1f39b6700e63@suse.com>
X-Mailer: Claws Mail 2021.05.27 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/HqW.YTqH9FVj8uTMxbBlZOI";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/HqW.YTqH9FVj8uTMxbBlZOI
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 11:19:59 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> "The interface" being which one? The tool stack can map the guest's
> grant table, so it is in the position to find out about all grants
> without further hypervisor help.

The interface means the code behind verify_frames.

If there are indeed ways to query which pages belong to grants, how would t=
he toolstack need to do that?


Olaf

--Sig_/HqW.YTqH9FVj8uTMxbBlZOI
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDi0BwACgkQ86SN7mm1
DoALlg/+LTM1mpqsWTwWf4F9+rmU+/lb34pFDxy9Vc1/LJe5b8CFUF3EavWN8VXY
J3asCPJR7FHXxL74dSAJ+8K4xQM5TRvflIp+7CFVPS7vAKM3x2mQG2KQ/6H+Cfzw
Qc2C1BlRjtBCsudAsBFN6cDFYPVAPmKVPLkOPpikrkHVpePKRz+llCFzQ/DpWGGU
cyboCxgcjzZE9649oHmdPkBTSYjwsRDTjA593wiTXnWgqC63Y5kKZJCPD589o09X
JNsQL02DpkF4+X/m1j4/POENEO6ZC1/51xSNv6Mg3pAMmFq1Rn7g2XayZ+v/C+i+
e8jdLB+gPb/ZXd/TrgmIK/gzBQqazyoIoevwRinl5ZMkFQi7c7S7LjGHg5kN1Uz2
398ns6TyNe6s0KcPDAFAR2QKlObyD2gVQuWHc2iqeq8jb2CaD9x6+drVzNSNTn/1
SjhyKyEmWFrbMtHjrmOfFe+SSeim5sgD/odLUltZy6+7uaZJX0PqQJ9YK9yiLhFu
/IDEdt8bifnKyS88n8J1aGbV34Sv6wy4alQ2O8uOSojnQleQz4yGb2muwnEGMwKq
uiB+5+TYGPjVS2wrG/fu2OXbWr8W5BhNc8GCD/b5Kb1xWubnY5p/jWk0E4eXen/g
6F4cjL/9lVMMxuWBWr99LlTUkoi6JuLFd20R8fO79FNaRXrJDnQ=
=nU6Z
-----END PGP SIGNATURE-----

--Sig_/HqW.YTqH9FVj8uTMxbBlZOI--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:27:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:27:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149989.277395 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KtQ-00044D-SJ; Mon, 05 Jul 2021 09:27:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149989.277395; Mon, 05 Jul 2021 09:27:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0KtQ-000446-OD; Mon, 05 Jul 2021 09:27:56 +0000
Received: by outflank-mailman (input) for mailman id 149989;
 Mon, 05 Jul 2021 09:27:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=y0UI=L5=gmail.com=fontaine.fabrice@srs-us1.protection.inumbo.net>)
 id 1m0KtP-00043z-Ln
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:27:55 +0000
Received: from mail-lj1-x234.google.com (unknown [2a00:1450:4864:20::234])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1e4d5ce3-02e1-43d0-a266-bea790de399f;
 Mon, 05 Jul 2021 09:27:54 +0000 (UTC)
Received: by mail-lj1-x234.google.com with SMTP id t30so3825368ljo.5
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 02:27:54 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1e4d5ce3-02e1-43d0-a266-bea790de399f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=P+qSy8IGAGojkMhIacuBSum3i+RiyiSZGBv9wxV91Ms=;
        b=Do1+2UKaUX7IiK952BaVIqSw0Oa/VSNTMcnqbBcXoPB0/X5gU+RMGW4UzqiS0wmRtw
         YgjQzjQUp0UnLoryUTiBZFLsLfuiLV8z5SJCaYvePxtKSGl+HxY4zaWD0tl/AjLApKPI
         PQeiHWXJoLGrtoix1u4W9twM4sFL+aTCQPElUMj+E4I9/wuGlautT/TbVVX6kD9dPvJS
         rOK9YVJElP2vZmC2+u+8N8wQa9oKbBZnlAdMTfR/UNt4UuD/DQrVGxWpE7KdPGQ4hkDz
         gp4f+rjq7HlheG4YFlBjWqqpczQBGxaYDon8xxed+QwwvXsuW864ue+VL6WR84WvOzhR
         4T7A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=P+qSy8IGAGojkMhIacuBSum3i+RiyiSZGBv9wxV91Ms=;
        b=k866lad7YsPv4yuWQe6447YgnO5p+FuwCdm0hNxEufRcdHCeWDr4DSA3Sa5EUFVk81
         OtUlQlSdW0l6aNf0ki8xxV1VuYgHM1LjvDPycEMtvXgBmZe7x7P4ILEwKx9nWR5eWPnT
         OIKCQWA6S/11vnKsW+zaNLh7DuxKd/sFiEsnHkVZQPqCvChaLb35tu81feoF1dEDJQSe
         pGWjHOZkzM98ydQwBuOjcqzOZC4H7cUG/dTDjuIHqsoTWZ2Sra3J2YITUYwb3rx7/5aj
         S/f1MKHKK5aodEaoSEwCmfrgU4meT0EdxG59nnMCkywT3q9j8oj6pf2q2754eJbSMRg7
         RENA==
X-Gm-Message-State: AOAM532abi3BR9DN4lQ4aP11meUHmjaxBdySoJwFgqV2DQ5f58b95OeD
	socl+wBVwMLe8PPqT7Bz8HmQ/KLanXNrSm+/580=
X-Google-Smtp-Source: ABdhPJxJfBUkXqCdbeU9gCFObz8I8U4281eSs2/ewnjIIzNaQqe4Dp7JmeSUIWCQ5Xwi6J6qyut7CF9W+kGH8+8nsiU=
X-Received: by 2002:a2e:8596:: with SMTP id b22mr10373383lji.63.1625477273720;
 Mon, 05 Jul 2021 02:27:53 -0700 (PDT)
MIME-Version: 1.0
References: <20210702170602.890817-1-fontaine.fabrice@gmail.com>
 <b920b793-734a-5f1f-6c4c-0d31ed27d01c@citrix.com> <CAPi7W81h=81ztVG6X0kh0+KEn9ryxAwXtK7-BWxonrXLJBZXaw@mail.gmail.com>
 <f56c54db-d3b9-33b0-2c8b-6ee9098e633d@suse.com>
In-Reply-To: <f56c54db-d3b9-33b0-2c8b-6ee9098e633d@suse.com>
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date: Mon, 5 Jul 2021 11:27:42 +0200
Message-ID: <CAPi7W83qfze=4RtCGr+_V+Ph8vhMkOS135NbWoZuqmi1FkLixA@mail.gmail.com>
Subject: Re: [PATCH] xen/Makefile: drop -Werror
To: Jan Beulich <jbeulich@suse.com>
Cc: xen-devel@lists.xenproject.org, Andrew Cooper <andrew.cooper3@citrix.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Dear all,

Le lun. 5 juil. 2021 =C3=A0 10:16, Jan Beulich <jbeulich@suse.com> a =C3=A9=
crit :
>
> On 02.07.2021 19:51, Fabrice Fontaine wrote:
> > Le ven. 2 juil. 2021 =C3=A0 19:34, Andrew Cooper
> > <andrew.cooper3@citrix.com> a =C3=A9crit :
> >>
> >> On 02/07/2021 18:06, Fabrice Fontaine wrote:
> >>> Drop -Werror to avoid the following build failure with -DNDEBUG:
> >>>
> >>> In file included from <command-line>:0:0:
> >>> /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-0/output-1/build/x=
en-4.14.2/xen/include/xen/config.h:94:0: error: "NDEBUG" redefined [-Werror=
]
> >>>  #define NDEBUG
> >>>
> >>> <command-line>:0:0: note: this is the location of the previous defini=
tion
> >>>
> >>> Fixes:
> >>>  - http://autobuild.buildroot.org/results/66573ad0abc4244c0dfeac8b684=
a7bfcc31c0d4d
> >>>
> >>> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> >>
> >> For better or worse, It is Xen's policy that -Werror will remain.  95%
> >> of the time, it is the right thing.  We will however build failures
> >> whenever they crop up.
> >>
> >> This one is weird though.  How is NDEBUG getting in twice?  What does
> >> the rest of this build environment look like?
> > NDEBUG is added by buildroot in the command line if the user sets
> > BR2_ENABLE_RUNTIME_DEBUG to false since
> > https://git.buildroot.net/buildroot/commit/?id=3D5a8c50fe05afacc3cbe8e7=
347e238da9f242fab0
>
> I suppose the build environment setting is really intended for user mode
> code. I question its applicability to the building of kernels or
> hypervisors, but I can see that opinions may vary here. If we wanted to
> honor a pre-existing NDEBUG, how about simply making xen/config.h have
>
> #if !defined(CONFIG_DEBUG) && !defined(NDEBUG)
> #define NDEBUG
> #endif
>
> ? This then raises the question though how an external environment could
> achieve the opposite effect of suppressing NDEBUG's definition despite
> CONFIG_DEBUG being set. (The main point - hence my view expressed above -
> is that we switched to Kconfig to centralize where settings get
> established, moving away from taking ones from environment or make
> command line.)
FYI, we have reverted the commit that allowed the user to set -DNDEBUG
as it was raising too many build failures:
https://git.buildroot.net/buildroot/commit/?id=3Da1c7cff1a081765c082c196bd9=
e6c1e72ceee797
So, this patch is not needed anymore on buildroot side.
>
> Jan
>
Best Regards,

Fabrice


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:31:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:31:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.149996.277406 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Kwf-0005R5-CC; Mon, 05 Jul 2021 09:31:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 149996.277406; Mon, 05 Jul 2021 09:31:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Kwf-0005Qy-7r; Mon, 05 Jul 2021 09:31:17 +0000
Received: by outflank-mailman (input) for mailman id 149996;
 Mon, 05 Jul 2021 09:31:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Kwe-0005Qs-9i
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:31:16 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 68704eec-e8b3-449c-8e79-657a0882a3a5;
 Mon, 05 Jul 2021 09:31:15 +0000 (UTC)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2057.outbound.protection.outlook.com [104.47.10.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-12--4m3hvj5OEuo4V2gMVtPoQ-1; Mon, 05 Jul 2021 11:31:13 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6174.eurprd04.prod.outlook.com (2603:10a6:803:fa::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Mon, 5 Jul
 2021 09:31:11 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 09:31:11 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P251CA0003.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:31:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 68704eec-e8b3-449c-8e79-657a0882a3a5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625477474;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=VSS7ab6faEUx22k8Q5SlASYn33rjfL9dM86O77nepwY=;
	b=jQgafPXUV0YDVkqOxhnJaryrKWCXjUQAv3BRspTXAFo7BIZFtORK2K7FRps+fXNkVWh4dW
	3Hou3cuDQSqTRA6DFOhx7+BrHfJ8e87hq+tFKfwD/sjHLnVeNWEIyDGb7Tpg5R9mQ2ifPX
	LBho1JZIb+dDyaP7VkYYmgLcAxzkEIY=
X-MC-Unique: -4m3hvj5OEuo4V2gMVtPoQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=b0zbW8vcPROfrUgGbH4VVd9gv7H+hQ3oUcoJN/sVSn/UYT9R2Bd8YVCKlpygukYPga+WSVk4UWGl3ixAqSzlKxGdqCdZ0mhqXNY4qw4/DZo+W0bEGIUReun6Yvc7gTYHzThbI3jk7JycF5rRSYtBsjdnmyTdjzpmEssE5UaOUj5husPt1vKdDPJc65zGgjmnFsA5B30A84agOWV2D4bRneBxamEmtjAoV6Rt6hUJHMDPZSBek1b0+9/MuvpdRdDI6Uf5TgdxQv1xM74FTt3shiMFspu9+WV56GwrekU5OgwXlTP7rhPMC33T8drovrmiH1PwWrCyjkszLjf2dkLHFg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=VSS7ab6faEUx22k8Q5SlASYn33rjfL9dM86O77nepwY=;
 b=ILx7CrcJnCkT9RlseQcVRu/19o5r/sDzUQlw6das65AzZyY1D0/M02G+pinNakC1Bbyzg8J3ufTPtxzYItt6NrAJhxu90RJB5KpuxqU43HkRdonNOS5uKKJlpa9hiIhgvubL+HuOfXkaktL2eqgyhlc5uNFNAGOC18oV8XsA54X5QX4CF6h95vqD2hTlpmdX01mX0MsZh9yVSXUkcmSbWoVAbBYrwtl9lQpwjMJJvUY94LmY36j7/JRPxTUGXt05WViQNLZDFKtEwuD7Iy0ocHAIiLSC1l15MuPOjTIOZP1VYtEKkUSAAIi+vyI5mYXSKc6NqdrdQ/SWMgqdOTRWEw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
To: Olaf Hering <olaf@aepfle.de>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
 <06968742-355f-ad37-0681-e51eea256414@suse.com>
 <20210705100228.4947ed4e.olaf@aepfle.de>
 <ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
 <20210705103224.26f3835d.olaf@aepfle.de>
 <1e2a3967-06e5-75ec-3aa5-1f39b6700e63@suse.com>
 <20210705112548.22ae6d20.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <5e4986ad-d3ec-18af-b1ea-ccbce57a70ff@suse.com>
Date: Mon, 5 Jul 2021 11:31:09 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705112548.22ae6d20.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P251CA0003.EURP251.PROD.OUTLOOK.COM
 (2603:10a6:102:b5::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b1fc3aaa-abe4-4c88-af14-08d93f97a028
X-MS-TrafficTypeDiagnostic: VI1PR04MB6174:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB617493D5FCCA08847FF300C6B31C9@VI1PR04MB6174.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	1AWOWL0iL9vknBiTC8WY0qBv/BZt0FsYV5xEZZmMD6R2PaSnX/GmdL3cZr29m0XWy34S07w1N5MuFJpURwYXhctO189BXhovvarkSDJP9jNFyvVHWwUXeJ43jZXzNVbj98NjFyQReBsHFDu624hKac088fjX70IUh2RV8X0oJagYJ2JlY+NYcSPeRv72fuY6JnGDe1CIltn2OZeWole+uo+MaS55Cl3GaokA6iOUwb8D6jdz5GNIxd0ARpjgdXoeubSBz+s2KMFUG9WfgLZHE0iKKhv/iwXUtJYL7CBnfoNzf9CZduRJZ6HkUpd7mpPT8f3EltHlgpQQiPQGM+vWQXsDLE+FSurQzUzWavvs6oRQJ3VpbsRU6x9I9tIKNabcBD3UQ2DoUeXEX/H+XjVsOHHXtph1/nJyMDHHe8qfsKXvvPCM7V8HID0qm1trx0hTBm3JKULWcB0r+pkP2wEvlsLwOrVRe4ADNdmZ7P2uHTkrZxDjrJVpwYEVrY05Bd3yuDCYxdBRLUQqKjokhLZpPJLw91PrTuAoWZJblEdQCpdHBuiDIqlMHTTKerRRtA0krpLAOkiWSJiXJaA3o4SZvUxRcqK9BXCb+rpunC8iBpwTt7ZeuwZaC9EBQcNwfez7x74riarQWoIx/hW5nA7kN4pGYON2tLIkJtfIG7+d7VkQWJrywoHioiba201VIJCjiNhJ9RMbGEJEtuw3jVKJ49gHyO25Kn3Ja/4YZXetFog=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(376002)(136003)(366004)(346002)(396003)(31686004)(4744005)(31696002)(186003)(16526019)(8676002)(8936002)(6486002)(86362001)(26005)(83380400001)(4326008)(2616005)(36756003)(38100700002)(478600001)(316002)(66946007)(6916009)(956004)(66556008)(5660300002)(53546011)(66476007)(16576012)(54906003)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?Windows-1252?Q?UXtAP66G2EkheIjuy3gCUZEBoTjsPEZsS/YQp/vr/DgDEs+Sdca6qK76?=
 =?Windows-1252?Q?lt+PiJB/uaEH07Qj+z/7ezpFX1/lt/0evMa/pNMoL7ERjyVMy/aHzCR+?=
 =?Windows-1252?Q?zLrQbvckbdEGwV3oDosREEJSAFGHInA0ANyaKgrXpHJKleP3VkZk3yZA?=
 =?Windows-1252?Q?hq2jhgRVCaWPfPXVlB6hn0OorOUbP4aQYrQz+E1jQNFhIhH3g9rQ57Hd?=
 =?Windows-1252?Q?/cYd3vCyvt1EWsH83Jv0EanklUUUZcwbc2N1fchwz2UwGUIzRfHQBFVk?=
 =?Windows-1252?Q?5XUkKI+v0Mo9Orz06323pOrbeGsyGcvKLCdRwqRSVI0Q97aoZugzMJAn?=
 =?Windows-1252?Q?8QQrW+E1aqY+OYj05+BTYOuV/pIc/jCeI9MAXr9sjVFETLfYGmCfRGV+?=
 =?Windows-1252?Q?JR3Co1c8yxJFqA5beqsMVdNtz3U8uvyfl1ZvXLhLj+G5xCAql7B8+CAP?=
 =?Windows-1252?Q?MKcmXPoZjigRL/62QC61SAD3802hEWIxuHLAM7cVGmgpROxQubLDGUS7?=
 =?Windows-1252?Q?2/ovP090wkkdoqwZjU1/SRaPcu2us9vfkHFG3w/yrclXrmdsH+XjanUU?=
 =?Windows-1252?Q?G7X21149rNELXVUdpGfwc/VnGGtgAf/NSS8/1Qwp0AgG0+aAMA4nzMLQ?=
 =?Windows-1252?Q?2bbbmyur+kY42TAf7bY81v8VrSwmBRf4DVR+9sX5Nkj5Y5J4pc7iTuQ1?=
 =?Windows-1252?Q?zNB7jbPZ2m4fbm7hfHSuWjWcvy6PZrrPEnaiFNsCbT09dt/xi647J2XO?=
 =?Windows-1252?Q?TT1EU6E1USorKEgCGJWphycoo4bEqnRlcJ495qv7R7mRuNto87dIxGTc?=
 =?Windows-1252?Q?nK5+sZhh/x5g6XNjchaDa7I3oUKBDNx67LrBck8JseX+kCWNgzjf14vn?=
 =?Windows-1252?Q?AswO2A3IvVuNcfk0tI8ZskouLiT/rUxX2kJl+x+T3YcHMHPC5pBjw+3m?=
 =?Windows-1252?Q?EOQYaN5Zk96Bu/MoV17Dd5luY8LhmELedVw/W6aaUCDnR7KlpMANSho7?=
 =?Windows-1252?Q?xiP5J2F3tStAsxSfvFXVcXJuKGZX9RQ7G3VArHKccDo/kJHbAYtanTt/?=
 =?Windows-1252?Q?KgNYAy5ipKwx33Xe5ADrWzjFdbOcbSPDTnEyjz3Xth1w6Qor896Vlgeu?=
 =?Windows-1252?Q?QrCd9XjHaYQaqhPL2ZuZlJMcxFNKzlxUeUpdqOCUZ1Sd/DX/vBCy/PG9?=
 =?Windows-1252?Q?I/S4hA3nIUXj4cwpeNOS4Tk0waH9+uLaUX0TKZmFFxSom4iZg4gpY0pH?=
 =?Windows-1252?Q?MxGgjK7MO7iZni3r/J7bBRGPDnNe1UIihUkzemJmv+dqK/F8XKuT3cI7?=
 =?Windows-1252?Q?Hop2H1DrHstS8rkt/9mbQf8kgp4PCkMbuf9F1HlpraNuReGZWF55sL7l?=
 =?Windows-1252?Q?zCShD0r3T2XOyoKK++qjHi64pr6f7yWttAHHQ9XKzPA2kYqTGDl32DY2?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b1fc3aaa-abe4-4c88-af14-08d93f97a028
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:31:11.0287
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: IzkzVIMz/gMZRRYQQ/Yaz5YVD6yXUQTxoh+Xp1eo5onazmuoFVYhxgdv28wgV2Fn5biCXGpolXEfiqLF+tpzgQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6174

On 05.07.2021 11:25, Olaf Hering wrote:
> Am Mon, 5 Jul 2021 11:19:59 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>> "The interface" being which one? The tool stack can map the guest's
>> grant table, so it is in the position to find out about all grants
>> without further hypervisor help.
> 
> The interface means the code behind verify_frames.
> 
> If there are indeed ways to query which pages belong to grants, how would the toolstack need to do that?

Map the grant table of the guest and walk it, recording any MFN for
which at least one valid r/w grant exists.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:41:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:41:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150007.277416 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0L6s-0006ws-Hc; Mon, 05 Jul 2021 09:41:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150007.277416; Mon, 05 Jul 2021 09:41:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0L6s-0006wl-EF; Mon, 05 Jul 2021 09:41:50 +0000
Received: by outflank-mailman (input) for mailman id 150007;
 Mon, 05 Jul 2021 09:41:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1m0L6q-0006wf-8Y
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:41:48 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.77]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 364ecdcc-dd75-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 09:41:46 +0000 (UTC)
Received: from PR0P264CA0101.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::17)
 by AM0PR08MB3329.eurprd08.prod.outlook.com (2603:10a6:208:57::18) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Mon, 5 Jul
 2021 09:41:43 +0000
Received: from VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:100:19:cafe::5d) by PR0P264CA0101.outlook.office365.com
 (2603:10a6:100:19::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 09:41:43 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT013.mail.protection.outlook.com (10.152.19.37) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:41:43 +0000
Received: ("Tessian outbound 71a9bd19c2b9:v97");
 Mon, 05 Jul 2021 09:41:42 +0000
Received: from ea1444c9712e.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 60D9B237-B688-4DF7-99C6-486BA435B146.1; 
 Mon, 05 Jul 2021 09:41:22 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ea1444c9712e.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 09:41:22 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PAXPR08MB6543.eurprd08.prod.outlook.com (2603:10a6:102:12f::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 09:41:20 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5%3]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 09:41:20 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO2P265CA0401.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:f::29) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 09:41:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 364ecdcc-dd75-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HrAsSx0rfTEqLNvV8qc3N0KETcG70S8EnjOVMqOd7yQ=;
 b=TYOBDuGShVx+HNUgzJp8N0Y+I1jz8rH4pUlUlMfThXfNnP8RyFcgJZlcwV7cnndI7BEUvJTDVWHgBNQsV9qg61JUnnIDpgx5AWFhl685kGVb3Twh+3XlPzhgH+NgNH07/gNhEqKrWDmvXkI6oaCNm4bzJKesa9sR+YLpamkwE8c=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 18d00f3ab4701cae
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UiWTkMZIzwrjl6UqEWmMO3L4AkU/0QcsUeEpwVPwYRebX9cxpwyg8acXa10zTXNRsXn2HRkIhNNleriMrIp++9TojOcqucHhscGdXQ9Jw8rdUKW2R7LL1myT2DtJ7e17MSGqlokTulMtSK2L1ctQyM5O3Vd6knAT8Fx9J9eYpBx6CYRifdYYhaQEquc39fqgNOAjxBMGk4D6lZfyXxXS3GG33mQHAYgXMLPJ90gM1L6GA8XSjK5WCqVR0+ExBphOlsJS5BLJb/Cci2nPNaRSR9RrVehbwE8WlbAdnMqCqgkL3rVFW0V91Xdqv8a74EwIAVM39vutCjmSnna2am9RnQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HrAsSx0rfTEqLNvV8qc3N0KETcG70S8EnjOVMqOd7yQ=;
 b=i0HsNKVCc9B3h4LndvRxfnM4aT2JWRpBdo9AGpXsA5g0nLsC3kAYoL20EIBAHei3oS5wknqeGkCFMHymnu8nFKTuYPxiOEbWI+a9vGdXPlKr6qzqmVmIdLDNdX5gnLKZabNG5uwZ7YvR6LiW+rCWtxacemJH+7EETQ085SiofZdTAnqDA+R5bmndFYtuLxLCRyi72jvCRRwc9L1XiXrpDw70e/58Gj6CDK7GWNCTziP0N2AgSe5e02aqNMJxdcUl6wXrhbHcKgx1Xb0l+Ko0zyR/dyXdQZnrQ8giE3tfbqt4YfoKJXxhfJJb0wp09fNR6f3xcKa8jpy7TGjZYJelFA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HrAsSx0rfTEqLNvV8qc3N0KETcG70S8EnjOVMqOd7yQ=;
 b=TYOBDuGShVx+HNUgzJp8N0Y+I1jz8rH4pUlUlMfThXfNnP8RyFcgJZlcwV7cnndI7BEUvJTDVWHgBNQsV9qg61JUnnIDpgx5AWFhl685kGVb3Twh+3XlPzhgH+NgNH07/gNhEqKrWDmvXkI6oaCNm4bzJKesa9sR+YLpamkwE8c=
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v6 7/9] docs: Change Makefile and sphinx configuration for
 doxygen
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <alpine.DEB.2.21.2107021324090.9437@sstabellini-ThinkPad-T480s>
Date: Mon, 5 Jul 2021 10:41:13 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <9C2F15B2-2B24-4C23-9902-8FE355C01201@arm.com>
References: <20210510084105.17108-1-luca.fancellu@arm.com>
 <20210510084105.17108-8-luca.fancellu@arm.com>
 <alpine.DEB.2.21.2106231506040.24906@sstabellini-ThinkPad-T480s>
 <1FC1E8DF-8AED-4ABD-BE9A-DBBD9D66EDBB@arm.com>
 <alpine.DEB.2.21.2107011037580.9437@sstabellini-ThinkPad-T480s>
 <7C3269F1-3C61-4F39-82F9-9DE4C563849B@arm.com>
 <alpine.DEB.2.21.2107021324090.9437@sstabellini-ThinkPad-T480s>
To: Stefano Stabellini <sstabellini@kernel.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO2P265CA0401.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:f::29) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bec5dace-d9aa-4840-1c0b-08d93f991933
X-MS-TrafficTypeDiagnostic: PAXPR08MB6543:|AM0PR08MB3329:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB3329049E6575037A1B282A97E41C9@AM0PR08MB3329.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 eTS+uPfKWQIGqVHg3orVhv8K7PLzIPuvKHFNBJ/qFb4o3BlhvxlQ5kcfnjkQMxYMa/ByS6pGIGzYWfn+Z8/R/6POFJksph4ztCjbIKSxgO/8q/Z1FbWiRdl8wDCdQDJ23lGi0NRhg6XZeFjlH2w4TdKfyBWgOvc3gWMorogoRxky5PVtDa5ImZlGgh+vQ1NgX94FTzP80NNdZoM4vGE10gVHsEmAvRpDL3W6qHzd7n/86IeCg2kwlp4CUDQ8iy44WJDkaO69i+lWLDsOJ8jqxBOrUpnBLEezpPPMMeN4HKM/QSYvfNC4Y0YuRVx1ujuO8nl8V/d21ktwKVHqX4MHxHlVRSXSy99jG5nyWJEMsNf2su0+n76Yk55/+DRL4qaFCzZREzHq5OMGrlWwUXh6DgOJ1PGPQOFBT2zPI9dHk1yCB2QMCNdU21twiOqUAyZIZqykSaJh5XLr1P4vlqA36BseSJsAWlaAK/t4AeXmH9AfOjGO1yVcNXrm2pvLoGod6/Hyn1eFMQX31m5tCVp1MstrWgh86RRBtOwdkKd3JO+C8mVaXHcseVhNagBQnMZlzGNfHnmal9HyxU5dlwgE6i2G1kvaQNiILq6SpVofTqSXy9txX7utJm5vujlfXilzZXKnJfzdP5sRjnYLKYkVPxUugrncehD0nSANPnMHheL5nEmW9NkXREaGkiXbYQSjrAdyWEe6zcTgQCcFxpkG4d8mkxm2O1G1mMOHqjVBJnBBwdVarhXiBKxdVPL8sT91
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(39850400004)(346002)(366004)(136003)(376002)(478600001)(8676002)(66556008)(66476007)(66946007)(16526019)(2616005)(5660300002)(44832011)(956004)(4326008)(8936002)(38100700002)(38350700002)(54906003)(186003)(83380400001)(26005)(6666004)(6512007)(6486002)(2906002)(36756003)(52116002)(316002)(6506007)(53546011)(86362001)(6916009)(33656002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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/epA/?=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6543
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	7f7c21b9-bb60-4209-47eb-08d93f990b46
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	elR7CDNrEN9GRgyMfswsjbkiSG5FyW6G1o6dukSMtPq55pixMPzT8kkY4tgxQ/fj/lxpFsedblIcIz8JYli5Qs78l7dfs17OIbRRZhjqA9yUljFz3q82GWadgTfypDMpYALwSfeh1vKEPMWw1ZZgyfdX+VqStZWylOyFkH2A2xQXXfWVDdKP3Au1m2XJDlHzoXk79mXYyFGjCHrZN8vGoa2r6WUIMH+gmHB5iTfhvkA92WamZVdraLsRRJYzO0OWDZ53vbLMqOMIkQjh063ciXdZ7qEIye1bleYEk2cLHwQioAUujDqCjUnnlg6rOz5JN07r1ATS4kIhdnzNCLD759t6m16W9mXeRxmYzeDrDFTgN/R114+PBIAlD8PBClt9nOl40X27psrnP3i6+ngIuG1I8H2Tw4rDSH6CwWAelcHO/p75avp7cz623vaPQ3oKk2zsyMkWBgDrYF+RaIzxr4m97sQ1Ue7Vmy52uiP7oaEc+UYHpVPqHA58ACYyhO+R5um8cscxoTYRE2Z/XdEOftPvFfvEH2DYF0zTZA5y7xlmk46CsoqHPZaA8+bgpPpNbdbznSA3R/IBk8wHAlnyhHjj+hl4TSPG6USFHFMxKpEE+6angkPd+ue7gRUPkP7EFW4Laa+IaZhB3SKfKSVzHwt9n299Mv1nz0FSCQHF+YRMfGEAQlVkN/vwXIi0eAbxNJVP6x0Fso5ivdqjgfUWFQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(39850400004)(136003)(346002)(396003)(36840700001)(46966006)(6512007)(82310400003)(36756003)(956004)(86362001)(2616005)(5660300002)(8676002)(2906002)(70586007)(47076005)(8936002)(336012)(70206006)(186003)(16526019)(53546011)(83380400001)(6506007)(82740400003)(4326008)(356005)(36860700001)(478600001)(54906003)(81166007)(6862004)(6666004)(26005)(33656002)(6486002)(44832011)(316002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:41:43.3402
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: bec5dace-d9aa-4840-1c0b-08d93f991933
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3329



> On 2 Jul 2021, at 23:23, Stefano Stabellini <sstabellini@kernel.org> wrot=
e:
>=20
> On Fri, 2 Jul 2021, Luca Fancellu wrote:
>>> On 1 Jul 2021, at 18:43, Stefano Stabellini <sstabellini@kernel.org> wr=
ote:
>>>=20
>>> On Thu, 1 Jul 2021, Luca Fancellu wrote:
>>>>> On 24 Jun 2021, at 00:33, Stefano Stabellini <sstabellini@kernel.org>=
 wrote:
>>>>>=20
>>>>> On Mon, 10 May 2021, Luca Fancellu wrote:
>>>>>> Modify docs/Makefile to call doxygen and generate sphinx
>>>>>> html documentation given the doxygen XML output.
>>>>>>=20
>>>>>> Modify docs/conf.py sphinx configuration file to setup
>>>>>> the breathe extension that works as bridge between
>>>>>> sphinx and doxygen.
>>>>>>=20
>>>>>> Add some files to the .gitignore to ignore some
>>>>>> generated files for doxygen.
>>>>>>=20
>>>>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>>>>>> ---
>>>>>> .gitignore    |  6 ++++++
>>>>>> docs/Makefile | 42 +++++++++++++++++++++++++++++++++++++++---
>>>>>> docs/conf.py  | 48 +++++++++++++++++++++++++++++++++++++++++++++---
>>>>>> 3 files changed, 90 insertions(+), 6 deletions(-)
>>>>>>=20
>>>>>> diff --git a/.gitignore b/.gitignore
>>>>>> index 1c2fa1530b..d271e0ce6a 100644
>>>>>> --- a/.gitignore
>>>>>> +++ b/.gitignore
>>>>>> @@ -58,6 +58,12 @@ docs/man7/
>>>>>> docs/man8/
>>>>>> docs/pdf/
>>>>>> docs/txt/
>>>>>> +docs/doxygen-output
>>>>>> +docs/sphinx
>>>>>> +docs/xen.doxyfile
>>>>>> +docs/xen.doxyfile.tmp
>>>>>> +docs/xen-doxygen/doxygen_include.h
>>>>>> +docs/xen-doxygen/doxygen_include.h.tmp
>>>>>> extras/mini-os*
>>>>>> install/*
>>>>>> stubdom/*-minios-config.mk
>>>>>> diff --git a/docs/Makefile b/docs/Makefile
>>>>>> index 8de1efb6f5..2f784c36ce 100644
>>>>>> --- a/docs/Makefile
>>>>>> +++ b/docs/Makefile
>>>>>> @@ -17,6 +17,18 @@ TXTSRC-y :=3D $(sort $(shell find misc -name '*.t=
xt' -print))
>>>>>>=20
>>>>>> PANDOCSRC-y :=3D $(sort $(shell find designs/ features/ misc/ proces=
s/ specs/ \( -name '*.pandoc' -o -name '*.md' \) -print))
>>>>>>=20
>>>>>> +# Directory in which the doxygen documentation is created
>>>>>> +# This must be kept in sync with breathe_projects value in conf.py
>>>>>> +DOXYGEN_OUTPUT =3D doxygen-output
>>>>>> +
>>>>>> +# Doxygen input headers from xen-doxygen/doxy_input.list file
>>>>>> +DOXY_LIST_SOURCES !=3D cat "xen-doxygen/doxy_input.list"
>>>>>> +DOXY_LIST_SOURCES :=3D $(realpath $(addprefix $(XEN_ROOT)/,$(DOXY_L=
IST_SOURCES)))
>>>>=20
>>>> Hi Stefano,
>>>>=20
>>>>>=20
>>>>> I cannot find exactly who is populating doxy_input.list. I can see it=
 is
>>>>> empty in patch #6. Does it get populated during the build?
>>>>=20
>>>> doxy_input.list is the only file that should be modified by the develo=
per when he/she wants to add documentation
>>>> for a new file to be parsed by Doxygen, in my patch about documenting =
grant_tables.h you can see I add
>>>> there the path =E2=80=9Cxen/include/public/grant_table.h"
>>>=20
>>> OK, thanks. I missed that addition.
>>>=20
>>>=20
>>>>>=20
>>>>>> +DOXY_DEPS :=3D xen.doxyfile \
>>>>>> +			 xen-doxygen/mainpage.md \
>>>>>> +			 xen-doxygen/doxygen_include.h
>>>>>> +
>>>>>> # Documentation targets
>>>>>> $(foreach i,$(MAN_SECTIONS), \
>>>>>> $(eval DOC_MAN$(i) :=3D $(patsubst man/%.$(i),man$(i)/%.$(i), \
>>>>>> @@ -46,8 +58,28 @@ all: build
>>>>>> build: html txt pdf man-pages figs
>>>>>>=20
>>>>>> .PHONY: sphinx-html
>>>>>> -sphinx-html:
>>>>>> -	sphinx-build -b html . sphinx/html
>>>>>> +sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
>>>>>> +ifneq ($(SPHINXBUILD),no)
>>>>>=20
>>>>> This check on SPHINXBUILD is new, it wasn't there before. Why do we n=
eed
>>>>> it now? We are not really changing anything in regards to Sphinx, jus=
t
>>>>> adding Doxygen support. Or was it a mistake that it was missing even
>>>>> before this patch?
>>>>=20
>>>> Yes this is new, I saw that we didn=E2=80=99t look if sphinx was insta=
lled in the system, so now we did
>>>=20
>>> In that case, I think anything related to SPHINXBUILD and whether sphin=
x
>>> is installed or not, should be a separate patch at the beginning of the
>>> series. It could be committed independently before the rest of the
>>> series. When we get to this patch, SPHINXBUILD should be already there.
>>=20
>> I=E2=80=99ve introduced SPHINXBUILD in this patch: [PATCH v6 5/9] docs: =
add checks to configure for sphinx and doxygen,
>> In your commend do you mean that you would like it to be outside this se=
rie and this serie to be based on top of that one?
>=20

Hi Stefano,

> I totally missed patches 4 and 5. Can you please CC me to the whole
> series next time?

Yes, I think the script add_maintainers.pl didn=E2=80=99t add you in CC on =
these patches, for the next version I will add you manually

Cheers,

Luca

>=20
> I meant as a separate patch, like you have done in patch #5. It doesn't
> necessarily need to be at the beginning of the series so what you have
> already done is OK.



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:47:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:47:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150013.277428 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LCS-0007di-6g; Mon, 05 Jul 2021 09:47:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150013.277428; Mon, 05 Jul 2021 09:47:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LCS-0007db-3X; Mon, 05 Jul 2021 09:47:36 +0000
Received: by outflank-mailman (input) for mailman id 150013;
 Mon, 05 Jul 2021 09:47:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LCQ-0007dV-NA
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:47:34 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 93fe4a2a-b445-4d1c-8f9e-0a2cbdf1354a;
 Mon, 05 Jul 2021 09:47:33 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 93fe4a2a-b445-4d1c-8f9e-0a2cbdf1354a
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625478453;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=iUtEilgZoF8dQmmEdjYe8oevo8CDCXJko0OWxJ4UjF0=;
  b=QwGYiDlogq9byEMo8hpS4x6FX2gpyA9atS2AlLnvsh3DVFLEpaPYu52+
   oScAUG2NSjCyvK2adrS0BpWdVPD6bojMdqgRIOjgGvbE6zclgaN+TSEdn
   nzHY1v3OqUTF3UDKX/giHpzZwP5Kho6Ny/9pOu4hRQTZVqyHqAd2B6tZ0
   M=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: wdPBSu6NDlD1ib6zE6ZAWrajWYg5BTXeOo9a3xYPpCToVg+BkniB+8BSBHl17/Ii0nuZ3tDzvi
 kaAzUUOUN9jcTLsXvu+BLqVwIhjQq13ICwRZd2nQsE5fzGh4vE7+6AXeWeI5uW/RZEm1BY9OsG
 aCwk5WfrmP7xf5QDUis0IkNOQrQzjOZkxaAMvlKibDs5m0Gcst32eYGRm/hrTzncjmX2CfPK0q
 haEoTV9rqBm+6NXF5Ob6tRk8n6dY+PcV2jsoLnJNlDsLKr1ChPso+lQzwp6Zm0e03tlJugB5+7
 UCg=
X-SBRS: 5.1
X-MesageID: 47571795
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:N3KXM6Br1RucqonlHehHsceALOsnbusQ8zAXPh9KJiC9I/b1qy
 nxppkmPH/P6Qr4WBkb6LW90dq7MAzhHPlOkPUs1NaZLXTbUQ6TQr2KgrGSuwEIdxeOkdK1kJ
 0QCZSWa+eAfmSS7/yKmTVQeuxIqLLskNHK9JLjJjVWPGVXgslbnndE422gYytLrWd9dPgE/d
 anl7F6T23KQwVnUi33PAhIY8Hz4/nw0L72ax8PABAqrCGIkDOT8bb/VzyVxA0XXT9jyaortT
 GtqX222oyT99WAjjPM3W7a6Jpb3PPn19t4HcSJzuwYMC/lhAqEbJloH5eCoDc2iuey70tCqq
 iCnz4Qe+BIr1/BdGC8phXgnyP61iw11nPkwViExVP+vM3QXlsBeol8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVittilG/rRMZ4K4uZkRkIM4jgYJq3MgiFBs/KuZGIMu60vFnLA
 BWNrCf2B4MGmnqKUww1wJUsa6RtndaJGbMfqFNgL3N79FspgEP86Iv/r1Wop4xzuNId3B63Z
 WzDk1JrsAFciZEV9MxOA8+KfHHQ1AlFii8Tl56Z26XTJ06Bw==
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47571795"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZFAhf0F0Uu9DtQyuF8ZwpptS2bIRP0K2k2oWhl4G6ku5WzbLVycE29vrEdtMM6vcDRVZ3bS+qqNHNW9R3WKoKpW78y0ofBcu5JuQsqyTuaM3wQP5GofxJmxaBcRouoCrfMGCGVSZ/8AkNwO/KcqHQBQyds5ADmguFIKwKmZzqq61oppv/E9JzpThpLU9Z58fO/QdkJyl98hfvmUVaTPjAlFPfVmb7Pw6ycMo4OlpnJ1fintNC+LmnIe0OME7B+c92kag25Yihgsm2KHcD+cvbhCx819myJX4KZ+itBlBehYuswf/UIlSN4JSg8NGKlky+xc6DQkAGEEiHgQXQNNENg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iUtEilgZoF8dQmmEdjYe8oevo8CDCXJko0OWxJ4UjF0=;
 b=kHqsCQGeJwLcvtqVzXb6V3HJflwU0VUKOegrMu9tSeEXUVX4tcIvkuYwlaN/qZKQvKSFlrMBI+cq4hUgs5G2OgYsKqIWtKeDlSIujuy0ui2EEB6nRXOnYc3ef9rIXw4XBdQhp1eGTK4p2n85Ad9V36NKllsBn8quZJyMjhdVElLHkP/VTcfXp4Lq33NJOM1bUkJeeuMlb7o8lng+Bs1o6OXFk7LfHM94uIy5dU7Czx54T9gHQrqHa0OcLjYNZpRwgiuvn2ve9XgVZkZQ8o4pFBLaVV5ZDBYhd27VeOwoBnVYk6y6k/K89ySZXv9qXAn0BplEQeE/ijpKewAfbmlwAQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iUtEilgZoF8dQmmEdjYe8oevo8CDCXJko0OWxJ4UjF0=;
 b=tkrMWhEYj7uRfK3+Qxm+RW31AljkzoYSJxtuhn42615p0Goy6p+lw3V7uLlOODYbZVxatHmeZsPpn1rAOlBunnmROY9BHhfxqangs17Oho8Tobu/h/ej18cE9jcJO714A9hbMjgCSDDnEyJPjDOy4t97mwUNM3NpLWXpsyAj/wM=
To: Olaf Hering <olaf@aepfle.de>
CC: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, <xen-devel@lists.xenproject.org>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-7-olaf@aepfle.de> <YN88m0tvHKxF7+NI@mail-itl>
 <e285cef0-4c85-35a1-37a9-f56ec9122002@citrix.com>
 <20210705101838.2f760ed9.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in format
 string
Message-ID: <e5419479-e132-0c49-882d-acbbe216ddca@citrix.com>
Date: Mon, 5 Jul 2021 10:47:22 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705101838.2f760ed9.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0277.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:195::12) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 9301c23e-a7e1-4570-00ab-08d93f99e737
X-MS-TrafficTypeDiagnostic: BYAPR03MB4550:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4550B2DE281C269A29AB623FBA1C9@BYAPR03MB4550.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1148;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: wxBaZB0NAKBFSEdHo89/g+SkfzktpZtTNqapBKJx/Gq3MPNmbtHkllB6p8dDQC6UUFBxPuW7XKRmSKTtKWLEjzS/Gqg19T2g+CfOpskwq7aVYlXVXehjJVfCUNwgYh6mLNBlcMAU9yQ/IQNU/fsSzi1drx0857gEasRTzkV6q6fTwrnwZkIFhrtvKZPTN8OoUpV7TXLjyDmG6B1x07FKX0jp4cd2cbrN4FQNNUdVN7DVIdQJ334VaMtjD/PBF/oEhkZafUs9OHlSgvrp4mXNU2ZUTy9XcMqTgLcXiioBEiX8V4plT5ozxwvZcZzCvqiLkPGtLBflXfIJox4lce4vBoEyU/LPAFFzkk8S11fC09ZWgOa3RVPOkad9xQ5SAD+Yi3NW+2e6jrdgk9bVlZdIxa0zpBti/iiaNQs1Rxk/HxKL/qz96Cl30hyx0qY6RsgnRoIXncK8WacuSdriPmhSHamRi8VUDIbg0b3i1zybDjBJGf/F1QPdh4L3bfp3HOOG3zbCYKx6UnurhRphOg32Sixu37rf2DaPnvQgOenHSKeAHgjqN9CYBQ6Se7AkdkodnQ1Blsl+MHb42l+NJB7CVLjFTvbTfPnqXtvQKLaKuqgLF/hvSSjclUdDpnGMstLddUbGY9yZqFF91Xa7VSN+vnsxDqIIHRqIhjlOkH1bmZeeYljIT26mJlONeWbyjiNroI54Jf0GEv0X/o8KlifNvHJo6DfkdNb3M7Ftk/d46ec=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(39860400002)(366004)(136003)(346002)(2906002)(31696002)(316002)(16576012)(36756003)(66946007)(54906003)(6486002)(53546011)(26005)(16526019)(8676002)(8936002)(478600001)(6666004)(38100700002)(66476007)(66556008)(186003)(956004)(31686004)(6916009)(86362001)(2616005)(4744005)(5660300002)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?rs/w2KrYAUP6WVB6elX5xtdHeJaV7aWRhSMEZmP/lpGE/RsP6BesjVuh?=
 =?Windows-1252?Q?RJaLU03pRL5ZQwswekoh4KJ8IKSM2g+1YuqpdzQzgTRT5ZvY9/zKEx+j?=
 =?Windows-1252?Q?+mpnTO0Dj8DKZ2ircjCnIqp+FK2OH1GSoutRLKlrzzLf5QSuQ5Dek1MY?=
 =?Windows-1252?Q?+tiN2ZYvohrIfTah9ET9/LaIvd0ek/76JWBEbZ96GpglY5RlVz3Bi2I9?=
 =?Windows-1252?Q?waSK6tQUU9CpM784vqTpk/k3Pb4J4ld1yGzPCUZHe0cUdRd1T34+Zkq1?=
 =?Windows-1252?Q?C4Bo/2vZdcPWvjWVZARaa8T55ufyv3ttVRLfqAhLQQZZsbxDhEgUJCYY?=
 =?Windows-1252?Q?LA2GVYzYZAOWO+d1d5u3BCfGmwKSwNMggjK4nqgyFFKeKeD+g+soMADm?=
 =?Windows-1252?Q?RscimEMPUvlR58dsUjhkM9yyqOBqgj+fYhdVTy9OOwo+QI5iJJcWkXuW?=
 =?Windows-1252?Q?glUiU/Rk2NfFIexfO3grEB3GrLU9lxupGS8ibewAZ8u+NaMPtTkfVdY/?=
 =?Windows-1252?Q?gcSsGs/I6MzzKAKjn4EOSdNp/7xqaE/xLwL2UbWd2SvAK9Tp9SZRFYJA?=
 =?Windows-1252?Q?5r61JtVSpvENONQCTcAvwxyrE6k3uMgSCLU2GUsV37VsU8d4ZCPS2JW/?=
 =?Windows-1252?Q?MFM/Pf47bXgitb3ZKtcv6ZYR2dnXNMsCPIFvzDNrlC6rrC7+ZOSofnH3?=
 =?Windows-1252?Q?K5GP1rAcRTDtawhWUVXup2NFJwWwMAFa7NNrZzhEu4Z2hKIJab1VRfAj?=
 =?Windows-1252?Q?9sn1t/3svm4OKxKRQ8Mx+L5wsLb0nYzRsPbrOyCC0qlIJSU+32CoURdL?=
 =?Windows-1252?Q?XYAneuHzeG9InmfNNnuow2HMIYTJ7oopODCfLa8PUId0wEAOI+PCbYES?=
 =?Windows-1252?Q?dnDRF2RFSt9KouVfC2N1Wgxp7tVzUSxVFr0v4QlPGE8BSZUcN4Ycioks?=
 =?Windows-1252?Q?4d5riw2smOZSaFwal4fW02wr6E9aoGpLZ+lZqHJz84krZkpjra4qDH8S?=
 =?Windows-1252?Q?3MF+Y9KDm+UIAJrLb8hzhhTKns1LYkT4PwMwio3Jax1cbGnpgN0gHZ0d?=
 =?Windows-1252?Q?zs9jBGrLKB14U/jfdufyg3fgNsLMdja/KkKhg+9R4Xkl4M9Nzc02Eu1p?=
 =?Windows-1252?Q?AfkFwX1I1WKleOvAu8qzTfr3Cw6VFYys3+QBnDLIF1npUGvP2OJ0WoJN?=
 =?Windows-1252?Q?QwQBVGRc5lE4akWy8D+5mAgqkXm+gp8jgonloiAJ8SVnvzHwYmzP9HSc?=
 =?Windows-1252?Q?DDH1hjPdpIS7cAuqozqcE5CSVh5yT/FR/XZY9FFx/aS6Ui6Txc3CRO/x?=
 =?Windows-1252?Q?74vJmmqRAdKNEpnY0ff3xfX/1W3iQP7cp5q6Mr3OlhhGmmnxTpP/KQlH?=
 =?Windows-1252?Q?zc3boCRGXb9DteUIxu/auECxFQ8FwCgOUfxaN/Ma45ajKZ+cOjZOlQuC?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 9301c23e-a7e1-4570-00ab-08d93f99e737
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:47:29.3942
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: fy2voBRv9jszifVhvr67A6YNSDgFTwifwpJk+u/eO9BvqNXOn/DbvzQvjLbqflKW/ogz/P6F7MhkC/06alRcdCjDxVoGTePkxPqVc/vJ3+w=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4550
X-OriginatorOrg: citrix.com

On 05/07/2021 09:18, Olaf Hering wrote:
> Am Fri, 2 Jul 2021 17:39:54 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> However, the % (phys, ) with the trailing comma is deliberate to work
>> around a common python error, so wants to remain if you're keeping the
>> %-formatting.
> What error is that?

>>> def p1(arg):
...=A0 =A0=A0 print("%s" % arg)
>>> def p2(arg):
...=A0 =A0=A0 print("%s" % (arg, ))

>>> p1("foo")
foo
>>> p2("foo")
foo

>>> p1(("foo", "bar"))
Traceback (most recent call last):
=A0 File "<stdin>", line 1, in <module>
=A0 File "<stdin>", line 2, in p1
TypeError: not all arguments converted during string formatting

>>> p2(("foo", "bar"))
('foo', 'bar')


The % operator has some type ambiguity with how it works.=A0 (foo, )
forces arg to be a 1-tuple as far as formatting is concerned.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:52:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:52:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150019.277439 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LH1-0000YJ-Pj; Mon, 05 Jul 2021 09:52:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150019.277439; Mon, 05 Jul 2021 09:52:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LH1-0000YC-MV; Mon, 05 Jul 2021 09:52:19 +0000
Received: by outflank-mailman (input) for mailman id 150019;
 Mon, 05 Jul 2021 09:52:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LH0-0000Y6-9I
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:52:18 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e68924fa-086a-49a4-8478-b552487331c5;
 Mon, 05 Jul 2021 09:52:17 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e68924fa-086a-49a4-8478-b552487331c5
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625478737;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=wBv0Ys6SYdFppmKuo9xep9r9u++Dchky4Xw4n8bKPL4=;
  b=Be8NBDQBNOAwTRD3WSM4apiwL8BdRbetjYyyuYCHoWZlvPkXIMvxQO6G
   ehZCzbbY85hGuTXVesvoGLr/DLnz8hR5hwMxuWcbXIX9aQ+gJYT7I62gE
   yY5L3biLwQ9/JGzJiQCSX8+9ARCaaIwRT5CGz9HrxCLa9ougNo5fskL5z
   Q=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 4ZNjjD5IQ9ScxIZyWxaqYdJLHVl1GvBroQfhRI93h+dzUsVg7fapXLoaIgSXAjWMiHzo6S3xIv
 43VWkX6/bpBZkKyGkZXeS8V45CpQuZN0nGOeF+JE/nw7YveZAR6YtVQkFYRY9Xuk+XTtIO6M+/
 1aetUu9fFWFlIJrdFMiG4uYyoXNwx3lUIg5P98yY0ErzU+yH8UU+bZhX1k1k98/tVz9M/Rd9Nx
 2ZgzmW3gJQT8P460I6vGK2D9mCC11BqrqNBZc5L6RcJxKTTPAQSeoozxqB6nx6w43RGoqauZkG
 yRE=
X-SBRS: 5.1
X-MesageID: 47944738
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Xj0ma6j7s2ZirqfdkIQYAGqU33BQX2d13DAbv31ZSRFFG/FwyP
 rOoB1L73HJYWgqN03IwerwR5VpQRvnhPlICPoqTMmftWjdySuVxeRZjbcKrAeQYBEWmtQtsJ
 uINpIOdOEYbmIKzvoSgjPIaerIqePvmMvD6IuurAYOcegpUdAc0+4TMHf8LqQCfng/OXNPLu
 vk2iMonUvFRV0nKuCAQlUVVenKoNPG0Lj8ZwQdOhIh4A6SyRu19b/TCXGjr1UjegIK5Y1n3X
 nOkgT/6Knmmeq80AXg22ja6IkTsMf9y+FEGNeHhqEuW3DRY0eTFcBcso+5zXYISdKUmQ8XeR
 730k8d1vFImjTsl6eO0EDQMkfboWwTAjTZuC6laDPY0LzErXQBepd8bUYzSGqH16Lm1+sMjJ
 6jlljpxaa+R3n77VfAzsmNWBdwmkWup30+1eYVknxESIMbLKRctIoF4SpuYdg99Q/Bmc0a+d
 NVfY3hDTdtABunRmGcunMqzM2nX3w1EBvDSk8eutaN2zwTmHxi1UMXyMEWg39FrfsGOth5zv
 WBNr4tmKBFT8cQY644DOAdQdGvAmiIRR7XKmqdLVnuCalCMXPQrJz85qkz+YiRCdI1JVsJ6d
 78uXZjxCcPkm7VeLqzNaxwg1vwqT+GLEDQI+lllu5EU5PHNc/WDRE=
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47944738"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=SXWPcv3skpAFv0IvhqPmaf1sYlhPKmTrFji5OpnLfige1pZkQZoYarHU1deVVKR48rXUK3hfUZQWNyWjftSY0yABGR5Ea/j/fm/VfKTRlK/u6KED2FMr+YDjZNZOcfyh+lAeAybqqm4O8NwZDcEA5Q9e5JFMp9u3XIngCxgizlSSKbpbsQ3mafucZikdPRpe6/fGbdB47dUZ6hyP6yDAeSc++rj7robY8GriuwUGyvakiLCdX26en7BPu1TjDEUjNzecGX5RJy4RPG/SX4vOef6dgtlvSKJtBGvkXUhdHngDXzfmmxPHnAy1u80lmqRHLS/wcJVVTrGLe5Pgga+fbQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=w6chlBY/ISf0K7dfNK7yktQk8072F0L0VK+2+ixf0Ac=;
 b=FnfVBi6FNR6AM8523j4vID67eUFL6OXDXG5tIUycWDXV6SNRwxBPpJCULYhHK/CcIVuxTx73dHrpHJUOm6kd5yuEiYDcFNJJjxYWmkbgmxw65rIZPjpLmacLAHwEjKIEnaTn2zCXM3MpMVZIVUNL/WzotTGFBeIQ/rIUzUGkq1QfZ9DdYO965Alb1dh8T+1ndvJzGYlAkL1C5ecp9G0XSrnlu9oirRX77KwhHW895+etp18Vsk/9bBKq4iu04+JPfav2J6W7T+GwwWdLJDEcni2rpEVI21gyGRjAgXpa90rPKf9WSPam6cfAzBuG7SDE4CBa1WS3uhnuzv4IqyS5vg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=w6chlBY/ISf0K7dfNK7yktQk8072F0L0VK+2+ixf0Ac=;
 b=Bo2P7iclEuMchvHQnVSX76eMldDzJ5BBmS5NpWOODpUvuci7qfLx7TTxlb6wDC4Js6rKNsOYdTtV5QzHBevpMoctGb5QWxBdDeU9SxZJV6NfWALfADTK4sX5UD/FiH7bV7tkOVRVRG4vy6k7wyomaUsxdmW/viEa5Q0uN2GUAP4=
Subject: Re: [PATCH v20210701 10/40] tools: add xc_is_known_page_type to
 libxenctrl
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-11-olaf@aepfle.de>
 <3c0efa9b-aaff-b4b7-0fd5-9eed32b20e01@citrix.com>
 <20210705102230.48a86473.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <8762eaaf-a8bc-430b-470d-b84f68c06b5b@citrix.com>
Date: Mon, 5 Jul 2021 10:51:50 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705102230.48a86473.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0178.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a::22) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a8f32f40-96ba-4866-6195-08d93f9a8790
X-MS-TrafficTypeDiagnostic: BYAPR03MB4806:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4806A2C51F094583C8B8B029BA1C9@BYAPR03MB4806.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:419;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: yAHxlcO0Et4vQNS8+BAN0FVIsnOqOYgTuga4G84oWzFxRkJLn3wQM2kjtnvD7ZzGy4YEhIEVkDQpR/peDQJq3e8CGERYJ9YvK5B3O1zgNyUxIApGljmknhVrOrJH7RlPkuEv8tAVahioEj8iLrp7CSpACFl00G9EWDipx2NpoMtONUDX4Z9BD4WK8KxyIzLK0Dee47c/+jWH2i8lkwzxB4XDVrGu0v44vrZcpY1q04cCZoSUmx9wNyZBfaX/y+O4+Vw4y7U9vD4gg2JZ5RkRQylTa1yG7+qV5W5ZWlsLG+21YlBObo5k+ohPBjni7YK+4EmTszBIbt+UVRV2q/DW3mNNGB4KJ4b1deyd/Mto9E9VswEPFXgMX58My1TQPNOtsgwQGdHw5OF7xHjVrAHHovjZrNimXbWKj6RpdGOdAX19rn4DVcce7eegt1gB3JNCrVqRoQNIJbLLPv7LvQuHWfnbYDDl6GF56wet777sGFVgyBsBRl3qclYYWWca4gxKcc/eaVRwNV2sKeKjw8LaokfwMsdXyzvZzzxmDjPvO3qhyfXgF5oNVS+s8K+yhdvSHfN/Zr/LXixn8FPqLKqC4g0+0F0mYl7dQOPkoJ0XDiFIeOTqQhawDDxC8s2dnSEzvhWqUrxDAijIHUw7GJvkP+bAD7JwuTW2vsaRlnDX45mBCUMlLajeHfRfCf0NyhscMNoNLSYlM+HK5ThA0OU5k6y5wLO9wv56SNF7A8B15Vo=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(376002)(39860400002)(396003)(136003)(53546011)(36756003)(8676002)(66556008)(6486002)(66946007)(66476007)(6666004)(31686004)(5660300002)(16526019)(478600001)(6916009)(4744005)(31696002)(316002)(38100700002)(16576012)(86362001)(2906002)(26005)(8936002)(186003)(4326008)(2616005)(956004)(54906003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: a8f32f40-96ba-4866-6195-08d93f9a8790
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:51:58.2575
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Jx2wu9ISbSxYiKsS7nC+3GHrB8KmLE+cLPp1rlf8WmAbSMuEqc9ZIx3YGK6ruOB126JCannTaZuwXQrz+asPaHf0zyT8DGiqpcTmMoQZdcM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4806
X-OriginatorOrg: citrix.com

On 05/07/2021 09:22, Olaf Hering wrote:
> Am Fri, 2 Jul 2021 20:20:08 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>>> +/* Sanitiy check for types returned by Xen */
>>> +static inline bool sr_is_known_page_type(xen_pfn_t type)  
>> uint32_t
> Why is this better than returning 'bool'?

For the parameter sorry, not the return type.

All type fields are uniformly uint32_t elsewhere.

>
>> I can fix up everything on commit if you're happy with the suggestions.
> Yes, I'm certainly fine with it.

Ok - I'll put together a branch.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:53:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:53:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150025.277450 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LII-0001Ee-Ak; Mon, 05 Jul 2021 09:53:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150025.277450; Mon, 05 Jul 2021 09:53:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LII-0001EX-6j; Mon, 05 Jul 2021 09:53:38 +0000
Received: by outflank-mailman (input) for mailman id 150025;
 Mon, 05 Jul 2021 09:53:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LIG-0001EO-9s
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:53:36 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dd028cb6-dd76-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 09:53:35 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dd028cb6-dd76-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625478815;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=PYPDtw6MLZ21uv8oxqQtqBSsJIFckV4tBbGj9jJKtMI=;
  b=JBqk9gaiqr0gBEuOQmFmwd77u9PcGKTnOxr7H8NLZVkMJbyTQv6fMZJH
   lE5/EsqCVUdfn7DMXV7qC3AbK9tPkzXjiUmwV411VVLRpAmhqKpBxl6+c
   lPdZBy06Dp7S5x1bTeU1c1UJRiHSRyOJRBKdM7413gpRCZ2HmY3GnYYBM
   8=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: RJJIH12niI1/DUbz45NHXMRahcvlpmHfpF4EicFekbEGSjKqG7xMPd8fcRJRFLB+tHYE767Utq
 R0Hpb4nQ7MX+9qs8KhBT/+xuyabzVwjmy/xZ9YDsFvSYcwHZSfPzvNW1vhpCZvzvCO6EcIPyXk
 aZa7cA18HUIpHuKmsgm6f+B/PO+y4xjXXP/pf/QYEylhCxOTe2kN26JUltGX2ezd25+zI6NXRa
 V7S/hKDmnahEmEMEOAPd55pEKgt0mYCkj1yIMGNvvJ9RBC/S0swq3Zh2WmjcDnUO6d2ndgtbDr
 IB0=
X-SBRS: 5.1
X-MesageID: 49195818
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:q+s7fq0PxUgJKOe7u+axdwqjBVlyeYIsimQD101hICG9Lfb2qy
 n+ppgmPEHP5Qr5OEtApTiBUJPwJU80hqQFnrX5Wo3SIDUO2VHYUb2KiLGN/9SOIVyHygcw79
 YHT0E6MqyLMbEYt7eI3ODbKadY/DDvysnB7o2/vhQdOD2CKZsQiDuRYjzrYnGeLzM2Z6bReq
 Dsg/av6wDQAkj+Oa+Adwg4tqX41pH2vaOjRSRDKw8s6QGIgz/twLnmEyKA1hNbdz9U278t/U
 XMjgS8v8yYwr+G4y6Z81WWw4VdmdPnxNcGLMuQivINIjGprgqzfoxuV5CLoThwiuCy71QBls
 XKvn4bTotOwkKUWlvwjQrm2gHm3jprwWTl00WkjXzqptG8bC4mCuJa7LgpMSfx2g4FhpVRwa
 hL12WWu958FhXbhhnw4NDOSlVDile0m3w/iuQe5kYvEbf2UIUh6LD3wXklVKvpREnBmcca+a
 hVfYDhDc9tABGnhyuzhBgo/DTENU5DbCtvQSA5y4eoOnZt7SlEJnAjtbsid0E7hdoAoql/lp
 D525tT5cdzp+8tHOhA7bQ6MIaK4lKke2OEDIvEGyWYKEhAAQOUl6LK
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="49195818"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=F397DwiyIw4lI82I8wJmw93aaSl2ky6jBug4BmUmtukaAw12OUk1pake2oVkUJjlekELrxX6uPmWYT61CTM7seNiuPtGzrT7S5AnoubH00Yo5b1zbuNf0s6y1EiGAoMBxj22Ib/2ciAL/xY9GFrxwW8bQzuMwnuofc6b/qGNP3HnED7kk+Djg6WvnUPHVNhpjium6d6M10mM82N88Nb0R/Vbi0Wx/Whl3o3jN+B+UFx4IijQudhYneN4bQFY5KY24/JduP0GaCW7rRxPdsv7BRfbxpHnYCjQdX4nP0hNIrPkcJKz1V+ovTWGg4iM6n9/UBMPXgo0wl5sdgx+/1/Pgw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rGHLu1ry1POJGU3WUjTWuDM+pYHXRzmMY7QF6rI9q9A=;
 b=KR9U8greMHT0d9PDh0T444bsAhJK6FeuItDCnrW5zW2Y2d7673Hsoh6IZv9wSTDYIM5lD1htBY2R0FuBBG4f25g6z9iHB24Sk71s/Poj2sPBLSllVgLypqS66dZTI79UzKGQEYrJvV3a+H2qtAXjYV8uhG0mlFQpS2p5BYSMdJ0wAas6uPtrITwNQ/408bhOAEex4fFtW0fEpNB1Y/XoLE72/BRsIyhqjfc9RbhZ++q01F+Eww9OvoUt2Lo9ovV+EhFqU2PlV1n84tuWWUX4jNmoze2nLtEZvXaIb4TKjyKN/DOECD1t0fcHeg1uzjyW4wEAPDBDHeBrNYSm/klAuQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rGHLu1ry1POJGU3WUjTWuDM+pYHXRzmMY7QF6rI9q9A=;
 b=hoxRypP7Ig9uTbjGg/3V5N/QwZ/GIAnB1PZuD2bN3yX8LXZ8ce+L5JoAzA/761MFpmadxZyEskyyPlQ/YpGtXGutTgMBtSewzOZrVFYW5KNdXl4kKy0Bem/bP6uwz6NlbHcelD29MtePrDot5tgLc8s7Ed4wJdtyGHWmXehuV0g=
Subject: Re: [PATCH v20210701 11/40] tools: use sr_is_known_page_type
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-12-olaf@aepfle.de>
 <b026dd29-4c6c-3e6d-879d-b0339f2c208b@citrix.com>
 <20210705102505.41712140.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <2c390d97-aa12-5cff-1e21-43c9cd29f317@citrix.com>
Date: Mon, 5 Jul 2021 10:53:25 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705102505.41712140.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0059.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:60::23) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 090e2d53-0d1a-4e59-6d9b-08d93f9abf57
X-MS-TrafficTypeDiagnostic: BYAPR03MB4806:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4806A9878E3C3949F5080D67BA1C9@BYAPR03MB4806.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: QX/HV6eZJf6Otbn/LWD0VTJlCvlxwnWQnQaph9XV6RDUaSycwYnkX81dHo5XQToYII6DkoyXC8WrHAD9Vv0oXnxT2j0v/eyistiEUwGXHy9KOAa664dtbGLSKMg0I3j2EOBAVvbhchw6ANTVzBLU1u8fKMPsNI3i4jcgztwTkvEjpwRL2Ix08Ejb7MbXVYjnBXm9u3KSJK7HDyGh2/IzchBWxj0Z5CyHL+rJIa3rja4ix9FFSfgI4FFktHCW1EDga1dslC+shh/TxI6616EN+Ds44pDUnqHhGfZLudFQ0cG+wphi4OyvhRzzQAKE+wVrUfktdotqVSv8CVK5nv6e6LaeYR01AcrhA9yGJBc5txFdC2jD/GHhchGws4lg07O3KRrioY6+bUGWR9aCqkQZpQ8LLvfoDL5t0mJGdFigeyTT+Cd0rIHfA2J2/g39swE4hXV28axihvfwI8klxFJ6Usq+A34yEMUJcUVgDJgKEqGhMnE7/jXjKa64Mkm92YmjG813N5qe26k/px4cZSeVU6LRb55ljRvWqs10HP9uPnHCFY6q5sDeZMOnYnXe+OR7uqb8hC0gLGsoP/N9/uib8xCN0Ts8VSmQXw4C4cgzV8hBb8sD2K+rKYN3D1JzIiXnKgaym1jKJ0N6UQIEVqhD4/m/6yYKwI6Pei0JPnd4e8vPj2CoHGjNQ8JYu/LzVyGBdHcxG5ZWt90cfOCTxPFsti8VjY10kI6gaFClMczJJjA=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(376002)(39860400002)(396003)(136003)(53546011)(36756003)(8676002)(66556008)(6486002)(66946007)(66476007)(6666004)(31686004)(5660300002)(16526019)(478600001)(6916009)(4744005)(31696002)(316002)(38100700002)(16576012)(86362001)(2906002)(26005)(8936002)(186003)(4326008)(2616005)(956004)(54906003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?hsBoy/wnfnKxrkEa5+5WG3yvuif+krGqRNFAC33fdK717IlVO95F4VBf?=
 =?Windows-1252?Q?uJQQbexzYSxMJah68q9KlVdJJzzHb9Nw6XYJsWeNiTL9ua4wuIJ2tprr?=
 =?Windows-1252?Q?D5UYHU+wfebfV1++J1vJV7bqiMTDW3bnoPScEqElvkVlDjHqA1DtHsSv?=
 =?Windows-1252?Q?9R/6K8aYQKl760aew7rL3VnB2fUnpoigASmIcLUpgDcDvCXp4O0HafdX?=
 =?Windows-1252?Q?prPhtaBc86Jbrp4ovjA2nVio1CXhF/FN/tImEvBtJrD9PhzTiN65H/mx?=
 =?Windows-1252?Q?IHUewHJ6QWr9jL/noIF5eMsaaup72mowm4m3ZJFEwUjEOZhqHOmCHvcL?=
 =?Windows-1252?Q?dnmByaqaaO+bZHZPLnNw2jFu6gX8UVjgvw6mE1fgpmWclNfxcJLqMPo3?=
 =?Windows-1252?Q?+au7Ixw2hGEFXAFo1+oh5At22gxgglOSwdOtszWcS9JRBacQraFFaqe+?=
 =?Windows-1252?Q?Loi85mFR2y7Q+oh7thaU4bed6MsVy9dMy930TwtC8KOV2i1UQ+VQYbv5?=
 =?Windows-1252?Q?ONqiPa6eh+PSVjx/MgOmAt9YLY5Fqi1KJhoqF7u1AeDVmE2+MWsxLR/h?=
 =?Windows-1252?Q?Fql9XndNE5fPvFgJP/v16V/CRxlTczDK8FJPNp/1VMNC/Oz+7Tl0sHF5?=
 =?Windows-1252?Q?vNJVBHQAF4Uu1WZ+vxYxMTiytmJxlVMFQxcrcjjIvEEk1V9w6YdAPIWY?=
 =?Windows-1252?Q?6feBQmvxfdsvZGDDr3PTUCC1fJIY9t2sR6ljgk0ANd+Zzn2NTk8JEMOa?=
 =?Windows-1252?Q?HEAWPZQSoT9od7TFKASB6aJ0UGZn5iR1e6lufU5J/uaMx3WHsxPukhM8?=
 =?Windows-1252?Q?vUnnOo92VdYAp7xkFJa3reoXK8GnSSEt6xtjQN/ZBLiJ7H/nG1BJLeR7?=
 =?Windows-1252?Q?UfT8T0QgMkd2sGwtHInxr0U6Qk5q2ZZYCaSiZSN+BA42G6ebT5R2iq3+?=
 =?Windows-1252?Q?GJlFhGTv2stpEmnVbFd3MyTtlqlrozDTfExc6KcQ9o2MHPyNIakAW/yF?=
 =?Windows-1252?Q?Z9GaCdhcU5NLAowHVVnXT8jPJdMW8z9+GsQnB/saRVReZFJ2+RCWKgTx?=
 =?Windows-1252?Q?4V76GL6ZAqI7TUKyyZDrcSs3Gvs2dbHSdQWGkcTmRowkeAn8cjfialWA?=
 =?Windows-1252?Q?KDdLw0ofDbonOK+afCx8DQXvsAJvdEsALyQgLVuhG6UrhOBpdQdAzgnI?=
 =?Windows-1252?Q?24GcWFdHYOAVwpdRevhjv0DY5+270b2ftHr38pRZZ5ahLXxSsUUozn2l?=
 =?Windows-1252?Q?6cHG+BnTd+TlLcLoIOOQ4NeWdZ0A/6VsAz0kAH+i9E8fXla2iBPtok5X?=
 =?Windows-1252?Q?fGH9EjBOmtLKm0uaXuyuU/kroFpRvcTex6qos/+ZjIeINYQDeu1dO6TM?=
 =?Windows-1252?Q?jZnSTedktn4xSWHztRXdARPQacbB8XBPCyCWrmtsEWxyqOmbIsVcTcbR?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 090e2d53-0d1a-4e59-6d9b-08d93f9abf57
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:53:31.8226
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: cw2JbI+o+fdL5sBCkLa6rt9KR67eCjAf3hRdTDmgGyrzweJqlTpf1Y9Gba/ZNuzL3ov42WzYTih0ibl3/1cPhadj+BldMmgvuaQfXYT7zpQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4806
X-OriginatorOrg: citrix.com

On 05/07/2021 09:25, Olaf Hering wrote:
> Am Fri, 2 Jul 2021 20:27:21 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> Any reason this isn't folded into the previous patch, like your
>> subsequent two page type helper patches are?
> I think I wanted to separate this for simpler review, but I forgot to split the followup change as well.

All patches are largely mechanical changes. It's easier to review
together, rather than split, because you can only judge the correctness
of the new helper in terms of the code it is replacing.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 09:54:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 09:54:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150030.277461 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LIt-0001nM-JY; Mon, 05 Jul 2021 09:54:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150030.277461; Mon, 05 Jul 2021 09:54:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LIt-0001nF-GO; Mon, 05 Jul 2021 09:54:15 +0000
Received: by outflank-mailman (input) for mailman id 150030;
 Mon, 05 Jul 2021 09:54:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LIt-0001n8-5K
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 09:54:15 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f41ec073-dd76-11eb-8440-12813bfff9fa;
 Mon, 05 Jul 2021 09:54:14 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f41ec073-dd76-11eb-8440-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625478853;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=/9C459icUbgkKjFDP9Oja5oWJTL1qOW2C24GH7Zbt7c=;
  b=YivnDXo+hnArbdDQbHgzWaMi4/PU9XxXG5Wl4nnDkBtb5xkO9z7epgva
   DVTis1LIxGVYb8T8fuwk0waU0CD3rLXGjLrj9Vt4xFGY5CSzCBCzBWbV+
   pwvxDjmWBoqnMySoLb4tn5o7vr+e51ros9NLhvPGsLbDDklpUBdjGxSgt
   k=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: Me6upqrVxExRVWC/yWJPKlk+nOeVk/G8vvhNnTrL9ou/2duBElbyHHnbLOIVqRaII2SpT+/nJU
 heSb1nTpOkQxcJd7ePda4odd2CB9r8arnt2KbWnaLe7t8dpBYhPlsgOI8oplca9raquosOUXaj
 TMlXUk/KqntWDXSYKFsoHgmCqYhc0gE33vycUMQGKZ+Y/750FY1bBRCAieqjnFr4IW+Pe0LA91
 ND/oZQ8i1LE7N/0QHb/M7xGcARFcav/y8uJg9XBng4w7pgxrmp1Y/7dBdWu8twymqwnmaM5ucm
 rEI=
X-SBRS: 5.1
X-MesageID: 47633831
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:suIryKDkeaPV13PlHehHsceALOsnbusQ8zAXPh9KJiC9I/b1qy
 nxppkmPH/P6Qr4WBkb6LS90dq7MAzhHPlOkPUs1NaZLXTbUQ6TQr2KgrGSuwEIdxeOkNK1kJ
 0QCZSWa+eAfmSS7/yKmTVQeuxIqLLskNHK9JLjJjVWPGZXgslbnndE422gYy9LrWd9dP8E/d
 anl7F6T23KQwVnUi33PAhIY8Hz4/nw0L72ax8PABAqrCGIkDOT8bb/VzyVxA0XXT9jyaortT
 GtqX222oyT99WAjjPM3W7a6Jpb3PPn19t4HcSJzuwYMC/lhAqEbJloH5eCoDc2iuey70tCqq
 iCnz4Qe+BIr1/BdGC8phXgnyP61iw11nPkwViExVP+vM3QXlsBeol8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVittilG/rRMZ4K4uZkRkIM4jgYJq3MgiFBs/KuZGIMu60vFnLA
 BWNrCf2B4MGmnqKUww1wJUsa6RtndaJGbMfqFNgL3N79FspgEP86Iv/r1Wop4xzuNId3B63Z
 WzDk1JrsAFciZEV9MxOA8+KfHHQ1AlFii8Tl56Z26XTJ06Bw==
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47633831"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cBG7RNrtl206LrkSGlx7H8ihLbbXqqBxsLnQAkKW99B8RytaxPrXC1fleaKQDWVYcEdCt4RqtZLEyZq12EXfdBYyMtf2t6phJMc4Y4SkBUS5AK9IjDu0gcuez/Dd/xCIyaFP/++TOmEm6kXbcTiaYic0QYk3y/yBc0n/nBTk3yUdrZNzSXtjWlmOR8RwMxv5/4TYE73+bFcTw0EUsTizfnpQcPwkbjEyUl9GlbjvQyjRYBoniLDdmIMeBw5fntJkurnV0Uzc4LaXnNtgxuR2E1j0awGLOv5et5zgasTEa47qKgUnwo0OLTV01kmfPyRYHm2NzSdIYxdTMRt6DslqXA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/9C459icUbgkKjFDP9Oja5oWJTL1qOW2C24GH7Zbt7c=;
 b=C1RoFX2O3s2ta1jjmYG9Ov5GKQcl3brpmRIBGxEIoLe1ja+YU5Vynz37rGDi/2fSitvEyQFnEEoV7PpP5lrlJIU3SvfatU12nxBALadeb6LkXNo20TZyXGSPWAWaOC9lnhIZcSU/afhFzQKIh9nRi70ofR/663wY/yfgrNzRQ/7ArLqjoFM1QPza5vKnSWKjGhYyWzeJV3B0M2JvWH1qTvimNCI/By6Ctw96tEXPZa0bJc8Ybtil7S5astUKN63YALjia7Q6Fr94aUaH9S3CxR1xyY8kxY6LFiqKfQtOOZMsXOuEmq+qq0wC/H4jurJlVgEGgFtpY429KXrFRDsYUg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/9C459icUbgkKjFDP9Oja5oWJTL1qOW2C24GH7Zbt7c=;
 b=pXswqywguVTdgT0YNtoDe6aE0is/m8tocaK3Yzn6Q8eAvW0HcvqLTnLJCq7sXiVguEd37eD+MAXqAVF1Z45n65lbYnJiO/j1C8+fnf7zZz/nSCsxGb++u5Yy5OhLN3OFLyJTLoKzWR0ofdeicCwuE2SHvkzyV+AooBADd9419So=
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data pfns
 in migration stream
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-13-olaf@aepfle.de>
 <9db50e05-233b-e279-307d-548fc23d0115@citrix.com>
 <20210705105917.132793c9.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <23314695-f84f-59c0-dcb0-62f553efc62e@citrix.com>
Date: Mon, 5 Jul 2021 10:53:59 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705105917.132793c9.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0071.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:60::35) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 84d40e02-31c8-491d-9b16-08d93f9ad38d
X-MS-TrafficTypeDiagnostic: BYAPR03MB4806:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4806B849EECD6DE4A06EEB1BBA1C9@BYAPR03MB4806.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: +FRUNX2/3iZK/A8W4aGPzrhPmgTpQN3SRLUbSD4eXK5A/kD2SBkNlfDi7tzTLBlpd9DN0GTcppDOU5ItIDnvrwP/EbOdEvHh83/UUBIejGaFFktAjsmUv35lvl3bp2jnnK+HD4B3a6fLXDRz8FY3i8z4B0R81hQe6WQGmiqh/sG/10D9oot20GxiS3TWWWMucXor352BKGwctfWJYuntdFFniccSAKO45EDEvf7RMzAShakN2mlF7T08hoBocR40CC9c4rXEb/h1ZpgzhgB4mvnNqSLmKIiBFzm4NDiA83rWjF6DWCkiWYLVCCETttrghN0uT5nf2xjyfTas3WZ55eIg7c5Q5P7HE2/EzniZOPTmidFlgAWW75Kgz9FfLrmyAFto9WooUIucWcWlwZ5Y8/n7cDlIv1j0mDkJKHwHhRQDX96e1XmvDmNf9/tVDqvvGvhrdvs6XlAZCRL90cjcOZwc6txx4aQq8f/WYGEfdznlmYJ634pNH1C6YX3X9DWtqKATtyiAkryT4ztYpVMVilU2fHpR2TNm0BHEsFO8c2xPv4vZcdYu9fqng27vd3uK3aHJrd3N8O7yXeao7saIg8QSxdNH6I0p2j0gT/VYi7siAmwywIxXzrO5Tylrevn5iRz0Sag02RP+XsuoI3J06ya+gAKYX1qYR0RdkquOy0T6L3LzjbaEK0u1+wqtcPquZ705C3y8QiDwwqjvcWZTAHA+EPo5sbwA25aUjrFLV+U=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(376002)(39860400002)(396003)(136003)(53546011)(36756003)(8676002)(66556008)(6486002)(66946007)(66476007)(6666004)(31686004)(5660300002)(16526019)(478600001)(6916009)(4744005)(31696002)(316002)(38100700002)(16576012)(86362001)(2906002)(26005)(8936002)(186003)(4326008)(2616005)(956004)(54906003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 84d40e02-31c8-491d-9b16-08d93f9ad38d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 09:54:05.7361
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: z8I5rgl0tIRrYNsfnn9/lbUZ0pkcUmZwqlla9+x9pWIq7a2t99Wn44sHAoNLMJd2QzVykRYCF5NFH4kZXl2OnRpAWMor6YiefHipI7il2u0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4806
X-OriginatorOrg: citrix.com

On 05/07/2021 09:59, Olaf Hering wrote:
> Am Fri, 2 Jul 2021 20:43:13 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> Anyone adding a new page type is going to have to audit/edit each of
>> these helpers.  I think it would be better to write all the true cases
>> explicitly.
> You mean the check if a page has data or needs to be populated should look like sr_is_known_page_type, where each known variant is listed?

Yes.  I think that is a safer approach overall.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:03:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:03:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150049.277492 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LR6-0003e5-QM; Mon, 05 Jul 2021 10:02:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150049.277492; Mon, 05 Jul 2021 10:02:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LR6-0003dy-Mh; Mon, 05 Jul 2021 10:02:44 +0000
Received: by outflank-mailman (input) for mailman id 150049;
 Mon, 05 Jul 2021 10:02:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=/lCB=L5=arm.com=wei.chen@srs-us1.protection.inumbo.net>)
 id 1m0LR5-0003ds-0g
 for xen-devel@lists.xen.org; Mon, 05 Jul 2021 10:02:43 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.15.88]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ca0f0aac-8aba-467e-b2fb-a8dd77029a55;
 Mon, 05 Jul 2021 10:02:39 +0000 (UTC)
Received: from AM6P191CA0007.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8b::20)
 by VI1PR0801MB1773.eurprd08.prod.outlook.com (2603:10a6:800:5c::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 10:02:36 +0000
Received: from VE1EUR03FT012.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:8b:cafe::2f) by AM6P191CA0007.outlook.office365.com
 (2603:10a6:209:8b::20) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Mon, 5 Jul 2021 10:02:35 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT012.mail.protection.outlook.com (10.152.18.211) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 10:02:35 +0000
Received: ("Tessian outbound 3362253f4878:v97");
 Mon, 05 Jul 2021 10:02:34 +0000
Received: from f771a61da606.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 598829BA-C7D1-4D66-8DD4-4D17EE04D847.1; 
 Mon, 05 Jul 2021 10:02:24 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f771a61da606.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 10:02:24 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com (2603:10a6:10:2a2::7)
 by DB8PR08MB4169.eurprd08.prod.outlook.com (2603:10a6:10:ab::24) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 10:02:23 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050]) by DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050%7]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 10:02:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ca0f0aac-8aba-467e-b2fb-a8dd77029a55
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=t8WYC9/PLQjP8kV7Y7mA5BpRxtBZYzCL9by16pMHtvs=;
 b=vMBNPkZ6BHUMvroIKsXVRyKd6+DjoyukhTRTPYDAI0ko/xilhAib6HsFP+F78OdFHAtukRpmT857cVWT/XS0FsR6eFfiSGcIKCp7gaW5mx81QaxFRast0UmQbsDgN5Ln4/gRsaiMKmT6U6hezuNIYdm2UV1OLAGwHEXwDb7qjB4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cWE7GCZ69Ll1otZozqLduWrrN0gVIr/IiAhwSSjObRj/0hUJuMgdNmVqFgULgrNxbosSuwxj/9UoNTfI6T+NLZoUu/A5WQyoClEldaBsnDOy3SJ/gYLyloNZ6sdzXbEs76SbzOl4xV6mUmZd0w+I6DCeGuknI0yXRrUzjX6dG/gDsPWhAecyHd3F4u7OMXZ1LIsIZFR3zUFTd2vef3pFPQNg+vmVrpv0r2U2ktWagHqYZ2KDqlgnEBf3+UDKrg6Kus9PjOgdDb1ndkEumSh8OWb8GbXCya6q3Hbu7MIedXt1jxm9jYqDOGbQ3agFVrl7C7paAqprSXhJFwyQa9Fkbw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=t8WYC9/PLQjP8kV7Y7mA5BpRxtBZYzCL9by16pMHtvs=;
 b=TLlGWgXBmi9+0bx3c4Mx6bLnSrWjiVHsjVYbrhE7tGuTRc+DOO2G85sjqL/v2P7uQ4rd39n0ZlVjmMSEKTlNTzxKhb2xqtKQfDTrfihjdnArAqeuBiMzwaDR1zl6FryzkDR3U6//JzcBVfdgnpt9yUV+JrkcgQ5MkxujI6HHXl24KNFg4I9eYGEBHssZU/QDlQtTaQHGp5yzm1GU3oPXWroiizkMw8VFJMmeBqtbhHxPx5xZMQ3vyDh9bY6UAF2paaydexujzj2vE/9C2F+6jLz+qmq/NG9Oa3fHjE+ly0BAzN6NMc2ewGX5A0UKxe29E4cnD9PvUVN7uhM4UVinfg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=t8WYC9/PLQjP8kV7Y7mA5BpRxtBZYzCL9by16pMHtvs=;
 b=vMBNPkZ6BHUMvroIKsXVRyKd6+DjoyukhTRTPYDAI0ko/xilhAib6HsFP+F78OdFHAtukRpmT857cVWT/XS0FsR6eFfiSGcIKCp7gaW5mx81QaxFRast0UmQbsDgN5Ln4/gRsaiMKmT6U6hezuNIYdm2UV1OLAGwHEXwDb7qjB4=
From: Wei Chen <Wei.Chen@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>, "will@kernel.org"
	<will@kernel.org>, "julien.thierry.kdev@gmail.com"
	<julien.thierry.kdev@gmail.com>
CC: "kvm@vger.kernel.org" <kvm@vger.kernel.org>, "xen-devel@lists.xen.org"
	<xen-devel@lists.xen.org>, "jean-philippe@linaro.org"
	<jean-philippe@linaro.org>, Julien Grall <julien@xen.org>, Andre Przywara
	<Andre.Przywara@arm.com>, Marc Zyngier <maz@kernel.org>, Oleksandr Tyshchenko
	<Oleksandr_Tyshchenko@epam.com>
Subject: RE: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
Thread-Topic: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
Thread-Index: Addhq3Jd+FbZaJt0R6WdbgcPW7X96wLnXxMAAQ3e1FA=
Date: Mon, 5 Jul 2021 10:02:23 +0000
Message-ID:
 <DB9PR08MB6857B9DC597D253F69D31B6D9E1C9@DB9PR08MB6857.eurprd08.prod.outlook.com>
References:
 <DB9PR08MB6857B375207376D8320AFBA89E309@DB9PR08MB6857.eurprd08.prod.outlook.com>
 <alpine.DEB.2.21.2106291716560.9437@sstabellini-ThinkPad-T480s>
In-Reply-To: <alpine.DEB.2.21.2106291716560.9437@sstabellini-ThinkPad-T480s>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: E5171D5CC7165840B76CBCBC8CE87F61.0
x-checkrecipientchecked: true
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.111]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 94b232bb-1a39-4df6-5bc5-08d93f9c039d
x-ms-traffictypediagnostic: DB8PR08MB4169:|VI1PR0801MB1773:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0801MB17736A8C83BCD0E6906115A79E1C9@VI1PR0801MB1773.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 sGKq2nrpyGMZ1JxXBugecHXfFPqV0Tysr0YO2AKejse5aFUZPT1yXjQeWgHlDuyQlwjXBqR438WKTesK+rL+5TBIh+n0m6roTt2vKloVcNNT8rTX1VFDsyVgQkHv/Ddgwzzj43R/9k6C5QKAYmvlr86wvZ6SMQc0lIyl2Ti8Duy3a/oR+CugfFrPgMto8vaSyu97ntHz0LrMxQRpliGDBLEKOjKSzUkyXxUMZnUcYWsFz/d2wz5zi1PxZSfV3Uqilo6CdvliVAFWcyot8pK58mcs3eUlUdb1/20+9qaClL6Erhrc2uz8GPugzRcWjWrU8HX1lKSSvAiiSeg7iKBcvNYUk7+9Z9p1dKuSbpw0eAObj4Iy2OS1PpSOqUsATlhurLjxJ3DXiVW8hmhftJHHNggeZ3BzGuxlk8qnlC/rXSjGg1nlKRgMtEozaNaAOOmRV/N5al2So5leTcqI3xgn6aE9bdwDEnN9joXWPFaYiW27r35C1ZlejBEpQufVNdcPs+Oo1ooJNWFucd8rSZIrPveE/HEPHfkO1q4B39M8YOE5m76iOyiR8YTXPIy+I1hvD8gcgrh3vh3SaAN4pM9D0xHMDvv9vfx59GcUhQ+2fIUpf091dNZ3QwU87TzhsocW6Qw3+3JOIT+amh1HkDqxsR6gsEEeskuKgS7TcEdtlWbP26boe6vw6g4J8xagspA6c03pt9Uaa7ThkWa4Dx3NwkULq6J6tzuFE1t6wHjATeCH1fAp8RbbjB1UvoxzTnqlA0crSxhUxeX7EG6Cu2BaJA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6857.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(366004)(376002)(346002)(39850400004)(396003)(83380400001)(966005)(4326008)(5660300002)(9686003)(8936002)(71200400001)(316002)(33656002)(66476007)(2906002)(76116006)(64756008)(66556008)(66946007)(55016002)(7696005)(478600001)(6506007)(110136005)(122000001)(54906003)(86362001)(53546011)(52536014)(30864003)(26005)(66446008)(8676002)(38100700002)(186003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?gb2312?Q?mnFtGrx3etZSfdjJp6P7XC/m5msldca+YCBd8/Y?=
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4169
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT012.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	cbf13193-67d2-424d-6f0e-08d93f9bfc4f
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	hlV+6KejMd/yMnH+HcF6p+PxTTmz0BA/L34qX9k4YQ3qkdUhddYhgWHOMjHzJuRlYnLgEuTUZCTdT9BblEQZikDyMfJgjSRqTYgVCUJKAWjiOGd20f/cHmCLlnXpA72kscLkwV9Jty5uV+JOfP3BWmwHrDaQAE4TJerUFTNj6fGN7O2FDOywLoT/csW2DVbGtAL8YMNBwRGsXi7MULJSBUro1VvQagKERngvtavjTwtI9OuNs73QJUrbQ5sL1d3MjFGvwUX8LNjqqoAoL/fL8Gun4zT/CEJg4vcVMbNzUEjsWmn0k9GIVOR0C1DnSDVyQ91ohlFPOeJwS96vGyNtSjXMMhQiUH1YNZwtAby/qRQB2o2o5sBwbQU9uqCMyx4qShqJSuN374qQF9/H4HLBd9LGI0d8kFUjd5coqpjSyuGuOCgHTEXRYba7l3fPDxKuaoiT0ZF6aqiBLxu+l9ISX5+EYNIyhQxAh3DM7b0L8upFR2KC8Tq7MgfWGBCmGGXjQCuNJ3hJRuqekN2rn6EAwZOe9V9P6rdxKFu2wAUlaucJv01cO4dP412DaJkusjRr5XLEHd0pdLW43rf/hXghaZK30vrkLTiXsmfK5jJCJoYXoU/Bikaok4SY7IgR7TWmHfhZC/ZgRw66i3bG+9U/xkdRHFBCTaBGcVE98zgr8IuHhFPK+Wf7YRKGT9JoqIfsGwCv/1Q4Vwbioo8Gid8ARmSFw9WMeutup+/j1R+QMMyKLkgDBn0XER9h/p16dN+KmIgGU9/3kh35CpCBmeSJqOmkVWAnaRXKIt0rB1mfQT8ubvrDzXQbkh7CttZtTuoGhdPy3INzIA5X1PRM1rGJQQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(39850400004)(136003)(346002)(36840700001)(46966006)(83380400001)(47076005)(966005)(5660300002)(478600001)(8936002)(8676002)(30864003)(52536014)(70206006)(70586007)(4326008)(82310400003)(36860700001)(107886003)(55016002)(9686003)(336012)(316002)(110136005)(54906003)(53546011)(6506007)(26005)(186003)(82740400003)(86362001)(7696005)(356005)(81166007)(33656002)(2906002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:02:35.6009
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 94b232bb-1a39-4df6-5bc5-08d93f9c039d
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT012.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1773

SGkgU3RlZmFubywNCg0KVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLg0KDQo+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlA
a2VybmVsLm9yZz4NCj4gU2VudDogMjAyMcTqNtTCMzDI1SA4OjQzDQo+IFRvOiB3aWxsQGtlcm5l
bC5vcmc7IGp1bGllbi50aGllcnJ5LmtkZXZAZ21haWwuY29tOyBXZWkgQ2hlbg0KPiA8V2VpLkNo
ZW5AYXJtLmNvbT4NCj4gQ2M6IGt2bUB2Z2VyLmtlcm5lbC5vcmc7IHhlbi1kZXZlbEBsaXN0cy54
ZW4ub3JnOyBqZWFuLXBoaWxpcHBlQGxpbmFyby5vcmc7DQo+IEp1bGllbiBHcmFsbCA8anVsaWVu
QHhlbi5vcmc+OyBBbmRyZSBQcnp5d2FyYSA8QW5kcmUuUHJ6eXdhcmFAYXJtLmNvbT47DQo+IE1h
cmMgWnluZ2llciA8bWF6QGtlcm5lbC5vcmc+OyBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxs
aW5pQGtlcm5lbC5vcmc+Ow0KPiBPbGVrc2FuZHIgVHlzaGNoZW5rbyA8T2xla3NhbmRyX1R5c2hj
aGVua29AZXBhbS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbS3ZtdG9vbF0gU29tZSB0aG91Z2h0cyBv
biB1c2luZyBrdm10b29sIFZpcnRpbyBmb3IgWGVuDQo+DQo+IEhpIFdlaSwNCj4NCj4gU29ycnkg
Zm9yIHRoZSBsYXRlIHJlcGx5Lg0KPg0KPg0KPiBPbiBUdWUsIDE1IEp1biAyMDIxLCBXZWkgQ2hl
biB3cm90ZToNCj4gPiBIaSwNCj4gPg0KPiA+IEkgaGF2ZSBzb21lIHRob3VnaHRzIG9mIHVzaW5n
IGt2bXRvb2wgVmlydGlvIGltcGxlbWVudGF0aW9uDQo+ID4gZm9yIFhlbi4gSSBjb3BpZWQgbXkg
bWFya2Rvd24gZmlsZSB0byB0aGlzIGVtYWlsLiBJZiB5b3UgaGF2ZQ0KPiA+IHRpbWUsIGNvdWxk
IHlvdSBwbGVhc2UgaGVscCBtZSByZXZpZXcgaXQ/DQo+ID4NCj4gPiBBbnkgZmVlZGJhY2sgaXMg
d2VsY29tZSENCj4gPg0KPiA+ICMgU29tZSB0aG91Z2h0cyBvbiB1c2luZyBrdm10b29sIFZpcnRp
byBmb3IgWGVuDQo+ID4gIyMgQmFja2dyb3VuZA0KPiA+DQo+ID4gWGVuIGNvbW11bml0eSBpcyB3
b3JraW5nIG9uIGFkZGluZyBWSVJUSU8gY2FwYWJpbGl0eSB0byBYZW4uIEFuZCB3ZSdyZQ0KPiB3
b3JraW5nDQo+ID4gb24gVklSVElPIGJhY2tlbmQgb2YgWGVuLiBCdXQgZXhjZXB0IFFFTVUgY2Fu
IHN1cHBvcnQgdmlydGlvLW5ldCBmb3INCj4geDg2LXhlbiwNCj4gPiB0aGVyZSBpcyBub3QgYW55
IFZJUlRJTyBiYWNrZW5kIGNhbiBzdXBwb3J0IFhlbi4gQmVjYXVzZSBvZiB0aGUNCj4gY29tbXVu
aXR5J3MNCj4gPiBzdHJvbmcgdm9pY2Ugb2YgT3V0LW9mLVFFTVUsIHdlIHdhbnQgdG8gZmluZCBh
IGxpZ2h0IHdlaWdodCBWSVJUSU8NCj4gYmFja2VuZCB0bw0KPiA+IHN1cHBvcnQgWGVuLg0KPiA+
DQo+ID4gV2UgaGF2ZSBhbiBpZGVhIG9mIHV0aWxpemluZyB0aGUgdmlydGlvIGltcGxlbWVudGF0
b24gb2Yga3ZtdG9vbCBmb3IgWGVuLg0KPiBBbmQNCj4gPiBXZSBrbm93IHRoZXJlIHdhcyBzb21l
IGFncmVlbWVudCB0aGF0IGt2bXRvb2wgd29uJ3QgdHJ5IHRvIGJlIGEgZnVsbA0KPiBRRU1VDQo+
ID4gYWx0ZXJuYXRpdmUuIFNvIHdlIGhhdmUgd3JpdHRlbiB0d28gcHJvcG9zYWxzIGluIGZvbGxv
d2luZyBjb250ZW50IGZvcg0KPiA+IGNvbW11bml0aWVzIHRvIGRpc2N1c3MgaW4gcHVibGljOg0K
PiA+DQo+ID4gIyMgUHJvcG9zYWxzDQo+ID4gIyMjIDEuIEludHJvZHVjZSBhIG5ldyAiZG0tb25s
eSIgY29tbWFuZA0KPiA+IDEuIEludHJvZHVjZSBhIG5ldyAiZG0tb25seSIgY29tbWFuZCB0byBw
cm92aWRlIGEgcHVyZSBkZXZpY2UgbW9kZWwgbW9kZS4NCj4gSW4NCj4gPiAgICB0aGlzIG1vZGUs
IGt2bXRvb2wgb25seSBoYW5kbGVzIElPIHJlcXVlc3QuIFZNIGNyZWF0aW9uIGFuZA0KPiBpbml0
aWFsaXphdGlvbg0KPiA+ICAgIHdpbGwgYmUgYnlwYXNzZWQuDQo+ID4NCj4gPiAgICAgKiBXZSB3
aWxsIHJld29yayB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHZpcnRpbyBjb2RlIGFuZCB0aGUg
cmVzdA0KPiBvZg0KPiA+ICAgICBrdm10b29sLCB0byB1c2UganVzdCB0aGUgbWluaW1hbCBzZXQg
b2YgaW5mb3JtYXRpb24uIEF0IHRoZSBlbmQsDQo+IHRoZXJlDQo+ID4gICAgIHdvdWxkIGJlIE1N
SU8gYWNjZXNzZXMgYW5kIHNoYXJlZCBtZW1vcnkgdGhhdCBjb250cm9sIHRoZSBkZXZpY2UNCj4g
bW9kZWwsDQo+ID4gICAgIHNvIHRoYXQgY291bGQgYmUgYWJzdHJhY3RlZCB0byBkbyBhd2F5IHdp
dGggYW55IEtWTSBzcGVjaWZpY3MgYXQgYWxsLg0KPiBJZg0KPiA+ICAgICB0aGlzIGlzIHdvcmth
YmxlLCB3ZSB3aWxsIHNlbmQgdGhlIGZpcnN0IHNldCBvZiBwYXRjaGVzIHRvIGludHJvZHVjZQ0K
PiB0aGlzDQo+ID4gICAgIGludGVyZmFjZSwgYW5kIGFkYXB0IHRoZSBleGlzdGluZyBrdm10b29s
IHRvIGl0LiBUaGVuIGxhdGVyIHdlIHdpbGwNCj4gY2FuDQo+ID4gICAgIGFkZCBYZW4gc3VwcG9y
dCBvbiB0b3Agb2YgaXQuDQo+ID4NCj4gPiAgICAgQWJvdXQgWGVuIHN1cHBvcnQsIHdlIHdpbGwg
ZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBYZW4gbGlicmFyaWVzLA0KPiBhbHNvDQo+ID4gICAgIGFs
bG93IHBlb3BsZSB0byBpZ25vcmUgdGhlbSwgYXMga3ZtdG9sbCBkbyB3aXRoIG9wdGlvbmFsIGZl
YXR1cmVzDQo+IGxpa2UNCj4gPiAgICAgbGlieiBvciBsaWJhaW8uDQo+ID4NCj4gPiAgICAgSWRl
YWx5LCB3ZSB3YW50IHRvIG1vdmUgYWxsIGNvZGUgcmVwbHlpbmcgb24gWGVuIGxpYnJhcmllcyB0
byBhIHNldA0KPiBvZg0KPiA+ICAgICBuZXcgZmlsZXMuIEluIHRoaXMgY2FzZSwgdGhlcyBmaWxl
cyBjYW4gb25seSBiZSBjb21waWxlZCB3aGVuIFhlbg0KPiA+ICAgICBsaWJyYXJpZXMgYXJlIGRl
dGVjdGVkLiBCdXQgaWYgd2UgY2FuJ3QgZGVjb3VwbGUgdGhpcyBjb2RlDQo+IGNvbXBsZXRlbHks
DQo+ID4gICAgIHdlIG1heSBpbnRyb2R1Y2UgYSBiaXQgb2YgI2lmZGVmcyB0byBwcm90ZWN0IHRo
aXMgY29kZS4NCj4gPg0KPiA+ICAgICBJZiBrdm0gb3Igb3RoZXIgVk1NIGRvIG5vdCBuZWVkICJk
bS1vbmx5IiBtb2RlLiBPciAiZG0tb25seSIgY2FuIG5vdA0KPiA+ICAgICB3b3JrIHdpdGhvdXQg
WGVuIGxpYnJhcmllcy4gV2Ugd2lsbCBtYWtlICJkbS1vbmx5IiBjb21tYW5kIGRlcGVuZHMNCj4g
b24NCj4gPiAgICAgdGhlIHByZXNlbmNlIG9mIFhlbiBsaWJyYXJpZXMuDQo+ID4NCj4gPiAgICAg
U28gYSBub3JtYWwgY29tcGlsZSAod2l0aG91dCB0aGUgWGVuIGxpYnJhcmllcyBpbnN0YWxsZWQp
IHdvdWxkDQo+IGNyZWF0ZQ0KPiA+ICAgICBhIGJpbmFyeSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0
byB0aGUgY3VycmVudCBjb2RlLCBhbmQgb25seSB0aGUNCj4gcGVvcGxlDQo+ID4gICAgIHdobyBo
YXZpbmcgWGVuIGxpYnJhcmllcyBpbnN0YWxsZWQgd291bGQgZXZlciBnZW5lcmF0ZSBhICJkbS1v
bmx5Ig0KPiA+ICAgICBjYXBhYmxlIGt2bXRvb2wuDQo+ID4NCj4gPiAjIyMgMi4gQWJzdHJhY3Qg
a3ZtdG9vbCB2aXJ0aW8gaW1wbGVtZW50YXRpb24gYXMgYSBsaWJyYXJ5DQo+ID4gMS4gQWRkIGEg
a3ZtdG9vbCBNYWtlZmlsZSB0YXJnZXQgdG8gZ2VuZXJhdGUgYSB2aXJ0aW8gbGlicmFyeS4gSW4g
dGhpcw0KPiA+ICAgIHNjZW5hcmlvLCBub3QganVzdCBYZW4sIGJ1dCBhbnkgcHJvamVjdCBlbHNl
IHdhbnQgdG8gcHJvdmlkZSBhDQo+ID4gICAgdXNlcnNwYWNlIHZpcnRpbyBiYWNrZW5kIHNlcnZp
Y2UgY2FuIGxpbmsgdG8gdGhpcyB2aXJ0aW8gbGlicmFyaXMuDQo+ID4gICAgVGhlc2UgdXNlcnMg
d291bGQgYmVuZWZpdCBmcm9tIHRoZSBWSVJUSU8gaW1wbGVtZW50YXRpb24gb2Yga3ZtdG9vbA0K
PiA+ICAgIGFuZCB3aWxsIHBhcnRpY2lwYXRlIGluIGltcHJvdmVtZW50cywgdXBncmFkZXMsIGFu
ZCBtYWludGVuYW5jZSBvZg0KPiA+ICAgIHRoZSBWSVJUSU8gbGlicmFyaWVzLg0KPiA+DQo+ID4g
ICAgICogSW4gdGhpcyBjYXNlLCBYZW4gcGFydCBjb2RlIHdpbGwgbm90IHVwc3RyZWFtIHRvIGt2
bXRvb2wgcmVwbywNCj4gPiAgICAgICBpdCB3b3VsZCB0aGVuIGJlIG5hdHVyYWwgcGFydHMgb2Yg
dGhlIHhlbiByZXBvLCBpbiB4ZW4vdG9vbHMgb3INCj4gPiAgICAgICBtYWludGFpbmVkIGluIG90
aGVyIHJlcG8uDQo+ID4NCj4gPiAgICAgICBXZSB3aWxsIGhhdmUgYSBjb21wbGV0ZWx5IHNlcGFy
YXRlIFZJUlRJTyBiYWNrZW5kIGZvciBYZW4sIGp1c3QNCj4gPiAgICAgICBsaW5raW5nIHRvIGt2
bXRvb2wncyBWSVJUSU8gbGlicmFyeS4NCj4gPg0KPiA+ICAgICAqIFRoZSBtYWluIGNoYW5nZXMg
b2Yga3ZtdG9vbCB3b3VsZCBiZToNCj4gPiAgICAgICAgIDEuIFN0aWxsIG5lZWQgdG8gcmV3b3Jr
IHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgdmlydGlvIGNvZGUNCj4gPiAgICAgICAgICAgIGFu
ZCB0aGUgcmVzdCBvZiBrdm10b29sLCB0byBhYnN0cmFjdCB0aGUgd2hvbGUgdmlydGlvDQo+ID4g
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBpbnRvIGEgbGlicmFyeQ0KPiA+ICAgICAgICAgMi4g
TW9kaWZ5IGN1cnJlbnQgYnVpbGQgc3lzdGVtIHRvIGFkZCBhIG5ldyB2aXJ0aW8gbGlicmFyeQ0K
PiB0YXJnZXQuDQo+DQo+DQo+IEkgZG9uJ3QgcmVhbGx5IGhhdmUgYSBwcmVmZXJlbmNlIGJldHdl
ZW4gdGhlIHR3by4NCj4NCj4gRnJvbSBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBYZW4gZW5hYmxl
bWVudCBpbiBRRU1VLCBJIGNhbiBzYXkgdGhhdCB0aGUNCj4gWGVuIHBhcnQgb2YgcmVjZWl2aW5n
IElPIGVtdWxhdGlvbiByZXF1ZXN0cyBpcyBhY3R1YWxseSBwcmV0dHkgbWluaW1hbC4NCg0KWWVz
LCB3ZSBoYXZlIGRvbmUgc29tZSBwcm90b3R5cGluZywgYW5kIHRoZSBjb2RlIG9mIFhlbiByZWNl
aXZlIElPUkVRDQpzdXBwb3J0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBhIHNlcGFyYXRlIG5ldyBm
aWxlIHdpdGhvdXQgaW52YXNpb24gaW50bw0KdGhlIGV4aXN0aW5nIGt2bXRvb2wuDQoNClRoZSBw
b2ludCBpcyB0aGF0IHRoZSBkZXZpY2UgaW1wbGVtZW50YXRpb24gY2FsbHMgdGhlIGh5cGVydmlz
b3IgaW50ZXJmYWNlcw0KdG8gaGFuZGxlIHRoZXNlIElPUkVRcywgYW5kIGlzIGN1cnJlbnRseSB0
aWdodGx5IGNvdXBsZWQgdG8gTGludXgtS1ZNIGluIHRoZQ0KaW1wbGVtZW50YXRpb24gb2YgZWFj
aCBkZXZpY2UuIFdpdGhvdXQgc29tZSBhYnN0cmFjdCB3b3JrLCB0aGVzZSBhZGFwdGF0aW9ucw0K
Y2FuIGxlYWQgdG8gbW9yZSBpbnRydXNpdmUgbW9kaWZpY2F0aW9ucy4NCg0KPiBTZWUgYXMgYSBy
ZWZlcmVuY2UNCj4gaHR0cHM6Ly9naXRodWIuY29tL3FlbXUvcWVtdS9ibG9iLzEzZDVmODdjYzNi
OTRiZmNjYzUwMTE0MmRmNGE3YjEyZmVlM2E2ZTcNCj4gL2h3L2kzODYveGVuL3hlbi1odm0uYyNM
MTE2My4NCg0KPiBUaGUgbW9kaWZpY2F0aW9ucyB0byByZXdvcmsgdGhlIGludGVybmFsIGludGVy
ZmFjZXMgdGhhdCB5b3UgbGlzdGVkDQo+IGJlbG93IGFyZSBmYXIgbW9yZSAiaW50ZXJlc3Rpbmci
IHRoYW4gdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIHJlY2VpdmUNCj4gZW11bGF0aW9uIHJlcXVlc3Rz
IGZyb20gWGVuLg0KPg0KDQpJJ20gZ2xhZCB0byBoZWFyIHRoYXQgOiApDQoNCj4gU28gaXQgbG9v
a3MgbGlrZSBvcHRpb24tMSB3b3VsZCBiZSBsZXNzIGVmZm9ydHMgYW5kIGZld2VyIGNvZGUgY2hh
bmdlcw0KPiBvdmVyYWxsIHRvIGt2bXRvb2xzLiBPcHRpb24tMiBpcyBtb3JlIHdvcmsuIFRoZSBs
aWJyYXJ5IGNvdWxkIGJlIG5pY2UgdG8NCj4gaGF2ZSBidXQgdGhlbiB3ZSB3b3VsZCBoYXZlIHRv
IGJlIHZlcnkgY2FyZWZ1bCBhYm91dCB0aGUgQVBJL0FCSSwNCj4gY29tcGF0aWJpbGl0eSwgZXRj
Lg0KPg0KPiBXaWxsIERlYWNvbiBhbmQgSnVsaWVuIFRoaWVycnkgbWlnaHQgaGF2ZSBhbiBvcGlu
aW9uLg0KPg0KPg0KDQpMb29raW5nIGZvcndhcmQgdG8gV2lsbCBhbmQgSnVsaWVuJ3MgY29tbWVu
dHMuDQoNCj4NCj4gPiAjIyBSZXdvcmtpbmcgdGhlIGludGVyZmFjZSBpcyB0aGUgY29tbW9uIHdv
cmsgZm9yIGFib3ZlIHByb3Bvc2Fscw0KPiA+ICoqSW4ga3ZtdG9vbCwgb25lIHZpcnR1YWwgZGV2
aWNlIGNhbiBiZSBzZXBhcmF0ZWQgaW50byB0aHJlZSBsYXllcnM6KioNCj4gPg0KPiA+IC0gQSBk
ZXZpY2UgdHlwZSBsYXllciB0byBwcm92aWRlIGFuIGFic3RyYWN0DQo+ID4gICAgIC0gUHJvdmlk
ZSBpbnRlcmZhY2UgdG8gY29sbGVjdCBhbmQgc3RvcmUgZGV2aWNlIGNvbmZpZ3VyYXRpb24uDQo+
ID4gICAgICAgICBVc2luZyBibG9jayBkZXZpY2UgYXMgYW4gZXhhbXBsZSwga3ZtdG9vbCBpcyB1
c2luZyBkaXNrX2ltYWdlIHRvDQo+ID4gICAgICAgICAtICBjb2xsZWN0IGFuZCBzdG9yZSBkaXNr
IHBhcmFtZXRlcnMgbGlrZToNCj4gPiAgICAgICAgICAgICAtICBiYWNrZW5kIGltYWdlIGZvcm1h
dDogcmF3LCBxY293IG9yIGJsb2NrIGRldmljZQ0KPiA+ICAgICAgICAgICAgIC0gIGJhY2tlbmQg
YmxvY2sgZGV2aWNlIG9yIGZpbGUgaW1hZ2UgcGF0aA0KPiA+ICAgICAgICAgICAgIC0gIFJlYWRv
bmx5LCBkaXJlY3QgYW5kIGV0Yw0KPiA+ICAgICAtIFByb3ZpZGUgb3BlcmF0aW9ucyB0byBpbnRl
cmFjdCB3aXRoIHJlYWwgYmFja2VuZCBkZXZpY2VzIG9yDQo+IHNlcnZpY2VzOg0KPiA+ICAgICAg
ICAgLSBwcm92aWRlIGJhY2tlbmQgZGV2aWNlIG9wZXJhdGlvbnM6DQo+ID4gICAgICAgICAgICAg
LSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucw0KPiA+ICAgICAgICAgICAgIC0gcmF3IGltYWdlIG9w
ZXJhdGlvbnMNCj4gPiAgICAgICAgICAgICAtIHFjb3cgaW1hZ2Ugb3BlcmF0aW9ucw0KPiA+IC0g
SHlwZXJ2aXNvciBpbnRlcmZhY2VzDQo+ID4gICAgIC0gR3Vlc3QgbWVtb3J5IG1hcHBpbmcgYW5k
IHVubWFwcGluZyBpbnRlcmZhY2VzDQo+ID4gICAgIC0gVmlydHVhbCBkZXZpY2UgcmVnaXN0ZXIg
aW50ZXJmYWNlDQo+ID4gICAgICAgICAtIE1NSU8vUElPIHNwYWNlIHJlZ2lzdGVyDQo+ID4gICAg
ICAgICAtIElSUSByZWdpc3Rlcg0KPiA+ICAgICAtIFZpcnR1YWwgSVJRIGluamVjdCBpbnRlcmZh
Y2UNCj4gPiAgICAgLSBIeXBlcnZpc29yIGV2ZW50ZmQgaW50ZXJmYWNlDQo+DQo+IFRoZSAiaHlw
ZXJ2aXNvciBpbnRlcmZhY2VzIiBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgbW9zdCBpbnRlcmVzdGlu
ZyBhcyB3ZQ0KPiBuZWVkIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciBYZW4gZm9y
IGVhY2ggb2YgdGhlbS4gVGhpcyBpcw0KPiB0aGUgcGFydCB0aGF0IHdhcyBhIGJpdCBtb3JlIGRl
bGljYXRlIHdoZW4gd2UgYWRkZWQgWGVuIHN1cHBvcnQgdG8gUUVNVS4NCj4gRXNwZWNpYWxseSB0
aGUgbWVtb3J5IG1hcHBpbmcgYW5kIHVubWFwcGluZy4gQWxsIGRvYWJsZSBidXQgd2UgbmVlZA0K
PiBwcm9wZXIgYWJzdHJhY3Rpb25zLg0KPg0KDQpZZXMuIEd1ZXN0IG1lbW9yeSBtYXBwaW5nIGFu
ZCB1bm1hcHBpbmcsIGlmIHdlIHVzZSBvcHRpb24jMSwgdGhpcyB3aWxsIGJlIGENCmEgYmlnIGNo
YW5nZSBpbnRyb2R1Y2VkIGluIEt2bXRvb2wuIFNpbmNlIExpbnV4LUtWTSBndWVzdCBtZW1vcnkg
aW4ga3ZtdG9vbA0KaXMgZmxhdCBtYXBwZWQgaW4gYWR2YW5jZSwgaXQgZG9lcyBub3QgcmVxdWly
ZSBkeW5hbWljIEd1ZXN0IG1lbW9yeSBtYXBwaW5nDQphbmQgdW5tYXBwaW5nLiBBIHByb3BlciBh
YnN0cmFjdCBpbnRlcmZhY2UgY2FuIGJyaWRnZSB0aGlzIGdhcC4NCg0KPg0KPiA+IC0gQW4gaW1w
bGVtZW50YXRpb24gbGF5ZXIgdG8gaGFuZGxlIGd1ZXN0IElPIHJlcXVlc3QuDQo+ID4gICAgIC0g
S3ZtdG9vbCBwcm92aWRlcyB2aXJ0dWFsIGRldmljZXMgZm9yIGd1ZXN0LiBTb21lIHZpcnR1YWwg
ZGV2aWNlcw0KPiB0d28NCj4gPiAgICAgICBraW5kcyBvZiBpbXBsZW1lbnRhdGlvbnM6DQo+ID4g
ICAgICAgICAtIFZJUlRJTyBpbXBsZW1lbnRhdGlvbg0KPiA+ICAgICAgICAgLSBSZWFsIGhhcmR3
YXJlIGVtdWxhdGlvbg0KPiA+DQo+ID4gRm9yIGV4YW1wbGUsIGt2bXRvb2wgY29uc29sZSBoYXMg
dmlydGlvIGNvbnNvbGUgYW5kIDgyNTAgc2VyaWFsIHR3bw0KPiBraW5kcw0KPiA+IG9mIGltcGxl
bWVudGF0aW9ucy4gVGhlc2UgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiBkZXZpY2UgdHlwZQ0K
PiBwYXJhbWV0ZXJzDQo+ID4gdG8gY3JlYXRlIGRldmljZXMsIGFuZCBkZXBlbmRzIG9uIGRldmlj
ZSB0eXBlIG9wcyB0byBmb3J3YXJkIGRhdGENCj4gZnJvbS90bw0KPiA+IHJlYWwgZGV2aWNlLiBB
bmQgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgaW52b2tlIGh5cGVydmlzb3IgaW50ZXJmYWNlcyB0
bw0KPiA+IG1hcC91bm1hcCByZXNvdXJjZXMgYW5kIG5vdGlmeSBndWVzdC4NCj4gPg0KPiA+IElu
IHRoZSBjdXJyZW50IGt2bXRvb2wgY29kZSwgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB0aGVzZSB0
aHJlZSBsYXllcnMNCj4gYXJlDQo+ID4gcmVsYXRpdmVseSBjbGVhciwgYnV0IHRoZXJlIGFyZSBh
IGZldyBwaWVjZXMgb2YgY29kZSB0aGF0IGFyZSBzb21ld2hhdA0KPiA+IGludGVybGVhdmVkLCBm
b3IgZXhhbXBsZToNCj4gPiAtIEluIHZpcnRpb19ibGtfX2luaXQoLi4uKSBmdW5jdGlvbiwgdGhl
IGNvZGUgd2lsbCB1c2UgZGlza19pbWFnZQ0KPiBkaXJlY3RseS4NCj4gPiAgIFRoaXMgZGF0YSBp
cyBrdm10b29sIHNwZWNpZmllZC4gSWYgd2Ugd2FudCB0byBtYWtlIFZJUlRJTw0KPiBpbXBsZW1l
bnRhdGlvbg0KPiA+ICAgYmVjb21lIGh5cGVydmlzb3IgYWdub3N0aWMuIFN1Y2gga2luZCBvZiBj
b2RlIHNob3VsZCBiZSBtb3ZlZCB0byBvdGhlcg0KPiA+ICAgcGxhY2UuIE9yIHdlIGp1c3Qga2Vl
cCBjb2RlIGZyb20gdmlydGlvX2Jsa19faW5pdF9vbmUoLi4uKSBpbiB2aXJ0aW8NCj4gYmxvY2sN
Cj4gPiAgIGltcGxlbWVudGF0aW9uLCBidXQga2VlcCB2aXJ0aW9fYmxrX19pbml0KC4uLikgaW4g
a3ZtdG9vbCBzcGVjaWZpZWQNCj4gcGFydA0KPiA+ICAgY29kZS4NCj4gPg0KPiA+IEhvd2V2ZXIs
IGluIHRoZSBjdXJyZW50IFZJUlRJTyBkZXZpY2UgY3JlYXRpb24gYW5kIGRhdGEgaGFuZGxpbmcg
cHJvY2VzcywNCj4gPiB0aGUgZGV2aWNlIHR5cGUgYW5kIGh5cGVydmlzb3IgQVBJIHVzZWQgYXJl
IGJvdGggZXhjbHVzaXZlIHRvIGt2bXRvb2wNCj4gYW5kDQo+ID4gS1ZNLiBJZiB3ZSB3YW50IHRv
IHVzZSBjdXJyZW50IFZJUlRJTyBpbXBsZW1lbnRhdGlvbiBmb3Igb3RoZXIgZGV2aWNlDQo+ID4g
bW9kZWxzIGFuZCBoeXBlcnZpc29ycywgaXQgaXMgdW5saWtlbHkgdG8gd29yayBwcm9wZXJseS4N
Cj4gPg0KPiA+IFNvLCB0aGUgbWFqb3Igd29yayBvZiByZXdvcmtpbmcgaW50ZXJmYWNlIGlzIGRl
Y291cGxpbmcgVklSVElPDQo+IGltcGxlbWVudGF0aW9uDQo+ID4gZnJvbSBrdm10b29sIGFuZCBL
Vk0uDQo+ID4NCj4gPiAqKkludHJvZHVjZSBzb21lIGludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVy
ZXMgdG8gZG8gZGVjb3VwbGU6KioNCj4gPiAxLiBJbnRyb2R1Y2UgaW50ZXJtZWRpZGF0ZSB0eXBl
IGRhdGEgc3RydWN0dXJlcyBsaWtlIGB2aXJ0aW9fZGlza190eXBlYCwNCj4gPiAgICBgdmlydGlv
X25ldF90eXBlYCwgYHZpcnRpb19jb25zb2xlX3R5cGVgIGFuZCBldGMuIFRoZXNlIGRhdGENCj4g
c3RydWN0dXJlcw0KPiA+ICAgIHdpbGwgYmUgdGhlIHN0YW5kYXJkIGRldmljZSB0eXBlIGludGVy
ZmFjZXMgYmV0d2VlbiB2aXJ0aW8gZGV2aWNlDQo+ID4gICAgaW1wbGVtZW50YXRpb24gYW5kIGh5
cGVydmlzb3IuICBVc2luZyB2aXJ0aW9fZGlza190eXBlIGFzIGFuIGV4YW1wbGU6DQo+ID4gICAg
IH5+fn4NCj4gPiAgICAgc3RydWN0IHZpcnRpb19kaXNrX3R5cGUgew0KPiA+ICAgICAgICAgLyoN
Cj4gPiAgICAgICAgICAqIEVzc2VudGlhbCBjb25maWd1cmF0aW9uIGZvciB2aXJ0aW8gYmxvY2sg
ZGV2aWNlIGNhbiBiZSBnb3QNCj4gZnJvbQ0KPiA+ICAgICAgICAgICoga3ZtdG9vbCBkaXNrX2lt
YWdlLiBPdGhlciBoeXBlcnZpc29yIGRldmljZSBtb2RlbCBhbHNvIGNhbg0KPiB1c2UNCj4gPiAg
ICAgICAgICAqIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyBuZWNlc3NhcnkgcGFyYW1ldGVy
cyBmb3IgY3JlYXRpbmcNCj4gPiAgICAgICAgICAqIGEgdmlydGlvIGJsb2NrIGRldmljZS4NCj4g
PiAgICAgICAgICAqLw0KPiA+ICAgICAgICAgc3RydWN0IHZpcnRpb19ibGtfY2ZnIHZibGtfY2Zn
Ow0KPiA+ICAgICAgICAgLyoNCj4gPiAgICAgICAgICAqIFZpcnRpbyBibG9jayBkZXZpY2UgTU1J
TyBhZGRyZXNzIGFuZCBJUlEgbGluZS4gVGhlc2UgdHdvDQo+IG1lbWJlcnMNCj4gPiAgICAgICAg
ICAqIGFyZSBvcHRpb25hbC4gSWYgaHlwZXJ2aXNvciBwcm92aWRlcyBhbGxvY2F0ZV9tbWlvX3Nw
YWNlIGFuZA0KPiA+ICAgICAgICAgICogYWxsb2NhdGVfaXJxX2xpbmUgY2FwYWJpbGl0eSBhbmQg
ZGV2aWNlIG1vZGVsIGRvZXNuJ3Qgc2V0DQo+IHRoZXNlDQo+ID4gICAgICAgICAgKiB0d28gZmll
bGRzLCB2aXJ0aW8gYmxvY2sgaW1wbGVtZW50YXRpb24gd2lsbCB1c2UgaHlwZXJ2aXNvcg0KPiBB
UElzDQo+ID4gICAgICAgICAgKiB0byBhbGxvY2F0ZSBNTUlPIGFkZHJlc3MgYW5kIElSUSBsaW5l
LiBJZiB0aGVzZSB0d28gZmllbGRzDQo+IGFyZQ0KPiA+ICAgICAgICAgICogY29uZmlndXJlZCwg
dmlydGlvIGJsb2NrIGltcGxlbWVudGF0aW9uIHdpbGwgdXNlIHRoZW0uDQo+ID4gICAgICAgICAg
Ki8NCj4gPiAgICAgICAgIHBhZGRyX3QgYWRkcjsNCj4gPiAgICAgICAgIHVpbnQzMl90IGlycTsN
Cj4gPiAgICAgICAgIC8qDQo+ID4gICAgICAgICAgKiBJbiBrdm10b29sLCB0aGlzIG9wcyB3aWxs
IGNvbm5lY3QgdG8gZGlza19pbWFnZSBBUElzLiBPdGhlcg0KPiA+ICAgICAgICAgICogaHlwZXJ2
aXNvciBkZXZpY2UgbW9kZWwgc2hvdWxkIHByb3ZpZGUgc2ltaWxhciBBUElzIGZvciB0aGlzDQo+
ID4gICAgICAgICAgKiBvcHMgdG8gaW50ZXJhY3Qgd2l0aCByZWFsIGJhY2tlbmQgZGV2aWNlLg0K
PiA+ICAgICAgICAgICovDQo+ID4gICAgICAgICBzdHJ1Y3QgZGlza190eXBlX29wcyB7DQo+ID4g
ICAgICAgICAgICAgLnJlYWQNCj4gPiAgICAgICAgICAgICAud3JpdGUNCj4gPiAgICAgICAgICAg
ICAuZmx1c2gNCj4gPiAgICAgICAgICAgICAud2FpdA0KPiA+ICAgICAgICAgICAgIC4uLg0KPiA+
ICAgICAgICAgfSBvcHM7DQo+ID4gICAgIH07DQo+ID4gICAgIH5+fn4NCj4gPg0KPiA+IDIuIElu
dHJvZHVjZSBhIGludGVybWVkaWF0ZSBoeXBlcnZpc29yIGRhdGEgc3RydWN0dXJlLiBUaGlzIGRh
dGENCj4gc3RydWN0dXJlDQo+ID4gICAgcHJvdmlkZXMgYSBzZXQgb2Ygc3RhbmRhcmQgaHlwZXJ2
aXNvciBBUEkgaW50ZXJmYWNlcy4gSW4gdmlydGlvDQo+ID4gICAgaW1wbGVtZW50YXRpb24sIHRo
ZSBLVk0gc3BlY2lmaWVkIEFQSXMsIGxpa2Uga3ZtX3JlZ2lzdGVyX21taW8sIHdpbGwNCj4gbm90
DQo+ID4gICAgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhlIHZpcnRpbyBpbXBsZW1lbnRhdGlvbiB3
aWxsIHVzZSB0aGVzZQ0KPiBpbnRlcmZhY2VzDQo+ID4gICAgdG8gYWNjZXNzIGh5cGVydmlzb3Ig
c3BlY2lmaWVkIEFQSXMuIGZvciBleGFtcGxlIGBzdHJ1Y3Qgdm1tX2ltcGxgOg0KPiA+ICAgICB+
fn5+DQo+ID4gICAgIHN0cnVjdCB2bW1faW1wbCB7DQo+ID4gICAgICAgICAvKg0KPiA+ICAgICAg
ICAgICogUG9pbnRlciB0aGF0IGxpbmsgdG8gcmVhbCBoeXBlcnZpc29yIGhhbmRsZSBsaWtlIGBz
dHJ1Y3Qga3ZtDQo+ICprdm1gLg0KPiA+ICAgICAgICAgICogVGhpcyBwb2ludGVyIHdpbGwgYmUg
cGFzc2VkIHRvIHRoZSB2bW0gb3BzOw0KPiA+ICAgICAgICAgICovDQo+ID4gICAgICAgICB2b2lk
ICp2bW07DQo+ID4gICAgICAgICBhbGxvY2F0ZV9pcnFfbGluZV9mbl90KHZvaWQqIHZtbSwgLi4u
KTsNCj4gPiAgICAgICAgIGFsbG9jYXRlX21taW9fc3BhY2VfZm5fdCh2b2lkKiB2bW0sIC4uLik7
DQo+ID4gICAgICAgICByZWdpc3Rlcl9tbWlvX2ZuX3Qodm9pZCogdm1tLCAuLi4pOw0KPiA+ICAg
ICAgICAgbWFwX2d1ZXN0X3BhZ2VfZm5fdCh2b2lkKiB2bW0sIC4uLik7DQo+ID4gICAgICAgICB1
bm1hcF9ndWVzdF9wYWdlX2ZuX3Qodm9pZCogdm1tLCAuLi4pOw0KPiA+ICAgICAgICAgdmlydHVh
bF9pcnFfaW5qZWN0X2ZuX3Qodm9pZCogdm1tLCAuLi4pOw0KPiA+ICAgICB9Ow0KPiA+ICAgICB+
fn5+DQo+DQo+IEFyZSB0aGUgbWFwX2d1ZXN0X3BhZ2UgYW5kIHVubWFwX2d1ZXN0X3BhZ2UgZnVu
Y3Rpb25zIGFscmVhZHkgY2FsbGVkIGF0DQo+IHRoZSBhcHByb3ByaWF0ZSBwbGFjZXMgZm9yIEtW
TT8NCg0KQXMgSSBoYWQgbWVudGlvbmVkIGluIGFib3ZlLCBLVk0gZG9lc24ndCBuZWVkIG1hcF9n
dWVzdF9wYWdlIGFuZCB1bm1hcF9ndWVzdF9wYWdlDQpkeW5hbWljYWxseSB3aGlsZSBoYW5kbGlu
ZyB0aGUgSU9SRVEuIFRoZXNlIHR3byBpbnRlcmZhY2VzIGNhbiBiZSBwb2ludGVkIHRvIE5VTEwN
Cm9yIGVtcHR5IGZ1bmN0aW9ucyBmb3IgS1ZNLg0KDQo+DQo+IElmIG5vdCwgdGhlIG1haW4gaXNz
dWUgaXMgZ29pbmcgdG8gYmUgYWRkaW5nIHRoZQ0KPiBtYXBfZ3Vlc3RfcGFnZS91bm1hcF9ndWVz
dF9wYWdlIGNhbGxzIHRvIHRoZSB2aXJ0aW8gZGV2aWNlDQo+IGltcGxlbWVudGF0aW9ucy4NCj4N
Cg0KWWVzLCB3ZSBjYW4gcGxhY2UgdGhlbSB0byB2aXJ0aW8gZGV2aWNlIGltcGxlbWVudGF0aW9u
cywgYW5kIGtlZXAgTk9QDQpvcGVyYXRpb24gZm9yIEtWTS4gT3RoZXIgVk1NcyBjYW4gYmUgaW1w
bGVtZW50ZWQgYXMgdGhlIGNhc2UgbWF5IGJlDQoNCj4NCj4gPiAzLiBBZnRlciBkZWNvdXBsZWQg
d2l0aCBrdm10b29sLCBhbnkgaHlwZXJ2aXNvciBjYW4gdXNlIHN0YW5kYXJkDQo+IGB2bW1faW1w
bGANCj4gPiAgICBhbmQgYHZpcnRpb194eHh4X3R5cGVgIGludGVyZmFjZXMgdG8gaW52b2tlIHN0
YW5kYXJkIHZpcnRpbw0KPiBpbXBsZW1lbnRhdGlvbg0KPiA+ICAgIGludGVyZmFjZXMgdG8gY3Jl
YXRlIHZpcnRpbyBkZXZpY2VzLg0KPiA+ICAgICB+fn5+DQo+ID4gICAgIC8qIFByZXBhcmUgVk1N
IGludGVyZmFjZSAqLw0KPiA+ICAgICBzdHJ1Y3Qgdm1tX2ltcGwgKnZtbSA9IC4uLjsNCj4gPiAg
ICAgdm1tLT5yZWdpc3Rlcl9tbWlvX2ZuX3QgPSBrdm1fX3JlZ2lzdGVyX21taW87DQo+ID4gICAg
IC8qIGt2bV9fbWFwX2d1c2V0X3BhZ2UgaXMgYSB3cmFwcGVyIGd1ZXN0X2ZsYXRfdG9faG9zdCAq
Lw0KPiA+ICAgICB2bW0tPm1hcF9ndWVzdF9wYWdlX2ZuX3QgPSBrdm1fX21hcF9ndXNldF9wYWdl
Ow0KPiA+ICAgICAuLi4NCj4gPg0KPiA+ICAgICAvKiBQcmVwYXJlIHZpcnRpb19kaXNrX3R5cGUg
Ki8NCj4gPiAgICAgc3RydWN0IHZpcnRpb19kaXNrX3R5cGUgKnZkaXNrX3R5cGUgPSAuLi47DQo+
ID4gICAgIHZkaXNrX3R5cGUtPnZibGtfY2ZnLmNhcGFjaXR5ID0gZGlza19pbWFnZS0+c2l6ZSAv
IFNFQ1RPUl9TSVpFOw0KPiA+ICAgICAuLi4NCj4gPiAgICAgdmRpc2tfdHlwZS0+b3BzLT5yZWFk
ID0gZGlza19pbWFnZV9fcmVhZDsNCj4gPiAgICAgdmRpc2tfdHlwZS0+b3BzLT53cml0ZSA9IGRp
c2tfaW1hZ2VfX3dyaXRlOw0KPiA+ICAgICAuLi4NCj4gPg0KPiA+ICAgICAvKiBJbnZva2UgVklS
VElPIGltcGxlbWVudGF0aW9uIEFQSSB0byBjcmVhdGUgYSB2aXJ0aW8gYmxvY2sgZGV2aWNlDQo+
ICovDQo+ID4gICAgIHZpcnRpb19ibGtfX2luaXRfb25lKHZtbSwgdmRpc2tfdHlwZSk7DQo+ID4g
ICAgIH5+fn4NCj4gPg0KPiA+IFZJUlRJTyBibG9jayBkZXZpY2Ugc2ltcGxlIGZsb3cgYmVmb3Jl
IHJld29ya2luZyBpbnRlcmZhY2U6DQo+ID4NCj4gaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2Zp
bGUvZC8xazBHcmQ0UlN1Q21oS1VQa3RIajlGUmFtRVlyUENGa1gvdmlldz91c3ANCj4gPXNoYXJp
bmcNCj4gPiAhW2ltYWdlXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vdWM/ZXhwb3J0PXZpZXcm
aWQ9MWswR3JkNFJTdUNtaEtVUGt0SGoNCj4gOUZSYW1FWXJQQ0ZrWCkNCj4gPg0KPiA+IFZJUlRJ
TyBibG9jayBkZXZpY2Ugc2ltcGxlIGZsb3cgYWZ0ZXIgcmV3b3JraW5nIGludGVyZmFjZToNCj4g
Pg0KPiBodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFyTVhSdnVsd2xSTzM5anVXZjA4
V2drM0cxTlp0RzJuTC92aWV3P3VzcA0KPiA9c2hhcmluZw0KPiA+ICFbaW1hZ2VdKGh0dHBzOi8v
ZHJpdmUuZ29vZ2xlLmNvbS91Yz9leHBvcnQ9dmlldyZpZD0xck1YUnZ1bHdsUk8zOWp1V2YwOA0K
PiBXZ2szRzFOWnRHMm5MKQ0KPiA+DQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gV2VpIENoZW4NCj4g
PiBJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2YgdGhpcyBlbWFpbCBhbmQgYW55IGF0
dGFjaG1lbnRzIGFyZQ0KPiBjb25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJlIHByaXZpbGVnZWQu
IElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZA0KPiByZWNpcGllbnQsIHBsZWFzZSBub3RpZnkg
dGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZQ0KPiBjb250ZW50
cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9yZSBv
ciBjb3B5IHRoZQ0KPiBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFuayB5b3UuDQo+ID4N
CklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0
YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYg
eW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2Vu
ZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBv
dGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhl
IGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:07:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:07:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150056.277503 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LVL-0004La-Hw; Mon, 05 Jul 2021 10:07:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150056.277503; Mon, 05 Jul 2021 10:07:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LVL-0004LT-EI; Mon, 05 Jul 2021 10:07:07 +0000
Received: by outflank-mailman (input) for mailman id 150056;
 Mon, 05 Jul 2021 10:07:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=andrew.cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LVJ-0004LN-Ho
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:07:05 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 705301ed-8c48-4a0a-a951-f2d9a3fa495c;
 Mon, 05 Jul 2021 10:07:04 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 705301ed-8c48-4a0a-a951-f2d9a3fa495c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625479624;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=vD5+6S7g5mH2XywkXQZuyOwCvE48NX2okNQE1cctsxY=;
  b=MfMPhytjXFMtLi4waMEl9jDLBzzSsvy4rEZCjQW+VshHZvl5Pu1Kb6S2
   Mqr/URNF6mk4kf1vFZgKb2Jhu3dwpe9erp45C0YLaFKU9SeZnwYuBOQ2O
   TVSF5VJKra2OLKd+hCXmHDC2OecP+K3fuJTw8RrP5H+pylUnwTZVofSKq
   U=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: g3eDuLWzwRcBNxi8TYNY6KahRQEBanD0AS+5+eBBGCHOGQic7EK4fEZyLj87huJmfyXyea/YkM
 NSN9UGOE4PM1XYA2RA3xKjDdavGJh5DEu6Ik/e/Fz+fgwjPN7nlAj6kdiDIx6G2cc83NVQKEv8
 eFTZr29TnOVHVDj3UUDq2whDSR/BS6gPzi2Pj/XYEcF2qimzzLHcUN0UZu19cSZb5aY3xXU8RG
 c70a5pSYK+5o3fWIjTqgMq663kDSRtCCtW4ssIivaVNLyAKOIck5RCCpMTxOlU0orFZ2Cl0J4T
 I3g=
X-SBRS: 5.1
X-MesageID: 47572914
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:LxCkrKCfSlmUAYflHehBsceALOsnbusQ8zAXPh9KJyC9I/b2qy
 nxppgmPH/P6Ar4WBkb6LS90dq7MA3hHPlOkPYs1NaZLXXbUQ6TTb2KgrGSuAEIdxeOkNK1kJ
 0QDpSWa+eAf2SS7/yKmDVQeuxIqLLsndHK9IWuu0uFDzsaDJ2Ihz0JeTpzeXcGPTWua6BJca
 Z0qvA33QZJLh8sH7SG7zQ+Lqf+juyOsKijTQ8NBhYh5gXLpTS06ITiGxzd+hsFSTtAzZor7G
 CAymXCl+SemsD+7iWZ+37Y7pxQltek4txfBPaUgsxQDjn3kA6naKloRrXHljEop+OE7kosjb
 D30lkdFvU2z0mUUnC+oBPr1QWl+i0p8WXexViRhmamidDlRRohYvAxx75xQ1/80Q4Nrdt82K
 VE0yayrJxMFy7Nmyz7+pzhSwxqrEypunAv+NRjzEC3abFuLIO5kLZvu3+8SPw7bWTHAcEcYa
 lT5fjnlbNrmQjwVQGBgoEHq+bcK0jaHX+9MwI/U4KuomBrdUtCvj0lLfok7zw9HaIGOu55Dt
 v/Q+1VfZF1P4IrhPFGdas8qfXeMB2EffuaChPiHb2gLtBdB07w
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47572914"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CjjFveKX+f3OQGdrqQKJPq5ANq1vAO9ZqDf7/aOcR9ylhprbfPGny6YyNwtT8yVLB+6mteKeRRNDzqJ2rtgWFahuHlVzeedpfQm3iOtTDJmgSrwdPQn+k5/DrSk5QvWH7vzWCUdS5j6wEX0gtSWvExRvSzixf0O0fQXrA+zASxl8E4Ft9IczQHWO1uEvY8X/asTsqYl788Xlx6lvN6I7zpk2lux1Fn+W8ffuE4l3SdYzBQK7dvfh82icC/ZBWuDt6LrEf77+knR1AdoWL+4P+EJ0l0tCVGrZzxj7K7QZEJx4acsIN4drh9Kae9RpAuIbqHenLUYci9KbizE8ZqnRzg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vD5+6S7g5mH2XywkXQZuyOwCvE48NX2okNQE1cctsxY=;
 b=nQbkuhtZLY2Uml1lpk5XXdquih3JSRajkG5OS0KLJD+Jfp0aqyArzYHztjsW5YxVRLM4uGtDtqzBbaOntKseHIEq5dadhU4mT7j1h5RyRNcyzfHXWzFG7XevL2rLmA8zwppvaHf+jFyhxUjLYwAeNPnPZNZl0Xmd0DjDpr5wQoq/x6FQk0sdDW0MIyGwRpNX+JEB/Aeo5CWLUxDSpfi6q3lD6CE2wGwLsF7wdqjlIhQoTr4pCFMxtii0oOmUA2mmFQj+K6XoqpJ04TScYmZz3H1YWz/o+gIS2DmuTPCYuGzwFRMO9LC17i/9ayIIZNx5cEed3Kau6vUPjbAEPcqDcg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vD5+6S7g5mH2XywkXQZuyOwCvE48NX2okNQE1cctsxY=;
 b=m386p22YELbCmRz3oesAV1oOayGwGcdvWWCQXiQ8WEVBhnmHP65bwLGNPlHWTVZ/UtG3qIZYundrLobauyATGlK1QrOT8S7T7IbN4ckv3voZZrVZy//pifQb9InAtfZG16Zc87ju+HcSQsXG5oWfW8BRrdgi+T3ZAI7DwnN8d0g=
To: Jan Beulich <jbeulich@suse.com>, Olaf Hering <olaf@aepfle.de>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Xen-devel
	<xen-devel@lists.xenproject.org>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
 <06968742-355f-ad37-0681-e51eea256414@suse.com>
 <20210705100228.4947ed4e.olaf@aepfle.de>
 <ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
 <20210705103224.26f3835d.olaf@aepfle.de>
 <1e2a3967-06e5-75ec-3aa5-1f39b6700e63@suse.com>
 <20210705112548.22ae6d20.olaf@aepfle.de>
 <5e4986ad-d3ec-18af-b1ea-ccbce57a70ff@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
Message-ID: <f4301654-49c1-8b9a-a6c4-2b40d06641ae@citrix.com>
Date: Mon, 5 Jul 2021 11:06:43 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <5e4986ad-d3ec-18af-b1ea-ccbce57a70ff@suse.com>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0097.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:c::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 063d4c7c-3093-42b6-a338-08d93f9c9da8
X-MS-TrafficTypeDiagnostic: BYAPR03MB4245:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4245E033A3B7E2D4475F68C6BA1C9@BYAPR03MB4245.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: HgLc8G0W7P2qK0BxA8MnJA8fwIHuPTQZna+HkSajNHj7QMNSC4bGLhFUBMlQvZWjMt4JocrWScZdktsyULQ0fXJp1Exzf17a3C78FKo4NcX5/Y7j2fydX6264WAoWHEgTY3gDDI6upTGapUsrWvp+Su1DzjCkqmk/hokLkzqVSp4TZ7frFzai/IzVP3BKxSs6X/uCd4HgWchv/iksYwaiUgI7yByEq9+9rok/McSNfpmr4ZeLGy6sUEVm5GepRc4w8e+QNQDGYRya0MWP/IHWhcO2R6WRfwZkyv7yY3PYvYDWO4GNJXSyGAmrbe5FGcu2PvVmPax21xZhdZYT1mBqgLPx1jhupRW8Isd8kOJBUm0+7IldjBxWo+sb1HR/GopXts91aWDokZof5I8UjIWCX1v3o6cDatO+eLQXHugR+aTmEGtQ7DZFK9GS2nIemXrQhp38ZPQLA/Gu9H+iiAN4H6xmPLan0a1zTzUnRnlwLVlg4DZuFeuf7FU5krVRczOQFf0T3jBhuYQ2wDF0ASGYpa0Teq47du4ziXVR2rf+brzisACS92nhtYbPVJuebukR79zn5GWez+MCX3hQoLoW00dG2kdGU1EbP6RhILoMT67J6kzJeyAGNNVpRxu1d6IzB0uNMClJl4mueIURm04r1SK7PnQte/yOPASmrmmxY8RRZO+gPeoi6xcsK6ZIF9nG0NSzngMhtYLyzmlAQn7KD6WqjaaLkJsvFekGVcY5bk=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(136003)(376002)(366004)(396003)(4326008)(66556008)(66476007)(478600001)(66946007)(110136005)(86362001)(6666004)(956004)(2616005)(38100700002)(316002)(16576012)(8936002)(16526019)(83380400001)(2906002)(8676002)(53546011)(31696002)(6486002)(31686004)(26005)(54906003)(36756003)(5660300002)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?M4ygjH277D/R5Ce4gMaomhJWmRSP/EFPW2txTVTmH2kTM6SizzTWpbf/?=
 =?Windows-1252?Q?ZzR8+Pa2Oek2eAE+cKKhNcha0u/CBbZNxRiYZUH0+rEAeFWJtmtYonFT?=
 =?Windows-1252?Q?flmpuSYPNpeA6GBySZDMlId29vGnLipIes7wpkXctlCj8beBpZZMEUk6?=
 =?Windows-1252?Q?YsvWqVlOpDPmvducZgPBriaPT31fKHHweKNR3R4iHrs8lqesiJWg8xpO?=
 =?Windows-1252?Q?HCfRhyZxtEqGxOpP3UZX1mIAv4NZHuMF4K+UJJ0iR2xgrAKFMJ5Z8+8+?=
 =?Windows-1252?Q?cXFPtzlFOGwlu1al5EypH4EZJivs7Ygj+IrlYAJsT8KB0BT/vxnxgWzb?=
 =?Windows-1252?Q?U0TMxLBVvf9RVTWqJM1LMmptq1+e+bJirogrNHH9WPEudeahKr1F+wpF?=
 =?Windows-1252?Q?LswlVxFsHJWIhrgSRcUfGN/krJoNneiKacCu+7Gjke19vDf4gXUZs/sR?=
 =?Windows-1252?Q?k8ZZ2zyQFt/JK0q4PJX/kibuLRHSWDokr77MnmxUptlbcd/ul8/hBo6O?=
 =?Windows-1252?Q?pqIVYtryTSbrstPxNlXopLASxHpfv7PYbU4sbkdwIOVSLKPE1wY45GV7?=
 =?Windows-1252?Q?zhikuobjQOaSbxLP78+6VaFzSTFW+PuUIBcCpDEE4h8av7BSLNUyF6qC?=
 =?Windows-1252?Q?ZuDW4FxNAiTWsaQEH+GOzVJIBvaEDKgl5kZFAWVhGmmuQGv54Zbc2P/h?=
 =?Windows-1252?Q?SKtSQqzhZ0fOCh13OFituGEFaBywM2PP7H/nhcmRL8YPeQ1EtxZS0YEu?=
 =?Windows-1252?Q?/wLcJJtb+kxbZiI1DrPn+Z5ZUc/h5uPOkDADyAmruLCECp9qgDgR49KA?=
 =?Windows-1252?Q?LpPfHuyxlQ9eGN4YF6om7IZXhTHMt/aQhkj6WNTkLdgJXVBBfIcB5Fcc?=
 =?Windows-1252?Q?aHhZUWDTbWnGT3afvcJyeTwGF3zUXT4ig1tJx+otaQsXjZJiLFdtDoMI?=
 =?Windows-1252?Q?Bk2Jpw2E8pAuHqrj97UkZkRL5q2GQbvwBYaZMWfBtHMfOvE8KTTcURpJ?=
 =?Windows-1252?Q?0M/0N65zlC83mbR/CEfNaztkGDLGQfp8wMaD45PxhSrigxRa/debuYNr?=
 =?Windows-1252?Q?7Kht1/FJidHFmtVCfb/vMyQvzA9sb6KrlSuPOtvt4OX0EHzGdiIf90hh?=
 =?Windows-1252?Q?K3sE1lPj5fvr+B8pqF+wwg81xnZ2DcwnUk7HhSXmPdgGPxv0f/iBjHs2?=
 =?Windows-1252?Q?pzLyODU5MY3DepBi9Cl5W+rHaTj10oQXNFMFJkPDwe4BYnU2ygcDCptt?=
 =?Windows-1252?Q?cSqruudRs1pmQ3MzuACZQlY+4j+ZHnhejYrbwCL0QJeeaNhdzfqL588g?=
 =?Windows-1252?Q?flB96SO0mYK1vLUUFLPcI8YHdU5p8EZv15W0spM70O9VIJY+jR383Ty1?=
 =?Windows-1252?Q?PSFUMwyifyprbngUa1FrrrfSu5TJOQzgyCklYFVSNqNJiUdq2xgzaWja?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 063d4c7c-3093-42b6-a338-08d93f9c9da8
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:06:54.3327
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: BPNq34/7jiz8T4FZimfmhBxYoLslPBKTFFWikqtYANUbmamnVAyhv43IjTr3fqXhS7XtzoeqEJXh3jH5pt43kO0GuCt2dYnNnydxt9XRJC4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4245
X-OriginatorOrg: citrix.com

On 05/07/2021 10:31, Jan Beulich wrote:
> On 05.07.2021 11:25, Olaf Hering wrote:
>> Am Mon, 5 Jul 2021 11:19:59 +0200
>> schrieb Jan Beulich <jbeulich@suse.com>:
>>
>>> "The interface" being which one? The tool stack can map the guest's
>>> grant table, so it is in the position to find out about all grants
>>> without further hypervisor help.
>> The interface means the code behind verify_frames.
>>
>> If there are indeed ways to query which pages belong to grants, how woul=
d the toolstack need to do that?
> Map the grant table of the guest and walk it, recording any MFN for
> which at least one valid r/w grant exists.

That doesn't help - Its still racy with in-flight IO.=A0 Also with updates
from Xen such as the wallclocks.

The only way to fix the IO problem is to disconnect the blk/net rings
before doing the final sweep for frames, but that clobbers any ability
to restart the VM on the source side if things go wrong at the destination.

I don't have an answer at all for the vcpu info frames.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:10:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:10:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150062.277513 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LYd-0005if-1N; Mon, 05 Jul 2021 10:10:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150062.277513; Mon, 05 Jul 2021 10:10:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LYc-0005iY-UQ; Mon, 05 Jul 2021 10:10:30 +0000
Received: by outflank-mailman (input) for mailman id 150062;
 Mon, 05 Jul 2021 10:10:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LYc-0005iS-60
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:10:30 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 392cffc5-dd79-11eb-8441-12813bfff9fa;
 Mon, 05 Jul 2021 10:10:29 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 392cffc5-dd79-11eb-8441-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625479829;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=q78QIUoA7VlmEij5JowzrPOe2BnFLm5XQRvTXXSlPd8=;
  b=VWbRofk5Z8wUuyKM4QPo+T3Kxmktq1e/g1vn5UjSiYct5aUN4ULlwPrx
   JW/e2jmoG1xvLUqJ3rXQPnVkz6zLkj7c8ovU4sn/hUryfK993pAVpc/pB
   I+m9dQap6DXEnMKsT9fRgNQdPOvRe6aUKK+VEaHs4LxLxl4p83k55MIHA
   c=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 6pJXLkKwMTQdcKmN/B4CG/qgE5tJoR2os4hOBPbSbLjUYKHlP5oBCMr7gW40+oA767JrP599jj
 All81qetr3tvfvuBymzUbvlXYcTs1lQ9P9ujP2Evc+J73cvqvxcmJ7tT8EXsisXeNLzYXzhHN+
 pG/VcmNSPxCQ/qYdCs8EsAd0rXr9lRixl43b29fiiPc36sudZm+kAdG+xg0hOc3dK147KRmo6q
 MEYySXnRGcoHDLVov/ICMisVA5PzgqyRZcPxaRH57puOsHDheC2LO8conPj/hLEB5wHvKj1Cjt
 OuA=
X-SBRS: 5.1
X-MesageID: 47945855
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:yzrV9Kg7zW7k8wHT7fiTPJajiXBQXzd13DAbv31ZSRFFG/FwyP
 rBoB1L73DJYWgqNE3I+erhBEGBKUmskaKdkrNhQ4tKOzOWx1dATbsSkbcKpgeAJ8SQzJ8n6U
 4NSdkZNDS0NykGsS+Y2njLLz9D+qj+zEnAv463pB0BPGIaCdAV0+46MHf9LqQffng0OXNTLu
 vk2iMonUvERZ1aVLXAOpFTNNKz1+Ej2aiWLiIuNloC0k2jnDmo4Ln1H1yx2QofaSpGxfMH/X
 LemwL0y62/u7XjoyWsllP73tBzop/M29FDDMuDhow8LSjtsB+hYMBEV6eZtD44jemz4BIBkc
 XKoT0nI8NvgkmhMF2dkF/I4U3NwTwu43jtxRuzmn34u/H0Qzo8Fo5omZ9ZWgGx0TtjgPhMlI
 Zwm06JvZteCh3N2A7n4cLTah1snk2o5VI/jO8oiWBFW4d2Us4TkWUmxjIQLH48JlO81Gh+e9
 MeSv00pcwmMW9yVkqp+1WGm7eXLy0O9n7seDl2hiSXuwIm1kyRgXFonPD3pU1wgq7VfaM0rN
 gsAp4Y442mcfVmJJ6VJN1xDPdfWVa9DS4lDgqpUBza/fY8SgPwQtjMke4I2N0=
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47945855"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dKp6XM3hGw6Lg36PrNAqUZ9xCiWJgfPqjxzFVOv6fu75SmR8fy1L51MX3K+OkA5sU8vCvFuduag/ALHz0aCKyxIN6fE/H4J7UpHQYMxhAKKig7sN0jCf5lXHzCa1Va/QuY+Bz7CIs++T49YRcESpzzC/c7dHjgGNtcEdL8BNGqPTbAW0XbgFdOY3eV0T6uhktzBFbErbS88ofxhXyKcgMVh0cmsabrmCfjQuiYlz2orTawtDlMEaiU5DanzNdPjSz2q9ftsxzlbPj+uSJsUwsBbf8UUL3fIBtFrDgoJXbn1EW64WyYFnV1OQ2lEUVjDXKgjYZxVV0d8rYpTFOgxPjw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=xnY+PPET+F2zt6L6l2G5TzAbdbu8ra6zr0Lt9KHC+Ac=;
 b=VvM9VEoOEC8jcNLIWi2UDMbp/3DBy34kho30+6X5RN6fIxZSCVCiT58vFb5Pn/RUxX/WlRwdMDsYZEoZZUPoKV2FYI7g78KE4EOnzu6Wauby3YGxLH50ah49tCh2G5B1OZYZVrnjGB641F6ca5mNyEiUD5nHOx/ycSsR/VvzNfbAnI2GTdwEFNoGNVtyplOY/JgEKpdyQadt49sbP0WCCR8P4g10T2/v8U81gYmyC+lSbMVCTFVvxGgBJ9v/mhsj5n3qX/5e6awQ5KaEO2PaMu9qx/uGqN6v3wXF3xAD2rH04JAU6SrmiTXtq/A6jJzzHLSquW/zjM0HDEl5zQRY2Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=xnY+PPET+F2zt6L6l2G5TzAbdbu8ra6zr0Lt9KHC+Ac=;
 b=G+ii/3tap9BMy7MsenBgEK5WtDZalcP5dXC66yj3Fb4ACxSNv8eG0q6berk206F0OWvAdMmC+0d8J3na7o7k4kaxGl6eikqJr5k9SXxVTgdHFtAhUfIluy8HV3vX5LuGLaRrf+c8rjLD3mXhdKe3LrpibtOFS4T9gFuViO5zetQ=
To: Olaf Hering <olaf@aepfle.de>, =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-7-olaf@aepfle.de> <YN88m0tvHKxF7+NI@mail-itl>
 <20210705100706.48b4a1ef.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 06/40] tools: fix Python3.4 TypeError in format
 string
Message-ID: <e59ee963-7752-91d1-ec07-90e360865cde@citrix.com>
Date: Mon, 5 Jul 2021 11:10:18 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705100706.48b4a1ef.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0278.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a1::26) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fc916899-2d18-4eba-d51f-08d93f9d1b91
X-MS-TrafficTypeDiagnostic: BYAPR03MB4245:
X-Microsoft-Antispam-PRVS: <BYAPR03MB424568A0AEC4BFA8F874ADDEBA1C9@BYAPR03MB4245.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:669;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: xqvT2Vj7wjrPsSeVTfFVnmVkSgZiawo94XACtpnHUD96EHWwUYNL469wYoeVEBPPIDriE9kK/dR4x7gn85VDqe9p7Kch9SqcghKsNW00vdsFVqXWecroXRDVGlPx6FSvuCOoznuNCArdX6N38wi7TEZo7RjoeXgDLw79Yi2AN/SGbE4hUr61doprTMYgQ0Mi6K4685RqQIbeHTn6NOqAkbfkOBnkofcsVmK4+EEvWERYcfBDpPLbkzBhQ1PSFtJOkdWPBalvnHfJPa0z1BXK4CKkAxkNStRsJyuGNL7XRK7fwBrcPDIft6CsNmE2lmi1DTfSZgExxc+h6SYqkChfA7e+Jv0cCg+yG7v2adK7QfMLdGswJD0j1cyZcT0NfUODCB5tSfUNhpnoEzRoz90voPnd242rjv9jyfQkFxI4p+ukJ7eiH6+RDwE7YYS2xgH44PjmzDGUcaeKy5PnOv23v500cVPkjV/H56j8UZzLsgqe+02VOu0VRo0E6teLy8V4QSrc2jjdYgmX8v78kM/EWwTsrv+D7OolkmMAxlDshjQkbIT9uBXt/ElZQ4BKlY5odDg8Tl69TfRTIr/tIl1ZwO4pI84ADDy699jEtB3WsrSdmVj/iMcp3ubfvGfj0Md0JrVCZyyI+XHAeKOpVEQYNv1en0UTeW8IEEeLFu9142zQ1F3DaQW3gbCkPDktKIR95uxlinLgJ/mtxtMGTorxLBIzVtgyT8XDtiaZTYttENs=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(136003)(376002)(366004)(396003)(4326008)(66556008)(66476007)(478600001)(66946007)(110136005)(86362001)(6666004)(956004)(2616005)(38100700002)(316002)(16576012)(8936002)(16526019)(2906002)(8676002)(53546011)(31696002)(6486002)(31686004)(26005)(4744005)(54906003)(36756003)(5660300002)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?fu5Hiu4yehX8wH9Wf3ThHI/hTWseV4SptS9QoNp?=
X-MS-Exchange-CrossTenant-Network-Message-Id: fc916899-2d18-4eba-d51f-08d93f9d1b91
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:10:25.6302
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RnjfRPDCHgdHDItahXbcFcdlwF1svcuzxhMso2ieqF9zQhCVsSaY1Zf82Fttk+Ajbnk6xuCTYiHZfFiHmyjq+NZyVTiWdAV/WTIZymCszq0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4245
X-OriginatorOrg: citrix.com

On 05/07/2021 09:07, Olaf Hering wrote:
> Am Fri, 2 Jul 2021 18:19:39 +0200
> schrieb Marek Marczykowski-G=C3=B3recki <marmarek@invisiblethingslab.com>=
:
>
>> Why bytes()? Encode does already return bytes type.
> You are right, this works as well:
>   i =3D 123
>   b =3D ("str/%x" % (i, )).encode('utf-8')
>
> Any preference regarding the "encoding"? I picked UTF8, but 'ascii' might=
 be more correct in this context. In practice it may not matter.

I suspect you're right and it doesn't matter, but ascii feels like a
safer option.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:26:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:26:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150068.277525 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LoJ-0007DU-A1; Mon, 05 Jul 2021 10:26:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150068.277525; Mon, 05 Jul 2021 10:26:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0LoJ-0007DN-74; Mon, 05 Jul 2021 10:26:43 +0000
Received: by outflank-mailman (input) for mailman id 150068;
 Mon, 05 Jul 2021 10:26:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0LoI-0007DH-GI
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:26:42 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7cbed756-dd7b-11eb-8441-12813bfff9fa;
 Mon, 05 Jul 2021 10:26:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7cbed756-dd7b-11eb-8441-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625480801;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=4kbApuj5NGTzEu7+bawpz+6DL+1+MSwUB5lOFyJYLMc=;
  b=dI1WXW9YDUbWE1KB+8fPxLYBgtXwBJJj2Z8cHi0yAY5ASdOiwyZwvKUo
   BAIpNaf9AAO1acZ4CtfG5wuq1AlsXzQINkciF0nsz9tIZ1QWoLSUaeZun
   ItxSaGPK8hX5hvpLbanRjwTiK6csT/K409J/vsyvHTeeCjbNxY5pf3GI+
   w=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 939O6f42u88o3HqymiMS/n5catIRZo8ync97JO9hFpz62CRa2nxOucz9WKo2AOFCdmRlfDPX7G
 skOiSmatjcTeblHSnSJWMVI9uaqFupIGYrIkWFJPNGr82513D2ctwjRNT65HcODaA8Zl8bHrbU
 M8pCkNWC9Nng/AFjJjvT+IMn/sbX2dSEZ354D5/HG405mMenzbXoYQbDcRgUy1kKaoiTqwSckw
 4qwbUg+vxhAGzxqsVbv5rZtfsewy2z2yG0/lR7xyX0/qcapsZNIXLSZ8lWMEkCaoUShqbfZSoI
 DLk=
X-SBRS: 5.1
X-MesageID: 47573804
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:XEMBj6DyUKXXJvblHemi55DYdb4zR+YMi2TDtnocdfUxSKelfq
 +V88jzuSWbtN9yYhEdcKG7WZVoKEm0nfQZ3WB7B8bAYOCJghrMEKhSqafk3j38C2nf24dmpM
 NdmnFFeb/NMWQ=
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47573804"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=X4OFsTj4H4arsur/22GsgmrYPudbtVeRiySAzeLDMqVZebCE+3IV3jY/xim7hRM6oFH3GLrl+TmSU5bAgKvnEgqaUHROX7gs4+EAwS1cUQBN3NdQzS/2o8GQ+qqxYCdORcUDmNCoqwjwipn+VwOmq81n3kyiCbzNhzSNJ0hX1aHZEqPyct0CQFpF9M/vAbYo/pZPLkaI7kcDCt9MCNkumPYxV7aNHed8GYX+NGZFL29JJ29d71iimX5KDidzLYNu6hlbGmhs7dBdfIzYZEZGNtc1Q7CO+Hv66nM91PfAk8U8UzJsVfFQg2Ea8023/C0zz+VCrD/4/c5M5zFzhbJx+A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=xtycx29JKBGCYECyiI+oR4jzzwt4Bm61OsfO7gVru4Q=;
 b=NF3R8i5/vUyeTa4dD+vWdvebDdOl+2KvjNmzAD8+Hwt0KS8oQfsLydtaOj1JsP+xYOXZWiufhX6RTOuOFIZIbFg+7Gcyo4SXPWCH+uBnZgGIyG2kfPUK0+hLmbwQ4Q7jnxJFraF9f9hurRVwNGaOPdkD7Q22EazAuSRoMbpmzqujCALdivswPgrqMgacmXlgAD2mJboXY1xrWlQdrBYXSJ0xYKd1ekYYAsYhKUah/Ul4OsGY4RUMXkdssNK+p7um+cPaHeMMgaQ7FcgqoUrKWt4C6acad9f/Rrv3cFxTlX+jUXPySc0t2OB1BgqKet3K0lymiccPTW0mB9eRDPMp1A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=xtycx29JKBGCYECyiI+oR4jzzwt4Bm61OsfO7gVru4Q=;
 b=GdDsYlZ6rKdM6iN5WmNKulugoHSZ6jQXIlsAyZWs1rqJkoBl61+HmOvuvBtK7m9WM7TUdPeAAd3id+PHW2ddQ94ww7QDh2LewDLjDNVd29Dcr2Lc9hIMgCIrJLUrDK77QxcBgAjJo2FapN5RS2p6aje7NJu+CkIB3mqxF41imaU=
Subject: Re: [PATCH] tools/libxenguest: Fix max_extd_leaf calculation for
 legacy restore
To: Olaf Hering <olaf@aepfle.de>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Jan Beulich
	<JBeulich@suse.com>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
	Wei Liu <wl@xen.org>, Ian Jackson <iwj@xenproject.org>
References: <20210702190334.31271-1-andrew.cooper3@citrix.com>
 <20210705093514.45be9be8.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <f14ad095-c5f3-68ba-ecc3-5a724fc78705@citrix.com>
Date: Mon, 5 Jul 2021 11:26:29 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705093514.45be9be8.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0385.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18f::12) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: cb9fba98-18ca-423b-61c7-08d93f9f5dfe
X-MS-TrafficTypeDiagnostic: BYAPR03MB4245:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB4245B4853FCBA9FCFD07E6A1BA1C9@BYAPR03MB4245.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: wzF+kRBczHPqaaFuCJoACAgJlupjrn3byssOHbYJBycREF73ID6O7KWvh2+KVFHrtdh43rw4IToWm71VFkOhCU49L6dLOKY3WySRxjGFFB9N211pNcgQFcckH4YJuG5rZynRpRuNC1hPAwwYE0WYJHvpRQ0jMyb6SptzsaLJdwamJjSkAfqk7zon3NkFGjqbA6t4lLgSvYjGSK94vR6vsicTCK8OEg87hhbuY+Fq1pqTi4W1khb8f/o3H/+Q7IUgbKUqMUMZSz4fxbusdHTlIcWTbO9PXlOVJjGcs9VBK1Dfqb/Q0p3G0uxzy4wmMLB9XJkKdMTlu9Wt5bZYesCYvjzd2kywiAhc1EpepqR797smeTqU6n5DPugiWQ1P+Pyr37rlk2AoD85Ch0JpDN4tX5FAVkU4f83n1DaX6h6ZoT5IDX4ks6cgXBKuZyi4EBTmqh4vprWJDT5ixdx/KfqPIz/uKv0uaD0BIWiN3RyFBPoupAKO8JU4eTUJlgQVqGmMeVSl9lsKtFfbW6xzu7Yukz8xnyts5LF6yzF9NAFt9q3rSU4msUUBWUO1Quywyth6NmGC43pie/YUlankgSqlw4HWKBHlk5L9dYnQg7BlL0WwFcTrMxdAbQ5hT8JYtWmdaUf4ohMy4x8M3XWVB/HInA6lnkjZ4HgFAh3UjzMnT6w2x22E8lNjUIWYgi/TCC3sFQepHUh8Ap75iZxLz0BHfhwXac9qPaG+m/Tek3qzNwM=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(366004)(136003)(376002)(39860400002)(2906002)(83380400001)(8676002)(53546011)(31696002)(8936002)(16526019)(4744005)(54906003)(186003)(36756003)(5660300002)(6486002)(31686004)(26005)(956004)(86362001)(6666004)(66556008)(66476007)(4326008)(478600001)(66946007)(316002)(16576012)(6916009)(2616005)(38100700002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?mVMOiy3/1PhNQqZsI69NcoS3KVSfvqm8THGEwwVekrC7dOXBq/8wxZHT?=
 =?Windows-1252?Q?6AGMilxNI83/AR7E+ZdtTsQYUQtSaVe3P54CQ+1jEA2Jc9K6ZRzn+KW/?=
 =?Windows-1252?Q?f37MDzACKdWyMq1LQFCbT7JZOnYHDfxbKxynFpeX8cNtw9cue4q+54nt?=
 =?Windows-1252?Q?DY1NJKUuK6RBZ3/7ooecPQLs7Musndk13LRCLcCooXRHNin3kgXnEDu8?=
 =?Windows-1252?Q?kJq7xuFFqwoYHYSYRVZBOzwHzqx7b/x/Spvqf1FKdTadFX0kkjgFMHij?=
 =?Windows-1252?Q?nTZBDX3fdJcL9fvTfJCE+OKxx51enn382U+UD/vh2DoTNSMmtOhK5AS3?=
 =?Windows-1252?Q?TFvhsVu1f4leopmu1FjJa9OrYJJ9AA4bFmKac3146bebw65q6lNIv74H?=
 =?Windows-1252?Q?nzusWaFNSfvUkpuvGytXZc+ZnW2iZAisQqQDlHiHIAJlQydbB7ihiAcm?=
 =?Windows-1252?Q?SmRJ/WpJIxqHsstbSFRFZpBNOL6A4Xzr8viMyTFQwCenMDA0hv0ShQ6G?=
 =?Windows-1252?Q?ViQioW/3eOwUMcx2du0SU7z+sDmvu1KuLJcLC/wAPHpLnQtVke+f4ToW?=
 =?Windows-1252?Q?tuwIew27As3NxZ85bkJhFM3pqNe2AmSQZhHhRtZt0kznusoKhbxKIKQY?=
 =?Windows-1252?Q?FsmZUML26WMd7rgxTp1hPtBxIu//cQRO9GNXFmYQomYrTLBaVsXb52n+?=
 =?Windows-1252?Q?WqX9xkkYn+mbTR1bVu+aWGTizUjlkXqBpZkL4JSZiRs0Ip1cW82nRoPk?=
 =?Windows-1252?Q?O3cGHPB40rFbyO3fLMXZR7Qf0mxDJrWY9uDXAhd+VMOqHU4yZZcUpvK9?=
 =?Windows-1252?Q?nn+O22ceCJF7Dl4V80+bV+kxjKRx7QKNZz1Kp3W4bWrFP0mAylPmRGaW?=
 =?Windows-1252?Q?UlxF0v6FRw3S5ucbce/bqthSc1XpbTkrr5Clj6iexfle/77Sl/vxj8K1?=
 =?Windows-1252?Q?zV2de6gLHZacDaPnTlOw6cJKAl/i17FakJBZv692G4iR0izPBmgQpCEL?=
 =?Windows-1252?Q?0QKYzRqvQ2thMgLxsIygvXduJONYSraJb1v/8q4EDOYHb+oHf78WpnjZ?=
 =?Windows-1252?Q?iqMTm/+M+lI7taFCbXwYPJe9S3i3BNl/iZ2XFj1Hqu1npuEA1jjGYacc?=
 =?Windows-1252?Q?lakSBuoWkNQBIRVvP7GGihyeYfBQnYujYOLdRiX3m7LLsM5MKM209zD2?=
 =?Windows-1252?Q?DWR8E9WvdMx88BUgs7OiJQNpfAu4LAbobb0zAGbszt078daEPgzEH/19?=
 =?Windows-1252?Q?3k44hytG5F+TpLyncqyL5ezOd7acWklS9xTSPlzCvbD0Qqo6eG5yAAIb?=
 =?Windows-1252?Q?4QjHj8n2ryJxarurJhT3ohFOIzueX46Qm+YaXIfi8vhr0VqUUTI0HVrO?=
 =?Windows-1252?Q?9JtA7Rfn5S15sxPtotVNdKVWMHcYzTWfdpMaFVezoZC0sIKItexrpO4M?=
X-MS-Exchange-CrossTenant-Network-Message-Id: cb9fba98-18ca-423b-61c7-08d93f9f5dfe
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:26:35.9987
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: bE9O93zGMUc3f1CDWSCGUobOmrUsAITbkqIs3ZI5/rjRHpIo9h2rJ+aT7NCby+cNYx9k8xl+oTod3qC0jkDb4cx73EEwCF8PD9NuTNid6+g=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4245
X-OriginatorOrg: citrix.com

On 05/07/2021 08:35, Olaf Hering wrote:
> Am Fri, 2 Jul 2021 20:03:34 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> Fixes: 34990446ca91 ("libxl: don't ignore the return value from xc_cpuid_apply_policy")
> I think it fixes 111c8c33a8a18588f3da3c5dbb7f5c63ddb98ce5 ("x86/cpuid: do not expand max leaves on restore"), 34990446ca91 just revealed the bug?

Urgh... That's what I intended to write here. I'll fix up.

> Either way, this new variant is what I had tested last week. But with a trailing "u" for the constant. This detail may not make a difference in practice.

The trailing u doesn't matter in this case. Furthermore, the way min()
is written, the compiler will object if it were to be wrong.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:36:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:36:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150075.277536 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Lxk-0000H3-Bu; Mon, 05 Jul 2021 10:36:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150075.277536; Mon, 05 Jul 2021 10:36:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Lxk-0000Gu-8y; Mon, 05 Jul 2021 10:36:28 +0000
Received: by outflank-mailman (input) for mailman id 150075;
 Mon, 05 Jul 2021 10:36:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Lxi-0000Gm-KX
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:36:26 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2bf36da5-c6d8-4bf5-b689-5563d0c6c8e6;
 Mon, 05 Jul 2021 10:36:25 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2107.outbound.protection.outlook.com [104.47.17.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-11-aKa-JLfHNIuexfCe-1UwkQ-1; Mon, 05 Jul 2021 12:36:23 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6176.eurprd04.prod.outlook.com (2603:10a6:803:f6::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 10:36:22 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 10:36:22 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0006.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::11) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 10:36:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2bf36da5-c6d8-4bf5-b689-5563d0c6c8e6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625481384;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=mtCzWCvJajjEEo4vUf4P1VGPydBh2pXvIVqjdjaqRGg=;
	b=P8tTCnak8yhYHxLWdfA1kPxnMNcq4tQ4DcDyBfJl4fO7D1ii8Vnt67CszZCGdoraijSlEp
	LFWoPwmP90rusv6QYmYCytQUhXPis1p2Ruz4LRzX4YAwnHKKqK9Uy/NHoVfancuehrA/c6
	qiF5wj8SLUnZoxCCnoafDeyVI//PjSs=
X-MC-Unique: aKa-JLfHNIuexfCe-1UwkQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ONtv0ruDm2jhst+xEX2fjutqcfNcYgwQc69Rk/VcWxqriP+FXbGatS6pCfV0SNX3jhwTTcZoB/yme0i8XnNJY8bNpMTl4WD/5px46gAfnLIs61+3rFvX/z+PWIC8EMxcaH2WtXmXmjGotn1qoWbkLmMUD3ZxCUelwdGWu1VuKO7JpFJS1j1UI6UW8Qe0JWfJ+EWm2GKv97SZK0DA+tSOhLaQ7Ev5bQRyRHdqoSLkp93pWmZPF6+2E/srsFmnx9Cn2PFZdzDNG70Vh+G9qOE7MZL528zYKSnDPGqtQjItENyIffz70S8Lu6P6GCNN7hAv6OwZbK0itGWxF+qEVufF7Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=aDEIsMLkQL72Ggr9E7dr6K9o9lL1gTynJ5Heyl/v4ZM=;
 b=UKxMEytV4yYG91+5/pJa8LFktuvXNYpThQaWStktXekC4YneEJikTf9o+XUvSKCguxj97QTgx1b5yRMfiAW5/zpR3eY26+HaIkgPOu/hn8AGDVuD7NO0BNqBKUHJ/xRQ79nrEYXngL1/Q82mfsijKd+/tVL29uyvkwUTv2r2hmvI4SBFcBympe4/FKGV5fd4MeXFDO3kv8gietTdiTAnkusrY7R/AvZREdiprq7kYYbkmQRILW3FDMrAfh/aU1OZ14gDpjUyuj4oP3G7vhtn+qiyHVS6nGVyfh6ix/RdshS6bPMmWJEXU82a8UX5GJrVWA7hCQ0C/6oBGgU0/MMYWg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: aepfle.de; dkim=none (message not signed)
 header.d=none;aepfle.de; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] tools/libxenguest: Fix migration's debug option
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Xen-devel <xen-devel@lists.xenproject.org>, Olaf Hering <olaf@aepfle.de>
References: <20210702190342.31319-1-andrew.cooper3@citrix.com>
 <06968742-355f-ad37-0681-e51eea256414@suse.com>
 <20210705100228.4947ed4e.olaf@aepfle.de>
 <ed3ceecf-239f-9bd9-e040-5246c9b49f53@suse.com>
 <20210705103224.26f3835d.olaf@aepfle.de>
 <1e2a3967-06e5-75ec-3aa5-1f39b6700e63@suse.com>
 <20210705112548.22ae6d20.olaf@aepfle.de>
 <5e4986ad-d3ec-18af-b1ea-ccbce57a70ff@suse.com>
 <f4301654-49c1-8b9a-a6c4-2b40d06641ae@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e4b6f75d-5aff-cc41-24f8-9aeb3caf09da@suse.com>
Date: Mon, 5 Jul 2021 12:36:20 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <f4301654-49c1-8b9a-a6c4-2b40d06641ae@citrix.com>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR0P281CA0006.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:15::11) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 39b8e781-35f3-4f06-8596-08d93fa0bb36
X-MS-TrafficTypeDiagnostic: VI1PR04MB6176:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB6176858DA5F29430CCFA086FB31C9@VI1PR04MB6176.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	8C06n86aI3kUJXT951aWaGsou4CSCarTs0cDFdZ7Kry9HBgjVzC+p6avjHE8uA7HP7J7+cEzOTyI6/EgwioiaqqSqvV/f7t7cFoPalkGye+bILddiJTej2mqZfJXmr1YPXmH+iPXDr1yY2W1UoPVt+37aX0mgiujkxWhlGOmgqIx40LlvpD9p03Gk8wugdbGIq8WV6DqGEXMmsK/KRzOmuWMLzoKCJCOn+QFWsDm0WoPfWWpqyq41WfugrBprUiJ6sURbtasPMbOPHbGYfvkeul8kQfqWUtg5wEaAUPWPal6tQNi9dqYRdnP22tyhXoK/vuGgj82zbO32EwYZ3Ai4UOE+D4Qz+Vdij7m6bIcpcRARqXlz8cd3CxQrBfbvlNfzTCyr1uqvLfzim0iNQrzfofNicGLdT9kJI4Qg9SMLN0wCW2eBh4IE0LRp2KQPinGHDSV+hA5FNTajoIT/JDFvim+23Q8KrfZEBCBaB1u2sx9EsAi3uj3/4c9aGnSJk1++862sNcuX/maAYPwWKyLC8miXMHrpw/Zu4iC69H6Z0KI8QQ/XT1e6jCQ/z7fwRBQKkCPBc+NwU2AtBKPWhQnbn4qF3yjpsDSwGAlK7sCAX6/nYpeB1OIASHV/rIN1+CjCnTxargTV49ztk/D7BbiY5cf8bIpU29HbtX3qbdZWrYGoLTgK5yI7gjQa71GC6G5rPIaEbRPSp6frt0jy6AnyxshPBYB6tM8FII3cHQOdr8=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(39850400004)(396003)(136003)(376002)(478600001)(66946007)(38100700002)(2616005)(6486002)(956004)(31686004)(2906002)(36756003)(66476007)(26005)(66556008)(8676002)(186003)(16526019)(8936002)(5660300002)(86362001)(6916009)(4326008)(53546011)(31696002)(83380400001)(316002)(54906003)(16576012)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?e/Juk4y7+BOjp13cXhHIwVu9ZDbuMp18kuoQR0cTCQe2R/9/lByYfw8zEkV7?=
 =?us-ascii?Q?q9wEZdcdE1UdVvqH9AeqMT1YaGNeMndLTBSQgJR7W+RSDF75Z/ZDY3V26FMA?=
 =?us-ascii?Q?PLP/9Tsl4sSzpBTBVJz599HLKigSe3+Vor6UyU0Z0kIUY1/oLkBtWQ3IADGU?=
 =?us-ascii?Q?m6IffpkMxmkQAul9JFIqf8cXIshXjs9lKk3YEZV2b/1TI9CElDOqkcye6oxs?=
 =?us-ascii?Q?FjVQOhygdvAmnmwe5elCdxLqlGccEiEscqpUi/eEMOOXUf0bd79bFAGX66k4?=
 =?us-ascii?Q?LjJV9jdMpDxEUn/MtFtGKxjlMHEosI5L3fSNhNm6O69v1bFrvPpRlkcUZzIl?=
 =?us-ascii?Q?WMgpZwyOr1u4cw5KVO4XpDrzEg61/Zi7cFU+hNuuo5bakY/OfViUCx1dIaiw?=
 =?us-ascii?Q?dINnpuYEVBnlXGGQETUmCYHNCFq6EaysVAhLbaE7k+WiC396UkCpEueZbZ1A?=
 =?us-ascii?Q?8j+SEaQDgdrU3iO14BkfUKOyAbHv6vJpRsVV9oAWaTRTpDV1ardcDQ7KpgTh?=
 =?us-ascii?Q?oFqcxA22EqBmQ3ZANMAcr+qdKvejdLA8z54zXtfGhELhYJy8kMURhh2NOcZU?=
 =?us-ascii?Q?+hbKXUnw8mOv/UeZlf2Ds+oXoJzJkR4w7fw7B6Pe90iGz+qAFmA1XFjT/v+5?=
 =?us-ascii?Q?0uuqGKM1rOvXMPmG6w3vGIxl/Vm8GznIib7/ZP+bA41WChy7aLaJ2gSIW+4q?=
 =?us-ascii?Q?MTbJHiaGDCMexhzOhHt3bDq68LlbGYv5cnL0MLj2uz1CGGSAES/lG4b+19kz?=
 =?us-ascii?Q?itI2ctv5IjkG3gwa+f2VnTTch6DF2F3nO3Xclu3gEYq+SGJBYxPPQpRmH5eM?=
 =?us-ascii?Q?pm9h9RoqxRgQv0tOhhpGtkJMm/zgHuCU/Yna2JxTfhrdaEtn0TtgXg1jCzdO?=
 =?us-ascii?Q?7eDu3VSiJXDQScX3la5YKPZGeRzRfUx1txw/G0nd18iejo8aDRooD/AVd8Bc?=
 =?us-ascii?Q?kCjLSq78+gMf8G+cUJDuxCwXAmq438Sz2yOtWoWex4dPCbcGHaFBJR2x8gn5?=
 =?us-ascii?Q?su2ZHq2LdIVoqVMMAjMULrAHQW67t7UKhcRTDjXYWAswAdlqgg2osEEClfAH?=
 =?us-ascii?Q?y33fJ68fiIiq13fm8k04Xtr08iZxD9XJBCgzgaNLAjknW+j5NZH2Id5dZqH/?=
 =?us-ascii?Q?FfRTVE1QEHqcVcqI7bWDTILubEeclwBCEQ6x4EX9HF2s8i9YnDSqchUx9a4S?=
 =?us-ascii?Q?ghNbMM1owAoHN0B9xbOO1tKNO+trSenZQkGl4AKwTzJlIXmAaYHvFqjh5zIq?=
 =?us-ascii?Q?VN/fpeVwNIycbsNiywSecR4bKclDsdkmDFSrfLS5FgVSZbNPtoPo64RIgtD0?=
 =?us-ascii?Q?HznIvrNSbNWbAz7kFVTE3Fpf?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 39b8e781-35f3-4f06-8596-08d93fa0bb36
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:36:21.9124
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: GcMztUMeHx+0PqKccm11Lgj6ISKnVi80vC/PeV3aFHMwTaoiel4V9eVWYu6+sYI5yQghau+Vl7NT83k95VI30w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6176

On 05.07.2021 12:06, Andrew Cooper wrote:
> On 05/07/2021 10:31, Jan Beulich wrote:
>> On 05.07.2021 11:25, Olaf Hering wrote:
>>> Am Mon, 5 Jul 2021 11:19:59 +0200
>>> schrieb Jan Beulich <jbeulich@suse.com>:
>>>
>>>> "The interface" being which one? The tool stack can map the guest's
>>>> grant table, so it is in the position to find out about all grants
>>>> without further hypervisor help.
>>> The interface means the code behind verify_frames.
>>>
>>> If there are indeed ways to query which pages belong to grants, how wou=
ld the toolstack need to do that?
>> Map the grant table of the guest and walk it, recording any MFN for
>> which at least one valid r/w grant exists.
>=20
> That doesn't help - Its still racy with in-flight IO.

Well, I meant the recorded data to be used to simply not verify
those frames.

>=A0 Also with updates from Xen such as the wallclocks.

This doesn't occur for a paused domain, does it?

> The only way to fix the IO problem is to disconnect the blk/net rings
> before doing the final sweep for frames, but that clobbers any ability
> to restart the VM on the source side if things go wrong at the destinatio=
n.
>=20
> I don't have an answer at all for the vcpu info frames.

Yeah, they fall in the same category as the FIFO control pages, as
they contain evtchn_{pending_sel,upcall_pending}.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:44:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:44:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150081.277547 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0M5l-0001gt-5H; Mon, 05 Jul 2021 10:44:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150081.277547; Mon, 05 Jul 2021 10:44:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0M5l-0001gm-1N; Mon, 05 Jul 2021 10:44:45 +0000
Received: by outflank-mailman (input) for mailman id 150081;
 Mon, 05 Jul 2021 10:44:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0M5j-0001gg-6O
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:44:43 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 00a3a1dc-dd7e-11eb-8443-12813bfff9fa;
 Mon, 05 Jul 2021 10:44:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 00a3a1dc-dd7e-11eb-8443-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625481881;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=WZgoO/N88GXBS4EXddYYKtNt5r8CubHfiMkmIG34IQY=;
  b=SaWXqiEL28e7a/+9ak4td8Ro4K62K+cyS6h4aP/+WryIxolDTIhnNlQ0
   aFcrjhilXcXP6kZO2iZDEjmIcpOINAeF7BaBE9vCAthXDPhHLVJclROUv
   ha9hOcnp3SWJbYZjodQRRoRPTiwlf2S5vvQsvR9lj5Ly1RH1nkaJ7O9TQ
   0=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: aZGOkHAP65Z7TLCZ3y+92o3HukE3WNTpIBNfCSoUw6t4JPqkbXpXj+Sh7L2/Po50EsxSlkfn/V
 FXOM1GvEbbv2pX53raBYmzIiVXKuYktWfD29DxG1zE+jai+rQCivSgeiIgZJ6LPmyAuZRWudU1
 ADGIVz8P0+MNQH5R1yyHY2RVNX/eVkNkQuwbPrO37FIpk2MEcQMbfZOhtxbivIxB2Ihluet55G
 kwGOJPhllk+VLEqR34mfasj2I6n31WVyeIaQ2ghu+/J7soiFsLxSIc9d0GGdGKV440sFpv2tSa
 fPY=
X-SBRS: 5.1
X-MesageID: 47574651
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:YYfz4a4to6hCpMw4nQPXwSOBI+orL9Y04lQ7vn2ZFiY7TiXIra
 yTdaoguCMc6AxxZJkh8erwXZVoMkmsiqKdhrNhQYtKPTOWxVdASbsN0WKM+UyZJ8STzJ876U
 4kSdkFNDSSNykIsS+Z2njALz9I+rDum8rJ9ISuukuFDzsaD52Ihz0JejpzeXcGIjWua6BJdq
 Z0qvA33AZJLh8sH7WG7zQ+LqT+juyOsKijTQ8NBhYh5gXLpTS06ITiGxzd+hsFSTtAzZor7G
 CAymXCl+uemsD+7iWZ+37Y7pxQltek4txfBPaUgsxQDjn3kA6naKloRrXHljEop+OE7kosjb
 D30lgdFvU2z0mUUnC+oBPr1QWl+i0p8WXexViRhmamidDlRRohYvAxxr5xQ1/80Q4Nrdt82K
 VE0yayrJxMFy7Nmyz7+pzhSwxqrEypunAv+NRjz0C3abFuLYO5kLZvuH+8SPw7bWXHAcEcYa
 hT5fjnlbRrmQjwVQGegoEHq+bcLEjaHX+9MwM/U4KuomFrdUtCvjwlLfok7z89HaIGOu15Dt
 v/Q9JVfZF1P4UrhPFGdao8qfXeMB2FffuaChPtHb2gLtBeB07w
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47574651"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XqsGZoKNrtJELy6wMxAjFx4GZm3e1vwXRuVHc/Ouz6u8RhfXbfI5fsEidk209of5Dg+lsFhrRqdPi1XvZqviHzGkk56DXy0ELXpDQkcXIDv7D7lxDtqpuRqte8UnfBmWp+k2vPhk4lCq9f75UNAcY0JhL5oEaXJxUVa0/0koUIfPK2ElyKcxB2F8m1d5xeSIeJoMz3Ljwo7TRXsyoO3/yn6rrb6r0NmlxnWMvHJ5vWc0MzNkaJdLg/+xd3yapgx8HVJOe4hIY4XTtkyZhkFgawXACkLfUMlx2PWbL155Jc1454nj4XpzmB52+ZxrIRHksxgRo1WxolW/2IACFZBG9Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WZgoO/N88GXBS4EXddYYKtNt5r8CubHfiMkmIG34IQY=;
 b=TA0auydDUJTXLmMaGS4kSlxN+kgf5164FH3TPFDvNyzXohjVMPgI4Gk2L+hdwQ01TW5AZu1HgxbTHct4u7lhZi+aqbfEjduRQ3VUOZHPE2GoHycrOAuHdPN+3RBIC0k+rDJm6wbdnQXkL9IehhfzJojLK3WxDjr5BIJcuZSfr9LeB30xo4AqFiwdqLneE5cbvaWz9bjLqtwvFhRzTPZKtGOR0/oh3aesHqw6htWhR1JDAvyWQaHzAz1rfx5CyKuEdOWRLdQ+3xhD2sKgfYaXAcEN8H2a9XfZoHxMEz7tHnO1yDbK0GxhYKNjEixhrroBEuOLSN5irihBRCYBEYuPOA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WZgoO/N88GXBS4EXddYYKtNt5r8CubHfiMkmIG34IQY=;
 b=Uwp9rmKeAJUGnTBTckYrKyVyi29D1aaCIaUc3N0GOLOlVZnQsjlSo4W4TPCf8rZtIBtuDIdtClwWb5sR5FSft5uz7ayF71dvyfYIntHndc4giVGZcmvhBjS8UcF9Bi2zDGYPwLwZRhKGppz1QE5/SyR6lSMi40XOUeVSITsqDAo=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-16-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 15/40] tools: prepare to allocate saverestore
 arrays once
Message-ID: <644a7a4c-4fab-07be-2e69-2637254de859@citrix.com>
Date: Mon, 5 Jul 2021 11:44:30 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-16-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0376.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a3::28) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5c8151df-3452-4295-17fb-08d93fa1e250
X-MS-TrafficTypeDiagnostic: BY5PR03MB4999:
X-Microsoft-Antispam-PRVS: <BY5PR03MB4999712C2938A9C029098406BA1C9@BY5PR03MB4999.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: VK59J1gdmUNYuqZ6grJJ9qufdllN7yyGqBzQYXJdNHoK/Kno47F1O5YSatg4aFKiJZRfY4Hn5QoqAocHnvKkH9/bE+4bAf8nsVecEyPADYYlT7oAocGgw5QNZNK4a9RaBALR/RvQM+/2V9mjkAbF30B9Ebdvy62s6siq1c+L6fVwAd2oKds0Fku2SoGzqa/RqvVFNFrjevZO7JEuydsrzaUzKkcSEWqoCOdpmY8NggZe1Oqx/6npn5K6i2OBOFR5SIUjHqbFm67mrtJf7jYsjIUl3tcDSFc477p734niM8JaIQ+84yLhALKjwMC6mITJtCi2xjCAofP7j6b19jT6qWApKc3jhxk0vBhnQdKl/auedzSu+IYrQ4g5My3Jvnrumae2z5YLUtw+wzH+JuKx7vTi5652+bIqkoeXpG6X2hoeCxym/Su+33irOU78M1y6LlYlXTiK06tMUNiCz4GwX3cvk4lEkikD2ZwrSWtVSsIgA+E9acKcB+YZ7SKytFHCYu929UbHgtr4EhA1YhsWV+Ve/X7/SBm5paYdNr/YZ2Seeux2HB7nQj56PRPC1KfU5gstfe69IZLQbNWaLipZTgc7pT8VaSYInWQq72JkUdMLPdhxx0dFvkWiRxPb53bZF6gKJC+zGW1a2xu++WbtiBJz5rOGps4a6wyI/GzWPUBD1WrLM9AdS9fQryQLiGPhKh/3lg3lDv4YujGEn0wA8wFGyB5rB4vzT7De0zdC8Zw=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(136003)(396003)(39860400002)(376002)(366004)(16576012)(31696002)(2616005)(8676002)(86362001)(2906002)(16526019)(36756003)(4326008)(54906003)(8936002)(956004)(53546011)(31686004)(83380400001)(38100700002)(186003)(66946007)(5660300002)(66556008)(66476007)(26005)(478600001)(6666004)(316002)(4001150100001)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 5c8151df-3452-4295-17fb-08d93fa1e250
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:44:37.0739
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: wQfLL0Qr7+PU3GC3+KoiKMlSbohfAyy1AODzKxVU6zaxYvUyKBlIwnG4M+yGUZ80ry36Cxqf9CteEHVhWRtp9arhZ6Dpd8+qcD3maDCj4Os=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB4999
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> The hotpath 'send_dirty_pages' is supposed to do just one thing: sending.
> The other end 'handle_page_data' is supposed to do just receiving.
>
> But instead both do other costly work like memory allocations and data mo=
ving.
> Do the allocations once, the array sizes are a compiletime constant.
> Avoid unneeded copying of data by receiving data directly into mapped gue=
st memory.

There is a reason why the logic was written that way, which was good at
the time.=C2=A0 It was so valgrind could spot bugs with the memory handling
in these functions (And it did indeed find many bugs during development).

These days, its ASAN is perhaps the preferred tool, but both depend on
dynamic allocations to figure out the actual size of various objects.


I agree that the repeated alloc/free of same-sized memory regions on
each iteration is a waste.=C2=A0 However, if we are going to fix this by
using one-off allocations, then we want to compensate with logic such as
the call to VALGRIND_MAKE_MEM_UNDEFINED() in flush_batch(), and I think
we still need individual allocations to let the tools work properly.

>
> This patch is just prepartion, subsequent changes will populate the array=
s.
>
> Once all changes are applied, migration of a busy HVM domU changes like t=
hat:
>
> Without this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a209=
63b3 xen_testing):
> 2020-10-29 10:23:10.711+0000: xc: show_transfer_rate: 23663128 bytes + 28=
79563 pages in 55.324905335 sec, 203 MiB/sec: Internal error
> 2020-10-29 10:23:35.115+0000: xc: show_transfer_rate: 16829632 bytes + 20=
97552 pages in 24.401179720 sec, 335 MiB/sec: Internal error
> 2020-10-29 10:23:59.436+0000: xc: show_transfer_rate: 16829032 bytes + 20=
97478 pages in 24.319025928 sec, 336 MiB/sec: Internal error
> 2020-10-29 10:24:23.844+0000: xc: show_transfer_rate: 16829024 bytes + 20=
97477 pages in 24.406992500 sec, 335 MiB/sec: Internal error
> 2020-10-29 10:24:48.292+0000: xc: show_transfer_rate: 16828912 bytes + 20=
97463 pages in 24.446489027 sec, 335 MiB/sec: Internal error
> 2020-10-29 10:25:01.816+0000: xc: show_transfer_rate: 16836080 bytes + 20=
98356 pages in 13.447091818 sec, 609 MiB/sec: Internal error
>
> With this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a20963b=
3 xen_unstable):
> 2020-10-28 21:26:05.074+0000: xc: show_transfer_rate: 23663128 bytes + 28=
79563 pages in 52.564054368 sec, 213 MiB/sec: Internal error
> 2020-10-28 21:26:23.527+0000: xc: show_transfer_rate: 16830040 bytes + 20=
97603 pages in 18.450592015 sec, 444 MiB/sec: Internal error
> 2020-10-28 21:26:41.926+0000: xc: show_transfer_rate: 16830944 bytes + 20=
97717 pages in 18.397862306 sec, 445 MiB/sec: Internal error
> 2020-10-28 21:27:00.339+0000: xc: show_transfer_rate: 16829176 bytes + 20=
97498 pages in 18.411973339 sec, 445 MiB/sec: Internal error
> 2020-10-28 21:27:18.643+0000: xc: show_transfer_rate: 16828592 bytes + 20=
97425 pages in 18.303326695 sec, 447 MiB/sec: Internal error
> 2020-10-28 21:27:26.289+0000: xc: show_transfer_rate: 16835952 bytes + 20=
98342 pages in 7.579846749 sec, 1081 MiB/sec: Internal error

These are good numbers, and clearly show that there is some value here,
but shouldn't they be in the series header?=C2=A0 They're not terribly
relevant to this patch specifically.

Also, while I can believe that the first sample is slower than the later
ones (in particular, during the first round, we've got to deal with the
non-RAM regions too and therefore spend more time making hypercalls),
I'm not sure I believe the final sample.=C2=A0 Given the byte/page count, t=
he
substantially smaller elapsed time looks suspicious.

> Note: the performance improvement depends on the used network cards,
> wirespeed and the host:
> - No improvement is expected with a 1G link.
> - Improvement can be seen as shown above on a 10G link.
> - Just a slight improvment can be seen on a 100G link.

Are these observations with an otherwise idle dom0?

Even if CPU time in dom0 wasn't the bottlekneck with a 1G link, the
reduction in CPU time you observe at higher link speeds will still be
making a difference at 1G, and will probably be visible if you perform
multiple concurrent migrations.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:54:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:54:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150087.277558 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MEl-000391-1A; Mon, 05 Jul 2021 10:54:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150087.277558; Mon, 05 Jul 2021 10:54:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MEk-00038u-UD; Mon, 05 Jul 2021 10:54:02 +0000
Received: by outflank-mailman (input) for mailman id 150087;
 Mon, 05 Jul 2021 10:54:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=5nam=L5=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0MEj-00038l-2A
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:54:01 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.76]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4d73b6ca-dd7f-11eb-8443-12813bfff9fa;
 Mon, 05 Jul 2021 10:53:59 +0000 (UTC)
Received: from DB6PR0301CA0047.eurprd03.prod.outlook.com (2603:10a6:4:54::15)
 by AM0PR08MB5379.eurprd08.prod.outlook.com (2603:10a6:208:182::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 10:53:57 +0000
Received: from DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:54:cafe::99) by DB6PR0301CA0047.outlook.office365.com
 (2603:10a6:4:54::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.30 via Frontend
 Transport; Mon, 5 Jul 2021 10:53:57 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT045.mail.protection.outlook.com (10.152.21.164) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 10:53:57 +0000
Received: ("Tessian outbound c836dc7aad98:v97");
 Mon, 05 Jul 2021 10:53:57 +0000
Received: from b2bb8182882d.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A201E4F7-8D6C-4B6C-B8AD-CCA53AF65E40.1; 
 Mon, 05 Jul 2021 10:53:31 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b2bb8182882d.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 10:53:31 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PA4PR08MB5885.eurprd08.prod.outlook.com (2603:10a6:102:e6::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.18; Mon, 5 Jul
 2021 10:53:30 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Mon, 5 Jul 2021
 10:53:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4d73b6ca-dd7f-11eb-8443-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OkcsiJcP6F56XnhvPG/wsuNtb6bp6G9uGerpnhBC/Fo=;
 b=DLEI/R/XNWstmfw63jxaj72witILXBsCz6/J3BLTCwRhpIeeUsGH05e56dF2pSqOY1DlxXTwSlJQX4hUjzjaab7nf+H2JgrZ9VscQFaFTr4EOv4gi/Q9KtJYsYWRcxKHl5rlaijIfycQ+BZWJHhhTRw7C2jL5rPbS2Q4574B8bw=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 6a701badbc3a8e21
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=IwBQOilq8RLXfby6JXkBkrWvhdRvf13K4zs/29IDJrzEiy7isPS5AH19luLly6a8BPRY0+7XWLDqFo2iZ+uxVtt9mV+RoMN+Gx0/95wGbji4RZD/jYjLDAUGVlqzg50W2izxTvf7hXYdf3VVbdKb+eLKWqCzDjUSk0uZj1inoASX0jFNGkl5K4uZhf9z/auLpsqjmaR9z+/dkOI3AeEOL9W/As9Sv65dpmHbaBvnSIj1DFWKLuPH5k/yipmKSPPn5h5rREcKygIo56lndd7MfE30VN+XJ1z67U/ZfIxauWlZ75cu4teVKbPg7YtQ7/sknneRZCtKFtqqCxaNaMvdqA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OkcsiJcP6F56XnhvPG/wsuNtb6bp6G9uGerpnhBC/Fo=;
 b=CrpNsbvtPzmF3e2nlHQD/QWNUaT6uw8ZYihR2OF494V0rUK9rp9XG+dm88izp0EpfcfCS/I2BVWG6hUQpuoqSZdQAVk6PbIG0TD3LvvZSfqKdFjdVAKTWmW692szYavQb8MKkhgQX8xaPyBMAdbdKXjdIY1Jxl72WAFXUW+F/OmBUuegh3jLKzhNH/huOHEh7Igj/W3X2ea2tFhQJZ2PIYCLpfGyn0HA/PeVVBjzE7LJ5rmqsg4u2c+XHLBh+ueIduqABf5kjUbjiWrvLOZWjQDdfBAOytv6DQ0p7uBvs4VucyzIQ0qErupfPMN82TNVXvZhjuHCiA5zt+LuQhaZTg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OkcsiJcP6F56XnhvPG/wsuNtb6bp6G9uGerpnhBC/Fo=;
 b=DLEI/R/XNWstmfw63jxaj72witILXBsCz6/J3BLTCwRhpIeeUsGH05e56dF2pSqOY1DlxXTwSlJQX4hUjzjaab7nf+H2JgrZ9VscQFaFTr4EOv4gi/Q9KtJYsYWRcxKHl5rlaijIfycQ+BZWJHhhTRw7C2jL5rPbS2Q4574B8bw=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Michal Orzel <Michal.Orzel@arm.com>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>, Tamas K Lengyel
	<tamas@tklengyel.com>, Alexandru Isaila <aisaila@bitdefender.com>, Petre
 Pircalabu <ppircalabu@bitdefender.com>
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
Thread-Topic: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
Thread-Index: AQHXcWiahpKBxAk9M0KFlQxmBieLeqs0NScA
Date: Mon, 5 Jul 2021 10:53:30 +0000
Message-ID: <25CEAEF8-F0B3-4950-9465-9D1896C8266E@arm.com>
References: <20210705063952.25629-1-michal.orzel@arm.com>
In-Reply-To: <20210705063952.25629-1-michal.orzel@arm.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [81.2.158.121]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 70481a3f-9a80-4a4c-560c-08d93fa3304c
x-ms-traffictypediagnostic: PA4PR08MB5885:|AM0PR08MB5379:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB5379C9854EE878EF3167CE289D1C9@AM0PR08MB5379.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:529;OLM:529;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 xFLtQ2tTmCh4ZGiJn/DE4OcLkzYLZVMsKnC5dFJ8KXGtHf82aaM+L7EdIX1zNxFI4t/agcakbI0VTkXwdFpnoGtNbGc77UonpnrQEFMcdlolzV41NeTyv3yRDw8u3dhEacxFCP21WbhaH9/LxfkupcGJmMncZLCQMh3+7xp0q2S1vfDBJJya1I55iZgQvqZJt4eW9kC+Dha/lKd7aAMEsdWAxG1QHcj3mJu2EEo/Zot5hXy0EYbHUlCuHb8lYxbWMnz3kMuN2TEyeanpIZfwoNHAtojn/iLfxZxC8a9OLWtcLVU0KzAr5m99d/LS8HU4pDUBCDZNA+xkL9p3pEhBGE1i3OHeJuUt88pSNg9McrrGHXszUUxycooq7FdufmW3BcCUKTq09Y7D5lmiI71fBqj3CnvpXNoklVRqpBiGpeLNi76WLf6TgHeWrdKUNB42SeKkJTdApSC57LvjOILSef1iBePBII0hsIc1Et5mQGpjNSBQw8WdLKkG9z7vgTs23dGoJNIMUV9pQM26qt9/D6ZBBqsRptEMDIzEDvhApfLeen8UfwAZrnm+7ZA5+tGGUrXTZfPs4e8GX+7btGJZODy9YYhtco4wdaSXvUkbSMvbZnJKi8F+D7NQJRMdcJvP2y/PYWrT6VH8rTxK6F/60+DHu07axmftJfHydke4aBSUUD9XIhI/Zth3CrCJmMtn/nDt5nnU6nPMFI6zjK/FsQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(396003)(136003)(346002)(366004)(39860400002)(122000001)(33656002)(36756003)(6512007)(7416002)(66946007)(6636002)(478600001)(8936002)(6486002)(5660300002)(83380400001)(2906002)(4326008)(6862004)(316002)(86362001)(66446008)(6506007)(71200400001)(2616005)(66556008)(26005)(53546011)(8676002)(54906003)(38100700002)(66476007)(37006003)(64756008)(91956017)(76116006)(186003)(30864003)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?N97vyftYVlliRprFCkCP7b/Xfm2oYk23MgYc8ZVp7bs3HV1Qawczg4OipwLQ?=
 =?us-ascii?Q?BgB0NlFscnJzHGy1RVkz3V/zyZFXQ/WYb/7yYBJoYM0Q6YCe+x4DGV+Ngku5?=
 =?us-ascii?Q?RwLFdyuAEYh29qeTnvoX3oK+kQTYYA/sxJeAQB75qZZdtDoU073vE5hj7Vgo?=
 =?us-ascii?Q?RzOgPTUobqAAq+iF2HX7GkTHw6eu8CJv1ApyL7ogmT85Wi2HvE4DY8GsxPz1?=
 =?us-ascii?Q?rDUdu8rvmoLCMbDWws/enspelqOL8WffXwyZ0INt8wgSsEE8ESokbRh58uWJ?=
 =?us-ascii?Q?FNCNqgbqSUmaLYAXBgamjPZdLEcrCxob9jqPcIn7mB7K33jt70stlnnW6dn4?=
 =?us-ascii?Q?kGryJTPcfE2bZQ8wz9SXl6tf4MRcncEYPmc5VccniBMlPvYmntaecdHb1NuH?=
 =?us-ascii?Q?5ghDA5zsc3/v34tA681OwooJTG7UdcO/Y87zXENQvIJ7ZXw8SDkVYgWdAbaq?=
 =?us-ascii?Q?zEgL8RxdOXr7273vSoIKSisuY7yfWTdzr6HpltlxlX71luGVRR2zgKkjYbix?=
 =?us-ascii?Q?tRxOEqpGKtbsXODnjPWDvO0F0IJO+hHUjpmgMaegVJwhnNkIx9C54RIy7dmI?=
 =?us-ascii?Q?6Ab4PIGxm4QXoZ5Mu2DifHsrbWiHk9YelDSb1W8RM0a/yd2TrMMoTp0r0rRI?=
 =?us-ascii?Q?iIkEyQRpshW/9McI8pFbXireIyIPjPlF2tRC6Fniojz07F9b5kJ6l4Iq/H68?=
 =?us-ascii?Q?c3uC3lApGGpb57hPqASqvKLBQxiaR6mwscLhyxdG9MKcHiO7+NcN5Fg+5h9l?=
 =?us-ascii?Q?2G1JIgur6goghYsb4LA3Dr6gFqezQmvb5TZk2wAe6zu6n0UtqvViqbWkhpjK?=
 =?us-ascii?Q?yIkYSYpifuxugX8jfzu/rty+v7K8Nh3KNaibv7HQAEtqSBp6mRdl/E136s7w?=
 =?us-ascii?Q?ey0k3g6qgO5f3rm/4XfxSXv0+tKNsAU3+6QUBZUYbF8qCkDBbG9SlAiXe4Gc?=
 =?us-ascii?Q?b1F4QLgwkHnOSUayI9EH+SQmdiPfAm5Kd7eDG29LVRm2xnU0IMD+PkeZYiPw?=
 =?us-ascii?Q?29MFeFvRmIII2DfHMDNtfPocZRj0w7jAE+73UF+4vTjRaj6Y5xM378GuFxnz?=
 =?us-ascii?Q?8fsIuV6CeYzCTW7S77Ze+VoQbb07M2IrpxkGGzGJjYqzH6R3RFkS77pxg0VX?=
 =?us-ascii?Q?9BCIgN2dTqmrDr3L8V21jA+8aU6B7QPKiYsR43Wezkkqd41C8aZdV1gBOt3c?=
 =?us-ascii?Q?5SztWRqcgIrd+mgK0Lw8am55VQMgImwUHEQvzbr9vIG5slak0bsFxn+Fk+my?=
 =?us-ascii?Q?LFOZ5CDd85e/dckt0pVihb2Y/jcmE58LpExGNCG6qr6bW3ritmqX3X3iKRun?=
 =?us-ascii?Q?XWQb8ZhySsyPy8YfXOsL+7+m?=
Content-Type: multipart/alternative;
	boundary="_000_25CEAEF8F0B3495094659D1896C8266Earmcom_"
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB5885
Original-Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	a0387a28-1b91-46b5-4b41-08d93fa32039
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	KefQUNq0cvzeD7sSmh0/RMGL9YdGNR0nLfZZpGzTXylSvSswj/81RgxoZ56KN4zKXqeKjs4Spv+PfHfzgP2bqPkipARjKm5KJ7+WnU8GOkIawAkGSszxu8Mr3GMwHZj/CumfFkQFQZxDAXr3i8+Fuw7Ca20Y5BiApEK5NzmlSJ8of/fQ7P0AV84EcnjwUD1g14cPBR4Pv/xsEogkCN8SJ5kMGwyodd8ldAUYSqgzRRSrK7eax8eaQ0JEpVB8VqRYvV32Bk7g+lYT8PtIqgXvBHZz4nTZf9tIWNKR3aLQNuIPBqFdmwO8eH+iMBP0+F0WkiPzE+Ghh07J8ZglBvYB68SbeSq/C3xBwck0U0zeFSV0i5JjJ5lcnMP8K/2JY70kVl2agvFn4YePZtHCG9uqoc1zvgzZDDs9s0AZ8Quf/fM/hvp4gXrmSgN3rY+hi5b+5gO+iEkk5nv+p3WSb2Pdz23teKJzdHzxGShj0eflddvkVsYL0jeWoOJQbzweDsweDf2zl3uVzwS1JMJz9Hx3BUGMLqfk+p4cYExpCiDrkZlAewMQJDG9fxGCTLZvi/zVSWjeTtyyt8MaauPPKb3eWYzdiYI4etSweJGpXjZjBQ14Tig576/+kfGy22mlGl7tpdJRQ6kf3QZt/Nf5qCDEV+g/1PaVUw9dZi3Ef+LKOdkHfWmvVrXFUl+NIHc4vM2x5wc/F3eZX2nQUgk2w9g9nQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(346002)(136003)(39860400002)(46966006)(36840700001)(6506007)(81166007)(86362001)(2906002)(47076005)(82740400003)(36756003)(36860700001)(53546011)(30864003)(33656002)(82310400003)(2616005)(107886003)(45080400002)(83380400001)(5660300002)(6512007)(336012)(4326008)(6862004)(54906003)(316002)(356005)(478600001)(37006003)(70586007)(6636002)(186003)(26005)(8936002)(70206006)(8676002)(6486002)(579004);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 10:53:57.2084
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 70481a3f-9a80-4a4c-560c-08d93fa3304c
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5379

--_000_25CEAEF8F0B3495094659D1896C8266Earmcom_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Michal,

On 5 Jul 2021, at 07:39, Michal Orzel <michal.orzel@arm.com<mailto:michal.o=
rzel@arm.com>> wrote:

AArch64 registers are 64bit whereas AArch32 registers
are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
we should get rid of helpers READ/WRITE_SYSREG32
in favour of using READ/WRITE_SYSREG.
We should also use register_t type when reading sysregs
which can correspond to uint64_t or uint32_t.
Even though many AArch64 registers have upper 32bit reserved
it does not mean that they can't be widen in the future.

Modify type of hsr, cpsr, spsr_el1 to uint64_t.
Previously we relied on the padding after spsr_el1.
As we removed the padding, modify the union to be 64bit so we don't corrupt=
 spsr_fiq.
No need to modify the assembly code because the accesses were based on 64bi=
t
registers as there was a 32bit padding after spsr_el1.

Remove 32bit padding in cpu_user_regs before spsr_fiq
as it is no longer needed due to upper union being 64bit now.
Add 64bit padding in cpu_user_regs before spsr_el1
because the kernel frame should be 16-byte aligned.

Change type of cpsr to uint64_t in the public outside interface
"public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
Increment XEN_DOMCTL_INTERFACE_VERSION.

Change type of cpsr to uint64_t in the public outside interface
"public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.

Signed-off-by: Michal Orzel <michal.orzel@arm.com<mailto:michal.orzel@arm.c=
om>>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com<mailto:bertrand.mar=
quis@arm.com>>

Cheers
Bertrand

---
Changes since v3:
-Fix comment about padding
-Remove duplicated printk
Changes since v2:
-Remove _res0 members from structures inside hsr union
-Update commit message
-Modify type of cpsr to uint64_t in public/arch-arm.h
-Increment XEN_DOMCTL_INTERFACE_VERSION
Changes since v1:
-Modify type of cpsr, spsr_el1
-Remove ifdefery in hsr union protecting _res0 members
-Fix formatting of printk calls
---
xen/arch/arm/arm64/entry.S            |  4 ++--
xen/arch/arm/arm64/traps.c            |  2 +-
xen/arch/arm/arm64/vsysreg.c          |  3 ++-
xen/arch/arm/domain.c                 |  2 +-
xen/arch/arm/traps.c                  | 28 ++++++++++++++-------------
xen/arch/arm/vcpreg.c                 | 13 +++++++------
xen/include/asm-arm/arm64/processor.h | 11 ++++++-----
xen/include/asm-arm/hsr.h             |  2 +-
xen/include/public/arch-arm.h         |  4 ++--
xen/include/public/domctl.h           |  2 +-
xen/include/public/vm_event.h         |  3 +--
11 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S
index ab9a65fc14..fc3811ad0a 100644
--- a/xen/arch/arm/arm64/entry.S
+++ b/xen/arch/arm/arm64/entry.S
@@ -155,7 +155,7 @@
        add     x21, sp, #UREGS_CPSR
        mrs     x22, spsr_el2
        mrs     x23, esr_el2
-        stp     w22, w23, [x21]
+        stp     x22, x23, [x21]

        .endm

@@ -432,7 +432,7 @@ return_from_trap:
        msr     daifset, #IFLAGS___I_ /* Mask interrupts */

        ldr     x21, [sp, #UREGS_PC]            /* load ELR */
-        ldr     w22, [sp, #UREGS_CPSR]          /* load SPSR */
+        ldr     x22, [sp, #UREGS_CPSR]          /* load SPSR */

        pop     x0, x1
        pop     x2, x3
diff --git a/xen/arch/arm/arm64/traps.c b/xen/arch/arm/arm64/traps.c
index babfc1d884..9113a15c7a 100644
--- a/xen/arch/arm/arm64/traps.c
+++ b/xen/arch/arm/arm64/traps.c
@@ -36,7 +36,7 @@ void do_bad_mode(struct cpu_user_regs *regs, int reason)
    union hsr hsr =3D { .bits =3D regs->hsr };

    printk("Bad mode in %s handler detected\n", handler[reason]);
-    printk("ESR=3D0x%08"PRIx32":  EC=3D%"PRIx32", IL=3D%"PRIx32", ISS=3D%"=
PRIx32"\n",
+    printk("ESR=3D%#"PRIregister":  EC=3D%"PRIx32", IL=3D%"PRIx32", ISS=3D=
%"PRIx32"\n",
           hsr.bits, hsr.ec, hsr.len, hsr.iss);

    local_irq_disable();
diff --git a/xen/arch/arm/arm64/vsysreg.c b/xen/arch/arm/arm64/vsysreg.c
index 41f18612c6..caf17174b8 100644
--- a/xen/arch/arm/arm64/vsysreg.c
+++ b/xen/arch/arm/arm64/vsysreg.c
@@ -368,7 +368,8 @@ void do_sysreg(struct cpu_user_regs *regs,
                     sysreg.op2,
                     sysreg.read ? "=3D>" : "<=3D",
                     sysreg.reg, regs->pc);
-            gdprintk(XENLOG_ERR, "unhandled 64-bit sysreg access %#x\n",
+            gdprintk(XENLOG_ERR,
+                     "unhandled 64-bit sysreg access %#"PRIregister"\n",
                     hsr.bits & HSR_SYSREG_REGS_MASK);
            inject_undef_exception(regs, hsr);
            return;
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index c021a03c61..74bdbb9082 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -845,7 +845,7 @@ static int is_guest_pv32_psr(uint32_t psr)


#ifdef CONFIG_ARM_64
-static int is_guest_pv64_psr(uint32_t psr)
+static int is_guest_pv64_psr(uint64_t psr)
{
    if ( psr & PSR_MODE_BIT )
        return 0;
diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index e7384381cc..4ccb6e7d18 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -546,7 +546,7 @@ void inject_undef64_exception(struct cpu_user_regs *reg=
s, int instr_len)
        PSR_IRQ_MASK | PSR_DBG_MASK;
    regs->pc =3D handler;

-    WRITE_SYSREG32(esr.bits, ESR_EL1);
+    WRITE_SYSREG(esr.bits, ESR_EL1);
}

/* Inject an abort exception into a 64 bit guest */
@@ -580,7 +580,7 @@ static void inject_abt64_exception(struct cpu_user_regs=
 *regs,
    regs->pc =3D handler;

    WRITE_SYSREG(addr, FAR_EL1);
-    WRITE_SYSREG32(esr.bits, ESR_EL1);
+    WRITE_SYSREG(esr.bits, ESR_EL1);
}

static void inject_dabt64_exception(struct cpu_user_regs *regs,
@@ -717,7 +717,7 @@ struct reg_ctxt {
    uint64_t vttbr_el2;
};

-static const char *mode_string(uint32_t cpsr)
+static const char *mode_string(register_t cpsr)
{
    uint32_t mode;
    static const char *mode_strings[] =3D {
@@ -762,7 +762,7 @@ static void show_registers_32(const struct cpu_user_reg=
s *regs,
        printk(" %pS", _p(regs->pc));
    printk("\n");
#endif
-    printk("CPSR:   %08"PRIx32" MODE:%s\n", regs->cpsr,
+    printk("CPSR:   %"PRIregister" MODE:%s\n", regs->cpsr,
           mode_string(regs->cpsr));
    printk("     R0: %08"PRIx32" R1: %08"PRIx32" R2: %08"PRIx32" R3: %08"PR=
Ix32"\n",
           regs->r0, regs->r1, regs->r2, regs->r3);
@@ -846,7 +846,7 @@ static void show_registers_64(const struct cpu_user_reg=
s *regs,
    {
        printk("SP:     %016"PRIx64"\n", regs->sp);
    }
-    printk("CPSR:   %08"PRIx32" MODE:%s\n", regs->cpsr,
+    printk("CPSR:   %016"PRIx64" MODE:%s\n", regs->cpsr,
           mode_string(regs->cpsr));
    printk("     X0: %016"PRIx64"  X1: %016"PRIx64"  X2: %016"PRIx64"\n",
           regs->x0, regs->x1, regs->x2);
@@ -919,7 +919,7 @@ static void _show_registers(const struct cpu_user_regs =
*regs,
    printk("   HCR_EL2: %"PRIregister"\n", READ_SYSREG(HCR_EL2));
    printk(" TTBR0_EL2: %016"PRIx64"\n", READ_SYSREG64(TTBR0_EL2));
    printk("\n");
-    printk("   ESR_EL2: %08"PRIx32"\n", regs->hsr);
+    printk("   ESR_EL2: %"PRIregister"\n", regs->hsr);
    printk(" HPFAR_EL2: %"PRIregister"\n", READ_SYSREG(HPFAR_EL2));

#ifdef CONFIG_ARM_32
@@ -1599,7 +1599,7 @@ static const unsigned short cc_map[16] =3D {

int check_conditional_instr(struct cpu_user_regs *regs, const union hsr hsr=
)
{
-    unsigned long cpsr, cpsr_cond;
+    register_t cpsr, cpsr_cond;
    int cond;

    /*
@@ -1661,7 +1661,7 @@ int check_conditional_instr(struct cpu_user_regs *reg=
s, const union hsr hsr)

void advance_pc(struct cpu_user_regs *regs, const union hsr hsr)
{
-    unsigned long itbits, cond, cpsr =3D regs->cpsr;
+    register_t itbits, cond, cpsr =3D regs->cpsr;
    bool is_thumb =3D psr_mode_is_32bit(regs) && (cpsr & PSR_THUMB);

    if ( is_thumb && (cpsr & PSR_IT_MASK) )
@@ -2004,13 +2004,15 @@ static void do_trap_stage2_abort_guest(struct cpu_u=
ser_regs *regs,

        break;
    default:
-        gprintk(XENLOG_WARNING, "Unsupported FSC: HSR=3D%#x DFSC=3D%#x\n",
+        gprintk(XENLOG_WARNING,
+                "Unsupported FSC: HSR=3D%#"PRIregister" DFSC=3D%#x\n",
                hsr.bits, xabt.fsc);
    }

inject_abt:
-    gdprintk(XENLOG_DEBUG, "HSR=3D0x%x pc=3D%#"PRIregister" gva=3D%#"PRIva=
ddr
-             " gpa=3D%#"PRIpaddr"\n", hsr.bits, regs->pc, gva, gpa);
+    gdprintk(XENLOG_DEBUG,
+             "HSR=3D%#"PRIregister" pc=3D%#"PRIregister" gva=3D%#"PRIvaddr=
" gpa=3D%#"PRIpaddr"\n",
+             hsr.bits, regs->pc, gva, gpa);
    if ( is_data )
        inject_dabt_exception(regs, gva, hsr.len);
    else
@@ -2204,7 +2206,7 @@ void do_trap_guest_sync(struct cpu_user_regs *regs)

    default:
        gprintk(XENLOG_WARNING,
-                "Unknown Guest Trap. HSR=3D0x%x EC=3D0x%x IL=3D%x Syndrome=
=3D0x%"PRIx32"\n",
+                "Unknown Guest Trap. HSR=3D%#"PRIregister" EC=3D0x%x IL=3D=
%x Syndrome=3D0x%"PRIx32"\n",
                hsr.bits, hsr.ec, hsr.len, hsr.iss);
        inject_undef_exception(regs, hsr);
    }
@@ -2242,7 +2244,7 @@ void do_trap_hyp_sync(struct cpu_user_regs *regs)
        break;
    }
    default:
-        printk("Hypervisor Trap. HSR=3D0x%x EC=3D0x%x IL=3D%x Syndrome=3D0=
x%"PRIx32"\n",
+        printk("Hypervisor Trap. HSR=3D%#"PRIregister" EC=3D0x%x IL=3D%x S=
yndrome=3D0x%"PRIx32"\n",
               hsr.bits, hsr.ec, hsr.len, hsr.iss);
        do_unexpected_trap("Hypervisor", regs);
    }
diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
index 55351fc087..f0cdcc8a54 100644
--- a/xen/arch/arm/vcpreg.c
+++ b/xen/arch/arm/vcpreg.c
@@ -385,7 +385,7 @@ void do_cp15_32(struct cpu_user_regs *regs, const union=
 hsr hsr)
                 "%s p15, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
                 cp32.read ? "mrc" : "mcr",
                 cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->pc=
);
-        gdprintk(XENLOG_ERR, "unhandled 32-bit CP15 access %#x\n",
+        gdprintk(XENLOG_ERR, "unhandled 32-bit CP15 access %#"PRIregister"=
\n",
                 hsr.bits & HSR_CP32_REGS_MASK);
        inject_undef_exception(regs, hsr);
        return;
@@ -454,7 +454,8 @@ void do_cp15_64(struct cpu_user_regs *regs, const union=
 hsr hsr)
                     "%s p15, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
                     cp64.read ? "mrrc" : "mcrr",
                     cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
-            gdprintk(XENLOG_ERR, "unhandled 64-bit CP15 access %#x\n",
+            gdprintk(XENLOG_ERR,
+                     "unhandled 64-bit CP15 access %#"PRIregister"\n",
                     hsr.bits & HSR_CP64_REGS_MASK);
            inject_undef_exception(regs, hsr);
            return;
@@ -585,7 +586,7 @@ void do_cp14_32(struct cpu_user_regs *regs, const union=
 hsr hsr)
                 "%s p14, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
                  cp32.read ? "mrc" : "mcr",
                  cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->p=
c);
-        gdprintk(XENLOG_ERR, "unhandled 32-bit cp14 access %#x\n",
+        gdprintk(XENLOG_ERR, "unhandled 32-bit cp14 access %#"PRIregister"=
\n",
                 hsr.bits & HSR_CP32_REGS_MASK);
        inject_undef_exception(regs, hsr);
        return;
@@ -627,7 +628,7 @@ void do_cp14_64(struct cpu_user_regs *regs, const union=
 hsr hsr)
             "%s p14, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
             cp64.read ? "mrrc" : "mcrr",
             cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
-    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 access %#x\n",
+    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 access %#"PRIregister"\n",
             hsr.bits & HSR_CP64_REGS_MASK);
    inject_undef_exception(regs, hsr);
}
@@ -658,7 +659,7 @@ void do_cp14_dbg(struct cpu_user_regs *regs, const unio=
n hsr hsr)
             "%s p14, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
             cp64.read ? "mrrc" : "mcrr",
             cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
-    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 DBG access %#x\n",
+    gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 DBG access %#"PRIregister"=
\n",
             hsr.bits & HSR_CP64_REGS_MASK);

    inject_undef_exception(regs, hsr);
@@ -692,7 +693,7 @@ void do_cp10(struct cpu_user_regs *regs, const union hs=
r hsr)
                 "%s p10, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
                 cp32.read ? "mrc" : "mcr",
                 cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->pc=
);
-        gdprintk(XENLOG_ERR, "unhandled 32-bit CP10 access %#x\n",
+        gdprintk(XENLOG_ERR, "unhandled 32-bit CP10 access %#"PRIregister"=
\n",
                 hsr.bits & HSR_CP32_REGS_MASK);
        inject_undef_exception(regs, hsr);
        return;
diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/include/asm-arm/ar=
m64/processor.h
index 81dfc5e615..c749f80ad9 100644
--- a/xen/include/asm-arm/arm64/processor.h
+++ b/xen/include/asm-arm/arm64/processor.h
@@ -63,18 +63,19 @@ struct cpu_user_regs

    /* Return address and mode */
    __DECL_REG(pc,           pc32);             /* ELR_EL2 */
-    uint32_t cpsr;                              /* SPSR_EL2 */
-    uint32_t hsr;                               /* ESR_EL2 */
+    uint64_t cpsr;                              /* SPSR_EL2 */
+    uint64_t hsr;                               /* ESR_EL2 */
+
+    /* The kernel frame should be 16-byte aligned. */
+    uint64_t pad0;

    /* Outer guest frame only from here on... */

    union {
-        uint32_t spsr_el1;       /* AArch64 */
+        uint64_t spsr_el1;       /* AArch64 */
        uint32_t spsr_svc;       /* AArch32 */
    };

-    uint32_t pad1; /* Doubleword-align the user half of the frame */
-
    /* AArch32 guests only */
    uint32_t spsr_fiq, spsr_irq, spsr_und, spsr_abt;

diff --git a/xen/include/asm-arm/hsr.h b/xen/include/asm-arm/hsr.h
index 29d4531f40..9b91b28c48 100644
--- a/xen/include/asm-arm/hsr.h
+++ b/xen/include/asm-arm/hsr.h
@@ -16,7 +16,7 @@ enum dabt_size {
};

union hsr {
-    uint32_t bits;
+    register_t bits;
    struct {
        unsigned long iss:25;  /* Instruction Specific Syndrome */
        unsigned long len:1;   /* Instruction length */
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
index 713fd65317..64a2ca30da 100644
--- a/xen/include/public/arch-arm.h
+++ b/xen/include/public/arch-arm.h
@@ -267,10 +267,10 @@ struct vcpu_guest_core_regs

    /* Return address and mode */
    __DECL_REG(pc64,         pc32);             /* ELR_EL2 */
-    uint32_t cpsr;                              /* SPSR_EL2 */
+    uint64_t cpsr;                              /* SPSR_EL2 */

    union {
-        uint32_t spsr_el1;       /* AArch64 */
+        uint64_t spsr_el1;       /* AArch64 */
        uint32_t spsr_svc;       /* AArch32 */
    };

diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 4dbf107785..d576bfabd6 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -38,7 +38,7 @@
#include "hvm/save.h"
#include "memory.h"

-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000013
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000014

/*
 * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
diff --git a/xen/include/public/vm_event.h b/xen/include/public/vm_event.h
index 36135ba4f1..bb003d21d0 100644
--- a/xen/include/public/vm_event.h
+++ b/xen/include/public/vm_event.h
@@ -266,8 +266,7 @@ struct vm_event_regs_arm {
    uint64_t ttbr1;
    uint64_t ttbcr;
    uint64_t pc;
-    uint32_t cpsr;
-    uint32_t _pad;
+    uint64_t cpsr;
};

/*
--
2.29.0



--_000_25CEAEF8F0B3495094659D1896C8266Earmcom_
Content-Type: text/html; charset="us-ascii"
Content-ID: <2C7FA049B28F4A4BB5F98B5C5F421812@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; line-break:=
 after-white-space;" class=3D"">
Hi Michal,<br class=3D"">
<div><br class=3D"">
<blockquote type=3D"cite" class=3D"">
<div class=3D"">On 5 Jul 2021, at 07:39, Michal Orzel &lt;<a href=3D"mailto=
:michal.orzel@arm.com" class=3D"">michal.orzel@arm.com</a>&gt; wrote:</div>
<br class=3D"Apple-interchange-newline">
<div class=3D"">
<div class=3D"">AArch64 registers are 64bit whereas AArch32 registers<br cl=
ass=3D"">
are 32bit or 64bit. MSR/MRS are expecting 64bit values thus<br class=3D"">
we should get rid of helpers READ/WRITE_SYSREG32<br class=3D"">
in favour of using READ/WRITE_SYSREG.<br class=3D"">
We should also use register_t type when reading sysregs<br class=3D"">
which can correspond to uint64_t or uint32_t.<br class=3D"">
Even though many AArch64 registers have upper 32bit reserved<br class=3D"">
it does not mean that they can't be widen in the future.<br class=3D"">
<br class=3D"">
Modify type of hsr, cpsr, spsr_el1 to uint64_t.<br class=3D"">
Previously we relied on the padding after spsr_el1.<br class=3D"">
As we removed the padding, modify the union to be 64bit so we don't corrupt=
 spsr_fiq.<br class=3D"">
No need to modify the assembly code because the accesses were based on 64bi=
t<br class=3D"">
registers as there was a 32bit padding after spsr_el1.<br class=3D"">
<br class=3D"">
Remove 32bit padding in cpu_user_regs before spsr_fiq<br class=3D"">
as it is no longer needed due to upper union being 64bit now.<br class=3D""=
>
Add 64bit padding in cpu_user_regs before spsr_el1<br class=3D"">
because the kernel frame should be 16-byte aligned.<br class=3D"">
<br class=3D"">
Change type of cpsr to uint64_t in the public outside interface<br class=3D=
"">
&quot;public/arch-arm.h&quot; to allow ABI compatibility between 32bit and =
64bit.<br class=3D"">
Increment XEN_DOMCTL_INTERFACE_VERSION.<br class=3D"">
<br class=3D"">
Change type of cpsr to uint64_t in the public outside interface<br class=3D=
"">
&quot;public/vm_event.h&quot; to allow ABI compatibility between 32bit and =
64bit.<br class=3D"">
<br class=3D"">
Signed-off-by: Michal Orzel &lt;<a href=3D"mailto:michal.orzel@arm.com" cla=
ss=3D"">michal.orzel@arm.com</a>&gt;<br class=3D"">
</div>
</div>
</blockquote>
Reviewed-by: Bertrand Marquis &lt;<a href=3D"mailto:bertrand.marquis@arm.co=
m" class=3D"">bertrand.marquis@arm.com</a>&gt;</div>
<div><br class=3D"">
</div>
<div>Cheers</div>
<div>Bertrand</div>
<div><br class=3D"">
<blockquote type=3D"cite" class=3D"">
<div class=3D"">
<div class=3D"">---<br class=3D"">
Changes since v3:<br class=3D"">
-Fix comment about padding<br class=3D"">
-Remove duplicated printk<br class=3D"">
Changes since v2:<br class=3D"">
-Remove _res0 members from structures inside hsr union<br class=3D"">
-Update commit message<br class=3D"">
-Modify type of cpsr to uint64_t in public/arch-arm.h<br class=3D"">
-Increment XEN_DOMCTL_INTERFACE_VERSION<br class=3D"">
Changes since v1:<br class=3D"">
-Modify type of cpsr, spsr_el1<br class=3D"">
-Remove ifdefery in hsr union protecting _res0 members<br class=3D"">
-Fix formatting of printk calls<br class=3D"">
---<br class=3D"">
xen/arch/arm/arm64/entry.S &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;| &nbsp;4 ++--<br class=3D"">
xen/arch/arm/arm64/traps.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;| &nbsp;2 +-<br class=3D"">
xen/arch/arm/arm64/vsysreg.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;| &nbsp;3 ++-<br class=3D"">
xen/arch/arm/domain.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;2 +-<br class=3D"">
xen/arch/arm/traps.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 28 ++++++++++++++--------=
-----<br class=3D"">
xen/arch/arm/vcpreg.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 13 +++++++------<br class=3D""=
>
xen/include/asm-arm/arm64/processor.h | 11 ++++++-----<br class=3D"">
xen/include/asm-arm/hsr.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;2 +-<br class=3D"">
xen/include/public/arch-arm.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;| &nbsp;4 ++--<br class=3D"">
xen/include/public/domctl.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;| &nbsp;2 +-<br class=3D"">
xen/include/public/vm_event.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;| &nbsp;3 +--<br class=3D"">
11 files changed, 39 insertions(+), 35 deletions(-)<br class=3D"">
<br class=3D"">
diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S<br cla=
ss=3D"">
index ab9a65fc14..fc3811ad0a 100644<br class=3D"">
--- a/xen/arch/arm/arm64/entry.S<br class=3D"">
+++ b/xen/arch/arm/arm64/entry.S<br class=3D"">
@@ -155,7 +155,7 @@<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add &nbsp;&nbsp;&nbsp;&nbsp=
;x21, sp, #UREGS_CPSR<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mrs &nbsp;&nbsp;&nbsp;&nbsp=
;x22, spsr_el2<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mrs &nbsp;&nbsp;&nbsp;&nbsp=
;x23, esr_el2<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stp &nbsp;&nbsp;&nbsp;&nbsp;w22=
, w23, [x21]<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stp &nbsp;&nbsp;&nbsp;&nbsp;x22=
, x23, [x21]<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endm<br class=3D"">
<br class=3D"">
@@ -432,7 +432,7 @@ return_from_trap:<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msr &nbsp;&nbsp;&nbsp;&nbsp=
;daifset, #IFLAGS___I_ /* Mask interrupts */<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr &nbsp;&nbsp;&nbsp;&nbsp=
;x21, [sp, #UREGS_PC] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;/* load ELR */<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr &nbsp;&nbsp;&nbsp;&nbsp;w22=
, [sp, #UREGS_CPSR] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/=
* load SPSR */<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr &nbsp;&nbsp;&nbsp;&nbsp;x22=
, [sp, #UREGS_CPSR] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/=
* load SPSR */<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pop &nbsp;&nbsp;&nbsp;&nbsp=
;x0, x1<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pop &nbsp;&nbsp;&nbsp;&nbsp=
;x2, x3<br class=3D"">
diff --git a/xen/arch/arm/arm64/traps.c b/xen/arch/arm/arm64/traps.c<br cla=
ss=3D"">
index babfc1d884..9113a15c7a 100644<br class=3D"">
--- a/xen/arch/arm/arm64/traps.c<br class=3D"">
+++ b/xen/arch/arm/arm64/traps.c<br class=3D"">
@@ -36,7 +36,7 @@ void do_bad_mode(struct cpu_user_regs *regs, int reason)<=
br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;union hsr hsr =3D { .bits =3D regs-&gt;hsr };<br cl=
ass=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;Bad mode in %s handler detected\n&quot=
;, handler[reason]);<br class=3D"">
- &nbsp;&nbsp;&nbsp;printk(&quot;ESR=3D0x%08&quot;PRIx32&quot;: &nbsp;EC=3D=
%&quot;PRIx32&quot;, IL=3D%&quot;PRIx32&quot;, ISS=3D%&quot;PRIx32&quot;\n&=
quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;printk(&quot;ESR=3D%#&quot;PRIregister&quot;: &nbsp;EC=
=3D%&quot;PRIx32&quot;, IL=3D%&quot;PRIx32&quot;, ISS=3D%&quot;PRIx32&quot;=
\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsr.bits,=
 hsr.ec, hsr.len, hsr.iss);<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;local_irq_disable();<br class=3D"">
diff --git a/xen/arch/arm/arm64/vsysreg.c b/xen/arch/arm/arm64/vsysreg.c<br=
 class=3D"">
index 41f18612c6..caf17174b8 100644<br class=3D"">
--- a/xen/arch/arm/arm64/vsysreg.c<br class=3D"">
+++ b/xen/arch/arm/arm64/vsysreg.c<br class=3D"">
@@ -368,7 +368,8 @@ void do_sysreg(struct cpu_user_regs *regs,<br class=3D"=
">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysreg.op2,<br class=3D"=
">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysreg.read ? &quot;=3D&=
gt;&quot; : &quot;&lt;=3D&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysreg.reg, regs-&gt;pc)=
;<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprint=
k(XENLOG_ERR, &quot;unhandled 64-bit sysreg access %#x\n&quot;,<br class=3D=
"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprint=
k(XENLOG_ERR,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;unhandled 64-bit sysre=
g access %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsr.bits &amp; HSR_SYSRE=
G_REGS_MASK);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inj=
ect_undef_exception(regs, hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret=
urn;<br class=3D"">
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c<br class=3D"">
index c021a03c61..74bdbb9082 100644<br class=3D"">
--- a/xen/arch/arm/domain.c<br class=3D"">
+++ b/xen/arch/arm/domain.c<br class=3D"">
@@ -845,7 +845,7 @@ static int is_guest_pv32_psr(uint32_t psr)<br class=3D"=
">
<br class=3D"">
<br class=3D"">
#ifdef CONFIG_ARM_64<br class=3D"">
-static int is_guest_pv64_psr(uint32_t psr)<br class=3D"">
+static int is_guest_pv64_psr(uint64_t psr)<br class=3D"">
{<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;if ( psr &amp; PSR_MODE_BIT )<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br class=3D"">
diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c<br class=3D"">
index e7384381cc..4ccb6e7d18 100644<br class=3D"">
--- a/xen/arch/arm/traps.c<br class=3D"">
+++ b/xen/arch/arm/traps.c<br class=3D"">
@@ -546,7 +546,7 @@ void inject_undef64_exception(struct cpu_user_regs *reg=
s, int instr_len)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSR_IRQ_MASK | PSR_DBG_MASK=
;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;regs-&gt;pc =3D handler;<br class=3D"">
<br class=3D"">
- &nbsp;&nbsp;&nbsp;WRITE_SYSREG32(esr.bits, ESR_EL1);<br class=3D"">
+ &nbsp;&nbsp;&nbsp;WRITE_SYSREG(esr.bits, ESR_EL1);<br class=3D"">
}<br class=3D"">
<br class=3D"">
/* Inject an abort exception into a 64 bit guest */<br class=3D"">
@@ -580,7 +580,7 @@ static void inject_abt64_exception(struct cpu_user_regs=
 *regs,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;regs-&gt;pc =3D handler;<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;WRITE_SYSREG(addr, FAR_EL1);<br class=3D"">
- &nbsp;&nbsp;&nbsp;WRITE_SYSREG32(esr.bits, ESR_EL1);<br class=3D"">
+ &nbsp;&nbsp;&nbsp;WRITE_SYSREG(esr.bits, ESR_EL1);<br class=3D"">
}<br class=3D"">
<br class=3D"">
static void inject_dabt64_exception(struct cpu_user_regs *regs,<br class=3D=
"">
@@ -717,7 +717,7 @@ struct reg_ctxt {<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;uint64_t vttbr_el2;<br class=3D"">
};<br class=3D"">
<br class=3D"">
-static const char *mode_string(uint32_t cpsr)<br class=3D"">
+static const char *mode_string(register_t cpsr)<br class=3D"">
{<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;uint32_t mode;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;static const char *mode_strings[] =3D {<br class=3D=
"">
@@ -762,7 +762,7 @@ static void show_registers_32(const struct cpu_user_reg=
s *regs,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot; %pS&quot;, _p=
(regs-&gt;pc));<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;\n&quot;);<br class=3D"">
#endif<br class=3D"">
- &nbsp;&nbsp;&nbsp;printk(&quot;CPSR: &nbsp;&nbsp;%08&quot;PRIx32&quot; MO=
DE:%s\n&quot;, regs-&gt;cpsr,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;printk(&quot;CPSR: &nbsp;&nbsp;%&quot;PRIregister&quot;=
 MODE:%s\n&quot;, regs-&gt;cpsr,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode_stri=
ng(regs-&gt;cpsr));<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot; &nbsp;&nbsp;&nbsp;&nbsp;R0: %08&quot;=
PRIx32&quot; R1: %08&quot;PRIx32&quot; R2: %08&quot;PRIx32&quot; R3: %08&qu=
ot;PRIx32&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regs-&gt;=
r0, regs-&gt;r1, regs-&gt;r2, regs-&gt;r3);<br class=3D"">
@@ -846,7 +846,7 @@ static void show_registers_64(const struct cpu_user_reg=
s *regs,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;{<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;SP: &nbsp;&nbs=
p;&nbsp;&nbsp;%016&quot;PRIx64&quot;\n&quot;, regs-&gt;sp);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;}<br class=3D"">
- &nbsp;&nbsp;&nbsp;printk(&quot;CPSR: &nbsp;&nbsp;%08&quot;PRIx32&quot; MO=
DE:%s\n&quot;, regs-&gt;cpsr,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;printk(&quot;CPSR: &nbsp;&nbsp;%016&quot;PRIx64&quot; M=
ODE:%s\n&quot;, regs-&gt;cpsr,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode_stri=
ng(regs-&gt;cpsr));<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot; &nbsp;&nbsp;&nbsp;&nbsp;X0: %016&quot=
;PRIx64&quot; &nbsp;X1: %016&quot;PRIx64&quot; &nbsp;X2: %016&quot;PRIx64&q=
uot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regs-&gt;=
x0, regs-&gt;x1, regs-&gt;x2);<br class=3D"">
@@ -919,7 +919,7 @@ static void _show_registers(const struct cpu_user_regs =
*regs,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot; &nbsp;&nbsp;HCR_EL2: %&quot;PRIregist=
er&quot;\n&quot;, READ_SYSREG(HCR_EL2));<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot; TTBR0_EL2: %016&quot;PRIx64&quot;\n&q=
uot;, READ_SYSREG64(TTBR0_EL2));<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;\n&quot;);<br class=3D"">
- &nbsp;&nbsp;&nbsp;printk(&quot; &nbsp;&nbsp;ESR_EL2: %08&quot;PRIx32&quot=
;\n&quot;, regs-&gt;hsr);<br class=3D"">
+ &nbsp;&nbsp;&nbsp;printk(&quot; &nbsp;&nbsp;ESR_EL2: %&quot;PRIregister&q=
uot;\n&quot;, regs-&gt;hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot; HPFAR_EL2: %&quot;PRIregister&quot;\n=
&quot;, READ_SYSREG(HPFAR_EL2));<br class=3D"">
<br class=3D"">
#ifdef CONFIG_ARM_32<br class=3D"">
@@ -1599,7 +1599,7 @@ static const unsigned short cc_map[16] =3D {<br class=
=3D"">
<br class=3D"">
int check_conditional_instr(struct cpu_user_regs *regs, const union hsr hsr=
)<br class=3D"">
{<br class=3D"">
- &nbsp;&nbsp;&nbsp;unsigned long cpsr, cpsr_cond;<br class=3D"">
+ &nbsp;&nbsp;&nbsp;register_t cpsr, cpsr_cond;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;int cond;<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;/*<br class=3D"">
@@ -1661,7 +1661,7 @@ int check_conditional_instr(struct cpu_user_regs *reg=
s, const union hsr hsr)<br class=3D"">
<br class=3D"">
void advance_pc(struct cpu_user_regs *regs, const union hsr hsr)<br class=
=3D"">
{<br class=3D"">
- &nbsp;&nbsp;&nbsp;unsigned long itbits, cond, cpsr =3D regs-&gt;cpsr;<br =
class=3D"">
+ &nbsp;&nbsp;&nbsp;register_t itbits, cond, cpsr =3D regs-&gt;cpsr;<br cla=
ss=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;bool is_thumb =3D psr_mode_is_32bit(regs) &amp;&amp=
; (cpsr &amp; PSR_THUMB);<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;if ( is_thumb &amp;&amp; (cpsr &amp; PSR_IT_MASK) )=
<br class=3D"">
@@ -2004,13 +2004,15 @@ static void do_trap_stage2_abort_guest(struct cpu_u=
ser_regs *regs,<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;default:<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gprintk(XENLOG_WARNING, &quot;U=
nsupported FSC: HSR=3D%#x DFSC=3D%#x\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gprintk(XENLOG_WARNING,<br clas=
s=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&quot;Unsupported FSC: HSR=3D%#&quot;PRIregister&quot; DFS=
C=3D%#x\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;hsr.bits, xabt.fsc);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;}<br class=3D"">
<br class=3D"">
inject_abt:<br class=3D"">
- &nbsp;&nbsp;&nbsp;gdprintk(XENLOG_DEBUG, &quot;HSR=3D0x%x pc=3D%#&quot;PR=
Iregister&quot; gva=3D%#&quot;PRIvaddr<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
quot; gpa=3D%#&quot;PRIpaddr&quot;\n&quot;, hsr.bits, regs-&gt;pc, gva, gpa=
);<br class=3D"">
+ &nbsp;&nbsp;&nbsp;gdprintk(XENLOG_DEBUG,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
quot;HSR=3D%#&quot;PRIregister&quot; pc=3D%#&quot;PRIregister&quot; gva=3D%=
#&quot;PRIvaddr&quot; gpa=3D%#&quot;PRIpaddr&quot;\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h=
sr.bits, regs-&gt;pc, gva, gpa);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;if ( is_data )<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inject_dabt_exception(regs,=
 gva, hsr.len);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;else<br class=3D"">
@@ -2204,7 +2206,7 @@ void do_trap_guest_sync(struct cpu_user_regs *regs)<b=
r class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;default:<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gprintk(XENLOG_WARNING,<br =
class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&quot;Unknown Guest Trap. HSR=3D0x%x EC=3D0x%x IL=3D%x Syn=
drome=3D0x%&quot;PRIx32&quot;\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&quot;Unknown Guest Trap. HSR=3D%#&quot;PRIregister&quot; =
EC=3D0x%x IL=3D%x Syndrome=3D0x%&quot;PRIx32&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;hsr.bits, hsr.ec, hsr.len, hsr.iss);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inject_undef_exception(regs=
, hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;}<br class=3D"">
@@ -2242,7 +2244,7 @@ void do_trap_hyp_sync(struct cpu_user_regs *regs)<br =
class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;}<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;default:<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;Hypervisor Trap. H=
SR=3D0x%x EC=3D0x%x IL=3D%x Syndrome=3D0x%&quot;PRIx32&quot;\n&quot;,<br cl=
ass=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;Hypervisor Trap. H=
SR=3D%#&quot;PRIregister&quot; EC=3D0x%x IL=3D%x Syndrome=3D0x%&quot;PRIx32=
&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;hsr.bits, hsr.ec, hsr.len, hsr.iss);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_unexpected_trap(&quot;Hy=
pervisor&quot;, regs);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;}<br class=3D"">
diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c<br class=3D"">
index 55351fc087..f0cdcc8a54 100644<br class=3D"">
--- a/xen/arch/arm/vcpreg.c<br class=3D"">
+++ b/xen/arch/arm/vcpreg.c<br class=3D"">
@@ -385,7 +385,7 @@ void do_cp15_32(struct cpu_user_regs *regs, const union=
 hsr hsr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;%s p15, %d, r%d, cr%d, cr%d, %d @ 0x%&quot=
;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;cp32.read ? &quot;mrc&quot; : &quot;mcr&quot;,<b=
r class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2=
, regs-&gt;pc);<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unha=
ndled 32-bit CP15 access %#x\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unha=
ndled 32-bit CP15 access %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;hsr.bits &amp; HSR_CP32_REGS_MASK);<br class=3D"=
">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inject_undef_exception(regs=
, hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br class=3D"">
@@ -454,7 +454,8 @@ void do_cp15_64(struct cpu_user_regs *regs, const union=
 hsr hsr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;%s p15, %d, r%d, r=
%d, cr%d @ 0x%&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp64.read ? &quot;mrrc&q=
uot; : &quot;mcrr&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp64.op1, cp64.reg1, cp6=
4.reg2, cp64.crm, regs-&gt;pc);<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprint=
k(XENLOG_ERR, &quot;unhandled 64-bit CP15 access %#x\n&quot;,<br class=3D""=
>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprint=
k(XENLOG_ERR,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;unhandled 64-bit CP15 =
access %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsr.bits &amp; HSR_CP64_=
REGS_MASK);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inj=
ect_undef_exception(regs, hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret=
urn;<br class=3D"">
@@ -585,7 +586,7 @@ void do_cp14_32(struct cpu_user_regs *regs, const union=
 hsr hsr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;%s p14, %d, r%d, cr%d, cr%d, %d @ 0x%&quot=
;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp32.read ? &quot;mrc&quot; : &quot;mcr&qu=
ot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp=
32.op2, regs-&gt;pc);<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unha=
ndled 32-bit cp14 access %#x\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unha=
ndled 32-bit cp14 access %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;hsr.bits &amp; HSR_CP32_REGS_MASK);<br class=3D"=
">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inject_undef_exception(regs=
, hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br class=3D"">
@@ -627,7 +628,7 @@ void do_cp14_64(struct cpu_user_regs *regs, const union=
 hsr hsr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&quot;%s p14, %d, r%d, r%d, cr%d @ 0x%&quot;PRIregister&quot;\n&quot;,<b=
r class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;cp64.read ? &quot;mrrc&quot; : &quot;mcrr&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs-&gt;pc);<br class=3D"">
- &nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unhandled 64-bit CP14 access=
 %#x\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unhandled 64-bit CP14 access=
 %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;hsr.bits &amp; HSR_CP64_REGS_MASK);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;inject_undef_exception(regs, hsr);<br class=3D"">
}<br class=3D"">
@@ -658,7 +659,7 @@ void do_cp14_dbg(struct cpu_user_regs *regs, const unio=
n hsr hsr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&quot;%s p14, %d, r%d, r%d, cr%d @ 0x%&quot;PRIregister&quot;\n&quot;,<b=
r class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;cp64.read ? &quot;mrrc&quot; : &quot;mcrr&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs-&gt;pc);<br class=3D"">
- &nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unhandled 64-bit CP14 DBG ac=
cess %#x\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unhandled 64-bit CP14 DBG ac=
cess %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;hsr.bits &amp; HSR_CP64_REGS_MASK);<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;inject_undef_exception(regs, hsr);<br class=3D"">
@@ -692,7 +693,7 @@ void do_cp10(struct cpu_user_regs *regs, const union hs=
r hsr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;%s p10, %d, r%d, cr%d, cr%d, %d @ 0x%&quot=
;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;cp32.read ? &quot;mrc&quot; : &quot;mcr&quot;,<b=
r class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2=
, regs-&gt;pc);<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unha=
ndled 32-bit CP10 access %#x\n&quot;,<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdprintk(XENLOG_ERR, &quot;unha=
ndled 32-bit CP10 access %#&quot;PRIregister&quot;\n&quot;,<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;hsr.bits &amp; HSR_CP32_REGS_MASK);<br class=3D"=
">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inject_undef_exception(regs=
, hsr);<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br class=3D"">
diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/include/asm-arm/ar=
m64/processor.h<br class=3D"">
index 81dfc5e615..c749f80ad9 100644<br class=3D"">
--- a/xen/include/asm-arm/arm64/processor.h<br class=3D"">
+++ b/xen/include/asm-arm/arm64/processor.h<br class=3D"">
@@ -63,18 +63,19 @@ struct cpu_user_regs<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;/* Return address and mode */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;__DECL_REG(pc, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;pc32); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;/* ELR_EL2 */<br class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t cpsr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* SPSR_EL2 */<b=
r class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t hsr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* ESR_EL2 =
*/<br class=3D"">
+ &nbsp;&nbsp;&nbsp;uint64_t cpsr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* SPSR_EL2 */<b=
r class=3D"">
+ &nbsp;&nbsp;&nbsp;uint64_t hsr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* ESR_EL2 =
*/<br class=3D"">
+<br class=3D"">
+ &nbsp;&nbsp;&nbsp;/* The kernel frame should be 16-byte aligned. */<br cl=
ass=3D"">
+ &nbsp;&nbsp;&nbsp;uint64_t pad0;<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;/* Outer guest frame only from here on... */<br cla=
ss=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;union {<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint32_t spsr_el1; &nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;/* AArch64 */<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint64_t spsr_el1; &nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;/* AArch64 */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint32_t spsr_svc; &nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;/* AArch32 */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;};<br class=3D"">
<br class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t pad1; /* Doubleword-align the user half of the=
 frame */<br class=3D"">
-<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;/* AArch32 guests only */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;uint32_t spsr_fiq, spsr_irq, spsr_und, spsr_abt;<br=
 class=3D"">
<br class=3D"">
diff --git a/xen/include/asm-arm/hsr.h b/xen/include/asm-arm/hsr.h<br class=
=3D"">
index 29d4531f40..9b91b28c48 100644<br class=3D"">
--- a/xen/include/asm-arm/hsr.h<br class=3D"">
+++ b/xen/include/asm-arm/hsr.h<br class=3D"">
@@ -16,7 +16,7 @@ enum dabt_size {<br class=3D"">
};<br class=3D"">
<br class=3D"">
union hsr {<br class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t bits;<br class=3D"">
+ &nbsp;&nbsp;&nbsp;register_t bits;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;struct {<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long iss:25; &nbsp=
;/* Instruction Specific Syndrome */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long len:1; &nbsp;=
&nbsp;/* Instruction length */<br class=3D"">
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h<=
br class=3D"">
index 713fd65317..64a2ca30da 100644<br class=3D"">
--- a/xen/include/public/arch-arm.h<br class=3D"">
+++ b/xen/include/public/arch-arm.h<br class=3D"">
@@ -267,10 +267,10 @@ struct vcpu_guest_core_regs<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;/* Return address and mode */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;__DECL_REG(pc64, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;pc32); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;/* ELR_EL2 */<br class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t cpsr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* SPSR_EL2 */<b=
r class=3D"">
+ &nbsp;&nbsp;&nbsp;uint64_t cpsr; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* SPSR_EL2 */<b=
r class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;union {<br class=3D"">
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint32_t spsr_el1; &nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;/* AArch64 */<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint64_t spsr_el1; &nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;/* AArch64 */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint32_t spsr_svc; &nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;/* AArch32 */<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;};<br class=3D"">
<br class=3D"">
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h<br c=
lass=3D"">
index 4dbf107785..d576bfabd6 100644<br class=3D"">
--- a/xen/include/public/domctl.h<br class=3D"">
+++ b/xen/include/public/domctl.h<br class=3D"">
@@ -38,7 +38,7 @@<br class=3D"">
#include &quot;hvm/save.h&quot;<br class=3D"">
#include &quot;memory.h&quot;<br class=3D"">
<br class=3D"">
-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000013<br class=3D"">
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000014<br class=3D"">
<br class=3D"">
/*<br class=3D"">
&nbsp;* NB. xen_domctl.domain is an IN/OUT parameter for this operation.<br=
 class=3D"">
diff --git a/xen/include/public/vm_event.h b/xen/include/public/vm_event.h<=
br class=3D"">
index 36135ba4f1..bb003d21d0 100644<br class=3D"">
--- a/xen/include/public/vm_event.h<br class=3D"">
+++ b/xen/include/public/vm_event.h<br class=3D"">
@@ -266,8 +266,7 @@ struct vm_event_regs_arm {<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;uint64_t ttbr1;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;uint64_t ttbcr;<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;uint64_t pc;<br class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t cpsr;<br class=3D"">
- &nbsp;&nbsp;&nbsp;uint32_t _pad;<br class=3D"">
+ &nbsp;&nbsp;&nbsp;uint64_t cpsr;<br class=3D"">
};<br class=3D"">
<br class=3D"">
/*<br class=3D"">
-- <br class=3D"">
2.29.0<br class=3D"">
<br class=3D"">
</div>
</div>
</blockquote>
</div>
<br class=3D"">
</body>
</html>

--_000_25CEAEF8F0B3495094659D1896C8266Earmcom_--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150095.277577 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MG0-0003rX-Hx; Mon, 05 Jul 2021 10:55:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150095.277577; Mon, 05 Jul 2021 10:55:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MG0-0003rQ-Eh; Mon, 05 Jul 2021 10:55:20 +0000
Received: by outflank-mailman (input) for mailman id 150095;
 Mon, 05 Jul 2021 10:55:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MFz-0003rB-DL
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:19 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id e51cca4b-a6c1-4dc9-af93-d15b89961689;
 Mon, 05 Jul 2021 10:55:18 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E3B781042;
 Mon,  5 Jul 2021 03:55:17 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 90D943F5A1;
 Mon,  5 Jul 2021 03:55:16 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e51cca4b-a6c1-4dc9-af93-d15b89961689
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 0/9] Use Doxygen and sphinx for html documentation
Date: Mon,  5 Jul 2021 11:50:54 +0100
Message-Id: <20210705105103.14509-1-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1

This serie introduce doxygen in the sphinx html docs generation.
One benefit is to keep most of the documentation in the source
files of xen so that it's more maintainable, on the other hand
there are some limitation of doxygen that should be addressed
modifying the current codebase (for example doxygen can't parse
anonymous structure/union).

To reproduce the documentation xen must be compiled because
most of the headers are generated on compilation time from
the makefiles.

Here follows the steps to generate the sphinx html docs, some
package may be required on your machine, everything is suggested
by the autoconf script.
Here I'm building the arm64 docs (the only introduced for now by
this serie):

./configure
make -C xen XEN_TARGET_ARCH="arm64" CROSS_COMPILE="aarch64-linux-gnu-" defconfig
make -C docs XEN_TARGET_ARCH="arm64" sphinx-html

now in docs/sphinx/html/ we have the generated docs starting
from the index.html page.

I've created a preview showing the html pages:

https://luca.fancellu.gitlab.io/xen-docs/hypercall-interfaces/arm64.html

The browser will show you a warning about the certificate, that's because
my gitlab username contains a dot, this is a known limitation of gitlab pages
so there is nothing to worry about.

Luca Fancellu (9):
  docs: add doxygen configuration file
  docs: add Xen png logo for the doxygen documentation
  docs: add doxygen templates
  m4/python: add function to docs_tool.m4 and new m4 module
  docs: add checks to configure for sphinx and doxygen
  docs: add doxygen preprocessor and related files
  docs: Change Makefile and sphinx configuration for doxygen
  docs: hypercalls sphinx skeleton for generated html
  docs/doxygen: doxygen documentation for grant_table.h

 .gitignore                                    |    7 +
 config/Docs.mk.in                             |    2 +
 docs/Makefile                                 |   47 +-
 docs/conf.py                                  |   43 +-
 docs/configure                                |  258 ++
 docs/configure.ac                             |   15 +
 docs/hypercall-interfaces/arm32.rst           |   32 +
 docs/hypercall-interfaces/arm64.rst           |   33 +
 .../common/grant_tables.rst                   |    9 +
 docs/hypercall-interfaces/index.rst.in        |    7 +
 docs/hypercall-interfaces/x86_64.rst          |   32 +
 docs/index.rst                                |    8 +
 docs/xen-doxygen/customdoxygen.css            |   36 +
 docs/xen-doxygen/doxy-preprocessor.py         |  116 +
 docs/xen-doxygen/doxy_input.list              |    1 +
 docs/xen-doxygen/doxygen_include.h.in         |   32 +
 docs/xen-doxygen/footer.html                  |   21 +
 docs/xen-doxygen/header.html                  |   56 +
 docs/xen-doxygen/mainpage.md                  |    5 +
 docs/xen-doxygen/xen_project_logo_165x67.png  |  Bin 0 -> 18223 bytes
 docs/xen.doxyfile.in                          | 2316 +++++++++++++++++
 m4/ax_python_module.m4                        |   56 +
 m4/docs_tool.m4                               |    9 +
 xen/include/public/grant_table.h              |  459 ++--
 24 files changed, 3412 insertions(+), 188 deletions(-)
 create mode 100644 docs/hypercall-interfaces/arm32.rst
 create mode 100644 docs/hypercall-interfaces/arm64.rst
 create mode 100644 docs/hypercall-interfaces/common/grant_tables.rst
 create mode 100644 docs/hypercall-interfaces/index.rst.in
 create mode 100644 docs/hypercall-interfaces/x86_64.rst
 create mode 100644 docs/xen-doxygen/customdoxygen.css
 create mode 100755 docs/xen-doxygen/doxy-preprocessor.py
 create mode 100644 docs/xen-doxygen/doxy_input.list
 create mode 100644 docs/xen-doxygen/doxygen_include.h.in
 create mode 100644 docs/xen-doxygen/footer.html
 create mode 100644 docs/xen-doxygen/header.html
 create mode 100644 docs/xen-doxygen/mainpage.md
 create mode 100644 docs/xen-doxygen/xen_project_logo_165x67.png
 create mode 100644 docs/xen.doxyfile.in
 create mode 100644 m4/ax_python_module.m4

-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150096.277588 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MG5-0004Aw-QZ; Mon, 05 Jul 2021 10:55:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150096.277588; Mon, 05 Jul 2021 10:55:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MG5-0004An-ND; Mon, 05 Jul 2021 10:55:25 +0000
Received: by outflank-mailman (input) for mailman id 150096;
 Mon, 05 Jul 2021 10:55:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MG4-0003rB-C9
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:24 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 6062de5e-c79e-4810-9b92-f4ceedd30a03;
 Mon, 05 Jul 2021 10:55:21 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6DA8612FC;
 Mon,  5 Jul 2021 03:55:21 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1D9183F5A1;
 Mon,  5 Jul 2021 03:55:20 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6062de5e-c79e-4810-9b92-f4ceedd30a03
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 2/9] docs: add Xen png logo for the doxygen documentation
Date: Mon,  5 Jul 2021 11:50:56 +0100
Message-Id: <20210705105103.14509-3-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Add the xen-doxygen folder for the doxygen template
and add the Xen png logo in it.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
---
 docs/xen-doxygen/xen_project_logo_165x67.png | Bin 0 -> 18223 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 docs/xen-doxygen/xen_project_logo_165x67.png

diff --git a/docs/xen-doxygen/xen_project_logo_165x67.png b/docs/xen-doxygen/xen_project_logo_165x67.png
new file mode 100644
index 0000000000000000000000000000000000000000..7244959d59cdeb9f23c5202160ea45508dfc7265
GIT binary patch
literal 18223
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

literal 0
HcmV?d00001

-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150097.277599 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGA-0004Vz-9v; Mon, 05 Jul 2021 10:55:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150097.277599; Mon, 05 Jul 2021 10:55:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGA-0004Vq-5i; Mon, 05 Jul 2021 10:55:30 +0000
Received: by outflank-mailman (input) for mailman id 150097;
 Mon, 05 Jul 2021 10:55:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MG8-0004Tv-CT
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:28 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 7d83253a-dd7f-11eb-8443-12813bfff9fa;
 Mon, 05 Jul 2021 10:55:20 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DE9141063;
 Mon,  5 Jul 2021 03:55:19 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 231C63F5A1;
 Mon,  5 Jul 2021 03:55:18 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7d83253a-dd7f-11eb-8443-12813bfff9fa
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 1/9] docs: add doxygen configuration file
Date: Mon,  5 Jul 2021 11:50:55 +0100
Message-Id: <20210705105103.14509-2-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Add xen.doxyfile.in as template for the doxygen
configuration file, it will be used to generate
the doxygen documentation.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
---
 docs/xen.doxyfile.in | 2316 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 2316 insertions(+)
 create mode 100644 docs/xen.doxyfile.in

diff --git a/docs/xen.doxyfile.in b/docs/xen.doxyfile.in
new file mode 100644
index 0000000000..00969d9b78
--- /dev/null
+++ b/docs/xen.doxyfile.in
@@ -0,0 +1,2316 @@
+# Doxyfile 1.8.13
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+#
+# This file is base on doc/zephyr.doxyfile.in zephry 2.3
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See
+# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "Xen Project"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "An Open Source Type 1 Hypervisor"
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           = "xen-doxygen/xen_project_logo_165x67.png"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = @DOXY_OUT@
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = YES
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        = @XEN_BASE@
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = YES
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                = "rst=\verbatim embed:rst:leading-asterisk" \
+                         "endrst=\endverbatim" \
+                         "keepindent=\code" \
+                         "endkeepindent=\endcode"
+
+ALIASES += req{1}="\ref XEN_\1 \"XEN-\1\" "
+ALIASES += satisfy{1}="\xrefitem satisfy \"Satisfies requirement\" \"Requirement Implementation\" \1"
+ALIASES += verify{1}="\xrefitem verify \"Verifies requirement\" \"Requirement Verification\" \1"
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = YES
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = YES
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 9
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = YES
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = YES
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       = YES
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 300
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = "@XEN_BASE@/docs/xen-doxygen/mainpage.md"
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+# This MUST be kept in sync with DOXY_SOURCES in doc/CMakeLists.txt
+# for incremental (and faster) builds to work correctly.
+FILE_PATTERNS          = "*.c" \
+                         "*.h" \
+                         "*.S" \
+                         "*.md"
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = @XEN_BASE@/include/nothing.h
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+# Hide internal names (starting with an underscore, and doxygen-generated names
+# for nested unnamed unions that don't generate meaningful sphinx output anyway.
+EXCLUDE_SYMBOLS        =
+# _*  *.__unnamed__ z_* Z_*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = YES
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS     = *.h="\"@XEN_BASE@/docs/xen-doxygen/doxy-preprocessor.py\""
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = "mainpage.md"
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see https://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 2
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            = xen-doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  = xen-doxygen/customdoxygen.css
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    =
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    =
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  =
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = YES
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: https://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = YES
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               = NO
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = YES
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# https://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from https://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: https://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: https://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = YES
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = YES
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
+# the structure of the code including all documentation. Note that this feature
+# is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           = "@XEN_BASE@/xen/include/generated" \
+                         "@XEN_BASE@/xen/include/"
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             = __attribute__(x)= \
+                         DOXYGEN \
+                         __XEN__
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = NO
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150098.277605 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGA-0004cz-Rj; Mon, 05 Jul 2021 10:55:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150098.277605; Mon, 05 Jul 2021 10:55:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGA-0004b1-MI; Mon, 05 Jul 2021 10:55:30 +0000
Received: by outflank-mailman (input) for mailman id 150098;
 Mon, 05 Jul 2021 10:55:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MG9-0003rB-CK
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:29 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 1d62bc2b-6894-4a1c-b892-3ed824903599;
 Mon, 05 Jul 2021 10:55:23 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F1C221042;
 Mon,  5 Jul 2021 03:55:22 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A0FFE3F5A1;
 Mon,  5 Jul 2021 03:55:21 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1d62bc2b-6894-4a1c-b892-3ed824903599
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 3/9] docs: add doxygen templates
Date: Mon,  5 Jul 2021 11:50:57 +0100
Message-Id: <20210705105103.14509-4-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Add doxygen templates for the doxygen documentation.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
---
 docs/xen-doxygen/customdoxygen.css | 36 +++++++++++++++++++
 docs/xen-doxygen/footer.html       | 21 +++++++++++
 docs/xen-doxygen/header.html       | 56 ++++++++++++++++++++++++++++++
 docs/xen-doxygen/mainpage.md       |  5 +++
 4 files changed, 118 insertions(+)
 create mode 100644 docs/xen-doxygen/customdoxygen.css
 create mode 100644 docs/xen-doxygen/footer.html
 create mode 100644 docs/xen-doxygen/header.html
 create mode 100644 docs/xen-doxygen/mainpage.md

diff --git a/docs/xen-doxygen/customdoxygen.css b/docs/xen-doxygen/customdoxygen.css
new file mode 100644
index 0000000000..4735e41cf5
--- /dev/null
+++ b/docs/xen-doxygen/customdoxygen.css
@@ -0,0 +1,36 @@
+/* Custom CSS for Doxygen-generated HTML
+ * Copyright (c) 2015 Intel Corporation
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+code {
+  font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
+  background-color: #D8D8D8;
+  padding: 0 0.25em 0 0.25em;
+}
+
+pre.fragment {
+  display: block;
+  font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
+  padding: 1rem;
+  word-break: break-all;
+  word-wrap: break-word;
+  white-space: pre;
+  background-color: #D8D8D8;
+}
+
+#projectlogo
+{
+  vertical-align: middle;
+}
+
+#projectname
+{
+  font: 200% Tahoma, Arial,sans-serif;
+  color: #3D578C;
+}
+
+#projectbrief
+{
+  color: #3D578C;
+}
diff --git a/docs/xen-doxygen/footer.html b/docs/xen-doxygen/footer.html
new file mode 100644
index 0000000000..a24bf2b9b4
--- /dev/null
+++ b/docs/xen-doxygen/footer.html
@@ -0,0 +1,21 @@
+<!-- HTML footer for doxygen 1.8.13-->
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    $navpath
+    <li class="footer">$generatedby
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
+  </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
+</a> $doxygenversion
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+</body>
+</html>
diff --git a/docs/xen-doxygen/header.html b/docs/xen-doxygen/header.html
new file mode 100644
index 0000000000..83ac2f1835
--- /dev/null
+++ b/docs/xen-doxygen/header.html
@@ -0,0 +1,56 @@
+<!-- HTML header for doxygen 1.8.13-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <!--BEGIN PROJECT_LOGO-->
+  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
+  <!--END PROJECT_LOGO-->
+  <!--BEGIN PROJECT_NAME-->
+  <td id="projectalign" style="padding-left: 1em;">
+   <div id="projectname">$projectname
+   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+   </div>
+   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+  </td>
+  <!--END PROJECT_NAME-->
+  <!--BEGIN !PROJECT_NAME-->
+   <!--BEGIN PROJECT_BRIEF-->
+    <td style="padding-left: 0.5em;">
+    <div id="projectbrief">$projectbrief</div>
+    </td>
+   <!--END PROJECT_BRIEF-->
+  <!--END !PROJECT_NAME-->
+  <!--BEGIN DISABLE_INDEX-->
+   <!--BEGIN SEARCHENGINE-->
+   <td>$searchbox</td>
+   <!--END SEARCHENGINE-->
+  <!--END DISABLE_INDEX-->
+ </tr>
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->
diff --git a/docs/xen-doxygen/mainpage.md b/docs/xen-doxygen/mainpage.md
new file mode 100644
index 0000000000..ff548b87fc
--- /dev/null
+++ b/docs/xen-doxygen/mainpage.md
@@ -0,0 +1,5 @@
+# API Documentation   {#index}
+
+## Introduction
+
+## Licensing
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150100.277621 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGG-0005Fp-50; Mon, 05 Jul 2021 10:55:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150100.277621; Mon, 05 Jul 2021 10:55:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGG-0005Fe-12; Mon, 05 Jul 2021 10:55:36 +0000
Received: by outflank-mailman (input) for mailman id 150100;
 Mon, 05 Jul 2021 10:55:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MGE-0003rB-Cc
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:34 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 74206765-7696-408d-bc0e-90cade312c02;
 Mon, 05 Jul 2021 10:55:24 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1629B12FC;
 Mon,  5 Jul 2021 03:55:24 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 304EA3F5A1;
 Mon,  5 Jul 2021 03:55:23 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 74206765-7696-408d-bc0e-90cade312c02
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>
Subject: [PATCH v7 4/9] m4/python: add function to docs_tool.m4 and new m4 module
Date: Mon,  5 Jul 2021 11:50:58 +0100
Message-Id: <20210705105103.14509-5-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Add ax_python_module.m4 to have a way to check if
a python module is installed in the system.

Add a function to docs_tool.m4 to throw an error if the
required docs tool is missing.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
---
 m4/ax_python_module.m4 | 56 ++++++++++++++++++++++++++++++++++++++++++
 m4/docs_tool.m4        |  9 +++++++
 2 files changed, 65 insertions(+)
 create mode 100644 m4/ax_python_module.m4

diff --git a/m4/ax_python_module.m4 b/m4/ax_python_module.m4
new file mode 100644
index 0000000000..107d88264a
--- /dev/null
+++ b/m4/ax_python_module.m4
@@ -0,0 +1,56 @@
+# ===========================================================================
+#     https://www.gnu.org/software/autoconf-archive/ax_python_module.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PYTHON_MODULE(modname[, fatal, python])
+#
+# DESCRIPTION
+#
+#   Checks for Python module.
+#
+#   If fatal is non-empty then absence of a module will trigger an error.
+#   The third parameter can either be "python" for Python 2 or "python3" for
+#   Python 3; defaults to Python 3.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Andrew Collier
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 9
+
+AU_ALIAS([AC_PYTHON_MODULE], [AX_PYTHON_MODULE])
+AC_DEFUN([AX_PYTHON_MODULE],[
+    if test -z $PYTHON;
+    then
+        if test -z "$3";
+        then
+            PYTHON="python3"
+        else
+            PYTHON="$3"
+        fi
+    fi
+    PYTHON_NAME=`basename $PYTHON`
+    AC_MSG_CHECKING($PYTHON_NAME module: $1)
+    $PYTHON -c "import $1" 2>/dev/null
+    if test $? -eq 0;
+    then
+        AC_MSG_RESULT(yes)
+        eval AS_TR_CPP(HAVE_PYMOD_$1)=yes
+    else
+        AC_MSG_RESULT(no)
+        eval AS_TR_CPP(HAVE_PYMOD_$1)=no
+        #
+        if test -n "$2"
+        then
+            AC_MSG_ERROR(failed to find required module $1)
+            exit 1
+        fi
+    fi
+])
\ No newline at end of file
diff --git a/m4/docs_tool.m4 b/m4/docs_tool.m4
index 3e8814ac8d..39aa348026 100644
--- a/m4/docs_tool.m4
+++ b/m4/docs_tool.m4
@@ -15,3 +15,12 @@ dnl
         AC_MSG_WARN([$2 is not available so some documentation won't be built])
     ])
 ])
+
+AC_DEFUN([AX_DOCS_TOOL_REQ_PROG], [
+dnl
+    AC_ARG_VAR([$1], [Path to $2 tool])
+    AC_PATH_PROG([$1], [$2])
+    AS_IF([! test -x "$ac_cv_path_$1"], [
+        AC_MSG_ERROR([$2 is needed])
+    ])
+])
\ No newline at end of file
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150102.277632 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGK-0005j5-Eq; Mon, 05 Jul 2021 10:55:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150102.277632; Mon, 05 Jul 2021 10:55:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGK-0005ip-BE; Mon, 05 Jul 2021 10:55:40 +0000
Received: by outflank-mailman (input) for mailman id 150102;
 Mon, 05 Jul 2021 10:55:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MGI-0004Tv-BN
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:38 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 84a67786-dd7f-11eb-8443-12813bfff9fa;
 Mon, 05 Jul 2021 10:55:32 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DFDDA1042;
 Mon,  5 Jul 2021 03:55:31 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2729F3F5A1;
 Mon,  5 Jul 2021 03:55:29 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 84a67786-dd7f-11eb-8443-12813bfff9fa
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 8/9] docs: hypercalls sphinx skeleton for generated html
Date: Mon,  5 Jul 2021 11:51:02 +0100
Message-Id: <20210705105103.14509-9-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Create a skeleton for the documentation about hypercalls.
At this stage the documentation can be created only for one
architecture at a time.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
---
v7 changes:
- modify the commit message
v6 changes:
- Now every platform has the same sections in .rst files
---
 .gitignore                             |  1 +
 docs/Makefile                          |  4 ++++
 docs/hypercall-interfaces/arm32.rst    | 32 ++++++++++++++++++++++++++
 docs/hypercall-interfaces/arm64.rst    | 32 ++++++++++++++++++++++++++
 docs/hypercall-interfaces/index.rst.in |  7 ++++++
 docs/hypercall-interfaces/x86_64.rst   | 32 ++++++++++++++++++++++++++
 docs/index.rst                         |  8 +++++++
 7 files changed, 116 insertions(+)
 create mode 100644 docs/hypercall-interfaces/arm32.rst
 create mode 100644 docs/hypercall-interfaces/arm64.rst
 create mode 100644 docs/hypercall-interfaces/index.rst.in
 create mode 100644 docs/hypercall-interfaces/x86_64.rst

diff --git a/.gitignore b/.gitignore
index ef0b0ed101..7543452b66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,6 +64,7 @@ docs/xen.doxyfile
 docs/xen.doxyfile.tmp
 docs/xen-doxygen/doxygen_include.h
 docs/xen-doxygen/doxygen_include.h.tmp
+docs/hypercall-interfaces/index.rst
 extras/mini-os*
 install/*
 stubdom/*-minios-config.mk
diff --git a/docs/Makefile b/docs/Makefile
index c0699a2f1b..870d8f6c9b 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -61,6 +61,9 @@ build: html txt pdf man-pages figs
 sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
 ifneq ($(SPHINXBUILD),no)
 	$(DOXYGEN) xen.doxyfile
+	@echo "Generating hypercall-interfaces/index.rst"
+	@sed -e "s,@XEN_TARGET_ARCH@,$(XEN_TARGET_ARCH),g" \
+		hypercall-interfaces/index.rst.in > hypercall-interfaces/index.rst
 	XEN_ROOT=$(realpath $(XEN_ROOT)) DOXYGEN_OUTPUT=$(DOXYGEN_OUTPUT) \
 		$(SPHINXBUILD) -b html . sphinx/html
 else
@@ -109,6 +112,7 @@ clean: clean-man-pages
 	rm -f xen.doxyfile.tmp
 	rm -f xen-doxygen/doxygen_include.h
 	rm -f xen-doxygen/doxygen_include.h.tmp
+	rm -f hypercall-interfaces/index.rst
 
 .PHONY: distclean
 distclean: clean
diff --git a/docs/hypercall-interfaces/arm32.rst b/docs/hypercall-interfaces/arm32.rst
new file mode 100644
index 0000000000..6762d9fc7c
--- /dev/null
+++ b/docs/hypercall-interfaces/arm32.rst
@@ -0,0 +1,32 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+
+Hypercall Interfaces - arm32
+============================
+
+Starting points
+---------------
+.. toctree::
+   :maxdepth: 2
+
+
+
+Functions
+---------
+
+
+Structs
+-------
+
+
+Enums and sets of #defines
+--------------------------
+
+
+Typedefs
+--------
+
+
+Enum values and individual #defines
+-----------------------------------
+
+
diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interfaces/arm64.rst
new file mode 100644
index 0000000000..5e701a2adc
--- /dev/null
+++ b/docs/hypercall-interfaces/arm64.rst
@@ -0,0 +1,32 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+
+Hypercall Interfaces - arm64
+============================
+
+Starting points
+---------------
+.. toctree::
+   :maxdepth: 2
+
+
+
+Functions
+---------
+
+
+Structs
+-------
+
+
+Enums and sets of #defines
+--------------------------
+
+
+Typedefs
+--------
+
+
+Enum values and individual #defines
+-----------------------------------
+
+
diff --git a/docs/hypercall-interfaces/index.rst.in b/docs/hypercall-interfaces/index.rst.in
new file mode 100644
index 0000000000..e4dcc5db8d
--- /dev/null
+++ b/docs/hypercall-interfaces/index.rst.in
@@ -0,0 +1,7 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+
+Hypercall Interfaces
+====================
+
+.. toctree::
+   @XEN_TARGET_ARCH@
diff --git a/docs/hypercall-interfaces/x86_64.rst b/docs/hypercall-interfaces/x86_64.rst
new file mode 100644
index 0000000000..59e948900c
--- /dev/null
+++ b/docs/hypercall-interfaces/x86_64.rst
@@ -0,0 +1,32 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+
+Hypercall Interfaces - x86_64
+=============================
+
+Starting points
+---------------
+.. toctree::
+   :maxdepth: 2
+
+
+
+Functions
+---------
+
+
+Structs
+-------
+
+
+Enums and sets of #defines
+--------------------------
+
+
+Typedefs
+--------
+
+
+Enum values and individual #defines
+-----------------------------------
+
+
diff --git a/docs/index.rst b/docs/index.rst
index b75487a05d..52226a42d8 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -53,6 +53,14 @@ kind of development environment.
    hypervisor-guide/index
 
 
+Hypercall Interfaces documentation
+----------------------------------
+
+.. toctree::
+   :maxdepth: 2
+
+   hypercall-interfaces/index
+
 Miscellanea
 -----------
 
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150103.277636 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGK-0005og-Uh; Mon, 05 Jul 2021 10:55:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150103.277636; Mon, 05 Jul 2021 10:55:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGK-0005no-Nd; Mon, 05 Jul 2021 10:55:40 +0000
Received: by outflank-mailman (input) for mailman id 150103;
 Mon, 05 Jul 2021 10:55:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MGJ-0003rB-Cq
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:39 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ef3380bf-6247-4c8c-9f9d-87525b803ccc;
 Mon, 05 Jul 2021 10:55:25 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2FE7B13D5;
 Mon,  5 Jul 2021 03:55:25 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 488983F5A1;
 Mon,  5 Jul 2021 03:55:24 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ef3380bf-6247-4c8c-9f9d-87525b803ccc
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>
Subject: [PATCH v7 5/9] docs: add checks to configure for sphinx and doxygen
Date: Mon,  5 Jul 2021 11:50:59 +0100
Message-Id: <20210705105103.14509-6-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Add checks in the configure files to see if the system
is capable of generating the sphinx html docs using
doxygen and sphinx-breathe tools.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
---
 config/Docs.mk.in |   2 +
 docs/configure    | 258 ++++++++++++++++++++++++++++++++++++++++++++++
 docs/configure.ac |  15 +++
 3 files changed, 275 insertions(+)

diff --git a/config/Docs.mk.in b/config/Docs.mk.in
index e76e5cd5ff..dfd4a02838 100644
--- a/config/Docs.mk.in
+++ b/config/Docs.mk.in
@@ -7,3 +7,5 @@ POD2HTML            := @POD2HTML@
 POD2TEXT            := @POD2TEXT@
 PANDOC              := @PANDOC@
 PERL                := @PERL@
+SPHINXBUILD         := @SPHINXBUILD@
+DOXYGEN             := @DOXYGEN@
diff --git a/docs/configure b/docs/configure
index 569bd4c2ff..0ebf046a79 100755
--- a/docs/configure
+++ b/docs/configure
@@ -588,6 +588,8 @@ ac_unique_file="misc/xen-command-line.pandoc"
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 PERL
+DOXYGEN
+SPHINXBUILD
 PANDOC
 POD2TEXT
 POD2HTML
@@ -673,6 +675,7 @@ POD2MAN
 POD2HTML
 POD2TEXT
 PANDOC
+DOXYGEN
 PERL'
 
 
@@ -1318,6 +1321,7 @@ Some influential environment variables:
   POD2HTML    Path to pod2html tool
   POD2TEXT    Path to pod2text tool
   PANDOC      Path to pandoc tool
+  DOXYGEN     Path to doxygen tool
   PERL        Path to Perl parser
 
 Use these variables to override the choices made by `configure' or to help
@@ -1800,6 +1804,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
 
+
 case "$host_os" in
 *freebsd*) XENSTORED_KVA=/dev/xen/xenstored ;;
 *) XENSTORED_KVA=/proc/xen/xsd_kva ;;
@@ -1812,6 +1817,53 @@ case "$host_os" in
 esac
 
 
+# ===========================================================================
+#     https://www.gnu.org/software/autoconf-archive/ax_python_module.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PYTHON_MODULE(modname[, fatal, python])
+#
+# DESCRIPTION
+#
+#   Checks for Python module.
+#
+#   If fatal is non-empty then absence of a module will trigger an error.
+#   The third parameter can either be "python" for Python 2 or "python3" for
+#   Python 3; defaults to Python 3.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Andrew Collier
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 9
+
+# This is what autoupdate's m4 run will expand.  It fires
+# the warning (with _au_warn_XXX), outputs it into the
+# updated configure.ac (with AC_DIAGNOSE), and then outputs
+# the replacement expansion.
+
+
+# This is an auxiliary macro that is also run when
+# autoupdate runs m4.  It simply calls m4_warning, but
+# we need a wrapper so that each warning is emitted only
+# once.  We break the quoting in m4_warning's argument in
+# order to expand this macro's arguments, not AU_DEFUN's.
+
+
+# Finally, this is the expansion that is picked up by
+# autoconf.  It tells the user to run autoupdate, and
+# then outputs the replacement expansion.  We do not care
+# about autoupdate's warning because that contains
+# information on what to do *after* running autoupdate.
+
+
 
 
 test "x$prefix" = "xNONE" && prefix=$ac_default_prefix
@@ -2232,6 +2284,212 @@ $as_echo "$as_me: WARNING: pandoc is not available so some documentation won't b
 fi
 
 
+# If sphinx is installed, make sure to have also the dependencies to build
+# Sphinx documentation.
+for ac_prog in sphinx-build
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_SPHINXBUILD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$SPHINXBUILD"; then
+  ac_cv_prog_SPHINXBUILD="$SPHINXBUILD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_SPHINXBUILD="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+SPHINXBUILD=$ac_cv_prog_SPHINXBUILD
+if test -n "$SPHINXBUILD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINXBUILD" >&5
+$as_echo "$SPHINXBUILD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$SPHINXBUILD" && break
+done
+test -n "$SPHINXBUILD" || SPHINXBUILD="no"
+
+    if test "x$SPHINXBUILD" = xno; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sphinx-build is not available so sphinx documentation \
+won't be built" >&5
+$as_echo "$as_me: WARNING: sphinx-build is not available so sphinx documentation \
+won't be built" >&2;}
+else
+
+            # Extract the first word of "sphinx-build", so it can be a program name with args.
+set dummy sphinx-build; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_SPHINXBUILD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $SPHINXBUILD in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_SPHINXBUILD="$SPHINXBUILD" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_SPHINXBUILD="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+SPHINXBUILD=$ac_cv_path_SPHINXBUILD
+if test -n "$SPHINXBUILD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINXBUILD" >&5
+$as_echo "$SPHINXBUILD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+    # Extract the first word of "doxygen", so it can be a program name with args.
+set dummy doxygen; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DOXYGEN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $DOXYGEN in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+DOXYGEN=$ac_cv_path_DOXYGEN
+if test -n "$DOXYGEN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
+$as_echo "$DOXYGEN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    if ! test -x "$ac_cv_path_DOXYGEN"; then :
+
+        as_fn_error $? "doxygen is needed" "$LINENO" 5
+
+fi
+
+
+    if test -z $PYTHON;
+    then
+        if test -z "";
+        then
+            PYTHON="python3"
+        else
+            PYTHON=""
+        fi
+    fi
+    PYTHON_NAME=`basename $PYTHON`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking $PYTHON_NAME module: breathe" >&5
+$as_echo_n "checking $PYTHON_NAME module: breathe... " >&6; }
+    $PYTHON -c "import breathe" 2>/dev/null
+    if test $? -eq 0;
+    then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        eval HAVE_PYMOD_BREATHE=yes
+    else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+        eval HAVE_PYMOD_BREATHE=no
+        #
+        if test -n "yes"
+        then
+            as_fn_error $? "failed to find required module breathe" "$LINENO" 5
+            exit 1
+        fi
+    fi
+
+
+    if test -z $PYTHON;
+    then
+        if test -z "";
+        then
+            PYTHON="python3"
+        else
+            PYTHON=""
+        fi
+    fi
+    PYTHON_NAME=`basename $PYTHON`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking $PYTHON_NAME module: sphinx_rtd_theme" >&5
+$as_echo_n "checking $PYTHON_NAME module: sphinx_rtd_theme... " >&6; }
+    $PYTHON -c "import sphinx_rtd_theme" 2>/dev/null
+    if test $? -eq 0;
+    then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        eval HAVE_PYMOD_SPHINX_RTD_THEME=yes
+    else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+        eval HAVE_PYMOD_SPHINX_RTD_THEME=no
+        #
+        if test -n "yes"
+        then
+            as_fn_error $? "failed to find required module sphinx_rtd_theme" "$LINENO" 5
+            exit 1
+        fi
+    fi
+
+
+
+fi
+
 
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
diff --git a/docs/configure.ac b/docs/configure.ac
index c2e5edd3b3..a2ff55f30a 100644
--- a/docs/configure.ac
+++ b/docs/configure.ac
@@ -20,6 +20,7 @@ m4_include([../m4/docs_tool.m4])
 m4_include([../m4/path_or_fail.m4])
 m4_include([../m4/features.m4])
 m4_include([../m4/paths.m4])
+m4_include([../m4/ax_python_module.m4])
 
 AX_XEN_EXPAND_CONFIG()
 
@@ -29,6 +30,20 @@ AX_DOCS_TOOL_PROG([POD2HTML], [pod2html])
 AX_DOCS_TOOL_PROG([POD2TEXT], [pod2text])
 AX_DOCS_TOOL_PROG([PANDOC], [pandoc])
 
+# If sphinx is installed, make sure to have also the dependencies to build
+# Sphinx documentation.
+AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build], [no])
+    AS_IF([test "x$SPHINXBUILD" = xno],
+        [AC_MSG_WARN(sphinx-build is not available so sphinx documentation \
+won't be built)],
+        [
+            AC_PATH_PROG([SPHINXBUILD], [sphinx-build])
+            AX_DOCS_TOOL_REQ_PROG([DOXYGEN], [doxygen])
+            AX_PYTHON_MODULE([breathe],[yes])
+            AX_PYTHON_MODULE([sphinx_rtd_theme], [yes])
+        ]
+    )
+
 AC_ARG_VAR([PERL], [Path to Perl parser])
 AX_PATH_PROG_OR_FAIL([PERL], [perl])
 
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150104.277654 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGO-0006UT-Fv; Mon, 05 Jul 2021 10:55:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150104.277654; Mon, 05 Jul 2021 10:55:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGO-0006UC-91; Mon, 05 Jul 2021 10:55:44 +0000
Received: by outflank-mailman (input) for mailman id 150104;
 Mon, 05 Jul 2021 10:55:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MGN-0004Tv-BV
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:43 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 859e9dee-dd7f-11eb-8443-12813bfff9fa;
 Mon, 05 Jul 2021 10:55:33 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6F7D21063;
 Mon,  5 Jul 2021 03:55:33 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1F0683F5A1;
 Mon,  5 Jul 2021 03:55:32 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 859e9dee-dd7f-11eb-8443-12813bfff9fa
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 9/9] docs/doxygen: doxygen documentation for grant_table.h
Date: Mon,  5 Jul 2021 11:51:03 +0100
Message-Id: <20210705105103.14509-10-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Modification to include/public/grant_table.h:

1) Add doxygen tags to:
 - Create Grant tables section
 - include variables in the generated documentation
 - Used @keepindent/@endkeepindent to enclose comment
   section that are indented using spaces, to keep
   the indentation.
2) Add .rst file for grant table

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
---
v7 changes:
- commit message changed
- Add comment about grant table queries and uses
to the documentation
v6 changes:
- Fix misaligned comment
- Moved comments to make them display in the docs
- Included more documentation in the docs
v5 changes:
- Move GNTCOPY_* define next to the flags field
v4 changes:
- Used @keepindent/@endkeepindent doxygen commands
  to keep text with spaces indentation.
- drop changes to grant_entry_v1 comment, it will
  be changed and included in the docs in a future patch
- Move docs .rst to "common" folder
v3 changes:
- removed tags to skip anonymous union/struct
- moved back comment pointed out by Jan
- moved down defines related to struct gnttab_copy
  as pointed out by Jan
v2 changes:
- Revert back to anonymous union/struct
- add doxygen tags to skip anonymous union/struct
---
 docs/hypercall-interfaces/arm64.rst           |   1 +
 .../common/grant_tables.rst                   |   9 +
 docs/xen-doxygen/doxy_input.list              |   1 +
 xen/include/public/grant_table.h              | 459 +++++++++++-------
 4 files changed, 288 insertions(+), 182 deletions(-)
 create mode 100644 docs/hypercall-interfaces/common/grant_tables.rst

diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interfaces/arm64.rst
index 5e701a2adc..cb4c0d13de 100644
--- a/docs/hypercall-interfaces/arm64.rst
+++ b/docs/hypercall-interfaces/arm64.rst
@@ -8,6 +8,7 @@ Starting points
 .. toctree::
    :maxdepth: 2
 
+   common/grant_tables
 
 
 Functions
diff --git a/docs/hypercall-interfaces/common/grant_tables.rst b/docs/hypercall-interfaces/common/grant_tables.rst
new file mode 100644
index 0000000000..b8a1ef8759
--- /dev/null
+++ b/docs/hypercall-interfaces/common/grant_tables.rst
@@ -0,0 +1,9 @@
+.. SPDX-License-Identifier: CC-BY-4.0
+
+Grant Tables
+============
+
+.. doxygengroup:: grant_table
+   :project: Xen
+   :members:
+   :undoc-members:
diff --git a/docs/xen-doxygen/doxy_input.list b/docs/xen-doxygen/doxy_input.list
index e69de29bb2..233d692fa7 100644
--- a/docs/xen-doxygen/doxy_input.list
+++ b/docs/xen-doxygen/doxy_input.list
@@ -0,0 +1 @@
+xen/include/public/grant_table.h
diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant_table.h
index 84b1d26b36..2f826c952d 100644
--- a/xen/include/public/grant_table.h
+++ b/xen/include/public/grant_table.h
@@ -25,15 +25,19 @@
  * Copyright (c) 2004, K A Fraser
  */
 
+/**
+ * @file
+ * @brief Interface for granting foreign access to page frames, and receiving
+ * page-ownership transfers.
+ */
+
 #ifndef __XEN_PUBLIC_GRANT_TABLE_H__
 #define __XEN_PUBLIC_GRANT_TABLE_H__
 
 #include "xen.h"
 
-/*
- * `incontents 150 gnttab Grant Tables
- *
- * Xen's grant tables provide a generic mechanism to memory sharing
+/**
+ * @brief Xen's grant tables provide a generic mechanism to memory sharing
  * between domains. This shared memory interface underpins the split
  * device drivers for block and network IO.
  *
@@ -51,13 +55,13 @@
  * know the real machine address of a page it is sharing. This makes
  * it possible to share memory correctly with domains running in
  * fully virtualised memory.
- */
-
-/***********************************
+ *
  * GRANT TABLE REPRESENTATION
- */
-
-/* Some rough guidelines on accessing and updating grant-table entries
+ *
+ * A grant table comprises a packed array of grant entries in one or more
+ * page frames shared between Xen and a guest.
+ *
+ * Some rough guidelines on accessing and updating grant-table entries
  * in a concurrency-safe manner. For more information, Linux contains a
  * reference implementation for guest OSes (drivers/xen/grant_table.c, see
  * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=drivers/xen/grant-table.c;hb=HEAD
@@ -66,6 +70,7 @@
  *     compiler barrier will still be required.
  *
  * Introducing a valid entry into the grant table:
+ * @keepindent
  *  1. Write ent->domid.
  *  2. Write ent->frame:
  *      GTF_permit_access:   Frame to which access is permitted.
@@ -73,20 +78,25 @@
  *                           frame, or zero if none.
  *  3. Write memory barrier (WMB).
  *  4. Write ent->flags, inc. valid type.
+ * @endkeepindent
  *
  * Invalidating an unused GTF_permit_access entry:
+ * @keepindent
  *  1. flags = ent->flags.
  *  2. Observe that !(flags & (GTF_reading|GTF_writing)).
  *  3. Check result of SMP-safe CMPXCHG(&ent->flags, flags, 0).
  *  NB. No need for WMB as reuse of entry is control-dependent on success of
  *      step 3, and all architectures guarantee ordering of ctrl-dep writes.
+ * @endkeepindent
  *
  * Invalidating an in-use GTF_permit_access entry:
+ *
  *  This cannot be done directly. Request assistance from the domain controller
  *  which can set a timeout on the use of a grant entry and take necessary
  *  action. (NB. This is not yet implemented!).
  *
  * Invalidating an unused GTF_accept_transfer entry:
+ * @keepindent
  *  1. flags = ent->flags.
  *  2. Observe that !(flags & GTF_transfer_committed). [*]
  *  3. Check result of SMP-safe CMPXCHG(&ent->flags, flags, 0).
@@ -97,29 +107,62 @@
  *      transferred frame is written. It is safe for the guest to spin waiting
  *      for this to occur (detect by observing GTF_transfer_completed in
  *      ent->flags).
+ * @endkeepindent
  *
  * Invalidating a committed GTF_accept_transfer entry:
  *  1. Wait for (ent->flags & GTF_transfer_completed).
  *
  * Changing a GTF_permit_access from writable to read-only:
+ *
  *  Use SMP-safe CMPXCHG to set GTF_readonly, while checking !GTF_writing.
  *
  * Changing a GTF_permit_access from read-only to writable:
+ *
  *  Use SMP-safe bit-setting instruction.
+ *
+ * Data structure fields or defines described below have the following tags:
+ * * [XEN]: This field is written by Xen and read by the sharing guest.
+ * * [GST]: This field is written by the guest and read by Xen.
+ *
+ * GRANT TABLE QUERIES AND USES
+ *
+ * @code
+ * enum grant_table_op { // GNTTABOP_* => struct gnttab_*
+ *     GNTTABOP_map_grant_ref      = 0,
+ *     GNTTABOP_unmap_grant_ref    = 1,
+ *     GNTTABOP_setup_table        = 2,
+ *     GNTTABOP_dump_table         = 3,
+ *     GNTTABOP_transfer           = 4,
+ *     GNTTABOP_copy               = 5,
+ *     GNTTABOP_query_size         = 6,
+ *     GNTTABOP_unmap_and_replace  = 7,
+ * #if __XEN_INTERFACE_VERSION__ >= 0x0003020a
+ *     GNTTABOP_set_version        = 8,
+ *     GNTTABOP_get_status_frames  = 9,
+ *     GNTTABOP_get_version        = 10,
+ *     GNTTABOP_swap_grant_ref     = 11,
+ *     GNTTABOP_cache_flush        = 12
+ * #endif
+ * };
+ *
+ * enum neg_errnoval
+ * HYPERVISOR_grant_table_op(enum grant_table_op cmd,
+ *                           void *args,
+ *                           unsigned int count)
+ * @endcode
+ *
+ * \@args points to an array of a per-command data structure. The array
+ * has \@count members
+ *
+ * @addtogroup grant_table Grant Tables
+ * @{
  */
 
-/*
+/**
  * Reference to a grant entry in a specified domain's grant table.
  */
 typedef uint32_t grant_ref_t;
 
-/*
- * A grant table comprises a packed array of grant entries in one or more
- * page frames shared between Xen and a guest.
- * [XEN]: This field is written by Xen and read by the sharing guest.
- * [GST]: This field is written by the guest and read by Xen.
- */
-
 /*
  * Version 1 of the grant table entry structure is maintained purely
  * for backwards compatibility.  New guests should use version 2.
@@ -129,15 +172,17 @@ typedef uint32_t grant_ref_t;
 #define grant_entry_v1_t grant_entry_t
 #endif
 struct grant_entry_v1 {
-    /* GTF_xxx: various type and flag information.  [XEN,GST] */
+    /** GTF_xxx: various type and flag information.  [XEN,GST] */
     uint16_t flags;
-    /* The domain being granted foreign privileges. [GST] */
+    /** The domain being granted foreign privileges. [GST] */
     domid_t  domid;
-    /*
+    /**
+     * @keepindent
      * GTF_permit_access: GFN that @domid is allowed to map and access. [GST]
      * GTF_accept_transfer: GFN that @domid is allowed to transfer into. [GST]
      * GTF_transfer_completed: MFN whose ownership transferred by @domid
      *                         (non-translated guests only). [XEN]
+     * @endkeepindent
      */
     uint32_t frame;
 };
@@ -150,60 +195,99 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
 #define GNTTAB_RESERVED_CONSOLE        0
 #define GNTTAB_RESERVED_XENSTORE       1
 
-/*
- * Type of grant entry.
- *  GTF_invalid: This grant entry grants no privileges.
- *  GTF_permit_access: Allow @domid to map/access @frame.
- *  GTF_accept_transfer: Allow @domid to transfer ownership of one page frame
- *                       to this guest. Xen writes the page number to @frame.
- *  GTF_transitive: Allow @domid to transitively access a subrange of
- *                  @trans_grant in @trans_domid.  No mappings are allowed.
- */
+/** This type of grant entry grants no privileges. */
 #define GTF_invalid         (0U<<0)
+
+/** This type of grant entry allow \@domid to map/access \@frame. */
 #define GTF_permit_access   (1U<<0)
+
+/**
+ * This type of grant entry allow \@domid to transfer ownership of one pageframe
+ * to this guest. Xen writes the page number to \@frame.
+ */
 #define GTF_accept_transfer (2U<<0)
+
+/**
+ * This type of grant entry allow \@domid to transitively access a subrange of
+ * \@trans_grant in \@trans_domid.  No mappings are allowed.
+ */
 #define GTF_transitive      (3U<<0)
+
 #define GTF_type_mask       (3U<<0)
 
-/*
- * Subflags for GTF_permit_access and GTF_transitive.
- *  GTF_readonly: Restrict @domid to read-only mappings and accesses. [GST]
- *  GTF_reading: Grant entry is currently mapped for reading by @domid. [XEN]
- *  GTF_writing: Grant entry is currently mapped for writing by @domid. [XEN]
- * Further subflags for GTF_permit_access only.
- *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used for
- *                             mappings of the grant [GST]
- *  GTF_sub_page: Grant access to only a subrange of the page.  @domid
- *                will only be allowed to copy from the grant, and not
- *                map it. [GST]
+/**
+ * @def GTF_readonly
+ * Subflag for GTF_permit_access and GTF_transitive: Restrict \@domid to
+ * read-only mappings and accesses. [GST]
  */
 #define _GTF_readonly       (2)
 #define GTF_readonly        (1U<<_GTF_readonly)
+
+/**
+ * @def GTF_reading
+ * Subflag for GTF_permit_access and GTF_transitive: Grant entry is currently
+ * mapped for reading by \@domid. [XEN]
+ */
 #define _GTF_reading        (3)
 #define GTF_reading         (1U<<_GTF_reading)
+
+/**
+ * @def GTF_writing
+ * Subflag for GTF_permit_access and GTF_transitive: Grant entry is currently
+ * mapped for writing by \@domid. [XEN]
+ */
 #define _GTF_writing        (4)
 #define GTF_writing         (1U<<_GTF_writing)
+
+/**
+ * @def GTF_PWT
+ * Subflag for GTF_permit_access only: (x86) cache attribute flags to be used
+ * for mappings of the grant [GST]
+ */
 #define _GTF_PWT            (5)
 #define GTF_PWT             (1U<<_GTF_PWT)
+
+/**
+ * @def GTF_PCD
+ * Subflag for GTF_permit_access only: (x86) cache attribute flags to be used
+ * for mappings of the grant [GST]
+ */
 #define _GTF_PCD            (6)
 #define GTF_PCD             (1U<<_GTF_PCD)
+
+/**
+ * @def GTF_PAT
+ * Subflag for GTF_permit_access only: (x86) cache attribute flags to be used
+ * for mappings of the grant [GST]
+ */
 #define _GTF_PAT            (7)
 #define GTF_PAT             (1U<<_GTF_PAT)
+
+/**
+ * @def GTF_sub_page
+ * Subflag for GTF_permit_access only: Grant access to only a subrange of the
+ * page. \@domid will only be allowed to copy from the grant, and not map it.
+ * [GST]
+ */
 #define _GTF_sub_page       (8)
 #define GTF_sub_page        (1U<<_GTF_sub_page)
 
-/*
- * Subflags for GTF_accept_transfer:
- *  GTF_transfer_committed: Xen sets this flag to indicate that it is committed
- *      to transferring ownership of a page frame. When a guest sees this flag
- *      it must /not/ modify the grant entry until GTF_transfer_completed is
- *      set by Xen.
- *  GTF_transfer_completed: It is safe for the guest to spin-wait on this flag
- *      after reading GTF_transfer_committed. Xen will always write the frame
- *      address, followed by ORing this flag, in a timely manner.
+/**
+ * @def GTF_transfer_committed
+ * Subflag for GTF_accept_transfer: Xen sets this flag to indicate that it is
+ * committed to transferring ownership of a page frame. When a guest sees this
+ * flag it must /not/ modify the grant entry until GTF_transfer_completed is
+ * set by Xen.
  */
 #define _GTF_transfer_committed (2)
 #define GTF_transfer_committed  (1U<<_GTF_transfer_committed)
+
+/**
+ * @def GTF_transfer_completed
+ * Subflag for GTF_accept_transfer: It is safe for the guest to spin-wait on
+ * this flag after reading GTF_transfer_committed. Xen will always write the
+ * frame address, followed by ORing this flag, in a timely manner.
+ */
 #define _GTF_transfer_completed (3)
 #define GTF_transfer_completed  (1U<<_GTF_transfer_completed)
 
@@ -228,17 +312,17 @@ struct grant_entry_header {
 };
 typedef struct grant_entry_header grant_entry_header_t;
 
-/*
+/**
  * Version 2 of the grant entry structure.
  */
 union grant_entry_v2 {
     grant_entry_header_t hdr;
 
-    /*
+    /**
      * This member is used for V1-style full page grants, where either:
      *
-     * -- hdr.type is GTF_accept_transfer, or
-     * -- hdr.type is GTF_permit_access and GTF_sub_page is not set.
+     * * hdr.type is GTF_accept_transfer, or
+     * * hdr.type is GTF_permit_access and GTF_sub_page is not set.
      *
      * In that case, the frame field has the same semantics as the
      * field of the same name in the V1 entry structure.
@@ -249,10 +333,10 @@ union grant_entry_v2 {
         uint64_t frame;
     } full_page;
 
-    /*
+    /**
      * If the grant type is GTF_grant_access and GTF_sub_page is set,
-     * @domid is allowed to access bytes [@page_off,@page_off+@length)
-     * in frame @frame.
+     * \@domid is allowed to access bytes [\@page_off,\@page_off+\@length)
+     * in frame \@frame.
      */
     struct {
         grant_entry_header_t hdr;
@@ -261,9 +345,9 @@ union grant_entry_v2 {
         uint64_t frame;
     } sub_page;
 
-    /*
-     * If the grant is GTF_transitive, @domid is allowed to use the
-     * grant @gref in domain @trans_domid, as if it was the local
+    /**
+     * If the grant is GTF_transitive, \@domid is allowed to use the
+     * grant \@gref in domain \@trans_domid, as if it was the local
      * domain.  Obviously, the transitive access must be compatible
      * with the original grant.
      *
@@ -277,7 +361,7 @@ union grant_entry_v2 {
         grant_ref_t gref;
     } transitive;
 
-    uint32_t __spacer[4]; /* Pad to a power of two */
+    uint32_t __spacer[4]; /**< Pad to a power of two */
 };
 typedef union grant_entry_v2 grant_entry_v2_t;
 
@@ -285,56 +369,41 @@ typedef uint16_t grant_status_t;
 
 #endif /* __XEN_INTERFACE_VERSION__ */
 
-/***********************************
- * GRANT TABLE QUERIES AND USES
- */
-
-/* ` enum neg_errnoval
- * ` HYPERVISOR_grant_table_op(enum grant_table_op cmd,
- * `                           void *args,
- * `                           unsigned int count)
- * `
- *
- * @args points to an array of a per-command data structure. The array
- * has @count members
- */
-
-/* ` enum grant_table_op { // GNTTABOP_* => struct gnttab_* */
-#define GNTTABOP_map_grant_ref        0
-#define GNTTABOP_unmap_grant_ref      1
-#define GNTTABOP_setup_table          2
-#define GNTTABOP_dump_table           3
-#define GNTTABOP_transfer             4
-#define GNTTABOP_copy                 5
-#define GNTTABOP_query_size           6
-#define GNTTABOP_unmap_and_replace    7
+#define GNTTABOP_map_grant_ref        0  /**< struct gnttab_map_grant_ref */
+#define GNTTABOP_unmap_grant_ref      1  /**< struct gnttab_unmap_grant_ref */
+#define GNTTABOP_setup_table          2  /**< struct gnttab_setup_table */
+#define GNTTABOP_dump_table           3  /**< struct gnttab_dump_table */
+#define GNTTABOP_transfer             4  /**< struct gnttab_transfer */
+#define GNTTABOP_copy                 5  /**< struct gnttab_copy */
+#define GNTTABOP_query_size           6  /**< struct gnttab_query_size */
+#define GNTTABOP_unmap_and_replace    7  /**< struct gnttab_unmap_and_replace */
 #if __XEN_INTERFACE_VERSION__ >= 0x0003020a
-#define GNTTABOP_set_version          8
-#define GNTTABOP_get_status_frames    9
-#define GNTTABOP_get_version          10
-#define GNTTABOP_swap_grant_ref	      11
-#define GNTTABOP_cache_flush	      12
+#define GNTTABOP_set_version          8  /**< struct gnttab_set_version */
+#define GNTTABOP_get_status_frames    9  /**< struct gnttab_get_status_frames */
+#define GNTTABOP_get_version          10 /**< struct gnttab_get_version */
+#define GNTTABOP_swap_grant_ref	      11 /**< struct gnttab_swap_grant_ref */
+#define GNTTABOP_cache_flush	      12 /**< struct gnttab_cache_flush */
 #endif /* __XEN_INTERFACE_VERSION__ */
-/* ` } */
 
-/*
+/**
  * Handle to track a mapping created via a grant reference.
  */
 typedef uint32_t grant_handle_t;
 
-/*
- * GNTTABOP_map_grant_ref: Map the grant entry (<dom>,<ref>) for access
- * by devices and/or host CPUs. If successful, <handle> is a tracking number
- * that must be presented later to destroy the mapping(s). On error, <status>
+/**
+ * GNTTABOP_map_grant_ref: Map the grant entry (\@dom,\@ref) for access
+ * by devices and/or host CPUs. If successful, \@handle is a tracking number
+ * that must be presented later to destroy the mapping(s). On error, \@status
  * is a negative status code.
+ *
  * NOTES:
- *  1. If GNTMAP_device_map is specified then <dev_bus_addr> is the address
+ *  1. If GNTMAP_device_map is specified then \@dev_bus_addr is the address
  *     via which I/O devices may access the granted frame.
  *  2. If GNTMAP_host_map is specified then a mapping will be added at
  *     either a host virtual address in the current address space, or at
  *     a PTE at the specified machine address.  The type of mapping to
  *     perform is selected through the GNTMAP_contains_pte flag, and the
- *     address is specified in <host_addr>.
+ *     address is specified in \@host_addr.
  *  3. Mappings should only be destroyed via GNTTABOP_unmap_grant_ref. If a
  *     host mapping is destroyed by other means then it is *NOT* guaranteed
  *     to be accounted to the correct grant reference!
@@ -342,25 +411,26 @@ typedef uint32_t grant_handle_t;
 struct gnttab_map_grant_ref {
     /* IN parameters. */
     uint64_t host_addr;
-    uint32_t flags;               /* GNTMAP_* */
+    uint32_t flags;               /**< GNTMAP_* */
     grant_ref_t ref;
     domid_t  dom;
     /* OUT parameters. */
-    int16_t  status;              /* => enum grant_status */
+    int16_t  status;              /**< GNTST_* status code */
     grant_handle_t handle;
     uint64_t dev_bus_addr;
 };
 typedef struct gnttab_map_grant_ref gnttab_map_grant_ref_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_map_grant_ref_t);
 
-/*
+/**
  * GNTTABOP_unmap_grant_ref: Destroy one or more grant-reference mappings
- * tracked by <handle>. If <host_addr> or <dev_bus_addr> is zero, that
+ * tracked by \@handle. If \@host_addr or \@dev_bus_addr is zero, that
  * field is ignored. If non-zero, they must refer to a device/host mapping
- * that is tracked by <handle>
+ * that is tracked by \@handle
+ *
  * NOTES:
  *  1. The call may fail in an undefined manner if either mapping is not
- *     tracked by <handle>.
+ *     tracked by \@handle.
  *  3. After executing a batch of unmaps, it is guaranteed that no stale
  *     mappings will remain in the device or host TLBs.
  */
@@ -370,18 +440,19 @@ struct gnttab_unmap_grant_ref {
     uint64_t dev_bus_addr;
     grant_handle_t handle;
     /* OUT parameters. */
-    int16_t  status;              /* => enum grant_status */
+    int16_t  status;              /**< GNTST_* status code */
 };
 typedef struct gnttab_unmap_grant_ref gnttab_unmap_grant_ref_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t);
 
-/*
- * GNTTABOP_setup_table: Set up a grant table for <dom> comprising at least
- * <nr_frames> pages. The frame addresses are written to the <frame_list>.
- * Only <nr_frames> addresses are written, even if the table is larger.
+/**
+ * GNTTABOP_setup_table: Set up a grant table for \@dom comprising at least
+ * \@nr_frames pages. The frame addresses are written to the \@frame_list.
+ * Only \@nr_frames addresses are written, even if the table is larger.
+ *
  * NOTES:
- *  1. <dom> may be specified as DOMID_SELF.
- *  2. Only a sufficiently-privileged domain may specify <dom> != DOMID_SELF.
+ *  1. \@dom may be specified as DOMID_SELF.
+ *  2. Only a sufficiently-privileged domain may specify \@dom != DOMID_SELF.
  *  3. Xen may not support more than a single grant-table page per domain.
  */
 struct gnttab_setup_table {
@@ -389,7 +460,7 @@ struct gnttab_setup_table {
     domid_t  dom;
     uint32_t nr_frames;
     /* OUT parameters. */
-    int16_t  status;              /* => enum grant_status */
+    int16_t  status;              /**< GNTST_* status code */
 #if __XEN_INTERFACE_VERSION__ < 0x00040300
     XEN_GUEST_HANDLE(ulong) frame_list;
 #else
@@ -399,7 +470,7 @@ struct gnttab_setup_table {
 typedef struct gnttab_setup_table gnttab_setup_table_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_setup_table_t);
 
-/*
+/**
  * GNTTABOP_dump_table: Dump the contents of the grant table to the
  * xen console. Debugging use only.
  */
@@ -407,14 +478,14 @@ struct gnttab_dump_table {
     /* IN parameters. */
     domid_t dom;
     /* OUT parameters. */
-    int16_t status;               /* => enum grant_status */
+    int16_t status;               /**< GNTST_* status code */
 };
 typedef struct gnttab_dump_table gnttab_dump_table_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_dump_table_t);
 
-/*
- * GNTTABOP_transfer: Transfer <frame> to a foreign domain. The foreign domain
- * has previously registered its interest in the transfer via <domid, ref>.
+/**
+ * GNTTABOP_transfer: Transfer \@frame to a foreign domain. The foreign domain
+ * has previously registered its interest in the transfer via \@domid, \@ref.
  *
  * Note that, even if the transfer fails, the specified page no longer belongs
  * to the calling domain *unless* the error is GNTST_bad_page.
@@ -427,13 +498,13 @@ struct gnttab_transfer {
     domid_t       domid;
     grant_ref_t   ref;
     /* OUT parameters. */
-    int16_t       status;
+    int16_t       status;               /**< GNTST_* status code */
 };
 typedef struct gnttab_transfer gnttab_transfer_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_transfer_t);
 
 
-/*
+/**
  * GNTTABOP_copy: Hypervisor based copy
  * source and destinations can be eithers MFNs or, for foreign domains,
  * grant references. the foreign domain has to grant read/write access
@@ -451,11 +522,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_transfer_t);
  * bytes to be copied.
  */
 
-#define _GNTCOPY_source_gref      (0)
-#define GNTCOPY_source_gref       (1<<_GNTCOPY_source_gref)
-#define _GNTCOPY_dest_gref        (1)
-#define GNTCOPY_dest_gref         (1<<_GNTCOPY_dest_gref)
-
 struct gnttab_copy {
     /* IN parameters. */
     struct gnttab_copy_ptr {
@@ -467,19 +533,24 @@ struct gnttab_copy {
         uint16_t offset;
     } source, dest;
     uint16_t      len;
-    uint16_t      flags;          /* GNTCOPY_* */
+    uint16_t      flags;          /**< GNTCOPY_* */
+#define _GNTCOPY_source_gref      (0)
+#define GNTCOPY_source_gref       (1<<_GNTCOPY_source_gref)
+#define _GNTCOPY_dest_gref        (1)
+#define GNTCOPY_dest_gref         (1<<_GNTCOPY_dest_gref)
     /* OUT parameters. */
     int16_t       status;
 };
 typedef struct gnttab_copy  gnttab_copy_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_copy_t);
 
-/*
+/**
  * GNTTABOP_query_size: Query the current and maximum sizes of the shared
  * grant table.
+ *
  * NOTES:
- *  1. <dom> may be specified as DOMID_SELF.
- *  2. Only a sufficiently-privileged domain may specify <dom> != DOMID_SELF.
+ *  1. \@dom may be specified as DOMID_SELF.
+ *  2. Only a sufficiently-privileged domain may specify \@dom != DOMID_SELF.
  */
 struct gnttab_query_size {
     /* IN parameters. */
@@ -487,19 +558,20 @@ struct gnttab_query_size {
     /* OUT parameters. */
     uint32_t nr_frames;
     uint32_t max_nr_frames;
-    int16_t  status;              /* => enum grant_status */
+    int16_t  status;              /**< GNTST_* status code */
 };
 typedef struct gnttab_query_size gnttab_query_size_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_query_size_t);
 
-/*
+/**
  * GNTTABOP_unmap_and_replace: Destroy one or more grant-reference mappings
- * tracked by <handle> but atomically replace the page table entry with one
- * pointing to the machine address under <new_addr>.  <new_addr> will be
+ * tracked by \@handle but atomically replace the page table entry with one
+ * pointing to the machine address under \@new_addr. \@new_addr will be
  * redirected to the null entry.
+ *
  * NOTES:
  *  1. The call may fail in an undefined manner if either mapping is not
- *     tracked by <handle>.
+ *     tracked by \@handle.
  *  2. After executing a batch of unmaps, it is guaranteed that no stale
  *     mappings will remain in the device or host TLBs.
  */
@@ -509,13 +581,13 @@ struct gnttab_unmap_and_replace {
     uint64_t new_addr;
     grant_handle_t handle;
     /* OUT parameters. */
-    int16_t  status;              /* => enum grant_status */
+    int16_t  status;              /**< GNTST_* status code */
 };
 typedef struct gnttab_unmap_and_replace gnttab_unmap_and_replace_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t);
 
 #if __XEN_INTERFACE_VERSION__ >= 0x0003020a
-/*
+/**
  * GNTTABOP_set_version: Request a particular version of the grant
  * table shared table structure.  This operation may be used to toggle
  * between different versions, but must be performed while no grants
@@ -529,32 +601,33 @@ typedef struct gnttab_set_version gnttab_set_version_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_set_version_t);
 
 
-/*
+/**
  * GNTTABOP_get_status_frames: Get the list of frames used to store grant
- * status for <dom>. In grant format version 2, the status is separated
+ * status for \@dom. In grant format version 2, the status is separated
  * from the other shared grant fields to allow more efficient synchronization
  * using barriers instead of atomic cmpexch operations.
- * <nr_frames> specify the size of vector <frame_list>.
- * The frame addresses are returned in the <frame_list>.
- * Only <nr_frames> addresses are returned, even if the table is larger.
+ * \@nr_frames specify the size of vector \@frame_list.
+ * The frame addresses are returned in the \@frame_list.
+ * Only \@nr_frames addresses are returned, even if the table is larger.
+ *
  * NOTES:
- *  1. <dom> may be specified as DOMID_SELF.
- *  2. Only a sufficiently-privileged domain may specify <dom> != DOMID_SELF.
+ *  1. \@dom may be specified as DOMID_SELF.
+ *  2. Only a sufficiently-privileged domain may specify \@dom != DOMID_SELF.
  */
 struct gnttab_get_status_frames {
     /* IN parameters. */
     uint32_t nr_frames;
     domid_t  dom;
     /* OUT parameters. */
-    int16_t  status;              /* => enum grant_status */
+    int16_t  status;              /**< GNTST_* status code */
     XEN_GUEST_HANDLE(uint64_t) frame_list;
 };
 typedef struct gnttab_get_status_frames gnttab_get_status_frames_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_get_status_frames_t);
 
-/*
+/**
  * GNTTABOP_get_version: Get the grant table version which is in
- * effect for domain <dom>.
+ * effect for domain \@dom.
  */
 struct gnttab_get_version {
     /* IN parameters */
@@ -566,7 +639,7 @@ struct gnttab_get_version {
 typedef struct gnttab_get_version gnttab_get_version_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_get_version_t);
 
-/*
+/**
  * GNTTABOP_swap_grant_ref: Swap the contents of two grant entries.
  */
 struct gnttab_swap_grant_ref {
@@ -574,12 +647,12 @@ struct gnttab_swap_grant_ref {
     grant_ref_t ref_a;
     grant_ref_t ref_b;
     /* OUT parameters */
-    int16_t status;             /* => enum grant_status */
+    int16_t status;             /**< GNTST_* status code */
 };
 typedef struct gnttab_swap_grant_ref gnttab_swap_grant_ref_t;
 DEFINE_XEN_GUEST_HANDLE(gnttab_swap_grant_ref_t);
 
-/*
+/**
  * Issue one or more cache maintenance operations on a portion of a
  * page granted to the calling domain by a foreign domain.
  */
@@ -588,8 +661,8 @@ struct gnttab_cache_flush {
         uint64_t dev_bus_addr;
         grant_ref_t ref;
     } a;
-    uint16_t offset; /* offset from start of grant */
-    uint16_t length; /* size within the grant */
+    uint16_t offset; /**< offset from start of grant */
+    uint16_t length; /**< size within the grant */
 #define GNTTAB_CACHE_CLEAN          (1u<<0)
 #define GNTTAB_CACHE_INVAL          (1u<<1)
 #define GNTTAB_CACHE_SOURCE_GREF    (1u<<31)
@@ -600,40 +673,60 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 
 #endif /* __XEN_INTERFACE_VERSION__ */
 
-/*
- * Bitfield values for gnttab_map_grant_ref.flags.
+/**
+ * @def GNTMAP_device_map
+ * Bitfield value for gnttab_map_grant_ref.flags: Map the grant entry for
+ * access by I/O devices.
  */
- /* Map the grant entry for access by I/O devices. */
 #define _GNTMAP_device_map      (0)
 #define GNTMAP_device_map       (1<<_GNTMAP_device_map)
- /* Map the grant entry for access by host CPUs. */
+
+/**
+ * @def GNTMAP_host_map
+ * Bitfield value for gnttab_map_grant_ref.flags: Map the grant entry for
+ * access by host CPUs.
+ */
 #define _GNTMAP_host_map        (1)
 #define GNTMAP_host_map         (1<<_GNTMAP_host_map)
- /* Accesses to the granted frame will be restricted to read-only access. */
+
+/**
+ * @def GNTMAP_readonly
+ * Bitfield value for gnttab_map_grant_ref.flags: Accesses to the granted frame
+ * will be restricted to read-only access.
+ */
 #define _GNTMAP_readonly        (2)
 #define GNTMAP_readonly         (1<<_GNTMAP_readonly)
- /*
-  * GNTMAP_host_map subflag:
-  *  0 => The host mapping is usable only by the guest OS.
-  *  1 => The host mapping is usable by guest OS + current application.
-  */
+
+/**
+ * @def GNTMAP_application_map
+ * Bitfield value for gnttab_map_grant_ref.flags.
+ *
+ * GNTMAP_host_map subflag:
+ * * 0 => The host mapping is usable only by the guest OS.
+ * * 1 => The host mapping is usable by guest OS + current application.
+ */
 #define _GNTMAP_application_map (3)
 #define GNTMAP_application_map  (1<<_GNTMAP_application_map)
 
- /*
-  * GNTMAP_contains_pte subflag:
-  *  0 => This map request contains a host virtual address.
-  *  1 => This map request contains the machine addess of the PTE to update.
-  */
+/**
+ * @def GNTMAP_contains_pte
+ * Bitfield value for gnttab_map_grant_ref.flags.
+ *
+ * GNTMAP_contains_pte subflag:
+ * * 0 => This map request contains a host virtual address.
+ * * 1 => This map request contains the machine addess of the PTE to update.
+ */
 #define _GNTMAP_contains_pte    (4)
 #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
 
 #define _GNTMAP_can_fail        (5)
 #define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
 
-/*
- * Bits to be placed in guest kernel available PTE bits (architecture
- * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set).
+/**
+ * @def GNTMAP_guest_avail_mask
+ * Bitfield value for gnttab_map_grant_ref.flags: Bits to be placed in guest
+ * kernel available PTE bits (architecture dependent; only supported when
+ * XENFEAT_gnttab_map_avail_bits is set).
  */
 #define _GNTMAP_guest_avail0    (16)
 #define GNTMAP_guest_avail_mask ((uint32_t)~0 << _GNTMAP_guest_avail0)
@@ -641,21 +734,19 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 /*
  * Values for error status returns. All errors are -ve.
  */
-/* ` enum grant_status { */
-#define GNTST_okay             (0)  /* Normal return.                        */
-#define GNTST_general_error    (-1) /* General undefined error.              */
-#define GNTST_bad_domain       (-2) /* Unrecognsed domain id.                */
-#define GNTST_bad_gntref       (-3) /* Unrecognised or inappropriate gntref. */
-#define GNTST_bad_handle       (-4) /* Unrecognised or inappropriate handle. */
-#define GNTST_bad_virt_addr    (-5) /* Inappropriate virtual address to map. */
-#define GNTST_bad_dev_addr     (-6) /* Inappropriate device address to unmap.*/
-#define GNTST_no_device_space  (-7) /* Out of space in I/O MMU.              */
-#define GNTST_permission_denied (-8) /* Not enough privilege for operation.  */
-#define GNTST_bad_page         (-9) /* Specified page was invalid for op.    */
-#define GNTST_bad_copy_arg    (-10) /* copy arguments cross page boundary.   */
-#define GNTST_address_too_big (-11) /* transfer page address too large.      */
-#define GNTST_eagain          (-12) /* Operation not done; try again.        */
-/* ` } */
+#define GNTST_okay             (0)  /**< Normal return.                        */
+#define GNTST_general_error    (-1) /**< General undefined error.              */
+#define GNTST_bad_domain       (-2) /**< Unrecognsed domain id.                */
+#define GNTST_bad_gntref       (-3) /**< Unrecognised or inappropriate gntref. */
+#define GNTST_bad_handle       (-4) /**< Unrecognised or inappropriate handle. */
+#define GNTST_bad_virt_addr    (-5) /**< Inappropriate virtual address to map. */
+#define GNTST_bad_dev_addr     (-6) /**< Inappropriate device address to unmap.*/
+#define GNTST_no_device_space  (-7) /**< Out of space in I/O MMU.              */
+#define GNTST_permission_denied (-8) /**< Not enough privilege for operation.  */
+#define GNTST_bad_page         (-9) /**< Specified page was invalid for op.    */
+#define GNTST_bad_copy_arg    (-10) /**< copy arguments cross page boundary.   */
+#define GNTST_address_too_big (-11) /**< transfer page address too large.      */
+#define GNTST_eagain          (-12) /**< Operation not done; try again.        */
 
 #define GNTTABOP_error_msgs {                   \
     "okay",                                     \
@@ -673,6 +764,10 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
     "operation not done; try again"             \
 }
 
+/**
+ * @}
+ */
+
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
 
 /*
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150105.277664 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGQ-0006v0-9F; Mon, 05 Jul 2021 10:55:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150105.277664; Mon, 05 Jul 2021 10:55:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGQ-0006uE-0y; Mon, 05 Jul 2021 10:55:46 +0000
Received: by outflank-mailman (input) for mailman id 150105;
 Mon, 05 Jul 2021 10:55:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MGO-0003rB-D9
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:44 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 24bae97d-96b5-498a-bcec-3f13d65b9b7f;
 Mon, 05 Jul 2021 10:55:26 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B33B41042;
 Mon,  5 Jul 2021 03:55:26 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 630913F5A1;
 Mon,  5 Jul 2021 03:55:25 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 24bae97d-96b5-498a-bcec-3f13d65b9b7f
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 6/9] docs: add doxygen preprocessor and related files
Date: Mon,  5 Jul 2021 11:51:00 +0100
Message-Id: <20210705105103.14509-7-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Add preprocessor called by doxygen before parsing headers,
it will include in every header a doxygen_include.h file
that provides missing defines and includes that are
usually passed by the compiler, it will also handle
the problem of anonymous union/struct not recognized by
doxygen giving them names. There is only one limitation
that is described by a comment in the script.

Add doxy_input.list that is a text file containing the
relative path to the source code file to be parsed by
doxygen. The path sould be relative to the xen folder:
E.g. xen/include/public/grant_table.h

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
---
v7 changes:
- add comment to address one limitation of the
preprocessor and change commit message.
---
 docs/xen-doxygen/doxy-preprocessor.py | 116 ++++++++++++++++++++++++++
 docs/xen-doxygen/doxy_input.list      |   0
 docs/xen-doxygen/doxygen_include.h.in |  32 +++++++
 3 files changed, 148 insertions(+)
 create mode 100755 docs/xen-doxygen/doxy-preprocessor.py
 create mode 100644 docs/xen-doxygen/doxy_input.list
 create mode 100644 docs/xen-doxygen/doxygen_include.h.in

diff --git a/docs/xen-doxygen/doxy-preprocessor.py b/docs/xen-doxygen/doxy-preprocessor.py
new file mode 100755
index 0000000000..90ba030e7e
--- /dev/null
+++ b/docs/xen-doxygen/doxy-preprocessor.py
@@ -0,0 +1,116 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2021, Arm Limited.
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+
+import os, sys, re
+
+
+# Variables that holds the preprocessed header text
+output_text = ""
+header_file_name = ""
+
+# Variables to enumerate the anonymous structs/unions
+anonymous_struct_count = 0
+anonymous_union_count = 0
+
+
+def error(text):
+    sys.stderr.write("{}\n".format(text))
+    sys.exit(1)
+
+
+def write_to_output(text):
+    sys.stdout.write(text)
+
+
+def insert_doxygen_header(text):
+    # Here the strategy is to insert the #include <doxygen_include.h> in the
+    # first line of the header
+    abspath = os.path.dirname(os.path.abspath(__file__))
+    text += "#include \"{}/doxygen_include.h\"\n".format(abspath)
+
+    return text
+
+
+def enumerate_anonymous(match):
+    global anonymous_struct_count
+    global anonymous_union_count
+
+    if "struct" in match.group(1):
+        label = "anonymous_struct_%d" % anonymous_struct_count
+        anonymous_struct_count += 1
+    else:
+        label = "anonymous_union_%d" % anonymous_union_count
+        anonymous_union_count += 1
+
+    return match.group(1) + " " + label + " {"
+
+
+def manage_anonymous_structs_unions(text):
+    # Match anonymous unions/structs with this pattern:
+    # struct/union {
+    #     [...]
+    #
+    # and substitute it in this way:
+    #
+    # struct anonymous_struct_# {
+    #     [...]
+    # or
+    # union anonymous_union_# {
+    #     [...]
+    # where # is a counter starting from zero, different between structs and
+    # unions
+    # The main limitation is that this script is called for each header and the
+    # counters are not global, so there can be anonymous_{struct/union}_# with
+    # the same name across headers.
+    # Doxygen will handle them correctly if they are part of another data
+    # structure because it will name them as
+    # upper_data_structure::anonymous_{struct/union}_#.
+    #
+    # We don't count anonymous union/struct that are part of a typedef because
+    # they don't create any issue for doxygen
+    text = re.sub(
+        "(?<!typedef\s)(struct|union)\s+?\{",
+        enumerate_anonymous,
+        text,
+        flags=re.S
+    )
+
+    return text
+
+
+def main(argv):
+    global output_text
+    global header_file_name
+
+    if len(argv) != 1:
+        error("Script called without arguments!")
+
+    header_file_name = argv[0]
+
+    # Open header file
+    input_header_file = open(header_file_name, 'r')
+    # Read all lines
+    lines = input_header_file.readlines()
+
+    # Inject config.h and some defines in the current header, during compilation
+    # this job is done by the -include argument passed to the compiler.
+    output_text = insert_doxygen_header(output_text)
+
+    # Load file content in a variable
+    for line in lines:
+        output_text += "{}".format(line)
+
+    # Try to get rid of any anonymous union/struct
+    output_text = manage_anonymous_structs_unions(output_text)
+
+    # Final stage of the preprocessor, print the output to stdout
+    write_to_output(output_text)
+
+
+if __name__ == "__main__":
+    main(sys.argv[1:])
+    sys.exit(0)
diff --git a/docs/xen-doxygen/doxy_input.list b/docs/xen-doxygen/doxy_input.list
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/xen-doxygen/doxygen_include.h.in b/docs/xen-doxygen/doxygen_include.h.in
new file mode 100644
index 0000000000..df284f3931
--- /dev/null
+++ b/docs/xen-doxygen/doxygen_include.h.in
@@ -0,0 +1,32 @@
+/*
+ * Doxygen include header
+ * It supplies the xen/include/xen/config.h that is included using the -include
+ * argument of the compiler in Xen Makefile.
+ * Other macros are defined because they are usually provided by the compiler.
+ *
+ * Copyright (C) 2021 ARM Limited
+ *
+ * Author: Luca Fancellu <luca.fancellu@arm.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ */
+
+#include "@XEN_BASE@/xen/include/xen/config.h"
+
+#if defined(CONFIG_X86_64)
+
+#define __x86_64__ 1
+
+#elif defined(CONFIG_ARM_64)
+
+#define __aarch64__ 1
+
+#elif defined(CONFIG_ARM_32)
+
+#define __arm__ 1
+
+#else
+
+#error Architecture not supported/recognized.
+
+#endif
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 10:55:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 10:55:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150108.277675 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGU-0007hf-Kc; Mon, 05 Jul 2021 10:55:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150108.277675; Mon, 05 Jul 2021 10:55:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0MGU-0007gi-G4; Mon, 05 Jul 2021 10:55:50 +0000
Received: by outflank-mailman (input) for mailman id 150108;
 Mon, 05 Jul 2021 10:55:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=luca.fancellu@srs-us1.protection.inumbo.net>)
 id 1m0MGT-0003rB-DB
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 10:55:49 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 3c1f91db-b0f4-4e2b-8467-03772ff4fa00;
 Mon, 05 Jul 2021 10:55:29 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C65C71063;
 Mon,  5 Jul 2021 03:55:28 -0700 (PDT)
Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com
 [10.1.197.16])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E66E83F5A1;
 Mon,  5 Jul 2021 03:55:26 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3c1f91db-b0f4-4e2b-8467-03772ff4fa00
From: Luca Fancellu <luca.fancellu@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	wei.chen@arm.com,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v7 7/9] docs: Change Makefile and sphinx configuration for doxygen
Date: Mon,  5 Jul 2021 11:51:01 +0100
Message-Id: <20210705105103.14509-8-luca.fancellu@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210705105103.14509-1-luca.fancellu@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>

Modify docs/Makefile to call doxygen and generate sphinx
html documentation given the doxygen XML output.

Modify docs/conf.py sphinx configuration file to setup
the breathe extension that works as bridge between
sphinx and doxygen.

Add some files to the .gitignore to ignore some
generated files for doxygen.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
---
v7 changes:
- in conf.py, get DOXYGEN_OUTPUT as environmental
variable and add new types into cpp_id_attributes
---
 .gitignore    |  6 ++++++
 docs/Makefile | 43 ++++++++++++++++++++++++++++++++++++++++---
 docs/conf.py  | 43 ++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 86 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore
index 38a085e398..ef0b0ed101 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,6 +58,12 @@ docs/man7/
 docs/man8/
 docs/pdf/
 docs/txt/
+docs/doxygen-output
+docs/sphinx
+docs/xen.doxyfile
+docs/xen.doxyfile.tmp
+docs/xen-doxygen/doxygen_include.h
+docs/xen-doxygen/doxygen_include.h.tmp
 extras/mini-os*
 install/*
 stubdom/*-minios-config.mk
diff --git a/docs/Makefile b/docs/Makefile
index 8de1efb6f5..c0699a2f1b 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -17,6 +17,18 @@ TXTSRC-y := $(sort $(shell find misc -name '*.txt' -print))
 
 PANDOCSRC-y := $(sort $(shell find designs/ features/ misc/ process/ specs/ \( -name '*.pandoc' -o -name '*.md' \) -print))
 
+# Directory in which the doxygen documentation is created
+# This must be kept in sync with breathe_projects value in conf.py
+DOXYGEN_OUTPUT = doxygen-output
+
+# Doxygen input headers from xen-doxygen/doxy_input.list file
+DOXY_LIST_SOURCES != cat "xen-doxygen/doxy_input.list"
+DOXY_LIST_SOURCES := $(realpath $(addprefix $(XEN_ROOT)/,$(DOXY_LIST_SOURCES)))
+
+DOXY_DEPS := xen.doxyfile \
+			 xen-doxygen/mainpage.md \
+			 xen-doxygen/doxygen_include.h
+
 # Documentation targets
 $(foreach i,$(MAN_SECTIONS), \
   $(eval DOC_MAN$(i) := $(patsubst man/%.$(i),man$(i)/%.$(i), \
@@ -46,8 +58,29 @@ all: build
 build: html txt pdf man-pages figs
 
 .PHONY: sphinx-html
-sphinx-html:
-	sphinx-build -b html . sphinx/html
+sphinx-html: $(DOXY_DEPS) $(DOXY_LIST_SOURCES)
+ifneq ($(SPHINXBUILD),no)
+	$(DOXYGEN) xen.doxyfile
+	XEN_ROOT=$(realpath $(XEN_ROOT)) DOXYGEN_OUTPUT=$(DOXYGEN_OUTPUT) \
+		$(SPHINXBUILD) -b html . sphinx/html
+else
+	@echo "Sphinx is not installed; skipping sphinx-html documentation."
+endif
+
+xen.doxyfile: xen.doxyfile.in xen-doxygen/doxy_input.list
+	@echo "Generating $@"
+	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< \
+		| sed -e "s,@DOXY_OUT@,$(DOXYGEN_OUTPUT),g" > $@.tmp
+	@$(foreach inc,\
+		$(DOXY_LIST_SOURCES),\
+		echo "INPUT += \"$(inc)\"" >> $@.tmp; \
+	)
+	mv $@.tmp $@
+
+xen-doxygen/doxygen_include.h: xen-doxygen/doxygen_include.h.in
+	@echo "Generating $@"
+	@sed -e "s,@XEN_BASE@,$(realpath $(XEN_ROOT)),g" $< > $@.tmp
+	@mv $@.tmp $@
 
 .PHONY: html
 html: $(DOC_HTML) html/index.html
@@ -71,7 +104,11 @@ clean: clean-man-pages
 	$(MAKE) -C figs clean
 	rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~
 	rm -rf *.ilg *.log *.ind *.toc *.bak *.tmp core
-	rm -rf html txt pdf sphinx/html
+	rm -rf html txt pdf sphinx $(DOXYGEN_OUTPUT)
+	rm -f xen.doxyfile
+	rm -f xen.doxyfile.tmp
+	rm -f xen-doxygen/doxygen_include.h
+	rm -f xen-doxygen/doxygen_include.h.tmp
 
 .PHONY: distclean
 distclean: clean
diff --git a/docs/conf.py b/docs/conf.py
index 50e41501db..d5cd305f19 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -13,13 +13,17 @@
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
 #
-# import os
-# import sys
+import os
+import sys
 # sys.path.insert(0, os.path.abspath('.'))
 
 
 # -- Project information -----------------------------------------------------
 
+if "XEN_ROOT" not in os.environ:
+    sys.exit("$XEN_ROOT environment variable undefined.")
+XEN_ROOT = os.path.abspath(os.environ["XEN_ROOT"])
+
 project = u'Xen'
 copyright = u'2019, The Xen development community'
 author = u'The Xen development community'
@@ -44,6 +48,10 @@ finally:
     else:
         version = release = u"unknown version"
 
+if "DOXYGEN_OUTPUT" not in os.environ:
+    sys.exit("$DOXYGEN_OUTPUT environment variable undefined.")
+xen_doxygen_output = os.environ["DOXYGEN_OUTPUT"]
+
 # -- General configuration ---------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
@@ -53,7 +61,8 @@ needs_sphinx = '1.4'
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
-extensions = []
+# breathe -> extension that integrates doxygen xml output with sphinx
+extensions = ['breathe']
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -175,6 +184,34 @@ texinfo_documents = [
      'Miscellaneous'),
 ]
 
+# -- Options for Breathe extension -------------------------------------------
+
+breathe_projects = {
+    "Xen": "{}/docs/{}/xml".format(XEN_ROOT, xen_doxygen_output)
+}
+breathe_default_project = "Xen"
+
+breathe_domain_by_extension = {
+    "h": "c",
+    "c": "c",
+}
+breathe_separate_member_pages = True
+breathe_show_enumvalue_initializer = True
+breathe_show_define_initializer = True
+
+# Qualifiers to a function are causing Sphihx/Breathe to warn about
+# Error when parsing function declaration and more.  This is a list
+# of strings that the parser additionally should accept as
+# attributes.
+cpp_id_attributes = [
+    '__syscall', '__deprecated', '__may_alias',
+    '__used', '__unused', '__weak',
+    '__DEPRECATED_MACRO', 'FUNC_NORETURN',
+    '__subsystem', '__packed', '__init',
+    '__attribute__', '__aligned__'
+]
+c_id_attributes = cpp_id_attributes
+
 
 # -- Options for Epub output -------------------------------------------------
 
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 11:27:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 11:27:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150158.277686 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Mkx-0004M9-UD; Mon, 05 Jul 2021 11:27:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150158.277686; Mon, 05 Jul 2021 11:27:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Mkx-0004M2-RD; Mon, 05 Jul 2021 11:27:19 +0000
Received: by outflank-mailman (input) for mailman id 150158;
 Mon, 05 Jul 2021 11:27:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0Mkw-0004Lw-AU
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 11:27:18 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.220])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0145efd7-a439-4bb9-a1a2-e65b6dc99917;
 Mon, 05 Jul 2021 11:27:16 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65BR9LuB
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 13:27:09 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0145efd7-a439-4bb9-a1a2-e65b6dc99917
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625484430;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=kDJw5Tk/nHHHPMSp2tcxaOrmHWkx5UmSIVMwA4NxEn4=;
    b=Dw4jVhuobhTIYt1M3lM/r2kBk/DkYu+2dq/jrXsYUcTJ3DNa9IqSMmUrJW7J77ORd5
    dDdv7rwg7nsqgp13ZzmXfKTmAO5I/9UAWjp55iy1R3NnbZixgWunO4faalHbp4ett//N
    yasCs6zpSHc/lnPAnq4hhJaqySUDRBzc9Qm59dsqea8t4Ky71PjBTKWdXDPjTwBmGnVk
    qNPeIwx0/SwhZG+LKTlAJAG04ZXcz7LneS3HifdSoBsBLAP+Z0QcadU4d6KGMwcL/aIT
    fI8dcXgT501cdplEerFMH5xuD2eEg+iT6LGZzR87XbBbtbqtqZOusx4BKPDfAFB0cKMR
    PkdA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 13:27:00 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 15/40] tools: prepare to allocate saverestore
 arrays once
Message-ID: <20210705132700.05d92744.olaf@aepfle.de>
In-Reply-To: <644a7a4c-4fab-07be-2e69-2637254de859@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-16-olaf@aepfle.de>
	<644a7a4c-4fab-07be-2e69-2637254de859@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/XgVQo8WahRDWVUNFLYxNH_g";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/XgVQo8WahRDWVUNFLYxNH_g
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 11:44:30 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> On 01/07/2021 10:56, Olaf Hering wrote:
> I agree that the repeated alloc/free of same-sized memory regions on
> each iteration is a waste.=C2=A0 However, if we are going to fix this by
> using one-off allocations, then we want to compensate with logic such as
> the call to VALGRIND_MAKE_MEM_UNDEFINED() in flush_batch(), and I think
> we still need individual allocations to let the tools work properly.

If this is a concern, lets just do a few individual arrays.

> > This patch is just prepartion, subsequent changes will populate the arr=
ays.
> >
> > Once all changes are applied, migration of a busy HVM domU changes like=
 that:
> >
> > Without this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a2=
0963b3 xen_testing):
> > 2020-10-29 10:23:10.711+0000: xc: show_transfer_rate: 23663128 bytes + =
2879563 pages in 55.324905335 sec, 203 MiB/sec: Internal error
> > 2020-10-29 10:23:35.115+0000: xc: show_transfer_rate: 16829632 bytes + =
2097552 pages in 24.401179720 sec, 335 MiB/sec: Internal error
> > 2020-10-29 10:23:59.436+0000: xc: show_transfer_rate: 16829032 bytes + =
2097478 pages in 24.319025928 sec, 336 MiB/sec: Internal error
> > 2020-10-29 10:24:23.844+0000: xc: show_transfer_rate: 16829024 bytes + =
2097477 pages in 24.406992500 sec, 335 MiB/sec: Internal error
> > 2020-10-29 10:24:48.292+0000: xc: show_transfer_rate: 16828912 bytes + =
2097463 pages in 24.446489027 sec, 335 MiB/sec: Internal error
> > 2020-10-29 10:25:01.816+0000: xc: show_transfer_rate: 16836080 bytes + =
2098356 pages in 13.447091818 sec, 609 MiB/sec: Internal error
> >
> > With this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a2096=
3b3 xen_unstable):
> > 2020-10-28 21:26:05.074+0000: xc: show_transfer_rate: 23663128 bytes + =
2879563 pages in 52.564054368 sec, 213 MiB/sec: Internal error
> > 2020-10-28 21:26:23.527+0000: xc: show_transfer_rate: 16830040 bytes + =
2097603 pages in 18.450592015 sec, 444 MiB/sec: Internal error
> > 2020-10-28 21:26:41.926+0000: xc: show_transfer_rate: 16830944 bytes + =
2097717 pages in 18.397862306 sec, 445 MiB/sec: Internal error
> > 2020-10-28 21:27:00.339+0000: xc: show_transfer_rate: 16829176 bytes + =
2097498 pages in 18.411973339 sec, 445 MiB/sec: Internal error
> > 2020-10-28 21:27:18.643+0000: xc: show_transfer_rate: 16828592 bytes + =
2097425 pages in 18.303326695 sec, 447 MiB/sec: Internal error
> > 2020-10-28 21:27:26.289+0000: xc: show_transfer_rate: 16835952 bytes + =
2098342 pages in 7.579846749 sec, 1081 MiB/sec: Internal error =20
>=20
> These are good numbers, and clearly show that there is some value here,
> but shouldn't they be in the series header?=C2=A0 They're not terribly
> relevant to this patch specifically.

The cover letter is unfortunately not under version control.
Perhaps there are ways with git notes, I never use it.

> Also, while I can believe that the first sample is slower than the later
> ones (in particular, during the first round, we've got to deal with the
> non-RAM regions too and therefore spend more time making hypercalls),
> I'm not sure I believe the final sample.=C2=A0 Given the byte/page count,=
 the
> substantially smaller elapsed time looks suspicious.

The first one is slower because it has to wait for the receiver to allocate=
 pages.
But maybe as you said there are other aspects as well.
The last one is always way faster because apparently map/unmap is less cost=
ly with a stopped guest.
Right now the code may reach up to 15Gbit/s. The next step is to map the do=
mU just once to reach wirespeed.

> Are these observations with an otherwise idle dom0?

Yes. Idle dom0 and a domU busy with touching its memory.

Unfortunately, I'm not able to prove the reported gain with the systems I h=
ave today.
I'm waiting for preparation of different hardware, right now I have only a =
pair of CoyotePass and WilsonCity.

I'm sure there were NUMA effects involved. Last years libvirt was unable to=
 properly pin vcpus. If I pin all the involved memory to node#0 there is so=
me jitter in the logged numbers, but no obvious improvement. The fist itera=
tion is slightly faster, but that is it.

Meanwhile I think this commit message needs to be redone.

> Even if CPU time in dom0 wasn't the bottlekneck with a 1G link, the
> reduction in CPU time you observe at higher link speeds will still be
> making a difference at 1G, and will probably be visible if you perform
> multiple concurrent migrations.

Yes, I will see what numbers I get with two or more migrations running in p=
arallel.

Olaf

--Sig_/XgVQo8WahRDWVUNFLYxNH_g
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDi7IQACgkQ86SN7mm1
DoAwwA//XF8PXPFKJLtFNJCTMf4Xe8Rjl9ERKY6N/vecZot5SBluwct6qRYmekVp
aj6OE6Nclpk1hru2E5lH2cXWa6PqgWoRVWzfpKeBdovagNLmdZnKbnLAG1STuIKW
N6JgTjgAdrIYSFAXnJ70irXc+rL3Za00w3WbSGnCXqeQx7Bjb+WAMLSafs9ifr1W
oFmKwDGsUpJckvJ5UA2WMS4gwZmF3ImitNWwM0IAXBqOYlzk4HqSkPuzYmoXatCq
TJZvs9xeqU5ZSoUmWVMIqr32bYHPx6WEGY59j3JHhdvVuGOiN9EYxcT+g4g+O62f
mYlMyj+0SBlB0AozPar4CBzyFsjeCKVDR8UJrAZrPShY8sXG0fmLf9JSs6eX10eJ
H7qHhvzOjBVO9+WFbWjB2uJvJNE8ovno9+DKXeXHeBGXLsJQDLlg7zMERwmPmgue
k+3QLD5aVM2RFbJcttUhKzTub4AqQb1F2Mq6OYykalzU10mY1dVqHRARpOp2FprJ
CnyFLCbAzF977BKBMQfXTt5gGzDGdyzZ/Q4Cdt9vbTf2aPEOqM/dlQcFeQwHV1Rw
ZwlzT/9HfmsIzsjIzOUveX3NZpLcNEgXklWfVYJpGoNcaxJEeceF+TAcCsNV1yPi
soekoN++h2xwe/RZy6eRJZWT6z0rqbJndPk+T73NQ9LXLRBBtcs=
=Xm59
-----END PGP SIGNATURE-----

--Sig_/XgVQo8WahRDWVUNFLYxNH_g--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 11:52:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 11:52:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150166.277698 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0N9U-0007Oy-Rs; Mon, 05 Jul 2021 11:52:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150166.277698; Mon, 05 Jul 2021 11:52:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0N9U-0007Or-ON; Mon, 05 Jul 2021 11:52:40 +0000
Received: by outflank-mailman (input) for mailman id 150166;
 Mon, 05 Jul 2021 11:52:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0N9S-0007Oh-O0; Mon, 05 Jul 2021 11:52:38 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0N9S-0005eW-E9; Mon, 05 Jul 2021 11:52:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0N9S-0002UK-0V; Mon, 05 Jul 2021 11:52:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0N9R-0000wh-WD; Mon, 05 Jul 2021 11:52:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=kKvAxVv+OS4odWpo75YFafMIiEhwuZNMz9Ueua5aO7c=; b=kdUZs5jhhiL+qAcebwIFJY/+M9
	UmCeNHzic1pzI9YKmZNthFFJ/5tEZCgL+vubCmZUbSzD4ptGhlknHa3tuUxZuVVT9q5Eawq/poWBm
	qr7JW+VTfAKuryCy+L7X+ofm9PcYdthxqb/FgCm51iN4RJe+oiTL/gODMSLQuDcndG0Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163305-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163305: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-libvirt-vhd:guest-saverestore:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
X-Osstest-Versions-That:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 11:52:37 +0000

flight 163305 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163305/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-libvirt-vhd 16 guest-saverestore fail in 163293 pass in 163305
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail in 163293 pass in 163305
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 18 guest-start/debianhvm.repeat fail pass in 163293

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

version targeted for testing:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8
baseline version:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8

Last test of basis   163305  2021-07-05 01:53:46 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 11:58:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 11:58:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150174.277711 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0NEr-00088w-Nd; Mon, 05 Jul 2021 11:58:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150174.277711; Mon, 05 Jul 2021 11:58:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0NEr-00088p-KV; Mon, 05 Jul 2021 11:58:13 +0000
Received: by outflank-mailman (input) for mailman id 150174;
 Mon, 05 Jul 2021 11:58:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=cjuk=L5=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0NEq-00088j-7D
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 11:58:12 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 44ebe44c-dd88-11eb-8443-12813bfff9fa;
 Mon, 05 Jul 2021 11:58:11 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 6432822A29;
 Mon,  5 Jul 2021 11:58:10 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 3663E1367E;
 Mon,  5 Jul 2021 11:58:10 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id YEpWC9Lz4mB8DwAAGKfGzw
 (envelope-from <jgross@suse.com>); Mon, 05 Jul 2021 11:58:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44ebe44c-dd88-11eb-8443-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625486290; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type;
	bh=yphc6Q5FLWO8S1QXeAu1hcxDjNcijmDgWKcQ7DSaeGM=;
	b=iGT/i//QvmVqlS6POKmHlvtwXpLccCME49I/92dDDCyOP+7Q/HssWmu2RoovW76Z/QHgxs
	ruSFb0XNmrWJCS2schjC5W59ZbR49pNmqfpvdyrZ2F/srp+P8+nK5OIiVLsHOnt9KAWt55
	6hqOi81V3+C6QfRVg3Cla5ILtlRpscU=
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 "stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: Ross Lagerwall <ross.lagerwall@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
From: Juergen Gross <jgross@suse.com>
Subject: Backport of commit 3de218ff39b9e3f0d4
Message-ID: <194665ee-3a94-3c1a-23ca-f71c007c74a5@suse.com>
Date: Mon, 5 Jul 2021 13:58:09 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="65XDBeblb0Efal3sstKyb8oNCLHM2zi4V"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--65XDBeblb0Efal3sstKyb8oNCLHM2zi4V
Content-Type: multipart/mixed; boundary="Nz6nBwwPESrM8RolDJF5cJakbOv6ADsLy";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 "stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: Ross Lagerwall <ross.lagerwall@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Message-ID: <194665ee-3a94-3c1a-23ca-f71c007c74a5@suse.com>
Subject: Backport of commit 3de218ff39b9e3f0d4

--Nz6nBwwPESrM8RolDJF5cJakbOv6ADsLy
Content-Type: multipart/mixed;
 boundary="------------E44CAA1FAC8851C1FFB4C3FD"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------E44CAA1FAC8851C1FFB4C3FD
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hi Greg,

the attached patch is a backport of upstream commit 3de218ff39b9e3f0d4
for Linux 5.10 and older (I've checked it to apply down to 4.4).


Juergen

--------------E44CAA1FAC8851C1FFB4C3FD
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-xen-events-reset-active-flag-for-lateeoi-events-late.patch"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
 filename*0="0001-xen-events-reset-active-flag-for-lateeoi-events-late.pa";
 filename*1="tch"

=46rom 9535989b80d89932f34f7f1596b91b400d7adbb2 Mon Sep 17 00:00:00 2001
From: Juergen Gross <jgross@suse.com>
Date: Mon, 5 Jul 2021 13:12:27 +0200
Subject: [PATCH] xen/events: reset active flag for lateeoi events later

In order to avoid a race condition for user events when changing
cpu affinity reset the active flag only when EOI-ing the event.

This is working fine as all user events are lateeoi events. Note that
lateeoi_ack_mask_dynirq() is not modified as there is no explicit call
to xen_irq_lateeoi() expected later.

This is commit 3de218ff39b9e3f0d453fe3154f12a174de44b25 upstream.
Backport for Linux 5.10 and older.

Cc: stable@vger.kernel.org
Reported-by: Julien Grall <julien@xen.org>
Fixes: b6622798bc50b62 ("xen/events: avoid handling the same event on two=20
cpus at the same time")
Tested-by: Julien Grall <julien@xen.org>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrvsky@oracle.com>
Link: https://lore.kernel.org/r/20210623130913.9405-1-jgross@suse.com
---
 drivers/xen/events/events_base.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events=
_base.c
index 29bec0720514..af0f6ad32522 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -583,6 +583,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *i=
nfo, bool spurious)
 	}
=20
 	info->eoi_time =3D 0;
+
+	/* is_active hasn't been reset yet, do it now. */
+	smp_store_release(&info->is_active, 0);
 	do_unmask(info, EVT_MASK_REASON_EOI_PENDING);
 }
=20
@@ -1807,10 +1810,22 @@ static void lateeoi_ack_dynirq(struct irq_data *d=
ata)
 	struct irq_info *info =3D info_for_irq(data->irq);
 	evtchn_port_t evtchn =3D info ? info->evtchn : 0;
=20
-	if (VALID_EVTCHN(evtchn)) {
-		do_mask(info, EVT_MASK_REASON_EOI_PENDING);
-		ack_dynirq(data);
-	}
+	if (!VALID_EVTCHN(evtchn))
+		return;
+
+	do_mask(info, EVT_MASK_REASON_EOI_PENDING);
+
+	if (unlikely(irqd_is_setaffinity_pending(data)) &&
+	    likely(!irqd_irq_disabled(data))) {
+		do_mask(info, EVT_MASK_REASON_TEMPORARY);
+
+		clear_evtchn(evtchn);
+
+		irq_move_masked_irq(data);
+
+		do_unmask(info, EVT_MASK_REASON_TEMPORARY);
+	} else
+		clear_evtchn(evtchn);
 }
=20
 static void lateeoi_mask_ack_dynirq(struct irq_data *data)
--=20
2.26.2


--------------E44CAA1FAC8851C1FFB4C3FD
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------E44CAA1FAC8851C1FFB4C3FD--

--Nz6nBwwPESrM8RolDJF5cJakbOv6ADsLy--

--65XDBeblb0Efal3sstKyb8oNCLHM2zi4V
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDi89EFAwAAAAAACgkQsN6d1ii/Ey9B
rQf9E65x7mG7OLZuNBoQlQJIfZ5JffVhkVB3dqMAMMQiAi+TFodx3U6sz1qH+PKtjmidFrjmO5l8
NZO+n9lE/TUYgNkY3ChWYT4JNOUzquo0dUhL4R55DP2Lo2rB21nIVUuYP69AfWadnL2A2P8F8iFA
cyjGd/Jrv1KOXsyPqFgNDkJKyHJzxgwqex+NfY0zBoE1LJ61flfWeNPaoaUbZ29336x7rIMN+MP/
ENy6swAww0II6uWoSdkbZKtrJvEnkMzEzFXic+zjrLDDqwdTYnIEBtpJ40vWVqIjWvzigF1EjLof
lnRm6nMKXJjwQlVjsS1nlYm1OBEpJrY43lVgyvmPoQ==
=dE5F
-----END PGP SIGNATURE-----

--65XDBeblb0Efal3sstKyb8oNCLHM2zi4V--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 12:16:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 12:16:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150184.277722 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0NWP-00022d-KB; Mon, 05 Jul 2021 12:16:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150184.277722; Mon, 05 Jul 2021 12:16:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0NWP-00022W-HL; Mon, 05 Jul 2021 12:16:21 +0000
Received: by outflank-mailman (input) for mailman id 150184;
 Mon, 05 Jul 2021 12:16:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0NWN-00022M-Om; Mon, 05 Jul 2021 12:16:19 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0NWN-000648-Hv; Mon, 05 Jul 2021 12:16:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0NWN-0003gp-9W; Mon, 05 Jul 2021 12:16:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0NWN-0003Ta-92; Mon, 05 Jul 2021 12:16:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=B4reS9CoxU5bjp6xA8UW8HP2vTdGDVNLtAt2yUOfCI4=; b=hs++w1QvAtZ7s8WXiuLS7IysYu
	wXn8zzFFrjnSgvABzW68QYtYOlLoBS82Did/cUmP0dZbwE4dVV45k5gk/RdC8PjU6c4M9HutxjUwf
	Slv55Pc9DoxFAMArNv1VElEjtlAZj/mT6iGz2ub7q8HN64pRwKE9YrwA10dT7gj/8YHA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163307-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163307: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fea7901dba72eeac526f3ef12a4ad4c539622373
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 12:16:19 +0000

flight 163307 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163307/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fea7901dba72eeac526f3ef12a4ad4c539622373
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   31 days
Failing since        162368  2021-06-04 15:42:59 Z   30 days   87 attempts
Testing same since   163216  2021-07-01 22:42:29 Z    3 days   17 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3224 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 12:49:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 12:49:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150191.277736 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0O2C-00059N-8h; Mon, 05 Jul 2021 12:49:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150191.277736; Mon, 05 Jul 2021 12:49:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0O2C-00059G-5m; Mon, 05 Jul 2021 12:49:12 +0000
Received: by outflank-mailman (input) for mailman id 150191;
 Mon, 05 Jul 2021 12:49:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=cjuk=L5=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0O2B-000599-5l
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 12:49:11 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 63f7758e-dd8f-11eb-8446-12813bfff9fa;
 Mon, 05 Jul 2021 12:49:09 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id E0512225EE;
 Mon,  5 Jul 2021 12:49:08 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id A798E13790;
 Mon,  5 Jul 2021 12:49:08 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id Z7mcJ8T/4mDRIgAAGKfGzw
 (envelope-from <jgross@suse.com>); Mon, 05 Jul 2021 12:49:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 63f7758e-dd8f-11eb-8446-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625489348; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=GF1mOoiDsfACCPEzNtFIRj2tT9MCfNISFVmwZNZ/5q4=;
	b=eWSZVIq8xciImMj2IPcT6EOxpoHZOkkeZvG/wtYowEyBfW+yWtVIrdzG08dK+hi/EUvu80
	nDJoVZxnDPhiWEPU82fXfNecUA4wZKXIZAfLeyA+Rcs2KzjJ/U1vYdzerpQktFsx9e65Nm
	uf7Zh/qf0i5OWa9vMJBQr/tPQaqGJ3g=
Subject: Re: [PATCH] tools/xenstored: Stash the correct request in
 lu_status->in
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: raphning@amazon.co.uk, doebel@amazon.de, Julien Grall
 <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210701140307.2516-1-julien@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <ce5e3bef-a075-275f-d638-67f987cf1088@suse.com>
Date: Mon, 5 Jul 2021 14:49:08 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <20210701140307.2516-1-julien@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="DG7sssjIYtSepKTQYUe23QNEJGFsQLxZS"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--DG7sssjIYtSepKTQYUe23QNEJGFsQLxZS
Content-Type: multipart/mixed; boundary="Y1pp1aLH4kSCPj0DWvSK2uW8FX8ZyuGSW";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: raphning@amazon.co.uk, doebel@amazon.de, Julien Grall
 <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Message-ID: <ce5e3bef-a075-275f-d638-67f987cf1088@suse.com>
Subject: Re: [PATCH] tools/xenstored: Stash the correct request in
 lu_status->in
References: <20210701140307.2516-1-julien@xen.org>
In-Reply-To: <20210701140307.2516-1-julien@xen.org>

--Y1pp1aLH4kSCPj0DWvSK2uW8FX8ZyuGSW
Content-Type: multipart/mixed;
 boundary="------------9BF9C036A45A34460359B768"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------9BF9C036A45A34460359B768
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 01.07.21 16:03, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
>=20
> When Live-Updating with some load, Xenstored may hit the assert
> req->in =3D=3D lu_status->in in do_lu_start().
>=20
> This is happening because the request is stashed when Live-Update
> begins. This happens in a different request (see call lu_begin()
> when select the new binary) from the one performing Live-Update.
>=20
> To avoid the problem, stash the request in lu_start().
>=20
> Fixes: 65f19ed62aa1 ("tools/xenstore: Don't assume conn->in points to t=
he LU request")
> Reported-by: Michael Kurth <mku@amazon.com>
> Signed-off-by: Julien Grall <jgrall@amazon.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

--------------9BF9C036A45A34460359B768
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------9BF9C036A45A34460359B768--

--Y1pp1aLH4kSCPj0DWvSK2uW8FX8ZyuGSW--

--DG7sssjIYtSepKTQYUe23QNEJGFsQLxZS
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDi/8QFAwAAAAAACgkQsN6d1ii/Ey9U
xgf7BBpjewMLWM2TKLog4HK7bSJftp7wGQ4tfYWmt3OfJOrCapwsCaJ3UPqe41hFScb4FKSnXkPZ
PHdMrLybiq2igqcbLG/0wH0Xi4GHOFu7UmTk54rLmmb5dWczj3mJHfIRk+ohUzlr9zOrLNiAAo/+
JWOFWIeGSI7+gTHsHMG8H8thuAB4fYMT1aRnTI8TW4oOXAscVxWL7lozBQQvUvOX+b793wWw/z+C
WjmlnUoSDupnJO/WrEeLjJxmxi7mJv1/fTciHp8ThMgf0Z6Dz6CUyuRupaQMCU96xGUin+ryRWWH
7RtOJMHQ6NBzX9rRlwFLqPHcojpuynMQKVmlfkkgnw==
=i2eX
-----END PGP SIGNATURE-----

--DG7sssjIYtSepKTQYUe23QNEJGFsQLxZS--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 13:01:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 13:01:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150209.277756 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0OE5-0007U1-HW; Mon, 05 Jul 2021 13:01:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150209.277756; Mon, 05 Jul 2021 13:01:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0OE5-0007Tu-EF; Mon, 05 Jul 2021 13:01:29 +0000
Received: by outflank-mailman (input) for mailman id 150209;
 Mon, 05 Jul 2021 13:01:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0OE3-0007To-QQ
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 13:01:27 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f99ed801-f7ad-428b-84f2-c2833e2b7ab9;
 Mon, 05 Jul 2021 13:01:26 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f99ed801-f7ad-428b-84f2-c2833e2b7ab9
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625490086;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=m3jpDvQLw9xYzPTPWM+y2B2j74+F/Yyap4tkoG69O7Q=;
  b=LEZiEQ2IBZmKSsa/YlDKE2McszRGaKF5dcfD0s6FV09gS7ArxL2lYrxK
   jCMPiFBW2ZerdRj+SQ9AlYlvlx3akUSgyc+wpR+TGzKW0T5w73Vj2hTZ7
   5rdFUL5+zJFRqKIfbcsRf2IHi8kOqaAH5OI3bagUid09ovVCyAdtXdD2t
   w=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: TSZHqcEvbQP+N4NddP8TD8qKOgGXq+uRh5I9VBGwgGEL6LEB3znKz11mlVOr9PKmnxEXIdHgZM
 zWk3GwzGmNfYdKR1KfIXtWwE0UiN1i0BhflOcsDi7BG4BjOReoRn0QmKhbOzzJ0OdWSbyOAfsn
 9+PcF3GH7xfEaxE9TXgXgebVLwPOfYemyctHIolvi1eQf7dgVZw7+wGAyKnxLOEj64oTW+DogY
 68gGv3DlOcDIrRrZZYcDo5VtG2L1wUBjET+18NgedTd5AAEdL/mQgnWTtzXgNOVSpoQon0nqzf
 EoU=
X-SBRS: 5.1
X-MesageID: 47582778
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:0s+PWqCcLTuUplzlHehHsceALOsnbusQ8zAXPh9KJiC9I/b1qy
 nxppkmPH/P6Qr4WBkb6LW90dq7MAzhHPlOkPUs1NaZLXTbUQ6TQr2KgrGSuwEIdxeOkdK1kJ
 0QCZSWa+eAfmSS7/yKmTVQeuxIqLLskNHK9JLjJjVWPGVXgslbnndE422gYytLrWd9dPgE/d
 anl7F6T23KQwVnUi33PAhIY8Hz4/nw0L72ax8PABAqrCGIkDOT8bb/VzyVxA0XXT9jyaortT
 GtqX222oyT99WAjjPM3W7a6Jpb3PPn19t4HcSJzuwYMC/lhAqEbJloH5eCoDc2iuey70tCqq
 iCnz4Qe+BIr1/BdGC8phXgnyP61iw11nPkwViExVP+vM3QXlsBeol8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVittilG/rRMZ4K4uZkRkIM4jgYJq3MgiFBs/KuZGIMu60vFnLA
 BWNrCf2B4MGmnqKUww1wJUsa6RtndaJGbMfqFNgL3N79FspgEP86Iv/r1Wop4xzuNId3B63Z
 WzDk1JrsAFciZEV9MxOA8+KfHHQ1AlFii8Tl56Z26XTJ06Bw==
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47582778"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JaTSSIQ1VwC8xANgLr/qhpIaOtK9EwuX+iJHqtcZpXlyZeTLFDxyOU0mztmn+vxDJLX92TOY42Gu5hgSKz+Q5s9y685t0rcF8HM5mN5YE4mMoeNoik1httrRrYRDmXhCiSGK/bT7113EJzvZpnt7heje438FnH9f+5jTZlyzzDhtt9cyIs6zYAgTq7qBeQENWLYSj1qJyAEtT9aIOpbN7hb4R3OWKv+gujCoJSDdGK6hAfhvvmFMnESfchukMt5XEXtRG54eDn4qmlC5rbBg0uY2lO5v6XiyxwqOjiJkfX8GjUWHdYmZIBRNbQ2XxIFySc3q7AgI18HRk5JIOUsLow==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=m3jpDvQLw9xYzPTPWM+y2B2j74+F/Yyap4tkoG69O7Q=;
 b=lR4iwzGsCV9O9qluLx8dgkC6TOtRdivMshQj/G+1CtUz8iPxj9Izp1hMERGMmiyWUz2t0bMnyc+WCN+kYRCIT7qtbn094pUFD9IH2r09zjRz9ZLgmb/F7zEPobPY0PJ+9nj8IAIUPQGPVU4JHUyOf882n+c2O5HNbAVK9aEFJZcjAP5IU3Yg35sOcnMifuOFTssVtBNWgi9fl6FE6+XxHIdxmkTvWl8ePAp7Mje2IRbcM720+KPLkhzhvJEN4YtZ4fPRImgJqCZPDPkeazVgD0Wt7exszIeqsyAuoAYmKbcNFbqjQtqa9jX1tPljWcKpjhvCedipd4J5EBLh2Vf2DA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=m3jpDvQLw9xYzPTPWM+y2B2j74+F/Yyap4tkoG69O7Q=;
 b=tDdL7h/wWmYKC67Ig8Q08eVjx6GSsokdBwtHg7ACnHtclwbniwkbJ+JhpEFi5EeOPL0vFSVtEvSA/Lww3+rw79M66IgHpA/MLnrRzAuzeBWnJnkNhx/+B/zN4LDr2vabbUYTFlPbV1gxoX99taQQHH/KFPWzmX9cW9ri9dT40y8=
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-16-olaf@aepfle.de>
 <644a7a4c-4fab-07be-2e69-2637254de859@citrix.com>
 <20210705132700.05d92744.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v20210701 15/40] tools: prepare to allocate saverestore
 arrays once
Message-ID: <6bd5fbb4-881f-e41c-46f5-d31c93a7ff7a@citrix.com>
Date: Mon, 5 Jul 2021 14:01:07 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705132700.05d92744.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0199.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:9e::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e763b231-f892-4e45-0f39-08d93fb4fa07
X-MS-TrafficTypeDiagnostic: BY5PR03MB5079:
X-Microsoft-Antispam-PRVS: <BY5PR03MB507966A8AB2259100ABCF04CBA1C9@BY5PR03MB5079.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: H5HuoszauNgQFapCtX9SoQcuMThRfr0m8zgCFFFV8LK3JDv1hYYviMKpMOrIHE8zwfsP+A3YLStXlTHNjIPvmIktFrlL/Xxhyg8a877+bfq0IxcvIoT68uS7VuKaE9+UK4n8GLhuXbwcCZCMb/+wahSFAHxG85sg6o2GsIkAYKsoKSeNXXaNOPJMBGpV0HDQ4oIyLFD2SqXh+QjTxgGoiFEQaTIFfiON7ir2PCSHHsfp7TiNvVqC2wd8dn5u3kHzR8HNjt8QcwG/AQhuJfLHowzAdrGRiUu6jhvJzbP6kKYwNqs51DiGDYNe5VsI29RMagG/pL145aDSSwxXrpCDyKvJH0uUa9xhgXwxkhkjGvslSCFEj98QL0bTQ9g6nRPvGcTgRod3mq2eQs29lTGonc4wx2qby7F5Y7l6QFxDuhX0VrNenSYeemDphGHFfQ1CvXbNLXmsNOPOyxXSbfPZ2l/oKmFK8A7YgvaNcuO4XsJLh/yWufx+HCXE2KCF0zki5kFy+pn6n4gd1m/MGrJGGzY49QxcKAY+oKTzv2mq/PVCFsG0SamcySaP0/YhICLnjLy2ZSMLKYr0LAFJc/qRSmyzli4LylNbb3lw2In05ahffd8fMWgKeaa3qSD6LE60IVQM1aGk24S5xlhFoxPomRyXW+xkBXIPOGAAl1fNCMZotldIfRyHxlAT0Bw5vtqntJPk5L2IiUWSogilb9by66qYP3GUy3YYCTCzZZV5ooU=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(396003)(346002)(39860400002)(136003)(376002)(6486002)(26005)(31696002)(8936002)(16526019)(186003)(83380400001)(956004)(2616005)(53546011)(31686004)(86362001)(36756003)(8676002)(66946007)(54906003)(16576012)(316002)(478600001)(5660300002)(38100700002)(66556008)(66476007)(4326008)(6666004)(6916009)(4001150100001)(2906002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: e763b231-f892-4e45-0f39-08d93fb4fa07
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 13:01:17.2854
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Y6ypNaPCDtgUnGCpskAcmRkh0AXw/r3Ot3j8htSfLdyjtEHeUPPygCr7ZFv7vyqtY2V1J/1JTivaXOuTQPOCS/NpGsqACSKPaNN0Psl5W7c=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5079
X-OriginatorOrg: citrix.com

On 05/07/2021 12:27, Olaf Hering wrote:
> Am Mon, 5 Jul 2021 11:44:30 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>>> This patch is just prepartion, subsequent changes will populate the arr=
ays.
>>>
>>> Once all changes are applied, migration of a busy HVM domU changes like=
 that:
>>>
>>> Without this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a2=
0963b3 xen_testing):
>>> 2020-10-29 10:23:10.711+0000: xc: show_transfer_rate: 23663128 bytes + =
2879563 pages in 55.324905335 sec, 203 MiB/sec: Internal error
>>> 2020-10-29 10:23:35.115+0000: xc: show_transfer_rate: 16829632 bytes + =
2097552 pages in 24.401179720 sec, 335 MiB/sec: Internal error
>>> 2020-10-29 10:23:59.436+0000: xc: show_transfer_rate: 16829032 bytes + =
2097478 pages in 24.319025928 sec, 336 MiB/sec: Internal error
>>> 2020-10-29 10:24:23.844+0000: xc: show_transfer_rate: 16829024 bytes + =
2097477 pages in 24.406992500 sec, 335 MiB/sec: Internal error
>>> 2020-10-29 10:24:48.292+0000: xc: show_transfer_rate: 16828912 bytes + =
2097463 pages in 24.446489027 sec, 335 MiB/sec: Internal error
>>> 2020-10-29 10:25:01.816+0000: xc: show_transfer_rate: 16836080 bytes + =
2098356 pages in 13.447091818 sec, 609 MiB/sec: Internal error
>>>
>>> With this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a2096=
3b3 xen_unstable):
>>> 2020-10-28 21:26:05.074+0000: xc: show_transfer_rate: 23663128 bytes + =
2879563 pages in 52.564054368 sec, 213 MiB/sec: Internal error
>>> 2020-10-28 21:26:23.527+0000: xc: show_transfer_rate: 16830040 bytes + =
2097603 pages in 18.450592015 sec, 444 MiB/sec: Internal error
>>> 2020-10-28 21:26:41.926+0000: xc: show_transfer_rate: 16830944 bytes + =
2097717 pages in 18.397862306 sec, 445 MiB/sec: Internal error
>>> 2020-10-28 21:27:00.339+0000: xc: show_transfer_rate: 16829176 bytes + =
2097498 pages in 18.411973339 sec, 445 MiB/sec: Internal error
>>> 2020-10-28 21:27:18.643+0000: xc: show_transfer_rate: 16828592 bytes + =
2097425 pages in 18.303326695 sec, 447 MiB/sec: Internal error
>>> 2020-10-28 21:27:26.289+0000: xc: show_transfer_rate: 16835952 bytes + =
2098342 pages in 7.579846749 sec, 1081 MiB/sec: Internal error =20
>> These are good numbers, and clearly show that there is some value here,
>> but shouldn't they be in the series header?=C2=A0 They're not terribly
>> relevant to this patch specifically.
> The cover letter is unfortunately not under version control.
> Perhaps there are ways with git notes, I never use it.

In the end, we'll want some kind of note in the changelog, but that
wants to be a single line.=C2=A0 Its probably fine to say "Improve migratio=
n
performance.=C2=A0 25% better bandwidth when NIC link speed is the
bottleneck, due to optimising the data handling logic."

>> Also, while I can believe that the first sample is slower than the later
>> ones (in particular, during the first round, we've got to deal with the
>> non-RAM regions too and therefore spend more time making hypercalls),
>> I'm not sure I believe the final sample.=C2=A0 Given the byte/page count=
, the
>> substantially smaller elapsed time looks suspicious.
> The first one is slower because it has to wait for the receiver to alloca=
te pages.
> But maybe as you said there are other aspects as well.
> The last one is always way faster because apparently map/unmap is less co=
stly with a stopped guest.

That's suspicious.=C2=A0 If true, we've got some very wonky behaviour in th=
e
hypervisor...

> Right now the code may reach up to 15Gbit/s. The next step is to map the =
domU just once to reach wirespeed.

We can in principle do that in 64bit toolstacks, for HVM guests.=C2=A0 But
not usefully until we've fixed the fact that Xen has no idea what the
guest physmap is supposed to look like.

At the moment, the current scheme is a little more resilient to bugs
caused by the guest attempting to balloon during the live phase.

Another area to improve, which can be started now, is to avoid bounce
buffering hypercall data.=C2=A0 Now that we have /dev/xen/hypercall which y=
ou
can mmap() regular kernel pages from, what we want is a simple memory
allocator which we can allocate permanent hypercall buffers from, rather
than the internals of every xc_*() hypercall wrapper bouncing the data
in (potentially) both directions.

>
>> Are these observations with an otherwise idle dom0?
> Yes. Idle dom0 and a domU busy with touching its memory.
>
> Unfortunately, I'm not able to prove the reported gain with the systems I=
 have today.
> I'm waiting for preparation of different hardware, right now I have only =
a pair of CoyotePass and WilsonCity.
>
> I'm sure there were NUMA effects involved. Last years libvirt was unable =
to properly pin vcpus. If I pin all the involved memory to node#0 there is =
some jitter in the logged numbers, but no obvious improvement. The fist ite=
ration is slightly faster, but that is it.

Oh - so the speedup might not be from reduced data handling?

Avoiding unnecessary data copies is clearly going to improve things,
even if it isn't 25%.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 13:03:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 13:03:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150216.277767 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0OG6-0008BM-4b; Mon, 05 Jul 2021 13:03:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150216.277767; Mon, 05 Jul 2021 13:03:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0OG5-0008BF-Vh; Mon, 05 Jul 2021 13:03:33 +0000
Received: by outflank-mailman (input) for mailman id 150216;
 Mon, 05 Jul 2021 13:03:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0OG4-0008B9-Kh
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 13:03:32 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 45347ae6-a68a-4db5-a774-1681769b0a9b;
 Mon, 05 Jul 2021 13:03:31 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2052.outbound.protection.outlook.com [104.47.13.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-AYkUCCdPPQ2-Ialtrh2_7g-1; Mon, 05 Jul 2021 15:03:29 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3391.eurprd04.prod.outlook.com (2603:10a6:803:3::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Mon, 5 Jul
 2021 13:03:27 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 13:03:27 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0054.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1d::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 13:03:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 45347ae6-a68a-4db5-a774-1681769b0a9b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625490210;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=NNvUtbKDDtkudyr48bQpvmevEivU/ymo5pA72T+9QcI=;
	b=BlAKXBHx2P7Lp4pdi0A0+9sE+LlTcbDXMFsGYehTbym0ZdugdJgiDlc3qziThvxIpHEo5B
	httlJfPTshbmHuz8HZUyiZuSKnm4bex5a/86VR8RfCf2XZegjv2xWUzoY/SBMJkII1WOac
	+T7JgZDXDIsmHIGDQTE9R9dwJmdLli0=
X-MC-Unique: AYkUCCdPPQ2-Ialtrh2_7g-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=R8mAlu82qsJuSj9yVD8MdjEotKZvPuZdO65Vc/MUB3oNGByvMk4B2MocIA2laso87jUG/Jcewh5ji3MBq3xGR62f0J253q09S+bsBE3t91Lw/RNpp4QUpZckKdLpTJIwR+HJPEmUuNDWnx1ZSDUZH/pe5JJcMEkvQjaphBtI6gIznQ7wWU2dEj9k7O8E8wx3rsF9xNczDSO0ZycqwjV5IfLCU3CLfQA7vwlMri/5owJelAc5hwr43AjVijHKRBm54C06NApJ5NYCURvaO+i1Pg39G7qds2mIPqivGT34MQ32RcmHbO92rZnFG14U7cq6q6t/GuzgWCOCEoQskhBS3A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NNvUtbKDDtkudyr48bQpvmevEivU/ymo5pA72T+9QcI=;
 b=jamP7s0FgbbDq2lOmoEqO4ylv1ER6IMD9/6N2xeB6c5vZsQq/FcWbsA1+Lgfcpn3k6JvtExsxWdc5oAzbt3aaDOOal89+2yoR16uqdh24IJQfS+tdUUMLu3AqGD0AMQGENsMofxwY9+5i5EiwuNeqqzKXHR5jTL+RBI945He7Vutr6cTpAVYl6iFSxnwTn9lIza6KZJjvqpCThbzjZQKxUJhVWEMpCppb2Lh+oCos4kyedVG0Xfr5XjyI8AG1PeEI5TphGPZOwHApHshwEZYThkgvMVJHULsMLy+88SDXKAt9QBCKMOVwkmIvuM7eZ/Z/1iPFjJqym6tR4uGrV/qwQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
To: Luca Fancellu <luca.fancellu@arm.com>
Cc: bertrand.marquis@arm.com, wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <f1f026fb-33e4-4d18-5718-ae9f9f42327d@suse.com>
Date: Mon, 5 Jul 2021 15:03:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705105103.14509-10-luca.fancellu@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0054.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1d::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f87a24cc-719d-4b4f-f7d1-08d93fb547b3
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3391:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3391442FF610A1A465F4EB8DB31C9@VI1PR0402MB3391.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2582;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	iOYA8garUAwGBmwkJ/yquojkaSmH4nOa3bSrSlqUcP3F+QcivnnnsySQP9NlQBE2EAzIBGg5Da4u4BJJT7CVo0UNmpFroPKQQzQTFZjLEO6RvYHhNeiS/unCRitgGvYF/++lTGrnjgDHtnblRZF3eIA3JLOBnxDnldSCwpogSkbDSWVtxfTqWBbMoJp+BnkKLtCADsUCzq+kB4bNofP34YajkbHlgS8GovbxIYl4HIofYLzXD7YdpxKHTbafwHTQVWf26o3L2qQijyti/orTXpDKWUjRMy4XxTjSDPcMzxMjgDSFjmUBWpBmrsSq+//HoIZNCcBD5Qf4q9bKbIty5uynFWCgY3o5kHDFPFOoElInAZm6QFw+anPCSqxLJGFhcOWnDhdVXNXQkdqaJPMUoR1j+17ICHhI6cXQo1tjqQ21SVV8NgNlN5YL1okejBKvaduBWSofF5lwfXLlqsLBELT5xwhdW6PCyd9txQkh92xq4aTIjDparlXXAz5gNSDiWHM2Ul6hOk1Mbncy3uaGG2RTJSTHrVqZaLfe4rOtUX/06pLIfMZhaGUWq7rCc+56GslRF+u29wSHyu1SZkv4eQAiMMa+uOSFzt+sjc/TbMKWBEQmFk+3NGzWMb6DCHdeKORQW1Ny3ZGPJ5kOoNzPqjmJ/exEFrSGjyIhIUcjiRqQwjijNocTIHMgVV/OGpWZ3ijqU23hYxs6dnyt3Bu7DcXiLwq+X7eD3obEAXTA91g=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(376002)(396003)(366004)(346002)(39860400002)(38100700002)(5660300002)(316002)(66946007)(54906003)(478600001)(16576012)(7416002)(2906002)(4326008)(66476007)(66556008)(6916009)(16526019)(186003)(8936002)(6486002)(26005)(31696002)(86362001)(31686004)(36756003)(8676002)(956004)(83380400001)(53546011)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f87a24cc-719d-4b4f-f7d1-08d93fb547b3
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 13:03:27.5232
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: OUZzxY4OCnusCOGcuxJCZZr8GxeiXP4RKCnd55AbYYitL1XmDl1Q6LDY5nqFYxgx5dJ+MubbkFPwuDAF5pYUBg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3391

On 05.07.2021 12:51, Luca Fancellu wrote:
> Modification to include/public/grant_table.h:
> 
> 1) Add doxygen tags to:
>  - Create Grant tables section
>  - include variables in the generated documentation
>  - Used @keepindent/@endkeepindent to enclose comment
>    section that are indented using spaces, to keep
>    the indentation.
> 2) Add .rst file for grant table
> 
> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> ---
> v7 changes:
> - commit message changed
> - Add comment about grant table queries and uses
> to the documentation
> v6 changes:
> - Fix misaligned comment
> - Moved comments to make them display in the docs
> - Included more documentation in the docs
> v5 changes:
> - Move GNTCOPY_* define next to the flags field
> v4 changes:
> - Used @keepindent/@endkeepindent doxygen commands
>   to keep text with spaces indentation.
> - drop changes to grant_entry_v1 comment, it will
>   be changed and included in the docs in a future patch
> - Move docs .rst to "common" folder
> v3 changes:
> - removed tags to skip anonymous union/struct
> - moved back comment pointed out by Jan
> - moved down defines related to struct gnttab_copy
>   as pointed out by Jan
> v2 changes:
> - Revert back to anonymous union/struct
> - add doxygen tags to skip anonymous union/struct
> ---
>  docs/hypercall-interfaces/arm64.rst           |   1 +
>  .../common/grant_tables.rst                   |   9 +

In patch 8 you now add arm32.rst and x86.rst as well, so it's at
least odd that here you alter only one of the three. However, ...

> --- a/docs/hypercall-interfaces/arm64.rst
> +++ b/docs/hypercall-interfaces/arm64.rst
> @@ -8,6 +8,7 @@ Starting points
>  .. toctree::
>     :maxdepth: 2
>  
> +   common/grant_tables

... to me this seems the wrong way round anyway: I'd rather see
common stuff not be linked from per-arch locations, but per-arch
docs to be down the hierarchy from common ones.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 13:10:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 13:10:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150224.277778 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0OMk-0001BI-S7; Mon, 05 Jul 2021 13:10:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150224.277778; Mon, 05 Jul 2021 13:10:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0OMk-0001BB-P6; Mon, 05 Jul 2021 13:10:26 +0000
Received: by outflank-mailman (input) for mailman id 150224;
 Mon, 05 Jul 2021 13:10:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0OMk-0001B5-12
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 13:10:26 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5c12d3ec-dd92-11eb-8447-12813bfff9fa;
 Mon, 05 Jul 2021 13:10:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5c12d3ec-dd92-11eb-8447-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625490625;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=NicIRY1ocQMXug1W7SYrv5IuM2u2a3LlJUKaPsIkiSE=;
  b=hZ8OMlk0Umn6zJ6Jhp7yuO3DKxIULevyLbaQBTeXLh3e530wBiHeHcwp
   NdSQmC+U5w6+4Bq9j+RYOsVyKRy4dDb1jcvFOwGdlM7rEYngd9pEMDlRi
   3PN8Z2ok9kmNbgq3G/7RKy6qwGvRcZ5IilWZeVyO6uk/f9LqEOKncJcJV
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: dDprDHl0z4Osc8MBT7Na7EhFMoyI6uNFfp7CAsTKdQRl5PlOabADCgGiWgr8Ptb5Fypbm7aSmk
 9K7O2oHqsrXDVgph3yIqQkudI4rTmU7EldQeZopdJ85Rnc2tR6lb7wuPA0ClQyD+rKGRHn5MCJ
 7ABsZCTKbtDa4k4+n09iYuUio0DajhjCA2MRoj/oY6AP/kAsFN915+FZqe5G4XFEih4DrFC6QV
 LzJnM4FPe9bxBfNNoQa8uXAxPYleNwYhP95YPohbV/ElpCDcasKkun1FPI3p3xqMpqIKc4XapO
 vyQ=
X-SBRS: 5.1
X-MesageID: 47956556
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ymUDwqFJ2329aqNXpLqEi8eALOsnbusQ8zAXPiFKKSC9F/byqy
 nAppkmPHPP4gr5O0tApTn/Asa9qBrnnPZICOIqUYtKMjOJhFeV
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47956556"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=B9WBR3EqUi2THdOYJYGMhbysiTV6r7hxnkgZNWMZlwQ0G4lYq/z7/+NkYlErAQnsaWc+0pPv766jtkf9NfKJuKIu5YCVZVwyFrdX2hM6ioTFvW/zXJQIA32s4ka6xWrqX48PgHQ7W+7KooNTqDB2F+WUPInfd2hCey3huxBotHZxd1PGPQBdyhGbPKk6II8KbmjhA2suv9sWUsRHBLqQIA1qr7cqyWC66MCDjzy+bZ+v1c5QGAYCVeav86saNItWStbST6uspyeAEWw2GLZliCX5tkhi2Yir6bsAbok/8M6wDC45JoHwx/nXduXupB17PCIWitADidTXAGIfIWR99A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NicIRY1ocQMXug1W7SYrv5IuM2u2a3LlJUKaPsIkiSE=;
 b=WQD5a6/4JTzgn3kDGX8cBcSR2MVc/wBFZEjkMuRDG8IjqedRmTr8e6ZfXCOXVhmsStHyRlQu7rd0SKknrZYdU6tbmzRXlGbQMxGwjHEX7k0/IyniTioEcQNuWybh+sRsfeOxIWpN4uQDuYgJxe5jPG1/V3WoYhl3dFlS2A/Pm5i0DeZrrJGs7hyz0dHAkVjQkOu1FPJiSgrnTA3vPRZff7cUJJr7g9xarYlV0ksAsv8QLk0Q7L6BQL/rPTClCEPmuA/gUXfNqUQVROLySdxmWS9F6Zl/osQl7jhnnuX2APQf77N4X8wPMdMbxOHnTianb5UGrnx0t2EUH77hGMvesw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NicIRY1ocQMXug1W7SYrv5IuM2u2a3LlJUKaPsIkiSE=;
 b=vf9NACi9e3IeLp5vX9YoJS8wAhzuYoPg0aS6uN+6Bza0bCkqt5eMUiCD1HUsa6nXmNtIH1Eo+IcJLwxwsCa77/Kv/U8aXkdJ9ly0kcP2d1H69PIxxXj1NKIxFVXuF2ju/uYZqopXQ/W3FPz78SQ4q/PFNPNxhjb+a/iABMhO3U8=
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data pfns
 in migration stream
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-13-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <e5f00724-61fe-fed3-35c4-35df837a49c2@citrix.com>
Date: Mon, 5 Jul 2021 14:10:09 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701095635.15648-13-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0061.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:60::25) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d14a51dc-d9cc-4524-e0ac-08d93fb63aa3
X-MS-TrafficTypeDiagnostic: BYAPR03MB4358:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4358E05671918D75FD4D4AEBBA1C9@BYAPR03MB4358.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 9y47SQyUJ5RZTg3E9SL1kdq+2XDFVtHHBxcj21neOg77kggkUwvjaHDmbyhyh6/ca3W/Fw64o+5s8Xo/JXq8PG4Ej91jYOUGD6qKPnUM40pRMB1qEkPAfpByFTTKdFZlj55Ftw8NcBjqDPDWysTpoz0D2bs3XWwBo00w629HO+M14JCXzk1uxHH6DmLF7yXVFFHDs7ErWjSd09w9gBh/4RJFi6fCNQlawXoX+5brz8r5pdT1QuhuW2TZrjDJEQ5boa+S436UYrFaeoV7fspccx2rLLvhBPMQudlD2g3gsU1yU+j12i02bWaWdVzgKDT4WCZoghZTwPWzTI//2TVAJzG+22Xw8H8b+Sf+oRnaT0zFBnfcvQ8pnu8exvpTalw8x7n2ZnaW6aS8DZt54Wmwwa6IvP1UcZiM7w8yDRBOpCBVxB6PXsIm0j/p0WBS2gCpmTMVE1gu7TGxpOZieI6QNUvCRBEcz7GDK+ytWnFp/YkeHiZMwXn4K0bmKU6fAi1IKk2wbLTtMPNzlz87Nu/E7UKIERuhvMeaZ4wJvtYUYwDJWH1QYuB06BJtENlG3EKHB7sfsyKIX1Uvd7nyFQ6Jpbb59jcAt4HwBgtU99PQdSXPc9vK9/Epgvx1kyvdvaP/taTpPU1t8X/R+sNaD5SOlYSrBz652+/QudjqPeEYBOG1issdXR84hslr9l6xT1b7WP1dFH2nSiRKaMCJREGmnAm07IrIsTvyrgE2RS8w3cQ=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(39860400002)(376002)(136003)(366004)(478600001)(2906002)(53546011)(316002)(86362001)(38100700002)(36756003)(31696002)(31686004)(16526019)(4744005)(5660300002)(66946007)(66476007)(4326008)(26005)(8676002)(66556008)(8936002)(6486002)(16576012)(956004)(186003)(6666004)(54906003)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?PBYil2rT6Ha/MW1MhtIBOzddfITiVTWWJrGtYgA?=
X-MS-Exchange-CrossTenant-Network-Message-Id: d14a51dc-d9cc-4524-e0ac-08d93fb63aa3
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 13:10:15.2230
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: tBk3OSS+MnG3+XyVg73220+RTe3/srfdO4m8KXjaS79m4/0CZJxN046A+wDljDvRdFJIFJgkdagoFmBF2zlnVrPBe+JgClsNe3Fx2r4bG4c=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4358
X-OriginatorOrg: citrix.com

On 01/07/2021 10:56, Olaf Hering wrote:
> Introduce a helper which decides if a given pfn in the migration
> stream is backed by memory.
>
> This specifically deals with type XEN_DOMCTL_PFINFO_XALLOC, which was
> a synthetic toolstack-only type used in Xen 4.2 to 4.5. It indicated a
> dirty page on the sending side for which no data will be send in the
> initial iteration.

What do you mean "This specifically deals with" ?

AFACT, the code before was correct.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 13:24:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 13:24:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150230.277789 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Oa0-0002fF-4i; Mon, 05 Jul 2021 13:24:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150230.277789; Mon, 05 Jul 2021 13:24:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Oa0-0002f8-1N; Mon, 05 Jul 2021 13:24:08 +0000
Received: by outflank-mailman (input) for mailman id 150230;
 Mon, 05 Jul 2021 13:24:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=jU53=L5=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1m0OZz-0002f2-4B
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 13:24:07 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.5.76]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 44c28a0a-dd94-11eb-8447-12813bfff9fa;
 Mon, 05 Jul 2021 13:24:05 +0000 (UTC)
Received: from AM5PR1001CA0004.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::17)
 by VI1PR08MB3166.eurprd08.prod.outlook.com (2603:10a6:803:42::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 13:24:02 +0000
Received: from VE1EUR03FT021.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:2:cafe::40) by AM5PR1001CA0004.outlook.office365.com
 (2603:10a6:206:2::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 13:24:02 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT021.mail.protection.outlook.com (10.152.18.117) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 13:24:01 +0000
Received: ("Tessian outbound 1763b1d84bc3:v97");
 Mon, 05 Jul 2021 13:24:01 +0000
Received: from 62e03aaa2e26.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 E87E741E-6B79-4A59-92ED-F9F956540526.1; 
 Mon, 05 Jul 2021 13:23:52 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 62e03aaa2e26.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 05 Jul 2021 13:23:52 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PR3PR08MB5753.eurprd08.prod.outlook.com (2603:10a6:102:87::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 13:23:51 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5%3]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 13:23:51 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO2P265CA0069.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:60::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 13:23:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44c28a0a-dd94-11eb-8447-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kmqpiWhQDLnccsXoM2Qkk1dwrs3tCsLgyVwjedbcg+0=;
 b=No9cJub0XUD+u7QayWJAUjhcxgKlFjus0cOBX7AYU5cl/AtZ/WdFoHzt1AFl4siEDd9ncAowKqs03LXdaHqZJzQmhYpBZBGIk6esIeHUz5PcdJgUpgPGTJe0ePlGlItAUHgSE+jRkD998CFXbiiDyfnXaiZvzKebQhEf2GjzXeQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 7fe1b51491c22c06
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ak69RY3MpnChUk9Ck6zsgeMIodM/HL2+gLUwS+14dnENMQd8ACXLdHApls2l6ERcusrljju44f3Xizsz8Dx3biifI+sIl/JZwCT+n8h7rdaqJrlppm1+puATtQ9pvRUw6VzX6RtOzQQple+jsVN1+NBXv9f0qc+/57ZX+YQ4wtp+FP4lYvdMSIE6PwS8s1oujpZEL2ooOtxd3iBieXFA9X90L3AKr7GWsjncsv1cZ/Am7aZj7f6iSeUNtVQgMc8grsevNpi3rfhpyy6UJHZw9SVOBfQV3v1QyDWNUxFo/1IrDtnO9XPnAyd4uxr9k53sm252fJpoXHr+aYk90PqNVA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kmqpiWhQDLnccsXoM2Qkk1dwrs3tCsLgyVwjedbcg+0=;
 b=fGWLYPvPMVRUdCCXVts6WQYOGIy6WS0R1koG9Mr+q+Ulpyu3+TyECeHEME+Xj/sdvEBIzvY3mB/vTO7RI5ztgOmylYg81inpwGLo6SJ9NXWoxUyI/vEryHmOuN+yyuhwUXTx3xf4Emj+lRQIVbReGk2vRjXwoLBtQ4dNw6KNDKKvMOkZX0c2SAu1eTrFpMM/Sk75f5PMc6RDtYgUA4SxdVUh7cY+VhD0j2aY7qNahN2nbcxCzag2xWKdZMYPaIIBj7Pde0UtsU6K6DI1Do9K2UL7Aj+9Fgp8O6XE3s9zhe8JeodFEk6paYzg1DasE6yHQ2JDV3OmDfuGch4U9dr97g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kmqpiWhQDLnccsXoM2Qkk1dwrs3tCsLgyVwjedbcg+0=;
 b=No9cJub0XUD+u7QayWJAUjhcxgKlFjus0cOBX7AYU5cl/AtZ/WdFoHzt1AFl4siEDd9ncAowKqs03LXdaHqZJzQmhYpBZBGIk6esIeHUz5PcdJgUpgPGTJe0ePlGlItAUHgSE+jRkD998CFXbiiDyfnXaiZvzKebQhEf2GjzXeQ=
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <f1f026fb-33e4-4d18-5718-ae9f9f42327d@suse.com>
Date: Mon, 5 Jul 2021 14:23:44 +0100
Cc: Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <54ADD75F-83DC-4891-914D-B85FBA69B440@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
 <f1f026fb-33e4-4d18-5718-ae9f9f42327d@suse.com>
To: Jan Beulich <jbeulich@suse.com>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO2P265CA0069.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:60::33) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8cf8ec67-7bbe-4498-4338-08d93fb82791
X-MS-TrafficTypeDiagnostic: PR3PR08MB5753:|VI1PR08MB3166:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR08MB3166DCA0450ED462DE4E3D26E41C9@VI1PR08MB3166.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:5236;OLM:5236;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 HY3XJPKif8DF6aGNbxIpGiGhSgPh9DPuZBrtDn1X4wblZCLFL8eeYtqwGlpKsJniZXXkDlUQ5ri7vnIYhLPNO+dMJE+NxbxjPE739xdEVDIKoURaQi1How2jjAzukxy5kFBmCpcIpt0zMK+WjAaddHCZWGf7QJhS5pj+jT4jvU7024Lp5uzqBrq2T4PkWUZ8WvAQorKlbZxyDS10q0c87pT4jc/ZQASS6A4FLv4C333AS6/iWx6a3GPSd+vx5MGcKo4XWAESppWKXcvidznjaoqpr5dHNjicXYUBoM/EnAAbtW9dHldLugJaXt8LW1YNBV6cdy3sLLikL4l4AOCiVbW4HTe28QoEhwKB02nQnQudahyDNaJ+PJcwV8TXY1ldylb/TAM1ZPiD70AohSD2YluUke4tBfg/UeyTxK5fofaweh7aLF5cDNZYLlqHL1uQLYiY92U8OeBl62VoRlkTSQe6Bqumk31KW1DibBQZKgZu2TYyNmwz78yonYGgMw1/VnyZFi/G1rTdHocufdq3pUHJzWIf4JCqqzlqHuSaLjybPIVb04JTWLMr+thNd50H8BEmToY8dGVnbOn1GFgjBIqwKk2LfHHl2lCdI5I0eLqc2rpbw0cjpJsirhaL1zJjEvUc59zk9Ug0lp9b5yZrN30nBU+mRcYLWcS1uCzkPZHN8HjhlJ/fHk5eGabYAo5q4DAtobGKm6wjGQ9X/2I9FzGGHYVWiqFowVTrdwb3BWI=
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(396003)(376002)(346002)(366004)(478600001)(8676002)(956004)(186003)(16526019)(6512007)(66476007)(5660300002)(83380400001)(4326008)(66556008)(66946007)(26005)(2906002)(8936002)(44832011)(86362001)(2616005)(52116002)(36756003)(6486002)(6916009)(53546011)(33656002)(6666004)(54906003)(38100700002)(316002)(38350700002)(6506007)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5753
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT021.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4c60a6f6-be0c-42b1-6f94-08d93fb820d6
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	MmWhkMtFe+1Ni2DvYogexTfZLYg0MfICgj31alnwcvzhFHq4FJzxrXF9sMf9vaz+Hoaq8bspMqAEFZQ2VbR0OGxDx5bSMQoKWt1QFU1okf4RGd1FpQ2Oz61WZp8RHAgCjlp7SczisDLLW8XgKw3D59AsXnzWHzdzhPIFJ37EaSIRPMzsfDAA8E7KuvsLkXqumjze35LpAnPF07o5mBCZYB/ub9Qh5ri7vfCldQcCZJlfJMjX6nEOjSI7R8GFnUEs1oCk8gpp3w9YH2g1x5Dp03UJnV97qwqKV9XsBS5+NdBUykNDiuNtf6x6JgmspE5+GO13QzBaDDnYl/yMhsKhodU6rGCeFHJKhGGeiI8OPRoMRNHUGew5I+VmMuJhxPNYCfMJMSeq6aFh/4Rq1KlvyNjnbjbUL2Azq1aBy3ARLwaAhgDef8gK2PN7fdqPHIVKsZd57kkH4pxGtE/deJE9Wc1Xx4rc/28eSMJVPeQaeF6DdfXje7fjb/aSGxXCj2z8aOaAyCvgjTF5jJpo8W1kDr1I0Mk9JaS3STCiZncmDQnfYgRrBGLXgIlxxnbOrGNeKJfxvQ3CCSj/xPUAYzyjJ/dNfEQib9w8/m7r58MopbOSzlJgN+qzXa4KtT4PX60lU0WA0Lo9t/OTiVpl0KgibxpSAToJTRxxq3N9aqfiiX+LTyysA3iksJVqRM3ZzlRFdcwZ9oOCMYvdHPqujd9Q4w==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(136003)(39860400002)(396003)(346002)(46966006)(36840700001)(2906002)(6512007)(86362001)(26005)(44832011)(70206006)(70586007)(82310400003)(5660300002)(956004)(6666004)(54906003)(336012)(53546011)(6506007)(2616005)(36860700001)(16526019)(82740400003)(33656002)(6486002)(83380400001)(47076005)(316002)(8936002)(81166007)(186003)(36756003)(356005)(6862004)(478600001)(4326008)(8676002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 13:24:01.8860
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 8cf8ec67-7bbe-4498-4338-08d93fb82791
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT021.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3166

Hi Jan,

> On 5 Jul 2021, at 14:03, Jan Beulich <jbeulich@suse.com> wrote:
>=20
> On 05.07.2021 12:51, Luca Fancellu wrote:
>> Modification to include/public/grant_table.h:
>>=20
>> 1) Add doxygen tags to:
>> - Create Grant tables section
>> - include variables in the generated documentation
>> - Used @keepindent/@endkeepindent to enclose comment
>>   section that are indented using spaces, to keep
>>   the indentation.
>> 2) Add .rst file for grant table
>>=20
>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>> ---
>> v7 changes:
>> - commit message changed
>> - Add comment about grant table queries and uses
>> to the documentation
>> v6 changes:
>> - Fix misaligned comment
>> - Moved comments to make them display in the docs
>> - Included more documentation in the docs
>> v5 changes:
>> - Move GNTCOPY_* define next to the flags field
>> v4 changes:
>> - Used @keepindent/@endkeepindent doxygen commands
>>  to keep text with spaces indentation.
>> - drop changes to grant_entry_v1 comment, it will
>>  be changed and included in the docs in a future patch
>> - Move docs .rst to "common" folder
>> v3 changes:
>> - removed tags to skip anonymous union/struct
>> - moved back comment pointed out by Jan
>> - moved down defines related to struct gnttab_copy
>>  as pointed out by Jan
>> v2 changes:
>> - Revert back to anonymous union/struct
>> - add doxygen tags to skip anonymous union/struct
>> ---
>> docs/hypercall-interfaces/arm64.rst           |   1 +
>> .../common/grant_tables.rst                   |   9 +
>=20
> In patch 8 you now add arm32.rst and x86.rst as well, so it's at
> least odd that here you alter only one of the three. However, ...
>=20
>> --- a/docs/hypercall-interfaces/arm64.rst
>> +++ b/docs/hypercall-interfaces/arm64.rst
>> @@ -8,6 +8,7 @@ Starting points
>> .. toctree::
>>    :maxdepth: 2
>>=20
>> +   common/grant_tables
>=20
> ... to me this seems the wrong way round anyway: I'd rather see
> common stuff not be linked from per-arch locations, but per-arch
> docs to be down the hierarchy from common ones.

The things is that common stuff is not really common, if you go and solve e=
very
define and so on, you end up with a different content for x86, aarch64, arm=
.

So you can=E2=80=99t have a common.rst containing the common things because=
 depending on each
platform the content will change.

Thanks anyway for your feedback, I think it=E2=80=99s good to make the comm=
unity know these changing
and discuss them all together.

Cheers,

Luca

>=20
> Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 13:27:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 13:27:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150236.277800 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Oda-0003Nl-Pw; Mon, 05 Jul 2021 13:27:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150236.277800; Mon, 05 Jul 2021 13:27:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Oda-0003Ne-Lm; Mon, 05 Jul 2021 13:27:50 +0000
Received: by outflank-mailman (input) for mailman id 150236;
 Mon, 05 Jul 2021 13:27:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0OdZ-0003NY-IB
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 13:27:49 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c9e78f3d-dd94-11eb-8447-12813bfff9fa;
 Mon, 05 Jul 2021 13:27:48 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2171.outbound.protection.outlook.com [104.47.17.171])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-499YalOrPQ-rkeCLPAOdPw-1; Mon, 05 Jul 2021 15:27:46 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4191.eurprd04.prod.outlook.com (2603:10a6:803:45::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 13:27:45 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 13:27:45 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0038.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.7 via Frontend Transport; Mon, 5 Jul 2021 13:27:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c9e78f3d-dd94-11eb-8447-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625491667;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=939AxuXfUc0ZT1z5aa83QMnJmEUYqVh8xwUj24UtEBY=;
	b=KkuVXeKC1dJENSCNap5gibITeY73RlOy3BuQbX7Is6WiLLrWYp5BA89VIHOCteWTNAkWr9
	YkJ8FUIgBSh+cZ9gpROZVntDON8tAl8G6FrkjsGJ+c655tWrnbdbe/NTOIlceI70vBuLU8
	NqvVBHVcO17PMXakhfP9jDaNqjXFNXk=
X-MC-Unique: 499YalOrPQ-rkeCLPAOdPw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gJ1ihyEu+UdZz1HNSCeAWHGkzfYaZ5JWnqlVK9OQzAbd/0ILeVYNlD8L2NE9/XnelzE2ETCz/9ZF067g0XjH7da8wfDLCUAxGdQQdtx2cMagkGsUQd7l7BD4RA25nXCzzLfpsqD8W6IUjPbaPTBqsxgo4SeDoguxvzdz6sHUVbXSxRMmYcHxga9lrHA445mXgsxcW1shj1DkH0rUKoPjolH5DVljYtLL4AaDWRBUyQk1ntoSNIRaufOGL/3J9hifEQxLt1xLrGTJ+7jiIPcG3vpgxStVsyaWcL7mIk5WtJyhGQW3PvG5jJPuJq2vXElDqkZZ6oplMJqWrXW0Exv59g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rWoF8aiZEbpglervymjEM+ZZuYboLoVnQro25M1uzv0=;
 b=bomzAUmqmCHnyfb6+MPjLEtn5DvAo7qLHPmOuJessBuBmMa1lUV/KVLOMunwzcWE2tnl4ghr9g5T9R2ykHU809dR1Fy3Sr606moTUgu8+cjX5DsaPGoMI9AVc/Ty57yJTzVybmx+WKHwtkrclzzQa+dKMjRiHvcrdVkpFp9iKngLMkmqwGHBaAkCnREystx/osvSnTuSLRPFn3oqWBSzGuZvFzQhSzSUNbXabFYkvhgXRMCxW97r0k2QCl4pBpavaEGJrTEsskIHL+VpCdXMCqja6i4sbTAkwlsH1Ii/BOxxzLzPLgx0O/jH5yNkGpEcMCKhioi2WB7WciuDMNFMDw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
To: Luca Fancellu <luca.fancellu@arm.com>
CC: Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
 <f1f026fb-33e4-4d18-5718-ae9f9f42327d@suse.com>
 <54ADD75F-83DC-4891-914D-B85FBA69B440@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <90673e86-cbf3-8a21-4251-e77f22327485@suse.com>
Date: Mon, 5 Jul 2021 15:27:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <54ADD75F-83DC-4891-914D-B85FBA69B440@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR0P281CA0038.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:48::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6e910a75-db0b-420e-6eb7-08d93fb8ac89
X-MS-TrafficTypeDiagnostic: VI1PR04MB4191:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4191876620E3242076E00981B31C9@VI1PR04MB4191.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4125;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	JFknnPXSG3AczV2hJxKQbVaaCuFOkxlc39GEhRrnOVEPNvu3h921wG+qBW8OlGMdwkyY0wG4/hzqooILluteqFu8VfWZ0pG5cfsLmZ+bMdf6aKmw4uJgpVYgN+9w2nnPFMwnjqJR4CFU18xs5++gG49kaO+eJu4zE4xHEc9Ifp3zQcYm6GIjzeQHoVE0LGrxSy5vJE07oXdwFTftimWCom1nhi5+VksK7yLfPFDDj3B6kKoF0AZLnjQKhJbcbbfVNDRY3RYSRaONFpTcliRTy465xOZ3uDVArdwK83stdjcjAv4/NlFE3NtWf97NWXKUNWUqDNvMYEDy8pEcTMJzC9BXnQFUIOyVmIH/U4AXdg2c/3/MQ8Jf33izE9d8zqKNavftoCYzAatQl7KNsfEoYBi7h6KWRS3EdYX/cZgP8hMdfRBwfW8CoNkm0JKNiAW8M/HYzBInGAEug7v16lMgno3zvzbv6jyWMnEdAcY/+Xn6UrwtNq6288KYRKxOiZeNw+sG9LclVd0vfMMIUiDxUuS1/2CZLGtXh8Yw4A0hIK3BxC+DOn2+mOYJ0ebWoZPgsAmojR5dfX7z1NSpJeVUD/+ednNeSZ62jFYq5wYoUVhllYF8Bp6k0gE9hEGeRKFS+wTc1mnRGiBMq7yJkaC0MAPNKvgY4RfszQDEKNB8e8d7m44C6H9nOpwTeN/UxBeqLOAzypvHfc1Uwm/RUIDLhzIqvAl1ZZZQ5zYLz1zTB4Q0LgfPPtdItvVzSaXyHCIB
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(396003)(376002)(39860400002)(346002)(6486002)(16576012)(8936002)(8676002)(66556008)(66476007)(5660300002)(66946007)(4326008)(26005)(2616005)(956004)(6916009)(54906003)(186003)(86362001)(316002)(31696002)(38100700002)(36756003)(2906002)(478600001)(83380400001)(53546011)(16526019)(7416002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?9VL4vbubBFVFTsJy9LN0+lm0VYfkg0kNmG5SZXtrLqADhEevCl+UP+By0UrB?=
 =?us-ascii?Q?ihrn8vJpLzLd91CHPrRZXXKzWL9Um/8IyGQneexqC47AjdkCRCumMyh9TJKu?=
 =?us-ascii?Q?idm1MWT6MAHbv8VuO6xcX/w9BdsulobaM9TmfPSiB0eyZzM+mKeiAcAFf0IZ?=
 =?us-ascii?Q?Y+if7iUiUGnjc1znHG++mVj9a+rLr2uZIQR9yV/8dUtdPJGnZYcEGzZtEoTK?=
 =?us-ascii?Q?qxylNVgGX8Izg0mcOoeTQpY2aVLV7awIRiWXQM0X6JTHXdIieTEhQAQdik/Y?=
 =?us-ascii?Q?m23iWw9LgjFeMun71iAhhaGTcPr0Rox6RbiTuOHdd7vmNYOsU44nuMv+aRCD?=
 =?us-ascii?Q?CYCoXeqAGQdMdf9yM7Syx8ob415c9yDH7qW9eK4G+vSei1O+tPR0Z3dhBdr8?=
 =?us-ascii?Q?qPFHoPWw7NW0r+YkhSbFjDjwvfK0qZ6wwr9B/+/DAhmuZodEWlDC/CDHxCR5?=
 =?us-ascii?Q?SqcA6TjiLKYv50tK8EmT7jv5QaOlf31BM4WqrHi8k6un0pL40+fqD14wgCFB?=
 =?us-ascii?Q?5lSKQtkwkj8MDhghI9ROakBXyAFQeHLVzrekbuvL30weCq5wu0b+zpwcrZ8C?=
 =?us-ascii?Q?DGsWn8TLpFJ4sBMOVJ7fZtgKRoOj1NyI9mWEpMF23PnICEaW0RPiHshL9U//?=
 =?us-ascii?Q?3LOeIs3X4FLlfpKpEGZIlquYoELlgIuCKVDQeoepOEgithc1oS7TxHgAUeqX?=
 =?us-ascii?Q?GIzQpnWtKJ+SL5AGznpXRJdn9qhWA0KndXn7uYyjZsXgWPjEUwp1vy4Zh9ve?=
 =?us-ascii?Q?Y14B4nYGWYP/1ybAOTN5Yh9GvecnQ7YtlW7rAEOFpuwiL0EcaCGxTm1x/NB+?=
 =?us-ascii?Q?A1GUAJdwuB08cHg79a6hhBgRMfaXm+J+yzGAC8rvVzG7FPKjxoLS/KKJimiw?=
 =?us-ascii?Q?UOQMMqHdIIzECYF2ul9cqj5QJZUyGndUglElQttmQtPAi/mxC8/WHEJ+mUBp?=
 =?us-ascii?Q?NWnY2c105g+LqdSKQFHYqBhwsdic1L+2+SVW9lwSBLPYnKr+IqLCmPQbJDQ6?=
 =?us-ascii?Q?TEjmQpgAv406akgPtXiVzxzKctjrc3PHLBCznKRBaXhAYm4L7z/soDZUiXpJ?=
 =?us-ascii?Q?x61Nk1HqjSAkhzpwUbmtuTUee/SMzY2WH/6Ze4+i8oM+JF/tUtKvJayLvUEa?=
 =?us-ascii?Q?NIZ8QgbivCpp8TNlSJEnL7ZjUGL7Yquf6WjP/Ez/ERcUiHn+LrEMNt+zBaX4?=
 =?us-ascii?Q?M5+gNxnLL8a+yIKE+Q+2xvkpJMW4oRnslqO4UvjddmO5s4NIXcU7Ms7raCqf?=
 =?us-ascii?Q?ZrxAagRbx8eFyZngf/tmvUInbiKzEMd8pX4AkU/zEL0yoX3LeGuMbxrZ835H?=
 =?us-ascii?Q?S9QCw5e2LjXnGgMaK6FUkJum?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6e910a75-db0b-420e-6eb7-08d93fb8ac89
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 13:27:45.2255
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: UGqVnlFhF9fd2NLhJ4pyKNoPGDFZPc5ekHfi0X+JAmcSlt1+oHggPVhmmgfkaoFw6v9LM9f2L3ZnZhh+LOOHMQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4191

On 05.07.2021 15:23, Luca Fancellu wrote:
> Hi Jan,
>=20
>> On 5 Jul 2021, at 14:03, Jan Beulich <jbeulich@suse.com> wrote:
>>
>> On 05.07.2021 12:51, Luca Fancellu wrote:
>>> Modification to include/public/grant_table.h:
>>>
>>> 1) Add doxygen tags to:
>>> - Create Grant tables section
>>> - include variables in the generated documentation
>>> - Used @keepindent/@endkeepindent to enclose comment
>>>   section that are indented using spaces, to keep
>>>   the indentation.
>>> 2) Add .rst file for grant table
>>>
>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>>> ---
>>> v7 changes:
>>> - commit message changed
>>> - Add comment about grant table queries and uses
>>> to the documentation
>>> v6 changes:
>>> - Fix misaligned comment
>>> - Moved comments to make them display in the docs
>>> - Included more documentation in the docs
>>> v5 changes:
>>> - Move GNTCOPY_* define next to the flags field
>>> v4 changes:
>>> - Used @keepindent/@endkeepindent doxygen commands
>>>  to keep text with spaces indentation.
>>> - drop changes to grant_entry_v1 comment, it will
>>>  be changed and included in the docs in a future patch
>>> - Move docs .rst to "common" folder
>>> v3 changes:
>>> - removed tags to skip anonymous union/struct
>>> - moved back comment pointed out by Jan
>>> - moved down defines related to struct gnttab_copy
>>>  as pointed out by Jan
>>> v2 changes:
>>> - Revert back to anonymous union/struct
>>> - add doxygen tags to skip anonymous union/struct
>>> ---
>>> docs/hypercall-interfaces/arm64.rst           |   1 +
>>> .../common/grant_tables.rst                   |   9 +
>>
>> In patch 8 you now add arm32.rst and x86.rst as well, so it's at
>> least odd that here you alter only one of the three. However, ...
>>
>>> --- a/docs/hypercall-interfaces/arm64.rst
>>> +++ b/docs/hypercall-interfaces/arm64.rst
>>> @@ -8,6 +8,7 @@ Starting points
>>> .. toctree::
>>>    :maxdepth: 2
>>>
>>> +   common/grant_tables
>>
>> ... to me this seems the wrong way round anyway: I'd rather see
>> common stuff not be linked from per-arch locations, but per-arch
>> docs to be down the hierarchy from common ones.
>=20
> The things is that common stuff is not really common, if you go and solve=
 every
> define and so on, you end up with a different content for x86, aarch64, a=
rm.
>=20
> So you can=E2=80=99t have a common.rst containing the common things becau=
se depending on each
> platform the content will change.

Wait - the documentation should be uniform for all architectures.
If there are architecture specific aspects, then these should imo
still be mentioned in the common section of the doc, just pointing
out what those specifics are for which architectures. Architecture
specific doc pieces ought to cover architecture specific hypercalls
or sub-functions of common ones.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 13:54:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 13:54:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150243.277810 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0P2x-0006Pa-TE; Mon, 05 Jul 2021 13:54:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150243.277810; Mon, 05 Jul 2021 13:54:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0P2x-0006PT-QN; Mon, 05 Jul 2021 13:54:03 +0000
Received: by outflank-mailman (input) for mailman id 150243;
 Mon, 05 Jul 2021 13:54:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0P2v-0006PK-Ok
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 13:54:02 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 95c136aa-1654-4e28-8743-58cbf1d0b650;
 Mon, 05 Jul 2021 13:54:00 +0000 (UTC)
Received: from aepfle.de by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65DrsMiT
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 15:53:54 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 95c136aa-1654-4e28-8743-58cbf1d0b650
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625493234;
    s=strato-dkim-0002; d=aepfle.de;
    h=In-Reply-To:References:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=QLXRo09UfmkGYFe7C1EAoICYUXR6slim+FEZ5oOrstE=;
    b=E0njObK+iTHzrUb+slz+WFY9SIjrkLlaKGaZzu4rG+oKLw5HiJ6Umoo/zRsi+NrVG4
    Fa/6tHezv/OXhUuhmMhJcVXo0nLykeuq67PCDSXxom5wiQXaNisU8yHdBhRT8WQzKnlT
    LrfKjEhftuZGCavjxBlnxag7O1jnuvDgsRLfI0qdZvp+F7RrSLIjwkWpsBEDnOHwIVlS
    sEyu9PssEHl/xv1tL16OpG0yoZXEhvFxpybIygs0Zmp/mFtTz8ZxnuSnm3lygqg1Ax7J
    pZ1V/QxujmYpuseCvH+gjqBzyzDyAg8WGC9A9U+sklyP7GjHtPL+YewSNxOb3f4+M5id
    bNTw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QDiZbDmui9LcK/RdXt7GAQpV1nK0bLlEYINdoY/p1XzQbc+3kk9TsJTnzSvdM+YSIzPms="
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 15:53:50 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: xen-devel@lists.xenproject.org, Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data pfns
 in migration stream
Message-ID: <20210705135350.GA31821@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-13-olaf@aepfle.de>
 <e5f00724-61fe-fed3-35c4-35df837a49c2@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
In-Reply-To: <e5f00724-61fe-fed3-35c4-35df837a49c2@citrix.com>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Mon, Jul 05, Andrew Cooper wrote:

> What do you mean "This specifically deals with" ?

This was a result from J=C3=BCrgen pointing out that XEN_DOMCTL_PFINFO_XALL=
OC
is not handled. If all the type checking changes go into a single
commit, the commig message has to be reworded.

Olaf


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:11:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:11:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150249.277822 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PJy-0000GY-D6; Mon, 05 Jul 2021 14:11:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150249.277822; Mon, 05 Jul 2021 14:11:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PJy-0000GR-9K; Mon, 05 Jul 2021 14:11:38 +0000
Received: by outflank-mailman (input) for mailman id 150249;
 Mon, 05 Jul 2021 14:11:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0PJv-0000GF-Uu
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 14:11:36 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7ba1cccf-aae0-4e27-babd-adc706ddacf1;
 Mon, 05 Jul 2021 14:11:34 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65EBRMph
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 16:11:27 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7ba1cccf-aae0-4e27-babd-adc706ddacf1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625494288;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=A7Ab40+AHdWu5VhwpLoEgm/N9OiNWEJxT/Htt5QNPD4=;
    b=BNShVJYVNYLPspNZQ1qxk1u2FZpMRZdTpQM/nm/e2kUeua9CsEKz6KNMpvxJkYIZHq
    jucTBaInJBQQosE61XHeUfwkJB6GNVkPscI9yMiY6jY8oj4oxYYrwBg4Zc/TGOT2siw4
    vjysY7/Cc3S8hJycczrswcN+GmX4sHF39gQKf7Rq6A+mrFc1rV1mu0gzZ9/jqULsgU5/
    gLuq9l66/sddR+Ctyfd53Bsd3mY2x6I20IXNq1/9M+uCsAT3mw2QHbSHx04qrZTgMFZJ
    A1F0p82XqrjUFuzRZVvbidsUNkYFY5ZuLwLtwn+EsNTx50NOnZClR9V2XBVZ+FWjOty7
    MC/Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 16:11:09 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 15/40] tools: prepare to allocate saverestore
 arrays once
Message-ID: <20210705161109.15d2d4e0.olaf@aepfle.de>
In-Reply-To: <6bd5fbb4-881f-e41c-46f5-d31c93a7ff7a@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-16-olaf@aepfle.de>
	<644a7a4c-4fab-07be-2e69-2637254de859@citrix.com>
	<20210705132700.05d92744.olaf@aepfle.de>
	<6bd5fbb4-881f-e41c-46f5-d31c93a7ff7a@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/AwbfuAJr5v5S2cv7GxAgSow";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/AwbfuAJr5v5S2cv7GxAgSow
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 14:01:07 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> > The last one is always way faster because apparently map/unmap is less =
costly with a stopped guest. =20
> That's suspicious.=C2=A0 If true, we've got some very wonky behaviour in =
the
> hypervisor...

At least the transfer rate this last iteration is consistent.
Since the only difference I can see is the fact that the domU is suspended,=
 I suspect the mapping.
I did no investigation where the time is spent, I should probably do that o=
ne day to better understand this specific difference.

> > Right now the code may reach up to 15Gbit/s. The next step is to map th=
e domU just once to reach wirespeed. =20
>=20
> We can in principle do that in 64bit toolstacks, for HVM guests.=C2=A0 But
> not usefully until we've fixed the fact that Xen has no idea what the
> guest physmap is supposed to look like.

Why would Xen care?
My attempt last year with a new save/restore code did just 'map' the memory=
 on both sides. The 'unmap' was done in exit().

With this approach I got wirespeed in all iterations with a 10G link.

> At the moment, the current scheme is a little more resilient to bugs
> caused by the guest attempting to balloon during the live phase.

I did not specifically test how a domU behaves when it claims and releases =
pages while being migrated.
I think this series would handle at least parts of that:
If a page appears or disappears it will be recognized by getpageframeinfo.
If a page disappears between getpageframeinfo and MMAPBATCH I expect an err=
or.
This error is fatal right now, perhaps the code could catch this and move o=
n.
If a page disappears after MMAPBATCH it will be caught by later iterations.


> Another area to improve, which can be started now, is to avoid bounce
> buffering hypercall data.=C2=A0 Now that we have /dev/xen/hypercall which=
 you
> can mmap() regular kernel pages from, what we want is a simple memory
> allocator which we can allocate permanent hypercall buffers from, rather
> than the internals of every xc_*() hypercall wrapper bouncing the data
> in (potentially) both directions.

That sounds like a good idea. Not sure how costly the current approach is.

> Oh - so the speedup might not be from reduced data handling?

At least not on the systems I have now.

Perhaps I should test how the numbers look like with the NIC and the toolst=
ack in node#0, and the domU in node#1.


Olaf

--Sig_/AwbfuAJr5v5S2cv7GxAgSow
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDjEv0ACgkQ86SN7mm1
DoCXTw/8CSnsnnrIxWB9tn2aPd1KoMRHzVA3R1beCHEm1CvBxG2VOxH2lSbbV1g0
DBHvG6LCOcSrSpenp7NYa30kGLt6fEjjFwjU0vl8VSD7KxL5hpN3CE84n43hQaBL
fIDP+PtKD8x6FdMGT7wcbrBEckGy9TMsQK2FjYxNGt9peFjc3g/xKieVtPZy9f1k
ta7cLD6tCtCC5HkpJ+euiL/uMKLKnFn8iJPl9DGr8qIf+9uVTG7/K0vEDvFqtl0A
Y39+u5gsckc50YngtCjr0hN3f/oOwkEViMP9y3diuOUv55mGAhb+KsxdBkDBVDOh
LNzRSDbXjPnJm3tsF+OMtiKu682jiXkJjSFinXpmnJOHnXoGGNrS4LRl2xv9GY7w
Quy7w3YXh6ntXw7ob6c6XdjrNeERSYihUVRmG7SUOa4WR0mTWBUSDoMYV4n9m3Et
us5QrRXB7BVabxgQ0VCZDeE2gOREaFnQb2nVaCvHNFY9DwdSGyTKHs/OLcJsKYlu
SjySsNP24EiyHa2WFjtJJavUujAPNpfGkMuTae2ZJY8aKfaZHC8SNgNqdpTu5b6R
begD/DkSTRD0JH0eSY6GvvXR/HacmlchqvTunt1wQEAlrZHluzU7dsFd4yftfOBP
5S0ZNOQHtrvNoyAUS+IXF5NFnJaUQ8XSw+71yNbvh/Rf5qeDQjU=
=+TQk
-----END PGP SIGNATURE-----

--Sig_/AwbfuAJr5v5S2cv7GxAgSow--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:21:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:21:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150255.277833 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PT2-0001if-9A; Mon, 05 Jul 2021 14:21:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150255.277833; Mon, 05 Jul 2021 14:21:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PT2-0001iY-5f; Mon, 05 Jul 2021 14:21:00 +0000
Received: by outflank-mailman (input) for mailman id 150255;
 Mon, 05 Jul 2021 14:20:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0PT1-0001iS-Qt
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 14:20:59 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0PSy-0008GT-AG; Mon, 05 Jul 2021 14:20:56 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0PSy-0003mH-3k; Mon, 05 Jul 2021 14:20:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=y8ukRIMzPDOdqQS8pByXR+p0sdOLN/bN5MZ0qsgFF7U=; b=gynFZt4510pzBMewsSEEz+QEc7
	ftrKEoKXb3se4Cg1UcpnTSAt5O6AB4mESO2wKbACXFaWyUrT2uvvvTe4OV5ms0tc+WDm2gcaZaDLr
	hmM2YXHF4AjPhzSCrZ7STYSj+kE8NgRtK+1FlzzVi8cmXYBDFKlpYLtvAlutrs2wNNSc=;
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
To: Luca Fancellu <luca.fancellu@arm.com>, xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com, wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Stefano Stabellini
 <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d1915fbc-83af-e6df-980d-71abf21306fc@xen.org>
Date: Mon, 5 Jul 2021 15:20:53 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210705105103.14509-10-luca.fancellu@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Luca,

On 05/07/2021 11:51, Luca Fancellu wrote:
> Modification to include/public/grant_table.h:
> 
> 1) Add doxygen tags to:
>   - Create Grant tables section
>   - include variables in the generated documentation
>   - Used @keepindent/@endkeepindent to enclose comment
>     section that are indented using spaces, to keep
>     the indentation.
> 2) Add .rst file for grant table
> 
> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
> ---
> v7 changes:
> - commit message changed
> - Add comment about grant table queries and uses
> to the documentation
> v6 changes:
> - Fix misaligned comment
> - Moved comments to make them display in the docs
> - Included more documentation in the docs
> v5 changes:
> - Move GNTCOPY_* define next to the flags field
> v4 changes:
> - Used @keepindent/@endkeepindent doxygen commands
>    to keep text with spaces indentation.
> - drop changes to grant_entry_v1 comment, it will
>    be changed and included in the docs in a future patch
> - Move docs .rst to "common" folder
> v3 changes:
> - removed tags to skip anonymous union/struct
> - moved back comment pointed out by Jan
> - moved down defines related to struct gnttab_copy
>    as pointed out by Jan
> v2 changes:
> - Revert back to anonymous union/struct
> - add doxygen tags to skip anonymous union/struct
> ---
>   docs/hypercall-interfaces/arm64.rst           |   1 +
>   .../common/grant_tables.rst                   |   9 +
>   docs/xen-doxygen/doxy_input.list              |   1 +
>   xen/include/public/grant_table.h              | 459 +++++++++++-------
>   4 files changed, 288 insertions(+), 182 deletions(-)
>   create mode 100644 docs/hypercall-interfaces/common/grant_tables.rst
> 
> diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interfaces/arm64.rst
> index 5e701a2adc..cb4c0d13de 100644
> --- a/docs/hypercall-interfaces/arm64.rst
> +++ b/docs/hypercall-interfaces/arm64.rst
> @@ -8,6 +8,7 @@ Starting points
>   .. toctree::
>      :maxdepth: 2
>   
> +   common/grant_tables
>   
>   
>   Functions
> diff --git a/docs/hypercall-interfaces/common/grant_tables.rst b/docs/hypercall-interfaces/common/grant_tables.rst
> new file mode 100644
> index 0000000000..b8a1ef8759
> --- /dev/null
> +++ b/docs/hypercall-interfaces/common/grant_tables.rst
> @@ -0,0 +1,9 @@
> +.. SPDX-License-Identifier: CC-BY-4.0
> +
> +Grant Tables
> +============
> +
> +.. doxygengroup:: grant_table
> +   :project: Xen
> +   :members:
> +   :undoc-members:
> diff --git a/docs/xen-doxygen/doxy_input.list b/docs/xen-doxygen/doxy_input.list
> index e69de29bb2..233d692fa7 100644
> --- a/docs/xen-doxygen/doxy_input.list
> +++ b/docs/xen-doxygen/doxy_input.list
> @@ -0,0 +1 @@
> +xen/include/public/grant_table.h
> diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant_table.h
> index 84b1d26b36..2f826c952d 100644
> --- a/xen/include/public/grant_table.h
> +++ b/xen/include/public/grant_table.h
> @@ -25,15 +25,19 @@
>    * Copyright (c) 2004, K A Fraser
>    */
>   
> +/**
> + * @file
> + * @brief Interface for granting foreign access to page frames, and receiving
> + * page-ownership transfers.
> + */
> +
>   #ifndef __XEN_PUBLIC_GRANT_TABLE_H__
>   #define __XEN_PUBLIC_GRANT_TABLE_H__
>   
>   #include "xen.h"
>   
> -/*
> - * `incontents 150 gnttab Grant Tables

`incontents is used by the script xen-headers to generate I believe [1].

Looking through the commit messages, I can't find any suggestion that 
the existing documentation has been retired or else. So can you clarify 
what's the intention?

If the plan to move to doxygen, then I think that
   1) the commit message or cover letter ought to explain why this is 
better than the current documentation
   2) you should remove xen-headers or outline the plan to do that. Note 
that after this series, I believe the bits for the grant table would end 
up to be broken.

Cheers,

[1] https://xenbits.xen.org/docs/unstable/hypercall/index.html

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:21:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:21:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150257.277844 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PTG-00025L-Ii; Mon, 05 Jul 2021 14:21:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150257.277844; Mon, 05 Jul 2021 14:21:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PTG-00024K-Dn; Mon, 05 Jul 2021 14:21:14 +0000
Received: by outflank-mailman (input) for mailman id 150257;
 Mon, 05 Jul 2021 14:21:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2bRm=L5=citrix.com=George.Dunlap@srs-us1.protection.inumbo.net>)
 id 1m0PTF-000217-7s
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 14:21:13 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ebb51a58-6efa-418f-bf28-19362d9aad3e;
 Mon, 05 Jul 2021 14:21:10 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ebb51a58-6efa-418f-bf28-19362d9aad3e
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625494870;
  h=from:to:cc:subject:date:message-id:content-id:
   content-transfer-encoding:mime-version;
  bh=fF5T+tLu+xPkIyBAm3iYlQXEgN/axmZ24IlqflwaYVg=;
  b=IFH0WGbFP6fHFBJymAaEh1PbYxiLzDZ8Tir+Y6I1coN3CLwhfCf3S8EP
   y/+xJ0e2dexsI/LLCsxKzsa42dsMDo8zpdPiL+orfWGg6V0bal6Ov6a45
   Nanpd/UxKeP7xlyWWnf9pUQH8vej+aNKz/iywsflckITqK4MxFsj36igJ
   E=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: M4wo4WP2aSVUHB/ErWn5Pjway5OI4zwsbhSM0SpYvOT+JepNLPRKXq/bc077eCXt8eZyikG18r
 9cfwDRa60zdH2PLSCZOVEOSLMJ8ctwk5h05rMybiFQIdvtXdHYV8ceR5tsh9Tf3BEbWiTkjijK
 yP7hKbOm1wM2uz41QiCHnPLDlKBalzTVlMwMTJvvmY4ZYnYFfsPGtvgUmVUzGsqS8JWS5BjZOm
 945Ia+GPBE0y2LCqTJIExQiqh1sIzekErXXQj5cej63MoplxN6fS8Q7xlsg2qmZwi5Ht0FVOAn
 jxI=
X-SBRS: 5.1
X-MesageID: 47650666
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:f2F+KqMEwUJdNMBcTgWjsMiBIKoaSvp037BK7S1MoH1uA6mlfq
 WV9sjzuiWatN98Yh8dcLO7Scu9qBHnlaKdiLN5VduftWHd01dAR7sSjrcKrQeAJ8X/nNQtr5
 uJccJFeaDN5Y4Rt7eH3OG6eexQv+Vu6MqT9IPjJ+8Gd3ATV0lnhT0JbTqzIwlNayRtI4E2L5
 aY7tovnUvaRZxGBv7LYEXsRoL41qT2qK4=
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47650666"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=oGE4il6luaWv3lFajJxZ6a6bK8VZw2tCEsHB4x65xrOqBrws+QUQvBX+Z3IjocGTLTiA9KNvv34bufKBAQkipmUI0jugsGUGCojIL6QdVrUKbXWQrk0uzM9Xsqovm0SG9YUbairq4JECaQmg3WE6cxuxKxSO8VBkfOCJO4OhZkRYPSTu9lvuwnzlqUkrdg34kSoRmuICP4meDOQKKV0qPzk/b1EPUvhcfilMHwnoKsMtUiS5PKWBrTRbcf9Sf+/WnESZHboE2tf3ZUS/NcK55mGJeBtVvG55EB+xHzuKdtL1PBeSugXTmcNaMgExopezl2PHNkCAVekJEZj1QhLfxw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fF5T+tLu+xPkIyBAm3iYlQXEgN/axmZ24IlqflwaYVg=;
 b=dBehuqNt10+XY5Bxkv8SUPO1x8F8iP5mUSIn7oCchbxQZ0Xv5T2vQkDF2LAoXx3skklJr88cooRRt3KQ2Q+7jlOb5oI6KA1UNvCrzqyoBNeW+4uXYR1metLc29SBCpyQngEdFAb8G6cAhysTipC1tRDCC2ZngM61tpY01jXlbnVmuBklrOVd5sNYY+VyH3+PdNbku9t1X0eWHgnglsj6JzNmAcqtQGRkpdkk/yqAVmfxlWH+gJa0m9xbWHDoXrvJxWIogtuo5GZj4Ye69sJG8lC0yhjqnBo3dZ/tQoJL1MQ8vkJWjpT0pAJ9QOkyresclmWeTc+63wOKEb8JG6uGMA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fF5T+tLu+xPkIyBAm3iYlQXEgN/axmZ24IlqflwaYVg=;
 b=CGt6fxk7xp/UcFdWOmctxBiMQV7XIOudntdVCZKg1STxlV4bmdrLwQvtSos1ixViQw0phKQZC9bs92enn5rs8O/zFGQWBwnxsy8vlKZ9LjbhTqLOoH8fUBP4L8mnDJKSYtboxEZdVFIAOMAWy87N3KaO3g3sS/QDYfIhPdi5Dy0=
From: George Dunlap <George.Dunlap@citrix.com>
To: Tamas K Lengyel <tamas.k.lengyel@gmail.com>, "intel-xen@intel.com"
	<intel-xen@intel.com>, "daniel.kiper@oracle.com" <daniel.kiper@oracle.com>,
	Roger Pau Monne <roger.pau@citrix.com>, Sergey Dyasli
	<sergey.dyasli@citrix.com>, Christopher Clark
	<christopher.w.clark@gmail.com>, Rich Persaud <persaur@gmail.com>, "Kevin
 Pearson" <kevin.pearson@ortmanconsulting.com>, Juergen Gross
	<jgross@suse.com>, =?utf-8?B?UGF1bCBEdXJyYW50wqA=?= <pdurrant@amazon.com>,
	"Ji, John" <john.ji@intel.com>, "edgar.iglesias@xilinx.com"
	<edgar.iglesias@xilinx.com>, "robin.randhawa@arm.com"
	<robin.randhawa@arm.com>, Artem Mygaiev <Artem_Mygaiev@epam.com>, "Matt
 Spencer" <Matt.Spencer@arm.com>, Stewart Hildebrand
	<Stewart.Hildebrand@dornerworks.com>, Volodymyr Babchuk
	<volodymyr_babchuk@epam.com>, "mirela.simonovic@aggios.com"
	<mirela.simonovic@aggios.com>, Jarvis Roach <Jarvis.Roach@dornerworks.com>,
	Jeff Kubascik <Jeff.Kubascik@dornerworks.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Ian Jackson
	<Ian.Jackson@citrix.com>, Rian Quinn <rianquinn@gmail.com>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLRG91ZyBHb2xkc3RlaW4=?=
	<cardoe@cardoe.com>, George Dunlap <George.Dunlap@citrix.com>, "David
 Woodhouse" <dwmw@amazon.co.uk>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLQW1pdCBTaGFo?= <amit@infradead.org>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLVmFyYWQgR2F1dGFt?=
	<varadgautam@gmail.com>, Brian Woods <brian.woods@xilinx.com>, Robert Townley
	<rob.townley@gmail.com>, Bobby Eshleman <bobby.eshleman@gmail.com>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLQ29yZXkgTWlueWFyZA==?=
	<cminyard@mvista.com>, Olivier Lambert <olivier.lambert@vates.fr>, "Andrew
 Cooper" <Andrew.Cooper3@citrix.com>, Wei Liu <wl@xen.org>, Ash Wilding
	<ash.j.wilding@gmail.com>, Rahul Singh <Rahul.Singh@arm.com>,
	=?utf-8?B?UGlvdHIgS3LDs2w=?= <piotr.krol@3mdeb.com>, Brendan Kerrigan
	<brendank310@gmail.com>, "Thierry Laurion (Insurgo)" <insurgo@riseup.net>,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, "Oleksandr
 Tyshchenko" <oleksandr_tyshchenko@epam.com>, Deepthi <deepthi.m@ltts.com>,
	Scott Davis <scottwd@gmail.com>
CC: xen-devel <xen-devel@lists.xenproject.org>, Ashley Weltz
	<aweltz@linuxfoundation.org>
Subject: [ANNOUNCE] Call for agenda items for July Community Call @ 1500 UTC
Thread-Topic: [ANNOUNCE] Call for agenda items for July Community Call @ 1500
 UTC
Thread-Index: AQHXcaj4czUEKXGSw0SGvgMlUUgZsw==
Date: Mon, 5 Jul 2021 14:20:57 +0000
Message-ID: <9E80CEC4-1ABF-42A1-95DC-D48B4EA8BB42@citrix.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.60.0.2.21)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: bc069903-328f-4ac3-9b7f-08d93fc01b4e
x-ms-traffictypediagnostic: PH0PR03MB5736:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PH0PR03MB5736BF80F8F5DC6581B3020A991C9@PH0PR03MB5736.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: pjufyFs//rQzmK5yQ3zMu9dTNzFvJZmqFTVGnW6+tayFR7xmfZQEIB47hmJvoyeVSi27zx5QQYVVsxcxUs0AKwpy1VdWYdY1RY3wSk/owyf3bvASrn7omRjghpIwIL+QnarjOXFYYTiGD2TZKBKNgqW26Ay+ndLyl/qhEhp3EpWiKYmFqQ2J2XiE8bPT6JXQLkS3EiyzxgG95fJk+ys5SOA4Pa6bKEdtPku+17G9KWgP1SDh8Obw8xIdHOrIoto5+SDKBYskNanwoumlT+9L771aIS3vNHXJXJBUJYi+93Ka2vFgaMUKOcWjnjSFCj7QW8EEx9JAQIpg9+/jvu2DaXON4F82fIMO7kTvpz5PmVHxjnw6FbjT0uO3DnLnCONAa0Zxu9pNnHkMri1ek3HsDBjL5Ww3RjtkMS46SnDvIudkyzzxxZM89X2XSAGcYUxwDAAvp/Q3gpnVY98g13OHUDMzi9/GKG8/wsfyeS58ExzU5VIIeOZcwid74RobKNU6TEcUXyY4UFpblzxu4OS0rPJllvZBcvIkZW/n481bsr8AY3tdqDWv2MIfkLYV0gQqaqnKgWVlIWiO9Bi/B32Hc5rBE2LMBe/yRV9iX9ZBH8vS7sKR91Cc86Ex9z+V5Y/YfiPg7SVF4SBw7pwLo71c0ZRrPXGchRn31/gZ86/vvKYcRgsf7SMeE+R1E/quk12dDOcZ0zIHIM3lSgVesskTE06u+rlK1g5NAW3pGK6YHjppIgQmVdU+9UPuKaGZkW8yp944PoGx9x7L1TJYsrH4vVWec8TxE/tyNs1xFYWbqvLGI8E5QiUuBG0rnNM8ixqbhTT2Dh24BI9QgQdb+ITzwQ==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR03MB5669.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(376002)(366004)(396003)(136003)(71200400001)(86362001)(36756003)(33656002)(83380400001)(6486002)(5660300002)(921005)(7406005)(6506007)(186003)(478600001)(54906003)(2616005)(110136005)(76116006)(91956017)(64756008)(66446008)(8936002)(4326008)(66946007)(66556008)(66476007)(316002)(966005)(2906002)(6512007)(26005)(7416002)(38100700002)(8676002)(122000001)(221023002)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
Content-Type: text/plain; charset="utf-8"
Content-ID: <C706986B919AA1459A73A47B063F5BD9@namprd03.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR03MB5669.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: bc069903-328f-4ac3-9b7f-08d93fc01b4e
X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2021 14:20:57.1344
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: iBxxCLbme45coX4iHFhyK6JvdobeLiaMmyiP4z71eBKbo9r6SyYJifX6b7EfWZYBw7PCDqaaMNHeRAbGDi4XE0xl2yMzSBKHcaK8OmfKuNU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5736
X-OriginatorOrg: citrix.com

SGkgYWxsLA0KDQpUaGUgcHJvcG9zZWQgYWdlbmRhIGlzIGluIGh0dHBzOi8vY3J5cHRwYWQuZnIv
cGFkLyMvMi9wYWQvZWRpdC9pQ1hSTGFNTG9NWTh0Nm45NE1ZeXd2THQvIGFuZCB5b3UgY2FuIGVk
aXQgdG8gYWRkIGl0ZW1zLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiByZXBseSB0byB0aGlzIG1h
aWwgZGlyZWN0bHkuDQoNCkFnZW5kYSBpdGVtcyBhcHByZWNpYXRlZCBhIGZldyBkYXlzIGJlZm9y
ZSB0aGUgY2FsbDogcGxlYXNlIHB1dCB5b3VyIG5hbWUgYmVzaWRlcyBpdGVtcyBpZiB5b3UgZWRp
dCB0aGUgZG9jdW1lbnQuDQoNCk5vdGUgdGhhdCBhdCB0aGlzIGNhbGwgd2Ugd2lsbCBiZSBkaXNj
dXNzaW5nIGEgbmV3IG1vbnRobHkgdGltZSBmb3IgdGhlIGNhbGwuDQoNCiogVG8gYWxsb3cgdGlt
ZSB0byBzd2l0Y2ggYmV0d2VlbiBtZWV0aW5ncywgd2UnbGwgcGxhbiBvbiBzdGFydGluZyB0aGUg
YWdlbmRhIGF0IDE2OjA1IHNoYXJwLiAgQWltIHRvIGpvaW4gYnkgMTY6MDMgaWYgcG9zc2libGUg
dG8gYWxsb2NhdGUgdGltZSB0byBzb3J0IG91dCB0ZWNobmljYWwgZGlmZmljdWx0aWVzICZjDQoN
CiogSWYgeW91IHdhbnQgdG8gYmUgQ0MnZWQgcGxlYXNlIGFkZCBvciByZW1vdmUgeW91cnNlbGYg
ZnJvbSB0aGUgc2lnbi11cC1zaGVldCBhdCBodHRwczovL2NyeXB0cGFkLmZyL3BhZC8jLzIvcGFk
L2VkaXQvRDl2R3ppaFB4eEFPZTZSRlB6MHNSQ2YrLw0KDQpCZXN0IFJlZ2FyZHMNCkdlb3JnZQ0K
DQoNCj09IERpYWwtaW4gSW5mb3JtYXRpb24gPT0NCiMjIE1lZXRpbmcgdGltZQ0KMTU6MDAgLSAx
NjowMCBVVEMNCkZ1cnRoZXIgSW50ZXJuYXRpb25hbCBtZWV0aW5nIHRpbWVzOiBodHRwczovL3d3
dy50aW1lYW5kZGF0ZS5jb20vd29ybGRjbG9jay9tZWV0aW5nZGV0YWlscy5odG1sP3llYXI9MjAy
MSZtb250aD0wNyZkYXk9OCZob3VyPTE1Jm1pbj0wJnNlYz0wJnAxPTEyMzQmcDI9MzcmcDM9MjI0
JnA0PTE3OQ0KDQoNCiMjIERpYWwgaW4gZGV0YWlscw0KV2ViOiBodHRwczovL21lZXQuaml0LnNp
L1hlblByb2plY3RDb21tdW5pdHlDYWxsDQoNCkRpYWwtaW4gaW5mbyBhbmQgcGluIGNhbiBiZSBm
b3VuZCBoZXJlOg0KDQpodHRwczovL21lZXQuaml0LnNpL3N0YXRpYy9kaWFsSW5JbmZvLmh0bWw/
cm9vbT1YZW5Qcm9qZWN0Q29tbXVuaXR5Q2FsbA==


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:23:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:23:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150266.277855 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PVR-00032C-3l; Mon, 05 Jul 2021 14:23:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150266.277855; Mon, 05 Jul 2021 14:23:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PVR-000325-0W; Mon, 05 Jul 2021 14:23:29 +0000
Received: by outflank-mailman (input) for mailman id 150266;
 Mon, 05 Jul 2021 14:23:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2bRm=L5=citrix.com=George.Dunlap@srs-us1.protection.inumbo.net>)
 id 1m0PVP-00031x-Tm
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 14:23:27 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8fe5e1aa-dd9c-11eb-844a-12813bfff9fa;
 Mon, 05 Jul 2021 14:23:26 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8fe5e1aa-dd9c-11eb-844a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625495006;
  h=from:to:cc:subject:date:message-id:references:
   in-reply-to:content-id:content-transfer-encoding:
   mime-version;
  bh=hLrIjVD9hwnQgGTXIaVWCXbEn+PIxbb/2ebcARy3W4o=;
  b=Mg2B8nknWAPJ70QWBlV+aG7f24fAKoerWYNUvXqEOOKEW/r91Dl9kwg7
   +jNvcKd34whAX+8j2w28Z+8uoG4TzhMjniOcjwLPiSuh7psqduh+u+BUD
   fE+IaSsFbCy0Bs4onrtpFw7guEO9IIvpeLYHfbPh9gWhbeC3PbL9cC3fx
   I=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: l5w1HpKpAO6EvJ3Pp+FG4mUjbJS1DDQaNJLgF4DE88uVZ8lALH5kBzN2CShVIscFDkjZGTG8NM
 EFcy3Veqy2M/dfkU0VsB4udZeK0WYFCbeW33LwAKHCLKNXhy0N2f7rCmkIovp8d1a9vqJSrngm
 nBWi37oRvC8gwl8NCGDhnuY/Qoybhz5J0/NTRW+nG6xZYDUuQPvLgc1fFRE2+splGozRaXGxkg
 xOqTu9pQgVMfosnL58K5xHHI/f5un4OfUs8Gn6gI2WSZdyCVYwfGA0cJrZd1Wx+0cq3DcKqvfq
 2xo=
X-SBRS: 5.1
X-MesageID: 47292293
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:jW8hBqzQEwPGag8q2unTKrPw6L1zdoMgy1knxilNoHxuH/Bw9v
 re+cjzsCWftN9/Yh4dcLy7VpVoIkmsl6Kdg7NwAV7KZmCP1FdARLsI0WKI+UyCJ8SRzI9gPa
 cLSdkFNDXzZ2IK8PoTNmODYqodKNrsytHWuQ/HpU0dKT2D88tbnn9E4gDwKDwQeCB2QaAXOb
 C7/cR9qz+paR0sH7+G7ilsZZmkmzXT/qiWGCI7Ow==
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47292293"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=E3/zQDnAQJpWP/dALVKhNwXmoBV2T+LIE1NYlwkjz6xWt0GUAR5stcWMN///Q9sO6qGpFkGN4cCoBTkrnWqcoM7REQH0FVwX6F1a0D2hc/8Cgg8puJvDwy129gdoLbKzkIsEFVGbPxQuLEXpfUP6QITHi0hpJIheYsRIzhLknemXcyyJ17IlZPfSMtxUXPok74JL1qVL75ZnW7fOkwYL8mUaPgVbvK/L93OWxaThBF+7ubPRf1NhQLunp5UavUk/dEuCdj515G1Sb63F4G34rR40rzjUbGyGZ8JIsd1Fo92u3oxpqxPql3QJ0PPK2vE391eP9vKXvj//Pdy0KsJA9w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hLrIjVD9hwnQgGTXIaVWCXbEn+PIxbb/2ebcARy3W4o=;
 b=fG5Kps1nH1+bXHrPv3X9i2Nam8AdQurluCO+Dcj7YUS8wrM3Hvbq8R6ow5tWWUnbovArjPG1KvMIK4qDmKWmRN8Jdw7jkXYUNt1TmJs4j/hzo6+jsrtdK7Sg0YUBJqwn2V+TOheK8WdnyUKExJYEQOZB7VyKzMFwlfKZyyqhFY5/OM8C+A86bScbYNPIbNaRBUJ/TLtLryuXV6BAAci6nd6FrGgKVxyeqCg9PFA0vljHLTgP3PruhthNV4q5yhM2DMft85VdnOfrIigH3o2q3RMgoKyDVC5BKY/t7W2PfODrkzU5fZwtIN0elLSkpsu0udZT/E7cmajjhiErvZ4hzA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hLrIjVD9hwnQgGTXIaVWCXbEn+PIxbb/2ebcARy3W4o=;
 b=W4Av8KdNz0KfK2EDP9YfrO0P6DFzBHzxTY/EJbxkhzXoVkRCrBvkhSgxZ/bS7DeoyVjQOR1cQEHcjT47qM4Riw/+Pz2mmoiYDAgGc0rrYw+rKA4vP+ROf65j/7/nANmaO1+wmhS734HFmQIq/A2iJwlkAv42bHe8zo7iHSdZcl4=
From: George Dunlap <George.Dunlap@citrix.com>
To: Tamas K Lengyel <tamas.k.lengyel@gmail.com>, "intel-xen@intel.com"
	<intel-xen@intel.com>, "daniel.kiper@oracle.com" <daniel.kiper@oracle.com>,
	Roger Pau Monne <roger.pau@citrix.com>, Sergey Dyasli
	<sergey.dyasli@citrix.com>, Christopher Clark
	<christopher.w.clark@gmail.com>, Rich Persaud <persaur@gmail.com>, "Kevin
 Pearson" <kevin.pearson@ortmanconsulting.com>, Juergen Gross
	<jgross@suse.com>, =?utf-8?B?UGF1bCBEdXJyYW50wqA=?= <pdurrant@amazon.com>,
	"Ji, John" <john.ji@intel.com>, "edgar.iglesias@xilinx.com"
	<edgar.iglesias@xilinx.com>, "robin.randhawa@arm.com"
	<robin.randhawa@arm.com>, Artem Mygaiev <Artem_Mygaiev@epam.com>, "Matt
 Spencer" <Matt.Spencer@arm.com>, Stewart Hildebrand
	<Stewart.Hildebrand@dornerworks.com>, Volodymyr Babchuk
	<volodymyr_babchuk@epam.com>, "mirela.simonovic@aggios.com"
	<mirela.simonovic@aggios.com>, Jarvis Roach <Jarvis.Roach@dornerworks.com>,
	Jeff Kubascik <Jeff.Kubascik@dornerworks.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Ian Jackson
	<Ian.Jackson@citrix.com>, Rian Quinn <rianquinn@gmail.com>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLRG91ZyBHb2xkc3RlaW4=?=
	<cardoe@cardoe.com>, George Dunlap <George.Dunlap@citrix.com>, "David
 Woodhouse" <dwmw@amazon.co.uk>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLQW1pdCBTaGFo?= <amit@infradead.org>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLVmFyYWQgR2F1dGFt?=
	<varadgautam@gmail.com>, Brian Woods <brian.woods@xilinx.com>, Robert Townley
	<rob.townley@gmail.com>, Bobby Eshleman <bobby.eshleman@gmail.com>,
	=?utf-8?B?4oCL4oCL4oCL4oCL4oCL4oCL4oCLQ29yZXkgTWlueWFyZA==?=
	<cminyard@mvista.com>, Olivier Lambert <olivier.lambert@vates.fr>, "Andrew
 Cooper" <Andrew.Cooper3@citrix.com>, Wei Liu <wl@xen.org>, Ash Wilding
	<ash.j.wilding@gmail.com>, Rahul Singh <Rahul.Singh@arm.com>,
	=?utf-8?B?UGlvdHIgS3LDs2w=?= <piotr.krol@3mdeb.com>, Brendan Kerrigan
	<brendank310@gmail.com>, "Thierry Laurion (Insurgo)" <insurgo@riseup.net>,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, "Oleksandr
 Tyshchenko" <oleksandr_tyshchenko@epam.com>, Deepthi <deepthi.m@ltts.com>,
	Scott Davis <scottwd@gmail.com>
CC: xen-devel <xen-devel@lists.xenproject.org>, Ashley Weltz
	<aweltz@linuxfoundation.org>
Subject: Re: [ANNOUNCE] Call for agenda items for July Community Call @ 1500
 UTC
Thread-Topic: [ANNOUNCE] Call for agenda items for July Community Call @ 1500
 UTC
Thread-Index: AQHXcaj4TGdNKvWHSkOxbJ2RPnVHi6s0b0iA
Date: Mon, 5 Jul 2021 14:23:20 +0000
Message-ID: <BCB410C4-F755-46F3-802B-8F88BE6FBA6A@citrix.com>
References: <9E80CEC4-1ABF-42A1-95DC-D48B4EA8BB42@citrix.com>
In-Reply-To: <9E80CEC4-1ABF-42A1-95DC-D48B4EA8BB42@citrix.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.60.0.2.21)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 1835c9f7-a957-4cc8-9ae6-08d93fc07097
x-ms-traffictypediagnostic: PH0PR03MB5749:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PH0PR03MB5749E08F8D456AC44ECF8396991C9@PH0PR03MB5749.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: HSXEPxXARWF9iWT5D7/mmLbsqBjaNC6Xv3KtNkiYRr6p6XSc4xDOcBEdb2mpt+VxuvJjYxFwOxnPbuMihqROstqau+Y1svM21kZPYgIlSm8GwFiLGJwMWUqCHzoTnW/8C8BFeG9cmMadWBwkd5mqRrS5OqDUqfTPL6ZTXJMiZ0qRXV7ZZkuXsOjxEEUW5Flqcsiy+ldEvlzKeto1gXofuB05MVvgQ8yHdcrgzDghGR133BPSENkqT+8x/qeomv9MNzWqdA01qkauUJwu4gSGbgfpRlzczCPdzCs4Uce9DkIR6nwnWgqyHCuYmn4TR132Ss0D8Bi9G7H/iwRssQSgEqqzf02YxD/R8YXaCdrgFmkKor7m0YiB5WSy9ClH3ZLmhBYHF5l2OHAGWca30OSgV4TLHYoV7RN/G16T7ZNnNGf1jLV8CFzFL6n1CwRNS+j8biaTHVDT94Aa6uYL9jQvrNsCIfgk/yxzr0iz0CiHgdlNeUMUTIYtF6NT4NzVEfmxUQK5/b4II8YjOo6DY5RY8LLgjeYjQbZ0t9lcM7IRRM2c+BSGzFaTHyXSDaZjonMkgy/XpDvJYxGk+S3zbFWUrPI+ehPQY3CUcAtapB6Ezl8y19LR7UO7Spph/nT5qVoQzBpAsi4MiOspUr8P42pMkdTG4SKqtcEhMsXKZfbG6dvtxbjJdnJjy2vJqS9wHQU2dbrzL/AQmyJicaYG446SNZymFx5jr24zLMqCqK/Zrdoq/tlxFYDaQdbTQLZrqT149USv6tkcCziKeDpSxRqZytAcpTe61HnEpBQnfcbDGAROejdhu9Nd5Gay8OUr+koZnC3+YS1sHWHp/i70beQ2gg==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR03MB5669.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39860400002)(346002)(366004)(136003)(396003)(316002)(122000001)(5660300002)(478600001)(8936002)(66946007)(66476007)(38100700002)(966005)(66556008)(8676002)(64756008)(66446008)(6506007)(91956017)(76116006)(53546011)(921005)(71200400001)(2616005)(83380400001)(7416002)(7406005)(4326008)(2906002)(26005)(33656002)(110136005)(54906003)(6486002)(186003)(36756003)(86362001)(6512007)(221023002)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
Content-Type: text/plain; charset="utf-8"
Content-ID: <E260F35451443B448DD4893E9F208A93@namprd03.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR03MB5669.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1835c9f7-a957-4cc8-9ae6-08d93fc07097
X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2021 14:23:20.2431
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: QRUSt/4f+3t9wfZs4Von52wKqArytxjvaXxXhkxdLdvpaPMAS6Ugcfr1r/Q4uevlM/gqdgvDtLQiIwC9rO+eHUPWKozOXHaAyQbLTgBENuY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5749
X-OriginatorOrg: citrix.com

U29ycnksIHRoaXMgc2hvdWxkIHNheSA4IEp1bHk7IHRoaXMgY29taW5nIFRodXJzZGF5Lg0KDQog
LUdlb3JnZQ0KDQo+IE9uIEp1bCA1LCAyMDIxLCBhdCAzOjIwIFBNLCBHZW9yZ2UgRHVubGFwIDxH
ZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+IHdyb3RlOg0KPiANCj4gSGkgYWxsLA0KPiANCj4gVGhl
IHByb3Bvc2VkIGFnZW5kYSBpcyBpbiBodHRwczovL2NyeXB0cGFkLmZyL3BhZC8jLzIvcGFkL2Vk
aXQvaUNYUkxhTUxvTVk4dDZuOTRNWXl3dkx0LyBhbmQgeW91IGNhbiBlZGl0IHRvIGFkZCBpdGVt
cy4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcmVwbHkgdG8gdGhpcyBtYWlsIGRpcmVjdGx5Lg0K
PiANCj4gQWdlbmRhIGl0ZW1zIGFwcHJlY2lhdGVkIGEgZmV3IGRheXMgYmVmb3JlIHRoZSBjYWxs
OiBwbGVhc2UgcHV0IHlvdXIgbmFtZSBiZXNpZGVzIGl0ZW1zIGlmIHlvdSBlZGl0IHRoZSBkb2N1
bWVudC4NCj4gDQo+IE5vdGUgdGhhdCBhdCB0aGlzIGNhbGwgd2Ugd2lsbCBiZSBkaXNjdXNzaW5n
IGEgbmV3IG1vbnRobHkgdGltZSBmb3IgdGhlIGNhbGwuDQo+IA0KPiAqIFRvIGFsbG93IHRpbWUg
dG8gc3dpdGNoIGJldHdlZW4gbWVldGluZ3MsIHdlJ2xsIHBsYW4gb24gc3RhcnRpbmcgdGhlIGFn
ZW5kYSBhdCAxNjowNSBzaGFycC4gIEFpbSB0byBqb2luIGJ5IDE2OjAzIGlmIHBvc3NpYmxlIHRv
IGFsbG9jYXRlIHRpbWUgdG8gc29ydCBvdXQgdGVjaG5pY2FsIGRpZmZpY3VsdGllcyAmYw0KPiAN
Cj4gKiBJZiB5b3Ugd2FudCB0byBiZSBDQydlZCBwbGVhc2UgYWRkIG9yIHJlbW92ZSB5b3Vyc2Vs
ZiBmcm9tIHRoZSBzaWduLXVwLXNoZWV0IGF0IGh0dHBzOi8vY3J5cHRwYWQuZnIvcGFkLyMvMi9w
YWQvZWRpdC9EOXZHemloUHh4QU9lNlJGUHowc1JDZisvDQo+IA0KPiBCZXN0IFJlZ2FyZHMNCj4g
R2VvcmdlDQo+IA0KPiANCj4gPT0gRGlhbC1pbiBJbmZvcm1hdGlvbiA9PQ0KPiAjIyBNZWV0aW5n
IHRpbWUNCj4gMTU6MDAgLSAxNjowMCBVVEMNCj4gRnVydGhlciBJbnRlcm5hdGlvbmFsIG1lZXRp
bmcgdGltZXM6IGh0dHBzOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS93b3JsZGNsb2NrL21lZXRpbmdk
ZXRhaWxzLmh0bWw/eWVhcj0yMDIxJm1vbnRoPTA3JmRheT04JmhvdXI9MTUmbWluPTAmc2VjPTAm
cDE9MTIzNCZwMj0zNyZwMz0yMjQmcDQ9MTc5DQo+IA0KPiANCj4gIyMgRGlhbCBpbiBkZXRhaWxz
DQo+IFdlYjogaHR0cHM6Ly9tZWV0LmppdC5zaS9YZW5Qcm9qZWN0Q29tbXVuaXR5Q2FsbA0KPiAN
Cj4gRGlhbC1pbiBpbmZvIGFuZCBwaW4gY2FuIGJlIGZvdW5kIGhlcmU6DQo+IA0KPiBodHRwczov
L21lZXQuaml0LnNpL3N0YXRpYy9kaWFsSW5JbmZvLmh0bWw/cm9vbT1YZW5Qcm9qZWN0Q29tbXVu
aXR5Q2FsbA0KDQo=


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:25:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:25:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150273.277866 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PWv-0003en-Fo; Mon, 05 Jul 2021 14:25:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150273.277866; Mon, 05 Jul 2021 14:25:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0PWv-0003eg-CX; Mon, 05 Jul 2021 14:25:01 +0000
Received: by outflank-mailman (input) for mailman id 150273;
 Mon, 05 Jul 2021 14:24:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0PWt-0003eQ-HO
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 14:24:59 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 327dae56-84da-4c8c-9d38-d95dd18a10de;
 Mon, 05 Jul 2021 14:24:58 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65EOqMuF
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 16:24:52 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 327dae56-84da-4c8c-9d38-d95dd18a10de
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625495092;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=Z0IkIWVecSGOPPqeDUqHlG/6298s4P2T/BMxZcZVPXM=;
    b=jXPReIKZbXe8VomxOQE3nbwYnynGh6jUCUYqNIEw2I+pvZ1DxcjGKGNAm86fuBzpkc
    9wMyR9eeqf/8JvmP6aIeYCab6UuodkDp83aigTjXOFfExrchkUSapQ8UYBea1ny7Alvf
    ebYeuzdPDCaBZ2WkHZkXaRUexbkDVjkSvWL0aZSjzl0CIks2JN5RnLd7mmqayl4F0HhB
    mxJs3S9RZl/3vYEP32xfqm38NgLgbUwenYBLWGriitzIRoqVPXz2bmulzIsahskaE/l6
    fVMe1qVnkdQfFkJFcf/RI7EMZe7ZElyXYQffxcuyoXrkZIk22CB3W588Jp7+sLaX1mYR
    WBZQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 16:24:45 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 10/40] tools: add xc_is_known_page_type to
 libxenctrl
Message-ID: <20210705162445.2007bdff.olaf@aepfle.de>
In-Reply-To: <8762eaaf-a8bc-430b-470d-b84f68c06b5b@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-11-olaf@aepfle.de>
	<3c0efa9b-aaff-b4b7-0fd5-9eed32b20e01@citrix.com>
	<20210705102230.48a86473.olaf@aepfle.de>
	<8762eaaf-a8bc-430b-470d-b84f68c06b5b@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/gUZQcwH7533mzsYNXb1_jws";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/gUZQcwH7533mzsYNXb1_jws
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 10:51:50 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> All type fields are uniformly uint32_t elsewhere.

To me it looks like xc_get_pfn_type_batch writes to an array of xen_pfn_t.

Olaf

--Sig_/gUZQcwH7533mzsYNXb1_jws
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDjFi0ACgkQ86SN7mm1
DoAApBAAg7UaSj5ZBgfRymqjFXjB8Xhp2ZiimPCE4e2Z4PVPKXTgSiU1MGONW9Or
g5W1Jju5rhpXrE/cEa3de2FgwpoM64bqZnzABkudd92LB0gyT9HsE17IRMt13rwC
lh82w0k7YhNgKUVVdT7SJG8PFiizp3urySGSVjAxXMvP7Nnnsxc7Yi9yq3vll2JA
xJZoDFMuhzZmATjJyTVkE2MrrMZ3YnGdX/CTXXt1so/JFsGLJW5SWJ+Ixu2d+GJ/
uLMPMAL4M1Rqqlt6ye65IZEfJmRRN4WRK/r9P2PvAvWQ1JQQBm9ICeOPwJmr46ej
6sEPAKsFK26UMIkeutJf/ktzDz/6pgfWPH5EIVEOjactdz8m9NGnndqeIjEChlaW
eNkBRORhDwEebaDGYFGfNbBp6P2aiar7KT6ZowA5HLywDDus+tMaEndUBhl2vnZF
lE66Fle4vPSefcsaOC58AVlWeUAchO2Z+yq8yuaMf10B1HKyS70lpM1jToGORepr
zmgfAg5bdZOlizh2ss6dVThWuhwCZhvcBVKQmi4E4WzbydXBjyDwdRGNZCFynLDV
Yb4Hq2Br7Zt71FS/eqxpgZriR3EIJqCQFAy9HftWggHOV5K8NlSB8J7mVS/ThFy3
O7UofqbuTlFYdFKrxXGQgMWVfz4P6LUS/Up8cIDoKGMfMeGScxM=
=Q5tV
-----END PGP SIGNATURE-----

--Sig_/gUZQcwH7533mzsYNXb1_jws--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:28:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:28:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150279.277876 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Pa5-0004LP-Um; Mon, 05 Jul 2021 14:28:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150279.277876; Mon, 05 Jul 2021 14:28:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Pa5-0004LI-Rb; Mon, 05 Jul 2021 14:28:17 +0000
Received: by outflank-mailman (input) for mailman id 150279;
 Mon, 05 Jul 2021 14:28:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Pa5-0004L6-9f; Mon, 05 Jul 2021 14:28:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Pa5-0008Rd-4L; Mon, 05 Jul 2021 14:28:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Pa4-0001CC-RU; Mon, 05 Jul 2021 14:28:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Pa4-0006CU-Oa; Mon, 05 Jul 2021 14:28:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=80Gjly+jmVpQeWETbTP1YqNAJsQUaBrJQQ1BL8ZpJNQ=; b=jkpqhvWbtTUk2L+V+Yk0/UUlXA
	Skzqf2jkW1AKOZXrIqDjQFE129VpO2AhXiAWhFMzKbCA3JkWh57nwrCplRrovGbB67uzVlRp9/Aem
	QjbrTbLZMRd1lTSmHayYp90ZMqZKstF3ovZOQy/t1vzOvH1wM+InTxZrKaCLSGFeEryE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163310-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163310: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=383b41974d5543b62f3181d216070fe3691fb130
X-Osstest-Versions-That:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 14:28:16 +0000

flight 163310 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163310/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  383b41974d5543b62f3181d216070fe3691fb130
baseline version:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8

Last test of basis   163230  2021-07-02 18:01:38 Z    2 days
Testing same since   163310  2021-07-05 11:01:38 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   74d044d51b..383b41974d  383b41974d5543b62f3181d216070fe3691fb130 -> smoke


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 14:40:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 14:40:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150287.277890 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Pln-0006a6-1j; Mon, 05 Jul 2021 14:40:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150287.277890; Mon, 05 Jul 2021 14:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Plm-0006Zz-V3; Mon, 05 Jul 2021 14:40:22 +0000
Received: by outflank-mailman (input) for mailman id 150287;
 Mon, 05 Jul 2021 14:40:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Pll-0006Zt-Ss
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 14:40:21 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 355f227d-13ad-4d17-b126-c92b1cbbfdc3;
 Mon, 05 Jul 2021 14:40:21 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2111.outbound.protection.outlook.com [104.47.17.111])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-19-W1IniUwVMl6UIUm5OdrQwg-1; Mon, 05 Jul 2021 16:40:19 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4349.eurprd04.prod.outlook.com (2603:10a6:803:40::27)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 14:40:17 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 14:40:17 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P189CA0057.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:53::32) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 14:40:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 355f227d-13ad-4d17-b126-c92b1cbbfdc3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625496020;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=203FE0NQ52LlSVCSKTMDtBwPSKT4SfWfRpQHyfgn/fw=;
	b=H6RCPJJbhbnhP5SMqZV4nqyd8ub9AOjFYUB1PLpY4ks3IaRzjfPzmbm1zc5l3ySCDsI7tQ
	KBzRgf6T79mB6/iwXPUjVoLaalogxrWQTYtf/J7fIqyRom1KRmGbjj6+Ch5CnUKjjGS/Ep
	60xPZgr/mVjUvU1s1sAgUzRuA6eafEA=
X-MC-Unique: W1IniUwVMl6UIUm5OdrQwg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GR6+QsFIv6lDs49tIa6OtoqfZRbHa3reF+NjYKGKp+4eN7QHH1iL4VL8/EgonlxE2qxoSK/ovhq1qrrZL5XdoJY2lAVaTnpsVIy3+qndmq0eji3uY/5f4MMyMKz9kPDvOT+XQYsRrzNkc9+YYLJ2FCNVgbXw+DqM3yI+I9gT4XDoYVmVNoA2yAO0xOQGAGP7wN1RvGvJm4nLFFwHB+SAVzu84iSsF9gqnKVtZBJ8GLsZ4Oy35saPc1AmN0nFR7GbfhHGdUcuPF3ZzaF17KyFgDkuRyTilx+XqjpcFLuSkn49wN5a4O+tMfETmLPOCJx82JjzwAnTsxd3QGwtAqThDA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=203FE0NQ52LlSVCSKTMDtBwPSKT4SfWfRpQHyfgn/fw=;
 b=VpgPLhQO9NCOHfaNYJy+6upFhTM3nVCoh5nYAOjvfbIuYRnqozJrNn1asNW3JF/49AaJj0kcaMBtSpe7IkAiTxLzI9dft2TLL+/3HdK2KpUACzmVOyDybphauNoCIINCBAbq8SFwC9RrZzhNDUdJVpFGRpUDOapt6ab+8doXFsebe6Cm5BQtcWve6eGLvmLPbaHK1Q6u5gEM/13siDqh+H6CVDUDLV3zU9wmrK8dt6H/ENrRUEx7M3gvIIn/j2ib5A5cR2radYEgMUTVMgAnmpUkXxZUAW7xAq0L+SXNvLaEjXyPEAIq6EqmSZQuX4u+PL7NIVmbktAG2V5rNeD7+w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 01/31] build: fix %.s: %.S rule
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-2-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <90d965d1-40a7-5277-5477-4b5c5a858b33@suse.com>
Date: Mon, 5 Jul 2021 16:40:15 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-2-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P189CA0057.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:102:53::32) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0bad715c-c6ba-4216-9b58-08d93fc2ce79
X-MS-TrafficTypeDiagnostic: VI1PR04MB4349:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4349B0B778FE2963556C23EFB31C9@VI1PR04MB4349.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:483;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	MbX+sB7phdoenE9gFU+l3x4x5cm+7dwrrXPZGLmyEnmFV3/G3pRmRgalLbZD+3F1kgFky3WsOECsUNXv93zCdgfh+zupg3xP3BJpWaNdqSFPsfSPbFJBis2rH20BNilBe1kSY4CG0UFDbxILv9+rN2NwPL+BvIdhiMXSwBkawaCkFH/iDi8H6fqXCVyKB9HXOWD53as/VedNgS+kHFi6zvlDpzzBbJXJbbl7B/44xZXcYHOYDmWypFcRqXKbiwYhH7nqWXWW+4hSCiFSGdUwN5oNGEH82xHn/3GUfI7jZuBtgJWhDb06dtewlxOSx3e0ZwQuZVJKs0i8BxHxr0x19G51q7ju9X4FBXXRs+FDhv6fLVs1h0y788EAgnHlfGeH5nOyP7HhNQOiSITxdYfCLNIqb/J7VmeRxMt8uudEtKdklEy3ut7XJaiHKP2LVJiCdD7Juf+Lv8QIIfXEzBkj/F0l+AxWh52r044Um920lyH6NTFF6gL4QJqOlHw1NYJQWkmBJ80Mb3LI9mfUGGIMgScF/em0gPdt7CPfRYw/GymzyHKtncJGQAlYOD++et7ajmnhnAqyKxgmZ9k6g0/74NSG/L/7gYfduMh8WZ8S4YHacUmw/cz7h3tUBT6PK04tJY+oongvlvciFlV+VrjL5TFkiIGT9upcS/I6h2ZnDXwlVClSavnAwjjPFbvZPmGK1hO77mzhj05q0b9symwoRjwRYBH6ygNIqXnWZijeScg6ZP2OmX9l2lEdrts8TdTn
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(366004)(39860400002)(396003)(136003)(2616005)(6916009)(478600001)(186003)(8936002)(53546011)(16576012)(956004)(26005)(54906003)(6486002)(5660300002)(316002)(66946007)(16526019)(31696002)(38100700002)(36756003)(8676002)(31686004)(4326008)(86362001)(2906002)(558084003)(66476007)(66556008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0bad715c-c6ba-4216-9b58-08d93fc2ce79
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 14:40:17.0696
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RJ54eg4r7bN8dk894zsH2ENUaGMVNaYDMHp88iLvKR4lXJzJ9ti99zQBpILVVPI7ZdI0nEBtpBZTKKOBYI8vOA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4349

On 01.07.2021 16:09, Anthony PERARD wrote:
> Fixes: e321576f4047 ("xen/build: start using if_changed")
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:09:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:09:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150300.277913 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QE9-0000mo-JG; Mon, 05 Jul 2021 15:09:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150300.277913; Mon, 05 Jul 2021 15:09:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QE9-0000mh-FR; Mon, 05 Jul 2021 15:09:41 +0000
Received: by outflank-mailman (input) for mailman id 150300;
 Mon, 05 Jul 2021 15:09:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QE7-0000mb-QY
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:09:39 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 03893818-dda3-11eb-844a-12813bfff9fa;
 Mon, 05 Jul 2021 15:09:38 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2105.outbound.protection.outlook.com [104.47.17.105])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-22-0sHwquLPM4yUJ9oJgtlG5w-2; Mon, 05 Jul 2021 17:09:36 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7040.eurprd04.prod.outlook.com (2603:10a6:800:121::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Mon, 5 Jul
 2021 15:09:32 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:09:32 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR05CA0097.eurprd05.prod.outlook.com (2603:10a6:207:1::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 15:09:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 03893818-dda3-11eb-844a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625497777;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=5buNUgj+0oVWdtvoqKZy3ZklKKtVIW8m9kzUCtBgzHw=;
	b=bFR2ReMCx05VBme/Fno3elJZVffZNAsrM60rLBlpGat81kQuXqPmX7Ok1pKM7HUzusGvlw
	xxtzWvbPvkay59mO9IWgPLVLvsUR/IYhXTf366/O/XE3UsiOxEOCXxuLrtFHj8JfDUCVuH
	0YNWZ/dHcXzdnaOrHifAT8+d4mF3xms=
X-MC-Unique: 0sHwquLPM4yUJ9oJgtlG5w-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jAyiqCDOQ7s6l35fvf3Ps6ZxyqfFzPPWX4z/6rzuBIhkib4a9xwCwKY7/Qx1Ha8thTAFKRYkbuUsHbJkr9ftaOMtoeSEu/Ruva9F+4eiHnRY1Uda2SwW5T6cBK/RsSx1W12AuXBKBjh0JEBJBuMlpPs5foO8cS8fM4BiF/7UziVlrI7b0ZZm+QipkhE5dtg0DB2fuukPlpNJTqJO4wAZH++0yiguef+foCo9K20Z6lgFw3HuM70di8C9s2uwWGUkB+YQ3aJgZXzSlX7k0I9FdX1cpJ+ltsJVMsGZsbTJWVpJH86R7pbwldY/boxJlLnTNoT6vMWlSN5WikcsXRxcIA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5buNUgj+0oVWdtvoqKZy3ZklKKtVIW8m9kzUCtBgzHw=;
 b=MllU1UZF7dAS8ngAhmZXe4gSN8HdRlugMitx3dL09/WzSeJMpSbiM4vh+gg2kg4kCkvI58hsmst8KBPolpU7dCWT/Txiy2aHW5KSoR9wh0U3fQUev0jbB9tBfdle4rH8nlbe+qVAsX2Y1C/lXV5cZwwB/lExFq0Lz0EjlruneIDkQQEyXF3L6BX+9eSfQkfENp4TLxF7lbWqOMYrFQf7qRlbkj3XO4s9t/2K8iCIAEcat2KREj2WcBeQmgDbZhSsTPab6d6sj46K0fzCaRLBf7EZv3MiZBxm0puvkJsqefmaPDgAjeRYKKpM5T3r2tits0gtbO1D6FsXn64+VUxbEQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v2 00/13] x86: more or less log-dirty related improvements
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Message-ID: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Date: Mon, 5 Jul 2021 17:09:30 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM3PR05CA0097.eurprd05.prod.outlook.com
 (2603:10a6:207:1::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3e1a3f87-f789-4572-9ea6-08d93fc6e4bf
X-MS-TrafficTypeDiagnostic: VI1PR04MB7040:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB70404E4B413FD3843FCA06CAB31C9@VI1PR04MB7040.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Cem+X/0k4dhgAaWMvqI/e8gjFeqpheR2FPuFUL8sLXj5mHCYdDXaj3SDJiJmWYRbgLbVAFdI8aPYJkG39a5KV7U6Y9Kwb/SGRyQtKUq6ZA8LXozQJI1TtpvelmlremfjbpO9iTWI/hz/7Sp6qaO9TcpXdz88L+R+k9xuX1afbHxkxcviM52KDDus8AXLyZmCtPDP0RkUieUaz0Ybx363Wj4vPv2iRfMpq6GJOz4dAsl0pWG/yQqFM/590mN7t4Jy49DU99HlTxb9CGQWqerSN9ZO55e37EWElwQqV7QCwP3GVJ8cS8hCnVtRdnIONnDTnd0h1JJ8zY9s44pI6C/ZcXgIHpdeiXXLgMZGh0ybAxoN9pvpzdJRf2TtHjK0H2FjXl5NtFiftvTI2Mp4QskT8Ze/rvgxS0b1Cw9keaXZ13id38KNPpalCLd9iel39QpnbDV86zYZycCUdHCbf+MELrwzkeAvWlbQUqsG9UyZSD59B67P/Xe0KA8M27oU/NkrGJ14oIhHmLBZaG7vJQ3FuoCZbTFIEZqySnM7k2+j141UFiuzRgiphSe92LACsTi29Y8b6GPsn5E1OitEU83LtptTg2kWJ8wpXDDTKwaPARp1cu+VJrjspkpYQ2DxtvhvYUo63wtPlCDnpVtTbhiNMqjoz7MH+mHPwVmYFg3nOwJaBt7OvJ3asQfKKV4k4IoGAqmAX9GqcONptE5BqrrINNsFgd24JA2xnq2J6TzVgVCX1i5CK9FxB46TeYx4bhxl
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(39850400004)(136003)(366004)(396003)(66476007)(6916009)(2906002)(66946007)(8676002)(16526019)(66556008)(31696002)(316002)(26005)(31686004)(83380400001)(2616005)(54906003)(478600001)(956004)(16576012)(4326008)(38100700002)(36756003)(6486002)(86362001)(8936002)(186003)(5660300002)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3e1a3f87-f789-4572-9ea6-08d93fc6e4bf
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:09:32.4582
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lyDOcpotiAB5HMVvw1cBXjnfe1NzpjCYn4J8yQJeQ1PxW4U9CYEGUYC8C3/LKa1DwhcJKE/GU7sUvbDpSgrQcA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7040

... or so I hope. This series continues the attempt to deal with
the ovmf change putting the shared info page at a very high address
(which is now planned to get reverted there, but the general
problem doesn't go away by them doing so). There are further issues
with truncated value, which are being dealt with here. But there
are also not directly related changes, when I simply spotted things
that aren't very likely to be right the way they are. And then
there are also adjustments to the underlying hypervisor
implementation, with the goal of making the returned data more
useful to the consumers.

With these changes in place, a 1Gb guest which has "inflated"
itself by putting a page right below the 16Tb boundary migrates
successfully, albeit the process takes from some 20 minutes to over
half an hour on my test system.

In v2, besides integrating 2 patches that were previously sent,
there's one new patch and otherwise review feedback addressed
(albeit there wasn't any for a number of patches).

01: libxl/x86: check return value of SHADOW_OP_SET_ALLOCATION domctl
02: libxc: split xc_logdirty_control() from xc_shadow_control()
03: libxenguest: deal with log-dirty op stats overflow
04: libxenguest: short-circuit "all-dirty" handling
05: libxenguest: avoid allocating unused deferred-pages bitmap
06: libxenguest: complete loops in xc_map_domain_meminfo()
07: libxenguest: guard against overflow from too large p2m when checkpointing
08: libxenguest: fix off-by-1 in colo-secondary-bitmap merging
09: libxenguest: restrict PV guest size
10: libxc: simplify HYPERCALL_BUFFER()
11: x86/paging: supply more useful log-dirty page count
12: x86/mm: update log-dirty bitmap when manipulating P2M
13: SUPPORT.md: write down restriction of 32-bit tool stacks

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:11:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:11:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150305.277925 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QG4-00025M-0c; Mon, 05 Jul 2021 15:11:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150305.277925; Mon, 05 Jul 2021 15:11:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QG3-00025F-Sq; Mon, 05 Jul 2021 15:11:39 +0000
Received: by outflank-mailman (input) for mailman id 150305;
 Mon, 05 Jul 2021 15:11:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QG2-000257-LG
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:11:38 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4aa2fea0-dda3-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:11:37 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2106.outbound.protection.outlook.com [104.47.17.106])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-23-0QQlHkl5MuelEz4g36NN0Q-1; Mon, 05 Jul 2021 17:11:35 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7040.eurprd04.prod.outlook.com (2603:10a6:800:121::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Mon, 5 Jul
 2021 15:11:33 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:11:33 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR03CA0010.eurprd03.prod.outlook.com (2603:10a6:208:14::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 15:11:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4aa2fea0-dda3-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625497896;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=AcLhpKAZnmoAxFsMXWPBvUtE43UW7eAar8znGWUZKyw=;
	b=h2PNj40u9CVZdI6sQ3nSpOL66MYx1VTQPzmRmQtdIvUuzWhtycH/mpB3CvdBZ99kRHeF4h
	0I+LBUe9vRBNvMxypuieM4kyysAIRJi5eB6PFN5Oby8AVUEuKcUHeIPewu0oYc0/Lus5CS
	fZKBnpfkn9c4FW1Zoeh/hokpZtmRBeA=
X-MC-Unique: 0QQlHkl5MuelEz4g36NN0Q-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jlvKvdqYLYu7h/KlKE3pgNssHdz0OXu/LBVV8aYbKrWZq4LTZ7y5SJ2RiuvBFsddmFWUFqtWXVfMS73GOnH8+Bh3gGV6MpimR2Ezq+JxgZiSkwj+dm+4HpAUmAkMUaU+AkIv6EQTztmsa0z2ioKoa2GD7VtcPj/HQIiD10ZdjLtv7MZ4Fau9EwqcxI+Une5mleSM7VFLSz1xFqiQjRYy2t/RDEgupqNXunlWLyW8vD0S9KkL9r6I0by5DtOeiCxWjV8ZZg+4dnsl68DL4PkYPXrRTn0zyV0vETS59D24hwi7kzN/qbkiyPGKgWvuOizMzFNqYj8I4HNaNEJoDbU/Yw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=AcLhpKAZnmoAxFsMXWPBvUtE43UW7eAar8znGWUZKyw=;
 b=ON+KynClQBccv0jFvPU81/NGcVK8MLpotaL6Ayq+ZYjBfNXSki9B/UU56Q3fd3HPt3AAtN2S/kYqmWAQ/eDlxmiEd3kgbBjiAbt8SuhPalfI/cBU50E3p8EMPJkUypDdTBtBiKLf9r7OsaqpiLJVAGoi7HEkrnLUVfumBNCR59tFrhLLeA36dDVQto40L5MkJaUu3Anv4kKBNEdxAYBj92dmixfJ3l+n5FQ/WseF3blyRVMxclN7hqRoGVj3um9Z4sIymIcnOv4+J4QcPYrnlKRpfFEw6kH9pfbxd65bVZt2Pp7Gr6dbyfCqIExJoGv8hoWkCzcBa4dz3QELKoYiSQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 01/13] libxl/x86: check return value of
 SHADOW_OP_SET_ALLOCATION domctl
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Anthony Perard <anthony.perard@citrix.com>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <4d1e5a4d-05cf-964a-bc4b-9eecf26e58bb@suse.com>
Date: Mon, 5 Jul 2021 17:11:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM0PR03CA0010.eurprd03.prod.outlook.com
 (2603:10a6:208:14::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 442c4d2b-6579-446a-749c-08d93fc72d0a
X-MS-TrafficTypeDiagnostic: VI1PR04MB7040:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7040B50488DC5276E613A4FCB31C9@VI1PR04MB7040.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	SfbgCr67Afsa+5XOZd00sSTSJbCANVFNbzkAeq/kCiB+BqFS7YFicASfd6iYIstbNserlVfN3dKA+fuWsI6d7dPR7vw/mlr1N1TjqXf9O7nY4odBhTmE3bkBJkhKiB7WUlzVRrG7zBePqelMCnvCa+CEuP9BoNSu/PV07qh46UA/rz7JaLGn2pdvCJr/+yCkdFncpoVDyw85gVFFgtD6GyaXXDEUDpe0GjuZO3w/ettHlOClt4k9mzuOXlM/KyVynF6l2X7c15AqSDOPQ0ODZi5qft/Vqc1vYg2QFgWXqIRxfMZLIr8gw48Jx++3yklUWQcETpc4RBv9J3wvSSLTx8gYiYwbpQbQKINnizFE6sqpn1CqwbOkKMEH14VotZAvnIXgLTwl2d23vNEEIGS0U9bNLRyKdqHtSVqY2ck08ePK+b98EZFj/IVI5l2U3mfso3YdWGGimuv4TD2tQmUil5W1HcDEujzpgMkjEs/gycXvAOoc5l4bRTeL1NG4A9Lx8z12z7vj3+w/ANpZuzccCt9AMwtMxiNfmhBQ0FuPlluSOT1ezZm1FuTs6VEpPnhlaJcXFTMU2K+GiHFO29tOg1ArywQP9Y5SfkMw+PCRJLfdezKeJR2y0po3MQ19hjgnHDgjBsBQpXtEgS4RzxZITYainJoC/33qbdWEdiKCreGko459tsYEP9fhzf0Zh6qWBkgbYuEHtOPcWYncVui4HpY0KjxIruMfHIoq25gb3M1tWHJxTAem5ZGiAdxSN3zM
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(39850400004)(136003)(366004)(396003)(66476007)(6916009)(2906002)(66946007)(8676002)(16526019)(66556008)(31696002)(316002)(26005)(31686004)(83380400001)(2616005)(54906003)(478600001)(956004)(16576012)(4326008)(38100700002)(36756003)(6486002)(86362001)(8936002)(186003)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?ZKlselcOf2mQmvzVbxkmJAc6D9G/tZGhj5FrOW1?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 442c4d2b-6579-446a-749c-08d93fc72d0a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:11:33.7406
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: m3n2xBuPFyp/hKn9REGuD7w12w+nnnk+1K+EBAUwF5AeAhox9eGxN9jqzCV8MKfpoERxMPf3E/12F8Q10b8lpg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7040

The hypervisor may not have enough memory to satisfy the request. While
there, make the unit of the value clear by renaming the local variable.

Requested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
v2: Rename local variables. Also log requested value. Don't log errno
    explicitly in LOGED() (nor function return value). Integrate into
    series.
---
Especially if the request was mostly fulfilled, guests may have done
fine despite the failure, so there is a risk of perceived regressions
here. But not checking the error at all was certainly wrong.

--- a/tools/libs/light/libxl_x86.c
+++ b/tools/libs/light/libxl_x86.c
@@ -529,10 +529,20 @@ int libxl__arch_domain_create(libxl__gc
         xc_domain_set_time_offset(ctx->xch, domid, rtc_timeoffset);
 
     if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
-        unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
-                                           1024);
-        xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
-                          NULL, 0, &shadow, 0, NULL);
+        unsigned long shadow_mb = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
+                                              1024);
+        int r = xc_shadow_control(ctx->xch, domid,
+                                  XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
+                                  NULL, 0, &shadow_mb, 0, NULL);
+
+        if (r) {
+            LOGED(ERROR, domid,
+                  "Failed to set %lu MiB %s allocation",
+                  shadow_mb,
+                  libxl_defbool_val(d_config->c_info.hap) ? "HAP" : "shadow");
+            ret = ERROR_FAIL;
+            goto out;
+        }
     }
 
     if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_PV &&



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:12:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:12:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150312.277936 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QHD-0002ii-AD; Mon, 05 Jul 2021 15:12:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150312.277936; Mon, 05 Jul 2021 15:12:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QHD-0002ib-7F; Mon, 05 Jul 2021 15:12:51 +0000
Received: by outflank-mailman (input) for mailman id 150312;
 Mon, 05 Jul 2021 15:12:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QHB-0002iP-GL
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:12:49 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 74c9d2d1-dda3-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:12:48 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2110.outbound.protection.outlook.com [104.47.17.110])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-DElJ5Ev7NLic4a7_EVn6KA-2; Mon, 05 Jul 2021 17:12:46 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5743.eurprd04.prod.outlook.com (2603:10a6:803:e0::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:12:43 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:12:43 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0034.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.23 via Frontend Transport; Mon, 5 Jul 2021 15:12:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 74c9d2d1-dda3-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625497967;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=dSF+8ncpJENw+5ko2Cel0fh192iyYi0fqzxuUE451AI=;
	b=VFP4zJ8vLVZfJkyKQR+DqxiIBh7FvyUZD4uwGOiq6YDjOBMjJgtANH4kT1ksyXB+4rdzse
	+kUICmp47KL9UHv7BJujR1mQOr7wsj8bJAbN2L71GaiTUUtynTKK/3gKl+MZF6ljxvIRmq
	odZx/l99yx/j2UOwxAz6dTBBAEJUP0w=
X-MC-Unique: DElJ5Ev7NLic4a7_EVn6KA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dX7pewv2J/SAi6O+8CXw3kZ2afdsOcPEBeZXPBRdjfEnKHkPGc3qGIdNtnH5XLHJxtSC/3DDjpSD7AHvpQlUR1Hyk5oZqFuno3q7kiXXWok+M936SdY5B/ogxdLN38zIqE84dMPHyMLjfWYATKMx1j7ax4Fbags34gJQV2x72j83gtdOvRGQXBAsT+21XjT1WpWC9gh7VDgS07IpeHdHaz8mzHm2nLJK98zxxSNRt7ILGcNH4m8cko2GbPdJCVzJ+FcbOKLUOaSxGzelsOF7X38ZkUe9oDIJKLC/2rO8zMEFN46qpGFpCtI8zAQJxzXvIfrtpE+ccRXqUHJeusZvuQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dSF+8ncpJENw+5ko2Cel0fh192iyYi0fqzxuUE451AI=;
 b=i1+duneueEgIyI5hQ1G3Ss8COpSV+AxOlMH1IEJ3rLmkM+s7hnJj/W70ic+XdZqPV6COVPxb/nlLvUG8ilhWbLxDWo2Kl+oTxHYpeyhCVDPz8hjrwwpN6Kn2IUMxyd+ckCPqkFkT+N6fgzhZCp4gf2fkDQO0zwzGOdsPsNiNaWQHTkis8pqbMfzqRB+T9KLwDbJxxlqlPiY2f33RgodtdnWs0uOPOvlxEG/wcQ/V4tKmI5qUbnEIJ9Y3MB82K2/8LYhZhdttBM8tHDQxu5+qB3dksKW7syhhUeGY1Hr3KLllSQvbGsVk8/RyukGxkAhVeJ+mDjKZZenTl7BOBEHzJA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: invisiblethingslab.com; dkim=none (message not signed)
 header.d=none;invisiblethingslab.com; dmarc=none action=none
 header.from=suse.com;
Subject: [PATCH v2 02/13] libxc: split xc_logdirty_control() from
 xc_shadow_control()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Anthony Perard
 <anthony.perard@citrix.com>,
 Marek Marczykowski <marmarek@invisiblethingslab.com>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <4b68233b-259c-3308-3292-82e991e1e108@suse.com>
Date: Mon, 5 Jul 2021 17:12:41 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR1P264CA0034.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4af11203-6bcb-4f94-ea2d-08d93fc756a7
X-MS-TrafficTypeDiagnostic: VI1PR04MB5743:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB57432FD56FB8A6F014A50C04B31C9@VI1PR04MB5743.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:109;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2Pi/QJeHpblpF7Ws4tWqv7ijzwJeKxVcM2juk7CnuJvEyy0ntuMAOySBa6quAwF9mAjhaxZQnXCtd8q3xC6NoDBE6IKXKuHt0vZrFEk7oggY8NgRcH1zss0eBcs5IyCO9nsCDpi5C4Vfi85bVk0ANzdE1ntdkh6oro8xADoR+Ev3eeIU/WwUCiktSI2Je4B6c529masBlb2jgO/a3Xus1MJ5Iwj4wF3Xj7pItGh0m1E3kVpe51W52+EVQ0ozTie7YNbd1Zno9gI4YBLtYFJFMqm5Ix+UAeQrJIfNuVKyb+Cwa8ExtoU3WEfBxEWftoHmFMznsegKu1+eOv3gqKqEPT3LcXbSLaSmPqNEbNcXpRUfUPegCtHQTWu+ZsP23GEAOKRc27snLKOflpz0LTdw+zy0fzF1wPQK3Diyr5IV6YhEmL3ozE9XPAMjip4Vt28MInzJm4Xti5FTr7fhj3/bvEBXcNYsLOSAgyJ/NWIDtKutJAft320bWL+XFbM8ghsHlzWbIi+8Fyn6PMweHSBCH03EcgbLm6/IDRu7N0hAodAAEEMvQx6pL4C/gT72LOSPHeRXjCmdTmJ2maFtO/7edyN95ghmPQHZvVJj4qFw8+aGbTHkb72mFKvWIhtiR6Pavh/ZCv7KiZZP1Nu/uJvKS9Gl3KOCF9iKZzfwyYRV8MFp1p9WFCalprfENKzDx8l7sXVvcpUXt4P+nB818Llo9jaZvyRSebgmn3yN8KYTUhU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(396003)(136003)(376002)(366004)(346002)(16576012)(83380400001)(6486002)(16526019)(6916009)(4326008)(8936002)(8676002)(186003)(36756003)(478600001)(316002)(38100700002)(26005)(86362001)(31696002)(2906002)(66946007)(5660300002)(31686004)(66556008)(54906003)(66476007)(2616005)(956004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4af11203-6bcb-4f94-ea2d-08d93fc756a7
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:12:43.5632
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: GoHXPffcNrMgIL9BzanjV1L8BenLzH1H5efyuJK6kxx9x9bbT78qH/1TQ/EhYi3AcwAEeCz1q617A2Thu4P6IQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5743

For log-dirty operations a 64-bit field is being truncated to become an
"int" return value. Seeing the large number of arguments the present
function takes, reduce its set of parameters to that needed for all
operations not involving the log-dirty bitmap, while introducing a new
wrapper for the log-dirty bitmap operations. This new function in turn
doesn't need an "mb" parameter, but has a 64-bit return type. (Using the
return value in favor of a pointer-type parameter is left as is, to
disturb callers as little as possible.)

While altering xc_shadow_control() anyway, also adjust the types of the
last two of the remaining parameters.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
---
v2: Avoid new use of DECLARE_DOMCTL. Re-base over error handling fix to
    libxl__arch_domain_create().
---
I wonder whether we shouldn't take the opportunity and also rename
xc_shadow_control() to, say, xc_paging_control(), matching the layer
above the HAP/shadow distinction in the hypervisor.

--- a/tools/include/xenctrl.h
+++ b/tools/include/xenctrl.h
@@ -885,11 +885,15 @@ typedef struct xen_domctl_shadow_op_stat
 int xc_shadow_control(xc_interface *xch,
                       uint32_t domid,
                       unsigned int sop,
-                      xc_hypercall_buffer_t *dirty_bitmap,
-                      unsigned long pages,
-                      unsigned long *mb,
-                      uint32_t mode,
-                      xc_shadow_op_stats_t *stats);
+                      unsigned int *mb,
+                      unsigned int mode);
+long long xc_logdirty_control(xc_interface *xch,
+                              uint32_t domid,
+                              unsigned int sop,
+                              xc_hypercall_buffer_t *dirty_bitmap,
+                              unsigned long pages,
+                              unsigned int mode,
+                              xc_shadow_op_stats_t *stats);
 
 int xc_sched_credit_domain_set(xc_interface *xch,
                                uint32_t domid,
--- a/tools/libs/ctrl/xc_domain.c
+++ b/tools/libs/ctrl/xc_domain.c
@@ -650,25 +650,49 @@ int xc_watchdog(xc_interface *xch,
 int xc_shadow_control(xc_interface *xch,
                       uint32_t domid,
                       unsigned int sop,
-                      xc_hypercall_buffer_t *dirty_bitmap,
-                      unsigned long pages,
-                      unsigned long *mb,
-                      uint32_t mode,
-                      xc_shadow_op_stats_t *stats)
+                      unsigned int *mb,
+                      unsigned int mode)
 {
     int rc;
     DECLARE_DOMCTL;
-    DECLARE_HYPERCALL_BUFFER_ARGUMENT(dirty_bitmap);
 
     memset(&domctl, 0, sizeof(domctl));
 
     domctl.cmd = XEN_DOMCTL_shadow_op;
     domctl.domain = domid;
     domctl.u.shadow_op.op     = sop;
-    domctl.u.shadow_op.pages  = pages;
     domctl.u.shadow_op.mb     = mb ? *mb : 0;
     domctl.u.shadow_op.mode   = mode;
-    if (dirty_bitmap != NULL)
+
+    rc = do_domctl(xch, &domctl);
+
+    if ( mb )
+        *mb = domctl.u.shadow_op.mb;
+
+    return rc;
+}
+
+long long xc_logdirty_control(xc_interface *xch,
+                              uint32_t domid,
+                              unsigned int sop,
+                              xc_hypercall_buffer_t *dirty_bitmap,
+                              unsigned long pages,
+                              unsigned int mode,
+                              xc_shadow_op_stats_t *stats)
+{
+    int rc;
+    struct xen_domctl domctl = {
+        .cmd         = XEN_DOMCTL_shadow_op,
+        .domain      = domid,
+        .u.shadow_op = {
+            .op    = sop,
+            .pages = pages,
+            .mode  = mode,
+        }
+    };
+    DECLARE_HYPERCALL_BUFFER_ARGUMENT(dirty_bitmap);
+
+    if ( dirty_bitmap )
         set_xen_guest_handle(domctl.u.shadow_op.dirty_bitmap,
                                 dirty_bitmap);
 
@@ -678,9 +702,6 @@ int xc_shadow_control(xc_interface *xch,
         memcpy(stats, &domctl.u.shadow_op.stats,
                sizeof(xc_shadow_op_stats_t));
     
-    if ( mb ) 
-        *mb = domctl.u.shadow_op.mb;
-
     return (rc == 0) ? domctl.u.shadow_op.pages : rc;
 }
 
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -459,10 +459,10 @@ static int send_checkpoint_dirty_pfn_lis
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->restore.dirty_bitmap_hbuf);
 
-    if ( xc_shadow_control(
+    if ( xc_logdirty_control(
              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
              HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size,
-             NULL, 0, &stats) != ctx->restore.p2m_size )
+             0, &stats) != ctx->restore.p2m_size )
     {
         PERROR("Failed to retrieve logdirty bitmap");
         goto err;
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -428,18 +428,18 @@ static int enable_logdirty(struct xc_sr_
     /* This juggling is required if logdirty is enabled for VRAM tracking. */
     rc = xc_shadow_control(xch, ctx->domid,
                            XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY,
-                           NULL, 0, NULL, 0, NULL);
+                           NULL, 0);
     if ( rc < 0 )
     {
         on1 = errno;
         rc = xc_shadow_control(xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_OFF,
-                               NULL, 0, NULL, 0, NULL);
+                               NULL, 0);
         if ( rc < 0 )
             off = errno;
         else {
             rc = xc_shadow_control(xch, ctx->domid,
                                    XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY,
-                                   NULL, 0, NULL, 0, NULL);
+                                   NULL, 0);
             if ( rc < 0 )
                 on2 = errno;
         }
@@ -556,10 +556,10 @@ static int send_memory_live(struct xc_sr
         if ( policy_decision != XGS_POLICY_CONTINUE_PRECOPY )
             break;
 
-        if ( xc_shadow_control(
+        if ( xc_logdirty_control(
                  xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
                  &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_size,
-                 NULL, 0, &stats) != ctx->save.p2m_size )
+                 0, &stats) != ctx->save.p2m_size )
         {
             PERROR("Failed to retrieve logdirty bitmap");
             rc = -1;
@@ -653,10 +653,10 @@ static int suspend_and_send_dirty(struct
     if ( rc )
         goto out;
 
-    if ( xc_shadow_control(
+    if ( xc_logdirty_control(
              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
              HYPERCALL_BUFFER(dirty_bitmap), ctx->save.p2m_size,
-             NULL, XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL, &stats) !=
+             XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL, &stats) !=
          ctx->save.p2m_size )
     {
         PERROR("Failed to retrieve logdirty bitmap");
@@ -716,10 +716,10 @@ static int verify_frames(struct xc_sr_co
     if ( rc )
         goto out;
 
-    if ( xc_shadow_control(
+    if ( xc_logdirty_control(
              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_PEEK,
              &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_size,
-             NULL, 0, &stats) != ctx->save.p2m_size )
+             0, &stats) != ctx->save.p2m_size )
     {
         PERROR("Failed to retrieve logdirty bitmap");
         rc = -1;
@@ -834,7 +834,7 @@ static void cleanup(struct xc_sr_context
 
 
     xc_shadow_control(xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_OFF,
-                      NULL, 0, NULL, 0, NULL);
+                      NULL, 0);
 
     if ( ctx->save.ops.cleanup(ctx) )
         PERROR("Failed to clean up");
--- a/tools/libs/light/libxl_colo_restore.c
+++ b/tools/libs/light/libxl_colo_restore.c
@@ -62,7 +62,7 @@ static void colo_enable_logdirty(libxl__
     /* we need to know which pages are dirty to restore the guest */
     if (xc_shadow_control(CTX->xch, domid,
                           XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY,
-                          NULL, 0, NULL, 0, NULL) < 0) {
+                          NULL, 0) < 0) {
         LOGD(ERROR, domid, "cannot enable secondary vm's logdirty");
         lds->callback(egc, lds, ERROR_FAIL);
         return;
@@ -90,7 +90,7 @@ static void colo_disable_logdirty(libxl_
 
     /* we need to know which pages are dirty to restore the guest */
     if (xc_shadow_control(CTX->xch, domid, XEN_DOMCTL_SHADOW_OP_OFF,
-                          NULL, 0, NULL, 0, NULL) < 0)
+                          NULL, 0) < 0)
         LOGD(WARN, domid, "cannot disable secondary vm's logdirty");
 
     if (crs->hvm) {
--- a/tools/libs/light/libxl_x86.c
+++ b/tools/libs/light/libxl_x86.c
@@ -529,15 +529,15 @@ int libxl__arch_domain_create(libxl__gc
         xc_domain_set_time_offset(ctx->xch, domid, rtc_timeoffset);
 
     if (d_config->b_info.type != LIBXL_DOMAIN_TYPE_PV) {
-        unsigned long shadow_mb = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
-                                              1024);
+        unsigned int shadow_mb = DIV_ROUNDUP(d_config->b_info.shadow_memkb,
+                                             1024);
         int r = xc_shadow_control(ctx->xch, domid,
                                   XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
-                                  NULL, 0, &shadow_mb, 0, NULL);
+                                  &shadow_mb, 0);
 
         if (r) {
             LOGED(ERROR, domid,
-                  "Failed to set %lu MiB %s allocation",
+                  "Failed to set %u MiB %s allocation",
                   shadow_mb,
                   libxl_defbool_val(d_config->c_info.hap) ? "HAP" : "shadow");
             ret = ERROR_FAIL;
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -997,13 +997,13 @@ CAMLprim value stub_shadow_allocation_ge
 {
 	CAMLparam2(xch, domid);
 	CAMLlocal1(mb);
-	unsigned long c_mb;
+	unsigned int c_mb;
 	int ret;
 
 	caml_enter_blocking_section();
 	ret = xc_shadow_control(_H(xch), _D(domid),
 				XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION,
-				NULL, 0, &c_mb, 0, NULL);
+				&c_mb, 0);
 	caml_leave_blocking_section();
 	if (ret != 0)
 		failwith_xc(_H(xch));
@@ -1016,14 +1016,14 @@ CAMLprim value stub_shadow_allocation_se
 					  value mb)
 {
 	CAMLparam3(xch, domid, mb);
-	unsigned long c_mb;
+	unsigned int c_mb;
 	int ret;
 
 	c_mb = Int_val(mb);
 	caml_enter_blocking_section();
 	ret = xc_shadow_control(_H(xch), _D(domid),
 				XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION,
-				NULL, 0, &c_mb, 0, NULL);
+				&c_mb, 0);
 	caml_leave_blocking_section();
 	if (ret != 0)
 		failwith_xc(_H(xch));
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -1192,8 +1192,7 @@ static PyObject *pyxc_shadow_control(PyO
                                       &dom, &op) )
         return NULL;
     
-    if ( xc_shadow_control(xc->xc_handle, dom, op, NULL, 0, NULL, 0, NULL) 
-         < 0 )
+    if ( xc_shadow_control(xc->xc_handle, dom, op, NULL, 0) < 0 )
         return pyxc_error_to_exception(xc->xc_handle);
     
     Py_INCREF(zero);
@@ -1208,7 +1207,7 @@ static PyObject *pyxc_shadow_mem_control
     int op;
     uint32_t dom;
     int mbarg = -1;
-    unsigned long mb;
+    unsigned int mb;
 
     static char *kwd_list[] = { "dom", "mb", NULL };
 
@@ -1223,7 +1222,7 @@ static PyObject *pyxc_shadow_mem_control
         mb = mbarg;
         op = XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION;
     }
-    if ( xc_shadow_control(xc->xc_handle, dom, op, NULL, 0, &mb, 0, NULL) < 0 )
+    if ( xc_shadow_control(xc->xc_handle, dom, op, &mb, 0) < 0 )
         return pyxc_error_to_exception(xc->xc_handle);
     
     mbarg = mb;



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:13:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:13:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150318.277947 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QHv-0003N6-O7; Mon, 05 Jul 2021 15:13:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150318.277947; Mon, 05 Jul 2021 15:13:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QHv-0003Mz-KL; Mon, 05 Jul 2021 15:13:35 +0000
Received: by outflank-mailman (input) for mailman id 150318;
 Mon, 05 Jul 2021 15:13:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QHu-0003Mp-Eb
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:13:34 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 644898e0-a5d7-4f2b-8fb0-71d8cdace4d3;
 Mon, 05 Jul 2021 15:13:33 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2104.outbound.protection.outlook.com [104.47.17.104])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-24-hwN5UErJPKCc14Nz71R6FQ-2; Mon, 05 Jul 2021 17:13:31 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5743.eurprd04.prod.outlook.com (2603:10a6:803:e0::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:13:29 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:13:29 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0030.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 15:13:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 644898e0-a5d7-4f2b-8fb0-71d8cdace4d3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498012;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=rgEdhafpz8BW5gWdiXksunqCC0nVZhZBo0PaP6yDugg=;
	b=bqjAtljegRBb6MUkqiE3AfSOJ5Wv3+F80VDzQHA5kvjRqSPFTvTlDPKn4QNajsxxbB+SEl
	TqpwmKH0Wwjl41QaxQ9p+XHybwmWy/ZoUfod3w5xg/tXA2MK0tuYPeCscryr/4hsxh9L0S
	yHGcMURAd78nT8tJcHTUi9YwN1evLzw=
X-MC-Unique: hwN5UErJPKCc14Nz71R6FQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VBu+sH1Y6YKiyXeLuEDh+3FrBdxRwMWkVpOMJ4cNLZKWL9mlRMaZzt+VduYb17kb4o1xhdTvlyfAEqo/dxZwMZk9qvyXhZx6aw5AVDwm4EX3aErdpTDEwV/3S3i2/YZGZtpvnL8LgUpS+tCry9d6tc6cIsoY9TGZT5yugS0G62keOmdMF1U6w7P1wIYCfChDC1LT6OoKTUhlGav9jZp27kHYNOvYes3i3HUVR5S9phjtk5prkvLkmgCEnJRXLeaataBo/iZyivHFFqZy1WOVUbRZB91aoDcUkeR9xbSTFMBveeQSO+2D2YkLgSxABlFRASvTcaTCS2RSsnywp0qpdA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rgEdhafpz8BW5gWdiXksunqCC0nVZhZBo0PaP6yDugg=;
 b=kOyXOgFn17Jo1+5VXXaiNlvbi/bF64KSbRDUNdJKlM8+pnsd2UkflyKkk0BPVi1kvfkBCGT+8+IiFJQ+fVeGKRCzIVR7eYRS+eiyRb+IhtIuvyytH2XOKFS2S5CGMh9//Cs/CtCC2jk2kNfYeDP0b8sUNgep762ReHki1W/wE0wmkoqouvclSgD/IFGRrwmBgklZq3jWMMOdQbKUNvmUElt92Gt29PCEeOUzeVyHftcbeUj37wTRiJ2VTXrNVrGvQypIaXo5pw2CCJoEijw4uUoWqDvZtAnkzIFkEdZ6safuDsbzjaWj/+Mr8iQVxj2R0XUPSXYlriu/BHHcyKRQxA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats overflow
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
Date: Mon, 5 Jul 2021 17:13:28 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR1P264CA0030.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7f5a04ec-d716-46ca-9682-08d93fc7723c
X-MS-TrafficTypeDiagnostic: VI1PR04MB5743:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5743A3EF74AFE3D68C2465C5B31C9@VI1PR04MB5743.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	l4OjnwNaBl9c7JjrEEwEEvraa5XiAT+KoX6gruMCDMFCd0hTNpNvyYr4J1MoOPP9xg5BAg0qyeztZ/SdfniS8CtpyLmY8vyYadIFrqpRjSuxfe/eWjoVXdBNytfrCzBolaNTWfHAZbHDnNF0Iq0iaU/XJQY6X0h3aq8P9Y6MblIbC6KT9mRuxsg5AioUQ4HGuvIXLVAMXIu7F8tJDaz2FI7yaZKD2cYGgtbA0opr4cfYQKmuu88Fa6SIX8fNonr4i6DNwfw+wdPYUkz+W8cVlVhkXhzeiThV+Bu30zZPwc4g47ZP/hWakF/V4oijfYHpy/U++sSPQeMuKWf9OrYloA+FhdCYekCsM56TGDu8m+HGXVNcbSFoxDp6lyJhCQbGRtDhM5HFWKiUthYekMl2slt0weag+acA+by1I5mvj9iWqV5oQl59Uqs3l0xrL+jI7gE4Hh+ZB6HvA8pqdnIhe0MLt+er/bpAtrBy0syKhRLs5jexV0kuepELQRB+C2NYCn6VV4OcTdhkTe/I+oHelQXxXMy0NUahFrcNSpPo8gco832Ifs/auzrk+Ee25++GDdQOE+gA7GrnC+O+60xoBj3vTufpX6Um0RoUojlDWhnDYT+oCELHQlPwXv1ASdnfC8I/gJs4phesfw9UB0ZuTvH63WVfA43O2O2mRB1ucojD9zyCIr/8bkS5kVhB7WQe7ZvmRVo7rSmXnO8yDJjzA+PSqlsKgedHFtCNuO2g9EoS8SpBuc+jr4mM3JMcfDI7
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(396003)(136003)(376002)(366004)(346002)(16576012)(83380400001)(6486002)(16526019)(6916009)(4326008)(8936002)(8676002)(186003)(36756003)(478600001)(316002)(38100700002)(26005)(86362001)(31696002)(2906002)(66946007)(5660300002)(31686004)(66556008)(54906003)(66476007)(2616005)(956004)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7f5a04ec-d716-46ca-9682-08d93fc7723c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:13:29.8500
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: tCkIymuHFMTS0pHdpfJWJIxVTYmkcOpq9sLwqXQQip+xU4LUGJeCbiju0FJFcR3s57kW1W5KcNd21Eu+pW9CLg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5743

In send_memory_live() the precise value the dirty_count struct field
gets initialized to doesn't matter much (apart from the triggering of
the log message in send_dirty_pages(), see below), but it is important
that it not be zero on the first iteration (or else send_dirty_pages()
won't get called at all). Saturate the initializer value at the maximum
value the field can hold.

While there also initialize struct precopy_stats' respective field to a
more sane value: We don't really know how many dirty pages there are at
that point.

In suspend_and_send_dirty() and verify_frames() the local variables
don't need initializing at all, as they're only an output from the
hypercall which gets invoked first thing.

In send_checkpoint_dirty_pfn_list() the local variable can be dropped
altogether: It's optional to xc_logdirty_control() and not used anywhere
else.

Note that in case the clipping actually takes effect, the "Bitmap
contained more entries than expected..." log message will trigger. This
being just an informational message, I don't think this is overly
concerning.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -452,7 +452,6 @@ static int send_checkpoint_dirty_pfn_lis
     unsigned int count, written;
     uint64_t i, *pfns = NULL;
     struct iovec *iov = NULL;
-    xc_shadow_op_stats_t stats = { 0, ctx->restore.p2m_size };
     struct xc_sr_record rec = {
         .type = REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST,
     };
@@ -462,7 +461,7 @@ static int send_checkpoint_dirty_pfn_lis
     if ( xc_logdirty_control(
              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
              HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size,
-             0, &stats) != ctx->restore.p2m_size )
+             0, NULL) != ctx->restore.p2m_size )
     {
         PERROR("Failed to retrieve logdirty bitmap");
         goto err;
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -500,7 +500,9 @@ static int simple_precopy_policy(struct
 static int send_memory_live(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xc_shadow_op_stats_t stats = { 0, ctx->save.p2m_size };
+    xc_shadow_op_stats_t stats = {
+        .dirty_count = MIN(ctx->save.p2m_size, (typeof(stats.dirty_count))~0)
+    };
     char *progress_str = NULL;
     unsigned int x = 0;
     int rc;
@@ -519,7 +521,7 @@ static int send_memory_live(struct xc_sr
         goto out;
 
     ctx->save.stats = (struct precopy_stats){
-        .dirty_count = ctx->save.p2m_size,
+        .dirty_count = -1,
     };
     policy_stats = &ctx->save.stats;
 
@@ -643,7 +645,7 @@ static int colo_merge_secondary_dirty_bi
 static int suspend_and_send_dirty(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xc_shadow_op_stats_t stats = { 0, ctx->save.p2m_size };
+    xc_shadow_op_stats_t stats;
     char *progress_str = NULL;
     int rc;
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
@@ -701,7 +703,7 @@ static int suspend_and_send_dirty(struct
 static int verify_frames(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xc_shadow_op_stats_t stats = { 0, ctx->save.p2m_size };
+    xc_shadow_op_stats_t stats;
     int rc;
     struct xc_sr_record rec = { .type = REC_TYPE_VERIFY };
 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:14:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:14:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150322.277958 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QIK-0003te-1u; Mon, 05 Jul 2021 15:14:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150322.277958; Mon, 05 Jul 2021 15:14:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QIJ-0003tX-T3; Mon, 05 Jul 2021 15:13:59 +0000
Received: by outflank-mailman (input) for mailman id 150322;
 Mon, 05 Jul 2021 15:13:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QII-0003tA-EY
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:13:58 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0a1febcd-6349-4668-9704-c8963c68a6f5;
 Mon, 05 Jul 2021 15:13:57 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2058.outbound.protection.outlook.com [104.47.5.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-21-hhwCXXzpNOC5omsRL79SXA-1; Mon, 05 Jul 2021 17:13:55 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 15:13:52 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:13:52 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0030.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::35) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4242.22 via Frontend Transport; Mon, 5 Jul 2021 15:13:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0a1febcd-6349-4668-9704-c8963c68a6f5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498036;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=UQL1vwy7ts4g8z4e13aIolGoDY7pl/cPWGBcYrNuYnE=;
	b=aUdJsjqcQRwbpVliZU8rwYGdn+I+avxFQYyjhhgDzP24CjgF+uHKcoFSNJj+HATt9GDY4F
	28zPMVkXzWVy+l4CSEg5706vX5GQQcVD64nZJWaNCaFiKsQrdneKeq89hiXfKjVDWdmgbS
	guz/huJGPbCHtf0rcNt8dnk8PqI2xpo=
X-MC-Unique: hhwCXXzpNOC5omsRL79SXA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KmqiP8LnOksTs/mereAZLfN3gTIlwt9HR38ltzLHUKGLXb8vBNckzbhHABp/hBGcFofBGbr4Asu2G9abxy+GIFvJodWqrc0/iMZ/OzRmJFbJOhZ0rww6h3v3x+yDoWuC8qOu+f52pKMzZOgfZTssMGM6YctkDxsD1JMkri1PSS4tH3L2Y83VdqigB8lO6wOsRZeLc0oSLzm/HOPsb6a2ghkfdtvKsEscYNyrypjCfMTQnAkSbKL6aEfPkpJBKstrtRDhg7tXcsnNDsDwqiMfL+N4VV1V9s2mfpvxwD+hLJMHYMZQ3BLG35EPwqP6pUxQ/KfURoguNEfMwDAkTTpwEg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=UQL1vwy7ts4g8z4e13aIolGoDY7pl/cPWGBcYrNuYnE=;
 b=AlBz13sPUFz8GqO2DNgim6pTTk2JqzWmsE2TJRq+Ncl1tsFoFS+aqqrzrR/Eps+4bh+GlFSQise5h5z/qxwCk2YRvYK0g7Vc/rNu8e+FZRFHWjnJVZ+u4tjuf/ONimz0T1T9wwQcnj9SUnIFYE/9v6AOSVNHbsxgxvoNJJhf0sDNJxz8GdXns1Fo4jF8uDlL7uWgE2nschRswgyqbpECTNTAlVYpJXTIDBfynkE14Mfm0HuEnnolaWBGOBcBhHA0s/iavwIi1lA0mJFrg4/51a+VN2uiIs0KZkoFen7tRZvPE2zLohj95bhvB83usI8CCA2pS4YntiGpBQ0D6zVpzQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 04/13] libxenguest: short-circuit "all-dirty" handling
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <709a0dc1-bb68-4f06-b73b-fbefaa661c77@suse.com>
Date: Mon, 5 Jul 2021 17:13:50 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P191CA0030.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::35) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6007b3c0-351e-4b85-cffe-08d93fc77fd6
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26084C4D9E7C39F555B882DDB31C9@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:249;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	w+uHPurXfOSMgMITzyhxz0W1k1xcmX4Lu4CzX6t1zBB6aSO/l/nJ1DRH6WbWahcKB7ZRM4nQkmj54u2frF8LYBbVDX6bsQc8QnaGK7SZxdMzt4ECxGM/6vzfv9XJl/MttKcksG0g05+7CGJlvslTqM+Ow4Gy6pJTFoWBIzRH8SBt1+TRAdBgBEvVdeFFhp4d8pgzEX3aYGr8F4EsNYl1TKPlBOb8+Lfh6a6k0j6JzZp5VV93w3X68pd6ZyigM8SWcm5aqTPDW0OlSL1x6fR2Pdr+M0VW8+6q9K5HekB7/7XNmKzNiXzc9Og4OQJwObQSSJYADFqQtol+LNyy8FCP5KvF7lE//hKVLQXrUfnxnlpcHbzKOzhnw4JCL4pqogWd67QSrKIvcGlnmZ0bAb0rtM3MKl7jmGo0q6JmZhb4c6rXzd1kZMaF8je1rIfXoIthh6lMHbvPX1RzV4KNzlBgRz8trhCHh7zd4uM86UI747CXfKNUbw7EfylCd3cIwX/NnPyeD+t6dl3E9C0HX3rQDntrrDDMu78wUVo8t4XO7M5uoQ31Mz0siRq2t1Vm3pCGAbV+EhVeYAz+5pEIqBfNVhhoirIjzyKy64Gnyp4WKq0MymlrkOdb4RxQA6udEtfpjVUQqlJP1hH+r0uTndHzo0PtiueN0RbQqvvKujLr2OqT6mgB75IFN2pz39YmOpNJj5v6gu6PI7W12NjV5+5xYNYGUWBrBzHsiX7UQHMceDZ9wO8gqiK7tad7D/H9DS2t
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(376002)(396003)(346002)(39850400004)(366004)(83380400001)(31686004)(5660300002)(6486002)(86362001)(478600001)(956004)(31696002)(2616005)(6916009)(26005)(2906002)(186003)(4326008)(54906003)(36756003)(8936002)(316002)(8676002)(16576012)(16526019)(66556008)(66946007)(38100700002)(66476007)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?y3WyZKqRtBOK+NF/uH1mxHFxR3M5XUlHNmAaSBy?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6007b3c0-351e-4b85-cffe-08d93fc77fd6
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:13:52.6661
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: vXTtsMRLmyPFQ1gje2FBFzgVe6Y9j5O/9VkvSmklTHTVq12OdPyVo6NZdZsDcS/WGYCMUR/CGf4mr0v++Mt3Gw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

For one it is unnecessary to fill a perhaps large chunk of memory with
all ones. Add a new parameter to send_dirty_pages() for callers to
indicate so.

Then it is further unnecessary to allocate the dirty bitmap altogether
when all that's ever going to happen is a single all-dirty run.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -368,7 +368,7 @@ static int suspend_domain(struct xc_sr_c
  * Bitmap is bounded by p2m_size.
  */
 static int send_dirty_pages(struct xc_sr_context *ctx,
-                            unsigned long entries)
+                            unsigned long entries, bool all_dirty)
 {
     xc_interface *xch = ctx->xch;
     xen_pfn_t p;
@@ -379,7 +379,7 @@ static int send_dirty_pages(struct xc_sr
 
     for ( p = 0, written = 0; p < ctx->save.p2m_size; ++p )
     {
-        if ( !test_bit(p, dirty_bitmap) )
+        if ( !all_dirty && !test_bit(p, dirty_bitmap) )
             continue;
 
         rc = add_to_batch(ctx, p);
@@ -411,12 +411,7 @@ static int send_dirty_pages(struct xc_sr
  */
 static int send_all_pages(struct xc_sr_context *ctx)
 {
-    DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
-                                    &ctx->save.dirty_bitmap_hbuf);
-
-    bitmap_set(dirty_bitmap, ctx->save.p2m_size);
-
-    return send_dirty_pages(ctx, ctx->save.p2m_size);
+    return send_dirty_pages(ctx, ctx->save.p2m_size, true /* all_dirty */);
 }
 
 static int enable_logdirty(struct xc_sr_context *ctx)
@@ -508,9 +503,6 @@ static int send_memory_live(struct xc_sr
     int rc;
     int policy_decision;
 
-    DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
-                                    &ctx->save.dirty_bitmap_hbuf);
-
     precopy_policy_t precopy_policy = ctx->save.callbacks->precopy_policy;
     void *data = ctx->save.callbacks->data;
 
@@ -528,8 +520,6 @@ static int send_memory_live(struct xc_sr
     if ( precopy_policy == NULL )
         precopy_policy = simple_precopy_policy;
 
-    bitmap_set(dirty_bitmap, ctx->save.p2m_size);
-
     for ( ; ; )
     {
         policy_decision = precopy_policy(*policy_stats, data);
@@ -541,7 +531,7 @@ static int send_memory_live(struct xc_sr
             if ( rc )
                 goto out;
 
-            rc = send_dirty_pages(ctx, stats.dirty_count);
+            rc = send_dirty_pages(ctx, stats.dirty_count, x == 1);
             if ( rc )
                 goto out;
         }
@@ -687,7 +677,8 @@ static int suspend_and_send_dirty(struct
         }
     }
 
-    rc = send_dirty_pages(ctx, stats.dirty_count + ctx->save.nr_deferred_pages);
+    rc = send_dirty_pages(ctx, stats.dirty_count + ctx->save.nr_deferred_pages,
+                          false /* all_dirty */);
     if ( rc )
         goto out;
 
@@ -807,8 +798,11 @@ static int setup(struct xc_sr_context *c
     if ( rc )
         goto err;
 
-    dirty_bitmap = xc_hypercall_buffer_alloc_pages(
-        xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)));
+    dirty_bitmap = ctx->save.live || ctx->stream_type != XC_STREAM_PLAIN
+        ? xc_hypercall_buffer_alloc_pages(
+              xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)))
+        : (void *)-1L;
+
     ctx->save.batch_pfns = malloc(MAX_BATCH_SIZE *
                                   sizeof(*ctx->save.batch_pfns));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:14:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:14:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150327.277969 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QIe-0004Na-9R; Mon, 05 Jul 2021 15:14:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150327.277969; Mon, 05 Jul 2021 15:14:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QIe-0004NT-6I; Mon, 05 Jul 2021 15:14:20 +0000
Received: by outflank-mailman (input) for mailman id 150327;
 Mon, 05 Jul 2021 15:14:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QId-0004Lm-DK
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:14:19 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e8756202-6257-4c6a-931e-638f4a36f2c6;
 Mon, 05 Jul 2021 15:14:18 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2051.outbound.protection.outlook.com [104.47.5.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-9-lQHOshOtM12pyZV8-3IjVg-2;
 Mon, 05 Jul 2021 17:14:16 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 15:14:14 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:14:14 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0148.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1b::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 15:14:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e8756202-6257-4c6a-931e-638f4a36f2c6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498057;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=iL8ZT2omFXp+d1U+Xk1s2GOJXrPw9iN7waqPNcfkxZU=;
	b=bUE3/fk5eW3NSgkfoPc9keY+MIxwwHFZt9ozbwr5KykCFaY0mPBvilKcVC7iL/zvokXOGY
	xPb+sYCDthLE8+B7N+JQwGO/yIguxDXvFBKzyMb9qvDWR9/mr6Ecru5/ywYOmRqqa/JbrA
	ePphAgdcp1Yv6JFHWNbXLU6SIf9Yg5s=
X-MC-Unique: lQHOshOtM12pyZV8-3IjVg-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=J1dw5mxrMcoY+tJtBimpxiCoAYlNvoSPOT7HIWBPjDKqOzbibIz+vsOM7yKteoglxcBomNnCYljfyH0SLgcs+jtgWLj4yAQdlGMAcKsY9G3xH4jjwGjXVfkSks0M2KMJs5nluOHEUEbZuTwEZvNn1ajm3lF7Gu2aQwyP5IlPuL0QK1oPzzN9fYdPVKL6Uhjj1ivIv4bP1sWY4Ai8ZrAk6HC4n9vdP1aQOLVo1q1McPn5lj6U+Ai/YVVSVfAiJTmCSly1pNuDVt6JemnvYFWyr3tEv2GYHyPZK53edSYJa3p6VPl2L/Hg0e3XH5+zLte5R++3IbmuYtRNOd5IvtVa4A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iL8ZT2omFXp+d1U+Xk1s2GOJXrPw9iN7waqPNcfkxZU=;
 b=ee2cBQ++HOJ8CCk7ZtbZUD24mTjCsLv8zOEpiEWMn12ofWtjPSuRh4f224nCSgemd0c18nU7d4wDrPgdEh6+KSHTSv16dB4f6Osx5XJbGLdfyUkIip/9OaPA9W8sc8VSPr6CP/+PdSKsxu7ztEONc8/62kEHdYxoa6cKe0ivLAdoB/4fwFIF2tCsnLRIwPJ7tHoxN2Hc3YDbzcbGI8GoQBIDItWZz7QThREP6NZzGRH3jN/VJx9XJ72PYHJN1Vv2M5HNgWhWBa6OnMlgvwXS41acCCW6lEbfJcseFsQlqLsH4DosUtx122DfUEOP+dsK5ko84Fxye0XTdpqAbbwKpg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 05/13] libxenguest: avoid allocating unused deferred-pages
 bitmap
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <7996fff1-b004-b1b0-fc35-e1307340ce18@suse.com>
Date: Mon, 5 Jul 2021 17:14:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0148.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1b::16) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ffe4b2f0-fc0f-49ca-3e32-08d93fc78cab
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2608DA4DE18D076EB04C38FEB31C9@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1227;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	j7nzRRTI1MXEGp9c9RMM8ehFHtlAKdak507vvYZoO/+jpr/NNl1z9cqF0174zZy+rRw40NiotYPGeixkQA+xkltlEiJYvjp6+yjkLTWaaz0ddZhlWE9l5bligFxiMnwFYMJhx0wR9aIQ8HIfl8vHXfcs8a6vPehVVrbyZLV/0rOjQHncQuFRJxYtnSsQlPWN52+GEzkcP8k8UWbLWxToKnWZ5XFP63TvYOv3n3nbVxFx10rOE2Mmbdh3XpunNL5RtNkP4fle7oNdppSAeITW7kKVvfE9ripiX8H5TUhhZvhEZLQFk0hbUtyms5kqBB4Uoi7gYn7er1EdUgzu3UkD4slkcjMZCUQLGLTme79Pehm0JIGD8RAJMLYf9r6OCthrv+fl8bqY8t7tgfaVih9EJbVjX2NRO109x20EyLJYrfJazy4OcxD0N4OCpODnOpzREMmzbspSGN8JisWRT2s487CwBm7iJHcb8h21qV1kVLgSvBkbqeDMl0S7QBCKfnbOLbcvgx6G02Gc8X4zaLTObgjmN0oBcsvlt77BBbqZQ2T0gJ/62FpWjIPHN79APKFdjlnOZzVBLC4ru70a4BvyWRogC3kZNMLZzW3n5YCoEOaQVYJDXd/sEOiNwjyrBwrpHJzEYSoKgzvAgT7qiDP6nRbh6E7k0RFCsS5OUoXX/+sjebV7y/e61yEdMFqGw9BVzsHW9DnIMRL1alsQBd8RwHzCZsRT1yjRm6CKz9ydE1s=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(39850400004)(376002)(136003)(396003)(4326008)(54906003)(36756003)(8936002)(316002)(8676002)(6916009)(26005)(2906002)(186003)(66476007)(66556008)(16576012)(16526019)(66946007)(38100700002)(31686004)(83380400001)(478600001)(956004)(2616005)(31696002)(86362001)(6486002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ffe4b2f0-fc0f-49ca-3e32-08d93fc78cab
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:14:14.1949
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: gVKn15NHPsn5wcMcbr83M4Pwb68L+URkGV6rLzZ7huzbck47ENiX4vj+2Y4y9pQa9Qx8h2ZTWRFjD38jftpMFQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

Like for the dirty bitmap, it is unnecessary to allocate the deferred-
pages bitmap when all that's ever going to happen is a single all-dirty
run.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -130,7 +130,7 @@ static int write_batch(struct xc_sr_cont
                                                       ctx->save.batch_pfns[i]);
 
         /* Likely a ballooned page. */
-        if ( mfns[i] == INVALID_MFN )
+        if ( mfns[i] == INVALID_MFN && ctx->save.deferred_pages )
         {
             set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
             ++ctx->save.nr_deferred_pages;
@@ -196,8 +196,12 @@ static int write_batch(struct xc_sr_cont
             {
                 if ( rc == -1 && errno == EAGAIN )
                 {
-                    set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
-                    ++ctx->save.nr_deferred_pages;
+                    if ( ctx->save.deferred_pages )
+                    {
+                        set_bit(ctx->save.batch_pfns[i],
+                                ctx->save.deferred_pages);
+                        ++ctx->save.nr_deferred_pages;
+                    }
                     types[i] = XEN_DOMCTL_PFINFO_XTAB;
                     --nr_pages;
                 }
@@ -665,7 +669,8 @@ static int suspend_and_send_dirty(struct
     else
         xc_set_progress_prefix(xch, "Checkpointed save");
 
-    bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_size);
+    if ( ctx->save.deferred_pages )
+        bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_size);
 
     if ( !ctx->save.live && ctx->stream_type == XC_STREAM_COLO )
     {
@@ -682,7 +687,8 @@ static int suspend_and_send_dirty(struct
     if ( rc )
         goto out;
 
-    bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_size);
+    if ( ctx->save.deferred_pages )
+        bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_size);
     ctx->save.nr_deferred_pages = 0;
 
  out:
@@ -791,24 +797,31 @@ static int setup(struct xc_sr_context *c
 {
     xc_interface *xch = ctx->xch;
     int rc;
-    DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
-                                    &ctx->save.dirty_bitmap_hbuf);
 
     rc = ctx->save.ops.setup(ctx);
     if ( rc )
         goto err;
 
-    dirty_bitmap = ctx->save.live || ctx->stream_type != XC_STREAM_PLAIN
-        ? xc_hypercall_buffer_alloc_pages(
-              xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)))
-        : (void *)-1L;
+    if ( ctx->save.live || ctx->stream_type != XC_STREAM_PLAIN )
+    {
+        DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
+                                        &ctx->save.dirty_bitmap_hbuf);
+
+        dirty_bitmap =
+            xc_hypercall_buffer_alloc_pages(
+                xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)));
+        ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
+
+        if ( !dirty_bitmap || !ctx->save.deferred_pages )
+            goto enomem;
+    }
 
     ctx->save.batch_pfns = malloc(MAX_BATCH_SIZE *
                                   sizeof(*ctx->save.batch_pfns));
-    ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
-    if ( !ctx->save.batch_pfns || !dirty_bitmap || !ctx->save.deferred_pages )
+    if ( !ctx->save.batch_pfns )
     {
+    enomem:
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
               " deferred pages");
         rc = -1;



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:14:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:14:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150334.277980 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QJ2-00056g-MC; Mon, 05 Jul 2021 15:14:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150334.277980; Mon, 05 Jul 2021 15:14:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QJ2-00056Z-Iw; Mon, 05 Jul 2021 15:14:44 +0000
Received: by outflank-mailman (input) for mailman id 150334;
 Mon, 05 Jul 2021 15:14:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QJ1-000500-Ev
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:14:43 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f3a5f435-21c0-4ba4-b9ca-22911262f525;
 Mon, 05 Jul 2021 15:14:41 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2055.outbound.protection.outlook.com [104.47.5.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-7-9Lb0hRRdNMyue3C165azGQ-1;
 Mon, 05 Jul 2021 17:14:39 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 15:14:37 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:14:37 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0053.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 15:14:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f3a5f435-21c0-4ba4-b9ca-22911262f525
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498080;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=sOcBB1u7iiUx62PemDoqgBpbGc1Bb2Zr3M+3XNGrMl8=;
	b=ko3/0YDqAoRvn72VpeqnNpZdR5QSduRSkg2NoHhxy+D1HTeF7dASjtScwuMtpCviB338Dq
	dmKUkPx3i7KVzhabAam2pZEPOtUt2HM+hB76yIwPy3IQXpReQQkTdjPJVFblme4wFHE0jt
	0aZlblEOokiOa4vWFIRaSgScNwlYs8I=
X-MC-Unique: 9Lb0hRRdNMyue3C165azGQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AJeVtxo9ExmWSTBby4AsX50DdP0nFK7lP0mWnwtowEwr9gkPgzBjr/3PU1MpCdMIib2jV/RmUUzm2gjopj96l357AJ0DUPXFGaRYyS8mFHOmhoVAt/CexyvDNM+w4Z9OWZm8zgHIdW02DCO7JeQvC41vLR8IzQOWVpJ/zIX90EBmOzLCo4FadK4dFlI9cVIal0hKod3gWXMBqxwNgdmGlOf+e8K6KO3ggfofNPdtrbXWVNIoIKCKmTeY8xsYl3wsTvgPLZ2a82xluXnnGJJFAAQWMsZGxsAt9TzIR1q3riocJ6ldbH/VVfNHrtW4O6+l3VJqMbH8rZIFrBe2iwTh2w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=sOcBB1u7iiUx62PemDoqgBpbGc1Bb2Zr3M+3XNGrMl8=;
 b=eiNnGiNm5NXjHKjhBsIkWcn+MNtqjAvqC4MpPgyz0R1+AQi36hcwdBpdoOz6KxjeganchWBiEdNit9oH9HNkhxDA2c636FyaWRZSZtqbL3p+xuUpBAMvx7iVX0y1rNlK1uHQ/8mXC8hN/qxlrCk3WqWsXxkAklPf9Fuv3xjkA6D4Rz+aXJ3JxP6VibwJhymi7dP3wfoKefrWK+yfAD5Q4AxCZNX6IQG6wOyRd00DFXlykjkrJpByNS74Gjt+NB064fMWsEKrhv0t5ylh7AUpfbZfpZNAAsUs0FQkhsBNZlgOn5ko3QFqjVQF5JHkqfi427IZsRU5/kOf1mNHekxxNw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 06/13] libxenguest: complete loops in
 xc_map_domain_meminfo()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <8c7f94f4-98c0-f698-8cc0-0f7f93569ca3@suse.com>
Date: Mon, 5 Jul 2021 17:14:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0053.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4bb444dd-2b52-4394-84e7-08d93fc79ac2
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2608603F69FC8E0441E52534B31C9@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	cWWjtm0cmqKCQKCQOBx4t1BI3AVJX5fzDg9LmTuZDH4RjYoHwOVL7ZpaUPzQpIU/yBjqx3Re6joFkzFw4J6Zj3AaQKiIadW1gKYPDb1qZ29eY2O+puicKTdYpyr4B1ZQ6W0p4+RaNWG+SeVwK2Ad9Vc6TtGKOe/MaQ0wvhdm9MyRZJa6ydnJI9InQE3fpnFADj+IZyP/2x1842kYAEzUgkGES57sLvarf40yepJKw6m/qgfLSH2+FaqpByFNHcLbkf7WbKWthGVdWuFJCcoC6pCpVBfTNkO1Vw2aQeAiPYrkvjkGiWNy5v/2ridjWXHWXbs9rVMXQWc2EiIl3YacYWCiatyQDJtXDdy16ssi+ZRAxOlMCWn/cfbDtRGIzV2D2DZ6hn3UogmWky7cM4lye4sHR2o45x2x7qviyd4MBQqQ/OIhCPrdUHQWTqeUJq9qpB0rAn3Ga1H0vkWME2JupF7vsWxITiZRfjl14IkvMHgFT+nyjQ+SS45LVmLz3MCCGPh3VvqQdboHrPVyX7m1syMQUyWPLWeQVqrUw0WbDcYNbBQh/q1IohTdaXMDJUUU11DEwEUNISyrwvc9MBXmxZs85uOaGdKxTOy0RwAaPKKxx6527C4kulk3FRT9HHRaZl3MqJ3GIf+pEyXcEmpqT/9eJsT4vR83NwT/AF8q6xDESse6Ma54mDTE80NKfhjrod9U0p3N5fSVPNDWebqytGc7/D2MSa+hvhHAoS4BHgQ=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(39850400004)(376002)(136003)(396003)(4326008)(54906003)(36756003)(8936002)(316002)(8676002)(6916009)(26005)(2906002)(186003)(66476007)(66556008)(16576012)(16526019)(66946007)(38100700002)(31686004)(478600001)(956004)(2616005)(31696002)(86362001)(6486002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4bb444dd-2b52-4394-84e7-08d93fc79ac2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:14:37.8416
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ruZDRgJQLQPhF11lssuJ2lVXjR8LG1a1dv3b6RJN0kWcnFs6h9/de17kEnYjkGYxCqRph8HRfzRwhrW8kHr0BQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

minfo->p2m_size may have more than 31 significant bits. Change the
induction variable to unsigned long, and (largely for signed-ness
consistency) a helper variable to unsigned int. And while there also
avoid open-coding min().

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
v2: Use min().

--- a/tools/libs/guest/xg_domain.c
+++ b/tools/libs/guest/xg_domain.c
@@ -40,7 +40,7 @@ int xc_map_domain_meminfo(xc_interface *
     xc_dominfo_t info;
     shared_info_any_t *live_shinfo;
     xen_capabilities_info_t xen_caps = "";
-    int i;
+    unsigned long i;
 
     /* Only be initialized once */
     if ( minfo->pfn_type || minfo->p2m_table )
@@ -116,12 +116,11 @@ int xc_map_domain_meminfo(xc_interface *
     /* Retrieve PFN types in batches */
     for ( i = 0; i < minfo->p2m_size ; i+=1024 )
     {
-        int count = ((minfo->p2m_size - i ) > 1024 ) ?
-                        1024: (minfo->p2m_size - i);
+        unsigned int count = min(minfo->p2m_size - i, 1024UL);
 
         if ( xc_get_pfn_type_batch(xch, domid, count, minfo->pfn_type + i) )
         {
-            PERROR("Could not get %d-eth batch of PFN types", (i+1)/1024);
+            PERROR("Could not get batch %lu of PFN types", (i + 1) / 1024);
             goto failed;
         }
     }



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:15:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:15:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150339.277991 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QJP-0005jv-Ux; Mon, 05 Jul 2021 15:15:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150339.277991; Mon, 05 Jul 2021 15:15:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QJP-0005jn-RL; Mon, 05 Jul 2021 15:15:07 +0000
Received: by outflank-mailman (input) for mailman id 150339;
 Mon, 05 Jul 2021 15:15:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QJO-0005ip-Mt
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:15:06 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c5d38695-dda3-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:15:05 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2059.outbound.protection.outlook.com [104.47.5.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-18-LTFVSklMNfaIzjJ13K8rMQ-1; Mon, 05 Jul 2021 17:15:03 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 15:15:01 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:15:01 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0026.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 15:15:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c5d38695-dda3-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498104;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=ct2KS5gJ4GCYf4vquepAwBJLuaf7rCN9u1z/krvGGpw=;
	b=IrGNOYM2HlVgcAZqjFkjsb4JOMh1/Yx+aQqgr1SoDvDJXSy6TI7hT7v2eUfLpE5xm7OuwG
	NbBJY0KQwREkqL+aup7mMr/U2fsmmjVsP7uEV4VEIQJB0evgTbVFUsiPoiH/rW5GZe2Ink
	lK3WJ/lgorMIzMaMd8pc7xmiuIzxufw=
X-MC-Unique: LTFVSklMNfaIzjJ13K8rMQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KMA3jOCGabCp1tW4CXM3tJEMM11rQ2H45rzYqYJyaPrGlprXyTvjXQdT6y7mIoOUiKyjQSgZozdsZ+hNFh/xxygyA6WhuneQfiOEjw6tcAsDHsZkct04eUGw9PfAjWWLZg6iGBPPcWa6nFnxKTNJwEUOEwAz4r65edpMSpYfWCHd78/rWqFTPpfvsDf9YdkFECNKWLr538WTv+zHLW4zqPdnDtIVSXz2TA90P/roxP6wISc/Yc+S1tCvDAIlG+hEUTTy89/VK5KuS6D5jH5IABMSYhhd/LdSy/uu6Gv/L17NAodcrd3xU3vT/4l3XGBi7td5gxH/yIIx1uyGH5Id3Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ct2KS5gJ4GCYf4vquepAwBJLuaf7rCN9u1z/krvGGpw=;
 b=TzASB6Z+VdVlXGfZKKfmSTintQWWNKzleJbkSqNGrZnHiEp+Cwh9uc7ezPZOrrsTUX5E1bZOMzsy8w0721v8Z+XfrViWlVeeg+VKdCvMa6QkMeezD9Y8ABv1ncdEnx8vR371nrYt8jjggMHv9coRRU4IhcYKBJ8iglN8+r+cDL8gZPmuo//xipIbjtrgtsgOC8sdP7UcJKY7YIPiyNbRTucbYnND1Hj08hC8cXYul8V9+O/qt/EF7LCHamQbRohXSSJ7D0B/RolxmoEN837w1KezxvUc4uzAp3fTYvIRxidIn3TjJfHWHXkFIzSdvREJVZ2V51EZoaT8EYj5V60w/Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 07/13] libxenguest: guard against overflow from too large
 p2m when checkpointing
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <952285d1-9fc3-ab03-f6e4-c7946805e4a4@suse.com>
Date: Mon, 5 Jul 2021 17:15:00 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0026.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1c::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c6ef64af-feda-4532-f531-08d93fc7a8f2
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26082ADF55D17004EA2DBF5BB31C9@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	rvSOtUUwj361yXyegFbJMyWlR6Bt5pzhNKdaLImcVw+/h41oo/45ObmTPhjt8hO7f1BbcOFQ0WwMMR1P/N7n0bYFM5NHvgsYaAT0zcRXUGRkqiQyqQFXwrms3eb5vXqkZmn7E2dpN1a/BnxrPrpnbHAmu1NwQe0sA3JzBCIO21ln0dQdXQNMh/KCVQi/0lQTxGHpXCXUbgYPDZ/QaJHoCpAZYI//WQk9STYvMifbHehDby98ESj8GzUNy0b4X7spj3+UdbCn8qzecnzAkNYIEz8tbmhwTsPackcIZkNPW1eEas4CDc1wIee5+H2Eu51nStJJb8ztQqTGjmbGzC927RHkAeNq6t0K1LSpZM28DgpF5kSetCt0poWFiKtwBhnw9oJOFg5hSKYca2Ut5Rj3CAuQuq2Jy6oG1mwy9lJlJ0WTc97OAM6kty8/lrC8mcYK+tD7H1cP55Q/DmnhcFhXVMsYjwvSSoGW6p0Gu0bAM8xpGIMQTFeER1iDw4iXaW1EkvGra/dNZSsWFjZf51kcz9HYiGDLOLpP3hC9FQJ4F0iVJuXkf7kMhz9dSuIiOM1H1Yni99l+lvGOh94Px2tNAOhjz5mV3KUXmCh5Pkbpshiao8hpDR1ev0X/JpgxvBhoLOr0WE3+5I3gfxGDudVIDOGrGUbWegxcFCKVyewgzHpjXe6kI0WwRkf80qEdkWbN6u/I85L6Y8Wz1dNGEJzcDvoapIFE/R96vsjQowmvZlk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(39850400004)(376002)(136003)(396003)(4326008)(54906003)(36756003)(8936002)(316002)(8676002)(6916009)(26005)(2906002)(186003)(66476007)(66556008)(16576012)(16526019)(66946007)(38100700002)(31686004)(83380400001)(478600001)(956004)(2616005)(31696002)(86362001)(6486002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c6ef64af-feda-4532-f531-08d93fc7a8f2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:15:01.6381
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 33CBZjKB0dqSo67eBVcDFqO19R4dG4zKlrspIGSbmbW0IrjIEvD2WuNn0IIjYlv20paZwQwVFplIvF1QkzQ4OQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

struct xc_sr_record's length field has just 32 bits. Fill it early and
check that the calculated value hasn't overflowed. Additionally check
for counter overflow early - there's no point even trying to allocate
any memory in such an event.

While there also limit an induction variable's type to unsigned long:
There's no gain from it being uint64_t.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
Of course looping over test_bit() is pretty inefficient, but given that
I have no idea how to test this code I wanted to restrict changes to
what can sensibly be seen as no worse than before from just looking at
the changes.

--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -450,7 +450,8 @@ static int send_checkpoint_dirty_pfn_lis
     xc_interface *xch = ctx->xch;
     int rc = -1;
     unsigned int count, written;
-    uint64_t i, *pfns = NULL;
+    unsigned long i;
+    uint64_t *pfns = NULL;
     struct iovec *iov = NULL;
     struct xc_sr_record rec = {
         .type = REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST,
@@ -469,16 +470,28 @@ static int send_checkpoint_dirty_pfn_lis
 
     for ( i = 0, count = 0; i < ctx->restore.p2m_size; i++ )
     {
-        if ( test_bit(i, dirty_bitmap) )
-            count++;
+        if ( test_bit(i, dirty_bitmap) && !++count )
+            break;
     }
 
+    if ( i < ctx->restore.p2m_size )
+    {
+        ERROR("Too many dirty pfns");
+        goto err;
+    }
+
+    rec.length = count * sizeof(*pfns);
+    if ( rec.length / sizeof(*pfns) != count )
+    {
+        ERROR("Too many (%u) dirty pfns", count);
+        goto err;
+    }
 
-    pfns = malloc(count * sizeof(*pfns));
+    pfns = malloc(rec.length);
     if ( !pfns )
     {
-        ERROR("Unable to allocate %zu bytes of memory for dirty pfn list",
-              count * sizeof(*pfns));
+        ERROR("Unable to allocate %u bytes of memory for dirty pfn list",
+              rec.length);
         goto err;
     }
 
@@ -504,8 +517,6 @@ static int send_checkpoint_dirty_pfn_lis
         goto err;
     }
 
-    rec.length = count * sizeof(*pfns);
-
     iov[0].iov_base = &rec.type;
     iov[0].iov_len = sizeof(rec.type);
 
@@ -513,7 +524,7 @@ static int send_checkpoint_dirty_pfn_lis
     iov[1].iov_len = sizeof(rec.length);
 
     iov[2].iov_base = pfns;
-    iov[2].iov_len = count * sizeof(*pfns);
+    iov[2].iov_len = rec.length;
 
     if ( writev_exact(ctx->restore.send_back_fd, iov, 3) )
     {



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:15:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:15:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150345.278002 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QJl-0006I9-8L; Mon, 05 Jul 2021 15:15:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150345.278002; Mon, 05 Jul 2021 15:15:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QJl-0006I0-4I; Mon, 05 Jul 2021 15:15:29 +0000
Received: by outflank-mailman (input) for mailman id 150345;
 Mon, 05 Jul 2021 15:15:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QJi-0006Ff-VJ
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:15:26 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d2e00952-dda3-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:15:26 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2108.outbound.protection.outlook.com [104.47.17.108])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-22-flsoQ6lIPeWjLOunUkVgEg-1; Mon, 05 Jul 2021 17:15:24 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5743.eurprd04.prod.outlook.com (2603:10a6:803:e0::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:15:23 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:15:23 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0038.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 15:15:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d2e00952-dda3-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498125;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=CH+Vf0mOEcNpv8wC1iMww0i4+CIzDv1HfwE6AQaKUlM=;
	b=OiqANUkQbOdiIHmuM9gKa1QyMCBgYdPEYyf8LRlB+UTDFZNE0lxDe5mus1Mb+72c/FEnlA
	VQi/nkFozMF1N7iQjEe6KB7rC8Lb/7f4uFMVxFeKx9POy5uoxI3ihAT5PRik6PWhP1eZcl
	v+2h2/RGUGaoAt40XLWNE5zoBuhWi2A=
X-MC-Unique: flsoQ6lIPeWjLOunUkVgEg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Q+X9X469BWmqonNoftMG0qjNl92QLYKGScOC5CzdOqslCYtkfc7X3VsiPaBUYALQJ5BZyegXlgnKvB5jm4tA+Z6yCBwVmopd5T6DMuBYvX+8phnRtNaeeefutLPU0BXXKK2Rcx3/lLCO+tb3JIQ0NvGfrqqljpDNBrulc0ZLH64gTNlzuR4E/NNRMmQL6BXsO9HdI81YnQOe6Oh0qxTl2yc4KFkGxblZ+q02a6lGlgdsD2ze4IgbTY3AmzCYCf0f2eKS+iDPfcep0IyIe03KJztssJnjZZgTBGZ8MA8InIesOkcVbtPV8Y/wXO6cegv9cf0Eq8IdWSvIlFTZezg4XQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CH+Vf0mOEcNpv8wC1iMww0i4+CIzDv1HfwE6AQaKUlM=;
 b=Z7D5VTzHQlg8KoaEEOq9sTaRRFaglMGjeEOIwRq4+dX1haM9xxNCX3UtKLvnl3N5a5T2ZfmhKKdrD+8LIzYq7WzvtsPj3YUz3TfGBL6EpJaOxeX2YcluTbxuike8UCgOh6NrzYQow+/jB7rb5HkkOtss1pHIYM4JfzGZr0Lv08uhKpdr58M5zlzF/GYProBHrM1B9Iq+B/9r7mhM7K4Cx4WnCOx3qJnkiMHBH02/nKArQwKWJsL3mW4QgWuxgPll1jSW1CZBr41nmbmoJl1e9CratXGiQmHSVa3Nm5H2WWg7BSnq+pp/YodM/h/UQZfFFGxsPxaJXUnS2IuVCVAK+A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 08/13] libxenguest: fix off-by-1 in colo-secondary-bitmap
 merging
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <cf5b7875-0441-78dc-6e1e-0738d93641dd@suse.com>
Date: Mon, 5 Jul 2021 17:15:21 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0038.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fb0532b2-d5c8-48f8-58d1-08d93fc7b5a0
X-MS-TrafficTypeDiagnostic: VI1PR04MB5743:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5743F80FED240E92782E5012B31C9@VI1PR04MB5743.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:179;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	cSjV3EjNDZv/R50ZleaVGlLUOYOznj4iUk4PNgp/LZPauw84d2GJajC6vMHNKm77/m8lnmhADKXGzhQL3xynZf5qAuRquRhUu8o5HrxEYXlMbHrrm24RCM4Jo5SMVn0CgYrnKzIyfpMQfZquOgpyd2WvslM7Qzm7iwoCRrj1jO0MBmpaoOz3HfWbFkw61QXgj8EBHQELx0GmBcuO+Yd7b7RUcyBHYMeJuszDaL1oTXsV/39c6p9hHc9sPruZHwMAz66HboTh5kaJ4c3z0t+JwEWD833t2lf6LjSApkMkZcGjGYuu4T5vwM7OqB8xfaQ/SuiTjskeUUNTBNBt9x3flqyNzuIu7R4KR4DUUO2EJlphQHSNZOmFpGjdAJvQrwhPq22aHYXZpBNToRc322w2SA/owj3J9M2cX5mnxLxfB8ViRm/4lorXZ4uD+RwcEXqydAHcKz3QxVyu5V4HiMxX/kkaf44+T/0OXzhA1AQSCrd9vk5EPGy+f1rrUqrRukubRSVYpLHPK5dUNpzB+QihPwnU2dwLvx/3yF+RVmlbKfgw4uub+NhTqapJXfu53Hdh7HXGlzM21pUqUTuc20Q/bhn3s+CLXxOo+9+QGS31rHvKXDThsUI9CCSWGXRrk87k3iuEqEGk2Jb4PUsQZpdYtt6XBi3tPqzEGY257G09Dzvy4SeRhyY4KqmWxTyke+aMojhc4FDpjtHIKUONkPZxMrMTJpI6wqWC4W6uj6Hs5cc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(396003)(136003)(376002)(366004)(346002)(16576012)(6486002)(16526019)(6916009)(4326008)(8936002)(8676002)(186003)(36756003)(478600001)(316002)(38100700002)(26005)(86362001)(31696002)(2906002)(66946007)(4744005)(5660300002)(31686004)(66556008)(54906003)(66476007)(2616005)(956004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fb0532b2-d5c8-48f8-58d1-08d93fc7b5a0
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:15:22.8911
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 2KejSGj012vB2z1QD0fHT2W2Lui7oEhhWRx8fwcAbNxGCVlM5K+lpzqcMaJcuJZyLEMNFaJLCLDEukPu7uWWWQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5743

Valid GFNs (having a representation in the dirty bitmap) need to be
strictly below p2m_size.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -614,7 +614,7 @@ static int colo_merge_secondary_dirty_bi
     for ( i = 0; i < count; i++ )
     {
         pfn = pfns[i];
-        if ( pfn > ctx->save.p2m_size )
+        if ( pfn >= ctx->save.p2m_size )
         {
             PERROR("Invalid pfn 0x%" PRIx64, pfn);
             rc = -1;



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:15:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:15:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150356.278013 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QKC-000756-Lo; Mon, 05 Jul 2021 15:15:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150356.278013; Mon, 05 Jul 2021 15:15:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QKC-00074z-IR; Mon, 05 Jul 2021 15:15:56 +0000
Received: by outflank-mailman (input) for mailman id 150356;
 Mon, 05 Jul 2021 15:15:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QKB-00072R-By
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:15:55 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e374b8c6-dda3-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:15:53 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2055.outbound.protection.outlook.com [104.47.14.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-27-tPKz29GRN_e0adUJ8AjNUA-2; Mon, 05 Jul 2021 17:15:52 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5472.eurprd04.prod.outlook.com (2603:10a6:803:d3::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:15:49 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:15:49 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3PR09CA0014.eurprd09.prod.outlook.com (2603:10a6:102:b7::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 15:15:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e374b8c6-dda3-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498152;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=7XE0MZ5Q/V0/alHvDtFRmInLwfamZyLpxplt2pkODz8=;
	b=mJWP6zjGx2WJ8PfR+cK+svDCw0629p5eFklD+7F1/67uP5bklh4lAiK4gUG8JGk0w0Drwj
	ODiEduiYkN7zjeWrTxom6/7kTe5FRYhLpoipANB47iXfLzSLAAQ9vVqV3ibaewVoeaxj5Y
	ud/24vLr71GI5NToWgmCT1lJBq0sYF8=
X-MC-Unique: tPKz29GRN_e0adUJ8AjNUA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WADPiN/JXsDyUbHSx5qzTYfVdMjozrVuaC9j+EZab/3AVhmd/Sif/TCK73CuQuqP5SuNebvCoa4TWaXbYQCa4cnvscec5WEV3HP7OW35YW+YK6xEtx0hbB1YvWVco/NnqB7k51+Ulkifbvwbt4SLPAOOeltFem9hl3rIY1jB5EigEuLHrmIghlblXhXgHc0Rl5Gq2wlEH3KtYT+iOJ3DsvRgmWD8SwoaJx11ED9a0cDB5/rFaE4yCtKvdxTfeJVQYjF0y89EHuLrG9Abaxzwn/Wn7Vf6h9/zo1wp601B5J6SjJEmtFAVWvwSroVFqoMeP774R6y0uPrwybv4hVtLOQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7XE0MZ5Q/V0/alHvDtFRmInLwfamZyLpxplt2pkODz8=;
 b=VuDYhOeTJcMcRJJVpOViklN0rZm+VKxELRqWowKgJU88NbKpv39/y6teAqplSysKHmc11PZwsCVw07HMcEyqOuuIg6AV+BGZzhirSUkfNTRHgo1Ac2/5uzuEu6p5QSR2fD2fFMEvuJ49DDc3GBBt/ivgKHxq4PjxQrx/bYm4E7D/QgZfxZI2vqsSqMyHdDjYhf+1Raea/NEYAV20Te8+6v12iPz5P0D4cO+heSPC4Gd/5CpoC8T6TbQYy4DOPSUZNQXmcBcMmw2Vwzaa7UCwVFMcqXzP5Ym4HHiBUBbxitPW7vJ7pwcKgc2mqB2hUMKY4T4to4B8t5Eoc4iv/Uhp+Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 09/13] libxenguest: restrict PV guest size
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <94076a26-c19b-4da8-02d5-6c7ce1759969@suse.com>
Date: Mon, 5 Jul 2021 17:15:47 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3PR09CA0014.eurprd09.prod.outlook.com
 (2603:10a6:102:b7::19) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 26f0d2e1-51d0-4fe7-1ac9-08d93fc7c558
X-MS-TrafficTypeDiagnostic: VI1PR04MB5472:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54726EBB865378AA457035ABB31C9@VI1PR04MB5472.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	IXA/fcprChrsczjt1FPCnZLBvqRPF3+AphKRsQiScvFF8aZg2XWM3vqXwG9DU2KOl/Y6gLgAeZalv6jmCbNBJ8ExxeVKt1zaAIijK9+UquQuS99yDMlC7IH7u9d4EWKFW5365dPPp2zBEtDYD4vRNlX4zstoqOi2gxuBogn+sAx59fUbYDiu5jI33wopJYSvc7cz8/NeOlluiqZ//STEfBXPeAybRnEWu/7wF4cE2FHd8MIoAOCTCph83IA402rndf6D1uf2xI7hvhY8CoROoULZl6jqq6ai/pscI+uDZ4KDGpvPpCCHT0JdeaQjRvKuZv5w9rRw2He72mOq5cU34kOi5LKb5xtvcdKy818NOx3e5BsZNJ1a25WOwDChABakB7cpd1zfrwoEuynDn5LLMeeceaNhWW5C+LBwyQUK+DYdDV4acnHn5g6DOj8BrcGMziHk8DKyy//McbaUnm1mll4FQE7XqVYKfo39eIRG+Yyg89BAIXmgUIc+MH8lorQXNJ0lj3Mg6QvD6uEZ076Djvzxsj2Vs29K0uU6YSZtMTC36BG/05Jbus4Q1ZKhaYWMb1Hi2JnGDk5cXwbJ82eJ+5iR2ooa+xghvXAfUw2VAyODpq+ihFUHVL5LXfB28QXgzX2v7AiOXHBZdxTXaKgsvce2Dqwj31LRjzJRUDsYXj4aNs6Gb2Z6WZfqzw16aG3RgodjTphR+WftPvY/GMBud6HF8LCQz79gPBMaFWiypYc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(366004)(346002)(39860400002)(376002)(136003)(66556008)(66476007)(86362001)(66946007)(5660300002)(16526019)(31696002)(31686004)(38100700002)(36756003)(26005)(186003)(2616005)(83380400001)(54906003)(478600001)(16576012)(316002)(6486002)(956004)(4326008)(6916009)(8936002)(2906002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 26f0d2e1-51d0-4fe7-1ac9-08d93fc7c558
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:15:49.2672
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: uq8hewjFD1uk68ufLlLljtfDdBZ1EEJzoBlirxFGXkvbRKvWplMQsYXjFaakVM4IurEvFrYd6GDaqWBhjW7VIA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5472

The P2M, the use of PFNs, and hence the maximum valid PFN are purely
software constructs in PV. In principle a guest is free to use arbitrary
PFNs. However, at least page table normalization requires that PFN space
be, like MFN space, limited to the architectural 40 bits (52 address
bits). And of course a 32-bit tool stack places further constraints.

Bounding the values also makes sure that various subsequent calculations
won't truncate values and then continue with inconsistencies (see e.g.
fl_entries vs ctx->x86.pv.p2m_frames in map_p2m_tree()).

While there correct an adjacent error message with wrong way round
wording in restore code and another slightly malformed and misleading
(off by one) one in core dumping code.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Integrate into series.
---
In case the save/restore changes don't make it obvious enough: It
escapes me why struct xc_sr_rec_x86_pv_p2m_frames has p2m_pfns[] with
uint64_t element type but {start,end}_pfn both as uint32_t. Imo all
three can sensibly only ever be of the same type.

--- a/tools/include/xen-tools/libs.h
+++ b/tools/include/xen-tools/libs.h
@@ -13,6 +13,10 @@
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a))
 #endif
 
+#ifndef sizeof_field
+#define sizeof_field(type, field) sizeof(((type *)0)->field)
+#endif
+
 #ifndef MAX
 #define MAX(x, y) ((x) > (y) ? (x) : (y))
 #endif
--- a/tools/libs/guest/xg_core_x86.c
+++ b/tools/libs/guest/xg_core_x86.c
@@ -59,6 +59,43 @@ xc_core_arch_memory_map_get(xc_interface
     if ( xc_domain_nr_gpfns(xch, info->domid, &p2m_size) < 0 )
         return -1;
 
+    if ( !p2m_size )
+    {
+        ERROR("Cannot map a guest without P2M");
+        errno = ENODATA;
+        return -1;
+    }
+
+    if ( !info->hvm )
+    {
+        unsigned int guest_width;
+
+        if ( xc_domain_get_guest_width(xch, info->domid, &guest_width) != 0 )
+        {
+            PERROR("Cannot get address size for PV guest");
+            return -1;
+        }
+
+        if ( p2m_size == (guest_width > 4 ? ~0UL : ~0U) )
+        {
+            ERROR("Cannot map a PV guest with invalid P2M");
+            errno = ENODATA;
+            return -1;
+        }
+    }
+
+#ifndef __i386__
+    if ( (p2m_size - 1) >> 40 )
+#else
+    /* Very large domains (> 1TB) will exhaust virtual address space. */
+    if ( (p2m_size - 1) >> 28 )
+#endif
+    {
+        ERROR("Cannot map a guest with P2M size %#lx", p2m_size);
+        errno = EOPNOTSUPP;
+        return -1;
+    }
+
     map = malloc(sizeof(*map));
     if ( map == NULL )
     {
@@ -333,10 +370,30 @@ xc_core_arch_map_p2m_rw(xc_interface *xc
 
     if ( dinfo->p2m_size < info->nr_pages  )
     {
-        ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, info->nr_pages - 1);
+        ERROR("p2m_size < nr_pages (%lx < %lx)", dinfo->p2m_size, info->nr_pages);
         goto out;
     }
 
+    if ( !info->hvm && dinfo->p2m_size == (dinfo->guest_width > 4 ? ~0UL : ~0U) )
+    {
+        ERROR("Cannot r/%c-map a PV guest with invalid P2M", rw ? 'w' : 'o');
+        errno = ENODATA;
+        return -1;
+    }
+
+#ifndef __i386__
+    if ( (dinfo->p2m_size - 1) >> 40 )
+#else
+    /* Very large domains (> 1TB) will exhaust virtual address space. */
+    if ( (dinfo->p2m_size - 1) >> 28 )
+#endif
+    {
+        ERROR("Cannot r/%c-map a guest with P2M size %#lx",
+              rw ? 'w' : 'o', dinfo->p2m_size);
+        errno = EOPNOTSUPP;
+        return -1;
+    }
+
     p2m_cr3 = GET_FIELD(live_shinfo, arch.p2m_cr3, dinfo->guest_width);
 
     p2m_frame_list = p2m_cr3 ? xc_core_arch_map_p2m_list_rw(xch, dinfo, dom, live_shinfo, p2m_cr3)
--- a/tools/libs/guest/xg_sr_restore_x86_pv.c
+++ b/tools/libs/guest/xg_sr_restore_x86_pv.c
@@ -709,10 +709,23 @@ static int handle_x86_pv_p2m_frames(stru
         return -1;
     }
 
+#ifdef __i386__
+    /* Very large domains (> 1TB) will exhaust virtual address space. */
+    if ( data->end_pfn >> 28 )
+#elif 0 /* sizeof(data->end_pfn) > 4 */
+    if ( data->end_pfn >> (ctx->x86.pv.width > 4 ? 40 : 32) )
+#else
+    if ( 0 )
+#endif
+    {
+        ERROR("End pfn in stream (%#x) too large", data->end_pfn);
+        return -1;
+    }
+
     if ( data->start_pfn > data->end_pfn )
     {
-        ERROR("End pfn in stream (%#x) exceeds Start (%#x)",
-              data->end_pfn, data->start_pfn);
+        ERROR("Start pfn in stream (%#x) exceeds End (%#x)",
+              data->start_pfn, data->end_pfn);
         return -1;
     }
 
--- a/tools/libs/guest/xg_sr_save_x86_pv.c
+++ b/tools/libs/guest/xg_sr_save_x86_pv.c
@@ -464,11 +464,40 @@ static int map_p2m_list(struct xc_sr_con
  */
 static int map_p2m(struct xc_sr_context *ctx)
 {
+    xc_interface *xch = ctx->xch;
     uint64_t p2m_cr3;
+    uint64_t max_pfn = GET_FIELD(ctx->x86.pv.shinfo, arch.max_pfn,
+                                 ctx->x86.pv.width);
+
+    if ( !max_pfn )
+    {
+        ERROR("Cannot save a guest without P2M");
+        errno = ENODATA;
+        return -1;
+    }
+
+    if ( max_pfn-- == (ctx->x86.pv.width > 4 ? ~0UL : ~0U) )
+    {
+        ERROR("Cannot save a guest with invalid P2M");
+        errno = ENODATA;
+        return -1;
+    }
+
+#ifndef __i386__
+    if ( max_pfn >> (sizeof_field(struct xc_sr_rec_x86_pv_p2m_frames,
+                                  end_pfn) > 4 ? 40 : 32) )
+#else
+    /* Very large domains (> 1TB) will exhaust virtual address space. */
+    if ( max_pfn >> 28 )
+#endif
+    {
+        ERROR("Cannot save a guest with maximum PFN %#"PRIx64, max_pfn);
+        errno = EOPNOTSUPP;
+        return -1;
+    }
 
     ctx->x86.pv.p2m_generation = ~0ULL;
-    ctx->x86.pv.max_pfn = GET_FIELD(ctx->x86.pv.shinfo, arch.max_pfn,
-                                    ctx->x86.pv.width) - 1;
+    ctx->x86.pv.max_pfn = max_pfn;
     p2m_cr3 = GET_FIELD(ctx->x86.pv.shinfo, arch.p2m_cr3, ctx->x86.pv.width);
 
     return p2m_cr3 ? map_p2m_list(ctx, p2m_cr3) : map_p2m_tree(ctx);



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:16:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:16:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150361.278024 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QKl-0007gr-0L; Mon, 05 Jul 2021 15:16:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150361.278024; Mon, 05 Jul 2021 15:16:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QKk-0007gk-TM; Mon, 05 Jul 2021 15:16:30 +0000
Received: by outflank-mailman (input) for mailman id 150361;
 Mon, 05 Jul 2021 15:16:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QKj-0007gR-FF
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:16:29 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cc6a4b37-51ac-4aaf-8f83-bdcfe2678826;
 Mon, 05 Jul 2021 15:16:28 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2050.outbound.protection.outlook.com [104.47.14.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-39--TSgA9JGM7yATgxUCHtwrA-2; Mon, 05 Jul 2021 17:16:26 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5472.eurprd04.prod.outlook.com (2603:10a6:803:d3::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:16:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:16:24 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0016.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4264.18 via Frontend Transport; Mon, 5 Jul 2021 15:16:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cc6a4b37-51ac-4aaf-8f83-bdcfe2678826
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498187;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=0wA9AAqtkrdQU9VPvSonatQPKPM1QlgORRMW1Ye+aCM=;
	b=mKC+xD6lzcYufRDdn+1C9uF9t6ujsKj8WgAQnpB1PWFF06WzPvNb+a1KiTygjJsGVaC0dr
	yAsw9W1IFum8UmOJOta2N63bTthzirmDYN6bKBAaC2IVjQ97iagLArFXWZBgBq6kqQPaB3
	RsqV23+rwcumAbRBqlbaNtR9cOo8sks=
X-MC-Unique: -TSgA9JGM7yATgxUCHtwrA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YQqWpj7gBxmMeY9HAbLLd7Ej7yqNMw5Y+/KqOy/U6oM6Shd7L9A/vBCANvBxvnDUxtR1z717M/XuHyPc5kWhA527xXf3ta2dWOPy+faNiGvJQzFwsY03YJzp0pUe83GwUuwBVLm4VO86jSUNBc+EPleKnqYqXuj+Afub5iLNYxKwMvrRzVJ9+wDvSSolrqix6E/RwxQ2dU8CUESbb8LhVgYaEOV4P7plk6qF15eYdppYlucm0i7Bd8ZJB0wCNi3n/biWUgoPftvoQciuzJjAt3NC1UwryHCApVG40gFgD3Z8okTqw/ol0O97IZyNkYZesq8jd6CvDtRjRlBUs0mQgQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=0wA9AAqtkrdQU9VPvSonatQPKPM1QlgORRMW1Ye+aCM=;
 b=HABKzdKtFiT5IH3krVMarL002MTR1X4gSJOPsOSEk5e4M8zHa7QcvbCxrL6dxMklhUZ1HsuwZn1jNqCLu2E6/T201+rMrsVerknA5wnMMLiyXvZrXtpjOdwT06QVt2MNml6cajUf+qKBO4SErfDbtWYRZD3NqfWSD5RDJBhsMDJJrm/+jEf1SkrcC1QqCFhmC50Me05T4RhBYP9TJe1JAQ1T5JWKDy3mRIQgzAexBd8i7r5rtNTZFK6qtNEyhZ+vuVQSQbQZdLRJ9M9qZO2neaNPAbMhe2GqvjSgx9WKqZKaXlMojwaEW5PyMg7U9LEmq+vrQMxedXskHiXhJmVx6g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 10/13] libxc: simplify HYPERCALL_BUFFER()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <2d8b0f54-3045-f881-4705-28317e5ab509@suse.com>
Date: Mon, 5 Jul 2021 17:16:23 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P191CA0016.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 259828eb-8c8a-4791-3af6-08d93fc7da97
X-MS-TrafficTypeDiagnostic: VI1PR04MB5472:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54723648A525E89C68B62C92B31C9@VI1PR04MB5472.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ANXTnSZQqwVmOoJSScKLv+3JIK8uSQlW7I/pt6AY/DeDGSFYjx2ib8giNu8MSrSwmMaCaTfOKi5ynl6/+KOGv+jRGU6CsNERIXOcr/LV+lsfp8ZtITvxpmI7i/we45bFnRBmDAQEunad3EKs/8f2d4itkoylP95/DKtVqv5Rd8Aq1mvI5F8jQ1b/hKPThr/kGK+6Ruowy4NXAaHuTWlO+y9RovegsQK5rS1nnznHfTpS51NNssiZrxl3EVPMhJngM7NAYQtS2SAtheEFOX852PAaqR5iDzeu4e1zPXXKDtE/NELgzLREWHGro/TEwIUHTTQUJn8E4LqB4hgleqO6v3KuyqPH1Hvb+ZzcwWSYkVh93HS5VsLLWtcz8rHoarsrjEhck7pg+5ftSLyGKLTDxWUaOnR7ijQXOhxYZC2Z8crGVAZ+Tz0wPO77R/50AwEB/tYZTRKdqtHG0Jnk4VEkSU9Izahpq+XbT/Nb4n0aTZLd4KxLplI3baBJJt6F+oOCxgIvEoB7RdSwYIr1ERrDLqNbN3EMvp4KawUn3k49k3Nve8XIUhxmN30EkR89qMa30446V0K0QbTkfecIwEAEMD8Jy5/jnUDeghX5CSzG0Z+L7W6vy4YAXk0g71lPF4ALnSZSATkqrq7izq09eRXYIVpaEM32GXWBZH+SW73eb7XbrqpumWxyt9p1xTQq8N+HLBxy9ifC4M6ptLIRy8pAy4ZLEsCUXS0QKEtNNixYdtE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(376002)(39860400002)(366004)(396003)(54906003)(478600001)(6486002)(316002)(16576012)(2616005)(83380400001)(6916009)(8936002)(2906002)(8676002)(956004)(4326008)(5660300002)(66946007)(86362001)(66556008)(66476007)(36756003)(38100700002)(26005)(186003)(31696002)(31686004)(16526019)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?fd+Q84wfLJ5a9d11RHLaFS225cWfW/bq3TIT8Jb?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 259828eb-8c8a-4791-3af6-08d93fc7da97
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:16:24.9091
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: aQlG3QWZ8FUZ4OENAowtOhAFR6GYECATSU+ObCQAdZsCEUuDY1Cp5aIXtiSei1EIzfPK2eThMeZg9LB1GKuKNg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5472

_hcbuf_buf1 has been there only for a pointer comparison to validate
type compatibility. The same can be achieved by not using typeof() on
the definition of what so far was _hcbuf_buf2, as the initializer has
to also be type-compatible. Drop _hcbuf_buf1 and the comaprison;
rename _hcbuf_buf2.

Since we're already using compiler extensions here, don't be shy and
also omit the middle operand of the involved ?: operator.

Bring line continuation character placement in line with that of
related macros.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: New.

--- a/tools/include/xenctrl.h
+++ b/tools/include/xenctrl.h
@@ -247,13 +247,10 @@ typedef struct xc_hypercall_buffer xc_hy
 /*
  * Returns the hypercall_buffer associated with a variable.
  */
-#define HYPERCALL_BUFFER(_name)                                 \
-    ({  xc_hypercall_buffer_t _hcbuf_buf1;                      \
-        typeof(XC__HYPERCALL_BUFFER_NAME(_name)) *_hcbuf_buf2 = \
-                &XC__HYPERCALL_BUFFER_NAME(_name);              \
-        (void)(&_hcbuf_buf1 == _hcbuf_buf2);                    \
-        (_hcbuf_buf2)->param_shadow ?                           \
-                (_hcbuf_buf2)->param_shadow : (_hcbuf_buf2);    \
+#define HYPERCALL_BUFFER(_name)                                \
+    ({  xc_hypercall_buffer_t *_hcbuf_buf =                    \
+                &XC__HYPERCALL_BUFFER_NAME(_name);             \
+        _hcbuf_buf->param_shadow ?: _hcbuf_buf;                \
      })
 
 #define HYPERCALL_BUFFER_INIT_NO_BOUNCE .dir = 0, .sz = 0, .ubuf = (void *)-1



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:17:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:17:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150370.278035 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QLa-0008NP-Am; Mon, 05 Jul 2021 15:17:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150370.278035; Mon, 05 Jul 2021 15:17:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QLa-0008NI-7N; Mon, 05 Jul 2021 15:17:22 +0000
Received: by outflank-mailman (input) for mailman id 150370;
 Mon, 05 Jul 2021 15:17:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QLY-0008Mw-EO
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:17:20 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 937a7f0b-7ff4-4cd4-9c75-47175e6cd93d;
 Mon, 05 Jul 2021 15:17:18 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2054.outbound.protection.outlook.com [104.47.14.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-24-qFzQzhysOZa-eU2zVNpaWg-2; Mon, 05 Jul 2021 17:17:17 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5472.eurprd04.prod.outlook.com (2603:10a6:803:d3::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:17:14 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:17:14 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR02CA0099.eurprd02.prod.outlook.com (2603:10a6:208:154::40) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Mon, 5 Jul 2021 15:17:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 937a7f0b-7ff4-4cd4-9c75-47175e6cd93d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498237;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=PbQU7L3blROF4Klwca7Ybd+xUlO1Dcp9UzFdRq08MR0=;
	b=ZW8qpxCenTIqKu+Vrv/rjih+Vr4EQQDzigNqSENnfgyop1kATHCbIBo3SrNWxDeWSNeflI
	9cSAT50eS7LDDq+Uxjs5kF+K49BiLKque2G+6EWRmnQNlKo61lhfcfKcHoA1+zViTa6ERB
	CukBXHaStWzTXFWrEXF08b+Cx3lBYpI=
X-MC-Unique: qFzQzhysOZa-eU2zVNpaWg-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=X9zeorFJ8Epf1KxcHwClJfJjkymJMMAMpws/Ju4tlJf5zKoRheap6QkbevTfEU5Roht/feojKrqFT1nD274PVT1hxRI7/Mkveklm/bqxB5+sHPGflJnwqOsumaxBEwxZjpyNHZGQOdW+OkXbpPsnk8yinsQEwp+GgDUYFQg2VfMJmYf/92CZbJZmvo2IeJyE2dp34cBR6zDaho6G97ysrTstiNZiYowA/K/buQ0ECC8g2z3f+TNUB8yG5JrC9aFsjs6+6I2JSCxDEMH1c+Z95xpYVCDBrUjsyeQo3mX+wNPct4fCtuSGgo4F47fwerKzGz3WOoTOVtx7oIIYssi58Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PbQU7L3blROF4Klwca7Ybd+xUlO1Dcp9UzFdRq08MR0=;
 b=N+7UFuQOTk93zw2pkkJes+XwD2JeqW0/KviOm1THMFqHaqGcv6IVEuWM8tT0XiQIQ0q1K4AnGPuKk5g3ib8bx7ijtqkrxD4TLX9Z6RhVVjZXyKx0LzL+5H+eoZKA+0gLCg+FrNNSj+RRVGxraEal+5KJbXaIa/0UJNAW6m71gR9gV4cMUX7WYMHv8N1HAcDH5vdvOpO4IAbiW1levWDJ5FZOnjoZqPCncjo1ESOjMDXIiWjVJVCRKjzZzQhVLAdM/uPvoIG67G+AMShM6vTflXpZvVRcqLycEnXN9V+gPVwUglGHPdZEhWNTHkf+UkQXydZx7Wt9EeY0P2AiEf/pFA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 11/13] x86/paging: supply more useful log-dirty page count
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <6473c419-f989-3307-f6be-7144fc9b35b3@suse.com>
Date: Mon, 5 Jul 2021 17:17:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM0PR02CA0099.eurprd02.prod.outlook.com
 (2603:10a6:208:154::40) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 96dc78b4-f40e-4e24-4647-08d93fc7f839
X-MS-TrafficTypeDiagnostic: VI1PR04MB5472:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB547227741211156E02565F42B31C9@VI1PR04MB5472.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	gwjQuGee4eXl9jSzCyMj9LHR6jjHJ6I1mpMxvdMgfku/QNQpFNhjM6n1mSLSj9lDOe8xVwR0eDGsnJThf1Cj+zmHiRs8B5oQQ0Y7q+sIN1f7y82EVH/CY+awY+k3abmPJArA+NR7e9wsznh5caJ6yAcs4BRDbSeT1ZzOcDYDL/dpIEvLLObqAU0OQCWCZ8by6pXx1LAbjcWOWpKj9OZVrqWGckQEB/uGVrtVTd3AYkShfQk+cWKxcSmU1hIf6qUxk+r06LDf26zZW23J49qL2mRAG1IQZxQAxP/HwWzlK2DNH6oE156GY4FvocwPuS4+NQSLwdqbLTsoe/YCiB5sO/qgSoEb/C5tHJHDrSS+sOREa02d4yixxfqA7kW53yB4DrtIYH+PeDBP0s2Uibbe411pLUp7krUmodovUuQwRH6g99W59fe3Dclc736Jpjy5scCqyO4zsPrErGiUKcLGDE3j7HFuXBWrnibDQYIkVWATPCXg26pifIJpXaVwzLf4V5PkOHAVxb5IrCHsJRk1EYMt1DFLwNXpiVVus30eGao88w+J2+N4uoFHqMw0CnmsriFF5DwuBI1gMVXe5xz4KzW6FKSbY6wF4Ps/141ypt3SPTMFUc2gBd7obC7S7RsnP9j/ni/Y0KFdalGFTIYOQL3/5Tp7DrPJWBU2wn5cw3sMgHqdGVcuaVyLsxxAZwp8Eknryn0F1zEm0J7ifC+erzSEUZ3S4euG+CinkrY/0BuYjHbGi+TH4serhI31bv5V
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(376002)(39860400002)(366004)(396003)(54906003)(478600001)(6486002)(316002)(16576012)(2616005)(83380400001)(6916009)(8936002)(2906002)(8676002)(956004)(4326008)(5660300002)(30864003)(66946007)(86362001)(66556008)(66476007)(36756003)(38100700002)(26005)(186003)(31696002)(31686004)(16526019)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?fsX4i7sC3dsjxzCMyVEi/l48lT27vjO/xu8h4A3?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 96dc78b4-f40e-4e24-4647-08d93fc7f839
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:17:14.6659
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 9zCDBfAyrX+pE5z4UZAUcfkvEsWOeth9g+GFEtMrkM91wdKIUkGuSwrE9X3Hwa9pZRDwtk0+UWLPjuSMm6UAAA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5472

In paging_log_dirty_op(), always update the count of pages field:
- if more pages were specified than the guest has ever accessed (HVM) or
  marked part of the p2m (PV), there's no point for the caller to
  inspect bits beyond the one for that last page,
- if the guest's p2m size has grown in the meantime, the caller would
  have no indication that it may not have caught all dirty bits.

Also exit the loop once having passed the last valid GFN. To balance
overhead and savings, do this before inspecting a new L2 table.

Adjust libxenguest accordingly, albeit these changes are necessary only
for guests which actually alter their P2M size while under migration.
They do, however, additionally open up the option of the hypervisor
eventually zapping large ranges of trailing zeros from the bitmap when
providing it back to the tools.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
Of course this still is far from ideal: At the very least a perhaps
large tail of zeros could very well also result in a reduced page
count.

--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -237,7 +237,16 @@ struct xc_sr_context
             /* Further debugging information in the stream. */
             bool debug;
 
+            /*
+             * Counts of bits (each representing a guest page), expressing
+             * respectively
+             * - obtained P2M size,
+             * - allocated bitmap size,
+             * - range actually filled with valid data.
+             */
             unsigned long p2m_size;
+            unsigned long p2m_alloc_size;
+            unsigned long p2m_used_size;
 
             struct precopy_stats stats;
 
@@ -245,6 +254,7 @@ struct xc_sr_context
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
+            unsigned long used_deferred_pages;
             xc_hypercall_buffer_t dirty_bitmap_hbuf;
         } save;
 
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -450,7 +450,8 @@ static int send_checkpoint_dirty_pfn_lis
     xc_interface *xch = ctx->xch;
     int rc = -1;
     unsigned int count, written;
-    unsigned long i;
+    unsigned long i, p2m_size;
+    long long ret;
     uint64_t *pfns = NULL;
     struct iovec *iov = NULL;
     struct xc_sr_record rec = {
@@ -459,22 +460,29 @@ static int send_checkpoint_dirty_pfn_lis
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->restore.dirty_bitmap_hbuf);
 
-    if ( xc_logdirty_control(
-             xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
-             HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size,
-             0, NULL) != ctx->restore.p2m_size )
+    ret = xc_logdirty_control(
+              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
+              HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size,
+              0, NULL);
+    if ( ret < 0 )
     {
         PERROR("Failed to retrieve logdirty bitmap");
         goto err;
     }
+    if ( ret > ctx->restore.p2m_size )
+    {
+        ERROR("Guest has grown its p2m too much");
+        goto err;
+    }
+    p2m_size = ret;
 
-    for ( i = 0, count = 0; i < ctx->restore.p2m_size; i++ )
+    for ( i = 0, count = 0; i < p2m_size; i++ )
     {
         if ( test_bit(i, dirty_bitmap) && !++count )
             break;
     }
 
-    if ( i < ctx->restore.p2m_size )
+    if ( i < p2m_size )
     {
         ERROR("Too many dirty pfns");
         goto err;
@@ -495,7 +503,7 @@ static int send_checkpoint_dirty_pfn_lis
         goto err;
     }
 
-    for ( i = 0, written = 0; i < ctx->restore.p2m_size; ++i )
+    for ( i = 0, written = 0; i < p2m_size; ++i )
     {
         if ( !test_bit(i, dirty_bitmap) )
             continue;
@@ -739,8 +747,10 @@ static int setup(struct xc_sr_context *c
 
     if ( ctx->stream_type == XC_STREAM_COLO )
     {
+        unsigned long pages = NRPAGES(bitmap_size(ctx->restore.p2m_size));
+
         dirty_bitmap = xc_hypercall_buffer_alloc_pages(
-            xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->restore.p2m_size)));
+            xch, dirty_bitmap, pages);
 
         if ( !dirty_bitmap )
         {
@@ -748,6 +758,8 @@ static int setup(struct xc_sr_context *c
             rc = -1;
             goto err;
         }
+
+        ctx->restore.p2m_size = pages << (PAGE_SHIFT + 3);
     }
 
     rc = ctx->restore.ops.setup(ctx);
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -74,6 +74,16 @@ static int write_checkpoint_record(struc
     return write_record(ctx, &checkpoint);
 }
 
+static void update_deferred_pages(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    if ( !ctx->save.deferred_pages )
+        return;
+    set_bit(pfn, ctx->save.deferred_pages);
+    ++ctx->save.nr_deferred_pages;
+    if ( pfn >= ctx->save.used_deferred_pages )
+        ctx->save.used_deferred_pages = pfn + 1;
+}
+
 /*
  * Writes a batch of memory as a PAGE_DATA record into the stream.  The batch
  * is constructed in ctx->save.batch_pfns.
@@ -130,11 +140,8 @@ static int write_batch(struct xc_sr_cont
                                                       ctx->save.batch_pfns[i]);
 
         /* Likely a ballooned page. */
-        if ( mfns[i] == INVALID_MFN && ctx->save.deferred_pages )
-        {
-            set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
-            ++ctx->save.nr_deferred_pages;
-        }
+        if ( mfns[i] == INVALID_MFN )
+            update_deferred_pages(ctx, ctx->save.batch_pfns[i]);
     }
 
     rc = xc_get_pfn_type_batch(xch, ctx->domid, nr_pfns, types);
@@ -196,12 +203,7 @@ static int write_batch(struct xc_sr_cont
             {
                 if ( rc == -1 && errno == EAGAIN )
                 {
-                    if ( ctx->save.deferred_pages )
-                    {
-                        set_bit(ctx->save.batch_pfns[i],
-                                ctx->save.deferred_pages);
-                        ++ctx->save.nr_deferred_pages;
-                    }
+                    update_deferred_pages(ctx, ctx->save.batch_pfns[i]);
                     types[i] = XEN_DOMCTL_PFINFO_XTAB;
                     --nr_pages;
                 }
@@ -369,7 +371,7 @@ static int suspend_domain(struct xc_sr_c
  * Send a subset of pages in the guests p2m, according to the dirty bitmap.
  * Used for each subsequent iteration of the live migration loop.
  *
- * Bitmap is bounded by p2m_size.
+ * Bitmap is bounded by p2m_alloc_size, but populated only up to p2m_used_size.
  */
 static int send_dirty_pages(struct xc_sr_context *ctx,
                             unsigned long entries, bool all_dirty)
@@ -381,7 +383,10 @@ static int send_dirty_pages(struct xc_sr
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->save.dirty_bitmap_hbuf);
 
-    for ( p = 0, written = 0; p < ctx->save.p2m_size; ++p )
+    if ( all_dirty )
+        ctx->save.p2m_used_size = ctx->save.p2m_size;
+
+    for ( p = 0, written = 0; p < ctx->save.p2m_used_size; ++p )
     {
         if ( !all_dirty && !test_bit(p, dirty_bitmap) )
             continue;
@@ -526,6 +531,8 @@ static int send_memory_live(struct xc_sr
 
     for ( ; ; )
     {
+        long long ret;
+
         policy_decision = precopy_policy(*policy_stats, data);
         x++;
 
@@ -552,15 +559,23 @@ static int send_memory_live(struct xc_sr
         if ( policy_decision != XGS_POLICY_CONTINUE_PRECOPY )
             break;
 
-        if ( xc_logdirty_control(
-                 xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
-                 &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_size,
-                 0, &stats) != ctx->save.p2m_size )
+        ret = xc_logdirty_control(
+                  xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
+                  &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_alloc_size,
+                  0, &stats);
+        if ( ret < 0 )
         {
             PERROR("Failed to retrieve logdirty bitmap");
             rc = -1;
             goto out;
         }
+        if ( ret > ctx->save.p2m_alloc_size )
+        {
+            ERROR("Guest has grown its p2m too much");
+            rc = -1;
+            goto out;
+        }
+        ctx->save.p2m_used_size = ret;
 
         policy_stats->dirty_count = stats.dirty_count;
 
@@ -614,7 +629,7 @@ static int colo_merge_secondary_dirty_bi
     for ( i = 0; i < count; i++ )
     {
         pfn = pfns[i];
-        if ( pfn >= ctx->save.p2m_size )
+        if ( pfn >= ctx->save.p2m_alloc_size )
         {
             PERROR("Invalid pfn 0x%" PRIx64, pfn);
             rc = -1;
@@ -642,6 +657,7 @@ static int suspend_and_send_dirty(struct
     xc_shadow_op_stats_t stats;
     char *progress_str = NULL;
     int rc;
+    long long ret;
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->save.dirty_bitmap_hbuf);
 
@@ -649,16 +665,22 @@ static int suspend_and_send_dirty(struct
     if ( rc )
         goto out;
 
-    if ( xc_logdirty_control(
-             xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
-             HYPERCALL_BUFFER(dirty_bitmap), ctx->save.p2m_size,
-             XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL, &stats) !=
-         ctx->save.p2m_size )
+    ret = xc_logdirty_control(
+              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN,
+              HYPERCALL_BUFFER(dirty_bitmap), ctx->save.p2m_alloc_size,
+              XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL, &stats);
+    if ( ret < 0 )
     {
         PERROR("Failed to retrieve logdirty bitmap");
         rc = -1;
         goto out;
     }
+    if ( ret > ctx->save.p2m_alloc_size )
+    {
+        ERROR("Guest has grown its p2m too much");
+        rc = -1;
+        goto out;
+    }
 
     if ( ctx->save.live )
     {
@@ -670,7 +692,8 @@ static int suspend_and_send_dirty(struct
         xc_set_progress_prefix(xch, "Checkpointed save");
 
     if ( ctx->save.deferred_pages )
-        bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_size);
+        bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_alloc_size);
+    ctx->save.p2m_used_size = MAX(ret, ctx->save.used_deferred_pages);
 
     if ( !ctx->save.live && ctx->stream_type == XC_STREAM_COLO )
     {
@@ -688,8 +711,9 @@ static int suspend_and_send_dirty(struct
         goto out;
 
     if ( ctx->save.deferred_pages )
-        bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_size);
+        bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_alloc_size);
     ctx->save.nr_deferred_pages = 0;
+    ctx->save.used_deferred_pages = 0;
 
  out:
     xc_set_progress_prefix(xch, NULL);
@@ -702,6 +726,7 @@ static int verify_frames(struct xc_sr_co
     xc_interface *xch = ctx->xch;
     xc_shadow_op_stats_t stats;
     int rc;
+    long long ret;
     struct xc_sr_record rec = { .type = REC_TYPE_VERIFY };
 
     DPRINTF("Enabling verify mode");
@@ -715,15 +740,18 @@ static int verify_frames(struct xc_sr_co
     if ( rc )
         goto out;
 
-    if ( xc_logdirty_control(
-             xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_PEEK,
-             &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_size,
-             0, &stats) != ctx->save.p2m_size )
+    ret = xc_logdirty_control(
+              xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_PEEK,
+              &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_alloc_size,
+              0, &stats);
+    if ( ret < 0 )
     {
         PERROR("Failed to retrieve logdirty bitmap");
         rc = -1;
         goto out;
     }
+    if ( ret > ctx->save.p2m_alloc_size )
+        IPRINTF("Guest has grown its p2m too much");
 
     DPRINTF("  Further stats: faults %u, dirty %u",
             stats.fault_count, stats.dirty_count);
@@ -804,13 +832,14 @@ static int setup(struct xc_sr_context *c
 
     if ( ctx->save.live || ctx->stream_type != XC_STREAM_PLAIN )
     {
+        unsigned long pages = NRPAGES(bitmap_size(ctx->save.p2m_size));
         DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                         &ctx->save.dirty_bitmap_hbuf);
 
         dirty_bitmap =
-            xc_hypercall_buffer_alloc_pages(
-                xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)));
-        ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
+            xc_hypercall_buffer_alloc_pages(xch, dirty_bitmap, pages);
+        ctx->save.p2m_alloc_size = pages << (PAGE_SHIFT + 3);
+        ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_alloc_size);
 
         if ( !dirty_bitmap || !ctx->save.deferred_pages )
             goto enomem;
--- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c
@@ -397,6 +397,19 @@ int paging_mfn_is_dirty(struct domain *d
     return rv;
 }
 
+/*
+ * This is used to provide a rough (upper) estimate to the caller of how many
+ * more pages we might have data for.
+ */
+static unsigned int last_valid_entry(const mfn_t *tbl, unsigned int idx) {
+    unsigned int last = LOGDIRTY_NODE_ENTRIES;
+
+    for ( ; idx < LOGDIRTY_NODE_ENTRIES; ++idx )
+        if ( mfn_valid(tbl[idx]) )
+            last = idx;
+
+    return last;
+}
 
 /* Read a domain's log-dirty bitmap and stats.  If the operation is a CLEAN,
  * clear the bitmap and stats as well. */
@@ -405,10 +418,10 @@ static int paging_log_dirty_op(struct do
                                bool_t resuming)
 {
     int rv = 0, clean = 0, peek = 1;
-    unsigned long pages = 0;
+    unsigned long pages = 0, extra = 0;
     mfn_t *l4 = NULL, *l3 = NULL, *l2 = NULL;
     unsigned long *l1 = NULL;
-    int i4, i3, i2;
+    unsigned int i4, i3, i2;
 
     if ( !resuming )
     {
@@ -479,6 +492,15 @@ static int paging_log_dirty_op(struct do
         l3 = (l4 && mfn_valid(l4[i4])) ? map_domain_page(l4[i4]) : NULL;
         for ( ; (pages < sc->pages) && (i3 < LOGDIRTY_NODE_ENTRIES); i3++ )
         {
+            unsigned long max_gfn = domain_get_maximum_gpfn(d);
+
+            if ( (i4 * LOGDIRTY_NODE_ENTRIES + i3) *
+                 LOGDIRTY_NODE_ENTRIES * PAGE_SIZE * 8 > max_gfn )
+            {
+                i4 = LOGDIRTY_NODE_ENTRIES;
+                break;
+            }
+
             l2 = ((l3 && mfn_valid(l3[i3])) ?
                   map_domain_page(l3[i3]) : NULL);
             for ( i2 = 0;
@@ -502,18 +524,36 @@ static int paging_log_dirty_op(struct do
                         goto out;
                     }
                 }
+
                 pages += bytes << 3;
+
                 if ( l1 )
                 {
+                    if ( unlikely(pages >= sc->pages) )
+                        extra = (PAGE_SIZE - bytes) << 3;
+
                     if ( clean )
                         clear_page(l1);
                     unmap_domain_page(l1);
                 }
             }
+
             if ( l2 )
+            {
+                if ( unlikely(pages >= sc->pages) )
+                {
+                    i2 = last_valid_entry(l2, i2);
+                    if ( i2 < LOGDIRTY_NODE_ENTRIES )
+                        extra = ((i4 * LOGDIRTY_NODE_ENTRIES + i3) *
+                                 LOGDIRTY_NODE_ENTRIES + i2 + 1) *
+                                PAGE_SIZE * 8;
+                }
+
                 unmap_domain_page(l2);
+            }
 
-            if ( i3 < LOGDIRTY_NODE_ENTRIES - 1 && hypercall_preempt_check() )
+            if ( pages < sc->pages && i3 < LOGDIRTY_NODE_ENTRIES - 1 &&
+                 hypercall_preempt_check() )
             {
                 d->arch.paging.preempt.log_dirty.i4 = i4;
                 d->arch.paging.preempt.log_dirty.i3 = i3 + 1;
@@ -521,10 +561,21 @@ static int paging_log_dirty_op(struct do
                 break;
             }
         }
+
         if ( l3 )
+        {
+            if ( !rv && unlikely(pages >= sc->pages) )
+            {
+                i3 = last_valid_entry(l3, i3);
+                if ( i3 < LOGDIRTY_NODE_ENTRIES )
+                    extra = (i4 * LOGDIRTY_NODE_ENTRIES + i3 + 1) *
+                            LOGDIRTY_NODE_ENTRIES * PAGE_SIZE * 8;
+            }
+
             unmap_domain_page(l3);
+        }
 
-        if ( !rv && i4 < LOGDIRTY_NODE_ENTRIES - 1 &&
+        if ( !rv && pages < sc->pages && i4 < LOGDIRTY_NODE_ENTRIES - 1 &&
              hypercall_preempt_check() )
         {
             d->arch.paging.preempt.log_dirty.i4 = i4 + 1;
@@ -534,8 +585,19 @@ static int paging_log_dirty_op(struct do
         if ( rv )
             break;
     }
+
     if ( l4 )
+    {
+        if ( !rv && unlikely(pages >= sc->pages) )
+        {
+            i4 = last_valid_entry(l4, i4);
+            if ( i4 < LOGDIRTY_NODE_ENTRIES )
+                extra = (i4 + 1) * LOGDIRTY_NODE_ENTRIES *
+                        LOGDIRTY_NODE_ENTRIES * PAGE_SIZE * 8;
+        }
+
         unmap_domain_page(l4);
+    }
 
     if ( !rv )
     {
@@ -562,8 +624,8 @@ static int paging_log_dirty_op(struct do
         return rv;
     }
 
-    if ( pages < sc->pages )
-        sc->pages = pages;
+    sc->pages = min(pages + extra, domain_get_maximum_gpfn(d) + 1);
+
     if ( clean )
     {
         /* We need to further call clean_dirty_bitmap() functions of specific
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -261,7 +261,8 @@ struct xen_domctl_shadow_op {
 
     /* OP_PEEK / OP_CLEAN */
     XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
-    uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */
+    uint64_aligned_t pages; /* Size of buffer. Updated with actual (or
+                               potentially needed) size. */
     struct xen_domctl_shadow_op_stats stats;
 };
 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:18:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:18:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150377.278046 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QMK-0000eM-Q3; Mon, 05 Jul 2021 15:18:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150377.278046; Mon, 05 Jul 2021 15:18:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QMK-0000eF-Mt; Mon, 05 Jul 2021 15:18:08 +0000
Received: by outflank-mailman (input) for mailman id 150377;
 Mon, 05 Jul 2021 15:18:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QMJ-0000e5-Jz
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:18:07 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 32618978-dda4-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:18:06 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2053.outbound.protection.outlook.com [104.47.14.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-18-nna5v4Q3OsK8LUYMWGk8dg-1; Mon, 05 Jul 2021 17:18:04 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5472.eurprd04.prod.outlook.com (2603:10a6:803:d3::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:18:03 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:18:03 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0106.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 15:18:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 32618978-dda4-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498285;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=RJUMTKaJ5bhtriSU6g8YBQb46nhrBNsM85val+nqS+M=;
	b=XnHbSI6EPTqFQfyxmlkCiAHlEXFxlYCIt3pXZJPDw/WTZiLqpCi4+t3jfNfaReea9fS/M4
	agEsSzcc4hBYybpafABbyCRv3Dajor/3nzRwNQkHR7j1zidSw0frD3vg9s8P74sb1ceakJ
	nc30WN7Hy9rU9Ye/Z6vHhKAxvyhcvCI=
X-MC-Unique: nna5v4Q3OsK8LUYMWGk8dg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NpLQWAqat7FGtaChv5q+l+wqzhBJgdZPsL18T5JgWQkP7uX9DtlopiC5pv/o3DV6crqTQvQEYl8H/jrY2MG0FBw72kLj0et3ZQWQeErXQpyPhNb5cwcoyDOl0sco4WsgMPnQVDb8d7445E0983ne54eUlBqHzrlW4jxjmeTkKWYuE8un+iEP0pkcZI0g4xUZk8YC4X740ntpMdvUQZF3aZgk/KMnu2g4Bsk3fsD7MA4A9px73CFR9ira2SrHqxZBvHPONdBBLhvEnI8iqyegH4d6pLYy0Us1CBzbvQmacLDxTMFvsXQNjF/ImCBrtP7deECJ75wsTHZUjyO/V9Y1kA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=RJUMTKaJ5bhtriSU6g8YBQb46nhrBNsM85val+nqS+M=;
 b=DOjnGpsDWil1jnC6Up4Mb2p63Pk0TBT/hWNvK5HK2saMSLrrp6/Fw6JhW/D3qax2ffF5vXCYAFAFrEy2U2YPDn3B0BBHbxqfrd+2TJBh0B1t6USl/QDsAXou5yoSRc/mMTrCYOJzLOiDtAk1FBYN/5QsfJSPJvG7gW+qjBqan8CjjBp/DyirysK06LcnVHwtcqgCDfReUvYr13nbe4HYiwM88wREQ/gKnAfZe4d+HnjvecGS0Do/tQjto0tuR6Hu0TsHyH3aTnenT54MDel/HCme2slFw+20cyPasWlt6m+oyR2ITrAjbNGUFYMEdjMzsqh+snJcS129Z6e6oZtpvg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 12/13] x86/mm: update log-dirty bitmap when manipulating
 P2M
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <2fa96dd3-986f-e41a-266e-9cdf8941b4dd@suse.com>
Date: Mon, 5 Jul 2021 17:18:01 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0106.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::22) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 378bae56-8d98-4973-987e-08d93fc81504
X-MS-TrafficTypeDiagnostic: VI1PR04MB5472:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5472F94222EE43563403011EB31C9@VI1PR04MB5472.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	T/XUsibU4ttsa3QJc2JsURW34wWsOSBmTpMSCrjA98ivWrABlDe2kDc4aRtwU6EVPVX4bAO2RwhL5S9qnAe0IP+G6YOloH1p2hq3J9BuZQ+ueVO0DKs0OOO8ld7X6I2FI6RiKRoWjRsQS1NQ+9j0nj0mXOjYyow9kobyv4ZNYw5nzcIaplHgbodkP9lDa2GA87mPr60Q/wEjgw0lV6vtQUDmSsEP05/X/PaimBpeJ8GDsVLgBlSpCVMbEmVlBS1OuGRJUZ0dHCt6xuLaVMmPTEuGmEl1irBzmfC7lwL2AtkNH5krU9I9/RnzY3TQkw8b/BllpDJnRd7I2Gwu+mPHDKOSqlwVbk49B5ipZ1NrhG4ZXTugW9ng0ZyHVDcGHcRAaKIeTbndWs4pVuMKtZ7Z0A9+T9MYaQUz2wPyRnG6b8p/Ir5BI/1xdEkktzjDD6HdAFJX7Ouu6WIBazmWJc/D0SSQdkuWS7W32oGJ0X4Klr0zDqr4AYNW6nmMPf7HFoRtmh0wntL9Y0939ckXWS4dVvXGNI600ImVX2fpbLq5dSIUo4EblATvcK++TEqlPomQ/Np3R2Y41HALs0zkFzIxQ+ZTyFnSYJqBq0mPzlWLULQ94Y0YWnJWPQS1dq9QUq9R3NRarSdMUvn2u/PqLjR968Wwhv81dGe/tTCtibE5vxBX255jPfgqFDV4iDQHRM5OkoNO+g3TGLhRSTi3fU5UlWJ6Bwkp1nuv/3rIu5jDX+JdLG2YjpBCLoqGEjQaGK+Y
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(376002)(366004)(396003)(39850400004)(54906003)(478600001)(6486002)(316002)(16576012)(2616005)(15650500001)(83380400001)(6916009)(8936002)(2906002)(8676002)(956004)(4326008)(5660300002)(66946007)(86362001)(66556008)(66476007)(36756003)(38100700002)(26005)(186003)(31696002)(31686004)(16526019)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 378bae56-8d98-4973-987e-08d93fc81504
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:18:02.9377
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: +RoKEJOcN32NEkkSVHxCWhcjEjci7UBHSWl40GBxdcYq17XvG2jetdrxhlGPN1XW1qn8EVmX+UJG/qCfg/EFNg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5472

Just like for PV guests MMU_MACHPHYS_UPDATE implies marking of the
respective page as dirty, additions to a HVM guest's P2M should do so.

For HVM the opposite is also true: Pages being removed from the P2M are
no longer dirty at their prior GFN; there's no point in telling the tool
stack to try and copy that page, when this will fail anyway (until
perhaps a new page gets placed there). Introduce paging_mark_pfn_clean()
(intentionally without a paging_mark_clean() counterpart) to handle
this. Note that while there is an earlier call to set_gpfn_from_mfn() in
guest_physmap_add_entry(), but there's little reason to mark the page
clean there when later in the function it'll be marked dirty. This is
even more so given that at this point it's only the M2P that gets
updated, with the P2M still left unchanged.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
guest_physmap_add_entry()'s error handling looks bogus in this regard
anyway: If an error occurs before an MFN actually gets assciated with
the new GFN, the M2P entry ought to be restored imo. But of course a
guest is still hosed if the operation succeeds partially.

Note that I've not even checked mem-paging and mem-sharing code for
whether they may need similar adjustment. At least the latters is, aiui,
incompatible with log-dirty mode anyway.

--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -818,7 +818,10 @@ p2m_remove_page(struct p2m_domain *p2m,
         {
             p2m->get_entry(p2m, gfn_add(gfn, i), &t, &a, 0, NULL, NULL);
             if ( !p2m_is_grant(t) && !p2m_is_shared(t) && !p2m_is_foreign(t) )
+            {
                 set_gpfn_from_mfn(mfn_x(mfn) + i, INVALID_M2P_ENTRY);
+                paging_mark_pfn_clean(p2m->domain, _pfn(gfn_x(gfn) + i));
+            }
         }
     }
 
@@ -1027,8 +1030,11 @@ guest_physmap_add_entry(struct domain *d
         if ( !p2m_is_grant(t) )
         {
             for ( i = 0; i < (1UL << page_order); i++ )
+            {
                 set_gpfn_from_mfn(mfn_x(mfn_add(mfn, i)),
                                   gfn_x(gfn_add(gfn, i)));
+                paging_mark_pfn_dirty(d, _pfn(gfn_x(gfn) + i));
+            }
         }
     }
 
@@ -1314,6 +1320,7 @@ static int set_typed_p2m_entry(struct do
         {
             ASSERT(mfn_valid(mfn_add(omfn, i)));
             set_gpfn_from_mfn(mfn_x(omfn) + i, INVALID_M2P_ENTRY);
+            paging_mark_pfn_clean(d, _pfn(gfn_x(gfn) + i));
         }
 
         ioreq_request_mapcache_invalidate(d);
--- a/xen/arch/x86/mm/p2m-pod.c
+++ b/xen/arch/x86/mm/p2m-pod.c
@@ -645,7 +645,10 @@ p2m_pod_decrease_reservation(struct doma
             }
             p2m_tlb_flush_sync(p2m);
             for ( j = 0; j < n; ++j )
+            {
                 set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY);
+                paging_mark_pfn_clean(d, _pfn(gfn_x(gfn) + i + j));
+            }
             p2m_pod_cache_add(p2m, page, cur_order);
 
             ioreq_request_mapcache_invalidate(d);
--- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c
@@ -259,7 +259,7 @@ static int paging_log_dirty_disable(stru
 }
 
 /* Mark a page as dirty, with taking guest pfn as parameter */
-void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn)
+static void mark_pfn_dirty(struct domain *d, pfn_t pfn, bool dirty)
 {
     bool changed;
     mfn_t mfn, *l4, *l3, *l2;
@@ -290,14 +290,15 @@ void paging_mark_pfn_dirty(struct domain
 
     if ( unlikely(!mfn_valid(d->arch.paging.log_dirty.top)) ) 
     {
-         d->arch.paging.log_dirty.top = paging_new_log_dirty_node(d);
+         if ( dirty )
+             d->arch.paging.log_dirty.top = paging_new_log_dirty_node(d);
          if ( unlikely(!mfn_valid(d->arch.paging.log_dirty.top)) )
              goto out;
     }
 
     l4 = paging_map_log_dirty_bitmap(d);
     mfn = l4[i4];
-    if ( !mfn_valid(mfn) )
+    if ( !mfn_valid(mfn) && dirty )
         l4[i4] = mfn = paging_new_log_dirty_node(d);
     unmap_domain_page(l4);
     if ( !mfn_valid(mfn) )
@@ -305,7 +306,7 @@ void paging_mark_pfn_dirty(struct domain
 
     l3 = map_domain_page(mfn);
     mfn = l3[i3];
-    if ( !mfn_valid(mfn) )
+    if ( !mfn_valid(mfn) && dirty )
         l3[i3] = mfn = paging_new_log_dirty_node(d);
     unmap_domain_page(l3);
     if ( !mfn_valid(mfn) )
@@ -313,21 +314,22 @@ void paging_mark_pfn_dirty(struct domain
 
     l2 = map_domain_page(mfn);
     mfn = l2[i2];
-    if ( !mfn_valid(mfn) )
+    if ( !mfn_valid(mfn) && dirty )
         l2[i2] = mfn = paging_new_log_dirty_leaf(d);
     unmap_domain_page(l2);
     if ( !mfn_valid(mfn) )
         goto out;
 
     l1 = map_domain_page(mfn);
-    changed = !__test_and_set_bit(i1, l1);
+    changed = dirty ? !__test_and_set_bit(i1, l1)
+                    : __test_and_clear_bit(i1, l1);
     unmap_domain_page(l1);
     if ( changed )
     {
         PAGING_DEBUG(LOGDIRTY,
-                     "d%d: marked mfn %" PRI_mfn " (pfn %" PRI_pfn ")\n",
-                     d->domain_id, mfn_x(mfn), pfn_x(pfn));
-        d->arch.paging.log_dirty.dirty_count++;
+                     "%pd: marked mfn %" PRI_mfn " (pfn %" PRI_pfn ") %s\n",
+                     d, mfn_x(mfn), pfn_x(pfn), dirty ? "dirty" : "clean");
+        d->arch.paging.log_dirty.dirty_count += dirty ? 1 : -1;
     }
 
 out:
@@ -336,6 +338,16 @@ out:
     return;
 }
 
+void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn)
+{
+    mark_pfn_dirty(d, pfn, true);
+}
+
+void paging_mark_pfn_clean(struct domain *d, pfn_t pfn)
+{
+    mark_pfn_dirty(d, pfn, false);
+}
+
 /* Mark a page as dirty */
 void paging_mark_dirty(struct domain *d, mfn_t gmfn)
 {
@@ -348,7 +360,7 @@ void paging_mark_dirty(struct domain *d,
     /* We /really/ mean PFN here, even for non-translated guests. */
     pfn = _pfn(get_gpfn_from_mfn(mfn_x(gmfn)));
 
-    paging_mark_pfn_dirty(d, pfn);
+    mark_pfn_dirty(d, pfn, true);
 }
 
 
--- a/xen/include/asm-x86/paging.h
+++ b/xen/include/asm-x86/paging.h
@@ -170,8 +170,9 @@ void paging_log_dirty_init(struct domain
 
 /* mark a page as dirty */
 void paging_mark_dirty(struct domain *d, mfn_t gmfn);
-/* mark a page as dirty with taking guest pfn as parameter */
+/* mark a page as dirty/clean with taking guest pfn as parameter */
 void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn);
+void paging_mark_pfn_clean(struct domain *d, pfn_t pfn);
 
 /* is this guest page dirty? 
  * This is called from inside paging code, with the paging lock held. */



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:19:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:19:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150384.278057 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QNJ-0001Gw-4e; Mon, 05 Jul 2021 15:19:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150384.278057; Mon, 05 Jul 2021 15:19:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QNJ-0001Gp-1S; Mon, 05 Jul 2021 15:19:09 +0000
Received: by outflank-mailman (input) for mailman id 150384;
 Mon, 05 Jul 2021 15:19:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0QNH-0001GA-GP
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:19:07 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9ef82d97-3515-4199-8073-9a88d7333d68;
 Mon, 05 Jul 2021 15:19:06 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2056.outbound.protection.outlook.com [104.47.14.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-13-nu-3OTzgMRuMgoeBjUPhAQ-1; Mon, 05 Jul 2021 17:19:04 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5472.eurprd04.prod.outlook.com (2603:10a6:803:d3::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 15:18:59 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:18:59 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR0101CA0061.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Mon, 5 Jul 2021 15:18:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9ef82d97-3515-4199-8073-9a88d7333d68
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625498345;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=zViDK8FuxeRhRXIhpj/SCVn6kY0R8hbaF74WBTbyFgY=;
	b=ksAM+1xgCk1RBAve0txCj1XusQfUd4IKDMUjcC0DIJWCKCOyCJp8e9PjRG75+5qy2O0t3G
	y4Qk6Tm7nf9d8Xo1itu8E5XmKRYN/bOhDwZhsDEKXh9eXKmUWMo5+NvEjLPB4I795Fr0Lg
	LtyNxroTJHXW7yhAXbvhmfZEIaCme3E=
X-MC-Unique: nu-3OTzgMRuMgoeBjUPhAQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MjvDoRys9kN38HoiEWKnTwyXmqNAfxjfCgEq/yxfbgIZgvJG8B+0S/bGG6enkUMsN3N9BTwFqA3wDmYdt+WZPl6NGbH5BDpcfdB8bwVYXEVLce8TPNkTd4reQ6foxBCGtk11kIe8dtThUa1eUZD6QzxmWBuUYFOua5H0j/Jct0QsqXPbIMvFr4/WIkb371T5FfFj5hpFjjCgNh17y3lWiWMiQ2dYDQ0MH/KzoXHdNRqHiY4coZz6Kv8iK4TCT7APYUIoARkUlCat5QkCCZPoCS/ygrE6eNNpA1vY9atSyEj20XxEHjwL5v+prOhbtg8xLw+it9Lu5Sxn97f6l9s5aw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zViDK8FuxeRhRXIhpj/SCVn6kY0R8hbaF74WBTbyFgY=;
 b=buof7unWyY+mF0+gLLy8IhYHOO4eb0AFQx/jYWuN2P2Ld3MhBozCKkCDTYRMoS+82Wr8r+GRfDTfqTEMv93njyWKtsVy1RgMexHASXlG2XYBTm3Yc17kKKl6ca9hOE7TlN41mDlgjqjZMx44mwnU6GIYHqOujAlT+pkevPSH3N8PRKlPXxInNmbWXnUxWgGV2c4COEoIeiWaVM8BXr4Xjbe+uVOJqbMKD+g3JJJ/7tKPkbEbnAyMYK2CIkUidn04xLkiaL8jZtYzhw09jLBRZnaVzY8tkFrzC9Uznk5qSR3oBJBoAb8h694zb634koAUpDUb1sbl1w8hK7US8pxiZw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH v2 13/13] SUPPORT.md: write down restriction of 32-bit tool
 stacks
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
Date: Mon, 5 Jul 2021 17:18:58 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM4PR0101CA0061.eurprd01.prod.exchangelabs.com
 (2603:10a6:200:41::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c8810012-ea42-4dbd-1f88-08d93fc836f8
X-MS-TrafficTypeDiagnostic: VI1PR04MB5472:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5472D36DB94CE860C6D34BB4B31C9@VI1PR04MB5472.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	HICbAzkd9BhTrQHoTbg/+Yqh4t12j96rpBo0dtHhkTA0zvf7O/VZRG6dwLppYNAUH8V9bQL9k2Zbb7DdzpsKZKd3OJAlNstmJWRATSF0lgdt/pT6u1/3HW4SR/K/lP8TbCGbMnWgD//jKGUpmvOMT3T4/4mEBbxUcJ7Pg90imqfyRMujaBOZT6SDtbKbhjnzl4cJfmFIsJcdzen4AIdCORN/aaDAdGr8kfHjWGGa3AbmQucuIhJdpUoYJsMWHtBDVTLYGxSspGOxyERFKdkd8Ds+7RpaxccMafRuMd0sKWhADp41TEXQNrMu3myBJp1xIwPd60EiKj7PgIDupHMZstyl+9CT20+qoD5w7IUMLSsW3ihScZ9esyt2hd0usb+JZ/YoqHTzu3+dzNKNWQV8rRC3Y5+4nWfIJ0zWxxIo/+SoWk8ekbS6XnHDnH+aeYE4xkxhFFRkdV0QsOxDx2U0LuIh7UoXG20r/YQpXF8tXQ9Tckp38eJKmcysIox+RljpaHkC7bcXuLZzPWzhhUABjtwKYO7LRKF9yq+mzbXE1R0yBk2aTO2rsf6rK1r8h+IO2VQAQC91pjAfrv5BRLPieOhGcqWdKR/KwuwuKWTWlIrXyeG/3THfCrM7E96rTbT8yTb2g46u0AltmnCjLhljKY0f3VAsoZZXmoxXIuBeEAb7CEbHmcGD03Uo3GdfgFAXNlq9phUq11KzhWoCPN5ojQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(376002)(366004)(396003)(39850400004)(54906003)(478600001)(6486002)(316002)(16576012)(2616005)(6916009)(8936002)(2906002)(8676002)(956004)(4326008)(5660300002)(4744005)(66946007)(86362001)(66556008)(66476007)(36756003)(38100700002)(26005)(186003)(31696002)(31686004)(16526019)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?o9G+zKCdRpcxDAsX771gTs/9LgOw3FDDzsPG2YL?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c8810012-ea42-4dbd-1f88-08d93fc836f8
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:18:59.8934
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: YuG47RgKBH+h5gDloSuD2P2kgHViTWrXg622nhILaWrT3aKBphVx1lepOga2dj7Hg1tnu7+V7wJQ9L+nLavcKA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5472

Let's try to avoid giving the impression that 32-bit tool stacks are as
capable as 64-bit ones.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Wording adjustments as per review discussion.

--- a/SUPPORT.md
+++ b/SUPPORT.md
@@ -131,6 +131,12 @@ ARM only has one guest type at the momen
 
 ## Toolstack
 
+While 32-bit builds of the tool stack are generally supported, restrictions
+apply in particular when running on top of a 64-bit hypervisor.  For example,
+very large guests aren't expected to be manageable in this case.  This includes
+guests giving the appearance of being large, by altering their own memory
+layouts.
+
 ### xl
 
     Status: Supported



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:23:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:23:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150394.278068 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QRn-0002hN-NC; Mon, 05 Jul 2021 15:23:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150394.278068; Mon, 05 Jul 2021 15:23:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QRn-0002hG-KJ; Mon, 05 Jul 2021 15:23:47 +0000
Received: by outflank-mailman (input) for mailman id 150394;
 Mon, 05 Jul 2021 15:23:45 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0QRl-0002h6-SP; Mon, 05 Jul 2021 15:23:45 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0QRl-00011P-L0; Mon, 05 Jul 2021 15:23:45 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0QRl-0003Xd-8L; Mon, 05 Jul 2021 15:23:45 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0QRl-0006Li-7q; Mon, 05 Jul 2021 15:23:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rYPwn+MNYqEzH5E5x9s6vB53JhDKaAcZ16yx5uaAx3U=; b=jaCoatLWz3QnFXDWp9Z16Dpc5v
	L7RipAPE2UIKP6URcGPP1u96Mcgqoqgw1Bb/IGKAfPXQCTxFLJ7b0R6tb+ySuY7XRV5NTraU+5GOJ
	rhraf0PyL5BEzdtXUVtQqWQZBaEvZj1j8/Xt/+uLOHW4mPi+2UuT7XyB3vI2xEyQtcf4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163306-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163306: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-multivcpu:guest-start/debian.repeat:fail:regression
    linux-linus:test-armhf-armhf-libvirt:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=a180bd1d7e16173d965b263c5a536aa40afa2a2a
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 15:23:45 +0000

flight 163306 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163306/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-xl-multivcpu 22 guest-start/debian.repeat fail REGR. vs. 152332
 test-armhf-armhf-libvirt     12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                a180bd1d7e16173d965b263c5a536aa40afa2a2a
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  338 days
Failing since        152366  2020-08-01 20:49:34 Z  337 days  576 attempts
Testing same since   163306  2021-07-05 01:56:19 Z    0 days    1 attempts

------------------------------------------------------------
6543 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                fail    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1893795 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:41:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:41:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150402.278082 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QjJ-00050U-Bg; Mon, 05 Jul 2021 15:41:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150402.278082; Mon, 05 Jul 2021 15:41:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0QjJ-00050N-8L; Mon, 05 Jul 2021 15:41:53 +0000
Received: by outflank-mailman (input) for mailman id 150402;
 Mon, 05 Jul 2021 15:41:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0QjH-00050H-3y
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:41:51 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 831114bc-dda7-11eb-844b-12813bfff9fa;
 Mon, 05 Jul 2021 15:41:49 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 831114bc-dda7-11eb-844b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625499709;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Tr66IaaFKvdb6843PQjk0JRCDkL/c0JzHSQRIzV86/g=;
  b=D4kOcBjFFIEMZQGimzUea868S+AnD5cIJwBxMxV//Gs6hCkLTjxb5P+/
   q+i53aq9wW7+DURI7vIJvgp7JK4LPetbgt4msxwjnopZeEQ3Bu7cx+TaH
   6K20iquAkSw+gkZ3R7ToaFBfjf7fkjKIyWOA9deD/Xbnxz6jza/zypy9p
   A=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: k8W6xbtHVd1YajN2LsSwuXP1Ry/QnXS4boS43LMelsSolWTRCF0hiKTm5c9FnQkJIySMNLf1P3
 qiVlZc+eq7dwERrx25QYbbsr6Y+s4b7eQ0xCaOofOhIbIOROxMURe7OZgXWBk3vMkDvkzW6y6n
 umMFKJLMzR/d07iwrqwGJ0D0zroQNMsiPvXFDpnt2rd9Jw6NUtydzfQNCxbbaZtOsKxomOH5ca
 e65UxkbZM4MIoQotklHyBMsdP2XurpIT+xRZaCxPNi6YvZ74SjmgoTAB9GSQVWmLxewETZd6DQ
 s48=
X-SBRS: 5.1
X-MesageID: 47593132
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:6iosoqMDQ4mwtMBcTwj255DYdb4zR+YMi2TDj3oBOSC9Evbow/
 xGWc5roCMdiF4qKQkdcKO7SYC9qBLnhLZICOYqTMuftWXdyQ2VxcRZnPrfKl7bam7DH4xmpN
 hdWox/DNHbBUJmtN396gWjCdosqeP3qZxA7N22pxwBIW8KGsUQiDuRSDzrbHGeLDM2QKbRf6
 Dsnfav0gDQBEj/Gf7LfEXtMdKz3uEjoKiWJSIuNloK+QOKhTOt5KXaFQKE0holUz1Jyao/6m
 Te1yj0/L+qvf2D0RnX23XI45k+orvc4+oGKN2Hj8AULjn2qgKwf4RnRpWJoTAyp4iUmTMXue
 iJjwYrOsxy73/LXmWtuhvrxizpzToo4W+K8y77vVLT5eDpTjczC85MnrtDdArIzkI8sNZ3wM
 twrgGkXtdsfEn9dOuU3amHa/nG/XDfnZJ3+9R9s1VvFa8lLJNBp40W+01YVL0aGjjh1YwhGO
 5ySOnB+fd/azqhHiPkl1gq5ObpcmU4Hx+ATERHkNeSySJqkHdwyFZd7NADn00H6Ik2R/B/lr
 T525xT5eNzp/ItHPxA7aY6MJSK41X2ME7x2bepUAXa/KJuAQOBl3e42sR2lbSXkFph9up0pH
 2LaiIqiYcIQTOZNSVVtKc7tCwlCF/NLwgF6vsuv6SR6YeMH4YCx0W4OR8Te/XJmYRVPiUtM8
 zDdK6/hJTYXD3T8VIj5XyoZ3AVEwhCbOQF/tIgH16eqMPCLYPn8uTdbfbIPbLoVTIpQHn2DH
 cPVCX6YJwo1DHqZlboxBzKH3/9cE32+px9VKDc4ugI0YAIcolBqBIch1i17tyCbTdCrqs1dk
 1jJ66PqNL7mYCSxxeB04xZAGsWMq8O2sSWb5pjn35CD6rbS8d2h+mi
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47593132"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VBFlchwK0WOftdz0YE4mNUAKcQgitlgF30s/sEOoQvDXRNGfViffGCC9VetwWAYwkQhNSEJviRCmXUbP6Srytqlq0JQXHe8vkKl6p1Yn+qCQtpWrhJ69ehK2VYjx84XUTo58inRVL7FFeZivo7SeeoZy2JxLcMwWO7w0exihE7+Vabd835ajqHXfBMm67tm5BnJD3BluMjJ8ML/xIzNbDu7h1Frpm+FEHJItHyXwZtBFezCXhBSw/LDmhpWqKYJ/1NH06Nomfe9Utd0jnxfK4r7DsA72eda39zSrz1t9omKp8sVqAYEAEdCmV68Ix7eU4bRJviB8WHHdvwMuSHnRqg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Tr66IaaFKvdb6843PQjk0JRCDkL/c0JzHSQRIzV86/g=;
 b=GxZHvKJlLjMWLxQrVu0nqPqs59H7Rj0hjPk/eaEXKmWqrymaRsaMXKcTPXh5R+HY0wy82i17i7yuzmBCNPj2ZWWESUetPOXIUQ71ivvgKILNxcHQLN/0T+ed6ruGw97rX3f5PAtOPpkQIias8W3lQhZZl23HMwSt81b1W1q8ELSJiV2IopB7Tz0NcKtJOFSvDk+hhM+lk/2AMC5h0OB43bTqFh8uVjRpmVyIz0K09KDCE2594+lj6DurF5h+QKCr9TCiI2kO8fOgL0PA77/4G6++JrmkgUNfIskUODA6G5yVb5cY4QQo/fyKlny41jDB5OOh2kMYTVZGKJOa1x9O8Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Tr66IaaFKvdb6843PQjk0JRCDkL/c0JzHSQRIzV86/g=;
 b=C9Hb9Gbs9b5Wrj9GYshtKKuuWsD07Tm3SMSmtZyIZYgmvOKRAjtsxFTx6bPomZeJ/LTqU2diP3MH2SlZ+Cre9tgv+FkAA8p62ZOtUv2Wqdd67ja6+w8H5kdcrCE1vVbuyJnN+/vSmxCTnVphEd5EYEb3bm4F+LpuspqiKAuyQwM=
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>, Juergen Gross <jgross@suse.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
Message-ID: <c5e7aa43-1023-ff6f-e882-0ced8af81613@citrix.com>
Date: Mon, 5 Jul 2021 16:41:38 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0367.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18e::12) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 421f6dee-3b72-45e9-9a2a-08d93fcb64c5
X-MS-TrafficTypeDiagnostic: BY5PR03MB4999:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BY5PR03MB49995E81DD9686051F5F0127BA1C9@BY5PR03MB4999.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Ts3Md0cwVRIhkahzMbHyWNdJdIz/9LTWi+mO5HdIBM/iyvQyFnsJm/P5yElBsVl6+F6XwPYi4XsvaxMxe8Cb+0s+2usAzd/3m3tAfFz1T0lQ/rWlMtcvWO91pCvEEfX2WUnMy68GIRyGTY2svDdJzX0WDLIU+Jw12V8Q/bVLM+tenJjGc4MelwvkYIrgEqy5FzfIr4VfUVmrNb65fqWmUeydfu4YTXr5CwoU+glmATMoAHU2gA9+e1buOwqNBXP6NTMZI5L6xduX76rwJ4OA8mmQ+D7xEXacwiVYI1gdxz9KZR9C7C3+i4CpoA7Ln0uhKtp0321gt8D+kxYSER8dIGlFpIJnC5BZ/TEMy/cI7dxwh8hxg3kRar0TC4xnuMb96BDs6q4c/xpVRYMu6wHIGHA/F2DgjiPVTSwavLe/EzPti4/mRlVXeWfZbmS4IPxgnksQ5xDowUCfWq8XCXDzEgp2XJmMHj1ASIQlcczrShKVYlo1unKsCeWNYFz3MdVRP0/ayDdyMLsRRw49rVkALb+53XVgFyRPmEe0M2yesOJQZ43hhbmjRUtcGZuOo2A/4eiWQStc2LZYn5syZbtTKNz8EYA6qWuKwUpqS9ajzrdu90zekwIAuDvG6Wqxk+hYm4GJNzAe9dbpMpA7ZarwJsI7TLj1vYMlavkwsQRKoNhE0CU9CgNaZyPK5Ojn4+poFgUc2MgrAPkNtYxblfL6efGAbTfq4+X4QIqtFdtaBgLtwELJOU50HhQodnzulzkh
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39860400002)(136003)(366004)(396003)(346002)(16576012)(31696002)(2616005)(2906002)(16526019)(36756003)(54906003)(8936002)(956004)(53546011)(4326008)(8676002)(86362001)(110136005)(31686004)(6486002)(83380400001)(316002)(38100700002)(186003)(66946007)(5660300002)(66556008)(26005)(478600001)(6666004)(66476007)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 421f6dee-3b72-45e9-9a2a-08d93fcb64c5
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:41:45.4136
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 1em0FHe2W8SB3SULJ7eABCyn1ptPRvTMEZ6AUdHso0y9Nr+ixgNQuAiPBP7QqLpgHHFma9OcPJvGrzbzLyDDVXXQ8+vmEm1JlPj1PTjlkQs=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB4999
X-OriginatorOrg: citrix.com

On 05/07/2021 16:13, Jan Beulich wrote:
> In send_memory_live() the precise value the dirty_count struct field
> gets initialized to doesn't matter much (apart from the triggering of
> the log message in send_dirty_pages(), see below), but it is important
> that it not be zero on the first iteration (or else send_dirty_pages()
> won't get called at all). Saturate the initializer value at the maximum
> value the field can hold.

I've already explained why this is broken...

> While there also initialize struct precopy_stats' respective field to a
> more sane value: We don't really know how many dirty pages there are at
> that point.
>
> In suspend_and_send_dirty() and verify_frames() the local variables
> don't need initializing at all, as they're only an output from the
> hypercall which gets invoked first thing.
>
> In send_checkpoint_dirty_pfn_list() the local variable can be dropped
> altogether: It's optional to xc_logdirty_control() and not used anywhere
> else.

... and why this is broken particularly in the context of a later
change, and ...

>
> Note that in case the clipping actually takes effect, the "Bitmap
> contained more entries than expected..." log message will trigger. This
> being just an informational message, I don't think this is overly
> concerning.

... why this isn't ok.

Why do I bother wasting my time reviewing patches in the first place.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:47:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:47:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150408.278093 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Qp2-0005iT-20; Mon, 05 Jul 2021 15:47:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150408.278093; Mon, 05 Jul 2021 15:47:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Qp1-0005iM-VA; Mon, 05 Jul 2021 15:47:47 +0000
Received: by outflank-mailman (input) for mailman id 150408;
 Mon, 05 Jul 2021 15:47:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Qp1-0005iG-7e
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:47:47 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5764c47a-dda8-11eb-844c-12813bfff9fa;
 Mon, 05 Jul 2021 15:47:46 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5764c47a-dda8-11eb-844c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625500066;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=/dmB+97IHpmQpJevm3xwUDf/YzGHL/Nm7Ividwuzmts=;
  b=ZMb8gSWqig1VybgE7kWT9LiEEDBN6FTUlXSiAxEHkfGHcpRki6P3oJvw
   k0monJsYcsXwdgSvmjSCJh7dLWd7TMISRg7/soT88w0ePGG9pHix2Xbsw
   9HyHkJLx0XvBtz2Mvy7LEjYJbf6njk/GZjLUn2j5dgRW2qIMMFsQW66MB
   I=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: afdDIlDQUrZbdpWWt9ZkSZRAeBgbbkmU+WDBezKWQ8aQsBr8K0foFql9DghUHT1uPQAk1yDk5s
 bSAFJNa/b03/ZGGlk9On+9cI3OJYrcCOeByOQ+U7JgAiW3hmOt3wx0qT3S6vubOLk5Nxz4X9mL
 77/kmMyfGwi3r5iky8f8UCsLctqcQwPPCCw/2zmxiv8/e0ujVJht2w8scwumFqFYMfyXblzNDE
 xqd/wS2bwDZ8XnOdgfU2/K4oeEeXM2FCC2Y2ID4j6nak0yYdKUpOJyNVd3rQ/vZxa+27coyquy
 Ej4=
X-SBRS: 5.1
X-MesageID: 47593607
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:o6R9aK9iYQYtcKSmDJpuk+AcI+orL9Y04lQ7vn2ZKSY5TiX4rb
 HKoB1/73XJYVkqN03I9ervBEDiewK/yXcW2+ks1N6ZNWGLhILBFupfBODZsl7d8kPFl9K01c
 1bAtJD4N+bNykGsS4tijPIb+rJw7O8gd+Vbf+19QYIcenzAZsQlzuQDGygYypLbTgDP7UVPr
 yG6PFKojKxEE5nFfhSVhE+Lo7+T8SgruOeXSI7
X-IronPort-AV: E=Sophos;i="5.83,325,1616472000"; 
   d="scan'208";a="47593607"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JsXn1zkS16V3rWhffDK8FS59tMcyZAH+zAFnYfFiS49Uy/rht5WoSWE9jdqXo+dULd9jgoVIjT5yVeeKRZxnXkCT2GqjdIRHPKXqO+0o1tfWfddouv2O3VUgPoYf5WhyScn6rORDcwZf9w6+/muYtihrz4GYuuBFXNl9I2qoruyax/fOevVjt0JIuZw1eydp6J1JBG2wxqHrpLRF1tVt6vMODZWm6MA7Yj/dpH+j6HOD3HDoxncz65RVdzBx7XG7rCUB6bw0aKECR0vWohdvjEcm3uhtlAiCJq5Vj0I+efw+czVZXbqZsQsXI0v/MITtRfsFFp/5GreD5bUPbK1Llw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/dmB+97IHpmQpJevm3xwUDf/YzGHL/Nm7Ividwuzmts=;
 b=Dekkn/7N558gEjQlmPogXLHo0o8+KR25QsV8YjfH0gzR6ry2qFGwXGHey7OzWxfwHqHLRYVa4GVNmNHNhP047goWLGp2xsbDvF8GYVbdaJ98fSm/Je1DrrITSpftFcaLApKPP7UW4RZnqvF974GWwp+vlCqkqIFlIUwJmQSKhhKOlCyNQSEc86Poe/2R6uUY4BxdvHD8SWA1H76kfdoV7Zlk72/KMAejecfhTVusJ3On+E1xaqibVSTTYSBDb0dSmu6Qi93v9uMdGnWm3LEqs9RpjjlrMhLwtZEIgcAymnDq1jH+46XJWi1ldFDiwloHKrjJiekdYfUNqOyerCNohA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/dmB+97IHpmQpJevm3xwUDf/YzGHL/Nm7Ividwuzmts=;
 b=obzLFf36eMY/5GB6Qg18N53BIMSaByTDp/tpjr09mgEKRTLLgZ+yBzC5wT7Cjsh1WQNDCbH5SXOI1Rw4pkbJNOJ/zz3tJx0M2pwS0FIAwL2pBJjcWxrDbGKsI9PTmhOYZ7f191r3JJcvzNmRTysZKInvHmHygzlQBzzLezs/9QM=
Subject: Re: [PATCH v2 10/13] libxc: simplify HYPERCALL_BUFFER()
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <2d8b0f54-3045-f881-4705-28317e5ab509@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <7734681a-601d-b81b-5ebd-a0838512d021@citrix.com>
Date: Mon, 5 Jul 2021 16:47:31 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <2d8b0f54-3045-f881-4705-28317e5ab509@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0034.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:61::22) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 077a73fd-325a-40d2-826b-08d93fcc3770
X-MS-TrafficTypeDiagnostic: BYAPR03MB3494:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB349471A575E996D0CEE66E4DBA1C9@BYAPR03MB3494.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: GnGrUcoudTu9i0VlxIHdrHxsbMpZ45IqIT3sYnqp7pgIbgUWZWI1/hSqviU8wV6XHEL3nkoCNn6pMzZV3zfqaQ4R0sgqNM/0HMohPwDVRQslexBRaC5gOFTf9vXJ8ar72g6Z4Xkm3Ew7B701SPyt2ofjuDzaURjFn8CnVvhoZfNBQHmaRJLo3T0PQrjBUZB4xmkWpJJ/zJz2El1+4ruIefrsTKBdtbV29fJZml4Nq8PzhnPMzz+jmkXaK6Rveuj1lIffxae1Cgs6OggLxndS/7JuakegI1tXZ54TW8mgCeRBsBr0RjnvpSrPW02AF5Gi2dTk6firZ4yGpDPqu8amEgej+fud5jsSqM/OnyzGeNLmoj6OLYAdjrjq0dm3/Nq1QtI8K0vzB6xfFJRLJI3lu2RHHj9YUgtSLUplcHpp5o5G8llk4USj/Rx/hLhK0aduVDF5CW/dV/w2XaTU37WLl0De/dBEQmlwaCFkMQgrW2GG+wD+nxUw7RNpQoCVGRP/kWLfWQUZvb5si28IC9FKJUJOPRnHspmJ4yGdBg5JJrap5YPbYBq+mktlQUSRmsqPcoyZLEV/9j1etWg1o4knEOGp/KrTB8LjUIzPUjmk5XOMEXleIrg3zomyUXAAeFhI6Kd4k5edx0pQOSjCmogHS1Dynh36FYrlDcKVBsVnVkun9y/l7o8yzbrkT/VtATw2c0detRhptFm1oWNKkO6Es5ue7MB3zFtUWo+D3CbIPLE=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(366004)(346002)(396003)(376002)(8676002)(53546011)(86362001)(26005)(8936002)(4744005)(478600001)(6486002)(31686004)(36756003)(16576012)(316002)(83380400001)(6666004)(956004)(2616005)(4326008)(186003)(110136005)(38100700002)(2906002)(16526019)(5660300002)(31696002)(66556008)(54906003)(66476007)(66946007)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?GBI4nbAO/FsDpeY5/KDjU2A0bpauDIlYiTGyf87?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 077a73fd-325a-40d2-826b-08d93fcc3770
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:47:38.8952
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: mxKZkK5hhK7exCLYV8kY6UsvVZ5nbnVeanmGT5uDX6oYU36DWbJw4QYJn5/eItpxTacCuKju4NCtCjsw1CvkNmvsq74I0TxGSe6VZEHPVHA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3494
X-OriginatorOrg: citrix.com

On 05/07/2021 16:16, Jan Beulich wrote:
> _hcbuf_buf1 has been there only for a pointer comparison to validate
> type compatibility. The same can be achieved by not using typeof() on
> the definition of what so far was _hcbuf_buf2, as the initializer has
> to also be type-compatible. Drop _hcbuf_buf1 and the comaprison;
> rename _hcbuf_buf2.
>
> Since we're already using compiler extensions here, don't be shy and
> also omit the middle operand of the involved ?: operator.
>
> Bring line continuation character placement in line with that of
> related macros.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 15:53:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 15:53:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150414.278103 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Qup-00076m-Ne; Mon, 05 Jul 2021 15:53:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150414.278103; Mon, 05 Jul 2021 15:53:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Qup-00076f-Kd; Mon, 05 Jul 2021 15:53:47 +0000
Received: by outflank-mailman (input) for mailman id 150414;
 Mon, 05 Jul 2021 15:53:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0Quo-00076Z-38
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 15:53:46 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2d3d5062-dda9-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 15:53:45 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2106.outbound.protection.outlook.com [104.47.17.106])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-3-I3tjqyC7P4STn-xIBpJpEA-2; Mon, 05 Jul 2021 17:53:43 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Mon, 5 Jul
 2021 15:53:39 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 15:53:39 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR0701CA0005.eurprd07.prod.outlook.com (2603:10a6:200:42::15) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.8 via Frontend
 Transport; Mon, 5 Jul 2021 15:53:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2d3d5062-dda9-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625500424;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=XMrh96RmeswQsPrR2RKZrJGeqB8KH5zr8TutCOxvf3E=;
	b=aQMgEzzJSbFCfnZSIKeiEPhbCd5paf9yIfXG4gQb50wJoIUiD8dHIMJi9A3JPxhZ0G9ljl
	i5AyY//nzxAGzcZmVLqB9vk5NsLG3Zk1qQDqahJqtBzRWPfRlebSfwpnMtmogE0GNRUpgL
	DYGCF1cjTn0DSHe7NFHMFCrgPYDddMM=
X-MC-Unique: I3tjqyC7P4STn-xIBpJpEA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=nUz3gEoDMlMocxXEuudAq3rE0BZ3opaipj0d1WZLeM5704PCukj0VqPQztmJJ9Obr1QqYNP/M8XcWjvvkKP9471vwpn8eY3ZynqR+U70xC54M66QSpU7gN5yFpNdtfWnwW/lMc23sWTzegA1ZxA3kW+WG0aKf1QGHZMSGQvueO/I5wFgjSaGxkJ3+a4phi4nh3uVw7Cd/+6lxl0kjM9oyqfNyRzS1ycelntRXSoRrxtXuXDg6HBSC652xv4Qf3+eEr0SXnQqrWB7yi//5fD5KuYrNzwGvlnqgmhKIaxcryigEwD757c5GiR9DrhghMdXEd6f5TIlGCOxNWopz7o0LA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=XMrh96RmeswQsPrR2RKZrJGeqB8KH5zr8TutCOxvf3E=;
 b=ZyXqQpZJonf88eW2yprmRdr+Nzp9yfnQuciM8Jq/4HdOE/iVR31cG0FLI1tcbOHTYTK+BZuIuNkD1jD6cW4KxeanpJ85k2kH05uAXpb0o7M3m4fya8tDqDDYWaq3AI3zOcaiLe44FcDYMF8BN1k3ZHpvUaEe8Xr15d+LBL3rQ6MBB3NqImGrKvZq0VKGxt5IC3vBAz8MEg1S7r0p617lxnc0hYInJ2OUXmnLjcXnxIDvkumRQJTtTBPLMfi9pKbwTZQreeCCwFZOu/KRNRs60PXlf//jksI6vGxHuph6S15Xm5dw8WbZOteSpASGA0HkSNWhu82lyiHLzfskZ5SV9A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Juergen Gross <jgross@suse.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
 <c5e7aa43-1023-ff6f-e882-0ced8af81613@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <4973b974-146a-3d14-4b5c-818d76f2c801@suse.com>
Date: Mon, 5 Jul 2021 17:53:37 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <c5e7aa43-1023-ff6f-e882-0ced8af81613@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM4PR0701CA0005.eurprd07.prod.outlook.com
 (2603:10a6:200:42::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a0b4296f-5c34-4a93-dbbb-08d93fcd0e7e
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2608A5E1A2E6AB2B6B417E81B31C9@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	n5sU9PjPyxDB6hvOV3it3ED58ltozh7XPQ1a50OmgMDjtyGCJIVeyGZSih1bEAgfB7WKAUNmaqlj24gFHFMDXWCMm2ACo4B0dGm+sOLuuL6gFXnDDjibsGYiiJ2auJFWdRcTfPUPtcD3376GxV+ZZHHEqJcTQuMQyH5Ele4g3kTAFTqIcTF2C99h09W6A2/KinilaZoHvZ+A+2eZd5ecC3apzqPczDGQgm5HdmjJSy9XNsF2I49DcNe02sOVm7+VVUVig8uaqlB3t5W7nYVJ6z4e3wupEmywzca+zg+On6M1AqSLMQJPVUaZNOpiiAtuTnrQ2+I6FkTJ95MEBlVbsT56ZPFdug6cEA2mVxCZFCPBm0ARJuzfV+maWfGPTMD2f2Oauo8fIBcNRbLNyBKE7hHlir9vTWtbNBfDStwg5vTYY1NkdLhr80cZiEbPaky+7rj9pfWRs1V+NkxRKMnE9ezTH1o9JtVXAW0a4jChAtbvQvvoEYOL0utlJePQuSnvz/dopcJZ12+kpGs1Cipvnf1bcBRKqCcQ0a78cj61AZwGiR/oEGVhZl8vm03OSFtEHPJEw+3dzzF3ESQNR5sf5ZkFCro4p1I3IKM66OT1j+htQhGsh9fRsxeYM4Z9P8RMWQDu5EkiYzbz+OfKa89tVCcjrE6rWuMJYRvotNe9DY/5Co61+afsFe3jc1sA1q8mAj8LImS14PsoZDHW7O2wtrwODFjfnmaarQuHn7td6k+aK58p6nzhTEBCBrQrxMOl
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(39860400002)(376002)(136003)(396003)(4326008)(54906003)(36756003)(316002)(8676002)(8936002)(6916009)(26005)(2906002)(186003)(66476007)(66556008)(16576012)(16526019)(66946007)(38100700002)(53546011)(31686004)(83380400001)(478600001)(956004)(2616005)(31696002)(86362001)(6486002)(5660300002)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a0b4296f-5c34-4a93-dbbb-08d93fcd0e7e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 15:53:39.4905
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: SPNlb+hnhkE1LkYvD2ujh1BlvF37tGuYHUEDHi9axiK5OTtNZuPNmSstlkfeJzRXR9cLIq34MKv7onPiYKoevg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

On 05.07.2021 17:41, Andrew Cooper wrote:
> On 05/07/2021 16:13, Jan Beulich wrote:
>> In send_memory_live() the precise value the dirty_count struct field
>> gets initialized to doesn't matter much (apart from the triggering of
>> the log message in send_dirty_pages(), see below), but it is important
>> that it not be zero on the first iteration (or else send_dirty_pages()
>> won't get called at all). Saturate the initializer value at the maximum
>> value the field can hold.
> 
> I've already explained why this is broken...
> 
>> While there also initialize struct precopy_stats' respective field to a
>> more sane value: We don't really know how many dirty pages there are at
>> that point.
>>
>> In suspend_and_send_dirty() and verify_frames() the local variables
>> don't need initializing at all, as they're only an output from the
>> hypercall which gets invoked first thing.
>>
>> In send_checkpoint_dirty_pfn_list() the local variable can be dropped
>> altogether: It's optional to xc_logdirty_control() and not used anywhere
>> else.
> 
> ... and why this is broken particularly in the context of a later
> change, and ...
> 
>>
>> Note that in case the clipping actually takes effect, the "Bitmap
>> contained more entries than expected..." log message will trigger. This
>> being just an informational message, I don't think this is overly
>> concerning.
> 
> ... why this isn't ok.
> 
> Why do I bother wasting my time reviewing patches in the first place.

I'm sorry Andrew, but no. I could as well reply "Why do I bother
replying to your review comments?" You did say

"I don't follow.  Migration would be extremely broken if the first
 iteration didn't work correctly, so something else is going on here."

which I replied to:

"As per the title we're talking about overflow situation here. In particular
 the field did end up zero when ctx->save.p2m_size was 0x100000000. I'm not
 claiming in any way that the first iteration would generally not work."

and then nothing else came back from you. I gave it a couple of
days, taking silence as indication that my reply was satisfactory.

Similarly e.g. for you saying

"This is an external interface, and I'm not sure it will tolerate finding
 more than p2m_size allegedly dirty."

with my reply

"But you do realize that a few lines down from here there already was

        policy_stats->dirty_count   = -1;

 ? Or are you trying to tell me that -1 (documented as indicating
 "unknown") is okay on subsequent iterations, but not on the first one?
 That's not being said anywhere ..."

If you expect me to adjust patches rather then just replying verbally,
you won't get around replying back when you get verbal feedback.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:04:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:04:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150421.278115 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R4p-0000j7-Px; Mon, 05 Jul 2021 16:04:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150421.278115; Mon, 05 Jul 2021 16:04:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R4p-0000j0-Mn; Mon, 05 Jul 2021 16:04:07 +0000
Received: by outflank-mailman (input) for mailman id 150421;
 Mon, 05 Jul 2021 16:04:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R4o-0000iu-LU
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:04:06 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9e9c086a-ddaa-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:04:04 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2059.outbound.protection.outlook.com [104.47.14.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-7-T5HHFSckM6eaWkUkXFMvtw-1;
 Mon, 05 Jul 2021 18:04:02 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4941.eurprd04.prod.outlook.com (2603:10a6:803:5a::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Mon, 5 Jul
 2021 16:04:01 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:04:01 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0050.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.7 via Frontend Transport; Mon, 5 Jul 2021 16:04:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9e9c086a-ddaa-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501043;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=M3Ld5qWJYrn3TBkJ6YztOyq6WZrcRebFYQO4d/wCnrg=;
	b=HUApSqK4NMDwlmCZeVscT1Ai9LKJVlllCLKnAiJB6pX0VEK1FAkRqKXGblIel7EKRu0nek
	1a/2xpFRnbHfyiKuoy6p69SrE877o7AHnkcn1Y2pezjVoz8dkOBmhuHsuyEryo/rwAmwWz
	Bo73bV+sgGu2JIB00KoccEdFSpF2qt0=
X-MC-Unique: T5HHFSckM6eaWkUkXFMvtw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=medWGvEGuXDEwZ/ko0sb8NqLayJ1NLtVjoIyexdXPKcVZBoiTMJX+KDRrnUb9C4+7KiVz/IYEhwNOAloSrJFAJIEYU3hdtZ9+8ZBKPpS0hrmYMP4l5oezwO2j2lyJvBPyNin3E1BvMBefBRjlC8H5/byKk55RRviUm4Lr8TXW1/PaLXv92HjF/58X4yy6XmlG3AN/85bxX/+oV2gsHveVB/8bq8ZT1hapOJ4HxBO9M3LMXYvY8r25pE2Wg+Hrsv2YHtBs/3ACMP/d63rMqGjLhq7Bb+Eg0mKEPZxKS8oohmumqpqPGhbU6dLT/EUgT47coQJLlGSb64TlIkMohKtMg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M3Ld5qWJYrn3TBkJ6YztOyq6WZrcRebFYQO4d/wCnrg=;
 b=eouPJaA9JOTfzHT/+Zbky8jqEFMRH59qoBsQ4CZk6IMumNM0OtRqBJ9mxwJ7lVll9m9dbmrAtmu5YvvFXHRF/cifmJ+XN0vBsWGxuSgpsak3NDlYEpfCLoWEppKKG+wB9j2bJliWAxU8tu07hO/92v4KWA9D7y5Y/oLjTvniE731BvqGejuVvbLrzpaZvFZC7P3Anc/vDKqf9ZnJxlImij7fZhwIN6L1qkRot8ythHNatLBbZA48yE3z9bJ/0d6N7OsPcRiQc5usyv9J7y8d8zRbDtt1Zucrp2MNnW5Ht/BQEpxMEYPAHZpbDMjByO2My/1qyjanoo5nhhDjwGTDUg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH 00/16] x86/mm: large parts of P2M code and struct p2m_domain
 are HVM-only
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Message-ID: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Date: Mon, 5 Jul 2021 18:03:59 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR0P281CA0050.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:48::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 28d3e679-1d67-465e-7495-08d93fce8102
X-MS-TrafficTypeDiagnostic: VI1PR04MB4941:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB494143290B87F338AF3C3706B31C9@VI1PR04MB4941.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	0fsdkfOVpFlGrtjq+C0fo3NPMhqlNmQrD+60+yQ8gIjDOWtbFTAz1apoWvXgC+MYwaqMQ56mYGZCC49Rwxo7C0719qM7wR3IheCZJrOALkJX9OTDRv7lTTMBubvliZKhpW5qmojiriV4K4Jns4M7fF4d+UPUfb/IHqtlTW8+xRk6q3LnSMeOfIwOHbJDIkdyq6xCvvPsQvp56vbp8ZwMsiL+qoHLsakncPMYOlNI3agWIYvWtXUzjHzqLTcjw3+HudccXoibKOM/BXFeSOFPeLupjb/1nmQKegYWFze4/VAIS9LtsRX28vo1Hc3AxU7O0WrRmhXia16p0Ak+vdU0+szxUgXddI+YzPCzsFNfmDgFKzbBmLWwJp06xNeuhoxGEgs/2k+Jo/8D54sKeBrS+thMxo9HMJkyLuzC9UcrIldDw5cX5kLh72/EPqjd1aCB7TIGImy4MqYxgv5q24S4hAJoW298XV9GqHmOQiRYDqaPqtK8fySB66pZw+bW6hKbi2PcElKYcYbFQ1hs4B3ivhCU8OBM5yIaGNjNBeuPisrVllVW7KUJt9t+j54GW/UWS2KamKuzhFK0M+w6h3UbjF9evRTFGIK5qvaADRWBhICp0XWtA5Pc7OZkbaWoPPLAdVyo1wA7MPT1FpuRivOguivKZ67+C6wCg5WCBjNPUMkUrOCvHifAJgnO+Oc11pyLWaXxtjvEh7ENalKYC6aGq4kgZnjvJK4WnmusJ903mNY=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(346002)(376002)(366004)(39860400002)(8676002)(6916009)(86362001)(38100700002)(5660300002)(83380400001)(66556008)(66946007)(31696002)(8936002)(66476007)(4326008)(478600001)(6486002)(16576012)(16526019)(2906002)(31686004)(36756003)(54906003)(2616005)(186003)(26005)(956004)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 28d3e679-1d67-465e-7495-08d93fce8102
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:04:01.1089
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: O/UnYyytdcCPRqW0WL61De/7gdBnFYMelpp/M6BHXmYxTkhxvhAJyjhq4jAotVM6FAftYi1/YqY0s2MV0r3UPw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4941

The primary goal of this series is to leave p2m.c with, as its leading
comment suggests, just code for "physical-to-machine mappings for
automatically-translated domains". This requires splitting a few
functions, with their non-HVM parts moved elsewhere.

01: x86/P2M: rename p2m_remove_page()
02: x86/P2M: introduce p2m_{add,remove}_page()
03: x86/P2M: drop a few CONFIG_HVM
04: x86/P2M: move map_domain_gfn() (again)
05: x86/mm: move guest_physmap_{add,remove}_page()
06: x86/mm: split set_identity_p2m_entry() into PV and HVM parts
07: x86/P2M: p2m_{alloc,free}_ptp() and p2m_alloc_table() are HVM-only
08: x86/P2M: PoD, altp2m, and nested-p2m are HVM-only
09: x86/P2M: split out init/teardown functions
10: x86/P2M: p2m_get_page_from_gfn() is HVM-only
11: x86/P2M: derive a HVM-only variant from __get_gfn_type_access()
12: x86/p2m: re-arrange {,__}put_gfn()
13: shr_pages field is MEM_SHARING-only
14: paged_pages field is MEM_PAGING-only
15: x86/P2M: p2m.c is HVM-only
16: x86/P2M: the majority for struct p2m_domain's fields are HVM-only

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:05:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:05:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150426.278126 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R60-0001It-5l; Mon, 05 Jul 2021 16:05:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150426.278126; Mon, 05 Jul 2021 16:05:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R60-0001Im-1m; Mon, 05 Jul 2021 16:05:20 +0000
Received: by outflank-mailman (input) for mailman id 150426;
 Mon, 05 Jul 2021 16:05:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R5y-0001IU-Du
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:05:18 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5d7e6a89-a51e-4d2d-a419-9c800ad72d8e;
 Mon, 05 Jul 2021 16:05:17 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2057.outbound.protection.outlook.com [104.47.5.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-17-6sElj5BnPXCaVgyhWg-Gxg-1; Mon, 05 Jul 2021 18:05:15 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6861.eurprd04.prod.outlook.com (2603:10a6:803:13c::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 16:05:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:05:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2PR09CA0011.eurprd09.prod.outlook.com (2603:10a6:101:16::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:05:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5d7e6a89-a51e-4d2d-a419-9c800ad72d8e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501116;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=F0A/ANLuNIw6k0OGXwTfU+Vgzp6qPAkINXzaLfPj+SI=;
	b=YKw6VL2XXp1vrd7ty6Z/oKq1SbIghON13LSbb4E499go0MudowJticfaR70aXuFqsxuspv
	Acisq369jsuvKUJMpDFKZQ8n4H77IzxEBG+tog6sXYRWPk1yKWHLvBUHo8yYE4chuFgawD
	mPy1SJweqorelJCifBizxWRsR7Rf4Wc=
X-MC-Unique: 6sElj5BnPXCaVgyhWg-Gxg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ufuqa9mZovwBxG3PC5NdcZbICFE/eOGMucY7XPKLQbUMvsjY/v4vx9WuMVL9mEU1LNKLHz8aApZhc1uZX40bV7lRTnxtM4yHV+irzpTPJoB2+vgIJdVqnwaBJJdWyiJZO261QWirEVLPIDoRwC6aMbvGr3nm/N53vd3Cn4Erwwa/DIHIHh1cCMH9cIDUMDFdXJXf2WbxC+um3PWH/4FMjulQF0zVBdVg7Ot9ijzem9nsZyb2u+bxajsTbeyP+M3LbnBQkUPat5X4pgz0quGIXW25l7HxaEQgJWzaCfuBsvGdm7bJwSestZ/Fmue10HufXGX7b3U1rsEEepc3RSFITA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=F0A/ANLuNIw6k0OGXwTfU+Vgzp6qPAkINXzaLfPj+SI=;
 b=LJD7gGJlHJYqGTFjqZH0uKqmF5WiX1nHImCRaJK/r0e4uXHCbjPaOh4hUXNu4gSO5EMia4ybG8HvcUHVSUI6xpAgU8qlzwZNVVaS3043zZrkskwB071NTfiibQok/jG4CXMkimXNkZ2UKOf4tkNh8DV4FeIyyjUHhqYWg5sJ4R6xoTPHlb8lBrlgfj+dTPdGXGbnEdTJFNygrVEX+nm63dolxDJZHk6qWeEjOcUwD0t/9aCgHrDmiKvB+dca3nBgIIy4wXINuPjH5g1gkDd8jWNSPB/jvrD4bu0/FQIqYz4sliYd3ICOISJj57RhD03OToCsfqXq0ysApBj7bwQWxg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 00/16] x86/mm: large parts of P2M code and struct
 p2m_domain are HVM-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <4dc442a1-9533-3e77-131a-563af5246926@suse.com>
Date: Mon, 5 Jul 2021 18:05:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2PR09CA0011.eurprd09.prod.outlook.com
 (2603:10a6:101:16::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 03275861-1a0c-41eb-17ff-08d93fceabfa
X-MS-TrafficTypeDiagnostic: VI1PR04MB6861:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB6861AA52472521AA7BF01605B31C9@VI1PR04MB6861.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	75l1cdbE9/cEvCOqscDyO4KjTxuiEjsldagQB59Aso+wa0b1vb4v+ozHzjHQfY9MAUP7SPJMWQkrs0P8s04E/xL0gndrfzaGMgSB97JmrXL98ao2L7sGZXZFxzMJkZ6agsPLEonCcZNALOUCm5RirmjNVBZRj56GWAlWpsmMC/X3W7xTvi20wuIjqM2R4YtSif+w3VfpD02c9g7Pz8kW3g7HRN7q5r6fVjUzYnmvGDQNSpkYukRzmdi0dDWsD3aNns5K/PPvgT9yo0Mb3Eb1LIZeRh/vW/SeCgksWbJa7XMsMgU3bGQdumtmynZHG/jEsXkytqlockFIA/VeuM6GdWJoXDJxlG8/22AwA95lkDI4bRS1zjy8/NL8StaJw3hqKC+KSRc8TS10235eXlUbRpwsXEopYAt0JR6xxTcHwKGl5zQ3fulgU/KZCHws4Q7wcZ29BnQvK3+XxRN2+7u6DXOE7tgQbWBnx7yQlz6DotwDHPDCG5vZcmw96or02JC7K1Gdc3166/Sthcl8tgHVyR65l/yyfrxGLrGIYBm3bfhJyL5nQUPiX7ddzm6Jvxb3mZ/Bniov3lsPP9xBJWxzZ/+ioXSOk3Wu87nY2SNIPr3ND+xVqbk2IOPK4izV5bu+OU+uxMPe2MMFZAblHjVWIlIg4TdDivVL0nZ/5stpw2XIUnknpvWFqBU7kHKnDG1n7wSzF1TA1yNOQDjW2RquJ1E+gPf2NuAH1L4uMLppueg=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(39860400002)(136003)(346002)(396003)(66556008)(66476007)(86362001)(66946007)(5660300002)(16526019)(31696002)(31686004)(38100700002)(26005)(53546011)(36756003)(186003)(2616005)(83380400001)(54906003)(478600001)(6486002)(316002)(16576012)(956004)(4326008)(6916009)(2906002)(8936002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?VG5YanFRS2FvbkorcTBKQ1liM1B1d0ZwUjlVR01oVGQ0SjdiR3lRYzQzaVJL?=
 =?utf-8?B?YlFmbjlLU01VNllmN25ZZHVDSXpkbDB1M2F0SDRWN2U2dHduOXZiRGkxOEdD?=
 =?utf-8?B?ZVVVNkgzRnU4MXRsa3B3eEd6cEZlQmNoU0NPTldtZlY1U3p6eTM0ZThSNTBo?=
 =?utf-8?B?bDROcERHUFM2Zkxxdk4xNSt2cENucEI4UmU2K1V5dXFTMUVYTjhzSkdNdDFB?=
 =?utf-8?B?T0twUUs5SythZlcyWXU3Q0hyRU1RWG1adG5WaHQ4Y0MwNWlJUDVzZW1ZM2kr?=
 =?utf-8?B?QVZpbjFHU3lBdkNJOGR2ZDM0OTdvVC9XZE1LZFJ2T1hPaWh1Rkg1Um5JQ0lQ?=
 =?utf-8?B?N2ZpcFUvZDV3clBiSDVuL0YzdW52Z2s5ZXJvRS96NTdXcnVlOHhwUk5DSVNs?=
 =?utf-8?B?YU1VWnowdDlPNGxaQnlIdmVvdjYwTzRrNzRpWWdqVGFraUUrODY4b1lkbDY3?=
 =?utf-8?B?Yms1Z0g3K2VKemRDSGp0dm8rdXM4T2NtVnZtUVVlY0lnRmszZG90ejgvYW14?=
 =?utf-8?B?SVdCdElkTnFJVk1lN3A1VWMrVFRRZmdTR1FzaTNpbzYrRHFPRTc1a2NVdEl6?=
 =?utf-8?B?ZHVEZ1FYRHBhbUUyOGV0QXNxZ0dRRXRuemc1SlNIdWplSnIzVVJqb0FSeTNE?=
 =?utf-8?B?c3dJTXpPQWc0d2pSdmpETDlWeTQ2V3dTOTBNZjFadXJyR3Niai9NZjFGUFJs?=
 =?utf-8?B?SDJJRk9zNEpvODM5M2dkVDhFQUdsYnlZV1F3MEQ0cm8wTXdzSEdOdjd1VXFa?=
 =?utf-8?B?QlR4Ync2VEhGS1htelVoWk1UU3RhLy9uRmxNWXhBTWpNUkoyY0ZIazYvdzFT?=
 =?utf-8?B?c01VVzU2V29sQkxKQm4wRFdIRXBJc1JLTmdueWcvclZ5ZlQ1SVo4anJ2UDVw?=
 =?utf-8?B?TGpzdlNEN0tSU2l3M2JockNQeGVYYU45dVZDSm8xN0ZGd1Jkck5jbXRhc0Zw?=
 =?utf-8?B?aHpENUlQZDhDSXp6ZTIvYm14OTIrYjlnWngrTHFXMm5zaC96cWVyQ2NmYi9E?=
 =?utf-8?B?YXJLMzVPK0ErVzlQcExQZTUwdlMxeU5MbC9QcHMvYVFwOWtsQ2xIVkpxeUhG?=
 =?utf-8?B?Y2VkZS9JcWI3T3pibVBzYlh0WklENUlpVDFzR3hlVXI0d3BtcExwdDdzRnc1?=
 =?utf-8?B?ZkJGNFArdk00a2cvT3hIanFnTDJTRUtYSlZSNmFDY3Y2ZzRtTkJvb09zOTdv?=
 =?utf-8?B?a1dOYlI0L0s5MWVWN3Q1OHN4cGdVY1FWdzVPSFpjQXl5WGdhNVdNaHN6MlU0?=
 =?utf-8?B?ME8xamQ4K2RNaFlOakxqZDRXejNSME1zbVRZYjZTcWZHUU1OUVp1MUlTazBT?=
 =?utf-8?B?RzlpZTk2M2cxY2RLMHQwRk1HMFdHc1dTUVNmL3ZHdmk0MlQ0b0VMYzI2d1Yr?=
 =?utf-8?B?YjdHVzNIV0RhUnRRMVpab0NoZHhTZ3NjcjNFMGJUeEorMHBKSkhSTVk2NE9Q?=
 =?utf-8?B?a21paDlQdkdLdWZLckEzbGUxWXJJL2ZaNms3aHpsWkQxVVZ6d1ZuMDViZ1g4?=
 =?utf-8?B?YXBHcGZWb2FOMDNNdlA0NGxzcWNJT1dRWlhZYnUyc1dOaFBYY1hDMXZQb1hi?=
 =?utf-8?B?M3JsVS9vaE5Idm8zM3JDODZZMytOdm5NUVVEZ1NBTmhjMjZQUVh0cFVDVmll?=
 =?utf-8?B?TTU5a3huZmFaZk5hYzhWQ3d5b1pPMlRVeEc0Z1d0bzJxRmFuZHZtZTExVFVR?=
 =?utf-8?B?YnF0TVZuTHA4c0JJRE1temNMVzBJKzh0TmtxZE9ON0ZhWHRyZDB0R1VRMW5t?=
 =?utf-8?Q?aauu3ecT+FoKvezliWrhULgmdiFEuMXf3p+n10c?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 03275861-1a0c-41eb-17ff-08d93fceabfa
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:05:13.1812
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: pHq9p9XsoVviW2++UpIR/Np/BJXyNxp6RwuNi/UWPiSk5riP4Wro6skDr0LmWZS6beL34GyrHLj34gt8FYD8nA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6861

On 05.07.2021 18:03, Jan Beulich wrote:
> The primary goal of this series is to leave p2m.c with, as its leading
> comment suggests, just code for "physical-to-machine mappings for
> automatically-translated domains". This requires splitting a few
> functions, with their non-HVM parts moved elsewhere.

Forgot to spell out that this goes on top of "[PATCH 0/2] x86/mem-sharing:
a fix and some cleanup".

Jan

> 01: x86/P2M: rename p2m_remove_page()
> 02: x86/P2M: introduce p2m_{add,remove}_page()
> 03: x86/P2M: drop a few CONFIG_HVM
> 04: x86/P2M: move map_domain_gfn() (again)
> 05: x86/mm: move guest_physmap_{add,remove}_page()
> 06: x86/mm: split set_identity_p2m_entry() into PV and HVM parts
> 07: x86/P2M: p2m_{alloc,free}_ptp() and p2m_alloc_table() are HVM-only
> 08: x86/P2M: PoD, altp2m, and nested-p2m are HVM-only
> 09: x86/P2M: split out init/teardown functions
> 10: x86/P2M: p2m_get_page_from_gfn() is HVM-only
> 11: x86/P2M: derive a HVM-only variant from __get_gfn_type_access()
> 12: x86/p2m: re-arrange {,__}put_gfn()
> 13: shr_pages field is MEM_SHARING-only
> 14: paged_pages field is MEM_PAGING-only
> 15: x86/P2M: p2m.c is HVM-only
> 16: x86/P2M: the majority for struct p2m_domain's fields are HVM-only
> 
> Jan
> 
> 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:05:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:05:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150429.278137 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R6N-0001mK-EP; Mon, 05 Jul 2021 16:05:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150429.278137; Mon, 05 Jul 2021 16:05:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R6N-0001mD-AQ; Mon, 05 Jul 2021 16:05:43 +0000
Received: by outflank-mailman (input) for mailman id 150429;
 Mon, 05 Jul 2021 16:05:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R6M-0001lp-Nh
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:05:42 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d889d61a-ddaa-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:05:41 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2057.outbound.protection.outlook.com [104.47.5.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-4-yQsuM0daNaiDx4oti__Xcw-1;
 Mon, 05 Jul 2021 18:05:40 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6861.eurprd04.prod.outlook.com (2603:10a6:803:13c::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 16:05:38 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:05:38 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2PR09CA0021.eurprd09.prod.outlook.com (2603:10a6:101:16::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:05:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d889d61a-ddaa-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501141;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Z4RpaDeng9lWcvFK84pEeyS4Y5FUQv/CbdN7CkzTyrQ=;
	b=UwLRjneZU9oyXtDDwHpcs07V4LSnMf1PAC9Tuk0pVNzXezv8a6HgWyMwnHVYZ6ZOneKyO5
	M9NbW02SSyxzbmXqJ6pL0+Bklc1ZCCmv/p995zI0XQz7Wyz/vi6RbCqABuCToDynKrLLqJ
	JFQPWHAwK07+N7wvGMvGamxRb3YF4SQ=
X-MC-Unique: yQsuM0daNaiDx4oti__Xcw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=RaY/l8CgDOuH0MeNIF51p8UC1Tx9HVuDubP00DOtFBgbMgYjpZxd4kwV6BDfn322YXzEsexjNqdMm5XBYn/meQWoOdMs6FGsxMTm13+myZTFCviDX5FP5Avadcs5ho/+o9+Bb+yXBxsSiYynSY5P3ev7NAEkb878mDNA5ZiIHt4gLgmNzscqapfpMXjkanQjKnmjYeuw04pobKp/ai5TegCUfB/5Ovm3YT4NRK7oNMK1PzzN54JWuNaG9upIBSXtBJmbJLadAF4oBfZgNOoCdSXs+3E1FZ/UqeZ92PZsx8mME2xYgwPFu868zD4MkgPJGEcj22n7cvgFusTC0R4l9A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Z4RpaDeng9lWcvFK84pEeyS4Y5FUQv/CbdN7CkzTyrQ=;
 b=iKscJRJE5NMYs8pB1ESmibOFyxOJPuSSmfIOGrEgsT/zejvqjPITVm4FNWQOwgMjQaSuEvwzvk5aiDijctUKaM9x/aU2JnouzjLxM9lQRIVMGew3Kh4PQ8kNrtSkdXjNGTJw8IlXYtDKBvgjpyvn2UC7zu5E9ZxFl5hQimppWMtyeSriDIsU2s05DgZdtAwH9GAOEbm/33vVQ4M4P0m3eI81btLgzW/CyddjmFW0KjW5QIcov6oXqqc81MTVLf/LqqjnIj0ETVYtHGbm/ZlqUQRx6mjnp5JIU+3uKx/iYi5Y/j9RlYbXyuqfSfH4RWFCBJyeFzW3j4vNx2IqpLl3Fg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 01/16] x86/P2M: rename p2m_remove_page()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <fc340862-6842-3db4-1093-d2df44c1aa9c@suse.com>
Date: Mon, 5 Jul 2021 18:05:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2PR09CA0021.eurprd09.prod.outlook.com
 (2603:10a6:101:16::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fb5d391c-3b65-4826-aa72-08d93fcebb29
X-MS-TrafficTypeDiagnostic: VI1PR04MB6861:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB6861D44689BD7C2DF25C6661B31C9@VI1PR04MB6861.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2512;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	wEbP80NctPr/Lc+EQsq/uLfvi2N2W7lO0llBUJcQjsOdQ4lnQpnIzbq05aRRhdmHxwRoWG6KoAr+0sSSAAfsTAcjd2TVEbGmTl5xHCscrZD5RI4or8n1CKfhz0OWVzEmB3AJN5L3fIcI7U4O/3vdgNDVbA1OV/lYXrjDsb1MMXThgDC17bZFPBnNISC6Ts/tHpHfdL3uZoVeKPoL6r+AySPKa9Jlxd9IDcqDheqaCBA+zTwCUC/+2MnxqF2L/FXB3OiqqAamJCi3vWIhagzZ7D8xZ/9gYzE4pqSKbeNBSVc0BDP64UZ/SBTCv1SLPSbRRB0W5O3+E8nvOOd15XXqjAu35gW+S6oZeueqUFVV3DaXe1SFZMjDcJdL0jlhF1b/vTf1rW5enoGKfLX5dzfe6mukPWT4BB/FRPUFjnAALD6EfQz9uSUkzRGE319WKMJfauusew/xd0REeV0OSp+LipVBMwjSWAJtOtOAeir8tXAxsFz05DXXAscmSDcx0S5py0AE/tbIno7CsiU0YeZP90PQatTNjlAQbXhH4IByCYKtdy57nXxBkiLvGCRButjP/HzaCwaCl2gUwwrQAOHzfH9K8tuXMVHW/Ire/VidLUU2VEu8ewLPRAsHPOG4w8XW2DYDe0UILUXutFpJqX1u0GkBJys/4tH4gDINpBg0dX28EYTKijdhFB8R6iJkhPQVx3NOVesy8VkUdhFaqmq9f7bsN1YvaBT+zDNY9hU8c00=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(39860400002)(136003)(346002)(396003)(66556008)(66476007)(86362001)(66946007)(5660300002)(16526019)(31696002)(31686004)(38100700002)(26005)(36756003)(186003)(2616005)(83380400001)(54906003)(478600001)(6486002)(316002)(16576012)(956004)(4326008)(6916009)(2906002)(8936002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?L0VHZEwxQkZSOWZkTXo1L0MxREVJN3N6bFRsTGRqVFpNaHhESlhJMkRIUWM2?=
 =?utf-8?B?M1ZISzllWVRSaUxGZEd6YkN5Y3ptM2g0K3R1L04vcXphMVFMdzRETjJacms5?=
 =?utf-8?B?Vy9mTmNjaFgwZlJ1amhWUUN1TmJoZjkxdDZnZVkyZUxLM3U3NWlETFVIQUkx?=
 =?utf-8?B?ZGIvSjNLV0dsODlsbEN2ZWhua1ZlYU1qWERIVTB4NUV1aHZOUzZFZkI1dUxB?=
 =?utf-8?B?V2NGcnhCZVlaTmd0bUpKdCtXL01ZTjFvbDhFa2paVnhwTEE3VHEraXZadDdE?=
 =?utf-8?B?VEhoelFPMWxUK3loc1R4cVhRMUEwT2k0VWRGQnJCblhDS0o3UERoRXFjRW5r?=
 =?utf-8?B?R3ZqNUl6RU40MERNYVZTTjUxYkFUbkNCWG1EL3FWbFJkSTM4bldjRDVyYTBv?=
 =?utf-8?B?RGd2N21kVUozK1VsK2VuZHRsaHZ1OXJlOEdPcjVERTBDWnkrMzczSmJEYmlI?=
 =?utf-8?B?cjN4M2RXeXZzbmtRQ0Z3eDZFNzFuSVJhcE91M2Mwbk0vc1lkc1p4ejRQTU1Y?=
 =?utf-8?B?eTVjNTNDVG5kNkc2UnFveDBnTzlIVnpzWHhWS1ZtVHM4QTh6SlcwRlZuVnpl?=
 =?utf-8?B?cDZtL2t0OEVLWjczeElKZ1hYWFc2R1ZwdlpjY29pWTZXWUVnVHdxUkhiZDFK?=
 =?utf-8?B?QjdCMjQxNXI0eG1oc1I0WlBOMVFUOFFOQVc4M0laK0pMZHVmT1FDUWpQaFVF?=
 =?utf-8?B?bWlzWDIwMFkxV3A1V2p1NkQ3TGMrLzdHMFlGSXF5TGJwRHdqQXQ3aWp3Q05k?=
 =?utf-8?B?emJYbFJuajZCRlBpMlJNaXFicnNXRmI2c1duY3ZlOHdGckgwYjdTTlVSUUNp?=
 =?utf-8?B?clJtYUw0RytsSDQyR2d0R2VHajhEbk5CMElhejNqQ3VPd0xucXFpQTZGZDl1?=
 =?utf-8?B?em8xRDEvdnh0RGk1dTkreTB0NmU3eGowUUEzZ3pQRkF5TVBQMWMwSTZtVTNW?=
 =?utf-8?B?YnZNT0RjN2I2eGhtYnl2YkpxcEFtTG5BYTlrd3paR2hUNTZHSTY3ZjRZMngr?=
 =?utf-8?B?ai9hSC93bUNRNHNsOXpGb3daN3M4THhSV2grUXI2OXFnS2QvTEZmNCtyVnk2?=
 =?utf-8?B?TU9WUHpZaXNscitDek1DaEFkak5JbFU3WTc1cVBVSi96RUVTMDBMeHkxR1h6?=
 =?utf-8?B?Q2JTbmFaZmxBSm5GRjZGVnVuZDVHUWIwNGxuK2JrUkIyYm5QaFFRQjRDODVq?=
 =?utf-8?B?ZHBwUlVaODlrei9Zc2hDcWlQWDlpMG1WMWMvYk5wcHB4RUFrcUZsRGNzcUNG?=
 =?utf-8?B?ZER5MEFYLzBZRVRSQWhkZkVOOGE5MW5VRTh3OEVEd1NGNkEvRTkzWWYxWEpj?=
 =?utf-8?B?dUxNY3hQN1lvZGowOGZybURpNXZoc2tSMkdPQVdaK0xHMG9oZlNwd2phNWF1?=
 =?utf-8?B?ZUdqWjYwWndYalpWaUNzT1U1ckRHZTRnRjhBWGM0TXNsSE95N0s5clg3bm51?=
 =?utf-8?B?MDd6QnFDZTBEVTZaMkRadFhjdU15VEJiS1dtU3ZEdW9vVjFwb1REYjI3TUg1?=
 =?utf-8?B?dUNVSWJ1QWMyekFZL1NkckViZTR3dGVIVHZyTzFSWUdvdTdFWGhMSU4ydVBw?=
 =?utf-8?B?TnFFaTQycHBHZmY5c0NBczlpL0dJT0txSjdFQWVJUlBRaTZYQ0ZHSUhHRmRq?=
 =?utf-8?B?cEtQUHlDcEpRWDZ2eWdvci8xcU5mVGl2eiswOVpuOG53VSthQk9ZN29KTUNm?=
 =?utf-8?B?TjN3MFhwRmw3RFNOTmlXRDlRY01kQytVbSsvanAzeUtFVmVDSU9WTXZxeitv?=
 =?utf-8?Q?Gj7pVI6ufU6KDQn+Bb+uoFappoEx0gI1NcDKetV?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fb5d391c-3b65-4826-aa72-08d93fcebb29
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:05:38.6787
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: zOFLAA2APgav0dUOZlIWgUnGAelljeprCzswQbtb5GggJyAeJ7HpgkCyoGqSkyEXSQSXFaU7in2jUnEicS9oZA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6861

This is in preparation to re-using the original name.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -788,8 +788,8 @@ void p2m_final_teardown(struct domain *d
 #ifdef CONFIG_HVM
 
 static int __must_check
-p2m_remove_page(struct p2m_domain *p2m, gfn_t gfn, mfn_t mfn,
-                unsigned int page_order)
+p2m_remove_entry(struct p2m_domain *p2m, gfn_t gfn, mfn_t mfn,
+                 unsigned int page_order)
 {
     unsigned long i;
     p2m_type_t t;
@@ -840,7 +840,7 @@ guest_physmap_remove_page(struct domain
         return 0;
 
     gfn_lock(p2m, gfn, page_order);
-    rc = p2m_remove_page(p2m, gfn, mfn, page_order);
+    rc = p2m_remove_entry(p2m, gfn, mfn, page_order);
     gfn_unlock(p2m, gfn, page_order);
 
     return rc;
@@ -1009,7 +1009,7 @@ guest_physmap_add_entry(struct domain *d
                 P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n",
                           gfn_x(ogfn) , mfn_x(omfn));
                 if ( mfn_eq(omfn, mfn_add(mfn, i)) &&
-                     (rc = p2m_remove_page(p2m, ogfn, omfn, 0)) )
+                     (rc = p2m_remove_entry(p2m, ogfn, omfn, 0)) )
                     goto out;
             }
         }
@@ -2382,7 +2382,7 @@ int p2m_change_altp2m_gfn(struct domain
     {
         mfn = ap2m->get_entry(ap2m, old_gfn, &t, &a, 0, NULL, NULL);
         rc = mfn_valid(mfn)
-             ? p2m_remove_page(ap2m, old_gfn, mfn, PAGE_ORDER_4K)
+             ? p2m_remove_entry(ap2m, old_gfn, mfn, PAGE_ORDER_4K)
              : 0;
         goto out;
     }



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:06:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:06:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150437.278148 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R6w-0002VR-SG; Mon, 05 Jul 2021 16:06:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150437.278148; Mon, 05 Jul 2021 16:06:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R6w-0002VK-Ow; Mon, 05 Jul 2021 16:06:18 +0000
Received: by outflank-mailman (input) for mailman id 150437;
 Mon, 05 Jul 2021 16:06:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R6v-0002V5-0q
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:06:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ebec007c-ddaa-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:06:15 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2050.outbound.protection.outlook.com [104.47.5.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-2-HDXk1L9MPlq3KL9IcMYtuw-1;
 Mon, 05 Jul 2021 18:06:13 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6861.eurprd04.prod.outlook.com (2603:10a6:803:13c::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 16:06:12 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:06:12 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR05CA0024.eurprd05.prod.outlook.com (2603:10a6:205::37) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:06:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ebec007c-ddaa-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501174;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=5z3JNEifEYR9INV5pKVKLIur8yTgqbc2o4wLLPOUNiU=;
	b=PMISL8RLJxl9mSx7zyz3uC2T/sqNEm8Xm0bMg4eObyayEfIQULU109w7QJgUYHPwY35cYW
	jC990r3Wd02rb9TvAvHijehur1tk3+bgwqG7Q/l0nOhwfg7sZTuPSIOsf3SEm42fIz596b
	ucjS2x1MP3W/rVa0pQlfb1q8yzwtTuA=
X-MC-Unique: HDXk1L9MPlq3KL9IcMYtuw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=oLlPvQ+HIRYUxTXjhlXUl0ukKG+fB8sMimtoJkQqaEyHCLu3iD1ECHxy6fSSeK8S7zTGNccMj1XEXuSi5qADsTZBov+D4Re8cbBbi9Fe1FSfG295BKrfjQl9c3B/ZsFlM3tdb38EzfXwwGBmdeD677r3uD3xNSva0QFOXw7zh3aCV7OcpuIPYf9lHlfoTWHTxMcFxPZm5jg+MHnenBZlcRQtkJmMMroSjoFC9DRmprAakmqedUQmYIKXfziA5NX5vTcc9gK2/2QzMwKlbJsEHN4G2nRbpfwRq8wUl2I9lDpNQcOfS1YaJPA/hvqwzOHjrbFwDcVMCUhOKnwr8TAqag==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5z3JNEifEYR9INV5pKVKLIur8yTgqbc2o4wLLPOUNiU=;
 b=HV3VNfIniq9NfFQQtIGHck0NXUjoDYerOb76RLAyX47NsQYGt904MEGGjBpaO9jDURQSVea2r10pWYte+G2GFkxRjgViu45qMhLV5Na8jZE2UZWlXDsjD4B0i1Mj9zzPs1MPYwj6rg2rXKW8LaaYyYZeHjPITtjdXAC4971yDnhmJdQKsKtdFqWltzNyNYY9c6B1m80Kp412D/vRFy1rZzHxcBxzJs9Gt/IfevhNYTCcfhkNyaVihbqfp1saV9kLUJ1TTtue86JlbNTFlyIugIbWk4oi+1llfAHHSP+QqWcj1zCpnuOIxNTiDuKDg1LpkC7G9CIYj13siwia9o5fwQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 02/16] x86/P2M: introduce p2m_{add,remove}_page()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Paul Durrant <paul@xen.org>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <eaf6f63d-1122-f52d-1147-cda40a9c3387@suse.com>
Date: Mon, 5 Jul 2021 18:06:10 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM4PR05CA0024.eurprd05.prod.outlook.com (2603:10a6:205::37)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5208b57b-dd18-49c5-0177-08d93fcecefc
X-MS-TrafficTypeDiagnostic: VI1PR04MB6861:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB68617EEF3B04191B3467038EB31C9@VI1PR04MB6861.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	TTZeWjlKy5xhkYWe/Qki0cNsCx0sYsDZju2l7f78TkKSTL5nzqWORgE1yMyAXjn454IS1XzIUy9/7dnde0P1Z5wuQTHYqFvjy29ViwrokkRyGHjYZIHQFUABDCR1wdmXoG1ya6+D/rZrBR8eBNkajvREYE+YCBEq3kXU7ZgeFE21RsPWkddKt0yWVkXPO4uI9ZNwFhZmPg052hffn0twDw2B46fs4LoCFYKHwb36h7sH94+wi2R7kiOSFGOWyzoB1xPcZiGl5QIzkaOXASAwK0Tnl04mz/PNUnzhbg51fgpNNcItnzD+LBDnP0SEva4PXePKySIrSigT3otoaIK8ybIOQTw/QmYCTt8zp/Qu1lxtFThplVh3Cysqp+XiTdJSWBSXnpYIQTyu9EyQCbUtW/WBE2HTQGXgRBHQTguLZJX7SAghdW6ccuQZVRSl/YJXS6V3f95jYcwvRNyxnU7YMaEvim19JLgSVzI2WN4gR5WsBo0w1viQeFoXrjVpDkquw4a56/UIJWX0BX6bK7V1+frzziQV67dS3FyVS2FBvqHaLhjD8GPWndjxMIsShv2giGe8shKQWT6nEjrbw4KrqRMz66RLG6EOCJ55cIo0R/yTf3E+bPWhz4RFQAqPzmIr5iNRcbu8Kq7dIr5KRH9G15fn662NlQ2EEyiLspK3ABhCTXYeDeE9fIONi6r6VzallOy2S7jbH7y3tzD31qoybQ3v3w/8nBtayffNPaGamBg=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(39860400002)(136003)(346002)(396003)(66556008)(66476007)(86362001)(66946007)(5660300002)(16526019)(31696002)(31686004)(38100700002)(26005)(36756003)(186003)(2616005)(83380400001)(54906003)(478600001)(6486002)(316002)(16576012)(956004)(4326008)(6916009)(2906002)(8936002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?SWg1cXQ2VWUvZlp5QTFiS2hINEphTjhJT1RWcXRuMFVXTWRVdHd0RGZnSUNF?=
 =?utf-8?B?UGx4ZmhrcTVFZ2E3ZnNDZkoyYnFzdU1zZG9NR3pZTENVYlQyeHU3a3ZZZlhQ?=
 =?utf-8?B?bUdOT2lWWnh6YjhzYURJMEo5b0kxZHM0anRIOHBiTXpMWTNuWm05a0Raek94?=
 =?utf-8?B?MTBwTzFtN3ZFRUg4OXdvWmh2YVRreWdwK1B0YlVNRUFJMURWU0RSQzN1c0pP?=
 =?utf-8?B?eVhGVi94RXZveXRFN3Y4MkxpRktDb1U2UTlGUVM0ci9FWHZkMlpTOFFTK0pw?=
 =?utf-8?B?eXhPN1NQQk1MZ3FOdlVUVERrNGZzUEowdlBlUFhGTDR3N1JRb3pVS1BZbXpo?=
 =?utf-8?B?UnJNQm92bExmYzFjSFV1c3BBZzkwWWliaHdkb09lSnBlK0tpVXJmTjJVMnFU?=
 =?utf-8?B?VS81dXpyOGNLZGJMRFZoelBDSTk4RENtaTdUaUEwQjlic2kwY0d6VDVsK1h3?=
 =?utf-8?B?Q0Jhd3NCYkoxUVpCS0ZXd2V3TThBVDIvQXlpcDNuQTRReFVvNkhmbDllOURh?=
 =?utf-8?B?aVEzTVNsak9vWjU2eXJUWHZaMFlIZFFjV09tbyt5NVRSanljUDU1ZmtXVzIv?=
 =?utf-8?B?K2lXbVkvOUFJUTJ4SEhockl0OVlweTVMUkF4a3FRay9PQ25sV25yalZYK3ZS?=
 =?utf-8?B?VXd6ZDNJREN1OTZoa24vK0pJZkNtdTkvTHBBVjErWUkzbGVMbWtQTmxKc0VT?=
 =?utf-8?B?bWo0dVQ3YzVrWUVDbXd3T3lZMFRaU0dvOGpoS0g1MWRoZ0w4TlFjak5hV3A3?=
 =?utf-8?B?ell5M0p3M3YweUhvY3dxcmUvYlNXZ0VPUmFhbUpQK3phcW5ieVJNMjBiVTRm?=
 =?utf-8?B?aTBYUGpZSVpualBWdEZDOTlNT2c2U3YxbkxzRXh0OGh3K0d1bXRJSXpDcEZF?=
 =?utf-8?B?ejFZYVI1Q2QvYklRbFpqVXZuZmpDQVVpc0ZMUjZlRHEzN0NYTlZEQjhINm16?=
 =?utf-8?B?NGVWemh6MXNHKzFjaEsrK2kzNXNoM2hENHpOdnJTODNTQWpNYnBlT3RLd2pW?=
 =?utf-8?B?ZlB2NGY4MjFmS1VSYVJKTzdiZXgyUWFEN0Z4dWtTMDNOdjVaVTJEai92aW1h?=
 =?utf-8?B?WGNCZ1JyUGlnbzBiRVllU0ZQVXJpTDhPK1M4aXFJbnlFUUppTEU1SVVURjc5?=
 =?utf-8?B?VkFOS3JlL3QvRkdWSnIxNnhSa3JpZnM3ZlJwQ0NiekhITFlkdFpFNDEzdk5m?=
 =?utf-8?B?UTJ0WVJKK1VkUkhiOWswSXlHUVRoSm1FT0h3YUtrdGs2b2ZGcGtwMWdXNUd4?=
 =?utf-8?B?Y3QyRzJKS0wzYllqWWJFenE4NXdLdHd3UmRxdjYyakowb0FVYk91b3oxcFlI?=
 =?utf-8?B?ZWlLcGZrVGdxSU53a3VCdHNGSnhaY3Q4QU1lSFJLbjFlK2s4N1IyTTJkc25i?=
 =?utf-8?B?VVVxYXpOOFpHZExHZWdiWnEwZVVJb1ZSQ3YvYVJUbVpNdGRJL2hkV1g2T2NF?=
 =?utf-8?B?V0NNT0dVS1QvTzlPUUtoeDFyQ1lQZ3NFSkJqRUlHZjdqT3FJTW9idzZqQnFY?=
 =?utf-8?B?UHJhUytNVUEzSVh2QXMrdmFqaTFOMFFqbkxqRDN3RzFodmtmOXJIR045QVZi?=
 =?utf-8?B?VDN5bjh0d0hsS3krUDRHbzBWTUtDV1ZuNE1UUVA4SDU2eVNrSjJLcjFJdkJF?=
 =?utf-8?B?VDc3c3FuOVhSaTZWVkVyb2RONUxHYlhyWEkrbHRIampZVWFvZ1FUUHdIaFhR?=
 =?utf-8?B?MEFkUFUwdHlVdlpRVW9PV2VycXhjYVROd212UnppVW9KRytuME80K0VzSDFR?=
 =?utf-8?Q?u34YyA0fBRaK40dmaiUQjqjYnG1xleGL+HMeWyc?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5208b57b-dd18-49c5-0177-08d93fcecefc
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:06:11.9140
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: xS7A+dLAzxxa9VfzbjjqIIkiho6eNd1eDa0vB7FQbK1iJ8vNspN1c/plNi6EWWkECzIGIw52Xizo9G+yGW16Dw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6861

p2m_add_page() is simply a rename from guest_physmap_add_entry().
p2m_remove_page() then is its counterpart, despite rendering
guest_physmap_remove_page(). This way callers can use suitable pairs of
functions (previously violated by hvm/grant_table.c).

In HVM-specific code further avoid going through the guest_physmap_*()
layer, and instead use the two new/renamed functions directly.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/hvm/dom0_build.c
+++ b/xen/arch/x86/hvm/dom0_build.c
@@ -174,8 +174,7 @@ static int __init pvh_populate_memory_ra
             continue;
         }
 
-        rc = guest_physmap_add_page(d, _gfn(start), page_to_mfn(page),
-                                    order);
+        rc = p2m_add_page(d, _gfn(start), page_to_mfn(page), order, p2m_ram_rw);
         if ( rc != 0 )
         {
             printk("Failed to populate memory: [%#lx,%#lx): %d\n",
--- a/xen/arch/x86/hvm/grant_table.c
+++ b/xen/arch/x86/hvm/grant_table.c
@@ -39,9 +39,8 @@ int create_grant_p2m_mapping(uint64_t ad
         p2mt = p2m_grant_map_ro;
     else
         p2mt = p2m_grant_map_rw;
-    rc = guest_physmap_add_entry(current->domain,
-                                 _gfn(addr >> PAGE_SHIFT),
-                                 frame, PAGE_ORDER_4K, p2mt);
+    rc = p2m_add_page(current->domain, _gfn(addr >> PAGE_SHIFT),
+                      frame, PAGE_ORDER_4K, p2mt);
     if ( rc )
         return GNTST_general_error;
     else
@@ -68,7 +67,7 @@ int replace_grant_p2m_mapping(uint64_t a
                  type, mfn_x(old_mfn), mfn_x(frame));
         return GNTST_general_error;
     }
-    if ( guest_physmap_remove_page(d, _gfn(gfn), frame, PAGE_ORDER_4K) )
+    if ( p2m_remove_page(d, _gfn(gfn), frame, PAGE_ORDER_4K) )
     {
         put_gfn(d, gfn);
         return GNTST_general_error;
--- a/xen/arch/x86/hvm/ioreq.c
+++ b/xen/arch/x86/hvm/ioreq.c
@@ -188,8 +188,7 @@ static void hvm_remove_ioreq_gfn(struct
     if ( gfn_eq(iorp->gfn, INVALID_GFN) )
         return;
 
-    if ( guest_physmap_remove_page(d, iorp->gfn,
-                                   page_to_mfn(iorp->page), 0) )
+    if ( p2m_remove_page(d, iorp->gfn, page_to_mfn(iorp->page), 0) )
         domain_crash(d);
     clear_page(iorp->va);
 }
@@ -205,8 +204,7 @@ static int hvm_add_ioreq_gfn(struct iore
 
     clear_page(iorp->va);
 
-    rc = guest_physmap_add_page(d, iorp->gfn,
-                                page_to_mfn(iorp->page), 0);
+    rc = p2m_add_page(d, iorp->gfn, page_to_mfn(iorp->page), 0, p2m_ram_rw);
     if ( rc == 0 )
         paging_mark_pfn_dirty(d, _pfn(gfn_x(iorp->gfn)));
 
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -829,15 +829,17 @@ p2m_remove_entry(struct p2m_domain *p2m,
 }
 
 int
-guest_physmap_remove_page(struct domain *d, gfn_t gfn,
-                          mfn_t mfn, unsigned int page_order)
+p2m_remove_page(struct domain *d, gfn_t gfn, mfn_t mfn,
+                unsigned int page_order)
 {
     struct p2m_domain *p2m = p2m_get_hostp2m(d);
     int rc;
 
-    /* IOMMU for PV guests is handled in get_page_type() and put_page(). */
     if ( !paging_mode_translate(d) )
-        return 0;
+    {
+        ASSERT_UNREACHABLE();
+        return -EPERM;
+    }
 
     gfn_lock(p2m, gfn, page_order);
     rc = p2m_remove_entry(p2m, gfn, mfn, page_order);
@@ -846,6 +848,17 @@ guest_physmap_remove_page(struct domain
     return rc;
 }
 
+int
+guest_physmap_remove_page(struct domain *d, gfn_t gfn,
+                          mfn_t mfn, unsigned int page_order)
+{
+    /* IOMMU for PV guests is handled in get_page_type() and put_page(). */
+    if ( !paging_mode_translate(d) )
+        return 0;
+
+    return p2m_remove_page(d, gfn, mfn, page_order);
+}
+
 #endif /* CONFIG_HVM */
 
 int
@@ -884,14 +897,14 @@ guest_physmap_add_page(struct domain *d,
         return 0;
     }
 
-    return guest_physmap_add_entry(d, gfn, mfn, page_order, p2m_ram_rw);
+    return p2m_add_page(d, gfn, mfn, page_order, p2m_ram_rw);
 }
 
 #ifdef CONFIG_HVM
 
 int
-guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn,
-                        unsigned int page_order, p2m_type_t t)
+p2m_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,
+             unsigned int page_order, p2m_type_t t)
 {
     struct p2m_domain *p2m = p2m_get_hostp2m(d);
     unsigned long i;
@@ -2665,7 +2678,7 @@ static int p2m_add_foreign(struct domain
     {
         if ( is_special_page(mfn_to_page(prev_mfn)) )
             /* Special pages are simply unhooked from this phys slot */
-            rc = guest_physmap_remove_page(tdom, _gfn(gpfn), prev_mfn, 0);
+            rc = p2m_remove_page(tdom, _gfn(gpfn), prev_mfn, 0);
         else
             /* Normal domain memory is freed, to avoid leaking memory. */
             rc = guest_remove_page(tdom, gpfn);
@@ -2673,7 +2686,7 @@ static int p2m_add_foreign(struct domain
             goto put_both;
     }
     /*
-     * Create the new mapping. Can't use guest_physmap_add_page() because it
+     * Create the new mapping. Can't use p2m_add_page() because it
      * will update the m2p table which will result in  mfn -> gpfn of dom0
      * and not fgfn of domU.
      */
@@ -2771,7 +2784,7 @@ int xenmem_add_to_physmap_one(
     {
         if ( is_special_page(mfn_to_page(prev_mfn)) )
             /* Special pages are simply unhooked from this phys slot. */
-            rc = guest_physmap_remove_page(d, gpfn, prev_mfn, PAGE_ORDER_4K);
+            rc = p2m_remove_page(d, gpfn, prev_mfn, PAGE_ORDER_4K);
         else if ( !mfn_eq(mfn, prev_mfn) )
             /* Normal domain memory is freed, to avoid leaking memory. */
             rc = guest_remove_page(d, gfn_x(gpfn));
@@ -2784,11 +2797,11 @@ int xenmem_add_to_physmap_one(
 
     /* Unmap from old location, if any. */
     if ( old_gpfn != INVALID_M2P_ENTRY )
-        rc = guest_physmap_remove_page(d, _gfn(old_gpfn), mfn, PAGE_ORDER_4K);
+        rc = p2m_remove_page(d, _gfn(old_gpfn), mfn, PAGE_ORDER_4K);
 
     /* Map at new location. */
     if ( !rc )
-        rc = guest_physmap_add_page(d, gpfn, mfn, PAGE_ORDER_4K);
+        rc = p2m_add_page(d, gpfn, mfn, PAGE_ORDER_4K, p2m_ram_rw);
 
  put_both:
     /*
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -571,10 +571,11 @@ int p2m_alloc_table(struct p2m_domain *p
 void p2m_teardown(struct p2m_domain *p2m);
 void p2m_final_teardown(struct domain *d);
 
-/* Add a page to a domain's p2m table */
-int guest_physmap_add_entry(struct domain *d, gfn_t gfn,
-                            mfn_t mfn, unsigned int page_order,
-                            p2m_type_t t);
+/* Add/remove a page to/from a domain's p2m table. */
+int p2m_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,
+                 unsigned int page_order, p2m_type_t t);
+int p2m_remove_page(struct domain *d, gfn_t gfn, mfn_t mfn,
+                    unsigned int page_order);
 
 /* Untyped version for RAM only, for compatibility and PV. */
 int guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:06:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:06:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150441.278158 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R7O-00033z-58; Mon, 05 Jul 2021 16:06:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150441.278158; Mon, 05 Jul 2021 16:06:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R7O-00033s-1z; Mon, 05 Jul 2021 16:06:46 +0000
Received: by outflank-mailman (input) for mailman id 150441;
 Mon, 05 Jul 2021 16:06:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R7M-00033T-Ok
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:06:44 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fd8520a0-ddaa-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:06:44 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2053.outbound.protection.outlook.com [104.47.5.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-5-iB_4SG_qOdCtPzQL3FXtXg-1;
 Mon, 05 Jul 2021 18:06:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6861.eurprd04.prod.outlook.com (2603:10a6:803:13c::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 16:06:40 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:06:40 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR05CA0092.eurprd05.prod.outlook.com (2603:10a6:207:1::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 16:06:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fd8520a0-ddaa-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501203;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=4cC6Un4LMCn/lFnPBKF4eFaPubNu7dvYnjhXyk0P90U=;
	b=WtxWEaXzk9O4Q5kvci5yM+yWWDc/GaTWfc+VDWBH1Y8RXT0e8z3wjZdxA17w6SmtyPanuP
	2RmneaDZK0930Q3ceQoeDztq/AiDuD2X9ZiPMRlN7otztAFVPKBrzmJVq3y9/FBM+bNUBi
	pRRlTSxG/Fp6qEMug2jfPFde9YuhiD0=
X-MC-Unique: iB_4SG_qOdCtPzQL3FXtXg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BzloCQjGohMTksuqpX0ip/cYd/ThOCej61ZD7mj4aiGW56jodX+YKIAgJ2lrWg9x4zgbRgxnkWQTAfuMAkqVoUvfXBKd8Aq0h0jJglvWJAdj0NZSGZOIf9rSK0eDV0GnNkPFyfNCLZHJpp+Lli6dQQVbIprpaiW1zo2OVcvhUpTbm4mjZj1rjMLaJCtmMhicPpPXrqMz/YEETe0VoqZeg1pqZLEsFWVzQuPgKrNsE0dQzif4ecrre6rPAvFtapLCQ1NU+U73Txvw/C65Q0BctlEdiNLpYMgUymXKql8jidvIgDI9/oOjLUDc8IkDUE3jYKb7Wrd0x5DCaxblEps4MQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4cC6Un4LMCn/lFnPBKF4eFaPubNu7dvYnjhXyk0P90U=;
 b=KoulVsXM5gjgidL5FZDJ7ydnAs6+gsi58Rs9VeKBxtkjW9E1Xv232QBrbOcg3+w24LQNKW98oiCM2fFLXaWcUiOf4Rexg8IVaTpNu5LpWGAOSQvHr9ca5gfYw3CJdDOWsGvZf3QA+0JzAOQf85dLr/76cOcwrhyPZr3OYgLwYKWASQBnePAD3dwvXFhaCKDrjTmpJzlS1DPZbte2HIZyOpPW5K3fkHx8IUwAFnZrMcmT/fSgC4E3kx4e9lr8BvIsQ0R1h4ftRSFwwg28a7MqPYW7XoEpJdJDkEWP2nIzAaKrR7wZBD96t3Lx9cp0BsOGlTt7rwh70zSwdlBaYeUwxw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 03/16] x86/P2M: drop a few CONFIG_HVM
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <55643e68-432a-116a-b68e-2200e364e5da@suse.com>
Date: Mon, 5 Jul 2021 18:06:39 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM3PR05CA0092.eurprd05.prod.outlook.com
 (2603:10a6:207:1::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5b636fda-523e-4ec5-4557-08d93fcee02e
X-MS-TrafficTypeDiagnostic: VI1PR04MB6861:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB6861B42A1161EBE253428E5CB31C9@VI1PR04MB6861.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	y9O7zrOOE6xlNPYCKJ3g8bSqYeuc68bLkIcEjlmhh/9t/kyzRQUeHU35UqT8yiPMkcrhfSHhGjU6g9kTNBvKB3HMY6EKDCKJxwKnYQ/1n0EE5QsWumK//5tAwQV95LoK5UufHtF1S68H8+b5jjryDvVxlr3haCMJZnhKhY+ylJthDbkJAhifhL+TetC7qsceUc7OuooQilxl/7PyYOKKrDtpJN2E+pS6rr+b0xOdU7wLuZfV9yex86k+goAnkfyePXRXhzDeho3TnNXj9xREQRUFiohjOTQo6QKufCuBy4PGjmea9Lepg0acEZBJXMPEwfZg/MWbq7BwuwkMmesz4+ErqES3559yFvTt2deh2LsjcaOflyYsmoffU0GdJ49Y+GYhkyCFXOxa/+h6yYYKRLzRYB8Y1fo50AFBuT1KhKHVrH7Tk68dLBDpggpV9YZ9YsfMcavz66mPZiwubh+rSBhC7q1etCcLJamPJIknRMRwIRcWTrYvQ3dMWaeS6a1zc9Qp9ZilKZJlIWEXo4v4pPLGbt8qVKj+TNF5p/zYEUS2wxLNptU5Q6QMeNjn4WQS/GTxnXvq1xAoNu666eeKMtkm1IgsrKNcGtGj1U9H5/aY4KIZpWC8IgV9BXAvmLePp4u5rBy59SchkmtaG0dGE2Gm0Y6Y78bWt9B7G/dFLX/jUHMzTCvBYHh5Suv593koZ6XUuzbHeW8ekUkfl4NDJ1INBI/gV4SqH3C6X8H62Hw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(39860400002)(136003)(346002)(396003)(66556008)(66476007)(86362001)(66946007)(5660300002)(16526019)(31696002)(31686004)(38100700002)(26005)(36756003)(186003)(2616005)(83380400001)(54906003)(478600001)(6486002)(316002)(16576012)(956004)(4326008)(6916009)(2906002)(8936002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?PGDJy3ZrzkEqv2R3T/B0tsOchsoMWpi4B1bZ8Rv?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5b636fda-523e-4ec5-4557-08d93fcee02e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:06:40.7706
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: AEJEDaLtAUNSlJANgNimyMBSi/k3gHYaJMf+MjpWB3GtkljiBkg5rLHLmuBoyMU8iflyBY/MyLr2Myyy7Y0JZw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6861

This is to make it easier to see which parts of p2m.c still aren't HVM-
specific: In one case the conditionals sat in an already guarded region,
while in the other case P2M_AUDIT implies HVM.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -1584,11 +1584,10 @@ p2m_flush_table_locked(struct p2m_domain
      * when discarding them.
      */
     ASSERT(!p2m_is_hostp2m(p2m));
-#ifdef CONFIG_HVM
-    /* Nested p2m's do not do pod, hence the asserts (and no pod lock)*/
+
+    /* Nested p2m's do not do pod, hence the asserts (and no pod lock) */
     ASSERT(page_list_empty(&p2m->pod.super));
     ASSERT(page_list_empty(&p2m->pod.single));
-#endif
 
     /* No need to flush if it's already empty */
     if ( p2m_is_nestedp2m(p2m) && p2m->np2m_base == P2M_BASE_EADDR )
@@ -2497,7 +2496,6 @@ int p2m_altp2m_propagate_change(struct d
 
     return ret;
 }
-#endif /* CONFIG_HVM */
 
 /*** Audit ***/
 
@@ -2603,8 +2601,6 @@ out_p2m_audit:
 }
 #endif /* P2M_AUDIT */
 
-#ifdef CONFIG_HVM
-
 /*
  * Add frame from foreign domain to target domain's physmap. Similar to
  * XENMAPSPACE_gmfn but the frame is foreign being mapped into current,



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:07:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:07:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150446.278170 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R7o-0003ft-El; Mon, 05 Jul 2021 16:07:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150446.278170; Mon, 05 Jul 2021 16:07:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R7o-0003fk-An; Mon, 05 Jul 2021 16:07:12 +0000
Received: by outflank-mailman (input) for mailman id 150446;
 Mon, 05 Jul 2021 16:07:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R7n-0003f2-2b
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:07:11 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0d1d7ddc-ddab-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:07:10 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2056.outbound.protection.outlook.com [104.47.5.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-tDzpL-PgPjae8nrhJsOXHw-1; Mon, 05 Jul 2021 18:07:08 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6861.eurprd04.prod.outlook.com (2603:10a6:803:13c::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Mon, 5 Jul
 2021 16:07:06 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:07:06 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0060.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::10) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 16:07:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0d1d7ddc-ddab-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501229;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=6rM44k3o2q11woEJoneKZFwdYs+k+agPXTnKUSJ4RUI=;
	b=AJXg/fi97XXi1bFrKsfpvvcL229ZS7QHoc+AUyKytN+x/xKWAAUtk4ROSXa0EHoqAkweuu
	xODA0uB1JbpXElKqzpZcEBs/mAslbWcTV+VvwUZu9b5PP2y28JrZ5r9oLyH6XpVHgKmB/z
	yKn/MElGahD9KCM/AzoQ0GraN522obA=
X-MC-Unique: tDzpL-PgPjae8nrhJsOXHw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YB5WSPbuvEIeX5HZf6PM6jZHn84WurshqPMLz1bpQCMV22mez4tC6oJkmDdTcXrub3V+R6tE/WCREglZ3D150xAAbql06GquYcNSCh/9RdjWMeextbRyULal3Y36RoMlANh6mcJgebm9LT99KuCtgXBL07SPUd3aO5OGo/n1XFGEo01Z2Vdk8/t+j8BxIgkMak0JBL0eUgrtqbBy2I3jxRO79ppF9koaEMQ1iTO1S1KfwOK8zNJerO6GLvtvQrkQ84Qa9BCPSmV5K27yn4hBFLVi83yRngWY1hfPLyHKoB/gd6ioXBuqJEb8TIpFr1SFVVUTvv1Rf2OD1iE3t2Wh6Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6rM44k3o2q11woEJoneKZFwdYs+k+agPXTnKUSJ4RUI=;
 b=J7evhxc717kKriMazwBwp8xQh/VJ/lgTc0EdM6PTLp63L74ja7zsKobjtqW6ivVN/k80JEuy6/SWUC39giSN33XY3ETAZcodwYkjNBxTE2Mf6Ske+C1m2FRwPUj+n40O0NAazhmKJ0zT/JCGit1dDqaFWjMFhS/MUMCOHB+coBx/4L3CvJDdZsis7DJu93Mzepgs3PBS2PDym3a7hu9p8OKM25eWhHmrVOL4YM82wYCIjFsoEbC4dWCqw9YxFF1Zzsnq/eA2mW1FAmCbk48drgB6+Bclh6b0UJbeW7lqdzvRTwbCgzhR61qsRWqBuTb/dMuz/Wsd8PRKqBY9u2V7Lg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 04/16] x86/P2M: move map_domain_gfn() (again)
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <2b9d4562-1d44-d038-ea43-fe8b067c6070@suse.com>
Date: Mon, 5 Jul 2021 18:07:04 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0060.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4b::10) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a8731208-2287-4183-1bd0-08d93fceefb1
X-MS-TrafficTypeDiagnostic: VI1PR04MB6861:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB686136D2DC426E86489CEA5CB31C9@VI1PR04MB6861.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	UzMbmNCgbd144QW0tKZ6Sqshxvd+isgDMTJOviz5OFWKF8hsYzgw0xnPTZm1Pjs3T11FChs8fZ4S2Zumvr2gMeO6AbNJwaI1UhF3LeTOGK650atI1xU0lRhYAXdlQx0/O1wuLClnsNcKL+BI1pI/U4qpP00hl1hGKdhPnsrWtgeu5gIFQHplnR+7VjhKwPqA6W9+5KZFizJ5ZmLQtNNP+Hs8eB0f0A82I7+lyoqv6kSn55vikqAvfA9ZJZFXTVzOgdtz/Chb0sVIktDPeTcdf+NW+H+kDaCu9gA/RIIwNCH4meTsy8O8PB5H+rmN4ADlLcI7j052891ia7xib8T5pnbpHHFCB4qRJI84+JUfiA8pQVdW7aP4jQVep9qXIte88p6s4pj5xfolSTx6FAa9OlbPbk+Nqv5dix5V1qOT/0DJWD5AQbbrcJIrb2vD+onAzg9lALhKhX0rbqZXgOEAQoAa25Cx5hHrUEgCNYEknGbU0+AaLTHiP7C1L8g/PrIykL7iCrGSM5K6oXMeTQY84bKMx6Hf1Z/Ljxp+QY9BQQ6lgebqgGZX7lnvOhRhMZYQN5+/fO4Pi6QUf3rWzkeSLuzqWkNEPt0e9FlAHySjC1c6ljd+mBi0Coe7SaVutSMyad01wNFYGq2Q82TVvDpWjiYcAGt/rJwj0xpzt4BwPavpE7Wt6Q9OvF8ivi/V08AAM+eO+EETmbqQJER9r8kUolt43uZ5/oKh7rJ5guxKM5g=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(39860400002)(136003)(346002)(396003)(66556008)(66476007)(86362001)(66946007)(5660300002)(16526019)(31696002)(31686004)(38100700002)(26005)(36756003)(186003)(2616005)(83380400001)(54906003)(478600001)(6486002)(316002)(16576012)(956004)(4326008)(6916009)(2906002)(8936002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?kwJg9PWqzb12h9eMR2ptBoI/68dsFr7ZhOWcLgX?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a8731208-2287-4183-1bd0-08d93fceefb1
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:07:06.8139
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 79o9fp1B9gBRFqR6ZMgTW+lJ0U3Vtx1vbWVYJsHL4rfQe9vWPWWmO6ZUgDmA6CkdhReyfYDfrE1Vj47oM+rpww==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6861

The main user is the guest walking code, so move it back there; commit
9a6787cc3809 ("x86/mm: build map_domain_gfn() just once") would perhaps
better have kept it there in the first place. This way it'll only get
built when it's actually needed (and still only once).

This also eliminates one more CONFIG_HVM conditional from p2m.c.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/guest_walk.c
+++ b/xen/arch/x86/mm/guest_walk.c
@@ -535,6 +535,56 @@ guest_walk_tables(const struct vcpu *v,
     return walk_ok;
 }
 
+#if GUEST_PAGING_LEVELS == CONFIG_PAGING_LEVELS
+/*
+ * If the map is non-NULL, we leave this function having acquired an extra ref
+ * on mfn_to_page(*mfn).  In all cases, *pfec contains appropriate
+ * synthetic/structure PFEC_* bits.
+ */
+void *map_domain_gfn(struct p2m_domain *p2m, gfn_t gfn, mfn_t *mfn,
+                     p2m_query_t q, uint32_t *pfec)
+{
+    p2m_type_t p2mt;
+    struct page_info *page;
+
+    if ( !gfn_valid(p2m->domain, gfn) )
+    {
+        *pfec = PFEC_reserved_bit | PFEC_page_present;
+        return NULL;
+    }
+
+    /* Translate the gfn, unsharing if shared. */
+    page = p2m_get_page_from_gfn(p2m, gfn, &p2mt, NULL, q);
+    if ( p2m_is_paging(p2mt) )
+    {
+        ASSERT(p2m_is_hostp2m(p2m));
+        if ( page )
+            put_page(page);
+        p2m_mem_paging_populate(p2m->domain, gfn);
+        *pfec = PFEC_page_paged;
+        return NULL;
+    }
+    if ( p2m_is_shared(p2mt) )
+    {
+        if ( page )
+            put_page(page);
+        *pfec = PFEC_page_shared;
+        return NULL;
+    }
+    if ( !page )
+    {
+        *pfec = 0;
+        return NULL;
+    }
+
+    *pfec = PFEC_page_present;
+    *mfn = page_to_mfn(page);
+    ASSERT(mfn_valid(*mfn));
+
+    return map_domain_page(*mfn);
+}
+#endif
+
 /*
  * Local variables:
  * mode: C
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -1869,58 +1869,6 @@ unsigned long paging_gva_to_gfn(struct v
     return hostmode->gva_to_gfn(v, hostp2m, va, pfec);
 }
 
-#endif /* CONFIG_HVM */
-
-/*
- * If the map is non-NULL, we leave this function having acquired an extra ref
- * on mfn_to_page(*mfn).  In all cases, *pfec contains appropriate
- * synthetic/structure PFEC_* bits.
- */
-void *map_domain_gfn(struct p2m_domain *p2m, gfn_t gfn, mfn_t *mfn,
-                     p2m_query_t q, uint32_t *pfec)
-{
-    p2m_type_t p2mt;
-    struct page_info *page;
-
-    if ( !gfn_valid(p2m->domain, gfn) )
-    {
-        *pfec = PFEC_reserved_bit | PFEC_page_present;
-        return NULL;
-    }
-
-    /* Translate the gfn, unsharing if shared. */
-    page = p2m_get_page_from_gfn(p2m, gfn, &p2mt, NULL, q);
-    if ( p2m_is_paging(p2mt) )
-    {
-        ASSERT(p2m_is_hostp2m(p2m));
-        if ( page )
-            put_page(page);
-        p2m_mem_paging_populate(p2m->domain, gfn);
-        *pfec = PFEC_page_paged;
-        return NULL;
-    }
-    if ( p2m_is_shared(p2mt) )
-    {
-        if ( page )
-            put_page(page);
-        *pfec = PFEC_page_shared;
-        return NULL;
-    }
-    if ( !page )
-    {
-        *pfec = 0;
-        return NULL;
-    }
-
-    *pfec = PFEC_page_present;
-    *mfn = page_to_mfn(page);
-    ASSERT(mfn_valid(*mfn));
-
-    return map_domain_page(*mfn);
-}
-
-#ifdef CONFIG_HVM
-
 static unsigned int mmio_order(const struct domain *d,
                                unsigned long start_fn, unsigned long nr)
 {



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:07:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:07:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150452.278181 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R8H-0004NL-St; Mon, 05 Jul 2021 16:07:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150452.278181; Mon, 05 Jul 2021 16:07:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R8H-0004NE-P4; Mon, 05 Jul 2021 16:07:41 +0000
Received: by outflank-mailman (input) for mailman id 150452;
 Mon, 05 Jul 2021 16:07:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R8H-0004N0-6U
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:07:41 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f4d68a52-91e1-4eff-845d-77691daf922a;
 Mon, 05 Jul 2021 16:07:40 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2055.outbound.protection.outlook.com [104.47.12.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-33-Oxut-bkkPS2x5yl46VHnWQ-1; Mon, 05 Jul 2021 18:07:38 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 16:07:36 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:07:36 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0051.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::12) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Mon, 5 Jul 2021 16:07:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f4d68a52-91e1-4eff-845d-77691daf922a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501259;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=N7RY0ShcVxtWtMMh0NcPG5/m8X13IHxRvG2X5xqTlt8=;
	b=cQ/nUa8Loejs08bjMaiFJe0Zyp3oZKmiqzDJm1X8cbnLCigwz0s3+U8AfudDox61vPVvXi
	x6v3+YWdpYIfJVvoeIbcK+mdqIts5jpHxQTZI5kPIdsY0zN0CwLrM8LV4yTCXw1WhbjtG4
	GIzWEl080ms01B6v9QTSQHr8Kmg1oDQ=
X-MC-Unique: Oxut-bkkPS2x5yl46VHnWQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=DBsnk7wSt5nL0G7mXPGv/H4EWT7NFSx2vj9tuzRLgrFeha3NNbjHwnkzcfxKElkOE5O/cb0gGK5aLQ4ZLes+Q76iaGnnj4eXVCseGQAdqRHOyhA+KMHc2TSPIVQCV21LSgX3+DFnz9GnydEB6sCb8K5ksFA/CRoqemJ1VNMS8PByElqAPDjg7xRzFwWVTnZrfffrr5e2q42oHU2UvP24dYcXR7VT9lVe3gE+Za4gcjBsdB3/NGkCiBYXJTMCcI3VJ3KkX0ynnymc46iREexPrPMnjvV0xaVym8lBYdd51e+UfwHBLYTJmZ2cKmIsJLRpZUPR6QLUTJpS4elcPa40hg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=N7RY0ShcVxtWtMMh0NcPG5/m8X13IHxRvG2X5xqTlt8=;
 b=iAIdm5gBc+r4UOukFmdNtoYlH++g0QQj0za86VOBAj/c8gV8q569yqlqulNPAshs8tl2VfOTzpT/a9pDkC6orDUO+Z2UUjRzyBD2TF3gkufPI7k8YV2c18RYMBEScPR5adtmRHRH7K2Q8FmroKYEvHUekPTCPwtY40BzAh2RsMyO3Rl9x7SKY8WJXVsbQJCFK0xmFn8aa1E1CE/6M+8sURvnJTwppIkvzEdCdSk+Ow2s03+xZ0kO8NvEa4tYPyCj+1KsqeEE3UIMEBxDNZgLJj/UVUhITMkGLjMT3RO6pICvQu8XfmGf0Y3UJ4o+lQeHXIl4eYcbav6xtPiJ6Z4clw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 05/16] x86/mm: move guest_physmap_{add,remove}_page()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <3636b781-d84e-6e95-6bb8-bc6a7c596912@suse.com>
Date: Mon, 5 Jul 2021 18:07:34 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR0P281CA0051.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:48::12) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7791f0e0-853a-4850-b426-08d93fcf0103
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB32938AFB407C33BA76934943B31C9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	1YVyOdy23sRq0DQ99yWPBvPzhXf9EnxvijT76e4gJgHlyFCtWwQiBZ4Ui1oitAdXFn+LQ1oklQPv7UsRwWiHACecuSRJAsaX56CpE/39gzXo+w692gAkn85NgIeFaGhnytaVugl8bWCwUtBuLXUOQ7VEoOM4C05fHJXDrRPuoyJsPJ8HoGsEXJB7mubVRDMC1ZxpAwyJVYEymom6eOdT7jIEQ1nFZ32bZCP7Z/zikpK0HWZJHG09lMoO+KYXrAPiYS1g9yrO2R/ptEn3xE2wuwmDzNIukTsZSE1g9HHtUwY/U5weMwz6r9hwum7xSWZEh+Hj4RjutifRbSfggWCOtvtYWxA0wu/aCd8l8o9DZKP3zWSD9bgRXmnufWUQN86bf4nGZHCePUUXjd/23An+hmgye1xPKCIZfAvCqT1/qGAxDa6JAz4YK9HV+XLpnfz0LrbEbg8I7CoAXuV+B/XRoYGtJUchMUwA6V7FUnsu3dBEnXjFMNihpNsaDLVnPIaIIX8D03Cs4VSopHYDeXGkTx7VUpzNKjjPKMvyD4mF5SMPlsrYs5Uo2PUJt37jtMvyCXAU9KgYkEcPHjw91/OjP/EyoVnD0gdTuCuE24O2nchuQ31T/NwEfqmMlLKAXj3OcoaxSo4aZcV3FTr1mPhk2iVT6oDZKzrMCpUzrvmC7U3EXP6GnyeYH5oO4APrna9NNRo94RP1ZO84zy+4O7q2L7DMdh9ZI55kaeIYV3SE31zsxTpvsEWjwmLgmArkTYjeKJMtrdE1wmNI0wCWbcBhTFIiE6o4xOnIS/9wdrXaywOhp/Z3B+uwLEHmRwGWChTdpFRJy2ByBekmocE6kvNMEQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(396003)(136003)(376002)(39850400004)(5660300002)(316002)(956004)(66946007)(2616005)(16576012)(26005)(38100700002)(186003)(66476007)(66556008)(2906002)(36756003)(16526019)(86362001)(31686004)(6916009)(54906003)(83380400001)(31696002)(4326008)(478600001)(6486002)(8936002)(8676002)(2004002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?dYZCBA876cyn/DF2B6m8DsF+aCCs4rhTozjIgr1?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7791f0e0-853a-4850-b426-08d93fcf0103
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:07:35.8665
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: dR7gufbQyESy6d5i/Nks8VEHBKWbvJgqaEfr6ItiVBxOWomhlAmOM8bPy7fxvj4L7b2BjGilJR+q7u9ou71lFg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

... to a new file, separating the functions from their HVM-specific
backing ones, themselves only dealing with the non-translated case.

To avoid having a new CONFIG_HVM conditional in there, do away with
the inline placeholder.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_MEM_SHARING) += mem_sharing
 obj-y += p2m.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o p2m-pt.o
 obj-y += paging.o
+obj-y += physmap.o
 
 guest_walk_%.o: guest_walk.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -849,60 +849,6 @@ p2m_remove_page(struct domain *d, gfn_t
 }
 
 int
-guest_physmap_remove_page(struct domain *d, gfn_t gfn,
-                          mfn_t mfn, unsigned int page_order)
-{
-    /* IOMMU for PV guests is handled in get_page_type() and put_page(). */
-    if ( !paging_mode_translate(d) )
-        return 0;
-
-    return p2m_remove_page(d, gfn, mfn, page_order);
-}
-
-#endif /* CONFIG_HVM */
-
-int
-guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,
-                       unsigned int page_order)
-{
-    /* IOMMU for PV guests is handled in get_page_type() and put_page(). */
-    if ( !paging_mode_translate(d) )
-    {
-        struct page_info *page = mfn_to_page(mfn);
-        unsigned long i;
-
-        /*
-         * Our interface for PV guests wrt IOMMU entries hasn't been very
-         * clear; but historically, pages have started out with IOMMU mappings,
-         * and only lose them when changed to a different page type.
-         *
-         * Retain this property by grabbing a writable type ref and then
-         * dropping it immediately.  The result will be pages that have a
-         * writable type (and an IOMMU entry), but a count of 0 (such that
-         * any guest-requested type changes succeed and remove the IOMMU
-         * entry).
-         */
-        for ( i = 0; i < (1UL << page_order); ++i, ++page )
-        {
-            if ( !need_iommu_pt_sync(d) )
-                /* nothing */;
-            else if ( get_page_and_type(page, d, PGT_writable_page) )
-                put_page_and_type(page);
-            else
-                return -EINVAL;
-
-            set_gpfn_from_mfn(mfn_x(mfn) + i, gfn_x(gfn) + i);
-        }
-
-        return 0;
-    }
-
-    return p2m_add_page(d, gfn, mfn, page_order, p2m_ram_rw);
-}
-
-#ifdef CONFIG_HVM
-
-int
 p2m_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,
              unsigned int page_order, p2m_type_t t)
 {
--- /dev/null
+++ b/xen/arch/x86/mm/physmap.c
@@ -0,0 +1,85 @@
+/******************************************************************************
+ * arch/x86/mm/physmap.c
+ *
+ * Parts of this code are Copyright (c) 2009 by Citrix Systems, Inc. (Patrick Colp)
+ * Parts of this code are Copyright (c) 2007 by Advanced Micro Devices.
+ * Parts of this code are Copyright (c) 2006-2007 by XenSource Inc.
+ * Parts of this code are Copyright (c) 2006 by Michael A Fetterman
+ * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <asm/p2m.h>
+
+#include "mm-locks.h"
+
+int
+guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,
+                       unsigned int page_order)
+{
+    /* IOMMU for PV guests is handled in get_page_type() and put_page(). */
+    if ( !paging_mode_translate(d) )
+    {
+        struct page_info *page = mfn_to_page(mfn);
+        unsigned long i;
+
+        /*
+         * Our interface for PV guests wrt IOMMU entries hasn't been very
+         * clear; but historically, pages have started out with IOMMU mappings,
+         * and only lose them when changed to a different page type.
+         *
+         * Retain this property by grabbing a writable type ref and then
+         * dropping it immediately.  The result will be pages that have a
+         * writable type (and an IOMMU entry), but a count of 0 (such that
+         * any guest-requested type changes succeed and remove the IOMMU
+         * entry).
+         */
+        for ( i = 0; i < (1UL << page_order); ++i, ++page )
+        {
+            if ( !need_iommu_pt_sync(d) )
+                /* nothing */;
+            else if ( get_page_and_type(page, d, PGT_writable_page) )
+                put_page_and_type(page);
+            else
+                return -EINVAL;
+
+            set_gpfn_from_mfn(mfn_x(mfn) + i, gfn_x(gfn) + i);
+        }
+
+        return 0;
+    }
+
+    return p2m_add_page(d, gfn, mfn, page_order, p2m_ram_rw);
+}
+
+int
+guest_physmap_remove_page(struct domain *d, gfn_t gfn,
+                          mfn_t mfn, unsigned int page_order)
+{
+    /* IOMMU for PV guests is handled in get_page_type() and put_page(). */
+    if ( !paging_mode_translate(d) )
+        return 0;
+
+    return p2m_remove_page(d, gfn, mfn, page_order);
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--- a/xen/include/xen/p2m-common.h
+++ b/xen/include/xen/p2m-common.h
@@ -8,18 +8,9 @@ int set_foreign_p2m_entry(struct domain
                           unsigned long gfn, mfn_t mfn);
 
 /* Remove a page from a domain's p2m table */
-#ifdef CONFIG_HVM
 int __must_check
 guest_physmap_remove_page(struct domain *d, gfn_t gfn, mfn_t mfn,
                           unsigned int page_order);
-#else
-static inline int
-guest_physmap_remove_page(struct domain *d, gfn_t gfn, mfn_t mfn,
-                          unsigned int page_order)
-{
-    return 0;
-}
-#endif
 
 /* Map MMIO regions in the p2m: start_gfn and nr describe the range in
  *  * the guest physical address space to map, starting from the machine



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:08:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:08:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150456.278192 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R8c-0004sq-5r; Mon, 05 Jul 2021 16:08:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150456.278192; Mon, 05 Jul 2021 16:08:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R8c-0004sh-1a; Mon, 05 Jul 2021 16:08:02 +0000
Received: by outflank-mailman (input) for mailman id 150456;
 Mon, 05 Jul 2021 16:08:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R8b-0004N0-5v
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:08:01 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cf0e1f0c-2eb6-4f86-8953-b58e1e1eba0c;
 Mon, 05 Jul 2021 16:07:59 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2057.outbound.protection.outlook.com [104.47.12.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-14-rkRy333JM72jeNLP9nOx8w-1; Mon, 05 Jul 2021 18:07:58 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 16:07:56 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:07:56 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0035.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 16:07:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cf0e1f0c-2eb6-4f86-8953-b58e1e1eba0c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501278;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=iBgTpLP5pTg+FKHioK50yatmWjfVI9UtWtf8wOQ70wI=;
	b=K7KvQTg6U6OrJEVA9Ft7OMY1HxBM0pQA4xTLPR79LnvTUc6gbX6jo/sBVNzx1OSIaPaE14
	baX+5kEBUqJW3bGldyNix0nvxGCXa6xw4ieYQy02d+s1BuczjDNoz0xAoWpi3pIUi5/Kxv
	1Aw4wYEt35iB2lNYE9CnC6bQypl6FVg=
X-MC-Unique: rkRy333JM72jeNLP9nOx8w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BMC15kGCXhT9hkXmzZrqZbdMMLUTcMWIyIJRugT5zBPY2WFHm1+B7IqLN9ElHrQVY7P/QomXet2w37hG51d6wE8dHHsM0vdmoqFdsnYf7DY4IQ+4/alAh2aQdtc9ZCwAKiaUNXRpKZh5DZjgX1AQzrO/QwpYxTo9dA9jm0pHIBkQ/f/XQpIxyOZ9rrvfe0JyuzrgErA0jpYa53T6aEdccZMaISohsVlzdBliHJ0F+1kU6zzsyKhPedV+p7wVw7o4HsE+iQbh+p6BkU2NFTUSkXDmsxDvYggda37GBFgYkhb4L9fw8OafnsBRiSjf/YjhPfTJ5HjuR1dwoQjRRsFO3g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iBgTpLP5pTg+FKHioK50yatmWjfVI9UtWtf8wOQ70wI=;
 b=ZM9dNWbE52xCj3hzUh2UcNng0J9gZwOle5sGqabVrpHVZT7DUuU1yhc/uQjm3tB6BxN19k6Wh8G+gH9gRbhERaY90dx/ccrFui2Ri+i7oFz4jAmNC5niakQhZah299jW19zz4W788QT9r6JNRyNllMnkthNn/Fde5jFZqLNgS3vveTFYTfHp5cuJgVUdDbmOlTGVP3yWJF68Nqck1cy8DZ12yQA1xJKemocxeuE5N/qjxWsahB7LtL0btYe2s5X7vrBiQJ34o4uBSTZhraO0SIH3/9x6/0IUkScUpImi9w3q3T+qBDwKbFdjIvdPwzm2QktGdl1zZlsDKq/gFBF8Zw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 06/16] x86/mm: split set_identity_p2m_entry() into PV and HVM
 parts
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <90ea840a-0966-0cf8-39f0-f8ef3fb45786@suse.com>
Date: Mon, 5 Jul 2021 18:07:54 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR1P264CA0035.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::22) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 94d23ad7-b080-4da9-8869-08d93fcf0d6d
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3293B225BD9EFF22D12E036DB31C9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	CfLZqNR+sLYyKaAeTcrafHeyxWKK2aZnizw2lElQWJtWKfz8IZaUamD/3uSev0XkEvtVBT2mwmEva79roXsAZ7vT4ULJoVKyeIHw4mjX6kqu27lpO5nKG+BGkUimHHPPtZeDADb6AYg3eH87Rd9H69OP4wJ/VgI+cJkuYigkFWNcTRrlURaJzLLIxRblRXbwrpUbtN4qv3gEvHtNjYXo0l/VX65FhDLBL2rsdHyRbyocRicYSyxeP0lS2AK5eVpfP+m+MHFWOLn2mBAGkG11CQvUCrZH7cMmhM06MHJKqUtQDgVXmQgiKuet9UtSx8yv55bpyTNJH1vT01e7JTp96Z212A4zH/bOCIsmoiV/nRIAdQ41U9V8gpGQMlz/5C5SK+VWr1Wj7085VPkq6TqqjdktXlh6Wr6+YO/YtFEhFV24uFq6GS4afPpzl1P789YcA+gINUydgEMpdUS6kgZSPa0pdcDHfjuR4Rjggq0oEXxmDVFNkP/lsWRBHN5nbe+wTrmQ4NMRH5G6Fn8i9bUN3nKE3WFArBlX+1QTJMAXVZcUvxNauLUiVyG9pR+RX6aGeLG/fCUqMXifH7JywlAP6WyyTORQTL/BkA8XOOQljDWN5WkX/AxUnET+tD55gKoQIwJbnW6xkoUmhCa1A33LV9Q3mueqH9c7WIuD9s7bBT1PPSONSVJKTQEZG6cVE+oqUG16UBaYY54Q0FOZ0vWNNr9YsRKD0nIq1asEZJHV1gJN5f6eN2lfR3OkV+lUFSHmfpAPX+exDcH4x+t0I3bTbcctzINtS+ULZllZ38mJYEOnw9X7Swkx7Xl4snkYtXjH7Ojj2/tj7nUZYOST6EQ2ied0fMndBMi2Z2bxsgsvPc2Kof9uejDY5dIU75ma/VwZ
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(396003)(136003)(376002)(39850400004)(5660300002)(316002)(956004)(66946007)(2616005)(16576012)(26005)(38100700002)(186003)(66476007)(66556008)(2906002)(36756003)(16526019)(86362001)(31686004)(6916009)(54906003)(83380400001)(31696002)(4326008)(478600001)(6486002)(8936002)(8676002)(70780200001)(2004002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 94d23ad7-b080-4da9-8869-08d93fcf0d6d
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:07:56.6877
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: k0BhAxqtwXUW3Pl4iH3u4Vo/tiJUmvQBiNG4eqtaZ6NHK07tVBGKO9ST7zN8LLVNjvwShUDMpEurWxsxeBE93Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

..., moving the former into the new physmap.c.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -43,6 +43,7 @@
 #include <xsm/xsm.h>
 
 #include "mm-locks.h"
+#include "p2m.h"
 
 /* Override macro from asm/page.h to make work with mfn_t */
 #undef virt_to_mfn
@@ -1366,12 +1367,9 @@ int clear_mmio_p2m_entry(struct domain *
     return rc;
 }
 
-#endif /* CONFIG_HVM */
-
-int set_identity_p2m_entry(struct domain *d, unsigned long gfn_l,
+int p2m_add_identity_entry(struct domain *d, unsigned long gfn_l,
                            p2m_access_t p2ma, unsigned int flag)
 {
-#ifdef CONFIG_HVM
     p2m_type_t p2mt;
     p2m_access_t a;
     gfn_t gfn = _gfn(gfn_l);
@@ -1381,13 +1379,8 @@ int set_identity_p2m_entry(struct domain
 
     if ( !paging_mode_translate(d) )
     {
-#endif
-        if ( !is_iommu_enabled(d) )
-            return 0;
-        return iommu_legacy_map(d, _dfn(gfn_l), _mfn(gfn_l),
-                                1ul << PAGE_ORDER_4K,
-                                IOMMUF_readable | IOMMUF_writable);
-#ifdef CONFIG_HVM
+        ASSERT_UNREACHABLE();
+        return -EPERM;
     }
 
     gfn_lock(p2m, gfn, 0);
@@ -1413,12 +1406,10 @@ int set_identity_p2m_entry(struct domain
 
     gfn_unlock(p2m, gfn, 0);
     return ret;
-#endif
 }
 
-int clear_identity_p2m_entry(struct domain *d, unsigned long gfn_l)
+int p2m_remove_identity_entry(struct domain *d, unsigned long gfn_l)
 {
-#ifdef CONFIG_HVM
     p2m_type_t p2mt;
     p2m_access_t a;
     gfn_t gfn = _gfn(gfn_l);
@@ -1428,11 +1419,8 @@ int clear_identity_p2m_entry(struct doma
 
     if ( !paging_mode_translate(d) )
     {
-#endif
-        if ( !is_iommu_enabled(d) )
-            return 0;
-        return iommu_legacy_unmap(d, _dfn(gfn_l), 1ul << PAGE_ORDER_4K);
-#ifdef CONFIG_HVM
+        ASSERT_UNREACHABLE();
+        return -EPERM;
     }
 
     gfn_lock(p2m, gfn, 0);
@@ -1454,7 +1442,6 @@ int clear_identity_p2m_entry(struct doma
     }
 
     return ret;
-#endif
 }
 
 #ifdef CONFIG_MEM_SHARING
@@ -1499,8 +1486,6 @@ int set_shared_p2m_entry(struct domain *
 
 #endif /* CONFIG_MEM_SHARING */
 
-#ifdef CONFIG_HVM
-
 static struct p2m_domain *
 p2m_getlru_nestedp2m(struct domain *d, struct p2m_domain *p2m)
 {
--- /dev/null
+++ b/xen/arch/x86/mm/p2m.h
@@ -0,0 +1,31 @@
+/******************************************************************************
+ * arch/x86/mm/p2m.h
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <xen/mem_access.h>
+
+int p2m_add_identity_entry(struct domain *d, unsigned long gfn,
+                           p2m_access_t p2ma, unsigned int flag);
+int p2m_remove_identity_entry(struct domain *d, unsigned long gfn);
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--- a/xen/arch/x86/mm/physmap.c
+++ b/xen/arch/x86/mm/physmap.c
@@ -21,9 +21,11 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <xen/iommu.h>
 #include <asm/p2m.h>
 
 #include "mm-locks.h"
+#include "p2m.h"
 
 int
 guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn,
@@ -75,6 +77,33 @@ guest_physmap_remove_page(struct domain
     return p2m_remove_page(d, gfn, mfn, page_order);
 }
 
+int set_identity_p2m_entry(struct domain *d, unsigned long gfn,
+                           p2m_access_t p2ma, unsigned int flag)
+{
+    if ( !paging_mode_translate(d) )
+    {
+        if ( !is_iommu_enabled(d) )
+            return 0;
+        return iommu_legacy_map(d, _dfn(gfn), _mfn(gfn),
+                                1ul << PAGE_ORDER_4K,
+                                IOMMUF_readable | IOMMUF_writable);
+    }
+
+    return p2m_add_identity_entry(d, gfn, p2ma, flag);
+}
+
+int clear_identity_p2m_entry(struct domain *d, unsigned long gfn)
+{
+    if ( !paging_mode_translate(d) )
+    {
+        if ( !is_iommu_enabled(d) )
+            return 0;
+        return iommu_legacy_unmap(d, _dfn(gfn), 1ul << PAGE_ORDER_4K);
+    }
+
+    return p2m_remove_identity_entry(d, gfn);
+}
+
 /*
  * Local variables:
  * mode: C



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:09:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:09:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150467.278203 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R9n-0005lT-LE; Mon, 05 Jul 2021 16:09:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150467.278203; Mon, 05 Jul 2021 16:09:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0R9n-0005lK-I4; Mon, 05 Jul 2021 16:09:15 +0000
Received: by outflank-mailman (input) for mailman id 150467;
 Mon, 05 Jul 2021 16:09:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0R9m-0005l4-5B
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:09:14 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 78ae2efa-562e-45d5-98f4-8aede0b8acb8;
 Mon, 05 Jul 2021 16:09:13 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2053.outbound.protection.outlook.com [104.47.14.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-26-0O_MTB6WPxeQNjzxabADng-1; Mon, 05 Jul 2021 18:09:11 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 16:09:10 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:09:10 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0075.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:18::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:09:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 78ae2efa-562e-45d5-98f4-8aede0b8acb8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501352;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Tx30m7l+7/J2j/vr4dWWnozovQ/2dZxCTcm2hzQLKDs=;
	b=mXHwmU+dXBPm+qtIpbaOPMnbt+AFylARS6CeRsU/H3C+BHY/g6BHxarBQsKeDGaCMUIwOt
	mIu6YJX6pB8e8fRYYi9na5DT5jlYkboV0OPU5k5YcTrY5RU8BguBmoVfvmhfkdKjIQ63Tj
	e/stn1IQURKvgX+33xZQG2GyPumRLBg=
X-MC-Unique: 0O_MTB6WPxeQNjzxabADng-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WJKn1phpWKtXaOfTLDb86BWsbuUPFXBkK91sNo7joEVX+uDtymQF8dkzyeEb34rphxfSLg4JIoCiJ6eJd2NgnbeR0Ilz3LhRw607ym/lPVqo136HXq517hmugLwOuWjlruPlRMz0QDaEMaB5LfKK3Ndn6PH43F/qHZFmt7O9jq6P43NcJDSqeDKgXyuI6Kp9rYPN2ud8kleOnWbfLkCych5o7BM8IDxvBYtH0XOn/K5vQwo6g67aFpBshl/KYt64lFV57nUkl9AhysptPzOTEaDEzYPOn2E4C0qgBhOyokKeRKgTWRUjOBQ6YbjYa1CcDfrakicwz90yYUO2F85flA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Tx30m7l+7/J2j/vr4dWWnozovQ/2dZxCTcm2hzQLKDs=;
 b=JKv+R4/+DvMwTIYh8Or7jBiLBPtx5CPLK32M+2NWt8XUpy7wL+zTVEE5dMuxy4jZ/dNq945CoX9qzjRcWarspQeHTFaUSDtNOuJwXngU4ddp0uJPFZS9vL/bYKqiTykf0Y5heE4uZfWUR68dPkQO2p5zlOjcm0IgjGtcxINzHwtocagLhk/FNK+8/WuMtBsYZANyKlq37jTEYmcKvBymaoZSAr1Ps9AxB/lGmfiXzu7kBHPHQqcE0HlTNs7VwE4D1KkdzGqwONmW8A2kvbY2HJWPZnjkhJt83ZB1n/opN1ee+hOwErtY6mlqxKR9Hod6hUsvGsMW3LDlQYti9WTV+g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: intel.com; dkim=none (message not signed)
 header.d=none;intel.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 07/16] x86/P2M: p2m_{alloc,free}_ptp() and p2m_alloc_table()
 are HVM-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Kevin Tian <kevin.tian@intel.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <fcd39881-e225-d1a7-a168-9aa9fd9a7735@suse.com>
Date: Mon, 5 Jul 2021 18:09:08 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0075.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:18::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 53500c0f-4bd4-42f0-be2c-08d93fcf3932
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3293C51D3390CD89CC44F966B31C9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	kMH6Jkw6+UNMXlkq6qZoY56fAMLgcq0Iey5ZynVcCry3kOUYt1GDSC+MaKlBHGXl0u/7M49bvKObmi/cLAdWkuKGmORGOOgGxFLm3JllDn9sKWC4y+n42ZWz8kWlD5vfEvYado4J6Be4mMkpXe2Dfqzrd7UVUaHha26G8m22zOgrEfuNQPZhzTMevhY0yWvpgVbwhf/KXFEeBLe+xz8TGnp3NONK41dZ5NhruFmFU7yr2oQLG85Tp85H9Gwptsq6Um523RA7MyQbxz1LxNRsVXTD97c9cdHeuK3jbftc6Gqp2m8MLUSzps4MAslt/ForNLCo49ei3PclMYyPmBoSnYXhk/dN7CA3vPhzkbez7X+r4fkwQc8IEJUZs2ntTJyJmPWyq1pK69kPiyTvpmkINPoOyMkGYt0fRCB4Qh0EB7X4Uf8a0NNvVcLdnUvT+v+PC3+0frrhjtz/k2qJTIrF8FsznlKnvUUjd+FwkteOUR0xTHSiqheuAihH2wHvDJErjCuRMtTMwUKRhzKNN55mNdNNSdyAoSWCO+v89e69ojd4IW8+FNRsYxU7ErlYPRSazb4PAwPNw7MoohIMnsAfJFgMJAQqDE1uWQp0SNHqgfpa9PS3pNVBRT0mPTuEEvDlOc94QzKV2b+nUNb4FZeOnFSaW+01rA70IRI8kWkQgjugOLM4RwHie0aKjBw85MASE3cRT33tWM8Mu/eAmPEFeQCekdj4pB0v6mBNi2p/iKo=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(396003)(136003)(376002)(39850400004)(5660300002)(316002)(956004)(66946007)(2616005)(16576012)(26005)(38100700002)(186003)(66476007)(66556008)(2906002)(36756003)(16526019)(86362001)(31686004)(6916009)(54906003)(83380400001)(31696002)(4326008)(478600001)(6486002)(8936002)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 53500c0f-4bd4-42f0-be2c-08d93fcf3932
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:09:10.1142
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: VUdBhF/qJ8KGxQAldHRc1AQAGsaHcCs+0Qtz/B7Y5mSXOX7AGDiKe6FOgcw2TGgLQtTtBvggov9l/WEcaCRISA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

This also includes the two p2m related fields.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -94,7 +94,9 @@ static int p2m_initialise(struct domain
     int ret = 0;
 
     mm_rwlock_init(&p2m->lock);
+#ifdef CONFIG_HVM
     INIT_PAGE_LIST_HEAD(&p2m->pages);
+#endif
 
     p2m->domain = d;
     p2m->default_access = p2m_access_rwx;
@@ -628,6 +630,7 @@ struct page_info *p2m_get_page_from_gfn(
 }
 
 #ifdef CONFIG_HVM
+
 /* Returns: 0 for success, -errno for failure */
 int p2m_set_entry(struct p2m_domain *p2m, gfn_t gfn, mfn_t mfn,
                   unsigned int page_order, p2m_type_t p2mt, p2m_access_t p2ma)
@@ -667,7 +670,6 @@ int p2m_set_entry(struct p2m_domain *p2m
 
     return rc;
 }
-#endif
 
 mfn_t p2m_alloc_ptp(struct p2m_domain *p2m, unsigned int level)
 {
@@ -746,6 +748,8 @@ int p2m_alloc_table(struct p2m_domain *p
     return 0;
 }
 
+#endif /* CONFIG_HVM */
+
 /*
  * hvm fixme: when adding support for pvh non-hardware domains, this path must
  * cleanup any foreign p2m types (release refcnts on them).
@@ -754,7 +758,9 @@ void p2m_teardown(struct p2m_domain *p2m
 /* Return all the p2m pages to Xen.
  * We know we don't have any extra mappings to these pages */
 {
+#ifdef CONFIG_HVM
     struct page_info *pg;
+#endif
     struct domain *d;
 
     if (p2m == NULL)
@@ -763,11 +769,16 @@ void p2m_teardown(struct p2m_domain *p2m
     d = p2m->domain;
 
     p2m_lock(p2m);
+
     ASSERT(atomic_read(&d->shr_pages) == 0);
+
+#ifdef CONFIG_HVM
     p2m->phys_table = pagetable_null();
 
     while ( (pg = page_list_remove_head(&p2m->pages)) )
         d->arch.paging.free_page(d, pg);
+#endif
+
     p2m_unlock(p2m);
 }
 
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -2700,8 +2700,10 @@ int shadow_enable(struct domain *d, u32
  out_locked:
     paging_unlock(d);
  out_unlocked:
+#ifdef CONFIG_HVM
     if ( rv != 0 && !pagetable_is_null(p2m_get_pagetable(p2m)) )
         p2m_teardown(p2m);
+#endif
     if ( rv != 0 && pg != NULL )
     {
         pg->count_info &= ~PGC_count_mask;
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -339,12 +339,14 @@ static uint64_t domain_pgd_maddr(struct
 
     ASSERT(spin_is_locked(&hd->arch.mapping_lock));
 
+#ifdef CONFIG_HVM
     if ( iommu_use_hap_pt(d) )
     {
         pagetable_t pgt = p2m_get_pagetable(p2m_get_hostp2m(d));
 
         return pagetable_get_paddr(pgt);
     }
+#endif
 
     if ( !hd->arch.vtd.pgd_maddr )
     {
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -202,9 +202,6 @@ struct p2m_domain {
     /* Lock that protects updates to the p2m */
     mm_rwlock_t           lock;
 
-    /* Shadow translated domain: p2m mapping */
-    pagetable_t        phys_table;
-
     /*
      * Same as a domain's dirty_cpumask but limited to
      * this p2m and those physical cpus whose vcpu's are in
@@ -223,9 +220,6 @@ struct p2m_domain {
      */
     p2m_access_t default_access;
 
-    /* Pages used to construct the p2m */
-    struct page_list_head pages;
-
     /* Host p2m: Log-dirty ranges registered for the domain. */
     struct rangeset   *logdirty_ranges;
 
@@ -233,6 +227,12 @@ struct p2m_domain {
     bool               global_logdirty;
 
 #ifdef CONFIG_HVM
+    /* Translated domain: p2m mapping */
+    pagetable_t        phys_table;
+
+    /* Pages used to construct the p2m */
+    struct page_list_head pages;
+
     /* Alternate p2m: count of vcpu's currently using this p2m. */
     atomic_t           active_vcpus;
 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:09:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:09:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150472.278213 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RAB-0006J6-Tm; Mon, 05 Jul 2021 16:09:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150472.278213; Mon, 05 Jul 2021 16:09:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RAB-0006Iz-Qm; Mon, 05 Jul 2021 16:09:39 +0000
Received: by outflank-mailman (input) for mailman id 150472;
 Mon, 05 Jul 2021 16:09:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RAA-0006Hc-G3
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:09:38 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2648351e-e4d4-447b-9e30-6bbd54dd1573;
 Mon, 05 Jul 2021 16:09:37 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2054.outbound.protection.outlook.com [104.47.14.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-27-PRlD6ZXqMw-ewHfLXKsgHg-1; Mon, 05 Jul 2021 18:09:35 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 16:09:35 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:09:35 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0094.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:18::34) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:09:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2648351e-e4d4-447b-9e30-6bbd54dd1573
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501376;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=y519G2kPDVMzATqyC7RjCSlK3dqw0cUbYWZl2eMBtQs=;
	b=KDpeV6GW/bMOoOD1k/8gR0VhncPpMA0wtT5ialf2U/LGh8ziTjxGKZ2DyQ/OfWWLEYAHKn
	BrQDYSixHbPYt/w3U+jq3rIsI1MrU181UMEk6XbXZzBna5Pc9VuFPTNZTxPAA43dgrw7Sk
	8a+zQoUREfxVkwaLMvfXQ51EcqgB0rQ=
X-MC-Unique: PRlD6ZXqMw-ewHfLXKsgHg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cJdjbEC5SB16phTMi/MrUCGzUiYVJd4uQX2zRH+NJtrdkLVxLUnHWAXh/8e2s69G1totuRJt2GmPJKworjtUyQgV1G+TkZPJkJcbXaCDwhrzS0kY4MAGoOYgQEnTf4YMczbRuPTQF6evL+bhMFmYIrmEw8VQgDIkAWFWOx/yLjMm9mbvCv5WT10IESKL+vkQVA9kcJfyCU2x368fjCCyloN6ALzQ3/RhTY9XTFoT6cKpNZR728a77K5Za5qrQsPDaNBd9gk8UUsqzX0Xf5DFbj+8BdhQcx0yvuPfFyKgciIAKpO9og0+Ve92BIW0qz24jHat/RpBlMXIL7Ez8OxWhw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=y519G2kPDVMzATqyC7RjCSlK3dqw0cUbYWZl2eMBtQs=;
 b=R3r9ck0aSgjbU+5YnKfVp4jm+EBKwVav06ughNPFLddzzCjjXeEEnqCS+bHlcmyCUKLc3yxDll0SyrrOijxCOvdFv2qJS/ewPVZOcS13qs9djGFPFK41s4re75ZrRYtndpTDqI3x0+GfVJCicbGIhQ+fX1/LkABNB2Ujch85W5wmfPP+TzEMgb/Uy3Gk2BcZmB+TI6HlubhxaP+GwUmWP28HHztVXBxKuz+QSYazuknEAvZdKXr2eEvYC3hb6/AhUta2rsXo323nKPexpTHQaGeCvhrEnJjLl0OhG4iwFM+fUuiEGSJVyT4ddevpJyEPo0wSqUlM/uJfiAIhxaLtnQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 08/16] x86/P2M: PoD, altp2m, and nested-p2m are HVM-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <694a6590-0018-223a-c796-3e1469ec354a@suse.com>
Date: Mon, 5 Jul 2021 18:09:33 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0094.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:18::34) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e302bb8e-d98c-4ade-d562-08d93fcf47fb
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3293AA5D31AF6473AFB5DAFAB31C9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2582;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	8ydcXRPs2clSuuB5QbUaMYADcAxwhQv9YM0i9FIHTVyVPenHCNJtbMH5x07YXfos5mu0S/nm9j39D3MbmeTuE8+jtxJUboTQIreFoGFzJbpA4PqKLQ5vXhCe71enCsydtk9ptQ1rfa8xWBdWFeR9gQ9d5TmzC16AA4qn6OTxQ0hfNQZd+QOgMbAmMukqzuXLINgCJTkph0ATtFpF++CgYY5VQNzbRKp/zDbbToM9LxT6HGrGXlmFY8YIvmPp8/lji8qWsnN+r8hCJYeCsgubeJ/8xS7Cs7HTzNl7/r6v90njsWaC3yRSF/v8uKHyo8CjHWrKYETiz1le4ybWT5rtVTMUeUqiOEtXRK4LHxQuE8M764Er6mrYoaw7lPhSdPzgY1rSzU6Iuj5XsaV6jcXlLtNKfowUmsyP8e08ZqSSUZECpOOp9iZfu9jgqK2/SeGwn6enqSTWnT99XgNWML2faktxGrOyWm/ljxtJM18u9IX4gtS3GvoUpGFa2NjWbZT2ucCxpwL1s2iOWeU9weUcEHVOsBd9/q423dsUmiz735kbeTEBRH6zIBCKy+NrZbTi5Mxzg32qx2v0BVQ+yeZ5V1syDbBBJ1WJZ+39pijxhFgh8EUh0ufYT71Z4f+mOZiqmULScnyEzfel3ZAsheIo4vClJqPMCuriDtfQVWQzbx1deF0BPHAkFZZW+ApjH5mz3h1oQ/4gT2xnPvr0jF8J4zrpIeygEsEiQpz9JUAGMd4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(396003)(136003)(376002)(39850400004)(5660300002)(316002)(956004)(66946007)(2616005)(16576012)(26005)(38100700002)(186003)(66476007)(66556008)(2906002)(36756003)(16526019)(86362001)(31686004)(6916009)(54906003)(83380400001)(31696002)(4326008)(478600001)(6486002)(8936002)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e302bb8e-d98c-4ade-d562-08d93fcf47fb
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:09:34.9151
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: dXDI9Ms6SN1FjMQOc+eRrKRqZ0fZwWW/D69fSFEukTyyNdS8eV8CGQf8Srbk00XFOzkqXL/MhcWNvTttUJ3nqg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

There's no need to initialize respective data for PV domains. Note that
p2m_teardown_{alt,nested}p2m() will handle the lack-of-initialization
case fine.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -102,6 +102,9 @@ static int p2m_initialise(struct domain
     p2m->default_access = p2m_access_rwx;
     p2m->p2m_class = p2m_host;
 
+    if ( !is_hvm_domain(d) )
+        return 0;
+
     p2m_pod_init(p2m);
     p2m_nestedp2m_init(p2m);
 
@@ -259,7 +262,7 @@ int p2m_init(struct domain *d)
     int rc;
 
     rc = p2m_init_hostp2m(d);
-    if ( rc )
+    if ( rc || !is_hvm_domain(d) )
         return rc;
 
 #ifdef CONFIG_HVM
--- a/xen/arch/x86/mm/p2m.h
+++ b/xen/arch/x86/mm/p2m.h
@@ -17,6 +17,8 @@
 
 #include <xen/mem_access.h>
 
+void p2m_pod_init(struct p2m_domain *p2m);
+
 int p2m_add_identity_entry(struct domain *d, unsigned long gfn,
                            p2m_access_t p2ma, unsigned int flag);
 int p2m_remove_identity_entry(struct domain *d, unsigned long gfn);
--- a/xen/arch/x86/mm/p2m-pod.c
+++ b/xen/arch/x86/mm/p2m-pod.c
@@ -1135,6 +1135,12 @@ p2m_pod_demand_populate(struct p2m_domai
     mfn_t mfn;
     unsigned long i;
 
+    if ( !p2m_is_hostp2m(p2m) )
+    {
+        ASSERT_UNREACHABLE();
+        return false;
+    }
+
     ASSERT(gfn_locked_by_me(p2m, gfn));
     pod_lock(p2m);
 
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -679,8 +679,6 @@ static inline long p2m_pod_entry_count(c
     return p2m->pod.entry_count;
 }
 
-void p2m_pod_init(struct p2m_domain *p2m);
-
 #else
 
 static inline bool
@@ -709,8 +707,6 @@ static inline long p2m_pod_entry_count(c
     return 0;
 }
 
-static inline void p2m_pod_init(struct p2m_domain *p2m) {}
-
 #endif
 
 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:10:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:10:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150480.278224 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RB1-0007h2-7Z; Mon, 05 Jul 2021 16:10:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150480.278224; Mon, 05 Jul 2021 16:10:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RB1-0007gv-4b; Mon, 05 Jul 2021 16:10:31 +0000
Received: by outflank-mailman (input) for mailman id 150480;
 Mon, 05 Jul 2021 16:10:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RAz-0007gl-UP
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:10:29 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 82e5c6c8-ddab-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:10:27 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2055.outbound.protection.outlook.com [104.47.14.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-6-qB3jOu3wNkaUmLvdoDMhpg-1;
 Mon, 05 Jul 2021 18:10:25 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 16:10:24 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:10:24 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P195CA0017.EURP195.PROD.OUTLOOK.COM (2603:10a6:102:b6::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:10:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 82e5c6c8-ddab-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501426;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=KPGxH8re/zFguGwgrpavyMsiFmWQkEU9gtkRkREhVRQ=;
	b=ikAXLgycNis9EO7JiaGHmHciJVG61PL7m8sT6ypFdxjSFFUBV7U8gG3z5q3/c6t1GPZqZT
	5NIzl9HAFRs/RTQPyVs29UqL8eU78l1XELWyek1diPHSWPLEgwE89SHIgw0q3NQnB52VR8
	pybcY3f/9XsElZIY6v+qaKPu/xdRGV0=
X-MC-Unique: qB3jOu3wNkaUmLvdoDMhpg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=L/nR9zIhBNr7cyvBTdwDGgg4Cmnwf9DVCEFe2xh/5rBtZgMkJc/s3oWA6LV9sxCqgM2Uwe6gjfeYdP1uRiT8YuBbvk0yBjVuzqreRB9jUOeor+2icyrADpKcThKxcDm48k4dPyPhHEoj5utvL2VGSdfgT22mxYsguQLUoRfkaRrmMRpjvos4tap1y7Hc7qXr4mgOGL1oGCYVN51B+32YCH41SmtSRN73si5iD1PdIYFe81/P9yTgpaSF3xgC0MVsVhd9UxIQ+2vRJVdEpnmvtELnKFl51P0SOpK6QlamvC6LaJwH5bKnH5Q5gG/PIQsNzkUqAJAD541DH7bpnShY5Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KPGxH8re/zFguGwgrpavyMsiFmWQkEU9gtkRkREhVRQ=;
 b=WO1Xd+wKOZMJtDQprdTOXuEb0wK4TwEHQBooRG0DSlhFiXCJxoEOozOX+BJ1nkMqNgRcxt35d5cJTI2QhHyRa9MkC/v5r6asfMPx68sRCox4TUrNYpFXH0eqcY27PpKgwU88d2A2FwWAAHPTdMj19pVy7BQ+EigiCGD8Po0JYy1PhVVW30AayOVjnzYZ2BesGe+ENBfEHMAPdMRlNKWzOhbwMVJ0Ibjr9ABfD5MMQz2P5h/YEmevrMO3dyJXABZA3sFrBI0payHATLpTvgpUGmbPF1zIbh/450vBUwHb3tHxpqoexyz4DgRGLOi2Cqvqudgi1HJLBFx8Hr3ZfJNKSQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 09/16] x86/P2M: split out init/teardown functions
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <01024f3c-22e9-cdf5-46b7-c9479c8937b1@suse.com>
Date: Mon, 5 Jul 2021 18:10:22 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P195CA0017.EURP195.PROD.OUTLOOK.COM
 (2603:10a6:102:b6::22) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1b1b2756-8e18-473f-5ac6-08d93fcf658a
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB32932C4F3405D9AB45A5FB55B31C9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3383;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Qz0/5LYN+Dv7k2GCan7aUwwq/1iD8M22aSfjwPScg+BSDjIBZEMsGSfg11EdFhH/DnWBiJwfA3k2WrKtu233ldWvBX98xuNyZRKQ2FHVcJJt35fTRkj0ukI1ZtAZaJuNWIem1nEEEABIgPkGBI2E9wIvVhjvvesAboNnOhMknt5rOp6jDMs/KBqoXVRdqA+j/0nqKkaIbRis+tX3BxLNm67kmqhxJ9UtFVVeLlu79rVio14OZthnjrTs9ofKwRo+quLPmcPlx8mElYaF7kFhKWyA1YADXUC+7wJ8UOCJyC+JvnxJVg25R5AJvZueQSlVyz0W5t52rzG6VW0+xaKufCPKriAOOGBQhYAFcHCkRBdRk+noL+6aMnpjv66Wc2mOhLd1dkEsgq+QKdN6LNKzgLUQAXr8PL4rXFh1htlOzViXr2x4RN0mqbtPNqMVuHDiR88hpVZrR+QOBUJuu/uTKY+TaKNEW+j4Evma7fumf96n88OaqBfPWjtsvE2XNcOf7GMoxDHZrg5OUKHty2v4KDB+iB8P4MYB2mLwkhx5l96OVnfqazwap+mFWsuzSqNSBy8JZGcECIvgaj9cwP3kLU3m9WioxYLIFOU9t9+kSR0OjMBeYgphQH4tuwex4o5DktZbnmxKtSIGRm2K5blc1ifsmRcnsrrvGCdt5SDOc+IeOIjmIh5N/HWfPH5D9Xc9zISjnf3vC+x/tKboKsTNLeRqjhgANYTLDly/wxkNN106aIFAZ4EZgAtAIMrEfu3odz7Tj01/vukzHVb5VJJpzPNjP6bJoWMQtzIWPSl2DM3Pa/YVo79w0neWaaihkmb3ooB9H6n/pEhOK4LeyPEKPw==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(396003)(136003)(376002)(39850400004)(5660300002)(316002)(956004)(66946007)(2616005)(16576012)(26005)(38100700002)(186003)(66476007)(66556008)(2906002)(36756003)(16526019)(86362001)(31686004)(6916009)(54906003)(83380400001)(31696002)(4326008)(478600001)(6486002)(8936002)(8676002)(30864003)(2004002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1b1b2756-8e18-473f-5ac6-08d93fcf658a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:10:24.5131
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NP4fr2VZx0R4DfMwcSbnkM1mic/bNIyHfU6t01zBBn5S4U+18/pDbW9o+y/O3jTxkLXxe/3G667BWnmHRcN1aQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

Mostly just code movement, and certainly no functional change intended.
In p2m_final_teardown() the calls to p2m_teardown_{alt,nested}p2m() need
to be guarded by an is_hvm_domain() check now, though. This matches
p2m_init(). And p2m_is_logdirty_range() also gets moved inside the (so
far) adjacent #ifdef.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -7,7 +7,9 @@ obj-$(CONFIG_SHADOW_PAGING) += guest_wal
 obj-$(CONFIG_MEM_ACCESS) += mem_access.o
 obj-$(CONFIG_MEM_PAGING) += mem_paging.o
 obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
+obj-$(CONFIG_HVM) += nested.o
 obj-y += p2m.o
+obj-y += p2m-basic.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o p2m-pt.o
 obj-y += paging.o
 obj-y += physmap.o
--- a/xen/arch/x86/mm/altp2m.c
+++ b/xen/arch/x86/mm/altp2m.c
@@ -19,6 +19,8 @@
 #include <asm/hvm/hvm.h>
 #include <asm/p2m.h>
 #include <asm/altp2m.h>
+#include "mm-locks.h"
+#include "p2m.h"
 
 void
 altp2m_vcpu_initialise(struct vcpu *v)
@@ -123,6 +125,44 @@ void altp2m_vcpu_disable_ve(struct vcpu
     }
 }
 
+int p2m_init_altp2m(struct domain *d)
+{
+    unsigned int i;
+    struct p2m_domain *p2m;
+    struct p2m_domain *hostp2m = p2m_get_hostp2m(d);
+
+    mm_lock_init(&d->arch.altp2m_list_lock);
+    for ( i = 0; i < MAX_ALTP2M; i++ )
+    {
+        d->arch.altp2m_p2m[i] = p2m = p2m_init_one(d);
+        if ( p2m == NULL )
+        {
+            p2m_teardown_altp2m(d);
+            return -ENOMEM;
+        }
+        p2m->p2m_class = p2m_alternate;
+        p2m->access_required = hostp2m->access_required;
+        _atomic_set(&p2m->active_vcpus, 0);
+    }
+
+    return 0;
+}
+
+void p2m_teardown_altp2m(struct domain *d)
+{
+    unsigned int i;
+    struct p2m_domain *p2m;
+
+    for ( i = 0; i < MAX_ALTP2M; i++ )
+    {
+        if ( !d->arch.altp2m_p2m[i] )
+            continue;
+        p2m = d->arch.altp2m_p2m[i];
+        d->arch.altp2m_p2m[i] = NULL;
+        p2m_free_one(p2m);
+    }
+}
+
 /*
  * Local variables:
  * mode: C
--- a/xen/arch/x86/mm/mm-locks.h
+++ b/xen/arch/x86/mm/mm-locks.h
@@ -25,8 +25,6 @@
 #ifndef _MM_LOCKS_H
 #define _MM_LOCKS_H
 
-#include <asm/mem_sharing.h>
-
 /* Per-CPU variable for enforcing the lock ordering */
 DECLARE_PER_CPU(int, mm_lock_level);
 
--- /dev/null
+++ b/xen/arch/x86/mm/nested.c
@@ -0,0 +1,74 @@
+/******************************************************************************
+ * arch/x86/mm/nested.c
+ *
+ * Parts of this code are Copyright (c) 2009 by Citrix Systems, Inc. (Patrick Colp)
+ * Parts of this code are Copyright (c) 2007 by Advanced Micro Devices.
+ * Parts of this code are Copyright (c) 2006-2007 by XenSource Inc.
+ * Parts of this code are Copyright (c) 2006 by Michael A Fetterman
+ * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <xen/sched.h>
+#include <asm/p2m.h>
+#include "mm-locks.h"
+#include "p2m.h"
+
+void p2m_nestedp2m_init(struct p2m_domain *p2m)
+{
+    INIT_LIST_HEAD(&p2m->np2m_list);
+
+    p2m->np2m_base = P2M_BASE_EADDR;
+    p2m->np2m_generation = 0;
+}
+
+int p2m_init_nestedp2m(struct domain *d)
+{
+    unsigned int i;
+    struct p2m_domain *p2m;
+
+    mm_lock_init(&d->arch.nested_p2m_lock);
+    for ( i = 0; i < MAX_NESTEDP2M; i++ )
+    {
+        d->arch.nested_p2m[i] = p2m = p2m_init_one(d);
+        if ( p2m == NULL )
+        {
+            p2m_teardown_nestedp2m(d);
+            return -ENOMEM;
+        }
+        p2m->p2m_class = p2m_nested;
+        p2m->write_p2m_entry_pre = NULL;
+        p2m->write_p2m_entry_post = nestedp2m_write_p2m_entry_post;
+        list_add(&p2m->np2m_list, &p2m_get_hostp2m(d)->np2m_list);
+    }
+
+    return 0;
+}
+
+void p2m_teardown_nestedp2m(struct domain *d)
+{
+    unsigned int i;
+    struct p2m_domain *p2m;
+
+    for ( i = 0; i < MAX_NESTEDP2M; i++ )
+    {
+        if ( !d->arch.nested_p2m[i] )
+            continue;
+        p2m = d->arch.nested_p2m[i];
+        list_del(&p2m->np2m_list);
+        p2m_free_one(p2m);
+        d->arch.nested_p2m[i] = NULL;
+    }
+}
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -35,7 +35,6 @@
 #include <asm/page.h>
 #include <asm/paging.h>
 #include <asm/p2m.h>
-#include <asm/hvm/vmx/vmx.h> /* ept_p2m_init() */
 #include <asm/mem_sharing.h>
 #include <asm/hvm/nestedhvm.h>
 #include <asm/altp2m.h>
@@ -56,17 +55,9 @@ boolean_param("hap_2mb", opt_hap_2mb);
 
 DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock);
 
-static void p2m_nestedp2m_init(struct p2m_domain *p2m)
-{
 #ifdef CONFIG_HVM
-    INIT_LIST_HEAD(&p2m->np2m_list);
 
-    p2m->np2m_base = P2M_BASE_EADDR;
-    p2m->np2m_generation = 0;
-#endif
-}
-
-static int p2m_init_logdirty(struct p2m_domain *p2m)
+int p2m_init_logdirty(struct p2m_domain *p2m)
 {
     if ( p2m->logdirty_ranges )
         return 0;
@@ -79,7 +70,7 @@ static int p2m_init_logdirty(struct p2m_
     return 0;
 }
 
-static void p2m_free_logdirty(struct p2m_domain *p2m)
+void p2m_free_logdirty(struct p2m_domain *p2m)
 {
     if ( !p2m->logdirty_ranges )
         return;
@@ -88,205 +79,6 @@ static void p2m_free_logdirty(struct p2m
     p2m->logdirty_ranges = NULL;
 }
 
-/* Init the datastructures for later use by the p2m code */
-static int p2m_initialise(struct domain *d, struct p2m_domain *p2m)
-{
-    int ret = 0;
-
-    mm_rwlock_init(&p2m->lock);
-#ifdef CONFIG_HVM
-    INIT_PAGE_LIST_HEAD(&p2m->pages);
-#endif
-
-    p2m->domain = d;
-    p2m->default_access = p2m_access_rwx;
-    p2m->p2m_class = p2m_host;
-
-    if ( !is_hvm_domain(d) )
-        return 0;
-
-    p2m_pod_init(p2m);
-    p2m_nestedp2m_init(p2m);
-
-    if ( hap_enabled(d) && cpu_has_vmx )
-        ret = ept_p2m_init(p2m);
-    else
-        p2m_pt_init(p2m);
-
-    spin_lock_init(&p2m->ioreq.lock);
-
-    return ret;
-}
-
-static struct p2m_domain *p2m_init_one(struct domain *d)
-{
-    struct p2m_domain *p2m = xzalloc(struct p2m_domain);
-
-    if ( !p2m )
-        return NULL;
-
-    if ( !zalloc_cpumask_var(&p2m->dirty_cpumask) )
-        goto free_p2m;
-
-    if ( p2m_initialise(d, p2m) )
-        goto free_cpumask;
-    return p2m;
-
-free_cpumask:
-    free_cpumask_var(p2m->dirty_cpumask);
-free_p2m:
-    xfree(p2m);
-    return NULL;
-}
-
-static void p2m_free_one(struct p2m_domain *p2m)
-{
-    p2m_free_logdirty(p2m);
-    if ( hap_enabled(p2m->domain) && cpu_has_vmx )
-        ept_p2m_uninit(p2m);
-    free_cpumask_var(p2m->dirty_cpumask);
-    xfree(p2m);
-}
-
-static int p2m_init_hostp2m(struct domain *d)
-{
-    struct p2m_domain *p2m = p2m_init_one(d);
-    int rc;
-
-    if ( !p2m )
-        return -ENOMEM;
-
-    rc = p2m_init_logdirty(p2m);
-
-    if ( !rc )
-        d->arch.p2m = p2m;
-    else
-        p2m_free_one(p2m);
-
-    return rc;
-}
-
-static void p2m_teardown_hostp2m(struct domain *d)
-{
-    /* Iterate over all p2m tables per domain */
-    struct p2m_domain *p2m = p2m_get_hostp2m(d);
-
-    if ( p2m )
-    {
-        p2m_free_one(p2m);
-        d->arch.p2m = NULL;
-    }
-}
-
-#ifdef CONFIG_HVM
-static void p2m_teardown_nestedp2m(struct domain *d)
-{
-    unsigned int i;
-    struct p2m_domain *p2m;
-
-    for ( i = 0; i < MAX_NESTEDP2M; i++ )
-    {
-        if ( !d->arch.nested_p2m[i] )
-            continue;
-        p2m = d->arch.nested_p2m[i];
-        list_del(&p2m->np2m_list);
-        p2m_free_one(p2m);
-        d->arch.nested_p2m[i] = NULL;
-    }
-}
-
-static int p2m_init_nestedp2m(struct domain *d)
-{
-    unsigned int i;
-    struct p2m_domain *p2m;
-
-    mm_lock_init(&d->arch.nested_p2m_lock);
-    for ( i = 0; i < MAX_NESTEDP2M; i++ )
-    {
-        d->arch.nested_p2m[i] = p2m = p2m_init_one(d);
-        if ( p2m == NULL )
-        {
-            p2m_teardown_nestedp2m(d);
-            return -ENOMEM;
-        }
-        p2m->p2m_class = p2m_nested;
-        p2m->write_p2m_entry_pre = NULL;
-        p2m->write_p2m_entry_post = nestedp2m_write_p2m_entry_post;
-        list_add(&p2m->np2m_list, &p2m_get_hostp2m(d)->np2m_list);
-    }
-
-    return 0;
-}
-
-static void p2m_teardown_altp2m(struct domain *d)
-{
-    unsigned int i;
-    struct p2m_domain *p2m;
-
-    for ( i = 0; i < MAX_ALTP2M; i++ )
-    {
-        if ( !d->arch.altp2m_p2m[i] )
-            continue;
-        p2m = d->arch.altp2m_p2m[i];
-        d->arch.altp2m_p2m[i] = NULL;
-        p2m_free_one(p2m);
-    }
-}
-
-static int p2m_init_altp2m(struct domain *d)
-{
-    unsigned int i;
-    struct p2m_domain *p2m;
-    struct p2m_domain *hostp2m = p2m_get_hostp2m(d);
-
-    mm_lock_init(&d->arch.altp2m_list_lock);
-    for ( i = 0; i < MAX_ALTP2M; i++ )
-    {
-        d->arch.altp2m_p2m[i] = p2m = p2m_init_one(d);
-        if ( p2m == NULL )
-        {
-            p2m_teardown_altp2m(d);
-            return -ENOMEM;
-        }
-        p2m->p2m_class = p2m_alternate;
-        p2m->access_required = hostp2m->access_required;
-        _atomic_set(&p2m->active_vcpus, 0);
-    }
-
-    return 0;
-}
-#endif
-
-int p2m_init(struct domain *d)
-{
-    int rc;
-
-    rc = p2m_init_hostp2m(d);
-    if ( rc || !is_hvm_domain(d) )
-        return rc;
-
-#ifdef CONFIG_HVM
-    /* Must initialise nestedp2m unconditionally
-     * since nestedhvm_enabled(d) returns false here.
-     * (p2m_init runs too early for HVM_PARAM_* options) */
-    rc = p2m_init_nestedp2m(d);
-    if ( rc )
-    {
-        p2m_teardown_hostp2m(d);
-        return rc;
-    }
-
-    rc = p2m_init_altp2m(d);
-    if ( rc )
-    {
-        p2m_teardown_hostp2m(d);
-        p2m_teardown_nestedp2m(d);
-    }
-#endif
-
-    return rc;
-}
-
 int p2m_is_logdirty_range(struct p2m_domain *p2m, unsigned long start,
                           unsigned long end)
 {
@@ -298,8 +90,6 @@ int p2m_is_logdirty_range(struct p2m_dom
     return 0;
 }
 
-#ifdef CONFIG_HVM
-
 static void change_entry_type_global(struct p2m_domain *p2m,
                                      p2m_type_t ot, p2m_type_t nt)
 {
@@ -751,57 +541,6 @@ int p2m_alloc_table(struct p2m_domain *p
     return 0;
 }
 
-#endif /* CONFIG_HVM */
-
-/*
- * hvm fixme: when adding support for pvh non-hardware domains, this path must
- * cleanup any foreign p2m types (release refcnts on them).
- */
-void p2m_teardown(struct p2m_domain *p2m)
-/* Return all the p2m pages to Xen.
- * We know we don't have any extra mappings to these pages */
-{
-#ifdef CONFIG_HVM
-    struct page_info *pg;
-#endif
-    struct domain *d;
-
-    if (p2m == NULL)
-        return;
-
-    d = p2m->domain;
-
-    p2m_lock(p2m);
-
-    ASSERT(atomic_read(&d->shr_pages) == 0);
-
-#ifdef CONFIG_HVM
-    p2m->phys_table = pagetable_null();
-
-    while ( (pg = page_list_remove_head(&p2m->pages)) )
-        d->arch.paging.free_page(d, pg);
-#endif
-
-    p2m_unlock(p2m);
-}
-
-void p2m_final_teardown(struct domain *d)
-{
-#ifdef CONFIG_HVM
-    /*
-     * We must teardown both of them unconditionally because
-     * we initialise them unconditionally.
-     */
-    p2m_teardown_altp2m(d);
-    p2m_teardown_nestedp2m(d);
-#endif
-
-    /* Iterate over all p2m tables per domain */
-    p2m_teardown_hostp2m(d);
-}
-
-#ifdef CONFIG_HVM
-
 static int __must_check
 p2m_remove_entry(struct p2m_domain *p2m, gfn_t gfn, mfn_t mfn,
                  unsigned int page_order)
--- a/xen/arch/x86/mm/p2m.h
+++ b/xen/arch/x86/mm/p2m.h
@@ -17,12 +17,34 @@
 
 #include <xen/mem_access.h>
 
+struct p2m_domain *p2m_init_one(struct domain *d);
+void p2m_free_one(struct p2m_domain *p2m);
+
 void p2m_pod_init(struct p2m_domain *p2m);
 
 int p2m_add_identity_entry(struct domain *d, unsigned long gfn,
                            p2m_access_t p2ma, unsigned int flag);
 int p2m_remove_identity_entry(struct domain *d, unsigned long gfn);
 
+#ifdef CONFIG_HVM
+int p2m_init_logdirty(struct p2m_domain *p2m);
+void p2m_free_logdirty(struct p2m_domain *p2m);
+#else
+static inline int p2m_init_logdirty(struct p2m_domain *p2m) { return 0; }
+static inline void p2m_free_logdirty(struct p2m_domain *p2m) {}
+#endif
+
+int p2m_init_altp2m(struct domain *d);
+void p2m_teardown_altp2m(struct domain *d);
+
+void p2m_nestedp2m_init(struct p2m_domain *p2m);
+int p2m_init_nestedp2m(struct domain *d);
+void p2m_teardown_nestedp2m(struct domain *d);
+
+int ept_p2m_init(struct p2m_domain *p2m);
+void ept_p2m_uninit(struct p2m_domain *p2m);
+void p2m_init_altp2m_ept(struct domain *d, unsigned int i);
+
 /*
  * Local variables:
  * mode: C
--- /dev/null
+++ b/xen/arch/x86/mm/p2m-basic.c
@@ -0,0 +1,207 @@
+/******************************************************************************
+ * arch/x86/mm/p2m-basic.c
+ *
+ * Basic P2M management largely applicable to all domain types.
+ *
+ * Parts of this code are Copyright (c) 2009 by Citrix Systems, Inc. (Patrick Colp)
+ * Parts of this code are Copyright (c) 2007 by Advanced Micro Devices.
+ * Parts of this code are Copyright (c) 2006-2007 by XenSource Inc.
+ * Parts of this code are Copyright (c) 2006 by Michael A Fetterman
+ * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <xen/types.h>
+#include <asm/p2m.h>
+#include "mm-locks.h"
+#include "p2m.h"
+
+/* Init the datastructures for later use by the p2m code */
+static int p2m_initialise(struct domain *d, struct p2m_domain *p2m)
+{
+    int ret = 0;
+
+    mm_rwlock_init(&p2m->lock);
+#ifdef CONFIG_HVM
+    INIT_PAGE_LIST_HEAD(&p2m->pages);
+#endif
+
+    p2m->domain = d;
+    p2m->default_access = p2m_access_rwx;
+    p2m->p2m_class = p2m_host;
+
+    if ( !is_hvm_domain(d) )
+        return 0;
+
+    p2m_pod_init(p2m);
+    p2m_nestedp2m_init(p2m);
+
+    if ( hap_enabled(d) && cpu_has_vmx )
+        ret = ept_p2m_init(p2m);
+    else
+        p2m_pt_init(p2m);
+
+    spin_lock_init(&p2m->ioreq.lock);
+
+    return ret;
+}
+
+struct p2m_domain *p2m_init_one(struct domain *d)
+{
+    struct p2m_domain *p2m = xzalloc(struct p2m_domain);
+
+    if ( !p2m )
+        return NULL;
+
+    if ( !zalloc_cpumask_var(&p2m->dirty_cpumask) )
+        goto free_p2m;
+
+    if ( p2m_initialise(d, p2m) )
+        goto free_cpumask;
+    return p2m;
+
+ free_cpumask:
+    free_cpumask_var(p2m->dirty_cpumask);
+ free_p2m:
+    xfree(p2m);
+    return NULL;
+}
+
+void p2m_free_one(struct p2m_domain *p2m)
+{
+    p2m_free_logdirty(p2m);
+    if ( hap_enabled(p2m->domain) && cpu_has_vmx )
+        ept_p2m_uninit(p2m);
+    free_cpumask_var(p2m->dirty_cpumask);
+    xfree(p2m);
+}
+
+static int p2m_init_hostp2m(struct domain *d)
+{
+    struct p2m_domain *p2m = p2m_init_one(d);
+    int rc;
+
+    if ( !p2m )
+        return -ENOMEM;
+
+    rc = p2m_init_logdirty(p2m);
+
+    if ( !rc )
+        d->arch.p2m = p2m;
+    else
+        p2m_free_one(p2m);
+
+    return rc;
+}
+
+static void p2m_teardown_hostp2m(struct domain *d)
+{
+    /* Iterate over all p2m tables per domain */
+    struct p2m_domain *p2m = p2m_get_hostp2m(d);
+
+    if ( p2m )
+    {
+        p2m_free_one(p2m);
+        d->arch.p2m = NULL;
+    }
+}
+
+int p2m_init(struct domain *d)
+{
+    int rc;
+
+    rc = p2m_init_hostp2m(d);
+    if ( rc || !is_hvm_domain(d) )
+        return rc;
+
+    /*
+     * Must initialise nestedp2m unconditionally
+     * since nestedhvm_enabled(d) returns false here.
+     * (p2m_init runs too early for HVM_PARAM_* options)
+     */
+    rc = p2m_init_nestedp2m(d);
+    if ( rc )
+    {
+        p2m_teardown_hostp2m(d);
+        return rc;
+    }
+
+    rc = p2m_init_altp2m(d);
+    if ( rc )
+    {
+        p2m_teardown_hostp2m(d);
+        p2m_teardown_nestedp2m(d);
+    }
+
+    return rc;
+}
+
+/*
+ * Return all the p2m pages to Xen.
+ * We know we don't have any extra mappings to these pages.
+ *
+ * hvm fixme: when adding support for pvh non-hardware domains, this path must
+ * cleanup any foreign p2m types (release refcnts on them).
+ */
+void p2m_teardown(struct p2m_domain *p2m)
+{
+#ifdef CONFIG_HVM
+    struct page_info *pg;
+#endif
+    struct domain *d;
+
+    if ( !p2m )
+        return;
+
+    d = p2m->domain;
+
+    p2m_lock(p2m);
+
+    ASSERT(atomic_read(&d->shr_pages) == 0);
+
+#ifdef CONFIG_HVM
+    p2m->phys_table = pagetable_null();
+
+    while ( (pg = page_list_remove_head(&p2m->pages)) )
+        d->arch.paging.free_page(d, pg);
+#endif
+
+    p2m_unlock(p2m);
+}
+
+void p2m_final_teardown(struct domain *d)
+{
+    if ( is_hvm_domain(d) )
+    {
+        /*
+         * We must tear down both of them unconditionally because
+         * we initialise them unconditionally.
+         */
+        p2m_teardown_altp2m(d);
+        p2m_teardown_nestedp2m(d);
+    }
+
+    /* Iterate over all p2m tables per domain */
+    p2m_teardown_hostp2m(d);
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--- a/xen/arch/x86/mm/p2m-ept.c
+++ b/xen/arch/x86/mm/p2m-ept.c
@@ -35,6 +35,7 @@
 #include <xen/softirq.h>
 
 #include "mm-locks.h"
+#include "p2m.h"
 
 #define atomic_read_ept_entry(__pepte)                              \
     ( (ept_entry_t) { .epte = read_atomic(&(__pepte)->epte) } )
--- a/xen/include/asm-x86/hvm/vmx/vmx.h
+++ b/xen/include/asm-x86/hvm/vmx/vmx.h
@@ -594,15 +594,11 @@ unsigned int vmx_get_cpl(void);
 void vmx_inject_extint(int trap, uint8_t source);
 void vmx_inject_nmi(void);
 
-int ept_p2m_init(struct p2m_domain *p2m);
-void ept_p2m_uninit(struct p2m_domain *p2m);
-
 void ept_walk_table(struct domain *d, unsigned long gfn);
 bool_t ept_handle_misconfig(uint64_t gpa);
 int epte_get_entry_emt(struct domain *d, gfn_t gfn, mfn_t mfn,
                        unsigned int order, bool *ipat, p2m_type_t type);
 void setup_ept_dump(void);
-void p2m_init_altp2m_ept(struct domain *d, unsigned int i);
 /* Locate an alternate p2m by its EPTP */
 unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp);
 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:10:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:10:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150484.278236 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RBM-00089y-OY; Mon, 05 Jul 2021 16:10:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150484.278236; Mon, 05 Jul 2021 16:10:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RBM-00089r-KK; Mon, 05 Jul 2021 16:10:52 +0000
Received: by outflank-mailman (input) for mailman id 150484;
 Mon, 05 Jul 2021 16:10:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RBK-00087t-Qq
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:10:50 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9020949e-ddab-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:10:50 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2057.outbound.protection.outlook.com [104.47.14.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-36-WAMpp5DhNx27jnfXsMFRrg-1; Mon, 05 Jul 2021 18:10:48 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Mon, 5 Jul
 2021 16:10:47 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:10:47 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0119.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::35) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:10:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9020949e-ddab-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501449;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=i9R/6Ft2bTf/P4epKQB2jkiAfHntWtgxvduuxZdy6KA=;
	b=csSKZ2BtAzIys36u08vh4Zdbq+O/l0+7y3P4ItTrECM5Wlejp+T6KI7mIc9B3EZEryuzgx
	Qc4P2auiBT+Ibf0KdzjGVtsdBXZ5CvWsko8Pcgd0X0MVnf9UbN9SVO6Daq7rhzlwKaH0WL
	cEse4B4Ys5q4HAgSBqW21tS0xeQHfC4=
X-MC-Unique: WAMpp5DhNx27jnfXsMFRrg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=N3RLa/lS/jUuwexFDHRCc4dhS5f+h1wERt3i8vwwSrbH9hcRd3+F7s6uB0KUZmOoa1HtPzbZinYixFl9ZONIZOb12i84iQaGzYkujD3Dk2/ezMkl6mPypD1p1W44DB24q5gcOWaLfHRYx9kC8WTC1eyp4UpOW9JAO+Z6cqdDD3wcQYk+v6SV/D3aMVNh0OgKg78MaepauQAZx/0aetipCLS8mCvpOtEGBP7egWjLTqpFi55jNnh5SgzhE51kttXvzpJRgx7PEqvvA/B7tcmEs3RumIDrtB/Wv6UV0iItu8Y2kLTQYpZHr/wfHfp5sio96409l5YFym9noRLdlG01IQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=i9R/6Ft2bTf/P4epKQB2jkiAfHntWtgxvduuxZdy6KA=;
 b=YkOfDEK1Y6rFYnfacNP6UVJjXegz99vLF85wsbRjkoGahpPNLLODWnpCq3fOzptS0elicVIA2ufj/gLqlWtVIOzPZGQtg54hG6CcrOULLCt7IG5KLUA+5d2zmvOufJ1O8brGT7jBSZKz9cUkhX72dbTncm8HU/X6df+ZShBNzJgMfqGDaHwd9xYNi4mO2IuuhQNQdZsWjAPzKbI5LFNhCJy5NjNsSu3hiuHSqfRKaEvF8IjhtvadvJeMptfp/VxuAYWwb223aUCg+zaRwWl8rZmWnFocLI/luoDuE0qRvjpLNB7ufer/Gcqx0L/TLfKggXX6A5+lmToT1qjNZy1VqA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 10/16] x86/P2M: p2m_get_page_from_gfn() is HVM-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <06063948-65fb-1839-c10b-7cfb53d22b3b@suse.com>
Date: Mon, 5 Jul 2021 18:10:45 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0119.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::35) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0f935a50-a862-4d9c-7e89-08d93fcf731c
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3293B6E222AD4F4265AC0045B31C9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NAl7gvd9jZB8zVzfxQhfMMgH2M92pYPtkSto0zSWbLAAAjiD6iLmtPEHH8TA/1vTUWhofxo4qHN8w6aAzvPaNy5LguRN/wEW4z4goWgmO/VGVRCHkWuIK+oM3TZTgMrknLAm+o7cBdvba5FO5Kd79iuA95VezZUAZusLWOv7/WNI1mCMPDFrTtA+Dj/wps2znoKgtixC9F5KEiGRa/xMhsJEEvMf2mH/vaisErHpYGXwdvWnsjCLNR1rpU0Bez2l8685Kw4z6K4WnuEe5m0W/Cxa/wM4nLonVzTn6MTrUoS0+jJYnQji90dWpDdYfXbRqdHd4WYhZ9E/lM3uO7dTVkez7oSh6ZFmRv/SiQUdtolCQcIqrBJLolF+gw7f7HiSnX80p/3Oz4l8W1ZDiMstrtA2w1karSTwiwl9eXEcSEL/qIjGhNH5TxowHPlVpg9Z8et+yRQRLYBmGwQ7V73oqC1W4t8P+B8rGqPCGPVbOoffuB5Obp8pm5SBKI79nB5IJNmxl7GiRbLX6ehk+AzAipWAzDzA/IT78iFscPYiyI/F3JqkLvEUZsd/0YvpV27i+mFda01nr9AYdh2VWk16QIWapTPYg95F4BMC5ha3M0DAyFyjRKkXJHs9CktkK31yQGgSMdp1/hcusKop4dRvoN/NUAHDwaVMSstMqCGUNoy41jQLit/9R0XosewshyLLHvDK0Xr4WIaCVqC7cZ180NadUd3fD7sBEDFdVqEU7PE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(376002)(136003)(396003)(346002)(366004)(6486002)(478600001)(8936002)(4326008)(8676002)(38100700002)(66556008)(186003)(66476007)(66946007)(5660300002)(316002)(956004)(16576012)(26005)(2616005)(54906003)(83380400001)(31696002)(16526019)(2906002)(36756003)(31686004)(6916009)(86362001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/6WptrYmj?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0f935a50-a862-4d9c-7e89-08d93fcf731c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:10:47.2722
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: K6U4W2LSsEUU2+K4JAUl3QQbGK6ATD4sgFF88hGy50ZKVAqDonmprsTx8t7O+mWmjsmnWT6QDiwoosFN616d0w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

This function is the wrong layer to go through for PV guests. It happens
to work, but produces results which aren't fully consistent with
get_page_from_gfn(). The latter function, however, cannot be used in
map_domain_gfn() as it may not be the host P2M we mean to act on.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/guest_walk.c
+++ b/xen/arch/x86/mm/guest_walk.c
@@ -554,7 +554,9 @@ void *map_domain_gfn(struct p2m_domain *
     }
 
     /* Translate the gfn, unsharing if shared. */
-    page = p2m_get_page_from_gfn(p2m, gfn, &p2mt, NULL, q);
+    page = paging_mode_translate(p2m->domain)
+           ? p2m_get_page_from_gfn(p2m, gfn, &p2mt, NULL, q)
+           : get_page_from_gfn(p2m->domain, gfn_x(gfn), &p2mt, q);
     if ( p2m_is_paging(p2mt) )
     {
         ASSERT(p2m_is_hostp2m(p2m));
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -357,6 +357,8 @@ void __put_gfn(struct p2m_domain *p2m, u
     gfn_unlock(p2m, gfn, 0);
 }
 
+#ifdef CONFIG_HVM
+
 /* Atomically look up a GFN and take a reference count on the backing page. */
 struct page_info *p2m_get_page_from_gfn(
     struct p2m_domain *p2m, gfn_t gfn,
@@ -422,8 +424,6 @@ struct page_info *p2m_get_page_from_gfn(
     return page;
 }
 
-#ifdef CONFIG_HVM
-
 /* Returns: 0 for success, -errno for failure */
 int p2m_set_entry(struct p2m_domain *p2m, gfn_t gfn, mfn_t mfn,
                   unsigned int page_order, p2m_type_t p2mt, p2m_access_t p2ma)



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:12:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:12:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150494.278247 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RCt-0000ch-3x; Mon, 05 Jul 2021 16:12:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150494.278247; Mon, 05 Jul 2021 16:12:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RCt-0000ca-0d; Mon, 05 Jul 2021 16:12:27 +0000
Received: by outflank-mailman (input) for mailman id 150494;
 Mon, 05 Jul 2021 16:12:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RCr-0000cU-IX
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:12:25 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c627eb38-8db0-4455-965b-fd9d8148daa4;
 Mon, 05 Jul 2021 16:12:24 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2171.outbound.protection.outlook.com [104.47.17.171])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-15-nfg0Z1IoPoar0iN8f45gJw-1; Mon, 05 Jul 2021 18:12:22 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 16:12:21 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:12:21 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0009.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 16:12:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c627eb38-8db0-4455-965b-fd9d8148daa4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501543;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=yI8ENYCvOiVvVPyRlAvxJHQLLscO+/O+v8v+irLjSQU=;
	b=ZLN1wkcrAXQ1TyAnp0+K2DedjMxTZCqsoOmHLyV1/OwSD8HCNqSiXjm5l/SOAV2hAqL+00
	B6tA2MrMo/IEo/R/bB/WECalx27Zv7rFPAP6xRX2yj4mDdQHR1vOQyt0FdOW/JNciJYkDw
	ZP6OKDl9qAksmQ1+fLi44fW6aFW67II=
X-MC-Unique: nfg0Z1IoPoar0iN8f45gJw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=klO1sQULZnu//plWeUv0DFznEeRhrzklkETixQXlaOacL+XOWBRmnEJiUnnxarXFAxXE0mgMRId/zwFYcpUDo8zVOVDU4o3dz9gJWEiLAR6s2REr6xCp+sdz6/IARdQCxzK4GZSF+BtrK9mV3eTaT0Zlvz5VVigC37BvJzxdZcXoJOAuITC7T50J+UUQpLhrpOGz2bp8Jrl8NN4j1sCwXcfPZKI9s3+biNDQEf4gldo5PDvOWgCYYNSfrfIc2pxcyP+IuUhL+b7T10I2HHGNNxfkCqFNN+9fh7ehD3jLq9Ycbyo61L9qog0RKkoxWobKmvTugaqc+fQSUQCTtJh0Tg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yI8ENYCvOiVvVPyRlAvxJHQLLscO+/O+v8v+irLjSQU=;
 b=jZzif3O4XyWaN5ZblSj/dfJgA+bT3tm98StvWUWpkEfZrDt82PknfflHwEB9fdIWl1wFydUW1/DoqPATjULKxEps9+nesLbZutVuQolmkKwUoRBGMcmp6EgQQHke4cwDSUPJoC0o6X3Z7eU5eI+zlx9q7pdDpwTmsgWuIeCrYIMPEbO6zA/I5cxBKw0NBPfvqUzVd4V8wr5wa/qEcZDz6ZYJfBA39ZRmqg18eoFGf4lnpLyEr1wDfpEVPww6wUEzCKgD0pV7s9jFAOqq/vFV0aOksbIdnrB6cFWzoNN87ltfk64UeMoob2YnXAG5aQVZF2KNGLk/8+4o49YZDkYLMw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: bitdefender.com; dkim=none (message not signed)
 header.d=none;bitdefender.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 11/16] x86/P2M: derive a HVM-only variant from
 __get_gfn_type_access()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <a940e734-75ae-2660-7b2a-9b426437c48a@suse.com>
Date: Mon, 5 Jul 2021 18:12:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2P264CA0009.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::21)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4932d410-cddd-4299-5f57-08d93fcfaaec
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2829357C1CCE91E9C8537166B31C9@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	AlVHGamxBCuHYuIOcFbBGoGEIHgJpfarT9fMneT5Z7mjbxPwYN4JuRLNfMTCWcgWWl4zE7Byg8UATOQiis4Oo/5HfsbjEnbAtXW4j68+KDoF+d/Ms5xFjO/DUjRftBNYHKfENye3H7IztIeF+e5g6Cs7FbXFZn6X1aTax4fQbk0c8e4royMcp2qkzbVE+jjNsiKvlp/9c+U7WgjpNJAG8dqoSrOc4C3hKX2wOyDu4vlZsSy/KzTCBHTxfEWNnABwURAA8DkpH4UllBpMc/yx9zamf9JNPhrMlZR/bsewlZCjGMgeAjL2VYTGDb+YfhAc9mlqELFypuX62C143eUsWsDpZLVhB8cLROIA1TkFaYG37es3udX4q2E+xu4aQYMMHQLZSD8vu78tsJdUQoAW5aYIX0e7Y5BmG10d24QCpCRC6dwLQnOkcMjbrDr4u+jguc2ZFstSa5Z2AJEZKFAFK7HcgjrcCo0praqESpT6qGOanUuIdObFBOV9so8xcfJRU0Gzl1JDnbPKtJnmaDhy9Rc9IVoKNPKkEyN1KgFfSNKA/ipc8brNHIouE4f2rsKgTonsi55Px0SkuFRfG8QeE1moT1yXN97f8ZpRSknwvauMYLAR8iwaPyGMwrAWRGi5dx1sofHsQ8kUVYhslUrYAGmYyJyYyZmIBh2CvHwfkJpQdKP1YQLNIzktxxF9wkBB6TCUavJa4RjWnkQDvGrnov6Opzgj6egMbNtHOs5Yma8=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(6666004)(316002)(83380400001)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?+9Kq9h6Q4jJ544Hoal39+m3CE/tzGhXBZKy7taM?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4932d410-cddd-4299-5f57-08d93fcfaaec
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:12:20.9272
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Qm9skyo2jG38lXY9rCzAMxlNn2hBAs/A8LOvXWoxM2/Y/BqKUnBRzfEyONhsC/44C3Ftj42OT4XSSTmMo4lnpA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

Introduce an inline wrapper dealing with the non-translated-domain case,
while stripping that logic from the main function, which gets renamed to
p2m_get_gfn_type_access(). HVM-only callers can then directly use the
main function.

Along with renaming the main function also make its and the new inline
helper's GFN parameters type-safe.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -1711,7 +1711,7 @@ static void svm_do_nested_pgfault(struct
         } _d;
 
         p2m = p2m_get_p2m(v);
-        mfn = __get_gfn_type_access(p2m, gfn, &p2mt, &p2ma, 0, NULL, 0);
+        mfn = p2m_get_gfn_type_access(p2m, _gfn(gfn), &p2mt, &p2ma, 0, NULL, 0);
 
         _d.gpa = gpa;
         _d.qualification = 0;
@@ -1736,7 +1736,7 @@ static void svm_do_nested_pgfault(struct
     if ( p2m == NULL )
     {
         p2m = p2m_get_p2m(v);
-        mfn = __get_gfn_type_access(p2m, gfn, &p2mt, &p2ma, 0, NULL, 0);
+        mfn = p2m_get_gfn_type_access(p2m, _gfn(gfn), &p2mt, &p2ma, 0, NULL, 0);
     }
     gdprintk(XENLOG_ERR,
          "SVM violation gpa %#"PRIpaddr", mfn %#lx, type %i\n",
--- a/xen/arch/x86/mm/mem_access.c
+++ b/xen/arch/x86/mm/mem_access.c
@@ -299,8 +299,9 @@ static int set_mem_access(struct domain
     {
         p2m_access_t _a;
         p2m_type_t t;
-        mfn_t mfn = __get_gfn_type_access(p2m, gfn_x(gfn), &t, &_a,
-                                          P2M_ALLOC, NULL, false);
+        mfn_t mfn = p2m_get_gfn_type_access(p2m, gfn, &t, &_a,
+                                            P2M_ALLOC, NULL, false);
+
         rc = p2m->set_entry(p2m, gfn, mfn, PAGE_ORDER_4K, t, a, -1);
     }
 
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -478,12 +478,12 @@ do {
 #undef assign_pointers
 
     /* Now do the gets. */
-    *first_mfn  = __get_gfn_type_access(p2m_get_hostp2m(rval->first_domain),
-                                        gfn_x(rval->first_gfn), first_t,
-                                        first_a, q, NULL, lock);
-    *second_mfn = __get_gfn_type_access(p2m_get_hostp2m(rval->second_domain),
-                                        gfn_x(rval->second_gfn), second_t,
-                                        second_a, q, NULL, lock);
+    *first_mfn  = p2m_get_gfn_type_access(p2m_get_hostp2m(rval->first_domain),
+                                          rval->first_gfn, first_t,
+                                          first_a, q, NULL, lock);
+    *second_mfn = p2m_get_gfn_type_access(p2m_get_hostp2m(rval->second_domain),
+                                          rval->second_gfn, second_t,
+                                          second_a, q, NULL, lock);
 }
 
 static void put_two_gfns(const struct two_gfns *arg)
@@ -936,8 +936,8 @@ static int nominate_page(struct domain *
             if ( !ap2m )
                 continue;
 
-            amfn = __get_gfn_type_access(ap2m, gfn_x(gfn), &ap2mt, &ap2ma,
-                                         0, NULL, false);
+            amfn = p2m_get_gfn_type_access(ap2m, gfn, &ap2mt, &ap2ma,
+                                           0, NULL, false);
             if ( mfn_valid(amfn) && (!mfn_eq(amfn, mfn) || ap2ma != p2ma) )
             {
                 altp2m_list_unlock(d);
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -286,25 +286,13 @@ void p2m_unlock_and_tlb_flush(struct p2m
         mm_write_unlock(&p2m->lock);
 }
 
-mfn_t __get_gfn_type_access(struct p2m_domain *p2m, unsigned long gfn_l,
-                    p2m_type_t *t, p2m_access_t *a, p2m_query_t q,
-                    unsigned int *page_order, bool_t locked)
-{
 #ifdef CONFIG_HVM
-    mfn_t mfn;
-    gfn_t gfn = _gfn(gfn_l);
 
-    if ( !p2m || !paging_mode_translate(p2m->domain) )
-    {
-#endif
-        /*
-         * Not necessarily true, but for non-translated guests we claim
-         * it's the most generic kind of memory.
-         */
-        *t = p2m_ram_rw;
-        return _mfn(gfn_l);
-#ifdef CONFIG_HVM
-    }
+mfn_t p2m_get_gfn_type_access(struct p2m_domain *p2m, gfn_t gfn,
+                              p2m_type_t *t, p2m_access_t *a, p2m_query_t q,
+                              unsigned int *page_order, bool_t locked)
+{
+    mfn_t mfn;
 
     /* Unshare makes no sense without populate. */
     if ( q & P2M_UNSHARE )
@@ -329,8 +317,8 @@ mfn_t __get_gfn_type_access(struct p2m_d
          * Try to unshare. If we fail, communicate ENOMEM without
          * sleeping.
          */
-        if ( mem_sharing_unshare_page(p2m->domain, gfn_l) < 0 )
-            mem_sharing_notify_enomem(p2m->domain, gfn_l, false);
+        if ( mem_sharing_unshare_page(p2m->domain, gfn_x(gfn)) < 0 )
+            mem_sharing_notify_enomem(p2m->domain, gfn_x(gfn), false);
         mfn = p2m->get_entry(p2m, gfn, t, a, q, page_order, NULL);
     }
 
@@ -343,9 +331,10 @@ mfn_t __get_gfn_type_access(struct p2m_d
     }
 
     return mfn;
-#endif
 }
 
+#endif /* CONFIG_HVM */
+
 void __put_gfn(struct p2m_domain *p2m, unsigned long gfn)
 {
     if ( !p2m || !paging_mode_translate(p2m->domain) )
@@ -377,7 +366,7 @@ struct page_info *p2m_get_page_from_gfn(
     {
         /* Fast path: look up and get out */
         p2m_read_lock(p2m);
-        mfn = __get_gfn_type_access(p2m, gfn_x(gfn), t, a, 0, NULL, 0);
+        mfn = p2m_get_gfn_type_access(p2m, gfn, t, a, 0, NULL, 0);
         if ( p2m_is_any_ram(*t) && mfn_valid(mfn)
              && !((q & P2M_UNSHARE) && p2m_is_shared(*t)) )
         {
@@ -1666,8 +1655,8 @@ int altp2m_get_effective_entry(struct p2
         unsigned int page_order;
         int rc;
 
-        *mfn = __get_gfn_type_access(hp2m, gfn_x(gfn), t, a,
-                                     P2M_ALLOC | P2M_UNSHARE, &page_order, 0);
+        *mfn = p2m_get_gfn_type_access(hp2m, gfn, t, a, P2M_ALLOC | P2M_UNSHARE,
+                                       &page_order, 0);
 
         rc = -ESRCH;
         if ( !mfn_valid(*mfn) || *t != p2m_ram_rw )
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -453,10 +453,27 @@ void p2m_unlock_and_tlb_flush(struct p2m
  * After calling any of the variants below, caller needs to use
  * put_gfn. ****/
 
-mfn_t __nonnull(3, 4) __get_gfn_type_access(
-    struct p2m_domain *p2m, unsigned long gfn, p2m_type_t *t,
+mfn_t __nonnull(3, 4) p2m_get_gfn_type_access(
+    struct p2m_domain *p2m, gfn_t gfn, p2m_type_t *t,
     p2m_access_t *a, p2m_query_t q, unsigned int *page_order, bool_t locked);
 
+static inline mfn_t __nonnull(3, 4) _get_gfn_type_access(
+    struct p2m_domain *p2m, gfn_t gfn, p2m_type_t *t,
+    p2m_access_t *a, p2m_query_t q, unsigned int *page_order, bool_t locked)
+{
+    if ( !p2m || !paging_mode_translate(p2m->domain) )
+    {
+        /*
+         * Not necessarily true, but for non-translated guests we claim
+         * it's the most generic kind of memory.
+         */
+        *t = p2m_ram_rw;
+        return _mfn(gfn_x(gfn));
+    }
+
+    return p2m_get_gfn_type_access(p2m, gfn, t, a, q, page_order, locked);
+}
+
 /* Read a particular P2M table, mapping pages as we go.  Most callers
  * should _not_ call this directly; use the other get_gfn* functions
  * below unless you know you want to walk a p2m that isn't a domain's
@@ -468,7 +485,7 @@ static inline mfn_t __nonnull(3, 4) get_
     struct p2m_domain *p2m, unsigned long gfn, p2m_type_t *t,
     p2m_access_t *a, p2m_query_t q, unsigned int *page_order)
 {
-    return __get_gfn_type_access(p2m, gfn, t, a, q, page_order, true);
+    return _get_gfn_type_access(p2m, _gfn(gfn), t, a, q, page_order, true);
 }
 
 /* General conversion function from gfn to mfn */
@@ -509,7 +526,8 @@ static inline mfn_t get_gfn_query_unlock
                                            p2m_type_t *t)
 {
     p2m_access_t a;
-    return __get_gfn_type_access(p2m_get_hostp2m(d), gfn, t, &a, 0, NULL, 0);
+    return _get_gfn_type_access(p2m_get_hostp2m(d), _gfn(gfn), t, &a, 0,
+                                NULL, 0);
 }
 
 /* Atomically look up a GFN and take a reference count on the backing page.



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:12:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:12:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150500.278257 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RDL-000192-Cd; Mon, 05 Jul 2021 16:12:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150500.278257; Mon, 05 Jul 2021 16:12:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RDL-00018v-9Q; Mon, 05 Jul 2021 16:12:55 +0000
Received: by outflank-mailman (input) for mailman id 150500;
 Mon, 05 Jul 2021 16:12:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RDK-00018D-Q5
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:12:54 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d9afd69d-ddab-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:12:53 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2172.outbound.protection.outlook.com [104.47.17.172])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-19-EvxtuWEWMRmLX0KnF-uQ7w-1; Mon, 05 Jul 2021 18:12:52 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 16:12:51 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:12:51 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0009.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.21 via Frontend Transport; Mon, 5 Jul 2021 16:12:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d9afd69d-ddab-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501573;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=cGRUgXnfDy3yI0GcEOCYKjOGDUjbiMY8tUQFdNz76XI=;
	b=dJz7Z8Jg/eoNLIgmzUQ964dtmc+nXK3bgFQoepPuk0vH51yGpUiHn/Yfx662lwvefKfTNM
	MasWkTVTX9oa38enElTYtIJoIPyhcB7+KJPTZQmjllD8mfqbK6Tr/tVhBR1eDc/ogQcMQc
	K0HM/b6mR9cGV+l8qovcbcLp4aIulj4=
X-MC-Unique: EvxtuWEWMRmLX0KnF-uQ7w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ksJ1h3GtZLICOV47NlB5369a+kihIa891KUD3hOQscAYUVG3aHtktux31ton1wh39Op1JS9ULKiBlniUFLSqhOJVdhkfrG37Tz0kUvvcdmnxIdS45ExKkEJmpmwqmh+XwGPpWeKBTqcXxudFJJhjyyyeKVHAKQvXQIEjjkHbZ2ohIZjslmZggQRhneyfAHgv3CloQ582SYWwXDYIjwtXFENRXIQ/eMSL7uTZPP55J+ud7N3ZWvLKWH86V3DsP2ZH65RhmJ1OxiZ6SWn18GtLCkOIq1VumKLDtlBMPAX2w6mXytkmUhIt/oRAYD4fMEN15iFOnzlwJJSR0QE8Ypzg6A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cGRUgXnfDy3yI0GcEOCYKjOGDUjbiMY8tUQFdNz76XI=;
 b=F6bUTYRKr1ceWjv30+NJGLtEpTSJGl677jttdWXPvfgTcP899zBB3ewO/2UEqwU3DgeaeeBJNPIvCGIIoJTCikN8sq3k7I5iO08LK/Wb2BE2oTqi+sF2aG7FV2XE/gVLNKutxBjeQAOd2nEUKv1VOEugtwBEm8ust7Ko5oCCX+CV5dfUfQQBk0FbbxxSX7krrWE/9p5qMFkljxkcp0qmn/GdP0U77O0WH3DXHFh8BBAucif6okwoMMsuX7vFV43nanLFyD4ChDwWQLNLPh6y/1iDCfl2YBMN+pX4GTyYSyRXn1PlFGfl/C9Vb621cV/2GuUccYU0vxQZvrIjXu70CQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 12/16] x86/p2m: re-arrange {,__}put_gfn()
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <61ea9272-c4ac-c2da-e1da-8b8930d85264@suse.com>
Date: Mon, 5 Jul 2021 18:12:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2P264CA0009.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::21)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c25561a7-ae83-4b79-6ba7-08d93fcfbcdd
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB28291AB75E5D82BB7F6313C4B31C9@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	8L1Cj+BjdaJ+dYFgX9le8V9sYd9NlvvW7RliphAZTMGa7zjdyYr0eg1BuOcN3OI/5kBNnABC5u2Nv21ZjJBVNVKX940555uDwGqgYRi5nniQSMRhAwadFit5RAa07fVbKbq7ufmchpbMc22rlVwhbSVX2ZbZwWxNRCeCULTDH78tds2LZ5PZgTaOmoRx+8WHkG5JcnblQPpQM6leN6NbAXzYmWP2vk2PvgHCejktJYyfHXxDg7Bxd4FO/4hVGtjTERYjxCL2Arxbc4Ag8pRgliWOJGfz5iRHbiAIVNY1AKKFnSxtw1DBEHOUdqNME+22dlwthwRPjawdvC1wYklm1ISyGjHvWCLu658ArtgAvx0WOgX2D6+hSeJ+IBO1YmRq18IoYC9NevH1jeE6K3eGIPTlNKobgsiDgXVUt3Q25fKsnt+iLXyKbxCmip6mkzWY+frL1qGz2iGQbArw+DLDQICh114GCDTV+JL6Rw6d+wKJ7UIBrAXExJnH6Y1Uxrn8ipm9TgMNXEjvl9jx6YhndiKgiFV3LT95sBqEb//7JlUi14yJLTEZoxi9GrE42/HD8YDc7Fa2Qo5ziqnt3m7K04d5/mJnoEsuZ30qW4Q4GMzyz8OAH9sbZFjPazj0eLUpoH4Qio3uT8cIV8QahwyBhZhqVLxyTFPEk74477jAFVdtZ+W8FJ1hi6C2lwlA7Ozkp1Vze6l+oSagRK/Vp1v9G/WCb37cFecVMqsgLRmYLDY=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(316002)(83380400001)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?i2Hon1pGNSulP1QagqG7Odrxnqf/N0UAzOY6ESu?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c25561a7-ae83-4b79-6ba7-08d93fcfbcdd
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:12:51.0073
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: SdW5n36p19hyxCs685t01pTf5ShDVRLmQ5QnqqscBsCVSpoL9IQ5YjXbn7I+/zTQuYrK+vsEy82TmEPAkXW/mw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

All explicit callers of __put_gfn() are in HVM-only code and hold a valid
P2M pointer in their hands. Move the paging_mode_translate() check out of
there into put_gfn(), renaming __put_gfn() and making its GFN parameter
type-safe.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -1969,9 +1969,9 @@ int hvm_hap_nested_page_fault(paddr_t gp
              * altp2m_list lock.
              */
             if ( p2m != hostp2m )
-                __put_gfn(p2m, gfn);
+                p2m_put_gfn(p2m, _gfn(gfn));
             p2m_change_type_one(currd, gfn, p2m_ram_logdirty, p2m_ram_rw);
-            __put_gfn(hostp2m, gfn);
+            p2m_put_gfn(hostp2m, _gfn(gfn));
 
             goto out;
         }
@@ -1993,8 +1993,8 @@ int hvm_hap_nested_page_fault(paddr_t gp
 
  out_put_gfn:
     if ( p2m != hostp2m )
-        __put_gfn(p2m, gfn);
-    __put_gfn(hostp2m, gfn);
+        p2m_put_gfn(p2m, _gfn(gfn));
+    p2m_put_gfn(hostp2m, _gfn(gfn));
  out:
     /*
      * All of these are delayed until we exit, since we might
--- a/xen/arch/x86/mm/hap/nested_hap.c
+++ b/xen/arch/x86/mm/hap/nested_hap.c
@@ -167,7 +167,7 @@ nestedhap_walk_L0_p2m(struct p2m_domain
 direct_mmio_out:
     *L0_gpa = (mfn_x(mfn) << PAGE_SHIFT) + (L1_gpa & ~PAGE_MASK);
 out:
-    __put_gfn(p2m, L1_gpa >> PAGE_SHIFT);
+    p2m_put_gfn(p2m, gaddr_to_gfn(L1_gpa));
     return rc;
 }
 
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -333,21 +333,13 @@ mfn_t p2m_get_gfn_type_access(struct p2m
     return mfn;
 }
 
-#endif /* CONFIG_HVM */
-
-void __put_gfn(struct p2m_domain *p2m, unsigned long gfn)
+void p2m_put_gfn(struct p2m_domain *p2m, gfn_t gfn)
 {
-    if ( !p2m || !paging_mode_translate(p2m->domain) )
-        /* Nothing to do in this case */
-        return;
-
-    ASSERT(gfn_locked_by_me(p2m, gfn));
+    ASSERT(gfn_locked_by_me(p2m, gfn_x(gfn)));
 
-    gfn_unlock(p2m, gfn, 0);
+    gfn_unlock(p2m, gfn_x(gfn), 0);
 }
 
-#ifdef CONFIG_HVM
-
 /* Atomically look up a GFN and take a reference count on the backing page. */
 struct page_info *p2m_get_page_from_gfn(
     struct p2m_domain *p2m, gfn_t gfn,
@@ -2086,7 +2078,7 @@ int p2m_altp2m_propagate_change(struct d
             else
             {
                 /* At least 2 altp2m's impacted, so reset everything */
-                __put_gfn(p2m, gfn_x(gfn));
+                p2m_put_gfn(p2m, gfn);
 
                 for ( i = 0; i < MAX_ALTP2M; i++ )
                 {
@@ -2110,7 +2102,7 @@ int p2m_altp2m_propagate_change(struct d
                 ret = rc;
         }
 
-        __put_gfn(p2m, gfn_x(gfn));
+        p2m_put_gfn(p2m, gfn);
     }
 
     altp2m_list_unlock(d);
@@ -2195,7 +2187,7 @@ void audit_p2m(struct domain *d,
              * blow away the m2p entry. */
             set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY);
         }
-        __put_gfn(p2m, gfn);
+        p2m_put_gfn(p2m, _gfn(gfn));
 
         P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx\n",
                        mfn, gfn, mfn_x(p2mfn));
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -503,9 +503,16 @@ static inline mfn_t __nonnull(3) get_gfn
                                               P2M_ALLOC | P2M_UNSHARE)
 
 /* Will release the p2m_lock for this gfn entry. */
-void __put_gfn(struct p2m_domain *p2m, unsigned long gfn);
+void p2m_put_gfn(struct p2m_domain *p2m, gfn_t gfn);
 
-#define put_gfn(d, gfn) __put_gfn(p2m_get_hostp2m((d)), (gfn))
+static inline void put_gfn(struct domain *d, unsigned long gfn)
+{
+    if ( !paging_mode_translate(d) )
+        /* Nothing to do in this case */
+        return;
+
+    p2m_put_gfn(p2m_get_hostp2m(d), _gfn(gfn));
+}
 
 /* The intent of the "unlocked" accessor is to have the caller not worry about
  * put_gfn. They apply to very specific situations: debug printk's, dumps 



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:13:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:13:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150507.278269 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0REC-0001t8-Q1; Mon, 05 Jul 2021 16:13:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150507.278269; Mon, 05 Jul 2021 16:13:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0REC-0001t1-Mc; Mon, 05 Jul 2021 16:13:48 +0000
Received: by outflank-mailman (input) for mailman id 150507;
 Mon, 05 Jul 2021 16:13:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0REB-0001sl-7D
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:13:47 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f8ab7dee-ddab-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:13:45 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2168.outbound.protection.outlook.com [104.47.17.168])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-36-xUorxK5lMtOQQp4frzxBXQ-1; Mon, 05 Jul 2021 18:13:43 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 16:13:42 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:13:42 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0051.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1d::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:13:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f8ab7dee-ddab-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501624;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=biaX5SsQmY+gPFRyLqxO2anEddaixa5bVWAuEYf8xbE=;
	b=PCfPT0d1pJrfbBm+EDnfoN+cFUDQcO6BUUgvzub3+ct0Ae/EzXSaLxvnXifnJXepci1dmd
	mvJFXKV4OSf1wmhlEXlJQ/ZEBTwJDaNwKsDI9X9dXRn5XTbwfu30xqtcdhaAi9W8XHqsxf
	qGzYtIBU0RJJpD1YfE/Y4xppfuG8/Ks=
X-MC-Unique: xUorxK5lMtOQQp4frzxBXQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YHjrJMkWOlKW0atV6/tIGhbejcpcYsg6WcL/qLaoY6R0p04IFDvWittu43xBdPy7BKoTKFa54uvbvYVse+OIwgen2s2HC8+DLKfX0+wPFu9S8TpecSd+8WTYrSivg9YiUW7FijxmfwfgdPo3US51s4eEPcKAzSaG4eYjRuGBKF87M67PSsH3MUkX5SXkEyOpeXajgyY+2lW/S/oH9p5sXExEqMnZgIchjv5eFOcuqldtx648IL5Mbo+aespZFi7a25n6hcvILsJLb7sIOe7X4fJi6EZy2A+qM86N9jkt75XMtOJVpBT44aeAd8t+vr7XT6oU+KzIwaL+GlF/8StKcA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=biaX5SsQmY+gPFRyLqxO2anEddaixa5bVWAuEYf8xbE=;
 b=BhmIRUkmTymks4xRaWgAgc4HRlbV+ve6Yb0scmxyuxHYvg0+5SXLupVe5Cd7oUful46m4P79PLOFyDdmwgYwUPGDsm2zG5MUK509COTwudGs7XNiPuA1nb9mDZk1qTQv/LmKyDQxHY+le54P39rFphJz4VeVulD5LtYxCFvMQXDxnT8DGjyptT5VuJUT0S13qXFIqGTXGvkBP4uM+JAmgT2ypJiR6d2k8dN6wi6Sh7H+ZzA675vtlyZyB3pKVcPF0SBuES8zU5bYe2tVdnfxr9Mzmzo9XsGAmnVKeXrLAJ9elIHxrK5c4jlLXiy1Mk0MjRXn8JuBl4M+mDUS1/KCYA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 13/16] shr_pages field is MEM_SHARING-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <ec21ca25-73bc-ddb7-8674-b7a59adb441c@suse.com>
Date: Mon, 5 Jul 2021 18:13:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0051.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1d::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7d9a75ad-11ed-4b60-6e92-08d93fcfdb6e
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2829D9BDCDB5EB6EC2915DFAB31C9@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	3SoEema9qzsveH6aBAU6SPiY2JSKP0rgPrfvuG/4TlS0KK0+swEjihV7bFz4IUXtVw9tI3xcMx4M8tajD3hAgUDQTQ88Bv2kHznkrwnbHgLQCgTgyBT9Lljiq36U1a8wGKxcnr9g4s8MeizW9Unobic6PlOi37vWQ1iGocaQpDaDTm1LR8DONS/mJ0eiOqsmCjFRCeIspPb8EvzP3423ZMBQt7VUxl3/nG347EqabrGHJSFORLJVbQFMA5A6ugM9PHTPEiY59r9Myiot/DGlIkkkDCTNbO86j7BLt3kA7niUQQpuVFNvXAYy8IEvrE6Nw+ueMyPRD16Nwk15N3bn7ow77QErQDvPmf3rTr5OTOYSqs1+UVY+/F0xCkWS3Op6d13W+xTXCR2X5POuSBMsIUgDZ8JkktIXwVerE0EyqISu9w6uGs4cEEyUyYsydECoXO7wAC/ORZGKqM5yDmL+2l7r7yYlmCvKF8BopuTMFPCxtzMept92BtQNlMp/WCH+UO6ROT0ckP526mP1Gw/VwWlnrBmgbrB65yG9hCAAux0M/i1KyctA+2WmSxw27LhmHTxh54k9nJo5Xwv1bcrA5r0mOFZwJmlzs6edJnGg/7Mf2siYRTKpIzSb0acZEBxkBkWhT/pPcxn1xG9I20Um+EbUsgRYq8pha1e5m8uGEKCEFwWOU23lsCogfR3xI5zM32pFBjnfhOPqknqB8kWQXiB1mD+ykj0eKOzIhUPz/yw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(316002)(83380400001)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?MVdUR0RHWDk1K082RlVNSklLczg0YVRzS2lOVXJSbVFMVlZwY0lzdWhzSXNZ?=
 =?utf-8?B?TkFCVDJPRS96SXFzcVorS01BRTZ0Wks2bUFHZDJOZnRySEU1bEpuckJTcTJX?=
 =?utf-8?B?TDdGZHpKM2poNU13d0xBNk41V1RybmtkVXdISWViaTloekd4YlJBWUJvdVJk?=
 =?utf-8?B?c3VIN1drVDNMSVNXZVJGQ0ZXOVMwcmVsMUVvUFBOVkJMY1Z5YzBHNlNJVHFj?=
 =?utf-8?B?VHhEa09KT04vQUVEU0hqMkdYWnVQOWM5Nm83UkdGTGQ5OFNrS0RkK3BOcFc0?=
 =?utf-8?B?MFpYUXlyc015YWpvcmUyRmFsOXY2eVZyMDBBa2xaUEpxdW5QQlFIMHJCSWt5?=
 =?utf-8?B?VzhKdFZvYVcxemhMTkRXSkJtZysxR20zQWRCTnVZaXVvMGQwaW5CRjBEcnJR?=
 =?utf-8?B?dXZUenN0cGVWaitKZ1B4bFREVGRlM0dzYXV6ZnNVZWNNeDJ3bitRWlVLREtJ?=
 =?utf-8?B?dXZISTQ2Qm5zV3FaZ3JZS3JDRHdiM0w4eml2YlRXc2duL0d5L1pTWHNkUWVa?=
 =?utf-8?B?Wk92cEQvTENxUEpNdFFkL3FCN3dDY3l4VVRjS2liOFVwWjVFbENnMDgzYVR3?=
 =?utf-8?B?NE9wNldubitwRmJoa2k0QWYvSmJZaU1Kb0xzc2VRWUxBVVRjRXBrdmd4cmFV?=
 =?utf-8?B?Qm85NFRtWWJpZmI0dWx5WjRHTWwrNjVDazZLSTFocGcxT2NlRGluSGY2SXIy?=
 =?utf-8?B?L2d5VUtDYzQzeUEyV0Y2R0dxU3NkWVRWUFFlMkRqSDFyaVF2cXI1K3hxQjlW?=
 =?utf-8?B?Nm5reFFXN01odHJwSkpQVy9BMk1YWExIdTB5UU1jUXorVzB2OVpmTWIzbnA5?=
 =?utf-8?B?Nzk0elJ0Q0FsQkZ6S0RBcjcvSDlxSFhGY25VWmIyb2FDUmlnYjJncEU2dnR6?=
 =?utf-8?B?aTFzdS84QVdnWWtWT0dQZkRISjM5bTc0QlBsdkpJTTlsMm1BdHAzNVRsaFVk?=
 =?utf-8?B?NDZzM3YwZjUwTWVRQnJ1b2hoZ0dvTFNPeTRSRm5CZnIrRFMwZEZmY1ZuMTZX?=
 =?utf-8?B?WldlaVhTV3N5eDI4Uk5UMFB1Umh3Z29uNERaalhWVmRpeE5sRVhUUVE3UkNq?=
 =?utf-8?B?eU5DbHBkZ0tmY2EzSHNTNURFM2JVZnRha1lKQzRYdGMrZHErb1lIZGVaVHN1?=
 =?utf-8?B?UmlweXZrTTh1YUFCa01yZVozcEVsZmRlV0JQUlpmRjQrTk1DM21YbldoUG9U?=
 =?utf-8?B?TUpOUGJFbUVTTFVFZDNzc0pyQmhIWkJjcHh3T0JINXBYL3l4UkNjTzB4aGtS?=
 =?utf-8?B?bzhWY2plOUpybmttTVhCY0l6RCtmNnZiNk9TRStsRmtHZkIreDdoVWg2VW5r?=
 =?utf-8?B?MlRCc1ZPUGdpb1pQaXd1MTJlS2V5NnFiWDFJUkFuVkhxbFIwak5rNDVTTi83?=
 =?utf-8?B?TTdrV1lZZUhUb2NISmRnWE1TVGlhTzVqLzliOTBvNEJscEtOL0c3NXpDRmJ6?=
 =?utf-8?B?azVrZjRadDNpb1VIYXAxMmxySlplMW9nbXhQRUY1N1FCek5QWDVMRHBVZnR6?=
 =?utf-8?B?cFo5c1NWTDYvVlQ4R0lTbzE2MUI4OHl4Zk1rWjJBRHRoWFJRVjRsbWxnRGVn?=
 =?utf-8?B?dHArOUpzRVduVTJtZy9tWERLQ2lML0pTK0ExU0UvY1MwWXlUR2pwQjEralJr?=
 =?utf-8?B?bGVFaFhHbDZ5V3VNVmtKZS9oWWZDcW1PV3ZnZ1ArWlJWRzR6bDBDZEZHMENV?=
 =?utf-8?B?bTh3bGovMkN5S2l2a0I5VzFaMThMU3UwTXluRFZWM1FXbnpEM2pOanluSC94?=
 =?utf-8?Q?niAgvylicZ/ygntfKPgX8ZpWPhjzd7w+fOF2Oyt?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7d9a75ad-11ed-4b60-6e92-08d93fcfdb6e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:13:42.2932
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 3VHQv4+gLQmlrhwxC2FJBLrxMNW7prRSD7DCFzKrNFGfbxqMLReTNxsisnUQYd0Lm95diYXgvrf3hdbr7U+T2w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

Conditionalize it and its uses accordingly. The main goal though is to
demonstrate that x86's p2m_teardown() is now empty when !HVM, which in
particular means the last remaining use of p2m_lock() in this cases goes
away.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
I was on the edge of introducing a helper for atomic_read(&d->shr_pages)
but decided against because of dump_domains() not being able to use it
sensibly (I really want to omit the output field altogether there when
!MEM_SHARING).

--- a/xen/arch/x86/mm/p2m-basic.c
+++ b/xen/arch/x86/mm/p2m-basic.c
@@ -159,7 +159,6 @@ void p2m_teardown(struct p2m_domain *p2m
 {
 #ifdef CONFIG_HVM
     struct page_info *pg;
-#endif
     struct domain *d;
 
     if ( !p2m )
@@ -169,16 +168,17 @@ void p2m_teardown(struct p2m_domain *p2m
 
     p2m_lock(p2m);
 
+#ifdef CONFIG_MEM_SHARING
     ASSERT(atomic_read(&d->shr_pages) == 0);
+#endif
 
-#ifdef CONFIG_HVM
     p2m->phys_table = pagetable_null();
 
     while ( (pg = page_list_remove_head(&p2m->pages)) )
         d->arch.paging.free_page(d, pg);
-#endif
 
     p2m_unlock(p2m);
+#endif
 }
 
 void p2m_final_teardown(struct domain *d)
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -109,7 +109,11 @@ void getdomaininfo(struct domain *d, str
     info->tot_pages         = domain_tot_pages(d);
     info->max_pages         = d->max_pages;
     info->outstanding_pages = d->outstanding_pages;
+#ifdef CONFIG_MEM_SHARING
     info->shr_pages         = atomic_read(&d->shr_pages);
+#else
+    info->shr_pages         = 0;
+#endif
     info->paged_pages       = atomic_read(&d->paged_pages);
     info->shared_info_frame =
         gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info))));
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -274,9 +274,16 @@ static void dump_domains(unsigned char k
         printk("    refcnt=%d dying=%d pause_count=%d\n",
                atomic_read(&d->refcnt), d->is_dying,
                atomic_read(&d->pause_count));
-        printk("    nr_pages=%d xenheap_pages=%d shared_pages=%u paged_pages=%u "
-               "dirty_cpus={%*pbl} max_pages=%u\n",
-               domain_tot_pages(d), d->xenheap_pages, atomic_read(&d->shr_pages),
+        printk("    nr_pages=%u xenheap_pages=%u"
+#ifdef CONFIG_MEM_SHARING
+               " shared_pages=%u"
+#endif
+               " paged_pages=%u"
+               " dirty_cpus={%*pbl} max_pages=%u\n",
+               domain_tot_pages(d), d->xenheap_pages,
+#ifdef CONFIG_MEM_SHARING
+               atomic_read(&d->shr_pages),
+#endif
                atomic_read(&d->paged_pages), CPUMASK_PR(d->dirty_cpumask),
                d->max_pages);
         printk("    handle=%02x%02x%02x%02x-%02x%02x-%02x%02x-"
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -385,7 +385,11 @@ struct domain
     unsigned int     outstanding_pages; /* pages claimed but not possessed */
     unsigned int     max_pages;         /* maximum value for domain_tot_pages() */
     unsigned int     extra_pages;       /* pages not included in domain_tot_pages() */
+
+#ifdef CONFIG_MEM_SHARING
     atomic_t         shr_pages;         /* shared pages */
+#endif
+
     atomic_t         paged_pages;       /* paged-out pages */
 
     /* Scheduling. */



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:14:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:14:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150513.278279 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0REm-0002Ry-2g; Mon, 05 Jul 2021 16:14:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150513.278279; Mon, 05 Jul 2021 16:14:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0REl-0002Rr-Vh; Mon, 05 Jul 2021 16:14:23 +0000
Received: by outflank-mailman (input) for mailman id 150513;
 Mon, 05 Jul 2021 16:14:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0REk-0002Rj-RL
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:14:22 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0e652e46-ddac-11eb-844d-12813bfff9fa;
 Mon, 05 Jul 2021 16:14:21 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2172.outbound.protection.outlook.com [104.47.17.172])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-36-OE61xHFRP1q8W0wKZCZoCA-1; Mon, 05 Jul 2021 18:14:19 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 16:14:18 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:14:18 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0084.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1e::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.12 via Frontend Transport; Mon, 5 Jul 2021 16:14:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e652e46-ddac-11eb-844d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501660;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=SE8Wia9zm61iMhrCrdaQ5NA8h1Pf4RFF97weGVEt5BA=;
	b=Yb8yBTDb+NQuyVLclt4YehGLeraLfF5zELXNUAs7KI36Bzz03QROZVh3Tl8OQXITUif2d7
	fs0gCwwZr5505Z+YREFUVjZVC+huwCS7bJHyRqbpMjh0G/U1z0suUVbiaWUZjwu0gFUS6q
	UR66xk8tU2CcpUj+17B47EP2aTFtbSk=
X-MC-Unique: OE61xHFRP1q8W0wKZCZoCA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cuAjUIEwdgZp0zcXUX35ro+FoVIW3GjIUk02XXdU7PwL60awowAeSfyH3p+6jRpWBkz32iCJe8K3jXYgkHtTKHWQBxxyaTQGqj+j7XQpxS/RLAIul7wQrl/uj4dqgjbkPY8Naw9S1ruG8MyrIud0B93/Jvz6FsDuTgZ/WVrMKZ7AXLZ0Mml6vz5s9ur4ePpDg7k7o5UH0sim+qbsFewNgNashAnb3U1Uekkv6L7QPreVfKSafxbiCx7O5yTgbfRDzxrdx59ta5JK3GwjoMvUUSWq02EfDenwON7cAfgb71WTeHpQGjUKkyXL9SaV0opqvzzXUbm5r51J4QUdeM/f6A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=SE8Wia9zm61iMhrCrdaQ5NA8h1Pf4RFF97weGVEt5BA=;
 b=Gh5nyEls9IdAabiPi3v+agXhVcClU8qGz8Xt04Do1rMM2FZ2atuyEW6QWPBmX6EvRhWVbbl9N8vuBpIrNHzmdVcvLbThURsDHtVJh39rgfeDaqF1dHvCwkr1x/aiACz7gTEfTgGW6pF1TOQdRn5D/l9N4zSATNxNwGk23AsSu5kUlAhtKDxnt2QL9SyH4Te6YrCSrvuA7mBj5yp1yPuw5iKT4SvXLhpHQ5YW2UnTWACBZlM2p2c+X2lkcOS+zRtyOqLYwEmIomXAQhoMzyBLs9fvGMccCbuThz72L17rnCHQkF7IO63/r/4MOwpmdBhi8ahNJ36m4KIa8bW7Fafggg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 14/16] paged_pages field is MEM_PAGING-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <ab136038-0242-086c-9e67-02c47e1db3e0@suse.com>
Date: Mon, 5 Jul 2021 18:14:17 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR0P281CA0084.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1e::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 9ac3251a-5d68-4396-5a9a-08d93fcff124
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB282929B3A219C161C84AD21BB31C9@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ns1tYEUSGRJ+NDUmSLhzDmSiVwqFXjy8snJjKEOqc1C7zVNCCaELy4OiXZUx84klKxDgP16aINfAmqn8zXv6THQAH5nYWnzC3nvvOuuNnuO8eF4pLlkiRo0xiu871s8+sliomkAnJQnYqdWdpGji3yYCVAGknYqvw8jmrRQeXwGgKfpcUd76mdp8ML8wEV+rqZr8W2H3eYvQiV1wdirOP+5GutmihGoJAGRJ2zmiayNMFComrQ+0mRcfVMxBJoNW1oQg5GNeePgdzv+jNKh+dJj6xtGG3v0Ep4KgYZukdgMVrU+LY+wpIvUgjEw1WW2J1R3ISZBY9qoG7v8ziEhKclcxGig6KihXHYF8Gim+KPNs6DF6yOoLlByT6I1LpoehqNYNqeolNgtr1ZPZXqjE/Qks4LYDQgCTxmTTTHVEFucQ1bUVz3zxA9DMjOyGhLmTeeOP5AMOoDcOs37IEyGQe2j5gd/zoYCOeorBdDisl0R+HMO15dnm+TDL+Xahsvp6oSErOnRaQD8bI4l5+AWlrDnukvJ8ymsWrtCFXJhfMvf4YOYsB7cIzUj2HV+Zk/VHPlXeeo2KFMX/SsK6zSMQQGbeuiIH0ce85mb2g1yZBcBB/BXtqRMDdHQQ1V0ORZX+7r+2BcUrJgezkCmq5vR9CNoDdB6JtRASq04LtNAJHw9l6ztf2QBldFpkipMSSnuWNQFCsGSlfoXn5J1JjoqbmGgj5q9TqIEp4Em2VE3uryI=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(316002)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 9ac3251a-5d68-4396-5a9a-08d93fcff124
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:14:18.7336
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 7J79D1wJi9TCx7nxk4QDPnugR5HQQ81UdQx2OpXzRgDBPFlohSdWByPjxvCwgNxPqsto/x3qFV5UxQtMsccSuQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

Conditionalize it and its uses accordingly.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
I was on the edge of introducing a helper for
atomic_read(&d->paged_pages) but decided against because of
dump_domains() not being able to use it sensibly (I really want to omit
the output field altogether there when !MEM_PAGING).

--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -1213,6 +1213,7 @@ int add_to_physmap(struct domain *sd, un
     }
     else
     {
+#ifdef CONFIG_MEM_PAGING
         /*
          * There is a chance we're plugging a hole where a paged out
          * page was.
@@ -1238,6 +1239,7 @@ int add_to_physmap(struct domain *sd, un
                 put_page(cpage);
             }
         }
+#endif
     }
 
     atomic_inc(&nr_saved_mfns);
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -666,11 +666,13 @@ p2m_add_page(struct domain *d, gfn_t gfn
             /* Count how man PoD entries we'll be replacing if successful */
             pod_count++;
         }
+#ifdef CONFIG_MEM_PAGING
         else if ( p2m_is_paging(ot) && (ot != p2m_ram_paging_out) )
         {
             /* We're plugging a hole in the physmap where a paged out page was */
             atomic_dec(&d->paged_pages);
         }
+#endif
     }
 
     /* Then, look for m->p mappings for this range and deal with them */
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -114,7 +114,11 @@ void getdomaininfo(struct domain *d, str
 #else
     info->shr_pages         = 0;
 #endif
+#ifdef CONFIG_MEM_PAGING
     info->paged_pages       = atomic_read(&d->paged_pages);
+#else
+    info->paged_pages       = 0;
+#endif
     info->shared_info_frame =
         gfn_x(mfn_to_gfn(d, _mfn(virt_to_mfn(d->shared_info))));
     BUG_ON(SHARED_M2P(info->shared_info_frame));
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -278,14 +278,18 @@ static void dump_domains(unsigned char k
 #ifdef CONFIG_MEM_SHARING
                " shared_pages=%u"
 #endif
+#ifdef CONFIG_MEM_PAGING
                " paged_pages=%u"
+#endif
                " dirty_cpus={%*pbl} max_pages=%u\n",
                domain_tot_pages(d), d->xenheap_pages,
 #ifdef CONFIG_MEM_SHARING
                atomic_read(&d->shr_pages),
 #endif
-               atomic_read(&d->paged_pages), CPUMASK_PR(d->dirty_cpumask),
-               d->max_pages);
+#ifdef CONFIG_MEM_PAGING
+               atomic_read(&d->paged_pages),
+#endif
+               CPUMASK_PR(d->dirty_cpumask), d->max_pages);
         printk("    handle=%02x%02x%02x%02x-%02x%02x-%02x%02x-"
                "%02x%02x-%02x%02x%02x%02x%02x%02x vm_assist=%08lx\n",
                d->handle[ 0], d->handle[ 1], d->handle[ 2], d->handle[ 3],
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -390,7 +390,9 @@ struct domain
     atomic_t         shr_pages;         /* shared pages */
 #endif
 
+#ifdef CONFIG_MEM_PAGING
     atomic_t         paged_pages;       /* paged-out pages */
+#endif
 
     /* Scheduling. */
     void            *sched_priv;    /* scheduler-specific data */



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:14:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:14:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150517.278291 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RFD-000339-DY; Mon, 05 Jul 2021 16:14:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150517.278291; Mon, 05 Jul 2021 16:14:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RFD-000332-9p; Mon, 05 Jul 2021 16:14:51 +0000
Received: by outflank-mailman (input) for mailman id 150517;
 Mon, 05 Jul 2021 16:14:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RFB-00031a-GZ
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:14:49 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 154712db-250e-44bd-953f-956c64bec38b;
 Mon, 05 Jul 2021 16:14:48 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2176.outbound.protection.outlook.com [104.47.17.176])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-27NWrKgeNzSqBjibl8V9Qg-1; Mon, 05 Jul 2021 18:14:46 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 16:14:46 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:14:46 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1PR01CA0029.eurprd01.prod.exchangelabs.com (2603:10a6:102::42) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21 via Frontend
 Transport; Mon, 5 Jul 2021 16:14:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 154712db-250e-44bd-953f-956c64bec38b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501687;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=RREdxymQaAXQtLLMkVVF928yZA3I7Wa987QcwLYQXxI=;
	b=YaEByNrtP+F49+6bfEmtqTrswurUj3/WRkt8+uAPRXzWoqu00rln66jOCVBtjuGUAC26aZ
	2C85nZ6fxcmmxQ4SSxI+/Y4XjUOjCM7MWmA+XJmv/Y50wUfxVBVDicay7op4tYYWmXvPHY
	OOO386xCQTQfvcAntu3EGRmrN6OefqI=
X-MC-Unique: 27NWrKgeNzSqBjibl8V9Qg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=frSWrQyG0ml5v4VpM9e6S0cXv+ZoMc9QO86XLXlzfFQimL/3X+bv5PCrbhzwNkvJz5nQx/Y4pezHAOlg17/wKsAHvXcsh8PZGYmEyrzyOw45xEKr7HH1QXeBTpj1oGqmwYHIoMqFSGBhm2U7+boLA3xxmhKvTuAYnn2rZLx78E5dm7Bio04XOyBAO27nh2J9MAh8r45NQH121GULhx5O33NNDFwaXIl/wSPdgnhdf1/17UYNMDmL/fGa1tJYoMcKUa7WKMlgrsqK//mUR94OVrrQ5Z0tNgj39HahPxX2XE0iSqkBF+w3efmlJV0JdouPmNBLogyv7f7fRZuXs51xyw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=RREdxymQaAXQtLLMkVVF928yZA3I7Wa987QcwLYQXxI=;
 b=DCnJ0ceenuP5NLPNWQSvH8/MfqQlzvroRBlrcRjmYuZd/f+D40tVHSaoAhlABavaX6D7On2gV6ssY04iDZwz0MIJjBt8DhlnEOOmhxsCmiOyqkLsgB9fIy5jzgaxgdKlaqJi6rtiHBdBBFHymZka6KtncJ13Sl61Ykm20wsuLJOoOCrtYeCxa/OUozruFieODExV6i5IfTacR0VWSJAy3azRi6brH8Cg/fza3LKI0qdpSydRRO6JnwYh/xYd421uaX9vlrivfYP5UdRgb1lzNRm11Zh5BOFmegY/O5LbUjbAy9anmElcaPazoBc3fhOcHItQ1mvFxFXLcceig1XrLw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 15/16] x86/P2M: p2m.c is HVM-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <7f868820-20ac-4850-aec7-35bc843cab6e@suse.com>
Date: Mon, 5 Jul 2021 18:14:44 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR1PR01CA0029.eurprd01.prod.exchangelabs.com
 (2603:10a6:102::42) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f3a01401-d328-4fbe-fd14-08d93fd00163
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2829950A1F31C74F4E51094AB31C9@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	YNulpkveIax6YbT8wNvgY2XNhbgiaBadZzFGMkNMtIdHK2wZlrVL3v6T/jFepeUbh/pnr0I9zjFSAFHxfDwakfrTb0Ijx7oM3M8HZRKY3JkgVNsogpDZLaVPmIhpa2wbTTfUO3kh6Kh6UlhRkgkRFINrPJ0Bh2eUwyf4RhykaGALDBcXwGPzI/F2z0Dw+bZjhoBBQwuSwEeob01ioV2NDUlFwGO6mi2mQiTdCPDPWycNh9X7Jc7lfhZTtnAaqSV18kEiVGeMtbedEPng7yrQxVVtpisT+oB0FqWRhfKczdpuc0KLKNUlfETXd6zg4kG0fxuEYwTXYCwIlvThgHuAWVOPsWewEvXmq7Zj4WI21MrKEY4uIwj12upiBNIn7R5Rb1qAi+zTHwiTl8UZ/ZBZ6lWFqt/yZggxFRts9hP45rxX3+m97l3m6YRqnAh12UqL8RJZeCdjRVFPS0aFE/GAf3LU1FEpV7qNqpV5AIfgoDlKtFgfMkJXnOkU6SH/r5UcZd79aFobmoz34jHbH67CuEICzhs355UyR/uI0BamPGw3otVayZYBKc/EEIQhf7FK7BftgAH3tE7JH0198sEyqL/2ILywgk0u3080uWIhoIZZxLfOd2jRin8321zfVDD5AGsNFc4N2NSt8yQ2S72w2CTsCauxZbrF6GpCKQ/HmaFu47QEhdUfGuuBWDzFU6fi0NXm/ACMR6mcBJudoi1yWw==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(316002)(83380400001)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?rl8jslQeyLfZJusfGX+80CSN79iv/Qugnscxw5c?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f3a01401-d328-4fbe-fd14-08d93fd00163
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:14:45.9752
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: UkKbQegMcQeKKfEvrkK5b2R9DVDKG10lRjqg0o91mK1JBtQv10fNrUdzc4/dcFFHSkA/jIugNnT850fEsYiQCA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

This only requires moving p2m_percpu_rwlock elsewhere (ultimately I
think all P2M locking should go away as well when !HVM, but this looks
to require further code juggling). The two other unguarded functions are
already unneeded (by virtue of DCE) when !HVM.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -8,7 +8,7 @@ obj-$(CONFIG_MEM_ACCESS) += mem_access.o
 obj-$(CONFIG_MEM_PAGING) += mem_paging.o
 obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
 obj-$(CONFIG_HVM) += nested.o
-obj-y += p2m.o
+obj-$(CONFIG_HVM) += p2m.o
 obj-y += p2m-basic.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o p2m-pt.o
 obj-y += paging.o
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -53,10 +53,6 @@ bool_t __initdata opt_hap_1gb = 1, __ini
 boolean_param("hap_1gb", opt_hap_1gb);
 boolean_param("hap_2mb", opt_hap_2mb);
 
-DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock);
-
-#ifdef CONFIG_HVM
-
 int p2m_init_logdirty(struct p2m_domain *p2m)
 {
     if ( p2m->logdirty_ranges )
@@ -258,8 +254,6 @@ void p2m_flush_hardware_cached_dirty(str
     }
 }
 
-#endif /* CONFIG_HVM */
-
 /*
  * Force a synchronous P2M TLB flush if a deferred flush is pending.
  *
@@ -286,8 +280,6 @@ void p2m_unlock_and_tlb_flush(struct p2m
         mm_write_unlock(&p2m->lock);
 }
 
-#ifdef CONFIG_HVM
-
 mfn_t p2m_get_gfn_type_access(struct p2m_domain *p2m, gfn_t gfn,
                               p2m_type_t *t, p2m_access_t *a, p2m_query_t q,
                               unsigned int *page_order, bool_t locked)
@@ -2589,8 +2581,6 @@ int p2m_set_altp2m_view_visibility(struc
     return rc;
 }
 
-#endif /* CONFIG_HVM */
-
 /*
  * Local variables:
  * mode: C
--- a/xen/arch/x86/mm/p2m-basic.c
+++ b/xen/arch/x86/mm/p2m-basic.c
@@ -28,6 +28,8 @@
 #include "mm-locks.h"
 #include "p2m.h"
 
+DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock);
+
 /* Init the datastructures for later use by the p2m code */
 static int p2m_initialise(struct domain *d, struct p2m_domain *p2m)
 {



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:15:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:15:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150524.278302 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RFe-0003i0-Pz; Mon, 05 Jul 2021 16:15:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150524.278302; Mon, 05 Jul 2021 16:15:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RFe-0003ht-M4; Mon, 05 Jul 2021 16:15:18 +0000
Received: by outflank-mailman (input) for mailman id 150524;
 Mon, 05 Jul 2021 16:15:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HGaV=L5=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0RFd-0003hb-8d
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:15:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c0c01110-17f5-4feb-bf78-3aee15f5569f;
 Mon, 05 Jul 2021 16:15:16 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2177.outbound.protection.outlook.com [104.47.17.177])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-31-QofTHA8xOuWANYvNt19zcA-1; Mon, 05 Jul 2021 18:15:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Mon, 5 Jul
 2021 16:15:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Mon, 5 Jul 2021
 16:15:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0184.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::28) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 16:15:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c0c01110-17f5-4feb-bf78-3aee15f5569f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625501715;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=3iQ7NFvbW+C8AVXqVXivhOo4ScWJDlsGayh6E5RebDA=;
	b=VTMJdj0DlDgkqRvrk6trBQF2WiU+I5xSefMhgl9E1bzjRAwSEefTtGmWSTWY/i/XORRyy5
	ENp6HnzKA3hOBoHmXJSDecp/PWw4nW6bEti1oEoPbg9WrqrdUzJEB0EvtpJSl1An5rbzqI
	/65gy1TCiIrMUWiPpbhixGB1tjyAM6Y=
X-MC-Unique: QofTHA8xOuWANYvNt19zcA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jvxk71p3QR6z/zusqPx7xVWThBcWaQYHX2jGEWDbXize9feHNtbZmKkHRSxCQfNCZVP71BvNaj4kT0CbOsTCtUwhNrVf2bDhy11dBQglKsUTb3X7D8Cwdtc3v4a1ue+W9vozpJz/mv4VTbiHIMeZVF5JgZyT6iAyZKut1wOhW2PrznDuLSXA/Mpy1ewe/FwICMhkDjMQIC2sgEoObuWQKIlj+I9xgQQlG+60ZlgshA34HEhFHYdmul8fYTvN4UZZ97CBStCIb9Y7KmPYKp781FYaRSpqNWgQWWeml+7rzrrOSyXEuqiENGmyeGDVcSYcdY7FSypdAc4cnDzP/7MTyQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=3iQ7NFvbW+C8AVXqVXivhOo4ScWJDlsGayh6E5RebDA=;
 b=kTj5xYCcklD3WCzDAdIxQAk/pEp8/L6zo7xtvgsWLarNADYt5Z2aa1WluFgF/gjxNBmdiQ8Nv4ZwogJfr3fwFrFqxTpOoEBYc6KA9ohJnb3FFrj5lLtaXaqun1eHLBxafVPpdJvBXJG5hPXAKB0lkHRSQjWGxirY4GJtiIC1jvwtajvzXadokO9kCBe1a7s1gihAl0cBMwYvBV3yHkT5QJYJnVKZqzcm18o0YgTGEaDxSRIJ/SdKY5gVekcvM+tVFElOWhxlUbcThBH9Eo+FX8aNahwtuPA0MEgnr7DkJ7XENda7KSEoYGrQkPVES3fTA8aRBnQSJV6B0Y4gfCneCQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 16/16] x86/P2M: the majority for struct p2m_domain's fields
 are HVM-only
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Paul Durrant <paul@xen.org>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Message-ID: <e5362b33-0f5b-ba2b-d033-ca0a09e5fd54@suse.com>
Date: Mon, 5 Jul 2021 18:15:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0184.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1c::28) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 89328dc8-2bea-42e8-ec37-08d93fd01178
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2829D43EA906FAE8F8D00EAEB31C9@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	kBgnuxcckez0tquYpN98TWJmV6IcLHtavT7e/OFTJCUWCa2cEpfWNEph5osySZTINf+6/ieVF8o8Na77K/Sr8GnemS8a2YMaj5aNosDOPaCuqlDL3biy8SBCHSOhl+31AYssCIEITpIVBzIccvBju13n1sDimnXtGVNdNGm378H0tx5MMR+jkxQKUdW5QmmD8KDqWOezoTO7qc4I3Sd+BNr9crA3HHAYNOT5Wrs28IeX7oGs9hiw6fEtYzmdffVin1hrzf1xy14t0HOs5KwEHAYUbxVqGWCpfYoM+dL5RcbFY1G0PrUlA3Yb/MAw+t6EOFzclwtH7ay0ow4KpFMAMX7ixlI7qQLcbLcp0PQhxu2VEG0JXdNhUgxA9uxoOt0Fvg0/dvDbDlJ/Vx0iVWbODp9C6x2uDseFt/7TyN0Y9lRpfPC2teEdTBkwIZID9Tj/K2rVQJqZ2EYgQqVWr2a9DsTqLZznmhcT2cexbsaop0HynaCfMSimICNus7uAQ3LM7Sp/YjFMRlaNwVkAEf8ZxWE7wOwjsYKVwPntk4JeusGfO4lBq1yxR6KEIPXxVcy4h0xP7A/yubaL+78moyElNJXP+iTHJeB/i6rKLhYkjSqOW3FRYwyALsce3udjGDKuwbmOcV/g0oARFGedKFZLbjGu5dqTayET8n74n9FmrxaqAdz5cXnr9GwK6sR29H5l/OYMLeqJxCTHZ0HLoQyMOv+qDzd7V/jDZeCIkKTYbe0=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(136003)(376002)(346002)(396003)(6486002)(26005)(16576012)(478600001)(2616005)(956004)(86362001)(2906002)(6916009)(316002)(83380400001)(8676002)(16526019)(66556008)(36756003)(8936002)(38100700002)(54906003)(31696002)(4326008)(66476007)(186003)(66946007)(31686004)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 89328dc8-2bea-42e8-ec37-08d93fd01178
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 16:15:12.9979
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: TAXSYouP5oqQROLj/oh5fZPvO6vhavgpVtp27wNU8yxebLDqwJg1+mp0Lqaf9rd5GWWTmbqNyeGFZVYnocF5Qg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

..., as are the majority of the locks involved. Conditionalize things
accordingly.

Also adjust the ioreq field's indentation at this occasion.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -481,8 +481,11 @@ unsigned int page_get_ram_type(mfn_t mfn
 
 unsigned long domain_get_maximum_gpfn(struct domain *d)
 {
+#ifdef CONFIG_HVM
     if ( is_hvm_domain(d) )
         return p2m_get_hostp2m(d)->max_mapped_pfn;
+#endif
+
     /* NB. PV guests specify nr_pfns rather than max_pfn so we adjust here. */
     return (arch_get_max_pfn(d) ?: 1) - 1;
 }
--- a/xen/arch/x86/mm/mm-locks.h
+++ b/xen/arch/x86/mm/mm-locks.h
@@ -237,6 +237,8 @@ static inline void mm_enforce_order_unlo
  *                                                                      *
  ************************************************************************/
 
+#ifdef CONFIG_HVM
+
 /* Nested P2M lock (per-domain)
  *
  * A per-domain lock that protects the mapping from nested-CR3 to
@@ -354,6 +356,8 @@ declare_mm_lock(pod)
 #define pod_unlock(p)         mm_unlock(&(p)->pod.lock)
 #define pod_locked_by_me(p)   mm_locked_by_me(&(p)->pod.lock)
 
+#endif /* CONFIG_HVM */
+
 /* Page alloc lock (per-domain)
  *
  * This is an external lock, not represented by an mm_lock_t. However,
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -48,6 +48,8 @@
 #undef virt_to_mfn
 #define virt_to_mfn(v) _mfn(__virt_to_mfn(v))
 
+DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock);
+
 /* Turn on/off host superpage page table support for hap, default on. */
 bool_t __initdata opt_hap_1gb = 1, __initdata opt_hap_2mb = 1;
 boolean_param("hap_1gb", opt_hap_1gb);
--- a/xen/arch/x86/mm/p2m-basic.c
+++ b/xen/arch/x86/mm/p2m-basic.c
@@ -28,16 +28,15 @@
 #include "mm-locks.h"
 #include "p2m.h"
 
-DEFINE_PERCPU_RWLOCK_GLOBAL(p2m_percpu_rwlock);
-
 /* Init the datastructures for later use by the p2m code */
 static int p2m_initialise(struct domain *d, struct p2m_domain *p2m)
 {
     int ret = 0;
 
-    mm_rwlock_init(&p2m->lock);
 #ifdef CONFIG_HVM
+    mm_rwlock_init(&p2m->lock);
     INIT_PAGE_LIST_HEAD(&p2m->pages);
+    spin_lock_init(&p2m->ioreq.lock);
 #endif
 
     p2m->domain = d;
@@ -55,8 +54,6 @@ static int p2m_initialise(struct domain
     else
         p2m_pt_init(p2m);
 
-    spin_lock_init(&p2m->ioreq.lock);
-
     return ret;
 }
 
--- a/xen/drivers/passthrough/x86/iommu.c
+++ b/xen/drivers/passthrough/x86/iommu.c
@@ -338,7 +338,7 @@ bool arch_iommu_use_permitted(const stru
     return d == dom_io ||
            (likely(!mem_sharing_enabled(d)) &&
             likely(!mem_paging_enabled(d)) &&
-            likely(!p2m_get_hostp2m(d)->global_logdirty));
+            likely(!p2m_is_global_logdirty(d)));
 }
 
 /*
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -199,8 +199,10 @@ typedef enum {
 
 /* Per-p2m-table state */
 struct p2m_domain {
+#ifdef CONFIG_HVM
     /* Lock that protects updates to the p2m */
     mm_rwlock_t           lock;
+#endif
 
     /*
      * Same as a domain's dirty_cpumask but limited to
@@ -220,13 +222,14 @@ struct p2m_domain {
      */
     p2m_access_t default_access;
 
+#ifdef CONFIG_HVM
+
     /* Host p2m: Log-dirty ranges registered for the domain. */
     struct rangeset   *logdirty_ranges;
 
     /* Host p2m: Global log-dirty mode enabled for the domain. */
     bool               global_logdirty;
 
-#ifdef CONFIG_HVM
     /* Translated domain: p2m mapping */
     pagetable_t        phys_table;
 
@@ -269,7 +272,6 @@ struct p2m_domain {
                                               unsigned int level);
     void               (*write_p2m_entry_post)(struct p2m_domain *p2m,
                                                unsigned int oflags);
-#endif
 #if P2M_AUDIT
     long               (*audit_p2m)(struct p2m_domain *p2m);
 #endif
@@ -304,7 +306,6 @@ struct p2m_domain {
     unsigned long min_remapped_gfn;
     unsigned long max_remapped_gfn;
 
-#ifdef CONFIG_HVM
     /* Populate-on-demand variables
      * All variables are protected with the pod lock. We cannot rely on
      * the p2m lock if it's turned into a fine-grained lock.
@@ -361,27 +362,27 @@ struct p2m_domain {
      * threaded on in LRU order.
      */
     struct list_head   np2m_list;
-#endif
 
     union {
         struct ept_data ept;
         /* NPT-equivalent structure could be added here. */
     };
 
-     struct {
-         spinlock_t lock;
-         /*
-          * ioreq server who's responsible for the emulation of
-          * gfns with specific p2m type(for now, p2m_ioreq_server).
-          */
-         struct ioreq_server *server;
-         /*
-          * flags specifies whether read, write or both operations
-          * are to be emulated by an ioreq server.
-          */
-         unsigned int flags;
-         unsigned long entry_count;
-     } ioreq;
+    struct {
+        spinlock_t lock;
+        /*
+         * ioreq server who's responsible for the emulation of
+         * gfns with specific p2m type(for now, p2m_ioreq_server).
+         */
+        struct ioreq_server *server;
+        /*
+         * flags specifies whether read, write or both operations
+         * are to be emulated by an ioreq server.
+         */
+        unsigned int flags;
+        unsigned long entry_count;
+    } ioreq;
+#endif /* CONFIG_HVM */
 };
 
 /* get host p2m table */
@@ -645,6 +646,15 @@ int p2m_finish_type_change(struct domain
                            gfn_t first_gfn,
                            unsigned long max_nr);
 
+static inline bool p2m_is_global_logdirty(const struct domain *d)
+{
+#ifdef CONFIG_HVM
+    return p2m_get_hostp2m(d)->global_logdirty;
+#else
+    return false;
+#endif
+}
+
 int p2m_is_logdirty_range(struct p2m_domain *, unsigned long start,
                           unsigned long end);
 
@@ -792,6 +802,8 @@ extern void audit_p2m(struct domain *d,
 #define P2M_DEBUG(f, a...) do { (void)(f); } while(0)
 #endif
 
+#ifdef CONFIG_HVM
+
 /*
  * Functions specific to the p2m-pt implementation
  */
@@ -852,7 +864,7 @@ void nestedp2m_write_p2m_entry_post(stru
 /*
  * Alternate p2m: shadow p2m tables used for alternate memory views
  */
-#ifdef CONFIG_HVM
+
 /* get current alternate p2m table */
 static inline struct p2m_domain *p2m_get_altp2m(struct vcpu *v)
 {
@@ -905,10 +917,10 @@ int p2m_altp2m_propagate_change(struct d
 /* Set a specific p2m view visibility */
 int p2m_set_altp2m_view_visibility(struct domain *d, unsigned int idx,
                                    uint8_t visible);
-#else
+#else /* CONFIG_HVM */
 struct p2m_domain *p2m_get_altp2m(struct vcpu *v);
 static inline void p2m_altp2m_check(struct vcpu *v, uint16_t idx) {}
-#endif
+#endif /* CONFIG_HVM */
 
 /*
  * p2m type to IOMMU flags
@@ -942,6 +954,8 @@ static inline unsigned int p2m_get_iommu
     return flags;
 }
 
+#ifdef CONFIG_HVM
+
 int p2m_set_ioreq_server(struct domain *d, unsigned int flags,
                          struct ioreq_server *s);
 struct ioreq_server *p2m_get_ioreq_server(struct domain *d,
@@ -1006,6 +1020,8 @@ static inline int p2m_entry_modify(struc
     return 0;
 }
 
+#endif /* CONFIG_HVM */
+
 #endif /* _XEN_ASM_X86_P2M_H */
 
 /*



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:31:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:31:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150536.278313 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RVR-00066p-6O; Mon, 05 Jul 2021 16:31:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150536.278313; Mon, 05 Jul 2021 16:31:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0RVR-00066i-2w; Mon, 05 Jul 2021 16:31:37 +0000
Received: by outflank-mailman (input) for mailman id 150536;
 Mon, 05 Jul 2021 16:31:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0RVQ-00066Y-5S; Mon, 05 Jul 2021 16:31:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0RVP-0002zu-UD; Mon, 05 Jul 2021 16:31:35 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0RVP-0006DD-Jk; Mon, 05 Jul 2021 16:31:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0RVP-0004TF-JF; Mon, 05 Jul 2021 16:31:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jXkFLGxq2Z22GJutxzYzIcFKswLZVCLWcMQBgw7FzrQ=; b=cLEjCw8JgmAKSAGDbT6fEhWHlE
	WyA00ALrQr7x/RDmg8T7i4ZR21O9NQqTx0D8R0uQs2+VZ7PZW8pF4iLbAXdU/N7cm0As8F0d30WRk
	s9KZOZTiO5R0Y0Q94lpM0AsHmTa+4uEtZ4RHSTHcikz1mtSj75nSqAnHJZJxR0hCEZlM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163309-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-upstream-unstable test] 163309: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-upstream-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-upstream-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-upstream-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-upstream-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-upstream-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-upstream-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823
X-Osstest-Versions-That:
    qemuu=7ea428895af2840d85c524f0bd11a38aac308308
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 16:31:35 +0000

flight 163309 qemu-upstream-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163309/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 156560
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 156560
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 156560
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 156560
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 156560
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 156560
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 156560
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 qemuu                136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823
baseline version:
 qemuu                7ea428895af2840d85c524f0bd11a38aac308308

Last test of basis   156560  2020-11-08 11:37:34 Z  239 days
Testing same since   163309  2021-07-05 10:10:06 Z    0 days    1 attempts

------------------------------------------------------------
481 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   7ea428895a..136c34c9bc  136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 -> master


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 16:56:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 16:56:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150554.278347 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Rto-0000Of-O8; Mon, 05 Jul 2021 16:56:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150554.278347; Mon, 05 Jul 2021 16:56:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Rto-0000OY-K7; Mon, 05 Jul 2021 16:56:48 +0000
Received: by outflank-mailman (input) for mailman id 150554;
 Mon, 05 Jul 2021 16:56:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0Rtn-0000OS-V8
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 16:56:48 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.23])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 00e83910-cf0f-40df-8119-3c5889dd5ed3;
 Mon, 05 Jul 2021 16:56:46 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65GuaNMk
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 18:56:36 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 00e83910-cf0f-40df-8119-3c5889dd5ed3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625504197;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=Mg3ZxD/weT27RJx0X7iaS0El9eK7YQOQCRWos8cAcXc=;
    b=dEzj3Qtvn666vHRbUzM6KBVRBmvb4LZFZslO7nzJiwQTzKmpGBDftAhkL6JizinN1O
    au8onwDtDsCbF8RS37jF2PJ8yutw3SQ2ewM1TCATLGfE2xtl5k7vuciQt4exjA5BEmpL
    tqdvNWGjlE5n0q42j0mPMlQeBZ+X0Avrff0RMgneJUqCkdPjlhyxiqSiMF68NvTFEDYP
    xAd498ZjZXfJH/E586bept3BF9J23hpSwaT9UYE83eYjgi4TscfCOtWn1pS1jpOCMJiR
    vC8QwZ/W6ArXLARpnVJfj7Pd5zU8NDhiLJQv7aJVJtCLSag9KoLaSXKRhevvcK+HfnA9
    j1LQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org,
	Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v3] tools: unify page type checking in save/restore
Date: Mon,  5 Jul 2021 18:56:33 +0200
Message-Id: <20210705165633.26077-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Users of xc_get_pfn_type_batch may want to sanity check the data
returned by Xen. Add helpers for this purpose:

is_known_page_type verifies the type returned by Xen on the saving
side, or the incoming type for a page on the restoring side, is known
by the save/restore code.

page_type_to_populate decides if a page with the given known type
needs to be populated on the restoring side.

page_type_has_stream_data decides if a page with the given known type
needs to be send, or if the stream on the restoring side contains a
data page.

While touching the code, simplify the logic check in populate_pfns.

No change in behavior intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

v03:
- fold all three helpers into a single patch
v02:
- rename xc_is_known_page_type to sr_is_known_page_type
- move from ctrl/xc_private.h to saverestore/common.h (jgross)
---
 tools/libs/saverestore/common.h  | 86 ++++++++++++++++++++++++++++++++
 tools/libs/saverestore/restore.c | 38 +++-----------
 tools/libs/saverestore/save.c    | 18 +++----
 3 files changed, 99 insertions(+), 43 deletions(-)

compile-tested only

diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
index ca2eb47a4f..283d3c7213 100644
--- a/tools/libs/saverestore/common.h
+++ b/tools/libs/saverestore/common.h
@@ -467,6 +467,92 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 /* Handle a STATIC_DATA_END record. */
 int handle_static_data_end(struct xc_sr_context *ctx);
 
+/* Sanitiy check for types returned by Xen */
+static inline bool is_known_page_type(uint32_t type)
+{
+    switch ( type )
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_XALLOC: /* Synthetic type in Xen 4.2 - 4.5 */
+    case XEN_DOMCTL_PFINFO_BROKEN:
+        return true;
+    default:
+        break;
+    }
+    return false;
+}
+
+static inline bool page_type_to_populate(uint32_t type)
+{
+    switch ( type )
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_XALLOC:
+        return true;
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_BROKEN:
+    default:
+        break;
+    }
+    return false;
+}
+
+static inline bool page_type_has_stream_data(uint32_t type)
+{
+    switch ( type )
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+        return true;
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_BROKEN:
+    case XEN_DOMCTL_PFINFO_XALLOC:
+    default:
+        break;
+    }
+
+    return false;
+}
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
index be259a1c6b..23ed359e4e 100644
--- a/tools/libs/saverestore/restore.c
+++ b/tools/libs/saverestore/restore.c
@@ -152,9 +152,7 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 
     for ( i = 0; i < count; ++i )
     {
-        if ( (!types || (types &&
-                         (types[i] != XEN_DOMCTL_PFINFO_XTAB &&
-                          types[i] != XEN_DOMCTL_PFINFO_BROKEN))) &&
+        if ( (!types || page_type_to_populate(types[i])) &&
              !pfn_is_populated(ctx, original_pfns[i]) )
         {
             rc = pfn_set_populated(ctx, original_pfns[i]);
@@ -233,25 +231,8 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
     {
         ctx->restore.ops.set_page_type(ctx, pfns[i], types[i]);
 
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_NOTAB:
-
-        case XEN_DOMCTL_PFINFO_L1TAB:
-        case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L2TAB:
-        case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L3TAB:
-        case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L4TAB:
-        case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
+        if ( page_type_has_stream_data(types[i]) )
             mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
-            break;
-        }
     }
 
     /* Nothing to do? */
@@ -271,14 +252,8 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
 
     for ( i = 0, j = 0; i < count; ++i )
     {
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_XTAB:
-        case XEN_DOMCTL_PFINFO_BROKEN:
-        case XEN_DOMCTL_PFINFO_XALLOC:
-            /* No page data to deal with. */
+        if ( !page_type_has_stream_data(types[i]) )
             continue;
-        }
 
         if ( map_errs[j] )
         {
@@ -406,15 +381,14 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         }
 
         type = (pages->pfn[i] & PAGE_DATA_TYPE_MASK) >> 32;
-        if ( ((type >> XEN_DOMCTL_PFINFO_LTAB_SHIFT) >= 5) &&
-             ((type >> XEN_DOMCTL_PFINFO_LTAB_SHIFT) <= 8) )
+        if ( !is_known_page_type(type) )
         {
-            ERROR("Invalid type %#"PRIx32" for pfn %#"PRIpfn" (index %u)",
+            ERROR("Unknown type %#"PRIx32" for pfn %#"PRIpfn" (index %u)",
                   type, pfn, i);
             goto err;
         }
 
-        if ( type < XEN_DOMCTL_PFINFO_BROKEN )
+        if ( page_type_has_stream_data(type) )
             /* NOTAB and all L1 through L4 tables (including pinned) should
              * have a page worth of data in the record. */
             pages_of_data++;
diff --git a/tools/libs/saverestore/save.c b/tools/libs/saverestore/save.c
index 9540c93cde..fe3a7b3994 100644
--- a/tools/libs/saverestore/save.c
+++ b/tools/libs/saverestore/save.c
@@ -147,14 +147,15 @@ static int write_batch(struct xc_sr_context *ctx)
 
     for ( i = 0; i < nr_pfns; ++i )
     {
-        switch ( types[i] )
+        if ( !is_known_page_type(types[i]) )
         {
-        case XEN_DOMCTL_PFINFO_BROKEN:
-        case XEN_DOMCTL_PFINFO_XALLOC:
-        case XEN_DOMCTL_PFINFO_XTAB:
-            continue;
+            ERROR("Unknown type %#"PRIpfn" for pfn %#"PRIpfn, types[i], mfns[i]);
+            goto err;
         }
 
+        if ( !page_type_has_stream_data(types[i]) )
+            continue;
+
         mfns[nr_pages++] = mfns[i];
     }
 
@@ -171,13 +172,8 @@ static int write_batch(struct xc_sr_context *ctx)
 
         for ( i = 0, p = 0; i < nr_pfns; ++i )
         {
-            switch ( types[i] )
-            {
-            case XEN_DOMCTL_PFINFO_BROKEN:
-            case XEN_DOMCTL_PFINFO_XALLOC:
-            case XEN_DOMCTL_PFINFO_XTAB:
+            if ( !page_type_has_stream_data(types[i]) )
                 continue;
-            }
 
             if ( errors[p] )
             {


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 17:26:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 17:26:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150561.278369 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0SMn-0003qk-BB; Mon, 05 Jul 2021 17:26:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150561.278369; Mon, 05 Jul 2021 17:26:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0SMn-0003qd-80; Mon, 05 Jul 2021 17:26:45 +0000
Received: by outflank-mailman (input) for mailman id 150561;
 Mon, 05 Jul 2021 17:26:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SjzX=L5=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m0SMl-0003ps-CZ
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 17:26:43 +0000
Received: from mail-lf1-x12a.google.com (unknown [2a00:1450:4864:20::12a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5f2e1ffc-5ace-4d59-96f2-4531e3f29c86;
 Mon, 05 Jul 2021 17:26:42 +0000 (UTC)
Received: by mail-lf1-x12a.google.com with SMTP id a18so33585615lfs.10
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 10:26:42 -0700 (PDT)
Received: from [192.168.1.7] ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id b13sm1143729lfo.104.2021.07.05.10.26.40
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 05 Jul 2021 10:26:40 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5f2e1ffc-5ace-4d59-96f2-4531e3f29c86
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-transfer-encoding:content-language;
        bh=30pHL+0bsWVhDKjKuKXQtWBdB5MCQSS442KAY8eU9k8=;
        b=S3XELwdSwBe0ZEeLLizZz9u9gMYx9q9DPKgGtgNOG+ydPzPDxmGjm7iLmgjleUIm3d
         1CYPAPqnwEJY+Qpm1cnxrHUSkItl4WBHVdpXuW+r8n5NeAlUujl3NqKnqg3eqiDPp2/O
         1MfFRUOb28TWCFpvvCFPL0ZKz2sirIjRALNLiP0FJR34Jwp6nxBtuLmkI336Y2UvtAn4
         gu504J/SF0fHiUhOQN0/B4DAtM5vfuS3ORd95zW881rPSFH2mFY0kV5oNoFoesjAikdv
         vNEc1i6OhXu6jfY2hQ4ayPDq8fC7kfSTFtw+mpkyMOml/0CJg34Zy5crx2yNWwL1hMNr
         IS4w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-transfer-encoding
         :content-language;
        bh=30pHL+0bsWVhDKjKuKXQtWBdB5MCQSS442KAY8eU9k8=;
        b=dt24brq/NCweq1NygL70ZNGaYvBviVc86eIWqgJLTgYzoOQREl0nJd0ywoteX37G6I
         MXZyVh3akLpQAj+oC72o401AXgVr6XLbXEVwz33W4g2oTB+a+SCyXBoe0+Inb4G/i/LM
         ZISrWBQ9cG3/a+Ltp5L+Fv6VLoHHXszMW+DV4ngUzCAZUc94OWu7oLgAT++xoI5Ig0tS
         pnTa14KVuh6Ft0KaJM1y5WLHNrQHeDGtd9vvoDKs3DcCgvOg6YQxR4BGQJqU8JQqanfC
         KKxbFqCgZgx3fkyoOUoyRloYP5ZRMcum2y65BFyABwo1tgo6/NST43pKv622VG4ucSHK
         ghcQ==
X-Gm-Message-State: AOAM531ZPzV1XNhi9sy0i6dkv0dqCVvmeaRESPqb6QVNfzSVP7VZhwVb
	BsVv3o0e0CMUn/JB8Xs8jCU=
X-Google-Smtp-Source: ABdhPJyMN06TuL1GS7sqrs+SclXfuNnKvAc4ih3mLWE3CDAqh+l0biduwjPqvko8VtsX486RNr6mNA==
X-Received: by 2002:ac2:5986:: with SMTP id w6mr11190537lfn.392.1625506001276;
        Mon, 05 Jul 2021 10:26:41 -0700 (PDT)
Subject: Re: [PATCH] xen/arm: bootfdt: Always sort memory banks
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <1623699267-9475-1-git-send-email-olekstysh@gmail.com>
 <47cbf077-8681-7ac4-04e2-f31e1fa4c04f@xen.org>
From: Oleksandr <olekstysh@gmail.com>
Message-ID: <fb1526f2-d377-771f-7824-817891d883be@gmail.com>
Date: Mon, 5 Jul 2021 20:26:40 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <47cbf077-8681-7ac4-04e2-f31e1fa4c04f@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US


On 30.06.21 11:56, Julien Grall wrote:
> Hi Oleksandr,

Hi Julien


Sorry for the late response.


>
> On 14/06/2021 20:34, Oleksandr Tyshchenko wrote:
>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>>
>> At the moment, Xen expects the memory banks to be ordered.
>> Unfortunately, there may be a case when updated by firmware
>> device tree contains unordered banks. This means Xen will panic
>> when setting xenheap mappings for the subsequent bank with start
>> address being less than xenheap_mfn_start (start address of
>> the first bank).
>
> Please clarify in the commit message that the behavior you are 
> describing is for arm64. For arm32, there is only one heap region.
>
> That said, I think the sorting is fine to be done in common code.

ok


>
>
>>
>> As there is no clear requirment regarding ordering in the device
>
> s/requirment/requirement/

ok


>
>> tree, update code to be able to deal with by sorting memory
>> banks if we have more than one.
>>
>> Suggested-by: Julien Grall <jgrall@amazon.com>
>> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>> ---
>>
>> The proposed commit fixes the booting Xen on R-Car M3-W+ SoC:
>>
>> Starting kernel ...
>> - UART enabled -
>> - Boot CPU booting -
>> - Current EL 00000008 -
>> - Initialize CPU -
>> - Turning on paging -
>> - Zero BSS -
>> - Ready -
>> (XEN) Checking for initrd in /chosen
>> (XEN) Initrd 0000000084000040-0000000085dbc32a
>> (XEN) RAM: 0000000480000000 - 00000004ffffffff
>> (XEN) RAM: 0000000048000000 - 00000000bfffffff
>> (XEN) RAM: 0000000600000000 - 00000006ffffffff
>>
>> ...
>>
>> (XEN) ****************************************
>> (XEN) Panic on CPU 0:
>> (XEN) cannot add xenheap mapping at 48000 below heap start 480000
>> (XEN) ****************************************
>> (XEN)
>> (XEN) Reboot in five seconds...
>> ---
>>   xen/arch/arm/bootfdt.c | 22 ++++++++++++++++++++++
>>   1 file changed, 22 insertions(+)
>>
>> diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
>> index dcff512..3ef63b3 100644
>> --- a/xen/arch/arm/bootfdt.c
>> +++ b/xen/arch/arm/bootfdt.c
>> @@ -13,6 +13,7 @@
>>   #include <xen/init.h>
>>   #include <xen/device_tree.h>
>>   #include <xen/libfdt/libfdt.h>
>> +#include <xen/sort.h>
>>   #include <xsm/xsm.h>
>>   #include <asm/setup.h>
>>   @@ -395,6 +396,21 @@ static void __init early_print_info(void)
>>       printk("\n");
>>   }
>>   +/* This function assumes that memory regions are not overlapped */
>> +static int __init cmp_memory_node(const void *key, const void *elem)
>> +{
>> +    const struct membank *handler0 = key;
>> +    const struct membank *handler1 = elem;
>> +
>> +    if ( handler0->start < handler1->start )
>> +        return -1;
>> +
>> +    if ( handler0->start >= (handler1->start + handler1->size) )
>> +        return 1;
>> +
>> +    return 0;
>> +}
>> +
>>   /**
>>    * boot_fdt_info - initialize bootinfo from a DTB
>>    * @fdt: flattened device tree binary
>> @@ -412,6 +428,12 @@ size_t __init boot_fdt_info(const void *fdt, 
>> paddr_t paddr)
>>       add_boot_module(BOOTMOD_FDT, paddr, fdt_totalsize(fdt), false);
>>         device_tree_for_each_node((void *)fdt, 0, early_scan_node, 
>> NULL);
>> +    if ( bootinfo.mem.nr_banks > 1 )
>
> NIT: sort() is already be able to deal with one element array. So this 
> checks looks a bit pointless.

Agree, will drop.


>
>
>> +    {
>> +        /* Some DT may describe unordered banks, sort them in 
>> ascending order */
>
> It would be good to explain in the comment *why* this is necessary. 
> Some along the line:
>
> On Arm64, setup_xenheap_pages() expects to be called with the lowest 
> bank in memory first. There is no requirement that the DT will provide 
> the banks sorted in ascending order. So sort them through.

ok


>
>
>> +        sort(bootinfo.mem.bank, bootinfo.mem.nr_banks, sizeof(struct 
>> membank),
>> +             cmp_memory_node, NULL);
>> +    }
>>       early_print_info();
>>         return fdt_totalsize(fdt);
>>
>
> Cheers,
>
-- 
Regards,

Oleksandr Tyshchenko



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 17:26:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 17:26:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150560.278358 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0SMb-0003Xo-42; Mon, 05 Jul 2021 17:26:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150560.278358; Mon, 05 Jul 2021 17:26:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0SMb-0003Xh-0A; Mon, 05 Jul 2021 17:26:33 +0000
Received: by outflank-mailman (input) for mailman id 150560;
 Mon, 05 Jul 2021 17:26:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0SMZ-0003Xb-T7
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 17:26:32 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 04f1e885-a2e6-4c3a-b600-085b260391aa;
 Mon, 05 Jul 2021 17:26:30 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65HQLNQG
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 19:26:21 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 04f1e885-a2e6-4c3a-b600-085b260391aa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625505982;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=U1Njhrsmj4VYt48gFRngpWwKpy3qu3a/IBxyAIMSsZs=;
    b=sDJjnDpXLWPAadQPjr+kCnbHUpb6E8fTnUaTi1XuYIVy7aXrJYvJi8i29jR4z1p8sH
    WfhqamGwGOWtdkWpP3WGgKaIbCZ0LXinF04ixzYgF8DGg/v4MlkLIgha+qEhW1vsTabR
    NV/jImOiJXisOvHDOXiGtSF+6Krds/LtqUZQFxLIR4/RpdLLiyIM+akzw62tuHnxbF0m
    MajN+J6rBi7D/tDvRHmcPtQodliXjcagvAqh2WV8yrDl8itx3OCgGZEBUCykulxbQqig
    iL1ijxIQfVtj35f79GMKENK3+5IhHZIBzug59MUkapgER7y1yoMIx7KanKidi+AFwo43
    TfXQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 19:26:12 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, Roger Pau
 =?UTF-8?B?TW9ubsOp?= <roger.pau@citrix.com>, Juergen Gross
 <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>, Ian Jackson
 <iwj@xenproject.org>
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
Message-ID: <20210705192612.5cf50887.olaf@aepfle.de>
In-Reply-To: <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
	<668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/NQP3wWLlE4OYb3teQUTMgGm";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/NQP3wWLlE4OYb3teQUTMgGm
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 17:13:28 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

>      ctx->save.stats =3D (struct precopy_stats){
> -        .dirty_count =3D ctx->save.p2m_size,
> +        .dirty_count =3D -1,
>      };

As said earlier, a consumer of these data may now be unable to initialize i=
tself properly. Without the patch it would be able to size its private data=
 structures properly to p2m_size. With the patch it can not know in advance=
 what the upper limit might be.

There is no in-tree consumer that is affected, and I do not have an out-of-=
tree consumer that might be broken by this change.

Just saying..

Olaf

--Sig_/NQP3wWLlE4OYb3teQUTMgGm
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDjQLQACgkQ86SN7mm1
DoCu8RAAnFuQtN2WKxSyNXFkBlsJWLKwdZ+ZfQ+TY/uScCbvkrQMwtqNYiHLORMb
lyUoXJuhWKy7kVbJr+9tmMgLd9Q7K0GNjRCT4KK9nN5Zbwo+P7h09jZGB69C7XpK
abTc7oHNtz8m4GSarLEsY3JvuJqnvCM9ORbxmHNeQdQgWkXVFJa9wLu3gx0vYbMb
U5lm6qZO6Ia3aqpBAJVY4g+CglOyvOgHbb0H/JzGbEKAjudSqKDs/JNj5zWnhQqt
9VedFJKwwzbPs7sXdCY0+uLcvYgY0SQC9yVCka4v5CFIjCw02W/tGhPXK7zszMEz
1U+pT0CIKXGxkB1Pn3KsFgNKr+unpRUJRL9liVqdQ1p1idTbJW8vkQ7JWqFoYwQv
HC71/XoANR1xSvJ6JvHqqlKrI7PpnCJk2Arp3BYuJmDWfZQiO46XvNczpcks03aj
XerOGpmUXj+F6BEGaBNV53YzNDcQCoKh5Hzk0hIOILjwwrxOSUY7u3OYIP8HvOZC
sD/WdFd6ORMTtd9YrcK2F/lmEGktoh86ixQKKuby23NW/66xDGsw5MHvt7rBvR3n
ZNo5xS8OxoMdTe9KJuDr6rUiTs9LaM727vq1KVh6Q0KcFJrFi2bPBD5Lr9DvysrX
LHRWuIzGwHwO/rzjYB1IrkLQwypXyLmwC+NRHZTFemX+hjpblC0=
=32uK
-----END PGP SIGNATURE-----

--Sig_/NQP3wWLlE4OYb3teQUTMgGm--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 17:47:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 17:47:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150572.278379 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Sh2-0006RO-1C; Mon, 05 Jul 2021 17:47:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150572.278379; Mon, 05 Jul 2021 17:47:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Sh1-0006RH-UK; Mon, 05 Jul 2021 17:47:39 +0000
Received: by outflank-mailman (input) for mailman id 150572;
 Mon, 05 Jul 2021 17:47:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=FZXx=L5=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1m0Sgz-0006RB-VH
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 17:47:38 +0000
Received: from mail-wr1-x435.google.com (unknown [2a00:1450:4864:20::435])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0cc2e2db-28be-4fb5-9b97-ef904705c757;
 Mon, 05 Jul 2021 17:47:37 +0000 (UTC)
Received: by mail-wr1-x435.google.com with SMTP id a13so22950779wrf.10
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 10:47:37 -0700 (PDT)
Received: from ?IPv6:2a00:23c5:5785:9a01:bdf1:273d:a193:c704?
 ([2a00:23c5:5785:9a01:bdf1:273d:a193:c704])
 by smtp.gmail.com with ESMTPSA id y16sm13369078wrw.42.2021.07.05.10.47.35
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 05 Jul 2021 10:47:36 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0cc2e2db-28be-4fb5-9b97-ef904705c757
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=tH0l4DKT+uucxToiTY+ot90qDeSro3d4JqiLS2jEWyE=;
        b=JEeN2wbq6jLmRS3EbjWJ2IslF4/fDr3iLnq2ECodsxRVdB7fl13YiAmImzTlk7cTng
         YtlXV8SQ4DtvlX2AO6wDznV5N/WvnXml4lAgP6np2QIQu8Dw6UGm8c0DDdi24xwpVPdr
         BeiossaVanK5IIVUgnn+VkmRN2vAGN7eqgwdUn/wKa6/FuVnvjVu5KiEOzVUyzQT5drx
         KotLYXRLWtvSH25ADA/EnIu3Sys0KSmPi4b9h691H3ATLJ46HlcH4kgS1YJpsdgLBzMN
         +eY3e5Vt+qm9K5DRdcqJiGODKCAg76JRhbiZyyK1x8CEJ7jBYdLedjpArczPe0/oOSyP
         Bu1A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=tH0l4DKT+uucxToiTY+ot90qDeSro3d4JqiLS2jEWyE=;
        b=ME6JkNEAPeTYu5hV6AYJB5sJIGOQYbnVg6EBdmt+F6ypebDdFJ0WW/texg0b4uOzIN
         O8adtdUum8d/Ud4KL3yP91VGmcYJ7+WXlICL41bQ56JlUg+rZiHHr4B6LuYQieL1ib70
         dLzH+d6S9e5vF5XMBx4PgR9XFzxS9J+XXgrZJ+Weht8osG+zwZG6/Q4BOViSVpBv13OW
         jELqkB+kyA5rSMX1g8NoOjf1sgoiZfed2CjD6DY+mS12Z2rc91tR5nZ3fb1+4uFlDI9d
         dntqKqbGndZuXtvB45nDAVgC5IXDXddf0/gRCmnBrHjmPR37WIQqT3h/c+QVc3a9AEcC
         fVQw==
X-Gm-Message-State: AOAM532OpBUbg7J7mNUwK4kckWfJ8X41R768+wuQqKo0XPSKZmGGordd
	TmH0L2ksFLj80dwqEFC+7HA=
X-Google-Smtp-Source: ABdhPJyRErrogRcdTVot8XHpex7hk6d73W2jADNLMw1vsIFhaZKWfMLU7kXfCOPgKb8a8sQuFa4/0A==
X-Received: by 2002:a5d:5701:: with SMTP id a1mr16859072wrv.216.1625507256451;
        Mon, 05 Jul 2021 10:47:36 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: [PATCH 02/16] x86/P2M: introduce p2m_{add,remove}_page()
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
 <eaf6f63d-1122-f52d-1147-cda40a9c3387@suse.com>
Message-ID: <04de95f8-313e-aef3-1cea-599d5526233b@xen.org>
Date: Mon, 5 Jul 2021 18:47:35 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <eaf6f63d-1122-f52d-1147-cda40a9c3387@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 05/07/2021 17:06, Jan Beulich wrote:
> p2m_add_page() is simply a rename from guest_physmap_add_entry().
> p2m_remove_page() then is its counterpart, despite rendering
> guest_physmap_remove_page().

Did some words get dropped in that second sentence? I can't really 
understand what it is saying.

> This way callers can use suitable pairs of
> functions (previously violated by hvm/grant_table.c).
> 
> In HVM-specific code further avoid going through the guest_physmap_*()
> layer, and instead use the two new/renamed functions directly.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 

The code looks fine so...

Reviewed-by: Paul Durrant <paul@xen.org>


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 17:49:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 17:49:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150576.278391 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Sig-00072D-Fv; Mon, 05 Jul 2021 17:49:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150576.278391; Mon, 05 Jul 2021 17:49:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Sig-000726-9u; Mon, 05 Jul 2021 17:49:22 +0000
Received: by outflank-mailman (input) for mailman id 150576;
 Mon, 05 Jul 2021 17:49:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SjzX=L5=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m0Sif-00071Z-0V
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 17:49:21 +0000
Received: from mail-lj1-x230.google.com (unknown [2a00:1450:4864:20::230])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 43850cdf-149a-4dac-8f2a-a30ff813d72f;
 Mon, 05 Jul 2021 17:49:20 +0000 (UTC)
Received: by mail-lj1-x230.google.com with SMTP id e3so17148284ljo.6
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 10:49:20 -0700 (PDT)
Received: from otyshchenko.router ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id q187sm1432127ljb.15.2021.07.05.10.49.18
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 05 Jul 2021 10:49:18 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 43850cdf-149a-4dac-8f2a-a30ff813d72f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id;
        bh=Dtbwv4IFVzRj2RmogpDQ8g32JCoeVAmzIyswirsKuGs=;
        b=aoeEXTmV1vPJGRglhLbAZ81FKPuvszD6xxO5nTj3z3srFOrM6b11/gD4xM4Z+HfJdf
         +Nf/3mRfp/PqujOlv5q+6zezT2y0sPEdH/oAsYrNDXBB27RYCgi16mtn+101dGeUyeoT
         ViHuGZvhy8Isc1xZbC7Xnevdzf1KyYnVBW/zVpmj+LnLLRSM05VyT99eh70cPZ0rSDJt
         y9gJOAh5QJ4YReE9B8EP4BefZFJon7WLq/Kw/6glHGCB2lt3bHQy4XxCxBdFiNMsuq7N
         BoP9YR/QAy9hoHaA0FCuODmPZ6Qqc1frGlSvc/xsCdjoagBf0ZoJnRrA7vxfdxq8/n6w
         NHjQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id;
        bh=Dtbwv4IFVzRj2RmogpDQ8g32JCoeVAmzIyswirsKuGs=;
        b=n7G6XWq4hWJyzwGlztT0veBscBGaVOwkpMsUMvvR6q/43VzimF2+k7CNlPvm7QuQpW
         AKzkk6DraL4DaR4o9dkycT/GtVXwJB4bgf/C1UUhXoUKH7ez0kS0epYKeX8NW9Dw6Ysg
         P6Vkax9TTEqg7M4Mk/bhrzvv13drvWo7Z+//9VLokY+nVGFqFqCgeKe4KUsUBrfiAuBQ
         QCsTEkrenXKxJjMNGdKNyNobg875j9Vj4J/faTAzsnbmnQZQ/98RrqjWeT/SHF49pl+v
         zfNh5/akXPjBBVcwrUrOGJy6ipJq+4tV+fcCurzHkcLrCNgrMm+Kk5cSrhVqJkazsYFZ
         TjaA==
X-Gm-Message-State: AOAM5329fD97yhf8ztw80m0/OrVes5N6McPayY3uq3j8ylpJ44x8blda
	pEWKLqsig3cMxM/cGOMoaMgHRfpre1A=
X-Google-Smtp-Source: ABdhPJw+aNscKEDHeGH1RL0B1HHw7z7Pe9e3rZRCahq51FxfHdFLGOrsK9hepDqgV6IY+82wP5hIQA==
X-Received: by 2002:a2e:a261:: with SMTP id k1mr11860601ljm.452.1625507359018;
        Mon, 05 Jul 2021 10:49:19 -0700 (PDT)
From: Oleksandr Tyshchenko <olekstysh@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: [PATCH V2] xen/arm: bootfdt: Always sort memory banks
Date: Mon,  5 Jul 2021 20:48:51 +0300
Message-Id: <1625507331-17934-1-git-send-email-olekstysh@gmail.com>
X-Mailer: git-send-email 2.7.4

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>

At the moment, Xen on Arm64 expects the memory banks to be ordered.
Unfortunately, there may be a case when updated by firmware
device tree contains unordered banks. This means Xen will panic
when setting xenheap mappings for the subsequent bank with start
address being less than xenheap_mfn_start (start address of
the first bank).

As there is no clear requirement regarding ordering in the device
tree, update code to be able to deal with by sorting memory
banks. There is only one heap region on Arm32, so the sorting
is fine to be done in the common code.

Suggested-by: Julien Grall <jgrall@amazon.com>
Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

---
   V2:
   - add Stefano's R-b
   - clarify patch description
   - clarify comment in code
   - drop "if (bootinfo.mem.nr_banks > 1)" check
---
 xen/arch/arm/bootfdt.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index dcff512..476e32e 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -13,6 +13,7 @@
 #include <xen/init.h>
 #include <xen/device_tree.h>
 #include <xen/libfdt/libfdt.h>
+#include <xen/sort.h>
 #include <xsm/xsm.h>
 #include <asm/setup.h>
 
@@ -395,6 +396,21 @@ static void __init early_print_info(void)
     printk("\n");
 }
 
+/* This function assumes that memory regions are not overlapped */
+static int __init cmp_memory_node(const void *key, const void *elem)
+{
+    const struct membank *handler0 = key;
+    const struct membank *handler1 = elem;
+
+    if ( handler0->start < handler1->start )
+        return -1;
+
+    if ( handler0->start >= (handler1->start + handler1->size) )
+        return 1;
+
+    return 0;
+}
+
 /**
  * boot_fdt_info - initialize bootinfo from a DTB
  * @fdt: flattened device tree binary
@@ -412,6 +428,15 @@ size_t __init boot_fdt_info(const void *fdt, paddr_t paddr)
     add_boot_module(BOOTMOD_FDT, paddr, fdt_totalsize(fdt), false);
 
     device_tree_for_each_node((void *)fdt, 0, early_scan_node, NULL);
+
+    /*
+     * On Arm64 setup_xenheap_mappings() expects to be called with the lowest
+     * bank in memory first. There is no requirement that the DT will provide
+     * the banks sorted in ascending order. So sort them through.
+     */
+    sort(bootinfo.mem.bank, bootinfo.mem.nr_banks, sizeof(struct membank),
+         cmp_memory_node, NULL);
+
     early_print_info();
 
     return fdt_totalsize(fdt);
-- 
2.7.4



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 17:49:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 17:49:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150578.278401 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Sim-0007MX-SN; Mon, 05 Jul 2021 17:49:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150578.278401; Mon, 05 Jul 2021 17:49:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Sim-0007MM-PP; Mon, 05 Jul 2021 17:49:28 +0000
Received: by outflank-mailman (input) for mailman id 150578;
 Mon, 05 Jul 2021 17:49:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=FZXx=L5=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1m0Sil-0007LK-Le
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 17:49:27 +0000
Received: from mail-wm1-x32a.google.com (unknown [2a00:1450:4864:20::32a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fe97b7d8-232c-4a04-8272-a46d293374c0;
 Mon, 05 Jul 2021 17:49:27 +0000 (UTC)
Received: by mail-wm1-x32a.google.com with SMTP id n33so4415630wms.1
 for <xen-devel@lists.xenproject.org>; Mon, 05 Jul 2021 10:49:27 -0700 (PDT)
Received: from ?IPv6:2a00:23c5:5785:9a01:bdf1:273d:a193:c704?
 ([2a00:23c5:5785:9a01:bdf1:273d:a193:c704])
 by smtp.gmail.com with ESMTPSA id g15sm13732601wrs.50.2021.07.05.10.49.25
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 05 Jul 2021 10:49:25 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fe97b7d8-232c-4a04-8272-a46d293374c0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=DfK+fKPKbagG/UGZx/L2duK1xPYKVnNOC+Ob4pC5X2A=;
        b=Z8SST8xd+tRAw8HYICYtmx95zPt2lxLColM4Zdi4mBg+gCAb7ar8/lzuakDQyLb8e0
         n8PpHUCpiNDLMV+SyweGp/IMcHKK1k8D6iK5FZMdS6weEgmUUq7W29jyvyKVg9XPyHcf
         iJ38JRA8YSJOL5J1uMtDgwq8otSCuE9oAWnteOY+tmfV8BLQnh8lPoIeB6QvegTRjzWd
         qRnsrN6jcx0VDvKiWyG8YIxVG0ickUEJnAFgQYfX5Fh/6p9niDnYpI0546nN4Wr7sK36
         XHGAxzEaE0otPLnDnMdNHqnhEQuWmN6G4CDeZzjI+1Hx5jYqF3cD1TqXIH0SIWyNQcQX
         /SgA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=DfK+fKPKbagG/UGZx/L2duK1xPYKVnNOC+Ob4pC5X2A=;
        b=bWPVsAPa8CjXd6Coqti4BaCZcGR5E4VGiHcavT+8ynf6FNsB1sUQIMzUK62w8aoDe1
         dPhpEA1x7zvmHY3uIht2PSm6o3rmoZpkuogCtWbBtq6s7JISgOop6GXjFHK0JaaHTpMH
         FlhmfCcLfb8S+nWldpe0gtTcYQkpHzpnoZPjJgWDg4cxaLGQcevrrwhESG2dgW8ee0J9
         e7Zd5XPyVb796fjZySLeg9g2tLuHNRed06WGUNYqNvLJx1lUjOCRt1ZuzBN0/yjGvDqd
         JM0YS2fBUN06/4Q2T579FaLC7HbcV+SU6jCthkF4Oj4+4I//blqdkRuwu9qkFwr4D5Je
         Xijw==
X-Gm-Message-State: AOAM533zSN2IZLtWYrrW5bpdtztBXFEDrcSDvAYK11FXKYlwASuu29zC
	PKKQjE+Km6gK043ViGvMHqs=
X-Google-Smtp-Source: ABdhPJyfv6hUryWExIgxY5ORJ9x7jbiiBY2y/TP5guniV1d+dQHkLPSgLYQ0/xu4ZcHU+OGZQcNwUQ==
X-Received: by 2002:a7b:c248:: with SMTP id b8mr256238wmj.115.1625507366360;
        Mon, 05 Jul 2021 10:49:26 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: [PATCH 16/16] x86/P2M: the majority for struct p2m_domain's
 fields are HVM-only
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
 <e5362b33-0f5b-ba2b-d033-ca0a09e5fd54@suse.com>
Message-ID: <84bc0344-da04-9d12-deef-fd0c0e938b2f@xen.org>
Date: Mon, 5 Jul 2021 18:49:25 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <e5362b33-0f5b-ba2b-d033-ca0a09e5fd54@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 05/07/2021 17:15, Jan Beulich wrote:
> ..., as are the majority of the locks involved. Conditionalize things
> accordingly.
> 
> Also adjust the ioreq field's indentation at this occasion.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 

Reviewed-by: Paul Durrant <paul@xen.org>


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 18:14:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 18:14:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150591.278412 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0T7H-0002OV-Sc; Mon, 05 Jul 2021 18:14:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150591.278412; Mon, 05 Jul 2021 18:14:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0T7H-0002OO-PT; Mon, 05 Jul 2021 18:14:47 +0000
Received: by outflank-mailman (input) for mailman id 150591;
 Mon, 05 Jul 2021 18:14:45 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0T7F-0002OE-Tj; Mon, 05 Jul 2021 18:14:45 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0T7F-0004qX-K0; Mon, 05 Jul 2021 18:14:45 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0T7F-0002hE-BG; Mon, 05 Jul 2021 18:14:45 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0T7F-0008Bb-Am; Mon, 05 Jul 2021 18:14:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=YiZcjTW8+aKD0NDh/ApC2bNZObYwM8mLuCy674gSMf4=; b=6IZw/BDKo+yle9pp1oIXV5oILD
	BaHct1h74RxbIsnKaRQ2vbgNkzM3p6n5KQYwSv3tbia0Q7xnm7XpM849+TL3AsNGuG506sWplbQDL
	LrRRHe87VBwwAIwXjr1cXXALHb98H9tZoO8FqAFKmSPCkM6RNLXrD1gj/jnN10VkDy7k=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163314-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163314: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=44e8904ebfbc57ba0950c40b9d3a28507b553e4e
X-Osstest-Versions-That:
    xen=383b41974d5543b62f3181d216070fe3691fb130
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 18:14:45 +0000

flight 163314 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163314/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  44e8904ebfbc57ba0950c40b9d3a28507b553e4e
baseline version:
 xen                  383b41974d5543b62f3181d216070fe3691fb130

Last test of basis   163310  2021-07-05 11:01:38 Z    0 days
Testing same since   163314  2021-07-05 15:00:28 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Tim Deegan <tim@xen.org>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   383b41974d..44e8904ebf  44e8904ebfbc57ba0950c40b9d3a28507b553e4e -> smoke


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 18:26:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 18:26:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150598.278427 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0TI6-0003pc-VH; Mon, 05 Jul 2021 18:25:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150598.278427; Mon, 05 Jul 2021 18:25:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0TI6-0003pV-Qb; Mon, 05 Jul 2021 18:25:58 +0000
Received: by outflank-mailman (input) for mailman id 150598;
 Mon, 05 Jul 2021 18:25:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Hh8E=L5=kernel.org=nathan@srs-us1.protection.inumbo.net>)
 id 1m0TI4-0003pP-UO
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 18:25:57 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 687a4d14-ddbe-11eb-8456-12813bfff9fa;
 Mon, 05 Jul 2021 18:25:43 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 2EF286196A;
 Mon,  5 Jul 2021 18:25:38 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 687a4d14-ddbe-11eb-8456-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625509542;
	bh=mbcpHj8XBt5iMEhvbU1Nh5o3DrHiZgXU00JBrEPy2RM=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=iDDeq0gFEKabzE/sekGHl5pLUXZw6j2n0L7sik99RCdDOJQvhixmdSPVrIQUeVLDU
	 6FozffXRB4laWf42/q0WCSqGTlsQQFMxRVLtF6YwJX36GxT0DJ33OJ22XGtIxcnP3i
	 VaxVpcC/7U63r4feJhVHKIWxTQX/Y2/e16KCRl5sTNhOtpOIzm1NYNnL9ObWJ/obdb
	 56CtvsI419asd9PPLQQSjDsD5JdrUkZBbP0iQdjT/sDmINHmZJlIRiTG4VYiDotS+A
	 LqNrpmhgTo3tRFboXDUv29YINMZcvjx8XrWGuvTcCeU2vl6xMFrlokFPnyVilv36LW
	 n0xMlR7bBMo+Q==
Date: Mon, 5 Jul 2021 11:25:35 -0700
From: Nathan Chancellor <nathan@kernel.org>
To: Claire Chang <tientzu@chromium.org>
Cc: Robin Murphy <robin.murphy@arm.com>, Will Deacon <will@kernel.org>,
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <YONOn1FEMufoTy80@Ryzen-9-3900X.localdomain>
References: <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <CALiNf2_ZJq4MoxOGe_m_KFv5xYw8t9SdscTFUwSoLBy5rEuxwQ@mail.gmail.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="/SG/dXypw7vuCiM3"
Content-Disposition: inline
In-Reply-To: <CALiNf2_ZJq4MoxOGe_m_KFv5xYw8t9SdscTFUwSoLBy5rEuxwQ@mail.gmail.com>


--/SG/dXypw7vuCiM3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi Claire,

On Mon, Jul 05, 2021 at 03:29:34PM +0800, Claire Chang wrote:
> Looking at the logs, the use-after-free bug looked somehow relevant
> (and it's nvme again. Qian's crash is about nvme too):
> 
> [    2.468288] BUG: KASAN: use-after-free in __iommu_dma_unmap_swiotlb+0x64/0xb0
> [    2.468288] Read of size 8 at addr ffff8881d7830000 by task swapper/0/0
> 
> [    2.468288] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.12.0-rc3-debug #1
> [    2.468288] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
> [    2.468288] Call Trace:
> [    2.468288]  <IRQ>
> [    2.479433]  dump_stack+0x9c/0xcf
> [    2.479433]  print_address_description.constprop.0+0x18/0x130
> [    2.479433]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
> [    2.479433]  kasan_report.cold+0x7f/0x111
> [    2.479433]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
> [    2.479433]  __iommu_dma_unmap_swiotlb+0x64/0xb0
> [    2.479433]  nvme_pci_complete_rq+0x73/0x130
> [    2.479433]  blk_complete_reqs+0x6f/0x80
> [    2.479433]  __do_softirq+0xfc/0x3be
> [    2.479433]  irq_exit_rcu+0xce/0x120
> [    2.479433]  common_interrupt+0x80/0xa0
> [    2.479433]  </IRQ>
> [    2.479433]  asm_common_interrupt+0x1e/0x40
> [    2.479433] RIP: 0010:cpuidle_enter_state+0xf9/0x590
> 
> I wonder if this ended up unmapping something wrong and messing up the
> dev->dma_io_tlb_mem (i.e. io_tlb_default_mem)?
> 
> Could you try this patch on top of 7d31f1c65cc9? This patch helps
> check if we try to unmap the wrong address.
> 
> ```
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index b7f76bca89bf..5ac08d50a394 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -613,6 +613,21 @@ void swiotlb_tbl_unmap_single(struct device *dev,
> phys_addr_t tlb_addr,
>                               size_t mapping_size, enum dma_data_direction dir,
>                               unsigned long attrs)
>  {
> +       struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
> +       unsigned int offset = swiotlb_align_offset(dev, tlb_addr);
> +       int index;
> +
> +       if (!is_swiotlb_buffer(dev, tlb_addr - offset)) {
> +               dev_err(dev, "%s: attempt to unmap invalid address
> (0x%llx, offset=%u)\n", __func__, tlb_addr, offset);
> +               return;
> +       }
> +
> +       index = (tlb_addr - offset - mem->start) >> IO_TLB_SHIFT;
> +       if (mem->slots[index].orig_addr == INVALID_PHYS_ADDR) {
> +               dev_err(dev, "%s: memory is not mapped before (0x%llx,
> offset=%u)\n", __func__, tlb_addr, offset);
> +               return;
> +       }
> +
>         /*
>          * First, sync the memory before unmapping the entry
>          */
> ```
> It might be useful to have CONFIG_SLUB_DEBUG=y, CONFIG_SLUB_DEBUG_ON=y
> and line numbers (scripts/decode_stacktrace.sh) too.
> 
> Thank you so much for helping!

Please find attached logs both decoded and not decoded, with
CONFIG_KASAN=y + CONFIG_SLUB_DEBUG_ON=y with the requested patch applied
on top of 7d31f1c65cc9.

If there is any further information I can provide, please let me know!

Cheers,
Nathan

--/SG/dXypw7vuCiM3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
	filename="7d31f1c65cc9-debug-1-original.log"
Content-Transfer-Encoding: quoted-printable

[    0.000000] Linux version 5.12.0-rc3-debug-00033-g167e3e00e2be (nathan@a=
rchlinux-ax161) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 2.36.1) #1 SMP PRE=
EMPT Mon Jul 5 10:52:15 MST 2021
[    0.000000] Command line: initrd=3D\amd-ucode.img initrd=3D\initramfs-li=
nux-debug.img root=3DPARTUUID=3D8680aa0c-cf09-4a69-8cf3-970478040ee7 rw int=
el_pstate=3Dno_hwp
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point=
 registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 by=
tes, using 'compacted' format.
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000009c0ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000009c10000-0x0000000009ffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x000000000a000000-0x000000000a1fffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000a200000-0x000000000a20cfff] ACPI =
NVS
[    0.000000] BIOS-e820: [mem 0x000000000a20d000-0x000000000affffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000b000000-0x000000000b01ffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x000000000b020000-0x00000000b838ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000b8390000-0x00000000b86c5fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000b86c6000-0x00000000b8721fff] ACPI =
data
[    0.000000] BIOS-e820: [mem 0x00000000b8722000-0x00000000b8a14fff] ACPI =
NVS
[    0.000000] BIOS-e820: [mem 0x00000000b8a15000-0x00000000badfefff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000badff000-0x00000000bbffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000bc000000-0x00000000bdffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000bf000000-0x00000000bfffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fd200000-0x00000000fd2fffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fd600000-0x00000000fd6fffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fea00000-0x00000000fea0ffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000feb80000-0x00000000fec01fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fec10000-0x00000000fec10fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fec30000-0x00000000fec30fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fed00000-0x00000000fed00fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fed40000-0x00000000fed44fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fed80000-0x00000000fed8ffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fedc2000-0x00000000fedcffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fedd4000-0x00000000fedd5fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000081f37ffff] usable
[    0.000000] BIOS-e820: [mem 0x000000081f380000-0x000000083fffffff] reser=
ved
[    0.000000] intel_pstate: HWP disabled
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] e820: update [mem 0xb4c66018-0xb4c73457] usable =3D=3D> usab=
le
[    0.000000] e820: update [mem 0xb4c66018-0xb4c73457] usable =3D=3D> usab=
le
[    0.000000] extended physical RAM map:
[    0.000000] reserve setup_data: [mem 0x0000000000000000-0x000000000009ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x00000000000a0000-0x00000000000fff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x0000000000100000-0x0000000009c0ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x0000000009c10000-0x0000000009ffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x000000000a000000-0x000000000a1fff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x000000000a200000-0x000000000a20cf=
ff] ACPI NVS
[    0.000000] reserve setup_data: [mem 0x000000000a20d000-0x000000000affff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x000000000b000000-0x000000000b01ff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x000000000b020000-0x00000000b4c660=
17] usable
[    0.000000] reserve setup_data: [mem 0x00000000b4c66018-0x00000000b4c734=
57] usable
[    0.000000] reserve setup_data: [mem 0x00000000b4c73458-0x00000000b838ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x00000000b8390000-0x00000000b86c5f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000b86c6000-0x00000000b8721f=
ff] ACPI data
[    0.000000] reserve setup_data: [mem 0x00000000b8722000-0x00000000b8a14f=
ff] ACPI NVS
[    0.000000] reserve setup_data: [mem 0x00000000b8a15000-0x00000000badfef=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000badff000-0x00000000bbffff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x00000000bc000000-0x00000000bdffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000bf000000-0x00000000bfffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000f0000000-0x00000000f7ffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fd200000-0x00000000fd2fff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fd600000-0x00000000fd6fff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fea00000-0x00000000fea0ff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000feb80000-0x00000000fec01f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fec10000-0x00000000fec10f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fec30000-0x00000000fec30f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed00000-0x00000000fed00f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed40000-0x00000000fed44f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed80000-0x00000000fed8ff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fedc2000-0x00000000fedcff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fedd4000-0x00000000fedd5f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000ff000000-0x00000000ffffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x0000000100000000-0x000000081f37ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x000000081f380000-0x000000083fffff=
ff] reserved
[    0.000000] efi: EFI v2.70 by American Megatrends
[    0.000000] efi: ACPI=3D0xb8721000 ACPI 2.0=3D0xb8721014 TPMFinalLog=3D0=
xb89c8000 SMBIOS=3D0xbac0f000 SMBIOS 3.0=3D0xbac0e000 MEMATTR=3D0xb5183018 =
ESRT=3D0xb6cf5018 RNG=3D0xbac3e998 TPMEventLog=3D0xb5184018=20
[    0.000000] efi: seeding entropy pool
[    0.000000] SMBIOS 3.3.0 present.
[    0.000000] DMI: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 3792.936 MHz processor
[    0.000280] e820: update [mem 0x00000000-0x00000fff] usable =3D=3D> rese=
rved
[    0.000287] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000309] last_pfn =3D 0x81f380 max_arch_pfn =3D 0x400000000
[    0.000615] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT=
 =20
[    0.001571] e820: update [mem 0xc0000000-0xffffffff] usable =3D=3D> rese=
rved
[    0.001586] last_pfn =3D 0xbc000 max_arch_pfn =3D 0x400000000
[    0.006163] esrt: Reserving ESRT space from 0x00000000b6cf5018 to 0x0000=
0000b6cf5050.
[    0.006185] e820: update [mem 0xb6cf5000-0xb6cf5fff] usable =3D=3D> rese=
rved
[    0.006628] check: Scanning 1 areas for low memory corruption
[    0.006637] Using GB pages for direct mapping
[    0.012545] Secure boot disabled
[    0.012547] RAMDISK: [mem 0x7f7c7000-0x7fff5fff]
[    0.012570] ACPI: Early table checksum verification disabled
[    0.012577] ACPI: RSDP 0x00000000B8721014 000024 (v02 HPQOEM)
[    0.012586] ACPI: XSDT 0x00000000B8720728 0000EC (v01 HPQOEM SLIC-CPC 01=
072009 AMI  01000013)
[    0.012598] ACPI: FACP 0x00000000B870F000 000114 (v06 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012612] ACPI: DSDT 0x00000000B86FE000 01050C (v02 HPQOEM SLIC-CPC 01=
072009 INTL 20120913)
[    0.012622] ACPI: FACS 0x00000000B89F8000 000040
[    0.012630] ACPI: MSDM 0x00000000B871F000 000055 (v03 HPQOEM SLIC-CPC 01=
072009 AMI  01000013)
[    0.012638] ACPI: SSDT 0x00000000B871E000 000050 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012646] ACPI: IVRS 0x00000000B871D000 0000D0 (v02 HPQOEM SLIC-CPC 00=
000001 AMD  00000000)
[    0.012654] ACPI: SSDT 0x00000000B8715000 007229 (v02 HPQOEM SLIC-CPC 00=
000002 MSFT 04000000)
[    0.012662] ACPI: SSDT 0x00000000B8711000 003BA1 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012670] ACPI: SSDT 0x00000000B8710000 000094 (v02 HPQOEM SLIC-CPC 01=
072009 AMI  01072009)
[    0.012678] ACPI: FIDT 0x00000000B86FD000 00009C (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012686] ACPI: MCFG 0x00000000B86FC000 00003C (v01 HPQOEM SLIC-CPC 01=
072009 MSFT 00010013)
[    0.012694] ACPI: HPET 0x00000000B86FB000 000038 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00000005)
[    0.012702] ACPI: VFCT 0x00000000B86ED000 00D484 (v01 HPQOEM SLIC-CPC 00=
000001 AMD  31504F47)
[    0.012710] ACPI: BGRT 0x00000000B86EC000 000038 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012718] ACPI: TPM2 0x00000000B86EB000 00004C (v04 HPQOEM SLIC-CPC 00=
000001 AMI  00000000)
[    0.012726] ACPI: SSDT 0x00000000B86E9000 001CE4 (v02 HPQOEM SLIC-CPC 00=
000001 AMD  00000001)
[    0.012734] ACPI: CRAT 0x00000000B86E8000 0007E8 (v01 HPQOEM SLIC-CPC 00=
000001 AMD  00000001)
[    0.012742] ACPI: CDIT 0x00000000B86E7000 000029 (v01 HPQOEM SLIC-CPC 00=
000001 AMD  00000001)
[    0.012750] ACPI: SSDT 0x00000000B86E6000 000D37 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012758] ACPI: SSDT 0x00000000B86E4000 0010A5 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012765] ACPI: SSDT 0x00000000B86E0000 00333E (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012773] ACPI: SSDT 0x00000000B86DF000 0000BF (v01 HPQOEM SLIC-CPC 00=
001000 INTL 20120913)
[    0.012781] ACPI: WSMT 0x00000000B86DE000 000028 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012789] ACPI: APIC 0x00000000B86DD000 00015E (v03 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012797] ACPI: SSDT 0x00000000B86DC000 000517 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012805] ACPI: SSDT 0x00000000B86DA000 0010AF (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012813] ACPI: FPDT 0x00000000B86D9000 000044 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  01000013)
[    0.012827] ACPI: Local APIC address 0xfee00000
[    0.013152] No NUMA configuration found
[    0.013154] Faking a node at [mem 0x0000000000000000-0x000000081f37ffff]
[    0.013164] NODE_DATA(0) allocated [mem 0x81f37c000-0x81f37ffff]
[    0.013278] Zone ranges:
[    0.013280]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.013284]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.013288]   Normal   [mem 0x0000000100000000-0x000000081f37ffff]
[    0.013292]   Device   empty
[    0.013295] Movable zone start for each node
[    0.013297] Early memory node ranges
[    0.013298]   node   0: [mem 0x0000000000001000-0x000000000009ffff]
[    0.013301]   node   0: [mem 0x0000000000100000-0x0000000009c0ffff]
[    0.013304]   node   0: [mem 0x000000000a000000-0x000000000a1fffff]
[    0.013306]   node   0: [mem 0x000000000a20d000-0x000000000affffff]
[    0.013309]   node   0: [mem 0x000000000b020000-0x00000000b838ffff]
[    0.013312]   node   0: [mem 0x00000000badff000-0x00000000bbffffff]
[    0.013314]   node   0: [mem 0x0000000100000000-0x000000081f37ffff]
[    0.013322] Initmem setup node 0 [mem 0x0000000000001000-0x000000081f37f=
fff]
[    0.013326] On node 0 totalpages: 8225939
[    0.013329]   DMA zone: 64 pages used for memmap
[    0.013331]   DMA zone: 26 pages reserved
[    0.013334]   DMA zone: 3999 pages, LIFO batch:0
[    0.015777]   DMA zone: 28769 pages in unavailable ranges
[    0.015779]   DMA32 zone: 11782 pages used for memmap
[    0.015781]   DMA32 zone: 754036 pages, LIFO batch:63
[    0.059946]   DMA32 zone: 28300 pages in unavailable ranges
[    0.059954]   Normal zone: 116686 pages used for memmap
[    0.059956]   Normal zone: 7467904 pages, LIFO batch:63
[    0.477178]   Normal zone: 3200 pages in unavailable ranges
[    0.918352] kasan: KernelAddressSanitizer initialized
[    0.918877] ACPI: PM-Timer IO Port: 0x808
[    0.918881] ACPI: Local APIC address 0xfee00000
[    0.918894] ACPI: LAPIC_NMI (acpi_id[0xff] high edge lint[0x1])
[    0.918911] IOAPIC[0]: apic_id 9, version 33, address 0xfec00000, GSI 0-=
23
[    0.918918] IOAPIC[1]: apic_id 10, version 33, address 0xfec01000, GSI 2=
4-55
[    0.918923] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.918927] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
[    0.918931] ACPI: IRQ0 used by override.
[    0.918934] ACPI: IRQ9 used by override.
[    0.918939] Using ACPI (MADT) for SMP configuration information
[    0.918942] ACPI: HPET id: 0x10228201 base: 0xfed00000
[    0.918969] e820: update [mem 0xb5158000-0xb517ffff] usable =3D=3D> rese=
rved
[    0.919000] smpboot: Allowing 32 CPUs, 24 hotplug CPUs
[    0.919115] PM: hibernation: Registered nosave memory: [mem 0x00000000-0=
x00000fff]
[    0.919122] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0=
x000fffff]
[    0.919129] PM: hibernation: Registered nosave memory: [mem 0x09c10000-0=
x09ffffff]
[    0.919136] PM: hibernation: Registered nosave memory: [mem 0x0a200000-0=
x0a20cfff]
[    0.919143] PM: hibernation: Registered nosave memory: [mem 0x0b000000-0=
x0b01ffff]
[    0.919150] PM: hibernation: Registered nosave memory: [mem 0xb4c66000-0=
xb4c66fff]
[    0.919157] PM: hibernation: Registered nosave memory: [mem 0xb4c73000-0=
xb4c73fff]
[    0.919164] PM: hibernation: Registered nosave memory: [mem 0xb5158000-0=
xb517ffff]
[    0.919171] PM: hibernation: Registered nosave memory: [mem 0xb6cf5000-0=
xb6cf5fff]
[    0.919179] PM: hibernation: Registered nosave memory: [mem 0xb8390000-0=
xb86c5fff]
[    0.919181] PM: hibernation: Registered nosave memory: [mem 0xb86c6000-0=
xb8721fff]
[    0.919183] PM: hibernation: Registered nosave memory: [mem 0xb8722000-0=
xb8a14fff]
[    0.919186] PM: hibernation: Registered nosave memory: [mem 0xb8a15000-0=
xbadfefff]
[    0.919193] PM: hibernation: Registered nosave memory: [mem 0xbc000000-0=
xbdffffff]
[    0.919196] PM: hibernation: Registered nosave memory: [mem 0xbe000000-0=
xbeffffff]
[    0.919198] PM: hibernation: Registered nosave memory: [mem 0xbf000000-0=
xbfffffff]
[    0.919201] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0=
xefffffff]
[    0.919203] PM: hibernation: Registered nosave memory: [mem 0xf0000000-0=
xf7ffffff]
[    0.919205] PM: hibernation: Registered nosave memory: [mem 0xf8000000-0=
xfd1fffff]
[    0.919208] PM: hibernation: Registered nosave memory: [mem 0xfd200000-0=
xfd2fffff]
[    0.919210] PM: hibernation: Registered nosave memory: [mem 0xfd300000-0=
xfd5fffff]
[    0.919213] PM: hibernation: Registered nosave memory: [mem 0xfd600000-0=
xfd6fffff]
[    0.919215] PM: hibernation: Registered nosave memory: [mem 0xfd700000-0=
xfe9fffff]
[    0.919217] PM: hibernation: Registered nosave memory: [mem 0xfea00000-0=
xfea0ffff]
[    0.919220] PM: hibernation: Registered nosave memory: [mem 0xfea10000-0=
xfeb7ffff]
[    0.919222] PM: hibernation: Registered nosave memory: [mem 0xfeb80000-0=
xfec01fff]
[    0.919225] PM: hibernation: Registered nosave memory: [mem 0xfec02000-0=
xfec0ffff]
[    0.919227] PM: hibernation: Registered nosave memory: [mem 0xfec10000-0=
xfec10fff]
[    0.919229] PM: hibernation: Registered nosave memory: [mem 0xfec11000-0=
xfec2ffff]
[    0.919232] PM: hibernation: Registered nosave memory: [mem 0xfec30000-0=
xfec30fff]
[    0.919234] PM: hibernation: Registered nosave memory: [mem 0xfec31000-0=
xfecfffff]
[    0.919237] PM: hibernation: Registered nosave memory: [mem 0xfed00000-0=
xfed00fff]
[    0.919239] PM: hibernation: Registered nosave memory: [mem 0xfed01000-0=
xfed3ffff]
[    0.919241] PM: hibernation: Registered nosave memory: [mem 0xfed40000-0=
xfed44fff]
[    0.919244] PM: hibernation: Registered nosave memory: [mem 0xfed45000-0=
xfed7ffff]
[    0.919246] PM: hibernation: Registered nosave memory: [mem 0xfed80000-0=
xfed8ffff]
[    0.919249] PM: hibernation: Registered nosave memory: [mem 0xfed90000-0=
xfedc1fff]
[    0.919251] PM: hibernation: Registered nosave memory: [mem 0xfedc2000-0=
xfedcffff]
[    0.919253] PM: hibernation: Registered nosave memory: [mem 0xfedd0000-0=
xfedd3fff]
[    0.919256] PM: hibernation: Registered nosave memory: [mem 0xfedd4000-0=
xfedd5fff]
[    0.919258] PM: hibernation: Registered nosave memory: [mem 0xfedd6000-0=
xfeffffff]
[    0.919261] PM: hibernation: Registered nosave memory: [mem 0xff000000-0=
xffffffff]
[    0.919266] [mem 0xc0000000-0xefffffff] available for PCI devices
[    0.919270] Booting paravirtualized kernel on bare hardware
[    0.919274] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0=
xffffffff, max_idle_ns: 6370452778343963 ns
[    0.927878] setup_percpu: NR_CPUS:320 nr_cpumask_bits:320 nr_cpu_ids:32 =
nr_node_ids:1
[    0.929637] percpu: Embedded 64 pages/cpu s225280 r8192 d28672 u262144
[    0.929671] pcpu-alloc: s225280 r8192 d28672 u262144 alloc=3D1*2097152
[    0.929677] pcpu-alloc: [0] 00 01 02 03 04 05 06 07 [0] 08 09 10 11 12 1=
3 14 15=20
[    0.929704] pcpu-alloc: [0] 16 17 18 19 20 21 22 23 [0] 24 25 26 27 28 2=
9 30 31=20
[    0.929806] Built 1 zonelists, mobility grouping on.  Total pages: 80973=
81
[    0.929809] Policy zone: Normal
[    0.929812] Kernel command line: initrd=3D\amd-ucode.img initrd=3D\initr=
amfs-linux-debug.img root=3DPARTUUID=3D8680aa0c-cf09-4a69-8cf3-970478040ee7=
 rw intel_pstate=3Dno_hwp
[    0.929899] printk: log_buf_len individual max cpu contribution: 4096 by=
tes
[    0.929901] printk: log_buf_len total cpu_extra contributions: 126976 by=
tes
[    0.929903] printk: log_buf_len min size: 131072 bytes
[    0.930262] printk: log_buf_len: 262144 bytes
[    0.930264] printk: early log buf free: 114328(87%)
[    0.933977] Dentry cache hash table entries: 4194304 (order: 13, 3355443=
2 bytes, linear)
[    0.935848] Inode-cache hash table entries: 2097152 (order: 12, 16777216=
 bytes, linear)
[    0.936118] mem auto-init: stack:off, heap alloc:on, heap free:off
[    1.642466] Memory: 27987960K/32903756K available (20488K kernel code, 7=
279K rwdata, 8472K rodata, 2012K init, 5244K bss, 4915540K reserved, 0K cma=
-reserved)
[    1.642480] random: get_random_u64 called from __kmem_cache_create+0x2a/=
0x540 with crng_init=3D0
[    1.643591] SLUB: HWalign=3D64, Order=3D0-3, MinObjects=3D0, CPUs=3D32, =
Nodes=3D1
[    1.643651] ftrace: allocating 41986 entries in 165 pages
[    1.667334] ftrace: allocated 165 pages with 4 groups
[    1.668416] rcu: Preemptible hierarchical RCU implementation.
[    1.668418] rcu: 	RCU dyntick-idle grace-period acceleration is enabled.
[    1.668420] rcu: 	RCU restricting CPUs from NR_CPUS=3D320 to nr_cpu_ids=
=3D32.
[    1.668422] rcu: 	RCU priority boosting: priority 1 delay 500 ms.
[    1.668425] 	Trampoline variant of Tasks RCU enabled.
[    1.668427] 	Rude variant of Tasks RCU enabled.
[    1.668428] 	Tracing variant of Tasks RCU enabled.
[    1.668430] rcu: RCU calculated value of scheduler-enlistment delay is 3=
0 jiffies.
[    1.668432] rcu: Adjusting geometry for rcu_fanout_leaf=3D16, nr_cpu_ids=
=3D32
[    1.700587] NR_IRQS: 20736, nr_irqs: 1224, preallocated irqs: 16
[    1.701467] Console: colour dummy device 80x25
[    1.701534] printk: console [tty0] enabled
[    1.701628] ACPI: Core revision 20210105
[    1.703688] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, =
max_idle_ns: 133484873504 ns
[    1.703717] APIC: Switch to symmetric I/O mode setup
[    1.705705] Switched APIC routing to physical flat.
[    1.707227] ..TIMER: vector=3D0x30 apic1=3D0 pin1=3D2 apic2=3D-1 pin2=3D=
-1
[    1.723724] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles:=
 0x6d588d6a09c, max_idle_ns: 881590727049 ns
[    1.723739] Calibrating delay loop (skipped), value calculated using tim=
er frequency.. 7588.95 BogoMIPS (lpj=3D12643120)
[    1.723745] pid_max: default: 32768 minimum: 301
[    1.733354] LSM: Security Framework initializing
[    1.733395] Yama: becoming mindful.
[    1.733644] Mount-cache hash table entries: 65536 (order: 7, 524288 byte=
s, linear)
[    1.733718] Mountpoint-cache hash table entries: 65536 (order: 7, 524288=
 bytes, linear)
[    1.735662] x86/cpu: User Mode Instruction Prevention (UMIP) activated
[    1.735762] LVT offset 1 assigned for vector 0xf9
[    1.735819] LVT offset 2 assigned for vector 0xf4
[    1.735836] Last level iTLB entries: 4KB 1024, 2MB 1024, 4MB 512
[    1.735839] Last level dTLB entries: 4KB 2048, 2MB 2048, 4MB 1024, 1GB 0
[    1.735845] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user=
 pointer sanitization
[    1.735849] Spectre V2 : Mitigation: Full AMD retpoline
[    1.735851] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB=
 on context switch
[    1.735853] Spectre V2 : Enabling Restricted Speculation for firmware ca=
lls
[    1.735855] Spectre V2 : mitigation: Enabling conditional Indirect Branc=
h Prediction Barrier
[    1.735858] Spectre V2 : User space: Mitigation: STIBP via seccomp and p=
rctl
[    1.735860] Speculative Store Bypass: Mitigation: Speculative Store Bypa=
ss disabled via prctl and seccomp
[    1.736225] Freeing SMP alternatives memory: 32K
[    1.844242] smpboot: CPU0: AMD Ryzen 3 4300G with Radeon Graphics (famil=
y: 0x17, model: 0x60, stepping: 0x1)
[    1.845243] Performance Events: Fam17h+ core perfctr, AMD PMU driver.
[    1.845254] ... version:                0
[    1.845256] ... bit width:              48
[    1.845258] ... generic registers:      6
[    1.845259] ... value mask:             0000ffffffffffff
[    1.845261] ... max period:             00007fffffffffff
[    1.845263] ... fixed-purpose events:   0
[    1.845265] ... event mask:             000000000000003f
[    1.845496] rcu: Hierarchical SRCU implementation.
[    1.849560] NMI watchdog: Enabled. Permanently consumes one hw-PMU count=
er.
[    1.852535] smp: Bringing up secondary CPUs ...
[    1.853409] x86: Booting SMP configuration:
[    1.853412] .... node  #0, CPUs:        #1  #2  #3  #4  #5  #6  #7
[    1.874254] smp: Brought up 1 node, 8 CPUs
[    1.874260] smpboot: Max logical packages: 4
[    1.874262] smpboot: Total of 8 processors activated (60711.60 BogoMIPS)
[    1.882108] devtmpfs: initialized
[    1.882108] x86/mm: Memory block size: 128MB
[    1.931108] PM: Registering ACPI NVS region [mem 0x0a200000-0x0a20cfff] =
(53248 bytes)
[    1.931108] PM: Registering ACPI NVS region [mem 0xb8722000-0xb8a14fff] =
(3092480 bytes)
[    1.935783] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xfffffff=
f, max_idle_ns: 6370867519511994 ns
[    1.935824] futex hash table entries: 8192 (order: 7, 524288 bytes, line=
ar)
[    1.936354] pinctrl core: initialized pinctrl subsystem
[    1.937662] PM: RTC time: 18:01:44, date: 2021-07-05
[    1.938802] NET: Registered protocol family 16
[    1.940659] DMA: preallocated 4096 KiB GFP_KERNEL pool for atomic alloca=
tions
[    1.941182] DMA: preallocated 4096 KiB GFP_KERNEL|GFP_DMA pool for atomi=
c allocations
[    1.941702] DMA: preallocated 4096 KiB GFP_KERNEL|GFP_DMA32 pool for ato=
mic allocations
[    1.941826] audit: initializing netlink subsys (disabled)
[    1.941904] audit: type=3D2000 audit(1625508104.233:1): state=3Dinitiali=
zed audit_enabled=3D0 res=3D1
[    1.944097] thermal_sys: Registered thermal governor 'fair_share'
[    1.944100] thermal_sys: Registered thermal governor 'bang_bang'
[    1.944102] thermal_sys: Registered thermal governor 'step_wise'
[    1.944104] thermal_sys: Registered thermal governor 'user_space'
[    1.944106] thermal_sys: Registered thermal governor 'power_allocator'
[    1.944183] cpuidle: using governor ladder
[    1.944183] cpuidle: using governor menu
[    1.944183] ACPI: bus type PCI registered
[    1.944183] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    1.944828] PCI: MMCONFIG for domain 0000 [bus 00-7f] at [mem 0xf0000000=
-0xf7ffffff] (base 0xf0000000)
[    1.944842] PCI: MMCONFIG at [mem 0xf0000000-0xf7ffffff] reserved in E820
[    1.950889] PCI: Using configuration type 1 for base access
[    1.983636] Kprobes globally optimized
[    1.983989] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    1.983989] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    1.992155] ACPI: Added _OSI(Module Device)
[    1.992159] ACPI: Added _OSI(Processor Device)
[    1.992161] ACPI: Added _OSI(3.0 _SCP Extensions)
[    1.992163] ACPI: Added _OSI(Processor Aggregator Device)
[    1.992180] ACPI: Added _OSI(Linux-Dell-Video)
[    1.992194] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
[    1.992207] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)
[    2.797646] ACPI: 12 ACPI AML tables successfully acquired and loaded
[    2.847458] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    3.194961] ACPI: EC: EC started
[    3.194966] ACPI: EC: interrupt blocked
[    3.195008] ACPI: EC: EC_CMD/EC_SC=3D0x66, EC_DATA=3D0x62
[    3.195018] ACPI: \_SB_.PCI0.SBRG.EC0_: Boot DSDT EC used to handle tran=
sactions
[    3.195024] ACPI: Interpreter enabled
[    3.195193] ACPI: (supports S0 S3 S4 S5)
[    3.195196] ACPI: Using IOAPIC for interrupt routing
[    3.200393] PCI: Using host bridge windows from ACPI; if necessary, use =
"pci=3Dnocrs" and report a bug
[    3.215236] ACPI: Enabled 4 GPEs in block 00 to 1F
[    3.580211] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[    3.580251] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM Cloc=
kPM Segments MSI EDR HPX-Type3]
[    3.588446] acpi PNP0A08:00: _OSC: platform does not support [SHPCHotplu=
g AER LTR DPC]
[    3.596390] acpi PNP0A08:00: _OSC: OS now controls [PCIeHotplug PME PCIe=
Capability]
[    3.596579] acpi PNP0A08:00: [Firmware Info]: MMCONFIG for domain 0000 [=
bus 00-7f] only partially covers this bridge
[    3.610071] PCI host bridge to bus 0000:00
[    3.610083] pci_bus 0000:00: root bus resource [io  0x0000-0x03af window]
[    3.610096] pci_bus 0000:00: root bus resource [io  0x03e0-0x0cf7 window]
[    3.610107] pci_bus 0000:00: root bus resource [io  0x03b0-0x03df window]
[    3.610118] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    3.610130] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bfff=
f window]
[    3.610141] pci_bus 0000:00: root bus resource [mem 0x000c0000-0x000dfff=
f window]
[    3.610152] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfec2fff=
f window]
[    3.610163] pci_bus 0000:00: root bus resource [mem 0xfee00000-0xfffffff=
f window]
[    3.610176] pci_bus 0000:00: root bus resource [bus 00-ff]
[    3.610333] pci 0000:00:00.0: [1022:1630] type 00 class 0x060000
[    3.612614] pci 0000:00:00.2: [1022:1631] type 00 class 0x080600
[    3.614862] pci 0000:00:01.0: [1022:1632] type 00 class 0x060000
[    3.616444] pci 0000:00:02.0: [1022:1632] type 00 class 0x060000
[    3.618052] pci 0000:00:02.1: [1022:1634] type 01 class 0x060400
[    3.618078] pci 0000:00:02.1: enabling Extended Tags
[    3.618183] pci 0000:00:02.1: PME# supported from D0 D3hot D3cold
[    3.622301] pci 0000:00:02.2: [1022:1634] type 01 class 0x060400
[    3.622328] pci 0000:00:02.2: enabling Extended Tags
[    3.622432] pci 0000:00:02.2: PME# supported from D0 D3hot D3cold
[    3.625017] pci 0000:00:08.0: [1022:1632] type 00 class 0x060000
[    3.626612] pci 0000:00:08.1: [1022:1635] type 01 class 0x060400
[    3.626637] pci 0000:00:08.1: enabling Extended Tags
[    3.626737] pci 0000:00:08.1: PME# supported from D0 D3hot D3cold
[    3.629320] pci 0000:00:08.2: [1022:1635] type 01 class 0x060400
[    3.629345] pci 0000:00:08.2: enabling Extended Tags
[    3.629445] pci 0000:00:08.2: PME# supported from D0 D3hot D3cold
[    3.632062] pci 0000:00:14.0: [1022:790b] type 00 class 0x0c0500
[    3.634325] pci 0000:00:14.3: [1022:790e] type 00 class 0x060100
[    3.636604] pci 0000:00:18.0: [1022:1448] type 00 class 0x060000
[    3.638170] pci 0000:00:18.1: [1022:1449] type 00 class 0x060000
[    3.639716] pci 0000:00:18.2: [1022:144a] type 00 class 0x060000
[    3.641299] pci 0000:00:18.3: [1022:144b] type 00 class 0x060000
[    3.642859] pci 0000:00:18.4: [1022:144c] type 00 class 0x060000
[    3.644429] pci 0000:00:18.5: [1022:144d] type 00 class 0x060000
[    3.645990] pci 0000:00:18.6: [1022:144e] type 00 class 0x060000
[    3.647557] pci 0000:00:18.7: [1022:144f] type 00 class 0x060000
[    3.650047] pci 0000:01:00.0: [1022:43d1] type 00 class 0x0c0330
[    3.650068] pci 0000:01:00.0: reg 0x10: [mem 0xfcda0000-0xfcda7fff 64bit]
[    3.650111] pci 0000:01:00.0: enabling Extended Tags
[    3.650313] pci 0000:01:00.0: PME# supported from D3hot D3cold
[    3.651859] pci 0000:01:00.1: [1022:43c8] type 00 class 0x010601
[    3.651897] pci 0000:01:00.1: reg 0x24: [mem 0xfcd80000-0xfcd9ffff]
[    3.651905] pci 0000:01:00.1: reg 0x30: [mem 0xfcd00000-0xfcd7ffff pref]
[    3.651914] pci 0000:01:00.1: enabling Extended Tags
[    3.652099] pci 0000:01:00.1: PME# supported from D3hot D3cold
[    3.660042] pci 0000:01:00.2: [1022:43c6] type 01 class 0x060400
[    3.660088] pci 0000:01:00.2: enabling Extended Tags
[    3.660269] pci 0000:01:00.2: PME# supported from D3hot D3cold
[    3.661760] pci 0000:00:02.1: PCI bridge to [bus 01-0a]
[    3.661766] pci 0000:00:02.1:   bridge window [io  0xd000-0xefff]
[    3.661771] pci 0000:00:02.1:   bridge window [mem 0xfcb00000-0xfcdfffff]
[    3.664265] pci 0000:02:00.0: [1022:43c7] type 01 class 0x060400
[    3.664314] pci 0000:02:00.0: enabling Extended Tags
[    3.664573] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    3.666425] pci 0000:02:01.0: [1022:43c7] type 01 class 0x060400
[    3.666473] pci 0000:02:01.0: enabling Extended Tags
[    3.666735] pci 0000:02:01.0: PME# supported from D3hot D3cold
[    3.668564] pci 0000:02:02.0: [1022:43c7] type 01 class 0x060400
[    3.668612] pci 0000:02:02.0: enabling Extended Tags
[    3.668876] pci 0000:02:02.0: PME# supported from D3hot D3cold
[    3.670718] pci 0000:02:03.0: [1022:43c7] type 01 class 0x060400
[    3.670766] pci 0000:02:03.0: enabling Extended Tags
[    3.671027] pci 0000:02:03.0: PME# supported from D3hot D3cold
[    3.672863] pci 0000:02:04.0: [1022:43c7] type 01 class 0x060400
[    3.672912] pci 0000:02:04.0: enabling Extended Tags
[    3.673170] pci 0000:02:04.0: PME# supported from D3hot D3cold
[    3.675020] pci 0000:02:05.0: [1022:43c7] type 01 class 0x060400
[    3.675069] pci 0000:02:05.0: enabling Extended Tags
[    3.675331] pci 0000:02:05.0: PME# supported from D3hot D3cold
[    3.677201] pci 0000:02:06.0: [1022:43c7] type 01 class 0x060400
[    3.677249] pci 0000:02:06.0: enabling Extended Tags
[    3.677509] pci 0000:02:06.0: PME# supported from D3hot D3cold
[    3.679360] pci 0000:02:07.0: [1022:43c7] type 01 class 0x060400
[    3.679408] pci 0000:02:07.0: enabling Extended Tags
[    3.679668] pci 0000:02:07.0: PME# supported from D3hot D3cold
[    3.681502] pci 0000:01:00.2: PCI bridge to [bus 02-0a]
[    3.681510] pci 0000:01:00.2:   bridge window [io  0xd000-0xefff]
[    3.681516] pci 0000:01:00.2:   bridge window [mem 0xfcb00000-0xfccfffff]
[    3.682091] pci 0000:02:00.0: PCI bridge to [bus 03]
[    3.682671] pci 0000:02:01.0: PCI bridge to [bus 04]
[    3.683240] pci 0000:02:02.0: PCI bridge to [bus 05]
[    3.683819] pci 0000:02:03.0: PCI bridge to [bus 06]
[    3.684392] pci 0000:02:04.0: PCI bridge to [bus 07]
[    3.684675] pci 0000:02:05.0: PCI bridge to [bus 08]
[    3.685027] pci 0000:09:00.0: [10ec:c821] type 00 class 0x028000
[    3.685056] pci 0000:09:00.0: reg 0x10: [io  0xe000-0xe0ff]
[    3.685091] pci 0000:09:00.0: reg 0x18: [mem 0xfcc00000-0xfcc0ffff 64bit]
[    3.685567] pci 0000:09:00.0: supports D1 D2
[    3.685570] pci 0000:09:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    3.686427] pci 0000:02:06.0: PCI bridge to [bus 09]
[    3.686434] pci 0000:02:06.0:   bridge window [io  0xe000-0xefff]
[    3.686439] pci 0000:02:06.0:   bridge window [mem 0xfcc00000-0xfccfffff]
[    3.686767] pci 0000:0a:00.0: [10ec:8168] type 00 class 0x020000
[    3.686797] pci 0000:0a:00.0: reg 0x10: [io  0xd000-0xd0ff]
[    3.686836] pci 0000:0a:00.0: reg 0x18: [mem 0xfcb04000-0xfcb04fff 64bit]
[    3.686862] pci 0000:0a:00.0: reg 0x20: [mem 0xfcb00000-0xfcb03fff 64bit]
[    3.687312] pci 0000:0a:00.0: supports D1 D2
[    3.687314] pci 0000:0a:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    3.688181] pci 0000:02:07.0: PCI bridge to [bus 0a]
[    3.688188] pci 0000:02:07.0:   bridge window [io  0xd000-0xdfff]
[    3.688193] pci 0000:02:07.0:   bridge window [mem 0xfcb00000-0xfcbfffff]
[    3.688810] pci 0000:0b:00.0: [1c5c:1339] type 00 class 0x010802
[    3.688830] pci 0000:0b:00.0: reg 0x10: [mem 0xfcf00000-0xfcf03fff 64bit]
[    3.689078] pci 0000:0b:00.0: supports D1
[    3.689080] pci 0000:0b:00.0: PME# supported from D0 D1 D3hot
[    3.689157] pci 0000:0b:00.0: 15.752 Gb/s available PCIe bandwidth, limi=
ted by 8.0 GT/s PCIe x2 link at 0000:00:02.2 (capable of 31.504 Gb/s with 8=
=2E0 GT/s PCIe x4 link)
[    3.689819] pci 0000:00:02.2: PCI bridge to [bus 0b]
[    3.689825] pci 0000:00:02.2:   bridge window [mem 0xfcf00000-0xfcffffff]
[    3.691693] pci 0000:0c:00.0: [1002:1636] type 00 class 0x030000
[    3.691707] pci 0000:0c:00.0: reg 0x10: [mem 0xd0000000-0xdfffffff 64bit=
 pref]
[    3.691717] pci 0000:0c:00.0: reg 0x18: [mem 0xe0000000-0xe01fffff 64bit=
 pref]
[    3.691725] pci 0000:0c:00.0: reg 0x20: [io  0xf000-0xf0ff]
[    3.691733] pci 0000:0c:00.0: reg 0x24: [mem 0xfca00000-0xfca7ffff]
[    3.691744] pci 0000:0c:00.0: enabling Extended Tags
[    3.691887] pci 0000:0c:00.0: BAR 0: assigned to efifb
[    3.691937] pci 0000:0c:00.0: PME# supported from D1 D2 D3hot D3cold
[    3.691975] pci 0000:0c:00.0: 126.016 Gb/s available PCIe bandwidth, lim=
ited by 8.0 GT/s PCIe x16 link at 0000:00:08.1 (capable of 252.048 Gb/s wit=
h 16.0 GT/s PCIe x16 link)
[    3.693671] pci 0000:0c:00.1: [1002:1637] type 00 class 0x040300
[    3.693682] pci 0000:0c:00.1: reg 0x10: [mem 0xfca88000-0xfca8bfff]
[    3.693706] pci 0000:0c:00.1: enabling Extended Tags
[    3.693878] pci 0000:0c:00.1: PME# supported from D1 D2 D3hot D3cold
[    3.695558] pci 0000:0c:00.2: [1022:15df] type 00 class 0x108000
[    3.695574] pci 0000:0c:00.2: reg 0x18: [mem 0xfc900000-0xfc9fffff]
[    3.695587] pci 0000:0c:00.2: reg 0x24: [mem 0xfca8c000-0xfca8dfff]
[    3.695596] pci 0000:0c:00.2: enabling Extended Tags
[    3.697366] pci 0000:0c:00.3: [1022:1639] type 00 class 0x0c0330
[    3.697382] pci 0000:0c:00.3: reg 0x10: [mem 0xfc800000-0xfc8fffff 64bit]
[    3.697409] pci 0000:0c:00.3: enabling Extended Tags
[    3.697581] pci 0000:0c:00.3: PME# supported from D0 D3hot D3cold
[    3.699262] pci 0000:0c:00.4: [1022:1639] type 00 class 0x0c0330
[    3.699276] pci 0000:0c:00.4: reg 0x10: [mem 0xfc700000-0xfc7fffff 64bit]
[    3.699303] pci 0000:0c:00.4: enabling Extended Tags
[    3.699470] pci 0000:0c:00.4: PME# supported from D0 D3hot D3cold
[    3.701157] pci 0000:0c:00.6: [1022:15e3] type 00 class 0x040300
[    3.701168] pci 0000:0c:00.6: reg 0x10: [mem 0xfca80000-0xfca87fff]
[    3.701192] pci 0000:0c:00.6: enabling Extended Tags
[    3.701357] pci 0000:0c:00.6: PME# supported from D0 D3hot D3cold
[    3.703159] pci 0000:00:08.1: PCI bridge to [bus 0c]
[    3.703165] pci 0000:00:08.1:   bridge window [io  0xf000-0xffff]
[    3.703169] pci 0000:00:08.1:   bridge window [mem 0xfc700000-0xfcafffff]
[    3.703175] pci 0000:00:08.1:   bridge window [mem 0xd0000000-0xe01fffff=
 64bit pref]
[    3.703911] pci 0000:0d:00.0: [1022:7901] type 00 class 0x010601
[    3.703936] pci 0000:0d:00.0: reg 0x24: [mem 0xfce01000-0xfce017ff]
[    3.703946] pci 0000:0d:00.0: enabling Extended Tags
[    3.704154] pci 0000:0d:00.0: 126.016 Gb/s available PCIe bandwidth, lim=
ited by 8.0 GT/s PCIe x16 link at 0000:00:08.2 (capable of 252.048 Gb/s wit=
h 16.0 GT/s PCIe x16 link)
[    3.705404] pci 0000:0d:00.1: [1022:7901] type 00 class 0x010601
[    3.705429] pci 0000:0d:00.1: reg 0x24: [mem 0xfce00000-0xfce007ff]
[    3.705439] pci 0000:0d:00.1: enabling Extended Tags
[    3.706926] pci 0000:00:08.2: PCI bridge to [bus 0d]
[    3.706933] pci 0000:00:08.2:   bridge window [mem 0xfce00000-0xfcefffff]
[    3.719188] ACPI: PCI Interrupt Link [LNKA] (IRQs 4 5 7 10 11 14 15) *0
[    3.720993] ACPI: PCI Interrupt Link [LNKB] (IRQs 4 5 7 10 11 14 15) *0
[    3.722685] ACPI: PCI Interrupt Link [LNKC] (IRQs 4 5 7 10 11 14 15) *0
[    3.724579] ACPI: PCI Interrupt Link [LNKD] (IRQs 4 5 7 10 11 14 15) *0
[    3.726367] ACPI: PCI Interrupt Link [LNKE] (IRQs 4 5 7 10 11 14 15) *0
[    3.727890] ACPI: PCI Interrupt Link [LNKF] (IRQs 4 5 7 10 11 14 15) *0
[    3.729400] ACPI: PCI Interrupt Link [LNKG] (IRQs 4 5 7 10 11 14 15) *0
[    3.730923] ACPI: PCI Interrupt Link [LNKH] (IRQs 4 5 7 10 11 14 15) *0
[    3.748921] ACPI: EC: interrupt unblocked
[    3.748925] ACPI: EC: event unblocked
[    3.748931] ACPI: EC: EC_CMD/EC_SC=3D0x66, EC_DATA=3D0x62
[    3.748933] ACPI: EC: GPE=3D0x3
[    3.748945] ACPI: \_SB_.PCI0.SBRG.EC0_: Boot DSDT EC initialization comp=
lete
[    3.748962] ACPI: \_SB_.PCI0.SBRG.EC0_: EC: Used to handle transactions =
and events
[    3.749531] iommu: Default domain type: Translated=20
[    3.750467] pci 0000:0c:00.0: vgaarb: VGA device added: decodes=3Dio+mem=
,owns=3Dnone,locks=3Dnone
[    3.750470] pci 0000:0c:00.0: vgaarb: bridge control possible
[    3.750473] pci 0000:0c:00.0: vgaarb: setting as boot device
[    3.750476] vgaarb: loaded
[    3.753243] SCSI subsystem initialized
[    3.753883] libata version 3.00 loaded.
[    3.753932] ACPI: bus type USB registered
[    3.753977] usbcore: registered new interface driver usbfs
[    3.754032] usbcore: registered new interface driver hub
[    3.754119] usbcore: registered new device driver usb
[    3.754432] pps_core: LinuxPPS API ver. 1 registered
[    3.754434] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo =
Giometti <giometti@linux.it>
[    3.754483] PTP clock support registered
[    3.754579] EDAC MC: Ver: 3.0.0
[    3.755028] Registered efivars operations
[    3.758940] NetLabel: Initializing
[    3.758943] NetLabel:  domain hash size =3D 128
[    3.758945] NetLabel:  protocols =3D UNLABELED CIPSOv4 CALIPSO
[    3.759115] NetLabel:  unlabeled traffic allowed by default
[    3.759150] PCI: Using ACPI for IRQ routing
[    3.763418] PCI: pci_cache_line_size set to 64 bytes
[    3.763519] e820: reserve RAM buffer [mem 0x09c10000-0x0bffffff]
[    3.763535] e820: reserve RAM buffer [mem 0x0a200000-0x0bffffff]
[    3.763547] e820: reserve RAM buffer [mem 0x0b000000-0x0bffffff]
[    3.763559] e820: reserve RAM buffer [mem 0xb4c66018-0xb7ffffff]
[    3.763572] e820: reserve RAM buffer [mem 0xb5158000-0xb7ffffff]
[    3.763584] e820: reserve RAM buffer [mem 0xb6cf5000-0xb7ffffff]
[    3.763596] e820: reserve RAM buffer [mem 0xb8390000-0xbbffffff]
[    3.763609] e820: reserve RAM buffer [mem 0x81f380000-0x81fffffff]
[    3.763871] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[    3.763879] hpet0: 3 comparators, 32-bit 14.318180 MHz counter
[    3.767071] clocksource: Switched to clocksource tsc-early
[    3.947809] VFS: Disk quotas dquot_6.6.0
[    3.947952] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 byte=
s)
[    3.949538] pnp: PnP ACPI init
[    3.952235] system 00:00: [mem 0xf0000000-0xf7ffffff] has been reserved
[    3.952300] system 00:00: Plug and Play ACPI device, IDs PNP0c01 (active)
[    3.954888] system 00:01: [mem 0x820000000-0x83fffffff window] has been =
reserved
[    3.954948] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
[    3.959738] pnp 00:02: Plug and Play ACPI device, IDs PNP0b00 (active)
[    3.977677] system 00:03: [io  0x0a00-0x0a0f] has been reserved
[    3.977699] system 00:03: [io  0x0a10-0x0a1f] has been reserved
[    3.977720] system 00:03: [io  0x0a20-0x0a2f] has been reserved
[    3.977743] system 00:03: [io  0x0a30-0x0a3f] has been reserved
[    3.977763] system 00:03: [io  0x0a40-0x0a4f] has been reserved
[    3.977783] system 00:03: [io  0x0a50-0x0a5f] has been reserved
[    3.977803] system 00:03: [io  0x0a60-0x0a6f] has been reserved
[    3.977823] system 00:03: [io  0x0a70-0x0a7f] has been reserved
[    3.977843] system 00:03: [io  0x0a80-0x0a8f] has been reserved
[    3.977863] system 00:03: [io  0x0a90-0x0b8e] has been reserved
[    3.977884] system 00:03: [io  0x0aa0-0x0aaf] has been reserved
[    3.977904] system 00:03: [io  0x0ab0-0x0abf] has been reserved
[    3.977924] system 00:03: [io  0x0ac0-0x0acf] has been reserved
[    3.977944] system 00:03: [io  0x0ad0-0x0adf] has been reserved
[    3.977979] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    3.985055] system 00:04: [io  0x04d0-0x04d1] has been reserved
[    3.985077] system 00:04: [io  0x040b] has been reserved
[    3.985097] system 00:04: [io  0x04d6] has been reserved
[    3.985117] system 00:04: [io  0x0c00-0x0c01] has been reserved
[    3.985137] system 00:04: [io  0x0c14] has been reserved
[    3.985157] system 00:04: [io  0x0c50-0x0c51] has been reserved
[    3.985177] system 00:04: [io  0x0c52] has been reserved
[    3.985198] system 00:04: [io  0x0c6c] has been reserved
[    3.985221] system 00:04: [io  0x0c6f] has been reserved
[    3.985241] system 00:04: [io  0x0cd0-0x0cd1] has been reserved
[    3.985261] system 00:04: [io  0x0cd2-0x0cd3] has been reserved
[    3.985281] system 00:04: [io  0x0cd4-0x0cd5] has been reserved
[    3.985302] system 00:04: [io  0x0cd6-0x0cd7] has been reserved
[    3.985327] system 00:04: [io  0x0cd8-0x0cdf] has been reserved
[    3.985347] system 00:04: [io  0x0800-0x089f] has been reserved
[    3.985367] system 00:04: [io  0x0b00-0x0b0f] has been reserved
[    3.985388] system 00:04: [io  0x0b20-0x0b3f] has been reserved
[    3.985408] system 00:04: [io  0x0900-0x090f] has been reserved
[    3.985428] system 00:04: [io  0x0910-0x091f] has been reserved
[    3.985460] system 00:04: [mem 0xfec00000-0xfec00fff] could not be reser=
ved
[    3.985491] system 00:04: [mem 0xfec01000-0xfec01fff] could not be reser=
ved
[    3.985513] system 00:04: [mem 0xfedc0000-0xfedc0fff] has been reserved
[    3.985536] system 00:04: [mem 0xfee00000-0xfee00fff] has been reserved
[    3.985566] system 00:04: [mem 0xfed80000-0xfed8ffff] could not be reser=
ved
[    3.985588] system 00:04: [mem 0xfec10000-0xfec10fff] has been reserved
[    3.985611] system 00:04: [mem 0xff000000-0xffffffff] has been reserved
[    3.985645] system 00:04: Plug and Play ACPI device, IDs PNP0c02 (active)
[    4.000921] pnp: PnP ACPI: found 5 devices
[    4.022230] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, m=
ax_idle_ns: 2085701024 ns
[    4.022930] NET: Registered protocol family 2
[    4.025189] tcp_listen_portaddr_hash hash table entries: 16384 (order: 6=
, 262144 bytes, linear)
[    4.025717] TCP established hash table entries: 262144 (order: 9, 209715=
2 bytes, linear)
[    4.027463] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes,=
 linear)
[    4.027836] TCP: Hash tables configured (established 262144 bind 65536)
[    4.028821] MPTCP token hash table entries: 32768 (order: 7, 786432 byte=
s, linear)
[    4.029224] UDP hash table entries: 16384 (order: 7, 524288 bytes, linea=
r)
[    4.029555] UDP-Lite hash table entries: 16384 (order: 7, 524288 bytes, =
linear)
[    4.030765] NET: Registered protocol family 1
[    4.030807] NET: Registered protocol family 44
[    4.030838] pci 0000:02:00.0: PCI bridge to [bus 03]
[    4.030860] pci 0000:02:01.0: PCI bridge to [bus 04]
[    4.030873] pci 0000:02:02.0: PCI bridge to [bus 05]
[    4.030885] pci 0000:02:03.0: PCI bridge to [bus 06]
[    4.030898] pci 0000:02:04.0: PCI bridge to [bus 07]
[    4.030910] pci 0000:02:05.0: PCI bridge to [bus 08]
[    4.030922] pci 0000:02:06.0: PCI bridge to [bus 09]
[    4.030927] pci 0000:02:06.0:   bridge window [io  0xe000-0xefff]
[    4.030933] pci 0000:02:06.0:   bridge window [mem 0xfcc00000-0xfccfffff]
[    4.030944] pci 0000:02:07.0: PCI bridge to [bus 0a]
[    4.030947] pci 0000:02:07.0:   bridge window [io  0xd000-0xdfff]
[    4.030953] pci 0000:02:07.0:   bridge window [mem 0xfcb00000-0xfcbfffff]
[    4.030963] pci 0000:01:00.2: PCI bridge to [bus 02-0a]
[    4.030967] pci 0000:01:00.2:   bridge window [io  0xd000-0xefff]
[    4.030973] pci 0000:01:00.2:   bridge window [mem 0xfcb00000-0xfccfffff]
[    4.030982] pci 0000:00:02.1: PCI bridge to [bus 01-0a]
[    4.030985] pci 0000:00:02.1:   bridge window [io  0xd000-0xefff]
[    4.030990] pci 0000:00:02.1:   bridge window [mem 0xfcb00000-0xfcdfffff]
[    4.030997] pci 0000:00:02.2: PCI bridge to [bus 0b]
[    4.031001] pci 0000:00:02.2:   bridge window [mem 0xfcf00000-0xfcffffff]
[    4.031010] pci 0000:00:08.1: PCI bridge to [bus 0c]
[    4.031014] pci 0000:00:08.1:   bridge window [io  0xf000-0xffff]
[    4.031018] pci 0000:00:08.1:   bridge window [mem 0xfc700000-0xfcafffff]
[    4.031022] pci 0000:00:08.1:   bridge window [mem 0xd0000000-0xe01fffff=
 64bit pref]
[    4.031029] pci 0000:00:08.2: PCI bridge to [bus 0d]
[    4.031033] pci 0000:00:08.2:   bridge window [mem 0xfce00000-0xfcefffff]
[    4.031043] pci_bus 0000:00: resource 4 [io  0x0000-0x03af window]
[    4.031047] pci_bus 0000:00: resource 5 [io  0x03e0-0x0cf7 window]
[    4.031050] pci_bus 0000:00: resource 6 [io  0x03b0-0x03df window]
[    4.031053] pci_bus 0000:00: resource 7 [io  0x0d00-0xffff window]
[    4.031057] pci_bus 0000:00: resource 8 [mem 0x000a0000-0x000bffff windo=
w]
[    4.031060] pci_bus 0000:00: resource 9 [mem 0x000c0000-0x000dffff windo=
w]
[    4.031064] pci_bus 0000:00: resource 10 [mem 0xc0000000-0xfec2ffff wind=
ow]
[    4.031067] pci_bus 0000:00: resource 11 [mem 0xfee00000-0xffffffff wind=
ow]
[    4.031071] pci_bus 0000:01: resource 0 [io  0xd000-0xefff]
[    4.031074] pci_bus 0000:01: resource 1 [mem 0xfcb00000-0xfcdfffff]
[    4.031078] pci_bus 0000:02: resource 0 [io  0xd000-0xefff]
[    4.031081] pci_bus 0000:02: resource 1 [mem 0xfcb00000-0xfccfffff]
[    4.031085] pci_bus 0000:09: resource 0 [io  0xe000-0xefff]
[    4.031088] pci_bus 0000:09: resource 1 [mem 0xfcc00000-0xfccfffff]
[    4.031092] pci_bus 0000:0a: resource 0 [io  0xd000-0xdfff]
[    4.031095] pci_bus 0000:0a: resource 1 [mem 0xfcb00000-0xfcbfffff]
[    4.031098] pci_bus 0000:0b: resource 1 [mem 0xfcf00000-0xfcffffff]
[    4.031102] pci_bus 0000:0c: resource 0 [io  0xf000-0xffff]
[    4.031105] pci_bus 0000:0c: resource 1 [mem 0xfc700000-0xfcafffff]
[    4.031108] pci_bus 0000:0c: resource 2 [mem 0xd0000000-0xe01fffff 64bit=
 pref]
[    4.031112] pci_bus 0000:0d: resource 1 [mem 0xfce00000-0xfcefffff]
[    4.035088] pci 0000:0c:00.1: D0 power state depends on 0000:0c:00.0
[    4.039436] PCI: CLS 64 bytes, default 64
[    4.039874] Trying to unpack rootfs image as initramfs...
[    4.303879] Freeing initrd memory: 8380K
[    4.437100] pci 0000:00:00.2: AMD-Vi: Unable to read/write to IOMMU perf=
 counter.
[    4.437124] fbcon: Taking over console
[    4.438778] pci 0000:00:00.2: can't derive routing for PCI INT A
[    4.438783] pci 0000:00:00.2: PCI INT A: not connected
[    4.439066] pci 0000:00:01.0: Adding to iommu group 0
[    4.439254] pci 0000:00:02.0: Adding to iommu group 1
[    4.439416] pci 0000:00:02.1: Adding to iommu group 2
[    4.439576] pci 0000:00:02.2: Adding to iommu group 3
[    4.439749] pci 0000:00:08.0: Adding to iommu group 4
[    4.439838] pci 0000:00:08.1: Adding to iommu group 4
[    4.439927] pci 0000:00:08.2: Adding to iommu group 4
[    4.440092] pci 0000:00:14.0: Adding to iommu group 5
[    4.440181] pci 0000:00:14.3: Adding to iommu group 5
[    4.440425] pci 0000:00:18.0: Adding to iommu group 6
[    4.440520] pci 0000:00:18.1: Adding to iommu group 6
[    4.440619] pci 0000:00:18.2: Adding to iommu group 6
[    4.440708] pci 0000:00:18.3: Adding to iommu group 6
[    4.440798] pci 0000:00:18.4: Adding to iommu group 6
[    4.440887] pci 0000:00:18.5: Adding to iommu group 6
[    4.440976] pci 0000:00:18.6: Adding to iommu group 6
[    4.441068] pci 0000:00:18.7: Adding to iommu group 6
[    4.441251] pci 0000:01:00.0: Adding to iommu group 7
[    4.441342] pci 0000:01:00.1: Adding to iommu group 7
[    4.441433] pci 0000:01:00.2: Adding to iommu group 7
[    4.441513] pci 0000:02:00.0: Adding to iommu group 7
[    4.441591] pci 0000:02:01.0: Adding to iommu group 7
[    4.441668] pci 0000:02:02.0: Adding to iommu group 7
[    4.441752] pci 0000:02:03.0: Adding to iommu group 7
[    4.441842] pci 0000:02:04.0: Adding to iommu group 7
[    4.441919] pci 0000:02:05.0: Adding to iommu group 7
[    4.442006] pci 0000:02:06.0: Adding to iommu group 7
[    4.442089] pci 0000:02:07.0: Adding to iommu group 7
[    4.442167] pci 0000:09:00.0: Adding to iommu group 7
[    4.442254] pci 0000:0a:00.0: Adding to iommu group 7
[    4.442401] pci 0000:0b:00.0: Adding to iommu group 8
[    4.442495] pci 0000:0c:00.0: Adding to iommu group 4
[    4.442579] pci 0000:0c:00.1: Adding to iommu group 4
[    4.442657] pci 0000:0c:00.2: Adding to iommu group 4
[    4.442736] pci 0000:0c:00.3: Adding to iommu group 4
[    4.442815] pci 0000:0c:00.4: Adding to iommu group 4
[    4.442901] pci 0000:0c:00.6: Adding to iommu group 4
[    4.442980] pci 0000:0d:00.0: Adding to iommu group 4
[    4.443062] pci 0000:0d:00.1: Adding to iommu group 4
[    4.485919] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40
[    4.485927] pci 0000:00:00.2: AMD-Vi: Extended features (0x206d73ef22254=
ade):
[    4.485930]  PPR X2APIC NX GT IA GA PC GA_vAPIC
[    4.485941] AMD-Vi: Interrupt remapping enabled
[    4.485943] AMD-Vi: Virtual APIC enabled
[    4.485944] AMD-Vi: X2APIC enabled
[    4.486507] AMD-Vi: Lazy IO/TLB flushing enabled
[    4.486638] amd_uncore: 4  amd_df counters detected
[    4.486658] amd_uncore: 6  amd_l3 counters detected
[    4.487370] LVT offset 0 assigned for vector 0x400
[    4.487665] perf: AMD IBS detected (0x000003ff)
[    4.493516] check: Scanning for low memory corruption every 60 seconds
[    4.501303] Initialise system trusted keyrings
[    4.501370] Key type blacklist registered
[    4.501686] workingset: timestamp_bits=3D41 max_order=3D23 bucket_order=
=3D0
[    4.535407] zbud: loaded
[    4.543286] Key type asymmetric registered
[    4.543290] Asymmetric key parser 'x509' registered
[    4.543383] Block layer SCSI generic (bsg) driver version 0.4 loaded (ma=
jor 243)
[    4.543676] io scheduler mq-deadline registered
[    4.543680] io scheduler kyber registered
[    4.544306] io scheduler bfq registered
[    4.548330] pcieport 0000:00:02.1: PME: Signaling with IRQ 26
[    4.549376] pcieport 0000:00:02.2: PME: Signaling with IRQ 27
[    4.550413] pcieport 0000:00:08.1: PME: Signaling with IRQ 28
[    4.552624] pcieport 0000:00:08.2: PME: Signaling with IRQ 29
[    4.566880] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    4.567202] efifb: probing for efifb
[    4.567582] efifb: framebuffer at 0xd0000000, using 3072k, total 3072k
[    4.567585] efifb: mode is 1024x768x32, linelength=3D4096, pages=3D1
[    4.567588] efifb: scrolling: redraw
[    4.567589] efifb: Truecolor: size=3D8:8:8:8, shift=3D24:16:8:0
[    4.568816] Console: switching to colour frame buffer device 128x48
[    4.573826] fb0: EFI VGA frame buffer device
[    4.574618] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0=
C0C:00/input/input0
[    4.575001] ACPI: button: Power Button [PWRB]
[    4.575507] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/inpu=
t/input1
[    4.577445] ACPI: button: Power Button [PWRF]
[    4.578214] Monitor-Mwait will be used to enter C-1 state
[    4.578264] ACPI: \_PR_.C000: Found 3 idle states
[    4.579833] ACPI: \_PR_.C002: Found 3 idle states
[    4.581513] ACPI: \_PR_.C004: Found 3 idle states
[    4.583007] ACPI: \_PR_.C006: Found 3 idle states
[    4.584708] ACPI: \_PR_.C001: Found 3 idle states
[    4.586254] ACPI: \_PR_.C003: Found 3 idle states
[    4.587838] ACPI: \_PR_.C005: Found 3 idle states
[    4.589535] ACPI: \_PR_.C007: Found 3 idle states
[    4.606622] thermal LNXTHERM:00: registered as thermal_zone0
[    4.606629] ACPI: thermal: Thermal Zone [HPTZ] (30 C)
[    4.608252] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    4.632735] Non-volatile memory driver v1.3
[    4.632741] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
[    4.645325] nvme nvme0: pci function 0000:0b:00.0
[    4.645645] ahci 0000:01:00.1: version 3.0
[    4.645660] ahci 0000:01:00.1: enabling device (0100 -> 0102)
[    4.647511] ahci 0000:01:00.1: SSS flag set, parallel bus scan disabled
[    4.647582] ahci 0000:01:00.1: AHCI 0001.0301 32 slots 8 ports 6 Gbps 0x=
ff impl SATA mode
[    4.647587] ahci 0000:01:00.1: flags: 64bit ncq sntf stag pm led clo onl=
y pmp pio slum part sxs deso sadm sds apst=20
[    4.651792] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
[    4.651913] BUG: KASAN: use-after-free in __iommu_dma_unmap_swiotlb+0x64=
/0xb0
[    4.652031] Read of size 8 at addr ffff8887c008f000 by task swapper/0/0

[    4.652162] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.12.0-rc3-debug-0=
0033-g167e3e00e2be #1
[    4.652168] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[    4.652172] Call Trace:
[    4.652176]  <IRQ>
[    4.652180]  dump_stack+0x9c/0xcf
[    4.652189]  print_address_description.constprop.0+0x18/0x130
[    4.652196]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
[    4.652202]  kasan_report.cold+0x7f/0x111
[    4.652211]  ? __iommu_dma_unmap_swiotlb+0x64/0xb0
[    4.652217]  __iommu_dma_unmap_swiotlb+0x64/0xb0
[    4.652224]  nvme_pci_complete_rq+0x73/0x130
[    4.652232]  blk_complete_reqs+0x6f/0x80
[    4.652239]  __do_softirq+0xfc/0x3be
[    4.652247]  irq_exit_rcu+0xce/0x120
[    4.652254]  common_interrupt+0x80/0xa0
[    4.652261]  </IRQ>
[    4.652264]  asm_common_interrupt+0x1e/0x40
[    4.652270] RIP: 0010:cpuidle_enter_state+0xf9/0x590
[    4.652277] Code: 3d 14 09 b7 51 e8 57 a6 49 ff 49 89 c5 0f 1f 44 00 00 =
31 ff e8 18 bb 49 ff 80 3c 24 00 0f 85 aa 02 00 00 fb 66 0f 1f 44 00 00 <45=
> 85 f6 0f 88 39 02 00 00 49 63 ee 48 8d 44 6d 00 48 8d 44 85 00
[    4.652283] RSP: 0018:ffffffffaf807df0 EFLAGS: 00000246
[    4.652289] RAX: 0000000000000000 RBX: ffff88810bd09000 RCX: ffffffffad9=
44885
[    4.652293] RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff8887c32=
35648
[    4.652297] RBP: 0000000000000003 R08: 0000000000000001 R09: ffff8887c32=
356d7
[    4.652300] R10: ffffed10f8646ada R11: 0000000000000001 R12: ffffffffafc=
5bfc0
[    4.652304] R13: 0000000115446cbb R14: 0000000000000003 R15: ffffffffafc=
5c150
[    4.652309]  ? sched_idle_set_state+0x25/0x30
[    4.652317]  ? tick_nohz_idle_stop_tick+0x217/0x420
[    4.652325]  cpuidle_enter+0x3c/0x60
[    4.652331]  do_idle+0x2fa/0x3c0
[    4.652338]  ? arch_cpu_idle_exit+0x40/0x40
[    4.652345]  cpu_startup_entry+0x19/0x20
[    4.652350]  start_kernel+0x3a9/0x3c7
[    4.652359]  secondary_startup_64_no_verify+0xc2/0xcb

[    4.652395] The buggy address belongs to the page:
[    4.652456] page:00000000a3938bc3 refcount:0 mapcount:0 mapping:00000000=
00000000 index:0x0 pfn:0x7c008f
[    4.652461] flags: 0x2ffff0000000000()
[    4.652466] raw: 02ffff0000000000 ffffea001f0023c8 ffffea001f0023c8 0000=
000000000000
[    4.652470] raw: 0000000000000000 0000000000000000 00000000ffffffff 0000=
000000000000
[    4.652472] page dumped because: kasan: bad access detected

[    4.652491] Memory state around the buggy address:
[    4.652547]  ffff8887c008ef00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652621]  ffff8887c008ef80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652695] >ffff8887c008f000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652768]                    ^
[    4.652803]  ffff8887c008f080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652877]  ffff8887c008f100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652950] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
[    4.653029] Disabling lock debugging due to kernel taint
[    4.653309] nvme nvme0: missing or invalid SUBNQN field.
[    4.663105] nvme nvme0: 16/0/0 default/read/poll queues
[    4.668311] scsi host0: ahci
[    4.669899]  nvme0n1: p1 p2
[    4.670702] scsi host1: ahci
[    4.672616] scsi host2: ahci
[    4.674521] scsi host3: ahci
[    4.676781] scsi host4: ahci
[    4.678791] scsi host5: ahci
[    4.680663] scsi host6: ahci
[    4.682714] scsi host7: ahci
[    4.683697] ata1: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
100 irq 44
[    4.683702] ata2: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
180 irq 44
[    4.683707] ata3: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
200 irq 44
[    4.683710] ata4: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
280 irq 44
[    4.683714] ata5: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
300 irq 44
[    4.683718] ata6: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
380 irq 44
[    4.683722] ata7: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
400 irq 44
[    4.683726] ata8: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
480 irq 44
[    4.684113] ahci 0000:0d:00.0: enabling device (0100 -> 0102)
[    4.686333] ahci 0000:0d:00.0: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x=
1 impl SATA mode
[    4.686342] ahci 0000:0d:00.0: flags: 64bit ncq sntf ilck pm led clo onl=
y pmp fbs pio slum part=20
[    4.688739] scsi host8: ahci
[    4.689732] ata9: SATA max UDMA/133 abar m2048@0xfce01000 port 0xfce0110=
0 irq 62
[    4.689877] ahci 0000:0d:00.1: enabling device (0100 -> 0102)
[    4.691535] ahci 0000:0d:00.1: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x=
1 impl SATA mode
[    4.691544] ahci 0000:0d:00.1: flags: 64bit ncq sntf ilck pm led clo onl=
y pmp fbs pio slum part=20
[    4.694012] scsi host9: ahci
[    4.695026] ata10: SATA max UDMA/133 abar m2048@0xfce00000 port 0xfce001=
00 irq 64
[    4.695247] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    4.695279] ehci-pci: EHCI PCI platform driver
[    4.695395] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    4.695415] ohci-pci: OHCI PCI platform driver
[    4.695512] uhci_hcd: USB Universal Host Controller Interface driver
[    4.696210] usbcore: registered new interface driver usbserial_generic
[    4.696264] usbserial: USB Serial support registered for generic
[    4.697317] rtc_cmos 00:02: RTC can wake from S4
[    4.699142] rtc_cmos 00:02: registered as rtc0
[    4.699426] rtc_cmos 00:02: setting system clock to 2021-07-05T18:01:47 =
UTC (1625508107)
[    4.699656] rtc_cmos 00:02: alarms up to one month, y3k, 114 bytes nvram=
, hpet irqs
[    4.700290] ledtrig-cpu: registered to indicate activity on CPUs
[    4.705912] hid: raw HID events driver (C) Jiri Kosina
[    4.706429] drop_monitor: Initializing network drop monitor service
[    4.706594] Initializing XFRM netlink socket
[    4.708814] NET: Registered protocol family 10
[    4.733033] Segment Routing with IPv6
[    4.733041] RPL Segment Routing with IPv6
[    4.733175] NET: Registered protocol family 17
[    4.744516] microcode: CPU0: patch_level=3D0x08600106
[    4.744563] microcode: CPU1: patch_level=3D0x08600106
[    4.744657] microcode: CPU2: patch_level=3D0x08600106
[    4.744739] microcode: CPU3: patch_level=3D0x08600106
[    4.744804] microcode: CPU4: patch_level=3D0x08600106
[    4.744848] microcode: CPU5: patch_level=3D0x08600106
[    4.744916] microcode: CPU6: patch_level=3D0x08600106
[    4.744975] microcode: CPU7: patch_level=3D0x08600106
[    4.745002] microcode: Microcode Update Driver: v2.2.
[    4.745820] resctrl: L3 allocation detected
[    4.745827] resctrl: L3DATA allocation detected
[    4.745829] resctrl: L3CODE allocation detected
[    4.745830] resctrl: MB allocation detected
[    4.745832] resctrl: L3 monitoring detected
[    4.745838] IPI shorthand broadcast: enabled
[    4.745984] sched_clock: Marking stable (4739676488, 6007714)->(47476761=
29, -1991927)
[    4.746812] registered taskstats version 1
[    4.746922] Loading compiled-in X.509 certificates
[    4.757340] Loaded X.509 cert 'Build time autogenerated kernel key: 32cf=
4ae6b69274291395e11399683edef2a4e147'
[    4.762638] zswap: loaded using pool lz4/z3fold
[    4.764606] Key type ._fscrypt registered
[    4.764612] Key type .fscrypt registered
[    4.764614] Key type fscrypt-provisioning registered
[    4.776597] PM:   Magic number: 13:252:38
[    4.776765] memory memory207: hash matches
[    4.776798] memory memory74: hash matches
[    4.778951] RAS: Correctable Errors collector initialized.
[    4.995881] ata1: SATA link down (SStatus 0 SControl 300)
[    5.000972] ata9: SATA link down (SStatus 0 SControl 300)
[    5.005458] ata10: SATA link down (SStatus 0 SControl 300)
[    5.310074] ata2: SATA link down (SStatus 0 SControl 300)
[    5.490688] tsc: Refined TSC clocksource calibration: 3819.727 MHz
[    5.490713] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x6e1=
e4508946, max_idle_ns: 881590469268 ns
[    5.490821] clocksource: Switched to clocksource tsc
[    5.622021] ata3: SATA link down (SStatus 0 SControl 300)
[    5.932590] ata4: SATA link down (SStatus 0 SControl 300)
[    6.245698] ata5: SATA link down (SStatus 0 SControl 300)
[    6.559773] ata6: SATA link down (SStatus 0 SControl 300)
[    6.872755] ata7: SATA link down (SStatus 0 SControl 300)
[    7.185687] ata8: SATA link down (SStatus 0 SControl 300)
[    7.200470] Freeing unused decrypted memory: 2036K
[    7.201233] Freeing unused kernel image (initmem) memory: 2012K
[    7.201243] Write protecting the kernel read-only data: 32768k
[    7.202524] Freeing unused kernel image (text/rodata gap) memory: 2036K
[    7.203212] Freeing unused kernel image (rodata/data gap) memory: 1768K
[    7.261659] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[    7.261671] rodata_test: all tests were successful
[    7.261705] Run /init as init process
[    7.261708]   with arguments:
[    7.261710]     /init
[    7.261712]   with environment:
[    7.261714]     HOME=3D/
[    7.261716]     TERM=3Dlinux
[    8.072610] xhci_hcd 0000:01:00.0: xHCI Host Controller
[    8.072718] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus =
number 1
[    8.128723] xhci_hcd 0000:01:00.0: hcc params 0x0200ef81 hci version 0x1=
10 quirks 0x0000000000000410
[    8.136551] usb usb1: New USB device found, idVendor=3D1d6b, idProduct=
=3D0002, bcdDevice=3D 5.12
[    8.136562] usb usb1: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.136567] usb usb1: Product: xHCI Host Controller
[    8.136572] usb usb1: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.136576] usb usb1: SerialNumber: 0000:01:00.0
[    8.139731] hub 1-0:1.0: USB hub found
[    8.139944] hub 1-0:1.0: 14 ports detected
[    8.155361] xhci_hcd 0000:01:00.0: xHCI Host Controller
[    8.155411] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus =
number 2
[    8.155437] xhci_hcd 0000:01:00.0: Host supports USB 3.1 Enhanced SuperS=
peed
[    8.155750] usb usb2: We don't know the algorithms for LPM for this host=
, disabling LPM.
[    8.156512] usb usb2: New USB device found, idVendor=3D1d6b, idProduct=
=3D0003, bcdDevice=3D 5.12
[    8.156521] usb usb2: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.156525] usb usb2: Product: xHCI Host Controller
[    8.156528] usb usb2: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.156530] usb usb2: SerialNumber: 0000:01:00.0
[    8.158456] hub 2-0:1.0: USB hub found
[    8.158657] hub 2-0:1.0: 8 ports detected
[    8.171454] xhci_hcd 0000:0c:00.3: xHCI Host Controller
[    8.171543] xhci_hcd 0000:0c:00.3: new USB bus registered, assigned bus =
number 3
[    8.172082] xhci_hcd 0000:0c:00.3: hcc params 0x0268ffe5 hci version 0x1=
10 quirks 0x0000000000000410
[    8.178578] usb usb3: New USB device found, idVendor=3D1d6b, idProduct=
=3D0002, bcdDevice=3D 5.12
[    8.178589] usb usb3: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.178594] usb usb3: Product: xHCI Host Controller
[    8.178598] usb usb3: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.178602] usb usb3: SerialNumber: 0000:0c:00.3
[    8.181189] hub 3-0:1.0: USB hub found
[    8.181388] hub 3-0:1.0: 4 ports detected
[    8.185965] xhci_hcd 0000:0c:00.3: xHCI Host Controller
[    8.186032] xhci_hcd 0000:0c:00.3: new USB bus registered, assigned bus =
number 4
[    8.186059] xhci_hcd 0000:0c:00.3: Host supports USB 3.1 Enhanced SuperS=
peed
[    8.186366] usb usb4: We don't know the algorithms for LPM for this host=
, disabling LPM.
[    8.187099] usb usb4: New USB device found, idVendor=3D1d6b, idProduct=
=3D0003, bcdDevice=3D 5.12
[    8.187108] usb usb4: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.187113] usb usb4: Product: xHCI Host Controller
[    8.187117] usb usb4: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.187122] usb usb4: SerialNumber: 0000:0c:00.3
[    8.189404] hub 4-0:1.0: USB hub found
[    8.189539] hub 4-0:1.0: 2 ports detected
[    8.192958] xhci_hcd 0000:0c:00.4: xHCI Host Controller
[    8.193016] xhci_hcd 0000:0c:00.4: new USB bus registered, assigned bus =
number 5
[    8.193395] xhci_hcd 0000:0c:00.4: hcc params 0x0268ffe5 hci version 0x1=
10 quirks 0x0000000000000410
[    8.197879] usb usb5: New USB device found, idVendor=3D1d6b, idProduct=
=3D0002, bcdDevice=3D 5.12
[    8.197887] usb usb5: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.197890] usb usb5: Product: xHCI Host Controller
[    8.197893] usb usb5: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.197895] usb usb5: SerialNumber: 0000:0c:00.4
[    8.199515] hub 5-0:1.0: USB hub found
[    8.199659] hub 5-0:1.0: 4 ports detected
[    8.202842] xhci_hcd 0000:0c:00.4: xHCI Host Controller
[    8.202887] xhci_hcd 0000:0c:00.4: new USB bus registered, assigned bus =
number 6
[    8.202913] xhci_hcd 0000:0c:00.4: Host supports USB 3.1 Enhanced SuperS=
peed
[    8.203133] usb usb6: We don't know the algorithms for LPM for this host=
, disabling LPM.
[    8.203610] usb usb6: New USB device found, idVendor=3D1d6b, idProduct=
=3D0003, bcdDevice=3D 5.12
[    8.203614] usb usb6: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.203618] usb usb6: Product: xHCI Host Controller
[    8.203620] usb usb6: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.203623] usb usb6: SerialNumber: 0000:0c:00.4
[    8.205252] hub 6-0:1.0: USB hub found
[    8.205385] hub 6-0:1.0: 2 ports detected
[    8.483770] usb 1-11: new full-speed USB device number 2 using xhci_hcd
[    8.616313] SGI XFS with ACLs, security attributes, realtime, scrub, rep=
air, quota, no debug enabled
[    8.629895] XFS (nvme0n1p2): Mounting V5 Filesystem
[    8.640814] XFS (nvme0n1p2): Ending clean mount
[    8.643784] xfs filesystem being mounted at /new_root supports timestamp=
s until 2038 (0x7fffffff)
[    8.701705] random: fast init done
[    8.850769] random: crng init done
[    8.850799] systemd[1]: Successfully credited entropy passed from boot l=
oader.
[    8.854073] systemd[1]: systemd 248.3-2-arch running in system mode. (+P=
AM +AUDIT -SELINUX -APPARMOR -IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL =
+ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +L=
IBFDISK +PCRE2 -PWQUALITY +P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +XK=
BCOMMON +UTMP -SYSVINIT default-hierarchy=3Dunified)
[    8.870978] systemd[1]: Detected architecture x86-64.
[    8.874172] systemd[1]: Hostname set to <hp-4300G>.
[    8.883148] usb 1-11: New USB device found, idVendor=3D046d, idProduct=
=3Dc534, bcdDevice=3D29.01
[    8.883160] usb 1-11: New USB device strings: Mfr=3D1, Product=3D2, Seri=
alNumber=3D0
[    8.883165] usb 1-11: Product: USB Receiver
[    8.883169] usb 1-11: Manufacturer: Logitech
[    8.964795] systemd-fstab-generator[252]: Mount point  is not a valid pa=
th, ignoring.
[    8.965686] systemd-fstab-generator[252]: Mount point  is not a valid pa=
th, ignoring.
[    9.023787] usb 1-12: new full-speed USB device number 3 using xhci_hcd
[    9.133143] systemd[1]: Queued start job for default target Graphical In=
terface.
[    9.141522] systemd[1]: Created slice system-getty.slice.
[    9.143519] systemd[1]: Created slice system-modprobe.slice.
[    9.148031] systemd[1]: Created slice User and Session Slice.
[    9.148561] systemd[1]: Started Dispatch Password Requests to Console Di=
rectory Watch.
[    9.149038] systemd[1]: Started Forward Password Requests to Wall Direct=
ory Watch.
[    9.150164] systemd[1]: Set up automount Arbitrary Executable File Forma=
ts File System Automount Point.
[    9.150701] systemd[1]: Reached target Local Encrypted Volumes.
[    9.150901] systemd[1]: Reached target Login Prompts.
[    9.151100] systemd[1]: Reached target Paths.
[    9.151278] systemd[1]: Reached target Remote File Systems.
[    9.151475] systemd[1]: Reached target Slices.
[    9.151661] systemd[1]: Reached target Swap.
[    9.151839] systemd[1]: Reached target Local Verity Integrity Protected =
Volumes.
[    9.153881] systemd[1]: Listening on Device-mapper event daemon FIFOs.
[    9.157470] systemd[1]: Listening on Process Core Dump Socket.
[    9.159900] systemd[1]: Listening on Journal Audit Socket.
[    9.162031] systemd[1]: Listening on Journal Socket (/dev/log).
[    9.164219] systemd[1]: Listening on Journal Socket.
[    9.166260] systemd[1]: Listening on Network Service Netlink Socket.
[    9.169746] systemd[1]: Listening on udev Control Socket.
[    9.171892] systemd[1]: Listening on udev Kernel Socket.
[    9.178783] systemd[1]: Mounting Huge Pages File System...
[    9.186001] systemd[1]: Mounting POSIX Message Queue File System...
[    9.192864] systemd[1]: Mounting Kernel Debug File System...
[    9.199803] systemd[1]: Mounting Kernel Trace File System...
[    9.207150] systemd[1]: Starting Create list of static device nodes for =
the current kernel...
[    9.220054] systemd[1]: Starting Load Kernel Module configfs...
[    9.227187] systemd[1]: Starting Load Kernel Module drm...
[    9.234146] systemd[1]: Starting Load Kernel Module fuse...
[    9.240238] Linux agpgart interface v0.103
[    9.242093] systemd[1]: Starting Set Up Additional Binary Formats...
[    9.243933] systemd[1]: Condition check resulted in File System Check on=
 Root Device being skipped.
[    9.258253] fuse: init (API version 7.33)
[    9.258750] systemd[1]: Starting Journal Service...
[    9.269031] systemd[1]: Starting Load Kernel Modules...
[    9.275818] systemd[1]: Starting Remount Root and Kernel File Systems...
[    9.278268] systemd[1]: Condition check resulted in Repartition Root Dis=
k being skipped.
[    9.285440] systemd[1]: Starting Coldplug All udev Devices...
[    9.289436] Asymmetric key parser 'pkcs8' registered
[    9.295407] systemd[1]: Mounted Huge Pages File System.
[    9.297675] systemd[1]: Mounted POSIX Message Queue File System.
[    9.299077] XFS: attr2 mount option is deprecated.
[    9.299875] systemd[1]: Mounted Kernel Debug File System.
[    9.302121] systemd[1]: Mounted Kernel Trace File System.
[    9.302305] xfs filesystem being remounted at / supports timestamps unti=
l 2038 (0x7fffffff)
[    9.307207] systemd[1]: Finished Create list of static device nodes for =
the current kernel.
[    9.309211] audit: type=3D1130 audit(1625508112.104:2): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dkmod-static-nodes comm=3D"=
systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D=
? res=3Dsuccess'
[    9.310701] systemd[1]: modprobe@configfs.service: Deactivated successfu=
lly.
[    9.312189] systemd[1]: Finished Load Kernel Module configfs.
[    9.314011] audit: type=3D1130 audit(1625508112.111:3): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@configfs comm=3D"=
systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D=
? res=3Dsuccess'
[    9.314063] audit: type=3D1131 audit(1625508112.111:4): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@configfs comm=3D"=
systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D=
? res=3Dsuccess'
[    9.315399] systemd[1]: modprobe@drm.service: Deactivated successfully.
[    9.316866] systemd[1]: Finished Load Kernel Module drm.
[    9.319018] audit: type=3D1130 audit(1625508112.114:5): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@drm comm=3D"syste=
md" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? res=
=3Dsuccess'
[    9.319063] audit: type=3D1131 audit(1625508112.114:6): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@drm comm=3D"syste=
md" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? res=
=3Dsuccess'
[    9.320369] systemd[1]: modprobe@fuse.service: Deactivated successfully.
[    9.322053] systemd[1]: Finished Load Kernel Module fuse.
[    9.323928] audit: type=3D1130 audit(1625508112.121:7): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@fuse comm=3D"syst=
emd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? re=
s=3Dsuccess'
[    9.323969] audit: type=3D1131 audit(1625508112.121:8): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@fuse comm=3D"syst=
emd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? re=
s=3Dsuccess'
[    9.325885] systemd[1]: Finished Load Kernel Modules.
[    9.327726] audit: type=3D1130 audit(1625508112.124:9): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-modules-load comm=
=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termina=
l=3D? res=3Dsuccess'
[    9.329640] systemd[1]: Finished Remount Root and Kernel File Systems.
[    9.331465] audit: type=3D1130 audit(1625508112.128:10): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-remount-fs comm=
=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termina=
l=3D? res=3Dsuccess'
[    9.331966] systemd[1]: proc-sys-fs-binfmt_misc.automount: Got automount=
 request for /proc/sys/fs/binfmt_misc, triggered by 268 (systemd-binfmt)
[    9.334658] usb 1-12: New USB device found, idVendor=3D0bda, idProduct=
=3Db00a, bcdDevice=3D 1.10
[    9.334669] usb 1-12: New USB device strings: Mfr=3D1, Product=3D2, Seri=
alNumber=3D3
[    9.334673] usb 1-12: Product: Bluetooth Radio=20
[    9.334677] usb 1-12: Manufacturer: Realtek=20
[    9.334681] usb 1-12: SerialNumber: 00e04c000001
[    9.337615] systemd[1]: Mounting Arbitrary Executable File Formats File =
System...
[    9.345171] systemd[1]: Mounting FUSE Control File System...
[    9.352671] systemd[1]: Mounting Kernel Configuration File System...
[    9.354660] systemd[1]: Condition check resulted in First Boot Wizard be=
ing skipped.
[    9.356762] systemd[1]: Condition check resulted in Rebuild Hardware Dat=
abase being skipped.
[    9.362335] systemd[1]: Starting Load/Save Random Seed...
[    9.370337] systemd[1]: Starting Apply Kernel Variables...
[    9.377555] systemd[1]: Starting Create System Users...
[    9.384837] systemd[1]: Mounted Arbitrary Executable File Formats File S=
ystem.
[    9.388928] systemd[1]: Mounted FUSE Control File System.
[    9.391926] systemd[1]: Mounted Kernel Configuration File System.
[    9.396765] systemd[1]: Finished Load/Save Random Seed.
[    9.400536] audit: type=3D1130 audit(1625508112.194:11): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-random-seed comm=
=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termina=
l=3D? res=3Dsuccess'
[    9.407538] systemd[1]: Finished Apply Kernel Variables.
[    9.411712] systemd[1]: Finished Set Up Additional Binary Formats.
[    9.416339] systemd[1]: Finished Create System Users.
[    9.418688] systemd[1]: Condition check resulted in First Boot Complete =
being skipped.
[    9.424186] systemd[1]: Starting Create Static Device Nodes in /dev...
[    9.480449] systemd[1]: Finished Create Static Device Nodes in /dev.
[    9.482506] systemd[1]: Reached target Local File Systems (Pre).
[    9.489210] systemd[1]: Mounting /tmp...
[    9.491124] systemd[1]: Condition check resulted in Virtual Machine and =
Container Storage (Compatibility) being skipped.
[    9.503225] systemd[1]: Starting Rule-based Manager for Device Events an=
d Files...
[    9.508551] systemd[1]: Mounted /tmp.
[    9.573272] systemd[1]: Started Rule-based Manager for Device Events and=
 Files.
[    9.588922] systemd[1]: Starting Network Service...
[    9.638950] systemd[1]: Started Journal Service.
[    9.664886] systemd-journald[269]: Received client request to flush runt=
ime journal.
[    9.759611] Bluetooth: Core ver 2.22
[    9.759775] NET: Registered protocol family 31
[    9.759778] Bluetooth: HCI device and connection manager initialized
[    9.759794] Bluetooth: HCI socket layer initialized
[    9.759807] Bluetooth: L2CAP socket layer initialized
[    9.759838] Bluetooth: SCO socket layer initialized
[    9.784432] usbcore: registered new interface driver btusb
[    9.786588] Bluetooth: hci0: RTL: examining hci_ver=3D08 hci_rev=3D000c =
lmp_ver=3D08 lmp_subver=3D8821
[    9.789596] Bluetooth: hci0: RTL: rom_version status=3D0 version=3D1
[    9.789666] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_fw.bin
[    9.793321] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_config.bin
[    9.794035] Bluetooth: hci0: RTL: cfg_sz 10, total sz 31990
[   10.052152] acpi_cpufreq: overriding BIOS provided _PSD data
[   10.063914] acpi-tad ACPI000E:00: Missing _PRW
[   10.241179] ACPI: video: Video Device [VGA1] (multi-head: yes  rom: no  =
post: no)
[   10.264286] acpi device:1e: registered as cooling_device8
[   10.269015] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08=
:00/device:1d/LNXVIDEO:01/input/input2
[   10.319302] acpi PNP0C14:01: duplicate WMI GUID 05901221-D566-11D1-B2F0-=
00A0C9062910 (first instance was on PNP0C14:00)
[   10.358026] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, re=
vision 0
[   10.358037] piix4_smbus 0000:00:14.0: Using register 0x02 for SMBus port=
 selection
[   10.358941] piix4_smbus 0000:00:14.0: Auxiliary SMBus Host Controller at=
 0xb20
[   10.362274] ccp 0000:0c:00.2: enabling device (0100 -> 0102)
[   10.364925] ccp 0000:0c:00.2: ccp: unable to access the device: you migh=
t be running a broken BIOS.
[   10.375365] ccp 0000:0c:00.2: tee enabled
[   10.375376] ccp 0000:0c:00.2: psp enabled
[   10.394306] sp5100_tco: SP5100/SB800 TCO WatchDog Timer Driver
[   10.395169] sp5100-tco sp5100-tco: Using 0xfeb00000 for watchdog MMIO ad=
dress
[   10.396264] sp5100-tco sp5100-tco: initialized. heartbeat=3D60 sec (nowa=
yout=3D0)
[   10.471471] input: PC Speaker as /devices/platform/pcspkr/input/input3
[   10.500876] RAPL PMU: API unit is 2^-32 Joules, 1 fixed counters, 163840=
 ms ovfl timer
[   10.500885] RAPL PMU: hw unit of domain package 2^-16 Joules
[   10.533106] cryptd: max_cpu_qlen set to 1000
[   10.572803] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:=
02.1/0000:01:00.0/usb1/1-11/1-11:1.0/0003:046D:C534.0001/input/input4
[   10.601442] libphy: r8169: probed
[   10.603871] r8169 0000:0a:00.0 eth0: RTL8168h/8111h, 00:68:eb:ad:98:43, =
XID 541, IRQ 91
[   10.603884] r8169 0000:0a:00.0 eth0: jumbo features [frames: 9194 bytes,=
 tx checksumming: ko]
[   10.618131] cfg80211: Loading compiled-in X.509 certificates for regulat=
ory database
[   10.632919] AVX2 version of gcm_enc/dec engaged.
[   10.633000] AES CTR mode by8 optimization enabled
[   10.633757] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.1=
1 Keyboard [Logitech USB Receiver] on usb-0000:01:00.0-11/input0
[   10.642569] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[   10.643042] platform regulatory.0: Direct firmware load for regulatory.d=
b failed with error -2
[   10.643062] cfg80211: failed to load regulatory.db
[   10.676986] input: Logitech USB Receiver Mouse as /devices/pci0000:00/00=
00:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/input/input5
[   10.680342] input: Logitech USB Receiver Consumer Control as /devices/pc=
i0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/i=
nput/input6
[   10.729484] FAT-fs (nvme0n1p1): Volume was not properly unmounted. Some =
data may be corrupt. Please run fsck.
[   10.738574] input: Logitech USB Receiver System Control as /devices/pci0=
000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/inp=
ut/input7
[   10.740269] hid-generic 0003:046D:C534.0002: input,hiddev96,hidraw1: USB=
 HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:01:00.0-11/input1
[   10.740698] usbcore: registered new interface driver usbhid
[   10.740702] usbhid: USB HID core driver
[   10.878631] snd_hda_intel 0000:0c:00.1: enabling device (0100 -> 0102)
[   10.879924] snd_hda_intel 0000:0c:00.1: Handle vga_switcheroo audio clie=
nt
[   10.880070] Bluetooth: hci0: RTL: fw version 0x829a7644
[   10.893377] snd_hda_intel 0000:0c:00.6: enabling device (0100 -> 0102)
[   10.918940] irq 7: nobody cared (try booting with the "irqpoll" option)
[   10.921972] CPU: 4 PID: 363 Comm: systemd-tmpfile Tainted: G    B       =
      5.12.0-rc3-debug-00033-g167e3e00e2be #1
[   10.921980] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[   10.921984] Call Trace:
[   10.921987]  <IRQ>
[   10.921990]  dump_stack+0x9c/0xcf
[   10.922002]  __report_bad_irq+0x43/0xde
[   10.922011]  note_interrupt.cold+0x28/0x8b
[   10.922019]  ? add_interrupt_randomness+0x152/0x270
[   10.922027]  handle_irq_event+0x14e/0x160
[   10.922036]  ? handle_irq_event_percpu+0xf0/0xf0
[   10.922043]  ? _raw_spin_lock+0x81/0xe0
[   10.922050]  ? _raw_spin_lock_bh+0xe0/0xe0
[   10.922057]  handle_fasteoi_irq+0xfa/0x370
[   10.922065]  __common_interrupt+0x4f/0xc0
[   10.922073]  common_interrupt+0x7b/0xa0
[   10.922081]  </IRQ>
[   10.922084]  asm_common_interrupt+0x1e/0x40
[   10.922090] RIP: 0010:file_ra_state_init+0x5/0xb0
[   10.922098] Code: 00 48 0f 44 f0 48 89 35 a9 cd bc 02 e8 d4 d4 e4 ff e9 =
8f fe ff ff cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 0f 1f 44 00 00 <41=
> 54 55 48 89 f5 53 48 89 fb 48 89 f7 e8 a9 ec 0c 00 48 8b 6d 00
[   10.922104] RSP: 0018:ffffc90000fcf9e8 EFLAGS: 00000246
[   10.922111] RAX: 0000000000000000 RBX: ffff88811ef2e5c0 RCX: ffffffffadc=
a322f
[   10.922115] RDX: dffffc0000000000 RSI: ffff8881258b5ae8 RDI: ffff88811ef=
2e658
[   10.922120] RBP: ffff8881258b5970 R08: ffffffffadca3202 R09: ffff8881258=
b5ad7
[   10.922124] R10: ffffed1024b16b5a R11: 0000000000000001 R12: 00000000000=
00000
[   10.922128] R13: ffff8881258b5970 R14: ffff88811ef2e604 R15: ffff88811ef=
2e600
[   10.922134]  ? do_dentry_open+0x352/0x6d0
[   10.922140]  ? do_dentry_open+0x37f/0x6d0
[   10.922148]  do_dentry_open+0x38f/0x6d0
[   10.922155]  ? xfs_extent_busy_ag_cmp+0x50/0x50 [xfs]
[   10.922565]  path_openat+0x1278/0x1840
[   10.922576]  ? path_lookupat+0x300/0x300
[   10.922583]  ? rwsem_down_write_slowpath+0xb70/0xb70
[   10.922592]  ? handle_mm_fault+0x18f/0x3d0
[   10.922599]  ? do_user_addr_fault+0x34b/0x950
[   10.922607]  do_filp_open+0x11f/0x240
[   10.922615]  ? may_open_dev+0x50/0x50
[   10.922624]  ? __fdget+0x10/0x10
[   10.922630]  ? _raw_spin_lock+0x81/0xe0
[   10.922637]  ? _find_next_bit.constprop.0+0x3e/0xf0
[   10.922645]  ? alloc_fd+0x129/0x280
[   10.922651]  do_sys_openat2+0x114/0x230
[   10.922658]  ? build_open_flags+0x250/0x250
[   10.922666]  __x64_sys_openat+0xcd/0x140
[   10.922672]  ? __x64_sys_open+0x130/0x130
[   10.922679]  ? ktime_get_coarse_real_ts64+0x4a/0x70
[   10.922687]  do_syscall_64+0x33/0x40
[   10.922694]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[   10.922701] RIP: 0033:0x7f5dca6be8cc
[   10.922706] Code: 24 18 31 c0 41 83 e2 40 75 44 89 f0 25 00 00 41 00 3d =
00 00 41 00 74 36 44 89 c2 4c 89 ce bf 9c ff ff ff b8 01 01 00 00 0f 05 <48=
> 3d 00 f0 ff ff 77 44 48 8b 54 24 18 64 48 2b 14 25 28 00 00 00
[   10.922712] RSP: 002b:00007ffef51fa140 EFLAGS: 00000287 ORIG_RAX: 000000=
0000000101
[   10.922718] RAX: ffffffffffffffda RBX: 00005598f2a69ad0 RCX: 00007f5dca6=
be8cc
[   10.922723] RDX: 0000000000080000 RSI: 00007f5dc9d0215e RDI: 00000000fff=
fff9c
[   10.922727] RBP: 0000000000000008 R08: 0000000000080000 R09: 00007f5dc9d=
0215e
[   10.922731] R10: 0000000000000000 R11: 0000000000000287 R12: 00007f5dca7=
5555f
[   10.922735] R13: 00005598f2a69ad0 R14: 0000000000000001 R15: 00005598f2a=
6f690
[   10.922742] handlers:
[   10.925696] [<00000000447508a4>] amd_gpio_irq_handler [pinctrl_amd]
[   10.928757] Disabling IRQ #7
[   11.000127] r8169 0000:0a:00.0 enp10s0: renamed from eth0
[   11.040131] input: HD-Audio Generic HDMI/DP,pcm=3D3 as /devices/pci0000:=
00/0000:00:08.1/0000:0c:00.1/sound/card0/input10
[   11.062301] snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC671: li=
ne_outs=3D1 (0x14/0x0/0x0/0x0/0x0) type:line
[   11.062314] snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=3D0 (0x0/=
0x0/0x0/0x0/0x0)
[   11.062321] snd_hda_codec_realtek hdaudioC1D0:    hp_outs=3D1 (0x21/0x0/=
0x0/0x0/0x0)
[   11.062327] snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=3D0x0
[   11.062331] snd_hda_codec_realtek hdaudioC1D0:    inputs:
[   11.062335] snd_hda_codec_realtek hdaudioC1D0:      Mic=3D0x19
[   11.062340] snd_hda_codec_realtek hdaudioC1D0:      Line=3D0x1b
[   11.100251] input: HD-Audio Generic Mic as /devices/pci0000:00/0000:00:0=
8.1/0000:0c:00.6/sound/card1/input12
[   11.136401] input: HD-Audio Generic Line as /devices/pci0000:00/0000:00:=
08.1/0000:0c:00.6/sound/card1/input13
[   11.137883] input: HD-Audio Generic Line Out as /devices/pci0000:00/0000=
:00:08.1/0000:0c:00.6/sound/card1/input14
[   11.138953] input: HD-Audio Generic Front Headphone as /devices/pci0000:=
00/0000:00:08.1/0000:0c:00.6/sound/card1/input15
[   11.176742] logitech-djreceiver 0003:046D:C534.0001: hidraw0: USB HID v1=
=2E11 Keyboard [Logitech USB Receiver] on usb-0000:01:00.0-11/input0
[   11.227161] Generic FE-GE Realtek PHY r8169-a00:00: attached PHY driver =
(mii_bus:phy_addr=3Dr8169-a00:00, irq=3DMAC)
[   11.237250] kvm: Nested Virtualization enabled
[   11.237675] SVM: kvm: Nested Paging enabled
[   11.237678] SVM: Virtual VMLOAD VMSAVE supported
[   11.237680] SVM: Virtual GIF supported
[   11.254272] rtw_8821ce 0000:09:00.0: enabling device (0100 -> 0103)
[   11.255242] rtw_8821ce 0000:09:00.0: Firmware version 24.8.0, H2C versio=
n 12
[   11.259785] MCE: In-kernel MCE decoding enabled.
[   11.363583] intel_rapl_common: Found RAPL domain package
[   11.363589] intel_rapl_common: Found RAPL domain core
[   11.410765] logitech-djreceiver 0003:046D:C534.0002: hiddev96,hidraw1: U=
SB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:01:00.0-11/input1
[   11.420576] r8169 0000:0a:00.0 enp10s0: Link is Down
[   11.466717] input: HP WMI hotkeys as /devices/virtual/input/input11
[   11.469832] logitech-djreceiver 0003:046D:C534.0002: device of type eQUA=
D nano Lite (0x0a) connected on slot 1
[   11.471818] logitech-djreceiver 0003:046D:C534.0002: device of type eQUA=
D nano Lite (0x0a) connected on slot 2
[   11.472590] input: Logitech Wireless Keyboard PID:4075 Keyboard as /devi=
ces/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.=
0002/0003:046D:4075.0003/input/input16
[   11.508438] hid-generic 0003:046D:4075.0003: input,hidraw2: USB HID v1.1=
1 Keyboard [Logitech Wireless Keyboard PID:4075] on usb-0000:01:00.0-11/inp=
ut1:1
[   11.516054] input: Logitech Wireless Mouse PID:4054 Mouse as /devices/pc=
i0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0=
003:046D:4054.0004/input/input21
[   11.517269] hid-generic 0003:046D:4054.0004: input,hidraw3: USB HID v1.1=
1 Mouse [Logitech Wireless Mouse PID:4054] on usb-0000:01:00.0-11/input1:2
[   11.562528] mousedev: PS/2 mouse device common for all mice
[   11.564389] [drm] amdgpu kernel modesetting enabled.
[   11.589805] Virtual CRAT table created for CPU
[   11.590262] amdgpu: Topology: Add CPU node
[   11.591010] checking generic (d0000000 300000) vs hw (d0000000 10000000)
[   11.591018] fb0: switching to amdgpudrmfb from EFI VGA
[   11.592584] Console: switching to colour dummy device 80x25
[   11.592857] amdgpu 0000:0c:00.0: vgaarb: deactivate vga console
[   11.594681] amdgpu 0000:0c:00.0: enabling device (0106 -> 0107)
[   11.601781] [drm] initializing kernel modesetting (RENOIR 0x1002:0x1636 =
0x103C:0x87D6 0xCA).
[   11.601801] amdgpu 0000:0c:00.0: amdgpu: Trusted Memory Zone (TMZ) featu=
re disabled as experimental (default)
[   11.601948] [drm] register mmio base: 0xFCA00000
[   11.601955] [drm] register mmio size: 524288
[   11.601959] [drm] PCIE atomic ops is not supported
[   11.602930] [drm] add ip block number 0 <soc15_common>
[   11.602939] [drm] add ip block number 1 <gmc_v9_0>
[   11.602941] [drm] add ip block number 2 <vega10_ih>
[   11.602944] [drm] add ip block number 3 <psp>
[   11.602946] [drm] add ip block number 4 <smu>
[   11.602949] [drm] add ip block number 5 <gfx_v9_0>
[   11.602951] [drm] add ip block number 6 <sdma_v4_0>
[   11.602954] [drm] add ip block number 7 <dm>
[   11.602956] [drm] add ip block number 8 <vcn_v2_0>
[   11.602959] [drm] add ip block number 9 <jpeg_v2_0>
[   11.603002] amdgpu 0000:0c:00.0: amdgpu: Fetched VBIOS from VFCT
[   11.603051] amdgpu: ATOM BIOS: 113-RENOIR-026
[   11.605135] [drm] VCN decode is enabled in VM mode
[   11.605141] [drm] VCN encode is enabled in VM mode
[   11.605144] [drm] JPEG decode is enabled in VM mode
[   11.606408] [drm] vm size is 262144 GB, 4 levels, block size is 9-bit, f=
ragment size is 9-bit
[   11.606531] amdgpu 0000:0c:00.0: amdgpu: VRAM: 512M 0x000000F400000000 -=
 0x000000F41FFFFFFF (512M used)
[   11.606539] amdgpu 0000:0c:00.0: amdgpu: GART: 1024M 0x0000000000000000 =
- 0x000000003FFFFFFF
[   11.606545] amdgpu 0000:0c:00.0: amdgpu: AGP: 267419648M 0x000000F800000=
000 - 0x0000FFFFFFFFFFFF
[   11.606585] [drm] Detected VRAM RAM=3D512M, BAR=3D512M
[   11.606588] [drm] RAM width 128bits DDR4
[   11.607685] [TTM] Zone  kernel: Available graphics memory: 14040156 KiB
[   11.607693] [TTM] Zone   dma32: Available graphics memory: 2097152 KiB
[   11.630603] [drm] amdgpu: 512M of VRAM memory ready
[   11.630690] [drm] amdgpu: 3072M of GTT memory ready.
[   11.630759] ------------[ cut here ]------------
[   11.630762] amdgpu 0000:0c:00.0: Buffer overflow detected. Allocation si=
ze: 3005. Mapping size: 4096.
[   11.630776] WARNING: CPU: 2 PID: 314 at kernel/dma/swiotlb.c:380 swiotlb=
_bounce+0x19b/0x1c0
[   11.630787] Modules linked in: joydev fjes(-) mousedev intel_rapl_msr in=
tel_rapl_common amdgpu(+) edac_mce_amd rtw88_8821ce rtw88_8821c rtw88_pci k=
vm_amd rtw88_core kvm snd_hda_codec_realtek snd_hda_codec_generic hp_wmi(+)=
 ledtrig_audio hid_logitech_dj snd_hda_codec_hdmi wmi_bmof sparse_keymap ir=
qbypass snd_hda_intel mac80211 snd_intel_dspcfg crct10dif_pclmul crc32_pclm=
ul snd_intel_sdw_acpi vfat fat ghash_clmulni_intel snd_hda_codec gpu_sched =
i2c_algo_bit aesni_intel drm_ttm_helper ttm crypto_simd r8169 snd_hda_core =
cryptd drm_kms_helper rapl realtek snd_hwdep cfg80211 mdio_devres pcspkr sn=
d_pcm k10temp cec snd_timer libphy sp5100_tco libarc4 tpm_crb snd syscopyar=
ea i2c_piix4 ccp sysfillrect soundcore sysimgblt fb_sys_fops usbhid tpm_tis=
 tpm_tis_core wmi video tpm gpio_amdpt pinctrl_amd rng_core gpio_generic ma=
c_hid acpi_tad acpi_cpufreq btusb btrtl btbcm btintel bluetooth ecdh_generi=
c rfkill ecc crc16 pkcs8_key_parser drm fuse agpgart bpf_preload ip_tables =
x_tables xfs libcrc32c
[   11.630983]  crc32c_generic crc32c_intel xhci_pci xhci_pci_renesas
[   11.630996] CPU: 2 PID: 314 Comm: systemd-udevd Tainted: G    B         =
    5.12.0-rc3-debug-00033-g167e3e00e2be #1
[   11.631003] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[   11.631007] RIP: 0010:swiotlb_bounce+0x19b/0x1c0
[   11.631014] Code: ef e8 a9 df 28 00 4c 8b 6d 00 48 89 ef e8 4d 23 8c 00 =
4d 89 f0 48 89 d9 4c 89 ea 48 89 c6 48 c7 c7 a0 ed e8 ae e8 3d 57 e7 00 <0f=
> 0b 48 c7 c7 e0 89 5b af 49 89 de e8 74 df 28 00 48 8b 05 dd 41
[   11.631020] RSP: 0018:ffffc9000190f138 EFLAGS: 00010286
[   11.631026] RAX: 0000000000000000 RBX: 0000000000000bbd RCX: 00000000000=
00000
[   11.631030] RDX: 0000000000000027 RSI: 0000000000000004 RDI: fffff520003=
21e19
[   11.631034] RBP: ffff8881050190c8 R08: ffffffffadacdcae R09: ffff8887c32=
a06eb
[   11.631038] R10: ffffed10f86540dd R11: 0000000000000001 R12: 000000000a2=
0d443
[   11.631042] R13: ffff888105081c90 R14: 0000000000001000 R15: 00000000000=
00002
[   11.631046] FS:  00007fbdc0f1ca40(0000) GS:ffff8887c3280000(0000) knlGS:=
0000000000000000
[   11.631051] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.631055] CR2: 00007fd6d40117f8 CR3: 000000013da9c000 CR4: 00000000003=
50ee0
[   11.631060] Call Trace:
[   11.631065]  swiotlb_tbl_map_single+0x6bb/0x6f0
[   11.631074]  swiotlb_map+0xc1/0x3f0
[   11.631080]  ? drm_mm_init+0x126/0x140 [drm]
[   11.631206]  ? swiotlb_sync_single_for_cpu+0x20/0x20
[   11.631213]  ? ttm_range_man_init+0xdd/0x100 [ttm]
[   11.631236]  ? amdgpu_ttm_init.cold+0x153/0x16f [amdgpu]
[   11.632193]  dma_map_page_attrs+0x299/0x390
[   11.632200]  ? dmam_free_coherent+0xe0/0xe0
[   11.632207]  amdgpu_gart_init+0x77/0xf0 [amdgpu]
[   11.632909]  gmc_v9_0_sw_init+0x910/0x980 [amdgpu]
[   11.633492]  ? gmc_v9_0_late_init+0xe0/0xe0 [amdgpu]
[   11.634128]  ? __drmm_add_action+0xf0/0x140 [drm]
[   11.634214]  ? drm_mode_config_cleanup+0x480/0x480 [drm]
[   11.634297]  ? drm_mode_config_cleanup+0x480/0x480 [drm]
[   11.634381]  amdgpu_device_init.cold+0x1483/0x2400 [amdgpu]
[   11.635013]  ? amdgpu_device_cache_pci_state+0x90/0x90 [amdgpu]
[   11.635601]  ? pci_find_saved_ext_cap+0x80/0x80
[   11.635607]  ? pci_bus_read_config_byte+0xf0/0xf0
[   11.635611]  ? __list_add_valid+0x2b/0xa0
[   11.635616]  ? kasan_unpoison+0x3a/0x60
[   11.635621]  ? pci_enable_device_flags+0x19c/0x250
[   11.635625]  ? pci_enable_bridge+0xe0/0xe0
[   11.635630]  amdgpu_driver_load_kms+0xb1/0x3f0 [amdgpu]
[   11.636214]  amdgpu_pci_probe+0x172/0x200 [amdgpu]
[   11.636796]  ? amdgpu_pci_remove+0x80/0x80 [amdgpu]
[   11.637510]  local_pci_probe+0x74/0xc0
[   11.637517]  pci_device_probe+0x1ee/0x300
[   11.637522]  ? pci_device_remove+0x100/0x100
[   11.637527]  ? kernfs_put+0x18/0x30
[   11.637531]  ? sysfs_do_create_link_sd+0x76/0xd0
[   11.637536]  really_probe+0x185/0x6c0
[   11.637541]  driver_probe_device+0x13f/0x1d0
[   11.637545]  device_driver_attach+0x110/0x120
[   11.637549]  ? device_driver_attach+0x120/0x120
[   11.637553]  __driver_attach+0xae/0x1a0
[   11.637557]  ? device_driver_attach+0x120/0x120
[   11.637560]  bus_for_each_dev+0xe6/0x140
[   11.637565]  ? subsys_dev_iter_exit+0x10/0x10
[   11.637569]  ? __list_add_valid+0x2b/0xa0
[   11.637574]  bus_add_driver+0x1f8/0x2e0
[   11.637580]  driver_register+0x10f/0x190
[   11.637584]  ? 0xffffffffc1588000
[   11.637588]  do_one_initcall+0x89/0x2a0
[   11.637593]  ? perf_trace_initcall_level+0x230/0x230
[   11.637597]  ? kfree+0xc3/0x480
[   11.637602]  ? kasan_set_track+0x1c/0x30
[   11.637607]  ? kasan_unpoison+0x3a/0x60
[   11.637611]  ? kasan_unpoison+0x3a/0x60
[   11.637615]  do_init_module+0xfd/0x3c0
[   11.637622]  load_module+0x3f44/0x41a0
[   11.637626]  ? xfs_file_buffered_read+0x82/0x130 [xfs]
[   11.637883]  ? module_frob_arch_sections+0x20/0x20
[   11.637888]  ? kernel_read+0x46/0xb0
[   11.637893]  ? kernel_read_file+0x1d2/0x3e0
[   11.637901]  ? __do_sys_finit_module+0x110/0x1a0
[   11.637905]  __do_sys_finit_module+0x110/0x1a0
[   11.637909]  ? __ia32_sys_init_module+0x40/0x40
[   11.637913]  ? get_nth_filter.part.0+0x170/0x170
[   11.637918]  ? randomize_stack_top+0x80/0x80
[   11.637923]  ? __ia32_compat_sys_newlstat+0x30/0x30
[   11.637929]  ? __audit_syscall_entry+0x193/0x1f0
[   11.637933]  ? ktime_get_coarse_real_ts64+0x4a/0x70
[   11.637938]  do_syscall_64+0x33/0x40
[   11.637944]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[   11.637949] RIP: 0033:0x7fbdc184c18d
[   11.637953] Code: b4 0c 00 0f 05 eb a9 66 0f 1f 44 00 00 f3 0f 1e fa 48 =
89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48=
> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b3 6c 0c 00 f7 d8 64 89 01 48
[   11.637957] RSP: 002b:00007ffeae8de308 EFLAGS: 00000246 ORIG_RAX: 000000=
0000000139
[   11.637962] RAX: ffffffffffffffda RBX: 000055db08823060 RCX: 00007fbdc18=
4c18d
[   11.637965] RDX: 0000000000000000 RSI: 00007fbdc19a9a9d RDI: 00000000000=
00018
[   11.637970] RBP: 0000000000020000 R08: 0000000000000000 R09: 00007fbdc1b=
dc5ea
[   11.637973] R10: 0000000000000018 R11: 0000000000000246 R12: 00007fbdc19=
a9a9d
[   11.637975] R13: 0000000000000000 R14: 000055db088292c0 R15: 000055db088=
23060
[   11.637980] ---[ end trace bee6f34729e28f2c ]---
[   11.637985] BUG: unable to handle page fault for address: 000008714b9094=
43
[   11.637995] #PF: supervisor write access in kernel mode
[   11.638001] #PF: error_code(0x0002) - not-present page
[   11.638007] PGD 0 P4D 0=20
[   11.638014] Oops: 0002 [#1] PREEMPT SMP KASAN NOPTI
[   11.638021] CPU: 2 PID: 314 Comm: systemd-udevd Tainted: G    B   W     =
    5.12.0-rc3-debug-00033-g167e3e00e2be #1
[   11.638031] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[   11.638038] RIP: 0010:__memcpy+0x12/0x20
[   11.638044] Code: 74 e0 8b 05 38 4e 67 01 85 c0 75 d6 e8 47 6f 6d ff b8 =
01 00 00 00 c3 cc 0f 1f 44 00 00 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3=
> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
[   11.638058] RSP: 0018:ffffc9000190f188 EFLAGS: 00010206
[   11.638065] RAX: 000008714b909443 RBX: 000000000a20d000 RCX: 00000000000=
00177
[   11.638071] RDX: 0000000000000005 RSI: ffff88800a20d443 RDI: 000008714b9=
09443
[   11.638078] RBP: 0000000000000002 R08: 0000000000000001 R09: 000008714b9=
0a000
[   11.638085] R10: ffffed1001441bff R11: 0000000000000001 R12: 00000000000=
00002
[   11.638091] R13: ffff8887c008f000 R14: 0000000000000048 R15: 00000000000=
00002
[   11.638098] FS:  00007fbdc0f1ca40(0000) GS:ffff8887c3280000(0000) knlGS:=
0000000000000000
[   11.638106] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.638112] CR2: 000008714b909443 CR3: 000000013da9c000 CR4: 00000000003=
50ee0
[   11.638119] Call Trace:
[   11.638123]  swiotlb_tbl_map_single+0x6bb/0x6f0
[   11.638133]  swiotlb_map+0xc1/0x3f0
[   11.638141]  ? drm_mm_init+0x126/0x140 [drm]
[   11.638225]  ? swiotlb_sync_single_for_cpu+0x20/0x20
[   11.638232]  ? ttm_range_man_init+0xdd/0x100 [ttm]
[   11.638251]  ? amdgpu_ttm_init.cold+0x153/0x16f [amdgpu]
[   11.638881]  dma_map_page_attrs+0x299/0x390
[   11.638888]  ? dmam_free_coherent+0xe0/0xe0
[   11.638896]  amdgpu_gart_init+0x77/0xf0 [amdgpu]
[   11.639489]  gmc_v9_0_sw_init+0x910/0x980 [amdgpu]
[   11.640090]  ? gmc_v9_0_late_init+0xe0/0xe0 [amdgpu]
[   11.640860]  ? __drmm_add_action+0xf0/0x140 [drm]
[   11.641004]  ? drm_mode_config_cleanup+0x480/0x480 [drm]
[   11.641127]  ? drm_mode_config_cleanup+0x480/0x480 [drm]
[   11.641222]  amdgpu_device_init.cold+0x1483/0x2400 [amdgpu]
[   11.641849]  ? amdgpu_device_cache_pci_state+0x90/0x90 [amdgpu]
[   11.642456]  ? pci_find_saved_ext_cap+0x80/0x80
[   11.642466]  ? pci_bus_read_config_byte+0xf0/0xf0
[   11.642473]  ? __list_add_valid+0x2b/0xa0
[   11.642481]  ? kasan_unpoison+0x3a/0x60
[   11.642490]  ? pci_enable_device_flags+0x19c/0x250
[   11.642497]  ? pci_enable_bridge+0xe0/0xe0
[   11.642505]  amdgpu_driver_load_kms+0xb1/0x3f0 [amdgpu]
[   11.643105]  amdgpu_pci_probe+0x172/0x200 [amdgpu]
[   11.643686]  ? amdgpu_pci_remove+0x80/0x80 [amdgpu]
[   11.644405]  local_pci_probe+0x74/0xc0
[   11.644415]  pci_device_probe+0x1ee/0x300
[   11.644422]  ? pci_device_remove+0x100/0x100
[   11.644430]  ? kernfs_put+0x18/0x30
[   11.644437]  ? sysfs_do_create_link_sd+0x76/0xd0
[   11.644446]  really_probe+0x185/0x6c0
[   11.644453]  driver_probe_device+0x13f/0x1d0
[   11.644460]  device_driver_attach+0x110/0x120
[   11.644467]  ? device_driver_attach+0x120/0x120
[   11.644474]  __driver_attach+0xae/0x1a0
[   11.644480]  ? device_driver_attach+0x120/0x120
[   11.644487]  bus_for_each_dev+0xe6/0x140
[   11.644494]  ? subsys_dev_iter_exit+0x10/0x10
[   11.644501]  ? __list_add_valid+0x2b/0xa0
[   11.644510]  bus_add_driver+0x1f8/0x2e0
[   11.644518]  driver_register+0x10f/0x190
[   11.644525]  ? 0xffffffffc1588000
[   11.644531]  do_one_initcall+0x89/0x2a0
[   11.644539]  ? perf_trace_initcall_level+0x230/0x230
[   11.644547]  ? kfree+0xc3/0x480
[   11.644554]  ? kasan_set_track+0x1c/0x30
[   11.644561]  ? kasan_unpoison+0x3a/0x60
[   11.644568]  ? kasan_unpoison+0x3a/0x60
[   11.644576]  do_init_module+0xfd/0x3c0
[   11.644585]  load_module+0x3f44/0x41a0
[   11.644592]  ? xfs_file_buffered_read+0x82/0x130 [xfs]
[   11.644852]  ? module_frob_arch_sections+0x20/0x20
[   11.644860]  ? kernel_read+0x46/0xb0
[   11.644868]  ? kernel_read_file+0x1d2/0x3e0
[   11.644879]  ? __do_sys_finit_module+0x110/0x1a0
[   11.644886]  __do_sys_finit_module+0x110/0x1a0
[   11.644893]  ? __ia32_sys_init_module+0x40/0x40
[   11.644900]  ? get_nth_filter.part.0+0x170/0x170
[   11.644909]  ? randomize_stack_top+0x80/0x80
[   11.644918]  ? __ia32_compat_sys_newlstat+0x30/0x30
[   11.644927]  ? __audit_syscall_entry+0x193/0x1f0
[   11.644934]  ? ktime_get_coarse_real_ts64+0x4a/0x70
[   11.644943]  do_syscall_64+0x33/0x40
[   11.644951]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[   11.644959] RIP: 0033:0x7fbdc184c18d
[   11.644965] Code: b4 0c 00 0f 05 eb a9 66 0f 1f 44 00 00 f3 0f 1e fa 48 =
89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48=
> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b3 6c 0c 00 f7 d8 64 89 01 48
[   11.644979] RSP: 002b:00007ffeae8de308 EFLAGS: 00000246 ORIG_RAX: 000000=
0000000139
[   11.644989] RAX: ffffffffffffffda RBX: 000055db08823060 RCX: 00007fbdc18=
4c18d
[   11.644996] RDX: 0000000000000000 RSI: 00007fbdc19a9a9d RDI: 00000000000=
00018
[   11.645002] RBP: 0000000000020000 R08: 0000000000000000 R09: 00007fbdc1b=
dc5ea
[   11.645009] R10: 0000000000000018 R11: 0000000000000246 R12: 00007fbdc19=
a9a9d
[   11.645015] R13: 0000000000000000 R14: 000055db088292c0 R15: 000055db088=
23060
[   11.645024] Modules linked in: joydev mousedev intel_rapl_msr intel_rapl=
_common amdgpu(+) edac_mce_amd rtw88_8821ce rtw88_8821c rtw88_pci kvm_amd r=
tw88_core kvm snd_hda_codec_realtek snd_hda_codec_generic hp_wmi(+) ledtrig=
_audio hid_logitech_dj snd_hda_codec_hdmi wmi_bmof sparse_keymap irqbypass =
snd_hda_intel mac80211 snd_intel_dspcfg crct10dif_pclmul crc32_pclmul snd_i=
ntel_sdw_acpi vfat fat ghash_clmulni_intel snd_hda_codec gpu_sched i2c_algo=
_bit aesni_intel drm_ttm_helper ttm crypto_simd r8169 snd_hda_core cryptd d=
rm_kms_helper rapl realtek snd_hwdep cfg80211 mdio_devres pcspkr snd_pcm k1=
0temp cec snd_timer libphy sp5100_tco libarc4 tpm_crb snd syscopyarea i2c_p=
iix4 ccp sysfillrect soundcore sysimgblt fb_sys_fops usbhid tpm_tis tpm_tis=
_core wmi video tpm gpio_amdpt pinctrl_amd rng_core gpio_generic mac_hid ac=
pi_tad acpi_cpufreq btusb btrtl btbcm btintel bluetooth ecdh_generic rfkill=
 ecc crc16 pkcs8_key_parser drm fuse agpgart bpf_preload ip_tables x_tables=
 xfs libcrc32c crc32c_generic
[   11.645156]  crc32c_intel xhci_pci xhci_pci_renesas
[   11.645210] CR2: 000008714b909443
[   11.645216] ---[ end trace bee6f34729e28f2d ]---
[   11.645221] RIP: 0010:__memcpy+0x12/0x20
[   11.645227] Code: 74 e0 8b 05 38 4e 67 01 85 c0 75 d6 e8 47 6f 6d ff b8 =
01 00 00 00 c3 cc 0f 1f 44 00 00 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3=
> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
[   11.645241] RSP: 0018:ffffc9000190f188 EFLAGS: 00010206
[   11.645247] RAX: 000008714b909443 RBX: 000000000a20d000 RCX: 00000000000=
00177
[   11.645254] RDX: 0000000000000005 RSI: ffff88800a20d443 RDI: 000008714b9=
09443
[   11.645261] RBP: 0000000000000002 R08: 0000000000000001 R09: 000008714b9=
0a000
[   11.645268] R10: ffffed1001441bff R11: 0000000000000001 R12: 00000000000=
00002
[   11.645274] R13: ffff8887c008f000 R14: 0000000000000048 R15: 00000000000=
00002
[   11.645281] FS:  00007fbdc0f1ca40(0000) GS:ffff8887c3280000(0000) knlGS:=
0000000000000000
[   11.645289] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.645295] CR2: 000008714b909443 CR3: 000000013da9c000 CR4: 00000000003=
50ee0
[   11.911417] input: Logitech Wireless Keyboard PID:4075 as /devices/pci00=
00:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003=
:046D:4075.0003/input/input25
[   11.916555] logitech-hidpp-device 0003:046D:4075.0003: input,hidraw2: US=
B HID v1.11 Keyboard [Logitech Wireless Keyboard PID:4075] on usb-0000:01:0=
0.0-11/input1:1
[   11.999932] input: Logitech Wireless Mouse as /devices/pci0000:00/0000:0=
0:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003:046D:4054.0=
004/input/input26
[   12.003578] logitech-hidpp-device 0003:046D:4054.0004: input,hidraw3: US=
B HID v1.11 Mouse [Logitech Wireless Mouse] on usb-0000:01:00.0-11/input1:2
[   12.093114] rtw_8821ce 0000:09:00.0: start vif 74:12:b3:a0:4a:cb on port=
 0
[   14.558903] r8169 0000:0a:00.0 enp10s0: Link is Up - 1Gbps/Full - flow c=
ontrol rx/tx
[   14.558977] IPv6: ADDRCONF(NETDEV_CHANGE): enp10s0: link becomes ready
[   16.594062] kauditd_printk_skb: 32 callbacks suppressed
[   16.594072] audit: type=3D1131 audit(1625508119.391:44): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-rfkill comm=3D"sy=
stemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? =
res=3Dsuccess'
[   22.787517] audit: type=3D1101 audit(1625508125.584:45): pid=3D431 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:accounting grantors=
=3Dpam_access,pam_unix,pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/bin/=
sshd" hostname=3D192.168.4.54 addr=3D192.168.4.54 terminal=3Dssh res=3Dsucc=
ess'
[   22.795143] audit: type=3D1103 audit(1625508125.591:46): pid=3D431 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:setcred grantors=3D=
pam_shells,pam_faillock,pam_permit,pam_env,pam_faillock acct=3D"nathan" exe=
=3D"/usr/bin/sshd" hostname=3D192.168.4.54 addr=3D192.168.4.54 terminal=3Ds=
sh res=3Dsuccess'
[   22.795888] audit: type=3D1006 audit(1625508125.591:47): pid=3D431 uid=
=3D0 old-auid=3D4294967295 auid=3D1000 tty=3D(none) old-ses=3D4294967295 se=
s=3D1 res=3D1
[   22.796100] audit: type=3D1300 audit(1625508125.591:47): arch=3Dc000003e=
 syscall=3D1 success=3Dyes exit=3D4 a0=3D3 a1=3D7ffe0d54df00 a2=3D4 a3=3D3e=
8 items=3D0 ppid=3D394 pid=3D431 auid=3D1000 uid=3D0 gid=3D0 euid=3D0 suid=
=3D0 fsuid=3D0 egid=3D0 sgid=3D0 fsgid=3D0 tty=3D(none) ses=3D1 comm=3D"ssh=
d" exe=3D"/usr/bin/sshd" key=3D(null)
[   22.800853] audit: type=3D1327 audit(1625508125.591:47): proctitle=3D737=
368643A206E617468616E205B707269765D
[   22.877834] audit: type=3D1130 audit(1625508125.674:48): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Duser-runtime-dir@1000 com=
m=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termin=
al=3D? res=3Dsuccess'
[   22.917759] audit: type=3D1101 audit(1625508125.714:49): pid=3D434 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:accounting grantors=
=3Dpam_access,pam_unix,pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/lib/=
systemd/systemd" hostname=3D? addr=3D? terminal=3D? res=3Dsuccess'
[   22.918096] audit: type=3D1103 audit(1625508125.714:50): pid=3D434 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:setcred grantors=3D=
? acct=3D"nathan" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? te=
rminal=3D? res=3Dfailed'
[   22.918709] audit: type=3D1006 audit(1625508125.714:51): pid=3D434 uid=
=3D0 old-auid=3D4294967295 auid=3D1000 tty=3D(none) old-ses=3D4294967295 se=
s=3D2 res=3D1
[   22.918795] audit: type=3D1300 audit(1625508125.714:51): arch=3Dc000003e=
 syscall=3D1 success=3Dyes exit=3D4 a0=3D9 a1=3D7fff13327970 a2=3D4 a3=3D3e=
8 items=3D0 ppid=3D1 pid=3D434 auid=3D1000 uid=3D0 gid=3D0 euid=3D0 suid=3D=
0 fsuid=3D0 egid=3D0 sgid=3D0 fsgid=3D0 tty=3D(none) ses=3D2 comm=3D"(syste=
md)" exe=3D"/usr/lib/systemd/systemd" key=3D(null)
[   30.400687] kauditd_printk_skb: 11 callbacks suppressed
[   30.400699] audit: type=3D1100 audit(1625508133.194:60): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:authentication grantors=3Dpam_f=
aillock,pam_permit,pam_faillock acct=3D"nathan" exe=3D"/usr/bin/doas" hostn=
ame=3Dhp-4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.405376] audit: type=3D1101 audit(1625508133.201:61): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:accounting grantors=3Dpam_unix,=
pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/bin/doas" hostname=3Dhp-430=
0G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.406114] audit: type=3D1110 audit(1625508133.201:62): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:setcred grantors=3Dpam_faillock=
,pam_permit,pam_faillock acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-=
4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.407411] audit: type=3D1105 audit(1625508133.204:63): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:session_open grantors=3Dpam_lim=
its,pam_unix,pam_permit acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-4=
300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.473080] audit: type=3D1106 audit(1625508133.268:64): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:session_close grantors=3Dpam_li=
mits,pam_unix,pam_permit acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-=
4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.474043] audit: type=3D1104 audit(1625508133.271:65): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:setcred grantors=3Dpam_faillock=
,pam_permit,pam_faillock acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-=
4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   32.679545] audit: type=3D1101 audit(1625508135.474:66): pid=3D646 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:accounting grantors=3Dpam_unix,=
pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/bin/doas" hostname=3Dhp-430=
0G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   32.680133] audit: type=3D1110 audit(1625508135.474:67): pid=3D646 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:setcred grantors=3Dpam_faillock=
,pam_permit,pam_env,pam_faillock acct=3D"root" exe=3D"/usr/bin/doas" hostna=
me=3Dhp-4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   32.681346] audit: type=3D1105 audit(1625508135.478:68): pid=3D646 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:session_open grantors=3Dpam_lim=
its,pam_unix,pam_permit acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-4=
300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'

--/SG/dXypw7vuCiM3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="7d31f1c65cc9-debug-1-decoded.log"
Content-Transfer-Encoding: quoted-printable

[    0.000000] Linux version 5.12.0-rc3-debug-00033-g167e3e00e2be (nathan@a=
rchlinux-ax161) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 2.36.1) #1 SMP PRE=
EMPT Mon Jul 5 10:52:15 MST 2021
[    0.000000] Command line: initrd=3Damd-ucode.img initrd=3Dinitramfs-linu=
x-debug.img root=3DPARTUUID=3D8680aa0c-cf09-4a69-8cf3-970478040ee7 rw intel=
_pstate=3Dno_hwp
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point=
 registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 by=
tes, using 'compacted' format.
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000009c0ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000009c10000-0x0000000009ffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x000000000a000000-0x000000000a1fffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000a200000-0x000000000a20cfff] ACPI =
NVS
[    0.000000] BIOS-e820: [mem 0x000000000a20d000-0x000000000affffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000b000000-0x000000000b01ffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x000000000b020000-0x00000000b838ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000b8390000-0x00000000b86c5fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000b86c6000-0x00000000b8721fff] ACPI =
data
[    0.000000] BIOS-e820: [mem 0x00000000b8722000-0x00000000b8a14fff] ACPI =
NVS
[    0.000000] BIOS-e820: [mem 0x00000000b8a15000-0x00000000badfefff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000badff000-0x00000000bbffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000bc000000-0x00000000bdffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000bf000000-0x00000000bfffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fd200000-0x00000000fd2fffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fd600000-0x00000000fd6fffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fea00000-0x00000000fea0ffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000feb80000-0x00000000fec01fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fec10000-0x00000000fec10fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fec30000-0x00000000fec30fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fed00000-0x00000000fed00fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fed40000-0x00000000fed44fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fed80000-0x00000000fed8ffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fedc2000-0x00000000fedcffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000fedd4000-0x00000000fedd5fff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reser=
ved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000081f37ffff] usable
[    0.000000] BIOS-e820: [mem 0x000000081f380000-0x000000083fffffff] reser=
ved
[    0.000000] intel_pstate: HWP disabled
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] e820: update [mem 0xb4c66018-0xb4c73457] usable =3D=3D> usab=
le
[    0.000000] e820: update [mem 0xb4c66018-0xb4c73457] usable =3D=3D> usab=
le
[    0.000000] extended physical RAM map:
[    0.000000] reserve setup_data: [mem 0x0000000000000000-0x000000000009ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x00000000000a0000-0x00000000000fff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x0000000000100000-0x0000000009c0ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x0000000009c10000-0x0000000009ffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x000000000a000000-0x000000000a1fff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x000000000a200000-0x000000000a20cf=
ff] ACPI NVS
[    0.000000] reserve setup_data: [mem 0x000000000a20d000-0x000000000affff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x000000000b000000-0x000000000b01ff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x000000000b020000-0x00000000b4c660=
17] usable
[    0.000000] reserve setup_data: [mem 0x00000000b4c66018-0x00000000b4c734=
57] usable
[    0.000000] reserve setup_data: [mem 0x00000000b4c73458-0x00000000b838ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x00000000b8390000-0x00000000b86c5f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000b86c6000-0x00000000b8721f=
ff] ACPI data
[    0.000000] reserve setup_data: [mem 0x00000000b8722000-0x00000000b8a14f=
ff] ACPI NVS
[    0.000000] reserve setup_data: [mem 0x00000000b8a15000-0x00000000badfef=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000badff000-0x00000000bbffff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x00000000bc000000-0x00000000bdffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000bf000000-0x00000000bfffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000f0000000-0x00000000f7ffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fd200000-0x00000000fd2fff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fd600000-0x00000000fd6fff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fea00000-0x00000000fea0ff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000feb80000-0x00000000fec01f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fec10000-0x00000000fec10f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fec30000-0x00000000fec30f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed00000-0x00000000fed00f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed40000-0x00000000fed44f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fed80000-0x00000000fed8ff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fedc2000-0x00000000fedcff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000fedd4000-0x00000000fedd5f=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x00000000ff000000-0x00000000ffffff=
ff] reserved
[    0.000000] reserve setup_data: [mem 0x0000000100000000-0x000000081f37ff=
ff] usable
[    0.000000] reserve setup_data: [mem 0x000000081f380000-0x000000083fffff=
ff] reserved
[    0.000000] efi: EFI v2.70 by American Megatrends
[    0.000000] efi: ACPI=3D0xb8721000 ACPI 2.0=3D0xb8721014 TPMFinalLog=3D0=
xb89c8000 SMBIOS=3D0xbac0f000 SMBIOS 3.0=3D0xbac0e000 MEMATTR=3D0xb5183018 =
ESRT=3D0xb6cf5018 RNG=3D0xbac3e998 TPMEventLog=3D0xb5184018
[    0.000000] efi: seeding entropy pool
[    0.000000] SMBIOS 3.3.0 present.
[    0.000000] DMI: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17/2020
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 3792.936 MHz processor
[    0.000280] e820: update [mem 0x00000000-0x00000fff] usable =3D=3D> rese=
rved
[    0.000287] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000309] last_pfn =3D 0x81f380 max_arch_pfn =3D 0x400000000
[    0.000615] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT
[    0.001571] e820: update [mem 0xc0000000-0xffffffff] usable =3D=3D> rese=
rved
[    0.001586] last_pfn =3D 0xbc000 max_arch_pfn =3D 0x400000000
[    0.006163] esrt: Reserving ESRT space from 0x00000000b6cf5018 to 0x0000=
0000b6cf5050.
[    0.006185] e820: update [mem 0xb6cf5000-0xb6cf5fff] usable =3D=3D> rese=
rved
[    0.006628] check: Scanning 1 areas for low memory corruption
[    0.006637] Using GB pages for direct mapping
[    0.012545] Secure boot disabled
[    0.012547] RAMDISK: [mem 0x7f7c7000-0x7fff5fff]
[    0.012570] ACPI: Early table checksum verification disabled
[    0.012577] ACPI: RSDP 0x00000000B8721014 000024 (v02 HPQOEM)
[    0.012586] ACPI: XSDT 0x00000000B8720728 0000EC (v01 HPQOEM SLIC-CPC 01=
072009 AMI  01000013)
[    0.012598] ACPI: FACP 0x00000000B870F000 000114 (v06 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012612] ACPI: DSDT 0x00000000B86FE000 01050C (v02 HPQOEM SLIC-CPC 01=
072009 INTL 20120913)
[    0.012622] ACPI: FACS 0x00000000B89F8000 000040
[    0.012630] ACPI: MSDM 0x00000000B871F000 000055 (v03 HPQOEM SLIC-CPC 01=
072009 AMI  01000013)
[    0.012638] ACPI: SSDT 0x00000000B871E000 000050 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012646] ACPI: IVRS 0x00000000B871D000 0000D0 (v02 HPQOEM SLIC-CPC 00=
000001 AMD  00000000)
[    0.012654] ACPI: SSDT 0x00000000B8715000 007229 (v02 HPQOEM SLIC-CPC 00=
000002 MSFT 04000000)
[    0.012662] ACPI: SSDT 0x00000000B8711000 003BA1 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012670] ACPI: SSDT 0x00000000B8710000 000094 (v02 HPQOEM SLIC-CPC 01=
072009 AMI  01072009)
[    0.012678] ACPI: FIDT 0x00000000B86FD000 00009C (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012686] ACPI: MCFG 0x00000000B86FC000 00003C (v01 HPQOEM SLIC-CPC 01=
072009 MSFT 00010013)
[    0.012694] ACPI: HPET 0x00000000B86FB000 000038 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00000005)
[    0.012702] ACPI: VFCT 0x00000000B86ED000 00D484 (v01 HPQOEM SLIC-CPC 00=
000001 AMD  31504F47)
[    0.012710] ACPI: BGRT 0x00000000B86EC000 000038 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012718] ACPI: TPM2 0x00000000B86EB000 00004C (v04 HPQOEM SLIC-CPC 00=
000001 AMI  00000000)
[    0.012726] ACPI: SSDT 0x00000000B86E9000 001CE4 (v02 HPQOEM SLIC-CPC 00=
000001 AMD  00000001)
[    0.012734] ACPI: CRAT 0x00000000B86E8000 0007E8 (v01 HPQOEM SLIC-CPC 00=
000001 AMD  00000001)
[    0.012742] ACPI: CDIT 0x00000000B86E7000 000029 (v01 HPQOEM SLIC-CPC 00=
000001 AMD  00000001)
[    0.012750] ACPI: SSDT 0x00000000B86E6000 000D37 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012758] ACPI: SSDT 0x00000000B86E4000 0010A5 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012765] ACPI: SSDT 0x00000000B86E0000 00333E (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012773] ACPI: SSDT 0x00000000B86DF000 0000BF (v01 HPQOEM SLIC-CPC 00=
001000 INTL 20120913)
[    0.012781] ACPI: WSMT 0x00000000B86DE000 000028 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012789] ACPI: APIC 0x00000000B86DD000 00015E (v03 HPQOEM SLIC-CPC 01=
072009 AMI  00010013)
[    0.012797] ACPI: SSDT 0x00000000B86DC000 000517 (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012805] ACPI: SSDT 0x00000000B86DA000 0010AF (v01 HPQOEM SLIC-CPC 00=
000001 INTL 20120913)
[    0.012813] ACPI: FPDT 0x00000000B86D9000 000044 (v01 HPQOEM SLIC-CPC 01=
072009 AMI  01000013)
[    0.012827] ACPI: Local APIC address 0xfee00000
[    0.013152] No NUMA configuration found
[    0.013154] Faking a node at [mem 0x0000000000000000-0x000000081f37ffff]
[    0.013164] NODE_DATA(0) allocated [mem 0x81f37c000-0x81f37ffff]
[    0.013278] Zone ranges:
[    0.013280]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.013284]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.013288]   Normal   [mem 0x0000000100000000-0x000000081f37ffff]
[    0.013292]   Device   empty
[    0.013295] Movable zone start for each node
[    0.013297] Early memory node ranges
[    0.013298]   node   0: [mem 0x0000000000001000-0x000000000009ffff]
[    0.013301]   node   0: [mem 0x0000000000100000-0x0000000009c0ffff]
[    0.013304]   node   0: [mem 0x000000000a000000-0x000000000a1fffff]
[    0.013306]   node   0: [mem 0x000000000a20d000-0x000000000affffff]
[    0.013309]   node   0: [mem 0x000000000b020000-0x00000000b838ffff]
[    0.013312]   node   0: [mem 0x00000000badff000-0x00000000bbffffff]
[    0.013314]   node   0: [mem 0x0000000100000000-0x000000081f37ffff]
[    0.013322] Initmem setup node 0 [mem 0x0000000000001000-0x000000081f37f=
fff]
[    0.013326] On node 0 totalpages: 8225939
[    0.013329]   DMA zone: 64 pages used for memmap
[    0.013331]   DMA zone: 26 pages reserved
[    0.013334]   DMA zone: 3999 pages, LIFO batch:0
[    0.015777]   DMA zone: 28769 pages in unavailable ranges
[    0.015779]   DMA32 zone: 11782 pages used for memmap
[    0.015781]   DMA32 zone: 754036 pages, LIFO batch:63
[    0.059946]   DMA32 zone: 28300 pages in unavailable ranges
[    0.059954]   Normal zone: 116686 pages used for memmap
[    0.059956]   Normal zone: 7467904 pages, LIFO batch:63
[    0.477178]   Normal zone: 3200 pages in unavailable ranges
[    0.918352] kasan: KernelAddressSanitizer initialized
[    0.918877] ACPI: PM-Timer IO Port: 0x808
[    0.918881] ACPI: Local APIC address 0xfee00000
[    0.918894] ACPI: LAPIC_NMI (acpi_id[0xff] high edge lint[0x1])
[    0.918911] IOAPIC[0]: apic_id 9, version 33, address 0xfec00000, GSI 0-=
23
[    0.918918] IOAPIC[1]: apic_id 10, version 33, address 0xfec01000, GSI 2=
4-55
[    0.918923] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.918927] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
[    0.918931] ACPI: IRQ0 used by override.
[    0.918934] ACPI: IRQ9 used by override.
[    0.918939] Using ACPI (MADT) for SMP configuration information
[    0.918942] ACPI: HPET id: 0x10228201 base: 0xfed00000
[    0.918969] e820: update [mem 0xb5158000-0xb517ffff] usable =3D=3D> rese=
rved
[    0.919000] smpboot: Allowing 32 CPUs, 24 hotplug CPUs
[    0.919115] PM: hibernation: Registered nosave memory: [mem 0x00000000-0=
x00000fff]
[    0.919122] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0=
x000fffff]
[    0.919129] PM: hibernation: Registered nosave memory: [mem 0x09c10000-0=
x09ffffff]
[    0.919136] PM: hibernation: Registered nosave memory: [mem 0x0a200000-0=
x0a20cfff]
[    0.919143] PM: hibernation: Registered nosave memory: [mem 0x0b000000-0=
x0b01ffff]
[    0.919150] PM: hibernation: Registered nosave memory: [mem 0xb4c66000-0=
xb4c66fff]
[    0.919157] PM: hibernation: Registered nosave memory: [mem 0xb4c73000-0=
xb4c73fff]
[    0.919164] PM: hibernation: Registered nosave memory: [mem 0xb5158000-0=
xb517ffff]
[    0.919171] PM: hibernation: Registered nosave memory: [mem 0xb6cf5000-0=
xb6cf5fff]
[    0.919179] PM: hibernation: Registered nosave memory: [mem 0xb8390000-0=
xb86c5fff]
[    0.919181] PM: hibernation: Registered nosave memory: [mem 0xb86c6000-0=
xb8721fff]
[    0.919183] PM: hibernation: Registered nosave memory: [mem 0xb8722000-0=
xb8a14fff]
[    0.919186] PM: hibernation: Registered nosave memory: [mem 0xb8a15000-0=
xbadfefff]
[    0.919193] PM: hibernation: Registered nosave memory: [mem 0xbc000000-0=
xbdffffff]
[    0.919196] PM: hibernation: Registered nosave memory: [mem 0xbe000000-0=
xbeffffff]
[    0.919198] PM: hibernation: Registered nosave memory: [mem 0xbf000000-0=
xbfffffff]
[    0.919201] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0=
xefffffff]
[    0.919203] PM: hibernation: Registered nosave memory: [mem 0xf0000000-0=
xf7ffffff]
[    0.919205] PM: hibernation: Registered nosave memory: [mem 0xf8000000-0=
xfd1fffff]
[    0.919208] PM: hibernation: Registered nosave memory: [mem 0xfd200000-0=
xfd2fffff]
[    0.919210] PM: hibernation: Registered nosave memory: [mem 0xfd300000-0=
xfd5fffff]
[    0.919213] PM: hibernation: Registered nosave memory: [mem 0xfd600000-0=
xfd6fffff]
[    0.919215] PM: hibernation: Registered nosave memory: [mem 0xfd700000-0=
xfe9fffff]
[    0.919217] PM: hibernation: Registered nosave memory: [mem 0xfea00000-0=
xfea0ffff]
[    0.919220] PM: hibernation: Registered nosave memory: [mem 0xfea10000-0=
xfeb7ffff]
[    0.919222] PM: hibernation: Registered nosave memory: [mem 0xfeb80000-0=
xfec01fff]
[    0.919225] PM: hibernation: Registered nosave memory: [mem 0xfec02000-0=
xfec0ffff]
[    0.919227] PM: hibernation: Registered nosave memory: [mem 0xfec10000-0=
xfec10fff]
[    0.919229] PM: hibernation: Registered nosave memory: [mem 0xfec11000-0=
xfec2ffff]
[    0.919232] PM: hibernation: Registered nosave memory: [mem 0xfec30000-0=
xfec30fff]
[    0.919234] PM: hibernation: Registered nosave memory: [mem 0xfec31000-0=
xfecfffff]
[    0.919237] PM: hibernation: Registered nosave memory: [mem 0xfed00000-0=
xfed00fff]
[    0.919239] PM: hibernation: Registered nosave memory: [mem 0xfed01000-0=
xfed3ffff]
[    0.919241] PM: hibernation: Registered nosave memory: [mem 0xfed40000-0=
xfed44fff]
[    0.919244] PM: hibernation: Registered nosave memory: [mem 0xfed45000-0=
xfed7ffff]
[    0.919246] PM: hibernation: Registered nosave memory: [mem 0xfed80000-0=
xfed8ffff]
[    0.919249] PM: hibernation: Registered nosave memory: [mem 0xfed90000-0=
xfedc1fff]
[    0.919251] PM: hibernation: Registered nosave memory: [mem 0xfedc2000-0=
xfedcffff]
[    0.919253] PM: hibernation: Registered nosave memory: [mem 0xfedd0000-0=
xfedd3fff]
[    0.919256] PM: hibernation: Registered nosave memory: [mem 0xfedd4000-0=
xfedd5fff]
[    0.919258] PM: hibernation: Registered nosave memory: [mem 0xfedd6000-0=
xfeffffff]
[    0.919261] PM: hibernation: Registered nosave memory: [mem 0xff000000-0=
xffffffff]
[    0.919266] [mem 0xc0000000-0xefffffff] available for PCI devices
[    0.919270] Booting paravirtualized kernel on bare hardware
[    0.919274] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0=
xffffffff, max_idle_ns: 6370452778343963 ns
[    0.927878] setup_percpu: NR_CPUS:320 nr_cpumask_bits:320 nr_cpu_ids:32 =
nr_node_ids:1
[    0.929637] percpu: Embedded 64 pages/cpu s225280 r8192 d28672 u262144
[    0.929671] pcpu-alloc: s225280 r8192 d28672 u262144 alloc=3D1*2097152
[    0.929677] pcpu-alloc: [0] 00 01 02 03 04 05 06 07 [0] 08 09 10 11 12 1=
3 14 15
[    0.929704] pcpu-alloc: [0] 16 17 18 19 20 21 22 23 [0] 24 25 26 27 28 2=
9 30 31
[    0.929806] Built 1 zonelists, mobility grouping on.  Total pages: 80973=
81
[    0.929809] Policy zone: Normal
[    0.929812] Kernel command line: initrd=3Damd-ucode.img initrd=3Dinitram=
fs-linux-debug.img root=3DPARTUUID=3D8680aa0c-cf09-4a69-8cf3-970478040ee7 r=
w intel_pstate=3Dno_hwp
[    0.929899] printk: log_buf_len individual max cpu contribution: 4096 by=
tes
[    0.929901] printk: log_buf_len total cpu_extra contributions: 126976 by=
tes
[    0.929903] printk: log_buf_len min size: 131072 bytes
[    0.930262] printk: log_buf_len: 262144 bytes
[    0.930264] printk: early log buf free: 114328(87%)
[    0.933977] Dentry cache hash table entries: 4194304 (order: 13, 3355443=
2 bytes, linear)
[    0.935848] Inode-cache hash table entries: 2097152 (order: 12, 16777216=
 bytes, linear)
[    0.936118] mem auto-init: stack:off, heap alloc:on, heap free:off
[    1.642466] Memory: 27987960K/32903756K available (20488K kernel code, 7=
279K rwdata, 8472K rodata, 2012K init, 5244K bss, 4915540K reserved, 0K cma=
-reserved)
[    1.642480] random: get_random_u64 called from __kmem_cache_create+0x2a/=
0x540 with crng_init=3D0=20
[    1.643591] SLUB: HWalign=3D64, Order=3D0-3, MinObjects=3D0, CPUs=3D32, =
Nodes=3D1
[    1.643651] ftrace: allocating 41986 entries in 165 pages
[    1.667334] ftrace: allocated 165 pages with 4 groups
[    1.668416] rcu: Preemptible hierarchical RCU implementation.
[    1.668418] rcu: 	RCU dyntick-idle grace-period acceleration is enabled.
[    1.668420] rcu: 	RCU restricting CPUs from NR_CPUS=3D320 to nr_cpu_ids=
=3D32.
[    1.668422] rcu: 	RCU priority boosting: priority 1 delay 500 ms.
[    1.668425] 	Trampoline variant of Tasks RCU enabled.
[    1.668427] 	Rude variant of Tasks RCU enabled.
[    1.668428] 	Tracing variant of Tasks RCU enabled.
[    1.668430] rcu: RCU calculated value of scheduler-enlistment delay is 3=
0 jiffies.
[    1.668432] rcu: Adjusting geometry for rcu_fanout_leaf=3D16, nr_cpu_ids=
=3D32
[    1.700587] NR_IRQS: 20736, nr_irqs: 1224, preallocated irqs: 16
[    1.701467] Console: colour dummy device 80x25
[    1.701534] printk: console [tty0] enabled
[    1.701628] ACPI: Core revision 20210105
[    1.703688] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, =
max_idle_ns: 133484873504 ns
[    1.703717] APIC: Switch to symmetric I/O mode setup
[    1.705705] Switched APIC routing to physical flat.
[    1.707227] ..TIMER: vector=3D0x30 apic1=3D0 pin1=3D2 apic2=3D-1 pin2=3D=
-1
[    1.723724] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles:=
 0x6d588d6a09c, max_idle_ns: 881590727049 ns
[    1.723739] Calibrating delay loop (skipped), value calculated using tim=
er frequency.. 7588.95 BogoMIPS (lpj=3D12643120)
[    1.723745] pid_max: default: 32768 minimum: 301
[    1.733354] LSM: Security Framework initializing
[    1.733395] Yama: becoming mindful.
[    1.733644] Mount-cache hash table entries: 65536 (order: 7, 524288 byte=
s, linear)
[    1.733718] Mountpoint-cache hash table entries: 65536 (order: 7, 524288=
 bytes, linear)
[    1.735662] x86/cpu: User Mode Instruction Prevention (UMIP) activated
[    1.735762] LVT offset 1 assigned for vector 0xf9
[    1.735819] LVT offset 2 assigned for vector 0xf4
[    1.735836] Last level iTLB entries: 4KB 1024, 2MB 1024, 4MB 512
[    1.735839] Last level dTLB entries: 4KB 2048, 2MB 2048, 4MB 1024, 1GB 0
[    1.735845] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user=
 pointer sanitization
[    1.735849] Spectre V2 : Mitigation: Full AMD retpoline
[    1.735851] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB=
 on context switch
[    1.735853] Spectre V2 : Enabling Restricted Speculation for firmware ca=
lls
[    1.735855] Spectre V2 : mitigation: Enabling conditional Indirect Branc=
h Prediction Barrier
[    1.735858] Spectre V2 : User space: Mitigation: STIBP via seccomp and p=
rctl
[    1.735860] Speculative Store Bypass: Mitigation: Speculative Store Bypa=
ss disabled via prctl and seccomp
[    1.736225] Freeing SMP alternatives memory: 32K
[    1.844242] smpboot: CPU0: AMD Ryzen 3 4300G with Radeon Graphics (famil=
y: 0x17, model: 0x60, stepping: 0x1)
[    1.845243] Performance Events: Fam17h+ core perfctr, AMD PMU driver.
[    1.845254] ... version:                0
[    1.845256] ... bit width:              48
[    1.845258] ... generic registers:      6
[    1.845259] ... value mask:             0000ffffffffffff
[    1.845261] ... max period:             00007fffffffffff
[    1.845263] ... fixed-purpose events:   0
[    1.845265] ... event mask:             000000000000003f
[    1.845496] rcu: Hierarchical SRCU implementation.
[    1.849560] NMI watchdog: Enabled. Permanently consumes one hw-PMU count=
er.
[    1.852535] smp: Bringing up secondary CPUs ...
[    1.853409] x86: Booting SMP configuration:
[    1.853412] .... node  #0, CPUs:        #1  #2  #3  #4  #5  #6  #7
[    1.874254] smp: Brought up 1 node, 8 CPUs
[    1.874260] smpboot: Max logical packages: 4
[    1.874262] smpboot: Total of 8 processors activated (60711.60 BogoMIPS)
[    1.882108] devtmpfs: initialized
[    1.882108] x86/mm: Memory block size: 128MB
[    1.931108] PM: Registering ACPI NVS region [mem 0x0a200000-0x0a20cfff] =
(53248 bytes)
[    1.931108] PM: Registering ACPI NVS region [mem 0xb8722000-0xb8a14fff] =
(3092480 bytes)
[    1.935783] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xfffffff=
f, max_idle_ns: 6370867519511994 ns
[    1.935824] futex hash table entries: 8192 (order: 7, 524288 bytes, line=
ar)
[    1.936354] pinctrl core: initialized pinctrl subsystem
[    1.937662] PM: RTC time: 18:01:44, date: 2021-07-05
[    1.938802] NET: Registered protocol family 16
[    1.940659] DMA: preallocated 4096 KiB GFP_KERNEL pool for atomic alloca=
tions
[    1.941182] DMA: preallocated 4096 KiB GFP_KERNEL|GFP_DMA pool for atomi=
c allocations
[    1.941702] DMA: preallocated 4096 KiB GFP_KERNEL|GFP_DMA32 pool for ato=
mic allocations
[    1.941826] audit: initializing netlink subsys (disabled)
[    1.941904] audit: type=3D2000 audit(1625508104.233:1): state=3Dinitiali=
zed audit_enabled=3D0 res=3D1
[    1.944097] thermal_sys: Registered thermal governor 'fair_share'
[    1.944100] thermal_sys: Registered thermal governor 'bang_bang'
[    1.944102] thermal_sys: Registered thermal governor 'step_wise'
[    1.944104] thermal_sys: Registered thermal governor 'user_space'
[    1.944106] thermal_sys: Registered thermal governor 'power_allocator'
[    1.944183] cpuidle: using governor ladder
[    1.944183] cpuidle: using governor menu
[    1.944183] ACPI: bus type PCI registered
[    1.944183] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    1.944828] PCI: MMCONFIG for domain 0000 [bus 00-7f] at [mem 0xf0000000=
-0xf7ffffff] (base 0xf0000000)
[    1.944842] PCI: MMCONFIG at [mem 0xf0000000-0xf7ffffff] reserved in E820
[    1.950889] PCI: Using configuration type 1 for base access
[    1.983636] Kprobes globally optimized
[    1.983989] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    1.983989] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    1.992155] ACPI: Added _OSI(Module Device)
[    1.992159] ACPI: Added _OSI(Processor Device)
[    1.992161] ACPI: Added _OSI(3.0 _SCP Extensions)
[    1.992163] ACPI: Added _OSI(Processor Aggregator Device)
[    1.992180] ACPI: Added _OSI(Linux-Dell-Video)
[    1.992194] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
[    1.992207] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)
[    2.797646] ACPI: 12 ACPI AML tables successfully acquired and loaded
[    2.847458] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    3.194961] ACPI: EC: EC started
[    3.194966] ACPI: EC: interrupt blocked
[    3.195008] ACPI: EC: EC_CMD/EC_SC=3D0x66, EC_DATA=3D0x62
[    3.195018] ACPI: _SB_.PCI0.SBRG.EC0_: Boot DSDT EC used to handle trans=
actions
[    3.195024] ACPI: Interpreter enabled
[    3.195193] ACPI: (supports S0 S3 S4 S5)
[    3.195196] ACPI: Using IOAPIC for interrupt routing
[    3.200393] PCI: Using host bridge windows from ACPI; if necessary, use =
"pci=3Dnocrs" and report a bug
[    3.215236] ACPI: Enabled 4 GPEs in block 00 to 1F
[    3.580211] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[    3.580251] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM Cloc=
kPM Segments MSI EDR HPX-Type3]
[    3.588446] acpi PNP0A08:00: _OSC: platform does not support [SHPCHotplu=
g AER LTR DPC]
[    3.596390] acpi PNP0A08:00: _OSC: OS now controls [PCIeHotplug PME PCIe=
Capability]
[    3.596579] acpi PNP0A08:00: [Firmware Info]: MMCONFIG for domain 0000 [=
bus 00-7f] only partially covers this bridge
[    3.610071] PCI host bridge to bus 0000:00
[    3.610083] pci_bus 0000:00: root bus resource [io  0x0000-0x03af window]
[    3.610096] pci_bus 0000:00: root bus resource [io  0x03e0-0x0cf7 window]
[    3.610107] pci_bus 0000:00: root bus resource [io  0x03b0-0x03df window]
[    3.610118] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    3.610130] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bfff=
f window]
[    3.610141] pci_bus 0000:00: root bus resource [mem 0x000c0000-0x000dfff=
f window]
[    3.610152] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfec2fff=
f window]
[    3.610163] pci_bus 0000:00: root bus resource [mem 0xfee00000-0xfffffff=
f window]
[    3.610176] pci_bus 0000:00: root bus resource [bus 00-ff]
[    3.610333] pci 0000:00:00.0: [1022:1630] type 00 class 0x060000
[    3.612614] pci 0000:00:00.2: [1022:1631] type 00 class 0x080600
[    3.614862] pci 0000:00:01.0: [1022:1632] type 00 class 0x060000
[    3.616444] pci 0000:00:02.0: [1022:1632] type 00 class 0x060000
[    3.618052] pci 0000:00:02.1: [1022:1634] type 01 class 0x060400
[    3.618078] pci 0000:00:02.1: enabling Extended Tags
[    3.618183] pci 0000:00:02.1: PME# supported from D0 D3hot D3cold
[    3.622301] pci 0000:00:02.2: [1022:1634] type 01 class 0x060400
[    3.622328] pci 0000:00:02.2: enabling Extended Tags
[    3.622432] pci 0000:00:02.2: PME# supported from D0 D3hot D3cold
[    3.625017] pci 0000:00:08.0: [1022:1632] type 00 class 0x060000
[    3.626612] pci 0000:00:08.1: [1022:1635] type 01 class 0x060400
[    3.626637] pci 0000:00:08.1: enabling Extended Tags
[    3.626737] pci 0000:00:08.1: PME# supported from D0 D3hot D3cold
[    3.629320] pci 0000:00:08.2: [1022:1635] type 01 class 0x060400
[    3.629345] pci 0000:00:08.2: enabling Extended Tags
[    3.629445] pci 0000:00:08.2: PME# supported from D0 D3hot D3cold
[    3.632062] pci 0000:00:14.0: [1022:790b] type 00 class 0x0c0500
[    3.634325] pci 0000:00:14.3: [1022:790e] type 00 class 0x060100
[    3.636604] pci 0000:00:18.0: [1022:1448] type 00 class 0x060000
[    3.638170] pci 0000:00:18.1: [1022:1449] type 00 class 0x060000
[    3.639716] pci 0000:00:18.2: [1022:144a] type 00 class 0x060000
[    3.641299] pci 0000:00:18.3: [1022:144b] type 00 class 0x060000
[    3.642859] pci 0000:00:18.4: [1022:144c] type 00 class 0x060000
[    3.644429] pci 0000:00:18.5: [1022:144d] type 00 class 0x060000
[    3.645990] pci 0000:00:18.6: [1022:144e] type 00 class 0x060000
[    3.647557] pci 0000:00:18.7: [1022:144f] type 00 class 0x060000
[    3.650047] pci 0000:01:00.0: [1022:43d1] type 00 class 0x0c0330
[    3.650068] pci 0000:01:00.0: reg 0x10: [mem 0xfcda0000-0xfcda7fff 64bit]
[    3.650111] pci 0000:01:00.0: enabling Extended Tags
[    3.650313] pci 0000:01:00.0: PME# supported from D3hot D3cold
[    3.651859] pci 0000:01:00.1: [1022:43c8] type 00 class 0x010601
[    3.651897] pci 0000:01:00.1: reg 0x24: [mem 0xfcd80000-0xfcd9ffff]
[    3.651905] pci 0000:01:00.1: reg 0x30: [mem 0xfcd00000-0xfcd7ffff pref]
[    3.651914] pci 0000:01:00.1: enabling Extended Tags
[    3.652099] pci 0000:01:00.1: PME# supported from D3hot D3cold
[    3.660042] pci 0000:01:00.2: [1022:43c6] type 01 class 0x060400
[    3.660088] pci 0000:01:00.2: enabling Extended Tags
[    3.660269] pci 0000:01:00.2: PME# supported from D3hot D3cold
[    3.661760] pci 0000:00:02.1: PCI bridge to [bus 01-0a]
[    3.661766] pci 0000:00:02.1:   bridge window [io  0xd000-0xefff]
[    3.661771] pci 0000:00:02.1:   bridge window [mem 0xfcb00000-0xfcdfffff]
[    3.664265] pci 0000:02:00.0: [1022:43c7] type 01 class 0x060400
[    3.664314] pci 0000:02:00.0: enabling Extended Tags
[    3.664573] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    3.666425] pci 0000:02:01.0: [1022:43c7] type 01 class 0x060400
[    3.666473] pci 0000:02:01.0: enabling Extended Tags
[    3.666735] pci 0000:02:01.0: PME# supported from D3hot D3cold
[    3.668564] pci 0000:02:02.0: [1022:43c7] type 01 class 0x060400
[    3.668612] pci 0000:02:02.0: enabling Extended Tags
[    3.668876] pci 0000:02:02.0: PME# supported from D3hot D3cold
[    3.670718] pci 0000:02:03.0: [1022:43c7] type 01 class 0x060400
[    3.670766] pci 0000:02:03.0: enabling Extended Tags
[    3.671027] pci 0000:02:03.0: PME# supported from D3hot D3cold
[    3.672863] pci 0000:02:04.0: [1022:43c7] type 01 class 0x060400
[    3.672912] pci 0000:02:04.0: enabling Extended Tags
[    3.673170] pci 0000:02:04.0: PME# supported from D3hot D3cold
[    3.675020] pci 0000:02:05.0: [1022:43c7] type 01 class 0x060400
[    3.675069] pci 0000:02:05.0: enabling Extended Tags
[    3.675331] pci 0000:02:05.0: PME# supported from D3hot D3cold
[    3.677201] pci 0000:02:06.0: [1022:43c7] type 01 class 0x060400
[    3.677249] pci 0000:02:06.0: enabling Extended Tags
[    3.677509] pci 0000:02:06.0: PME# supported from D3hot D3cold
[    3.679360] pci 0000:02:07.0: [1022:43c7] type 01 class 0x060400
[    3.679408] pci 0000:02:07.0: enabling Extended Tags
[    3.679668] pci 0000:02:07.0: PME# supported from D3hot D3cold
[    3.681502] pci 0000:01:00.2: PCI bridge to [bus 02-0a]
[    3.681510] pci 0000:01:00.2:   bridge window [io  0xd000-0xefff]
[    3.681516] pci 0000:01:00.2:   bridge window [mem 0xfcb00000-0xfccfffff]
[    3.682091] pci 0000:02:00.0: PCI bridge to [bus 03]
[    3.682671] pci 0000:02:01.0: PCI bridge to [bus 04]
[    3.683240] pci 0000:02:02.0: PCI bridge to [bus 05]
[    3.683819] pci 0000:02:03.0: PCI bridge to [bus 06]
[    3.684392] pci 0000:02:04.0: PCI bridge to [bus 07]
[    3.684675] pci 0000:02:05.0: PCI bridge to [bus 08]
[    3.685027] pci 0000:09:00.0: [10ec:c821] type 00 class 0x028000
[    3.685056] pci 0000:09:00.0: reg 0x10: [io  0xe000-0xe0ff]
[    3.685091] pci 0000:09:00.0: reg 0x18: [mem 0xfcc00000-0xfcc0ffff 64bit]
[    3.685567] pci 0000:09:00.0: supports D1 D2
[    3.685570] pci 0000:09:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    3.686427] pci 0000:02:06.0: PCI bridge to [bus 09]
[    3.686434] pci 0000:02:06.0:   bridge window [io  0xe000-0xefff]
[    3.686439] pci 0000:02:06.0:   bridge window [mem 0xfcc00000-0xfccfffff]
[    3.686767] pci 0000:0a:00.0: [10ec:8168] type 00 class 0x020000
[    3.686797] pci 0000:0a:00.0: reg 0x10: [io  0xd000-0xd0ff]
[    3.686836] pci 0000:0a:00.0: reg 0x18: [mem 0xfcb04000-0xfcb04fff 64bit]
[    3.686862] pci 0000:0a:00.0: reg 0x20: [mem 0xfcb00000-0xfcb03fff 64bit]
[    3.687312] pci 0000:0a:00.0: supports D1 D2
[    3.687314] pci 0000:0a:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    3.688181] pci 0000:02:07.0: PCI bridge to [bus 0a]
[    3.688188] pci 0000:02:07.0:   bridge window [io  0xd000-0xdfff]
[    3.688193] pci 0000:02:07.0:   bridge window [mem 0xfcb00000-0xfcbfffff]
[    3.688810] pci 0000:0b:00.0: [1c5c:1339] type 00 class 0x010802
[    3.688830] pci 0000:0b:00.0: reg 0x10: [mem 0xfcf00000-0xfcf03fff 64bit]
[    3.689078] pci 0000:0b:00.0: supports D1
[    3.689080] pci 0000:0b:00.0: PME# supported from D0 D1 D3hot
[    3.689157] pci 0000:0b:00.0: 15.752 Gb/s available PCIe bandwidth, limi=
ted by 8.0 GT/s PCIe x2 link at 0000:00:02.2 (capable of 31.504 Gb/s with 8=
=2E0 GT/s PCIe x4 link)
[    3.689819] pci 0000:00:02.2: PCI bridge to [bus 0b]
[    3.689825] pci 0000:00:02.2:   bridge window [mem 0xfcf00000-0xfcffffff]
[    3.691693] pci 0000:0c:00.0: [1002:1636] type 00 class 0x030000
[    3.691707] pci 0000:0c:00.0: reg 0x10: [mem 0xd0000000-0xdfffffff 64bit=
 pref]
[    3.691717] pci 0000:0c:00.0: reg 0x18: [mem 0xe0000000-0xe01fffff 64bit=
 pref]
[    3.691725] pci 0000:0c:00.0: reg 0x20: [io  0xf000-0xf0ff]
[    3.691733] pci 0000:0c:00.0: reg 0x24: [mem 0xfca00000-0xfca7ffff]
[    3.691744] pci 0000:0c:00.0: enabling Extended Tags
[    3.691887] pci 0000:0c:00.0: BAR 0: assigned to efifb
[    3.691937] pci 0000:0c:00.0: PME# supported from D1 D2 D3hot D3cold
[    3.691975] pci 0000:0c:00.0: 126.016 Gb/s available PCIe bandwidth, lim=
ited by 8.0 GT/s PCIe x16 link at 0000:00:08.1 (capable of 252.048 Gb/s wit=
h 16.0 GT/s PCIe x16 link)
[    3.693671] pci 0000:0c:00.1: [1002:1637] type 00 class 0x040300
[    3.693682] pci 0000:0c:00.1: reg 0x10: [mem 0xfca88000-0xfca8bfff]
[    3.693706] pci 0000:0c:00.1: enabling Extended Tags
[    3.693878] pci 0000:0c:00.1: PME# supported from D1 D2 D3hot D3cold
[    3.695558] pci 0000:0c:00.2: [1022:15df] type 00 class 0x108000
[    3.695574] pci 0000:0c:00.2: reg 0x18: [mem 0xfc900000-0xfc9fffff]
[    3.695587] pci 0000:0c:00.2: reg 0x24: [mem 0xfca8c000-0xfca8dfff]
[    3.695596] pci 0000:0c:00.2: enabling Extended Tags
[    3.697366] pci 0000:0c:00.3: [1022:1639] type 00 class 0x0c0330
[    3.697382] pci 0000:0c:00.3: reg 0x10: [mem 0xfc800000-0xfc8fffff 64bit]
[    3.697409] pci 0000:0c:00.3: enabling Extended Tags
[    3.697581] pci 0000:0c:00.3: PME# supported from D0 D3hot D3cold
[    3.699262] pci 0000:0c:00.4: [1022:1639] type 00 class 0x0c0330
[    3.699276] pci 0000:0c:00.4: reg 0x10: [mem 0xfc700000-0xfc7fffff 64bit]
[    3.699303] pci 0000:0c:00.4: enabling Extended Tags
[    3.699470] pci 0000:0c:00.4: PME# supported from D0 D3hot D3cold
[    3.701157] pci 0000:0c:00.6: [1022:15e3] type 00 class 0x040300
[    3.701168] pci 0000:0c:00.6: reg 0x10: [mem 0xfca80000-0xfca87fff]
[    3.701192] pci 0000:0c:00.6: enabling Extended Tags
[    3.701357] pci 0000:0c:00.6: PME# supported from D0 D3hot D3cold
[    3.703159] pci 0000:00:08.1: PCI bridge to [bus 0c]
[    3.703165] pci 0000:00:08.1:   bridge window [io  0xf000-0xffff]
[    3.703169] pci 0000:00:08.1:   bridge window [mem 0xfc700000-0xfcafffff]
[    3.703175] pci 0000:00:08.1:   bridge window [mem 0xd0000000-0xe01fffff=
 64bit pref]
[    3.703911] pci 0000:0d:00.0: [1022:7901] type 00 class 0x010601
[    3.703936] pci 0000:0d:00.0: reg 0x24: [mem 0xfce01000-0xfce017ff]
[    3.703946] pci 0000:0d:00.0: enabling Extended Tags
[    3.704154] pci 0000:0d:00.0: 126.016 Gb/s available PCIe bandwidth, lim=
ited by 8.0 GT/s PCIe x16 link at 0000:00:08.2 (capable of 252.048 Gb/s wit=
h 16.0 GT/s PCIe x16 link)
[    3.705404] pci 0000:0d:00.1: [1022:7901] type 00 class 0x010601
[    3.705429] pci 0000:0d:00.1: reg 0x24: [mem 0xfce00000-0xfce007ff]
[    3.705439] pci 0000:0d:00.1: enabling Extended Tags
[    3.706926] pci 0000:00:08.2: PCI bridge to [bus 0d]
[    3.706933] pci 0000:00:08.2:   bridge window [mem 0xfce00000-0xfcefffff]
[    3.719188] ACPI: PCI Interrupt Link [LNKA] (IRQs 4 5 7 10 11 14 15) *0
[    3.720993] ACPI: PCI Interrupt Link [LNKB] (IRQs 4 5 7 10 11 14 15) *0
[    3.722685] ACPI: PCI Interrupt Link [LNKC] (IRQs 4 5 7 10 11 14 15) *0
[    3.724579] ACPI: PCI Interrupt Link [LNKD] (IRQs 4 5 7 10 11 14 15) *0
[    3.726367] ACPI: PCI Interrupt Link [LNKE] (IRQs 4 5 7 10 11 14 15) *0
[    3.727890] ACPI: PCI Interrupt Link [LNKF] (IRQs 4 5 7 10 11 14 15) *0
[    3.729400] ACPI: PCI Interrupt Link [LNKG] (IRQs 4 5 7 10 11 14 15) *0
[    3.730923] ACPI: PCI Interrupt Link [LNKH] (IRQs 4 5 7 10 11 14 15) *0
[    3.748921] ACPI: EC: interrupt unblocked
[    3.748925] ACPI: EC: event unblocked
[    3.748931] ACPI: EC: EC_CMD/EC_SC=3D0x66, EC_DATA=3D0x62
[    3.748933] ACPI: EC: GPE=3D0x3
[    3.748945] ACPI: _SB_.PCI0.SBRG.EC0_: Boot DSDT EC initialization compl=
ete
[    3.748962] ACPI: _SB_.PCI0.SBRG.EC0_: EC: Used to handle transactions a=
nd events
[    3.749531] iommu: Default domain type: Translated
[    3.750467] pci 0000:0c:00.0: vgaarb: VGA device added: decodes=3Dio+mem=
,owns=3Dnone,locks=3Dnone
[    3.750470] pci 0000:0c:00.0: vgaarb: bridge control possible
[    3.750473] pci 0000:0c:00.0: vgaarb: setting as boot device
[    3.750476] vgaarb: loaded
[    3.753243] SCSI subsystem initialized
[    3.753883] libata version 3.00 loaded.
[    3.753932] ACPI: bus type USB registered
[    3.753977] usbcore: registered new interface driver usbfs
[    3.754032] usbcore: registered new interface driver hub
[    3.754119] usbcore: registered new device driver usb
[    3.754432] pps_core: LinuxPPS API ver. 1 registered
[    3.754434] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo =
Giometti <giometti@linux.it>
[    3.754483] PTP clock support registered
[    3.754579] EDAC MC: Ver: 3.0.0
[    3.755028] Registered efivars operations
[    3.758940] NetLabel: Initializing
[    3.758943] NetLabel:  domain hash size =3D 128
[    3.758945] NetLabel:  protocols =3D UNLABELED CIPSOv4 CALIPSO
[    3.759115] NetLabel:  unlabeled traffic allowed by default
[    3.759150] PCI: Using ACPI for IRQ routing
[    3.763418] PCI: pci_cache_line_size set to 64 bytes
[    3.763519] e820: reserve RAM buffer [mem 0x09c10000-0x0bffffff]
[    3.763535] e820: reserve RAM buffer [mem 0x0a200000-0x0bffffff]
[    3.763547] e820: reserve RAM buffer [mem 0x0b000000-0x0bffffff]
[    3.763559] e820: reserve RAM buffer [mem 0xb4c66018-0xb7ffffff]
[    3.763572] e820: reserve RAM buffer [mem 0xb5158000-0xb7ffffff]
[    3.763584] e820: reserve RAM buffer [mem 0xb6cf5000-0xb7ffffff]
[    3.763596] e820: reserve RAM buffer [mem 0xb8390000-0xbbffffff]
[    3.763609] e820: reserve RAM buffer [mem 0x81f380000-0x81fffffff]
[    3.763871] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[    3.763879] hpet0: 3 comparators, 32-bit 14.318180 MHz counter
[    3.767071] clocksource: Switched to clocksource tsc-early
[    3.947809] VFS: Disk quotas dquot_6.6.0
[    3.947952] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 byte=
s)
[    3.949538] pnp: PnP ACPI init
[    3.952235] system 00:00: [mem 0xf0000000-0xf7ffffff] has been reserved
[    3.952300] system 00:00: Plug and Play ACPI device, IDs PNP0c01 (active)
[    3.954888] system 00:01: [mem 0x820000000-0x83fffffff window] has been =
reserved
[    3.954948] system 00:01: Plug and Play ACPI device, IDs PNP0c02 (active)
[    3.959738] pnp 00:02: Plug and Play ACPI device, IDs PNP0b00 (active)
[    3.977677] system 00:03: [io  0x0a00-0x0a0f] has been reserved
[    3.977699] system 00:03: [io  0x0a10-0x0a1f] has been reserved
[    3.977720] system 00:03: [io  0x0a20-0x0a2f] has been reserved
[    3.977743] system 00:03: [io  0x0a30-0x0a3f] has been reserved
[    3.977763] system 00:03: [io  0x0a40-0x0a4f] has been reserved
[    3.977783] system 00:03: [io  0x0a50-0x0a5f] has been reserved
[    3.977803] system 00:03: [io  0x0a60-0x0a6f] has been reserved
[    3.977823] system 00:03: [io  0x0a70-0x0a7f] has been reserved
[    3.977843] system 00:03: [io  0x0a80-0x0a8f] has been reserved
[    3.977863] system 00:03: [io  0x0a90-0x0b8e] has been reserved
[    3.977884] system 00:03: [io  0x0aa0-0x0aaf] has been reserved
[    3.977904] system 00:03: [io  0x0ab0-0x0abf] has been reserved
[    3.977924] system 00:03: [io  0x0ac0-0x0acf] has been reserved
[    3.977944] system 00:03: [io  0x0ad0-0x0adf] has been reserved
[    3.977979] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    3.985055] system 00:04: [io  0x04d0-0x04d1] has been reserved
[    3.985077] system 00:04: [io  0x040b] has been reserved
[    3.985097] system 00:04: [io  0x04d6] has been reserved
[    3.985117] system 00:04: [io  0x0c00-0x0c01] has been reserved
[    3.985137] system 00:04: [io  0x0c14] has been reserved
[    3.985157] system 00:04: [io  0x0c50-0x0c51] has been reserved
[    3.985177] system 00:04: [io  0x0c52] has been reserved
[    3.985198] system 00:04: [io  0x0c6c] has been reserved
[    3.985221] system 00:04: [io  0x0c6f] has been reserved
[    3.985241] system 00:04: [io  0x0cd0-0x0cd1] has been reserved
[    3.985261] system 00:04: [io  0x0cd2-0x0cd3] has been reserved
[    3.985281] system 00:04: [io  0x0cd4-0x0cd5] has been reserved
[    3.985302] system 00:04: [io  0x0cd6-0x0cd7] has been reserved
[    3.985327] system 00:04: [io  0x0cd8-0x0cdf] has been reserved
[    3.985347] system 00:04: [io  0x0800-0x089f] has been reserved
[    3.985367] system 00:04: [io  0x0b00-0x0b0f] has been reserved
[    3.985388] system 00:04: [io  0x0b20-0x0b3f] has been reserved
[    3.985408] system 00:04: [io  0x0900-0x090f] has been reserved
[    3.985428] system 00:04: [io  0x0910-0x091f] has been reserved
[    3.985460] system 00:04: [mem 0xfec00000-0xfec00fff] could not be reser=
ved
[    3.985491] system 00:04: [mem 0xfec01000-0xfec01fff] could not be reser=
ved
[    3.985513] system 00:04: [mem 0xfedc0000-0xfedc0fff] has been reserved
[    3.985536] system 00:04: [mem 0xfee00000-0xfee00fff] has been reserved
[    3.985566] system 00:04: [mem 0xfed80000-0xfed8ffff] could not be reser=
ved
[    3.985588] system 00:04: [mem 0xfec10000-0xfec10fff] has been reserved
[    3.985611] system 00:04: [mem 0xff000000-0xffffffff] has been reserved
[    3.985645] system 00:04: Plug and Play ACPI device, IDs PNP0c02 (active)
[    4.000921] pnp: PnP ACPI: found 5 devices
[    4.022230] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, m=
ax_idle_ns: 2085701024 ns
[    4.022930] NET: Registered protocol family 2
[    4.025189] tcp_listen_portaddr_hash hash table entries: 16384 (order: 6=
, 262144 bytes, linear)
[    4.025717] TCP established hash table entries: 262144 (order: 9, 209715=
2 bytes, linear)
[    4.027463] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes,=
 linear)
[    4.027836] TCP: Hash tables configured (established 262144 bind 65536)
[    4.028821] MPTCP token hash table entries: 32768 (order: 7, 786432 byte=
s, linear)
[    4.029224] UDP hash table entries: 16384 (order: 7, 524288 bytes, linea=
r)
[    4.029555] UDP-Lite hash table entries: 16384 (order: 7, 524288 bytes, =
linear)
[    4.030765] NET: Registered protocol family 1
[    4.030807] NET: Registered protocol family 44
[    4.030838] pci 0000:02:00.0: PCI bridge to [bus 03]
[    4.030860] pci 0000:02:01.0: PCI bridge to [bus 04]
[    4.030873] pci 0000:02:02.0: PCI bridge to [bus 05]
[    4.030885] pci 0000:02:03.0: PCI bridge to [bus 06]
[    4.030898] pci 0000:02:04.0: PCI bridge to [bus 07]
[    4.030910] pci 0000:02:05.0: PCI bridge to [bus 08]
[    4.030922] pci 0000:02:06.0: PCI bridge to [bus 09]
[    4.030927] pci 0000:02:06.0:   bridge window [io  0xe000-0xefff]
[    4.030933] pci 0000:02:06.0:   bridge window [mem 0xfcc00000-0xfccfffff]
[    4.030944] pci 0000:02:07.0: PCI bridge to [bus 0a]
[    4.030947] pci 0000:02:07.0:   bridge window [io  0xd000-0xdfff]
[    4.030953] pci 0000:02:07.0:   bridge window [mem 0xfcb00000-0xfcbfffff]
[    4.030963] pci 0000:01:00.2: PCI bridge to [bus 02-0a]
[    4.030967] pci 0000:01:00.2:   bridge window [io  0xd000-0xefff]
[    4.030973] pci 0000:01:00.2:   bridge window [mem 0xfcb00000-0xfccfffff]
[    4.030982] pci 0000:00:02.1: PCI bridge to [bus 01-0a]
[    4.030985] pci 0000:00:02.1:   bridge window [io  0xd000-0xefff]
[    4.030990] pci 0000:00:02.1:   bridge window [mem 0xfcb00000-0xfcdfffff]
[    4.030997] pci 0000:00:02.2: PCI bridge to [bus 0b]
[    4.031001] pci 0000:00:02.2:   bridge window [mem 0xfcf00000-0xfcffffff]
[    4.031010] pci 0000:00:08.1: PCI bridge to [bus 0c]
[    4.031014] pci 0000:00:08.1:   bridge window [io  0xf000-0xffff]
[    4.031018] pci 0000:00:08.1:   bridge window [mem 0xfc700000-0xfcafffff]
[    4.031022] pci 0000:00:08.1:   bridge window [mem 0xd0000000-0xe01fffff=
 64bit pref]
[    4.031029] pci 0000:00:08.2: PCI bridge to [bus 0d]
[    4.031033] pci 0000:00:08.2:   bridge window [mem 0xfce00000-0xfcefffff]
[    4.031043] pci_bus 0000:00: resource 4 [io  0x0000-0x03af window]
[    4.031047] pci_bus 0000:00: resource 5 [io  0x03e0-0x0cf7 window]
[    4.031050] pci_bus 0000:00: resource 6 [io  0x03b0-0x03df window]
[    4.031053] pci_bus 0000:00: resource 7 [io  0x0d00-0xffff window]
[    4.031057] pci_bus 0000:00: resource 8 [mem 0x000a0000-0x000bffff windo=
w]
[    4.031060] pci_bus 0000:00: resource 9 [mem 0x000c0000-0x000dffff windo=
w]
[    4.031064] pci_bus 0000:00: resource 10 [mem 0xc0000000-0xfec2ffff wind=
ow]
[    4.031067] pci_bus 0000:00: resource 11 [mem 0xfee00000-0xffffffff wind=
ow]
[    4.031071] pci_bus 0000:01: resource 0 [io  0xd000-0xefff]
[    4.031074] pci_bus 0000:01: resource 1 [mem 0xfcb00000-0xfcdfffff]
[    4.031078] pci_bus 0000:02: resource 0 [io  0xd000-0xefff]
[    4.031081] pci_bus 0000:02: resource 1 [mem 0xfcb00000-0xfccfffff]
[    4.031085] pci_bus 0000:09: resource 0 [io  0xe000-0xefff]
[    4.031088] pci_bus 0000:09: resource 1 [mem 0xfcc00000-0xfccfffff]
[    4.031092] pci_bus 0000:0a: resource 0 [io  0xd000-0xdfff]
[    4.031095] pci_bus 0000:0a: resource 1 [mem 0xfcb00000-0xfcbfffff]
[    4.031098] pci_bus 0000:0b: resource 1 [mem 0xfcf00000-0xfcffffff]
[    4.031102] pci_bus 0000:0c: resource 0 [io  0xf000-0xffff]
[    4.031105] pci_bus 0000:0c: resource 1 [mem 0xfc700000-0xfcafffff]
[    4.031108] pci_bus 0000:0c: resource 2 [mem 0xd0000000-0xe01fffff 64bit=
 pref]
[    4.031112] pci_bus 0000:0d: resource 1 [mem 0xfce00000-0xfcefffff]
[    4.035088] pci 0000:0c:00.1: D0 power state depends on 0000:0c:00.0
[    4.039436] PCI: CLS 64 bytes, default 64
[    4.039874] Trying to unpack rootfs image as initramfs...
[    4.303879] Freeing initrd memory: 8380K
[    4.437100] pci 0000:00:00.2: AMD-Vi: Unable to read/write to IOMMU perf=
 counter.
[    4.437124] fbcon: Taking over console
[    4.438778] pci 0000:00:00.2: can't derive routing for PCI INT A
[    4.438783] pci 0000:00:00.2: PCI INT A: not connected
[    4.439066] pci 0000:00:01.0: Adding to iommu group 0
[    4.439254] pci 0000:00:02.0: Adding to iommu group 1
[    4.439416] pci 0000:00:02.1: Adding to iommu group 2
[    4.439576] pci 0000:00:02.2: Adding to iommu group 3
[    4.439749] pci 0000:00:08.0: Adding to iommu group 4
[    4.439838] pci 0000:00:08.1: Adding to iommu group 4
[    4.439927] pci 0000:00:08.2: Adding to iommu group 4
[    4.440092] pci 0000:00:14.0: Adding to iommu group 5
[    4.440181] pci 0000:00:14.3: Adding to iommu group 5
[    4.440425] pci 0000:00:18.0: Adding to iommu group 6
[    4.440520] pci 0000:00:18.1: Adding to iommu group 6
[    4.440619] pci 0000:00:18.2: Adding to iommu group 6
[    4.440708] pci 0000:00:18.3: Adding to iommu group 6
[    4.440798] pci 0000:00:18.4: Adding to iommu group 6
[    4.440887] pci 0000:00:18.5: Adding to iommu group 6
[    4.440976] pci 0000:00:18.6: Adding to iommu group 6
[    4.441068] pci 0000:00:18.7: Adding to iommu group 6
[    4.441251] pci 0000:01:00.0: Adding to iommu group 7
[    4.441342] pci 0000:01:00.1: Adding to iommu group 7
[    4.441433] pci 0000:01:00.2: Adding to iommu group 7
[    4.441513] pci 0000:02:00.0: Adding to iommu group 7
[    4.441591] pci 0000:02:01.0: Adding to iommu group 7
[    4.441668] pci 0000:02:02.0: Adding to iommu group 7
[    4.441752] pci 0000:02:03.0: Adding to iommu group 7
[    4.441842] pci 0000:02:04.0: Adding to iommu group 7
[    4.441919] pci 0000:02:05.0: Adding to iommu group 7
[    4.442006] pci 0000:02:06.0: Adding to iommu group 7
[    4.442089] pci 0000:02:07.0: Adding to iommu group 7
[    4.442167] pci 0000:09:00.0: Adding to iommu group 7
[    4.442254] pci 0000:0a:00.0: Adding to iommu group 7
[    4.442401] pci 0000:0b:00.0: Adding to iommu group 8
[    4.442495] pci 0000:0c:00.0: Adding to iommu group 4
[    4.442579] pci 0000:0c:00.1: Adding to iommu group 4
[    4.442657] pci 0000:0c:00.2: Adding to iommu group 4
[    4.442736] pci 0000:0c:00.3: Adding to iommu group 4
[    4.442815] pci 0000:0c:00.4: Adding to iommu group 4
[    4.442901] pci 0000:0c:00.6: Adding to iommu group 4
[    4.442980] pci 0000:0d:00.0: Adding to iommu group 4
[    4.443062] pci 0000:0d:00.1: Adding to iommu group 4
[    4.485919] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40
[    4.485927] pci 0000:00:00.2: AMD-Vi: Extended features (0x206d73ef22254=
ade):
[    4.485930]  PPR X2APIC NX GT IA GA PC GA_vAPIC
[    4.485941] AMD-Vi: Interrupt remapping enabled
[    4.485943] AMD-Vi: Virtual APIC enabled
[    4.485944] AMD-Vi: X2APIC enabled
[    4.486507] AMD-Vi: Lazy IO/TLB flushing enabled
[    4.486638] amd_uncore: 4  amd_df counters detected
[    4.486658] amd_uncore: 6  amd_l3 counters detected
[    4.487370] LVT offset 0 assigned for vector 0x400
[    4.487665] perf: AMD IBS detected (0x000003ff)
[    4.493516] check: Scanning for low memory corruption every 60 seconds
[    4.501303] Initialise system trusted keyrings
[    4.501370] Key type blacklist registered
[    4.501686] workingset: timestamp_bits=3D41 max_order=3D23 bucket_order=
=3D0
[    4.535407] zbud: loaded
[    4.543286] Key type asymmetric registered
[    4.543290] Asymmetric key parser 'x509' registered
[    4.543383] Block layer SCSI generic (bsg) driver version 0.4 loaded (ma=
jor 243)
[    4.543676] io scheduler mq-deadline registered
[    4.543680] io scheduler kyber registered
[    4.544306] io scheduler bfq registered
[    4.548330] pcieport 0000:00:02.1: PME: Signaling with IRQ 26
[    4.549376] pcieport 0000:00:02.2: PME: Signaling with IRQ 27
[    4.550413] pcieport 0000:00:08.1: PME: Signaling with IRQ 28
[    4.552624] pcieport 0000:00:08.2: PME: Signaling with IRQ 29
[    4.566880] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    4.567202] efifb: probing for efifb
[    4.567582] efifb: framebuffer at 0xd0000000, using 3072k, total 3072k
[    4.567585] efifb: mode is 1024x768x32, linelength=3D4096, pages=3D1
[    4.567588] efifb: scrolling: redraw
[    4.567589] efifb: Truecolor: size=3D8:8:8:8, shift=3D24:16:8:0
[    4.568816] Console: switching to colour frame buffer device 128x48
[    4.573826] fb0: EFI VGA frame buffer device
[    4.574618] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0=
C0C:00/input/input0
[    4.575001] ACPI: button: Power Button [PWRB]
[    4.575507] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/inpu=
t/input1
[    4.577445] ACPI: button: Power Button [PWRF]
[    4.578214] Monitor-Mwait will be used to enter C-1 state
[    4.578264] ACPI: _PR_.C000: Found 3 idle states
[    4.579833] ACPI: _PR_.C002: Found 3 idle states
[    4.581513] ACPI: _PR_.C004: Found 3 idle states
[    4.583007] ACPI: _PR_.C006: Found 3 idle states
[    4.584708] ACPI: _PR_.C001: Found 3 idle states
[    4.586254] ACPI: _PR_.C003: Found 3 idle states
[    4.587838] ACPI: _PR_.C005: Found 3 idle states
[    4.589535] ACPI: _PR_.C007: Found 3 idle states
[    4.606622] thermal LNXTHERM:00: registered as thermal_zone0
[    4.606629] ACPI: thermal: Thermal Zone [HPTZ] (30 C)
[    4.608252] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    4.632735] Non-volatile memory driver v1.3
[    4.632741] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
[    4.645325] nvme nvme0: pci function 0000:0b:00.0
[    4.645645] ahci 0000:01:00.1: version 3.0
[    4.645660] ahci 0000:01:00.1: enabling device (0100 -> 0102)
[    4.647511] ahci 0000:01:00.1: SSS flag set, parallel bus scan disabled
[    4.647582] ahci 0000:01:00.1: AHCI 0001.0301 32 slots 8 ports 6 Gbps 0x=
ff impl SATA mode
[    4.647587] ahci 0000:01:00.1: flags: 64bit ncq sntf stag pm led clo onl=
y pmp pio slum part sxs deso sadm sds apst
[    4.651792] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
[    4.651913] BUG: KASAN: use-after-free in __iommu_dma_unmap_swiotlb (./i=
nclude/linux/swiotlb.h:114 drivers/iommu/dma-iommu.c:510)=20
[    4.652031] Read of size 8 at addr ffff8887c008f000 by task swapper/0/0

[    4.652162] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.12.0-rc3-debug-0=
0033-g167e3e00e2be #1
[    4.652168] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[    4.652172] Call Trace:
[    4.652176]  <IRQ>
[    4.652180] dump_stack (lib/dump_stack.c:122)=20
[    4.652189] print_address_description.constprop.0 (mm/kasan/report.c:233=
)=20
[    4.652196] ? __iommu_dma_unmap_swiotlb (./include/linux/swiotlb.h:114 d=
rivers/iommu/dma-iommu.c:510)=20
[    4.652202] kasan_report.cold (mm/kasan/report.c:400 mm/kasan/report.c:4=
16)=20
[    4.652211] ? __iommu_dma_unmap_swiotlb (./include/linux/swiotlb.h:114 d=
rivers/iommu/dma-iommu.c:510)=20
[    4.652217] __iommu_dma_unmap_swiotlb (./include/linux/swiotlb.h:114 dri=
vers/iommu/dma-iommu.c:510)=20
[    4.652224] nvme_pci_complete_rq (drivers/nvme/host/pci.c:971)=20
[    4.652232] blk_complete_reqs (block/blk-mq.c:575 (discriminator 6))=20
[    4.652239] __do_softirq (./arch/x86/include/asm/jump_label.h:25 ./inclu=
de/linux/jump_label.h:200 ./include/trace/events/irq.h:142 kernel/softirq.c=
:346)=20
[    4.652247] irq_exit_rcu (kernel/softirq.c:221 kernel/softirq.c:422 kern=
el/softirq.c:434)=20
[    4.652254] common_interrupt (arch/x86/kernel/irq.c:240 (discriminator 1=
4))=20
[    4.652261]  </IRQ>
[    4.652264] asm_common_interrupt (./arch/x86/include/asm/idtentry.h:623)=
=20
[    4.652270] RIP: 0010:cpuidle_enter_state (drivers/cpuidle/cpuidle.c:259=
)=20
[ 4.652277] Code: 3d 14 09 b7 51 e8 57 a6 49 ff 49 89 c5 0f 1f 44 00 00 31 =
ff e8 18 bb 49 ff 80 3c 24 00 0f 85 aa 02 00 00 fb 66 0f 1f 44 00 00 <45> 8=
5 f6 0f 88 39 02 00 00 49 63 ee 48 8d 44 6d 00 48 8d 44 85 00
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	3d 14 09 b7 51       	cmp    $0x51b70914,%eax
   5:	e8 57 a6 49 ff       	call   0xffffffffff49a661
   a:	49 89 c5             	mov    %rax,%r13
   d:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
  12:	31 ff                	xor    %edi,%edi
  14:	e8 18 bb 49 ff       	call   0xffffffffff49bb31
  19:	80 3c 24 00          	cmpb   $0x0,(%rsp)
  1d:	0f 85 aa 02 00 00    	jne    0x2cd
  23:	fb                   	sti   =20
  24:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
  2a:*	45 85 f6             	test   %r14d,%r14d		<-- trapping instruction
  2d:	0f 88 39 02 00 00    	js     0x26c
  33:	49 63 ee             	movslq %r14d,%rbp
  36:	48 8d 44 6d 00       	lea    0x0(%rbp,%rbp,2),%rax
  3b:	48 8d 44 85 00       	lea    0x0(%rbp,%rax,4),%rax

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	45 85 f6             	test   %r14d,%r14d
   3:	0f 88 39 02 00 00    	js     0x242
   9:	49 63 ee             	movslq %r14d,%rbp
   c:	48 8d 44 6d 00       	lea    0x0(%rbp,%rbp,2),%rax
  11:	48 8d 44 85 00       	lea    0x0(%rbp,%rax,4),%rax
[    4.652283] RSP: 0018:ffffffffaf807df0 EFLAGS: 00000246
[    4.652289] RAX: 0000000000000000 RBX: ffff88810bd09000 RCX: ffffffffad9=
44885
[    4.652293] RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff8887c32=
35648
[    4.652297] RBP: 0000000000000003 R08: 0000000000000001 R09: ffff8887c32=
356d7
[    4.652300] R10: ffffed10f8646ada R11: 0000000000000001 R12: ffffffffafc=
5bfc0
[    4.652304] R13: 0000000115446cbb R14: 0000000000000003 R15: ffffffffafc=
5c150
[    4.652309] ? sched_idle_set_state (kernel/sched/sched.h:1981 kernel/sch=
ed/idle.c:22)=20
[    4.652317] ? tick_nohz_idle_stop_tick (kernel/time/tick-sched.c:1029 ke=
rnel/time/tick-sched.c:1043)=20
[    4.652325] cpuidle_enter (drivers/cpuidle/cpuidle.c:353)=20
[    4.652331] do_idle (kernel/sched/idle.c:158 kernel/sched/idle.c:239 ker=
nel/sched/idle.c:300)=20
[    4.652338] ? arch_cpu_idle_exit+0x40/0x40=20
[    4.652345] cpu_startup_entry (kernel/sched/idle.c:396 (discriminator 1)=
)=20
[    4.652350] start_kernel (init/main.c:1066)=20
[    4.652359] secondary_startup_64_no_verify (arch/x86/kernel/head_64.S:28=
3)=20

[    4.652395] The buggy address belongs to the page:
[    4.652456] page:00000000a3938bc3 refcount:0 mapcount:0 mapping:00000000=
00000000 index:0x0 pfn:0x7c008f
[    4.652461] flags: 0x2ffff0000000000()
[    4.652466] raw: 02ffff0000000000 ffffea001f0023c8 ffffea001f0023c8 0000=
000000000000
[    4.652470] raw: 0000000000000000 0000000000000000 00000000ffffffff 0000=
000000000000
[    4.652472] page dumped because: kasan: bad access detected

[    4.652491] Memory state around the buggy address:
[    4.652547]  ffff8887c008ef00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652621]  ffff8887c008ef80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652695] >ffff8887c008f000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652768]                    ^
[    4.652803]  ffff8887c008f080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652877]  ffff8887c008f100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff=
 ff ff
[    4.652950] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
[    4.653029] Disabling lock debugging due to kernel taint
[    4.653309] nvme nvme0: missing or invalid SUBNQN field.
[    4.663105] nvme nvme0: 16/0/0 default/read/poll queues
[    4.668311] scsi host0: ahci
[    4.669899]  nvme0n1: p1 p2
[    4.670702] scsi host1: ahci
[    4.672616] scsi host2: ahci
[    4.674521] scsi host3: ahci
[    4.676781] scsi host4: ahci
[    4.678791] scsi host5: ahci
[    4.680663] scsi host6: ahci
[    4.682714] scsi host7: ahci
[    4.683697] ata1: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
100 irq 44
[    4.683702] ata2: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
180 irq 44
[    4.683707] ata3: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
200 irq 44
[    4.683710] ata4: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
280 irq 44
[    4.683714] ata5: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
300 irq 44
[    4.683718] ata6: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
380 irq 44
[    4.683722] ata7: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
400 irq 44
[    4.683726] ata8: SATA max UDMA/133 abar m131072@0xfcd80000 port 0xfcd80=
480 irq 44
[    4.684113] ahci 0000:0d:00.0: enabling device (0100 -> 0102)
[    4.686333] ahci 0000:0d:00.0: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x=
1 impl SATA mode
[    4.686342] ahci 0000:0d:00.0: flags: 64bit ncq sntf ilck pm led clo onl=
y pmp fbs pio slum part
[    4.688739] scsi host8: ahci
[    4.689732] ata9: SATA max UDMA/133 abar m2048@0xfce01000 port 0xfce0110=
0 irq 62
[    4.689877] ahci 0000:0d:00.1: enabling device (0100 -> 0102)
[    4.691535] ahci 0000:0d:00.1: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x=
1 impl SATA mode
[    4.691544] ahci 0000:0d:00.1: flags: 64bit ncq sntf ilck pm led clo onl=
y pmp fbs pio slum part
[    4.694012] scsi host9: ahci
[    4.695026] ata10: SATA max UDMA/133 abar m2048@0xfce00000 port 0xfce001=
00 irq 64
[    4.695247] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    4.695279] ehci-pci: EHCI PCI platform driver
[    4.695395] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    4.695415] ohci-pci: OHCI PCI platform driver
[    4.695512] uhci_hcd: USB Universal Host Controller Interface driver
[    4.696210] usbcore: registered new interface driver usbserial_generic
[    4.696264] usbserial: USB Serial support registered for generic
[    4.697317] rtc_cmos 00:02: RTC can wake from S4
[    4.699142] rtc_cmos 00:02: registered as rtc0
[    4.699426] rtc_cmos 00:02: setting system clock to 2021-07-05T18:01:47 =
UTC (1625508107)
[    4.699656] rtc_cmos 00:02: alarms up to one month, y3k, 114 bytes nvram=
, hpet irqs
[    4.700290] ledtrig-cpu: registered to indicate activity on CPUs
[    4.705912] hid: raw HID events driver (C) Jiri Kosina
[    4.706429] drop_monitor: Initializing network drop monitor service
[    4.706594] Initializing XFRM netlink socket
[    4.708814] NET: Registered protocol family 10
[    4.733033] Segment Routing with IPv6
[    4.733041] RPL Segment Routing with IPv6
[    4.733175] NET: Registered protocol family 17
[    4.744516] microcode: CPU0: patch_level=3D0x08600106
[    4.744563] microcode: CPU1: patch_level=3D0x08600106
[    4.744657] microcode: CPU2: patch_level=3D0x08600106
[    4.744739] microcode: CPU3: patch_level=3D0x08600106
[    4.744804] microcode: CPU4: patch_level=3D0x08600106
[    4.744848] microcode: CPU5: patch_level=3D0x08600106
[    4.744916] microcode: CPU6: patch_level=3D0x08600106
[    4.744975] microcode: CPU7: patch_level=3D0x08600106
[    4.745002] microcode: Microcode Update Driver: v2.2.
[    4.745820] resctrl: L3 allocation detected
[    4.745827] resctrl: L3DATA allocation detected
[    4.745829] resctrl: L3CODE allocation detected
[    4.745830] resctrl: MB allocation detected
[    4.745832] resctrl: L3 monitoring detected
[    4.745838] IPI shorthand broadcast: enabled
[    4.745984] sched_clock: Marking stable (4739676488, 6007714)->(47476761=
29, -1991927)
[    4.746812] registered taskstats version 1
[    4.746922] Loading compiled-in X.509 certificates
[    4.757340] Loaded X.509 cert 'Build time autogenerated kernel key: 32cf=
4ae6b69274291395e11399683edef2a4e147'
[    4.762638] zswap: loaded using pool lz4/z3fold
[    4.764606] Key type ._fscrypt registered
[    4.764612] Key type .fscrypt registered
[    4.764614] Key type fscrypt-provisioning registered
[    4.776597] PM:   Magic number: 13:252:38
[    4.776765] memory memory207: hash matches
[    4.776798] memory memory74: hash matches
[    4.778951] RAS: Correctable Errors collector initialized.
[    4.995881] ata1: SATA link down (SStatus 0 SControl 300)
[    5.000972] ata9: SATA link down (SStatus 0 SControl 300)
[    5.005458] ata10: SATA link down (SStatus 0 SControl 300)
[    5.310074] ata2: SATA link down (SStatus 0 SControl 300)
[    5.490688] tsc: Refined TSC clocksource calibration: 3819.727 MHz
[    5.490713] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x6e1=
e4508946, max_idle_ns: 881590469268 ns
[    5.490821] clocksource: Switched to clocksource tsc
[    5.622021] ata3: SATA link down (SStatus 0 SControl 300)
[    5.932590] ata4: SATA link down (SStatus 0 SControl 300)
[    6.245698] ata5: SATA link down (SStatus 0 SControl 300)
[    6.559773] ata6: SATA link down (SStatus 0 SControl 300)
[    6.872755] ata7: SATA link down (SStatus 0 SControl 300)
[    7.185687] ata8: SATA link down (SStatus 0 SControl 300)
[    7.200470] Freeing unused decrypted memory: 2036K
[    7.201233] Freeing unused kernel image (initmem) memory: 2012K
[    7.201243] Write protecting the kernel read-only data: 32768k
[    7.202524] Freeing unused kernel image (text/rodata gap) memory: 2036K
[    7.203212] Freeing unused kernel image (rodata/data gap) memory: 1768K
[    7.261659] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[    7.261671] rodata_test: all tests were successful
[    7.261705] Run /init as init process
[    7.261708]   with arguments:
[    7.261710]     /init
[    7.261712]   with environment:
[    7.261714]     HOME=3D/
[    7.261716]     TERM=3Dlinux
[    8.072610] xhci_hcd 0000:01:00.0: xHCI Host Controller
[    8.072718] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus =
number 1
[    8.128723] xhci_hcd 0000:01:00.0: hcc params 0x0200ef81 hci version 0x1=
10 quirks 0x0000000000000410
[    8.136551] usb usb1: New USB device found, idVendor=3D1d6b, idProduct=
=3D0002, bcdDevice=3D 5.12
[    8.136562] usb usb1: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.136567] usb usb1: Product: xHCI Host Controller
[    8.136572] usb usb1: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.136576] usb usb1: SerialNumber: 0000:01:00.0
[    8.139731] hub 1-0:1.0: USB hub found
[    8.139944] hub 1-0:1.0: 14 ports detected
[    8.155361] xhci_hcd 0000:01:00.0: xHCI Host Controller
[    8.155411] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus =
number 2
[    8.155437] xhci_hcd 0000:01:00.0: Host supports USB 3.1 Enhanced SuperS=
peed
[    8.155750] usb usb2: We don't know the algorithms for LPM for this host=
, disabling LPM.
[    8.156512] usb usb2: New USB device found, idVendor=3D1d6b, idProduct=
=3D0003, bcdDevice=3D 5.12
[    8.156521] usb usb2: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.156525] usb usb2: Product: xHCI Host Controller
[    8.156528] usb usb2: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.156530] usb usb2: SerialNumber: 0000:01:00.0
[    8.158456] hub 2-0:1.0: USB hub found
[    8.158657] hub 2-0:1.0: 8 ports detected
[    8.171454] xhci_hcd 0000:0c:00.3: xHCI Host Controller
[    8.171543] xhci_hcd 0000:0c:00.3: new USB bus registered, assigned bus =
number 3
[    8.172082] xhci_hcd 0000:0c:00.3: hcc params 0x0268ffe5 hci version 0x1=
10 quirks 0x0000000000000410
[    8.178578] usb usb3: New USB device found, idVendor=3D1d6b, idProduct=
=3D0002, bcdDevice=3D 5.12
[    8.178589] usb usb3: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.178594] usb usb3: Product: xHCI Host Controller
[    8.178598] usb usb3: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.178602] usb usb3: SerialNumber: 0000:0c:00.3
[    8.181189] hub 3-0:1.0: USB hub found
[    8.181388] hub 3-0:1.0: 4 ports detected
[    8.185965] xhci_hcd 0000:0c:00.3: xHCI Host Controller
[    8.186032] xhci_hcd 0000:0c:00.3: new USB bus registered, assigned bus =
number 4
[    8.186059] xhci_hcd 0000:0c:00.3: Host supports USB 3.1 Enhanced SuperS=
peed
[    8.186366] usb usb4: We don't know the algorithms for LPM for this host=
, disabling LPM.
[    8.187099] usb usb4: New USB device found, idVendor=3D1d6b, idProduct=
=3D0003, bcdDevice=3D 5.12
[    8.187108] usb usb4: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.187113] usb usb4: Product: xHCI Host Controller
[    8.187117] usb usb4: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.187122] usb usb4: SerialNumber: 0000:0c:00.3
[    8.189404] hub 4-0:1.0: USB hub found
[    8.189539] hub 4-0:1.0: 2 ports detected
[    8.192958] xhci_hcd 0000:0c:00.4: xHCI Host Controller
[    8.193016] xhci_hcd 0000:0c:00.4: new USB bus registered, assigned bus =
number 5
[    8.193395] xhci_hcd 0000:0c:00.4: hcc params 0x0268ffe5 hci version 0x1=
10 quirks 0x0000000000000410
[    8.197879] usb usb5: New USB device found, idVendor=3D1d6b, idProduct=
=3D0002, bcdDevice=3D 5.12
[    8.197887] usb usb5: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.197890] usb usb5: Product: xHCI Host Controller
[    8.197893] usb usb5: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.197895] usb usb5: SerialNumber: 0000:0c:00.4
[    8.199515] hub 5-0:1.0: USB hub found
[    8.199659] hub 5-0:1.0: 4 ports detected
[    8.202842] xhci_hcd 0000:0c:00.4: xHCI Host Controller
[    8.202887] xhci_hcd 0000:0c:00.4: new USB bus registered, assigned bus =
number 6
[    8.202913] xhci_hcd 0000:0c:00.4: Host supports USB 3.1 Enhanced SuperS=
peed
[    8.203133] usb usb6: We don't know the algorithms for LPM for this host=
, disabling LPM.
[    8.203610] usb usb6: New USB device found, idVendor=3D1d6b, idProduct=
=3D0003, bcdDevice=3D 5.12
[    8.203614] usb usb6: New USB device strings: Mfr=3D3, Product=3D2, Seri=
alNumber=3D1
[    8.203618] usb usb6: Product: xHCI Host Controller
[    8.203620] usb usb6: Manufacturer: Linux 5.12.0-rc3-debug-00033-g167e3e=
00e2be xhci-hcd
[    8.203623] usb usb6: SerialNumber: 0000:0c:00.4
[    8.205252] hub 6-0:1.0: USB hub found
[    8.205385] hub 6-0:1.0: 2 ports detected
[    8.483770] usb 1-11: new full-speed USB device number 2 using xhci_hcd
[    8.616313] SGI XFS with ACLs, security attributes, realtime, scrub, rep=
air, quota, no debug enabled
[    8.629895] XFS (nvme0n1p2): Mounting V5 Filesystem
[    8.640814] XFS (nvme0n1p2): Ending clean mount
[    8.643784] xfs filesystem being mounted at /new_root supports timestamp=
s until 2038 (0x7fffffff)
[    8.701705] random: fast init done
[    8.850769] random: crng init done
[    8.850799] systemd[1]: Successfully credited entropy passed from boot l=
oader.
[    8.854073] systemd[1]: systemd 248.3-2-arch running in system mode. (+P=
AM +AUDIT -SELINUX -APPARMOR -IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL =
+ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +L=
IBFDISK +PCRE2 -PWQUALITY +P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +XK=
BCOMMON +UTMP -SYSVINIT default-hierarchy=3Dunified)
[    8.870978] systemd[1]: Detected architecture x86-64.
[    8.874172] systemd[1]: Hostname set to <hp-4300G>.
[    8.883148] usb 1-11: New USB device found, idVendor=3D046d, idProduct=
=3Dc534, bcdDevice=3D29.01
[    8.883160] usb 1-11: New USB device strings: Mfr=3D1, Product=3D2, Seri=
alNumber=3D0
[    8.883165] usb 1-11: Product: USB Receiver
[    8.883169] usb 1-11: Manufacturer: Logitech
[    8.964795] systemd-fstab-generator[252]: Mount point  is not a valid pa=
th, ignoring.
[    8.965686] systemd-fstab-generator[252]: Mount point  is not a valid pa=
th, ignoring.
[    9.023787] usb 1-12: new full-speed USB device number 3 using xhci_hcd
[    9.133143] systemd[1]: Queued start job for default target Graphical In=
terface.
[    9.141522] systemd[1]: Created slice system-getty.slice.
[    9.143519] systemd[1]: Created slice system-modprobe.slice.
[    9.148031] systemd[1]: Created slice User and Session Slice.
[    9.148561] systemd[1]: Started Dispatch Password Requests to Console Di=
rectory Watch.
[    9.149038] systemd[1]: Started Forward Password Requests to Wall Direct=
ory Watch.
[    9.150164] systemd[1]: Set up automount Arbitrary Executable File Forma=
ts File System Automount Point.
[    9.150701] systemd[1]: Reached target Local Encrypted Volumes.
[    9.150901] systemd[1]: Reached target Login Prompts.
[    9.151100] systemd[1]: Reached target Paths.
[    9.151278] systemd[1]: Reached target Remote File Systems.
[    9.151475] systemd[1]: Reached target Slices.
[    9.151661] systemd[1]: Reached target Swap.
[    9.151839] systemd[1]: Reached target Local Verity Integrity Protected =
Volumes.
[    9.153881] systemd[1]: Listening on Device-mapper event daemon FIFOs.
[    9.157470] systemd[1]: Listening on Process Core Dump Socket.
[    9.159900] systemd[1]: Listening on Journal Audit Socket.
[    9.162031] systemd[1]: Listening on Journal Socket (/dev/log).
[    9.164219] systemd[1]: Listening on Journal Socket.
[    9.166260] systemd[1]: Listening on Network Service Netlink Socket.
[    9.169746] systemd[1]: Listening on udev Control Socket.
[    9.171892] systemd[1]: Listening on udev Kernel Socket.
[    9.178783] systemd[1]: Mounting Huge Pages File System...
[    9.186001] systemd[1]: Mounting POSIX Message Queue File System...
[    9.192864] systemd[1]: Mounting Kernel Debug File System...
[    9.199803] systemd[1]: Mounting Kernel Trace File System...
[    9.207150] systemd[1]: Starting Create list of static device nodes for =
the current kernel...
[    9.220054] systemd[1]: Starting Load Kernel Module configfs...
[    9.227187] systemd[1]: Starting Load Kernel Module drm...
[    9.234146] systemd[1]: Starting Load Kernel Module fuse...
[    9.240238] Linux agpgart interface v0.103
[    9.242093] systemd[1]: Starting Set Up Additional Binary Formats...
[    9.243933] systemd[1]: Condition check resulted in File System Check on=
 Root Device being skipped.
[    9.258253] fuse: init (API version 7.33)
[    9.258750] systemd[1]: Starting Journal Service...
[    9.269031] systemd[1]: Starting Load Kernel Modules...
[    9.275818] systemd[1]: Starting Remount Root and Kernel File Systems...
[    9.278268] systemd[1]: Condition check resulted in Repartition Root Dis=
k being skipped.
[    9.285440] systemd[1]: Starting Coldplug All udev Devices...
[    9.289436] Asymmetric key parser 'pkcs8' registered
[    9.295407] systemd[1]: Mounted Huge Pages File System.
[    9.297675] systemd[1]: Mounted POSIX Message Queue File System.
[    9.299077] XFS: attr2 mount option is deprecated.
[    9.299875] systemd[1]: Mounted Kernel Debug File System.
[    9.302121] systemd[1]: Mounted Kernel Trace File System.
[    9.302305] xfs filesystem being remounted at / supports timestamps unti=
l 2038 (0x7fffffff)
[    9.307207] systemd[1]: Finished Create list of static device nodes for =
the current kernel.
[    9.309211] audit: type=3D1130 audit(1625508112.104:2): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dkmod-static-nodes comm=3D"=
systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D=
? res=3Dsuccess'
[    9.310701] systemd[1]: modprobe@configfs.service: Deactivated successfu=
lly.
[    9.312189] systemd[1]: Finished Load Kernel Module configfs.
[    9.314011] audit: type=3D1130 audit(1625508112.111:3): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@configfs comm=3D"=
systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D=
? res=3Dsuccess'
[    9.314063] audit: type=3D1131 audit(1625508112.111:4): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@configfs comm=3D"=
systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D=
? res=3Dsuccess'
[    9.315399] systemd[1]: modprobe@drm.service: Deactivated successfully.
[    9.316866] systemd[1]: Finished Load Kernel Module drm.
[    9.319018] audit: type=3D1130 audit(1625508112.114:5): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@drm comm=3D"syste=
md" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? res=
=3Dsuccess'
[    9.319063] audit: type=3D1131 audit(1625508112.114:6): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@drm comm=3D"syste=
md" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? res=
=3Dsuccess'
[    9.320369] systemd[1]: modprobe@fuse.service: Deactivated successfully.
[    9.322053] systemd[1]: Finished Load Kernel Module fuse.
[    9.323928] audit: type=3D1130 audit(1625508112.121:7): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@fuse comm=3D"syst=
emd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? re=
s=3Dsuccess'
[    9.323969] audit: type=3D1131 audit(1625508112.121:8): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dmodprobe@fuse comm=3D"syst=
emd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? re=
s=3Dsuccess'
[    9.325885] systemd[1]: Finished Load Kernel Modules.
[    9.327726] audit: type=3D1130 audit(1625508112.124:9): pid=3D1 uid=3D0 =
auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-modules-load comm=
=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termina=
l=3D? res=3Dsuccess'
[    9.329640] systemd[1]: Finished Remount Root and Kernel File Systems.
[    9.331465] audit: type=3D1130 audit(1625508112.128:10): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-remount-fs comm=
=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termina=
l=3D? res=3Dsuccess'
[    9.331966] systemd[1]: proc-sys-fs-binfmt_misc.automount: Got automount=
 request for /proc/sys/fs/binfmt_misc, triggered by 268 (systemd-binfmt)
[    9.334658] usb 1-12: New USB device found, idVendor=3D0bda, idProduct=
=3Db00a, bcdDevice=3D 1.10
[    9.334669] usb 1-12: New USB device strings: Mfr=3D1, Product=3D2, Seri=
alNumber=3D3
[    9.334673] usb 1-12: Product: Bluetooth Radio
[    9.334677] usb 1-12: Manufacturer: Realtek
[    9.334681] usb 1-12: SerialNumber: 00e04c000001
[    9.337615] systemd[1]: Mounting Arbitrary Executable File Formats File =
System...
[    9.345171] systemd[1]: Mounting FUSE Control File System...
[    9.352671] systemd[1]: Mounting Kernel Configuration File System...
[    9.354660] systemd[1]: Condition check resulted in First Boot Wizard be=
ing skipped.
[    9.356762] systemd[1]: Condition check resulted in Rebuild Hardware Dat=
abase being skipped.
[    9.362335] systemd[1]: Starting Load/Save Random Seed...
[    9.370337] systemd[1]: Starting Apply Kernel Variables...
[    9.377555] systemd[1]: Starting Create System Users...
[    9.384837] systemd[1]: Mounted Arbitrary Executable File Formats File S=
ystem.
[    9.388928] systemd[1]: Mounted FUSE Control File System.
[    9.391926] systemd[1]: Mounted Kernel Configuration File System.
[    9.396765] systemd[1]: Finished Load/Save Random Seed.
[    9.400536] audit: type=3D1130 audit(1625508112.194:11): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-random-seed comm=
=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termina=
l=3D? res=3Dsuccess'
[    9.407538] systemd[1]: Finished Apply Kernel Variables.
[    9.411712] systemd[1]: Finished Set Up Additional Binary Formats.
[    9.416339] systemd[1]: Finished Create System Users.
[    9.418688] systemd[1]: Condition check resulted in First Boot Complete =
being skipped.
[    9.424186] systemd[1]: Starting Create Static Device Nodes in /dev...
[    9.480449] systemd[1]: Finished Create Static Device Nodes in /dev.
[    9.482506] systemd[1]: Reached target Local File Systems (Pre).
[    9.489210] systemd[1]: Mounting /tmp...
[    9.491124] systemd[1]: Condition check resulted in Virtual Machine and =
Container Storage (Compatibility) being skipped.
[    9.503225] systemd[1]: Starting Rule-based Manager for Device Events an=
d Files...
[    9.508551] systemd[1]: Mounted /tmp.
[    9.573272] systemd[1]: Started Rule-based Manager for Device Events and=
 Files.
[    9.588922] systemd[1]: Starting Network Service...
[    9.638950] systemd[1]: Started Journal Service.
[    9.664886] systemd-journald[269]: Received client request to flush runt=
ime journal.
[    9.759611] Bluetooth: Core ver 2.22
[    9.759775] NET: Registered protocol family 31
[    9.759778] Bluetooth: HCI device and connection manager initialized
[    9.759794] Bluetooth: HCI socket layer initialized
[    9.759807] Bluetooth: L2CAP socket layer initialized
[    9.759838] Bluetooth: SCO socket layer initialized
[    9.784432] usbcore: registered new interface driver btusb
[    9.786588] Bluetooth: hci0: RTL: examining hci_ver=3D08 hci_rev=3D000c =
lmp_ver=3D08 lmp_subver=3D8821
[    9.789596] Bluetooth: hci0: RTL: rom_version status=3D0 version=3D1
[    9.789666] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_fw.bin
[    9.793321] Bluetooth: hci0: RTL: loading rtl_bt/rtl8821c_config.bin
[    9.794035] Bluetooth: hci0: RTL: cfg_sz 10, total sz 31990
[   10.052152] acpi_cpufreq: overriding BIOS provided _PSD data
[   10.063914] acpi-tad ACPI000E:00: Missing _PRW
[   10.241179] ACPI: video: Video Device [VGA1] (multi-head: yes  rom: no  =
post: no)
[   10.264286] acpi device:1e: registered as cooling_device8
[   10.269015] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08=
:00/device:1d/LNXVIDEO:01/input/input2
[   10.319302] acpi PNP0C14:01: duplicate WMI GUID 05901221-D566-11D1-B2F0-=
00A0C9062910 (first instance was on PNP0C14:00)
[   10.358026] piix4_smbus 0000:00:14.0: SMBus Host Controller at 0xb00, re=
vision 0
[   10.358037] piix4_smbus 0000:00:14.0: Using register 0x02 for SMBus port=
 selection
[   10.358941] piix4_smbus 0000:00:14.0: Auxiliary SMBus Host Controller at=
 0xb20
[   10.362274] ccp 0000:0c:00.2: enabling device (0100 -> 0102)
[   10.364925] ccp 0000:0c:00.2: ccp: unable to access the device: you migh=
t be running a broken BIOS.
[   10.375365] ccp 0000:0c:00.2: tee enabled
[   10.375376] ccp 0000:0c:00.2: psp enabled
[   10.394306] sp5100_tco: SP5100/SB800 TCO WatchDog Timer Driver
[   10.395169] sp5100-tco sp5100-tco: Using 0xfeb00000 for watchdog MMIO ad=
dress
[   10.396264] sp5100-tco sp5100-tco: initialized. heartbeat=3D60 sec (nowa=
yout=3D0)
[   10.471471] input: PC Speaker as /devices/platform/pcspkr/input/input3
[   10.500876] RAPL PMU: API unit is 2^-32 Joules, 1 fixed counters, 163840=
 ms ovfl timer
[   10.500885] RAPL PMU: hw unit of domain package 2^-16 Joules
[   10.533106] cryptd: max_cpu_qlen set to 1000
[   10.572803] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:=
02.1/0000:01:00.0/usb1/1-11/1-11:1.0/0003:046D:C534.0001/input/input4
[   10.601442] libphy: r8169: probed
[   10.603871] r8169 0000:0a:00.0 eth0: RTL8168h/8111h, 00:68:eb:ad:98:43, =
XID 541, IRQ 91
[   10.603884] r8169 0000:0a:00.0 eth0: jumbo features [frames: 9194 bytes,=
 tx checksumming: ko]
[   10.618131] cfg80211: Loading compiled-in X.509 certificates for regulat=
ory database
[   10.632919] AVX2 version of gcm_enc/dec engaged.
[   10.633000] AES CTR mode by8 optimization enabled
[   10.633757] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.1=
1 Keyboard [Logitech USB Receiver] on usb-0000:01:00.0-11/input0
[   10.642569] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[   10.643042] platform regulatory.0: Direct firmware load for regulatory.d=
b failed with error -2
[   10.643062] cfg80211: failed to load regulatory.db
[   10.676986] input: Logitech USB Receiver Mouse as /devices/pci0000:00/00=
00:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/input/input5
[   10.680342] input: Logitech USB Receiver Consumer Control as /devices/pc=
i0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/i=
nput/input6
[   10.729484] FAT-fs (nvme0n1p1): Volume was not properly unmounted. Some =
data may be corrupt. Please run fsck.
[   10.738574] input: Logitech USB Receiver System Control as /devices/pci0=
000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/inp=
ut/input7
[   10.740269] hid-generic 0003:046D:C534.0002: input,hiddev96,hidraw1: USB=
 HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:01:00.0-11/input1
[   10.740698] usbcore: registered new interface driver usbhid
[   10.740702] usbhid: USB HID core driver
[   10.878631] snd_hda_intel 0000:0c:00.1: enabling device (0100 -> 0102)
[   10.879924] snd_hda_intel 0000:0c:00.1: Handle vga_switcheroo audio clie=
nt
[   10.880070] Bluetooth: hci0: RTL: fw version 0x829a7644
[   10.893377] snd_hda_intel 0000:0c:00.6: enabling device (0100 -> 0102)
[   10.918940] irq 7: nobody cared (try booting with the "irqpoll" option)
[   10.921972] CPU: 4 PID: 363 Comm: systemd-tmpfile Tainted: G    B       =
      5.12.0-rc3-debug-00033-g167e3e00e2be #1
[   10.921980] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[   10.921984] Call Trace:
[   10.921987]  <IRQ>
[   10.921990] dump_stack (lib/dump_stack.c:122)=20
[   10.922002] __report_bad_irq (kernel/irq/spurious.c:214)=20
[   10.922011] note_interrupt.cold (kernel/irq/spurious.c:419)=20
[   10.922019] ? add_interrupt_randomness (drivers/char/random.c:1290 (disc=
riminator 1))=20
[   10.922027] handle_irq_event (kernel/irq/handle.c:201 kernel/irq/handle.=
c:213)=20
[   10.922036] ? handle_irq_event_percpu (kernel/irq/handle.c:206)=20
[   10.922043] ? _raw_spin_lock (./arch/x86/include/asm/atomic.h:202 ./incl=
ude/asm-generic/atomic-instrumented.h:707 ./include/asm-generic/qspinlock.h=
:82 ./include/linux/spinlock.h:183 ./include/linux/spinlock_api_smp.h:143 k=
ernel/locking/spinlock.c:151)=20
[   10.922050] ? _raw_spin_lock_bh (kernel/locking/spinlock.c:150)=20
[   10.922057] handle_fasteoi_irq (kernel/irq/chip.c:661 kernel/irq/chip.c:=
716)=20
[   10.922065] __common_interrupt (arch/x86/kernel/irq.c:264 (discriminator=
 22))=20
[   10.922073] common_interrupt (arch/x86/kernel/irq.c:240 (discriminator 1=
4))=20
[   10.922081]  </IRQ>
[   10.922084] asm_common_interrupt (./arch/x86/include/asm/idtentry.h:623)=
=20
[   10.922090] RIP: 0010:file_ra_state_init (mm/readahead.c:35)=20
[ 10.922098] Code: 00 48 0f 44 f0 48 89 35 a9 cd bc 02 e8 d4 d4 e4 ff e9 8f=
 fe ff ff cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 0f 1f 44 00 00 <41> =
54 55 48 89 f5 53 48 89 fb 48 89 f7 e8 a9 ec 0c 00 48 8b 6d 00
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	00 48 0f             	add    %cl,0xf(%rax)
   3:	44                   	rex.R
   4:	f0 48 89 35 a9 cd bc 	lock mov %rsi,0x2bccda9(%rip)        # 0x2bccdb5
   b:	02=20
   c:	e8 d4 d4 e4 ff       	call   0xffffffffffe4d4e5
  11:	e9 8f fe ff ff       	jmp    0xfffffffffffffea5
  16:	cc                   	int3  =20
  17:	cc                   	int3  =20
  18:	cc                   	int3  =20
  19:	cc                   	int3  =20
  1a:	cc                   	int3  =20
  1b:	cc                   	int3  =20
  1c:	cc                   	int3  =20
  1d:	cc                   	int3  =20
  1e:	cc                   	int3  =20
  1f:	cc                   	int3  =20
  20:	cc                   	int3  =20
  21:	cc                   	int3  =20
  22:	cc                   	int3  =20
  23:	cc                   	int3  =20
  24:	cc                   	int3  =20
  25:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
  2a:*	41 54                	push   %r12		<-- trapping instruction
  2c:	55                   	push   %rbp
  2d:	48 89 f5             	mov    %rsi,%rbp
  30:	53                   	push   %rbx
  31:	48 89 fb             	mov    %rdi,%rbx
  34:	48 89 f7             	mov    %rsi,%rdi
  37:	e8 a9 ec 0c 00       	call   0xcece5
  3c:	48 8b 6d 00          	mov    0x0(%rbp),%rbp

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	41 54                	push   %r12
   2:	55                   	push   %rbp
   3:	48 89 f5             	mov    %rsi,%rbp
   6:	53                   	push   %rbx
   7:	48 89 fb             	mov    %rdi,%rbx
   a:	48 89 f7             	mov    %rsi,%rdi
   d:	e8 a9 ec 0c 00       	call   0xcecbb
  12:	48 8b 6d 00          	mov    0x0(%rbp),%rbp
[   10.922104] RSP: 0018:ffffc90000fcf9e8 EFLAGS: 00000246
[   10.922111] RAX: 0000000000000000 RBX: ffff88811ef2e5c0 RCX: ffffffffadc=
a322f
[   10.922115] RDX: dffffc0000000000 RSI: ffff8881258b5ae8 RDI: ffff88811ef=
2e658
[   10.922120] RBP: ffff8881258b5970 R08: ffffffffadca3202 R09: ffff8881258=
b5ad7
[   10.922124] R10: ffffed1024b16b5a R11: 0000000000000001 R12: 00000000000=
00000
[   10.922128] R13: ffff8881258b5970 R14: ffff88811ef2e604 R15: ffff88811ef=
2e600
[   10.922134] ? do_dentry_open (fs/open.c:841)=20
[   10.922140] ? do_dentry_open (fs/open.c:843)=20
[   10.922148] do_dentry_open (fs/open.c:846)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   10.922155] ? xfs_extent_busy_ag_cmp+0x50/0x50 xfs
[   10.922565] path_openat (fs/namei.c:3365 fs/namei.c:3498)=20
[   10.922576] ? path_lookupat (fs/namei.c:3480)=20
[   10.922583] ? rwsem_down_write_slowpath (kernel/locking/rwsem.c:1447)=20
[   10.922592] ? handle_mm_fault (mm/memory.c:4501 mm/memory.c:4565)=20
[   10.922599] ? do_user_addr_fault (./arch/x86/include/asm/jump_label.h:25=
 ./include/linux/jump_label.h:200 ./include/linux/mmap_lock.h:41 ./include/=
linux/mmap_lock.h:144 arch/x86/mm/fault.c:1414)=20
[   10.922607] do_filp_open (fs/namei.c:3525)=20
[   10.922615] ? may_open_dev (fs/namei.c:3519)=20
[   10.922624] ? __fdget (fs/file.c:201)=20
[   10.922630] ? _raw_spin_lock (./arch/x86/include/asm/atomic.h:202 ./incl=
ude/asm-generic/atomic-instrumented.h:707 ./include/asm-generic/qspinlock.h=
:82 ./include/linux/spinlock.h:183 ./include/linux/spinlock_api_smp.h:143 k=
ernel/locking/spinlock.c:151)=20
[   10.922637] ? _find_next_bit.constprop.0 (lib/find_bit.c:41)=20
[   10.922645] ? alloc_fd (fs/file.c:526 (discriminator 13))=20
[   10.922651] do_sys_openat2 (fs/open.c:1187)=20
[   10.922658] ? build_open_flags (fs/open.c:1173)=20
[   10.922666] __x64_sys_openat (fs/open.c:1214)=20
[   10.922672] ? __x64_sys_open (fs/open.c:1214)=20
[   10.922679] ? ktime_get_coarse_real_ts64 (kernel/time/timekeeping.c:2230=
 (discriminator 3))=20
[   10.922687] do_syscall_64 (arch/x86/entry/common.c:46)=20
[   10.922694] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:11=
2)=20
[   10.922701] RIP: 0033:0x7f5dca6be8cc
[ 10.922706] Code: 24 18 31 c0 41 83 e2 40 75 44 89 f0 25 00 00 41 00 3d 00=
 00 41 00 74 36 44 89 c2 4c 89 ce bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> =
3d 00 f0 ff ff 77 44 48 8b 54 24 18 64 48 2b 14 25 28 00 00 00
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	24 18                	and    $0x18,%al
   2:	31 c0                	xor    %eax,%eax
   4:	41 83 e2 40          	and    $0x40,%r10d
   8:	75 44                	jne    0x4e
   a:	89 f0                	mov    %esi,%eax
   c:	25 00 00 41 00       	and    $0x410000,%eax
  11:	3d 00 00 41 00       	cmp    $0x410000,%eax
  16:	74 36                	je     0x4e
  18:	44 89 c2             	mov    %r8d,%edx
  1b:	4c 89 ce             	mov    %r9,%rsi
  1e:	bf 9c ff ff ff       	mov    $0xffffff9c,%edi
  23:	b8 01 01 00 00       	mov    $0x101,%eax
  28:	0f 05                	syscall=20
  2a:*	48 3d 00 f0 ff ff    	cmp    $0xfffffffffffff000,%rax		<-- trapping =
instruction
  30:	77 44                	ja     0x76
  32:	48 8b 54 24 18       	mov    0x18(%rsp),%rdx
  37:	64 48 2b 14 25 28 00 	sub    %fs:0x28,%rdx
  3e:	00 00=20

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	48 3d 00 f0 ff ff    	cmp    $0xfffffffffffff000,%rax
   6:	77 44                	ja     0x4c
   8:	48 8b 54 24 18       	mov    0x18(%rsp),%rdx
   d:	64 48 2b 14 25 28 00 	sub    %fs:0x28,%rdx
  14:	00 00=20
[   10.922712] RSP: 002b:00007ffef51fa140 EFLAGS: 00000287 ORIG_RAX: 000000=
0000000101
[   10.922718] RAX: ffffffffffffffda RBX: 00005598f2a69ad0 RCX: 00007f5dca6=
be8cc
[   10.922723] RDX: 0000000000080000 RSI: 00007f5dc9d0215e RDI: 00000000fff=
fff9c
[   10.922727] RBP: 0000000000000008 R08: 0000000000080000 R09: 00007f5dc9d=
0215e
[   10.922731] R10: 0000000000000000 R11: 0000000000000287 R12: 00007f5dca7=
5555f
[   10.922735] R13: 00005598f2a69ad0 R14: 0000000000000001 R15: 00005598f2a=
6f690
[   10.922742] handlers:
WARNING! Modules path isn't set, but is needed to parse this symbol
[   10.925696] amd_gpio_irq_handler pinctrl_amd
[   10.928757] Disabling IRQ #7
[   11.000127] r8169 0000:0a:00.0 enp10s0: renamed from eth0
[   11.040131] input: HD-Audio Generic HDMI/DP,pcm=3D3 as /devices/pci0000:=
00/0000:00:08.1/0000:0c:00.1/sound/card0/input10
[   11.062301] snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC671: li=
ne_outs=3D1 (0x14/0x0/0x0/0x0/0x0) type:line
[   11.062314] snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=3D0 (0x0/=
0x0/0x0/0x0/0x0)
[   11.062321] snd_hda_codec_realtek hdaudioC1D0:    hp_outs=3D1 (0x21/0x0/=
0x0/0x0/0x0)
[   11.062327] snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=3D0x0
[   11.062331] snd_hda_codec_realtek hdaudioC1D0:    inputs:
[   11.062335] snd_hda_codec_realtek hdaudioC1D0:      Mic=3D0x19
[   11.062340] snd_hda_codec_realtek hdaudioC1D0:      Line=3D0x1b
[   11.100251] input: HD-Audio Generic Mic as /devices/pci0000:00/0000:00:0=
8.1/0000:0c:00.6/sound/card1/input12
[   11.136401] input: HD-Audio Generic Line as /devices/pci0000:00/0000:00:=
08.1/0000:0c:00.6/sound/card1/input13
[   11.137883] input: HD-Audio Generic Line Out as /devices/pci0000:00/0000=
:00:08.1/0000:0c:00.6/sound/card1/input14
[   11.138953] input: HD-Audio Generic Front Headphone as /devices/pci0000:=
00/0000:00:08.1/0000:0c:00.6/sound/card1/input15
[   11.176742] logitech-djreceiver 0003:046D:C534.0001: hidraw0: USB HID v1=
=2E11 Keyboard [Logitech USB Receiver] on usb-0000:01:00.0-11/input0
[   11.227161] Generic FE-GE Realtek PHY r8169-a00:00: attached PHY driver =
(mii_bus:phy_addr=3Dr8169-a00:00, irq=3DMAC)
[   11.237250] kvm: Nested Virtualization enabled
[   11.237675] SVM: kvm: Nested Paging enabled
[   11.237678] SVM: Virtual VMLOAD VMSAVE supported
[   11.237680] SVM: Virtual GIF supported
[   11.254272] rtw_8821ce 0000:09:00.0: enabling device (0100 -> 0103)
[   11.255242] rtw_8821ce 0000:09:00.0: Firmware version 24.8.0, H2C versio=
n 12
[   11.259785] MCE: In-kernel MCE decoding enabled.
[   11.363583] intel_rapl_common: Found RAPL domain package
[   11.363589] intel_rapl_common: Found RAPL domain core
[   11.410765] logitech-djreceiver 0003:046D:C534.0002: hiddev96,hidraw1: U=
SB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:01:00.0-11/input1
[   11.420576] r8169 0000:0a:00.0 enp10s0: Link is Down
[   11.466717] input: HP WMI hotkeys as /devices/virtual/input/input11
[   11.469832] logitech-djreceiver 0003:046D:C534.0002: device of type eQUA=
D nano Lite (0x0a) connected on slot 1
[   11.471818] logitech-djreceiver 0003:046D:C534.0002: device of type eQUA=
D nano Lite (0x0a) connected on slot 2
[   11.472590] input: Logitech Wireless Keyboard PID:4075 Keyboard as /devi=
ces/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.=
0002/0003:046D:4075.0003/input/input16
[   11.508438] hid-generic 0003:046D:4075.0003: input,hidraw2: USB HID v1.1=
1 Keyboard [Logitech Wireless Keyboard PID:4075] on usb-0000:01:00.0-11/inp=
ut1:1
[   11.516054] input: Logitech Wireless Mouse PID:4054 Mouse as /devices/pc=
i0000:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0=
003:046D:4054.0004/input/input21
[   11.517269] hid-generic 0003:046D:4054.0004: input,hidraw3: USB HID v1.1=
1 Mouse [Logitech Wireless Mouse PID:4054] on usb-0000:01:00.0-11/input1:2
[   11.562528] mousedev: PS/2 mouse device common for all mice
[   11.564389] [drm] amdgpu kernel modesetting enabled.
[   11.589805] Virtual CRAT table created for CPU
[   11.590262] amdgpu: Topology: Add CPU node
[   11.591010] checking generic (d0000000 300000) vs hw (d0000000 10000000)
[   11.591018] fb0: switching to amdgpudrmfb from EFI VGA
[   11.592584] Console: switching to colour dummy device 80x25
[   11.592857] amdgpu 0000:0c:00.0: vgaarb: deactivate vga console
[   11.594681] amdgpu 0000:0c:00.0: enabling device (0106 -> 0107)
[   11.601781] [drm] initializing kernel modesetting (RENOIR 0x1002:0x1636 =
0x103C:0x87D6 0xCA).
[   11.601801] amdgpu 0000:0c:00.0: amdgpu: Trusted Memory Zone (TMZ) featu=
re disabled as experimental (default)
[   11.601948] [drm] register mmio base: 0xFCA00000
[   11.601955] [drm] register mmio size: 524288
[   11.601959] [drm] PCIE atomic ops is not supported
[   11.602930] [drm] add ip block number 0 <soc15_common>
[   11.602939] [drm] add ip block number 1 <gmc_v9_0>
[   11.602941] [drm] add ip block number 2 <vega10_ih>
[   11.602944] [drm] add ip block number 3 <psp>
[   11.602946] [drm] add ip block number 4 <smu>
[   11.602949] [drm] add ip block number 5 <gfx_v9_0>
[   11.602951] [drm] add ip block number 6 <sdma_v4_0>
[   11.602954] [drm] add ip block number 7 <dm>
[   11.602956] [drm] add ip block number 8 <vcn_v2_0>
[   11.602959] [drm] add ip block number 9 <jpeg_v2_0>
[   11.603002] amdgpu 0000:0c:00.0: amdgpu: Fetched VBIOS from VFCT
[   11.603051] amdgpu: ATOM BIOS: 113-RENOIR-026
[   11.605135] [drm] VCN decode is enabled in VM mode
[   11.605141] [drm] VCN encode is enabled in VM mode
[   11.605144] [drm] JPEG decode is enabled in VM mode
[   11.606408] [drm] vm size is 262144 GB, 4 levels, block size is 9-bit, f=
ragment size is 9-bit
[   11.606531] amdgpu 0000:0c:00.0: amdgpu: VRAM: 512M 0x000000F400000000 -=
 0x000000F41FFFFFFF (512M used)
[   11.606539] amdgpu 0000:0c:00.0: amdgpu: GART: 1024M 0x0000000000000000 =
- 0x000000003FFFFFFF
[   11.606545] amdgpu 0000:0c:00.0: amdgpu: AGP: 267419648M 0x000000F800000=
000 - 0x0000FFFFFFFFFFFF
[   11.606585] [drm] Detected VRAM RAM=3D512M, BAR=3D512M
[   11.606588] [drm] RAM width 128bits DDR4
[   11.607685] [TTM] Zone  kernel: Available graphics memory: 14040156 KiB
[   11.607693] [TTM] Zone   dma32: Available graphics memory: 2097152 KiB
[   11.630603] [drm] amdgpu: 512M of VRAM memory ready
[   11.630690] [drm] amdgpu: 3072M of GTT memory ready.
[   11.630759] ------------[ cut here ]------------
[   11.630762] amdgpu 0000:0c:00.0: Buffer overflow detected. Allocation si=
ze: 3005. Mapping size: 4096.
[   11.630776] WARNING: CPU: 2 PID: 314 at kernel/dma/swiotlb.c:380 swiotlb=
_bounce (kernel/dma/swiotlb.c:380)=20
[   11.630787] Modules linked in: joydev fjes(-) mousedev intel_rapl_msr in=
tel_rapl_common amdgpu(+) edac_mce_amd rtw88_8821ce rtw88_8821c rtw88_pci k=
vm_amd rtw88_core kvm snd_hda_codec_realtek snd_hda_codec_generic hp_wmi(+)=
 ledtrig_audio hid_logitech_dj snd_hda_codec_hdmi wmi_bmof sparse_keymap ir=
qbypass snd_hda_intel mac80211 snd_intel_dspcfg crct10dif_pclmul crc32_pclm=
ul snd_intel_sdw_acpi vfat fat ghash_clmulni_intel snd_hda_codec gpu_sched =
i2c_algo_bit aesni_intel drm_ttm_helper ttm crypto_simd r8169 snd_hda_core =
cryptd drm_kms_helper rapl realtek snd_hwdep cfg80211 mdio_devres pcspkr sn=
d_pcm k10temp cec snd_timer libphy sp5100_tco libarc4 tpm_crb snd syscopyar=
ea i2c_piix4 ccp sysfillrect soundcore sysimgblt fb_sys_fops usbhid tpm_tis=
 tpm_tis_core wmi video tpm gpio_amdpt pinctrl_amd rng_core gpio_generic ma=
c_hid acpi_tad acpi_cpufreq btusb btrtl btbcm btintel bluetooth ecdh_generi=
c rfkill ecc crc16 pkcs8_key_parser drm fuse agpgart bpf_preload ip_tables =
x_tables xfs libcrc32c
[   11.630983]  crc32c_generic crc32c_intel xhci_pci xhci_pci_renesas
[   11.630996] CPU: 2 PID: 314 Comm: systemd-udevd Tainted: G    B         =
    5.12.0-rc3-debug-00033-g167e3e00e2be #1
[   11.631003] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[   11.631007] RIP: 0010:swiotlb_bounce (kernel/dma/swiotlb.c:380)=20
[ 11.631014] Code: ef e8 a9 df 28 00 4c 8b 6d 00 48 89 ef e8 4d 23 8c 00 4d=
 89 f0 48 89 d9 4c 89 ea 48 89 c6 48 c7 c7 a0 ed e8 ae e8 3d 57 e7 00 <0f> =
0b 48 c7 c7 e0 89 5b af 49 89 de e8 74 df 28 00 48 8b 05 dd 41
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	ef                   	out    %eax,(%dx)
   1:	e8 a9 df 28 00       	call   0x28dfaf
   6:	4c 8b 6d 00          	mov    0x0(%rbp),%r13
   a:	48 89 ef             	mov    %rbp,%rdi
   d:	e8 4d 23 8c 00       	call   0x8c235f
  12:	4d 89 f0             	mov    %r14,%r8
  15:	48 89 d9             	mov    %rbx,%rcx
  18:	4c 89 ea             	mov    %r13,%rdx
  1b:	48 89 c6             	mov    %rax,%rsi
  1e:	48 c7 c7 a0 ed e8 ae 	mov    $0xffffffffaee8eda0,%rdi
  25:	e8 3d 57 e7 00       	call   0xe75767
  2a:*	0f 0b                	ud2    		<-- trapping instruction
  2c:	48 c7 c7 e0 89 5b af 	mov    $0xffffffffaf5b89e0,%rdi
  33:	49 89 de             	mov    %rbx,%r14
  36:	e8 74 df 28 00       	call   0x28dfaf
  3b:	48                   	rex.W
  3c:	8b                   	.byte 0x8b
  3d:	05                   	.byte 0x5
  3e:	dd                   	.byte 0xdd
  3f:	41                   	rex.B

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	0f 0b                	ud2   =20
   2:	48 c7 c7 e0 89 5b af 	mov    $0xffffffffaf5b89e0,%rdi
   9:	49 89 de             	mov    %rbx,%r14
   c:	e8 74 df 28 00       	call   0x28df85
  11:	48                   	rex.W
  12:	8b                   	.byte 0x8b
  13:	05                   	.byte 0x5
  14:	dd                   	.byte 0xdd
  15:	41                   	rex.B
[   11.631020] RSP: 0018:ffffc9000190f138 EFLAGS: 00010286
[   11.631026] RAX: 0000000000000000 RBX: 0000000000000bbd RCX: 00000000000=
00000
[   11.631030] RDX: 0000000000000027 RSI: 0000000000000004 RDI: fffff520003=
21e19
[   11.631034] RBP: ffff8881050190c8 R08: ffffffffadacdcae R09: ffff8887c32=
a06eb
[   11.631038] R10: ffffed10f86540dd R11: 0000000000000001 R12: 000000000a2=
0d443
[   11.631042] R13: ffff888105081c90 R14: 0000000000001000 R15: 00000000000=
00002
[   11.631046] FS:  00007fbdc0f1ca40(0000) GS:ffff8887c3280000(0000) knlGS:=
0000000000000000
[   11.631051] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.631055] CR2: 00007fd6d40117f8 CR3: 000000013da9c000 CR4: 00000000003=
50ee0
[   11.631060] Call Trace:
[   11.631065] swiotlb_tbl_map_single (kernel/dma/swiotlb.c:562)=20
[   11.631074] swiotlb_map (kernel/dma/swiotlb.c:672)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.631080] ? drm_mm_init+0x126/0x140 drm
[   11.631206] ? swiotlb_sync_single_for_cpu (kernel/dma/swiotlb.c:665)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.631213] ? ttm_range_man_init+0xdd/0x100 ttm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.631236] ? amdgpu_ttm_init.cold+0x153/0x16f amdgpu
[   11.632193] dma_map_page_attrs (kernel/dma/direct.h:91 kernel/dma/mappin=
g.c:156)=20
[   11.632200] ? dmam_free_coherent (kernel/dma/mapping.c:145)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.632207] amdgpu_gart_init+0x77/0xf0 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.632909] gmc_v9_0_sw_init+0x910/0x980 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.633492] ? gmc_v9_0_late_init+0xe0/0xe0 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.634128] ? __drmm_add_action+0xf0/0x140 drm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.634214] ? drm_mode_config_cleanup+0x480/0x480 drm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.634297] ? drm_mode_config_cleanup+0x480/0x480 drm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.634381] amdgpu_device_init.cold+0x1483/0x2400 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.635013] ? amdgpu_device_cache_pci_state+0x90/0x90 amdgpu
[   11.635601] ? pci_find_saved_ext_cap (drivers/pci/pci.c:1797)=20
[   11.635607] ? pci_bus_read_config_byte (drivers/pci/access.c:64)=20
[   11.635611] ? __list_add_valid (lib/list_debug.c:26)=20
[   11.635616] ? kasan_unpoison (mm/kasan/shadow.c:102 mm/kasan/shadow.c:13=
6 mm/kasan/shadow.c:109)=20
[   11.635621] ? pci_enable_device_flags (drivers/pci/pci.c:1900)=20
[   11.635625] ? pci_enable_bridge (drivers/pci/pci.c:1868)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.635630] amdgpu_driver_load_kms+0xb1/0x3f0 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.636214] amdgpu_pci_probe+0x172/0x200 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.636796] ? amdgpu_pci_remove+0x80/0x80 amdgpu
[   11.637510] local_pci_probe (drivers/pci/pci-driver.c:309)=20
[   11.637517] pci_device_probe (drivers/pci/pci-driver.c:366 drivers/pci/p=
ci-driver.c:391 drivers/pci/pci-driver.c:434)=20
[   11.637522] ? pci_device_remove (drivers/pci/pci-driver.c:419)=20
[   11.637527] ? kernfs_put (./arch/x86/include/asm/atomic.h:123 (discrimin=
ator 1) ./include/asm-generic/atomic-instrumented.h:749 (discriminator 1) f=
s/kernfs/dir.c:511 (discriminator 1))=20
[   11.637531] ? sysfs_do_create_link_sd (fs/sysfs/symlink.c:48)=20
[   11.637536] really_probe (drivers/base/dd.c:554)=20
[   11.637541] driver_probe_device (drivers/base/dd.c:740)=20
[   11.637545] device_driver_attach (drivers/base/dd.c:1015)=20
[   11.637549] ? device_driver_attach (drivers/base/dd.c:1047)=20
[   11.637553] __driver_attach (drivers/base/dd.c:1094)=20
[   11.637557] ? device_driver_attach (drivers/base/dd.c:1047)=20
[   11.637560] bus_for_each_dev (drivers/base/bus.c:305)=20
[   11.637565] ? subsys_dev_iter_exit (drivers/base/bus.c:294)=20
[   11.637569] ? __list_add_valid (lib/list_debug.c:26)=20
[   11.637574] bus_add_driver (drivers/base/bus.c:623)=20
[   11.637580] driver_register (drivers/base/driver.c:171)=20
[   11.637584]  ? 0xffffffffc1588000
[   11.637588] do_one_initcall (init/main.c:1226)=20
[   11.637593] ? perf_trace_initcall_level (init/main.c:1217)=20
[   11.637597] ? kfree (mm/slub.c:3161 mm/slub.c:4213)=20
[   11.637602] ? kasan_set_track (mm/kasan/common.c:46)=20
[   11.637607] ? kasan_unpoison (mm/kasan/shadow.c:102 mm/kasan/shadow.c:13=
6 mm/kasan/shadow.c:109)=20
[   11.637611] ? kasan_unpoison (mm/kasan/shadow.c:102 mm/kasan/shadow.c:13=
6 mm/kasan/shadow.c:109)=20
[   11.637615] do_init_module (kernel/module.c:3655)=20
[   11.637622] load_module (kernel/module.c:4050)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.637626] ? xfs_file_buffered_read+0x82/0x130 xfs
[   11.637883] ? module_frob_arch_sections+0x20/0x20=20
[   11.637888] ? kernel_read (fs/read_write.c:469)=20
[   11.637893] ? kernel_read_file (./arch/x86/include/asm/atomic.h:95 ./inc=
lude/asm-generic/atomic-instrumented.h:241 ./include/linux/fs.h:2940 fs/ker=
nel_read_file.c:122)=20
[   11.637901] ? __do_sys_finit_module (kernel/module.c:4140)=20
[   11.637905] __do_sys_finit_module (kernel/module.c:4140)=20
[   11.637909] ? __ia32_sys_init_module (kernel/module.c:4118)=20
[   11.637913] ? get_nth_filter.part.0 (kernel/seccomp.c:1157)=20
[   11.637918] ? randomize_stack_top (mm/util.c:509)=20
[   11.637923] ? __ia32_compat_sys_newlstat (fs/stat.c:382)=20
[   11.637929] ? __audit_syscall_entry (kernel/auditsc.c:1689)=20
[   11.637933] ? ktime_get_coarse_real_ts64 (kernel/time/timekeeping.c:2230=
 (discriminator 3))=20
[   11.637938] do_syscall_64 (arch/x86/entry/common.c:46)=20
[   11.637944] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:11=
2)=20
[   11.637949] RIP: 0033:0x7fbdc184c18d
[ 11.637953] Code: b4 0c 00 0f 05 eb a9 66 0f 1f 44 00 00 f3 0f 1e fa 48 89=
 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> =
3d 01 f0 ff ff 73 01 c3 48 8b 0d b3 6c 0c 00 f7 d8 64 89 01 48
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	b4 0c                	mov    $0xc,%ah
   2:	00 0f                	add    %cl,(%rdi)
   4:	05 eb a9 66 0f       	add    $0xf66a9eb,%eax
   9:	1f                   	(bad) =20
   a:	44 00 00             	add    %r8b,(%rax)
   d:	f3 0f 1e fa          	endbr64=20
  11:	48 89 f8             	mov    %rdi,%rax
  14:	48 89 f7             	mov    %rsi,%rdi
  17:	48 89 d6             	mov    %rdx,%rsi
  1a:	48 89 ca             	mov    %rcx,%rdx
  1d:	4d 89 c2             	mov    %r8,%r10
  20:	4d 89 c8             	mov    %r9,%r8
  23:	4c 8b 4c 24 08       	mov    0x8(%rsp),%r9
  28:	0f 05                	syscall=20
  2a:*	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax		<-- trapping =
instruction
  30:	73 01                	jae    0x33
  32:	c3                   	ret   =20
  33:	48 8b 0d b3 6c 0c 00 	mov    0xc6cb3(%rip),%rcx        # 0xc6ced
  3a:	f7 d8                	neg    %eax
  3c:	64 89 01             	mov    %eax,%fs:(%rcx)
  3f:	48                   	rex.W

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax
   6:	73 01                	jae    0x9
   8:	c3                   	ret   =20
   9:	48 8b 0d b3 6c 0c 00 	mov    0xc6cb3(%rip),%rcx        # 0xc6cc3
  10:	f7 d8                	neg    %eax
  12:	64 89 01             	mov    %eax,%fs:(%rcx)
  15:	48                   	rex.W
[   11.637957] RSP: 002b:00007ffeae8de308 EFLAGS: 00000246 ORIG_RAX: 000000=
0000000139
[   11.637962] RAX: ffffffffffffffda RBX: 000055db08823060 RCX: 00007fbdc18=
4c18d
[   11.637965] RDX: 0000000000000000 RSI: 00007fbdc19a9a9d RDI: 00000000000=
00018
[   11.637970] RBP: 0000000000020000 R08: 0000000000000000 R09: 00007fbdc1b=
dc5ea
[   11.637973] R10: 0000000000000018 R11: 0000000000000246 R12: 00007fbdc19=
a9a9d
[   11.637975] R13: 0000000000000000 R14: 000055db088292c0 R15: 000055db088=
23060
[   11.637980] ---[ end trace bee6f34729e28f2c ]---
[   11.637985] BUG: unable to handle page fault for address: 000008714b9094=
43
[   11.637995] #PF: supervisor write access in kernel mode
[   11.638001] #PF: error_code(0x0002) - not-present page
[   11.638007] PGD 0 P4D 0
[   11.638014] Oops: 0002 [#1] PREEMPT SMP KASAN NOPTI
[   11.638021] CPU: 2 PID: 314 Comm: systemd-udevd Tainted: G    B   W     =
    5.12.0-rc3-debug-00033-g167e3e00e2be #1
[   11.638031] Hardware name: HP HP Desktop M01-F1xxx/87D6, BIOS F.12 12/17=
/2020
[   11.638038] RIP: 0010:__memcpy (arch/x86/lib/memcpy_64.S:39)=20
[ 11.638044] Code: 74 e0 8b 05 38 4e 67 01 85 c0 75 d6 e8 47 6f 6d ff b8 01=
 00 00 00 c3 cc 0f 1f 44 00 00 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> =
48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	74 e0                	je     0xffffffffffffffe2
   2:	8b 05 38 4e 67 01    	mov    0x1674e38(%rip),%eax        # 0x1674e40
   8:	85 c0                	test   %eax,%eax
   a:	75 d6                	jne    0xffffffffffffffe2
   c:	e8 47 6f 6d ff       	call   0xffffffffff6d6f58
  11:	b8 01 00 00 00       	mov    $0x1,%eax
  16:	c3                   	ret   =20
  17:	cc                   	int3  =20
  18:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
  1d:	48 89 f8             	mov    %rdi,%rax
  20:	48 89 d1             	mov    %rdx,%rcx
  23:	48 c1 e9 03          	shr    $0x3,%rcx
  27:	83 e2 07             	and    $0x7,%edx
  2a:*	f3 48 a5             	rep movsq %ds:(%rsi),%es:(%rdi)		<-- trapping =
instruction
  2d:	89 d1                	mov    %edx,%ecx
  2f:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)
  31:	c3                   	ret   =20
  32:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
  38:	48 89 f8             	mov    %rdi,%rax
  3b:	48 89 d1             	mov    %rdx,%rcx
  3e:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	f3 48 a5             	rep movsq %ds:(%rsi),%es:(%rdi)
   3:	89 d1                	mov    %edx,%ecx
   5:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)
   7:	c3                   	ret   =20
   8:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
   e:	48 89 f8             	mov    %rdi,%rax
  11:	48 89 d1             	mov    %rdx,%rcx
  14:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)
[   11.638058] RSP: 0018:ffffc9000190f188 EFLAGS: 00010206
[   11.638065] RAX: 000008714b909443 RBX: 000000000a20d000 RCX: 00000000000=
00177
[   11.638071] RDX: 0000000000000005 RSI: ffff88800a20d443 RDI: 000008714b9=
09443
[   11.638078] RBP: 0000000000000002 R08: 0000000000000001 R09: 000008714b9=
0a000
[   11.638085] R10: ffffed1001441bff R11: 0000000000000001 R12: 00000000000=
00002
[   11.638091] R13: ffff8887c008f000 R14: 0000000000000048 R15: 00000000000=
00002
[   11.638098] FS:  00007fbdc0f1ca40(0000) GS:ffff8887c3280000(0000) knlGS:=
0000000000000000
[   11.638106] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.638112] CR2: 000008714b909443 CR3: 000000013da9c000 CR4: 00000000003=
50ee0
[   11.638119] Call Trace:
[   11.638123] swiotlb_tbl_map_single (kernel/dma/swiotlb.c:562)=20
[   11.638133] swiotlb_map (kernel/dma/swiotlb.c:672)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.638141] ? drm_mm_init+0x126/0x140 drm
[   11.638225] ? swiotlb_sync_single_for_cpu (kernel/dma/swiotlb.c:665)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.638232] ? ttm_range_man_init+0xdd/0x100 ttm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.638251] ? amdgpu_ttm_init.cold+0x153/0x16f amdgpu
[   11.638881] dma_map_page_attrs (kernel/dma/direct.h:91 kernel/dma/mappin=
g.c:156)=20
[   11.638888] ? dmam_free_coherent (kernel/dma/mapping.c:145)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.638896] amdgpu_gart_init+0x77/0xf0 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.639489] gmc_v9_0_sw_init+0x910/0x980 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.640090] ? gmc_v9_0_late_init+0xe0/0xe0 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.640860] ? __drmm_add_action+0xf0/0x140 drm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.641004] ? drm_mode_config_cleanup+0x480/0x480 drm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.641127] ? drm_mode_config_cleanup+0x480/0x480 drm
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.641222] amdgpu_device_init.cold+0x1483/0x2400 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.641849] ? amdgpu_device_cache_pci_state+0x90/0x90 amdgpu
[   11.642456] ? pci_find_saved_ext_cap (drivers/pci/pci.c:1797)=20
[   11.642466] ? pci_bus_read_config_byte (drivers/pci/access.c:64)=20
[   11.642473] ? __list_add_valid (lib/list_debug.c:26)=20
[   11.642481] ? kasan_unpoison (mm/kasan/shadow.c:102 mm/kasan/shadow.c:13=
6 mm/kasan/shadow.c:109)=20
[   11.642490] ? pci_enable_device_flags (drivers/pci/pci.c:1900)=20
[   11.642497] ? pci_enable_bridge (drivers/pci/pci.c:1868)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.642505] amdgpu_driver_load_kms+0xb1/0x3f0 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.643105] amdgpu_pci_probe+0x172/0x200 amdgpu
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.643686] ? amdgpu_pci_remove+0x80/0x80 amdgpu
[   11.644405] local_pci_probe (drivers/pci/pci-driver.c:309)=20
[   11.644415] pci_device_probe (drivers/pci/pci-driver.c:366 drivers/pci/p=
ci-driver.c:391 drivers/pci/pci-driver.c:434)=20
[   11.644422] ? pci_device_remove (drivers/pci/pci-driver.c:419)=20
[   11.644430] ? kernfs_put (./arch/x86/include/asm/atomic.h:123 (discrimin=
ator 1) ./include/asm-generic/atomic-instrumented.h:749 (discriminator 1) f=
s/kernfs/dir.c:511 (discriminator 1))=20
[   11.644437] ? sysfs_do_create_link_sd (fs/sysfs/symlink.c:48)=20
[   11.644446] really_probe (drivers/base/dd.c:554)=20
[   11.644453] driver_probe_device (drivers/base/dd.c:740)=20
[   11.644460] device_driver_attach (drivers/base/dd.c:1015)=20
[   11.644467] ? device_driver_attach (drivers/base/dd.c:1047)=20
[   11.644474] __driver_attach (drivers/base/dd.c:1094)=20
[   11.644480] ? device_driver_attach (drivers/base/dd.c:1047)=20
[   11.644487] bus_for_each_dev (drivers/base/bus.c:305)=20
[   11.644494] ? subsys_dev_iter_exit (drivers/base/bus.c:294)=20
[   11.644501] ? __list_add_valid (lib/list_debug.c:26)=20
[   11.644510] bus_add_driver (drivers/base/bus.c:623)=20
[   11.644518] driver_register (drivers/base/driver.c:171)=20
[   11.644525]  ? 0xffffffffc1588000
[   11.644531] do_one_initcall (init/main.c:1226)=20
[   11.644539] ? perf_trace_initcall_level (init/main.c:1217)=20
[   11.644547] ? kfree (mm/slub.c:3161 mm/slub.c:4213)=20
[   11.644554] ? kasan_set_track (mm/kasan/common.c:46)=20
[   11.644561] ? kasan_unpoison (mm/kasan/shadow.c:102 mm/kasan/shadow.c:13=
6 mm/kasan/shadow.c:109)=20
[   11.644568] ? kasan_unpoison (mm/kasan/shadow.c:102 mm/kasan/shadow.c:13=
6 mm/kasan/shadow.c:109)=20
[   11.644576] do_init_module (kernel/module.c:3655)=20
[   11.644585] load_module (kernel/module.c:4050)=20
WARNING! Modules path isn't set, but is needed to parse this symbol
[   11.644592] ? xfs_file_buffered_read+0x82/0x130 xfs
[   11.644852] ? module_frob_arch_sections+0x20/0x20=20
[   11.644860] ? kernel_read (fs/read_write.c:469)=20
[   11.644868] ? kernel_read_file (./arch/x86/include/asm/atomic.h:95 ./inc=
lude/asm-generic/atomic-instrumented.h:241 ./include/linux/fs.h:2940 fs/ker=
nel_read_file.c:122)=20
[   11.644879] ? __do_sys_finit_module (kernel/module.c:4140)=20
[   11.644886] __do_sys_finit_module (kernel/module.c:4140)=20
[   11.644893] ? __ia32_sys_init_module (kernel/module.c:4118)=20
[   11.644900] ? get_nth_filter.part.0 (kernel/seccomp.c:1157)=20
[   11.644909] ? randomize_stack_top (mm/util.c:509)=20
[   11.644918] ? __ia32_compat_sys_newlstat (fs/stat.c:382)=20
[   11.644927] ? __audit_syscall_entry (kernel/auditsc.c:1689)=20
[   11.644934] ? ktime_get_coarse_real_ts64 (kernel/time/timekeeping.c:2230=
 (discriminator 3))=20
[   11.644943] do_syscall_64 (arch/x86/entry/common.c:46)=20
[   11.644951] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:11=
2)=20
[   11.644959] RIP: 0033:0x7fbdc184c18d
[ 11.644965] Code: b4 0c 00 0f 05 eb a9 66 0f 1f 44 00 00 f3 0f 1e fa 48 89=
 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> =
3d 01 f0 ff ff 73 01 c3 48 8b 0d b3 6c 0c 00 f7 d8 64 89 01 48
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	b4 0c                	mov    $0xc,%ah
   2:	00 0f                	add    %cl,(%rdi)
   4:	05 eb a9 66 0f       	add    $0xf66a9eb,%eax
   9:	1f                   	(bad) =20
   a:	44 00 00             	add    %r8b,(%rax)
   d:	f3 0f 1e fa          	endbr64=20
  11:	48 89 f8             	mov    %rdi,%rax
  14:	48 89 f7             	mov    %rsi,%rdi
  17:	48 89 d6             	mov    %rdx,%rsi
  1a:	48 89 ca             	mov    %rcx,%rdx
  1d:	4d 89 c2             	mov    %r8,%r10
  20:	4d 89 c8             	mov    %r9,%r8
  23:	4c 8b 4c 24 08       	mov    0x8(%rsp),%r9
  28:	0f 05                	syscall=20
  2a:*	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax		<-- trapping =
instruction
  30:	73 01                	jae    0x33
  32:	c3                   	ret   =20
  33:	48 8b 0d b3 6c 0c 00 	mov    0xc6cb3(%rip),%rcx        # 0xc6ced
  3a:	f7 d8                	neg    %eax
  3c:	64 89 01             	mov    %eax,%fs:(%rcx)
  3f:	48                   	rex.W

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax
   6:	73 01                	jae    0x9
   8:	c3                   	ret   =20
   9:	48 8b 0d b3 6c 0c 00 	mov    0xc6cb3(%rip),%rcx        # 0xc6cc3
  10:	f7 d8                	neg    %eax
  12:	64 89 01             	mov    %eax,%fs:(%rcx)
  15:	48                   	rex.W
[   11.644979] RSP: 002b:00007ffeae8de308 EFLAGS: 00000246 ORIG_RAX: 000000=
0000000139
[   11.644989] RAX: ffffffffffffffda RBX: 000055db08823060 RCX: 00007fbdc18=
4c18d
[   11.644996] RDX: 0000000000000000 RSI: 00007fbdc19a9a9d RDI: 00000000000=
00018
[   11.645002] RBP: 0000000000020000 R08: 0000000000000000 R09: 00007fbdc1b=
dc5ea
[   11.645009] R10: 0000000000000018 R11: 0000000000000246 R12: 00007fbdc19=
a9a9d
[   11.645015] R13: 0000000000000000 R14: 000055db088292c0 R15: 000055db088=
23060
[   11.645024] Modules linked in: joydev mousedev intel_rapl_msr intel_rapl=
_common amdgpu(+) edac_mce_amd rtw88_8821ce rtw88_8821c rtw88_pci kvm_amd r=
tw88_core kvm snd_hda_codec_realtek snd_hda_codec_generic hp_wmi(+) ledtrig=
_audio hid_logitech_dj snd_hda_codec_hdmi wmi_bmof sparse_keymap irqbypass =
snd_hda_intel mac80211 snd_intel_dspcfg crct10dif_pclmul crc32_pclmul snd_i=
ntel_sdw_acpi vfat fat ghash_clmulni_intel snd_hda_codec gpu_sched i2c_algo=
_bit aesni_intel drm_ttm_helper ttm crypto_simd r8169 snd_hda_core cryptd d=
rm_kms_helper rapl realtek snd_hwdep cfg80211 mdio_devres pcspkr snd_pcm k1=
0temp cec snd_timer libphy sp5100_tco libarc4 tpm_crb snd syscopyarea i2c_p=
iix4 ccp sysfillrect soundcore sysimgblt fb_sys_fops usbhid tpm_tis tpm_tis=
_core wmi video tpm gpio_amdpt pinctrl_amd rng_core gpio_generic mac_hid ac=
pi_tad acpi_cpufreq btusb btrtl btbcm btintel bluetooth ecdh_generic rfkill=
 ecc crc16 pkcs8_key_parser drm fuse agpgart bpf_preload ip_tables x_tables=
 xfs libcrc32c crc32c_generic
[   11.645156]  crc32c_intel xhci_pci xhci_pci_renesas
[   11.645210] CR2: 000008714b909443
[   11.645216] ---[ end trace bee6f34729e28f2d ]---
[   11.645221] RIP: 0010:__memcpy (arch/x86/lib/memcpy_64.S:39)=20
[ 11.645227] Code: 74 e0 8b 05 38 4e 67 01 85 c0 75 d6 e8 47 6f 6d ff b8 01=
 00 00 00 c3 cc 0f 1f 44 00 00 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> =
48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
All code
=3D=3D=3D=3D=3D=3D=3D=3D
   0:	74 e0                	je     0xffffffffffffffe2
   2:	8b 05 38 4e 67 01    	mov    0x1674e38(%rip),%eax        # 0x1674e40
   8:	85 c0                	test   %eax,%eax
   a:	75 d6                	jne    0xffffffffffffffe2
   c:	e8 47 6f 6d ff       	call   0xffffffffff6d6f58
  11:	b8 01 00 00 00       	mov    $0x1,%eax
  16:	c3                   	ret   =20
  17:	cc                   	int3  =20
  18:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
  1d:	48 89 f8             	mov    %rdi,%rax
  20:	48 89 d1             	mov    %rdx,%rcx
  23:	48 c1 e9 03          	shr    $0x3,%rcx
  27:	83 e2 07             	and    $0x7,%edx
  2a:*	f3 48 a5             	rep movsq %ds:(%rsi),%es:(%rdi)		<-- trapping =
instruction
  2d:	89 d1                	mov    %edx,%ecx
  2f:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)
  31:	c3                   	ret   =20
  32:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
  38:	48 89 f8             	mov    %rdi,%rax
  3b:	48 89 d1             	mov    %rdx,%rcx
  3e:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)

Code starting with the faulting instruction
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
   0:	f3 48 a5             	rep movsq %ds:(%rsi),%es:(%rdi)
   3:	89 d1                	mov    %edx,%ecx
   5:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)
   7:	c3                   	ret   =20
   8:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
   e:	48 89 f8             	mov    %rdi,%rax
  11:	48 89 d1             	mov    %rdx,%rcx
  14:	f3 a4                	rep movsb %ds:(%rsi),%es:(%rdi)
[   11.645241] RSP: 0018:ffffc9000190f188 EFLAGS: 00010206
[   11.645247] RAX: 000008714b909443 RBX: 000000000a20d000 RCX: 00000000000=
00177
[   11.645254] RDX: 0000000000000005 RSI: ffff88800a20d443 RDI: 000008714b9=
09443
[   11.645261] RBP: 0000000000000002 R08: 0000000000000001 R09: 000008714b9=
0a000
[   11.645268] R10: ffffed1001441bff R11: 0000000000000001 R12: 00000000000=
00002
[   11.645274] R13: ffff8887c008f000 R14: 0000000000000048 R15: 00000000000=
00002
[   11.645281] FS:  00007fbdc0f1ca40(0000) GS:ffff8887c3280000(0000) knlGS:=
0000000000000000
[   11.645289] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.645295] CR2: 000008714b909443 CR3: 000000013da9c000 CR4: 00000000003=
50ee0
[   11.911417] input: Logitech Wireless Keyboard PID:4075 as /devices/pci00=
00:00/0000:00:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003=
:046D:4075.0003/input/input25
[   11.916555] logitech-hidpp-device 0003:046D:4075.0003: input,hidraw2: US=
B HID v1.11 Keyboard [Logitech Wireless Keyboard PID:4075] on usb-0000:01:0=
0.0-11/input1:1
[   11.999932] input: Logitech Wireless Mouse as /devices/pci0000:00/0000:0=
0:02.1/0000:01:00.0/usb1/1-11/1-11:1.1/0003:046D:C534.0002/0003:046D:4054.0=
004/input/input26
[   12.003578] logitech-hidpp-device 0003:046D:4054.0004: input,hidraw3: US=
B HID v1.11 Mouse [Logitech Wireless Mouse] on usb-0000:01:00.0-11/input1:2
[   12.093114] rtw_8821ce 0000:09:00.0: start vif 74:12:b3:a0:4a:cb on port=
 0
[   14.558903] r8169 0000:0a:00.0 enp10s0: Link is Up - 1Gbps/Full - flow c=
ontrol rx/tx
[   14.558977] IPv6: ADDRCONF(NETDEV_CHANGE): enp10s0: link becomes ready
[   16.594062] kauditd_printk_skb: 32 callbacks suppressed
[   16.594072] audit: type=3D1131 audit(1625508119.391:44): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Dsystemd-rfkill comm=3D"sy=
stemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? terminal=3D? =
res=3Dsuccess'
[   22.787517] audit: type=3D1101 audit(1625508125.584:45): pid=3D431 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:accounting grantors=
=3Dpam_access,pam_unix,pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/bin/=
sshd" hostname=3D192.168.4.54 addr=3D192.168.4.54 terminal=3Dssh res=3Dsucc=
ess'
[   22.795143] audit: type=3D1103 audit(1625508125.591:46): pid=3D431 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:setcred grantors=3D=
pam_shells,pam_faillock,pam_permit,pam_env,pam_faillock acct=3D"nathan" exe=
=3D"/usr/bin/sshd" hostname=3D192.168.4.54 addr=3D192.168.4.54 terminal=3Ds=
sh res=3Dsuccess'
[   22.795888] audit: type=3D1006 audit(1625508125.591:47): pid=3D431 uid=
=3D0 old-auid=3D4294967295 auid=3D1000 tty=3D(none) old-ses=3D4294967295 se=
s=3D1 res=3D1
[   22.796100] audit: type=3D1300 audit(1625508125.591:47): arch=3Dc000003e=
 syscall=3D1 success=3Dyes exit=3D4 a0=3D3 a1=3D7ffe0d54df00 a2=3D4 a3=3D3e=
8 items=3D0 ppid=3D394 pid=3D431 auid=3D1000 uid=3D0 gid=3D0 euid=3D0 suid=
=3D0 fsuid=3D0 egid=3D0 sgid=3D0 fsgid=3D0 tty=3D(none) ses=3D1 comm=3D"ssh=
d" exe=3D"/usr/bin/sshd" key=3D(null)
[   22.800853] audit: type=3D1327 audit(1625508125.591:47): proctitle=3D737=
368643A206E617468616E205B707269765D
[   22.877834] audit: type=3D1130 audit(1625508125.674:48): pid=3D1 uid=3D0=
 auid=3D4294967295 ses=3D4294967295 msg=3D'unit=3Duser-runtime-dir@1000 com=
m=3D"systemd" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? termin=
al=3D? res=3Dsuccess'
[   22.917759] audit: type=3D1101 audit(1625508125.714:49): pid=3D434 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:accounting grantors=
=3Dpam_access,pam_unix,pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/lib/=
systemd/systemd" hostname=3D? addr=3D? terminal=3D? res=3Dsuccess'
[   22.918096] audit: type=3D1103 audit(1625508125.714:50): pid=3D434 uid=
=3D0 auid=3D4294967295 ses=3D4294967295 msg=3D'op=3DPAM:setcred grantors=3D=
? acct=3D"nathan" exe=3D"/usr/lib/systemd/systemd" hostname=3D? addr=3D? te=
rminal=3D? res=3Dfailed'
[   22.918709] audit: type=3D1006 audit(1625508125.714:51): pid=3D434 uid=
=3D0 old-auid=3D4294967295 auid=3D1000 tty=3D(none) old-ses=3D4294967295 se=
s=3D2 res=3D1
[   22.918795] audit: type=3D1300 audit(1625508125.714:51): arch=3Dc000003e=
 syscall=3D1 success=3Dyes exit=3D4 a0=3D9 a1=3D7fff13327970 a2=3D4 a3=3D3e=
8 items=3D0 ppid=3D1 pid=3D434 auid=3D1000 uid=3D0 gid=3D0 euid=3D0 suid=3D=
0 fsuid=3D0 egid=3D0 sgid=3D0 fsgid=3D0 tty=3D(none) ses=3D2 comm=3D"(syste=
md)" exe=3D"/usr/lib/systemd/systemd" key=3D(null)
[   30.400687] kauditd_printk_skb: 11 callbacks suppressed
[   30.400699] audit: type=3D1100 audit(1625508133.194:60): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:authentication grantors=3Dpam_f=
aillock,pam_permit,pam_faillock acct=3D"nathan" exe=3D"/usr/bin/doas" hostn=
ame=3Dhp-4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.405376] audit: type=3D1101 audit(1625508133.201:61): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:accounting grantors=3Dpam_unix,=
pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/bin/doas" hostname=3Dhp-430=
0G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.406114] audit: type=3D1110 audit(1625508133.201:62): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:setcred grantors=3Dpam_faillock=
,pam_permit,pam_faillock acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-=
4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.407411] audit: type=3D1105 audit(1625508133.204:63): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:session_open grantors=3Dpam_lim=
its,pam_unix,pam_permit acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-4=
300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.473080] audit: type=3D1106 audit(1625508133.268:64): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:session_close grantors=3Dpam_li=
mits,pam_unix,pam_permit acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-=
4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   30.474043] audit: type=3D1104 audit(1625508133.271:65): pid=3D601 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:setcred grantors=3Dpam_faillock=
,pam_permit,pam_faillock acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-=
4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   32.679545] audit: type=3D1101 audit(1625508135.474:66): pid=3D646 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:accounting grantors=3Dpam_unix,=
pam_permit,pam_time acct=3D"nathan" exe=3D"/usr/bin/doas" hostname=3Dhp-430=
0G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   32.680133] audit: type=3D1110 audit(1625508135.474:67): pid=3D646 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:setcred grantors=3Dpam_faillock=
,pam_permit,pam_env,pam_faillock acct=3D"root" exe=3D"/usr/bin/doas" hostna=
me=3Dhp-4300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'
[   32.681346] audit: type=3D1105 audit(1625508135.478:68): pid=3D646 uid=
=3D1000 auid=3D1000 ses=3D1 msg=3D'op=3DPAM:session_open grantors=3Dpam_lim=
its,pam_unix,pam_permit acct=3D"root" exe=3D"/usr/bin/doas" hostname=3Dhp-4=
300G addr=3D? terminal=3Dpts/0 res=3Dsuccess'

--/SG/dXypw7vuCiM3--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 18:30:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 18:30:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150604.278438 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0TME-0005C5-Pf; Mon, 05 Jul 2021 18:30:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150604.278438; Mon, 05 Jul 2021 18:30:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0TME-0005By-MP; Mon, 05 Jul 2021 18:30:14 +0000
Received: by outflank-mailman (input) for mailman id 150604;
 Mon, 05 Jul 2021 18:30:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0TMD-0005Bs-Qd
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 18:30:13 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6379040d-04ec-4ddc-9679-cbda562abf9b;
 Mon, 05 Jul 2021 18:30:12 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6379040d-04ec-4ddc-9679-cbda562abf9b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625509812;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=SNRljlSzz5o0A/b4RbsPTwoYjOO1FVIs86J6blI1ZM4=;
  b=KX2EtjpqPp9ewxmS6OZIbjs8j+ELvn+vifTfXNTa/q1xiALqOght5jPr
   U+9Ek5XSbkGLy+jtgY+njx5gzxM/+u0qoKosY1jZqvEWuC/HWwoL2vbEP
   DeJ3wDIV8P5LKX2pGSYnNoLGaml5vJHkR+R2/H+Npso66n+ucJS8LpPRa
   w=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: iuxNDfQKVXqHBa+css/9udJYtyeGX/ifvc7FYVlr6CHl+lhBJGjElsZxMAgvHusV5VU8rNv4jI
 6rxsCs7XeF+8wSL/9PfIRhryrmG/OX+TIGLaNhFokSRXkw0BwX+X5Am3FeVJjP0JrFML+wTPR4
 DJjJSUDH4LQHKjv9NOzht7Y3PuFVsoFeemrstQ/JN/6/dWjS73wpQI4jfxG3FZmYuH/SUcrdrA
 Y0QE2lw9xnPEmIx5AGyQmXb7qoDVcGlbAqnHdva0gxyg6JLGHEssytysC7natigPUm9txW+9Ge
 aXE=
X-SBRS: 5.1
X-MesageID: 47588171
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:EfuAv6kh6NKp6BCXlY028cJcVWvpDfLW3DAbv31ZSRFFG/Fw9/
 rCoB3U73/JYVcqKRUdcLW7UpVoLkmyyXcY2+cs1NSZLWzbUQmTXeJfBOLZqlWNJ8SXzIVgPM
 xbAspD4bPLbGSTjazBkXSF+9RL+qj6zEh/792usEuETmtRGt9dBx8SMHf9LqXvLjM2fqbQEv
 Cnl6x6jgvlQ1s7ROKhCEIIWuDSzue77q4PMXY9dmcaABDlt0LR1ILH
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47588171"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ap79JJc/3sL2XM7jk/lsuHXvOZfuE/OqrAVDcglox4RXTsLRCA0ZeOkeem0OVQuxn19irgA8EFESKaQ2oMhJT/ZvmFKF6NAgvNeHRStdfX1wYSHaU99uF/c7oJkUNf9gaI1wlnoaVMZGNhptZeGLh1jhSd+5FW4C2CWNjLFuM4dv0zdcDkP1ONKpY5guMPD2SS1s+ZkTaRY4KBHt6KoLCb/Wtm8Yn8NiEMQG5YhH0Yw0ORvSvBYGx3posaAra005oQzGAbr+qPoCPc/EuapEphRpf45oShMM7XbRuPGXutheq0rZZOVhj9kJPwkZ4oTjEVkb1STSEN7F2YFKdO/W3A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=SNRljlSzz5o0A/b4RbsPTwoYjOO1FVIs86J6blI1ZM4=;
 b=biTbCgIbnBMkfNKWvoKB+8GjBXDqv57mC8oH4EmIxxsmCCk0uszWqdNeis58LvK42HgE76M5mZe1RhXtEerr41eHBbg4RDjUKrwYyuBJxa37gONyFcjURvBh2/sjRBVdi0MIsWsvhUnC+jPAvfmJDX6OUFVVCzAA3SR5nNgDsJD65TQJQai7R1ifSAJI6mfDYmRZMQ6w/DTILD8/zEe6diOL+EnKs5ndPTUG29VOnJa7gvMjCwSRFSgKgcWDKy79Mtb7aFXUsuwOf7m+EmDSVdYoSmjv0+jX1ANkVW5gwO6h6I8UncuUodkg8gWBQ4+P3+flf39c3npgjWJqR1UxQA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=SNRljlSzz5o0A/b4RbsPTwoYjOO1FVIs86J6blI1ZM4=;
 b=lqmZzIKSKD9PAUaO7pLUGO4OSrd2jb6MOguP0b8OpbvGq69wNrkPZ9gOONqn1ijP6v9qMsAt2J9pwCzciqI0FWRld2zk3p3DFVhK4oYTJUXM5DkHHx9I06E5l4nNkXrWfqaEBKAUGQdSofRRGfc7NuGe7BXfJ1s6OCEuXGDYPUQ=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>
References: <20210705165633.26077-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v3] tools: unify page type checking in save/restore
Message-ID: <c09678ec-a9e8-1d80-e254-96a41b4b1c98@citrix.com>
Date: Mon, 5 Jul 2021 19:29:58 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705165633.26077-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0036.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:151::23) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c7cb2c07-22d9-482c-35cc-08d93fe2e88d
X-MS-TrafficTypeDiagnostic: BY5PR03MB5249:
X-Microsoft-Antispam-PRVS: <BY5PR03MB52496EF23069E9502A979748BA1C9@BY5PR03MB5249.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1417;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Ns/zUaSC5dAvHXkGY1qgJmztFcgQLAJvoeuwKN8cjNwSW/zCzMpzl/XgxqY4PmSBL9BXkHYl3pBzfHTK1aswcoUruX9gQWYBJ/Zl+Q4Cpf5Vr0TN5oLUgPWEx+5FRXOTOJby3g5bLxS78N8HL9gfXlBQG+nh/ktL1UytIysdFmFKINFShRitYYJGvM4DcbhISI5yLnAhtpN2J0WhpKNCuo7OpTNOaIcrEuzWPmYIo4XdgL0qC5xtZbaSwwig9pObeG5TlUAZUf3QoC4+302F0K01sps5ANVyx9U8UxhP6R1jVktS9qdB0grYPjBUW3P3lkZPckaZLvg1oVrAVfEKFUg47OmD2Si2lrkjzmoEIDliz0/lo8tQHXlUiil9nSYXhVfEU3EDxOYCpm5x7s2uXNfY00V+qtnwuzHVxF3Uz44dA+XOcXqXdvtdO+10WRBTnneqvxo6wsjIe80S/NgEhi5kyxTr+1fwvLZHalX3GnsQ8RS1k5DiEvkw1i+jgFYqJmSP9Jgg1rQhTWe3b8MYOXFQiSCzHuDg0COefHDtfJVjx0lOkX9X+jePqQLCL9LhXuJbZwI2EkCAYXr++hjJJ0bNafyPCsBomkI8DKJqgHVe5C+Ykdw/fN9neu/ZYByfaL4lK5ItbmCSVKHsNaRC4OhvGPy/lG94kUD0DGWFZMh0OrnibyDmrS7AWfJr8Gj9kLvBSSM567J6opn1mn1CB66l4xPTOqBdyTIRGesBtRI=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(39860400002)(346002)(396003)(376002)(8936002)(83380400001)(8676002)(956004)(2616005)(6486002)(86362001)(31696002)(5660300002)(38100700002)(316002)(2906002)(54906003)(16576012)(53546011)(66556008)(6666004)(26005)(4326008)(478600001)(66946007)(186003)(66476007)(31686004)(36756003)(16526019)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?kZbiwE7/j1MkLYJW+EJkjADhjyKOUS3vbZSuEcc?=
X-MS-Exchange-CrossTenant-Network-Message-Id: c7cb2c07-22d9-482c-35cc-08d93fe2e88d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 18:30:04.8012
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: D58jbSRQfSkM6r3g9LSA+AXBq+rFiGNNyKn5Qz92MExNqNekTj6MFTsVCPkxEtZYjNjCzl3Eh+8eTq30GXlO1CAmuu7wAaYdEPp1ocnuQ1E=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5249
X-OriginatorOrg: citrix.com

On 05/07/2021 17:56, Olaf Hering wrote:
> Users of xc_get_pfn_type_batch may want to sanity check the data
> returned by Xen. Add helpers for this purpose:
>
> is_known_page_type verifies the type returned by Xen on the saving
> side, or the incoming type for a page on the restoring side, is known
> by the save/restore code.
>
> page_type_to_populate decides if a page with the given known type
> needs to be populated on the restoring side.
>
> page_type_has_stream_data decides if a page with the given known type
> needs to be send, or if the stream on the restoring side contains a
> data page.
>
> While touching the code, simplify the logic check in populate_pfns.
>
> No change in behavior intended.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
>
> v03:
> - fold all three helpers into a single patch

Sorry - I didn't mean fold all 4 patches together.=C2=A0 I meant fold
specifically the first two patches together, so the new helper and its
users are in the same patch, as you'd done for the final two patches.

I've still them unmerged in my branch.=C2=A0 I'll fold in a few tweaks from
here and commit them as 3 patches.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 18:54:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 18:54:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150610.278448 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tjo-0007VZ-NX; Mon, 05 Jul 2021 18:54:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150610.278448; Mon, 05 Jul 2021 18:54:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tjo-0007VS-KW; Mon, 05 Jul 2021 18:54:36 +0000
Received: by outflank-mailman (input) for mailman id 150610;
 Mon, 05 Jul 2021 18:54:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Tjn-0007VM-AA
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 18:54:35 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6f27dd30-ddc2-11eb-8459-12813bfff9fa;
 Mon, 05 Jul 2021 18:54:32 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6f27dd30-ddc2-11eb-8459-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625511272;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Ya4ZKY5yRHzvindUHJ513rFRdz1LKZPY4rjc8FkpNj8=;
  b=cEUPAIFPzUlZyiM4/ER+FiHodOj8LL6mXKCJQxMkLXWgPdiMtKlsUlfh
   i/KI5RRWTKA21qwwj+fVpfE2sLU3kkq9+xD68wzFMNM3adcyVsP08uGYl
   CTR8JFny9xBphrCg+vXvLW5TQoHinFk7RPNjn7QH/Jx1SLZh8+Vyo9qXi
   g=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: VAovEy1cZQ/jd9JZjKBU0kPPBqGpZ6ZVi/8/hDggTcwYz1NdyZmDsglTJmApKCtiLTAL0pnpH+
 4wFVIo88ePe4CKxXkdmnRuQ2pmvUNMGXPMHh70gTiV2Be/2eSvYHTeF5K04EwwXlMs7k8ZU3xz
 n0goSVDjx1nxxJCRNryKekE88nu3eXNZ9BfmHPubsh5vJFszkyhKmjIDXN/sVxeS1O//rmnPzf
 OytrBIMMe1dRIybLnUUdP8p7zAVsiFnxjjeHu02ySFbIr9YzWWo3vBlg7VtPVWkkvpk1nnOJ3p
 pAI=
X-SBRS: 5.1
X-MesageID: 47662287
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:9ig4A69I7+7aVvKx/1duk+Ezdb1zdoMgy1knxilNoENuHfBwxv
 rDoB1E73LJYVYqOU3Jmbi7Sc29qADnhOFICO4qTMuftWjdyRaVxeRZg7cKrAeQYxEWmtQts5
 uINpIOcuEYbmIK/voSgjPIaurIqePvmMvD5Za8vgJQpENRGsZdBm9Ce3am+yZNNWt77PQCZf
 +hD4Z81kGdkSN9VLXLOpBJZZmOm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjMTSSlGz7sO+X
 XM11WR3NTsj9iLjjvnk0PD5ZVfn9XsjvNFGcy3k8AQbhHhkByhaohNU6CL+Bo1vOaswlA3l8
 SkmWZuA+1Dr1fqOk2lqxrk3AftlBw07WX59FOeiXz/5eTkWTMTEaN69MFkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l3CzvWEpnYco/jxiuLMlGfpsRLEkjQdo+M9qJlO81GlnKp
 guMCjk3ocVTbvABEqp+FWGqbeXLwYO9hTveDlIhiXa6UkOoJlD9Tpu+CUopAZJyHsMcegx2w
 36CNUfqFhvdL5dUUsvPpZNfSOIYla9CC4kZ1jiX2gPUpt3Y07wlw==
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47662287"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cuf0wlOhrFnxBtis1tyfUq54LQoVXiE/lItO2OpXVJWSmQC4cBmfbTzM9p8JQm6fbOMsYyQQVQHSgqDlh+gx3QG+hm8ag7dTc6+3qimBDhvfiHLa26QxK6O9rpN0RnUvERN3mQ0yTzMg0S9//Fshpv7pxsgTnKBcqHhpZjDYkEaUpqs/RVne7veA6KDNG9i2z+GOt2FsAn0//uVnFJTHZFAIBfu8MH9JNVRAzw9nwXu6YFOEat2Sq7/OqWmkxTLUS9JWWTnDR/Rfxs3swF1wn9NxWw2mmBa0IslS1NDvoYqrtIJL6rskfomerWPCMf9/G99ES3YeArcjVPXaPmf44Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ya4ZKY5yRHzvindUHJ513rFRdz1LKZPY4rjc8FkpNj8=;
 b=cA9VanrMx1DW3a5EAIinettidkUlNoX7OQUTcQrE4J0rOeS9BpuF6cMuY4JFwd2xDeiUT3noC157QvExtxglX2GmR9qQ96ctVLdTu+JLKRIqKh3eMuc/OfHjbUFfWVbKjDlHEZox/z4/d+5SLREHCV2WTvgGoQlJUvff9jYvOkpcSGgYmnTK56Du6B/BX2bIAagTA8hs+9Xq4qwj1nAFXmxfurOTGg2ZMyeGD9sdcDl7hcexsxg9Ym0+lu/9Ih47ed5BkdWQXY3LTpPwHwHXOdy9T5s+Ce2oZBUGvWqbJYznEoTG+2G2gKUIprdf0r+5qY9upekIBm6CdOYIgvdupQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ya4ZKY5yRHzvindUHJ513rFRdz1LKZPY4rjc8FkpNj8=;
 b=jlOQqZOTEgm3jMQKmPKhYbbbPKaX15x33oc5YsP5AqNcn8h4P4A2jUKZBZE1kP/80FfmKYliZEzevqr4v6q6Ve5fIp7w4LAyOF9Muo0h4pWzijjPm0eFEyEidn/SKqVRv09Xyd6bPap/5HQn8LGHRB4qtyguZ6GZ5mKJcqTxEhw=
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data pfns
 in migration stream
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-13-olaf@aepfle.de>
 <e5f00724-61fe-fed3-35c4-35df837a49c2@citrix.com>
 <20210705135350.GA31821@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <cafc7026-102d-f569-78a2-9a960e05d8f3@citrix.com>
Date: Mon, 5 Jul 2021 19:54:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705135350.GA31821@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0297.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:196::14) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: eb06913d-f0b7-47a2-6e6e-08d93fe650fd
X-MS-TrafficTypeDiagnostic: BY5PR03MB5047:
X-Microsoft-Antispam-PRVS: <BY5PR03MB504748F46031820D6620BC8EBA1C9@BY5PR03MB5047.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 9S9LYWNNwQtow3Lgt3x3NKGr46WCmxkoR0LYf1AjqC779q1oKG6kRH1HVknFtiuuCVDSn4UYfEty/AwlZMu134PCxALz9yq0wEq6hwkV2MBBL+HRYDCOWpTpxTtqn88K4wm/VGifHFR557LN+7+q7snOVQcVLkgYpjkjXnKPPZy/1KzAu15ZNg9Hd8NCHnDrdbCEySoFJYXlIfPgpNwYWKHCA9UMl2hz9NnL7TKxqQXRDkvSWZ5eoMtzhl2/1q9vdbIb7vg7qbCZGiDWNIlZKmzKPPp2/HXF84WWji/BbZD7jjGz/TgnyDunhgUNy/oHNAIdCVIKqzXAag2oa5HozK7MMUEoG7FEBoZyRlF1jYmoIrOpspBzCSe4lo0U5At5Qrz4+vmt6cC2P9So3pn+id5bZ7gMWeKew28t/U2OxC6QdR9DHyA0hx6Q/YdwoaD52usA1FzytB/XK/Oc/yoWbZCy8ZI2fTKV9qtBvkL0CA4gO0bhfp3u2L+rStmB4BdPiprlpup9w33Lk0mjgYDxq1dncbZh4VJ4GFOhasep8hgt98xEXP59hLabWbRtwaqjPRzvG4z+RdPk7ZSukEAiPXMEh49K+GIMat3sREhonpGgF7R27udIgi3TvXkRBub2jyQxfeYKYVdJdTln3h10EWF/qGHTOKsssMZmp8n3GdBBav96UnmNFqNExcK3o/BIWEuh3vdREgrI/1q6kxBLh9JR1wFDsHFmBU36qMVHQmU=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(136003)(366004)(396003)(376002)(39860400002)(4326008)(8676002)(16576012)(5660300002)(86362001)(6666004)(31696002)(2906002)(316002)(53546011)(54906003)(6916009)(16526019)(66476007)(66556008)(66946007)(186003)(6486002)(2616005)(38100700002)(478600001)(36756003)(31686004)(956004)(4744005)(26005)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: eb06913d-f0b7-47a2-6e6e-08d93fe650fd
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 18:54:28.4549
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: h1XoyCMyKPV1SDcvOQ/76cVpgTgmBFbVDwqmtdmlp6G/b/HoYvIlDmT2kQyYGw4g0YqHvZdWN5l3aG9j09ELH1ePkEng7xrLQLqZ1STYGYU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5047
X-OriginatorOrg: citrix.com

On 05/07/2021 14:53, Olaf Hering wrote:
> On Mon, Jul 05, Andrew Cooper wrote:
>
>> What do you mean "This specifically deals with" ?
> This was a result from Jürgen pointing out that XEN_DOMCTL_PFINFO_XALLOC
> is not handled.

But it is...

Before the patch, we only don't populate for XTAB or BROKEN.  We
populate for every other type, including the unknown/invalid ones.

There is no change in behaviour (for the non-invalid cases) that I can see.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:04:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:04:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150616.278459 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tt1-0000Wi-Jq; Mon, 05 Jul 2021 19:04:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150616.278459; Mon, 05 Jul 2021 19:04:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tt1-0000Wb-Gh; Mon, 05 Jul 2021 19:04:07 +0000
Received: by outflank-mailman (input) for mailman id 150616;
 Mon, 05 Jul 2021 19:04:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XcsV=L5=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1m0Tt0-0000WV-5w
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:04:06 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6b33c6a9-fdaf-4588-91a9-5c7c9943fcd0;
 Mon, 05 Jul 2021 19:04:05 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 3D07161978;
 Mon,  5 Jul 2021 19:03:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6b33c6a9-fdaf-4588-91a9-5c7c9943fcd0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625511844;
	bh=o012umLuvyjggdb73nB1nx1kOYsPv1SNeUIs18hDcAw=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=GRwf1cGaUQnGNSK48BMiS8/L53RP5G/QW+0L7WarqJg3vdXhPi76IMHEfxJBcIPa3
	 O/IVWGS61Gw63qZ6P/lu+E1G7lOjBRQgMMYZUlxciRBcXpXeaEm0Nt8VlI20vyORW0
	 5Yt77iWQoVMzfxA0eNrndYooJS41ndFVzjZWCxmusBkktvSuT3rDjxcvXFg+FyE3zq
	 Tiys8WKwLxyKU0wwkmXs/VX0V/xsNc/cZvd76dhCDw80UkiEfPmHKQyUCziEG4n9+X
	 zngjj2Bp6GquWJbjoHo8XOCLo60dYdheBX5hvWTEA+kb21c5xQf9Khdj2j/E3DZMQq
	 mzeeqFIjv4raA==
Date: Mon, 5 Jul 2021 20:03:52 +0100
From: Will Deacon <will@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>,
	Claire Chang <tientzu@chromium.org>,
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210705190352.GA19461@willie-the-truck>
References: <20210624155526.2775863-7-tientzu@chromium.org>
 <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain>
 <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
User-Agent: Mutt/1.10.1 (2018-07-13)

Hi Nathan,

I may have just spotted something in these logs...

On Fri, Jul 02, 2021 at 10:55:17PM -0700, Nathan Chancellor wrote:
> [    2.340956] pci 0000:0c:00.1: Adding to iommu group 4
> [    2.340996] pci 0000:0c:00.2: Adding to iommu group 4
> [    2.341038] pci 0000:0c:00.3: Adding to iommu group 4
> [    2.341078] pci 0000:0c:00.4: Adding to iommu group 4
> [    2.341122] pci 0000:0c:00.6: Adding to iommu group 4
> [    2.341163] pci 0000:0d:00.0: Adding to iommu group 4
> [    2.341203] pci 0000:0d:00.1: Adding to iommu group 4
> [    2.361821] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40
> [    2.361839] pci 0000:00:00.2: AMD-Vi: Extended features (0x206d73ef22254ade):
> [    2.361846]  PPR X2APIC NX GT IA GA PC GA_vAPIC
> [    2.361861] AMD-Vi: Interrupt remapping enabled
> [    2.361865] AMD-Vi: Virtual APIC enabled
> [    2.361870] AMD-Vi: X2APIC enabled
> [    2.362272] AMD-Vi: Lazy IO/TLB flushing enabled

So at this point, the AMD IOMMU driver does:

	swiotlb        = (iommu_default_passthrough() || sme_me_mask) ? 1 : 0;

where 'swiotlb' is a global variable indicating whether or not swiotlb
is in use. It's picked up a bit later on by pci_swiotlb_late_init(), which
will call swiotlb_exit() if 'swiotlb' is false.

Now, that used to work fine, because swiotlb_exit() clears
'io_tlb_default_mem' to NULL, but now with the restricted DMA changes, I
think that all the devices which have successfully probed beforehand will
have stale pointers to the freed structure in their 'dev->dma_io_tlb_mem'
field.

Will


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:06:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:06:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150622.278471 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tvj-00019x-3I; Mon, 05 Jul 2021 19:06:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150622.278471; Mon, 05 Jul 2021 19:06:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tvj-00019q-05; Mon, 05 Jul 2021 19:06:55 +0000
Received: by outflank-mailman (input) for mailman id 150622;
 Mon, 05 Jul 2021 19:06:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=N9Vt=L5=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0Tvh-00019k-Gs
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:06:53 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.220])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 953bef00-21d0-4b05-aed6-1de50551859f;
 Mon, 05 Jul 2021 19:06:52 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx65J6iNcl
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Mon, 5 Jul 2021 21:06:44 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 953bef00-21d0-4b05-aed6-1de50551859f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625512004;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=3V0s+CgM00lZP6hSmgj1I+NGcCO1PIACnD28fTuMRE8=;
    b=MNq0b71+s15MBXSJV63QX6GhsHQD0E321pEuOmV4NR1iQMei9OlkSVUhdEZ5xUn/3C
    PlUHCCut/TL7KWchEmERWDJWlP9aO27TwpUALIclOw//WLqxgIwawOLrsK20RH2E5fgJ
    wSqc7YB6FgIssMCMgeBnsFi4JIOkrmUIGcO7FPZMMLSCN3rvGOCk5F5qeQb0MFUC4T5Q
    ZZC2PakUpf6ONwWzewSs6oYz6FqaO1Xb76A2pWhqzf9wUutajHkw+S8IQdcOwlPlps0L
    xtC0rj6bZIpUrcRQNFLP4oTExTeiuqMKc2zOBU5OC41CdbJC6jf/lz2Vr79M5OXiM+48
    hpAg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Mon, 5 Jul 2021 21:06:37 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 12/40] tools: unify type checking for data
 pfns in migration stream
Message-ID: <20210705210637.1948b8da.olaf@aepfle.de>
In-Reply-To: <cafc7026-102d-f569-78a2-9a960e05d8f3@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-13-olaf@aepfle.de>
	<e5f00724-61fe-fed3-35c4-35df837a49c2@citrix.com>
	<20210705135350.GA31821@aepfle.de>
	<cafc7026-102d-f569-78a2-9a960e05d8f3@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/peiMtHwhJ_sW4AKXCzshXnL";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/peiMtHwhJ_sW4AKXCzshXnL
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 19:54:21 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> But it is...

It was not handled in an earlier variant of the patch. Meanwhile the origin=
al behavior is restored with the current variant.

Olaf

--Sig_/peiMtHwhJ_sW4AKXCzshXnL
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDjWD0ACgkQ86SN7mm1
DoC/Dw//RL3tIKKLnsVp38r2L/f2iAGmv5N1CcQ6l8EQpXT3cCW3+idbcQ36lN8i
V7svUPTtD3HV1TMA8r6VrrIij0xVsGY08VwGL/DFETdi9T1SXwpi2DIOsrM0QNoi
bT8nWLQy+P4koJqItk7e5O1G7k7hatpS8Nzt4uTvRbBVmGlQs5J0uOzG1XgJwqTB
icjMPL+cy3TdbgQHCUBcwzgGqu1Fok/4N9vA5SG98H6TyVnKI1Z77gYZruMTCml2
WIS55ni+Cb9znLg658x8WihS1WgQy9nPHoarAGuga40l85od/G9riV+99Hp8NrqE
PX0Aw1ueWqV5aCoCjrT0mgrm+ebh0h4AxHH8EACjYoVvD8BFzfGsxuoOW3up+ffU
kfhIAqrolw0GzvQwEfpujLDQNOy6SkoMSe72zIukKBfxMvUE6Y0BL+JVgSYth+mF
vI0KoVz80getZqTEGlgJAOdCpZYAvpakrTqLzmPdZj6XBzSKAUUjlCoT0FyE9HTI
CsEOnyKDEIoi/0fjLCzujtx8df48gHqWMSjYyIy1AKxeJplBSIejzLN9OVVN+ySM
pz5QqzOyYnuUnNsAv/REsrh6BplG8T80GmNcregQMwtjBfVYfvex7fLqhYGD5DLh
g8bYVyRl3YVmqkKnc7Y6AKB6+O/2Ncy7NpYr497iou83DFmvUFU=
=V++G
-----END PGP SIGNATURE-----

--Sig_/peiMtHwhJ_sW4AKXCzshXnL--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:10:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:10:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150629.278482 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0TzQ-0002aF-NK; Mon, 05 Jul 2021 19:10:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150629.278482; Mon, 05 Jul 2021 19:10:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0TzQ-0002a8-Ja; Mon, 05 Jul 2021 19:10:44 +0000
Received: by outflank-mailman (input) for mailman id 150629;
 Mon, 05 Jul 2021 19:10:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0TzP-0002a2-PS
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:10:43 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4ea574e3-8392-4818-a441-850b651e4db7;
 Mon, 05 Jul 2021 19:10:42 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4ea574e3-8392-4818-a441-850b651e4db7
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625512242;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=4MTJp3+BUiLfrjjfU0zgrxNxIPZ07dJrFxqFfOLj24U=;
  b=La2fCLox/IHo3fdprraRMBzyqaEs3WstQVG10oCYeFal1SMRcWxqfO7P
   S7dHodkeEiVr7O8m2hC+c23bcXaM0GsVh5X1Jcc9M8lr4g0XlJwxloVBF
   RPicAQckP95gr42r+nbEruThwu/MCadFX7XyxNnHXJBtYzHcmsj0m0YMM
   I=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: BMLIWobxaEocJpqili7zkblWKvGp6h/m6ObylDrILcuHxasMPTSWclBPTWWGI5A0N3UgTD5Ty/
 9Zu953rrWuVhbM1s47rT/MIqCsmoCt3+o6YfUhQFfLWB8HRLQ1ycvpe3JuidlzX8pLYLhVwn6r
 nxqMZbnUNf88Jdn9F7PX8C+KWYV3WONI9Wnlo6h8pS0t6UDMFc+eX/wXLUntzoUvTQnOyKjUEZ
 K/W9kAhGOYohdJao0k+bIXAXjEjmotXEcZ6NC28lU1VMrS7B9FjY417uSxu8++3wQNjvIFlx4q
 0Dk=
X-SBRS: 5.1
X-MesageID: 49224525
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:IGQXMaFJKDNqzxVKpLqE/seALOsnbusQ8zAXP0AYc3Jom62j5q
 eTdZsgtSMc5Ax8ZJhCo6HlBEDjewK+yXcd2+B4Vt3OYOCPghrMEGgI1+rfKlPbdBEWjtQtt5
 tdTw==
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="49224525"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>, "Juergen
 Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [PATCH 0/5] tools/migration: Py3 fixes, and page type helpers
Date: Mon, 5 Jul 2021 20:10:22 +0100
Message-ID: <20210705191027.15107-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain

FAOD, this is what I'm planning to push, unless anyone shouts urgently.

Olaf Hering (5):
  tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
  tools/python: fix Python3.4 TypeError in format string
  tools/migration: unify known page type checking
  tools/migration: unify type checking for data pfns in the VM
  tools/migration: unify type checking for data pfns in migration stream

 tools/libs/guest/xg_sr_common.h            | 85 ++++++++++++++++++++++++++++++
 tools/libs/guest/xg_sr_restore.c           | 38 +++----------
 tools/libs/guest/xg_sr_save.c              | 18 +++----
 tools/python/scripts/convert-legacy-stream |  8 +--
 4 files changed, 102 insertions(+), 47 deletions(-)

-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:11:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:11:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150631.278493 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzg-0002yN-Vo; Mon, 05 Jul 2021 19:11:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150631.278493; Mon, 05 Jul 2021 19:11:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzg-0002yE-SD; Mon, 05 Jul 2021 19:11:00 +0000
Received: by outflank-mailman (input) for mailman id 150631;
 Mon, 05 Jul 2021 19:10:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Tzf-0002tP-RL
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:10:59 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b9903b4a-ddc4-11eb-8459-12813bfff9fa;
 Mon, 05 Jul 2021 19:10:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b9903b4a-ddc4-11eb-8459-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625512256;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=MYgc+W0g6DOuwBi3YuCpQOetNiKzFhp4dnXvQBYWZnY=;
  b=HH9cqdAy9n6Uhe+FJ+vwwrspTBpDlgTzIaRaKE6BRFjQOn1ddQ7LaZLQ
   s2HgsLGA7Yx+Ly+dQQH9oA88L16QQrbCf8xkPpsUf+s2edMU5MNOIaOkK
   oEhgzYwsFyM4iiLJ1rhKDqIywBs5+m/jOviUPWCWWCCUgzO/8K3hEhWqr
   c=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: kL+M67rezHidGYQ6Vr9YydkTRy00f8MtKIghQVumW8qNZnK8NSA449qEQuOij4TiFUa+PoT51S
 X9ZXuoWbMdekZzyQ6WLj41ufMthLif2sgMw8mriqQ4/v2enKDxzKHSARXCgUu5KOUDzNNm9KOq
 6ZE6mMB5zzNxyzWTOG2S78ifqIGHlXmioZgv8eBmFEeuvynQFdpyDGuaSWVkYHMJRgf7ijzzbs
 zQhugJxMouo916tmFJjk7PQAs0D6wuO/OMpr/DiIX/wpF4TvJA4t7co8I1ZICGpoQ8pnRHTT20
 u3Y=
X-SBRS: 5.1
X-MesageID: 47662836
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:VLwU6KzZNyrW7ofCxFmTKrPwOr1zdoMgy1knxilNoRw8SKKlfq
 GV7ZMmPHDP6Ar5NEtNpTniAtjlfZq/z+8X3WB5B97LN2OKhILBFvAG0WKI+Vzd8kPFmdK1rZ
 0QEZRDNA==
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47662836"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>, "Juergen
 Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
Subject: [PATCH 1/5] tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
Date: Mon, 5 Jul 2021 20:10:23 +0100
Message-ID: <20210705191027.15107-2-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210705191027.15107-1-andrew.cooper3@citrix.com>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

From: Olaf Hering <olaf@aepfle.de>

The trailing member name[] in libxl__physmap_info is written as a
cstring into the stream. The current code does a sanity check if the
last byte is zero. This attempt fails with python3 because name[-1]
returns a type int. As a result the comparison with byte(\00) fails:

  File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
    raise StreamError("physmap name not NUL terminated")
  StreamError: physmap name not NUL terminated

To handle both python variants, cast to bytearray().

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
 tools/python/scripts/convert-legacy-stream | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
index 66ee3d2f5d29..227e1b5c3fd3 100755
--- a/tools/python/scripts/convert-legacy-stream
+++ b/tools/python/scripts/convert-legacy-stream
@@ -343,7 +343,7 @@ def read_libxl_toolstack(vm, data):
         if twidth == 64:
             name = name[:-4]
 
-        if name[-1] != b'\x00':
+        if bytearray(name)[-1] != 0:
             raise StreamError("physmap name not NUL terminated")
 
         root = b"physmap/%x" % (phys, )
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:11:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:11:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150632.278503 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzk-0003IG-7Q; Mon, 05 Jul 2021 19:11:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150632.278503; Mon, 05 Jul 2021 19:11:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzk-0003I7-46; Mon, 05 Jul 2021 19:11:04 +0000
Received: by outflank-mailman (input) for mailman id 150632;
 Mon, 05 Jul 2021 19:11:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Tzj-0003HJ-02
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:11:03 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b5d8e537-8481-41c3-9533-1295432eb5e4;
 Mon, 05 Jul 2021 19:11:02 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b5d8e537-8481-41c3-9533-1295432eb5e4
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625512262;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=LyGR43uHEWb6t2bUOODNzpfUs/a64k/3YzkKZGB+u+c=;
  b=TdgK53jhLj0+ImqmTKRC0uZ7TQ7CGP93dFFfWy0c1ZJbHYHGW7YuKO4/
   iB1eBZWIenNrwplvOJ4rYopxO29w/S0ZDfxX5LeTNQgoqb1yDTnLI/rrY
   HjOpYUIVWpnYepvvmNgR5rrV0uOmL5KNIreZIUcL7lDpZ8bxo4r51bGmQ
   M=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: zQgEcGNxfycW0ynA3O1Td4yotW/XnQR3ldkBfHRa0frV98SDnxaIICPEu81NmOM+lVMa48PQw8
 HKKcCfkeajlNObbmcTrhwKkzMEVChahIxXjS+RM6QOgb3G/gCLGR+gL2hHbEtdAIp/Y7ZP5sGc
 Ii3iSjein3WaHlWizSucTl4grmtqXOkaJb/idT36E7oCRnkGW14LFQc1CMSjvW61vbL1hgfHA9
 6B+wk91+yy8X+Y9Ce0+K9bgsqkS6osqGkiOJ/Tk0/cEkR3ckk5diqvu72sel5lmkvqtkcu/uHc
 u9k=
X-SBRS: 5.1
X-MesageID: 47973427
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:jlPoQqGR/IwqK6/TpLqE7MeALOsnbusQ8zAXP0AYc31om62j5r
 iTdZsgpHzJYVoqN03I3OrwXJVoIkmsjKKdg7NhX4tKNTOO0ADDQe1fBMnZslrd8kXFh4hgPM
 xbE5SWZuefMbEDt7ee3DWF
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47973427"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>, "Juergen
 Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
Subject: [PATCH 4/5] tools/migration: unify type checking for data pfns in the VM
Date: Mon, 5 Jul 2021 20:10:26 +0100
Message-ID: <20210705191027.15107-5-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210705191027.15107-1-andrew.cooper3@citrix.com>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

From: Olaf Hering <olaf@aepfle.de>

Introduce a helper which decides if a given pfn in the migration
stream is backed by memory.

This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
synthetic toolstack-only type used between Xen 4.2 to 4.5 which
indicated a dirty page on the sending side for which no data will be
send in the initial iteration) does get populated in the VM.

No change in behaviour intended, except for invalid page types which now
have a safer default.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
 tools/libs/guest/xg_sr_common.h  | 29 +++++++++++++++++++++++++++++
 tools/libs/guest/xg_sr_restore.c |  4 +---
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index e8436d1abb14..7f4b0439f6bd 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -484,6 +484,35 @@ static inline bool is_known_page_type(uint32_t type)
     }
 }
 
+/* Page type backed by RAM in the guest? */
+static inline bool page_type_to_populate(uint32_t type)
+{
+    switch ( type )
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_XALLOC:
+        return true;
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_BROKEN:
+    default:
+        return false;
+    }
+}
+
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 508953fd3cf7..3d63442d4537 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -152,9 +152,7 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 
     for ( i = 0; i < count; ++i )
     {
-        if ( (!types || (types &&
-                         (types[i] != XEN_DOMCTL_PFINFO_XTAB &&
-                          types[i] != XEN_DOMCTL_PFINFO_BROKEN))) &&
+        if ( (!types || page_type_to_populate(types[i])) &&
              !pfn_is_populated(ctx, original_pfns[i]) )
         {
             rc = pfn_set_populated(ctx, original_pfns[i]);
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:11:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:11:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150633.278515 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzm-0003fz-GL; Mon, 05 Jul 2021 19:11:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150633.278515; Mon, 05 Jul 2021 19:11:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzm-0003fj-Ci; Mon, 05 Jul 2021 19:11:06 +0000
Received: by outflank-mailman (input) for mailman id 150633;
 Mon, 05 Jul 2021 19:11:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Tzk-0002tP-RR
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:11:04 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b9903b4b-ddc4-11eb-8459-12813bfff9fa;
 Mon, 05 Jul 2021 19:10:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b9903b4b-ddc4-11eb-8459-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625512257;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=Yg5/TaytRdxEyL/8i1MtFxEb99X7krAsWD1gKRnJVZc=;
  b=AuWtHNe7smlbIpudLjdjd0HQoUizPx3cgl/g+3UnVc4bvtLaU69Qc7FM
   JvL98PMykhWwxNsyNKmMokpLGiCpE6dJH8hVDYY/iEnJpIStf+zPTnWtQ
   K/xFod8mvSX9OeFgnj7Xg/Q3lrP0Hc+n9Ot9p6J+MVEo2fSiyZDE/2EY0
   8=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 1c9I/CO3mklO3t3Sj43l5AUhdN1jpqz8bljjxBwAjER/X9xEmVrm9EAnunhK2rtWehTTOlpmz7
 qB0jhsGU9KX+LIG9F4Vq3dxTAxoOk5mYtl79W/x8D2xpBE7odoEUpzNW4hfWFC8PM+USWwDeOD
 SLM7eMei7L4pc9+r3t2LHyn+44BWChEfBGSGHDDh0CVJoIq83i7yoSCtN0Is6TiSduyOLC+Xzp
 dZeP1NobtXmrAmwLqhBRpMN1jZGYHa91STJzeHNpnNYkZB6o4oJdlJW7Z+RdJKHeoIwSNR5DgX
 1p8=
X-SBRS: 5.1
X-MesageID: 47662837
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:VSWnXau4mLbJk92XYmB6z5J97skDYNV00zEX/kB9WHVpmszxra
 6TdZUgpHjJYVkqOE3I9ertBEDiewK5yXcW2/hzAV7KZmCP0wHEEGgL1/qG/9SKIUzDH4Bmup
 uIC5IOauHNMQ==
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47662837"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>, "Juergen
 Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
Subject: [PATCH 2/5] tools/python: fix Python3.4 TypeError in format string
Date: Mon, 5 Jul 2021 20:10:24 +0100
Message-ID: <20210705191027.15107-3-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210705191027.15107-1-andrew.cooper3@citrix.com>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

From: Olaf Hering <olaf@aepfle.de>

Using the first element of a tuple for a format specifier fails with
python3.4 as included in SLE12:
    b = b"string/%x" % (i, )
TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'

It happens to work with python 2.7 and 3.6.
To support older Py3, format as strings and explicitly encode as ASCII.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
 tools/python/scripts/convert-legacy-stream | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/scripts/convert-legacy-stream
index 227e1b5c3fd3..7fe375a66810 100755
--- a/tools/python/scripts/convert-legacy-stream
+++ b/tools/python/scripts/convert-legacy-stream
@@ -346,9 +346,9 @@ def read_libxl_toolstack(vm, data):
         if bytearray(name)[-1] != 0:
             raise StreamError("physmap name not NUL terminated")
 
-        root = b"physmap/%x" % (phys, )
-        kv = [root + b"/start_addr", b"%x" % (start, ),
-              root + b"/size",       b"%x" % (size, ),
+        root = ("physmap/%x" % (phys, )).encode('ascii')
+        kv = [root + b"/start_addr", ("%x" % (start, )).encode('ascii'),
+              root + b"/size",       ("%x" % (size, )).encode('ascii'),
               root + b"/name",       name[:-1]]
 
         for key, val in zip(kv[0::2], kv[1::2]):
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:11:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:11:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150634.278526 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzo-00041S-Q6; Mon, 05 Jul 2021 19:11:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150634.278526; Mon, 05 Jul 2021 19:11:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzo-00041F-Mf; Mon, 05 Jul 2021 19:11:08 +0000
Received: by outflank-mailman (input) for mailman id 150634;
 Mon, 05 Jul 2021 19:11:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Tzn-0003HJ-VP
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:11:07 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 87e402e1-75f0-4030-a371-3c0f098e4869;
 Mon, 05 Jul 2021 19:11:03 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 87e402e1-75f0-4030-a371-3c0f098e4869
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625512263;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=CuqCxukAEpPEZu8tBseimenOnd4UdwA3oGVYBaKS/xI=;
  b=fkMu09vEWcwInWDIZsXOfmQKXrLAYqtayIUXN2/72ZwXONSHgXsp/sF2
   Wpo/YZfa+CQ6hpOHhxNR0FBrsljgW3Tn23RNef6YJF+iDwhlN6kgq+sUp
   5Aa9WHNK1m9LW97zYBauMB+mbE3BOJSIAV7oTmxAw9lQ859qB+Zm5WGrf
   A=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: jiN/OOdM2xnlx3gY/d/CG7XM8wTwfwWvWPS+MAsXL7Gm3No1PHOeUaWSWb0Mq1AOpYGW8rSTSl
 msxvTpSLcyY1biRw+UdnZRFI8AoDD/OdqXqEwz119JxX/VeoSXOLDBzrhiar5/IU62az87wY7Z
 /Jf5HLScEpAuACqzJESHnjK7f/jIWlIFYyO3vVVFCR3UjDBPCB2jqw1vU8briqHE+95FZjCOXz
 Fkx81lk7h8Hpb2hyc9V1mhDx1Rl6ve09aZ/iGqCts+NOsjvSTxMuIEM2skmnvZSGLnn+Y4zods
 XW4=
X-SBRS: 5.1
X-MesageID: 47973428
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:3JsuValfXQZvYwm7I6hXzZdos+/pDfIo3DAbv31ZSRFFG/Fxl6
 iV/cjztCWE8Ar5N0tQ+uxoVJPufZqYz+8Q3WBzB8baYOCFghrLEGgK1+KLqFeMdxEWtNQtsp
 uIG5IObuEYZmIbsS+V2meF+q4bsby6zJw=
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47973428"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>, "Juergen
 Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
Subject: [PATCH 5/5] tools/migration: unify type checking for data pfns in migration stream
Date: Mon, 5 Jul 2021 20:10:27 +0100
Message-ID: <20210705191027.15107-6-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210705191027.15107-1-andrew.cooper3@citrix.com>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

From: Olaf Hering <olaf@aepfle.de>

Introduce a helper which decides if a given pfn type has data
in the migration stream.

No change in behaviour intended, except for invalid page types which now
have a safer default.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  | 27 +++++++++++++++++++++++++++
 tools/libs/guest/xg_sr_restore.c | 29 +++--------------------------
 tools/libs/guest/xg_sr_save.c    | 14 ++------------
 3 files changed, 32 insertions(+), 38 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 7f4b0439f6bd..36d45ef56fb8 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -513,6 +513,33 @@ static inline bool page_type_to_populate(uint32_t type)
     }
 }
 
+static inline bool page_type_has_stream_data(uint32_t type)
+{
+    switch ( type )
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+        return true;
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_BROKEN:
+    case XEN_DOMCTL_PFINFO_XALLOC:
+    default:
+        return false;
+    }
+}
+
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 3d63442d4537..aa4113d7f679 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -231,25 +231,8 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
     {
         ctx->restore.ops.set_page_type(ctx, pfns[i], types[i]);
 
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_NOTAB:
-
-        case XEN_DOMCTL_PFINFO_L1TAB:
-        case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L2TAB:
-        case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L3TAB:
-        case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
-        case XEN_DOMCTL_PFINFO_L4TAB:
-        case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
-
+        if ( page_type_has_stream_data(types[i]) )
             mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
-            break;
-        }
     }
 
     /* Nothing to do? */
@@ -269,14 +252,8 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
 
     for ( i = 0, j = 0; i < count; ++i )
     {
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_XTAB:
-        case XEN_DOMCTL_PFINFO_BROKEN:
-        case XEN_DOMCTL_PFINFO_XALLOC:
-            /* No page data to deal with. */
+        if ( !page_type_has_stream_data(types[i]) )
             continue;
-        }
 
         if ( map_errs[j] )
         {
@@ -411,7 +388,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
             goto err;
         }
 
-        if ( type < XEN_DOMCTL_PFINFO_BROKEN )
+        if ( page_type_has_stream_data(type) )
             /* NOTAB and all L1 through L4 tables (including pinned) should
              * have a page worth of data in the record. */
             pages_of_data++;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index c84a073e86f4..3fce41b6cfff 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -153,13 +153,8 @@ static int write_batch(struct xc_sr_context *ctx)
             goto err;
         }
 
-        switch ( types[i] )
-        {
-        case XEN_DOMCTL_PFINFO_BROKEN:
-        case XEN_DOMCTL_PFINFO_XALLOC:
-        case XEN_DOMCTL_PFINFO_XTAB:
+        if ( !page_type_has_stream_data(types[i]) )
             continue;
-        }
 
         mfns[nr_pages++] = mfns[i];
     }
@@ -177,13 +172,8 @@ static int write_batch(struct xc_sr_context *ctx)
 
         for ( i = 0, p = 0; i < nr_pfns; ++i )
         {
-            switch ( types[i] )
-            {
-            case XEN_DOMCTL_PFINFO_BROKEN:
-            case XEN_DOMCTL_PFINFO_XALLOC:
-            case XEN_DOMCTL_PFINFO_XTAB:
+            if ( !page_type_has_stream_data(types[i]) )
                 continue;
-            }
 
             if ( errors[p] )
             {
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:11:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:11:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150636.278536 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzr-0004Mm-42; Mon, 05 Jul 2021 19:11:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150636.278536; Mon, 05 Jul 2021 19:11:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Tzr-0004MX-0J; Mon, 05 Jul 2021 19:11:11 +0000
Received: by outflank-mailman (input) for mailman id 150636;
 Mon, 05 Jul 2021 19:11:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Qt1=L5=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0Tzp-0002tP-Rt
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:11:09 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bdab91df-ddc4-11eb-8459-12813bfff9fa;
 Mon, 05 Jul 2021 19:11:03 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bdab91df-ddc4-11eb-8459-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625512263;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=HyKLJg6+yF7ZQi/84e0KuLZSQO3s7SCQ3p1UsQyyXqU=;
  b=KvoYmYP7ugDGx1ef/7w3ljJ9MMAXYOaqpfB8sJ/4uN13jS20PSTqaIdv
   WtF52+GiqLFWDawhNbLAVqWWvpaUz+QlJILxNfWWMSkSGen56MhkruHq4
   4rDh7Gf1h3Wc4JJZ4s5wyzHVtshJhtm3h2ES79dJ8+gMLwvpWdVaLsWk3
   4=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: aPmwI5Ngmk9G7uDfJWPaX/ImIZHiG9VdNeTYMatZS81V2yqpbThy24moBXhMX3QSQWw+SWYBwV
 a211VBmA3Uc2XvqnhlyOkIDhAbRCq/28T2Lw7iT/SOTQiOPYrYPrxlxr8NAqB9QJRnHOQcvb7F
 og5TnnFVVF1z/27ocbN54SdWzTsvTfugfUJFEson3vnjKwXIQEBAb8e0sL02MAL9J73dw8tX7x
 G8l0kfZf9JCQ8K4ve5KzQqkLotlY/rYoPT98gK/KxjF22IKV+f8QMVErfbf6kxraOCB/reb1Tp
 Tkw=
X-SBRS: 5.1
X-MesageID: 47973429
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:XhZIcKB7gwQjmWHlHemo55DYdb4zR+YMi2TC1yhKKCC9E/bo7/
 xG885rtiMc5Ax/ZJhko6HlBEDiewKkyXcW2/hyAV7KZmCP0wHEQL2Kr7GSpAEIcxeOkNK1vp
 0BT0ERMrPN5CBB/KPH3DU=
X-IronPort-AV: E=Sophos;i="5.83,326,1616472000"; 
   d="scan'208";a="47973429"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
	<marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>, "Juergen
 Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>
Subject: [PATCH 3/5] tools/migration: unify known page type checking
Date: Mon, 5 Jul 2021 20:10:25 +0100
Message-ID: <20210705191027.15107-4-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210705191027.15107-1-andrew.cooper3@citrix.com>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

From: Olaf Hering <olaf@aepfle.de>

Users of xc_get_pfn_type_batch may want to sanity check the data
returned by Xen. Add helpers for this purpose:

is_known_page_type verifies the type returned by Xen on the saving
side, or the incoming type for a page on the restoring side, is known
by the save/restore code.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
 tools/libs/guest/xg_sr_common.h  | 29 +++++++++++++++++++++++++++++
 tools/libs/guest/xg_sr_restore.c |  5 ++---
 tools/libs/guest/xg_sr_save.c    |  6 ++++++
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index e2994e18acf1..e8436d1abb14 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -455,6 +455,35 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 /* Handle a STATIC_DATA_END record. */
 int handle_static_data_end(struct xc_sr_context *ctx);
 
+/* Page type known to the migration logic? */
+static inline bool is_known_page_type(uint32_t type)
+{
+    switch ( type )
+    {
+    case XEN_DOMCTL_PFINFO_NOTAB:
+
+    case XEN_DOMCTL_PFINFO_L1TAB:
+    case XEN_DOMCTL_PFINFO_L1TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L2TAB:
+    case XEN_DOMCTL_PFINFO_L2TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L3TAB:
+    case XEN_DOMCTL_PFINFO_L3TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_L4TAB:
+    case XEN_DOMCTL_PFINFO_L4TAB | XEN_DOMCTL_PFINFO_LPINTAB:
+
+    case XEN_DOMCTL_PFINFO_XTAB:
+    case XEN_DOMCTL_PFINFO_XALLOC: /* Synthetic type in Xen 4.2 - 4.5 */
+    case XEN_DOMCTL_PFINFO_BROKEN:
+        return true;
+
+    default:
+        return false;
+    }
+}
+
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index b57a7875192f..508953fd3cf7 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -406,10 +406,9 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         }
 
         type = (pages->pfn[i] & PAGE_DATA_TYPE_MASK) >> 32;
-        if ( ((type >> XEN_DOMCTL_PFINFO_LTAB_SHIFT) >= 5) &&
-             ((type >> XEN_DOMCTL_PFINFO_LTAB_SHIFT) <= 8) )
+        if ( !is_known_page_type(type) )
         {
-            ERROR("Invalid type %#"PRIx32" for pfn %#"PRIpfn" (index %u)",
+            ERROR("Unknown type %#"PRIx32" for pfn %#"PRIpfn" (index %u)",
                   type, pfn, i);
             goto err;
         }
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index f0e2bd048d37..c84a073e86f4 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -147,6 +147,12 @@ static int write_batch(struct xc_sr_context *ctx)
 
     for ( i = 0; i < nr_pfns; ++i )
     {
+        if ( !is_known_page_type(types[i]) )
+        {
+            ERROR("Unknown type %#"PRIpfn" for pfn %#"PRIpfn, types[i], mfns[i]);
+            goto err;
+        }
+
         switch ( types[i] )
         {
         case XEN_DOMCTL_PFINFO_BROKEN:
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:50:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:50:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150666.278548 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0UbQ-0000R3-F1; Mon, 05 Jul 2021 19:50:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150666.278548; Mon, 05 Jul 2021 19:50:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0UbQ-0000Qw-B1; Mon, 05 Jul 2021 19:50:00 +0000
Received: by outflank-mailman (input) for mailman id 150666;
 Mon, 05 Jul 2021 19:49:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=rYQ2=L5=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m0UbP-0000Qq-E4
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:49:59 +0000
Received: from out5-smtp.messagingengine.com (unknown [66.111.4.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e61e831b-fc03-4178-b258-a45428858db9;
 Mon, 05 Jul 2021 19:49:58 +0000 (UTC)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
 by mailout.nyi.internal (Postfix) with ESMTP id 597665C00F0;
 Mon,  5 Jul 2021 15:49:58 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute6.internal (MEProxy); Mon, 05 Jul 2021 15:49:58 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon,
 5 Jul 2021 15:49:56 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e61e831b-fc03-4178-b258-a45428858db9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=G7DY70
	Grx+0a8Dm8h5ZrFNCmadOBGwqFg2YnRI1MFUw=; b=ao4EuSMK7v8/ssNxhSzg/w
	wSePPC5SC+vLWDnrKYk8oKHVEhSumR9AQCat4wxtM+bpXYl6EshsRYjlk6IEuOth
	VpTkxFSROEdwY9Kc4pryBzz00J0Pz1OYBTgBFiXzjTAwFAsSW7ITMrZm+5RUT4Nt
	atWzbqftTnyki6LHnpkisKEGATGB7B8F4M3iSUZ/+w/19bIL9AO29mu7SQ725XVv
	grjgRlUjDNZo0iNy4Haz91HQOMjUWL+aQ8N3OoLdFYZ6EcC4IJrg68ZhA+qh1UAR
	e7O7Q6wSunlEQbM/cNZJURziIIEefQD3ZmdBAXX/fMjgOsgAzG9a7rqsb6epdSJw
	==
X-ME-Sender: <xms:ZWLjYIwLoq_Rsvg-lEeyJj0-UfKgoFNu0aRm5oVbnmXVJyqLi4-AwQ>
    <xme:ZWLjYMTOZLPO1HF5eyDVsDHVp9QXgWoKcp7k8GlHPfHVvX7zQT7jgKndnMLq-mAaI
    TkK8uSZXiewlw>
X-ME-Received: <xmr:ZWLjYKV5wH-vSkZ7qR5IwRydJbsqgsvcEbOWccsWXytS28Ir5Ff9CO_TgW45VW1nxYjbEIKHl2OzvSK-ziJhCavzlbsd8xfy>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrfeejgedgudegtdcutefuodetggdotefrod
    ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh
    necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd
    enucfjughrpeffhffvuffkfhggtggujgesghdtreertddtjeenucfhrhhomhepofgrrhgv
    khcuofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuceomhgrrhhmrghrvghksehinh
    hvihhsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepteev
    ffeigffhkefhgfegfeffhfegveeikeettdfhheevieehieeitddugeefteffnecuvehluh
    hsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghk
    sehinhhvihhsihgslhgvthhhihhnghhslhgrsgdrtghomh
X-ME-Proxy: <xmx:ZWLjYGh1PdEAhi5XS1RkEPSYu_rnLMHBczRA1sdwvCC_7Ez2Zg-inQ>
    <xmx:ZWLjYKAxyva1GZHiznK3LEXzwxkQB56Y_N-3wxK5vHwpvTgmsja1Qg>
    <xmx:ZWLjYHJ9E70s-VxvMfdcrkwLaM3lRYQYtrefPBup-AxdlWlDrt-jlA>
    <xmx:ZmLjYFNfj08aXOs9LBbNepnX-EzvmPnuG8U4BxmjBjrGc3Ahi9I3qA>
Date: Mon, 5 Jul 2021 21:49:52 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Olaf Hering <olaf@aepfle.de>, Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH 1/5] tools/python: handle libxl__physmap_info.name
 properly in convert-legacy-stream
Message-ID: <YONiYGQAaj9oSHnt@mail-itl>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
 <20210705191027.15107-2-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="fsnkhmf9WWev5GLc"
Content-Disposition: inline
In-Reply-To: <20210705191027.15107-2-andrew.cooper3@citrix.com>


--fsnkhmf9WWev5GLc
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Mon, 5 Jul 2021 21:49:52 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Olaf Hering <olaf@aepfle.de>, Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH 1/5] tools/python: handle libxl__physmap_info.name
 properly in convert-legacy-stream

On Mon, Jul 05, 2021 at 08:10:23PM +0100, Andrew Cooper wrote:
> From: Olaf Hering <olaf@aepfle.de>
>=20
> The trailing member name[] in libxl__physmap_info is written as a
> cstring into the stream. The current code does a sanity check if the
> last byte is zero. This attempt fails with python3 because name[-1]
> returns a type int. As a result the comparison with byte(\00) fails:
>=20
>   File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_=
toolstack
>     raise StreamError("physmap name not NUL terminated")
>   StreamError: physmap name not NUL terminated
>=20
> To handle both python variants, cast to bytearray().
>=20
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Marek Marczykowski-G=C3=B3recki <marmarek@invisiblethingslab.com>

> ---
>  tools/python/scripts/convert-legacy-stream | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>=20
> diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/sc=
ripts/convert-legacy-stream
> index 66ee3d2f5d29..227e1b5c3fd3 100755
> --- a/tools/python/scripts/convert-legacy-stream
> +++ b/tools/python/scripts/convert-legacy-stream
> @@ -343,7 +343,7 @@ def read_libxl_toolstack(vm, data):
>          if twidth =3D=3D 64:
>              name =3D name[:-4]
> =20
> -        if name[-1] !=3D b'\x00':
> +        if bytearray(name)[-1] !=3D 0:
>              raise StreamError("physmap name not NUL terminated")
> =20
>          root =3D b"physmap/%x" % (phys, )
> --=20
> 2.11.0
>=20

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--fsnkhmf9WWev5GLc
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmDjYmAACgkQ24/THMrX
1yyYqAf/QTmKsert72icwDsQSxGNQMOTfTSY4078x9/EW21JzXXKvf+UCfeTeanM
1kqvhM63SatAutj1zGxhXLaMUgVnnPKCUY4ujncsIRwIyhTuUO9/7rCC+cuavS/y
daXg+REYhovvxXFHzAocscyh8OmseHHUnIKJggV64J17b8Zn0Quq/UvZ/R9E/jRj
fmi2k1uqt/IFVIgvYjJQycX6V8g8ybDFBe7tN1gf7OC/sWd/tCcWuUhJqaJ083sr
1N/XD1HJ8mLPntP7DYq5JQf7tMPt8rkR5w86P7xHYLuHQybHsERyuzuwbO6/Wvhg
JLENqN9o3l+sC08skJuCdZzC9j2JdA==
=ORhh
-----END PGP SIGNATURE-----

--fsnkhmf9WWev5GLc--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 19:51:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 19:51:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150671.278559 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Ud1-0001jG-QG; Mon, 05 Jul 2021 19:51:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150671.278559; Mon, 05 Jul 2021 19:51:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Ud1-0001j9-Mj; Mon, 05 Jul 2021 19:51:39 +0000
Received: by outflank-mailman (input) for mailman id 150671;
 Mon, 05 Jul 2021 19:51:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=rYQ2=L5=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m0Ud0-0001ix-Bx
 for xen-devel@lists.xenproject.org; Mon, 05 Jul 2021 19:51:38 +0000
Received: from out5-smtp.messagingengine.com (unknown [66.111.4.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9ce90abd-ea61-4516-ac18-d2476dffe446;
 Mon, 05 Jul 2021 19:51:37 +0000 (UTC)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
 by mailout.nyi.internal (Postfix) with ESMTP id 90A2F5C00E5;
 Mon,  5 Jul 2021 15:51:37 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute1.internal (MEProxy); Mon, 05 Jul 2021 15:51:37 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon,
 5 Jul 2021 15:51:35 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9ce90abd-ea61-4516-ac18-d2476dffe446
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=GcAJb1
	3oZBcAKhzUAGxOSPnGwgvzqoE1IRidewX0hco=; b=u8ir7vI0gZ28dMsA9I3elM
	gvJkKc7FYqqosmpLrgN1FmxXwwktdFo+4uPeMV7bVAoc8eRvV68Luz2XdR9kmAgu
	Kf4iUvC6PojzG9PtdBgoeGKJzKF7y3brqU39KKzsPz4phgDrKr9Cjc82zjK7VkOd
	VwsiA6R8zJNeEUhKqYa7OcDipYSZoHLpk0jtXIamOSQcw1tuaAIv/5NpB+Lv1f9f
	ROqYn9peZlZdnVTOf3/z0uEVoPAjZP37XEeK/gSQtPITC3E25EHGBdNtAD2cN71R
	7vvKFXU2DNasp+d8GJ5rmPAUtGFMT0emedQnyHayIv+ifUuthAa0vkDUpfanJ/Ug
	==
X-ME-Sender: <xms:yGLjYH1EdpONcsXm15NsGV5AsRMEepv7mnuZf0vbOBxxAcQMtkfo2A>
    <xme:yGLjYGGTFdzdxRw999MWoVEMfjKZUMTpjB5ClbuCS5Rnjb6LOVk29UsN5mOqpdq5L
    5Ay5LuZ5PUwZQ>
X-ME-Received: <xmr:yGLjYH4-ZQpnltj0VJOYlAe4A5MvjzMqDDHCX51xDOseXXf9s4ME_agyNBVGS_XOdTdggY69j8bY4XGYuHDM_wk5u-YSL-BR>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrfeejgedgudegtdcutefuodetggdotefrod
    ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh
    necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd
    enucfjughrpeffhffvuffkfhggtggujgesghdtreertddtjeenucfhrhhomhepofgrrhgv
    khcuofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuceomhgrrhhmrghrvghksehinh
    hvihhsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepteev
    ffeigffhkefhgfegfeffhfegveeikeettdfhheevieehieeitddugeefteffnecuvehluh
    hsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghk
    sehinhhvihhsihgslhgvthhhihhnghhslhgrsgdrtghomh
X-ME-Proxy: <xmx:yGLjYM07TIi9JR6mc0xj-k40iHYq3Tu-jy4DlcYHrbtkWjUX2yTh-A>
    <xmx:yGLjYKFob6lP6uNFNTl5mUklApIe3xq6h2jo1kmy1VyFQpAGJKHRCQ>
    <xmx:yGLjYN_Ows-mB-Kbh92oBCUf70H5CwjXEjyhuQOkxJa4R9qGyGsN7w>
    <xmx:yWLjYGCRfBOc02Q0rWyQsafK3k72SHve6VCg4vgsqhvbLIanyXXNiQ>
Date: Mon, 5 Jul 2021 21:51:32 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Olaf Hering <olaf@aepfle.de>, Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH 2/5] tools/python: fix Python3.4 TypeError in format
 string
Message-ID: <YONixKb69bK/PdMX@mail-itl>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
 <20210705191027.15107-3-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="Md0eUoqfxzWY0I/5"
Content-Disposition: inline
In-Reply-To: <20210705191027.15107-3-andrew.cooper3@citrix.com>


--Md0eUoqfxzWY0I/5
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Mon, 5 Jul 2021 21:51:32 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Olaf Hering <olaf@aepfle.de>, Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH 2/5] tools/python: fix Python3.4 TypeError in format
 string

On Mon, Jul 05, 2021 at 08:10:24PM +0100, Andrew Cooper wrote:
> From: Olaf Hering <olaf@aepfle.de>
>=20
> Using the first element of a tuple for a format specifier fails with
> python3.4 as included in SLE12:
>     b =3D b"string/%x" % (i, )
> TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
>=20
> It happens to work with python 2.7 and 3.6.
> To support older Py3, format as strings and explicitly encode as ASCII.
>=20
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Marek Marczykowski-G=C3=B3recki <marmarek@invisiblethingslab.com>

> ---
>  tools/python/scripts/convert-legacy-stream | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>=20
> diff --git a/tools/python/scripts/convert-legacy-stream b/tools/python/sc=
ripts/convert-legacy-stream
> index 227e1b5c3fd3..7fe375a66810 100755
> --- a/tools/python/scripts/convert-legacy-stream
> +++ b/tools/python/scripts/convert-legacy-stream
> @@ -346,9 +346,9 @@ def read_libxl_toolstack(vm, data):
>          if bytearray(name)[-1] !=3D 0:
>              raise StreamError("physmap name not NUL terminated")
> =20
> -        root =3D b"physmap/%x" % (phys, )
> -        kv =3D [root + b"/start_addr", b"%x" % (start, ),
> -              root + b"/size",       b"%x" % (size, ),
> +        root =3D ("physmap/%x" % (phys, )).encode('ascii')
> +        kv =3D [root + b"/start_addr", ("%x" % (start, )).encode('ascii'=
),
> +              root + b"/size",       ("%x" % (size, )).encode('ascii'),
>                root + b"/name",       name[:-1]]
> =20
>          for key, val in zip(kv[0::2], kv[1::2]):
> --=20
> 2.11.0
>=20

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--Md0eUoqfxzWY0I/5
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmDjYsUACgkQ24/THMrX
1yzVhwf9G8Boxg811OmgffjkUk7meSDmzPsGU6pL4l15jUZYyeFPQ4uuhtvmZAOz
MmoHUEnEKk1SNIFllEvcz5tHH0Bj5zRhoiD4mvwthiKh4QIWA50KpXm//k4tU/K3
4vn3wktPau9+r49q+73u7uCc1CVm4efEfHPhHPyRsI87657jF/8rH5GoB/Mc+1Kd
PCdjVfm0dlPcPPFuGa07Xfw7v+ZGWP8GIdFHwtF/iv8UTzwRJG+inVJiZ1x0SAwp
p3aZdvFPNH8yPz/BxZOrsH0E7qmPAYL+6C22RcxXmb5e/ldTTZoMHiVlogDoOoCb
FAcxECPDcLwptVM74sReJm8TTSNrmg==
=uWS4
-----END PGP SIGNATURE-----

--Md0eUoqfxzWY0I/5--


From xen-devel-bounces@lists.xenproject.org Mon Jul 05 20:49:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 05 Jul 2021 20:49:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150678.278570 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0VX4-0006fM-1c; Mon, 05 Jul 2021 20:49:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150678.278570; Mon, 05 Jul 2021 20:49:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0VX3-0006fF-Ua; Mon, 05 Jul 2021 20:49:33 +0000
Received: by outflank-mailman (input) for mailman id 150678;
 Mon, 05 Jul 2021 20:49:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0VX2-0006f5-Tf; Mon, 05 Jul 2021 20:49:32 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0VX2-0007Tw-O7; Mon, 05 Jul 2021 20:49:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0VX2-0008DJ-DB; Mon, 05 Jul 2021 20:49:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0VX2-0008Vr-Cd; Mon, 05 Jul 2021 20:49:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=bNYbup+dd7FShgD6d5pVDMfhCxhY6FYcsW1kS3UjhEE=; b=vxSo8TI3wsxtoLFH8l4rJfeb6X
	kh9Jtl4+7Gvfh2I8bQw7m8hbtfLMZpAZnsX2i7sTTWrVx8VaLXelydOer9/KBTHjK5/wX8ZZO+zkI
	HbR0bgowhD2RcmTG8dKDVpkYEYMKZBngH/HOchnRT3DF6s58W7veCMAVak+KH/vNOgrQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163312-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163312: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=44ced03798d3af47577af3e7a865be33383766d0
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 05 Jul 2021 20:49:32 +0000

flight 163312 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163312/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 44ced03798d3af47577af3e7a865be33383766d0
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   31 days
Failing since        162368  2021-06-04 15:42:59 Z   31 days   88 attempts
Testing same since   163312  2021-07-05 12:41:15 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3263 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 00:31:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 00:31:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150688.278584 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Yzl-0001Wz-Rv; Tue, 06 Jul 2021 00:31:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150688.278584; Tue, 06 Jul 2021 00:31:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0Yzl-0001Ws-Oo; Tue, 06 Jul 2021 00:31:25 +0000
Received: by outflank-mailman (input) for mailman id 150688;
 Tue, 06 Jul 2021 00:31:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Yzk-0001Wi-NN; Tue, 06 Jul 2021 00:31:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Yzk-0003B8-GD; Tue, 06 Jul 2021 00:31:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Yzk-0002t6-5e; Tue, 06 Jul 2021 00:31:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0Yzk-0005l2-59; Tue, 06 Jul 2021 00:31:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LR6rvUpF3l4JweDMDCV0cs/AAPeiAhPUahZ7dvdDTVs=; b=1OhTkG5nc2dcuvOj5F1kn+zbri
	C2fp3maFViVhkso9LUJZVTY68uRZ3N00f0FU0j0xw28szcOpLy0WGQZTmuExKWZ5dm3PbORz0+J10
	MObAfgTfyXnSLuPjmV+oAc6sj/YIPirE4v/MIRE76nvpv6ffD7MeOTfpfNr9waXwWAeM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163311-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163311: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=4fb2820854a796ab75ffb2ec896b67268281ecde
X-Osstest-Versions-That:
    qemuu=711c0418c8c1ce3a24346f058b001c4c5a2f0f81
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 00:31:24 +0000

flight 163311 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163311/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163303
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163303
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163303
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163303
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163303
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163303
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163303
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                4fb2820854a796ab75ffb2ec896b67268281ecde
baseline version:
 qemuu                711c0418c8c1ce3a24346f058b001c4c5a2f0f81

Last test of basis   163303  2021-07-04 21:08:01 Z    1 days
Testing same since   163311  2021-07-05 12:09:09 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Marcel Apfelbaum <marcel@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  VictorV (Kunlun Lab) <vv474172261@gmail.com>
  Yuval Shaia <yuval.shaia.ml@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   711c0418c8..4fb2820854  4fb2820854a796ab75ffb2ec896b67268281ecde -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 04:37:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 04:37:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150697.278598 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0cpf-0006t9-Mn; Tue, 06 Jul 2021 04:37:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150697.278598; Tue, 06 Jul 2021 04:37:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0cpf-0006t1-H4; Tue, 06 Jul 2021 04:37:15 +0000
Received: by outflank-mailman (input) for mailman id 150697;
 Tue, 06 Jul 2021 04:37:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0cpd-0006sr-Pg; Tue, 06 Jul 2021 04:37:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0cpd-0008MT-Iy; Tue, 06 Jul 2021 04:37:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0cpd-0007Sz-5k; Tue, 06 Jul 2021 04:37:13 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0cpd-0007Br-52; Tue, 06 Jul 2021 04:37:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=yq5aePFIQw2e1G06RBPTmYwtEjT7dPNxBSVnu6Sc/UU=; b=mPWqBaF/alEuwsgzxlP0wEHcxe
	HPQIG4CjkpjY1S/GKL3wv0wfAp3dhQZ7i1GbuL+UABjT2jgofwfs56rAt6YJ/YA5Z+0pg6oi2jGLH
	8hyYM2cgeIOaYpeYR9iaRaoZUS0xe0gHQUwIZyPA49/xcnEdFADnsO6KFlkTed2F8zLs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163313-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163313: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=383b41974d5543b62f3181d216070fe3691fb130
X-Osstest-Versions-That:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 04:37:13 +0000

flight 163313 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163313/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  383b41974d5543b62f3181d216070fe3691fb130
baseline version:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8

Last test of basis   163305  2021-07-05 01:53:46 Z    1 days
Testing same since   163313  2021-07-05 14:38:57 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Olaf Hering <olaf@aepfle.de>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   74d044d51b..383b41974d  383b41974d5543b62f3181d216070fe3691fb130 -> master


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 04:49:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 04:49:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150708.278620 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0d0y-0008T1-Q9; Tue, 06 Jul 2021 04:48:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150708.278620; Tue, 06 Jul 2021 04:48:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0d0y-0008Su-MB; Tue, 06 Jul 2021 04:48:56 +0000
Received: by outflank-mailman (input) for mailman id 150708;
 Tue, 06 Jul 2021 04:48:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=O3el=L6=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m0d0x-0008So-AZ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 04:48:55 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e8ecf833-2c27-4caf-8ae2-18cb4d664dfb;
 Tue, 06 Jul 2021 04:48:54 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 25C5068BEB; Tue,  6 Jul 2021 06:48:49 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e8ecf833-2c27-4caf-8ae2-18cb4d664dfb
Date: Tue, 6 Jul 2021 06:48:48 +0200
From: Christoph Hellwig <hch@lst.de>
To: Will Deacon <will@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>,
	Claire Chang <tientzu@chromium.org>,
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210706044848.GA13640@lst.de>
References: <YNvMDFWKXSm4LRfZ@Ryzen-9-3900X.localdomain> <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com> <20210630114348.GA8383@willie-the-truck> <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain> <20210701074045.GA9436@willie-the-truck> <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org> <20210702135856.GB11132@willie-the-truck> <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com> <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain> <20210705190352.GA19461@willie-the-truck>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210705190352.GA19461@willie-the-truck>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Mon, Jul 05, 2021 at 08:03:52PM +0100, Will Deacon wrote:
> So at this point, the AMD IOMMU driver does:
> 
> 	swiotlb        = (iommu_default_passthrough() || sme_me_mask) ? 1 : 0;
> 
> where 'swiotlb' is a global variable indicating whether or not swiotlb
> is in use. It's picked up a bit later on by pci_swiotlb_late_init(), which
> will call swiotlb_exit() if 'swiotlb' is false.
> 
> Now, that used to work fine, because swiotlb_exit() clears
> 'io_tlb_default_mem' to NULL, but now with the restricted DMA changes, I
> think that all the devices which have successfully probed beforehand will
> have stale pointers to the freed structure in their 'dev->dma_io_tlb_mem'
> field.

Yeah.  I don't think we can do that anymore, and I also think it is
a bad idea to start with.


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 04:57:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 04:57:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150714.278630 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0d8w-0001Qy-JD; Tue, 06 Jul 2021 04:57:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150714.278630; Tue, 06 Jul 2021 04:57:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0d8w-0001Qr-GE; Tue, 06 Jul 2021 04:57:10 +0000
Received: by outflank-mailman (input) for mailman id 150714;
 Tue, 06 Jul 2021 04:57:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lKi3=L6=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0d8w-0001Ql-0U
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 04:57:10 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9dcb5ff0-de16-11eb-846d-12813bfff9fa;
 Tue, 06 Jul 2021 04:57:08 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id EF7CC22410;
 Tue,  6 Jul 2021 04:57:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id BA30E133D1;
 Tue,  6 Jul 2021 04:57:07 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id cn7UK6Pi42D0CQAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 06 Jul 2021 04:57:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9dcb5ff0-de16-11eb-846d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625547427; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=we4aQ9bgJi8oO7TyZ9i70tC3dDEzHUKuIJZVcNUOzm4=;
	b=TnMVUe+N815+iGUCC/Tdf0gCc8gJUZa3YkabfwobJOqL8GHTrihKthCrSqISs6ENli0wPY
	B0MnLsrxIkX7bzDNu8w7KiqfC/CzOJItIuVN7FAIXTaPsbtqawEBRd+/9nzZqVTm+nDmTG
	JJ+Kv2++dizcy62+vntFL7iABU3gIh0=
Subject: Re: [PATCH 5/5] tools/migration: unify type checking for data pfns in
 migration stream
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 Xen-devel <xen-devel@lists.xenproject.org>
Cc: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
 <marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
 <20210705191027.15107-6-andrew.cooper3@citrix.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <59952c5b-99f5-bee1-dffd-fadfc7eeebbf@suse.com>
Date: Tue, 6 Jul 2021 06:57:06 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <20210705191027.15107-6-andrew.cooper3@citrix.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="LMgrdzeDtmIaVzo9MBrCnAOvbXQzkS5Ap"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--LMgrdzeDtmIaVzo9MBrCnAOvbXQzkS5Ap
Content-Type: multipart/mixed; boundary="fwTYCk8myccwdJyQsIK2IoKIeRdDABOTX";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 Xen-devel <xen-devel@lists.xenproject.org>
Cc: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
 <marmarek@invisiblethingslab.com>, Olaf Hering <olaf@aepfle.de>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Message-ID: <59952c5b-99f5-bee1-dffd-fadfc7eeebbf@suse.com>
Subject: Re: [PATCH 5/5] tools/migration: unify type checking for data pfns in
 migration stream
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
 <20210705191027.15107-6-andrew.cooper3@citrix.com>
In-Reply-To: <20210705191027.15107-6-andrew.cooper3@citrix.com>

--fwTYCk8myccwdJyQsIK2IoKIeRdDABOTX
Content-Type: multipart/mixed;
 boundary="------------27C4BD8B7CCF53C9A4ADFD15"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------27C4BD8B7CCF53C9A4ADFD15
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 05.07.21 21:10, Andrew Cooper wrote:
> From: Olaf Hering <olaf@aepfle.de>
>=20
> Introduce a helper which decides if a given pfn type has data
> in the migration stream.
>=20
> No change in behaviour intended, except for invalid page types which no=
w
> have a safer default.
>=20
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

--------------27C4BD8B7CCF53C9A4ADFD15
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------27C4BD8B7CCF53C9A4ADFD15--

--fwTYCk8myccwdJyQsIK2IoKIeRdDABOTX--

--LMgrdzeDtmIaVzo9MBrCnAOvbXQzkS5Ap
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDj4qMFAwAAAAAACgkQsN6d1ii/Ey/T
XQf+IGubU+AAPJHCCfnV0+noKjuCh0iZRDYWcKZyZurLTxo5IS9DSZ3I4nzQPQG39GigR/n9rsw+
9Uagl/1R++LsxDOYi5jn93cu7G/4vkLG6+1gZM7csjF7yVucR7QsbFcT0KYrFll/0Yf7ybV7jbY2
sxi07nWzvBDnqSza1TPPg6GdPbKawnqbyHuoCy6SZjxHe5WncgG+UEybWXBpgT2zonpgfZguEi0N
hhKzpBoNC3XqWGK2dfvP9R8S+YGgHthJKjE9jNxAwtAhCjXo+k7ypCgPdqNlE6oIYdkihUEtp4yV
ySaCDzySsYrW7g24MjA1FAXzilIO+VTvaRWH1FAtvw==
=gRdr
-----END PGP SIGNATURE-----

--LMgrdzeDtmIaVzo9MBrCnAOvbXQzkS5Ap--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 05:59:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 05:59:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150721.278642 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0e73-0001Tk-7w; Tue, 06 Jul 2021 05:59:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150721.278642; Tue, 06 Jul 2021 05:59:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0e73-0001Td-4O; Tue, 06 Jul 2021 05:59:17 +0000
Received: by outflank-mailman (input) for mailman id 150721;
 Tue, 06 Jul 2021 05:59:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Dpqu=L6=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0e72-0001TW-7F
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 05:59:16 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.0.56]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 49cbe287-de1f-11eb-846f-12813bfff9fa;
 Tue, 06 Jul 2021 05:59:13 +0000 (UTC)
Received: from AM5PR0601CA0073.eurprd06.prod.outlook.com (2603:10a6:206::38)
 by DB7PR08MB3738.eurprd08.prod.outlook.com (2603:10a6:10:7a::31) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 05:59:11 +0000
Received: from AM5EUR03FT022.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:0:cafe::fe) by AM5PR0601CA0073.outlook.office365.com
 (2603:10a6:206::38) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Tue, 6 Jul 2021 05:59:11 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT022.mail.protection.outlook.com (10.152.16.79) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 05:59:10 +0000
Received: ("Tessian outbound c836dc7aad98:v97");
 Tue, 06 Jul 2021 05:59:09 +0000
Received: from dbf754aa2c3b.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 B996F37D-1925-4475-9D37-50FEA8A8E971.1; 
 Tue, 06 Jul 2021 05:59:03 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dbf754aa2c3b.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 05:59:03 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB3149.eurprd08.prod.outlook.com (2603:10a6:803:41::29)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Tue, 6 Jul
 2021 05:58:58 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 05:58:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 49cbe287-de1f-11eb-846f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pFnMRur24KaqQZvrf7ArxZ/FNiYv2ECrSu3iKardmQg=;
 b=ynbTwj3PfhWraRX1EhCefZMe7BPkQdIDD4/hhsHLif5mRAlH35CVVET+ivp67X6lBHgjy3SW6NTyVcxXPlS/OUlzMKot/6AxrGFVKd9OEllzQpP7mQiQjUJFuOjYQutMvI4IdoUHNoLEXZ/QcGmriNTO7npuVaAzv274ZC9WnM4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=U9A/waJDrJhPi6DpvDoAnbv9SY9RIlqS/tW8HRA+X2U0OfxLfq8DsIWLkxW/L5ZqJ50FvwrhPK+eI689o9cJv6+0l6tqpgCCI6MA2+80gV7g4fESpu6vk62MHqs/EiwbQT0RPm/pVwTdabzMvg5dyGrKn3uUJsoe/tYJ4oN6zaX2Gh6F7vbDREndPncJjUIrGoMPqObmkW1BW+FCwuxvUPS2Tc3Vk/5Hyo/zwX1lE8F56vcSxyOlhQiqVB5hnWF5uCP99a8izMQpyrlO19nkPkaSMb7xue4mgsbb1BzqWZiUyNAumzwFZ4Aan26q6WSu7euq3C/P3U29OOHIedd6+Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pFnMRur24KaqQZvrf7ArxZ/FNiYv2ECrSu3iKardmQg=;
 b=ky6EK+GJoLHT71x1uQrARo3Oc3hxWW4QHudW5dtaQA20oRCsTc7tI3Qd2IcHskjhi8CyjRDhkPbEl00mGaGKgVKHtFJBjurDXUBPWqpj3BA9KwEoY+Ii8nv2vdXael1nzoDhQrvjD0+4qBv7BUmYt1zhIULvmr9CYnGmeDP4VlyxPv3uJNZn2OBaHzh1L7CyFc3gzNaCqQHym6UMJ++5z2uS1fL+S0523vNpljUKAdTLTc/9C3KsX/TTL5sJaMHih5LR3dZ6h9lTu3eihzJ03z+P8V1pvlRHj2FZROfOPDTufK2jhnBIQvUwX0rbk+AC3YRgnG5qLTspsRXjNhbiaQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pFnMRur24KaqQZvrf7ArxZ/FNiYv2ECrSu3iKardmQg=;
 b=ynbTwj3PfhWraRX1EhCefZMe7BPkQdIDD4/hhsHLif5mRAlH35CVVET+ivp67X6lBHgjy3SW6NTyVcxXPlS/OUlzMKot/6AxrGFVKd9OEllzQpP7mQiQjUJFuOjYQutMvI4IdoUHNoLEXZ/QcGmriNTO7npuVaAzv274ZC9WnM4=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>
Subject: RE: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
Thread-Topic: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
Thread-Index: AQHXW0b5Q8/Ges+XOkqFV81MfBckcqsNDrqAgChoyZA=
Date: Tue, 6 Jul 2021 05:58:57 +0000
Message-ID:
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
In-Reply-To: <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 0C0D6A615092244FB14364E571D1B591.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.111]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: abdc5ff5-af43-4bdc-1503-08d940432c5b
x-ms-traffictypediagnostic: VI1PR08MB3149:|DB7PR08MB3738:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB7PR08MB37384075748F3B0D3BD14BF5F71B9@DB7PR08MB3738.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:3631;OLM:3631;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 sIzNsadZ0jFfXqOEvV+UO+KiGZ5QXp2Eek41McMW6Efr6uGV1B8MNdSenhiw6dzMYB19aXiIi1IXN/aMma+1XZODGgqRx8We/wbnPPYAZX5lc4cwn6RMC4aQoHyBEfVRehIXczvl7TtvBcI3X1oDjkPJ2NyI6zLtCmON9n1MRmSwcglQBeS2lU1nL7XjoK1+pTuBt0i7a4at1rYC5Zm94eFI1Ieucn8YjQAN7Rj49d6vkiKfC+wA3gYo9ds2+slAQq/YOKld7juLJxWIDeB+p0ErNGtX5cPQVmqZHZWVVjbaY+d7rlrM0lDN0KOOPD7fdbbP/xoNl8yjBWAg443Ms+BD4jAKe6Jb/VZmNHLTpcP8+SuwrZe7pcxIriroPYo35HpujkkCuwkJ67ya7bapQcyHcBUod1aa0MpsTCwC0R45yTmh7zxqB2bSSaVo0s/GJ503DQwzVAjXDzdyagZDSw0Bb6l4V5XyT8Ri2N0gSmMQ1568UUZdE0vV2XZ7ei9dqb6RBg7LixMQvJzD407ZQWRzr/xWGQ/TljOSJYiwS5todeTAQ8gkzBtYsbbr6aHTmBf6Ucoz2zfElWuxbOW89qXfoM6In5/01+CZ3OMP/nmhbOCgweokDCVH2RvadhuFABDoe9f9pRIXP8vzo8hwsQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(39860400002)(396003)(346002)(136003)(86362001)(30864003)(2906002)(7696005)(66476007)(76116006)(33656002)(52536014)(54906003)(66556008)(5660300002)(66446008)(8676002)(53546011)(6506007)(64756008)(478600001)(66946007)(71200400001)(8936002)(26005)(316002)(55016002)(186003)(83380400001)(9686003)(38100700002)(4326008)(110136005)(122000001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3149
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT022.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	2e45b121-20fc-4ac5-579a-08d94043251f
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	nSwgNeur5WKqbGNk7Ep3+mFcsgYDR4qiU9FuNyHC3hDF23vS+FmdEQis7oyNB6O4MRRhLhOgmR+VGYF45+xB2bycQQy70w4kIi4uDWl1VpFVJxargkrG9Ioski5hpYcSvsqlwHcCIE4Kb8DMbtu0C3QSxtrCou2FmcMdeTH21IQF2hgwCpkuKnjHWOm4TymOdMd+N+kVKJ7Uugt9O3fyA/Nsha28Y2/zLMe4wqGmY/7w6fr7TSst36itB5uDELdBHn6hwb5g+P+Z2yHp76cLVKcRImpgQISYpJEJP8QGeHrTQoWoPuZSQ5KS+PGiP8FwGk3YkwORfLY84FW40nCc0XfGJfP3Ar3dr6/gwT9mYEbWwXbBVLbFC4M4QLoCZA1mePZcVazexGk3E+UBwi67EU/Sg+dTpwoYOb1KLyVMUgCq6opy1zK0KsXIYEcQhqmQJrQ1yuvCVtyiTO7zLtZvU1pAPL4aMT221lbrowMKJB37RMDeXqOy3GfD5VN++OuqK0iAETdngVCSPE1kTHEHwiZeEZBAm3Cj48hOcFgKF903j0c02XuVKbVZCL3Trfl+UrW5mxNWFvvPfXfb96m73CQElcNVShljcEucvrA1IK8Sc+Zmwto6Vmk4TwnnkkJ5z7nE4S5s0pV1DrSk0DBjthdyi6DEONMXV7otnnv8XghQ5HWPm8viGQe0jG3O80N12xR32my/SrGEYE+naMahYA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(346002)(39860400002)(136003)(36840700001)(46966006)(7696005)(70206006)(53546011)(6506007)(47076005)(356005)(86362001)(36860700001)(70586007)(82310400003)(2906002)(9686003)(52536014)(5660300002)(8936002)(4326008)(110136005)(81166007)(33656002)(54906003)(8676002)(316002)(336012)(55016002)(82740400003)(478600001)(26005)(186003)(30864003)(107886003)(83380400001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 05:59:10.0009
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: abdc5ff5-af43-4bdc-1503-08d940432c5b
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT022.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3738

SGkNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBKYW4gQmV1bGljaCA8
amJldWxpY2hAc3VzZS5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBKdW5lIDEwLCAyMDIxIDY6MjMg
UE0NCj4gVG86IFBlbm55IFpoZW5nIDxQZW5ueS5aaGVuZ0Bhcm0uY29tPg0KPiBDYzogQmVydHJh
bmQgTWFycXVpcyA8QmVydHJhbmQuTWFycXVpc0Bhcm0uY29tPjsgV2VpIENoZW4NCj4gPFdlaS5D
aGVuQGFybS5jb20+OyB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7DQo+IHNzdGFiZWxs
aW5pQGtlcm5lbC5vcmc7IGp1bGllbkB4ZW4ub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNi85
XSB4ZW4vYXJtOiBpbnRyb2R1Y2UgYWxsb2Nfc3RhdGljbWVtX3BhZ2VzIGFuZA0KPiBhbGxvY19k
b21zdGF0aWNfcGFnZXMNCj4gDQo+IE9uIDA3LjA2LjIwMjEgMDQ6NDMsIFBlbm55IFpoZW5nIHdy
b3RlOg0KPiA+IGFsbG9jX3N0YXRpY21lbV9wYWdlcyBhaW1zIHRvIGFsbG9jYXRlIG5yX21mbnMg
Y29udGlndW91cyBwYWdlcyBvZg0KPiA+IHN0YXRpYyBtZW1vcnkuIEFuZCBpdCBpcyB0aGUgZXF1
aXZhbGVudCBvZiBhbGxvY19oZWFwX3BhZ2VzIGZvciBzdGF0aWMNCj4gPiBtZW1vcnkuIEhlcmUg
b25seSBjb3ZlcnMgYWxsb2NhdGluZyBhdCBzcGVjaWZpZWQgc3RhcnRpbmcgYWRkcmVzcy4NCj4g
Pg0KPiA+IEZvciBlYWNoIHBhZ2UsIGl0IHNoYWxsIGNoZWNrIGlmIHRoZSBwYWdlIGlzIHJlc2Vy
dmVkKFBHQ19yZXNlcnZlZCkNCj4gPiBhbmQgZnJlZS4gSXQgc2hhbGwgYWxzbyBkbyBhIHNldCBv
ZiBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24sIHdoaWNoDQo+ID4gYXJlIG1vc3RseSB0aGUgc2Ft
ZSBvbmVzIGluIGFsbG9jX2hlYXBfcGFnZXMsIGxpa2UsIGZvbGxvd2luZyB0aGUgc2FtZQ0KPiA+
IGNhY2hlLWNvaGVyZW5jeSBwb2xpY3kgYW5kIHR1cm5pbmcgcGFnZSBzdGF0dXMgaW50byBQR0Nf
c3RhdGVfaW51c2UsIGV0Yy4NCj4gPg0KPiA+IGFsbG9jX2RvbXN0YXRpY19wYWdlcyBpcyB0aGUg
ZXF1aXZhbGVudCBvZiBhbGxvY19kb21oZWFwX3BhZ2VzIGZvcg0KPiA+IHN0YXRpYyBtbWVvcnks
IGFuZCBpdCBpcyB0byBhbGxvY2F0ZSBucl9tZm5zIHBhZ2VzIG9mIHN0YXRpYyBtZW1vcnkNCj4g
PiBhbmQgYXNzaWduIHRoZW0gdG8gb25lIHNwZWNpZmljIGRvbWFpbi4NCj4gPg0KPiA+IEl0IHVz
ZXMgYWxsb2Nfc3RhdGljbWVuX3BhZ2VzIHRvIGdldCBucl9tZm5zIHBhZ2VzIG9mIHN0YXRpYyBt
ZW1vcnksDQo+ID4gdGhlbiBvbiBzdWNjZXNzLCBpdCB3aWxsIHVzZSBhc3NpZ25fcGFnZXNfbnIg
dG8gYXNzaWduIHRob3NlIHBhZ2VzIHRvDQo+ID4gb25lIHNwZWNpZmljIGRvbWFpbi4NCj4gPg0K
PiA+IFNpZ25lZC1vZmYtYnk6IFBlbm55IFpoZW5nIDxwZW5ueS56aGVuZ0Bhcm0uY29tPg0KPiA+
IC0tLQ0KPiA+IGNoYW5nZXMgdjI6DQo+ID4gLSB1c2UgbWZuX3ZhbGlkKCkgdG8gZG8gdmFsaWRh
dGlvbg0KPiA+IC0gY2hhbmdlIHBmbi1uYW1lZCB0byBtZm4tbmFtZWQNCj4gPiAtIHB1dCBDT05G
SUdfU1RBVElDX0FMTE9DQVRJT04gYXJvdW5kIHRvIHJlbW92ZSBkZWFkIGNvZGVzDQo+ID4gLSBj
b3JyZWN0IG9mZi1ieS1vbmUgaW5kZW50YXRpb24NCj4gPiAtIHJlbW92ZSBtZWFuaW5nbGVzcyBN
RU1GX25vX293bmVyIGNhc2UNCj4gPiAtIGxlYXZlIHpvbmUgY29uY2VwdCBvdXQgb2YgRE1BIGxp
bWl0YXRpb24gY2hlY2sNCj4gPiAtLS0NCj4gPiAgeGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMgfCAx
MjkNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICB4ZW4v
aW5jbHVkZS94ZW4vbW0uaCAgICB8ICAgMiArDQo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMTMxIGlu
c2VydGlvbnMoKykNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3BhZ2VfYWxsb2Mu
YyBiL3hlbi9jb21tb24vcGFnZV9hbGxvYy5jIGluZGV4DQo+ID4gZTI0NGQyZTUyZS4uYTBlZWE1
ZjFhNCAxMDA2NDQNCj4gPiAtLS0gYS94ZW4vY29tbW9uL3BhZ2VfYWxsb2MuYw0KPiA+ICsrKyBi
L3hlbi9jb21tb24vcGFnZV9hbGxvYy5jDQo+ID4gQEAgLTEwNjUsNiArMTA2NSw3NSBAQCBzdGF0
aWMgc3RydWN0IHBhZ2VfaW5mbyAqYWxsb2NfaGVhcF9wYWdlcygNCj4gPiAgICAgIHJldHVybiBw
ZzsNCj4gPiAgfQ0KPiA+DQo+ID4gKyNpZmRlZiBDT05GSUdfU1RBVElDX0FMTE9DQVRJT04NCj4g
PiArLyoNCj4gPiArICogQWxsb2NhdGUgbnJfbWZucyBjb250aWd1b3VzIHBhZ2VzLCBzdGFydGlu
ZyBhdCAjc21mbiwgb2Ygc3RhdGljIG1lbW9yeS4NCj4gPiArICogSXQgaXMgdGhlIGVxdWl2YWxl
bnQgb2YgYWxsb2NfaGVhcF9wYWdlcyBmb3Igc3RhdGljIG1lbW9yeSAgKi8NCj4gPiArc3RhdGlj
IHN0cnVjdCBwYWdlX2luZm8gKmFsbG9jX3N0YXRpY21lbV9wYWdlcyh1bnNpZ25lZCBsb25nIG5y
X21mbnMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWZuX3Qgc21mbiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpDQo+ID4gK3sNCj4gPiArICAgIGJvb2wg
bmVlZF90bGJmbHVzaCA9IGZhbHNlOw0KPiA+ICsgICAgdWludDMyX3QgdGxiZmx1c2hfdGltZXN0
YW1wID0gMDsNCj4gPiArICAgIHVuc2lnbmVkIGxvbmcgaTsNCj4gPiArICAgIHN0cnVjdCBwYWdl
X2luZm8gKnBnOw0KPiA+ICsNCj4gPiArICAgIC8qIEZvciBub3csIGl0IG9ubHkgc3VwcG9ydHMg
YWxsb2NhdGluZyBhdCBzcGVjaWZpZWQgYWRkcmVzcy4gKi8NCj4gPiArICAgIGlmICggIW1mbl92
YWxpZChzbWZuKSB8fCAhbnJfbWZucyApDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgICAgcHJpbnRr
KFhFTkxPR19FUlINCj4gPiArICAgICAgICAgICAgICAgIkludmFsaWQgJWx1IHN0YXRpYyBtZW1v
cnkgc3RhcnRpbmcgYXQgJSJQUklfbWZuIlxuIiwNCj4gDQo+IFJlYWRpbmcgYSBsb2cgY29udGFp
bmluZyBlLmcuICJJbnZhbGlkIDAgc3RhdGljIG1lbW9yeSBzdGFydGluZyBhdCAuLi4iIEkgZG9u
J3QNCj4gdGhpbmsgSSB3b3VsZCByZWNvZ25pemUgdGhhdCB0aGUgIjAiIGlzIHRoZSBjb3VudCBv
ZiBwYWdlcy4NCj4gDQoNClN1cmUuIEhvdyBhYm91dCAidHJ5IHRvIGFsbG9jYXRlIG91dCBvZiBy
YW5nZSBwYWdlICUiUFJJX21mbiJcbiI/DQoNCj4gPiArICAgICAgICAgICAgICAgbnJfbWZucywg
bWZuX3goc21mbikpOw0KPiA+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+
ICsgICAgcGcgPSBtZm5fdG9fcGFnZShzbWZuKTsNCj4gPiArDQo+ID4gKyAgICBmb3IgKCBpID0g
MDsgaSA8IG5yX21mbnM7IGkrKyApDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgICAgLyoNCj4gPiAr
ICAgICAgICAgKiBSZWZlcmVuY2UgY291bnQgbXVzdCBjb250aW51b3VzbHkgYmUgemVybyBmb3Ig
ZnJlZSBwYWdlcw0KPiA+ICsgICAgICAgICAqIG9mIHN0YXRpYyBtZW1vcnkoUEdDX3Jlc2VydmVk
KS4NCj4gPiArICAgICAgICAgKi8NCj4gPiArICAgICAgICBBU1NFUlQocGdbaV0uY291bnRfaW5m
byAmIFBHQ19yZXNlcnZlZCk7DQo+IA0KPiBXaGF0IGxvZ2ljIGVsc2V3aGVyZSBndWFyYW50ZWVz
IHRoYXQgdGhpcyB3aWxsIGhvbGQ/IEFTU0VSVCgpcyBhcmUgdG8gdmVyaWZ5DQo+IHRoYXQgYXNz
dW1wdGlvbnMgYXJlIG1ldC4gQnV0IEkgZG9uJ3QgdGhpbmsgeW91IGNhbiBzZW5zaWJseSBhc3N1
bWUgdGhlIGNhbGxlcg0KPiBrbm93cyB0aGUgcmFuZ2UgaXMgcmVzZXJ2ZWQgKGFuZCBmcmVlKSwg
b3IgZWxzZSB5b3UgY291bGQgZ2V0IGF3YXkgd2l0aG91dCBhbnkNCj4gYWxsb2NhdGlvbiBmdW5j
dGlvbi4NCj4gDQoNClRoZSBjYWxsZXIgc2hhbGwgb25seSBjYWxsIGFsbG9jX3N0YXRpY21lbV9w
YWdlcyB3aGVuIGl0IGtub3dzIHJhbmdlIGlzIHJlc2VydmVkLA0KbGlrZSwgYWxsb2Nfc3RhdGlj
bWVtX3BhZ2VzIGlzIG9ubHkgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGFsbG9jX2RvbXN0YXRp
Y19wYWdlcw0KZm9yIG5vdy4NCg0KTm9ybWFsIGRvbWFpbiB1c2VzIGFsbG9jX2hlYXBfcGFnZXMv
YWxsb2NfZG9taGVhcF9wYWdlcyB0byBkbyB0aGUgYWxsb2NhdGlvbi4NCg0KUHJvcGVyIGluaXRp
YWxpemF0aW9uIG11c3QgaGFwcGVuIGJlZm9yZSBhbGxvY2F0aW9uLiBJbml0X3N0YXRpY21lbV9w
YWdlcyBzaGFsbCBiZQ0KY2FsbGVkIGJlZm9yZSBhbGxvY19zdGF0aWNtZW1fcGFnZXMuIEFuZCB3
ZSBzZXQgUEdDX3Jlc2VydmVkIGluIGluaXRfc3RhdGljbWVtX3BhZ2VzLg0KDQpTbyBoZXJlIEkg
dXNlIEFTU0VSVCgpcyB0byBjaGVjayB3aGV0aGVyIGFib3ZlIHByb3BlciBpbml0aWFsaXphdGlv
biBpcyBtZXQuDQoNCj4gPiArICAgICAgICBpZiAoIChwZ1tpXS5jb3VudF9pbmZvICYgflBHQ19y
ZXNlcnZlZCkgIT0gUEdDX3N0YXRlX2ZyZWUgKQ0KPiA+ICsgICAgICAgIHsNCj4gPiArICAgICAg
ICAgICAgcHJpbnRrKFhFTkxPR19FUlINCj4gPiArICAgICAgICAgICAgICAgICAgICJSZWZlcmVu
Y2UgY291bnQgbXVzdCBjb250aW51b3VzbHkgYmUgemVybyBmb3IgZnJlZSBwYWdlcyINCj4gPiAr
ICAgICAgICAgICAgICAgICAgICJwZ1slbHVdIE1GTiAlIlBSSV9tZm4iIGM9JSNseCB0PSUjeFxu
IiwNCj4gPiArICAgICAgICAgICAgICAgICAgIGksIG1mbl94KHBhZ2VfdG9fbWZuKHBnICsgaSkp
LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgcGdbaV0uY291bnRfaW5mbywgcGdbaV0udGxiZmx1
c2hfdGltZXN0YW1wKTsNCj4gPiArICAgICAgICAgICAgQlVHKCk7DQo+ID4gKyAgICAgICAgfQ0K
PiANCj4gVGhlIHNhbWUgYXBwbGllcyBoZXJlIGF0IGxlYXN0IHVudGlsIHByb3BlciBsb2NraW5n
IGdldHMgYWRkZWQsIHdoaWNoIEkgZ3Vlc3MgaXMNCj4gaGFwcGVuaW5nIGluIHRoZSBuZXh0IHBh
dGNoIHdoZW4gcmVhbGx5IGl0IHdvdWxkIG5lZWQgdG8gaGFwcGVuIHJpZ2h0IGhlcmUuDQo+DQoN
Ck9rLCBJIHdpbGwgY29tYmluZSB0d28gY29tbWl0cyB0b2dldGhlciwgYW5kIGFkZCBsb2NraW5n
IGhlcmUuIA0KSSB0aG91Z2h0IHRoZSBjb250ZW50IG9mIHRoaXMgY29tbWl0IGlzIGEgbGl0dGxl
IGJpdCB0b28gbXVjaCwgc28gbWF5YmUNCmFkZGluZyB0aGUgcHJvcGVyIGxvY2sgc2hhbGwgYmUg
Y3JlYXRlZCBhcyBhIG5ldyBwYXRjaC4g8J+YiQ0KIA0KPiBGdXJ0aGVybW9yZSBJIGRvbid0IHNl
ZSB3aHkgeW91IGRvbid0IGZvbGQgQVNTRVJUKCkgYW5kIGlmIGludG8NCj4gDQo+ICAgICAgICAg
aWYgKCBwZ1tpXS5jb3VudF9pbmZvICE9IChQR0Nfc3RhdGVfZnJlZSB8IFBHQ19yZXNlcnZlZCkg
KQ0KPiANCj4gQWZ0ZXIgYWxsIFBHQ19yZXNlcnZlZCBpcyBub3Qgc2ltaWxhciB0byBQR0NfbmVl
ZF9zY3J1Yiwgd2hpY2gNCj4gYWxsb2NfaGVhcF9wYWdlcygpIG1hc2tzIG91dCB0aGUgd2F5IHlv
dSBhbHNvIGhhdmUgaXQgaGVyZS4NCj4gDQoNCkkgdW5kZXJzdGFuZCB0aGF0IHlvdSBwcmVmZXIg
aWYgY29uZGl0aW9uIGlzIHBocmFzZWQgYXMgZm9sbG93czoNCiAJaWYgKCBwZ1tpXS5jb3VudF9p
bmZvICE9IChQR0Nfc3RhdGVfZnJlZSB8IFBHQ19yZXNlcnZlZCkgKQ0KQWdyZWUgdGhhdCBQR0Nf
cmVzZXJ2ZWQgc2hhbGwgaGFzIHRoZSBzYW1lIHBvc2l0aW9uIGFzIFBHQ19zdGF0ZV9mcmVlLg0K
SG1tbSwgZm9yIHdoeSBJIGRvbid0IGZvbGQgQVNTRVJUKCksIGRvIHlvdSBtZWFuIHRoYXQgDQpB
U1NFUlQocGdbaV0uY291bnRfaW5mbyA9PSAoUEdDX3N0YXRlX2ZyZWUgfCBQR0NfcmVzZXJ2ZWQp
KT8NCg0KPiBBcyB0byB0aGUgcHJpbnRrKCkgLSB0aGUgZXh0cmEgdmVyYm9zaXR5IGNvbXBhcmVk
IHRvIHRoZSBvcmlnaW5hbCBpc24ndCBoZWxwZnVsIG9yDQo+IG5lY2Vzc2FyeSBpbW8uIFRoZSBt
ZXNzYWdlIG5lZWRzIHRvIGJlIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBvdGhlciBvbmUsDQo+
IHllcywgc28gaXQgd291bGQgYmV0dGVyIG1lbnRpb24gInN0YXRpYyIgaW4gc29tZSB3YXkuIEJ1
dCB0aGUgcHJlZml4IHlvdSBoYXZlIGlzDQo+IHRvbyBsb25nIGZvciBteSB0YXN0ZSAoYW5kIGxh
Y2tzIGEgc2VwYXJhdGluZyBibGFuayBhbnl3YXkpLg0KPiANCg0KSWYgeW91IGRvbid0IGxpa2Ug
dGhlIGV4dHJhIHZlcmJvc2l0eSwgbWF5YmUganVzdA0KIiBTdGF0aWMgcGdbJWx1XSBNRk4gJSJQ
UklfbWZuIiBjPSUjbHggdD0lI3guXG4iPw0KDQo+IEFzIGEgc2VwYXJhdGUgbWF0dGVyIC0gaGF2
ZSB5b3UgZ2l2ZW4gdXAgb24gdGhlIGNvbmNlcHQgb2YgcmVzZXJ2aW5nIHBhcnRpY3VsYXINCj4g
bWVtb3J5IHJhbmdlcyBmb3IgX3BhcnRpY3VsYXJfIGd1ZXN0cz8gVGhlIGNvdmVyIGxldHRlciwg
c2F5aW5nICJTdGF0aWMNCj4gQWxsb2NhdGlvbiByZWZlcnMgdG8gc3lzdGVtIG9yDQo+IHN1Yi1z
eXN0ZW0oZG9tYWlucykgZm9yIHdoaWNoIG1lbW9yeSBhcmVhcyBhcmUgcHJlLWRlZmluZWQgYnkN
Cj4gY29uZmlndXJhdGlvbiB1c2luZyBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyIgYXMgdGhlIHZl
cnkgZmlyc3QgdGhpbmcsIGRvZXNuJ3QNCj4gc2VlbSB0byBzdWdnZXN0IHNvLg0KPiANCg0KWWVh
aCwgSSBtYXkgdGFrZSBzdWdnZXN0aW9uIGZyb20gSnVsaWVuIHRvIHJldHJpZXZlIHJlc2VydmVk
IG1lbSBpbmZvIGZyb20gZGV2aWNlIHRyZWUNCm9uIHJlYm9vdGluZy4gU28gaXQgbWF5IG5vdCBu
ZWVkIHN0b3JlIGRvbWFpbiBpbmZvIGluIHN0cnVjdCBwYWdlX2luZm8uDQoNCkFuZCBhbHNvIGZv
ciByZWJvb3RpbmcgZG9tYWluIG9uIHN0YXRpYyBhbGxvY2F0aW9uLCBpdCB3aWxsIG5vdCBiZSBp
bnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2ggc2VyaWUuDQpUaGlzIHBhdGNoIHNlcmllIG1heSBvbmx5
IGZvY3VzIG9uIGluaXRpYWxpemF0aW9uIGFuZCBhbGxvY2F0aW9uIHBhcnQuDQoNCj4gPiArICAg
ICAgICBpZiAoICEobWVtZmxhZ3MgJiBNRU1GX25vX3RsYmZsdXNoKSApDQo+ID4gKyAgICAgICAg
ICAgIGFjY3VtdWxhdGVfdGxiZmx1c2goJm5lZWRfdGxiZmx1c2gsICZwZ1tpXSwNCj4gPiArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGxiZmx1c2hfdGltZXN0YW1wKTsNCj4gPiAr
DQo+ID4gKyAgICAgICAgLyoNCj4gPiArICAgICAgICAgKiBQcmVzZXJ2ZSBmbGFnIFBHQ19yZXNl
cnZlZCBhbmQgY2hhbmdlIHBhZ2Ugc3RhdGUNCj4gPiArICAgICAgICAgKiB0byBQR0Nfc3RhdGVf
aW51c2UuDQo+ID4gKyAgICAgICAgICovDQo+ID4gKyAgICAgICAgcGdbaV0uY291bnRfaW5mbyA9
IChwZ1tpXS5jb3VudF9pbmZvICYgUEdDX3Jlc2VydmVkKSB8DQo+ID4gKyBQR0Nfc3RhdGVfaW51
c2U7DQo+IA0KPiBXaHkgbm90DQo+IA0KPiAgICAgICAgIHBnW2ldLmNvdW50X2luZm8gPSBQR0Nf
c3RhdGVfaW51c2UgfCBQR0NfcmVzZXJ2ZWQ7DQo+IA0KPiA/IEFnYWluLCBQR0NfcmVzZXJ2ZWQg
aXMgc3VmZmljaWVudGx5IGRpZmZlcmVudCBmcm9tIFBHQ19uZWVkX3NjcnViLg0KPiANCg0KU3Vy
ZS4gVGhhbmtzLiBZb3UncmUgcmlnaHQuDQoNCj4gPiArICAgICAgICAvKiBJbml0aWFsaXNlIGZp
ZWxkcyB3aGljaCBoYXZlIG90aGVyIHVzZXMgZm9yIGZyZWUgcGFnZXMuICovDQo+ID4gKyAgICAg
ICAgcGdbaV0udS5pbnVzZS50eXBlX2luZm8gPSAwOw0KPiA+ICsgICAgICAgIHBhZ2Vfc2V0X293
bmVyKCZwZ1tpXSwgTlVMTCk7DQo+ID4gKw0KPiA+ICsgICAgICAgIC8qDQo+ID4gKyAgICAgICAg
ICogRW5zdXJlIGNhY2hlIGFuZCBSQU0gYXJlIGNvbnNpc3RlbnQgZm9yIHBsYXRmb3JtcyB3aGVy
ZSB0aGUNCj4gPiArICAgICAgICAgKiBndWVzdCBjYW4gY29udHJvbCBpdHMgb3duIHZpc2liaWxp
dHkgb2YvdGhyb3VnaCB0aGUgY2FjaGUuDQo+ID4gKyAgICAgICAgICovDQo+ID4gKyAgICAgICAg
Zmx1c2hfcGFnZV90b19yYW0obWZuX3gocGFnZV90b19tZm4oJnBnW2ldKSksDQo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAhKG1lbWZsYWdzICYgTUVNRl9ub19pY2FjaGVfZmx1c2gp
KTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAoIG5lZWRfdGxiZmx1c2ggKQ0KPiA+
ICsgICAgICAgIGZpbHRlcmVkX2ZsdXNoX3RsYl9tYXNrKHRsYmZsdXNoX3RpbWVzdGFtcCk7DQo+
IA0KPiBEZXBlbmRpbmcgb24gd2hldGhlciBzdGF0aWMgcGFnZXMgaGF2ZSBhIGRlc2lnbmF0ZWQg
b3duZXIsIHRoaXMgbWF5IChhcw0KPiBzdWdnZXN0ZWQgYmVmb3JlKSBub3QgYmUgbmVjZXNzYXJ5
Lg0KPg0KDQpUaGlzIGhhcyBhbHNvIGJlZW4gZGlzY3Vzc2VkIGluIHBhdGNoIHYxfiBKdWxpZW4g
aGFzIHJlcGxpZWQgb24gaXQsIGhlcmUgbWF5IGp1c3QgcmVmZXINCndoYXQgaGUgc2FpZDoNCg0K
Ig0KSSB3b3VsZCByYXRoZXIgbm90IG1ha2UgdGhlIGFzc3VtcHRpb24uIEkgY2FuIHNlZSBmdXR1
cmUgd2hlcmUgd2UganVzdCANCndhbnQgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gYSBzdGF0aWMg
cG9vbCB0aGF0IG1heSBiZSBzaGFyZWQgd2l0aCANCm11bHRpcGxlIGRvbWFpbnMuDQoiDQogDQo+
ID4gQEAgLTIzMjYsNyArMjM5NSwxMSBAQCBpbnQgYXNzaWduX3BhZ2VzX25yKA0KPiA+DQo+ID4g
ICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucl9wZm5zOyBpKysgKQ0KPiA+ICAgICAgICAgIHsN
Cj4gPiArI2lmZGVmIENPTkZJR19TVEFUSUNfQUxMT0NBVElPTg0KPiA+ICsgICAgICAgICAgICBB
U1NFUlQoIShwZ1tpXS5jb3VudF9pbmZvICYgfihQR0NfZXh0cmEgfA0KPiA+ICtQR0NfcmVzZXJ2
ZWQpKSk7ICNlbHNlDQo+ID4gICAgICAgICAgICAgIEFTU0VSVCghKHBnW2ldLmNvdW50X2luZm8g
JiB+UEdDX2V4dHJhKSk7DQo+ID4gKyNlbmRpZg0KPiA+ICAgICAgICAgICAgICBpZiAoIHBnW2ld
LmNvdW50X2luZm8gJiBQR0NfZXh0cmEgKQ0KPiA+ICAgICAgICAgICAgICAgICAgZXh0cmFfcGFn
ZXMrKzsNCj4gPiAgICAgICAgICB9DQo+ID4gQEAgLTIzNjUsNyArMjQzOCwxMiBAQCBpbnQgYXNz
aWduX3BhZ2VzX25yKA0KPiA+ICAgICAgICAgIHBhZ2Vfc2V0X293bmVyKCZwZ1tpXSwgZCk7DQo+
ID4gICAgICAgICAgc21wX3dtYigpOyAvKiBEb21haW4gcG9pbnRlciBtdXN0IGJlIHZpc2libGUg
YmVmb3JlIHVwZGF0aW5nIHJlZmNudC4NCj4gKi8NCj4gPiAgICAgICAgICBwZ1tpXS5jb3VudF9p
bmZvID0NCj4gPiArI2lmZGVmIENPTkZJR19TVEFUSUNfQUxMT0NBVElPTg0KPiA+ICsgICAgICAg
ICAgICAocGdbaV0uY291bnRfaW5mbyAmIChQR0NfZXh0cmEgfCBQR0NfcmVzZXJ2ZWQpKSB8DQo+
ID4gK1BHQ19hbGxvY2F0ZWQgfCAxOyAjZWxzZQ0KPiA+ICAgICAgICAgICAgICAocGdbaV0uY291
bnRfaW5mbyAmIFBHQ19leHRyYSkgfCBQR0NfYWxsb2NhdGVkIHwgMTsNCj4gPiArI2VuZGlmDQo+
IA0KPiBCb3RoIGh1bmtzJyAjaWZkZWYtYXJ5IG5lZWRzIHRvIGJlIGF2b2lkZWQsIGUuZy4gYnkN
Cj4gDQo+ICNpZm5kZWYgQ09ORklHX1NUQVRJQ19BTExPQ0FUSU9ODQo+ICMgZGVmaW5lIFBHQ19y
ZXNlcnZlZCAwDQo+ICNlbmRpZg0KPiANCj4gbmVhciB0aGUgdG9wIG9mIHRoZSBmaWxlLg0KPiAN
Cg0KT2ssIGl0IG1heSBhbHNvIGhlbHAgcmVtb3ZlIHRoZSAjaWZkZWZzIGluIG1ha2VfcGFnZV9m
cmVlLCB0aHghDQoNCj4gPiBAQCAtMjQzNCw2ICsyNTEyLDU3IEBAIHN0cnVjdCBwYWdlX2luZm8g
KmFsbG9jX2RvbWhlYXBfcGFnZXMoDQo+ID4gICAgICByZXR1cm4gcGc7DQo+ID4gIH0NCj4gPg0K
PiA+ICsjaWZkZWYgQ09ORklHX1NUQVRJQ19BTExPQ0FUSU9ODQo+ID4gKy8qDQo+ID4gKyAqIEFs
bG9jYXRlIG5yX21mbnMgY29udGlndW91cyBwYWdlcywgc3RhcnRpbmcgYXQgI3NtZm4sIG9mIHN0
YXRpYw0KPiA+ICttZW1vcnksDQo+ID4gKyAqIHRoZW4gYXNzaWduIHRoZW0gdG8gb25lIHNwZWNp
ZmljIGRvbWFpbiAjZC4NCj4gPiArICogSXQgaXMgdGhlIGVxdWl2YWxlbnQgb2YgYWxsb2NfZG9t
aGVhcF9wYWdlcyBmb3Igc3RhdGljIG1lbW9yeS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBwYWdl
X2luZm8gKmFsbG9jX2RvbXN0YXRpY19wYWdlcygNCj4gPiArICAgICAgICBzdHJ1Y3QgZG9tYWlu
ICpkLCB1bnNpZ25lZCBsb25nIG5yX21mbnMsIG1mbl90IHNtZm4sDQo+ID4gKyAgICAgICAgdW5z
aWduZWQgaW50IG1lbWZsYWdzKQ0KPiA+ICt7DQo+ID4gKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw
ZyA9IE5VTEw7DQo+ID4gKyAgICB1bnNpZ25lZCBsb25nIGRtYV9zaXplOw0KPiA+ICsNCj4gPiAr
ICAgIEFTU0VSVCghaW5faXJxKCkpOw0KPiA+ICsNCj4gPiArICAgIGlmICggIWRtYV9iaXRzaXpl
ICkNCj4gPiArICAgICAgICBtZW1mbGFncyAmPSB+TUVNRl9ub19kbWE7DQo+ID4gKyAgICBlbHNl
DQo+ID4gKyAgICB7DQo+ID4gKyAgICAgICAgaWYgKCAoZG1hX2JpdHNpemUgLSBQQUdFX1NISUZU
KSA+IDAgKQ0KPiA+ICsgICAgICAgIHsNCj4gPiArICAgICAgICAgICAgZG1hX3NpemUgPSAxdWwg
PDwgKGRtYV9iaXRzaXplIC0gUEFHRV9TSElGVCk7DQo+ID4gKyAgICAgICAgICAgIC8qIFN0YXJ0
aW5nIGFkZHJlc3Mgc2hhbGwgbWVldCB0aGUgRE1BIGxpbWl0YXRpb24uICovDQo+ID4gKyAgICAg
ICAgICAgIGlmICggbWZuX3goc21mbikgPCBkbWFfc2l6ZSApDQo+ID4gKyAgICAgICAgICAgICAg
ICByZXR1cm4gTlVMTDsNCj4gDQo+IEkgdGhpbmsgSSBkaWQgYXNrIHRoaXMgb24gdjEgYWxyZWFk
eTogV2h5IHRoZSBmaXJzdCBwYWdlPyBTdGF0aWMgbWVtb3J5IHJlZ2lvbnMsDQo+IHVubGlrZSBi
dWRkeSBhbGxvY2F0b3Igem9uZXMsIGNhbiBjcm9zcyBwb3dlci1vZi0yIGFkZHJlc3MgYm91bmRh
cmllcy4gSGVuY2UNCj4gaXQgb3VnaHQgdG8gYmUgdGhlIGxhc3QgcGFnZSB0aGF0IGdldHMgY2hl
Y2tlZCBmb3IgZml0dGluZyBhZGRyZXNzIHdpZHRoDQo+IHJlc3RyaWN0aW9uIHJlcXVpcmVtZW50
cy4NCj4gDQo+IEFuZCB0aGVuIC0gaXMgdGhpcyBuZWNlc3NhcnkgYXQgYWxsPyBTaG91bGRuJ3Qg
InByZS1kZWZpbmVkIGJ5IGNvbmZpZ3VyYXRpb24NCj4gdXNpbmcgcGh5c2ljYWwgYWRkcmVzcyBy
YW5nZXMiIGltcGx5IHRoZSBtZW1vcnkgZGVzaWduYXRlZCBmb3IgYSBndWVzdCBmaXRzIGl0cw0K
PiBETUEgbmVlZHM/DQo+IA0KDQpIbW1tLCBJbiBteSB1bmRlcnN0YW5kaW5nLCBoZXJlIGlzIHRo
ZSBETUEgcmVzdHJpY3Rpb24gd2hlbiB1c2luZyBidWRkeSBhbGxvY2F0b3I6DQogICAgZWxzZSBp
ZiAoIChkbWFfem9uZSA9IGJpdHNfdG9fem9uZShkbWFfYml0c2l6ZSkpIDwgem9uZV9oaSApDQog
ICAgICAgIHBnID0gYWxsb2NfaGVhcF9wYWdlcyhkbWFfem9uZSArIDEsIHpvbmVfaGksIG9yZGVy
LCBtZW1mbGFncywgZCk7DQpkbWFfem9uZSBpcyByZXN0cmljdGluZyB0aGUgc3RhcnRpbmcgYnVk
ZHkgYWxsb2NhdG9yIHpvbmUsIHNvIEkgYW0gdGhpbmtpbmcgdGhhdCBoZXJlLCBpdCBzaGFsbA0K
cmVzdHJpY3QgdGhlIGZpcnN0IHBhZ2UuDQoNCmltbywgaWYgbGV0IHVzZXIgZGVmaW5lLCBpdCBh
bHNvIGNvdWxkIGJlIG1pc3NpbmcgRE1BIHJlc3RyaWN0aW9uPyBJZiB5b3UgYWxsIHRoaW5rIGl0
cyBub3QNCm5lY2Vzc2FyeSwgSSdsbCByZW1vdmUgaXQgaW4gdjN+fn4NCg0KPiBKYW4NCg0KQ2hl
ZXJzDQpQZW5ueSBaaGVuZw0KDQo=


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:09:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:09:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150727.278652 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0eHE-0003Re-71; Tue, 06 Jul 2021 06:09:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150727.278652; Tue, 06 Jul 2021 06:09:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0eHE-0003RX-3y; Tue, 06 Jul 2021 06:09:48 +0000
Received: by outflank-mailman (input) for mailman id 150727;
 Tue, 06 Jul 2021 06:09:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0eHC-0003RF-C4; Tue, 06 Jul 2021 06:09:46 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0eHC-0001ne-4p; Tue, 06 Jul 2021 06:09:46 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0eHB-0002m8-R2; Tue, 06 Jul 2021 06:09:45 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0eHB-0005bD-QV; Tue, 06 Jul 2021 06:09:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=AnhN0Z+e5xIvWe6A/EwuFNj7bR39dGEte+wBiWCYfMg=; b=DBMpEczer4UQhuwl0fB4da7F7W
	E49PquV1rRBWBC0X/N2hzYjKThi+BB7LgEzGJn5RPCsBlEFnDVdY3FGRC8UvjXC3rkPZgP5CNKKOm
	zhWR83xA4vt8wtN10MYz/6m+BiCvCbtBfVmF2sJNKhdqhmLATu/nUCt8zpAhLC2yxF8s=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163320-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163320: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=44ced03798d3af47577af3e7a865be33383766d0
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 06:09:45 +0000

flight 163320 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163320/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 44ced03798d3af47577af3e7a865be33383766d0
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   32 days
Failing since        162368  2021-06-04 15:42:59 Z   31 days   89 attempts
Testing same since   163312  2021-07-05 12:41:15 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3263 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:32:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:32:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150735.278667 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ece-0007Qd-6Q; Tue, 06 Jul 2021 06:31:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150735.278667; Tue, 06 Jul 2021 06:31:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ece-0007QW-1X; Tue, 06 Jul 2021 06:31:56 +0000
Received: by outflank-mailman (input) for mailman id 150735;
 Tue, 06 Jul 2021 06:31:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Dpqu=L6=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0ecb-0007QE-RW
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:31:53 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.72]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d4f38b29-51f7-4c9b-a87c-885d1e958de7;
 Tue, 06 Jul 2021 06:31:50 +0000 (UTC)
Received: from AM7PR02CA0008.eurprd02.prod.outlook.com (2603:10a6:20b:100::18)
 by AM4PR08MB2804.eurprd08.prod.outlook.com (2603:10a6:205:d::22) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Tue, 6 Jul
 2021 06:31:48 +0000
Received: from AM5EUR03FT062.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:100:cafe::2a) by AM7PR02CA0008.outlook.office365.com
 (2603:10a6:20b:100::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Tue, 6 Jul 2021 06:31:48 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT062.mail.protection.outlook.com (10.152.17.120) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 06:31:47 +0000
Received: ("Tessian outbound 71a9bd19c2b9:v97");
 Tue, 06 Jul 2021 06:31:47 +0000
Received: from 730b888f6353.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 4C04F6FD-792D-4118-9581-C9621DD858D4.1; 
 Tue, 06 Jul 2021 06:31:41 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 730b888f6353.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 06:31:41 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB4176.eurprd08.prod.outlook.com (2603:10a6:803:ec::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 06:31:18 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 06:31:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d4f38b29-51f7-4c9b-a87c-885d1e958de7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vDDh4o70b3LaBcWZe4tHx3A6Kwpf4U137KGpOQq/x9k=;
 b=WCF9+Fz8RhHvh7b39uci6+Jqu+Zqi/YP7cz7UuqQdXUmeSi8JAsS/8t3wuJ+Du8BPn/me7tCSxEUdPF3bPbyBd7WwGiMn39BHg+3WN3RpRXxKjs9tJ9KI5chcMtS4ZY9l1F9a6DgXuM2StezYdzFRA5H1tqci4W+nsgO95AR6K4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kN1v/NltOip69T9fuetC/bdzSZQnJeOowm+wpN4W3IQC83YkbAmNNhTn8PIH2hwolhYtYAINntKlSJNzFFXVnDfoDgeUgMBOUIp6U3cP3dvpU9JhQncfamIaUXFoUAZ1joUxd3nUx7WZeNBNPYovohJ58u3IElVVIakZdg4rIlzsGpGMAcLdE047ejDiwm2yKdC8oa4cGcZv/il65T4bWXOqxu/SBhyr7RBBgXEKdyYc64vC4Q5Zfgj1Sb/zWdgFnoOD/2yfDVBTL4nXYQJg5+dCBAzQI0+fYQKcJIZVTF8YH/14I317QDOxSmFTL6cJCopTXtHc2B4mxZflnVyLNg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vDDh4o70b3LaBcWZe4tHx3A6Kwpf4U137KGpOQq/x9k=;
 b=aWlNNAvfBmXchMqvU3K5oQBZSpwCfc1izClMRsBUl+vmCfFs3z6+ijxYUmoMZe06GDK+03wkwByxOBwOnXQxskRdkehR/9M0pgQjijOb/iyhmGDAbsLgw4/TmBMlEVDeKTqKBGNsbdbK5rRLHw2vomaMaDzlqKLdX8NJH5AI1aGl7OJccpb9Xzu6j67GNL+dv5OTF8EdTLoKiYaAl7nTTASa7VaTn0ocD8MkKLjDbWpfM31KvBJcxlrIRH5mGUVSCQ3l8uPdiXPHu7q+RGLmPATOuMKLYuKa1Hyd6QGQ8y38Lb02p1G5xJnGuhmEt8DH5rwQfpRXKzxbn0y9gVXR3Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vDDh4o70b3LaBcWZe4tHx3A6Kwpf4U137KGpOQq/x9k=;
 b=WCF9+Fz8RhHvh7b39uci6+Jqu+Zqi/YP7cz7UuqQdXUmeSi8JAsS/8t3wuJ+Du8BPn/me7tCSxEUdPF3bPbyBd7WwGiMn39BHg+3WN3RpRXxKjs9tJ9KI5chcMtS4ZY9l1F9a6DgXuM2StezYdzFRA5H1tqci4W+nsgO95AR6K4=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "jbeulich@suse.com" <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
Thread-Topic: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
Thread-Index: AQHXW0cAUmDBqGSIy0OSAkpietHoXKsxZ2CAgAQ9d/A=
Date: Tue, 6 Jul 2021 06:31:18 +0000
Message-ID:
 <VE1PR08MB52155D35A7B716DC7337311DF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-9-penny.zheng@arm.com>
 <f613372a-eac8-f79b-2941-b7cce3e1e0e7@xen.org>
In-Reply-To: <f613372a-eac8-f79b-2941-b7cce3e1e0e7@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: A4B16045A6BA6947A3D5CC1109CD6D03.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.111]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: a70781a4-6f48-4431-72f6-08d94047bb51
x-ms-traffictypediagnostic: VI1PR08MB4176:|AM4PR08MB2804:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM4PR08MB2804A8ED025CAA492E7BBFB9F71B9@AM4PR08MB2804.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 ezTO1uZK9Rpgcaw2HZFjoftKrF9Q0bvxdAZa2rhNmKZIh26y692zq4udKhDUm/JMEU3eqWw6tWa2YbYwCfu+eBas6WDVDBrs69oz7hCRQfFgjZ/Xii1WF8XtoaLENNqhpouPPILmeS94pwgfoZK+q38aTkyeDG8fAXLNn9ZQGFiMp2TkbdI8KZ04RivGYmAKpvEoP034Ci9N1Ef+FeW1f3AdQj8salDUhahws1gVwiryfZIwLhQ1BuAxb1HMmku/e4lclkDYS6bqB+mVDOANT6pVYLvddP03rqjGAo2v0u4/qeBLsqbDqTSiBc/T6TqYEQuLpZEv34TTj07lgAWlSNj6RhOomCHtX2sciFXnhEBh+XW9vNdSXAh6DVSsp710PDD6K/WEG0eJdGLpeuqxIwokyH08kb2HDkFogCTJfoDUPFXghVDCyk8ocSkk7oQJctFhdnkqBqZHzyNcS4Lg7Qk9NEKDq1Temp3aACXbbJeIy7LGkUAFPPo+ZqgXnOv49D+FyZyB4H0VE1mKK98ccTmMrdtm6GL4yqfDZ7fWhQJIi2gYl239LI6tpvXnfwevwPogdzu8BTTntAZWWo0RXcsKH4VOFVcl246xNXVcY5zuw3agcV0NL9IBp9LKg8WiqMo/r5yMlg2EwxZB3ZVBWRCRjGMfDm2A/ddTKjeXbd44RUtF/vKX+FPoEg0sTKsCPbxUJnUBXhNckE9RnH2bXQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(396003)(366004)(346002)(376002)(71200400001)(122000001)(7696005)(9686003)(316002)(66946007)(66446008)(64756008)(76116006)(55016002)(66476007)(86362001)(33656002)(38100700002)(2906002)(8676002)(4326008)(66556008)(110136005)(478600001)(54906003)(6506007)(186003)(26005)(5660300002)(53546011)(83380400001)(8936002)(52536014)(81973001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?/w670o7Y9xRkjHPxUiRbL2cd5n/U6PdzCo8kAgY?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4176
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT062.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	13bdab12-8aa5-4950-ff51-08d94047a9d7
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	P+dTrom9SAk9KIqcfWSIQtMI7DvUyke8e80CO2NMh3YuecKmn6ZaPGG3kgOiKfVdmXLunnhR163k/q8kR3zMgtnbFNgWtS0yylFHMsAws+rJVHDMPrhOF7Dg48QKDKll9w/Mss+f0ybPY9tPEbFo8tznfqQoskrpQhH31jRtQllYaldvXyfYMISeCUcpJcU/eN8jhfne1gLdCOdG0IjTw9VxjHQLRbJOnZM7sBOAshEN9UAS7zMZDZ2bj3XVUcC382nYyWnF1QhURxFhXq5ChFYn6IN9qATaw31KQ/mD0aBhVqyYJI9TrjlsvIyU/1d/4L0pc63SWK3t/QmY5Qg2ssk6bKo3hGEVD7rl2vsOa9FKm4e9zKrpJT1cYl0guXwST4HElkEZ+WaVApJBfMFEbRYPpqHSDd/meBHsCG39GHKXHCFXpTzgbTEOiw1HsHGpihvoLLyXjRkxG7PiRL6lfWis79c2d6U11H7rbL6n/lJOMegs4Hi14QyiZOJ2YdKzV1lU1er/kGoj6XKKC2XQ8QKUcoe0VGsZkO9i+PIjYac3bFbx7jgcp5r+kKE+DDpn6vM2RQfj/ZKlBnggfXoS7RTuchDLhi8oKUvKyE/fHDYt7m5Fht8mVKC4d5oFAKlW03ba43euPrp9W4VViKenL8z8UYy0dZalKkjsC1XpWW7J84KRWXU7N7vsANVMrrabG0NXheo5nynnXCNl5VINwOI3Pb3jJ6WKljc1kNwz0ew=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39860400002)(136003)(376002)(396003)(346002)(46966006)(36840700001)(36860700001)(9686003)(82740400003)(83380400001)(478600001)(186003)(70586007)(82310400003)(8936002)(47076005)(52536014)(86362001)(5660300002)(2906002)(8676002)(26005)(356005)(81166007)(53546011)(316002)(6506007)(7696005)(4326008)(336012)(110136005)(33656002)(70206006)(54906003)(55016002)(81973001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 06:31:47.8425
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: a70781a4-6f48-4431-72f6-08d94047bb51
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT062.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR08MB2804

SGkgDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVuIEdyYWxs
IDxqdWxpZW5AeGVuLm9yZz4NCj4gU2VudDogU2F0dXJkYXksIEp1bHkgMywgMjAyMSA5OjI2IFBN
DQo+IFRvOiBQZW5ueSBaaGVuZyA8UGVubnkuWmhlbmdAYXJtLmNvbT47IHhlbi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZzsNCj4gc3N0YWJlbGxpbmlAa2VybmVsLm9yZzsgamJldWxpY2hAc3Vz
ZS5jb20NCj4gQ2M6IEJlcnRyYW5kIE1hcnF1aXMgPEJlcnRyYW5kLk1hcnF1aXNAYXJtLmNvbT47
IFdlaSBDaGVuDQo+IDxXZWkuQ2hlbkBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDgv
OV0geGVuL2FybTogY2hlY2sgYHhlbixzdGF0aWMtbWVtYCBwcm9wZXJ0eSBkdXJpbmcNCj4gZG9t
YWluIGNvbnN0cnVjdGlvbg0KPiANCj4gSGkgUGVubnksDQo+IA0KPiBPbiAwNy8wNi8yMDIxIDAz
OjQzLCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPiBUaGlzIGNvbW1pdCBjaGVja3MgYHhlbixzdGF0
aWMtbWVtYCBkZXZpY2UgdHJlZSBwcm9wZXJ0eSBpbiAvZG9tVXgNCj4gPiBub2RlLCB0byBkZXRl
cm1pbmUgd2hldGhlciBkb21haW4gaXMgb24gU3RhdGljIEFsbG9jYXRpb24sIHdoZW4NCj4gPiBj
b25zdHJ1Y3RpbmcgZG9tYWluIGR1cmluZyBib290LXVwLg0KPiA+DQo+ID4gUmlnaHQgbm93LCB0
aGUgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhdGVfc3RhdGljX21lbW9yeSBpcyBtaXNzaW5nLA0K
PiA+IGFuZCB3aWxsIGJlIGludHJvZHVjZWQgbGF0ZXIuIEl0IGp1c3QgQlVHKCkgb3V0IGF0IHRo
ZSBtb21lbnQuDQo+ID4NCj4gPiBBbmQgaWYgdGhlIGBtZW1vcnlgIHByb3BlcnR5IGFuZCBgeGVu
LHN0YXRpYy1tZW1gIGFyZSBib3RoIHNldCwgaXQNCj4gPiBzaGFsbCBiZSB2ZXJpZmllZCB0aGF0
IGlmIHRoZSBtZW1vcnkgc2l6ZSBkZWZpbmVkIGluIGJvdGggaXMgY29uc2lzdGVudC4NCj4gPg0K
PiA+IFNpZ25lZC1vZmYtYnk6IFBlbm55IFpoZW5nIDxwZW5ueS56aGVuZ0Bhcm0uY29tPg0KPiA+
IC0tLQ0KPiA+IGNoYW5nZXMgdjI6DQo+ID4gLSByZW1vdmUgcGFyc2luZyBwcm9jZWR1cmUgaGVy
ZQ0KPiA+IC0gY2hlY2sgdGhlIGNvbnNpc3RlbmN5IHdoZW4gYHhlbixzdGF0aWMtbWVtYCBhbmQg
YG1lbW9yeWAgYXJlIGJvdGgNCj4gPiBkZWZpbmVkDQo+ID4gLS0tDQo+ID4gICB4ZW4vYXJjaC9h
cm0vZG9tYWluX2J1aWxkLmMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t
DQo+IC0tLQ0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDYgZGVsZXRp
b25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2RvbWFpbl9idWlsZC5j
IGIveGVuL2FyY2gvYXJtL2RvbWFpbl9idWlsZC5jDQo+ID4gaW5kZXggMjgyNDE2ZTc0ZC4uNDE2
NmQ3OTkzYyAxMDA2NDQNCj4gPiAtLS0gYS94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMNCj4g
PiArKysgYi94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMNCj4gPiBAQCAtMjQyNCwyMyArMjQy
NCw0NyBAQCBzdGF0aWMgaW50IF9faW5pdCBjb25zdHJ1Y3RfZG9tVShzdHJ1Y3QgZG9tYWluDQo+
ICpkLA0KPiA+ICAgew0KPiA+ICAgICAgIHN0cnVjdCBrZXJuZWxfaW5mbyBraW5mbyA9IHt9Ow0K
PiA+ICAgICAgIGludCByYzsNCj4gPiAtICAgIHU2NCBtZW07DQo+ID4gKyAgICB1NjQgbWVtLCBz
dGF0aWNfbWVtX3NpemUgPSAwOw0KPiA+ICsgICAgY29uc3Qgc3RydWN0IGR0X3Byb3BlcnR5ICpw
cm9wOw0KPiA+ICsgICAgYm9vbCBzdGF0aWNfbWVtID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsgICAg
ZC0+bWF4X3BhZ2VzID0gfjBVOw0KPiA+ICsgICAgLyoNCj4gPiArICAgICAqIEd1ZXN0IFJBTSBj
b3VsZCBiZSBvZiBzdGF0aWMgbWVtb3J5IGZyb20gc3RhdGljIGFsbG9jYXRpb24sDQo+ID4gKyAg
ICAgKiB3aGljaCB3aWxsIGJlIHNwZWNpZmllZCB0aHJvdWdoICJ4ZW4sc3RhdGljLW1lbSIgcGhh
bmRsZS4NCj4gPiArICAgICAqLw0KPiA+ICsgICAgcHJvcCA9IGR0X2ZpbmRfcHJvcGVydHkobm9k
ZSwgInhlbixzdGF0aWMtbWVtIiwgTlVMTCk7DQo+ID4gKyAgICBpZiAoIHByb3AgKQ0KPiA+ICsg
ICAgew0KPiA+ICsgICAgICAgIHN0YXRpY19tZW0gPSB0cnVlOw0KPiA+ICsgICAgICAgIC8qIHN0
YXRpY19tZW1fc2l6ZSA9IGFsbG9jYXRlX3N0YXRpY19tZW1vcnkoLi4uKTsgKi8NCj4gPiArICAg
ICAgICBCVUcoKTsNCj4gPiArICAgIH0NCj4gDQo+IEkgd291bGQgcHJlZmVyIGlmIHRoZSBzdGF0
aWMgbWVtb3J5IGlzIGFsbG9jYXRlZCBjbG9zZSB0bw0KPiBhbGxvY2F0ZV9tZW1vcnkoKSBiZWxv
dy4gQUZBSUNULCB0aGUgcmVhc29uIHlvdSBhbGxvY2F0ZSBoZXJlIGlzIGJlY2F1c2UgeW91DQo+
IHdhbnQgdG8gaGF2ZSB0aGUgcHJvcGVydHkgIm1lbW9yeSIgb3B0aW9uYWwuDQo+IA0KPiBIb3dl
dmVyLCBJIGFtIG5vdCBlbnRpcmVseSBjb252aW5jZWQgdGhpcyBpcyBhIGdvb2QgaWRlYSB0byBt
YWtlIG9wdGlvbmFsLiBJdA0KPiB3b3VsZCBiZSBlYXNpZXIgZm9yIGEgcmVhZGVyIHRvIGZpZ3Vy
ZSBvdXQgZnJvbSB0aGUgZGV2aWNlLXRyZWUgaG93IG11Y2gNCj4gbWVtb3J5IHdlIGdpdmUgdG8g
dGhlIGd1ZXN0Lg0KPiANCg0KSG1tbSwgbm93IEkgdGhpbmsgbWF5YmUgSSB1bmRlcnN0YW5kIHdy
b25nbHkgd2hhdCB5b3Ugc3VnZ2VzdGVkIGluIHYxLg0KIg0KQ291bGQgd2UgYWxsb2NhdGUgdGhl
IG1lbW9yeSBhcyB3ZSBwYXJzZT8NCiINCkkganVzdCBzaW1wbHkgdGhpbmsgaXQgbWVhbnMgdGhl
IGNvZGUgc2VxdWVuY2UsIHB1dHRpbmcgYWxsb2NhdGlvbiBpbW1lZGlhdGVseQ0KYWZ0ZXIgcGFy
c2luZy4gOy8NCg0KUmUtaW52ZXN0aWdhdGluZyB0aGUgZG9jcyBvbiAibWVtb3J5IjoNCg0KIg0K
LSBtZW1vcnkNCg0KICAgIEEgNjQtYml0IGludGVnZXIgc3BlY2lmeWluZyB0aGUgYW1vdW50IG9m
IGtpbG9ieXRlcyBvZiBSQU0gdG8NCiAgICBhbGxvY2F0ZSB0byB0aGUgZ3Vlc3QuDQoiDQpJZiB5
b3UgcHJlZmVyICJtZW1vcnkiIG1hbmRhdGUsIHRoZW4gdGJoLCBpdCB3aWxsIG1ha2UgdGhlIGNv
ZGUNCmhlcmUgbW9yZSBlYXNpbHktcmVhZCwgbm8gaWZzLg0KQnV0IG1heWJlIEkgc2hhbGwgcHV0
IG1vcmUgaW5mbyBvbiBkb2NzIHRvIGNsYXJpZnkgdGhhdCBldmVuIHRob3VnaCB1c2VyIHVzaW5n
DQoieGVuLCBzdGF0aWMtbWVtIiB0byByZWZlciB0byBzdGF0aWMgbWVtb3J5IGFsbG9jYXRpb24s
IHRoZXkgc2hhbGwgc3RpbGwgdXNlDQoibWVtb3J5IiBwcm9wZXJ0eSB0byB0ZWxsIGhvdyBtdWNo
IG1lbW9yeSB3ZSBnaXZlIHRvIHRoZSBndWVzdC4NCg0KPiA+DQo+ID4gICAgICAgcmMgPSBkdF9w
cm9wZXJ0eV9yZWFkX3U2NChub2RlLCAibWVtb3J5IiwgJm1lbSk7DQo+ID4gLSAgICBpZiAoICFy
YyApDQo+ID4gKyAgICBpZiAoICFzdGF0aWNfbWVtICYmICFyYyApDQo+ID4gICAgICAgew0KPiA+
ICAgICAgICAgICBwcmludGsoIkVycm9yIGJ1aWxkaW5nIERvbVU6IGNhbm5vdCByZWFkIFwibWVt
b3J5XCIgcHJvcGVydHlcbiIpOw0KPiA+ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiAr
ICAgIH0gZWxzZSBpZiAoIHJjICYmIHN0YXRpY19tZW0gKQ0KPiA+ICsgICAgew0KPiA+ICsgICAg
ICAgIGlmICggc3RhdGljX21lbV9zaXplICE9IG1lbSAqIFNaXzFLICkNCj4gPiArICAgICAgICB7
DQo+ID4gKyAgICAgICAgICAgIHByaW50aygiTWVtb3J5IHNpemUgaW4gXCJtZW1vcnlcIiBwcm9w
ZXJ0eSBpc24ndCBjb25zaXN0ZW50IHdpdGgiDQo+ID4gKyAgICAgICAgICAgICAgICAgICAidGhl
IG9uZXMgZGVmaW5lZCBpbiBcInhlbixzdGF0aWMtbWVtXCIuXG4iKTsNCj4gPiArICAgICAgICAg
ICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICAgICAgIH0gPiAtICAgIGtp
bmZvLnVuYXNzaWduZWRfbWVtID0gKHBhZGRyX3QpbWVtICogU1pfMUs7DQo+ID4gKyAgICBraW5m
by51bmFzc2lnbmVkX21lbSA9IHN0YXRpY19tZW0gPyAwIDogKHBhZGRyX3QpbWVtICogU1pfMUs7
ID4NCj4gPiAtICAgIHByaW50aygiKioqIExPQURJTkcgRE9NVSBjcHVzPSV1IG1lbW9yeT0lIlBS
SXg2NCJLQiAqKipcbiIsIGQtDQo+ID5tYXhfdmNwdXMsIG1lbSk7DQo+ID4gKyAgICBwcmludGso
IioqKiBMT0FESU5HIERPTVUgY3B1cz0ldSBtZW1vcnk9JSJQUkl4NjQiS0IgKioqXG4iLA0KPiA+
ICsgICAgICAgICAgICBkLT5tYXhfdmNwdXMsDQo+ID4gKyAgICAgICAgICAgIHN0YXRpY19tZW0g
PyBzdGF0aWNfbWVtX3NpemUgOiAoa2luZm8udW5hc3NpZ25lZF9tZW0pID4+DQo+ID4gKyAxMCk7
DQo+IA0KPiANCj4gSWYgd2UgbWFuZGF0ZSB0aGUgcHJvcGVydHkgIm1lbW9yeSIsIHRoZW4ga2lu
Zm8udW5hc3NpZ25lZF9tZW0gZG9lc24ndA0KPiBuZWVkIHRvIGJlIHRvdWNoZWQuIEluc3RlYWQs
IHlvdSBjb3VsZCBzaW1wbHkgY2hlY2sgdGhlDQo+IGtpbmZvLnVuYXNzaWduZWRfbWVtIGlzIGVx
dWl2YWxlbnQgdG8gc3RhdGljX21lbV9zaXplLg0KPiANCg0KVHJ1ZSwgdHJ1ZS4gDQoNCj4gPg0K
PiA+ICAgICAgIGtpbmZvLnZwbDAxMSA9IGR0X3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAidnBs
MDExIik7DQo+ID4NCj4gPiAgICAgICBpZiAoIHZjcHVfY3JlYXRlKGQsIDApID09IE5VTEwgKQ0K
PiA+ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiAtICAgIGQtPm1heF9wYWdlcyA9IH4w
VTsNCj4gPg0KPiA+ICAgICAgIGtpbmZvLmQgPSBkOw0KPiA+DQo+ID4gQEAgLTI0NTIsNyArMjQ3
Niw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVjdF9kb21VKHN0cnVjdCBkb21haW4gKmQs
DQo+ID4gICAgICAgLyogdHlwZSBtdXN0IGJlIHNldCBiZWZvcmUgYWxsb2NhdGUgbWVtb3J5ICov
DQo+ID4gICAgICAgZC0+YXJjaC50eXBlID0ga2luZm8udHlwZTsNCj4gPiAgICNlbmRpZg0KPiA+
IC0gICAgYWxsb2NhdGVfbWVtb3J5KGQsICZraW5mbyk7DQo+ID4gKyAgICBpZiAoICFzdGF0aWNf
bWVtICkNCj4gPiArICAgICAgICBhbGxvY2F0ZV9tZW1vcnkoZCwgJmtpbmZvKTsNCj4gPg0KPiA+
ICAgICAgIHJjID0gcHJlcGFyZV9kdGJfZG9tVShkLCAma2luZm8pOw0KPiA+ICAgICAgIGlmICgg
cmMgPCAwICkNCj4gPg0KPiANCj4gQ2hlZXJzLA0KPiANCj4gLS0NCj4gSnVsaWVuIEdyYWxsDQoN
CkNoZWVycywNCg0KLS0NClBlbm55IFpoZW5nDQo=


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:32:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:32:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150736.278672 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ece-0007UB-FK; Tue, 06 Jul 2021 06:31:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150736.278672; Tue, 06 Jul 2021 06:31:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ece-0007TC-AT; Tue, 06 Jul 2021 06:31:56 +0000
Received: by outflank-mailman (input) for mailman id 150736;
 Tue, 06 Jul 2021 06:31:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hbbY=L6=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m0ecb-0007QG-SZ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:31:53 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id da09551e-de23-11eb-8475-12813bfff9fa;
 Tue, 06 Jul 2021 06:31:52 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7F9B91FB;
 Mon,  5 Jul 2021 23:31:52 -0700 (PDT)
Received: from [10.57.8.167] (unknown [10.57.8.167])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8C24B3F5A1;
 Mon,  5 Jul 2021 23:31:51 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: da09551e-de23-11eb-8475-12813bfff9fa
Subject: Re: [PATCH v5 3/4] xen: arm: Remove mfn_to_gfn() macro
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <julien.grall@arm.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-4-julien@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <2e955bd5-efe7-f154-c220-77989b921ca8@arm.com>
Date: Tue, 6 Jul 2021 08:31:45 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210703171152.15874-4-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit



On 03.07.2021 19:11, Julien Grall wrote:
> From: Julien Grall <julien.grall@arm.com>
> 
> The current implementation of mfn_to_gfn() is completely bogus and
> there are no plan to implement an M2P on Arm. As there are no more
> users, drop the helper.
> 
s/plan/plans/
> At the same time rework a comment in Arm code that does not make sense.
> 
> Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Michal Orzel <michal.orzel@arm.com>
> 
> ---
>     Changes in v5:
>         - Rebase to the latest Xen
>         - The patch is now arm only because mfn_to_gmfn() has
>         been dropped on x86 and the arm helper was renamed to
>         mfn_to_gfn().
> 
>     Changes in v4:
>         - Remove acks as the patch is old
> 
>     Changes in v2:
>         - Add Jan's and Stefano's acked-by
> ---
>  xen/include/asm-arm/mm.h | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
> index ded74d29da0c..07c24654a0b6 100644
> --- a/xen/include/asm-arm/mm.h
> +++ b/xen/include/asm-arm/mm.h
> @@ -326,9 +326,8 @@ struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va,
>  #define SHARED_M2P_ENTRY         (~0UL - 1UL)
>  #define SHARED_M2P(_e)           ((_e) == SHARED_M2P_ENTRY)
>  
> -/* Xen always owns P2M on ARM */
> +/* We don't have a M2P on Arm */
>  #define set_gpfn_from_mfn(mfn, pfn) do { (void) (mfn), (void)(pfn); } while (0)
> -#define mfn_to_gfn(d, mfn) ((void)(d), _gfn(mfn_x(mfn)))
>  
>  /* Arch-specific portion of memory_op hypercall. */
>  long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
> 


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:39:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:39:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150747.278689 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ejz-0000c2-6h; Tue, 06 Jul 2021 06:39:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150747.278689; Tue, 06 Jul 2021 06:39:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ejz-0000bv-2u; Tue, 06 Jul 2021 06:39:31 +0000
Received: by outflank-mailman (input) for mailman id 150747;
 Tue, 06 Jul 2021 06:39:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0ejx-0000bS-GQ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:39:29 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e90e28ea-de24-11eb-8475-12813bfff9fa;
 Tue, 06 Jul 2021 06:39:28 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2052.outbound.protection.outlook.com [104.47.14.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-37--aJ3qt7uOOiCKHZ2FSAb0w-1; Tue, 06 Jul 2021 08:39:25 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2333.eurprd04.prod.outlook.com (2603:10a6:800:28::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Tue, 6 Jul
 2021 06:39:22 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 06:39:22 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0025.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101:1::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 06:39:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e90e28ea-de24-11eb-8475-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625553567;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=jvWQDikLgE2iDToynKipJWDFqS3lsRtRHFnNr1/61FA=;
	b=QT4n/h1j1P2j4Ow4Jl8+cvaS5akTs2UKCFL0JoLMhUWY4EbmFXf/9zhUdX4dP+91yvU75B
	ktxTsa1jYLAPTqggmc3xsnwtgQnRjVrZvGG0ge+BToimJ3/4DgxpfqLA7lBrumxZ4OpqgV
	MGew5VIO3T/91uROXNIsKxNMWvbGoV4=
X-MC-Unique: -aJ3qt7uOOiCKHZ2FSAb0w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YgUnw/9kfJbENPqh4Jl2uEDEJJ46FxZozJdcISDOCcNiqfQPgOHJiX+z011COrevKltjAtB/3Sj5LtVp9skuEGSv7w0WjYFLbLVASidKdNJ3AP9csP8nNgpCEQ9xo9ip+h42koUmql9JHEYHSztbB4HJa15yFGVmfJhhywt5HlRN7DME0SR67R6c6nVi+IUfvjKGOCjwetF4V0v5A7sVbtC2LkdnGpfuxAqOjlVdL7NavEd3ZHx5wRC4NX2UU1QDckbTbgM/K2W+kIhOMZKXdvCAkrTwWryxGMgFm2Y6VmH1bbEs+HrVbiEL+4Hy6ws+6bYfUdmZWUvHlzbcX0xXEw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jvWQDikLgE2iDToynKipJWDFqS3lsRtRHFnNr1/61FA=;
 b=PK94WwQj8fPTXNcbBhfzCb0/LH6AxS92NMwEd4fZz7v9tKUcPaf27k3k8usD+Vd2mfNA0iGhxoUxe30QlrzEpvqzI9POtRY0g4894ybK6B1raeOOOAB05Y3kMpjiflfwWAxnSKf67ZGGeUlOuzteI2zNc4jtZ04nhU+GMl1vaHCmm0mosPrj8PQ21WUYaagnk3Sx0SvL9DXaS5b9hYS8OumFWO8ASvNQUB0z3YiIr7/heGV5rUyDH4MtrAwcRqlkYoRwZiGPx3xbtnj2QmB4YoDyyLdzCNzMmxZGG7VAuV1uGK+HNh6XRdL0/v1tttpLhDZIv302sBrYd3EIGAs4LA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
To: Olaf Hering <olaf@aepfle.de>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
 <20210705192612.5cf50887.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <f70be58d-99f0-0631-2b01-436e3e94e5ee@suse.com>
Date: Tue, 6 Jul 2021 08:39:21 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210705192612.5cf50887.olaf@aepfle.de>
Content-Type: text/plain; charset=UTF-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2P264CA0025.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:101:1::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a13038e5-7b35-4dea-3128-08d94048ca1c
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2333:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2333DFDCE6DD26559B004231B31B9@VI1PR0401MB2333.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	nbdGlxlCWTDnjC/iixqFM/3ScYYach+cRA/YnJGClOeDwSPtBSrM/8kAOK6hgsv9WvBgwgotpt4cKgAvYleXQpcC4OUBZFCOVBa/nuhW8tw4zp8eqDTGZrtE4OOt4bLcCebUPKpayqSRWKC8BllQR8g4Z7NoYn+rg9vsOAKu1q4u3rmSO256J9KJeUQ/ryk9VsOY8fqRKPuXaOp0vnXftsk5uA9uNpfTSbWO0l4jn1bg3WJ64VCIfFx9nHy3SvYVNQDZyzU6ZYDggDY5pAtwdQVtAglI8ZCv0UoUmMG52Ba2KWI5z6Axv/mch2PS4fe7vBsJs2MmFuesLU74OkjZIlowXnJZJOiF9qn+w4hZ/JtXvn1cDnWzd1fnosFlahhTKe7rsu3lrl1tUgiQw7151akaRtKKnoK+Yz6/ffoiiX8YNsGvjnWCqOre2yTmJTxh+Yjzcd5QUKZE8Qg4YwQ30a5jNJ1zkXBvPJ6JeUnZ+tP3w8YXdoRHLokVkaplN8qhGub7jHCjNoKyMJoqdSz0KpPlXuQfOmtvoW2Dvw4mDSBKOFOMN1pUqXDVDi3lUplUrIYtinhwMQQ5YTWqqv0RYGe1KoJIYI6sU/UJf0N1Wd/0v3PaGyBC010VxABejOJFRbYE4WRSh00YPyA8Y+u0caCPzm7NALl6pc8PkSTO3g2hqSfx0jAwevejP2xYiF5fVys3vgnozcDrR9GaAho4axNxP053VJ7W3OJvpG+zsGeirt54DloC880Svt7cT5MFXMnpBrCw/e1rJshcXzmkWQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(136003)(346002)(366004)(376002)(53546011)(6486002)(31686004)(5660300002)(86362001)(478600001)(8676002)(36756003)(8936002)(66476007)(66556008)(956004)(4326008)(26005)(54906003)(66946007)(316002)(16526019)(2616005)(31696002)(2906002)(16576012)(186003)(83380400001)(38100700002)(6916009)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a13038e5-7b35-4dea-3128-08d94048ca1c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 06:39:22.3503
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yBCse2uV/vv+KuoMlBI/n9SCq+AEIFmWXkj4JyezfKC+4IVYXtzK8H2z6M3yXs+RMuSLSQwJN7fRRbXgcNdnlw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2333

On 05.07.2021 19:26, Olaf Hering wrote:
> Am Mon, 5 Jul 2021 17:13:28 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>>      ctx->save.stats = (struct precopy_stats){
>> -        .dirty_count = ctx->save.p2m_size,
>> +        .dirty_count = -1,
>>      };
> 
> As said earlier, a consumer of these data may now be unable to initialize itself properly. Without the patch it would be able to size its private data structures properly to p2m_size. With the patch it can not know in advance what the upper limit might be.

And as said before, besides the intention of this being usable for
sizing purposes not being spelled out anywhere (instead it is
explicitly documented that -1 means "unknown", and the value really
_is_ unknown at this point; p2m_size is only a wrongly assumed
upper bound), this is useless information as the size may change in
the course of migration. It is a present limitation that this isn't
handled properly, which I think would better not be baked into
further places.

> There is no in-tree consumer that is affected, and I do not have an out-of-tree consumer that might be broken by this change.
> 
> Just saying..

Sure, but (as is the case for Andrew's replies) if you want me to
change the patch, you need to not just "say" something, but provide
convincing arguments. So far I've provided counter arguments which
weren't proven wrong or at least inapplicable.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:42:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:42:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150753.278700 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0emm-00028c-RM; Tue, 06 Jul 2021 06:42:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150753.278700; Tue, 06 Jul 2021 06:42:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0emm-00028V-Lr; Tue, 06 Jul 2021 06:42:24 +0000
Received: by outflank-mailman (input) for mailman id 150753;
 Tue, 06 Jul 2021 06:42:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=NDCi=L6=darkstar.site=sakib@srs-us1.protection.inumbo.net>)
 id 1m0eml-00026x-7m
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:42:23 +0000
Received: from pb-smtp1.pobox.com (unknown [64.147.108.70])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 51266e4c-de25-11eb-8475-12813bfff9fa;
 Tue, 06 Jul 2021 06:42:22 +0000 (UTC)
Received: from pb-smtp1.pobox.com (unknown [127.0.0.1])
 by pb-smtp1.pobox.com (Postfix) with ESMTP id C3CCDDBCE2;
 Tue,  6 Jul 2021 02:42:21 -0400 (EDT)
 (envelope-from sakib@darkstar.site)
Received: from pb-smtp1.nyi.icgroup.com (unknown [127.0.0.1])
 by pb-smtp1.pobox.com (Postfix) with ESMTP id ABCCEDBCE0;
 Tue,  6 Jul 2021 02:42:21 -0400 (EDT)
 (envelope-from sakib@darkstar.site)
Received: from localhost (unknown [91.206.32.135])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (No client certificate requested)
 by pb-smtp1.pobox.com (Postfix) with ESMTPSA id 9DE2ADBCDF;
 Tue,  6 Jul 2021 02:42:17 -0400 (EDT)
 (envelope-from sakib@darkstar.site)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 51266e4c-de25-11eb-8475-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=pobox.com; h=from:to:cc
	:subject:date:message-id:mime-version:content-transfer-encoding;
	 s=sasl; bh=8zN62VEpwKBf6HVunARHc9SdCuhzxpB4cKJkCabouww=; b=BRTv
	1obdTJ6VVNUtkU/qeId/3Ofs5fEYvF6zEItbYcG9EK1l3hD9feFNkADfnqhFbdj/
	32djhR9aGwxuYG1Or0bxMUwzpVIN/OI9sGQt6W0QVKLXz37uxt8K7XCqB0hVKCs0
	YEAaIPyL/GhW8xfWT0KN+51rHLx4lqK/SiVnvzg=
From: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <ian.jackson@eu.citrix.com>,
	Wei Liu <wl@xen.org>,
	Sergiy Kibrik <Sergiy_Kibrik@epam.com>,
	Julien Grall <julien@xen.org>
Subject: [XEN PATCH v3] libxl/arm: provide guests with random seed
Date: Tue,  6 Jul 2021 06:33:45 +0000
Message-Id: <20210706063345.91169-1-Sergiy_Kibrik@epam.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
X-Pobox-Relay-ID:
 4E78CAF0-DE25-11EB-BDCA-8B3BC6D8090B-90055647!pb-smtp1.pobox.com
Content-Transfer-Encoding: quoted-printable

Pass 128 bytes of random seed via FDT, so that guests' CRNGs are better s=
eeded
early at boot. This is larger than ChaCha20 key size of 32, so each byte =
of
CRNG state will be mixed 4 times using this seed. There does not seem to =
be
advantage in larger seed though.

Depending on its configuration Linux can use the seed as device randomnes=
s
or to just quickly initialize CRNG.
In either case this will provide extra randomness to further harden CRNG.

Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
Reviewed-by: Julien Grall <julien@xen.org>

---
	Changes in V3:
		- Rebased on current master

---
 tools/libs/light/libxl_arm.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tools/libs/light/libxl_arm.c b/tools/libs/light/libxl_arm.c
index e2901f13b7..e3140a6e00 100644
--- a/tools/libs/light/libxl_arm.c
+++ b/tools/libs/light/libxl_arm.c
@@ -305,6 +305,9 @@ static int make_chosen_node(libxl__gc *gc, void *fdt,=
 bool ramdisk,
 {
     int res;
=20
+    /* 1024 bit enough to mix Linux CRNG state several times */
+    uint8_t seed[128];
+
     /* See linux Documentation/devicetree/... */
     res =3D fdt_begin_node(fdt, "chosen");
     if (res) return res;
@@ -343,6 +346,11 @@ static int make_chosen_node(libxl__gc *gc, void *fdt=
, bool ramdisk,
         if (res) return res;
     }
=20
+    res =3D libxl__random_bytes(gc, seed, sizeof(seed));
+    if (res) return res;
+    res =3D fdt_property(fdt, "rng-seed", seed, sizeof(seed));
+    if (res) return res;
+
     res =3D fdt_end_node(fdt);
     if (res) return res;
=20
--=20
2.25.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:46:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:46:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150760.278711 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0eqw-0002xb-9i; Tue, 06 Jul 2021 06:46:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150760.278711; Tue, 06 Jul 2021 06:46:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0eqw-0002xU-6d; Tue, 06 Jul 2021 06:46:42 +0000
Received: by outflank-mailman (input) for mailman id 150760;
 Tue, 06 Jul 2021 06:46:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0equ-0002xH-3T
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:46:40 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.54])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e9c016d0-de25-11eb-8475-12813bfff9fa;
 Tue, 06 Jul 2021 06:46:38 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx666kUOpm
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 08:46:30 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e9c016d0-de25-11eb-8475-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625553991;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=1jffNqQLHogyo3Jw1Ton40YbgCBL6qeVPHajT2tmOkg=;
    b=YscXZBChmkI50yJcH6TLcebrVvSqhmPEtXjSGCQNPxdGRvlsgUZDDwPrgXQOLN5Wrj
    jfmRsbEuj7cxL51FsPNUw3JxO5IlU+nhTL0+aUQGCBVXXXatpPzZ+jVZY6jTBzI5X9Uq
    V0YgSOvEbyJXkZzNYea5ivMaOP1IUmfnKuw44V6L6jmQ2ywzEH3/K0pFDewc9OkWyEW8
    X2iWRfo0qB7O5KxEmRMDUVUKUp133GVfxazqhlR1evGhDEF8nWZQ35HhRoMilUIrM1kg
    +OhmSPjf7jtdU40CEdkgVr+faJhINKh6yhEg9jLTQyEKTIZhVQHmQ/bYeqZrY/bvYz6u
    UB6w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 08:46:28 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, Roger Pau
 =?UTF-8?B?TW9ubsOp?= <roger.pau@citrix.com>, Juergen Gross
 <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>, Ian Jackson
 <iwj@xenproject.org>
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
Message-ID: <20210706084628.360a7f2a.olaf@aepfle.de>
In-Reply-To: <f70be58d-99f0-0631-2b01-436e3e94e5ee@suse.com>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
	<668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
	<20210705192612.5cf50887.olaf@aepfle.de>
	<f70be58d-99f0-0631-2b01-436e3e94e5ee@suse.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Am Tue, 6 Jul 2021 08:39:21 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> the size may change in the course of migration

How can the p2m_size change? This upper limit is queried once, then all loops take this as loop counter.

Olaf


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:54:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:54:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150766.278722 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0exx-0004eu-18; Tue, 06 Jul 2021 06:53:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150766.278722; Tue, 06 Jul 2021 06:53:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0exw-0004en-U6; Tue, 06 Jul 2021 06:53:56 +0000
Received: by outflank-mailman (input) for mailman id 150766;
 Tue, 06 Jul 2021 06:53:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0exw-0004ef-Bm
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:53:56 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1c20acdd-f782-4d90-9a60-23b23bae9cef;
 Tue, 06 Jul 2021 06:53:55 +0000 (UTC)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2053.outbound.protection.outlook.com [104.47.10.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-7-UQUtt3cLO-Gu7uXAsnUAiQ-2;
 Tue, 06 Jul 2021 08:53:53 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7087.eurprd04.prod.outlook.com (2603:10a6:800:12a::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 06:53:50 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 06:53:50 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0029.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101:1::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 06:53:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1c20acdd-f782-4d90-9a60-23b23bae9cef
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625554434;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=RWvi3Jq0kO9c3hJze5vhCxNEJJLQhWibh17OFiKGi00=;
	b=n7mpithINFPBQ+GxQfR6piOhpc9jifNa/rCe/S5vXardxrlRYLbb6V9USOXKu8RczeaMcT
	tmuaOz2CrlAqkGNhG6otaxRVQslPHjrTA7EGVojNc0hvaC+Ox8bBfVO2y1TDXxzZHjEt6A
	eG6/qVrjSJoMy17BvwYLEvQtP/4npwE=
X-MC-Unique: UQUtt3cLO-Gu7uXAsnUAiQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MBT47U1VREo+CTUNymvzJeHtD8WTLC7XloYx8u6/5WjINYafkBpq7ghMvarsevNSy3MtXL/nLCsDfzo7rCfJ6zagS9iVZCJ1HCRmPLzI3yHOuBzWvgwtFbsc3St6Opf6VVVSE2jQvYUwdkLszsmJxeB1Nmxi/OlAYqviDZnU1hJZ4lfoJdk4f0dOg/6bL/QnRvhwFbIUdXzxMbgF2UxKNLncP/gEYHfjbRoOkMlJgyTFAH5+JX5UwoGQUE1x9XV8qkezXRvl7ULwp+xsBR4gpfErEU7ZP3h5V6PNrNVkGzwpEMCuk3TAZYfbecsrdfpdblSE318flIrwdqDesWc4Ww==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zTS+7xxmaN13I6BzFeZcFWfA+d640YbKO6NKqW2txOw=;
 b=M/3CsalkJ6o6Ta+90SHDGzC2fCQmsvYfnP11z2jjVXaS+5RzLIqh4+NouwUA3zVRAmNMDVydsxqKF9uS6LbEucHTxdCKTfonQdratbcxhdYQ4Dp0KPOL8uH9AyO/BHpjS37QNflH96b6TeZDGrAtPqvr5oTSqGgNCEiresqIST8EzwV+nqc+whvGc+TiYGInHED7yG5jvwNu5nqaep2bJTn6rI6SASacxgAXlnM35ABsKdqFfwtw2oscDOd5/rASLko5QdJpbe9pteAPWIlKgmW4vJ/T6AnteShQKY2CBc/SxXs7BrI2U9hiDS2jI+gXhARwJI1Z1VlP16+JHy8NSA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
To: Penny Zheng <Penny.Zheng@arm.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 Julien Grall <julien@xen.org>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
Date: Tue, 6 Jul 2021 08:53:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2P264CA0029.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:101:1::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: acbe08b9-a2d0-4113-46ac-08d9404acfa4
X-MS-TrafficTypeDiagnostic: VI1PR04MB7087:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB708731C8FD0986DBB199354DB31B9@VI1PR04MB7087.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	RPmdOSMcqsNFMX95hp02TqaCG85XaA5dqbE85meCpvRauFiyLeWAVb/PnQPPFhqZ7bvER2/PZajGYWPMhOQ76w/zXKJmaxqk6WFgI7OBxRk6NpoQtt8f9UqxBxdW17JLAVlwuFGuBizdZ2szUg3nxEZuNdQYreInz0NAAa10H/83hKLSrvLaUv+NvJ+zFosXOtxHNUSSOODAkGrVNO7mWLJk4rNJfRcMfVRDqC3y3iqbycJdTcqkNjcLfzIc9tuN8ndG0vdwNyeYuDwe2K/5MP2522A+x293o3XrQRUfwna1WuZW/W232kKLvDapjl2fkLe0KFG+h37gG4/mckpntvnkBP/qSC2W5xIatM7zc9fSi37bAmX50ar5Rt8UMKJJaCCbbydVV004iUU2LZ7Ja5WoBcudR1gWYBoiqVwNnT9JMicqWnY6ZUr3nCiyXVBS8Q7qFpQwKyvyWbYyxy5y4qA9OiMatnoHuJLt0QBay2fEiOBoIyBZeMVaUbIexFcEf/VFPSbKk/N8TNEc2zKTP4NJ3EbfuD/b9pTkoDopP9JJxdwsRL3B8PsMGL5rKZKqH/b1hCxhpgyl3bQU3H47A5S0HLqoOTSQ6dai9pGcKnd33wv5YhaAxnvVG1JShgzrd+vqFNJ7s9Cav0feWnQI7pFCIV/mDPdyxI4XbWMMRtFanOc6jJz83gqCBYCjARdJKXpJc8SCK9fZ64X67EXL5sDMr55jppMk7yJfsMpURmq2Xrv7LZbtDe/AwgDKJgM3
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(346002)(39860400002)(376002)(396003)(316002)(66946007)(54906003)(16576012)(956004)(53546011)(16526019)(5660300002)(66476007)(4326008)(186003)(26005)(6486002)(8676002)(83380400001)(478600001)(8936002)(6916009)(66556008)(31686004)(2906002)(36756003)(2616005)(38100700002)(86362001)(31696002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?iDEtzc9jbGzfZZA9p7Cbzd1/JUiy4W3BcYXOiPjaS7wlnLyI5ZNMP5WFtsXD?=
 =?us-ascii?Q?LiKNGlvO/9T9z3uirA8veGaommgK/9eKs5jw0c6BGyhDo5G9J99LBMOQQfKK?=
 =?us-ascii?Q?qn+9P1QhHS/dKQjLSG+5DQEsdRfMt33GPQWPUdq7V7ujS4Ozk3C7TeiE30ap?=
 =?us-ascii?Q?lewrtCl0kp+3112u4f4Jh7YChOb7zP7Qfv4o24twMMr+2gWw1+gtmWwd6Hy7?=
 =?us-ascii?Q?xq8TRr7BG83l9LrtBxB7StbjExN2HqbLDd3TG1V1KYHUJNqbH6x4FZGJnq++?=
 =?us-ascii?Q?8MSGSqSHcSgze/uPo/S7MvQHR9MOV8NGeRInhr6TAV0IMaxygTs5w+jWHIJl?=
 =?us-ascii?Q?R3c74zp3uaoLQhboDAUiF3suJX/w3u4kabR/LwLL0+tjRuO2IK/cDW/LtT9N?=
 =?us-ascii?Q?46zKvn62i5FV/482agV0usH9WEw8KoIiiUIuhmKIoVOnJ/DnCvoWSnzon4kO?=
 =?us-ascii?Q?dKMUoIp/4UjYyUVdQAQUqrKDKbNfkOYvjL9wNtns9jfGyFCygw9Y5jYF7iN+?=
 =?us-ascii?Q?BtL1unjzpSPZxlu1LqFMU3MTd2JOf9hoRJjaGuU8lRA2a8LdLPzIQwQlHLOq?=
 =?us-ascii?Q?ZKpGQoR1vmcDVQGqS5tExmECa4af6qJfihshdB7BmIVFAewW+kA8st/3OuBE?=
 =?us-ascii?Q?pUU4BTYnTKLQkrEYLReQIH4FrYSoaOfq7c1Grw+LlAibnXlpKiUEJfNOpUm2?=
 =?us-ascii?Q?kPYVZ0XaHGrtnQoj/hIi51oGODzlNsiMnft3N9zjVWkkUuLgy5xanddOSe15?=
 =?us-ascii?Q?9YoUY7UbTubZLomCKPbGmFe5+9Ip3bTpJVeDXgovOuTliLhHQH3OqUjZ83jf?=
 =?us-ascii?Q?y/e8VGcfYJCnfAkN0pkLD6vki1GMMW0cuJZXQzR1iJocVplx/kBWxzDkP1fU?=
 =?us-ascii?Q?7+N45GMIz3K6n2pFWe8fWhtSsjFc9jHuFoI7sFmPCQD8WJdlakdmhfv3O0pQ?=
 =?us-ascii?Q?1qn9IFxghMcIYL6nAu3AEwwLbf5kFtIL9afMeM4q1su+d0P/324Ezc6PRAIq?=
 =?us-ascii?Q?X6v153q8sSKYZBgtZoELtxvz1WVtX4jnh+lnVL+raSrpmiBhQg6TD3yk9wz/?=
 =?us-ascii?Q?USvbHfZ9hH6RJz1IuxwMdcxSRLRjgVpGzW8QWwCqQ2ULjh+cG6mnJMwpzB6v?=
 =?us-ascii?Q?CDyKRPbzMA/ldI+7P8jqcgeTSz4X2KyTndk4psXaXyTc3A3ZNNkG9RdW94oC?=
 =?us-ascii?Q?ttxc/adWG2ru4JGbCGAGzSLj7Khc6phLX2nJghuh5yM/waShBuHe7CTAEe4b?=
 =?us-ascii?Q?n3/Lhk3cRpVBtPO5v3C+9xiuXSAZ3dIzggI8UEAjarPA8IhidI9DSWlRWkoW?=
 =?us-ascii?Q?f20KP2n0fU2tJHJMQA8xAlSp?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: acbe08b9-a2d0-4113-46ac-08d9404acfa4
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 06:53:50.6502
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: /Ca0oDS7wk/H+Mep+qejzhtDY9jpRdA+aGkyhQkuvqDJXSRIG+onpa6mySjQA4HJbNnBa/GSsbUgaolIAgLTjA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7087

On 06.07.2021 07:58, Penny Zheng wrote:
>> From: Jan Beulich <jbeulich@suse.com>
>> Sent: Thursday, June 10, 2021 6:23 PM
>>
>> On 07.06.2021 04:43, Penny Zheng wrote:
>>> --- a/xen/common/page_alloc.c
>>> +++ b/xen/common/page_alloc.c
>>> @@ -1065,6 +1065,75 @@ static struct page_info *alloc_heap_pages(
>>>      return pg;
>>>  }
>>>
>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>> +/*
>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static mem=
ory.
>>> + * It is the equivalent of alloc_heap_pages for static memory  */
>>> +static struct page_info *alloc_staticmem_pages(unsigned long nr_mfns,
>>> +                                               mfn_t smfn,
>>> +                                               unsigned int memflags)
>>> +{
>>> +    bool need_tlbflush =3D false;
>>> +    uint32_t tlbflush_timestamp =3D 0;
>>> +    unsigned long i;
>>> +    struct page_info *pg;
>>> +
>>> +    /* For now, it only supports allocating at specified address. */
>>> +    if ( !mfn_valid(smfn) || !nr_mfns )
>>> +    {
>>> +        printk(XENLOG_ERR
>>> +               "Invalid %lu static memory starting at %"PRI_mfn"\n",
>>
>> Reading a log containing e.g. "Invalid 0 static memory starting at ..." =
I don't
>> think I would recognize that the "0" is the count of pages.
>=20
> Sure. How about "try to allocate out of range page %"PRI_mfn"\n"?

This still doesn't convey _both_ parts of the if() that would cause
the log message to be issued.

>>> +               nr_mfns, mfn_x(smfn));
>>> +        return NULL;
>>> +    }
>>> +    pg =3D mfn_to_page(smfn);
>>> +
>>> +    for ( i =3D 0; i < nr_mfns; i++ )
>>> +    {
>>> +        /*
>>> +         * Reference count must continuously be zero for free pages
>>> +         * of static memory(PGC_reserved).
>>> +         */
>>> +        ASSERT(pg[i].count_info & PGC_reserved);
>>
>> What logic elsewhere guarantees that this will hold? ASSERT()s are to ve=
rify
>> that assumptions are met. But I don't think you can sensibly assume the =
caller
>> knows the range is reserved (and free), or else you could get away witho=
ut any
>> allocation function.
>=20
> The caller shall only call alloc_staticmem_pages when it knows range is r=
eserved,
> like, alloc_staticmem_pages is only called in the context of alloc_domsta=
tic_pages
> for now.

If the caller knows the static ranges, this isn't really "allocation".
I.e. I then question the need for "allocating" in the first place.

>>> +        if ( (pg[i].count_info & ~PGC_reserved) !=3D PGC_state_free )
>>> +        {
>>> +            printk(XENLOG_ERR
>>> +                   "Reference count must continuously be zero for free=
 pages"
>>> +                   "pg[%lu] MFN %"PRI_mfn" c=3D%#lx t=3D%#x\n",
>>> +                   i, mfn_x(page_to_mfn(pg + i)),
>>> +                   pg[i].count_info, pg[i].tlbflush_timestamp);
>>> +            BUG();
>>> +        }
>>
>> The same applies here at least until proper locking gets added, which I =
guess is
>> happening in the next patch when really it would need to happen right he=
re.
>>
>=20
> Ok, I will combine two commits together, and add locking here.=20
> I thought the content of this commit is a little bit too much, so maybe
> adding the proper lock shall be created as a new patch. =F0=9F=98=89
> =20
>> Furthermore I don't see why you don't fold ASSERT() and if into
>>
>>         if ( pg[i].count_info !=3D (PGC_state_free | PGC_reserved) )
>>
>> After all PGC_reserved is not similar to PGC_need_scrub, which
>> alloc_heap_pages() masks out the way you also have it here.
>>
>=20
> I understand that you prefer if condition is phrased as follows:
>  	if ( pg[i].count_info !=3D (PGC_state_free | PGC_reserved) )
> Agree that PGC_reserved shall has the same position as PGC_state_free.
> Hmmm, for why I don't fold ASSERT(), do you mean that=20
> ASSERT(pg[i].count_info =3D=3D (PGC_state_free | PGC_reserved))?

No. By converting to the suggested construct the ASSERT() disappears
by way of folding _into_ the if().

>> As to the printk() - the extra verbosity compared to the original isn't =
helpful or
>> necessary imo. The message needs to be distinguishable from the other on=
e,
>> yes, so it would better mention "static" in some way. But the prefix you=
 have is
>> too long for my taste (and lacks a separating blank anyway).
>>
>=20
> If you don't like the extra verbosity, maybe just
> " Static pg[%lu] MFN %"PRI_mfn" c=3D%#lx t=3D%#x.\n"?

Something along these lines, yes, but I wonder how difficult it is
to take the original message and insert "static" at a suitable place.
Any part you omit would again want justifying. Personally I'd go with
"pg[%u] static MFN %"PRI_mfn" c=3D%#lx o=3D%u v=3D%#lx t=3D%#x\n" unless an=
y
of the parts are provably pointless to log for static pages.

>>> @@ -2434,6 +2512,57 @@ struct page_info *alloc_domheap_pages(
>>>      return pg;
>>>  }
>>>
>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>> +/*
>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static
>>> +memory,
>>> + * then assign them to one specific domain #d.
>>> + * It is the equivalent of alloc_domheap_pages for static memory.
>>> + */
>>> +struct page_info *alloc_domstatic_pages(
>>> +        struct domain *d, unsigned long nr_mfns, mfn_t smfn,
>>> +        unsigned int memflags)
>>> +{
>>> +    struct page_info *pg =3D NULL;
>>> +    unsigned long dma_size;
>>> +
>>> +    ASSERT(!in_irq());
>>> +
>>> +    if ( !dma_bitsize )
>>> +        memflags &=3D ~MEMF_no_dma;
>>> +    else
>>> +    {
>>> +        if ( (dma_bitsize - PAGE_SHIFT) > 0 )
>>> +        {
>>> +            dma_size =3D 1ul << (dma_bitsize - PAGE_SHIFT);
>>> +            /* Starting address shall meet the DMA limitation. */
>>> +            if ( mfn_x(smfn) < dma_size )
>>> +                return NULL;
>>
>> I think I did ask this on v1 already: Why the first page? Static memory =
regions,
>> unlike buddy allocator zones, can cross power-of-2 address boundaries. H=
ence
>> it ought to be the last page that gets checked for fitting address width
>> restriction requirements.
>>
>> And then - is this necessary at all? Shouldn't "pre-defined by configura=
tion
>> using physical address ranges" imply the memory designated for a guest f=
its its
>> DMA needs?
>>
>=20
> Hmmm, In my understanding, here is the DMA restriction when using buddy a=
llocator:
>     else if ( (dma_zone =3D bits_to_zone(dma_bitsize)) < zone_hi )
>         pg =3D alloc_heap_pages(dma_zone + 1, zone_hi, order, memflags, d=
);
> dma_zone is restricting the starting buddy allocator zone, so I am thinki=
ng that here, it shall
> restrict the first page.
>=20
> imo, if let user define, it also could be missing DMA restriction?

Did you read my earlier reply? Again: The difference is that ordinary
allocations (buddies) can't cross zone boundaries. Hence it is
irrelevant if you check DMA properties on the first or last page - both
will have the same number of significant bits. The same is - afaict -
not true for static allocation ranges.

Of course, as expressed before, a question is whether DMA suitability
needs checking in the first place for static allocations: I'd view it
as mis-configuration if a domain was provided memory it can't really
use properly.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:57:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:57:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150772.278733 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0f1f-0005T8-Ho; Tue, 06 Jul 2021 06:57:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150772.278733; Tue, 06 Jul 2021 06:57:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0f1f-0005T1-Eo; Tue, 06 Jul 2021 06:57:47 +0000
Received: by outflank-mailman (input) for mailman id 150772;
 Tue, 06 Jul 2021 06:57:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0f1e-0005Sm-3z
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:57:46 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e0196280-3e80-4dd7-8a53-fe66100d7bb7;
 Tue, 06 Jul 2021 06:57:45 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2058.outbound.protection.outlook.com [104.47.14.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-20-pIA2RiI5MZq6LN_45l4pkg-1; Tue, 06 Jul 2021 08:57:43 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Tue, 6 Jul
 2021 06:57:42 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 06:57:42 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR04CA0013.eurprd04.prod.outlook.com (2603:10a6:208:122::26) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Tue, 6 Jul 2021 06:57:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e0196280-3e80-4dd7-8a53-fe66100d7bb7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625554664;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=YnD64+A6ch4p4E5B2CCGRxrSjFWqH1bLaeJb+TgfaSY=;
	b=I1YiFgqRWUjdjnVTwyWeHQQ9OdG01+nOfP6VBgHMlw4fmYN1hKLB0M12KolLGAAUlR4hPD
	tgydeEia9pLbR9CLtfVOrZHdE0uLZFFReshTGqwg+noDFvq9CKadC6YVFM938kBeXkehO/
	wcFJNiaTprTGOldTpyKbKTM822KnszM=
X-MC-Unique: pIA2RiI5MZq6LN_45l4pkg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EDYTy/xKNLLNeTfq1eWSYYKN8QhB3oAyn9KYwmJL5nuyfGjmnPfGimVkztNCrHsHR6ZIQY1/vYAJpBd0uC/UcvKgEyAtrEDmNAcm18nxZ6sb5A/Aa9/SJ2rdgywLCkxG0tUzBuWGn2yS+z0I2Uu4nl14hmVAclvfE+6BFhKxFQFH/p5WVF1uY45VdY5+SPz+gf4hu9PpOhyOQXkDPk4SZaIQRmtgqyGaYIoe21KrYU07lLAv6at4nYufWwn2QDlq4SaB3I9V8un2HvWvZcMEo1HhGmOTVhNzx4gV6uF4BACINTJb9GxscNyDrn6ahsybN6UEFHbaKsQx80gTXiYgUw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YnD64+A6ch4p4E5B2CCGRxrSjFWqH1bLaeJb+TgfaSY=;
 b=VSnyH9Z5FwzH99exB50wMRYb1qlVoW6CZ4e5sjo0Ln3A469gXMnUlrAwS4L9nw94WwzzGi/RXwtGOJEiYCRDj4eWbKzkq+WfAzQQbFn7xj2cUcXltGivhVOn41ScZxCAhch9RDA1OUurKlb4Iw1g0nOByoeNF0FLrQMFk5WzPaS+YE51GJ/Npd87X5i/1Mhq+YkNqXX5apoLXhVwhL+6Wrnkf8Em4Y23wcI7ndHINDfrn3mB1ETSF8kbjkskCazjamt+kUBzrvSMJW4mVWeDNw8mxEKV7XjgPjKDibpbQK3h9cOGSUDsePvcm1PeNV3vwr3Y9OeaR5iX5+McpwShjw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
To: Penny Zheng <Penny.Zheng@arm.com>, Julien Grall <julien@xen.org>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-9-penny.zheng@arm.com>
 <f613372a-eac8-f79b-2941-b7cce3e1e0e7@xen.org>
 <VE1PR08MB52155D35A7B716DC7337311DF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <20e825e2-0266-3120-2d32-3fde50fe46a6@suse.com>
Date: Tue, 6 Jul 2021 08:57:41 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <VE1PR08MB52155D35A7B716DC7337311DF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM0PR04CA0013.eurprd04.prod.outlook.com
 (2603:10a6:208:122::26) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c898b461-2c0f-4cfa-0b4b-08d9404b59e1
X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5165643B5F4681F21738B208B31B9@VI1PR04MB5165.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	gDzpvudh9MLeJix6mQ8mrdpvj1zft3E8u9WFXdERCx2t59rFj6XclDu6wb16NxX0/Rx4LZgnh2cM/0kNAM2f+3pzwZBbDk4TRmc489Bw+any8B8g+J5DXPl/atrqe6m59ujqI0aCrRzvs5wvIcdqdtsTY+3K38iE07ThQRlnVzkvYe/6MA9tDYBm3XOY3bCCDEGFt3h7NX8omw5zmNSlp2S025Vr6VifLi14V6rtltUJ9awSxGbtj42E2CQxDlVN6UiZ0Xg6KXGWip3LIjIBwgs3+pQRJcUB3A5ao0DtogzxBFZ79jH39bCEEMFytnGt40RaS/Z6qoTgwQViccTxRPyFAoF2IPVqQmd7IgoVTyou++VJ0UZQSK04IrMi12d1hq+qsMGf2AEJ1ykWn139sMKklhHAXWs134fxOau7YsAAp5J2Dtk/3StzLsnd7v7fPRgjdGwrKxay89n31d7QRDmygxOoadd7HrVBgVu13PnNviEtNiMMw0PT5/YzcoQDIpv3WbTSrW3X1GFPcnjHtXkdUJgYqdeBtIaGYP2suykvjUgGDgALCxSdlC5k5bZFeV28/MVK+CXaFcEO+huuB1R9O2sp7sx5E/Bni9GzGe3WgxBceyITlNuju0rNfGMkUdDedXpHC1te0j88J5xOoM8df9HBrF4dh0usMlypeE5Q3F9fuz0u3SgpYsGbGkAB8zZDgt1FoRl9uksUmkUcAYdJT8D9hwLcyWIgw6fPa6v3DWv7Ct/8HYeddS5a/3Itahi+O28Gyw+XOR7S6VXBhg==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(346002)(376002)(136003)(366004)(478600001)(16526019)(6486002)(16576012)(186003)(8936002)(8676002)(53546011)(956004)(316002)(2616005)(66946007)(66556008)(26005)(31696002)(86362001)(5660300002)(558084003)(110136005)(4326008)(2906002)(54906003)(31686004)(36756003)(38100700002)(66476007)(81973001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?NkpvcEtUNUZXNEpMQ0dpSm9HNVdMMk5adkxJWkhtZ3VLajdmZnpwZkMwalZC?=
 =?utf-8?B?dTZxeXJFS2h1aDJqWDJ3SGQ1OGROeW15WkdPOGpWVlVwQ1JTaFJkSm9LV3VE?=
 =?utf-8?B?eXo3amJ5UVJzTWlNMXVJeHl4TVRIQ1Z0S0U2UVVSZjNwdHJSWndEWnU4Z0xp?=
 =?utf-8?B?RVVPb3J5dmI0UGtOc3lRdlRPK3JENkdBTDdmZUlxS29rS1pGZnpPSXpNUTdo?=
 =?utf-8?B?dmMvOXFqbEFKajloQVkxVkhXTU5mUElsaWJabnc3QkZSeE1BY2lrL2cvaU4x?=
 =?utf-8?B?MXFHb084UXAwOHJ3TTRpZU0wRGZ2T2FtcGZpckQyRlF5ejI1c1VmdzdCaVhp?=
 =?utf-8?B?aGRURlB5WHY1elFKNUxvSzR6ZmtoOEtuTE5jNkVTdzRwOVl6WHl6c1FlQ05a?=
 =?utf-8?B?c3ViQWc1UnpwYkM3aXJEbm5iWWJPeEpxT3U3OTFOcW5KN1JzUUFtc1NNdmpv?=
 =?utf-8?B?Rmhjbko4M1NnVmM3Uk05K250REJ0QXhJVFY3V1NGVnI4MlFrOVAzNll3MkxC?=
 =?utf-8?B?cXh3QnBnSXFocUsxV1ZNMy9UbjBZVzBzSjdLbTY4Rnc4bU1Nc2ZRN2JNSGJ2?=
 =?utf-8?B?OHNlcWVCZVltSU4yWXA4d01IbEZGYmpsUyt5M3lwVFZ0b09nZHQwY1ZPUk1n?=
 =?utf-8?B?RmNyVmdCdmZoalNuZ2UwcXFJUDVsNThSdm51NGJkRGpqai9OMGZSaGEvVm5S?=
 =?utf-8?B?dXRXOHoybnpTY3pldytqb3VOd0R6QnBHbHBOQW02cUJRZGxsZW0vWXpITVZj?=
 =?utf-8?B?SjQ0QktpTWFXTGQreFp3K2NnN1hJYWY5ckV4L2crdnJlSzJueUFNYm1FVE5x?=
 =?utf-8?B?TytrL1Q4WmhyeXlBYmpLM0hKVXBsUDRpZmdTYkRtWThCTm45c3FVVlZhamps?=
 =?utf-8?B?SWlCeUx1dkZOSFV1RVJiK0UrQXlDQkFWZlB4c3h2L2tMSGdJVDNNRmMxN1Js?=
 =?utf-8?B?bDlEYWdpSytodDAyN1dBQy9NR0YyZW1YUVZQczBqUDFzTlpIbUlPM2J6UXh2?=
 =?utf-8?B?MS9STUV5Y2hYQms1ZEN3NmgrWlNkWm1Ua05qWTVrMjJ3Wnh4M01EeWxjVEVl?=
 =?utf-8?B?L242akZTQjM0TFp5Z1kvbGVuUDVoRXpuWVB3L2ZMbkErVkpua2MxZ2ZWT1lP?=
 =?utf-8?B?WFVoUFlQenJsZGQxYmN1ZWFlNmZScVZNa1dVcGxERTdla0ErTnRlbDZFczhL?=
 =?utf-8?B?YUNQc2prZDA4K0xrUWFwTFVvOWtScXBNY2hPZ2pIKzVBanBLQkpOSVRMYUJO?=
 =?utf-8?B?S0pBUG85OU45ZjFrWlpoaEY3ZDBvOFRLNmMrVjhDTkRWaGt6UHc5Y1A3dFZ2?=
 =?utf-8?B?cWozaWFJU2FISjhFYWNFZGRqVWJnNUxwSVN0QUFhdEtzZU5NNGRaWTFVTVBy?=
 =?utf-8?B?cXFvRlJTVVVpWlg5SC90UFc2YnREb3lLQ1FXeG1UMlRkT0xkYWRNdVYrQnVw?=
 =?utf-8?B?UnltTk9VRGh3SmJ0dVRJYVNxeG9DNU9rbWtFMzROVFlxM2dCREUzNWVOUXpC?=
 =?utf-8?B?WGpvbDBSOGJCMzJYcWxpUWc2bW9Pc3JiL2tGVjVmcXp4ZWt4OWtRRnFQaXk1?=
 =?utf-8?B?L2hoWXZYRmNsVGlxQ090eFVtcFk3OUtYb2daZkYyenE2ekQweEZ4QVRud1FT?=
 =?utf-8?B?cVZOQkJZSHVrcWFoWFMweVNpaVVmWkNBK3RCTWhLdGh5MVh5VW1EbGphdVVt?=
 =?utf-8?B?cnJNdkt4NzViR3JNQVZKZm1kTUtzeExjNlFra3FSVlE0Q3plZFlLZ1VDdS9J?=
 =?utf-8?Q?cD2aTVv8JAJ6jx4p12Nx8xmk/YjKkeO5rMxIlem?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c898b461-2c0f-4cfa-0b4b-08d9404b59e1
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 06:57:42.5350
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: G/bL4lnwu/oy1a3QLUz/I7H335fDKWhjxWroDUAmVx2oL8VfW7NQnEKJlpjZg/h81D+2OmONvCunYP/EbpAaDA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165

On 06.07.2021 08:31, Penny Zheng wrote:
> Hi 

I'm sorry, but since this has been ongoing: Can the two of you please
properly separate between To: and Cc:. For quite some parts of this
overall thread I've been on the To: list for no reason at all, afaict.

Thanks, Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 06:59:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 06:59:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150778.278744 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0f31-0006BL-0c; Tue, 06 Jul 2021 06:59:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150778.278744; Tue, 06 Jul 2021 06:59:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0f30-0006BE-TT; Tue, 06 Jul 2021 06:59:10 +0000
Received: by outflank-mailman (input) for mailman id 150778;
 Tue, 06 Jul 2021 06:59:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0f2y-0006B1-Vm
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 06:59:09 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9b4efadb-ecdb-4082-ac68-70d5bc32b68b;
 Tue, 06 Jul 2021 06:59:08 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2104.outbound.protection.outlook.com [104.47.17.104])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-33-noFJCHZbPB2xmb2elYlJoQ-2; Tue, 06 Jul 2021 08:59:06 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5469.eurprd04.prod.outlook.com (2603:10a6:803:cf::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19; Tue, 6 Jul
 2021 06:59:01 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 06:59:00 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P189CA0080.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::25) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Tue, 6 Jul 2021 06:58:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9b4efadb-ecdb-4082-ac68-70d5bc32b68b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625554747;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=pLXTQjO7Tf97umbRk4vNIydaS6aSK8qS6UAOWogW5T4=;
	b=H7sHeC2H5bxruOfWxQefR+y+/5QSCZQQbBSJ3jwPrtDS6U4zBk4EoJUsoZrFirjrPXu4WT
	4R2Jcedyzm56vlGkekrTe1wIaA4KeLDj45KGLaI6i7OkgbN3y83BGd8ec1tyAqnBFrvvB7
	BoMfw+yVfz9tgN/Q45DluG9UVDZm8K0=
X-MC-Unique: noFJCHZbPB2xmb2elYlJoQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hGAehSPspoVHBKbkF3+dCtFMvukK3HyLvTPznbbTy9caoZzYde4KW+ZbPdLy19to93QGau/w6upka2L/RcBEWHMr+VRKkmioxhfRt5bdpXEyavM9r+S1w6yMyY7nOTgu/zAtsH1AxPDOr+2HAGo1Z/HTX9JaLck1wtAyn1rjFtXifzQPZnkzda2sNRHuThVrwj1w5eZPBt2tVZo61z0Cek7q5BB4mP0Lnc9QXjzTST5YcepvF/XF3TPScO5Ws6Zk6Y/hxZ2B8htejQc/QhKM5OXpQ3XlSiORUSdU4ksRRTyXZnWF8dfeiaqymhP27d+CXjhyHn9H9+dvjy6FSNt+DQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pLXTQjO7Tf97umbRk4vNIydaS6aSK8qS6UAOWogW5T4=;
 b=F7x/BostAGyv/9ThBKkeIN6X4kouwheFbeau6tSiyjn4nvKUWzGOjUX0S/LL77Rm9y+hfTBBh4RxhwFVBHOTLowqKfFadpwbo7hkDYtM4tepypax9B4f8OrZ1fcqqkifd/bkuFxQh5Sbsuq5jigk3WFcJhOJgELB0/sAnUzheoR/ZS+80eLecpfqMtNYTaNPNevUYCEHHjYc79tqIXJHe76vsEjYPj1mAH8SkoQy/qRHZt21Wnq3dGQHwsylO7WMh8ipF3ac1v428foBljwIOECJTacUk8moJyA9qI8pP8oZSEX51DInywOveo2NPnH+8Pr+IjxGMmz2/GFarJY1Ug==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xenproject.org; dkim=none (message not signed)
 header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
To: Olaf Hering <olaf@aepfle.de>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
 <20210705192612.5cf50887.olaf@aepfle.de>
 <f70be58d-99f0-0631-2b01-436e3e94e5ee@suse.com>
 <20210706084628.360a7f2a.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c4463e5c-48f8-8d46-e959-22c9e3710637@suse.com>
Date: Tue, 6 Jul 2021 08:58:59 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706084628.360a7f2a.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P189CA0080.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:102:b4::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 668a642c-ad40-492a-6e03-08d9404b8889
X-MS-TrafficTypeDiagnostic: VI1PR04MB5469:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54698DD4F305DDF5D2D61F05B31B9@VI1PR04MB5469.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Ivj4OQRYRXrNRW828IR7XxMKs3omzBSh2SC5DhdFOr2qS+4SgGn1WWMwQqlZFfeInTI0mgjOk52jy9Iq1c1euLTOK/i+JAYjmNufkRZ4+B9/rc4fuxdOJrcZXh/DqDs1nl0m/hBdCkYuVo1OMqT0n15iUg3DiI4SBtGXpLgnVGVCLFegxUSZ2NR3ZedBE+x63XcuvXYqjPqLOPt03rj9r9MCjcYf8+JEOa3GDNpH0mGYFqG88Z2TwakyWReiZ61QM5zHw59vhejxZrRNlcKFtrHZML4ila56EWpI3QoAgCXgUhrE0Iv3C9WwBQ0aq/0rparC7iKzENHlXvq1NwxF4QbI94hNqR57lIZMw4+EOEddRprk4oy6ZzfIplBY4dWgRQhBPCVxXlLV/dCdbw5MHwVni3lYa5WJ4GM/JYPvmzt0RkUbA+ukVsPJwICIT7gcZfCcvRMvtZSiSvn5UoohpiHqJe50g34JMKAukYpOdHZlZmnv2Ezdmzgia4vhpJCQKCnJyI5sYFeqSrZ6ONzMMvOcvOs6xwiTl0ovyjcCJRNb28Fd40pd8WmK55UWqpdz3xst+Nu3VAetEHoQ5z+s9rRTBBTkPRy2BaoSsAf/RJF2EMGEqxpI27FOuTlHA6SwhnZg/geGvK60gtiSfEG/HVVBYGJteVtTz32PJaagz7E7GbK4iiDU88MdRQAuxtYTazBT2dyMwqe7/JpI91hAybSTRSv/BD9ml2pV6lJTtHLOyBveeVhy1TCpsjXSPfd/yB2TbhPJbl5VuXAy4r/3Cg==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(396003)(39850400004)(376002)(346002)(6486002)(316002)(186003)(83380400001)(16526019)(36756003)(2616005)(4744005)(2906002)(66946007)(86362001)(26005)(6916009)(66476007)(53546011)(956004)(5660300002)(66556008)(31696002)(478600001)(8676002)(38100700002)(31686004)(4326008)(54906003)(16576012)(8936002)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?U/LL2Gf5c3ZaKY8qlKXqvCER+IxRaPtEl4V66uz?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 668a642c-ad40-492a-6e03-08d9404b8889
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 06:59:00.8277
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: IiylMZwwtNgYb2D2LFLoPq0bts6cQHfroXGOFQS4nUfx+rzDQCHdVRDIoDwj37fgdP8/Uqex+HXvMxN3quxpRw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5469

On 06.07.2021 08:46, Olaf Hering wrote:
> Am Tue, 6 Jul 2021 08:39:21 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>> the size may change in the course of migration
> 
> How can the p2m_size change? This upper limit is queried once, then
> all loops take this as loop counter.

Well, that's part of the current limitation. The size would need re-querying
before every iteration (or at the very least before the last one, after the
domain has been paused).

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:06:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:06:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150785.278755 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0f9d-0007vJ-NC; Tue, 06 Jul 2021 07:06:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150785.278755; Tue, 06 Jul 2021 07:06:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0f9d-0007vB-Jf; Tue, 06 Jul 2021 07:06:01 +0000
Received: by outflank-mailman (input) for mailman id 150785;
 Tue, 06 Jul 2021 07:05:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0f9b-0007v0-Rc
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:05:59 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id aed28bb2-2a87-4d50-863d-d8987d106fe7;
 Tue, 06 Jul 2021 07:05:59 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2051.outbound.protection.outlook.com [104.47.13.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-32-721VTY5cMUWomGorOp2XtA-1; Tue, 06 Jul 2021 09:05:57 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2335.eurprd04.prod.outlook.com (2603:10a6:800:2e::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 07:05:55 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:05:55 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0032.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 07:05:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aed28bb2-2a87-4d50-863d-d8987d106fe7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625555158;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=SUpr3RDGFTqGWjEogHhWrI6pokeMjD44aLKIwZvnhh4=;
	b=UWy4XnS5bEIa6c6KNStzxLnzqAaaXPU6T2ppIwDkQElrAc/0N8+9cZwHCzs9bcIT+NPTR2
	d/2G+xgdI7VXqhXzuyaNr/x8s3OaHW1GEpuz5A9uMnTrzj/cZX1/vE+AUdgwk9HWkAsInc
	a98jARwHJTXaCUH9ppoVg+wQvZy2n8c=
X-MC-Unique: 721VTY5cMUWomGorOp2XtA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GcEqCrfizHeVNcmJbFCOTfoaEEN0LShy8hAHvAIQI2zZwwgUlQwtgwbCuqntVl9mHxxaBhwyv/lUjzDQmmqdsNNIFUL/dHoIjCjrWXRF1dMyF7/mX89BUl9e6Mv1YILVdwSOaYMMLcxhW+exQlf5Sah420BEtDevTjr55m6rUrJrf+VatVEoFZroUrzLUzRiTw2EiiEE5tJcVd209abql8ftEx0IB8CEYdrbMXfgGeVFnjyjma3LMxe+LK/4Xk2pQy11dU9rolo3K1WQqc24nSTzSYFPucZVVubOYmUSirdLPLsSFyGhwfvyrL7QhnCQP1EYaADKAr/Asm5kn/jJKQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=SUpr3RDGFTqGWjEogHhWrI6pokeMjD44aLKIwZvnhh4=;
 b=fX2PT8IZB1ZO/hVHNVLZ7RFAJM5nUKWoqcxHG56YyLKUkO+0SoKRxvoUQdI7sUq58m8oQUKIbsz9Auv2dIcpfm41imFtmazqRqeBVBg+JPPU05ASsUTH2nQz8nUb2fqwoJ95XYKv5PMhDqP9UBQInubfu76j427F1+xIJFYh4jfFrw3xlaAxCb1j1WF92qucLF6Mxr+JBlKM5KK+p+tnGiA/hcuaxEaWbROcaKJMjqKpfV/aNhx2aAIEWO0s0cvxMQuucvIHhvyWQLK1KfeF8l2GXrLhnHF1KRVGeZYf1jrOZItnkhRHXI5STccwP2ATVpNl4QgCnEg+uGp5jQtYqw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 02/16] x86/P2M: introduce p2m_{add,remove}_page()
To: paul@xen.org
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
 <eaf6f63d-1122-f52d-1147-cda40a9c3387@suse.com>
 <04de95f8-313e-aef3-1cea-599d5526233b@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c527a6a9-f747-4a52-c668-069afdc375ec@suse.com>
Date: Tue, 6 Jul 2021 09:05:54 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <04de95f8-313e-aef3-1cea-599d5526233b@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR1P264CA0032.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::19) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2b8d294f-12a4-4937-21b4-08d9404c7f98
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2335:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB23356CE73695702ED5454DBCB31B9@VI1PR0401MB2335.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	mKagGXFULGaz7ymB2+IoA32VuU+ePp0j2bnlioTgIhBAcSxm1jSmyrlgDVrdQgFps8hreBQFt2wUnDfCeuI8UF9Yf6l5I0LdejYuV8gB6xzdE5P+EkIR90Q9LpPFiFk5ImbZJIhGr1WSk4MVCtMBloH0iveGv9eNb7YpHoEGrWS9m4a8tqi48sar91G0gQbmjEv5hy/ZkM7avGpO9TRf/6KzWnsJBS0LrtMItAsAYN9R3o7+oVFLxdTCQoq/ziwH3yjhE8jtx+HVps2kOEKstvY5i+K7gOWNt+4aF+93Ui0dU3WhRA6qtJlhO5FoFcuIw0doCCZ1maZwMqzYNbvfPdnFWObZNAFG1an0VUZqo2HFIDZo3BgjErVFIo/HbKEj53D2RUboJoiGkQslFGPbYTrhdOrfQEDxgRW3ZGZyx6VkzPHqbIZTm4Snx+wwKyoE4FDG6+IRrE7gFFfs+yNC1HGQ7rkBJMDnq2FV7Intz5rv2lIMxAveK9DSzrQK6V/TJCXt8noQ0/bMzV+sVE2YDHHH5BxW4/uep+H4s27PSzWrxDvqh8qzAtbhDyF9zUIT4eiGzRLM70FhXsCd4828QX+44WslyGlGeGzu7GNDIaneBCxbhdbxkqstPDRsm7WI4HUONeFJ/gf0pdyNJ8hmchZGp56KfUZiMNasIo6cb3ae7Gib+a6qtMFQ4Hm1vdIU4DsmIe9F1+RBG0hygHqMYwyhKFJSnodhkaX7VUN3Ueo=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39860400002)(376002)(366004)(346002)(396003)(66946007)(2906002)(478600001)(38100700002)(36756003)(31696002)(66476007)(26005)(5660300002)(66556008)(53546011)(186003)(16526019)(6486002)(4744005)(31686004)(54906003)(4326008)(6916009)(8676002)(316002)(956004)(16576012)(2616005)(86362001)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 2b8d294f-12a4-4937-21b4-08d9404c7f98
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:05:55.3153
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: q/nk04641uUCGhq16AVlJa8+G1krsKu6e2H8+t7xr5FSqyNJzJNzYoTSNNsZdMfeq2LYmcM2fWNMAvExmFC7lQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2335

On 05.07.2021 19:47, Paul Durrant wrote:
> On 05/07/2021 17:06, Jan Beulich wrote:
>> p2m_add_page() is simply a rename from guest_physmap_add_entry().
>> p2m_remove_page() then is its counterpart, despite rendering
>> guest_physmap_remove_page().
> 
> Did some words get dropped in that second sentence? I can't really 
> understand what it is saying.

Oops - this was meant to be "...  a trivial wrapper".

>> This way callers can use suitable pairs of
>> functions (previously violated by hvm/grant_table.c).
>>
>> In HVM-specific code further avoid going through the guest_physmap_*()
>> layer, and instead use the two new/renamed functions directly.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>>
> 
> The code looks fine so...
> 
> Reviewed-by: Paul Durrant <paul@xen.org>

Thanks.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:10:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:10:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150791.278766 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fDU-0000Jb-7Q; Tue, 06 Jul 2021 07:10:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150791.278766; Tue, 06 Jul 2021 07:10:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fDU-0000JS-4B; Tue, 06 Jul 2021 07:10:00 +0000
Received: by outflank-mailman (input) for mailman id 150791;
 Tue, 06 Jul 2021 07:09:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0fDS-0000JH-QS; Tue, 06 Jul 2021 07:09:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0fDS-0002q0-Gh; Tue, 06 Jul 2021 07:09:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0fDS-0005Uw-6z; Tue, 06 Jul 2021 07:09:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0fDS-0001us-6S; Tue, 06 Jul 2021 07:09:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=6PoOh7ms3iAQXs6yrSMGvvVulgSRe4hrC2lgD7ByG4E=; b=JzXGpZ317u8g8X2rCathhsytiV
	4++P1myuVQG/jDXzMMtYlRcOcjPtdzMU/+y3uMKol4XFrHLbax2+gvsN0NjCrRnuKg2rb8aFTWi0X
	w3qosMKIF5Eyf3ybBWfd/+vYrO4jXClZhkPRiqSaFZ9/x07CAbUfFMLKw1AqxdeQZJbw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163316-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163316: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:debian-install:fail:regression
    linux-linus:test-amd64-amd64-xl-multivcpu:guest-start/debian.repeat:fail:heisenbug
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=a180bd1d7e16173d965b263c5a536aa40afa2a2a
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 07:09:58 +0000

flight 163316 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163316/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt     12 debian-install fail in 163306 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-multivcpu 22 guest-start/debian.repeat fail in 163306 pass in 163316
 test-armhf-armhf-libvirt      8 xen-boot                   fail pass in 163306

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                a180bd1d7e16173d965b263c5a536aa40afa2a2a
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  339 days
Failing since        152366  2020-08-01 20:49:34 Z  338 days  577 attempts
Testing same since   163306  2021-07-05 01:56:19 Z    1 days    2 attempts

------------------------------------------------------------
6543 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1893795 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:11:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:11:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150798.278779 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fF8-0001lP-Nk; Tue, 06 Jul 2021 07:11:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150798.278779; Tue, 06 Jul 2021 07:11:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fF8-0001lI-Kp; Tue, 06 Jul 2021 07:11:42 +0000
Received: by outflank-mailman (input) for mailman id 150798;
 Tue, 06 Jul 2021 07:11:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0fF6-0001l7-Ma
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:11:41 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 686c26d8-de29-11eb-8476-12813bfff9fa;
 Tue, 06 Jul 2021 07:11:39 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx667BTOyh
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 09:11:29 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 686c26d8-de29-11eb-8476-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625555490;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=stepMfQWD9Hy8MTmzI5cX04JZXnAjFIunFCNo8JfTPA=;
    b=ePn5VOLPBAd4Es5HqV3wrY3nhhZW0pW5px5VrlY9YScq1YAkEKXRpE0KS7b70qdLiu
    ZrlcLavJU9bTP+qrNraIUZRMR8vwzmXr0XjB+kA546/M3ZUx2c91hX9/XObONk66fsmb
    0qIMEQxQ7rGl57920IAJJ+mRMrOUIHsqSOMCOq+QMDRP1QI5Hh3xo8hdkZX4GXqQCzIC
    PmVO4NUV4dNqHMX/7Ey/rrDIOkIo1V0gIlw06vjwh3D/YqpGXdv72egZjttIvRtVtDbZ
    K4z7167fw8vJXyqy+rwhOEH6M92FGXOip4vwzBcDlzj3TetAO/kwrLAjRg+LWr0vVkPR
    hQBw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 09:11:29 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Marek =?UTF-8?B?TWFyY3p5?=
 =?UTF-8?B?a293c2tpLUfDs3JlY2tp?= <marmarek@invisiblethingslab.com>,
 "Juergen Gross" <jgross@suse.com>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>
Subject: Re: [PATCH 0/5] tools/migration: Py3 fixes, and page type helpers
Message-ID: <20210706091129.45451433.olaf@aepfle.de>
In-Reply-To: <20210705191027.15107-1-andrew.cooper3@citrix.com>
References: <20210705191027.15107-1-andrew.cooper3@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Am Mon, 5 Jul 2021 20:10:22 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

>   tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
>   tools/python: fix Python3.4 TypeError in format string
>   tools/migration: unify known page type checking
>   tools/migration: unify type checking for data pfns in the VM
>   tools/migration: unify type checking for data pfns in migration stream

Tested-by: Olaf Hering <olaf@aepfle.de>


Olaf


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:15:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:15:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150805.278791 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fIP-0002ZM-6c; Tue, 06 Jul 2021 07:15:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150805.278791; Tue, 06 Jul 2021 07:15:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fIP-0002ZF-3N; Tue, 06 Jul 2021 07:15:05 +0000
Received: by outflank-mailman (input) for mailman id 150805;
 Tue, 06 Jul 2021 07:15:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0fIN-0002Z8-VA
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:15:03 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e17ef5b4-de29-11eb-8476-12813bfff9fa;
 Tue, 06 Jul 2021 07:15:03 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2053.outbound.protection.outlook.com [104.47.13.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-2-AiWrY6YHNcOAA8iWjmsXOg-1;
 Tue, 06 Jul 2021 09:15:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5471.eurprd04.prod.outlook.com (2603:10a6:803:d0::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 07:14:58 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:14:58 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0029.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.7 via Frontend Transport; Tue, 6 Jul 2021 07:14:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e17ef5b4-de29-11eb-8476-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625555702;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=vXk2Wdq9PXDPwAThJoG+9ZIO/JrEsHbliRDZXe5sTAo=;
	b=BKPkYf3kBwOXW8XnjZsQVJyyVb9Nu2F7gETgOQcW8N0P7u/ya7bYMYeltDg4XwPwEA93s2
	O7NqePYdQgzBKEX4QpGlUrHl2Z4+1grAYTM7YRBnu6D3p8fvv9tB8WwsiyXZncIz0rEm2Q
	+Oo51b/I+FsCWjyeMWAyM5PRI0MeY7Y=
X-MC-Unique: AiWrY6YHNcOAA8iWjmsXOg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MQ1OVwbHEiTRYqnoL6W8VqzO5XPlHNIveqKzNyfYBbMmWBcUkMChL8cdQ01x51rTW29OYIUjI4wL5eAG3v8MeYaId0MujS8b0tvPPYb32E0g4jScJmdRpO6Rdk0RPa3ZdY8MC1/W1J2+el/bbugGwckyCd4l8US9EriVveMWTouhCjzpaGc90vFSOnRgk8H6Ft9zoKqlWTuLx+asQMJ/MzSWkEhUZruBSUsLVRobCyD1lgTVk9ljsuLrFZUEhxJf1F8svEoGV0S4dXpg0K30f8cQFpbGhRZZL7AD9Y5UdaoCcKWUIbPffblBQrahjMEdN8ymD8L0NfXxE2/VcJEHYg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vXk2Wdq9PXDPwAThJoG+9ZIO/JrEsHbliRDZXe5sTAo=;
 b=jQU9TIdf5zerKy2hx/J1K9FmFAI8aJhuo8FdsyCQfHtXikCRgA1oIq3+3OqXM1Uxxu9eMMyFHnG7SQ+aed0pmUtu42SLIST7i7H3jYETMzxGBdSrVks6+qS4xOc7KYMX1mdjsg0J4P3YfQfvWHwv0qSNBW+KtBIWT35L9j1hfISV9ySy2ipzGSEkjwEMgvgDLZ9N8SvcAPMaZjIYddpT14yjakjkEJj4YNzfGhkD6EoTjhNeluGAWRfuaRKDD7SIHGKC+NBmSg2YjQxgdRfAAKGWbLrBFU5P3UQ+gS5lNslE9uu53pZpDuPYaQL+BKzv6r1vfw9NJnXyBg/VtareFA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: Ping: [PATCH] x86emul: pad blob-execution "okay" messages
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <3250a871-e49d-d3c4-333a-eff435e092c2@suse.com>
 <e53a10ad-3489-eccb-2707-8445746d84b5@suse.com>
Message-ID: <6746cd07-c6d0-30df-dec3-f15c27d260d4@suse.com>
Date: Tue, 6 Jul 2021 09:14:58 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <e53a10ad-3489-eccb-2707-8445746d84b5@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: FR3P281CA0029.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1c::22) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d769379c-bcde-4832-8775-08d9404dc378
X-MS-TrafficTypeDiagnostic: VI1PR04MB5471:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54719D664E6010AB3AD7BC90B31B9@VI1PR04MB5471.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	c3S2LGIPcwm5Hz53dUQwc4qXudHLwpcjvmj3ZL+TO1iscMndNtNXGhk1JHsfNBosTWN0zXNIKJKi2U+Wi9kzHlc94KJSTknml/gclR9oW6aHrURWlmg7Y2pBy7DX9WYaaVO6AnyUXt38zH0qYNpTdC0/rKJAd/G7sNu0JsJwYwHaCiN58xajeo0lC30qTR9EXxNrOIhPi8NfhTIA7ueJNWX3dql+KrnzO0eLR8Y0D+Nm6O87cnDQ7dGKdWcVgNwicBnycUS+IOykRCn+t82OfaTGHdoJEJCPB3epNqoAk36WnGgRr+Hd0oBinKvOygFM57hbBEu6HzVpkBm8pQOMVkVYzQ6QIVxCokITCHRmSIyJbTzmSKcSnL0V/8DfM7fTg9er/UXvpwChjn+SJ61WQV2BKSIRSfP21IhppvJ+J/BHRb66HfQrEusnkFSEvMaZKk64Nb3SVbrL7U5KQFFNaLH+PldefdbASchPP/FzYMQ4PbDTH1IM5T5i9rAw2ql61v+NVNARUO1pQkUJsoZnjEgabTybjpzyZY3aGq4Iyxi11EVgs9PSJrwRzpIRFq6xcgihzPmkKYWnF93AHVtqqbvW3NBQPL6Q56CaOQx6iHYLFLAdbopTPvaUlisyHWAC+EIT+F37eTsUa+8XTN9CpCAQQblBJiVLWUbokZZmRKmzwTBOCACDm+1GE26Tpf3olzv3VEbWqlg82Hfni+HpKbI5O0Q2mrj69sOffuoPXdk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(396003)(136003)(346002)(366004)(39850400004)(110136005)(5660300002)(83380400001)(8676002)(66946007)(38100700002)(31696002)(66476007)(186003)(15650500001)(956004)(2616005)(316002)(478600001)(66556008)(86362001)(16526019)(26005)(16576012)(8936002)(31686004)(2906002)(4744005)(36756003)(53546011)(4326008)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d769379c-bcde-4832-8775-08d9404dc378
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:14:58.7500
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: JhxaeMkzjBfLY5j4hdeR4BHrvPxi/VRdNZwJ84eOuQCf2Xqn+eyBIqFiIxoyl6NpjhhVqbJcEA7E65eVEDEL5g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5471

On 28.06.2021 14:15, Jan Beulich wrote:
> On 02.06.2021 16:38, Jan Beulich wrote:
>> We already do so in the native execution case, and a few descriptions (I
>> did notice this with SHA ones) are short enough for the output to look
>> slightly odd.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 
> Again - anyone?

Okay, this is trivial enough to fall under "lazy consensus" if I don't hear
back by Thursday (i.e. including the Community Call as an option to voice
objections).

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:15:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:15:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150809.278802 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fIu-00038h-Fq; Tue, 06 Jul 2021 07:15:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150809.278802; Tue, 06 Jul 2021 07:15:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fIu-00038Z-CO; Tue, 06 Jul 2021 07:15:36 +0000
Received: by outflank-mailman (input) for mailman id 150809;
 Tue, 06 Jul 2021 07:15:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0fIs-00038E-Kr
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:15:34 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.82])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e2714ff4-01b9-4722-8511-852f932590e5;
 Tue, 06 Jul 2021 07:15:33 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx667FQP00
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 09:15:26 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e2714ff4-01b9-4722-8511-852f932590e5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625555726;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=K6W5nMyFaq0SpWx0zPJZO6/GCcQWlH3ZKLCmhHf35Dk=;
    b=h4f7qRH9dSomWPNdwH16mnZkru6fia3hjj+wgRJT4AyN1HVcRBmyLSI9GMyTrHKYsb
    2Dz0TBf3DKhBvs3D5D+s+4UZyylbHuO5/LTKC3/m703cdkPfhI/1WFnCBiUPAp5IjmHI
    U+3C/W+yL0nYZcckUtSVY0TcsOU4I/SSYBRca8QWWsxJqj/FIrdvJldgY5Ioqmtf6nVN
    xl9g4p0PjKuScvt6IueYIosCNXvJM/ZmdLcf/FmaN1vIWeJ2TMVhHYjKTYaXJMrytbiy
    Ucl/qjXeRAmENIMl2fCYExSgWtItGSecaRZdm0DnbuksqLdyqVDztFRa4EjDrkJsjymY
    cIMQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 09:15:24 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, Roger Pau
 =?UTF-8?B?TW9ubsOp?= <roger.pau@citrix.com>, Juergen Gross
 <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>, Ian Jackson
 <iwj@xenproject.org>
Subject: Re: [PATCH v2 03/13] libxenguest: deal with log-dirty op stats
 overflow
Message-ID: <20210706091524.7e4af39e.olaf@aepfle.de>
In-Reply-To: <c4463e5c-48f8-8d46-e959-22c9e3710637@suse.com>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
	<668ef720-389f-4cf1-608e-64aca4f7c73d@suse.com>
	<20210705192612.5cf50887.olaf@aepfle.de>
	<f70be58d-99f0-0631-2b01-436e3e94e5ee@suse.com>
	<20210706084628.360a7f2a.olaf@aepfle.de>
	<c4463e5c-48f8-8d46-e959-22c9e3710637@suse.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Am Tue, 6 Jul 2021 08:58:59 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> Well, that's part of the current limitation. The size would need re-querying
> before every iteration (or at the very least before the last one, after the
> domain has been paused).

Ah, you even wrote that.

In addition each iteration should also query the state of the domU.
Right now a shutdown is not handled and the dead domU is detected only at the very end.


Olaf


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:18:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:18:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150817.278813 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fLP-0003x1-Tz; Tue, 06 Jul 2021 07:18:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150817.278813; Tue, 06 Jul 2021 07:18:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fLP-0003wu-Qk; Tue, 06 Jul 2021 07:18:11 +0000
Received: by outflank-mailman (input) for mailman id 150817;
 Tue, 06 Jul 2021 07:18:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0fLO-0003wm-QL
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:18:10 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0ce75320-7f9a-4b13-96db-7644f02a49a0;
 Tue, 06 Jul 2021 07:18:10 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2169.outbound.protection.outlook.com [104.47.17.169])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-1-b6qUq6NKM2KdC3Raa5kuAg-1; Tue, 06 Jul 2021 09:18:08 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 07:18:06 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:18:06 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0029.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101:1::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 07:18:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0ce75320-7f9a-4b13-96db-7644f02a49a0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625555889;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=3OtvgRo9GydKR8aC1M9CFNYXVySbDYH/S5PszfkQZkw=;
	b=Cel+mMy0u+ETlUZAvuhjJNsIaiGseEFSKzCxdGrqlLfFRmX2DDdV7dHaDGl+e2Jb4AkOIc
	1iD8anxF8IZFkmrODgYDyP+zLxqadcGzLS5qZoL0yCkoMFlve1YS+e5W+Ae4aoUWcTZlXl
	VQJfENhszjVRjVKlB57inxMByOTy7CY=
X-MC-Unique: b6qUq6NKM2KdC3Raa5kuAg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=USMEsrWOR4b4uZSyx8diCbetySchuBop0ikL4rRKjZdJgMI/Fkp1NvDaFnF3m9bq7LMVgncxwTdaXnMFThy8ptILzdiwzJGcy3DE9LWTxobRgsBIDR86wlhRL5BohzxLhr6X/zTrMvmUaGQrJqMDU7AsmuXzj0g1wfQeIfaIAsdZia0ElGHvepzjGET7ihcywoDySIFMjwVE/1Gv333XXinY+OHGwyERo75P1Y3/MpS3iUgzbtg755aOWX5Y9U1OviDrIkY3wgC3e5wkODi9F5W5oAorKxefYNjAhB50OJY+9pse8uesFd4ETkqRJDqp6JLfx4m9rfyJZ/1ytwvpKQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=3OtvgRo9GydKR8aC1M9CFNYXVySbDYH/S5PszfkQZkw=;
 b=FIKYaptsARzBD7Gs0RvalN+/bOeSZ+TtxbWfgz+ezH8GSoy7NmgOrthvF86TDqp0xrMrvXFVSwoVwfINDzZCw0PeczL8Dw99r6OwIOnf+AGRcEAbzUjnIwJj5hz0YbmbvM5OSCwuob6ZtH0i+cetRHz/g80VoItEJe2dDK7CqevvikrIn2n71MASaBss1tAq0CBoqHVoYFBYsmIpZs3VHqH76pimNekrWH3oOSWnp+Q0WwMYZFp4qOqBLfSkMZoc++vzxfuXmy8I7uwx8UmKw09mteO/pbGzEPvrjNbbjwXTkl9vsNyiHffpHgDpaH2ldDFQnm0BHmaQ0diM6NXqpg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: Ping: [PATCH v2 0/2] x86/AMD: MSR handling adjustments
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wl@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
References: <ebc58213-f68a-e060-83f5-c9c89a87f074@suse.com>
 <cf132aaf-96cb-b79e-f5a2-7e0f0f2d28f1@suse.com>
Message-ID: <eb53dbc5-1d3d-661a-18fd-a92059e52df2@suse.com>
Date: Tue, 6 Jul 2021 09:18:05 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <cf132aaf-96cb-b79e-f5a2-7e0f0f2d28f1@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR2P264CA0029.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:101:1::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b1064971-492d-43b4-d895-08d9404e3352
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB260835FAA85735C66F053B55B31B9@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	+RJu7yRL3ADIOFSsTvsGJ0uICmaC+30HN3AUqALiFkn5/z2C4rZ1vmLJIswG0q1Aih2jRZkZilwU/6ULpobQEaF4eXIXJX09OrbBs9dnzMv0BCtrxB0AW01zhxshIoGcMkHjwhFPeeIDEt+RteUENoXUn7l6oF75MaaqkfQHDncHcxLsJ3LDjIppQFNHa0p5BShGHKtOIm7CgQ+n/34sbYAWOTZiiLCSclTgzMbtBLOBj0/RqPj0q9lnMDH78WYqugdFuPE7r2r/ALi/L/mKKAtUdr21coUqPM2JTvp71dFKMcdLPYfgbpsVIdcntFQK/T8S9SZBC8TDykfs93ct9CyE5c9eD0YKE397scwA6mQFb5p0HIXOOjy/YLPD4i+HAFKKvQf9OD6awbQZoDFPS7SFbNLQhaGa7EHA2q9UMd+d+51AAvroMjuWwwd8UKbUL0bJJFpHRiPqJ9qYrz92iz501UwZ3Rx2QK5icFLIl9+b/nhaaIS0Yuu0gb8Aq/gNwKReeEvLGN19tIFxj4ppiYswegGoaRdlh6Q0t7jJz549WH0J9ZgRQUDzXCtpk+hbFSSuChD9fTHTY1xZzBTwAmoR7AEkkeC86kDoMUsUVMwmgrdhORZ+26Rw0rkFWIigN8qKUGbH4+gfyuJhWoe/cCb7xAI3tcVcT3FxxNvwbG5+h7wTHRTfFz2PCkyLh8jRcro5li1PGxQ9lVRWXNAEaKDXwyPy3tT9bdZSU01cSHk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(39850400004)(376002)(366004)(136003)(4326008)(54906003)(36756003)(66556008)(53546011)(8676002)(8936002)(186003)(16576012)(6486002)(2906002)(5660300002)(6916009)(38100700002)(26005)(16526019)(4744005)(316002)(66476007)(66946007)(31686004)(31696002)(956004)(2616005)(478600001)(86362001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?PunsDFC/2zyNXF4R+kkLm8EeTgsI6WLClogIVAF?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b1064971-492d-43b4-d895-08d9404e3352
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:18:06.3669
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: U1NwgWpirPzHKwIcQ5ynfqqs62eTOiNN9vQh/oxiq4tsAZYlXhMomubCFTFwICe1VThPXgj/xH/oJjEKn/kC9w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

On 24.06.2021 17:29, Jan Beulich wrote:
> On 28.05.2021 08:56, Jan Beulich wrote:
>> 1: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
>> 2: drop MSR_K7_HWCR
> 
> Any thoughts here?

Okay, this v2 was put together on the basis of a discussion with Roger, so
I'll have it also fall under "lazy consensus" if I don't hear back by
Thursday.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:30:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:30:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150823.278824 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fXb-0006ej-2B; Tue, 06 Jul 2021 07:30:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150823.278824; Tue, 06 Jul 2021 07:30:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fXa-0006ec-V6; Tue, 06 Jul 2021 07:30:46 +0000
Received: by outflank-mailman (input) for mailman id 150823;
 Tue, 06 Jul 2021 07:30:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Dpqu=L6=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0fXZ-0006eS-9T
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:30:45 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.89]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 11f06cb2-de2c-11eb-8476-12813bfff9fa;
 Tue, 06 Jul 2021 07:30:43 +0000 (UTC)
Received: from AM6P194CA0105.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:8f::46)
 by AM9PR08MB7086.eurprd08.prod.outlook.com (2603:10a6:20b:418::10) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 07:30:40 +0000
Received: from VE1EUR03FT034.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:8f:cafe::5b) by AM6P194CA0105.outlook.office365.com
 (2603:10a6:209:8f::46) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Tue, 6 Jul 2021 07:30:40 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT034.mail.protection.outlook.com (10.152.18.85) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 07:30:40 +0000
Received: ("Tessian outbound 71a9bd19c2b9:v97");
 Tue, 06 Jul 2021 07:30:40 +0000
Received: from 240036c69dda.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A6995F1E-B5B6-43DB-8ACB-D66D5FDA3465.1; 
 Tue, 06 Jul 2021 07:30:34 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 240036c69dda.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 07:30:34 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR0801MB1757.eurprd08.prod.outlook.com (2603:10a6:800:5a::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 07:30:31 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:30:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 11f06cb2-de2c-11eb-8476-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hnuHccKIn4kMn3hJF8tD5ZSt2rgL+4SGmYvLCUxEtKA=;
 b=Gm0lygsYy+jVMV8g3s77f6Q+CKjTMMQrxX0aN+ZMcn0wzZO++G4lzHyfnPy+vKYRzfJHiAKwXeOFlJo/jW2IWFsylGbibkWGyttwlNPhBib0fPaOzJOVjBLm/ts+DcU/v23LGFX2ZVNbQwoqZmh8fkIB6BH/zNaQsDH1NXp2Erk=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gROqFzHUBOpL5ZDNei4XpBNybn5o3phOhZ2lAs0opehvRrl9QPfvLNy+RUgzs0LnWOGdNf5IgpYCIWPIvNqpWeSNwOuU5NBcC2Ze5uLc/vtB3RucNH3Tv6p7gcxVYNNyXVnRF+l+rp4npFUkhMA/oy3mlQS3DN3GIJxbxsUmr+A2iN/Ko2FyOuduR8tLmBNqsjXoydONVFMJPyWswonYkbq5T7+HQBOkwgQTV2gXHFXZPs+cj0ZlDhSWw6rrVY546SNRrb4GFwxRk4iHAQdde1ZPwPbDdAkWyYcXoTo7GEYB7bibOx069dfxrWh19uz6s59O4q59cG0IfVL/aSJAaw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hnuHccKIn4kMn3hJF8tD5ZSt2rgL+4SGmYvLCUxEtKA=;
 b=TzrHFoVZjqjYYDX7dXRw3EkCAKiw17HVjUrQjvg8S+oVnYz4O8UchwoUrS2jexwg+eA57akX0TiFiSiA40k3c7jiwvXWJKdIMYTCIlKzU7IC3MYKyHfuv6c6nj3BMuNpPrSPQuoR61ZPNWdaIJd0iMWOt4vkimjYIUU6BgxKU0yE96q3KHKqJRBlAlQqIAGcx29/yRFLQqXjbFR7apNToUhUcy49K3nFutToiHHELphZhg6BSW7ljN3VizIhDIu3rVW0zRDh2IPopoYB3DpWZAr4ZWFytbRW5G/KoOpXDcPz5zuWdj3ACUsh/09IXbmRgGECwO2heI1DB8KlmzQIPg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hnuHccKIn4kMn3hJF8tD5ZSt2rgL+4SGmYvLCUxEtKA=;
 b=Gm0lygsYy+jVMV8g3s77f6Q+CKjTMMQrxX0aN+ZMcn0wzZO++G4lzHyfnPy+vKYRzfJHiAKwXeOFlJo/jW2IWFsylGbibkWGyttwlNPhBib0fPaOzJOVjBLm/ts+DcU/v23LGFX2ZVNbQwoqZmh8fkIB6BH/zNaQsDH1NXp2Erk=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "jbeulich@suse.com" <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 9/9] xen/arm: introduce allocate_static_memory
Thread-Topic: [PATCH 9/9] xen/arm: introduce allocate_static_memory
Thread-Index: AQHXW0cDaj6NQBQ0OEOzzsMAR54ufKsxdgMAgAQ1xAA=
Date: Tue, 6 Jul 2021 07:30:31 +0000
Message-ID:
 <VE1PR08MB521539446863D93467AAA8BBF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-10-penny.zheng@arm.com>
 <2dc9387c-1c6c-70af-5bf5-8b606b62cc79@xen.org>
In-Reply-To: <2dc9387c-1c6c-70af-5bf5-8b606b62cc79@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: CF58448A73673644B44D0C13CD09D769.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.111]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 3410fea5-59ca-4359-dd69-08d9404ff4f0
x-ms-traffictypediagnostic: VI1PR0801MB1757:|AM9PR08MB7086:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM9PR08MB708664915C73A825975BFCE4F71B9@AM9PR08MB7086.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 C0xY5x0Ex7uMQAE1aJQ2l2m62Ae0QFx3MpEQP7xvqe/sZ0jF56xYfbAHqbTNYe52ubNY9ysqR7O/+fXNFHk+U8HLyZibaciDiUB7VRj0YB6UaxQgag6tgYYgJmDv6xKJbfjSnoQtdTunYOx0biDjPkPPVYCasEJw7JzX5vxEmWhTRoZsMF+JmOQANjcjhLRoo4khrhytnbEbEJgvG/3wOwcpNHClCQk1iiryQjMDpJUcSemu2/vLECHolmpvEVjgNKROv1eEH8lSKkh2cTfw9bZeZGn3VTs9huTrAv9yeuVnQOi3R8t33rREyk3L0cmVirZr1aYkGIttAbAJS88HYh4YMqpROdwHWepO2lUJ8bbhDlxoyjZmbMHFxkjGhU8iepZcNVvlYWWbT1csDP3BZX5HBask7v2KDIfoCtIfUduoByvW6/gmvdOOy0DgYTy48we4UmrM8i40y86Blnlvc64R/QXJJ1uKbNxtJk4IpWyezv2uFgraO3wTvNOCx+8/d7wk3tLhV9041yJEIat16jjHFX/nwkin8JakWvb91AYMejB5xPLK2/wmd8k8+DlPlGxPmTyy9s43oCDLFiu2RfX2IoXOo20rTBr/ed2BKLxo7RZY/kcehTxcZ40QMIuTC4APuVEp8ldQT4r/P2007w==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(396003)(39860400002)(136003)(366004)(7696005)(8936002)(26005)(8676002)(9686003)(38100700002)(66476007)(122000001)(55016002)(6506007)(66446008)(186003)(53546011)(5660300002)(478600001)(52536014)(110136005)(76116006)(2906002)(83380400001)(86362001)(4326008)(71200400001)(54906003)(66556008)(316002)(64756008)(33656002)(66946007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?utf-8?B?V25rSlZiWDFVZEI1cThXYUpFZXFDeEdJL3cva2NPMG9ZWVpXYTltQnhlWXR1?=
 =?utf-8?B?WWx2R1hjZUhZWWorcXlCTnc3c09uMXZySWQ5QnRjbmgxWkpESTc1Ry9VQjJF?=
 =?utf-8?B?MlJFUUh0OVhqdTl4NlMxak94VWVuQXQ4R2gvbkJnRGVqV3ZsREV4QURUUUpp?=
 =?utf-8?B?SjZPYyt6RHZBV1FYN0ZGVEdGMHNhemI4TkVNM0NPbVIySUI1UTRSRnpaRHg3?=
 =?utf-8?B?aDVqai93SE1RZ1ZLMHlvMmFsbnlpVmFSdzJFVFJaU1NvNHB1RkhxK1BmS1cx?=
 =?utf-8?B?S09jMXlGVmd0NDlxRUpYYVNRb25TdnM1V0l3dVBjSG45Q2VVR2JSaGlDMUU0?=
 =?utf-8?B?SVNZdXo2Sy9SRUJpSXp5dXF1b3ZhNW1wUWdLZHFBdXZYUUFCZGpwQ3Z2SFNS?=
 =?utf-8?B?VVhkeEpDcEpDMGdUelNNRTBtU3FzcndvcHpnY2dlRFEyRjJ6SnVyVnB5YmFj?=
 =?utf-8?B?TU9MbWd3LzRwNXNQN1psY2NHMGJwVHJiK3R2VnNTZ21nd1hKSWRGak9CaGVK?=
 =?utf-8?B?aUhCdnpKVmJnTXc3NGcwNEtrd3ArY0RtalRWVWIvenVYSjh5Z2g0dEdaRVRi?=
 =?utf-8?B?b3QwYm5wNW1XK2VoMktROGdmMXZpMURQRnA1Y0RSRnRycUx0MUNIdHQ5dUlQ?=
 =?utf-8?B?ODM3ck1sMjVjQXE2eUJtUE9JYWVZcVE3bmdJMVV3YW9VUjA0dGJEc1UxY0VR?=
 =?utf-8?B?TkdHTnNDTFl2ZzR5RjVIUUM1SXpJNzdSZml6NUxLaW43VXR6N1JxV1VKWWkr?=
 =?utf-8?B?eUFvNm82UHpVOXBtMDV4bTVkR2I1U2U4Q1o1SmRhaXh6TjNuRC9GTmJDdFhw?=
 =?utf-8?B?OUQweEF5MVdnaGRic1poNmplSTJmeGEvOThleEcxZUl1TTFXMGtqTXJ1ZVo4?=
 =?utf-8?B?YXUzVzhVTUR2SGxRQ0I2blI4WW96Q0lsa25SRlhGcDIyY2Y2S05TbXBrbzVT?=
 =?utf-8?B?ejJyRW4zQXBxWVBkcVkvSTV6OThTMUI3TExRUmM1YkxxdFAvL3lwdUcyUHRX?=
 =?utf-8?B?aG91TzlHcTRlWTVUUkRoVTVnRGpoNmJZQmdvMURsbXJWWXh4WmorV2o0bkww?=
 =?utf-8?B?UUJxT3FncDhKUTZkeThXOGJqdWNLNHNVZldzMUFCZVNuOWZ0d3pVSFVyb3VC?=
 =?utf-8?B?d09qSUs4Ymt6Yy93TGFlL1huaHRWZGdYemxRbDFWb2lCRWZUdWFMdG9odmds?=
 =?utf-8?B?enM2a21lVjVoMzRlWDVMbXE2NEFQc3JnS0labkxWSWFVaVpkdnBxd0ZaWTBU?=
 =?utf-8?B?OGZ3K0s1T09FZDd5NUpBWFM5OTMzWXRacTlLRW5TOWpEZi81Skp5aVJPMy9J?=
 =?utf-8?B?SW5sWTk1Qk9mcW9CVmhpRCtIdS8zeHF5QndJVmg0TlJCQ3A3dUEzS212eUU3?=
 =?utf-8?B?ODFkbzR2RWtQMG9tSVpqdFJEMEtRZGNoTkNvbUVvUTQ4Z2VWUTFhNkIrdGww?=
 =?utf-8?B?MTRwdk13TWE2NTdicENzM2c1eUlaWlZxYTkzTGJtYVI2bmJ6bG1uWmxMdmVr?=
 =?utf-8?B?NGZVRE4xclFMaEFJaUxIUXVleDJvMXpKR25sNnpJcm51SHpKVXBmazloM2JT?=
 =?utf-8?B?OFFUejJ1YnlVY0RYZEpWZkdzc1IvT01FQW96NU9JNzZvckNPVFl4WjJwNVdS?=
 =?utf-8?B?VWlKRGRPQ29RZUJONzBMTDl4Q212L1AxZFJvVE1nYnZGeWtpZkZNQkNiV21k?=
 =?utf-8?B?REl4SnB5aDYyajVXWGEvelk0S3I4K3hKTUljb2pYUVoxekFTazhKR0F0U3ht?=
 =?utf-8?Q?u39AnY82JeB4mNCo8VOgpc7uQZqdAo1tQCYmgyd?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1757
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT034.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	ff2654cf-479a-4b30-edcd-08d9404fef9e
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	aa6q6rjj+ALfKCCbf3mq9+UKCccQ1gFKuyCsvSgmVf7G8yueweUu1gHytibrxcJZBDyNzClO743xQxlF2w4NAXUVj39abDDXGciBhj2evnPQ3OgXrwgA1yROjV2IAHFhmIF4+c/Oi+UWZNtes5WtyAJdNAlb2qbftuGmjYimY+JJQzJiMkkpWb6r+NtK/OeN5V2lm5NNB6K5v5KMtWybDOaBpyMEwvGtUZ2Ge607rDYw2+fJBeU6HcBx7OYKyublNUpfj+OxDoQYSLbrJOCGScwPVq8wDUhhRHihbv0sd7zOXwD4WUl8FDTVyiXBQNuEJDYMJXrP+9pDd8JfWhji4oxGo5ZVGjHkIW7ZDTwcHeilCHZpWcBwd0jdV0vBIJUK0/hRlosQ27uxjEkNWr9D4BurPgYSUS58Tklmejm2qz12KcXJnwifXnDcFQkCMtPdh3OD9wdhLBSXo/J4p/UqCNZdDPSIjFzGVw9v3Rn7FWsgRYCI0DQelp4MWv6/0oMqkehjm4QKPNZUwUmIx2SH4GcwVCjPmOkcUKa3XKExa3SeIWYG9SioYrJ/TEaBR0PsfRXCRpfkgxvzqVkP8QrY1Q6+VmTCa1t2dFE/rbAz0wHOc8csQV9t2gSWvERWeyOitAtA8rW7piDBNIbu6rEW851LTg4nbDj3WLJuY7VQcCvhnqUNjI/I5Un83kV6qY3eJGzu9i+OL2vpFuzp5aie/Q==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(396003)(376002)(346002)(39860400002)(46966006)(36840700001)(52536014)(82740400003)(47076005)(70206006)(186003)(36860700001)(70586007)(82310400003)(2906002)(110136005)(8936002)(33656002)(478600001)(55016002)(6506007)(54906003)(53546011)(5660300002)(7696005)(316002)(4326008)(9686003)(81166007)(26005)(336012)(83380400001)(8676002)(356005)(86362001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:30:40.4466
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 3410fea5-59ca-4359-dd69-08d9404ff4f0
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT034.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB7086

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4NCj4gU2VudDogU2F0dXJkYXksIEp1bHkgMywgMjAyMSAx
MDoxOCBQTQ0KPiBUbzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+OyB4ZW4tZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7DQo+IHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc7IGpiZXVs
aWNoQHN1c2UuY29tDQo+IENjOiBCZXJ0cmFuZCBNYXJxdWlzIDxCZXJ0cmFuZC5NYXJxdWlzQGFy
bS5jb20+OyBXZWkgQ2hlbg0KPiA8V2VpLkNoZW5AYXJtLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQ
QVRDSCA5LzldIHhlbi9hcm06IGludHJvZHVjZSBhbGxvY2F0ZV9zdGF0aWNfbWVtb3J5DQo+IA0K
PiBIaSBQZW5ueSwNCj4gDQo+IE9uIDA3LzA2LzIwMjEgMDM6NDMsIFBlbm55IFpoZW5nIHdyb3Rl
Og0KPiA+IFRoaXMgY29tbWl0IGludHJvZHVjZXMgYWxsb2NhdGVfc3RhdGljX21lbW9yeSB0byBh
bGxvY2F0ZSBzdGF0aWMNCj4gPiBtZW1vcnkgYXMgZ3Vlc3QgUkFNIGZvciBEb21haW4gb24gU3Rh
dGljIEFsbG9jYXRpb24uDQo+ID4NCj4gPiBJdCB1c2VzIGFsbG9jX2RvbXN0YXRpY19wYWdlcyB0
byBhbGxvY2F0ZSBwcmUtY29uZmlndXJlZCBzdGF0aWMgbWVtb3J5DQo+ID4gYmFua3MgZm9yIHRo
aXMgZG9tYWluLCBhbmQgdXNlcyBndWVzdF9waHlzbWFwX2FkZF9wYWdlIHRvIHNldCB1cCBQMk0N
Cj4gdGFibGUuDQo+ID4gVGhlc2UgcHJlLWRlZmllbmQgc3RhdGljIG1lbW9yeSByYW5nZXMgc2hh
bGwgYmUgZmlyc3RseSBtYXBwZWQgdG8gdGhlDQo+ID4gZml4ZWQgZ3Vlc3QgUkFNIGFkZHJlc3Mg
YEdVRVNUX1JBTTBfQkFTRWAuIEFuZCB1bnRpbCBpdCBleGhhdXN0cyB0aGUNCj4gPiBgR1VFU1Rf
UkFNMF9TSVpFYCwgaXQgd2lsbCBzZWVrIHRvIGBHVUVTVF9SQU0xX0JBU0VgLg0KPiA+IGBHVUVT
VF9SQU0wYCBtYXkgdGFrZSB1cCBzZXZlcmFsIHByZS1kZWZpbmVkIHBoeXNpY2FsIFJBTSByZWdp
b25zLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogUGVubnkgWmhlbmcgPHBlbm55LnpoZW5nQGFy
bS5jb20+DQo+ID4gLS0tDQo+ID4gY2hhbmdlcyB2MjoNCj4gPiAtIHJlbmFtZSB0aGUgdmFsdWVz
LCBsaWtlIHByZWZpeCBpdCBnL3ANCj4gPiAtIGZpeCB0aGUgc2NhbGFiaWxpdHkgaXNzdWUNCj4g
PiAtIGFsbG9jYXRlIHdoZW4gcGFyc2UNCj4gPiAtLS0NCj4gPiAgIHhlbi9hcmNoL2FybS9kb21h
aW5fYnVpbGQuYyB8IDE1NQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0N
Cj4gPiAgIDEgZmlsZSBjaGFuZ2VkLCAxNTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkN
Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMgYi94ZW4v
YXJjaC9hcm0vZG9tYWluX2J1aWxkLmMNCj4gPiBpbmRleCA0MTY2ZDc5OTNjLi42M2I2YTk3YjJj
IDEwMDY0NA0KPiA+IC0tLSBhL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYw0KPiA+ICsrKyBi
L3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYw0KPiA+IEBAIC00MzcsNiArNDM3LDQ4IEBAIHN0
YXRpYyBib29sIF9faW5pdCBhbGxvY2F0ZV9iYW5rX21lbW9yeShzdHJ1Y3QNCj4gZG9tYWluICpk
LA0KPiA+ICAgICAgIHJldHVybiB0cnVlOw0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qDQo+ID4gKyAq
IFN0YXRpYyBtZW1vcnkgYmFuayBhdCAjc21mbiBvZiAjZ3NpemUgc2hhbGwgYmUgbWFwcGVkIHRv
ICNzZ2ZuIG9mDQo+ID4gKyNnc2l6ZSwNCj4gPiArICogYW5kICNzZ2ZuIHdpbGwgYmUgbmV4dCBn
dWVzdCBhZGRyZXNzIHRvIG1hcCB3aGVuIHJldHVybmluZy4NCj4gPiArICovDQo+ID4gK3N0YXRp
YyBib29sIF9faW5pdCBhbGxvY2F0ZV9zdGF0aWNfYmFua19tZW1vcnkoc3RydWN0IGRvbWFpbiAq
ZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBnYmFuaywNCj4gDQo+IFBsZWFzZSB1c2UgdW5zaWdu
ZWQgaW50IGZvciBpbmRleC4NCj4gDQoNClN1cmUuDQoNCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZm5fdCogc2dmbiwNCj4gPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm5fdCBzbWZuLA0KPiA+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3QgZ3Np
emUpDQo+IA0KPiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYWxsb2NhdGUgbWVtb3J5IGFuZCBuZWl0
aGVyIGEgImJhbmsiIHBlci1zZS4gU28gd291bGQNCj4gc3VnZ2VzdCB0byByZW5hbWUgdG8gKG9y
IHNvbWV0aGluZyBzaW1pbGFyKToNCj4gDQo+IGFwcGVuZF9zdGF0aWNfbWVtb3J5X3RvX2Jhbmso
KQ0KPiANCg0KT2t+fn4NCg0KPiBBbHNvLCBJIGRvbid0IHRoaW5rIHlvdSBuZWVkIGFsbCB0aG9z
ZSBwYXJhbWV0ZXJzLiBZb3UgY2FuIGluZmVyIHRoZSBuZXh0IEdGTg0KPiB0byB1c2UgZnJvbSB0
aGUgYmFuayBpbmZvcm1hdGlvbi4gU28gaG93IGFib3V0IHNvbWV0aGluZyBsaWtlOg0KPiANCj4g
c3RhdGljIGJvb2wgX19pbml0IGFwcGVuZF9zdGF0aWNfbWVtb3J5X3RvX2Jhbmsoc3RydWN0IGRv
bWFpbiAqZCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBtZW1iYW5rICpiYW5rLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWZuX3Qgc21mbiwNCj4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3Qgc2l6ZSkgew0KPiAgICAgZ2ZuX3Qg
c2dmbiA9IGdhZGRyX3RvX2dmbihiYW5rLT5zdGFydCArIGJhbmstPnNpemUpOw0KPiANCj4gICAg
IFsuLi4uXQ0KPiB9DQo+IA0KDQpPaC4gUmlnaHQsIHNpbmNlIHdlIGFyZSBzZXR0aW5nIGluZm8g
aW4ga2luZm8ubWVtLmJhbmtbaV0sIHdlIGNvdWxkIGluZmVyIGl0c2VsZiB0byBnZXQgdGhlDQpO
ZXh0IEdGTiwgY2xldmVyISBUaGtzIGEgbG90IQ0KDQo+ID4gK3sNCj4gPiArICAgIGludCByZXM7
DQo+ID4gKyAgICBwYWRkcl90IHRvdF9zaXplID0gZ3NpemU7DQo+ID4gKyAgICBjb25zdCB1aW50
NjRfdCByYW1iYXNlW10gPSBHVUVTVF9SQU1fQkFOS19CQVNFUzsNCj4gDQo+IEkgZG9uJ3QgbGlr
ZSB0aGUgaWRlYSBvZiBpbnRyb2R1Y2luZyByYW1iYXNlIGhlcmUuIENhbid0IHRoZSBiYW5rIGJl
IGluaXRpYWxpemVkDQo+IGluIHRoZSBjYWxsZXI/DQo+IA0KDQpIbW0sIEknbSBraW5kcyBvZiBj
b25mdXNlZCB0aGUgc3VnZ2VzdGlvbiBoZXJlLiBJZiB3ZSB1c2luZyByYW1iYXNlW10gaGVyZSwN
CnRoZW4gaW4gbGF0ZXIgZG91YmxlIGxvb3AsIHdoZW4gdXBkYXRpbmcgdG8gdGhlIG5leHQgZ3Vl
c3QgYmFuaywgIHdlIGNvdWxkDQp1c2UgcmFtYmFzZVtnYmFua10gdG8gcmVmZXIuDQoNCj4gPiAr
DQo+ID4gKyAgICB3aGlsZSAoIHRvdF9zaXplID4gMCApDQo+ID4gKyAgICB7DQo+ID4gKyAgICAg
ICAgdW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X2FsbG9jYXRpb25fc2l6ZSh0b3Rfc2l6ZSk7DQo+
ID4gKw0KPiA+ICsgICAgICAgIHJlcyA9IGd1ZXN0X3BoeXNtYXBfYWRkX3BhZ2UoZCwgKnNnZm4s
IHNtZm4sIG9yZGVyKTsNCj4gPiArICAgICAgICBpZiAoIHJlcyApDQo+ID4gKyAgICAgICAgew0K
PiA+ICsgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsICJGYWlsZWQgbWFwIHBhZ2VzIHRv
IERPTVU6ICVkIiwgcmVzKTsNCj4gPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsg
ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgKnNnZm4gPSBnZm5fYWRkKCpzZ2ZuLCAxVUwg
PDwgb3JkZXIpOw0KPiA+ICsgICAgICAgIHNtZm4gPSBtZm5fYWRkKHNtZm4sIDFVTCA8PCBvcmRl
cik7DQo+ID4gKyAgICAgICAgdG90X3NpemUgLT0gKDFVTEwgPDwgKFBBR0VfU0hJRlQgKyBvcmRl
cikpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8qIEd1ZXN0IFJBTSBiYW5rIGluIGtp
bmZvIGhhc24ndCBiZWVuIGluaXRpYWxpemVkLiAqLw0KPiA+ICsgICAgaWYgKCBnYmFuayA9PSBr
aW5mby0+bWVtLm5yX2JhbmtzICkNCj4gPiArICAgIHsNCj4gPiArICAgICAgICBraW5mby0+bWVt
LmJhbmtbZ2JhbmtdLnN0YXJ0ID0gcmFtYmFzZVtnYmFua107DQo+ID4gKyAgICAgICAga2luZm8t
Pm1lbS5ucl9iYW5rcysrOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAga2luZm8tPm1lbS5iYW5rW2di
YW5rXS5zaXplICs9IGdzaXplOw0KPiA+ICsNCj4gPiArICAgIHJldHVybiB0cnVlOw0KPiA+ICt9
DQo+ID4gKw0KPiA+ICAgc3RhdGljIHZvaWQgX19pbml0IGFsbG9jYXRlX21lbW9yeShzdHJ1Y3Qg
ZG9tYWluICpkLCBzdHJ1Y3QNCj4gPiBrZXJuZWxfaW5mbyAqa2luZm8pDQo+IA0KPiBJdCBmZWVs
cyBhIGJpdCBvZGQgdGhhdCB0aGUgdHdvIGZ1bmN0aW9ucyB5b3UgaW50cm9kdWNlZCBhcmUgbm90
IHRvZ2V0aGVyLiBDYW4NCj4gdGhleSBiZSBtb3ZlZCB0b2dldGhlcj8NCj4gDQoNCk9rLiBXaWxs
IGRvLg0KDQo+ID4gICB7DQo+ID4gICAgICAgdW5zaWduZWQgaW50IGk7DQo+ID4gQEAgLTQ4MCw2
ICs1MjIsMTE2IEBAIGZhaWw6DQo+ID4gICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpa2luZm8t
PnVuYXNzaWduZWRfbWVtID4+IDEwKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICsvKiBBbGxvY2F0ZSBt
ZW1vcnkgZnJvbSBzdGF0aWMgbWVtb3J5IGFzIFJBTSBmb3Igb25lIHNwZWNpZmljIGRvbWFpbg0K
PiA+ICtkLiAqLyBzdGF0aWMgdTY0IF9faW5pdCBhbGxvY2F0ZV9zdGF0aWNfbWVtb3J5KHN0cnVj
dCBkb21haW4gKmQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkdF9kZXZpY2Vfbm9kZQ0KPiA+ICsq
bm9kZSkgew0KPiA+ICsgICAgaW50IG5yX2JhbmtzLCBiYW5rID0gMCwgZ2JhbmsgPSAwOw0KPiA+
ICsgICAgY29uc3QgdWludDY0X3QgcmFtYmFzZVtdID0gR1VFU1RfUkFNX0JBTktfQkFTRVM7DQo+
ID4gKyAgICBjb25zdCB1aW50NjRfdCByYW1zaXplW10gPSBHVUVTVF9SQU1fQkFOS19TSVpFUzsN
Cj4gPiArICAgIGNvbnN0IF9fYmUzMiAqY2VsbDsNCj4gPiArICAgIGNvbnN0IHN0cnVjdCBkdF9w
cm9wZXJ0eSAqcHJvcDsNCj4gPiArICAgIHN0cnVjdCBkdF9kZXZpY2Vfbm9kZSAqc3RhdGljX21l
bV9ub2RlOw0KPiA+ICsgICAgY29uc3Qgc3RydWN0IGR0X2RldmljZV9ub2RlICpwYXJlbnQgPQ0K
PiBkdF9maW5kX25vZGVfYnlfcGF0aCgiL3Jlc2VydmVkLW1lbW9yeSIpOw0KPiA+ICsgICAgdTMy
IGFkZHJfY2VsbHMgPSAyLCBzaXplX2NlbGxzID0gMiwgcmVnX2NlbGxzOw0KPiA+ICsgICAgdTY0
IHRvdF9zaXplOw0KPiA+ICsNCj4gPiArICAgIHBhZGRyX3QgcGJhc2UsIHBzaXplLCBnc2l6ZTsN
Cj4gPiArICAgIGdmbl90IHNnZm47DQo+ID4gKyAgICBtZm5fdCBzbWZuOw0KPiA+ICsNCj4gPiAr
ICAgIGtpbmZvLT5tZW0ubnJfYmFua3MgPSAwOw0KPiA+ICsgICAgLyogU3RhcnQgd2l0aCBHVUVT
VF9SQU0wLiAqLw0KPiA+ICsgICAgZ3NpemUgPSByYW1zaXplW2diYW5rXTsNCj4gPiArICAgIHNn
Zm4gPSBnYWRkcl90b19nZm4ocmFtYmFzZVtnYmFua10pOw0KPiA+ICsNCj4gPiArICAgIC8qIFBh
cnNlIHBoYW5kbGUgaW4gYHhlbixzdGF0aWMtbWVtYC4gKi8NCj4gPiArICAgIHN0YXRpY19tZW1f
bm9kZSA9IGR0X3BhcnNlX3BoYW5kbGUobm9kZSwgInhlbixzdGF0aWMtbWVtIiwgMCk7DQo+ID4g
KyAgICBpZiAoICFzdGF0aWNfbWVtX25vZGUgKQ0KPiA+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4g
PiArDQo+ID4gKyAgICAvKg0KPiA+ICsgICAgICogI2FkZHJlc3MtY2VsbHMgYW5kICNzaXplLWNl
bGxzIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBwYXJlbnQgbm9kZSwNCj4gPiArICAgICAq
ICJyZXNlcnZlZC1tZW1vcnkiLg0KPiA+ICsgICAgICovDQo+ID4gKyAgICBkdF9wcm9wZXJ0eV9y
ZWFkX3UzMihwYXJlbnQsICIjYWRkcmVzcy1jZWxscyIsICZhZGRyX2NlbGxzKTsNCj4gPiArICAg
IGR0X3Byb3BlcnR5X3JlYWRfdTMyKHBhcmVudCwgIiNzaXplLWNlbGxzIiwgJnNpemVfY2VsbHMp
Ow0KPiANCj4gVGhlIHJldHVybiBmb3IgZHRfcHJvcGVydHlfcmVhZF91MzIoKSBzaG91bGQgYmUg
Y2hlY2tlZC4NCg0KU3VyZS4NCg0KPiANCj4gPiArICAgIEJVR19PTihzaXplX2NlbGxzID4gMiB8
fCBhZGRyX2NlbGxzID4gMik7DQo+ID4gKyAgICByZWdfY2VsbHMgPSBhZGRyX2NlbGxzICsgc2l6
ZV9jZWxsczsNCj4gPiArDQo+ID4gKyAgICBwcm9wID0gZHRfZmluZF9wcm9wZXJ0eShzdGF0aWNf
bWVtX25vZGUsICJyZWciLCBOVUxMKTsNCj4gPiArICAgIGlmICggIXByb3AgKQ0KPiA+ICsgICAg
ICAgIGdvdG8gZmFpbDsNCj4gPiArICAgIGNlbGwgPSAoY29uc3QgX19iZTMyICopcHJvcC0+dmFs
dWU7DQo+ID4gKyAgICBucl9iYW5rcyA9IChwcm9wLT5sZW5ndGgpIC8gKHJlZ19jZWxscyAqIHNp
emVvZiAodTMyKSk7DQo+ID4gKyAgICBCVUdfT04obnJfYmFua3MgPiBOUl9NRU1fQkFOS1MpOw0K
PiA+ICsNCj4gPiArICAgIHdoaWxlICggYmFuayA8IG5yX2JhbmtzICkNCj4gPiArICAgIHsNCj4g
PiArICAgICAgICBkZXZpY2VfdHJlZV9nZXRfcmVnKCZjZWxsLCBhZGRyX2NlbGxzLCBzaXplX2Nl
bGxzLCAmcGJhc2UsDQo+ID4gKyAmcHNpemUpOw0KPiANCj4gV2Ugc2VlbSB0byBoYXZlIHF1aXRl
IGEgZmV3IGZ1bmN0aW9ucyBub3cgdGhhdCB3aWxsIGl0ZXJhdGUgb3ZlciAicmVncyIuDQo+IEl0
IHdvdWxkIGJlIHdvcnRoIGNvbnNpZGVyaW5nIHRvIGludHJvZHVjZSBhIGhlbHBlciB0byBpdGVy
YXRlIGl0Lg0KPg0KDQpEbyB5b3Ugd2FudCB0byBleHBhbmQgdGhlICJkZXZpY2VfdHJlZV9nZXRf
cmVnIiB0byBvbmx5IGNvcGUgd2l0aCAicmVncyIgcHJvcGVydHksIA0KcmlnaHQgbm93LCBpdCBw
YXNzZXMgaW50byBjZWxscywgInByb3AtPnZhbHVlIiwgdGhlIGNlbGxzIG9mIHRoZSByZWcgcHJv
cGVydHkuDQpDaGFuZ2luZyBpdCB0byB0aGF0IHRoZSBpbnB1dCBwYXJhbWV0ZXIgd2lsbCBiZSB0
aGUgZGV2aWNlIG5vZGUgaG9sZGluZyB0aGUgcmVnIHByb3BlcnR5LCBsaWtlDQoiZGV2aWNlX3Ry
ZWVfZ2V0X3JlZyhjb25zdCBzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBhZGRyX2Nl
bGxzLCB1MzIgc2l6ZV9jZWxscywgc3RydWN0IG1lbWluZm8gKmluZm8pIg0KT3Igd2Ugc3RpbGwg
cmV0YWluIHRoZSBvcmlnaW5hbCBkZXZpY2VfdHJlZV9nZXRfcmVnKCkobWF5YmUsIHRoZSBuYW1l
IHNoYWxsIGJlIGNoYW5nZWQuLi4uKSwgYW5kDQpJbnRyb2R1Y2UgYSBuZXcgZnVuY3Rpb24gdG8g
ZG8gd2hhdCBJIHNhaWQgYWJvdmUuDQogDQo+ID4gKyAgICAgICAgdG90X3NpemUgKz0gKHU2NClw
c2l6ZTsNCj4gDQo+IFRoaXMgY2FzdCBzZWVtcyB1bm5lY2Vzc2FyeS4NCj4gDQo+ID4gKyAgICAg
ICAgc21mbiA9IG1hZGRyX3RvX21mbihwYmFzZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmICgg
IWFsbG9jX2RvbXN0YXRpY19wYWdlcyhkLCBwc2l6ZSA+PiBQQUdFX1NISUZULCBzbWZuLCAwKSAp
DQo+ID4gKyAgICAgICAgew0KPiA+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUg0KPiA+
ICsgICAgICAgICAgICAgICAgICAgICIlcGQ6IGNhbm5vdCBhbGxvY2F0ZSBzdGF0aWMgbWVtb3J5
Ig0KPiA+ICsgICAgICAgICAgICAgICAgICAgICIoMHglIlBSSXBhZGRyIiAtIDB4JSJQUklwYWRk
ciIpIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICBkLCBwYmFzZSwgcGJhc2UgKyBwc2l6ZSk7
DQo+ID4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+
ICsgICAgICAgIHByaW50ayhYRU5MT0dfSU5GTyAiJXBkIFNUQVRJQyBCQU5LWyVkXSAlIyJQUklw
YWRkciItDQo+ICUjIlBSSXBhZGRyIlxuIiwNCj4gPiArICAgICAgICAgICAgICAgZCwgYmFuaywg
cGJhc2UsIHBiYXNlICsgcHNpemUpOw0KPiA+ICsNCj4gPiArICAgICAgICAvKg0KPiA+ICsgICAg
ICAgICAqIEl0IHNoYWxsIGJlIG1hcHBlZCB0byB0aGUgZml4ZWQgZ3Vlc3QgUkFNIGFkZHJlc3Mg
cmFtYmFzZVtpXSwNCj4gPiArICAgICAgICAgKiBBbmQgdW50aWwgaXQgZXhoYXVzdHMgdGhlIHJh
bXNpemVbaV0sIGl0IHdpbGwgc2VlayB0byB0aGUgbmV4dA0KPiA+ICsgICAgICAgICAqIHJhbWJh
c2VbaSsxXS4NCj4gPiArICAgICAgICAgKi8NCj4gPiArICAgICAgICB3aGlsZSAoIDEgKQ0KPiA+
ICsgICAgICAgIHsNCj4gPiArICAgICAgICAgICAgaWYgKCBnc2l6ZSA+PSBwc2l6ZSApDQo+ID4g
KyAgICAgICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgIGlmICggIWFsbG9jYXRlX3N0YXRp
Y19iYW5rX21lbW9yeShkLCBraW5mbywgZ2JhbmssDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNnZm4sIHNtZm4sIHBzaXplKSApDQo+ID4g
KyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg
ICAgIGdzaXplID0gZ3NpemUgLSBwc2l6ZTsNCj4gPiArICAgICAgICAgICAgICAgIGJhbmsrKzsN
Cj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAg
ICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgew0KPiA+ICsgICAgICAgICAgICAgICAg
aWYgKCAhYWxsb2NhdGVfc3RhdGljX2JhbmtfbWVtb3J5KGQsIGtpbmZvLCBnYmFuaywNCj4gPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2dmbiwg
c21mbiwgZ3NpemUpICkNCj4gPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7DQo+ID4g
Kw0KPiA+ICsgICAgICAgICAgICAgICAgLyoNCj4gPiArICAgICAgICAgICAgICAgICAqIFBoeXNp
Y2FsIGJhbmsgaGFzbid0IGJlZW4gdG90YWxseSBtYXBwZWQsDQo+ID4gKyAgICAgICAgICAgICAg
ICAgKiBzZWVraW5nIHRvIHRoZSBuZXh0IGd1ZXN0IFJBTSBpKzEsIGlmIGV4aXN0Lg0KPiA+ICsg
ICAgICAgICAgICAgICAgICovDQo+ID4gKyAgICAgICAgICAgICAgICBpZiAoICsrZ2JhbmsgPCBH
VUVTVF9SQU1fQkFOS1MgKQ0KPiA+ICsgICAgICAgICAgICAgICAgew0KPiA+ICsgICAgICAgICAg
ICAgICAgICAgIHBzaXplID0gcHNpemUgLSBnc2l6ZTsNCj4gPiArICAgICAgICAgICAgICAgICAg
ICBzbWZuID0gbWZuX2FkZChzbWZuLCBnc2l6ZSA+PiBQQUdFX1NISUZUKTsNCj4gPiArICAgICAg
ICAgICAgICAgICAgICBnc2l6ZSA9IHJhbXNpemVbZ2JhbmtdOw0KPiA+ICsgICAgICAgICAgICAg
ICAgICAgIHNnZm4gPSBnYWRkcl90b19nZm4ocmFtYmFzZVtnYmFua10pOw0KPiA+ICsgICAgICAg
ICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAg
ICAgICAgIGdvdG8gZmFpbDsNCj4gPiArICAgICAgICAgICAgfQ0KPiANCj4gVGhlIGRvdWJsZSBs
b29wIGlzIG5vdCBuaWNlIGJ1dCBJIGNhbid0IHRoaW5rIG9mIGEgYmV0dGVyIHdheS4gSG93ZXZl
ciwgSSB0aGluaw0KPiB0aGUgY29kZSBpbiB0aGUgbG9vcCBjYW4gYmUgc2ltcGxpZmllZC4gWW91
IGNvdWxkIHdyaXRlIHNvbWV0aGluZyBsaWtlOg0KPiANCj4gLyogTWFwIGFzIG11Y2ggYXMgcG9z
c2libGUgdGhlIHN0YXRpYyByYW5nZSB0byB0aGUgZ3Vlc3QgYmFuayAqLyBpZg0KPiAoICFhbGxv
Y2F0ZV9zdGF0aWNfYmFuayguLi4sIG1pbihwc2l6ZSwgZ3NpemUpICkNCj4gICAgZ290byBmYWls
Ow0KPiANCj4gLyogVGhlIHBoeXNpY2FsIGJhbmsgaXMgZnVsbHkgbWFwcGVkLiBIYW5kbGUgdGhl
IG5leHQgYmFuay4gKi8gaWYgKCBnc2l6ZSA+PQ0KPiBwc2l6ZSApIHsNCj4gICAgICBnc2l6ZSA9
IGdzaXplIC0gcHNpemU7DQo+ICAgICAgYmFuaysrOw0KPiAgICAgIGJyZWFrOw0KPiB9DQo+IC8q
IFdlIHN0aWxsIGhhdmUgbWVtb3J5IHRvIG1hcC4gQ2hlY2sgaWYgd2UgaGF2ZSBhbm90aGVyIGd1
ZXN0IGJhbmsNCj4gYXZhaWxhYmxlICovIGVsc2UgaWYgKCArK2diYW5rID4gR1VFU1RfUkFNX0JB
TktTICkgew0KPiAgICAgcHJpbnRrKCJFeGhhdXN0ZWQgdGhlIG51bWJlciBvZiBndWVzdCBiYW5r
XG4iKTsNCj4gICAgIGdvdG8gZmFpbDsNCj4gfQ0KPiANCj4gW1VwZGF0ZSB0byB0aGUgbmV4dCBn
dWVzdCBiYW5rXQ0KPiANCg0KVGhhbmtzIGZvciB0aGUgZGV0YWlsZWQgc2ltcGxpZmljYXRpb24h
ISENCg0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICAgIHJldHVybiB0b3Rfc2l6
ZTsNCj4gPiArDQo+ID4gK2ZhaWw6DQo+ID4gKyAgICBwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRl
IHJlcXVlc3RlZCBzdGF0aWMgbWVtb3J5IGZvciBkb21haW4gJXBkLiINCj4gPiArICAgICAgICAg
ICJGaXggdGhlIFZNcyBjb25maWd1cmF0aW9ucy5cbiIsDQo+ID4gKyAgICAgICAgICBkKTsNCj4g
PiArfQ0KPiA+ICsNCj4gPiAgIHN0YXRpYyBpbnQgX19pbml0IHdyaXRlX3Byb3BlcnRpZXMoc3Ry
dWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbywNCj4gPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGR0X2RldmljZV9ub2RlICpu
b2RlKQ0KPiA+ICAgew0KPiA+IEBAIC0yNDM3LDggKzI1ODksNyBAQCBzdGF0aWMgaW50IF9faW5p
dCBjb25zdHJ1Y3RfZG9tVShzdHJ1Y3QgZG9tYWluICpkLA0KPiA+ICAgICAgIGlmICggcHJvcCAp
DQo+ID4gICAgICAgew0KPiA+ICAgICAgICAgICBzdGF0aWNfbWVtID0gdHJ1ZTsNCj4gPiAtICAg
ICAgICAvKiBzdGF0aWNfbWVtX3NpemUgPSBhbGxvY2F0ZV9zdGF0aWNfbWVtb3J5KC4uLik7ICov
DQo+ID4gLSAgICAgICAgQlVHKCk7DQo+ID4gKyAgICAgICAgc3RhdGljX21lbV9zaXplID0gYWxs
b2NhdGVfc3RhdGljX21lbW9yeShkLCAma2luZm8sIG5vZGUpOw0KPiA+ICAgICAgIH0NCj4gPg0K
PiA+ICAgICAgIHJjID0gZHRfcHJvcGVydHlfcmVhZF91NjQobm9kZSwgIm1lbW9yeSIsICZtZW0p
Ow0KPiA+DQo+IA0KPiBDaGVlcnMsDQo+IA0KPiAtLQ0KPiBKdWxpZW4gR3JhbGwNCg0KDQpDaGVl
cnMNCg0KLS0NClBlbm55IFpoZW5nDQo=


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:34:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:34:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150830.278835 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fb4-0007WH-Lv; Tue, 06 Jul 2021 07:34:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150830.278835; Tue, 06 Jul 2021 07:34:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fb4-0007WA-Id; Tue, 06 Jul 2021 07:34:22 +0000
Received: by outflank-mailman (input) for mailman id 150830;
 Tue, 06 Jul 2021 07:34:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0fb3-0007Vx-LZ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:34:21 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 718cc6cf-7822-4a55-b88a-5287332243f8;
 Tue, 06 Jul 2021 07:34:21 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2105.outbound.protection.outlook.com [104.47.18.105])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-qcR2Mdp3NaiOvv0S1Ae7vg-1; Tue, 06 Jul 2021 09:34:19 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6301.eurprd04.prod.outlook.com (2603:10a6:803:f1::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Tue, 6 Jul
 2021 07:34:17 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:34:17 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P192CA0023.EURP192.PROD.OUTLOOK.COM (2603:10a6:102:56::28) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.31 via Frontend Transport; Tue, 6 Jul 2021 07:34:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 718cc6cf-7822-4a55-b88a-5287332243f8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625556860;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=rRfkLdqYsqVnmR003T3MYKFXMVasMYCt8NKyWOX106M=;
	b=Oc9JIufa4b20Tg9AMLWVkzlkuP1Vy9iUCEmobJ0W5OCg2PhMWbDz/8vDXAA7FSw4G7ntqj
	HaTjbcnHtugXnkyo1Po8io7Pg2IiYtXIpe8nA/BR+dQzU+FOLb9qQQL/oRxianOfx3jgDD
	ajTudfJFjY7mH+hIfVy+N3IBZYV0/dI=
X-MC-Unique: qcR2Mdp3NaiOvv0S1Ae7vg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=A0BxCUBGNxFmFBGIn150axfie7jYN3A3+fJ5GQsN8PI69YJ6xbk1Umre4coenNGY2vg3X1lX5IaPBAF//wtkg0nHZ8qR0D1SXfsodHTJtvvIMORna1bYwjgp5rE++BbcSLQVDTGpOqkgdQ5gZNP24o7LFgZ8v1BrFjMZxU3x9i76LHJmbdjp7Zw8GP6vOZv7AICNt927rmF6SXgYCTDZ4NPN0kdXny4rpIKfqqSeV/quCVzZekA0SgyWJ2+FQPifT+BBPgTzBcyTNZkCJrQsQbdzlmbfNas/gK0UtKTmMod5NmLP1h1i8uuEM0cpARLZms9of9uzA1b9mEqH8flVGw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rRfkLdqYsqVnmR003T3MYKFXMVasMYCt8NKyWOX106M=;
 b=FTiUI1DO74bcuFRqav2MYdhl4B40L0YGM8RLed8PmLhKY/IIvFl+SaJxgfDcC0VOXHWe9om2ERFPksVVLOjNqfXiLzmr5VR32SE97TaDyq0YuWIkK7qM8HfXwv6nj8pI/ijdJHdnaI5JM/QGxN1RUzGbYq5EbDaBqNs4cDbE46JbE+3posLl42qaJHfdS1Ftavb6oWycN4yVqUaXSBlWAGuwxsT/uBTQMyzaSa1464r3y5b5yxE1mLQoffMjhxlMchGoC32d4QoO/hYgAj6t9DaIwh5/1FYYzpxpNTyvfZ3gpTMJdmD9ovTKF+e+nEyxtWJ5yAAdfM/L/6XBWRfpHA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH 0/2] x86/mem-sharing: a fix and some cleanup
From: Jan Beulich <jbeulich@suse.com>
To: Tamas K Lengyel <tamas@tklengyel.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <dea13187-04ce-9c1d-aa5c-e2cd0a7d42d9@suse.com>
Message-ID: <c0c9705e-50a3-b5e2-469f-c96ef5f281ea@suse.com>
Date: Tue, 6 Jul 2021 09:34:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <dea13187-04ce-9c1d-aa5c-e2cd0a7d42d9@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR3P192CA0023.EURP192.PROD.OUTLOOK.COM
 (2603:10a6:102:56::28) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5c6d4c44-2517-4bf0-f3cd-08d9405075ef
X-MS-TrafficTypeDiagnostic: VI1PR04MB6301:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB6301983C68704613769521D6B31B9@VI1PR04MB6301.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	FvlCTkh7yPQ7WmtWrGO84/LGUXFuXI3k+l9AFuG5n/GQEtl7EAYELAUBnsQJ3u8+gv0E/obR4WTYLqYeAQauVcg4GWupp/l+jm701wSh3FE55nEquqysrxYI2Xn5cIP6vWErUHMSLHOdCnGbq6ixf2PaFsR0460+VglOxrLYSBhgiRCiVl3PM2/4eRjUrx7f3sEPRIzFvj0Q/NUNUREHIxj3NqC5x1UiDbngfROVeOEQmrO6W9Qbc86UP7Chqlf+p/ZXp15QTJ0oXfryt/643UN1FdKZnNg4CmiCLPBuSyxzsW58T1Yrxr3i/RJCMq3+4gQId6DHrfPj9otxGenVoPv/ZD3KhUqU1UF0AeweQotkzkcidBSqcBeUuOIfn50l8fnyWzxiurGIn0cBkgt8WAtn+HC/+YewjkS6hKKLriIMM9xM7qfhRAdj5IMxvbd98nmJ95GKG8kWWrH8om/kDH+1dKjbMjAJCkQ8tup/18tr4XMC2Vj7qJLXQh9rDb0yRyJgaQZO0hQAsJmPndTa5G/CXwBKqFvbFboSWdrJcYsmYCirmyWWav/XjORZWV1ILoZFOqCWJKHLCE45+Th7itCkZefOQByxVs/ffrCNuuIWl5PKcNBayY1sQAL+5pvivX3YLGv5hVtNIOK2S5Ttu6mBBLrv9OMIOZzXHtdvgI7VkJhVC+zcvubTU6++zR7YCFqKLucQC9QDEML2T59n+83ZKs+SpT//CCVxMwF6kxc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(376002)(136003)(366004)(346002)(396003)(86362001)(31686004)(31696002)(83380400001)(26005)(2616005)(16576012)(6486002)(36756003)(4326008)(4744005)(8676002)(16526019)(8936002)(5660300002)(478600001)(66476007)(186003)(54906003)(53546011)(6916009)(956004)(38100700002)(66556008)(66946007)(2906002)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5c6d4c44-2517-4bf0-f3cd-08d9405075ef
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:34:17.2095
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ptY9KT0qop7/8bs9LkyvUqFKLhfhKN59/PHiF530Q9vdvald2uvt37WSc1tZTs8L86UGKJeFzcvkbmCMIjBG3g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6301

Tamas,

On 29.06.2021 14:53, Jan Beulich wrote:
> 1: guarantee consistent lock order in get_two_gfns()
> 2: mov {get,put}_two_gfns()

while purely from a code placement perspective you may not be the
primary maintainer of this code until the movement in patch 2, it
exists solely for mem-sharing purposes (which is also why I'm
moving it in patch 2), so I'd appreciate you taking a look.

Thanks, Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:36:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:36:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150835.278847 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fch-0008Bb-4d; Tue, 06 Jul 2021 07:36:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150835.278847; Tue, 06 Jul 2021 07:36:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fcg-0008BU-VL; Tue, 06 Jul 2021 07:36:02 +0000
Received: by outflank-mailman (input) for mailman id 150835;
 Tue, 06 Jul 2021 07:36:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Dpqu=L6=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0fce-0008BD-UM
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:36:00 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.54]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b8295f26-e8a2-4210-80c8-3517b08e2b53;
 Tue, 06 Jul 2021 07:35:58 +0000 (UTC)
Received: from DB6P18901CA0022.EURP189.PROD.OUTLOOK.COM (2603:10a6:4:16::32)
 by DB6PR0801MB1814.eurprd08.prod.outlook.com (2603:10a6:4:37::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Tue, 6 Jul
 2021 07:35:56 +0000
Received: from DB5EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:16:cafe::88) by DB6P18901CA0022.outlook.office365.com
 (2603:10a6:4:16::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Tue, 6 Jul 2021 07:35:56 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT013.mail.protection.outlook.com (10.152.20.105) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 07:35:56 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Tue, 06 Jul 2021 07:35:56 +0000
Received: from 9ace0824680b.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A7B56D33-7E73-45C7-ADC9-2C1BE9783B65.1; 
 Tue, 06 Jul 2021 07:35:46 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9ace0824680b.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 07:35:46 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VE1PR08MB5806.eurprd08.prod.outlook.com (2603:10a6:800:1b1::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Tue, 6 Jul
 2021 07:35:44 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:35:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b8295f26-e8a2-4210-80c8-3517b08e2b53
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9MeDDTV6qBBaPLsA5ugMyPtUcvA9uoDSFo0OqGJKU24=;
 b=TPWVURH3XpWEg0l3Wq0/tqdY1QH3Dz2BZDOROpN6GmRzj63eGdSisCl3XTv+8ycWG8w9wNOlmLuZ39f1m35Ycmdo5JoBiJ53tyhHZH0RfAHd3Nz6QAhsMk8fcdXwUyzvPEePEj6lP6dy230ImFKaQRmsYJ2Ogi0xgMyW5MYXxYM=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JGRm82UyA6ZWWqzyl4hihmSaKQk3S/KG2Ar5HFGaCXs7rJzXpitglUB47MNL1bwvoA0r7pxZnkVELrxUzSZjnqCoc0dQqjkl9x5zQrcMU6SAkwhMJzzxlOVP3qod/Oq90m19ti0WioT64rvMrqyPRH/uR8/ovnyu+Gea0YrHEvlpnqGCxDwBBv40v4+9J+CpUpOI2NPHSLwkxnMliTKZj3HZPYLsnBi/kHmuAgZQkuVV62qPQI1h7l9ZC24rziCifJPCPsH6+oE/yplwwD7VTW9jItQUdybme7evcupc/4HE+eiQmLOkYymM1jIhzxpDkMSud+zs4qL+Dd1GngWbgA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9MeDDTV6qBBaPLsA5ugMyPtUcvA9uoDSFo0OqGJKU24=;
 b=UqQ8fNFsCyalXHtlWgf5ZLQSk2C2IjwGc5zrL2K/JeE+3d6jNCg4R5AaGSJwCl32SiGjkSF0Nmz9LYcD+KGCcVYn7yMj5eIXfnwVydaEACFR8b4gPcJXmxigJ/OtSaI2YozOECK6nuyRNLGAwaXEfNujQI3FFY3ogQlAjQ0U5aESrhgEFcmJzLS0vcafunOF7IfsoQGycTge1zkFtTyENQuVagcY2qurEyaEHjslHIesxAh3YKVhywEuV3vE7ZpRCjqu5D61Hgp2LFn2+TTTnqj4U9t4AMtViJuhmVqhc09I+wKB0w3ll9AZ197u1Ou4sP9nzjgYhEPkSZp1/lgTWA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9MeDDTV6qBBaPLsA5ugMyPtUcvA9uoDSFo0OqGJKU24=;
 b=TPWVURH3XpWEg0l3Wq0/tqdY1QH3Dz2BZDOROpN6GmRzj63eGdSisCl3XTv+8ycWG8w9wNOlmLuZ39f1m35Ycmdo5JoBiJ53tyhHZH0RfAHd3Nz6QAhsMk8fcdXwUyzvPEePEj6lP6dy230ImFKaQRmsYJ2Ogi0xgMyW5MYXxYM=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Julien
 Grall <julien@xen.org>
Subject: RE: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
Thread-Topic: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
Thread-Index: AQHXW0cAUmDBqGSIy0OSAkpietHoXKsxZ2CAgAQ9d/CAAA0IgIAACf8w
Date: Tue, 6 Jul 2021 07:35:44 +0000
Message-ID:
 <VE1PR08MB52154870D6D6EA339EFFA869F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-9-penny.zheng@arm.com>
 <f613372a-eac8-f79b-2941-b7cce3e1e0e7@xen.org>
 <VE1PR08MB52155D35A7B716DC7337311DF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <20e825e2-0266-3120-2d32-3fde50fe46a6@suse.com>
In-Reply-To: <20e825e2-0266-3120-2d32-3fde50fe46a6@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 0169DCEF70709447B1097E76AB668101.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.111]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 46d67b44-7b0a-4796-5ea3-08d94050b172
x-ms-traffictypediagnostic: VE1PR08MB5806:|DB6PR0801MB1814:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB6PR0801MB1814D05495485C7ABCA9BB5EF71B9@DB6PR0801MB1814.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 ruIQT1B07oJbyPE3d8ZNZtH63J8bBIndtxq2L0QnKUTkRBlqsZD5wJZUX++A5Weetxlnle0gAFvG9GPI3mcPawOIwhXyiZKQ9dHtSwdhp3T7AZ7MWupEHIC0IJWJyR24Ks9j7KbhhnfrUraMbMYTA8gkNJi2U1oevb4bkphnLOMN427dQrA5qtGvHgHbniWDFd5lSHzaEhtU1uNwh+MzWp+AZ3zN5b+7e5a4BvmVyQMxjxS26Cr2WwQ4ahU4fhhf9hgGzKyIT59OhTfUuXQSqnNkOxmv79uSuV2fyvU5HKfiAhm+h+cWZibgcakP2d9foVQP/kE5nH+LsHLoUY1glj7Y07hj6jMYALpDWEcr4QOb4EfG/9ZoZbH30J3rmsUpmrBkRdxTor6PW9/Q1PvjUXVyME/dW1y6L/gIDS3D4Uw/cNHKJd6tDj9jguo8Vy8pEm3uOkhjQLji6FIUMpvXLDmjZjIcfKVYE05KRq+Fd4odrOa2F2ymFYxsyCSeImuF0RMpoY8vmMDr/DEAmTju0iB6HdDBBbvV00/naiQfOI6UY31+S49xi4E5zwVXk7P9Y9Fc/nUVtecbQS+56Zdv1rX/auzS4q41u383EDDAnT5xDKtk9xj2aZJfwqrs3UKroiuO++vA7kvZxz6I8WhEdoluidsvCVrC9MuJwJ5QRqgiD8J75awup5e0W1yM4e2tEXzrpmkTmdJeToQGyADb4g==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(136003)(39860400002)(346002)(396003)(366004)(6506007)(53546011)(4744005)(186003)(26005)(2906002)(316002)(55016002)(71200400001)(54906003)(9686003)(83380400001)(76116006)(4326008)(7696005)(52536014)(6916009)(86362001)(478600001)(38100700002)(5660300002)(122000001)(66556008)(66476007)(66446008)(64756008)(8936002)(66946007)(33656002)(8676002)(81973001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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/?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5806
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	b0aecfa2-7f2b-4bd2-146a-08d94050aa00
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	/rTsr+3O2KPLWN5nMjLlfJMs/MzWQzsAl7Z3C1JyZNcvvHQ3wxcNLMZpQ5/b2NyfSa0CYDwZZpkdn1/7lL6fO0tevb15yP2x6XOQaYO3C9MHVAxq2lB9Tyak+tPXjGm4FuwpLBJ0xZLZQZ1NIPTERn5/46LDFz34v3cMfxmfczq8V80uKmt2IKiWF33p8EbPt0ajSAjX5oOC71wO6trCIzPKGgbAtl7rriEKFgi5yN+WkWhMk3lbLSgDZhPCWaCnbhs0mekwiVZjUQ+gHdg5H7UUKgGG7PVb5dg/V8FYcgsKgPO15D9TtpF5D5kWsriGE4LoLuWaZ35e/2UfkZoN1VfzaPChgcMqmRpyiE+2R0WXZN5pdw4oIl0Gwo8brNnC/StXb1jB9p9DZCL8ZyfDUoQYJtUSIr5zQOJlxrX8Nwe70bYfmYGivTul0dGNWVaUIwoYKR3E2x14mzdS2/YMR1yyPmuKP7qdGNoKIZeS32apS7N/BR0h55BNOiCGDxCC15bXLsmMtb5MRvTdlVfD5d6/q6gshv42D/mtiVks3K019O0am9G0a4A0XkIifu2+vw4cVN8/dkt3N6X4LXZSSWnabMJfsMr9waDLq9UOCN+UePofEkEc6vBSRTq3EO0N/7LtDwAY/Clbx+nSq51sX35CnuJu514eM9eLMI6RD5Z/ENm8+4gAv481JgamH7KzNFfhsE+RGYs83f22jkOsyKeBOa4xxRMCLvS9nnfB5nk=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(396003)(346002)(39860400002)(376002)(46966006)(36840700001)(83380400001)(4326008)(52536014)(9686003)(82310400003)(336012)(186003)(6506007)(478600001)(53546011)(33656002)(6862004)(5660300002)(2906002)(86362001)(316002)(70586007)(8936002)(36860700001)(26005)(54906003)(82740400003)(47076005)(4744005)(70206006)(8676002)(55016002)(7696005)(356005)(81166007)(81973001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:35:56.8144
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 46d67b44-7b0a-4796-5ea3-08d94050b172
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1814

SGkgamFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBUdWVzZGF5LCBKdWx5IDYsIDIwMjEgMjo1
OCBQTQ0KPiBUbzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+OyBKdWxpZW4gR3Jh
bGwgPGp1bGllbkB4ZW4ub3JnPg0KPiBDYzogQmVydHJhbmQgTWFycXVpcyA8QmVydHJhbmQuTWFy
cXVpc0Bhcm0uY29tPjsgV2VpIENoZW4NCj4gPFdlaS5DaGVuQGFybS5jb20+OyBzc3RhYmVsbGlu
aUBrZXJuZWwub3JnOyB4ZW4tDQo+IGRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IFN1Ympl
Y3Q6IFJlOiBbUEFUQ0ggOC85XSB4ZW4vYXJtOiBjaGVjayBgeGVuLHN0YXRpYy1tZW1gIHByb3Bl
cnR5IGR1cmluZw0KPiBkb21haW4gY29uc3RydWN0aW9uDQo+IA0KPiBPbiAwNi4wNy4yMDIxIDA4
OjMxLCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPiBIaQ0KPiANCj4gSSdtIHNvcnJ5LCBidXQgc2lu
Y2UgdGhpcyBoYXMgYmVlbiBvbmdvaW5nOiBDYW4gdGhlIHR3byBvZiB5b3UgcGxlYXNlIHByb3Bl
cmx5DQo+IHNlcGFyYXRlIGJldHdlZW4gVG86IGFuZCBDYzouIEZvciBxdWl0ZSBzb21lIHBhcnRz
IG9mIHRoaXMgb3ZlcmFsbCB0aHJlYWQgSSd2ZQ0KPiBiZWVuIG9uIHRoZSBUbzogbGlzdCBmb3Ig
bm8gcmVhc29uIGF0IGFsbCwgYWZhaWN0Lg0KPiANCg0KU28gc29ycnksIEknbGwgY2hlY2sgdGhl
IFRvOiBhbmQgQ2M6IG1vcmUgY2FyZWZ1bGx5Lg0KDQo+IFRoYW5rcywgSmFuDQoNClRoYW5rcyxw
ZW5ueQ0KDQo=


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:37:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:37:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150841.278857 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fe2-0000Qb-E2; Tue, 06 Jul 2021 07:37:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150841.278857; Tue, 06 Jul 2021 07:37:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fe2-0000QT-B0; Tue, 06 Jul 2021 07:37:26 +0000
Received: by outflank-mailman (input) for mailman id 150841;
 Tue, 06 Jul 2021 07:37:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0fe1-0000QJ-BZ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:37:25 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dbd11006-f199-4e3e-817d-b6c60ccc035e;
 Tue, 06 Jul 2021 07:37:24 +0000 (UTC)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2052.outbound.protection.outlook.com [104.47.10.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-11-V-wAzcdhMQunqJ_fD-lkmw-1; Tue, 06 Jul 2021 09:37:22 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2333.eurprd04.prod.outlook.com (2603:10a6:800:28::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Tue, 6 Jul
 2021 07:37:20 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:37:20 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR0101CA0078.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::46) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Tue, 6 Jul 2021 07:37:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dbd11006-f199-4e3e-817d-b6c60ccc035e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625557043;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=fC8tvz9K5QTmqAfOBdH/A5HhYPvREcEq76jcwFwI4gg=;
	b=iVlQA43lN5952ij8Z6sj3fsAawI2PyPsToiMp9tZnqv4bDAe6wQNoQplIIU3YdchhWa0Nm
	vDmDZ4+e55ejBYJZZdZDaUcOprJoDY5wR1uC+q4h4nrUKX9Eq0Ekq4Yqkdfu3hcxjcg8+q
	1Zw1ZtViTOBD2L4tEwqWprAjzZKHfdA=
X-MC-Unique: V-wAzcdhMQunqJ_fD-lkmw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UYDT4qLGln34UxnkIpGAjc5TC8pPalhVdJ6aKJF7/A4lb943DCzXiQg1JJsXmq4JAcFykHHWrdKdBvi1igpVMEQ6GvKzAr794EomURvomRzkhG2Dq6EoQg/E1X45CfPo1YN+h9BssSSXdpML5f12a9JfcXde2VMbrZt70G6O5dkUX6IBc8NIlBLVwV2JobfXWuiiPzlRhNmhWK4nMPOZM2rfM8d4nuZ84DBmDWq0Xybjq0Za0WHiDikjKMpR8rvG1c3cwh7qyp9wlgZAQDqXCwDm9b5ci7HqJPyCb5yZw3F0G+Eu7Tzz0yXSDwutgkaFYtu2L+du4upIGpr5gP6YzQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fC8tvz9K5QTmqAfOBdH/A5HhYPvREcEq76jcwFwI4gg=;
 b=bwzFhzHvack+BHcHIcvKunQH3YZ7ZeaFGp1eRrIBqtl/kOy/DVhfhtflykLow7sWeNBxCJkC9KAcAuO7S1KGCp7A/CdWO/VI+s9uNvrOPNowSaOZrEdirelQ9ALw84FjRqX0Cu156CziuGW2wkSKTlXuWe1IpI+mQya14YC0kVoqDDIG3xlxN8EgJ75ZZgo0aog4p1L3EWRLjVXEymVkAQXoUL0QFn6yVB64mtV4WZiPHOEGj76gsWYwOzzd6CtUPZvZSGrOuShpBWVY7ilHNvb9xOgTMHxg7Hwf1uZ2OCWau5EU8T2K5D8nCInxGoscCni/rtzDcjU4NHBr5Rc/cw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH] x86: drop a bogus SHARED_M2P() check from Dom0 building
 code
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Wei Liu <wl@xen.org>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <47deb99d-3ffc-61e4-26e6-7e7ab186a79a@suse.com>
Message-ID: <0accd732-71a2-b122-6c7b-bb8fc8b0f3cf@suse.com>
Date: Tue, 6 Jul 2021 09:37:19 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <47deb99d-3ffc-61e4-26e6-7e7ab186a79a@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM4PR0101CA0078.eurprd01.prod.exchangelabs.com
 (2603:10a6:200:41::46) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4b099e42-7280-457c-630f-08d94050e351
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2333:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2333861349B3938750830B12B31B9@VI1PR0401MB2333.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NA3avWv+vQ5+1gXgmkG1oKhCkBjNaYQIpAOx/Jqbfqf8M1XdnhNXMPFNpVEg8E9LA5Bgoe7h2rCVtuPdg17wWk2BROj4KOzBmohZIVDIfNURq/uHgVCR4DJPeAfmr30rfgHtUWzxESEUy04nPqkaPzyrf/rbLeUvapiNtgi+ALEJwGFo657zR6GjIaVPj8yWEMKMeFSsAxoyDIOMZi+PH5pxmQCpqzfMhPE09t/8j7Sq0RGX5mRFOfIP8bNRJpuFN2OeTimSVNBb0GwaAD5d/x4NSLhEx2XjJZ9CJl1WUadlJPrrXZHhfXvHsMURJVGxOYbNxvvuzFPOIG22b7kvWvEPQYckaS67w1qkvG88TRVlzKaOEU0oYPMc5Fe8U2D7Iiv5KvnLnE3BK2E11g4VtjWnCwDZBE43W6aqCkBAxc/4cjfGUS3S035x7N5A4mynWFaZuCIIY1e2q/C0wIHOnULCUDvqNSt+Kzmm0FR3tXQC2Q3ivK0Mak2/wfpKzmlS8QYqz6ZoX5FADdcf6Vr0iGbOi4Wrgxu/UZdFoa1R6FRnxTdDRf943yLLvbrPBBPf1PA9vhE2ApXriFoc8mg34SkPvnOfIGEPQHe3jJjC13oL3DV/HJ4/Onh8x1szmAMVDUKoa+c7B+Ww6mtG487wxeI6uODCHMLmiUjtz70dlSQbKgqW9lBWPnb759b71SmR
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39850400004)(396003)(376002)(366004)(346002)(53546011)(6486002)(31686004)(5660300002)(4744005)(86362001)(478600001)(8676002)(110136005)(36756003)(2616005)(66476007)(66556008)(956004)(4326008)(26005)(8936002)(66946007)(316002)(16526019)(2906002)(31696002)(16576012)(186003)(38100700002)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?WVZIYdPu4rlFpZJk0pvQA3qZ+OIrZ/jhnONvR56?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4b099e42-7280-457c-630f-08d94050e351
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:37:20.6188
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: KBcLjFKZ6bgf+qwez27/chrQXVHCID4vWfQ5b2q1QiQ40TTXMlJG8gzNp78zORKFTJDF+vtuU7TmVQ/VTHyjQw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2333

On 28.06.2021 13:52, Jan Beulich wrote:
> If anything, a check covering a wider range of invalid M2P entries ought
> to be used (e.g. VALID_M2P()). But since everything is fully under Xen's
> control at this stage, simply remove the BUG_ON().
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

I didn't expect this to be controversial, so may I please ask for an ack
(or otherwise)?

Thanks, Jan

> --- a/xen/arch/x86/pv/dom0_build.c
> +++ b/xen/arch/x86/pv/dom0_build.c
> @@ -815,7 +815,6 @@ int __init dom0_construct_pv(struct doma
>      page_list_for_each ( page, &d->page_list )
>      {
>          mfn = mfn_x(page_to_mfn(page));
> -        BUG_ON(SHARED_M2P(get_gpfn_from_mfn(mfn)));
>          if ( get_gpfn_from_mfn(mfn) >= count )
>          {
>              BUG_ON(compat);
> 



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:43:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:43:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150849.278868 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fjs-00026H-8g; Tue, 06 Jul 2021 07:43:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150849.278868; Tue, 06 Jul 2021 07:43:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0fjs-00026A-3K; Tue, 06 Jul 2021 07:43:28 +0000
Received: by outflank-mailman (input) for mailman id 150849;
 Tue, 06 Jul 2021 07:43:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0fjq-00025z-Hx
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:43:26 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d75cada2-de2d-11eb-847a-12813bfff9fa;
 Tue, 06 Jul 2021 07:43:24 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2050.outbound.protection.outlook.com [104.47.0.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-b3xt96PlO82bLnRhHV2OVQ-1; Tue, 06 Jul 2021 09:43:22 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2334.eurprd04.prod.outlook.com (2603:10a6:800:29::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Tue, 6 Jul
 2021 07:43:19 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:43:19 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR05CA0103.eurprd05.prod.outlook.com (2603:10a6:207:1::29) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 07:43:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d75cada2-de2d-11eb-847a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625557403;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Bj8vvHE65GMNIEmLZRdXA6lv2kvcPy2u9dPs75gWieo=;
	b=KNXVj4aImoixn08Az62cqylxp+/2HQgZyquetJL83uwcr5dVD4vzAkjUY4t6m3vF7a7LZX
	1jk+XVKCxrrSRfp/uPTBNYFlK/QutAGNwwhlDunQCsJHz3CKPPQX58Bkt1L1jRu+Cvs1hF
	+MPKw4bY6c/PMy58XFsUImuKFSYmlBA=
X-MC-Unique: b3xt96PlO82bLnRhHV2OVQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=U7uoIwChsxbqups1A2zYHLezTKIkecfOxUIqLZPsENAdjPiJJcGHzrleM5GHj2dwhbuApHkVQbEMgfip/OZyLDa33HjBzE48iXwra5ICe9qxLdkzm4KWDUhErO1JpYjWdOxx73a38NZ6bugaNRp5iYaR+dRtTlul09ukE/VF8XmBp7gkrBANTxkOBANbNLvOlNYOY+PWpVoXX4hFieu5JGhtBL5sl8j00B4qhPt4wf+uIv8s2SwF2BoeaVBZobfcanToDvN+N9ZrMYu1hxOCyqEtcE0EcHNw61hHoStVbnNTIsPM8jmMFsbmhE5R6FvJB5gIXeHmhJYLpIAyK5emNw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Bj8vvHE65GMNIEmLZRdXA6lv2kvcPy2u9dPs75gWieo=;
 b=lceop/75raK0yjg8bAn63kow4cb/dN/BAEC0hrOvxZSwY7ZUHxLe8nqfFBqZvW/yYiQwbUOJhagsa3MhrE50wsk04HCDIaWhNzJU/jpfILlbp++UYnVFEVbgVJxcWb8dkiHV3m+AVxB1CJ3WEpexe5h4vV1GIwpQyNCzoPExnHXQ0cLoBO8jeA86DP9gUgvJC4ZHUrlPE0j6rQwER/WVit4Y8nkJglHT1cNNzq2/+b7BM2CrO/OD5mYyexYBC6i/RjYbeZZ/3gMvxCkf57zJhyyS5dloqdcNE04O+pDWeNlJjLaaB58J+RJOZoLkQHXqzy3chBywlbU9JyHFNKHj2w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH v5] IOMMU: make DMA containment of quarantined devices
 optional
From: Jan Beulich <jbeulich@suse.com>
To: Paul Durrant <paul@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 Kevin Tian <kevin.tian@intel.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <e1f30ef7-6631-609d-6948-e9b1f3fa3b37@suse.com>
Message-ID: <54ef2e6e-b9d8-8fc8-897c-ca7c3fb8bc1d@suse.com>
Date: Tue, 6 Jul 2021 09:43:18 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <e1f30ef7-6631-609d-6948-e9b1f3fa3b37@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: AM3PR05CA0103.eurprd05.prod.outlook.com
 (2603:10a6:207:1::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fc09bd48-6304-4c94-0227-08d94051b90b
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2334:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2334EA4323AD95553518CD61B31B9@VI1PR0401MB2334.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	6vbycvGw7u/pbJgUpQj6kTllsfLWO6JWxREzhveiuEt0h7jsU4GzZLFSUqktzIk11ZVzEGVPatLRe9QeYUrzMGF2pL3Vcu/y3GvHccL6DjmpMgnqmGMLoDefD2TzOzv/EKClICnnwdCHtZ4QjWElnlvBlvJS6gGJ+0qPn3vLmyPQ8ub2BBG1dlNIL66+2xGv5nH43JqId7Jlh6A6kQpUbIbuUMHssxEa93+S0lgoIHYcgriXHb3GMCnGpnhIKxhYVQcDV+b2Wq4F9jPpPkZqo6dLdhgZy/2zbs6gzXIKgXcVnTW0JPG2tT3WE8KK2LKYu4deA8kV0K10li+1Nz53zL6fosNHIcI9IyFgau8NLeHy6SHuUIMd4ownLCUlsuTMqb/EEj7it6WMpfzCyoRfrZIXRnZCxDXeiTj/J7RXfAd0D50QC1llgXHRSffHXXAerozwoq0wzFLZbf/zzIX3cH9B+aC0uXjRQSM899oWYRmwKIJVV9eeYoW6P1feGTxD6aWygzrXjbytzRhPkHGNjU3tby+Iqqa7TacTyZ7c+WHEAT0C8Uri3B7RoKOxuZWDsicK34KTfQjAdajoGcuPBSQumcYX4wx/BLCqHWTwMHYUhUj+YUrma5AOuLwtuoqRQNj7rA57nXRuabQjjU2rtSQdlibxMUjK0Z5co0e6NKRnnDw1SsWWhV8xdcAH+SeziLA9b6EDz1Fj1UAB0YZnDGygNZMeVrKGPtUFs8g6wdc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(366004)(39850400004)(376002)(136003)(6486002)(26005)(2906002)(186003)(53546011)(4326008)(30864003)(16576012)(8936002)(86362001)(38100700002)(66946007)(8676002)(16526019)(83380400001)(31686004)(956004)(2616005)(478600001)(36756003)(316002)(66476007)(5660300002)(31696002)(66556008)(110136005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fc09bd48-6304-4c94-0227-08d94051b90b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:43:19.2030
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: MHTpE0b6CajfjIB08uHLE/qG4wEGOdBCUCvin9z7DcHPMAUFFmw+I2hV8lfRW9lO+mDawOmukzKHnxY6BNK/kg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2334

On 26.05.2021 10:19, Jan Beulich wrote:
> IOMMU: make DMA containment of quarantined devices optional
> 
> Containing still in flight DMA was introduced to work around certain
> devices / systems hanging hard upon hitting a "not-present" IOMMU fault.
> Passing through (such) devices (on such systems) is inherently insecure
> (as guests could easily arrange for IOMMU faults of any kind to occur).
> Defaulting to a mode where admins may not even become aware of issues
> with devices can be considered undesirable. Therefore convert this mode
> of operation to an optional one, not one enabled by default.
> 
> This involves resurrecting code commit ea38867831da ("x86 / iommu: set
> up a scratch page in the quarantine domain") did remove, in a slightly
> extended and abstracted fashion. Here, instead of reintroducing a pretty
> pointless use of "goto" in domain_context_unmap(), and instead of making
> the function (at least temporarily) inconsistent, take the opportunity
> and replace the other similarly pointless "goto" as well.
> 
> In order to key the re-instated bypasses off of there (not) being a root
> page table this further requires moving the allocate_domain_resources()
> invocation from reassign_device() to amd_iommu_setup_domain_device() (or
> else reassign_device() would allocate a root page table anyway); this is
> benign to the second caller of the latter function.
> 
> In VT-d's domain_context_unmap(), instead of adding yet another
> "goto out" when all that's wanted is a "return", eliminate the "out"
> label at the same time.
> 
> Take the opportunity and also limit the control to builds supporting
> PCI.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

May I please ask for feedback here? While I consider it too late to
get back fundamental objections (such should have been voiced
earlier), I'm still willing to accept such if they come with an
understandable reason and are backed by a majority, in which case
I'd (not very happily) drop the patch despite my concerns with the
original default chosen when the scratch-page variant of quarantining
was introduced. But I'm not going to give up on this merely because
of not getting any feedback at all; instead I'd then also have this
fall under "lazy consensus", if need be.

Jan

> ---
> v5: IOMMU_quarantine_fault -> IOMMU_quarantine_basic,
>     IOMMU_quarantine_write_fault -> IOMMU_quarantine_scratch_page.
>     Amend command line description to clarify tool stack based
>     quarantining mode when "iommu=no-quarantine". Fully
>     s/dummy/scratch/. Re-base.
> v4: "full" -> "scratch_page". Duplicate Kconfig help text into command
>     line doc. Re-base.
> v3: IOMMU_quarantine_basic -> IOMMU_quarantine_fault,
>     IOMMU_quarantine_full -> IOMMU_quarantine_write_fault. Kconfig
>     option (choice) to select default. Limit to HAS_PCI.
> v2: Don't use true/false. Introduce QUARANTINE_SKIP() (albeit I'm not
>     really convinced this is an improvement). Add comment.
> 
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -1364,7 +1364,7 @@ detection of systems known to misbehave
>  > Default: `new` unless directed-EOI is supported
>  
>  ### iommu
> -    = List of [ <bool>, verbose, debug, force, required, quarantine,
> +    = List of [ <bool>, verbose, debug, force, required, quarantine[=scratch-page],
>                  sharept, intremap, intpost, crash-disable,
>                  snoop, qinval, igfx, amd-iommu-perdev-intremap,
>                  dom0-{passthrough,strict} ]
> @@ -1402,11 +1402,32 @@ boolean (e.g. `iommu=no`) can override t
>      will prevent Xen from booting if IOMMUs aren't discovered and enabled
>      successfully.
>  
> -*   The `quarantine` boolean can be used to control Xen's behavior when
> -    de-assigning devices from guests.  If enabled (the default), Xen always
> +*   The `quarantine` option can be used to control Xen's behavior when
> +    de-assigning devices from guests.
> +
> +    When a PCI device is assigned to an untrusted domain, it is possible
> +    for that domain to program the device to DMA to an arbitrary address.
> +    The IOMMU is used to protect the host from malicious DMA by making
> +    sure that the device addresses can only target memory assigned to the
> +    guest.  However, when the guest domain is torn down, assigning the
> +    device back to the hardware domain would allow any in-flight DMA to
> +    potentially target critical host data.  To avoid this, quarantining
> +    should be enabled.  Quarantining can be done in two ways: In its basic
> +    form, all in-flight DMA will simply be forced to encounter IOMMU
> +    faults.  Since there are systems where doing so can cause host lockup,
> +    an alternative form is available where writes to memory will be made
> +    fault, but reads will be directed to a scratch page.  The implication
> +    here is that such reads will go unnoticed, i.e. an admin may not
> +    become aware of the underlying problem.
> +
> +    Therefore, if this option is set to true (the default), Xen always
>      quarantines such devices; they must be explicitly assigned back to Dom0
> -    before they can be used there again.  If disabled, Xen will only
> -    quarantine devices the toolstack hass arranged for getting quarantined.
> +    before they can be used there again.  If set to "scratch-page", still
> +    active DMA reads will additionally be directed to a "scratch" page.  If
> +    set to false, Xen will only quarantine devices the toolstack has arranged
> +    for getting quarantined, and only in the "basic" form.
> +
> +    This option is only valid on builds supporting PCI.
>  
>  *   The `sharept` boolean controls whether the IOMMU pagetables are shared
>      with the CPU-side HAP pagetables, or allocated separately.  Sharing
> --- a/xen/drivers/passthrough/Kconfig
> +++ b/xen/drivers/passthrough/Kconfig
> @@ -39,3 +39,31 @@ endif
>  
>  config IOMMU_FORCE_PT_SHARE
>  	bool
> +
> +choice
> +	prompt "IOMMU device quarantining default behavior"
> +	depends on HAS_PCI
> +	default IOMMU_QUARANTINE_BASIC
> +	---help---
> +	  When a PCI device is assigned to an untrusted domain, it is possible
> +	  for that domain to program the device to DMA to an arbitrary address.
> +	  The IOMMU is used to protect the host from malicious DMA by making
> +	  sure that the device addresses can only target memory assigned to the
> +	  guest.  However, when the guest domain is torn down, assigning the
> +	  device back to the hardware domain would allow any in-flight DMA to
> +	  potentially target critical host data.  To avoid this, quarantining
> +	  should be enabled.  Quarantining can be done in two ways: In its basic
> +	  form, all in-flight DMA will simply be forced to encounter IOMMU
> +	  faults.  Since there are systems where doing so can cause host lockup,
> +	  an alternative form is available where writes to memory will be made
> +	  fault, but reads will be directed to a scratch page.  The implication
> +	  here is that such reads will go unnoticed, i.e. an admin may not
> +	  become aware of the underlying problem.
> +
> +	config IOMMU_QUARANTINE_NONE
> +		bool "none"
> +	config IOMMU_QUARANTINE_BASIC
> +		bool "basic"
> +	config IOMMU_QUARANTINE_SCRATCH_PAGE
> +		bool "scratch page"
> +endchoice
> --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
> +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
> @@ -25,6 +25,9 @@
>  #include "iommu.h"
>  #include "../ats.h"
>  
> +/* dom_io is used as a sentinel for quarantined devices */
> +#define QUARANTINE_SKIP(d) ((d) == dom_io && !dom_iommu(d)->arch.amd.root_table)
> +
>  static bool_t __read_mostly init_done;
>  
>  static const struct iommu_init_ops _iommu_init_ops;
> @@ -81,19 +84,36 @@ int get_dma_requestor_id(uint16_t seg, u
>      return req_id;
>  }
>  
> -static void amd_iommu_setup_domain_device(
> +static int __must_check allocate_domain_resources(struct domain *d)
> +{
> +    struct domain_iommu *hd = dom_iommu(d);
> +    int rc;
> +
> +    spin_lock(&hd->arch.mapping_lock);
> +    rc = amd_iommu_alloc_root(d);
> +    spin_unlock(&hd->arch.mapping_lock);
> +
> +    return rc;
> +}
> +
> +static int __must_check amd_iommu_setup_domain_device(
>      struct domain *domain, struct amd_iommu *iommu,
>      uint8_t devfn, struct pci_dev *pdev)
>  {
>      struct amd_iommu_dte *table, *dte;
>      unsigned long flags;
> -    int req_id, valid = 1;
> +    int req_id, valid = 1, rc;
>      u8 bus = pdev->bus;
> -    const struct domain_iommu *hd = dom_iommu(domain);
> +    struct domain_iommu *hd = dom_iommu(domain);
>  
> -    BUG_ON( !hd->arch.amd.root_table ||
> -            !hd->arch.amd.paging_mode ||
> -            !iommu->dev_table.buffer );
> +    if ( QUARANTINE_SKIP(domain) )
> +        return 0;
> +
> +    BUG_ON(!hd->arch.amd.paging_mode || !iommu->dev_table.buffer);
> +
> +    rc = allocate_domain_resources(domain);
> +    if ( rc )
> +        return rc;
>  
>      if ( iommu_hwdom_passthrough && is_hardware_domain(domain) )
>          valid = 0;
> @@ -151,6 +171,8 @@ static void amd_iommu_setup_domain_devic
>  
>          amd_iommu_flush_iotlb(devfn, pdev, INV_IOMMU_ALL_PAGES_ADDRESS, 0);
>      }
> +
> +    return 0;
>  }
>  
>  int __init acpi_ivrs_init(void)
> @@ -222,18 +244,6 @@ int amd_iommu_alloc_root(struct domain *
>      return 0;
>  }
>  
> -static int __must_check allocate_domain_resources(struct domain *d)
> -{
> -    struct domain_iommu *hd = dom_iommu(d);
> -    int rc;
> -
> -    spin_lock(&hd->arch.mapping_lock);
> -    rc = amd_iommu_alloc_root(d);
> -    spin_unlock(&hd->arch.mapping_lock);
> -
> -    return rc;
> -}
> -
>  static int amd_iommu_domain_init(struct domain *d)
>  {
>      struct domain_iommu *hd = dom_iommu(d);
> @@ -283,6 +293,9 @@ static void amd_iommu_disable_domain_dev
>      int req_id;
>      u8 bus = pdev->bus;
>  
> +    if ( QUARANTINE_SKIP(domain) )
> +        return;
> +
>      BUG_ON ( iommu->dev_table.buffer == NULL );
>      req_id = get_dma_requestor_id(iommu->seg, PCI_BDF2(bus, devfn));
>      table = iommu->dev_table.buffer;
> @@ -349,11 +362,10 @@ static int reassign_device(struct domain
>          pdev->domain = target;
>      }
>  
> -    rc = allocate_domain_resources(target);
> +    rc = amd_iommu_setup_domain_device(target, iommu, devfn, pdev);
>      if ( rc )
>          return rc;
>  
> -    amd_iommu_setup_domain_device(target, iommu, devfn, pdev);
>      AMD_IOMMU_DEBUG("Re-assign %pp from dom%d to dom%d\n",
>                      &pdev->sbdf, source->domain_id, target->domain_id);
>  
> @@ -460,8 +472,7 @@ static int amd_iommu_add_device(u8 devfn
>          spin_unlock_irqrestore(&iommu->lock, flags);
>      }
>  
> -    amd_iommu_setup_domain_device(pdev->domain, iommu, devfn, pdev);
> -    return 0;
> +    return amd_iommu_setup_domain_device(pdev->domain, iommu, devfn, pdev);
>  }
>  
>  static int amd_iommu_remove_device(u8 devfn, struct pci_dev *pdev)
> --- a/xen/drivers/passthrough/iommu.c
> +++ b/xen/drivers/passthrough/iommu.c
> @@ -31,9 +31,24 @@ bool_t __initdata iommu_enable = 1;
>  bool_t __read_mostly iommu_enabled;
>  bool_t __read_mostly force_iommu;
>  bool_t __read_mostly iommu_verbose;
> -bool __read_mostly iommu_quarantine = true;
>  bool_t __read_mostly iommu_crash_disable;
>  
> +#define IOMMU_quarantine_none         0 /* aka false */
> +#define IOMMU_quarantine_basic        1 /* aka true */
> +#define IOMMU_quarantine_scratch_page 2
> +#ifdef CONFIG_HAS_PCI
> +uint8_t __read_mostly iommu_quarantine =
> +# if defined(CONFIG_IOMMU_QUARANTINE_NONE)
> +    IOMMU_quarantine_none;
> +# elif defined(CONFIG_IOMMU_QUARANTINE_BASIC)
> +    IOMMU_quarantine_basic;
> +# elif defined(CONFIG_IOMMU_QUARANTINE_SCRATCH_PAGE)
> +    IOMMU_quarantine_scratch_page;
> +# endif
> +#else
> +# define iommu_quarantine IOMMU_quarantine_none
> +#endif /* CONFIG_HAS_PCI */
> +
>  static bool __hwdom_initdata iommu_hwdom_none;
>  bool __hwdom_initdata iommu_hwdom_strict;
>  bool __read_mostly iommu_hwdom_passthrough;
> @@ -64,8 +79,12 @@ static int __init parse_iommu_param(cons
>          else if ( (val = parse_boolean("force", s, ss)) >= 0 ||
>                    (val = parse_boolean("required", s, ss)) >= 0 )
>              force_iommu = val;
> +#ifdef CONFIG_HAS_PCI
>          else if ( (val = parse_boolean("quarantine", s, ss)) >= 0 )
>              iommu_quarantine = val;
> +        else if ( ss == s + 15 && !strncmp(s, "quarantine=scratch-page", 23) )
> +            iommu_quarantine = IOMMU_quarantine_scratch_page;
> +#endif
>  #ifdef CONFIG_X86
>          else if ( (val = parse_boolean("igfx", s, ss)) >= 0 )
>              iommu_igfx = val;
> @@ -432,7 +451,7 @@ static int __init iommu_quarantine_init(
>      dom_io->options |= XEN_DOMCTL_CDF_iommu;
>  
>      rc = iommu_domain_init(dom_io, 0);
> -    if ( rc )
> +    if ( rc || iommu_quarantine < IOMMU_quarantine_scratch_page )
>          return rc;
>  
>      if ( !hd->platform_ops->quarantine_init )
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -42,6 +42,9 @@
>  #include "vtd.h"
>  #include "../ats.h"
>  
> +/* dom_io is used as a sentinel for quarantined devices */
> +#define QUARANTINE_SKIP(d) ((d) == dom_io && !dom_iommu(d)->arch.vtd.pgd_maddr)
> +
>  struct mapped_rmrr {
>      struct list_head list;
>      u64 base, end;
> @@ -1328,6 +1331,9 @@ int domain_context_mapping_one(
>      int rc, ret;
>      bool_t flush_dev_iotlb;
>  
> +    if ( QUARANTINE_SKIP(domain) )
> +        return 0;
> +
>      ASSERT(pcidevs_locked());
>      spin_lock(&iommu->lock);
>      maddr = bus_to_context_maddr(iommu, bus);
> @@ -1556,6 +1562,9 @@ int domain_context_unmap_one(
>      int iommu_domid, rc, ret;
>      bool_t flush_dev_iotlb;
>  
> +    if ( QUARANTINE_SKIP(domain) )
> +        return 0;
> +
>      ASSERT(pcidevs_locked());
>      spin_lock(&iommu->lock);
>  
> @@ -1617,7 +1626,7 @@ static int domain_context_unmap(struct d
>  {
>      struct acpi_drhd_unit *drhd;
>      struct vtd_iommu *iommu;
> -    int ret = 0;
> +    int ret;
>      u8 seg = pdev->seg, bus = pdev->bus, tmp_bus, tmp_devfn, secbus;
>      int found = 0;
>  
> @@ -1632,14 +1641,12 @@ static int domain_context_unmap(struct d
>          if ( iommu_debug )
>              printk(VTDPREFIX "%pd:Hostbridge: skip %pp unmap\n",
>                     domain, &PCI_SBDF3(seg, bus, devfn));
> -        if ( !is_hardware_domain(domain) )
> -            return -EPERM;
> -        goto out;
> +        return is_hardware_domain(domain) ? 0 : -EPERM;
>  
>      case DEV_TYPE_PCIe_BRIDGE:
>      case DEV_TYPE_PCIe2PCI_BRIDGE:
>      case DEV_TYPE_LEGACY_PCI_BRIDGE:
> -        goto out;
> +        return 0;
>  
>      case DEV_TYPE_PCIe_ENDPOINT:
>          if ( iommu_debug )
> @@ -1681,10 +1688,12 @@ static int domain_context_unmap(struct d
>      default:
>          dprintk(XENLOG_ERR VTDPREFIX, "%pd:unknown(%u): %pp\n",
>                  domain, pdev->type, &PCI_SBDF3(seg, bus, devfn));
> -        ret = -EINVAL;
> -        goto out;
> +        return -EINVAL;
>      }
>  
> +    if ( QUARANTINE_SKIP(domain) )
> +        return ret;
> +
>      /*
>       * if no other devices under the same iommu owned by this domain,
>       * clear iommu in iommu_bitmap and clear domain_id in domid_bitmp
> @@ -1719,7 +1728,6 @@ static int domain_context_unmap(struct d
>          iommu->domid_map[iommu_domid] = 0;
>      }
>  
> -out:
>      return ret;
>  }
>  
> --- a/xen/include/xen/iommu.h
> +++ b/xen/include/xen/iommu.h
> @@ -52,7 +52,9 @@ static inline bool_t dfn_eq(dfn_t x, dfn
>  }
>  
>  extern bool_t iommu_enable, iommu_enabled;
> -extern bool force_iommu, iommu_quarantine, iommu_verbose;
> +extern bool force_iommu, iommu_verbose;
> +/* Boolean except for the specific purposes of drivers/passthrough/iommu.c. */
> +extern uint8_t iommu_quarantine;
>  
>  #ifdef CONFIG_X86
>  extern enum __packed iommu_intremap {
> 



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 07:48:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 07:48:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150855.278878 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0for-0002yI-QC; Tue, 06 Jul 2021 07:48:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150855.278878; Tue, 06 Jul 2021 07:48:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0for-0002yB-N2; Tue, 06 Jul 2021 07:48:37 +0000
Received: by outflank-mailman (input) for mailman id 150855;
 Tue, 06 Jul 2021 07:48:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0foq-0002y3-O1
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 07:48:36 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 90f3153a-de2e-11eb-847a-12813bfff9fa;
 Tue, 06 Jul 2021 07:48:35 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2169.outbound.protection.outlook.com [104.47.17.169])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-11-tq2uS7CAMqS-ihXASyAiGw-1; Tue, 06 Jul 2021 09:48:33 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3933.eurprd04.prod.outlook.com (2603:10a6:803:24::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Tue, 6 Jul
 2021 07:48:32 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 07:48:32 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0227.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 07:48:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 90f3153a-de2e-11eb-847a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625557714;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=kdeViXpNFqqsmIMbQEWHKqDd9f0h1ZPI4tHSJtfYxFo=;
	b=LsxwDoZVaF9aUNojgTrc2ypJTiuAfUFwQutEsaR9NegtRJSjKeO97FaKyjpDhkWNZOkSWY
	tj1us7iDdKuALJnZ6jk23zyUJNHhS1goZGGv0IaIRmyC7Po5/XCEX/QkeZv2NstB8r+TmI
	lqd6x5GcNOZm+sTqyBDxGdNxq/O3Hfg=
X-MC-Unique: tq2uS7CAMqS-ihXASyAiGw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ya+NmQM1o5Nnt1Zm+rKzw3Cu/yZlJcLkegVVEcuJAmb4EQxHXJVb8N3ds2XC2f9FQdms3HY8En6PXD2OQDOnq1KzsQ2gV7q5yyFU2pUjZEWNVbpgP1I+S6cTVOdXFO9t+0D6HqLyhLtWmh/voV4zPwvCPe0IEVQs4Qo6dwEab+zGpHMhb7WiggeMWti8XSEd9r9/S8QUYZF6US9CHn74SKydvG44fTaW4OpAuNfn+XHAHqVoZ4X1s4hAr5pQ4cOvJhsMRZx6ReW8Q4JaN+ho1WD30d7u9ZfzgH9+qVJkM2PrO9avpW9fB620DyOYafz5lplSGVvBnnaqtEU1h2pBDw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kdeViXpNFqqsmIMbQEWHKqDd9f0h1ZPI4tHSJtfYxFo=;
 b=lATi2ugOO8vWt2bmjxJkZog20BCd4RH8qxtlbqVfNSeCDxFGta+J96+VwWTA6VOZxOe2EG6WHqWLB1ClCiLD3iJA+QBt8TfobQnVNTcs6Jec+XYLBA3qKhLh6Oj2hswesfjs24LpN2bjUKAeNOqHvt4VogvjYXXnKdESmkiLrptymLr1AGfuc5FoV6DVf72+RW0j2EreI7JkhWtj+TgLImI66xLqeYOl1K87VqOwVh/Ds99MYescWq5NorcyrPUtJU5PU7a/54h2q5Er//W6mlIlma8e80FvGzPEZ2yygb3whyGRxh8sltovjzQgF3imgbiswl5bVQzmOpA4tlzgdA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH] x86/CPUID: don't shrink hypervisor leaves
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0f5fe8d3-4c43-e60f-c585-67b2f23383ab@suse.com>
Message-ID: <03f80bf0-047d-f940-72e7-7065e55d0d25@suse.com>
Date: Tue, 6 Jul 2021 09:48:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <0f5fe8d3-4c43-e60f-c585-67b2f23383ab@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0227.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: df5782f0-8a69-4a43-f52c-08d9405273e9
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3933:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3933683E4F67EEAF5C8F1923B31B9@VI1PR0402MB3933.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	DNHjLI5psomhXagZ0cAMTjm2GcXZkLmBPRIJPbly+lLQpQ8fIXHpJ0nglc0i8LM5homIPwXE2eeS82wy3rxpOVOos+deqGKOocE8xhtUypslXatNooU7OJ0pTv2EoCN7wXnxmsuttaIyXWB/+Vud+Gu6gd5HB2MQb5Rd6i9szeZEIivuKaXvOA/rZI+ylBfhD3ISZs8bUPmk4M0GvA5YF3hRogIv0zzwJKJRWGC9hCEOd/Ho6Iz36F8SgWsS1yx5FmV370z/VhKBXLD23iM1vuxTWyUP8xhQQOxW8VAYOMrq4XAxKEVEttfnUFOBJ/tEIGFrnribajw2s6b8MSjwS4Ltyzzss7WlEPe3DYsYoYYnaA1doFngg9X61Huklh2f2CBDxXUIyAkm1LvWVbD389KdJkYGrGQy72zc+EcsSQuS9rdgkXB0Ih2mP7s7RD/jg9wrIb2w56B6TjItU/LZsm6+BiLvkXqDsR/+wlGXanGL6zygN+whX4xX7sYbB1OIY6OdpyYKjxfwe6E0ER0NJ3Htw4w9hsX7YBYNMGTcElhZxrrXfcIIBe1S0bJa9rXzDxxqqEFBaC2SfWDGyg6AsO/ZyA5+2Z9G2dazJMaA0knWFnnqpurbQ3VvELE3oYePVWD+mhmsxEXHwu6s13JEabypHdsE0PJ1e81pdt9qlJoEiMPcI3Kwino82fWK36ux2uO4tUgkOcotMWdoTp2zO4ROhtO6ulJbQpL+hAdIYQUt8FcXDGw7lE9lY7ruhJ3H
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(136003)(376002)(346002)(366004)(396003)(26005)(31696002)(38100700002)(8936002)(31686004)(478600001)(66476007)(4326008)(2906002)(6916009)(186003)(36756003)(54906003)(16526019)(66946007)(956004)(2616005)(53546011)(83380400001)(16576012)(86362001)(8676002)(66556008)(6486002)(5660300002)(316002)(21314003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?biswTVdHYlhBTVAwTHVoRlBScFM2ajFtYjVNOVlKaENrbDd5Q2wxUXFmYTFF?=
 =?utf-8?B?UWx4SUZrQUtlU09VVG05eGVFSHpLNi9OYnBiUHZHbWYrVnV4NlJkWk5Dd2pT?=
 =?utf-8?B?NWE4bEh5WlVNazVUa3FCYUQ0VVN6ejUxdjdFQldCdHBiN3FMS3VvOHcxNFBV?=
 =?utf-8?B?K1ZMeEh6azlWaUhzNm52ZHlDNnE2SlA3REtQTDFZOGVOZndVWU9pWTZxbnBa?=
 =?utf-8?B?WC9yRDZTeEN0ZkRJZzlXRlVOd2ZvbW9GNUJZVTlNSHNSNy9vWTBwYUg2VUZi?=
 =?utf-8?B?ODNjV1dhQThhTk9LRXlUZm5SQlUzRDhNVm1QOURldENmL0ZIMlJRNTlScm1y?=
 =?utf-8?B?QWYyRE5ob2kzTGJ5bHZtRGFSYmxxN1l0Y0VZMEQ4SnlBU1VHdUF5V2p4Y09i?=
 =?utf-8?B?NkkzWWhwZ01pMzV4dldEVWkzRzJsQ21jb3BCTW5DSC9TL0tKMnpnLzVKeE5V?=
 =?utf-8?B?QUZBanZ4NXdIT1pCN0NvQVNTNHRIWjlxaWRmVk1GRHkvRUtYa3VIQWY4SEJm?=
 =?utf-8?B?ZEQxTU9RUElEZ3V5NE54MHFCcWFGYzBpdUU2eS9Tc256OXpuTlFzZTUrQk1D?=
 =?utf-8?B?L3dWS2tuYkpYalliSjZkMFZMbTUvUzNzQVlsNGFpUXdTaHRuanZ1Q3luOGxR?=
 =?utf-8?B?RUVmK2tWbFdpVmlpRzVMcDl5SFIrKzB6K1lFRDk0cEUvTEluWjA2aUJyOUlx?=
 =?utf-8?B?N01JZ2MxL1dlNStoT3k3U25HNzJpb2dUZXh2cXVBd3phZXpWelZRYWt0b1Nk?=
 =?utf-8?B?UXArUlRUS09Wd2tJMWFsWEUrZmNzRVpNd1IyNC92cTRacnNUZlpncGFLckVs?=
 =?utf-8?B?MWpxcGRNVUZsT1BzcnBBSUlGckVEMi8rRExUMU1DTERzWnkvT3MyNlZBeDZZ?=
 =?utf-8?B?bGxmN2hiNGkxMGwxU2w2Q0U0cFQzb1ZHK0lFWUtyWWR5UXFWaC9maVM4ZzBM?=
 =?utf-8?B?dTBPcUNNN0ZoTUJob2ExK0Yvc0hNLzVybVRHVTNqTkNhM2M5NFkyNXcvV2dZ?=
 =?utf-8?B?VHdHZkozZmt6U29iVFNweUxnQk1pR2Y5dExvMElSdDZVSFNRVnNJb2c5d3NM?=
 =?utf-8?B?Q0NuZ091UmNEWXEvNVlmTEhXS3BmU0ZKb2c4SHdWM2dxSkN3b2JRY0xsS2t2?=
 =?utf-8?B?UFRqRkxWU0FWamlTTzVtRlVRNG5ONnZVaU9vSWFkUUYvVzJjT1FsdHdKdldU?=
 =?utf-8?B?eW4rTTdVNUZFOWhLaFlWZ1ZmUk0rK1ZXaVBWQWVoRFMvS2xtNUVmbVZBb21a?=
 =?utf-8?B?WCs2V0NLZ3pvQVhIeUoxNkVMc2JGQUZBVW5GMGcydFlvRVo1YzJuQnZYaDR3?=
 =?utf-8?B?MWc4aW52Y0ZtdUg2bk0wTzRveVZQQ3lHeWk3WjAyRWZNVWMvekVOYXFIMzFm?=
 =?utf-8?B?THBLSWt6OGVsSDBGNVVDeWh5QzZtOWdhMHNQczBMYXlQMFBENStlb28xazZV?=
 =?utf-8?B?VnFQaVRPL2FxYms1b1NFZDdwditSOVVRdDdLQ0JhcjQzWk55QXE2TGdoYWdv?=
 =?utf-8?B?RWs2MjMreXR3R241aFZlQjQyR1lORkNWRS9JZCswK0cyMWErVzVxMDRDTUFx?=
 =?utf-8?B?UEZRMDlKdmxmRzFXN3VpenJQb1Z0dmh4bFpHamQxZmZCd3B0MGZ4Skh4NVUx?=
 =?utf-8?B?U09VRjFzaGZrcjE4bVlIMG9Ramh5eTdvcU9SS1l0dU52UElERFpSc05rR1pJ?=
 =?utf-8?B?KzhxeFZvZzhWMGdnbWNkbzBvNjdPZHNmaXdCUnYvQ0VMTmp0WWk3dFlwcDFV?=
 =?utf-8?Q?vGt7/E5XZbq66tISVnlxXtjCAMvIQy/Ipn7mtSf?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: df5782f0-8a69-4a43-f52c-08d9405273e9
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 07:48:32.7053
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: hvdgqo/FENF7oZ2gsvUHiZuzgBm74KNGqCC0zR8x1i2b7dSgzYQ22D4CfPhTmO0fm5K+VdtA87BWBwJW8YRjYw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3933

Andrew,

On 07.05.2021 10:40, Jan Beulich wrote:
> This is a partial revert of 540d911c2813 ("x86/CPUID: shrink
> max_{,sub}leaf fields according to actual leaf contents"). Andrew points
> out that XXX.

if you still think the original change was wrong, would you please take
the time to fill in the XXX above. It was you who asked for the revert,
so I hope you can explain the reasons (I'm sorry for not being able to
deduce these from your [informal iirc] revert request), and I expect
you can find this much of time when I've already taken care of
everything else. If I don't hear back within a couple of days, I'll
assume you've changed your mind, and I'd then drop this patch.

Thanks, Jan

> Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> Obviously the XXX wants filling in. So far I did not really understand
> what bad consequences there might be, but I can agree with the undoing
> of this part of the original change along the lines of why the Viridian
> side adjustment was also requested to be dropped (before the patch went
> in).
> 
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -964,15 +964,13 @@ void cpuid_hypervisor_leaves(const struc
>      uint32_t base = is_viridian_domain(d) ? 0x40000100 : 0x40000000;
>      uint32_t idx  = leaf - base;
>      unsigned int limit = is_viridian_domain(d) ? p->hv2_limit : p->hv_limit;
> -    unsigned int dflt = is_pv_domain(d) ? XEN_CPUID_MAX_PV_NUM_LEAVES
> -                                        : XEN_CPUID_MAX_HVM_NUM_LEAVES;
>  
>      if ( limit == 0 )
>          /* Default number of leaves */
> -        limit = dflt;
> +        limit = XEN_CPUID_MAX_NUM_LEAVES;
>      else
>          /* Clamp toolstack value between 2 and MAX_NUM_LEAVES. */
> -        limit = min(max(limit, 2u), dflt);
> +        limit = min(max(limit, 2u), XEN_CPUID_MAX_NUM_LEAVES + 0u);
>  
>      if ( idx > limit )
>          return;
> --- a/xen/include/public/arch-x86/cpuid.h
> +++ b/xen/include/public/arch-x86/cpuid.h
> @@ -113,10 +113,6 @@
>  /* Max. address width in bits taking memory hotplug into account. */
>  #define XEN_CPUID_MACHINE_ADDRESS_WIDTH_MASK (0xffu << 0)
>  
> -#define XEN_CPUID_MAX_PV_NUM_LEAVES 5
> -#define XEN_CPUID_MAX_HVM_NUM_LEAVES 4
> -#define XEN_CPUID_MAX_NUM_LEAVES \
> -    (XEN_CPUID_MAX_PV_NUM_LEAVES > XEN_CPUID_MAX_HVM_NUM_LEAVES ? \
> -     XEN_CPUID_MAX_PV_NUM_LEAVES : XEN_CPUID_MAX_HVM_NUM_LEAVES)
> +#define XEN_CPUID_MAX_NUM_LEAVES 5
>  
>  #endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */
> 



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:02:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:02:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150865.278889 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0g2M-0006Ig-D6; Tue, 06 Jul 2021 08:02:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150865.278889; Tue, 06 Jul 2021 08:02:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0g2M-0006IZ-9v; Tue, 06 Jul 2021 08:02:34 +0000
Received: by outflank-mailman (input) for mailman id 150865;
 Tue, 06 Jul 2021 08:02:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0g2L-0006IR-BA
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:02:33 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.82]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8400b060-de30-11eb-847b-12813bfff9fa;
 Tue, 06 Jul 2021 08:02:32 +0000 (UTC)
Received: from AM6P191CA0095.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8a::36)
 by AM6PR08MB4055.eurprd08.prod.outlook.com (2603:10a6:20b:a7::17) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.21; Tue, 6 Jul
 2021 08:02:30 +0000
Received: from VE1EUR03FT029.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:8a:cafe::e8) by AM6P191CA0095.outlook.office365.com
 (2603:10a6:209:8a::36) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Tue, 6 Jul 2021 08:02:29 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT029.mail.protection.outlook.com (10.152.18.107) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 08:02:29 +0000
Received: ("Tessian outbound f29a5a293366:v97");
 Tue, 06 Jul 2021 08:02:28 +0000
Received: from 3455239b2192.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 334597A6-542B-4D1F-B026-94FC12A65D1A.1; 
 Tue, 06 Jul 2021 08:02:20 +0000
Received: from FRA01-PR2-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 3455239b2192.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 08:02:20 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PR2PR08MB4699.eurprd08.prod.outlook.com (2603:10a6:101:1d::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 08:02:11 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Tue, 6 Jul 2021
 08:02:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8400b060-de30-11eb-847b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=a4IPHvn9kjIt6F7L5Y8SBUlRlI4UF9iILmKnab6OO+4=;
 b=napqe8c1+6WCGChDYU3j03YA9xlhS0NGmmvBTX6WcmBrQ+RWRWQBUmMUgldRARGR1U8AUTtyoKjwLqZ5MdY+CKjy4SegD4o4hEfc8nFAWRU8fUX0JCd3S7iTKaTA/cVbGIFd+KmAsxtzNPFLhuB2DwLGfkz1CkA/DOhp2dk9ieU=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: dec84ba91a61399b
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TmH8YevJYbLHKMmAeCQwRs+HaFD+DaUUAWqeoqTaU36fB32zPqjxEHYo2rxH2H+NXCYHahBkV7LTfJCTznx19eYqab7Jue3pfabK+T0rO0oU17qErU7CjhoWZSkIffPXRU+u5iEdLi07YIUQS5saf6bGED5sBuoItu9eVDzaLjgCFwhKN86FyKunWnUPfxL0IfU3MFyq6N0u0dqYaZQN/tNiiWELO3wNOsUsxf+7ip3hKKvnaP3YRktcyamnNIX5N27lO+wZhXpf39bg13BUIUWPSdg9aYIZlUTozcctVPlI9ZrzrlG15ONuP59/Oc57h4+l16lujwLbVwc3hyPygw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=a4IPHvn9kjIt6F7L5Y8SBUlRlI4UF9iILmKnab6OO+4=;
 b=X82a410yCcq4/Sj5LSu9WArrkpGxNAbtgviRcTszfXCR5pXw4GrSoq+arNrwBiGnRx/GDW3nowlpO8KWXx9DWTTZPL6GZUZiwFrvRNPTPMvWxSA5ofIcEsQgIYhIkrLoI4+WxWVZPqSxQ22P6leT9mzdy1PyByAVGnNvhHbeIovm2zmioMrZkLgQNtazYDfzQXJGK4+atfml4wAzSiI+rvbDut4Zj/6uOlLPzJXPAylw5yo1cwRcx6cvgLacip5CXBVXvhiRAWgnL0tBGQLHx60IxyqwYujwj+z6FGjHQ7O6J9Eo+f0HznUpkUAbMSY2YtNGJBAbS0UwIAoajqjzOA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=a4IPHvn9kjIt6F7L5Y8SBUlRlI4UF9iILmKnab6OO+4=;
 b=napqe8c1+6WCGChDYU3j03YA9xlhS0NGmmvBTX6WcmBrQ+RWRWQBUmMUgldRARGR1U8AUTtyoKjwLqZ5MdY+CKjy4SegD4o4hEfc8nFAWRU8fUX0JCd3S7iTKaTA/cVbGIFd+KmAsxtzNPFLhuB2DwLGfkz1CkA/DOhp2dk9ieU=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Oleksandr Tyshchenko <olekstysh@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>
CC: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH V2] xen/arm: bootfdt: Always sort memory banks
Thread-Topic: [PATCH V2] xen/arm: bootfdt: Always sort memory banks
Thread-Index: AQHXccYljzQk/sGJZEe7fPnXVyiC4as1lduA
Date: Tue, 6 Jul 2021 08:02:11 +0000
Message-ID: <0EDEB6A6-227D-4F89-A3BC-1FD73D458C68@arm.com>
References: <1625507331-17934-1-git-send-email-olekstysh@gmail.com>
In-Reply-To: <1625507331-17934-1-git-send-email-olekstysh@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [81.2.158.121]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 25a391ab-faf5-4f36-971b-08d9405466cb
x-ms-traffictypediagnostic: PR2PR08MB4699:|AM6PR08MB4055:
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB40550126E293137D56939E6F9D1B9@AM6PR08MB4055.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 VBn9T2Z7eBRrIum9vzCz4FlMi4z0Zk92VTxIHZXJDJB9sWqRyywyR3vtr5kPPjDknp56enjj3sEDyUeFNRd5FCTktFeffnnns3yjq8IVaJ/DnDO2x6Iq5c56Bh1Bro2OWjFCqHLrvTvQjpaWym/PI3lNLDoxFVAOtmIfzL777bTi99ARk/ScpxcKN/691wuAa6Q69aGCCHsb0hsg+aBQZ2KlLyb0wDEqRza3sXIbhLZXBnVjGfDUkSyY4TPr2N8CpCXi2zpzAkRbR8xjxMUXEl+FGw82XbZocJI+FAzIgVGBmQGsSpZRrCP5v7yAjMsYdaZWznn+gRy9nuMI97dmnsI+WZKmuGNxXKFwE5pqQsbiRTvjH7BLXT9rGYUziUtW3f3/PPq0pF5H/Re04lJpjcuJ+Va7f/kuYSkYn75+D1eohJskuhKUkI7Ww9qDjPLLfVBhsvQnIcdq/RCUhj6IhRYFv2Eh7uf3jdRx6G9yqwkFwrKlsda7yOGG9W8QcRplBahoRpCho94ujoCVh6S4NLAy6E1sgpYSK0QH0tNkd8N5qU0VzihRefjci2b87A4u/IY3ui8HIZMUwRa/LFlZe08xOz86Yw5BuYtBSUjZBaq0qKUWiLv/9zU5HiIcllAyHEXxvfvcn9/LTVxYJeWfCl/O0Ny7K966tVPpDx8BKqYVWmngcNpggAJwg7o+qrU0yJl+ycOaROau0T+hD3XuJQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(396003)(366004)(136003)(346002)(39860400002)(110136005)(76116006)(83380400001)(54906003)(66446008)(66556008)(71200400001)(66476007)(5660300002)(4326008)(2616005)(478600001)(2906002)(91956017)(316002)(36756003)(66946007)(53546011)(6506007)(64756008)(26005)(38100700002)(122000001)(33656002)(6512007)(15650500001)(186003)(6486002)(8676002)(86362001)(8936002)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?ZDrlA4Syedz9q+SdEEqFW7SRUNDStXSM/Ai2FeIQ1dcQoVRYerD1sNhk5CcW?=
 =?us-ascii?Q?PVoP1N70OJDF9bOkcA81gmX/wbVfINRtnQowfqq8ZHKbvTcGp1B6BFSFvFL1?=
 =?us-ascii?Q?gYpzG908zufFL1dmYwt1pAYuvAcvAY4BNZD+R1sQKpGYB0l9xaa3L/Wq36Hi?=
 =?us-ascii?Q?KefYFZf3Yk4H9ZrIp2HDbwXwwY4PFszJTm1Fzpj2A1EL/X7He1KiTSKq+4Ha?=
 =?us-ascii?Q?SgtiEm0KN5Bg2C6CG8Y5KOw45tOweA0Yk9c+XRAN4vVN6sei5qG94G7too7y?=
 =?us-ascii?Q?wuPBQhR24R3iR3WQbISDW7X2McRznnDSYAcZlLv8yLwUjwbANY01OCvD2ImP?=
 =?us-ascii?Q?fdO9FibUcN/cKqqU+szP37QoAl2gAmcTrZttadNQrOYLRxmxy0sVoYz+pdXX?=
 =?us-ascii?Q?w9RcxjNUNYpzH6iauNjQzF4tFERHHWsGlVqLypNxVTV/YKEI4hrceVLwxnWx?=
 =?us-ascii?Q?PqXGdzgyPfYd8r+PeaVdoAKRcOGaCk6R72oHobDlqT+++53gEzFg5F2LFpGt?=
 =?us-ascii?Q?MhUjLOeV3nlmQyBwZ1Rheb5BKcgS931Ev+0TVppOAAKItJIbz1QRsVSYkWeD?=
 =?us-ascii?Q?jB8HJkHh/+6nQcx7CNGdmSl0LrFeVP3qtQFPSm9VCh+omcuCUGpKlDH4gPbw?=
 =?us-ascii?Q?0SQmJUQYKUR3ltP4ZfMXnLUQr7s8smi0AfILyBQB/Y3pc66CDmuYkSZ+V/I6?=
 =?us-ascii?Q?8BzHgZ43puiDFN+ytV9TgCocv7O8bCl0rF8zLlvCyWBJ6uz0SVlTJs83vjmX?=
 =?us-ascii?Q?EPZA+Rigiwrc1YQhJQFYtpbjMuW+JDPSPR9JbSOgeZ2/+JWbr12G6LleZnnK?=
 =?us-ascii?Q?VhbMteYMKfqaHAhOr0hpkhL9RYcbqisWOQNoAKQ+NKghij4vhq9VdEu5OmBW?=
 =?us-ascii?Q?KzP+oCO4xx9YI9dpgmAroYc7mSoVfo7lPSDJAGvZRdpeMJ/Eq6k/xiCF3aXr?=
 =?us-ascii?Q?ms0ruTKCa9jeOIgs9CeOf2PeLvL24VCe4ESGIMIXwoXKCBLfDGu1ZJxd9PeY?=
 =?us-ascii?Q?FIskKxzdRchPzF7U7eLJ0sg6sv2xDgL93IhlQvPMfLnifaVvLojKsl58EKFx?=
 =?us-ascii?Q?fz/UG0217OJX/1aTmStFlukSY3tDbgURSPIWCB4kh1E7HCq0+uLv9op1e2Xc?=
 =?us-ascii?Q?xe2aFmoQSjekwEjAK7rDU4I9anpJWxOtNVtE3sGVohCQSZgbf3ZCHU1HRzLw?=
 =?us-ascii?Q?jh7BtA8he/yA/Zngmdr/OHmYjtfxSpqUIHTxqpzq9RI3vCq2KyKFQCsjHkZK?=
 =?us-ascii?Q?zzcMPzvMPfXqpTltw8kTkjq0cg/nxDDLOyNbGrAFO6wvreWlqZhjSHnpyxGc?=
 =?us-ascii?Q?9tQR3YeLcyUNyvtRFCbMW9NF?=
x-ms-exchange-transport-forked: True
Content-Type: multipart/alternative;
	boundary="_000_0EDEB6A6227D4F89A3BC1FD73D458C68armcom_"
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR2PR08MB4699
Original-Authentication-Results: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT029.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	fb5da4e4-c5ba-49bd-fd62-08d940545c35
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	TbMj2W1c9WTTOQdyQtSH0Wy8+PNrz8FALKzKs7xbDKQ0Djb31fKAqbLQlnbgTiqsJsE7GuSg7h7GaYL46UeCn+mTQDjgv9XlBivpz8Dc/9qfzyHze5FyRdKICFceyPCgc4HP8GxFzAzXev/T8WK7CeTlM3tat+1/zOmpmfmFzDJErQeGM/t4g+TzDlSicqXtNK3KzxHarxTEZg6rOKyA2odxuK87g5e09DCZhPJGef3OzA0KMRneirOi3LvFH7JU8wOkzBUi8Tj/Lxw9dWEe8hA3uDAwIQj2RKoFLpOMCNrp8cQixiuCoJhHsJHxG+jfEv9g60xk5Fm/fJ9zcwKG/udlJkG8hsEBhdPaeY1Ou6sK3pRSqNeV7UEoF0BtaxeAzEPcmk5D42PcPtXBxBct6VgQ+2n4dPI/5CD+usd2evheByIPxx0rGtJnFaQ6qOsiZz5Uif0uDSO62QTzZiKDdfXh8j8/r+QUiIrKtHX9ZSk7QVw6yn3m4OcJ7bAVgVyJjhw0emzL0lLoNoQdL79kaIF+BMncfsXBk+9H5M9HOCTODfjuGfKRScsyCS/5rDvzwM1AjRYPpFDNnGyAYICOFgbXNta3KuN8cGssHJ3uPay9a7OAT/CtnyHO+MkBtFV4yKtY9LDVdDLETwmotwL1mIwlBFsM+9b+TXiPYjXPN8o7MD8DKa8z78v46KZWahbUi1WfHzWGfmrKreJm5H0jVg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(376002)(39860400002)(396003)(46966006)(36840700001)(110136005)(53546011)(54906003)(356005)(70206006)(8936002)(316002)(81166007)(8676002)(70586007)(5660300002)(6506007)(2906002)(83380400001)(36756003)(33656002)(2616005)(107886003)(6512007)(86362001)(478600001)(6486002)(36860700001)(186003)(47076005)(45080400002)(26005)(336012)(15650500001)(82740400003)(4326008)(82310400003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 08:02:29.2526
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 25a391ab-faf5-4f36-971b-08d9405466cb
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT029.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4055

--_000_0EDEB6A6227D4F89A3BC1FD73D458C68armcom_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Oleksandr,

On 5 Jul 2021, at 18:48, Oleksandr Tyshchenko <olekstysh@gmail.com<mailto:o=
lekstysh@gmail.com>> wrote:

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com<mailto:oleksandr_=
tyshchenko@epam.com>>

At the moment, Xen on Arm64 expects the memory banks to be ordered.
Unfortunately, there may be a case when updated by firmware
device tree contains unordered banks. This means Xen will panic
when setting xenheap mappings for the subsequent bank with start
address being less than xenheap_mfn_start (start address of
the first bank).

As there is no clear requirement regarding ordering in the device
tree, update code to be able to deal with by sorting memory
banks. There is only one heap region on Arm32, so the sorting
is fine to be done in the common code.

Suggested-by: Julien Grall <jgrall@amazon.com<mailto:jgrall@amazon.com>>
Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com<mailto:o=
leksandr_tyshchenko@epam.com>>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org<mailto:sstabellini@=
kernel.org>>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com<mailto:bertrand.mar=
quis@arm.com>>

Cheers
Bertrand


---
  V2:
  - add Stefano's R-b
  - clarify patch description
  - clarify comment in code
  - drop "if (bootinfo.mem.nr_banks > 1)" check
---
xen/arch/arm/bootfdt.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index dcff512..476e32e 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -13,6 +13,7 @@
#include <xen/init.h>
#include <xen/device_tree.h>
#include <xen/libfdt/libfdt.h>
+#include <xen/sort.h>
#include <xsm/xsm.h>
#include <asm/setup.h>

@@ -395,6 +396,21 @@ static void __init early_print_info(void)
    printk("\n");
}

+/* This function assumes that memory regions are not overlapped */
+static int __init cmp_memory_node(const void *key, const void *elem)
+{
+    const struct membank *handler0 =3D key;
+    const struct membank *handler1 =3D elem;
+
+    if ( handler0->start < handler1->start )
+        return -1;
+
+    if ( handler0->start >=3D (handler1->start + handler1->size) )
+        return 1;
+
+    return 0;
+}
+
/**
 * boot_fdt_info - initialize bootinfo from a DTB
 * @fdt: flattened device tree binary
@@ -412,6 +428,15 @@ size_t __init boot_fdt_info(const void *fdt, paddr_t p=
addr)
    add_boot_module(BOOTMOD_FDT, paddr, fdt_totalsize(fdt), false);

    device_tree_for_each_node((void *)fdt, 0, early_scan_node, NULL);
+
+    /*
+     * On Arm64 setup_xenheap_mappings() expects to be called with the low=
est
+     * bank in memory first. There is no requirement that the DT will prov=
ide
+     * the banks sorted in ascending order. So sort them through.
+     */
+    sort(bootinfo.mem.bank, bootinfo.mem.nr_banks, sizeof(struct membank),
+         cmp_memory_node, NULL);
+
    early_print_info();

    return fdt_totalsize(fdt);
--
2.7.4




--_000_0EDEB6A6227D4F89A3BC1FD73D458C68armcom_
Content-Type: text/html; charset="us-ascii"
Content-ID: <441C6383024E4F4E9D6B624DCF89D193@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; line-break:=
 after-white-space;" class=3D"">
Hi Oleksandr,<br class=3D"">
<div><br class=3D"">
<blockquote type=3D"cite" class=3D"">
<div class=3D"">On 5 Jul 2021, at 18:48, Oleksandr Tyshchenko &lt;<a href=
=3D"mailto:olekstysh@gmail.com" class=3D"">olekstysh@gmail.com</a>&gt; wrot=
e:</div>
<br class=3D"Apple-interchange-newline">
<div class=3D"">
<div class=3D"">From: Oleksandr Tyshchenko &lt;<a href=3D"mailto:oleksandr_=
tyshchenko@epam.com" class=3D"">oleksandr_tyshchenko@epam.com</a>&gt;<br cl=
ass=3D"">
<br class=3D"">
At the moment, Xen on Arm64 expects the memory banks to be ordered.<br clas=
s=3D"">
Unfortunately, there may be a case when updated by firmware<br class=3D"">
device tree contains unordered banks. This means Xen will panic<br class=3D=
"">
when setting xenheap mappings for the subsequent bank with start<br class=
=3D"">
address being less than xenheap_mfn_start (start address of<br class=3D"">
the first bank).<br class=3D"">
<br class=3D"">
As there is no clear requirement regarding ordering in the device<br class=
=3D"">
tree, update code to be able to deal with by sorting memory<br class=3D"">
banks. There is only one heap region on Arm32, so the sorting<br class=3D""=
>
is fine to be done in the common code.<br class=3D"">
<br class=3D"">
Suggested-by: Julien Grall &lt;<a href=3D"mailto:jgrall@amazon.com" class=
=3D"">jgrall@amazon.com</a>&gt;<br class=3D"">
Signed-off-by: Oleksandr Tyshchenko &lt;<a href=3D"mailto:oleksandr_tyshche=
nko@epam.com" class=3D"">oleksandr_tyshchenko@epam.com</a>&gt;<br class=3D"=
">
Reviewed-by: Stefano Stabellini &lt;<a href=3D"mailto:sstabellini@kernel.or=
g" class=3D"">sstabellini@kernel.org</a>&gt;<br class=3D"">
</div>
</div>
</blockquote>
<div>Reviewed-by: Bertrand Marquis &lt;<a href=3D"mailto:bertrand.marquis@a=
rm.com" class=3D"">bertrand.marquis@arm.com</a>&gt;</div>
<div><br class=3D"">
</div>
<div>Cheers</div>
<div>Bertrand</div>
<br class=3D"">
<blockquote type=3D"cite" class=3D"">
<div class=3D"">
<div class=3D""><br class=3D"">
---<br class=3D"">
&nbsp;&nbsp;V2:<br class=3D"">
&nbsp;&nbsp;- add Stefano's R-b<br class=3D"">
&nbsp;&nbsp;- clarify patch description<br class=3D"">
&nbsp;&nbsp;- clarify comment in code<br class=3D"">
&nbsp;&nbsp;- drop &quot;if (bootinfo.mem.nr_banks &gt; 1)&quot; check<br c=
lass=3D"">
---<br class=3D"">
xen/arch/arm/bootfdt.c | 25 +++++++++++++++++++++++++<br class=3D"">
1 file changed, 25 insertions(+)<br class=3D"">
<br class=3D"">
diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c<br class=3D"">
index dcff512..476e32e 100644<br class=3D"">
--- a/xen/arch/arm/bootfdt.c<br class=3D"">
+++ b/xen/arch/arm/bootfdt.c<br class=3D"">
@@ -13,6 +13,7 @@<br class=3D"">
#include &lt;xen/init.h&gt;<br class=3D"">
#include &lt;xen/device_tree.h&gt;<br class=3D"">
#include &lt;xen/libfdt/libfdt.h&gt;<br class=3D"">
+#include &lt;xen/sort.h&gt;<br class=3D"">
#include &lt;xsm/xsm.h&gt;<br class=3D"">
#include &lt;asm/setup.h&gt;<br class=3D"">
<br class=3D"">
@@ -395,6 +396,21 @@ static void __init early_print_info(void)<br class=3D"=
">
&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;\n&quot;);<br class=3D"">
}<br class=3D"">
<br class=3D"">
+/* This function assumes that memory regions are not overlapped */<br clas=
s=3D"">
+static int __init cmp_memory_node(const void *key, const void *elem)<br cl=
ass=3D"">
+{<br class=3D"">
+ &nbsp;&nbsp;&nbsp;const struct membank *handler0 =3D key;<br class=3D"">
+ &nbsp;&nbsp;&nbsp;const struct membank *handler1 =3D elem;<br class=3D"">
+<br class=3D"">
+ &nbsp;&nbsp;&nbsp;if ( handler0-&gt;start &lt; handler1-&gt;start )<br cl=
ass=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br class=3D"">
+<br class=3D"">
+ &nbsp;&nbsp;&nbsp;if ( handler0-&gt;start &gt;=3D (handler1-&gt;start + h=
andler1-&gt;size) )<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br class=3D"">
+<br class=3D"">
+ &nbsp;&nbsp;&nbsp;return 0;<br class=3D"">
+}<br class=3D"">
+<br class=3D"">
/**<br class=3D"">
&nbsp;* boot_fdt_info - initialize bootinfo from a DTB<br class=3D"">
&nbsp;* @fdt: flattened device tree binary<br class=3D"">
@@ -412,6 +428,15 @@ size_t __init boot_fdt_info(const void *fdt, paddr_t p=
addr)<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;add_boot_module(BOOTMOD_FDT, paddr, fdt_totalsize(f=
dt), false);<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;device_tree_for_each_node((void *)fdt, 0, early_sca=
n_node, NULL);<br class=3D"">
+<br class=3D"">
+ &nbsp;&nbsp;&nbsp;/*<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;* On Arm64 setup_xenheap_mappings() expects to be=
 called with the lowest<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;* bank in memory first. There is no requirement t=
hat the DT will provide<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;* the banks sorted in ascending order. So sort th=
em through.<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;*/<br class=3D"">
+ &nbsp;&nbsp;&nbsp;sort(bootinfo.mem.bank, bootinfo.mem.nr_banks, sizeof(s=
truct membank),<br class=3D"">
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp_memory_node, NULL);<b=
r class=3D"">
+<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;early_print_info();<br class=3D"">
<br class=3D"">
&nbsp;&nbsp;&nbsp;&nbsp;return fdt_totalsize(fdt);<br class=3D"">
-- <br class=3D"">
2.7.4<br class=3D"">
<br class=3D"">
<br class=3D"">
</div>
</div>
</blockquote>
</div>
<br class=3D"">
</body>
</html>

--_000_0EDEB6A6227D4F89A3BC1FD73D458C68armcom_--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:36:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:36:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150871.278901 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gYc-0002FC-28; Tue, 06 Jul 2021 08:35:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150871.278901; Tue, 06 Jul 2021 08:35:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gYb-0002F5-V2; Tue, 06 Jul 2021 08:35:53 +0000
Received: by outflank-mailman (input) for mailman id 150871;
 Tue, 06 Jul 2021 08:35:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hbbY=L6=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m0gYa-0002Ev-MV
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:35:52 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 65932b67-2fbf-47ba-8adf-f4e5af57921f;
 Tue, 06 Jul 2021 08:35:51 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C6D2B31B;
 Tue,  6 Jul 2021 01:35:50 -0700 (PDT)
Received: from [10.57.8.167] (unknown [10.57.8.167])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D6F583F5A1;
 Tue,  6 Jul 2021 01:35:49 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 65932b67-2fbf-47ba-8adf-f4e5af57921f
Subject: Re: [XEN PATCH v3] libxl/arm: provide guests with random seed
To: Sergiy Kibrik <Sergiy_Kibrik@epam.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <ian.jackson@eu.citrix.com>, Wei Liu <wl@xen.org>,
 Julien Grall <julien@xen.org>
References: <20210706063345.91169-1-Sergiy_Kibrik@epam.com>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <fe305fd6-afba-5d22-8f3a-08bd3632db25@arm.com>
Date: Tue, 6 Jul 2021 10:35:44 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210706063345.91169-1-Sergiy_Kibrik@epam.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit



On 06.07.2021 08:33, Sergiy Kibrik wrote:
> Pass 128 bytes of random seed via FDT, so that guests' CRNGs are better seeded
> early at boot. This is larger than ChaCha20 key size of 32, so each byte of
> CRNG state will be mixed 4 times using this seed. There does not seem to be
> advantage in larger seed though.
> 
> Depending on its configuration Linux can use the seed as device randomness
> or to just quickly initialize CRNG.
> In either case this will provide extra randomness to further harden CRNG.
> 
> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
> Reviewed-by: Julien Grall <julien@xen.org>
Reviewed-by: Michal Orzel <michal.orzel@arm.com>
> 
> ---
> 	Changes in V3:
> 		- Rebased on current master
> 
> ---



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:39:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:39:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150877.278912 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gbz-000319-Hd; Tue, 06 Jul 2021 08:39:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150877.278912; Tue, 06 Jul 2021 08:39:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gbz-000312-E3; Tue, 06 Jul 2021 08:39:23 +0000
Received: by outflank-mailman (input) for mailman id 150877;
 Tue, 06 Jul 2021 08:39:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=c2YU=L6=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1m0gbx-00030n-Ce
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:39:21 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.0.43]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5caaf0dd-3e9e-4a93-bbcb-1f232d64fe2b;
 Tue, 06 Jul 2021 08:39:18 +0000 (UTC)
Received: from AS8PR04CA0034.eurprd04.prod.outlook.com (2603:10a6:20b:312::9)
 by PAXPR08MB6814.eurprd08.prod.outlook.com (2603:10a6:102:137::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Tue, 6 Jul
 2021 08:39:15 +0000
Received: from VE1EUR03FT043.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:312:cafe::a) by AS8PR04CA0034.outlook.office365.com
 (2603:10a6:20b:312::9) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Tue, 6 Jul 2021 08:39:15 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT043.mail.protection.outlook.com (10.152.19.122) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 08:39:15 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Tue, 06 Jul 2021 08:39:14 +0000
Received: from 0a9efa466d37.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 0D60F816-EAF9-4DEB-966F-5F88B68FE022.1; 
 Tue, 06 Jul 2021 08:38:55 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0a9efa466d37.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 08:38:55 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PA4PR08MB6303.eurprd08.prod.outlook.com (2603:10a6:102:e5::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Tue, 6 Jul
 2021 08:38:53 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5%3]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 08:38:52 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LNXP265CA0033.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5c::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 08:38:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5caaf0dd-3e9e-4a93-bbcb-1f232d64fe2b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=88e5uJnjocZiQ6y05001YrnecmL77XSZOL2kC/SajeQ=;
 b=z7gW6c6o0LQp0czI4l8AMzxA6OYqXn4gy3KQeLc3PzePQkWw/kSIapA8jQIy8Hei1310JFHQHQWOt2NesJDbq0EysqnCmxkZUX6kKcqh/I3pbneC7KCs/fV5lQ5wQfQ7y2VC4+rnp7c98GxUb3E6QrLQXAKAeESaNdmKcKeYdzQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 72b4b8ce17b6003c
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Pim82woxXXklO7SHjnPVDmcK0XLqU0PD2xY510IzNLWONBw71lzjZwxDR+ZpHhsQDP+2uxRA8QM9hmp28gb6KrgrzGKKN5k+3zyKksY13QX/E2I0aT6PybbnPBu4uw6fTVrRrCaTV4C7Mnr+3LJDKx7ur7GKFnTnTgZIESHnJHllz+19z5F7IkbfMakzxPHMtIOKwGH7628W+F8QIbQKMckr3iu8OUCUAxJr77VS2RT6jAl3MgZHEJsD3MJ0EYkBi1uqnUE78xozOkD+91MHhqoOLv9o93nfVpJWnTnZwvuCMuFBjrWBWRdIFNOsOTPWk4YbFgfMt656+Qg7gJXM4w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=88e5uJnjocZiQ6y05001YrnecmL77XSZOL2kC/SajeQ=;
 b=aIqsbphX0oxzvJKJ4fGSYGCv19eumOLQUlrhpGC7z6n/Ue7FvWsxha2pV5+9zn9X+3AqdQH1NITsyzW8Wak/ky3VIGlL9x3AI/1Cwveb5Nv0ZWWrPDb4Z8o7AT1vSZkKXtpDkfAfs2MqPQFFyVhvzucKNN4RtSIRPU6G2ukfVnY86DLtHrXaibs6caEbyDxOPMTIWYsLT/yYga02aK1XOx5ZqWWoXwvzsWCgKByqE7wRe/MR2a2DgIZsR68Gmf1mOQIkBHNVAjz4PNijQ8c84gLw4awiOmN6CCznFY5sZ7ADc8h7WmWz6ksddLqkoRk/P5lp3q3YUe2ysaLKeyeXpg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=88e5uJnjocZiQ6y05001YrnecmL77XSZOL2kC/SajeQ=;
 b=z7gW6c6o0LQp0czI4l8AMzxA6OYqXn4gy3KQeLc3PzePQkWw/kSIapA8jQIy8Hei1310JFHQHQWOt2NesJDbq0EysqnCmxkZUX6kKcqh/I3pbneC7KCs/fV5lQ5wQfQ7y2VC4+rnp7c98GxUb3E6QrLQXAKAeESaNdmKcKeYdzQ=
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <90673e86-cbf3-8a21-4251-e77f22327485@suse.com>
Date: Tue, 6 Jul 2021 09:38:46 +0100
Cc: Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <63B52FB3-A436-4B19-9E26-052626E8BDAE@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
 <f1f026fb-33e4-4d18-5718-ae9f9f42327d@suse.com>
 <54ADD75F-83DC-4891-914D-B85FBA69B440@arm.com>
 <90673e86-cbf3-8a21-4251-e77f22327485@suse.com>
To: Jan Beulich <jbeulich@suse.com>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LNXP265CA0033.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:5c::21) To PAXPR08MB6816.eurprd08.prod.outlook.com
 (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ce0c4d87-1d10-4251-5e6b-08d940598972
X-MS-TrafficTypeDiagnostic: PA4PR08MB6303:|PAXPR08MB6814:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<PAXPR08MB6814C59BCB9737F692584865E41B9@PAXPR08MB6814.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 /ezGm+ddS/RgxCw373/vY9wd39FywYk3ip9u8TCzwlfo8JQv0WhiPYR7DP1ui/fwGlU1nCfBGgTdJ/LuaIj7LrFh6+x8aKqIJawozkWH+O2r5bAyQoa6QkLpV624uwLmAqrCGPlcSHB7g1btPquonKwsv9LzEG7IWGHFmAo0iqCs/mug1gZJ7rix+jZ778XUiSSiYZOnLHwn1rJ8mhwwWkmmvxKdIcjmEw+XLKBGa10r+CMZjVfoOU4E8aJTRFMlwYkiw0Iw96lQGpgxj6JS0HXHFCwLN/I+RqJxKgO0bDoCFT44MxJb8cJ6fpWhxFDjI9cy04rmpi87nCkeztwUkxQNMRCkRPOX68v8MEJCV+7PeprzlfbaoMfgqgOuECEMTgJSVdXvPBZ1y+SP8m8T1lSpZu8lS9f6fK+pRYKW+QmLu20v/7RlEQGLNk03iwl8U2GOMf9t9yzWlZW2f/50yWWWfXwTvLvxOQI4GWSfoPrMoQAUkg40K7eTh4DOaCA1OoKcmOLRTEHWeTcyAgWAdaYFT/BeiTO2FdryVQ37q50o2IE4saFWGlIKEuZdwycWwaCdwX4n6ogPhL7LyVepOvw0ORcFCz12qg7/HlR+Yv66J+97rpVwQdx/euqjGzBU+/s+cRLLOIPhsOjv1BhcIMiYdTW47DSo5NjRjJjIVzBDjhcdY00MzfQeRim2KSub3HGlm8xlKVGKw4givueX/n7+ESV8HCCqxmXVwMhEKPkjIOpdsiPIj1tSG+Kue18m69J/wo+UVyzszApP7xOk/fqXLi0aJZpnvEU398uqynNG15JYygoYq/cP15NxR5mo
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39830400003)(396003)(346002)(136003)(366004)(376002)(54906003)(44832011)(2906002)(86362001)(186003)(6512007)(83380400001)(316002)(38350700002)(6486002)(38100700002)(36756003)(478600001)(16526019)(8936002)(4326008)(956004)(6916009)(66556008)(66476007)(6666004)(2616005)(26005)(8676002)(5660300002)(966005)(33656002)(52116002)(66946007)(53546011)(6506007)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6303
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT043.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	8b567bfa-1b89-434a-460a-08d940597c09
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	rYUjFb+FPoFBRA0VhLm3p8RgB3TEs2CRBJqebxSfvsfy0aC0QeoT1OEWMtyG5Nr3sc/Xi7R2Xh/Pa3hz+BdOwaMmvO5+fdGBovPgositUhDznK3vW+MtOp7BgI6RPr8uDBFTkgojT0j+Qrwm7yJNmytAZi9aFVNqxXUtfVjlpds6zcOBlbjpiywEFbVdZRpw/ulHxMabL6I5M3phSIHO32z4j87TAisl82E89h3N4Yy5q2MTLve1uT8Q7MEIsUdUPYqR8dxe4903cou9YyA5CiuZbBE2SpajNh+xo65MxhHKKD3OmQxEb1unoKItTlt5YYq8JR4tHzrs0qQvKoO/9jBHHbdeWbQTCXHt7KMyL/dOdfkrMqzKLzkFbMKqRRdFfSkG/c9oZXQThz7RPARsMNIxS9/8Ag3ZMsPbzvT6xpY28G9r9SdjSQuUkPErzunNERgbd7rYtHJq+T4081EL0m9rowIC+d0MJBUy3E7d2CzDTBX+ACz488Ar/2SbrddXuZnVbLNhuTp07VRyQZ8flCNSrowDV1VY8gN9wskPh2n9xaxqCROJi4jLLk2mthFlcqVKSWqhnz10C779UqdCa8h8WH7J6OurULSo9Zx6mfLSKO2frwZvK+DcBUUjTs+G63YPR6aBBD5KyDrzWH2ZndmbWtC6ppiRS1JcgQ4ojT/HQdm8vGZ0r2wLoznKy2Z7Vy6FJWM1AGCMXAhbQvNpH8Dd8JkpgswhC8DWlG9Min+EBUSFjfW/bMfS2fhMIj4j04hPP5X4wPHUCObL05WIk4iq9K44ucyAideKh9U3wTI=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(346002)(39840400004)(376002)(396003)(36840700001)(46966006)(5660300002)(316002)(956004)(54906003)(2616005)(336012)(186003)(36860700001)(81166007)(356005)(26005)(86362001)(6666004)(6512007)(70206006)(36756003)(2906002)(83380400001)(966005)(44832011)(82310400003)(53546011)(8676002)(47076005)(6486002)(8936002)(4326008)(478600001)(6506007)(33656002)(70586007)(6862004)(16526019);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 08:39:15.0267
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ce0c4d87-1d10-4251-5e6b-08d940598972
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT043.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6814



> On 5 Jul 2021, at 14:27, Jan Beulich <jbeulich@suse.com> wrote:
>=20
> On 05.07.2021 15:23, Luca Fancellu wrote:
>> Hi Jan,
>>=20
>>> On 5 Jul 2021, at 14:03, Jan Beulich <jbeulich@suse.com> wrote:
>>>=20
>>> On 05.07.2021 12:51, Luca Fancellu wrote:
>>>> Modification to include/public/grant_table.h:
>>>>=20
>>>> 1) Add doxygen tags to:
>>>> - Create Grant tables section
>>>> - include variables in the generated documentation
>>>> - Used @keepindent/@endkeepindent to enclose comment
>>>>  section that are indented using spaces, to keep
>>>>  the indentation.
>>>> 2) Add .rst file for grant table
>>>>=20
>>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>>>> ---
>>>> v7 changes:
>>>> - commit message changed
>>>> - Add comment about grant table queries and uses
>>>> to the documentation
>>>> v6 changes:
>>>> - Fix misaligned comment
>>>> - Moved comments to make them display in the docs
>>>> - Included more documentation in the docs
>>>> v5 changes:
>>>> - Move GNTCOPY_* define next to the flags field
>>>> v4 changes:
>>>> - Used @keepindent/@endkeepindent doxygen commands
>>>> to keep text with spaces indentation.
>>>> - drop changes to grant_entry_v1 comment, it will
>>>> be changed and included in the docs in a future patch
>>>> - Move docs .rst to "common" folder
>>>> v3 changes:
>>>> - removed tags to skip anonymous union/struct
>>>> - moved back comment pointed out by Jan
>>>> - moved down defines related to struct gnttab_copy
>>>> as pointed out by Jan
>>>> v2 changes:
>>>> - Revert back to anonymous union/struct
>>>> - add doxygen tags to skip anonymous union/struct
>>>> ---
>>>> docs/hypercall-interfaces/arm64.rst           |   1 +
>>>> .../common/grant_tables.rst                   |   9 +
>>>=20
>>> In patch 8 you now add arm32.rst and x86.rst as well, so it's at
>>> least odd that here you alter only one of the three. However, ...
>>>=20
>>>> --- a/docs/hypercall-interfaces/arm64.rst
>>>> +++ b/docs/hypercall-interfaces/arm64.rst
>>>> @@ -8,6 +8,7 @@ Starting points
>>>> .. toctree::
>>>>   :maxdepth: 2
>>>>=20
>>>> +   common/grant_tables
>>>=20
>>> ... to me this seems the wrong way round anyway: I'd rather see
>>> common stuff not be linked from per-arch locations, but per-arch
>>> docs to be down the hierarchy from common ones.
>>=20
>> The things is that common stuff is not really common, if you go and solv=
e every
>> define and so on, you end up with a different content for x86, aarch64, =
arm.
>>=20
>> So you can=E2=80=99t have a common.rst containing the common things beca=
use depending on each
>> platform the content will change.
>=20

Hi Jan,

> Wait - the documentation should be uniform for all architectures.
> If there are architecture specific aspects, then these should imo
> still be mentioned in the common section of the doc, just pointing
> out what those specifics are for which architectures. Architecture
> specific doc pieces ought to cover architecture specific hypercalls
> or sub-functions of common ones.
>=20

Yes that could be a point, to be honest this patch was mainly used to colle=
ct as many feedbacks as possible
and it worked, maybe we can talk about that in the Xen call to see if we ag=
ree on a documentation structure.

For now this work was aimed to reproduce the actual documentation:

https://xenbits.xenproject.org/docs/unstable/hypercall/index.html

Cheers,

Luca

> Jan
>=20



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:45:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:45:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150884.278923 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ghu-0004aQ-CL; Tue, 06 Jul 2021 08:45:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150884.278923; Tue, 06 Jul 2021 08:45:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ghu-0004aJ-96; Tue, 06 Jul 2021 08:45:30 +0000
Received: by outflank-mailman (input) for mailman id 150884;
 Tue, 06 Jul 2021 08:45:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=c2YU=L6=arm.com=Luca.Fancellu@srs-us1.protection.inumbo.net>)
 id 1m0ght-0004aD-6V
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:45:29 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.21.56]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 865a0bbb-3155-4511-8ee9-037fa826731d;
 Tue, 06 Jul 2021 08:45:26 +0000 (UTC)
Received: from AM6PR10CA0021.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:89::34)
 by DB7PR08MB3881.eurprd08.prod.outlook.com (2603:10a6:10:77::20) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 08:45:24 +0000
Received: from AM5EUR03FT051.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:89:cafe::f2) by AM6PR10CA0021.outlook.office365.com
 (2603:10a6:209:89::34) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Tue, 6 Jul 2021 08:45:24 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT051.mail.protection.outlook.com (10.152.16.246) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 08:45:23 +0000
Received: ("Tessian outbound c836dc7aad98:v97");
 Tue, 06 Jul 2021 08:45:22 +0000
Received: from f5bee680b688.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A00A61D9-5A17-48EA-983A-5E9203E9A2FA.1; 
 Tue, 06 Jul 2021 08:45:06 +0000
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f5bee680b688.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 08:45:06 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 by PA4PR08MB5967.eurprd08.prod.outlook.com (2603:10a6:102:e7::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Tue, 6 Jul
 2021 08:45:05 +0000
Received: from PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5]) by PAXPR08MB6816.eurprd08.prod.outlook.com
 ([fe80::4a9:5afa:372e:97f5%3]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 08:45:05 +0000
Received: from smtpclient.apple (82.8.129.65) by
 LO2P123CA0028.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 08:45:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 865a0bbb-3155-4511-8ee9-037fa826731d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EDh2fjLp0LWYXbM/wgaeCM06itXrv0oaj48dFJtbZRY=;
 b=IQA+LVsveUXhtT7kFKJ6fSnikOamrEvHHEu64J6slNsgYBD3FwbTzWVYAHiWUWPi3YAmTbHh3alOIi0x3lM23SEIIGTRL3xYFImNwG8swe0WuL6sDFV+lIKoa0ZNQk1oSooMyQ20rwwdXcjgHHNC7xyOFhOJBTyQiDQ+Y9TVOPQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 290a2ea63c6341b1
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EfNcNTI8JW7cZQPre1N+h/kxOeCK6nzWlK3CJC5T8qQkw1f+qiOT8V/DVCQetuOvK2LINDd621w0/UlTZAFB5jJY/Eg13V87qaXdQYFihjKK61kClSpCRJN+dPpYNHrB6HmyyEVdeKpl6d2srn7nG3caqugxrnMTpH1lmS1ogctEMa1fyLrG+OrRbRq4Y4uzq1wUWXZE52Tj5KzrRhAx8aDvH/vzyHXCmxsD5T8G9W0D/o3hRKYJurALhs6o7S8rjH4JMBW+tXfTilFiRhYjcRVrw7GIqE9KF5lk2a3/jxVavvYp61euRxd5J3Tt9+fXr7InIkgoYrBmL/oEooekgQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EDh2fjLp0LWYXbM/wgaeCM06itXrv0oaj48dFJtbZRY=;
 b=czxKLHgVNoLvmlsZzIj8cJv8QYardFVVFImDVAEgBvR2+MzaHZHYsToiDjaKneiLU/WLNzWH9AdoStIWdYPyOUAM5fvP0II6z3+/uqwnhccMa+ZksJ8BbkPHV/+YNiPuIniDjBOcEOXH3ww2TBRwc2bbEoZn0YKNhTzD6BK4OzDEy4f2HVJ8Q/fVUz3TUaZpmSPqA9VA4ufy4mjlbHNG/XBVJ2v1+NU15sdoqdtAHQetBJdiJMPLRjCSR5QOjbR3L5N5Dv8Fqik3saL1AR9u2rJxzDxnhbaOe3qB13tMhvtYKVK1Sq+Up0Ve0aNHFQ/CsVoqjKC2rpqLz4I+ZXnUCg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EDh2fjLp0LWYXbM/wgaeCM06itXrv0oaj48dFJtbZRY=;
 b=IQA+LVsveUXhtT7kFKJ6fSnikOamrEvHHEu64J6slNsgYBD3FwbTzWVYAHiWUWPi3YAmTbHh3alOIi0x3lM23SEIIGTRL3xYFImNwG8swe0WuL6sDFV+lIKoa0ZNQk1oSooMyQ20rwwdXcjgHHNC7xyOFhOJBTyQiDQ+Y9TVOPQ=
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
Content-Type: text/plain;
	charset=utf-8
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
From: Luca Fancellu <luca.fancellu@arm.com>
In-Reply-To: <d1915fbc-83af-e6df-980d-71abf21306fc@xen.org>
Date: Tue, 6 Jul 2021 09:44:56 +0100
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>,
 wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <D5BE99B1-7BDD-4FD3-856A-D4697F899C39@arm.com>
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
 <d1915fbc-83af-e6df-980d-71abf21306fc@xen.org>
To: Julien Grall <julien@xen.org>
X-Mailer: Apple Mail (2.3654.100.0.2.22)
X-Originating-IP: [82.8.129.65]
X-ClientProxiedBy: LO2P123CA0028.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600::16)
 To PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e01e037e-70ec-4ffa-fe28-08d9405a64ff
X-MS-TrafficTypeDiagnostic: PA4PR08MB5967:|DB7PR08MB3881:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<DB7PR08MB3881329325FB5165175521C9E41B9@DB7PR08MB3881.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 WNiZNvDdgel9sUDIq5fyf8kaSdv/7iBAQamFCEvOijwi3pAj+8NURG12ZzEaHWixqb06qnElUSJVLa6ht2TGmIUxfHsgdgI/lmOnfgCqRN8s1nWgqkdLse7czerasLG8a7Hp6yyF+J7d/sRM75mUSSflA5mMuMugkGG3OJQORuNkwK8Z6YjavWhjy98h8AsPzzI1T7dU7u/0xJ818L0zW/9hK1XKoXs8SRS25TDj2MKvdzgyJpSQdAES0u3/bqWt8yALL8gNxwfTgi43xcP2InYyPhvtz+zuRw9tDKMn05dmJoHDJPD9W1C5lmIZAfp63pHuXysYx1Sy3ED6VT4qfzbij8XrSLa0H5RCdXT8GBAc4xIJ+LBB1eLydK9vfl/8Ni7HX8OZJIU5VgJfT+8vbUtBvDMhfKKHJbdCKeoL8k8lCzgxjY3oy+tMEstF3hR88DkfP+1DYI7J1bjzvVkQFFt58eKtv8Pn3rHKbJ30gApkkaYeJ6wMZJvvMhGmTo0bZ+p4oUbhQZqKubOl3VlB4EL5IkIIEbK+LcgbQv6LGXzNleV0ok6QkJI1b+TKfQd80mSw8Hm8aWlKvjqS+FOn1wHxNy3xjmgbM5DzVnUTdM54BDmnf5Axb/pn9eHsmrq4L6VsPNituiussL0Wyd3dd4qvKjYdCbwQmsopzkmJ46inGJ/7ddKFWEDQUeLRafIiDJAGyKLRkgSGg8J8ilz00vI/tpC42erMH3+0ZjxmxeXZZN/1e9c6eUYHoQQ4pbmfgaf5HAaerUhe7dtXOpFLc7ZLcNwf1lRnZv21n5qLDDTabyb6y6FKQ3kVJ6PK8deK
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6816.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(346002)(396003)(136003)(39840400004)(66946007)(966005)(66476007)(6916009)(6512007)(6506007)(16526019)(5660300002)(54906003)(44832011)(33656002)(316002)(53546011)(6486002)(86362001)(478600001)(186003)(83380400001)(4326008)(26005)(66556008)(8936002)(6666004)(2906002)(38100700002)(8676002)(36756003)(2616005)(38350700002)(956004)(52116002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
 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
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB5967
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT051.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	5e53801e-626b-4671-2508-08d9405a59e2
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	+B5rvcO/ZWQr+kA1yQf5QzNrnhnOHgXVym5hQOuGu/WLxRqnEPOdk4imhJ9k6rU9NvaVRG7IXYHo9nSI/xs7JXOv5SRmiz5DYYW1UqI2Ec9RE99N6+d64+VZshDx+rXsJOyW17cd+gyYC2rMQ8ogCPid7JFbZ0pEXnskDveRcMdRQ4OZOsE8MICT/xbupYVl7mJzyxVCh6Z5kIdER5tM1MP8k4Qh05OkYVyDgPhTHTHSWHlGIX6RPskGPjjRBgm7WaiNpAbciLKFJM0u59xETgYpqn9jnFcaGrmouDcftPtZEC+LblwqS8b3QqVTwvYa1oPHnBNdDqjAXdn3DwvCxZVyOr94huX2oik6GNE/efbjc7YuXQMMSHyytQdEPFSFJZEZ1MjAZjkDmtn+/TQbe8jE3Xkkx90l84i7UFKJvgSFXVTeQqSbrQPe1R47jHvI+gfMb98fTwk/iU18sMoP5WsXiii435MdVoOUhxeTg0RzjzVIGzNdpGwipH2+FPnQVOWAn575KBSkPm9OMGUHrTQcOetZf88dc+pxoRWyi50+jZAnOE9L6EP2spR4WRyvDxdnQk7H6zIchQabKOF8hjzrtx0g38xS8G+Y09stVQUh9fh/fodByqLpGSotdizGc9z8uKO2i4vr8NQtJrq4LmhG9/CfJKk2duVTedeZcwZFqHHHMEiZCOAgJrbjafYUh9OuSTBqorb+NoIY5da4fr7YykZX+s/xTLjJjxBJnrurUvu70+SotYyFWYsCbT0BfRn4yhr2zjFqCK+tLgsrjo3A7y8K1D3PshQ4WXUoP6A=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39840400004)(376002)(346002)(136003)(396003)(46966006)(36840700001)(478600001)(70586007)(53546011)(47076005)(16526019)(356005)(2906002)(316002)(83380400001)(36756003)(6506007)(81166007)(86362001)(8676002)(6862004)(6512007)(33656002)(82310400003)(336012)(6486002)(8936002)(54906003)(956004)(6666004)(186003)(70206006)(44832011)(5660300002)(2616005)(4326008)(26005)(966005)(36860700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 08:45:23.4798
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: e01e037e-70ec-4ffa-fe28-08d9405a64ff
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT051.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3881



> On 5 Jul 2021, at 15:20, Julien Grall <julien@xen.org> wrote:
>=20
> Hi Luca,
>=20
> On 05/07/2021 11:51, Luca Fancellu wrote:
>> Modification to include/public/grant_table.h:
>> 1) Add doxygen tags to:
>>  - Create Grant tables section
>>  - include variables in the generated documentation
>>  - Used @keepindent/@endkeepindent to enclose comment
>>    section that are indented using spaces, to keep
>>    the indentation.
>> 2) Add .rst file for grant table
>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>> ---
>> v7 changes:
>> - commit message changed
>> - Add comment about grant table queries and uses
>> to the documentation
>> v6 changes:
>> - Fix misaligned comment
>> - Moved comments to make them display in the docs
>> - Included more documentation in the docs
>> v5 changes:
>> - Move GNTCOPY_* define next to the flags field
>> v4 changes:
>> - Used @keepindent/@endkeepindent doxygen commands
>>   to keep text with spaces indentation.
>> - drop changes to grant_entry_v1 comment, it will
>>   be changed and included in the docs in a future patch
>> - Move docs .rst to "common" folder
>> v3 changes:
>> - removed tags to skip anonymous union/struct
>> - moved back comment pointed out by Jan
>> - moved down defines related to struct gnttab_copy
>>   as pointed out by Jan
>> v2 changes:
>> - Revert back to anonymous union/struct
>> - add doxygen tags to skip anonymous union/struct
>> ---
>>  docs/hypercall-interfaces/arm64.rst           |   1 +
>>  .../common/grant_tables.rst                   |   9 +
>>  docs/xen-doxygen/doxy_input.list              |   1 +
>>  xen/include/public/grant_table.h              | 459 +++++++++++-------
>>  4 files changed, 288 insertions(+), 182 deletions(-)
>>  create mode 100644 docs/hypercall-interfaces/common/grant_tables.rst
>> diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interf=
aces/arm64.rst
>> index 5e701a2adc..cb4c0d13de 100644
>> --- a/docs/hypercall-interfaces/arm64.rst
>> +++ b/docs/hypercall-interfaces/arm64.rst
>> @@ -8,6 +8,7 @@ Starting points
>>  .. toctree::
>>     :maxdepth: 2
>>  +   common/grant_tables
>>      Functions
>> diff --git a/docs/hypercall-interfaces/common/grant_tables.rst b/docs/hy=
percall-interfaces/common/grant_tables.rst
>> new file mode 100644
>> index 0000000000..b8a1ef8759
>> --- /dev/null
>> +++ b/docs/hypercall-interfaces/common/grant_tables.rst
>> @@ -0,0 +1,9 @@
>> +.. SPDX-License-Identifier: CC-BY-4.0
>> +
>> +Grant Tables
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> +
>> +.. doxygengroup:: grant_table
>> +   :project: Xen
>> +   :members:
>> +   :undoc-members:
>> diff --git a/docs/xen-doxygen/doxy_input.list b/docs/xen-doxygen/doxy_in=
put.list
>> index e69de29bb2..233d692fa7 100644
>> --- a/docs/xen-doxygen/doxy_input.list
>> +++ b/docs/xen-doxygen/doxy_input.list
>> @@ -0,0 +1 @@
>> +xen/include/public/grant_table.h
>> diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant=
_table.h
>> index 84b1d26b36..2f826c952d 100644
>> --- a/xen/include/public/grant_table.h
>> +++ b/xen/include/public/grant_table.h
>> @@ -25,15 +25,19 @@
>>   * Copyright (c) 2004, K A Fraser
>>   */
>>  +/**
>> + * @file
>> + * @brief Interface for granting foreign access to page frames, and rec=
eiving
>> + * page-ownership transfers.
>> + */
>> +
>>  #ifndef __XEN_PUBLIC_GRANT_TABLE_H__
>>  #define __XEN_PUBLIC_GRANT_TABLE_H__
>>    #include "xen.h"
>>  -/*
>> - * `incontents 150 gnttab Grant Tables
>=20

Hi Julien,

> `incontents is used by the script xen-headers to generate I believe [1].
>=20
> Looking through the commit messages, I can't find any suggestion that the=
 existing documentation has been retired or else. So can you clarify what's=
 the intention?
>=20
> If the plan to move to doxygen, then I think that
>  1) the commit message or cover letter ought to explain why this is bette=
r than the current documentation
>  2) you should remove xen-headers or outline the plan to do that. Note th=
at after this series, I believe the bits for the grant table would end up t=
o be broken.
>=20

Yes you are right, maybe it=E2=80=99s better to have a future serie that ca=
n reproduce and substitute the actual documentation.

All the patches below this one introduces the sphinx-doxygen system, so we =
are enabled to create the docs,
now we can agree on the structure that we want for the new documentation.

Cheers,

Luca=20


> Cheers,
>=20
> [1] https://xenbits.xen.org/docs/unstable/hypercall/index.html
>=20
> --=20
> Julien Grall



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:49:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:49:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150890.278934 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gld-0005Ez-Tz; Tue, 06 Jul 2021 08:49:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150890.278934; Tue, 06 Jul 2021 08:49:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gld-0005Ep-QV; Tue, 06 Jul 2021 08:49:21 +0000
Received: by outflank-mailman (input) for mailman id 150890;
 Tue, 06 Jul 2021 08:49:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0gld-0005Ej-5m
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:49:21 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0glc-000551-0O; Tue, 06 Jul 2021 08:49:20 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0glb-00052J-Q7; Tue, 06 Jul 2021 08:49:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=anz3uTM/Zp68Sr7iUbwW5VdR6moMW32IE7gwUzZOM4U=; b=0/h8ju7H5kg1splEX3W3RqgC/v
	ymK32ZumQ4739a4svsqgfnt9H+TmClNZb1JZjq59IKM8h68Dyz2r6ATx+k+/R0cQquSu/D9cRHjRf
	8WzWiJjnPzH/45CevB8vHqYgoJ4upnnH0VcMjeaUgLAoaeApsIV5xxIGRD+TWs0Vjdak=;
Subject: Re: [XEN PATCH v3] libxl/arm: provide guests with random seed
To: Sergiy Kibrik <Sergiy_Kibrik@epam.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <ian.jackson@eu.citrix.com>, Wei Liu <wl@xen.org>
References: <20210706063345.91169-1-Sergiy_Kibrik@epam.com>
From: Julien Grall <julien@xen.org>
Message-ID: <46e2a04c-fa8f-f207-fe5e-328c891a0ca1@xen.org>
Date: Tue, 6 Jul 2021 09:49:18 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706063345.91169-1-Sergiy_Kibrik@epam.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 06/07/2021 07:33, Sergiy Kibrik wrote:
> Pass 128 bytes of random seed via FDT, so that guests' CRNGs are better seeded
> early at boot. This is larger than ChaCha20 key size of 32, so each byte of
> CRNG state will be mixed 4 times using this seed. There does not seem to be
> advantage in larger seed though.
> 
> Depending on its configuration Linux can use the seed as device randomness
> or to just quickly initialize CRNG.
> In either case this will provide extra randomness to further harden CRNG.
> 
> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
> Reviewed-by: Julien Grall <julien@xen.org>
> 
> ---
> 	Changes in V3:
> 		- Rebased on current master

Thank you for rebasing the patch. I have now committed it.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:51:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:51:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150897.278945 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gnw-0006Zh-Co; Tue, 06 Jul 2021 08:51:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150897.278945; Tue, 06 Jul 2021 08:51:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gnw-0006Za-8M; Tue, 06 Jul 2021 08:51:44 +0000
Received: by outflank-mailman (input) for mailman id 150897;
 Tue, 06 Jul 2021 08:51:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0gnv-0006ZU-1k
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:51:43 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gnt-00056t-Mk; Tue, 06 Jul 2021 08:51:41 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gnt-000596-Gr; Tue, 06 Jul 2021 08:51:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=krtht/hdkyvzqqjRLHnO5bZBqB+soqWfb0zgtV5qNBY=; b=QYUQOaGkFYMx5tVqGrPIvwwJeF
	KZ4JgQfkT8ti2lGtLC/2KyBRase2qY8QnYW1LsHyT2JiOINEaGQM6FmXD7F5QcHf4TdupiVlNK+VO
	DJD4ob40YweivCNzph6SPooNR7Qvtagou0IVw7y0ltWONbpNXL9pips/hZ3ikgLX2778=;
Subject: Re: [PATCH] tools/xenstored: Stash the correct request in
 lu_status->in
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: raphning@amazon.co.uk, doebel@amazon.de, Julien Grall
 <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210701140307.2516-1-julien@xen.org>
 <ce5e3bef-a075-275f-d638-67f987cf1088@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <277224dc-7eb9-442f-eb58-a38322aa4fcc@xen.org>
Date: Tue, 6 Jul 2021 09:51:39 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <ce5e3bef-a075-275f-d638-67f987cf1088@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Juergen,

On 05/07/2021 13:49, Juergen Gross wrote:
> On 01.07.21 16:03, Julien Grall wrote:
>> From: Julien Grall <jgrall@amazon.com>
>>
>> When Live-Updating with some load, Xenstored may hit the assert
>> req->in == lu_status->in in do_lu_start().
>>
>> This is happening because the request is stashed when Live-Update
>> begins. This happens in a different request (see call lu_begin()
>> when select the new binary) from the one performing Live-Update.
>>
>> To avoid the problem, stash the request in lu_start().
>>
>> Fixes: 65f19ed62aa1 ("tools/xenstore: Don't assume conn->in points to 
>> the LU request")
>> Reported-by: Michael Kurth <mku@amazon.com>
>> Signed-off-by: Julien Grall <jgrall@amazon.com>
> 
> Reviewed-by: Juergen Gross <jgross@suse.com>

Committed. Thanks!

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:52:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:52:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150903.278956 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gp8-0007Ce-Mo; Tue, 06 Jul 2021 08:52:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150903.278956; Tue, 06 Jul 2021 08:52:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gp8-0007CX-Jk; Tue, 06 Jul 2021 08:52:58 +0000
Received: by outflank-mailman (input) for mailman id 150903;
 Tue, 06 Jul 2021 08:52:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0gp7-0007CK-56
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:52:57 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gp6-000583-92; Tue, 06 Jul 2021 08:52:56 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gp6-0005EP-36; Tue, 06 Jul 2021 08:52:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=FYnvd6uqx0mlO7XrKC5zYnJuW7ylA9ieaveq1ZstUK0=; b=08iqHiq8Jg6PTF50eR3nzZmt3y
	qvQwvWrV+itJ1p9QpGOTEiVwMtVvdgs1fQZPwmNp4tBwZb+QhEpDmLF6zZf8c1Y0DTIMD+2ewssk3
	x9j2rx78YgjwXVvCS4Qc9c+RnZBDFWRuDEQ3hrt8p9WJknbFhdCOOCWnFkSXOL1YYOr4=;
Subject: Re: [PATCH V2] xen/arm: bootfdt: Always sort memory banks
To: Oleksandr Tyshchenko <olekstysh@gmail.com>, xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <1625507331-17934-1-git-send-email-olekstysh@gmail.com>
From: Julien Grall <julien@xen.org>
Message-ID: <5efd21da-bd26-64bd-4a79-67a955addbd1@xen.org>
Date: Tue, 6 Jul 2021 09:52:54 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <1625507331-17934-1-git-send-email-olekstysh@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Oleksandr,

On 05/07/2021 18:48, Oleksandr Tyshchenko wrote:
> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> 
> At the moment, Xen on Arm64 expects the memory banks to be ordered.
> Unfortunately, there may be a case when updated by firmware
> device tree contains unordered banks. This means Xen will panic
> when setting xenheap mappings for the subsequent bank with start
> address being less than xenheap_mfn_start (start address of
> the first bank).
> 
> As there is no clear requirement regarding ordering in the device
> tree, update code to be able to deal with by sorting memory
> banks. There is only one heap region on Arm32, so the sorting
> is fine to be done in the common code.
> 
> Suggested-by: Julien Grall <jgrall@amazon.com>
> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>


Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

> 
> ---
>     V2:
>     - add Stefano's R-b
>     - clarify patch description
>     - clarify comment in code
>     - drop "if (bootinfo.mem.nr_banks > 1)" check
> ---
>   xen/arch/arm/bootfdt.c | 25 +++++++++++++++++++++++++
>   1 file changed, 25 insertions(+)
> 
> diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
> index dcff512..476e32e 100644
> --- a/xen/arch/arm/bootfdt.c
> +++ b/xen/arch/arm/bootfdt.c
> @@ -13,6 +13,7 @@
>   #include <xen/init.h>
>   #include <xen/device_tree.h>
>   #include <xen/libfdt/libfdt.h>
> +#include <xen/sort.h>
>   #include <xsm/xsm.h>
>   #include <asm/setup.h>
>   
> @@ -395,6 +396,21 @@ static void __init early_print_info(void)
>       printk("\n");
>   }
>   
> +/* This function assumes that memory regions are not overlapped */
> +static int __init cmp_memory_node(const void *key, const void *elem)
> +{
> +    const struct membank *handler0 = key;
> +    const struct membank *handler1 = elem;
> +
> +    if ( handler0->start < handler1->start )
> +        return -1;
> +
> +    if ( handler0->start >= (handler1->start + handler1->size) )
> +        return 1;
> +
> +    return 0;
> +}
> +
>   /**
>    * boot_fdt_info - initialize bootinfo from a DTB
>    * @fdt: flattened device tree binary
> @@ -412,6 +428,15 @@ size_t __init boot_fdt_info(const void *fdt, paddr_t paddr)
>       add_boot_module(BOOTMOD_FDT, paddr, fdt_totalsize(fdt), false);
>   
>       device_tree_for_each_node((void *)fdt, 0, early_scan_node, NULL);
> +
> +    /*
> +     * On Arm64 setup_xenheap_mappings() expects to be called with the lowest
> +     * bank in memory first. There is no requirement that the DT will provide
> +     * the banks sorted in ascending order. So sort them through.
> +     */
> +    sort(bootinfo.mem.bank, bootinfo.mem.nr_banks, sizeof(struct membank),
> +         cmp_memory_node, NULL);
> +
>       early_print_info();
>   
>       return fdt_totalsize(fdt);
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:56:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:56:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150915.278975 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gss-000837-Ee; Tue, 06 Jul 2021 08:56:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150915.278975; Tue, 06 Jul 2021 08:56:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gss-000830-At; Tue, 06 Jul 2021 08:56:50 +0000
Received: by outflank-mailman (input) for mailman id 150915;
 Tue, 06 Jul 2021 08:56:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0gsr-00082u-Vd
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 08:56:49 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gsr-0005Dj-5Z; Tue, 06 Jul 2021 08:56:49 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gsq-0005dG-VX; Tue, 06 Jul 2021 08:56:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:References:Cc:To:From:Subject;
	bh=tX5+4XY3956Gy8wlFKkUsjk3CnAtnQatEPJpgnOEWEc=; b=2xOiIqFn9AdV7ba4fFbaClgCoJ
	EBCBgWNgo8F5g0yrMe7hC4DoAyYz5uEdsfp6INEwbZYL+fmCes2/glV3IefMwQJ+E2FIxt8aNU6y7
	L7nyf0owAvtugp3I9uYVCUJJ0zTlVzbqzwntr5RjBGBdfnhinlbpEvSUZleRkNLT/IEU=;
Subject: Re: [PATCH V2] xen/arm: bootfdt: Always sort memory banks
From: Julien Grall <julien@xen.org>
To: Oleksandr Tyshchenko <olekstysh@gmail.com>, xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <1625507331-17934-1-git-send-email-olekstysh@gmail.com>
 <5efd21da-bd26-64bd-4a79-67a955addbd1@xen.org>
Message-ID: <dd620d87-a1ba-2fa9-3505-36ee2f5d6514@xen.org>
Date: Tue, 6 Jul 2021 09:56:47 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <5efd21da-bd26-64bd-4a79-67a955addbd1@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 06/07/2021 09:52, Julien Grall wrote:
> Hi Oleksandr,
> 
> On 05/07/2021 18:48, Oleksandr Tyshchenko wrote:
>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>>
>> At the moment, Xen on Arm64 expects the memory banks to be ordered.
>> Unfortunately, there may be a case when updated by firmware
>> device tree contains unordered banks. This means Xen will panic
>> when setting xenheap mappings for the subsequent bank with start
>> address being less than xenheap_mfn_start (start address of
>> the first bank).
>>
>> As there is no clear requirement regarding ordering in the device
>> tree, update code to be able to deal with by sorting memory
>> banks. There is only one heap region on Arm32, so the sorting
>> is fine to be done in the common code.
>>
>> Suggested-by: Julien Grall <jgrall@amazon.com>
>> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> 
> 
> Acked-by: Julien Grall <jgrall@amazon.com>

And committed.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 08:59:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 08:59:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150921.278985 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gvh-0000I4-Sv; Tue, 06 Jul 2021 08:59:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150921.278985; Tue, 06 Jul 2021 08:59:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gvh-0000Hw-Pe; Tue, 06 Jul 2021 08:59:45 +0000
Received: by outflank-mailman (input) for mailman id 150921;
 Tue, 06 Jul 2021 08:59:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0gvg-0000Hm-Km; Tue, 06 Jul 2021 08:59:44 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0gvg-0005HU-EZ; Tue, 06 Jul 2021 08:59:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0gvg-0001L2-3P; Tue, 06 Jul 2021 08:59:44 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0gvg-0007u8-2v; Tue, 06 Jul 2021 08:59:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=lpiLpivL44oOCac3d8lEV5PST+mIzwv9Xv0g9AB9gCU=; b=0m1WNY9lH1q7WAQ/YBjjKzINDN
	KiH2C5W4g3dDiDJfrWOOFwFh52dEc7JxPPJhlSVh7Sd7UxWrU5vMPb0W7PSnVC+RBbmZL9WvvE4Do
	T9cfBldmErAbNEl1qTmlhkTO78HyQQWCNtmfNiLOuKlf4h8H3TE2wmEm4iKrsp0UwD68=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163322-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163322: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 08:59:44 +0000

flight 163322 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163322/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  361 days
Failing since        151818  2020-07-11 04:18:52 Z  360 days  352 attempts
Testing same since   163236  2021-07-03 04:20:01 Z    3 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63952 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:03:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:03:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150930.279004 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gyn-0001l9-DY; Tue, 06 Jul 2021 09:02:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150930.279004; Tue, 06 Jul 2021 09:02:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0gyn-0001l2-9l; Tue, 06 Jul 2021 09:02:57 +0000
Received: by outflank-mailman (input) for mailman id 150930;
 Tue, 06 Jul 2021 09:02:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0gyl-0001ku-Sw
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:02:55 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gyd-0005M4-2x; Tue, 06 Jul 2021 09:02:47 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0gyc-0006QO-SY; Tue, 06 Jul 2021 09:02:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=P/SQsoY0SDIFTAMieQvhtlHws74JqQMmVyprDpj+wzA=; b=F2erenH3fl3td2EiOFlji/0OUM
	Z6z24JC0CM7WdCs3mfBo0uqFfdeT21n7vcSW3MmQ9EbAXfvuJ8EFWzNP6EsFqicA1INvgWhOrWFou
	zg44zVAu3y1DghCvoL4lXkcP/5NkN70xzZtN/xme7SC6gg6U+qIdIhTv/ervN4ShNUVc=;
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com
References: <20210705063952.25629-1-michal.orzel@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <36597cf4-eca9-2263-3f4d-3ac6c69a257a@xen.org>
Date: Tue, 6 Jul 2021 10:02:44 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210705063952.25629-1-michal.orzel@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Michal,

On 05/07/2021 07:39, Michal Orzel wrote:
> AArch64 registers are 64bit whereas AArch32 registers
> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
> we should get rid of helpers READ/WRITE_SYSREG32
> in favour of using READ/WRITE_SYSREG.
> We should also use register_t type when reading sysregs
> which can correspond to uint64_t or uint32_t.
> Even though many AArch64 registers have upper 32bit reserved
> it does not mean that they can't be widen in the future.
> 
> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
> Previously we relied on the padding after spsr_el1.
> As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
> No need to modify the assembly code because the accesses were based on 64bit
> registers as there was a 32bit padding after spsr_el1.
> 
> Remove 32bit padding in cpu_user_regs before spsr_fiq
> as it is no longer needed due to upper union being 64bit now.
> Add 64bit padding in cpu_user_regs before spsr_el1
> because the kernel frame should be 16-byte aligned.
> 
> Change type of cpsr to uint64_t in the public outside interface
> "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
> Increment XEN_DOMCTL_INTERFACE_VERSION.
> 
> Change type of cpsr to uint64_t in the public outside interface
> "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
> 
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>

Reviewed-by: Julien Grall <jgrall@amazon.com>

and committed.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:10:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:10:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150936.279016 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0h5f-0002m2-6Q; Tue, 06 Jul 2021 09:10:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150936.279016; Tue, 06 Jul 2021 09:10:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0h5f-0002lP-09; Tue, 06 Jul 2021 09:10:03 +0000
Received: by outflank-mailman (input) for mailman id 150936;
 Tue, 06 Jul 2021 09:10:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0h5d-0002Zy-Sy
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:10:01 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0h5c-0005UP-SE; Tue, 06 Jul 2021 09:10:00 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0h5c-0006uS-MN; Tue, 06 Jul 2021 09:10:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=siiuXVQqIQWHbriIZQJUsmg1oLf98wYSl07cDf2tO9k=; b=TuUGhiFJBSd/WbGBI5ZkTGKiHD
	yZ3ABq7FrOmXZiVVdo6lsseLqQIilULDm0g5EVLY6EaRTAjH253MRl9LmZJIzLkZcA12mVNWxcigK
	NCotsZaj2zBT6OW/cvqgsWUUN9ThfdNvtFHPWbb/SieBPTGxczJOebZ+76TnS/6jVq0E=;
Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
To: Penny Zheng <Penny.Zheng@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 "jbeulich@suse.com" <jbeulich@suse.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <1c6530bf-a362-0993-c4c5-953ee2afb1bf@xen.org>
 <VE1PR08MB5215D076B85A22DD9991B64CF71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Julien Grall <julien@xen.org>
Message-ID: <f4836b6e-cbb3-ef9d-1d15-a6ec75d985d2@xen.org>
Date: Tue, 6 Jul 2021 10:09:58 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <VE1PR08MB5215D076B85A22DD9991B64CF71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 05/07/2021 08:28, Penny Zheng wrote:
> Hi Julien

Hi Penny,

>> -----Original Message-----
>> From: Julien Grall <julien@xen.org>
>> Sent: Thursday, July 1, 2021 2:10 AM
>> To: Penny Zheng <Penny.Zheng@arm.com>; xen-devel@lists.xenproject.org;
>> sstabellini@kernel.org; jbeulich@suse.com
>> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
>> <Wei.Chen@arm.com>
>> Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
>>
>> Hi Penny,
>>
>> On 07/06/2021 03:43, Penny Zheng wrote:
>>> This patch introduces static memory initialization, during system RAM boot
>> up.
>>
>> The word "RAM" looks spurious.
>>
> 
> Thx. I check the "spurious" in dictionary, it means fake? So I will leave "during system boot up"
> here.

Yes, this reads better.

>>> 2. scrub the page in need synchronously.
>>
>> Can you explain why this is necessary?
>>
> 
> Since I'm borrowing the logic in free_heap_pages, I'm also trying to cover all the scenarios here like it does.
> So I assume that free_staticmem_page will not only be used on initialization, but also when destroying/rebooting the domain.
> On these cases, it is necessary to scrub the page, ig.

I wasn't asking about scrubbing specifically but instead why it is 
synchronous. Sorry for the confusion.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:20:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:20:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150944.279029 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hFv-0004jX-5P; Tue, 06 Jul 2021 09:20:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150944.279029; Tue, 06 Jul 2021 09:20:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hFv-0004jQ-2S; Tue, 06 Jul 2021 09:20:39 +0000
Received: by outflank-mailman (input) for mailman id 150944;
 Tue, 06 Jul 2021 09:20:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Dpqu=L6=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m0hFt-0004jI-59
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:20:37 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:7e1a::618])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ea178be1-8dda-4b5b-969f-372bcbfbdf1b;
 Tue, 06 Jul 2021 09:20:35 +0000 (UTC)
Received: from AM5PR1001CA0003.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::16)
 by DB6PR0801MB1688.eurprd08.prod.outlook.com (2603:10a6:4:3a::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Tue, 6 Jul
 2021 09:20:33 +0000
Received: from AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:2:cafe::70) by AM5PR1001CA0003.outlook.office365.com
 (2603:10a6:206:2::16) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Tue, 6 Jul 2021 09:20:33 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT056.mail.protection.outlook.com (10.152.17.224) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 09:20:32 +0000
Received: ("Tessian outbound 2e56506fe389:v97");
 Tue, 06 Jul 2021 09:20:32 +0000
Received: from 477289aeabc2.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 F9DAC4BA-8457-4167-9A00-1FEB8806067E.1; 
 Tue, 06 Jul 2021 09:20:26 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 477289aeabc2.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 09:20:26 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB3424.eurprd08.prod.outlook.com (2603:10a6:803:88::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 09:20:24 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 09:20:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ea178be1-8dda-4b5b-969f-372bcbfbdf1b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1JRisGj/Pzaucyme7fnfy2Tqri2vdi7ghvIx0NcGK94=;
 b=mwfCEZGS6x5sDw/EvVyh8xNtNZWGohkH/i9uW4Yj2SYZLvZ+VdBlZyeBDpz9Nfj+ilmXDJGGyZ12bjDnn+DCOKFcDq2qt41u8nLVYgdf5WbehF82stbIGccRo+Mq/6QOqGoQgRiT/YDY08b4HzP59HVTJC5AZrTDqcUpO7WXLA4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cL2LZ9Fhbjck1rIgN18vvSV8d0wPOLNFNzOcgOa2g9Ogeodg5RYYJHov0DISdNBNsBQApTyKq4/wUgl/GaKt6uKd6tw1mRtZbV9Ynwb7cM9DVVCT26EDOPaYotL9v0q/BhP84MKtdgo1dOECoZrgU8Dk7UwMiw8/ScthoBftWYEaJVl94jnDV6i4Hgtk8saRh1KJbGMU2ibD1sPXi0sv21SdMDGQ8inPYoajf2eJA/COg7bcTDTPhFgNjhLAgeh6DKk5hbe/tCm2nQ+CT6vYPQ1KVqraFDI04FFP74sBZKnZ3+xkPcSKUDG5EUpX3a0rl2M9bJ0RHjHpcaF8u1wLdw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1JRisGj/Pzaucyme7fnfy2Tqri2vdi7ghvIx0NcGK94=;
 b=nhglPWR0dB33gDq3RF30oRxFP59gW5I4hZcSDpSM4O29pwGItcpRb3ASzX4iJkIb7RFLN+hUxNA9PfQ7kVe7NTAn+RpBoi9SmUUtphW9CjTEMq3bZ2IPSWFTs8xq+C3uin/plf14ayRTSJ4Jiqkh68MvZCz6+wAY9UszXSWebUX/K3/t+t/6xQYMGwM8wXlvYO4fdEyHcxNVUTQSaMNrr4cdQZ6Qps8T8kUAX4Q2Dv2xj+lNuQTDJ592ZKzibSTU7Y9wo6Yi97MJJU6//ZFl6zplAQuF6tMBfIFH86xVrkRUV6kntjJG72D/sb/+6Q8FehCCh6v6BwtV00JOdEokgA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1JRisGj/Pzaucyme7fnfy2Tqri2vdi7ghvIx0NcGK94=;
 b=mwfCEZGS6x5sDw/EvVyh8xNtNZWGohkH/i9uW4Yj2SYZLvZ+VdBlZyeBDpz9Nfj+ilmXDJGGyZ12bjDnn+DCOKFcDq2qt41u8nLVYgdf5WbehF82stbIGccRo+Mq/6QOqGoQgRiT/YDY08b4HzP59HVTJC5AZrTDqcUpO7WXLA4=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 4/9] xen/arm: static memory initialization
Thread-Topic: [PATCH 4/9] xen/arm: static memory initialization
Thread-Index: AQHXW0b3OiAcoe7xDE2AVcNY0dwUCqss/50AgAck2tCAAbJdAIAAALLg
Date: Tue, 6 Jul 2021 09:20:23 +0000
Message-ID:
 <VE1PR08MB5215AB836DE8B8943C4A040CF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <1c6530bf-a362-0993-c4c5-953ee2afb1bf@xen.org>
 <VE1PR08MB5215D076B85A22DD9991B64CF71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <f4836b6e-cbb3-ef9d-1d15-a6ec75d985d2@xen.org>
In-Reply-To: <f4836b6e-cbb3-ef9d-1d15-a6ec75d985d2@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 9256631E10A4C7488C714A581F28B984.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-originating-ip: [203.126.0.111]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: ce843e5c-8cf7-4889-a86d-08d9405f4e50
x-ms-traffictypediagnostic: VI1PR08MB3424:|DB6PR0801MB1688:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB6PR0801MB16881EC80236A3E80281F7A8F71B9@DB6PR0801MB1688.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:2887;OLM:2887;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 d7tEAxD7l/ObXwO71uTyvFrNi8MASy3BzGb/f+8Zoc+utQeolRPfgmKk4dwonVFKajoNY+voaWT4ZE/dm24BpnlyfU6UlURur7/GV+VoR+fWD18AvwbSzlwfuxTqbX5KjPQC07PmJ5nb2YGqCLCfNlCIhu18VfzqHHkeC0Vj15NT5gEIoWjNMnPHUsFI81xItViNbKtjKM8vNDi6L/TfaAd6ibum9E+xZC3/7jpRu9b9hEVqDRKKw53X+GeW+5d9bJ7Glk5UF85WAdwaWJB3FiMedIsH5u1c0t56cX7j11dWYIX5PgG0/X/LKLMTDqnC5agwpdihCBMb04HaMV9IWvSfdewDAGdFVutSC+mCh/DyikxISqQ4eExarsskADBR0/103EEDDjUc3RMG/vT6ep/gwKHzANOCeczE6pDuBIV4yBj7LcxIHEUPF/ExKXzc4fWLGYlOhy/2YfUGLtfrzxZFtjsovsOpN8WWtaKJLhLiCJHcKW9BTc0yjrkCqkzfSEWZ2/1FWL9k4UAzGXwc1C9sYDY5LTsSkpPoQm9C9qo9QQQiPcg8s12cjgmmV6kjJz1NwB5TcM4rffrTwzt7P9ryv+ZU951YWVLrPHtZD+SAVc9jtkMVlQLn3lkLyYifqGIP640Lb+tmPcSV9jwUew==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(346002)(376002)(39850400004)(396003)(5660300002)(86362001)(53546011)(4326008)(122000001)(6506007)(54906003)(2906002)(52536014)(110136005)(8936002)(38100700002)(478600001)(7696005)(71200400001)(66476007)(316002)(64756008)(186003)(33656002)(76116006)(83380400001)(66446008)(9686003)(26005)(66556008)(66946007)(55016002)(8676002);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?Z9PZ+qIrTR4HUAqexNSNnpZ4K0/TNhzSW/Dj741?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3424
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	364d91d9-7cc6-44db-26c0-08d9405f490d
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	dTzhcUOxRX6axLvoD68ze+ZQDOCd15ibOAJXRIWi9/LwfcvRiK/q5o2pzlST0LhtLMM9Xk2Q3RoP5TDzbaAqnZgxm3PrXyXowY2d7WZwaX+1Fv4F575/mJKdhBwUHOcu0Wgs+5VXhKTmco+AsPpQdWPRsyifhsMfCcx41pq9HcmJ0S4fl3oodF0bqVYyysiiskl0JOPUVmvlCJA2SjhFlf+tjmt3vnzToWZp6S6C/9fzLv7VRrGdNjzUqSrG5Vbyc0JRYcXgIC7+oB0bw71m9MKbwLnypV+F+gDZ0M84ah3Pkf6BLfjctWSKL2r6wJ+oLYSXMtJS2iaIT9HXv3ySkMj47CaKT4Qo7j3G5t/fpt+nbwjkGWxh0MG5V7Xn9Q+0po77+dTiqMEOEG46+jzzDlYwSosD8YsddWSlaxOckHqMW6MNnaE3nIaHChLrpZsa4YH5OTQkhbw9M58plRlhI/aYibbcW4wTI/NF+vUkSfP5STqoNwCBK7SmKe7k6UMxepRls81N7hh0C2FsaswSEN7dK97nwweRd2wnlyd1N+Ko0A6Gq+GYsNUz6LSh/O1FlCpdeJQK17u5cR2y1HTuWb17t5k7G3rK3rlFzfBaox8OFVSBGguxsTGWekwidzB9IE/2gOII4wEVPg40htsiUb2Zi6d6a/ljWtJhrA8GHD4Enh1eXUhbJRUTF5DpfcUzX4kjQ8ck8nouFSjwTbtZpQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(136003)(396003)(346002)(39850400004)(46966006)(36840700001)(70586007)(52536014)(6506007)(47076005)(54906003)(8936002)(478600001)(55016002)(9686003)(36860700001)(53546011)(110136005)(70206006)(8676002)(82740400003)(26005)(4326008)(316002)(186003)(7696005)(33656002)(356005)(86362001)(81166007)(336012)(2906002)(83380400001)(5660300002)(82310400003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 09:20:32.8971
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ce843e5c-8cf7-4889-a86d-08d9405f4e50
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1688

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4NCj4gU2VudDogVHVlc2RheSwgSnVseSA2LCAyMDIxIDU6
MTAgUE0NCj4gVG86IFBlbm55IFpoZW5nIDxQZW5ueS5aaGVuZ0Bhcm0uY29tPjsgeGVuLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnOw0KPiBzc3RhYmVsbGluaUBrZXJuZWwub3JnOyBqYmV1bGlj
aEBzdXNlLmNvbQ0KPiBDYzogQmVydHJhbmQgTWFycXVpcyA8QmVydHJhbmQuTWFycXVpc0Bhcm0u
Y29tPjsgV2VpIENoZW4NCj4gPFdlaS5DaGVuQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFU
Q0ggNC85XSB4ZW4vYXJtOiBzdGF0aWMgbWVtb3J5IGluaXRpYWxpemF0aW9uDQo+IA0KPiANCj4g
DQo+IE9uIDA1LzA3LzIwMjEgMDg6MjgsIFBlbm55IFpoZW5nIHdyb3RlOg0KPiA+IEhpIEp1bGll
bg0KPiANCj4gSGkgUGVubnksDQo+IA0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K
PiA+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbkB4ZW4ub3JnPg0KPiA+PiBTZW50OiBUaHVy
c2RheSwgSnVseSAxLCAyMDIxIDI6MTAgQU0NCj4gPj4gVG86IFBlbm55IFpoZW5nIDxQZW5ueS5a
aGVuZ0Bhcm0uY29tPjsNCj4gPj4geGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOyBzc3Rh
YmVsbGluaUBrZXJuZWwub3JnOw0KPiA+PiBqYmV1bGljaEBzdXNlLmNvbQ0KPiA+PiBDYzogQmVy
dHJhbmQgTWFycXVpcyA8QmVydHJhbmQuTWFycXVpc0Bhcm0uY29tPjsgV2VpIENoZW4NCj4gPj4g
PFdlaS5DaGVuQGFybS5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNC85XSB4ZW4vYXJt
OiBzdGF0aWMgbWVtb3J5IGluaXRpYWxpemF0aW9uDQo+ID4+DQo+ID4+IEhpIFBlbm55LA0KPiA+
Pg0KPiA+PiBPbiAwNy8wNi8yMDIxIDAzOjQzLCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPj4+IFRo
aXMgcGF0Y2ggaW50cm9kdWNlcyBzdGF0aWMgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBkdXJpbmcg
c3lzdGVtDQo+ID4+PiBSQU0gYm9vdA0KPiA+PiB1cC4NCj4gPj4NCj4gPj4gVGhlIHdvcmQgIlJB
TSIgbG9va3Mgc3B1cmlvdXMuDQo+ID4+DQo+ID4NCj4gPiBUaHguIEkgY2hlY2sgdGhlICJzcHVy
aW91cyIgaW4gZGljdGlvbmFyeSwgaXQgbWVhbnMgZmFrZT8gU28gSSB3aWxsIGxlYXZlDQo+ICJk
dXJpbmcgc3lzdGVtIGJvb3QgdXAiDQo+ID4gaGVyZS4NCj4gDQo+IFllcywgdGhpcyByZWFkcyBi
ZXR0ZXIuDQo+IA0KPiA+Pj4gMi4gc2NydWIgdGhlIHBhZ2UgaW4gbmVlZCBzeW5jaHJvbm91c2x5
Lg0KPiA+Pg0KPiA+PiBDYW4geW91IGV4cGxhaW4gd2h5IHRoaXMgaXMgbmVjZXNzYXJ5Pw0KPiA+
Pg0KPiA+DQo+ID4gU2luY2UgSSdtIGJvcnJvd2luZyB0aGUgbG9naWMgaW4gZnJlZV9oZWFwX3Bh
Z2VzLCBJJ20gYWxzbyB0cnlpbmcgdG8gY292ZXIgYWxsDQo+IHRoZSBzY2VuYXJpb3MgaGVyZSBs
aWtlIGl0IGRvZXMuDQo+ID4gU28gSSBhc3N1bWUgdGhhdCBmcmVlX3N0YXRpY21lbV9wYWdlIHdp
bGwgbm90IG9ubHkgYmUgdXNlZCBvbiBpbml0aWFsaXphdGlvbiwNCj4gYnV0IGFsc28gd2hlbiBk
ZXN0cm95aW5nL3JlYm9vdGluZyB0aGUgZG9tYWluLg0KPiA+IE9uIHRoZXNlIGNhc2VzLCBpdCBp
cyBuZWNlc3NhcnkgdG8gc2NydWIgdGhlIHBhZ2UsIGlnLg0KPiANCj4gSSB3YXNuJ3QgYXNraW5n
IGFib3V0IHNjcnViYmluZyBzcGVjaWZpY2FsbHkgYnV0IGluc3RlYWQgd2h5IGl0IGlzIHN5bmNo
cm9ub3VzLg0KPiBTb3JyeSBmb3IgdGhlIGNvbmZ1c2lvbi4NCj4gDQoNCkkndmUgcmVhZCBhc3lu
Y2hyb25vdXMgc2NydWJiaW5nIGluIGJ1ZGR5IGFsbG9jYXRvciwgcGFnZXMgdGhhdCBuZWVkIGEg
c2NydWIgYXJlIGFkZGVkIHRvIHRhaWwsIA0KYW5kIHNwZWNpZmljIHdvcmtpbmcgdGhyZWFkIGlz
IHdvcmtpbmcgb24gaXQsIGhtbSwgaW1vLCBJIGRvbid0IHRoaW5rIGl0IGNvdWxkIGJlIHNpbXBs
eSBhcHBsaWVkIGludG8gc3RhdGljDQptZW1vcnkuIDovDQoNClNvIEkgcHV0IGFzeW5jaHJvbm91
cyBzY3J1YmJpbmcgaW4gI1RPRE8uDQoNCj4gQ2hlZXJzLA0KPiANCj4gLS0NCj4gSnVsaWVuIEdy
YWxsDQoNCkNoZWVycw0KDQotLQ0KUGVubnkgWmhlbmcNCg==


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:22:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:22:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150950.279040 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hHq-0005Rm-L4; Tue, 06 Jul 2021 09:22:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150950.279040; Tue, 06 Jul 2021 09:22:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hHq-0005Rf-IA; Tue, 06 Jul 2021 09:22:38 +0000
Received: by outflank-mailman (input) for mailman id 150950;
 Tue, 06 Jul 2021 09:22:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0hHp-0005RW-Hd
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:22:37 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0hHp-0005hG-8y; Tue, 06 Jul 2021 09:22:37 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0hHp-0007z6-2r; Tue, 06 Jul 2021 09:22:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=PVNqoE6fww70mSM52CJsWJtQAPYJj4A5gkeV0Zc3C6k=; b=6pVQK59y1p+THU6icnbgv/3IdH
	WprsG3bnmUddxrnvYokSPmmYt3vtl9OFpPEvUXk0V7iHGApOzJjKuX2o1Dj0hutDgr6sQfroYd5U0
	x0xFRFlgim9QJEFpewKRW8p249DYGN5MTnlN2Mh+WcM7bUP74RX+RnFcDyF8jlXpNnX8=;
Subject: Re: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
 domain construction
To: Penny Zheng <Penny.Zheng@arm.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jan Beulich
 <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-9-penny.zheng@arm.com>
 <f613372a-eac8-f79b-2941-b7cce3e1e0e7@xen.org>
 <VE1PR08MB52155D35A7B716DC7337311DF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Julien Grall <julien@xen.org>
Message-ID: <4df299a5-e13b-f235-f9e3-245b50e0313d@xen.org>
Date: Tue, 6 Jul 2021 10:22:35 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <VE1PR08MB52155D35A7B716DC7337311DF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 06/07/2021 07:31, Penny Zheng wrote:
> Hi

Hi,

> 
>> -----Original Message-----
>> From: Julien Grall <julien@xen.org>
>> Sent: Saturday, July 3, 2021 9:26 PM
>> To: Penny Zheng <Penny.Zheng@arm.com>; xen-devel@lists.xenproject.org;
>> sstabellini@kernel.org; jbeulich@suse.com
>> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
>> <Wei.Chen@arm.com>
>> Subject: Re: [PATCH 8/9] xen/arm: check `xen,static-mem` property during
>> domain construction
>>
>> Hi Penny,
>>
>> On 07/06/2021 03:43, Penny Zheng wrote:
>>> This commit checks `xen,static-mem` device tree property in /domUx
>>> node, to determine whether domain is on Static Allocation, when
>>> constructing domain during boot-up.
>>>
>>> Right now, the implementation of allocate_static_memory is missing,
>>> and will be introduced later. It just BUG() out at the moment.
>>>
>>> And if the `memory` property and `xen,static-mem` are both set, it
>>> shall be verified that if the memory size defined in both is consistent.
>>>
>>> Signed-off-by: Penny Zheng <penny.zheng@arm.com>
>>> ---
>>> changes v2:
>>> - remove parsing procedure here
>>> - check the consistency when `xen,static-mem` and `memory` are both
>>> defined
>>> ---
>>>    xen/arch/arm/domain_build.c | 37 +++++++++++++++++++++++++++++++---
>> ---
>>>    1 file changed, 31 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
>>> index 282416e74d..4166d7993c 100644
>>> --- a/xen/arch/arm/domain_build.c
>>> +++ b/xen/arch/arm/domain_build.c
>>> @@ -2424,23 +2424,47 @@ static int __init construct_domU(struct domain
>> *d,
>>>    {
>>>        struct kernel_info kinfo = {};
>>>        int rc;
>>> -    u64 mem;
>>> +    u64 mem, static_mem_size = 0;
>>> +    const struct dt_property *prop;
>>> +    bool static_mem = false;
>>> +
>>> +    d->max_pages = ~0U;
>>> +    /*
>>> +     * Guest RAM could be of static memory from static allocation,
>>> +     * which will be specified through "xen,static-mem" phandle.
>>> +     */
>>> +    prop = dt_find_property(node, "xen,static-mem", NULL);
>>> +    if ( prop )
>>> +    {
>>> +        static_mem = true;
>>> +        /* static_mem_size = allocate_static_memory(...); */
>>> +        BUG();
>>> +    }
>>
>> I would prefer if the static memory is allocated close to
>> allocate_memory() below. AFAICT, the reason you allocate here is because you
>> want to have the property "memory" optional.
>>
>> However, I am not entirely convinced this is a good idea to make optional. It
>> would be easier for a reader to figure out from the device-tree how much
>> memory we give to the guest.
>>
> 
> Hmmm, now I think maybe I understand wrongly what you suggested in v1.
> "
> Could we allocate the memory as we parse?
> "
> I just simply think it means the code sequence, putting allocation immediately
> after parsing. ;/

I really meant "parse and allocate" in a iteration. My comment this time 
is the parsing/allocation for static memory should happen close to when 
the allocation for dynamic memory is done.

After all you are allocating memory for domain, so it makes more sense 
to have the two different way to allocate cloe to each other.

> 
> Re-investigating the docs on "memory":
> 
> "
> - memory
> 
>      A 64-bit integer specifying the amount of kilobytes of RAM to
>      allocate to the guest.
> "
> If you prefer "memory" mandate, then tbh, it will make the code
> here more easily-read, no ifs.
> But maybe I shall put more info on docs to clarify that even though user using
> "xen, static-mem" to refer to static memory allocation, they shall still use
> "memory" property to tell how much memory we give to the guest.

Hmm... I am not sure this is necessary, the property "memory" is not 
marked as optional even after your patch.

However, I would clarify that all the memory should either be allocated 
statically or dynamically...

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:27:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:27:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150957.279051 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hLy-00066E-6O; Tue, 06 Jul 2021 09:26:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150957.279051; Tue, 06 Jul 2021 09:26:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hLy-000667-3K; Tue, 06 Jul 2021 09:26:54 +0000
Received: by outflank-mailman (input) for mailman id 150957;
 Tue, 06 Jul 2021 09:26:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0hLw-000661-Dy
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:26:52 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0hLw-0005ll-5c; Tue, 06 Jul 2021 09:26:52 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0hLw-0008BW-0B; Tue, 06 Jul 2021 09:26:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=jWt1PDEr3L/f+DrapE6GIy6XGLxgxscGH5uM7hfoQ6o=; b=aWmVZpZ0ujytDOZNMXSWiJoo+f
	KgDr+hC7o8QLXtKP02urxChyOeuWZMxZunske3RZknwpbk2JjWgk7JB9oqx5umfWBXKvMGhYx8ILc
	CQ7BX2eE1RUHgjz8Utkx1J38VXHu3qXqJ87rldJFHWXyC5+B7nIBV7a+mpfipzURGFdM=;
Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
To: Penny Zheng <Penny.Zheng@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-5-penny.zheng@arm.com>
 <1c6530bf-a362-0993-c4c5-953ee2afb1bf@xen.org>
 <VE1PR08MB5215D076B85A22DD9991B64CF71C9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <f4836b6e-cbb3-ef9d-1d15-a6ec75d985d2@xen.org>
 <VE1PR08MB5215AB836DE8B8943C4A040CF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Julien Grall <julien@xen.org>
Message-ID: <a04ae3bd-5899-891f-2858-e3ca706c7405@xen.org>
Date: Tue, 6 Jul 2021 10:26:50 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <VE1PR08MB5215AB836DE8B8943C4A040CF71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 06/07/2021 10:20, Penny Zheng wrote:
> Hi Julien

Hi Penny,

>> -----Original Message-----
>> From: Julien Grall <julien@xen.org>
>> Sent: Tuesday, July 6, 2021 5:10 PM
>> To: Penny Zheng <Penny.Zheng@arm.com>; xen-devel@lists.xenproject.org;
>> sstabellini@kernel.org; jbeulich@suse.com
>> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
>> <Wei.Chen@arm.com>
>> Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
>>
>>
>>
>> On 05/07/2021 08:28, Penny Zheng wrote:
>>> Hi Julien
>>
>> Hi Penny,
>>
>>>> -----Original Message-----
>>>> From: Julien Grall <julien@xen.org>
>>>> Sent: Thursday, July 1, 2021 2:10 AM
>>>> To: Penny Zheng <Penny.Zheng@arm.com>;
>>>> xen-devel@lists.xenproject.org; sstabellini@kernel.org;
>>>> jbeulich@suse.com
>>>> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
>>>> <Wei.Chen@arm.com>
>>>> Subject: Re: [PATCH 4/9] xen/arm: static memory initialization
>>>>
>>>> Hi Penny,
>>>>
>>>> On 07/06/2021 03:43, Penny Zheng wrote:
>>>>> This patch introduces static memory initialization, during system
>>>>> RAM boot
>>>> up.
>>>>
>>>> The word "RAM" looks spurious.
>>>>
>>>
>>> Thx. I check the "spurious" in dictionary, it means fake? So I will leave
>> "during system boot up"
>>> here.
>>
>> Yes, this reads better.
>>
>>>>> 2. scrub the page in need synchronously.
>>>>
>>>> Can you explain why this is necessary?
>>>>
>>>
>>> Since I'm borrowing the logic in free_heap_pages, I'm also trying to cover all
>> the scenarios here like it does.
>>> So I assume that free_staticmem_page will not only be used on initialization,
>> but also when destroying/rebooting the domain.
>>> On these cases, it is necessary to scrub the page, ig.
>>
>> I wasn't asking about scrubbing specifically but instead why it is synchronous.
>> Sorry for the confusion.
>>
> 
> I've read asynchronous scrubbing in buddy allocator, pages that need a scrub are added to tail,
> and specific working thread is working on it, hmm, imo, I don't think it could be simply applied into static
> memory. :/

I am not sure to understand why the same concept can't be applied. 
Anyway, what I am asking is to clarify in the commit message why this is 
synchronous (e.g. this just temporary).

>  > So I put asynchronous scrubbing in #TODO.

We seem to have quite a few TODOs (some of them are implicit). Can we 
start to gather a list of what's missing? A first good place would be 
the cover lette.r

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:39:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:39:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150963.279063 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hYI-0007aT-8h; Tue, 06 Jul 2021 09:39:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150963.279063; Tue, 06 Jul 2021 09:39:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hYI-0007aM-5X; Tue, 06 Jul 2021 09:39:38 +0000
Received: by outflank-mailman (input) for mailman id 150963;
 Tue, 06 Jul 2021 09:39:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0hYH-0007aG-4y
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:39:37 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0hYG-0005yq-Rb; Tue, 06 Jul 2021 09:39:36 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0hYG-0000rz-L1; Tue, 06 Jul 2021 09:39:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=/VX9nd6K+ZmccVXF72yysg9mlQ4BAirww3PVC5N0+Y0=; b=uSOTSOCmOBAGPaln3ltDt9v/5z
	Dnyho7IWaEJuO2YmE1umOYVaeCOUOW4c9LgS+WJwtB5fKcSdsB8Tpm/tt1y2DGBuehd4FSTUmfFkg
	DVZO/N40FEnsLTrCzxp07IVBHSl8WnFjj974IcU75qav4mtrftPrBW06bzfE7anNgfH8=;
Subject: Re: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
To: Jan Beulich <jbeulich@suse.com>, Penny Zheng <Penny.Zheng@arm.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <c6ab1b8d-1598-f7fc-f717-f58f8e0aba68@xen.org>
Date: Tue, 6 Jul 2021 10:39:34 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan & Penny,

On 06/07/2021 07:53, Jan Beulich wrote:
> On 06.07.2021 07:58, Penny Zheng wrote:
>>> From: Jan Beulich <jbeulich@suse.com>
>>> Sent: Thursday, June 10, 2021 6:23 PM
>>>
>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>> --- a/xen/common/page_alloc.c
>>>> +++ b/xen/common/page_alloc.c
>>>> @@ -1065,6 +1065,75 @@ static struct page_info *alloc_heap_pages(
>>>>       return pg;
>>>>   }
>>>>
>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>> +/*
>>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static memory.
>>>> + * It is the equivalent of alloc_heap_pages for static memory  */
>>>> +static struct page_info *alloc_staticmem_pages(unsigned long nr_mfns,
>>>> +                                               mfn_t smfn,
>>>> +                                               unsigned int memflags)
>>>> +{
>>>> +    bool need_tlbflush = false;
>>>> +    uint32_t tlbflush_timestamp = 0;
>>>> +    unsigned long i;
>>>> +    struct page_info *pg;
>>>> +
>>>> +    /* For now, it only supports allocating at specified address. */
>>>> +    if ( !mfn_valid(smfn) || !nr_mfns )
>>>> +    {
>>>> +        printk(XENLOG_ERR
>>>> +               "Invalid %lu static memory starting at %"PRI_mfn"\n",
>>>
>>> Reading a log containing e.g. "Invalid 0 static memory starting at ..." I don't
>>> think I would recognize that the "0" is the count of pages.
>>
>> Sure. How about "try to allocate out of range page %"PRI_mfn"\n"?
> 
> This still doesn't convey _both_ parts of the if() that would cause
> the log message to be issued.
> 
>>>> +               nr_mfns, mfn_x(smfn));
>>>> +        return NULL;
>>>> +    }
>>>> +    pg = mfn_to_page(smfn);
>>>> +
>>>> +    for ( i = 0; i < nr_mfns; i++ )
>>>> +    {
>>>> +        /*
>>>> +         * Reference count must continuously be zero for free pages
>>>> +         * of static memory(PGC_reserved).
>>>> +         */
>>>> +        ASSERT(pg[i].count_info & PGC_reserved);
>>>
>>> What logic elsewhere guarantees that this will hold? ASSERT()s are to verify
>>> that assumptions are met. But I don't think you can sensibly assume the caller
>>> knows the range is reserved (and free), or else you could get away without any
>>> allocation function.
>>
>> The caller shall only call alloc_staticmem_pages when it knows range is reserved,
>> like, alloc_staticmem_pages is only called in the context of alloc_domstatic_pages
>> for now.
> 
> If the caller knows the static ranges, this isn't really "allocation".
> I.e. I then question the need for "allocating" in the first place.

We still need to setup the page so the reference counting works 
properly. So can you clarify whether you are objecting on the name? If 
yes, do you have a better suggestion?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:59:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:59:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150979.279094 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hqx-0001fc-43; Tue, 06 Jul 2021 09:58:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150979.279094; Tue, 06 Jul 2021 09:58:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hqx-0001fV-0y; Tue, 06 Jul 2021 09:58:55 +0000
Received: by outflank-mailman (input) for mailman id 150979;
 Tue, 06 Jul 2021 09:57:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=7PuH=L6=armlinux.org.uk=linux+xen-devel=lists.xenproject.org@srs-us1.protection.inumbo.net>)
 id 1m0hpJ-0001cU-KQ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:57:13 +0000
Received: from pandora.armlinux.org.uk (unknown
 [2001:4d48:ad52:32c8:5054:ff:fe00:142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 80092c22-206f-49ed-83e2-e7624de2c6a4;
 Tue, 06 Jul 2021 09:57:11 +0000 (UTC)
Received: from shell.armlinux.org.uk
 ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:45790)
 by pandora.armlinux.org.uk with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <linux@armlinux.org.uk>)
 id 1m0hoi-0006RU-5N; Tue, 06 Jul 2021 10:56:36 +0100
Received: from linux by shell.armlinux.org.uk with local (Exim 4.92)
 (envelope-from <linux@shell.armlinux.org.uk>)
 id 1m0hoO-0001sr-Ht; Tue, 06 Jul 2021 10:56:16 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 80092c22-206f-49ed-83e2-e7624de2c6a4
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To:
	Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID:
	Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date:
	Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:
	List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
	 bh=16iZcd8UM9edxy0w5wY5BQzXODSiQ7QkmW3vxkbk5D0=; b=a3mzSZ9zhXvQ7z72FKA8Fdnpk
	LWcvpcuWofwRYcFCjviYZJk1oPXrs7M3uQJ+ywY1LHJEnj+NRwjgrzF1fC0F4Her/0HY+w0mU3H3Y
	10CG8a1oWmfqpRlDsr7HNnDdAy6f+2/u33SyEsVG77yaTgZQwrs2MZiscSAA5F+AnLuDVz82jgC0J
	lYqY2gLTqCI0RBtuMN88P4U2IEdFt2eygNpGPrRxU5Qv7iomPheSViajY02rYqXloTzTH8q6Js++w
	YBqCoH4+kucnPqJUrbotraNf2h/vP6y9RzvkP75RGSjwQMJ9WI7C7sCONSx2yqdBujcUYV4c5FTfO
	peWj6rYRg==;
Date: Tue, 6 Jul 2021 10:56:16 +0100
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <20210706095616.GQ22278@shell.armlinux.org.uk>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
User-Agent: Mutt/1.10.1 (2018-07-13)
Sender: Russell King (Oracle) <linux@armlinux.org.uk>

On Tue, Jul 06, 2021 at 11:50:37AM +0200, Uwe Kleine-Knig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-Knig <u.kleine-koenig@pengutronix.de>

Yay! For ARM, Amba and related parts:

Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 09:59:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 09:59:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150983.279105 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hrX-0002D1-ED; Tue, 06 Jul 2021 09:59:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150983.279105; Tue, 06 Jul 2021 09:59:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0hrX-0002Cu-AA; Tue, 06 Jul 2021 09:59:31 +0000
Received: by outflank-mailman (input) for mailman id 150983;
 Tue, 06 Jul 2021 09:59:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0hrW-0002Cg-3Y
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 09:59:30 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 60ed37f2-f6aa-477e-893b-832d121a948a;
 Tue, 06 Jul 2021 09:59:29 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2108.outbound.protection.outlook.com [104.47.18.108])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-9-1LOyhCd4OF2red7fDPWtNA-1; Tue, 06 Jul 2021 11:59:27 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4848.eurprd04.prod.outlook.com (2603:10a6:803:55::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19; Tue, 6 Jul
 2021 09:59:26 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 09:59:26 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0111.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::27) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Tue, 6 Jul 2021 09:59:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 60ed37f2-f6aa-477e-893b-832d121a948a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625565568;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=eltZ53WzeP6D32Cf1/FknSFJzekvUXZrLl6S5LDaCgM=;
	b=gvnobWSfkxIqzDYVYhlFhTaxZgfzsSSOyPcvKf9gTF8YPBlGlhE8ediBQwZr2BO5mOzGbO
	JL+Ye/p9MJrf4CNeSjBXKq1z13+SJjJ3u0mJTWW9kk2s2AAkCkAud5v2aIrHBi/fumope7
	5Z9bB1FfPdrlXidyI7zO8WvmBbU91A0=
X-MC-Unique: 1LOyhCd4OF2red7fDPWtNA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XAqVNqV6FnfnIjR/WkpjLWxTQ5JNoiMMWluXZP/4z1KZlrx4XTgdjutcff6AoBta6umLDCOJh4d21MR6lEQFaeDoiY7Ig0/Eg/q0jNszaHrxnW39QjyGxIPtPw1ojz9+dPNk1BoiSXm4BQVgFkF7umLtfRZGUio4Pyx+lBdMMDdPOrlXXW/NiGksyw5pS93JWn1mvfnE5bBbdObJJ1OOiPrlMFcZ2BkJ4grGY/fCywuCjd6F2NsGnCmN5bEpy1tPynLWIR7Cy3534UwcnKkFd2AAocKSyadoEKZaBx8seisiMMpp96FHSutvXV7fTa85YPeNbAXRzH/WvTYd6t6l0Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=eltZ53WzeP6D32Cf1/FknSFJzekvUXZrLl6S5LDaCgM=;
 b=D9WsUrYgczfG7Cv5Lyv9d/cJhe7cYDHXByQAw0ML8Hr8/C/LVA+7lZIJpcwIVy0DXvxzbZRI729lyurskTRj2Ss/GQg+3t5q+9gxRDFYW8aXot88yDGkROhsS0baB+GE6OpbL9JToR6oEKoLgc3Zg/pAGCHxwJW08CJ0NZUEnq80sSHsgAs/CiR8OYltx4MzcIWucrjWyYz6fXz0KJDZbWKS2/JgKYGd3rC/bBghHOY/b+URrWdubhezGUxVSE5mbh5GQnkbEiZb0xB0gyxNseLyM1q3LquaXN4GTszpIh+IlPwimU1iTJ4H3+MCjCiQD2rovzWQTDP35+i11yXPgw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
To: Julien Grall <julien@xen.org>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 Penny Zheng <Penny.Zheng@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
 <c6ab1b8d-1598-f7fc-f717-f58f8e0aba68@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <ea219d56-ea73-8904-ab47-421bd5c53a9f@suse.com>
Date: Tue, 6 Jul 2021 11:59:24 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <c6ab1b8d-1598-f7fc-f717-f58f8e0aba68@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-Originating-IP: [37.24.206.209]
X-ClientProxiedBy: PR0P264CA0111.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::27) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f74b8ba3-71f3-423a-3d5c-08d94064bccc
X-MS-TrafficTypeDiagnostic: VI1PR04MB4848:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4848B0D96005FCCF32B6BB40B31B9@VI1PR04MB4848.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	M82qvb0kUe+Y882982w3eV9GJw7DiBHucGRqxQJUHtI4M27UhAQrel1wfREqBJSurTf1DGP48cIlvcVLpH+11Hum9MlEoeoatph28l5JwxUOWWb72/3Xmr4Fx08O8d2eCqki/8ZZ6u3w1cUpFq65Hz6XkrxaAtW6yhj+7mHgL/ciTj2CGSbiXo/3n4ESqUSTcdRVuc9BOzUOM5+/jDMKx4MHxreftp5wHqEUVqrkKb3rO0scqIiEyO0fKSO/B2mZwl6BapyEeG1Oa0gJ5/8pHqdrr98bbyaFLsYEXNOgIAHSFtV0Ye2Zt4B0rrjC9wuOHcG5sYdCyZatBCi054/nC49DF++2EVuqK4KLDDNSnl3H7RX3lT6RebtWq2GfzLfDeIj0mn3g/D50h4q061RkLmYZaoLilLod/YxCVuo4H/5P1OfLgkVKct8791hwRxjUgOI0cxs6Weihu5PIk+xjKZrefnC/GjggmxrUsKUnn5bWDW8FMV0NRhkK10lGhaAWOuyZZO1Ts2MONnzp2OO5DsZytP4+HNQ+uRXAMz+BNbBNf/pOtG00x1IKJTsdmAMFsxKrAENNyJHsXLVMlCDczybUzZXSZ0Q4kKrMJ8EDWHGt2hxQ4Gwd8ljWIqcewc5vAH8SEcjWIk+RQKArwmo4rYrHyZVux567sft/NmvFwLqi2VbD369lMWLLAXxxXh6X/fpuPFGyr4TVOH4IlbhCAy+8KwJtOFHh+nE96LB30rk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39860400002)(136003)(376002)(346002)(366004)(16526019)(8936002)(31696002)(5660300002)(66946007)(66556008)(54906003)(53546011)(83380400001)(478600001)(66476007)(16576012)(36756003)(956004)(2616005)(186003)(316002)(38100700002)(31686004)(4326008)(86362001)(26005)(2906002)(6916009)(6486002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?MGZpSitocHlyUFRCRVFkektiQ1QxUWFKMUlmR2s4L2dNejZoOVg0ZlNwNU1q?=
 =?utf-8?B?dzRDU3A5V0c0MVIzR2gra3pEb0I3RnVoYzFOdGhJRU1nNkh0ek1VUDNpeGc4?=
 =?utf-8?B?VGdiSHlaa1hzQ2IxeFJlYjhrWVQ2dklRUUxBb2E1TUFSSE94T0ZJcUVrYk5W?=
 =?utf-8?B?WXlFZjBuWHRkSy9xUkZxWllqNWZtalNiNCtJVEJ3V1QyeWF3UjJDejZ4RlZG?=
 =?utf-8?B?ZzZJYnBaczBPTWNWYnROYy95aTNSSkoyK0wxVGF0SzJSblN2aTA4b0x5alJX?=
 =?utf-8?B?Uk5SZEgxL0tLRnBBWDE3TjFObGNQZUhoRUx1cEJibGpXVGlLaWJub2FxTkNy?=
 =?utf-8?B?RmEyWnM2aVhINTdpZWRWQlgzM1AyOExTV2tQcERBclg4TTJzK2NsNFdkaWls?=
 =?utf-8?B?L3V5ejd5eElxU1BKbFZmZUIwV2pCUDZiSU04T3dxSDdJYTBIRDdrZ201Wmtv?=
 =?utf-8?B?RUdkL3Z1TGdYSGV2ZEtZSm41a29Gc2N4RXhPelJqTkpCa2FURm54NXh6T0NU?=
 =?utf-8?B?d2ZhanExdGZzTDBCODNobHJHd2hFNFBYM05qc2N5RHI1dTBSUzJyTFpQWnlZ?=
 =?utf-8?B?VkU1N0xZNStXVW5wcjkwT1B5bStEMHhNRkJTTUt1V2NTMk04MG1hVWxVVXN3?=
 =?utf-8?B?bjdZR01zNStwZU9haDNoQUtwcmRWVU9STVpuSGsvM3Y0bEhCZ1RZclVQb1pZ?=
 =?utf-8?B?amtpVy8xZFpCTC9HaXp6KzNhTEtXWERpVGNHTVk0eFJZZXJYN2w4RnFKS29P?=
 =?utf-8?B?N3FmNXhZRzIwUmNreFdsVkc0b2xqUlp1NDQxUms5NklKMFkzUm1Edjk0Szg5?=
 =?utf-8?B?a0hmMThtQWZKVDN4eTNiVDNiM0xMclhZdVRSWW1aa2pzM3lESVQyUDI5dVJ6?=
 =?utf-8?B?M243OStyRUh3ZFU0eTlTRnkrbG1PbTVPNTQ4eHJtV05EZjY0eFUzVlBXeTRB?=
 =?utf-8?B?akdLYzVqajZLOUcwQ2MwQUVhZjZ3RFVMYmJRS1BmQjc1L01rem5CM0dSL0JG?=
 =?utf-8?B?VndCbnJ6VjI5VlZQRXFCckJVNkV3cXU2d25Sb1dzd2tFTVdmcVRMS213aDhF?=
 =?utf-8?B?RktTZmxlamlKZXJJTUFsZ0drRUZtVkFVcWJiMkwxS0ZPM1ZIb0xuKzcwcWZX?=
 =?utf-8?B?SDJLbjBsUDRCYVRxQm13U3dHbGN6aGZCdVJVdEMrWVp1L3lrYldCek1lME9Z?=
 =?utf-8?B?Q0hicGxVRW5HTlJWeFR6aUFKNVViTGRUbk5jSHpjb3BTRWhWOU9YcDlySmN3?=
 =?utf-8?B?QVY3bzNlOEFGQ043R1lFbmlCUHlVcEtNMHg0S0NhUXE1cDdxcW96aTBrUnFG?=
 =?utf-8?B?Si9DSURNRHIwVGRINjg0TlMwRlBYTllXM2d5OUR1dXJkNkVVYlpreStPVlh2?=
 =?utf-8?B?eG9MTlByQ1BsaFNWOFhsdU5TZTZkQ08zM2l2R3Jvd1k5MU9NL1FIZkF3M2Er?=
 =?utf-8?B?UHpTUkFYRFd6QlhRQ2xpTTl0Nk9WU2llVnY0UmFVVkFJdG1WZnZmU0ZYS1dv?=
 =?utf-8?B?akVwdEdlOU9Ca25ITjUwSXI4QmErK1A0M25PS0JmazZNbmNKUFowcmVJRnow?=
 =?utf-8?B?Wi9tWEhtd0NpV0ljclBBdUl5ZkM3QWpMTVhvRjBiWi9GYUVrR3A5UHZTWWlL?=
 =?utf-8?B?Zjl6bCtsbFczTm42Y3MvTFB1Rm9EblQxR2dWRnRGbk5qWDA0SVgwcklMUFEv?=
 =?utf-8?B?Z3JYZEoxVW1vMXlRMzg4RGNRK3FEMWZtbGZ6VUQySVNHQWtnaWZ6RUtlV1NI?=
 =?utf-8?Q?GzUDOBRkeMZ1rN8BpOeZmNqkI4aTyfafK0PyOWM?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f74b8ba3-71f3-423a-3d5c-08d94064bccc
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 09:59:25.9413
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: CzORCWD7BuRMX9oZRXESyqWcsnmD7NxXy3SvvvPTgT2rYA7yQuqDioAa6XYN5o9tZYcy6BECnOW6sNcElb7W8g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4848

On 06.07.2021 11:39, Julien Grall wrote:
> Hi Jan & Penny,
> 
> On 06/07/2021 07:53, Jan Beulich wrote:
>> On 06.07.2021 07:58, Penny Zheng wrote:
>>>> From: Jan Beulich <jbeulich@suse.com>
>>>> Sent: Thursday, June 10, 2021 6:23 PM
>>>>
>>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>>> --- a/xen/common/page_alloc.c
>>>>> +++ b/xen/common/page_alloc.c
>>>>> @@ -1065,6 +1065,75 @@ static struct page_info *alloc_heap_pages(
>>>>>       return pg;
>>>>>   }
>>>>>
>>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>>> +/*
>>>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static memory.
>>>>> + * It is the equivalent of alloc_heap_pages for static memory  */
>>>>> +static struct page_info *alloc_staticmem_pages(unsigned long nr_mfns,
>>>>> +                                               mfn_t smfn,
>>>>> +                                               unsigned int memflags)
>>>>> +{
>>>>> +    bool need_tlbflush = false;
>>>>> +    uint32_t tlbflush_timestamp = 0;
>>>>> +    unsigned long i;
>>>>> +    struct page_info *pg;
>>>>> +
>>>>> +    /* For now, it only supports allocating at specified address. */
>>>>> +    if ( !mfn_valid(smfn) || !nr_mfns )
>>>>> +    {
>>>>> +        printk(XENLOG_ERR
>>>>> +               "Invalid %lu static memory starting at %"PRI_mfn"\n",
>>>>
>>>> Reading a log containing e.g. "Invalid 0 static memory starting at ..." I don't
>>>> think I would recognize that the "0" is the count of pages.
>>>
>>> Sure. How about "try to allocate out of range page %"PRI_mfn"\n"?
>>
>> This still doesn't convey _both_ parts of the if() that would cause
>> the log message to be issued.
>>
>>>>> +               nr_mfns, mfn_x(smfn));
>>>>> +        return NULL;
>>>>> +    }
>>>>> +    pg = mfn_to_page(smfn);
>>>>> +
>>>>> +    for ( i = 0; i < nr_mfns; i++ )
>>>>> +    {
>>>>> +        /*
>>>>> +         * Reference count must continuously be zero for free pages
>>>>> +         * of static memory(PGC_reserved).
>>>>> +         */
>>>>> +        ASSERT(pg[i].count_info & PGC_reserved);
>>>>
>>>> What logic elsewhere guarantees that this will hold? ASSERT()s are to verify
>>>> that assumptions are met. But I don't think you can sensibly assume the caller
>>>> knows the range is reserved (and free), or else you could get away without any
>>>> allocation function.
>>>
>>> The caller shall only call alloc_staticmem_pages when it knows range is reserved,
>>> like, alloc_staticmem_pages is only called in the context of alloc_domstatic_pages
>>> for now.
>>
>> If the caller knows the static ranges, this isn't really "allocation".
>> I.e. I then question the need for "allocating" in the first place.
> 
> We still need to setup the page so the reference counting works 
> properly. So can you clarify whether you are objecting on the name? If 
> yes, do you have a better suggestion?

It's not the name alone but the disconnect between name and actual
behavior. Note that here we've started from an ASSERT(), which is
reasonable to have if the caller knows where static pages are, but
which should be converted to an if() when talking about allocation
(i.e. the caller may not have enough knowledge). If it's not really
allocation, how about naming it "acquire" or "obtain" (and the
config option perhaps STATIC_MEMORY)?

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:29:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:29:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151001.279116 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iK8-0005Y9-6T; Tue, 06 Jul 2021 10:29:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151001.279116; Tue, 06 Jul 2021 10:29:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iK8-0005Y2-1o; Tue, 06 Jul 2021 10:29:04 +0000
Received: by outflank-mailman (input) for mailman id 151001;
 Tue, 06 Jul 2021 10:29:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hbbY=L6=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m0iK6-0005Xw-LF
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:29:02 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id faaf77c9-de44-11eb-8483-12813bfff9fa;
 Tue, 06 Jul 2021 10:29:01 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A64031FB;
 Tue,  6 Jul 2021 03:29:00 -0700 (PDT)
Received: from e123311-lin.arm.com (unknown [10.57.8.167])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6BB993F5A1;
 Tue,  6 Jul 2021 03:28:59 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: faaf77c9-de44-11eb-8483-12813bfff9fa
From: Michal Orzel <michal.orzel@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	bertrand.marquis@arm.com,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH] arm: Fix arch_initialise_vcpu to be unsupported
Date: Tue,  6 Jul 2021 12:28:53 +0200
Message-Id: <20210706102853.10251-1-michal.orzel@arm.com>
X-Mailer: git-send-email 2.29.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Function arch_initialise_vcpu is not reachable as the
VCPUOP_initialise is an unsupported operation on arm.
Modify the function by adding ASSERT_UNREACHABLE() and
returning -EOPNOTSUPP.

Suggested-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Michal Orzel <michal.orzel@arm.com>
---
 xen/arch/arm/domain.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index c021a03c61..a2aa8b77ad 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -923,7 +923,8 @@ int arch_set_info_guest(
 
 int arch_initialise_vcpu(struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
 {
-    return default_initialise_vcpu(v, arg);
+    ASSERT_UNREACHABLE();
+    return -EOPNOTSUPP;
 }
 
 int arch_vcpu_reset(struct vcpu *v)
-- 
2.29.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:31:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:31:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151007.279127 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iMm-0006tN-K8; Tue, 06 Jul 2021 10:31:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151007.279127; Tue, 06 Jul 2021 10:31:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iMm-0006tG-G3; Tue, 06 Jul 2021 10:31:48 +0000
Received: by outflank-mailman (input) for mailman id 151007;
 Tue, 06 Jul 2021 10:31:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0iMk-0006tA-So
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:31:46 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0iMk-0006xj-Nb; Tue, 06 Jul 2021 10:31:46 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0iMk-0005i5-HS; Tue, 06 Jul 2021 10:31:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=u829M/p7D6gorvRKzHDQ7cVGvaLt5wIJ5XcJbKzPRVM=; b=Fyt+Y2k2Om/QOnebmzFccLEioq
	NLa4bA2BAnRujJwNtvznNMilddO+nEw6TANpS8nh6eBCRLqSeHd9jG0OzgZhkoL/ftWILhsPCGxX9
	dY7Ozhsk0JW/3jx9iAIxIGLutoCGMBM1ICp3UqVBPvOeVTunfr5jKTz+VJ5cqFhk27uo=;
Subject: Re: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
To: Jan Beulich <jbeulich@suse.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 Penny Zheng <Penny.Zheng@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
 <c6ab1b8d-1598-f7fc-f717-f58f8e0aba68@xen.org>
 <ea219d56-ea73-8904-ab47-421bd5c53a9f@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <564b9851-4e3a-b98d-08a8-483c9ed83bb4@xen.org>
Date: Tue, 6 Jul 2021 11:31:44 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <ea219d56-ea73-8904-ab47-421bd5c53a9f@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 06/07/2021 10:59, Jan Beulich wrote:
> On 06.07.2021 11:39, Julien Grall wrote:
>> Hi Jan & Penny,
>>
>> On 06/07/2021 07:53, Jan Beulich wrote:
>>> On 06.07.2021 07:58, Penny Zheng wrote:
>>>>> From: Jan Beulich <jbeulich@suse.com>
>>>>> Sent: Thursday, June 10, 2021 6:23 PM
>>>>>
>>>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>>>> --- a/xen/common/page_alloc.c
>>>>>> +++ b/xen/common/page_alloc.c
>>>>>> @@ -1065,6 +1065,75 @@ static struct page_info *alloc_heap_pages(
>>>>>>        return pg;
>>>>>>    }
>>>>>>
>>>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>>>> +/*
>>>>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static memory.
>>>>>> + * It is the equivalent of alloc_heap_pages for static memory  */
>>>>>> +static struct page_info *alloc_staticmem_pages(unsigned long nr_mfns,
>>>>>> +                                               mfn_t smfn,
>>>>>> +                                               unsigned int memflags)
>>>>>> +{
>>>>>> +    bool need_tlbflush = false;
>>>>>> +    uint32_t tlbflush_timestamp = 0;
>>>>>> +    unsigned long i;
>>>>>> +    struct page_info *pg;
>>>>>> +
>>>>>> +    /* For now, it only supports allocating at specified address. */
>>>>>> +    if ( !mfn_valid(smfn) || !nr_mfns )
>>>>>> +    {
>>>>>> +        printk(XENLOG_ERR
>>>>>> +               "Invalid %lu static memory starting at %"PRI_mfn"\n",
>>>>>
>>>>> Reading a log containing e.g. "Invalid 0 static memory starting at ..." I don't
>>>>> think I would recognize that the "0" is the count of pages.
>>>>
>>>> Sure. How about "try to allocate out of range page %"PRI_mfn"\n"?
>>>
>>> This still doesn't convey _both_ parts of the if() that would cause
>>> the log message to be issued.
>>>
>>>>>> +               nr_mfns, mfn_x(smfn));
>>>>>> +        return NULL;
>>>>>> +    }
>>>>>> +    pg = mfn_to_page(smfn);
>>>>>> +
>>>>>> +    for ( i = 0; i < nr_mfns; i++ )
>>>>>> +    {
>>>>>> +        /*
>>>>>> +         * Reference count must continuously be zero for free pages
>>>>>> +         * of static memory(PGC_reserved).
>>>>>> +         */
>>>>>> +        ASSERT(pg[i].count_info & PGC_reserved);
>>>>>
>>>>> What logic elsewhere guarantees that this will hold? ASSERT()s are to verify
>>>>> that assumptions are met. But I don't think you can sensibly assume the caller
>>>>> knows the range is reserved (and free), or else you could get away without any
>>>>> allocation function.
>>>>
>>>> The caller shall only call alloc_staticmem_pages when it knows range is reserved,
>>>> like, alloc_staticmem_pages is only called in the context of alloc_domstatic_pages
>>>> for now.
>>>
>>> If the caller knows the static ranges, this isn't really "allocation".
>>> I.e. I then question the need for "allocating" in the first place.
>>
>> We still need to setup the page so the reference counting works
>> properly. So can you clarify whether you are objecting on the name? If
>> yes, do you have a better suggestion?
> 
> It's not the name alone but the disconnect between name and actual
> behavior. Note that here we've started from an ASSERT(), which is
> reasonable to have if the caller knows where static pages are, but
> which should be converted to an if() when talking about allocation
> (i.e. the caller may not have enough knowledge). If it's not really
> allocation, how about naming it "acquire" or "obtain" (and the
> config option perhaps STATIC_MEMORY)?

The caller will fetch the information from the Device Tree but it 
doesn't sanity check it. I think it can be easy to make mistake as the 
information will be scattered in various node of the DT.

So I think it would be better if we have a check in both prod and debug 
build to ease the integration.

Regarding the name itself, anyone of the one you suggested are fine with 
me because to me the difference between them is too subtle to be 
understood by most of the users.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:33:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:33:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150993.279137 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOS-0007XY-12; Tue, 06 Jul 2021 10:33:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150993.279137; Tue, 06 Jul 2021 10:33:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOR-0007XR-UK; Tue, 06 Jul 2021 10:33:31 +0000
Received: by outflank-mailman (input) for mailman id 150993;
 Tue, 06 Jul 2021 10:18:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8YKr=L6=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m0i9u-0004fe-Ld
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:18:30 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6e07bf4e-1371-4406-a0c1-f84f5d7c2146;
 Tue, 06 Jul 2021 10:18:24 +0000 (UTC)
Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0hjC-00081i-Tp; Tue, 06 Jul 2021 11:50:54 +0200
Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0hj3-0000kp-Ki; Tue, 06 Jul 2021 11:50:45 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6e07bf4e-1371-4406-a0c1-f84f5d7c2146
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>,
	Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>,
	Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>,
	Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>,
	Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>,
	Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>,
	Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>,
	Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>,
	Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>,
	David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>,
	Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev,
	linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev,
	dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org,
	platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org,
	linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org,
	target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org,
	linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: [PATCH] bus: Make remove callback return void
Date: Tue,  6 Jul 2021 11:50:37 +0200
Message-Id: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

The driver core ignores the return value of this callback because there
is only little it can do when a device disappears.

This is the final bit of a long lasting cleanup quest where several
buses were converted to also return void from their remove callback.
Additionally some resource leaks were fixed that were caused by drivers
returning an error code in the expectation that the driver won't go
away.

With struct bus_type::remove returning void it's prevented that newly
implemented buses return an ignored error code and so don't anticipate
wrong expectations for driver authors.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
Hello,

this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
return void" that is not yet applied, see
https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutronix.de.

I tested it using allmodconfig on amd64 and arm, but I wouldn't be
surprised if I still missed to convert a driver. So it would be great to
get this into next early after the merge window closes.

I send this mail to all people that get_maintainer.pl emits for this
patch. I wonder how many recipents will refuse this mail because of the
long Cc: list :-)

Best regards
Uwe

 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 4 +---
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 include/linux/device/bus.h                | 2 +-
 sound/aoa/soundbus/core.c                 | 4 +---
 75 files changed, 78 insertions(+), 204 deletions(-)

diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index e45f4e4e06b6..24d21ba63030 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int locomo_bus_remove(struct device *dev)
+static void locomo_bus_remove(struct device *dev)
 {
 	struct locomo_dev *ldev = LOCOMO_DEV(dev);
 	struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(ldev);
-	return 0;
 }
 
 struct bus_type locomo_bus_type = {
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index ff5e0d04cb89..092a2ebc0c28 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sa1111_bus_remove(struct device *dev)
+static void sa1111_bus_remove(struct device *dev)
 {
 	struct sa1111_dev *sadev = to_sa1111_device(dev);
 	struct sa1111_driver *drv = SA1111_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(sadev);
-
-	return 0;
 }
 
 struct bus_type sa1111_bus_type = {
diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
index 827b50f1c73e..53813f9464a2 100644
--- a/arch/arm/mach-rpc/ecard.c
+++ b/arch/arm/mach-rpc/ecard.c
@@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int ecard_drv_remove(struct device *dev)
+static void ecard_drv_remove(struct device *dev)
 {
 	struct expansion_card *ec = ECARD_DEV(dev);
 	struct ecard_driver *drv = ECARD_DRV(dev->driver);
@@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
 	ec->ops = &ecard_default_ops;
 	barrier();
 	ec->irq_data = NULL;
-
-	return 0;
 }
 
 /*
diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.c
index de0768a49ee8..dfc52f661ad0 100644
--- a/arch/mips/sgi-ip22/ip22-gio.c
+++ b/arch/mips/sgi-ip22/ip22-gio.c
@@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
 	return error;
 }
 
-static int gio_device_remove(struct device *dev)
+static void gio_device_remove(struct device *dev)
 {
 	struct gio_device *gio_dev = to_gio_device(dev);
 	struct gio_driver *drv = to_gio_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(gio_dev);
-	return 0;
 }
 
 static void gio_device_shutdown(struct device *dev)
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
index 80fa0650736b..776d624a7207 100644
--- a/arch/parisc/kernel/drivers.c
+++ b/arch/parisc/kernel/drivers.c
@@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device *dev)
 	return rc;
 }
 
-static int __exit parisc_driver_remove(struct device *dev)
+static void __exit parisc_driver_remove(struct device *dev)
 {
 	struct parisc_device *pa_dev = to_parisc_device(dev);
 	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
+
 	if (pa_drv->remove)
 		pa_drv->remove(pa_dev);
-
-	return 0;
 }
 	
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..cc5774c64fae 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
 	return result;
 }
 
-static int ps3_system_bus_remove(struct device *_dev)
+static void ps3_system_bus_remove(struct device *_dev)
 {
 	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
 	struct ps3_system_bus_driver *drv;
@@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
 			__func__, __LINE__, drv->core.name);
 
 	pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->core));
-	return 0;
 }
 
 static void ps3_system_bus_shutdown(struct device *_dev)
diff --git a/arch/powerpc/platforms/pseries/ibmebus.c b/arch/powerpc/platforms/pseries/ibmebus.c
index c6c79ef55e13..7ee3ed7d6cc2 100644
--- a/arch/powerpc/platforms/pseries/ibmebus.c
+++ b/arch/powerpc/platforms/pseries/ibmebus.c
@@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct device *dev)
 	return error;
 }
 
-static int ibmebus_bus_device_remove(struct device *dev)
+static void ibmebus_bus_device_remove(struct device *dev)
 {
 	struct platform_device *of_dev = to_platform_device(dev);
 	struct platform_driver *drv = to_platform_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(of_dev);
-	return 0;
 }
 
 static void ibmebus_bus_device_shutdown(struct device *dev)
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..58283cecbd52 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
 }
 
 /* convert from struct device to struct vio_dev and pass to driver. */
-static int vio_bus_remove(struct device *dev)
+static void vio_bus_remove(struct device *dev)
 {
 	struct vio_dev *viodev = to_vio_dev(dev);
 	struct vio_driver *viodrv = to_vio_driver(dev->driver);
@@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
 		vio_cmo_bus_remove(viodev);
 
 	put_device(devptr);
-	return 0;
 }
 
 static void vio_bus_shutdown(struct device *dev)
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index ee24246d88fd..51f374e42869 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -1018,7 +1018,7 @@ static int acpi_device_probe(struct device *dev)
 	return 0;
 }
 
-static int acpi_device_remove(struct device *dev)
+static void acpi_device_remove(struct device *dev)
 {
 	struct acpi_device *acpi_dev = to_acpi_device(dev);
 	struct acpi_driver *acpi_drv = acpi_dev->driver;
@@ -1033,7 +1033,6 @@ static int acpi_device_remove(struct device *dev)
 	acpi_dev->driver_data = NULL;
 
 	put_device(dev);
-	return 0;
 }
 
 struct bus_type acpi_bus_type = {
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 939ca220bf78..962041148482 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
 	return ret;
 }
 
-static int amba_remove(struct device *dev)
+static void amba_remove(struct device *dev)
 {
 	struct amba_device *pcdev = to_amba_device(dev);
 	struct amba_driver *drv = to_amba_driver(dev->driver);
@@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
 
 	amba_put_disable_pclk(pcdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void amba_shutdown(struct device *dev)
diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
index adc199dfba3c..0c86f5bed9f4 100644
--- a/drivers/base/auxiliary.c
+++ b/drivers/base/auxiliary.c
@@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int auxiliary_bus_remove(struct device *dev)
+static void auxiliary_bus_remove(struct device *dev)
 {
 	struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev->driver);
 	struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
@@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
 	if (auxdrv->remove)
 		auxdrv->remove(auxdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void auxiliary_bus_shutdown(struct device *dev)
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
index aa4737667026..55e3ee2da98f 100644
--- a/drivers/base/isa.c
+++ b/drivers/base/isa.c
@@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int isa_bus_remove(struct device *dev)
+static void isa_bus_remove(struct device *dev)
 {
 	struct isa_driver *isa_driver = dev->platform_data;
 
 	if (isa_driver && isa_driver->remove)
 		isa_driver->remove(dev, to_isa_dev(dev)->id);
-
-	return 0;
 }
 
 static void isa_bus_shutdown(struct device *dev)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 8640578f45e9..a94b7f454881 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
 	return ret;
 }
 
-static int platform_remove(struct device *_dev)
+static void platform_remove(struct device *_dev)
 {
 	struct platform_driver *drv = to_platform_driver(_dev->driver);
 	struct platform_device *dev = to_platform_device(_dev);
@@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
 			dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n");
 	}
 	dev_pm_domain_detach(_dev, true);
-
-	return 0;
 }
 
 static void platform_shutdown(struct device *_dev)
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 6535614a7dc1..e076630d17bd 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
 
 static int bcma_bus_match(struct device *dev, struct device_driver *drv);
 static int bcma_device_probe(struct device *dev);
-static int bcma_device_remove(struct device *dev);
+static void bcma_device_remove(struct device *dev);
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env);
 
 static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf)
@@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
 	return err;
 }
 
-static int bcma_device_remove(struct device *dev)
+static void bcma_device_remove(struct device *dev)
 {
 	struct bcma_device *core = container_of(dev, struct bcma_device, dev);
 	struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
@@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
 	if (adrv->remove)
 		adrv->remove(core);
 	put_device(dev);
-
-	return 0;
 }
 
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
index d46db132d085..6f225dddc74f 100644
--- a/drivers/bus/sunxi-rsb.c
+++ b/drivers/bus/sunxi-rsb.c
@@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device *dev)
 	return drv->probe(rdev);
 }
 
-static int sunxi_rsb_device_remove(struct device *dev)
+static void sunxi_rsb_device_remove(struct device *dev)
 {
 	const struct sunxi_rsb_driver *drv = to_sunxi_rsb_driver(dev->driver);
 
 	drv->remove(to_sunxi_rsb_device(dev));
-
-	return 0;
 }
 
 static struct bus_type sunxi_rsb_bus = {
diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
index a2e4d54fc7bc..2b90b7c3b9d7 100644
--- a/drivers/cxl/core.c
+++ b/drivers/cxl/core.c
@@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
 	return to_cxl_drv(dev->driver)->probe(dev);
 }
 
-static int cxl_bus_remove(struct device *dev)
+static void cxl_bus_remove(struct device *dev)
 {
 	struct cxl_driver *cxl_drv = to_cxl_drv(dev->driver);
 
 	if (cxl_drv->remove)
 		cxl_drv->remove(dev);
-	return 0;
 }
 
 struct bus_type cxl_bus_type = {
diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index 5aee26e1bbd6..6cc4da4c713d 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int dax_bus_remove(struct device *dev)
+static void dax_bus_remove(struct device *dev)
 {
 	struct dax_device_driver *dax_drv = to_dax_drv(dev->driver);
 	struct dev_dax *dev_dax = to_dev_dax(dev);
 
 	if (dax_drv->remove)
 		dax_drv->remove(dev_dax);
-
-	return 0;
 }
 
 static struct bus_type dax_bus_type = {
diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
index 0460d58e3941..5a017c62c752 100644
--- a/drivers/dma/idxd/sysfs.c
+++ b/drivers/dma/idxd/sysfs.c
@@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
 	dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
 }
 
-static int idxd_config_bus_remove(struct device *dev)
+static void idxd_config_bus_remove(struct device *dev)
 {
 	int rc;
 
@@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device *dev)
 			dev_info(dev, "Device %s disabled\n", dev_name(dev));
 
 	}
-
-	return 0;
 }
 
 static void idxd_config_bus_shutdown(struct device *dev)
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index 68216988391f..90ed8fdaba75 100644
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
 	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
 }
 
-static int fw_unit_remove(struct device *dev)
+static void fw_unit_remove(struct device *dev)
 {
 	struct fw_driver *driver =
 			container_of(dev->driver, struct fw_driver, driver);
 
 	driver->remove(fw_unit(dev));
-
-	return 0;
 }
 
 static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
index 784cf0027da3..2682c3df651c 100644
--- a/drivers/firmware/arm_scmi/bus.c
+++ b/drivers/firmware/arm_scmi/bus.c
@@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
 	return scmi_drv->probe(scmi_dev);
 }
 
-static int scmi_dev_remove(struct device *dev)
+static void scmi_dev_remove(struct device *dev)
 {
 	struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
 	struct scmi_device *scmi_dev = to_scmi_dev(dev);
 
 	if (scmi_drv->remove)
 		scmi_drv->remove(scmi_dev);
-
-	return 0;
 }
 
 static struct bus_type scmi_bus_type = {
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
index dc83ea118c67..c52bcaa9def6 100644
--- a/drivers/firmware/google/coreboot_table.c
+++ b/drivers/firmware/google/coreboot_table.c
@@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int coreboot_bus_remove(struct device *dev)
+static void coreboot_bus_remove(struct device *dev)
 {
 	struct coreboot_device *device = CB_DEV(dev);
 	struct coreboot_driver *driver = CB_DRV(dev->driver);
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 static struct bus_type coreboot_bus_type = {
diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
index 511b20ff35a3..1ae6779a0dd6 100644
--- a/drivers/fpga/dfl.c
+++ b/drivers/fpga/dfl.c
@@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
 	return ddrv->probe(ddev);
 }
 
-static int dfl_bus_remove(struct device *dev)
+static void dfl_bus_remove(struct device *dev)
 {
 	struct dfl_driver *ddrv = to_dfl_drv(dev->driver);
 	struct dfl_device *ddev = to_dfl_dev(dev);
 
 	if (ddrv->remove)
 		ddrv->remove(ddev);
-
-	return 0;
 }
 
 static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 7db332139f7d..dbed2524fd47 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
 	return ret;
 }
 
-static int hid_device_remove(struct device *dev)
+static void hid_device_remove(struct device *dev)
 {
 	struct hid_device *hdev = to_hid_device(dev);
 	struct hid_driver *hdrv;
@@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
 
 	if (!hdev->io_started)
 		up(&hdev->driver_input_lock);
-
-	return 0;
 }
 
 static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
index f0802b047ed8..8a51bd9cd093 100644
--- a/drivers/hid/intel-ish-hid/ishtp/bus.c
+++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
@@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, struct device_driver *drv)
  *
  * Return: Return value from driver remove() call.
  */
-static int ishtp_cl_device_remove(struct device *dev)
+static void ishtp_cl_device_remove(struct device *dev)
 {
 	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
 	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev->driver);
@@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 /**
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 57bbbaa4e8f7..392c1ac4f819 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -922,7 +922,7 @@ static int vmbus_probe(struct device *child_device)
 /*
  * vmbus_remove - Remove a vmbus device
  */
-static int vmbus_remove(struct device *child_device)
+static void vmbus_remove(struct device *child_device)
 {
 	struct hv_driver *drv;
 	struct hv_device *dev = device_to_hv_device(child_device);
@@ -932,11 +932,8 @@ static int vmbus_remove(struct device *child_device)
 		if (drv->remove)
 			drv->remove(dev);
 	}
-
-	return 0;
 }
 
-
 /*
  * vmbus_shutdown - Shutdown a vmbus device
  */
diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
index 66eed2dff818..7e753a75d23b 100644
--- a/drivers/hwtracing/intel_th/core.c
+++ b/drivers/hwtracing/intel_th/core.c
@@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
 
 static void intel_th_device_remove(struct intel_th_device *thdev);
 
-static int intel_th_remove(struct device *dev)
+static void intel_th_remove(struct device *dev)
 {
 	struct intel_th_driver *thdrv = to_intel_th_driver(dev->driver);
 	struct intel_th_device *thdev = to_intel_th_device(dev);
@@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_active(dev);
 	pm_runtime_enable(dev);
-
-	return 0;
 }
 
 static struct bus_type intel_th_bus = {
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 84f12bf90644..54964fbe3f03 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
 	return status;
 }
 
-static int i2c_device_remove(struct device *dev)
+static void i2c_device_remove(struct device *dev)
 {
 	struct i2c_client	*client = to_i2c_client(dev);
 	struct i2c_adapter      *adap;
@@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
 	client->irq = 0;
 	if (client->flags & I2C_CLIENT_HOST_NOTIFY)
 		pm_runtime_put(&client->adapter->dev);
-
-	/* return always 0 because there is WIP to make remove-functions void */
-	return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index e2e12a5585e5..c3b4c677b442 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
 	return driver->probe(i3cdev);
 }
 
-static int i3c_device_remove(struct device *dev)
+static void i3c_device_remove(struct device *dev)
 {
 	struct i3c_device *i3cdev = dev_to_i3cdev(dev);
 	struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
@@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
 		driver->remove(i3cdev);
 
 	i3c_device_free_ibi(i3cdev);
-
-	return 0;
 }
 
 struct bus_type i3c_bus_type = {
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index 61fa7e724172..db58a01b23d3 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device *dev)
 	return gameport->drv ? 0 : -ENODEV;
 }
 
-static int gameport_driver_remove(struct device *dev)
+static void gameport_driver_remove(struct device *dev)
 {
 	struct gameport *gameport = to_gameport_port(dev);
 	struct gameport_driver *drv = to_gameport_driver(dev->driver);
 
 	drv->disconnect(gameport);
-	return 0;
 }
 
 static void gameport_attach_driver(struct gameport_driver *drv)
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 29f491082926..ec117be3d8d8 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -778,12 +778,11 @@ static int serio_driver_probe(struct device *dev)
 	return serio_connect_driver(serio, drv);
 }
 
-static int serio_driver_remove(struct device *dev)
+static void serio_driver_remove(struct device *dev)
 {
 	struct serio *serio = to_serio_port(dev);
 
 	serio_disconnect_driver(serio);
-	return 0;
 }
 
 static void serio_cleanup(struct serio *serio)
diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
index 7de9605cac4f..b1c3198355e7 100644
--- a/drivers/ipack/ipack.c
+++ b/drivers/ipack/ipack.c
@@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
 	return drv->ops->probe(dev);
 }
 
-static int ipack_bus_remove(struct device *device)
+static void ipack_bus_remove(struct device *device)
 {
 	struct ipack_device *dev = to_ipack_dev(device);
 	struct ipack_driver *drv = to_ipack_driver(device->driver);
 
 	if (drv->ops->remove)
 		drv->ops->remove(dev);
-
-	return 0;
 }
 
 static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c
index 49af60bdac92..c1fdf2896021 100644
--- a/drivers/macintosh/macio_asic.c
+++ b/drivers/macintosh/macio_asic.c
@@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
 	return error;
 }
 
-static int macio_device_remove(struct device *dev)
+static void macio_device_remove(struct device *dev)
 {
 	struct macio_dev * macio_dev = to_macio_device(dev);
 	struct macio_driver * drv = to_macio_driver(dev->driver);
@@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(macio_dev);
 	macio_dev_put(macio_dev);
-
-	return 0;
 }
 
 static void macio_device_shutdown(struct device *dev)
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index 38fbb3b59873..edf4ee6eff25 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
 	return ret;
 }
 
-static int mcb_remove(struct device *dev)
+static void mcb_remove(struct device *dev)
 {
 	struct mcb_driver *mdrv = to_mcb_driver(dev->driver);
 	struct mcb_device *mdev = to_mcb_device(dev);
@@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
 	module_put(carrier_mod);
 
 	put_device(&mdev->dev);
-
-	return 0;
 }
 
 static void mcb_shutdown(struct device *dev)
diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
index b730225ca887..a2b18e2bed1b 100644
--- a/drivers/media/pci/bt8xx/bttv-gpio.c
+++ b/drivers/media/pci/bt8xx/bttv-gpio.c
@@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
 	return sub->probe ? sub->probe(sdev) : -ENODEV;
 }
 
-static int bttv_sub_remove(struct device *dev)
+static void bttv_sub_remove(struct device *dev)
 {
 	struct bttv_sub_device *sdev = to_bttv_sub_dev(dev);
 	struct bttv_sub_driver *sub = to_bttv_sub_drv(dev->driver);
 
 	if (sub->remove)
 		sub->remove(sdev);
-	return 0;
 }
 
 struct bus_type bttv_sub_bus_type = {
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
index bb1065990aeb..660df7d269fa 100644
--- a/drivers/memstick/core/memstick.c
+++ b/drivers/memstick/core/memstick.c
@@ -91,7 +91,7 @@ static int memstick_device_probe(struct device *dev)
 	return rc;
 }
 
-static int memstick_device_remove(struct device *dev)
+static void memstick_device_remove(struct device *dev)
 {
 	struct memstick_dev *card = container_of(dev, struct memstick_dev,
 						  dev);
@@ -105,7 +105,6 @@ static int memstick_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
index eff9423e90f5..2fa592c37c6f 100644
--- a/drivers/mfd/mcp-core.c
+++ b/drivers/mfd/mcp-core.c
@@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
 	return drv->probe(mcp);
 }
 
-static int mcp_bus_remove(struct device *dev)
+static void mcp_bus_remove(struct device *dev)
 {
 	struct mcp *mcp = to_mcp(dev);
 	struct mcp_driver *drv = to_mcp_driver(dev->driver);
 
 	drv->remove(mcp);
-	return 0;
 }
 
 static struct bus_type mcp_bus_type = {
diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
index 935acc6bbf3c..3bf2bb4fd152 100644
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device *dev)
  *
  * Return:  0 on success; < 0 otherwise
  */
-static int mei_cl_device_remove(struct device *dev)
+static void mei_cl_device_remove(struct device *dev)
 {
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct mei_cl_driver *cldrv = to_mei_cl_driver(dev->driver);
@@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device *dev)
 
 	mei_cl_bus_module_put(cldev);
 	module_put(THIS_MODULE);
-
-	return 0;
 }
 
 static ssize_t name_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
index 667e574a7df2..52656fc87e99 100644
--- a/drivers/misc/tifm_core.c
+++ b/drivers/misc/tifm_core.c
@@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
 	return;
 }
 
-static int tifm_device_remove(struct device *dev)
+static void tifm_device_remove(struct device *dev)
 {
 	struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
 	struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
@@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index 4383c262b3f5..f6b7a9c5bbff 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
 	return drv->probe(card);
 }
 
-static int mmc_bus_remove(struct device *dev)
+static void mmc_bus_remove(struct device *dev)
 {
 	struct mmc_driver *drv = to_mmc_driver(dev->driver);
 	struct mmc_card *card = mmc_dev_to_card(dev);
 
 	drv->remove(card);
-
-	return 0;
 }
 
 static void mmc_bus_shutdown(struct device *dev)
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index 3d709029e07c..fda03b35c14a 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sdio_bus_remove(struct device *dev)
+static void sdio_bus_remove(struct device *dev)
 {
 	struct sdio_driver *drv = to_sdio_driver(dev->driver);
 	struct sdio_func *func = dev_to_sdio_func(dev);
@@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
 		pm_runtime_put_sync(dev);
 
 	dev_pm_domain_detach(dev, false);
-
-	return 0;
 }
 
 static const struct dev_pm_ops sdio_bus_pm_ops = {
diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
index ccec29970d5b..14b154929533 100644
--- a/drivers/net/netdevsim/bus.c
+++ b/drivers/net/netdevsim/bus.c
@@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
 	return nsim_dev_probe(nsim_bus_dev);
 }
 
-static int nsim_bus_remove(struct device *dev)
+static void nsim_bus_remove(struct device *dev)
 {
 	struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
 
 	nsim_dev_remove(nsim_bus_dev);
-	return 0;
 }
 
 static int nsim_num_vf(struct device *dev)
diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
index f8f75a504a58..27dd93deff6e 100644
--- a/drivers/ntb/core.c
+++ b/drivers/ntb/core.c
@@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_remove(struct device *dev)
+static void ntb_remove(struct device *dev)
 {
 	struct ntb_dev *ntb;
 	struct ntb_client *client;
@@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
 		client->ops.remove(client, ntb);
 		put_device(dev);
 	}
-
-	return 0;
 }
 
 static void ntb_dev_release(struct device *dev)
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 4a02561cfb96..a9b97ebc71ac 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_transport_bus_remove(struct device *dev)
+static void ntb_transport_bus_remove(struct device *dev)
 {
 	const struct ntb_transport_client *client;
 
@@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device *dev)
 	client->remove(dev);
 
 	put_device(dev);
-
-	return 0;
 }
 
 static struct bus_type ntb_transport_bus = {
diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
index e6aa87043a95..9dc7f3edd42b 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int nvdimm_bus_remove(struct device *dev)
+static void nvdimm_bus_remove(struct device *dev)
 {
 	struct nd_device_driver *nd_drv = to_nd_device_driver(dev->driver);
 	struct module *provider = to_bus_provider(dev);
@@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
 	dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver->name,
 			dev_name(dev));
 	module_put(provider);
-	return 0;
 }
 
 static void nvdimm_bus_shutdown(struct device *dev)
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index 4b9ad96bf1b2..502eb79cd551 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device *dev)
 	return driver->probe(epf);
 }
 
-static int pci_epf_device_remove(struct device *dev)
+static void pci_epf_device_remove(struct device *dev)
 {
 	struct pci_epf *epf = to_pci_epf(dev);
 	struct pci_epf_driver *driver = to_pci_epf_driver(dev->driver);
@@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device *dev)
 	if (driver->remove)
 		driver->remove(epf);
 	epf->driver = NULL;
-
-	return 0;
 }
 
 static struct bus_type pci_epf_bus_type = {
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3a72352aa5cf..a0615395500a 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
 	return error;
 }
 
-static int pci_device_remove(struct device *dev)
+static void pci_device_remove(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_driver *drv = pci_dev->driver;
@@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
 	 */
 
 	pci_dev_put(pci_dev);
-	return 0;
 }
 
 static void pci_device_shutdown(struct device *dev)
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index bd81aa64d011..5bd1b80424e7 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
 	return;
 }
 
-static int pcmcia_device_remove(struct device *dev)
+static void pcmcia_device_remove(struct device *dev)
 {
 	struct pcmcia_device *p_dev;
 	struct pcmcia_driver *p_drv;
@@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device *dev)
 	/* references from pcmcia_device_probe */
 	pcmcia_put_dev(p_dev);
 	module_put(p_drv->owner);
-
-	return 0;
 }
 
 
diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c
index 0169677c243e..0a40dd9c94ed 100644
--- a/drivers/platform/surface/aggregator/bus.c
+++ b/drivers/platform/surface/aggregator/bus.c
@@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
 		->probe(to_ssam_device(dev));
 }
 
-static int ssam_bus_remove(struct device *dev)
+static void ssam_bus_remove(struct device *dev)
 {
 	struct ssam_device_driver *sdrv = to_ssam_device_driver(dev->driver);
 
 	if (sdrv->remove)
 		sdrv->remove(to_ssam_device(dev));
-
-	return 0;
 }
 
 struct bus_type ssam_bus_type = {
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 62e0d56a3332..a76313006bdc 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int wmi_dev_remove(struct device *dev)
+static void wmi_dev_remove(struct device *dev)
 {
 	struct wmi_block *wblock = dev_to_wblock(dev);
 	struct wmi_driver *wdriver =
@@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
 
 	if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
 		dev_warn(dev, "failed to disable device\n");
-
-	return 0;
 }
 
 static struct class wmi_bus_class = {
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index c29d590c5e4f..cc6757dfa3f1 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
 	return error;
 }
 
-static int pnp_device_remove(struct device *dev)
+static void pnp_device_remove(struct device *dev)
 {
 	struct pnp_dev *pnp_dev = to_pnp_dev(dev);
 	struct pnp_driver *drv = pnp_dev->driver;
@@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
 		pnp_disable_dev(pnp_dev);
 
 	pnp_device_detach(pnp_dev);
-	return 0;
 }
 
 static void pnp_device_shutdown(struct device *dev)
diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c
index 72874153972e..a72bb0a40fcf 100644
--- a/drivers/rapidio/rio-driver.c
+++ b/drivers/rapidio/rio-driver.c
@@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
  * driver, then run the driver remove() method.  Then update
  * the reference count.
  */
-static int rio_device_remove(struct device *dev)
+static void rio_device_remove(struct device *dev)
 {
 	struct rio_dev *rdev = to_rio_dev(dev);
 	struct rio_driver *rdrv = rdev->driver;
@@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
 	}
 
 	rio_dev_put(rdev);
-
-	return 0;
 }
 
 static void rio_device_shutdown(struct device *dev)
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index c1404d3dae2c..7f6fac618ab2 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
 	return err;
 }
 
-static int rpmsg_dev_remove(struct device *dev)
+static void rpmsg_dev_remove(struct device *dev)
 {
 	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
 	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
@@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
 
 	if (rpdev->ept)
 		rpmsg_destroy_ept(rpdev->ept);
-
-	return err;
 }
 
 static struct bus_type rpmsg_bus = {
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 5b3a20a140f9..58f69366bdcc 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device *dev)
 	return error;
 }
 
-static int sdebug_driver_remove(struct device *dev)
+static void sdebug_driver_remove(struct device *dev)
 {
 	struct sdebug_host_info *sdbg_host;
 	struct sdebug_dev_info *sdbg_devinfo, *tmp;
@@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device *dev)
 	}
 
 	scsi_host_put(sdbg_host->shost);
-	return 0;
 }
 
 static int pseudo_lld_bus_match(struct device *dev,
diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
index 1794ff0106bc..7c4f32d76966 100644
--- a/drivers/siox/siox-core.c
+++ b/drivers/siox/siox-core.c
@@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
 	return sdriver->probe(sdevice);
 }
 
-static int siox_remove(struct device *dev)
+static void siox_remove(struct device *dev)
 {
 	struct siox_driver *sdriver =
 		container_of(dev->driver, struct siox_driver, driver);
@@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
 
 	if (sdriver->remove)
 		sdriver->remove(sdevice);
-
-	return 0;
 }
 
 static void siox_shutdown(struct device *dev)
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 1d2bc181da05..78480e332ab8 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
 	return ret;
 }
 
-static int slim_device_remove(struct device *dev)
+static void slim_device_remove(struct device *dev)
 {
 	struct slim_device *sbdev = to_slim_device(dev);
 	struct slim_driver *sbdrv;
@@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
 		if (sbdrv->remove)
 			sbdrv->remove(sbdev);
 	}
-
-	return 0;
 }
 
 static int slim_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
index 7abfc8c4fdc7..475a57b435b2 100644
--- a/drivers/soc/qcom/apr.c
+++ b/drivers/soc/qcom/apr.c
@@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int apr_device_remove(struct device *dev)
+static void apr_device_remove(struct device *dev)
 {
 	struct apr_device *adev = to_apr_device(dev);
 	struct apr_driver *adrv;
@@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
 		idr_remove(&apr->svcs_idr, adev->svc_id);
 		spin_unlock(&apr->svcs_lock);
 	}
-
-	return 0;
 }
 
 static int apr_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index c99181165321..ad2b558dc9cb 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
 	return ret;
 }
 
-static int spi_remove(struct device *dev)
+static void spi_remove(struct device *dev)
 {
 	const struct spi_driver		*sdrv = to_spi_driver(dev->driver);
 
@@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
 	}
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void spi_shutdown(struct device *dev)
diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
index 51f5aeb65b3b..b37ead9e2fad 100644
--- a/drivers/spmi/spmi.c
+++ b/drivers/spmi/spmi.c
@@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
 	return err;
 }
 
-static int spmi_drv_remove(struct device *dev)
+static void spmi_drv_remove(struct device *dev)
 {
 	const struct spmi_driver *sdrv = to_spmi_driver(dev->driver);
 
@@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
-	return 0;
 }
 
 static void spmi_drv_shutdown(struct device *dev)
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 3a29b5570f9f..8a93c83cb6f8 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device *dev)
 		ssb_drv->shutdown(ssb_dev);
 }
 
-static int ssb_device_remove(struct device *dev)
+static void ssb_device_remove(struct device *dev)
 {
 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
@@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
 	if (ssb_drv && ssb_drv->remove)
 		ssb_drv->remove(ssb_dev);
 	ssb_device_put(ssb_dev);
-
-	return 0;
 }
 
 static int ssb_device_probe(struct device *dev)
diff --git a/drivers/staging/fieldbus/anybuss/host.c b/drivers/staging/fieldbus/anybuss/host.c
index 0f730efe9a6d..8a75f6642c78 100644
--- a/drivers/staging/fieldbus/anybuss/host.c
+++ b/drivers/staging/fieldbus/anybuss/host.c
@@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int anybus_bus_remove(struct device *dev)
+static void anybus_bus_remove(struct device *dev)
 {
 	struct anybuss_client_driver *adrv =
 		to_anybuss_client_driver(dev->driver);
 
 	if (adrv->remove)
 		adrv->remove(to_anybuss_client(dev));
-
-	return 0;
 }
 
 static struct bus_type anybus_bus = {
diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c
index 13d319860da5..5a5c17a4519b 100644
--- a/drivers/staging/greybus/gbphy.c
+++ b/drivers/staging/greybus/gbphy.c
@@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int gbphy_dev_remove(struct device *dev)
+static void gbphy_dev_remove(struct device *dev)
 {
 	struct gbphy_driver *gbphy_drv = to_gbphy_driver(dev->driver);
 	struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
@@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
 	pm_runtime_dont_use_autosuspend(dev);
-
-	return 0;
 }
 
 static struct bus_type gbphy_bus_type = {
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 6d0b0e67e79e..cbb2118fb35e 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m, struct Scsi_Host *host)
 }
 
 static int tcm_loop_driver_probe(struct device *);
-static int tcm_loop_driver_remove(struct device *);
+static void tcm_loop_driver_remove(struct device *);
 
 static int pseudo_lld_bus_match(struct device *dev,
 				struct device_driver *dev_driver)
@@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device *dev)
 	return 0;
 }
 
-static int tcm_loop_driver_remove(struct device *dev)
+static void tcm_loop_driver_remove(struct device *dev)
 {
 	struct tcm_loop_hba *tl_hba;
 	struct Scsi_Host *sh;
@@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device *dev)
 
 	scsi_remove_host(sh);
 	scsi_host_put(sh);
-	return 0;
 }
 
 static void tcm_loop_release_adapter(struct device *dev)
diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
index a062befcb3b2..7018d959f775 100644
--- a/drivers/thunderbolt/domain.c
+++ b/drivers/thunderbolt/domain.c
@@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
 	return driver->probe(svc, id);
 }
 
-static int tb_service_remove(struct device *dev)
+static void tb_service_remove(struct device *dev)
 {
 	struct tb_service *svc = tb_to_service(dev);
 	struct tb_service_driver *driver;
@@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
 	driver = container_of(dev->driver, struct tb_service_driver, driver);
 	if (driver->remove)
 		driver->remove(svc);
-
-	return 0;
 }
 
 static void tb_service_shutdown(struct device *dev)
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 9cdfcfe07e87..92498961fd92 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int serdev_drv_remove(struct device *dev)
+static void serdev_drv_remove(struct device *dev)
 {
 	const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
 	if (sdrv->remove)
 		sdrv->remove(to_serdev_device(dev));
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static struct bus_type serdev_bus_type = {
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 7e13b74e60e5..4169cf40a03b 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
 	return drv->probe(to_ulpi_dev(dev));
 }
 
-static int ulpi_remove(struct device *dev)
+static void ulpi_remove(struct device *dev)
 {
 	struct ulpi_driver *drv = to_ulpi_driver(dev->driver);
 
 	if (drv->remove)
 		drv->remove(to_ulpi_dev(dev));
-
-	return 0;
 }
 
 static struct bus_type ulpi_bus = {
diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
index 7133818a58b9..9e38142acd38 100644
--- a/drivers/usb/serial/bus.c
+++ b/drivers/usb/serial/bus.c
@@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device *dev)
 	return retval;
 }
 
-static int usb_serial_device_remove(struct device *dev)
+static void usb_serial_device_remove(struct device *dev)
 {
 	struct usb_serial_port *port = to_usb_serial_port(dev);
 	struct usb_serial_driver *driver;
@@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device *dev)
 
 	if (!autopm_err)
 		usb_autopm_put_interface(port->serial->interface);
-
-	return 0;
 }
 
 static ssize_t new_id_store(struct device_driver *driver,
diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
index 7f3c9a8e2bf0..78e0e78954f2 100644
--- a/drivers/usb/typec/bus.c
+++ b/drivers/usb/typec/bus.c
@@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
 	return ret;
 }
 
-static int typec_remove(struct device *dev)
+static void typec_remove(struct device *dev)
 {
 	struct typec_altmode_driver *drv = to_altmode_driver(dev->driver);
 	struct typec_altmode *adev = to_typec_altmode(dev);
@@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
 
 	adev->desc = NULL;
 	adev->ops = NULL;
-
-	return 0;
 }
 
 struct bus_type typec_bus = {
diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
index bb3f1d1f0422..3fc4525fc05c 100644
--- a/drivers/vdpa/vdpa.c
+++ b/drivers/vdpa/vdpa.c
@@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
 	return ret;
 }
 
-static int vdpa_dev_remove(struct device *d)
+static void vdpa_dev_remove(struct device *d)
 {
 	struct vdpa_device *vdev = dev_to_vdpa(d);
 	struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver);
 
 	if (drv && drv->remove)
 		drv->remove(vdev);
-
-	return 0;
 }
 
 static struct bus_type vdpa_bus = {
diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_driver.c
index c368ec824e2b..e2cb1ff56f6c 100644
--- a/drivers/vfio/mdev/mdev_driver.c
+++ b/drivers/vfio/mdev/mdev_driver.c
@@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
 	return ret;
 }
 
-static int mdev_remove(struct device *dev)
+static void mdev_remove(struct device *dev)
 {
 	struct mdev_driver *drv =
 		container_of(dev->driver, struct mdev_driver, driver);
@@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
 		drv->remove(mdev);
 
 	mdev_detach_iommu(mdev);
-
-	return 0;
 }
 
 static int mdev_match(struct device *dev, struct device_driver *drv)
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index 4b15c00c0a0a..2a6055c0d4d3 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
 
 }
 
-static int virtio_dev_remove(struct device *_d)
+static void virtio_dev_remove(struct device *_d)
 {
 	struct virtio_device *dev = dev_to_virtio(_d);
 	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
@@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
 
 	/* Acknowledge the device's existence again. */
 	virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
-	return 0;
 }
 
 static struct bus_type virtio_bus = {
diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
index 1b15afea28ee..8dba20186be3 100644
--- a/drivers/vme/vme.c
+++ b/drivers/vme/vme.c
@@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
 	return -ENODEV;
 }
 
-static int vme_bus_remove(struct device *dev)
+static void vme_bus_remove(struct device *dev)
 {
 	struct vme_driver *driver;
 	struct vme_dev *vdev = dev_to_vme_dev(dev);
@@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
 	driver = dev->platform_data;
 	if (driver->remove)
 		driver->remove(vdev);
-
-	return 0;
 }
 
 struct bus_type vme_bus_type = {
diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
index 2a93b7c9c159..2754bdfadcb8 100644
--- a/drivers/xen/xenbus/xenbus.h
+++ b/drivers/xen/xenbus/xenbus.h
@@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
 
 int xenbus_match(struct device *_dev, struct device_driver *_drv);
 int xenbus_dev_probe(struct device *_dev);
-int xenbus_dev_remove(struct device *_dev);
+void xenbus_dev_remove(struct device *_dev);
 int xenbus_register_driver_common(struct xenbus_driver *drv,
 				  struct xen_bus_type *bus,
 				  struct module *owner,
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 97f0d234482d..f4f52d574df9 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -326,7 +326,7 @@ int xenbus_dev_probe(struct device *_dev)
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_probe);
 
-int xenbus_dev_remove(struct device *_dev)
+void xenbus_dev_remove(struct device *_dev)
 {
 	struct xenbus_device *dev = to_xenbus_device(_dev);
 	struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
@@ -356,8 +356,6 @@ int xenbus_dev_remove(struct device *_dev)
 	if (!drv->allow_rebind ||
 	    xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)
 		xenbus_switch_state(dev, XenbusStateClosed);
-
-	return 0;
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_remove);
 
diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
index 1ea5e1d1545b..062777a45a74 100644
--- a/include/linux/device/bus.h
+++ b/include/linux/device/bus.h
@@ -91,7 +91,7 @@ struct bus_type {
 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
 	int (*probe)(struct device *dev);
 	void (*sync_state)(struct device *dev);
-	int (*remove)(struct device *dev);
+	void (*remove)(struct device *dev);
 	void (*shutdown)(struct device *dev);
 
 	int (*online)(struct device *dev);
diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
index 002fb5bf220b..c9579d97fbab 100644
--- a/sound/aoa/soundbus/core.c
+++ b/sound/aoa/soundbus/core.c
@@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return retval;
 }
 
-static int soundbus_device_remove(struct device *dev)
+static void soundbus_device_remove(struct device *dev)
 {
 	struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
 	struct soundbus_driver * drv = to_soundbus_driver(dev->driver);
@@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(soundbus_dev);
 	soundbus_dev_put(soundbus_dev);
-
-	return 0;
 }
 
 static void soundbus_device_shutdown(struct device *dev)

base-commit: 79160a603bdb51916226caf4a6616cc4e1c58a58
prerequisite-patch-id: e5c7b97ea399fddc2695e8cf5d0c02d14175abac
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:33:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:33:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150995.279143 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOS-0007aS-C2; Tue, 06 Jul 2021 10:33:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150995.279143; Tue, 06 Jul 2021 10:33:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOS-0007Zo-6r; Tue, 06 Jul 2021 10:33:32 +0000
Received: by outflank-mailman (input) for mailman id 150995;
 Tue, 06 Jul 2021 10:22:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=zoFp=L6=kernel.org=broonie@srs-us1.protection.inumbo.net>)
 id 1m0iDk-0005RS-5n
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:22:28 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 31956acf-56f6-44da-a55f-96844e0fc557;
 Tue, 06 Jul 2021 10:22:27 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 46675619A2;
 Tue,  6 Jul 2021 10:22:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 31956acf-56f6-44da-a55f-96844e0fc557
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625566946;
	bh=CVw0hKyMav3rIRaqV9zNgy7mU4Mw36sPMSvkirDCWbw=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=Oy+mHp7honxzQyOE+wiK41kmp6JUhn55W2wKSp+Vbq/T3tSaJx6stV0fB6qfwxpuH
	 TZMucp2PpXSBWZZ8UuwZi0VErfdCkgx9V9lzMcIIVDbwZ6uoJBpnGqRW6TTGOLGPYG
	 UZlgH6BlJ1UcUXPyUgWEQPmEIm5h5aEhRvJ5dQI9JFByS/LCYVZRwDSup+oN35CuLQ
	 o6cRp/OvagxKTRqp1mZcWbXtiL+0BErueKp5LxgqFHu+8lCzy/LfC12ocG23wWxgEy
	 fwSWUWEZxeGd21itz7GPzm0iIksLONvOP0BBIC/IQaAHE+fWWwMn/rZdpJvXYfuX0L
	 B7JCQob2OHz4A==
Date: Tue, 6 Jul 2021 11:21:53 +0100
From: Mark Brown <broonie@kernel.org>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Stephen Boyd <sboyd@kernel.org>,
	Michael Buesch <m@bues.ch>, Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <20210706102153.GA4529@sirena.org.uk>
Mail-Followup-To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	kernel@pengutronix.de, linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Stephen Boyd <sboyd@kernel.org>,
	Michael Buesch <m@bues.ch>, Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="h31gzZEtNLTqOjlF"
Content-Disposition: inline
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
X-Cookie: Some restrictions may apply.
User-Agent: Mutt/1.10.1 (2018-07-13)


--h31gzZEtNLTqOjlF
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 06, 2021 at 11:50:37AM +0200, Uwe Kleine-K=F6nig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.

Acked-by: Mark Brown <broonie@kernel.org>

--h31gzZEtNLTqOjlF
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmDkLsEACgkQJNaLcl1U
h9DTPwf+KbK6BlKGymyR/lS6jHNFzqdjZJtNgnrGCAQPShECrFWEoT+hh+wbGftz
+dyPIG3olrPCj20bdTdirf0mN6fK5b1ws7Y51Pl5kFKWSF9anPqHvugsBWlktrLI
ZQGpHaOaDBzTO9z+a88du417htx2DY8Y84yObqoGeFEMODdEwf+d7aWTAsAumvEd
W3tqktVLL+RKuqiM2ppKuMZRdRGwtv8d+Mo44RUmPtQGuj5slIJU22Ew0Nrn/eyI
xRq4Q2GeqkJQJWsXmJ+C6hMJvgdnisNu+4eaDrkhaY/V36HQFRMl+PUAdt0W1ayI
ftXC4GrcHhpLlLwnb8FUQzYy+hMN1g==
=PinY
-----END PGP SIGNATURE-----

--h31gzZEtNLTqOjlF--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:33:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:33:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150997.279159 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOj-0008Oo-Nk; Tue, 06 Jul 2021 10:33:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150997.279159; Tue, 06 Jul 2021 10:33:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOj-0008Oh-KP; Tue, 06 Jul 2021 10:33:49 +0000
Received: by outflank-mailman (input) for mailman id 150997;
 Tue, 06 Jul 2021 10:25:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=idPM=L6=kernel.org=pali@srs-us1.protection.inumbo.net>)
 id 1m0iGy-0005Tu-8V
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:25:48 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 86d60786-de44-11eb-8483-12813bfff9fa;
 Tue, 06 Jul 2021 10:25:47 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 1F9FB619A9;
 Tue,  6 Jul 2021 10:25:45 +0000 (UTC)
Received: by pali.im (Postfix)
 id 93CEB6E9; Tue,  6 Jul 2021 12:25:42 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 86d60786-de44-11eb-8483-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625567145;
	bh=V+uGgWI7ODWDPnX93N2q4QxlyZDaMh1bjqAqdpBNoN4=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=maDtNYbjZpDD0PKjc4+nM3Y213Akod8ccrNcZVsiy5KPtneyyahoRaDB5AbMrAwYJ
	 m6oMoU+hcgZXNuCsoc9yJ2+bzIoCnRHsti/6uqBP8DKnPnXcD/khw96G8CUsBlPlvR
	 uf0MJVwBY0fA5Npz0MHmvhwpdr+Wv2TOZMh4BI+fP5OWpWrOVsQ5Dquu1HsKCQm/Z3
	 7bqMd9M3OziVf290y6vu/n9lxKpsWMkO6NowOo/L+CwTy3kWF456W471Gj/HhlY3go
	 paE6+JOD9eP6KydGYz0nficgDNBo/ZvaGMWNwDkXP9s9hxxto+00KpCpg6+2NdC4+K
	 HB6sMk/Pez8VQ==
Date: Tue, 6 Jul 2021 12:25:42 +0200
From: Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <20210706102542.7lzvb6nm4ztmlarl@pali>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
User-Agent: NeoMutt/20180716

On Tuesday 06 July 2021 11:50:37 Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

Acked-by: Pali Rohár <pali@kernel.org>

> ---
> Hello,
> 
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutronix.de.
> 
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.
> 
> I send this mail to all people that get_maintainer.pl emits for this
> patch. I wonder how many recipents will refuse this mail because of the
> long Cc: list :-)
> 
> Best regards
> Uwe


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:33:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:33:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.150999.279165 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOk-0008Rl-4v; Tue, 06 Jul 2021 10:33:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 150999.279165; Tue, 06 Jul 2021 10:33:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOj-0008Qv-T6; Tue, 06 Jul 2021 10:33:49 +0000
Received: by outflank-mailman (input) for mailman id 150999;
 Tue, 06 Jul 2021 10:27:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BEGw=L6=kernel.org=mchehab@srs-us1.protection.inumbo.net>)
 id 1m0iIE-0005Uv-R5
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:27:06 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 700e6c70-2c8d-4860-bcf4-2534a6ab8166;
 Tue, 06 Jul 2021 10:27:06 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 67D94619A5;
 Tue,  6 Jul 2021 10:26:34 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 700e6c70-2c8d-4860-bcf4-2534a6ab8166
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625567225;
	bh=0Vco6bcsV+Des5dnB/IHP43/fsWcFHTPga6X4P0iyiI=;
	h=Date:From:To:Cc:Subject:In-Reply-To:References:From;
	b=MJ47WOBtCFnBMrkhOv+LFd3d2n5QIFWUez/HdhcKSgj7hDo7O0eQPQO5H1okLYNyY
	 WRHGLatcUEVgmIJR5BCR7gEfLHN7Lv0rc0YJ5MyF740i+lCi8D4V+MGNYVLcohzTMs
	 AfQKJwNYwrk/3LHkBQb8ARTgdmp51CHltJ3T5fWM60xGKOpwPUaG1eqdKH5Upw0qVs
	 s7qgJDHkhXgsuZf0dm36DQ+Su4NaRp8y0KTbqHcRHQh4sMzfcc9GcElEIURZcXDone
	 /RqrSOsALErH8v8KBG/HSN0T6lH+qCDwKWZm1izYVpvXQqH5K2135N2PlYwMDGoyI2
	 kPGtTEoLasdOg==
Date: Tue, 6 Jul 2021 12:26:31 +0200
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Uwe =?UTF-8?B?S2xlaW5lLUvDtm5pZw==?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
 linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>, Thomas
 Bogendoerfer <tsbogend@alpha.franken.de>, "James E.J. Bottomley"
 <James.Bottomley@HansenPartnership.com>, Helge Deller <deller@gmx.de>,
 Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras
 <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown
 <lenb@kernel.org>, William Breathitt Gray <vilhelm.gray@gmail.com>,
 =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, Maxime Ripard
 <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec
 <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>, Dan Williams
 <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>, Vinod Koul
 <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep
 Holla <sudeep.holla@arm.com>, Cristian Marussi <cristian.marussi@arm.com>,
 Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, Moritz Fischer
 <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>, Benjamin Tissoires
 <benjamin.tissoires@redhat.com>, Srinivas Pandruvada
 <srinivas.pandruvada@linux.intel.com>, "K. Y. Srinivasan"
 <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, Stephen
 Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, Dexuan
 Cui <decui@microsoft.com>, Alexander Shishkin
 <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
 <dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
 <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>, Maxim Levitsky
 <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, Ulf Hansson
 <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, Tomas Winkler
 <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski
 <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason
 <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I
 <kishon@ti.com>, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, Krzysztof
 =?UTF-8?B?V2lsY3p5xYRza2k=?= <kw@linux.com>, Bjorn Helgaas
 <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>, Matt Porter
 <mporter@kernel.crashing.org>, Alexandre Bounine <alex.bou9@gmail.com>,
 Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson
 <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>,
 "Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer
 <t.scherer@eckelmann.de>, Srinivas Kandagatla
 <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, Mark
 Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch
 <m@bues.ch>, Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold
 <johan@kernel.org>, Alex Elder <elder@kernel.org>, Andreas Noever
 <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, Mika
 Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat
 <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri Slaby
 <jirislaby@kernel.org>, Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson
 <alex.williamson@redhat.com>, Cornelia Huck <cohuck@redhat.com>, Martyn
 Welch <martyn@welchs.me.uk>, Manohar Vanga <manohar.vanga@gmail.com>, Boris
 Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Johannes Berg
 <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, Takashi Iwai
 <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler
 <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland
 <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, Alexey
 Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng <kai.heng.feng@canonical.com>,
 Joey Pabalan <jpabalanb@gmail.com>, Pali =?UTF-8?B?Um9ow6Fy?=
 <pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>, Frank Li
 <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien
 Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <20210706122631.463bc671@coco.lan>
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-redhat-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Em Tue,  6 Jul 2021 11:50:37 +0200
Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de> escreveu:

> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>=20
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>=20
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>=20
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
>=20
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutro=
nix.de.
>=20
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.
>=20
> I send this mail to all people that get_maintainer.pl emits for this
> patch. I wonder how many recipents will refuse this mail because of the
> long Cc: list :-)
>=20
> Best regards
> Uwe
>=20

> diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8x=
x/bttv-gpio.c
> index b730225ca887..a2b18e2bed1b 100644
> --- a/drivers/media/pci/bt8xx/bttv-gpio.c
> +++ b/drivers/media/pci/bt8xx/bttv-gpio.c
> @@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
>  	return sub->probe ? sub->probe(sdev) : -ENODEV;
>  }
> =20
> -static int bttv_sub_remove(struct device *dev)
> +static void bttv_sub_remove(struct device *dev)
>  {
>  	struct bttv_sub_device *sdev =3D to_bttv_sub_dev(dev);
>  	struct bttv_sub_driver *sub =3D to_bttv_sub_drv(dev->driver);
> =20
>  	if (sub->remove)
>  		sub->remove(sdev);
> -	return 0;
>  }
> =20

Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> # for drivers/media


Thanks,
Mauro


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:33:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:33:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151012.279170 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOk-0008W8-Fk; Tue, 06 Jul 2021 10:33:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151012.279170; Tue, 06 Jul 2021 10:33:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iOk-0008UD-63; Tue, 06 Jul 2021 10:33:50 +0000
Received: by outflank-mailman (input) for mailman id 151012;
 Tue, 06 Jul 2021 10:32:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lij/=L6=gmail.com=wens213@srs-us1.protection.inumbo.net>)
 id 1m0iNS-0007Tg-9h
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:32:30 +0000
Received: from mail-lf1-f45.google.com (unknown [209.85.167.45])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 767c00b0-de45-11eb-8483-12813bfff9fa;
 Tue, 06 Jul 2021 10:32:29 +0000 (UTC)
Received: by mail-lf1-f45.google.com with SMTP id c28so14048880lfp.11
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 03:32:29 -0700 (PDT)
Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com.
 [209.85.167.47])
 by smtp.gmail.com with ESMTPSA id i23sm1349984lfv.142.2021.07.06.03.32.28
 for <xen-devel@lists.xenproject.org>
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 06 Jul 2021 03:32:28 -0700 (PDT)
Received: by mail-lf1-f47.google.com with SMTP id a18so37436788lfs.10
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 03:32:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 767c00b0-de45-11eb-8483-12813bfff9fa
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:reply-to
         :from:date:message-id:subject:to:cc:content-transfer-encoding;
        bh=QFd4cSgjRlNs6aAHRKVeotkaIh4ASKGZEfmqK4rh/rE=;
        b=HJfoX/0STwhKdLBQkLE1eg8UqEaHnV8cbzXcJlPuUReyAxDHLFKzUDPbjyIJq15mvj
         XwxQPv0A5EfByX7zei1v1bOlngqWirrIrV1l8FIouNR5qv16BJltzJSu9w+ElYtnZ8qn
         KftJxrR4qqB/FUf0BuwZJdEiwg8x0Lm9AduUGlQA2fz8+vkn8jzumjNZcr0A0vnTxp70
         IjWpl8UnxOulIOLdYEUiINhAiLQeASjzRFH7memFkoZbEy+Lo+yJ1QMdCs+P7H3HxSLL
         LxOD8TN+2/OPhKkWiVyzcHPJW4Se+BmjzIVit/VJ+Pam2JqqGVeS/qy4VR3WgGCcHaP+
         WcUg==
X-Gm-Message-State: AOAM531ppIptL2tfBr3FzHM/QaxEZJakw18GH9tIkX24e+mH73hkjyfc
	7tjjj/ZB2jA1ePsTDKc1NjsRllMnndZOSUOX7zs=
X-Google-Smtp-Source: ABdhPJwqhtD9JmSKYr78ljAJ8eX0S4oIwVVkru5y/jc/ei0g2tyOR1xw95a0tv/9+FCJHFC6Xcr98A==
X-Received: by 2002:a19:c3c1:: with SMTP id t184mr14458496lff.134.1625567548158;
        Tue, 06 Jul 2021 03:32:28 -0700 (PDT)
X-Received: by 2002:a2e:1409:: with SMTP id u9mr9759960ljd.94.1625567102788;
 Tue, 06 Jul 2021 03:25:02 -0700 (PDT)
MIME-Version: 1.0
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Reply-To: wens@csie.org
From: Chen-Yu Tsai <wens@csie.org>
Date: Tue, 6 Jul 2021 18:24:51 +0800
X-Gmail-Original-Message-ID: <CAGb2v65WCwDkCzf26urwM91nEWGPAzMHSMFX73WQsFQoWhr8JA@mail.gmail.com>
Message-ID: <CAGb2v65WCwDkCzf26urwM91nEWGPAzMHSMFX73WQsFQoWhr8JA@mail.gmail.com>
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sascha Hauer <kernel@pengutronix.de>, 
	linux-kernel <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Jernej Skrabec <jernej.skrabec@gmail.com>, 
	Alison Schofield <alison.schofield@intel.com>, Vishal Verma <vishal.l.verma@intel.com>, 
	Ira Weiny <ira.weiny@intel.com>, Ben Widawsky <ben.widawsky@intel.com>, 
	Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>, 
	Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>, 
	Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi <cristian.marussi@arm.com>, 
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, 
	Jiri Kosina <jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, 
	Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, 
	Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, 
	Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, 
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>, 
	Heikki Krogerus <heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>, 
	Jason Wang <jasowang@redhat.com>, Kirti Wankhede <kwankhede@nvidia.com>, 
	Alex Williamson <alex.williamson@redhat.com>, Cornelia Huck <cohuck@redhat.com>, 
	Martyn Welch <martyn@welchs.me.uk>, Manohar Vanga <manohar.vanga@gmail.com>, 
	Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, 
	Stefano Stabellini <sstabellini@kernel.org>, Johannes Berg <johannes@sipsolutions.net>, 
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, 
	Tyrel Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, 
	Samuel Holland <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, 
	Alexey Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng <kai.heng.feng@canonical.com>, 
	Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, linux-arm-kernel <linux-arm-kernel@lists.infradead.org>, 
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, 
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, 
	linux-wireless <linux-wireless@vger.kernel.org>, linux-sunxi@lists.linux.dev, 
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, 
	"open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM" <dmaengine@vger.kernel.org>, linux1394-devel@lists.sourceforge.net, 
	linux-fpga@vger.kernel.org, linux-input@vger.kernel.org, 
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org, 
	linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net, 
	Linux Media Mailing List <linux-media@vger.kernel.org>, linux-mmc <linux-mmc@vger.kernel.org>, 
	netdev <netdev@vger.kernel.org>, linux-ntb@googlegroups.com, 
	PCI <linux-pci@vger.kernel.org>, platform-driver-x86@vger.kernel.org, 
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org, 
	Linux-ALSA <alsa-devel@alsa-project.org>, linux-arm-msm <linux-arm-msm@vger.kernel.org>, 
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	linux-usb <linux-usb@vger.kernel.org>, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, 
	xen-devel@lists.xenproject.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 6, 2021 at 5:54 PM Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
>
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutro=
nix.de.
>
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.
>
> I send this mail to all people that get_maintainer.pl emits for this
> patch. I wonder how many recipents will refuse this mail because of the
> long Cc: list :-)
>
> Best regards
> Uwe
>

>  drivers/bus/sunxi-rsb.c                   | 4 +---

Acked-by: Chen-Yu Tsai <wens@csie.org>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:36:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:36:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151041.279193 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iQo-0002Hw-48; Tue, 06 Jul 2021 10:35:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151041.279193; Tue, 06 Jul 2021 10:35:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iQo-0002Hp-1D; Tue, 06 Jul 2021 10:35:58 +0000
Received: by outflank-mailman (input) for mailman id 151041;
 Tue, 06 Jul 2021 10:35:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+tQg=L6=linaro.org=lee.jones@srs-us1.protection.inumbo.net>)
 id 1m0iQm-0002Hj-Rr
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:35:56 +0000
Received: from mail-wr1-x42b.google.com (unknown [2a00:1450:4864:20::42b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bab43cfa-2516-47a9-a25d-69d342bc7913;
 Tue, 06 Jul 2021 10:35:55 +0000 (UTC)
Received: by mail-wr1-x42b.google.com with SMTP id a13so25448380wrf.10
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 03:35:55 -0700 (PDT)
Received: from dell ([109.180.115.218])
 by smtp.gmail.com with ESMTPSA id l9sm16428319wrp.14.2021.07.06.03.35.53
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 06 Jul 2021 03:35:54 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bab43cfa-2516-47a9-a25d-69d342bc7913
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=linaro.org; s=google;
        h=date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:content-transfer-encoding:in-reply-to;
        bh=6xuYHcNFKOKQBrKUFUDH+4OX/ZzxgolWWFVCDDtB2Y0=;
        b=Yt+wwRbDrooYfJ07+RIOcvlbNAmDArbrvJ7r1S0Vf2cjg/rLU7fAYgPxXpkS/Es1c/
         LcGWWFOVsEF/0XQJw8Ic4i6Dtc59Y/PIazeWXS81o/I5/ykvg7NDoqtNhU6ZQY0qgpts
         hX13gyhgO6x+I73AAGb4ZN/+qaseZR6quq5U1fL8NFgVa2YoJXURs1gKcClPP7oowGFt
         CUO7YRn27lhbGlEADkw/xBbGzLYaM6sE1cZhR+vatbGDVqfyXQOHsgSlmcoOTDifCPOm
         ISHjTYrtj1Tj6vkK+FyowiPdLCC1ljyYKvKt5eTXHZu+z0mb6AF50iygoibOaTtpwXde
         Om/w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:cc:subject:message-id:references
         :mime-version:content-disposition:content-transfer-encoding
         :in-reply-to;
        bh=6xuYHcNFKOKQBrKUFUDH+4OX/ZzxgolWWFVCDDtB2Y0=;
        b=gstwFqjOOUATvgYVhn0c0FG0HQSlcD8bMV8tAzAluQTMjq3ZOyqCT+/oxnjo332OHT
         gxxvpvwePrFvUVC8HZEa/4maXbIpTLelR3k1fzenvYM2el+MudFRUACYRIJdAs63Z6kk
         CYgKRp0DNhsJryy9pzYlLwTu2t7s/Ercq2ijVs6OxdhxEVCFIvGLI/6ekhm09IoEPViG
         0i/fRIRXqApa2/WhpU8f3S5lLkkdSgaDCVzUHLIMYN1EPlzZ5mz/vMd81W1WC6IwSbBf
         EDYtBkGuis3TJdjvjbAJAyFGueaRwg0tqAhNB7WHtik3jvV/yhIkkYrVRj37Ea4/8T1n
         +jZw==
X-Gm-Message-State: AOAM533z3fVnjMNKl5ps05WVEcyEpQFKloPbiaoV0/nSZ0ZKUjSub7qp
	7XeOJ0Il2wMxVF5LsW62me/13A==
X-Google-Smtp-Source: ABdhPJxx+Xr4AcuLpRSkCC4EtytSRujE0SZ0zcPphvKN4FEK+8OpQKjY5aHg/Lctw2KdmVZr98nK+A==
X-Received: by 2002:a05:6000:12d0:: with SMTP id l16mr21397024wrx.189.1625567755049;
        Tue, 06 Jul 2021 03:35:55 -0700 (PDT)
Date: Tue, 6 Jul 2021 11:35:52 +0100
From: Lee Jones <lee.jones@linaro.org>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <YOQxRS8HLTYthWNn@dell>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>

On Tue, 06 Jul 2021, Uwe Kleine-König wrote:

> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
> 
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutronix.de.
> 
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.
> 
> I send this mail to all people that get_maintainer.pl emits for this
> patch. I wonder how many recipents will refuse this mail because of the
> long Cc: list :-)
> 
> Best regards
> Uwe
> 
>  arch/arm/common/locomo.c                  | 3 +--
>  arch/arm/common/sa1111.c                  | 4 +---
>  arch/arm/mach-rpc/ecard.c                 | 4 +---
>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
>  arch/parisc/kernel/drivers.c              | 5 ++---
>  arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
>  arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
>  arch/powerpc/platforms/pseries/vio.c      | 3 +--
>  drivers/acpi/bus.c                        | 3 +--
>  drivers/amba/bus.c                        | 4 +---
>  drivers/base/auxiliary.c                  | 4 +---
>  drivers/base/isa.c                        | 4 +---
>  drivers/base/platform.c                   | 4 +---
>  drivers/bcma/main.c                       | 6 ++----
>  drivers/bus/sunxi-rsb.c                   | 4 +---
>  drivers/cxl/core.c                        | 3 +--
>  drivers/dax/bus.c                         | 4 +---
>  drivers/dma/idxd/sysfs.c                  | 4 +---
>  drivers/firewire/core-device.c            | 4 +---
>  drivers/firmware/arm_scmi/bus.c           | 4 +---
>  drivers/firmware/google/coreboot_table.c  | 4 +---
>  drivers/fpga/dfl.c                        | 4 +---
>  drivers/hid/hid-core.c                    | 4 +---
>  drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
>  drivers/hv/vmbus_drv.c                    | 5 +----
>  drivers/hwtracing/intel_th/core.c         | 4 +---
>  drivers/i2c/i2c-core-base.c               | 5 +----
>  drivers/i3c/master.c                      | 4 +---
>  drivers/input/gameport/gameport.c         | 3 +--
>  drivers/input/serio/serio.c               | 3 +--
>  drivers/ipack/ipack.c                     | 4 +---
>  drivers/macintosh/macio_asic.c            | 4 +---
>  drivers/mcb/mcb-core.c                    | 4 +---
>  drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
>  drivers/memstick/core/memstick.c          | 3 +--

>  drivers/mfd/mcp-core.c                    | 3 +--

Acked-by: Lee Jones <lee.jones@linaro.org>

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:47:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:47:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151052.279218 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ibd-0003xE-6O; Tue, 06 Jul 2021 10:47:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151052.279218; Tue, 06 Jul 2021 10:47:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ibc-0003vb-Rn; Tue, 06 Jul 2021 10:47:08 +0000
Received: by outflank-mailman (input) for mailman id 151052;
 Tue, 06 Jul 2021 10:46:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lKi3=L6=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m0iax-0003k5-HS
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:46:27 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e721915f-0e5c-4364-a0c0-7fd2c0437d99;
 Tue, 06 Jul 2021 10:46:26 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 76FC51FF3D;
 Tue,  6 Jul 2021 10:46:25 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id D275A1372D;
 Tue,  6 Jul 2021 10:46:19 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id RWpiMXs05GC9aQAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 06 Jul 2021 10:46:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e721915f-0e5c-4364-a0c0-7fd2c0437d99
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625568385; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=aE1tCzEag7jR0P5TuKfYDuKVYa2hKLfqqWSsRgXGqys=;
	b=kbxXFkbfywLW21QFTVgMsyOvn9qTOUblLSJWqHgBIsiRfwo1J8p4UmJOv35vRngZlw2jw3
	Q5KizhgSEPfcAVW8vr7ZObobgpgToITHKjh56DmTUUpX0Zm48Z9JRylQn82E09V+AD3nbh
	XGQMqFQTupmrzkBqn+8TB7MpMoCQitk=
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org,
 Russell King <linux@armlinux.org.uk>,
 Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
 Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
 Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>,
 Paul Mackerras <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
 Len Brown <lenb@kernel.org>, William Breathitt Gray
 <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?=
 <zajec5@gmail.com>, Maxime Ripard <mripard@kernel.org>,
 Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec <jernej.skrabec@gmail.com>,
 Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>,
 Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>,
 Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>,
 Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>,
 Jiri Kosina <jikos@kernel.org>,
 Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
 "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>,
 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
 Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>,
 Dmitry Torokhov <dmitry.torokhov@gmail.com>,
 Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
 Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>,
 Mauro Carvalho Chehab <mchehab@kernel.org>,
 Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>,
 Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>,
 Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>,
 Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>,
 Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
 Kishon Vijay Abraham I <kishon@ti.com>,
 Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
 =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>,
 Bjorn Helgaas <bhelgaas@google.com>,
 Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>,
 Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>,
 Bjorn Andersson <bjorn.andersson@linaro.org>,
 Mathieu Poirier <mathieu.poirier@linaro.org>,
 "Martin K. Petersen" <martin.petersen@oracle.com>,
 Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
 Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
 Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
 Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>,
 Alex Elder <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>,
 Michael Jamet <michael.jamet@intel.com>,
 Mika Westerberg <mika.westerberg@linux.intel.com>,
 Yehezkel Bernat <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>,
 Jiri Slaby <jirislaby@kernel.org>,
 Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>,
 Alex Williamson <alex.williamson@redhat.com>,
 Cornelia Huck <cohuck@redhat.com>, Martyn Welch <martyn@welchs.me.uk>,
 Manohar Vanga <manohar.vanga@gmail.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>,
 Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>,
 Tyrel Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>,
 Samuel Holland <samuel@sholland.org>, Qinglang Miao
 <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>,
 Kai-Heng Feng <kai.heng.feng@canonical.com>,
 Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=c3=a1r?=
 <pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>,
 Frank Li <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>,
 Bodo Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>,
 David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>,
 Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
From: Juergen Gross <jgross@suse.com>
Message-ID: <4209f6c7-c45d-f1e2-3e6c-e3e5ac23ebfa@suse.com>
Date: Tue, 6 Jul 2021 12:46:18 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="LJ84wkOoGvpkTOYSJk04bukxIJd4NuWQK"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--LJ84wkOoGvpkTOYSJk04bukxIJd4NuWQK
Content-Type: multipart/mixed; boundary="kIonFKJi2YzXeYHIXjoGkrp8dW9qDQLaQ";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org,
 Russell King <linux@armlinux.org.uk>,
 Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
 Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
 Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>,
 Paul Mackerras <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
 Len Brown <lenb@kernel.org>, William Breathitt Gray
 <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?=
 <zajec5@gmail.com>, Maxime Ripard <mripard@kernel.org>,
 Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec <jernej.skrabec@gmail.com>,
 Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>,
 Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>,
 Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>,
 Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>,
 Jiri Kosina <jikos@kernel.org>,
 Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
 "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>,
 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
 Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>,
 Dmitry Torokhov <dmitry.torokhov@gmail.com>,
 Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
 Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>,
 Mauro Carvalho Chehab <mchehab@kernel.org>,
 Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>,
 Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>,
 Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>,
 Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>,
 Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
 Kishon Vijay Abraham I <kishon@ti.com>,
 Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
 =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>,
 Bjorn Helgaas <bhelgaas@google.com>,
 Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>,
 Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>,
 Bjorn Andersson <bjorn.andersson@linaro.org>,
 Mathieu Poirier <mathieu.poirier@linaro.org>,
 "Martin K. Petersen" <martin.petersen@oracle.com>,
 Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
 Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
 Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
 Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>,
 Alex Elder <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>,
 Michael Jamet <michael.jamet@intel.com>,
 Mika Westerberg <mika.westerberg@linux.intel.com>,
 Yehezkel Bernat <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>,
 Jiri Slaby <jirislaby@kernel.org>,
 Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>,
 Alex Williamson <alex.williamson@redhat.com>,
 Cornelia Huck <cohuck@redhat.com>, Martyn Welch <martyn@welchs.me.uk>,
 Manohar Vanga <manohar.vanga@gmail.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>,
 Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>,
 Tyrel Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>,
 Samuel Holland <samuel@sholland.org>, Qinglang Miao
 <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>,
 Kai-Heng Feng <kai.heng.feng@canonical.com>,
 Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=c3=a1r?=
 <pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>,
 Frank Li <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>,
 Bodo Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>,
 David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>,
 Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
Message-ID: <4209f6c7-c45d-f1e2-3e6c-e3e5ac23ebfa@suse.com>
Subject: Re: [PATCH] bus: Make remove callback return void
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>

--kIonFKJi2YzXeYHIXjoGkrp8dW9qDQLaQ
Content-Type: multipart/mixed;
 boundary="------------ABA0B815A5B864B832260E8B"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------ABA0B815A5B864B832260E8B
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 06.07.21 11:50, Uwe Kleine-K=C3=B6nig wrote:
> The driver core ignores the return value of this callback because there=

> is only little it can do when a device disappears.
>=20
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers=

> returning an error code in the expectation that the driver won't go
> away.
>=20
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>=20
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>

Xen-bits:

Acked-by: Juergen Gross <jgross@suse.com>


Juergen

--------------ABA0B815A5B864B832260E8B
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------ABA0B815A5B864B832260E8B--

--kIonFKJi2YzXeYHIXjoGkrp8dW9qDQLaQ--

--LJ84wkOoGvpkTOYSJk04bukxIJd4NuWQK
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDkNHoFAwAAAAAACgkQsN6d1ii/Ey8d
9Qf+MstIWLhnZYxniJReo6jHtUQSQ2rUpFlTJapnMcuCNNsRuzoFb2kWrrLOVkG0ZYgs9j3IuRfS
+M692Zb71I1OviraMa03pksMjHvaCLNBMydwTpCFHt19IswILmLbGdES3pwKKJZFkQ4RU/2DX/n+
q0HiCFclrt4x+Nlx4CQHwCe/LmwPUNWKXKGV2/xD84IEGoTmDvPOVbzq64ZzlDTzicMxHZGxQmHX
2lYdVrGEHFv4VWOl3Y/G2JKbUE4sqBdG5BT9a4Y17BkdgQbh2nMqebaTHA4MjFG2YeCMODgJRDCW
sLesp67WtJHPM0GucbqP4Go4UK47orGCS68LLihHew==
=e3P7
-----END PGP SIGNATURE-----

--LJ84wkOoGvpkTOYSJk04bukxIJd4NuWQK--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:47:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:47:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151048.279203 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ibc-0003lE-BQ; Tue, 06 Jul 2021 10:47:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151048.279203; Tue, 06 Jul 2021 10:47:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ibc-0003l7-8H; Tue, 06 Jul 2021 10:47:08 +0000
Received: by outflank-mailman (input) for mailman id 151048;
 Tue, 06 Jul 2021 10:44:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=oFgr=L6=bootlin.com=alexandre.belloni@srs-us1.protection.inumbo.net>)
 id 1m0iYe-0003hg-Sp
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:44:04 +0000
Received: from relay7-d.mail.gandi.net (unknown [217.70.183.200])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3d2bcd05-94d5-497e-9281-792347c069b5;
 Tue, 06 Jul 2021 10:43:59 +0000 (UTC)
Received: (Authenticated sender: alexandre.belloni@bootlin.com)
 by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 2C67720002;
 Tue,  6 Jul 2021 10:43:39 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3d2bcd05-94d5-497e-9281-792347c069b5
Date: Tue, 6 Jul 2021 12:43:39 +0200
From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <YOQz2zoBdU9evwel@piout.net>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>

On 06/07/2021 11:50:37+0200, Uwe Kleine-Knig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-Knig <u.kleine-koenig@pengutronix.de>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

> ---
> Hello,
> 
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutronix.de.
> 
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.
> 
> I send this mail to all people that get_maintainer.pl emits for this
> patch. I wonder how many recipents will refuse this mail because of the
> long Cc: list :-)
> 
> Best regards
> Uwe
> 
>  arch/arm/common/locomo.c                  | 3 +--
>  arch/arm/common/sa1111.c                  | 4 +---
>  arch/arm/mach-rpc/ecard.c                 | 4 +---
>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
>  arch/parisc/kernel/drivers.c              | 5 ++---
>  arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
>  arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
>  arch/powerpc/platforms/pseries/vio.c      | 3 +--
>  drivers/acpi/bus.c                        | 3 +--
>  drivers/amba/bus.c                        | 4 +---
>  drivers/base/auxiliary.c                  | 4 +---
>  drivers/base/isa.c                        | 4 +---
>  drivers/base/platform.c                   | 4 +---
>  drivers/bcma/main.c                       | 6 ++----
>  drivers/bus/sunxi-rsb.c                   | 4 +---
>  drivers/cxl/core.c                        | 3 +--
>  drivers/dax/bus.c                         | 4 +---
>  drivers/dma/idxd/sysfs.c                  | 4 +---
>  drivers/firewire/core-device.c            | 4 +---
>  drivers/firmware/arm_scmi/bus.c           | 4 +---
>  drivers/firmware/google/coreboot_table.c  | 4 +---
>  drivers/fpga/dfl.c                        | 4 +---
>  drivers/hid/hid-core.c                    | 4 +---
>  drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
>  drivers/hv/vmbus_drv.c                    | 5 +----
>  drivers/hwtracing/intel_th/core.c         | 4 +---
>  drivers/i2c/i2c-core-base.c               | 5 +----
>  drivers/i3c/master.c                      | 4 +---
>  drivers/input/gameport/gameport.c         | 3 +--
>  drivers/input/serio/serio.c               | 3 +--
>  drivers/ipack/ipack.c                     | 4 +---
>  drivers/macintosh/macio_asic.c            | 4 +---
>  drivers/mcb/mcb-core.c                    | 4 +---
>  drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
>  drivers/memstick/core/memstick.c          | 3 +--
>  drivers/mfd/mcp-core.c                    | 3 +--
>  drivers/misc/mei/bus.c                    | 4 +---
>  drivers/misc/tifm_core.c                  | 3 +--
>  drivers/mmc/core/bus.c                    | 4 +---
>  drivers/mmc/core/sdio_bus.c               | 4 +---
>  drivers/net/netdevsim/bus.c               | 3 +--
>  drivers/ntb/core.c                        | 4 +---
>  drivers/ntb/ntb_transport.c               | 4 +---
>  drivers/nvdimm/bus.c                      | 3 +--
>  drivers/pci/endpoint/pci-epf-core.c       | 4 +---
>  drivers/pci/pci-driver.c                  | 3 +--
>  drivers/pcmcia/ds.c                       | 4 +---
>  drivers/platform/surface/aggregator/bus.c | 4 +---
>  drivers/platform/x86/wmi.c                | 4 +---
>  drivers/pnp/driver.c                      | 3 +--
>  drivers/rapidio/rio-driver.c              | 4 +---
>  drivers/rpmsg/rpmsg_core.c                | 4 +---
>  drivers/scsi/scsi_debug.c                 | 3 +--
>  drivers/siox/siox-core.c                  | 4 +---
>  drivers/slimbus/core.c                    | 4 +---
>  drivers/soc/qcom/apr.c                    | 4 +---
>  drivers/spi/spi.c                         | 4 +---
>  drivers/spmi/spmi.c                       | 3 +--
>  drivers/ssb/main.c                        | 4 +---
>  drivers/staging/fieldbus/anybuss/host.c   | 4 +---
>  drivers/staging/greybus/gbphy.c           | 4 +---
>  drivers/target/loopback/tcm_loop.c        | 5 ++---
>  drivers/thunderbolt/domain.c              | 4 +---
>  drivers/tty/serdev/core.c                 | 4 +---
>  drivers/usb/common/ulpi.c                 | 4 +---
>  drivers/usb/serial/bus.c                  | 4 +---
>  drivers/usb/typec/bus.c                   | 4 +---
>  drivers/vdpa/vdpa.c                       | 4 +---
>  drivers/vfio/mdev/mdev_driver.c           | 4 +---
>  drivers/virtio/virtio.c                   | 3 +--
>  drivers/vme/vme.c                         | 4 +---
>  drivers/xen/xenbus/xenbus.h               | 2 +-
>  drivers/xen/xenbus/xenbus_probe.c         | 4 +---
>  include/linux/device/bus.h                | 2 +-
>  sound/aoa/soundbus/core.c                 | 4 +---
>  75 files changed, 78 insertions(+), 204 deletions(-)
> 
> diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
> index e45f4e4e06b6..24d21ba63030 100644
> --- a/arch/arm/common/locomo.c
> +++ b/arch/arm/common/locomo.c
> @@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int locomo_bus_remove(struct device *dev)
> +static void locomo_bus_remove(struct device *dev)
>  {
>  	struct locomo_dev *ldev = LOCOMO_DEV(dev);
>  	struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
>  
>  	if (drv->remove)
>  		drv->remove(ldev);
> -	return 0;
>  }
>  
>  struct bus_type locomo_bus_type = {
> diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
> index ff5e0d04cb89..092a2ebc0c28 100644
> --- a/arch/arm/common/sa1111.c
> +++ b/arch/arm/common/sa1111.c
> @@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int sa1111_bus_remove(struct device *dev)
> +static void sa1111_bus_remove(struct device *dev)
>  {
>  	struct sa1111_dev *sadev = to_sa1111_device(dev);
>  	struct sa1111_driver *drv = SA1111_DRV(dev->driver);
>  
>  	if (drv->remove)
>  		drv->remove(sadev);
> -
> -	return 0;
>  }
>  
>  struct bus_type sa1111_bus_type = {
> diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
> index 827b50f1c73e..53813f9464a2 100644
> --- a/arch/arm/mach-rpc/ecard.c
> +++ b/arch/arm/mach-rpc/ecard.c
> @@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int ecard_drv_remove(struct device *dev)
> +static void ecard_drv_remove(struct device *dev)
>  {
>  	struct expansion_card *ec = ECARD_DEV(dev);
>  	struct ecard_driver *drv = ECARD_DRV(dev->driver);
> @@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
>  	ec->ops = &ecard_default_ops;
>  	barrier();
>  	ec->irq_data = NULL;
> -
> -	return 0;
>  }
>  
>  /*
> diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.c
> index de0768a49ee8..dfc52f661ad0 100644
> --- a/arch/mips/sgi-ip22/ip22-gio.c
> +++ b/arch/mips/sgi-ip22/ip22-gio.c
> @@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
>  	return error;
>  }
>  
> -static int gio_device_remove(struct device *dev)
> +static void gio_device_remove(struct device *dev)
>  {
>  	struct gio_device *gio_dev = to_gio_device(dev);
>  	struct gio_driver *drv = to_gio_driver(dev->driver);
>  
>  	if (dev->driver && drv->remove)
>  		drv->remove(gio_dev);
> -	return 0;
>  }
>  
>  static void gio_device_shutdown(struct device *dev)
> diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
> index 80fa0650736b..776d624a7207 100644
> --- a/arch/parisc/kernel/drivers.c
> +++ b/arch/parisc/kernel/drivers.c
> @@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device *dev)
>  	return rc;
>  }
>  
> -static int __exit parisc_driver_remove(struct device *dev)
> +static void __exit parisc_driver_remove(struct device *dev)
>  {
>  	struct parisc_device *pa_dev = to_parisc_device(dev);
>  	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
> +
>  	if (pa_drv->remove)
>  		pa_drv->remove(pa_dev);
> -
> -	return 0;
>  }
>  	
>  
> diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
> index 1a5665875165..cc5774c64fae 100644
> --- a/arch/powerpc/platforms/ps3/system-bus.c
> +++ b/arch/powerpc/platforms/ps3/system-bus.c
> @@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
>  	return result;
>  }
>  
> -static int ps3_system_bus_remove(struct device *_dev)
> +static void ps3_system_bus_remove(struct device *_dev)
>  {
>  	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
>  	struct ps3_system_bus_driver *drv;
> @@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
>  			__func__, __LINE__, drv->core.name);
>  
>  	pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->core));
> -	return 0;
>  }
>  
>  static void ps3_system_bus_shutdown(struct device *_dev)
> diff --git a/arch/powerpc/platforms/pseries/ibmebus.c b/arch/powerpc/platforms/pseries/ibmebus.c
> index c6c79ef55e13..7ee3ed7d6cc2 100644
> --- a/arch/powerpc/platforms/pseries/ibmebus.c
> +++ b/arch/powerpc/platforms/pseries/ibmebus.c
> @@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct device *dev)
>  	return error;
>  }
>  
> -static int ibmebus_bus_device_remove(struct device *dev)
> +static void ibmebus_bus_device_remove(struct device *dev)
>  {
>  	struct platform_device *of_dev = to_platform_device(dev);
>  	struct platform_driver *drv = to_platform_driver(dev->driver);
>  
>  	if (dev->driver && drv->remove)
>  		drv->remove(of_dev);
> -	return 0;
>  }
>  
>  static void ibmebus_bus_device_shutdown(struct device *dev)
> diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
> index e00f3725ec96..58283cecbd52 100644
> --- a/arch/powerpc/platforms/pseries/vio.c
> +++ b/arch/powerpc/platforms/pseries/vio.c
> @@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
>  }
>  
>  /* convert from struct device to struct vio_dev and pass to driver. */
> -static int vio_bus_remove(struct device *dev)
> +static void vio_bus_remove(struct device *dev)
>  {
>  	struct vio_dev *viodev = to_vio_dev(dev);
>  	struct vio_driver *viodrv = to_vio_driver(dev->driver);
> @@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
>  		vio_cmo_bus_remove(viodev);
>  
>  	put_device(devptr);
> -	return 0;
>  }
>  
>  static void vio_bus_shutdown(struct device *dev)
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index ee24246d88fd..51f374e42869 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -1018,7 +1018,7 @@ static int acpi_device_probe(struct device *dev)
>  	return 0;
>  }
>  
> -static int acpi_device_remove(struct device *dev)
> +static void acpi_device_remove(struct device *dev)
>  {
>  	struct acpi_device *acpi_dev = to_acpi_device(dev);
>  	struct acpi_driver *acpi_drv = acpi_dev->driver;
> @@ -1033,7 +1033,6 @@ static int acpi_device_remove(struct device *dev)
>  	acpi_dev->driver_data = NULL;
>  
>  	put_device(dev);
> -	return 0;
>  }
>  
>  struct bus_type acpi_bus_type = {
> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> index 939ca220bf78..962041148482 100644
> --- a/drivers/amba/bus.c
> +++ b/drivers/amba/bus.c
> @@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int amba_remove(struct device *dev)
> +static void amba_remove(struct device *dev)
>  {
>  	struct amba_device *pcdev = to_amba_device(dev);
>  	struct amba_driver *drv = to_amba_driver(dev->driver);
> @@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
>  
>  	amba_put_disable_pclk(pcdev);
>  	dev_pm_domain_detach(dev, true);
> -
> -	return 0;
>  }
>  
>  static void amba_shutdown(struct device *dev)
> diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
> index adc199dfba3c..0c86f5bed9f4 100644
> --- a/drivers/base/auxiliary.c
> +++ b/drivers/base/auxiliary.c
> @@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int auxiliary_bus_remove(struct device *dev)
> +static void auxiliary_bus_remove(struct device *dev)
>  {
>  	struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev->driver);
>  	struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
> @@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
>  	if (auxdrv->remove)
>  		auxdrv->remove(auxdev);
>  	dev_pm_domain_detach(dev, true);
> -
> -	return 0;
>  }
>  
>  static void auxiliary_bus_shutdown(struct device *dev)
> diff --git a/drivers/base/isa.c b/drivers/base/isa.c
> index aa4737667026..55e3ee2da98f 100644
> --- a/drivers/base/isa.c
> +++ b/drivers/base/isa.c
> @@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
>  	return 0;
>  }
>  
> -static int isa_bus_remove(struct device *dev)
> +static void isa_bus_remove(struct device *dev)
>  {
>  	struct isa_driver *isa_driver = dev->platform_data;
>  
>  	if (isa_driver && isa_driver->remove)
>  		isa_driver->remove(dev, to_isa_dev(dev)->id);
> -
> -	return 0;
>  }
>  
>  static void isa_bus_shutdown(struct device *dev)
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 8640578f45e9..a94b7f454881 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
>  	return ret;
>  }
>  
> -static int platform_remove(struct device *_dev)
> +static void platform_remove(struct device *_dev)
>  {
>  	struct platform_driver *drv = to_platform_driver(_dev->driver);
>  	struct platform_device *dev = to_platform_device(_dev);
> @@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
>  			dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n");
>  	}
>  	dev_pm_domain_detach(_dev, true);
> -
> -	return 0;
>  }
>  
>  static void platform_shutdown(struct device *_dev)
> diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
> index 6535614a7dc1..e076630d17bd 100644
> --- a/drivers/bcma/main.c
> +++ b/drivers/bcma/main.c
> @@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
>  
>  static int bcma_bus_match(struct device *dev, struct device_driver *drv);
>  static int bcma_device_probe(struct device *dev);
> -static int bcma_device_remove(struct device *dev);
> +static void bcma_device_remove(struct device *dev);
>  static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env);
>  
>  static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf)
> @@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
>  	return err;
>  }
>  
> -static int bcma_device_remove(struct device *dev)
> +static void bcma_device_remove(struct device *dev)
>  {
>  	struct bcma_device *core = container_of(dev, struct bcma_device, dev);
>  	struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
> @@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
>  	if (adrv->remove)
>  		adrv->remove(core);
>  	put_device(dev);
> -
> -	return 0;
>  }
>  
>  static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
> index d46db132d085..6f225dddc74f 100644
> --- a/drivers/bus/sunxi-rsb.c
> +++ b/drivers/bus/sunxi-rsb.c
> @@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device *dev)
>  	return drv->probe(rdev);
>  }
>  
> -static int sunxi_rsb_device_remove(struct device *dev)
> +static void sunxi_rsb_device_remove(struct device *dev)
>  {
>  	const struct sunxi_rsb_driver *drv = to_sunxi_rsb_driver(dev->driver);
>  
>  	drv->remove(to_sunxi_rsb_device(dev));
> -
> -	return 0;
>  }
>  
>  static struct bus_type sunxi_rsb_bus = {
> diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
> index a2e4d54fc7bc..2b90b7c3b9d7 100644
> --- a/drivers/cxl/core.c
> +++ b/drivers/cxl/core.c
> @@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
>  	return to_cxl_drv(dev->driver)->probe(dev);
>  }
>  
> -static int cxl_bus_remove(struct device *dev)
> +static void cxl_bus_remove(struct device *dev)
>  {
>  	struct cxl_driver *cxl_drv = to_cxl_drv(dev->driver);
>  
>  	if (cxl_drv->remove)
>  		cxl_drv->remove(dev);
> -	return 0;
>  }
>  
>  struct bus_type cxl_bus_type = {
> diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
> index 5aee26e1bbd6..6cc4da4c713d 100644
> --- a/drivers/dax/bus.c
> +++ b/drivers/dax/bus.c
> @@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
>  	return 0;
>  }
>  
> -static int dax_bus_remove(struct device *dev)
> +static void dax_bus_remove(struct device *dev)
>  {
>  	struct dax_device_driver *dax_drv = to_dax_drv(dev->driver);
>  	struct dev_dax *dev_dax = to_dev_dax(dev);
>  
>  	if (dax_drv->remove)
>  		dax_drv->remove(dev_dax);
> -
> -	return 0;
>  }
>  
>  static struct bus_type dax_bus_type = {
> diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
> index 0460d58e3941..5a017c62c752 100644
> --- a/drivers/dma/idxd/sysfs.c
> +++ b/drivers/dma/idxd/sysfs.c
> @@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
>  	dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
>  }
>  
> -static int idxd_config_bus_remove(struct device *dev)
> +static void idxd_config_bus_remove(struct device *dev)
>  {
>  	int rc;
>  
> @@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device *dev)
>  			dev_info(dev, "Device %s disabled\n", dev_name(dev));
>  
>  	}
> -
> -	return 0;
>  }
>  
>  static void idxd_config_bus_shutdown(struct device *dev)
> diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
> index 68216988391f..90ed8fdaba75 100644
> --- a/drivers/firewire/core-device.c
> +++ b/drivers/firewire/core-device.c
> @@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
>  	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
>  }
>  
> -static int fw_unit_remove(struct device *dev)
> +static void fw_unit_remove(struct device *dev)
>  {
>  	struct fw_driver *driver =
>  			container_of(dev->driver, struct fw_driver, driver);
>  
>  	driver->remove(fw_unit(dev));
> -
> -	return 0;
>  }
>  
>  static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
> diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
> index 784cf0027da3..2682c3df651c 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
>  	return scmi_drv->probe(scmi_dev);
>  }
>  
> -static int scmi_dev_remove(struct device *dev)
> +static void scmi_dev_remove(struct device *dev)
>  {
>  	struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
>  	struct scmi_device *scmi_dev = to_scmi_dev(dev);
>  
>  	if (scmi_drv->remove)
>  		scmi_drv->remove(scmi_dev);
> -
> -	return 0;
>  }
>  
>  static struct bus_type scmi_bus_type = {
> diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
> index dc83ea118c67..c52bcaa9def6 100644
> --- a/drivers/firmware/google/coreboot_table.c
> +++ b/drivers/firmware/google/coreboot_table.c
> @@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int coreboot_bus_remove(struct device *dev)
> +static void coreboot_bus_remove(struct device *dev)
>  {
>  	struct coreboot_device *device = CB_DEV(dev);
>  	struct coreboot_driver *driver = CB_DRV(dev->driver);
>  
>  	if (driver->remove)
>  		driver->remove(device);
> -
> -	return 0;
>  }
>  
>  static struct bus_type coreboot_bus_type = {
> diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
> index 511b20ff35a3..1ae6779a0dd6 100644
> --- a/drivers/fpga/dfl.c
> +++ b/drivers/fpga/dfl.c
> @@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
>  	return ddrv->probe(ddev);
>  }
>  
> -static int dfl_bus_remove(struct device *dev)
> +static void dfl_bus_remove(struct device *dev)
>  {
>  	struct dfl_driver *ddrv = to_dfl_drv(dev->driver);
>  	struct dfl_device *ddev = to_dfl_dev(dev);
>  
>  	if (ddrv->remove)
>  		ddrv->remove(ddev);
> -
> -	return 0;
>  }
>  
>  static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index 7db332139f7d..dbed2524fd47 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int hid_device_remove(struct device *dev)
> +static void hid_device_remove(struct device *dev)
>  {
>  	struct hid_device *hdev = to_hid_device(dev);
>  	struct hid_driver *hdrv;
> @@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
>  
>  	if (!hdev->io_started)
>  		up(&hdev->driver_input_lock);
> -
> -	return 0;
>  }
>  
>  static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
> diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
> index f0802b047ed8..8a51bd9cd093 100644
> --- a/drivers/hid/intel-ish-hid/ishtp/bus.c
> +++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
> @@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, struct device_driver *drv)
>   *
>   * Return: Return value from driver remove() call.
>   */
> -static int ishtp_cl_device_remove(struct device *dev)
> +static void ishtp_cl_device_remove(struct device *dev)
>  {
>  	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
>  	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev->driver);
> @@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
>  
>  	if (driver->remove)
>  		driver->remove(device);
> -
> -	return 0;
>  }
>  
>  /**
> diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
> index 57bbbaa4e8f7..392c1ac4f819 100644
> --- a/drivers/hv/vmbus_drv.c
> +++ b/drivers/hv/vmbus_drv.c
> @@ -922,7 +922,7 @@ static int vmbus_probe(struct device *child_device)
>  /*
>   * vmbus_remove - Remove a vmbus device
>   */
> -static int vmbus_remove(struct device *child_device)
> +static void vmbus_remove(struct device *child_device)
>  {
>  	struct hv_driver *drv;
>  	struct hv_device *dev = device_to_hv_device(child_device);
> @@ -932,11 +932,8 @@ static int vmbus_remove(struct device *child_device)
>  		if (drv->remove)
>  			drv->remove(dev);
>  	}
> -
> -	return 0;
>  }
>  
> -
>  /*
>   * vmbus_shutdown - Shutdown a vmbus device
>   */
> diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
> index 66eed2dff818..7e753a75d23b 100644
> --- a/drivers/hwtracing/intel_th/core.c
> +++ b/drivers/hwtracing/intel_th/core.c
> @@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
>  
>  static void intel_th_device_remove(struct intel_th_device *thdev);
>  
> -static int intel_th_remove(struct device *dev)
> +static void intel_th_remove(struct device *dev)
>  {
>  	struct intel_th_driver *thdrv = to_intel_th_driver(dev->driver);
>  	struct intel_th_device *thdev = to_intel_th_device(dev);
> @@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
>  	pm_runtime_disable(dev);
>  	pm_runtime_set_active(dev);
>  	pm_runtime_enable(dev);
> -
> -	return 0;
>  }
>  
>  static struct bus_type intel_th_bus = {
> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
> index 84f12bf90644..54964fbe3f03 100644
> --- a/drivers/i2c/i2c-core-base.c
> +++ b/drivers/i2c/i2c-core-base.c
> @@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
>  	return status;
>  }
>  
> -static int i2c_device_remove(struct device *dev)
> +static void i2c_device_remove(struct device *dev)
>  {
>  	struct i2c_client	*client = to_i2c_client(dev);
>  	struct i2c_adapter      *adap;
> @@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
>  	client->irq = 0;
>  	if (client->flags & I2C_CLIENT_HOST_NOTIFY)
>  		pm_runtime_put(&client->adapter->dev);
> -
> -	/* return always 0 because there is WIP to make remove-functions void */
> -	return 0;
>  }
>  
>  #ifdef CONFIG_PM_SLEEP
> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> index e2e12a5585e5..c3b4c677b442 100644
> --- a/drivers/i3c/master.c
> +++ b/drivers/i3c/master.c
> @@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
>  	return driver->probe(i3cdev);
>  }
>  
> -static int i3c_device_remove(struct device *dev)
> +static void i3c_device_remove(struct device *dev)
>  {
>  	struct i3c_device *i3cdev = dev_to_i3cdev(dev);
>  	struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
> @@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
>  		driver->remove(i3cdev);
>  
>  	i3c_device_free_ibi(i3cdev);
> -
> -	return 0;
>  }
>  
>  struct bus_type i3c_bus_type = {
> diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
> index 61fa7e724172..db58a01b23d3 100644
> --- a/drivers/input/gameport/gameport.c
> +++ b/drivers/input/gameport/gameport.c
> @@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device *dev)
>  	return gameport->drv ? 0 : -ENODEV;
>  }
>  
> -static int gameport_driver_remove(struct device *dev)
> +static void gameport_driver_remove(struct device *dev)
>  {
>  	struct gameport *gameport = to_gameport_port(dev);
>  	struct gameport_driver *drv = to_gameport_driver(dev->driver);
>  
>  	drv->disconnect(gameport);
> -	return 0;
>  }
>  
>  static void gameport_attach_driver(struct gameport_driver *drv)
> diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
> index 29f491082926..ec117be3d8d8 100644
> --- a/drivers/input/serio/serio.c
> +++ b/drivers/input/serio/serio.c
> @@ -778,12 +778,11 @@ static int serio_driver_probe(struct device *dev)
>  	return serio_connect_driver(serio, drv);
>  }
>  
> -static int serio_driver_remove(struct device *dev)
> +static void serio_driver_remove(struct device *dev)
>  {
>  	struct serio *serio = to_serio_port(dev);
>  
>  	serio_disconnect_driver(serio);
> -	return 0;
>  }
>  
>  static void serio_cleanup(struct serio *serio)
> diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
> index 7de9605cac4f..b1c3198355e7 100644
> --- a/drivers/ipack/ipack.c
> +++ b/drivers/ipack/ipack.c
> @@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
>  	return drv->ops->probe(dev);
>  }
>  
> -static int ipack_bus_remove(struct device *device)
> +static void ipack_bus_remove(struct device *device)
>  {
>  	struct ipack_device *dev = to_ipack_dev(device);
>  	struct ipack_driver *drv = to_ipack_driver(device->driver);
>  
>  	if (drv->ops->remove)
>  		drv->ops->remove(dev);
> -
> -	return 0;
>  }
>  
>  static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c
> index 49af60bdac92..c1fdf2896021 100644
> --- a/drivers/macintosh/macio_asic.c
> +++ b/drivers/macintosh/macio_asic.c
> @@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
>  	return error;
>  }
>  
> -static int macio_device_remove(struct device *dev)
> +static void macio_device_remove(struct device *dev)
>  {
>  	struct macio_dev * macio_dev = to_macio_device(dev);
>  	struct macio_driver * drv = to_macio_driver(dev->driver);
> @@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
>  	if (dev->driver && drv->remove)
>  		drv->remove(macio_dev);
>  	macio_dev_put(macio_dev);
> -
> -	return 0;
>  }
>  
>  static void macio_device_shutdown(struct device *dev)
> diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> index 38fbb3b59873..edf4ee6eff25 100644
> --- a/drivers/mcb/mcb-core.c
> +++ b/drivers/mcb/mcb-core.c
> @@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int mcb_remove(struct device *dev)
> +static void mcb_remove(struct device *dev)
>  {
>  	struct mcb_driver *mdrv = to_mcb_driver(dev->driver);
>  	struct mcb_device *mdev = to_mcb_device(dev);
> @@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
>  	module_put(carrier_mod);
>  
>  	put_device(&mdev->dev);
> -
> -	return 0;
>  }
>  
>  static void mcb_shutdown(struct device *dev)
> diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
> index b730225ca887..a2b18e2bed1b 100644
> --- a/drivers/media/pci/bt8xx/bttv-gpio.c
> +++ b/drivers/media/pci/bt8xx/bttv-gpio.c
> @@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
>  	return sub->probe ? sub->probe(sdev) : -ENODEV;
>  }
>  
> -static int bttv_sub_remove(struct device *dev)
> +static void bttv_sub_remove(struct device *dev)
>  {
>  	struct bttv_sub_device *sdev = to_bttv_sub_dev(dev);
>  	struct bttv_sub_driver *sub = to_bttv_sub_drv(dev->driver);
>  
>  	if (sub->remove)
>  		sub->remove(sdev);
> -	return 0;
>  }
>  
>  struct bus_type bttv_sub_bus_type = {
> diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
> index bb1065990aeb..660df7d269fa 100644
> --- a/drivers/memstick/core/memstick.c
> +++ b/drivers/memstick/core/memstick.c
> @@ -91,7 +91,7 @@ static int memstick_device_probe(struct device *dev)
>  	return rc;
>  }
>  
> -static int memstick_device_remove(struct device *dev)
> +static void memstick_device_remove(struct device *dev)
>  {
>  	struct memstick_dev *card = container_of(dev, struct memstick_dev,
>  						  dev);
> @@ -105,7 +105,6 @@ static int memstick_device_remove(struct device *dev)
>  	}
>  
>  	put_device(dev);
> -	return 0;
>  }
>  
>  #ifdef CONFIG_PM
> diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
> index eff9423e90f5..2fa592c37c6f 100644
> --- a/drivers/mfd/mcp-core.c
> +++ b/drivers/mfd/mcp-core.c
> @@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
>  	return drv->probe(mcp);
>  }
>  
> -static int mcp_bus_remove(struct device *dev)
> +static void mcp_bus_remove(struct device *dev)
>  {
>  	struct mcp *mcp = to_mcp(dev);
>  	struct mcp_driver *drv = to_mcp_driver(dev->driver);
>  
>  	drv->remove(mcp);
> -	return 0;
>  }
>  
>  static struct bus_type mcp_bus_type = {
> diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
> index 935acc6bbf3c..3bf2bb4fd152 100644
> --- a/drivers/misc/mei/bus.c
> +++ b/drivers/misc/mei/bus.c
> @@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device *dev)
>   *
>   * Return:  0 on success; < 0 otherwise
>   */
> -static int mei_cl_device_remove(struct device *dev)
> +static void mei_cl_device_remove(struct device *dev)
>  {
>  	struct mei_cl_device *cldev = to_mei_cl_device(dev);
>  	struct mei_cl_driver *cldrv = to_mei_cl_driver(dev->driver);
> @@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device *dev)
>  
>  	mei_cl_bus_module_put(cldev);
>  	module_put(THIS_MODULE);
> -
> -	return 0;
>  }
>  
>  static ssize_t name_show(struct device *dev, struct device_attribute *a,
> diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
> index 667e574a7df2..52656fc87e99 100644
> --- a/drivers/misc/tifm_core.c
> +++ b/drivers/misc/tifm_core.c
> @@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
>  	return;
>  }
>  
> -static int tifm_device_remove(struct device *dev)
> +static void tifm_device_remove(struct device *dev)
>  {
>  	struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
>  	struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
> @@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
>  	}
>  
>  	put_device(dev);
> -	return 0;
>  }
>  
>  #ifdef CONFIG_PM
> diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
> index 4383c262b3f5..f6b7a9c5bbff 100644
> --- a/drivers/mmc/core/bus.c
> +++ b/drivers/mmc/core/bus.c
> @@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
>  	return drv->probe(card);
>  }
>  
> -static int mmc_bus_remove(struct device *dev)
> +static void mmc_bus_remove(struct device *dev)
>  {
>  	struct mmc_driver *drv = to_mmc_driver(dev->driver);
>  	struct mmc_card *card = mmc_dev_to_card(dev);
>  
>  	drv->remove(card);
> -
> -	return 0;
>  }
>  
>  static void mmc_bus_shutdown(struct device *dev)
> diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
> index 3d709029e07c..fda03b35c14a 100644
> --- a/drivers/mmc/core/sdio_bus.c
> +++ b/drivers/mmc/core/sdio_bus.c
> @@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int sdio_bus_remove(struct device *dev)
> +static void sdio_bus_remove(struct device *dev)
>  {
>  	struct sdio_driver *drv = to_sdio_driver(dev->driver);
>  	struct sdio_func *func = dev_to_sdio_func(dev);
> @@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
>  		pm_runtime_put_sync(dev);
>  
>  	dev_pm_domain_detach(dev, false);
> -
> -	return 0;
>  }
>  
>  static const struct dev_pm_ops sdio_bus_pm_ops = {
> diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
> index ccec29970d5b..14b154929533 100644
> --- a/drivers/net/netdevsim/bus.c
> +++ b/drivers/net/netdevsim/bus.c
> @@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
>  	return nsim_dev_probe(nsim_bus_dev);
>  }
>  
> -static int nsim_bus_remove(struct device *dev)
> +static void nsim_bus_remove(struct device *dev)
>  {
>  	struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
>  
>  	nsim_dev_remove(nsim_bus_dev);
> -	return 0;
>  }
>  
>  static int nsim_num_vf(struct device *dev)
> diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
> index f8f75a504a58..27dd93deff6e 100644
> --- a/drivers/ntb/core.c
> +++ b/drivers/ntb/core.c
> @@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
>  	return rc;
>  }
>  
> -static int ntb_remove(struct device *dev)
> +static void ntb_remove(struct device *dev)
>  {
>  	struct ntb_dev *ntb;
>  	struct ntb_client *client;
> @@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
>  		client->ops.remove(client, ntb);
>  		put_device(dev);
>  	}
> -
> -	return 0;
>  }
>  
>  static void ntb_dev_release(struct device *dev)
> diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
> index 4a02561cfb96..a9b97ebc71ac 100644
> --- a/drivers/ntb/ntb_transport.c
> +++ b/drivers/ntb/ntb_transport.c
> @@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device *dev)
>  	return rc;
>  }
>  
> -static int ntb_transport_bus_remove(struct device *dev)
> +static void ntb_transport_bus_remove(struct device *dev)
>  {
>  	const struct ntb_transport_client *client;
>  
> @@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device *dev)
>  	client->remove(dev);
>  
>  	put_device(dev);
> -
> -	return 0;
>  }
>  
>  static struct bus_type ntb_transport_bus = {
> diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
> index e6aa87043a95..9dc7f3edd42b 100644
> --- a/drivers/nvdimm/bus.c
> +++ b/drivers/nvdimm/bus.c
> @@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
>  	return rc;
>  }
>  
> -static int nvdimm_bus_remove(struct device *dev)
> +static void nvdimm_bus_remove(struct device *dev)
>  {
>  	struct nd_device_driver *nd_drv = to_nd_device_driver(dev->driver);
>  	struct module *provider = to_bus_provider(dev);
> @@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
>  	dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver->name,
>  			dev_name(dev));
>  	module_put(provider);
> -	return 0;
>  }
>  
>  static void nvdimm_bus_shutdown(struct device *dev)
> diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
> index 4b9ad96bf1b2..502eb79cd551 100644
> --- a/drivers/pci/endpoint/pci-epf-core.c
> +++ b/drivers/pci/endpoint/pci-epf-core.c
> @@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device *dev)
>  	return driver->probe(epf);
>  }
>  
> -static int pci_epf_device_remove(struct device *dev)
> +static void pci_epf_device_remove(struct device *dev)
>  {
>  	struct pci_epf *epf = to_pci_epf(dev);
>  	struct pci_epf_driver *driver = to_pci_epf_driver(dev->driver);
> @@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device *dev)
>  	if (driver->remove)
>  		driver->remove(epf);
>  	epf->driver = NULL;
> -
> -	return 0;
>  }
>  
>  static struct bus_type pci_epf_bus_type = {
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 3a72352aa5cf..a0615395500a 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
>  	return error;
>  }
>  
> -static int pci_device_remove(struct device *dev)
> +static void pci_device_remove(struct device *dev)
>  {
>  	struct pci_dev *pci_dev = to_pci_dev(dev);
>  	struct pci_driver *drv = pci_dev->driver;
> @@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
>  	 */
>  
>  	pci_dev_put(pci_dev);
> -	return 0;
>  }
>  
>  static void pci_device_shutdown(struct device *dev)
> diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
> index bd81aa64d011..5bd1b80424e7 100644
> --- a/drivers/pcmcia/ds.c
> +++ b/drivers/pcmcia/ds.c
> @@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
>  	return;
>  }
>  
> -static int pcmcia_device_remove(struct device *dev)
> +static void pcmcia_device_remove(struct device *dev)
>  {
>  	struct pcmcia_device *p_dev;
>  	struct pcmcia_driver *p_drv;
> @@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device *dev)
>  	/* references from pcmcia_device_probe */
>  	pcmcia_put_dev(p_dev);
>  	module_put(p_drv->owner);
> -
> -	return 0;
>  }
>  
>  
> diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c
> index 0169677c243e..0a40dd9c94ed 100644
> --- a/drivers/platform/surface/aggregator/bus.c
> +++ b/drivers/platform/surface/aggregator/bus.c
> @@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
>  		->probe(to_ssam_device(dev));
>  }
>  
> -static int ssam_bus_remove(struct device *dev)
> +static void ssam_bus_remove(struct device *dev)
>  {
>  	struct ssam_device_driver *sdrv = to_ssam_device_driver(dev->driver);
>  
>  	if (sdrv->remove)
>  		sdrv->remove(to_ssam_device(dev));
> -
> -	return 0;
>  }
>  
>  struct bus_type ssam_bus_type = {
> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> index 62e0d56a3332..a76313006bdc 100644
> --- a/drivers/platform/x86/wmi.c
> +++ b/drivers/platform/x86/wmi.c
> @@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int wmi_dev_remove(struct device *dev)
> +static void wmi_dev_remove(struct device *dev)
>  {
>  	struct wmi_block *wblock = dev_to_wblock(dev);
>  	struct wmi_driver *wdriver =
> @@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
>  
>  	if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
>  		dev_warn(dev, "failed to disable device\n");
> -
> -	return 0;
>  }
>  
>  static struct class wmi_bus_class = {
> diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
> index c29d590c5e4f..cc6757dfa3f1 100644
> --- a/drivers/pnp/driver.c
> +++ b/drivers/pnp/driver.c
> @@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
>  	return error;
>  }
>  
> -static int pnp_device_remove(struct device *dev)
> +static void pnp_device_remove(struct device *dev)
>  {
>  	struct pnp_dev *pnp_dev = to_pnp_dev(dev);
>  	struct pnp_driver *drv = pnp_dev->driver;
> @@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
>  		pnp_disable_dev(pnp_dev);
>  
>  	pnp_device_detach(pnp_dev);
> -	return 0;
>  }
>  
>  static void pnp_device_shutdown(struct device *dev)
> diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c
> index 72874153972e..a72bb0a40fcf 100644
> --- a/drivers/rapidio/rio-driver.c
> +++ b/drivers/rapidio/rio-driver.c
> @@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
>   * driver, then run the driver remove() method.  Then update
>   * the reference count.
>   */
> -static int rio_device_remove(struct device *dev)
> +static void rio_device_remove(struct device *dev)
>  {
>  	struct rio_dev *rdev = to_rio_dev(dev);
>  	struct rio_driver *rdrv = rdev->driver;
> @@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
>  	}
>  
>  	rio_dev_put(rdev);
> -
> -	return 0;
>  }
>  
>  static void rio_device_shutdown(struct device *dev)
> diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> index c1404d3dae2c..7f6fac618ab2 100644
> --- a/drivers/rpmsg/rpmsg_core.c
> +++ b/drivers/rpmsg/rpmsg_core.c
> @@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
>  	return err;
>  }
>  
> -static int rpmsg_dev_remove(struct device *dev)
> +static void rpmsg_dev_remove(struct device *dev)
>  {
>  	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
>  	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
> @@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
>  
>  	if (rpdev->ept)
>  		rpmsg_destroy_ept(rpdev->ept);
> -
> -	return err;
>  }
>  
>  static struct bus_type rpmsg_bus = {
> diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
> index 5b3a20a140f9..58f69366bdcc 100644
> --- a/drivers/scsi/scsi_debug.c
> +++ b/drivers/scsi/scsi_debug.c
> @@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device *dev)
>  	return error;
>  }
>  
> -static int sdebug_driver_remove(struct device *dev)
> +static void sdebug_driver_remove(struct device *dev)
>  {
>  	struct sdebug_host_info *sdbg_host;
>  	struct sdebug_dev_info *sdbg_devinfo, *tmp;
> @@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device *dev)
>  	}
>  
>  	scsi_host_put(sdbg_host->shost);
> -	return 0;
>  }
>  
>  static int pseudo_lld_bus_match(struct device *dev,
> diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
> index 1794ff0106bc..7c4f32d76966 100644
> --- a/drivers/siox/siox-core.c
> +++ b/drivers/siox/siox-core.c
> @@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
>  	return sdriver->probe(sdevice);
>  }
>  
> -static int siox_remove(struct device *dev)
> +static void siox_remove(struct device *dev)
>  {
>  	struct siox_driver *sdriver =
>  		container_of(dev->driver, struct siox_driver, driver);
> @@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
>  
>  	if (sdriver->remove)
>  		sdriver->remove(sdevice);
> -
> -	return 0;
>  }
>  
>  static void siox_shutdown(struct device *dev)
> diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
> index 1d2bc181da05..78480e332ab8 100644
> --- a/drivers/slimbus/core.c
> +++ b/drivers/slimbus/core.c
> @@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int slim_device_remove(struct device *dev)
> +static void slim_device_remove(struct device *dev)
>  {
>  	struct slim_device *sbdev = to_slim_device(dev);
>  	struct slim_driver *sbdrv;
> @@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
>  		if (sbdrv->remove)
>  			sbdrv->remove(sbdev);
>  	}
> -
> -	return 0;
>  }
>  
>  static int slim_device_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
> index 7abfc8c4fdc7..475a57b435b2 100644
> --- a/drivers/soc/qcom/apr.c
> +++ b/drivers/soc/qcom/apr.c
> @@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
>  	return adrv->probe(adev);
>  }
>  
> -static int apr_device_remove(struct device *dev)
> +static void apr_device_remove(struct device *dev)
>  {
>  	struct apr_device *adev = to_apr_device(dev);
>  	struct apr_driver *adrv;
> @@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
>  		idr_remove(&apr->svcs_idr, adev->svc_id);
>  		spin_unlock(&apr->svcs_lock);
>  	}
> -
> -	return 0;
>  }
>  
>  static int apr_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index c99181165321..ad2b558dc9cb 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int spi_remove(struct device *dev)
> +static void spi_remove(struct device *dev)
>  {
>  	const struct spi_driver		*sdrv = to_spi_driver(dev->driver);
>  
> @@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
>  	}
>  
>  	dev_pm_domain_detach(dev, true);
> -
> -	return 0;
>  }
>  
>  static void spi_shutdown(struct device *dev)
> diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
> index 51f5aeb65b3b..b37ead9e2fad 100644
> --- a/drivers/spmi/spmi.c
> +++ b/drivers/spmi/spmi.c
> @@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
>  	return err;
>  }
>  
> -static int spmi_drv_remove(struct device *dev)
> +static void spmi_drv_remove(struct device *dev)
>  {
>  	const struct spmi_driver *sdrv = to_spmi_driver(dev->driver);
>  
> @@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
>  	pm_runtime_disable(dev);
>  	pm_runtime_set_suspended(dev);
>  	pm_runtime_put_noidle(dev);
> -	return 0;
>  }
>  
>  static void spmi_drv_shutdown(struct device *dev)
> diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
> index 3a29b5570f9f..8a93c83cb6f8 100644
> --- a/drivers/ssb/main.c
> +++ b/drivers/ssb/main.c
> @@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device *dev)
>  		ssb_drv->shutdown(ssb_dev);
>  }
>  
> -static int ssb_device_remove(struct device *dev)
> +static void ssb_device_remove(struct device *dev)
>  {
>  	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
>  	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
> @@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
>  	if (ssb_drv && ssb_drv->remove)
>  		ssb_drv->remove(ssb_dev);
>  	ssb_device_put(ssb_dev);
> -
> -	return 0;
>  }
>  
>  static int ssb_device_probe(struct device *dev)
> diff --git a/drivers/staging/fieldbus/anybuss/host.c b/drivers/staging/fieldbus/anybuss/host.c
> index 0f730efe9a6d..8a75f6642c78 100644
> --- a/drivers/staging/fieldbus/anybuss/host.c
> +++ b/drivers/staging/fieldbus/anybuss/host.c
> @@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device *dev)
>  	return adrv->probe(adev);
>  }
>  
> -static int anybus_bus_remove(struct device *dev)
> +static void anybus_bus_remove(struct device *dev)
>  {
>  	struct anybuss_client_driver *adrv =
>  		to_anybuss_client_driver(dev->driver);
>  
>  	if (adrv->remove)
>  		adrv->remove(to_anybuss_client(dev));
> -
> -	return 0;
>  }
>  
>  static struct bus_type anybus_bus = {
> diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c
> index 13d319860da5..5a5c17a4519b 100644
> --- a/drivers/staging/greybus/gbphy.c
> +++ b/drivers/staging/greybus/gbphy.c
> @@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int gbphy_dev_remove(struct device *dev)
> +static void gbphy_dev_remove(struct device *dev)
>  {
>  	struct gbphy_driver *gbphy_drv = to_gbphy_driver(dev->driver);
>  	struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
> @@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
>  	pm_runtime_set_suspended(dev);
>  	pm_runtime_put_noidle(dev);
>  	pm_runtime_dont_use_autosuspend(dev);
> -
> -	return 0;
>  }
>  
>  static struct bus_type gbphy_bus_type = {
> diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
> index 6d0b0e67e79e..cbb2118fb35e 100644
> --- a/drivers/target/loopback/tcm_loop.c
> +++ b/drivers/target/loopback/tcm_loop.c
> @@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m, struct Scsi_Host *host)
>  }
>  
>  static int tcm_loop_driver_probe(struct device *);
> -static int tcm_loop_driver_remove(struct device *);
> +static void tcm_loop_driver_remove(struct device *);
>  
>  static int pseudo_lld_bus_match(struct device *dev,
>  				struct device_driver *dev_driver)
> @@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device *dev)
>  	return 0;
>  }
>  
> -static int tcm_loop_driver_remove(struct device *dev)
> +static void tcm_loop_driver_remove(struct device *dev)
>  {
>  	struct tcm_loop_hba *tl_hba;
>  	struct Scsi_Host *sh;
> @@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device *dev)
>  
>  	scsi_remove_host(sh);
>  	scsi_host_put(sh);
> -	return 0;
>  }
>  
>  static void tcm_loop_release_adapter(struct device *dev)
> diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
> index a062befcb3b2..7018d959f775 100644
> --- a/drivers/thunderbolt/domain.c
> +++ b/drivers/thunderbolt/domain.c
> @@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
>  	return driver->probe(svc, id);
>  }
>  
> -static int tb_service_remove(struct device *dev)
> +static void tb_service_remove(struct device *dev)
>  {
>  	struct tb_service *svc = tb_to_service(dev);
>  	struct tb_service_driver *driver;
> @@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
>  	driver = container_of(dev->driver, struct tb_service_driver, driver);
>  	if (driver->remove)
>  		driver->remove(svc);
> -
> -	return 0;
>  }
>  
>  static void tb_service_shutdown(struct device *dev)
> diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> index 9cdfcfe07e87..92498961fd92 100644
> --- a/drivers/tty/serdev/core.c
> +++ b/drivers/tty/serdev/core.c
> @@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int serdev_drv_remove(struct device *dev)
> +static void serdev_drv_remove(struct device *dev)
>  {
>  	const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
>  	if (sdrv->remove)
>  		sdrv->remove(to_serdev_device(dev));
>  
>  	dev_pm_domain_detach(dev, true);
> -
> -	return 0;
>  }
>  
>  static struct bus_type serdev_bus_type = {
> diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
> index 7e13b74e60e5..4169cf40a03b 100644
> --- a/drivers/usb/common/ulpi.c
> +++ b/drivers/usb/common/ulpi.c
> @@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
>  	return drv->probe(to_ulpi_dev(dev));
>  }
>  
> -static int ulpi_remove(struct device *dev)
> +static void ulpi_remove(struct device *dev)
>  {
>  	struct ulpi_driver *drv = to_ulpi_driver(dev->driver);
>  
>  	if (drv->remove)
>  		drv->remove(to_ulpi_dev(dev));
> -
> -	return 0;
>  }
>  
>  static struct bus_type ulpi_bus = {
> diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
> index 7133818a58b9..9e38142acd38 100644
> --- a/drivers/usb/serial/bus.c
> +++ b/drivers/usb/serial/bus.c
> @@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device *dev)
>  	return retval;
>  }
>  
> -static int usb_serial_device_remove(struct device *dev)
> +static void usb_serial_device_remove(struct device *dev)
>  {
>  	struct usb_serial_port *port = to_usb_serial_port(dev);
>  	struct usb_serial_driver *driver;
> @@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device *dev)
>  
>  	if (!autopm_err)
>  		usb_autopm_put_interface(port->serial->interface);
> -
> -	return 0;
>  }
>  
>  static ssize_t new_id_store(struct device_driver *driver,
> diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
> index 7f3c9a8e2bf0..78e0e78954f2 100644
> --- a/drivers/usb/typec/bus.c
> +++ b/drivers/usb/typec/bus.c
> @@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int typec_remove(struct device *dev)
> +static void typec_remove(struct device *dev)
>  {
>  	struct typec_altmode_driver *drv = to_altmode_driver(dev->driver);
>  	struct typec_altmode *adev = to_typec_altmode(dev);
> @@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
>  
>  	adev->desc = NULL;
>  	adev->ops = NULL;
> -
> -	return 0;
>  }
>  
>  struct bus_type typec_bus = {
> diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
> index bb3f1d1f0422..3fc4525fc05c 100644
> --- a/drivers/vdpa/vdpa.c
> +++ b/drivers/vdpa/vdpa.c
> @@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
>  	return ret;
>  }
>  
> -static int vdpa_dev_remove(struct device *d)
> +static void vdpa_dev_remove(struct device *d)
>  {
>  	struct vdpa_device *vdev = dev_to_vdpa(d);
>  	struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver);
>  
>  	if (drv && drv->remove)
>  		drv->remove(vdev);
> -
> -	return 0;
>  }
>  
>  static struct bus_type vdpa_bus = {
> diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_driver.c
> index c368ec824e2b..e2cb1ff56f6c 100644
> --- a/drivers/vfio/mdev/mdev_driver.c
> +++ b/drivers/vfio/mdev/mdev_driver.c
> @@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
>  	return ret;
>  }
>  
> -static int mdev_remove(struct device *dev)
> +static void mdev_remove(struct device *dev)
>  {
>  	struct mdev_driver *drv =
>  		container_of(dev->driver, struct mdev_driver, driver);
> @@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
>  		drv->remove(mdev);
>  
>  	mdev_detach_iommu(mdev);
> -
> -	return 0;
>  }
>  
>  static int mdev_match(struct device *dev, struct device_driver *drv)
> diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> index 4b15c00c0a0a..2a6055c0d4d3 100644
> --- a/drivers/virtio/virtio.c
> +++ b/drivers/virtio/virtio.c
> @@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
>  
>  }
>  
> -static int virtio_dev_remove(struct device *_d)
> +static void virtio_dev_remove(struct device *_d)
>  {
>  	struct virtio_device *dev = dev_to_virtio(_d);
>  	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
> @@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
>  
>  	/* Acknowledge the device's existence again. */
>  	virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
> -	return 0;
>  }
>  
>  static struct bus_type virtio_bus = {
> diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
> index 1b15afea28ee..8dba20186be3 100644
> --- a/drivers/vme/vme.c
> +++ b/drivers/vme/vme.c
> @@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
>  	return -ENODEV;
>  }
>  
> -static int vme_bus_remove(struct device *dev)
> +static void vme_bus_remove(struct device *dev)
>  {
>  	struct vme_driver *driver;
>  	struct vme_dev *vdev = dev_to_vme_dev(dev);
> @@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
>  	driver = dev->platform_data;
>  	if (driver->remove)
>  		driver->remove(vdev);
> -
> -	return 0;
>  }
>  
>  struct bus_type vme_bus_type = {
> diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
> index 2a93b7c9c159..2754bdfadcb8 100644
> --- a/drivers/xen/xenbus/xenbus.h
> +++ b/drivers/xen/xenbus/xenbus.h
> @@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
>  
>  int xenbus_match(struct device *_dev, struct device_driver *_drv);
>  int xenbus_dev_probe(struct device *_dev);
> -int xenbus_dev_remove(struct device *_dev);
> +void xenbus_dev_remove(struct device *_dev);
>  int xenbus_register_driver_common(struct xenbus_driver *drv,
>  				  struct xen_bus_type *bus,
>  				  struct module *owner,
> diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
> index 97f0d234482d..f4f52d574df9 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -326,7 +326,7 @@ int xenbus_dev_probe(struct device *_dev)
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_probe);
>  
> -int xenbus_dev_remove(struct device *_dev)
> +void xenbus_dev_remove(struct device *_dev)
>  {
>  	struct xenbus_device *dev = to_xenbus_device(_dev);
>  	struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
> @@ -356,8 +356,6 @@ int xenbus_dev_remove(struct device *_dev)
>  	if (!drv->allow_rebind ||
>  	    xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)
>  		xenbus_switch_state(dev, XenbusStateClosed);
> -
> -	return 0;
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_remove);
>  
> diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
> index 1ea5e1d1545b..062777a45a74 100644
> --- a/include/linux/device/bus.h
> +++ b/include/linux/device/bus.h
> @@ -91,7 +91,7 @@ struct bus_type {
>  	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
>  	int (*probe)(struct device *dev);
>  	void (*sync_state)(struct device *dev);
> -	int (*remove)(struct device *dev);
> +	void (*remove)(struct device *dev);
>  	void (*shutdown)(struct device *dev);
>  
>  	int (*online)(struct device *dev);
> diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
> index 002fb5bf220b..c9579d97fbab 100644
> --- a/sound/aoa/soundbus/core.c
> +++ b/sound/aoa/soundbus/core.c
> @@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev, struct kobj_uevent_env *env)
>  	return retval;
>  }
>  
> -static int soundbus_device_remove(struct device *dev)
> +static void soundbus_device_remove(struct device *dev)
>  {
>  	struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
>  	struct soundbus_driver * drv = to_soundbus_driver(dev->driver);
> @@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device *dev)
>  	if (dev->driver && drv->remove)
>  		drv->remove(soundbus_dev);
>  	soundbus_dev_put(soundbus_dev);
> -
> -	return 0;
>  }
>  
>  static void soundbus_device_shutdown(struct device *dev)
> 
> base-commit: 79160a603bdb51916226caf4a6616cc4e1c58a58
> prerequisite-patch-id: e5c7b97ea399fddc2695e8cf5d0c02d14175abac
> -- 
> 2.30.2
> 

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:47:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:47:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151050.279211 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ibc-0003oi-Oc; Tue, 06 Jul 2021 10:47:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151050.279211; Tue, 06 Jul 2021 10:47:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ibc-0003ne-HO; Tue, 06 Jul 2021 10:47:08 +0000
Received: by outflank-mailman (input) for mailman id 151050;
 Tue, 06 Jul 2021 10:45:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=oUuO=L6=kernel.org=vkoul@srs-us1.protection.inumbo.net>)
 id 1m0iaE-0003jJ-AW
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:45:42 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a8f6146f-762d-46de-9604-6b5f5a01fbe3;
 Tue, 06 Jul 2021 10:45:41 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id B74ED6115A;
 Tue,  6 Jul 2021 10:45:38 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a8f6146f-762d-46de-9604-6b5f5a01fbe3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625568340;
	bh=TAVF2IHc14rn/yOfV6TgmbqJAnfb0ILtNpwUOOE8P74=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=qnDz57OxqxhKbIGKnm6WXO3ax9Jo3aAHpLlFSbF8mTdAxrJmPQJCxsr8+ht0s7IDc
	 xYOYxvjvsX3ziqU/f/XYLRW5li2BYhFWrAufqc4Y6IUt+VIgCU61q8WT5QtyauWi71
	 3GBT4a+et00hGy9nCLqm8Av7L+ECtX1ZZb7AHvZBYeXJOuPw/J+F5+MSk6hfnqsqky
	 3hf/hCxp2HS6AXb1Eu+dF2EELhZURp3muNIoWPu7Xiyh/FENrfSE7Xc8B3v9PjCgSi
	 vKnGjaNhJjEE1iB7jKy6BPi3AsIP1HMf37fHc+SUFeV7QSyxP2vm1nOS/QzuTrjnob
	 Lq9ChTTCah7rA==
Date: Tue, 6 Jul 2021 16:15:36 +0530
From: Vinod Koul <vkoul@kernel.org>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <YOQ0UPduZkhZ+CmB@matsya>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>

On 06-07-21, 11:50, Uwe Kleine-Knig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.

Acked-By: Vinod Koul <vkoul@kernel.org>

-- 
~Vinod


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:47:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:47:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151066.279237 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0icE-0005SY-G1; Tue, 06 Jul 2021 10:47:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151066.279237; Tue, 06 Jul 2021 10:47:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0icE-0005SR-Cv; Tue, 06 Jul 2021 10:47:46 +0000
Received: by outflank-mailman (input) for mailman id 151066;
 Tue, 06 Jul 2021 10:47:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=sJ/p=L6=wdc.com=prvs=8148ef2bb=Johannes.Thumshirn@srs-us1.protection.inumbo.net>)
 id 1m0icC-0004o8-Mu
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:47:45 +0000
Received: from esa5.hgst.iphmx.com (unknown [216.71.153.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 942155aa-de47-11eb-8484-12813bfff9fa;
 Tue, 06 Jul 2021 10:47:38 +0000 (UTC)
Received: from mail-bn8nam12lp2173.outbound.protection.outlook.com (HELO
 NAM12-BN8-obe.outbound.protection.outlook.com) ([104.47.55.173])
 by ob1.hgst.iphmx.com with ESMTP; 06 Jul 2021 18:47:31 +0800
Received: from PH0PR04MB7416.namprd04.prod.outlook.com (2603:10b6:510:12::17)
 by PH0PR04MB7702.namprd04.prod.outlook.com (2603:10b6:510:5d::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Tue, 6 Jul
 2021 10:47:28 +0000
Received: from PH0PR04MB7416.namprd04.prod.outlook.com
 ([fe80::d978:d61e:2fc4:b8a3]) by PH0PR04MB7416.namprd04.prod.outlook.com
 ([fe80::d978:d61e:2fc4:b8a3%8]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 10:47:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 942155aa-de47-11eb-8484-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com;
  t=1625568457; x=1657104457;
  h=from:to:cc:subject:date:message-id:references:
   content-transfer-encoding:mime-version;
  bh=0HeHvxQUl+uSbvupGsQSNn3KcUykvFBbNZ+O9GrF1VI=;
  b=XJf0mzQrEWAHXE3Rb+ItgxUH476DZkl9A88uJztLt6TMA7HK11LVjNny
   7bM4VBuSWsHHAXwQpez3DCMfMDp9pVj4kqWCaCgTqFdZkdx55DRjP1VDy
   dx4nnURcVPMmPi7xGlb56eNJQr3WsUU/0YYmUOlevvmnOVWEdSUanbtO1
   aoBGzEAyVi0gLenJ13SZ68arHYmk9f28nX8BXxBU/uFNJ8pyupOAy5hbV
   Y7yainUyFPXaUGSwSSSgupBaXra/pZXbbDovsDUudYbZrwONOiPj8pdmC
   HJGUANgQxgJO2RyyyVTfhlOGPgRK2DiI6SgXB2fKce0wbYcaWoVJi5lbl
   g==;
IronPort-SDR: icKNRiWxHG7lNdL2j1zG3AM6Rff9NRVHa2U8qq5PN+w3lnrwv88m0NJ+vDnvjBPTnlvQlLSWiY
 oV40So3615VozUwETZcrWCJ/Cag/SBsZaRNZu0wtfu8G1FzbF4vtPT4aMn2gGoVyzGOc6RbbiX
 19qvZ/iopksKzx8CU3FNDuGYacgHlYkfjA5T2x57XQ0pa0KYLrP1gjhgIeShC+Z6g6gsjr/iGV
 dx6BXlJlasDPN9f96BmY2G47ZRWHnAhVl88LxfDWuGPlVs3ZxcLDBykvVEkgDeRA3Z8Qw8Rdrz
 sMU=
X-IronPort-AV: E=Sophos;i="5.83,328,1616428800"; 
   d="scan'208";a="173811831"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=P1PBQSNbLP7XtlGmB5KcSs13NdQIrRYOzUBf1Qey9dUnfluE1uXynE5g934ofcbQzWaUeXuECqSDR8e/yRvrMfmTiLeqqPPVPf045Fbt7ltBfAT8enS3QHixZxWMJOu71GhKqpQg2xTAXNN/a2mVS5f3ov34/X2RQY/IkT7/m4i7VKWjBa2qs90Kv+vU3WnP+k8c8ByqPYQH/SnPVAoBKYpst36KIbUUi+xLGDhkVh9Y6OUugKYZEIzIFCQlvbbMACbWvgGBvWbtsat3IqZ+MLh1sKJFihve8nMAHdhWXqge/x5CndAzpKbC2mcVNlaIMA0/nGu/sPSjvDilqtR1kA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6WRmmxKbjWu7b7FYVCfBytnp1iB0TACw0ikNuib3atc=;
 b=RnbmuVZgg01FnMDB4YInH3bMKjHBXR/MdX2S6O6E0SZ65EHgJPOYeOjKzliPtAst+UkSXL2uSu8ySk1UEbXsZbkvnBhMvQD6oS++WR1n7rdeGyBOIVaLaXuW/R9TOYVGThVfsn7mHlzUADYIoiP2Yxzkk8rnFuzQrhHhT8EmMmt0ORzyjjMx27DhxAfg3hLJtN58x5EL65V2/438yY++lWrQeCuVRAU093zrWCmVuMNLdC+5FfjRETIs8oAj8Q+dXD41Gl49RJGX2+IsTkaNjWS3mXlO/u2Wm7TbbnW1qslo+mdf40b8J30t4aD+/9ME1EuhDzfZ0P6BoBL/DOVWMg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass
 header.d=wdc.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6WRmmxKbjWu7b7FYVCfBytnp1iB0TACw0ikNuib3atc=;
 b=rLwdpXkK6Q78IHG9Q1WJvNUeCZg6kPjSrovy5PgxOhwrhfUCzjk1umY6g2M4H9gKmS0Jy8zEwWcb5FsXkbyPu7fwEqCsRPgkxoMm+DIPL9A2ShiY66nkulRkOuS7Xy9VIVGaVpJ8TGXsf9n7on8l+mkyqLl93iT3dX0RxUPgfmU=
From: Johannes Thumshirn <Johannes.Thumshirn@wdc.com>
To: Lee Jones <lee.jones@linaro.org>, =?iso-8859-1?Q?Uwe_Kleine-K=F6nig?=
	<u.kleine-koenig@pengutronix.de>
CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "kernel@pengutronix.de"
	<kernel@pengutronix.de>, "linux-kernel@vger.kernel.org"
	<linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, Thomas
 Bogendoerfer <tsbogend@alpha.franken.de>, "James E.J. Bottomley"
	<James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, Geoff
 Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, Benjamin
 Herrenschmidt <benh@kernel.crashing.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>, "linux-mips@vger.kernel.org"
	<linux-mips@vger.kernel.org>, "linux-parisc@vger.kernel.org"
	<linux-parisc@vger.kernel.org>, "linuxppc-dev@lists.ozlabs.org"
	<linuxppc-dev@lists.ozlabs.org>, "linux-acpi@vger.kernel.org"
	<linux-acpi@vger.kernel.org>, "linux-wireless@vger.kernel.org"
	<linux-wireless@vger.kernel.org>, "linux-sunxi@lists.linux.dev"
	<linux-sunxi@lists.linux.dev>, "linux-cxl@vger.kernel.org"
	<linux-cxl@vger.kernel.org>, "nvdimm@lists.linux.dev"
	<nvdimm@lists.linux.dev>, "dmaengine@vger.kernel.org"
	<dmaengine@vger.kernel.org>, "linux1394-devel@lists.sourceforge.net"
	<linux1394-devel@lists.sourceforge.net>, "linux-fpga@vger.kernel.org"
	<linux-fpga@vger.kernel.org>, "linux-input@vger.kernel.org"
	<linux-input@vger.kernel.org>, "linux-hyperv@vger.kernel.org"
	<linux-hyperv@vger.kernel.org>, "linux-i2c@vger.kernel.org"
	<linux-i2c@vger.kernel.org>, "linux-i3c@lists.infradead.org"
	<linux-i3c@lists.infradead.org>, "industrypack-devel@lists.sourceforge.net"
	<industrypack-devel@lists.sourceforge.net>, "linux-media@vger.kernel.org"
	<linux-media@vger.kernel.org>, "linux-mmc@vger.kernel.org"
	<linux-mmc@vger.kernel.org>, "netdev@vger.kernel.org"
	<netdev@vger.kernel.org>, "linux-ntb@googlegroups.com"
	<linux-ntb@googlegroups.com>, "linux-pci@vger.kernel.org"
	<linux-pci@vger.kernel.org>, "platform-driver-x86@vger.kernel.org"
	<platform-driver-x86@vger.kernel.org>, "linux-remoteproc@vger.kernel.org"
	<linux-remoteproc@vger.kernel.org>, "linux-scsi@vger.kernel.org"
	<linux-scsi@vger.kernel.org>, "alsa-devel@alsa-project.org"
	<alsa-devel@alsa-project.org>, "linux-arm-msm@vger.kernel.org"
	<linux-arm-msm@vger.kernel.org>, "linux-spi@vger.kernel.org"
	<linux-spi@vger.kernel.org>, "linux-staging@lists.linux.dev"
	<linux-staging@lists.linux.dev>, "greybus-dev@lists.linaro.org"
	<greybus-dev@lists.linaro.org>, "target-devel@vger.kernel.org"
	<target-devel@vger.kernel.org>, "linux-usb@vger.kernel.org"
	<linux-usb@vger.kernel.org>, "linux-serial@vger.kernel.org"
	<linux-serial@vger.kernel.org>, "virtualization@lists.linux-foundation.org"
	<virtualization@lists.linux-foundation.org>, "kvm@vger.kernel.org"
	<kvm@vger.kernel.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
Subject: Re: [PATCH] bus: Make remove callback return void
Thread-Topic: [PATCH] bus: Make remove callback return void
Thread-Index: AQHXclKxeSX1CgceMkmBp4EcubGaMw==
Date: Tue, 6 Jul 2021 10:47:28 +0000
Message-ID:
 <PH0PR04MB7416BD31D84E2F63346A6F709B1B9@PH0PR04MB7416.namprd04.prod.outlook.com>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
 <YOQxRS8HLTYthWNn@dell>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: linaro.org; dkim=none (message not signed)
 header.d=none;linaro.org; dmarc=none action=none header.from=wdc.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 8dc4ccbf-e097-4bf2-f839-08d9406b7312
x-ms-traffictypediagnostic: PH0PR04MB7702:
x-microsoft-antispam-prvs:
 <PH0PR04MB770242BAE89F9DA372A8EAA69B1B9@PH0PR04MB7702.namprd04.prod.outlook.com>
wdcipoutbound: EOP-TRUE
x-ms-oob-tlc-oobclassifiers: OLM:8882;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 TDUwnoFGZT63FYynAb9ayiBh3n+sY5VDEM1e+DTT8NErFTFDuJP1XD8Yrs1G94p3yHBvxbPO1fdGSVpQUSd8BZbq62HCj9iPXqXzJBNS1Z4vbwuDSkDoYZElAI1o5CiEQj/Qz9zof9EOvRqaCkYb2RbGE8LVpJ1BrlxCJA2Jttgo/MDIX3LauPfnocQ9XOMNsDFSGyrLZKXB+pNAR9baWItvKqOai1I1tu/pYjvY/bFVgDmehwIbJ2PuN+mLMRC7D12BZNEH5iDNHJXuvdGbNPthrqiFKLBidYUuK4eAIC1gAmGIkvP4OJeEcc1q12LMtZIIgpJvMQ5ZOeA+Qpl8fiInGsoQLOn7IJIwdtQL0oA6x8Z++uBx3ECIzNo87GL9Eice7ElyS2VgC422ae/08Gbb70wcJohOpwEn/HDSo4OhZ5QtADxDkSDpFOQ9pONfEbwKk4l8BqZldLDV7Zz6SDNuzUBWN+l69a7dlxX+xMO4SWtXWRqKoyKVZZN2K3rx69YzKk0kQVgepBVegycQLwfGYoA3pdzBuLe1XoPdLkVArBFhUfCEs71wUJwSeIUGXDOOESjtgyoHIvYK8gym595gz+unxZl4JVV+BilanfDksADGOfe47kea48yKLA/Qv6lje0VEsp1y8wUcvUa9fX+pjZbPI+5CXqFZVswJFDYlsx5nsOcAQUo6/hI6mRNRGFEdJwZxsdQ7IbOjGQVBHlpCiLeXDONaki0sfmfevHWbp9bVyfC1FbV2wUch9/pu0kqRIc53B4tRPF/mjIO533d7FgMnqEiHYFvcJxuX54I=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR04MB7416.namprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(376002)(39860400002)(396003)(136003)(5660300002)(122000001)(86362001)(52536014)(8676002)(4326008)(76116006)(38100700002)(8936002)(478600001)(316002)(110136005)(966005)(9686003)(6506007)(186003)(54906003)(2906002)(66946007)(7416002)(33656002)(7696005)(66446008)(64756008)(53546011)(26005)(7406005)(55016002)(66556008)(71200400001)(66476007)(83380400001)(66574015)(557034005);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?PNShz4sX/Zuuhh+uYepc7ZyM5a0DhCvQW4A4hBKEq08a3mtue7NlLZzIoF?=
 =?iso-8859-1?Q?1v6cGOS0v97K8wa3LN225ORoGZSneLip/2HF/7lHe06l0VW0lsaXB9N6m3?=
 =?iso-8859-1?Q?57ussSpboi6cA0PQstpKctbjttU2s5Ftu8PFDY/kSd8jRaMl8a/lIUi2EM?=
 =?iso-8859-1?Q?M3d9Oxi8gVklIxKdmUtZWMYkuzYLbZQqdr4ahCvTAOzeH77at0HjHor6nS?=
 =?iso-8859-1?Q?KXRzyQFlYgNXAlfo7XcvAz5bDZs0Z7xVkHd2DqkkKBhWwHLJ+67sYrZ+UY?=
 =?iso-8859-1?Q?hzcY+vAEO5cPj2pS1znhj3Q8CRBQfV52WJ8g8y9X1q2/u2f+zKLbJjDJ2I?=
 =?iso-8859-1?Q?eZ1JBCVWIHh2ZXML2MtW2oZE6OfBEawpZ/kaeFVJwXBzJNs21215Q0hTRc?=
 =?iso-8859-1?Q?4+1ag+YJcCGTfiLs2GHqQh+VJVz9Y5e5kbVA93Oav36Rct/Or4ByGAiWoc?=
 =?iso-8859-1?Q?vnalRtk2WyZ6roBA6Une1d3vJTWNrRZnn8rILP72FYkf6HIOiw4rY2FvOF?=
 =?iso-8859-1?Q?Xc7H63Tt5FMLhKiHp3wc7Z5tQxh24yzXqCoMoxEC7CKRXSS2666TYmHW82?=
 =?iso-8859-1?Q?/IoM0ylpJApNXlsyPpMB6OPRsNJ+FhJwYTWdCtyaN9tKGj4i5TtswnbdJO?=
 =?iso-8859-1?Q?wxSOhWfCHCDURC5SWpMo/PZOekfZvJZKdjuosTuFTCV2gETrYKsJoXheD6?=
 =?iso-8859-1?Q?0+HwTs9hL4rFkORAIts6XgXscr5NXhUJ/r1/my4CQt3ZDkmE4wwEyr793G?=
 =?iso-8859-1?Q?MyLzXY7Vna2ykFNyrk0iBlGpujjoiPWoshxVGdhZp8w9dH9d7TR09vg9C7?=
 =?iso-8859-1?Q?1Ba6R3OK+SvgviLx5DR2kFIs7KfANcgNwB+eSPU2jO+ZheRSrdYE72CHfE?=
 =?iso-8859-1?Q?bcHXBr37H4A9GenN7rA909rullCfnbyK2tMPXMYJ0iQbdu3jsfM9ZyNmla?=
 =?iso-8859-1?Q?KqaNR3BFbMMlvZYKUMD8SNDqAncs27eyay/Nk4eFBecgqLnS66Tno13Km5?=
 =?iso-8859-1?Q?fgdDmwEOxKii5gFgeM5wdA7X8bnqi5l5qzc8ewapTyg9r51UdCVszIe/XC?=
 =?iso-8859-1?Q?OeCPHk4uubgaDN8GZuxd2OMBVYX4C4KRQhZ23bwDCaqSyH+1Ft2RiNQPZU?=
 =?iso-8859-1?Q?x2E9kVh9CuvaZ41I3afmW1ttKDZRhZB4ql8z7i7LTafqM7u2ich51HG283?=
 =?iso-8859-1?Q?3cV/V+bP0rOzwTwYAoK8lLEpRezgYZ6bdjGylovdV0Opd4ZFwxHwOzmtlS?=
 =?iso-8859-1?Q?9BvD3UAnAjOwDdTAnrxgiPZuLNcT8n181celFU4NWTEAieOvvhfD0cHNPP?=
 =?iso-8859-1?Q?h8s9+BRT/uaBvYoWS9xw+ofFTXuR1WGhbQ80Kv+l5Arm/y2mNyXSG81C5N?=
 =?iso-8859-1?Q?Y86jrH9qZgxh2Q8j0zBBheMYwPwwaghA=3D=3D?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: wdc.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR04MB7416.namprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 8dc4ccbf-e097-4bf2-f839-08d9406b7312
X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jul 2021 10:47:28.4164
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: b61c8803-16f3-4c35-9b17-6f65f441df86
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: mg7dsWqbGzYbTl8uhsphUGed09iNxbd3NjPvryxbiSZXjb4yBk9mRE7zbRlhN3hByaJp5uI2xkek3a+5ngeLOZVjO99t5dCIyDknas4G6is=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR04MB7702

On 06/07/2021 12:36, Lee Jones wrote:=0A=
> On Tue, 06 Jul 2021, Uwe Kleine-K=F6nig wrote:=0A=
> =0A=
>> The driver core ignores the return value of this callback because there=
=0A=
>> is only little it can do when a device disappears.=0A=
>>=0A=
>> This is the final bit of a long lasting cleanup quest where several=0A=
>> buses were converted to also return void from their remove callback.=0A=
>> Additionally some resource leaks were fixed that were caused by drivers=
=0A=
>> returning an error code in the expectation that the driver won't go=0A=
>> away.=0A=
>>=0A=
>> With struct bus_type::remove returning void it's prevented that newly=0A=
>> implemented buses return an ignored error code and so don't anticipate=
=0A=
>> wrong expectations for driver authors.=0A=
>>=0A=
>> Signed-off-by: Uwe Kleine-K=F6nig <u.kleine-koenig@pengutronix.de>=0A=
>> ---=0A=
>> Hello,=0A=
>>=0A=
>> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove=
=0A=
>> return void" that is not yet applied, see=0A=
>> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutr=
onix.de.=0A=
>>=0A=
>> I tested it using allmodconfig on amd64 and arm, but I wouldn't be=0A=
>> surprised if I still missed to convert a driver. So it would be great to=
=0A=
>> get this into next early after the merge window closes.=0A=
>>=0A=
>> I send this mail to all people that get_maintainer.pl emits for this=0A=
>> patch. I wonder how many recipents will refuse this mail because of the=
=0A=
>> long Cc: list :-)=0A=
>>=0A=
>> Best regards=0A=
>> Uwe=0A=
>>=0A=
>>  arch/arm/common/locomo.c                  | 3 +--=0A=
>>  arch/arm/common/sa1111.c                  | 4 +---=0A=
>>  arch/arm/mach-rpc/ecard.c                 | 4 +---=0A=
>>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--=0A=
>>  arch/parisc/kernel/drivers.c              | 5 ++---=0A=
>>  arch/powerpc/platforms/ps3/system-bus.c   | 3 +--=0A=
>>  arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--=0A=
>>  arch/powerpc/platforms/pseries/vio.c      | 3 +--=0A=
>>  drivers/acpi/bus.c                        | 3 +--=0A=
>>  drivers/amba/bus.c                        | 4 +---=0A=
>>  drivers/base/auxiliary.c                  | 4 +---=0A=
>>  drivers/base/isa.c                        | 4 +---=0A=
>>  drivers/base/platform.c                   | 4 +---=0A=
>>  drivers/bcma/main.c                       | 6 ++----=0A=
>>  drivers/bus/sunxi-rsb.c                   | 4 +---=0A=
>>  drivers/cxl/core.c                        | 3 +--=0A=
>>  drivers/dax/bus.c                         | 4 +---=0A=
>>  drivers/dma/idxd/sysfs.c                  | 4 +---=0A=
>>  drivers/firewire/core-device.c            | 4 +---=0A=
>>  drivers/firmware/arm_scmi/bus.c           | 4 +---=0A=
>>  drivers/firmware/google/coreboot_table.c  | 4 +---=0A=
>>  drivers/fpga/dfl.c                        | 4 +---=0A=
>>  drivers/hid/hid-core.c                    | 4 +---=0A=
>>  drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---=0A=
>>  drivers/hv/vmbus_drv.c                    | 5 +----=0A=
>>  drivers/hwtracing/intel_th/core.c         | 4 +---=0A=
>>  drivers/i2c/i2c-core-base.c               | 5 +----=0A=
>>  drivers/i3c/master.c                      | 4 +---=0A=
>>  drivers/input/gameport/gameport.c         | 3 +--=0A=
>>  drivers/input/serio/serio.c               | 3 +--=0A=
>>  drivers/ipack/ipack.c                     | 4 +---=0A=
>>  drivers/macintosh/macio_asic.c            | 4 +---=0A=
>>  drivers/mcb/mcb-core.c                    | 4 +---=0A=
=0A=
Acked-by: Johannes Thumshirn <jth@kernel.org> # for drivers/mcb=0A=


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:54:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:54:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151079.279247 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iiS-00079r-DU; Tue, 06 Jul 2021 10:54:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151079.279247; Tue, 06 Jul 2021 10:54:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0iiS-00079k-Ae; Tue, 06 Jul 2021 10:54:12 +0000
Received: by outflank-mailman (input) for mailman id 151079;
 Tue, 06 Jul 2021 10:54:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=zg9J=L6=arm.com=rahul.singh@srs-us1.protection.inumbo.net>)
 id 1m0iiR-00079d-Ka
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:54:11 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ca720e2b-a021-4f4b-8373-f61dc560804c;
 Tue, 06 Jul 2021 10:54:09 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 587AB1FB;
 Tue,  6 Jul 2021 03:54:09 -0700 (PDT)
Received: from e109506.cambridge.arm.com (e109506.cambridge.arm.com
 [10.1.199.1])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 70D623F694;
 Tue,  6 Jul 2021 03:54:08 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ca720e2b-a021-4f4b-8373-f61dc560804c
From: Rahul Singh <rahul.singh@arm.com>
To: xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com,
	rahul.singh@arm.com,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: [PATCH] xen/arm: smmuv1: Switch from kzalloc_array(..) to devm_kcalloc(..)
Date: Tue,  6 Jul 2021 11:53:59 +0100
Message-Id: <2c611dec5f1dbd6040d7a37d2d72ad2fc66e113f.1625568432.git.rahul.singh@arm.com>
X-Mailer: git-send-email 2.17.1

Switch from kzalloc_array(..) to devm_kcalloc(..) when allocating the
SMR to make code coherent.

Signed-off-by: Rahul Singh <rahul.singh@arm.com>
---
 xen/drivers/passthrough/arm/smmu.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index da2cd457d7..658c40433c 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -149,7 +149,8 @@ typedef enum irqreturn irqreturn_t;
 #define kzalloc(size, flags)		_xzalloc(size, sizeof(void *))
 #define devm_kzalloc(dev, size, flags)	_xzalloc(size, sizeof(void *))
 #define kmalloc_array(size, n, flags)	_xmalloc_array(size, sizeof(void *), n)
-#define kzalloc_array(size, n, flags)	_xzalloc_array(size, sizeof(void *), n)
+#define devm_kcalloc(dev, n, size, flags)			\
+	_xzalloc_array(size, sizeof(void *), n)
 
 static void __iomem *devm_ioremap_resource(struct device *dev,
 					   struct resource *res)
@@ -2222,7 +2223,8 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
 		smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
 
 		/* Zero-initialised to mark as invalid */
-		smmu->smrs = kzalloc_array(sizeof(*smmu->smrs), size, GFP_KERNEL);
+		smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
+								GFP_KERNEL);
 		if (!smmu->smrs)
 			return -ENOMEM;
 
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:56:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:56:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151073.279259 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ikL-0007ld-Pj; Tue, 06 Jul 2021 10:56:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151073.279259; Tue, 06 Jul 2021 10:56:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ikL-0007lW-Mi; Tue, 06 Jul 2021 10:56:09 +0000
Received: by outflank-mailman (input) for mailman id 151073;
 Tue, 06 Jul 2021 10:49:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=frcV=L6=kernel.org=johan@srs-us1.protection.inumbo.net>)
 id 1m0ieA-0006Ks-3z
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:49:46 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e005cf8c-de47-11eb-8484-12813bfff9fa;
 Tue, 06 Jul 2021 10:49:45 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 6A11E6113A;
 Tue,  6 Jul 2021 10:49:44 +0000 (UTC)
Received: from johan by xi.lan with local (Exim 4.94.2)
 (envelope-from <johan@kernel.org>)
 id 1m0idy-0003U8-8E; Tue, 06 Jul 2021 12:49:34 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e005cf8c-de47-11eb-8484-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625568584;
	bh=QakVDMCwjBt5tusk+4GnLyspONeoeI28ccgP32Kkl6Y=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=XLBiGX+c23s7Hd4vl9BpJNl+HHlvfzXaPVrxwmNjZbEn3M/O+E2BBk+XwQO60Fx+h
	 AGg3I9ZxntsVRKX9hKl3+llY2WPdIEmlFNvB047fUI1IK4JVxOEF4dF9gqmuEuGb+m
	 YdZOAhq21BupqowkOvwPwtMAMl0LvNKX33WcPSHpRbL6TIhRCmu9lOkum3OF5ngTKK
	 9dqdoQWVX++wNeQLXO8JH9t41sX/NUE8HwM2MQno+iFQNi2V60qlJhNUGu7azofLM8
	 OVyn3cBQUkqlxFBpjSV6EjXVn4VMkYYJLp789FfNvMpAjh38hTrSLglIFeyVVqTb4s
	 nT0/m/zLxXrsA==
Date: Tue, 6 Jul 2021 12:49:34 +0200
From: Johan Hovold <johan@kernel.org>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <YOQ1PnNT26VsRfLf@hovoldconsulting.com>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>

On Tue, Jul 06, 2021 at 11:50:37AM +0200, Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

>  drivers/staging/greybus/gbphy.c           | 4 +---

>  drivers/usb/serial/bus.c                  | 4 +---

>  include/linux/device/bus.h                | 2 +-

Acked-by: Johan Hovold <johan@kernel.org>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:57:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:57:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151089.279270 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ilC-0008La-3U; Tue, 06 Jul 2021 10:57:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151089.279270; Tue, 06 Jul 2021 10:57:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ilB-0008LT-WE; Tue, 06 Jul 2021 10:57:02 +0000
Received: by outflank-mailman (input) for mailman id 151089;
 Tue, 06 Jul 2021 10:57:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=fRgM=L6=linaro.org=srinivas.kandagatla@srs-us1.protection.inumbo.net>)
 id 1m0ilA-0008LH-CK
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:57:00 +0000
Received: from mail-wr1-x432.google.com (unknown [2a00:1450:4864:20::432])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 72e8b367-3935-47c9-8861-e74d2066ff95;
 Tue, 06 Jul 2021 10:56:59 +0000 (UTC)
Received: by mail-wr1-x432.google.com with SMTP id i8so12669854wrp.12
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 03:56:59 -0700 (PDT)
Received: from [192.168.86.34]
 (cpc86377-aztw32-2-0-cust226.18-1.cable.virginm.net. [92.233.226.227])
 by smtp.googlemail.com with ESMTPSA id o3sm16468134wrw.56.2021.07.06.03.56.55
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 06 Jul 2021 03:56:57 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 72e8b367-3935-47c9-8861-e74d2066ff95
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=linaro.org; s=google;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=l+H215FJz8pJPI4hh9v/iWNuVbn0nifA4Jaafd28qC4=;
        b=UCSZee8bkwQhVbXkWa9n6dda1YB5cGQkIPiVKhb8KKz80S/zIXHEgxifSSr+8L29bp
         bwv7fkXzMNhKGGQN2c3BmsUcjrj/WCoXm6Ben2qP8+Bg0YH95vQBsFhGIbEyGr/lrU1Q
         Ln5txN4w7J+T5EMRaT/NpEGp+Hm9dI3o+V77bGk/sdRf0SYC4Lr7n5Wxc/3RjcZaFj49
         pMNis8YQVecjuUzjIFQPnwBJPdiGSBK5ZHDxUgMGNPSzs1az976bZyXyvd6ztydUQ9Xm
         nwGGg1WV1KPpW+turyU66Gq6SgHBmHxg/+HCmUj/1/PNr7tZsqoiZrxGaduOWyUClunz
         BuDQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=l+H215FJz8pJPI4hh9v/iWNuVbn0nifA4Jaafd28qC4=;
        b=o9KZn0J9CZVFWX9rG76JYFb4jrukADMmusPRHR7/r+8nfIOwb3b5mXivlMui8NviIc
         qhOtFmu5lFU6jwq/rmZmJtoCfkVnMVhSQBfxfBhYfSHyALy38OMG8sphhMJIizWhCV+4
         utiDJiQuD8WSWTTtwpHmR7FNmvapybRD41LZGwLzraykHfyaDApcLuv8lxc1p+njCBnL
         y3J2UiuqLlsmK5+lA4nJN7wANFh+cuEMFDdUHCMJmD6Pd8HTlgpVhk9XfqYnIqJWiFqe
         NQvK2Gd7a0coAS5YJ76lmdV6L+ZOEhooCywV9EiU6HD7HTA35oGZzw72axNB5/s7ua0+
         ZTUw==
X-Gm-Message-State: AOAM531+wdRr809yzAX3eRWPH3Kb8wmulf5/RGYknu8RyxTjIZnJDbGB
	2D0FEQs49eQcBeETgAtQC7q2G19KSDoY1fQN
X-Google-Smtp-Source: ABdhPJwMhrNwpvhovE9XwK0jC9OIuq8TBsnt9DrnKno6fhX9rnIZO8Cd1er4LBIyS1GM0G/5i1HmFw==
X-Received: by 2002:a5d:4711:: with SMTP id y17mr21172584wrq.355.1625569018612;
        Tue, 06 Jul 2021 03:56:58 -0700 (PDT)
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org,
 Russell King <linux@armlinux.org.uk>,
 Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
 Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
 Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>,
 Paul Mackerras <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
 Len Brown <lenb@kernel.org>, William Breathitt Gray
 <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?=
 <zajec5@gmail.com>, Maxime Ripard <mripard@kernel.org>,
 Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec <jernej.skrabec@gmail.com>,
 Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>,
 Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>,
 Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>,
 Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>,
 Jiri Kosina <jikos@kernel.org>,
 Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
 "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>,
 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
 Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>,
 Dmitry Torokhov <dmitry.torokhov@gmail.com>,
 Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
 Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>,
 Mauro Carvalho Chehab <mchehab@kernel.org>,
 Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>,
 Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>,
 Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>,
 Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>,
 Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
 Kishon Vijay Abraham I <kishon@ti.com>,
 Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
 =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>,
 Bjorn Helgaas <bhelgaas@google.com>,
 Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Message-ID: <bd408732-a23d-d3e6-3786-ea9fbf114d50@linaro.org>
Date: Tue, 6 Jul 2021 11:56:54 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit



On 06/07/2021 10:50, Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-König<u.kleine-koenig@pengutronix.de>
> ---
...

>   drivers/slimbus/core.c                    | 4 +---

for slimbus changes:

Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 10:59:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 10:59:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151094.279281 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0inK-0000be-IG; Tue, 06 Jul 2021 10:59:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151094.279281; Tue, 06 Jul 2021 10:59:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0inK-0000bX-Ed; Tue, 06 Jul 2021 10:59:14 +0000
Received: by outflank-mailman (input) for mailman id 151094;
 Tue, 06 Jul 2021 10:57:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=fbDq=L6=redhat.com=cohuck@srs-us1.protection.inumbo.net>)
 id 1m0ils-0000XB-BH
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 10:57:44 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [216.205.24.124])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 4e2bda73-da8e-4546-bb28-9f16cb37f6ca;
 Tue, 06 Jul 2021 10:57:43 +0000 (UTC)
Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com
 [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-263-5mCOs4Y3P-6VHTb8_rh9-g-1; Tue, 06 Jul 2021 06:57:41 -0400
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
 [10.5.11.12])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 481AE100B3AC;
 Tue,  6 Jul 2021 10:57:36 +0000 (UTC)
Received: from localhost (ovpn-113-13.ams2.redhat.com [10.36.113.13])
 by smtp.corp.redhat.com (Postfix) with ESMTPS id 95A0A60CC6;
 Tue,  6 Jul 2021 10:57:19 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4e2bda73-da8e-4546-bb28-9f16cb37f6ca
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1625569063;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=QUyu+xoe1E6BsQbSDzUeyLIXRBJKwC/I/FCZr8qcsPA=;
	b=Tpitbp8kRSV2Hc2y6VIhqDekGY7ZfeSw1kRC+BpUzdAdWDjVolk9floMPAIccWCKebta0U
	41FDt47yB0fzRf/2Kg6HJo1mf3TAQLqXEk9QilWjSmo7/7k26EWUm7t8rCvaA0yK9jrXp0
	lpxxx/yL6IbqFrmFw/bhdsMwYLpf2fo=
X-MC-Unique: 5mCOs4Y3P-6VHTb8_rh9-g-1
From: Cornelia Huck <cohuck@redhat.com>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>, Greg
 Kroah-Hartman
 <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org, Russell King
 <linux@armlinux.org.uk>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>, Helge
 Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>, Michael
 Ellerman <mpe@ellerman.id.au>, Benjamin Herrenschmidt
 <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, "Rafael J.
 Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, William
 Breathitt Gray <vilhelm.gray@gmail.com>, =?utf-8?Q?Rafa=C5=82_Mi=C5=82eck?=
 =?utf-8?Q?i?= <zajec5@gmail.com>,
 Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej
 Skrabec <jernej.skrabec@gmail.com>, Alison Schofield
 <alison.schofield@intel.com>, Vishal Verma <vishal.l.verma@intel.com>, Ira
 Weiny <ira.weiny@intel.com>, Ben Widawsky <ben.widawsky@intel.com>, Dan
 Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi
 <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix
 <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, Jiri Kosina
 <jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, "K. Y.
 Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>, Alexander Shishkin
 <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
 <dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
 <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab
 <mchehab@kernel.org>, Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov
 <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones
 <lee.jones@linaro.org>, Tomas Winkler <tomas.winkler@intel.com>, Arnd
 Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>, "David S.
 Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, Allen Hubbe
 <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, Lorenzo
 Pieralisi <lorenzo.pieralisi@arm.com>, Krzysztof =?utf-8?Q?Wilczy=C5=84sk?=
 =?utf-8?Q?i?=
 <kw@linux.com>, Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski
 <linux@dominikbrodowski.net>, Maximilian Luz <luzmaximilian@gmail.com>,
 Hans de Goede <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>, Alexandre Bounine
 <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson
 <bjorn.andersson@linaro.org>, Mathieu Poirier
 <mathieu.poirier@linaro.org>, "Martin K. Petersen"
 <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross
 <agross@kernel.org>, Mark Brown <broonie@kernel.org>, Stephen Boyd
 <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, Sven Van Asbroeck
 <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder
 <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>, Michael
 Jamet <michael.jamet@intel.com>, Mika Westerberg
 <mika.westerberg@linux.intel.com>, Yehezkel Bernat
 <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri Slaby
 <jirislaby@kernel.org>, Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson
 <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, Manohar
 Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky
 <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Johannes Berg
 <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, Takashi
 Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler
 <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland
 <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, Alexey
 Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng
 <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, Pali
 =?utf-8?Q?Roh=C3=A1r?= <pali@kernel.org>, Adrian Hunter
 <adrian.hunter@intel.com>, Frank Li
 <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien
 Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Organization: Red Hat GmbH
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
User-Agent: Notmuch/0.32.1 (https://notmuchmail.org)
Date: Tue, 06 Jul 2021 12:57:17 +0200
Message-ID: <87pmvvhfqq.fsf@redhat.com>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 06 2021, Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>=
 wrote:

> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.

Yay!

>
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
>
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutro=
nix.de.
>
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.

I'm afraid you missed the s390-specific busses in drivers/s390/cio/
(css/ccw/ccwgroup).



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:18:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:18:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151106.279297 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0j5o-00033z-KX; Tue, 06 Jul 2021 11:18:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151106.279297; Tue, 06 Jul 2021 11:18:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0j5o-00032i-Fg; Tue, 06 Jul 2021 11:18:20 +0000
Received: by outflank-mailman (input) for mailman id 151106;
 Tue, 06 Jul 2021 11:17:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=fbDq=L6=redhat.com=cohuck@srs-us1.protection.inumbo.net>)
 id 1m0j5S-0002zu-CZ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:17:58 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [216.205.24.124])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 352078e7-e8f2-4c33-bc8b-c3c181bdebd0;
 Tue, 06 Jul 2021 11:17:57 +0000 (UTC)
Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com
 [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-277-yIaEybclO9Gf3dSvLShqRA-1; Tue, 06 Jul 2021 07:17:55 -0400
Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com
 [10.5.11.23])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 966CD802C87;
 Tue,  6 Jul 2021 11:17:49 +0000 (UTC)
Received: from localhost (ovpn-113-13.ams2.redhat.com [10.36.113.13])
 by smtp.corp.redhat.com (Postfix) with ESMTPS id 2FC1919C79;
 Tue,  6 Jul 2021 11:17:39 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 352078e7-e8f2-4c33-bc8b-c3c181bdebd0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1625570277;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=X+JgLl9QuEVsbPi9CHfgp/50dUcjaNVT1a3Q1xwSglg=;
	b=NvkXANPVY3BU9Z47a7WIgfyX99b/fX2R3+gkXRx5UbLe8xvk+4bD/GEsafqgWAgCsYHYU8
	8nqBRHRtdxTI/pAS0l9vErZyBvTg8xpzogppN68KAaDJjHkwpk3omwvyH4EL4uXOjv8Gqy
	vLNHZHbOCB1P+W+L0k2ttO2FFWZdnW4=
X-MC-Unique: yIaEybclO9Gf3dSvLShqRA-1
From: Cornelia Huck <cohuck@redhat.com>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>, Greg
 Kroah-Hartman
 <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org, Russell King
 <linux@armlinux.org.uk>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>, Helge
 Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>, Michael
 Ellerman <mpe@ellerman.id.au>, Benjamin Herrenschmidt
 <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, "Rafael J.
 Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, William
 Breathitt Gray <vilhelm.gray@gmail.com>, =?utf-8?Q?Rafa=C5=82_Mi=C5=82eck?=
 =?utf-8?Q?i?= <zajec5@gmail.com>,
 Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej
 Skrabec <jernej.skrabec@gmail.com>, Alison Schofield
 <alison.schofield@intel.com>, Vishal Verma <vishal.l.verma@intel.com>, Ira
 Weiny <ira.weiny@intel.com>, Ben Widawsky <ben.widawsky@intel.com>, Dan
 Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi
 <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix
 <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, Jiri Kosina
 <jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, "K. Y.
 Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>, Alexander Shishkin
 <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
 <dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
 <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab
 <mchehab@kernel.org>, Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov
 <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones
 <lee.jones@linaro.org>, Tomas Winkler <tomas.winkler@intel.com>, Arnd
 Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>, "David S.
 Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, Allen Hubbe
 <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, Lorenzo
 Pieralisi <lorenzo.pieralisi@arm.com>, Krzysztof =?utf-8?Q?Wilczy=C5=84sk?=
 =?utf-8?Q?i?=
 <kw@linux.com>, Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski
 <linux@dominikbrodowski.net>, Maximilian Luz <luzmaximilian@gmail.com>,
 Hans de Goede <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>, Alexandre Bounine
 <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson
 <bjorn.andersson@linaro.org>, Mathieu Poirier
 <mathieu.poirier@linaro.org>, "Martin K. Petersen"
 <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross
 <agross@kernel.org>, Mark Brown <broonie@kernel.org>, Stephen Boyd
 <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, Sven Van Asbroeck
 <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder
 <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>, Michael
 Jamet <michael.jamet@intel.com>, Mika Westerberg
 <mika.westerberg@linux.intel.com>, Yehezkel Bernat
 <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri Slaby
 <jirislaby@kernel.org>, Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson
 <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, Manohar
 Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky
 <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Johannes Berg
 <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, Takashi
 Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler
 <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland
 <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, Alexey
 Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng
 <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, Pali
 =?utf-8?Q?Roh=C3=A1r?= <pali@kernel.org>, Adrian Hunter
 <adrian.hunter@intel.com>, Frank Li
 <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien
 Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
Subject: Re: [PATCH] bus: Make remove callback return void
In-Reply-To: <87pmvvhfqq.fsf@redhat.com>
Organization: Red Hat GmbH
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
 <87pmvvhfqq.fsf@redhat.com>
User-Agent: Notmuch/0.32.1 (https://notmuchmail.org)
Date: Tue, 06 Jul 2021 13:17:37 +0200
Message-ID: <87mtqzhesu.fsf@redhat.com>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 06 2021, Cornelia Huck <cohuck@redhat.com> wrote:

> On Tue, Jul 06 2021, Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.d=
e> wrote:
>
>> The driver core ignores the return value of this callback because there
>> is only little it can do when a device disappears.
>>
>> This is the final bit of a long lasting cleanup quest where several
>> buses were converted to also return void from their remove callback.
>> Additionally some resource leaks were fixed that were caused by drivers
>> returning an error code in the expectation that the driver won't go
>> away.
>>
>> With struct bus_type::remove returning void it's prevented that newly
>> implemented buses return an ignored error code and so don't anticipate
>> wrong expectations for driver authors.
>
> Yay!
>
>>
>> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
>> ---
>> Hello,
>>
>> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
>> return void" that is not yet applied, see
>> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutr=
onix.de.
>>
>> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
>> surprised if I still missed to convert a driver. So it would be great to
>> get this into next early after the merge window closes.
>
> I'm afraid you missed the s390-specific busses in drivers/s390/cio/
> (css/ccw/ccwgroup).

The change for vfio/mdev looks good.

The following should do the trick for s390; not sure if other
architectures have easy-to-miss busses as well.

diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
index 9748165e08e9..a66f416138ab 100644
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -439,17 +439,15 @@ module_exit(cleanup_ccwgroup);
=20
 /************************** driver stuff ******************************/
=20
-static int ccwgroup_remove(struct device *dev)
+static void ccwgroup_remove(struct device *dev)
 {
 =09struct ccwgroup_device *gdev =3D to_ccwgroupdev(dev);
 =09struct ccwgroup_driver *gdrv =3D to_ccwgroupdrv(dev->driver);
=20
 =09if (!dev->driver)
-=09=09return 0;
+=09=09return;
 =09if (gdrv->remove)
 =09=09gdrv->remove(gdev);
-
-=09return 0;
 }
=20
 static void ccwgroup_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index a974943c27da..ebc321edba51 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -1371,15 +1371,14 @@ static int css_probe(struct device *dev)
 =09return ret;
 }
=20
-static int css_remove(struct device *dev)
+static void css_remove(struct device *dev)
 {
 =09struct subchannel *sch;
-=09int ret;
=20
 =09sch =3D to_subchannel(dev);
-=09ret =3D sch->driver->remove ? sch->driver->remove(sch) : 0;
+=09if (sch->driver->remove)
+=09=09sch->driver->remove(sch);
 =09sch->driver =3D NULL;
-=09return ret;
 }
=20
 static void css_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index 84f659cafe76..61d5d55bd9c8 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -1742,7 +1742,7 @@ ccw_device_probe (struct device *dev)
 =09return 0;
 }
=20
-static int ccw_device_remove(struct device *dev)
+static void ccw_device_remove(struct device *dev)
 {
 =09struct ccw_device *cdev =3D to_ccwdev(dev);
 =09struct ccw_driver *cdrv =3D cdev->drv;
@@ -1776,8 +1776,6 @@ static int ccw_device_remove(struct device *dev)
 =09spin_unlock_irq(cdev->ccwlock);
 =09io_subchannel_quiesce(sch);
 =09__disable_cmf(cdev);
-
-=09return 0;
 }
=20
 static void ccw_device_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index 9f26d4310bb3..b6b4589c70bd 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -28,12 +28,13 @@ static int scmdev_probe(struct device *dev)
 =09return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV;
 }
=20
-static int scmdev_remove(struct device *dev)
+static void scmdev_remove(struct device *dev)
 {
 =09struct scm_device *scmdev =3D to_scm_dev(dev);
 =09struct scm_driver *scmdrv =3D to_scm_drv(dev->driver);
=20
-=09return scmdrv->remove ? scmdrv->remove(scmdev) : -ENODEV;
+=09if (scmdrv->remove)
+=09=09scmdrv->remove(scmdev);
 }
=20
 static int scmdev_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index d2560186d771..8a0d37c0e2a5 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -884,7 +884,7 @@ static int ap_device_probe(struct device *dev)
 =09return rc;
 }
=20
-static int ap_device_remove(struct device *dev)
+static void ap_device_remove(struct device *dev)
 {
 =09struct ap_device *ap_dev =3D to_ap_dev(dev);
 =09struct ap_driver *ap_drv =3D ap_dev->drv;
@@ -909,8 +909,6 @@ static int ap_device_remove(struct device *dev)
 =09ap_dev->drv =3D NULL;
=20
 =09put_device(dev);
-
-=09return 0;
 }
=20
 struct ap_queue *ap_get_qdev(ap_qid_t qid)



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:18:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:18:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151104.279292 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0j5o-00030s-As; Tue, 06 Jul 2021 11:18:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151104.279292; Tue, 06 Jul 2021 11:18:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0j5o-00030l-7l; Tue, 06 Jul 2021 11:18:20 +0000
Received: by outflank-mailman (input) for mailman id 151104;
 Tue, 06 Jul 2021 11:17:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=FVSc=L6=nvidia.com=kwankhede@srs-us1.protection.inumbo.net>)
 id 1m0j4i-0002x9-Cm
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:17:12 +0000
Received: from NAM10-BN7-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:7e8a::631])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a74cbcad-2c9d-481e-9f74-a57cf0803717;
 Tue, 06 Jul 2021 11:17:11 +0000 (UTC)
Received: from BN6PR14CA0005.namprd14.prod.outlook.com (2603:10b6:404:79::15)
 by DM5PR1201MB0059.namprd12.prod.outlook.com (2603:10b6:4:54::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 11:17:08 +0000
Received: from BN8NAM11FT013.eop-nam11.prod.protection.outlook.com
 (2603:10b6:404:79:cafe::5) by BN6PR14CA0005.outlook.office365.com
 (2603:10b6:404:79::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Tue, 6 Jul 2021 11:17:07 +0000
Received: from mail.nvidia.com (216.228.112.34) by
 BN8NAM11FT013.mail.protection.outlook.com (10.13.176.182) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 11:17:06 +0000
Received: from [10.40.102.252] (172.20.187.5) by HQMAIL107.nvidia.com
 (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 6 Jul
 2021 11:16:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a74cbcad-2c9d-481e-9f74-a57cf0803717
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OB3jt3SlsdowvqILnghDEybT9vYvyo2iso3STBIJcnupZGT9eEg2Qnje2DqSc1C4mFk2QBNm4Rucxdtyl+OsHUQ/EmMhpY6Ao22yIbNMM+gvlQ8sod5DJX/bxsjpKS6eO4jX3PQu/YQHrM1O+BbrVNmmvyE+/SEjOD6yYppVXkhGxNBjW6Ktv0JvCMebYgktbnIi00Q7kZfMtMhgzlS+RanZh8R3z7epBj+pipCPB70e3UOOw6Nwz1UsTwZdygf++CmCNg4iCcEFQob/F8pbAQCy3wJJMjqKQPM3zCAKa0XQ42hESmNJRNH+Vc9ZPSJZpZVoJ4lnNlD0tHOjILD6vg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gzQgfqIi8OFdMGOA+iDXYHDenSaYbIa98IiQWdAlr00=;
 b=PbcXlkdCv25iKncBNhz1SQ8QsirUn58/y6c0ZmgRVus/xxMLbQ+eR9VSZ8eS506GpA2/FBfVsZ02guxjIB/XH7j/2OgjjGvg8CvTq+vELmw+UEsn8eda5C/LlejJ5Rvnhlxv9Vq4u8iw3YorMf/V1Kt7r5YEs+kp9iV5eUT8qYCAru8m/eCf7MY/zpu4IWRaIZ7LQCj+ntML2yOrXDI3yBcUIZAzvmFL4gVKSV5hmxR2vbloCwGfZAqDrgsHFQlNeRuHorr7BxChRkbtg6OF6BJIuRJ0pDWVaA3/LNo3ycmIeKRljLZTyAL1xlaE4oBbreAYAPZoCo0uQol2wsMRJw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 216.228.112.34) smtp.rcpttodomain=linaro.org smtp.mailfrom=nvidia.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=nvidia.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gzQgfqIi8OFdMGOA+iDXYHDenSaYbIa98IiQWdAlr00=;
 b=Z3JYE8fELRazWIk7bK0Fe6hW3oRwz+8ZoNiqvKNqxw0TiUmV9YgYLWmTeemU+crJ9s959ogLVawNp5FFh0NFupAUqImkuyesyKZ6krt8RQp0pafIPYfEJeBi5PwNZQrwSQE71j7XpY509fW5feJm0I2vmey6PepXF7LKHb7bngzqpGZpC25OkJUH8rsxYnfFV8xQl6Ghb/lArYh0mue5Gb2zdWLqHmfACmiYCdH55M/xrPhSzGYYSQub0JCzJ4tAjheZiYHDU1XpdLgbA7RN6HKQa8wuYTSuNMp4mWqxRaRuihUr41br7D9e6ccszMTT/m1yoBBLIYggYufBgORFww==
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34)
 smtp.mailfrom=nvidia.com; linaro.org; dkim=none (message not signed)
 header.d=none;linaro.org; dmarc=pass action=none header.from=nvidia.com;
Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates
 216.228.112.34 as permitted sender) receiver=protection.outlook.com;
 client-ip=216.228.112.34; helo=mail.nvidia.com;
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>, Greg
 Kroah-Hartman <gregkh@linuxfoundation.org>
CC: <kernel@pengutronix.de>, <linux-kernel@vger.kernel.org>, Russell King
	<linux@armlinux.org.uk>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>, Helge Deller
	<deller@gmx.de>, Geoff Levand <geoff@infradead.org>, Michael Ellerman
	<mpe@ellerman.id.au>, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul
 Mackerras <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len
 Brown <lenb@kernel.org>, William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, Maxime Ripard
	<mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec
	<jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, Ben
 Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>, Stefan
 Richter <stefanr@s5r6.in-berlin.de>, Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom
 Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, Jiri Kosina
	<jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, "K. Y. Srinivasan"
	<kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, Stephen
 Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, Dexuan Cui
	<decui@microsoft.com>, Alexander Shishkin
	<alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
	<dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
	<siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, Johannes
 Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, Ulf
 Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, Tomas
 Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, Jakub
 Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon
 Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>, Kishon Vijay
 Abraham I <kishon@ti.com>, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	=?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>, Bjorn Helgaas
	<bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
	<hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>, Matt Porter
	<mporter@kernel.crashing.org>, Alexandre Bounine <alex.bou9@gmail.com>, Ohad
 Ben-Cohen <ohad@wizery.com>, Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>, "Martin K. Petersen"
	<martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross
	<agross@kernel.org>, Mark Brown <broonie@kernel.org>, Stephen Boyd
	<sboyd@kernel.org>, Michael Buesch <m@bues.ch>, Sven Van Asbroeck
	<TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder
	<elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>, Michael Jamet
	<michael.jamet@intel.com>, Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri
 Slaby <jirislaby@kernel.org>, Heikki Krogerus
	<heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>, Alex Williamson
	<alex.williamson@redhat.com>, Cornelia Huck <cohuck@redhat.com>, Martyn Welch
	<martyn@welchs.me.uk>, Manohar Vanga <manohar.vanga@gmail.com>, Boris
 Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>, Johannes Berg
	<johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, Takashi Iwai
	<tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler
	<tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland
	<samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, Alexey
 Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=c3=a1r?=
	<pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>, Frank Li
	<lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien Grall
	<jgrall@amazon.com>, <linux-arm-kernel@lists.infradead.org>,
	<linux-mips@vger.kernel.org>, <linux-parisc@vger.kernel.org>,
	<linuxppc-dev@lists.ozlabs.org>, <linux-acpi@vger.kernel.org>,
	<linux-wireless@vger.kernel.org>, <linux-sunxi@lists.linux.dev>,
	<linux-cxl@vger.kernel.org>, <nvdimm@lists.linux.dev>,
	<dmaengine@vger.kernel.org>, <linux1394-devel@lists.sourceforge.net>,
	<linux-fpga@vger.kernel.org>, <linux-input@vger.kernel.org>,
	<linux-hyperv@vger.kernel.org>, <linux-i2c@vger.kernel.org>,
	<linux-i3c@lists.infradead.org>, <industrypack-devel@lists.sourceforge.net>,
	<linux-media@vger.kernel.org>, <linux-mmc@vger.kernel.org>,
	<netdev@vger.kernel.org>, <linux-ntb@googlegroups.com>,
	<linux-pci@vger.kernel.org>, <platform-driver-x86@vger.kernel.org>,
	<linux-remoteproc@vger.kernel.org>, <linux-scsi@vger.kernel.org>,
	<alsa-devel@alsa-project.org>, <linux-arm-msm@vger.kernel.org>,
	<linux-spi@vger.kernel.org>, <linux-staging@lists.linux.dev>,
	<greybus-dev@lists.linaro.org>, <target-devel@vger.kernel.org>,
	<linux-usb@vger.kernel.org>, <linux-serial@vger.kernel.org>,
	<virtualization@lists.linux-foundation.org>, <kvm@vger.kernel.org>,
	<xen-devel@lists.xenproject.org>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
X-Nvconfidentiality: public
From: Kirti Wankhede <kwankhede@nvidia.com>
Message-ID: <f4c5e4c9-95a1-e801-6d2d-6bb18a924b01@nvidia.com>
Date: Tue, 6 Jul 2021 16:46:21 +0530
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-Originating-IP: [172.20.187.5]
X-ClientProxiedBy: HQMAIL101.nvidia.com (172.20.187.10) To
 HQMAIL107.nvidia.com (172.20.187.13)
X-EOPAttributedMessage: 0
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d660212b-af0f-4381-7aa8-08d9406f9722
X-MS-TrafficTypeDiagnostic: DM5PR1201MB0059:
X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr
X-Microsoft-Antispam-PRVS:
	<DM5PR1201MB0059F2FD2EA1FF32196093E3DC1B9@DM5PR1201MB0059.namprd12.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	yp+xo1ChYomO5saPmEiiXoTZrpARTWeS+6+ILqneuCodLa6j14xykFNBVNaB4aiSH2d+5MPlJMacyo/bFt8aKcan7CtgrqMd0lAsvFIkZgwuCeKYMsT2Xfmw5J/km/XgptN82DkQln6ltmUSP5rY8bY8C1/13//X6pHRKC7TQ718mAEqrAKf+wNbig3UHNNLoOR6w975lGU5jVv1u1lHKveYETvI1HxLK9EAigj1IS8jiHQwoEUbAJtPyk/0Iyw/umAFVeL1/yiulcjReFcWfGKm4HxeXYHJeqjsbDQ8z58nwPulNCDyrEyI2OAIPYW2DXMjhWpIeFrDWB7LG2y1+dMgZOC5Awev6CyctuFAr8/1dfXCAF/zLNAw+WZe/OqYx/LBwE+uUIq9DNbzkqraj1p2iLhQk6oPB9wR09pr9cHnLBbuxX8n2WvREZhzVDRzS67ljrMLBTDu1SLxxnozXOoYny7NjUfvBOJMFdRHn4z7ivj1lLMqYCjxkQoKa3xuvEsNCSVAsoGhuEc6Dy9sdlluue/2i6NiQirxyNP97b16LmlwAsDu2J1GknqHaGuMnaNt2+f0/PQaAiKJ8Fl+NVNqnUw2Xp0PRXBcfi55eDn1g28TuiXzOCgRh/zVdhr+4Tywc040jRYHJj6OaSzsDUlECeNnvEToseYb+sDgQ1R2LGrW5aEEyqm9q5ftmFVUz7yPSsE172P7P4oFhOBR2K9NffS/ZbkUK/PIiZkGZ+vRBrWH52nHpdCxqybxQFxD
X-Forefront-Antispam-Report:
	CIP:216.228.112.34;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:schybrid03.nvidia.com;CAT:NONE;SFS:(4636009)(376002)(396003)(39860400002)(136003)(346002)(36840700001)(46966006)(53546011)(7366002)(7406005)(336012)(7336002)(2906002)(316002)(31686004)(82310400003)(82740400003)(66574015)(4326008)(47076005)(7276002)(86362001)(6666004)(7416002)(7636003)(36756003)(16576012)(8676002)(36860700001)(70586007)(31696002)(356005)(16526019)(186003)(5660300002)(8936002)(70206006)(26005)(2616005)(110136005)(54906003)(426003)(36906005)(478600001)(4744005)(557034005)(43740500002);DIR:OUT;SFP:1101;
X-OriginatorOrg: Nvidia.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 11:17:06.9013
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: d660212b-af0f-4381-7aa8-08d9406f9722
X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.112.34];Helo=[mail.nvidia.com]
X-MS-Exchange-CrossTenant-AuthSource:
	BN8NAM11FT013.eop-nam11.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0059



On 7/6/2021 3:20 PM, Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>


>   drivers/vfio/mdev/mdev_driver.c           | 4 +---

Acked-by: Kirti Wankhede <kwankhede@nvidia.com>



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:23:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:23:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151119.279325 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jB3-0005H1-IM; Tue, 06 Jul 2021 11:23:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151119.279325; Tue, 06 Jul 2021 11:23:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jB3-0005Gu-FB; Tue, 06 Jul 2021 11:23:45 +0000
Received: by outflank-mailman (input) for mailman id 151119;
 Tue, 06 Jul 2021 11:23:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0jB1-00050S-ST
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:23:43 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9e879cf2-de4c-11eb-848b-12813bfff9fa;
 Tue, 06 Jul 2021 11:23:42 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9e879cf2-de4c-11eb-848b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625570622;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=mG6RSUJd/P4kPROIxzI66p2WXgDfEpS2fP5XlHKOE1U=;
  b=BizdhoPSfN2h+IGrDCvyCiV6TLdXC63kSkwLUlggWM169g6BBl3zJZdg
   RXvYJgxKEXti4cenSsHVEdwUCT0Y4hYII0er7oO88yIwxq0wn1Hm80fUf
   nXj7+y8xXvV7/rL7bsqCzDIULJvuZI09inuEESmRL9rt096g13HWY+1xf
   A=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: cJG1nD6OlySdVDO7OU4ZcDYtinLX1HmYx2Sdn+YbdnWe6ytqItuFdPSiiC1oXplhmHHUsfIT+J
 nEQXt27PAMAXSnIyXAPeif3PyZ17bLnm4G+33DbO7HJD7Q7A0z2qEpcOXKH4e6Wj7ejmGIVje0
 FIi3tIrTdS02SeDmwAfPaYbSKXoXHL0OvMBcRue3GIXjRCPWise7o0RgyPEFRHpRyrWyx9xk9S
 211G5EjGjgm4CotTN3GM+Z0g0ckgFyNr32Ei69yX6Oj1QmVKUpQVusBDavHp2tYxw/KGiFoeQt
 KbY=
X-SBRS: 5.1
X-MesageID: 47339752
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:lf5To6jEoRhZK+xUoMKfhC8VmXBQXt4ji2hC6mlwRA09TySZ//
 rOoB17726NtN9/YgBCpTntAsa9qDbnhPpICOoqTM6ftWvdyQmVxehZhOOIqVCNJ8S9zJ876U
 4JSdkZNDSaNzhHZKjBjjVQa+xQpeW6zA==
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="47339752"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
	Jan Beulich <JBeulich@suse.com>, Olaf Hering <olaf@aepfle.de>
Subject: [PATCH 1/2] tools/migration: Fix iovec handling in send_checkpoint_dirty_pfn_list()
Date: Tue, 6 Jul 2021 12:23:31 +0100
Message-ID: <20210706112332.31753-2-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210706112332.31753-1-andrew.cooper3@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

We shouldn't be using two struct iovec's to write half of 'rec' each, and
there is no need to malloc() for two struct iovec's at all.

Simplify down to just two - one covering the whole of 'rec', and one covering
the pfns array.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Ian Jackson <iwj@xenproject.org>
CC: Wei Liu <wl@xen.org>
CC: Juergen Gross <jgross@suse.com>
CC: Jan Beulich <JBeulich@suse.com>
CC: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_restore.c | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index aa4113d7f679..07c9e291610b 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -425,11 +425,13 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
     int rc = -1;
     unsigned int count, written;
     uint64_t i, *pfns = NULL;
-    struct iovec *iov = NULL;
     xc_shadow_op_stats_t stats = { 0, ctx->restore.p2m_size };
     struct xc_sr_record rec = {
         .type = REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST,
     };
+    struct iovec iov[2] = {
+        { &rec, sizeof(rec) },
+    };
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->restore.dirty_bitmap_hbuf);
 
@@ -471,26 +473,12 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
         pfns[written++] = i;
     }
 
-    /* iovec[] for writev(). */
-    iov = malloc(3 * sizeof(*iov));
-    if ( !iov )
-    {
-        ERROR("Unable to allocate memory for sending dirty bitmap");
-        goto err;
-    }
-
     rec.length = count * sizeof(*pfns);
 
-    iov[0].iov_base = &rec.type;
-    iov[0].iov_len = sizeof(rec.type);
-
-    iov[1].iov_base = &rec.length;
-    iov[1].iov_len = sizeof(rec.length);
-
-    iov[2].iov_base = pfns;
-    iov[2].iov_len = count * sizeof(*pfns);
+    iov[1].iov_base = pfns;
+    iov[1].iov_len = rec.length;
 
-    if ( writev_exact(ctx->restore.send_back_fd, iov, 3) )
+    if ( writev_exact(ctx->restore.send_back_fd, iov, ARRAY_SIZE(iov)) )
     {
         PERROR("Failed to write dirty bitmap to stream");
         goto err;
@@ -499,7 +487,6 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
     rc = 0;
  err:
     free(pfns);
-    free(iov);
     return rc;
 }
 
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:23:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:23:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151118.279314 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jB2-00050f-9s; Tue, 06 Jul 2021 11:23:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151118.279314; Tue, 06 Jul 2021 11:23:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jB2-00050Y-4j; Tue, 06 Jul 2021 11:23:44 +0000
Received: by outflank-mailman (input) for mailman id 151118;
 Tue, 06 Jul 2021 11:23:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0jB0-00050M-Cy
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:23:42 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8a4cc33c-4b80-4dc0-affa-8b563e0cf091;
 Tue, 06 Jul 2021 11:23:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8a4cc33c-4b80-4dc0-affa-8b563e0cf091
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625570621;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=QsH0+y6D6qV1Pp7qa0sdDbIpnq4xmX2j2Z45+j/tNi0=;
  b=HOjttrgxJyCBWvyHeW9h2BvnXp1Om7eHnsUY+XszKI5g9Z+Ruyp/lYEn
   ZQdK0AcA6C8jKGcxv/sx3hVI3hlK7CGohrJ7eiALQyO+hwX5XRqjut5Yy
   JGJq5tdcReYDV7LhoCQxO8R+Fu62c/A/xlGk2BVGQd6G8aBtwiQCe7gGv
   o=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: WerrGfCHoSw3WHlnGEfpRYbYCVrCO9MazVUHRd3jOfarxEYYq/ETqTF5XSbP4kzv8R2Pa90gqs
 uSCW/b7uAx98+VwGE9+TAhz58kDb4b/PT6SKVhhxLaoxAZkKNhoziph0PV3Qydfb1dQO5qCyyD
 UM+OMzSYTXYHeoJ4j02ZyfRKku1Oknr5sWZ/DwYpbo07fYvxXII5cBHruU6M+PhPLTJ+VTMchS
 KgybUEgS/9V8TC2farg5SWxd1ADpvqBUl3cmHTtpXSPpjnvYy7IwsfHH4AuKSKlQDtHx0QZpbV
 Sss=
X-SBRS: 5.1
X-MesageID: 47339750
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:f0JsCa7IbW+wiKT74gPXwN7XdLJyesId70hD6qhwISY6TiX4rb
 HIoB1173/JYVoqNE3I+urwXJVoI0mslqKdiLN5VdzJMTUO0FHYSb2KhrGC/9SPIULDH5ZmpM
 VdT5Q=
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="47339750"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
	Jan Beulich <JBeulich@suse.com>, Olaf Hering <olaf@aepfle.de>
Subject: [PATCH 0/2] tools/migration: Fixes in send_checkpoint_dirty_pfn_list()
Date: Tue, 6 Jul 2021 12:23:30 +0100
Message-ID: <20210706112332.31753-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain

These are a prerequisite to all currently on-list patches touching the
function.

Andrew Cooper (2):
  tools/migration: Fix iovec handling in send_checkpoint_dirty_pfn_list()
  tools/migration: Fix potential overflow in send_checkpoint_dirty_pfn_list()

 tools/libs/guest/xg_sr_restore.c | 48 ++++++++++++++--------------------------
 1 file changed, 17 insertions(+), 31 deletions(-)

-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:23:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:23:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151120.279336 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jB6-0005aE-S3; Tue, 06 Jul 2021 11:23:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151120.279336; Tue, 06 Jul 2021 11:23:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jB6-0005a7-Ob; Tue, 06 Jul 2021 11:23:48 +0000
Received: by outflank-mailman (input) for mailman id 151120;
 Tue, 06 Jul 2021 11:23:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0jB5-00050M-95
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:23:47 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a6698324-0e09-41de-abe0-cad6e4d3afe9;
 Tue, 06 Jul 2021 11:23:42 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a6698324-0e09-41de-abe0-cad6e4d3afe9
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625570622;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version;
  bh=VXrAugVYE4b5MTycMGEmas33a/+GWPcEalVzYy+9Ju0=;
  b=IS0bAE4agv/t1sERC6R0tCqV+mNjnNTYSIOhc2Ni42+lp0CRIbmP8T+S
   OJQxKXJcNsc0P9ACmf8KHyVabUrcEQUJd7kk9YrgfEBor8MG7jEEnW9yO
   sm6QHAWfbZcOYVzNasm1QEubXMp7DVgjx91KpiyW9lJRTGRlqNNUuXMus
   c=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: ufRwhmBCrEF+p4kvtglXYkUtTbqLaCCRIjtqEQ3NLKubM2ugge1q00RVxagjDaRrp5KpYoTIMn
 5wnNXejwuYMEdJYkpLpNm3uiZpMh6JszJA6blA4tBxip+3N6/+vHsqmtN9dZyOdagKJhWCANaK
 ygEOxuvrlJhac/bxL0vxmdR+c/DKmJ7/H2Kf1lnyOCP2S/9jT/60qk0X+/96BzHRHsdcPmAOY1
 /LHr+iu4Yqitp1vE0znugHbpguuOoaT1buLiDIRKEUETzZhX/VEZLXHaLsX4Yihko9kO3ptx6u
 QLo=
X-SBRS: 5.1
X-MesageID: 47339751
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:B63c1a2vu+EnVe8PZUbf4wqjBLAkLtp133Aq2lEZdPRUGvb3qy
 nOpoVj6faaslYssR0b9exofZPwJE80lqQFh7X5X43SPzUO0VHAROoJgLcKgQeQfxEWntQtsp
 uIGJIeNDSfNzdHZL7BkWuFL+o=
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="47339751"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
	Jan Beulich <JBeulich@suse.com>, Olaf Hering <olaf@aepfle.de>
Subject: [PATCH 2/2] tools/migration: Fix potential overflow in send_checkpoint_dirty_pfn_list()
Date: Tue, 6 Jul 2021 12:23:32 +0100
Message-ID: <20210706112332.31753-3-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210706112332.31753-1-andrew.cooper3@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain

'count * sizeof(*pfns)' can in principle overflow, but is implausible in
practice as the time between checkpoints is typically sub-second.
Nevertheless, simplify the code and remove the risk.

There is no need to loop over the bitmap to calculate count.  The number of
set bits is returned in xc_shadow_op_stats_t which is already collected (and
ignored).

Bounds check the count against what will fit in REC_LENGTH_MAX.  At the time
of writing, this allows up to 0xffffff pfns.  Rearrange the pfns loop to check
for errors both ways, not simply that there were more pfns than expected.

Reported-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Ian Jackson <iwj@xenproject.org>
CC: Wei Liu <wl@xen.org>
CC: Juergen Gross <jgross@suse.com>
CC: Jan Beulich <JBeulich@suse.com>
CC: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_restore.c | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 07c9e291610b..bda04ee42e3f 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -425,7 +425,7 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
     int rc = -1;
     unsigned int count, written;
     uint64_t i, *pfns = NULL;
-    xc_shadow_op_stats_t stats = { 0, ctx->restore.p2m_size };
+    xc_shadow_op_stats_t stats;
     struct xc_sr_record rec = {
         .type = REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST,
     };
@@ -444,14 +444,17 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
         goto err;
     }
 
-    for ( i = 0, count = 0; i < ctx->restore.p2m_size; i++ )
+    count = stats.dirty_count;
+
+    if ( ((REC_LENGTH_MAX - sizeof(rec)) / sizeof(*pfns)) < count )
     {
-        if ( test_bit(i, dirty_bitmap) )
-            count++;
+        ERROR("Too many PFNs (%u) to fit in record (limit %zu)", count,
+              ((REC_LENGTH_MAX - sizeof(rec)) / sizeof(*pfns)));
+        goto err;
     }
 
-
-    pfns = malloc(count * sizeof(*pfns));
+    iov[1].iov_len  = rec.length = count * sizeof(*pfns);
+    iov[1].iov_base = pfns       = malloc(rec.length);
     if ( !pfns )
     {
         ERROR("Unable to allocate %zu bytes of memory for dirty pfn list",
@@ -459,24 +462,20 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
         goto err;
     }
 
-    for ( i = 0, written = 0; i < ctx->restore.p2m_size; ++i )
+    for ( i = 0, written = 0; count && i < ctx->restore.p2m_size; ++i, --count )
     {
         if ( !test_bit(i, dirty_bitmap) )
             continue;
 
-        if ( written > count )
-        {
-            ERROR("Dirty pfn list exceed");
-            goto err;
-        }
-
         pfns[written++] = i;
     }
 
-    rec.length = count * sizeof(*pfns);
-
-    iov[1].iov_base = pfns;
-    iov[1].iov_len = rec.length;
+    if ( written != stats.dirty_count )
+    {
+        ERROR("Mismatch between dirty bitmap bits (%u), and dirty_count (%u)",
+              written, stats.dirty_count);
+        goto err;
+    }
 
     if ( writev_exact(ctx->restore.send_back_fd, iov, ARRAY_SIZE(iov)) )
     {
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:43:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:43:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151139.279346 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jU3-0000Ae-Gl; Tue, 06 Jul 2021 11:43:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151139.279346; Tue, 06 Jul 2021 11:43:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jU3-0000AX-Do; Tue, 06 Jul 2021 11:43:23 +0000
Received: by outflank-mailman (input) for mailman id 151139;
 Tue, 06 Jul 2021 11:43:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Q4CK=L6=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1m0jU2-0000AQ-Bn
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:43:22 +0000
Received: from mail-wm1-x334.google.com (unknown [2a00:1450:4864:20::334])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4fdbce40-64e2-442b-b210-3467cea16f59;
 Tue, 06 Jul 2021 11:43:21 +0000 (UTC)
Received: by mail-wm1-x334.google.com with SMTP id
 q18-20020a1ce9120000b02901f259f3a250so2036407wmc.2
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 04:43:21 -0700 (PDT)
Received: from ?IPv6:2a00:23c5:5785:9a01:8ded:51e8:71ae:2d44?
 ([2a00:23c5:5785:9a01:8ded:51e8:71ae:2d44])
 by smtp.gmail.com with ESMTPSA id h14sm18478762wro.32.2021.07.06.04.43.20
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 06 Jul 2021 04:43:20 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4fdbce40-64e2-442b-b210-3467cea16f59
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=9RHEiyp7VvAXpOO84jbvH6uqtnFQPgtG9Yetjb51KW8=;
        b=lmL7IzUhmP1i7fTCBJEno71okFu6k+r4ms2C+GYjKd6c1Ry15VRiTKDC4gxfT1ruaC
         77wFJLzrRbg2mGhUwInmI780s28W2SGusQFnpArpvHPudU+vy6hk1AsUdIzD9M0pdMgb
         w2Wk9Pa7bE2zN/vILC3WhZSdfnxn5qUBFVwrv2yYsvpZBExZmviRYoR+ZwVQusG70qyX
         FltXrhccf8XGF5uqDgs3170vtGnVi4vnRgAKTX83XoTai/+9B51G7mBRAUrjJWijPGk/
         cjfnAT8AyBkOP28BWM7UajoySCu57VEfKJFv6ABndw463K3MtjG0aALHRkhA1xnU0jMJ
         ua3g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=9RHEiyp7VvAXpOO84jbvH6uqtnFQPgtG9Yetjb51KW8=;
        b=fw1Kttcnnljqn+8idCZi9ifSA51GUr6oc1LgJBd4YZSstn5IUvCnrQ+LLH+Yr1J13Y
         Jy0ctmVtVm1xJARstcxEvLybISTR9uhqE4D/ehQ+1T9QJ/y1GA3zl4U/9uR2fI9y8itD
         hJ+yruQh/0y49v0n9xz5c3SRpH22bvttJCNiiQCRoCmC3yaoeMAhiR6IG4Bx55rcullT
         wopkFgsbWOvo2PQ8mXNhRdXbnN+BbcPCZ7JqiPotpXpVmlpYqoFpr4l+smO6Bv6ySHAR
         yrQGbtHlvfsqKbTh1MpLrSaGeS5kOUmwUFhWGAfKKWjc6KY3NPJ1Krja4rq5rqI8aLNT
         j4DQ==
X-Gm-Message-State: AOAM531qJOQiPsQ3Yj+0WZ3sEXwWz2KnTvDf26ZDTUJAI4hvX7jvXBCE
	4uv2BSTFSmJesgGkIAYdM5o=
X-Google-Smtp-Source: ABdhPJzakmYogrVwphx12G12F6mQItH/4WuGAM8/VrSMC/6id7xv88WkBX+l6qeAA1Wg5TtrExgQWA==
X-Received: by 2002:a7b:c94a:: with SMTP id i10mr19930688wml.59.1625571800878;
        Tue, 06 Jul 2021 04:43:20 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: [PATCH v5] IOMMU: make DMA containment of quarantined devices
 optional
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 Kevin Tian <kevin.tian@intel.com>
References: <e1f30ef7-6631-609d-6948-e9b1f3fa3b37@suse.com>
Message-ID: <c4293a9b-14f0-2fc5-6e04-988cfef2deda@xen.org>
Date: Tue, 6 Jul 2021 12:43:19 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <e1f30ef7-6631-609d-6948-e9b1f3fa3b37@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 26/05/2021 09:19, Jan Beulich wrote:
> IOMMU: make DMA containment of quarantined devices optional
> 
> Containing still in flight DMA was introduced to work around certain
> devices / systems hanging hard upon hitting a "not-present" IOMMU fault.
> Passing through (such) devices (on such systems) is inherently insecure
> (as guests could easily arrange for IOMMU faults of any kind to occur).
> Defaulting to a mode where admins may not even become aware of issues
> with devices can be considered undesirable. Therefore convert this mode
> of operation to an optional one, not one enabled by default.
> 
> This involves resurrecting code commit ea38867831da ("x86 / iommu: set
> up a scratch page in the quarantine domain") did remove, in a slightly
> extended and abstracted fashion. Here, instead of reintroducing a pretty
> pointless use of "goto" in domain_context_unmap(), and instead of making
> the function (at least temporarily) inconsistent, take the opportunity
> and replace the other similarly pointless "goto" as well.
> 
> In order to key the re-instated bypasses off of there (not) being a root
> page table this further requires moving the allocate_domain_resources()
> invocation from reassign_device() to amd_iommu_setup_domain_device() (or
> else reassign_device() would allocate a root page table anyway); this is
> benign to the second caller of the latter function.
> 
> In VT-d's domain_context_unmap(), instead of adding yet another
> "goto out" when all that's wanted is a "return", eliminate the "out"
> label at the same time.
> 
> Take the opportunity and also limit the control to builds supporting
> PCI.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Paul Durrant <paul@xen.org>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:47:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:47:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151137.279358 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jXs-0000oW-2r; Tue, 06 Jul 2021 11:47:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151137.279358; Tue, 06 Jul 2021 11:47:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jXr-0000oP-Vx; Tue, 06 Jul 2021 11:47:19 +0000
Received: by outflank-mailman (input) for mailman id 151137;
 Tue, 06 Jul 2021 11:42:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=AZh0=L6=gmail.com=luzmaximilian@srs-us1.protection.inumbo.net>)
 id 1m0jTJ-00009E-Gn
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:42:37 +0000
Received: from mail-ed1-x52f.google.com (unknown [2a00:1450:4864:20::52f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8d346d9b-5bbe-4f15-8f25-120124e1daf1;
 Tue, 06 Jul 2021 11:42:36 +0000 (UTC)
Received: by mail-ed1-x52f.google.com with SMTP id l2so8180019edt.1
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 04:42:36 -0700 (PDT)
Received: from [192.168.2.202] (pd9e5a48a.dip0.t-ipconnect.de.
 [217.229.164.138])
 by smtp.gmail.com with ESMTPSA id eb9sm5646083ejc.32.2021.07.06.04.42.32
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 06 Jul 2021 04:42:35 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8d346d9b-5bbe-4f15-8f25-120124e1daf1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=CDGtQ2yb8IShQ7cIRYFiJmp1Uu5BANeA/6Jg/xILJy0=;
        b=TwRJy6+J3urIn/EOHkX70XQHrPpIXFIOoiquz6eJSwyU/SQIQ4dADKORnRQAYcVLDd
         bGmCH+O3vZ/zwAN03+xnrlCOWn/T/Pz6KfPYlHzOgGXWb72eEAEAjVLMxY3sV52LOQiu
         4sMepvP8f2M/NuGTEEUpcS9djTSXyNUocbOOHuCxDZ/swc4Yj2krBjOK18+xBOWwYw7y
         O/LcWjnu0kdZ4pmyv7jFfFo0qSdeTOdmtP2CciCXwcdnQ5FYkYueWY1vZLSQqxLbXVdx
         xHWyXJmiVDLrlTvE9QGQSNArUJUGdY04ySHX3mfxNurDFI1sFLhNw1IKyh/ZzycJEC6f
         piBA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=CDGtQ2yb8IShQ7cIRYFiJmp1Uu5BANeA/6Jg/xILJy0=;
        b=OZ3/MLlPtatipVsdENl5xaczgJsFX7YP91/bTR3zn1rDQcBhZRFmMuoVl9amRcvuJJ
         xvua267qSNGkLaeBloelgHwy3m+ThXIqIeUTR81pg1lHwA6ry497kVi9bAY9tviCj0a1
         0rTRMO0goo0+CjBGSdDZ/v77v8Zgxx7KQk7597b/N/hl3fJv4W81huI8Jihsw1UN1owV
         ffaG90iQ+sCfWqH7VEMbN4aEvsO0siEO1ylnUsSOatDu87i3B+ZYK3i7tCAsz1oPJdzO
         9JGJ4E6gOR5/Jowq5F1mSW/mVBD8A2XBV5Fzc6abyW89l4iGXjIhu9CzUB7Ka4pWTNrE
         fJ2Q==
X-Gm-Message-State: AOAM532DWbzQs0zkq+qVfnzkjOYXYwP6KggIzXxXjW7yQ2nqZRuKxqy+
	mvA2XX4eJtZFLyTU9O7kFKODqnYcaNW7hQ==
X-Google-Smtp-Source: ABdhPJwOR9RYbuFI1V8zYqZEcawlLdGKboqfR9DJ6TrIpurxtzPOHwaABH2lGpOOBvACTZh8ZOEU1A==
X-Received: by 2002:a05:6402:1c06:: with SMTP id ck6mr22330893edb.287.1625571755735;
        Tue, 06 Jul 2021 04:42:35 -0700 (PDT)
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
 Len Brown <lenb@kernel.org>, Maxime Ripard <mripard@kernel.org>,
 Jiri Kosina <jikos@kernel.org>, "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>, Johannes Thumshirn <morbidrsa@gmail.com>,
 Mauro Carvalho Chehab <mchehab@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
 Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>,
 =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>,
 Bjorn Helgaas <bhelgaas@google.com>, Hans de Goede <hdegoede@redhat.com>,
 Mark Gross <mgross@linux.intel.com>,
 Bjorn Andersson <bjorn.andersson@linaro.org>, Andy Gross
 <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
 Stephen Boyd <sboyd@kernel.org>, Johan Hovold <johan@kernel.org>,
 Alex Elder <elder@kernel.org>,
 Mika Westerberg <mika.westerberg@linux.intel.com>,
 Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
 Stefano Stabellini <sstabellini@kernel.org>, =?UTF-8?Q?Pali_Roh=c3=a1r?=
 <pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>,
 linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
 linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
 linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
 linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
 nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
 linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
 linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
 linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
 industrypack-devel@lists.sourceforge.net, linux-media@vger.kernel.org,
 linux-mmc@vger.kernel.org, netdev@vger.kernel.org,
 linux-ntb@googlegroups.com, linux-pci@vger.kernel.org,
 platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org,
 linux-scsi@vger.kernel.org, alsa-devel@alsa-project.org,
 linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org,
 linux-staging@lists.linux.dev, greybus-dev@lists.linaro.org,
 target-devel@vger.kernel.org, linux-usb@vger.kernel.org,
 linux-serial@vger.kernel.org, virtualization@lists.linux-foundation.org,
 kvm@vger.kernel.org, xen-devel@lists.xenproject.org
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
From: Maximilian Luz <luzmaximilian@gmail.com>
Message-ID: <07c08230-6c71-2a73-c89f-05b9b5de78ab@gmail.com>
Date: Tue, 6 Jul 2021 13:42:31 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/6/21 11:50 AM, Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

>   drivers/platform/surface/aggregator/bus.c | 4 +---

Acked-by: Maximilian Luz <luzmaximilian@gmail.com>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:53:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:53:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151151.279369 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jdR-0002E4-NV; Tue, 06 Jul 2021 11:53:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151151.279369; Tue, 06 Jul 2021 11:53:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jdR-0002Dx-KP; Tue, 06 Jul 2021 11:53:05 +0000
Received: by outflank-mailman (input) for mailman id 151151;
 Tue, 06 Jul 2021 11:53:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0jdQ-0002Dn-K7; Tue, 06 Jul 2021 11:53:04 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0jdQ-0008O9-Ay; Tue, 06 Jul 2021 11:53:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0jdP-00013Q-Vg; Tue, 06 Jul 2021 11:53:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0jdP-0000pM-VA; Tue, 06 Jul 2021 11:53:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=VHXQcaecfVi1JfH58DTe1AIwbhg9fqo7gbsgLK5HWCo=; b=fwEWn5IxtnfgPX7rc/UaHNIMyY
	Om0gXNxaDJMmy9UHK6vMPok39mHU12F0fy43X4EzeTMwQnTp7nHeRTMgFx8NmXOfQ3BZVG0m0DPot
	fCNONAgq+ScwtDPcsFLH3O1Px1IU9c+mgogdAPPr3PRcjmj/QRkJkbcD6BtZr9JIf1zE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163321-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163321: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
X-Osstest-Versions-That:
    qemuu=4fb2820854a796ab75ffb2ec896b67268281ecde
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 11:53:03 +0000

flight 163321 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163321/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163311
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163311
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163311
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163311
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163311
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163311
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163311
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
baseline version:
 qemuu                4fb2820854a796ab75ffb2ec896b67268281ecde

Last test of basis   163311  2021-07-05 12:09:09 Z    0 days
Testing same since   163321  2021-07-06 00:39:14 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Feng Lin <linfeng23@huawei.com>
  Greg Kurz <groug@kaod.org>
  Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Vivek Goyal <vgoyal@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   4fb2820854..9bef7ea9d9  9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 11:54:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 11:54:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151158.279383 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jfF-0002uk-Ba; Tue, 06 Jul 2021 11:54:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151158.279383; Tue, 06 Jul 2021 11:54:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jfF-0002uc-8O; Tue, 06 Jul 2021 11:54:57 +0000
Received: by outflank-mailman (input) for mailman id 151158;
 Tue, 06 Jul 2021 11:54:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0jfE-0002uS-21
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 11:54:56 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d87b4dd8-80bc-4553-a0eb-a92f5c612317;
 Tue, 06 Jul 2021 11:54:55 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2057.outbound.protection.outlook.com [104.47.14.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-6-zwX_PQicNGuFIEK5zcMA9w-1;
 Tue, 06 Jul 2021 13:54:53 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7038.eurprd04.prod.outlook.com (2603:10a6:800:12d::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.24; Tue, 6 Jul
 2021 11:54:51 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 11:54:51 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0039.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:55::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 11:54:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d87b4dd8-80bc-4553-a0eb-a92f5c612317
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625572494;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=+qo5ntVrsAUdxoFW46nFFT7VS/THwD9rNO3leC/egNs=;
	b=J/2GiYYqxwWuPCQztBypUppmzycDDuq23reCCDO5eQ2jSyGDSlAq+KCnge8Ai9nzv/XfJn
	Iq0HeZps2R3PO6Hstk2HwUizZDmlMdfubrJ52bCeXnfYPsgJF0sl5xsucUZD7tL0nCAENU
	IHI3lqC/SVcHFCyNk25sklZKhCBDAUQ=
X-MC-Unique: zwX_PQicNGuFIEK5zcMA9w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WB0wfvkpsAOfQXGjZw0YEtHqOvRjjzIpfXhq2t7RmL1e2BNfXvx0L/RZ5fOqt/NQBzYh6xL7kNKJFCE2C9LS1i69q9eiLwGC97SYMoE7gX7tJmfK1WiURhxE3caCYrjbnP/6RflqmM5B+tmqI7q2BAFg4J4KHAe2CENtGFeHcO1VqLCQOWTBY6pHdbOC5zx61WJkzy/uhV/pYfs0yyf/y0tGWRKscWrb0PRRVLigEyNbW1F6J3C8V0d4QlkF2tIt90Phuq2UmYJlBsuOZeHZ9xjjjGqFWusOlIfeZJe5J/zCZjSV8CSyROr4vCAZw3m8gJrGZVRPkRPvJKB4f0syyA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+qo5ntVrsAUdxoFW46nFFT7VS/THwD9rNO3leC/egNs=;
 b=ly5H+MdluZ7P4cnvG+1pthcpg4/2Tjr19UgX7QCJSccAaGXeB/Kv4SDHUXc8rz3NlzHT6H5BNzZcRgUmUge/s5ZWZ+BU7mHf5TUz35Wt6sbW4h3rpSgrE4Ox9vUeBTn748t9gHPXfx9QiT0zaUYKzmPbEZruDZU7VpLFKsJHitlMUM5vkBUXf/Hl4MWeiUoS+rE1WpNbUp0K4Xk5VzTbwerLvgi0gq1SpZgbYie9SFqCTGlYWkZL8LIDkBGl1a6dOV0PKeG34ZI6AK4WNM07ieEkWBemkWMTz0yV/P3g8XZxErMQe0DI0VNS0xuxmqF6TODlAKyiSdHSC2HXs7XSnA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 1/2] tools/migration: Fix iovec handling in
 send_checkpoint_dirty_pfn_list()
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Olaf Hering <olaf@aepfle.de>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-2-andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <9157297b-ef81-75be-f903-e0e9d2f64699@suse.com>
Date: Tue, 6 Jul 2021 13:54:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706112332.31753-2-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0039.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:55::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a5b7a2bd-b13a-493c-6b73-08d94074dc79
X-MS-TrafficTypeDiagnostic: VI1PR04MB7038:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7038BE7F80F0300E7A6CD132B31B9@VI1PR04MB7038.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	YhmEtlqRkSE1cr4q9vfmwL7TAUiyuddFPk38cKQyMqvXIlQ4+ycZJ3FbGpulnUwF2OVLIU8Jac2Gpq31utydgR0W4iHOzaibdkg2H7aO2gwQmHkHzEWM8W2WApwjJnFufYyePCAYN+bWJYapmK+MYPWzPCRz9zdlmWbPc1gSQ3ddsbP2tUGLAHNQjWtiBscbfAWFLRh/wJBfILWhH2uOFDF8wH32qpB7T1TOzPiiRIgaXKrGvJPj/VMmYZGwTc8XR+DBzdsxDuoHvBTGnpyCR2ZaSL9X4ypwdu7yG7skHejDZXnTYEx8lG6Ckua+BKQV6faEI4YyIEs4edJpdVCIq8Rn6Goy6VhYIh+IU9DO792lahZYjIXQbklLXJVfOwY+cvbCOmu48i2mdg8AEQpzbx9LM0Lj+JKzIqeYNADV8t7G6kARlV9ZhZ+p41YVKrtUr5BcFVYnw899QNRMdNsxVEToO1qrRQsn5rRySaXyq2TS2dZKLTo3Q+2FyjeK+TnxMMLw0XrhA8Si3YLf4201aFMgKJLpubNUEzgiSq3VuYb7ZXnCkVKxLFzQgvmL+p6oGnT1x+cNIZ4l6Xe0oQVBwrVaaiOlTKBKWca5jir/G1KSEwrAWk9MQijjXhrY+JA6vG5WwVDnonZpZGjqXfT+DtwvF4HzGXvDKqRnr8/6B9lzFnb4rqf17HQyB7hXOrH2BsbbtRYLZq8LLXOdbDa/Gv8bghJfVAQCNSX2dA2dZ10kvtvGx8iFUTGvMBUuAw6j
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(376002)(136003)(396003)(39860400002)(6486002)(6916009)(36756003)(316002)(8936002)(31686004)(86362001)(16576012)(66946007)(186003)(31696002)(4744005)(2616005)(54906003)(38100700002)(956004)(2906002)(4326008)(5660300002)(26005)(478600001)(8676002)(53546011)(66476007)(66556008)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?9Z/DSv+feYF+Fr2MDJzewtQH9Y5AfQXNXNusBtj?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a5b7a2bd-b13a-493c-6b73-08d94074dc79
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 11:54:51.0903
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: opgx0kMxcbfRR5ZJGsD/KI7XE08cTC/hAefTCWR8foWoJh/ZzDZCOf2TGDiJc3FPp7+XqvvzUJYaIEsQkpakWA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7038

On 06.07.2021 13:23, Andrew Cooper wrote:
> We shouldn't be using two struct iovec's to write half of 'rec' each, and
> there is no need to malloc() for two struct iovec's at all.

I was indeed wondering about all of these while also touching the
function. But I was guessing that there might be a deeper reason I
don't see.

> Simplify down to just two - one covering the whole of 'rec', and one covering
> the pfns array.
> 
> No functional change.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:02:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:02:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151166.279394 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jmq-0004Sb-Ag; Tue, 06 Jul 2021 12:02:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151166.279394; Tue, 06 Jul 2021 12:02:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jmq-0004SU-6W; Tue, 06 Jul 2021 12:02:48 +0000
Received: by outflank-mailman (input) for mailman id 151166;
 Tue, 06 Jul 2021 12:02:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0jmo-0004SL-Rb
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:02:46 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1303df6e-de52-11eb-848f-12813bfff9fa;
 Tue, 06 Jul 2021 12:02:45 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx66C0HRRN
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 14:00:17 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1303df6e-de52-11eb-848f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625572818;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=l2RIPzx1fKjgqHs4Veqk4kH2oX1FOhF4tS7aEo+0JAE=;
    b=HIkQkl+YzXadqHjv4xMmUmBudYsiO4zb7fRgKOTZXgIlQog+79hrOg0jo4Iy+Z2Q8f
    kbQouLNL/H5wYG3pGpmyVxMQjkSz5XjGEblPDV1C6AfBzhuQLMH1bjWAS3KluMCoh7E/
    SdrgMfMOcXmEjzjonqYGVEo049sVOo7A72jdz1dblIyAZ/Tl+DgkzR31LZd42bGuYpSG
    ZLRiASzfH5dLAsTAB2jt4KyvbS/ZSAMJPVcWKsklayiaKwbufOHV2pDQsleJhVzQipE0
    5BIhOFuCbMlwCYkhZ6Ve4GYNARNHZrG+DjUTbPtJQpPoREu+cKyjs+XQrmYTLanqu0ER
    YlmA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 14:00:10 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Michal Orzel <michal.orzel@arm.com>
Cc: xen-devel@lists.xenproject.org, Stefano Stabellini
 <sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
 <Volodymyr_Babchuk@epam.com>, Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>, Tamas K Lengyel
 <tamas@tklengyel.com>, Alexandru Isaila <aisaila@bitdefender.com>, Petre
 Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to
 uint64_t
Message-ID: <20210706140010.4b8802d9.olaf@aepfle.de>
In-Reply-To: <20210705063952.25629-1-michal.orzel@arm.com>
References: <20210705063952.25629-1-michal.orzel@arm.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/TkrcJ+Fb3SFu9VLYbQg+Xct";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/TkrcJ+Fb3SFu9VLYbQg+Xct
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon,  5 Jul 2021 08:39:52 +0200
schrieb Michal Orzel <michal.orzel@arm.com>:

> Modify type of hsr, cpsr, spsr_el1 to uint64_t.

I think this is now commit 918b8842a852e0e7446286f546724b1c63c56c66, which =
fails to build:

...
diff -u reference.size tmp.size
--- reference.size      2021-06-29 10:50:32.237518309 +0200
+++ tmp.size    2021-07-06 13:58:19.052592351 +0200
@@ -4,8 +4,8 @@
 start_info                |       -       -    1112    1168
 trap_info                 |       -       -       8      16
 cpu_user_regs             |       -       -      68     200
-vcpu_guest_core_regs      |     304     304       -       -
-vcpu_guest_context        |     344     344    2800    5168
+vcpu_guest_core_regs      |     312     312       -       -
+vcpu_guest_context        |     352     352    2800    5168
 arch_vcpu_info            |       0       0      24      16
 vcpu_time_info            |      32      32      32      32
 vcpu_info                 |      48      48      64      64
gmake[2]: *** [Makefile:24: check-headers] Error 1

osstest may catch this error as well.

Olaf

--Sig_/TkrcJ+Fb3SFu9VLYbQg+Xct
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDkRcoACgkQ86SN7mm1
DoCWxA//YDvVLUx7rPAep1gcwSf4DVkQ9380VN05iByqhWYiCzHSj4jnE9bjR0vD
3MlqXHZrt5CKHmuk+g5zmys6kalh8b3WYKpF+X0q1xuTRMUSTDsYfSRHsoJbbyJt
VVMzSK4Wu7DPBsVufLNWk94VGYaMsKy05SJI6KNJtmeFsNQ6Puv0/3Ptplz7aJcD
7JFAgjEPtA3p5/FMPG6/riWV4qN7Uy02WFRGGCEzulfTOqW5lfPmx6iQCr8NPEua
2sd4Teio61BCoLmg0E8QlRVdDD392MSbT04je09hwZYgV7+NKeyi6Agq7RWf5cFr
EwaSjLJtoQ1OkjFt/KY0uVZwyUZ6AjhN6oPDbmw95moXL13TVPPF+OmBO6wl8Z8T
PYt/qLKgPyC3ZNSpLjJAI6o8GuGKz14c3WZQ6Y6yRto5NcbO2TAXPCVWOICldFTG
nn3E0ssJY+c6bz6ZWLjuTqAIg2d5NcTcKVr3Y2JVEjHCRey+PwkIV3iDdVkfKH7V
xKUV9yddWVcK6tvJBAYgp7gsQaZe7cYWnUP/PXadcrmMjt7UXV/RbrAom0K8PdfL
qes6LnSeaFXDPRanPNnTzJtd1CNEwHCOpAdiM860uXvP77vH/oXmfXuX+Oz5QZBk
H5IYR/4wCKa2glzlw0/FQzjQlnw5FGSeEyQcU+AwFxG7LEtsSaQ=
=KBQV
-----END PGP SIGNATURE-----

--Sig_/TkrcJ+Fb3SFu9VLYbQg+Xct--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:03:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:03:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151171.279405 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jnp-000519-Jg; Tue, 06 Jul 2021 12:03:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151171.279405; Tue, 06 Jul 2021 12:03:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jnp-000512-GQ; Tue, 06 Jul 2021 12:03:49 +0000
Received: by outflank-mailman (input) for mailman id 151171;
 Tue, 06 Jul 2021 12:03:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0jno-00050w-LC
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:03:48 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 379fbf78-de52-11eb-8490-12813bfff9fa;
 Tue, 06 Jul 2021 12:03:47 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2056.outbound.protection.outlook.com [104.47.13.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-ZjyWLU8LN_izTj3XeA9KVQ-2; Tue, 06 Jul 2021 14:03:45 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3118.eurprd04.prod.outlook.com (2603:10a6:802:a::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Tue, 6 Jul
 2021 12:03:41 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 12:03:41 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR01CA0116.eurprd01.prod.exchangelabs.com (2603:10a6:208:168::21) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Tue, 6 Jul 2021 12:03:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 379fbf78-de52-11eb-8490-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625573026;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=ErCUMiYkR610eB/k1dZYvQnlEViIfNkWDjKB0iL0r74=;
	b=I1jrPi949Dy8vXN69Aq4uq9nghquaEIjNSPWu0z9Z7bb/FLXD0U3EFrr7F+rsnSiwuNN+3
	0AtsSiZDTCZqdeHqRBxcjs92xHOlFWo8N6p39OkE30uUR33GSah6HnWJs77WA7Bslll4sn
	LVtMqq0WsRTlcyD3v7rZjD0rK6q4pC0=
X-MC-Unique: ZjyWLU8LN_izTj3XeA9KVQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VVslLwld4osopHA2VA86Tt407dsabmBHxrpIl1VHNp95O7iohWhw3vAJ0NBTGmLj0lGszad0z0tVhiGBylWykl09jDBtzQs5lFTf0BQOqzLb9XVQOu2554wiRlkwjdmG8Blfa9H/Q185E5tqaYuQgGfrxnwOz7IBbkZ58Wt2yZTg5hXAQkcE1G7eezH6kZmi0bT62JiGrKJpemBWYHuBXLc/ZPvco0nSnL/POoxg0Q93FvjGhmbZAJzsoot+TlsbZcsB85jO0itTNZikSlNViX5IHtxIdNh+8woxyBFMPX9NxNkJTtfqNtvSwTb0kVCS48BExN/DoXc7ZkK6KfDB/g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ErCUMiYkR610eB/k1dZYvQnlEViIfNkWDjKB0iL0r74=;
 b=HTvD6rO3LxwToThQKUdki5IIcTQTx+o/OeNd9e30pms8/iW5mpc2em3mcIQd6J7r/t1LV/vM4/Ka8KCB0qhKjpm4iJ20GfRDf19CrZYr1dcGOgeGTbdVsPrYk/6P4aXVxEKq0NfxVKWIfyWpmB1wNahIXzOK9Jr6nqzwSRKdc0p+vTMR77FcHS6+kBeKiHMY8JRAbNqiTYZXsP3ivsDUbZfRPQRlBYPFQfUZweJbTsQW0ca+qh+9LduECDYvjUXpcgh3XoB+U6Q+gePecGLZtX49QyLhvczDvK1mrQARoRt26NTQSIqS2orOZk8KZn/lz+H+JQ3oezpzNbLOJTalUg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Olaf Hering <olaf@aepfle.de>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <d5bb77be-b557-3587-6cbc-3e427104c55b@suse.com>
Date: Tue, 6 Jul 2021 14:03:39 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706112332.31753-3-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR01CA0116.eurprd01.prod.exchangelabs.com
 (2603:10a6:208:168::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7fae53bc-4f9b-4970-7050-08d94076185a
X-MS-TrafficTypeDiagnostic: VI1PR04MB3118:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB31184A21D3F85FA544964503B31B9@VI1PR04MB3118.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	kXc1SU/l2q3cR/Ux1AwXn5XIk8Y0iq9lLtuT/MFa5uUqGyADFZGMarKdqP4mJnOclRqkKeigpAAVLse2SVWQj7AVOad+r+QgQTBttY8sGxqwrYUiOwO7SXLqX8uktjXPAE7LAHrf2LRJrlVBLhUXTdD7uavA92+AY29TzSr4/13QCsjGjBtb70IoMTbQk7NN1xxIX+W8M0PDIAPOoyKWu+lTaCpLVkqO/z9I4wQkESayuya6wfCQq5ouP1npV6pVm9WQyBm4DjCdfsv6chl84i/oEAr99GbZGWZRzY+7pEQIHEYVqd4RluqReqGyh0NYgTUDVXAiQJKtgRhZJPt2U+0QNdH+7/+F1nZ3cF9PoylYge7AcqRl8Wayirez0Jg/w7V8dlVEqFpxBbVBU4P3NTnDiRCHFxkUPLU3nMs871NnZABtO1BFSnalcav7hCuKZEObk41XpWNlBvtieBrR/IUVJO+4g+nCVUvV2Vvhuzgau8fZVCNZwafGE4Av5KN03TK13SuLQiV17r6aTEdTLcK1ZUojDsXIW6m73bJW+RVfLD9s3c9Ln3u05DQBx4gdKi8hSs1/vfo1M8eul13q8Qkhm3CS6iVdV++F1kPZhZeic8q3Qqjqjjo1uwrtp2gNAWUfRn0W+FcDPk7a5E29V3K5Kf9adxX6BtCQxlKO+FxvIF2gqdWaI2Qi8z7siTCa1XmATiCvadhIWs+tTyT4uq8CdPxz0WKcb5pYdfk9QBw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(39860400002)(346002)(136003)(376002)(16576012)(8676002)(5660300002)(53546011)(66946007)(26005)(66476007)(956004)(316002)(54906003)(66556008)(186003)(2616005)(31686004)(86362001)(31696002)(8936002)(4326008)(2906002)(6916009)(6486002)(478600001)(38100700002)(83380400001)(36756003)(14143004)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?BXd680Kzld51dYt6p09Y0Rq8+Hrhf/UbpDnR4iD?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7fae53bc-4f9b-4970-7050-08d94076185a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 12:03:40.9623
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: px4J39Dg+fD8oEagKl/hER6HsMF/Ac1GhGidFyutA80ZXIyKNF5VsZ2fKGzfb23L1Z1MTslBsvmT2zTlOg1k+w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3118

On 06.07.2021 13:23, Andrew Cooper wrote:
> 'count * sizeof(*pfns)' can in principle overflow, but is implausible in
> practice as the time between checkpoints is typically sub-second.
> Nevertheless, simplify the code and remove the risk.
> 
> There is no need to loop over the bitmap to calculate count.  The number of
> set bits is returned in xc_shadow_op_stats_t which is already collected (and
> ignored).
> 
> Bounds check the count against what will fit in REC_LENGTH_MAX.  At the time
> of writing, this allows up to 0xffffff pfns.

Well, okay, this then means that an overflow in the reporting of
dirty_count doesn't matter for now, because the limit is lower
anyway.

>  Rearrange the pfns loop to check
> for errors both ways, not simply that there were more pfns than expected.

Hmm, "both ways" to me would mean ...

> @@ -459,24 +462,20 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
>          goto err;
>      }
>  
> -    for ( i = 0, written = 0; i < ctx->restore.p2m_size; ++i )
> +    for ( i = 0, written = 0; count && i < ctx->restore.p2m_size; ++i, --count )
>      {
>          if ( !test_bit(i, dirty_bitmap) )
>              continue;
>  
> -        if ( written > count )
> -        {
> -            ERROR("Dirty pfn list exceed");
> -            goto err;
> -        }
> -
>          pfns[written++] = i;
>      }
>  
> -    rec.length = count * sizeof(*pfns);
> -
> -    iov[1].iov_base = pfns;
> -    iov[1].iov_len = rec.length;
> +    if ( written != stats.dirty_count )
> +    {
> +        ERROR("Mismatch between dirty bitmap bits (%u), and dirty_count (%u)",
> +              written, stats.dirty_count);
> +        goto err;
> +    }

... you then also check that there are no further bit set in the
bitmap. As said elsewhere, I'm not convinced using statistics as
a basis for actual operation (rather than just reporting) is
appropriate. I'm unaware of there being any spelled out guarantee
that the numbers reported back from the hypercall are accurate.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:07:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:07:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151178.279416 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jrG-0005hJ-3k; Tue, 06 Jul 2021 12:07:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151178.279416; Tue, 06 Jul 2021 12:07:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jrG-0005hC-0h; Tue, 06 Jul 2021 12:07:22 +0000
Received: by outflank-mailman (input) for mailman id 151178;
 Tue, 06 Jul 2021 12:07:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0jrE-0005h6-54
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:07:20 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b5d74faa-de52-11eb-8491-12813bfff9fa;
 Tue, 06 Jul 2021 12:07:19 +0000 (UTC)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2058.outbound.protection.outlook.com [104.47.10.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-13-oPl56ePiNCKWtwmP2uZtuA-2; Tue, 06 Jul 2021 14:07:17 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB6479.eurprd04.prod.outlook.com (2603:10a6:803:11c::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 12:07:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 12:07:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0229.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::25) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 12:07:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b5d74faa-de52-11eb-8491-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625573238;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=D8yLcLqwryIspS91KZTehJYWVyozXTYsuV26DYaOzZM=;
	b=WRDTmeLeqytOSzogd+edBhzx9MGKwtRFwasWGlkka+kPQPIiAkWrEEHsZvqxvLB/Ku74Zl
	aKgc/AICMCeuMvzb+eiDqUGlAfYLybbVys+d5ZsjwQd2G/kyPwR4pdD3wGWS0Eceunrn4y
	bYW7WWMNSS+XAavPJreR5WeOgoCB4Pc=
X-MC-Unique: oPl56ePiNCKWtwmP2uZtuA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YU3csL2mgCBsYjub6cagRx6W81BkM+1bFWElp5iaPYHn8DSvNCK8HY0NWKMYh1K9d2VrYdAwhF0iiJvdUWL7SIryALvaktEF2ypk1PsW0jjdC1P/YObF3J7DWE+ULh/D8hXfvApJvnoVixKMMFb3TJ9w6EDcquhRRT2la98KhDxM6CrAor+Zfi7Grqcc74Hst6I2mk2Qsoe+UBRhzrcCjuZL7bUNGtdBU2CKPSwZRzTKIyIW/ph8SCkYktFNUQRG2PXglmPNLygnq0jdEGzGxba2v24T7NJyQbIgIAm9dIcCvYXbCY2KBQ5BwSxcqroxj8f8x9wiV5E3fialSfGzXw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=D8yLcLqwryIspS91KZTehJYWVyozXTYsuV26DYaOzZM=;
 b=k9v1dsGYQMi8BCoRkGjnnYOm50yfUTkCVj1bMcaY7uoVQ1D3QhQIyn65rlbh5fftUWbbI8S7PWxUIde+BNE2IKkKvm9ypVwSGNqXqybXWydvtOst7FZw+5FYfjqotgRDrqZz9PSjVURMMQkFdvScUtr3RF/AfGH1GhaT7im6mMRFcqnT1lCcyLMvHLZrFyjIGJTDrjbDd4yMjRgRvPZ7aOm2a27eCZRxiAGaTl57Cj74qSd/GjRjaqzN9ORzCV7G3XTPHthEHpChscHyVcdDzI3zvgHKcUO1umT+yOpagbzaCH+MFBGz3MCOjM6rdI7EaVd59h3NUgzGu7Y1ecy9pw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 0/2] tools/migration: Fixes in
 send_checkpoint_dirty_pfn_list()
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Olaf Hering <olaf@aepfle.de>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <eb6a207b-fb10-60f0-60b4-8f678608a68a@suse.com>
Date: Tue, 6 Jul 2021 14:07:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706112332.31753-1-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0229.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 873fcd2c-3fe1-4d6b-04d6-08d940769703
X-MS-TrafficTypeDiagnostic: VE1PR04MB6479:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB64796AB367F317D01E5F24B3B31B9@VE1PR04MB6479.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	0zw9YKBWEGa1jcCnEoW/kfiDRGRn8ay+1cCPNueSqdYAuU+r55uQhURjDsMM5W4mo0JyyCmD3xdhWDx83jXkBzUrRUlsFGEOtYMboXpL8Qsx9SI8L0WN01xEdsH6iJcHtG0jxznwISQ+FXBvfC2958W8+0llShr8h5KRsvZCa1oqvnC7dIeJiyXh88+yQZznhoqY2HmcDVyRpazU+otVqQp9FlvP0kkrJJIsFXpUflO7r5yPkWNwRzGoemPOs8HEyqIPgqLD6kLGpsBxb+MOmrEtA+pSJjZUhy/lquFbDKsl4OaZttGQIGN4RRNXvCJPo/PR+hYb6mGi9pRiVIJFSeuw8Kf49DToTXKosZZQHesLjq0wBqYlG5lqPQPeh3VTU3JFjxj1yAUZRjUTwmTUmicuNsEOPE4YMAxzwl/mbuEakBRQcx7DPXVg+d9N2VYFSGUrKcU58CssYG7NeNE+G0UPSe8pmMU01NdxKiEnuIUVpiJFic0gQTsEEYMovxuxxPR7ssOGmcZtVUPK4WHmK2D2lPFhX5oopbkhpcJRI5YES1KEy7a7V0lJ593lWzBod4dtDZCl4OR2rqJNgJVP6cM15ikCz5p1d9U1BoSeZrQEHQPN1N2ew5dHzRe+vjw2V2c8kr80VQZ3Y/WNOisMD2xkamNgH7tsjpjYPCZke9fE7ktjDxnlSdLCsCHTXtCYYF4YVT2iJMM52UabZLBzJhjHKhPzJGhcHa7H7W+2+qDAgNVxWNmzo5442zFj+LYDm6a/apwCpNK2edWzcwWMGw==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(39860400002)(376002)(366004)(346002)(36756003)(8676002)(316002)(31696002)(66946007)(4326008)(2906002)(4744005)(86362001)(38100700002)(31686004)(26005)(6486002)(66476007)(16576012)(6916009)(2616005)(186003)(478600001)(54906003)(5660300002)(956004)(66556008)(8936002)(53546011)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 873fcd2c-3fe1-4d6b-04d6-08d940769703
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 12:07:13.4851
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: pb+s9J0Gd40P0K+anH4cixuApOIesJOcNGgCRGFiEJ+gRS3HjRbbMUdTP6CrLROIN+LJORREewIZsulvoscidg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6479

On 06.07.2021 13:23, Andrew Cooper wrote:
> These are a prerequisite to all currently on-list patches touching the
> function.

Just as an observation, while I can see how from your pov (judging from
your not-exactly-review-comments) patch 2 may be a prereq to one of my
changes, I don't think I'd call patch 1 a prereq to anything - this is
cleanup which can be done at any point. Of course it'll allow me to
shrink that one of my patches, which is certainly nice.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:07:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:07:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151179.279427 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jrJ-0005zx-C1; Tue, 06 Jul 2021 12:07:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151179.279427; Tue, 06 Jul 2021 12:07:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jrJ-0005zp-8g; Tue, 06 Jul 2021 12:07:25 +0000
Received: by outflank-mailman (input) for mailman id 151179;
 Tue, 06 Jul 2021 12:07:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uJ8l=L6=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m0jrH-0005w9-2Q
 for xen-devel@lists.xen.org; Tue, 06 Jul 2021 12:07:23 +0000
Received: from mail-lf1-x12d.google.com (unknown [2a00:1450:4864:20::12d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5c96e78a-b7df-4260-9316-1ab39d009baa;
 Tue, 06 Jul 2021 12:07:21 +0000 (UTC)
Received: by mail-lf1-x12d.google.com with SMTP id p1so2179440lfr.12
 for <xen-devel@lists.xen.org>; Tue, 06 Jul 2021 05:07:20 -0700 (PDT)
Received: from [192.168.1.7] ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id l6sm1783397lji.63.2021.07.06.05.07.18
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 06 Jul 2021 05:07:19 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5c96e78a-b7df-4260-9316-1ab39d009baa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-transfer-encoding:content-language;
        bh=Ospo8X/Guvquin0Jkhfm+NucE4Ml3Sq8Ps7yQoP/kFA=;
        b=h2PGHRhCQBzRlSa5dCwI8pd4aIiZ34O+6eNmpIx3hGOYg9M5nlT6NmYF0spQVCHGev
         rR/TPHYbEWvtbUn2DjFF/wjaebCi0/4/kCfdZjmYXwk9leN0872JsXkPWVFhIU/z6JI9
         7+Njv7fOy1UfUkK6MMElAn+YeLF1XcbA0+LswhJ8amDktTLtpbGUiwdYM8//A0ndzbwz
         bUpWW5SgRDxVbBY1cI+iiU9eCLqOnEf6wVAmwEJRIfyS/QcGBrxIqFV9nv1ZeIpK5WaE
         MODz9rbfq3Mnk5j6VtoUR7SayMZftLBfQlmlV7/ZyZkWUZ1fWS98ruok+YUZCoyBCitB
         O+tw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-transfer-encoding
         :content-language;
        bh=Ospo8X/Guvquin0Jkhfm+NucE4Ml3Sq8Ps7yQoP/kFA=;
        b=i8jVr3LGQfPVS69ZNFGAu4gu0nDn902r9O+h71J9m1r+os/0jXGiYStHCgPRT8Efjt
         j7WmWv0ALUL8DyPkPXjk5+XNWooNg9qQM2jk2VgEylP0owanpm6QWmTK/jNJm7zRezcp
         Ljr6du0pMWobl8j5V9URz6p9IOnGfAUUIl5zSvGdJLQeXU4+3i7pemhr7h65EBsSU3XX
         SktmqaP9R+9pCxREymcuPuBR9QEs1npvzUyZRZBhUhqQ8gm1sunlJ6xk0TznbhC4t7YC
         dR03FARe2gQwCyy3OVOAFHv2EO6m1uKKIM9wo2h8HL+fXVFLcblloOmbw8TcYM+7BeQN
         +U3Q==
X-Gm-Message-State: AOAM533et/jlxOBicseQjVML6CYy6XtWIlBpaTUmbYrNYQ3Q4HD0sVjP
	rFfN2gGNJJFFPKgkDBMVhG4=
X-Google-Smtp-Source: ABdhPJwDkjeEQKOKppl6oJBn3ajArgr3Zcfwz9kerRIenHP3/B1/D2+Ne2up9z3SR56hTWMhyNsIPQ==
X-Received: by 2002:a19:5210:: with SMTP id m16mr14144855lfb.651.1625573239494;
        Tue, 06 Jul 2021 05:07:19 -0700 (PDT)
Subject: Re: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
To: Wei Chen <Wei.Chen@arm.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 "will@kernel.org" <will@kernel.org>,
 "julien.thierry.kdev@gmail.com" <julien.thierry.kdev@gmail.com>,
 "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
 "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
 "jean-philippe@linaro.org" <jean-philippe@linaro.org>,
 Julien Grall <julien@xen.org>, Andre Przywara <Andre.Przywara@arm.com>,
 Marc Zyngier <maz@kernel.org>,
 Oleksandr Tyshchenko <Oleksandr_Tyshchenko@epam.com>
References: <DB9PR08MB6857B375207376D8320AFBA89E309@DB9PR08MB6857.eurprd08.prod.outlook.com>
 <alpine.DEB.2.21.2106291716560.9437@sstabellini-ThinkPad-T480s>
 <DB9PR08MB6857B9DC597D253F69D31B6D9E1C9@DB9PR08MB6857.eurprd08.prod.outlook.com>
From: Oleksandr <olekstysh@gmail.com>
Message-ID: <17f02c54-4697-7aaa-6c6b-19c2bbeb169b@gmail.com>
Date: Tue, 6 Jul 2021 15:07:18 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <DB9PR08MB6857B9DC597D253F69D31B6D9E1C9@DB9PR08MB6857.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US


Hello Wei,


Sorry for the late response.
And thanks for working in that direction and preparing the document.


On 05.07.21 13:02, Wei Chen wrote:
> Hi Stefano,
>
> Thanks for your comments.
>
>> -----Original Message-----
>> From: Stefano Stabellini <sstabellini@kernel.org>
>> Sent: 2021年6月30日 8:43
>> To: will@kernel.org; julien.thierry.kdev@gmail.com; Wei Chen
>> <Wei.Chen@arm.com>
>> Cc: kvm@vger.kernel.org; xen-devel@lists.xen.org; jean-philippe@linaro.org;
>> Julien Grall <julien@xen.org>; Andre Przywara <Andre.Przywara@arm.com>;
>> Marc Zyngier <maz@kernel.org>; Stefano Stabellini <sstabellini@kernel.org>;
>> Oleksandr Tyshchenko <Oleksandr_Tyshchenko@epam.com>
>> Subject: Re: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
>>
>> Hi Wei,
>>
>> Sorry for the late reply.
>>
>>
>> On Tue, 15 Jun 2021, Wei Chen wrote:
>>> Hi,
>>>
>>> I have some thoughts of using kvmtool Virtio implementation
>>> for Xen. I copied my markdown file to this email. If you have
>>> time, could you please help me review it?
>>>
>>> Any feedback is welcome!
>>>
>>> # Some thoughts on using kvmtool Virtio for Xen
>>> ## Background
>>>
>>> Xen community is working on adding VIRTIO capability to Xen. And we're
>> working
>>> on VIRTIO backend of Xen. But except QEMU can support virtio-net for
>> x86-xen,
>>> there is not any VIRTIO backend can support Xen. Because of the
>> community's
>>> strong voice of Out-of-QEMU, we want to find a light weight VIRTIO
>> backend to
>>> support Xen.


Yes, having something light weight to provide Virtio backends for the at 
least *main* devices (console, blk, net)
which we could run on Xen without an extra effort would be really nice.


>>>
>>> We have an idea of utilizing the virtio implementaton of kvmtool for Xen.
>> And
>>> We know there was some agreement that kvmtool won't try to be a full
>> QEMU
>>> alternative. So we have written two proposals in following content for
>>> communities to discuss in public:
>>>
>>> ## Proposals
>>> ### 1. Introduce a new "dm-only" command
>>> 1. Introduce a new "dm-only" command to provide a pure device model mode.
>> In
>>>     this mode, kvmtool only handles IO request. VM creation and
>> initialization
>>>     will be bypassed.
>>>
>>>      * We will rework the interface between the virtio code and the rest
>> of
>>>      kvmtool, to use just the minimal set of information. At the end,
>> there
>>>      would be MMIO accesses and shared memory that control the device
>> model,
>>>      so that could be abstracted to do away with any KVM specifics at all.
>> If
>>>      this is workable, we will send the first set of patches to introduce
>> this
>>>      interface, and adapt the existing kvmtool to it. Then later we will
>> can
>>>      add Xen support on top of it.
>>>
>>>      About Xen support, we will detect the presence of Xen libraries,
>> also
>>>      allow people to ignore them, as kvmtoll do with optional features
>> like
>>>      libz or libaio.
>>>
>>>      Idealy, we want to move all code replying on Xen libraries to a set
>> of
>>>      new files. In this case, thes files can only be compiled when Xen
>>>      libraries are detected. But if we can't decouple this code
>> completely,
>>>      we may introduce a bit of #ifdefs to protect this code.
>>>
>>>      If kvm or other VMM do not need "dm-only" mode. Or "dm-only" can not
>>>      work without Xen libraries. We will make "dm-only" command depends
>> on
>>>      the presence of Xen libraries.
>>>
>>>      So a normal compile (without the Xen libraries installed) would
>> create
>>>      a binary as close as possible to the current code, and only the
>> people
>>>      who having Xen libraries installed would ever generate a "dm-only"
>>>      capable kvmtool.
>>>
>>> ### 2. Abstract kvmtool virtio implementation as a library
>>> 1. Add a kvmtool Makefile target to generate a virtio library. In this
>>>     scenario, not just Xen, but any project else want to provide a
>>>     userspace virtio backend service can link to this virtio libraris.
>>>     These users would benefit from the VIRTIO implementation of kvmtool
>>>     and will participate in improvements, upgrades, and maintenance of
>>>     the VIRTIO libraries.
>>>
>>>      * In this case, Xen part code will not upstream to kvmtool repo,
>>>        it would then be natural parts of the xen repo, in xen/tools or
>>>        maintained in other repo.
>>>
>>>        We will have a completely separate VIRTIO backend for Xen, just
>>>        linking to kvmtool's VIRTIO library.
>>>
>>>      * The main changes of kvmtool would be:
>>>          1. Still need to rework the interface between the virtio code
>>>             and the rest of kvmtool, to abstract the whole virtio
>>>             implementation into a library
>>>          2. Modify current build system to add a new virtio library
>> target.
>>
>>
>> I don't really have a preference between the two.
>>
>>  From my past experience with Xen enablement in QEMU, I can say that the
>> Xen part of receiving IO emulation requests is actually pretty minimal.

In general, both proposals sound good to me, probably with a little 
preference for #1, but I am not sure that I can see all pitfalls here.


> Yes, we have done some prototyping, and the code of Xen receive IOREQ
> support can be implemented in a separate new file without invasion into
> the existing kvmtool.
>
> The point is that the device implementation calls the hypervisor interfaces
> to handle these IOREQs, and is currently tightly coupled to Linux-KVM in the
> implementation of each device. Without some abstract work, these adaptations
> can lead to more intrusive modifications.
>
>> See as a reference
>> https://github.com/qemu/qemu/blob/13d5f87cc3b94bfccc501142df4a7b12fee3a6e7
>> /hw/i386/xen/xen-hvm.c#L1163.
>> The modifications to rework the internal interfaces that you listed
>> below are far more "interesting" than the code necessary to receive
>> emulation requests from Xen.


+1

>>
> I'm glad to hear that : )
>
>> So it looks like option-1 would be less efforts and fewer code changes
>> overall to kvmtools. Option-2 is more work. The library could be nice to
>> have but then we would have to be very careful about the API/ABI,
>> compatibility, etc.
>>
>> Will Deacon and Julien Thierry might have an opinion.
>>
>>
> Looking forward to Will and Julien's comments.
>
>>> ## Reworking the interface is the common work for above proposals
>>> **In kvmtool, one virtual device can be separated into three layers:**
>>>
>>> - A device type layer to provide an abstract
>>>      - Provide interface to collect and store device configuration.
>>>          Using block device as an example, kvmtool is using disk_image to
>>>          -  collect and store disk parameters like:
>>>              -  backend image format: raw, qcow or block device
>>>              -  backend block device or file image path
>>>              -  Readonly, direct and etc
>>>      - Provide operations to interact with real backend devices or
>> services:
>>>          - provide backend device operations:
>>>              - block device operations
>>>              - raw image operations
>>>              - qcow image operations
>>> - Hypervisor interfaces
>>>      - Guest memory mapping and unmapping interfaces
>>>      - Virtual device register interface
>>>          - MMIO/PIO space register
>>>          - IRQ register
>>>      - Virtual IRQ inject interface
>>>      - Hypervisor eventfd interface
>> The "hypervisor interfaces" are the ones that are most interesting as we
>> need an alternative implementation for Xen for each of them. This is
>> the part that was a bit more delicate when we added Xen support to QEMU.
>> Especially the memory mapping and unmapping. All doable but we need
>> proper abstractions.
>>
> Yes. Guest memory mapping and unmapping, if we use option#1, this will be a
> a big change introduced in Kvmtool. Since Linux-KVM guest memory in kvmtool
> is flat mapped in advance, it does not require dynamic Guest memory mapping
> and unmapping. A proper abstract interface can bridge this gap.

The layer separation scheme looks reasonable to me at first sight. 
Agree, "Hypervisor interfaces" worry the most, especially "Guest memory 
mapping and unmapping" which is something completely different on Xen in 
comparison with Kvm. If I am not mistaken, in the PoC the Virtio ring(s) 
are mapped at once during device initialization and unmapped during 
releasing it, while the payloads I/O buffers are mapped/unmapped at 
run-time ...
If only we could map all memory in advance and just calculate virt addr 
at run-time like it was done for Kvm case in guest_flat_to_host(). What 
we would just need is to re-map memory once the guest memory layout is 
changed
(fortunately, we have invalidate mapcache request to signal about that).


FYI, I had a discussion with Julien on IRC regarding foreign memory 
mappings and possible improvements, the main problem today is that we 
need to steal page from the backend domain memory in order to map guest 
page into backend address space, so if we decide to map all memory in 
advance and need to serve guest(s) with a lot of memory we may run out 
of memory in the host very quickly (see XSA-300). So the idea is to try 
to map guest memory into some unused address space provided by the 
hypervisor and then hot-plugged without charging real domain pages 
(everything not mapped into P2M could be theoretically treated as 
unused). I have already started investigations, but unfortunately had to 
postpone them due to project related activities, definitely I have a 
plan to resume them again and create a PoC at least. This would simplify 
things, improve performance and eliminate the memory pressure in the host.


>
>>> - An implementation layer to handle guest IO request.
>>>      - Kvmtool provides virtual devices for guest. Some virtual devices
>> two
>>>        kinds of implementations:
>>>          - VIRTIO implementation
>>>          - Real hardware emulation
>>>
>>> For example, kvmtool console has virtio console and 8250 serial two
>> kinds
>>> of implementations. These implementation depends on device type
>> parameters
>>> to create devices, and depends on device type ops to forward data
>> from/to
>>> real device. And the implementation will invoke hypervisor interfaces to
>>> map/unmap resources and notify guest.
>>>
>>> In the current kvmtool code, the boundaries between these three layers
>> are
>>> relatively clear, but there are a few pieces of code that are somewhat
>>> interleaved, for example:
>>> - In virtio_blk__init(...) function, the code will use disk_image
>> directly.
>>>    This data is kvmtool specified. If we want to make VIRTIO
>> implementation
>>>    become hypervisor agnostic. Such kind of code should be moved to other
>>>    place. Or we just keep code from virtio_blk__init_one(...) in virtio
>> block
>>>    implementation, but keep virtio_blk__init(...) in kvmtool specified
>> part
>>>    code.
>>>
>>> However, in the current VIRTIO device creation and data handling process,
>>> the device type and hypervisor API used are both exclusive to kvmtool
>> and
>>> KVM. If we want to use current VIRTIO implementation for other device
>>> models and hypervisors, it is unlikely to work properly.
>>>
>>> So, the major work of reworking interface is decoupling VIRTIO
>> implementation
>>> from kvmtool and KVM.
>>>
>>> **Introduce some intermediate data structures to do decouple:**
>>> 1. Introduce intermedidate type data structures like `virtio_disk_type`,
>>>     `virtio_net_type`, `virtio_console_type` and etc. These data
>> structures
>>>     will be the standard device type interfaces between virtio device
>>>     implementation and hypervisor.  Using virtio_disk_type as an example:
>>>      ~~~~
>>>      struct virtio_disk_type {
>>>          /*
>>>           * Essential configuration for virtio block device can be got
>> from
>>>           * kvmtool disk_image. Other hypervisor device model also can
>> use
>>>           * this data structure to pass necessary parameters for creating
>>>           * a virtio block device.
>>>           */
>>>          struct virtio_blk_cfg vblk_cfg;
>>>          /*
>>>           * Virtio block device MMIO address and IRQ line. These two
>> members
>>>           * are optional. If hypervisor provides allocate_mmio_space and
>>>           * allocate_irq_line capability and device model doesn't set
>> these
>>>           * two fields, virtio block implementation will use hypervisor
>> APIs
>>>           * to allocate MMIO address and IRQ line. If these two fields
>> are
>>>           * configured, virtio block implementation will use them.
>>>           */
>>>          paddr_t addr;
>>>          uint32_t irq;
>>>          /*
>>>           * In kvmtool, this ops will connect to disk_image APIs. Other
>>>           * hypervisor device model should provide similar APIs for this
>>>           * ops to interact with real backend device.
>>>           */
>>>          struct disk_type_ops {
>>>              .read
>>>              .write
>>>              .flush
>>>              .wait
>>>              ...
>>>          } ops;
>>>      };
>>>      ~~~~
>>>
>>> 2. Introduce a intermediate hypervisor data structure. This data
>> structure
>>>     provides a set of standard hypervisor API interfaces. In virtio
>>>     implementation, the KVM specified APIs, like kvm_register_mmio, will
>> not
>>>     be invoked directly. The virtio implementation will use these
>> interfaces
>>>     to access hypervisor specified APIs. for example `struct vmm_impl`:
>>>      ~~~~
>>>      struct vmm_impl {
>>>          /*
>>>           * Pointer that link to real hypervisor handle like `struct kvm
>> *kvm`.
>>>           * This pointer will be passed to the vmm ops;
>>>           */
>>>          void *vmm;
>>>          allocate_irq_line_fn_t(void* vmm, ...);
>>>          allocate_mmio_space_fn_t(void* vmm, ...);
>>>          register_mmio_fn_t(void* vmm, ...);
>>>          map_guest_page_fn_t(void* vmm, ...);
>>>          unmap_guest_page_fn_t(void* vmm, ...);
>>>          virtual_irq_inject_fn_t(void* vmm, ...);
>>>      };
>>>      ~~~~
>> Are the map_guest_page and unmap_guest_page functions already called at
>> the appropriate places for KVM?
> As I had mentioned in above, KVM doesn't need map_guest_page and unmap_guest_page
> dynamically while handling the IOREQ. These two interfaces can be pointed to NULL
> or empty functions for KVM.
>
>> If not, the main issue is going to be adding the
>> map_guest_page/unmap_guest_page calls to the virtio device
>> implementations.
>>
> Yes, we can place them to virtio device implementations, and keep NOP
> operation for KVM. Other VMMs can be implemented as the case may be
>
>>> 3. After decoupled with kvmtool, any hypervisor can use standard
>> `vmm_impl`
>>>     and `virtio_xxxx_type` interfaces to invoke standard virtio
>> implementation
>>>     interfaces to create virtio devices.
>>>      ~~~~
>>>      /* Prepare VMM interface */
>>>      struct vmm_impl *vmm = ...;
>>>      vmm->register_mmio_fn_t = kvm__register_mmio;
>>>      /* kvm__map_guset_page is a wrapper guest_flat_to_host */
>>>      vmm->map_guest_page_fn_t = kvm__map_guset_page;
>>>      ...
>>>
>>>      /* Prepare virtio_disk_type */
>>>      struct virtio_disk_type *vdisk_type = ...;
>>>      vdisk_type->vblk_cfg.capacity = disk_image->size / SECTOR_SIZE;
>>>      ...
>>>      vdisk_type->ops->read = disk_image__read;
>>>      vdisk_type->ops->write = disk_image__write;
>>>      ...
>>>
>>>      /* Invoke VIRTIO implementation API to create a virtio block device
>> */
>>>      virtio_blk__init_one(vmm, vdisk_type);
>>>      ~~~~
>>>
>>> VIRTIO block device simple flow before reworking interface:
>>>
>> https://drive.google.com/file/d/1k0Grd4RSuCmhKUPktHj9FRamEYrPCFkX/view?usp
>> =sharing
>>> ![image](https://drive.google.com/uc?export=view&id=1k0Grd4RSuCmhKUPktHj
>> 9FRamEYrPCFkX)
>>> VIRTIO block device simple flow after reworking interface:
>>>
>> https://drive.google.com/file/d/1rMXRvulwlRO39juWf08Wgk3G1NZtG2nL/view?usp
>> =sharing
>>> ![image](https://drive.google.com/uc?export=view&id=1rMXRvulwlRO39juWf08
>> Wgk3G1NZtG2nL)

Could you please provide an access for these documents if possible?


>>>
>>> Thanks,
>>> Wei Chen
>>> IMPORTANT NOTICE: The contents of this email and any attachments are
>> confidential and may also be privileged. If you are not the intended
>> recipient, please notify the sender immediately and do not disclose the
>> contents to any other person, use it for any purpose, or store or copy the
>> information in any medium. Thank you.
> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

-- 
Regards,

Oleksandr Tyshchenko



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:11:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:11:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151191.279438 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jvK-0007k5-5B; Tue, 06 Jul 2021 12:11:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151191.279438; Tue, 06 Jul 2021 12:11:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0jvK-0007jy-1k; Tue, 06 Jul 2021 12:11:34 +0000
Received: by outflank-mailman (input) for mailman id 151191;
 Tue, 06 Jul 2021 12:11:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0jvI-0007js-LE
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:11:32 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b9884cb4-7579-4b53-8e51-48e602732484;
 Tue, 06 Jul 2021 12:11:31 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b9884cb4-7579-4b53-8e51-48e602732484
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625573491;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=DCANa0gc8UdHNUTKdiuBQiuX+ECVDDIIPpJ0WBFk2r8=;
  b=ADnrftkfjlJCB4OIpG9b/o9KGCKdgC2/rXOrx98X+X+c/3lKyGZWj41/
   kvMItDaqJ57/OFbtGJId5F+wSal1OEws28UL5DkwNbs1+cSLbGzb9qHik
   o1B1ZK/QsThyiyQzN5WYTfn1h9Cr4egx/9xVq6ccnLz4PLJuZs9JwucVb
   E=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: QjbwwAvqVuDUONltbiJldJUWNK/IppM8xqofl5bJB4IWiWVel4B1yymIrRep6Y+hWy1RHPwmBR
 IkFxdLrli0tCoMwBoR3G+VQeg4fy5a9iMzGMadBhqr6Xca9RuqukkHeqbiCGacvU2EqpXT4zR8
 v68QlL2KJL8OdwRPDcIKbGuROV24i0M0GabgbreIzD8DnvPk/5GrBrgIPmo97Jiupk1iwqlluz
 EPjv31dOrBkbPKtEW53ijSsNYMJiDRUFMQvS8dUYvTroFaJaUP/h5Dy6k5+MAa0k4BtEM76TI3
 P6I=
X-SBRS: 5.1
X-MesageID: 49265181
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:I5j/KK9Z9jKImP+Tzl1uk+E2db1zdoMgy1knxilNoENuHPBwxv
 rAoB1E73PJYVYqOE3Jmbi7Sc69qADnhOBICO4qTMiftWjdyReVxeRZjLcKrAeQYBEWmtQtrJ
 uINpIOdeEYbmIK/voSgjPIa+rIqePvmMvD6Ja8vhUdOD2CKZsQiTuRYjzrYnGeLzM2YKbReq
 Dsgvav6wDQA0j+Oa+Adwg4tqX41pL2vaOjRSRDKw8s6QGIgz/twLnmEyKA1hNbdz9U278t/U
 XMjgS8v8yYwrCG4y6Z81WWw4VdmdPnxNcGLMuQivINIjGprgqzfoxuV5CLoThwiuCy71QBls
 XKvn4bTopOwkKUWlvwjQrm2gHm3jprwWTl00WkjXzqptG8bC4mCuJa7LgpMCfx2g4FhpVRwa
 hL12WWu958FhXbhhnw4NDOSlVDile0m3w/iuQe5kYvErf2UIUh6bD3wXklV6vpREnBmcYa+a
 hVfYHhDc9tABanhyuzhBg3/DTENU5DbCtvQSA5y4aoOnZt7ShEJ+Zx/r1Xop46zuNLd3Bz3Z
 WODk1ZrsA7ciYoV9MKOA4ge7r7NoWfe2OBDIqtSW6XXJ3vfUi98KLK3A==
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="49265181"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dlsCNWd6oP6qOeHk2khyvZmg0dJ+0HWF2N2nRqdBgJ2pvNaHbTV4pr8BxJFvNc02AdbHRQ7xZL2jjECNPg9hQeAqknBUejvbI9W+Tcl2ll6MPj8cQWaSVycfB/P56+rCPn+ziSwarHk7Y+ZrzvhkTrrAPJzz465lQPbxso/z7f5KSOX/+HgyR0GrcHdl/g+4+CFqPtSZ/tk7B8zKoDEg0irJN9Lae3HZ+RTeCYIFAD4YpfjYLAxqTkCS8s0gpBj5oyY/nF9V44YDgwJ0NYKK2WZpB4cBlbqxv84xer2P/epPrmI9dih0fThzTIeGV0xZI04Wx691kNaMB4Tj/tHY3w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lwTRiBSMJWJECrC2T4SZGbL6SloV1G9IFCn5dmMubgc=;
 b=c5sSzS75AcoaW69BqGYqLzdqNuVZF7I+/Dju/tfB3kBQ0QzEUBWCgWOXxTEmf+w7mvWo6A7Y6/i8xf4Ux47XCkLfrgeZnRflDWWuhQTycFy0FrDePvtDwGaJJIWIZ9cqG9yNZARY1kPMuUVqOEh8QQLi42L6bgSjtYmqc3MZEdnUqK8Zbl5tqUFOmuEut45WZjXzlsK4R+XSuxcAz5/2J2TEj4mEGrEBs70Gb6+uuWC0qBs27e+ID2iKrrOKA4KAokU3nKC7y/96hOHhJGZklVl0afZbNWy3tqmeNsb8pvNXdi/KS/WhrvHmejItsEwTNeI78mj91yaFUjjVKzZAxg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lwTRiBSMJWJECrC2T4SZGbL6SloV1G9IFCn5dmMubgc=;
 b=rNUueozCKN6LlghhvGHI0hwsYOysMDBnr/Sd6Ns6Lz6n1bEVnk+gRJQUhuEVNYLSRGaLzpBVaZARFChqkjwFV8FbDEB6z09P/R1dYFQw+tLXU10HaojWsrH36F3Cd7pqyqYB+lszJ6i3qGp7zVGSUzjFa0LbVNZYFjLw5gJ+L5s=
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
To: Olaf Hering <olaf@aepfle.de>, Michal Orzel <michal.orzel@arm.com>
CC: <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Wei Liu
	<wl@xen.org>, Tamas K Lengyel <tamas@tklengyel.com>, Alexandru Isaila
	<aisaila@bitdefender.com>, Petre Pircalabu <ppircalabu@bitdefender.com>,
	<bertrand.marquis@arm.com>
References: <20210705063952.25629-1-michal.orzel@arm.com>
 <20210706140010.4b8802d9.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <dcfc77be-1f14-141d-7152-8cebe7563dc6@citrix.com>
Date: Tue, 6 Jul 2021 13:11:17 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706140010.4b8802d9.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0093.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:76::33) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 04070dfd-9619-4b2c-51e4-08d940772cdf
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5423:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB54237871DB324C884222D018BA1B9@SJ0PR03MB5423.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:489;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: sHE+W7s89i6VxrJuAIpy6xMFcmps9v8jsjzW4ubIaDhR5CxZBarZvx6f32ktxEmTl9UiPaKJnRJEJuQW2o1oYJPYn/79lqqdFMAp1y2EYG9FR4UEVlEzQc3UgrSk3pGKqieKUrkcLieltMBV9hZsiYezwo6xpocZBN7B1SWlanwV6mVVx8AHZ5KIWgl51kwtFZWcFp09jrlYcqHYVGIB1chCyVJbbDLXHYz8rhjX0VS5/8+bZBylpNjcKArqlAQ06j8I5uPNVYEnyUI/Jz9X/FnDnR6brWkc9q8n+gFiYsT0/8BCV4ayjGyZfjJyasdexxdbZmgmDt0sTrvTF3GopaXK2nL9Ic15t/lhlenU5Z2XiJSMfl9nvFf7w1InhbgHkXgUDBvaFqqQkvKUD7NtMyOrFz46EeFaB25xUtCLwEdUaTEq7tUmKYBdWPqQTwBapo/KXnomMxRlNdKL4lISUzmc3yyubc+Cll+aAtdQN/QZGpOJfzT0QkpGKc9/z3SgmwTB9Y+uAjjRBRGrEkFY1rni/K53OWUspBhd4raEpwugQzgP01oOT47v0DmVgWeBMmE5rsZukLT/CpSTKrSi5G5EyCCDpp9AmrAo9dwbdr/I/5CGFG57H5qGPLYra4mKaSBJAKXJ5MFKGRE349L5zuC8n8PrwL2rBHC9xoAEuhwfT56IKMUdSeMRSC8emRBbbcelWIdXRVejv1Vv+miwFakO1PvRdLf/BIEjfozyX+A=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(396003)(39860400002)(346002)(136003)(366004)(8936002)(86362001)(2616005)(478600001)(186003)(4326008)(31686004)(6666004)(6486002)(31696002)(8676002)(956004)(38100700002)(66476007)(5660300002)(7416002)(54906003)(110136005)(26005)(2906002)(66946007)(316002)(53546011)(16576012)(36756003)(66556008)(83380400001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?TvkwKJq+3HyAe16r5hz9bYvO+HGEMfxRsatdA2Qf0y5O6pBghPckIng1?=
 =?Windows-1252?Q?7j6zoygSpFmUObIAJm8nsE0R7mAm3OnKECzspurH9R+Ki2QccD5UyZPR?=
 =?Windows-1252?Q?n+Wa8bHreFL8eWG/8X/tgWp3emmv6EUw0F+FPqVe9nhF2WXsM7e+DIOH?=
 =?Windows-1252?Q?wq60+cwgMg8JWbvTanU1uSFHdA3E2BVBSHBdc1IkphMVpWerFDjlclRf?=
 =?Windows-1252?Q?umg8WLMY4fvHp87tL+o3rD/HGRQ3x4Oe01tclBiRHw8Oxse/C5HEUMrV?=
 =?Windows-1252?Q?YZq4BpDNoMzPwxS3RFbW1XhHKHAMuzhjyDxp2d9qvgupfFdz/RlfHaVm?=
 =?Windows-1252?Q?Qe5JGI6A+jSjH5GkbVCHRtzy6TX9XqHiqDKveigUic6n6J9RoyCqkPtB?=
 =?Windows-1252?Q?o5FwmoTXUx5D/r+jMVqgL7JINbslwHBjx3g+7NlrFaJsUbJNKR63jmdU?=
 =?Windows-1252?Q?U5DSyoGL40LB9VG3R40ELnn4x68Xy+e1ZL9+UorIJoXeBy4Xb8cvOvzp?=
 =?Windows-1252?Q?oMP3kFTj16gDC1BMPFenpnlakPpSSDjkEZba0MCct7UPcmPEHzYKjHMK?=
 =?Windows-1252?Q?MbCAMYYn028n03MCC4VtDQeJZ90eM5bcOsbz9bS2pl5gkrRGYf2HA4TR?=
 =?Windows-1252?Q?rWOTk6xappweF40XDpswqTs5XLrSug/R2jzzB0bFnpK9dH+xTfIYCOhE?=
 =?Windows-1252?Q?6Bf+JEUqK3aWXi9/syvyiErr2S3o9KiaXKnsuAGon6v9TDjlePJfdsN3?=
 =?Windows-1252?Q?0faamtn+h0h2PsfpiZI6Fp/8ASHs4WN/q8QYMhptTUdtEJAfaOgu7ZAq?=
 =?Windows-1252?Q?VGeIZBU5mzQJN1DDzP13+ppIYR/Hmu7YxQY9Lvy6thFnrt0TdziP4Mzv?=
 =?Windows-1252?Q?RMe8UVP+hbPnmxeeXAqWnZSIGvcrxt/gx+wwcHYMuot0sWn3UnIeG+Si?=
 =?Windows-1252?Q?umZ026Uxbfn92DGVXQflqujGRBDDuA9oinFTMBektJ2M4oE93lO1V7F/?=
 =?Windows-1252?Q?Beua3U1Xfjgpp5Y1TuZCb0yg7LJr7d9fdBU80Nrd2nNWfANbQ9sGt7LV?=
 =?Windows-1252?Q?DHADF3jo2tQYTvHZJb/VGhJebIBlpCJFCDXZMw0yDlOA4bhUjYQ+Tv6S?=
 =?Windows-1252?Q?kktp19bec3vDJT98c0YQth7M88+3KiHZ/s7EON552+/nrYz138A6uuCN?=
 =?Windows-1252?Q?X2lJZf6t/k/04ee5+ex7H6e2gEh6MB65HNugyqtYcTqIU0Qzr844mhSr?=
 =?Windows-1252?Q?bxBhdmSqZi5UDaS48EwbdJwJRyuedOAkNjm9R0nMpB1XSe/juKWp7rKC?=
 =?Windows-1252?Q?EPpY6TTRyEr4T1fZNR//Z2SWP5w4pXBiC+3Kmg/imKd2wlnsjs1h9d6i?=
 =?Windows-1252?Q?F24MJeHdrftJ4bDvOsirw61ILsRkL4x6G1NgqsQ1wO/I2JWy4wS9jdvY?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 04070dfd-9619-4b2c-51e4-08d940772cdf
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 12:11:24.8914
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: gr5JI9IgonApQBFoR1b+6k0idUawdWkWHVQKI1MB3EDa/BOtBnOhwEkDvDNkyblpVy7ti+rGa9bKezxo2eZ73StJ3M0myfIhZaK3U6LcUR0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5423
X-OriginatorOrg: citrix.com

On 06/07/2021 13:00, Olaf Hering wrote:
> Am Mon,  5 Jul 2021 08:39:52 +0200
> schrieb Michal Orzel <michal.orzel@arm.com>:
>
>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
> I think this is now commit 918b8842a852e0e7446286f546724b1c63c56c66, which fails to build:
>
> ...
> diff -u reference.size tmp.size
> --- reference.size      2021-06-29 10:50:32.237518309 +0200
> +++ tmp.size    2021-07-06 13:58:19.052592351 +0200
> @@ -4,8 +4,8 @@
>  start_info                |       -       -    1112    1168
>  trap_info                 |       -       -       8      16
>  cpu_user_regs             |       -       -      68     200
> -vcpu_guest_core_regs      |     304     304       -       -
> -vcpu_guest_context        |     344     344    2800    5168
> +vcpu_guest_core_regs      |     312     312       -       -
> +vcpu_guest_context        |     352     352    2800    5168
>  arch_vcpu_info            |       0       0      24      16
>  vcpu_time_info            |      32      32      32      32
>  vcpu_info                 |      48      48      64      64
> gmake[2]: *** [Makefile:24: check-headers] Error 1
>
> osstest may catch this error as well.

I've just reported the same on IRC too. Gitlab is currently a wall of
red from 07d6dd51a5c508cc0f3c93a876f8b4e3102ecf60 so won't usefully
highlight this, but OSSTest ought to notice in due course.

Of course, there's copious quantities of information about what this
check is actually trying to do, and why it's present...

~Andrew


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:20:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:20:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151199.279449 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0k3u-0000km-3e; Tue, 06 Jul 2021 12:20:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151199.279449; Tue, 06 Jul 2021 12:20:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0k3t-0000kf-WC; Tue, 06 Jul 2021 12:20:25 +0000
Received: by outflank-mailman (input) for mailman id 151199;
 Tue, 06 Jul 2021 12:20:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0k3s-0000kZ-AE
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:20:24 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 89082c22-de54-11eb-8492-12813bfff9fa;
 Tue, 06 Jul 2021 12:20:23 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx66CKFRYC
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 14:20:15 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 89082c22-de54-11eb-8492-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625574016;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=0+owGwuanH3lMx5WvCbyvFUVHkXcVOCqOdO7Ui5n7qg=;
    b=Wx3DaDSxP+YzxPfxsQhLBQkmVdbbGoB84vUWyG6nc3TO8cm5dClIri9uvjw63lWl2S
    8CHzIfjOd9I65C8zYKVMrQ5Bf4bByCuu2jQtN8LIkeMOw5TRr/ffn6OxSNuGBdoaREGz
    Li9P51C0hCfDTvBex97T2AZnpHJkM8ENo2pTQOTV3c6TqxLX944Fh3VsdwIKVqy5NLQQ
    lYccRUtTstUDbpvKsIbBTErkxNYltd5ypa57FfE9VkSg2hx0ifZ9vSSB/3yQc5XsVCTd
    c2d0soXk3emTkSLTpS6pxY1oLc+S6ISvUDqUWafSmhZS1FVtIiErOlTk0Emut/Xyrmqq
    F8EQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 14:20:10 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
 <jgross@suse.com>, Jan Beulich <JBeulich@suse.com>
Subject: Re: [PATCH 1/2] tools/migration: Fix iovec handling in
 send_checkpoint_dirty_pfn_list()
Message-ID: <20210706142010.3555a487.olaf@aepfle.de>
In-Reply-To: <20210706112332.31753-2-andrew.cooper3@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
	<20210706112332.31753-2-andrew.cooper3@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/3=BS9uBOY8tvc7PqgE_xM6E";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/3=BS9uBOY8tvc7PqgE_xM6E
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Tue, 6 Jul 2021 12:23:31 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> We shouldn't be using two struct iovec's to write half of 'rec' each, and
> there is no need to malloc() for two struct iovec's at all.
>=20
> Simplify down to just two - one covering the whole of 'rec', and one cove=
ring
> the pfns array.

Acked-by: Olaf Hering <olaf@aepfle.de>


Olaf

--Sig_/3=BS9uBOY8tvc7PqgE_xM6E
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDkSnoACgkQ86SN7mm1
DoAHZRAAjfqSTntZ7FOI6Ns5VJN8Ozga/YOMGAzHiUH6aubH3A3iK88Q318ju2qA
ldiL/VZFVzPZ0exWT7SK/MBihZy/R4uIawFKuo+gIAoUPTX0ysX7fJKV1h1YhyS+
5euaxhXziVRUoCpyGrCQ8u4y5/2mZgxznswTbOqRwRk7cVP6Gd5gyZP46iksSO/C
hj6RPzpcmlku/wH7XrepmOv01FdxoDaMbFhJlETDS7xhAQQBqZYZze0e/gIkZlXU
8L1h4a17NP+NtRSy8UV9vjFGr4UGSvViG8KKLDuqj+2IOBRcPTYn9b2l7ERC1zGN
12iwkRRXEwzLtXO/9spqWUKtFnHSLUlnsqQCtqy3/hw6xWZ0z+n5WHswJijzhf04
ZHp2zFqGmHykd7qyXbNrE5bSBFRhdfsrwHFvLAP36LU5aiSn0eiORPe0JQnI6rQe
BfmjalbYIQ538rNY7yjrWfwsN/bm/U2X1gJRKlSSIKmWFrgFmDQaODLIBzTtuF1O
ls/YN0WNA2nwB5r5EtXOIwfzSbin20KAfozxidxAlbKUd0ZSZHCF3pVbxuLTRtEC
QvcKNwBmn3a7T1XZtYzr3eXC/eQfXUnqd4TmprZUD9IFw/0I3QJBmlv3W0odKM6g
WgFIkYLf98EgnyFMswiUggxuY4qWQ4p9ndb6M9F9cQJJEy2/YUM=
=dCSv
-----END PGP SIGNATURE-----

--Sig_/3=BS9uBOY8tvc7PqgE_xM6E--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:27:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:27:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151205.279460 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kB5-0001T6-Rx; Tue, 06 Jul 2021 12:27:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151205.279460; Tue, 06 Jul 2021 12:27:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kB5-0001Sz-Oq; Tue, 06 Jul 2021 12:27:51 +0000
Received: by outflank-mailman (input) for mailman id 151205;
 Tue, 06 Jul 2021 12:27:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uJ8l=L6=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m0kB3-0001St-Nq
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:27:49 +0000
Received: from mail-lf1-x12b.google.com (unknown [2a00:1450:4864:20::12b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0f8e4765-252f-435d-bc8c-aa472fdada83;
 Tue, 06 Jul 2021 12:27:48 +0000 (UTC)
Received: by mail-lf1-x12b.google.com with SMTP id q18so37965722lfc.7
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 05:27:48 -0700 (PDT)
Received: from [192.168.1.7] ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id e22sm802296ljb.61.2021.07.06.05.27.46
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 06 Jul 2021 05:27:47 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0f8e4765-252f-435d-bc8c-aa472fdada83
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:from:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-transfer-encoding:content-language;
        bh=u8cdZs1n2eju+an6IJ3Xbw/pZsVr76Ngc8Hf5ehaKsg=;
        b=smBU5skCFKSVjHnHm7fiFcnEtKYg7pIetICwIe/DfEvsq8N/r7ffbbzTroIUUWyk1i
         aCQoyTZHsaJtieLTvR3ggiJQZvYoHZlUzCEOp0uYSCPgDJCWd+A16OOTRSLdzvxNMePz
         gJCPNHATGIxXzHN6e7nu+5lf3e8LzJMHifjgHMxn7fOaHbYkDxJMTU72FO1XqWZ6lIpW
         aMKIA2qVk6NKB2W1t7ODhrMZH6yGYgPbLT7cyJDGJxbMTt1rVhJrjeWFPo18dr0jK0wS
         sHnhxdBY2PukSIbXGQZJmmLYWSRLbYdrA8ph92RsiYw0xEd96pU8m7zw3e7yWtC0C6Qu
         RXjw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:from:to:cc:references:message-id:date
         :user-agent:mime-version:in-reply-to:content-transfer-encoding
         :content-language;
        bh=u8cdZs1n2eju+an6IJ3Xbw/pZsVr76Ngc8Hf5ehaKsg=;
        b=X87PJVmNad1/hni/PxHiOZVfoKIBJHoWnjA1ly+RKSjUeb7lkOyCsHc8u30I5M9mv2
         nysfQJH0HtvQWsiGbvf75EbLNUkc/JSjhuqwb6TT9+fyNsw+TiOEa5n75dNF00diPi8Y
         KQlTvuaNM/UG1223D4dCfRSkjtm6EX5gnF+Vb4Pvz+BRfbiWt2x3mdMpB26VFENUYtD+
         BOTcNX9C9nCP8f3TWZ5VpVNgFUplnqozYIKvuTFFEdL997LjXA5iax0EVLRhy7/0vfl9
         IwQ37QKh5XbHEYIT9ioJ9V3kHsNXDcJqRVzcBMDolszL+8qiUAlH3Oqnx+yvzvWGXi9s
         WQKw==
X-Gm-Message-State: AOAM532mIYKtAl7l53m+x19T6uDu5Wk6PawkMXlAKOsaGKnt7Wal9wQZ
	BZqwTYevIsoZDyGKxC2Kqtg=
X-Google-Smtp-Source: ABdhPJzwMdD+8qWzl4WU+/5ySyaCBfS1W8G5IIpXPQzc0U+DI4pyGZ25P5n5ftNB+0ODep0rmTYGBQ==
X-Received: by 2002:a05:6512:3b8c:: with SMTP id g12mr14685284lfv.551.1625574467534;
        Tue, 06 Jul 2021 05:27:47 -0700 (PDT)
Subject: Re: [RESEND PATCH V5 0/2] Virtio support for toolstack on Arm (Was
 "IOREQ feature (+ virtio-mmio) on Arm")
From: Oleksandr <olekstysh@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Anthony PERARD <anthony.perard@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Artem Mygaiev <joculator@gmail.com>,
 =?UTF-8?Q?Alex_Benn=c3=a9e?= <alex.bennee@linaro.org>
References: <1621626361-29076-1-git-send-email-olekstysh@gmail.com>
Message-ID: <0b2c79f9-67d4-219d-2edf-3576a8684c58@gmail.com>
Date: Tue, 6 Jul 2021 15:27:46 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <1621626361-29076-1-git-send-email-olekstysh@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Language: en-US


Hello all,


Gentle reminder...


On 21.05.21 22:45, Oleksandr Tyshchenko wrote:
> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>
> Hello all.
>
> The purpose of this patch series is to add missing virtio-mmio bits to Xen toolstack on Arm.
> The Virtio support for toolstack [1] was postponed as the main target was to upstream IOREQ/DM
> support on Arm in the first place. Now, we already have IOREQ support in, so we can resume Virtio
> enabling work. You can find previous discussion at [2].
>
> Patch series [3] was reworked and rebased on recent "staging branch"
> (972ba1d x86/shadow: streamline shadow_get_page_from_l1e()) and tested on
> Renesas Salvator-X board + H3 ES3.0 SoC (Arm64) with "updated" virtio-mmio disk backend [4]
> running in Driver domain and unmodified Linux Guest running on existing
> virtio-blk driver (frontend). No issues were observed. Guest domain 'reboot/destroy'
> use-cases work properly.
>
> Any feedback/help would be highly appreciated.
>
> [1]
> https://lore.kernel.org/xen-devel/1610488352-18494-24-git-send-email-olekstysh@gmail.com/
> https://lore.kernel.org/xen-devel/1610488352-18494-25-git-send-email-olekstysh@gmail.com/
> [2]
> https://lists.xenproject.org/archives/html/xen-devel/2021-01/msg02403.html
> https://lists.xenproject.org/archives/html/xen-devel/2021-01/msg02536.html
> [3] https://github.com/otyshchenko1/xen/commits/libxl_virtio
> [4] https://github.com/xen-troops/virtio-disk/commits/ioreq_ml3
>
> Julien Grall (1):
>    libxl: Introduce basic virtio-mmio support on Arm
>
> Oleksandr Tyshchenko (1):
>    libxl: Add support for Virtio disk configuration
>
>   docs/man/xl-disk-configuration.5.pod.in   |  27 +
>   tools/include/libxl.h                     |   6 +
>   tools/libs/light/libxl_arm.c              | 133 ++++-
>   tools/libs/light/libxl_device.c           |  38 +-
>   tools/libs/light/libxl_disk.c             |  99 +++-
>   tools/libs/light/libxl_types.idl          |   4 +
>   tools/libs/light/libxl_types_internal.idl |   1 +
>   tools/libs/light/libxl_utils.c            |   2 +
>   tools/libs/util/libxlu_disk_l.c           | 881 +++++++++++++++---------------
>   tools/libs/util/libxlu_disk_l.h           |   2 +-
>   tools/libs/util/libxlu_disk_l.l           |   1 +
>   tools/xl/xl_block.c                       |  11 +
>   xen/include/public/arch-arm.h             |   7 +
>   13 files changed, 764 insertions(+), 448 deletions(-)
>
-- 
Regards,

Oleksandr Tyshchenko



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:30:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:30:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151211.279471 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kDR-0002n4-8h; Tue, 06 Jul 2021 12:30:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151211.279471; Tue, 06 Jul 2021 12:30:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kDR-0002mw-5J; Tue, 06 Jul 2021 12:30:17 +0000
Received: by outflank-mailman (input) for mailman id 151211;
 Tue, 06 Jul 2021 12:30:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hbbY=L6=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m0kDQ-0002mq-GA
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:30:16 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id bb6c7b94-a075-4f35-b2d7-ba54a00b66f1;
 Tue, 06 Jul 2021 12:30:14 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 698351FB;
 Tue,  6 Jul 2021 05:30:14 -0700 (PDT)
Received: from [10.57.8.167] (unknown [10.57.8.167])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1C9D83F73B;
 Tue,  6 Jul 2021 05:30:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bb6c7b94-a075-4f35-b2d7-ba54a00b66f1
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
To: Olaf Hering <olaf@aepfle.de>
Cc: xen-devel@lists.xenproject.org,
 Stefano Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com
References: <20210705063952.25629-1-michal.orzel@arm.com>
 <20210706140010.4b8802d9.olaf@aepfle.de>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <5d4ebedb-ebba-f586-f377-32467213369b@arm.com>
Date: Tue, 6 Jul 2021 14:30:07 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210706140010.4b8802d9.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi,

On 06.07.2021 14:00, Olaf Hering wrote:
> Am Mon,  5 Jul 2021 08:39:52 +0200
> schrieb Michal Orzel <michal.orzel@arm.com>:
> 
>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
> 
> I think this is now commit 918b8842a852e0e7446286f546724b1c63c56c66, which fails to build:
> 
> ...
> diff -u reference.size tmp.size
> --- reference.size      2021-06-29 10:50:32.237518309 +0200
> +++ tmp.size    2021-07-06 13:58:19.052592351 +0200
> @@ -4,8 +4,8 @@
>  start_info                |       -       -    1112    1168
>  trap_info                 |       -       -       8      16
>  cpu_user_regs             |       -       -      68     200
> -vcpu_guest_core_regs      |     304     304       -       -
> -vcpu_guest_context        |     344     344    2800    5168
> +vcpu_guest_core_regs      |     312     312       -       -
> +vcpu_guest_context        |     352     352    2800    5168
>  arch_vcpu_info            |       0       0      24      16
>  vcpu_time_info            |      32      32      32      32
>  vcpu_info                 |      48      48      64      64
> gmake[2]: *** [Makefile:24: check-headers] Error 1
> 
> osstest may catch this error as well.
> 
> Olaf
> 

Where does this report come from so that I can investigate it?
Locally I can build this patch on arm64,arm32,x86 without any issues.

Cheers,
Michal


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:31:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:31:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151217.279481 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kEo-0003PE-Jz; Tue, 06 Jul 2021 12:31:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151217.279481; Tue, 06 Jul 2021 12:31:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kEo-0003P7-Gm; Tue, 06 Jul 2021 12:31:42 +0000
Received: by outflank-mailman (input) for mailman id 151217;
 Tue, 06 Jul 2021 12:31:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0kEn-0003Oz-RY
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:31:41 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0kEh-0000fl-Iu; Tue, 06 Jul 2021 12:31:35 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0kEh-0006Sm-Bk; Tue, 06 Jul 2021 12:31:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=IC733MwopdlLdAIvN9suHiWX4yh27vRvQRZgZQ+e8Ak=; b=g4DtXmS6D5CvZHNxIZcA0A9sOQ
	TkvK121Va0tsJ1noTNovpXqAPkr7u++PR96AM1OFjooJptFOvpDJhno7fJHvac90EbzDmvpkkywhe
	JBjZIC3+15laGeG4Mk1yFxQtrG0y3nnihoobbmjq89/s2UTmg3n4Nwzkrq7n2RGiPGZ0=;
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
To: Michal Orzel <michal.orzel@arm.com>, Olaf Hering <olaf@aepfle.de>
Cc: xen-devel@lists.xenproject.org,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com
References: <20210705063952.25629-1-michal.orzel@arm.com>
 <20210706140010.4b8802d9.olaf@aepfle.de>
 <5d4ebedb-ebba-f586-f377-32467213369b@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <10e11e44-b643-b214-57d6-db4499e19da7@xen.org>
Date: Tue, 6 Jul 2021 13:31:32 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <5d4ebedb-ebba-f586-f377-32467213369b@arm.com>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 06/07/2021 13:30, Michal Orzel wrote:
> Hi,
> 
> On 06.07.2021 14:00, Olaf Hering wrote:
>> Am Mon,  5 Jul 2021 08:39:52 +0200
>> schrieb Michal Orzel <michal.orzel@arm.com>:
>>
>>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
>>
>> I think this is now commit 918b8842a852e0e7446286f546724b1c63c56c66, which fails to build:
>>
>> ...
>> diff -u reference.size tmp.size
>> --- reference.size      2021-06-29 10:50:32.237518309 +0200
>> +++ tmp.size    2021-07-06 13:58:19.052592351 +0200
>> @@ -4,8 +4,8 @@
>>   start_info                |       -       -    1112    1168
>>   trap_info                 |       -       -       8      16
>>   cpu_user_regs             |       -       -      68     200
>> -vcpu_guest_core_regs      |     304     304       -       -
>> -vcpu_guest_context        |     344     344    2800    5168
>> +vcpu_guest_core_regs      |     312     312       -       -
>> +vcpu_guest_context        |     352     352    2800    5168
>>   arch_vcpu_info            |       0       0      24      16
>>   vcpu_time_info            |      32      32      32      32
>>   vcpu_info                 |      48      48      64      64
>> gmake[2]: *** [Makefile:24: check-headers] Error 1
>>
>> osstest may catch this error as well.
>>
>> Olaf
>>
> 
> Where does this report come from so that I can investigate it?
> Locally I can build this patch on arm64,arm32,x86 without any issues.

This is coming from the tools/include/xen-foreign. I could reproduce it 
with a:

make tools

I am currently writing a patch for it. I will send it once I have tested it.

Cheers,

> 
> Cheers,
> Michal
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:37:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:37:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151225.279492 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kK3-000496-E6; Tue, 06 Jul 2021 12:37:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151225.279492; Tue, 06 Jul 2021 12:37:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kK3-00048z-BE; Tue, 06 Jul 2021 12:37:07 +0000
Received: by outflank-mailman (input) for mailman id 151225;
 Tue, 06 Jul 2021 12:37:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=i6NH=L6=tklengyel.com=tamas@srs-us1.protection.inumbo.net>)
 id 1m0kK1-00048t-NU
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:37:05 +0000
Received: from MTA-05-4.privateemail.com (unknown [68.65.122.25])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dddad069-de56-11eb-8494-12813bfff9fa;
 Tue, 06 Jul 2021 12:37:04 +0000 (UTC)
Received: from MTA-05.privateemail.com (localhost [127.0.0.1])
 by MTA-05.privateemail.com (Postfix) with ESMTP id D8AA660103
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:37:03 -0400 (EDT)
Received: from mail-wm1-f42.google.com (unknown [10.20.151.202])
 by MTA-05.privateemail.com (Postfix) with ESMTPA id 9B0D160097
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:37:03 -0400 (EDT)
Received: by mail-wm1-f42.google.com with SMTP id
 u8-20020a7bcb080000b02901e44e9caa2aso2149398wmj.4
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 05:37:03 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dddad069-de56-11eb-8494-12813bfff9fa
X-Gm-Message-State: AOAM531NhlzHS9efv0R2PR/Dlq8j9hT8pxBIIOdQb/SMNNoZfaSoCyXb
	sxP8hBOkMh8Ht/AUt2Affz5Mu5Vo2CWomDwuP9M=
X-Google-Smtp-Source: ABdhPJw3UgtW0PQllgmjCmQVPO7l5A8v/Q/b46IvkQ+6deZkV+ploMA/xjLfLbnYgTVzyQXXPjdFjjIZi6B2LLrDCSw=
X-Received: by 2002:a05:600c:282:: with SMTP id 2mr20063701wmk.77.1625575018325;
 Tue, 06 Jul 2021 05:36:58 -0700 (PDT)
MIME-Version: 1.0
References: <dea13187-04ce-9c1d-aa5c-e2cd0a7d42d9@suse.com> <932211b2-c3aa-17f6-9fed-ca762e189786@suse.com>
In-Reply-To: <932211b2-c3aa-17f6-9fed-ca762e189786@suse.com>
From: Tamas K Lengyel <tamas@tklengyel.com>
Date: Tue, 6 Jul 2021 08:36:22 -0400
X-Gmail-Original-Message-ID: <CABfawhk4N-KznkFhmk3Q749tTp3X+j0fCwDXooYZEDdfQ7Fchw@mail.gmail.com>
Message-ID: <CABfawhk4N-KznkFhmk3Q749tTp3X+j0fCwDXooYZEDdfQ7Fchw@mail.gmail.com>
Subject: Re: [PATCH 1/2] x86/mem-sharing: ensure consistent lock order in get_two_gfns()
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, 
	=?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>
Content-Type: text/plain; charset="UTF-8"
X-Virus-Scanned: ClamAV using ClamSMTP

On Tue, Jun 29, 2021 at 8:54 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> While the comment validly says "Sort by domain, if same domain by gfn",
> the implementation also included equal domain IDs in the first part of
> the check, thus rending the second part entirely dead and leaving
> deadlock potential when there's only a single domain involved.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Tamas K Lengyel <tamas@tklengyel.com>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:40:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:40:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151231.279503 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kN3-0005VF-Tb; Tue, 06 Jul 2021 12:40:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151231.279503; Tue, 06 Jul 2021 12:40:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kN3-0005V8-Qc; Tue, 06 Jul 2021 12:40:13 +0000
Received: by outflank-mailman (input) for mailman id 151231;
 Tue, 06 Jul 2021 12:40:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kN2-0005Uw-H1; Tue, 06 Jul 2021 12:40:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kN2-0000pp-Ch; Tue, 06 Jul 2021 12:40:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kN2-0003o5-4R; Tue, 06 Jul 2021 12:40:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kN2-0001me-3x; Tue, 06 Jul 2021 12:40:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=2Ce8QBZksK6n5mEQymhQbYXxpGvGc0aDlWDxKSep8Vo=; b=4Jb9p2hpzFr1TW4MaBySl+/bUE
	nwOA2Qk9KSgnqPhtq1s38oUyu+JkZ6rJxxYI5+9cydYkyOLP8C5f0fraqLBG7nHw0PyOJwNYt5caa
	pDG1mNtRbmUZ8a4K05t1d6YDH68/NbWxnKRD5DtunZZ61p7s9hUL8WSgcd45bOcQQZBc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163326-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163326: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
X-Osstest-Versions-That:
    xen=44e8904ebfbc57ba0950c40b9d3a28507b553e4e
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 12:40:12 +0000

flight 163326 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163326/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a
baseline version:
 xen                  44e8904ebfbc57ba0950c40b9d3a28507b553e4e

Last test of basis   163314  2021-07-05 15:00:28 Z    0 days
Testing same since   163326  2021-07-06 09:01:40 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Julien Grall <jgrall@amazon.com>
  Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
  Sergiy Kibrik <Sergiy_Kibrik@epam.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   44e8904ebf..4473f36010  4473f3601098a2c3cf5ab89d5a29504772985e3a -> smoke


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:40:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:40:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151235.279518 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kNT-00063X-6Z; Tue, 06 Jul 2021 12:40:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151235.279518; Tue, 06 Jul 2021 12:40:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kNT-00063Q-3C; Tue, 06 Jul 2021 12:40:39 +0000
Received: by outflank-mailman (input) for mailman id 151235;
 Tue, 06 Jul 2021 12:40:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=i6NH=L6=tklengyel.com=tamas@srs-us1.protection.inumbo.net>)
 id 1m0kNR-00063C-Sw
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:40:37 +0000
Received: from MTA-07-3.privateemail.com (unknown [68.65.122.17])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5cecd37e-de57-11eb-8494-12813bfff9fa;
 Tue, 06 Jul 2021 12:40:37 +0000 (UTC)
Received: from MTA-07.privateemail.com (localhost [127.0.0.1])
 by MTA-07.privateemail.com (Postfix) with ESMTP id 5F5D5600A3
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:40:36 -0400 (EDT)
Received: from mail-wr1-f51.google.com (unknown [10.20.151.239])
 by MTA-07.privateemail.com (Postfix) with ESMTPA id 2802C6009C
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:40:36 -0400 (EDT)
Received: by mail-wr1-f51.google.com with SMTP id n9so8571269wrs.13
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 05:40:36 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5cecd37e-de57-11eb-8494-12813bfff9fa
X-Gm-Message-State: AOAM5333bfBk4jCu64A//q6NhagtKeGIOi2y1L+A7eUYrEwSTyaOTIP/
	0WIP2t8xRtUt34H7bEzLFhw2UyT/nEINhzqRhUY=
X-Google-Smtp-Source: ABdhPJwwR1HY4vEZAMHdBSSZ0zD3Y/rZRF+7k2sqI29y2KgvEtuFrJ2tEJDbm3sl4klQBCluUSPIlypzYzuVVPyAHZ8=
X-Received: by 2002:adf:fb92:: with SMTP id a18mr21044642wrr.182.1625575234821;
 Tue, 06 Jul 2021 05:40:34 -0700 (PDT)
MIME-Version: 1.0
References: <dea13187-04ce-9c1d-aa5c-e2cd0a7d42d9@suse.com> <6f4c081d-732d-87c0-2ad9-0aafea1ad927@suse.com>
In-Reply-To: <6f4c081d-732d-87c0-2ad9-0aafea1ad927@suse.com>
From: Tamas K Lengyel <tamas@tklengyel.com>
Date: Tue, 6 Jul 2021 08:39:59 -0400
X-Gmail-Original-Message-ID: <CABfawhmnaN7M_Trj8bofT+Q0hZmZdwv+h5jtfOqq5uDqOcHkjA@mail.gmail.com>
Message-ID: <CABfawhmnaN7M_Trj8bofT+Q0hZmZdwv+h5jtfOqq5uDqOcHkjA@mail.gmail.com>
Subject: Re: [PATCH 2/2] x86/mem-sharing: mov {get,put}_two_gfns()
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, 
	=?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>
Content-Type: text/plain; charset="UTF-8"
X-Virus-Scanned: ClamAV using ClamSMTP

On Tue, Jun 29, 2021 at 8:54 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> There's no reason for every CU including p2m.h to have these two
> functions compiled, when they're both mem-sharing specific right now and
> for the foreseeable future.
>
> Largely just code movement, with some style tweaks, the inline-s
> dropped, and "put" being made consistent with "get" as to their NULL
> checking of the passed in pointer to struct two_gfns.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Tamas K Lengyel <tamas@tklengyel.com>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:40:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:40:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151197.279528 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kNU-0006KO-Fh; Tue, 06 Jul 2021 12:40:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151197.279528; Tue, 06 Jul 2021 12:40:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kNU-0006KF-Cg; Tue, 06 Jul 2021 12:40:40 +0000
Received: by outflank-mailman (input) for mailman id 151197;
 Tue, 06 Jul 2021 12:15:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8YKr=L6=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m0jzF-0008Pe-HS
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:15:37 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id aa6ad303-6013-40da-9797-fc7997594701;
 Tue, 06 Jul 2021 12:15:35 +0000 (UTC)
Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0jyc-0001jk-4o; Tue, 06 Jul 2021 14:14:58 +0200
Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0jyP-0001fC-Gy; Tue, 06 Jul 2021 14:14:45 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aa6ad303-6013-40da-9797-fc7997594701
Date: Tue, 6 Jul 2021 14:14:45 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Cornelia Huck <cohuck@redhat.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, nvdimm@lists.linux.dev,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Jaroslav Kysela <perex@perex.cz>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Paul Mackerras <paulus@samba.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Mike Christie <michael.christie@oracle.com>,
	Wei Liu <wei.liu@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	Michael Ellerman <mpe@ellerman.id.au>, linux-acpi@vger.kernel.org,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Tomas Winkler <tomas.winkler@intel.com>,
	Julien Grall <jgrall@amazon.com>, Ohad Ben-Cohen <ohad@wizery.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alex Elder <elder@kernel.org>, linux-parisc@vger.kernel.org,
	Geoff Levand <geoff@infradead.org>, linux-fpga@vger.kernel.org,
	linux-usb@vger.kernel.org, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org,
	Thorsten Scherer <t.scherer@eckelmann.de>, kernel@pengutronix.de,
	Jon Mason <jdmason@kudzu.us>, linux-ntb@googlegroups.com,
	Wu Hao <hao.wu@intel.com>, David Woodhouse <dwmw@amazon.co.uk>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	linux-wireless@vger.kernel.org,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	virtualization@lists.linux-foundation.org,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	target-devel@vger.kernel.org,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	linux-i2c@vger.kernel.org,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Ira Weiny <ira.weiny@intel.com>, Helge Deller <deller@gmx.de>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	industrypack-devel@lists.sourceforge.net,
	linux-mips@vger.kernel.org, Len Brown <lenb@kernel.org>,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-media@vger.kernel.org, Maxime Ripard <mripard@kernel.org>,
	Johan Hovold <johan@kernel.org>, greybus-dev@lists.linaro.org,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	linux-arm-kernel@lists.infradead.org,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Stephen Boyd <sboyd@kernel.org>, Wolfram Sang <wsa@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Tom Rix <trix@redhat.com>, Jason Wang <jasowang@redhat.com>,
	SeongJae Park <sjpark@amazon.de>, linux-hyperv@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, Frank Li <lznuaa@gmail.com>,
	netdev@vger.kernel.org, Qinglang Miao <miaoqinglang@huawei.com>,
	Jiri Slaby <jirislaby@kernel.org>, Rob Herring <robh@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Mark Gross <mgross@linux.intel.com>, linux-staging@lists.linux.dev,
	Dexuan Cui <decui@microsoft.com>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Chen-Yu Tsai <wens@csie.org>, linux-input@vger.kernel.org,
	Matt Porter <mporter@kernel.crashing.org>,
	Allen Hubbe <allenbh@gmail.com>, Alex Dubov <oakad@yahoo.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Jiri Kosina <jikos@kernel.org>, Vladimir Zapolskiy <vz@mleia.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Moritz Fischer <mdf@kernel.org>, linux-cxl@vger.kernel.org,
	Michael Buesch <m@bues.ch>, Dan Williams <dan.j.williams@intel.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-mmc@vger.kernel.org, linux-sunxi@lists.linux.dev,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	"David S. Miller" <davem@davemloft.net>,
	Sven Van Asbroeck <TheSven73@gmail.com>, kvm@vger.kernel.org,
	"Michael S. Tsirkin" <mst@redhat.com>,
	linux-remoteproc@vger.kernel.org,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	linux-i3c@lists.infradead.org,
	linux1394-devel@lists.sourceforge.net,
	Lee Jones <lee.jones@linaro.org>, Arnd Bergmann <arnd@arndb.de>,
	linux-scsi@vger.kernel.org, Vishal Verma <vishal.l.verma@intel.com>,
	Russell King <linux@armlinux.org.uk>,
	Andy Gross <agross@kernel.org>, linux-serial@vger.kernel.org,
	Jakub Kicinski <kuba@kernel.org>,
	Michael Jamet <michael.jamet@intel.com>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>, Hannes Reinecke <hare@suse.de>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Juergen Gross <jgross@suse.com>, linuxppc-dev@lists.ozlabs.org,
	Takashi Iwai <tiwai@suse.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Vinod Koul <vkoul@kernel.org>, Mark Brown <broonie@kernel.org>,
	Marc Zyngier <maz@kernel.org>, dmaengine@vger.kernel.org,
	Johannes Berg <johannes@sipsolutions.net>,
	Maximilian Luz <luzmaximilian@gmail.com>
Subject: Re: [PATCH] bus: Make remove callback return void
Message-ID: <20210706121445.o3nxgi4bhzrw5w73@pengutronix.de>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
 <87pmvvhfqq.fsf@redhat.com>
 <87mtqzhesu.fsf@redhat.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="qlv3rwmw2vf6tbvn"
Content-Disposition: inline
In-Reply-To: <87mtqzhesu.fsf@redhat.com>
X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org


--qlv3rwmw2vf6tbvn
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 06, 2021 at 01:17:37PM +0200, Cornelia Huck wrote:
> On Tue, Jul 06 2021, Cornelia Huck <cohuck@redhat.com> wrote:
>=20
> > On Tue, Jul 06 2021, Uwe Kleine-K=F6nig <u.kleine-koenig@pengutronix.de=
> wrote:
> >
> >> The driver core ignores the return value of this callback because there
> >> is only little it can do when a device disappears.
> >>
> >> This is the final bit of a long lasting cleanup quest where several
> >> buses were converted to also return void from their remove callback.
> >> Additionally some resource leaks were fixed that were caused by drivers
> >> returning an error code in the expectation that the driver won't go
> >> away.
> >>
> >> With struct bus_type::remove returning void it's prevented that newly
> >> implemented buses return an ignored error code and so don't anticipate
> >> wrong expectations for driver authors.
> >
> > Yay!
> >
> >>
> >> Signed-off-by: Uwe Kleine-K=F6nig <u.kleine-koenig@pengutronix.de>
> >> ---
> >> Hello,
> >>
> >> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remo=
ve
> >> return void" that is not yet applied, see
> >> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengu=
tronix.de.
> >>
> >> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> >> surprised if I still missed to convert a driver. So it would be great =
to
> >> get this into next early after the merge window closes.
> >
> > I'm afraid you missed the s390-specific busses in drivers/s390/cio/
> > (css/ccw/ccwgroup).

:-\

> The change for vfio/mdev looks good.
>=20
> The following should do the trick for s390; not sure if other
> architectures have easy-to-miss busses as well.
>=20
> diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
> index 9748165e08e9..a66f416138ab 100644
> --- a/drivers/s390/cio/ccwgroup.c
> +++ b/drivers/s390/cio/ccwgroup.c
> @@ -439,17 +439,15 @@ module_exit(cleanup_ccwgroup);
> =20
>  /************************** driver stuff ******************************/
> =20
> -static int ccwgroup_remove(struct device *dev)
> +static void ccwgroup_remove(struct device *dev)
>  {
>  	struct ccwgroup_device *gdev =3D to_ccwgroupdev(dev);
>  	struct ccwgroup_driver *gdrv =3D to_ccwgroupdrv(dev->driver);
> =20
>  	if (!dev->driver)
> -		return 0;
> +		return;

This is fine to be squashed into my patch. In the long run: in a remove
callback dev->driver cannot be NULL, so this if could go away.

>  	if (gdrv->remove)
>  		gdrv->remove(gdev);
> -
> -	return 0;
>  }
> =20
>  static void ccwgroup_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
> index a974943c27da..ebc321edba51 100644
> --- a/drivers/s390/cio/css.c
> +++ b/drivers/s390/cio/css.c
> @@ -1371,15 +1371,14 @@ static int css_probe(struct device *dev)
>  	return ret;
>  }
> =20
> -static int css_remove(struct device *dev)
> +static void css_remove(struct device *dev)
>  {
>  	struct subchannel *sch;
> -	int ret;
> =20
>  	sch =3D to_subchannel(dev);
> -	ret =3D sch->driver->remove ? sch->driver->remove(sch) : 0;
> +	if (sch->driver->remove)
> +		sch->driver->remove(sch);

Maybe the return type for this function pointer can be changed to void,
too.

I will add these changes to a v2 that I plan to send out after the dust
settles some more.

Thanks
Uwe

--=20
Pengutronix e.K.                           | Uwe Kleine-K=F6nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

--qlv3rwmw2vf6tbvn
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmDkSTIACgkQwfwUeK3K
7AmpKwf/cEGBSAtr38Z6g8D5Sb7wD6N+VKt79z1eeeFykI81lxaibOS1hxqeDq28
jW5itKeFVh1+cP8UVt8l7VJlvhIUO+xFsMgJ/LrRGoynkDBqMdlbTfQnZ/yOULyX
KI6vecR8mDHh+M0cs+KxsmbHXtKL+WJfAnGYMVFhrq7cayZ2ZnflKlVAFFyN1iWR
ewHXQduLqDi718k76IDgu9PZfUuQbRNLuX69ZAwyVl1F+BpBxMCvnMU2apcdJQ1B
ovWeCbDSh+HLgMrfUAYcVddvRKo81lrMn1i24FK2RuVnrnYdupIRl3L+Y5V4D7Pd
xOqLOUY6yncBK5uZwnZctg9p3aX8wA==
=Zesi
-----END PGP SIGNATURE-----

--qlv3rwmw2vf6tbvn--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:42:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:42:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151249.279540 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kPc-0007OL-Tv; Tue, 06 Jul 2021 12:42:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151249.279540; Tue, 06 Jul 2021 12:42:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kPc-0007OE-Qt; Tue, 06 Jul 2021 12:42:52 +0000
Received: by outflank-mailman (input) for mailman id 151249;
 Tue, 06 Jul 2021 12:42:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=i6NH=L6=tklengyel.com=tamas@srs-us1.protection.inumbo.net>)
 id 1m0kPb-0007O8-RG
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:42:51 +0000
Received: from MTA-12-4.privateemail.com (unknown [198.54.127.107])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id accdedd8-de57-11eb-8494-12813bfff9fa;
 Tue, 06 Jul 2021 12:42:51 +0000 (UTC)
Received: from mta-12.privateemail.com (localhost [127.0.0.1])
 by mta-12.privateemail.com (Postfix) with ESMTP id 7C714800BA
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:42:50 -0400 (EDT)
Received: from mail-wm1-f54.google.com (unknown [10.20.151.205])
 by mta-12.privateemail.com (Postfix) with ESMTPA id 4FFA3800BB
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:42:50 -0400 (EDT)
Received: by mail-wm1-f54.google.com with SMTP id o22so13502781wms.0
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 05:42:50 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: accdedd8-de57-11eb-8494-12813bfff9fa
X-Gm-Message-State: AOAM532UAwiKqOKVE8Bz4G5KmZuAEkhSbnQTRWKOTU/6QHVkQNao7r78
	SxUdagB0liwcMuv+pp4fS4DU9Y25jBuJrt/kDsE=
X-Google-Smtp-Source: ABdhPJwcd+nVyH3zWSNqJguKyrcdz4AB2gFoE0OfCFA9arXSEVhpzAI/ElwWTO81RAHewx/mCAPwr2itPZuCO3TV6bA=
X-Received: by 2002:a7b:c5d8:: with SMTP id n24mr20649649wmk.51.1625575368972;
 Tue, 06 Jul 2021 05:42:48 -0700 (PDT)
MIME-Version: 1.0
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com> <ec21ca25-73bc-ddb7-8674-b7a59adb441c@suse.com>
In-Reply-To: <ec21ca25-73bc-ddb7-8674-b7a59adb441c@suse.com>
From: Tamas K Lengyel <tamas@tklengyel.com>
Date: Tue, 6 Jul 2021 08:42:13 -0400
X-Gmail-Original-Message-ID: <CABfawhmOBk3MmU-B6wV_jXbcFMOaPZEZ4zqcWqJYt3Ot37=mMg@mail.gmail.com>
Message-ID: <CABfawhmOBk3MmU-B6wV_jXbcFMOaPZEZ4zqcWqJYt3Ot37=mMg@mail.gmail.com>
Subject: Re: [PATCH 13/16] shr_pages field is MEM_SHARING-only
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
	=?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, 
	Ian Jackson <iwj@xenproject.org>, Julien Grall <julien@xen.org>, 
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Content-Type: text/plain; charset="UTF-8"
X-Virus-Scanned: ClamAV using ClamSMTP

On Mon, Jul 5, 2021 at 12:13 PM Jan Beulich <jbeulich@suse.com> wrote:
>
> Conditionalize it and its uses accordingly. The main goal though is to
> demonstrate that x86's p2m_teardown() is now empty when !HVM, which in
> particular means the last remaining use of p2m_lock() in this cases goes
> away.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Tamas K Lengyel <tamas@tklengyel.com>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:45:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:45:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151255.279551 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kS5-00080l-B9; Tue, 06 Jul 2021 12:45:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151255.279551; Tue, 06 Jul 2021 12:45:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kS5-00080e-7t; Tue, 06 Jul 2021 12:45:25 +0000
Received: by outflank-mailman (input) for mailman id 151255;
 Tue, 06 Jul 2021 12:45:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=i6NH=L6=tklengyel.com=tamas@srs-us1.protection.inumbo.net>)
 id 1m0kS3-00080Y-NJ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:45:23 +0000
Received: from MTA-08-3.privateemail.com (unknown [198.54.127.61])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ae004168-461a-40ca-8f4b-ed26ef72dcac;
 Tue, 06 Jul 2021 12:45:22 +0000 (UTC)
Received: from MTA-08.privateemail.com (localhost [127.0.0.1])
 by MTA-08.privateemail.com (Postfix) with ESMTP id D1428600F6
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:45:21 -0400 (EDT)
Received: from mail-wr1-f48.google.com (unknown [10.20.151.242])
 by MTA-08.privateemail.com (Postfix) with ESMTPA id 90CF2600D1
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 08:45:21 -0400 (EDT)
Received: by mail-wr1-f48.google.com with SMTP id i8so13042324wrp.12
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 05:45:21 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ae004168-461a-40ca-8f4b-ed26ef72dcac
X-Gm-Message-State: AOAM530+UYD9IN+Mwi5MGa1wLgleIC5m8JKSuv7f9IcwU8p4AV/f1s+f
	5VR+K00mlayFkdT0mXwafwSH59Tyfl2Lia2gi0I=
X-Google-Smtp-Source: ABdhPJyOKXXt3p/yRK5yLnFk92vwnWUj31Fxs44Ob/TQj2lyD8DjzfcRxp33uBU9SU6wBPLg7s4tK0tpSq5z1oao24s=
X-Received: by 2002:a5d:524e:: with SMTP id k14mr21874411wrc.390.1625575516335;
 Tue, 06 Jul 2021 05:45:16 -0700 (PDT)
MIME-Version: 1.0
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com> <ab136038-0242-086c-9e67-02c47e1db3e0@suse.com>
In-Reply-To: <ab136038-0242-086c-9e67-02c47e1db3e0@suse.com>
From: Tamas K Lengyel <tamas@tklengyel.com>
Date: Tue, 6 Jul 2021 08:44:40 -0400
X-Gmail-Original-Message-ID: <CABfawh=uSLV_ccGBY1Qf7otvRs2jEp8yGfZE6QzAuNmQrJHFyg@mail.gmail.com>
Message-ID: <CABfawh=uSLV_ccGBY1Qf7otvRs2jEp8yGfZE6QzAuNmQrJHFyg@mail.gmail.com>
Subject: Re: [PATCH 14/16] paged_pages field is MEM_PAGING-only
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
	=?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, 
	Ian Jackson <iwj@xenproject.org>, Julien Grall <julien@xen.org>, 
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Content-Type: text/plain; charset="UTF-8"
X-Virus-Scanned: ClamAV using ClamSMTP

On Mon, Jul 5, 2021 at 12:14 PM Jan Beulich <jbeulich@suse.com> wrote:
>
> Conditionalize it and its uses accordingly.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

For the mem_sharing bits:
Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

The rest also look fine to me as you can consider having an R-b as
well for those bits.


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:50:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:50:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151262.279562 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kWs-000114-1Q; Tue, 06 Jul 2021 12:50:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151262.279562; Tue, 06 Jul 2021 12:50:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kWr-00010x-Ud; Tue, 06 Jul 2021 12:50:21 +0000
Received: by outflank-mailman (input) for mailman id 151262;
 Tue, 06 Jul 2021 12:50:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hbbY=L6=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m0kWr-00010r-9S
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:50:21 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id debb4e55-8a17-4b30-ba55-e426740b65fe;
 Tue, 06 Jul 2021 12:50:19 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7DA791FB;
 Tue,  6 Jul 2021 05:50:19 -0700 (PDT)
Received: from [10.57.8.167] (unknown [10.57.8.167])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 375303F73B;
 Tue,  6 Jul 2021 05:50:17 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: debb4e55-8a17-4b30-ba55-e426740b65fe
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
To: Julien Grall <julien@xen.org>, Olaf Hering <olaf@aepfle.de>
Cc: xen-devel@lists.xenproject.org,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com
References: <20210705063952.25629-1-michal.orzel@arm.com>
 <20210706140010.4b8802d9.olaf@aepfle.de>
 <5d4ebedb-ebba-f586-f377-32467213369b@arm.com>
 <10e11e44-b643-b214-57d6-db4499e19da7@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <cc4c56cf-4f3a-46d5-ad9c-05596badee70@arm.com>
Date: Tue, 6 Jul 2021 14:50:12 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <10e11e44-b643-b214-57d6-db4499e19da7@xen.org>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 8bit



On 06.07.2021 14:31, Julien Grall wrote:
> 
> 
> On 06/07/2021 13:30, Michal Orzel wrote:
>> Hi,
>>
>> On 06.07.2021 14:00, Olaf Hering wrote:
>>> Am Mon, 5 Jul 2021 08:39:52 +0200
>>> schrieb Michal Orzel <michal.orzel@arm.com>:
>>>
>>>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
>>>
>>> I think this is now commit 918b8842a852e0e7446286f546724b1c63c56c66, which fails to build:
>>>
>>> ...
>>> diff -u reference.size tmp.size
>>> --- reference.size 2021-06-29 10:50:32.237518309 +0200
>>> +++ tmp.size 2021-07-06 13:58:19.052592351 +0200
>>> @@ -4,8 +4,8 @@
>>>  start_info | - - 1112 1168
>>>  trap_info | - - 8 16
>>>  cpu_user_regs | - - 68 200
>>> -vcpu_guest_core_regs | 304 304 - -
>>> -vcpu_guest_context | 344 344 2800 5168
>>> +vcpu_guest_core_regs | 312 312 - -
>>> +vcpu_guest_context | 352 352 2800 5168
>>>  arch_vcpu_info | 0 0 24 16
>>>  vcpu_time_info | 32 32 32 32
>>>  vcpu_info | 48 48 64 64
>>> gmake[2]: *** [Makefile:24: check-headers] Error 1
>>>
>>> osstest may catch this error as well.
>>>
>>> Olaf
>>>
>>
>> Where does this report come from so that I can investigate it?
>> Locally I can build this patch on arm64,arm32,x86 without any issues.
> 
> This is coming from the tools/include/xen-foreign. I could reproduce it with a:
> 
> make tools
> 
> I am currently writing a patch for it. I will send it once I have tested it.
> 
> Cheers,
> 
>>
>> Cheers,
>> Michal
>>
> 

As far as I understand this checker, it is all about the size of these structures.
What is the reason that the size of them cannot change?

Cheers,


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:52:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:52:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151267.279573 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kZN-0001fi-Gn; Tue, 06 Jul 2021 12:52:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151267.279573; Tue, 06 Jul 2021 12:52:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kZN-0001fb-DW; Tue, 06 Jul 2021 12:52:57 +0000
Received: by outflank-mailman (input) for mailman id 151267;
 Tue, 06 Jul 2021 12:52:56 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0kZM-0001fT-S7
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:52:56 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0kZE-00013d-Rc; Tue, 06 Jul 2021 12:52:48 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0kZE-000834-Kk; Tue, 06 Jul 2021 12:52:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=syoiKdCHPrszLVtSYXSTIlDoOThCnhS82hCXeN2ldxo=; b=Kbv4zOOnqPjea5kwblU5/o0CU6
	B9CjMx4vnluEWh4bFi4oE2830HPMtGc4GvGb9I4RX9a0JqJS/T+5qlIVKx3ctUPBLa4Zg5bcCYJId
	ea26y50LYHS4+MJqE07I26ElQGfHbyjHL821ikn/kAbQu66IcN9tMlYHQmZE9Ay7G5aI=;
Subject: Re: [PATCH v4] arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
To: Michal Orzel <michal.orzel@arm.com>, Olaf Hering <olaf@aepfle.de>
Cc: xen-devel@lists.xenproject.org,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>,
 Tamas K Lengyel <tamas@tklengyel.com>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, bertrand.marquis@arm.com
References: <20210705063952.25629-1-michal.orzel@arm.com>
 <20210706140010.4b8802d9.olaf@aepfle.de>
 <5d4ebedb-ebba-f586-f377-32467213369b@arm.com>
 <10e11e44-b643-b214-57d6-db4499e19da7@xen.org>
 <cc4c56cf-4f3a-46d5-ad9c-05596badee70@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <a640cbcc-1fff-57de-ae4b-a782d99e6b42@xen.org>
Date: Tue, 6 Jul 2021 13:52:45 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <cc4c56cf-4f3a-46d5-ad9c-05596badee70@arm.com>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi,

On 06/07/2021 13:50, Michal Orzel wrote:
> 
> 
> On 06.07.2021 14:31, Julien Grall wrote:
>>
>>
>> On 06/07/2021 13:30, Michal Orzel wrote:
>>> Hi,
>>>
>>> On 06.07.2021 14:00, Olaf Hering wrote:
>>>> Am Mon, 5 Jul 2021 08:39:52 +0200
>>>> schrieb Michal Orzel <michal.orzel@arm.com>:
>>>>
>>>>> Modify type of hsr, cpsr, spsr_el1 to uint64_t.
>>>>
>>>> I think this is now commit 918b8842a852e0e7446286f546724b1c63c56c66, which fails to build:
>>>>
>>>> ...
>>>> diff -u reference.size tmp.size
>>>> --- reference.size 2021-06-29 10:50:32.237518309 +0200
>>>> +++ tmp.size 2021-07-06 13:58:19.052592351 +0200
>>>> @@ -4,8 +4,8 @@
>>>>   start_info | - - 1112 1168
>>>>   trap_info | - - 8 16
>>>>   cpu_user_regs | - - 68 200
>>>> -vcpu_guest_core_regs | 304 304 - -
>>>> -vcpu_guest_context | 344 344 2800 5168
>>>> +vcpu_guest_core_regs | 312 312 - -
>>>> +vcpu_guest_context | 352 352 2800 5168
>>>>   arch_vcpu_info | 0 0 24 16
>>>>   vcpu_time_info | 32 32 32 32
>>>>   vcpu_info | 48 48 64 64
>>>> gmake[2]: *** [Makefile:24: check-headers] Error 1
>>>>
>>>> osstest may catch this error as well.
>>>>
>>>> Olaf
>>>>
>>>
>>> Where does this report come from so that I can investigate it?
>>> Locally I can build this patch on arm64,arm32,x86 without any issues.
>>
>> This is coming from the tools/include/xen-foreign. I could reproduce it with a:
>>
>> make tools
>>
>> I am currently writing a patch for it. I will send it once I have tested it.
>>
>> Cheers,
>>
>>>
>>> Cheers,
>>> Michal
>>>
>>
> 
> As far as I understand this checker, it is all about the size of these structures.
> What is the reason that the size of them cannot change?
Those structures are meant to be part of the stable ABI. So you would 
break compatibility if the structure size changed across Xen version.

However, we know that vcpu_guest_core_regs and vcpu_guest_context are 
not part of the stable ABI on Arm. However, the tools doesn't understand 
that...

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 12:58:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 12:58:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151273.279583 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kec-0002L1-4x; Tue, 06 Jul 2021 12:58:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151273.279583; Tue, 06 Jul 2021 12:58:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kec-0002Ku-20; Tue, 06 Jul 2021 12:58:22 +0000
Received: by outflank-mailman (input) for mailman id 151273;
 Tue, 06 Jul 2021 12:58:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0kea-0002Ko-7x
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 12:58:20 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.171])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d5b742f6-de59-11eb-8494-12813bfff9fa;
 Tue, 06 Jul 2021 12:58:19 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx66CwCRlC
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 14:58:12 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d5b742f6-de59-11eb-8494-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625576292;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=y27MN19P+v4IsV7slXfgmGmCq7jpZDxfZi6KGgnJHIs=;
    b=M7FsjiAm87D4SbehzUja6Hc9wrhB7LN4Gn+Kxj3TPGDArVE9J1gtw0DhIPlQ/xtffM
    37DUhB7vtuzw9XM5joQp5+sCW+xwguLgQqxd0lLdcjWZVjoB+WxQPlTgHf0b6JMca8sc
    yNas2IC+AU2SL8kymZegMwsxya8qN2ulcubD1iVauVTPoA9emhmvRlOAzn54Cb75b5vi
    sWirNmcSIjiFP7ikEbf8XQ1aSIOA3Mw3czJ6cjziPqxNNwXVwkURqU/jqRt/owLOG8PH
    yIKCvmIyDADBsNYldpBWLbj4TTxS2dnfMZQSCC7iDRMWSYTswBn5UVWv/4SjCNJlXZSd
    0kQA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 14:58:04 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
 <jgross@suse.com>, Jan Beulich <JBeulich@suse.com>
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
Message-ID: <20210706145804.1ab98f16.olaf@aepfle.de>
In-Reply-To: <20210706112332.31753-3-andrew.cooper3@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
	<20210706112332.31753-3-andrew.cooper3@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/9bXYdQyId9Sn4B4JWXmjPiV";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/9bXYdQyId9Sn4B4JWXmjPiV
Content-Type: multipart/mixed; boundary="MP_/UT++wQs95qNG2mZqpgw9kgp"

--MP_/UT++wQs95qNG2mZqpgw9kgp
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Am Tue, 6 Jul 2021 12:23:32 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> +    count =3D stats.dirty_count;

Is this accurate?

I remember the reporting is broken since a while, and testing a busy domU i=
ndicates it is still the case.

# xen-logdirty `xl domid domU`
0: faults=3D 0 dirty=3D 258050
1: faults=3D 0 dirty=3D 257817
2: faults=3D 0 dirty=3D 253713
3: faults=3D 0 dirty=3D 253197
4: faults=3D 0 dirty=3D 255154
5: faults=3D 0 dirty=3D 260876
6: faults=3D 0 dirty=3D 259083
7: faults=3D 0 dirty=3D 253163
8: faults=3D 0 dirty=3D 258349
9: faults=3D 0 dirty=3D 260330
10: faults=3D 0 dirty=3D 259754
11: faults=3D 0 dirty=3D 257273
12: faults=3D 0 dirty=3D 255756
13: faults=3D 0 dirty=3D 258209
14: faults=3D 0 dirty=3D 257847
15: faults=3D 0 dirty=3D 59639
16: faults=3D 0 dirty=3D 81
17: faults=3D 0 dirty=3D 86
18: faults=3D 0 dirty=3D 111
19: faults=3D 0 dirty=3D 81
20: faults=3D 0 dirty=3D 80
....


Olaf

--MP_/UT++wQs95qNG2mZqpgw9kgp
Content-Type: text/x-c++src
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename=logdirty.c

/* gcc -Wall -o logdirty -O -lxenctrl logdirty.c */
#include <unistd.h>
#include <errno.h>
#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>
#include <xenctrl.h>
#include <signal.h>

#define PAGE_SHIFT              XC_PAGE_SHIFT
#define ROUNDUP(_x,_w) (((unsigned long)(_x)+(1UL<<(_w))-1) & ~((1UL<<(_w))=
-1))
#define NRPAGES(x) (ROUNDUP(x, PAGE_SHIFT) >> PAGE_SHIFT)
#define BITS_PER_LONG (sizeof(unsigned long) * 8)
#define ORDER_LONG (sizeof(unsigned long) =3D=3D 4 ? 5 : 6)


static unsigned int domid =3D 0;
static xc_interface *xch;

static unsigned long xdmg(xc_interface *c, unsigned int d)
{
	unsigned long r;
#if XEN_DOMCTL_INTERFACE_VERSION < 0x0b
	r =3D xc_domain_maximum_gpfn(c, d);
#else
	xen_pfn_t gpfns =3D 0;
	r =3D xc_domain_maximum_gpfn(c, d, &gpfns);
#endif
	return r + 1;
}
static void sigint_handler(int sig)
{
	int rc;
	fprintf(stderr, "User aborted\n");
	rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_OFF, NULL, 0, NU=
LL, 0, NULL);
        if (rc < 0)
                perror("XEN_DOMCTL_SHADOW_OP_OFF hypercall failed\n");
	exit(1);
}


static inline int bitmap_size(int nr_bits)
{
	int nr_long, nr_bytes;
	nr_long =3D (nr_bits + BITS_PER_LONG - 1) >> ORDER_LONG;
	nr_bytes =3D nr_long * sizeof(unsigned long);
	return nr_bytes;
}

int main(int argc, char *argv[])
{
	int rc, ret =3D 1, i, runs =3D 42;
	unsigned int lflags;
	xentoollog_level lvl;
	xentoollog_logger *l;
	DECLARE_HYPERCALL_BUFFER(unsigned long, to_skip);
	unsigned long p2m_size;
	xc_shadow_op_stats_t stats;

	errno =3D EINVAL;
	if (argc > 1)
		domid =3D atoi(argv[1]);
	if (!domid)
		goto out;
	if (argc > 2)
		runs =3D atoi(argv[2]);
	if (!runs)
		goto out;

	errno =3D 0;
	lvl =3D XTL_DEBUG;
	lflags =3D XTL_STDIOSTREAM_SHOW_PID | XTL_STDIOSTREAM_HIDE_PROGRESS;
	l =3D (xentoollog_logger *) xtl_createlogger_stdiostream(stderr, lvl, lfla=
gs);
	if (!l)
		goto out;

	xch =3D xc_interface_open(l, 0, 0);
	if (!xch)
		goto out;

	p2m_size =3D xdmg(xch, domid);
	if (!p2m_size)
		goto out;

	to_skip =3D xc_hypercall_buffer_alloc_pages(xch, to_skip, NRPAGES(bitmap_s=
ize(p2m_size)));
	if (!to_skip)
		goto out;

	signal(SIGINT, sigint_handler);

	rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY,=
 NULL, 0, NULL, 0, NULL);
	if (rc < 0) {
		rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_OFF, NULL, 0, N=
ULL, 0, NULL);
		if (rc < 0)
			goto out;

		rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY=
, NULL, 0, NULL, 0, NULL);
		if (rc < 0)
			goto out;
	}

	rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_CLEAN, NULL, 0, =
NULL, 0, NULL);
	if (rc < 0)
		goto out;

	for (i =3D 0; i < runs; i++) {
		sleep(1);
		if (1)
			rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_CLEAN, HYPERCA=
LL_BUFFER(to_skip), p2m_size, NULL, 0, &stats);
		if (rc < 0)
			goto out;
		printf("%d: faults=3D %" PRIu32 " dirty=3D %" PRIu32 "\n", i, stats.fault=
_count, stats.dirty_count);
	}
	rc =3D xc_shadow_control(xch, domid, XEN_DOMCTL_SHADOW_OP_OFF, NULL, 0, NU=
LL, 0, NULL);
	if (rc < 0)
		goto out;
	errno =3D ret =3D 0;
      out:
	perror(argv[0]);
	return ret;
}

--MP_/UT++wQs95qNG2mZqpgw9kgp--

--Sig_/9bXYdQyId9Sn4B4JWXmjPiV
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDkU10ACgkQ86SN7mm1
DoBrag/+MWUBjX9AiiU9jRbeBS1nQQcbpARGAceyW9FLOJXTrHSTBXyJpaJL+0hT
pZXwOPs5xfzaGwU8RaLIH6n9ADNgjCtKL2D3nAc59WMunUTiZS5JILSsfKDRuAJS
vOOv9LHGqZFpOAHd6f5Rj/CWL/eUuJjDkckrp5DzDsVL2oryshVvTxtIlBhokc6B
aZhF2gZurRYugYsySNRtoYmVoedNltRu4iNBq0FJt6GhAJEuQhc8VEM7havPueVE
Zbiy8a/ctEwWksD84vbXYmWbzqrsFgqqH72HsC7uEXVvSt7TXR/HgZDstFBokyJ/
x6YER2VTvbDyphf2VgStTXtRSr1S0kYiThG5MzLF5LP/9C83FyW6Vsq7ma3ZCoTW
Y0zekhwVk88C2V20+HOucff+SXXuV/x/54ocivaKIVLvtAr3jf+v2EDpKSEt2w3a
BoDkgJNVSdDhUl7aWSzxcqVWBqgPkQmeAilH87rjWBtA6ksi7KABzBhluHzDkzis
bmTVP5iXr3Gg1GBTHR6Q5769ilRg0rYMxBw7PeCoCKLFjVzvZNJfGNKFWac+WTNg
gPPGGHJIbiwLHH0/lGq65DCL+4E8cHvH7TuvlV34ys00eAHfT5Xrcx6AZn/WKJef
G26VPeVvfOW9MFfLVvm6UY73YtnnPlhuLh6Hgks0XLZqZb4ul7c=
=ZDa9
-----END PGP SIGNATURE-----

--Sig_/9bXYdQyId9Sn4B4JWXmjPiV--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:14:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:14:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151282.279594 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ktp-0004Zj-GR; Tue, 06 Jul 2021 13:14:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151282.279594; Tue, 06 Jul 2021 13:14:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ktp-0004Zc-DW; Tue, 06 Jul 2021 13:14:05 +0000
Received: by outflank-mailman (input) for mailman id 151282;
 Tue, 06 Jul 2021 13:14:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0kto-0004ZW-AN
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:14:04 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08791712-de5c-11eb-8494-12813bfff9fa;
 Tue, 06 Jul 2021 13:14:03 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2054.outbound.protection.outlook.com [104.47.8.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-40-o4xMoQ5NOsKj50WwLGuGbA-1; Tue, 06 Jul 2021 15:14:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7150.eurprd04.prod.outlook.com (2603:10a6:800:12a::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 13:13:59 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 13:13:59 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR04CA0102.eurprd04.prod.outlook.com (2603:10a6:208:be::43) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 6 Jul 2021 13:13:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08791712-de5c-11eb-8494-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625577242;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=cEitWQbh6r5Ml9jJh6pdJ/XnLG4kfdRcYiO145Mh6GQ=;
	b=UInWETNNILjvJU+MoPxPUqSfoG7igO92x/A4Nc56BaHacwaydQcqlqvrnRwitin4ukZVYe
	zMF28VVQwSphPPx7QG/M0kcwwgPuysE/der0nz8+oQCi/jGB0QuNhx2mfoPoC3RfGQWuKk
	I2+6W8Ve/TuzVTqhyevfsVVQOB14SR0=
X-MC-Unique: o4xMoQ5NOsKj50WwLGuGbA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Y9Oy8jnJu8CQWzi4Lu2701Hm7B3JE6VJ7ZolIf+9pAxowUnR5EmkiYvYbi/rElK6O1bTdG9T0T93vCGFbWqG+SfOHuvxLjdI0g+uG4ur33iw1CU/qzW6/3V9uFQPKI+wZ8bTkcJsASmVu//ArLbOuvPjaDmlF0VWZ+xa5CV3QWos7Wh7XKbJWtJfsGFw7ieTsjwBW2dvZrfxmVOtmpmYywzE1NAMSCtAgHzYRMMsCkfWqYNnkZ2i7IoftBEFer7z/3W7YysQGMi9KInmIf8HMVXvAfIl4iCKlCN6DDUp74RHvZsOw5NYfky7OWla4kyKidcV8+zpLpKWpX/RnSq5Pg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cEitWQbh6r5Ml9jJh6pdJ/XnLG4kfdRcYiO145Mh6GQ=;
 b=U4DPmIfI3hqIkID/vaeyvs2ldSzbOpP8v+WW/mSKyiT+NEZJsRnNOzVSEp1F4GzgS5ifxFds6d/lvAVNMupYuvK1XQvtCdH2gKYYlhHjzeB5CoZkUN3wqNT/GbNUuzf28RXzXC3T8KFYTALMjGPNMnAA2AeQcQV/qcpt2pZFvvqoLslQiSOMFc1/p6/iDPZsvAVYFejLAxPCMfCS2z0m6QjSPvUQpQzivjUHaFcmhMBlXraIjASQpn6LF2d4P4b5F96XU496TCBc3qQLMJPNRYufIJBmExgC37RpBlP+V7Cl9CoNzSQKourKLPIIoYc54LnSC4xTaLY3yaWmeyU2jQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 1/2] x86/mem-sharing: ensure consistent lock order in
 get_two_gfns()
To: Tamas K Lengyel <tamas@tklengyel.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
References: <dea13187-04ce-9c1d-aa5c-e2cd0a7d42d9@suse.com>
 <932211b2-c3aa-17f6-9fed-ca762e189786@suse.com>
 <CABfawhk4N-KznkFhmk3Q749tTp3X+j0fCwDXooYZEDdfQ7Fchw@mail.gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <a95a3f1e-afa5-30b7-f2f9-2e0ba1808b94@suse.com>
Date: Tue, 6 Jul 2021 15:13:58 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <CABfawhk4N-KznkFhmk3Q749tTp3X+j0fCwDXooYZEDdfQ7Fchw@mail.gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR04CA0102.eurprd04.prod.outlook.com
 (2603:10a6:208:be::43) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b3d54976-05bc-49a3-1344-08d9407fea87
X-MS-TrafficTypeDiagnostic: VI1PR04MB7150:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71500F6FA166F543FC2553D8B31B9@VI1PR04MB7150.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3044;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	/9eBWjnGk3OZoLCmjBCeCGPZoHqBDlpevfw9pL0L2eNcbEKV5WMOT4xBJVCUWEcpqjiXWOI/Q2GgEMwE8rT5HP8gPbqt9FusyFTFZ+r5L0b44WMdNdqZdylUmBbiCm3LMx1A3L0PtMuxkpHqvAr4qQJ59apwVsxbyfa3sGuLUcC7TsZT1gUMSIkdvJNSmm2g5Vyt2tU7l+RQkDdHxpZ05Ok57cQ/XEFzB1xTkMkyd6oP8MopJeqQS9bv5szO6McZsPk2kngX5hNSVO+w+g3cW9+ozXISv76Va9BUL9Cwlpkh4zs4CxqKDUkyx0HSKjYmo2RksF1fR40x09XuAPwXfCZEimP9swp2UYyGad1Z4NBBXjA6XuYCGNGE5rFGrOdd5yPRWdmqskq6Qm5ZsUDF05yZp52hYyLKthRl/EeRX8JBbR2Zke60vzqsoo9WduvOySWK6ETlDS21GQdYD+z802/msfFX/dcH3mTPwvURmskA203+8qRrUzmg4aOXsTYkx706h/aUO8U2KOmMl0hqJPFM1HgxdyFjpirHJoXESObYJmu9WnApluFZkkOq0BTu8wBJ9U1DHo7ul7fysyDdPqnCczeKn+cqSvYp8B1OfoI8y1c0lWWZYIt96gAYphEEFsTxrY5t2d7s44L03jx+24N2vW0Se0dOM7tVU0clD1mqIKvz64Mlx1Ju99cslw8dit+XAO+aPAH6oJJZQzBNJCex/OKVtrutpSP4OrHxdzI=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(396003)(39840400004)(346002)(376002)(2906002)(54906003)(16576012)(186003)(6916009)(956004)(4326008)(66556008)(66476007)(316002)(2616005)(31696002)(6486002)(86362001)(36756003)(31686004)(83380400001)(8676002)(5660300002)(26005)(8936002)(478600001)(4744005)(38100700002)(66946007)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b3d54976-05bc-49a3-1344-08d9407fea87
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:13:59.0740
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: qbsN9lm9oUvuR2KwYGURtQLHPxGIZVqvtZxhXzbQSTM2e4ceznkotaLwW/V6OKbf+te8SS/P5fRNuUFY7RXa9Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7150

On 06.07.2021 14:36, Tamas K Lengyel wrote:
> On Tue, Jun 29, 2021 at 8:54 AM Jan Beulich <jbeulich@suse.com> wrote:
>>
>> While the comment validly says "Sort by domain, if same domain by gfn",
>> the implementation also included equal domain IDs in the first part of
>> the check, thus rending the second part entirely dead and leaving
>> deadlock potential when there's only a single domain involved.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 
> Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

Thanks. Do you think I should queue this for backporting (once it got
applied)?

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:19:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:19:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151288.279606 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kz9-0005FI-5U; Tue, 06 Jul 2021 13:19:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151288.279606; Tue, 06 Jul 2021 13:19:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kz9-0005FB-2N; Tue, 06 Jul 2021 13:19:35 +0000
Received: by outflank-mailman (input) for mailman id 151288;
 Tue, 06 Jul 2021 13:19:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0kz7-0005Em-1U
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:19:33 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b5b85e68-f48a-4949-8ac3-0e7e85cf9f5b;
 Tue, 06 Jul 2021 13:19:31 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b5b85e68-f48a-4949-8ac3-0e7e85cf9f5b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625577571;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=PpMZHbe9Z1WRTkjdoh51QXuYDqQ2KO8OSgVAQPSDXDg=;
  b=DGs92++g8ewKynq4RcQ5XuM2MvOPl321BkiAgOugF1O5piyX3Tdi+l2e
   /jlaf7SLJ/xH45uVXc5oeiCMlk2qsOTWYJ6tUjuDyAAc6yCNeC1gJgB+B
   A+Y0PgJH7rthRoPA5UPVR9OdjDGk6RBX3sffEHzUFlAwtYKdy8sk0sUSc
   M=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: eUajzpOtUVAX3ruXP8kzyTt2WqAKfEvQ6K1KgZinW3skTL0jtbjOowBudh+i2ukfLZdeazxmrz
 Hi5qsDjz8onZc+ELxkcTLWReY/0+IgW07oI7Weuhu04zI/wz1akwAb98KcN5kHaQsKZr+TqHql
 8aztcFzfstEbQz1SI09/A195ZzxzGSljLTuoV6A0mXdDFX/5L89BI0ZNDF32VaRfqr1IQ6Ek1w
 3zrwJTC6Dlzhui/VCKTRyoN5xPohbqGJrwTVaO1glwndm0DDKn3xZtkugbrJ/HScsNyxuJIrn+
 j+c=
X-SBRS: 5.1
X-MesageID: 47647329
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:AcfhPqoAaDrEWEo5wM+ww8gaV5taLNV00zEX/kB9WHVpm5Oj5r
 2TdaUgpGXJYWgqKQodcIi7SeK9qBPnmaKc4eEqTMSftXrdySGVxeBZnNHfKljbcVyDygcz79
 YWT0ETMqyAMbE+t7ez3ODaKad8/DDkytHfuQ629R4EIHAMGscQl3YHe3im+w9NNUB77PICf6
 Z0jfA31QZIDE5nGvhTcUN1KtQryee75K4P6HU9dmcaAIfnt1zYwYITz3Cjr0EjuyAl+9kf2F
 mAtza8yrSosvm9xBOZ/XTU9Y5qlNzozcYGLNCQi+AOQw+c1TqAVcBEYfmvrTo1qOag5BIBi9
 /XuSotOMx19jf4Yny1mx3wwAPtuQxetUMKiGXo0EcLk/aJFw7SOPAx176xtSGpvnbIiesMgJ
 6jGVjp46a/QymwyxgVrOK4Gy2C3nDE7kYKoKo2g3tDUY0YctZq3MEiFEE/KvY99XXBiLzPVt
 MeUP01vJxtADCnh3ezhBgM/DSrNU5DeytvRiM5y6io+ikTk3Zjw0QCwssD2n8G6ZImUpFBo/
 /JK6Jyidh1P5YrhI9GdaA8qPGMeyrwqNP3QSCvCEWiELtCN2PGqpbx7rlw7Oa2eIYQxJ93nJ
 jaSltXuWM7ZkqrUKS1rcZ22wGIRH/4USXmy8lY6ZQ8srrgRKDzOSnGTFw1icOvr/gWH8WeUf
 euP5BdBePlMALVaN50Ns3FKt1vwFwlIY4oU/oAKhOzS/PwW8jXX7bgAbjuzZLWYHYZZl8=
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="47647329"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KBhFfACE4O9sdV5oQSj5BYfuIst3/tbbCJAk++Vqq9tmVlOv8gr37Q2FbRYnIX8sJmcjZt99wjssg21jYOeL+rLO+ZLgJOz9esujo4/Drvf40BnzQbcEMihernaNytKITZfwWw37lOx4VUiWdt4d5B4Qw9poXZcLLEMPuKIfh6PMAzyW9Y+qFHAZNHJLS5DSw5D29D0Glt/9kLbnXBU3iUpdxTGoWOHG5Jdpqf1DVlxmxbu3VCkAjdMzEGboxv9eXimuEpI642D38JbJx9D+6VKU4fYxY/UcAPnpnWFxHEBO+kkjuavuo8eWwZXb5n+wqwnoGrtLyg8zqa3eKtPq7w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Hx9FQ+vn5F955hOh0gDogUnRJixPrGhm4QMBRNQC6ho=;
 b=JcEqZNGp8fFdv8OAzqYiCoE+TouMtCcfplet1CzIKyO+Pwszf3IM7t84Rp1GDQHgLCZv53vVmgyC2ukW1y5PJLGQdZagqGCQcTPB5klcHTgWnn02Q6ozg7kodTQ9vGr0r1C09LgQ6C14TW7i0Q/jAmgTv6mC+01oD+Qx7+qHWMfeArMJt4MMr/fsxGp6BUgP8w1p3jdvSB1jfpc13ISWDl7nfa/sicT8FSb8gtgZTHR2HfNuYVgZE27ANtkNzxfkwALVFPzEbb3GsTeunysHvUDy2WXelP5X7nnkGtP0+NduhUxMYdkEbtC20lyFB7nJMLiAt1j9iey/WU0/cVDpUQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Hx9FQ+vn5F955hOh0gDogUnRJixPrGhm4QMBRNQC6ho=;
 b=gxV4/RMzoY+BAtWsZ44fiS9Il3dd4mTWVA8KFPnYKV6OE9vSN8oHmb3Qeje9A0FGzyWUiFmBumDIKZkwt3oK5HjEG8Li6jervOIJMwEWqyKPwIfOL4R44OWprfwGb34weneQnO9mi3AGOK6wj+yO4wVfgTvnh/bXKBffwAh/AHI=
To: Olaf Hering <olaf@aepfle.de>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
	Jan Beulich <JBeulich@suse.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
Message-ID: <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
Date: Tue, 6 Jul 2021 14:19:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706145804.1ab98f16.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0084.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:76::24) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 592ec9dc-063f-4ef5-754f-08d94080aeb2
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5744:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5744488540086EFD653851B8BA1B9@SJ0PR03MB5744.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2803;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: XWXtJgkQ7F2Xj+stjdtDZ2mBSVTkEqZozrWyvpWSIiAW8I9jE4meamPrcS+G49ejYU1iD0s8O2H2V+b3cg0fb48gLHCrVDPLar7TBk3paE4obsoqrXq+JoBb2VYAzWZpbHLIYygnp7Rf1sFAnhnudLRV49PnGjs8lv93GER3gW5dS3n7yjIdzyfcblcv/cGm7EesZiIhATuAf9v13ltelcMR37OnD1OH+09gD4P2e8t6FoWKKhnZIZb7NdFD66ustZR0odtobbs7S5i5yTHXmtJw8y8ydco+9kNZieENyIYS8aPm9dLtX2NzWbLLikZ4xeVN+NG8VTV9JrmxjgOBiguanKor2anpTlDZMOgYPlTOljhG5wYWaZzTktgtZX9msuY0HZn/q4rBL9fVlHUsQtQ0LUAb2rody1h7FSVxIhJuO8q7TOVLdQIo5of+vNImPjXzpeVoHtZe7uhpFVgio3GEAvH8Glznzm93Pwy6Z3JHzGzxCYstWVfPIhjUWl5mg4XeWfGGbJmFM/AjqazbOAog80muZ9uQiQn8QDfysu9KKTQYuyHVUjTJdPqVhRZWZxZZSBfdsrWbE7/2041xgsHQRmjNUMdQWAPlm06RcHi62mP6nal3kdmvCUZJg4emodv2EWm3kFTd6+afa15VwATBQ5VSAG5lZwgvUzOFoSIV0S2UzrTbSCU6xcXQPOwGFUqVSg+V5VvwDeaSgI8CVZt0Ah73U5/97ZiNO/MlrOF6SyFbVVgLT1CA3An7FeWd
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(39860400002)(376002)(396003)(136003)(366004)(5660300002)(186003)(53546011)(66556008)(478600001)(956004)(31696002)(66476007)(31686004)(316002)(66946007)(16576012)(4326008)(8936002)(54906003)(36756003)(86362001)(38100700002)(2616005)(6486002)(6916009)(2906002)(26005)(6666004)(8676002)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?X1yYAWaRrIUI9vd4lx33kFbPDNEcQVpjbjlG2z/vigOcL36Ldbk0ecAj?=
 =?Windows-1252?Q?pRk5poMseUp05aJ0DQ5YiXMsJWR4DsPMYrNdd9L+jqjws8t521zF3DRo?=
 =?Windows-1252?Q?gqdbWBqY3oLf/pyr5jqgQz8tK7FFEtp+4t2Yy4Inaq9+VBzuNvWnXZ7z?=
 =?Windows-1252?Q?pBpT/VkuLhZOeQ9NF1CvdsF6pLjtGKa6j0n6RaBNmkta4voaWKLpR91R?=
 =?Windows-1252?Q?tqQ8wg4DlNKxQkmZ+w9kjTqIDdcMCaQ/6g7jc/QC+6jSoz7DLv7Osqxd?=
 =?Windows-1252?Q?fp4Kmvo6V75XU/ypHeQtYiyPGh2SsiaZ44Byvke45PvhnhU5rr0gEGZZ?=
 =?Windows-1252?Q?5mtKuuSiJqepmNJbZ72pMAFN+4yDZ+R376aTDvqebIwAaiM/oe32h66Y?=
 =?Windows-1252?Q?ckJh0kxkUN2dUYwlDSLWybekB0HjoI3RU8TWUTQ5nAw1oauJPn0s35t/?=
 =?Windows-1252?Q?c3zpPLFMNiu+OorIA0owFkIJLugfa8gTrOLxgyAva7u99lfutNSy8xfB?=
 =?Windows-1252?Q?HzXScr4xAq1iR1nGUP5l1RGrEw6HlXrdwhWJ+NBxWfLSbUFi6NyGstnS?=
 =?Windows-1252?Q?XsF5lsK9XK1pkkEiQCtmlcfwQOfU0o1/ufHpqalU5Jj0DH/20UGnS9+f?=
 =?Windows-1252?Q?Pv50zOeEqdpVVGAu2a3xKr4B9LmK1P4Ry7o8dAcXdH9uVDnMKJnlK78n?=
 =?Windows-1252?Q?dVyQDRj5uILai4NY5d4Nd438M7RQVq44F+yg2P8jR+KCLWxsywgW3X+s?=
 =?Windows-1252?Q?RIbG0Jv2NLehqzHARVanJjVLrvpdoK1P0+QZTRZzLOFy/Nde9WqbgsJE?=
 =?Windows-1252?Q?axNuYm7r03VeP5mhcNxf3Vx4IckPWW0fljVBBrR37AQyUOKOGoUO1TIq?=
 =?Windows-1252?Q?jv3BWJeFzPF0PF7cj7RicHJmnmNmCuIBKxhN14se7TsFqDE9rqxIVEk9?=
 =?Windows-1252?Q?ksNr9eBur1j+LEzG2V2wfvD5uZvBerDUbl0EDe1uTumQjGHHamEfjfq6?=
 =?Windows-1252?Q?h76SBfvnIaZgIRHmrDVEI0FMlhGehO286+VBWR8XvT09raNZwDXi2xcR?=
 =?Windows-1252?Q?cRm0jUYB+VqpkNJ50vIueRJUPO/HmEnZyT107lp0Maj2hN83aQfC1WwP?=
 =?Windows-1252?Q?q0X1TYQoEFu1ig9mTBuy3R4nuZEHUFwHUvM4L6tg1LiTOcVJhK4pNFl+?=
 =?Windows-1252?Q?JfaZakXQRwWzpo/8gNx4wV3O5Yz3Lxpo4YX33iw7iw1Goj88GJriu8UP?=
 =?Windows-1252?Q?PL+83ysLcuCy9L9C7UMfmBhcf23Dq8zLZX6Kb1zn+hFTdhvWiJhZgfvx?=
 =?Windows-1252?Q?hibsBAi5SVMF47P9Tb0WmN9pCv1HZn6jiZpOCJV5SxiAt8YHtlLmuQMY?=
 =?Windows-1252?Q?cyvZBiI+o/QB3OaGCjjnPvvW+PYnThaWH0a6l6EDrWC7cQplKPUEJp6I?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 592ec9dc-063f-4ef5-754f-08d94080aeb2
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:19:28.1787
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: cGUjD4TNi8ymJnCQAOsEFa934xo3oN+wfFdejvihG+nt29lGSkJ7SrYu6Qbuw9QLFepaamfidakLL5vD30sR++dQRlZRgxDk3wLoLIcaJPY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5744
X-OriginatorOrg: citrix.com

On 06/07/2021 13:58, Olaf Hering wrote:
> Am Tue, 6 Jul 2021 12:23:32 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> +    count =3D stats.dirty_count;
> Is this accurate?

The live loop relies on it, and it worked correctly the last time I
tested it.

> I remember the reporting is broken since a while, and testing a busy domU=
 indicates it is still the case.

If its broken, it needs fixing.

> # xen-logdirty `xl domid domU`
> 0: faults=3D 0 dirty=3D 258050
> 1: faults=3D 0 dirty=3D 257817
> 2: faults=3D 0 dirty=3D 253713
> 3: faults=3D 0 dirty=3D 253197
> 4: faults=3D 0 dirty=3D 255154
> 5: faults=3D 0 dirty=3D 260876
> 6: faults=3D 0 dirty=3D 259083
> 7: faults=3D 0 dirty=3D 253163
> 8: faults=3D 0 dirty=3D 258349
> 9: faults=3D 0 dirty=3D 260330
> 10: faults=3D 0 dirty=3D 259754
> 11: faults=3D 0 dirty=3D 257273
> 12: faults=3D 0 dirty=3D 255756
> 13: faults=3D 0 dirty=3D 258209
> 14: faults=3D 0 dirty=3D 257847
> 15: faults=3D 0 dirty=3D 59639
> 16: faults=3D 0 dirty=3D 81
> 17: faults=3D 0 dirty=3D 86
> 18: faults=3D 0 dirty=3D 111
> 19: faults=3D 0 dirty=3D 81
> 20: faults=3D 0 dirty=3D 80

What is this showing, other than (unsurprisingly) faults doesn't work
for an HVM guest?

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:19:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:19:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151291.279617 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kzW-0005pX-JE; Tue, 06 Jul 2021 13:19:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151291.279617; Tue, 06 Jul 2021 13:19:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kzW-0005pQ-G9; Tue, 06 Jul 2021 13:19:58 +0000
Received: by outflank-mailman (input) for mailman id 151291;
 Tue, 06 Jul 2021 13:19:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kzV-0005mh-PK; Tue, 06 Jul 2021 13:19:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kzV-0001Xv-Iv; Tue, 06 Jul 2021 13:19:57 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kzV-0006Pf-A7; Tue, 06 Jul 2021 13:19:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0kzV-0005Oq-9e; Tue, 06 Jul 2021 13:19:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=9fNaF439/mUxV0k9Diyuo9tslKHD3uvjAHmpv+MfbdU=; b=ErB0OR5nk/vkBG3PbEr7zmQnD+
	mh9B7HyM3EhW88CLbCL1HxooKkMIxGaZNaK31b9YFCvghuc7skXLm1vm26vCvuZI/8zq7DB9OPZVP
	MLQj0n9EYyyEEOLB+d15LWMeNj23739RnVcln3TFqVtodUFToWHlRavNdzHTYbxTfyiw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163328-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163328: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 13:19:57 +0000

flight 163328 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163328/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:20:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:20:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151296.279631 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kzd-0006oI-UL; Tue, 06 Jul 2021 13:20:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151296.279631; Tue, 06 Jul 2021 13:20:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0kzd-0006o7-Pd; Tue, 06 Jul 2021 13:20:05 +0000
Received: by outflank-mailman (input) for mailman id 151296;
 Tue, 06 Jul 2021 13:20:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0kzc-0006fZ-P4
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:20:04 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0kzb-0001YF-Jb; Tue, 06 Jul 2021 13:20:03 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0kzb-0001op-AK; Tue, 06 Jul 2021 13:20:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Message-Id:Date:Subject:Cc:To:From;
	bh=AHt4qoHq1+UuC5E67ZQf2Rgi5gaP0PaL/CVC6PtQZl0=; b=s0YSsil34iKrVHTsH6zelac4yq
	L+e2RKSA8Rt1eRnzaNZLsC7/EjMb/zjN9QQphg9yL8rUl0qRM8PgibbLyRZa2U84aYQHjdFIY5lhy
	1jMPirC9ERSrYKKAheNcPYhvrT0p0JYnlK1UynOEdZqfeGx/gB5Dp7EnlT827lGWVfV4=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	michal.orzel@arm.com,
	olaf@aepfle.de
Subject: [PATCH] tools/xen-foreign: Update the size for vcpu_guest_{core_regs, context}
Date: Tue,  6 Jul 2021 14:20:00 +0100
Message-Id: <20210706132000.29892-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1

From: Julien Grall <jgrall@amazon.com>

Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
uint64_t") updated the size of the structure vcpu_guest_core_regs and
indirectly vcpu_guest_context.

On Arm, the two structures are only accessible to the tools and the
hypervisor (and therefore stable). However, they are still checked
by the scripts in tools/include/xen-foreign are not able to understand
that.

Ideally we should rework the scripts so we don't have to update
the size for non-stable structure. But I don't have limited time
to spend on the issue. So chose the simple solution and update
the size accordingly.

Note that we need to keep vcpu_guest_core_regs around because
the structure is used by vcpu_guest_context and therefore the
scripts expects the generated header to contain it.

Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t")
Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Julien Grall <jgrall@amazon.com>

---

Cc: michal.orzel@arm.com
Cc: olaf@aepfle.de
---
 tools/include/xen-foreign/reference.size | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/include/xen-foreign/reference.size b/tools/include/xen-foreign/reference.size
index a0409db5c458..11a06a7a432c 100644
--- a/tools/include/xen-foreign/reference.size
+++ b/tools/include/xen-foreign/reference.size
@@ -4,8 +4,8 @@ structs                   |   arm32   arm64  x86_32  x86_64
 start_info                |       -       -    1112    1168
 trap_info                 |       -       -       8      16
 cpu_user_regs             |       -       -      68     200
-vcpu_guest_core_regs      |     304     304       -       -
-vcpu_guest_context        |     344     344    2800    5168
+vcpu_guest_core_regs      |     312     312       -       -
+vcpu_guest_context        |     352     352    2800    5168
 arch_vcpu_info            |       0       0      24      16
 vcpu_time_info            |      32      32      32      32
 vcpu_info                 |      48      48      64      64
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:23:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:23:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151308.279642 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0l2e-0007uE-Cz; Tue, 06 Jul 2021 13:23:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151308.279642; Tue, 06 Jul 2021 13:23:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0l2e-0007u7-9j; Tue, 06 Jul 2021 13:23:12 +0000
Received: by outflank-mailman (input) for mailman id 151308;
 Tue, 06 Jul 2021 13:23:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0l2d-0007u1-1p
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:23:11 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4e7fdc04-de5d-11eb-8494-12813bfff9fa;
 Tue, 06 Jul 2021 13:23:10 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4e7fdc04-de5d-11eb-8494-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625577790;
  h=subject:from:to:cc:references:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=NjCralRfuo6KXP8cRSsUNCnqGq36yk3L/tVo8FNlcGs=;
  b=GY5hhBuTixXzh7tIsPGm1j5UpOS1O/Mh8AFxUFBsog5mDEMK3CjeBFC9
   Tm1qomXxmYc5ogFS3KFkzNuHXUA4uYRZZpLl2HwtY1ZklifI18uwdloUI
   jXWa+01g7VmpTnn5U7WbO1oytYv1rOH8Mlf21CrI9cjhFB9t0FS+fhVne
   4=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: zTe+4uoOoTx0P2r+k0+741ZnJiSH0fP8t8JYK6wQyn3oLGYCYF2i9HCR8S2VHQPQe6d/umjeNU
 2A5Hliz3eC6RvKgTQENllH4IdXzMijH47HqDD0G+rFjFw0FCvIGxOnt/PMgfsK0zhm0rdNVSgo
 VHBSZmYTnPXczZem0IrweN3DH0JttQvURAyZU0TDcw6iwI/H0Ml3dIrhS7dDmaSbnCJwLFaU70
 oZ7oNMOdOquvHNHRya4V/jtGP+/OQHqSziQBuiaj8OFLpTXXuLpcAoACeaDZFoGC8R5lwWBXF3
 ZeM=
X-SBRS: 5.1
X-MesageID: 47709345
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:RpOVLKlXFuZnnDX9kDIIN6ZiNiLpDfLz3DAbv31ZSRFFG/Fw9/
 rCoB19726RtN9xYgBEpTnkAsO9qBznmqKdjbN+AV7AZniFhILLFuFfBOLZqlWNJ8SXzIVgPM
 xbAstD4bPLbGSTjazBkXOF+9RL+qj7zEiq792us0uEVWtRGsZdB58SMHfhLqVxLjM2Y6bQRP
 Knl7N6TyPLQwVuUviG
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="47709345"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FmD5nORtwbHfiAcslYkFRSFXsZzxwFtE1larFwUDU1Ca5m3F9Y+cX8ilnLt4sVEJIRdCMyEtGNGFrjz78aSRO1a88s5YtxLSYIQtRlnJHkz47CumzV9zgcWfD67+zkedQFLnQd5IQ2Wi3jYQTpLrjVF2qb52y7HTitehRr4w0AsmNCDdB3TRu07r62DL9I8gGWMfaNUxVddJnUj/7W9aIHMCsR86rpu52IzNG1GAeEYySAx5Fe80iXsZbAWo1XAGxVHhXHvSWmCoavIXbni283fswSTGSw0lfI7j6rYkCwoIxCfpGbCJS9lG5Rq+RjfaunUS1epryvtsxWF632MZ2Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dYOhxNok8oB7UbiPy3NMo9UxyT4ijQTaPd5J4FhASV0=;
 b=UBNqGEv1OMckdEUzCeVXKJmcm2a1ZyvQoMRQGHp2MjiBkg6ZJ8ihZuIr6j/f8Y7/K7Lh1OSXifE5CJ+EUWTGo+2pMDR5JTVueMiARcF6gylr+NgtHwJjpHkg1n0ACy2i1nRk/4a/JmRhfJVVkQnOFPtW+OsDLuVp7aro5S6a6F6ucRQDYdHhjgESTF2QOpNFPJE1GKtU/hYIGuR4oX9pQNdTTImEeCKcgxfXxQ4/9JRE2ifpiEgLsXJCykj0j0Grnl312mzLOp/RPJfMH3QsSSWFYZHRLC42c6ESfdILwq8D6V4OOa/VtT/G8BPnWOUx5uSqzRpGQPZXD+yFs8HJRA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dYOhxNok8oB7UbiPy3NMo9UxyT4ijQTaPd5J4FhASV0=;
 b=A+QBPSQOpR0xf2LbC0d+ThIOL8vtLnQBvxCyQWdvUrl2Qq5C+4f+r8xPA5A7up1EcsLgJcDCr53BUYk+TmQ80lFVXbf0ffpmk+4X8PN6lPqqzbYzexXUIT/hdxkl0DZgMCMF6rVdVBTP36827BGYGdKv0xOhehvipKF2SZ1qc0Q=
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Olaf Hering <olaf@aepfle.de>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
	Jan Beulich <JBeulich@suse.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
 <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
Message-ID: <1fd51108-82d2-4605-5c37-410c3f4c65a0@citrix.com>
Date: Tue, 6 Jul 2021 14:22:58 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0044.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:152::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d1757a9a-6c23-4d52-58c2-08d94081306d
X-MS-TrafficTypeDiagnostic: BYAPR03MB3495:
X-Microsoft-Antispam-PRVS: <BYAPR03MB34956D834573EB66E2F47F25BA1B9@BYAPR03MB3495.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2803;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: WfPeURFvZ6rkWVfZi/NdIZAjkfSXIa1rkBqK/jOotH6/n9ppHOQIyA1Ki+/cu340jR9Pdbe2boH31W1hD6svCdKjKda7kliI8QFetTak+VH8dIBuLY+1PifJ+gDU6UbOIYaoPBZiVuUgl3rv7KvakkwEAggHGxdLi8oUgX6dqX6D8W9XRA8DGvKgXbGA6yutiXfkZAsB9Z/dDSU9yitG1omvlfQCQ5c9t07/ThZ8WQ33hn/LH5cyHJDMnMw8BFnhGa64VSiaY98py6Zsmog3JxN/l2RWs7JL/VumfiJoa3CDsXrPBBxt0zETNgc+eJgbBHzJivJblJ1syb1LWmg2nPUYBBeFJIpfZJ/ibrliZQPEL1uWXHHEgape6D897jJK+2v4noOLUUZJi5OJGdH8sN/t//l61DYqplRBWVsCdIH0bIdCOfXUPjxY68Ugw7ns3efMk3cMHW+NSE0aKwsrMwWALZQkj16zggrxtXcwiOW9+nfauC9HAUwMy6DHssIbcQUIfNlMtokohxNiXYEWDcrw11YKQETZLj9j5LIib0Z+O4Y1JVsSNRsux6VuXcvj3GchwEcbFaxbVpWXWArbX2jWETBVOga6txVoQThtR0XAty7o9VGFcdq+bDG1c95mWdep/82xswvlktRn/r4R9mZpte3yZDTDIDuyM6ub3LA41Y0hwGp/j3euAL/IiLu8NSGc6hq8eZXsrYQSkocJcLZY5oGUcDcEGrE/QPv67TDACOOyHmEvQgbhfhvwc3F3Nf5r+quRwUe2DOQSZ7vv7w==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(39860400002)(346002)(366004)(136003)(376002)(36756003)(86362001)(478600001)(26005)(5660300002)(31686004)(6916009)(53546011)(54906003)(6486002)(2906002)(8676002)(316002)(31696002)(4326008)(186003)(66476007)(66556008)(956004)(66946007)(16576012)(38100700002)(8936002)(2616005)(6666004)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?OmzW713AjL65TzTz8ri4pwwIjv91j5tTsBh0uUUu/1mvVmoJ58S/ROAD?=
 =?Windows-1252?Q?WERPW2A9JLorc63v1IgO5BAlxytUl4UkN9/5DUT+rENb6ECSe1zQRdXQ?=
 =?Windows-1252?Q?TSGr9kMVyKiut6Gctm0xQUv8SvOoZhWk5YikXEoDy3jLWd2gk1SJMF++?=
 =?Windows-1252?Q?KU2iN+lY7U2DqAEHrDVKdTi/jqZEJVpfrlgxMvhnbV6A00WtTH15sefx?=
 =?Windows-1252?Q?Or2+bvo/HJnF4nJqWxEtE++BZtuGLD2qh1kZOUY+Y9ZTo/a3cFFiF+vJ?=
 =?Windows-1252?Q?T1wXEF0ptqS8QEiC7PsxVJQj685TcJIFzrCuMfxJL9dGVxA7OxL/PzCB?=
 =?Windows-1252?Q?VGKgcjdJ35pXlkzP1Sld6ddpDBo9l0mf0JBop5VI7FYFcY0JtnKZt1xT?=
 =?Windows-1252?Q?/SVGiAMM569l4Ewnzt9oKWA9y6P9fQzveI4rVEuBNWCNVZDttQUbrvQ1?=
 =?Windows-1252?Q?rgbfuZbm7V4bI6Iah1ehSRktNJb7PPIum2chj+GnhKKvDKE4rl5Z7lJI?=
 =?Windows-1252?Q?bBDo7+D6TqoJ6RWA0XARbFa2BhJfxtpWCa2t4YZ+n71KTbqiv7vM3uEd?=
 =?Windows-1252?Q?kQNsbR6r20iYw0YQJy7v2oghK6Ey0mDgn5JSLgv8EW3niCFBG26T8xCC?=
 =?Windows-1252?Q?Evw8yaveSV7iUuvTZwPho8So+VDVwq9pd1GwczjwzaUWy3BxlnIraPZo?=
 =?Windows-1252?Q?3oY+YnaA4B0BOl3uccl6CqGYhN2Z9sqQeUlmIVj1nXduGtmVpLKzjIhS?=
 =?Windows-1252?Q?hGYGju6QCpg6YX+/En74ogjT+pa9r5rBW6+pWIWLIMC0jm1a4BVfn6GI?=
 =?Windows-1252?Q?XuEXg8JdFY6xoT0MCSSa1QEspvQblNimVO3f2VWNYVkweLYOtbL36inf?=
 =?Windows-1252?Q?nBcJZYoXxq2dAt3bpM/+vOWcof7IHJ4qTDpWexwR0B15tn0xI+m11wKX?=
 =?Windows-1252?Q?y/X+mR0Re1yh+taL7zSVM/IzTTAzYjwS0L/wk7cQ5qI8G132oQDcetoJ?=
 =?Windows-1252?Q?j8eOPf7Nh2LP8Q1gNrmInC09ae8QvXA8oBniiWid5c+gQfzIC32ZKvbI?=
 =?Windows-1252?Q?m1ekj70ihX77NajuV8ly/KXK1vvI+NdWMBaS0PzU6nIHQ5aNqytKrE+s?=
 =?Windows-1252?Q?rKe6Gpq4l0r1kDJr2mk0eA8y88wD/HN8bEFwinN8125+VSWcZKNhETCV?=
 =?Windows-1252?Q?cMp1YpUsWD8jEix0FaLSEx7ok3duLcVfQ/E7sjmWQ2yrcugYPDeLuS3h?=
 =?Windows-1252?Q?ZLqf2nE8g89DrqL9p9dt31eXqOwzDAit+EjCpriZeGdP2d8bY+3FvAGM?=
 =?Windows-1252?Q?OL0P73ZdniT+IPjohCktZeS0WLftXOMFPp2gQMBiX+9f6CBHI0NihCVv?=
 =?Windows-1252?Q?unuAjdUh3GDs//8UYABhdQh220gO4abhHmmh/1yo6G+WHE++NE6BCwyx?=
X-MS-Exchange-CrossTenant-Network-Message-Id: d1757a9a-6c23-4d52-58c2-08d94081306d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:23:05.7946
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: B5RrdPTjLAE9MOC/w/pj0YB74XhjbFc/cHeKyhRtopdbnYfLtMFk4Ww4B14X0Skl4vVb/yR2F+YFv/qCCBq0dPqV+Cy3UaykQ7X2mtqYDD4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3495
X-OriginatorOrg: citrix.com

On 06/07/2021 14:19, Andrew Cooper wrote:
> On 06/07/2021 13:58, Olaf Hering wrote:
>> Am Tue, 6 Jul 2021 12:23:32 +0100
>> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>>
>>> +    count = stats.dirty_count;
>> Is this accurate?
> The live loop relies on it, and it worked correctly the last time I
> tested it.
>
>> I remember the reporting is broken since a while, and testing a busy domU indicates it is still the case.
> If its broken, it needs fixing.
>
>> # xen-logdirty `xl domid domU`
>> 0: faults= 0 dirty= 258050
>> 1: faults= 0 dirty= 257817
>> 2: faults= 0 dirty= 253713
>> 3: faults= 0 dirty= 253197
>> 4: faults= 0 dirty= 255154
>> 5: faults= 0 dirty= 260876
>> 6: faults= 0 dirty= 259083
>> 7: faults= 0 dirty= 253163
>> 8: faults= 0 dirty= 258349
>> 9: faults= 0 dirty= 260330
>> 10: faults= 0 dirty= 259754
>> 11: faults= 0 dirty= 257273
>> 12: faults= 0 dirty= 255756
>> 13: faults= 0 dirty= 258209
>> 14: faults= 0 dirty= 257847
>> 15: faults= 0 dirty= 59639
>> 16: faults= 0 dirty= 81
>> 17: faults= 0 dirty= 86
>> 18: faults= 0 dirty= 111
>> 19: faults= 0 dirty= 81
>> 20: faults= 0 dirty= 80
> What is this showing, other than (unsurprisingly) faults doesn't work
> for an HVM guest?

Sorry - I meant HAP guest.

What hardware is this on? i.e. is the Page Modification Logging feature
in use?

~Andrew


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:24:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:24:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151313.279653 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0l41-0008Va-Px; Tue, 06 Jul 2021 13:24:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151313.279653; Tue, 06 Jul 2021 13:24:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0l41-0008VT-Lu; Tue, 06 Jul 2021 13:24:37 +0000
Received: by outflank-mailman (input) for mailman id 151313;
 Tue, 06 Jul 2021 13:24:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0ZJM=L6=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1m0l40-0008VN-Ug
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:24:36 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 51c9c996-d105-44be-8454-a39abb32c1aa;
 Tue, 06 Jul 2021 13:24:35 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id BE61061164;
 Tue,  6 Jul 2021 13:24:26 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 51c9c996-d105-44be-8454-a39abb32c1aa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625577874;
	bh=1b6k92EMOVzHgyTq1RFb48ZKUcEXJlaaPAFN5oqwmF4=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=Tx92MCkf/DXZd6nh5mgnaOshLB4ggq26FqyP7BRdqm4hXED58hUYg3wTzF/ZikCOl
	 U+1P1/gbNfCqV4xnZ7pHjCf8/b987/nQ/mVKU1HbWyoJyOKg9fJOcN462l6+qNBbsk
	 mG027LEWXpfZtreWSaiuUnUFKCuYwjJn+lLcTB45MSBdJeGNl0JTrXgxYvizMLKavG
	 ZjJErAdgAQUwjFypjPCvRFBu+p+iugJjiDv/3nE/dAIeatFPDVEKPcPUEgF80LgmiZ
	 dhxesW61+bCVt47G9QVFd9FVhqxuurozkVLZ3Q4Ql0HvqNzplvnBtOnAkUoP1it1tH
	 ndRwRZDbWWvhQ==
Date: Tue, 6 Jul 2021 14:24:23 +0100
From: Will Deacon <will@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Nathan Chancellor <nathan@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>,
	Claire Chang <tientzu@chromium.org>,
	Rob Herring <robh+dt@kernel.org>, mpe@ellerman.id.au,
	Joerg Roedel <joro@8bytes.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	boris.ostrovsky@oracle.com, jgross@suse.com,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	benh@kernel.crashing.org, paulus@samba.org,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Stefano Stabellini <sstabellini@kernel.org>, grant.likely@arm.com,
	xypron.glpk@gmx.de, Thierry Reding <treding@nvidia.com>,
	mingo@kernel.org, bauerman@linux.ibm.com, peterz@infradead.org,
	Greg KH <gregkh@linuxfoundation.org>,
	Saravana Kannan <saravanak@google.com>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	heikki.krogerus@linux.intel.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	linux-devicetree <devicetree@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>, linuxppc-dev@lists.ozlabs.org,
	xen-devel@lists.xenproject.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	Jim Quinlan <james.quinlan@broadcom.com>,
	Tomasz Figa <tfiga@chromium.org>, bskeggs@redhat.com,
	Bjorn Helgaas <bhelgaas@google.com>, chris@chris-wilson.co.uk,
	Daniel Vetter <daniel@ffwll.ch>, airlied@linux.ie,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	jani.nikula@linux.intel.com, Jianxiong Gao <jxgao@google.com>,
	joonas.lahtinen@linux.intel.com, linux-pci@vger.kernel.org,
	maarten.lankhorst@linux.intel.com, matthew.auld@intel.com,
	rodrigo.vivi@intel.com, thomas.hellstrom@linux.intel.com,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Qian Cai <quic_qiancai@quicinc.com>
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210706132422.GA20327@willie-the-truck>
References: <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210706044848.GA13640@lst.de>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Tue, Jul 06, 2021 at 06:48:48AM +0200, Christoph Hellwig wrote:
> On Mon, Jul 05, 2021 at 08:03:52PM +0100, Will Deacon wrote:
> > So at this point, the AMD IOMMU driver does:
> > 
> > 	swiotlb        = (iommu_default_passthrough() || sme_me_mask) ? 1 : 0;
> > 
> > where 'swiotlb' is a global variable indicating whether or not swiotlb
> > is in use. It's picked up a bit later on by pci_swiotlb_late_init(), which
> > will call swiotlb_exit() if 'swiotlb' is false.
> > 
> > Now, that used to work fine, because swiotlb_exit() clears
> > 'io_tlb_default_mem' to NULL, but now with the restricted DMA changes, I
> > think that all the devices which have successfully probed beforehand will
> > have stale pointers to the freed structure in their 'dev->dma_io_tlb_mem'
> > field.
> 
> Yeah.  I don't think we can do that anymore, and I also think it is
> a bad idea to start with.

I've had a crack at reworking things along the following lines:

  - io_tlb_default_mem now lives in the BSS, the flexible array member
    is now a pointer and that part is allocated dynamically (downside of
    this is an extra indirection to get at the slots).

  - io_tlb_default_mem.nslabs tells you whether the thing is valid

  - swiotlb_exit() frees the slots array and clears the rest of the
    structure to 0. I also extended it to free the actual slabs, but I'm
    not sure why it wasn't doing that before.

So a non-NULL dev->dma_io_tlb_mem should always be valid to follow.

Untested diff below... Nathan, it would be ace if you're brave enough
to give this a shot.

Will

--->8

diff --git a/drivers/base/core.c b/drivers/base/core.c
index bbad7c559901..9e1218f89e4b 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -2820,7 +2820,7 @@ void device_initialize(struct device *dev)
 	dev->dma_coherent = dma_default_coherent;
 #endif
 #ifdef CONFIG_SWIOTLB
-	dev->dma_io_tlb_mem = io_tlb_default_mem;
+	dev->dma_io_tlb_mem = &io_tlb_default_mem;
 #endif
 }
 EXPORT_SYMBOL_GPL(device_initialize);
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 785ec7e8be01..f06d9b4f1e0f 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -164,7 +164,7 @@ int __ref xen_swiotlb_init(void)
 	int rc = -ENOMEM;
 	char *start;
 
-	if (io_tlb_default_mem != NULL) {
+	if (io_tlb_default_mem.nslabs) {
 		pr_warn("swiotlb buffer already initialized\n");
 		return -EEXIST;
 	}
@@ -547,7 +547,7 @@ xen_swiotlb_sync_sg_for_device(struct device *dev, struct scatterlist *sgl,
 static int
 xen_swiotlb_dma_supported(struct device *hwdev, u64 mask)
 {
-	return xen_phys_to_dma(hwdev, io_tlb_default_mem->end - 1) <= mask;
+	return xen_phys_to_dma(hwdev, io_tlb_default_mem.end - 1) <= mask;
 }
 
 const struct dma_map_ops xen_swiotlb_dma_ops = {
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index 39284ff2a6cd..b0cb2a9973f4 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -103,9 +103,9 @@ struct io_tlb_mem {
 		phys_addr_t orig_addr;
 		size_t alloc_size;
 		unsigned int list;
-	} slots[];
+	} *slots;
 };
-extern struct io_tlb_mem *io_tlb_default_mem;
+extern struct io_tlb_mem io_tlb_default_mem;
 
 static inline bool is_swiotlb_buffer(struct device *dev, phys_addr_t paddr)
 {
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index 0ffbaae9fba2..91cd1d413027 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -70,7 +70,7 @@
 
 enum swiotlb_force swiotlb_force;
 
-struct io_tlb_mem *io_tlb_default_mem;
+struct io_tlb_mem io_tlb_default_mem;
 
 /*
  * Max segment that we can provide which (if pages are contingous) will
@@ -101,7 +101,7 @@ early_param("swiotlb", setup_io_tlb_npages);
 
 unsigned int swiotlb_max_segment(void)
 {
-	return io_tlb_default_mem ? max_segment : 0;
+	return io_tlb_default_mem.nslabs ? max_segment : 0;
 }
 EXPORT_SYMBOL_GPL(swiotlb_max_segment);
 
@@ -134,9 +134,9 @@ void __init swiotlb_adjust_size(unsigned long size)
 
 void swiotlb_print_info(void)
 {
-	struct io_tlb_mem *mem = io_tlb_default_mem;
+	struct io_tlb_mem *mem = &io_tlb_default_mem;
 
-	if (!mem) {
+	if (!mem->nslabs) {
 		pr_warn("No low mem\n");
 		return;
 	}
@@ -163,11 +163,11 @@ static inline unsigned long nr_slots(u64 val)
  */
 void __init swiotlb_update_mem_attributes(void)
 {
-	struct io_tlb_mem *mem = io_tlb_default_mem;
+	struct io_tlb_mem *mem = &io_tlb_default_mem;
 	void *vaddr;
 	unsigned long bytes;
 
-	if (!mem || mem->late_alloc)
+	if (!mem->nslabs || mem->late_alloc)
 		return;
 	vaddr = phys_to_virt(mem->start);
 	bytes = PAGE_ALIGN(mem->nslabs << IO_TLB_SHIFT);
@@ -201,25 +201,24 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
 
 int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
 {
-	struct io_tlb_mem *mem;
+	struct io_tlb_mem *mem = &io_tlb_default_mem;
 	size_t alloc_size;
 
 	if (swiotlb_force == SWIOTLB_NO_FORCE)
 		return 0;
 
 	/* protect against double initialization */
-	if (WARN_ON_ONCE(io_tlb_default_mem))
+	if (WARN_ON_ONCE(mem->nslabs))
 		return -ENOMEM;
 
-	alloc_size = PAGE_ALIGN(struct_size(mem, slots, nslabs));
-	mem = memblock_alloc(alloc_size, PAGE_SIZE);
-	if (!mem)
+	alloc_size = PAGE_ALIGN(array_size(sizeof(*mem->slots), nslabs));
+	mem->slots = memblock_alloc(alloc_size, PAGE_SIZE);
+	if (!mem->slots)
 		panic("%s: Failed to allocate %zu bytes align=0x%lx\n",
 		      __func__, alloc_size, PAGE_SIZE);
 
 	swiotlb_init_io_tlb_mem(mem, __pa(tlb), nslabs, false);
 
-	io_tlb_default_mem = mem;
 	if (verbose)
 		swiotlb_print_info();
 	swiotlb_set_max_segment(mem->nslabs << IO_TLB_SHIFT);
@@ -304,26 +303,24 @@ swiotlb_late_init_with_default_size(size_t default_size)
 int
 swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
 {
-	struct io_tlb_mem *mem;
+	struct io_tlb_mem *mem = &io_tlb_default_mem;
 	unsigned long bytes = nslabs << IO_TLB_SHIFT;
 
 	if (swiotlb_force == SWIOTLB_NO_FORCE)
 		return 0;
 
 	/* protect against double initialization */
-	if (WARN_ON_ONCE(io_tlb_default_mem))
+	if (WARN_ON_ONCE(mem->nslabs))
 		return -ENOMEM;
 
-	mem = (void *)__get_free_pages(GFP_KERNEL,
-		get_order(struct_size(mem, slots, nslabs)));
-	if (!mem)
+	mem->slots = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
+		get_order(array_size(sizeof(*mem->slots), nslabs)));
+	if (!mem->slots)
 		return -ENOMEM;
 
-	memset(mem, 0, sizeof(*mem));
 	set_memory_decrypted((unsigned long)tlb, bytes >> PAGE_SHIFT);
 	swiotlb_init_io_tlb_mem(mem, virt_to_phys(tlb), nslabs, true);
 
-	io_tlb_default_mem = mem;
 	swiotlb_print_info();
 	swiotlb_set_max_segment(mem->nslabs << IO_TLB_SHIFT);
 	return 0;
@@ -331,18 +328,23 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
 
 void __init swiotlb_exit(void)
 {
-	struct io_tlb_mem *mem = io_tlb_default_mem;
-	size_t size;
+	struct io_tlb_mem *mem = &io_tlb_default_mem;
+	size_t tbl_size, slots_size;
 
-	if (!mem)
+	if (!mem->nslabs)
 		return;
 
-	size = struct_size(mem, slots, mem->nslabs);
-	if (mem->late_alloc)
-		free_pages((unsigned long)mem, get_order(size));
-	else
-		memblock_free_late(__pa(mem), PAGE_ALIGN(size));
-	io_tlb_default_mem = NULL;
+	tbl_size = mem->end - mem->start;
+	slots_size = array_size(sizeof(*mem->slots), mem->nslabs);
+	if (mem->late_alloc) {
+		free_pages((unsigned long)mem->start, get_order(tbl_size));
+		free_pages((unsigned long)mem->slots, get_order(slots_size));
+	} else {
+		memblock_free_late(__pa(mem->start), PAGE_ALIGN(tbl_size));
+		memblock_free_late(__pa(mem->slots), PAGE_ALIGN(slots_size));
+	}
+
+	memset(mem, 0, sizeof(*mem));
 }
 
 /*
@@ -682,7 +684,9 @@ size_t swiotlb_max_mapping_size(struct device *dev)
 
 bool is_swiotlb_active(struct device *dev)
 {
-	return dev->dma_io_tlb_mem != NULL;
+	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+
+	return mem && mem->nslabs;
 }
 EXPORT_SYMBOL_GPL(is_swiotlb_active);
 
@@ -697,10 +701,10 @@ static void swiotlb_create_debugfs_files(struct io_tlb_mem *mem)
 
 static int __init swiotlb_create_default_debugfs(void)
 {
-	struct io_tlb_mem *mem = io_tlb_default_mem;
+	struct io_tlb_mem *mem = &io_tlb_default_mem;
 
 	debugfs_dir = debugfs_create_dir("swiotlb", NULL);
-	if (mem) {
+	if (mem->nslabs) {
 		mem->debugfs = debugfs_dir;
 		swiotlb_create_debugfs_files(mem);
 	}
@@ -754,10 +758,17 @@ static int rmem_swiotlb_device_init(struct reserved_mem *rmem,
 	 * to it.
 	 */
 	if (!mem) {
-		mem = kzalloc(struct_size(mem, slots, nslabs), GFP_KERNEL);
+		mem = kzalloc(sizeof(*mem), GFP_KERNEL);
 		if (!mem)
 			return -ENOMEM;
 
+		mem->slots = kzalloc(array_size(sizeof(*mem->slots), nslabs),
+				     GFP_KERNEL);
+		if (!mem->slots) {
+			kfree(mem);
+			return -ENOMEM;
+		}
+
 		set_memory_decrypted((unsigned long)phys_to_virt(rmem->base),
 				     rmem->size >> PAGE_SHIFT);
 		swiotlb_init_io_tlb_mem(mem, rmem->base, nslabs, false);
@@ -781,7 +792,7 @@ static int rmem_swiotlb_device_init(struct reserved_mem *rmem,
 static void rmem_swiotlb_device_release(struct reserved_mem *rmem,
 					struct device *dev)
 {
-	dev->dma_io_tlb_mem = io_tlb_default_mem;
+	dev->dma_io_tlb_mem = &io_tlb_default_mem;
 }
 
 static const struct reserved_mem_ops rmem_swiotlb_ops = {


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:28:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:28:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151322.279666 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0l7g-0000p9-Dr; Tue, 06 Jul 2021 13:28:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151322.279666; Tue, 06 Jul 2021 13:28:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0l7g-0000p2-Ar; Tue, 06 Jul 2021 13:28:24 +0000
Received: by outflank-mailman (input) for mailman id 151322;
 Tue, 06 Jul 2021 13:28:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0l7f-0000ow-FB
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:28:23 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.166])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08c555f8-de5e-11eb-8495-12813bfff9fa;
 Tue, 06 Jul 2021 13:28:22 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx66DSGRuY
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 15:28:16 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08c555f8-de5e-11eb-8495-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625578096;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=keEoc9pnTcE1ukWo5zDM6C3DeuCpR3KKawt1PkRpVP8=;
    b=V4aNkEcaxnnTjyPS+ekm6O22DdIQP+l0ld9p+RrjEh5OOMnIHRUsQWrZ7xfcXcQw8G
    weC5q7HyoAYPYUz7acVBYV2KzpbC1dDwhT31iFPwJZt8zHUGXSEjeO6dLC9et27X/nhf
    uec2Nu1il+lZlJRWJ3/aJNhl+Mzv2NX1PUcHovrDLXOj7pzATkAJi9OUL9gdDFnW6XCP
    kM1HssbMhd3ZYk3p8pzRkLWXAYfU/Gf2hngeq+fiYIftDR3F/Vmv3geQWkqbk5Pz9E5X
    9njYjNMQZcjkOv6hjhdQ0lMx8/jEYyi/DFYdnob8L/1MT2qONje/BLSinI+zsqiMSXHQ
    SfCg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 15:28:09 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
 <jgross@suse.com>, Jan Beulich <JBeulich@suse.com>
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
Message-ID: <20210706152809.49394c1c.olaf@aepfle.de>
In-Reply-To: <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
	<20210706112332.31753-3-andrew.cooper3@citrix.com>
	<20210706145804.1ab98f16.olaf@aepfle.de>
	<902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/TNOc=r3bKXAGT0UGBrhJhvK";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/TNOc=r3bKXAGT0UGBrhJhvK
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Tue, 6 Jul 2021 14:19:21 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> > 20: faults=3D 0 dirty=3D 80 =20
>=20
> What is this showing, other than (unsurprisingly) faults doesn't work
> for an HVM guest?

The dirty count goes down after a while for a domU that constantly touches =
as many pages as it can.
But yes, the current code uses stats.dirty_count in a number of places.
It seems all of the usage is just for reporting, so if these code paths wou=
ld get wrong input nothing bad happens.
precopy_policy may indicate more or less iterations, this is not critical e=
ither.

Olaf

--Sig_/TNOc=r3bKXAGT0UGBrhJhvK
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDkWmkACgkQ86SN7mm1
DoB8xRAAn9Gov/ba+f5N+h/BjGzrVVjG8UW9fREFzrwz49sPF/03CpAEmGKlYXf4
OpFFs07ySTfv9ncXqj/9rmpB5dSc8aj9kVmo6gjrTvM8+WmsaUxp5vg8/p+/xQMW
nq5EaYUCyj5pvR8U5qbnBxM2ogyoOSIYDrDq+iZBDMR6vxQpUZ5Gs8iKQgT8OGgl
jqKjgP2epwjARwyzPMZg/zDbaivm6F6QZ1wq/lPUG2mmHrenRwm+j9+Ye+hohxZL
LQw5XioXcBvMd55DlpO0tXCkAD4/1/OB9vmvb1N8dm2EtkwBXgSNMowkY9FwsOJ2
pQYoTLhRN/jZBx0tUgWKFJOdYQ+OlljV5u9fH1eqeFI+3NfMX7JoZfQCfarddcBM
Bhk9s3dx9CxNyH5QZjAfaFjAVOuNbyKSC3DWxA+jny4mtW+uXpYlRYt5ffANPJlN
iZJHcpVerlTxQgKKCDTCR4vYhCqHyxS1ijIsQH0VJoYHULp/U8doBp//cilzEjqw
7Jei1IgD+F0jr8YII65LGx9rhguEZk01qljHQh/+TCb0iZsUPaG2UEMmRidKbo2t
8lrgtEnKqZtJ66BqaK7B4nnCN0nrL3TYcszO6NFBOW2AxKcaALG6H+pjqaBF5qNo
eViSDJalH42diX3Glrn5l0ScRlu+opV8UjVioXoNNxBBgu5vZPE=
=QKX3
-----END PGP SIGNATURE-----

--Sig_/TNOc=r3bKXAGT0UGBrhJhvK--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:35:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:35:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151329.279677 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lEO-0002DK-6S; Tue, 06 Jul 2021 13:35:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151329.279677; Tue, 06 Jul 2021 13:35:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lEO-0002DD-3N; Tue, 06 Jul 2021 13:35:20 +0000
Received: by outflank-mailman (input) for mailman id 151329;
 Tue, 06 Jul 2021 13:35:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0lEN-0002D7-1o
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:35:19 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 66338781-a714-4c8f-9cfd-9b59613fca82;
 Tue, 06 Jul 2021 13:35:18 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 66338781-a714-4c8f-9cfd-9b59613fca82
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625578517;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=mWkt11idTzMY9cbMcNBR/8emjtRf/WHq12biu5kQa7o=;
  b=Gj5LXnOYCgE3q7N/fL+p4Z7WPga9YWgK69VFhouSFYoL2MMIIc39K7kr
   Dyk4Up6AmnJbu8kkAsHNEHZ97hs8CXd5aN3bsjTXcD9YOflOTTEhBIzSp
   42qRg7glRynVj+2MA8vX5zoA6z79MqqjJQSHESiiIVU5vTD9vPtu3A/cm
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: i1rbDAP62lEWqbKwv5cCm2jtkPfQvq/GyrkwSmcYBY0NAtqzUMoqS2HCDd+Hu0jnyJoJV0l7S4
 x3LmqMaAzK33O1Wc3xeVMOsRs1YZ+B29743w1lripUKiA5chjZlYnY4mUoUlDHKHMVMT9jqEIb
 oW9Ka/Zwwnk0QblMFq3ecX2yXP5VqklxR2cXkhFVyLS9wTCdC/Rlx4MvzLmwIov8+1+WXBLjz3
 L4UZP+M/0wktknibWcgKCn9iUQdEaj1DASdIUhJ/taHQD7T0JQ7/MOvfbHWi1XrJCy0bDNRMv+
 0TI=
X-SBRS: 5.1
X-MesageID: 48023482
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:64bqpKHRnhoyQ1+HpLqFHZHXdLJyesId70hD6qkvc3Nom52j+/
 xGws536faVslcssHFJo6HkBEDyewKiyXcT2/hsAV7CZniahILMFu9fBOTZskXd8kHFh4lgPO
 JbAtJD4b7LfChHZKTBkXCF+r8bqbHtmsDY5pat854ud3APV0gJ1XYJNu/xKDwReOApP+taKH
 PR3Ls9m9L2Ek5nEPhTS0N1EtTrlpnurtbLcBQGDxko5E2nii6p0qfzF1y90g0FWz1C7L8++S
 yd+jaJqZmLgrWe8FvxxmXT55NZlJ/IzcZCPtWFjowwJi/3ggilSYx9U/mpvSwzosuo9FE2+e
 O87ysIDoBW0Tf8b2u1qRzi103LyzA18ULvzleenD/KvdH5bChSMbsAuatpNj/ir2YwttB116
 xGm0iDsYBMMB/GlCPho/DVShBRkFauq3ZKq59Ts5Vma/pdVFZtl/1bwKsMe61wWB4SqbpXXt
 WGNfusp8q/KjihHjfkVgAF+q3eYpwxdi32CnTq9PbllQS+p0oJu3fw8vZv10voxKhNPqWs2N
 60RZiAtIs+BfP+PpgNTtvof6OMexrwqFT3QTuvHWg=
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="48023482"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fDx3V0OQVDuZ50smOxfa5R5kJaQ67FEJNCW6aEqhb5YsC04RkrFbx7f9qVIq+3tCQs/Q8sm/sECD5re6+FIZIi2OtpJ29F3bmB+uxIIp5eG44164OG4lWxJd/FzC8iV1n0aSG67KL4YLi3VgcgiNenrx3UkEeXAY/dNhluDAXsYuOJgrajaTpVYwaPL/PfXLI2P/nDoT6z16YV0+JR/aTlhOuHySbBqDsVx+Sp78EpxRZHdiqzDpHMPk1wIKxmQAeypl5j/7pSZGBOjDajAksnBX0mqS7rdDwqym3DrINaeA/Wh8MyN3EAT4JNTb1LcAiWsAoPlcd3O1EzeoN0eZew==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=s+V3zJu17mw4cxKdyPeOkHXZe+pHkyctt/iMfwee90I=;
 b=jayufHs9Wp7GeR+4WxDN6CiFSubUPpdD5tweJxphQJLVDUQKL/UJy/8P2uJcY9az0FVUmgpsC24Z6YGIAmeE6kLj3LUb/lq7ly5wqkjLQWptLgqEjPyl32okJdOz+ssEeRrpJCK+35ZLm+8HT6fCvq30aNJpbIYWqhSh9LpPrwB/YQjseuvrAtMwDwpv78RP9daipxRzaG5iBcFjm41yxvHJNpzD9FXM+889ruE0SZ4lM+J55pTWGueYg/QHvjiD4JIsGHHSTpJcZ1+d4rzQeCWhVTP7wEl/YeB0K6oY5PshJPZbY3lLUPbvoZZaDM4lklUBsHEdoTmhc8C9IAelWg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=s+V3zJu17mw4cxKdyPeOkHXZe+pHkyctt/iMfwee90I=;
 b=q+/yJObsFfv2xFLKgb/YEiD2aiL65Ds7639O7gRyExYDUQ20qdkwXyxTN+PgCAoVViyGWbP0XwfeX8EArxYtG1p3CiWFg19cgIMKe4fdhyR3BZv/VrHmI8ynXcWVHJi0BMD/03QnP3JPJ5v9PIgqWtjAqlIjZ3Hmyc764+6LBAc=
To: Jan Beulich <jbeulich@suse.com>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
	<jgross@suse.com>, Olaf Hering <olaf@aepfle.de>, Xen-devel
	<xen-devel@lists.xenproject.org>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <d5bb77be-b557-3587-6cbc-3e427104c55b@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
Message-ID: <6e5bb79a-1f90-257f-a90d-374cb206093a@citrix.com>
Date: Tue, 6 Jul 2021 14:34:45 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d5bb77be-b557-3587-6cbc-3e427104c55b@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0022.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:151::9) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fdd8f725-97e0-4293-eb3a-08d94082d4f7
X-MS-TrafficTypeDiagnostic: BY5PR03MB5079:
X-Microsoft-Antispam-PRVS: <BY5PR03MB5079BF6C80A0CD99B624B978BA1B9@BY5PR03MB5079.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: IB8IHEqMFy8knuPa+HNB5egY3XQbmKY6u6scd0JLYTsXzBc2t0iGEhdydYootj9+12a1iueSlfbI1thgOT5TK5jzAB4PnOIcR1T/jklD40hJVmCT/Gkud4LkNLQ34Tl8BTDAw9xSH5IH3ASbRkiEQnBcL98VBlFRF+/EkMhGj51dAo3BIImkjP19zBRnIGGjm41Rz3mr3Oi1PZ9fu/W28ioXXa3N4nTwpN5UKaOyD975SnLfIvnluThvxZXPxbRyZ6vzf3jeYTylkkoyp9gPBPQC4bi4r8d2OzJGAsqSQsXRHE1l9TE3Y2WEQxCCBnciEAf65koFmlkhoah5rxevLxLuz86/v5J6nPHGBc0ve5eUs1uX2xX9oFII4YCARekzFbFsjm10QpeDpXSUR2u80qPGDIW/+F6wVm979atP4SzuGYxwp3Sb8O+nfaEOMwKiK4FbHEFtXF3jeI7B2rxxvIMole8avsS+k7QIsaiUENYhMhglCNRtAh9mDQzNP9B3sYVi+aTQ7C2xSc+AQZVjl8+qginBRKhTK/oXYbh/MgxhB6Gw5UYrwBBiv+aMvE4uErOFqIobUbgj83umAJjcDvKpYIkn3oS4cosDJGadENc0CbcgD2LSqyUeI1JI5t1TSkV1BCJR49guntxSrbd5e4YnNB8MjAtGNBHVSnsjP0uIZa9p6WPycoJ7+PmvFzV/lU0HfFL1F/zcM+m2e2yfF+mJ2i4te/nGALI9YLv8O0E7fYvqPSlK/yoMYpxQ2L6Yyd6Jm0pkHetT5nCWOgrClg==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(396003)(39860400002)(136003)(376002)(36756003)(8676002)(26005)(6486002)(956004)(31686004)(31696002)(83380400001)(86362001)(8936002)(186003)(66946007)(2616005)(53546011)(38100700002)(5660300002)(66556008)(54906003)(4326008)(6916009)(66476007)(6666004)(478600001)(316002)(2906002)(16576012)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?guY/fbT3gsoUe2ddR91Oo/322lqnSSvpHw6gQ5d?=
X-MS-Exchange-CrossTenant-Network-Message-Id: fdd8f725-97e0-4293-eb3a-08d94082d4f7
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:34:51.3878
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: DJug7SeuZIKB7ZfhapoMJ7fv4B7p9CtHSno1FAA0YvnnnQ7pHOoXsO7IY60B9udnUBadNQGXSDRCJgyfKwJbfoA7yiy+9HClaD0Kz6YwduA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5079
X-OriginatorOrg: citrix.com

On 06/07/2021 13:03, Jan Beulich wrote:
> On 06.07.2021 13:23, Andrew Cooper wrote:
>> 'count * sizeof(*pfns)' can in principle overflow, but is implausible in
>> practice as the time between checkpoints is typically sub-second.
>> Nevertheless, simplify the code and remove the risk.
>>
>> There is no need to loop over the bitmap to calculate count.  The number=
 of
>> set bits is returned in xc_shadow_op_stats_t which is already collected =
(and
>> ignored).
>>
>> Bounds check the count against what will fit in REC_LENGTH_MAX.  At the =
time
>> of writing, this allows up to 0xffffff pfns.
> Well, okay, this then means that an overflow in the reporting of
> dirty_count doesn't matter for now, because the limit is lower
> anyway.
>
>>  Rearrange the pfns loop to check
>> for errors both ways, not simply that there were more pfns than expected=
.
> Hmm, "both ways" to me would mean ...
>
>> @@ -459,24 +462,20 @@ static int send_checkpoint_dirty_pfn_list(struct x=
c_sr_context *ctx)
>>          goto err;
>>      }
>> =20
>> -    for ( i =3D 0, written =3D 0; i < ctx->restore.p2m_size; ++i )
>> +    for ( i =3D 0, written =3D 0; count && i < ctx->restore.p2m_size; +=
+i, --count )
>>      {
>>          if ( !test_bit(i, dirty_bitmap) )
>>              continue;
>> =20
>> -        if ( written > count )
>> -        {
>> -            ERROR("Dirty pfn list exceed");
>> -            goto err;
>> -        }
>> -
>>          pfns[written++] =3D i;
>>      }
>> =20
>> -    rec.length =3D count * sizeof(*pfns);
>> -
>> -    iov[1].iov_base =3D pfns;
>> -    iov[1].iov_len =3D rec.length;
>> +    if ( written !=3D stats.dirty_count )
>> +    {
>> +        ERROR("Mismatch between dirty bitmap bits (%u), and dirty_count=
 (%u)",
>> +              written, stats.dirty_count);
>> +        goto err;
>> +    }
> ... you then also check that there are no further bit set in the
> bitmap. As said elsewhere, I'm not convinced using statistics as
> a basis for actual operation (rather than just reporting) is
> appropriate.

I'm not interested in inference based on the name of the structure.

>  I'm unaware of there being any spelled out guarantee
> that the numbers reported back from the hypercall are accurate.

The live loop uses this information already for this purpose.=C2=A0 If it i=
s
wrong, we've got bigger problems that this.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:38:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:38:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151335.279689 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lH7-0002rc-La; Tue, 06 Jul 2021 13:38:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151335.279689; Tue, 06 Jul 2021 13:38:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lH7-0002rV-IJ; Tue, 06 Jul 2021 13:38:09 +0000
Received: by outflank-mailman (input) for mailman id 151335;
 Tue, 06 Jul 2021 13:38:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0lH5-0002rP-SY
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:38:08 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.21.68]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6a31b604-187d-4ddd-aedc-891fc8eb7a9c;
 Tue, 06 Jul 2021 13:38:06 +0000 (UTC)
Received: from AM6P192CA0069.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::46)
 by VI1PR08MB4205.eurprd08.prod.outlook.com (2603:10a6:803:e1::12) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 13:38:03 +0000
Received: from VE1EUR03FT009.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:82:cafe::30) by AM6P192CA0069.outlook.office365.com
 (2603:10a6:209:82::46) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend
 Transport; Tue, 6 Jul 2021 13:38:03 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT009.mail.protection.outlook.com (10.152.18.92) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 13:38:02 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Tue, 06 Jul 2021 13:38:02 +0000
Received: from b07ebfc363ba.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 D51EEE1D-976F-4A2A-83AF-B5F43B0361FB.1; 
 Tue, 06 Jul 2021 13:37:33 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b07ebfc363ba.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 13:37:33 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PAXPR08MB6720.eurprd08.prod.outlook.com (2603:10a6:102:130::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Tue, 6 Jul
 2021 13:37:23 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Tue, 6 Jul 2021
 13:37:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6a31b604-187d-4ddd-aedc-891fc8eb7a9c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ByzAYF9Hgbj+GfgAXiW0e6h+IPSJGdCZi+t1r6SSpH4=;
 b=rM39+7GUghlcQaS9igZC7kHFUTlruFvWzMk8UuufrFqQ5IwEBCAqQY+kwGxwxysCpQl5OyXNq63gqWePOTmDBi32wgE0z15P7+haYSZpz3jvYK31hzySPXHwWzy9WZCCYltIUb9Oqzu0oKLctbNi47OyQ0kWsQDomTp5umdCEYI=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 353a7205e2d00aa4
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XNH64i51YcLuJgW1kZWiWsOg5CtynDupEnKf54VJsJLWwEfi9IoXl+HS+LjnYEf0WYG00EPROFBKiHGjRLQLAAc+hVU5sevzMR1UknKhl94KGIAcSpCfnaUE4HGFWyFk1dOLG+LKzd9LjH4xI5LcAUt+8kbBgDDkrHQrScaBbl+XVY2tg9x+Ncim8dEGo0myo6K7/dk6WpZujFGmvMmEwSQVyiqQn3X/2iqDy/ULM3pK0i0lm+08iFqG6w2nb/XuzSt/Z0XFcerRIvwvfKgiS3Siy6MhU4S2NC9JKBoz2yDuhRQDvNO79OnKEMHhkgnYkd4iZKqo4pOXCqziSaDYCw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ByzAYF9Hgbj+GfgAXiW0e6h+IPSJGdCZi+t1r6SSpH4=;
 b=KrTcZFaGCAtF4cs67uF90LlxJI69C1TgT8vFyRznFlyBpSVuo3Tp3do+OxdWTbQLRshR9M8MlBGhoK6hwN6lU0F1GXXl9fuPu+ugau8Kyy3tQRbH9/OIYV5oFFnc+AUPt5/tvHTL/jMFzQY5P2VWtn3zI0w/ljoO5A9VkgyBqB6gP0yL5cBgBbhpytj79m3w0ckM7m+Nw2TQ1IcTQgB58l5MxjONUwlIyOk9Ec43AJpBwmx9xmKLq4jnSTycNLPOa8CgkmKtimKqfXSnr9esoGFtv6spc813nWglmsgrng10ghsfxtl4c4QTGp6GlwT/uEU3edEZLwj2Su/R/RPT0A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ByzAYF9Hgbj+GfgAXiW0e6h+IPSJGdCZi+t1r6SSpH4=;
 b=rM39+7GUghlcQaS9igZC7kHFUTlruFvWzMk8UuufrFqQ5IwEBCAqQY+kwGxwxysCpQl5OyXNq63gqWePOTmDBi32wgE0z15P7+haYSZpz3jvYK31hzySPXHwWzy9WZCCYltIUb9Oqzu0oKLctbNi47OyQ0kWsQDomTp5umdCEYI=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Julien
 Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, Wei Liu
	<wl@xen.org>, Michal Orzel <Michal.Orzel@arm.com>, "olaf@aepfle.de"
	<olaf@aepfle.de>
Subject: Re: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
Thread-Topic: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
Thread-Index: AQHXcmnBkkOFPux/UUWwb2d+hr5YRqs180IA
Date: Tue, 6 Jul 2021 13:37:23 +0000
Message-ID: <C830D549-EA52-4E06-B0F9-B3B1E8DDEAFC@arm.com>
References: <20210706132000.29892-1-julien@xen.org>
In-Reply-To: <20210706132000.29892-1-julien@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: a9169192-964a-4f78-faaa-08d940834734
x-ms-traffictypediagnostic: PAXPR08MB6720:|VI1PR08MB4205:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR08MB4205F4049C28A7A0630452C59D1B9@VI1PR08MB4205.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 Hdz+o8IJSwzbY223AY0C+qQyzY1WWCZFOqM/Gd/kkBe7NA359nmFuoaMd5fR/DmRJiyVyn4ZtwSLuXhzQBZnlS/Ry0hVKqsxQgkNF+nIkub5Kc6ElSKylYrUu8kUDvkJBkn+rfNkVHrw1POLwyUuvb11rZ+GVR0EPmBx9y3CYgS81EsFiVGywrl7kDN1d8oeeDeYSt62KNodf7qODRmo8L8MwHvd0X02gSlFRxQ1ShY2q+QZQSamtu0n/Uw/JJo18yPz8eY0yIBDCsjaXEpUk/incO0Hjqxxc3fUax+Dn1LYYlJpgNO6RZd5K5h5iELLdhMzS2PDmki2FTSsOTaS4mmUiTjv+ByaRxFVLldB1Xl70pTzHNGpfzvWS/kOGsuIb82x78f7dYWsckYGOL4SHjNlq66dVJ2binic0HDgvY0co8dTT+d5RHqs0axeNMNwP25LmmXCXV+Hl7Pv943uyjaettZDW3Jwkz2O0Z8zB4+fpRkl/+NQuQLWEwAnuuR3M1iq0eXKv1+qdTx/5g5GVQk9I9yA1tGphOe2YZ9QS+S4nFKw1C/DRTt1B6gKqt7Qbw2eT11xlCbM5wYGtiEHoNBjoi9kPF75zGXTNzOlTPOiJ4shifhI2IhW/DpyEUys9XizMu7JHsFf6hKg8OjM/yC7akCf2evD5BR7vp4fIaeXZ1xsN1Fe0sJETsMf8BdKxmi1xoxTOWHefs6H+S8ezA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(39860400002)(366004)(136003)(396003)(376002)(66946007)(4326008)(8936002)(66446008)(5660300002)(76116006)(83380400001)(54906003)(316002)(33656002)(6512007)(15650500001)(66476007)(2906002)(91956017)(478600001)(6916009)(66556008)(186003)(64756008)(8676002)(38100700002)(6506007)(36756003)(53546011)(26005)(122000001)(71200400001)(6486002)(86362001)(2616005)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?CElxRES/VQez+JIkKXfaafOP/xcGRrpAEgc5sTdUUFfsST/yQ4l/qZS7wlxV?=
 =?us-ascii?Q?pYKsEMFT49JfHv+shEG2C/QGV4xnRDHB4ivc44AKFDZbPLkNMRcLmU7TaQN6?=
 =?us-ascii?Q?6/PT4W7wILV6VZrgoMPH7ti0zKXlpmoJNE1WgMbu2KSoJKEgjkFf4u2u10rN?=
 =?us-ascii?Q?piMyHmmRv+l6yNsuDCCJPFIegI2a0JwGUfs5ZtV4jPBmYxeZAY1OtpdENdTw?=
 =?us-ascii?Q?I7xQ2JOBx31VAFnmycdzEInjohh+oPoH3xW2cW5D813sP5T/YJLfdw1/0ALP?=
 =?us-ascii?Q?Me9Fm14I5t/vgNIIqMvNNmQXUMcgqPDGPUoQ/iLVzkWHiukkURLTu63+BpC0?=
 =?us-ascii?Q?X8HzwUQTAbhmsnAk8GZJ91juEtZIv9gPhDYSDcTSTQdk/ofb7vCNuiU9avAY?=
 =?us-ascii?Q?kNKxwdQAnoASfNSNLslJ6NPHxxPfyMyVp7G+LCIPVPLIjJ/UlsA2OZWLfXtg?=
 =?us-ascii?Q?HkqXGdm4iWUuhsgcynIIXJRZi7zlBI+pLDO5LtWZijMXb057YnROlWrmHXE8?=
 =?us-ascii?Q?dJtsJ3NN8gmHV9DlAE1bmZwBp98MRRZLxrZQYA7AxfSXeThpcaChIu3lIT9i?=
 =?us-ascii?Q?01wromflKNgG0Mo0WkJs2EMT2C9q6OAcAbw2fU/Ja4aTXIZdelFuEMZsW6FB?=
 =?us-ascii?Q?YNQLopn4xDf/shknOYXUnF0gfL9/+TU7s3J3EvUYcfPkL/rkhuhTtBaoO1SO?=
 =?us-ascii?Q?YhyiX8J1cwc7B0/83Ue+YItaz8SR+xnwcRiHabKf6tZEg3EfyfMahVmuQqEf?=
 =?us-ascii?Q?lRS30G6NBpjPUr9uUKrAIZ2+bpHMfdjKZ08AohhQRbwf7MJaGNHFChHkFxcz?=
 =?us-ascii?Q?w0j0vS73BmaR8iAJGasn+HOWHxmEj+pdip6FxVrccm6K5JMhU+kx0scqCSOi?=
 =?us-ascii?Q?oxa3GYU1dB/0Hdxf290A9DTcx+gUOXqc51LByFaDv0vYP0Go/d69BEKaB2kr?=
 =?us-ascii?Q?zd76zoyWg3NVQF7/0tQFy2p8ktPyfSJpd3Yt8jD6W8eQSHCHA9XlDn7Otg5W?=
 =?us-ascii?Q?URk2NoWSm8ZxLi9zs6TWQ1yAkGtTP6stIfG40X8pxIcxk23F4UzdYl4gxF+f?=
 =?us-ascii?Q?KIc1uGR7C++GuLRVVwTb7HMPMEHFrVxS25aWh6nVFEZdxvK9gXk/rvp4aKrJ?=
 =?us-ascii?Q?z/2QZiVs2VAlV+64MeXQBJATxDuvxGkTKeOlCklFYASxdt6Cy1TWaxp3lCoG?=
 =?us-ascii?Q?p22DArNcBng9zAs9gscIWi76wXdXATmcX+f6VTqUA9QT89mGCHwXAP5wE+xu?=
 =?us-ascii?Q?0xy/JrCCvn1c3x188WXYKlAcSQU6B64IogOJ4phErEuF5qo74xC3NFwCE0mY?=
 =?us-ascii?Q?LNx+8vo76cwgTPUxKYfjmA7E?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <85BC69CE5F04144FB728481695A32E3A@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6720
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT009.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	823dedeb-4531-474c-b5af-08d940832fe6
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	7gxcJvujqCvOrgG32N/dmc79psZC3U+5tlHeM6eu66Sf55xnYSi9PIrOtISKEhLCrTGVOS4W7TMMU2fOf93R/Sc/ZDUkngHNEGGY5pc7HYZ74m6kfh3tkMEQmimhpzzswGFkxte5iAOjFmgobkESz63jKHQkA5/14XxbZmLmE9SF4hBMd2a1mBDyw38K3lZlbOttYF0ly1wvOkASv0FE2n1ezwJYIOgnZjYMhMh0amHqxtQtDJd0Yd6GkbddpWRebCl+kmo84irPx3XbmjJeX6/SdfuuU85+sy5H1gQfzWnJ6Au8Ipu2QODK1sgF2aQJNK42GRcr6ROKhjy4nMyc6LUWl3IVLb3tneK8A2hyDsjHJXwE0htCjPW5wmzT0WWojJuCUYFVVUHHzsW7QCwcNpUZP2fXhhz2zblxLv+LXNpQgEHuNUgTAWxAmFLwZPzVGbJD6eS/cyvucl/zz9h2JMjluBUmUJPxqRTTuZF7I5It9jbr9AGWhbqVePMvopvc8HXOPD9O1XlcL9AThNeBe48J0rYZZ8oebsWK/PTafZ2I7D0YN02mTzLaGR33ePAB2EDW+EF5OGYzpFS2gLt4YyLVAG2M/+VE5L15areLmgUubBkhNdF48XoMPZDLfSLhg9IjwC/kyzD5kiLH/EPU63EadBGGblvmeeAZHTS9G+4pR2mm0cWJ1lAxDcRIop8CN6GaaMfRHFyXkJcRqZZPaA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(39860400002)(136003)(346002)(396003)(46966006)(36840700001)(4326008)(53546011)(86362001)(81166007)(83380400001)(6506007)(316002)(82310400003)(36860700001)(33656002)(54906003)(336012)(356005)(82740400003)(47076005)(15650500001)(6486002)(2906002)(26005)(478600001)(2616005)(36756003)(70206006)(8676002)(6862004)(70586007)(107886003)(5660300002)(186003)(6512007)(8936002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:38:02.8034
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: a9169192-964a-4f78-faaa-08d940834734
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT009.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4205

Hi Julien,

> On 6 Jul 2021, at 14:20, Julien Grall <julien@xen.org> wrote:
>=20
> From: Julien Grall <jgrall@amazon.com>
>=20
> Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
> uint64_t") updated the size of the structure vcpu_guest_core_regs and
> indirectly vcpu_guest_context.
>=20
> On Arm, the two structures are only accessible to the tools and the
> hypervisor (and therefore stable). However, they are still checked
> by the scripts in tools/include/xen-foreign are not able to understand
> that.
>=20
> Ideally we should rework the scripts so we don't have to update
> the size for non-stable structure. But I don't have limited time
> to spend on the issue. So chose the simple solution and update
> the size accordingly.
>=20
> Note that we need to keep vcpu_guest_core_regs around because
> the structure is used by vcpu_guest_context and therefore the
> scripts expects the generated header to contain it.
>=20
> Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64=
_t")
> Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

But I have other issues now:
xg_dom_arm.c:143:15: error: format '%x' expects argument of type 'unsigned =
int', but argument 3 has type 'uint64_t' {aka 'long long unsigned int'} [-W=
error=3Dformat=3D]
  143 |     DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx32,
      |               ^~~~~~~~~~~~~~~~~~~~~~~
  144 |            ctxt->user_regs.cpsr, ctxt->user_regs.pc32);
      |            ~~~~~~~~~~~~~~~~~~~~
      |                           |
      |                           uint64_t {aka long long unsigned int}

We will work on a patch to fix those.

Cheers
Bertrand

>=20
> ---
>=20
> Cc: michal.orzel@arm.com
> Cc: olaf@aepfle.de
> ---
> tools/include/xen-foreign/reference.size | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>=20
> diff --git a/tools/include/xen-foreign/reference.size b/tools/include/xen=
-foreign/reference.size
> index a0409db5c458..11a06a7a432c 100644
> --- a/tools/include/xen-foreign/reference.size
> +++ b/tools/include/xen-foreign/reference.size
> @@ -4,8 +4,8 @@ structs                   |   arm32   arm64  x86_32  x86_=
64
> start_info                |       -       -    1112    1168
> trap_info                 |       -       -       8      16
> cpu_user_regs             |       -       -      68     200
> -vcpu_guest_core_regs      |     304     304       -       -
> -vcpu_guest_context        |     344     344    2800    5168
> +vcpu_guest_core_regs      |     312     312       -       -
> +vcpu_guest_context        |     352     352    2800    5168
> arch_vcpu_info            |       0       0      24      16
> vcpu_time_info            |      32      32      32      32
> vcpu_info                 |      48      48      64      64
> --=20
> 2.17.1
>=20
>=20



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:38:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:38:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151341.279699 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lHZ-0003Ss-2p; Tue, 06 Jul 2021 13:38:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151341.279699; Tue, 06 Jul 2021 13:38:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lHY-0003Rq-Vu; Tue, 06 Jul 2021 13:38:36 +0000
Received: by outflank-mailman (input) for mailman id 151341;
 Tue, 06 Jul 2021 13:38:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=i6NH=L6=tklengyel.com=tamas@srs-us1.protection.inumbo.net>)
 id 1m0lHY-0003Fr-4o
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:38:36 +0000
Received: from MTA-11-4.privateemail.com (unknown [198.54.127.104])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 45e2b9e6-4ce4-4322-b839-e88a125c7bdc;
 Tue, 06 Jul 2021 13:38:29 +0000 (UTC)
Received: from mta-11.privateemail.com (localhost [127.0.0.1])
 by mta-11.privateemail.com (Postfix) with ESMTP id A386F800C7
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 09:38:28 -0400 (EDT)
Received: from mail-wr1-f45.google.com (unknown [10.20.151.225])
 by mta-11.privateemail.com (Postfix) with ESMTPA id 6C437800C1
 for <xen-devel@lists.xenproject.org>; Tue,  6 Jul 2021 09:38:28 -0400 (EDT)
Received: by mail-wr1-f45.google.com with SMTP id p8so26144937wrr.1
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 06:38:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 45e2b9e6-4ce4-4322-b839-e88a125c7bdc
X-Gm-Message-State: AOAM5338AdTvB80sI9WByhiyZuIWTc+8jlif7i3Y+37mElRYGLw0Fsx3
	TovwXdl8mt/cLFRdVr1ZowufaTFvdVtREGOUM5k=
X-Google-Smtp-Source: ABdhPJw/9ImWBwnn8tzSBDR8GzQW68JW4j+LoPytlBLgbS/+zz+d0NngjsfeCIGYTYBNCZBo0TgBxAd0C5uPb8QXU5w=
X-Received: by 2002:a05:6000:1843:: with SMTP id c3mr22396115wri.301.1625578707119;
 Tue, 06 Jul 2021 06:38:27 -0700 (PDT)
MIME-Version: 1.0
References: <dea13187-04ce-9c1d-aa5c-e2cd0a7d42d9@suse.com>
 <932211b2-c3aa-17f6-9fed-ca762e189786@suse.com> <CABfawhk4N-KznkFhmk3Q749tTp3X+j0fCwDXooYZEDdfQ7Fchw@mail.gmail.com>
 <a95a3f1e-afa5-30b7-f2f9-2e0ba1808b94@suse.com>
In-Reply-To: <a95a3f1e-afa5-30b7-f2f9-2e0ba1808b94@suse.com>
From: Tamas K Lengyel <tamas@tklengyel.com>
Date: Tue, 6 Jul 2021 09:37:51 -0400
X-Gmail-Original-Message-ID: <CABfawhmC2oTyY+=_fYu8sbb9k3zd+oLLgc5EwLmXk71vSpeVmA@mail.gmail.com>
Message-ID: <CABfawhmC2oTyY+=_fYu8sbb9k3zd+oLLgc5EwLmXk71vSpeVmA@mail.gmail.com>
Subject: Re: [PATCH 1/2] x86/mem-sharing: ensure consistent lock order in get_two_gfns()
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, 
	=?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>
Content-Type: text/plain; charset="UTF-8"
X-Virus-Scanned: ClamAV using ClamSMTP

On Tue, Jul 6, 2021 at 9:14 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 06.07.2021 14:36, Tamas K Lengyel wrote:
> > On Tue, Jun 29, 2021 at 8:54 AM Jan Beulich <jbeulich@suse.com> wrote:
> >>
> >> While the comment validly says "Sort by domain, if same domain by gfn",
> >> the implementation also included equal domain IDs in the first part of
> >> the check, thus rending the second part entirely dead and leaving
> >> deadlock potential when there's only a single domain involved.
> >>
> >> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> >
> > Acked-by: Tamas K Lengyel <tamas@tklengyel.com>
>
> Thanks. Do you think I should queue this for backporting (once it got
> applied)?

Sure, considering it's a bugfix.

Thanks,
Tamas


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:39:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:39:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151346.279711 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lIg-00046w-Df; Tue, 06 Jul 2021 13:39:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151346.279711; Tue, 06 Jul 2021 13:39:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lIg-00046p-AY; Tue, 06 Jul 2021 13:39:46 +0000
Received: by outflank-mailman (input) for mailman id 151346;
 Tue, 06 Jul 2021 13:39:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0lIf-00046h-KK
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:39:45 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.165])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9f61522c-de5f-11eb-8495-12813bfff9fa;
 Tue, 06 Jul 2021 13:39:44 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx66DdcRy6
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 15:39:38 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9f61522c-de5f-11eb-8495-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625578779;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=Ow8/0SeTKlMbjhHQK5rVbSQQoxKu6szh8DJgSdjqW8Y=;
    b=JNBHV8EJbxlj7FETCPm1Pu8JM05BKQkfrYtv6TbjqJc0g8i2tB6K7j6A6RIMLignjE
    MRKCpWtH50XzaFb1Xg+ZuANw9RRfqURp30OVwfkeoh/1/lfWkt+gudkIt4JRqCsPIU64
    DV2udShK8v5I6yJukEZ6RwqFYrh2oE1iLTnXeqleq3ifz+X/M+8lVLrno4vbtvL/FxhO
    jZiR7GS07yJCo+h+J16PMRHwg3wzZ/pgQs9ExIzL1Phx4wPSiYd9Kkz6fz4PR9Ed7qlE
    01Dl3SSp9BltOqvutVnGuMF9jwu9+KxvQWTBxP1gsxzmPNXmt+pBS1BN7kFxlgbb9ItN
    pypw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 15:39:31 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
 <jgross@suse.com>, Jan Beulich <JBeulich@suse.com>
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
Message-ID: <20210706153931.67481153.olaf@aepfle.de>
In-Reply-To: <1fd51108-82d2-4605-5c37-410c3f4c65a0@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
	<20210706112332.31753-3-andrew.cooper3@citrix.com>
	<20210706145804.1ab98f16.olaf@aepfle.de>
	<902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
	<1fd51108-82d2-4605-5c37-410c3f4c65a0@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/3/ya=Q0GSez/PMlgaAvCmng";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/3/ya=Q0GSez/PMlgaAvCmng
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Tue, 6 Jul 2021 14:22:58 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> What hardware is this on?=C2=A0 i.e. is the Page Modification Logging fea=
ture
> in use?

At least it gets reported as VMX feature during boot, this is a CoyotePass =
system.

Olaf

--Sig_/3/ya=Q0GSez/PMlgaAvCmng
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDkXRMACgkQ86SN7mm1
DoDU8BAAnJXkyUixaIPaWhsifQ0KtklRosB25eBFyy0hfQ6ADlHFxsKQVJ7OvfFd
aCXnjWzHWd8FUHULKJd8mmn2oVoM4ZDsDSwddvz6akMfCRvuzdnNwo/FzKkHH6t6
/ls534APVHPgoZBvGBDw7HUGIFDFvFCDX+ZJlpxQt2yAJCeZYXbHk+einRmBLFw2
mI5uzZa4vtD2nVWdKXV1TwQ6ASsDmuq6hw26gcbKb9OS8wUWR/m5wKi2Vek39Ar6
3/5cDvfQujHxCijhz7Jxc6NV7wq+zb3PJasBT4OkFQCR+g0Eaomia66Bh0+mz8Sj
DxwsDojNIYxWaYuVshoCqFGApkIkxZOY+ItvTcmKN3AqtpVXSPUUMHOVYARquZJ5
9E5cS8Q3bsmKThycG/HgXJZsoUcC1Q1GpTUz6MJfDy+HPj7Rkp1p757JcgHc6XT9
g3sRZ5QBd5lSwXD7sAEv6POaBRjn3YnU8jl7cEgAOnNrEa2vCSG1a8HI72kESJnf
fUxX81XJY1+bVOmnMGnVGOYtoLa4eDLNCG02r1WVCgBCCMun9yI0LbWv4YnPD5DR
2wPhSa/ADsF1o6TSVLq6xeQCFwHhgbVwNxpa5s1hbNyaIStSzgLfuNuQ4f4VD1FV
vqfbT4wMQeHCMbcvqVfqe7BhbhRG6EHer9ggT90yZzCqCw/F8mc=
=8AfA
-----END PGP SIGNATURE-----

--Sig_/3/ya=Q0GSez/PMlgaAvCmng--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:43:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:43:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151354.279721 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lMY-0005WM-US; Tue, 06 Jul 2021 13:43:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151354.279721; Tue, 06 Jul 2021 13:43:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lMY-0005WF-RP; Tue, 06 Jul 2021 13:43:46 +0000
Received: by outflank-mailman (input) for mailman id 151354;
 Tue, 06 Jul 2021 13:43:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0lMX-0005W8-6s
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:43:45 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2db3bbbe-de60-11eb-8495-12813bfff9fa;
 Tue, 06 Jul 2021 13:43:43 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2db3bbbe-de60-11eb-8495-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625579023;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=hvgz3TEw802RHWWn/UX2yl5qNVaWV55FSONQ61nvLGU=;
  b=Mhu/zKo55wg3jpYLzCiWKIFAgLsLJHoDsyrH1Dr3P5iyun+4r8szNK+5
   IpamfboGJpLAeFhuBx7vvzty2yevCWwfQ7kBW2W78h2ce+alBPvsJwVGM
   gp+VPQb1EANbeHNG7lz7XVJUMz8tJZYO8hEmkaLuolqgkcGmj0oDlrkJz
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 6dqqENE+6v/S9yFXvC2xshjRvnEWl7M1MvQ3//3MNBTWvcfWNuVE/FQhv0RFgyju9tFI9BAX7x
 u8v6duw1SW41XzHA++ry3ThDmEnjAFk9xJ4eVCnoSq81pmiLpqlRbQHWeZ7RTE50S5YsCpxoGF
 EgCw+gtKHN9UdtByQz5pk4Kfj1ULX1XH+uYj9gt+9gO4y++7Cc5ssk/VxkwEg7AY17MmZQPS6s
 mOWjmNHb56PkbdZL+3UJ14GK4a5Qj0vujajUvje056K1B8/pd8GQLwG1DTSRTif8wuwFnk33lm
 LsA=
X-SBRS: 5.1
X-MesageID: 47637614
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:EFgyTqlWN0im+9cplD8d4chVdjDpDfL63DAbv31ZSRFFG/Fw8P
 re/8jztCWE6gr5PUtBpTnuAtj7fZrjz+8T3WB8B8bcYOCEghrPEGgB1/qa/9SIIUSXndK1s5
 0QD5SWY+eAdmSS4/yKnTVRa7wbsb26GKfBv4njJyAEd21Xg3oJ1XYANu6IencWeOFUbaBXKH
 KNjvAsm9K7EU57UizDbEN1OtT+mw==
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="47637614"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Hf4JgDHsXNTL4oZCWXdSQ3btbXDxCrnaqEXFNbL04NW/9If9ujuzYZColgb9uW0rR1XILRWkpsVLfuo1VH8msOX4gfVhy3Br8QGYDmHfCUAZK+cSpw/l/mn06qVSq70noT/fM3e9ZZ5U10w4HYQPB8Ww92DT408sI8AuV3ztAPfV9zdTaaa24Vj2QOOyAnTHVBu/o26RaRYxB+2yE2pKQXF8ttv8qquryjUdG3Ae3nhILDxfLKUvFdanzVAtk1e/m5d9ycAyO+o2MQI5K3y/5QV1r3E+qygYkuGlbYVxQI/Z6g8vAKJenH8yAgdM4LL1fFfpAMSfzsVo4SqEqKoERA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hvgz3TEw802RHWWn/UX2yl5qNVaWV55FSONQ61nvLGU=;
 b=kKgC/Q6ZHYtcBYdQ6GRXH5pb0fDlV1CO7Ip7e7LDZSJHj8+6rWG+Ep4HSyjBBFbnr/EtQDUC+mz9VSntJ4/OxnXHuUUNWHwpu/kwoqUuXP+g5sGriFc5chqAk2D28dKmZSMnhjGnuZhLhL45qVIg6N1erEEpekNTLLQqgSmve2CCXKftvIAwOBZL7ypJsbwKio8dD0EHpYMdCX58GO3aaqYhYVWbk3IvKW6DdyluGqHDxbJvWXURZ7Y51YZUuDyrXh9OesPqYtNEzo9xbXOOuzwAHq/YlTjKZYByjo9ipAZbDOSMZT6TorlBDV/cS3jSiiL5nkTuAxCxmzVw6R5Mow==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hvgz3TEw802RHWWn/UX2yl5qNVaWV55FSONQ61nvLGU=;
 b=KIq8lcz+yYfJexzqr/2f+SC5ac0HhlV3gx0FlpbT17BYlthF/DO80W6Z6DPmqi2hMcAxUSDTNzCNRb5Jd8Rv3p4/C4VQMwHkw5mGdHBzts6R+NKfoJzVSD253wLGfHsZTGCV69rMzyDagdxTC/FAc5nHa5untSECgDkjx/B2R/k=
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
To: Olaf Hering <olaf@aepfle.de>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
	Jan Beulich <JBeulich@suse.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
 <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
 <1fd51108-82d2-4605-5c37-410c3f4c65a0@citrix.com>
 <20210706153931.67481153.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <ce619db3-4631-a9eb-c984-aa73b905a6f6@citrix.com>
Date: Tue, 6 Jul 2021 14:43:30 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706153931.67481153.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0295.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a5::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6547c0c9-b7be-4324-9eaf-08d940840e7a
X-MS-TrafficTypeDiagnostic: BY5PR03MB5345:
X-Microsoft-Antispam-PRVS: <BY5PR03MB534519A19394313F8F7065B2BA1B9@BY5PR03MB5345.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: m0J1L79BN+wnoBiTC0WnOciJDgbAd+sIeZM8SLEeks2HdkZ+sH7TNFG674QKKi63TxkdF6nhINlmXcdBoHU2UvQnTJo/mxwHpg3wFSfJW2QR+d4unzW7TFWCEHiK7M2xjcUzkmLHYW0JCypi0zp2MPwjbb/RaN5i8E41ZO5DbxlZ+CJGJfeeOPoMufe2HQDpOTj9OZkI3+chD1JVP+18OQWrto102K3HCTB1K3NI8KZ4muwFW/ebxUAParLVmGHNj2tCZj/BwHr1//zwaGO5Qiq8nCdchT7PVuSJrzYfDHGMZd4IWaN4Zr2+caweP5jp/35RtuTOSVQgAdD0RwOTPOF8YGdnWylCIGwocLBVwMdhSjAibHPvt79CruWtJN1OB389oTvVmW7/7CVR0coKM5N13nyMaZFZ/L7ZQt93o2T4QCRxpsjR7BfVbVN6yHR8MQ6ey5mw+MdJSDsZJwe2iKajZwlZtjqVJDCuZIa0V/wme6n1qH+Z/FarC/B6Ucy/i9gGslhPVUeeY9G06ceWx0dinz54lHjfYDsCaMHUgHpmC523GoHc6FbuzQGtp0xLd/j9nTGDpZTk8Wel6d4ABNvQll/+WNLpn5iyRoNq+MiRTTPOsAoh5ifGQA2JCIr/PR1l/KXAoKDw6TPfYSmElIuiYrlO43cWcDqwx2Gz+cVMi/NFzhQaydeWy6uRWWiYvFpBCpyuXepq1alWDvNwJ8V/+iU7/8zLDQtY3doA9SgW5q8IrIk7zU+aBdLH4xLdNYP405joZpypbzXxIcz+0Q==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(346002)(136003)(376002)(39860400002)(366004)(4326008)(478600001)(2616005)(5660300002)(86362001)(26005)(31686004)(36756003)(316002)(31696002)(54906003)(2906002)(16576012)(186003)(8676002)(6916009)(66476007)(38100700002)(66946007)(53546011)(8936002)(66556008)(6486002)(6666004)(4744005)(956004)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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/t4xsvGp?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 6547c0c9-b7be-4324-9eaf-08d940840e7a
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:43:37.3393
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: iEQrh/fB2/MVegKYcIcDsFmpJQR8/0lPbe0aCoYfkFKTcQu0d/DWJfAFk5zrmlTllB6iqt5XTMbp8HUC96bAehtbN6zl4k5B1nJ14eo+uME=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5345
X-OriginatorOrg: citrix.com

On 06/07/2021 14:39, Olaf Hering wrote:
> Am Tue, 6 Jul 2021 14:22:58 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> What hardware is this on?  i.e. is the Page Modification Logging feature
>> in use?
> At least it gets reported as VMX feature during boot, this is a CoyotePass system.

That logging is problematic (that means "this hardware has the
feature"), but yes - PML will be used by default when available.

~Andrew


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 13:56:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 13:56:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151362.279739 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lYl-00071N-6p; Tue, 06 Jul 2021 13:56:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151362.279739; Tue, 06 Jul 2021 13:56:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lYl-00071G-2V; Tue, 06 Jul 2021 13:56:23 +0000
Received: by outflank-mailman (input) for mailman id 151362;
 Tue, 06 Jul 2021 13:56:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0lYj-000714-3M
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 13:56:21 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f01ce0e4-de61-11eb-8497-12813bfff9fa;
 Tue, 06 Jul 2021 13:56:19 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2055.outbound.protection.outlook.com [104.47.13.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-27-bWX9iQULN5uTcfD_DZOPRQ-1; Tue, 06 Jul 2021 15:56:17 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2606.eurprd04.prod.outlook.com (2603:10a6:800:51::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 13:56:15 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 13:56:15 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR04CA0080.eurprd04.prod.outlook.com (2603:10a6:208:be::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 6 Jul 2021 13:56:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f01ce0e4-de61-11eb-8497-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625579778;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=TDE0HYdVWJ38/VbrQibF2AdXhlrnFsiuqMUU5P04z8U=;
	b=AXl7Z+9tRwvoxzlYTkdcZ+qR0edOy/DQRxxPMhqVX/CmAVxpQJ7r8NumRRxIjoKtNZ8yzr
	/8ZobqxRVxz6DU8rX7m4bJvLPq43litXBicLwlopkmkN4jDVm3obcXiKLbKRgFCDrcaE57
	KX0UBZ6Lf+uNWM45Txr+tUFLi6BIKt4=
X-MC-Unique: bWX9iQULN5uTcfD_DZOPRQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=DruKaP5G3lvayFCCEtLHGDuBjx9OV60udGNaoONZU+XegvMJ4perVyPZUBIZcHUPZdLpd70T68ed+nOAMm23Pu7B+jvsAyZaqQeehMazrPOlgY+fK6ckwHKn2yTGEVJme8nyKSXU8F8Ytqzezsyq2h2WsGCF/qVZkowe0eNEQwCXn3bJk+U7loBkJmTWt4/MzIv5SEfPyAFCG0cXDQwsh7xIIZ3YmirZGX6TGXz02I0iobpnFHBQDBYckRsli/R2ViSeA65ZUV8/SH30ciVHdbcY7uZCMxmhCkwCe8wXcxOZR3eHcFOL03FM8pqCDeEpleFtt4Npc+w8AjlAGL09YQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=TDE0HYdVWJ38/VbrQibF2AdXhlrnFsiuqMUU5P04z8U=;
 b=FuQL1No8fF/3QhN9P/7KXTWffoYMXaKYFLMIxcF9i4tfwhhUC/mm0pab0OwKK9Je0mFrxEV2+9RUOAagow/MiLphgT2adtlXoG12tlRM8mfgK/tpQpPvPVre2v3hquJ0K3k/Msx+m0Owkt8Gv4Yt5Hx7lpQULPQsyZPLXKMWZTQqFN1SzN0nyw8t/iPkJXNSD1JeZHeKdKQ/NkfWAgFJ7qUajyBoHlM1T3FbAKmRGQLuiGQNU2ANmoDEY05T4AUF/58fgZZL18GgyDWO11IW2MucMeBk2w9z7S9UfR1W/fbd9XPoHR290519nQI1IOaXOkFzZ18mlp8dWzBtrAbc3w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: aepfle.de; dkim=none (message not signed)
 header.d=none;aepfle.de; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Olaf Hering <olaf@aepfle.de>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
 <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <8d4ea4ef-210a-335e-ee77-5e9401352c9b@suse.com>
Date: Tue, 6 Jul 2021 15:56:14 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <902720b3-d71d-82eb-9200-97f2b17dd264@citrix.com>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR04CA0080.eurprd04.prod.outlook.com
 (2603:10a6:208:be::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3dbb9137-9da4-4046-d1f8-08d94085d246
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2606:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2606FF7ADA853573693C9FD2B31B9@VI1PR0401MB2606.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	eFVp1+O0BolLSbMX+ZOk3sjlf4fQRWt18LB+mYR0JjrtoNDjdCVDdey6v8BlAhkTKaQg9fYM252TOY5l4q2JG0Qppq0h6jwsoYOUXmMHPY///YGUV5oZXZRNxOtElgbmOCpBf9CBEm3HzgTn3PcZOF7es83c1ECtiJrEMxvwOhRuxiwQMaXUElSTtPv1V8Ie1xx3qJ1BKkLiYsjz3oHg0bqSJUggiSFM5NQrGg1rCBSoExFmUtrSDKNgbRC0oSbKQ/gg5d/BWXL6BH+zsRt7Ac6CZH57ujIMF9aY0Y//PTWJzs6zNliZeLahN8ErkSgReS3Kp+qEXho6FOc9otw5Ck48IntO/m+LZ57YW2zq2zpdB+b3irXgpibnrPhCd0x+VdEu/MgYfZYNRwWenpF+BeEeHHZMlXBa0+dnoceDp1gm7Y3jmoUVjOiACvjyVwtUi6m6A0zKHpPS8wyL4gxc2ddx+BxYR4Gu5PhJG1zHU/lz8C08VaNBQH6U9NByBrHNT1QXpXwC99VJJcR4GFnsMJt56jkodRv46IXSETAdLWIhfDFf4LMH+aKg1tbMA0Cnaa+XtrvX3ugK2+tU+tl2LEldnS5BX6lFQmyPLeyPbFfdsI2QNpNRfucd9YSQQDSuhXvmepJ++1Y3Kg2ff+7wqI0S3yiWVvpQoiCf+f3Z/WRMxDm6MJJUB3XKzrlI5QkIQfMvrbTwIWnMlo8IVuKq23QEf7nIYw1aKQIehVA05ZCd0cXlatgpi28HZdIqzc/d
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(39850400004)(136003)(396003)(366004)(346002)(36756003)(478600001)(31686004)(6486002)(8676002)(86362001)(2906002)(6916009)(4326008)(956004)(53546011)(2616005)(66476007)(186003)(54906003)(66556008)(66946007)(16576012)(31696002)(316002)(38100700002)(5660300002)(8936002)(83380400001)(26005)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?Windows-1252?Q?DMuzTMoGarCZ1hwEafcfrS5XDuAjRqHodo2mzhduV7MAhbTyY2JxHhAI?=
 =?Windows-1252?Q?Ks6q105MK0gjPBm5CFL6ilweeNujZubFeku04ESDR+Dyp7kJeJlhcPsr?=
 =?Windows-1252?Q?y/XFETHsBZYvG4uqRzSEuPOrQ8plUGFvPvLfqcgnOmwXe2F+GNaXmcGH?=
 =?Windows-1252?Q?Q+pRnkBZoDX0V86FiFYtDFmoYcuDlqXi+rPCtxfefMRZPkWC963BCnmh?=
 =?Windows-1252?Q?Y+13vq2U0mnepEIk+pyLDYwleQMyCF8LmDA732qYwhO25G3T04wcl2C9?=
 =?Windows-1252?Q?Lew2jobP6gPUvr71mEYAw+ajmSSy5Zf2Kja041INU9BRsVn4qx62p9DH?=
 =?Windows-1252?Q?hX134cCzb3GNCV9EQaTZvItn+czeRRYnxkmC2+W6G8TDFP7ioewHU/Wy?=
 =?Windows-1252?Q?Xc4O8O86ZVWp3D2KDdaxSrBSjYujWlZ3F2Y8F5E6SR8P9psKmh3uHgZw?=
 =?Windows-1252?Q?KRM0hnAIE779TDpqqqqvWH/fKdrS2nkcLuNPPVo8dOoHiO4VEH+4eGeR?=
 =?Windows-1252?Q?DIKDlufJ8zSxww7NzfODuhc+ZvwXDcT1WJJaMJubuvuwr0tSitZUaWn3?=
 =?Windows-1252?Q?RupIScO1jd5mjtcKsxdwCdHxCUXvx9qtBZ0RQMHo0JOwCvpSH+XUwv4p?=
 =?Windows-1252?Q?IuAEUYtLHFVVtx6qPGBnwvMWdsL3xRgkng2I6oQ8n4fe8nLgVhPGZ+dP?=
 =?Windows-1252?Q?4q1e0Qhq26SSPXZBbACKWAOgXbjssJqWGVJBcFoLuZE7hIur84IzeNuq?=
 =?Windows-1252?Q?3cOUuF+KhazVniVSnMSePaLvi88TTL0vHbJxvZe8Xs7Lx11fP+WfP5Yv?=
 =?Windows-1252?Q?W0hvRa6MYhy8PCuFHMdrgS+JSQECeVViZ/ZxvQp7aBL9BQnoaJx0P1yP?=
 =?Windows-1252?Q?yQ31Wwf4XI6chFQsoTY+GFlo5xgYIsQcYl3P25fDAFwXXUMwjOZil0o0?=
 =?Windows-1252?Q?vvJxRVo1jXuBAypL2TVv+W3oKrJDZw5e25S8yZK8vxFJJHZUTdiJ/N/K?=
 =?Windows-1252?Q?yBGi94znxDJB4qm8yxirkc21zAT2qZSXTIkpgpaiZVWMaX6M5gDdnGvB?=
 =?Windows-1252?Q?AzKRiaB06PX27IVgeNrVB+Eyh+gTYkR2azeFTY9AuAsLVzoLR5VMxD1B?=
 =?Windows-1252?Q?5v2+rUMe1QYRZ7qzQt3p3cf4ZAHgbm6P8oU/VF9hQRrDZzG/05iZT/+C?=
 =?Windows-1252?Q?wgdlihKdvczvvsFBZ+e+VhvSyEEFMCSLLXsJGkydrgGBfixM6NZccgJH?=
 =?Windows-1252?Q?nigDnbwrorC2D6W3PYOiPPBl1vBBVNPeZSlfcm1gCwhel2BPLkFcDNq+?=
 =?Windows-1252?Q?uU614qdm9RJZLNTkIM9FORiz3ADnEtwz8curml7uI3mGftPrO3r1Wl2/?=
 =?Windows-1252?Q?rxUXv3om6A5jnV10r/9dMFUdg4AO7+R6KwMnswmXJhrzeLDNwAro9h+M?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3dbb9137-9da4-4046-d1f8-08d94085d246
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 13:56:15.3449
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NP6ZmruCWzZj8Qr+da0ew8xDrfYiAApdaEmNbrp2t2xl+mISV5AiX9OtKJSQS8VJlFNDQXSWwZfdvkLeAT8iiQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2606

On 06.07.2021 15:19, Andrew Cooper wrote:
> On 06/07/2021 13:58, Olaf Hering wrote:
>> Am Tue, 6 Jul 2021 12:23:32 +0100
>> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>>
>>> +    count = stats.dirty_count;
>> Is this accurate?
> 
> The live loop relies on it, and it worked correctly the last time I
> tested it.

When still merely investigating in preparation of my recent series,
i.e. without having made changes yet except to add some logging, I
did observe "Bitmap contained more entries than expected..." a
couple of times, with "written" and "entries" typically apart by
just 1 (as determined by extra logging; to be honest I don't recall
if they were farther apart at any point). So the number is _not_
accurate in any event, and cannot be used for other than reporting
purposes (as also expressed elsewhere on this thread).

This also underlines that, unlike you did say in a reply to one of
my patches, this is only a "detail" message, not an error, because
migration happily went on and succeeded.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:00:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:00:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151371.279755 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lcl-0008Tq-PT; Tue, 06 Jul 2021 14:00:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151371.279755; Tue, 06 Jul 2021 14:00:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lcl-0008Tj-MQ; Tue, 06 Jul 2021 14:00:31 +0000
Received: by outflank-mailman (input) for mailman id 151371;
 Tue, 06 Jul 2021 14:00:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0lck-0008Td-E7
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:00:30 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6088145b-c0bf-412d-9497-6f476be1d72c;
 Tue, 06 Jul 2021 14:00:29 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2051.outbound.protection.outlook.com [104.47.8.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-15-OvITSPGxOkmC-MOA_ZJhcw-2; Tue, 06 Jul 2021 16:00:27 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2607.eurprd04.prod.outlook.com (2603:10a6:800:58::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Tue, 6 Jul
 2021 14:00:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 14:00:25 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR03CA0073.eurprd03.prod.outlook.com (2603:10a6:208:69::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.23 via Frontend Transport; Tue, 6 Jul 2021 14:00:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6088145b-c0bf-412d-9497-6f476be1d72c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625580028;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=QypDFCIUIljqGOPv9r/9ZTCAJ2ZWg9r5mbrbBl/EHSM=;
	b=TMs4VFuHYUU/8plinE1AGqWbIAcJ7FGd6y+I0S/RU/GlJQ1hGxOvcZ/G1SNdY2GGBs4FPn
	Z9BfWN97ALGiw2ce6vHV5Wd9FedrpPs0TtiAxEG72Yc4AVh0mBso0enI6XzewIRphjc8HM
	xMteL3ZQEskl4CVtTDRXy+kIgPU+81k=
X-MC-Unique: OvITSPGxOkmC-MOA_ZJhcw-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Zn7Q6lT/vWGN9B9824GRQ6ZMziOu7kFA5rfziB1qqPNl+AB+sM7gG25Vp0z+Sr8zUtLFh2GjKZ/ezuNk7sG/qBh5wDlYhSRaD3f1WUoShkZ9msV6K9M3IirnvElnQH/augm5+UNcjJ+WoGXrkGB6hAh1S/BBlgk2cLlvSyUCDHjxDxTL24Ou5cq7cqI7ZlEDl2gIncpxVELzr7tx+CUNtlgtgXEtJf1JlltFnzfqrk1hBpH8p4rCjl4+fqjg//DF9YWEHMUHzETzbqYwRzGXzDfuKpmsdP3tWBzbQjylHjv/HZuitZjoSSTaUb0Y0aT2SaIdO2rQbeoXl0EnJT0bDw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=St0EwMrId+cZUv2Y991CKhOohQUFO9iLd9sMz+Pae4c=;
 b=CCdYFQlhZSt46YKWsx5a+8H0aIKyhEHug/5CoaLFaiVfu+fk8fhu7CBH7AkpwPZ+E1x4SA0UlfWTOYmKBAPfM7aI+xQzjSKJwHpJO9zblZp1dA6BqMkDZvDyV1MoFQqT6nd1gGqRP98mrumgJR1f7GT8d06bGG3bI7dqHWN+sj1TlIb8wGjzPMOHmwmLFPzO3w0Gtx2v52Lgw2LfCUDy34nJj1fy9V7mZSv45kp408B/MR3gLaR4lFJD5XKi8F5+qLDdbB1CZzWHmc7zE2wtxeL5WPrkRRapU4X9/+MGwGY3l0ZqeslrMTOWjX7MzM2MUBVgO1KfkH5HPavgOAjPlA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Olaf Hering <olaf@aepfle.de>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <d5bb77be-b557-3587-6cbc-3e427104c55b@suse.com>
 <6e5bb79a-1f90-257f-a90d-374cb206093a@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <1b8f25a2-8546-dafe-5035-3885b0d09f88@suse.com>
Date: Tue, 6 Jul 2021 16:00:24 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <6e5bb79a-1f90-257f-a90d-374cb206093a@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: AM0PR03CA0073.eurprd03.prod.outlook.com
 (2603:10a6:208:69::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4f0fade8-591a-4d33-7b3d-08d94086673a
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2607:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26075FAA52726EE31FFA09BDB31B9@VI1PR0401MB2607.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ZQE8vFV0VsNH/OSZ0OcKS+dThlXxWsQvvxhDniWBo2srRBXZoKiEy2PdztW0gllKS6seeZK2bTH4Ov1DmzyVnyBkXyb+3YIN677//3YPCMi3MSJa3cdgKKJ0kloq56xWTu0pxOgMqAT3wbGmxCEDUEIvvWVu6lmEjaYB389G+P+qispKUqbb6fFykbMPt3AQrjdgO/YdgsZ5c7pbxOmrwbyWodcjyhuIp//NL48DGP9BDiOum5T72y5YL9OV9yFIle7DK0bWRZS9rCSpqeuF1h7Locjn6OaolG1XuR5nIYydkZS7B6MGJDfpK0hh3anB7VvpnugfhMXJ7GWV1ZrsIgMIvhFjzstSVnY8VCwNTzG8waA0TO980pFv27M97rzcG/+JZCSRH/5f/H4C0rOTr6H2iBh9a7uTRvJVB/P+eFHy3fyd99VvOTlUQEhmCMuNDe8zZLEVxbQMLPU9Iy0eExSCv9hL//ELORWG5N7Sh3WLF0ua4gQuEx8POxUYaBpfIcbNh0fxj5dmPIMLJaHAXr2MrANdVZ4Nqm8WRPVzPl2aSR9rxPmx29ytNKu1qq2VtJrF32czr3oIqf2UITg1iGzoSsAHqSEtgNPKV3DEeijTPaWd2UhImHzp54pcWa0FqAGhcQH3bUAUJmY3Yz0Cp8MSbf/CAJU3UMisLreXx0GyptEYtuPByUpxrZ+n3DpfnCOLXk//yHnQsAMsgYuWKFvGbof1eyPLn2QeIWTJwY5pSr9h6DbI3cj1q0v+gTrV
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(346002)(396003)(39850400004)(376002)(956004)(2616005)(8936002)(83380400001)(316002)(36756003)(478600001)(26005)(186003)(8676002)(16576012)(38100700002)(86362001)(53546011)(6486002)(66946007)(31696002)(54906003)(2906002)(66556008)(4326008)(66476007)(6916009)(31686004)(5660300002)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?tFYb7onq6B3Kofmheqn5Q/Aw5y4B2WGBv7wh/YxS/xFjnL9VZ63bmKWnk3ZF?=
 =?us-ascii?Q?Hac9ei6CZFu47tgryAKX7dFYLFz75vw2XwnZFAIvvOKppkrhQ2f0fLij33z5?=
 =?us-ascii?Q?TQLeoImxRmWGehVElQHH0DhoMxS0R+SeGfT1Eq/LcrxYgH9o/lWrQTH7TdfS?=
 =?us-ascii?Q?ljvT3CKlntxsrwpcI4gK52j6sjzOmhNF7BevrBswsbYi1jjNQMB5BjpToYDl?=
 =?us-ascii?Q?2oDrevT55Ll37pwt/UBK+yE7+EIAXRBB0kpxS/TY0ID+F8g5KotVb24SZK9o?=
 =?us-ascii?Q?14YC3r/ze6pAH7i8ZD5G7HPoOHZlYixLsQcEoKLF1ZRg9WfF0We85HloMkfA?=
 =?us-ascii?Q?TmAzkkNIulNbkFDAaL3Cj1ljDyZ2JdUk1Ve4oUR1y5ZwvGupjsNMS9s3KKXD?=
 =?us-ascii?Q?te1nunaPNM3KjH6xZ5MpgHPK2YQhz13eCefJe4A4maUbDseExkuKi3pW19AC?=
 =?us-ascii?Q?G/2E2MUnKP+NE7vux1frI4bLAuWIq0RK6SCpNWA3IQ4S7aDIxGWWfpHTCqBC?=
 =?us-ascii?Q?RE8Wm6V2+2NJMmRpQXVQokqucUtadHKDF+16lhnQ9Jah7g0S2mHmKUduQLYh?=
 =?us-ascii?Q?9QOAYRo2lC+LS7bYsZpEUZ45AHiKGvoOOP3mLVm4V/ty5HqQY2/xBX9Q8N3L?=
 =?us-ascii?Q?QYnQSAE0PFN8yS0EEoafD3Z1YKtmchhP/wLEpJMYaS11fW6AH7PmuFEoDHJu?=
 =?us-ascii?Q?m5H20N1lv6h1GCH3YAm1s0ZVcspMEvXilNt1/BTsrsXDPfcfxQ9GBM8PG0uI?=
 =?us-ascii?Q?mF5kPpT3xilGUtCVFjK1k5/4ajmR6FD5gDawQTtwVTLBDRMoLiaZweAuQsZB?=
 =?us-ascii?Q?+zfh+HoVvkl1vY7n5NxaXVqF49WTP45/gf4plbONHUUBlcWiJ/KkKJynmKnQ?=
 =?us-ascii?Q?L7GCnrt63EnG5BfOCxW5C3yAVzJe3Zl1XosiQiM14WlYpndkfMKi3f3khcSW?=
 =?us-ascii?Q?/xQ7ZNkP3IFpPoBer+8pK2PKIusufgQGSj/vOcnEOP2kB9zPBBaG8wUypm10?=
 =?us-ascii?Q?oOeA/T3fiZCnBN4pIRPIk60NbHASkWOcG/m9IZYMwbmjwBG13osOWOvbD0G3?=
 =?us-ascii?Q?LdE4PPs2YfPHQFkPHcde1uVDQCosFDnMfXf4g9WMdW7eVnF665Y/4zPHwcDI?=
 =?us-ascii?Q?zsp9OyR6PXD/MQ+kbNOdPHC9ujgSn8M/5VF/qZ/GtzdmluIXSfLue1VCiLQJ?=
 =?us-ascii?Q?I3QDly44h/FzQpECynq0alTADUoxYCIHvi59TdlP8Vgbw7TDTNbsnSdKsHcE?=
 =?us-ascii?Q?q3aPE1Hj6YHcuRJKWVMoCuAu4aD439V7eGHOpNY5Hv88jOjipYVFJbNkF+kB?=
 =?us-ascii?Q?3COT+zBUEgpPAxqUcsHpRLdM?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4f0fade8-591a-4d33-7b3d-08d94086673a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 14:00:25.2516
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 6dxk3pkFyJ4oMxA9iJ9cft7bBNazipWDLGydHzlx42y6O1XevprZT3mvjYXzLTHCB6IDoFH4snn0EwMwJ0ilCg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2607

On 06.07.2021 15:34, Andrew Cooper wrote:
> On 06/07/2021 13:03, Jan Beulich wrote:
>> On 06.07.2021 13:23, Andrew Cooper wrote:
>>> 'count * sizeof(*pfns)' can in principle overflow, but is implausible i=
n
>>> practice as the time between checkpoints is typically sub-second.
>>> Nevertheless, simplify the code and remove the risk.
>>>
>>> There is no need to loop over the bitmap to calculate count.  The numbe=
r of
>>> set bits is returned in xc_shadow_op_stats_t which is already collected=
 (and
>>> ignored).
>>>
>>> Bounds check the count against what will fit in REC_LENGTH_MAX.  At the=
 time
>>> of writing, this allows up to 0xffffff pfns.
>> Well, okay, this then means that an overflow in the reporting of
>> dirty_count doesn't matter for now, because the limit is lower
>> anyway.
>>
>>>  Rearrange the pfns loop to check
>>> for errors both ways, not simply that there were more pfns than expecte=
d.
>> Hmm, "both ways" to me would mean ...
>>
>>> @@ -459,24 +462,20 @@ static int send_checkpoint_dirty_pfn_list(struct =
xc_sr_context *ctx)
>>>          goto err;
>>>      }
>>> =20
>>> -    for ( i =3D 0, written =3D 0; i < ctx->restore.p2m_size; ++i )
>>> +    for ( i =3D 0, written =3D 0; count && i < ctx->restore.p2m_size; =
++i, --count )
>>>      {
>>>          if ( !test_bit(i, dirty_bitmap) )
>>>              continue;
>>> =20
>>> -        if ( written > count )
>>> -        {
>>> -            ERROR("Dirty pfn list exceed");
>>> -            goto err;
>>> -        }
>>> -
>>>          pfns[written++] =3D i;
>>>      }
>>> =20
>>> -    rec.length =3D count * sizeof(*pfns);
>>> -
>>> -    iov[1].iov_base =3D pfns;
>>> -    iov[1].iov_len =3D rec.length;
>>> +    if ( written !=3D stats.dirty_count )
>>> +    {
>>> +        ERROR("Mismatch between dirty bitmap bits (%u), and dirty_coun=
t (%u)",
>>> +              written, stats.dirty_count);
>>> +        goto err;
>>> +    }
>> ... you then also check that there are no further bit set in the
>> bitmap. As said elsewhere, I'm not convinced using statistics as
>> a basis for actual operation (rather than just reporting) is
>> appropriate.
>=20
> I'm not interested in inference based on the name of the structure.

I'm afraid that's the problem: Because you started using it for
something it wasn't meant to be used for, you now think it's the
name that's misleading, and the use is okay. I remain of the
opinion that it's the other way around (but see below for there
not being an real dependency at least in this particular case).

>>  I'm unaware of there being any spelled out guarantee
>> that the numbers reported back from the hypercall are accurate.
>=20
> The live loop uses this information already for this purpose.=C2=A0 If it=
 is
> wrong, we've got bigger problems that this.

send_memory_live() passes the value to send_dirty_pages(), which
in turn passes it only to xc_report_progress_step() and uses it
in

    if ( written > entries )
        DPRINTF("Bitmap contained more entries than expected...");

There's no relying on this number at all afaics.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:01:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:01:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151376.279767 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ldZ-0000gF-7I; Tue, 06 Jul 2021 14:01:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151376.279767; Tue, 06 Jul 2021 14:01:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ldZ-0000g8-3k; Tue, 06 Jul 2021 14:01:21 +0000
Received: by outflank-mailman (input) for mailman id 151376;
 Tue, 06 Jul 2021 14:01:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kMrw=L6=arm.com=robin.murphy@srs-us1.protection.inumbo.net>)
 id 1m0ldY-0000fy-CY
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:01:20 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id a31bb0b2-de62-11eb-8497-12813bfff9fa;
 Tue, 06 Jul 2021 14:01:19 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6E5E031B;
 Tue,  6 Jul 2021 07:01:18 -0700 (PDT)
Received: from [10.57.40.45] (unknown [10.57.40.45])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 461163F73B;
 Tue,  6 Jul 2021 07:01:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a31bb0b2-de62-11eb-8497-12813bfff9fa
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
To: Will Deacon <will@kernel.org>, Christoph Hellwig <hch@lst.de>
Cc: heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
 peterz@infradead.org, benh@kernel.crashing.org,
 joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
 chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
 Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
 Stefano Stabellini <sstabellini@kernel.org>,
 Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
 "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
 linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
 Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
 matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
 Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 maarten.lankhorst@linux.intel.com, airlied@linux.ie,
 Dan Williams <dan.j.williams@intel.com>, linuxppc-dev@lists.ozlabs.org,
 jani.nikula@linux.intel.com, Nathan Chancellor <nathan@kernel.org>,
 Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
 Bjorn Helgaas <bhelgaas@google.com>, Claire Chang <tientzu@chromium.org>,
 boris.ostrovsky@oracle.com,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>, jgross@suse.com,
 Nicolas Boichat <drinkcat@chromium.org>, Greg KH
 <gregkh@linuxfoundation.org>, Randy Dunlap <rdunlap@infradead.org>,
 Qian Cai <quic_qiancai@quicinc.com>, lkml <linux-kernel@vger.kernel.org>,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
 Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
References: <CALiNf2-a-haQN0-4+gX8+wa++52-0CnO2O4BEkxrQCxoTa_47w@mail.gmail.com>
 <20210630114348.GA8383@willie-the-truck>
 <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck> <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
From: Robin Murphy <robin.murphy@arm.com>
Message-ID: <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
Date: Tue, 6 Jul 2021 15:01:04 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706132422.GA20327@willie-the-truck>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 2021-07-06 14:24, Will Deacon wrote:
> On Tue, Jul 06, 2021 at 06:48:48AM +0200, Christoph Hellwig wrote:
>> On Mon, Jul 05, 2021 at 08:03:52PM +0100, Will Deacon wrote:
>>> So at this point, the AMD IOMMU driver does:
>>>
>>> 	swiotlb        = (iommu_default_passthrough() || sme_me_mask) ? 1 : 0;
>>>
>>> where 'swiotlb' is a global variable indicating whether or not swiotlb
>>> is in use. It's picked up a bit later on by pci_swiotlb_late_init(), which
>>> will call swiotlb_exit() if 'swiotlb' is false.
>>>
>>> Now, that used to work fine, because swiotlb_exit() clears
>>> 'io_tlb_default_mem' to NULL, but now with the restricted DMA changes, I
>>> think that all the devices which have successfully probed beforehand will
>>> have stale pointers to the freed structure in their 'dev->dma_io_tlb_mem'
>>> field.
>>
>> Yeah.  I don't think we can do that anymore, and I also think it is
>> a bad idea to start with.
> 
> I've had a crack at reworking things along the following lines:
> 
>    - io_tlb_default_mem now lives in the BSS, the flexible array member
>      is now a pointer and that part is allocated dynamically (downside of
>      this is an extra indirection to get at the slots).
> 
>    - io_tlb_default_mem.nslabs tells you whether the thing is valid
> 
>    - swiotlb_exit() frees the slots array and clears the rest of the
>      structure to 0. I also extended it to free the actual slabs, but I'm
>      not sure why it wasn't doing that before.
> 
> So a non-NULL dev->dma_io_tlb_mem should always be valid to follow.

FWIW I was pondering the question of whether to do something along those 
lines or just scrap the default assignment entirely, so since I hadn't 
got round to saying that I've gone ahead and hacked up the alternative 
(similarly untested) for comparison :)

TBH I'm still not sure which one I prefer...

Robin.

----->8-----
diff --git a/drivers/base/core.c b/drivers/base/core.c
index ea5b85354526..394abf184c1a 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -2847,9 +2847,6 @@ void device_initialize(struct device *dev)
      defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
  	dev->dma_coherent = dma_default_coherent;
  #endif
-#ifdef CONFIG_SWIOTLB
-	dev->dma_io_tlb_mem = io_tlb_default_mem;
-#endif
  }
  EXPORT_SYMBOL_GPL(device_initialize);

diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index 39284ff2a6cd..620f16d89a98 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -107,16 +107,21 @@ struct io_tlb_mem {
  };
  extern struct io_tlb_mem *io_tlb_default_mem;

+static inline struct io_tlb_mem *dev_iotlb_mem(struct device *dev)
+{
+	return dev->dma_io_tlb_mem ?: io_tlb_default_mem;
+}
+
  static inline bool is_swiotlb_buffer(struct device *dev, phys_addr_t 
paddr)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);

  	return mem && paddr >= mem->start && paddr < mem->end;
  }

  static inline bool is_swiotlb_force_bounce(struct device *dev)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);

  	return mem && mem->force_bounce;
  }
@@ -167,7 +172,7 @@ bool swiotlb_free(struct device *dev, struct page 
*page, size_t size);

  static inline bool is_swiotlb_for_alloc(struct device *dev)
  {
-	return dev->dma_io_tlb_mem->for_alloc;
+	return dev_iotlb_mem(dev)->for_alloc;
  }
  #else
  static inline struct page *swiotlb_alloc(struct device *dev, size_t size)
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index b7f76bca89bf..f4942149f87d 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -359,7 +359,7 @@ static unsigned int swiotlb_align_offset(struct 
device *dev, u64 addr)
  static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, 
size_t size,
  			   enum dma_data_direction dir)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);
  	int index = (tlb_addr - mem->start) >> IO_TLB_SHIFT;
  	phys_addr_t orig_addr = mem->slots[index].orig_addr;
  	size_t alloc_size = mem->slots[index].alloc_size;
@@ -440,7 +440,7 @@ static unsigned int wrap_index(struct io_tlb_mem 
*mem, unsigned int index)
  static int swiotlb_find_slots(struct device *dev, phys_addr_t orig_addr,
  			      size_t alloc_size)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);
  	unsigned long boundary_mask = dma_get_seg_boundary(dev);
  	dma_addr_t tbl_dma_addr =
  		phys_to_dma_unencrypted(dev, mem->start) & boundary_mask;
@@ -522,7 +522,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device 
*dev, phys_addr_t orig_addr,
  		size_t mapping_size, size_t alloc_size,
  		enum dma_data_direction dir, unsigned long attrs)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);
  	unsigned int offset = swiotlb_align_offset(dev, orig_addr);
  	unsigned int i;
  	int index;
@@ -565,7 +565,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device 
*dev, phys_addr_t orig_addr,

  static void swiotlb_release_slots(struct device *dev, phys_addr_t 
tlb_addr)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);
  	unsigned long flags;
  	unsigned int offset = swiotlb_align_offset(dev, tlb_addr);
  	int index = (tlb_addr - offset - mem->start) >> IO_TLB_SHIFT;
@@ -682,7 +682,7 @@ size_t swiotlb_max_mapping_size(struct device *dev)

  bool is_swiotlb_active(struct device *dev)
  {
-	return dev->dma_io_tlb_mem != NULL;
+	return dev_iotlb_mem(dev) != NULL;
  }
  EXPORT_SYMBOL_GPL(is_swiotlb_active);

@@ -729,7 +729,7 @@ static void rmem_swiotlb_debugfs_init(struct 
reserved_mem *rmem)

  struct page *swiotlb_alloc(struct device *dev, size_t size)
  {
-	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
+	struct io_tlb_mem *mem = dev_iotlb_mem(dev);
  	phys_addr_t tlb_addr;
  	int index;

@@ -792,7 +792,7 @@ static int rmem_swiotlb_device_init(struct 
reserved_mem *rmem,
  static void rmem_swiotlb_device_release(struct reserved_mem *rmem,
  					struct device *dev)
  {
-	dev->dma_io_tlb_mem = io_tlb_default_mem;
+	dev->dma_io_tlb_mem = NULL;
  }

  static const struct reserved_mem_ops rmem_swiotlb_ops = {


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:05:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:05:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151384.279778 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lhQ-0001P3-ON; Tue, 06 Jul 2021 14:05:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151384.279778; Tue, 06 Jul 2021 14:05:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lhQ-0001Ow-L9; Tue, 06 Jul 2021 14:05:20 +0000
Received: by outflank-mailman (input) for mailman id 151384;
 Tue, 06 Jul 2021 14:05:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=O3el=L6=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m0lhP-0001Oq-1P
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:05:19 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 31211e88-de63-11eb-8499-12813bfff9fa;
 Tue, 06 Jul 2021 14:05:17 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 67BF268BEB; Tue,  6 Jul 2021 16:05:13 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 31211e88-de63-11eb-8499-12813bfff9fa
Date: Tue, 6 Jul 2021 16:05:13 +0200
From: Christoph Hellwig <hch@lst.de>
To: Robin Murphy <robin.murphy@arm.com>
Cc: Will Deacon <will@kernel.org>, Christoph Hellwig <hch@lst.de>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, benh@kernel.crashing.org,
	joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>,
	Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	maarten.lankhorst@linux.intel.com, airlied@linux.ie,
	Dan Williams <dan.j.williams@intel.com>,
	linuxppc-dev@lists.ozlabs.org, jani.nikula@linux.intel.com,
	Nathan Chancellor <nathan@kernel.org>,
	Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
	Bjorn Helgaas <bhelgaas@google.com>,
	Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	jgross@suse.com, Nicolas Boichat <drinkcat@chromium.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Qian Cai <quic_qiancai@quicinc.com>,
	lkml <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
	Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210706140513.GA26498@lst.de>
References: <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain> <20210701074045.GA9436@willie-the-truck> <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org> <20210702135856.GB11132@willie-the-truck> <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com> <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain> <20210705190352.GA19461@willie-the-truck> <20210706044848.GA13640@lst.de> <20210706132422.GA20327@willie-the-truck> <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> FWIW I was pondering the question of whether to do something along those 
> lines or just scrap the default assignment entirely, so since I hadn't got 
> round to saying that I've gone ahead and hacked up the alternative 
> (similarly untested) for comparison :)
>
> TBH I'm still not sure which one I prefer...

Claire did implement something like your suggestion originally, but
I don't really like it as it doesn't scale for adding multiple global
pools, e.g. for the 64-bit addressable one for the various encrypted
secure guest schemes.


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:07:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:07:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151391.279792 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ljn-000240-7T; Tue, 06 Jul 2021 14:07:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151391.279792; Tue, 06 Jul 2021 14:07:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ljn-00023t-2u; Tue, 06 Jul 2021 14:07:47 +0000
Received: by outflank-mailman (input) for mailman id 151391;
 Tue, 06 Jul 2021 14:07:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0ljl-00023j-MG
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:07:45 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 271ee2a8-d6ce-4d44-a2c6-be3d1ea34053;
 Tue, 06 Jul 2021 14:07:44 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2059.outbound.protection.outlook.com [104.47.2.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-25-KchfXxDfNTyOEml1MXZF0A-1; Tue, 06 Jul 2021 16:07:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3935.eurprd04.prod.outlook.com (2603:10a6:803:1f::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Tue, 6 Jul
 2021 14:07:41 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 14:07:41 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3PR09CA0028.eurprd09.prod.outlook.com (2603:10a6:102:b7::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Tue, 6 Jul 2021 14:07:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 271ee2a8-d6ce-4d44-a2c6-be3d1ea34053
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625580463;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=GJIpvwo8QqpTK7WW+1RQbAa9950DtOgEGt9vLhVzg+M=;
	b=g9z7vbfIlVq3nNl85oPtlMtoaKl0fn8NTRru0S8Xn/zHz6B2dXhxFtOKc/+TxshxWCm5ds
	ANYr8lqBpFgw6TtLTVWHaXJYkLGPYJlPxSwYlUfJRHiG+RHZmPwVyf/Hg71JmS8w21tes7
	Tz6n/5AK8UlxLySdt22rgb/pHf3w1U8=
X-MC-Unique: KchfXxDfNTyOEml1MXZF0A-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VU3UntHuHZMcX4Szf1zdhcdAPS6dAv/XYfoJVWMLZ+YAstqDct8mNPVG9SryuQQCcuZU0msIJH1BRw82tKrsJAfVBQFehptquzU+Q55oE9OY0Fz6fw+nD/6EOmAWno82HyWxuYs+dyDxtSRp7O5OZwlPA88e1cczrBTgvrJelbzBzYQf6Mby/+Oi5gZNuyLEgR3Z0a4Z+E7chKhllxOhnATXe/RcaDNPk6RViHO/gLQD509dXB7aFYR9SHWf3U9B4nYr0N6E4lTghux51mrWpNd5cEuiCvIW73UUgWcjEO5buoxsRmmMyoWkTmMgk0bpr+I/Ec5S+SfCipJmKJLEPA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=GJIpvwo8QqpTK7WW+1RQbAa9950DtOgEGt9vLhVzg+M=;
 b=HGGeUzAZyunLBnQJIP4yHlhXsvvR/fo1LAXLmgeYCLFKIi9E9dKl3QH9UWyEKGZbWvdFejK76I2L032iBtExtl2A40+iJ3GNfyCLwnXpesbMcrQyzdfo6h4Vu+3dQNzHXE4KD+4g9DXklDFRC3LJOXnTEzT+yO++b2RU6f7wtgsRgU6QdXVDi6QplNRuty96E8EoCvYL63avUz4ObMoPVdQQMsVXF8ReFr4HHpS0lg6enrU/2WgOaJv7XqIPC44kGawUlXA7qYnS61cpAVzlQF1qT8J5MR4hQdKyvzXxBqiOCszpy1g1xo8N8Mv1MZZ7CsU900DzPSCrcGT/OVOk1Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, michal.orzel@arm.com, olaf@aepfle.de,
 xen-devel@lists.xenproject.org
References: <20210706132000.29892-1-julien@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <fa29ee07-0231-378b-4f28-07d894b371f5@suse.com>
Date: Tue, 6 Jul 2021 16:07:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706132000.29892-1-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3PR09CA0028.eurprd09.prod.outlook.com
 (2603:10a6:102:b7::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 55e77974-13a1-445a-a042-08d940876b24
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3935:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB393520D4ED602DDD4F81D1F6B31B9@VI1PR0402MB3935.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1850;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	uwhXAKl1+cK049Rhm8WZAVOBVx21ce/aHLZMrqHYasL0DHNf1eEkD6jwzemSG4G/ZHaqkpN3I8+QAk2FfWqEeDV5OMoHIy8mPOAeicJC9K0tSYUHGkpaqk06afg4IKWcAl/g8SCutJo2l+VcZe5ndngOMWTQ5TExsafx5sPDjMufAqSpGx3Wr0He2p2m3sg/dtjbYarx8Ht45VHC6kDeJfnQxGri9b1LhJxSa1mhgMGuFy986BhWcNnvhun4RI/mdbefwmOYSKDcfg6r1TsezWwm82KxftlJ18fT2jiY1G7S76kh5YBN2cJTeAqVXOkf2Sok9RUkMZoY2smVyMNIOBMLZflnrMXtxPm8aF6ABUoPOFHWWVowGYN7qDZr2feQIkgtF7Q7Pi4uSNbYKY5SoXHNiZYg5838cwZFNSFHRCA9Qywy18zZHU5UNzFP4vkeRo4rDFusFZSjbnLlVO6PXVjTc8GHmfdSPjNmnXpZKOiCVuEEQGOeXvO9C8ZiJ18vslN2sAOcxBcigccSs5qwEuZ/zEMrdY6s0MpF6olocrivgdtL4am8rupwD0KUmUKAzxt/8jNsCbEHJr4AXS00lEwTfEQ7IPn4UmbAbqGiG0zGQ3y9FV+/rUdDYNQuu/mR8VAVwwiHKB6uz/vzK9ecRJyWEq71iqKeqr8tMKM+a2igTg3TpEFmWzeky4/eFDe1dWlK/tm+8J2ybzgAccqlRY8lK1ICUN2/RlyHJaTLoVk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(376002)(366004)(346002)(39850400004)(2906002)(8936002)(478600001)(66946007)(53546011)(66476007)(8676002)(16576012)(5660300002)(54906003)(316002)(4326008)(31696002)(66556008)(6916009)(36756003)(956004)(186003)(38100700002)(31686004)(83380400001)(26005)(15650500001)(86362001)(6486002)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 55e77974-13a1-445a-a042-08d940876b24
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 14:07:41.3100
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: vJ8DC0tx1Q0bdlI9KSlbCKL/M+WKNR0kNcgOKJkVLJV8vcjRNxh+nbMOZoVIU5u50/FFEkw3onzKryErT1hOzA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3935

On 06.07.2021 15:20, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
> 
> Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
> uint64_t") updated the size of the structure vcpu_guest_core_regs and
> indirectly vcpu_guest_context.
> 
> On Arm, the two structures are only accessible to the tools and the
> hypervisor (and therefore stable). However, they are still checked

I suppose s/stable/not stable/ and ...

> by the scripts in tools/include/xen-foreign are not able to understand
> that.
> 
> Ideally we should rework the scripts so we don't have to update
> the size for non-stable structure. But I don't have limited time

... s/don't/only/ ?

> to spend on the issue. So chose the simple solution and update
> the size accordingly.
> 
> Note that we need to keep vcpu_guest_core_regs around because
> the structure is used by vcpu_guest_context and therefore the
> scripts expects the generated header to contain it.

If vcpu_guest_context is also tools-only, why does it need keeping
(for Arm)? IOW can't you drop vcpu_guest_core_regs from the scripts
altogether, and mark vcpu_guest_context with valid sizes for x86
only?

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:11:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:11:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151397.279803 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lnU-0003PR-OG; Tue, 06 Jul 2021 14:11:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151397.279803; Tue, 06 Jul 2021 14:11:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lnU-0003PK-Kw; Tue, 06 Jul 2021 14:11:36 +0000
Received: by outflank-mailman (input) for mailman id 151397;
 Tue, 06 Jul 2021 14:11:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8sr3=L6=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m0lnT-0003Ov-Ao
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:11:35 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.164])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1100dfe9-de64-11eb-8499-12813bfff9fa;
 Tue, 06 Jul 2021 14:11:34 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx66EBRS8B
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 6 Jul 2021 16:11:27 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1100dfe9-de64-11eb-8499-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625580688;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=cDMD1gNWE5j8OLTHFeB1kRoYn5Myc7ogHwXW4cwdSIU=;
    b=LSSMWOLlp3PCpEwGf4mcmQvxS9mR5wxyJipQdyBZEIzHqJJUIOXk2RLtc+xHuTD0R9
    vVODq+6K9mWSvT0VA+v1YbsUhYPtAAyKnm94euvlduk/lmxFD1yNWij9OpmBEcwQnTq6
    2qr+zJr/BlWKizKTZWSTYWCpfRUyqy1ZW+12Ml+Yi9LVHWwDNvimV44+xkQklZIEDFXc
    ACsPiTaiVSXLAbJ7rBp1HL9ixJzMcWvLBaR6tY1xIcK7JbHrZAE2K1jk65LDRkZsjArk
    vj0iQifIjVtclTTBKkTcUGMbbu7ApBG8y7FkmgbR0/fqn2l5/+RRluS2C+feqVvWBrqN
    QB2g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Tue, 6 Jul 2021 16:11:20 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
 <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross
 <jgross@suse.com>, Jan Beulich <JBeulich@suse.com>
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
Message-ID: <20210706161120.2b6394a9.olaf@aepfle.de>
In-Reply-To: <20210706145804.1ab98f16.olaf@aepfle.de>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
	<20210706112332.31753-3-andrew.cooper3@citrix.com>
	<20210706145804.1ab98f16.olaf@aepfle.de>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/nQVoWiQY2H7L4lc8CE240yE";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/nQVoWiQY2H7L4lc8CE240yE
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Tue, 6 Jul 2021 14:58:04 +0200
schrieb Olaf Hering <olaf@aepfle.de>:

> the reporting is broken since a while

A quick check on a Dell T320 with E5-2430L, which does not have "Page Modif=
ication Logging", indicates that staging-4.5 appears to work, but reporting=
 in staging-4.6 is broken.


Olaf

--Sig_/nQVoWiQY2H7L4lc8CE240yE
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDkZIgACgkQ86SN7mm1
DoCo9hAAlGe7Scoremb7ogQYmoT6MO/2LxRLprlcnbe7q4YzH3URFvrtN+Z6H7D+
BINw68PQi4jqZfycwGw8VBUtA/xUb205Zp0JvHy907UbeDKTFeGuTUg3Y24Duk9h
5JwsmahxZuaIGMRzJMqAXLHgeZkcfCYocZ1WcsAqsts05dV7N8YrWhrc+oxFjY//
kzqYfE673bnyXq8CZrf8IlOK7O2CLnfGFYcXkUHKcwo1Zc4tfVd7Rbwf4bTxKXcH
vuIBQnveXBrRNJlU1vxiXuu+CAO9UPHMFbQ/V9jLsYt7aS9OAWnEdVgATv2z5GWI
U43sZ7yndaOYpV0+BY3fWyZSsyn02TNqtM2r4aQrE3ym9Zc33vfm5FBqLwEJ6ihS
Z1bPwYlPIPX3eHJui09GjyZeHe8AhpAh+zBhwdBuWz5110rPqTbxsCmnwzTOjYhE
8A9L5mdEs5Bga9kpx+5Z3ZhrPTu4YEleM2956vVBkBYxwRlJk8YZ8izHCT96NF+w
jRjAsAQc6JuAYJUpXEGqJNDQFdQFrDhbWQG55B9DgBTHiwsaMbvw6yoAbugwNJvH
fajvfqWQqOkvDZCRtnaTsWA7MXkNcrWXRnV+zhG3/oAGHJIherlDBSnzRugdPxi4
IatTiJFx1yKJNVBBVunpzzsYOve86BoEMSyAEsn3sCbjqbLVTxI=
=pWiU
-----END PGP SIGNATURE-----

--Sig_/nQVoWiQY2H7L4lc8CE240yE--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:24:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:24:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151405.279817 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lzv-0004xB-2O; Tue, 06 Jul 2021 14:24:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151405.279817; Tue, 06 Jul 2021 14:24:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0lzu-0004x4-VY; Tue, 06 Jul 2021 14:24:26 +0000
Received: by outflank-mailman (input) for mailman id 151405;
 Tue, 06 Jul 2021 14:24:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0lzt-0004wy-Mj
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:24:25 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0lzs-0002ni-Hb; Tue, 06 Jul 2021 14:24:24 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0lzs-0007FN-Av; Tue, 06 Jul 2021 14:24:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=ePerZbtaBFYWtRtl+H/GYsuY6iX29lYBszuvuXenR6Y=; b=MCaUkTl7zabgsMK0Nhfy8eM7yq
	Vf4RjVaJoJR8Wd+4L4Ert0IyzAEqxBct0M52L+TfPl90vFdWiKpLYeMOnwD/8Wfl+NkpLDL4aeIFG
	NHToe5TOhX2ze5r2r4tscSEN0m3VwYH6ihIufgYWWOPyBQzhPS7DDvvoQmIRVpyOMR94=;
Subject: Re: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, michal.orzel@arm.com, olaf@aepfle.de,
 xen-devel@lists.xenproject.org
References: <20210706132000.29892-1-julien@xen.org>
 <fa29ee07-0231-378b-4f28-07d894b371f5@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <07a19e2c-161c-cb41-1023-f8b6e6a766bc@xen.org>
Date: Tue, 6 Jul 2021 15:24:22 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <fa29ee07-0231-378b-4f28-07d894b371f5@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 06/07/2021 15:07, Jan Beulich wrote:
> On 06.07.2021 15:20, Julien Grall wrote:
>> From: Julien Grall <jgrall@amazon.com>
>>
>> Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
>> uint64_t") updated the size of the structure vcpu_guest_core_regs and
>> indirectly vcpu_guest_context.
>>
>> On Arm, the two structures are only accessible to the tools and the
>> hypervisor (and therefore stable). However, they are still checked
> 
> I suppose s/stable/not stable/ and ...
> 
>> by the scripts in tools/include/xen-foreign are not able to understand
>> that.
>>
>> Ideally we should rework the scripts so we don't have to update
>> the size for non-stable structure. But I don't have limited time
> 
> ... s/don't/only/ ?

Yes I will update.

> 
>> to spend on the issue. So chose the simple solution and update
>> the size accordingly.
>>
>> Note that we need to keep vcpu_guest_core_regs around because
>> the structure is used by vcpu_guest_context and therefore the
>> scripts expects the generated header to contain it.
> 
> If vcpu_guest_context is also tools-only, why does it need keeping
> (for Arm)? IOW can't you drop vcpu_guest_core_regs from the scripts
> altogether, and mark vcpu_guest_context with valid sizes for x86
> only?
I have tried to use "-" in place of the size but the checker is still 
not happy. I didn't find another way without modifying the script...

I don't know the script and I don't have a lot of time to work on the 
bug fix. So this is not something I could do this week.

So this leave us to the following options:
   1) Someone volunteer to fix the script
   2) Revert the patch that broke the build
   3) Accept this patch

I would prefer 3) so we have more time to work on making the script a 
lot smarter.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:44:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:44:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151413.279834 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mJQ-0007FV-Ra; Tue, 06 Jul 2021 14:44:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151413.279834; Tue, 06 Jul 2021 14:44:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mJQ-0007FO-OS; Tue, 06 Jul 2021 14:44:36 +0000
Received: by outflank-mailman (input) for mailman id 151413;
 Tue, 06 Jul 2021 14:44:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0mJO-0007Ey-O2; Tue, 06 Jul 2021 14:44:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0mJO-0003GB-Fu; Tue, 06 Jul 2021 14:44:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0mJO-0002fD-91; Tue, 06 Jul 2021 14:44:34 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0mJO-0000i1-8W; Tue, 06 Jul 2021 14:44:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Okv0InQoCj+wSdnpwnBnVRzfOMLPh97giWjiR1pG/s8=; b=ug/4UJ0TrYIaxZT2MxQ2seXU1g
	nlL/QAhRER1dXSC4HJXbvDdKOME78vGSQub/cLB9b2wlF7eYf+BXYVM2aCku25VlO2aTaJF2/5Cqz
	pqUzFWyUnK5rFoVwHHzDHcP61oTydWtbuTZ6bMusAER+/izA0aUOwC5U1V98OlJFqozg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163332-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163332: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 14:44:34 +0000

flight 163332 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163332/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 14:48:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 14:48:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151420.279847 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mMy-0007uH-Ch; Tue, 06 Jul 2021 14:48:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151420.279847; Tue, 06 Jul 2021 14:48:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mMy-0007uA-9g; Tue, 06 Jul 2021 14:48:16 +0000
Received: by outflank-mailman (input) for mailman id 151420;
 Tue, 06 Jul 2021 14:48:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8bei=L6=oracle.com=konrad.wilk@srs-us1.protection.inumbo.net>)
 id 1m0mMx-0007u4-7g
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:48:15 +0000
Received: from mx0a-00069f02.pphosted.com (unknown [205.220.165.32])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 30e84062-de69-11eb-849e-12813bfff9fa;
 Tue, 06 Jul 2021 14:48:14 +0000 (UTC)
Received: from pps.filterd (m0246629.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 166Ea92x007666; Tue, 6 Jul 2021 14:46:30 GMT
Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79])
 by mx0b-00069f02.pphosted.com with ESMTP id 39kq8eb22y-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Tue, 06 Jul 2021 14:46:30 +0000
Received: from pps.filterd (userp3020.oracle.com [127.0.0.1])
 by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 166EaUSp016951;
 Tue, 6 Jul 2021 14:46:29 GMT
Received: from nam11-co1-obe.outbound.protection.outlook.com
 (mail-co1nam11lp2168.outbound.protection.outlook.com [104.47.56.168])
 by userp3020.oracle.com with ESMTP id 39k1nv635h-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Tue, 06 Jul 2021 14:46:28 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com (2603:10b6:a03:85::27)
 by BY5PR10MB4148.namprd10.prod.outlook.com (2603:10b6:a03:211::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.16; Tue, 6 Jul
 2021 14:46:23 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d]) by BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d%6]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 14:46:23 +0000
Received: from char.us.oracle.com (138.3.200.56) by
 SA9PR13CA0101.namprd13.prod.outlook.com (2603:10b6:806:24::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.12 via Frontend Transport; Tue, 6 Jul 2021 14:46:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 30e84062-de69-11eb-849e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc
 : subject : message-id : references : content-type : in-reply-to :
 mime-version; s=corp-2020-01-29;
 bh=WU+kWS+XFwScrBHDFLuHuPL8XAeR1HWcalcFJDsg5/A=;
 b=ljpM98954IvHlAJtclNXnzXU4bMz9wn7GaK8celDgHItU3i1yeDwdbg+ZsQDArrXuQxC
 imZllZaAKMFdKATE7d+bWo7vBXIAwdwVF1/FfCFHJA93dK6oHtjqfLzp9ME8PDtvW0oU
 vwgmGG5Ae5vTrDfFJurOG6byc3EyZv7ptrcTPlrt9HZNzqwTo6ptBTANNS+Yq4LW1t0s
 bQr20/8oupHA8HBMaN6kHlhIFv4cBiL6xSPakuRkKkMKBkajaaTxP5f55D4yO+Sazp/v
 1rgLevs4fkbDwG2oMpadh3Ks2Kz+bojXWijZEvR+FL8TPeUtG5shX3/KbABlhjeop55v HA== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZGnTw1swKcW5ip8J4JmjZSqOFUFv+Z7J0PAEOYO/6hNXTzdXvOLrNAirdhv4zbr3UlF/r/p0OOemrO1JjsCFhreATieBhz99voxQU8q71X2xJBRqcWi9BYHQGz4JFV25lrk2xgYgIyzQI0DvhF6Nhfl5NAaL8TKU270O+sVU6vjQtOiMbQLUrw38R2ETunyQaEdc36d4X7G9z7nj4KZK2nex88XVBhoDHfx6IErHoiASubQvLS2egua3f35RIDd3Hj3KPM3df+KHKhDv26uaQiAB1nut5eGzEop+G1jrRAh+YMaaoJudf/FpfaA6A07165gif9un55Ti8lm2F6rjjg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WU+kWS+XFwScrBHDFLuHuPL8XAeR1HWcalcFJDsg5/A=;
 b=UPgeZ49NT7JcUfjo6Rpw3D3Et0hbOa8BX0EQbXpm271GjU+mNAgIK/fdGjUB4fjn87bVL0qASWFDfEOlxs7zWPaTJBHG3V/enVlRnUfKdIvKRYOHjabeMr5PUChKJH/dOR5xnJ+EjH8cAxdYX65PQbxo3oEBDo5bQBP/n0XWzOyNwPabFdnOJeanH2JYLpnqGeY05OKkSSfZtsibhQPwV+C+hNy3OTusnOR+iVbEs93rY+ND+KH3vKd93+AGI0T8jo86akEFjQkqPdEoveBT5G8g5YLEcBbuQJQuXECUYyQjdR1OCyau+KWI+V/Sm8GXRdBWXGp6DD7Pcm/4zCwrIw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WU+kWS+XFwScrBHDFLuHuPL8XAeR1HWcalcFJDsg5/A=;
 b=dTxG3qWmEG98UvY0KgSxasmXk1z+hyVb1s/lfz6eLJJ97qyZaYDWAzWGs/1d1V9te3baS2j8lKrSOJGfiA0OU3ovAL3oqigBm8H/6DnuIJy/c84pLBc7FWGhY036bxMmM2VrrFd9FrMna/eKWOvp0ktvvP3s9Tnwp1JESmmtrPc=
Authentication-Results: lst.de; dkim=none (message not signed)
 header.d=none;lst.de; dmarc=none action=none header.from=oracle.com;
Date: Tue, 6 Jul 2021 10:46:07 -0400
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Robin Murphy <robin.murphy@arm.com>, Will Deacon <will@kernel.org>,
        heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
        peterz@infradead.org, benh@kernel.crashing.org,
        joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
        chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
        Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
        Stefano Stabellini <sstabellini@kernel.org>,
        Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
        "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
        Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
        linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
        Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
        matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
        Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
        maarten.lankhorst@linux.intel.com, airlied@linux.ie,
        Dan Williams <dan.j.williams@intel.com>, linuxppc-dev@lists.ozlabs.org,
        jani.nikula@linux.intel.com, Nathan Chancellor <nathan@kernel.org>,
        Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
        Bjorn Helgaas <bhelgaas@google.com>,
        Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
        Andy Shevchenko <andriy.shevchenko@linux.intel.com>, jgross@suse.com,
        Nicolas Boichat <drinkcat@chromium.org>,
        Greg KH <gregkh@linuxfoundation.org>,
        Randy Dunlap <rdunlap@infradead.org>,
        Qian Cai <quic_qiancai@quicinc.com>,
        lkml <linux-kernel@vger.kernel.org>,
        "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
        Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
        Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <YORsr0h7u5l9DZwh@char.us.oracle.com>
References: <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210706140513.GA26498@lst.de>
X-ClientProxiedBy: SA9PR13CA0101.namprd13.prod.outlook.com
 (2603:10b6:806:24::16) To BYAPR10MB2999.namprd10.prod.outlook.com
 (2603:10b6:a03:85::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3025c928-428b-4e34-408e-08d9408cd2e6
X-MS-TrafficTypeDiagnostic: BY5PR10MB4148:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<BY5PR10MB41488CBFBBC87F5A0D8771B6891B9@BY5PR10MB4148.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	zF6soiZvqQ5qK3hqPmokbLbv7oSQfaV92o/5XjwtoXrBZWQFQPz+wW678QL4wTY5k5ZCfXWq5Lq8r4W+6DdO4dp4dxT8OB58Qh+3Gso3HkYUhPjLIE4B3WSMht+E6V+A++qEKz7lO+Ds8jc3+wCUe9nxeH8NXRt1e5eQQf4lv1u4r5rYwv+vRBuTDJbDeTolJnrd23RSyc9mRbqkBgaFHGOxk9ymj3WWeRQy5iPzm0N4KjQm5Lkwa22g394xGUcVc2U99x/DCRYK7HF/t3m+UbpBTQkqE6XV/IPx6WP2XFykVTYnOSnvXfJDdRq1839Pt/59hqSvHEqIyalZiSqlBNNkobvj01ky0rmuES6qv9YstFZUyoLeDdg2AF/pjXiMStTZXEWwgu9ZPSLUIqq9AOudfPABjkgIv8PuX4QyU/NVpy3H7nIkXVayYXsnBCWR6peYbPOhnkJzKXZRLAHu5znTwPFliuTJhcrz/7wVY2EV4Z1SbIz6cQUCv5ttLigzaKaAvQWAv0t2PsnxDoubqArLdRhhwwXGS5WtmNrWAR91QOwAnqK9cEq0MzipvpCbeV6qDNwSkbnGqyDCyIAQt4+Qdz+N3zQEKt29hNwn118pkmgo4V17rlN5f2aIyfkV2IQDgq+9HVmDEMAxSXy/ag2XjG18zq0IKJ/ddCL0H7ylKJVOQfi0Y8uhxTCv18JSiJ3hwKZVHt6KsTdU8FvNhw==
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2999.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(346002)(396003)(136003)(376002)(4326008)(26005)(52116002)(7696005)(956004)(478600001)(66476007)(7416002)(186003)(7406005)(7366002)(86362001)(6916009)(38350700002)(38100700002)(5660300002)(55016002)(8936002)(54906003)(2906002)(66556008)(8676002)(316002)(66946007)(6666004);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	=?us-ascii?Q?ylmDwz4fIvOiYvZenj2A98Qc4waYmu0qu9/y10agl2MovOknW/kj9bS4dIKy?=
 =?us-ascii?Q?kzOMtO6hZE/AtHsmdBqyFsgdnfYcpE5Sp0BNocjxGTT0irDdAd9MNu+Zjg5s?=
 =?us-ascii?Q?J0nWMeE6ReYK5jYw8Q8488gHHxN805F8JpvsyzWk/9P4PlR9peIU/x2XDeRT?=
 =?us-ascii?Q?PElgi1zHnvjyncWax6mYAlgxusncGDEZHPkI3g9cqdrUxsK5T63iNXOjQeND?=
 =?us-ascii?Q?X2OH3l6sC1hjDvC2gxupEHJPgB0vQmdo7YDJOvSqs+glaIuqW+IfQxcXK6Or?=
 =?us-ascii?Q?sxQm1ieS8n1xc0ZQD+zAiOT0bg3+LTYaGiO3f3jPk+cEPzeQAIiZY/qTA2Vc?=
 =?us-ascii?Q?PHyzUMD+nar9xGaOTvtvmh0Td2Mfv35JASQr5NpY29dh7s4Klrcniy74BOf1?=
 =?us-ascii?Q?u7s2ppj7XsT4xUqSxQJKSPMAn9xnQfNKgVNl4D8BN0mXzQv9smLhlJhE7h66?=
 =?us-ascii?Q?fdIwcvJp3+Hb0GH+uMslBX4I3nYNSde9d+YKYY0zhlZ7xZ6QFgzYAr+35dSa?=
 =?us-ascii?Q?GwlxnQfMcV6TMtnShlFSmc4xoTkUgozMyB+fYab7X91e/t6CKtA0WeTZnW3A?=
 =?us-ascii?Q?MUp3YncCSSmEl+Bn2dBW+aR6GDLpZoqaaWivOlHmm0VLZjgb7B1CNsBw4zOg?=
 =?us-ascii?Q?YIPqDTMvrceomjZuZmPRNjkXE8m3bLNchfsW+4XaEmU34JHjrg1RMlUpaIAX?=
 =?us-ascii?Q?AjvmEiXWEhqwHfkvcJkooJGhfla+7D5wZUVA3Oqr4GHJbqSRB1HVViIVd8Pt?=
 =?us-ascii?Q?fhq96k43i7HKe/nLQZxvIBP9dACKZW6kqjrOBc4szQM9NeD28ER9cK7gFX/Z?=
 =?us-ascii?Q?wBj8f3Kd+InP9LraK+pVLaQkizpgNEBy5Khp8LNFwKx2QBsIDRRHe/ph3s6S?=
 =?us-ascii?Q?GGO+JAt6nz61QJ3A6IM+wjxwtQxJWPTxRPMyX5DvrHbN3Umq/yPviooWlcg0?=
 =?us-ascii?Q?3UyFGhYKnKEVLCItFWZVhMr9c9m1RKMmw/80PCQThGkW/KDxP44B0pgQe1wx?=
 =?us-ascii?Q?K0rDHqi80QRNtpL/WpPBJ9dS6rwPzgKNfuhmMlqZRfLmtwpqdIiVl7K5r5X5?=
 =?us-ascii?Q?N7gBvdec0XcBKzaxQi97BsNnG4mvBkgns6pdXToh+XpyLGUOF13XQBKuzElF?=
 =?us-ascii?Q?xHwGFixJJTfRqlAXZRkxIqOR3QWOGz7uPvEG2R+upn/90caFAztXOWhblXTS?=
 =?us-ascii?Q?PUb0BTERL55p1lxuNz7fKdZ9A7SckPqeT+pxjosxGWgt0KF6e/dp5rMZMTE1?=
 =?us-ascii?Q?gZ3mCx6mOReNtlBLTB+MxqKkf1CtyBgkdxWfhIONaPMpJa1i269Tg39PX6FK?=
 =?us-ascii?Q?WZoteRTQ6Xr9npwaCdc1oV3m?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3025c928-428b-4e34-408e-08d9408cd2e6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2999.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 14:46:23.0788
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: aWnBQz0Nm3vUrv9srYd4Kk1ov4KnDekN5v7MvGmwZCxRwUoX4n3GZhCUf/xMSE5l+zgBcq4SLUcaR4pDsl9LNA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4148
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10037 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0
 adultscore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0
 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000
 definitions=main-2107060068
X-Proofpoint-GUID: EICPB_qXh3tYgTdDU7lDjxv4jJl8DKoT
X-Proofpoint-ORIG-GUID: EICPB_qXh3tYgTdDU7lDjxv4jJl8DKoT

On Tue, Jul 06, 2021 at 04:05:13PM +0200, Christoph Hellwig wrote:
> On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> > FWIW I was pondering the question of whether to do something along those 
> > lines or just scrap the default assignment entirely, so since I hadn't got 
> > round to saying that I've gone ahead and hacked up the alternative 
> > (similarly untested) for comparison :)
> >
> > TBH I'm still not sure which one I prefer...
> 
> Claire did implement something like your suggestion originally, but
> I don't really like it as it doesn't scale for adding multiple global
> pools, e.g. for the 64-bit addressable one for the various encrypted
> secure guest schemes.

Couple of things:
 - I am not pushing to Linus the Claire's patchset until we have a
   resolution on this. I hope you all agree that is a sensible way
   forward as much as I hate doing that.

 - I like Robin's fix as it is simplest looking. Would love to see if it
   does fix the problem.

 - Christopher - we can always add multiple pools as the next milestone
   and just focus on this feature getting tested extensively during this
   release.

 - Would it be worth (for future or maybe in another tiny fix) to also add
   a printk in swiotlb when we de-allocate the buffer so when someone looks
   through the `dmesg` it becomes much easier to diagnose issues?



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:02:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:02:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151426.279865 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0maJ-0001hv-Oe; Tue, 06 Jul 2021 15:02:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151426.279865; Tue, 06 Jul 2021 15:02:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0maJ-0001ho-Kk; Tue, 06 Jul 2021 15:02:03 +0000
Received: by outflank-mailman (input) for mailman id 151426;
 Tue, 06 Jul 2021 14:52:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3JON=L6=infradead.org=geoff@srs-us1.protection.inumbo.net>)
 id 1m0mR5-0000q4-Ch
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 14:52:31 +0000
Received: from desiato.infradead.org (unknown
 [2001:8b0:10b:1:d65d:64ff:fe57:4e05])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e517c6d4-8535-4a9f-a129-8257890c2b2a;
 Tue, 06 Jul 2021 14:52:27 +0000 (UTC)
Received: from [2602:306:c5a2:a380:b447:81b0:ffaa:defc]
 by desiato.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux))
 id 1m0mQg-00F4IY-8x; Tue, 06 Jul 2021 14:52:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e517c6d4-8535-4a9f-a129-8257890c2b2a
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type
	:In-Reply-To:MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:
	Sender:Reply-To:Content-ID:Content-Description;
	bh=1ayrkKf5NvJjQdfUl2A/VO9K+bU0q5/9ZgivWetFS3o=; b=JbK3meFocLJ6fB6QYONBPtOQk9
	DJh8XYIRvVsq19DtaRbOde3Pqt+U3mVhAJRiVq9/pLYYfHRPetQ2VwkvtOK63TFIov9LQtN9N9PJt
	W7/r5BUcb6i86u+BjFat8OYQU9y2P1DA/EDcTwU14mU2aPtj4aDiy4zBQ/DSm0rkTEqy36baSOqyA
	V4yYgj7JmTV6DLtcs5VRxDGb3q6cP0CLL/po4JfkE8jt0lxs+Hs+g3d6AcmGzyEozq//QEL4RnMt8
	byUYd3U5VUmkthiwr4pU7QnYiaWZQxohw6U15DrlSostKCZf7pcDzFMvg9GIfhVhYyVE4cG/tyrih
	3mmB/xNA==;
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org,
 Russell King <linux@armlinux.org.uk>,
 Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
 Helge Deller <deller@gmx.de>, Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>,
 Paul Mackerras <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
 Len Brown <lenb@kernel.org>, William Breathitt Gray
 <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?=
 <zajec5@gmail.com>, Maxime Ripard <mripard@kernel.org>,
 Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec <jernej.skrabec@gmail.com>,
 Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>,
 Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>,
 Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>,
 Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>,
 Jiri Kosina <jikos@kernel.org>,
 Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
 "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>,
 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
 Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>,
 Dmitry Torokhov <dmitry.torokhov@gmail.com>,
 Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
 Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>,
 Mauro Carvalho Chehab <mchehab@kernel.org>,
 Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>,
 Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>,
 Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>,
 Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>,
 Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
 Kishon Vijay Abraham I <kishon@ti.com>,
 Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
 =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>,
 Bjorn Helgaas <bhelgaas@google.com>,
 Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>,
 Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>,
 Bjorn Andersson <bjorn.andersson@linaro.org>,
 Mathieu Poirier <mathieu.poirier@linaro.org>,
 "Martin K. Petersen" <martin.petersen@oracle.com>,
 Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
 Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
 Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
 Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>,
 Alex Elder <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>,
 Michael Jamet <michael.jamet@intel.com>,
 Mika Westerberg <mika.westerberg@linux.intel.com>,
 Yehezkel Bernat <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>,
 Jiri Slaby <jirislaby@kernel.org>,
 Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>,
 Alex Williamson <alex.williamson@redhat.com>,
 Cornelia Huck <cohuck@redhat.com>, Martyn Welch <martyn@welchs.me.uk>,
 Manohar Vanga <manohar.vanga@gmail.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross
 <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>,
 Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>,
 Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>,
 Tyrel Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>,
 Samuel Holland <samuel@sholland.org>, Qinglang Miao
 <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>,
 Kai-Heng Feng <kai.heng.feng@canonical.com>,
 Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=c3=a1r?=
 <pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>,
 Frank Li <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>,
 Bodo Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>,
 David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>,
 Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
From: Geoff Levand <geoff@infradead.org>
Message-ID: <7a68b536-302c-0374-848f-4b9535ff1306@infradead.org>
Date: Tue, 6 Jul 2021 07:51:36 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/6/21 2:50 AM, Uwe Kleine-König wrote:

> --- a/arch/powerpc/platforms/ps3/system-bus.c
> +++ b/arch/powerpc/platforms/ps3/system-bus.c
> @@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
>  	return result;
>  }
>  
> -static int ps3_system_bus_remove(struct device *_dev)
> +static void ps3_system_bus_remove(struct device *_dev)
>  {
>  	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
>  	struct ps3_system_bus_driver *drv;
> @@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
>  			__func__, __LINE__, drv->core.name);
>  
>  	pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->core));
> -	return 0;
>  }

PS3 part looks fine.

Acked-by: Geoff Levand <geoff@infradead.org>


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:09:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:09:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151438.279876 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mhf-0002UZ-Mk; Tue, 06 Jul 2021 15:09:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151438.279876; Tue, 06 Jul 2021 15:09:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mhf-0002US-Jo; Tue, 06 Jul 2021 15:09:39 +0000
Received: by outflank-mailman (input) for mailman id 151438;
 Tue, 06 Jul 2021 15:09:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=bertrand.marquis@srs-us1.protection.inumbo.net>)
 id 1m0mhe-0002UM-Ch
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:09:38 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d947b234-7e35-45da-a3bd-c505a11bb348;
 Tue, 06 Jul 2021 15:09:36 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5505C106F;
 Tue,  6 Jul 2021 08:09:36 -0700 (PDT)
Received: from e109506.cambridge.arm.com (e109506.cambridge.arm.com
 [10.1.199.1])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 337073F73B;
 Tue,  6 Jul 2021 08:09:35 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d947b234-7e35-45da-a3bd-c505a11bb348
From: Bertrand Marquis <bertrand.marquis@arm.com>
To: xen-devel@lists.xenproject.org
Cc: jgrall@amazon.com,
	michal.orzel@arm.com,
	olaf@aepfle.de,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>,
	George Dunlap <george.dunlap@citrix.com>
Subject: [PATCH] tools: Fix CPSR/SPSR print size
Date: Tue,  6 Jul 2021 16:09:10 +0100
Message-Id: <f28690afd8c4f36351fcdb1e95704cc5240b193a.1625583993.git.bertrand.marquis@arm.com>
X-Mailer: git-send-email 2.17.1

With the changes of register size introduced in
918b8842a852e0e7446286f546724b1c63c56c66, CPSR and SPSR are now stored
as 64bit values.

Fix the print size to use 64bit type.

Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
---
 tools/libs/guest/xg_dom_arm.c | 4 ++--
 tools/xentrace/xenctx.c       | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/tools/libs/guest/xg_dom_arm.c b/tools/libs/guest/xg_dom_arm.c
index 01e85e0ea9..5e3b76355e 100644
--- a/tools/libs/guest/xg_dom_arm.c
+++ b/tools/libs/guest/xg_dom_arm.c
@@ -140,7 +140,7 @@ static int vcpu_arm32(struct xc_dom_image *dom)
 
     ctxt->flags = VGCF_online;
 
-    DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx32,
+    DOMPRINTF("Initial state CPSR %#"PRIx64" PC %#"PRIx32,
            ctxt->user_regs.cpsr, ctxt->user_regs.pc32);
 
     rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
@@ -182,7 +182,7 @@ static int vcpu_arm64(struct xc_dom_image *dom)
 
     ctxt->flags = VGCF_online;
 
-    DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx64,
+    DOMPRINTF("Initial state CPSR %#"PRIx64" PC %#"PRIx64,
            ctxt->user_regs.cpsr, ctxt->user_regs.pc64);
 
     rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
index 972f473dbf..85ba0c0fa6 100644
--- a/tools/xentrace/xenctx.c
+++ b/tools/xentrace/xenctx.c
@@ -556,7 +556,7 @@ static void print_ctx_32(vcpu_guest_context_t *ctx)
     printf("PC:       %08"PRIx32, regs->pc32);
     print_symbol(regs->pc32, KERNEL_TEXT_ADDR);
     printf("\n");
-    printf("CPSR:     %08"PRIx32"\n", regs->cpsr);
+    printf("CPSR:     %08"PRIx64"\n", regs->cpsr);
     printf("USR:               SP:%08"PRIx32" LR:%08"PRIx32"\n",
            regs->sp_usr, regs->lr_usr);
     printf("SVC: SPSR:%08"PRIx32" SP:%08"PRIx32" LR:%08"PRIx32"\n",
@@ -614,8 +614,8 @@ static void print_ctx_64(vcpu_guest_context_t *ctx)
     printf("LR:       %016"PRIx64"\n", regs->x30);
     printf("ELR_EL1:  %016"PRIx64"\n", regs->elr_el1);
 
-    printf("CPSR:     %08"PRIx32"\n", regs->cpsr);
-    printf("SPSR_EL1: %08"PRIx32"\n", regs->spsr_el1);
+    printf("CPSR:     %08"PRIx64"\n", regs->cpsr);
+    printf("SPSR_EL1: %08"PRIx64"\n", regs->spsr_el1);
 
     printf("SP_EL0:   %016"PRIx64"\n", regs->sp_el0);
     printf("SP_EL1:   %016"PRIx64"\n", regs->sp_el1);
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:10:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:10:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151443.279887 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0miL-0003kT-1S; Tue, 06 Jul 2021 15:10:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151443.279887; Tue, 06 Jul 2021 15:10:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0miK-0003kL-Tp; Tue, 06 Jul 2021 15:10:20 +0000
Received: by outflank-mailman (input) for mailman id 151443;
 Tue, 06 Jul 2021 15:10:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0miK-0003j4-3i
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:10:20 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 463cfedc-de6c-11eb-84a4-12813bfff9fa;
 Tue, 06 Jul 2021 15:10:18 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2058.outbound.protection.outlook.com [104.47.12.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-4-a73sGQ4tPGe0nWUPRMxuuQ-1;
 Tue, 06 Jul 2021 17:10:16 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 15:10:14 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 15:10:14 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0100.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Tue, 6 Jul 2021 15:10:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 463cfedc-de6c-11eb-84a4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625584217;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=vMTxia+wYFkk0gt7axk38Mr1H+q4GPh0gEg8vPu5r/8=;
	b=TMb7Cymw96kHJRoOkUJAqIUPb9YsPVGIzj8vw1FTpoqxU7WkcMwhARt2UCt3B8vep9ws6X
	+lo8UUOXhv5+TmsvnV20Zvnn17J4K74QfLdvXlh/VHBwVetP30pcjGkC8skqWhtcxMlGCx
	IZyXVWX46v4q5QGxBsxeQ7u6Xg2eZoY=
X-MC-Unique: a73sGQ4tPGe0nWUPRMxuuQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YxEHuCZNMQY3nBmKqRCCb1n3/NfLO6cDdLffqCIMc6ftbTtRUKSc0ldj16P9zsKTxI7s9T18yGa0lpEmukghSmvUKR+YDbP+aMVPH1Czg/KZC4yY4F4rguqNv8znNw+NAZxY/NG19Iz4tUjqEkOH5zkEKnEomogY2WsqbWtc2yVzbVpxMVTqCBsw0BMGE7hpvJU27GW5YKn/zRSzNoI83Emnf9pDvdYjtpnSLfCE1kiOj78iWTZLPcs+H1zNCnV4sSZUjI9tbSO+sZjqwYJ/RprBXpf6XSbq6x42E7OUXmPGOWMwpGQEHH9sn2foZiPegE8xd3CtjZaBaA0J3NI/QQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vMTxia+wYFkk0gt7axk38Mr1H+q4GPh0gEg8vPu5r/8=;
 b=hdto3jhsGi94ef4dNK/Y0CHyaiEg/vbABvF5YgBooW1wP7KQdKiPQhjxe2UK/wCP5aFEKXV0XY1RODwbvblbS9T54vAXW6rHCSqBqhTYzv1eIjjd1k9CAN7H2amj4ZG9dOn2UF+hjoXy4ue+xrXCQkNhXZrOIJDcA6ocssUhinZfkDHZTsA+tvg27iwYwUekQqUHc2t68rxTcGc1/MNlO+RGvQ8BZ43dNO51eHKdrgLpK64ooHY/Vvc31Toxzx1eioJlpPaotrQJ3r+cfMHqaQ08C47j6z1lmFHFGk2ql7RrME9PqNEnJdsHI5c33ksMKaalJFZ7Jkca1VqgV+VN/A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, michal.orzel@arm.com, olaf@aepfle.de,
 xen-devel@lists.xenproject.org
References: <20210706132000.29892-1-julien@xen.org>
 <fa29ee07-0231-378b-4f28-07d894b371f5@suse.com>
 <07a19e2c-161c-cb41-1023-f8b6e6a766bc@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <873f5e68-1ff2-1076-1961-a4bc44950fd3@suse.com>
Date: Tue, 6 Jul 2021 17:10:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <07a19e2c-161c-cb41-1023-f8b6e6a766bc@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0100.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::16) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6e3d7c2d-7e1f-47a7-7b97-08d94090282c
X-MS-TrafficTypeDiagnostic: VI1PR04MB5600:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5600E9BF314C481129447622B31B9@VI1PR04MB5600.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2qa7n6JPBk5gF3C1ZdpjS1NX+b7IfepUME4/IedcMKvLKa7f3sHF5v9UOcglSQvjfXH2FV6zalqgvCa1X+49XL03bNOgxWDuXe/kRM+Y1WAdSRtKmaJ6Qc8YFPVj+i6iiGs4VgbgZYuPHO7NCpRvMo6WQStaDJo8jmtORsf/xTcY3l/usYaVLqbBOU2BdOB9VZbtD9X4GNgbmL36JoJXXhCuqaN6VKQrPfyVHFe1XQE7OznVFmdd0cUFvPSfZFsmLqRWFO98c1CRLRjoIKLiqrClGRX91Y+icKQeYR9O7rDn6Ioj6tenk0Xr/w+scmlim0n7MR0JDTQEJviMrdbRXYnF46SnwJuravubNZOiMAKsCjQcj+xeGWWeOiexLiCndx56sBwN4D7kCHE1r0mB7odKf4I1xmvI5Y8z8Bx8EMR3NSEXbZPJ4ptNeLH2U3fbEE7yTiZmwh1g2ZmLRjPl683BowIzBIRxMjbkFye+K88q5fMrTSaWj5lXRqUIWzkPVdSOgAcucrn00x9wGQUSoeFpFuawT6WPsV8e728p8LIDONXfFVDxMvihe/uEfHZQ54d7oH5axA34MXv/tMozW2EEa4fKpUPztV7+8LLzVYbMPDTlPn0DWhRU7iqEUC+yVQDKQtGFLReVHvKEkmcr3nbV5n+00zKho9Ay2ewpj+2NFiPUYsUO3uiprnNrEMVtG4bGyZdkHyGOb3ELxqonAspN+Of49niwvS5JNkt4368=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(136003)(376002)(366004)(346002)(478600001)(38100700002)(66946007)(5660300002)(956004)(66556008)(2616005)(66476007)(15650500001)(186003)(8676002)(31686004)(36756003)(26005)(6486002)(8936002)(2906002)(6916009)(4326008)(31696002)(83380400001)(53546011)(86362001)(54906003)(16576012)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?Wktsdmp5c3FjRUlWNk5aVlVVR3RGWjBrYmI2R0doY1FzNStGTkdTRnlPNkpu?=
 =?utf-8?B?VjNNRk1ocXNRcXgzcXhSaUEwYUxJckNjSGU0ZzA0dUdEMlFEY2doNnFkSWZ3?=
 =?utf-8?B?Rm9YT2wzR0VoRHhsTkpjQjc2U21wK1JqZEgvUlFFNzFLODNOWWY4UENIQXFa?=
 =?utf-8?B?RGtVeUFFZlR2MDZSK3NjakFTbWlJMy9MdXpzMGJOTTdDK3VZcUxvaFRYa2F1?=
 =?utf-8?B?enBhQnZqQ3pJQTNVV1J4elZnUGNLbEVVY21vUE9DaGRzNmt3L09XbS9TWHdt?=
 =?utf-8?B?ZnpJZGRwbnI0UU1ENWwxL05jamYvWExobnZqc2JvOGx0SVM5SE0zWDJpbyto?=
 =?utf-8?B?dFM1QzVONEZlbnhBRTU1QW44ZTJyR1d3bW9tMDV1bFcwNTcxWDh3VVdjbHdp?=
 =?utf-8?B?MTU5Q0NFeTNxbXlrMzJ5a1ZIa0l3cmFVOWFOMUZZU2l6dTVBSzg5eWYyZEdK?=
 =?utf-8?B?UkNzTUFNZEE4TDVzRk1jVVVka1pLVjNpdGRKU1JUT1BxaTF4eXpuRFdYK3JR?=
 =?utf-8?B?TXhHYUo2Z2VORGUwVHlPYzdFNThoMEtXTHliTlZBckVxSGRzMGRHOG1IMDR5?=
 =?utf-8?B?Q1V4cVpxS2tqRUxJU2xsMC9oMlNmRVhhVlhPeDF1eUIyeFN1K3ZHSGlpQ1FU?=
 =?utf-8?B?NzRxLzhuNVdMYWhuQTFMdms4YWczR3ZONkRkRzFVc053Vk9seVYrKzJiOEs1?=
 =?utf-8?B?a3JBMEg0VWVBK0poYktXUzhjSzl0WVBqTW5YbmhjdVdaNzZhLzczVHlaRmpD?=
 =?utf-8?B?QjVBZzcyT1lKcDN5OER0cEZ5bkVQeUR1b2xla2NuOFZTQy9ranpVQTZDSGI5?=
 =?utf-8?B?RFFHdVRWSFI0cmlKUWhjdlV0bkZuN1VUK3k3SnR6cEFoYk8xRlI2OU1RWjMr?=
 =?utf-8?B?d2hCK2p2ZkRUaGVpb2JYbjhWMHlqOWY3c1FMMHpvcmJTQXRlWDZxUzRadjl2?=
 =?utf-8?B?SG56VzhBYXdhUGNOcFBOSld5eThpYVFoa3M4VHVhTWVhM3hFNFl2Ny9xbzRl?=
 =?utf-8?B?c01hK2pEWGwvN0REa1VaK3JqQUJ4aDZKVENyTFVUVGtwbVJXT0ptc2FjK3Y2?=
 =?utf-8?B?Rzl0OHJXRjlvaGlqMWtvVE5qVm9JR2JmcnRNamI0SVU4VWZsTTdWUEkwNmF2?=
 =?utf-8?B?SWxVRkViSlMvV0JmU2FaMVE0SEVSNVhjck01emdaTkRtelpiY2FNbkhxa2Z2?=
 =?utf-8?B?eGJ6K3Z6cGxiSmFjbXVPZVJyTGtmbStFYlRVMldMcW53RUduN3J4dVhPa0ZG?=
 =?utf-8?B?WWxXQUFBWTRscW1QREFQbkFTeitoWlBYa2VpVkVNZmZLMUNhM2JRWHRQWUlR?=
 =?utf-8?B?bE13a05UMW5BOXYrVDZCb3F5TlcvS1hZckx2ZWZuZTdxeUFUNjJyaVZWSzJi?=
 =?utf-8?B?SFAvb2ZtQzVYYitUSUtzQ3RYdlhvR3V6NkY1UCtJVFBBYlFaOCtIVUJHN2Fo?=
 =?utf-8?B?RERsRzRnUHB3YXFwRTJqbWM4bWhvZjgxVVpqSGEzOWxNcGNvRmhwY3VuUXY2?=
 =?utf-8?B?N3ZBZmNtbldVeEdNenRwRitsZWV5UE41TGVxSG54WitvSDFvenFTMGowQzE0?=
 =?utf-8?B?VW5Vc0ZrdHFSS3NJc2FGRk1SNUk5UkxSTy83cDJ3VndUN3E3RmR5MlNLZDBx?=
 =?utf-8?B?WER2emVGT2VDTk0vUWM1eFJ6eGhpYnhQSTZ4NW5keE94YWpHbk5VaDZJMUxH?=
 =?utf-8?B?NG8wdzJaS25jR1pDVGJOZlRlUnc1dnpwQ0R6eGtLYzAvaTFwVzZIcXprY3Vo?=
 =?utf-8?Q?S3rBHxIJquOVB7GYdm+g/AdjkrzWcEFyLC49UsU?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6e3d7c2d-7e1f-47a7-7b97-08d94090282c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 15:10:14.4457
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: g1p1AmsEYwhI7bhVch61+5yHPOlKZZZaIo+TZ/sDyDAMhzmXhtnXqAm0GGzluz7wx91In4AgSYfuBF+oGxdfaw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5600

On 06.07.2021 16:24, Julien Grall wrote:
> On 06/07/2021 15:07, Jan Beulich wrote:
>> On 06.07.2021 15:20, Julien Grall wrote:
>>> From: Julien Grall <jgrall@amazon.com>
>>>
>>> Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
>>> uint64_t") updated the size of the structure vcpu_guest_core_regs and
>>> indirectly vcpu_guest_context.
>>>
>>> On Arm, the two structures are only accessible to the tools and the
>>> hypervisor (and therefore stable). However, they are still checked
>>
>> I suppose s/stable/not stable/ and ...
>>
>>> by the scripts in tools/include/xen-foreign are not able to understand
>>> that.
>>>
>>> Ideally we should rework the scripts so we don't have to update
>>> the size for non-stable structure. But I don't have limited time
>>
>> ... s/don't/only/ ?
> 
> Yes I will update.
> 
>>
>>> to spend on the issue. So chose the simple solution and update
>>> the size accordingly.
>>>
>>> Note that we need to keep vcpu_guest_core_regs around because
>>> the structure is used by vcpu_guest_context and therefore the
>>> scripts expects the generated header to contain it.
>>
>> If vcpu_guest_context is also tools-only, why does it need keeping
>> (for Arm)? IOW can't you drop vcpu_guest_core_regs from the scripts
>> altogether, and mark vcpu_guest_context with valid sizes for x86
>> only?
> I have tried to use "-" in place of the size but the checker is still 
> not happy. I didn't find another way without modifying the script...
> 
> I don't know the script and I don't have a lot of time to work on the 
> bug fix. So this is not something I could do this week.
> 
> So this leave us to the following options:
>    1) Someone volunteer to fix the script
>    2) Revert the patch that broke the build
>    3) Accept this patch
> 
> I would prefer 3) so we have more time to work on making the script a 
> lot smarter.

Well, if we have no-one who knows the script, and the simple thing
of removing the one obvious line doesn't help, then I agree we want
to go with 3) for now, even if it looks odd to adjust number for
something that's not supposed to be checked in the first place. Of
course I also wouldn't mind 2), as it seems pretty clear that the
patch was insufficiently build-tested.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:13:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:13:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151456.279904 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mlT-0004VE-LK; Tue, 06 Jul 2021 15:13:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151456.279904; Tue, 06 Jul 2021 15:13:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mlT-0004V7-IQ; Tue, 06 Jul 2021 15:13:35 +0000
Received: by outflank-mailman (input) for mailman id 151456;
 Tue, 06 Jul 2021 15:13:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0mlS-0004V1-J5
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:13:34 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 389338a7-2732-4e70-9d08-c4afefb9091b;
 Tue, 06 Jul 2021 15:13:33 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2052.outbound.protection.outlook.com [104.47.5.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-9-htgNHDxIMOuKxkZ4zwn-1A-1;
 Tue, 06 Jul 2021 17:13:31 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3392.eurprd04.prod.outlook.com (2603:10a6:803:7::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 15:13:30 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 15:13:30 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0002.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19e::7) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 15:13:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 389338a7-2732-4e70-9d08-c4afefb9091b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625584412;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=uF8mHCXbqKG3rpZqt/df7LojCuCulW9eZ9aigTmV3e0=;
	b=gkaac3Z04z44U712GwbDaWbIBOk5n71g1QgICvc62F8S+X7rCpNlJ9vMTh6qmuPwZnVBsu
	6lUfSWHdpUO7HsLEbUzMewUZGDxb36LZIzXhbbd8PJBRDNEi7pn/BG1TzKXhaVmDDgmcM7
	nkcg+aa9OfKWVzGpWpllngc41lJBXLM=
X-MC-Unique: htgNHDxIMOuKxkZ4zwn-1A-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GeJFoUYQIJSzJSXurvsF9czXOfZC32Pq6dFJJxZGvfeY3PvrDqJCm7IZxV38U7SjW/RpYHGR4lT1S/Ycivav35y5+NtTrXuskG+NbmMRg4SUiuE4wfXJgTMmiHFdsduCJqqys151rTQVFOXVpAcQWr9n4PXX3m6EgCsyEhvqA/lMXijNLIiDgDopBs7BezirEwX/sp98os8sfFgEvAeqTus8I2F0r1WdLEKF3DINg980Od4fUMxh0el3a+fo36eTd5SGCdBSTQKW7fX26AWqLjoqFVHwGpYjAIbF4amLNPRTnXiyr4G2sHekPV3px0n/D+hsTA34oMmtx825RkqJww==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=uF8mHCXbqKG3rpZqt/df7LojCuCulW9eZ9aigTmV3e0=;
 b=M427EzNxs8VhwUP7Fs/N5UjpLMxUvDEZo6TnQJLmtkLkZXAhlSXJ06mxmZgN/LaCVTSUMjH3BkVZzMZJr+CTipN4o6PsbYeCCdLj7vI4otu4wlC1/UtofhI5WSsD8EgQ9kyKkUI7zVIrvW2EI/bWrD13+SUYozM5DYMzZl2BmNWkNJbdgJkyLYAqb1+7gYx/o+5kiCZT/EguHbP1y5Kfl4eV4jaGh/vxZfvAiV0SmlxPhzsGJDLw4NCLl0zAYmx4zBdM0AcxckGwVoKodYTsFfgfhC+xZBaGIqzrZv6vruN2OX/fsiW6v+5nBHL8wJ24fw2jFD4JvuEr7qlPgrHpng==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
To: Olaf Hering <olaf@aepfle.de>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
 <20210706161120.2b6394a9.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <20d002fa-d050-0ea9-4c2f-1b98d618d9f8@suse.com>
Date: Tue, 6 Jul 2021 17:13:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210706161120.2b6394a9.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1P264CA0002.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19e::7) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 81472767-d12c-4bdc-4dd1-08d940909cd0
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3392:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3392013B16470D52ED33C335B31B9@VI1PR0402MB3392.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	wdtQ5El96eF5ni/yvNs08lqBIzF4khoYSgdGtFfoXcGQH6M0eeD5pLyUz8buw4OSnfysp+iGpW3RKPNsxplFmvk2iaQ/SEZ9GsXc2OUA35vHVQshsaWJsZFeTzExal2uNkXBZ1XtcV3N1fRegD2acSEIJbMxsE61jSZ+MX1Ei4RZ1nrhHG+ix9nBU2gP3/r2GjdV9TF9+kJibDQg40qAK8lpJE6O3a4K/P2PHJsZktJnhtIYhFFbe6pt57P9oPssy80lSe/ns+gAsZei9wkAg/YXqLo2vWngIi7JSqyl7zxf/00OGHuedoCZTGXVsc/5foik8olyszb4i0fpd9BRM4YRn0/6wD2xYkH6TSbwlgqfztKvt9OFpjXd/n3xDieYmtJE72eBLUvAsiIYZomGl9xViKxykrtZtBq0hPcOXERxx4NQV9LEIdWw0mFAmGvLI/mvEuQKOZBV6aC+xqAbXM6mtHI3LTqNAGuDrW8gYPZIJd2thvMgmfwp+B27atcSfloK1v4Ct70EK0ZVdK/cy6reHofqIXoKlZSZu/UJoZ9gj6zc4VHHxUqKY4fDtFhilKNGZdCnn816pg50xiAMhIZl22bPGkiR+JWy+IE0Z9g1X37fDVQO2o36XIRt1XF+WCtJl7NwzxkALjCs/1Slirru23nvklMvax1z+89tKOg7zgCjoj+KA+j3xJeYarrDoxVSUPakzhCpazAhzpkNyCUxZ6Pd239LRjbFWI4P34RdH6PANsIT2glYuERFWtSiQLhNgM6VOQgjMsZh9Lg8xw==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(376002)(366004)(136003)(346002)(396003)(66946007)(186003)(478600001)(4744005)(8936002)(6486002)(31696002)(36756003)(38100700002)(2906002)(26005)(66476007)(66556008)(53546011)(5660300002)(8676002)(31686004)(16576012)(4326008)(316002)(54906003)(6916009)(956004)(86362001)(2616005)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?Windows-1252?Q?tfq6//ganKN45OtBL/WGSJUJ8l5l68j++Xk+j1p/hN9O+dzpM9M0Nzjg?=
 =?Windows-1252?Q?0tLEZJLyAEs2MSp5y4E6d2ia9ZwlC6RzCNXXM0X1kfL5fXyPxbVz5/fW?=
 =?Windows-1252?Q?IzHUaiPlMMkGI3ZtfZC8UNtdEm3IDr1R4+koFjwja1+C3JIu5eHyk2ms?=
 =?Windows-1252?Q?LgA9WUsGKu1zks3OL96x11DIFQ4eXNuXTACqmoSE4AwzJiJBsTZn8j2A?=
 =?Windows-1252?Q?ysOtITLOC6mYy1CRAjrKxGshu6j5sS5T3WgkSUG0rwPgRMeTEQwjF1/6?=
 =?Windows-1252?Q?vNj+pfr2xUC5af9XWclIOGwLTAkzRseudz23qk1eXziE/DFKCQZyaqQh?=
 =?Windows-1252?Q?fDIP+foKQus4kxL1GScMfqIFXrWqTr/bFwiDYkGKgV+e9Q0QN8cA3p/k?=
 =?Windows-1252?Q?SmasUPcoFroSggcyqskCOFYEOIO8smdDfEXUwARhhIfgcOCkbfk51xrk?=
 =?Windows-1252?Q?TTx0+plvJDlCSj8vbUxl7FHTPYYtkhG0iePYxwRSYII2qq3V+y/EcXp/?=
 =?Windows-1252?Q?1EJtPDB9sLOcCrwkg5v8G2yJ8okyghL07Mo/WYkIw2T1MmPjqOiSvrC6?=
 =?Windows-1252?Q?KOX3/IObQsHf/Nc46V+k8ZZhtlfacVTOr8NlQzgEXXBx9IQrAhK8/Hy0?=
 =?Windows-1252?Q?LKZ2BkbBJlGeGE5wb5IXRoIa0LZUUj1XMYzHIkU7Z8J2Kvcju9FuXqBh?=
 =?Windows-1252?Q?tWoUVd2js/UucFqQRcU/36oIfYpF6Pvwy+j20XkojpS8z0YS5MwEBJYd?=
 =?Windows-1252?Q?cY6DJYgPAk0bXLWAWe3LZV5+BPmgMqawhMMMtGbsVGMimfMCP0a+W+vs?=
 =?Windows-1252?Q?G3bQ5PwMgeBTtccdHyf9m5u3icP7XGqgkpGNLLGCm5dVpAzyG8yeK85Q?=
 =?Windows-1252?Q?pE/Zr7uihY1gO9kMujFkkMiO+dGYl0B6anZbepmvonTAJ1qvLs/xfgO9?=
 =?Windows-1252?Q?N2oIovEYYGg6tuj+Cmx9Cir50WUGL+t3mQDjq5CJO5vpFw8Ea7gcvw1X?=
 =?Windows-1252?Q?IBgJti4oxbMWIOT722vpNZxfLJpV8EkhlEqMpBsKkEUHoYqwIQFm8GxC?=
 =?Windows-1252?Q?+QLwJG3Fmzi39pDHRp8l7j1i0IbBofFFY625HAI/58pYH2ZT3EXVqzZT?=
 =?Windows-1252?Q?9e+gSreiVis1hANu7no750ldAxiKlMSj5xiJvgfGmTqSxd+r4okbuLbW?=
 =?Windows-1252?Q?YQKr9LNHIxAY6kGaIhYap+U+p6gNRZMT4sBAwi90xbLBicWojiK+THqL?=
 =?Windows-1252?Q?Mhf+wIppQakOX7t1m59ruECQQzm6yvPlDbtlvSfafVddHi7LQGHGGATd?=
 =?Windows-1252?Q?6tYWYzAcxGTwkDg5dx8sx9SgbGiFOGwVMcFKLDc1R1VlaVRy7kjOYdwm?=
 =?Windows-1252?Q?2JRptA5JdzoWNLE1hIQie11j3AS0gYt3TZLHdV5CxuJusfU6OwVsixf9?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 81472767-d12c-4bdc-4dd1-08d940909cd0
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 15:13:30.1020
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lmtghrDJxfgtzO9Bbx0rg4/HfLhKPPvneIbVcDvKTXffsBI+yNSyAAqe9yUmvhSHz5O1zypY9VxjHVOpcNoyYw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3392

On 06.07.2021 16:11, Olaf Hering wrote:
> Am Tue, 6 Jul 2021 14:58:04 +0200
> schrieb Olaf Hering <olaf@aepfle.de>:
> 
>> the reporting is broken since a while
> 
> A quick check on a Dell T320 with E5-2430L, which does not have "Page Modification Logging", indicates that staging-4.5 appears to work, but reporting in staging-4.6 is broken.

Not surprising at all, considering PML support was added in 4.6.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:15:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:15:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151461.279914 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mng-00057Q-2V; Tue, 06 Jul 2021 15:15:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151461.279914; Tue, 06 Jul 2021 15:15:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mnf-00057J-Vq; Tue, 06 Jul 2021 15:15:51 +0000
Received: by outflank-mailman (input) for mailman id 151461;
 Tue, 06 Jul 2021 15:15:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0mnf-00057D-33
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:15:51 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0mnb-0003qT-7f; Tue, 06 Jul 2021 15:15:47 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0mnb-0003ju-0h; Tue, 06 Jul 2021 15:15:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=H7ORhudI49hLq7R/416H0Z63lBZM1TRv32Z8JU0g7R0=; b=iksRNjpMWlp86vL9ceSQxjYkuY
	I0ZOTDuc2su8HiUMyh50PkfHvHgF+I6FL3eGjikLv5grAUxJ4cygxzgL9QjzgKBQq6VbYcAnrN6LH
	YMcPw5RgkgHzLF+MfFiE7oWF2wzdrB99IAMadwwHKX8o50rw+2Gwg6An5zHkqMm7pbSI=;
Subject: Re: [PATCH] tools: Fix CPSR/SPSR print size
To: Bertrand Marquis <bertrand.marquis@arm.com>,
 xen-devel@lists.xenproject.org
Cc: jgrall@amazon.com, michal.orzel@arm.com, olaf@aepfle.de,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>
References: <f28690afd8c4f36351fcdb1e95704cc5240b193a.1625583993.git.bertrand.marquis@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d79b4ff3-cc61-a1a7-ed5d-e0ea627bbab8@xen.org>
Date: Tue, 6 Jul 2021 16:15:44 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <f28690afd8c4f36351fcdb1e95704cc5240b193a.1625583993.git.bertrand.marquis@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Bertrand,

Thanks for the fix. I forgot to check the full tools build when sending 
the first fix :(.

On 06/07/2021 16:09, Bertrand Marquis wrote:
> With the changes of register size introduced in
> 918b8842a852e0e7446286f546724b1c63c56c66, CPSR and SPSR are now stored
> as 64bit values.
> 
> Fix the print size to use 64bit type.
> 

Can you add a fixes tag? This makes easier to find bug fix in the tree.

For this patch it would be:

Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to 
uint64_t")

> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>

Just to confirm, with this patch and mine the tools build successfully 
on 32-bit and 64-bit?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:22:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:22:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151470.279932 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0muM-0006YG-TQ; Tue, 06 Jul 2021 15:22:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151470.279932; Tue, 06 Jul 2021 15:22:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0muM-0006Y9-QL; Tue, 06 Jul 2021 15:22:46 +0000
Received: by outflank-mailman (input) for mailman id 151470;
 Tue, 06 Jul 2021 15:22:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hfi/=L6=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m0muL-0006Y2-G1
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:22:45 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 027bcdfc-de6e-11eb-84a5-12813bfff9fa;
 Tue, 06 Jul 2021 15:22:44 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2109.outbound.protection.outlook.com [104.47.18.109])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-22-A2mZC4tmMUmnQ6rr7isAcg-2; Tue, 06 Jul 2021 17:22:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4351.eurprd04.prod.outlook.com (2603:10a6:803:49::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Tue, 6 Jul
 2021 15:22:39 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 15:22:39 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0048.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::20) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Tue, 6 Jul 2021 15:22:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 027bcdfc-de6e-11eb-84a5-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625584963;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Cy/JGQXsILLmQRO0360/zAHS9br+wbwC5WUI/DjT2WQ=;
	b=ZETQ7uMeoRj5sT8s975jFoBLl2YuyIEaxfCwoyUqCuIcfov7fKEFyhAttsfv+ac/0iOxBI
	n3gVrqZ7LlHJ3SBJG32A+M7VPFTlFEOHGPm2W548X+vyzNPDdxTO2RPLUsGg6e5cSd7PRh
	v2KptnSdtJ9EF3u8CxDO2Jlt2V0xth8=
X-MC-Unique: A2mZC4tmMUmnQ6rr7isAcg-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kAXIEw2GtALG3ohDZMaLXh7zToGFf6DuGmcDsX2V/fhPcXsjzAVUwYCRc9U+su4KL6OZ2Q1/tpgwnEYNxRWeQrRvO7FA3H1/eQFJOs7SR3L/1fjNrwrezmXsZZe9tmU6n+tbcxKp+qlayY++3ZEaq0cgU/iF70EtPs1n4KXs1vYymC5H+T4j4pdXIBt6tPcZoTk6JpkiOjco0e0Gsuw4h9tNF71AUi0yaIPDi4HmliFt8xpg9G8OV56YBtH9FwgEDKMT4fZhtE/PIhWkUiy6AA0qag47Ccct/b0NalvuzwAZCOp9Wx4BoBQcZa+bUmmpSh8xsrR9brRjR8KgnFWxBg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Cy/JGQXsILLmQRO0360/zAHS9br+wbwC5WUI/DjT2WQ=;
 b=k9/3MoLdeufUqTybcwbKghkgnnhEv4TfFD2V6PSEhsqBQusBGhiO3aeCT1s9vgG592ARG5vclx8A958yuepQNATg34hl1wR5gnH/UoheYe0FQxQdiIvP9UQSO4W+OT8grBEHC4PExeebn/9eIFfnRcrGGwDSFR2fw/gUCDLHGTKNsbCFxnf9ymI2QgwioKBmMqojd0Te3dPQSHjKZFD8KRTu8XPdyjGkyH9p4iin2TJqO0wLszywHu/LslKCopCfIcoy8+LvHUQgr14L1QwDWucGAEKgyy2LojAJqvPQcM3RO2LllP0fr00AkX9rZkE6bNjtgwIMQRzgnrwo/a+l0Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
From: Jan Beulich <jbeulich@suse.com>
To: Olaf Hering <olaf@aepfle.de>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
 <20210706161120.2b6394a9.olaf@aepfle.de>
 <20d002fa-d050-0ea9-4c2f-1b98d618d9f8@suse.com>
Message-ID: <343794c4-63de-4aa2-30b8-ae3bc5e3fae2@suse.com>
Date: Tue, 6 Jul 2021 17:22:38 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20d002fa-d050-0ea9-4c2f-1b98d618d9f8@suse.com>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR3P281CA0048.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::20) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 621f3aeb-3a05-4ec1-04c9-08d94091e43b
X-MS-TrafficTypeDiagnostic: VI1PR04MB4351:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4351C538F1717DB27BE48203B31B9@VI1PR04MB4351.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	XyJjnlUNG/G0cw5JONR4jX0uaOZjhiTJMnsFj1ATMp2Yr1GBiu9AOdDd2Jw++fKsY3UbsWUpabZTncALFf5+fOka5xv+EAY1c3iI0ByhqzuWJAMs+VUmu/gHwnCh2ZfzHNIJaYDykPwzzKQLzBcOrrNEYyCp+/0U5PXnVRnyHNDO8wGH1LB/biR/GDTQE67W9CYBjVHw2zgGOSk8FEpJu8zVNCU2K+UM5aYa6wNed8K039IeyYOfWtfZb9vZtL5QtOo2MLJPm7/Hvh68IYXa5Dz0BBgI2uM6eZc80L7ihoX69DX9gNaGS6kWFSyBQESDevskh3570kq5w7IIc52GKK91Zmqgb254A3rOEjHfEa6AnXCdZz3guvXtP5GGIQSrS8CP5G98sT6d9vgJZ/IgjZPgJn5gPDzBesPOreWOZF/+mF9t8Cn4BgFxTg2BWB5ILGu6lyqVt7l2tqNL3x78+HqRESu4XSN0YPl6Mur6DuQa3TSkxpRh5xw3YrxkNPEBAZZg88QOnlF1B6hqf8DNVjZRwoKLgOUGfpNiSrmfH5FXNlSJYoI/wtMjdpAkgCoW9NjmOcTGedM3OE1gyTcpk7bwLU3xYq48Ax6nCjHD4sFFqdMyYIt2jXTaANza6GoRvBgPB1fMIuatfKwnEUieoWkE3LCyVvcR9XVCnYROnLyi7S3WZ3jfZzf+3F860c/mZFW2RP/vV0fX3ribLEiRlS7FkpNUY05vzu2efMigMR0wKfAdXQI2RHwQiCh8mi+qtNvpcnOgZhs0OS5F/Ntuig==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(956004)(8936002)(8676002)(186003)(6486002)(26005)(54906003)(36756003)(16576012)(53546011)(498600001)(2616005)(66556008)(66476007)(86362001)(83380400001)(2906002)(66946007)(31686004)(4744005)(6916009)(4326008)(5660300002)(38100700002)(31696002)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?Windows-1252?Q?rkszVK6hyl6TQBER/wSBybYH1niK88970MttlW/ijJlYrUi+2UM2uWZk?=
 =?Windows-1252?Q?y55mrd2B6VGrgl1Z3lFh++puCsc9q033SdEf7zTVcTBIY4WZr07d1vO8?=
 =?Windows-1252?Q?VGUjNHy1GMXsfgjF7KCNp6ZHuII6Q5xL4L8RReKwvSW2dTXDbPtkmz1V?=
 =?Windows-1252?Q?qBI9r1jnDBPyf4e780ENXXEBVMhJDQDkfYbUzBWjTw99tU3VLohSsloL?=
 =?Windows-1252?Q?ub4Fa/GBz+6t3I+0xEqb6HwcAXW1RU9sa103sPbwTglIkWkYZEfCN28E?=
 =?Windows-1252?Q?MJInJ7Cz+Fc0u5rbdDuSaLW2BoaoedCD91UyH2wpKM6xEw25bvx5WDMG?=
 =?Windows-1252?Q?1yWtmgUxekfE5tJ5PmjQpysfqMlB/3QdJ6L4/0TNOf6hDPEv9dEilZE+?=
 =?Windows-1252?Q?pkeMHZMnsV7tinzmDSthlb3r3P83ijiLQ7PLOCHAFpjVo6/i5Nf0Ih/r?=
 =?Windows-1252?Q?QTSH47cNWxWiAsV4/MX2Csj/nCxv4m+RvgOJCYlkDA+EOVx0rePecaBV?=
 =?Windows-1252?Q?BKVoZ5H8Cujs7wzKxboGyZY5xkzIKB8yCRkAEAtJWmahpmpw1M4rX771?=
 =?Windows-1252?Q?CRtVmuQ1ET05wGHA11C3/nsxI7y+ErSvtUU3fwwrGs9Oak6hJ/Vfayub?=
 =?Windows-1252?Q?j/60kmHmL54PYWmrW/KbDPtbnxbh22xcjoKQoY+znsFCG3dAUX/J9+cn?=
 =?Windows-1252?Q?KncKGhab7Oprs1CoJTHkM9oTaeyijCmj1NkU4y49M7pwW6+RawINDGnr?=
 =?Windows-1252?Q?GGH5DcplUA1c4rst/mOM/fwblw/p7ZK48OuM1Y7hk6RTmDR9KlATLa1E?=
 =?Windows-1252?Q?IoGNaa9RqIU3Hi52io5JtjCH2hXxfqB+8EwjdIwQVs3EY4SpheSvxNyP?=
 =?Windows-1252?Q?XCDXxj2zlsHScwHOZ4bo4W/ITZU5UwOSc+w0XkzaCLGFLPxT2M8GpwXN?=
 =?Windows-1252?Q?lj+FRQ4uLWdaBUUyDSQR25+RHACNh3ZvReSNmHlPCaPHxolWSfqI3Z8D?=
 =?Windows-1252?Q?ez7q7KpBOb2VGwW4wvcmyvV7liVsB/M2CoNV2l/q/qsR943PtEH1F0Db?=
 =?Windows-1252?Q?fwxdl+4FlqjiHVKupg1adjm/CmgKU4GUlxYImd0yBszG7ZaRDTbkJ36g?=
 =?Windows-1252?Q?n04LspGOJPcMw56m/sP3RZ8wj0ASbDlfS2g5/NUOJ5OKJfDtYj8CcneG?=
 =?Windows-1252?Q?ph8T2K9PY+g0MpqeXZXEC27ESo9TmfBcjyxeXAx6DVqVoGKPAkukdyx5?=
 =?Windows-1252?Q?YTXkwC1ZUJiMoXjnY8PKiJSdzDEYe9WjMdhE4XdoEO6UB2ZnzktsgLeP?=
 =?Windows-1252?Q?iKwNZzNjbSFebiSMUQom/KMnF+hXIAAGLd5Rl3jzykxhXp4Rpq6xXi7m?=
 =?Windows-1252?Q?GeKmZCL5c2R+V2LgcrZhnkg3jHO4aw2FMB7HTICz5lDFAHjBjrC02OHX?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 621f3aeb-3a05-4ec1-04c9-08d94091e43b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 15:22:39.4723
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ldX+Ee9pJPYirNvWpwnwYCCiLcfq69qplz5bPFkOFL1BaGvkAjOOuaNQOqPNuSA+GRgniLVvuPJGnoYbF646Fw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4351

On 06.07.2021 17:13, Jan Beulich wrote:
> On 06.07.2021 16:11, Olaf Hering wrote:
>> Am Tue, 6 Jul 2021 14:58:04 +0200
>> schrieb Olaf Hering <olaf@aepfle.de>:
>>
>>> the reporting is broken since a while
>>
>> A quick check on a Dell T320 with E5-2430L, which does not have "Page Modification Logging", indicates that staging-4.5 appears to work, but reporting in staging-4.6 is broken.
> 
> Not surprising at all, considering PML support was added in 4.6.

Or perhaps still surprising, as the functions involved there don't
appear to be bypassing any core logic, so after some looking around
I can't say I see anything that's obviously wrong.

Oh, and I notice only now the "not" in your original reply, which
renders my earlier statement completely pointless anyway. I'm sorry.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:23:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:23:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151473.279943 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mun-00075Z-9R; Tue, 06 Jul 2021 15:23:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151473.279943; Tue, 06 Jul 2021 15:23:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mun-00075S-6L; Tue, 06 Jul 2021 15:23:13 +0000
Received: by outflank-mailman (input) for mailman id 151473;
 Tue, 06 Jul 2021 15:23:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0mum-00075F-NG
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:23:12 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0mul-0003ze-Hz; Tue, 06 Jul 2021 15:23:11 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0mul-0004NZ-Bh; Tue, 06 Jul 2021 15:23:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=vEX/pJSqeAdQa1QD6X6n61eStPI+Mllxt9+B+2KIiqY=; b=Uoeb3C1bBR5WsAIZInkHX+npzD
	K+MAJDvaTvQIU9k2gQzQqDgVt66HLaeUAo6iHxEqQnDQCq+RsGifZZO8Dvl8YZZNwSlllTfZTlFl2
	9L76c49gs2j1y9NNhaHxqQh9aJD+KPiGFw8rhd4Op+ouzIj1KKECta7093roGwAx/r04=;
Subject: Re: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, michal.orzel@arm.com, olaf@aepfle.de,
 xen-devel@lists.xenproject.org
References: <20210706132000.29892-1-julien@xen.org>
 <fa29ee07-0231-378b-4f28-07d894b371f5@suse.com>
 <07a19e2c-161c-cb41-1023-f8b6e6a766bc@xen.org>
 <873f5e68-1ff2-1076-1961-a4bc44950fd3@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <b5b10916-4c12-ef39-fa79-ce4c70782df3@xen.org>
Date: Tue, 6 Jul 2021 16:23:09 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <873f5e68-1ff2-1076-1961-a4bc44950fd3@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 06/07/2021 16:10, Jan Beulich wrote:
> On 06.07.2021 16:24, Julien Grall wrote:
>> On 06/07/2021 15:07, Jan Beulich wrote:
>>> On 06.07.2021 15:20, Julien Grall wrote:
>>>> From: Julien Grall <jgrall@amazon.com>
>>>>
>>>> Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
>>>> uint64_t") updated the size of the structure vcpu_guest_core_regs and
>>>> indirectly vcpu_guest_context.
>>>>
>>>> On Arm, the two structures are only accessible to the tools and the
>>>> hypervisor (and therefore stable). However, they are still checked
>>>
>>> I suppose s/stable/not stable/ and ...
>>>
>>>> by the scripts in tools/include/xen-foreign are not able to understand
>>>> that.
>>>>
>>>> Ideally we should rework the scripts so we don't have to update
>>>> the size for non-stable structure. But I don't have limited time
>>>
>>> ... s/don't/only/ ?
>>
>> Yes I will update.
>>
>>>
>>>> to spend on the issue. So chose the simple solution and update
>>>> the size accordingly.
>>>>
>>>> Note that we need to keep vcpu_guest_core_regs around because
>>>> the structure is used by vcpu_guest_context and therefore the
>>>> scripts expects the generated header to contain it.
>>>
>>> If vcpu_guest_context is also tools-only, why does it need keeping
>>> (for Arm)? IOW can't you drop vcpu_guest_core_regs from the scripts
>>> altogether, and mark vcpu_guest_context with valid sizes for x86
>>> only?
>> I have tried to use "-" in place of the size but the checker is still
>> not happy. I didn't find another way without modifying the script...
>>
>> I don't know the script and I don't have a lot of time to work on the
>> bug fix. So this is not something I could do this week.
>>
>> So this leave us to the following options:
>>     1) Someone volunteer to fix the script
>>     2) Revert the patch that broke the build
>>     3) Accept this patch
>>
>> I would prefer 3) so we have more time to work on making the script a
>> lot smarter.
> 
> Well, if we have no-one who knows the script, and the simple thing
> of removing the one obvious line doesn't help, then I agree we want
> to go with 3) for now, even if it looks odd to adjust number for
> something that's not supposed to be checked in the first place. Of
> course I also wouldn't mind 2), as it seems pretty clear that the
> patch was insufficiently build-tested.
The series has dragged on for quite a while on the ML. So I would like 
to avoid a revert and wait for further rework in the tools side.

Also Bertrand pointed out there is a second fix necessary (I think they 
should still live separately). I will wait him to confirm that the 
toolstack is building for 32-bit and 64-bit after the two patches are 
applied.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:23:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:23:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151479.279954 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mvB-0007iF-Ig; Tue, 06 Jul 2021 15:23:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151479.279954; Tue, 06 Jul 2021 15:23:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mvB-0007i8-FY; Tue, 06 Jul 2021 15:23:37 +0000
Received: by outflank-mailman (input) for mailman id 151479;
 Tue, 06 Jul 2021 15:23:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0mvA-0007hw-LU
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:23:36 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe02::623])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a8de371d-b492-4106-b064-0844d0919d40;
 Tue, 06 Jul 2021 15:23:35 +0000 (UTC)
Received: from FR0P281CA0017.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::22)
 by DB9PR08MB7006.eurprd08.prod.outlook.com (2603:10a6:10:2c7::11) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 6 Jul
 2021 15:23:33 +0000
Received: from VE1EUR03FT045.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:d10:15:cafe::bc) by FR0P281CA0017.outlook.office365.com
 (2603:10a6:d10:15::22) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.7 via Frontend
 Transport; Tue, 6 Jul 2021 15:23:33 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT045.mail.protection.outlook.com (10.152.19.51) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 15:23:33 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Tue, 06 Jul 2021 15:23:32 +0000
Received: from 1fbf0dfafa09.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 EC29904B-CA63-4215-9595-E0D424C5B692.1; 
 Tue, 06 Jul 2021 15:23:19 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1fbf0dfafa09.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 15:23:19 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PAXPR08MB6687.eurprd08.prod.outlook.com (2603:10a6:102:132::6)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Tue, 6 Jul
 2021 15:23:10 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Tue, 6 Jul 2021
 15:23:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a8de371d-b492-4106-b064-0844d0919d40
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=XdknrmO3W6/FX1t7jM2xHJ335gusEdFvtrfK6EXxgAE=;
 b=gTbAAAq4YhI4j2Q0ZT062iueddReiVT/KwlRY65xoNft7NPFzJi4rsPnxawpHCX7OMSb9pqrcEI9ahvE6HOQgSZOpdQ8AUoIaxxTKMHhueTPiiL1LnyuL5ymMYlRj8A6oh75CKSOgA3NIOHDz1Y9iku26V5Y8z82pAYNBzERwcA=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: b7e65a023876d9a4
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Rqzhun0lfP0lpXtYFKuKrvt7J/WFg6CRGgWHg4msxaJsA3hCxtq61A/5nVZuJWtZMsrBBFsYgNNJ2vhMD0g+yyDWPZz2w/wHAk+c0H42/imxWO/j4AtZsML8GiuOG2NW/TuOGr6svfcVbRct0h0bzpdlTf5WqEG2yxxBXf4ddTigqF7PAaRhpTcMG4wUGqZJlo5O1ld85cWBPoJ5W875pOHQs10Mbds4DgPvZeylGaMEuQovsIAK6TRcyW6OX51eMtMIz6bI9OK2eaq3c20SUjE8EjMYICNMfyN0PD5SElMjoxU4xdf+EvyK0yrNvh+hLtpXu/mvtalDNBS2t+gBlQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=XdknrmO3W6/FX1t7jM2xHJ335gusEdFvtrfK6EXxgAE=;
 b=UPy6vGl1dKCTlgyVOcS98ocPaz8i974dJihYFKXVDnoIe/i/XGwgQpuamdWxLGi3esTKqJz5lgBLwnrJkxX1SPCLVph2u4OzZEAqgXPIye2xd0hCjGdv7tMsEybPcJAaAfmAwvGx67UpEBdOk/rFGLSPgTTIo+FyqrMPmTNwIUk3jnbTxArfa1Oq8WmXCEhzVIA+kqknXnAOvSVW4H4JBffebEBGf3b/DWoAPntcSZ1sO7nNyWclM2nWar2zJTeDTqkFwtdhG0ffHtYqtQbz7rjk+0Gk/FfsVrLvzT11N9+i6ZtGCdvHsLC9b6KuHBTnilaatR0YMqEO6bugCjcGeQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=XdknrmO3W6/FX1t7jM2xHJ335gusEdFvtrfK6EXxgAE=;
 b=gTbAAAq4YhI4j2Q0ZT062iueddReiVT/KwlRY65xoNft7NPFzJi4rsPnxawpHCX7OMSb9pqrcEI9ahvE6HOQgSZOpdQ8AUoIaxxTKMHhueTPiiL1LnyuL5ymMYlRj8A6oh75CKSOgA3NIOHDz1Y9iku26V5Y8z82pAYNBzERwcA=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, "jgrall@amazon.com"
	<jgrall@amazon.com>, Michal Orzel <Michal.Orzel@arm.com>, "olaf@aepfle.de"
	<olaf@aepfle.de>, Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>
Subject: Re: [PATCH] tools: Fix CPSR/SPSR print size
Thread-Topic: [PATCH] tools: Fix CPSR/SPSR print size
Thread-Index: AQHXcnkI0yrA0BW0E067MCMRzZDicKs2DqIAgAACDoA=
Date: Tue, 6 Jul 2021 15:23:08 +0000
Message-ID: <E8C7437D-575A-493F-B45E-570F2F23997A@arm.com>
References:
 <f28690afd8c4f36351fcdb1e95704cc5240b193a.1625583993.git.bertrand.marquis@arm.com>
 <d79b4ff3-cc61-a1a7-ed5d-e0ea627bbab8@xen.org>
In-Reply-To: <d79b4ff3-cc61-a1a7-ed5d-e0ea627bbab8@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: ad33b26a-e32a-4a15-310d-08d940920484
x-ms-traffictypediagnostic: PAXPR08MB6687:|DB9PR08MB7006:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB9PR08MB700613E4AE5A710C798E088B9D1B9@DB9PR08MB7006.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 UBd1EmMrXK9em3Led0uLd+L7bn5U0TPpC5oN8EtAfU1ovvCA79sYFyLynNiez6YbgBWFSZt+vv9nVJSWMtIF3K9FWh3RY5cbd6SJG51N2sP93iu6DXESSjEs5AtLVGEQQdGllcOuzvMqc0GxXbpjSqDse/3N2+X5YjC4JYAekmE6D/WHk+ChKAswKLGn7wMxdjAxmLg7W3La7ImMONvxFFLmc1MFZFLg7xjPBZdwq+X0ONpErZGZD+RdWIgNO6rvPR5Dp9SgHTT+MfyaW7+QRVUr3rFr9xdhPcq5TFxqW9uGY8OSURacjENVg/MZk3kS849Ys4S4VknrEukeVlgffwBCAp2fsrDCQ0jBaDBSflcF8ssIsf61q9bpWLE05XlEdeyWaNPCooeZPj2QjjQ5/E/gZuLqGDOOz9nC7j+G5zzC0Oes/8DrteB9Nw6H1Vz1WEaQX5MbpGonkiOA3bXfbOQQMHmtZK0vcbaygtSGP5CSe3gkVPQc9a3xRXxIIhpfPtxxI7LGD5sD5IU70svnQ4wXhFzMSswurDT9XZ44dHsORMDQliUZ1dH0DqHBtKHOrK7Q6dCw5IYMX2I2AChGyuFR/WUepnLaGZfud283Iv8b30vYDkErsXNR3ZJ7BtkyzhYrYgPo7HOK//RajWji+5zotkwJgJaaeykqKNbE3b2NChhosIJVAgmPzUuChPxfNj9AI0NVRxNZ+kh8dXp6sg==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(136003)(396003)(39850400004)(366004)(83380400001)(122000001)(6486002)(91956017)(64756008)(38100700002)(6512007)(66476007)(54906003)(26005)(66946007)(66556008)(2616005)(316002)(478600001)(76116006)(8936002)(4326008)(6506007)(33656002)(66446008)(53546011)(4744005)(36756003)(186003)(8676002)(5660300002)(6916009)(71200400001)(86362001)(2906002)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?Iz38KI+omChE5OyDlUy5jfx+u9I35qBWR6AlDlEf7/UNZOp7NF8fUy9j+oau?=
 =?us-ascii?Q?utWW5dFcnfFDRCYy6r9mMrcX/IVGQWwCyRD/nrIPiSml03QT+sVUJGYci+MN?=
 =?us-ascii?Q?CQxMP0nKVyhdQFU7eN7GYKHv8jDyEs7Tv+l+ehS2S1b+qIbS2idb2rkdpt9J?=
 =?us-ascii?Q?T1yFGoJiYZU8iy6YAGoEV1GKeWERJYx152WnMiz8eintDiwvreeHozj6fG2w?=
 =?us-ascii?Q?PivbKGrSl6e1gFF9/QJuJOjGlDVAHVnIg/nbjEhMfI+Rf43IFyj8SXx1HtMK?=
 =?us-ascii?Q?8DdvMWpmjFTnGc1QJ7sVQ9XB2F0UVlg0uCozCpFJsL1Pb1op5m0XEdOqrpPM?=
 =?us-ascii?Q?JdKEEPyoFD3fhsSDS487eadOuERlphw7LS/ofF7VTJYra27+iaAEQ30rqWPg?=
 =?us-ascii?Q?zxG/UtT6So5dKBQ6/i6KBQXrSbiYQ9AtoZi4/d2bjEOVz28zYC2tdGHYfv0y?=
 =?us-ascii?Q?0jl2NfNwvot0yEKpSVVp14eeuPWIcqvgSFTfPHP7o6cma8rvgouIsrIN5WSh?=
 =?us-ascii?Q?urUmBfdNAaskI/Rh+r0s6cPzfOyiiMw88eudVw/+jYrZWbpJ87ecKatGAwXb?=
 =?us-ascii?Q?YvKD9Q6BUUE+IjvJn3cFU9BIoordQu0PElpMSOM5p98eir7qjlsmPUlj3ObS?=
 =?us-ascii?Q?sLHUJOKQtvb9wF9Shr8i8s+So+CGi0fzC3x1zHFzY4yDM0nF3Kq26gZmp2zY?=
 =?us-ascii?Q?HrEFEEQJRhSr5ihcmbXE3heXdrSElWx7iH0ozR3v2tN4apO9XPtczUDHgV19?=
 =?us-ascii?Q?J0LNx5s2gAHyISy/FQk/U3j+rQHb/cEIfrCCF+4onUtfeIOjs6lmIoTffxFU?=
 =?us-ascii?Q?194iQCWfaE/7KzksoWMk4U0oKEMBA51DfiCA2QvkX/BiJ37/qKddxaw0hoP7?=
 =?us-ascii?Q?Rs5PWu3JsyDz0OrNxbb76f+fzxBTKGaxNP1z082aIwQeoBg4G5MZW1074vAG?=
 =?us-ascii?Q?b/Y0BajUegOvvRSTiPLcez5P8i/CT7+DzsJ+bdQv3I+aDo3O4r1o4hfWd+0J?=
 =?us-ascii?Q?881gGZSQPCwaLiNrSmn7GWscUuzv185QUMNbVX5qyrZPFrp4Rz3cjZW9fiis?=
 =?us-ascii?Q?ZnAht5VZWMhTQv5bJL9jJCoScy10T1SS21p9BwPx+jCnRd6sIrq6iSxDR6iL?=
 =?us-ascii?Q?dQJFOdT/QXsLK0TjjwI4EHB6LX6Vh1Hs8lWvgzGlAX3CVilDfiMvF9JqOKgQ?=
 =?us-ascii?Q?pKlU5MLZznmdXamSFGwy+0xF2S8RUf8FyowgjOf6yq0nN8tfjlMznX+qapS9?=
 =?us-ascii?Q?+JfKuWWNB1/HRZKBzV4B9HT79eaMDoUCBmucP8wVhYBXbdtzoSm0dP0SxNqD?=
 =?us-ascii?Q?l1crR7wUAOniWWQihmUP19ow?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <7E469D3F8799B54BB8BA63983499B62B@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6687
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	66e6558b-48c0-4e54-4463-08d94091f5b9
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	vn8xWEp4uhtWe5zK/G/49I5SxpmTicdwWAJiY798Npm0vSjguWFPhZsUO+v3zUFH4arJ37Ij1V31dWkeKjHU26xEtK40cttL6q244MIzhOdNf+um7ocnIC8QSWynjn7Xp4cNorKasSXlo15K/y10hTUZMj1+RNTVIxBKnjIF3XFINRoURgW4a+dfSzcyphK6TVQ2nYgbYqYBeAljpDjSn2HtRfGdLCtqq654DE2R/EEFiXP6jzDQQoGjvdnYLgWE2Xqma/bUPR6+Gd7FyK/gNthu/CMcoDL2XM9wNkk+Df+GSrw8/Kx8b1jRkbJjKW30lwap0G90/p4z3ulL5e33PhBdSj3cpAVcFwdLkxAfd5aJ4ImQXq9v9Mv4XkfS3Pd3YE4zfUSNHfMhUV4yjPWCm7h1reAJXCFZ5UGq3dIdqx4AxiFJrAFJYx3V9PYxXl2SBbNAxZaNvs5IPv8ytFv59nqMW9FWtWx1cxTvzHQzPMTaZOOq0MJDNOoSwA51j8ZM+qBlJHSxFB8SimKdNjdX2btbxJtzp4ht9fY14SrmIOjxr+6GTRr9w3CbhrYEu5GYYly4nmARP1T2wfsDgzc7xx5bnVyJyPwXHWTTFF7ZGbDa58ZT6LJuGoUV0gRwUxEH6lpTIZ40r5gA2NznGfl1nzCyrhGE1jeiFWxlrkwiBsY81tsFxY1gNr8dVYGgFhqdnQT+uKio7YJgQ8/9bmNYcw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(376002)(346002)(396003)(39840400004)(46966006)(36840700001)(2906002)(4744005)(6512007)(478600001)(186003)(54906003)(356005)(6862004)(336012)(36756003)(107886003)(6486002)(47076005)(82310400003)(70206006)(5660300002)(83380400001)(81166007)(70586007)(2616005)(53546011)(8936002)(86362001)(8676002)(6506007)(26005)(36860700001)(316002)(33656002)(4326008);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 15:23:33.3561
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ad33b26a-e32a-4a15-310d-08d940920484
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7006

Hi Julien,

> On 6 Jul 2021, at 16:15, Julien Grall <julien@xen.org> wrote:
>=20
> Hi Bertrand,
>=20
> Thanks for the fix. I forgot to check the full tools build when sending t=
he first fix :(.
>=20
> On 06/07/2021 16:09, Bertrand Marquis wrote:
>> With the changes of register size introduced in
>> 918b8842a852e0e7446286f546724b1c63c56c66, CPSR and SPSR are now stored
>> as 64bit values.
>> Fix the print size to use 64bit type.
>=20
> Can you add a fixes tag? This makes easier to find bug fix in the tree.
>=20
> For this patch it would be:
>=20
> Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64=
_t")

Sure. Patch incoming in the next minutes.

>=20
>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>=20
> Just to confirm, with this patch and mine the tools build successfully on=
 32-bit and 64-bit?

Yes I have a full build running with both patches added for arm32, arm64 an=
d x86_64.

Cheers
Bertrand

>=20
> Cheers,
>=20
> --=20
> Julien Grall
>=20



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:26:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:26:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151488.279965 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mxX-0008Sh-0Y; Tue, 06 Jul 2021 15:26:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151488.279965; Tue, 06 Jul 2021 15:26:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0mxW-0008Sa-Tr; Tue, 06 Jul 2021 15:26:02 +0000
Received: by outflank-mailman (input) for mailman id 151488;
 Tue, 06 Jul 2021 15:26:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m0mxV-0008SU-TJ
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:26:01 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0mxR-00042Y-Nz; Tue, 06 Jul 2021 15:25:57 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m0mxR-0004Zi-Hf; Tue, 06 Jul 2021 15:25:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=g4uJzSOHDECDTf7kn2XclNPK/V6x3C51ZPUnLfOsf9U=; b=mc2enYNxPhDTkNZo5wMifr/GRw
	boPUygB3LB/0nloaORM9Msr8rse7iIGgCY63BliAqeQ6XCROn+BQamOm71Htm8F2yMDyUAY/6lPaU
	E+/+srhdNVQ4WthGmyeBgItra50Q0pipmJ7FM6f9ANzVIkI2JGHpHlIHGMidKDcmyn4M=;
Subject: Re: [PATCH] tools: Fix CPSR/SPSR print size
To: Bertrand Marquis <Bertrand.Marquis@arm.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 "jgrall@amazon.com" <jgrall@amazon.com>, Michal Orzel
 <Michal.Orzel@arm.com>, "olaf@aepfle.de" <olaf@aepfle.de>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>
References: <f28690afd8c4f36351fcdb1e95704cc5240b193a.1625583993.git.bertrand.marquis@arm.com>
 <d79b4ff3-cc61-a1a7-ed5d-e0ea627bbab8@xen.org>
 <E8C7437D-575A-493F-B45E-570F2F23997A@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <bde10100-e5a8-99ed-6766-9521d026abd9@xen.org>
Date: Tue, 6 Jul 2021 16:25:55 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <E8C7437D-575A-493F-B45E-570F2F23997A@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 06/07/2021 16:23, Bertrand Marquis wrote:
> Hi Julien,

Hi Bertrand,

>> On 6 Jul 2021, at 16:15, Julien Grall <julien@xen.org> wrote:
>>
>> Hi Bertrand,
>>
>> Thanks for the fix. I forgot to check the full tools build when sending the first fix :(.
>>
>> On 06/07/2021 16:09, Bertrand Marquis wrote:
>>> With the changes of register size introduced in
>>> 918b8842a852e0e7446286f546724b1c63c56c66, CPSR and SPSR are now stored
>>> as 64bit values.
>>> Fix the print size to use 64bit type.
>>
>> Can you add a fixes tag? This makes easier to find bug fix in the tree.
>>
>> For this patch it would be:
>>
>> Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t")
> 
> Sure. Patch incoming in the next minutes.

I can fix it on commit.

> 
>>
>>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>>
>> Just to confirm, with this patch and mine the tools build successfully on 32-bit and 64-bit?
> 
> Yes I have a full build running with both patches added for arm32, arm64 and x86_64.

Perfect!

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:29:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:29:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151494.279976 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0n0d-0000gw-Fd; Tue, 06 Jul 2021 15:29:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151494.279976; Tue, 06 Jul 2021 15:29:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0n0d-0000gp-Bs; Tue, 06 Jul 2021 15:29:15 +0000
Received: by outflank-mailman (input) for mailman id 151494;
 Tue, 06 Jul 2021 15:29:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=bertrand.marquis@srs-us1.protection.inumbo.net>)
 id 1m0n0b-0000gj-F6
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:29:13 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d7143aff-172d-4ea2-8dc3-7f7fa1699633;
 Tue, 06 Jul 2021 15:29:12 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 199B5106F;
 Tue,  6 Jul 2021 08:29:12 -0700 (PDT)
Received: from e109506.cambridge.arm.com (e109506.cambridge.arm.com
 [10.1.199.1])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 643FE3F73B;
 Tue,  6 Jul 2021 08:29:10 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d7143aff-172d-4ea2-8dc3-7f7fa1699633
From: Bertrand Marquis <bertrand.marquis@arm.com>
To: xen-devel@lists.xenproject.org
Cc: jgrall@amazon.com,
	michal.orzel@arm.com,
	olaf@aepfle.de,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>,
	George Dunlap <george.dunlap@citrix.com>
Subject: [PATCH v2] tools: Fix CPSR/SPSR print size
Date: Tue,  6 Jul 2021 16:28:57 +0100
Message-Id: <2e267cdfeb236dc750122df1af7c801a041c8a04.1625585225.git.bertrand.marquis@arm.com>
X-Mailer: git-send-email 2.17.1

918b8842a852 changed CPSR and SPSR to be stored as 64bit values.

This is fixing the print size in some tools to use 64bit type.

Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
uint64_t")
Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
---
Changes in v2:
- update commit message
- add Fixes
---
 tools/libs/guest/xg_dom_arm.c | 4 ++--
 tools/xentrace/xenctx.c       | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/tools/libs/guest/xg_dom_arm.c b/tools/libs/guest/xg_dom_arm.c
index 01e85e0ea9..5e3b76355e 100644
--- a/tools/libs/guest/xg_dom_arm.c
+++ b/tools/libs/guest/xg_dom_arm.c
@@ -140,7 +140,7 @@ static int vcpu_arm32(struct xc_dom_image *dom)
 
     ctxt->flags = VGCF_online;
 
-    DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx32,
+    DOMPRINTF("Initial state CPSR %#"PRIx64" PC %#"PRIx32,
            ctxt->user_regs.cpsr, ctxt->user_regs.pc32);
 
     rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
@@ -182,7 +182,7 @@ static int vcpu_arm64(struct xc_dom_image *dom)
 
     ctxt->flags = VGCF_online;
 
-    DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx64,
+    DOMPRINTF("Initial state CPSR %#"PRIx64" PC %#"PRIx64,
            ctxt->user_regs.cpsr, ctxt->user_regs.pc64);
 
     rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
index 972f473dbf..85ba0c0fa6 100644
--- a/tools/xentrace/xenctx.c
+++ b/tools/xentrace/xenctx.c
@@ -556,7 +556,7 @@ static void print_ctx_32(vcpu_guest_context_t *ctx)
     printf("PC:       %08"PRIx32, regs->pc32);
     print_symbol(regs->pc32, KERNEL_TEXT_ADDR);
     printf("\n");
-    printf("CPSR:     %08"PRIx32"\n", regs->cpsr);
+    printf("CPSR:     %08"PRIx64"\n", regs->cpsr);
     printf("USR:               SP:%08"PRIx32" LR:%08"PRIx32"\n",
            regs->sp_usr, regs->lr_usr);
     printf("SVC: SPSR:%08"PRIx32" SP:%08"PRIx32" LR:%08"PRIx32"\n",
@@ -614,8 +614,8 @@ static void print_ctx_64(vcpu_guest_context_t *ctx)
     printf("LR:       %016"PRIx64"\n", regs->x30);
     printf("ELR_EL1:  %016"PRIx64"\n", regs->elr_el1);
 
-    printf("CPSR:     %08"PRIx32"\n", regs->cpsr);
-    printf("SPSR_EL1: %08"PRIx32"\n", regs->spsr_el1);
+    printf("CPSR:     %08"PRIx64"\n", regs->cpsr);
+    printf("SPSR_EL1: %08"PRIx64"\n", regs->spsr_el1);
 
     printf("SP_EL0:   %016"PRIx64"\n", regs->sp_el0);
     printf("SP_EL1:   %016"PRIx64"\n", regs->sp_el1);
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:31:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:31:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151499.279986 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0n2L-0001zo-RD; Tue, 06 Jul 2021 15:31:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151499.279986; Tue, 06 Jul 2021 15:31:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0n2L-0001zh-OA; Tue, 06 Jul 2021 15:31:01 +0000
Received: by outflank-mailman (input) for mailman id 151499;
 Tue, 06 Jul 2021 15:31:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0n2K-0001zb-47
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:31:00 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.74]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c75be681-6dc3-4c92-8b74-8e9bddf01f12;
 Tue, 06 Jul 2021 15:30:58 +0000 (UTC)
Received: from AM6P193CA0071.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:8e::48)
 by AM9PR08MB6242.eurprd08.prod.outlook.com (2603:10a6:20b:283::22) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Tue, 6 Jul
 2021 15:30:56 +0000
Received: from VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:8e:cafe::86) by AM6P193CA0071.outlook.office365.com
 (2603:10a6:209:8e::48) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Tue, 6 Jul 2021 15:30:56 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT060.mail.protection.outlook.com (10.152.19.187) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 15:30:55 +0000
Received: ("Tessian outbound 1763b1d84bc3:v97");
 Tue, 06 Jul 2021 15:30:55 +0000
Received: from ce6ba17a229b.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 435C160F-3D3B-4CDA-A4C1-DB7B90461077.1; 
 Tue, 06 Jul 2021 15:30:29 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ce6ba17a229b.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 15:30:29 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PAXPR08MB6703.eurprd08.prod.outlook.com (2603:10a6:102:138::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Tue, 6 Jul
 2021 15:30:27 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Tue, 6 Jul 2021
 15:30:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c75be681-6dc3-4c92-8b74-8e9bddf01f12
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZxALtI/CSDAvLxAy9fB4gi3w/R6VJ/8FTUddzojXXE0=;
 b=It/z1I/cv1y92jKYUd1eTzO3Moc0eMrJz3gscZHZ6c0jzkB8fM134Fwy4B9YtVX8pNCItmqykXWU0NUT5sPsxZEwapYIjqSoLOnqEkuf3MYfsZLCMzcAc6arA/413kcw1/IdJ1xQo74+SPhaQEKxDbRmzSC9eRuhTT90Ex8foMs=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 37d9a2da49d00164
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Jeho25QUng4YzcFXFrMu1wJSxyBlHEfWKlMiV70H4BDrfDxvqlZIRyHEXYtOV3CuC+paLhv4vcx5ssH59/QNaPYD2tIppSDURQfDmpxxxFTng+SxbVU39BGhzpo4osj4F6NJqKPxYLcfnlYW7ykXWafNCvt0HEiCPTVRgFqbsgij4qaRsPP2hrJv2s/7x0E6XCv3OJcySDf6hcZGLEgUNjLCBkdm6UXgnoDP2RV/7gmk9SsStYv1LSt8HZ3gGVRHMc0JtDBR3jGFBkF48xes2HgevCmgvW0LT+3/sqsHzraSeeapujHR1XGRCegN3QwuATLwF7csNXoabyfWm6uG3g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZxALtI/CSDAvLxAy9fB4gi3w/R6VJ/8FTUddzojXXE0=;
 b=KXQCVfpsS3BnNEu+tQoVhHXx5S0DGTCK2/FBtNoFGYlqCOZJsT0eqT/OByQ5Z3Jgb7BJ29y7IK9FVtbeI4xLmutlVF12vDRaouHPmYGRser4Is1oTjda4wqLQMerI/VbMsh41WBuSe0/60vyS1wux6kqHR12enBgmNQk1MDUfia2Nr3zc2UoM+lnrX/5hq20DtbJGh9qpYadl5SY0xGHuKySLjs2DJxjmpJHabv98AU6m20hs9jAY/Q2I/b72EkuKu3aeeSJ4vR5RDe6v1BK5jZwj64Jqk2U12pktjnV0PMnRnjygglg5UdXGgc5c75mFKORJnWaitMO0CNaxQT9mg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZxALtI/CSDAvLxAy9fB4gi3w/R6VJ/8FTUddzojXXE0=;
 b=It/z1I/cv1y92jKYUd1eTzO3Moc0eMrJz3gscZHZ6c0jzkB8fM134Fwy4B9YtVX8pNCItmqykXWU0NUT5sPsxZEwapYIjqSoLOnqEkuf3MYfsZLCMzcAc6arA/413kcw1/IdJ1xQo74+SPhaQEKxDbRmzSC9eRuhTT90Ex8foMs=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, "jgrall@amazon.com"
	<jgrall@amazon.com>, Michal Orzel <Michal.Orzel@arm.com>, "olaf@aepfle.de"
	<olaf@aepfle.de>, Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>
Subject: Re: [PATCH] tools: Fix CPSR/SPSR print size
Thread-Topic: [PATCH] tools: Fix CPSR/SPSR print size
Thread-Index: AQHXcnkI0yrA0BW0E067MCMRzZDicKs2DqIAgAACDoCAAADKgIAAAUEA
Date: Tue, 6 Jul 2021 15:30:27 +0000
Message-ID: <44C5D4C6-80B0-4CDE-92CD-E6A5B299A40B@arm.com>
References:
 <f28690afd8c4f36351fcdb1e95704cc5240b193a.1625583993.git.bertrand.marquis@arm.com>
 <d79b4ff3-cc61-a1a7-ed5d-e0ea627bbab8@xen.org>
 <E8C7437D-575A-493F-B45E-570F2F23997A@arm.com>
 <bde10100-e5a8-99ed-6766-9521d026abd9@xen.org>
In-Reply-To: <bde10100-e5a8-99ed-6766-9521d026abd9@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 81cfee96-1edf-419c-0870-08d940930c38
x-ms-traffictypediagnostic: PAXPR08MB6703:|AM9PR08MB6242:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM9PR08MB624210C5C366098A7DD25D249D1B9@AM9PR08MB6242.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 RIoAqL/RfpegcWB+nxSgqpHIo5XQVu0UkYWqbmM1CMHHYQIwUDAX41kWK9NHX9fd7MXIpgPRHVD89Q9C8W52y+J8RASencH8mwCTES3Z8gqmgxkfxf9P3xWP8kGGd6n5+dTs8kqBdDFOLbW8+Q9hxy7mKUm35VYkKqj3FyanNlZHqWWFYpkhfsCJIb+ZRyBrhTAFsWU5fR/NOCBnAfls/EZW4eP+0gY3UnWLXhqpx9DOqOxQe3PIdZVK01rRujqWTvCF9jwdv0JDFsW6SKVGLmp2Cg+TFQ2Y7za/8KuHt1T6YaiUtoB8P/q/mi9CG4TJpymhap7KIGiBusuiTBNrrl43rn0/5TcsOEOkYu25AOg72Nm84kRUhzyr3sVAjlQaVEC2bSe/g2R+CleVeEmmtKv2veN6VaKjwQer8ruJlqfo7NKL8QHoXycjlo8KDk5zjL0HCbH2WRdchzbQQCQzrNWXfQoswVZQPB+KnYcgzGs6HafGBy9qlzs5WHlvSivJ7AZZsBxdgxrDS/4QtLXWF/FgdXfhCakcuhWfpmq8HXyBRBKCDlEvd2kAq20dbvVTZ2I1xSUx84aab0hsUmVAuItmTUPzC+j/cLIHot3XtDnhxNPjXDCSR+HOOK2VIfxup5j4w6OgF6wFt2Z0lqZtWRuMvHArfz+D+UN53pmyQghcWVh9RNnFRqcDIo0URj2zGJZmqYXH/+EPOEMG2J0ujQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39850400004)(136003)(66446008)(6486002)(64756008)(478600001)(2616005)(6506007)(4326008)(5660300002)(186003)(316002)(6916009)(2906002)(71200400001)(6512007)(8676002)(86362001)(83380400001)(66556008)(53546011)(76116006)(8936002)(91956017)(33656002)(36756003)(38100700002)(26005)(54906003)(66476007)(122000001)(66946007)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?VTiD90FpZmDQpuVygSsHo65qzqGlovUdQ7YdkOE0Ub1KUYKMjR+ucIGHDYiR?=
 =?us-ascii?Q?EYw56UlsnUCV0PTbgSY0+bFEKg0eWnOBtqy2FagDX7frvLXfOU7azyVxNbKY?=
 =?us-ascii?Q?ZKL0Be+lj3Y/QbTtT/BxBNXJyjQf43EvgSFQPfgSWbDibD3iw7Lyc2C+WtEX?=
 =?us-ascii?Q?2R2Hpu+MDtCt6aaMSy8X29L2VgbLT/tk64SGqnnam4qLPglHJpXkMmok4jNd?=
 =?us-ascii?Q?6+bUfH04Y4VK2s6SUpHGbp0VU50voHF35q5jHXHAkXcMQl8NlW5uWQElXxkM?=
 =?us-ascii?Q?vWo0JJTXYL4A/fmo/0QDDr5PaqJjzVjxuHfkz9P4ooZQrWpFfFp3mVqs3l1s?=
 =?us-ascii?Q?Dko6LSxGAO9tqIZYKFfIJwgBIRwYvtBlUnmdwDMytvgX58tOzkzXh7kjEby3?=
 =?us-ascii?Q?WgjmJMu+ExlIvFjsk6sMQtZmKUTSGt/8BF/iNFc1EImb0lVseZ0vvHet7WZ2?=
 =?us-ascii?Q?inebCdXQ6kwYhjjX3ohzKrif+G60/IslEnOMPt4ttuMwJJo4KkFuWcUAiJTm?=
 =?us-ascii?Q?w6CtUsXDb9Ri8zaVWmeGoIniGO2YIaNZQSKoDPr5+9PgP7ql3P3FtOJ0IXKv?=
 =?us-ascii?Q?pT5X8Qck1RYmC7izfvBq0VbtnQMtBWT5Ck03vCNXuIzpGL+xvAB0aETzmSYM?=
 =?us-ascii?Q?q8u/nURvT7ZNBMdcx/2tCc0ZBOFcxUu7ZFcYvYOSN+OZlhG2rwGKHYsAYELo?=
 =?us-ascii?Q?fOL7HuITlXVrTo95EYndS+pa1gAiuNMu6hjFZKurm97Z57I4Tl9hiCK4djfF?=
 =?us-ascii?Q?kvRx2eie74wNFOD/Wl7dIdWJg2JCGmq9jsZ+KzCABzIKOsfkgKGm/WffNZCJ?=
 =?us-ascii?Q?b15I71gPC8u1z/RoYSTPmESYvGXaJJcSAQKKcNNGtewmKHUf7+j4+sKGHDiM?=
 =?us-ascii?Q?2kuq1zOIgiP9wZKfTfddPBbzGsQqRrV21HEq/z5YgPdz9ywcXhtuZUTaUrAK?=
 =?us-ascii?Q?2HfyPNNgGxygJMnZF2vV9bptsCxi6ZFj4tb6GsgmS1bLof+nt5RmGzuzWGpP?=
 =?us-ascii?Q?ooPHF5p7MMT9oZkRurpxOzMOgUiE0kjpGpdy7yWzWwluOcGAiSvi+0Edypt0?=
 =?us-ascii?Q?Z8EoMAb87+0mnfwJ9KQ4VkRmS+Ksk5k+w+EML+9MTz4KDNNG8Qtre1b5y3PV?=
 =?us-ascii?Q?9OzbshKm0C7MsJyuO/RaRn80hfSpaqpBC31xDoqMcpKt3FCVMx+Bu/qMyF22?=
 =?us-ascii?Q?uzAqpknFFEEj4kHI3TNSq/rqXbaPbmbJNfU8GE7FQDCCo7xHiLNjjZCzK6Fy?=
 =?us-ascii?Q?JlSd8TtbeRrIdWe2ehoL3IYMSNUXw76HuFsyiAPUPbfLT2uKxiopKKRwkJgK?=
 =?us-ascii?Q?oswOcozyH0CWiqCk+GyjKGf7?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <E504064A20D70748A0E3012916B2C217@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6703
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	c001f596-c62b-40da-eb4c-08d94092fb48
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	w6cC3U2miQRc/J5vJzBHFiNtFFPFt7tCvn7tSXGeGFMqaFabEMpZYmdrsiF3n0asmg/486DfOua2+UZjWcgna91NqJGn+XuKzv7/ICTr6KbV92Va1CEz19Ee9E9BT3HV57XH6LocxEHWcBf8dRTVt27flUkj/6xxGT+kNRYvLZ/UoxRbhNd4ZVo6fD2S2UAHuYFRWFpf4LVY2eRNwCLViD+aNBAZx7Yub7P/ljxa8uop8w10TAqJgSgGc9tShxNAEW/BrIGTyr8KNELFRep5F7l6hj3BQq1wyzABUThMRst7l6i98AKwTuldp1NJ3fJiK71+LhSpkcgvxqo5PaoxgoZvU6Y6/UmwxdA9T/MienD771lp2g2eUe9EcluENV8pfhkGVki7v2Y9EOT6DFVvMq57vMdVJdmlHj1qlwryBblEG45QXmjbQQqqi4+n0zlIvtEVGOmiRbKRRglz+w2yOtdCY/gkcFGgT333nrNkuaVJNffVSDqPIpqGHwH0VhY7C59P39+un14RkQGDBwah5+XNCUnLTN+MWZYwP5DsTNZLeCGKidUjpL53IPcsOpd/NcET2DyfQah28+wv0XPb4PY+/6cQGEG4Tp0FQ47YTtde1Z8MBCkvUzVrwTPHphjprfasomuPj7MxSPj9uc/nbMlmORIWeNMYiUYISPKzsVmfGYLutVLJJjZe//3pn14NrQpjM4T6b5PeNSPasG6LMg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(39850400004)(396003)(376002)(136003)(36840700001)(46966006)(86362001)(6486002)(4326008)(107886003)(316002)(8936002)(26005)(186003)(8676002)(36860700001)(478600001)(53546011)(47076005)(82740400003)(6862004)(6506007)(336012)(81166007)(5660300002)(6512007)(83380400001)(70206006)(33656002)(70586007)(356005)(54906003)(36756003)(2906002)(82310400003)(2616005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 15:30:55.7825
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 81cfee96-1edf-419c-0870-08d940930c38
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6242



> On 6 Jul 2021, at 16:25, Julien Grall <julien@xen.org> wrote:
>=20
>=20
>=20
> On 06/07/2021 16:23, Bertrand Marquis wrote:
>> Hi Julien,
>=20
> Hi Bertrand,
>=20
>>> On 6 Jul 2021, at 16:15, Julien Grall <julien@xen.org> wrote:
>>>=20
>>> Hi Bertrand,
>>>=20
>>> Thanks for the fix. I forgot to check the full tools build when sending=
 the first fix :(.
>>>=20
>>> On 06/07/2021 16:09, Bertrand Marquis wrote:
>>>> With the changes of register size introduced in
>>>> 918b8842a852e0e7446286f546724b1c63c56c66, CPSR and SPSR are now stored
>>>> as 64bit values.
>>>> Fix the print size to use 64bit type.
>>>=20
>>> Can you add a fixes tag? This makes easier to find bug fix in the tree.
>>>=20
>>> For this patch it would be:
>>>=20
>>> Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint=
64_t")
>> Sure. Patch incoming in the next minutes.
>=20
> I can fix it on commit.

Up to you, I also just sent a v2 if it is easier :-)

Cheers
Bertrand

>=20
>>>=20
>>>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>>>=20
>>> Just to confirm, with this patch and mine the tools build successfully =
on 32-bit and 64-bit?
>> Yes I have a full build running with both patches added for arm32, arm64=
 and x86_64.
>=20
> Perfect!
>=20
> Acked-by: Julien Grall <jgrall@amazon.com>
>=20
> Cheers,
>=20
> --=20
> Julien Grall



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:34:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:34:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151508.279998 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0n5q-0002mj-Gv; Tue, 06 Jul 2021 15:34:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151508.279998; Tue, 06 Jul 2021 15:34:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0n5q-0002mc-CY; Tue, 06 Jul 2021 15:34:38 +0000
Received: by outflank-mailman (input) for mailman id 151508;
 Tue, 06 Jul 2021 15:34:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0n5p-0002mS-Mp; Tue, 06 Jul 2021 15:34:37 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0n5p-0004DN-H7; Tue, 06 Jul 2021 15:34:37 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0n5p-0004qR-84; Tue, 06 Jul 2021 15:34:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0n5p-00080e-7W; Tue, 06 Jul 2021 15:34:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ZRO+pxNes66uYCEtkL1HBY/dIbQCEOpw9f5WesTy9wQ=; b=bMXeuFxY5O2KIgXhA1cINzhFex
	uPKKvW99JW+U5eDIkPbAv0UDtB5DgdHt+Z1n6/v3BgGqSg/bQhpypc7DhulotcNHE+wXPikfBYUlP
	iqEd5iuKSo4GhntIvFFQxdYrCwplm5rO3z6ZnVvJmAuOaNSjVZFsRnDTCql6XHE/C6IY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163324-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163324: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=44ced03798d3af47577af3e7a865be33383766d0
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 15:34:37 +0000

flight 163324 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163324/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 44ced03798d3af47577af3e7a865be33383766d0
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   32 days
Failing since        162368  2021-06-04 15:42:59 Z   31 days   90 attempts
Testing same since   163312  2021-07-05 12:41:15 Z    1 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3263 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 15:39:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 15:39:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151515.280011 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0nAY-0003S7-3B; Tue, 06 Jul 2021 15:39:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151515.280011; Tue, 06 Jul 2021 15:39:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0nAY-0003S0-0D; Tue, 06 Jul 2021 15:39:30 +0000
Received: by outflank-mailman (input) for mailman id 151515;
 Tue, 06 Jul 2021 15:39:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kMrw=L6=arm.com=robin.murphy@srs-us1.protection.inumbo.net>)
 id 1m0nAW-0003Ru-9d
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:39:28 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id f6d04317-0757-4dff-b40b-8d65e9685d9b;
 Tue, 06 Jul 2021 15:39:27 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D04E3106F;
 Tue,  6 Jul 2021 08:39:26 -0700 (PDT)
Received: from [10.57.40.45] (unknown [10.57.40.45])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 793C53F73B;
 Tue,  6 Jul 2021 08:39:19 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6d04317-0757-4dff-b40b-8d65e9685d9b
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
To: Christoph Hellwig <hch@lst.de>
Cc: Will Deacon <will@kernel.org>, heikki.krogerus@linux.intel.com,
 thomas.hellstrom@linux.intel.com, peterz@infradead.org,
 benh@kernel.crashing.org, joonas.lahtinen@linux.intel.com,
 dri-devel@lists.freedesktop.org, chris@chris-wilson.co.uk,
 grant.likely@arm.com, paulus@samba.org, Frank Rowand
 <frowand.list@gmail.com>, mingo@kernel.org,
 Stefano Stabellini <sstabellini@kernel.org>,
 Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
 "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
 linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
 Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
 matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
 Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 maarten.lankhorst@linux.intel.com, airlied@linux.ie,
 Dan Williams <dan.j.williams@intel.com>, linuxppc-dev@lists.ozlabs.org,
 jani.nikula@linux.intel.com, Nathan Chancellor <nathan@kernel.org>,
 Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
 Bjorn Helgaas <bhelgaas@google.com>, Claire Chang <tientzu@chromium.org>,
 boris.ostrovsky@oracle.com,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>, jgross@suse.com,
 Nicolas Boichat <drinkcat@chromium.org>, Greg KH
 <gregkh@linuxfoundation.org>, Randy Dunlap <rdunlap@infradead.org>,
 Qian Cai <quic_qiancai@quicinc.com>, lkml <linux-kernel@vger.kernel.org>,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
 Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
References: <YNyUQwiagNeZ9YeJ@Ryzen-9-3900X.localdomain>
 <20210701074045.GA9436@willie-the-truck>
 <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck> <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
From: Robin Murphy <robin.murphy@arm.com>
Message-ID: <bb32d5a6-2b34-4524-e171-3e9f5f4d3a94@arm.com>
Date: Tue, 6 Jul 2021 16:39:11 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706140513.GA26498@lst.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 2021-07-06 15:05, Christoph Hellwig wrote:
> On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
>> FWIW I was pondering the question of whether to do something along those
>> lines or just scrap the default assignment entirely, so since I hadn't got
>> round to saying that I've gone ahead and hacked up the alternative
>> (similarly untested) for comparison :)
>>
>> TBH I'm still not sure which one I prefer...
> 
> Claire did implement something like your suggestion originally, but
> I don't really like it as it doesn't scale for adding multiple global
> pools, e.g. for the 64-bit addressable one for the various encrypted
> secure guest schemes.

Ah yes, that had slipped my mind, and it's a fair point indeed. Since 
we're not concerned with a minimal fix for backports anyway I'm more 
than happy to focus on Will's approach. Another thing is that that looks 
to take us a quiet step closer to the possibility of dynamically 
resizing a SWIOTLB pool, which is something that some of the hypervisor 
protection schemes looking to build on top of this series may want to 
explore at some point.

Robin.


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 16:09:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 16:09:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151531.280040 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ncv-0007AX-N0; Tue, 06 Jul 2021 16:08:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151531.280040; Tue, 06 Jul 2021 16:08:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ncv-0007AQ-K0; Tue, 06 Jul 2021 16:08:49 +0000
Received: by outflank-mailman (input) for mailman id 151531;
 Tue, 06 Jul 2021 16:08:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+rBn=L6=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m0ncu-0007AK-Cn
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 16:08:48 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 711604a3-de74-11eb-84ab-12813bfff9fa;
 Tue, 06 Jul 2021 16:08:47 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 711604a3-de74-11eb-84ab-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625587727;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=EhBJSMffj0WekHiNCUjxdEbJ/5FzByTBTqtLD8GvgyA=;
  b=fBOZIO4iCf1XlkNmP6V+ScjbObEUNZttKz75f3UEtvas98GcCqyHC+NL
   eMKsxH1JvtUq71b3mZESXu3GIz+P7XD7mRMI81lPt9Dj0tmAWbSFK1q3S
   5fQVPQG8bLPR5yCzszBXTbK9XQrGb320iy6+mKubOgyogwVBejPXUT6j/
   c=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: y2gtkoZybMovo53fGYeuuNyHKVNvH6vZcGcmMYoFaBdfbNGEioatvr6DQrK4nce1DhmykNUY3D
 CFIqO607cl2i53GY2o+tJvm/HpBps8310hiYNZJTHiZSeamKVPDeTq9CoNEHKjCvbDwjjJOub/
 UATPtXbU2PPj7B2e+gUvoqUZo/Sc3qQ8lFyOgZu5OHWjmNyTIpWpI1jXwr0ek90PReoiAbcCy9
 CxJLeufV+U/h7dg0shQGcj6faCOcCPDwL8UkLVsZ/Ap/zjNzxYSrL5aGKa7GnwSAcCIqSmpvDb
 Gk8=
X-SBRS: 5.1
X-MesageID: 48040768
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:YQz7c6n4KBPkR7LWFdHjBwt9SarpDfLU3DAbv31ZSRFFG/Fw9/
 rCoB3U726WtN9xYgBYpTnkAsO9qBznmqKdjbN+AV7mZniChILKFvAF0WKB+UyDJ8SWzIc0uZ
 uIMZIObOEYZWIQsS/U2miF+r0bsb66Gc6T5ds3zx1WPH5Xg6ML1XYGNu5MeHcGNTWvBvACZe
 qhDtIsnUvZRZyOBP7LekXsWYL41qb2fMKPW299O/Y/gjP+8A+V1A==
X-IronPort-AV: E=Sophos;i="5.83,328,1616472000"; 
   d="scan'208";a="48040768"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=SbmNuRoBKImC5+LzX0Zv/pHD1nO5gFYdMk3+vMG9kJq0wF0c8XgwG3FzzYmNknv3PYPl3qD14iLNs0AN/YB+cKiM40q6yA11lPrhxpz92yHjVRj0CtmR8USsCtpsnX1+EJb2c2YEcqHmoYR0jpcxvtuWDL4Wz7y0u2ssUek7JqK57marTuQjZwOJGHQ2dbuoxWIqQ/AelBFpYrkI3Qrm8OCXuceoP4QsAl94iv5CgUOa7gR5GtliofvVrqr7SSML5ZS3Hj2gdIMp5tNhQt5wdQ14VCNIPat9gN1cGIZ98nkUp4FQDsyMI97QMFhfGK6bTXHUqSeIU4VF39p2yJTqxw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EhBJSMffj0WekHiNCUjxdEbJ/5FzByTBTqtLD8GvgyA=;
 b=eTpTjqS1DeLTo9tjSteZmE72cVWliJpredhVasCihbd0XBaKHRTI/82cq/MEt3Px+kEjWaYQnaUFshJ+bDzKOWGdriw2jcWbxvj+U6CFb93uN/1QlvyR5IONQ+kwI9ySl89F+L258ztI+YrIiGJu6PQ6D1JidfNRLNis7VrGXY83+SX63VAIBvbzxOEJFXr3/oyC/2lm87msHvK6PCwcoH4smWANwqMHmgY0aNdsRkZOx8VpFi7ahmjDygfY2jzr5srrXVtJr4Qs9uVE5fJgMnD+k86EPl9nC9wvfYXzMUIsVX4VoySGIl+OXLSqGHw5YLGx/OSqJHf+6PedNj2I/w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EhBJSMffj0WekHiNCUjxdEbJ/5FzByTBTqtLD8GvgyA=;
 b=LBnHohNJmeXum4wNeYhldDOwNZnYYNaE96XOayNrASE3QeXbt6x6LoEv6ajN6Ep5Od45xlFxZa4dhHagOU87eTuTDz/3SVAzyWuy4OEVXAVTglnUnSsbAwF6DW6hnrUdYRTef2q6ESCxK8g1nzPbikQAtq3vSqhF571EXrLILzA=
Subject: Re: [PATCH 2/2] tools/migration: Fix potential overflow in
 send_checkpoint_dirty_pfn_list()
To: Jan Beulich <jbeulich@suse.com>, Olaf Hering <olaf@aepfle.de>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Ian Jackson
	<iwj@xenproject.org>, Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210706112332.31753-1-andrew.cooper3@citrix.com>
 <20210706112332.31753-3-andrew.cooper3@citrix.com>
 <20210706145804.1ab98f16.olaf@aepfle.de>
 <20210706161120.2b6394a9.olaf@aepfle.de>
 <20d002fa-d050-0ea9-4c2f-1b98d618d9f8@suse.com>
 <343794c4-63de-4aa2-30b8-ae3bc5e3fae2@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <7880cd08-dba0-10b9-1547-923d6a5b3880@citrix.com>
Date: Tue, 6 Jul 2021 17:08:26 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <343794c4-63de-4aa2-30b8-ae3bc5e3fae2@suse.com>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0338.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18c::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: de9e361b-9110-4635-f716-08d940984da6
X-MS-TrafficTypeDiagnostic: BY5PR03MB5048:
X-Microsoft-Antispam-PRVS: <BY5PR03MB5048326E54842B2C765E4EFBBA1B9@BY5PR03MB5048.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: SGrQLSFnPC8TGtA0L88OhGTh9xXWBzgGUbbGiJaPlIAfwDKznRQmK6RN8xkllOE5MOpL2qoAXPnkI5szKbgSfqW3THx5qWjY5CtQQOwEHp8W4jwFra0P/brXUyz2N0scaTMrtICJCg5kDDdsWaZSq8WIGk1TnXUMPgRms4X+RxKOt/+WOi7TYrl6wnTU6KiA3agbqcg0U/21TE/zjLJczGbZGvt6VmG/9Utmgm9lIZfhB4V8EyN3q0D7j7V03kiS2t7pmXSRVx7HeCxevWWHZml8WGzNOpk72rvml7Xfv52evFd07uzoA2+e9PfSy+dv+G0TW5WZTKxIwgXTDE29QSTD1V6aINdK5D69ii4RlFOH4DdgVEm+hb96diJRgVwG72KmNim/SCfjJ5FEvCHFmGIm/SimNpR5TSIOWBE6vEwtOeGspgexMNn0n1MaS4lTr34mdrMH1MyooirpfmDGqWBNrDfQ39pCOaXI0dP6T2x1+HEr5ZAM4TeGSknjuM5qR9SFH5KH4nL8L13iNxvYGD/5rH2FOMkbYeeSIPqOH90oG8Ib8gVutw6XwaCvV95AO2WPRHCs9HPgmciwL7i9e2ffo4Ixm+VAdztRGGTurWyXqUXq2+6sz4e0z6ils3Vip7yUX7V410K/GoF77WxRLQE+Vwk5E3cwuVlT/MKWsSd4FlIsbG6lKMaiZXcGLeDm6iEZ/kiwEQ8VZxcAyPRp6HgzAbUFDAyYS6FfiwolzdTfcNq+0c5yb56p2sTSF49X
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(39860400002)(396003)(136003)(366004)(478600001)(2906002)(53546011)(83380400001)(36756003)(38100700002)(66946007)(956004)(5660300002)(316002)(86362001)(31686004)(8676002)(4326008)(66476007)(31696002)(2616005)(6486002)(110136005)(16576012)(8936002)(66556008)(6666004)(54906003)(186003)(26005)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?l94rNnRAQf6heDOeaKBhQJ52fzfIM9Lpy5al9WwJ3DiQr/uzTO6Q/Ulw?=
 =?Windows-1252?Q?5HXFJZ0/B8hLGFK0PDuGgViu/LVDsXel4MpfOVsu4QsIovNvt05J0n5y?=
 =?Windows-1252?Q?Y1y7boHTv3Tc77kLm1YswNrxRvamORyhWKkCzIwnaiJHDE7d5ae74zTo?=
 =?Windows-1252?Q?X369kTdLfOVswPy87l3i3TyB7yR9t8joR6IenBWCPdfqayCaTBNmMzsZ?=
 =?Windows-1252?Q?Wmr50XhMbMkLjGbuoojGynqUDSwDMw3rmFurEtl+9+mXDVnLqUL5kXTb?=
 =?Windows-1252?Q?hYBwZBys0X8RFoQDkcuz9c49isheEDU6hQJwvWoKCBhrCRgEC2qUJNtY?=
 =?Windows-1252?Q?nQvSzDW8aOMXd+oatErNwd/he+NRYjcdzgIwfIIseRK9PMote5Qe0uwC?=
 =?Windows-1252?Q?gzG2otDS/eikkRpc8DkkmN6M0FdZWnOOWttVfvTzWyjHhObtqb+KrAK/?=
 =?Windows-1252?Q?GIlJlBVZa0GBRopD70MheFNmaoMW4EE0Po427278XNbe/h6ysBhjTc9+?=
 =?Windows-1252?Q?AhqAWXBBXDwu2RFJiHEOpgoY51iAvW1YZiqE8nvtfjBxttV+ICe1KTpy?=
 =?Windows-1252?Q?xF7Xbt3yblg8a6EjJivoP4F3i3MgWx81LQ5It5KGqS3sjaJR1zSDzd5M?=
 =?Windows-1252?Q?ZJezhhEH2QRZQIQuKk+bVDIbv2Ka/kXcTgX7xzCV5pbeW/SoE0NSSCdi?=
 =?Windows-1252?Q?+aUo5SgHEJZay3uBprckYVejoYXZEDg8ll9gCsaEwR52dWNqa1OqADqI?=
 =?Windows-1252?Q?9sDY0ZaoowCd1SwJwL94AYXqGOmPRynspnnSxw1HhAFyVzg6Ra54Palr?=
 =?Windows-1252?Q?Z59t8WsQoOg+fLHbZnJNqW9aYY58K9LYPpqfp9eeIaFQ+12rRVjuc0Du?=
 =?Windows-1252?Q?bkaVUuvMWN4tcAx17AryQfKOUiUxtrlPl/zbT47Z/qpe9/brwxQCIjtK?=
 =?Windows-1252?Q?J5T5nnsN+G3AbhkVyBLYqlERqRRDy5W0SgVZMWjanUsKvq9cSTGJuFlH?=
 =?Windows-1252?Q?J558fHLeoSEs8Y9KwR5ijwC4Rklj2O3bGODz7HXNApH4p64SZVn8j/d0?=
 =?Windows-1252?Q?op63m3JhaS7Lyggvk5s/p7FxD9PZQimoMz3UU0xDK4VTrXAZK8gVsgq1?=
 =?Windows-1252?Q?dyxWRu96ktNSll5HCnAaQx8NyoAnRuOT0Ds/hT0ca4AzfLlZBEvjmax2?=
 =?Windows-1252?Q?TMoyTaE33rMTFqARx4gmmEMo3TyLSqD/XlFI4v7QNDXlQVl7nKWYRbnU?=
 =?Windows-1252?Q?8+iARV+58VaW+6hH9oq+b8G/jGIWBMy8Cz4YVAHKj/H2fh7myi0sTEmp?=
 =?Windows-1252?Q?y65TcroMJEnrlm/8OfJvGwCBc/jjmmW/m1GaTbUiIXhB/ToanjXz11Bp?=
 =?Windows-1252?Q?l+amyB8aJejsiA1VFKw/1CaZXIe34jEgVY0p8Jn2FnRu4j22S2WY/qA9?=
X-MS-Exchange-CrossTenant-Network-Message-Id: de9e361b-9110-4635-f716-08d940984da6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 16:08:33.3509
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: XRiF1XuFKlgthP2TFUCfPn4uQdsbmT0YRTSdjRF/KDoMZsS9RiwJwyxfN3Bpdg0DOcxFCcg18cR4t7yakCtCbhqrO3d5s2f46pdALI9rrXs=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5048
X-OriginatorOrg: citrix.com

On 06/07/2021 16:22, Jan Beulich wrote:
> On 06.07.2021 17:13, Jan Beulich wrote:
>> On 06.07.2021 16:11, Olaf Hering wrote:
>>> Am Tue, 6 Jul 2021 14:58:04 +0200
>>> schrieb Olaf Hering <olaf@aepfle.de>:
>>>
>>>> the reporting is broken since a while
>>> A quick check on a Dell T320 with E5-2430L, which does not have "Page Modification Logging", indicates that staging-4.5 appears to work, but reporting in staging-4.6 is broken.
>> Not surprising at all, considering PML support was added in 4.6.
> Or perhaps still surprising, as the functions involved there don't
> appear to be bypassing any core logic, so after some looking around
> I can't say I see anything that's obviously wrong.
>
> Oh, and I notice only now the "not" in your original reply, which
> renders my earlier statement completely pointless anyway. I'm sorry.

Ok, so my observations of dirty_count being reliable during development
of migration v2 appears to be correct, and something regressed in the
dev window where it got committed upstream...

That is suspicious.

~Andrew


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 16:27:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 16:27:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151541.280058 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0nuv-00011M-F0; Tue, 06 Jul 2021 16:27:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151541.280058; Tue, 06 Jul 2021 16:27:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0nuv-00011F-Bu; Tue, 06 Jul 2021 16:27:25 +0000
Received: by outflank-mailman (input) for mailman id 151541;
 Tue, 06 Jul 2021 16:27:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0nut-00010L-VV; Tue, 06 Jul 2021 16:27:23 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0nut-0005ca-NA; Tue, 06 Jul 2021 16:27:23 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0nut-0006ZC-GQ; Tue, 06 Jul 2021 16:27:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0nut-0006VY-Fx; Tue, 06 Jul 2021 16:27:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=EC+sG5yDVuYHEDg20x4aVc8d9eZQ3khc7EAfAHqoUOs=; b=yDchHhIW1A6TZD+FhTxL//vuJY
	WZY9mMN+JEN9hMijiPTtUo7wqL8q1lbbKGFmaOqHs7NMigNLtaUOgFq0iZimGal0HhETQwGCyfTuR
	3hswHF35J8MMXD4tCWGgziD5UN4+G9zjw/y0AKBVBS5t4vqqJqqpj4GvTJKqOkFO5SuM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163336-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163336: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 16:27:23 +0000

flight 163336 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163336/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 16:57:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 16:57:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151553.280077 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oO8-0004Cl-4S; Tue, 06 Jul 2021 16:57:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151553.280077; Tue, 06 Jul 2021 16:57:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oO8-0004Ce-1I; Tue, 06 Jul 2021 16:57:36 +0000
Received: by outflank-mailman (input) for mailman id 151553;
 Tue, 06 Jul 2021 16:57:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0ZJM=L6=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1m0oO6-0004CY-E8
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 16:57:34 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a1364207-0f3a-43aa-a374-a8c5773fd9ff;
 Tue, 06 Jul 2021 16:57:33 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 027E761A0F;
 Tue,  6 Jul 2021 16:57:24 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a1364207-0f3a-43aa-a374-a8c5773fd9ff
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625590652;
	bh=5up8/Bb0rLsCNavkU95AUJkD0QYWqQ8IKvDM0S2EuWE=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=BdlCeYWdA0LGQqw4NCthGEImHDcykOTXLbRY0p2OzfXTSjVjgAkalkpSZRdXk7myS
	 ggdoMpep1HYdBLP4alpxbeLY2vbW4R6HTU/Vi4e5HLBlWUzcqfaGM7iFoc0a6mvwIQ
	 OtryjDMBpvdg7dJuiMXwOl88SmpKdFQmz0rw3SopyQp4YNJrpHbSZzb5034J5yMjTF
	 8iEUr6dVhZVSqKBvB0pDdDElb2vQPGkIFBQxZHqD6FxdW2DFwsOiJcnDaYmQKnMJGl
	 2f5cYXW5YDte/kZj3tp146452h4FgBzYXIDAdb4rsa2LksEi8bwpu2LbdNX+D444o2
	 b9VQWPtZ1e95g==
Date: Tue, 6 Jul 2021 17:57:21 +0100
From: Will Deacon <will@kernel.org>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Christoph Hellwig <hch@lst.de>, Robin Murphy <robin.murphy@arm.com>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, benh@kernel.crashing.org,
	joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>,
	Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
	maarten.lankhorst@linux.intel.com, airlied@linux.ie,
	Dan Williams <dan.j.williams@intel.com>,
	linuxppc-dev@lists.ozlabs.org, jani.nikula@linux.intel.com,
	Nathan Chancellor <nathan@kernel.org>,
	Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
	Bjorn Helgaas <bhelgaas@google.com>,
	Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	jgross@suse.com, Nicolas Boichat <drinkcat@chromium.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Qian Cai <quic_qiancai@quicinc.com>,
	lkml <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
	Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210706165720.GC20750@willie-the-truck>
References: <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <YORsr0h7u5l9DZwh@char.us.oracle.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <YORsr0h7u5l9DZwh@char.us.oracle.com>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Tue, Jul 06, 2021 at 10:46:07AM -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Jul 06, 2021 at 04:05:13PM +0200, Christoph Hellwig wrote:
> > On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> > > FWIW I was pondering the question of whether to do something along those 
> > > lines or just scrap the default assignment entirely, so since I hadn't got 
> > > round to saying that I've gone ahead and hacked up the alternative 
> > > (similarly untested) for comparison :)
> > >
> > > TBH I'm still not sure which one I prefer...
> > 
> > Claire did implement something like your suggestion originally, but
> > I don't really like it as it doesn't scale for adding multiple global
> > pools, e.g. for the 64-bit addressable one for the various encrypted
> > secure guest schemes.
> 
> Couple of things:
>  - I am not pushing to Linus the Claire's patchset until we have a
>    resolution on this. I hope you all agree that is a sensible way
>    forward as much as I hate doing that.

Sure, it's a pity but we could clearly use a bit more time to get these
just right and we've run out of time for 5.14.

I think the main question I have is how would you like to see patches for
5.15? i.e. as patches on top of devel/for-linus-5.14 or something else?

Cheers,

Will


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 17:01:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 17:01:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151558.280089 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oSG-0005a7-M7; Tue, 06 Jul 2021 17:01:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151558.280089; Tue, 06 Jul 2021 17:01:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oSG-0005a0-Iz; Tue, 06 Jul 2021 17:01:52 +0000
Received: by outflank-mailman (input) for mailman id 151558;
 Tue, 06 Jul 2021 17:01:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8bei=L6=oracle.com=konrad.wilk@srs-us1.protection.inumbo.net>)
 id 1m0oSF-0005Zu-8M
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 17:01:51 +0000
Received: from mx0b-00069f02.pphosted.com (unknown [205.220.177.32])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dab3f16b-de7b-11eb-84ad-12813bfff9fa;
 Tue, 06 Jul 2021 17:01:50 +0000 (UTC)
Received: from pps.filterd (m0246632.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 166Gvhqn015852; Tue, 6 Jul 2021 17:01:07 GMT
Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70])
 by mx0b-00069f02.pphosted.com with ESMTP id 39kw5k3344-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Tue, 06 Jul 2021 17:01:07 +0000
Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1])
 by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 166H0iPS046712;
 Tue, 6 Jul 2021 17:01:06 GMT
Received: from nam10-dm6-obe.outbound.protection.outlook.com
 (mail-dm6nam10lp2104.outbound.protection.outlook.com [104.47.58.104])
 by aserp3020.oracle.com with ESMTP id 39jfq8vvxt-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Tue, 06 Jul 2021 17:01:05 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com (2603:10b6:a03:85::27)
 by BYAPR10MB3352.namprd10.prod.outlook.com (2603:10b6:a03:159::29)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Tue, 6 Jul
 2021 17:00:14 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d]) by BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d%6]) with mapi id 15.20.4287.033; Tue, 6 Jul 2021
 17:00:14 +0000
Received: from char.us.oracle.com (138.3.200.56) by
 SA9PR13CA0164.namprd13.prod.outlook.com (2603:10b6:806:28::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.7 via Frontend Transport; Tue, 6 Jul 2021 17:00:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dab3f16b-de7b-11eb-84ad-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc
 : subject : message-id : references : content-type : in-reply-to :
 mime-version; s=corp-2020-01-29;
 bh=hnhiXJa973SR6HksKm/zh9iaitWNk0/hKDpLkTgHZvM=;
 b=DUNf9ZkKxRxjPiJMlOyL6612zxhCw2Bb99RCReDfqC6VSofdXFtWfWb9nSrejFH/5B8T
 iBGL+u+AboR5qhSDyW8aedkH0f3h9gu7uQT0uVkg7/DiZ3dR3Qd8MbILVlJOF7tiSZ1O
 tmJ1BFdbz/ZGo/pHIBK5LfCBSwBR5AAlOLxzhk9Ope0nMtiGfgeMxTN5TR3jkqTIEuBv
 WwuFglUBV2lKqQ9IDJonzseqE06HqxE2tlKKUtB/J73CjbwDvKj2wru8dBUN2nAkq/Sc
 f5nGzZnobAK2w8gb+9d4kQTo9Gy6u9BJt22fuDMVEuZej/dlpKy60toRputnL3/GPjrV ZA== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KARvR2yWsMGryVnXEL+9gsZIwvmAExZUqUJhvHlGuVsInaCJRpLXnh8CxC5WSgpadc4TWn5XZoU9OUE7a9TS/LS7Kc82o9WH3I2GwHYyAqDb25cGHG0DR0gvKyqS/sbsjBTCJ3RlC2ysEE7MkG07yeMLAACazVShxwX/7Yg6CXq7X8mGF1HbtO9uHi6RlYUjbbsWobSYXa79NVMPx54VvNZwuOLR+Smivoh6hVlI3R3rTzaKlzI1coRaLHtg0s9SaekCs/7WqQHjE+cVUs8LpilXe/sWBVpn5EXdVOAqeAGrLHblcAiIx8xpBx7mJcidfoUWtq+CCGoNX7qPB/EzVQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hnhiXJa973SR6HksKm/zh9iaitWNk0/hKDpLkTgHZvM=;
 b=cCCPneCKtQQRQNh3t8tACDBfJ6aD9r7TWl0KmdQ/0pUYRV5x33M0va+4xytJKT3yS+Zc846nl0iqRPGeSg3AdnND8M56FPqGSSd4woEy/FqYC0kuGHM7ynsuBEuM8T4JBjO46jM9f+r893E3WF++iYqe6iVfKxbJqrSH8/+j9BpD96UEvEjtNfycduJoqyKNTos+X7yiPQh81ndE+2CpeCWLinKgodQKlc/YvYZwH9LhG7J3ABvjdFIJ9Lry/bTNvlJmpTvx1flpWo51vL0eiyuh30Ern5MKM/5FJj6umyoBa0fJVX/kRqLkn0hHkf2puQasLL74ks7RXC5r0w2KtA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hnhiXJa973SR6HksKm/zh9iaitWNk0/hKDpLkTgHZvM=;
 b=adyXO0Zw0v11l6sUjG2I7eQ8BHU6NEesVxgznp3l54stbHFs2s+H5E0EiXJ6g0JcKzshJiFGXeBMKojBavSUT/lvEw7EbXhziYWnWVTSLjyhHx10ejknnlqCB0kIFBtRxnBTeMOQybzt1aTY+f7w7sm1iNnDdjCGKHIYUWbipp4=
Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=oracle.com;
Date: Tue, 6 Jul 2021 12:59:57 -0400
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Will Deacon <will@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>, Robin Murphy <robin.murphy@arm.com>,
        heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
        peterz@infradead.org, benh@kernel.crashing.org,
        joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
        chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
        Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
        Stefano Stabellini <sstabellini@kernel.org>,
        Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
        "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
        Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
        linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
        Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
        matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
        Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
        maarten.lankhorst@linux.intel.com, airlied@linux.ie,
        Dan Williams <dan.j.williams@intel.com>, linuxppc-dev@lists.ozlabs.org,
        jani.nikula@linux.intel.com, Nathan Chancellor <nathan@kernel.org>,
        Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
        Bjorn Helgaas <bhelgaas@google.com>,
        Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
        Andy Shevchenko <andriy.shevchenko@linux.intel.com>, jgross@suse.com,
        Nicolas Boichat <drinkcat@chromium.org>,
        Greg KH <gregkh@linuxfoundation.org>,
        Randy Dunlap <rdunlap@infradead.org>,
        Qian Cai <quic_qiancai@quicinc.com>,
        lkml <linux-kernel@vger.kernel.org>,
        "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
        Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
        Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <YOSMDZmtfXEKerpf@char.us.oracle.com>
References: <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <YORsr0h7u5l9DZwh@char.us.oracle.com>
 <20210706165720.GC20750@willie-the-truck>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210706165720.GC20750@willie-the-truck>
X-ClientProxiedBy: SA9PR13CA0164.namprd13.prod.outlook.com
 (2603:10b6:806:28::19) To BYAPR10MB2999.namprd10.prod.outlook.com
 (2603:10b6:a03:85::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d90bdef9-b98b-4173-d89a-08d9409f8490
X-MS-TrafficTypeDiagnostic: BYAPR10MB3352:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<BYAPR10MB3352EAE5B696C84D5DB25D7B891B9@BYAPR10MB3352.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	MyYcsUaq09Y7mW+wsqZ1QEfIp6TP5AkxLqd4qctYJmLdB2nALwr16MlsGsAs1m/ekDLjspHZW8CnpNzqSLrGdEFKnbfnmnyGyQth6oSTV2U2nxYttsnFkTqN6wmqM7V9LtiN3kIf292bv5oyzGWNk0wpztENyauzD7ht/BfY3Reha5mIHMFvIi/kIvW6evsGTi8nmiIyL9C9bzEgM5B6LvyLniCLLfZzAUSHJOtB0dN8tPRi93jEixXyWhetAEmp8HlUCOn4r1BJBVtxFwXCLVtRhVhD0q0UdRXnZJW7458DxJoH6RG5qEaJJ2ixWq5ERuwqtnMsrARFh5Y+nH+do3+e07MFEhchpsHRud5yL1AOI+8/pc+2wsvXzxaL3bLcWuGB0+8oD0UabLE1+BfEBb8wELSVQA8begsTW4Py8PkIaW5TvnWH+QbkavQWGBzB0IYHUt5HHi9Nrpk/O93jUGYAxg0ZvpowdWkejxvPxsRyesbZLkI2T/pnw6gFRGrFXJCw6QRG8CRS71v624KHWVhCJRq/q6fMWGcRtbEQh+4c9ty/hsBuwXOGSxnIXKYtFmhzcFXy9b3AzP6bH2m7QH6nR0yPrmLi+3JMobTicRm98dwTcyKqVsawRfY7Oez7QMSkFryi1QDj5/OFfzn9GSD4wzLxFHhHIEZNMvE8yR1VuRmlasHB445jcDXBklD/HHMBLssVYM28rNvTprZbwA==
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2999.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(136003)(396003)(376002)(346002)(366004)(86362001)(956004)(38350700002)(26005)(2906002)(66476007)(66556008)(52116002)(38100700002)(66946007)(55016002)(7366002)(6916009)(6666004)(7416002)(478600001)(186003)(7406005)(4326008)(54906003)(316002)(8936002)(5660300002)(7696005)(8676002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	=?us-ascii?Q?scGC9Se5Jg1HS0tFM3tWW1GGNsxDg1GUpXr0qEnbNBPaAaN9kFZpgZqIj8MP?=
 =?us-ascii?Q?DDlNMqvJOZOGvLO1B839ySjnBu/u8BK07SocW8jK0qmjmBbfzDrrNL0BZ3su?=
 =?us-ascii?Q?k7t2Gvety/UNdxAuG5PC6GK/q7HkUsjSGkr2AGdKV0xK9gpM9YwsUUYtBTJV?=
 =?us-ascii?Q?W3zZZF3g0OIWKXDnNdfT7xxIRkLVQtLyQ8Nq6GU6kpanE5lIXa/YRjjmn4Gy?=
 =?us-ascii?Q?AnR+80a/Zs5x/3yugdrxu1p6UwGDiFUq1cErU9jZTo8HgX1FHS621Fg66rF/?=
 =?us-ascii?Q?LCXsuOc+cNT+BIZHOvS40+Wumf9XIohidO46vcZGJ9Kyf435Njd+ssEM4JwZ?=
 =?us-ascii?Q?v8WZeqg1HxFwRT9PTjJMVeg4vhbLTwhr6hzF3+269Kl3CDKYxdKH/oPP7gr6?=
 =?us-ascii?Q?XCSJAEKcC5nD3UsTwwv49g/By2qVe6JOhR0HqSMln0jxBkzAK044Z+gfVIgV?=
 =?us-ascii?Q?V1EDSFQpp2K4PW77wlXiASRYLbyWiWs473OdFLUI9NlnMpqc5AWs2BP8QdvK?=
 =?us-ascii?Q?t0YS4Z5sor5vEcgcZoSQgI9pQ1y26xEK6V6B+0Vs7/Jfdygwvq3Wpichi37U?=
 =?us-ascii?Q?MG1vs9DeCPIq08keLgn7ldS+P3kAOw4A+nFJxYPCr3Wa26mvTJROOhFucRbd?=
 =?us-ascii?Q?6Twte3VY343U1rwumrFD7NVChTpvzkH/v5DnRQIWsdEazPHbEhwmhMFhog2Y?=
 =?us-ascii?Q?OtoRNIihRoM8SCPBVWzXO8Ob6wrGrvuKsTKncdtk6S1kkz3tOqz4y8VxFVbk?=
 =?us-ascii?Q?Jl1Jp/TgVjTjEYgJhPVpEmNaG7jWwIvBFIJWBVoTx7pTMBAPnIigj7jERJdz?=
 =?us-ascii?Q?at1Ii5p78N5xd2z7igdghVp40rmoqCEYgK+dUDT9MOabUL3UPUyZjpBaL8TQ?=
 =?us-ascii?Q?bHqOpw6eqt/nabCPsYEif/LoyJdG5Ylnsf7462S3bR3gGu6qeGrjAQe8b8nG?=
 =?us-ascii?Q?H1/0bWAz9nj9R2/uU9OyXR/y0zekVmgzenR2uCA/9R5ewwu+tKv6DEhDt+Bh?=
 =?us-ascii?Q?Sp7me+rATNS6umegxws6SIy+20E83ct9MJl7t0U+sGfyrcvNJgLcq4DtpeYv?=
 =?us-ascii?Q?z/0Ig+4DUTF4Zn36qTE8d+aGtjGWrSVRd/1pxtVV8ek34BSfOOeKWEN9FPmo?=
 =?us-ascii?Q?omF4tld5oAmYr4Jjn9bPuMel1A2qNDPeDWVWif+qswru6KnYpJV9RwDr8W06?=
 =?us-ascii?Q?G7JpDPfNbdKHPSsR01981ICzRVsWfLRBL+Bq1inSoTeRZePyvcaek5olgbeU?=
 =?us-ascii?Q?GhgCR/BCjMx9+rqH9+MUboZ6/eBvn1A+G7jOvB7lp1YIgfHRM3tYPx435sRf?=
 =?us-ascii?Q?p2uYqQ2IdEdocUGI/OvVOenL?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d90bdef9-b98b-4173-d89a-08d9409f8490
X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2999.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 17:00:14.2584
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: zckFanMHx4+DZP0mkFA8w+J/Je1MRe1YIB1zMg75U1rDdB/71vM1KTH9RAuThBkq1D1a/ffRbEbgY+fMpFE1mQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB3352
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10037 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 phishscore=0
 mlxscore=0 bulkscore=0 malwarescore=0 adultscore=0 mlxlogscore=999
 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000
 definitions=main-2107060080
X-Proofpoint-GUID: MmsRRZVkZuEGZIh9CZM4MvD3gN7VIZMV
X-Proofpoint-ORIG-GUID: MmsRRZVkZuEGZIh9CZM4MvD3gN7VIZMV

On Tue, Jul 06, 2021 at 05:57:21PM +0100, Will Deacon wrote:
> On Tue, Jul 06, 2021 at 10:46:07AM -0400, Konrad Rzeszutek Wilk wrote:
> > On Tue, Jul 06, 2021 at 04:05:13PM +0200, Christoph Hellwig wrote:
> > > On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> > > > FWIW I was pondering the question of whether to do something along those 
> > > > lines or just scrap the default assignment entirely, so since I hadn't got 
> > > > round to saying that I've gone ahead and hacked up the alternative 
> > > > (similarly untested) for comparison :)
> > > >
> > > > TBH I'm still not sure which one I prefer...
> > > 
> > > Claire did implement something like your suggestion originally, but
> > > I don't really like it as it doesn't scale for adding multiple global
> > > pools, e.g. for the 64-bit addressable one for the various encrypted
> > > secure guest schemes.
> > 
> > Couple of things:
> >  - I am not pushing to Linus the Claire's patchset until we have a
> >    resolution on this. I hope you all agree that is a sensible way
> >    forward as much as I hate doing that.
> 
> Sure, it's a pity but we could clearly use a bit more time to get these
> just right and we've run out of time for 5.14.
> 
> I think the main question I have is how would you like to see patches for
> 5.15? i.e. as patches on top of devel/for-linus-5.14 or something else?

Yes that would be perfect. If there are any dependencies on the rc1, I
can rebase it on top of that.

> 
> Cheers,
> 
> Will


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 17:07:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 17:07:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151565.280105 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oXQ-0006GR-Cf; Tue, 06 Jul 2021 17:07:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151565.280105; Tue, 06 Jul 2021 17:07:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oXQ-0006GK-9l; Tue, 06 Jul 2021 17:07:12 +0000
Received: by outflank-mailman (input) for mailman id 151565;
 Tue, 06 Jul 2021 17:07:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0ZJM=L6=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1m0oXP-0006GE-QW
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 17:07:11 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 99b02bb0-de7c-11eb-84ad-12813bfff9fa;
 Tue, 06 Jul 2021 17:07:10 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id D8BEB61C3B;
 Tue,  6 Jul 2021 17:07:01 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 99b02bb0-de7c-11eb-84ad-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625591229;
	bh=VhhzIH6gzRT8gtRsisto5IDFaHK+/13p4/dNI43mqXQ=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=hl0xCyjFbo3wnMVlDA8LcQL8eHToHXmUMr23zuNOTdipVfwNhivzNpi8rpTly6eYi
	 yPd2oC5omfpzshqqnFMLEQGIyy9TAQeSgCgSvFYmHpKLsM30eMNC98TPrdW8hja8Kb
	 4m1fjoFjCWorTG/lEoPVyDyK3SJHLMjyzybho2CdMauS/azg7sMbNbYLaDlqMOER13
	 ALFzRBBx8Uq7Drdf4gPPQLMEsDVKJLDGxMmwxLH7I7ZcRSFV8ffeda6f2WQMZefhG6
	 DGh52bATmGicYuUcNyMSkAeHgzE8e4+s/u25yglW+hkrikwQu6kPAYHnUHYwEX7ru4
	 L8ww7+blLmJBA==
Date: Tue, 6 Jul 2021 18:06:58 +0100
From: Will Deacon <will@kernel.org>
To: Robin Murphy <robin.murphy@arm.com>
Cc: Christoph Hellwig <hch@lst.de>, heikki.krogerus@linux.intel.com,
	thomas.hellstrom@linux.intel.com, peterz@infradead.org,
	benh@kernel.crashing.org, joonas.lahtinen@linux.intel.com,
	dri-devel@lists.freedesktop.org, chris@chris-wilson.co.uk,
	grant.likely@arm.com, paulus@samba.org,
	Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>,
	Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	maarten.lankhorst@linux.intel.com, airlied@linux.ie,
	Dan Williams <dan.j.williams@intel.com>,
	linuxppc-dev@lists.ozlabs.org, jani.nikula@linux.intel.com,
	Nathan Chancellor <nathan@kernel.org>,
	Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
	Bjorn Helgaas <bhelgaas@google.com>,
	Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	jgross@suse.com, Nicolas Boichat <drinkcat@chromium.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Qian Cai <quic_qiancai@quicinc.com>,
	lkml <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
	Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210706170657.GD20750@willie-the-truck>
References: <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <bb32d5a6-2b34-4524-e171-3e9f5f4d3a94@arm.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <bb32d5a6-2b34-4524-e171-3e9f5f4d3a94@arm.com>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Tue, Jul 06, 2021 at 04:39:11PM +0100, Robin Murphy wrote:
> On 2021-07-06 15:05, Christoph Hellwig wrote:
> > On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> > > FWIW I was pondering the question of whether to do something along those
> > > lines or just scrap the default assignment entirely, so since I hadn't got
> > > round to saying that I've gone ahead and hacked up the alternative
> > > (similarly untested) for comparison :)
> > > 
> > > TBH I'm still not sure which one I prefer...
> > 
> > Claire did implement something like your suggestion originally, but
> > I don't really like it as it doesn't scale for adding multiple global
> > pools, e.g. for the 64-bit addressable one for the various encrypted
> > secure guest schemes.
> 
> Ah yes, that had slipped my mind, and it's a fair point indeed. Since we're
> not concerned with a minimal fix for backports anyway I'm more than happy to
> focus on Will's approach. Another thing is that that looks to take us a
> quiet step closer to the possibility of dynamically resizing a SWIOTLB pool,
> which is something that some of the hypervisor protection schemes looking to
> build on top of this series may want to explore at some point.

Ok, I'll split that nasty diff I posted up into a reviewable series and we
can take it from there.

Will


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 17:09:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 17:09:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151569.280117 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oZj-0006uM-Qe; Tue, 06 Jul 2021 17:09:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151569.280117; Tue, 06 Jul 2021 17:09:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oZj-0006uF-NZ; Tue, 06 Jul 2021 17:09:35 +0000
Received: by outflank-mailman (input) for mailman id 151569;
 Tue, 06 Jul 2021 17:09:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0oZi-0006u7-Av
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 17:09:34 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.13.52]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7ef9c14e-84d4-413f-ade1-179caa131719;
 Tue, 06 Jul 2021 17:09:32 +0000 (UTC)
Received: from AM5PR0701CA0006.eurprd07.prod.outlook.com
 (2603:10a6:203:51::16) by DB9PR08MB6411.eurprd08.prod.outlook.com
 (2603:10a6:10:261::11) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Tue, 6 Jul
 2021 17:09:26 +0000
Received: from AM5EUR03FT046.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:51:cafe::da) by AM5PR0701CA0006.outlook.office365.com
 (2603:10a6:203:51::16) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.8 via Frontend
 Transport; Tue, 6 Jul 2021 17:09:26 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT046.mail.protection.outlook.com (10.152.16.164) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 17:09:26 +0000
Received: ("Tessian outbound f29a5a293366:v97");
 Tue, 06 Jul 2021 17:09:25 +0000
Received: from a35f8c5e8f59.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 3240F6D6-0BB8-462F-9229-30B6B3DF07C1.1; 
 Tue, 06 Jul 2021 17:09:07 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a35f8c5e8f59.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 17:09:07 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PA4PR08MB6111.eurprd08.prod.outlook.com (2603:10a6:102:e3::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.28; Tue, 6 Jul
 2021 17:09:06 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Tue, 6 Jul 2021
 17:09:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7ef9c14e-84d4-413f-ade1-179caa131719
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qJ9cftBAebo4tPMCdQCthkL6pet0xRYEw/nEmrkHaf0=;
 b=j8RftvDtFLtMgxRl+q6dS2uho07CgpooDGI37e8ZUtti/DFS+g06TJXtohIjtRL1VfxfnvBQnbSbuvKNHb7ekZmjBIpX9fx2og97b2h/ajz0WMefWvg2S/5gnEfu92fZEDx2jOPRnPQe6nIrP/xrMjMTgLxtGjPZfU7h1xEGMSQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 2d378eef710450a2
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=aJqxZ9XqWFY2oh7CX2jtrTwjqbTa5+X5hv6hGWU03w6eI63DLE7csNeufRuYl2UM+FX2kuVT2NBZArOc9m+O8879heyXyBQBJPI8eKVwuBkOtnp2+KqrBy8eD+jfIiv/8ATAyIkBSdblzA9iXgHc6xePs1w1JnjDXs4KW+u7MtuK/6RD4A7McfYMSMdLBv2GzU/KhS0FElyygGUnfmhKxQfG1IPHti2ABgjiixq2Sv7Nv7pHTMWi2zplSHn+kP1l4LAAmoyvvSVotZEI1nH4mwEkdmmTM0bR4x48gT29dR/qzPPlrSuMhVM/Zj3HqYLR09KAIB4kLuntQjzn1RLNSA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qJ9cftBAebo4tPMCdQCthkL6pet0xRYEw/nEmrkHaf0=;
 b=f1U4rp2vnRxRpnEIEljdaFZMSVmLMgxWCFP6TkrWjB83ruZgToPeBhvhnnE3vtYoBcH25d9LI3vEYHo2ts0t5RMclrG2dhvBs9Btx5PZCEQQsBcw6te16Tc2hcL+SAfrz+5hFnAGtDI4roUhNb0hfuQIze9yzZX+vyNRVp7oQNuJ9oTWpJWwpN5jIRzINRVxUDX+zbmTepCJ7wUIY8I5t5vbDuAKV47AlfZpb1pXCCR701R6cLO2jTtISixO3w9dfbP02XWA79JiDsvRcSXxQVdK44l2L4HcYSriOkECsJUE283ccSIWRUW9IsB2JsGOb8k1GnX7RjJAq00yXBjrbg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qJ9cftBAebo4tPMCdQCthkL6pet0xRYEw/nEmrkHaf0=;
 b=j8RftvDtFLtMgxRl+q6dS2uho07CgpooDGI37e8ZUtti/DFS+g06TJXtohIjtRL1VfxfnvBQnbSbuvKNHb7ekZmjBIpX9fx2og97b2h/ajz0WMefWvg2S/5gnEfu92fZEDx2jOPRnPQe6nIrP/xrMjMTgLxtGjPZfU7h1xEGMSQ=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Rahul Singh <Rahul.Singh@arm.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Stefano
 Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr
 Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH] xen/arm: smmuv1: Switch from kzalloc_array(..) to
 devm_kcalloc(..)
Thread-Topic: [PATCH] xen/arm: smmuv1: Switch from kzalloc_array(..) to
 devm_kcalloc(..)
Thread-Index: AQHXclVEDxOOzv0NIEKGiChMKv1YoKs2LpKA
Date: Tue, 6 Jul 2021 17:09:06 +0000
Message-ID: <8E88EA39-0B01-4924-AD85-AC375E1D7A85@arm.com>
References:
 <2c611dec5f1dbd6040d7a37d2d72ad2fc66e113f.1625568432.git.rahul.singh@arm.com>
In-Reply-To:
 <2c611dec5f1dbd6040d7a37d2d72ad2fc66e113f.1625568432.git.rahul.singh@arm.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: b64a8a07-e215-4054-efa6-08d940a0cef8
x-ms-traffictypediagnostic: PA4PR08MB6111:|DB9PR08MB6411:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB9PR08MB6411D4E6551D90F64902490F9D1B9@DB9PR08MB6411.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:3276;OLM:3276;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 5MC8cHlHkjiCpCxFWxOxzCNpKOjYoFkEzHUpBQfVGJpLf3vx0rYE1t1rab8z1SQ+AovOMB+sDFqAHQApvsbQct4qdeo8+k4MPnH7kdN2K715HaRzEpXVDJXhyHRfMt6kABKEzLaRZrwbNX9pl9AGiEIJbLCjVCrZodo3MuKMe59SqWIKKx+F9Pk+naos6hNhORhpw4edn3h+wiMtTghjoH4jRSBLd75RTxmh9oYBkNXTuiEjieHBHRFd8hWdgmHQappmJa9728X2HGHEZ3JvF+yiid+Frkgoo1wkpclLcPJnlA1ATeitEIECSDKBodhcqXLw8ibFVaBwwLLUGywW99+lN9d4WE9k8hD8VVop6LB0QvYvtzO6KFdrxgffmjfxN0BD50kFfa1rj2BG9OXXJ8M/42/eGqquaXYLKKpfQ+LYoHZizI7792P2Teu91XfuY1Zot6UqYRH9SUwvSQMnky3wW2hIHOBflgZvdbVXz7JvFHdseMH+qW3sa4hdOT3Qjo9wIx3QL+zzGxf3XxMdlag2k47zEEZ3HmEMRr4WQjbBcjNZjJY1v42iHKkGcAXrfnuEdFfma53yOqbKFZZA9MeiFWiKxWPaQxKOToN8AHJsWWpv2a3emqzNFKyjyksYmUheQ8P1XAKOxGxLGTiLZi7Z0rqzpTMGNHv4lmISxNWGKzF/GYn2BFGvfPttXMmoJNkIYzdGPguKykRX+i1QtA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(376002)(39850400004)(396003)(366004)(4326008)(71200400001)(91956017)(33656002)(6862004)(66556008)(6636002)(8936002)(6486002)(76116006)(86362001)(2616005)(83380400001)(8676002)(316002)(2906002)(37006003)(64756008)(66446008)(478600001)(122000001)(5660300002)(36756003)(66946007)(186003)(6512007)(6506007)(38100700002)(66476007)(54906003)(26005)(53546011)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?JYuK0jNdvGlIC3F2pkKUVkrJGP+MQV8ZjNdNm7i7FXFmvIzQgtHfCBWmGpZj?=
 =?us-ascii?Q?lkTkmebdTBPzlSqOF0Nms0kjN47vdqh4rPhZriYhAJ1d93QZq7F5o4M83MrR?=
 =?us-ascii?Q?5o4ipqul4JWZmttI+cxiFyB/izPCwbXLHElnAv6ahqs/WzhhO0W/iSMyqwCj?=
 =?us-ascii?Q?peCxwGdEod3HrE4+3yqHPBVY/UYHJ9CqbALn3y9QqW8zoQOzzJPaLCKkwDDm?=
 =?us-ascii?Q?hZh7qF0eqUhCWYqwcbQXL+YiNA2R7CmK/tSCvM2zMkpvEsTA8+tQc7v9+u0f?=
 =?us-ascii?Q?gfTT8tbWdiA5ATFnUIxpNJbWjvsAWr+p3GOgUrrkeXVbO9ouMYk2dkro12mO?=
 =?us-ascii?Q?u3YLKEWMRBILdlyRlgb9VK4KyxVjrUH00KVdgNmwyMCjYqSPI+HiEjkPvDfh?=
 =?us-ascii?Q?doYVfEb2X7lzaG9F/3Xen6FHX0h6JGdndKnT2Z5oel24lwpq4N2QMWk/tP5E?=
 =?us-ascii?Q?1fwyH7tcUGue3ft7ElbT3pQc8K6Y0kK1MbMES4RnYji3JZpRJ4lS9ggn65Cx?=
 =?us-ascii?Q?qHApts9CeaARTsG2JIRcpQQeXVAbIA/h1xf0EiOn+AD+Hjd6oSh/Yh+azDBQ?=
 =?us-ascii?Q?xKhsd6/atlUZIWd0VZMXGJ8WRraPC6vQIJY1gH9dHz7wuuhR0BSJzTxQKifc?=
 =?us-ascii?Q?a+owJHqxP7f7uqOz5jCPjTXMwebPqb/HZwa7mLPWtdATzPGgZ9wI5eHleYAq?=
 =?us-ascii?Q?d54Tz2CVqnwDb7fBQubpIbWCWzzaVjqSCQJjN0KnQuUNYIoZ0odEN7rrusMk?=
 =?us-ascii?Q?WZhAabLsMJjhXQksXU8B1KwjyhwEHBtWMT/6YzY2OqbBuC+ZCbTDENci8J/w?=
 =?us-ascii?Q?fmiUZXfoFTu39aq8Qzf8XIe8yN3+w4xprR1vilLnZXzV4ajD52v8Nnhe74Rr?=
 =?us-ascii?Q?5ojaekx6sG/EdATIgsJb85ZsIbtidr/botIM9lqQuv1NluXihfvJgjWG/K5j?=
 =?us-ascii?Q?Yfgqky7ZH5fx61aAFIeHdBZUtanuXK1SlwehSDBiJMW+dmAHcWthv0RV2rEi?=
 =?us-ascii?Q?F721iC+RxV5l81CW7tFL6/Wfh3Imh/WVUHKpW/3z7scf/sHH6jR81k0SXix+?=
 =?us-ascii?Q?5/dnIqjN4DFxVCwZ65mcmM5/Rkhn5ZzgJCVEjt6RV7k87R5TiY7bW/7HTbQq?=
 =?us-ascii?Q?oay4ymumKuo13V9zsW1SYE8zgENbVbpgCjnub5gFnk3qk2MnyzGXO3BFj4cQ?=
 =?us-ascii?Q?PrGSUHdbSUHwKWnXPMw/2gfdJEs8IXv1eCe/eEvkjWWr8GuNuErS38JiddAB?=
 =?us-ascii?Q?gdrFC5DtPY9evriej0/t58amct4osZZzKmtX8cHZqfA1olZ50MV/cNbEuyuh?=
 =?us-ascii?Q?NJIRnjDFOO+MZEByAdHJdW5b?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <361A7D8BC1581D4387AB1D98FAA18A6C@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6111
Original-Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT046.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	1af8b6ef-8037-4308-6c30-08d940a0c38d
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	6sAuqVeDdzQ5N/V42SKCmjHTJ1ock4c7Ylsw/gzoYenMbJCg6VFrgdSOZPWCjUD8rPv3KTi8WkltypLtwtwMJ5vcSIOgFdpexr3tUU7AWyI/cHtgRve3Rik2omKpmmKwRZ4k5prjoB7y88tMpF89iUsKtqNb3jsF4M2QS+tRA20ArsyL2zF6asF7Xs5mhxG3wf4k/Us7WqfuAr4NDyRtYTE6X0VEK4UkOXgljIprVMSoBMdXO5LEq0kz1EOJ12Fn8lMzBKO2yh3KR4LOoX9L3OV/rE/4sw27R/OHMTKBqAjm0nBrB6pW34PhZT60QN+cGYsqDr1IKtAs5EQ3iZTN/m9DNwdM/b7E8qd5fVajNcDfwVJoYANfhPafUI49FX32pvKyMgXdABIfdTlx1TkstHao3daiKmmHjNILz/hgLS2ERQ8LqMgOywXGNinWmIHQ/Z3mKd7IyQLd1NJhnbcPCjQnC0K6wwYzZ3jU7CzaUvQ9pJamvYdG4vyFgvd0z/7B1DoLAH4N1gKof1qhk24o5By5z92TJVnavPhkStYVyruUsCRcNErgipd/1Jw6Lz2mcwJGs8TPYCGfLRPmUwvbnbxXTEAz6qe0nZ/j1CG3fhID5Oxib0kymJtrs870JQpq1JAnSe840+zaolIrD4UUneUOdbiJgkpoUAf9rIcOyMKrOJC417OavyA3woLX7hvjBWMjz7N0NvfyJ4c6TY1Gfg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(346002)(39850400004)(136003)(396003)(36840700001)(46966006)(8936002)(54906003)(4326008)(70586007)(82310400003)(5660300002)(6862004)(478600001)(2616005)(6512007)(6506007)(107886003)(53546011)(81166007)(86362001)(26005)(6486002)(356005)(186003)(336012)(6636002)(37006003)(36756003)(47076005)(8676002)(83380400001)(36860700001)(316002)(2906002)(82740400003)(33656002)(70206006);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 17:09:26.0381
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: b64a8a07-e215-4054-efa6-08d940a0cef8
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT046.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6411

Hi Rahul,

> On 6 Jul 2021, at 11:53, Rahul Singh <Rahul.Singh@arm.com> wrote:
>=20
> Switch from kzalloc_array(..) to devm_kcalloc(..) when allocating the
> SMR to make code coherent.
>=20
> Signed-off-by: Rahul Singh <rahul.singh@arm.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

Cheers
Bertrand

> ---
> xen/drivers/passthrough/arm/smmu.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>=20
> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough=
/arm/smmu.c
> index da2cd457d7..658c40433c 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -149,7 +149,8 @@ typedef enum irqreturn irqreturn_t;
> #define kzalloc(size, flags)		_xzalloc(size, sizeof(void *))
> #define devm_kzalloc(dev, size, flags)	_xzalloc(size, sizeof(void *))
> #define kmalloc_array(size, n, flags)	_xmalloc_array(size, sizeof(void *)=
, n)
> -#define kzalloc_array(size, n, flags)	_xzalloc_array(size, sizeof(void *=
), n)
> +#define devm_kcalloc(dev, n, size, flags)			\
> +	_xzalloc_array(size, sizeof(void *), n)
>=20
> static void __iomem *devm_ioremap_resource(struct device *dev,
> 					   struct resource *res)
> @@ -2222,7 +2223,8 @@ static int arm_smmu_device_cfg_probe(struct arm_smm=
u_device *smmu)
> 		smmu->smr_mask_mask =3D smr >> SMR_MASK_SHIFT;
>=20
> 		/* Zero-initialised to mark as invalid */
> -		smmu->smrs =3D kzalloc_array(sizeof(*smmu->smrs), size, GFP_KERNEL);
> +		smmu->smrs =3D devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
> +								GFP_KERNEL);
> 		if (!smmu->smrs)
> 			return -ENOMEM;
>=20
> --=20
> 2.17.1
>=20



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 17:09:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 17:09:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151571.280128 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oZz-0007Hv-8t; Tue, 06 Jul 2021 17:09:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151571.280128; Tue, 06 Jul 2021 17:09:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0oZz-0007Ho-4a; Tue, 06 Jul 2021 17:09:51 +0000
Received: by outflank-mailman (input) for mailman id 151571;
 Tue, 06 Jul 2021 17:09:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/cLt=L6=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m0oZy-0007EA-33
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 17:09:50 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.85]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f823172a-de7c-11eb-84ad-12813bfff9fa;
 Tue, 06 Jul 2021 17:09:49 +0000 (UTC)
Received: from DB6PR07CA0081.eurprd07.prod.outlook.com (2603:10a6:6:2b::19) by
 AM5PR0801MB1729.eurprd08.prod.outlook.com (2603:10a6:203:3b::7) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Tue, 6 Jul
 2021 17:09:46 +0000
Received: from DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:6:2b:cafe::2a) by DB6PR07CA0081.outlook.office365.com
 (2603:10a6:6:2b::19) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.8 via Frontend
 Transport; Tue, 6 Jul 2021 17:09:46 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT057.mail.protection.outlook.com (10.152.20.235) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 17:09:46 +0000
Received: ("Tessian outbound 5d90d3e3ebc7:v97");
 Tue, 06 Jul 2021 17:09:46 +0000
Received: from dbfd1187cecb.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 5BCC41B4-5A5C-47FE-8E42-CB51C24F99C5.1; 
 Tue, 06 Jul 2021 17:09:40 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dbfd1187cecb.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 06 Jul 2021 17:09:40 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PA4PR08MB6111.eurprd08.prod.outlook.com (2603:10a6:102:e3::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.28; Tue, 6 Jul
 2021 17:09:39 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%9]) with mapi id 15.20.4264.026; Tue, 6 Jul 2021
 17:09:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f823172a-de7c-11eb-84ad-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zjJUiH96IYTbPVoFZr5RR6KjTNi7tXBgKw0jMmmQMcI=;
 b=YCpl5BSwAMA3C3odL0xxkD60EnKUmuuD2C+BeVEsHiYlsBvBOTuZLq0nmu4ioCYoeajFXN962oKtQaDASerwaUmHMX90Wptgsp6LaoBmcjEU3pRRH7cp/L0PBwSif8LR+LENWeTA9DspViPhOtvuo/668yJvZO1uosPifW7gClk=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 8b1fc6db8a0dc25a
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XOsWvAwxUEzcKPiRFQojQw0IaZIByyW7SkreKR5DtfSwgXhx821ACPT0atkqB2QOJzIbrhMbmVW6oNY1RS5ovgVrB5lGigv2L1EC9N6WES5f8zfL6Wvxmi1veFCzyUX2EUU76f3XYMsW2lbaebowmQKm8pqedDqj14uw3DkkSaJ0XkxwljSWsDGCtSN304BuNLcgcLqCa4JFCWTUsOk8iryMZqXt01YNkNMYtXXnknG0HIbhI1EtxEHGsPJY2M+9744wbD3I+u25iYjeZGNLmdntqx8wW39LV9tGxLyoJVgNCRQtazwJYpEapQnkoUTqfmPCYDAciSlQ/egelfweDw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zjJUiH96IYTbPVoFZr5RR6KjTNi7tXBgKw0jMmmQMcI=;
 b=A68eXCoDxiXLbj4Xw8m/XU9F/9JX5xs/IrUKdkdUYqFB+Y5KpO3OujoATqyAw4RbpPfjbnLVXzHBiNUIW8Xk8fIOZMiXbFqZV8IDGSYQI93RaFEdZTqNerbtxmrRmevjcb5nOO3fsx73c3OfYmCexqVa13jTk31vjSNmH/3hy9p9rvu0479HtxXXH8tXf09RulOwqgTbVa9LMf+UMFV8/d+6BLMgD1aWQUjEB6TNc6yyS4ajb4bkXHJMFGdVp3tOjCHVZFZbh46ENHdMG9Z/Pj+6VtdQdsGScBY0PHPPELJjQtIx0bS+iA47UmWIUBCyNio+3vYFwRr4uQeAydrfsw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zjJUiH96IYTbPVoFZr5RR6KjTNi7tXBgKw0jMmmQMcI=;
 b=YCpl5BSwAMA3C3odL0xxkD60EnKUmuuD2C+BeVEsHiYlsBvBOTuZLq0nmu4ioCYoeajFXN962oKtQaDASerwaUmHMX90Wptgsp6LaoBmcjEU3pRRH7cp/L0PBwSif8LR+LENWeTA9DspViPhOtvuo/668yJvZO1uosPifW7gClk=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Michal Orzel <Michal.Orzel@arm.com>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, Jan Beulich <jbeulich@suse.com>
Subject: Re: [PATCH] arm: Fix arch_initialise_vcpu to be unsupported
Thread-Topic: [PATCH] arm: Fix arch_initialise_vcpu to be unsupported
Thread-Index: AQHXclHJWHwKNGJKDUOBs2jUzEf/E6s2LsEA
Date: Tue, 6 Jul 2021 17:09:38 +0000
Message-ID: <D3CC15ED-E3F4-4EF5-98F4-3858284C48E4@arm.com>
References: <20210706102853.10251-1-michal.orzel@arm.com>
In-Reply-To: <20210706102853.10251-1-michal.orzel@arm.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 61f8a5c4-28a2-4a49-9e55-08d940a0db57
x-ms-traffictypediagnostic: PA4PR08MB6111:|AM5PR0801MB1729:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM5PR0801MB172932A69FB2425BB09A4D3C9D1B9@AM5PR0801MB1729.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:2657;OLM:2657;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 pGDjPuD0c1vPhL2VSFFw0JqEbpkAff14zNE4vbMjkh8fFHQxNGncRK1y3xWkJaU2KKTcg2g2swfDxC1k/VwsNSnJX6DPyw+W/+CnC/nS8ADWDSmzq3DmoL18rQ4qnI2/E1X4Pp5/aw5CCGe1eyDeF4mb/CYzxwiI9Bt2wIQzxJfj89DCsAzaWh/qsydRux++xT7Vut9ql6GYcfesoyO/bzR+f4XxCWTwJV4qBNl3s3oQk8o1qRT0QDMmK/x9uCIW9a9ENdTidq1Mlz78/vq0e4zZEAbqzhGxXiS+xcDwfWjDkdVc8e5TvKsQ0NS00xjtYygjEgG1fA4XzUWXrd46XionsVsjv8D6+1LLEqpH0kWvmlf9d5fNhGCjVrt+8PmvH32N7O/IXdzIqWD16E+DMbNdcDIHx2Lb8ewMYMkLUHLkp9kXUIC4mYidXrAXaImaMAFsp9uCdfuFtNQHbaiWZ48qn2jBQe7dtcTPENOqLTIRTBkomBV2nViGnUh+kLN1FdLkfTEddkEHy5DacGqEbeYwDxHDvkrJI97opIY2Kvfdu0wayyTEqeSQ/wkoW8ASpEbaMUmCl+8pT8mSzxM4J+NM4Sc7cs1wC8TbRf2sX6YG+YQiLAxmFq8d3VrkWbltF2tKmSZyF+97ebrm44001dNUkRFKehk0jlbWq3+mvCSkZOQGBhlHYPKEOKq216JyEoLkL+aEY8ir+5AjphF9hA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(346002)(376002)(396003)(366004)(4326008)(71200400001)(91956017)(33656002)(6862004)(66556008)(6636002)(8936002)(6486002)(76116006)(86362001)(4744005)(2616005)(83380400001)(8676002)(316002)(2906002)(37006003)(64756008)(66446008)(478600001)(122000001)(5660300002)(36756003)(66946007)(186003)(6512007)(6506007)(38100700002)(66476007)(54906003)(26005)(53546011)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?PahD9umDCr9DlsSIZ7oMn+MXvtNXmoMXxdVUoMJ9R0KoRD9XY2mSivw5nKxH?=
 =?us-ascii?Q?+teWEz5I8BuA0LMO9zkj2YSiDqQhvCQ5Cjb3mkP3EsOG28lPHzvCjCbZJU/K?=
 =?us-ascii?Q?HBUgBIvM5unQog1SR08pSos6h/TOvVfXdYNAvTxmfdzYr/WCFJReZCLzWKRM?=
 =?us-ascii?Q?O7GS+c/7r/NR3qocmUAmxWC7ajixqiJZvhqxN64WlrQWroSUUNVassTEvBRk?=
 =?us-ascii?Q?P2zdYtYNEhLV2QaPssAPYtiQY+fEw2HvORx56E12aT2w5VDZfrhMgo4uovJy?=
 =?us-ascii?Q?mnIeJMc/Rk+5xbFWDRO0Yts+R1erLLp8rqVgp+iUG1lMRSe+xnr812zTKvNC?=
 =?us-ascii?Q?AqYFvrZBaFoh46TilJSQdmNnkjz8EmJuoxvN1K0l6zUPNkt3ziI5WQ9n6deG?=
 =?us-ascii?Q?1ecPvLf2yl5ERfHa1Q1zFdZGQHCAtI4ItDWZaUn8rNENYVCY1sxd10tr6dYa?=
 =?us-ascii?Q?URiSrUOpLwM3FzO0Tuo093PxqjQ82ec9ci+gcgoMttLzjyXZwv6UE0vK5pMm?=
 =?us-ascii?Q?3WMZG+HfSExKrdMGzD8S68rpvyGNZepRHrIs0DBYeSYLAI1bkYVU91Xt03iV?=
 =?us-ascii?Q?0OIkW5Ni3OQosQ942/FrAe196rsyvLeJ/rxXPFPHcCQaScmpjJeuiLmCb705?=
 =?us-ascii?Q?Ngy1m/Nzh+QWtmBuuJYSynkKQ4Y/Np3Nqy+MWiHgQ8y7qp+KY1+u/yasZKYC?=
 =?us-ascii?Q?lxKeBHiPqQQ1mnC4IAAbkswQCyrtco/bMU9n7d3vBVGz3s/mvJvwNhjB/mW7?=
 =?us-ascii?Q?oWGi4yEv3QHggtvU5ciyrPNXDvRvGRAiYwGGWb7q1oaIax91nhF4thIkZMoW?=
 =?us-ascii?Q?U/ysxpBZwYQXkdkYzUZkBKUlxjGGCwZUMeKBzIVkyJHIdN+6SUfgf3JST1a+?=
 =?us-ascii?Q?Yj1Lfzdpezrat0XBoea6IpoDhV701gH96xJGGtnzcZn+h68axjLxyecWqloe?=
 =?us-ascii?Q?DBhzuEngnAb76julNRNW27EzRUa9TlLkJAhctCymOBIpv94GoPIw/PySIenF?=
 =?us-ascii?Q?JZjmoDSLQvfsM+l0bJdXcVALtZGSErcSshlO+ooOZ0/5rGuuFT1QSzrPuV6k?=
 =?us-ascii?Q?fNCHLjbhbIidrzATORMVZkXlIe/uqqizPOmBM2oLp6R2YObD4D3nwt+Zvf90?=
 =?us-ascii?Q?bdMLVmNm/iHPd5E9dwW2J/srlWXP6q9TW+iiwtSZgBGeNjoE2/fMqUoqV2Dc?=
 =?us-ascii?Q?eK6g1+sfct9Nz+SNEUZHrvVLHtHBxB+Ypwtfat9WV8Zw5yDGStHuRel7z55j?=
 =?us-ascii?Q?+gi0Zr8QJVVhGqy3lLFLgWeUqIZveM/2Z3DlbxrSWnBVG1zd8NFbw29Q80Xn?=
 =?us-ascii?Q?ZNV1RIcnP+3S45Eq/G8pnSxL?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <911E629055C87C4A9C11FB565E85D19B@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6111
Original-Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	a01ce23a-1e2e-4dc2-416a-08d940a0d6ab
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	wgVaPwH8FdrsumO6GxyLCXIQ13Rc/j0a9gpdlNm5nNQrHVTTncmV9FVYOXGDXX3ac93lNO3xe/JbLm9pzFyk/D5CYpCbaoRuzaZvRp55PdHR566aOBZROOqlNrN24Mr+Cgz3ksMNbeBns+qwySBBi/y0snY1e2t/wF+VZTM+JT+sUNpKHtZ5E4YkQnfDp3gVS3p5JMCFEEdo0OBmasFUKNcugiVE/HFqNiz8R4idYSzZPxrQnBOKjoUwH8rtjTJ8TiUe6S11nBmiTDAa5i2LqWT2Y5VSGqrEJAz8eEMEcmpWZwd23IksZb07CHG33AF2naE2/6KqfG8tVKZ1JO+1EUbPiTmGpSTNnPgTV4fIhPVeb51T4bpA3BeuZX5rMXztZhA+17nq+iWciJSm2BylPXY4zyqUM9MgGJv4VbvnryVKLnbud3i0/pxcbjCk3p0YPRJKSjJB+JBAK78hnNirdWz4WR/lzgCAOdy6k7QZhFmrli1I3HZW5zvc30HEBz79ZXyBWg8y4wtr5HiUJhF1r7xhJWzPvG7JsZbk7boJLZyTU7MJ6Xmyq49FsEP1AMrngxllMF6FvlOPe723RXe02zWbqmkYV0o8ZD6ffPD8cInmi4Nr9M4Z+OXArNfFdLtzwbQrocpR0IRX5Vgro9Gs0dHSrfLhmww2LYXPFqcd1feARF7cnbZSy+SphSZ+PX6vJ37cxI+mGjGq0LLCuBr8Cw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(346002)(39850400004)(376002)(396003)(46966006)(36840700001)(2906002)(54906003)(356005)(70206006)(81166007)(107886003)(37006003)(186003)(47076005)(2616005)(4326008)(316002)(70586007)(82740400003)(6862004)(86362001)(336012)(36756003)(6486002)(33656002)(6506007)(6636002)(83380400001)(8936002)(82310400003)(8676002)(478600001)(26005)(5660300002)(4744005)(36860700001)(6512007)(53546011);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2021 17:09:46.8453
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 61f8a5c4-28a2-4a49-9e55-08d940a0db57
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1729

Hi Michal,

> On 6 Jul 2021, at 11:28, Michal Orzel <Michal.Orzel@arm.com> wrote:
>=20
> Function arch_initialise_vcpu is not reachable as the
> VCPUOP_initialise is an unsupported operation on arm.
> Modify the function by adding ASSERT_UNREACHABLE() and
> returning -EOPNOTSUPP.
>=20
> Suggested-by: Jan Beulich <jbeulich@suse.com>
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

Cheers
Bertrand

> ---
> xen/arch/arm/domain.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>=20
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index c021a03c61..a2aa8b77ad 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -923,7 +923,8 @@ int arch_set_info_guest(
>=20
> int arch_initialise_vcpu(struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg=
)
> {
> -    return default_initialise_vcpu(v, arg);
> +    ASSERT_UNREACHABLE();
> +    return -EOPNOTSUPP;
> }
>=20
> int arch_vcpu_reset(struct vcpu *v)
> --=20
> 2.29.0
>=20



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 17:29:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 17:29:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151588.280144 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ot8-0001TG-V2; Tue, 06 Jul 2021 17:29:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151588.280144; Tue, 06 Jul 2021 17:29:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ot8-0001T9-S1; Tue, 06 Jul 2021 17:29:38 +0000
Received: by outflank-mailman (input) for mailman id 151588;
 Tue, 06 Jul 2021 17:29:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0ot6-0001Sg-T9; Tue, 06 Jul 2021 17:29:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0ot6-0006g2-Nt; Tue, 06 Jul 2021 17:29:36 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0ot6-0000mB-GK; Tue, 06 Jul 2021 17:29:36 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0ot6-0002s0-Fp; Tue, 06 Jul 2021 17:29:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=ph2CJF0y4Okl2a2K90xgu8lnqwNEXQWId9Blo+SUl58=; b=Q4wal13ClKBYy1Pl5GZphHuKjX
	4p+ww4PWins77pb0r0QDAzGpmjw3emSf/mY6JoLWuTtKZwMlUPNhbWEnYEst9ciNyuQ95xz9SwLie
	ix06UHRJPfBKcUwYu20Yhu3K4q0gqgxoH3b6MAsJKPB8B9gujDoj497Qj9ZWK+aJGDok=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [xen-unstable-smoke bisection] complete build-amd64
Message-Id: <E1m0ot6-0002s0-Fp@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 17:29:36 +0000

branch xen-unstable-smoke
xenbranch xen-unstable-smoke
job build-amd64
testid xen-build

Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  918b8842a852e0e7446286f546724b1c63c56c66
  Bug not present: 4473f3601098a2c3cf5ab89d5a29504772985e3a
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163347/


  commit 918b8842a852e0e7446286f546724b1c63c56c66
  Author: Michal Orzel <michal.orzel@arm.com>
  Date:   Mon Jul 5 08:39:52 2021 +0200
  
      arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
      
      AArch64 registers are 64bit whereas AArch32 registers
      are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
      we should get rid of helpers READ/WRITE_SYSREG32
      in favour of using READ/WRITE_SYSREG.
      We should also use register_t type when reading sysregs
      which can correspond to uint64_t or uint32_t.
      Even though many AArch64 registers have upper 32bit reserved
      it does not mean that they can't be widen in the future.
      
      Modify type of hsr, cpsr, spsr_el1 to uint64_t.
      Previously we relied on the padding after spsr_el1.
      As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
      No need to modify the assembly code because the accesses were based on 64bit
      registers as there was a 32bit padding after spsr_el1.
      
      Remove 32bit padding in cpu_user_regs before spsr_fiq
      as it is no longer needed due to upper union being 64bit now.
      Add 64bit padding in cpu_user_regs before spsr_el1
      because the kernel frame should be 16-byte aligned.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
      Increment XEN_DOMCTL_INTERFACE_VERSION.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
      
      Signed-off-by: Michal Orzel <michal.orzel@arm.com>
      Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
      Reviewed-by: Julien Grall <jgrall@amazon.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/xen-unstable-smoke/build-amd64.xen-build.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/xen-unstable-smoke/build-amd64.xen-build --summary-out=tmp/163347.bisection-summary --basis-template=163326 --blessings=real,real-bisect,real-retry xen-unstable-smoke build-amd64 xen-build
Searching for failure / basis pass:
 163336 fail [host=himrod1] / 163326 [host=himrod2] 163314 ok.
Failure / basis pass flights: 163336 / 163314
(tree with no url: minios)
(tree in basispass but not in latest: ovmf)
(tree in basispass but not in latest: qemu)
(tree in basispass but not in latest: seabios)
Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git
Latest 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
Basis pass 7ea428895af2840d85c524f0bd11a38aac308308 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/qemu-xen.git#7ea428895af2840d85c524f0bd11a38aac308308-136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 git://xenbits.xen.org/xen.git#44e8904ebfbc57ba0950c40b9d3a28507b553e4e-f17a73b3c0264c62dd6b5dae01ed621c051c3038
Loaded 19986 nodes in revision graph
Searching for test results:
 163314 pass 7ea428895af2840d85c524f0bd11a38aac308308 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163326 [host=himrod2]
 163328 [host=himrod2]
 163329 [host=himrod2]
 163330 [host=himrod2]
 163331 [host=himrod2]
 163333 [host=himrod2]
 163332 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163334 [host=himrod2]
 163335 pass 7ea428895af2840d85c524f0bd11a38aac308308 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163337 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163338 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 09e2cd69956fe529bfc3d53dae477b44eff217d1
 163336 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163339 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 c8f88810db2a25d6aacf65c1c60bc4f5d848a483
 163341 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163342 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 918b8842a852e0e7446286f546724b1c63c56c66
 163343 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163344 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 918b8842a852e0e7446286f546724b1c63c56c66
 163346 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163347 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 918b8842a852e0e7446286f546724b1c63c56c66
Searching for interesting versions
 Result found: flight 163314 (pass), for basis pass
 For basis failure, parent search stopping at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a, results HASH(0x55bb9f7ae1a0) HASH(0x55bb9f7af0c8) HASH(0x55bb9f7b08d0) For basis failure, parent search stopping at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 09e2cd69956fe529bfc3d53dae477b44eff217d1, results HASH(0x55bb9f7abd98) Result found: flight 163332 (fail), for basis failure (at ancestor ~13)
 Repro found: flight 163335 (pass), for basis pass
 Repro found: flight 163336 (fail), for basis failure
 0 revisions at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
No revisions left to test, checking graph state.
 Result found: flight 163341 (pass), for last pass
 Result found: flight 163342 (fail), for first failure
 Repro found: flight 163343 (pass), for last pass
 Repro found: flight 163344 (fail), for first failure
 Repro found: flight 163346 (pass), for last pass
 Repro found: flight 163347 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  918b8842a852e0e7446286f546724b1c63c56c66
  Bug not present: 4473f3601098a2c3cf5ab89d5a29504772985e3a
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163347/


  commit 918b8842a852e0e7446286f546724b1c63c56c66
  Author: Michal Orzel <michal.orzel@arm.com>
  Date:   Mon Jul 5 08:39:52 2021 +0200
  
      arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
      
      AArch64 registers are 64bit whereas AArch32 registers
      are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
      we should get rid of helpers READ/WRITE_SYSREG32
      in favour of using READ/WRITE_SYSREG.
      We should also use register_t type when reading sysregs
      which can correspond to uint64_t or uint32_t.
      Even though many AArch64 registers have upper 32bit reserved
      it does not mean that they can't be widen in the future.
      
      Modify type of hsr, cpsr, spsr_el1 to uint64_t.
      Previously we relied on the padding after spsr_el1.
      As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
      No need to modify the assembly code because the accesses were based on 64bit
      registers as there was a 32bit padding after spsr_el1.
      
      Remove 32bit padding in cpu_user_regs before spsr_fiq
      as it is no longer needed due to upper union being 64bit now.
      Add 64bit padding in cpu_user_regs before spsr_el1
      because the kernel frame should be 16-byte aligned.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
      Increment XEN_DOMCTL_INTERFACE_VERSION.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
      
      Signed-off-by: Michal Orzel <michal.orzel@arm.com>
      Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
      Reviewed-by: Julien Grall <jgrall@amazon.com>

Revision graph left in /home/logs/results/bisect/xen-unstable-smoke/build-amd64.xen-build.{dot,ps,png,html,svg}.
----------------------------------------
163347: tolerable ALL FAIL

flight 163347 xen-unstable-smoke real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163347/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 build-amd64                   6 xen-build               fail baseline untested


jobs:
 build-amd64                                                  fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 17:33:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 17:33:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151595.280162 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0owX-0002qn-Hx; Tue, 06 Jul 2021 17:33:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151595.280162; Tue, 06 Jul 2021 17:33:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0owX-0002qg-EZ; Tue, 06 Jul 2021 17:33:09 +0000
Received: by outflank-mailman (input) for mailman id 151595;
 Tue, 06 Jul 2021 17:33:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0owW-0002qW-UP; Tue, 06 Jul 2021 17:33:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0owW-0006kS-OI; Tue, 06 Jul 2021 17:33:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0owW-0000tV-Hr; Tue, 06 Jul 2021 17:33:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0owW-0004EG-HO; Tue, 06 Jul 2021 17:33:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=IU5syJRwqIdtqRO0mqb74vFD8T9ZqsHVg6zMB90nqJg=; b=EdPlCZOqeuryauwHybsHXZ/qIh
	ptJGmWoPn3CIdGJwtGAouGVDHUR5SG+YjTR+yEWKRLv3Q1NZQmCKJ1kRkH/Y83Loa9yacEFYJ3yxa
	87h9R17L3DyXFZLZTM49cVtUEP8z0MikVYYHRsUd+c1Rbm2n+MpG9HSk5gXz4B/31iz0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163345-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163345: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 17:33:08 +0000

flight 163345 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163345/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 18:12:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 18:12:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151612.280193 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0pYk-000701-Vp; Tue, 06 Jul 2021 18:12:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151612.280193; Tue, 06 Jul 2021 18:12:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0pYk-0006zu-Sj; Tue, 06 Jul 2021 18:12:38 +0000
Received: by outflank-mailman (input) for mailman id 151612;
 Tue, 06 Jul 2021 18:12:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0pYi-0006zU-VH; Tue, 06 Jul 2021 18:12:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0pYi-0007Te-P7; Tue, 06 Jul 2021 18:12:36 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0pYi-0001yR-IT; Tue, 06 Jul 2021 18:12:36 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0pYi-0003OI-Hz; Tue, 06 Jul 2021 18:12:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=igHpQZW+jx2gUhG1q4RwjdweC6jHZZ8qQeEgr9c2DlU=; b=sumxOosI9oXO16DKlpaSKoCV6m
	uku1eqgVKGI+NqhqItDgs+NrsQXtBDFisRHOZJIS/burmvH2SJrnSz1O8f0+gTpGnKQLMBvkK80pL
	qcJUqA0pjSucyuy/pLYYEzjOw9zv5obSfBMf7FkdPwiCMr2/bzzxZcQVkMQlcpli1lkU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163351-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163351: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 18:12:36 +0000

flight 163351 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163351/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 18:43:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 18:43:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151627.280220 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0q2k-0001kR-Kk; Tue, 06 Jul 2021 18:43:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151627.280220; Tue, 06 Jul 2021 18:43:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0q2k-0001kK-H0; Tue, 06 Jul 2021 18:43:38 +0000
Received: by outflank-mailman (input) for mailman id 151627;
 Tue, 06 Jul 2021 18:43:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8YKr=L6=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m0q2j-0001kE-KT
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 18:43:37 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0be4a2d3-a1ea-40b5-aab7-456e2dbad122;
 Tue, 06 Jul 2021 18:43:36 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0q2W-0000ek-Kp; Tue, 06 Jul 2021 20:43:24 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0q2V-00021e-8f; Tue, 06 Jul 2021 20:43:23 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0q2V-0004QV-6e; Tue, 06 Jul 2021 20:43:23 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0be4a2d3-a1ea-40b5-aab7-456e2dbad122
Date: Tue, 6 Jul 2021 20:43:23 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: nvdimm@lists.linux.dev, linux-hyperv@vger.kernel.org,
	kvm@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-fpga@vger.kernel.org, linux-pci@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-cxl@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, target-devel@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	linux1394-devel@lists.sourceforge.net, linux-scsi@vger.kernel.org,
	linux-staging@lists.linux.dev, linux-acpi@vger.kernel.org,
	industrypack-devel@lists.sourceforge.net,
	linux-input@vger.kernel.org, xen-devel@lists.xenproject.org,
	linux-sunxi@lists.linux.dev, linux-media@vger.kernel.org,
	linux-arm-msm@vger.kernel.org, linux-serial@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, greybus-dev@lists.linaro.org,
	virtualization@lists.linux-foundation.org,
	linux-arm-kernel@lists.infradead.org, linux-parisc@vger.kernel.org,
	netdev@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-spi@vger.kernel.org, kernel@pengutronix.de,
	dmaengine@vger.kernel.org, linux-ntb@googlegroups.com,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <20210706184323.fudcbsiu4i34dojs@pengutronix.de>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
 <YOSb1+yeVeLxiSRc@yoga>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="2fjaqpmq47gf4tbn"
Content-Disposition: inline
In-Reply-To: <YOSb1+yeVeLxiSRc@yoga>
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org


--2fjaqpmq47gf4tbn
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello Bjorn,

On Tue, Jul 06, 2021 at 01:08:18PM -0500, Bjorn Andersson wrote:
> On Tue 06 Jul 10:48 CDT 2021, Uwe Kleine-K?nig wrote:
> > diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> > index c1404d3dae2c..7f6fac618ab2 100644
> > --- a/drivers/rpmsg/rpmsg_core.c
> > +++ b/drivers/rpmsg/rpmsg_core.c
> > @@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
> >  	return err;
> >  }
> > =20
> > -static int rpmsg_dev_remove(struct device *dev)
> > +static void rpmsg_dev_remove(struct device *dev)
> >  {
> >  	struct rpmsg_device *rpdev =3D to_rpmsg_device(dev);
> >  	struct rpmsg_driver *rpdrv =3D to_rpmsg_driver(rpdev->dev.driver);
> > @@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
> > =20
> >  	if (rpdev->ept)
> >  		rpmsg_destroy_ept(rpdev->ept);
> > -
> > -	return err;
>=20
> This leaves err assigned but never used, but I don't mind following up
> with a patch cleaning that up after this has landed.

Ah, good catch. If I send out a v3 I will fold the following into this
patch:

diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index 7f6fac618ab2..9151836190ce 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -534,10 +534,9 @@ static void rpmsg_dev_remove(struct device *dev)
 {
 	struct rpmsg_device *rpdev =3D to_rpmsg_device(dev);
 	struct rpmsg_driver *rpdrv =3D to_rpmsg_driver(rpdev->dev.driver);
-	int err =3D 0;
=20
 	if (rpdev->ops->announce_destroy)
-		err =3D rpdev->ops->announce_destroy(rpdev);
+		rpdev->ops->announce_destroy(rpdev);
=20
 	if (rpdrv->remove)
 		rpdrv->remove(rpdev);

Maybe .announce_destroy() should then be changed to return void, too?
Something like:

diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h
index a76c344253bf..d5204756714c 100644
--- a/drivers/rpmsg/rpmsg_internal.h
+++ b/drivers/rpmsg/rpmsg_internal.h
@@ -40,7 +40,7 @@ struct rpmsg_device_ops {
 					    struct rpmsg_channel_info chinfo);
=20
 	int (*announce_create)(struct rpmsg_device *ept);
-	int (*announce_destroy)(struct rpmsg_device *ept);
+	void (*announce_destroy)(struct rpmsg_device *ept);
 };
=20
 /**
diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_=
bus.c
index 8e49a3bacfc7..4e05994634f8 100644
--- a/drivers/rpmsg/virtio_rpmsg_bus.c
+++ b/drivers/rpmsg/virtio_rpmsg_bus.c
@@ -340,7 +340,7 @@ static int virtio_rpmsg_announce_create(struct rpmsg_de=
vice *rpdev)
 	return err;
 }
=20
-static int virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev)
+static void virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev)
 {
 	struct virtio_rpmsg_channel *vch =3D to_virtio_rpmsg_channel(rpdev);
 	struct virtproc_info *vrp =3D vch->vrp;
@@ -360,8 +360,6 @@ static int virtio_rpmsg_announce_destroy(struct rpmsg_d=
evice *rpdev)
 		if (err)
 			dev_err(dev, "failed to announce service %d\n", err);
 	}
-
-	return err;
 }
=20
 static const struct rpmsg_device_ops virtio_rpmsg_ops =3D {

though it's not obvious for me that the last hunk is sensible. (OTOH the
return code is ignored anyhow as rpmsg_dev_remove() is the only caller.

Best regards and thanks
Uwe

--=20
Pengutronix e.K.                           | Uwe Kleine-K=F6nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

--2fjaqpmq47gf4tbn
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmDkpEcACgkQwfwUeK3K
7Ak4/gf+JPjwmTdMOBhuMe8ecxXY1LASOPn6raBvtbwdOTQTpuggYaNCNlkaVJAE
HyLf68h68hyvV9vpIoID8AOmf9uXGwFBXlOzR/nHgHqauU/8HnbE2GH+wOywoCi8
Tkzj2jT35NSYD0Cmtorpd0wmKVjEQuPqiv8px5gEqAMvtwp93P9dQwyKm7IPhUSf
Ly8NwR3EsI/ng6nNulL+Z6d0tGg+RRvUj5mWp8YcIYePISvHdibi/lFHA6vTaWE7
ZqLwQsajLZaY5r33EPGYZOxBPk809iKwh4Q5mfww37TTXySNeps2tFT7S6r4d6To
OAUYwloDQSOqtVvuLc4PfxSTkToueQ==
=o1F8
-----END PGP SIGNATURE-----

--2fjaqpmq47gf4tbn--


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 19:14:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 19:14:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151637.280236 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0qWW-0004tz-6m; Tue, 06 Jul 2021 19:14:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151637.280236; Tue, 06 Jul 2021 19:14:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0qWW-0004ts-3s; Tue, 06 Jul 2021 19:14:24 +0000
Received: by outflank-mailman (input) for mailman id 151637;
 Tue, 06 Jul 2021 19:14:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=EKR2=L6=kernel.org=nathan@srs-us1.protection.inumbo.net>)
 id 1m0qWV-0004tm-FA
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 19:14:23 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3e1b954f-7424-4a0b-9b9a-e8ff08f641d0;
 Tue, 06 Jul 2021 19:14:22 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0B79260FEE;
 Tue,  6 Jul 2021 19:14:17 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3e1b954f-7424-4a0b-9b9a-e8ff08f641d0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625598861;
	bh=QlBKfCu996qP5JenUg1J68Cu2xyoSjshlo1u0WQ5l4Q=;
	h=Subject:To:Cc:References:From:Date:In-Reply-To:From;
	b=TU5TtD5UIfY0r+aXmb18IJawcVy9481TeWFSQOFYJdeGslFF5REp8bH73BojUcAOS
	 WlHc4LPuYi7chvxRgoEbHiUmVBJCPC7C5tF6pdGMxY91712ZIHIFWEljUXECaizwR+
	 koaeta5RgZiHx0Sss+0r3QJAYmQBlDDtVdoZp0FeXJcOVflgaIqK1qCkplXl/uW0BS
	 LCRRvULfQJWTmzcODhL8YcjXYnyWkDWBHwYJN74M0CyF9fd7kjSS4G13Z+1zJxm7S+
	 SxqHpxzj/Vqq6tNxTCJBSiyuyZK+lbgOtwblLLeGRCpsIt4FpxqITodwMfqKGzStS2
	 aVPLPXphc2cDw==
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
To: Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>
Cc: Christoph Hellwig <hch@lst.de>, heikki.krogerus@linux.intel.com,
 thomas.hellstrom@linux.intel.com, peterz@infradead.org,
 benh@kernel.crashing.org, joonas.lahtinen@linux.intel.com,
 dri-devel@lists.freedesktop.org, chris@chris-wilson.co.uk,
 grant.likely@arm.com, paulus@samba.org, Frank Rowand
 <frowand.list@gmail.com>, mingo@kernel.org,
 Stefano Stabellini <sstabellini@kernel.org>,
 Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
 "Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
 Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
 linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
 Thierry Reding <treding@nvidia.com>, intel-gfx@lists.freedesktop.org,
 matthew.auld@intel.com, linux-devicetree <devicetree@vger.kernel.org>,
 Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 maarten.lankhorst@linux.intel.com, airlied@linux.ie,
 Dan Williams <dan.j.williams@intel.com>, linuxppc-dev@lists.ozlabs.org,
 jani.nikula@linux.intel.com, Rob Herring <robh+dt@kernel.org>,
 rodrigo.vivi@intel.com, Bjorn Helgaas <bhelgaas@google.com>,
 Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
 Andy Shevchenko <andriy.shevchenko@linux.intel.com>, jgross@suse.com,
 Nicolas Boichat <drinkcat@chromium.org>, Greg KH
 <gregkh@linuxfoundation.org>, Randy Dunlap <rdunlap@infradead.org>,
 Qian Cai <quic_qiancai@quicinc.com>, lkml <linux-kernel@vger.kernel.org>,
 "list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
 Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
 Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
References: <ea28db1f-846e-4f0a-4f13-beb67e66bbca@kernel.org>
 <20210702135856.GB11132@willie-the-truck>
 <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck> <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <bb32d5a6-2b34-4524-e171-3e9f5f4d3a94@arm.com>
 <20210706170657.GD20750@willie-the-truck>
From: Nathan Chancellor <nathan@kernel.org>
Message-ID: <e1c026c6-22c7-8979-4941-de9cfab3863a@kernel.org>
Date: Tue, 6 Jul 2021 12:14:16 -0700
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706170657.GD20750@willie-the-truck>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi Will and Robin,

On 7/6/2021 10:06 AM, Will Deacon wrote:
> On Tue, Jul 06, 2021 at 04:39:11PM +0100, Robin Murphy wrote:
>> On 2021-07-06 15:05, Christoph Hellwig wrote:
>>> On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
>>>> FWIW I was pondering the question of whether to do something along those
>>>> lines or just scrap the default assignment entirely, so since I hadn't got
>>>> round to saying that I've gone ahead and hacked up the alternative
>>>> (similarly untested) for comparison :)
>>>>
>>>> TBH I'm still not sure which one I prefer...
>>>
>>> Claire did implement something like your suggestion originally, but
>>> I don't really like it as it doesn't scale for adding multiple global
>>> pools, e.g. for the 64-bit addressable one for the various encrypted
>>> secure guest schemes.
>>
>> Ah yes, that had slipped my mind, and it's a fair point indeed. Since we're
>> not concerned with a minimal fix for backports anyway I'm more than happy to
>> focus on Will's approach. Another thing is that that looks to take us a
>> quiet step closer to the possibility of dynamically resizing a SWIOTLB pool,
>> which is something that some of the hypervisor protection schemes looking to
>> build on top of this series may want to explore at some point.
> 
> Ok, I'll split that nasty diff I posted up into a reviewable series and we
> can take it from there.

For what it's worth, I attempted to boot Will's diff on top of Konrad's 
devel/for-linus-5.14 and it did not work; in fact, I got no output on my 
monitor period, even with earlyprintk=, and I do not think this machine 
has a serial console.

Robin's fix does work, it survived ten reboots with no issues getting to 
X and I do not see the KASAN and slub debug messages anymore but I 
understand that this is not the preferred solution it seems (although 
Konrad did want to know if it works).

I am happy to test any further patches or follow ups as needed, just 
keep me on CC.

Cheers,
Nathan


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 19:28:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 19:28:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151650.280254 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0qk6-0006PJ-Ht; Tue, 06 Jul 2021 19:28:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151650.280254; Tue, 06 Jul 2021 19:28:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0qk6-0006PC-DG; Tue, 06 Jul 2021 19:28:26 +0000
Received: by outflank-mailman (input) for mailman id 151650;
 Tue, 06 Jul 2021 19:28:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qk5-0006P2-2d; Tue, 06 Jul 2021 19:28:25 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qk4-0000I7-S0; Tue, 06 Jul 2021 19:28:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qk4-0003zx-M1; Tue, 06 Jul 2021 19:28:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qk4-0005fQ-LY; Tue, 06 Jul 2021 19:28:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=g0xnEDW3VUCxMgH9ZEL4aCPpcZBWZvVC6vmHILB7/xU=; b=TX9LkYDlmHZAns2z5LKk2dlkOa
	ar55ucKhXcWSRXm9kxN0pc0782HD7h+Wah/f9m+T4kIwzbcd1osXFWbm7wflFToI8JrDnrQ5Ppmow
	bi7NlsjYiqXQ4NOrSaFQ3llRqI6DEV/8YyBsoDr3c644Guk830xJgYBiqvtLMjDNWUq8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163357-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163357: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 19:28:24 +0000

flight 163357 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163357/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 19:41:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 19:41:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151664.280268 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0qwM-0000Ds-Qc; Tue, 06 Jul 2021 19:41:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151664.280268; Tue, 06 Jul 2021 19:41:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0qwM-0000Dj-NQ; Tue, 06 Jul 2021 19:41:06 +0000
Received: by outflank-mailman (input) for mailman id 151664;
 Tue, 06 Jul 2021 19:41:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qwL-0000DY-0X; Tue, 06 Jul 2021 19:41:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qwK-0000Tx-Ia; Tue, 06 Jul 2021 19:41:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qwK-0004Kx-BG; Tue, 06 Jul 2021 19:41:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0qwK-0007W2-Am; Tue, 06 Jul 2021 19:41:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=z5z83mP5Pshely2wdSA+pBWY/GWVTc1fw46ziSDHcNQ=; b=P0MfiQVqqoBnKSu0nf9efFOkSg
	cUMBYLPQwIsWX5ZYG7bGqZIuYOdiB5vHI+mEqp0g1vnLhuf642uHSHodME2ujE0zJdeIH2OU8MRkq
	4Os2vaEcAH/IUpmiuskWy4NDGTshgcO3+aONJ+tOhtaOWDfsq0ehzhAsJ080hL2qg5+E=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163325-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163325: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=79160a603bdb51916226caf4a6616cc4e1c58a58
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 19:41:04 +0000

flight 163325 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163325/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                79160a603bdb51916226caf4a6616cc4e1c58a58
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  339 days
Failing since        152366  2020-08-01 20:49:34 Z  338 days  578 attempts
Testing same since   163325  2021-07-06 07:14:36 Z    0 days    1 attempts

------------------------------------------------------------
6610 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1927992 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 19:50:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 19:50:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151676.280283 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0r5R-0001ft-L5; Tue, 06 Jul 2021 19:50:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151676.280283; Tue, 06 Jul 2021 19:50:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0r5R-0001fl-FR; Tue, 06 Jul 2021 19:50:29 +0000
Received: by outflank-mailman (input) for mailman id 151676;
 Tue, 06 Jul 2021 19:50:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0r5R-0001fc-4U; Tue, 06 Jul 2021 19:50:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0r5Q-0000dX-Sm; Tue, 06 Jul 2021 19:50:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0r5Q-0004Zp-LB; Tue, 06 Jul 2021 19:50:28 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0r5Q-0000wc-Kb; Tue, 06 Jul 2021 19:50:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=H/2y88YhTp2KPruKcwWtY93uOyrDrRN8GghP+tTRaIw=; b=61jJUprYJ92fFKUThqej91h61S
	sp+a0y/XLnpWWpkQLW6V64JILSF/rsIr+MHnaGD3Mns3SQ2v+3ozXxXqAvvEuLzf9z7fDtwovU8sG
	fIJrVEoCszvI4QRb2V17ZiDZbES4K1fe70ASUSLujOWGC4Y5wBDndqUtep0p/5g9BSig=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163323-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163323: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=44e8904ebfbc57ba0950c40b9d3a28507b553e4e
X-Osstest-Versions-That:
    xen=383b41974d5543b62f3181d216070fe3691fb130
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 19:50:28 +0000

flight 163323 xen-unstable real [real]
flight 163352 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163323/
http://logs.test-lab.xenproject.org/osstest/logs/163352/

Failures :-/ but no regressions.

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

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

version targeted for testing:
 xen                  44e8904ebfbc57ba0950c40b9d3a28507b553e4e
baseline version:
 xen                  383b41974d5543b62f3181d216070fe3691fb130

Last test of basis   163313  2021-07-05 14:38:57 Z    1 days
Testing same since   163323  2021-07-06 04:40:42 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Tim Deegan <tim@xen.org>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   383b41974d..44e8904ebf  44e8904ebfbc57ba0950c40b9d3a28507b553e4e -> master


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 20:12:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 20:12:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151701.280320 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0rQr-0004KG-K7; Tue, 06 Jul 2021 20:12:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151701.280320; Tue, 06 Jul 2021 20:12:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0rQr-0004K9-Fk; Tue, 06 Jul 2021 20:12:37 +0000
Received: by outflank-mailman (input) for mailman id 151701;
 Tue, 06 Jul 2021 20:12:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rQq-0004Jz-0g; Tue, 06 Jul 2021 20:12:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rQp-00015A-Q3; Tue, 06 Jul 2021 20:12:35 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rQp-000563-Ih; Tue, 06 Jul 2021 20:12:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rQp-00022H-IE; Tue, 06 Jul 2021 20:12:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jy59JiWVsu61WyfvUerDRjvFUMtA2W7YMYh4c0YcgI8=; b=lQzGl9uTo3iVy9QQslm6BLnB19
	ZSjvOmiTGuzpT5muxccZ+TJRV8CteBsyBcfto+zfuXlVCTdfC9BkW43DQW6D9HgV40rayol/X+x8R
	Y92P3OJjnFnRRk7yDBWKlo8HR5zufuZmOavHs3RAqd0x3HjDYpc/fB58kkhReAFD5e+U=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163361-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163361: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 20:12:35 +0000

flight 163361 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163361/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 20:34:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 20:34:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151718.280340 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0rlx-0006eZ-DA; Tue, 06 Jul 2021 20:34:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151718.280340; Tue, 06 Jul 2021 20:34:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0rlx-0006eS-A5; Tue, 06 Jul 2021 20:34:25 +0000
Received: by outflank-mailman (input) for mailman id 151718;
 Tue, 06 Jul 2021 20:34:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rlw-0006ds-9E; Tue, 06 Jul 2021 20:34:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rlw-0001Uv-1X; Tue, 06 Jul 2021 20:34:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rlv-0005cI-Qj; Tue, 06 Jul 2021 20:34:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0rlv-0002MM-QC; Tue, 06 Jul 2021 20:34:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=uLkAZxte3POwa/DN8/CFOFu23u2nKz73HTPYNC3vD6g=; b=W3lV7k+BJc7xCkGnBLsiV9/+Bo
	DEDO3q+6L5MSKfbott1Bg25UBpll/Fj+V+LnujaFs1KrIspyTdi0EHmpvgH5cBMktKVz/j5isJT8z
	Qbgz01Q7ed9m1/dbNxEy8dA8ZZJY6lS4dHazQ63S20NBrw0TfH/vCe1OaDHOhLyP/Lcs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [xen-unstable-smoke bisection] complete build-arm64-xsm
Message-Id: <E1m0rlv-0002MM-QC@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 20:34:23 +0000

branch xen-unstable-smoke
xenbranch xen-unstable-smoke
job build-arm64-xsm
testid xen-build

Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  918b8842a852e0e7446286f546724b1c63c56c66
  Bug not present: 4473f3601098a2c3cf5ab89d5a29504772985e3a
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163364/


  commit 918b8842a852e0e7446286f546724b1c63c56c66
  Author: Michal Orzel <michal.orzel@arm.com>
  Date:   Mon Jul 5 08:39:52 2021 +0200
  
      arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
      
      AArch64 registers are 64bit whereas AArch32 registers
      are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
      we should get rid of helpers READ/WRITE_SYSREG32
      in favour of using READ/WRITE_SYSREG.
      We should also use register_t type when reading sysregs
      which can correspond to uint64_t or uint32_t.
      Even though many AArch64 registers have upper 32bit reserved
      it does not mean that they can't be widen in the future.
      
      Modify type of hsr, cpsr, spsr_el1 to uint64_t.
      Previously we relied on the padding after spsr_el1.
      As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
      No need to modify the assembly code because the accesses were based on 64bit
      registers as there was a 32bit padding after spsr_el1.
      
      Remove 32bit padding in cpu_user_regs before spsr_fiq
      as it is no longer needed due to upper union being 64bit now.
      Add 64bit padding in cpu_user_regs before spsr_el1
      because the kernel frame should be 16-byte aligned.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
      Increment XEN_DOMCTL_INTERFACE_VERSION.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
      
      Signed-off-by: Michal Orzel <michal.orzel@arm.com>
      Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
      Reviewed-by: Julien Grall <jgrall@amazon.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/xen-unstable-smoke/build-arm64-xsm.xen-build.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/xen-unstable-smoke/build-arm64-xsm.xen-build --summary-out=tmp/163364.bisection-summary --basis-template=163326 --blessings=real,real-bisect,real-retry xen-unstable-smoke build-arm64-xsm xen-build
Searching for failure / basis pass:
 163361 fail [host=rochester0] / 163326 [host=laxton0] 163314 [host=laxton0] 163310 [host=laxton0] 163230 [host=laxton0] 163225 [host=laxton0] 163183 [host=laxton1] 163182 ok.
Failure / basis pass flights: 163361 / 163182
Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git
Latest 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
Basis pass 7ea428895af2840d85c524f0bd11a38aac308308 f8582da0417660269bec69e399f8667f761e886b
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/qemu-xen.git#7ea428895af2840d85c524f0bd11a38aac308308-136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 git://xenbits.xen.org/xen.git#f8582da0417660269bec69e399f8667f761e886b-f17a73b3c0264c62dd6b5dae01ed621c051c3038
Loaded 19968 nodes in revision graph
Searching for test results:
 163182 pass 7ea428895af2840d85c524f0bd11a38aac308308 f8582da0417660269bec69e399f8667f761e886b
 163183 [host=laxton1]
 163225 [host=laxton0]
 163230 [host=laxton0]
 163310 [host=laxton0]
 163314 [host=laxton0]
 163326 [host=laxton0]
 163328 [host=laxton0]
 163332 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163336 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163345 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163348 pass 7ea428895af2840d85c524f0bd11a38aac308308 f8582da0417660269bec69e399f8667f761e886b
 163349 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163350 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 74d044d51b19bb697eac5c3deafa140f6afafec8
 163351 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163353 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 09e2cd69956fe529bfc3d53dae477b44eff217d1
 163354 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 c8f88810db2a25d6aacf65c1c60bc4f5d848a483
 163355 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163356 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 918b8842a852e0e7446286f546724b1c63c56c66
 163357 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163358 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163359 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 918b8842a852e0e7446286f546724b1c63c56c66
 163361 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163360 pass 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163364 fail 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 918b8842a852e0e7446286f546724b1c63c56c66
Searching for interesting versions
 Result found: flight 163182 (pass), for basis pass
 For basis failure, parent search stopping at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a, results HASH(0x5634f81fb840) HASH(0x5634f81f9378) HASH(0x5634f6c65018) For basis failure, parent search stopping at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 09e2cd69956fe529bfc3d53dae477b44eff217d1, results HASH(0x5634f81f9918) For basis failure, parent search stopping at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 74d044d51b19bb697eac5c3deafa140f6afafec8, results HASH(0x\
 5634f81f5780) Result found: flight 163332 (fail), for basis failure (at ancestor ~18)
 Repro found: flight 163348 (pass), for basis pass
 Repro found: flight 163349 (fail), for basis failure
 0 revisions at 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 4473f3601098a2c3cf5ab89d5a29504772985e3a
No revisions left to test, checking graph state.
 Result found: flight 163355 (pass), for last pass
 Result found: flight 163356 (fail), for first failure
 Repro found: flight 163358 (pass), for last pass
 Repro found: flight 163359 (fail), for first failure
 Repro found: flight 163360 (pass), for last pass
 Repro found: flight 163364 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  918b8842a852e0e7446286f546724b1c63c56c66
  Bug not present: 4473f3601098a2c3cf5ab89d5a29504772985e3a
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163364/


  commit 918b8842a852e0e7446286f546724b1c63c56c66
  Author: Michal Orzel <michal.orzel@arm.com>
  Date:   Mon Jul 5 08:39:52 2021 +0200
  
      arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
      
      AArch64 registers are 64bit whereas AArch32 registers
      are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
      we should get rid of helpers READ/WRITE_SYSREG32
      in favour of using READ/WRITE_SYSREG.
      We should also use register_t type when reading sysregs
      which can correspond to uint64_t or uint32_t.
      Even though many AArch64 registers have upper 32bit reserved
      it does not mean that they can't be widen in the future.
      
      Modify type of hsr, cpsr, spsr_el1 to uint64_t.
      Previously we relied on the padding after spsr_el1.
      As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
      No need to modify the assembly code because the accesses were based on 64bit
      registers as there was a 32bit padding after spsr_el1.
      
      Remove 32bit padding in cpu_user_regs before spsr_fiq
      as it is no longer needed due to upper union being 64bit now.
      Add 64bit padding in cpu_user_regs before spsr_el1
      because the kernel frame should be 16-byte aligned.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
      Increment XEN_DOMCTL_INTERFACE_VERSION.
      
      Change type of cpsr to uint64_t in the public outside interface
      "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
      
      Signed-off-by: Michal Orzel <michal.orzel@arm.com>
      Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
      Reviewed-by: Julien Grall <jgrall@amazon.com>

Revision graph left in /home/logs/results/bisect/xen-unstable-smoke/build-arm64-xsm.xen-build.{dot,ps,png,html,svg}.
----------------------------------------
163364: tolerable ALL FAIL

flight 163364 xen-unstable-smoke real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163364/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 build-arm64-xsm               6 xen-build               fail baseline untested


jobs:
 build-arm64-xsm                                              fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Tue Jul 06 20:53:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 20:53:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151734.280357 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0s4P-0000Wy-4M; Tue, 06 Jul 2021 20:53:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151734.280357; Tue, 06 Jul 2021 20:53:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0s4P-0000Wr-1M; Tue, 06 Jul 2021 20:53:29 +0000
Received: by outflank-mailman (input) for mailman id 151734;
 Tue, 06 Jul 2021 20:53:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0s4N-0000Wh-4Z; Tue, 06 Jul 2021 20:53:27 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0s4M-0001nx-TA; Tue, 06 Jul 2021 20:53:26 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0s4M-0006OK-MN; Tue, 06 Jul 2021 20:53:26 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0s4M-00088r-LV; Tue, 06 Jul 2021 20:53:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=kpCZNvzXhwf3cvXf1KXp8AKzlMKv4GQxzPyUwpH2awQ=; b=6CrFRa1sOiiVFdTs/fyBty0zYD
	dtxXsgHhGT/rsOgn5CTkoJN/eaumF/MA7T0l/Fxy2/CM3alNThk3IxEEQPaJwRoL72RjpHdO+quKJ
	nGqZAZdKX0mHPLIEOOK7F4x++A7tYfAmVyMVKov22J9ClbUb/xNHk05FAHI2BAYOyICk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163340-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163340: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=0a6b303dcedb7af238ad485d545802befb797b3a
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 20:53:26 +0000

flight 163340 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163340/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 0a6b303dcedb7af238ad485d545802befb797b3a
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   32 days
Failing since        162368  2021-06-04 15:42:59 Z   32 days   91 attempts
Testing same since   163340  2021-07-06 15:40:15 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3335 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 21:42:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 21:42:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151748.280371 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0spv-0005KX-Vy; Tue, 06 Jul 2021 21:42:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151748.280371; Tue, 06 Jul 2021 21:42:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0spv-0005KQ-Sr; Tue, 06 Jul 2021 21:42:35 +0000
Received: by outflank-mailman (input) for mailman id 151748;
 Tue, 06 Jul 2021 21:42:35 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0spv-0005KG-6m; Tue, 06 Jul 2021 21:42:35 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0spu-0002ar-UZ; Tue, 06 Jul 2021 21:42:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0spu-00005J-IX; Tue, 06 Jul 2021 21:42:34 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0spu-0007qJ-I4; Tue, 06 Jul 2021 21:42:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=d6Ibqs1tzxV/ZsLxIRP/cvTZy5m6qN2An2Ue/H40nJE=; b=GraTs43yj72PWTSylTTtniNWL9
	m7iZVzHCdVh6w4Rx+3vaeOpoRlHjEis1/rBdCJW5u90fpOFx7xcTa+PP4M5Kmlr1wij83ifp4heno
	WAnQ//OgXILzPs3JQpsoSBZQgNuD11F6CEcPMPmmkse/UzrmK6N+6/PUpTW6+XZ2JHCw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163327-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163327: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9aef0954195cc592e86846dbbe7f3c2c5603690a
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 21:42:34 +0000

flight 163327 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163327/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9aef0954195cc592e86846dbbe7f3c2c5603690a
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    0 days
Testing same since   163327  2021-07-06 12:39:04 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  David Edmondson <david.edmondson@oracle.com>
  John Arbuckle <programmingkidx@gmail.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Thomas Huth <thuth@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 553 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 06 23:07:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 06 Jul 2021 23:07:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151765.280393 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0uA5-0004NM-FC; Tue, 06 Jul 2021 23:07:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151765.280393; Tue, 06 Jul 2021 23:07:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0uA5-0004NF-CH; Tue, 06 Jul 2021 23:07:29 +0000
Received: by outflank-mailman (input) for mailman id 151765;
 Tue, 06 Jul 2021 23:07:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0uA3-0004N5-Ey; Tue, 06 Jul 2021 23:07:27 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0uA3-00041v-96; Tue, 06 Jul 2021 23:07:27 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0uA3-0003l9-1a; Tue, 06 Jul 2021 23:07:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0uA3-0005dM-18; Tue, 06 Jul 2021 23:07:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=b9KXAOtw3/ZrXSN1uNoqhIvOqXmgVDDqARC36KokyUM=; b=lpE1ZFGGU4GbXnbDL0Dej6j8Hs
	TbxWJtcLFJU8VoT9DHCwCGXCF5KGAYqPTdh8xgL1oJhvPXVleXwNMm1ilFMoZZAdGLqHenJ+pihJ3
	s/+3MuYM0xsQh44Z/37nQHXvZuBFsS2JOBnY2Vc1IpMcYfYSHb2JHBnHH0HAQDK6lLbE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163366-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163366: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 06 Jul 2021 23:07:27 +0000

flight 163366 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163366/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    8 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 00:49:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 00:49:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151777.280420 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0vkg-0005WF-Sl; Wed, 07 Jul 2021 00:49:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151777.280420; Wed, 07 Jul 2021 00:49:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0vkg-0005W8-PH; Wed, 07 Jul 2021 00:49:22 +0000
Received: by outflank-mailman (input) for mailman id 151777;
 Wed, 07 Jul 2021 00:49:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0vkf-0005Vs-EA; Wed, 07 Jul 2021 00:49:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0vkf-0006HB-8S; Wed, 07 Jul 2021 00:49:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0vkf-0000wQ-1S; Wed, 07 Jul 2021 00:49:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0vkf-00073R-0w; Wed, 07 Jul 2021 00:49:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Cb4c59ObcnL6kAswcYTU8d+2sYvq4XpsOXRazaPMTdA=; b=3Ujkrby/A4d69NujZXIZE5HrZV
	h09mvqi5KUzsQKn6yBh6snqWI6OsZ4tRoANAXCgA7x6HdBzoCXgVFP9819n/WAxGyyaSnFXXfl4Vw
	uhL7drMWom+KQUD1n8J9unBxuYRO4b50IedihhAxjd3s1cckK59xAPx3hEo2fyqsWV/I=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163372-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163372: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 00:49:21 +0000

flight 163372 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163372/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days    9 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 01:03:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 01:03:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151786.280439 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0vxp-0000NG-5p; Wed, 07 Jul 2021 01:02:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151786.280439; Wed, 07 Jul 2021 01:02:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0vxp-0000N9-2s; Wed, 07 Jul 2021 01:02:57 +0000
Received: by outflank-mailman (input) for mailman id 151786;
 Wed, 07 Jul 2021 01:02:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9NG9=L7=citrix.com=igor.druzhinin@srs-us1.protection.inumbo.net>)
 id 1m0vxn-0000N3-L7
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 01:02:55 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0f3ba340-debf-11eb-84d2-12813bfff9fa;
 Wed, 07 Jul 2021 01:02:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0f3ba340-debf-11eb-84d2-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625619774;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=svGxtjeWU2QEtWezfIyOjtpwm4dPoekGlQ1IL+Wj9bU=;
  b=BPii4c7hqGnV3j/NSCXXieZydnFNX130GIYvfarPVAwycXdd3sUBc4p9
   k5UNJdp9rHPmqQBWR2PsZ2vtW5DxTkjvDFNx2PQHuw6QaLY6ZBdT4/qCj
   IYNal86tKlIY44FB1lLRv/I5Gg3Lm7dJ7R9HFcsfYE7IfNp/IfkQ8GYvA
   E=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: tMcjHEATz6LTqHmgq2WktRSk6PUNfBONgubEEnisX/+O10CWhChYsR+KAYpYhUboQgQFU/KWhj
 hLS+fWbd1wcAV62jOpNB1vQ7BzNQo2wVH/a+3Ok4+rAfHCzdeQ0ONr428NAdTMytAYWP9DGBZt
 6KQmjeVczy4qRp+jiapcxILmHFwKbufxNjKT/OXfaq4f9YLNZapG9c5Xa2xGqVK2/qC7I9dTVr
 IFwWh6sG4Lb8uvFILNi+FqdsTn+eu4mVE17UhOoeZEDFrFGADZBm5vkN2+mJTm+uz4Yev50P9G
 I2s=
X-SBRS: 5.1
X-MesageID: 47700246
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:7QK7yqNrDgS9K8BcTtejsMiBIKoaSvp037Eqv3oedfU1SL3+qy
 nAppQmPHPP5Ar5O0tQ/exoWpPwIk80nKQdieJ6UItKNDOW3VdAR7sC0WKN+VLd8lXFh4xg6Z
 s=
X-IronPort-AV: E=Sophos;i="5.83,330,1616472000"; 
   d="scan'208";a="47700246"
From: Igor Druzhinin <igor.druzhinin@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: <iwj@xenproject.org>, <wl@xen.org>, <andrew.cooper3@citrix.com>,
	<george.dunlap@citrix.com>, <jbeulich@suse.com>, <julien@xen.org>,
	<sstabellini@kernel.org>, <jgross@suse.com>, <christian.lindig@citrix.com>,
	<dave@recoil.org>, Igor Druzhinin <igor.druzhinin@citrix.com>
Subject: [PATCH] tools/libxc: use uint32_t for pirq in xc_domain_irq_permission
Date: Wed, 7 Jul 2021 02:02:44 +0100
Message-ID: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
X-Mailer: git-send-email 2.7.4
MIME-Version: 1.0
Content-Type: text/plain

Current unit8_t for pirq argument in this interface is too restrictive
causing failures on modern hardware with lots of GSIs. That extends down to
XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
as well. Internal Xen structures appear to be fine. Existing users of
the interface in tree (libxl, ocaml and python bindings) are already using
int for pirq representation that should be wide enough.

Domctl interface version is needed to be bumped with this change but that
was already done by 918b8842a8 ("arm64: Change type of hsr, cpsr, spsr_el1
to uint64_t") in this release cycle.

Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
---
 tools/include/xenctrl.h             | 2 +-
 tools/libs/ctrl/xc_domain.c         | 2 +-
 tools/ocaml/libs/xc/xenctrl_stubs.c | 2 +-
 xen/include/public/domctl.h         | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h
index 2a7c836..8974747 100644
--- a/tools/include/xenctrl.h
+++ b/tools/include/xenctrl.h
@@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface *xch,
 
 int xc_domain_irq_permission(xc_interface *xch,
                              uint32_t domid,
-                             uint8_t pirq,
+                             uint32_t pirq,
                              uint8_t allow_access);
 
 int xc_domain_iomem_permission(xc_interface *xch,
diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c
index 7d11884..8e4ffd0 100644
--- a/tools/libs/ctrl/xc_domain.c
+++ b/tools/libs/ctrl/xc_domain.c
@@ -1384,7 +1384,7 @@ int xc_vcpu_setcontext(xc_interface *xch,
 
 int xc_domain_irq_permission(xc_interface *xch,
                              uint32_t domid,
-                             uint8_t pirq,
+                             uint32_t pirq,
                              uint8_t allow_access)
 {
     DECLARE_DOMCTL;
diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c
index 6e4bc56..e5837e6 100644
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -1077,7 +1077,7 @@ CAMLprim value stub_xc_domain_irq_permission(value xch, value domid,
 					     value pirq, value allow)
 {
 	CAMLparam4(xch, domid, pirq, allow);
-	uint8_t c_pirq;
+	uint32_t c_pirq;
 	uint8_t c_allow;
 	int ret;
 
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 4dbf107..277478e 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -441,7 +441,7 @@ struct xen_domctl_setdebugging {
 
 /* XEN_DOMCTL_irq_permission */
 struct xen_domctl_irq_permission {
-    uint8_t pirq;
+    uint32_t pirq;
     uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
 };
 
-- 
2.7.4



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 01:34:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 01:34:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151792.280451 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0wSM-0003Xn-Mj; Wed, 07 Jul 2021 01:34:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151792.280451; Wed, 07 Jul 2021 01:34:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0wSM-0003Xg-JB; Wed, 07 Jul 2021 01:34:30 +0000
Received: by outflank-mailman (input) for mailman id 151792;
 Wed, 07 Jul 2021 01:34:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Uasl=L7=intel.com=kevin.tian@srs-us1.protection.inumbo.net>)
 id 1m0wSK-0003Xa-Qh
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 01:34:29 +0000
Received: from mga12.intel.com (unknown [192.55.52.136])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9e3fc6a8-607e-42f8-9ca9-9a975ef7a415;
 Wed, 07 Jul 2021 01:34:21 +0000 (UTC)
Received: from orsmga003.jf.intel.com ([10.7.209.27])
 by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 06 Jul 2021 18:34:20 -0700
Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19])
 by orsmga003.jf.intel.com with ESMTP; 06 Jul 2021 18:34:20 -0700
Received: from orsmsx605.amr.corp.intel.com (10.22.229.18) by
 ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2242.10; Tue, 6 Jul 2021 18:34:19 -0700
Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by
 orsmsx605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4
 via Frontend Transport; Tue, 6 Jul 2021 18:34:19 -0700
Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.109)
 by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.1.2242.4; Tue, 6 Jul 2021 18:34:18 -0700
Received: from BN9PR11MB5433.namprd11.prod.outlook.com (2603:10b6:408:11e::13)
 by BN0PR11MB5710.namprd11.prod.outlook.com (2603:10b6:408:14a::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 01:34:15 +0000
Received: from BN9PR11MB5433.namprd11.prod.outlook.com
 ([fe80::fd4b:cdde:6790:134]) by BN9PR11MB5433.namprd11.prod.outlook.com
 ([fe80::fd4b:cdde:6790:134%8]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 01:34:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9e3fc6a8-607e-42f8-9ca9-9a975ef7a415
X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="188903698"
X-IronPort-AV: E=Sophos;i="5.83,330,1616482800"; 
   d="scan'208";a="188903698"
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.83,330,1616482800"; 
   d="scan'208";a="410659474"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NEZvDTtrYCX340c5Ag1z3ri0FKWbR73r/g1KWhV6fyu8Pgqw/sK8zGWFuswaUjO2/yqzGhFv80QVDhBOTUD3FQA2Ya+YVPG6GZUWhzxaOCTQ1n4PNxQVfdvIB7hFSH48fkbGNZ/9xR90uy3Pg/mM6WOP8LRJBZ2Ywm5LXJ1vnxSJ8UMt+I8UgDp5JL6spmA7LBKO9slyccFV6pWAQY6b1nQ0VuDcEBqmHzH8PW7MqGoww7sNlAcbsiXI3Pp3LBq0j5/6rtbx8jPhnFthXM1Q3meQ5C6AM9hSwgdTV11NbTK0SKUWpsKzVYvT/EL02PjqyIlSOzjOuhqoF1KINob0OA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M9MPSwGkMi9pgP23RKA/spVflhaYnXog1sW1ko4c04k=;
 b=R0O7Di6ZdLJBss+i+r1ARyNugNfTSeqCRmyA42X49fnqC5ekiEFGoJx5MFrXV1lcpWU80WPNc4tGFPchUdob4MjlI6sh1l9jUmj4ZNikKQL8jYFOXLsy4WwOwK6hXxxEd55OFHKiYVD4OqlJ8WKWLpa/zjhiHAoHdUn/w24jOFU6j7lDV3SoTyYb6myYctKQ1kSZmFu0mFPEKSbweeJjIbnmJb1DVZ+SWcPy1fOR3IG0KlYLmD321Glmj8JBz/T8wNR+ek4EYVXvWu+xXuDkV0GfK2HGmzjZtsqhE4nfRx3zKw87LzwbXaXix0ko9wsanBo7TNNgljsFf3BEdSrowg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
 dkim=pass header.d=intel.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com;
 s=selector2-intel-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M9MPSwGkMi9pgP23RKA/spVflhaYnXog1sW1ko4c04k=;
 b=L5uHNwNT9myP862Hr5iAaZ9OpfR5lXwPbkizzWJLJrcEesQoqKEWEeeATtX4sunSLO5gCkX36o3/sXUIZiK2vaMQuGKeySsfcBzp96YgMF4QcOAnYpzUgBatJiJ1S8XFvdVy92RBYshnsHH/pVhL3ZiEvUBO3a/asj0Y/Cl3lW8=
From: "Tian, Kevin" <kevin.tian@intel.com>
To: Jan Beulich <jbeulich@suse.com>, Paul Durrant <paul@xen.org>, "Cooper,
 Andrew" <andrew.cooper3@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Subject: RE: Ping: [PATCH v5] IOMMU: make DMA containment of quarantined
 devices optional
Thread-Topic: Ping: [PATCH v5] IOMMU: make DMA containment of quarantined
 devices optional
Thread-Index: AQHXUgfg4G9Z+vUxlUaT9NAUoPNp2as10RwAgAErGHA=
Date: Wed, 7 Jul 2021 01:34:14 +0000
Message-ID: <BN9PR11MB54337D419466D0DE95E83F8D8C1A9@BN9PR11MB5433.namprd11.prod.outlook.com>
References: <e1f30ef7-6631-609d-6948-e9b1f3fa3b37@suse.com>
 <54ef2e6e-b9d8-8fc8-897c-ca7c3fb8bc1d@suse.com>
In-Reply-To: <54ef2e6e-b9d8-8fc8-897c-ca7c3fb8bc1d@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
dlp-version: 11.5.1.3
dlp-product: dlpe-windows
dlp-reaction: no-action
authentication-results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=intel.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: f5b2cd03-8a20-4c29-9e2a-08d940e75496
x-ms-traffictypediagnostic: BN0PR11MB5710:
x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr
x-microsoft-antispam-prvs: <BN0PR11MB5710E67ED71C29AD30FA72448C1A9@BN0PR11MB5710.namprd11.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 0xnL2jl7onxxPCnRqUXJxGisxs4AX65RU1kLBW6W30+sLqKauwYxnmEmmI1l2NKpMAegEznv298RwgMldWUCjUzEhSitIPVO8rCURw71sevpWz3u87qY5KucG7uTLibgeLNCYM3wymtZ/Zh6Evr/f04ig10ajMEEsc7ykh/UD4TnKnB0SLVE2ojQoNywM1fd/TgHWiuXIiQtSB825tg8DaJD+1d70COQXuAZoHgNEkq6FvDeo480+A1CnfrLAE2yjTMKsFeuZNP0Pskielt9XDPxhJia2gMYNNecbEvuYqPVP7CLKSPfURxrfwmJ3DxKdmdSftXo5FroZlPPYa8hdE/etxTCXe1hOgaa4l/VrBCNHfw/W2DLm48ZiKqFE1SxZztrAhY6OEXfC0yq1cPUNV+nx7zYu4SXYP6y13cHoByLjUMPXD+9qS27ZZUSw2dYq2jQ9YRkGogCxZog4sjqoyRxpWVbDiLP+HQQfO3RRGaKYitDYCci69T5zmkhx4g9C2JFmQcbV3iH/HRVfUrvALVlNZfigKfhbC2nmoy1j3K4gB3137yhIFGkd3e3+7A1ocDtFF0UxngsBeWIWi0UVjrmL+P8K4OnXXfZX4Em1kOlMlsxb4M50oNxiU88KhcIgMpTn3JaXI3uL9a4WJpbZg==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5433.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(39860400002)(346002)(366004)(376002)(478600001)(55016002)(38100700002)(52536014)(6506007)(2906002)(53546011)(26005)(7696005)(8676002)(186003)(122000001)(66446008)(66476007)(4326008)(66556008)(66946007)(64756008)(76116006)(8936002)(30864003)(5660300002)(110136005)(33656002)(316002)(83380400001)(9686003)(86362001)(71200400001);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
 =?utf-8?Q?+/UW8SuZxb28jFfvG5Su4jyYVQZQhCYdkgNw2Yq?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5433.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f5b2cd03-8a20-4c29-9e2a-08d940e75496
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2021 01:34:14.9241
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: VbQuHI82EkqXd3kB1ai/NczJexdcBRLNFLZi5EZcZZGiRDO/tid76gcaUb96FbJIFIQYUCCvbZKfRooKOjlnWA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR11MB5710
X-OriginatorOrg: intel.com

PiBGcm9tOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+DQo+IFNlbnQ6IFR1ZXNkYXks
IEp1bHkgNiwgMjAyMSAzOjQzIFBNDQo+IA0KPiBPbiAyNi4wNS4yMDIxIDEwOjE5LCBKYW4gQmV1
bGljaCB3cm90ZToNCj4gPiBJT01NVTogbWFrZSBETUEgY29udGFpbm1lbnQgb2YgcXVhcmFudGlu
ZWQgZGV2aWNlcyBvcHRpb25hbA0KPiA+DQo+ID4gQ29udGFpbmluZyBzdGlsbCBpbiBmbGlnaHQg
RE1BIHdhcyBpbnRyb2R1Y2VkIHRvIHdvcmsgYXJvdW5kIGNlcnRhaW4NCj4gPiBkZXZpY2VzIC8g
c3lzdGVtcyBoYW5naW5nIGhhcmQgdXBvbiBoaXR0aW5nIGEgIm5vdC1wcmVzZW50IiBJT01NVSBm
YXVsdC4NCj4gPiBQYXNzaW5nIHRocm91Z2ggKHN1Y2gpIGRldmljZXMgKG9uIHN1Y2ggc3lzdGVt
cykgaXMgaW5oZXJlbnRseSBpbnNlY3VyZQ0KPiA+IChhcyBndWVzdHMgY291bGQgZWFzaWx5IGFy
cmFuZ2UgZm9yIElPTU1VIGZhdWx0cyBvZiBhbnkga2luZCB0byBvY2N1cikuDQo+ID4gRGVmYXVs
dGluZyB0byBhIG1vZGUgd2hlcmUgYWRtaW5zIG1heSBub3QgZXZlbiBiZWNvbWUgYXdhcmUgb2Yg
aXNzdWVzDQo+ID4gd2l0aCBkZXZpY2VzIGNhbiBiZSBjb25zaWRlcmVkIHVuZGVzaXJhYmxlLiBU
aGVyZWZvcmUgY29udmVydCB0aGlzIG1vZGUNCj4gPiBvZiBvcGVyYXRpb24gdG8gYW4gb3B0aW9u
YWwgb25lLCBub3Qgb25lIGVuYWJsZWQgYnkgZGVmYXVsdC4NCj4gPg0KPiA+IFRoaXMgaW52b2x2
ZXMgcmVzdXJyZWN0aW5nIGNvZGUgY29tbWl0IGVhMzg4Njc4MzFkYSAoIng4NiAvIGlvbW11OiBz
ZXQNCj4gPiB1cCBhIHNjcmF0Y2ggcGFnZSBpbiB0aGUgcXVhcmFudGluZSBkb21haW4iKSBkaWQg
cmVtb3ZlLCBpbiBhIHNsaWdodGx5DQo+ID4gZXh0ZW5kZWQgYW5kIGFic3RyYWN0ZWQgZmFzaGlv
bi4gSGVyZSwgaW5zdGVhZCBvZiByZWludHJvZHVjaW5nIGEgcHJldHR5DQo+ID4gcG9pbnRsZXNz
IHVzZSBvZiAiZ290byIgaW4gZG9tYWluX2NvbnRleHRfdW5tYXAoKSwgYW5kIGluc3RlYWQgb2Yg
bWFraW5nDQo+ID4gdGhlIGZ1bmN0aW9uIChhdCBsZWFzdCB0ZW1wb3JhcmlseSkgaW5jb25zaXN0
ZW50LCB0YWtlIHRoZSBvcHBvcnR1bml0eQ0KPiA+IGFuZCByZXBsYWNlIHRoZSBvdGhlciBzaW1p
bGFybHkgcG9pbnRsZXNzICJnb3RvIiBhcyB3ZWxsLg0KPiA+DQo+ID4gSW4gb3JkZXIgdG8ga2V5
IHRoZSByZS1pbnN0YXRlZCBieXBhc3NlcyBvZmYgb2YgdGhlcmUgKG5vdCkgYmVpbmcgYSByb290
DQo+ID4gcGFnZSB0YWJsZSB0aGlzIGZ1cnRoZXIgcmVxdWlyZXMgbW92aW5nIHRoZSBhbGxvY2F0
ZV9kb21haW5fcmVzb3VyY2VzKCkNCj4gPiBpbnZvY2F0aW9uIGZyb20gcmVhc3NpZ25fZGV2aWNl
KCkgdG8gYW1kX2lvbW11X3NldHVwX2RvbWFpbl9kZXZpY2UoKQ0KPiAob3INCj4gPiBlbHNlIHJl
YXNzaWduX2RldmljZSgpIHdvdWxkIGFsbG9jYXRlIGEgcm9vdCBwYWdlIHRhYmxlIGFueXdheSk7
IHRoaXMgaXMNCj4gPiBiZW5pZ24gdG8gdGhlIHNlY29uZCBjYWxsZXIgb2YgdGhlIGxhdHRlciBm
dW5jdGlvbi4NCj4gPg0KPiA+IEluIFZULWQncyBkb21haW5fY29udGV4dF91bm1hcCgpLCBpbnN0
ZWFkIG9mIGFkZGluZyB5ZXQgYW5vdGhlcg0KPiA+ICJnb3RvIG91dCIgd2hlbiBhbGwgdGhhdCdz
IHdhbnRlZCBpcyBhICJyZXR1cm4iLCBlbGltaW5hdGUgdGhlICJvdXQiDQo+ID4gbGFiZWwgYXQg
dGhlIHNhbWUgdGltZS4NCj4gPg0KPiA+IFRha2UgdGhlIG9wcG9ydHVuaXR5IGFuZCBhbHNvIGxp
bWl0IHRoZSBjb250cm9sIHRvIGJ1aWxkcyBzdXBwb3J0aW5nDQo+ID4gUENJLg0KPiA+DQo+ID4g
U2lnbmVkLW9mZi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiANCj4gTWF5
IEkgcGxlYXNlIGFzayBmb3IgZmVlZGJhY2sgaGVyZT8gV2hpbGUgSSBjb25zaWRlciBpdCB0b28g
bGF0ZSB0bw0KPiBnZXQgYmFjayBmdW5kYW1lbnRhbCBvYmplY3Rpb25zIChzdWNoIHNob3VsZCBo
YXZlIGJlZW4gdm9pY2VkDQo+IGVhcmxpZXIpLCBJJ20gc3RpbGwgd2lsbGluZyB0byBhY2NlcHQg
c3VjaCBpZiB0aGV5IGNvbWUgd2l0aCBhbg0KPiB1bmRlcnN0YW5kYWJsZSByZWFzb24gYW5kIGFy
ZSBiYWNrZWQgYnkgYSBtYWpvcml0eSwgaW4gd2hpY2ggY2FzZQ0KPiBJJ2QgKG5vdCB2ZXJ5IGhh
cHBpbHkpIGRyb3AgdGhlIHBhdGNoIGRlc3BpdGUgbXkgY29uY2VybnMgd2l0aCB0aGUNCj4gb3Jp
Z2luYWwgZGVmYXVsdCBjaG9zZW4gd2hlbiB0aGUgc2NyYXRjaC1wYWdlIHZhcmlhbnQgb2YgcXVh
cmFudGluaW5nDQo+IHdhcyBpbnRyb2R1Y2VkLiBCdXQgSSdtIG5vdCBnb2luZyB0byBnaXZlIHVw
IG9uIHRoaXMgbWVyZWx5IGJlY2F1c2UNCj4gb2Ygbm90IGdldHRpbmcgYW55IGZlZWRiYWNrIGF0
IGFsbDsgaW5zdGVhZCBJJ2QgdGhlbiBhbHNvIGhhdmUgdGhpcw0KPiBmYWxsIHVuZGVyICJsYXp5
IGNvbnNlbnN1cyIsIGlmIG5lZWQgYmUuDQo+IA0KPiBKYW4NCg0KUmV2aWV3ZWQtYnk6IEtldmlu
IFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPg0KDQo+IA0KPiA+IC0tLQ0KPiA+IHY1OiBJT01N
VV9xdWFyYW50aW5lX2ZhdWx0IC0+IElPTU1VX3F1YXJhbnRpbmVfYmFzaWMsDQo+ID4gICAgIElP
TU1VX3F1YXJhbnRpbmVfd3JpdGVfZmF1bHQgLT4gSU9NTVVfcXVhcmFudGluZV9zY3JhdGNoX3Bh
Z2UuDQo+ID4gICAgIEFtZW5kIGNvbW1hbmQgbGluZSBkZXNjcmlwdGlvbiB0byBjbGFyaWZ5IHRv
b2wgc3RhY2sgYmFzZWQNCj4gPiAgICAgcXVhcmFudGluaW5nIG1vZGUgd2hlbiAiaW9tbXU9bm8t
cXVhcmFudGluZSIuIEZ1bGx5DQo+ID4gICAgIHMvZHVtbXkvc2NyYXRjaC8uIFJlLWJhc2UuDQo+
ID4gdjQ6ICJmdWxsIiAtPiAic2NyYXRjaF9wYWdlIi4gRHVwbGljYXRlIEtjb25maWcgaGVscCB0
ZXh0IGludG8gY29tbWFuZA0KPiA+ICAgICBsaW5lIGRvYy4gUmUtYmFzZS4NCj4gPiB2MzogSU9N
TVVfcXVhcmFudGluZV9iYXNpYyAtPiBJT01NVV9xdWFyYW50aW5lX2ZhdWx0LA0KPiA+ICAgICBJ
T01NVV9xdWFyYW50aW5lX2Z1bGwgLT4gSU9NTVVfcXVhcmFudGluZV93cml0ZV9mYXVsdC4gS2Nv
bmZpZw0KPiA+ICAgICBvcHRpb24gKGNob2ljZSkgdG8gc2VsZWN0IGRlZmF1bHQuIExpbWl0IHRv
IEhBU19QQ0kuDQo+ID4gdjI6IERvbid0IHVzZSB0cnVlL2ZhbHNlLiBJbnRyb2R1Y2UgUVVBUkFO
VElORV9TS0lQKCkgKGFsYmVpdCBJJ20gbm90DQo+ID4gICAgIHJlYWxseSBjb252aW5jZWQgdGhp
cyBpcyBhbiBpbXByb3ZlbWVudCkuIEFkZCBjb21tZW50Lg0KPiA+DQo+ID4gLS0tIGEvZG9jcy9t
aXNjL3hlbi1jb21tYW5kLWxpbmUucGFuZG9jDQo+ID4gKysrIGIvZG9jcy9taXNjL3hlbi1jb21t
YW5kLWxpbmUucGFuZG9jDQo+ID4gQEAgLTEzNjQsNyArMTM2NCw3IEBAIGRldGVjdGlvbiBvZiBz
eXN0ZW1zIGtub3duIHRvIG1pc2JlaGF2ZQ0KPiA+ICA+IERlZmF1bHQ6IGBuZXdgIHVubGVzcyBk
aXJlY3RlZC1FT0kgaXMgc3VwcG9ydGVkDQo+ID4NCj4gPiAgIyMjIGlvbW11DQo+ID4gLSAgICA9
IExpc3Qgb2YgWyA8Ym9vbD4sIHZlcmJvc2UsIGRlYnVnLCBmb3JjZSwgcmVxdWlyZWQsIHF1YXJh
bnRpbmUsDQo+ID4gKyAgICA9IExpc3Qgb2YgWyA8Ym9vbD4sIHZlcmJvc2UsIGRlYnVnLCBmb3Jj
ZSwgcmVxdWlyZWQsIHF1YXJhbnRpbmVbPXNjcmF0Y2gtDQo+IHBhZ2VdLA0KPiA+ICAgICAgICAg
ICAgICAgICAgc2hhcmVwdCwgaW50cmVtYXAsIGludHBvc3QsIGNyYXNoLWRpc2FibGUsDQo+ID4g
ICAgICAgICAgICAgICAgICBzbm9vcCwgcWludmFsLCBpZ2Z4LCBhbWQtaW9tbXUtcGVyZGV2LWlu
dHJlbWFwLA0KPiA+ICAgICAgICAgICAgICAgICAgZG9tMC17cGFzc3Rocm91Z2gsc3RyaWN0fSBd
DQo+ID4gQEAgLTE0MDIsMTEgKzE0MDIsMzIgQEAgYm9vbGVhbiAoZS5nLiBgaW9tbXU9bm9gKSBj
YW4gb3ZlcnJpZGUgdA0KPiA+ICAgICAgd2lsbCBwcmV2ZW50IFhlbiBmcm9tIGJvb3RpbmcgaWYg
SU9NTVVzIGFyZW4ndCBkaXNjb3ZlcmVkIGFuZCBlbmFibGVkDQo+ID4gICAgICBzdWNjZXNzZnVs
bHkuDQo+ID4NCj4gPiAtKiAgIFRoZSBgcXVhcmFudGluZWAgYm9vbGVhbiBjYW4gYmUgdXNlZCB0
byBjb250cm9sIFhlbidzIGJlaGF2aW9yIHdoZW4NCj4gPiAtICAgIGRlLWFzc2lnbmluZyBkZXZp
Y2VzIGZyb20gZ3Vlc3RzLiAgSWYgZW5hYmxlZCAodGhlIGRlZmF1bHQpLCBYZW4gYWx3YXlzDQo+
ID4gKyogICBUaGUgYHF1YXJhbnRpbmVgIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjb250cm9sIFhl
bidzIGJlaGF2aW9yIHdoZW4NCj4gPiArICAgIGRlLWFzc2lnbmluZyBkZXZpY2VzIGZyb20gZ3Vl
c3RzLg0KPiA+ICsNCj4gPiArICAgIFdoZW4gYSBQQ0kgZGV2aWNlIGlzIGFzc2lnbmVkIHRvIGFu
IHVudHJ1c3RlZCBkb21haW4sIGl0IGlzIHBvc3NpYmxlDQo+ID4gKyAgICBmb3IgdGhhdCBkb21h
aW4gdG8gcHJvZ3JhbSB0aGUgZGV2aWNlIHRvIERNQSB0byBhbiBhcmJpdHJhcnkgYWRkcmVzcy4N
Cj4gPiArICAgIFRoZSBJT01NVSBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGhvc3QgZnJvbSBtYWxp
Y2lvdXMgRE1BIGJ5IG1ha2luZw0KPiA+ICsgICAgc3VyZSB0aGF0IHRoZSBkZXZpY2UgYWRkcmVz
c2VzIGNhbiBvbmx5IHRhcmdldCBtZW1vcnkgYXNzaWduZWQgdG8gdGhlDQo+ID4gKyAgICBndWVz
dC4gIEhvd2V2ZXIsIHdoZW4gdGhlIGd1ZXN0IGRvbWFpbiBpcyB0b3JuIGRvd24sIGFzc2lnbmlu
ZyB0aGUNCj4gPiArICAgIGRldmljZSBiYWNrIHRvIHRoZSBoYXJkd2FyZSBkb21haW4gd291bGQg
YWxsb3cgYW55IGluLWZsaWdodCBETUEgdG8NCj4gPiArICAgIHBvdGVudGlhbGx5IHRhcmdldCBj
cml0aWNhbCBob3N0IGRhdGEuICBUbyBhdm9pZCB0aGlzLCBxdWFyYW50aW5pbmcNCj4gPiArICAg
IHNob3VsZCBiZSBlbmFibGVkLiAgUXVhcmFudGluaW5nIGNhbiBiZSBkb25lIGluIHR3byB3YXlz
OiBJbiBpdHMgYmFzaWMNCj4gPiArICAgIGZvcm0sIGFsbCBpbi1mbGlnaHQgRE1BIHdpbGwgc2lt
cGx5IGJlIGZvcmNlZCB0byBlbmNvdW50ZXIgSU9NTVUNCj4gPiArICAgIGZhdWx0cy4gIFNpbmNl
IHRoZXJlIGFyZSBzeXN0ZW1zIHdoZXJlIGRvaW5nIHNvIGNhbiBjYXVzZSBob3N0IGxvY2t1cCwN
Cj4gPiArICAgIGFuIGFsdGVybmF0aXZlIGZvcm0gaXMgYXZhaWxhYmxlIHdoZXJlIHdyaXRlcyB0
byBtZW1vcnkgd2lsbCBiZSBtYWRlDQo+ID4gKyAgICBmYXVsdCwgYnV0IHJlYWRzIHdpbGwgYmUg
ZGlyZWN0ZWQgdG8gYSBzY3JhdGNoIHBhZ2UuICBUaGUgaW1wbGljYXRpb24NCj4gPiArICAgIGhl
cmUgaXMgdGhhdCBzdWNoIHJlYWRzIHdpbGwgZ28gdW5ub3RpY2VkLCBpLmUuIGFuIGFkbWluIG1h
eSBub3QNCj4gPiArICAgIGJlY29tZSBhd2FyZSBvZiB0aGUgdW5kZXJseWluZyBwcm9ibGVtLg0K
PiA+ICsNCj4gPiArICAgIFRoZXJlZm9yZSwgaWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUg
KHRoZSBkZWZhdWx0KSwgWGVuIGFsd2F5cw0KPiA+ICAgICAgcXVhcmFudGluZXMgc3VjaCBkZXZp
Y2VzOyB0aGV5IG11c3QgYmUgZXhwbGljaXRseSBhc3NpZ25lZCBiYWNrIHRvIERvbTANCj4gPiAt
ICAgIGJlZm9yZSB0aGV5IGNhbiBiZSB1c2VkIHRoZXJlIGFnYWluLiAgSWYgZGlzYWJsZWQsIFhl
biB3aWxsIG9ubHkNCj4gPiAtICAgIHF1YXJhbnRpbmUgZGV2aWNlcyB0aGUgdG9vbHN0YWNrIGhh
c3MgYXJyYW5nZWQgZm9yIGdldHRpbmcgcXVhcmFudGluZWQuDQo+ID4gKyAgICBiZWZvcmUgdGhl
eSBjYW4gYmUgdXNlZCB0aGVyZSBhZ2Fpbi4gIElmIHNldCB0byAic2NyYXRjaC1wYWdlIiwgc3Rp
bGwNCj4gPiArICAgIGFjdGl2ZSBETUEgcmVhZHMgd2lsbCBhZGRpdGlvbmFsbHkgYmUgZGlyZWN0
ZWQgdG8gYSAic2NyYXRjaCIgcGFnZS4gIElmDQo+ID4gKyAgICBzZXQgdG8gZmFsc2UsIFhlbiB3
aWxsIG9ubHkgcXVhcmFudGluZSBkZXZpY2VzIHRoZSB0b29sc3RhY2sgaGFzIGFycmFuZ2VkDQo+
ID4gKyAgICBmb3IgZ2V0dGluZyBxdWFyYW50aW5lZCwgYW5kIG9ubHkgaW4gdGhlICJiYXNpYyIg
Zm9ybS4NCj4gPiArDQo+ID4gKyAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIG9uIGJ1aWxk
cyBzdXBwb3J0aW5nIFBDSS4NCj4gPg0KPiA+ICAqICAgVGhlIGBzaGFyZXB0YCBib29sZWFuIGNv
bnRyb2xzIHdoZXRoZXIgdGhlIElPTU1VIHBhZ2V0YWJsZXMgYXJlDQo+IHNoYXJlZA0KPiA+ICAg
ICAgd2l0aCB0aGUgQ1BVLXNpZGUgSEFQIHBhZ2V0YWJsZXMsIG9yIGFsbG9jYXRlZCBzZXBhcmF0
ZWx5LiAgU2hhcmluZw0KPiA+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL0tjb25maWcN
Cj4gPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9LY29uZmlnDQo+ID4gQEAgLTM5LDMg
KzM5LDMxIEBAIGVuZGlmDQo+ID4NCj4gPiAgY29uZmlnIElPTU1VX0ZPUkNFX1BUX1NIQVJFDQo+
ID4gIAlib29sDQo+ID4gKw0KPiA+ICtjaG9pY2UNCj4gPiArCXByb21wdCAiSU9NTVUgZGV2aWNl
IHF1YXJhbnRpbmluZyBkZWZhdWx0IGJlaGF2aW9yIg0KPiA+ICsJZGVwZW5kcyBvbiBIQVNfUENJ
DQo+ID4gKwlkZWZhdWx0IElPTU1VX1FVQVJBTlRJTkVfQkFTSUMNCj4gPiArCS0tLWhlbHAtLS0N
Cj4gPiArCSAgV2hlbiBhIFBDSSBkZXZpY2UgaXMgYXNzaWduZWQgdG8gYW4gdW50cnVzdGVkIGRv
bWFpbiwgaXQgaXMgcG9zc2libGUNCj4gPiArCSAgZm9yIHRoYXQgZG9tYWluIHRvIHByb2dyYW0g
dGhlIGRldmljZSB0byBETUEgdG8gYW4gYXJiaXRyYXJ5DQo+IGFkZHJlc3MuDQo+ID4gKwkgIFRo
ZSBJT01NVSBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGhvc3QgZnJvbSBtYWxpY2lvdXMgRE1BIGJ5
DQo+IG1ha2luZw0KPiA+ICsJICBzdXJlIHRoYXQgdGhlIGRldmljZSBhZGRyZXNzZXMgY2FuIG9u
bHkgdGFyZ2V0IG1lbW9yeSBhc3NpZ25lZCB0bw0KPiB0aGUNCj4gPiArCSAgZ3Vlc3QuICBIb3dl
dmVyLCB3aGVuIHRoZSBndWVzdCBkb21haW4gaXMgdG9ybiBkb3duLCBhc3NpZ25pbmcgdGhlDQo+
ID4gKwkgIGRldmljZSBiYWNrIHRvIHRoZSBoYXJkd2FyZSBkb21haW4gd291bGQgYWxsb3cgYW55
IGluLWZsaWdodCBETUENCj4gdG8NCj4gPiArCSAgcG90ZW50aWFsbHkgdGFyZ2V0IGNyaXRpY2Fs
IGhvc3QgZGF0YS4gIFRvIGF2b2lkIHRoaXMsIHF1YXJhbnRpbmluZw0KPiA+ICsJICBzaG91bGQg
YmUgZW5hYmxlZC4gIFF1YXJhbnRpbmluZyBjYW4gYmUgZG9uZSBpbiB0d28gd2F5czogSW4gaXRz
DQo+IGJhc2ljDQo+ID4gKwkgIGZvcm0sIGFsbCBpbi1mbGlnaHQgRE1BIHdpbGwgc2ltcGx5IGJl
IGZvcmNlZCB0byBlbmNvdW50ZXIgSU9NTVUNCj4gPiArCSAgZmF1bHRzLiAgU2luY2UgdGhlcmUg
YXJlIHN5c3RlbXMgd2hlcmUgZG9pbmcgc28gY2FuIGNhdXNlIGhvc3QNCj4gbG9ja3VwLA0KPiA+
ICsJICBhbiBhbHRlcm5hdGl2ZSBmb3JtIGlzIGF2YWlsYWJsZSB3aGVyZSB3cml0ZXMgdG8gbWVt
b3J5IHdpbGwgYmUNCj4gbWFkZQ0KPiA+ICsJICBmYXVsdCwgYnV0IHJlYWRzIHdpbGwgYmUgZGly
ZWN0ZWQgdG8gYSBzY3JhdGNoIHBhZ2UuICBUaGUgaW1wbGljYXRpb24NCj4gPiArCSAgaGVyZSBp
cyB0aGF0IHN1Y2ggcmVhZHMgd2lsbCBnbyB1bm5vdGljZWQsIGkuZS4gYW4gYWRtaW4gbWF5IG5v
dA0KPiA+ICsJICBiZWNvbWUgYXdhcmUgb2YgdGhlIHVuZGVybHlpbmcgcHJvYmxlbS4NCj4gPiAr
DQo+ID4gKwljb25maWcgSU9NTVVfUVVBUkFOVElORV9OT05FDQo+ID4gKwkJYm9vbCAibm9uZSIN
Cj4gPiArCWNvbmZpZyBJT01NVV9RVUFSQU5USU5FX0JBU0lDDQo+ID4gKwkJYm9vbCAiYmFzaWMi
DQo+ID4gKwljb25maWcgSU9NTVVfUVVBUkFOVElORV9TQ1JBVENIX1BBR0UNCj4gPiArCQlib29s
ICJzY3JhdGNoIHBhZ2UiDQo+ID4gK2VuZGNob2ljZQ0KPiA+IC0tLSBhL3hlbi9kcml2ZXJzL3Bh
c3N0aHJvdWdoL2FtZC9wY2lfYW1kX2lvbW11LmMNCj4gPiArKysgYi94ZW4vZHJpdmVycy9wYXNz
dGhyb3VnaC9hbWQvcGNpX2FtZF9pb21tdS5jDQo+ID4gQEAgLTI1LDYgKzI1LDkgQEANCj4gPiAg
I2luY2x1ZGUgImlvbW11LmgiDQo+ID4gICNpbmNsdWRlICIuLi9hdHMuaCINCj4gPg0KPiA+ICsv
KiBkb21faW8gaXMgdXNlZCBhcyBhIHNlbnRpbmVsIGZvciBxdWFyYW50aW5lZCBkZXZpY2VzICov
DQo+ID4gKyNkZWZpbmUgUVVBUkFOVElORV9TS0lQKGQpICgoZCkgPT0gZG9tX2lvICYmICFkb21f
aW9tbXUoZCktDQo+ID5hcmNoLmFtZC5yb290X3RhYmxlKQ0KPiA+ICsNCj4gPiAgc3RhdGljIGJv
b2xfdCBfX3JlYWRfbW9zdGx5IGluaXRfZG9uZTsNCj4gPg0KPiA+ICBzdGF0aWMgY29uc3Qgc3Ry
dWN0IGlvbW11X2luaXRfb3BzIF9pb21tdV9pbml0X29wczsNCj4gPiBAQCAtODEsMTkgKzg0LDM2
IEBAIGludCBnZXRfZG1hX3JlcXVlc3Rvcl9pZCh1aW50MTZfdCBzZWcsIHUNCj4gPiAgICAgIHJl
dHVybiByZXFfaWQ7DQo+ID4gIH0NCj4gPg0KPiA+IC1zdGF0aWMgdm9pZCBhbWRfaW9tbXVfc2V0
dXBfZG9tYWluX2RldmljZSgNCj4gPiArc3RhdGljIGludCBfX211c3RfY2hlY2sgYWxsb2NhdGVf
ZG9tYWluX3Jlc291cmNlcyhzdHJ1Y3QgZG9tYWluICpkKQ0KPiA+ICt7DQo+ID4gKyAgICBzdHJ1
Y3QgZG9tYWluX2lvbW11ICpoZCA9IGRvbV9pb21tdShkKTsNCj4gPiArICAgIGludCByYzsNCj4g
PiArDQo+ID4gKyAgICBzcGluX2xvY2soJmhkLT5hcmNoLm1hcHBpbmdfbG9jayk7DQo+ID4gKyAg
ICByYyA9IGFtZF9pb21tdV9hbGxvY19yb290KGQpOw0KPiA+ICsgICAgc3Bpbl91bmxvY2soJmhk
LT5hcmNoLm1hcHBpbmdfbG9jayk7DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIHJjOw0KPiA+ICt9
DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhbWRfaW9tbXVfc2V0dXBfZG9t
YWluX2RldmljZSgNCj4gPiAgICAgIHN0cnVjdCBkb21haW4gKmRvbWFpbiwgc3RydWN0IGFtZF9p
b21tdSAqaW9tbXUsDQo+ID4gICAgICB1aW50OF90IGRldmZuLCBzdHJ1Y3QgcGNpX2RldiAqcGRl
dikNCj4gPiAgew0KPiA+ICAgICAgc3RydWN0IGFtZF9pb21tdV9kdGUgKnRhYmxlLCAqZHRlOw0K
PiA+ICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiAtICAgIGludCByZXFfaWQsIHZhbGlk
ID0gMTsNCj4gPiArICAgIGludCByZXFfaWQsIHZhbGlkID0gMSwgcmM7DQo+ID4gICAgICB1OCBi
dXMgPSBwZGV2LT5idXM7DQo+ID4gLSAgICBjb25zdCBzdHJ1Y3QgZG9tYWluX2lvbW11ICpoZCA9
IGRvbV9pb21tdShkb21haW4pOw0KPiA+ICsgICAgc3RydWN0IGRvbWFpbl9pb21tdSAqaGQgPSBk
b21faW9tbXUoZG9tYWluKTsNCj4gPg0KPiA+IC0gICAgQlVHX09OKCAhaGQtPmFyY2guYW1kLnJv
b3RfdGFibGUgfHwNCj4gPiAtICAgICAgICAgICAgIWhkLT5hcmNoLmFtZC5wYWdpbmdfbW9kZSB8
fA0KPiA+IC0gICAgICAgICAgICAhaW9tbXUtPmRldl90YWJsZS5idWZmZXIgKTsNCj4gPiArICAg
IGlmICggUVVBUkFOVElORV9TS0lQKGRvbWFpbikgKQ0KPiA+ICsgICAgICAgIHJldHVybiAwOw0K
PiA+ICsNCj4gPiArICAgIEJVR19PTighaGQtPmFyY2guYW1kLnBhZ2luZ19tb2RlIHx8ICFpb21t
dS0+ZGV2X3RhYmxlLmJ1ZmZlcik7DQo+ID4gKw0KPiA+ICsgICAgcmMgPSBhbGxvY2F0ZV9kb21h
aW5fcmVzb3VyY2VzKGRvbWFpbik7DQo+ID4gKyAgICBpZiAoIHJjICkNCj4gPiArICAgICAgICBy
ZXR1cm4gcmM7DQo+ID4NCj4gPiAgICAgIGlmICggaW9tbXVfaHdkb21fcGFzc3Rocm91Z2ggJiYg
aXNfaGFyZHdhcmVfZG9tYWluKGRvbWFpbikgKQ0KPiA+ICAgICAgICAgIHZhbGlkID0gMDsNCj4g
PiBAQCAtMTUxLDYgKzE3MSw4IEBAIHN0YXRpYyB2b2lkIGFtZF9pb21tdV9zZXR1cF9kb21haW5f
ZGV2aWMNCj4gPg0KPiA+ICAgICAgICAgIGFtZF9pb21tdV9mbHVzaF9pb3RsYihkZXZmbiwgcGRl
diwNCj4gSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTLCAwKTsNCj4gPiAgICAgIH0NCj4gPiAr
DQo+ID4gKyAgICByZXR1cm4gMDsNCj4gPiAgfQ0KPiA+DQo+ID4gIGludCBfX2luaXQgYWNwaV9p
dnJzX2luaXQodm9pZCkNCj4gPiBAQCAtMjIyLDE4ICsyNDQsNiBAQCBpbnQgYW1kX2lvbW11X2Fs
bG9jX3Jvb3Qoc3RydWN0IGRvbWFpbiAqDQo+ID4gICAgICByZXR1cm4gMDsNCj4gPiAgfQ0KPiA+
DQo+ID4gLXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFsbG9jYXRlX2RvbWFpbl9yZXNvdXJjZXMo
c3RydWN0IGRvbWFpbiAqZCkNCj4gPiAtew0KPiA+IC0gICAgc3RydWN0IGRvbWFpbl9pb21tdSAq
aGQgPSBkb21faW9tbXUoZCk7DQo+ID4gLSAgICBpbnQgcmM7DQo+ID4gLQ0KPiA+IC0gICAgc3Bp
bl9sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOw0KPiA+IC0gICAgcmMgPSBhbWRfaW9tbXVf
YWxsb2Nfcm9vdChkKTsNCj4gPiAtICAgIHNwaW5fdW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xv
Y2spOw0KPiA+IC0NCj4gPiAtICAgIHJldHVybiByYzsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAgc3Rh
dGljIGludCBhbWRfaW9tbXVfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkNCj4gPiAgew0K
PiA+ICAgICAgc3RydWN0IGRvbWFpbl9pb21tdSAqaGQgPSBkb21faW9tbXUoZCk7DQo+ID4gQEAg
LTI4Myw2ICsyOTMsOSBAQCBzdGF0aWMgdm9pZCBhbWRfaW9tbXVfZGlzYWJsZV9kb21haW5fZGV2
DQo+ID4gICAgICBpbnQgcmVxX2lkOw0KPiA+ICAgICAgdTggYnVzID0gcGRldi0+YnVzOw0KPiA+
DQo+ID4gKyAgICBpZiAoIFFVQVJBTlRJTkVfU0tJUChkb21haW4pICkNCj4gPiArICAgICAgICBy
ZXR1cm47DQo+ID4gKw0KPiA+ICAgICAgQlVHX09OICggaW9tbXUtPmRldl90YWJsZS5idWZmZXIg
PT0gTlVMTCApOw0KPiA+ICAgICAgcmVxX2lkID0gZ2V0X2RtYV9yZXF1ZXN0b3JfaWQoaW9tbXUt
PnNlZywgUENJX0JERjIoYnVzLCBkZXZmbikpOw0KPiA+ICAgICAgdGFibGUgPSBpb21tdS0+ZGV2
X3RhYmxlLmJ1ZmZlcjsNCj4gPiBAQCAtMzQ5LDExICszNjIsMTAgQEAgc3RhdGljIGludCByZWFz
c2lnbl9kZXZpY2Uoc3RydWN0IGRvbWFpbg0KPiA+ICAgICAgICAgIHBkZXYtPmRvbWFpbiA9IHRh
cmdldDsNCj4gPiAgICAgIH0NCj4gPg0KPiA+IC0gICAgcmMgPSBhbGxvY2F0ZV9kb21haW5fcmVz
b3VyY2VzKHRhcmdldCk7DQo+ID4gKyAgICByYyA9IGFtZF9pb21tdV9zZXR1cF9kb21haW5fZGV2
aWNlKHRhcmdldCwgaW9tbXUsIGRldmZuLCBwZGV2KTsNCj4gPiAgICAgIGlmICggcmMgKQ0KPiA+
ICAgICAgICAgIHJldHVybiByYzsNCj4gPg0KPiA+IC0gICAgYW1kX2lvbW11X3NldHVwX2RvbWFp
bl9kZXZpY2UodGFyZ2V0LCBpb21tdSwgZGV2Zm4sIHBkZXYpOw0KPiA+ICAgICAgQU1EX0lPTU1V
X0RFQlVHKCJSZS1hc3NpZ24gJXBwIGZyb20gZG9tJWQgdG8gZG9tJWRcbiIsDQo+ID4gICAgICAg
ICAgICAgICAgICAgICAgJnBkZXYtPnNiZGYsIHNvdXJjZS0+ZG9tYWluX2lkLCB0YXJnZXQtPmRv
bWFpbl9pZCk7DQo+ID4NCj4gPiBAQCAtNDYwLDggKzQ3Miw3IEBAIHN0YXRpYyBpbnQgYW1kX2lv
bW11X2FkZF9kZXZpY2UodTggZGV2Zm4NCj4gPiAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0
b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gLSAgICBhbWRf
aW9tbXVfc2V0dXBfZG9tYWluX2RldmljZShwZGV2LT5kb21haW4sIGlvbW11LCBkZXZmbiwNCj4g
cGRldik7DQo+ID4gLSAgICByZXR1cm4gMDsNCj4gPiArICAgIHJldHVybiBhbWRfaW9tbXVfc2V0
dXBfZG9tYWluX2RldmljZShwZGV2LT5kb21haW4sIGlvbW11LA0KPiBkZXZmbiwgcGRldik7DQo+
ID4gIH0NCj4gPg0KPiA+ICBzdGF0aWMgaW50IGFtZF9pb21tdV9yZW1vdmVfZGV2aWNlKHU4IGRl
dmZuLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhy
b3VnaC9pb21tdS5jDQo+ID4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW9tbXUuYw0K
PiA+IEBAIC0zMSw5ICszMSwyNCBAQCBib29sX3QgX19pbml0ZGF0YSBpb21tdV9lbmFibGUgPSAx
Ow0KPiA+ICBib29sX3QgX19yZWFkX21vc3RseSBpb21tdV9lbmFibGVkOw0KPiA+ICBib29sX3Qg
X19yZWFkX21vc3RseSBmb3JjZV9pb21tdTsNCj4gPiAgYm9vbF90IF9fcmVhZF9tb3N0bHkgaW9t
bXVfdmVyYm9zZTsNCj4gPiAtYm9vbCBfX3JlYWRfbW9zdGx5IGlvbW11X3F1YXJhbnRpbmUgPSB0
cnVlOw0KPiA+ICBib29sX3QgX19yZWFkX21vc3RseSBpb21tdV9jcmFzaF9kaXNhYmxlOw0KPiA+
DQo+ID4gKyNkZWZpbmUgSU9NTVVfcXVhcmFudGluZV9ub25lICAgICAgICAgMCAvKiBha2EgZmFs
c2UgKi8NCj4gPiArI2RlZmluZSBJT01NVV9xdWFyYW50aW5lX2Jhc2ljICAgICAgICAxIC8qIGFr
YSB0cnVlICovDQo+ID4gKyNkZWZpbmUgSU9NTVVfcXVhcmFudGluZV9zY3JhdGNoX3BhZ2UgMg0K
PiA+ICsjaWZkZWYgQ09ORklHX0hBU19QQ0kNCj4gPiArdWludDhfdCBfX3JlYWRfbW9zdGx5IGlv
bW11X3F1YXJhbnRpbmUgPQ0KPiA+ICsjIGlmIGRlZmluZWQoQ09ORklHX0lPTU1VX1FVQVJBTlRJ
TkVfTk9ORSkNCj4gPiArICAgIElPTU1VX3F1YXJhbnRpbmVfbm9uZTsNCj4gPiArIyBlbGlmIGRl
ZmluZWQoQ09ORklHX0lPTU1VX1FVQVJBTlRJTkVfQkFTSUMpDQo+ID4gKyAgICBJT01NVV9xdWFy
YW50aW5lX2Jhc2ljOw0KPiA+ICsjIGVsaWYgZGVmaW5lZChDT05GSUdfSU9NTVVfUVVBUkFOVElO
RV9TQ1JBVENIX1BBR0UpDQo+ID4gKyAgICBJT01NVV9xdWFyYW50aW5lX3NjcmF0Y2hfcGFnZTsN
Cj4gPiArIyBlbmRpZg0KPiA+ICsjZWxzZQ0KPiA+ICsjIGRlZmluZSBpb21tdV9xdWFyYW50aW5l
IElPTU1VX3F1YXJhbnRpbmVfbm9uZQ0KPiA+ICsjZW5kaWYgLyogQ09ORklHX0hBU19QQ0kgKi8N
Cj4gPiArDQo+ID4gIHN0YXRpYyBib29sIF9faHdkb21faW5pdGRhdGEgaW9tbXVfaHdkb21fbm9u
ZTsNCj4gPiAgYm9vbCBfX2h3ZG9tX2luaXRkYXRhIGlvbW11X2h3ZG9tX3N0cmljdDsNCj4gPiAg
Ym9vbCBfX3JlYWRfbW9zdGx5IGlvbW11X2h3ZG9tX3Bhc3N0aHJvdWdoOw0KPiA+IEBAIC02NCw4
ICs3OSwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9pb21tdV9wYXJhbShjb25zDQo+ID4g
ICAgICAgICAgZWxzZSBpZiAoICh2YWwgPSBwYXJzZV9ib29sZWFuKCJmb3JjZSIsIHMsIHNzKSkg
Pj0gMCB8fA0KPiA+ICAgICAgICAgICAgICAgICAgICAodmFsID0gcGFyc2VfYm9vbGVhbigicmVx
dWlyZWQiLCBzLCBzcykpID49IDAgKQ0KPiA+ICAgICAgICAgICAgICBmb3JjZV9pb21tdSA9IHZh
bDsNCj4gPiArI2lmZGVmIENPTkZJR19IQVNfUENJDQo+ID4gICAgICAgICAgZWxzZSBpZiAoICh2
YWwgPSBwYXJzZV9ib29sZWFuKCJxdWFyYW50aW5lIiwgcywgc3MpKSA+PSAwICkNCj4gPiAgICAg
ICAgICAgICAgaW9tbXVfcXVhcmFudGluZSA9IHZhbDsNCj4gPiArICAgICAgICBlbHNlIGlmICgg
c3MgPT0gcyArIDE1ICYmICFzdHJuY21wKHMsICJxdWFyYW50aW5lPXNjcmF0Y2gtcGFnZSIsIDIz
KSApDQo+ID4gKyAgICAgICAgICAgIGlvbW11X3F1YXJhbnRpbmUgPSBJT01NVV9xdWFyYW50aW5l
X3NjcmF0Y2hfcGFnZTsNCj4gPiArI2VuZGlmDQo+ID4gICNpZmRlZiBDT05GSUdfWDg2DQo+ID4g
ICAgICAgICAgZWxzZSBpZiAoICh2YWwgPSBwYXJzZV9ib29sZWFuKCJpZ2Z4Iiwgcywgc3MpKSA+
PSAwICkNCj4gPiAgICAgICAgICAgICAgaW9tbXVfaWdmeCA9IHZhbDsNCj4gPiBAQCAtNDMyLDcg
KzQ1MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlvbW11X3F1YXJhbnRpbmVfaW5pdCgNCj4gPiAg
ICAgIGRvbV9pby0+b3B0aW9ucyB8PSBYRU5fRE9NQ1RMX0NERl9pb21tdTsNCj4gPg0KPiA+ICAg
ICAgcmMgPSBpb21tdV9kb21haW5faW5pdChkb21faW8sIDApOw0KPiA+IC0gICAgaWYgKCByYyAp
DQo+ID4gKyAgICBpZiAoIHJjIHx8IGlvbW11X3F1YXJhbnRpbmUgPCBJT01NVV9xdWFyYW50aW5l
X3NjcmF0Y2hfcGFnZSApDQo+ID4gICAgICAgICAgcmV0dXJuIHJjOw0KPiA+DQo+ID4gICAgICBp
ZiAoICFoZC0+cGxhdGZvcm1fb3BzLT5xdWFyYW50aW5lX2luaXQgKQ0KPiA+IC0tLSBhL3hlbi9k
cml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5jDQo+ID4gKysrIGIveGVuL2RyaXZlcnMvcGFz
c3Rocm91Z2gvdnRkL2lvbW11LmMNCj4gPiBAQCAtNDIsNiArNDIsOSBAQA0KPiA+ICAjaW5jbHVk
ZSAidnRkLmgiDQo+ID4gICNpbmNsdWRlICIuLi9hdHMuaCINCj4gPg0KPiA+ICsvKiBkb21faW8g
aXMgdXNlZCBhcyBhIHNlbnRpbmVsIGZvciBxdWFyYW50aW5lZCBkZXZpY2VzICovDQo+ID4gKyNk
ZWZpbmUgUVVBUkFOVElORV9TS0lQKGQpICgoZCkgPT0gZG9tX2lvICYmICFkb21faW9tbXUoZCkt
DQo+ID5hcmNoLnZ0ZC5wZ2RfbWFkZHIpDQo+ID4gKw0KPiA+ICBzdHJ1Y3QgbWFwcGVkX3JtcnIg
ew0KPiA+ICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KPiA+ICAgICAgdTY0IGJhc2UsIGVu
ZDsNCj4gPiBAQCAtMTMyOCw2ICsxMzMxLDkgQEAgaW50IGRvbWFpbl9jb250ZXh0X21hcHBpbmdf
b25lKA0KPiA+ICAgICAgaW50IHJjLCByZXQ7DQo+ID4gICAgICBib29sX3QgZmx1c2hfZGV2X2lv
dGxiOw0KPiA+DQo+ID4gKyAgICBpZiAoIFFVQVJBTlRJTkVfU0tJUChkb21haW4pICkNCj4gPiAr
ICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gICAgICBBU1NFUlQocGNpZGV2c19sb2NrZWQo
KSk7DQo+ID4gICAgICBzcGluX2xvY2soJmlvbW11LT5sb2NrKTsNCj4gPiAgICAgIG1hZGRyID0g
YnVzX3RvX2NvbnRleHRfbWFkZHIoaW9tbXUsIGJ1cyk7DQo+ID4gQEAgLTE1NTYsNiArMTU2Miw5
IEBAIGludCBkb21haW5fY29udGV4dF91bm1hcF9vbmUoDQo+ID4gICAgICBpbnQgaW9tbXVfZG9t
aWQsIHJjLCByZXQ7DQo+ID4gICAgICBib29sX3QgZmx1c2hfZGV2X2lvdGxiOw0KPiA+DQo+ID4g
KyAgICBpZiAoIFFVQVJBTlRJTkVfU0tJUChkb21haW4pICkNCj4gPiArICAgICAgICByZXR1cm4g
MDsNCj4gPiArDQo+ID4gICAgICBBU1NFUlQocGNpZGV2c19sb2NrZWQoKSk7DQo+ID4gICAgICBz
cGluX2xvY2soJmlvbW11LT5sb2NrKTsNCj4gPg0KPiA+IEBAIC0xNjE3LDcgKzE2MjYsNyBAQCBz
dGF0aWMgaW50IGRvbWFpbl9jb250ZXh0X3VubWFwKHN0cnVjdCBkDQo+ID4gIHsNCj4gPiAgICAg
IHN0cnVjdCBhY3BpX2RyaGRfdW5pdCAqZHJoZDsNCj4gPiAgICAgIHN0cnVjdCB2dGRfaW9tbXUg
KmlvbW11Ow0KPiA+IC0gICAgaW50IHJldCA9IDA7DQo+ID4gKyAgICBpbnQgcmV0Ow0KPiA+ICAg
ICAgdTggc2VnID0gcGRldi0+c2VnLCBidXMgPSBwZGV2LT5idXMsIHRtcF9idXMsIHRtcF9kZXZm
biwgc2VjYnVzOw0KPiA+ICAgICAgaW50IGZvdW5kID0gMDsNCj4gPg0KPiA+IEBAIC0xNjMyLDE0
ICsxNjQxLDEyIEBAIHN0YXRpYyBpbnQgZG9tYWluX2NvbnRleHRfdW5tYXAoc3RydWN0IGQNCj4g
PiAgICAgICAgICBpZiAoIGlvbW11X2RlYnVnICkNCj4gPiAgICAgICAgICAgICAgcHJpbnRrKFZU
RFBSRUZJWCAiJXBkOkhvc3RicmlkZ2U6IHNraXAgJXBwIHVubWFwXG4iLA0KPiA+ICAgICAgICAg
ICAgICAgICAgICAgZG9tYWluLCAmUENJX1NCREYzKHNlZywgYnVzLCBkZXZmbikpOw0KPiA+IC0g
ICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihkb21haW4pICkNCj4gPiAtICAgICAgICAg
ICAgcmV0dXJuIC1FUEVSTTsNCj4gPiAtICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICAgICBy
ZXR1cm4gaXNfaGFyZHdhcmVfZG9tYWluKGRvbWFpbikgPyAwIDogLUVQRVJNOw0KPiA+DQo+ID4g
ICAgICBjYXNlIERFVl9UWVBFX1BDSWVfQlJJREdFOg0KPiA+ICAgICAgY2FzZSBERVZfVFlQRV9Q
Q0llMlBDSV9CUklER0U6DQo+ID4gICAgICBjYXNlIERFVl9UWVBFX0xFR0FDWV9QQ0lfQlJJREdF
Og0KPiA+IC0gICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgIHJldHVybiAwOw0KPiA+DQo+
ID4gICAgICBjYXNlIERFVl9UWVBFX1BDSWVfRU5EUE9JTlQ6DQo+ID4gICAgICAgICAgaWYgKCBp
b21tdV9kZWJ1ZyApDQo+ID4gQEAgLTE2ODEsMTAgKzE2ODgsMTIgQEAgc3RhdGljIGludCBkb21h
aW5fY29udGV4dF91bm1hcChzdHJ1Y3QgZA0KPiA+ICAgICAgZGVmYXVsdDoNCj4gPiAgICAgICAg
ICBkcHJpbnRrKFhFTkxPR19FUlIgVlREUFJFRklYLCAiJXBkOnVua25vd24oJXUpOiAlcHBcbiIs
DQo+ID4gICAgICAgICAgICAgICAgICBkb21haW4sIHBkZXYtPnR5cGUsICZQQ0lfU0JERjMoc2Vn
LCBidXMsIGRldmZuKSk7DQo+ID4gLSAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiAtICAgICAg
ICBnb3RvIG91dDsNCj4gPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiAgICAgIH0NCj4g
Pg0KPiA+ICsgICAgaWYgKCBRVUFSQU5USU5FX1NLSVAoZG9tYWluKSApDQo+ID4gKyAgICAgICAg
cmV0dXJuIHJldDsNCj4gPiArDQo+ID4gICAgICAvKg0KPiA+ICAgICAgICogaWYgbm8gb3RoZXIg
ZGV2aWNlcyB1bmRlciB0aGUgc2FtZSBpb21tdSBvd25lZCBieSB0aGlzIGRvbWFpbiwNCj4gPiAg
ICAgICAqIGNsZWFyIGlvbW11IGluIGlvbW11X2JpdG1hcCBhbmQgY2xlYXIgZG9tYWluX2lkIGlu
IGRvbWlkX2JpdG1wDQo+ID4gQEAgLTE3MTksNyArMTcyOCw2IEBAIHN0YXRpYyBpbnQgZG9tYWlu
X2NvbnRleHRfdW5tYXAoc3RydWN0IGQNCj4gPiAgICAgICAgICBpb21tdS0+ZG9taWRfbWFwW2lv
bW11X2RvbWlkXSA9IDA7DQo+ID4gICAgICB9DQo+ID4NCj4gPiAtb3V0Og0KPiA+ICAgICAgcmV0
dXJuIHJldDsNCj4gPiAgfQ0KPiA+DQo+ID4gLS0tIGEveGVuL2luY2x1ZGUveGVuL2lvbW11LmgN
Cj4gPiArKysgYi94ZW4vaW5jbHVkZS94ZW4vaW9tbXUuaA0KPiA+IEBAIC01Miw3ICs1Miw5IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbF90IGRmbl9lcShkZm5fdCB4LCBkZm4NCj4gPiAgfQ0KPiA+DQo+
ID4gIGV4dGVybiBib29sX3QgaW9tbXVfZW5hYmxlLCBpb21tdV9lbmFibGVkOw0KPiA+IC1leHRl
cm4gYm9vbCBmb3JjZV9pb21tdSwgaW9tbXVfcXVhcmFudGluZSwgaW9tbXVfdmVyYm9zZTsNCj4g
PiArZXh0ZXJuIGJvb2wgZm9yY2VfaW9tbXUsIGlvbW11X3ZlcmJvc2U7DQo+ID4gKy8qIEJvb2xl
YW4gZXhjZXB0IGZvciB0aGUgc3BlY2lmaWMgcHVycG9zZXMgb2YNCj4gZHJpdmVycy9wYXNzdGhy
b3VnaC9pb21tdS5jLiAqLw0KPiA+ICtleHRlcm4gdWludDhfdCBpb21tdV9xdWFyYW50aW5lOw0K
PiA+DQo+ID4gICNpZmRlZiBDT05GSUdfWDg2DQo+ID4gIGV4dGVybiBlbnVtIF9fcGFja2VkIGlv
bW11X2ludHJlbWFwIHsNCj4gPg0KDQo=


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 01:35:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 01:35:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151798.280462 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0wTT-0004Ai-A5; Wed, 07 Jul 2021 01:35:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151798.280462; Wed, 07 Jul 2021 01:35:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0wTT-0004Ab-6e; Wed, 07 Jul 2021 01:35:39 +0000
Received: by outflank-mailman (input) for mailman id 151798;
 Wed, 07 Jul 2021 01:35:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Uasl=L7=intel.com=kevin.tian@srs-us1.protection.inumbo.net>)
 id 1m0wTS-0004AT-F5
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 01:35:38 +0000
Received: from mga01.intel.com (unknown [192.55.52.88])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3763c456-724a-4d5e-845b-d465e0fd566e;
 Wed, 07 Jul 2021 01:35:34 +0000 (UTC)
Received: from fmsmga007.fm.intel.com ([10.253.24.52])
 by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 06 Jul 2021 18:35:33 -0700
Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83])
 by fmsmga007.fm.intel.com with ESMTP; 06 Jul 2021 18:35:32 -0700
Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by
 fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2242.10; Tue, 6 Jul 2021 18:35:32 -0700
Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by
 fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2242.10; Tue, 6 Jul 2021 18:35:31 -0700
Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by
 fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2242.10 via Frontend Transport; Tue, 6 Jul 2021 18:35:31 -0700
Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.49) by
 edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.1.2242.4; Tue, 6 Jul 2021 18:35:31 -0700
Received: from BN9PR11MB5433.namprd11.prod.outlook.com (2603:10b6:408:11e::13)
 by BN6PR1101MB2146.namprd11.prod.outlook.com (2603:10b6:405:50::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Wed, 7 Jul
 2021 01:35:30 +0000
Received: from BN9PR11MB5433.namprd11.prod.outlook.com
 ([fe80::fd4b:cdde:6790:134]) by BN9PR11MB5433.namprd11.prod.outlook.com
 ([fe80::fd4b:cdde:6790:134%8]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 01:35:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3763c456-724a-4d5e-845b-d465e0fd566e
X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="230959392"
X-IronPort-AV: E=Sophos;i="5.83,330,1616482800"; 
   d="scan'208";a="230959392"
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.83,330,1616482800"; 
   d="scan'208";a="423159842"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OhfE0jGlZ5HKB6x3RLetdkTLNpNkdYqQnBmfDlGXr0Z+z4XsdPVa2JzoEkVjmQ3lrtZg2PtsVcAOOaQAwjt8GYGEpgb1+2RBUyp61zPuCXoTxw3tzzSy+IFB5hGfDPczi6vVGdWTZ1f0Ke228U+TVFJeJu5Lj7HC87rurtRfKFLwReMhw+HKMr07JhSDKkCYsk5RheJZ0Ac+VlQAV7cSOJDyWPMYiSzF+5yqkMnJdBTMfSJRuARusjQBpjDwOkBfomIXQlQBUdrQAuxjHbqG/f12iPO6XbelZN6fti0edKBjzBDZij9OiPT6lrqoU+ki9iGc3nTVz4IRYPDcPkooVA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gvXAQNkeq/K1e4VNMs1Mat8zbNFyJKAE0QW1J9na4t4=;
 b=fFAl3YHfetIB+n30OdX2ViEQTXXBf6yR31NaQfl2PYbQutGB9qxqm7eVvb3rLCSrwleCyHq5x8wTQLY14hTKjcYebg6G+BvOX+p3zW7WuOcnxU2nEO2zFlXyGaocML0OiROICbFFsm+hGMPyiDobf8+cls+G8NQx+idvSymR1lH0vw0cuEvTnxUBiXz2nfc/nyMZJU3VONIaxUAirVF3cpYJclP0bndXqHlkvFLtidMCDbiLX+wNKP9vJyg/gQV6gA1b1XdB4UgNb8CNnUoocvGquQu/jHL6Hw1GqpwUGHs1IZ4zzmyUgwxfJWWjyMD9MHCxfqTidG/QwM7y6DD5Lw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
 dkim=pass header.d=intel.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com;
 s=selector2-intel-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gvXAQNkeq/K1e4VNMs1Mat8zbNFyJKAE0QW1J9na4t4=;
 b=tQmSNvqU6BH3D2gHTUg4Rf1ON3WIVwWy/7at6lUa7XmBNSNax6Kb0QBscKJplDsSJYjLQ5tg1Fv4ekpIGdnjhvNjPY3baa7Mx9BcG9mcEiPVQoSR72hsg3NYR7RTeUNXCS21omGS/JEy91vHeCdsL+kzcrSfNHQ0m3oN2Qbl3TA=
From: "Tian, Kevin" <kevin.tian@intel.com>
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: "Cooper, Andrew" <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
	=?utf-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= <roger.pau@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>
Subject: RE: [PATCH 07/16] x86/P2M: p2m_{alloc,free}_ptp() and
 p2m_alloc_table() are HVM-only
Thread-Topic: [PATCH 07/16] x86/P2M: p2m_{alloc,free}_ptp() and
 p2m_alloc_table() are HVM-only
Thread-Index: AQHXcbgpk0b+361jIk+Tsj/Wl7GPf6s2vTRg
Date: Wed, 7 Jul 2021 01:35:30 +0000
Message-ID: <BN9PR11MB54330E8E2A36577B1C39217B8C1A9@BN9PR11MB5433.namprd11.prod.outlook.com>
References: <d1fd572d-5bfe-21d8-3b50-d9b0646ce2f0@suse.com>
 <fcd39881-e225-d1a7-a168-9aa9fd9a7735@suse.com>
In-Reply-To: <fcd39881-e225-d1a7-a168-9aa9fd9a7735@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
dlp-version: 11.5.1.3
dlp-product: dlpe-windows
dlp-reaction: no-action
authentication-results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=intel.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 67bccf20-0c33-4bb9-d2f6-08d940e781ce
x-ms-traffictypediagnostic: BN6PR1101MB2146:
x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr
x-microsoft-antispam-prvs: <BN6PR1101MB2146B485C3B9DDC1FBB480B18C1A9@BN6PR1101MB2146.namprd11.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:2089;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: wu8B9vMkCRNVEBbUMcTEV2SLsq9xR93iAUOhk/w49rU2fcu69IhLxnZGZIjI+huqwGq+D7Yb5H/iUrUfhUyABbdN9hskjjaeyHHjL39Zf2oKh3dWfCKvBGyM2hdqg5xd8wQa/tbeCT6iq/dUdQdrd9l3CBsXALqlLvni8Umcsrpmfsb5Kq5ccJJc6mGoP9DhA78Ifl5WnB+HTUJ6Bv/U2n9SVr9PuewdaKw1+El2Y1V0C415c3az2wbHs1lP4Nf883d0qmSEZgbKm/rS2eWv0Zlpw1dJgEJw5jo/ZXcNVaarhAS1sdTPD6dwTk5OQIOhd2YkHEiVrpKzDvaX0KaQCbaYxBhbtjfTGPQnNEnHTyZPQ7qoBvt/ekKm8BiY9998Rx5xKWqDsKKSbIPlLp40xuuaOGjiv5/Z0Lp9UJQiWKJ5CszPzAT2Fcma32DU64XvvdRGA9+325DbEf3RGEMFjJ2OuPHzCiuOPQiGAOwXsbn3BCzHMRKguqBcfKkq0TYe73jYjDtV5GEmkfiBJSyY4+Xz9UlaGeOJ0IeNDEYLmbI0zFm5ibJ89QDOgvzhXKkcubQ38dWFOpOlw6PI3FVrx7u0LAK+yAsrHT5fy/TSwex5m5CGchNlecEN8XQ4Fr97F8XQ/KLGfE38u1LWXXNvHA==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5433.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(39860400002)(366004)(346002)(396003)(136003)(66946007)(478600001)(122000001)(33656002)(38100700002)(76116006)(7696005)(6506007)(8936002)(64756008)(66446008)(186003)(86362001)(55016002)(66556008)(66476007)(2906002)(52536014)(8676002)(9686003)(5660300002)(71200400001)(4326008)(26005)(110136005)(83380400001)(316002)(54906003);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?utf-8?B?QmwydE8rYlUxaWlFQ3hzVVVvaXc2M1hlMGJBS1lSS1RpdGxFekpxNmFIR01p?=
 =?utf-8?B?THYzd3lGdWxCc2M1YmxDT0laL0VncHVsSUpjZWdEV3ZCWXUrYU5ZOUswMXE3?=
 =?utf-8?B?eEhUQVlKSURFc1lSNjhUN0h5U1ZEVWRueldTNEJRT1IwOGZBRndqby90Rk80?=
 =?utf-8?B?TGNCRkc4OUZhVnhxRTN6T1pFai93bDd6aDh3ZUZPcjRFUFJEcm9ucjVuZS9a?=
 =?utf-8?B?Ym9uZzhNaUlIR2VPWUdaUFk5ZlZqWHEvdmE3dENUb3JJcEk3N3AvTU1aVzJu?=
 =?utf-8?B?TXhTRGQzSmpacFNCZjhGZG9BZ0w4WlozMnZ1M0UyWVcrT2NrcEV5RW9EZFhH?=
 =?utf-8?B?b2FhMjFYSEZFbXRSN0cwYmQxNDR4OE9zbXpTMjZ3QUp6NVpZcm1KSGdaRzdp?=
 =?utf-8?B?eW8rT2RRRldqMmZtTXVTNTVCNmlETGprOU9UU3VNdjl6QkpSRVVoWXlZcEp4?=
 =?utf-8?B?c3RrMzdEYW1ZT0hLUXNIZmFqcGppYzFFS0J6bmg3V2NwekxoMUVVUDltcmJE?=
 =?utf-8?B?T3pVMERWSVl3dkxKdWpuc1hoSldhZVE0cXdhMlRNZjJxM2ZTKytlMjUxSDI4?=
 =?utf-8?B?b0t6a0gwbXpIMGZCR1lXV2p4d0JqTldyY2RwaEJCV3dsQXc2M2RuVEtjb1J6?=
 =?utf-8?B?TURZYm5obUgrQktoQTdvTmZpV0t2eHpVLzhXR3Joak1XWlJ4Nyt4bDVDR1lI?=
 =?utf-8?B?ZGYwUjFhc2Z2VUFFbXVYZmNqd3M5RTBlNHhmYUI3RWVPZm9GQ1RkK0xsSlBE?=
 =?utf-8?B?bTBpcFRueWVaQUpjUHpEcFBsOW9hOW5IQTc0Z05jSy9ocE9ROG5Rb1ZpWmdv?=
 =?utf-8?B?WW9sTlNFZ2pLZGxpL3o5RFBxRXJJb2ExT2JRZ3ArQUwwWHllaEd4V2pSc1h5?=
 =?utf-8?B?eUJQenJlM0Y3NjZaZXZUcGZiV0tPRDRvSGtlRDdRdXExNUdDNVVMMXFmOWJN?=
 =?utf-8?B?M1E2cC9OMjdzVXdzNE1peXdhNXJZMThvWUxRWHBhQzFHSVh4Q0U0T0xoQ0F4?=
 =?utf-8?B?ZnE0RSsvZjFCcmJxUkhRWVRvUGZhSC9TOGxXWW5maU1IMXI5QjUyYXBrbFcr?=
 =?utf-8?B?VzJXdFg2TENtaHVnVk80V0U2SFNSdTFDQXRjMWhBWGJtSFNTRW9ETjNVVGM0?=
 =?utf-8?B?TUFiVHhtenlOMXNLRUwxNHdpK2FTM05yZXRLc3BBUjRQcUlTcnZWamRVR2pS?=
 =?utf-8?B?bFcraEN6K2tSWUR2TzZMRWkzUmtGZkxvZ1VjVjRpM3RYVndiNDJYT2R0UFlI?=
 =?utf-8?B?cmpJZ2RvVExOUDJMNlFOaVIrL1VaWXZoU2tPRlhoVkJDdXBTZnBwNkRWNDhv?=
 =?utf-8?B?bGxGTXRKZ3VrdXlqM2ZMUlJmOVZ1c3ZjOEd2UUtCTkdmdFZJU3FVSUtWK1lx?=
 =?utf-8?B?KzJNSlJLejdkaEdhQTFtVmh1cW9rVFltS2NxMTd2RGNMY0swT1VGNC9RQlJJ?=
 =?utf-8?B?Y3MxK2FOZWYvRFhpdVFTRHNTYXQ2UUk2eVBRZVVLL3h3Q2VWSW13MVBhc0Fz?=
 =?utf-8?B?dVEwd0x6QjlMYXhHcU9VeHVIVW8xdnIvK0dRN0dWMU4rblhYbEhaWFgxMkVO?=
 =?utf-8?B?U3hSdjUybXYwa2FNb1FRenFyd1RwcW9Pc2FnY2Z6YjBCTXFrR0I5dm1aaFRX?=
 =?utf-8?B?QmJCcW1xZVpLRDdaS045eFBPaEwxTk55MU1VSG1XYjJ6aU1FaGd4MnFhTXJk?=
 =?utf-8?B?bEpGTnpEN0grUnZrMjJqZGZqNWN6VURyWG9kQ1NOSmZYc1Nxa3JVc0YzMXRw?=
 =?utf-8?Q?p5gJyS5p/j//hEjX9EjrOvYBifWsYpz3uHVNk3x?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5433.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 67bccf20-0c33-4bb9-d2f6-08d940e781ce
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2021 01:35:30.8257
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: LpDK2Uh9SoJaEa8RnrNuGkIWCHNHKu4+VTCu2UQU/+GGrhoTcuw22gOG4LipaqpPezp5zscZMk+w/hY/tmmENg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR1101MB2146
X-OriginatorOrg: intel.com

PiBGcm9tOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+DQo+IFNlbnQ6IFR1ZXNkYXks
IEp1bHkgNiwgMjAyMSAxMjowOSBBTQ0KPiANCj4gVGhpcyBhbHNvIGluY2x1ZGVzIHRoZSB0d28g
cDJtIHJlbGF0ZWQgZmllbGRzLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogSmFuIEJldWxpY2ggPGpi
ZXVsaWNoQHN1c2UuY29tPg0KDQpSZXZpZXdlZC1ieTogS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBp
bnRlbC5jb20+DQoNCj4gDQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYw0KPiArKysgYi94
ZW4vYXJjaC94ODYvbW0vcDJtLmMNCj4gQEAgLTk0LDcgKzk0LDkgQEAgc3RhdGljIGludCBwMm1f
aW5pdGlhbGlzZShzdHJ1Y3QgZG9tYWluDQo+ICAgICAgaW50IHJldCA9IDA7DQo+IA0KPiAgICAg
IG1tX3J3bG9ja19pbml0KCZwMm0tPmxvY2spOw0KPiArI2lmZGVmIENPTkZJR19IVk0NCj4gICAg
ICBJTklUX1BBR0VfTElTVF9IRUFEKCZwMm0tPnBhZ2VzKTsNCj4gKyNlbmRpZg0KPiANCj4gICAg
ICBwMm0tPmRvbWFpbiA9IGQ7DQo+ICAgICAgcDJtLT5kZWZhdWx0X2FjY2VzcyA9IHAybV9hY2Nl
c3Nfcnd4Ow0KPiBAQCAtNjI4LDYgKzYzMCw3IEBAIHN0cnVjdCBwYWdlX2luZm8gKnAybV9nZXRf
cGFnZV9mcm9tX2dmbigNCj4gIH0NCj4gDQo+ICAjaWZkZWYgQ09ORklHX0hWTQ0KPiArDQo+ICAv
KiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzLCAtZXJybm8gZm9yIGZhaWx1cmUgKi8NCj4gIGludCBw
Mm1fc2V0X2VudHJ5KHN0cnVjdCBwMm1fZG9tYWluICpwMm0sIGdmbl90IGdmbiwgbWZuX3QgbWZu
LA0KPiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2Vfb3JkZXIsIHAybV90eXBl
X3QgcDJtdCwgcDJtX2FjY2Vzc190IHAybWEpDQo+IEBAIC02NjcsNyArNjcwLDYgQEAgaW50IHAy
bV9zZXRfZW50cnkoc3RydWN0IHAybV9kb21haW4gKnAybQ0KPiANCj4gICAgICByZXR1cm4gcmM7
DQo+ICB9DQo+IC0jZW5kaWYNCj4gDQo+ICBtZm5fdCBwMm1fYWxsb2NfcHRwKHN0cnVjdCBwMm1f
ZG9tYWluICpwMm0sIHVuc2lnbmVkIGludCBsZXZlbCkNCj4gIHsNCj4gQEAgLTc0Niw2ICs3NDgs
OCBAQCBpbnQgcDJtX2FsbG9jX3RhYmxlKHN0cnVjdCBwMm1fZG9tYWluICpwDQo+ICAgICAgcmV0
dXJuIDA7DQo+ICB9DQo+IA0KPiArI2VuZGlmIC8qIENPTkZJR19IVk0gKi8NCj4gKw0KPiAgLyoN
Cj4gICAqIGh2bSBmaXhtZTogd2hlbiBhZGRpbmcgc3VwcG9ydCBmb3IgcHZoIG5vbi1oYXJkd2Fy
ZSBkb21haW5zLCB0aGlzDQo+IHBhdGggbXVzdA0KPiAgICogY2xlYW51cCBhbnkgZm9yZWlnbiBw
Mm0gdHlwZXMgKHJlbGVhc2UgcmVmY250cyBvbiB0aGVtKS4NCj4gQEAgLTc1NCw3ICs3NTgsOSBA
QCB2b2lkIHAybV90ZWFyZG93bihzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtDQo+ICAvKiBSZXR1cm4g
YWxsIHRoZSBwMm0gcGFnZXMgdG8gWGVuLg0KPiAgICogV2Uga25vdyB3ZSBkb24ndCBoYXZlIGFu
eSBleHRyYSBtYXBwaW5ncyB0byB0aGVzZSBwYWdlcyAqLw0KPiAgew0KPiArI2lmZGVmIENPTkZJ
R19IVk0NCj4gICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZzsNCj4gKyNlbmRpZg0KPiAgICAgIHN0
cnVjdCBkb21haW4gKmQ7DQo+IA0KPiAgICAgIGlmIChwMm0gPT0gTlVMTCkNCj4gQEAgLTc2Mywx
MSArNzY5LDE2IEBAIHZvaWQgcDJtX3RlYXJkb3duKHN0cnVjdCBwMm1fZG9tYWluICpwMm0NCj4g
ICAgICBkID0gcDJtLT5kb21haW47DQo+IA0KPiAgICAgIHAybV9sb2NrKHAybSk7DQo+ICsNCj4g
ICAgICBBU1NFUlQoYXRvbWljX3JlYWQoJmQtPnNocl9wYWdlcykgPT0gMCk7DQo+ICsNCj4gKyNp
ZmRlZiBDT05GSUdfSFZNDQo+ICAgICAgcDJtLT5waHlzX3RhYmxlID0gcGFnZXRhYmxlX251bGwo
KTsNCj4gDQo+ICAgICAgd2hpbGUgKCAocGcgPSBwYWdlX2xpc3RfcmVtb3ZlX2hlYWQoJnAybS0+
cGFnZXMpKSApDQo+ICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmZyZWVfcGFnZShkLCBwZyk7DQo+
ICsjZW5kaWYNCj4gKw0KPiAgICAgIHAybV91bmxvY2socDJtKTsNCj4gIH0NCj4gDQo+IC0tLSBh
L3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29tbW9uLmMNCj4gKysrIGIveGVuL2FyY2gveDg2L21t
L3NoYWRvdy9jb21tb24uYw0KPiBAQCAtMjcwMCw4ICsyNzAwLDEwIEBAIGludCBzaGFkb3dfZW5h
YmxlKHN0cnVjdCBkb21haW4gKmQsIHUzMg0KPiAgIG91dF9sb2NrZWQ6DQo+ICAgICAgcGFnaW5n
X3VubG9jayhkKTsNCj4gICBvdXRfdW5sb2NrZWQ6DQo+ICsjaWZkZWYgQ09ORklHX0hWTQ0KPiAg
ICAgIGlmICggcnYgIT0gMCAmJiAhcGFnZXRhYmxlX2lzX251bGwocDJtX2dldF9wYWdldGFibGUo
cDJtKSkgKQ0KPiAgICAgICAgICBwMm1fdGVhcmRvd24ocDJtKTsNCj4gKyNlbmRpZg0KPiAgICAg
IGlmICggcnYgIT0gMCAmJiBwZyAhPSBOVUxMICkNCj4gICAgICB7DQo+ICAgICAgICAgIHBnLT5j
b3VudF9pbmZvICY9IH5QR0NfY291bnRfbWFzazsNCj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Ro
cm91Z2gvdnRkL2lvbW11LmMNCj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lv
bW11LmMNCj4gQEAgLTMzOSwxMiArMzM5LDE0IEBAIHN0YXRpYyB1aW50NjRfdCBkb21haW5fcGdk
X21hZGRyKHN0cnVjdA0KPiANCj4gICAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmhkLT5hcmNo
Lm1hcHBpbmdfbG9jaykpOw0KPiANCj4gKyNpZmRlZiBDT05GSUdfSFZNDQo+ICAgICAgaWYgKCBp
b21tdV91c2VfaGFwX3B0KGQpICkNCj4gICAgICB7DQo+ICAgICAgICAgIHBhZ2V0YWJsZV90IHBn
dCA9IHAybV9nZXRfcGFnZXRhYmxlKHAybV9nZXRfaG9zdHAybShkKSk7DQo+IA0KPiAgICAgICAg
ICByZXR1cm4gcGFnZXRhYmxlX2dldF9wYWRkcihwZ3QpOw0KPiAgICAgIH0NCj4gKyNlbmRpZg0K
PiANCj4gICAgICBpZiAoICFoZC0+YXJjaC52dGQucGdkX21hZGRyICkNCj4gICAgICB7DQo+IC0t
LSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcDJtLmgNCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4
Ni9wMm0uaA0KPiBAQCAtMjAyLDkgKzIwMiw2IEBAIHN0cnVjdCBwMm1fZG9tYWluIHsNCj4gICAg
ICAvKiBMb2NrIHRoYXQgcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcDJtICovDQo+ICAgICAgbW1f
cndsb2NrX3QgICAgICAgICAgIGxvY2s7DQo+IA0KPiAtICAgIC8qIFNoYWRvdyB0cmFuc2xhdGVk
IGRvbWFpbjogcDJtIG1hcHBpbmcgKi8NCj4gLSAgICBwYWdldGFibGVfdCAgICAgICAgcGh5c190
YWJsZTsNCj4gLQ0KPiAgICAgIC8qDQo+ICAgICAgICogU2FtZSBhcyBhIGRvbWFpbidzIGRpcnR5
X2NwdW1hc2sgYnV0IGxpbWl0ZWQgdG8NCj4gICAgICAgKiB0aGlzIHAybSBhbmQgdGhvc2UgcGh5
c2ljYWwgY3B1cyB3aG9zZSB2Y3B1J3MgYXJlIGluDQo+IEBAIC0yMjMsOSArMjIwLDYgQEAgc3Ry
dWN0IHAybV9kb21haW4gew0KPiAgICAgICAqLw0KPiAgICAgIHAybV9hY2Nlc3NfdCBkZWZhdWx0
X2FjY2VzczsNCj4gDQo+IC0gICAgLyogUGFnZXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHAybSAq
Lw0KPiAtICAgIHN0cnVjdCBwYWdlX2xpc3RfaGVhZCBwYWdlczsNCj4gLQ0KPiAgICAgIC8qIEhv
c3QgcDJtOiBMb2ctZGlydHkgcmFuZ2VzIHJlZ2lzdGVyZWQgZm9yIHRoZSBkb21haW4uICovDQo+
ICAgICAgc3RydWN0IHJhbmdlc2V0ICAgKmxvZ2RpcnR5X3JhbmdlczsNCj4gDQo+IEBAIC0yMzMs
NiArMjI3LDEyIEBAIHN0cnVjdCBwMm1fZG9tYWluIHsNCj4gICAgICBib29sICAgICAgICAgICAg
ICAgZ2xvYmFsX2xvZ2RpcnR5Ow0KPiANCj4gICNpZmRlZiBDT05GSUdfSFZNDQo+ICsgICAgLyog
VHJhbnNsYXRlZCBkb21haW46IHAybSBtYXBwaW5nICovDQo+ICsgICAgcGFnZXRhYmxlX3QgICAg
ICAgIHBoeXNfdGFibGU7DQo+ICsNCj4gKyAgICAvKiBQYWdlcyB1c2VkIHRvIGNvbnN0cnVjdCB0
aGUgcDJtICovDQo+ICsgICAgc3RydWN0IHBhZ2VfbGlzdF9oZWFkIHBhZ2VzOw0KPiArDQo+ICAg
ICAgLyogQWx0ZXJuYXRlIHAybTogY291bnQgb2YgdmNwdSdzIGN1cnJlbnRseSB1c2luZyB0aGlz
IHAybS4gKi8NCj4gICAgICBhdG9taWNfdCAgICAgICAgICAgYWN0aXZlX3ZjcHVzOw0KPiANCg0K


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 02:32:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 02:32:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151807.280479 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0xMP-0001jx-NP; Wed, 07 Jul 2021 02:32:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151807.280479; Wed, 07 Jul 2021 02:32:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0xMP-0001jq-JH; Wed, 07 Jul 2021 02:32:25 +0000
Received: by outflank-mailman (input) for mailman id 151807;
 Wed, 07 Jul 2021 02:32:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=zlai=L7=qq.com=2284696125@srs-us1.protection.inumbo.net>)
 id 1m0xMN-0001ir-R4
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 02:32:24 +0000
Received: from out162-62-57-252.mail.qq.com (unknown [162.62.57.252])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8ad2e886-decb-11eb-84d5-12813bfff9fa;
 Wed, 07 Jul 2021 02:32:17 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8ad2e886-decb-11eb-84d5-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512;
	t=1625625133; bh=LEJ9RlebRlWexb6HOXzdkycir1ohIgIMpvwD5FDQMlY=;
	h=In-Reply-To:References:From:To:Subject:Date;
	b=pobfU84/Wxgak/9UmXez1trbFONJac94s9Xd8Fw01v8xrXiCk1KPpEZSItPyuFnrA
	 AdgjELg7pJB5qhkerKYal0NOcav7gR2Z5eUUiXx/oQbJtnTf9k1p62WnH4wnG2K2J4
	 K06byfpnr+7DP4ISZLbS8RvKyZbtvRASSuqBWSdQ=
X-QQ-FEAT: +o73Hu3+XSs8eHR9MphqUbdYv0poPbPQK+qT4Hm4bsusBLAPzZmO7kOUUSkKi
	WyPrXlEey3f6Y9lXyAd2d8RpRcQESMBRvGQlqrw15yA5JgW0b67PEhKXVSPh599sdfaR1R6
	IO7opkf6BPl75Yfn3x3nl2GFBn1s2zzaDkXpAP+qmcgBdrux5ng5Rew6FK0aAU2Q5CFIfoc
	tk82P91j61+Wmvx5uHOC4cKV6TuwIQa0NkRuvI+kCRKe1Xk4TkY2uhyKenoDSs15F0VJF80
	yI+R4l3frkTTpj7mninp9L0qI=
X-QQ-SSF: 0000000000000020000000000000008
X-QQ-XMAILINFO: NCFKCHovkxwqemVyenP2ERJaXDw1Iri5a7h4ZY14dCXlkkSPKKz0hK23Pp2vJ4
	 RbeQshWGjW34A8zU7rzkj5TrefNvmVlZ5vV7mSjYXZJAff4hzFeT2aWVoJqVWW985rc8JGaSkbtC/
	 +icaqwojhlvbE128Zwu5XSwuDQW5VBEy31UhiyeSidTaSSEtzwkjfH84xDiIOBQaAJYLTmEs0lCZO
	 1ww0bqhHHyUMLW2qNUtTqhUlLnBVyQKPkuEjwK+MeQMzEO47tOArd7r9leZvyt63CEEiOn9AFqi3h
	 99azfj9aSNqu/UqN5/OeWBHQkx9cgVuecn36K4SUxUNYIsCrk+6WCCx0vXPN6Dvz9P2kz0xo8QHXr
	 +JMK2Keot+faNIwx5GHUs5sRmYNdVbejicpVPG/QuGgH2D6h2wuz0JS8wXu7k/dCkT0kWhE4jPe0O
	 BHZF3h138QIFQzcCBlREH9WH2QNn9GWWfnE/vLwko5qdVz4bgWh9f6R12zPkgryXEf945ZR1jazoN
	 zWbQ9i/oZT1VHubRx2LNvhYQCYKC/4A0gQo+A95IP6lsQTS5EIQrSbmTPS42rFb6Fwmif8Vlv1cH0
	 9zcfvXIJCr0BELAW6Ix3krHgSMEv8ptJPnd48tDhRzCo4igF5i22t4zEUXqc8+T3HdKQEAbwggDzb
	 Ga8drJSIvghCyCxCYRTvqoHoIMY1qtNSMPZ+krnlVVyy5c/Gs/eBlJGreku+mBMRaqQewTMwYWiV1
	 yUsymHil10Ka75BE265ubbxHnsiHznqlh1QiLL6PZtLf58nnJAdk2+G+YFhRvQ8qZczdI9dcShqgT
	 7w==
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 103.138.232.65
In-Reply-To: <fbd1eb89-695c-5c23-da07-ae16fd567010@citrix.com>
References: <tencent_A17CA7BA63F6E47B3FE7B1AC54E55B2A3609@qq.com>
	<fbd1eb89-695c-5c23-da07-ae16fd567010@citrix.com>
X-QQ-STYLE: 
X-QQ-mid: webmail801t1625625131t3157137
From: "=?gb18030?B?UnJvYWNo?=" <2284696125@qq.com>
To: "=?gb18030?B?eGVuLWRldmVs?=" <xen-devel@lists.xenproject.org>
Subject: Re:  A possible pointer_overflow in xen-4.13
Mime-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_60E5122B_0FC65F28_4BEFFF19"
Content-Transfer-Encoding: 8Bit
Date: Wed, 7 Jul 2021 10:32:11 +0800
X-Priority: 3
Message-ID: <tencent_40EF4EF7C31E752FD2BCB7D5963C44459006@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 2740862976

This is a multi-part message in MIME format.

------=_NextPart_60E5122B_0FC65F28_4BEFFF19
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

QWZ0ZXIgcGF0Y2hpbmcgaXQsIHRoaXMgd29ya3MgZmluZSBhbmQgVUJTQU4gZG9zZSBub3Qg
aGF2ZSBhbnkgZXJyb3IgcmVwb3J0IGFib3V0IGl0Lg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0t
LSZuYnNwO09yaWdpbmFsJm5ic3A7LS0tLS0tLS0tLS0tLS0tLS0tDQpGcm9tOiAmbmJzcDsi
QW5kcmV3IENvb3BlciI7PGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20mZ3Q7Ow0KU2VuZCB0
aW1lOiZuYnNwO1NhdHVyZGF5LCBKdW4gMjYsIDIwMjEgOTo1MCBQTQ0KVG86Jm5ic3A7IlJy
b2FjaCI8MjI4NDY5NjEyNUBxcS5jb20mZ3Q7OyAieGVuLWRldmVsIjx4ZW4tZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcmZ3Q7OyANCg0KU3ViamVjdDogJm5ic3A7UmU6IEEgcG9zc2li
bGUgcG9pbnRlcl9vdmVyZmxvdyBpbiB4ZW4tNC4xMw0KDQoNCg0KICAgICAgICAgICBPbiAy
Ni8wNi8yMDIxIDE0OjI5LCBScm9hY2ggd3JvdGU6DQogICAgIA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGksIEkgY29tcGlsZSBYZW4tNC4xMyB3aXRoIENPTkZJR19VQlNB
TiwgYW5kIHRyeSB0ZXN0ICAgICAgICAgICAgIGl0LiBIb3dldmVyLCBkdXJpbmcgdGVzdGlu
ZywgeGwgZG1lc2cgZ290IHRoZSBvdXRwdXQgYXMgICAgICAgICAgICAgc2hvd24gYmVsb3cu
DQogICAgICAgICAgIA0KICAgICAgICAgICANCiAgICAgICAgICAgSXQgc2VlbXMgdGhhdCB0
aGVyZSBpcyBhIHBvdGVudGlhbCBwb2ludGVyIG92ZXJmbG93ICAgICAgICAgICAgIHdpdGhp
biBhcmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYzoxMzEgd2hlcmUgeGVuIHRyeSB0byAgICAg
ICAgICAgICBleGVjdXRlIGluc3RydWN0aW9uICcnJyBBUFBFTkRfQ0FMTChzYXZlX2d1ZXN0
X2dwcnMpICAgICAgICAgICAgICcnJ6Osd2hlcmUgQVBQRU5EX0NBTEwgdHJ5IHRvIGFkZCBh
biBvZmZzZXQgb24gKnAgd2l0aG91dCAgICAgICAgICAgICBwcm9wZXIgY2hlY2tpbmcuDQog
ICAgICAgICAgIA0KICAgICAgICAgICANCiAgICAgICAgICAgSSBjb21waWxlZCB4ZW4tNC4x
MyBieSBjbGFuZy05LCB3aXRoIGZvbGxvd2luZyAgICAgICAgICAgICBpbnN0cnVjdGlvbnM6
ICcnJyBleHBvcnQgQ09ORklHX1VCU0FOPXkgJycnICZhbXA7JmFtcDsgJycnICAgICAgICAg
ICAgIG1ha2UgY2xhbmc9eSBkZWJ1Zz15ICcnJyAuIERvIHlvdSBoYXZlIGFueSBpZGVhIHdo
YXQgZ29pbmcgICAgICAgICAgICAgb24gaGVyZT8NCiAgICAgICAgIA0KICAgICAgICAgIA0K
ICAgICBZb3Ugc2F5IFhlbiA0LjEzLCBidXQgQVBQRU5EX0NBTEwoKSBkb2Vzbid0IGV4aXN0
ICAgICAgIHRoZXJlLiZuYnNwOyBJIGFkZGVkIGl0IGluIDQuMTQgd2hlbiBJIHJld3JvdGUg
dGhpcyBtZXNzIHRvIGJlICAgICAgIGNvbXBhdGlibGUgd2l0aCBDRVQgYnkgbm90IHVzaW5n
IGEgUk9QIGdhZGdldC4mbmJzcDsgWW91ciBiYWNrdHJhY2UgICAgICAgc2F5cyA0LjE1IHVu
c3RhYmxlIHdoaWNoIG1lYW5zIGl0cyBhbiBvbGQgc3RhZ2luZyBidWlsZCAobm90IHRoYXQg
ICAgICAgdGhhdCBpcyBnb2luZyB0byBoYXZlIGFueSBlZmZlY3Qgb24gdGhpcyBzcGVjaWZp
YyBpc3N1ZSkuDQogICAgICAgDQogICAgICAgVGhlIGZhY3QgdGhhdCBpdCBjb250aW51ZWQg
ZXhlY3V0aW5nIGNvcnJlY3RseSBtZWFucyB0aGUgICAgICAgY2FsY3VsYXRpb24gZGlkIHRo
ZSByaWdodCB0aGluZywgd2hldGhlciBvciBub3QgVUJTQU4gd2FzIGhhcHB5LiAgICAgICAg
VGhlIGRpc3BsYWNlbWVudCB3aWxsIGVuZCB1cCBuZWdhdGl2ZSBhcyB0aGUgc3R1YiB3ZSdy
ZSB3cml0aW5nIGlzICAgICAgIG51bWVyaWNhbGx5IGhpZ2hlciB0aGFuIHtsb2FkLHNhdmV9
X2d1ZXN0X2dwcnMoKSwgd2hpY2ggSSBndWVzcyAgICAgICBtZWFucyB0aGF0IGYgLSBzdHVi
X3ZhIHdpbGwgdW5kZXJmbG93Lg0KICAgICAgIA0KICAgICAgIEknbSB2ZXJ5IGNvbmZ1c2Vk
IGFzIHRvIHdoeSBVQlNBTiByZXBvcnRzIGFnYWluc3QgICAgICAgc2F2ZV9ndWVzdF9ncHJz
KCkgY29uc2lkZXJpbmcgdGhhdCBsb2FkX2d1ZXN0X2dwcnMoKSB3aGVuIHRocm91Z2ggICAg
ICAgdGhlIGV4YWN0IHNhbWUgbG9naWMgYSBmZXcgaW5zdHJ1Y3Rpb25zIGVhcmxpZXIuDQog
ICAgICAgDQogICAgICAgRWl0aGVyIHdheSwgZG9lcyB0aGlzIG1ha2UgdGhlIHByb2JsZW0g
Z28gYXdheT8NCiAgICAgICANCiAgICAgICBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2
L2VtdWwtcHJpdi1vcC5jICAgICAgIGIveGVuL2FyY2gveDg2L3B2L2VtdWwtcHJpdi1vcC5j
DQogICAgICAgaW5kZXggMTE0NjdhMWUzYS4uYmU0MWJjZWQ3NiAxMDA2NDQNCiAgICAgICAt
LS0gYS94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMNCiAgICAgICArKysgYi94ZW4v
YXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMNCiAgICAgICBAQCAtOTgsNyArOTgsNyBAQCBz
dGF0aWMgaW9fZW11bF9zdHViX3QgKmlvX2VtdWxfc3R1Yl9zZXR1cChzdHJ1Y3QgICAgICAg
cHJpdl9vcF9jdHh0ICpjdHh0LCB1OCBvcGNvZGUsDQogICAgICAgJm5ic3A7I2RlZmluZSBB
UFBFTkRfQlVGRihiKSAoeyBtZW1jcHkocCwgYiwgc2l6ZW9mKGIpKTsgcCArPSAgICAgICBz
aXplb2YoYik7IH0pDQogICAgICAgJm5ic3A7I2RlZmluZSAgICAgICBBUFBFTkRfQ0FMTChm
KSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyAmbmJzcDsgXA0KICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyAgICAg
ICAgKHsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgICAgICAgIFwNCiAgICAgICAtJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7ICZuYnNwOyBsb25nIGRpc3AgPSAobG9uZykoZikgLSAoc3R1Yl92YSArIHAgLSAg
ICAgICBjdHh0LSZndDtpb19lbXVsX3N0dWIgKyA1KTsgXA0KICAgICAgICsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChs
b25nKShzdHViX3ZhICsgcCAtICAgICAgIGN0eHQtJmd0O2lvX2VtdWxfc3R1YiArIDUpOyBc
DQogICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyBC
VUdfT04oKGludDMyX3QpZGlzcCAhPSAgICAgICBkaXNwKTsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgJm5ic3A7IFwNCiAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgJm5ic3A7ICpwKysgPSAgICAgICAweGU4OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyAmbmJzcDsgXA0KICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyAmbmJzcDsgKihpbnQzMl90ICopcCA9IGRpc3A7IHAgKz0gICAgICAgNDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7IFwNCiAgICAgICANCiAgICAgICB+QW5kcmV3


------=_NextPart_60E5122B_0FC65F28_4BEFFF19
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9R0IxODAzMCI+PGRpdj5BZnRlciBwYXRjaGluZyBpdCwgdGhpcyB3b3JrcyBmaW5l
IGFuZCBVQlNBTiBkb3NlIG5vdCBoYXZlIGFueSBlcnJvciByZXBvcnQgYWJvdXQgaXQuPC9k
aXY+PGRpdj48YnI+PC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6IDEycHg7Zm9u
dC1mYW1pbHk6IEFyaWFsIE5hcnJvdztwYWRkaW5nOjJweCAwIDJweCAwOyI+LS0tLS0tLS0t
LS0tLS0tLS0tJm5ic3A7T3JpZ2luYWwmbmJzcDstLS0tLS0tLS0tLS0tLS0tLS08L2Rpdj48
ZGl2IHN0eWxlPSJmb250LXNpemU6IDEycHg7YmFja2dyb3VuZDojZWZlZmVmO3BhZGRpbmc6
OHB4OyI+PGRpdj48Yj5Gcm9tOiA8L2I+Jm5ic3A7IkFuZHJldyBDb29wZXIiOyZsdDthbmRy
ZXcuY29vcGVyM0BjaXRyaXguY29tJmd0Ozs8L2Rpdj48ZGl2PjxiPlNlbmQgdGltZTo8L2I+
Jm5ic3A7U2F0dXJkYXksIEp1biAyNiwgMjAyMSA5OjUwIFBNPC9kaXY+PGRpdj48Yj5Ubzo8
L2I+Jm5ic3A7IlJyb2FjaCImbHQ7MjI4NDY5NjEyNUBxcS5jb20mZ3Q7OyAieGVuLWRldmVs
IiZsdDt4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcmZ3Q7OyA8d2JyPjwvZGl2Pjxk
aXY+PC9kaXY+PGRpdj48Yj5TdWJqZWN0OiA8L2I+Jm5ic3A7UmU6IEEgcG9zc2libGUgcG9p
bnRlcl9vdmVyZmxvdyBpbiB4ZW4tNC4xMzwvZGl2PjwvZGl2PjxkaXY+PGJyPjwvZGl2PgoK
CiAgCiAgCiAgICA8ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDI2LzA2LzIwMjEg
MTQ6MjksIFJyb2FjaCB3cm90ZTo8YnI+CiAgICA8L2Rpdj4KICAgIDxibG9ja3F1b3RlIHR5
cGU9ImNpdGUiIGNpdGU9Im1pZDp0ZW5jZW50X0ExN0NBN0JBNjNGNkU0N0IzRkU3QjFBQzU0
RTU1QjJBMzYwOUBxcS5jb20iPgogICAgICAKICAgICAgPGRpdj48Zm9udCBzaXplPSIzIj4K
ICAgICAgICAgIDxkaXY+SGksIEkgY29tcGlsZSBYZW4tNC4xMyB3aXRoIENPTkZJR19VQlNB
TiwgYW5kIHRyeSB0ZXN0CiAgICAgICAgICAgIGl0LiBIb3dldmVyLCBkdXJpbmcgdGVzdGlu
ZywgeGwgZG1lc2cgZ290IHRoZSBvdXRwdXQgYXMKICAgICAgICAgICAgc2hvd24gYmVsb3cu
PC9kaXY+CiAgICAgICAgICA8ZGl2Pjxicj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAg
PGRpdj5JdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGEgcG90ZW50aWFsIHBvaW50ZXIgb3ZlcmZs
b3cKICAgICAgICAgICAgd2l0aGluIGFyY2gveDg2L3B2L2VtdWwtcHJpdi1vcC5jOjEzMSB3
aGVyZSB4ZW4gdHJ5IHRvCiAgICAgICAgICAgIGV4ZWN1dGUgaW5zdHJ1Y3Rpb24gJycnIEFQ
UEVORF9DQUxMKHNhdmVfZ3Vlc3RfZ3BycykKICAgICAgICAgICAgJycno6x3aGVyZSBBUFBF
TkRfQ0FMTCB0cnkgdG8gYWRkIGFuIG9mZnNldCBvbiAqcCB3aXRob3V0CiAgICAgICAgICAg
IHByb3BlciBjaGVja2luZy48L2Rpdj4KICAgICAgICAgIDxkaXY+PGJyPgogICAgICAgICAg
PC9kaXY+CiAgICAgICAgICA8ZGl2PkkgY29tcGlsZWQgeGVuLTQuMTMgYnkgY2xhbmctOSwg
d2l0aCBmb2xsb3dpbmcKICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnJycgZXhwb3J0IENP
TkZJR19VQlNBTj15ICcnJyAmYW1wOyZhbXA7ICcnJwogICAgICAgICAgICBtYWtlIGNsYW5n
PXkgZGVidWc9eSAnJycgLiBEbyB5b3UgaGF2ZSBhbnkgaWRlYSB3aGF0IGdvaW5nCiAgICAg
ICAgICAgIG9uIGhlcmU/PC9kaXY+CiAgICAgICAgPC9mb250PjwvZGl2PgogICAgPC9ibG9j
a3F1b3RlPgogICAgPGJyPgogICAgPGZvbnQgc2l6ZT0iMyI+WW91IHNheSBYZW4gNC4xMywg
YnV0IEFQUEVORF9DQUxMKCkgZG9lc24ndCBleGlzdAogICAgICB0aGVyZS4mbmJzcDsgSSBh
ZGRlZCBpdCBpbiA0LjE0IHdoZW4gSSByZXdyb3RlIHRoaXMgbWVzcyB0byBiZQogICAgICBj
b21wYXRpYmxlIHdpdGggQ0VUIGJ5IG5vdCB1c2luZyBhIFJPUCBnYWRnZXQuJm5ic3A7IFlv
dXIgYmFja3RyYWNlCiAgICAgIHNheXMgNC4xNSB1bnN0YWJsZSB3aGljaCBtZWFucyBpdHMg
YW4gb2xkIHN0YWdpbmcgYnVpbGQgKG5vdCB0aGF0CiAgICAgIHRoYXQgaXMgZ29pbmcgdG8g
aGF2ZSBhbnkgZWZmZWN0IG9uIHRoaXMgc3BlY2lmaWMgaXNzdWUpLjxicj4KICAgICAgPGJy
PgogICAgICBUaGUgZmFjdCB0aGF0IGl0IGNvbnRpbnVlZCBleGVjdXRpbmcgY29ycmVjdGx5
IG1lYW5zIHRoZQogICAgICBjYWxjdWxhdGlvbiBkaWQgdGhlIHJpZ2h0IHRoaW5nLCB3aGV0
aGVyIG9yIG5vdCBVQlNBTiB3YXMgaGFwcHkuIAogICAgICBUaGUgZGlzcGxhY2VtZW50IHdp
bGwgZW5kIHVwIG5lZ2F0aXZlIGFzIHRoZSBzdHViIHdlJ3JlIHdyaXRpbmcgaXMKICAgICAg
bnVtZXJpY2FsbHkgaGlnaGVyIHRoYW4ge2xvYWQsc2F2ZX1fZ3Vlc3RfZ3BycygpLCB3aGlj
aCBJIGd1ZXNzCiAgICAgIG1lYW5zIHRoYXQgZiAtIHN0dWJfdmEgd2lsbCB1bmRlcmZsb3cu
PGJyPgogICAgICA8YnI+CiAgICAgIEknbSB2ZXJ5IGNvbmZ1c2VkIGFzIHRvIHdoeSBVQlNB
TiByZXBvcnRzIGFnYWluc3QKICAgICAgc2F2ZV9ndWVzdF9ncHJzKCkgY29uc2lkZXJpbmcg
dGhhdCBsb2FkX2d1ZXN0X2dwcnMoKSB3aGVuIHRocm91Z2gKICAgICAgdGhlIGV4YWN0IHNh
bWUgbG9naWMgYSBmZXcgaW5zdHJ1Y3Rpb25zIGVhcmxpZXIuPGJyPgogICAgICA8YnI+CiAg
ICAgIEVpdGhlciB3YXksIGRvZXMgdGhpcyBtYWtlIHRoZSBwcm9ibGVtIGdvIGF3YXk/PGJy
PgogICAgICA8YnI+CiAgICAgIGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bC1w
cml2LW9wLmMKICAgICAgYi94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmM8YnI+CiAg
ICAgIGluZGV4IDExNDY3YTFlM2EuLmJlNDFiY2VkNzYgMTAwNjQ0PGJyPgogICAgICAtLS0g
YS94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmM8YnI+CiAgICAgICsrKyBiL3hlbi9h
cmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYzxicj4KICAgICAgQEAgLTk4LDcgKzk4LDcgQEAg
c3RhdGljIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0CiAgICAg
IHByaXZfb3BfY3R4dCAqY3R4dCwgdTggb3Bjb2RlLDxicj4KICAgICAgJm5ic3A7I2RlZmlu
ZSBBUFBFTkRfQlVGRihiKSAoeyBtZW1jcHkocCwgYiwgc2l6ZW9mKGIpKTsgcCArPQogICAg
ICBzaXplb2YoYik7IH0pPGJyPgogICAgICAmbmJzcDsjZGVmaW5lCiAgICAgIEFQUEVORF9D
QUxMKGYpJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyBcPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJz
cDsgCiAgICAgICh7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IAogICAgICBcPGJyPgogICAgICAtJm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyBsb25nIGRpc3AgPSAobG9uZykoZikgLSAoc3R1Yl92
YSArIHAgLQogICAgICBjdHh0LSZndDtpb19lbXVsX3N0dWIgKyA1KTsgXDxicj4KICAgICAg
KyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgbG9uZyBkaXNwID0gKGxv
bmcpKGYpIC0gKGxvbmcpKHN0dWJfdmEgKyBwIC0KICAgICAgY3R4dC0mZ3Q7aW9fZW11bF9z
dHViICsgNSk7IFw8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyAmbmJzcDsgQlVHX09OKChpbnQzMl90KWRpc3AgIT0KICAgICAgZGlzcCk7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyBcPGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7ICpwKysgPQogICAgICAweGU4OyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgXDxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyAqKGludDMyX3QgKilwID0gZGlzcDsgcCArPQog
ICAgICA0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgXDxicj4KICAg
ICAgPGJyPgogICAgICB+QW5kcmV3PC9mb250Pjxicj48L2Rpdj4=

------=_NextPart_60E5122B_0FC65F28_4BEFFF19--



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 02:42:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 02:42:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151818.280499 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0xVm-0003F8-Qv; Wed, 07 Jul 2021 02:42:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151818.280499; Wed, 07 Jul 2021 02:42:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0xVm-0003F1-Nc; Wed, 07 Jul 2021 02:42:06 +0000
Received: by outflank-mailman (input) for mailman id 151818;
 Wed, 07 Jul 2021 02:42:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0xVl-0003EV-M1; Wed, 07 Jul 2021 02:42:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0xVl-0000iq-Gt; Wed, 07 Jul 2021 02:42:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0xVl-0000EZ-96; Wed, 07 Jul 2021 02:42:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0xVl-00053n-8c; Wed, 07 Jul 2021 02:42:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Ii9Lf05PxVL/yGz81By2M+tWpPiG2XNFcd3Torf/Eqo=; b=lcF2b4iAOzJilN1NhnU24AATub
	tk8gYnlgzYVRO7uOtbPrN/xt5tZaWlnr8kW8lkiSDstNStQ1hMs8UcUJ6B7N7tYu2p0dn/xCzDrTy
	f2KjbqDI6894ObXbECAfoLgn8yVcpjcjnaaJ6lOGm9Ya4evH796a5ELF7DbDPtZ6dthw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163375-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163375: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 02:42:05 +0000

flight 163375 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163375/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days   10 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 03:45:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 03:45:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151826.280516 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yUW-0000U4-Hr; Wed, 07 Jul 2021 03:44:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151826.280516; Wed, 07 Jul 2021 03:44:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yUW-0000Tx-EK; Wed, 07 Jul 2021 03:44:52 +0000
Received: by outflank-mailman (input) for mailman id 151826;
 Wed, 07 Jul 2021 03:44:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0yUV-0000Tn-NS; Wed, 07 Jul 2021 03:44:51 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0yUV-0001j2-Co; Wed, 07 Jul 2021 03:44:51 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0yUV-0002Lh-4z; Wed, 07 Jul 2021 03:44:51 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0yUV-0000q1-4X; Wed, 07 Jul 2021 03:44:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/alqknJnOtxIsERcWhAngjLqHJJCKMbGroi0Tk2KV4Q=; b=WKFzOQsQtqJrfaEZPBJgdGgoDA
	X6yGe++bO6nuc8aQbwiICV4wQ7V7BqZRZjtkb5No9PBbVbvD1ayLsJrhNQ4fcvgbV13ZU0UEPmfeU
	txMcF21Nl/O2qO4T8kmIW/iUZ9O5f4ZcjTVNl8KcZhLs/QTWExkrfwiJ/TC0bVpYldIo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163379-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163379: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 03:44:51 +0000

flight 163379 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163379/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days   11 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:01:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:01:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151450.280547 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ykb-0003BL-EO; Wed, 07 Jul 2021 04:01:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151450.280547; Wed, 07 Jul 2021 04:01:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ykb-0003BC-B6; Wed, 07 Jul 2021 04:01:29 +0000
Received: by outflank-mailman (input) for mailman id 151450;
 Tue, 06 Jul 2021 15:11:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=x8UJ=L6=linaro.org=mathieu.poirier@srs-us1.protection.inumbo.net>)
 id 1m0mjZ-0004PU-BY
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:11:37 +0000
Received: from mail-il1-x135.google.com (unknown [2607:f8b0:4864:20::135])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 43b3c2aa-bbd2-4781-9d1d-377ccb5de7ad;
 Tue, 06 Jul 2021 15:11:36 +0000 (UTC)
Received: by mail-il1-x135.google.com with SMTP id f12so14772218ils.11
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 08:11:36 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 43b3c2aa-bbd2-4781-9d1d-377ccb5de7ad
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=linaro.org; s=google;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=4MFz8ETd/nmuIWZiubiifP+Omq2X9iSE9tCmj3gucYM=;
        b=IvCXivhuxpkQcwCSP/v/Rrn0oejjH/xBgjRtfoGhDm7lPAT9ogutmMgacy+clPyi90
         DRK6HgR8AmsyVM4QORABjf/IAyGQ3UrkgNOTqIRMXsHteuk6/x/Br3dCjgnqoJCe77/0
         NoZ6+4GEFW/mdLd6ihS8LHap9sTax8kG5BzSjYrBjsLKheGiGE55U68yC8yRpvGR3lrH
         i1lwKI80NFV0bQ+s0xhkaB3n4XHhOaW+jqS4RzYr17yLCz7jyCyj2zJOvQd/bsO7dMy8
         2ctnoUx7hTSh3dWCQ/T9gwlXwnhJ8TT3KyPZF8lHiLfnzYjBh4g93fOsXwM2kjJbuutz
         CEWA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=4MFz8ETd/nmuIWZiubiifP+Omq2X9iSE9tCmj3gucYM=;
        b=AQjAXKAxrz6/Sldm/juWxrwmaVDtHtAE/sjtVh8hPuMjujGfSlZbU0/mRNRC4pFc6Q
         ZSurYKWpXYZ3nacGb1fGRjpsrLlrRf+0atsTvKuN/BUOhoWYWG0+QH3J+N3qO5ClhJc5
         Km5gCxMV0gMHJhg/e+5JO4M44G4gh/iaVBhvDkMFgotpWrBFlS9fIME6PRiZ6W6/DlwL
         YqhoXz39wIOjvAB4D/r/V+lD7PS/gsY9vI4SBqKwiGC7VW5g8vA+D4AF28gAtskRwA/1
         2aHqBx1Qqe6C4MWvjsYbliSLXYzyKjoeOXeADeqZiN22MXoYWRTOs4hSbLH+UOriEBcu
         6f+w==
X-Gm-Message-State: AOAM533N5/8odJaBQJdJrJtZeata03bm+FU/nNzJQTAl9Vx3uv6Sft7r
	dr32k1S5nyDr0Ddv4mnE0VRH7Rnu9IvwuzYHixrlsA==
X-Google-Smtp-Source: ABdhPJzdclmD8PsHwW9RgRKWE0tJHszXQy4UssslzUqRBaLI9w/Jj1BdJnRyjKvoHgub8buDAUaWux7OCTROnp7miaQ=
X-Received: by 2002:a05:6e02:1a0f:: with SMTP id s15mr14885840ild.58.1625584295743;
 Tue, 06 Jul 2021 08:11:35 -0700 (PDT)
MIME-Version: 1.0
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
From: Mathieu Poirier <mathieu.poirier@linaro.org>
Date: Tue, 6 Jul 2021 09:11:24 -0600
Message-ID: <CANLsYkz_k3rBETkFWd9mm+Lgfcyp=YgiAM8rq8DaqaOcSofEkA@mail.gmail.com>
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, 
	Pengutronix Kernel Team <kernel@pengutronix.de>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>, 
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, 
	Ben Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>, 
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>, 
	Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep Holla <sudeep.holla@arm.com>, 
	Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, 
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>, 
	Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, 
	Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, 
	Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, 
	Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, 
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>, 
	Heikki Krogerus <heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>, 
	Jason Wang <jasowang@redhat.com>, Kirti Wankhede <kwankhede@nvidia.com>, 
	Alex Williamson <alex.williamson@redhat.com>, Cornelia Huck <cohuck@redhat.com>, 
	Martyn Welch <martyn@welchs.me.uk>, Manohar Vanga <manohar.vanga@gmail.com>, 
	Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, 
	Stefano Stabellini <sstabellini@kernel.org>, Johannes Berg <johannes@sipsolutions.net>, 
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, 
	Tyrel Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, 
	Samuel Holland <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, 
	Alexey Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng <kai.heng.feng@canonical.com>, 
	Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, linux-arm-kernel <linux-arm-kernel@lists.infradead.org>, 
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, 
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, 
	linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev, 
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, dmaengine@vger.kernel.org, 
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org, 
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org, 
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org, 
	industrypack-devel@lists.sourceforge.net, linux-media@vger.kernel.org, 
	linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-ntb@googlegroups.com, 
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org, 
	linux-remoteproc <linux-remoteproc@vger.kernel.org>, linux-scsi@vger.kernel.org, 
	alsa-devel@alsa-project.org, linux-arm-msm <linux-arm-msm@vger.kernel.org>, 
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, 
	xen-devel@lists.xenproject.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, 6 Jul 2021 at 03:56, Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
>
> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove
> return void" that is not yet applied, see
> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutro=
nix.de.
>
> I tested it using allmodconfig on amd64 and arm, but I wouldn't be
> surprised if I still missed to convert a driver. So it would be great to
> get this into next early after the merge window closes.
>
> I send this mail to all people that get_maintainer.pl emits for this
> patch. I wonder how many recipents will refuse this mail because of the
> long Cc: list :-)
>
> Best regards
> Uwe
>
>  arch/arm/common/locomo.c                  | 3 +--
>  arch/arm/common/sa1111.c                  | 4 +---
>  arch/arm/mach-rpc/ecard.c                 | 4 +---
>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
>  arch/parisc/kernel/drivers.c              | 5 ++---
>  arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
>  arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
>  arch/powerpc/platforms/pseries/vio.c      | 3 +--
>  drivers/acpi/bus.c                        | 3 +--
>  drivers/amba/bus.c                        | 4 +---
>  drivers/base/auxiliary.c                  | 4 +---
>  drivers/base/isa.c                        | 4 +---
>  drivers/base/platform.c                   | 4 +---
>  drivers/bcma/main.c                       | 6 ++----
>  drivers/bus/sunxi-rsb.c                   | 4 +---
>  drivers/cxl/core.c                        | 3 +--
>  drivers/dax/bus.c                         | 4 +---
>  drivers/dma/idxd/sysfs.c                  | 4 +---
>  drivers/firewire/core-device.c            | 4 +---
>  drivers/firmware/arm_scmi/bus.c           | 4 +---
>  drivers/firmware/google/coreboot_table.c  | 4 +---
>  drivers/fpga/dfl.c                        | 4 +---
>  drivers/hid/hid-core.c                    | 4 +---
>  drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
>  drivers/hv/vmbus_drv.c                    | 5 +----
>  drivers/hwtracing/intel_th/core.c         | 4 +---
>  drivers/i2c/i2c-core-base.c               | 5 +----
>  drivers/i3c/master.c                      | 4 +---
>  drivers/input/gameport/gameport.c         | 3 +--
>  drivers/input/serio/serio.c               | 3 +--
>  drivers/ipack/ipack.c                     | 4 +---
>  drivers/macintosh/macio_asic.c            | 4 +---
>  drivers/mcb/mcb-core.c                    | 4 +---
>  drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
>  drivers/memstick/core/memstick.c          | 3 +--
>  drivers/mfd/mcp-core.c                    | 3 +--
>  drivers/misc/mei/bus.c                    | 4 +---
>  drivers/misc/tifm_core.c                  | 3 +--
>  drivers/mmc/core/bus.c                    | 4 +---
>  drivers/mmc/core/sdio_bus.c               | 4 +---
>  drivers/net/netdevsim/bus.c               | 3 +--
>  drivers/ntb/core.c                        | 4 +---
>  drivers/ntb/ntb_transport.c               | 4 +---
>  drivers/nvdimm/bus.c                      | 3 +--
>  drivers/pci/endpoint/pci-epf-core.c       | 4 +---
>  drivers/pci/pci-driver.c                  | 3 +--
>  drivers/pcmcia/ds.c                       | 4 +---
>  drivers/platform/surface/aggregator/bus.c | 4 +---
>  drivers/platform/x86/wmi.c                | 4 +---
>  drivers/pnp/driver.c                      | 3 +--
>  drivers/rapidio/rio-driver.c              | 4 +---
>  drivers/rpmsg/rpmsg_core.c                | 4 +---

Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:01:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:01:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151436.280536 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ykL-0002oS-2a; Wed, 07 Jul 2021 04:01:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151436.280536; Wed, 07 Jul 2021 04:01:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ykK-0002oL-VV; Wed, 07 Jul 2021 04:01:12 +0000
Received: by outflank-mailman (input) for mailman id 151436;
 Tue, 06 Jul 2021 15:07:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=g5ll=L6=gmail.com=yehezkelshb@srs-us1.protection.inumbo.net>)
 id 1m0mfC-0002Qn-15
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:07:06 +0000
Received: from mail-ej1-x631.google.com (unknown [2a00:1450:4864:20::631])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c4ae140e-274b-4faf-a4c7-98f60c616b85;
 Tue, 06 Jul 2021 15:07:05 +0000 (UTC)
Received: by mail-ej1-x631.google.com with SMTP id gn32so34727474ejc.2
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 08:07:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c4ae140e-274b-4faf-a4c7-98f60c616b85
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=+9dsgPbS//aUCZUFixPgGcG7qxsG2EJ3dbyOzFDh8TA=;
        b=SBHfWn821HxdveyktStHQrYDe4MbFpbgRsAdNfnT39UeMrTpAkqi5Mw9J7eZv7cX8o
         4IiMGVVUkNi11aAd4XiuIPLnSf4etnUsfgOrP0HPkyuBpadE2fbx2e+Mv3rlJzIHAso+
         o7XaFo1UlSb/NBSAjQV11bNqf2gionJphJcRl4YCGJk45hXp5V+Gpo6AbrJv2xqP31dM
         +oUmVZwHbjtRk+sinfDNsF+kPOGLbKlYnyzpn0vB+NsB4Whl5CCwUy8NwaOykBdFTFHG
         XhUidv7/qS7jG1fnPfvqgohVjfRj0vLF0MFd7Vbksyj/BKvpyZ1bN9xNMq5MG35cMCap
         n6sA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=+9dsgPbS//aUCZUFixPgGcG7qxsG2EJ3dbyOzFDh8TA=;
        b=lVWjueOBiFosBz6qtBkqyTJapUkZDp1oXgOWu/DbgPuc9cC/Me7nx+CPMsjJCLTFg7
         bLlmXmCHcD2RKOPli077+tq8ID2+4BnA4jAEJJufqA3NpcDfjfDJomwcVWBuY3oZMpQ3
         5vcCA8WQrrcGoR3CbJdfqBLFeWmyYcPRauKh0Z+D8I1rkU6BD/UMJRhKwpExj1VinyR4
         x5PBjKGWHgrcLQG9z3gfbrvGxGkgTv0gR44iwrPBltG0I37uxizCftwVvrPgVttAM+UQ
         RxaP4bOr7kmSM5JFPL/jJlYZb1JhwU5CJyzlQDpqQpKlCjxtOnRpwQ+JV6+2zhPZF9cF
         mHHg==
X-Gm-Message-State: AOAM530mSy70mms94VVNwNTOw4GR7m5dBATkjfH4WYqpOeQEW5b0vNFd
	eMjc3sI190mV1nHBTYK6o5B6KsNDFqHbSG81Hm0=
X-Google-Smtp-Source: ABdhPJyx2s89fjP7kWr4sVrlETefy/K9QI98mSZLW/XMLqqA4vHIWAGZQnqqZ+CiP6xjmA9K+asUF6gnTpo1w9tsizc=
X-Received: by 2002:a17:907:6289:: with SMTP id nd9mr19151547ejc.384.1625584024338;
 Tue, 06 Jul 2021 08:07:04 -0700 (PDT)
MIME-Version: 1.0
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
From: Yehezkel Bernat <yehezkelshb@gmail.com>
Date: Tue, 6 Jul 2021 18:06:47 +0300
Message-ID: <CA+CmpXu5-NCvfuOc8fso2a9bmi0Dacmd=+u=XB-Wd7X=WgOTBA@mail.gmail.com>
Subject: Re: [PATCH] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de, 
	LKML <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>, 
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, 
	Ben Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>, 
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>, 
	Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep Holla <sudeep.holla@arm.com>, 
	Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, 
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>, 
	Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, 
	Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, 
	Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, 
	Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Rob Herring <robh@kernel.org>, 
	Jiri Slaby <jirislaby@kernel.org>, Heikki Krogerus <heikki.krogerus@linux.intel.com>, 
	"Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>, 
	Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson <alex.williamson@redhat.com>, 
	Cornelia Huck <cohuck@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, 
	Manohar Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Juergen Gross <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>, 
	Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, 
	Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler <tyreld@linux.ibm.com>, 
	Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland <samuel@sholland.org>, 
	Qinglang Miao <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>, 
	Kai-Heng Feng <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, 
	=?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org, 
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, 
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, 
	linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev, 
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, dmaengine@vger.kernel.org, 
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org, 
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org, 
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org, 
	industrypack-devel@lists.sourceforge.net, linux-media@vger.kernel.org, 
	linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-ntb@googlegroups.com, 
	Linux PCI <linux-pci@vger.kernel.org>, platform-driver-x86@vger.kernel.org, 
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org, 
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org, 
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, 
	xen-devel@lists.xenproject.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 6, 2021 at 12:50 PM Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---

>
>  drivers/thunderbolt/domain.c              | 4 +---

For Thunderbolt:

Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:01:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:01:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151452.280558 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ykp-0003mj-Ne; Wed, 07 Jul 2021 04:01:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151452.280558; Wed, 07 Jul 2021 04:01:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ykp-0003mc-KG; Wed, 07 Jul 2021 04:01:43 +0000
Received: by outflank-mailman (input) for mailman id 151452;
 Tue, 06 Jul 2021 15:12:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Gg2m=L6=linux.intel.com=alexander.shishkin@srs-us1.protection.inumbo.net>)
 id 1m0mka-0004TB-F5
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:12:40 +0000
Received: from mga18.intel.com (unknown [134.134.136.126])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 999a881a-de6c-11eb-84a5-12813bfff9fa;
 Tue, 06 Jul 2021 15:12:38 +0000 (UTC)
Received: from orsmga002.jf.intel.com ([10.7.209.21])
 by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 06 Jul 2021 08:12:36 -0700
Received: from um.fi.intel.com (HELO um) ([10.237.72.62])
 by orsmga002.jf.intel.com with ESMTP; 06 Jul 2021 08:12:00 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 999a881a-de6c-11eb-84a5-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="196414592"
X-IronPort-AV: E=Sophos;i="5.83,328,1616482800"; 
   d="scan'208";a="196414592"
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.83,328,1616482800"; 
   d="scan'208";a="427618041"
From: Alexander Shishkin <alexander.shishkin@linux.intel.com>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>, Greg
 Kroah-Hartman
 <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org, Russell King
 <linux@armlinux.org.uk>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>, Helge
 Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>, Michael
 Ellerman <mpe@ellerman.id.au>, Benjamin Herrenschmidt
 <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, "Rafael J.
 Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, William
 Breathitt Gray <vilhelm.gray@gmail.com>, =?utf-8?Q?Rafa=C5=82_Mi=C5=82eck?=
 =?utf-8?Q?i?= <zajec5@gmail.com>,
 Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej
 Skrabec <jernej.skrabec@gmail.com>, Alison Schofield
 <alison.schofield@intel.com>, Vishal Verma <vishal.l.verma@intel.com>, Ira
 Weiny <ira.weiny@intel.com>, Ben Widawsky <ben.widawsky@intel.com>, Dan
 Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi
 <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix
 <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, Jiri Kosina
 <jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, "K. Y.
 Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>, Wolfram Sang <wsa@kernel.org>, Alexandre
 Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
 <dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
 <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab
 <mchehab@kernel.org>, Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov
 <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones
 <lee.jones@linaro.org>, Tomas Winkler <tomas.winkler@intel.com>, Arnd
 Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>, "David S.
 Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, Allen Hubbe
 <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, Lorenzo
 Pieralisi <lorenzo.pieralisi@arm.com>, Krzysztof =?utf-8?Q?Wilczy=C5=84sk?=
 =?utf-8?Q?i?=
 <kw@linux.com>, Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski
 <linux@dominikbrodowski.net>, Maximilian Luz <luzmaximilian@gmail.com>,
 Hans de Goede <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>, Alexandre Bounine
 <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson
 <bjorn.andersson@linaro.org>, Mathieu Poirier
 <mathieu.poirier@linaro.org>, "Martin K. Petersen"
 <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross
 <agross@kernel.org>, Mark Brown <broonie@kernel.org>, Stephen Boyd
 <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, Sven Van Asbroeck
 <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder
 <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>, Michael
 Jamet <michael.jamet@intel.com>, Mika Westerberg
 <mika.westerberg@linux.intel.com>, Yehezkel Bernat
 <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri Slaby
 <jirislaby@kernel.org>, Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson
 <alex.williamson@redhat.com>, Cornelia Huck <cohuck@redhat.com>, Martyn
 Welch <martyn@welchs.me.uk>, Manohar Vanga <manohar.vanga@gmail.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross
 <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>, Johannes
 Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>,
 Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel
 Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel
 Holland <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>,
 Alexey Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng
 <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, Pali
 =?utf-8?Q?Roh=C3=A1r?= <pali@kernel.org>, Adrian Hunter
 <adrian.hunter@intel.com>, Frank Li
 <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien
 Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org, alexander.shishkin@linux.intel.com
Subject: Re: [PATCH] bus: Make remove callback return void
In-Reply-To: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de>
Date: Tue, 06 Jul 2021 18:11:59 +0300
Message-ID: <87eecbjx34.fsf@ashishki-desk.ger.corp.intel.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de> writes:

> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>

FWIW, the intel_th bit is

Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:02:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:02:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151527.280574 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ylt-0004i7-Di; Wed, 07 Jul 2021 04:02:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151527.280574; Wed, 07 Jul 2021 04:02:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ylt-0004hG-8P; Wed, 07 Jul 2021 04:02:49 +0000
Received: by outflank-mailman (input) for mailman id 151527;
 Tue, 06 Jul 2021 15:56:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8YKr=L6=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m0nQZ-0005i3-UW
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:56:03 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 97f1e75a-7d92-4176-aa0a-a98aa3778546;
 Tue, 06 Jul 2021 15:56:02 +0000 (UTC)
Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0nLI-0007mL-3h; Tue, 06 Jul 2021 17:50:36 +0200
Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0nL5-0005Si-VW; Tue, 06 Jul 2021 17:50:23 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 97f1e75a-7d92-4176-aa0a-a98aa3778546
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	Cornelia Huck <cohuck@redhat.com>,
	linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>,
	Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>,
	Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>,
	Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>,
	Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>,
	Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>,
	Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>,
	Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>,
	Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>,
	David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>,
	Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev,
	linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev,
	dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org,
	platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org,
	linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org,
	target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org,
	linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: [PATCH v2 0/4] bus: Make remove callback return void
Date: Tue,  6 Jul 2021 17:47:59 +0200
Message-Id: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

Hello,

compared to (implicit) v1 that I sent earlier today
(https://lore.kernel.org/r/20210706095037.1425211-1-u.kleine-koenig@pengutronix.de)
the following is changed:

 - Add three more patches preparing some s390 specific busses
   and adapt them in the last patch. Thanks to Cornelia Huck for
   pointing this out.
 - Add various Acks to the last patch

I now tested allmodconfig on arm, powerpc, s390 and amd64.

As before this depends on "PCI: endpoint: Make struct pci_epf_driver::remove
return void" that is not yet applied, see
https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutronix.de.

Best regards
Uwe

Uwe Kleine-König (4):
  s390/cio: Make struct css_driver::remove return void
  s390/ccwgroup: Drop if with an always false condition
  s390/scm: Make struct scm_driver::remove return void
  bus: Make remove callback return void

 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 arch/s390/include/asm/eadm.h              | 2 +-
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 4 +---
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 4 +---
 drivers/s390/block/scm_drv.c              | 4 +---
 drivers/s390/cio/ccwgroup.c               | 6 +-----
 drivers/s390/cio/chsc_sch.c               | 3 +--
 drivers/s390/cio/css.c                    | 7 +++----
 drivers/s390/cio/css.h                    | 2 +-
 drivers/s390/cio/device.c                 | 9 +++------
 drivers/s390/cio/eadm_sch.c               | 4 +---
 drivers/s390/cio/scm.c                    | 5 +++--
 drivers/s390/cio/vfio_ccw_drv.c           | 3 +--
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 include/linux/device/bus.h                | 2 +-
 sound/aoa/soundbus/core.c                 | 4 +---
 86 files changed, 95 insertions(+), 236 deletions(-)


base-commit: 79160a603bdb51916226caf4a6616cc4e1c58a58
prerequisite-patch-id: e5c7b97ea399fddc2695e8cf5d0c02d14175abac
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:02:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:02:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151525.280569 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ylt-0004fU-30; Wed, 07 Jul 2021 04:02:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151525.280569; Wed, 07 Jul 2021 04:02:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yls-0004fN-W4; Wed, 07 Jul 2021 04:02:48 +0000
Received: by outflank-mailman (input) for mailman id 151525;
 Tue, 06 Jul 2021 15:54:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8YKr=L6=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m0nP8-0005gi-Nn
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 15:54:34 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cfb3f403-509e-447f-8587-10ad73ac84f2;
 Tue, 06 Jul 2021 15:54:29 +0000 (UTC)
Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0nLI-0007mc-4r; Tue, 06 Jul 2021 17:50:36 +0200
Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0nL6-0005Sx-So; Tue, 06 Jul 2021 17:50:25 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cfb3f403-509e-447f-8587-10ad73ac84f2
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	Cornelia Huck <cohuck@redhat.com>,
	linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>,
	Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>,
	Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>,
	Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>,
	Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>,
	Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>,
	Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>,
	Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>,
	Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>,
	David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>,
	Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev,
	linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev,
	dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org,
	platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org,
	linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org,
	target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org,
	linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org,
	Russell King <rmk+kernel@armlinux.org.uk>,
	Johannes Thumshirn <jth@kernel.org>
Subject: [PATCH v2 4/4] bus: Make remove callback return void
Date: Tue,  6 Jul 2021 17:48:03 +0200
Message-Id: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
In-Reply-To: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

The driver core ignores the return value of this callback because there
is only little it can do when a device disappears.

This is the final bit of a long lasting cleanup quest where several
buses were converted to also return void from their remove callback.
Additionally some resource leaks were fixed that were caused by drivers
returning an error code in the expectation that the driver won't go
away.

With struct bus_type::remove returning void it's prevented that newly
implemented buses return an ignored error code and so don't anticipate
wrong expectations for driver authors.

Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Amba and related parts)
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
Acked-by: Pali Rohár <pali@kernel.org>
Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Acked-By: Vinod Koul <vkoul@kernel.org>
Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
Acked-by: Johan Hovold <johan@kernel.org>
Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drivers/slimbus)
Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and typec)
Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> (For ipack)
Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---

 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 4 +---
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 4 +---
 drivers/s390/cio/ccwgroup.c               | 4 +---
 drivers/s390/cio/css.c                    | 4 +---
 drivers/s390/cio/device.c                 | 4 +---
 drivers/s390/cio/scm.c                    | 4 +---
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 include/linux/device/bus.h                | 2 +-
 sound/aoa/soundbus/core.c                 | 4 +---
 80 files changed, 83 insertions(+), 219 deletions(-)

diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index e45f4e4e06b6..24d21ba63030 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int locomo_bus_remove(struct device *dev)
+static void locomo_bus_remove(struct device *dev)
 {
 	struct locomo_dev *ldev = LOCOMO_DEV(dev);
 	struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(ldev);
-	return 0;
 }
 
 struct bus_type locomo_bus_type = {
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index ff5e0d04cb89..092a2ebc0c28 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sa1111_bus_remove(struct device *dev)
+static void sa1111_bus_remove(struct device *dev)
 {
 	struct sa1111_dev *sadev = to_sa1111_device(dev);
 	struct sa1111_driver *drv = SA1111_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(sadev);
-
-	return 0;
 }
 
 struct bus_type sa1111_bus_type = {
diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
index 827b50f1c73e..53813f9464a2 100644
--- a/arch/arm/mach-rpc/ecard.c
+++ b/arch/arm/mach-rpc/ecard.c
@@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int ecard_drv_remove(struct device *dev)
+static void ecard_drv_remove(struct device *dev)
 {
 	struct expansion_card *ec = ECARD_DEV(dev);
 	struct ecard_driver *drv = ECARD_DRV(dev->driver);
@@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
 	ec->ops = &ecard_default_ops;
 	barrier();
 	ec->irq_data = NULL;
-
-	return 0;
 }
 
 /*
diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.c
index de0768a49ee8..dfc52f661ad0 100644
--- a/arch/mips/sgi-ip22/ip22-gio.c
+++ b/arch/mips/sgi-ip22/ip22-gio.c
@@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
 	return error;
 }
 
-static int gio_device_remove(struct device *dev)
+static void gio_device_remove(struct device *dev)
 {
 	struct gio_device *gio_dev = to_gio_device(dev);
 	struct gio_driver *drv = to_gio_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(gio_dev);
-	return 0;
 }
 
 static void gio_device_shutdown(struct device *dev)
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
index 80fa0650736b..776d624a7207 100644
--- a/arch/parisc/kernel/drivers.c
+++ b/arch/parisc/kernel/drivers.c
@@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device *dev)
 	return rc;
 }
 
-static int __exit parisc_driver_remove(struct device *dev)
+static void __exit parisc_driver_remove(struct device *dev)
 {
 	struct parisc_device *pa_dev = to_parisc_device(dev);
 	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
+
 	if (pa_drv->remove)
 		pa_drv->remove(pa_dev);
-
-	return 0;
 }
 	
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..cc5774c64fae 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
 	return result;
 }
 
-static int ps3_system_bus_remove(struct device *_dev)
+static void ps3_system_bus_remove(struct device *_dev)
 {
 	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
 	struct ps3_system_bus_driver *drv;
@@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
 			__func__, __LINE__, drv->core.name);
 
 	pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->core));
-	return 0;
 }
 
 static void ps3_system_bus_shutdown(struct device *_dev)
diff --git a/arch/powerpc/platforms/pseries/ibmebus.c b/arch/powerpc/platforms/pseries/ibmebus.c
index c6c79ef55e13..7ee3ed7d6cc2 100644
--- a/arch/powerpc/platforms/pseries/ibmebus.c
+++ b/arch/powerpc/platforms/pseries/ibmebus.c
@@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct device *dev)
 	return error;
 }
 
-static int ibmebus_bus_device_remove(struct device *dev)
+static void ibmebus_bus_device_remove(struct device *dev)
 {
 	struct platform_device *of_dev = to_platform_device(dev);
 	struct platform_driver *drv = to_platform_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(of_dev);
-	return 0;
 }
 
 static void ibmebus_bus_device_shutdown(struct device *dev)
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..58283cecbd52 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
 }
 
 /* convert from struct device to struct vio_dev and pass to driver. */
-static int vio_bus_remove(struct device *dev)
+static void vio_bus_remove(struct device *dev)
 {
 	struct vio_dev *viodev = to_vio_dev(dev);
 	struct vio_driver *viodrv = to_vio_driver(dev->driver);
@@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
 		vio_cmo_bus_remove(viodev);
 
 	put_device(devptr);
-	return 0;
 }
 
 static void vio_bus_shutdown(struct device *dev)
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index ee24246d88fd..51f374e42869 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -1018,7 +1018,7 @@ static int acpi_device_probe(struct device *dev)
 	return 0;
 }
 
-static int acpi_device_remove(struct device *dev)
+static void acpi_device_remove(struct device *dev)
 {
 	struct acpi_device *acpi_dev = to_acpi_device(dev);
 	struct acpi_driver *acpi_drv = acpi_dev->driver;
@@ -1033,7 +1033,6 @@ static int acpi_device_remove(struct device *dev)
 	acpi_dev->driver_data = NULL;
 
 	put_device(dev);
-	return 0;
 }
 
 struct bus_type acpi_bus_type = {
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 939ca220bf78..962041148482 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
 	return ret;
 }
 
-static int amba_remove(struct device *dev)
+static void amba_remove(struct device *dev)
 {
 	struct amba_device *pcdev = to_amba_device(dev);
 	struct amba_driver *drv = to_amba_driver(dev->driver);
@@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
 
 	amba_put_disable_pclk(pcdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void amba_shutdown(struct device *dev)
diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
index adc199dfba3c..0c86f5bed9f4 100644
--- a/drivers/base/auxiliary.c
+++ b/drivers/base/auxiliary.c
@@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int auxiliary_bus_remove(struct device *dev)
+static void auxiliary_bus_remove(struct device *dev)
 {
 	struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev->driver);
 	struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
@@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
 	if (auxdrv->remove)
 		auxdrv->remove(auxdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void auxiliary_bus_shutdown(struct device *dev)
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
index aa4737667026..55e3ee2da98f 100644
--- a/drivers/base/isa.c
+++ b/drivers/base/isa.c
@@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int isa_bus_remove(struct device *dev)
+static void isa_bus_remove(struct device *dev)
 {
 	struct isa_driver *isa_driver = dev->platform_data;
 
 	if (isa_driver && isa_driver->remove)
 		isa_driver->remove(dev, to_isa_dev(dev)->id);
-
-	return 0;
 }
 
 static void isa_bus_shutdown(struct device *dev)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 8640578f45e9..a94b7f454881 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
 	return ret;
 }
 
-static int platform_remove(struct device *_dev)
+static void platform_remove(struct device *_dev)
 {
 	struct platform_driver *drv = to_platform_driver(_dev->driver);
 	struct platform_device *dev = to_platform_device(_dev);
@@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
 			dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n");
 	}
 	dev_pm_domain_detach(_dev, true);
-
-	return 0;
 }
 
 static void platform_shutdown(struct device *_dev)
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 6535614a7dc1..e076630d17bd 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
 
 static int bcma_bus_match(struct device *dev, struct device_driver *drv);
 static int bcma_device_probe(struct device *dev);
-static int bcma_device_remove(struct device *dev);
+static void bcma_device_remove(struct device *dev);
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env);
 
 static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf)
@@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
 	return err;
 }
 
-static int bcma_device_remove(struct device *dev)
+static void bcma_device_remove(struct device *dev)
 {
 	struct bcma_device *core = container_of(dev, struct bcma_device, dev);
 	struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
@@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
 	if (adrv->remove)
 		adrv->remove(core);
 	put_device(dev);
-
-	return 0;
 }
 
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
index d46db132d085..6f225dddc74f 100644
--- a/drivers/bus/sunxi-rsb.c
+++ b/drivers/bus/sunxi-rsb.c
@@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device *dev)
 	return drv->probe(rdev);
 }
 
-static int sunxi_rsb_device_remove(struct device *dev)
+static void sunxi_rsb_device_remove(struct device *dev)
 {
 	const struct sunxi_rsb_driver *drv = to_sunxi_rsb_driver(dev->driver);
 
 	drv->remove(to_sunxi_rsb_device(dev));
-
-	return 0;
 }
 
 static struct bus_type sunxi_rsb_bus = {
diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
index a2e4d54fc7bc..2b90b7c3b9d7 100644
--- a/drivers/cxl/core.c
+++ b/drivers/cxl/core.c
@@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
 	return to_cxl_drv(dev->driver)->probe(dev);
 }
 
-static int cxl_bus_remove(struct device *dev)
+static void cxl_bus_remove(struct device *dev)
 {
 	struct cxl_driver *cxl_drv = to_cxl_drv(dev->driver);
 
 	if (cxl_drv->remove)
 		cxl_drv->remove(dev);
-	return 0;
 }
 
 struct bus_type cxl_bus_type = {
diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index 5aee26e1bbd6..6cc4da4c713d 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int dax_bus_remove(struct device *dev)
+static void dax_bus_remove(struct device *dev)
 {
 	struct dax_device_driver *dax_drv = to_dax_drv(dev->driver);
 	struct dev_dax *dev_dax = to_dev_dax(dev);
 
 	if (dax_drv->remove)
 		dax_drv->remove(dev_dax);
-
-	return 0;
 }
 
 static struct bus_type dax_bus_type = {
diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
index 0460d58e3941..5a017c62c752 100644
--- a/drivers/dma/idxd/sysfs.c
+++ b/drivers/dma/idxd/sysfs.c
@@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
 	dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
 }
 
-static int idxd_config_bus_remove(struct device *dev)
+static void idxd_config_bus_remove(struct device *dev)
 {
 	int rc;
 
@@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device *dev)
 			dev_info(dev, "Device %s disabled\n", dev_name(dev));
 
 	}
-
-	return 0;
 }
 
 static void idxd_config_bus_shutdown(struct device *dev)
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index 68216988391f..90ed8fdaba75 100644
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
 	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
 }
 
-static int fw_unit_remove(struct device *dev)
+static void fw_unit_remove(struct device *dev)
 {
 	struct fw_driver *driver =
 			container_of(dev->driver, struct fw_driver, driver);
 
 	driver->remove(fw_unit(dev));
-
-	return 0;
 }
 
 static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
index 784cf0027da3..2682c3df651c 100644
--- a/drivers/firmware/arm_scmi/bus.c
+++ b/drivers/firmware/arm_scmi/bus.c
@@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
 	return scmi_drv->probe(scmi_dev);
 }
 
-static int scmi_dev_remove(struct device *dev)
+static void scmi_dev_remove(struct device *dev)
 {
 	struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
 	struct scmi_device *scmi_dev = to_scmi_dev(dev);
 
 	if (scmi_drv->remove)
 		scmi_drv->remove(scmi_dev);
-
-	return 0;
 }
 
 static struct bus_type scmi_bus_type = {
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
index dc83ea118c67..c52bcaa9def6 100644
--- a/drivers/firmware/google/coreboot_table.c
+++ b/drivers/firmware/google/coreboot_table.c
@@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int coreboot_bus_remove(struct device *dev)
+static void coreboot_bus_remove(struct device *dev)
 {
 	struct coreboot_device *device = CB_DEV(dev);
 	struct coreboot_driver *driver = CB_DRV(dev->driver);
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 static struct bus_type coreboot_bus_type = {
diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
index 511b20ff35a3..1ae6779a0dd6 100644
--- a/drivers/fpga/dfl.c
+++ b/drivers/fpga/dfl.c
@@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
 	return ddrv->probe(ddev);
 }
 
-static int dfl_bus_remove(struct device *dev)
+static void dfl_bus_remove(struct device *dev)
 {
 	struct dfl_driver *ddrv = to_dfl_drv(dev->driver);
 	struct dfl_device *ddev = to_dfl_dev(dev);
 
 	if (ddrv->remove)
 		ddrv->remove(ddev);
-
-	return 0;
 }
 
 static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 7db332139f7d..dbed2524fd47 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
 	return ret;
 }
 
-static int hid_device_remove(struct device *dev)
+static void hid_device_remove(struct device *dev)
 {
 	struct hid_device *hdev = to_hid_device(dev);
 	struct hid_driver *hdrv;
@@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
 
 	if (!hdev->io_started)
 		up(&hdev->driver_input_lock);
-
-	return 0;
 }
 
 static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
index f0802b047ed8..8a51bd9cd093 100644
--- a/drivers/hid/intel-ish-hid/ishtp/bus.c
+++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
@@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, struct device_driver *drv)
  *
  * Return: Return value from driver remove() call.
  */
-static int ishtp_cl_device_remove(struct device *dev)
+static void ishtp_cl_device_remove(struct device *dev)
 {
 	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
 	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev->driver);
@@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 /**
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 57bbbaa4e8f7..392c1ac4f819 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -922,7 +922,7 @@ static int vmbus_probe(struct device *child_device)
 /*
  * vmbus_remove - Remove a vmbus device
  */
-static int vmbus_remove(struct device *child_device)
+static void vmbus_remove(struct device *child_device)
 {
 	struct hv_driver *drv;
 	struct hv_device *dev = device_to_hv_device(child_device);
@@ -932,11 +932,8 @@ static int vmbus_remove(struct device *child_device)
 		if (drv->remove)
 			drv->remove(dev);
 	}
-
-	return 0;
 }
 
-
 /*
  * vmbus_shutdown - Shutdown a vmbus device
  */
diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
index 66eed2dff818..7e753a75d23b 100644
--- a/drivers/hwtracing/intel_th/core.c
+++ b/drivers/hwtracing/intel_th/core.c
@@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
 
 static void intel_th_device_remove(struct intel_th_device *thdev);
 
-static int intel_th_remove(struct device *dev)
+static void intel_th_remove(struct device *dev)
 {
 	struct intel_th_driver *thdrv = to_intel_th_driver(dev->driver);
 	struct intel_th_device *thdev = to_intel_th_device(dev);
@@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_active(dev);
 	pm_runtime_enable(dev);
-
-	return 0;
 }
 
 static struct bus_type intel_th_bus = {
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 84f12bf90644..54964fbe3f03 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
 	return status;
 }
 
-static int i2c_device_remove(struct device *dev)
+static void i2c_device_remove(struct device *dev)
 {
 	struct i2c_client	*client = to_i2c_client(dev);
 	struct i2c_adapter      *adap;
@@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
 	client->irq = 0;
 	if (client->flags & I2C_CLIENT_HOST_NOTIFY)
 		pm_runtime_put(&client->adapter->dev);
-
-	/* return always 0 because there is WIP to make remove-functions void */
-	return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index e2e12a5585e5..c3b4c677b442 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
 	return driver->probe(i3cdev);
 }
 
-static int i3c_device_remove(struct device *dev)
+static void i3c_device_remove(struct device *dev)
 {
 	struct i3c_device *i3cdev = dev_to_i3cdev(dev);
 	struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
@@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
 		driver->remove(i3cdev);
 
 	i3c_device_free_ibi(i3cdev);
-
-	return 0;
 }
 
 struct bus_type i3c_bus_type = {
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index 61fa7e724172..db58a01b23d3 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device *dev)
 	return gameport->drv ? 0 : -ENODEV;
 }
 
-static int gameport_driver_remove(struct device *dev)
+static void gameport_driver_remove(struct device *dev)
 {
 	struct gameport *gameport = to_gameport_port(dev);
 	struct gameport_driver *drv = to_gameport_driver(dev->driver);
 
 	drv->disconnect(gameport);
-	return 0;
 }
 
 static void gameport_attach_driver(struct gameport_driver *drv)
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 29f491082926..ec117be3d8d8 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -778,12 +778,11 @@ static int serio_driver_probe(struct device *dev)
 	return serio_connect_driver(serio, drv);
 }
 
-static int serio_driver_remove(struct device *dev)
+static void serio_driver_remove(struct device *dev)
 {
 	struct serio *serio = to_serio_port(dev);
 
 	serio_disconnect_driver(serio);
-	return 0;
 }
 
 static void serio_cleanup(struct serio *serio)
diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
index 7de9605cac4f..b1c3198355e7 100644
--- a/drivers/ipack/ipack.c
+++ b/drivers/ipack/ipack.c
@@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
 	return drv->ops->probe(dev);
 }
 
-static int ipack_bus_remove(struct device *device)
+static void ipack_bus_remove(struct device *device)
 {
 	struct ipack_device *dev = to_ipack_dev(device);
 	struct ipack_driver *drv = to_ipack_driver(device->driver);
 
 	if (drv->ops->remove)
 		drv->ops->remove(dev);
-
-	return 0;
 }
 
 static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c
index 49af60bdac92..c1fdf2896021 100644
--- a/drivers/macintosh/macio_asic.c
+++ b/drivers/macintosh/macio_asic.c
@@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
 	return error;
 }
 
-static int macio_device_remove(struct device *dev)
+static void macio_device_remove(struct device *dev)
 {
 	struct macio_dev * macio_dev = to_macio_device(dev);
 	struct macio_driver * drv = to_macio_driver(dev->driver);
@@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(macio_dev);
 	macio_dev_put(macio_dev);
-
-	return 0;
 }
 
 static void macio_device_shutdown(struct device *dev)
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index 38fbb3b59873..edf4ee6eff25 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
 	return ret;
 }
 
-static int mcb_remove(struct device *dev)
+static void mcb_remove(struct device *dev)
 {
 	struct mcb_driver *mdrv = to_mcb_driver(dev->driver);
 	struct mcb_device *mdev = to_mcb_device(dev);
@@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
 	module_put(carrier_mod);
 
 	put_device(&mdev->dev);
-
-	return 0;
 }
 
 static void mcb_shutdown(struct device *dev)
diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
index b730225ca887..a2b18e2bed1b 100644
--- a/drivers/media/pci/bt8xx/bttv-gpio.c
+++ b/drivers/media/pci/bt8xx/bttv-gpio.c
@@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
 	return sub->probe ? sub->probe(sdev) : -ENODEV;
 }
 
-static int bttv_sub_remove(struct device *dev)
+static void bttv_sub_remove(struct device *dev)
 {
 	struct bttv_sub_device *sdev = to_bttv_sub_dev(dev);
 	struct bttv_sub_driver *sub = to_bttv_sub_drv(dev->driver);
 
 	if (sub->remove)
 		sub->remove(sdev);
-	return 0;
 }
 
 struct bus_type bttv_sub_bus_type = {
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
index bb1065990aeb..660df7d269fa 100644
--- a/drivers/memstick/core/memstick.c
+++ b/drivers/memstick/core/memstick.c
@@ -91,7 +91,7 @@ static int memstick_device_probe(struct device *dev)
 	return rc;
 }
 
-static int memstick_device_remove(struct device *dev)
+static void memstick_device_remove(struct device *dev)
 {
 	struct memstick_dev *card = container_of(dev, struct memstick_dev,
 						  dev);
@@ -105,7 +105,6 @@ static int memstick_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
index eff9423e90f5..2fa592c37c6f 100644
--- a/drivers/mfd/mcp-core.c
+++ b/drivers/mfd/mcp-core.c
@@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
 	return drv->probe(mcp);
 }
 
-static int mcp_bus_remove(struct device *dev)
+static void mcp_bus_remove(struct device *dev)
 {
 	struct mcp *mcp = to_mcp(dev);
 	struct mcp_driver *drv = to_mcp_driver(dev->driver);
 
 	drv->remove(mcp);
-	return 0;
 }
 
 static struct bus_type mcp_bus_type = {
diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
index 935acc6bbf3c..3bf2bb4fd152 100644
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device *dev)
  *
  * Return:  0 on success; < 0 otherwise
  */
-static int mei_cl_device_remove(struct device *dev)
+static void mei_cl_device_remove(struct device *dev)
 {
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct mei_cl_driver *cldrv = to_mei_cl_driver(dev->driver);
@@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device *dev)
 
 	mei_cl_bus_module_put(cldev);
 	module_put(THIS_MODULE);
-
-	return 0;
 }
 
 static ssize_t name_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
index 667e574a7df2..52656fc87e99 100644
--- a/drivers/misc/tifm_core.c
+++ b/drivers/misc/tifm_core.c
@@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
 	return;
 }
 
-static int tifm_device_remove(struct device *dev)
+static void tifm_device_remove(struct device *dev)
 {
 	struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
 	struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
@@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index 4383c262b3f5..f6b7a9c5bbff 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
 	return drv->probe(card);
 }
 
-static int mmc_bus_remove(struct device *dev)
+static void mmc_bus_remove(struct device *dev)
 {
 	struct mmc_driver *drv = to_mmc_driver(dev->driver);
 	struct mmc_card *card = mmc_dev_to_card(dev);
 
 	drv->remove(card);
-
-	return 0;
 }
 
 static void mmc_bus_shutdown(struct device *dev)
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index 3d709029e07c..fda03b35c14a 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sdio_bus_remove(struct device *dev)
+static void sdio_bus_remove(struct device *dev)
 {
 	struct sdio_driver *drv = to_sdio_driver(dev->driver);
 	struct sdio_func *func = dev_to_sdio_func(dev);
@@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
 		pm_runtime_put_sync(dev);
 
 	dev_pm_domain_detach(dev, false);
-
-	return 0;
 }
 
 static const struct dev_pm_ops sdio_bus_pm_ops = {
diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
index ccec29970d5b..14b154929533 100644
--- a/drivers/net/netdevsim/bus.c
+++ b/drivers/net/netdevsim/bus.c
@@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
 	return nsim_dev_probe(nsim_bus_dev);
 }
 
-static int nsim_bus_remove(struct device *dev)
+static void nsim_bus_remove(struct device *dev)
 {
 	struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
 
 	nsim_dev_remove(nsim_bus_dev);
-	return 0;
 }
 
 static int nsim_num_vf(struct device *dev)
diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
index f8f75a504a58..27dd93deff6e 100644
--- a/drivers/ntb/core.c
+++ b/drivers/ntb/core.c
@@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_remove(struct device *dev)
+static void ntb_remove(struct device *dev)
 {
 	struct ntb_dev *ntb;
 	struct ntb_client *client;
@@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
 		client->ops.remove(client, ntb);
 		put_device(dev);
 	}
-
-	return 0;
 }
 
 static void ntb_dev_release(struct device *dev)
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 4a02561cfb96..a9b97ebc71ac 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_transport_bus_remove(struct device *dev)
+static void ntb_transport_bus_remove(struct device *dev)
 {
 	const struct ntb_transport_client *client;
 
@@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device *dev)
 	client->remove(dev);
 
 	put_device(dev);
-
-	return 0;
 }
 
 static struct bus_type ntb_transport_bus = {
diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
index e6aa87043a95..9dc7f3edd42b 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int nvdimm_bus_remove(struct device *dev)
+static void nvdimm_bus_remove(struct device *dev)
 {
 	struct nd_device_driver *nd_drv = to_nd_device_driver(dev->driver);
 	struct module *provider = to_bus_provider(dev);
@@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
 	dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver->name,
 			dev_name(dev));
 	module_put(provider);
-	return 0;
 }
 
 static void nvdimm_bus_shutdown(struct device *dev)
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index 4b9ad96bf1b2..502eb79cd551 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device *dev)
 	return driver->probe(epf);
 }
 
-static int pci_epf_device_remove(struct device *dev)
+static void pci_epf_device_remove(struct device *dev)
 {
 	struct pci_epf *epf = to_pci_epf(dev);
 	struct pci_epf_driver *driver = to_pci_epf_driver(dev->driver);
@@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device *dev)
 	if (driver->remove)
 		driver->remove(epf);
 	epf->driver = NULL;
-
-	return 0;
 }
 
 static struct bus_type pci_epf_bus_type = {
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3a72352aa5cf..a0615395500a 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
 	return error;
 }
 
-static int pci_device_remove(struct device *dev)
+static void pci_device_remove(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_driver *drv = pci_dev->driver;
@@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
 	 */
 
 	pci_dev_put(pci_dev);
-	return 0;
 }
 
 static void pci_device_shutdown(struct device *dev)
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index bd81aa64d011..5bd1b80424e7 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
 	return;
 }
 
-static int pcmcia_device_remove(struct device *dev)
+static void pcmcia_device_remove(struct device *dev)
 {
 	struct pcmcia_device *p_dev;
 	struct pcmcia_driver *p_drv;
@@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device *dev)
 	/* references from pcmcia_device_probe */
 	pcmcia_put_dev(p_dev);
 	module_put(p_drv->owner);
-
-	return 0;
 }
 
 
diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c
index 0169677c243e..0a40dd9c94ed 100644
--- a/drivers/platform/surface/aggregator/bus.c
+++ b/drivers/platform/surface/aggregator/bus.c
@@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
 		->probe(to_ssam_device(dev));
 }
 
-static int ssam_bus_remove(struct device *dev)
+static void ssam_bus_remove(struct device *dev)
 {
 	struct ssam_device_driver *sdrv = to_ssam_device_driver(dev->driver);
 
 	if (sdrv->remove)
 		sdrv->remove(to_ssam_device(dev));
-
-	return 0;
 }
 
 struct bus_type ssam_bus_type = {
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 62e0d56a3332..a76313006bdc 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int wmi_dev_remove(struct device *dev)
+static void wmi_dev_remove(struct device *dev)
 {
 	struct wmi_block *wblock = dev_to_wblock(dev);
 	struct wmi_driver *wdriver =
@@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
 
 	if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
 		dev_warn(dev, "failed to disable device\n");
-
-	return 0;
 }
 
 static struct class wmi_bus_class = {
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index c29d590c5e4f..cc6757dfa3f1 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
 	return error;
 }
 
-static int pnp_device_remove(struct device *dev)
+static void pnp_device_remove(struct device *dev)
 {
 	struct pnp_dev *pnp_dev = to_pnp_dev(dev);
 	struct pnp_driver *drv = pnp_dev->driver;
@@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
 		pnp_disable_dev(pnp_dev);
 
 	pnp_device_detach(pnp_dev);
-	return 0;
 }
 
 static void pnp_device_shutdown(struct device *dev)
diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c
index 72874153972e..a72bb0a40fcf 100644
--- a/drivers/rapidio/rio-driver.c
+++ b/drivers/rapidio/rio-driver.c
@@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
  * driver, then run the driver remove() method.  Then update
  * the reference count.
  */
-static int rio_device_remove(struct device *dev)
+static void rio_device_remove(struct device *dev)
 {
 	struct rio_dev *rdev = to_rio_dev(dev);
 	struct rio_driver *rdrv = rdev->driver;
@@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
 	}
 
 	rio_dev_put(rdev);
-
-	return 0;
 }
 
 static void rio_device_shutdown(struct device *dev)
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index c1404d3dae2c..7f6fac618ab2 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
 	return err;
 }
 
-static int rpmsg_dev_remove(struct device *dev)
+static void rpmsg_dev_remove(struct device *dev)
 {
 	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
 	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
@@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
 
 	if (rpdev->ept)
 		rpmsg_destroy_ept(rpdev->ept);
-
-	return err;
 }
 
 static struct bus_type rpmsg_bus = {
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
index a6aeab1ea0ae..382c5b5f8cd3 100644
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -439,15 +439,13 @@ module_exit(cleanup_ccwgroup);
 
 /************************** driver stuff ******************************/
 
-static int ccwgroup_remove(struct device *dev)
+static void ccwgroup_remove(struct device *dev)
 {
 	struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
 	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(dev->driver);
 
 	if (gdrv->remove)
 		gdrv->remove(gdev);
-
-	return 0;
 }
 
 static void ccwgroup_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 092fd1ea5799..ebc321edba51 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -1371,7 +1371,7 @@ static int css_probe(struct device *dev)
 	return ret;
 }
 
-static int css_remove(struct device *dev)
+static void css_remove(struct device *dev)
 {
 	struct subchannel *sch;
 
@@ -1379,8 +1379,6 @@ static int css_remove(struct device *dev)
 	if (sch->driver->remove)
 		sch->driver->remove(sch);
 	sch->driver = NULL;
-
-	return 0;
 }
 
 static void css_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index cd5d2d4d8e46..adf33b653d87 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -1741,7 +1741,7 @@ ccw_device_probe (struct device *dev)
 	return 0;
 }
 
-static int ccw_device_remove(struct device *dev)
+static void ccw_device_remove(struct device *dev)
 {
 	struct ccw_device *cdev = to_ccwdev(dev);
 	struct ccw_driver *cdrv = cdev->drv;
@@ -1775,8 +1775,6 @@ static int ccw_device_remove(struct device *dev)
 	spin_unlock_irq(cdev->ccwlock);
 	io_subchannel_quiesce(sch);
 	__disable_cmf(cdev);
-
-	return 0;
 }
 
 static void ccw_device_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index b31711307e5a..b6b4589c70bd 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -28,15 +28,13 @@ static int scmdev_probe(struct device *dev)
 	return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV;
 }
 
-static int scmdev_remove(struct device *dev)
+static void scmdev_remove(struct device *dev)
 {
 	struct scm_device *scmdev = to_scm_dev(dev);
 	struct scm_driver *scmdrv = to_scm_drv(dev->driver);
 
 	if (scmdrv->remove)
 		scmdrv->remove(scmdev);
-
-	return 0;
 }
 
 static int scmdev_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index d2560186d771..8a0d37c0e2a5 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -884,7 +884,7 @@ static int ap_device_probe(struct device *dev)
 	return rc;
 }
 
-static int ap_device_remove(struct device *dev)
+static void ap_device_remove(struct device *dev)
 {
 	struct ap_device *ap_dev = to_ap_dev(dev);
 	struct ap_driver *ap_drv = ap_dev->drv;
@@ -909,8 +909,6 @@ static int ap_device_remove(struct device *dev)
 	ap_dev->drv = NULL;
 
 	put_device(dev);
-
-	return 0;
 }
 
 struct ap_queue *ap_get_qdev(ap_qid_t qid)
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 5b3a20a140f9..58f69366bdcc 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device *dev)
 	return error;
 }
 
-static int sdebug_driver_remove(struct device *dev)
+static void sdebug_driver_remove(struct device *dev)
 {
 	struct sdebug_host_info *sdbg_host;
 	struct sdebug_dev_info *sdbg_devinfo, *tmp;
@@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device *dev)
 	}
 
 	scsi_host_put(sdbg_host->shost);
-	return 0;
 }
 
 static int pseudo_lld_bus_match(struct device *dev,
diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
index 1794ff0106bc..7c4f32d76966 100644
--- a/drivers/siox/siox-core.c
+++ b/drivers/siox/siox-core.c
@@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
 	return sdriver->probe(sdevice);
 }
 
-static int siox_remove(struct device *dev)
+static void siox_remove(struct device *dev)
 {
 	struct siox_driver *sdriver =
 		container_of(dev->driver, struct siox_driver, driver);
@@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
 
 	if (sdriver->remove)
 		sdriver->remove(sdevice);
-
-	return 0;
 }
 
 static void siox_shutdown(struct device *dev)
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 1d2bc181da05..78480e332ab8 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
 	return ret;
 }
 
-static int slim_device_remove(struct device *dev)
+static void slim_device_remove(struct device *dev)
 {
 	struct slim_device *sbdev = to_slim_device(dev);
 	struct slim_driver *sbdrv;
@@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
 		if (sbdrv->remove)
 			sbdrv->remove(sbdev);
 	}
-
-	return 0;
 }
 
 static int slim_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
index 7abfc8c4fdc7..475a57b435b2 100644
--- a/drivers/soc/qcom/apr.c
+++ b/drivers/soc/qcom/apr.c
@@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int apr_device_remove(struct device *dev)
+static void apr_device_remove(struct device *dev)
 {
 	struct apr_device *adev = to_apr_device(dev);
 	struct apr_driver *adrv;
@@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
 		idr_remove(&apr->svcs_idr, adev->svc_id);
 		spin_unlock(&apr->svcs_lock);
 	}
-
-	return 0;
 }
 
 static int apr_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index c99181165321..ad2b558dc9cb 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
 	return ret;
 }
 
-static int spi_remove(struct device *dev)
+static void spi_remove(struct device *dev)
 {
 	const struct spi_driver		*sdrv = to_spi_driver(dev->driver);
 
@@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
 	}
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void spi_shutdown(struct device *dev)
diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
index 51f5aeb65b3b..b37ead9e2fad 100644
--- a/drivers/spmi/spmi.c
+++ b/drivers/spmi/spmi.c
@@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
 	return err;
 }
 
-static int spmi_drv_remove(struct device *dev)
+static void spmi_drv_remove(struct device *dev)
 {
 	const struct spmi_driver *sdrv = to_spmi_driver(dev->driver);
 
@@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
-	return 0;
 }
 
 static void spmi_drv_shutdown(struct device *dev)
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 3a29b5570f9f..8a93c83cb6f8 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device *dev)
 		ssb_drv->shutdown(ssb_dev);
 }
 
-static int ssb_device_remove(struct device *dev)
+static void ssb_device_remove(struct device *dev)
 {
 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
@@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
 	if (ssb_drv && ssb_drv->remove)
 		ssb_drv->remove(ssb_dev);
 	ssb_device_put(ssb_dev);
-
-	return 0;
 }
 
 static int ssb_device_probe(struct device *dev)
diff --git a/drivers/staging/fieldbus/anybuss/host.c b/drivers/staging/fieldbus/anybuss/host.c
index 0f730efe9a6d..8a75f6642c78 100644
--- a/drivers/staging/fieldbus/anybuss/host.c
+++ b/drivers/staging/fieldbus/anybuss/host.c
@@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int anybus_bus_remove(struct device *dev)
+static void anybus_bus_remove(struct device *dev)
 {
 	struct anybuss_client_driver *adrv =
 		to_anybuss_client_driver(dev->driver);
 
 	if (adrv->remove)
 		adrv->remove(to_anybuss_client(dev));
-
-	return 0;
 }
 
 static struct bus_type anybus_bus = {
diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c
index 13d319860da5..5a5c17a4519b 100644
--- a/drivers/staging/greybus/gbphy.c
+++ b/drivers/staging/greybus/gbphy.c
@@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int gbphy_dev_remove(struct device *dev)
+static void gbphy_dev_remove(struct device *dev)
 {
 	struct gbphy_driver *gbphy_drv = to_gbphy_driver(dev->driver);
 	struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
@@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
 	pm_runtime_dont_use_autosuspend(dev);
-
-	return 0;
 }
 
 static struct bus_type gbphy_bus_type = {
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 6d0b0e67e79e..cbb2118fb35e 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m, struct Scsi_Host *host)
 }
 
 static int tcm_loop_driver_probe(struct device *);
-static int tcm_loop_driver_remove(struct device *);
+static void tcm_loop_driver_remove(struct device *);
 
 static int pseudo_lld_bus_match(struct device *dev,
 				struct device_driver *dev_driver)
@@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device *dev)
 	return 0;
 }
 
-static int tcm_loop_driver_remove(struct device *dev)
+static void tcm_loop_driver_remove(struct device *dev)
 {
 	struct tcm_loop_hba *tl_hba;
 	struct Scsi_Host *sh;
@@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device *dev)
 
 	scsi_remove_host(sh);
 	scsi_host_put(sh);
-	return 0;
 }
 
 static void tcm_loop_release_adapter(struct device *dev)
diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
index a062befcb3b2..7018d959f775 100644
--- a/drivers/thunderbolt/domain.c
+++ b/drivers/thunderbolt/domain.c
@@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
 	return driver->probe(svc, id);
 }
 
-static int tb_service_remove(struct device *dev)
+static void tb_service_remove(struct device *dev)
 {
 	struct tb_service *svc = tb_to_service(dev);
 	struct tb_service_driver *driver;
@@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
 	driver = container_of(dev->driver, struct tb_service_driver, driver);
 	if (driver->remove)
 		driver->remove(svc);
-
-	return 0;
 }
 
 static void tb_service_shutdown(struct device *dev)
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 9cdfcfe07e87..92498961fd92 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int serdev_drv_remove(struct device *dev)
+static void serdev_drv_remove(struct device *dev)
 {
 	const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
 	if (sdrv->remove)
 		sdrv->remove(to_serdev_device(dev));
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static struct bus_type serdev_bus_type = {
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 7e13b74e60e5..4169cf40a03b 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
 	return drv->probe(to_ulpi_dev(dev));
 }
 
-static int ulpi_remove(struct device *dev)
+static void ulpi_remove(struct device *dev)
 {
 	struct ulpi_driver *drv = to_ulpi_driver(dev->driver);
 
 	if (drv->remove)
 		drv->remove(to_ulpi_dev(dev));
-
-	return 0;
 }
 
 static struct bus_type ulpi_bus = {
diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
index 7133818a58b9..9e38142acd38 100644
--- a/drivers/usb/serial/bus.c
+++ b/drivers/usb/serial/bus.c
@@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device *dev)
 	return retval;
 }
 
-static int usb_serial_device_remove(struct device *dev)
+static void usb_serial_device_remove(struct device *dev)
 {
 	struct usb_serial_port *port = to_usb_serial_port(dev);
 	struct usb_serial_driver *driver;
@@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device *dev)
 
 	if (!autopm_err)
 		usb_autopm_put_interface(port->serial->interface);
-
-	return 0;
 }
 
 static ssize_t new_id_store(struct device_driver *driver,
diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
index 7f3c9a8e2bf0..78e0e78954f2 100644
--- a/drivers/usb/typec/bus.c
+++ b/drivers/usb/typec/bus.c
@@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
 	return ret;
 }
 
-static int typec_remove(struct device *dev)
+static void typec_remove(struct device *dev)
 {
 	struct typec_altmode_driver *drv = to_altmode_driver(dev->driver);
 	struct typec_altmode *adev = to_typec_altmode(dev);
@@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
 
 	adev->desc = NULL;
 	adev->ops = NULL;
-
-	return 0;
 }
 
 struct bus_type typec_bus = {
diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
index bb3f1d1f0422..3fc4525fc05c 100644
--- a/drivers/vdpa/vdpa.c
+++ b/drivers/vdpa/vdpa.c
@@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
 	return ret;
 }
 
-static int vdpa_dev_remove(struct device *d)
+static void vdpa_dev_remove(struct device *d)
 {
 	struct vdpa_device *vdev = dev_to_vdpa(d);
 	struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver);
 
 	if (drv && drv->remove)
 		drv->remove(vdev);
-
-	return 0;
 }
 
 static struct bus_type vdpa_bus = {
diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_driver.c
index c368ec824e2b..e2cb1ff56f6c 100644
--- a/drivers/vfio/mdev/mdev_driver.c
+++ b/drivers/vfio/mdev/mdev_driver.c
@@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
 	return ret;
 }
 
-static int mdev_remove(struct device *dev)
+static void mdev_remove(struct device *dev)
 {
 	struct mdev_driver *drv =
 		container_of(dev->driver, struct mdev_driver, driver);
@@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
 		drv->remove(mdev);
 
 	mdev_detach_iommu(mdev);
-
-	return 0;
 }
 
 static int mdev_match(struct device *dev, struct device_driver *drv)
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index 4b15c00c0a0a..2a6055c0d4d3 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
 
 }
 
-static int virtio_dev_remove(struct device *_d)
+static void virtio_dev_remove(struct device *_d)
 {
 	struct virtio_device *dev = dev_to_virtio(_d);
 	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
@@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
 
 	/* Acknowledge the device's existence again. */
 	virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
-	return 0;
 }
 
 static struct bus_type virtio_bus = {
diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
index 1b15afea28ee..8dba20186be3 100644
--- a/drivers/vme/vme.c
+++ b/drivers/vme/vme.c
@@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
 	return -ENODEV;
 }
 
-static int vme_bus_remove(struct device *dev)
+static void vme_bus_remove(struct device *dev)
 {
 	struct vme_driver *driver;
 	struct vme_dev *vdev = dev_to_vme_dev(dev);
@@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
 	driver = dev->platform_data;
 	if (driver->remove)
 		driver->remove(vdev);
-
-	return 0;
 }
 
 struct bus_type vme_bus_type = {
diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
index 2a93b7c9c159..2754bdfadcb8 100644
--- a/drivers/xen/xenbus/xenbus.h
+++ b/drivers/xen/xenbus/xenbus.h
@@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
 
 int xenbus_match(struct device *_dev, struct device_driver *_drv);
 int xenbus_dev_probe(struct device *_dev);
-int xenbus_dev_remove(struct device *_dev);
+void xenbus_dev_remove(struct device *_dev);
 int xenbus_register_driver_common(struct xenbus_driver *drv,
 				  struct xen_bus_type *bus,
 				  struct module *owner,
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 97f0d234482d..f4f52d574df9 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -326,7 +326,7 @@ int xenbus_dev_probe(struct device *_dev)
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_probe);
 
-int xenbus_dev_remove(struct device *_dev)
+void xenbus_dev_remove(struct device *_dev)
 {
 	struct xenbus_device *dev = to_xenbus_device(_dev);
 	struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
@@ -356,8 +356,6 @@ int xenbus_dev_remove(struct device *_dev)
 	if (!drv->allow_rebind ||
 	    xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)
 		xenbus_switch_state(dev, XenbusStateClosed);
-
-	return 0;
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_remove);
 
diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
index 1ea5e1d1545b..062777a45a74 100644
--- a/include/linux/device/bus.h
+++ b/include/linux/device/bus.h
@@ -91,7 +91,7 @@ struct bus_type {
 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
 	int (*probe)(struct device *dev);
 	void (*sync_state)(struct device *dev);
-	int (*remove)(struct device *dev);
+	void (*remove)(struct device *dev);
 	void (*shutdown)(struct device *dev);
 
 	int (*online)(struct device *dev);
diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
index 002fb5bf220b..c9579d97fbab 100644
--- a/sound/aoa/soundbus/core.c
+++ b/sound/aoa/soundbus/core.c
@@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return retval;
 }
 
-static int soundbus_device_remove(struct device *dev)
+static void soundbus_device_remove(struct device *dev)
 {
 	struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
 	struct soundbus_driver * drv = to_soundbus_driver(dev->driver);
@@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(soundbus_dev);
 	soundbus_dev_put(soundbus_dev);
-
-	return 0;
 }
 
 static void soundbus_device_shutdown(struct device *dev)
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:02:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:02:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151623.280580 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ylt-0004o4-OS; Wed, 07 Jul 2021 04:02:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151623.280580; Wed, 07 Jul 2021 04:02:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ylt-0004mF-Ih; Wed, 07 Jul 2021 04:02:49 +0000
Received: by outflank-mailman (input) for mailman id 151623;
 Tue, 06 Jul 2021 18:33:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8YKr=L6=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m0psk-0000rS-S7
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 18:33:18 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f36f2e96-a2f9-4ead-aba4-89850b2a7990;
 Tue, 06 Jul 2021 18:33:17 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0ps1-0007tV-Rc; Tue, 06 Jul 2021 20:32:33 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0prk-0001yq-8e; Tue, 06 Jul 2021 20:32:16 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m0prk-0004ND-2r; Tue, 06 Jul 2021 20:32:16 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f36f2e96-a2f9-4ead-aba4-89850b2a7990
Date: Tue, 6 Jul 2021 20:32:15 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: nvdimm@lists.linux.dev, Alexey Kardashevskiy <aik@ozlabs.ru>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Jaroslav Kysela <perex@perex.cz>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Paul Mackerras <paulus@samba.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Mike Christie <michael.christie@oracle.com>,
	Wei Liu <wei.liu@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	Michael Ellerman <mpe@ellerman.id.au>, linux-acpi@vger.kernel.org,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Tomas Winkler <tomas.winkler@intel.com>,
	Julien Grall <jgrall@amazon.com>, Ohad Ben-Cohen <ohad@wizery.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alex Elder <elder@kernel.org>, linux-parisc@vger.kernel.org,
	Geoff Levand <geoff@infradead.org>, linux-fpga@vger.kernel.org,
	linux-usb@vger.kernel.org, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org,
	Thorsten Scherer <t.scherer@eckelmann.de>, kernel@pengutronix.de,
	Jon Mason <jdmason@kudzu.us>, linux-ntb@googlegroups.com,
	Wu Hao <hao.wu@intel.com>, David Woodhouse <dwmw@amazon.co.uk>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	linux-wireless@vger.kernel.org,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	virtualization@lists.linux-foundation.org,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	target-devel@vger.kernel.org,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	linux-i2c@vger.kernel.org,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Ira Weiny <ira.weiny@intel.com>, Helge Deller <deller@gmx.de>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	industrypack-devel@lists.sourceforge.net,
	linux-mips@vger.kernel.org, Len Brown <lenb@kernel.org>,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-media@vger.kernel.org, Maxime Ripard <mripard@kernel.org>,
	Johan Hovold <johan@kernel.org>, greybus-dev@lists.linaro.org,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	linux-arm-kernel@lists.infradead.org,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Stephen Boyd <sboyd@kernel.org>, Cornelia Huck <cohuck@redhat.com>,
	Wolfram Sang <wsa@kernel.org>, Joey Pabalan <jpabalanb@gmail.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Tom Rix <trix@redhat.com>, Jason Wang <jasowang@redhat.com>,
	SeongJae Park <sjpark@amazon.de>, linux-hyperv@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, Frank Li <lznuaa@gmail.com>,
	netdev@vger.kernel.org, Qinglang Miao <miaoqinglang@huawei.com>,
	Jiri Slaby <jirislaby@kernel.org>, Rob Herring <robh@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Mark Gross <mgross@linux.intel.com>, linux-staging@lists.linux.dev,
	Dexuan Cui <decui@microsoft.com>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Chen-Yu Tsai <wens@csie.org>, linux-input@vger.kernel.org,
	Matt Porter <mporter@kernel.crashing.org>,
	Allen Hubbe <allenbh@gmail.com>, Alex Dubov <oakad@yahoo.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Jiri Kosina <jikos@kernel.org>, Vladimir Zapolskiy <vz@mleia.com>,
	Russell King <rmk+kernel@armlinux.org.uk>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Moritz Fischer <mdf@kernel.org>, linux-cxl@vger.kernel.org,
	Michael Buesch <m@bues.ch>, Dan Williams <dan.j.williams@intel.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-mmc@vger.kernel.org, linux-sunxi@lists.linux.dev,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	"David S. Miller" <davem@davemloft.net>,
	Sven Van Asbroeck <TheSven73@gmail.com>, kvm@vger.kernel.org,
	"Michael S. Tsirkin" <mst@redhat.com>,
	linux-remoteproc@vger.kernel.org,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	linux-i3c@lists.infradead.org,
	linux1394-devel@lists.sourceforge.net,
	Lee Jones <lee.jones@linaro.org>, Arnd Bergmann <arnd@arndb.de>,
	linux-scsi@vger.kernel.org, Vishal Verma <vishal.l.verma@intel.com>,
	Russell King <linux@armlinux.org.uk>,
	Andy Gross <agross@kernel.org>, linux-serial@vger.kernel.org,
	Jakub Kicinski <kuba@kernel.org>,
	Michael Jamet <michael.jamet@intel.com>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>, Hannes Reinecke <hare@suse.de>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Juergen Gross <jgross@suse.com>, linuxppc-dev@lists.ozlabs.org,
	Takashi Iwai <tiwai@suse.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Vinod Koul <vkoul@kernel.org>, Mark Brown <broonie@kernel.org>,
	Marc Zyngier <maz@kernel.org>, dmaengine@vger.kernel.org,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <jth@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <20210706183215.tcd7i4pwz2gxtxtb@pengutronix.de>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="q2vlxiybuwkj6z7s"
Content-Disposition: inline
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org


--q2vlxiybuwkj6z7s
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello,

v1 was acked by some more after I stopped looking in my mailbox while
preparing v2:

On Tue, Jul 06, 2021 at 05:48:03PM +0200, Uwe Kleine-K=F6nig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>=20
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>=20
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>=20
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Am=
ba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Roh=E1r <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drive=
rs/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and=
 typec)
> Acked-by: Samuel Iglesias Gons=E1lvez <siglesias@igalia.com> (For ipack)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)

Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com> (For thunderbolt)
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> (For inte=
l_th)
Acked-by: Dominik Brodowski <linux@dominikbrodowski.net> (For pcmcia)

> Signed-off-by: Uwe Kleine-K=F6nig <u.kleine-koenig@pengutronix.de>

Best regards
Uwe

--=20
Pengutronix e.K.                           | Uwe Kleine-K=F6nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

--q2vlxiybuwkj6z7s
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmDkoawACgkQwfwUeK3K
7AkRFgf/Qj+Sw4DQa5XQzuIke1atkI5Z9SH6bby9lfgLCjU/9fFWokjZXUFUlHEd
p6KCgzwG5JD4RoIVKyntr/S7rR3FlCH5aMtgDi4xzKWybmOwAdP5XCSzU6ois1Cd
G76Gg954N8CBAyFE6c0p18Fu1R1fscGQQDIF6yrUJ6p9WbpckBTw8xuX/AOicKcu
r9s0okuUVqJmb0eM1Io+LGgjIvSLaUPl2lFnllwI6ztli3Wwo3NhHhy0iFZN9q1n
IAXVYkylaIeq6hoC+Fo0NN0/ZNZRsV+s2qlzlaQkj8zQmyYqfN369rEDpTajwdlU
JoOxFMsceOjeYMAEfCEfUeEBRom3lw==
=mbzo
-----END PGP SIGNATURE-----

--q2vlxiybuwkj6z7s--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:03:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:03:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151536.280602 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ym6-0005nE-AT; Wed, 07 Jul 2021 04:03:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151536.280602; Wed, 07 Jul 2021 04:03:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ym6-0005n3-6Z; Wed, 07 Jul 2021 04:03:02 +0000
Received: by outflank-mailman (input) for mailman id 151536;
 Tue, 06 Jul 2021 16:09:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=fbDq=L6=redhat.com=cohuck@srs-us1.protection.inumbo.net>)
 id 1m0ndm-0007hv-Uo
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 16:09:43 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [216.205.24.124])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 9988f3d0-1092-4207-b08f-42a21cbc8220;
 Tue, 06 Jul 2021 16:09:42 +0000 (UTC)
Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com
 [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-211-a5wCyw6hOsih0Wr2yFDVpA-1; Tue, 06 Jul 2021 12:09:40 -0400
Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com
 [10.5.11.23])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 973D9804140;
 Tue,  6 Jul 2021 16:09:34 +0000 (UTC)
Received: from localhost (ovpn-113-13.ams2.redhat.com [10.36.113.13])
 by smtp.corp.redhat.com (Postfix) with ESMTPS id A281B16D28;
 Tue,  6 Jul 2021 16:09:18 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9988f3d0-1092-4207-b08f-42a21cbc8220
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1625587781;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=5risqcJR3SRZugYRxSjL/FvvM4+olXr1vxcAoe7tQ/0=;
	b=a2Fp2s0RNmEfhOiWtVlAxnwporE8Iec5f9NIyahKVrzYHnh6fhPpnX4ZwINyUJw0wEh3PI
	5NQ0wg4SC/rIaHvouVrje36CnZ5FjJBDVvQ98lGR6TwWYCbTsW/WwXWM9zeyY5KC1M+kNc
	U2iNFU1hUfBVabsmDJ+GBo7xSi8o23Q=
X-MC-Unique: a5wCyw6hOsih0Wr2yFDVpA-1
From: Cornelia Huck <cohuck@redhat.com>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>, Greg
 Kroah-Hartman
 <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org, Russell King
 <linux@armlinux.org.uk>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>, Helge
 Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>, Michael
 Ellerman <mpe@ellerman.id.au>, Benjamin Herrenschmidt
 <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, "Rafael J.
 Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, William
 Breathitt Gray <vilhelm.gray@gmail.com>, =?utf-8?Q?Rafa=C5=82_Mi=C5=82eck?=
 =?utf-8?Q?i?= <zajec5@gmail.com>,
 Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej
 Skrabec <jernej.skrabec@gmail.com>, Alison Schofield
 <alison.schofield@intel.com>, Vishal Verma <vishal.l.verma@intel.com>, Ira
 Weiny <ira.weiny@intel.com>, Ben Widawsky <ben.widawsky@intel.com>, Dan
 Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi
 <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix
 <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, Jiri Kosina
 <jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, "K. Y.
 Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>, Alexander Shishkin
 <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
 <dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
 <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab
 <mchehab@kernel.org>, Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov
 <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones
 <lee.jones@linaro.org>, Tomas Winkler <tomas.winkler@intel.com>, Arnd
 Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>, "David S.
 Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, Allen Hubbe
 <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, Lorenzo
 Pieralisi <lorenzo.pieralisi@arm.com>, Krzysztof =?utf-8?Q?Wilczy=C5=84sk?=
 =?utf-8?Q?i?=
 <kw@linux.com>, Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski
 <linux@dominikbrodowski.net>, Maximilian Luz <luzmaximilian@gmail.com>,
 Hans de Goede <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>, Alexandre Bounine
 <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson
 <bjorn.andersson@linaro.org>, Mathieu Poirier
 <mathieu.poirier@linaro.org>, "Martin K. Petersen"
 <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross
 <agross@kernel.org>, Mark Brown <broonie@kernel.org>, Stephen Boyd
 <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, Sven Van Asbroeck
 <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder
 <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>, Michael
 Jamet <michael.jamet@intel.com>, Mika Westerberg
 <mika.westerberg@linux.intel.com>, Yehezkel Bernat
 <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri Slaby
 <jirislaby@kernel.org>, Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson
 <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, Manohar
 Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky
 <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Johannes Berg
 <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, Takashi
 Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler
 <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland
 <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, Alexey
 Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng
 <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, Pali
 =?utf-8?Q?Roh=C3=A1r?= <pali@kernel.org>, Adrian Hunter
 <adrian.hunter@intel.com>, Frank Li
 <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien
 Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org, Russell King <rmk+kernel@armlinux.org.uk>,
 Johannes Thumshirn <jth@kernel.org>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
Organization: Red Hat GmbH
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
User-Agent: Notmuch/0.32.1 (https://notmuchmail.org)
Date: Tue, 06 Jul 2021 18:09:17 +0200
Message-ID: <87r1gbfmqa.fsf@redhat.com>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 06 2021, Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>=
 wrote:

> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Am=
ba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Roh=C3=A1r <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drive=
rs/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and=
 typec)
> Acked-by: Samuel Iglesias Gons=C3=A1lvez <siglesias@igalia.com> (For ipac=
k)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---
>
>  drivers/s390/cio/ccwgroup.c               | 4 +---
>  drivers/s390/cio/css.c                    | 4 +---
>  drivers/s390/cio/device.c                 | 4 +---
>  drivers/s390/cio/scm.c                    | 4 +---
>  drivers/s390/crypto/ap_bus.c              | 4 +---
>  drivers/vfio/mdev/mdev_driver.c           | 4 +---

For drivers/s390 and drivers/vfio:

Reviewed-by: Cornelia Huck <cohuck@redhat.com>



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:03:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:03:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151551.280613 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ymP-0006pL-Oo; Wed, 07 Jul 2021 04:03:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151551.280613; Wed, 07 Jul 2021 04:03:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ymP-0006pE-LM; Wed, 07 Jul 2021 04:03:21 +0000
Received: by outflank-mailman (input) for mailman id 151551;
 Tue, 06 Jul 2021 16:44:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BX2T=L6=gmail.com=rjwysocki@srs-us1.protection.inumbo.net>)
 id 1m0oBk-0003KR-5P
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 16:44:48 +0000
Received: from mail-oo1-f54.google.com (unknown [209.85.161.54])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 216ade04-263f-48cf-9847-ef521b9dd35f;
 Tue, 06 Jul 2021 16:44:43 +0000 (UTC)
Received: by mail-oo1-f54.google.com with SMTP id
 e85-20020a4a55580000b02902579a1a1393so1605474oob.6
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 09:44:43 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 216ade04-263f-48cf-9847-ef521b9dd35f
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=EoneukzRS5yBPVcl5ao8DQaKzA7kJstNCFvhZMF/zC0=;
        b=Odww67gqT4MiLPZwT3ZH6c4Igm+fmUrDTLZyWiY5qDyM/Gj2XA7ZDqHkzmR4szGV1w
         XHqKPJGsJ4jO9dZQ67HVRLMJyzFU8nWGVfiGkElHL+vTHvkEVpSlCXZ4Rxzc39VlSvz9
         ctwJAZdD1qR+bpz9FMvDrJdR5seUtUCXSGHwOaugDUxVK6sT+/GsAj6Y/zhHRqNcLXoI
         y21MZymewLxtqvPCWoc1OZgo/Kbzix0M88+jZvOJUyGg15OT4v3mdknIbFYUFZudILCp
         3vJKDJRnS7rl2wjRXrRl1cRzCQo3EzYT6y9QP3jwt3dtoVa2+hmj4CrJ8iQXqOhF4f6w
         9c6A==
X-Gm-Message-State: AOAM531TOti+hU/qqbxZQcfkb7i0M0cdG6tZ9GE2ezRK/8/pR/hFdJR1
	lKk87k4O9kw3/Des+OEGmLlEEgdlKpM+A7BmnQQ=
X-Google-Smtp-Source: ABdhPJy82CLCPvrwtCsQlockoZoWqiseTpWOnQ34rVV9PqWNYN/fuGHNRtwndVagB+9cbcnky5RxEYZGu/VqHzJuXuY=
X-Received: by 2002:a4a:e989:: with SMTP id s9mr14694892ood.44.1625589881933;
 Tue, 06 Jul 2021 09:44:41 -0700 (PDT)
MIME-Version: 1.0
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de> <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
From: "Rafael J. Wysocki" <rafael@kernel.org>
Date: Tue, 6 Jul 2021 18:44:30 +0200
Message-ID: <CAJZ5v0hG9_LFCfF+wtO8c5Sg5FxgiTz5Md8+Cy3fj5qV4DQXXw@mail.gmail.com>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sascha Hauer <kernel@pengutronix.de>, 
	Cornelia Huck <cohuck@redhat.com>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>, 
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, 
	Ben Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>, 
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>, 
	Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep Holla <sudeep.holla@arm.com>, 
	Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, 
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>, 
	Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, 
	Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, 
	Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, 
	Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, 
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>, 
	Heikki Krogerus <heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>, 
	Jason Wang <jasowang@redhat.com>, Kirti Wankhede <kwankhede@nvidia.com>, 
	Alex Williamson <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, 
	Manohar Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Juergen Gross <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>, 
	Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, 
	Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler <tyreld@linux.ibm.com>, 
	Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland <samuel@sholland.org>, 
	Qinglang Miao <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>, 
	Kai-Heng Feng <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, 
	=?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, Linux ARM <linux-arm-kernel@lists.infradead.org>, 
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, 
	linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, 
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>, 
	"open list:NETWORKING DRIVERS (WIRELESS)" <linux-wireless@vger.kernel.org>, linux-sunxi@lists.linux.dev, 
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, 
	dmaengine <dmaengine@vger.kernel.org>, linux1394-devel@lists.sourceforge.net, 
	linux-fpga@vger.kernel.org, linux-input <linux-input@vger.kernel.org>, 
	Linux on Hyper-V List <linux-hyperv@vger.kernel.org>, linux-i2c <linux-i2c@vger.kernel.org>, 
	linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net, 
	Linux Media Mailing List <linux-media@vger.kernel.org>, linux-mmc <linux-mmc@vger.kernel.org>, 
	netdev <netdev@vger.kernel.org>, linux-ntb@googlegroups.com, 
	Linux PCI <linux-pci@vger.kernel.org>, 
	Platform Driver <platform-driver-x86@vger.kernel.org>, linux-remoteproc@vger.kernel.org, 
	"open list:TARGET SUBSYSTEM" <linux-scsi@vger.kernel.org>, 
	"moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." <alsa-devel@alsa-project.org>, linux-arm-msm <linux-arm-msm@vger.kernel.org>, 
	linux-spi <linux-spi@vger.kernel.org>, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	"open list:ULTRA-WIDEBAND (UWB) SUBSYSTEM:" <linux-usb@vger.kernel.org>, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm-devel <kvm@vger.kernel.org>, 
	xen-devel@lists.xenproject.org, Russell King <rmk+kernel@armlinux.org.uk>, 
	Johannes Thumshirn <jth@kernel.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 6, 2021 at 5:53 PM Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Am=
ba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Roh=C3=A1r <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drive=
rs/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and=
 typec)
> Acked-by: Samuel Iglesias Gons=C3=A1lvez <siglesias@igalia.com> (For ipac=
k)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>

For the ACPI part:

Acked-by: Rafael J. Wysocki <rafael@kernel.org>

> ---
>
>  arch/arm/common/locomo.c                  | 3 +--
>  arch/arm/common/sa1111.c                  | 4 +---
>  arch/arm/mach-rpc/ecard.c                 | 4 +---
>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
>  arch/parisc/kernel/drivers.c              | 5 ++---
>  arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
>  arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
>  arch/powerpc/platforms/pseries/vio.c      | 3 +--
>  drivers/acpi/bus.c                        | 3 +--
>  drivers/amba/bus.c                        | 4 +---
>  drivers/base/auxiliary.c                  | 4 +---
>  drivers/base/isa.c                        | 4 +---
>  drivers/base/platform.c                   | 4 +---
>  drivers/bcma/main.c                       | 6 ++----
>  drivers/bus/sunxi-rsb.c                   | 4 +---
>  drivers/cxl/core.c                        | 3 +--
>  drivers/dax/bus.c                         | 4 +---
>  drivers/dma/idxd/sysfs.c                  | 4 +---
>  drivers/firewire/core-device.c            | 4 +---
>  drivers/firmware/arm_scmi/bus.c           | 4 +---
>  drivers/firmware/google/coreboot_table.c  | 4 +---
>  drivers/fpga/dfl.c                        | 4 +---
>  drivers/hid/hid-core.c                    | 4 +---
>  drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
>  drivers/hv/vmbus_drv.c                    | 5 +----
>  drivers/hwtracing/intel_th/core.c         | 4 +---
>  drivers/i2c/i2c-core-base.c               | 5 +----
>  drivers/i3c/master.c                      | 4 +---
>  drivers/input/gameport/gameport.c         | 3 +--
>  drivers/input/serio/serio.c               | 3 +--
>  drivers/ipack/ipack.c                     | 4 +---
>  drivers/macintosh/macio_asic.c            | 4 +---
>  drivers/mcb/mcb-core.c                    | 4 +---
>  drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
>  drivers/memstick/core/memstick.c          | 3 +--
>  drivers/mfd/mcp-core.c                    | 3 +--
>  drivers/misc/mei/bus.c                    | 4 +---
>  drivers/misc/tifm_core.c                  | 3 +--
>  drivers/mmc/core/bus.c                    | 4 +---
>  drivers/mmc/core/sdio_bus.c               | 4 +---
>  drivers/net/netdevsim/bus.c               | 3 +--
>  drivers/ntb/core.c                        | 4 +---
>  drivers/ntb/ntb_transport.c               | 4 +---
>  drivers/nvdimm/bus.c                      | 3 +--
>  drivers/pci/endpoint/pci-epf-core.c       | 4 +---
>  drivers/pci/pci-driver.c                  | 3 +--
>  drivers/pcmcia/ds.c                       | 4 +---
>  drivers/platform/surface/aggregator/bus.c | 4 +---
>  drivers/platform/x86/wmi.c                | 4 +---
>  drivers/pnp/driver.c                      | 3 +--
>  drivers/rapidio/rio-driver.c              | 4 +---
>  drivers/rpmsg/rpmsg_core.c                | 4 +---
>  drivers/s390/cio/ccwgroup.c               | 4 +---
>  drivers/s390/cio/css.c                    | 4 +---
>  drivers/s390/cio/device.c                 | 4 +---
>  drivers/s390/cio/scm.c                    | 4 +---
>  drivers/s390/crypto/ap_bus.c              | 4 +---
>  drivers/scsi/scsi_debug.c                 | 3 +--
>  drivers/siox/siox-core.c                  | 4 +---
>  drivers/slimbus/core.c                    | 4 +---
>  drivers/soc/qcom/apr.c                    | 4 +---
>  drivers/spi/spi.c                         | 4 +---
>  drivers/spmi/spmi.c                       | 3 +--
>  drivers/ssb/main.c                        | 4 +---
>  drivers/staging/fieldbus/anybuss/host.c   | 4 +---
>  drivers/staging/greybus/gbphy.c           | 4 +---
>  drivers/target/loopback/tcm_loop.c        | 5 ++---
>  drivers/thunderbolt/domain.c              | 4 +---
>  drivers/tty/serdev/core.c                 | 4 +---
>  drivers/usb/common/ulpi.c                 | 4 +---
>  drivers/usb/serial/bus.c                  | 4 +---
>  drivers/usb/typec/bus.c                   | 4 +---
>  drivers/vdpa/vdpa.c                       | 4 +---
>  drivers/vfio/mdev/mdev_driver.c           | 4 +---
>  drivers/virtio/virtio.c                   | 3 +--
>  drivers/vme/vme.c                         | 4 +---
>  drivers/xen/xenbus/xenbus.h               | 2 +-
>  drivers/xen/xenbus/xenbus_probe.c         | 4 +---
>  include/linux/device/bus.h                | 2 +-
>  sound/aoa/soundbus/core.c                 | 4 +---
>  80 files changed, 83 insertions(+), 219 deletions(-)
>
> diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
> index e45f4e4e06b6..24d21ba63030 100644
> --- a/arch/arm/common/locomo.c
> +++ b/arch/arm/common/locomo.c
> @@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
>         return ret;
>  }
>
> -static int locomo_bus_remove(struct device *dev)
> +static void locomo_bus_remove(struct device *dev)
>  {
>         struct locomo_dev *ldev =3D LOCOMO_DEV(dev);
>         struct locomo_driver *drv =3D LOCOMO_DRV(dev->driver);
>
>         if (drv->remove)
>                 drv->remove(ldev);
> -       return 0;
>  }
>
>  struct bus_type locomo_bus_type =3D {
> diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
> index ff5e0d04cb89..092a2ebc0c28 100644
> --- a/arch/arm/common/sa1111.c
> +++ b/arch/arm/common/sa1111.c
> @@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device *dev)
>         return ret;
>  }
>
> -static int sa1111_bus_remove(struct device *dev)
> +static void sa1111_bus_remove(struct device *dev)
>  {
>         struct sa1111_dev *sadev =3D to_sa1111_device(dev);
>         struct sa1111_driver *drv =3D SA1111_DRV(dev->driver);
>
>         if (drv->remove)
>                 drv->remove(sadev);
> -
> -       return 0;
>  }
>
>  struct bus_type sa1111_bus_type =3D {
> diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
> index 827b50f1c73e..53813f9464a2 100644
> --- a/arch/arm/mach-rpc/ecard.c
> +++ b/arch/arm/mach-rpc/ecard.c
> @@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
>         return ret;
>  }
>
> -static int ecard_drv_remove(struct device *dev)
> +static void ecard_drv_remove(struct device *dev)
>  {
>         struct expansion_card *ec =3D ECARD_DEV(dev);
>         struct ecard_driver *drv =3D ECARD_DRV(dev->driver);
> @@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
>         ec->ops =3D &ecard_default_ops;
>         barrier();
>         ec->irq_data =3D NULL;
> -
> -       return 0;
>  }
>
>  /*
> diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.=
c
> index de0768a49ee8..dfc52f661ad0 100644
> --- a/arch/mips/sgi-ip22/ip22-gio.c
> +++ b/arch/mips/sgi-ip22/ip22-gio.c
> @@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
>         return error;
>  }
>
> -static int gio_device_remove(struct device *dev)
> +static void gio_device_remove(struct device *dev)
>  {
>         struct gio_device *gio_dev =3D to_gio_device(dev);
>         struct gio_driver *drv =3D to_gio_driver(dev->driver);
>
>         if (dev->driver && drv->remove)
>                 drv->remove(gio_dev);
> -       return 0;
>  }
>
>  static void gio_device_shutdown(struct device *dev)
> diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
> index 80fa0650736b..776d624a7207 100644
> --- a/arch/parisc/kernel/drivers.c
> +++ b/arch/parisc/kernel/drivers.c
> @@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device *dev)
>         return rc;
>  }
>
> -static int __exit parisc_driver_remove(struct device *dev)
> +static void __exit parisc_driver_remove(struct device *dev)
>  {
>         struct parisc_device *pa_dev =3D to_parisc_device(dev);
>         struct parisc_driver *pa_drv =3D to_parisc_driver(dev->driver);
> +
>         if (pa_drv->remove)
>                 pa_drv->remove(pa_dev);
> -
> -       return 0;
>  }
>
>
> diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platf=
orms/ps3/system-bus.c
> index 1a5665875165..cc5774c64fae 100644
> --- a/arch/powerpc/platforms/ps3/system-bus.c
> +++ b/arch/powerpc/platforms/ps3/system-bus.c
> @@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
>         return result;
>  }
>
> -static int ps3_system_bus_remove(struct device *_dev)
> +static void ps3_system_bus_remove(struct device *_dev)
>  {
>         struct ps3_system_bus_device *dev =3D ps3_dev_to_system_bus_dev(_=
dev);
>         struct ps3_system_bus_driver *drv;
> @@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
>                         __func__, __LINE__, drv->core.name);
>
>         pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->co=
re));
> -       return 0;
>  }
>
>  static void ps3_system_bus_shutdown(struct device *_dev)
> diff --git a/arch/powerpc/platforms/pseries/ibmebus.c b/arch/powerpc/plat=
forms/pseries/ibmebus.c
> index c6c79ef55e13..7ee3ed7d6cc2 100644
> --- a/arch/powerpc/platforms/pseries/ibmebus.c
> +++ b/arch/powerpc/platforms/pseries/ibmebus.c
> @@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct device *=
dev)
>         return error;
>  }
>
> -static int ibmebus_bus_device_remove(struct device *dev)
> +static void ibmebus_bus_device_remove(struct device *dev)
>  {
>         struct platform_device *of_dev =3D to_platform_device(dev);
>         struct platform_driver *drv =3D to_platform_driver(dev->driver);
>
>         if (dev->driver && drv->remove)
>                 drv->remove(of_dev);
> -       return 0;
>  }
>
>  static void ibmebus_bus_device_shutdown(struct device *dev)
> diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platform=
s/pseries/vio.c
> index e00f3725ec96..58283cecbd52 100644
> --- a/arch/powerpc/platforms/pseries/vio.c
> +++ b/arch/powerpc/platforms/pseries/vio.c
> @@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
>  }
>
>  /* convert from struct device to struct vio_dev and pass to driver. */
> -static int vio_bus_remove(struct device *dev)
> +static void vio_bus_remove(struct device *dev)
>  {
>         struct vio_dev *viodev =3D to_vio_dev(dev);
>         struct vio_driver *viodrv =3D to_vio_driver(dev->driver);
> @@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
>                 vio_cmo_bus_remove(viodev);
>
>         put_device(devptr);
> -       return 0;
>  }
>
>  static void vio_bus_shutdown(struct device *dev)
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index ee24246d88fd..51f374e42869 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -1018,7 +1018,7 @@ static int acpi_device_probe(struct device *dev)
>         return 0;
>  }
>
> -static int acpi_device_remove(struct device *dev)
> +static void acpi_device_remove(struct device *dev)
>  {
>         struct acpi_device *acpi_dev =3D to_acpi_device(dev);
>         struct acpi_driver *acpi_drv =3D acpi_dev->driver;
> @@ -1033,7 +1033,6 @@ static int acpi_device_remove(struct device *dev)
>         acpi_dev->driver_data =3D NULL;
>
>         put_device(dev);
> -       return 0;
>  }
>
>  struct bus_type acpi_bus_type =3D {
> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> index 939ca220bf78..962041148482 100644
> --- a/drivers/amba/bus.c
> +++ b/drivers/amba/bus.c
> @@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
>         return ret;
>  }
>
> -static int amba_remove(struct device *dev)
> +static void amba_remove(struct device *dev)
>  {
>         struct amba_device *pcdev =3D to_amba_device(dev);
>         struct amba_driver *drv =3D to_amba_driver(dev->driver);
> @@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
>
>         amba_put_disable_pclk(pcdev);
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>
>  static void amba_shutdown(struct device *dev)
> diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
> index adc199dfba3c..0c86f5bed9f4 100644
> --- a/drivers/base/auxiliary.c
> +++ b/drivers/base/auxiliary.c
> @@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
>         return ret;
>  }
>
> -static int auxiliary_bus_remove(struct device *dev)
> +static void auxiliary_bus_remove(struct device *dev)
>  {
>         struct auxiliary_driver *auxdrv =3D to_auxiliary_drv(dev->driver)=
;
>         struct auxiliary_device *auxdev =3D to_auxiliary_dev(dev);
> @@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
>         if (auxdrv->remove)
>                 auxdrv->remove(auxdev);
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>
>  static void auxiliary_bus_shutdown(struct device *dev)
> diff --git a/drivers/base/isa.c b/drivers/base/isa.c
> index aa4737667026..55e3ee2da98f 100644
> --- a/drivers/base/isa.c
> +++ b/drivers/base/isa.c
> @@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
>         return 0;
>  }
>
> -static int isa_bus_remove(struct device *dev)
> +static void isa_bus_remove(struct device *dev)
>  {
>         struct isa_driver *isa_driver =3D dev->platform_data;
>
>         if (isa_driver && isa_driver->remove)
>                 isa_driver->remove(dev, to_isa_dev(dev)->id);
> -
> -       return 0;
>  }
>
>  static void isa_bus_shutdown(struct device *dev)
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 8640578f45e9..a94b7f454881 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
>         return ret;
>  }
>
> -static int platform_remove(struct device *_dev)
> +static void platform_remove(struct device *_dev)
>  {
>         struct platform_driver *drv =3D to_platform_driver(_dev->driver);
>         struct platform_device *dev =3D to_platform_device(_dev);
> @@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
>                         dev_warn(_dev, "remove callback returned a non-ze=
ro value. This will be ignored.\n");
>         }
>         dev_pm_domain_detach(_dev, true);
> -
> -       return 0;
>  }
>
>  static void platform_shutdown(struct device *_dev)
> diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
> index 6535614a7dc1..e076630d17bd 100644
> --- a/drivers/bcma/main.c
> +++ b/drivers/bcma/main.c
> @@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
>
>  static int bcma_bus_match(struct device *dev, struct device_driver *drv)=
;
>  static int bcma_device_probe(struct device *dev);
> -static int bcma_device_remove(struct device *dev);
> +static void bcma_device_remove(struct device *dev);
>  static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env=
 *env);
>
>  static ssize_t manuf_show(struct device *dev, struct device_attribute *a=
ttr, char *buf)
> @@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
>         return err;
>  }
>
> -static int bcma_device_remove(struct device *dev)
> +static void bcma_device_remove(struct device *dev)
>  {
>         struct bcma_device *core =3D container_of(dev, struct bcma_device=
, dev);
>         struct bcma_driver *adrv =3D container_of(dev->driver, struct bcm=
a_driver,
> @@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
>         if (adrv->remove)
>                 adrv->remove(core);
>         put_device(dev);
> -
> -       return 0;
>  }
>
>  static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env=
 *env)
> diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
> index d46db132d085..6f225dddc74f 100644
> --- a/drivers/bus/sunxi-rsb.c
> +++ b/drivers/bus/sunxi-rsb.c
> @@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device *de=
v)
>         return drv->probe(rdev);
>  }
>
> -static int sunxi_rsb_device_remove(struct device *dev)
> +static void sunxi_rsb_device_remove(struct device *dev)
>  {
>         const struct sunxi_rsb_driver *drv =3D to_sunxi_rsb_driver(dev->d=
river);
>
>         drv->remove(to_sunxi_rsb_device(dev));
> -
> -       return 0;
>  }
>
>  static struct bus_type sunxi_rsb_bus =3D {
> diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
> index a2e4d54fc7bc..2b90b7c3b9d7 100644
> --- a/drivers/cxl/core.c
> +++ b/drivers/cxl/core.c
> @@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
>         return to_cxl_drv(dev->driver)->probe(dev);
>  }
>
> -static int cxl_bus_remove(struct device *dev)
> +static void cxl_bus_remove(struct device *dev)
>  {
>         struct cxl_driver *cxl_drv =3D to_cxl_drv(dev->driver);
>
>         if (cxl_drv->remove)
>                 cxl_drv->remove(dev);
> -       return 0;
>  }
>
>  struct bus_type cxl_bus_type =3D {
> diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
> index 5aee26e1bbd6..6cc4da4c713d 100644
> --- a/drivers/dax/bus.c
> +++ b/drivers/dax/bus.c
> @@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
>         return 0;
>  }
>
> -static int dax_bus_remove(struct device *dev)
> +static void dax_bus_remove(struct device *dev)
>  {
>         struct dax_device_driver *dax_drv =3D to_dax_drv(dev->driver);
>         struct dev_dax *dev_dax =3D to_dev_dax(dev);
>
>         if (dax_drv->remove)
>                 dax_drv->remove(dev_dax);
> -
> -       return 0;
>  }
>
>  static struct bus_type dax_bus_type =3D {
> diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
> index 0460d58e3941..5a017c62c752 100644
> --- a/drivers/dma/idxd/sysfs.c
> +++ b/drivers/dma/idxd/sysfs.c
> @@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
>         dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
>  }
>
> -static int idxd_config_bus_remove(struct device *dev)
> +static void idxd_config_bus_remove(struct device *dev)
>  {
>         int rc;
>
> @@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device *dev)
>                         dev_info(dev, "Device %s disabled\n", dev_name(de=
v));
>
>         }
> -
> -       return 0;
>  }
>
>  static void idxd_config_bus_shutdown(struct device *dev)
> diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-devic=
e.c
> index 68216988391f..90ed8fdaba75 100644
> --- a/drivers/firewire/core-device.c
> +++ b/drivers/firewire/core-device.c
> @@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
>         return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
>  }
>
> -static int fw_unit_remove(struct device *dev)
> +static void fw_unit_remove(struct device *dev)
>  {
>         struct fw_driver *driver =3D
>                         container_of(dev->driver, struct fw_driver, drive=
r);
>
>         driver->remove(fw_unit(dev));
> -
> -       return 0;
>  }
>
>  static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffe=
r_size)
> diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/=
bus.c
> index 784cf0027da3..2682c3df651c 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
>         return scmi_drv->probe(scmi_dev);
>  }
>
> -static int scmi_dev_remove(struct device *dev)
> +static void scmi_dev_remove(struct device *dev)
>  {
>         struct scmi_driver *scmi_drv =3D to_scmi_driver(dev->driver);
>         struct scmi_device *scmi_dev =3D to_scmi_dev(dev);
>
>         if (scmi_drv->remove)
>                 scmi_drv->remove(scmi_dev);
> -
> -       return 0;
>  }
>
>  static struct bus_type scmi_bus_type =3D {
> diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/=
google/coreboot_table.c
> index dc83ea118c67..c52bcaa9def6 100644
> --- a/drivers/firmware/google/coreboot_table.c
> +++ b/drivers/firmware/google/coreboot_table.c
> @@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
>         return ret;
>  }
>
> -static int coreboot_bus_remove(struct device *dev)
> +static void coreboot_bus_remove(struct device *dev)
>  {
>         struct coreboot_device *device =3D CB_DEV(dev);
>         struct coreboot_driver *driver =3D CB_DRV(dev->driver);
>
>         if (driver->remove)
>                 driver->remove(device);
> -
> -       return 0;
>  }
>
>  static struct bus_type coreboot_bus_type =3D {
> diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
> index 511b20ff35a3..1ae6779a0dd6 100644
> --- a/drivers/fpga/dfl.c
> +++ b/drivers/fpga/dfl.c
> @@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
>         return ddrv->probe(ddev);
>  }
>
> -static int dfl_bus_remove(struct device *dev)
> +static void dfl_bus_remove(struct device *dev)
>  {
>         struct dfl_driver *ddrv =3D to_dfl_drv(dev->driver);
>         struct dfl_device *ddev =3D to_dfl_dev(dev);
>
>         if (ddrv->remove)
>                 ddrv->remove(ddev);
> -
> -       return 0;
>  }
>
>  static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env *en=
v)
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index 7db332139f7d..dbed2524fd47 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
>         return ret;
>  }
>
> -static int hid_device_remove(struct device *dev)
> +static void hid_device_remove(struct device *dev)
>  {
>         struct hid_device *hdev =3D to_hid_device(dev);
>         struct hid_driver *hdrv;
> @@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
>
>         if (!hdev->io_started)
>                 up(&hdev->driver_input_lock);
> -
> -       return 0;
>  }
>
>  static ssize_t modalias_show(struct device *dev, struct device_attribute=
 *a,
> diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-is=
h-hid/ishtp/bus.c
> index f0802b047ed8..8a51bd9cd093 100644
> --- a/drivers/hid/intel-ish-hid/ishtp/bus.c
> +++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
> @@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, str=
uct device_driver *drv)
>   *
>   * Return: Return value from driver remove() call.
>   */
> -static int ishtp_cl_device_remove(struct device *dev)
> +static void ishtp_cl_device_remove(struct device *dev)
>  {
>         struct ishtp_cl_device *device =3D to_ishtp_cl_device(dev);
>         struct ishtp_cl_driver *driver =3D to_ishtp_cl_driver(dev->driver=
);
> @@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
>
>         if (driver->remove)
>                 driver->remove(device);
> -
> -       return 0;
>  }
>
>  /**
> diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
> index 57bbbaa4e8f7..392c1ac4f819 100644
> --- a/drivers/hv/vmbus_drv.c
> +++ b/drivers/hv/vmbus_drv.c
> @@ -922,7 +922,7 @@ static int vmbus_probe(struct device *child_device)
>  /*
>   * vmbus_remove - Remove a vmbus device
>   */
> -static int vmbus_remove(struct device *child_device)
> +static void vmbus_remove(struct device *child_device)
>  {
>         struct hv_driver *drv;
>         struct hv_device *dev =3D device_to_hv_device(child_device);
> @@ -932,11 +932,8 @@ static int vmbus_remove(struct device *child_device)
>                 if (drv->remove)
>                         drv->remove(dev);
>         }
> -
> -       return 0;
>  }
>
> -
>  /*
>   * vmbus_shutdown - Shutdown a vmbus device
>   */
> diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_=
th/core.c
> index 66eed2dff818..7e753a75d23b 100644
> --- a/drivers/hwtracing/intel_th/core.c
> +++ b/drivers/hwtracing/intel_th/core.c
> @@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
>
>  static void intel_th_device_remove(struct intel_th_device *thdev);
>
> -static int intel_th_remove(struct device *dev)
> +static void intel_th_remove(struct device *dev)
>  {
>         struct intel_th_driver *thdrv =3D to_intel_th_driver(dev->driver)=
;
>         struct intel_th_device *thdev =3D to_intel_th_device(dev);
> @@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
>         pm_runtime_disable(dev);
>         pm_runtime_set_active(dev);
>         pm_runtime_enable(dev);
> -
> -       return 0;
>  }
>
>  static struct bus_type intel_th_bus =3D {
> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
> index 84f12bf90644..54964fbe3f03 100644
> --- a/drivers/i2c/i2c-core-base.c
> +++ b/drivers/i2c/i2c-core-base.c
> @@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
>         return status;
>  }
>
> -static int i2c_device_remove(struct device *dev)
> +static void i2c_device_remove(struct device *dev)
>  {
>         struct i2c_client       *client =3D to_i2c_client(dev);
>         struct i2c_adapter      *adap;
> @@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
>         client->irq =3D 0;
>         if (client->flags & I2C_CLIENT_HOST_NOTIFY)
>                 pm_runtime_put(&client->adapter->dev);
> -
> -       /* return always 0 because there is WIP to make remove-functions =
void */
> -       return 0;
>  }
>
>  #ifdef CONFIG_PM_SLEEP
> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> index e2e12a5585e5..c3b4c677b442 100644
> --- a/drivers/i3c/master.c
> +++ b/drivers/i3c/master.c
> @@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
>         return driver->probe(i3cdev);
>  }
>
> -static int i3c_device_remove(struct device *dev)
> +static void i3c_device_remove(struct device *dev)
>  {
>         struct i3c_device *i3cdev =3D dev_to_i3cdev(dev);
>         struct i3c_driver *driver =3D drv_to_i3cdrv(dev->driver);
> @@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
>                 driver->remove(i3cdev);
>
>         i3c_device_free_ibi(i3cdev);
> -
> -       return 0;
>  }
>
>  struct bus_type i3c_bus_type =3D {
> diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/g=
ameport.c
> index 61fa7e724172..db58a01b23d3 100644
> --- a/drivers/input/gameport/gameport.c
> +++ b/drivers/input/gameport/gameport.c
> @@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device *dev=
)
>         return gameport->drv ? 0 : -ENODEV;
>  }
>
> -static int gameport_driver_remove(struct device *dev)
> +static void gameport_driver_remove(struct device *dev)
>  {
>         struct gameport *gameport =3D to_gameport_port(dev);
>         struct gameport_driver *drv =3D to_gameport_driver(dev->driver);
>
>         drv->disconnect(gameport);
> -       return 0;
>  }
>
>  static void gameport_attach_driver(struct gameport_driver *drv)
> diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
> index 29f491082926..ec117be3d8d8 100644
> --- a/drivers/input/serio/serio.c
> +++ b/drivers/input/serio/serio.c
> @@ -778,12 +778,11 @@ static int serio_driver_probe(struct device *dev)
>         return serio_connect_driver(serio, drv);
>  }
>
> -static int serio_driver_remove(struct device *dev)
> +static void serio_driver_remove(struct device *dev)
>  {
>         struct serio *serio =3D to_serio_port(dev);
>
>         serio_disconnect_driver(serio);
> -       return 0;
>  }
>
>  static void serio_cleanup(struct serio *serio)
> diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
> index 7de9605cac4f..b1c3198355e7 100644
> --- a/drivers/ipack/ipack.c
> +++ b/drivers/ipack/ipack.c
> @@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
>         return drv->ops->probe(dev);
>  }
>
> -static int ipack_bus_remove(struct device *device)
> +static void ipack_bus_remove(struct device *device)
>  {
>         struct ipack_device *dev =3D to_ipack_dev(device);
>         struct ipack_driver *drv =3D to_ipack_driver(device->driver);
>
>         if (drv->ops->remove)
>                 drv->ops->remove(dev);
> -
> -       return 0;
>  }
>
>  static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asi=
c.c
> index 49af60bdac92..c1fdf2896021 100644
> --- a/drivers/macintosh/macio_asic.c
> +++ b/drivers/macintosh/macio_asic.c
> @@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
>         return error;
>  }
>
> -static int macio_device_remove(struct device *dev)
> +static void macio_device_remove(struct device *dev)
>  {
>         struct macio_dev * macio_dev =3D to_macio_device(dev);
>         struct macio_driver * drv =3D to_macio_driver(dev->driver);
> @@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
>         if (dev->driver && drv->remove)
>                 drv->remove(macio_dev);
>         macio_dev_put(macio_dev);
> -
> -       return 0;
>  }
>
>  static void macio_device_shutdown(struct device *dev)
> diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> index 38fbb3b59873..edf4ee6eff25 100644
> --- a/drivers/mcb/mcb-core.c
> +++ b/drivers/mcb/mcb-core.c
> @@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
>         return ret;
>  }
>
> -static int mcb_remove(struct device *dev)
> +static void mcb_remove(struct device *dev)
>  {
>         struct mcb_driver *mdrv =3D to_mcb_driver(dev->driver);
>         struct mcb_device *mdev =3D to_mcb_device(dev);
> @@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
>         module_put(carrier_mod);
>
>         put_device(&mdev->dev);
> -
> -       return 0;
>  }
>
>  static void mcb_shutdown(struct device *dev)
> diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8x=
x/bttv-gpio.c
> index b730225ca887..a2b18e2bed1b 100644
> --- a/drivers/media/pci/bt8xx/bttv-gpio.c
> +++ b/drivers/media/pci/bt8xx/bttv-gpio.c
> @@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
>         return sub->probe ? sub->probe(sdev) : -ENODEV;
>  }
>
> -static int bttv_sub_remove(struct device *dev)
> +static void bttv_sub_remove(struct device *dev)
>  {
>         struct bttv_sub_device *sdev =3D to_bttv_sub_dev(dev);
>         struct bttv_sub_driver *sub =3D to_bttv_sub_drv(dev->driver);
>
>         if (sub->remove)
>                 sub->remove(sdev);
> -       return 0;
>  }
>
>  struct bus_type bttv_sub_bus_type =3D {
> diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/mem=
stick.c
> index bb1065990aeb..660df7d269fa 100644
> --- a/drivers/memstick/core/memstick.c
> +++ b/drivers/memstick/core/memstick.c
> @@ -91,7 +91,7 @@ static int memstick_device_probe(struct device *dev)
>         return rc;
>  }
>
> -static int memstick_device_remove(struct device *dev)
> +static void memstick_device_remove(struct device *dev)
>  {
>         struct memstick_dev *card =3D container_of(dev, struct memstick_d=
ev,
>                                                   dev);
> @@ -105,7 +105,6 @@ static int memstick_device_remove(struct device *dev)
>         }
>
>         put_device(dev);
> -       return 0;
>  }
>
>  #ifdef CONFIG_PM
> diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
> index eff9423e90f5..2fa592c37c6f 100644
> --- a/drivers/mfd/mcp-core.c
> +++ b/drivers/mfd/mcp-core.c
> @@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
>         return drv->probe(mcp);
>  }
>
> -static int mcp_bus_remove(struct device *dev)
> +static void mcp_bus_remove(struct device *dev)
>  {
>         struct mcp *mcp =3D to_mcp(dev);
>         struct mcp_driver *drv =3D to_mcp_driver(dev->driver);
>
>         drv->remove(mcp);
> -       return 0;
>  }
>
>  static struct bus_type mcp_bus_type =3D {
> diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
> index 935acc6bbf3c..3bf2bb4fd152 100644
> --- a/drivers/misc/mei/bus.c
> +++ b/drivers/misc/mei/bus.c
> @@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device *dev)
>   *
>   * Return:  0 on success; < 0 otherwise
>   */
> -static int mei_cl_device_remove(struct device *dev)
> +static void mei_cl_device_remove(struct device *dev)
>  {
>         struct mei_cl_device *cldev =3D to_mei_cl_device(dev);
>         struct mei_cl_driver *cldrv =3D to_mei_cl_driver(dev->driver);
> @@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device *dev)
>
>         mei_cl_bus_module_put(cldev);
>         module_put(THIS_MODULE);
> -
> -       return 0;
>  }
>
>  static ssize_t name_show(struct device *dev, struct device_attribute *a,
> diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
> index 667e574a7df2..52656fc87e99 100644
> --- a/drivers/misc/tifm_core.c
> +++ b/drivers/misc/tifm_core.c
> @@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
>         return;
>  }
>
> -static int tifm_device_remove(struct device *dev)
> +static void tifm_device_remove(struct device *dev)
>  {
>         struct tifm_dev *sock =3D container_of(dev, struct tifm_dev, dev)=
;
>         struct tifm_driver *drv =3D container_of(dev->driver, struct tifm=
_driver,
> @@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
>         }
>
>         put_device(dev);
> -       return 0;
>  }
>
>  #ifdef CONFIG_PM
> diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
> index 4383c262b3f5..f6b7a9c5bbff 100644
> --- a/drivers/mmc/core/bus.c
> +++ b/drivers/mmc/core/bus.c
> @@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
>         return drv->probe(card);
>  }
>
> -static int mmc_bus_remove(struct device *dev)
> +static void mmc_bus_remove(struct device *dev)
>  {
>         struct mmc_driver *drv =3D to_mmc_driver(dev->driver);
>         struct mmc_card *card =3D mmc_dev_to_card(dev);
>
>         drv->remove(card);
> -
> -       return 0;
>  }
>
>  static void mmc_bus_shutdown(struct device *dev)
> diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
> index 3d709029e07c..fda03b35c14a 100644
> --- a/drivers/mmc/core/sdio_bus.c
> +++ b/drivers/mmc/core/sdio_bus.c
> @@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
>         return ret;
>  }
>
> -static int sdio_bus_remove(struct device *dev)
> +static void sdio_bus_remove(struct device *dev)
>  {
>         struct sdio_driver *drv =3D to_sdio_driver(dev->driver);
>         struct sdio_func *func =3D dev_to_sdio_func(dev);
> @@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
>                 pm_runtime_put_sync(dev);
>
>         dev_pm_domain_detach(dev, false);
> -
> -       return 0;
>  }
>
>  static const struct dev_pm_ops sdio_bus_pm_ops =3D {
> diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
> index ccec29970d5b..14b154929533 100644
> --- a/drivers/net/netdevsim/bus.c
> +++ b/drivers/net/netdevsim/bus.c
> @@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
>         return nsim_dev_probe(nsim_bus_dev);
>  }
>
> -static int nsim_bus_remove(struct device *dev)
> +static void nsim_bus_remove(struct device *dev)
>  {
>         struct nsim_bus_dev *nsim_bus_dev =3D to_nsim_bus_dev(dev);
>
>         nsim_dev_remove(nsim_bus_dev);
> -       return 0;
>  }
>
>  static int nsim_num_vf(struct device *dev)
> diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
> index f8f75a504a58..27dd93deff6e 100644
> --- a/drivers/ntb/core.c
> +++ b/drivers/ntb/core.c
> @@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
>         return rc;
>  }
>
> -static int ntb_remove(struct device *dev)
> +static void ntb_remove(struct device *dev)
>  {
>         struct ntb_dev *ntb;
>         struct ntb_client *client;
> @@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
>                 client->ops.remove(client, ntb);
>                 put_device(dev);
>         }
> -
> -       return 0;
>  }
>
>  static void ntb_dev_release(struct device *dev)
> diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
> index 4a02561cfb96..a9b97ebc71ac 100644
> --- a/drivers/ntb/ntb_transport.c
> +++ b/drivers/ntb/ntb_transport.c
> @@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device *dev=
)
>         return rc;
>  }
>
> -static int ntb_transport_bus_remove(struct device *dev)
> +static void ntb_transport_bus_remove(struct device *dev)
>  {
>         const struct ntb_transport_client *client;
>
> @@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device *de=
v)
>         client->remove(dev);
>
>         put_device(dev);
> -
> -       return 0;
>  }
>
>  static struct bus_type ntb_transport_bus =3D {
> diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
> index e6aa87043a95..9dc7f3edd42b 100644
> --- a/drivers/nvdimm/bus.c
> +++ b/drivers/nvdimm/bus.c
> @@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
>         return rc;
>  }
>
> -static int nvdimm_bus_remove(struct device *dev)
> +static void nvdimm_bus_remove(struct device *dev)
>  {
>         struct nd_device_driver *nd_drv =3D to_nd_device_driver(dev->driv=
er);
>         struct module *provider =3D to_bus_provider(dev);
> @@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
>         dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver->name,
>                         dev_name(dev));
>         module_put(provider);
> -       return 0;
>  }
>
>  static void nvdimm_bus_shutdown(struct device *dev)
> diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/p=
ci-epf-core.c
> index 4b9ad96bf1b2..502eb79cd551 100644
> --- a/drivers/pci/endpoint/pci-epf-core.c
> +++ b/drivers/pci/endpoint/pci-epf-core.c
> @@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device *dev)
>         return driver->probe(epf);
>  }
>
> -static int pci_epf_device_remove(struct device *dev)
> +static void pci_epf_device_remove(struct device *dev)
>  {
>         struct pci_epf *epf =3D to_pci_epf(dev);
>         struct pci_epf_driver *driver =3D to_pci_epf_driver(dev->driver);
> @@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device *dev)
>         if (driver->remove)
>                 driver->remove(epf);
>         epf->driver =3D NULL;
> -
> -       return 0;
>  }
>
>  static struct bus_type pci_epf_bus_type =3D {
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 3a72352aa5cf..a0615395500a 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
>         return error;
>  }
>
> -static int pci_device_remove(struct device *dev)
> +static void pci_device_remove(struct device *dev)
>  {
>         struct pci_dev *pci_dev =3D to_pci_dev(dev);
>         struct pci_driver *drv =3D pci_dev->driver;
> @@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
>          */
>
>         pci_dev_put(pci_dev);
> -       return 0;
>  }
>
>  static void pci_device_shutdown(struct device *dev)
> diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
> index bd81aa64d011..5bd1b80424e7 100644
> --- a/drivers/pcmcia/ds.c
> +++ b/drivers/pcmcia/ds.c
> @@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *=
s, struct pcmcia_device *le
>         return;
>  }
>
> -static int pcmcia_device_remove(struct device *dev)
> +static void pcmcia_device_remove(struct device *dev)
>  {
>         struct pcmcia_device *p_dev;
>         struct pcmcia_driver *p_drv;
> @@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device *dev)
>         /* references from pcmcia_device_probe */
>         pcmcia_put_dev(p_dev);
>         module_put(p_drv->owner);
> -
> -       return 0;
>  }
>
>
> diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform=
/surface/aggregator/bus.c
> index 0169677c243e..0a40dd9c94ed 100644
> --- a/drivers/platform/surface/aggregator/bus.c
> +++ b/drivers/platform/surface/aggregator/bus.c
> @@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
>                 ->probe(to_ssam_device(dev));
>  }
>
> -static int ssam_bus_remove(struct device *dev)
> +static void ssam_bus_remove(struct device *dev)
>  {
>         struct ssam_device_driver *sdrv =3D to_ssam_device_driver(dev->dr=
iver);
>
>         if (sdrv->remove)
>                 sdrv->remove(to_ssam_device(dev));
> -
> -       return 0;
>  }
>
>  struct bus_type ssam_bus_type =3D {
> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> index 62e0d56a3332..a76313006bdc 100644
> --- a/drivers/platform/x86/wmi.c
> +++ b/drivers/platform/x86/wmi.c
> @@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
>         return ret;
>  }
>
> -static int wmi_dev_remove(struct device *dev)
> +static void wmi_dev_remove(struct device *dev)
>  {
>         struct wmi_block *wblock =3D dev_to_wblock(dev);
>         struct wmi_driver *wdriver =3D
> @@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
>
>         if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
>                 dev_warn(dev, "failed to disable device\n");
> -
> -       return 0;
>  }
>
>  static struct class wmi_bus_class =3D {
> diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
> index c29d590c5e4f..cc6757dfa3f1 100644
> --- a/drivers/pnp/driver.c
> +++ b/drivers/pnp/driver.c
> @@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
>         return error;
>  }
>
> -static int pnp_device_remove(struct device *dev)
> +static void pnp_device_remove(struct device *dev)
>  {
>         struct pnp_dev *pnp_dev =3D to_pnp_dev(dev);
>         struct pnp_driver *drv =3D pnp_dev->driver;
> @@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
>                 pnp_disable_dev(pnp_dev);
>
>         pnp_device_detach(pnp_dev);
> -       return 0;
>  }
>
>  static void pnp_device_shutdown(struct device *dev)
> diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c
> index 72874153972e..a72bb0a40fcf 100644
> --- a/drivers/rapidio/rio-driver.c
> +++ b/drivers/rapidio/rio-driver.c
> @@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
>   * driver, then run the driver remove() method.  Then update
>   * the reference count.
>   */
> -static int rio_device_remove(struct device *dev)
> +static void rio_device_remove(struct device *dev)
>  {
>         struct rio_dev *rdev =3D to_rio_dev(dev);
>         struct rio_driver *rdrv =3D rdev->driver;
> @@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
>         }
>
>         rio_dev_put(rdev);
> -
> -       return 0;
>  }
>
>  static void rio_device_shutdown(struct device *dev)
> diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> index c1404d3dae2c..7f6fac618ab2 100644
> --- a/drivers/rpmsg/rpmsg_core.c
> +++ b/drivers/rpmsg/rpmsg_core.c
> @@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
>         return err;
>  }
>
> -static int rpmsg_dev_remove(struct device *dev)
> +static void rpmsg_dev_remove(struct device *dev)
>  {
>         struct rpmsg_device *rpdev =3D to_rpmsg_device(dev);
>         struct rpmsg_driver *rpdrv =3D to_rpmsg_driver(rpdev->dev.driver)=
;
> @@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
>
>         if (rpdev->ept)
>                 rpmsg_destroy_ept(rpdev->ept);
> -
> -       return err;
>  }
>
>  static struct bus_type rpmsg_bus =3D {
> diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
> index a6aeab1ea0ae..382c5b5f8cd3 100644
> --- a/drivers/s390/cio/ccwgroup.c
> +++ b/drivers/s390/cio/ccwgroup.c
> @@ -439,15 +439,13 @@ module_exit(cleanup_ccwgroup);
>
>  /************************** driver stuff ******************************/
>
> -static int ccwgroup_remove(struct device *dev)
> +static void ccwgroup_remove(struct device *dev)
>  {
>         struct ccwgroup_device *gdev =3D to_ccwgroupdev(dev);
>         struct ccwgroup_driver *gdrv =3D to_ccwgroupdrv(dev->driver);
>
>         if (gdrv->remove)
>                 gdrv->remove(gdev);
> -
> -       return 0;
>  }
>
>  static void ccwgroup_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
> index 092fd1ea5799..ebc321edba51 100644
> --- a/drivers/s390/cio/css.c
> +++ b/drivers/s390/cio/css.c
> @@ -1371,7 +1371,7 @@ static int css_probe(struct device *dev)
>         return ret;
>  }
>
> -static int css_remove(struct device *dev)
> +static void css_remove(struct device *dev)
>  {
>         struct subchannel *sch;
>
> @@ -1379,8 +1379,6 @@ static int css_remove(struct device *dev)
>         if (sch->driver->remove)
>                 sch->driver->remove(sch);
>         sch->driver =3D NULL;
> -
> -       return 0;
>  }
>
>  static void css_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
> index cd5d2d4d8e46..adf33b653d87 100644
> --- a/drivers/s390/cio/device.c
> +++ b/drivers/s390/cio/device.c
> @@ -1741,7 +1741,7 @@ ccw_device_probe (struct device *dev)
>         return 0;
>  }
>
> -static int ccw_device_remove(struct device *dev)
> +static void ccw_device_remove(struct device *dev)
>  {
>         struct ccw_device *cdev =3D to_ccwdev(dev);
>         struct ccw_driver *cdrv =3D cdev->drv;
> @@ -1775,8 +1775,6 @@ static int ccw_device_remove(struct device *dev)
>         spin_unlock_irq(cdev->ccwlock);
>         io_subchannel_quiesce(sch);
>         __disable_cmf(cdev);
> -
> -       return 0;
>  }
>
>  static void ccw_device_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
> index b31711307e5a..b6b4589c70bd 100644
> --- a/drivers/s390/cio/scm.c
> +++ b/drivers/s390/cio/scm.c
> @@ -28,15 +28,13 @@ static int scmdev_probe(struct device *dev)
>         return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV;
>  }
>
> -static int scmdev_remove(struct device *dev)
> +static void scmdev_remove(struct device *dev)
>  {
>         struct scm_device *scmdev =3D to_scm_dev(dev);
>         struct scm_driver *scmdrv =3D to_scm_drv(dev->driver);
>
>         if (scmdrv->remove)
>                 scmdrv->remove(scmdev);
> -
> -       return 0;
>  }
>
>  static int scmdev_uevent(struct device *dev, struct kobj_uevent_env *env=
)
> diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
> index d2560186d771..8a0d37c0e2a5 100644
> --- a/drivers/s390/crypto/ap_bus.c
> +++ b/drivers/s390/crypto/ap_bus.c
> @@ -884,7 +884,7 @@ static int ap_device_probe(struct device *dev)
>         return rc;
>  }
>
> -static int ap_device_remove(struct device *dev)
> +static void ap_device_remove(struct device *dev)
>  {
>         struct ap_device *ap_dev =3D to_ap_dev(dev);
>         struct ap_driver *ap_drv =3D ap_dev->drv;
> @@ -909,8 +909,6 @@ static int ap_device_remove(struct device *dev)
>         ap_dev->drv =3D NULL;
>
>         put_device(dev);
> -
> -       return 0;
>  }
>
>  struct ap_queue *ap_get_qdev(ap_qid_t qid)
> diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
> index 5b3a20a140f9..58f69366bdcc 100644
> --- a/drivers/scsi/scsi_debug.c
> +++ b/drivers/scsi/scsi_debug.c
> @@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device *dev)
>         return error;
>  }
>
> -static int sdebug_driver_remove(struct device *dev)
> +static void sdebug_driver_remove(struct device *dev)
>  {
>         struct sdebug_host_info *sdbg_host;
>         struct sdebug_dev_info *sdbg_devinfo, *tmp;
> @@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device *dev)
>         }
>
>         scsi_host_put(sdbg_host->shost);
> -       return 0;
>  }
>
>  static int pseudo_lld_bus_match(struct device *dev,
> diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
> index 1794ff0106bc..7c4f32d76966 100644
> --- a/drivers/siox/siox-core.c
> +++ b/drivers/siox/siox-core.c
> @@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
>         return sdriver->probe(sdevice);
>  }
>
> -static int siox_remove(struct device *dev)
> +static void siox_remove(struct device *dev)
>  {
>         struct siox_driver *sdriver =3D
>                 container_of(dev->driver, struct siox_driver, driver);
> @@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
>
>         if (sdriver->remove)
>                 sdriver->remove(sdevice);
> -
> -       return 0;
>  }
>
>  static void siox_shutdown(struct device *dev)
> diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
> index 1d2bc181da05..78480e332ab8 100644
> --- a/drivers/slimbus/core.c
> +++ b/drivers/slimbus/core.c
> @@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
>         return ret;
>  }
>
> -static int slim_device_remove(struct device *dev)
> +static void slim_device_remove(struct device *dev)
>  {
>         struct slim_device *sbdev =3D to_slim_device(dev);
>         struct slim_driver *sbdrv;
> @@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
>                 if (sbdrv->remove)
>                         sbdrv->remove(sbdev);
>         }
> -
> -       return 0;
>  }
>
>  static int slim_device_uevent(struct device *dev, struct kobj_uevent_env=
 *env)
> diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
> index 7abfc8c4fdc7..475a57b435b2 100644
> --- a/drivers/soc/qcom/apr.c
> +++ b/drivers/soc/qcom/apr.c
> @@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
>         return adrv->probe(adev);
>  }
>
> -static int apr_device_remove(struct device *dev)
> +static void apr_device_remove(struct device *dev)
>  {
>         struct apr_device *adev =3D to_apr_device(dev);
>         struct apr_driver *adrv;
> @@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
>                 idr_remove(&apr->svcs_idr, adev->svc_id);
>                 spin_unlock(&apr->svcs_lock);
>         }
> -
> -       return 0;
>  }
>
>  static int apr_uevent(struct device *dev, struct kobj_uevent_env *env)
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index c99181165321..ad2b558dc9cb 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
>         return ret;
>  }
>
> -static int spi_remove(struct device *dev)
> +static void spi_remove(struct device *dev)
>  {
>         const struct spi_driver         *sdrv =3D to_spi_driver(dev->driv=
er);
>
> @@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
>         }
>
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>
>  static void spi_shutdown(struct device *dev)
> diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
> index 51f5aeb65b3b..b37ead9e2fad 100644
> --- a/drivers/spmi/spmi.c
> +++ b/drivers/spmi/spmi.c
> @@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
>         return err;
>  }
>
> -static int spmi_drv_remove(struct device *dev)
> +static void spmi_drv_remove(struct device *dev)
>  {
>         const struct spmi_driver *sdrv =3D to_spmi_driver(dev->driver);
>
> @@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
>         pm_runtime_disable(dev);
>         pm_runtime_set_suspended(dev);
>         pm_runtime_put_noidle(dev);
> -       return 0;
>  }
>
>  static void spmi_drv_shutdown(struct device *dev)
> diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
> index 3a29b5570f9f..8a93c83cb6f8 100644
> --- a/drivers/ssb/main.c
> +++ b/drivers/ssb/main.c
> @@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device *dev)
>                 ssb_drv->shutdown(ssb_dev);
>  }
>
> -static int ssb_device_remove(struct device *dev)
> +static void ssb_device_remove(struct device *dev)
>  {
>         struct ssb_device *ssb_dev =3D dev_to_ssb_dev(dev);
>         struct ssb_driver *ssb_drv =3D drv_to_ssb_drv(dev->driver);
> @@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
>         if (ssb_drv && ssb_drv->remove)
>                 ssb_drv->remove(ssb_dev);
>         ssb_device_put(ssb_dev);
> -
> -       return 0;
>  }
>
>  static int ssb_device_probe(struct device *dev)
> diff --git a/drivers/staging/fieldbus/anybuss/host.c b/drivers/staging/fi=
eldbus/anybuss/host.c
> index 0f730efe9a6d..8a75f6642c78 100644
> --- a/drivers/staging/fieldbus/anybuss/host.c
> +++ b/drivers/staging/fieldbus/anybuss/host.c
> @@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device *dev)
>         return adrv->probe(adev);
>  }
>
> -static int anybus_bus_remove(struct device *dev)
> +static void anybus_bus_remove(struct device *dev)
>  {
>         struct anybuss_client_driver *adrv =3D
>                 to_anybuss_client_driver(dev->driver);
>
>         if (adrv->remove)
>                 adrv->remove(to_anybuss_client(dev));
> -
> -       return 0;
>  }
>
>  static struct bus_type anybus_bus =3D {
> diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gb=
phy.c
> index 13d319860da5..5a5c17a4519b 100644
> --- a/drivers/staging/greybus/gbphy.c
> +++ b/drivers/staging/greybus/gbphy.c
> @@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
>         return ret;
>  }
>
> -static int gbphy_dev_remove(struct device *dev)
> +static void gbphy_dev_remove(struct device *dev)
>  {
>         struct gbphy_driver *gbphy_drv =3D to_gbphy_driver(dev->driver);
>         struct gbphy_device *gbphy_dev =3D to_gbphy_dev(dev);
> @@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
>         pm_runtime_set_suspended(dev);
>         pm_runtime_put_noidle(dev);
>         pm_runtime_dont_use_autosuspend(dev);
> -
> -       return 0;
>  }
>
>  static struct bus_type gbphy_bus_type =3D {
> diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback=
/tcm_loop.c
> index 6d0b0e67e79e..cbb2118fb35e 100644
> --- a/drivers/target/loopback/tcm_loop.c
> +++ b/drivers/target/loopback/tcm_loop.c
> @@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m, struc=
t Scsi_Host *host)
>  }
>
>  static int tcm_loop_driver_probe(struct device *);
> -static int tcm_loop_driver_remove(struct device *);
> +static void tcm_loop_driver_remove(struct device *);
>
>  static int pseudo_lld_bus_match(struct device *dev,
>                                 struct device_driver *dev_driver)
> @@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device *dev)
>         return 0;
>  }
>
> -static int tcm_loop_driver_remove(struct device *dev)
> +static void tcm_loop_driver_remove(struct device *dev)
>  {
>         struct tcm_loop_hba *tl_hba;
>         struct Scsi_Host *sh;
> @@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device *dev)
>
>         scsi_remove_host(sh);
>         scsi_host_put(sh);
> -       return 0;
>  }
>
>  static void tcm_loop_release_adapter(struct device *dev)
> diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
> index a062befcb3b2..7018d959f775 100644
> --- a/drivers/thunderbolt/domain.c
> +++ b/drivers/thunderbolt/domain.c
> @@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
>         return driver->probe(svc, id);
>  }
>
> -static int tb_service_remove(struct device *dev)
> +static void tb_service_remove(struct device *dev)
>  {
>         struct tb_service *svc =3D tb_to_service(dev);
>         struct tb_service_driver *driver;
> @@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
>         driver =3D container_of(dev->driver, struct tb_service_driver, dr=
iver);
>         if (driver->remove)
>                 driver->remove(svc);
> -
> -       return 0;
>  }
>
>  static void tb_service_shutdown(struct device *dev)
> diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> index 9cdfcfe07e87..92498961fd92 100644
> --- a/drivers/tty/serdev/core.c
> +++ b/drivers/tty/serdev/core.c
> @@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
>         return ret;
>  }
>
> -static int serdev_drv_remove(struct device *dev)
> +static void serdev_drv_remove(struct device *dev)
>  {
>         const struct serdev_device_driver *sdrv =3D to_serdev_device_driv=
er(dev->driver);
>         if (sdrv->remove)
>                 sdrv->remove(to_serdev_device(dev));
>
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>
>  static struct bus_type serdev_bus_type =3D {
> diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
> index 7e13b74e60e5..4169cf40a03b 100644
> --- a/drivers/usb/common/ulpi.c
> +++ b/drivers/usb/common/ulpi.c
> @@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
>         return drv->probe(to_ulpi_dev(dev));
>  }
>
> -static int ulpi_remove(struct device *dev)
> +static void ulpi_remove(struct device *dev)
>  {
>         struct ulpi_driver *drv =3D to_ulpi_driver(dev->driver);
>
>         if (drv->remove)
>                 drv->remove(to_ulpi_dev(dev));
> -
> -       return 0;
>  }
>
>  static struct bus_type ulpi_bus =3D {
> diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
> index 7133818a58b9..9e38142acd38 100644
> --- a/drivers/usb/serial/bus.c
> +++ b/drivers/usb/serial/bus.c
> @@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device *dev)
>         return retval;
>  }
>
> -static int usb_serial_device_remove(struct device *dev)
> +static void usb_serial_device_remove(struct device *dev)
>  {
>         struct usb_serial_port *port =3D to_usb_serial_port(dev);
>         struct usb_serial_driver *driver;
> @@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device *de=
v)
>
>         if (!autopm_err)
>                 usb_autopm_put_interface(port->serial->interface);
> -
> -       return 0;
>  }
>
>  static ssize_t new_id_store(struct device_driver *driver,
> diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
> index 7f3c9a8e2bf0..78e0e78954f2 100644
> --- a/drivers/usb/typec/bus.c
> +++ b/drivers/usb/typec/bus.c
> @@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
>         return ret;
>  }
>
> -static int typec_remove(struct device *dev)
> +static void typec_remove(struct device *dev)
>  {
>         struct typec_altmode_driver *drv =3D to_altmode_driver(dev->drive=
r);
>         struct typec_altmode *adev =3D to_typec_altmode(dev);
> @@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
>
>         adev->desc =3D NULL;
>         adev->ops =3D NULL;
> -
> -       return 0;
>  }
>
>  struct bus_type typec_bus =3D {
> diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
> index bb3f1d1f0422..3fc4525fc05c 100644
> --- a/drivers/vdpa/vdpa.c
> +++ b/drivers/vdpa/vdpa.c
> @@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
>         return ret;
>  }
>
> -static int vdpa_dev_remove(struct device *d)
> +static void vdpa_dev_remove(struct device *d)
>  {
>         struct vdpa_device *vdev =3D dev_to_vdpa(d);
>         struct vdpa_driver *drv =3D drv_to_vdpa(vdev->dev.driver);
>
>         if (drv && drv->remove)
>                 drv->remove(vdev);
> -
> -       return 0;
>  }
>
>  static struct bus_type vdpa_bus =3D {
> diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_dri=
ver.c
> index c368ec824e2b..e2cb1ff56f6c 100644
> --- a/drivers/vfio/mdev/mdev_driver.c
> +++ b/drivers/vfio/mdev/mdev_driver.c
> @@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
>         return ret;
>  }
>
> -static int mdev_remove(struct device *dev)
> +static void mdev_remove(struct device *dev)
>  {
>         struct mdev_driver *drv =3D
>                 container_of(dev->driver, struct mdev_driver, driver);
> @@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
>                 drv->remove(mdev);
>
>         mdev_detach_iommu(mdev);
> -
> -       return 0;
>  }
>
>  static int mdev_match(struct device *dev, struct device_driver *drv)
> diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> index 4b15c00c0a0a..2a6055c0d4d3 100644
> --- a/drivers/virtio/virtio.c
> +++ b/drivers/virtio/virtio.c
> @@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
>
>  }
>
> -static int virtio_dev_remove(struct device *_d)
> +static void virtio_dev_remove(struct device *_d)
>  {
>         struct virtio_device *dev =3D dev_to_virtio(_d);
>         struct virtio_driver *drv =3D drv_to_virtio(dev->dev.driver);
> @@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
>
>         /* Acknowledge the device's existence again. */
>         virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
> -       return 0;
>  }
>
>  static struct bus_type virtio_bus =3D {
> diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
> index 1b15afea28ee..8dba20186be3 100644
> --- a/drivers/vme/vme.c
> +++ b/drivers/vme/vme.c
> @@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
>         return -ENODEV;
>  }
>
> -static int vme_bus_remove(struct device *dev)
> +static void vme_bus_remove(struct device *dev)
>  {
>         struct vme_driver *driver;
>         struct vme_dev *vdev =3D dev_to_vme_dev(dev);
> @@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
>         driver =3D dev->platform_data;
>         if (driver->remove)
>                 driver->remove(vdev);
> -
> -       return 0;
>  }
>
>  struct bus_type vme_bus_type =3D {
> diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
> index 2a93b7c9c159..2754bdfadcb8 100644
> --- a/drivers/xen/xenbus/xenbus.h
> +++ b/drivers/xen/xenbus/xenbus.h
> @@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
>
>  int xenbus_match(struct device *_dev, struct device_driver *_drv);
>  int xenbus_dev_probe(struct device *_dev);
> -int xenbus_dev_remove(struct device *_dev);
> +void xenbus_dev_remove(struct device *_dev);
>  int xenbus_register_driver_common(struct xenbus_driver *drv,
>                                   struct xen_bus_type *bus,
>                                   struct module *owner,
> diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbu=
s_probe.c
> index 97f0d234482d..f4f52d574df9 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -326,7 +326,7 @@ int xenbus_dev_probe(struct device *_dev)
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_probe);
>
> -int xenbus_dev_remove(struct device *_dev)
> +void xenbus_dev_remove(struct device *_dev)
>  {
>         struct xenbus_device *dev =3D to_xenbus_device(_dev);
>         struct xenbus_driver *drv =3D to_xenbus_driver(_dev->driver);
> @@ -356,8 +356,6 @@ int xenbus_dev_remove(struct device *_dev)
>         if (!drv->allow_rebind ||
>             xenbus_read_driver_state(dev->nodename) =3D=3D XenbusStateClo=
sing)
>                 xenbus_switch_state(dev, XenbusStateClosed);
> -
> -       return 0;
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_remove);
>
> diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
> index 1ea5e1d1545b..062777a45a74 100644
> --- a/include/linux/device/bus.h
> +++ b/include/linux/device/bus.h
> @@ -91,7 +91,7 @@ struct bus_type {
>         int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
>         int (*probe)(struct device *dev);
>         void (*sync_state)(struct device *dev);
> -       int (*remove)(struct device *dev);
> +       void (*remove)(struct device *dev);
>         void (*shutdown)(struct device *dev);
>
>         int (*online)(struct device *dev);
> diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
> index 002fb5bf220b..c9579d97fbab 100644
> --- a/sound/aoa/soundbus/core.c
> +++ b/sound/aoa/soundbus/core.c
> @@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev, struct=
 kobj_uevent_env *env)
>         return retval;
>  }
>
> -static int soundbus_device_remove(struct device *dev)
> +static void soundbus_device_remove(struct device *dev)
>  {
>         struct soundbus_dev * soundbus_dev =3D to_soundbus_device(dev);
>         struct soundbus_driver * drv =3D to_soundbus_driver(dev->driver);
> @@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device *dev)
>         if (dev->driver && drv->remove)
>                 drv->remove(soundbus_dev);
>         soundbus_dev_put(soundbus_dev);
> -
> -       return 0;
>  }
>
>  static void soundbus_device_shutdown(struct device *dev)
> --
> 2.30.2
>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:03:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:03:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151608.280623 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yma-0007LJ-6t; Wed, 07 Jul 2021 04:03:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151608.280623; Wed, 07 Jul 2021 04:03:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yma-0007L7-3R; Wed, 07 Jul 2021 04:03:32 +0000
Received: by outflank-mailman (input) for mailman id 151608;
 Tue, 06 Jul 2021 18:08:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Lytm=L6=linaro.org=bjorn.andersson@srs-us1.protection.inumbo.net>)
 id 1m0pUd-0006Be-JG
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 18:08:23 +0000
Received: from mail-ot1-x331.google.com (unknown [2607:f8b0:4864:20::331])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 08e87094-677b-4ee8-9554-efdf7dd1128e;
 Tue, 06 Jul 2021 18:08:22 +0000 (UTC)
Received: by mail-ot1-x331.google.com with SMTP id
 f12-20020a056830204cb029048bcf4c6bd9so10394211otp.8
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 11:08:22 -0700 (PDT)
Received: from yoga (104-57-184-186.lightspeed.austtx.sbcglobal.net.
 [104.57.184.186])
 by smtp.gmail.com with ESMTPSA id 68sm497113otd.74.2021.07.06.11.08.20
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 06 Jul 2021 11:08:21 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08e87094-677b-4ee8-9554-efdf7dd1128e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=linaro.org; s=google;
        h=date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:in-reply-to;
        bh=rFh4HQBpaw9ewOD7eKuJ7KI9YAzHhN8tlxJ6LopMKHs=;
        b=Sz6rE6fIxKghlltcLCE+UXPsQefAUgPvTMscjeRzq2kl6NTGV49umux5xM0XcDuF3f
         KuSKKfkZ8nSISGEXHz3w1v+CP9bxuRJkim+LBmkXAMBhskBSVWy4R8UYC7L1pwY+g7hz
         Zg3WKG3mRVhsusU5VFmdXh5UPocqhZf4lahEU95r9tDGNbsVfHF1Q4HkA+YZfm/i81fd
         v0xNi9dJEaEvf856OdG6fjSc31APYItT+IUiPzbg0w9QbfcYoXqLRo58SwLlUHuXr/Qb
         gjgu5RAVRwk/bKL57rYJjqGIxVt7qPeDusZUEamQ36NdV7/ZYwdc/uo7wSJkJLcpf0tD
         jOXA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:cc:subject:message-id:references
         :mime-version:content-disposition:in-reply-to;
        bh=rFh4HQBpaw9ewOD7eKuJ7KI9YAzHhN8tlxJ6LopMKHs=;
        b=b1fx3YtImkEU8dMJ+MRkYzXF/ESAdcP+6QzX8TSZfmcU0WDsV2u1gNRgcKvXpPI07f
         VvsrkMOYXMlPjrkmt+95Pp8tJr6ABAvkvbTwLcs3y2MRDs/w71zhB/9KfzaOLeid/xQM
         n6OLpfoY1besM9zsXo6nhcpQRCrTHNdjZskqedwvng3o0wJrisMcA7u+tzHvemvtoytL
         Qbn5rGp2drAmTbFa4cFkWgDHkhQvN1iBxFs4WNbhJOa2TGI8KSIGWKCcMUJrjzSQ91H5
         V9z9vOBx7svDkCYd4yfIqoKTecsy1tBvPGHGMH7Nx2VLVHbxCQWKq4rV81k5BDLjwO5r
         bARQ==
X-Gm-Message-State: AOAM530R31SJ2LpLb/53R9xnTweIB9jBrTfmVHEZT0jWeNe8xjsIrwPV
	v+vOqHOW9JQISZm6xm7Ubha25Q==
X-Google-Smtp-Source: ABdhPJwwC8pa+wbm0v5SSaX+DFJoQ7jJmXTjdD3iH0933Y2rw8Y2+zYlxp2w0qjcBNkHXGnjSvRJ6w==
X-Received: by 2002:a9d:3d3:: with SMTP id f77mr16276146otf.43.1625594902170;
        Tue, 06 Jul 2021 11:08:22 -0700 (PDT)
Date: Tue, 6 Jul 2021 13:08:18 -0500
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
Cc: kernel@pengutronix.de, linux-arm-kernel@lists.infradead.org,
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
	linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
	dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
	linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <YOSb1+yeVeLxiSRc@yoga>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>

On Tue 06 Jul 10:48 CDT 2021, Uwe Kleine-K?nig wrote:

> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 

Thanks for doing this!

Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org> (rpmsg and apr)

[..]
> diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> index c1404d3dae2c..7f6fac618ab2 100644
> --- a/drivers/rpmsg/rpmsg_core.c
> +++ b/drivers/rpmsg/rpmsg_core.c
> @@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
>  	return err;
>  }
>  
> -static int rpmsg_dev_remove(struct device *dev)
> +static void rpmsg_dev_remove(struct device *dev)
>  {
>  	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
>  	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
> @@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
>  
>  	if (rpdev->ept)
>  		rpmsg_destroy_ept(rpdev->ept);
> -
> -	return err;

This leaves err assigned but never used, but I don't mind following up
with a patch cleaning that up after this has landed.

>  }
>  
>  static struct bus_type rpmsg_bus = {

Regards,
Bjorn


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:03:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:03:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151732.280630 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yma-0007PF-Le; Wed, 07 Jul 2021 04:03:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151732.280630; Wed, 07 Jul 2021 04:03:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yma-0007OB-DP; Wed, 07 Jul 2021 04:03:32 +0000
Received: by outflank-mailman (input) for mailman id 151732;
 Tue, 06 Jul 2021 20:43:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Lytm=L6=linaro.org=bjorn.andersson@srs-us1.protection.inumbo.net>)
 id 1m0rug-00086e-0R
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 20:43:26 +0000
Received: from mail-oo1-xc36.google.com (unknown [2607:f8b0:4864:20::c36])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fef6214a-9c35-48ae-b0f7-70f294bd6364;
 Tue, 06 Jul 2021 20:43:24 +0000 (UTC)
Received: by mail-oo1-xc36.google.com with SMTP id
 o23-20020a4a2c170000b029025469ad0e4aso2476998ooo.0
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 13:43:24 -0700 (PDT)
Received: from yoga (104-57-184-186.lightspeed.austtx.sbcglobal.net.
 [104.57.184.186])
 by smtp.gmail.com with ESMTPSA id x130sm1332892oix.22.2021.07.06.13.43.22
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 06 Jul 2021 13:43:23 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fef6214a-9c35-48ae-b0f7-70f294bd6364
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=linaro.org; s=google;
        h=date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:in-reply-to;
        bh=pxMY07o9eA6SvMdwqfO/Cy/RP18zRy8WHvKUzTEaaNE=;
        b=cMEULcwqLZ1Wut54PhoGe8eWn9DWOkTBGefRRfl5OdVDl+rs626G5wMaH28cgDjzcy
         C3SrxS4IBWN9GT87WmK8g47N1LXQplCWDOfx8int0/GS3k/x/nkilLmTHNlFEJRG7MNd
         XBIkEEXZ1pU0eRvjS1TRSvA1B76ydqAA34SpYmKB2ihzHjiFB86o3rkOkpvBUwbSv3hH
         SAJ7sWW3535WnApBT/aqgm8mqOlZd3rAIlZ18pf5XSKHOT2S+byWJIp1xZIbcvBH0etl
         zsjB18jSpkL6JUn2+voD9bKAbUaWuj/V1AbjBFUkZHMHiCqgtvfqmj4sQqDjclnu51kM
         rRng==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:cc:subject:message-id:references
         :mime-version:content-disposition:in-reply-to;
        bh=pxMY07o9eA6SvMdwqfO/Cy/RP18zRy8WHvKUzTEaaNE=;
        b=tEHS6tMctvNVwRmeUVSF3z60OHvMvlUcBpigRXZ5gz4/nUaNOXxVgKqlTkprnAXzrK
         Oz6eQSOfJEnBI5u11XdPuLzS6pnLcnDz9qDjJ1+pGfbORsKY8sXcKo3N08ClcrfRq/K/
         xr9TL9tik/Uc/V4kAJezFftKvhWChh6p66b7209LwDYzOgWEBBZsK5FVyg4ocaupUwOn
         0QcnFrmRtsdMYF6LqPPm6vBtmcLVM8nXLaE8RpcgOTECMDhmy3QmkQ8Bn3wbMMMeS2C4
         JUCEZiTL+SYoHCipZkIMFkMdhdElToRfoi43BLJm4QYr7HTxOOkV4j6ueLcorsCOkNEE
         6G2g==
X-Gm-Message-State: AOAM531YTWSYexnIF3y1VaQ26rOuyM5UBc5scNGuk1Ge+M8sysp8EVVA
	EAMz8sy3EaOHyB+KB0v9tHXpgQ==
X-Google-Smtp-Source: ABdhPJxDvDPv3ADYsyyhWPVlnzb7CaqMGlOMdSkFiej4dUoXbTCedb2luVlDDH/zGyqw6KpVymfMhg==
X-Received: by 2002:a4a:d6cc:: with SMTP id j12mr2894172oot.0.1625604204373;
        Tue, 06 Jul 2021 13:43:24 -0700 (PDT)
Date: Tue, 6 Jul 2021 15:43:21 -0500
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
Cc: nvdimm@lists.linux.dev, linux-hyperv@vger.kernel.org,
	kvm@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-fpga@vger.kernel.org, linux-pci@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-cxl@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, target-devel@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	linux1394-devel@lists.sourceforge.net, linux-scsi@vger.kernel.org,
	linux-staging@lists.linux.dev, linux-acpi@vger.kernel.org,
	industrypack-devel@lists.sourceforge.net,
	linux-input@vger.kernel.org, xen-devel@lists.xenproject.org,
	linux-sunxi@lists.linux.dev, linux-media@vger.kernel.org,
	linux-arm-msm@vger.kernel.org, linux-serial@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, greybus-dev@lists.linaro.org,
	virtualization@lists.linux-foundation.org,
	linux-arm-kernel@lists.infradead.org, linux-parisc@vger.kernel.org,
	netdev@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-spi@vger.kernel.org, kernel@pengutronix.de,
	dmaengine@vger.kernel.org, linux-ntb@googlegroups.com,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <YOTAaQ7AnkCvRQaS@yoga>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
 <YOSb1+yeVeLxiSRc@yoga>
 <20210706184323.fudcbsiu4i34dojs@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210706184323.fudcbsiu4i34dojs@pengutronix.de>

On Tue 06 Jul 13:43 CDT 2021, Uwe Kleine-K?nig wrote:

> Hello Bjorn,
> 
> On Tue, Jul 06, 2021 at 01:08:18PM -0500, Bjorn Andersson wrote:
> > On Tue 06 Jul 10:48 CDT 2021, Uwe Kleine-K?nig wrote:
> > > diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> > > index c1404d3dae2c..7f6fac618ab2 100644
> > > --- a/drivers/rpmsg/rpmsg_core.c
> > > +++ b/drivers/rpmsg/rpmsg_core.c
> > > @@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
> > >  	return err;
> > >  }
> > >  
> > > -static int rpmsg_dev_remove(struct device *dev)
> > > +static void rpmsg_dev_remove(struct device *dev)
> > >  {
> > >  	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
> > >  	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
> > > @@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
> > >  
> > >  	if (rpdev->ept)
> > >  		rpmsg_destroy_ept(rpdev->ept);
> > > -
> > > -	return err;
> > 
> > This leaves err assigned but never used, but I don't mind following up
> > with a patch cleaning that up after this has landed.
> 
> Ah, good catch. If I send out a v3 I will fold the following into this
> patch:
> 
> diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> index 7f6fac618ab2..9151836190ce 100644
> --- a/drivers/rpmsg/rpmsg_core.c
> +++ b/drivers/rpmsg/rpmsg_core.c
> @@ -534,10 +534,9 @@ static void rpmsg_dev_remove(struct device *dev)
>  {
>  	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
>  	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
> -	int err = 0;
>  
>  	if (rpdev->ops->announce_destroy)
> -		err = rpdev->ops->announce_destroy(rpdev);
> +		rpdev->ops->announce_destroy(rpdev);
>  
>  	if (rpdrv->remove)
>  		rpdrv->remove(rpdev);
> 

Sounds good, feel free to keep my ack on this.

> Maybe .announce_destroy() should then be changed to return void, too?
> Something like:
> 

Yes, I saw this opportunity as well. But that will fan out further, so
let's postpone that until your series has landed and we can follow up
with such changes through the remoteproc tree.

> diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h
> index a76c344253bf..d5204756714c 100644
> --- a/drivers/rpmsg/rpmsg_internal.h
> +++ b/drivers/rpmsg/rpmsg_internal.h
> @@ -40,7 +40,7 @@ struct rpmsg_device_ops {
>  					    struct rpmsg_channel_info chinfo);
>  
>  	int (*announce_create)(struct rpmsg_device *ept);
> -	int (*announce_destroy)(struct rpmsg_device *ept);
> +	void (*announce_destroy)(struct rpmsg_device *ept);
>  };
>  
>  /**
> diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c
> index 8e49a3bacfc7..4e05994634f8 100644
> --- a/drivers/rpmsg/virtio_rpmsg_bus.c
> +++ b/drivers/rpmsg/virtio_rpmsg_bus.c
> @@ -340,7 +340,7 @@ static int virtio_rpmsg_announce_create(struct rpmsg_device *rpdev)
>  	return err;
>  }
>  
> -static int virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev)
> +static void virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev)
>  {
>  	struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev);
>  	struct virtproc_info *vrp = vch->vrp;
> @@ -360,8 +360,6 @@ static int virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev)
>  		if (err)
>  			dev_err(dev, "failed to announce service %d\n", err);
>  	}
> -
> -	return err;
>  }
>  
>  static const struct rpmsg_device_ops virtio_rpmsg_ops = {
> 
> though it's not obvious for me that the last hunk is sensible. (OTOH the
> return code is ignored anyhow as rpmsg_dev_remove() is the only caller.
> 

I need to backtrack a little bit more to figure out why we ended up with
this...

Thanks,
Bjorn


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:03:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:03:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151619.280646 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ymk-0008HX-UM; Wed, 07 Jul 2021 04:03:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151619.280646; Wed, 07 Jul 2021 04:03:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0ymk-0008HL-QV; Wed, 07 Jul 2021 04:03:42 +0000
Received: by outflank-mailman (input) for mailman id 151619;
 Tue, 06 Jul 2021 18:16:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=fD5C=L6=linux.intel.com=srinivas.pandruvada@srs-us1.protection.inumbo.net>)
 id 1m0pca-0007dG-QR
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 18:16:36 +0000
Received: from mga11.intel.com (unknown [192.55.52.93])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 49b8c068-de86-11eb-84b6-12813bfff9fa;
 Tue, 06 Jul 2021 18:16:31 +0000 (UTC)
Received: from orsmga003.jf.intel.com ([10.7.209.27])
 by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 06 Jul 2021 11:16:28 -0700
Received: from jaynorto-mobl1.amr.corp.intel.com ([10.254.207.166])
 by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 06 Jul 2021 11:15:54 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 49b8c068-de86-11eb-84b6-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="206159769"
X-IronPort-AV: E=Sophos;i="5.83,329,1616482800"; 
   d="scan'208";a="206159769"
X-IronPort-AV: E=Sophos;i="5.83,329,1616482800"; 
   d="scan'208";a="410569926"
Message-ID: <a020ead8a23b8f2fcd57e54d6fb56d5ce0753fde.camel@linux.intel.com>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
To: Uwe =?ISO-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>, 
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, Cornelia Huck <cohuck@redhat.com>, 
 linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>, Thomas
 Bogendoerfer <tsbogend@alpha.franken.de>, "James E.J. Bottomley"
 <James.Bottomley@HansenPartnership.com>,  Helge Deller <deller@gmx.de>,
 Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>,  Paul Mackerras
 <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown
 <lenb@kernel.org>,  William Breathitt Gray <vilhelm.gray@gmail.com>,
 =?UTF-8?Q?Rafa=C5=82_Mi=C5=82ecki?= <zajec5@gmail.com>,  Maxime Ripard
 <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec
 <jernej.skrabec@gmail.com>,  Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>, Dan Williams
 <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>, Vinod Koul
 <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep
 Holla <sudeep.holla@arm.com>, Cristian Marussi <cristian.marussi@arm.com>,
 Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, Moritz Fischer
 <mdf@kernel.org>,  Jiri Kosina <jikos@kernel.org>, Benjamin Tissoires
 <benjamin.tissoires@redhat.com>, "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>, Stephen Hemminger
 <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, Dexuan Cui
 <decui@microsoft.com>, Alexander Shishkin
 <alexander.shishkin@linux.intel.com>,  Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov
 <dmitry.torokhov@gmail.com>, Samuel Iglesias Gonsalvez
 <siglesias@igalia.com>,  Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab
 <mchehab@kernel.org>, Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov
 <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones
 <lee.jones@linaro.org>, Tomas Winkler <tomas.winkler@intel.com>, Arnd
 Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>, "David S.
 Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, Allen Hubbe
 <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, Lorenzo
 Pieralisi <lorenzo.pieralisi@arm.com>, Krzysztof
 =?UTF-8?Q?Wilczy=C5=84ski?= <kw@linux.com>, Bjorn Helgaas
 <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>, Matt Porter
 <mporter@kernel.crashing.org>, Alexandre Bounine <alex.bou9@gmail.com>,
 Ohad Ben-Cohen <ohad@wizery.com>, Bjorn Andersson
 <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>,
 "Martin K. Petersen" <martin.petersen@oracle.com>,  Thorsten Scherer
 <t.scherer@eckelmann.de>, Srinivas Kandagatla
 <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, Mark
 Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch
 <m@bues.ch>, Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold
 <johan@kernel.org>, Alex Elder <elder@kernel.org>, Andreas Noever
 <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, Mika
 Westerberg <mika.westerberg@linux.intel.com>,  Yehezkel Bernat
 <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>, Jiri Slaby
 <jirislaby@kernel.org>,  Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>, Alex Williamson
 <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, Manohar
 Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky
 <boris.ostrovsky@oracle.com>,  Juergen Gross <jgross@suse.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Johannes Berg
 <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, Takashi Iwai
 <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler
 <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland
 <samuel@sholland.org>, Qinglang Miao <miaoqinglang@huawei.com>, Alexey
 Kardashevskiy <aik@ozlabs.ru>, Kai-Heng Feng <kai.heng.feng@canonical.com>,
 Joey Pabalan <jpabalanb@gmail.com>, Pali =?ISO-8859-1?Q?Roh=E1r?=
 <pali@kernel.org>,  Adrian Hunter <adrian.hunter@intel.com>, Frank Li
 <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>, Bodo
 Stroesser <bostroesser@gmail.com>,  Hannes Reinecke <hare@suse.de>, David
 Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, Julien
 Grall <jgrall@amazon.com>,  linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org,  linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org,  linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org,  linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, 
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net, 
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org, 
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org, 
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net, 
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org,  linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org,  platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org,  linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org,  linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org,  linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org,  target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org,  linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org,  kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org, Russell King <rmk+kernel@armlinux.org.uk>,
 Johannes Thumshirn <jth@kernel.org>
Date: Tue, 06 Jul 2021 11:15:52 -0700
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
	 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.38.1-1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

On Tue, 2021-07-06 at 17:48 +0200, Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because
> there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by
> drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't
> anticipate
> wrong expectations for driver authors.
> 
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For
> ARM, Amba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Rohár <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for
> drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For
> drivers/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi
> and typec)
> Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> (For
> ipack)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

For drivers/hid/intel-ish-hid

Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

> ---
> 
>  arch/arm/common/locomo.c                  | 3 +--
>  arch/arm/common/sa1111.c                  | 4 +---
>  arch/arm/mach-rpc/ecard.c                 | 4 +---
>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
>  arch/parisc/kernel/drivers.c              | 5 ++---
>  arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
>  arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
>  arch/powerpc/platforms/pseries/vio.c      | 3 +--
>  drivers/acpi/bus.c                        | 3 +--
>  drivers/amba/bus.c                        | 4 +---
>  drivers/base/auxiliary.c                  | 4 +---
>  drivers/base/isa.c                        | 4 +---
>  drivers/base/platform.c                   | 4 +---
>  drivers/bcma/main.c                       | 6 ++----
>  drivers/bus/sunxi-rsb.c                   | 4 +---
>  drivers/cxl/core.c                        | 3 +--
>  drivers/dax/bus.c                         | 4 +---
>  drivers/dma/idxd/sysfs.c                  | 4 +---
>  drivers/firewire/core-device.c            | 4 +---
>  drivers/firmware/arm_scmi/bus.c           | 4 +---
>  drivers/firmware/google/coreboot_table.c  | 4 +---
>  drivers/fpga/dfl.c                        | 4 +---
>  drivers/hid/hid-core.c                    | 4 +---
>  drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
>  drivers/hv/vmbus_drv.c                    | 5 +----
>  drivers/hwtracing/intel_th/core.c         | 4 +---
>  drivers/i2c/i2c-core-base.c               | 5 +----
>  drivers/i3c/master.c                      | 4 +---
>  drivers/input/gameport/gameport.c         | 3 +--
>  drivers/input/serio/serio.c               | 3 +--
>  drivers/ipack/ipack.c                     | 4 +---
>  drivers/macintosh/macio_asic.c            | 4 +---
>  drivers/mcb/mcb-core.c                    | 4 +---
>  drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
>  drivers/memstick/core/memstick.c          | 3 +--
>  drivers/mfd/mcp-core.c                    | 3 +--
>  drivers/misc/mei/bus.c                    | 4 +---
>  drivers/misc/tifm_core.c                  | 3 +--
>  drivers/mmc/core/bus.c                    | 4 +---
>  drivers/mmc/core/sdio_bus.c               | 4 +---
>  drivers/net/netdevsim/bus.c               | 3 +--
>  drivers/ntb/core.c                        | 4 +---
>  drivers/ntb/ntb_transport.c               | 4 +---
>  drivers/nvdimm/bus.c                      | 3 +--
>  drivers/pci/endpoint/pci-epf-core.c       | 4 +---
>  drivers/pci/pci-driver.c                  | 3 +--
>  drivers/pcmcia/ds.c                       | 4 +---
>  drivers/platform/surface/aggregator/bus.c | 4 +---
>  drivers/platform/x86/wmi.c                | 4 +---
>  drivers/pnp/driver.c                      | 3 +--
>  drivers/rapidio/rio-driver.c              | 4 +---
>  drivers/rpmsg/rpmsg_core.c                | 4 +---
>  drivers/s390/cio/ccwgroup.c               | 4 +---
>  drivers/s390/cio/css.c                    | 4 +---
>  drivers/s390/cio/device.c                 | 4 +---
>  drivers/s390/cio/scm.c                    | 4 +---
>  drivers/s390/crypto/ap_bus.c              | 4 +---
>  drivers/scsi/scsi_debug.c                 | 3 +--
>  drivers/siox/siox-core.c                  | 4 +---
>  drivers/slimbus/core.c                    | 4 +---
>  drivers/soc/qcom/apr.c                    | 4 +---
>  drivers/spi/spi.c                         | 4 +---
>  drivers/spmi/spmi.c                       | 3 +--
>  drivers/ssb/main.c                        | 4 +---
>  drivers/staging/fieldbus/anybuss/host.c   | 4 +---
>  drivers/staging/greybus/gbphy.c           | 4 +---
>  drivers/target/loopback/tcm_loop.c        | 5 ++---
>  drivers/thunderbolt/domain.c              | 4 +---
>  drivers/tty/serdev/core.c                 | 4 +---
>  drivers/usb/common/ulpi.c                 | 4 +---
>  drivers/usb/serial/bus.c                  | 4 +---
>  drivers/usb/typec/bus.c                   | 4 +---
>  drivers/vdpa/vdpa.c                       | 4 +---
>  drivers/vfio/mdev/mdev_driver.c           | 4 +---
>  drivers/virtio/virtio.c                   | 3 +--
>  drivers/vme/vme.c                         | 4 +---
>  drivers/xen/xenbus/xenbus.h               | 2 +-
>  drivers/xen/xenbus/xenbus_probe.c         | 4 +---
>  include/linux/device/bus.h                | 2 +-
>  sound/aoa/soundbus/core.c                 | 4 +---
>  80 files changed, 83 insertions(+), 219 deletions(-)
> 
> diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
> index e45f4e4e06b6..24d21ba63030 100644
> --- a/arch/arm/common/locomo.c
> +++ b/arch/arm/common/locomo.c
> @@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int locomo_bus_remove(struct device *dev)
> +static void locomo_bus_remove(struct device *dev)
>  {
>         struct locomo_dev *ldev = LOCOMO_DEV(dev);
>         struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
>  
>         if (drv->remove)
>                 drv->remove(ldev);
> -       return 0;
>  }
>  
>  struct bus_type locomo_bus_type = {
> diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
> index ff5e0d04cb89..092a2ebc0c28 100644
> --- a/arch/arm/common/sa1111.c
> +++ b/arch/arm/common/sa1111.c
> @@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device
> *dev)
>         return ret;
>  }
>  
> -static int sa1111_bus_remove(struct device *dev)
> +static void sa1111_bus_remove(struct device *dev)
>  {
>         struct sa1111_dev *sadev = to_sa1111_device(dev);
>         struct sa1111_driver *drv = SA1111_DRV(dev->driver);
>  
>         if (drv->remove)
>                 drv->remove(sadev);
> -
> -       return 0;
>  }
>  
>  struct bus_type sa1111_bus_type = {
> diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
> index 827b50f1c73e..53813f9464a2 100644
> --- a/arch/arm/mach-rpc/ecard.c
> +++ b/arch/arm/mach-rpc/ecard.c
> @@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int ecard_drv_remove(struct device *dev)
> +static void ecard_drv_remove(struct device *dev)
>  {
>         struct expansion_card *ec = ECARD_DEV(dev);
>         struct ecard_driver *drv = ECARD_DRV(dev->driver);
> @@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
>         ec->ops = &ecard_default_ops;
>         barrier();
>         ec->irq_data = NULL;
> -
> -       return 0;
>  }
>  
>  /*
> diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-
> gio.c
> index de0768a49ee8..dfc52f661ad0 100644
> --- a/arch/mips/sgi-ip22/ip22-gio.c
> +++ b/arch/mips/sgi-ip22/ip22-gio.c
> @@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
>         return error;
>  }
>  
> -static int gio_device_remove(struct device *dev)
> +static void gio_device_remove(struct device *dev)
>  {
>         struct gio_device *gio_dev = to_gio_device(dev);
>         struct gio_driver *drv = to_gio_driver(dev->driver);
>  
>         if (dev->driver && drv->remove)
>                 drv->remove(gio_dev);
> -       return 0;
>  }
>  
>  static void gio_device_shutdown(struct device *dev)
> diff --git a/arch/parisc/kernel/drivers.c
> b/arch/parisc/kernel/drivers.c
> index 80fa0650736b..776d624a7207 100644
> --- a/arch/parisc/kernel/drivers.c
> +++ b/arch/parisc/kernel/drivers.c
> @@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device
> *dev)
>         return rc;
>  }
>  
> -static int __exit parisc_driver_remove(struct device *dev)
> +static void __exit parisc_driver_remove(struct device *dev)
>  {
>         struct parisc_device *pa_dev = to_parisc_device(dev);
>         struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
> +
>         if (pa_drv->remove)
>                 pa_drv->remove(pa_dev);
> -
> -       return 0;
>  }
>         
>  
> diff --git a/arch/powerpc/platforms/ps3/system-bus.c
> b/arch/powerpc/platforms/ps3/system-bus.c
> index 1a5665875165..cc5774c64fae 100644
> --- a/arch/powerpc/platforms/ps3/system-bus.c
> +++ b/arch/powerpc/platforms/ps3/system-bus.c
> @@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device
> *_dev)
>         return result;
>  }
>  
> -static int ps3_system_bus_remove(struct device *_dev)
> +static void ps3_system_bus_remove(struct device *_dev)
>  {
>         struct ps3_system_bus_device *dev =
> ps3_dev_to_system_bus_dev(_dev);
>         struct ps3_system_bus_driver *drv;
> @@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device
> *_dev)
>                         __func__, __LINE__, drv->core.name);
>  
>         pr_debug(" <- %s:%d: %s\n", __func__, __LINE__,
> dev_name(&dev->core));
> -       return 0;
>  }
>  
>  static void ps3_system_bus_shutdown(struct device *_dev)
> diff --git a/arch/powerpc/platforms/pseries/ibmebus.c
> b/arch/powerpc/platforms/pseries/ibmebus.c
> index c6c79ef55e13..7ee3ed7d6cc2 100644
> --- a/arch/powerpc/platforms/pseries/ibmebus.c
> +++ b/arch/powerpc/platforms/pseries/ibmebus.c
> @@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct
> device *dev)
>         return error;
>  }
>  
> -static int ibmebus_bus_device_remove(struct device *dev)
> +static void ibmebus_bus_device_remove(struct device *dev)
>  {
>         struct platform_device *of_dev = to_platform_device(dev);
>         struct platform_driver *drv = to_platform_driver(dev-
> >driver);
>  
>         if (dev->driver && drv->remove)
>                 drv->remove(of_dev);
> -       return 0;
>  }
>  
>  static void ibmebus_bus_device_shutdown(struct device *dev)
> diff --git a/arch/powerpc/platforms/pseries/vio.c
> b/arch/powerpc/platforms/pseries/vio.c
> index e00f3725ec96..58283cecbd52 100644
> --- a/arch/powerpc/platforms/pseries/vio.c
> +++ b/arch/powerpc/platforms/pseries/vio.c
> @@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
>  }
>  
>  /* convert from struct device to struct vio_dev and pass to driver.
> */
> -static int vio_bus_remove(struct device *dev)
> +static void vio_bus_remove(struct device *dev)
>  {
>         struct vio_dev *viodev = to_vio_dev(dev);
>         struct vio_driver *viodrv = to_vio_driver(dev->driver);
> @@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
>                 vio_cmo_bus_remove(viodev);
>  
>         put_device(devptr);
> -       return 0;
>  }
>  
>  static void vio_bus_shutdown(struct device *dev)
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index ee24246d88fd..51f374e42869 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -1018,7 +1018,7 @@ static int acpi_device_probe(struct device
> *dev)
>         return 0;
>  }
>  
> -static int acpi_device_remove(struct device *dev)
> +static void acpi_device_remove(struct device *dev)
>  {
>         struct acpi_device *acpi_dev = to_acpi_device(dev);
>         struct acpi_driver *acpi_drv = acpi_dev->driver;
> @@ -1033,7 +1033,6 @@ static int acpi_device_remove(struct device
> *dev)
>         acpi_dev->driver_data = NULL;
>  
>         put_device(dev);
> -       return 0;
>  }
>  
>  struct bus_type acpi_bus_type = {
> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> index 939ca220bf78..962041148482 100644
> --- a/drivers/amba/bus.c
> +++ b/drivers/amba/bus.c
> @@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int amba_remove(struct device *dev)
> +static void amba_remove(struct device *dev)
>  {
>         struct amba_device *pcdev = to_amba_device(dev);
>         struct amba_driver *drv = to_amba_driver(dev->driver);
> @@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
>  
>         amba_put_disable_pclk(pcdev);
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>  
>  static void amba_shutdown(struct device *dev)
> diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
> index adc199dfba3c..0c86f5bed9f4 100644
> --- a/drivers/base/auxiliary.c
> +++ b/drivers/base/auxiliary.c
> @@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int auxiliary_bus_remove(struct device *dev)
> +static void auxiliary_bus_remove(struct device *dev)
>  {
>         struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev-
> >driver);
>         struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
> @@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
>         if (auxdrv->remove)
>                 auxdrv->remove(auxdev);
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>  
>  static void auxiliary_bus_shutdown(struct device *dev)
> diff --git a/drivers/base/isa.c b/drivers/base/isa.c
> index aa4737667026..55e3ee2da98f 100644
> --- a/drivers/base/isa.c
> +++ b/drivers/base/isa.c
> @@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
>         return 0;
>  }
>  
> -static int isa_bus_remove(struct device *dev)
> +static void isa_bus_remove(struct device *dev)
>  {
>         struct isa_driver *isa_driver = dev->platform_data;
>  
>         if (isa_driver && isa_driver->remove)
>                 isa_driver->remove(dev, to_isa_dev(dev)->id);
> -
> -       return 0;
>  }
>  
>  static void isa_bus_shutdown(struct device *dev)
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 8640578f45e9..a94b7f454881 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
>         return ret;
>  }
>  
> -static int platform_remove(struct device *_dev)
> +static void platform_remove(struct device *_dev)
>  {
>         struct platform_driver *drv = to_platform_driver(_dev-
> >driver);
>         struct platform_device *dev = to_platform_device(_dev);
> @@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
>                         dev_warn(_dev, "remove callback returned a
> non-zero value. This will be ignored.\n");
>         }
>         dev_pm_domain_detach(_dev, true);
> -
> -       return 0;
>  }
>  
>  static void platform_shutdown(struct device *_dev)
> diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
> index 6535614a7dc1..e076630d17bd 100644
> --- a/drivers/bcma/main.c
> +++ b/drivers/bcma/main.c
> @@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
>  
>  static int bcma_bus_match(struct device *dev, struct device_driver
> *drv);
>  static int bcma_device_probe(struct device *dev);
> -static int bcma_device_remove(struct device *dev);
> +static void bcma_device_remove(struct device *dev);
>  static int bcma_device_uevent(struct device *dev, struct
> kobj_uevent_env *env);
>  
>  static ssize_t manuf_show(struct device *dev, struct
> device_attribute *attr, char *buf)
> @@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
>         return err;
>  }
>  
> -static int bcma_device_remove(struct device *dev)
> +static void bcma_device_remove(struct device *dev)
>  {
>         struct bcma_device *core = container_of(dev, struct
> bcma_device, dev);
>         struct bcma_driver *adrv = container_of(dev->driver, struct
> bcma_driver,
> @@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
>         if (adrv->remove)
>                 adrv->remove(core);
>         put_device(dev);
> -
> -       return 0;
>  }
>  
>  static int bcma_device_uevent(struct device *dev, struct
> kobj_uevent_env *env)
> diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
> index d46db132d085..6f225dddc74f 100644
> --- a/drivers/bus/sunxi-rsb.c
> +++ b/drivers/bus/sunxi-rsb.c
> @@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device
> *dev)
>         return drv->probe(rdev);
>  }
>  
> -static int sunxi_rsb_device_remove(struct device *dev)
> +static void sunxi_rsb_device_remove(struct device *dev)
>  {
>         const struct sunxi_rsb_driver *drv = to_sunxi_rsb_driver(dev-
> >driver);
>  
>         drv->remove(to_sunxi_rsb_device(dev));
> -
> -       return 0;
>  }
>  
>  static struct bus_type sunxi_rsb_bus = {
> diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
> index a2e4d54fc7bc..2b90b7c3b9d7 100644
> --- a/drivers/cxl/core.c
> +++ b/drivers/cxl/core.c
> @@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
>         return to_cxl_drv(dev->driver)->probe(dev);
>  }
>  
> -static int cxl_bus_remove(struct device *dev)
> +static void cxl_bus_remove(struct device *dev)
>  {
>         struct cxl_driver *cxl_drv = to_cxl_drv(dev->driver);
>  
>         if (cxl_drv->remove)
>                 cxl_drv->remove(dev);
> -       return 0;
>  }
>  
>  struct bus_type cxl_bus_type = {
> diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
> index 5aee26e1bbd6..6cc4da4c713d 100644
> --- a/drivers/dax/bus.c
> +++ b/drivers/dax/bus.c
> @@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
>         return 0;
>  }
>  
> -static int dax_bus_remove(struct device *dev)
> +static void dax_bus_remove(struct device *dev)
>  {
>         struct dax_device_driver *dax_drv = to_dax_drv(dev->driver);
>         struct dev_dax *dev_dax = to_dev_dax(dev);
>  
>         if (dax_drv->remove)
>                 dax_drv->remove(dev_dax);
> -
> -       return 0;
>  }
>  
>  static struct bus_type dax_bus_type = {
> diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
> index 0460d58e3941..5a017c62c752 100644
> --- a/drivers/dma/idxd/sysfs.c
> +++ b/drivers/dma/idxd/sysfs.c
> @@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
>         dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
>  }
>  
> -static int idxd_config_bus_remove(struct device *dev)
> +static void idxd_config_bus_remove(struct device *dev)
>  {
>         int rc;
>  
> @@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device
> *dev)
>                         dev_info(dev, "Device %s disabled\n",
> dev_name(dev));
>  
>         }
> -
> -       return 0;
>  }
>  
>  static void idxd_config_bus_shutdown(struct device *dev)
> diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-
> device.c
> index 68216988391f..90ed8fdaba75 100644
> --- a/drivers/firewire/core-device.c
> +++ b/drivers/firewire/core-device.c
> @@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
>         return driver->probe(fw_unit(dev), unit_match(dev, dev-
> >driver));
>  }
>  
> -static int fw_unit_remove(struct device *dev)
> +static void fw_unit_remove(struct device *dev)
>  {
>         struct fw_driver *driver =
>                         container_of(dev->driver, struct fw_driver,
> driver);
>  
>         driver->remove(fw_unit(dev));
> -
> -       return 0;
>  }
>  
>  static int get_modalias(struct fw_unit *unit, char *buffer, size_t
> buffer_size)
> diff --git a/drivers/firmware/arm_scmi/bus.c
> b/drivers/firmware/arm_scmi/bus.c
> index 784cf0027da3..2682c3df651c 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
>         return scmi_drv->probe(scmi_dev);
>  }
>  
> -static int scmi_dev_remove(struct device *dev)
> +static void scmi_dev_remove(struct device *dev)
>  {
>         struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
>         struct scmi_device *scmi_dev = to_scmi_dev(dev);
>  
>         if (scmi_drv->remove)
>                 scmi_drv->remove(scmi_dev);
> -
> -       return 0;
>  }
>  
>  static struct bus_type scmi_bus_type = {
> diff --git a/drivers/firmware/google/coreboot_table.c
> b/drivers/firmware/google/coreboot_table.c
> index dc83ea118c67..c52bcaa9def6 100644
> --- a/drivers/firmware/google/coreboot_table.c
> +++ b/drivers/firmware/google/coreboot_table.c
> @@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int coreboot_bus_remove(struct device *dev)
> +static void coreboot_bus_remove(struct device *dev)
>  {
>         struct coreboot_device *device = CB_DEV(dev);
>         struct coreboot_driver *driver = CB_DRV(dev->driver);
>  
>         if (driver->remove)
>                 driver->remove(device);
> -
> -       return 0;
>  }
>  
>  static struct bus_type coreboot_bus_type = {
> diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
> index 511b20ff35a3..1ae6779a0dd6 100644
> --- a/drivers/fpga/dfl.c
> +++ b/drivers/fpga/dfl.c
> @@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
>         return ddrv->probe(ddev);
>  }
>  
> -static int dfl_bus_remove(struct device *dev)
> +static void dfl_bus_remove(struct device *dev)
>  {
>         struct dfl_driver *ddrv = to_dfl_drv(dev->driver);
>         struct dfl_device *ddev = to_dfl_dev(dev);
>  
>         if (ddrv->remove)
>                 ddrv->remove(ddev);
> -
> -       return 0;
>  }
>  
>  static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env
> *env)
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index 7db332139f7d..dbed2524fd47 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int hid_device_remove(struct device *dev)
> +static void hid_device_remove(struct device *dev)
>  {
>         struct hid_device *hdev = to_hid_device(dev);
>         struct hid_driver *hdrv;
> @@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device
> *dev)
>  
>         if (!hdev->io_started)
>                 up(&hdev->driver_input_lock);
> -
> -       return 0;
>  }
>  
>  static ssize_t modalias_show(struct device *dev, struct
> device_attribute *a,
> diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c
> b/drivers/hid/intel-ish-hid/ishtp/bus.c
> index f0802b047ed8..8a51bd9cd093 100644
> --- a/drivers/hid/intel-ish-hid/ishtp/bus.c
> +++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
> @@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev,
> struct device_driver *drv)
>   *
>   * Return: Return value from driver remove() call.
>   */
> -static int ishtp_cl_device_remove(struct device *dev)
> +static void ishtp_cl_device_remove(struct device *dev)
>  {
>         struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
>         struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev-
> >driver);
> @@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device
> *dev)
>  
>         if (driver->remove)
>                 driver->remove(device);
> -
> -       return 0;
>  }
>  
>  /**
> diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
> index 57bbbaa4e8f7..392c1ac4f819 100644
> --- a/drivers/hv/vmbus_drv.c
> +++ b/drivers/hv/vmbus_drv.c
> @@ -922,7 +922,7 @@ static int vmbus_probe(struct device
> *child_device)
>  /*
>   * vmbus_remove - Remove a vmbus device
>   */
> -static int vmbus_remove(struct device *child_device)
> +static void vmbus_remove(struct device *child_device)
>  {
>         struct hv_driver *drv;
>         struct hv_device *dev = device_to_hv_device(child_device);
> @@ -932,11 +932,8 @@ static int vmbus_remove(struct device
> *child_device)
>                 if (drv->remove)
>                         drv->remove(dev);
>         }
> -
> -       return 0;
>  }
>  
> -
>  /*
>   * vmbus_shutdown - Shutdown a vmbus device
>   */
> diff --git a/drivers/hwtracing/intel_th/core.c
> b/drivers/hwtracing/intel_th/core.c
> index 66eed2dff818..7e753a75d23b 100644
> --- a/drivers/hwtracing/intel_th/core.c
> +++ b/drivers/hwtracing/intel_th/core.c
> @@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
>  
>  static void intel_th_device_remove(struct intel_th_device *thdev);
>  
> -static int intel_th_remove(struct device *dev)
> +static void intel_th_remove(struct device *dev)
>  {
>         struct intel_th_driver *thdrv = to_intel_th_driver(dev-
> >driver);
>         struct intel_th_device *thdev = to_intel_th_device(dev);
> @@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
>         pm_runtime_disable(dev);
>         pm_runtime_set_active(dev);
>         pm_runtime_enable(dev);
> -
> -       return 0;
>  }
>  
>  static struct bus_type intel_th_bus = {
> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-
> base.c
> index 84f12bf90644..54964fbe3f03 100644
> --- a/drivers/i2c/i2c-core-base.c
> +++ b/drivers/i2c/i2c-core-base.c
> @@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
>         return status;
>  }
>  
> -static int i2c_device_remove(struct device *dev)
> +static void i2c_device_remove(struct device *dev)
>  {
>         struct i2c_client       *client = to_i2c_client(dev);
>         struct i2c_adapter      *adap;
> @@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
>         client->irq = 0;
>         if (client->flags & I2C_CLIENT_HOST_NOTIFY)
>                 pm_runtime_put(&client->adapter->dev);
> -
> -       /* return always 0 because there is WIP to make remove-
> functions void */
> -       return 0;
>  }
>  
>  #ifdef CONFIG_PM_SLEEP
> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> index e2e12a5585e5..c3b4c677b442 100644
> --- a/drivers/i3c/master.c
> +++ b/drivers/i3c/master.c
> @@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
>         return driver->probe(i3cdev);
>  }
>  
> -static int i3c_device_remove(struct device *dev)
> +static void i3c_device_remove(struct device *dev)
>  {
>         struct i3c_device *i3cdev = dev_to_i3cdev(dev);
>         struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
> @@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
>                 driver->remove(i3cdev);
>  
>         i3c_device_free_ibi(i3cdev);
> -
> -       return 0;
>  }
>  
>  struct bus_type i3c_bus_type = {
> diff --git a/drivers/input/gameport/gameport.c
> b/drivers/input/gameport/gameport.c
> index 61fa7e724172..db58a01b23d3 100644
> --- a/drivers/input/gameport/gameport.c
> +++ b/drivers/input/gameport/gameport.c
> @@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device
> *dev)
>         return gameport->drv ? 0 : -ENODEV;
>  }
>  
> -static int gameport_driver_remove(struct device *dev)
> +static void gameport_driver_remove(struct device *dev)
>  {
>         struct gameport *gameport = to_gameport_port(dev);
>         struct gameport_driver *drv = to_gameport_driver(dev-
> >driver);
>  
>         drv->disconnect(gameport);
> -       return 0;
>  }
>  
>  static void gameport_attach_driver(struct gameport_driver *drv)
> diff --git a/drivers/input/serio/serio.c
> b/drivers/input/serio/serio.c
> index 29f491082926..ec117be3d8d8 100644
> --- a/drivers/input/serio/serio.c
> +++ b/drivers/input/serio/serio.c
> @@ -778,12 +778,11 @@ static int serio_driver_probe(struct device
> *dev)
>         return serio_connect_driver(serio, drv);
>  }
>  
> -static int serio_driver_remove(struct device *dev)
> +static void serio_driver_remove(struct device *dev)
>  {
>         struct serio *serio = to_serio_port(dev);
>  
>         serio_disconnect_driver(serio);
> -       return 0;
>  }
>  
>  static void serio_cleanup(struct serio *serio)
> diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
> index 7de9605cac4f..b1c3198355e7 100644
> --- a/drivers/ipack/ipack.c
> +++ b/drivers/ipack/ipack.c
> @@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
>         return drv->ops->probe(dev);
>  }
>  
> -static int ipack_bus_remove(struct device *device)
> +static void ipack_bus_remove(struct device *device)
>  {
>         struct ipack_device *dev = to_ipack_dev(device);
>         struct ipack_driver *drv = to_ipack_driver(device->driver);
>  
>         if (drv->ops->remove)
>                 drv->ops->remove(dev);
> -
> -       return 0;
>  }
>  
>  static int ipack_uevent(struct device *dev, struct kobj_uevent_env
> *env)
> diff --git a/drivers/macintosh/macio_asic.c
> b/drivers/macintosh/macio_asic.c
> index 49af60bdac92..c1fdf2896021 100644
> --- a/drivers/macintosh/macio_asic.c
> +++ b/drivers/macintosh/macio_asic.c
> @@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
>         return error;
>  }
>  
> -static int macio_device_remove(struct device *dev)
> +static void macio_device_remove(struct device *dev)
>  {
>         struct macio_dev * macio_dev = to_macio_device(dev);
>         struct macio_driver * drv = to_macio_driver(dev->driver);
> @@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
>         if (dev->driver && drv->remove)
>                 drv->remove(macio_dev);
>         macio_dev_put(macio_dev);
> -
> -       return 0;
>  }
>  
>  static void macio_device_shutdown(struct device *dev)
> diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> index 38fbb3b59873..edf4ee6eff25 100644
> --- a/drivers/mcb/mcb-core.c
> +++ b/drivers/mcb/mcb-core.c
> @@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int mcb_remove(struct device *dev)
> +static void mcb_remove(struct device *dev)
>  {
>         struct mcb_driver *mdrv = to_mcb_driver(dev->driver);
>         struct mcb_device *mdev = to_mcb_device(dev);
> @@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
>         module_put(carrier_mod);
>  
>         put_device(&mdev->dev);
> -
> -       return 0;
>  }
>  
>  static void mcb_shutdown(struct device *dev)
> diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c
> b/drivers/media/pci/bt8xx/bttv-gpio.c
> index b730225ca887..a2b18e2bed1b 100644
> --- a/drivers/media/pci/bt8xx/bttv-gpio.c
> +++ b/drivers/media/pci/bt8xx/bttv-gpio.c
> @@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
>         return sub->probe ? sub->probe(sdev) : -ENODEV;
>  }
>  
> -static int bttv_sub_remove(struct device *dev)
> +static void bttv_sub_remove(struct device *dev)
>  {
>         struct bttv_sub_device *sdev = to_bttv_sub_dev(dev);
>         struct bttv_sub_driver *sub = to_bttv_sub_drv(dev->driver);
>  
>         if (sub->remove)
>                 sub->remove(sdev);
> -       return 0;
>  }
>  
>  struct bus_type bttv_sub_bus_type = {
> diff --git a/drivers/memstick/core/memstick.c
> b/drivers/memstick/core/memstick.c
> index bb1065990aeb..660df7d269fa 100644
> --- a/drivers/memstick/core/memstick.c
> +++ b/drivers/memstick/core/memstick.c
> @@ -91,7 +91,7 @@ static int memstick_device_probe(struct device
> *dev)
>         return rc;
>  }
>  
> -static int memstick_device_remove(struct device *dev)
> +static void memstick_device_remove(struct device *dev)
>  {
>         struct memstick_dev *card = container_of(dev, struct
> memstick_dev,
>                                                   dev);
> @@ -105,7 +105,6 @@ static int memstick_device_remove(struct device
> *dev)
>         }
>  
>         put_device(dev);
> -       return 0;
>  }
>  
>  #ifdef CONFIG_PM
> diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
> index eff9423e90f5..2fa592c37c6f 100644
> --- a/drivers/mfd/mcp-core.c
> +++ b/drivers/mfd/mcp-core.c
> @@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
>         return drv->probe(mcp);
>  }
>  
> -static int mcp_bus_remove(struct device *dev)
> +static void mcp_bus_remove(struct device *dev)
>  {
>         struct mcp *mcp = to_mcp(dev);
>         struct mcp_driver *drv = to_mcp_driver(dev->driver);
>  
>         drv->remove(mcp);
> -       return 0;
>  }
>  
>  static struct bus_type mcp_bus_type = {
> diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
> index 935acc6bbf3c..3bf2bb4fd152 100644
> --- a/drivers/misc/mei/bus.c
> +++ b/drivers/misc/mei/bus.c
> @@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device
> *dev)
>   *
>   * Return:  0 on success; < 0 otherwise
>   */
> -static int mei_cl_device_remove(struct device *dev)
> +static void mei_cl_device_remove(struct device *dev)
>  {
>         struct mei_cl_device *cldev = to_mei_cl_device(dev);
>         struct mei_cl_driver *cldrv = to_mei_cl_driver(dev->driver);
> @@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device
> *dev)
>  
>         mei_cl_bus_module_put(cldev);
>         module_put(THIS_MODULE);
> -
> -       return 0;
>  }
>  
>  static ssize_t name_show(struct device *dev, struct device_attribute
> *a,
> diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
> index 667e574a7df2..52656fc87e99 100644
> --- a/drivers/misc/tifm_core.c
> +++ b/drivers/misc/tifm_core.c
> @@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
>         return;
>  }
>  
> -static int tifm_device_remove(struct device *dev)
> +static void tifm_device_remove(struct device *dev)
>  {
>         struct tifm_dev *sock = container_of(dev, struct tifm_dev,
> dev);
>         struct tifm_driver *drv = container_of(dev->driver, struct
> tifm_driver,
> @@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
>         }
>  
>         put_device(dev);
> -       return 0;
>  }
>  
>  #ifdef CONFIG_PM
> diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
> index 4383c262b3f5..f6b7a9c5bbff 100644
> --- a/drivers/mmc/core/bus.c
> +++ b/drivers/mmc/core/bus.c
> @@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
>         return drv->probe(card);
>  }
>  
> -static int mmc_bus_remove(struct device *dev)
> +static void mmc_bus_remove(struct device *dev)
>  {
>         struct mmc_driver *drv = to_mmc_driver(dev->driver);
>         struct mmc_card *card = mmc_dev_to_card(dev);
>  
>         drv->remove(card);
> -
> -       return 0;
>  }
>  
>  static void mmc_bus_shutdown(struct device *dev)
> diff --git a/drivers/mmc/core/sdio_bus.c
> b/drivers/mmc/core/sdio_bus.c
> index 3d709029e07c..fda03b35c14a 100644
> --- a/drivers/mmc/core/sdio_bus.c
> +++ b/drivers/mmc/core/sdio_bus.c
> @@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int sdio_bus_remove(struct device *dev)
> +static void sdio_bus_remove(struct device *dev)
>  {
>         struct sdio_driver *drv = to_sdio_driver(dev->driver);
>         struct sdio_func *func = dev_to_sdio_func(dev);
> @@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
>                 pm_runtime_put_sync(dev);
>  
>         dev_pm_domain_detach(dev, false);
> -
> -       return 0;
>  }
>  
>  static const struct dev_pm_ops sdio_bus_pm_ops = {
> diff --git a/drivers/net/netdevsim/bus.c
> b/drivers/net/netdevsim/bus.c
> index ccec29970d5b..14b154929533 100644
> --- a/drivers/net/netdevsim/bus.c
> +++ b/drivers/net/netdevsim/bus.c
> @@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
>         return nsim_dev_probe(nsim_bus_dev);
>  }
>  
> -static int nsim_bus_remove(struct device *dev)
> +static void nsim_bus_remove(struct device *dev)
>  {
>         struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
>  
>         nsim_dev_remove(nsim_bus_dev);
> -       return 0;
>  }
>  
>  static int nsim_num_vf(struct device *dev)
> diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
> index f8f75a504a58..27dd93deff6e 100644
> --- a/drivers/ntb/core.c
> +++ b/drivers/ntb/core.c
> @@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
>         return rc;
>  }
>  
> -static int ntb_remove(struct device *dev)
> +static void ntb_remove(struct device *dev)
>  {
>         struct ntb_dev *ntb;
>         struct ntb_client *client;
> @@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
>                 client->ops.remove(client, ntb);
>                 put_device(dev);
>         }
> -
> -       return 0;
>  }
>  
>  static void ntb_dev_release(struct device *dev)
> diff --git a/drivers/ntb/ntb_transport.c
> b/drivers/ntb/ntb_transport.c
> index 4a02561cfb96..a9b97ebc71ac 100644
> --- a/drivers/ntb/ntb_transport.c
> +++ b/drivers/ntb/ntb_transport.c
> @@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device
> *dev)
>         return rc;
>  }
>  
> -static int ntb_transport_bus_remove(struct device *dev)
> +static void ntb_transport_bus_remove(struct device *dev)
>  {
>         const struct ntb_transport_client *client;
>  
> @@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device
> *dev)
>         client->remove(dev);
>  
>         put_device(dev);
> -
> -       return 0;
>  }
>  
>  static struct bus_type ntb_transport_bus = {
> diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
> index e6aa87043a95..9dc7f3edd42b 100644
> --- a/drivers/nvdimm/bus.c
> +++ b/drivers/nvdimm/bus.c
> @@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
>         return rc;
>  }
>  
> -static int nvdimm_bus_remove(struct device *dev)
> +static void nvdimm_bus_remove(struct device *dev)
>  {
>         struct nd_device_driver *nd_drv = to_nd_device_driver(dev-
> >driver);
>         struct module *provider = to_bus_provider(dev);
> @@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
>         dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver-
> >name,
>                         dev_name(dev));
>         module_put(provider);
> -       return 0;
>  }
>  
>  static void nvdimm_bus_shutdown(struct device *dev)
> diff --git a/drivers/pci/endpoint/pci-epf-core.c
> b/drivers/pci/endpoint/pci-epf-core.c
> index 4b9ad96bf1b2..502eb79cd551 100644
> --- a/drivers/pci/endpoint/pci-epf-core.c
> +++ b/drivers/pci/endpoint/pci-epf-core.c
> @@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device
> *dev)
>         return driver->probe(epf);
>  }
>  
> -static int pci_epf_device_remove(struct device *dev)
> +static void pci_epf_device_remove(struct device *dev)
>  {
>         struct pci_epf *epf = to_pci_epf(dev);
>         struct pci_epf_driver *driver = to_pci_epf_driver(dev-
> >driver);
> @@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device
> *dev)
>         if (driver->remove)
>                 driver->remove(epf);
>         epf->driver = NULL;
> -
> -       return 0;
>  }
>  
>  static struct bus_type pci_epf_bus_type = {
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 3a72352aa5cf..a0615395500a 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
>         return error;
>  }
>  
> -static int pci_device_remove(struct device *dev)
> +static void pci_device_remove(struct device *dev)
>  {
>         struct pci_dev *pci_dev = to_pci_dev(dev);
>         struct pci_driver *drv = pci_dev->driver;
> @@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
>          */
>  
>         pci_dev_put(pci_dev);
> -       return 0;
>  }
>  
>  static void pci_device_shutdown(struct device *dev)
> diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
> index bd81aa64d011..5bd1b80424e7 100644
> --- a/drivers/pcmcia/ds.c
> +++ b/drivers/pcmcia/ds.c
> @@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct
> pcmcia_socket *s, struct pcmcia_device *le
>         return;
>  }
>  
> -static int pcmcia_device_remove(struct device *dev)
> +static void pcmcia_device_remove(struct device *dev)
>  {
>         struct pcmcia_device *p_dev;
>         struct pcmcia_driver *p_drv;
> @@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device
> *dev)
>         /* references from pcmcia_device_probe */
>         pcmcia_put_dev(p_dev);
>         module_put(p_drv->owner);
> -
> -       return 0;
>  }
>  
>  
> diff --git a/drivers/platform/surface/aggregator/bus.c
> b/drivers/platform/surface/aggregator/bus.c
> index 0169677c243e..0a40dd9c94ed 100644
> --- a/drivers/platform/surface/aggregator/bus.c
> +++ b/drivers/platform/surface/aggregator/bus.c
> @@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
>                 ->probe(to_ssam_device(dev));
>  }
>  
> -static int ssam_bus_remove(struct device *dev)
> +static void ssam_bus_remove(struct device *dev)
>  {
>         struct ssam_device_driver *sdrv = to_ssam_device_driver(dev-
> >driver);
>  
>         if (sdrv->remove)
>                 sdrv->remove(to_ssam_device(dev));
> -
> -       return 0;
>  }
>  
>  struct bus_type ssam_bus_type = {
> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> index 62e0d56a3332..a76313006bdc 100644
> --- a/drivers/platform/x86/wmi.c
> +++ b/drivers/platform/x86/wmi.c
> @@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int wmi_dev_remove(struct device *dev)
> +static void wmi_dev_remove(struct device *dev)
>  {
>         struct wmi_block *wblock = dev_to_wblock(dev);
>         struct wmi_driver *wdriver =
> @@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
>  
>         if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
>                 dev_warn(dev, "failed to disable device\n");
> -
> -       return 0;
>  }
>  
>  static struct class wmi_bus_class = {
> diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
> index c29d590c5e4f..cc6757dfa3f1 100644
> --- a/drivers/pnp/driver.c
> +++ b/drivers/pnp/driver.c
> @@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
>         return error;
>  }
>  
> -static int pnp_device_remove(struct device *dev)
> +static void pnp_device_remove(struct device *dev)
>  {
>         struct pnp_dev *pnp_dev = to_pnp_dev(dev);
>         struct pnp_driver *drv = pnp_dev->driver;
> @@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
>                 pnp_disable_dev(pnp_dev);
>  
>         pnp_device_detach(pnp_dev);
> -       return 0;
>  }
>  
>  static void pnp_device_shutdown(struct device *dev)
> diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-
> driver.c
> index 72874153972e..a72bb0a40fcf 100644
> --- a/drivers/rapidio/rio-driver.c
> +++ b/drivers/rapidio/rio-driver.c
> @@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
>   * driver, then run the driver remove() method.  Then update
>   * the reference count.
>   */
> -static int rio_device_remove(struct device *dev)
> +static void rio_device_remove(struct device *dev)
>  {
>         struct rio_dev *rdev = to_rio_dev(dev);
>         struct rio_driver *rdrv = rdev->driver;
> @@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
>         }
>  
>         rio_dev_put(rdev);
> -
> -       return 0;
>  }
>  
>  static void rio_device_shutdown(struct device *dev)
> diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
> index c1404d3dae2c..7f6fac618ab2 100644
> --- a/drivers/rpmsg/rpmsg_core.c
> +++ b/drivers/rpmsg/rpmsg_core.c
> @@ -530,7 +530,7 @@ static int rpmsg_dev_probe(struct device *dev)
>         return err;
>  }
>  
> -static int rpmsg_dev_remove(struct device *dev)
> +static void rpmsg_dev_remove(struct device *dev)
>  {
>         struct rpmsg_device *rpdev = to_rpmsg_device(dev);
>         struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev-
> >dev.driver);
> @@ -546,8 +546,6 @@ static int rpmsg_dev_remove(struct device *dev)
>  
>         if (rpdev->ept)
>                 rpmsg_destroy_ept(rpdev->ept);
> -
> -       return err;
>  }
>  
>  static struct bus_type rpmsg_bus = {
> diff --git a/drivers/s390/cio/ccwgroup.c
> b/drivers/s390/cio/ccwgroup.c
> index a6aeab1ea0ae..382c5b5f8cd3 100644
> --- a/drivers/s390/cio/ccwgroup.c
> +++ b/drivers/s390/cio/ccwgroup.c
> @@ -439,15 +439,13 @@ module_exit(cleanup_ccwgroup);
>  
>  /************************** driver stuff
> ******************************/
>  
> -static int ccwgroup_remove(struct device *dev)
> +static void ccwgroup_remove(struct device *dev)
>  {
>         struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
>         struct ccwgroup_driver *gdrv = to_ccwgroupdrv(dev->driver);
>  
>         if (gdrv->remove)
>                 gdrv->remove(gdev);
> -
> -       return 0;
>  }
>  
>  static void ccwgroup_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
> index 092fd1ea5799..ebc321edba51 100644
> --- a/drivers/s390/cio/css.c
> +++ b/drivers/s390/cio/css.c
> @@ -1371,7 +1371,7 @@ static int css_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int css_remove(struct device *dev)
> +static void css_remove(struct device *dev)
>  {
>         struct subchannel *sch;
>  
> @@ -1379,8 +1379,6 @@ static int css_remove(struct device *dev)
>         if (sch->driver->remove)
>                 sch->driver->remove(sch);
>         sch->driver = NULL;
> -
> -       return 0;
>  }
>  
>  static void css_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
> index cd5d2d4d8e46..adf33b653d87 100644
> --- a/drivers/s390/cio/device.c
> +++ b/drivers/s390/cio/device.c
> @@ -1741,7 +1741,7 @@ ccw_device_probe (struct device *dev)
>         return 0;
>  }
>  
> -static int ccw_device_remove(struct device *dev)
> +static void ccw_device_remove(struct device *dev)
>  {
>         struct ccw_device *cdev = to_ccwdev(dev);
>         struct ccw_driver *cdrv = cdev->drv;
> @@ -1775,8 +1775,6 @@ static int ccw_device_remove(struct device
> *dev)
>         spin_unlock_irq(cdev->ccwlock);
>         io_subchannel_quiesce(sch);
>         __disable_cmf(cdev);
> -
> -       return 0;
>  }
>  
>  static void ccw_device_shutdown(struct device *dev)
> diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
> index b31711307e5a..b6b4589c70bd 100644
> --- a/drivers/s390/cio/scm.c
> +++ b/drivers/s390/cio/scm.c
> @@ -28,15 +28,13 @@ static int scmdev_probe(struct device *dev)
>         return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV;
>  }
>  
> -static int scmdev_remove(struct device *dev)
> +static void scmdev_remove(struct device *dev)
>  {
>         struct scm_device *scmdev = to_scm_dev(dev);
>         struct scm_driver *scmdrv = to_scm_drv(dev->driver);
>  
>         if (scmdrv->remove)
>                 scmdrv->remove(scmdev);
> -
> -       return 0;
>  }
>  
>  static int scmdev_uevent(struct device *dev, struct kobj_uevent_env
> *env)
> diff --git a/drivers/s390/crypto/ap_bus.c
> b/drivers/s390/crypto/ap_bus.c
> index d2560186d771..8a0d37c0e2a5 100644
> --- a/drivers/s390/crypto/ap_bus.c
> +++ b/drivers/s390/crypto/ap_bus.c
> @@ -884,7 +884,7 @@ static int ap_device_probe(struct device *dev)
>         return rc;
>  }
>  
> -static int ap_device_remove(struct device *dev)
> +static void ap_device_remove(struct device *dev)
>  {
>         struct ap_device *ap_dev = to_ap_dev(dev);
>         struct ap_driver *ap_drv = ap_dev->drv;
> @@ -909,8 +909,6 @@ static int ap_device_remove(struct device *dev)
>         ap_dev->drv = NULL;
>  
>         put_device(dev);
> -
> -       return 0;
>  }
>  
>  struct ap_queue *ap_get_qdev(ap_qid_t qid)
> diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
> index 5b3a20a140f9..58f69366bdcc 100644
> --- a/drivers/scsi/scsi_debug.c
> +++ b/drivers/scsi/scsi_debug.c
> @@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device
> *dev)
>         return error;
>  }
>  
> -static int sdebug_driver_remove(struct device *dev)
> +static void sdebug_driver_remove(struct device *dev)
>  {
>         struct sdebug_host_info *sdbg_host;
>         struct sdebug_dev_info *sdbg_devinfo, *tmp;
> @@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device
> *dev)
>         }
>  
>         scsi_host_put(sdbg_host->shost);
> -       return 0;
>  }
>  
>  static int pseudo_lld_bus_match(struct device *dev,
> diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
> index 1794ff0106bc..7c4f32d76966 100644
> --- a/drivers/siox/siox-core.c
> +++ b/drivers/siox/siox-core.c
> @@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
>         return sdriver->probe(sdevice);
>  }
>  
> -static int siox_remove(struct device *dev)
> +static void siox_remove(struct device *dev)
>  {
>         struct siox_driver *sdriver =
>                 container_of(dev->driver, struct siox_driver,
> driver);
> @@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
>  
>         if (sdriver->remove)
>                 sdriver->remove(sdevice);
> -
> -       return 0;
>  }
>  
>  static void siox_shutdown(struct device *dev)
> diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
> index 1d2bc181da05..78480e332ab8 100644
> --- a/drivers/slimbus/core.c
> +++ b/drivers/slimbus/core.c
> @@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int slim_device_remove(struct device *dev)
> +static void slim_device_remove(struct device *dev)
>  {
>         struct slim_device *sbdev = to_slim_device(dev);
>         struct slim_driver *sbdrv;
> @@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
>                 if (sbdrv->remove)
>                         sbdrv->remove(sbdev);
>         }
> -
> -       return 0;
>  }
>  
>  static int slim_device_uevent(struct device *dev, struct
> kobj_uevent_env *env)
> diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
> index 7abfc8c4fdc7..475a57b435b2 100644
> --- a/drivers/soc/qcom/apr.c
> +++ b/drivers/soc/qcom/apr.c
> @@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
>         return adrv->probe(adev);
>  }
>  
> -static int apr_device_remove(struct device *dev)
> +static void apr_device_remove(struct device *dev)
>  {
>         struct apr_device *adev = to_apr_device(dev);
>         struct apr_driver *adrv;
> @@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
>                 idr_remove(&apr->svcs_idr, adev->svc_id);
>                 spin_unlock(&apr->svcs_lock);
>         }
> -
> -       return 0;
>  }
>  
>  static int apr_uevent(struct device *dev, struct kobj_uevent_env
> *env)
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index c99181165321..ad2b558dc9cb 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int spi_remove(struct device *dev)
> +static void spi_remove(struct device *dev)
>  {
>         const struct spi_driver         *sdrv = to_spi_driver(dev-
> >driver);
>  
> @@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
>         }
>  
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>  
>  static void spi_shutdown(struct device *dev)
> diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
> index 51f5aeb65b3b..b37ead9e2fad 100644
> --- a/drivers/spmi/spmi.c
> +++ b/drivers/spmi/spmi.c
> @@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
>         return err;
>  }
>  
> -static int spmi_drv_remove(struct device *dev)
> +static void spmi_drv_remove(struct device *dev)
>  {
>         const struct spmi_driver *sdrv = to_spmi_driver(dev->driver);
>  
> @@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
>         pm_runtime_disable(dev);
>         pm_runtime_set_suspended(dev);
>         pm_runtime_put_noidle(dev);
> -       return 0;
>  }
>  
>  static void spmi_drv_shutdown(struct device *dev)
> diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
> index 3a29b5570f9f..8a93c83cb6f8 100644
> --- a/drivers/ssb/main.c
> +++ b/drivers/ssb/main.c
> @@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device
> *dev)
>                 ssb_drv->shutdown(ssb_dev);
>  }
>  
> -static int ssb_device_remove(struct device *dev)
> +static void ssb_device_remove(struct device *dev)
>  {
>         struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
>         struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
> @@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
>         if (ssb_drv && ssb_drv->remove)
>                 ssb_drv->remove(ssb_dev);
>         ssb_device_put(ssb_dev);
> -
> -       return 0;
>  }
>  
>  static int ssb_device_probe(struct device *dev)
> diff --git a/drivers/staging/fieldbus/anybuss/host.c
> b/drivers/staging/fieldbus/anybuss/host.c
> index 0f730efe9a6d..8a75f6642c78 100644
> --- a/drivers/staging/fieldbus/anybuss/host.c
> +++ b/drivers/staging/fieldbus/anybuss/host.c
> @@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device
> *dev)
>         return adrv->probe(adev);
>  }
>  
> -static int anybus_bus_remove(struct device *dev)
> +static void anybus_bus_remove(struct device *dev)
>  {
>         struct anybuss_client_driver *adrv =
>                 to_anybuss_client_driver(dev->driver);
>  
>         if (adrv->remove)
>                 adrv->remove(to_anybuss_client(dev));
> -
> -       return 0;
>  }
>  
>  static struct bus_type anybus_bus = {
> diff --git a/drivers/staging/greybus/gbphy.c
> b/drivers/staging/greybus/gbphy.c
> index 13d319860da5..5a5c17a4519b 100644
> --- a/drivers/staging/greybus/gbphy.c
> +++ b/drivers/staging/greybus/gbphy.c
> @@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int gbphy_dev_remove(struct device *dev)
> +static void gbphy_dev_remove(struct device *dev)
>  {
>         struct gbphy_driver *gbphy_drv = to_gbphy_driver(dev-
> >driver);
>         struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
> @@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
>         pm_runtime_set_suspended(dev);
>         pm_runtime_put_noidle(dev);
>         pm_runtime_dont_use_autosuspend(dev);
> -
> -       return 0;
>  }
>  
>  static struct bus_type gbphy_bus_type = {
> diff --git a/drivers/target/loopback/tcm_loop.c
> b/drivers/target/loopback/tcm_loop.c
> index 6d0b0e67e79e..cbb2118fb35e 100644
> --- a/drivers/target/loopback/tcm_loop.c
> +++ b/drivers/target/loopback/tcm_loop.c
> @@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m,
> struct Scsi_Host *host)
>  }
>  
>  static int tcm_loop_driver_probe(struct device *);
> -static int tcm_loop_driver_remove(struct device *);
> +static void tcm_loop_driver_remove(struct device *);
>  
>  static int pseudo_lld_bus_match(struct device *dev,
>                                 struct device_driver *dev_driver)
> @@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device
> *dev)
>         return 0;
>  }
>  
> -static int tcm_loop_driver_remove(struct device *dev)
> +static void tcm_loop_driver_remove(struct device *dev)
>  {
>         struct tcm_loop_hba *tl_hba;
>         struct Scsi_Host *sh;
> @@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device
> *dev)
>  
>         scsi_remove_host(sh);
>         scsi_host_put(sh);
> -       return 0;
>  }
>  
>  static void tcm_loop_release_adapter(struct device *dev)
> diff --git a/drivers/thunderbolt/domain.c
> b/drivers/thunderbolt/domain.c
> index a062befcb3b2..7018d959f775 100644
> --- a/drivers/thunderbolt/domain.c
> +++ b/drivers/thunderbolt/domain.c
> @@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
>         return driver->probe(svc, id);
>  }
>  
> -static int tb_service_remove(struct device *dev)
> +static void tb_service_remove(struct device *dev)
>  {
>         struct tb_service *svc = tb_to_service(dev);
>         struct tb_service_driver *driver;
> @@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
>         driver = container_of(dev->driver, struct tb_service_driver,
> driver);
>         if (driver->remove)
>                 driver->remove(svc);
> -
> -       return 0;
>  }
>  
>  static void tb_service_shutdown(struct device *dev)
> diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> index 9cdfcfe07e87..92498961fd92 100644
> --- a/drivers/tty/serdev/core.c
> +++ b/drivers/tty/serdev/core.c
> @@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int serdev_drv_remove(struct device *dev)
> +static void serdev_drv_remove(struct device *dev)
>  {
>         const struct serdev_device_driver *sdrv =
> to_serdev_device_driver(dev->driver);
>         if (sdrv->remove)
>                 sdrv->remove(to_serdev_device(dev));
>  
>         dev_pm_domain_detach(dev, true);
> -
> -       return 0;
>  }
>  
>  static struct bus_type serdev_bus_type = {
> diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
> index 7e13b74e60e5..4169cf40a03b 100644
> --- a/drivers/usb/common/ulpi.c
> +++ b/drivers/usb/common/ulpi.c
> @@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
>         return drv->probe(to_ulpi_dev(dev));
>  }
>  
> -static int ulpi_remove(struct device *dev)
> +static void ulpi_remove(struct device *dev)
>  {
>         struct ulpi_driver *drv = to_ulpi_driver(dev->driver);
>  
>         if (drv->remove)
>                 drv->remove(to_ulpi_dev(dev));
> -
> -       return 0;
>  }
>  
>  static struct bus_type ulpi_bus = {
> diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
> index 7133818a58b9..9e38142acd38 100644
> --- a/drivers/usb/serial/bus.c
> +++ b/drivers/usb/serial/bus.c
> @@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device
> *dev)
>         return retval;
>  }
>  
> -static int usb_serial_device_remove(struct device *dev)
> +static void usb_serial_device_remove(struct device *dev)
>  {
>         struct usb_serial_port *port = to_usb_serial_port(dev);
>         struct usb_serial_driver *driver;
> @@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device
> *dev)
>  
>         if (!autopm_err)
>                 usb_autopm_put_interface(port->serial->interface);
> -
> -       return 0;
>  }
>  
>  static ssize_t new_id_store(struct device_driver *driver,
> diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
> index 7f3c9a8e2bf0..78e0e78954f2 100644
> --- a/drivers/usb/typec/bus.c
> +++ b/drivers/usb/typec/bus.c
> @@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int typec_remove(struct device *dev)
> +static void typec_remove(struct device *dev)
>  {
>         struct typec_altmode_driver *drv = to_altmode_driver(dev-
> >driver);
>         struct typec_altmode *adev = to_typec_altmode(dev);
> @@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
>  
>         adev->desc = NULL;
>         adev->ops = NULL;
> -
> -       return 0;
>  }
>  
>  struct bus_type typec_bus = {
> diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
> index bb3f1d1f0422..3fc4525fc05c 100644
> --- a/drivers/vdpa/vdpa.c
> +++ b/drivers/vdpa/vdpa.c
> @@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
>         return ret;
>  }
>  
> -static int vdpa_dev_remove(struct device *d)
> +static void vdpa_dev_remove(struct device *d)
>  {
>         struct vdpa_device *vdev = dev_to_vdpa(d);
>         struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver);
>  
>         if (drv && drv->remove)
>                 drv->remove(vdev);
> -
> -       return 0;
>  }
>  
>  static struct bus_type vdpa_bus = {
> diff --git a/drivers/vfio/mdev/mdev_driver.c
> b/drivers/vfio/mdev/mdev_driver.c
> index c368ec824e2b..e2cb1ff56f6c 100644
> --- a/drivers/vfio/mdev/mdev_driver.c
> +++ b/drivers/vfio/mdev/mdev_driver.c
> @@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
>         return ret;
>  }
>  
> -static int mdev_remove(struct device *dev)
> +static void mdev_remove(struct device *dev)
>  {
>         struct mdev_driver *drv =
>                 container_of(dev->driver, struct mdev_driver,
> driver);
> @@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
>                 drv->remove(mdev);
>  
>         mdev_detach_iommu(mdev);
> -
> -       return 0;
>  }
>  
>  static int mdev_match(struct device *dev, struct device_driver *drv)
> diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> index 4b15c00c0a0a..2a6055c0d4d3 100644
> --- a/drivers/virtio/virtio.c
> +++ b/drivers/virtio/virtio.c
> @@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
>  
>  }
>  
> -static int virtio_dev_remove(struct device *_d)
> +static void virtio_dev_remove(struct device *_d)
>  {
>         struct virtio_device *dev = dev_to_virtio(_d);
>         struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
> @@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
>  
>         /* Acknowledge the device's existence again. */
>         virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
> -       return 0;
>  }
>  
>  static struct bus_type virtio_bus = {
> diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
> index 1b15afea28ee..8dba20186be3 100644
> --- a/drivers/vme/vme.c
> +++ b/drivers/vme/vme.c
> @@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
>         return -ENODEV;
>  }
>  
> -static int vme_bus_remove(struct device *dev)
> +static void vme_bus_remove(struct device *dev)
>  {
>         struct vme_driver *driver;
>         struct vme_dev *vdev = dev_to_vme_dev(dev);
> @@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
>         driver = dev->platform_data;
>         if (driver->remove)
>                 driver->remove(vdev);
> -
> -       return 0;
>  }
>  
>  struct bus_type vme_bus_type = {
> diff --git a/drivers/xen/xenbus/xenbus.h
> b/drivers/xen/xenbus/xenbus.h
> index 2a93b7c9c159..2754bdfadcb8 100644
> --- a/drivers/xen/xenbus/xenbus.h
> +++ b/drivers/xen/xenbus/xenbus.h
> @@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
>  
>  int xenbus_match(struct device *_dev, struct device_driver *_drv);
>  int xenbus_dev_probe(struct device *_dev);
> -int xenbus_dev_remove(struct device *_dev);
> +void xenbus_dev_remove(struct device *_dev);
>  int xenbus_register_driver_common(struct xenbus_driver *drv,
>                                   struct xen_bus_type *bus,
>                                   struct module *owner,
> diff --git a/drivers/xen/xenbus/xenbus_probe.c
> b/drivers/xen/xenbus/xenbus_probe.c
> index 97f0d234482d..f4f52d574df9 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -326,7 +326,7 @@ int xenbus_dev_probe(struct device *_dev)
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_probe);
>  
> -int xenbus_dev_remove(struct device *_dev)
> +void xenbus_dev_remove(struct device *_dev)
>  {
>         struct xenbus_device *dev = to_xenbus_device(_dev);
>         struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
> @@ -356,8 +356,6 @@ int xenbus_dev_remove(struct device *_dev)
>         if (!drv->allow_rebind ||
>             xenbus_read_driver_state(dev->nodename) ==
> XenbusStateClosing)
>                 xenbus_switch_state(dev, XenbusStateClosed);
> -
> -       return 0;
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_remove);
>  
> diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
> index 1ea5e1d1545b..062777a45a74 100644
> --- a/include/linux/device/bus.h
> +++ b/include/linux/device/bus.h
> @@ -91,7 +91,7 @@ struct bus_type {
>         int (*uevent)(struct device *dev, struct kobj_uevent_env
> *env);
>         int (*probe)(struct device *dev);
>         void (*sync_state)(struct device *dev);
> -       int (*remove)(struct device *dev);
> +       void (*remove)(struct device *dev);
>         void (*shutdown)(struct device *dev);
>  
>         int (*online)(struct device *dev);
> diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
> index 002fb5bf220b..c9579d97fbab 100644
> --- a/sound/aoa/soundbus/core.c
> +++ b/sound/aoa/soundbus/core.c
> @@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev,
> struct kobj_uevent_env *env)
>         return retval;
>  }
>  
> -static int soundbus_device_remove(struct device *dev)
> +static void soundbus_device_remove(struct device *dev)
>  {
>         struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
>         struct soundbus_driver * drv = to_soundbus_driver(dev-
> >driver);
> @@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device
> *dev)
>         if (dev->driver && drv->remove)
>                 drv->remove(soundbus_dev);
>         soundbus_dev_put(soundbus_dev);
> -
> -       return 0;
>  }
>  
>  static void soundbus_device_shutdown(struct device *dev)



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:04:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:04:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151633.280657 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yn5-0000vv-Ed; Wed, 07 Jul 2021 04:04:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151633.280657; Wed, 07 Jul 2021 04:04:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yn5-0000v6-AW; Wed, 07 Jul 2021 04:04:03 +0000
Received: by outflank-mailman (input) for mailman id 151633;
 Tue, 06 Jul 2021 18:51:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kzVV=L6=intel.com=dan.j.williams@srs-us1.protection.inumbo.net>)
 id 1m0qAN-00038E-1G
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 18:51:31 +0000
Received: from mail-pf1-x42a.google.com (unknown [2607:f8b0:4864:20::42a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42d19119-2637-41e4-aeb0-710279cb22e6;
 Tue, 06 Jul 2021 18:51:24 +0000 (UTC)
Received: by mail-pf1-x42a.google.com with SMTP id 21so20346177pfp.3
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 11:51:24 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 42d19119-2637-41e4-aeb0-710279cb22e6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=intel-com.20150623.gappssmtp.com; s=20150623;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=CUB/wg8JoGmq3NIMuzXfvTu1/LaQA3sJa9mgD0RKZNM=;
        b=NCdUcCEYBEoF+OVX9fy25TDeiKDiyu7MS8rvWeBmnwWDnPpc5+QhpNeuAg5+M01lgv
         DRH8QNEoIXVvsAW/9oBoS2NReA9bsV6Hj2cFB9jLLFtRzn+HzyElennnBW9tDomDrZF/
         XkbSLC4duPiBx+pb77e5uH0fYLMkjK217pwgB1wYqGKrM1h34OqVCa5M9I67oCpiuU+f
         pbgZ3PKaRiScHxRehdZaD+636T/YBbbzOrYq9ouzPlMVA0x6yucHaPT19ze0f0ZjxqqZ
         KMetsaE3O5ReiI2mpGtW6/n68aQ7RKzzGVSyyRz/qTwzg+JiHPzeut5+sQawTaXHwNB/
         HKBw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=CUB/wg8JoGmq3NIMuzXfvTu1/LaQA3sJa9mgD0RKZNM=;
        b=bLPftrJOO0e2e8C4V8oxayi0p77ZF4FDGa4RgYgzoVlQPxUIOu4cVFj+NP8kRuK67u
         ByV0lLw2Aydjp1eyaE0OgslTNj2gZTOhJWtENPZljdUJYxAXDR9jV9BdSk/bQ66r7hHJ
         v6lG4pgpY8dvPHoxzCTZUVwjUo5KvHZ1vcHrt+gUBa77CNAw5jdZopV85l+dCjNUNbxz
         iLnMF1/BxdHmG7Ohcz2Btk+pCljQUF7tPF4j1mUTpaPmgC3Oqm3rn5pQzN8LYrVxnRuQ
         BYVAW04qnezYE/9fdEaexDN09zbT25nvyKP7q7dKE7BW3aTHyufeyGvcpwJHubhHty4s
         JMnA==
X-Gm-Message-State: AOAM533hx1HnwH5ik4K4hIKHSFezu2n095+3k0cDqOLaAHSbEkJvxLVU
	68Yx/MXAYGHkf764J14SaA0D7sclyzJArCH2zYjS1A==
X-Google-Smtp-Source: ABdhPJyL0D13WbWlA6qnw/Xmlwa19pDI+XNQ21Npie/wgUkDgmHM1zT9YORdF5DHiOOYSSe1zuHfWr+DfQo+lHkX354=
X-Received: by 2002:a63:4c3:: with SMTP id 186mr12014592pge.240.1625597483385;
 Tue, 06 Jul 2021 11:51:23 -0700 (PDT)
MIME-Version: 1.0
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de> <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
From: Dan Williams <dan.j.williams@intel.com>
Date: Tue, 6 Jul 2021 11:51:12 -0700
Message-ID: <CAPcyv4gxjV7Xj8AN6aCkSLSi=yT6GdcAyigK6Au3mZQ1idBxJg@mail.gmail.com>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de, 
	Cornelia Huck <cohuck@redhat.com>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>, 
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, 
	Ben Widawsky <ben.widawsky@intel.com>, Dave Jiang <dave.jiang@intel.com>, 
	Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>, 
	Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi <cristian.marussi@arm.com>, 
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>, 
	Jiri Kosina <jikos@kernel.org>, Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, 
	Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, 
	Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, 
	Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, 
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>, 
	Heikki Krogerus <heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>, 
	Jason Wang <jasowang@redhat.com>, Kirti Wankhede <kwankhede@nvidia.com>, 
	Alex Williamson <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, 
	Manohar Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Juergen Gross <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>, 
	Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, 
	Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler <tyreld@linux.ibm.com>, 
	Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland <samuel@sholland.org>, 
	Qinglang Miao <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>, 
	Kai-Heng Feng <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, 
	=?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org, 
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, 
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, 
	linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev, 
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, dmaengine@vger.kernel.org, 
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org, 
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org, 
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org, 
	industrypack-devel@lists.sourceforge.net, linux-media@vger.kernel.org, 
	linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-ntb@googlegroups.com, 
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org, 
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org, 
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org, 
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, 
	xen-devel@lists.xenproject.org, Russell King <rmk+kernel@armlinux.org.uk>, 
	Johannes Thumshirn <jth@kernel.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 6, 2021 at 8:51 AM Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>

>  drivers/cxl/core.c                        | 3 +--
>  drivers/dax/bus.c                         | 4 +---
>  drivers/nvdimm/bus.c                      | 3 +--

For CXL, DAX, and NVDIMM

Acked-by: Dan Williams <dan.j.williams@intel.com>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:06:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:06:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151746.280668 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yoz-00020h-RL; Wed, 07 Jul 2021 04:06:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151746.280668; Wed, 07 Jul 2021 04:06:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0yoz-00020V-NM; Wed, 07 Jul 2021 04:06:01 +0000
Received: by outflank-mailman (input) for mailman id 151746;
 Tue, 06 Jul 2021 21:37:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZJkz=L6=gmail.com=vilhelm.gray@srs-us1.protection.inumbo.net>)
 id 1m0slO-0004YA-6G
 for xen-devel@lists.xenproject.org; Tue, 06 Jul 2021 21:37:54 +0000
Received: from mail-pj1-x102b.google.com (unknown [2607:f8b0:4864:20::102b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0266d66e-1ea5-4382-b3e3-b9592c6beb90;
 Tue, 06 Jul 2021 21:37:53 +0000 (UTC)
Received: by mail-pj1-x102b.google.com with SMTP id
 g6-20020a17090adac6b029015d1a9a6f1aso2326669pjx.1
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 14:37:51 -0700 (PDT)
Received: from shinobu ([156.146.35.76])
 by smtp.gmail.com with ESMTPSA id h14sm14343197pgv.47.2021.07.06.14.37.41
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 06 Jul 2021 14:37:49 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0266d66e-1ea5-4382-b3e3-b9592c6beb90
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:in-reply-to;
        bh=Ocbz7plpl2GsaeWZtT2xSwu/ECmgcGgX+U0mFWoVx8o=;
        b=fjV4+ka8h0vH05QQfb5mosysrP9nHimBGyZMIaa5AG6oYKlZIJ9fBu1u8zdUGxqK0V
         Um+d4Woup62vh1nDeTEMfYQu/z07c7tU/WMAtzd8zyjZ+D++/9qAcGD3Qi5HWfAEidnP
         LVIhoqq3BcdDCaWawKEqjjS8yu6I4JR+nAEzkK0jeMXN28vBiyhs3oL9vVM3I/zG4bRq
         0ch+fVpWTwIZJdpOA5MGN4Hsas/DzY0s55S8/73rafQT0BQHzaPtbSSjdX9FgBPH3Kng
         zdOUu0zymj0lCUC9mcaI5h90C5jAW9R9slEqBMssceloFyAtObCoJPafpr9GaUMLPWWg
         1jSA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:cc:subject:message-id:references
         :mime-version:content-disposition:in-reply-to;
        bh=Ocbz7plpl2GsaeWZtT2xSwu/ECmgcGgX+U0mFWoVx8o=;
        b=p4dlAqOS4Jdg8QCEBDvYKCFGVYCqUGrOTdrvTI+3Bglc8y4B5N9IxHJZAWSXVPPnHy
         GhcKM7n3IqBHYU8rWy6BLsl08huldBSUfzD+YxvJ/p2eZi0RdJiIW6UUATixaLBl/hoH
         sSy66333ui3xIsS1bi/vuotviIegoww65PtGCHun1M49+qsIctx+i0PCBAhXDjqH70id
         RK5Wv1Gm0J9Yhe3VmJ25yb8bgXMzhMoJ4tZE3cFoj61BDqqhRXx7RIREMkkGD2Dv4EDM
         7FB5dWqzZfKNYmaDCZx4IjqE395KhZ4YJuPe0yoXlO4vcWjNl64HgD6QgsbGXU4V0GTk
         EwWA==
X-Gm-Message-State: AOAM531482PajkqifxTQPZLC8ytO4Ps5GczOcNZgd0Wq1cycQZ2GbYCt
	FgIlYj6SQsjl5gOh2wvtM7s=
X-Google-Smtp-Source: ABdhPJyn2Hi8kaCYu+WokB25snaMIG+9Q6KwjeQoMDQJIrAIZd3JeXm641055Ca25Y6q1bD80UK2hA==
X-Received: by 2002:a17:90a:3009:: with SMTP id g9mr2332932pjb.82.1625607470831;
        Tue, 06 Jul 2021 14:37:50 -0700 (PDT)
Date: Wed, 7 Jul 2021 06:37:39 +0900
From: William Breathitt Gray <vilhelm.gray@gmail.com>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
	linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
	dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
	linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <YOTMp88HfFiy6+RM@shinobu>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="VOubNWsj2sFIOkFX"
Content-Disposition: inline
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>


--VOubNWsj2sFIOkFX
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 06, 2021 at 05:48:03PM +0200, Uwe Kleine-K=C3=B6nig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>=20
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>=20
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>=20
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Am=
ba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Roh=C3=A1r <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drive=
rs/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and=
 typec)
> Acked-by: Samuel Iglesias Gons=C3=A1lvez <siglesias@igalia.com> (For ipac=
k)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>
> ---

>  drivers/base/isa.c                        | 4 +---

Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>

--VOubNWsj2sFIOkFX
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEk5I4PDJ2w1cDf/bghvpINdm7VJIFAmDkzSMACgkQhvpINdm7
VJLVFhAAyxEk2xOSRC1xhJSnjLQvNeb+KeTAJr+uaSAwwExERXcbGlIryhqCZSij
fZRzkvgPIscNAegWidvmuhZlhkFJPwvPArfhB/pFIDvQ1xX0kCPH3T51Lncu35Tf
vgluc4JhAW9+1UzoKZsv8RK4uY2ETRMBBeYs7epjqK2RhCvzG8rDMD+Dy49nxrYX
eNdmcR+7EcK8RjLmb/YEfNXxcXdDW0KlU5ATAh+PKuAPKbOKpoKfKuYsOYS7VrGJ
MAk5lC5J/bqbBWM4eqm+g5NbskWMr1N5WC60R7K3isMCoaEpnKNhSD3kvYIFe2Tf
mWyIE2c7D+UWhzbp+Kq4+DHzBN4ajLBy0oMd28HrGOQmD+/chjjc1zTOK9uNBvKz
xBRbxQl7OrAnKhUqcrgVpVL30EvTNajZIOZdwtGXhQCWW+MX747JE+H291VLg3gz
a0p6IJ8TS+gOgGGvmNjVg6yHYuKv6XDbDfI7tc0dRJUOoVqfbkIHSvAQQzn0LIFn
k/Ln4D8LDFj8X3fHbfz200+nzo9gwA5ZXhWXzvTKXhSEyBoc3+i+Ihn3bgYf6rI8
j8LozqWaWpNxaLMBrLuy06ldAuzhnQ7wPw1JuGXDAY1vdMYVVRp1XcbjBSqybXMA
weoaxx4Lwh05XikzxZpXDQBx5N+5V3sYRuqGrYs7H1ZUm0rT0I0=
=yTaM
-----END PGP SIGNATURE-----

--VOubNWsj2sFIOkFX--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 04:51:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 04:51:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151910.280691 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0zWZ-0006vE-E5; Wed, 07 Jul 2021 04:51:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151910.280691; Wed, 07 Jul 2021 04:51:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0zWZ-0006v7-AO; Wed, 07 Jul 2021 04:51:03 +0000
Received: by outflank-mailman (input) for mailman id 151910;
 Wed, 07 Jul 2021 04:51:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zWX-0006ux-GN; Wed, 07 Jul 2021 04:51:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zWX-00032r-Ac; Wed, 07 Jul 2021 04:51:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zWX-0004Gz-24; Wed, 07 Jul 2021 04:51:01 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zWX-0006Aw-1e; Wed, 07 Jul 2021 04:51:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=uWusyoqg9IFxNYj2Y+h2lTs4PI+UvcQUerEo7E7sq2c=; b=X/Ruwhs7ki3pNTxwmDbKDI4cSx
	nObd5MuHTSZGmASbEQfiGrUuuDRuDZuHv4XtisDirMal3b6BptHwq/7hkH6MH28Gsw9fdSEGE8+uy
	rA99jjgRUsu6R0WiET7CVy/6nsjTNt+TpQ84CKy8v7AVuotELJkNdxO/mGc/1Tee5IT0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163381-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163381: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 04:51:01 +0000

flight 163381 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163381/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days   12 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 05:01:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 05:01:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151920.280716 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0zgH-0000PN-IL; Wed, 07 Jul 2021 05:01:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151920.280716; Wed, 07 Jul 2021 05:01:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m0zgH-0000PG-FN; Wed, 07 Jul 2021 05:01:05 +0000
Received: by outflank-mailman (input) for mailman id 151920;
 Wed, 07 Jul 2021 05:01:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zgG-0000P6-87; Wed, 07 Jul 2021 05:01:04 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zgG-0003YS-3y; Wed, 07 Jul 2021 05:01:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zgF-0004Xq-KQ; Wed, 07 Jul 2021 05:01:03 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m0zgF-0004sy-Jx; Wed, 07 Jul 2021 05:01:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=HCdOySQMGZjIZr776wJ2CEQOnvsK0C1YbjNHA+p4G5I=; b=pgRXc9b6km60d39SjYnGnGvgkK
	4Df5Y1gb9q4XtIaGNyM9/t2RfQiZHvwqHz06PRr/hUCEbgQylQjE6szixktLDgMpH7SiVD53Mfro6
	Lm42qF8XKdhhxSwAC7fwk70VcBU5hVbnj9/RDHhe55L9aY2cItCa0I5fxn9L+85inzEg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163362-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163362: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
X-Osstest-Versions-That:
    xen=44e8904ebfbc57ba0950c40b9d3a28507b553e4e
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 05:01:03 +0000

flight 163362 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163362/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a
baseline version:
 xen                  44e8904ebfbc57ba0950c40b9d3a28507b553e4e

Last test of basis   163323  2021-07-06 04:40:42 Z    1 days
Testing same since   163362  2021-07-06 20:06:44 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Julien Grall <jgrall@amazon.com>
  Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
  Sergiy Kibrik <Sergiy_Kibrik@epam.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   44e8904ebf..4473f36010  4473f3601098a2c3cf5ab89d5a29504772985e3a -> master


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 05:25:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 05:25:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151933.280731 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m103Z-0002sP-Nw; Wed, 07 Jul 2021 05:25:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151933.280731; Wed, 07 Jul 2021 05:25:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m103Z-0002sI-K1; Wed, 07 Jul 2021 05:25:09 +0000
Received: by outflank-mailman (input) for mailman id 151933;
 Wed, 07 Jul 2021 05:25:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=u0Kw=L7=gmail.com=christopher.w.clark@srs-us1.protection.inumbo.net>)
 id 1m103Y-0002sC-Fs
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 05:25:08 +0000
Received: from mail-oi1-x231.google.com (unknown [2607:f8b0:4864:20::231])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 80c72ff3-a54c-48b3-abcd-b8fd5c7984d2;
 Wed, 07 Jul 2021 05:25:07 +0000 (UTC)
Received: by mail-oi1-x231.google.com with SMTP id l26so2058260oic.7
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 22:25:07 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 80c72ff3-a54c-48b3-abcd-b8fd5c7984d2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=jFvNViEw7O59X6kfVcjsY8Z1lYfTyB1kEJaMt/PoUq0=;
        b=fVjtzdk6qv7KE+y/vD6/qF/AM0Tmkgg3gr8Ug0YnLeRbDPC0o7otoIYA2FFlr8yukc
         rjfXdVQJ08neKISmZtVWME4zeK4BrUaj/iDgbMjw0ggeBlMsFV7Od0TKokO0Lqna7rRL
         +ZIw2uGiK8iG5qwIuD+xkcbDPDnvwoIcJzYWxbZZhCWhJb2vPP9iUTed94y451nWYjyO
         MVpOvUaH2a9VbLNWafvlCeOMPICjmAcemFPH7IbGUBeBGB+Jj9776pcUEdFqGplH+LC4
         g5TS+trdBL642Lt9cRIoXzeO9IlbEtkduA4Ka5Fgsvlh8iRBBPBLol1P+DqLQnV9QptR
         N/0g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=jFvNViEw7O59X6kfVcjsY8Z1lYfTyB1kEJaMt/PoUq0=;
        b=qKjlwFylWIGcLq00xjNXngIuwT7gXOEEdTw9VkmQcikL712oBuxp1NBDRrqMhHU+fU
         5iDP5SYZ4p8H+kScx0izU9E9qsc53SRrQZBCUN2bPkgrbXfn/iCK802EYaxbZwWXKTk7
         qVrPENzPrk1mrlzdKwB/zBLB47gUIgZ4i9dyCwxAPW2u69MnzjEky1i7WNIkODJRo/9l
         3ZkBcJGiR1sb9wVmY2BztUk3Wdy/VoniNLYtuhimiH4v9xXaRYq1VJs0XSzMscG+Kz2o
         CilQS6ZqV/5FwR+WcvEQPcFt1soqsp7BqWkIywGQ1TQjdBDPdX/QbY5iSu64BorMQdDv
         8n7Q==
X-Gm-Message-State: AOAM532gR1ONmwlnir373JQbPyHFgBEBb3CLml3CODx3jyQ0f+/KOxNa
	CAzKLF2oGaFWpB7kde45jB/ub8Jf2MDhZ3G9UDRCl1Y7wdI=
X-Google-Smtp-Source: ABdhPJy6i2TyYIE5UBA9olz0x36FXPMQ3xk4zO10DsR9YTxcR6jtvLjesdI5FWX4UMHsQBrtAtNqfnEZ5TDoLqvGDBA=
X-Received: by 2002:aca:4952:: with SMTP id w79mr3428748oia.33.1625635507139;
 Tue, 06 Jul 2021 22:25:07 -0700 (PDT)
MIME-Version: 1.0
References: <20210514034101.3683-1-christopher.w.clark@gmail.com> <16e9e430-e684-46f9-ca48-3fdd80b9e8df@apertussolutions.com>
In-Reply-To: <16e9e430-e684-46f9-ca48-3fdd80b9e8df@apertussolutions.com>
From: Christopher Clark <christopher.w.clark@gmail.com>
Date: Tue, 6 Jul 2021 22:24:53 -0700
Message-ID: <CACMJ4GajOuoD6nitaS-7_8b8vi_aJkhFP0qPe+75RuV3cgJQDQ@mail.gmail.com>
Subject: Ping: [PATCH v4 0/2] Introducing Hyperlaunch capability design
 (formerly: DomB mode of dom0less)
To: xen-devel <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, 
	Ian Jackson <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall <jgrall@amazon.com>, 
	Julien Grall <Julien.grall.oss@gmail.com>, 
	Stefano Stabellini <stefano.stabellini@xilinx.com>, Wei Liu <wl@xen.org>
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>, Rich Persaud <persaur@gmail.com>, 
	Bertrand Marquis <Bertrand.Marquis@arm.com>, =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
	luca.fancellu@arm.com, paul@xen.org, Adam Schwalm <adam.schwalm@starlab.io>, 
	Scott Davis <scott.davis@starlab.io>, Christopher Clark <christopher.clark@starlab.io>, 
	openxt <openxt@googlegroups.com>, Daniel DeGraaf <dgdegra@tycho.nsa.gov>, quinnr@ainfosec.com
Content-Type: text/plain; charset="UTF-8"

On Fri, May 14, 2021 at 7:19 AM Daniel P. Smith
<dpsmith@apertussolutions.com> wrote:
>
> On 5/13/21 11:40 PM, Christopher Clark wrote:
> > We are submitting for inclusion in the Xen documentation:
> >
> > - the Hyperlaunch design document, and
> > - the Hyperlaunch device tree design document
> >
> > to describe a new method for launching the Xen hypervisor.

We would like to have these design documents merged, please.
We have responded to all of the feedback provided in previous rounds
and no further comments have been received on these since they were
posted in May.

thanks,

Christopher

> >
> > The Hyperlaunch feature builds upon prior dom0less work,
> > to bring a flexible and security-minded means to launch a
> > variety of VM configurations as part of the startup of Xen.
> >
> > Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
> > Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
> >
> >
> > Daniel P. Smith (2):
> >   docs/designs/launch: hyperlaunch design document
> >   docs/designs/launch: hyperlaunch device tree
> >
> >  .../designs/launch/hyperlaunch-devicetree.rst |  343 ++++++
> >  docs/designs/launch/hyperlaunch.rst           | 1004 +++++++++++++++++
> >  2 files changed, 1347 insertions(+)
> >  create mode 100644 docs/designs/launch/hyperlaunch-devicetree.rst
> >  create mode 100644 docs/designs/launch/hyperlaunch.rst
> >
>
> All,
>
> Please find a rendered PDF copy of each document attached for ease of
> reading.
>
> V/r,
> Daniel P. Smith
> Apertus Solutions, LLC


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 05:27:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 05:27:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151938.280742 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1060-0003VW-4B; Wed, 07 Jul 2021 05:27:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151938.280742; Wed, 07 Jul 2021 05:27:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1060-0003VP-0d; Wed, 07 Jul 2021 05:27:40 +0000
Received: by outflank-mailman (input) for mailman id 151938;
 Wed, 07 Jul 2021 05:27:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=u0Kw=L7=gmail.com=christopher.w.clark@srs-us1.protection.inumbo.net>)
 id 1m105z-0003VJ-6N
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 05:27:39 +0000
Received: from mail-ot1-x32e.google.com (unknown [2607:f8b0:4864:20::32e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 98b8dc18-be9f-4e17-997e-8ff25bc3699c;
 Wed, 07 Jul 2021 05:27:35 +0000 (UTC)
Received: by mail-ot1-x32e.google.com with SMTP id
 l17-20020a9d6a910000b029048a51f0bc3cso1110225otq.13
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 22:27:35 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 98b8dc18-be9f-4e17-997e-8ff25bc3699c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=j7XHXVF9YD1avJZZrZLGLUlPl2pc8rskIvlEiSY7aj4=;
        b=dmKDfM+w+kKBkOO48bxIH03f/EzYE4wLhNSBONeBsVWuPG3XsFLEX226sew6hYP8yt
         ToO7xVIUYh4w75pZwKJJmwk8Q5hr58d23VFLgvQtB1ZTyEScalmdMLwC3bR89bmhuqAT
         er/SoCo+WlbB7I5goBPzo2SW9wOYjzANuriUH1panFRMUu/vZ2BvlupFemiCTzK2VLb/
         4suRmFoMz9HN3Dx3AmHzlp3f3uWuXHLgGMuuy1Re3RwJq3YM9ozcy2dqicSPteCXIkF6
         T7Ucb6EYoS0e843xvQI824XRrxirna7+GgMFjzrSyFL0cMiINERz5UlUbv7P48/2FyUZ
         I1FA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=j7XHXVF9YD1avJZZrZLGLUlPl2pc8rskIvlEiSY7aj4=;
        b=KHhnx35u8XcUuJSsb8WzM51pXjSi1M8AJ3Gokw1uMScx9pUGGbkcZaaEm/Ckk3iKBS
         xpgeHh8KzWMEXadmidVw8SU7zJTX7DPDbt4BwnVoigv2pFYxIXO7kmOrHgk+lGD3avTO
         1QJqEWWLUNch/5LY4s2e1oBCxXcg/WD1Bl5MAJMZAVDNQ0qF7wJot3XcgHRbUiVsDf2C
         5g/oJNpuwKkzU7gLuK0f/jXLz5xwlUGDAowd/WsG9BHIKZlRWTZw2WdQzEHfSw1l3Rna
         IxVgJ9wWGovZ6aIoJA6nFcy8wrvwR5o8vl2ZV/TAzJbDmp47WrJJM2GxMl3ylk3FcS5t
         nTOA==
X-Gm-Message-State: AOAM532ICK4xBWO6+pEFK6WMZhFdFgXf6goFM1iZZwxzfInp4GnlxsgR
	1SaSalLo4rdLRGlFrx66eMUXBDj3EoApH6XKxC5ZxDxXeEA=
X-Google-Smtp-Source: ABdhPJwp76bFKuM25Z4eF8IXo6VfP6JSVs4qaoma/ddOLEXrytTnOLhk1NoQgf0VVb7uOlCcLlN+YdkwIAsqEC7BCc8=
X-Received: by 2002:a9d:6ad2:: with SMTP id m18mr2986169otq.78.1625635654164;
 Tue, 06 Jul 2021 22:27:34 -0700 (PDT)
MIME-Version: 1.0
References: <20210514034101.3683-1-christopher.w.clark@gmail.com> <20210514034101.3683-2-christopher.w.clark@gmail.com>
In-Reply-To: <20210514034101.3683-2-christopher.w.clark@gmail.com>
From: Christopher Clark <christopher.w.clark@gmail.com>
Date: Tue, 6 Jul 2021 22:27:18 -0700
Message-ID: <CACMJ4GZU6MqYRXrFnTRjbSMF+XPL2-JcsOqqED-Kpz30rYdEYw@mail.gmail.com>
Subject: Ping: [PATCH v4 1/2] docs/designs/launch: Hyperlaunch design document
To: xen-devel <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, 
	Ian Jackson <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall <jgrall@amazon.com>, 
	Julien Grall <Julien.grall.oss@gmail.com>, 
	Stefano Stabellini <stefano.stabellini@xilinx.com>, Wei Liu <wl@xen.org>
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>, Rich Persaud <persaur@gmail.com>, 
	Bertrand Marquis <Bertrand.Marquis@arm.com>, =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
	luca.fancellu@arm.com, paul@xen.org, Adam Schwalm <adam.schwalm@starlab.io>, 
	Scott Davis <scott.davis@starlab.io>, Christopher Clark <christopher.clark@starlab.io>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, May 13, 2021 at 8:41 PM Christopher Clark
<christopher.w.clark@gmail.com> wrote:
>
> From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
>
> Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
>
> Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
> Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
> Reviewed-by: Rich Persaud <rp@stacktrust.org>
>
> ---
> Changes since v3:
> * Rename the Landscape table
> * Changed Crash Domain to Recovery Domain
>   * amended text to indicate that this will be new rather than existing X=
en
>     functionality
>   * including update to the configuration, permission, function table
> * Add definitions for =E2=80=9Crecovery domain=E2=80=9D and =E2=80=9Ccras=
h environment=E2=80=9D, describing
>   the different functionalities
>   * some design issues deferred
> * Added section to explain the motivations for the separation between VM
>   creation (by the hypervisor) and VM configuration (by the boot domain)
> * Adjusted the description of the current process for creating a domain
> * Added recommendation for UEFI boot to use GRUB.efi to load via multiboo=
t2
>   method.
> * Added Document Structure section
> * Added section on Communication of Domain Configuration
>
>  docs/designs/launch/hyperlaunch.rst | 1004 +++++++++++++++++++++++++++
>  1 file changed, 1004 insertions(+)
>  create mode 100644 docs/designs/launch/hyperlaunch.rst
>
> diff --git a/docs/designs/launch/hyperlaunch.rst b/docs/designs/launch/hy=
perlaunch.rst
> new file mode 100644
> index 0000000000..30fce8c9c3
> --- /dev/null
> +++ b/docs/designs/launch/hyperlaunch.rst
> @@ -0,0 +1,1004 @@
> +###########################
> +Hyperlaunch Design Document
> +###########################
> +
> +.. sectnum:: :depth: 4
> +
> +This post is a Request for Comment on the included v4 of a design docume=
nt that
> +describes Hyperlaunch: a new method of launching the Xen hypervisor, rel=
ating
> +to dom0less and work from the Hyperlaunch project. We invite discussion =
of this
> +on this list, at the monthly Xen Community Calls, and at dedicated meeti=
ngs on
> +this topic in the Xen Working Group which will be announced in advance o=
n the
> +Xen Development mailing list.
> +
> +
> +.. contents:: :depth: 3
> +
> +
> +Introduction
> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> +
> +This document describes the design and motivation for the funded develop=
ment of
> +a new, flexible system for launching the Xen hypervisor and virtual mach=
ines
> +named: "Hyperlaunch".
> +
> +The design enables seamless transition for existing systems that require=
 a
> +dom0, and provides a new general capability to build and launch alternat=
ive
> +configurations of virtual machines, including support for static partiti=
oning
> +and accelerated start of VMs during host boot, while adhering to the pri=
nciples
> +of least privilege. It incorporates the existing dom0less functionality,
> +extended to fold in the new developments from the Hyperlaunch project, w=
ith
> +support for both x86 and Arm platform architectures, building upon and
> +replacing the earlier 'late hardware domain' feature for disaggregation =
of
> +dom0.
> +
> +Hyperlaunch is designed to be flexible and reusable across multiple use =
cases,
> +and our aim is to ensure that it is capable, widely exercised, comprehen=
sively
> +tested, and well understood by the Xen community.
> +
> +Document Structure
> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> +
> +This is the primary design document for Hyperlaunch, to provide an overv=
iew of
> +the feature. Separate additional documents will cover specific aspects o=
f
> +Hyperlaunch in further detail, including:
> +
> +  - The Device Tree specification for Hyperlaunch metadata
> +  - New Domain Roles for Xen and the Xen Security Modules (XSM) policy
> +  - Passthrough of PCI devices with Hyperlaunch
> +
> +Approach
> +=3D=3D=3D=3D=3D=3D=3D=3D
> +
> +Born out of improving support for Dynamic Root of Trust for Measurement =
(DRTM),
> +the Hyperlaunch project is focused on restructuring the system launch of=
 Xen.
> +The Hyperlaunch design provides a security architecture that builds on t=
he
> +principles of Least Privilege and Strong Isolation, achieving this throu=
gh the
> +disaggregation of system functions. It enables this with the introductio=
n of a
> +boot domain that works in conjunction with the hypervisor to provide the
> +ability to launch multiple domains as part of host boot while maintainin=
g a
> +least privilege implementation.
> +
> +While the Hyperlaunch project inception was and continues to be driven b=
y a
> +focus on security through disaggregation, there are multiple use cases w=
ith a
> +non-security focus that require or benefit from the ability to launch mu=
ltiple
> +domains at host boot. This was proven by the need that drove the impleme=
ntation
> +of the dom0less capability in the Arm branch of Xen.
> +
> +Hyperlaunch is designed to be flexible and reusable across multiple use =
cases,
> +and our aim is to ensure that it is capable, widely exercised, comprehen=
sively
> +tested, and provides a robust foundation for current and emerging system=
 launch
> +requirements of the Xen community.
> +
> +
> +Objectives
> +----------
> +
> +* In general strive to maintain compatibility with existing Xen behavior
> +* A default build of the hypervisor should be capable of booting both le=
gacy-compatible and new styles of launch:
> +
> +        * classic Xen boot: starting a single, privileged Dom0
> +        * classic Xen boot with late hardware domain: starting a Dom0 th=
at transitions hardware access/control to another domain
> +        * a dom0less boot: starting multiple domains without privilege a=
ssignment controls
> +        * Hyperlaunch: starting one or more VMs, with flexible configura=
tion
> +
> +* Preferred that it be managed via KCONFIG options to govern inclusion o=
f support for each style
> +* The selection between classic boot and Hyperlaunch boot should be auto=
matic
> +
> +        * Preferred that it not require a kernel command line parameter =
for selection
> +
> +* It should not require modification to boot loaders
> +* It should provide a user friendly interface for its configuration and =
management
> +* It must provide a method for building systems that fallback to console=
 access in the event of misconfiguration
> +* It should be able to boot an x86 Xen environment without the need for =
a Dom0 domain
> +
> +
> +Requirements and Design
> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> +
> +Hyperlaunch is defined as the ability of a hypervisor to construct and s=
tart
> +one or more virtual machines at system launch in a specific way. A hyper=
visor
> +can support one or both modes of configuration, Hyperlaunch Static and
> +Hyperlaunch Dynamic. The Hyperlaunch Static mode functions as a static
> +partitioning hypervisor ensuring only the virtual machines started at sy=
stem
> +launch are running on the system. The Hyperlaunch Dynamic mode functions=
 as a
> +dynamic hypervisor allowing for additional virtual machines to be starte=
d after
> +the initial virtual machines have started. The Xen hypervisor is capable=
 of
> +both modes of configuration from the same binary and when paired with it=
s XSM
> +flask, provides strong controls that enable fine grained system partitio=
ning.
> +
> +Hypervisor Launch Landscape
> +---------
> +
> +This comparison table presents the distinctive capabilities of Hyperlaun=
ch with
> +reference to existing launch configurations currently available in Xen a=
nd
> +other hypervisors.
> +
> +::
> +
> + +---------------+-----------+------------+-----------+-------------+---=
------------------+
> + | **Xen Dom0**  | **Linux** | **Late**   | **Jail**  | **Xen**     | **=
Xen Hyperlaunch** |
> + | **(Classic)** | **KVM**   | **HW Dom** | **house** | **dom0less**+---=
------+-----------+
> + |               |           |            |           |             | St=
atic  | Dynamic   |
> + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D+=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+
> + | Hypervisor able to launch multiple VMs during host boot              =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |     Y     |       Y     |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Hypervisor supports Static Partitioning                              =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |     Y     |       Y     |   =
 Y    |           |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Able to launch VMs dynamically after host boot                       =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |       Y       |     Y     |      Y*    |     Y     |       Y*    |   =
      |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Supports strong isolation between all VMs started at host boot       =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |     Y     |       Y     |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Enables flexible sequencing of VM start during host boot             =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |             |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Prevent all-powerful static root domain being launched at boot       =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |       Y*    |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Operates without a Highly-privileged management VM (eg. Dom0)        =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |      Y*    |           |       Y*    |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Operates without a privileged toolstack VM (Control Domain)          =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |       Y*    |   =
 Y    |           |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Extensible VM configuration applied before launch of VMs at host boot=
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |             |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Flexible granular assignment of permissions and functions to VMs     =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |             |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | Supports extensible VM measurement architecture for DRTM and attestat=
ion               |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |             |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + | PCI passthrough configured at host boot                              =
                  |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> + |               |           |            |           |             |   =
 Y    |     Y     |
> + +---------------+-----------+------------+-----------+-------------+---=
------+-----------+
> +
> +
> +Domain Construction
> +-------------------
> +
> +An important aspect of the Hyperlaunch architecture is that the hypervis=
or
> +performs domain construction for all the Initial Domains,  ie. it builds=
 each
> +domain that is described in the Launch Control Module. More specifically=
, the
> +hypervisor will perform the function of *domain creation* for each Initi=
al
> +Domain: it allocates the unique domain identifier assigned to the virtua=
l
> +machine and records essential metadata about it in the internal data str=
ucture
> +that enables scheduling the domain to run. It will also perform *basic d=
omain
> +construction*: build the initial page tables with data from the kernel a=
nd
> +initial ramdisk supplied, and as appropriate for the domain type, popula=
te the
> +p2m table and ACPI tables.
> +
> +Subsequent to this, the boot domain can apply additional configuration t=
o the
> +initial domains from the data in the LCM, in *extended domain constructi=
on*.
> +
> +The benefits of this structure include:
> +
> +* Security: Contrains the permissions required by the boot domain: it do=
es not
> +  require the capability to create domains in this structure. This align=
s with
> +  the principles of least privilege.
> +* Flexibility: Enables policy-based dynamic assignment of hardware by th=
e boot
> +  domain, customizable according to use-case and able to adapt to hardwa=
re
> +  discovery
> +* Compatibility: Supports reuse of familiar tools with use-case customiz=
ed boot
> +  domains.
> +* Commonality: Reuses the same logic for initial basic domain building a=
cross
> +  diverse Xen deployments.
> +       * It aligns the x86 initial domain construction with the existing=
 Arm
> +         dom0less feature for construction of multiple domains at boot.
> +       * The boot domain implementation may vary significantly with diff=
erent
> +         deployment use cases, whereas the hypervisor implementation is
> +         common.
> +* Correctness: Increases confidence in the implementation of domain
> +  construction, since it is performed by the hypervisor in well maintain=
ed and
> +  centrally tested logic.
> +* Performance: Enables launch for configurations where a fast start of
> +  multiple domains at boot is a requirement.
> +* Capability: Supports launch of advanced configurations where a sequenc=
ed
> +  start of multiple domains is required, or multiple domains are involve=
d in
> +  startup of the running system configuration
> +       * eg. for PCI passthrough on systems where the toolstack runs in =
a
> +         separate domain to the hardware management.
> +
> +Please, see the =E2=80=98Hyperlaunch Device Tree=E2=80=99 design documen=
t, which describes the
> +configuration module that is provided to the hypervisor by the bootloade=
r.
> +
> +The hypervisor determines how these domains are started as host boot com=
pletes:
> +in some systems the Boot Domain acts upon the extended boot configuratio=
n
> +supplied as part of launch, performing configuration tasks for preparing=
 the
> +other domains for the hypervisor to commence running them.
> +
> +Common Boot Configurations
> +--------------------------
> +
> +When looking across those that have expressed interest or discussed a ne=
ed for
> +launching multiple domains at host boot, the Hyperlaunch approach is to =
provide
> +the means to start nearly any combination of domains. Below is an enumer=
ated
> +selection of common boot configurations for reference in the following s=
ection.
> +
> +Dynamic Launch with a Highly-Privileged Domain 0
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Hyperlaunch Classic: Dom0
> +        This configuration mimics the classic Xen start and domain const=
ruction
> +        where a single domain is constructed with all privileges and fun=
ctions for
> +        managing hardware and running virtualization toolstack software.
> +
> +Hyperlaunch Classic: Extended Launch Dom0
> +        This configuration is where a Dom0 is started via a Boot Domain =
that runs
> +        first. This is for cases where some preprocessing in a less priv=
ileged domain
> +        is required before starting the all-privileged Domain 0.
> +
> +Hyperlaunch Classic: Basic Cloud
> +        This configuration constructs a Dom0 that is started in parallel=
 with some
> +        number of workload domains.
> +
> +Hyperlaunch Classic: Cloud
> +        This configuration builds a Dom0 and some number of workload dom=
ains, launched
> +        via a Boot Domain that runs first.
> +
> +
> +Static Launch Configurations: without a Domain 0 or a Control Domain
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Hyperlaunch Static: Basic
> +        Simple static partitioning where all domains that can be run on =
this system are
> +        built and started during host boot and where no domain is starte=
d with the
> +        Control Domain permissions, thus making it not possible to creat=
e/start any
> +        further new domains.
> +
> +Hyperlaunch Static: Standard
> +        This is a variation of the =E2=80=9CHyperlaunch Static: Basic=E2=
=80=9D static partitioning
> +        configuration with the introduction of a Boot Domain. This confi=
guration allows
> +        for use of a Boot Domain to be able to apply extended configurat=
ion
> +        to the Initial Domains before they are started and
> +        sequence the order in which they start.
> +
> +Hyperlaunch Static: Disaggregated
> +        This is a variation of the =E2=80=9CHyperlaunch Static: Standard=
=E2=80=9D configuration with
> +        the introduction of a Boot Domain and an illustration that some =
functions can
> +        be disaggregated to dedicated domains.
> +
> +Dynamic Launch of Disaggregated System Configurations
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Hyperlaunch Dynamic: Hardware Domain
> +        This configuration mimics the existing Xen feature late hardware=
 domain with
> +        the one difference being that the hardware domain is constructed=
 by the
> +        hypervisor at startup instead of later by Dom0.
> +
> +Hyperlaunch Dynamic: Flexible Disaggregation
> +        This configuration is similar to the =E2=80=9CHyperlaunch Classi=
c: Dom0=E2=80=9D configuration
> +        except that it includes starting a separate hardware domain duri=
ng Xen startup.
> +        It is also similar to =E2=80=9CHyperlaunch Dynamic: Hardware Dom=
ain=E2=80=9D configuration, but
> +        it launches via a Boot Domain that runs first.
> +
> +Hyperlaunch Dynamic: Full Disaggregation
> +        In this configuration it is demonstrated how it is possible to s=
tart a fully
> +        disaggregated system: the virtualization toolstack runs in a Con=
trol Domain,
> +        separate from the domains responsible for managing hardware, Xen=
Store, the Xen
> +        Console and Crash functions, each launched via a Boot Domain.
> +
> +
> +Example Use Cases and Configurations
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +The following example use cases can be matched to configurations listed =
in the
> +previous section.
> +
> +Use case: Modern cloud hypervisor
> +"""""""""""""""""""""""""""""""""
> +
> +**Option:** Hyperlaunch Classic: Cloud
> +
> +This configuration will support strong isolation for virtual TPM domains=
 and
> +measured launch in support of attestation to infrastructure management, =
while
> +allowing the use of existing Dom0 virtualization toolstack software.
> +
> +Use case: Edge device with security or safety requirements
> +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> +
> +**Option:** Hyperlaunch Static: Boot
> +
> +This configuration runs without requiring a highly-privileged Dom0, and =
enables
> +extended VM configuration to be applied to the Initial VMs prior to laun=
ching
> +them, optionally in a sequenced start.
> +
> +Use case: Client hypervisor
> +"""""""""""""""""""""""""""
> +
> +**Option:** Hyperlaunch Dynamic: Flexible Disaggregation
> +
> +**Option:** Hyperlaunch Dynamic: Full Disaggregation
> +
> +These configurations enable dynamic client workloads, strong isolation f=
or the
> +domain running the virtualization toolstack software and each domain man=
aging
> +hardware, with PCI passthrough performed during host boot and support fo=
r
> +measured launch.
> +
> +Hyperlaunch Disaggregated Launch
> +--------------------------------
> +
> +
> +Existing in Xen today are two primary permissions, *control domain* and
> +*hardware domain*, and two functions, *console domain* and *xenstore dom=
ain*,
> +that can be assigned to a domain. Traditionally all of these permissions=
 and
> +functions are all assigned to Dom0 at start and can then be delegated to=
 other
> +domains created by the toolstack in Dom0. With Hyperlaunch it becomes po=
ssible
> +to assign these permissions and functions to any domain for which there =
is a
> +definition provided at startup.
> +
> +Additionally, two further functions are introduced: the *recovery domain=
*,
> +intended to assist with recovery from failures encountered starting VMs =
during
> +host boot, and the *boot domain*, for performing aspects of domain const=
ruction
> +during startup.
> +
> +Supporting the booting of each of the above common boot configurations i=
s
> +accomplished by considering the set of initial domains and the assignmen=
t of
> +Xen=E2=80=99s permissions and functions, including the ones introduced b=
y Hyperlaunch,
> +to these domains. A discussion of these will be covered later but for no=
w they
> +are laid out in a table with a mapping to the common boot configurations=
. This
> +table is not intended to be an exhaustive list of configurations and doe=
s not
> +account for flask policy specified functions that are use case specific.
> +
> +In the table each number represents a separate domain being
> +constructed by the Hyperlaunch construction path as Xen starts, and the
> +designator, ``{n}`` signifies that there may be =E2=80=9Cn=E2=80=9D addi=
tional domains that may
> +be constructed that do not have any special role for a general Xen syste=
m.
> +
> +::
> +
> + +-------------------+------------------+-------------------------------=
----+
> + | Configuration     |    Permission    |            Function           =
    |
> + |                   +------+------+----+------+--------+--------+------=
----+
> + |                   | None | Ctrl | HW | Boot |Recovery| Console| Xenst=
ore |
> + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=
=3D=3D+=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=
=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+
> + | Classic: Dom0     |      |  0   | 0  |      |   0    |   0    |    0 =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Classic: Extended |      |  1   | 1  |  0   |   1    |   1    |    1 =
    |
> + | Launch Dom0       |      |      |    |      |        |        |      =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Classic:          | {n}  |  0   | 0  |      |   0    |   0    |    0 =
    |
> + | Basic Cloud       |      |      |    |      |        |        |      =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Classic: Cloud    | {n}  |  1   | 1  |  0   |   1    |   1    |    1 =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Static: Basic     | {n}  |      | 0  |      |   0    |   0    |    0 =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Static: Standard  | {n}  |      | 1  |  0   |   1    |   1    |    1 =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Static:           | {n}  |      | 2  |  0   |   3    |   4    |    1 =
    |
> + | Disaggregated     |      |      |    |      |        |        |      =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Dynamic:          |      |  0   | 1  |      |   0    |   0    |    0 =
    |
> + | Hardware Domain   |      |      |    |      |        |        |      =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Dynamic: Flexible | {n}  |  1   | 2  |  0   |   1    |   1    |    1 =
    |
> + | Disaggregation    |      |      |    |      |        |        |      =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> + | Dynamic: Full     | {n}  |  2   | 3  |  0   |   4    |   5    |    1 =
    |
> + | Disaggregation    |      |      |    |      |        |        |      =
    |
> + +-------------------+------+------+----+------+--------+--------+------=
----+
> +
> +Overview of Hyperlaunch Flow
> +----------------------------
> +
> +Before delving into Hyperlaunch, a good basis to start with is an unders=
tanding
> +of the current process to create a domain. A way to view this process st=
arts
> +with the core configuration which is the information the hypervisor requ=
ires to
> +make the call to `domain_create`, followed by basic construction to prov=
ide the
> +memory image to run, including the kernel and ramdisk. A subsequent step
> +applies the extended configuration used by the toolstack to provide a do=
main
> +with any additional configuration information. Until the extended config=
uration
> +is completed, a domain has access to no resources except its allocated v=
cpus
> +and memory. The exception to this is Dom0, which the hypervisor explicit=
ly
> +grants control and access to all system resources, except for those that=
 only
> +the hypervisor should have control over.  This exception for Dom0 is dri=
ven by
> +the system structure with a monolithic Dom0 domain predating introductio=
n of
> +support for disaggregation into Xen, and the corresponding default assig=
nment
> +of multiple roles within the Xen system to Dom0.
> +
> +While not a different domain creation path, there does exist the Hardwar=
e
> +Domain (hwdom), sometimes also referred to as late-Dom0. It is an early =
effort
> +to disaggregate Dom0=E2=80=99s roles into a separate control domain and =
hardware
> +domain. This capability is activated by the passing of a domain id to th=
e
> +`hardware_dom` kernel command line parameter, and the Xen hypervisor wil=
l then
> +flag that domain id as the hardware domain. Later when the toolstack con=
structs
> +a domain with that domain id as the requested domid, the hypervisor will
> +transfer all device I/O from Dom0 to this domain. In addition it will al=
so
> +transfer the =E2=80=9Chost shutdown on domain shutdown=E2=80=9D flag fro=
m Dom0 to the hardware
> +domain. It is worth mentioning that this approach for disaggregation was
> +created in this manner due to the inability of Xen to launch more than o=
ne
> +domain at startup.
> +
> +Hyperlaunch Xen startup
> +^^^^^^^^^^^^^^^^^^^^^^^
> +
> +The Hyperlaunch approach=E2=80=99s primary focus is on how to assign the=
 roles
> +traditionally granted to Dom0 to one or more domains at host boot. While=
 the
> +statement is simple to make, the implications are not trivial by any mea=
ns.
> +This also explains why the Hyperlaunch approach is orthogonal to the exi=
sting
> +dom0less capability. The dom0less capability focuses on enabling the lau=
nch of
> +multiple domains in parallel with Dom0 at host boot. A corollary for dom=
0less
> +is that for systems that don=E2=80=99t require Dom0 after all guest doma=
ins have
> +started, they are able to do the host boot without a Dom0. Though it sho=
uld be
> +noted that it may be possible to start  Dom0 at a later point. Whereas w=
ith
> +Hyperlaunch, its approach of separating Dom0=E2=80=99s roles requires th=
e ability to
> +launch multiple domains at host boot. The direct consequences from this
> +approach are profound and provide a myriad of possible configurations fo=
r which
> +a sample of common boot configurations were already presented.
> +
> +To enable the Hyperlaunch approach a new alternative path for host boot =
within
> +the hypervisor must be introduced. This alternative path effectively bra=
nches
> +just before the current point of Dom0 construction and begins an alterna=
te
> +means of system construction. The determination if this alternate path s=
hould
> +be taken is through the inspection of the boot chain. If the bootloader =
has
> +loaded a specific configuration, as described later, it will enable Xen =
to
> +detect that a Hyperlaunch configuration has been provided. Once a Hyperl=
aunch
> +configuration is detected, this alternate path can be thought of as occu=
rring
> +in phases: domain creation, domain preparation, and launch finalization.
> +
> +Domain Creation
> +"""""""""""""""
> +
> +The domain creation phase begins with Xen parsing the bootloader provide=
d
> +material, to understand the content of the modules provided. It will the=
n load
> +any microcode or XSM policy it discovers. For each domain configuration =
Xen
> +finds, it parses the configuration to construct the necessary domain def=
inition
> +to instantiate an instance of the domain and leave it in a paused state.=
 When
> +all domain configurations have been instantiated as domains, if one of t=
hem is
> +flagged as the Boot Domain, that domain will be unpaused starting the do=
main
> +preparation phase. If there is no Boot Domain defined, then the domain
> +preparation phase will be skipped and Xen will trigger the launch finali=
zation
> +phase.
> +
> +Domain Preparation Phase
> +""""""""""""""""""""""""
> +
> +The domain preparation phase is an optional check point for the executio=
n of a
> +workload specific domain, the Boot Domain. While the Boot Domain is the =
first
> +domain to run and has some degree of control over the system, it is extr=
emely
> +restricted in both system resource access and hypervisor operations. Its
> +purpose is to:
> +
> +* Access the configuration provided by the bootloader
> +* Finalize the configuration of the domains
> +* Conduct any setup and launch related operations
> +* Do an ordered unpause of domains that require an ordered start
> +
> +When the Boot Domain has completed, it will notify the hypervisor that i=
t is
> +done triggering the launch finalization phase.
> +
> +
> +Launch Finalization
> +"""""""""""""""""""
> +
> +The hypervisor handles the launch finalization phase which is equivalent=
 to the
> +clean up phase. As such the steps taken by the hypervisor, not necessari=
ly in
> +implementation order, are as follows,
> +
> +* Free the boot module chain
> +* If a Boot Domain was used, reclaim Boot Domain resources
> +* Unpause any domains still in a paused state
> +* Boot Domain uses a reserved function thus can never be respawned
> +
> +While the focus thus far has been on how the Hyperlaunch capability will=
 work,
> +it is worth mentioning what it does not do or limit from occurring. It d=
oes not
> +stop or inhibit the assigning of the control domain role which gives the=
 domain
> +the ability to create, start, stop, restart, and destroy domains or the
> +hardware domain role which gives access to all I/O devices except those =
that
> +the hypervisor has reserved for itself. In particular it is still possib=
le to
> +construct a domain with all the privileged roles, i.e. a Dom0, with or w=
ithout
> +the domain id being zero. In fact what limitations are imposed now becom=
e fully
> +configurable without the risk of circumvention by an all privileged doma=
in.
> +
> +Structuring of Hyperlaunch
> +--------------------------
> +
> +The structure of Hyperlaunch is built around the existing capabilities o=
f the
> +host boot protocol. This approach was driven by the objective not to req=
uire
> +modifications to the boot loader. The only requirement is that the boot =
loader
> +supports the Multiboot2 (MB2) protocol. For UEFI boot, our recommendatio=
n is to
> +use GRUB.efi to load Xen and the initial domain materials via the multib=
oot2
> +method. On Arm platforms, Hyperlaunch is compatible with the existing in=
terface
> +for boot into the hypervisor.
> +
> +
> +x86 Multiboot2
> +^^^^^^^^^^^^^^
> +
> +The MB2 protocol has no concept of a manifest to tell the initial kernel=
 what
> +is contained in the chain, leaving it to the kernel to impose a loading
> +convention, use magic number identification, or both. When considering t=
he
> +passing of multiple kernels, ramdisks, and domain configuration along wi=
th any
> +existing modules already passed, there is no sane convention that could =
be
> +imposed and magic number identification is nearly impossible when consid=
ering
> +the objective not to impose unnecessary complication to the hypervisor.
> +
> +As it was alluded to previously, a manifest describing the contents in t=
he MB2
> +chain and how they relate within a Xen context is needed. To address thi=
s need
> +the Launch Control Module (LCM) was designed to provide such a manifest.=
 The
> +LCM was designed to have a specific set of properties,
> +
> +* minimize the complexity of the parsing logic required by the hyperviso=
r
> +* allow for expanding and optional configuration fragments without break=
ing
> +  backwards compatibility
> +
> +To enable automatic detection of a Hyperlaunch configuration, the LCM mu=
st be
> +the first MB2 module in the MB2 module chain. The LCM is implemented usi=
ng the
> +Device Tree as defined in the Hyperlaunch Device Tree design document. W=
ith the
> +LCM implemented in Device Tree, it has a magic number that enables the
> +hypervisor to detect its presence when used in a Multiboot2 module chain=
. The
> +hypervisor can confirm that it is a proper LCM Device Tree by checking f=
or a
> +compliant Hyperlaunch Device Tree. The Hyperlaunch Device Tree nodes are
> +designed to allow,
> +
> +* for the hypervisor to parse only those entries it understands,
> +* for packing custom information for a custom boot domain,
> +* the ability to use a new LCM with an older hypervisor,
> +* and the ability to use an older LCM with a new hypervisor.
> +
> +Arm Device Tree
> +^^^^^^^^^^^^^^^
> +
> +As discussed the LCM is in Device Tree format and was designed to co-exi=
st in
> +the Device Tree ecosystem, and in particular in parallel with dom0less D=
evice
> +Tree entries. On Arm, Xen is already designed to boot from a host Device=
 Tree
> +description (dtb) file and the LCM entries can be embedded into this hos=
t dtb
> +file. This makes detecting the LCM entries and supporting Hyperlaunch on=
 Arm
> +relatively straight forward. Relative to the described x86 approach, at =
the
> +point where Xen inspects the first MB2 module, on Arm Xen will check if =
the top
> +level LCM node exists in the host dtb file. If the LCM node does exist, =
then at
> +that point it will enter into the same code path as the x86 entry would =
go.
> +
> +Xen hypervisor
> +^^^^^^^^^^^^^^
> +
> +It was previously discussed at a higher level of the new host boot flow =
that
> +will be introduced. Within this new flow is the configuration parsing an=
d
> +domain creation phase which will be expanded upon here. The hypervisor w=
ill
> +inspect the LCM for a config node and if found will iterate through all =
modules
> +nodes. The module nodes are used to identify if any modules contain micr=
ocode
> +or an XSM policy. As it processes domain nodes, it will construct the do=
main
> +using the node properties and the modules nodes. Once it has completed
> +iterating through all the entries in the LCM, if a constructed domain ha=
s the
> +Boot Domain attribute, it will then be unpaused. Otherwise the hyperviso=
r will
> +start the launch finalization phase.
> +
> +Boot Domain
> +^^^^^^^^^^^
> +
> +Traditionally domain creation was controlled by the user within the Dom0
> +environment whereby custom toolstacks could be implemented to impose
> +requirements on the process. The Boot Domain is a means to enable the us=
er to
> +continue to maintain a degree of that control over domain creation but w=
ithin a
> +limited privilege environment. The Boot Domain will have access to the L=
CM and
> +the boot chain along with access to a subset of the hypercall operations=
. When
> +the Boot Domain is finished it will notify the hypervisor through a hype=
rcall
> +op.
> +
> +Recovery Domain
> +^^^^^^^^^^^^^^^
> +
> +With the existing Dom0 host boot path, when a failure occurs there are s=
everal
> +assumptions that can safely be made to get the user to a console for
> +troubleshooting. With the Hyperlaunch host boot path those assumptions c=
an no
> +longer be made, thus a means is needed to get the user to a console in t=
he case
> +of a recoverable failure. The recovery domain is configured by a domain
> +configuration entry in the LCM, in the same manner as the other initial
> +domains, and it will not be unpaused at launch finalization unless a fai=
lure is
> +encountered starting the initial domains.
> +
> +Xen has existing support for a Crash Environment where memory can be res=
erved
> +at host boot and a kernel loaded into it, to be jumped into at any point=
 while
> +the system is running when a crash is detected. The Recovery Domain
> +functionality is a separate, complementary capability. The Crash Environ=
ment
> +replaces the previously active hypervisor and running guests, and enable=
s a
> +process for mounting disks to write out log information prior to rebooti=
ng the
> +system. In contrast, the Recovery Domain is able to use the functionalit=
y of
> +the Xen hypervisor, that is still present and running, to perform recove=
ry
> +handling for errors encountered with starting the initial domains.
> +
> +Deferred Design
> +"""""""""""""""
> +
> +To be determined:
> +
> +* Define what is detected as a crash
> +* Explain how crash detection is performed and which components are invo=
lved
> +* Explain how the recovery domain is unpaused
> +* Explain how and when the resources assigned to the recovery domain are=
 reclaimed
> +* Define what the recovery domain is able to do
> +* Determine what permissions the recovery domain requires to perform its=
 job
> +
> +
> +Control Domain
> +^^^^^^^^^^^^^^
> +
> +The concept of the Control Domain already exists within Xen as a boolean=
,
> +`is_privileged`, that governs access to many of the privileged interface=
s of
> +the hypervisor that support a domain running a virtualization system too=
lstack.
> +Hyperlaunch will allow the `is_privileged` flag to be set on any domain =
that is
> +created at launch, rather than only a Dom0. It may potentially be set on
> +multiple domains.
> +
> +Hardware Domain
> +^^^^^^^^^^^^^^^
> +
> +The Hardware Domain is also an existing concept for Xen that is enabled =
through
> +the `is_hardware_domain` check. With Hyperlaunch the previous process of=
 I/O
> +accesses being assigned to Dom0 for later transfer to the hardware domai=
n would
> +no longer be required. Instead during the configuration phase the Xen
> +hypervisor would directly assign the I/O accesses to the domain with the
> +hardware domain permission bit enabled.
> +
> +Console Domain
> +^^^^^^^^^^^^^^
> +
> +Traditionally the Xen console is assigned to the control domain and then
> +reassignable by the toolstack to another domain. With Hyperlaunch it bec=
omes
> +possible to construct a boot configuration where there is no control dom=
ain or
> +have a use case where the Xen console needs to be isolated. As such it b=
ecomes
> +necessary to be able to designate which of the initial domains should be
> +assigned the Xen console. Therefore Hyperlaunch introduces the ability t=
o
> +specify an initial domain which the console is assigned along with a con=
vention
> +of ordered assignment for when there is no explicit assignment.
> +
> +Communication of Domain Configurations
> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> +
> +There are several standard methods for an Operating System to access mac=
hine
> +configuration and environment information: ACPI is common on x86 systems=
,
> +whereas Device Tree is more typical on Arm platforms. There are currentl=
y
> +implementations of both in Xen.
> +
> +* For dom0less, guest Device Trees are dynamically constructed by the
> +  hypervisor to convey domain configuration data
> +
> +* For PVH dom0 on x86, ACPI tables are built by the hypervisor before th=
e
> +  domain is started
> +
> +Note that both of these mechanisms convey static data that is fixed prio=
r to
> +the point of domain construction. Hyperlaunch will retain both the exist=
ing
> +ACPI and Device Tree methods.
> +
> +Communication of data between a Boot Domain and a Control Domain is of n=
ote
> +since they may not be running concurrently: the method used will depend =
on
> +their specific implementations, but one option available is to use Xen=
=E2=80=99s hypfs
> +for transfer of basic data to support system bootstrap.
> +
> +------------------------------------------------------------------------=
-------
> +
> +Appendix
> +=3D=3D=3D=3D=3D=3D=3D=3D
> +
> +Appendix 1: Flow Sequence of Steps of a Hyperlaunch Boot
> +--------------------------------------------------------
> +
> +Provided here is an ordered flow of a Hyperlaunch with a highlight logic
> +decision points. Not all branch points are recorded, specifically for th=
e
> +variety of error conditions that may occur. ::
> +
> +  1. Hypervisor Startup:
> +  2a. (x86) Inspect first module provided by the bootloader
> +      a. Is the module an LCM
> +          i. YES: proceed with the Hyperlaunch host boot path
> +          ii. NO: proceed with a Dom0 host boot path
> +  2b. (Arm) Inspect host dtb for `/chosen/hypervisor` node
> +      a. Is the LCM present
> +          i. YES: proceed with the Hyperlaunch host boot path
> +          ii. NO: proceed with a Dom0/dom0less host boot path
> +  3. Iterate through the LCM entries looking for the module description
> +     entry
> +      a. Check if any of the modules are microcode or policy and if so,
> +         load
> +  4. Iterate through the LCM entries processing all domain description
> +     entries
> +      a. Use the details from the Basic Configuration to call
> +         `domain_create`
> +      b. Record if a domain is flagged as the Boot Domain
> +      c. Record if a domain is flagged as the Recovery Domain
> +  5. Was a Boot Domain created
> +      a. YES:
> +          i. Attach console to Boot Domain
> +          ii. Unpause Boot Domain
> +          iii. Goto Boot Domain (step 6)
> +      b. NO: Goto Launch Finalization (step 10)
> +  6. Boot Domain:
> +  7. Boot Domain comes online and may do any of the following actions
> +      a. Process the LCM
> +      b. Validate the MB2 chain
> +      c. Make additional configuration settings for staged domains
> +      d. Unpause any precursor domains
> +      e. Set any runtime configurations
> +  8. Boot Domain does any necessary cleanup
> +  9. Boot Domain make hypercall op call to signal it is finished
> +      i. Hypervisor reclaims all Boot Domain resources
> +      ii. Hypervisor records that the Boot Domain ran
> +      ii. Goto Launch Finalization (step 9)
> +  10. Launch Finalization
> +  11. If a configured domain was flagged to have the console, the
> +      hypervisor assigns it
> +  12. The hypervisor clears the LCM and bootloader loaded module,
> +      reclaiming the memory
> +  13. The hypervisor iterates through domains unpausing any domain not
> +      flagged as the recovery domain
> +
> +
> +Appendix 2: Considerations in Naming the Hyperlaunch Feature
> +------------------------------------------------------------
> +
> +* The term =E2=80=9CLaunch=E2=80=9D is preferred over =E2=80=9CBoot=E2=
=80=9D
> +
> +        * Multiple individual component boots can occur in the new syste=
m start
> +          process; Launch is preferable for describing the whole process
> +        * Fortunately there is consensus in the current group of stakeho=
lders
> +          that the term =E2=80=9CLaunch=E2=80=9D is good and appropriate
> +
> +* The names we define must support becoming meaningful and simple to use
> +  outside the Xen community
> +
> +        * They must be able to be resolved quickly via search engine to =
a clear
> +          explanation (eg. Xen marketing material, documentation or wiki=
)
> +        * We prefer that the terms be helpful for marketing communicatio=
ns
> +        * Consequence: avoid the term =E2=80=9Cdomain=E2=80=9D which is =
Xen-specific and
> +          requires a definition to be provided each time when used elsew=
here
> +
> +
> +* There is a need to communicate that Xen is  capable of being used as a=
 Static
> +  Partitioning hypervisor
> +
> +        * The community members using and maintaining dom0less are the c=
urrent
> +          primary stakeholders for this
> +
> +* There is a need to communicate that the new launch functionality provi=
des new
> +  capabilities not available elsewhere, and is more than just supporting=
 Static
> +  Partitioning
> +
> +        * No other hypervisor known to the authors of this document is c=
apable
> +          of providing what Hyperlaunch will be able to do. The launch s=
equence is
> +          designed to:
> +
> +                * Remove dependency on a single, highly-privileged initi=
al domain
> +                * Allow the initial domains started to be independent an=
d fully
> +                  isolated from each other
> +                * Support configurations where no further VMs can be lau=
nched
> +                  once the initial domains have started
> +                * Use a standard, extensible format for conveying VM
> +                  configuration data
> +                * Ensure that domain building of all initial domains is
> +                  performed by the hypervisor from materials supplied by=
 the
> +                  bootloader
> +                * Enable flexible configuration to be applied to all ini=
tial
> +                  domains by an optional Boot Domain, that runs with lim=
ited
> +                  privilege, before any other domain starts and obtains =
the VM
> +                  configuration data from the bootloader materials via t=
he
> +                  hypervisor
> +                * Enable measurements of all of the boot materials prior=
 to
> +                  their use, in a sequence with minimized privilege
> +                * Support use-case-specific customized Boot Domains
> +                * Complement the hypervisor=E2=80=99s existing ability t=
o enforce
> +                  policy-based Mandatory Access Control
> +
> +
> +* =E2=80=9CStatic=E2=80=9D and =E2=80=9CDynamic=E2=80=9D have different =
and important meanings in different
> +  communities
> +
> +        * Static and Dynamic Partitioning describe the ability to create=
 new
> +          virtual machines, or not, after the initial host boot process
> +          completes
> +        * Static and Dynamic Root of Trust describe the nature of the tr=
ust
> +          chain for a measured launch. In this case Static is referring =
to the
> +          fact that the trust chain is fixed and non-repeatable until th=
e next
> +          host reboot or shutdown. Whereas Dynamic in this case refers t=
o the
> +          ability to conduct the measured launch at any time and potenti=
ally
> +          multiple times before the next host reboot or shutdown.
> +
> +                * We will be using Hyperlaunch with both Static and Dyna=
mic
> +                  Roots of Trust, to launch both Static and Dynamically
> +                  Partitioned Systems, and being clear about exactly whi=
ch
> +                  combination is being started will be very important (e=
g. for
> +                  certification processes)
> +
> +        * Consequence: uses of =E2=80=9CStatic=E2=80=9D and =E2=80=9CDyn=
amic=E2=80=9D need to be qualified if
> +          they are incorporated into the naming of this functionality
> +
> +                * This can be done by adding the preceding, stronger bra=
nded
> +                  term: =E2=80=9CHyperlaunch=E2=80=9D, before =E2=80=9CS=
tatic=E2=80=9D or =E2=80=9CDynamic=E2=80=9D
> +                * ie. =E2=80=9CHyperlaunch Static=E2=80=9D describes lau=
nch of a
> +                  Statically Partitioned system
> +                * and =E2=80=9CHyperlaunch Dynamic=E2=80=9D describes la=
unch of a
> +                  Dynamically Partitioned system.
> +                * In practice, this means that =E2=80=9CHyperlaunch Stat=
ic=E2=80=9D describes
> +                  starting a Static Partitioned system where no new doma=
ins can
> +                  be started later (ie. no VM has the Control Domain
> +                  permission), whereas =E2=80=9CHyperlaunch Dynamic=E2=
=80=9D will launch some
> +                  VM with the Control Domain permission, able to create =
VMs
> +                  dynamically at a later point.
> +
> +**Naming Proposal:**
> +
> +* New Term: =E2=80=9CHyperlaunch=E2=80=9D : the ability of a hypervisor =
to construct and start
> +  one or more virtual machines at system launch, in the following manner=
:
> +
> +        * The hypervisor must build all of the domains that it starts at=
 host
> +          boot
> +
> +                * Similar to the way the dom0 domain is built by the hyp=
ervisor
> +                  today, and how dom0less works: it will run a loop to b=
uild
> +                  them all, driven from the configuration provided
> +                * This is a requirement for ensuring that there is Stron=
g
> +                  Isolation between each of the initial VMs
> +
> +        * A single file contains the VM configs (=E2=80=9CLaunch Control=
 Module=E2=80=9D: LCM,
> +          in Device Tree binary format) is provided to the hypervisor
> +
> +                * The hypervisor parses it and builds domains
> +                * If the LCM config says that a Boot Domain should run f=
irst,
> +                  then the LCM file itself is made available to the Boot=
 Domain
> +                  for it to parse and act on, to invoke operations via t=
he
> +                  hypervisor to apply additional configuration to the ot=
her VMs
> +                  (ie. executing a privilege-constrained toolstack)
> +
> +* New Term: =E2=80=9CHyperlaunch Static=E2=80=9D: starts a Static Partit=
ioned system, where
> +  only the virtual machines started at system launch are running on the =
system
> +
> +* New Term: =E2=80=9CHyperlaunch Dynamic=E2=80=9D: starts a system where=
 virtual machines may
> +  be dynamically added after the initial virtual machines have started.
> +
> +
> +In the default configuration, Xen will be capable of both styles of Hype=
rlaunch
> +from the same hypervisor binary, when paired with its XSM flask, provide=
s
> +strong controls that enable fine grained system partitioning.
> +
> +
> +* Retiring Term: =E2=80=9CDomB=E2=80=9D: will no longer be used to descr=
ibe the optional first
> +  domain that is started. It is replaced with the more general term: =E2=
=80=9CBoot
> +  Domain=E2=80=9D.
> +
> +* Retiring Term: =E2=80=9CDom0less=E2=80=9D: it is to be replaced with =
=E2=80=9CHyperlaunch Static=E2=80=9D
> +
> +
> +Appendix 3: Terminology
> +-----------------------
> +
> +To help ensure clarity in reading this document, the following is the
> +definition of terminology used within this document.
> +
> +
> +Basic Configuration
> +    the minimal information the hypervisor requires to instantiate a dom=
ain instance
> +
> +
> +Boot Domain
> +    a domain with limited privileges launched by the hypervisor during a
> +    Multiple Domain Boot that runs as the first domain started. In the H=
yperlaunch
> +    architecture, it is responsible for assisting with higher level oper=
ations of
> +    the domain setup process.
> +
> +
> +Classic Launch
> +    a backwards-compatible host boot that ends with the launch of a sing=
le domain (Dom0)
> +
> +
> +Console Domain
> +    a domain that has the Xen console assigned to it
> +
> +
> +Control Domain
> +    a privileged domain that has been granted Control Domain permissions=
 which
> +    are those that are required by the Xen toolstack for managing other =
domains.
> +    These permissions are a subset of those that are granted to Dom0.
> +
> +
> +Device Tree
> +    a standardized data structure, with defined file formats, for descri=
bing
> +    initial system configuration
> +
> +
> +Disaggregation
> +    the separation of system roles and responsibilities across multiple
> +    connected components that work together to provide functionality
> +
> +
> +Dom0
> +    the highly-privileged, first and only domain started at host boot on=
 a
> +    conventional Xen system
> +
> +
> +Dom0less
> +    an existing feature of Xen on Arm that provides Multiple Domain Boot
> +
> +
> +Domain
> +    a running instance of a virtual machine; (as the term is commonly us=
ed in
> +    the Xen Community)
> +
> +DomB
> +     the former name for Hyperlaunch
> +
> +
> +Extended Configuration
> +    any configuration options for a domain beyond its Basic Configuratio=
n
> +
> +
> +Hardware Domain
> +    a privileged domain that has been granted permissions to access and =
manage
> +    host hardware. These permissions are a subset of those that are gran=
ted to
> +    Dom0.
> +
> +
> +Host Boot
> +    the system startup of Xen using the configuration provided by the bo=
otloader
> +
> +
> +Hyperlaunch
> +    a flexible host boot that ends with the launch of one or more domain=
s
> +
> +
> +Initial Domain
> +    a domain that is described in the LCM that is run as part of a multi=
ple
> +    domain boot. This includes the Boot Domain, Recovery Domain and all =
Launched
> +    Domains.
> +
> +
> +Late Hardware Domain
> +    a Hardware Domain that is launched after host boot has already compl=
eted
> +    with a running Dom0. When the Late Hardware Domain is started, Dom0
> +    relinquishes and transfers the permissions to access and manage host=
 hardware
> +    to it..
> +
> +
> +Launch Control Module (LCM)
> +    A file supplied to the hypervisor by the bootloader that contains
> +    configuration data for the hypervisor and the initial set of virtual=
 machines
> +    to be run at boot
> +
> +
> +Launched Domain
> +    a domain, aside from the boot domain and recovery domain, that is st=
arted as
> +    part of a multiple domain boot and remains running once the boot pro=
cess is
> +    complete
> +
> +
> +Multiple Domain Boot
> +    a system configuration where the hypervisor and multiple virtual mac=
hines
> +    are all launched when the host system hardware boots
> +
> +
> +Recovery Domain
> +    an optional fallback domain that the hypervisor may start in the eve=
nt of a
> +    detectable error encountered during the multiple domain boot process
> +
> +
> +System Device Tree
> +    this is the product of an Arm community project to extend Device Tre=
e to
> +    cover more aspects of initial system configuration
> +
> +
> +Appendix 4: Copyright License
> +-----------------------------
> +
> +This work is licensed under a Creative Commons Attribution 4.0 Internati=
onal
> +License. A copy of this license may be obtained from the Creative Common=
s
> +website (https://creativecommons.org/licenses/by/4.0/legalcode).
> +
> +| Contributions by:
> +| Christopher Clark are Copyright =C2=A9 2021 Star Lab Corporation
> +| Daniel P. Smith are Copyright  =C2=A9 2021 Apertus Solutions, LLC
> --
> 2.25.1
>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 05:28:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 05:28:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151944.280752 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1074-0004A6-Hr; Wed, 07 Jul 2021 05:28:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151944.280752; Wed, 07 Jul 2021 05:28:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1074-00049z-Eq; Wed, 07 Jul 2021 05:28:46 +0000
Received: by outflank-mailman (input) for mailman id 151944;
 Wed, 07 Jul 2021 05:28:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=u0Kw=L7=gmail.com=christopher.w.clark@srs-us1.protection.inumbo.net>)
 id 1m1073-00049d-GQ
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 05:28:45 +0000
Received: from mail-oi1-x236.google.com (unknown [2607:f8b0:4864:20::236])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c90af6b6-818e-4a29-a1fc-d76da94f77c6;
 Wed, 07 Jul 2021 05:28:43 +0000 (UTC)
Received: by mail-oi1-x236.google.com with SMTP id t3so2080247oic.5
 for <xen-devel@lists.xenproject.org>; Tue, 06 Jul 2021 22:28:43 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c90af6b6-818e-4a29-a1fc-d76da94f77c6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=D1dR8p9JnX3zOkEkvevtRK3+GZNX9swmGMbuAU8jYo0=;
        b=magnjuTUaP9BdvuuvKgVP8ITRecDXJpDXsftwIvwSraAk/Y/1PuKhl3WNQXoPbobJW
         ia6TqQu+uGn94PZpxZMcS8OwZHzMiLV+BEDDbJYm0/RUiI/wDivJlRnppI0NMz+Apryg
         XeC6xzP+AXO6YuHi2eAJSd3OXB/9tDUsCmzfy/HsdEPL08hYiTg68vE/DCqhUxqiSeYR
         orlxfhi+6Z/k1ZTQsfuxIQFlrExd7djSdlu/+og4SNhKh7aj006wjvmT9C6lbatb6gfi
         IcacH8PeVyMBlhS7ROMeR6pkgxsfNIh8IwmibENAI3k+gbVh1ruqMTb+9hpoO4uK9RSD
         wVmg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=D1dR8p9JnX3zOkEkvevtRK3+GZNX9swmGMbuAU8jYo0=;
        b=gvWuWuAbLcWevZc2RtmbKYJUHw1FTkfdxU5BGLZsW4NuNKoZXY/wvB4hxxoFwhWhVO
         bgY2aqpgGINjyLuh9btNPEL/F57T+1+xNupyTPpEqOH3+kKYwHpkWGVt42elkPNWXQ6K
         tMEsltBUhfEmxDNaL8JQfwoIq1ooXAMWXgmMnM7qV6lzPcfWbYvdepws0B1pQjyN6aSo
         B++pt6hazGhyf1Wykw2nFh1WfNYBsItD5bokaQBuMeoCbjuO9azVLlsfN0w/fb37Bed8
         V21PyzgwyhBSS7TpzqlldwZ4cHSu3CzOJN3Zi3Z1R+VLXiZ+Olx3AgRs7RirCTD4VtS0
         Iu5g==
X-Gm-Message-State: AOAM533GEwOne0AwBly9S6VhwZRS6tcKEEalp397eWxEdAEc/U4IC9mJ
	/KwrbJ/uSgYZXLfFCpjim+NJsMN/XxMWfg7+1ruwZiqxsek=
X-Google-Smtp-Source: ABdhPJxjVdg6dtC8GZrDmmeBZKV2iy9h5j9xmd8n2RqyOUgzlQS45N71c4OCh3cvu/SFhai6wHybXAjnhwjT+6rWipQ=
X-Received: by 2002:aca:4952:: with SMTP id w79mr3438270oia.33.1625635722905;
 Tue, 06 Jul 2021 22:28:42 -0700 (PDT)
MIME-Version: 1.0
References: <20210514034101.3683-1-christopher.w.clark@gmail.com> <20210514034101.3683-3-christopher.w.clark@gmail.com>
In-Reply-To: <20210514034101.3683-3-christopher.w.clark@gmail.com>
From: Christopher Clark <christopher.w.clark@gmail.com>
Date: Tue, 6 Jul 2021 22:28:29 -0700
Message-ID: <CACMJ4Ga5q2chhWT9n8WVhahEotP9rCTxa4y5-g-i-t=9=ayJ1w@mail.gmail.com>
Subject: Ping: [PATCH v4 2/2] docs/designs/launch: Hyperlaunch device tree
To: xen-devel <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, 
	Ian Jackson <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall <jgrall@amazon.com>, 
	Julien Grall <Julien.grall.oss@gmail.com>, 
	Stefano Stabellini <stefano.stabellini@xilinx.com>, Wei Liu <wl@xen.org>
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>, Rich Persaud <persaur@gmail.com>, 
	Bertrand Marquis <Bertrand.Marquis@arm.com>, =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
	luca.fancellu@arm.com, paul@xen.org, Adam Schwalm <adam.schwalm@starlab.io>, 
	Scott Davis <scott.davis@starlab.io>, Christopher Clark <christopher.clark@starlab.io>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, May 13, 2021 at 8:41 PM Christopher Clark
<christopher.w.clark@gmail.com> wrote:
>
> From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
>
> Adds a design document for Hyperlaunch device tree structure.
>
> Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
> Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
> ---
>  .../designs/launch/hyperlaunch-devicetree.rst | 343 ++++++++++++++++++
>  1 file changed, 343 insertions(+)
>  create mode 100644 docs/designs/launch/hyperlaunch-devicetree.rst
>
> diff --git a/docs/designs/launch/hyperlaunch-devicetree.rst b/docs/design=
s/launch/hyperlaunch-devicetree.rst
> new file mode 100644
> index 0000000000..f97d357407
> --- /dev/null
> +++ b/docs/designs/launch/hyperlaunch-devicetree.rst
> @@ -0,0 +1,343 @@
> +-------------------------------------
> +Xen Hyperlaunch Device Tree Bindings
> +-------------------------------------
> +
> +The Xen Hyperlaunch device tree adopts the dom0less device tree structur=
e and
> +extends it to meet the requirements for the Hyperlaunch capability. The =
primary
> +difference is the introduction of the ``hypervisor`` node that is under =
the
> +``/chosen`` node. The move to a dedicated node was driven by:
> +
> +1. Reduces the need to walk over nodes that are not of interest, e.g. on=
ly
> +   nodes of interest should be in ``/chosen/hypervisor``
> +
> +2. Allows for the domain construction information to easily be sanitized=
 by
> +   simple removing the ``/chosen/hypervisor`` node.
> +
> +Example Configuration
> +---------------------
> +
> +Below are two example device tree definitions for the hypervisor node. T=
he
> +first is an example of a multiboot-based configuration for x86 and the s=
econd
> +is a module-based configuration for Arm.
> +
> +Multiboot x86 Configuration:
> +""""""""""""""""""""""""""""
> +
> +::
> +
> +    hypervisor {
> +        #address-cells =3D <1>;
> +        #size-cells =3D <0>;
> +        compatible =3D =E2=80=9Chypervisor,xen=E2=80=9D
> +
> +        // Configuration container
> +        config {
> +            compatible =3D "xen,config";
> +
> +            module {
> +                compatible =3D "module,microcode", "multiboot,module";
> +                mb-index =3D <1>;
> +            };
> +
> +            module {
> +                compatible =3D "module,xsm-policy", "multiboot,module";
> +                mb-index =3D <2>;
> +            };
> +        };
> +
> +        // Boot Domain definition
> +        domain {
> +            compatible =3D "xen,domain";
> +
> +            domid =3D <0x7FF5>;
> +
> +            // FUNCTION_NONE            (0)
> +            // FUNCTION_BOOT            (1 << 0)
> +            // FUNCTION_CRASH           (1 << 1)
> +            // FUNCTION_CONSOLE         (1 << 2)
> +            // FUNCTION_XENSTORE        (1 << 30)
> +            // FUNCTION_LEGACY_DOM0     (1 << 31)
> +            functions =3D <0x00000001>;
> +
> +            memory =3D <0x0 0x20000>;
> +            cpus =3D <1>;
> +            module {
> +                compatible =3D "module,kernel", "multiboot,module";
> +                mb-index =3D <3>;
> +            };
> +
> +            module {
> +                compatible =3D "module,ramdisk", "multiboot,module";
> +                mb-index =3D <4>;
> +            };
> +            module {
> +                compatible =3D "module,config", "multiboot,module";
> +                mb-index =3D <5>;
> +            };
> +
> +        // Classic Dom0 definition
> +        domain {
> +            compatible =3D "xen,domain";
> +
> +            domid =3D <0>;
> +
> +            // PERMISSION_NONE          (0)
> +            // PERMISSION_CONTROL       (1 << 0)
> +            // PERMISSION_HARDWARE      (1 << 1)
> +            permissions =3D <3>;
> +
> +            // FUNCTION_NONE            (0)
> +            // FUNCTION_BOOT            (1 << 0)
> +            // FUNCTION_CRASH           (1 << 1)
> +            // FUNCTION_CONSOLE         (1 << 2)
> +            // FUNCTION_XENSTORE        (1 << 30)
> +            // FUNCTION_LEGACY_DOM0     (1 << 31)
> +            functions =3D <0xC0000006>;
> +
> +            // MODE_PARAVIRTUALIZED     (1 << 0) /* PV | PVH/HVM */
> +            // MODE_ENABLE_DEVICE_MODEL (1 << 1) /* HVM | PVH */
> +            // MODE_LONG                (1 << 2) /* 64 BIT | 32 BIT */
> +            mode =3D <5>; /* 64 BIT, PV */
> +
> +            // UUID
> +            domain-uuid =3D [B3 FB 98 FB 8F 9F 67 A3];
> +
> +            cpus =3D <1>;
> +            memory =3D <0x0 0x20000>;
> +            security-id =3D =E2=80=9Cdom0_t;
> +
> +            module {
> +                compatible =3D "module,kernel", "multiboot,module";
> +                mb-index =3D <6>;
> +                bootargs =3D "console=3Dhvc0";
> +            };
> +            module {
> +                compatible =3D "module,ramdisk", "multiboot,module";
> +                mb-index =3D <7>;
> +            };
> +    };
> +
> +The multiboot modules supplied when using the above config would be, in =
order:
> +
> +* (the above config, compiled)
> +* CPU microcode
> +* XSM policy
> +* kernel for boot domain
> +* ramdisk for boot domain
> +* boot domain configuration file
> +* kernel for the classic dom0 domain
> +* ramdisk for the classic dom0 domain
> +
> +Module Arm Configuration:
> +"""""""""""""""""""""""""
> +
> +::
> +
> +    hypervisor {
> +        compatible =3D =E2=80=9Chypervisor,xen=E2=80=9D
> +
> +        // Configuration container
> +        config {
> +            compatible =3D "xen,config";
> +
> +            module {
> +                compatible =3D "module,microcode=E2=80=9D;
> +                module-addr =3D <0x0000ff00 0x80>;
> +            };
> +
> +            module {
> +                compatible =3D "module,xsm-policy";
> +                module-addr =3D <0x0000ff00 0x80>;
> +
> +            };
> +        };
> +
> +        // Boot Domain definition
> +        domain {
> +            compatible =3D "xen,domain";
> +
> +            domid =3D <0x7FF5>;
> +
> +            // FUNCTION_NONE            (0)
> +            // FUNCTION_BOOT            (1 << 0)
> +            // FUNCTION_CRASH           (1 << 1)
> +            // FUNCTION_CONSOLE         (1 << 2)
> +            // FUNCTION_XENSTORE        (1 << 30)
> +            // FUNCTION_LEGACY_DOM0     (1 << 31)
> +            functions =3D <0x00000001>;
> +
> +            memory =3D <0x0 0x20000>;
> +            cpus =3D <1>;
> +            module {
> +                compatible =3D "module,kernel";
> +                module-addr =3D <0x0000ff00 0x80>;
> +            };
> +
> +            module {
> +                compatible =3D "module,ramdisk";
> +                module-addr =3D <0x0000ff00 0x80>;
> +            };
> +            module {
> +                compatible =3D "module,config";
> +                module-addr =3D <0x0000ff00 0x80>;
> +            };
> +
> +        // Classic Dom0 definition
> +        domain@0 {
> +            compatible =3D "xen,domain";
> +
> +            domid =3D <0>;
> +
> +            // PERMISSION_NONE          (0)
> +            // PERMISSION_CONTROL       (1 << 0)
> +            // PERMISSION_HARDWARE      (1 << 1)
> +            permissions =3D <3>;
> +
> +            // FUNCTION_NONE            (0)
> +            // FUNCTION_BOOT            (1 << 0)
> +            // FUNCTION_CRASH           (1 << 1)
> +            // FUNCTION_CONSOLE         (1 << 2)
> +            // FUNCTION_XENSTORE        (1 << 30)
> +            // FUNCTION_LEGACY_DOM0     (1 << 31)
> +            functions =3D <0xC0000006>;
> +
> +            // MODE_PARAVIRTUALIZED     (1 << 0) /* PV | PVH/HVM */
> +            // MODE_ENABLE_DEVICE_MODEL (1 << 1) /* HVM | PVH */
> +            // MODE_LONG                (1 << 2) /* 64 BIT | 32 BIT */
> +            mode =3D <5>; /* 64 BIT, PV */
> +
> +            // UUID
> +            domain-uuid =3D [B3 FB 98 FB 8F 9F 67 A3];
> +
> +            cpus =3D <1>;
> +            memory =3D <0x0 0x20000>;
> +            security-id =3D =E2=80=9Cdom0_t=E2=80=9D;
> +
> +            module {
> +                compatible =3D "module,kernel";
> +                module-addr =3D <0x0000ff00 0x80>;
> +                bootargs =3D "console=3Dhvc0";
> +            };
> +            module {
> +                compatible =3D "module,ramdisk";
> +                module-addr =3D <0x0000ff00 0x80>;
> +            };
> +    };
> +
> +The modules that would be supplied when using the above config would be:
> +
> +* (the above config, compiled into hardware tree)
> +* CPU microcode
> +* XSM policy
> +* kernel for boot domain
> +* ramdisk for boot domain
> +* boot domain configuration file
> +* kernel for the classic dom0 domain
> +* ramdisk for the classic dom0 domain
> +
> +The hypervisor device tree would be compiled into the hardware device tr=
ee and
> +provided to Xen using the standard method currently in use. The remainin=
g
> +modules would need to be loaded in the respective addresses specified in=
 the
> +`module-addr` property.
> +
> +
> +The Hypervisor node
> +-------------------
> +
> +The hypervisor node is a top level container for the domains that will b=
e built
> +by hypervisor on start up. On the ``hypervisor`` node the ``compatible``
> +property is used to identify the type of hypervisor node present..
> +
> +compatible
> +  Identifies the type of node. Required.
> +
> +The Config node
> +---------------
> +
> +A config node is for detailing any modules that are of interest to Xen i=
tself.
> +For example this would be where Xen would be informed of microcode or XS=
M
> +policy locations. If the modules are multiboot modules and are able to b=
e
> +located by index within the module chain, the ``mb-index`` property shou=
ld be
> +used to specify the index in the multiboot module chain.. If the module =
will be
> +located by physical memory address, then the ``module-addr`` property sh=
ould be
> +used to identify the location and size of the module.
> +
> +compatible
> +  Identifies the type of node. Required.
> +
> +The Domain node
> +---------------
> +
> +A domain node is for describing the construction of a domain. It may pro=
vide a
> +domid property which will be used as the requested domain id for the dom=
ain
> +with a value of =E2=80=9C0=E2=80=9D signifying to use the next available=
 domain id, which is
> +the default behavior if omitted. A domain configuration is not able to r=
equest
> +a domid of =E2=80=9C0=E2=80=9D. After that a domain node may have any of=
 the following
> +parameters,
> +
> +compatible
> +  Identifies the type of node. Required.
> +
> +domid
> +  Identifies the domid requested to assign to the domain. Required.
> +
> +permissions
> +  This sets what Discretionary Access Control permissions
> +  a domain is assigned. Optional, default is none.
> +
> +functions
> +  This identifies what system functions a domain will fulfill.
> +  Optional, the default is none.
> +
> +.. note::  The `functions` bits that have been selected to indicate
> +   ``FUNCTION_XENSTORE`` and ``FUNCTION_LEGACY_DOM0`` are the last two b=
its
> +   (30, 31) such that should these features ever be fully retired, the f=
lags may
> +   be dropped without leaving a gap in the flag set.
> +
> +mode
> +  The mode the domain will be executed under. Required.
> +
> +domain-uuid
> +  A globally unique identifier for the domain. Optional,
> +  the default is NULL.
> +
> +cpus
> +  The number of vCPUs to be assigned to the domain. Optional,
> +  the default is =E2=80=9C1=E2=80=9D.
> +
> +memory
> +  The amount of memory to assign to the domain, in KBs.
> +  Required.
> +
> +security-id
> +  The security identity to be assigned to the domain when XSM
> +  is the access control mechanism being used. Optional,
> +  the default is =E2=80=9Cdomu_t=E2=80=9D.
> +
> +The Module node
> +---------------
> +
> +This node describes a boot module loaded by the boot loader. The require=
d
> +compatible property follows the format: module,<type> where type can be
> +=E2=80=9Ckernel=E2=80=9D, =E2=80=9Cramdisk=E2=80=9D, =E2=80=9Cdevice-tre=
e=E2=80=9D, =E2=80=9Cmicrocode=E2=80=9D, =E2=80=9Cxsm-policy=E2=80=9D or =
=E2=80=9Cconfig=E2=80=9D. In
> +the case the module is a multiboot module, the additional property strin=
g
> +=E2=80=9Cmultiboot,module=E2=80=9D may be present. One of two properties=
 is required and
> +identifies how to locate the module. They are the mb-index, used for mul=
tiboot
> +modules, and the module-addr for memory address based location.
> +
> +compatible
> +  This identifies what the module is and thus what the hypervisor
> +  should use the module for during domain construction. Required.
> +
> +mb-index
> +  This identifies the index for this module in the multiboot module chai=
n.
> +  Required for multiboot environments.
> +
> +module-addr
> +  This identifies where in memory this module is located. Required for
> +  non-multiboot environments.
> +
> +bootargs
> +  This is used to provide the boot params to kernel modules.
> +
> +.. note::  The bootargs property is intended for situations where the sa=
me kernel multiboot module is used for more than one domain.
> --
> 2.25.1
>


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 05:45:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 05:45:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151952.280764 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m10NB-0006Pu-OS; Wed, 07 Jul 2021 05:45:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151952.280764; Wed, 07 Jul 2021 05:45:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m10NB-0006Pn-LX; Wed, 07 Jul 2021 05:45:25 +0000
Received: by outflank-mailman (input) for mailman id 151952;
 Wed, 07 Jul 2021 05:45:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m10NA-0006Pd-Qr; Wed, 07 Jul 2021 05:45:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m10NA-0004GK-K0; Wed, 07 Jul 2021 05:45:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m10NA-0005k0-AB; Wed, 07 Jul 2021 05:45:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m10NA-0006bA-9Z; Wed, 07 Jul 2021 05:45:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=llLyI0+9svu0WKsUDWLS7afIgH5/yKyhO49QVPj2WHE=; b=U9Oi4piccowvipyFqttnUxlSpP
	/fwVpc3GFb809MNj+jZXLsqkAzSdjyqyv0c4bQaH6bwC96oOObWVUDM4V8zm5jbGX+hX0QnaL6tSr
	P0x2F9E0TWPxgpxsOtepkfBJQhWC9zNPbRmibdX9A8zfvYZVbs0IGowq9teRj/NzHNSk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163367-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163367: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=0a6b303dcedb7af238ad485d545802befb797b3a
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 05:45:24 +0000

flight 163367 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163367/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 0a6b303dcedb7af238ad485d545802befb797b3a
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   33 days
Failing since        162368  2021-06-04 15:42:59 Z   32 days   92 attempts
Testing same since   163340  2021-07-06 15:40:15 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3335 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 06:58:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 06:58:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151961.280783 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11W6-0004Zl-8a; Wed, 07 Jul 2021 06:58:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151961.280783; Wed, 07 Jul 2021 06:58:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11W6-0004Ze-5P; Wed, 07 Jul 2021 06:58:42 +0000
Received: by outflank-mailman (input) for mailman id 151961;
 Wed, 07 Jul 2021 06:58:40 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m11W4-0004ZU-TE; Wed, 07 Jul 2021 06:58:40 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m11W4-0005Xe-KE; Wed, 07 Jul 2021 06:58:40 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m11W4-0007xE-98; Wed, 07 Jul 2021 06:58:40 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m11W4-0002mn-8g; Wed, 07 Jul 2021 06:58:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LSxJGXZPfM2tNMknRTdkzDiRi7i5WY/aBYYluxR8UIQ=; b=jg9zujJAo2ZTD49XAatVe3AW+L
	Yl124Ic1JPSIGym7mC6UzPRRVwW9aixYLAOnyqJKBKpjsB8MGEXzPBeHrtOTe/uv97sZqVXIkw8A1
	55kALnYORXJlxWlywJNeQPdFEvjTNWfmM/WjcqXwQpN+J360RI4FVj14ZV29Pwsn/leA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163363-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163363: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=77d34a4683b053108ecd466cc7c4193b45805528
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 06:58:40 +0000

flight 163363 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163363/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                77d34a4683b053108ecd466cc7c4193b45805528
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  340 days
Failing since        152366  2020-08-01 20:49:34 Z  339 days  579 attempts
Testing same since   163363  2021-07-06 20:09:53 Z    0 days    1 attempts

------------------------------------------------------------
6614 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1929337 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:01:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:01:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151968.280797 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11Z1-00061d-0M; Wed, 07 Jul 2021 07:01:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151968.280797; Wed, 07 Jul 2021 07:01:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11Z0-00061W-TJ; Wed, 07 Jul 2021 07:01:42 +0000
Received: by outflank-mailman (input) for mailman id 151968;
 Wed, 07 Jul 2021 07:01:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Dzvn=L7=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m11Z0-00061Q-9g
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:01:42 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b4f17736-32a3-4535-9d4d-fd3f24a92d18;
 Wed, 07 Jul 2021 07:01:41 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 8ED6D2001A;
 Wed,  7 Jul 2021 07:01:40 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 619F013768;
 Wed,  7 Jul 2021 07:01:40 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id BjeeFlRR5WAkDwAAGKfGzw
 (envelope-from <jgross@suse.com>); Wed, 07 Jul 2021 07:01:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b4f17736-32a3-4535-9d4d-fd3f24a92d18
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625641300; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=Z/e1G+gloDaAJuCz1ic3rY8b4Q6mwDzhQzHZUcYRM20=;
	b=EDS83y1O8+1gXi+Y6G9NBCc00pHQ33+jQ/Yt+dj1A18BKAHI/ThqLjlCMlGeQocmRg+/5v
	+NgnPQSLq0Yo6nQ2aSEEaDwzhTj0ItTlAQQy0OIwKorBcpfgcrgiOA7mXY+35/TVU8GNmC
	ynosbRpR++FY2H6x3nHmn3WMH497pDk=
From: Juergen Gross <jgross@suse.com>
To: torvalds@linux-foundation.org
Cc: linux-kernel@vger.kernel.org,
	xen-devel@lists.xenproject.org,
	boris.ostrovsky@oracle.com
Subject: [GIT PULL] xen: branch for v5.14-rc1
Date: Wed,  7 Jul 2021 09:01:39 +0200
Message-Id: <20210707070139.27901-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Linus,

Please git pull the following tag:

 git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git for-linus-5.14-rc1-tag

xen: branch for v5.14-rc1

It contains only two minor patches this time: one cleanup patch and
one patch refreshing a Xen header.

Thanks.

Juergen

 drivers/xen/pcpu.c                |   6 +-
 drivers/xen/xen-balloon.c         |  28 ++--
 drivers/xen/xenbus/xenbus_probe.c |  15 +-
 include/xen/interface/io/ring.h   | 278 +++++++++++++++++++++-----------------
 4 files changed, 177 insertions(+), 150 deletions(-)

Juergen Gross (1):
      xen: sync include/xen/interface/io/ring.h with Xen's newest version

YueHaibing (1):
      xen: Use DEVICE_ATTR_*() macro


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:15:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:15:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151975.280809 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11mh-0007XP-9d; Wed, 07 Jul 2021 07:15:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151975.280809; Wed, 07 Jul 2021 07:15:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11mh-0007XI-5J; Wed, 07 Jul 2021 07:15:51 +0000
Received: by outflank-mailman (input) for mailman id 151975;
 Wed, 07 Jul 2021 07:15:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2f+4=L7=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1m11mf-0007XC-7p
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:15:49 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 26dd39c6-def3-11eb-84dc-12813bfff9fa;
 Wed, 07 Jul 2021 07:15:48 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 26dd39c6-def3-11eb-84dc-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625642148;
  h=from:to:cc:subject:date:message-id:
   content-transfer-encoding:mime-version;
  bh=Hn/VTdoW8FjMLt1k0X+caeWzYZXTiG2WgypLgMAK72w=;
  b=EBEI+d2FOqEfhiyUrYMeZgzMGr0e4Ca4WfNA5BELG1qe1awVkDrS1mFG
   wce/o4bNCl1awS/sWavETTl0tcV0UZn7h8K6CjKze4kzzqCtksK7C1EOZ
   z+oVE4YHcUhSbcDl8lAHxgvr9if1MNIIpxtg8H8V620y9LpFkRx/DM/xJ
   g=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: cvPudFtrfMEzYPEQToFdFSIQVoZMB0n4yyvarWtLGSmnL/N2c367yhiMJIfGHeAJYa36GXClYG
 CT7SfgbvFloKFXWsbKjK08T46fIsrGwJWQ1GyybKeP40ssRTS9/2iNgp3eiYte7zYoaUfI85ds
 /WkT6ikjKraHluUuwRmilZavIe1nZmypyZK4dDoQXI2UPzfWGtHWy/pEz87hgDvJSDylGcdk9d
 KF603FhY/arr4tsJTTUHbyjWpdu4WpJ2mk0dAlfeFvF9Kvda2t3U+Z9Q0ytr/SEokrZlb5uPnj
 gIA=
X-SBRS: 5.1
X-MesageID: 47701601
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:3rPjPqN+3FA2T8BcTvajsMiBIKoaSvp037BN7SxMoH1uHfBw8v
 rEoB1173HJYVoqOU3I++rwXZVoMEm9yXcd2+B4V9qftW/dyQiVxa5ZnO3fKlbbaknDH4BmpM
 VdWpk7JNrsDUVryebWiTPIa+rIGeP3iZxBD43lvhBQcT0=
X-IronPort-AV: E=Sophos;i="5.83,331,1616472000"; 
   d="scan'208";a="47701601"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=brFRIP6Mshp81an9xbdl90u/u5gWDJLvQUFJ88F0UNZMvGtXqsKOsdtBZcmJeBIkLbzYWDNcpyA9mxt95oIyGIGnoypkCgEpOoybkDpk+jb6wgSYXSbR5T7ElDVueNJn3Tlq170NTY9Vh1wjNm6pxhAAmKcZoo1qNYGFvmJ5QmKd6Gp2rIY9THhnoNWwDmFmsEEutBJlVPlyaLEPxoyx9IPkQqXliCrhr8Xwlsg0WDdVEdTXDd3R5M9VWex5ao4DdrgcwLvkq6byghBY5/hcJvzUUW704ir8+HXW7QWl6S07GnZyaCxkFd/IjuCB59+gx+qGOjRBqHi7J7yxdyH3uw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cs8ymGBrF7j+G3jCG9nSDz3vu1J1AeR1C6gb1yeBOWs=;
 b=hS0Zfklq47yNX4uWsgsDUAhUXdYZXk/n2/kO1fiHTh5jXOvfyqNGS/OiAjWFWdNP3lkTYWWUL/G1TlPmG5CHpVbkoW1gUN4yQISkpKKhmFJPwl9zsURfd2Aha+0MAObXkhuWw1Wux20LO2wjrZ31zW4StnUXASNJKL7XTziRWvVR/CKAm7RK7+ERj2OjzTMDrEyxLy9FZkSPzOnmkZ4QzpHp7NkaApLGudj6Zq9x0dc1ff7cUVOjwF5ifo5FmClfSlSnOWf2k6HYCyindihbJR/mEWxc39lN+Q1jmpp8H5O1s3SI3Svl2fFd0anubPqQZRnnhJS37Pd4qPm0jckBBQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cs8ymGBrF7j+G3jCG9nSDz3vu1J1AeR1C6gb1yeBOWs=;
 b=J156MwWRqZdUUTT2abG/VzPOzlZRWqtPd2YBu5e9iF9Zd41b66/uwzLv/dwrBoxyw8h7lLRVV6cFrswN/bInH2KydQIh7pMYtkBiKRPVUa+M4aB31MKkl+5YsnDuLVi+uDmOo4WW6T33T57bUB/+chY/BYR3G3SXhhAGIy1iGug=
From: Roger Pau Monne <roger.pau@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Roger Pau Monne <roger.pau@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, Ian
 Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Ting-Wei Lan
	<lantw44@gmail.com>
Subject: [PATCH] tools/go: honor append build flags
Date: Wed,  7 Jul 2021 09:15:31 +0200
Message-ID: <20210707071531.69001-1-roger.pau@citrix.com>
X-Mailer: git-send-email 2.31.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: MR2P264CA0051.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:500:31::15) To DS7PR03MB5608.namprd03.prod.outlook.com
 (2603:10b6:5:2c9::18)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 41868968-1388-455e-7486-08d94117097b
X-MS-TrafficTypeDiagnostic: DM6PR03MB3577:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <DM6PR03MB35779AACA564EF621A5C48728F1A9@DM6PR03MB3577.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Fxs7ggKq+1kOLeWkAH+5X56VahEC3RW1Z/mJnFOkb5xIARIJ0kQ6yl9TsuVXp5/6tYBhCDFWcFPpaDySFZ6YjirQoMn+4T0a9f/cTJ+eytqnEqh8iVjO43JUhjhODNkv+CeuV7WZE1QI4i6CfZC/rB00/x0Z5u9gJ/y9tujAw8kLozGYvApLCFZ9snxYKAHam/qoad4LdkLGxuPbJ5ovg3N3btvjBdQzIFfmX9zeOKORZaLFv9l3mr/1HtMwU0Pt7JqwTnMjTsJLGhaGdqnuILIjo9L2jHfb25ZrER8g0rqQ/0T/jCE/MvFOLQ8Wopw6pKEhiXDznxSmxNLEpv7ZRGvB8Kxm+/PkqAGn9cFVf0mBbFdmhCQyCu1mwBHGfMy8/mx9yH1mxFQIXYIsCIEbanXIxZKg78AmIhManbsGXZL8DtZfYt2MiCAWLB2IfSRlCaWD4puVP6Q9rHszBf1UliI8H2Ll/fOrXtYLiVCE99uCaK0SupT45bPViI3Qry31b1X3NFEFg98Ii2etbF4fwjqTFEhK5tu/euxOpub8JXD5nSCivrwqF9wRC3WpazA9fMmb3ljHuHU0sZSOdkjuehQe85spr2ynOGRxsASo7hqd30Rhd5fvDjsey5ea2zNcn5OZJTJye/t6USf5RVXauA==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(346002)(396003)(366004)(376002)(26005)(186003)(66476007)(2906002)(478600001)(36756003)(8936002)(6486002)(38100700002)(6916009)(6666004)(86362001)(8676002)(54906003)(956004)(316002)(1076003)(2616005)(5660300002)(4326008)(83380400001)(66556008)(66946007)(6496006);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?3Y9rMJxvTseRWJ5qheG8R8Kl6cJm/0038KQoLhi?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 41868968-1388-455e-7486-08d94117097b
X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 07:15:45.0785
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NyFpSn4sDWYTTb98x1XF+bpwWTOEQOyLA1IBZQ5S6wwN1UjsdYHE0kr8h9FuLayc41eQa8yMCnOX0eTlTe45/A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB3577
X-OriginatorOrg: citrix.com

Make the go build use APPEND_{C/LD}FLAGS when necessary, just like
other parts of the build.

Reported-by: Ting-Wei Lan <lantw44@gmail.com>
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
Note sure if it's the best way to add the appended flags, I'm not
familiar with the go build system. In any case this fixes the build
when required libraries (ie: yajl) are not part of the system search
path and instead passed in APPEND_{C/LD}FLAGS.
---
 tools/golang/xenlight/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/golang/xenlight/Makefile b/tools/golang/xenlight/Makefile
index e394ef9b2b..64671f246c 100644
--- a/tools/golang/xenlight/Makefile
+++ b/tools/golang/xenlight/Makefile
@@ -27,7 +27,7 @@ GOXL_GEN_FILES = types.gen.go helpers.gen.go
 # so that it can find the actual library.
 .PHONY: build
 build: xenlight.go $(GOXL_GEN_FILES)
-	CGO_CFLAGS="$(CFLAGS_libxenlight) $(CFLAGS_libxentoollog)" CGO_LDFLAGS="$(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) -L$(XEN_libxenlight) -L$(XEN_libxentoollog)" $(GO) build -x
+	CGO_CFLAGS="$(CFLAGS_libxenlight) $(CFLAGS_libxentoollog) $(APPEND_CFLAGS)" CGO_LDFLAGS="$(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) -L$(XEN_libxenlight) -L$(XEN_libxentoollog) $(APPEND_LDFLAGS)" $(GO) build -x
 
 .PHONY: install
 install: build
-- 
2.31.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:23:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:23:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151982.280823 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11uH-0000XL-4W; Wed, 07 Jul 2021 07:23:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151982.280823; Wed, 07 Jul 2021 07:23:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m11uH-0000XE-0N; Wed, 07 Jul 2021 07:23:41 +0000
Received: by outflank-mailman (input) for mailman id 151982;
 Wed, 07 Jul 2021 07:23:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Dzvn=L7=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m11uF-0000X8-FI
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:23:39 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9cee654a-d304-467f-89d7-15d583d18be1;
 Wed, 07 Jul 2021 07:23:38 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id B29E22000A;
 Wed,  7 Jul 2021 07:23:37 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 91CD81372D;
 Wed,  7 Jul 2021 07:23:37 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id STVaInlW5WDDFQAAGKfGzw
 (envelope-from <jgross@suse.com>); Wed, 07 Jul 2021 07:23:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9cee654a-d304-467f-89d7-15d583d18be1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625642617; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=+V/e+nMrY5bu3avaMo/GJ35ri5YRtZDX/ChS+XO5QWA=;
	b=m245W7xyA3ro6DRAIHtZUUveik7YIuf1nhGM9i0/9KuESyAziBYmIdkb6t+JGScJLEJqjq
	Otl4eeili+qvyCtAzjDNdM7pEfih6n6XmIqhq3W5TwSs3CF8bnMO0HnDkF2A4x3zIPYIef
	F1+wTPEmgSBZw/8Al2pGhqTXA6pfCt8=
Subject: Re: [PATCH v2 0/2] tools/xenstore: set resource limits of xenstored
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Julien Grall <julien@xen.org>
References: <20210608055839.10313-1-jgross@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <3c6f15c2-da5f-736b-cf8f-12451980d649@suse.com>
Date: Wed, 7 Jul 2021 09:23:36 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210608055839.10313-1-jgross@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="f3ApfBEQddMgd5LvzhYRboTO3KLor7ZX3"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--f3ApfBEQddMgd5LvzhYRboTO3KLor7ZX3
Content-Type: multipart/mixed; boundary="lR6JKiw3RXJDVIG6GaoG0DvS7v1GpTqO4";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Julien Grall <julien@xen.org>
Message-ID: <3c6f15c2-da5f-736b-cf8f-12451980d649@suse.com>
Subject: Re: [PATCH v2 0/2] tools/xenstore: set resource limits of xenstored
References: <20210608055839.10313-1-jgross@suse.com>
In-Reply-To: <20210608055839.10313-1-jgross@suse.com>

--lR6JKiw3RXJDVIG6GaoG0DvS7v1GpTqO4
Content-Type: multipart/mixed;
 boundary="------------C45C503B5AD107B88D358593"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------C45C503B5AD107B88D358593
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Ping?

On 08.06.21 07:58, Juergen Gross wrote:
> Set some limits for xenstored in order to avoid it being killed by
> OOM killer, or to run out of file descriptors.
>=20
> Changes in V2:
> - split into 2 patches
> - set limits from start script
>=20
> Juergen Gross (2):
>    tools/xenstore: set oom score for xenstore daemon on Linux
>    tools/xenstore: set open file descriptor limit for xenstored
>=20
>   tools/hotplug/Linux/init.d/sysconfig.xencommons.in | 7 +++++++
>   tools/hotplug/Linux/launch-xenstore.in             | 6 ++++++
>   2 files changed, 13 insertions(+)
>=20


--------------C45C503B5AD107B88D358593
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------C45C503B5AD107B88D358593--

--lR6JKiw3RXJDVIG6GaoG0DvS7v1GpTqO4--

--f3ApfBEQddMgd5LvzhYRboTO3KLor7ZX3
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDlVnkFAwAAAAAACgkQsN6d1ii/Ey9T
RAgAijqEjf3zK0IHjhHxCmiaeWPGUXBRbLvzt9o+cxgVoTWzFiFCfix/OCfttc6SsUmJkl1WDgNI
SZsWY9FO6yzZjwTdBuB2K1uL5vU+xqEqUEiMII+ui0nkQH0T1lcB9Xm1JBsJFF4YIC224HOd9Mna
Qr19kY5/v6YJU1dPPpwgPUgv0NOSHVVWy9L8W+bYRBoExpLzfHet/J0LNJIZC+ZwsLdPC2C5iIOf
sv1fCb14sfIsgNzSoMH/SXN1WErYxZygPcnnVThOBsqbS/4aWPAX+f2gUC7LAqGkA0jfgDVq8ZFB
r62P4P0XeNjMbmh79RrZwhN+4LOpk7ANfjls0bE8Xg==
=WAn2
-----END PGP SIGNATURE-----

--f3ApfBEQddMgd5LvzhYRboTO3KLor7ZX3--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:44:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:44:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151989.280836 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12Ej-0002tB-Tw; Wed, 07 Jul 2021 07:44:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151989.280836; Wed, 07 Jul 2021 07:44:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12Ej-0002t4-Qy; Wed, 07 Jul 2021 07:44:49 +0000
Received: by outflank-mailman (input) for mailman id 151989;
 Wed, 07 Jul 2021 07:44:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UvpK=L7=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m12Ej-0002sy-Ba
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:44:49 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 34300adc-def7-11eb-84dc-12813bfff9fa;
 Wed, 07 Jul 2021 07:44:47 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8B4F1ED1;
 Wed,  7 Jul 2021 00:44:47 -0700 (PDT)
Received: from [10.57.0.191] (unknown [10.57.0.191])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 72FCC3F694;
 Wed,  7 Jul 2021 00:44:46 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 34300adc-def7-11eb-84dc-12813bfff9fa
Subject: Re: [PATCH] tools/xen-foreign: Update the size for
 vcpu_guest_{core_regs, context}
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, olaf@aepfle.de
References: <20210706132000.29892-1-julien@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <6227b008-6168-47ed-e947-a76423ca2fae@arm.com>
Date: Wed, 7 Jul 2021 09:44:41 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210706132000.29892-1-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit



On 06.07.2021 15:20, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
> 
> Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
> uint64_t") updated the size of the structure vcpu_guest_core_regs and
> indirectly vcpu_guest_context.
> 
> On Arm, the two structures are only accessible to the tools and the
> hypervisor (and therefore stable). However, they are still checked
> by the scripts in tools/include/xen-foreign are not able to understand
> that.
> 
> Ideally we should rework the scripts so we don't have to update
> the size for non-stable structure. But I don't have limited time
> to spend on the issue. So chose the simple solution and update
> the size accordingly.
> 
> Note that we need to keep vcpu_guest_core_regs around because
> the structure is used by vcpu_guest_context and therefore the
> scripts expects the generated header to contain it.
> 
> Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t")

Sorry for this inconvenience due to the lack of xen-tools testing.
> Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Julien Grall <jgrall@amazon.com>
> 
Reviewed-by: Michal Orzel <michal.orzel@arm.com>
Tested-by: Michal Orzel <michal.orzel@arm.com>
> ---
> 
> Cc: michal.orzel@arm.com
> Cc: olaf@aepfle.de
> ---
>  tools/include/xen-foreign/reference.size | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/include/xen-foreign/reference.size b/tools/include/xen-foreign/reference.size
> index a0409db5c458..11a06a7a432c 100644
> --- a/tools/include/xen-foreign/reference.size
> +++ b/tools/include/xen-foreign/reference.size
> @@ -4,8 +4,8 @@ structs                   |   arm32   arm64  x86_32  x86_64
>  start_info                |       -       -    1112    1168
>  trap_info                 |       -       -       8      16
>  cpu_user_regs             |       -       -      68     200
> -vcpu_guest_core_regs      |     304     304       -       -
> -vcpu_guest_context        |     344     344    2800    5168
> +vcpu_guest_core_regs      |     312     312       -       -
> +vcpu_guest_context        |     352     352    2800    5168
>  arch_vcpu_info            |       0       0      24      16
>  vcpu_time_info            |      32      32      32      32
>  vcpu_info                 |      48      48      64      64
> 


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:46:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:46:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.151994.280848 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12Gh-0003VY-BR; Wed, 07 Jul 2021 07:46:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 151994.280848; Wed, 07 Jul 2021 07:46:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12Gh-0003VR-7v; Wed, 07 Jul 2021 07:46:51 +0000
Received: by outflank-mailman (input) for mailman id 151994;
 Wed, 07 Jul 2021 07:46:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m12Gg-0003VH-89
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:46:50 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0e7d697f-2b63-428b-910a-a36c7eb3e365;
 Wed, 07 Jul 2021 07:46:49 +0000 (UTC)
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2054.outbound.protection.outlook.com [104.47.6.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-18-uirHHT5RMaGyzTV3UnxDOA-1; Wed, 07 Jul 2021 09:46:47 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2605.eurprd04.prod.outlook.com (2603:10a6:800:57::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Wed, 7 Jul
 2021 07:46:45 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 07:46:45 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR0501CA0051.eurprd05.prod.outlook.com (2603:10a6:200:68::19) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Wed, 7 Jul 2021 07:46:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e7d697f-2b63-428b-910a-a36c7eb3e365
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625644008;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=mIRrQE298L27KOZQuDhUlhq3lDEV4n3IGRDKDKfwLc4=;
	b=Bg/P+D5hDewVD2+uCT5/AsIXex2siBXt86dFO+Ca7sR3Qd6hiLji1rNWZcICsa36s2R+1o
	rOXd2vbpvyDrQ/sWxb4b1BuF5teQIJRdwdW4LBQTej9V/dC+4XAteswzlYflYM2lzhL65G
	DDglr9xXJPDt7ERvxMEYcc/NHmHvHXs=
X-MC-Unique: uirHHT5RMaGyzTV3UnxDOA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jVwOxHKkKFPfj8R1F0zIQEcyp3863vGzFSqNTVskHrM6jN4929IE8P4APzy7BWj5UzbyVpgFIGjlZq8fiCIKKRNDAms4sTcuXUjRlTKnorD/EEwyP4QiNbkMpnbBTCawZvFFvizZcWQ/thBgICTm8ptrshG1AKHkHnQ/+stGNbs9C/vBafDoPyMOaaS4TB8odmqM2Ohu4PHqkgK2oFkPtFOxR0Adsctd6pXslGnR6jm16HPOwCUZAbJOfUq/Te+MYWn/TE5bPSQQGpVLQ1jnCYyDCK8LhBsOCkP71G6O7S+smLGbdgYzEQOrV4++XzUWuecQMP1tgD9nGBM/SkrjNA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=mIRrQE298L27KOZQuDhUlhq3lDEV4n3IGRDKDKfwLc4=;
 b=Vs0KRFDrShnzm4yS6oHgwd14KU7/0TnWX4TWbtUtFJk4u6R/5jlNz8xzZErAf39onfrPIA+N9OEDJUAtL986J3DzhrXfpnGvlHqiTkwSqPFeiH7UIR31r/ehgMfsqRD/UnIat50FGgiPpnop3z3w6Zxt09uxe6Mqdx7jbsQv1tgg62j4KG63gikicEtfXxD2l+RgUv4sSEYoqPn1h91T75l0SmP40bEHlMSugtsox5pkkXSoVpYZfZhuaC9Nx7wob5pfOAcr7yjtLw7rQilDqfrS8+t+dCTk+CuGc3rrZUF898h5WtGKGh5O20Eea4SKsUSrZe/FzAHFtpKof/oUQQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Igor Druzhinin <igor.druzhinin@citrix.com>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, julien@xen.org, sstabellini@kernel.org,
 jgross@suse.com, christian.lindig@citrix.com, dave@recoil.org,
 xen-devel@lists.xenproject.org
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
Date: Wed, 7 Jul 2021 09:46:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM4PR0501CA0051.eurprd05.prod.outlook.com
 (2603:10a6:200:68::19) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a9c0ac69-70fd-474e-7d86-08d9411b5e76
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2605:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26055AEC06E187C85BDDBFCBB31A9@VI1PR0401MB2605.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	FbjHwunrPiPqj5jjx4vF2iEUlbZ6EhN3GjA9zmrAoiKxpolGWq+qgGzNI0xDO/rRvcMHm2xuLo7yjEWdjPqkGnNRmbmXCXdJ32ISsoe/LYhjekJtIvcyVmKTf21zSktN69ADhFi68yNrzIOQMVHvQEhrMceOnNNczt+WK9bAFqkhltDemrOrcaCj0tUppTYJ8BTRpF9XwDxUb0RTyrX1wQRPPdspcvfqh+Tliq/8P1Oqk7HgZDL5xywSOaCXDR47lLXAkKroIUKuVCeptKlDandCJGRucPp1T3IkdGqMmsK1OlcVJfQk98X4rnJrKhNEOc0Y6DieinTRqi3H8P5CeVrGzru/9xq/7in3IiJPVueNk0vKjci0v4w7xZ455p4t9JVFx91PTuutjamTpvKDD9zGK88so+dHLu1Ew6ZHgcQydvKPWeKLPKGWPWsUKpYLNEpCsysATffHmJ3Q867eUQcNlZdzMWUzxNd+UUr56eyvl2OxJlyioJCWyG3Lwg1oa/mgneyCu68ba8JvyxV9k6oacV45P1J+Q+WQ23noelLm8qoyXaIyGo+OCpIkwYtXGexJrZxb8gmKtbcVkJZ3iV0jzQsgg/czTAWy+EIaOTZdo4Hi5O9vDZ0lh94RqAbSTcULJMzEAOQfdN/n1ByQMLTSw0VPQbWTujl9QUKuaJYBj67BRMFbcB6LtkJilKn+OnNJiUKjMAlD/DSqmm9JHf/GIlXnQS2Xt/z0b3gC9FA=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(39840400004)(366004)(376002)(396003)(83380400001)(38100700002)(186003)(66476007)(6486002)(86362001)(31686004)(956004)(36756003)(316002)(4326008)(478600001)(6916009)(8676002)(2906002)(53546011)(66556008)(26005)(5660300002)(8936002)(31696002)(16576012)(2616005)(66946007)(7416002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?0EdWRWVgk6YGVa0lVS4gR/F/86+mmoJOIYyMRYn?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a9c0ac69-70fd-474e-7d86-08d9411b5e76
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 07:46:45.5521
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: SR+2twnPtSzzXS5fClOm6UbiiNSNct5WEKHhJhNX2QJoeSLAORSK4ONfTI/ZnIwX2M2c/kzf+pNoR7UaOMppsw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2605

On 07.07.2021 03:02, Igor Druzhinin wrote:
> Current unit8_t for pirq argument in this interface is too restrictive
> causing failures on modern hardware with lots of GSIs. That extends down to
> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
> as well. Internal Xen structures appear to be fine. Existing users of
> the interface in tree (libxl, ocaml and python bindings) are already using
> int for pirq representation that should be wide enough.
> 
> Domctl interface version is needed to be bumped with this change but that
> was already done by 918b8842a8 ("arm64: Change type of hsr, cpsr, spsr_el1
> to uint64_t") in this release cycle.

Let's hope it's not going to get reverted for having broken the tools
build in multiple ways.

> --- a/tools/include/xenctrl.h
> +++ b/tools/include/xenctrl.h
> @@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface *xch,
>  
>  int xc_domain_irq_permission(xc_interface *xch,
>                               uint32_t domid,
> -                             uint8_t pirq,
> +                             uint32_t pirq,
>                               uint8_t allow_access);

Take the opportunity and also change "allow_access" to bool? Or is
use of bool prohibited in external interfaces?

> --- a/xen/include/public/domctl.h
> +++ b/xen/include/public/domctl.h
> @@ -441,7 +441,7 @@ struct xen_domctl_setdebugging {
>  
>  /* XEN_DOMCTL_irq_permission */
>  struct xen_domctl_irq_permission {
> -    uint8_t pirq;
> +    uint32_t pirq;
>      uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
>  };

Please can you make the now added padding explicit, like we strive
to do with any new additions / extensions? With at least this aspect
taken care of
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:49:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:49:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152002.280859 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12J9-0004FC-RA; Wed, 07 Jul 2021 07:49:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152002.280859; Wed, 07 Jul 2021 07:49:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12J9-0004F5-OB; Wed, 07 Jul 2021 07:49:23 +0000
Received: by outflank-mailman (input) for mailman id 152002;
 Wed, 07 Jul 2021 07:49:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UvpK=L7=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m12J7-0004Ew-UE
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:49:21 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id d6d7f02e-def7-11eb-84dc-12813bfff9fa;
 Wed, 07 Jul 2021 07:49:20 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 82563ED1;
 Wed,  7 Jul 2021 00:49:20 -0700 (PDT)
Received: from [10.57.0.191] (unknown [10.57.0.191])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1E8E33F694;
 Wed,  7 Jul 2021 00:49:18 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d6d7f02e-def7-11eb-84dc-12813bfff9fa
Subject: Re: [PATCH v2] tools: Fix CPSR/SPSR print size
To: Bertrand Marquis <bertrand.marquis@arm.com>,
 xen-devel@lists.xenproject.org
Cc: jgrall@amazon.com, olaf@aepfle.de, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>,
 George Dunlap <george.dunlap@citrix.com>
References: <2e267cdfeb236dc750122df1af7c801a041c8a04.1625585225.git.bertrand.marquis@arm.com>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <607cf4ee-84de-02d3-ae74-3bb469d5f36e@arm.com>
Date: Wed, 7 Jul 2021 09:49:17 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <2e267cdfeb236dc750122df1af7c801a041c8a04.1625585225.git.bertrand.marquis@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

> 918b8842a852 changed CPSR and SPSR to be stored as 64bit values.
> 
> This is fixing the print size in some tools to use 64bit type.
> 
> Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
> uint64_t")
Thanks Bertrand.
> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
Reviewed-by: Michal Orzel <michal.orzel@arm.com>
Tested-by: Michal Orzel <michal.orzel@arm.com>
> ---
> Changes in v2:
> - update commit message
> - add Fixes
> ---



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 07:56:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 07:56:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152008.280869 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12Pf-0005gh-Hn; Wed, 07 Jul 2021 07:56:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152008.280869; Wed, 07 Jul 2021 07:56:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m12Pf-0005ga-Er; Wed, 07 Jul 2021 07:56:07 +0000
Received: by outflank-mailman (input) for mailman id 152008;
 Wed, 07 Jul 2021 07:56:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m12Pe-0005gU-4b
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 07:56:06 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d59f4487-edde-40d6-aaf3-f8b5d91926b1;
 Wed, 07 Jul 2021 07:56:04 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2112.outbound.protection.outlook.com [104.47.18.112])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-13-h7cbHuM2P9-4Q0PxI_xFQA-1; Wed, 07 Jul 2021 09:56:02 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5472.eurprd04.prod.outlook.com (2603:10a6:803:d3::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Wed, 7 Jul
 2021 07:56:00 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 07:56:00 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0012.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::24) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.22 via Frontend Transport; Wed, 7 Jul 2021 07:56:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d59f4487-edde-40d6-aaf3-f8b5d91926b1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625644563;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=kY2T5N0lukkGYt2uXO3QTJ+GAh+pAWfNxRwbGjN9srM=;
	b=Ux6Cqs+krmTaRFHZHtW2uxzqHbTdppGhx5PVMEDaJo6dmR5E2ar2QE14OtbsGiGpqwnNf5
	7Z+XjQzN9rmYRj5E4Spn6U204XqHvEVIidF5Ql8arnI9GlXifkaxsKalyJhK6TgZZst93O
	K7u8/JxjR2f/gHw6oKwOktEECsoMd6o=
X-MC-Unique: h7cbHuM2P9-4Q0PxI_xFQA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JJ8MC6UVGVCZ3ILZrbqo6vfaVeHDlQ1BtfsKP70I7uvE5IBu7vI9BnYlO0QVjVVQRx5eYfz0bn0TgpHXv4woU5XJ3crRbpVsc6LW074JZGLJZyd79GEbLgbHIsg1kiCOk6Weixhb9qdB4ghf66YpOWlmBaMFNILVWQDUUgGSsgVkf8iUSGw/0CdGCHyIZZtNNqT713Iv70I1kz1+Rvz8f9KBKt7tdttzas5yLF/lLhqSA/aeYAQf6PlFEz39xw83ipUBb5i5SxZBdj0JAou2bMm8fyF2xSeONopk/M777OCUrVUgN+RjbzLWYQhNDAkZ2qFZY+nHHB6fKqO2J/QjhA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=FTvlHnnyONX/KH0jqIumGVdWjPlusGv3/HMY3wmdLH4=;
 b=cip45uaRAV03BJXvSRuHqaAknUu4iiWRbQRKuck82rZMJo3M7mR9/6L8Sw+c10mU8+BjpfwKFRTZrPfVkKfZ2UwjU+rW13cw1nJ8OOXad7glqu5Pen5rgEq5DZXO1yZ4xDPkkYGkMkdrPKTbS0SuMUVJFACyKR5dSHvC2hRiwkMwFYVedC0azfURSE8LJfBbAK/K6mODoaziOgfmSivWTXFmJCqE4rMOSwsxlDmb9yO4m10HxMc8woM0j8YbX0PYH50eMOwKIQL8GdOmd6HiLiInst9e9A6NzTbFfat8dCzbhbER5G+yd7aoEVxdn8KDXBSF+q0TxwRz81pjPZWNXw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: A possible pointer_overflow in xen-4.13
To: Rroach <2284696125@qq.com>
References: <tencent_A17CA7BA63F6E47B3FE7B1AC54E55B2A3609@qq.com>
 <fbd1eb89-695c-5c23-da07-ae16fd567010@citrix.com>
 <tencent_40EF4EF7C31E752FD2BCB7D5963C44459006@qq.com>
CC: xen-devel <xen-devel@lists.xenproject.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <912547a3-92a3-8d65-30d5-3ca264ef79f7@suse.com>
Date: Wed, 7 Jul 2021 09:55:59 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <tencent_40EF4EF7C31E752FD2BCB7D5963C44459006@qq.com>
Content-Type: text/plain; charset=gb18030
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: PR2P264CA0012.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::24)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a119c2b6-a10a-4203-1258-08d9411ca945
X-MS-TrafficTypeDiagnostic: VI1PR04MB5472:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5472B95E9DBDF54A975EF16AB31A9@VI1PR04MB5472.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ubQPlQsYazCGBOkJ2HLbGtZXKUCsRX6pyJK37pq38hX0AedGUmNPrgjtwoQ70E4sJ+0d6pj9K3fI59wV426OX1Y7bRW5xKJH338nffiVA2taEjHR7qF9tJochXoUjjWaQZVOHJ4zrNncjP2kR4MBrDK0qPlx4ST4ckkkWigFcV2d1oDIJWY1YaVtOwqdlCziIAj8leswYf9n9EueZ3zavdoOFwZvAinoj2Afk3ks0mUTj5EswQg8HPoPs/Ubh4Ks8BLvjHO+DG9s0ZLR9i1ZjFjjW5NfD+DCAmKtDXtnCP1ZRwNmS750zKwkreRuKlvIrsd0Xtq9/hKG36uc/DVt0bQ+0YXHk4m1pQxa01H23w4WU0PEukFH2dYmw3kUmuItx/xef57FqqjZtSJGjqvHrYcjCubJA/9kbqSg3H0nMQ5pPJopkCDXxb5xkeEW2NcPQyuzxTyVjEA76wnwTEFo/NkYagsHkxfGv0l0NL7o3EeCJUhjTh6y2Ep+ALAsMThLxXqKE4HAS6dddZMIVjuXWT90vXCOvMY/JQu6b2cRkP3d2ehtgGD9XBnL5y3NoDZpcNZ1rMUULidk952J9XGF2GxxKD4TlgfchNA+BWoRLXIXVb6EFyza7EAnf4om1hGWCrjLcuUbfhu8Qjbhgv8Y3Hii//lkes+WBIWZWZqXR4wJzg7rQZYA45pu+NtIXdXfn5ZdC0g8kNzuuS6Wc7SNzBHyPoxj3rE8DjKBb3t94k6+/n3QEG53vk7tJ4ohaFGN
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(39860400002)(376002)(366004)(396003)(478600001)(956004)(83380400001)(2906002)(2616005)(8936002)(16576012)(8676002)(4326008)(316002)(6486002)(6916009)(54906003)(66946007)(5660300002)(26005)(66476007)(86362001)(53546011)(31696002)(186003)(38100700002)(66556008)(36756003)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?g3UOi5FeosXoas0xkN32z6VRJ8YeRLkhapTt+Dr+pnDuJAHBTTofefEClCBx?=
 =?us-ascii?Q?5kRv6OmA6orRMQJ/etUoyS0Q97zbY8pSNHtcCkWY2bgmBSAeFKFjqr07pvYS?=
 =?us-ascii?Q?bE37uWvCK5H0hLlFpwu7L37EfeFHOxkC/kuwMlcQJYYEcgKTxcoDuZYslVg5?=
 =?us-ascii?Q?NO/NWj+08UeLlJgu+Rq87sWKhZUJRqsQVi6oHDlAYz1ziuYYWxgFgeA86v7q?=
 =?us-ascii?Q?QCoupzz6uaV60IXyUfy6qVcXk60LN3ZlCITrj4f64+cSY9Kk0Wcj7HXiqZyP?=
 =?us-ascii?Q?EzJI0UEz4C70z7xBHHoaHv6+b7Y03BtFkksn4qYgCBPiogpBsuYywQuFBbPj?=
 =?us-ascii?Q?r+DzW5mwB7/Ql8OuuUqWM/J2/+vD1/kYdh6DkQL/9P7r6wvVaI9F1cdZTDM7?=
 =?us-ascii?Q?s0+J1bWbbboQ2oZu2twH2Ulq9USwhp+MtOsN2f6zkz9BUGaNt49av9mtUZEq?=
 =?us-ascii?Q?/MKm6cj9g4jwjbLfaa4znK79my2x67h1QvsQQxIJcVZyo7LCsVMvNDoIYj83?=
 =?us-ascii?Q?AOba51jXeEarBta3ixcajWlijmLnCO/Q2TgZc0BQIzQ/t2wPy/FsMKTn2gmZ?=
 =?us-ascii?Q?4S+WXS60EEqLc0PNHx0+timf/oDLKSIuA1sfKo7cTUdPwEkslmKJxuxNjIpg?=
 =?us-ascii?Q?mS2rXlN/WVqPPKtw66vDaedavLAwZ0pUD69YWXKIhUE/ERnV96u2oEev8iAy?=
 =?us-ascii?Q?oD6B4pRKeallzR2I0QHiXYlOJuAeCQppZQiii/wyVsNnrr3t1L0g9Ub7x/ZJ?=
 =?us-ascii?Q?OxG0Pj1P/Rl+/snbPOxTNjHMooxhijmtEejs3QPFwvNhRNUVNaMMscfVJb98?=
 =?us-ascii?Q?56kzmIhbZ6iE3gGJvSOR4kRLwCqSdhgNX0MmtCRLpelfFecOqbEYh6Pl27H2?=
 =?us-ascii?Q?uTQyGsL/3PuSIC44ZkjGsecUIMsEdU/9sc95ydPhT1BlIkvVLdQpqAG029UR?=
 =?us-ascii?Q?oJ6f5mm7BGAacSkEcGwDhTDHTP8aZSQbBeeUg9DnDLDislFsUw7JIyP4i4th?=
 =?us-ascii?Q?mUTcnSreGFfEipJc4sG78ZK7dzf2CV6Mch/rSs6E6O8OUUyzrRAr/jB9eb6S?=
 =?us-ascii?Q?0e+uJRXhVgUo+kQzzeAnv0jamt/ZTaWXaGjYi2DYJl1XvLfZfVNjceBHdCR8?=
 =?us-ascii?Q?5qAVKNDQ74RNyUrXKnHYICWPGSYXGHBCm0q6TuAfm0zPxjZSlgShJ2N3BwW5?=
 =?us-ascii?Q?ZO9NslDikLzN4Vc96/KFaYuIDIMdyMOMJ7Jf/VimP6lTwWcrqg2eWVXd0FW9?=
 =?us-ascii?Q?mCyE1wV9DTA0nzLZbYGnpXjCv024nZbjAOxh8M9VwfmqQxpHRFe5v1h4WYrM?=
 =?us-ascii?Q?pfrbxH4hJLq1yZP8AJoZZmbp?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a119c2b6-a10a-4203-1258-08d9411ca945
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 07:56:00.5950
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RT9kF9gPH/kBvX1ATfzhX95Fjq/Sg76HREmsVL++Pvai3sTy0wMwx6dQ1z+0lHicLMhrd4i7xiZr/F0uQYLIZw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5472

On 07.07.2021 04:32, Rroach wrote:
> After patching it, this works fine and UBSAN dose not have any error repo=
rt about it.

Which I'm surprised about, because in Andrew's suggestion (sorry,
need to reproduce it manually, because quoting your HTML mail is
rendering unreadable results, as you can see below if you view it
as plain text)

--- a/xen/arch/x86/pv/emul-priv-op.c
+++ b/xen/arch/x86/pv/emul-priv-op.c
@@ -98,7 +98,7 @@ static io_emul_stub_t *io_emul_stub_setup(struct priv_op_=
ctxt *ctxt, u8 opcode,
 #define APPEND_BUFF(b) ({ memcpy(p, b, sizeof(b)); p +=3D sizeof(b); })
 #define APPEND_CALL(f)                                                  \
    ({                                                                 \
-        long disp =3D (long)(f) - (stub_va + p - ctxt->io_emul_stub + 5); =
\
+        long disp =3D (long)(f) - (long)(stub_va + p - ctxt->io_emul_stub =
+ 5); \

there is still a possible pointer overflow afaict, unlike in the
suggestion I had given:

        long disp =3D (long)(f) - (stub_va + (p - ctxt->io_emul_stub) + 5);=
 \

This because of expression evaluation order, which I understand would
match the fully parenthesized

        long disp =3D (long)(f) - (long)(((stub_va + p) - ctxt->io_emul_stu=
b) + 5); \

where both stub_va + p and the subsequent subtraction of ctxt->io_emul_stub
are liable to overflow. Whereas p - ctxt->io_emul_stub won't overflow, as
p starts out from ctxt->io_emul_stub and then gets incremented by a few byt=
es.

Would you mind giving the alternative suggestion a try as well?

Jan

> ------------------&nbsp;Original&nbsp;------------------
> From: &nbsp;"Andrew Cooper";<andrew.cooper3@citrix.com&gt;;
> Send time:&nbsp;Saturday, Jun 26, 2021 9:50 PM
> To:&nbsp;"Rroach"<2284696125@qq.com&gt;; "xen-devel"<xen-devel@lists.xenp=
roject.org&gt;;=20
>=20
> Subject: &nbsp;Re: A possible pointer_overflow in xen-4.13
>=20
>=20
>=20
>            On 26/06/2021 14:29, Rroach wrote:
>     =20
>                               Hi, I compile Xen-4.13 with CONFIG_UBSAN, a=
nd try test             it. However, during testing, xl dmesg got the outpu=
t as             shown below.
>           =20
>           =20
>            It seems that there is a potential pointer overflow           =
  within arch/x86/pv/emul-priv-op.c:131 where xen try to             execut=
e instruction ''' APPEND_CALL(save_guest_gprs)             '''=A3=ACwhere A=
PPEND_CALL try to add an offset on *p without             proper checking.
>           =20
>           =20
>            I compiled xen-4.13 by clang-9, with following             ins=
tructions: ''' export CONFIG_UBSAN=3Dy ''' &amp;&amp; '''             make =
clang=3Dy debug=3Dy ''' . Do you have any idea what going             on he=
re?
>         =20
>          =20
>      You say Xen 4.13, but APPEND_CALL() doesn't exist       there.&nbsp;=
 I added it in 4.14 when I rewrote this mess to be       compatible with CE=
T by not using a ROP gadget.&nbsp; Your backtrace       says 4.15 unstable =
which means its an old staging build (not that       that is going to have =
any effect on this specific issue).
>       =20
>        The fact that it continued executing correctly means the       cal=
culation did the right thing, whether or not UBSAN was happy.        The di=
splacement will end up negative as the stub we're writing is       numerica=
lly higher than {load,save}_guest_gprs(), which I guess       means that f =
- stub_va will underflow.
>       =20
>        I'm very confused as to why UBSAN reports against       save_guest=
_gprs() considering that load_guest_gprs() when through       the exact sam=
e logic a few instructions earlier.
>       =20
>        Either way, does this make the problem go away?
>       =20
>        diff --git a/xen/arch/x86/pv/emul-priv-op.c       b/xen/arch/x86/p=
v/emul-priv-op.c
>        index 11467a1e3a..be41bced76 100644
>        --- a/xen/arch/x86/pv/emul-priv-op.c
>        +++ b/xen/arch/x86/pv/emul-priv-op.c
>        @@ -98,7 +98,7 @@ static io_emul_stub_t *io_emul_stub_setup(struct=
       priv_op_ctxt *ctxt, u8 opcode,
>        &nbsp;#define APPEND_BUFF(b) ({ memcpy(p, b, sizeof(b)); p +=3D   =
    sizeof(b); })
>        &nbsp;#define       APPEND_CALL(f)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \
>        &nbsp;&nbsp;&nbsp;        ({&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        \
>        -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; long disp =3D (long)(f) - (=
stub_va + p -       ctxt-&gt;io_emul_stub + 5); \
>        +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; long disp =3D (long)(f) - (=
long)(stub_va + p -       ctxt-&gt;io_emul_stub + 5); \
>        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; BUG_ON((int32_t)disp !=
=3D       disp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \
>        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; *p++ =3D       0xe8;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; =
\
>        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; *(int32_t *)p =3D disp=
; p +=3D       4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \
>       =20
>        ~Andrew
>=20



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 08:46:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 08:46:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152021.280893 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13CE-0002ew-OV; Wed, 07 Jul 2021 08:46:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152021.280893; Wed, 07 Jul 2021 08:46:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13CE-0002ep-LP; Wed, 07 Jul 2021 08:46:18 +0000
Received: by outflank-mailman (input) for mailman id 152021;
 Wed, 07 Jul 2021 08:46:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13CD-0002ef-ML; Wed, 07 Jul 2021 08:46:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13CD-0007uD-E2; Wed, 07 Jul 2021 08:46:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13CD-0002zX-7p; Wed, 07 Jul 2021 08:46:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m13CD-0002TC-7J; Wed, 07 Jul 2021 08:46:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3FbQBVgyoyaIYDCHRXYa0/467YGjWdEyuH6uzAZMizQ=; b=ev+DDVFK81FcPQmV33/prG46UM
	lTsCRjofwEZruMA7Cx/tWSWX9IIVwfsmFKHFslwlP01mV1ycXi0MMmhQ1rD6uSHUHMoa2oEzEDKvO
	mY0CeasWpVbmqIKdNvSBEJT8AUAYs4o9vLrBb4sWLzSAtCBZVkrff+ToJmhDhzyx8R84=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163385-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163385: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 08:46:17 +0000

flight 163385 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163385/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    0 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days   13 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 08:49:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 08:49:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152027.280907 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13Er-0003J5-99; Wed, 07 Jul 2021 08:49:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152027.280907; Wed, 07 Jul 2021 08:49:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13Er-0003Iy-5F; Wed, 07 Jul 2021 08:49:01 +0000
Received: by outflank-mailman (input) for mailman id 152027;
 Wed, 07 Jul 2021 08:49:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Y63D=L7=citrix.com=christian.lindig@srs-us1.protection.inumbo.net>)
 id 1m13Ep-0003Im-QP
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 08:48:59 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 617f8c8a-15cd-4b79-927a-dfc71ee37b0e;
 Wed, 07 Jul 2021 08:48:58 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 617f8c8a-15cd-4b79-927a-dfc71ee37b0e
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625647738;
  h=from:to:cc:subject:date:message-id:references:
   in-reply-to:mime-version;
  bh=L82sEQxmveU9lkhTLZhH/G/fIyZa1Y2FySsoZsTWR9c=;
  b=B0rDbSMEVXaqYt37ndyzTCi7Z5dzBoPoUsZp3lD6YZ0VbswhB/MMgmL9
   LQ7N9nwv+c3bxCNOs8GJ08WCLLdz6IkyeLihWdTAQOQKgEKnIEq8YUgFr
   LDvj0mNs9460qv+x6htCwt2sf+gwAZy6JAEHdsgdHg9wa2IjkFB8xvNHj
   Q=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: tEB3pzazbTMA9XG0yKEZjoTQp1ptDgoTYBJoZFhdYDfJOFwgTQCUCQnSEIkqUV7D2z7qO7v14r
 jGSP+djY4FNoh7VkfMHMzmVjliRFrbHFDzoeONkCK6JqZZ5EGUh9NYh1f0syc+2giS8X10jVoC
 fDLVTmZq5awroTiihdPj4JVUQrjRANGyk+tUNuoqe7IH7kAHgwH3C8gIOTgabmPNUq8yl2oKQr
 VRx3MO+4r0lJtM9WMGCYUIy3Tmsg/PRDYxp8nFjVjRKIaU4uO5gACxmyscyqwPTNkHDnIw+Twf
 +TQ=
X-SBRS: 5.1
X-MesageID: 47424540
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:crRD3qHKcFSXJ3VdpLqFY5HXdLJyesId70hD6qkvc3Nom52j+/
 xGws536fatskdtZJkh8erwXZVoMkmsiaKdgLNhcotKOTOJhILGFvAa0WKP+UyCJ8S6zJ8m6U
 4CSdkxNDSTNykDsS+S2mDReLxAoOVvsprY/ts2p00dFT2CAJsQizuRfzzrdHGeMzM2YqbReq
 DshPZvln6FQzA6f867Dn4KU6zovNvQjq/rZhYAGloO9BSOpSnA0s+6LzGomjMlFx9fy7Yr9m
 bI1ybj4L+4jv29whjAk0fO8pVtnsf7wNcrPr3NtiFVEESutu+bXvUlZ1SwhkFwnAhp0idsrD
 D4mWZjAy200QKWQoj6m2q15+Cq6kdQ15ar8y7nvZKkm72jeNtyMbswuatJNhTe8EYup9d6ze
 ZC2H+YrYNeCVfakD36/MWgbWAhqqIlyUBS4NL7okYvGbf2UoUh5rD3PXklZ6soDWb/8sQqAe
 NuBMbT6LJfdk6bdWnQui1qzMa3Vno+Ex+aSgxa0/blnwR+jTR81Q8V1cYflnAP+NY0TIRF/f
 3NNuBtmKtVRsEbYKphDKMKQNexCGbKXRXQWVjibGgP1Jt3ck4ljqSHlIndyNvaCqDg/aFC7q
 gpCmkoxlLaU3iefPGz4A==
X-IronPort-AV: E=Sophos;i="5.83,331,1616472000"; 
   d="scan'208,217";a="47424540"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=RjqNt6g0W8oKSRDJptCdcFua7FS7zGT8xm5V/X6h8TX8pzwDtZl+jYPZghTXc43K2Mv/cho7tXVWrYV/cvGEetfWIh3uiKmiDRmbk95Do4P5K/xLy3xKaNcESQBgJ/Ndbc/OjWsqsrLBaeKIQk/4u6e2Ej6qKww3Fv1tX96q6Zs02BbsgOBYxmN8NqqQgIGdwp/DhXOH67DvBZEEFqmAdmqkd9fq8tvNAEVazH2PiImekf1YASNTWyL7cGqYnLP3BzxzwloOKqH1prG76lraw4+rZPURjglDcB1Yp2TFJkhJXfA7y854C4QiGUiZcfwfgPvps6jPj2Z1/Z07UjhmoA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dxyu8WD+lPu/fW4qAOY7KHzCx9GOPJkrLIVAG5vdQZw=;
 b=XVTwoywrR1Bo5/AJcYtESu5pgqWTUBHYjZ+MeJXbyGI6PrvXm9qwB8Pd7hGluN6tqJO+RQKLu8LHNNwkyTj4vFJlNaqXyp/xwzGui1NMJuJ2YSGbcWoCV+rXyouxnvv/oJa3Ru5xPb+GiRATZk6oUKYUKyhqP5mjyZClB7d2c1yQ+7LQAEDNvhHiCCTj/MJJrdF4UwojGs1GvBKv14naeFk0PmQ5ckmzRlRCpI3k8rjtYMtNJflX/WYjYuzER+n7MprYrPXQG8WiLPazTkRkjwtVEfDXCSp4K/3HuaR793w8rszehxS8VCOlh2i4VFxKL0s9korAeqjpnnjbm4qVJQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dxyu8WD+lPu/fW4qAOY7KHzCx9GOPJkrLIVAG5vdQZw=;
 b=Zj6JI6b4yqSdJEqO6rwxykWAM2ES73eeq2cxogmu9jE+nj0pKSBAkr3mzglhd6tA6KrheF5iCW2FzrSJV9TRhtTCJg99BnembRsQ+wxGmozNyEr6tWTV1GZ6NlaqrsfoPSaCxPBGeSRhTyoAQ33E5kfP0Rfe85Y/i1gAI12UDzw=
From: Christian Lindig <christian.lindig@citrix.com>
To: Igor Druzhinin <igor.druzhinin@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Ian
 Jackson" <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Andrew Cooper
	<Andrew.Cooper3@citrix.com>, George Dunlap <George.Dunlap@citrix.com>, "Jan
 Beulich" <jbeulich@suse.com>, "julien@xen.org" <julien@xen.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>, "jgross@suse.com"
	<jgross@suse.com>, "dave@recoil.org" <dave@recoil.org>
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
Thread-Topic: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
Thread-Index: AQHXcsvXTynNtpWrykaXALTlaqCPOqs3NCuA
Date: Wed, 7 Jul 2021 08:48:40 +0000
Message-ID: <640E969C-62AA-44C8-9CA6-F393E7038E0E@citrix.com>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
In-Reply-To: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3608.120.23.2.4)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 5a335d0f-f0a4-4b6b-ee9a-08d9412404ca
x-ms-traffictypediagnostic: MWHPR03MB2878:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <MWHPR03MB2878345A3F9934716DCFED42F61A9@MWHPR03MB2878.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:8273;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: d+S8ZizkzFNw4gYPpa1xP62gNFR8+ERZ/SGnPDAt9ndAkjukeQKBw9YbczpzYzjrUEkQf0iTOv9+SOwpap3TssXtwpOhABjI5O2p126OM6DfRU9678cYodfekI9tRCRTUiDDsnF11Wd3UX3bmVQ7DMTz5dqEgxs940EWlPwZ7zBLiCdmpWr48JiZgp9gDz8/4z3rT93y2/ZJ/cV0dC4vO+VDDx5VXQ4kDUG19qRFhkVgctgGyVz4cq66u1orFPIXS/MqvYlpvkQjJXoqi+0PymZ4Dnk8+UxMQ+xOv3f3Rz0Bl586bU2B640AxHoqqgSIOBVGsKtFIoESO/AyOBYk7bmUZcV3/f0ScU78gbpTYWQdiUobDRgRCKyJfeJAVUgR3YqfricIRBuIueJ2MHxI6PZkUb0KGqWWDdz4E2zN1bIi7szoYMmobAkLzrYAzoT3ptB5xOHbmu8m+/jcGbMLLntAisn8yiOXm5t0Eugrzv0xEs5YpsVu3qiGgvCazKwKw7WtwoQn/KPy4RWr6AJogOTArI+nIQZWb3/oO79W39E4FvBP9G0vWnuUUPFd/1yz0G4OaH1ty/pQmUWG4BdoleXqXWYmED6/oCCcdjGw0qjb7wtW3iP8EJ/QR/VCjEe3kHVHh/OFLVWnKnoUDvd0dvKjqkTKlssZIJaNbtOh1RQVlPIBkC2RwSCTZr9+3TGoHhXmW7r+dLAbKtvqDvkMrg==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR03MB6380.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(396003)(136003)(376002)(39860400002)(38100700002)(83380400001)(186003)(86362001)(71200400001)(36756003)(122000001)(33656002)(5660300002)(6636002)(37006003)(316002)(6862004)(2906002)(8936002)(4326008)(4744005)(6512007)(44832011)(8676002)(26005)(6506007)(91956017)(53546011)(76116006)(478600001)(66446008)(64756008)(66556008)(66476007)(66946007)(6486002)(2616005)(54906003)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?0zRJTSID3ctwUG1qb5rg2MaMngeE12lq3n5xPfaqZPR2jCO9O2mLNxQQ6SSx?=
 =?us-ascii?Q?BcLGTBnGrfZfDdE93v6o5wuy7a5lUtT1b4Ou+FYXofl/2Iy0V/YO9Yqo17n6?=
 =?us-ascii?Q?YFET7ZbDrvtRaUloB4VW/kPKvK8MXnLcQRQlPdMbtTcuJc1jXPXkcPQUo4t/?=
 =?us-ascii?Q?yAY5Dto/pss8b2PxkX9/MDI4148uNsf0WVsKfqJgGVlBA11LwCTZGZJn9KDq?=
 =?us-ascii?Q?gEs3FLavMo4lOoKQBDp4eEmoT5mLlbvYRLa9J1rmBzoPt0AY5WeS5n1DJKmJ?=
 =?us-ascii?Q?EBjYJt2F6dtTKriITpZaid9zlQyni/FQtfWUNnhCActRo/i3xFIbWnYmdY+J?=
 =?us-ascii?Q?5gIjSEHB9/PZuL/yaHZ1Gevq2LVlHe8Wd0dWF51VnTcqRSIJnXgHNPylSKGz?=
 =?us-ascii?Q?UNyGyK428x0km9hh/Vkp+3l5Jln8t4YvMPHKUg0L0svTh58icYfpqqcr1tTX?=
 =?us-ascii?Q?iTZW4nke/ZCUi+BBkiZWmmvXeDLnxlhNZ7ReD8ysbu97KSSsozFGelhfYDSk?=
 =?us-ascii?Q?6VvULasat0GG+oAdFr0DobSv8phY8Ma0vl1MwuKr8iuGLOgGpoX1pLLhgT/C?=
 =?us-ascii?Q?YNsZb/VdA8gX3nfB7fMEaj5YsuaPEL57skMN03nvZmT0xdGW5GT12uCX+uMx?=
 =?us-ascii?Q?nDXU6NiYldoD1n8QXidZqCRAV6rkYfkib2l2uM5N4a3MtHiXkBStuSNQi6JR?=
 =?us-ascii?Q?4d5VkbPaFcsUok4wqV9r5acVOGY+Uwe9p6ndA+WBYF1j8QQI5NSLNmLGiyqh?=
 =?us-ascii?Q?syZExSYC3eceBPqunm5nZyco1c5K4+ovUBtPEFSIVgNeweS2JY+8jliOx3Kv?=
 =?us-ascii?Q?8ZxyzJS8ipA3G6tOyc4vhaiMcKwPLFzJo1MGyIjfgkXxnvTowBllvIkdHxa7?=
 =?us-ascii?Q?5KSzqp06zp/AHSffhtZo2sM+JS5Idm9A2iig00FVv1iXSNl3nVw4ynYtmuJ/?=
 =?us-ascii?Q?nlXBgltYicLN3BN9DZKl6xewQ41vqet4p0UxvEYXiBnX5XAbSfuJmAe+qbLN?=
 =?us-ascii?Q?o11ukdRl6hQhPh4j3FqDw0RrRdUR9hx0bfKVHqFIYhfHNfWrIhIjBq61Rxz1?=
 =?us-ascii?Q?rDOAPHhokmbRIARIisyStEDZrz/g70DZlGiGvPSwji/r8BCLkJyrSj+c07RA?=
 =?us-ascii?Q?q7P5OG4onTSwhzJIRGUn5WHuLUcWY14v0++/Nf4LYH9UJZkylTIKhnav6vLZ?=
 =?us-ascii?Q?9IfpjjeSH1AH5ekNpasdXJaotfz9WaOEGPTTM1nSh6cWG2z7bCmUqa7UIvA+?=
 =?us-ascii?Q?OYe8LzXT/wX9OPjMPVr9KvCWQ57COD67DCtKMuWKRmMZ5MR/ef+06FaDbDoM?=
 =?us-ascii?Q?twdRX1BbmsJX9e6aGzR3vavJ?=
Content-Type: multipart/alternative;
	boundary="_000_640E969C62AA44C89CA6F393E7038E0Ecitrixcom_"
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MW4PR03MB6380.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5a335d0f-f0a4-4b6b-ee9a-08d9412404ca
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2021 08:48:40.3945
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: D9nx21JS42UjMcUSE+YxD5rvNXkqfYlBSpVVgYKTFWDccb0iydEeimeb/RHfjgSkOjej0nXygff+51kJ3l9y99+++Kgxxedj43O/006F+cM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR03MB2878
X-OriginatorOrg: citrix.com

--_000_640E969C62AA44C89CA6F393E7038E0Ecitrixcom_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable



On 7 Jul 2021, at 02:02, Igor Druzhinin <igor.druzhinin@citrix.com<mailto:i=
gor.druzhinin@citrix.com>> wrote:

Current unit8_t for pirq argument in this interface is too restrictive
causing failures on modern hardware with lots of GSIs. That extends down to
XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
as well. Internal Xen structures appear to be fine. Existing users of
the interface in tree (libxl, ocaml and python bindings) are already using
int for pirq representation that should be wide enough.

Domctl interface version is needed to be bumped with this change but that
was already done by 918b8842a8 ("arm64: Change type of hsr, cpsr, spsr_el1
to uint64_t") in this release cycle.

Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com<mailto:igor.druzhi=
nin@citrix.com>>
---
tools/include/xenctrl.h             | 2 +-
tools/libs/ctrl/xc_domain.c         | 2 +-
tools/ocaml/libs/xc/xenctrl_stubs.c | 2 +-
xen/include/public/domctl.h         | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)

Acked-by: Christian Lindig <christian.lindig@citrix.com<mailto:christian.li=
ndig@citrix.com>>


--_000_640E969C62AA44C89CA6F393E7038E0Ecitrixcom_
Content-Type: text/html; charset="us-ascii"
Content-ID: <6A686C45CEB90A43A17A8B19DCF015C7@namprd03.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; line-break:=
 after-white-space;" class=3D"">
<br class=3D"">
<div><br class=3D"">
<blockquote type=3D"cite" class=3D"">
<div class=3D"">On 7 Jul 2021, at 02:02, Igor Druzhinin &lt;<a href=3D"mail=
to:igor.druzhinin@citrix.com" class=3D"">igor.druzhinin@citrix.com</a>&gt; =
wrote:</div>
<br class=3D"Apple-interchange-newline">
<div class=3D"">
<div class=3D"">Current unit8_t for pirq argument in this interface is too =
restrictive<br class=3D"">
causing failures on modern hardware with lots of GSIs. That extends down to=
<br class=3D"">
XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up<br cl=
ass=3D"">
as well. Internal Xen structures appear to be fine. Existing users of<br cl=
ass=3D"">
the interface in tree (libxl, ocaml and python bindings) are already using<=
br class=3D"">
int for pirq representation that should be wide enough.<br class=3D"">
<br class=3D"">
Domctl interface version is needed to be bumped with this change but that<b=
r class=3D"">
was already done by 918b8842a8 (&quot;arm64: Change type of hsr, cpsr, spsr=
_el1<br class=3D"">
to uint64_t&quot;) in this release cycle.<br class=3D"">
<br class=3D"">
Signed-off-by: Igor Druzhinin &lt;<a href=3D"mailto:igor.druzhinin@citrix.c=
om" class=3D"">igor.druzhinin@citrix.com</a>&gt;<br class=3D"">
---<br class=3D"">
tools/include/xenctrl.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;| 2 +-<br class=3D"">
tools/libs/ctrl/xc_domain.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;| 2 +-<br class=3D"">
tools/ocaml/libs/xc/xenctrl_stubs.c | 2 +-<br class=3D"">
xen/include/public/domctl.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;| 2 +-<br class=3D"">
4 files changed, 4 insertions(+), 4 deletions(-)<br class=3D"">
</div>
</div>
</blockquote>
</div>
<div style=3D"margin: 0px; font-stretch: normal; font-size: 14px; line-heig=
ht: normal; font-family: Menlo;" class=3D"">
<span style=3D"font-variant-ligatures: no-common-ligatures" class=3D""><br =
class=3D"">
</span></div>
<div style=3D"margin: 0px; font-stretch: normal; font-size: 14px; line-heig=
ht: normal; font-family: Menlo;" class=3D"">
<span style=3D"font-variant-ligatures: no-common-ligatures" class=3D"">Acke=
d-by: Christian Lindig &lt;<a href=3D"mailto:christian.lindig@citrix.com" c=
lass=3D"">christian.lindig@citrix.com</a>&gt;</span></div>
<div class=3D""><span style=3D"font-variant-ligatures: no-common-ligatures"=
 class=3D""><br class=3D"">
</span></div>
</body>
</html>

--_000_640E969C62AA44C89CA6F393E7038E0Ecitrixcom_--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 09:02:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 09:02:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152066.280938 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13S0-0005xb-TP; Wed, 07 Jul 2021 09:02:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152066.280938; Wed, 07 Jul 2021 09:02:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13S0-0005xU-Pw; Wed, 07 Jul 2021 09:02:36 +0000
Received: by outflank-mailman (input) for mailman id 152066;
 Wed, 07 Jul 2021 09:02:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13Rz-0005xK-VI; Wed, 07 Jul 2021 09:02:35 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13Rz-0008DH-Pc; Wed, 07 Jul 2021 09:02:35 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13Rz-0003S6-Fk; Wed, 07 Jul 2021 09:02:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m13Rz-000696-FL; Wed, 07 Jul 2021 09:02:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=6lO6lkzngbI0qwWsGlZwCDH+FD6M9DjhQpwQRt3udmo=; b=Xw00AzfkWWSApdyjtHtDXwr/3x
	SjveONWGihQlKc7ilTM0yGowA8gRPuH0qe4R4H3dPrrtpnDd2XUgX5ip5/wFY5rFfvUe2zpNnEIQ2
	beu4R8PwpVPHVtOm69sa+aEIaLXXh5XGzWj0CJGU6/fizO0u/ZP8xu/NjrIXOq/t97qI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163382-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163382: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 09:02:35 +0000

flight 163382 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163382/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              45f94690d2a89fc03c1a4eaea5c1ee398447a4b8
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  362 days
Failing since        151818  2020-07-11 04:18:52 Z  361 days  353 attempts
Testing same since   163236  2021-07-03 04:20:01 Z    4 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 63952 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 09:08:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 09:08:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152073.280952 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13XP-0006dq-IS; Wed, 07 Jul 2021 09:08:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152073.280952; Wed, 07 Jul 2021 09:08:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13XP-0006dj-Et; Wed, 07 Jul 2021 09:08:11 +0000
Received: by outflank-mailman (input) for mailman id 152073;
 Wed, 07 Jul 2021 09:08:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13XO-0006dZ-Gs; Wed, 07 Jul 2021 09:08:10 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13XO-0008KN-9S; Wed, 07 Jul 2021 09:08:10 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m13XN-0003iJ-GQ; Wed, 07 Jul 2021 09:08:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m13XN-0005qr-Fw; Wed, 07 Jul 2021 09:08:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=lXnYn0EJHZ2tfwzZRZXGdo4OY4yJlUNX+XOvz2DDLQs=; b=mgoDrvUCsgBC2AhxCCyHjLJFYH
	fhSECDTprbLVSfANJXo4XoT0kMtYUMORJWlSWkeDBzUCleYMC8ikWnV64qUMTS4TOU/J6vnMAJ902
	WNP9Ty653PWuR+xr68Iba0FLrukp3PP7qt69o+QJBRPuBIo93DJ8fj0NrZVeQcMaSYgQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163369-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163369: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9aef0954195cc592e86846dbbe7f3c2c5603690a
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 09:08:09 +0000

flight 163369 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163369/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163327

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9aef0954195cc592e86846dbbe7f3c2c5603690a
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    1 days
Testing same since   163327  2021-07-06 12:39:04 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  David Edmondson <david.edmondson@oracle.com>
  John Arbuckle <programmingkidx@gmail.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Thomas Huth <thuth@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 553 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 09:10:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 09:10:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152080.280966 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13a0-00082a-6R; Wed, 07 Jul 2021 09:10:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152080.280966; Wed, 07 Jul 2021 09:10:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13a0-00082T-32; Wed, 07 Jul 2021 09:10:52 +0000
Received: by outflank-mailman (input) for mailman id 152080;
 Wed, 07 Jul 2021 09:10:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Dzvn=L7=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m13Zy-00082N-SF
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 09:10:50 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 14fd9ce2-89e7-4425-b12e-ed4843cd12f7;
 Wed, 07 Jul 2021 09:10:49 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 73D1C1FD5C;
 Wed,  7 Jul 2021 09:10:48 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 3CDA613966;
 Wed,  7 Jul 2021 09:10:48 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 6ZHeDJhv5WDWOAAAGKfGzw
 (envelope-from <jgross@suse.com>); Wed, 07 Jul 2021 09:10:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 14fd9ce2-89e7-4425-b12e-ed4843cd12f7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625649048; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=jBrTdZh0fhHdoZBmt7kZCO7hzkn6x3INTyY3C5pkFwM=;
	b=S2JKLryRPmjUmQr9qsJJMP4SAYWAeQdDK57J6LPLxK5z9x6x3XQrAFHaITXI3dWZAWazwE
	L7LZHl1Ecfl22mrcaxv93w06LSjduKdNmBf0P7ENfxbe5yed6jbPVBX7fEFsEiXK2/a3jd
	sC/5d4yUaeG8VZD/deLqErOUYhHNgho=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jirislaby@kernel.org>
Subject: [PATCH v2] xen/hvc: replace BUG_ON() with negative return value
Date: Wed,  7 Jul 2021 11:10:45 +0200
Message-Id: <20210707091045.460-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Xen frontends shouldn't BUG() in case of illegal data received from
their backends. So replace the BUG_ON()s when reading illegal data from
the ring page with negative return values.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- drop BUG_ON() (Christophe Leroy, Greg Kroah-Hartmann)
- replace WARN_ONCE() by pr_err_once() (Greg Kroah-Hartmann)
- break out from original series
---
 drivers/tty/hvc/hvc_xen.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 92c9a476defc..8f143c09a169 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -86,7 +86,11 @@ static int __write_console(struct xencons_info *xencons,
 	cons = intf->out_cons;
 	prod = intf->out_prod;
 	mb();			/* update queue values before going on */
-	BUG_ON((prod - cons) > sizeof(intf->out));
+
+	if ((prod - cons) > sizeof(intf->out)) {
+		pr_err_once("xencons: Illegal ring page indices");
+		return -EINVAL;
+	}
 
 	while ((sent < len) && ((prod - cons) < sizeof(intf->out)))
 		intf->out[MASK_XENCONS_IDX(prod++, intf->out)] = data[sent++];
@@ -114,7 +118,10 @@ static int domU_write_console(uint32_t vtermno, const char *data, int len)
 	 */
 	while (len) {
 		int sent = __write_console(cons, data, len);
-		
+
+		if (sent < 0)
+			return sent;
+
 		data += sent;
 		len -= sent;
 
@@ -138,7 +145,11 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)
 	cons = intf->in_cons;
 	prod = intf->in_prod;
 	mb();			/* get pointers before reading ring */
-	BUG_ON((prod - cons) > sizeof(intf->in));
+
+	if ((prod - cons) > sizeof(intf->in)) {
+		pr_err_once("xencons: Illegal ring page indices");
+		return -EINVAL;
+	}
 
 	while (cons != prod && recv < len)
 		buf[recv++] = intf->in[MASK_XENCONS_IDX(cons++, intf->in)];
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 09:20:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 09:20:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152088.280980 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13j3-00013W-4a; Wed, 07 Jul 2021 09:20:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152088.280980; Wed, 07 Jul 2021 09:20:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m13j3-00013P-14; Wed, 07 Jul 2021 09:20:13 +0000
Received: by outflank-mailman (input) for mailman id 152088;
 Wed, 07 Jul 2021 09:20:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tWQe=L7=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m13j1-00013J-2S
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 09:20:11 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b7519f33-4e13-451a-bf73-816322d3e93f;
 Wed, 07 Jul 2021 09:20:09 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b7519f33-4e13-451a-bf73-816322d3e93f
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625649609;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=hbhz0vWcDwiMVjASxJ4gmFHOVfH4B8EUakOfo0REJFE=;
  b=YYiEzXcQklIUUUE3Y+OcrIrqvT4k65jiqdIRyQYkBx2TecgyCDO/fkDt
   pdiWTxezcGgzdbFHM32Fi4gymp0UPIaEG0zWrXfofb5gZY7/aa/B/0ma9
   YxoQFEklymF1sFDdkKeDmvrh4y/xysDIZ+8RZliTZQsQgB/9mMNkXVS6T
   M=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: cGpv1Ff2vhUNJRdV/njLrvXtShothn+oHQheEfrvSN9ieCrmgPUJFfbUEr5kIYLoVx2PBdwyiH
 1jtx4lJeha0n+nw180rS2ukw2LWYuL0wPkiYqSzL6HEBNg9JJYV0b4+SnUo30VYSBRD6MRNp13
 5atfgZErQxMZOzlgvd9E8cznn+srFC7DaTJJFirlV72lAlPzHjBBcgwjdKvlzIq9d/+PMM3rWI
 N/qhnyh7/f8AhcyfOISQohhHuhOnt3FTp4NszzJWa9C7wQ0sHhX0/IONwMugGmi4f+3syW1akp
 8GY=
X-SBRS: 5.1
X-MesageID: 47708780
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:vDrVFKuRTWoEUbXNij2daIDe7skDjNV00zEX/kB9WHVpm6yj+v
 xGUs566faUskd0ZJhEo7q90ca7Lk80maQa3WBzB8bGYOCFghrKEGgK1+KLrwEIcxeUygc379
 YDT0ERMrzN5VgRt7eG3OG7eexQvOVuJsqT9JjjJ3QGd3AVV0l5hT0JbTpyiidNNXJ77ZxSLu
 v72uN34wCOVF4wdcqBCnwMT4H41qf2fMKPW29+O/Y/gjP+9Q+V1A==
X-IronPort-AV: E=Sophos;i="5.83,331,1616472000"; 
   d="scan'208";a="47708780"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=PGXbgSef0JOG33UNVBuH0UE9Ap6IUIez52Cq48XyR0YOk8uSEHNiRyV7kkrF3NkLh3Z6uU70gPk6wTRr1IImDGOCaSsmeSCF3cecD8ko848BCt5nvFiNNMWP+Aifx1WD3jv53J8jUMU3p/S2bHLNT+VcIvilNWdVGvr7Ht4EEVzjaHd/3GsvQAgJagLx7M+DVA0IphpZfVvhoevxLs59V4aQe4qErdwZfnePe8W9xMWuA/dGEfd58aMB88OW3ppIUgBJf46UT6yWHJYEzpQifHv6x8scDwoPqFWSIuVVY71orWwousRPB+hxhjKnLMyrzpi+B+n32Tv6e1oMGUde6A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+FTMHFD1RoYL5CmN4L4VOuAQCePYv4TCiZzsGfakQJ0=;
 b=PES9280cHRlcxXguWKUzNy3j3z4RHptlevm0Zje52mvGx2zAH2hpO8ZTacD9nTfUvDm74ZtbAXL10G3fho0IuJ2ewXIex3qAzokeZGipbAzDlQfONA834FOCLQYnXWcmDcU41NA3ptQ2Z9Ttm8j8UCP0JKi9dff16HT5D/cDJt0AGZkJ0wvBs4To86HyOxb6A3MGMK+b6ALIIJuFnPnHceKJJvQBfbSAa+LEgBcGwn7ryZTj1swyA92i85AOU6/h6dCROWMzaXstuX0mSucInOctCf5d2KUK16KBZVKekF7F883NPr6QL8rFaRe6ldlSceaH1FuSTjqEXv6Ho21vvw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+FTMHFD1RoYL5CmN4L4VOuAQCePYv4TCiZzsGfakQJ0=;
 b=fIyMy0legAZLMTtRskfpUiZVe8elDzvzH4VDVY2/xuZUIsCs99m8lOoAzDnqcgpUSiPImAGXGtp5V3toa7lQ0YOq0J6+FtmL6aNKZhJORVTNVJ+W/5Liuvr3N27hm6bbZDQRqx0mPFLseQtxZy8U2X0mT1+XfwHZrfo1FD/Ryzw=
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Jan Beulich <jbeulich@suse.com>, Igor Druzhinin
	<igor.druzhinin@citrix.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <george.dunlap@citrix.com>,
	<julien@xen.org>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
Date: Wed, 7 Jul 2021 10:19:57 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO3P123CA0016.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:ba::21) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 213f3bed-bb6f-4535-b069-08d9412868ec
X-MS-TrafficTypeDiagnostic: BYAPR03MB3992:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB39924B065F2D8BD613D77E7FBA1A9@BYAPR03MB3992.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: urdWJVZKqRkgkE1wo+Y8TL7qoZSz6oBALTTU8y7RMblGtIRv4HSlZ+iuZjG2gwumKLqqbSFBdGgjdTCeVCS2UzIfyHIYpAMVJG7GGU51xM6kIceVOJ/vYFb7qpoImvjfb0crhHLKM0tyLGk9RVgoT4sdZce2VOe2QyU6RbNBYzgqh4YGETgYrUNso4efdd8Vuq7AufxrzCAi/i4s+UZBMIAk8wV17hpuv8DfT1CAizSMvktKASFjkdePl0QBLEs7YzOGY7poh4Tc8dJpsNCtVjWJA79QlrgLE1JnVlHL1pE9OSKIuQjsPhliu4zZbjunwon8CL232lItADh7VjBtB3XWZ9gBXh57QphwyJvH8sFeh+eFBI9V91nZ388+a19Oe8LQg4VHl1HgtB1zrkh8GSe3t8M/5vt7heHdXRoEsdy1/fGeNcXvbCJSjpmBNGGM3gjJFkaC1tk5G7eCso3BtGialL7W3HpiqTzT9iFjaS/tiG2cgKGcE1mzrqDFAdw9txttL+nuOn0AwXUy+hy/fotprGCAOfXTAe+Kml2mXvM8jDWZRqufdIgZjuNi+2A0tAjii0sA8A68a8MwgyRhha3BkjdOC1EeN1Y4L64X497HX/aOThSXQmbgpjJi2frNMh5NhRH5J/rdfWYqcs1JxxwARzK0OPWE1Vq7ZN/W4GeZ0R70oR+DkQAYGeKDOoLKopxZ6qfwNc4kgGirj/syweaHC9m3Jhg7XLfUK59kXsY=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(39860400002)(346002)(396003)(376002)(2906002)(16576012)(186003)(110136005)(4326008)(4744005)(31686004)(36756003)(83380400001)(38100700002)(8936002)(6486002)(53546011)(316002)(66476007)(31696002)(6666004)(478600001)(956004)(66556008)(66946007)(26005)(86362001)(8676002)(6636002)(5660300002)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?/ItepIMSkCvHjX+sZTNDbKJ7XrBt2W52xQCZPcp?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 213f3bed-bb6f-4535-b069-08d9412868ec
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 09:20:06.5924
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: q4TCGJ7s4eV4pHxfyaYHnh1tt2UyOCHSIKdxv7zkscsJnmnUIbGrwYXg3b+/omjZ6rw12R7Y9IcQ+GN9pcuTUPmJdiUE9T6dIA1P/s4Je1w=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3992
X-OriginatorOrg: citrix.com

On 07/07/2021 08:46, Jan Beulich wrote:
>> --- a/tools/include/xenctrl.h
>> +++ b/tools/include/xenctrl.h
>> @@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface *xch,
>>  
>>  int xc_domain_irq_permission(xc_interface *xch,
>>                               uint32_t domid,
>> -                             uint8_t pirq,
>> +                             uint32_t pirq,
>>                               uint8_t allow_access);
> Take the opportunity and also change "allow_access" to bool? Or is
> use of bool prohibited in external interfaces?

We've got bool's in the interface already.

~Andrew


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 09:56:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 09:56:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152096.280993 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14I3-0004Fn-04; Wed, 07 Jul 2021 09:56:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152096.280993; Wed, 07 Jul 2021 09:56:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14I2-0004Ff-TI; Wed, 07 Jul 2021 09:56:22 +0000
Received: by outflank-mailman (input) for mailman id 152096;
 Wed, 07 Jul 2021 09:56:22 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m14I2-0004FW-I0; Wed, 07 Jul 2021 09:56:22 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m14I2-0000eo-7R; Wed, 07 Jul 2021 09:56:22 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m14I1-0006u5-Vs; Wed, 07 Jul 2021 09:56:22 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m14I1-0003TF-VQ; Wed, 07 Jul 2021 09:56:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tvPnjZ4Eogeb/p9x2gQAneO8TfJK9m92RkVm/3rWfyg=; b=THLlPWQqlZ2F4T6PSy4Fi7C/XJ
	JUoaduV7jqgHj64GVqLJHH3aEhZOscGOlxzF/CzQDz5cbqez7LGW18cA9GGJe2gzFENgqrkqEKyUy
	AXYgMT0iEh6SBCiVGEVDecnczZxXgV3sskUIWFeziCB6sB1JrptTig3acHEAHaTRI9ps=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163396-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-coverity test] 163396: all pass - PUSHED
X-Osstest-Versions-This:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
X-Osstest-Versions-That:
    xen=74d044d51b19bb697eac5c3deafa140f6afafec8
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 09:56:21 +0000

flight 163396 xen-unstable-coverity real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163396/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a
baseline version:
 xen                  74d044d51b19bb697eac5c3deafa140f6afafec8

Last test of basis   163297  2021-07-04 09:20:47 Z    3 days
Testing same since   163396  2021-07-07 09:23:02 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
  Sergiy Kibrik <Sergiy_Kibrik@epam.com>
  Tim Deegan <tim@xen.org>

jobs:
 coverity-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/xen.git
   74d044d51b..4473f36010  4473f3601098a2c3cf5ab89d5a29504772985e3a -> coverity-tested/smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 09:57:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 09:57:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152102.281008 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14JO-0004qh-Bh; Wed, 07 Jul 2021 09:57:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152102.281008; Wed, 07 Jul 2021 09:57:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14JO-0004qa-8R; Wed, 07 Jul 2021 09:57:46 +0000
Received: by outflank-mailman (input) for mailman id 152102;
 Wed, 07 Jul 2021 09:57:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m14JM-0004qP-RH
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 09:57:44 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ec6f7e91-bced-4e6d-afd2-20a6b0caac7c;
 Wed, 07 Jul 2021 09:57:44 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2171.outbound.protection.outlook.com [104.47.17.171])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-26-xM7cClxzPNu2EzeolSEwew-2; Wed, 07 Jul 2021 11:57:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2448.eurprd04.prod.outlook.com (2603:10a6:800:52::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Wed, 7 Jul
 2021 09:57:39 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 09:57:39 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0153.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1b::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 09:57:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec6f7e91-bced-4e6d-afd2-20a6b0caac7c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625651863;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=/QhUKPoOttNGnhHG+0R6LnihQok9X9UZmTs7NpNGzM8=;
	b=Umzt66ITCMdDBOvOtTyaS8JvSSHV7RQ3TpwAX4khnPYaOeoXLCMQW0euJNyfCxALbXUOJz
	auFS0Mfi4ietwKlHtn/NTCmIO4Wb+TPCTFTuX71YW+XjKK2fZPJtqlNKCL7DKDy/pnpiyb
	+O5zRwuRJeDnxEhxJlU7tXy5Bd11fas=
X-MC-Unique: xM7cClxzPNu2EzeolSEwew-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=N6qD7UvxaMW9plEvoLeXQXV9Qk6g/PlkLVuhOJslST+QHbdAhU6UDHdxMXVZ3SqXMxWcAzCjMreEH4NvGRAeMRzjIVcYg2SZoo1MynJYRPHAGakQb9+rlPtwuFd7wHBfg+5J38INEvRkYo5tw4GjEax7HmzH5k0Wj0OdQnszJjJG0LfJUQfyCmzZl4xVM9zooXUww0aJFzUI5Asf4h8/LJCIY8qyRF1Bu7FIYCZYJjCBAV+BeYimcH+0TgtAlRhj5ZueQSCIEHMQ3qm6am5xocgKj4GL4ONm7hPzyNVntuOojlxUXiKtPUfqwpV2xGQV/8CgJMiQkxOwZsE4E2/xzQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/QhUKPoOttNGnhHG+0R6LnihQok9X9UZmTs7NpNGzM8=;
 b=U8/62VVADpf0LfitwADzbvwq8uo78ALyfCQyLVg+JfHlxkoxqPjMDlZ1ZFfSrEf5urLLg+XbaCWcCw3toCGjqOSj7EBqntc2vPDAn8D5DZj6ODRxCgpEABV7d5+xHRRzMrGZUuRICyEnpMwy2gRw9jkFiWFifdpnR7B1Sapg5HLXOk8sCCq7aUw62Cht/IxJKcTCN8t01ekPigmypJ9bpO88gfmtr595xFLs/rpiPeJ4owdGGXPhABUQrc3lnH+XTbLTyp9qhBD62fuY03Z765D4RJ7Q1KrTp3GKa9X8i0LkGnj/9+IeXnkVRjIhRqut3MRVMkRzkyvr21cfPXeA9w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.ozlabs.org; dkim=none (message not signed)
 header.d=none;lists.ozlabs.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2] xen/hvc: replace BUG_ON() with negative return value
To: Juergen Gross <jgross@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 Jiri Slaby <jirislaby@kernel.org>, xen-devel@lists.xenproject.org,
 linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
References: <20210707091045.460-1-jgross@suse.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <9e45c5f8-0ac0-e1bb-4703-838679285e80@suse.com>
Date: Wed, 7 Jul 2021 11:57:37 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210707091045.460-1-jgross@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0153.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1b::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 939c54ca-18a3-4e5c-163a-08d9412da79f
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2448:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB244804EBAAC01ACCA3353D45B31A9@VI1PR0401MB2448.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	jMpEYsEqbfyztJr6u9sSmdDWhvBVW67kWtTJRDs4f2xGBRJti5F92TedJR5ABrdUvA6AYHPfhT4CtY5AdhaQJ2mfCLQdGSyEgK1XTJTjZEVEEe+QAddw7EzOP34boaPWnHV/Wlw3JEz536mcmKdHNoKRQrU8xEcUK46njot0iD57DqjYmR2lgbBPYPP+TFtVrHmbN6r1ZUlnglCdJz7xuQCsWIoWjD4doMqWfc3s4FkXLNMWU9WQt1rjt/KJA2RBpJC7jE1zScBJpq94TMuDSEKrTMpClXXTBQ+zR/bO5fKpv9AgNz9zUH0ookAXMuDl40CdhIZYcPpSwcxw7p4u1xMM7ASjQDaz0QpZmW160bxzg358pLmIWS4ZVRVmzzDGcKmTZPJj8g94OXHg5P8h4nEAdC2xPF4vDlJqeZ2wez/6yepJgdMoVMfULqKefOc5A761Xsb/I6pSTzEUnUgqtAJT9EFFWO7srWA3X/pxh9pgfvyi7eIi7/JJCJgbrV2sfEQsv9At+U5Q0ZAC1cMUDiF4BZi55jAKBVlcYVmr4IFZNUM8dZQGp9nO2qd8Wh/iZnHvFuD7gp7xwXGhbRkYj/xxHZdCKGn//lah0L9cEMh7FvfZZhxKjcJn+8CxBpr5eVPLTsV7QH0xtw+aoKde7f2H5PJee9q4VYhkRZNZ5tww80iaeMBeYpcpHCDHvHrGS2wvgkfFm8HsSJNInERdZ7pE8OlgcfYC5xE4ggym5ds=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(376002)(346002)(366004)(136003)(39850400004)(5660300002)(54906003)(16576012)(8936002)(8676002)(66946007)(66476007)(6636002)(83380400001)(2616005)(956004)(6862004)(37006003)(316002)(66556008)(36756003)(38100700002)(31686004)(86362001)(26005)(186003)(2906002)(6486002)(53546011)(4326008)(31696002)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 939c54ca-18a3-4e5c-163a-08d9412da79f
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 09:57:39.2809
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: QGSajIpUmZPMWXne6Q7M0IlmEQ+/Z+QWjzbaRGg7W0ydTROPfjo5Bq/AXPCWZnOraGB4jz2E2qJIOvrcLhLVAA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2448

On 07.07.2021 11:10, Juergen Gross wrote:
> Xen frontends shouldn't BUG() in case of illegal data received from
> their backends. So replace the BUG_ON()s when reading illegal data from
> the ring page with negative return values.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

> --- a/drivers/tty/hvc/hvc_xen.c
> +++ b/drivers/tty/hvc/hvc_xen.c
> @@ -86,7 +86,11 @@ static int __write_console(struct xencons_info *xencons,
>  	cons = intf->out_cons;
>  	prod = intf->out_prod;
>  	mb();			/* update queue values before going on */

Largely unrelated note: While in general the barriers here may want
switching to virt_*mb(), this particular one looks to be too heavy
anyway: a read barrier is all that's needed here afaict, just like
there's only a write barrier between ring contents and producer
writing in __write_console().

And btw, since I've got puzzled by the linuxppc-dev@ in the recipients
list, I did look up relevant entries in ./MAINTAINERS. Shouldn't the
file be part of "XEN HYPERVISOR INTERFACE"?

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 10:03:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 10:03:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152110.281018 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14Oh-0006QH-4u; Wed, 07 Jul 2021 10:03:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152110.281018; Wed, 07 Jul 2021 10:03:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14Oh-0006QA-1v; Wed, 07 Jul 2021 10:03:15 +0000
Received: by outflank-mailman (input) for mailman id 152110;
 Wed, 07 Jul 2021 10:03:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m14Of-0006Q0-BL; Wed, 07 Jul 2021 10:03:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m14Of-0000sy-52; Wed, 07 Jul 2021 10:03:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m14Oe-0007C7-Td; Wed, 07 Jul 2021 10:03:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m14Oe-0005vE-T8; Wed, 07 Jul 2021 10:03:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=cLkrlnGPmihJKCbSWfsh0dSvunIs9Div5B1x+mpG8cg=; b=HK6xyZ2WyXw5HY78ouD1AJ7qEa
	Y06AOC/TPz9LauAXJB9IAUofInFLor1xUBQNXSme3B2QTGyaIFdTkSeLfNMk3usCCJC1oUoTiUDcG
	WoKhH/Fsr7o9DN/8wc308Z9Tf2iDe/Ft0IjBCPqcQ1mnf3KScwGlXf0j+x+V/6/WT1JA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163393-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163393: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=f17a73b3c0264c62dd6b5dae01ed621c051c3038
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 10:03:12 +0000

flight 163393 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163393/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  f17a73b3c0264c62dd6b5dae01ed621c051c3038
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    1 days
Testing same since   163328  2021-07-06 13:01:47 Z    0 days   14 attempts

------------------------------------------------------------
People who touched revisions under test:
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 10:41:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 10:41:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152119.281039 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14zC-0001uY-7T; Wed, 07 Jul 2021 10:40:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152119.281039; Wed, 07 Jul 2021 10:40:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m14zC-0001uR-3o; Wed, 07 Jul 2021 10:40:58 +0000
Received: by outflank-mailman (input) for mailman id 152119;
 Wed, 07 Jul 2021 10:40:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Dzvn=L7=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m14zA-0001uL-VJ
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 10:40:56 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8f6a59b0-b0bc-45db-bdab-a4bde3c63308;
 Wed, 07 Jul 2021 10:40:55 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 23C782266A;
 Wed,  7 Jul 2021 10:40:55 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id E7DCB13966;
 Wed,  7 Jul 2021 10:40:54 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id YmzbNraE5WCKVgAAGKfGzw
 (envelope-from <jgross@suse.com>); Wed, 07 Jul 2021 10:40:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8f6a59b0-b0bc-45db-bdab-a4bde3c63308
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625654455; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=N11h7ouUFr3DAUuHEdSGvJoajgCZswBXRGsMpwGbDbA=;
	b=XpSIH/dwC0N6Cqx3dG9AWgmfbTjKk1JKRC3HBaKVQE9EmrJKF2OKyjqyVs3cFukgw/eeBZ
	QjFG3JbAuqq5OcFKCZaeE2O3wF5cDehmrvqQgIZuZGGkwVszQL1ZPJ9pf3dHy0IzgFQ1PI
	O+wCoNRZkUzdTt7XmLJDTCBP27Q3deg=
Subject: Re: [PATCH v2] xen/hvc: replace BUG_ON() with negative return value
To: Jan Beulich <jbeulich@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 Jiri Slaby <jirislaby@kernel.org>, xen-devel@lists.xenproject.org,
 linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
References: <20210707091045.460-1-jgross@suse.com>
 <9e45c5f8-0ac0-e1bb-4703-838679285e80@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <dd32b09b-7345-664b-165d-dfb30c285448@suse.com>
Date: Wed, 7 Jul 2021 12:40:54 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <9e45c5f8-0ac0-e1bb-4703-838679285e80@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="EaXVOFEGH7qawZGUIhRcY8ubI1x9QO3nU"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--EaXVOFEGH7qawZGUIhRcY8ubI1x9QO3nU
Content-Type: multipart/mixed; boundary="9rpfACyjVhmGUQOwL4hqApmFGAJalcBco";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 Jiri Slaby <jirislaby@kernel.org>, xen-devel@lists.xenproject.org,
 linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Message-ID: <dd32b09b-7345-664b-165d-dfb30c285448@suse.com>
Subject: Re: [PATCH v2] xen/hvc: replace BUG_ON() with negative return value
References: <20210707091045.460-1-jgross@suse.com>
 <9e45c5f8-0ac0-e1bb-4703-838679285e80@suse.com>
In-Reply-To: <9e45c5f8-0ac0-e1bb-4703-838679285e80@suse.com>

--9rpfACyjVhmGUQOwL4hqApmFGAJalcBco
Content-Type: multipart/mixed;
 boundary="------------41A7E563365649DB0BFE43DE"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------41A7E563365649DB0BFE43DE
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 07.07.21 11:57, Jan Beulich wrote:
> On 07.07.2021 11:10, Juergen Gross wrote:
>> Xen frontends shouldn't BUG() in case of illegal data received from
>> their backends. So replace the BUG_ON()s when reading illegal data fro=
m
>> the ring page with negative return values.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>=20
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>=20
>> --- a/drivers/tty/hvc/hvc_xen.c
>> +++ b/drivers/tty/hvc/hvc_xen.c
>> @@ -86,7 +86,11 @@ static int __write_console(struct xencons_info *xen=
cons,
>>   	cons =3D intf->out_cons;
>>   	prod =3D intf->out_prod;
>>   	mb();			/* update queue values before going on */
>=20
> Largely unrelated note: While in general the barriers here may want
> switching to virt_*mb(), this particular one looks to be too heavy
> anyway: a read barrier is all that's needed here afaict, just like
> there's only a write barrier between ring contents and producer
> writing in __write_console().

I agree.

> And btw, since I've got puzzled by the linuxppc-dev@ in the recipients
> list, I did look up relevant entries in ./MAINTAINERS. Shouldn't the
> file be part of "XEN HYPERVISOR INTERFACE"?

I wouldn't mind. Greg, Jiri, what do you think?


Juergen

--------------41A7E563365649DB0BFE43DE
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------41A7E563365649DB0BFE43DE--

--9rpfACyjVhmGUQOwL4hqApmFGAJalcBco--

--EaXVOFEGH7qawZGUIhRcY8ubI1x9QO3nU
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDlhLYFAwAAAAAACgkQsN6d1ii/Ey+h
nQf6Am00Vqi/6Jzpyxf14vmtTaZqJJyMAr8bZlczlxZd4ym8ttPZ+0X4jC1Qhj95xncLLcRPD48n
zjXrUXqgw243BwaSFx1VjnFxbvVIwhQ4/xQcxhj2ccJlliUXdd0h0ebveKgE5TL30jtmPJdrcUJH
JHvDivp5gzcRmVVqRAJ007+8Ug0HEnWpPoHcOrTn7ot2/lYye/wEkIrDF4pri2JGN9A2lQ+NefgT
iN8vVD/skh5e0wQ8JLD/7jM5r1kO4Z2lls19/f/78jX9RKs5qVjKGBCYlsTrx27NQl+4Enjw7Aap
U+NwoaH2WO02AP0QOSWmerIH0liA1Y4hfdePbRYFdA==
=4Hku
-----END PGP SIGNATURE-----

--EaXVOFEGH7qawZGUIhRcY8ubI1x9QO3nU--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 10:59:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 10:59:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152128.281062 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m15HM-0003cT-1v; Wed, 07 Jul 2021 10:59:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152128.281062; Wed, 07 Jul 2021 10:59:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m15HL-0003cM-VA; Wed, 07 Jul 2021 10:59:43 +0000
Received: by outflank-mailman (input) for mailman id 152128;
 Wed, 07 Jul 2021 10:58:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=gidy=L7=gmail.com=jirislaby@srs-us1.protection.inumbo.net>)
 id 1m15Fx-0003b7-Je
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 10:58:17 +0000
Received: from mail-ed1-f53.google.com (unknown [209.85.208.53])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0e5f8fb5-c035-4989-9402-5de6e03f09cd;
 Wed, 07 Jul 2021 10:58:16 +0000 (UTC)
Received: by mail-ed1-f53.google.com with SMTP id y40so2834337ede.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 03:58:16 -0700 (PDT)
Received: from ?IPv6:2a0b:e7c0:0:107::70f? ([2a0b:e7c0:0:107::70f])
 by smtp.gmail.com with ESMTPSA id h8sm7057430ejj.22.2021.07.07.03.58.15
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 07 Jul 2021 03:58:15 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e5f8fb5-c035-4989-9402-5de6e03f09cd
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=6zKc5bM/j/Saim3WcJ7XMsv777ylB6DzjZT8Xkvqlo8=;
        b=kyn1EWZ9+XZ6rs+mGWNHzsltek9y/aU3d8BumYyIsyL3Vx6QN56i9roMbVbmJniipw
         mIijomibpoVnb2X/jcPP43pNDF08AVsEW7kNcUp47G63xyAa8mlz6kDSjSJDnZCyNp7n
         RHBRktnByHfDamGfF2QLwoRzUTxNWK8aMj8vRw3NOrb0+9SkU/+HZk78xUgcUbtaBXGm
         vMOxJyxYRNUPcTHk+0w3h7E2aQMkmdkwr9WFGF2QrlAJcv+1vdCbeeSiLeNq5JTWRscQ
         bi5wtSaMY3N5w/MtXU9v6feQi5/3//c6496mRG+odQ3ARE99aVVqUgWNaEfJZUCJ+uy4
         xThw==
X-Gm-Message-State: AOAM5316e4L41WUCyzviye1aoMScedC1RQUSyh8DKGj4IEpNpovoOAQ1
	gLRpnfMIhGqusFgzK3OUgQc=
X-Google-Smtp-Source: ABdhPJw9AWx/zVkQP7+TWOppO1SN41FBH7XT10N9Y4mW5X2FTCcM1e3yMvvdcWiMqnnW+M23v3zplQ==
X-Received: by 2002:a05:6402:1001:: with SMTP id c1mr29109250edu.26.1625655495857;
        Wed, 07 Jul 2021 03:58:15 -0700 (PDT)
Subject: Re: [PATCH v2] xen/hvc: replace BUG_ON() with negative return value
To: Juergen Gross <jgross@suse.com>, Jan Beulich <jbeulich@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
 xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org
References: <20210707091045.460-1-jgross@suse.com>
 <9e45c5f8-0ac0-e1bb-4703-838679285e80@suse.com>
 <dd32b09b-7345-664b-165d-dfb30c285448@suse.com>
From: Jiri Slaby <jirislaby@kernel.org>
Message-ID: <b38eddf2-52af-3fa1-9cc0-681c094e327f@kernel.org>
Date: Wed, 7 Jul 2021 12:58:14 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <dd32b09b-7345-664b-165d-dfb30c285448@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 07. 07. 21, 12:40, Juergen Gross wrote:
>> And btw, since I've got puzzled by the linuxppc-dev@ in the recipients
>> list, I did look up relevant entries in ./MAINTAINERS. Shouldn't the
>> file be part of "XEN HYPERVISOR INTERFACE"?
> 
> I wouldn't mind. Greg, Jiri, what do you think?

/me concurs.

thanks,
-- 
js
suse labs


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 11:28:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 11:28:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152137.281079 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m15ie-0006kx-BA; Wed, 07 Jul 2021 11:27:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152137.281079; Wed, 07 Jul 2021 11:27:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m15ie-0006kq-7d; Wed, 07 Jul 2021 11:27:56 +0000
Received: by outflank-mailman (input) for mailman id 152137;
 Wed, 07 Jul 2021 11:27:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m15ic-0006kg-Nq; Wed, 07 Jul 2021 11:27:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m15ic-0002Fi-DS; Wed, 07 Jul 2021 11:27:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m15ic-0002Qm-6L; Wed, 07 Jul 2021 11:27:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m15ic-0004N5-5o; Wed, 07 Jul 2021 11:27:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=x1gzkg0+lSlXO4M+KTJhVmRVxjJt2DAdAfG8OLV8loI=; b=rkzxYhfcCHmpFcZw1XV9SJBaC3
	D1pRzdntpXSAdaqiDbIs3Jko3fqC3xdhM9JXeWQx3BHfpbUGr2i8ow4GSWGV/3DrN0a0HQEb/4/06
	BYWDdBaJKIIIID004TF4eVntVMfnLrB4oWF+ojrjDoMMnyAjUsKp7OudvEqtQ451ANQU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163398-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163398: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=b8d27e5b3391f4f90744f6ce75c02bd2661f7788
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 11:27:54 +0000

flight 163398 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163398/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  b8d27e5b3391f4f90744f6ce75c02bd2661f7788
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    1 days
Failing since        163328  2021-07-06 13:01:47 Z    0 days   15 attempts
Testing same since   163398  2021-07-07 11:00:30 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Jan Beulich <jbeulich@suse.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit b8d27e5b3391f4f90744f6ce75c02bd2661f7788
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:35:54 2021 +0200

    x86/mem-sharing: mov {get,put}_two_gfns()
    
    There's no reason for every CU including p2m.h to have these two
    functions compiled, when they're both mem-sharing specific right now and
    for the foreseeable future.
    
    Largely just code movement, with some style tweaks, the inline-s
    dropped, and "put" being made consistent with "get" as to their NULL
    checking of the passed in pointer to struct two_gfns.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

commit 09af2d01a2fe6a0af08598bdfe12c9707f4d82ba
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:35:12 2021 +0200

    x86/mem-sharing: ensure consistent lock order in get_two_gfns()
    
    While the comment validly says "Sort by domain, if same domain by gfn",
    the implementation also included equal domain IDs in the first part of
    the check, thus rending the second part entirely dead and leaving
    deadlock potential when there's only a single domain involved.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

commit 980d6acf1517f0602e6dcf05ea922cf14c95e9c0
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:32:45 2021 +0200

    IOMMU: make DMA containment of quarantined devices optional
    
    Containing still in flight DMA was introduced to work around certain
    devices / systems hanging hard upon hitting a "not-present" IOMMU fault.
    Passing through (such) devices (on such systems) is inherently insecure
    (as guests could easily arrange for IOMMU faults of any kind to occur).
    Defaulting to a mode where admins may not even become aware of issues
    with devices can be considered undesirable. Therefore convert this mode
    of operation to an optional one, not one enabled by default.
    
    This involves resurrecting code commit ea38867831da ("x86 / iommu: set
    up a scratch page in the quarantine domain") did remove, in a slightly
    extended and abstracted fashion. Here, instead of reintroducing a pretty
    pointless use of "goto" in domain_context_unmap(), and instead of making
    the function (at least temporarily) inconsistent, take the opportunity
    and replace the other similarly pointless "goto" as well.
    
    In order to key the re-instated bypasses off of there (not) being a root
    page table this further requires moving the allocate_domain_resources()
    invocation from reassign_device() to amd_iommu_setup_domain_device() (or
    else reassign_device() would allocate a root page table anyway); this is
    benign to the second caller of the latter function.
    
    In VT-d's domain_context_unmap(), instead of adding yet another
    "goto out" when all that's wanted is a "return", eliminate the "out"
    label at the same time.
    
    Take the opportunity and also limit the control to builds supporting
    PCI.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Paul Durrant <paul@xen.org>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>

commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 12:51:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 12:51:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152153.281107 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m171U-0006bq-3Z; Wed, 07 Jul 2021 12:51:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152153.281107; Wed, 07 Jul 2021 12:51:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m171U-0006bj-02; Wed, 07 Jul 2021 12:51:28 +0000
Received: by outflank-mailman (input) for mailman id 152153;
 Wed, 07 Jul 2021 12:51:26 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m171S-0006bd-NY
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 12:51:26 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m171P-0003dD-MJ; Wed, 07 Jul 2021 12:51:23 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m171P-0006QQ-Fo; Wed, 07 Jul 2021 12:51:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=sHg00tgsxIMIF0iMrMMSGHVKukZ//qgU2uFO1GDzcak=; b=bizrwFDZipMkyoVm1csGk1RUYx
	vGhZUYOWjUKPOnrq0zQ98PXdt7ykYt2Jk03hyizFk/hr9zj8zqoR4y/S3H8xErVmKTyuxnBRVaTMx
	Kjj4J/1bnUYcMgQcOiZxhrf4GGuMvdMltSoJab7k4jENvyCH5mAW0CeD2ylSlMXRTbPM=;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Igor Druzhinin <igor.druzhinin@citrix.com>, xen-devel@lists.xenproject.org
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, jbeulich@suse.com, sstabellini@kernel.org,
 jgross@suse.com, christian.lindig@citrix.com, dave@recoil.org
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
Date: Wed, 7 Jul 2021 13:51:21 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Igor,

On 07/07/2021 02:02, Igor Druzhinin wrote:
> Current unit8_t for pirq argument in this interface is too restrictive
> causing failures on modern hardware with lots of GSIs. That extends down to
> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
> as well. Internal Xen structures appear to be fine. Existing users of
> the interface in tree (libxl, ocaml and python bindings) are already using
> int for pirq representation that should be wide enough.

By "int", I am assuming you imply "signed int", is that correct?

If so, should the function xc_domain_irq_permission() interface take an 
int in parameter and check it is not negative?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 12:53:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 12:53:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152158.281118 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m173H-0007EO-EZ; Wed, 07 Jul 2021 12:53:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152158.281118; Wed, 07 Jul 2021 12:53:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m173H-0007EH-Bd; Wed, 07 Jul 2021 12:53:19 +0000
Received: by outflank-mailman (input) for mailman id 152158;
 Wed, 07 Jul 2021 12:53:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m173G-0007E8-Jv
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 12:53:18 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m173E-0003gu-Ps; Wed, 07 Jul 2021 12:53:16 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m173E-0006Vn-Jt; Wed, 07 Jul 2021 12:53:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=H3dl9D+jjVW4K7bfY9QyjNHW2ySsQC/eRnStEEUeIo4=; b=xeYjqlHfkoqHZdxCYSJfld+I0u
	ke3PpeqoxGrcehJo2vPvmr+Rhjec32U3iaxSqVtIGMi9dzezZmffmtlc+SCwhDpmzg7e1OQY0+QHj
	p0BHD1eaA11uOdvFzqJHM5bOxAqqhpWljxhmygW+sDwKU3rkF2CrkwLxk5OSlX9Hoyqk=;
Subject: Re: [PATCH] arm: Fix arch_initialise_vcpu to be unsupported
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com,
 Jan Beulich <jbeulich@suse.com>
References: <20210706102853.10251-1-michal.orzel@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <3b3cb3ef-82eb-3933-9b7e-c124aabefa60@xen.org>
Date: Wed, 7 Jul 2021 13:53:14 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210706102853.10251-1-michal.orzel@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Michal,

On 06/07/2021 11:28, Michal Orzel wrote:
> Function arch_initialise_vcpu is not reachable as the
> VCPUOP_initialise is an unsupported operation on arm.
> Modify the function by adding ASSERT_UNREACHABLE() and
> returning -EOPNOTSUPP.
> 
> Suggested-by: Jan Beulich <jbeulich@suse.com>
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 12:54:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 12:54:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152163.281133 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1748-0007q4-T6; Wed, 07 Jul 2021 12:54:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152163.281133; Wed, 07 Jul 2021 12:54:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1748-0007pp-N0; Wed, 07 Jul 2021 12:54:12 +0000
Received: by outflank-mailman (input) for mailman id 152163;
 Wed, 07 Jul 2021 12:54:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1746-0007pU-QD
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 12:54:10 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6b89d6ae-df22-11eb-84ef-12813bfff9fa;
 Wed, 07 Jul 2021 12:54:09 +0000 (UTC)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2058.outbound.protection.outlook.com [104.47.1.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-10-VuQ2s5cyNzaCBhdSkoKeYQ-1; Wed, 07 Jul 2021 14:54:07 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7151.eurprd04.prod.outlook.com (2603:10a6:800:129::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Wed, 7 Jul
 2021 12:54:05 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 12:54:05 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 12:54:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6b89d6ae-df22-11eb-84ef-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625662448;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=sUDZAlZQr1ai+cbfSbAY7rmRuHxnzvUDZskGO0Bzo9I=;
	b=bXlYBzVLkm8qnvE3ENwV7AEcqEnDdR+ZAnFJihDP134j98G1VjpoXsKc75sgOXM+UH0DYb
	Y6vEEoduE7hh3h7md6StVtIKAVZw5+mm1SpHZ0zmFyK+EqRvWaxcLB7x5Q4ThoGsPUccs6
	3my7D3GTyD/9QK+oUmLtS3CwFteV5PM=
X-MC-Unique: VuQ2s5cyNzaCBhdSkoKeYQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KRHEDvKw5ovTD0sWJKDpFTZE5jzrwJqsnLVvYGDmrzYXjhW05cSMTYu7SSDQvRc1D59vQILfa7gYCzqmaMk8sZPIKb/KxNBy6rmHnPxHWhBRVBrB/oRis6WM2OeOXBu+jmSa9dW7Zt3zun///DM3rgsPIPU4Nv14bkSABG3s/uacS6QTAKgqGTk+HNOtVnfCMyeGzLHYVoNQOJ4NfD1A2FHm9N1Bn+mWKo4ZkUqvVmwZSRpREkWYPtP4bmI23Q0qlIbJUrw0+qi7I4ERisj0bnoIR6tGeX93VZYHo6TaUfmyXuy+07xrMf7o9utpps5czuPGl6myseeykxBX5xwNqQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=sUDZAlZQr1ai+cbfSbAY7rmRuHxnzvUDZskGO0Bzo9I=;
 b=EvE8hAGDH2h8XtUcd/78Esl2ljUqIiWH5vOmMXdGsyIPGg2ZIsLt4CEn6HA7r+CrUeq8ybhhxO0jkYAxFSyTaeqiiUzYcZKr20TwasR87UIy4kuc1nitunQXkhXo3LkhxlCt6oxtD3nYj3lHfeVouKf6Qt5zvZgLzVOZQztg7yIfSyNW5zkK8z0qGnwbV6EoZsnv/E66X9m35bwoPssOnwBAnDlkLGpMcZxYvcSQGStHu0IgiSSXHK9LbuaZzqR8ARhY2i6svsVpo/iSoCQBmDrX0oLwr8HAvxuM3lwyK3p68YgZ6KjKnNM0tpU8IbCXqpTvigp2Ui28YfWVQuYMlw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Julien Grall <julien@xen.org>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, sstabellini@kernel.org, jgross@suse.com,
 christian.lindig@citrix.com, dave@recoil.org,
 xen-devel@lists.xenproject.org, Igor Druzhinin <igor.druzhinin@citrix.com>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
Date: Wed, 7 Jul 2021 14:54:03 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM
 (2603:10a6:20b:21b::11) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 27341a90-a908-4c13-c237-08d941464d55
X-MS-TrafficTypeDiagnostic: VI1PR04MB7151:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7151AB50CEE3DF4AB82BFD99B31A9@VI1PR04MB7151.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	22Rv+gVzNDk7hMc+EMF3HuDGiQ4vGz0qWtKM0EYtYwtEHXmgK3LHJrdJ3tYbLlX90IByp1/SicvFHLtqlSVT3Kup7PBuIoPc6s2l30wgQdNudQV40rYDahxPFow0lDsByJ4gKW826sFD6L4LFEC/NFfexW2qdLRMwNK3wsV/sWsFX2mAkFSj5tNmTKyuKJ17sV+H/lqWXCJ7sKBVsWktdcp6hG7kMq3gEay6XHW/w9++r3b4xmzvTJfgsECQQlYrTJM0cMownm6C1cZ3Y1Pt27xgCwAE8Xpvi5h88gDia42e+umpGGEG3NeYm9JNbQvS8o5RGbNVeTkYNsD6mAbdunUwtyBlVOl+x1tPk7L16j4MX9PFmiTKOg28yvkoq+QIUl+192IFg+k5NTYMI7akZtlqKDORlFnXDSjPoVdRMdFikbP3IGVi52FA9CarwMul1SBrfprWHTUHWuNAO2FWoGv/THzSYQ5jd4IIq1sGlipCDzUMZy8YzK6pUDG58OGBiP9cGP+zT4DQjrkN56HurkA+Djh2OvFkSE/x9mwv8pxsSjGmrI27mO1ofXfOETSvSPCMtOyx8nneejkOllw8pSOHZZ8ANpkpH+84xgLmNd6QF2FBQmzNrhb5z5cof5RIq4t1Z4apPaohBsdsn71zsopznwUNf8QaLTKlfrU0SSQdLL5HFWbGaak83OAlDwyJDGUHrmIDehP9n1lb2R3Jlq68M2vJKw5TYPBGod6xdBE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(376002)(396003)(346002)(136003)(478600001)(83380400001)(2906002)(38100700002)(36756003)(26005)(31696002)(316002)(7416002)(4744005)(31686004)(4326008)(16576012)(86362001)(6486002)(8676002)(66476007)(186003)(66556008)(956004)(6916009)(8936002)(2616005)(5660300002)(66946007)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?2WCwdKxznw3jtlooekeuxMf8/xs1oBnLktA9xzM?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 27341a90-a908-4c13-c237-08d941464d55
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 12:54:05.1907
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: za5OlKWapbsqmJx8i6uQYgqocAT4s3c79OUaS75yEv+GTnfba5cGBNaGBxDGIc+ms2OW0HtpqDxKOVhGE5HXCA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7151

On 07.07.2021 14:51, Julien Grall wrote:
> On 07/07/2021 02:02, Igor Druzhinin wrote:
>> Current unit8_t for pirq argument in this interface is too restrictive
>> causing failures on modern hardware with lots of GSIs. That extends down to
>> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
>> as well. Internal Xen structures appear to be fine. Existing users of
>> the interface in tree (libxl, ocaml and python bindings) are already using
>> int for pirq representation that should be wide enough.
> 
> By "int", I am assuming you imply "signed int", is that correct?
> 
> If so, should the function xc_domain_irq_permission() interface take an 
> int in parameter and check it is not negative?

Please let's not make things worse than they are, the more that
./CODING_STYLE is unambiguous in cases like this one. If we mean
non-negative values, the type used should be an unsigned one. In
pre-existing code this will obviously only get changed over time.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 12:59:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 12:59:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152175.281146 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m179F-00008v-Cf; Wed, 07 Jul 2021 12:59:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152175.281146; Wed, 07 Jul 2021 12:59:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m179F-00008o-9L; Wed, 07 Jul 2021 12:59:29 +0000
Received: by outflank-mailman (input) for mailman id 152175;
 Wed, 07 Jul 2021 12:59:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m179E-00008i-5G
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 12:59:28 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m179C-0003ol-K4; Wed, 07 Jul 2021 12:59:26 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m179C-0006xY-Dd; Wed, 07 Jul 2021 12:59:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=APBRZIcZ1sFqieUZbFSvA+swlopjorMydYJES25crnI=; b=p41d/j07XwbP5fHg1A4vcERweX
	UbHcBotirUynDzhhzvkeyAcVDgEU7XrCv3Nr0FPhinJHfb7VtjepaYwSkALNA5hh5SDaTH8NnaUOh
	eAzpVtYwQgj/MpHSW+Y3PTbpnMgBWc/vcfoQx/cGmcjNHSWYsXnTQIycwHPIxkX1IM/A=;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Jan Beulich <jbeulich@suse.com>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, sstabellini@kernel.org, jgross@suse.com,
 christian.lindig@citrix.com, dave@recoil.org,
 xen-devel@lists.xenproject.org, Igor Druzhinin <igor.druzhinin@citrix.com>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
 <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
Date: Wed, 7 Jul 2021 13:59:24 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 07/07/2021 13:54, Jan Beulich wrote:
> On 07.07.2021 14:51, Julien Grall wrote:
>> On 07/07/2021 02:02, Igor Druzhinin wrote:
>>> Current unit8_t for pirq argument in this interface is too restrictive
>>> causing failures on modern hardware with lots of GSIs. That extends down to
>>> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
>>> as well. Internal Xen structures appear to be fine. Existing users of
>>> the interface in tree (libxl, ocaml and python bindings) are already using
>>> int for pirq representation that should be wide enough.
>>
>> By "int", I am assuming you imply "signed int", is that correct?
>>
>> If so, should the function xc_domain_irq_permission() interface take an
>> int in parameter and check it is not negative?
> 
> Please let's not make things worse than they are, the more that

Well, what I am trying to prevent is surprise where the caller 
mistakenly pass a negative value that will be interpreted as a positive 
value...

Such issues are beyong annoying to debug...

 > ./CODING_STYLE is unambiguous in cases like this one.

Hmmm... The coding style mention the fixed size but nothing about the 
signedness of the type...

The alternative suggestion is to keep a unsigned type but check the bit 
31 is not set.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:03:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:03:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152181.281160 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Cm-0001Zg-Up; Wed, 07 Jul 2021 13:03:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152181.281160; Wed, 07 Jul 2021 13:03:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Cm-0001ZZ-RK; Wed, 07 Jul 2021 13:03:08 +0000
Received: by outflank-mailman (input) for mailman id 152181;
 Wed, 07 Jul 2021 13:03:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m17Cl-0001ZP-MW; Wed, 07 Jul 2021 13:03:07 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m17Cl-0003vZ-K1; Wed, 07 Jul 2021 13:03:07 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m17Cl-000150-Du; Wed, 07 Jul 2021 13:03:07 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m17Cl-0000Qk-DM; Wed, 07 Jul 2021 13:03:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=QmUHPvbofEFXTVJLnLVUR2Mj5YdojCJiTAWjgGV6Yds=; b=HXVgo5NRh1NgteXG/AE8bGgTcY
	W+AaxagMCKEaE55MbhBwCcDhZuCSErfW/uKKnLLMCIQq5cYUnzJa4qcf222Pqa9fH8C6HuBrZHBdI
	5BqMVxzsqqA0TZXH8RK+/9ajwv62MyEeipokDKUnPDLqf43CN6d9P7cFTVOJwPhf9gZI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163387-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163387: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=0a6b303dcedb7af238ad485d545802befb797b3a
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 13:03:07 +0000

flight 163387 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163387/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 0a6b303dcedb7af238ad485d545802befb797b3a
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   33 days
Failing since        162368  2021-06-04 15:42:59 Z   32 days   93 attempts
Testing same since   163340  2021-07-06 15:40:15 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3335 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:06:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:06:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152188.281174 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Fn-0002Ct-ET; Wed, 07 Jul 2021 13:06:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152188.281174; Wed, 07 Jul 2021 13:06:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Fn-0002Cm-B3; Wed, 07 Jul 2021 13:06:15 +0000
Received: by outflank-mailman (input) for mailman id 152188;
 Wed, 07 Jul 2021 13:06:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m17Fl-0002Cg-Rm
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:06:13 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17Fi-0003xr-Q9; Wed, 07 Jul 2021 13:06:10 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17Fi-0007aI-Jc; Wed, 07 Jul 2021 13:06:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:References:Cc:To:From:Subject;
	bh=/nWj+NR9oKtRt/vfvWcHJgpTrMP73a2dGsl0BeYtHHw=; b=q3UeAGZ0dHljzhwPNuYv0XDBw/
	zAGn4UqNcSY1jbbmJAZHYA/IQ4IiOHekhi4HeySJYIHY2VmpBFjPRCiUn8LwcN/0O7Cea2N72LsjS
	XqEv1mW6gH/IjXh7108rrnoslLPtqTFgh3RTkznpXLw5C+74MDLZn/KMVOwLPgs0NOk8=;
Subject: Re: [PATCH] arm: Fix arch_initialise_vcpu to be unsupported
From: Julien Grall <julien@xen.org>
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com,
 Jan Beulich <jbeulich@suse.com>
References: <20210706102853.10251-1-michal.orzel@arm.com>
 <3b3cb3ef-82eb-3933-9b7e-c124aabefa60@xen.org>
Message-ID: <c83f4c98-8d6c-2bed-5aae-5ef56dbe3a18@xen.org>
Date: Wed, 7 Jul 2021 14:06:08 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <3b3cb3ef-82eb-3933-9b7e-c124aabefa60@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 07/07/2021 13:53, Julien Grall wrote:
> Hi Michal,
> 
> On 06/07/2021 11:28, Michal Orzel wrote:
>> Function arch_initialise_vcpu is not reachable as the
>> VCPUOP_initialise is an unsupported operation on arm.
>> Modify the function by adding ASSERT_UNREACHABLE() and
>> returning -EOPNOTSUPP.
>>
>> Suggested-by: Jan Beulich <jbeulich@suse.com>
>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
> 
> Acked-by: Julien Grall <jgrall@amazon.com>

And committed.

Cheers,

> 
> Cheers,
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:07:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:07:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152195.281185 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17HA-0002tD-Td; Wed, 07 Jul 2021 13:07:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152195.281185; Wed, 07 Jul 2021 13:07:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17HA-0002t6-QR; Wed, 07 Jul 2021 13:07:40 +0000
Received: by outflank-mailman (input) for mailman id 152195;
 Wed, 07 Jul 2021 13:07:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m17H9-0002sy-J2
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:07:39 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17H8-0003zQ-Kj; Wed, 07 Jul 2021 13:07:38 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17H8-0007jK-Du; Wed, 07 Jul 2021 13:07:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=QxSyR/emVTsJUS6LTegqqkhlrD8TZxLjDUp7+/vS/k0=; b=7MzMNv0yszhiBQMGAbAoOP8FWm
	Vuj7MoBjsAam00vu+oEwR+em5IbEEs8xpCVC4N7zlGgWs3tmbVmfsys7rJOFxunixm0DCZUVcS118
	GwGd4IHoBB/AuhvKckuFVPvWfF75O012V/xCM17XkHJtGXd4cqbTU0jzdHPcDTzmGp34=;
Subject: Re: [PATCH] xen/arm: smmuv1: Switch from kzalloc_array(..) to
 devm_kcalloc(..)
To: Rahul Singh <rahul.singh@arm.com>, xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com, Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <2c611dec5f1dbd6040d7a37d2d72ad2fc66e113f.1625568432.git.rahul.singh@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d30b4c93-f45d-86cf-5966-3ff0f8788cca@xen.org>
Date: Wed, 7 Jul 2021 14:07:36 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <2c611dec5f1dbd6040d7a37d2d72ad2fc66e113f.1625568432.git.rahul.singh@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Rahul,

On 06/07/2021 11:53, Rahul Singh wrote:
> Switch from kzalloc_array(..) to devm_kcalloc(..) when allocating the
> SMR to make code coherent.
> 
> Signed-off-by: Rahul Singh <rahul.singh@arm.com>

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:08:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:08:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152201.281195 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17II-0003Ut-6t; Wed, 07 Jul 2021 13:08:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152201.281195; Wed, 07 Jul 2021 13:08:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17II-0003Um-44; Wed, 07 Jul 2021 13:08:50 +0000
Received: by outflank-mailman (input) for mailman id 152201;
 Wed, 07 Jul 2021 13:08:48 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m17IG-0003Ue-PR
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:08:48 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17IF-000427-2o; Wed, 07 Jul 2021 13:08:47 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17IE-0007o4-Tt; Wed, 07 Jul 2021 13:08:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:References:Cc:To:From:Subject;
	bh=OrLD2pOmHbJxSzYkuiC+feOyiqiWerP7s26qMjwK/HI=; b=RaFelctTNmhb3IoZwR+PtuXCVD
	mFofCyfMicv9WW+xPat1bci+l5Y7oJNFfhNjVDrBHnOhKATnirRGv5U9MPi96Kgc8Ib4cRMwyIJTR
	7m0t5VFXUUqJQt1UgWoZLGv8SA272oZmkWqFPu+ydEyzVQ0o52GLiii6OdBChNexHkio=;
Subject: Re: [PATCH] xen/arm: smmuv1: Switch from kzalloc_array(..) to
 devm_kcalloc(..)
From: Julien Grall <julien@xen.org>
To: Rahul Singh <rahul.singh@arm.com>, xen-devel@lists.xenproject.org
Cc: bertrand.marquis@arm.com, Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <2c611dec5f1dbd6040d7a37d2d72ad2fc66e113f.1625568432.git.rahul.singh@arm.com>
 <d30b4c93-f45d-86cf-5966-3ff0f8788cca@xen.org>
Message-ID: <62ad240a-02b1-43eb-0d1f-ec14fc1b390f@xen.org>
Date: Wed, 7 Jul 2021 14:08:44 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <d30b4c93-f45d-86cf-5966-3ff0f8788cca@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 07/07/2021 14:07, Julien Grall wrote:
> Hi Rahul,
> 
> On 06/07/2021 11:53, Rahul Singh wrote:
>> Switch from kzalloc_array(..) to devm_kcalloc(..) when allocating the
>> SMR to make code coherent.
>>
>> Signed-off-by: Rahul Singh <rahul.singh@arm.com>
> 
> Acked-by: Julien Grall <jgrall@amazon.com>

And committed.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:10:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:10:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152207.281207 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17KA-0004qL-LT; Wed, 07 Jul 2021 13:10:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152207.281207; Wed, 07 Jul 2021 13:10:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17KA-0004qE-HP; Wed, 07 Jul 2021 13:10:46 +0000
Received: by outflank-mailman (input) for mailman id 152207;
 Wed, 07 Jul 2021 13:10:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=eUo+=L7=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m17K9-0004q8-Vy
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:10:46 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.21])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bc8efb4a-df24-11eb-84f3-12813bfff9fa;
 Wed, 07 Jul 2021 13:10:44 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx67DAbWMF
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Wed, 7 Jul 2021 15:10:37 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bc8efb4a-df24-11eb-84f3-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625663438;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=oJEcT6v2n/O5Zj5MH8UEB3htWfj1QTk7O+DK+AM3TXA=;
    b=oo+R6niRH+OrrUoMqQIzoiW06wRPeaUjy3jIpu8U/mS+sY+ZCIe8HMekXbJdk1FYb2
    oKj7b6rOsWAZHQOCFMnjKP44mewTDrWbaB+S/eWaZhLBxWLeKJ9j6Es4KqQlioJ2Ni/d
    u3/JU8fTYaP2zgFYmBzopTHdiIHCohad6nFVx0pdMaOPn24M8AdjYLMHSKfmFWn/eTqm
    F3ucmHTA5mRZzSUrwrCMh6Vbr/5o8kMhiEt1WwHPXg0Ow36uT/xqBTCts0H57DKpDLKd
    6P/j2nOnnj424a9zum6qSzcVCiPRxfHMKugGKPo+6KtFbzB4xETpBeLXBcX1GLzfnBrA
    qw/Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v1] tools: fix make rpmball
Date: Wed,  7 Jul 2021 15:10:34 +0200
Message-Id: <20210707131034.11854-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Commit 438c5ffa44e99cceb574c0f9946aacacdedd2952 ("rpmball: Adjust to
new rpm, do not require --force") attempted to handle stricter
directory permissions in newer distributions.

This introduced a few issues:
- /boot used to be a constant prior commit
  6475d700055fa952f7671cee982a23de2f5e4a7c ("use BOOT_DIR as xen.gz
  install location"), since this commit the location has to be
  referenced via ${BOOT_DIR}
- it assumed the prefix and the various configurable paths match the
  glob pattern /*/*/*

Adjust the code to build a filelist on demand and filter directories
from an installed filesystem.rpm. This works on a SUSE system, and
will likely work on a RedHat based system as well.

Take the opportunity to replace the usage of $RPM_BUILD_ROOT with
%buildroot, and use pushd/popd pairs.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/misc/mkrpm | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/tools/misc/mkrpm b/tools/misc/mkrpm
index 68819b2d73..b31054444d 100644
--- a/tools/misc/mkrpm
+++ b/tools/misc/mkrpm
@@ -50,20 +50,35 @@ uninstall.
 %build
 
 %install
-rm -rf \$RPM_BUILD_ROOT
-mkdir -p \$RPM_BUILD_ROOT
-cd %{_xenroot}
-dist/install.sh \$RPM_BUILD_ROOT/
+rm -rf %{buildroot}
+mkdir -p %{buildroot}
+pushd %{_xenroot}
+dist/install.sh %{buildroot}
+
+pushd %{buildroot}
+popd
+rm -f dist/filesystem.txt
+rm -f dist/directories.txt
+rm -f dist/files.txt
+find %{buildroot} -type d | sed 's|^%{buildroot}||' | sort > dist/directories.txt
+find %{buildroot} -type f | sed 's|^%{buildroot}||' | sort > dist/files.txt
+find %{buildroot} -type l | sed 's|^%{buildroot}||' | sort >> dist/files.txt
+if rpm -ql filesystem > dist/filesystem.txt
+then
+  while read
+  do
+    sed -i "s|^\${REPLY}$||" dist/directories.txt
+  done < dist/filesystem.txt
+fi
+sed 's@^@%%dir @' dist/directories.txt >> dist/files.txt
 
-cd \$RPM_BUILD_ROOT
+popd
 
 %clean
-rm -rf \$RPM_BUILD_ROOT
+rm -rf %{buildroot}
 
-%files
+%files -f %{_xenroot}/dist/files.txt
 %defattr(-,root,root,-)
-/*/*/*
-/boot/*
 
 %post
 EOF


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:14:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:14:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152216.281225 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Np-0005c1-7K; Wed, 07 Jul 2021 13:14:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152216.281225; Wed, 07 Jul 2021 13:14:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Np-0005bu-4F; Wed, 07 Jul 2021 13:14:33 +0000
Received: by outflank-mailman (input) for mailman id 152216;
 Wed, 07 Jul 2021 13:14:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m17No-0005bo-CC
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:14:32 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 43a5e0ee-df25-11eb-84f3-12813bfff9fa;
 Wed, 07 Jul 2021 13:14:31 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2054.outbound.protection.outlook.com [104.47.13.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-3-Dqg1EKf0OzWj9vBSIX4jpg-1;
 Wed, 07 Jul 2021 15:14:29 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Wed, 7 Jul
 2021 13:14:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 13:14:24 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0267.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 13:14:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 43a5e0ee-df25-11eb-84f3-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625663670;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=65JL41WTVgv4+rHK0UnlBXiPMK5sbKJAZAsMq5ZAbpA=;
	b=bUTNpU6CiODCOrPtSr63yBM9kpJ1a+BKBSyLoYjxJbDbLjtsFN2Whb80QhJBKboZ0WpV6Z
	aEKjmu92Xd8iSadKmmPzzHTnOlGo1yfQN65luPu/QYiK1Y5BxcwvXxmsbyIiMhhR7BNjGP
	0wfJ5sDfqx3f8j1Wf4JkIfNbmwq3Qvo=
X-MC-Unique: Dqg1EKf0OzWj9vBSIX4jpg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cc7DH7KPQXjd+56fbX+kPA2e6WtNWzDMbqXJ7iOF9d0aZ5rAGnCskpmkjXh3Sm7/rcqcrT37cyYfnA1x48yGpBqlcdwS2u2iAl1mVxTJf4BV0O6H2gpwQ1wJM5YbjIgjJzgW6iy7q28tdrzK9Rhcp+RRzR2sG3PEEmZjIyJraVOnhgZ0VAH76M+TNXoXDWuu29rpcX3elAin1NRhKhrJbZ+BRQY48NWnhU8riO/qOnQluVlcMWirJX3Z3SjirkpM1pUM57Mu2hW2MNHoVFrwggIyFzk9GvmGh0Gt1JMvIpHdR1NY4u+xPnGvm0L/MHX8JChgqOiJPG1pD4B1Aoo0HA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=65JL41WTVgv4+rHK0UnlBXiPMK5sbKJAZAsMq5ZAbpA=;
 b=kip8yTxEafAaufvhECo9amLXjlr98ndVXu+Z3Xa0jmsl6PAuZHbiCeOJBVOZrcQG6MVJtA116HxEJ+gWwWDtg2bmT1MIZBLd+9qyf4M7/bttn/1r+MaR6QoC16DEuQ7B7aj6VZoMvM37p4qabF89y2kvyt3tLNyiEQHvvl4QxV0Ri2AnbyltHhJh7GPjSxoRtQXd1xJlIoYaB5Bp5KRwdIvYmfVhdyy5SbPfs3qOSGjWsv80M3/THntnS1cuVIYY2XZMWdrE40+GAzCgg9GMpCi2MTKnd0xwJAXpzQ1E3O6QMp6k6y96cGGBW0rXkS3Ovt574CK4OyPKItbFeiH97Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Julien Grall <julien@xen.org>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, sstabellini@kernel.org, jgross@suse.com,
 christian.lindig@citrix.com, dave@recoil.org,
 xen-devel@lists.xenproject.org, Igor Druzhinin <igor.druzhinin@citrix.com>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
 <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
 <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e2def3e5-8e00-8b52-2d0f-5231963607ee@suse.com>
Date: Wed, 7 Jul 2021 15:14:23 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0267.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3e8973ad-e299-49ee-b240-08d94149243a
X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB516512C8B674C2CA1E825A83B31A9@VI1PR04MB5165.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	tAQkFyYLqfSqhvG0l+aNI5umxyditUg4eF5SuHUZU1p/QAAnKM4FxJiDKwAKb/zrO1IG91pKaIBAQGHRrMdpZzIejdF6E1QQbjd1ecIuY54Pit4pRXzMWimTlhTdfmsEu1x6EzOg8lArijAEOJ6I/gRFWn6kBxf6gpnqHCOYUEyMjMIKw9vnO6wgdZ3gu1MLhZboAoLq65E7P+LI/0EWsaRSssytQbjbNlxw68sQLvv03Sw8pvupXJEnTY7/V+UgnFzz1JETvCKmHW1sS14w4bb71xNuKuJx21cYL2hR9ChiMzFHuk3jRNWU26UsgxgHk9enQeFSHK3FIZGjYl3ONuH650QxOT1x/LmUPzCjJmQ4rt1MsUSggtCGwKx8DmWFUgckHyJyk48KQIn/9Xt5k3YuQnHTzNZe0R52tCLSdJ5rbmRtuDITUr7h4xFXlGpyUXaDaLRsK5k/SCBJ2b3gVPq4RH5zTC4QYnorCWoYEKOTRs/3d+WFnuCZQcmSC4I3qBfI4p1Kt4nTbIhs/n0al042C3y7+N62X43d0iF/CJngVwpSlKyq2qsHpvvepUp9Z7Fk1LfF5uvkHtrb6ZWLHL2xfavbrWY+vLynI3L5pCN4pBXeEhoWx2z1GT1JpDPN3USNxt2vsNALHlN75BIHod8R/W0+Xfv1/9TXcIWdRh796ZByO/fT4Gki8yk3bpQUod0SbeU98oCitruyzKGRUfQ13/C9A9j54d6vlXo6SIxWCiCJxbjtY8wKtVbJD/aA
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(366004)(376002)(396003)(39860400002)(4326008)(31686004)(2906002)(38100700002)(83380400001)(31696002)(86362001)(5660300002)(53546011)(36756003)(66476007)(7416002)(6916009)(956004)(2616005)(16576012)(8936002)(186003)(26005)(478600001)(66556008)(66946007)(316002)(6486002)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?2+Gu0yf2J/p+1oPP9F7Y1MyVBpzpkgdI+YaQwQ5?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3e8973ad-e299-49ee-b240-08d94149243a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 13:14:24.7639
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: jlUBhiEjHqnRjth5DOHJtGGxPgv7ItKSKu9wGrHUsCp0ji2lsjEfHJtxyeQjejDOcDc0OJcGC3jKje85j1BaYg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165

On 07.07.2021 14:59, Julien Grall wrote:
> On 07/07/2021 13:54, Jan Beulich wrote:
>> On 07.07.2021 14:51, Julien Grall wrote:
>>> On 07/07/2021 02:02, Igor Druzhinin wrote:
>>>> Current unit8_t for pirq argument in this interface is too restrictive
>>>> causing failures on modern hardware with lots of GSIs. That extends down to
>>>> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
>>>> as well. Internal Xen structures appear to be fine. Existing users of
>>>> the interface in tree (libxl, ocaml and python bindings) are already using
>>>> int for pirq representation that should be wide enough.
>>>
>>> By "int", I am assuming you imply "signed int", is that correct?
>>>
>>> If so, should the function xc_domain_irq_permission() interface take an
>>> int in parameter and check it is not negative?
>>
>> Please let's not make things worse than they are, the more that
> 
> Well, what I am trying to prevent is surprise where the caller 
> mistakenly pass a negative value that will be interpreted as a positive 
> value...

This happens all the time when converting from signed to unsigned
perhaps just internally.

> Such issues are beyong annoying to debug...

No worse than any other out-of-bounds value, I would say.

>  > ./CODING_STYLE is unambiguous in cases like this one.
> 
> Hmmm... The coding style mention the fixed size but nothing about the 
> signedness of the type...

Oh, sorry, yes. The adjustment for this even pre-dates the two
patches to ./CODING_STYLE that I've on record as pending for
nearly two years.

> The alternative suggestion is to keep a unsigned type but check the bit 
> 31 is not set.

Why? Why not bit 30 or bit 27? There's nothing special about
bit 31 in an unsigned number. You'll get an error from the
underlying hypercall for any out of bounds values, not just
ones with bit 31, 30, or 27 set.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:21:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:21:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152222.281236 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17U8-00070C-Ve; Wed, 07 Jul 2021 13:21:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152222.281236; Wed, 07 Jul 2021 13:21:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17U8-000705-SY; Wed, 07 Jul 2021 13:21:04 +0000
Received: by outflank-mailman (input) for mailman id 152222;
 Wed, 07 Jul 2021 13:21:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m17U7-0006zz-Go
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:21:03 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2cb2e84a-df26-11eb-84f9-12813bfff9fa;
 Wed, 07 Jul 2021 13:21:02 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2056.outbound.protection.outlook.com [104.47.13.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-10-UtMYB5owMvi47TJKQsbj-A-1; Wed, 07 Jul 2021 15:21:00 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7152.eurprd04.prod.outlook.com (2603:10a6:800:12b::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 13:20:59 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 13:20:59 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR01CA0124.eurprd01.prod.exchangelabs.com (2603:10a6:208:168::29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Wed, 7 Jul 2021 13:20:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2cb2e84a-df26-11eb-84f9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625664061;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=NDe5x1HcQiz+IGxk4+avoPQjjVmWJ8XokHKV21BPs/E=;
	b=kTtpXsEE50spCpJFvbh+Y2/0CfYzrkEPOeFTLvOyOIp2++ijBUU9vP2Ow+CerAGFF44rEq
	klEllfev6jO9jP9cxr5yz67wG7FjTCI0q7weevVQpn+hMZoXMDHeENs14ZAwIKInr84L4R
	X2Rhw/zsPpPnBOZn16twGzwfTSlBd2w=
X-MC-Unique: UtMYB5owMvi47TJKQsbj-A-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=H6SnQLYKQY2GhCGgikpMGuptmpJN1+b0oSIcRH4ge7wKyiqCtESpwu5FZSlKIvGCs4ul51U09flPhFnK0XGUuaA0yh6krUR1wwgzHxAzxauSfwC8WX14AcQ1OtFnezsGkwhJw7Twi1xQVbXzagm22vBCPQH9OdRSQnzciN8bH4kEqQZSIopkwcl7ka/jJ6/xcPq9Mt5YrXUb2FnL4zT/hw4OyaBtj64pABySJByLpmlLUfu68m9Lk+anpdzkiauSwdPE8G3cyda6IYf1BecrCmffn+rluRCpU3/7DuC1o3mDZDSYqfhY2dsqGVnhcX1SgfJ9gRwc+x0HPnrbycnIvg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NDe5x1HcQiz+IGxk4+avoPQjjVmWJ8XokHKV21BPs/E=;
 b=DY38SMgEHYDO+OeIfmo+CxTGSx8TEw87SSlGSUSN8H415CKyXVjOc7sMloJU5RWwLDJCtGWzwmWTDGhJAyzl08LbTgrbFu+up5UPmt6MMYt7yExyUv+Hz9abGAlqKhXS1nw4L0ME9nBRWLfve/JN2mdmllboXzmxF8Z1hJPDHjCFMpBQvQE+qY22zZ0EpSSpgrODyaiogjRH5jQumnVN029gRQDk2gH+e144vHhY26S/xyLBL+kidWbUml7giShTyyTggITS3skPo2q8GSeW7ZVLgPhmDj+WPIv0+/VOBIJIMFsjvugqtViMvBnoljX4BBWu08/0MgDRHxxyWC2vcg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Paul Durrant <paul@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH 0/2] IOMMU: adjustments after ""IOMMU: make DMA containment of
 quarantined devices optional""
Message-ID: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
Date: Wed, 7 Jul 2021 15:20:58 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR01CA0124.eurprd01.prod.exchangelabs.com
 (2603:10a6:208:168::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3544201c-5a67-4a46-9af2-08d9414a0f69
X-MS-TrafficTypeDiagnostic: VI1PR04MB7152:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71521EA0D076118DE6519224B31A9@VI1PR04MB7152.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1775;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	oam9SHvAplajrDawyLHR7XqqtUNfGS3vlCBOFb0HGOwzStYxwGNMLJoYQnLxdQzsu2ouxg25/W0MLP9knUgjVUqMWfjDetZjgMT1o2YCXePtbYdSnTT94h5nMMM03dRyQ91KltLrhPKn+O2Z60mYyR2ycaA77Jy+I/2nHCnUoSiv0w2H4NopRfgTkYm62mpzGXVs2dlwQISaE7q+9W7cFtua69ZOnswJR2FT/OSxucJcLUrTDvCBVyzV8rLhhGZF7wDFsDtpIUsTDiqmrvDdfMNvCc7OXb/0hhKDxL8e5znjRpNdfqeKFGgpYjkameAUllAlOzjh3zmwZKH1Op+iIFYcOp7j/UShN98zovIIkzYY3wOtH44CGEJl7zPQfxjXRna/YLcdqIG0qaAjsOaGFhyjyYPq8bFGMr1SPkqGeJuZ1sadOqVUAutNaHD/TUGv0QqXFzXRgJ90Aw64Pj49Uclr9pww21PwGL4saXgQ0UtV58meBqedWhkrTmKzvzNxKAQHwjXCaXUREP9oU5dUUNJeUNBVwUaGHrR34ByQhR31FHpAgd5d1+9Tc5DKuEJHDUm2QFyOlLZWRmOWnBF2AkV861l2V5eL4Yl70CPdaxyXnXqzUkpVnIF+9ZfE4QWeengbvRQgpmWBjkAuGOHZc0eZzeabHzgSeztmVzZOgUx3gw64CqEyCsklFUtd37fJ5nRPsXwDaP3YWTMrWQGSyg==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(396003)(366004)(376002)(136003)(346002)(54906003)(83380400001)(4326008)(6486002)(2906002)(8676002)(5660300002)(558084003)(8936002)(2616005)(31696002)(86362001)(478600001)(956004)(31686004)(6916009)(38100700002)(66946007)(66476007)(36756003)(66556008)(26005)(16576012)(316002)(186003)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/D?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3544201c-5a67-4a46-9af2-08d9414a0f69
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 13:20:59.2529
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 6Ncm09Dzzt/Y8+5GN0M2Gk+THjhwJ5hpmiM9ZdBEFlHGSXg8uEMzgwwqxqPoRuryKaKDIbUVprucU2AAyOYhVg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7152

Andrew has spotted a bug, and I've noticed that a changelog entry
might be a good idea.

1: IOMMU: correct parsing of "quarantine=scratch-page"
2: CHANGELOG: record changed PCI device quarantining default

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:21:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:21:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152224.281248 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17UW-0007aH-Bf; Wed, 07 Jul 2021 13:21:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152224.281248; Wed, 07 Jul 2021 13:21:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17UW-0007aA-8R; Wed, 07 Jul 2021 13:21:28 +0000
Received: by outflank-mailman (input) for mailman id 152224;
 Wed, 07 Jul 2021 13:21:26 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m17UU-0007Yd-91
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:21:26 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17US-0004Ex-Kn; Wed, 07 Jul 2021 13:21:24 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17US-0000FZ-EP; Wed, 07 Jul 2021 13:21:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=lKJQdrPONTWbMSY5P67R06HxZt0hC7NyNvJeWredor8=; b=3gEs327oEFYwf5afPodjdwicWi
	RSLtHWx5JsdmCJMGXz7SZLOmRFdIvFGFEGipkxtMIxKoL7Nsw4IuXhUHrXMBSbvEvJxx8KYbENOS+
	3j3imLdQ+NjKL0ZKdxnc03zjCYS8RdtQ0JnUMofHX0jCaIjd7i36ynuhFsBJmi/th6VI=;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Jan Beulich <jbeulich@suse.com>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, sstabellini@kernel.org, jgross@suse.com,
 christian.lindig@citrix.com, dave@recoil.org,
 xen-devel@lists.xenproject.org, Igor Druzhinin <igor.druzhinin@citrix.com>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
 <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
 <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
 <e2def3e5-8e00-8b52-2d0f-5231963607ee@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <54b5ff4b-09ae-429b-4468-c1b4691079ed@xen.org>
Date: Wed, 7 Jul 2021 14:21:21 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <e2def3e5-8e00-8b52-2d0f-5231963607ee@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 07/07/2021 14:14, Jan Beulich wrote:
> On 07.07.2021 14:59, Julien Grall wrote:
>> On 07/07/2021 13:54, Jan Beulich wrote:
>>> On 07.07.2021 14:51, Julien Grall wrote:
>>>> On 07/07/2021 02:02, Igor Druzhinin wrote:
>>>>> Current unit8_t for pirq argument in this interface is too restrictive
>>>>> causing failures on modern hardware with lots of GSIs. That extends down to
>>>>> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
>>>>> as well. Internal Xen structures appear to be fine. Existing users of
>>>>> the interface in tree (libxl, ocaml and python bindings) are already using
>>>>> int for pirq representation that should be wide enough.
>>>>
>>>> By "int", I am assuming you imply "signed int", is that correct?
>>>>
>>>> If so, should the function xc_domain_irq_permission() interface take an
>>>> int in parameter and check it is not negative?
>>>
>>> Please let's not make things worse than they are, the more that
>>
>> Well, what I am trying to prevent is surprise where the caller
>> mistakenly pass a negative value that will be interpreted as a positive
>> value...
> 
> This happens all the time when converting from signed to unsigned
> perhaps just internally.

I am not sure what's your point... Yes there are place in Xen that 
switch between signed and unsigned. We likely have some (latent) problem 
because of that...

> 
>> Such issues are beyong annoying to debug...
> 
> No worse than any other out-of-bounds value, I would say.
> 
>>   > ./CODING_STYLE is unambiguous in cases like this one.
>>
>> Hmmm... The coding style mention the fixed size but nothing about the
>> signedness of the type...
> 
> Oh, sorry, yes. The adjustment for this even pre-dates the two
> patches to ./CODING_STYLE that I've on record as pending for
> nearly two years.
> 
>> The alternative suggestion is to keep a unsigned type but check the bit
>> 31 is not set.
> 
> Why? Why not bit 30 or bit 27? There's nothing special about
> bit 31 in an unsigned number.

Bit 31 is the signed bit for signed number. The check would make sure that:
  1) The value will fit other hypercall (the PIRQ is described as int in 
a few of the structure)
  2) Catch potentially caller that would use the number that could 
potentially be interpreted as negative by other part of the hypervisor.

That said, I can live with the implicit signed -> unsigned convertion, 
however the commit message should at least be clarified because it is 
misleading.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:21:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:21:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152231.281259 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Uz-0008Cw-KM; Wed, 07 Jul 2021 13:21:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152231.281259; Wed, 07 Jul 2021 13:21:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Uz-0008Cp-H4; Wed, 07 Jul 2021 13:21:57 +0000
Received: by outflank-mailman (input) for mailman id 152231;
 Wed, 07 Jul 2021 13:21:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m17Uy-0008At-Of
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:21:56 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c1de5a09-3c00-47a0-bedc-69c5bee40225;
 Wed, 07 Jul 2021 13:21:56 +0000 (UTC)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2053.outbound.protection.outlook.com [104.47.1.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-s4DZJzIMOkKEgz6T1YWEnw-1; Wed, 07 Jul 2021 15:21:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5744.eurprd04.prod.outlook.com (2603:10a6:803:e4::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 13:21:52 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 13:21:52 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR01CA0140.eurprd01.prod.exchangelabs.com (2603:10a6:208:168::45) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Wed, 7 Jul 2021 13:21:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c1de5a09-3c00-47a0-bedc-69c5bee40225
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625664115;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=fncpQ+McTCrlAfJoD70a97RLi0M1zPqC/GNQoM1kqag=;
	b=HhGg4bySulKqshNwg326YyoHHJ3249WUMUBLtvMrpqGYogHKh2Oo4/GVp3bJz5gPhg2I7h
	Xj/R+Mpk/KYkllyPu+UAJ+IwVvPJIaf/m/Bt5sm/zJMbiufAEx9Of2vPOie/GPqoeR8mw9
	KNA8vkF6RZIJJ101RLP4EIWCRDYGfiM=
X-MC-Unique: s4DZJzIMOkKEgz6T1YWEnw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=X0N86sDZCIe98xMT1VbEClNpaGvTgaj7ZCZBOc0TAMZhX41GzpWkCLb0IPD4X1+GMbIrCx76keLDtw+bfY2OyE5et1XfLY5PFVUvnw1pAh5XC9rd9lH6hy1ibRzjsJgeZFbsylsP0NHqjpLo1orhJw/T2EAFavOyMDy2p7hlNKrjlZv2MwxDBpGNzbAm4LlbBLvdIZqbLTVV6WofQSp67KGT7IwGqUsDu2YvAM8LvkYE2279yF4C7h7Vq9SQE1HPvUMkRnaywPDyPijdi+uZuhEHu3jMeelBoNNNKoQ9iX+wL3kgY5GXCQSVkCkSvBsDC4MeyViHbumY1QPGdfFPGw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fncpQ+McTCrlAfJoD70a97RLi0M1zPqC/GNQoM1kqag=;
 b=GrB2pUfZdnXi05f8vSmSaaV3MNfbpNYWwpPN2RUsw4zFkoXfDq/zosXWn5CqqiKqB8yyd5zw0iPgSj0sCn1mUFN9lVzeBmd/d+/hIm1S/OP/mTU3onbpiH9J2Ek0huCJ1cnZ6tA87OyEchAmLV8DrH4sEZOoqVzTDegg3nvDCkZOYStcK6kSZDJUwXMNNUoDf2zYdVUNHxy2eE8A8LwDf63dpDKcDwg1e32/K9jt4pqcgfgMkwYPSuZxX9J9SSk3WcTP9WDZnPxWZ+zk3a3rZZbmWW8NGitPKYzMjAUkBLLmln6CBbbBlp5g/TGZpM2N5QLl5TqtOqJne3cFRaWxog==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 1/2] IOMMU: correct parsing of "quarantine=scratch-page"
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Paul Durrant <paul@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
Message-ID: <dd85d77a-34c4-dbdf-1822-28612fe9f7ac@suse.com>
Date: Wed, 7 Jul 2021 15:21:51 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR01CA0140.eurprd01.prod.exchangelabs.com
 (2603:10a6:208:168::45) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5c58528c-8120-47f6-d3fe-08d9414a2f2e
X-MS-TrafficTypeDiagnostic: VI1PR04MB5744:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5744943F8F0377A954D641A5B31A9@VI1PR04MB5744.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:227;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Qg/vUmxLKMM9vHcAhBYFhQg26ApQbEcRkl+kOwszdQl/lzmXa06+AmCeGwvYRVSK5gJcDEUBgbjN/bh3sZaiaTls6twrhCph9Ep97miI3kOGKN7XlPLXEoyPNHJZpPR8JdDmHAJd7VLxQ3Cx5ELwk4MsazWaxi86yEc04uxxMnHX+7p+SsrhOGJI/RriJkDnvfuEjWjevrIH4mbtd0yYtnWcvZmqqJbUYi6y0qUsdF81BdRUZIhJUCj7zUgMEm264DX8aKxzn+IVbfaKI8+BL7d38ABiOWnAG8eLmAlYza+MHP0N5uzOs7/Qj2/0C55Pi0qT/c25Z98ZC/YSHfoZryN+fOHcFwL8GiRIF/P5ymOMisdmWkQnaRWjH54dfSzR0H8i5Vq7Q7Cs0N9PF0Zf4jZCXIwFcIBzzwfkhIHxjsqj/V1/0XRwYz3R3Ozi9ynb5SkovrQhqaPCcqrYYxPwiT5ANg9mZuEKvrB6IbV3ZcCv11/Hz4GX/pf/4tO976Ds9RIvd+hJbSFIh0GlqT/KYiVJ/jzdc4OkL1kTctVbAfVrEpoqIBqiwq8kZzCFCuSngYiv0isYNHgruC42CIGroffwy7U3sxIKdBK0m4f9OxbVlvql/i36JYUc8QmMjGaaStrEpoRyRZ3sDOltxnSwnAT/PLHDaH78RzHVvrWIur+We4NXvyLlcvdoUHcKIC3v4XujjAOJ9yU1j86TVn+TPQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(136003)(346002)(396003)(39850400004)(366004)(316002)(2906002)(86362001)(6916009)(36756003)(66946007)(66476007)(6486002)(31686004)(66556008)(8676002)(4326008)(54906003)(186003)(83380400001)(956004)(478600001)(26005)(2616005)(31696002)(8936002)(38100700002)(5660300002)(16576012)(4744005)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5c58528c-8120-47f6-d3fe-08d9414a2f2e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 13:21:52.5758
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ApOQcDRSAs1oXp96OUXmq8PDBHZnhrt+bVRplm2dv6NvJK9bDujBJg99/BmZEYvYrAg8HWKvv4rZNQFw1crWjg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5744

During the multiple renames of the sub-option I apparently forgot to
update the left side of the &&, and this pretty consistently.

Fixes: 980d6acf1517 ("IOMMU: make DMA containment of quarantined devices optional")

Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -82,7 +82,7 @@ static int __init parse_iommu_param(cons
 #ifdef CONFIG_HAS_PCI
         else if ( (val = parse_boolean("quarantine", s, ss)) >= 0 )
             iommu_quarantine = val;
-        else if ( ss == s + 15 && !strncmp(s, "quarantine=scratch-page", 23) )
+        else if ( ss == s + 23 && !strncmp(s, "quarantine=scratch-page", 23) )
             iommu_quarantine = IOMMU_quarantine_scratch_page;
 #endif
 #ifdef CONFIG_X86



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:22:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:22:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152236.281269 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17VL-0000Hm-T8; Wed, 07 Jul 2021 13:22:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152236.281269; Wed, 07 Jul 2021 13:22:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17VL-0000Hf-Q4; Wed, 07 Jul 2021 13:22:19 +0000
Received: by outflank-mailman (input) for mailman id 152236;
 Wed, 07 Jul 2021 13:22:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m17VK-0000HJ-7t
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:22:18 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7b84e6c8-62dc-42f9-ac14-821e335fd29b;
 Wed, 07 Jul 2021 13:22:17 +0000 (UTC)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2057.outbound.protection.outlook.com [104.47.1.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-9-dODoB0YhOwmibbreY6eeJQ-1;
 Wed, 07 Jul 2021 15:22:15 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5744.eurprd04.prod.outlook.com (2603:10a6:803:e4::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 13:22:14 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 13:22:14 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM9P192CA0015.EURP192.PROD.OUTLOOK.COM (2603:10a6:20b:21d::20) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 13:22:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7b84e6c8-62dc-42f9-ac14-821e335fd29b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625664136;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=fo3qeA+6UmJlxNh6K9+yjBGqnUH5uGZG6DVR676Q2CE=;
	b=i0ppTXcY9MmRfXOMKCQnX6iPoOKvY6qN1z/jsCn3k/ch+Vdm4t1XXE0XzCKQWyaDO0zdo7
	WTOsUEidXo50YoYdffM0WyokiTqbQkc5Mk4K/4kglYzTMkBkc8T9Sv3S/uvIEdUZEhBj0k
	n36WHytkZMxOLMcVOlpuK0NejpE9rW8=
X-MC-Unique: dODoB0YhOwmibbreY6eeJQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EhK8/vFZxcHG9PmUDWPLbTepv6fUYY+Wtwgpibx6jsnSqJy8hIU7ugcXrxqE4Ep347TfS3M9R7MzugH8KhLs1q6oBm2KMfbQ/e1plx17iEgNM5K5h/WqcD3zOddKQdDGcGFa/hrG2PZAnzompNfCBAqAb90rpWmtKRIp0H1eY4bQ0NLTSaeO4EHBrlukPZvrdt1ydHYaardFCsMrwlco4AUwT6qFlgwxrlM5m54Kz7MroDMOOXsqhlX12M04UheNADdJYEnfan0rnqbP8lOBDFpvX7i1xdlZ6Hgj1ZXI/6it/onASrXnxYP7OugQDZPW7dfjeaLm5sHI9TY9xDzz3Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fo3qeA+6UmJlxNh6K9+yjBGqnUH5uGZG6DVR676Q2CE=;
 b=Hb8M3PNkyoLcNCALNGgByS91R6ILmUQWgkZcxRrbi2CW//5ZKKNyWj/CVl7T7GDVnG6UtfAVgJzctnGru2CnXCVYNivz0InkSCJo7Leny1+c0Q5sftqGeUkJcy7XEDdxtvJGuqDlsHyj6u2xw+jOq0ZwmQXP73QaU/grZJ+WajFv88GdECzgxx+L6vhZ5DENGe16gH/jkOPhs0y//CBC0TuEkIKwFU+rYuaZ0Jd+JZHjgf1K7u4w7Oa0824UbUGCF6eDfzibjHK/5cZm7JN/6Nin31iaKcb2BzM+F/010LqmafDRwBxqR3Ae/Vhy/D8Ox2AeTFEmGGU0ly/mFTpfoQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: [PATCH 2/2] CHANGELOG: record changed PCI device quarantining default
From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Paul Durrant <paul@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
Message-ID: <79d35b3a-4f13-fd5b-91db-2805c999b36d@suse.com>
Date: Wed, 7 Jul 2021 15:22:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM9P192CA0015.EURP192.PROD.OUTLOOK.COM
 (2603:10a6:20b:21d::20) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 79070728-01d0-405e-281a-08d9414a3c80
X-MS-TrafficTypeDiagnostic: VI1PR04MB5744:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5744DDE115D8E7EAB53EE640B31A9@VI1PR04MB5744.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1850;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	qW/IvKQKY53j/iy9GqPJrZCwO00vJt2EpIuh6B1ZXqgYUBnIL0bX+DK9DHjMmvnTdaQc9Vlg1XH7xmP3P7TAXpbL8IFJp52DZWcL5uIG2Wg5xdGDQcg1o7ho9TfO8GTLJ/vGtZ0rnFln79Z8D4p3bok3QLmLY/gAH73wXFyrNHIUyrt9b74zAg2dbyXQ6N9xBIcKS9Q4CqKZaGsTGTGRaGwfQvguKKDp5/0ujb28YSlDbS0or+hKprCD6fFpueuwAYoSO7/rwM+V2p738taNnL4+qL2ilBLTt7Z+B63NXgDyfuiIdh3llym4eWWf8rhO9prKkW5X9pEd9/QqAnmp56Bq57EmFZ2oTZoYOD+r8bRLMcIkZ5XSHFogcTetJHpqY5e+40t9uPRMcbY/ucKe7MjYSYuNhpdpx+uKL5sB2TubJv3TNMVVtYOhtQgy/2WBikk3rqdaFIn5WT4F9/1PNL7JoCztfeFLtCLPXPsVDHeC3K6hOHbdvtGmC69DsLu4+uz9iUgyzcyOmNDHmhkSRB31aJikRi/L7qQVzTSTc7/nKCRRtLdeFsZezCP5vbPSc0FErvOdxysoXF4oWpSQ8QI7z7LxVfYuwLEbTaiGNa96/e6wrdy8MiN/Y/AZ/+NVx0L96xINZJ6LUjs/OWScnhO9eS3ylDpdE5lP3GAmyfz/xHdyataGZP53ttMuATYe161tqApYkqooFu+HfGJmuooS8ywJ+09LJMXoikxvY9Oq9p2FlI9c52ocGXJaIZ9/rVKSvtAufu41hjuqMOe/nKSv9JBccwrciqhOSsu51LwhNiNEGMGBjN0sdQir5jb1sVEtHAxkbiRvyfDpY3J71Dye9qJxWwtF0lxe1LQpHqOuZMHbFK4rVN9TtMD3PHwdByHHoOxfba1MMyeBDEwybQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(136003)(39860400002)(346002)(396003)(366004)(316002)(2906002)(86362001)(6916009)(36756003)(66946007)(66476007)(6486002)(31686004)(66556008)(8676002)(4326008)(54906003)(186003)(83380400001)(956004)(478600001)(26005)(2616005)(31696002)(8936002)(38100700002)(5660300002)(16576012)(4744005)(59356011)(219803003)(207903002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/NS?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 79070728-01d0-405e-281a-08d9414a3c80
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 13:22:14.9182
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 4dizkaLkMzYLOY49eYw8GhBOP+tJnf5BrqB33o/1E9Oww9KKOscVkhmS4nbkzHJyB3BrniVcjlA1298cdsIoCQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5744

This amends commit 980d6acf1517 ("IOMMU: make DMA containment of
quarantined devices optional").

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,13 @@ The format is based on [Keep a Changelog
  - XENSTORED_ROOTDIR environment variable from configuartion files and
    initscripts, due to being unused.
 
+### Changed
+ - Quarantining of passed-through PCI devices no longer defaults to directing I/O to a scratch
+   page, matching original post-XSA-302 behavior (albeit the change was also backported, first
+   appearing in 4.12.2 and 4.11.4). Prior (4.13...4.15-like) behavior can be arranged for
+   either by enabling the IOMMU_QUARANTINE_SCRATCH_PAGE setting at build (configuration) time
+   or by passing "iommu=quarantine=scratch-page" on the hypervisor command line.
+
 ## [4.15.0 UNRELEASED](https://xenbits.xen.org/gitweb/?p=xen.git;a=shortlog;h=RELEASE-4.15.0) - TBD
 
 ### Added / support upgraded



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:24:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:24:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152246.281281 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17X9-00018e-Aq; Wed, 07 Jul 2021 13:24:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152246.281281; Wed, 07 Jul 2021 13:24:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17X9-00018X-7S; Wed, 07 Jul 2021 13:24:11 +0000
Received: by outflank-mailman (input) for mailman id 152246;
 Wed, 07 Jul 2021 13:24:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m17X7-00018R-K1
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:24:09 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17X4-0004KE-SM; Wed, 07 Jul 2021 13:24:06 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17X4-0000ij-LZ; Wed, 07 Jul 2021 13:24:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=qA8ks7QSVF22p77JnjeIaVKM2tEVwKY+dsx/olvAyg0=; b=NvGHeAL2IWpzSEjlOSRlDiuC2M
	NK/nMudYuCHaO6LJG6aXuAt3IH616a0x+KMiJmBzQXp8dhvuK/dCCvKS0I55F5AJGbXGBBt7PvOjh
	510NvJDO+R2wXftpEaeV2knOkRLyzZU0kLC/CMAyyZ+WwjDBdlMsY66ogznvPu2u+/UQ=;
Subject: Re: [PATCH v7 9/9] docs/doxygen: doxygen documentation for
 grant_table.h
To: Luca Fancellu <luca.fancellu@arm.com>
Cc: xen-devel@lists.xenproject.org,
 Bertrand Marquis <bertrand.marquis@arm.com>, wei.chen@arm.com,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Stefano Stabellini
 <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <20210705105103.14509-1-luca.fancellu@arm.com>
 <20210705105103.14509-10-luca.fancellu@arm.com>
 <d1915fbc-83af-e6df-980d-71abf21306fc@xen.org>
 <D5BE99B1-7BDD-4FD3-856A-D4697F899C39@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <9fea9a9f-9f18-2c21-e557-2b6c3128f8d0@xen.org>
Date: Wed, 7 Jul 2021 14:24:04 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <D5BE99B1-7BDD-4FD3-856A-D4697F899C39@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Luca,

On 06/07/2021 09:44, Luca Fancellu wrote:
> 
> 
>> On 5 Jul 2021, at 15:20, Julien Grall <julien@xen.org> wrote:
>>
>> Hi Luca,
>>
>> On 05/07/2021 11:51, Luca Fancellu wrote:
>>> Modification to include/public/grant_table.h:
>>> 1) Add doxygen tags to:
>>>   - Create Grant tables section
>>>   - include variables in the generated documentation
>>>   - Used @keepindent/@endkeepindent to enclose comment
>>>     section that are indented using spaces, to keep
>>>     the indentation.
>>> 2) Add .rst file for grant table
>>> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
>>> ---
>>> v7 changes:
>>> - commit message changed
>>> - Add comment about grant table queries and uses
>>> to the documentation
>>> v6 changes:
>>> - Fix misaligned comment
>>> - Moved comments to make them display in the docs
>>> - Included more documentation in the docs
>>> v5 changes:
>>> - Move GNTCOPY_* define next to the flags field
>>> v4 changes:
>>> - Used @keepindent/@endkeepindent doxygen commands
>>>    to keep text with spaces indentation.
>>> - drop changes to grant_entry_v1 comment, it will
>>>    be changed and included in the docs in a future patch
>>> - Move docs .rst to "common" folder
>>> v3 changes:
>>> - removed tags to skip anonymous union/struct
>>> - moved back comment pointed out by Jan
>>> - moved down defines related to struct gnttab_copy
>>>    as pointed out by Jan
>>> v2 changes:
>>> - Revert back to anonymous union/struct
>>> - add doxygen tags to skip anonymous union/struct
>>> ---
>>>   docs/hypercall-interfaces/arm64.rst           |   1 +
>>>   .../common/grant_tables.rst                   |   9 +
>>>   docs/xen-doxygen/doxy_input.list              |   1 +
>>>   xen/include/public/grant_table.h              | 459 +++++++++++-------
>>>   4 files changed, 288 insertions(+), 182 deletions(-)
>>>   create mode 100644 docs/hypercall-interfaces/common/grant_tables.rst
>>> diff --git a/docs/hypercall-interfaces/arm64.rst b/docs/hypercall-interfaces/arm64.rst
>>> index 5e701a2adc..cb4c0d13de 100644
>>> --- a/docs/hypercall-interfaces/arm64.rst
>>> +++ b/docs/hypercall-interfaces/arm64.rst
>>> @@ -8,6 +8,7 @@ Starting points
>>>   .. toctree::
>>>      :maxdepth: 2
>>>   +   common/grant_tables
>>>       Functions
>>> diff --git a/docs/hypercall-interfaces/common/grant_tables.rst b/docs/hypercall-interfaces/common/grant_tables.rst
>>> new file mode 100644
>>> index 0000000000..b8a1ef8759
>>> --- /dev/null
>>> +++ b/docs/hypercall-interfaces/common/grant_tables.rst
>>> @@ -0,0 +1,9 @@
>>> +.. SPDX-License-Identifier: CC-BY-4.0
>>> +
>>> +Grant Tables
>>> +============
>>> +
>>> +.. doxygengroup:: grant_table
>>> +   :project: Xen
>>> +   :members:
>>> +   :undoc-members:
>>> diff --git a/docs/xen-doxygen/doxy_input.list b/docs/xen-doxygen/doxy_input.list
>>> index e69de29bb2..233d692fa7 100644
>>> --- a/docs/xen-doxygen/doxy_input.list
>>> +++ b/docs/xen-doxygen/doxy_input.list
>>> @@ -0,0 +1 @@
>>> +xen/include/public/grant_table.h
>>> diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant_table.h
>>> index 84b1d26b36..2f826c952d 100644
>>> --- a/xen/include/public/grant_table.h
>>> +++ b/xen/include/public/grant_table.h
>>> @@ -25,15 +25,19 @@
>>>    * Copyright (c) 2004, K A Fraser
>>>    */
>>>   +/**
>>> + * @file
>>> + * @brief Interface for granting foreign access to page frames, and receiving
>>> + * page-ownership transfers.
>>> + */
>>> +
>>>   #ifndef __XEN_PUBLIC_GRANT_TABLE_H__
>>>   #define __XEN_PUBLIC_GRANT_TABLE_H__
>>>     #include "xen.h"
>>>   -/*
>>> - * `incontents 150 gnttab Grant Tables
>>
> 
> Hi Julien,
> 
>> `incontents is used by the script xen-headers to generate I believe [1].
>>
>> Looking through the commit messages, I can't find any suggestion that the existing documentation has been retired or else. So can you clarify what's the intention?
>>
>> If the plan to move to doxygen, then I think that
>>   1) the commit message or cover letter ought to explain why this is better than the current documentation
>>   2) you should remove xen-headers or outline the plan to do that. Note that after this series, I believe the bits for the grant table would end up to be broken.
>>
> 
> Yes you are right, maybe it’s better to have a future serie that can reproduce and substitute the actual documentation.

I am actually not in favor of keeping two way to output the documentation.

What I am after is some clarification and plan so we don't end up to 
release 4.16 with half of the hypercalls described in doxygen and the 
other in the existing documentation.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:26:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:26:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152254.281291 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Z0-0001pA-Pz; Wed, 07 Jul 2021 13:26:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152254.281291; Wed, 07 Jul 2021 13:26:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17Z0-0001p3-N0; Wed, 07 Jul 2021 13:26:06 +0000
Received: by outflank-mailman (input) for mailman id 152254;
 Wed, 07 Jul 2021 13:26:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m17Yy-0001ox-Kj
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:26:04 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a0f71c90-e46b-4090-bb5f-07e176f52eb5;
 Wed, 07 Jul 2021 13:26:03 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2173.outbound.protection.outlook.com [104.47.17.173])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-27-MpuVOfrQM9-6QztmboerjQ-2; Wed, 07 Jul 2021 15:26:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2446.eurprd04.prod.outlook.com (2603:10a6:800:4e::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Wed, 7 Jul
 2021 13:25:57 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 13:25:57 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0012.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 13:25:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a0f71c90-e46b-4090-bb5f-07e176f52eb5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625664362;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=oAFFDxJ3LX2tGCe1hgD1zbWpu5jizhMYV8tALOBvuyY=;
	b=N8W3DKWIxvV8+WFB7qQXcB/9jx0OKxXqwdARk2bNPH1C7UKKueWWmx05i38f4hVDxHeY1V
	Yhv26eC9J4m0Y8cD7bq9OtYiwq8ogwoId/Vi8CSJn74eV3XpbXbS9fLGWd8JxCYsz355hc
	WdEW7oMlomQwpfOmKiLFz/4voIeub2w=
X-MC-Unique: MpuVOfrQM9-6QztmboerjQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=h/6B57mHukHM47llD2razUf+zD8nQfF+spaehtudMuEit6eTM6vD/KrMacT9fhQpbV9CS4frs+iNlgWj/kWxzCHzIyzBkQbueQAsbJL5arQ1bl2QXcQLAi0lpxn3oXu/Xd9ZNYjYzfVw9j5Fwu636Mc8vrHfZQaZz18avxHao3KVINYrFQUFbIRV/J3iGq0wvKX2jcUTTX+lCdWN71qgOI1dwbb4qqCa91ylepRU4NAYkjqQqPXsf1DBOMKm8nAa49J6eyIA+QABocaJevjP+xkhYQ7CjbJlefg3f1MNyENBxg5nO3bPSu9e50/gZ2dKJiT3Sx1YPeP57wV3G9NT7Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oAFFDxJ3LX2tGCe1hgD1zbWpu5jizhMYV8tALOBvuyY=;
 b=SxaCqcqfLYINgftwLKr/mDIo2uBFtQYTiqM/4N+6pg6WzRuBuJBLdfKa3P49jPWC+1JgK5HtsgVZ4ZFJC/DsDXWKj35fD5mkJdzb5PW1i0h8lmeXZQe/l2kg98toqquUPqzJn8fv73W3t9pGvpARNTFKAAj9Mq0x6Bw2eYVq0tgCOyuDb1iE4HK9yEUCze8ewvQ1QAkfax+ePfz663wnGAllAoqbKvLqZMFawn5KU456W5NXGZ1NoXQTnUAXkljZe2Wya/kd3S4OzkjboR1t/Mv+gue5Vh+66EFObhbC5W5izo0+7kAZtZVAm/3li1k/TnVUIIm0nMLC1N8U5Z/dWQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Julien Grall <julien@xen.org>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, sstabellini@kernel.org, jgross@suse.com,
 christian.lindig@citrix.com, dave@recoil.org,
 xen-devel@lists.xenproject.org, Igor Druzhinin <igor.druzhinin@citrix.com>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
 <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
 <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
 <e2def3e5-8e00-8b52-2d0f-5231963607ee@suse.com>
 <54b5ff4b-09ae-429b-4468-c1b4691079ed@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <15e22f1d-33b8-84a0-5074-4f3aa62ef548@suse.com>
Date: Wed, 7 Jul 2021 15:25:55 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <54b5ff4b-09ae-429b-4468-c1b4691079ed@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0012.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5997620a-031d-44f1-0c65-08d9414ac0dc
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2446:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2446FBDA35FBD8CE5DD6DB02B31A9@VI1PR0401MB2446.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NX71J67nz8CnFn+Fw6E9kMPhOB240PGG4ofpF2wtof1K4SK5V2QEFSc9zwse6uup+u4SvbzcnZ1ypop5PPFGuWwinN5+6gkfuItnjxZR/4zw1AE47ZSKsEVOm7zmgyOEwBpJko/1qQPje1l4KX0XGu1UvnJflrIJGRumwTgq96zBquaHZjQWKSH70/AipSGtCbKuc+bMfrjgjALpYuLpluJaEn/S0z7q2F3RNU06yTTubxuU6JrfrFFWLRAmGYhPZ9raaumEdVQstoa52rlr0mM8Lgm/WRB6aFLOS96rzqE5c2An0G8+PKzAoJR6s8dPsew3Jj3Qkejcv/+BLrmsTW10RyTvYECK8EFFrOIno4+3vwG0MiSOOpTcQhW9lcci0ULVWRv6C0bJert4mV4IHGqvxCv99vvbLoDKUpFQagyZTFoOArrM1cWigoFxM4DzE9dOcLrShmlAhisTymbxxMjxCfMfcehifdE79jyLQebNQofk4fcCgagKY5xzgvNUetaAbLp3Tuhny1xn/oRvEli1rtoHrPOa+7hxTBGnInNFRaCww4bDW8dHFEYf1vQ9MYQyVun5G6SuPafAKU3JlG3aUrMRUA4yuPqLJtcPDboau5TUbg7ie5mCLmO1XmUWdc42SZIqoNzCov6te+M+ZQ+1S/2LrwobzsLd2/ib67E/HKPtWjAC8doW2S4Anf47UHcMsiDyGEWvNUw6Re6C3IpKUXgUDWz4/QONA1cTtM+4kcR4jYgWkCPb0xWn9DA1
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(366004)(136003)(39860400002)(396003)(31686004)(53546011)(83380400001)(7416002)(4326008)(956004)(36756003)(2906002)(86362001)(8676002)(16576012)(38100700002)(66946007)(8936002)(66556008)(5660300002)(6916009)(66476007)(186003)(2616005)(31696002)(26005)(478600001)(6486002)(316002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5997620a-031d-44f1-0c65-08d9414ac0dc
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 13:25:56.9757
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: G9KnpDfWL0jKRmTOg2DAF16QG7OtEXMErpTvmoLW/GNnWalupf+QVNu604v9JcaQRsmuMJOzNObGm4AbofiKOw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2446

On 07.07.2021 15:21, Julien Grall wrote:
> On 07/07/2021 14:14, Jan Beulich wrote:
>> On 07.07.2021 14:59, Julien Grall wrote:
>>> The alternative suggestion is to keep a unsigned type but check the bit
>>> 31 is not set.
>>
>> Why? Why not bit 30 or bit 27? There's nothing special about
>> bit 31 in an unsigned number.
> 
> Bit 31 is the signed bit for signed number. The check would make sure that:
>   1) The value will fit other hypercall (the PIRQ is described as int in 
> a few of the structure)
>   2) Catch potentially caller that would use the number that could 
> potentially be interpreted as negative by other part of the hypervisor.

And getting refused equally as out of range. Plain int uses will
want replacing imo, but perhaps we don't have room to do so in the
public interface (outside of the tools-only part of it at least).

> That said, I can live with the implicit signed -> unsigned convertion, 
> however the commit message should at least be clarified because it is 
> misleading.

You'll have to work this out with Igor. I can't see anything that's
misleading.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:34:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:34:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152260.281302 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17hK-0003FV-MP; Wed, 07 Jul 2021 13:34:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152260.281302; Wed, 07 Jul 2021 13:34:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17hK-0003FO-JX; Wed, 07 Jul 2021 13:34:42 +0000
Received: by outflank-mailman (input) for mailman id 152260;
 Wed, 07 Jul 2021 13:34:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=eUo+=L7=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m17hJ-0003FI-PN
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:34:41 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.53])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 12e8de71-3da8-42be-b3e4-d5d35636c67e;
 Wed, 07 Jul 2021 13:34:40 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx67DYUWSC
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Wed, 7 Jul 2021 15:34:30 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 12e8de71-3da8-42be-b3e4-d5d35636c67e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625664871;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=0nhO/PpPjfpLsMrbxcBU//PQhJSjAjPPCwokRgs2DYA=;
    b=d4RfbBVfmqPaR/byPhFsf6d3N3NmZW3N+BxJ1uSSxxb7n2C3RlD2lBbGDUis+wBkV0
    itBkqzlr2n3TVq+c4B71wHcD7EUC5PtnK+8TfKfaTKcaJ7m9u0BzmKVSJIutfTKe2sGX
    78q4+mlw0F4HSfBJu4jmH16XWxIbweLxopc/kY5upxmOHRPhilbhm2CU2APb6L5xInVB
    OTorNuTOrH1+zzw2xL2BR8aw9klXnMe/qELbqNTTfiiFHPUQ9gMqAjn6UEz9nS7LOYzK
    NDNZYZHxeJVieHJDbL+zl0zBOb8pduAm1m5gsjyZiT2WDFq62LdaUpE33i3lcTfVXTOc
    rELA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: how handle domU checkpoints properly
Date: Wed,  7 Jul 2021 15:34:27 +0200
Message-Id: <20210707133427.15679-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

During 'xl save -c|-p' the monitoring xl process will exit
because it gets a
LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN/LIBXL_SHUTDOWN_REASON_SUSPEND event.

While this is correct for plain 'xl save' usage, the result is that
other events such a shutdown/reboot/etc are not handled anymore for
the domU. In case of shutdown the domU must be destroyed manually.

Add a flag to indicate the domU should remain active.
Continue the monitoring loop, make sure further events are received,
wait until the shutdown state changes.

This is incomplete because repeated checkpoint or pause operations are
not handled.

Any idea how to actually implemented 'xl save -p' and 'xl save -c'?

Thanks,
Olaf

---
 tools/xl/Makefile         |  3 ++-
 tools/xl/xl.h             |  1 +
 tools/xl/xl_saverestore.c | 15 ++++++++++++
 tools/xl/xl_vmcontrol.c   | 48 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/tools/xl/Makefile b/tools/xl/Makefile
index 656b21c7da..572f4e795f 100644
--- a/tools/xl/Makefile
+++ b/tools/xl/Makefile
@@ -26,6 +26,7 @@ XL_OBJS += xl_vmcontrol.o xl_saverestore.o xl_migrate.o
 XL_OBJS += xl_vdispl.o xl_vsnd.o xl_vkb.o
 
 $(XL_OBJS): CFLAGS += $(CFLAGS_libxentoollog)
+$(XL_OBJS): CFLAGS += $(CFLAGS_libxenstore)
 $(XL_OBJS): CFLAGS += $(CFLAGS_XL)
 $(XL_OBJS): CFLAGS += -include $(XEN_ROOT)/tools/config.h # libxl_json.h needs it.
 
@@ -38,7 +39,7 @@ $(XL_OBJS): _paths.h
 all: xl
 
 xl: $(XL_OBJS)
-	$(CC) $(LDFLAGS) -o $@ $(XL_OBJS) $(LDLIBS_libxenutil) $(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) -lyajl $(APPEND_LDFLAGS)
+	$(CC) $(LDFLAGS) -o $@ $(XL_OBJS) $(LDLIBS_libxenutil) $(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) $(LDLIBS_libxenstore) -lyajl $(APPEND_LDFLAGS)
 
 .PHONY: install
 install: all
diff --git a/tools/xl/xl.h b/tools/xl/xl.h
index 7e23f30192..4282435b93 100644
--- a/tools/xl/xl.h
+++ b/tools/xl/xl.h
@@ -300,6 +300,7 @@ typedef enum {
     DOMAIN_RESTART_SOFT_RESET,   /* Soft reset should be performed */
 } domain_restart_type;
 
+#define XL_SAVE_PAUSE_CHECKPOINT "xl-save-pc"
 extern void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh);
 extern void apply_global_affinity_masks(libxl_domain_type type,
                                         libxl_bitmap *vcpu_affinity_array,
diff --git a/tools/xl/xl_saverestore.c b/tools/xl/xl_saverestore.c
index 476d4d9a6a..a04730bb7c 100644
--- a/tools/xl/xl_saverestore.c
+++ b/tools/xl/xl_saverestore.c
@@ -21,6 +21,7 @@
 #include <time.h>
 #include <unistd.h>
 
+#include <xenstore.h>
 #include <libxl.h>
 #include <libxl_utils.h>
 #include <libxlutil.h>
@@ -127,6 +128,8 @@ static int save_domain(uint32_t domid, int preserve_domid,
                        const char *filename, int checkpoint,
                        int leavepaused, const char *override_config_file)
 {
+    struct xs_handle *xsh = NULL;
+    char path[80];
     int fd;
     uint8_t *config_data;
     int config_len;
@@ -144,12 +147,24 @@ static int save_domain(uint32_t domid, int preserve_domid,
         fprintf(stderr, "Failed to open temp file %s for writing\n", filename);
         exit(EXIT_FAILURE);
     }
+    if (leavepaused || checkpoint)
+    {
+        snprintf(path, sizeof(path), "/libxl/%u/" XL_SAVE_PAUSE_CHECKPOINT, domid);
+        xsh = xs_open(0);
+        if (xsh)
+            xs_write(xsh, XBT_NULL, path, leavepaused ? "p" : "c", 1);
+    }
 
     save_domain_core_writeconfig(fd, filename, config_data, config_len);
 
     int rc = libxl_domain_suspend(ctx, domid, fd, &props, NULL);
     close(fd);
 
+    if (xsh) {
+        xs_rm(xsh, XBT_NULL, path);
+        xs_close(xsh);
+    }
+
     if (rc < 0) {
         fprintf(stderr, "Failed to save domain, resuming domain\n");
         libxl_domain_resume(ctx, domid, 1, 0);
diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c
index 435155a033..2378f3f9dc 100644
--- a/tools/xl/xl_vmcontrol.c
+++ b/tools/xl/xl_vmcontrol.c
@@ -22,6 +22,7 @@
 #include <time.h>
 #include <unistd.h>
 
+#include <xenstore.h>
 #include <libxl.h>
 #include <libxl_utils.h>
 #include <libxlutil.h>
@@ -663,6 +664,10 @@ int create_domain(struct domain_create *dom_info)
     int migrate_fd = dom_info->migrate_fd;
     bool config_in_json;
 
+    libxl_event_type type = 0;
+    uint8_t shutdown_reason = 0;
+    bool is_in_suspend = false;
+
     int i;
     int need_daemon = daemonize;
     int ret, rc;
@@ -1029,6 +1034,24 @@ start:
         ret = domain_wait_event(domid, &event);
         if (ret) goto out;
 
+        if (is_in_suspend) {
+            if ( type == event->type && event->u.domain_shutdown.shutdown_reason == shutdown_reason) {
+                struct timespec req = { .tv_nsec = 123456789, };
+                libxl_evdisable_domain_death(ctx, deathw);
+                deathw = NULL;
+                ret = libxl_evenable_domain_death(ctx, domid, 0, &deathw);
+                if (ret) goto out;
+                libxl_event_free(ctx, event);
+                LOG("Domain %u still suspended", domid);
+                nanosleep(&req, NULL);
+                continue;
+            }
+            is_in_suspend = false;
+            LOG("Domain %u left suspend state", domid);
+        }
+        type = event->type;
+        shutdown_reason = event->u.domain_shutdown.shutdown_reason;
+
         switch (event->type) {
 
         case LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN:
@@ -1090,14 +1113,39 @@ start:
                 goto start;
 
             case DOMAIN_RESTART_NONE:
+                {
+                struct xs_handle *xsh = xs_open(0);
+
+                if (xsh) {
+                    char path[80];
+                    unsigned int len = 0;
+                    char *val;
+
+                    snprintf(path, sizeof(path), "/libxl/%u/" XL_SAVE_PAUSE_CHECKPOINT, domid);
+                    val = xs_read(xsh, XBT_NULL, path, &len);
+                    xs_close(xsh);
+                    LOG("Got %p '%s' from %s, len %u", val, val ?:"", path, len);
+                    free(val);
+                    if (val)
+                    {
+                        is_in_suspend = true;
+                        libxl_evdisable_domain_death(ctx, deathw);
+                        deathw = NULL;
+                        ret = libxl_evenable_domain_death(ctx, domid, 0, &deathw);
+                        if (ret) goto out;
+                        break;
+                    }
+                }
                 LOG("Done. Exiting now");
                 libxl_event_free(ctx, event);
                 ret = 0;
                 goto out;
+                }
 
             default:
                 abort();
             }
+            break;
 
         case LIBXL_EVENT_TYPE_DOMAIN_DEATH:
             LOG("Domain %u has been destroyed.", domid);


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:40:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:40:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152266.281314 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17mW-0004If-CD; Wed, 07 Jul 2021 13:40:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152266.281314; Wed, 07 Jul 2021 13:40:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17mW-0004Hq-8W; Wed, 07 Jul 2021 13:40:04 +0000
Received: by outflank-mailman (input) for mailman id 152266;
 Wed, 07 Jul 2021 13:40:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m17mU-00046d-Up
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:40:02 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17mT-0004b6-Jh; Wed, 07 Jul 2021 13:40:01 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m17mT-0001mN-D3; Wed, 07 Jul 2021 13:40:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=qlVcr/O7pKpKxioCJo42QzPZjf76ML8OSLj6pF9e1fk=; b=sxVRoR9ahoiAqaegSnWvjyaz6/
	dm8DM0VVa9xfXFKdAMsMcnnJ9ZhvL2j7XahvTnC/NSBQ3yGaq/6lcPH/sWHi2meuPGv7vSDPbQG3E
	vHRroGTkap7IPrlpMEtoDJncHQ7tL65TzEDpViZfTffgoUezvjLidJJ9JMhrFwfnQ9Vo=;
Subject: Re: [PATCH v5 1/4] xen: XENMEM_exchange should only be used/compiled
 for arch supporting PV guest
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-2-julien@xen.org>
 <8c0100ab-dfd7-9c64-c89d-338db62cf20b@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <3bb6ff6a-a4e8-daaf-daaf-a6efe07819d4@xen.org>
Date: Wed, 7 Jul 2021 14:39:59 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <8c0100ab-dfd7-9c64-c89d-338db62cf20b@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 05/07/2021 09:41, Jan Beulich wrote:
> On 03.07.2021 19:11, Julien Grall wrote:
>> Changes in v5:
>>      - Removed the #ifdef CONFIG_X86 as they are not necessary anymore
>>      - Used paging_mode_translate() rather than is_pv_domain()
> 
> Is there a particular reason you use this in favor of steal_page()'s
> paging_mode_external()?

This is what you suggested in v4 [1]. I can switch to 
paging_mode_external() if this is what you now prefer.

> 
>> @@ -815,6 +812,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
>>       if ( __copy_field_to_guest(arg, &exch, nr_exchanged) )
>>           rc = -EFAULT;
> 
> I'm afraid that for correctness of the interface you need to keep
> this part even in the !PV case.

Xen never initializes the field nr_exchanged. Instead, it expects the 
guest to set to 0. So I am not quite to sure why we would need to keep 
this line.

> Seeing the 2nd use of steal_page() I wonder if it was too much to
> ask you to do a similar transformation for gnttab_transfer(), even
> if it's not directly related to the immediate purpose of this
> series. If you're not going to do so, I guess I'd put it on my list
> (perhaps together with moving x86'es steal_page() and dropping
> Arm's stub).

I will have a look to #ifdef the code in gnttab_transfer() and drop 
steal_page() on Arm.

Cheers,

[1] <834db49d-dda5-784c-1135-8427086a04eb@suse.com>

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 13:42:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 13:42:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152272.281324 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17on-0005Iw-Qn; Wed, 07 Jul 2021 13:42:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152272.281324; Wed, 07 Jul 2021 13:42:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m17on-0005Ip-Nv; Wed, 07 Jul 2021 13:42:25 +0000
Received: by outflank-mailman (input) for mailman id 152272;
 Wed, 07 Jul 2021 13:42:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=CPPN=L7=gmail.com=rosbrookn@srs-us1.protection.inumbo.net>)
 id 1m17om-0005Hz-BJ
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 13:42:24 +0000
Received: from mail-qk1-x72b.google.com (unknown [2607:f8b0:4864:20::72b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id baf12199-dc83-4084-824e-0a4eb225fd14;
 Wed, 07 Jul 2021 13:42:23 +0000 (UTC)
Received: by mail-qk1-x72b.google.com with SMTP id g4so1951266qkl.1
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 06:42:23 -0700 (PDT)
Received: from FED-nrosbr-BE.crux.rad.ainfosec.com
 (209-217-208-226.northland.net. [209.217.208.226])
 by smtp.gmail.com with ESMTPSA id j22sm6519486qtj.60.2021.07.07.06.42.22
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 07 Jul 2021 06:42:23 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: baf12199-dc83-4084-824e-0a4eb225fd14
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:content-transfer-encoding:in-reply-to;
        bh=j4p0u0fuhtdIpJ0E0HqO2KkD+dV8LnlYdEq+XUDIrHs=;
        b=CR+QAEyv24VaUwdY7sY0x9Tcjaz/jwaPYr7wZtkl11l2cKE4/wpZg5ukSUEWszB/vF
         XizqFAb/S6BqSArWDXWxMMPYBfhjpMumnS4hSbJMc8Y8cdd25K7yZZrVOoB+dMSsl9kg
         k5Qw/paXPUrtHSz1yiXXBqIiPpS3+DrBTuWQukzN4v0XhbyWq5KOR0bukmhKRN6MVX7i
         a8OE6M8dwqEyrd9X0+QePry/Z1GLtVhBNAKtQ91Y0PrTAGw75O3rPuXB09qt7yFxs7lO
         WlDhgHuCCbYNQTeog7aCoM0PvR2WTJ/elsg6DDjwR4jwYVoe9oG+4gWeuGh9LSx3glyv
         dtFA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:cc:subject:message-id:references
         :mime-version:content-disposition:content-transfer-encoding
         :in-reply-to;
        bh=j4p0u0fuhtdIpJ0E0HqO2KkD+dV8LnlYdEq+XUDIrHs=;
        b=EKhWaBsSRG8XsHUrh769Bhr8WL1lef6Yob3Dt02cwB/wAy2I7rbHHawOP57ugbwT5Z
         PiUbxf1PZNjTf1kzla7CbMpsskQuFnkioHD9zQoKcTnSmQV/dQsa6CBMKw422FyBAmzd
         E8ljZuc9kc5JzDcryhZCk7GdUIvj3ymcnOHGNltgiB/2xdYMq+/I0In5fg1agHTC17aU
         bfQ5a4jYVagucvwj/psTwiEouQTkBO3HyB3ghZrw9znQ+/0mCyb2Pj/32UGtlaExwQhq
         /kTaA9+FbsyasfDz2apHwbWQ4LD7HrD+vib6t7hdA/fM0BQt+LS8pV++Cfy70MY5m8Ow
         K2GA==
X-Gm-Message-State: AOAM530pZentU8mcsqv/eiIMUUjiTamZwToFHCMUPh6beieE7N7C+jnT
	uPkxA0vGWwiUvFmwdGFEjyM=
X-Google-Smtp-Source: ABdhPJwblpdm84+mNFg4BXAmuVqmiKyPArt8qmfTJKZomyUEnVzbURjjj/MsPAPQ6KuuPPBhO9IGpA==
X-Received: by 2002:a05:620a:1094:: with SMTP id g20mr25283101qkk.379.1625665343499;
        Wed, 07 Jul 2021 06:42:23 -0700 (PDT)
Date: Wed, 7 Jul 2021 09:42:20 -0400
From: Nick Rosbrook <rosbrookn@gmail.com>
To: Roger Pau Monne <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
	Ting-Wei Lan <lantw44@gmail.com>
Subject: Re: [PATCH] tools/go: honor append build flags
Message-ID: <YOWvPLcQywmEIPdI@FED-nrosbr-BE.crux.rad.ainfosec.com>
References: <20210707071531.69001-1-roger.pau@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210707071531.69001-1-roger.pau@citrix.com>

On Wed, Jul 07, 2021 at 09:15:31AM +0200, Roger Pau Monne wrote:
> Make the go build use APPEND_{C/LD}FLAGS when necessary, just like
> other parts of the build.
> 
> Reported-by: Ting-Wei Lan <lantw44@gmail.com>
> Signed-off-by: Roger Pau Monn <roger.pau@citrix.com>
> ---
> Note sure if it's the best way to add the appended flags, I'm not
> familiar with the go build system. In any case this fixes the build
> when required libraries (ie: yajl) are not part of the system search
> path and instead passed in APPEND_{C/LD}FLAGS.

This is right. The CGO_{C,LD}FLAGS environment variables basically work
just like regular {C,LD}FLAGS.

> ---
>  tools/golang/xenlight/Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/golang/xenlight/Makefile b/tools/golang/xenlight/Makefile
> index e394ef9b2b..64671f246c 100644
> --- a/tools/golang/xenlight/Makefile
> +++ b/tools/golang/xenlight/Makefile
> @@ -27,7 +27,7 @@ GOXL_GEN_FILES = types.gen.go helpers.gen.go
>  # so that it can find the actual library.
>  .PHONY: build
>  build: xenlight.go $(GOXL_GEN_FILES)
> -	CGO_CFLAGS="$(CFLAGS_libxenlight) $(CFLAGS_libxentoollog)" CGO_LDFLAGS="$(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) -L$(XEN_libxenlight) -L$(XEN_libxentoollog)" $(GO) build -x
> +	CGO_CFLAGS="$(CFLAGS_libxenlight) $(CFLAGS_libxentoollog) $(APPEND_CFLAGS)" CGO_LDFLAGS="$(LDLIBS_libxenlight) $(LDLIBS_libxentoollog) -L$(XEN_libxenlight) -L$(XEN_libxentoollog) $(APPEND_LDFLAGS)" $(GO) build -x
>  
>  .PHONY: install
>  install: build
> -- 
> 2.31.1
> 
> 
Acked-by: Nick Rosbrook <rosbrookn@ainfosec.com>

Thanks,
NR


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:06:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:06:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152283.281348 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18By-0007uq-2R; Wed, 07 Jul 2021 14:06:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152283.281348; Wed, 07 Jul 2021 14:06:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Bx-0007uj-Uw; Wed, 07 Jul 2021 14:06:21 +0000
Received: by outflank-mailman (input) for mailman id 152283;
 Wed, 07 Jul 2021 14:06:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m18Bx-0007uc-5j
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:06:21 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 80395b24-df2c-11eb-8501-12813bfff9fa;
 Wed, 07 Jul 2021 14:06:19 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2174.outbound.protection.outlook.com [104.47.17.174])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-31-C08O5834OuSzjHwN4RafyA-1; Wed, 07 Jul 2021 16:06:17 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5325.eurprd04.prod.outlook.com (2603:10a6:803:60::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 14:06:15 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 14:06:15 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM8P189CA0025.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:218::30) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 14:06:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 80395b24-df2c-11eb-8501-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625666778;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=9B4QMoAz84sWLdKdNyycB29RXmYDNBP30HXYT4g+Bxg=;
	b=c+WNc1Fb16YEvUlv+q7wDXYNkKliMOFIS+IQYeDJbAJWfB85iH+2Yc9UPHE5Mh7DfrTl48
	QokWRyEozirGdLzh4LW9Vvl1rSzDZNujgtyA3ViNZSyA9vh5yjrBlHqixYRqWkze8tBqzt
	92/uJctrFujC/CVdpxaIIK8mQcqbYdI=
X-MC-Unique: C08O5834OuSzjHwN4RafyA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=A617n2hYtGDnvKWefrmlF7bm1BanZ72dWku0D1e9GzpzNf9X9I9bFSOFOwPdH4O2Z9wXAiKcvmzpREuk+BiS5pMbd2EIu/L2i06Ao0gNWuVV5Mb2yMUhqBDgAV+5xNsLNkBErPNfumij1pyJ5dZsGFXU/m2DXHXfcWPe/maBu+4SElykbFchrpye9MpWYI5w7gbBaKTwFVzcUY/NGtKrhpkvL6TkNthJkiAhNGOq8wMKpoLhphYZFTZD6iNsxDSr1Dhj1gobE8HxAsjPASGmD9JVq+WoJLUsKUMe9xtaVSbA1JSO0BMD3ZyLmclpO3clrY/tZIQSvCg6Dyr3VPxw0w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9B4QMoAz84sWLdKdNyycB29RXmYDNBP30HXYT4g+Bxg=;
 b=F6IiRzaTx+ciHTSN2DOYCOEEJRKRYfUc26AJMOaxZYHGUMZaghgBg5OKg/QjGLTxQ4/X1WjCSHJRnQm9Fobc8X/Vro8vweJ5I+6/x2qyEI0ePecnc/JKrZUiLvb79oN9bNByVrBUB7lIPIeO3BhX4a8YYAY3bsgcFLGHn9IvZ4SCanAFw3KIAEN3/MbXWhev1mog3hjr3QxrApra6pVSt2qeIzxIhAJMvKSa96/NCe2vQAt35GQdrsaQE+I0bhX0pCG8pbHZ6zR1dQwywx6WDanz8ZM+QkS2VBXdsJ2m3jc717CJSoQbU2G0fVh54pSHvwFFzVnYHp1zKrDANBSNGQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v5 1/4] xen: XENMEM_exchange should only be used/compiled
 for arch supporting PV guest
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-2-julien@xen.org>
 <8c0100ab-dfd7-9c64-c89d-338db62cf20b@suse.com>
 <3bb6ff6a-a4e8-daaf-daaf-a6efe07819d4@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <58669e8e-8397-a5ee-5c54-cd18bbb2718c@suse.com>
Date: Wed, 7 Jul 2021 16:06:14 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <3bb6ff6a-a4e8-daaf-daaf-a6efe07819d4@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM8P189CA0025.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:20b:218::30) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 33340764-fbb7-43bf-21c5-08d94150627f
X-MS-TrafficTypeDiagnostic: VI1PR04MB5325:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5325366FD859AE0699F1EF24B31A9@VI1PR04MB5325.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	RZnBarX3FiDesnXui5RJDMu/HOUZVfiVl0onHc4Chqa8lqeIuhBoUdgEKGkbDYd4owtrllxjs6wCc28cdmiLq6M2VRSd+3sky4vxMBy26+yL57PR1qq6WismjFt/xqaOvbGGF4wKsD5nnJOasZ0ei38tZfPDohZiJO379VdSWVMlO0o0E3PkYXkbtq0L/CZk0EM7F82zYomzKawa5L530LlvgeWxIi5N5ZkFnHBzvh4k5XCXSdXr9Uo/cJHIshyjuo5i8+5kyyZdezgGXka2PBfJgb2q5BXZNGtkoVrgNzudukKR68UIfuUbmaQdRk/MMCLgDnzLvm+c/3Ql3v0v4vMGG15n+9HJYzat8XR2CqWvUgp4ht34I3dEbPFqjVGjqf4md54AvrsQ6i9gEWTtykW3Br8E91s0E/uiW7cQ6XQAl0kqtFQ0amnffAELMWC0BMrrlIv0aF1T1k9SXrQOPBG8fFgNlmVGc/gUFkBzFl3O64vRJYXKuk+VVQV3T5vOwLm2zG7yQJK5Tk6BXaloPj2vhI8jTPqGBVwSiV/vjayH4elPtQkx2sxouOSyQ/hDX6BdKiRjLEkEdrZ4lHlvLGVyndSIDSVDbCeFxvRrVzeoDqlGQW1SLP6qEShF5+BzlDgv9bUy7gnVUCCZsZlR/TbrqqDYFhWxKTrgeKFp3E3ovRRTLn/++RPz2zei5B1hWyb/sT794qYEbBvEsyGbax2puNKjEo5QMCqteyjsuI0=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(346002)(376002)(39860400002)(2906002)(54906003)(36756003)(8676002)(38100700002)(4326008)(16576012)(316002)(6916009)(31696002)(53546011)(66946007)(6486002)(31686004)(26005)(478600001)(5660300002)(186003)(8936002)(86362001)(66476007)(83380400001)(956004)(2616005)(66556008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 33340764-fbb7-43bf-21c5-08d94150627f
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 14:06:15.6423
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: XPdzv5WvMw/015FXt4vew+IdSTnKdRPwAS3CtzXIG+0467GG2GfFy1sv5cscD0HojjZGi03tcc6p7VgJcmI5Og==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5325

On 07.07.2021 15:39, Julien Grall wrote:
> On 05/07/2021 09:41, Jan Beulich wrote:
>> On 03.07.2021 19:11, Julien Grall wrote:
>>> Changes in v5:
>>>      - Removed the #ifdef CONFIG_X86 as they are not necessary anymore
>>>      - Used paging_mode_translate() rather than is_pv_domain()
>>
>> Is there a particular reason you use this in favor of steal_page()'s
>> paging_mode_external()?
> 
> This is what you suggested in v4 [1]. I can switch to 
> paging_mode_external() if this is what you now prefer.

Well, I did say this would be better than is_pv_*(). I probably didn't
pay enough attention to you already pointing out paging_mode_external()
in the description; I'm sorry. On x86 both are in sync anyway, and I
have to admit I don't see clearly enough which of the two would be the
right one to use here, partly because I'm afraid I also don't see why
steal_page() has such a restriction in the first place (which you now
build upon).

>>> @@ -815,6 +812,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
>>>       if ( __copy_field_to_guest(arg, &exch, nr_exchanged) )
>>>           rc = -EFAULT;
>>
>> I'm afraid that for correctness of the interface you need to keep
>> this part even in the !PV case.
> 
> Xen never initializes the field nr_exchanged. Instead, it expects the 
> guest to set to 0. So I am not quite to sure why we would need to keep 
> this line.

Hmm, the public header is wrong then, as it documents the field as
[OUT] only _despite_ the shouting warning in point 5 of the comment.
I guess I never really understood why this sub-op differs from
others in where the continuation indicator lives.

Never mind then, indeed no code adjustment needed:
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:08:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:08:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152288.281359 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18E1-00006d-FD; Wed, 07 Jul 2021 14:08:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152288.281359; Wed, 07 Jul 2021 14:08:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18E1-00006W-CE; Wed, 07 Jul 2021 14:08:29 +0000
Received: by outflank-mailman (input) for mailman id 152288;
 Wed, 07 Jul 2021 14:08:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m18E0-00006M-Ah; Wed, 07 Jul 2021 14:08:28 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m18Dz-0005B9-VR; Wed, 07 Jul 2021 14:08:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m18Dz-000493-Np; Wed, 07 Jul 2021 14:08:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m18Dz-0008R0-NK; Wed, 07 Jul 2021 14:08:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=HicMAfhVsDdH2gvGxpieMiWjQlQyh6xb/Qboi5fcKOI=; b=TlIN6rtdXgb+UmISLhhsfu4RpT
	ide3srYpwDw7eB56WE6oklfyPG0dx0bN5+q0Sx9X4WrTPmH72m0/Y/QtpEzo6ciYxZdBgIYAnQcLg
	9m+Bkbmv6/p7VpjXMKfK5kpYHqrLRpGdc8+jzZln6WW+mRKgfjDP2kN/0rpRusWqLZiY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163401-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163401: regressions - trouble: blocked/fail
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-arm64-xsm:xen-build:fail:regression
    xen-unstable-smoke:build-armhf:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    xen=b8d27e5b3391f4f90744f6ce75c02bd2661f7788
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 14:08:27 +0000

flight 163401 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163401/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163326
 build-arm64-xsm               6 xen-build                fail REGR. vs. 163326
 build-armhf                   6 xen-build                fail REGR. vs. 163326

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm       1 build-check(1)               blocked  n/a
 test-armhf-armhf-xl           1 build-check(1)               blocked  n/a

version targeted for testing:
 xen                  b8d27e5b3391f4f90744f6ce75c02bd2661f7788
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    1 days
Failing since        163328  2021-07-06 13:01:47 Z    1 days   16 attempts
Testing same since   163398  2021-07-07 11:00:30 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Jan Beulich <jbeulich@suse.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              fail    
 build-amd64                                                  fail    
 build-armhf                                                  fail    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          blocked 
 test-arm64-arm64-xl-xsm                                      blocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit b8d27e5b3391f4f90744f6ce75c02bd2661f7788
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:35:54 2021 +0200

    x86/mem-sharing: mov {get,put}_two_gfns()
    
    There's no reason for every CU including p2m.h to have these two
    functions compiled, when they're both mem-sharing specific right now and
    for the foreseeable future.
    
    Largely just code movement, with some style tweaks, the inline-s
    dropped, and "put" being made consistent with "get" as to their NULL
    checking of the passed in pointer to struct two_gfns.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

commit 09af2d01a2fe6a0af08598bdfe12c9707f4d82ba
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:35:12 2021 +0200

    x86/mem-sharing: ensure consistent lock order in get_two_gfns()
    
    While the comment validly says "Sort by domain, if same domain by gfn",
    the implementation also included equal domain IDs in the first part of
    the check, thus rending the second part entirely dead and leaving
    deadlock potential when there's only a single domain involved.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

commit 980d6acf1517f0602e6dcf05ea922cf14c95e9c0
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:32:45 2021 +0200

    IOMMU: make DMA containment of quarantined devices optional
    
    Containing still in flight DMA was introduced to work around certain
    devices / systems hanging hard upon hitting a "not-present" IOMMU fault.
    Passing through (such) devices (on such systems) is inherently insecure
    (as guests could easily arrange for IOMMU faults of any kind to occur).
    Defaulting to a mode where admins may not even become aware of issues
    with devices can be considered undesirable. Therefore convert this mode
    of operation to an optional one, not one enabled by default.
    
    This involves resurrecting code commit ea38867831da ("x86 / iommu: set
    up a scratch page in the quarantine domain") did remove, in a slightly
    extended and abstracted fashion. Here, instead of reintroducing a pretty
    pointless use of "goto" in domain_context_unmap(), and instead of making
    the function (at least temporarily) inconsistent, take the opportunity
    and replace the other similarly pointless "goto" as well.
    
    In order to key the re-instated bypasses off of there (not) being a root
    page table this further requires moving the allocate_domain_resources()
    invocation from reassign_device() to amd_iommu_setup_domain_device() (or
    else reassign_device() would allocate a root page table anyway); this is
    benign to the second caller of the latter function.
    
    In VT-d's domain_context_unmap(), instead of adding yet another
    "goto out" when all that's wanted is a "return", eliminate the "out"
    label at the same time.
    
    Take the opportunity and also limit the control to builds supporting
    PCI.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Paul Durrant <paul@xen.org>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>

commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:18:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:18:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152296.281373 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Ne-0001dk-Dp; Wed, 07 Jul 2021 14:18:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152296.281373; Wed, 07 Jul 2021 14:18:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Ne-0001dd-Am; Wed, 07 Jul 2021 14:18:26 +0000
Received: by outflank-mailman (input) for mailman id 152296;
 Wed, 07 Jul 2021 14:18:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m18Nd-0001dX-8s
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:18:25 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1b658c29-e916-4871-a95a-f218f0dba423;
 Wed, 07 Jul 2021 14:18:24 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2108.outbound.protection.outlook.com [104.47.17.108])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-19-2IPE5EjaPMukArSOruKEvg-1; Wed, 07 Jul 2021 16:18:22 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3534.eurprd04.prod.outlook.com (2603:10a6:803:8::27)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Wed, 7 Jul
 2021 14:18:20 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 14:18:20 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0205.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::25) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 14:18:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1b658c29-e916-4871-a95a-f218f0dba423
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625667503;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=tiZd7ZFXOjWS8wcBhYOz5OyozrZLS7mhkzr92yVjytM=;
	b=DC3nvPhiMAhmMUe/GeRE61cBXfpzBvxvvdZSls+lHqMmH7UvTYiqkeUuRek4LuMUBPh1L5
	/aRPq2XgThiyuh/vD4VcX0DLGRh5UsiOP1LzvcNvfHGZLehD55vBZBJRdKkTauFC0/OzdA
	MxddafApTFRBJ812VMrtLmP0Z5dHQRc=
X-MC-Unique: 2IPE5EjaPMukArSOruKEvg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EukFQoSyVV9/J0fYOt1Cvxy15RotMOTmBmLRszRZjiE5wmnh+VQHbLQB0JhSAM0ty7HSSCXwOXnRs+ZN/ToSWD07lBbHSkYi+QGvHgn58M/OpRmOpUZ6jRIBZdGRZvT7fz9zxBm9yLx6Ua2hZLYzcVRkA1Oej69zmcR2CEA1Z6qjIHRKoZNCYPrZy/Md7dfoX6ETcfibMe0dOMbAEI1X5F5NZjuMFTAnrIXkKyHvDK/VOlr82I8N1FnU1snDG2Vs+M52dweSsxPW2FF/YfAQakK2hdxYyKMRpW/IDnM8iwEWufcCYDQdY24EcJQBgXrMPKZG/wLua44QJi0Ab/xgaQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=tiZd7ZFXOjWS8wcBhYOz5OyozrZLS7mhkzr92yVjytM=;
 b=kXRpiAmunwpeklu1ZnH2dKVqCdM2APU0rnQcJV5MnC5mWZJuNzI/t8rSxbVwIerlq7L4N08lvlX4jtLTLGaF+k7xf9sruG2KAmf7Md965qZufx57xaATHy0EPKPcIeOApfGfsjyU4YSfZSmUnsuTmvH05hyb3pRCT0uJuWRoXsbkNUTMOXgq+tDqthZobM/ImKueh1sojs4hUKG7EipH41JcpERobVgTBUKWo8O81LZqLZfNLmgtNCCotwlf/dDJhyu0FMx/5EwY96+LJFH9HvjV4uiSOdncAC6vfIW38Th+gCPWw1Vd0qH1X5c6KZ5JeBjkGvLv8/Pz/Bwa0OvUag==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 02/31] build: introduce cpp_flags macro
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Tim Deegan <tim@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-3-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <1eaf6dcc-1b92-361e-04d2-a172223ae96c@suse.com>
Date: Wed, 7 Jul 2021 16:18:18 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-3-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0205.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ecd86d0d-8ffe-43ee-f645-08d941521258
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3534:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3534D5B931257EAF27567C55B31A9@VI1PR0402MB3534.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Kf2no31wDJtnF0kF/lUk5hmREPHN1XNlnzJIjE9rjX608Bg1mPj+5OQMUPdZ3p/joz5qHVJUXrpYOSy8B3KPBux2rC4eKXDujNSK1j7Xhgb8IBv1OJbxpfXW78uARVQvHCEiRZN0h6AUvCOc9ZUtpwMszU2gosFdyex0+dWUwy//DQQy5CdwL8m0xL5kP5/DAAgSJ6f8KK340QFyZLmWG8cjgXuKSNK90zHiPnL+1s1a9eAYog+X1utSY/zl2Ey1cs8s1lsrenyxhq/CWeXkM2JNIr9qXPVyjiPnMhtDiAwRD9MliL6OcWyjW40mKlbqNMx/bWFsfvqK9O6s6YwPXRauftlxkJ1pVGCftblqbS9ljQb4xte0H2uLyAKzji9NU3CGpRoxGlvyR2V8cuYbE/pGWSKAyhylXA8C6g61dZFQPauZENLoo2w7ue/mtsRXm8K1QbSMMN9o6BYmHHPw1U7/qgYhLGttlEPiJnrEUmo/emdJsoWGgMRXfoJ7z405OqJz+lQNHNhmj+Sdm2y4hrshgBy6Z3g2SEO0mTt6rCLezhhOaWwf3GR5C7fPdbkxYb9wfFiTctIeHMVZP7yPmRvpo/RUqhLvBYxpPpUVW2dIjznECk9Jg4iOc/7pHzDngtDCIIiQvTjqQD7lMlCCqjxI6fJhi6IiJTbhEUOKDQJoVgxci9HF7p2faUvrXqbRPS2bFKUYRtlrzcxAYw0oJsodcst7brERt0KaZAYjfi11SdN4LLo62Gu2NHqGUvNA
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(376002)(346002)(39860400002)(16576012)(6916009)(83380400001)(53546011)(478600001)(31686004)(186003)(2616005)(54906003)(38100700002)(316002)(6486002)(86362001)(956004)(4326008)(26005)(2906002)(66946007)(31696002)(4744005)(8936002)(36756003)(7416002)(5660300002)(66476007)(66556008)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?jDPQ04/2SPmgAPcidp27oUBQDMh0h7FVKvD5fXJ?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ecd86d0d-8ffe-43ee-f645-08d941521258
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 14:18:20.2058
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: rtwAHITG8BWIKsRN741oP2101enMLQPcRM4GI/rplQZnO2bhEI7gF3dDC0WQ7mzOvCvxUbPvp+gH3K1Z+jJINg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3534

On 01.07.2021 16:09, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> 
> Notes:
>     v6:
>     - switch to a macro as suggested
>       which allows to be used with both a_flags and c_flags
>     
>     v5:
>     - new patch
> 
>  xen/Rules.mk                    | 7 +++++--
>  xen/arch/x86/mm/Makefile        | 2 +-
>  xen/arch/x86/mm/hap/Makefile    | 2 +-
>  xen/arch/x86/mm/shadow/Makefile | 2 +-
>  4 files changed, 8 insertions(+), 5 deletions(-)

There are two further uses, one in xen/Makefile and one in
xen/x86/Makefile. I think both want replacing too, and the
former suggests you also want to strip -flto alongside -Wa,%.
I can accept the use in xen/include/Makefile not getting
touched, as it also removes an -include option at the same
time.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:21:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:21:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152301.281384 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Qk-00033n-0o; Wed, 07 Jul 2021 14:21:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152301.281384; Wed, 07 Jul 2021 14:21:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Qj-00033g-Tw; Wed, 07 Jul 2021 14:21:37 +0000
Received: by outflank-mailman (input) for mailman id 152301;
 Wed, 07 Jul 2021 14:21:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m18Qi-00033a-AF
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:21:36 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m18Qh-0005PU-3d; Wed, 07 Jul 2021 14:21:35 +0000
Received: from [54.239.6.186] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m18Qg-00051T-St; Wed, 07 Jul 2021 14:21:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=wTdyAJvYv2+xc/mwYzFHTq96XtBfQKbObw0iODDx354=; b=TAab1yO0oqaxSVvgNaUMxXBb/O
	+vb+gblS50YmY4Y/86QAhKbGDNG2VwkBz5HfHb6fLZbr223+0yAhq2/QKoRWYjUBKTQz6BngLkkhA
	E2BGkVu0L4Irv4lQpRJIAkPGQd4YBbU07d0CbHZJZyTONEv/9cZIqVnhREhN6r3uLG/M=;
Subject: Re: [PATCH v5 1/4] xen: XENMEM_exchange should only be used/compiled
 for arch supporting PV guest
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-2-julien@xen.org>
 <8c0100ab-dfd7-9c64-c89d-338db62cf20b@suse.com>
 <3bb6ff6a-a4e8-daaf-daaf-a6efe07819d4@xen.org>
 <58669e8e-8397-a5ee-5c54-cd18bbb2718c@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <5c20c433-34c1-6c2f-e6ee-f5551921263c@xen.org>
Date: Wed, 7 Jul 2021 15:21:32 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <58669e8e-8397-a5ee-5c54-cd18bbb2718c@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 07/07/2021 15:06, Jan Beulich wrote:
> On 07.07.2021 15:39, Julien Grall wrote:
>> On 05/07/2021 09:41, Jan Beulich wrote:
>>> On 03.07.2021 19:11, Julien Grall wrote:
>>>> Changes in v5:
>>>>       - Removed the #ifdef CONFIG_X86 as they are not necessary anymore
>>>>       - Used paging_mode_translate() rather than is_pv_domain()
>>>
>>> Is there a particular reason you use this in favor of steal_page()'s
>>> paging_mode_external()?
>>
>> This is what you suggested in v4 [1]. I can switch to
>> paging_mode_external() if this is what you now prefer.
> 
> Well, I did say this would be better than is_pv_*(). I probably didn't
> pay enough attention to you already pointing out paging_mode_external()
> in the description; I'm sorry. On x86 both are in sync anyway, and I
> have to admit I don't see clearly enough which of the two would be the
> right one to use here, partly because I'm afraid I also don't see why
> steal_page() has such a restriction in the first place (which you now
> build upon).

 From a quick git blame, I have found this:

commit fae7d5be8bb8b7a5b7005c4f3b812a47661a721e
Author: Jan Beulich <jbeulich@suse.com>
Date:   Tue Jun 20 14:29:51 2017 +0200

     x86/mm: disallow page stealing from HVM domains

     The operation's success can't be controlled by the guest, as the device
     model may have an active mapping of the page. If we nevertheless
     permitted this operation, we'd have to add further TLB flushing to
     prevent scenarios like

     "Domains A (HVM), B (PV), C (PV); B->target==A
      Steps:
      1. B maps page X from A as writable
      2. B unmaps page X without a TLB flush
      3. A sends page X to C via GNTTABOP_transfer
      4. C maps page X as pagetable (potentially causing a TLB flush in C,
      but not in B)

      At this point, X would be mapped as a pagetable in C while being
      writable through a stale TLB entry in B."

     A similar scenario could be constructed for A using XENMEM_exchange and
     some arbitrary PV domain C then having this page allocated.

     This is XSA-217.

     Reported-by: Jann Horn <jannh@google.com>
     Signed-off-by: Jan Beulich <jbeulich@suse.com>
     Acked-by: George Dunlap <george.dunlap@citrix.com>
     Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

> 
>>>> @@ -815,6 +812,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
>>>>        if ( __copy_field_to_guest(arg, &exch, nr_exchanged) )
>>>>            rc = -EFAULT;
>>>
>>> I'm afraid that for correctness of the interface you need to keep
>>> this part even in the !PV case.
>>
>> Xen never initializes the field nr_exchanged. Instead, it expects the
>> guest to set to 0. So I am not quite to sure why we would need to keep
>> this line.
> 
> Hmm, the public header is wrong then, as it documents the field as
> [OUT] only _despite_ the shouting warning in point 5 of the comment.
That's confusing... I will look to update the doc.

> I guess I never really understood why this sub-op differs from
> others in where the continuation indicator lives.

I am guessing the continuation was added after the fact without 
coordination?

> 
> Never mind then, indeed no code adjustment needed:
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks!

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:25:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:25:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152310.281395 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Uf-0003kY-KJ; Wed, 07 Jul 2021 14:25:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152310.281395; Wed, 07 Jul 2021 14:25:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Uf-0003kQ-Gx; Wed, 07 Jul 2021 14:25:41 +0000
Received: by outflank-mailman (input) for mailman id 152310;
 Wed, 07 Jul 2021 14:25:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m18Ue-0003kJ-8r
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:25:40 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 33560fe8-df2f-11eb-8502-12813bfff9fa;
 Wed, 07 Jul 2021 14:25:39 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2059.outbound.protection.outlook.com [104.47.12.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-2-jGaDMz67MuKIlWGp_yfgRA-1;
 Wed, 07 Jul 2021 16:25:37 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2448.eurprd04.prod.outlook.com (2603:10a6:800:52::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Wed, 7 Jul
 2021 14:25:35 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 14:25:35 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0028.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 14:25:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 33560fe8-df2f-11eb-8502-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625667938;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=r3rh64MjpZjPhmlcc6u0Bx17Oku/17RC5NcEjFP3oNY=;
	b=DK9qGbhP4mhD/ZuujfXEc5IELqkpn3y6fO9bLriArfFzwaR9fkfHRQR7+3nAVdc2nhuH6L
	5CTc/L4PCzwIdp1Z8rn+qIKlhKF0IdyHVtoJCdxZftr1O3+mXJF/ROpu1WaYAgBBbampLz
	KFOCybuEMvXImzohYXCDcOfYypY4p34=
X-MC-Unique: jGaDMz67MuKIlWGp_yfgRA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ogja5LL0LNw6156S5atIajdyDOgmQpF1MX/8ExM1k/YpVpmIAAtjewcm2qErYBKrHiGM0ncEpsijiAViu0J3CheqKSxzks/Xx/FGMUqVRXfpfKRvc5R3oC0Vd6L7wDv1axHaJdgEvHBeLX5lkuK8xQt1ba8/ARKYGwoUQ/ctgvseIAJVi8UZE9MXl8wMsb9+3yT2ctqJKMnb7YkwrTZXxP/tKdlJwRQp1S5zGktiuSbUPCyAgKvRx+Ww/FuxwPE+4Mm0rFubO2M5JVlH4TVwCo9fcBRS21olH3HGSsr6GEcZ1sZkEY1NHCZ8N/306fi+tgv5maLqEZCXGhtxOB5mHA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=r3rh64MjpZjPhmlcc6u0Bx17Oku/17RC5NcEjFP3oNY=;
 b=BcpzLyH84htpYGhBhj1E96pI+z/Oj1IL4gnWVDP7UiXGfogNq0CPo5kn5/4PjSHlvI9R8Ba6veEubNxCmqEPsVMvK9LCFsamuAIdLzDsbPZFnMf4hUPTw31ngr9WNRgN8ZvXl2c3nuzyBNeLAoDTtBNAPtpeZ4HyTJNHuFpGs8xIamPbUPhIO8/sD2in+et4qy0c5TwYhzrGDbOfoP3t8PEMruXmwboRO5PLAsEdVG5CXjV65OM+gC8YHa7xYpH1FYfgaA2X7+02k8t+0lkyBuUFyx6bnlGs76360tkNWc6FWRKmhR34DTGc900HIPISUhko91Bqb47P8u/y2GHFIw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 05/31] build: factorise generation of the linker
 scripts
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-6-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <5a9f0468-7ef6-eebb-cebc-492050ed7e8f@suse.com>
Date: Wed, 7 Jul 2021 16:25:33 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-6-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1P264CA0028.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bb2632e1-375e-49aa-f788-08d94153159b
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2448:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB244852FBBC4BE7A7348E89BAB31A9@VI1PR0401MB2448.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4502;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2TiAAe8686jdv4H5HngMrWZvcHb4mNQ8mDud9BJpDOT7cL3QdnBL/QiCGH64fPsp6om12kGiUCjWnw9oxvW4Sufy9hMemKqmL1jL+DxdU9xBEiktDD3i1BDCXKM3o+FlBZ+kFHrri4KS0GonttUkloSwc60UhL7gShs13TtdTkfz8DvAnR8GruK3WGp5BeMUQZII1DSlucjF4rvHbxGBPFypXmWfZkhMA+GZF4uc++qqmExIw5w0SADE5V5aaBlwsmKHlNIDVTd+OBersN8vK9xqTu4S3QYB97AsrMwOghcnORPXRcSvLKXB3zI/zfvgf14BElWtVhk4wxqUhnbYUmyh0vvArfYtCaFnKc2fDqURlb7OSr0r3fLQz43zxaLCqvLuZoBi7ypot/7SNvVuyb9lobwbU/H5rs8dYyRf5qwYxRLbfba6CM2e3kvAxZ820YllNp6To3gReO6USEpll7G1cwr4CtkGcCCugTB0qS8RXbhWahplgnF+9Ehm7cijkXZmJBLsiV3UNI3q2Ngef2hc2rpYVEMJu8QPF5WZiEsyof58QpUzwEiVTIR9cwU3hhIvzqE6ydrQirt1X31VLLw1VhmauyN1NB2ginJtaabAZRv6MF4FgP9A5Vh1S8BHXBqSLrFwckwO/mGWTJPiBVEyFUtYQpER1vENI1v1+wqSmX2/A+Tm9hMfgf+aaHBrT+1cZ/Drt3slZq+wGLTB/Vr8sgunLp45KitDA8DGuyPXTUeRxLt4YqVVvk5KDQMG
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(396003)(376002)(39860400002)(136003)(54906003)(5660300002)(66556008)(16576012)(8936002)(4744005)(8676002)(956004)(7416002)(66946007)(2616005)(66476007)(316002)(36756003)(86362001)(186003)(38100700002)(26005)(31686004)(2906002)(4326008)(6916009)(6486002)(53546011)(31696002)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: bb2632e1-375e-49aa-f788-08d94153159b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 14:25:35.1589
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: z276m7enxTIZFwwa6UDhZaeDIIC1g0ZBJLyD/Bpzozh2jTDesJRtF7ZLbyres7RTn5GdGGiE+DNNcE8vWOo38g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2448

On 01.07.2021 16:09, Anthony PERARD wrote:
> In Arm and X86 makefile, generating the linker script is the same, so
> we can simply have both call the same macro.
> 
> We need to add *.lds files into extra-y so that Rules.mk can find the
> .*.cmd dependency file and load it.
> 
> Change made to the command line:
> - Use cpp_flags macro which simply filter -Wa,% options from $(a_flags).
> - Added -D__LINKER__ even it is only used by Arm's lds.

I'm not really happy about this, not the least because the symbol's name
doesn't fit its purpose (we're not linking, but producing a linker script
at that stage), but well ...

> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:27:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:27:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152315.281405 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Wn-0004PD-0A; Wed, 07 Jul 2021 14:27:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152315.281405; Wed, 07 Jul 2021 14:27:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18Wm-0004P6-TO; Wed, 07 Jul 2021 14:27:52 +0000
Received: by outflank-mailman (input) for mailman id 152315;
 Wed, 07 Jul 2021 14:27:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=eUo+=L7=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m18Wl-0004Oh-QM
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:27:51 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.54])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d679560d-4b65-44c4-ba20-e060ae8de201;
 Wed, 07 Jul 2021 14:27:50 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx67ERgWge
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Wed, 7 Jul 2021 16:27:42 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d679560d-4b65-44c4-ba20-e060ae8de201
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625668063;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=UeTAVglgrcAokD/tB/XMZH2A3va0dTkjIg0XM4rBBYM=;
    b=TXelfCj6WEn6O4XtjwlzqPMxGgavNSdpC5X8F96sbnWeN75JUo6oF4Tcj8B4Oe1Mzz
    ERTXuUbbA2lrw32h0TbheZjWOJkwjx83k7l14v/X4VT0nEF9ObzJPCEMaXR7xoLPIrmC
    h3CYSHNMlwS8aFsjdipHVFqqaPn4Ryf0tQ81F+1369zkD8Ih2mVOE9ieaB6iEzaaP8LH
    QLMZY3YmKfmsAUoI7FNK9KZ55LeJxMxgaDkVhtcAc00GEMb72vUglwtGHKIs8ye2p1Qb
    yn0qUskZv4rg30Qym4N/NBxSu52GCiZpPAL/Dm5QAjYeU2C9jMND7BOEWe8cPG1Ftmsy
    FHEw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Wed, 7 Jul 2021 16:27:36 +0200
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, Anthony PERARD
 <anthony.perard@citrix.com>
Subject: Re: how handle domU checkpoints properly
Message-ID: <20210707162736.17f93a47.olaf@aepfle.de>
In-Reply-To: <20210707133427.15679-1-olaf@aepfle.de>
References: <20210707133427.15679-1-olaf@aepfle.de>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/9PbOFI_r=m3RnOOKspek9cT";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/9PbOFI_r=m3RnOOKspek9cT
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Wed,  7 Jul 2021 15:34:27 +0200
schrieb Olaf Hering <olaf@aepfle.de>:

> This is incomplete because repeated checkpoint or pause operations are
> not handled.

Apparently they are, it is just not reported because there is no event when=
 the domU resumes execution.


Olaf

--Sig_/9PbOFI_r=m3RnOOKspek9cT
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDludgACgkQ86SN7mm1
DoAgrw//UsFZT1vWwulma6dCnkmciRA8Fd2tdtKgGXPWo6z/14tjDp1JHRWBRUr/
mBaZl0hTZF+aK8ToDj78f2wlI4yYp3MnMGDX4MGSkJ8lCaeGg3uNOIaf0G4rOZu4
yz5kIB7w2evwEhdaxg1Zm/5bM+KiFiDth1JtJ7sFIQuy7t4GuTk5EUsxVXYJaTu1
rIF7+iE3av6sdziNglH4EjWHRwUlF20q/L70dqYjmv64xC3sMX7uWXYJM0JiwsLm
8/aiJKrK4d7vu7ivGgXIEoGOyvtuzOVCTlLNIdbgsIwWquq8XblRpOGD+Zkruqxm
y/rVqz2z0SIji6G+kIwRzjrgHbC535niWyigqPUOyk+zjKJT9F8UGLJXyo0DI+KL
sfDpnu8iEjMl8uwGrLIscOT7ajSSh3zHtYSgNG87/7jE5sMqDDrIQp0LA5ogpJMt
r5hkU+MSSghrb7xA/QMjP/pjsPp08svPoZvmksUNAI5s3CY+i1/Kp/SUe1TQ68hH
V81dpjvH3/0rRsBo/mzPY2DSp6zVlGDyJwE4VvM9vO1Blk4hzQsd17sAdtiJ3JMt
05vvpzBASmsDfva5jCNFasy6V7/Ts6XwiG84chAgrfcdSBJMO+uH130JcdDEK2Yn
D3/K9Ra7xyJS2gkOzvidK9zBIlvSqrkbv4g/MUWYLPC1TFF3N2E=
=+Lv4
-----END PGP SIGNATURE-----

--Sig_/9PbOFI_r=m3RnOOKspek9cT--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:38:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:38:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152308.281416 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18gb-0005w8-Ve; Wed, 07 Jul 2021 14:38:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152308.281416; Wed, 07 Jul 2021 14:38:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18gb-0005w1-Sf; Wed, 07 Jul 2021 14:38:01 +0000
Received: by outflank-mailman (input) for mailman id 152308;
 Wed, 07 Jul 2021 14:25:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=NNx3=L7=redhat.com=benjamin.tissoires@srs-us1.protection.inumbo.net>)
 id 1m18UT-0003jY-JQ
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:25:29 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [170.10.133.124])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2d53a538-df2f-11eb-8502-12813bfff9fa;
 Wed, 07 Jul 2021 14:25:28 +0000 (UTC)
Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com
 [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-144-CRo11BF7MI-sHiDKM9mjGw-1; Wed, 07 Jul 2021 10:25:26 -0400
Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com
 [10.5.11.23])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E6AB71926DB0;
 Wed,  7 Jul 2021 14:25:20 +0000 (UTC)
Received: from [10.36.112.61] (ovpn-112-61.ams2.redhat.com [10.36.112.61])
 by smtp.corp.redhat.com (Postfix) with ESMTP id E4E3919C66;
 Wed,  7 Jul 2021 14:24:39 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2d53a538-df2f-11eb-8502-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1625667928;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=R1b1MmqRg+JjTb9SqE3N1oUES1jMyS6VpEEII2IWGuk=;
	b=Iwo14BH06W//MgUJ/Dx5+0ggoObpPt3GMxyyQBWF8d1IHUVhouEMvKgsOvmGIh2+GywzJi
	+s4nM2c/4yUcqqIk/5/D8RDL/iiZIxBG4fJxpGSUR0LCGQna8mc/ItGR3dWtwxL87y5tK5
	gUfjwMS7Yp9iKOYkVjxwYcPjJSPj38k=
X-MC-Unique: CRo11BF7MI-sHiDKM9mjGw-1
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de, Cornelia Huck <cohuck@redhat.com>,
 linux-kernel@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
 Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
 Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
 Michael Ellerman <mpe@ellerman.id.au>,
 Benjamin Herrenschmidt <benh@kernel.crashing.org>,
 Paul Mackerras <paulus@samba.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
 Len Brown <lenb@kernel.org>, William Breathitt Gray
 <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?=
 <zajec5@gmail.com>, Maxime Ripard <mripard@kernel.org>,
 Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec <jernej.skrabec@gmail.com>,
 Alison Schofield <alison.schofield@intel.com>,
 Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>,
 Ben Widawsky <ben.widawsky@intel.com>,
 Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>,
 Vinod Koul <vkoul@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>,
 Sudeep Holla <sudeep.holla@arm.com>,
 Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>,
 Tom Rix <trix@redhat.com>, Moritz Fischer <mdf@kernel.org>,
 Jiri Kosina <jikos@kernel.org>,
 Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
 "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>,
 Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>,
 Dexuan Cui <decui@microsoft.com>,
 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
 Wolfram Sang <wsa@kernel.org>,
 Alexandre Belloni <alexandre.belloni@bootlin.com>,
 Dmitry Torokhov <dmitry.torokhov@gmail.com>,
 Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
 Jens Taprogge <jens.taprogge@taprogge.org>,
 Johannes Thumshirn <morbidrsa@gmail.com>,
 Mauro Carvalho Chehab <mchehab@kernel.org>,
 Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>,
 Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>,
 Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>,
 Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>,
 Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
 Kishon Vijay Abraham I <kishon@ti.com>,
 Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
 =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= <kw@linux.com>,
 Bjorn Helgaas <bhelgaas@google.com>,
 Dominik Brodowski <linux@dominikbrodowski.net>,
 Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede
 <hdegoede@redhat.com>, Mark Gross <mgross@linux.intel.com>,
 Matt Porter <mporter@kernel.crashing.org>,
 Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>,
 Bjorn Andersson <bjorn.andersson@linaro.org>,
 Mathieu Poirier <mathieu.poirier@linaro.org>,
 "Martin K. Petersen" <martin.petersen@oracle.com>,
 Thorsten Scherer <t.scherer@eckelmann.de>,
 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
 Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
 Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
 Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>,
 Alex Elder <elder@kernel.org>, Andreas Noever <andreas.noever@gmail.com>,
 Michael Jamet <michael.jamet@intel.com>,
 Mika Westerberg <mika.westerberg@linux.intel.com>,
 Yehezkel Bernat <YehezkelShB@gmail.com>, Rob Herring <robh@kernel.org>,
 Jiri Slaby <jirislaby@kernel.org>,
 Heikki Krogerus <heikki.krogerus@linux.intel.com>,
 "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
 Kirti Wankhede <kwankhede@nvidia.com>,
 Alex Williamson <alex.williamson@redhat.com>,
 Martyn Welch <martyn@welchs.me.uk>, Manohar Vanga <manohar.vanga@gmail.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross
 <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>,
 Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>,
 Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>,
 Tyrel Datwyler <tyreld@linux.ibm.com>, Vladimir Zapolskiy <vz@mleia.com>,
 Samuel Holland <samuel@sholland.org>, Qinglang Miao
 <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>,
 Kai-Heng Feng <kai.heng.feng@canonical.com>,
 Joey Pabalan <jpabalanb@gmail.com>, =?UTF-8?Q?Pali_Roh=c3=a1r?=
 <pali@kernel.org>, Adrian Hunter <adrian.hunter@intel.com>,
 Frank Li <lznuaa@gmail.com>, Mike Christie <michael.christie@oracle.com>,
 Bodo Stroesser <bostroesser@gmail.com>, Hannes Reinecke <hare@suse.de>,
 David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>,
 Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org,
 linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
 linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
 linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev,
 linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
 dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
 linux-fpga@vger.kernel.org, linux-input@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
 linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net,
 linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
 netdev@vger.kernel.org, linux-ntb@googlegroups.com,
 linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
 linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
 alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
 linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
 greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
 linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
 virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
 xen-devel@lists.xenproject.org, Russell King <rmk+kernel@armlinux.org.uk>,
 Johannes Thumshirn <jth@kernel.org>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Message-ID: <5d3bf56e-285f-ecc1-ec64-384409645353@redhat.com>
Date: Wed, 7 Jul 2021 16:24:38 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.1
MIME-Version: 1.0
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=benjamin.tissoires@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/6/21 5:48 PM, Uwe Kleine-König wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Amba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Rohár <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drivers/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and typec)
> Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> (For ipack)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
> 

[...]

>   drivers/hid/hid-core.c                    | 4 +---
>   drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---

[...]

> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index 7db332139f7d..dbed2524fd47 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
>   	return ret;
>   }
>   
> -static int hid_device_remove(struct device *dev)
> +static void hid_device_remove(struct device *dev)
>   {
>   	struct hid_device *hdev = to_hid_device(dev);
>   	struct hid_driver *hdrv;
> @@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
>   
>   	if (!hdev->io_started)
>   		up(&hdev->driver_input_lock);
> -
> -	return 0;
>   }
>   
>   static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
> diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
> index f0802b047ed8..8a51bd9cd093 100644
> --- a/drivers/hid/intel-ish-hid/ishtp/bus.c
> +++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
> @@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, struct device_driver *drv)
>    *
>    * Return: Return value from driver remove() call.
>    */
> -static int ishtp_cl_device_remove(struct device *dev)
> +static void ishtp_cl_device_remove(struct device *dev)
>   {
>   	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
>   	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev->driver);
> @@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
>   
>   	if (driver->remove)
>   		driver->remove(device);
> -
> -	return 0;
>   }
>   
>   /**

For the HID part:

Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Cheers,
Benjamin



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:43:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:43:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152329.281428 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18li-0007Qn-Om; Wed, 07 Jul 2021 14:43:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152329.281428; Wed, 07 Jul 2021 14:43:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18li-0007Qg-KZ; Wed, 07 Jul 2021 14:43:18 +0000
Received: by outflank-mailman (input) for mailman id 152329;
 Wed, 07 Jul 2021 14:43:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m18lg-0007QV-Tm; Wed, 07 Jul 2021 14:43:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m18lg-0005qQ-Ki; Wed, 07 Jul 2021 14:43:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m18lg-0005IE-AY; Wed, 07 Jul 2021 14:43:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m18lg-0004zA-A2; Wed, 07 Jul 2021 14:43:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=j6Zkpo5bJOQg+FCbsA6KO92jTpvUj8/30IGyd6MHg94=; b=McwUKGOyJIN9AQ4uQt5zZ7Qazx
	486Q/7tKJ0+fRTPCQjv4BCWqeyAaGjthnyZxBxb2j+l5zg/PwYcYOPTZx5v2RBdok4grOpVAJZQ3X
	fiMdwRhPlRPo0eAL2I43UDhPouP3E59QPls09vmc+DGE4XAcFueYl92giCOLryWgf7Wc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163386-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163386: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 14:43:16 +0000

flight 163386 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163386/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163386  2021-07-07 05:04:03 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:45:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:45:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152335.281442 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18nf-00084Z-7h; Wed, 07 Jul 2021 14:45:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152335.281442; Wed, 07 Jul 2021 14:45:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18nf-00084S-3C; Wed, 07 Jul 2021 14:45:19 +0000
Received: by outflank-mailman (input) for mailman id 152335;
 Wed, 07 Jul 2021 14:45:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m18nd-00084K-RW
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:45:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f15f2c48-df31-11eb-8506-12813bfff9fa;
 Wed, 07 Jul 2021 14:45:16 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2168.outbound.protection.outlook.com [104.47.17.168])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-20-HhEQGr2cMCe4-hM5pPx9Xw-1; Wed, 07 Jul 2021 16:45:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5469.eurprd04.prod.outlook.com (2603:10a6:803:cf::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19; Wed, 7 Jul
 2021 14:45:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 14:45:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0028.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 14:45:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f15f2c48-df31-11eb-8506-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625669115;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=qFIIUHzMTDKCqPL8znK8J92aEXgfwDlYde2CPqpWyPE=;
	b=TiG2QO2GPLk+bVMkLaEF/ZREDYvY0PgDWve41IZk7nvyIOSwgFbuavGvJ2kr4PTybKT4Bd
	BF1+15UptKIriyWriBhN80JjbeNvN9wyeU5ht97mPc2qlxbflMa+Fr4dQMM2b1Vy1KpjzB
	0HD3yOfcQ+01A9g6jHtJFcmP2fn8CLs=
X-MC-Unique: HhEQGr2cMCe4-hM5pPx9Xw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=lKKksC+wvz7PMgduTHf7tOOB0ptgDRjiyvXqv7wYJ+2BbaDVxhA5wYNw4dA5OyAj2JYzN2yyavgJTxm8b/gVQnQ3bz+kBzpMExkcBs647cYH7EcTUByEj05GBqKyHgdxg+fe5v63Tb7bYAdXjT5zPthvwIaRa4gGZm9FYCBPe8cgf9gVs60N0e06UPMmR7V9Uulm+cINLArHeSbFBaou2p9r4vsLNu1qTNWdI/qFLU2sSWO6J9WwKaJzOs80pg7mjbo6UectmnuNa5TTIaafa9wP+f3rULHavZa/L14gZk/IumgjH7qMwst0KlS5DbMT3Ptv7d0UTeSbZBQLl+aTsg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qFIIUHzMTDKCqPL8znK8J92aEXgfwDlYde2CPqpWyPE=;
 b=lqrz1g0cRiZw2q6gzi5r0wVMwDvcEbMrXSKipJoLTLio4ubCkimLIZVPMP5zYvn1BU5QDOHVUo6oJH8aIxQdEkI8e+hG/DX3qU5y6y98dqLDP0U9EFbmGYo0Yg1SU/fGJW1l2PSbLVgyAUJqnA5jAJZpt/EHu1J8DP5p+nz8MHB2Z8IRDN/fAtqCnU5l2DpzPctCYZc0apgsjb6Ue+dk8D0Q6Df/HYyhein9BeXDV2RMqLpN8IFl1qKRKGOAMPFLjUawLDi4dTd1+EjUmaX60HmHxB4bqtyhM4Bjnzl4tQnnMN4k7HCQH0Ab23+ZT+o9WTjqr9no+NuwdUP7/evKkw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 06/31] x86/mm: avoid building multiple .o from a
 single .c file
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Tim Deegan <tim@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-7-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <73b924a9-dd69-7cc8-acf6-e4ae746c244c@suse.com>
Date: Wed, 7 Jul 2021 16:45:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-7-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1P264CA0028.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::15) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c4d3cb45-06a0-497c-4b5e-08d94155d3df
X-MS-TrafficTypeDiagnostic: VI1PR04MB5469:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5469C2E638B4BB0AB31F54D8B31A9@VI1PR04MB5469.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	bVjvW1262CRKkOjfPf1YV+XT9bL6vv4HMfP1SHgijoJGUsxXN/Xn56sgkMdIyrGArYVhr8DuM16Hx1byEPNOtgt4mColWlZVaNlrQQhPPbH9HGDecDY5x0LVUhqcDIxQDWrPzcVas/DyuEOnmnu0aFXc+1TZZkp0AHDmW2c4R7v2BhN+IXRYTWqeSkEp+tSAFUqt4khUaG7wjaO2dHkE+0uqFtKeKOslnaI8uCPUIFP9US2bt53wuzvdXJ8rN0+FJw8+yqtoUPrLB4M+B3UnokkuQ4Z81SM/3B5+HBU1JiLSvVF7FanBUtlXmQCNQ0adhV5sXP13/VTGSk/jNkt0uBHOhYdosz0GzcE3s/QPGpRRjNECnrQZE1OCmBVqqyNfpExx9HTfb5jMvSgC4k3b+bfJWrncTs/UuE5EMjUcYa1MQBl9xjHfY2nC1mxydEUiptXOivySL5wqhLbvH3sg+RwEPbK8ym278YWoGdjM5mVH3bwiep8AmCsJrQACrSTiwr3EBtl2MX07zNLQnQU0ED/YVVylqJv5RqirTsh11kn+HbQHqUpGk3vCPWaxaGVqTkTJGFwI46d5viIt5z5Zmmswi40Xuztr+o6c8ITV0LQWw6aIN02iukmfHtWrQC4/4dFlW1wTl2qrlHPKGhYaPSfEj8lLV9G5u7IXRgzauYl72DBEg8cqXPmNSy9PES0IhV8YDcihe3Gd4jtptKPolG2p5I8GY5G348lZ6AZO7R0nw0+4Te3DgJXRgp76CI2qIHxhkEj/8vlp764NWEGGuA==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(376002)(39850400004)(136003)(396003)(8676002)(478600001)(4326008)(38100700002)(8936002)(16576012)(31686004)(31696002)(54906003)(6486002)(316002)(6916009)(66946007)(83380400001)(7416002)(86362001)(956004)(5660300002)(53546011)(26005)(66476007)(186003)(2906002)(36756003)(2616005)(66556008)(142923001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c4d3cb45-06a0-497c-4b5e-08d94155d3df
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 14:45:13.3307
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: xGjdYJ7mtOeXK0gXXKg+Is/QBueAzoPs9uWBOwDMhwHH3HfYIq+MwOGhUFmXGJ5crARhzwt7ufJedB6RP3qtCw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5469

On 01.07.2021 16:09, Anthony PERARD wrote:
> This replace the use of a single .c file use for multiple .o file by
> creating multiple .c file including the first one.
> 
> There's quite a few issues with trying to build more than one object
> file from a single source file: there's is a duplication of the make
> rules to generate those targets; there is an additional ".file" symbol
> added in order to differentiate between the object files; and the
> tools/symbols have an heuristic to try to pick up the right ".file".
> 
> This patch adds new .c source file which avoid the need to add a
> second ".file" symbol and thus avoid the need to deal with those
> issues.

While I have to admit that I'm not really happy about these extra new
files, I can see that one might view this as the less bad of two
evils.

>  xen/Makefile                            | 11 -----------
>  xen/Rules.mk                            |  2 +-
>  xen/arch/x86/mm/Makefile                |  9 ---------
>  xen/arch/x86/mm/guest_walk.c            |  3 ---
>  xen/arch/x86/mm/guest_walk_2.c          |  2 ++
>  xen/arch/x86/mm/guest_walk_3.c          |  2 ++
>  xen/arch/x86/mm/guest_walk_4.c          |  2 ++
>  xen/arch/x86/mm/hap/Makefile            |  9 ---------
>  xen/arch/x86/mm/hap/guest_walk.c        |  3 ---
>  xen/arch/x86/mm/hap/guest_walk_2level.c |  2 ++
>  xen/arch/x86/mm/hap/guest_walk_3level.c |  2 ++
>  xen/arch/x86/mm/hap/guest_walk_4level.c |  2 ++

Is there a particular reason you've kept the "level" in these three
file names? Preferably with them shortened (and ideally dashes used
everywhere in the new file names instead of underscores)
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:48:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:48:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152344.281459 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18r8-0000Q5-Rs; Wed, 07 Jul 2021 14:48:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152344.281459; Wed, 07 Jul 2021 14:48:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m18r8-0000Py-Oi; Wed, 07 Jul 2021 14:48:54 +0000
Received: by outflank-mailman (input) for mailman id 152344;
 Wed, 07 Jul 2021 14:48:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m18r7-0000Pr-Ap
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:48:53 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 713c486a-df32-11eb-8507-12813bfff9fa;
 Wed, 07 Jul 2021 14:48:51 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2059.outbound.protection.outlook.com [104.47.13.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-uYad9FLFNCSAPES7f6veyQ-1; Wed, 07 Jul 2021 16:48:49 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3774.eurprd04.prod.outlook.com (2603:10a6:803:1f::28)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Wed, 7 Jul
 2021 14:48:47 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 14:48:47 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR02CA0179.eurprd02.prod.outlook.com (2603:10a6:20b:28e::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend
 Transport; Wed, 7 Jul 2021 14:48:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 713c486a-df32-11eb-8507-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625669330;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=06Th48dZbeVUBJurg+bDQkzqgN7ZY/biMHtK3UQk77s=;
	b=SDZuvMHhwumBVpxIRSvvnu+ASLnUey/vfLSMrTajp/COin8iZX10il6yUWMp92mvtTkZCW
	szuyIjiG/r6+oQ++/Nwin0seashRlATnLsm6HIeoSzDREK7PuI/THjijOImGyQBxB43sks
	AQl2Czk30UTImW4C+Sq/EN6vJ7vFmEs=
X-MC-Unique: uYad9FLFNCSAPES7f6veyQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BUr0jS02B1lcUZ+FJJC0MTjY2kAZPMsuGM2LRxjOvvsLNnsaCfFNlfVbMtT4C1JLpFMRAVgdrxMiQPNHsvPh5pvPvCVwoz76qMrAuy0owUWt1kwXSqmZU/R/WeIjV3M1qIHLxeeq8OA1GU7LvBCadvTpmKt42cIoPiu1aCu5SaW9UW9CkSDTAjRmDhQERwdMKCplVlY5hIdg+tjDLeCOI1IkcgXSuuTHKPClxz8691yHAwfSnjxnUaxB2pm5j0q++14Qbq64JtTAFfNDU8Wjb+wDyvgKn4npJGQwnO0vNAjj/htSW/0H8TfVcbLdix2XQA07GvgWZpWJ4lAT149yPw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=06Th48dZbeVUBJurg+bDQkzqgN7ZY/biMHtK3UQk77s=;
 b=fMPVy7G6V/fcLoVeLlHKdH4pHoFC/rkobMSj7oyfiiK44naG81Qo7lXCFlsiwHrppxll/NRTbhPaTT5muT0PRBm21JSkmcyfDPVMQRWkPQI3bUJHWs96im02SaEQT/UD83NdJTh5qec7U2qrLMUBvsJC8/shnE46LmVE/YvDaDuO0I51ITcSpln5vMLV8uGZXjw3t0cZ40z1DVCHDj19RBypzAMlb1fo07t2Zf0cYZewMBv6v3LOhIncMz3BzAWE817Xtc1TzRJHi2e9FX7LHvAO7iAoBaewNaX+FiDezjaOxJK/iWZbbtee4gvsClVyK+9xSiwj9FX8mBKXmhGW2g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v5 1/4] xen: XENMEM_exchange should only be used/compiled
 for arch supporting PV guest
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210703171152.15874-1-julien@xen.org>
 <20210703171152.15874-2-julien@xen.org>
 <8c0100ab-dfd7-9c64-c89d-338db62cf20b@suse.com>
 <3bb6ff6a-a4e8-daaf-daaf-a6efe07819d4@xen.org>
 <58669e8e-8397-a5ee-5c54-cd18bbb2718c@suse.com>
 <5c20c433-34c1-6c2f-e6ee-f5551921263c@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <0f0fbe12-5e0f-6ceb-d2ba-72677f69a063@suse.com>
Date: Wed, 7 Jul 2021 16:48:46 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <5c20c433-34c1-6c2f-e6ee-f5551921263c@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR02CA0179.eurprd02.prod.outlook.com
 (2603:10a6:20b:28e::16) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a3d24111-e2c0-4315-219c-08d9415653a8
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3774:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB377401F22B2000F769709E57B31A9@VI1PR0402MB3774.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	OjyEWQacvox0sQTPolgrToS80x3lTvJvrwNREhUKzOHhgAFfeYIxJSalVqxV1fvXe4vOVo3VrsR88daxUDqboU9bvbpc3uqBr9R62JFQjJ706uk/JBPs1ltfnj8imc9fWjj17QXF/1b7aY2hyMTqxyWEytAOADX1bedZr+vBdQtiUKzPksWuGwxNRN3HKcI1USDpyMGo8P4lRD1leTjeYhHYNG3myrkbwa5oU8s5ONO5e3wQm73UrGig0tZ63x5HJuLtN97PRu1cD1gV3MSSCwBmprHOuSlGCMv9sj6Qdci3B8uBGDD6350PjrZFOdA/AxZDxkSe3WXQ3auqSvSWkG6K3RQAuNvzGb+hQEI+VjqJAw9S5y3ufpTleTZi2MTvFaqCsIVfPKwQy9ag61iOFz+PKs2T7PN7M1ch29TMIH+j98cPe4wpEgzOffG5NTC39DJ2Nelukenkw8UB4SxN4ZGZD/kXegGwQY8iOYvJ2JGPKYB1Z6wcSYy052tRqHrFSDBkAuUCgu5NhpZbB7KNQSuIbAYNlpv65q8j9GTvT/ETKdfxdRd7eQw06PAdGEZD7JRDKo6Iii0+7WcjWwZUv7u7u+JGyWreqrFw2YlWrAb4U2ZizieC/Q3VzS9Gz18Guw9EUPUrTFjsEBNX5JD4dgSAM3dthhKXa5FRslLdC3tayd0cQXB9jr1lxw1cP8ZceT168bsLE8eDsV+A5smtsg7RXU/WveMmSzzGq0p4bBQ=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(366004)(396003)(136003)(39850400004)(346002)(4326008)(26005)(956004)(186003)(16576012)(86362001)(53546011)(36756003)(31696002)(5660300002)(54906003)(66476007)(38100700002)(316002)(2616005)(2906002)(83380400001)(478600001)(6916009)(66946007)(31686004)(66556008)(8676002)(8936002)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a3d24111-e2c0-4315-219c-08d9415653a8
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 14:48:47.7325
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: LEYP2UWwkg9RoOx8W5EbY/UMDzR0SZzle6Ve4STewTGp9MPLpHcxd3Ix2YnR0Yy2CAS/GTmvoo5IrhAnklzWUQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3774

On 07.07.2021 16:21, Julien Grall wrote:
> On 07/07/2021 15:06, Jan Beulich wrote:
>> On 07.07.2021 15:39, Julien Grall wrote:
>>> On 05/07/2021 09:41, Jan Beulich wrote:
>>>> On 03.07.2021 19:11, Julien Grall wrote:
>>>>> Changes in v5:
>>>>>       - Removed the #ifdef CONFIG_X86 as they are not necessary anymore
>>>>>       - Used paging_mode_translate() rather than is_pv_domain()
>>>>
>>>> Is there a particular reason you use this in favor of steal_page()'s
>>>> paging_mode_external()?
>>>
>>> This is what you suggested in v4 [1]. I can switch to
>>> paging_mode_external() if this is what you now prefer.
>>
>> Well, I did say this would be better than is_pv_*(). I probably didn't
>> pay enough attention to you already pointing out paging_mode_external()
>> in the description; I'm sorry. On x86 both are in sync anyway, and I
>> have to admit I don't see clearly enough which of the two would be the
>> right one to use here, partly because I'm afraid I also don't see why
>> steal_page() has such a restriction in the first place (which you now
>> build upon).
> 
>  From a quick git blame, I have found this:
> 
> commit fae7d5be8bb8b7a5b7005c4f3b812a47661a721e
> Author: Jan Beulich <jbeulich@suse.com>
> Date:   Tue Jun 20 14:29:51 2017 +0200
> 
>      x86/mm: disallow page stealing from HVM domains
> 
>      The operation's success can't be controlled by the guest, as the device
>      model may have an active mapping of the page. If we nevertheless
>      permitted this operation, we'd have to add further TLB flushing to
>      prevent scenarios like
> 
>      "Domains A (HVM), B (PV), C (PV); B->target==A
>       Steps:
>       1. B maps page X from A as writable
>       2. B unmaps page X without a TLB flush
>       3. A sends page X to C via GNTTABOP_transfer
>       4. C maps page X as pagetable (potentially causing a TLB flush in C,
>       but not in B)
> 
>       At this point, X would be mapped as a pagetable in C while being
>       writable through a stale TLB entry in B."
> 
>      A similar scenario could be constructed for A using XENMEM_exchange and
>      some arbitrary PV domain C then having this page allocated.
> 
>      This is XSA-217.

Well, yes, this was to repair the damage which could result. But it doesn't
explain why page stealing couldn't be made work for translated guests as
well.

>>>>> @@ -815,6 +812,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
>>>>>        if ( __copy_field_to_guest(arg, &exch, nr_exchanged) )
>>>>>            rc = -EFAULT;
>>>>
>>>> I'm afraid that for correctness of the interface you need to keep
>>>> this part even in the !PV case.
>>>
>>> Xen never initializes the field nr_exchanged. Instead, it expects the
>>> guest to set to 0. So I am not quite to sure why we would need to keep
>>> this line.
>>
>> Hmm, the public header is wrong then, as it documents the field as
>> [OUT] only _despite_ the shouting warning in point 5 of the comment.
> That's confusing... I will look to update the doc.
> 
>> I guess I never really understood why this sub-op differs from
>> others in where the continuation indicator lives.
> 
> I am guessing the continuation was added after the fact without 
> coordination?

I don't think so, no. I rather expect someone to have been in a different
mood that day.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 14:58:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 14:58:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152349.281470 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m190X-0001wJ-QN; Wed, 07 Jul 2021 14:58:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152349.281470; Wed, 07 Jul 2021 14:58:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m190X-0001wC-Mm; Wed, 07 Jul 2021 14:58:37 +0000
Received: by outflank-mailman (input) for mailman id 152349;
 Wed, 07 Jul 2021 14:58:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m190V-0001w5-SF
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 14:58:35 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cce9162e-df33-11eb-8508-12813bfff9fa;
 Wed, 07 Jul 2021 14:58:34 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2054.outbound.protection.outlook.com [104.47.4.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-14-dQJvpEw8MCqAlpxDPzGxRA-1; Wed, 07 Jul 2021 16:58:32 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB6478.eurprd04.prod.outlook.com (2603:10a6:803:12a::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.29; Wed, 7 Jul
 2021 14:58:30 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 14:58:30 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P192CA0008.EURP192.PROD.OUTLOOK.COM (2603:10a6:102:56::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.24 via Frontend Transport; Wed, 7 Jul 2021 14:58:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cce9162e-df33-11eb-8508-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625669913;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=w/dvHCIjx78q5kgwP6+xD1Jn43uap/PQanehUWu6ESg=;
	b=iRMU64zF2MeliIQfEEL+2vHdtluBO7HpMvzwcwkTXRYMgC4hw6jklZQ1fLqya23LGw5LYj
	oD31RZK1XR31yTrbfdRhKLKASIy/ve3V+M+qyJAHwzqgTQJpNijDlxlFfGaCN+5tEUbwyI
	AY7LMqGQ8O06GN6jH50YfaAbSBl8+Yk=
X-MC-Unique: dQJvpEw8MCqAlpxDPzGxRA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ELq2MNlwECO+NTrv8nfnl01AadH4r5YqIZZHPjfNMjTzJ5TQAVAFYhnYNhoO0dER9ecD3NmNvhJO5qsg/klV+9EFg58y28KixxgiJulKj7UlY7/PYJeHHcebSpfZ8HeiJUtXFFOm1QoUi2mYc5/DlKVNi1GVlPZJXA0Q6BfLVYdBsaBOx1BcESzo82IJgl/4+DKNQdgjW12tv2NSy6gKIZq9Z03iUS845AJLs9D/2LxI8SYSKq4HPMggtVwGZpyqKsDYrNEONhbVCgguLObexEnQ56ul5dxuo++eTZLUtQDWpUXEy6ZuKvWLbu4V0FTEGmiP156N1cpAJmyTiuM4KA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=w/dvHCIjx78q5kgwP6+xD1Jn43uap/PQanehUWu6ESg=;
 b=bIOPvSAaWULyIeDnYLNXM/nR73coAaLnbGrZCVbxzTOo1hJIbeBbHGzVgWl8arj+YzEx8ey0Hv9ir4fd3WRwzZRIa5mwpqAUCVeIv4jEGqaFVqTYZj/rUaqQiv4RDg2qh7SIloj/X/YC1dNyA3uDUTSQtwSciiG4sU9+aQbyXrPdznnCvrL8pif+5KHU/FC4oKgu5WNS4WknxX8aZOnUy4EdqL/l1aiGr+/35eudYh+a8PLcD9b6F18Jzb5M6W1XkMkPq96mJBBcR5KO7hkqRGDdRzUtFwvvWNbh2gxQPVeHrcyKOApc3jyWU/1dyiRoYFMrIBFKaDNed1JwqV2SIA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 07/31] build,include: rework compat-build-source.py
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-8-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <3b7b6366-c138-3e92-3a9b-640fcf949b15@suse.com>
Date: Wed, 7 Jul 2021 16:58:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-8-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P192CA0008.EURP192.PROD.OUTLOOK.COM
 (2603:10a6:102:56::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 18e6b2e2-a9de-4a58-b283-08d94157af2e
X-MS-TrafficTypeDiagnostic: VE1PR04MB6478:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB64782576C05A3CCC34460DCCB31A9@VE1PR04MB6478.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	nUaBzWLw/DyB/+PfB/s2VuPOwYiqUbaCFT1AaexNZCLz0G4HkeN3mRLdOs6wYcxjqxc7WJKg0K+mWTSbLo8Gtn9mKIRVRwFwZjHanVNFL4czuljGDdDe4H5r6W80yjhlV9VAfFJnmWftXW1ChvJVy5nx53VGcRsa6ZbzNWfo4HEH05JJC5b7FndDmoYfxXT5OSWM67f+dRjPyk2z/IUtsHvzp7oA3vjpzpSIMh6TXZJ5gxbWPT1STVY8aKQWYod1efJSEvwrCpINqvRi+Q0xRLTI9AzeSwviP4jSoTT2MqSb5eTNpLSAgG3TVqK7XPLjamgmikgZKBjSm7NzkjjezihLlWLLPZ9n9Sd/CuZvNNkvDfTAKRiROVgNIoIAo4oAYioPOFcDesA4cE3MmIFjIfXqroKCFA5MRcR+XjPlHpnvfmHXOZ2MUhjuDuPgDjA9dz9tqrFxx8W3W21RACRBwlGIZhICUK3ebHpND5IqunljZRiV/eaVIByHu1GO/BkZ0W8vnCd7qD2N+g6W9oIuIS4fMfutgXPVldyTxJQ78L7I2qMtKM5xnChgAQsq2YF7OZWvkFpBj/SeIqJQx6hoKnziq7lsH5PkZKHrH5K40/3i6eSkJLdSTw5v0lD3PomdhVZzN1bZUGqc1l4VZVolAP8IT1AMxCvNAUxQvMFbZYG9lySDIkYLeM6Rq06l3izUkSix0fl0AVKk2+BzsaNTi+84DTJuSBGQDZfeRO0g3jU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(346002)(39850400004)(366004)(376002)(26005)(2616005)(86362001)(956004)(6486002)(478600001)(8676002)(8936002)(186003)(31696002)(54906003)(36756003)(66476007)(53546011)(2906002)(4326008)(5660300002)(316002)(38100700002)(66946007)(6916009)(31686004)(4744005)(16576012)(66556008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 18e6b2e2-a9de-4a58-b283-08d94157af2e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 14:58:30.7688
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: y4Y2NDjzQqJ9uMjYQT03mJVRtlEoeKioGN9fg8l1LPo5/6MeL6130BfyhiTa8yR0xsSB7UqcB1MLNP0fhWe7QA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6478

On 01.07.2021 16:09, Anthony PERARD wrote:
> Improvement are:
> - give the path to xlat.lst as argument
> - include `grep -v` in compat-build-source.py script, we don't need to
>   write this in several scripted language.
> 
> Also remove dependency on Makefile as the file generation doesn't
> depend on it anymore.

Did it before any more? In the subsequent patch I can see more of
a reason to drop the dependency, but neither there nor here I'm
really convinced: In general I think every generate file would
better depend on the makefile containing the rule used for its
building, as a change to that rule means the target wants
rebuilding. Therefore for the moment ...

> No changes in final compat/%.h headers.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> Acked-by: Jan Beulich <jbeulich@suse.com>

... this holds only with the dependency kept in place. But I'll
be happy to get convinced otherwise.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:03:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:03:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152356.281481 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1956-0003OL-D2; Wed, 07 Jul 2021 15:03:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152356.281481; Wed, 07 Jul 2021 15:03:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1956-0003OE-9q; Wed, 07 Jul 2021 15:03:20 +0000
Received: by outflank-mailman (input) for mailman id 152356;
 Wed, 07 Jul 2021 15:03:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1955-0003O5-0A
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:03:19 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 75ece05c-df34-11eb-8508-12813bfff9fa;
 Wed, 07 Jul 2021 15:03:18 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2057.outbound.protection.outlook.com [104.47.0.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-4-80JDRWLfN7CyG9mwRfNygQ-1;
 Wed, 07 Jul 2021 17:03:16 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7037.eurprd04.prod.outlook.com (2603:10a6:800:125::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Wed, 7 Jul
 2021 15:03:14 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:03:14 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR04CA0083.eurprd04.prod.outlook.com (2603:10a6:208:be::24) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.23 via Frontend Transport; Wed, 7 Jul 2021 15:03:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 75ece05c-df34-11eb-8508-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625670197;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Um7SSxksIO7x1ptRIJN1kMJiYNi1cluHX54IQUjSJ4c=;
	b=H6oBXVvycpITw6eNjh4WAHLuZN8cJi/jxwHai9oTz5XUI+RDRAxI/3esQ0m3wQ6BDA8+MU
	Ub20vDQTjyqAIn+cThgHDmI39AZX7jVSkl7F1D30+sh65HVJJKUXYqfXA+cW9KA2IXTg3w
	ezDStbgjUDGV5LiLNqFJh54Jy22oYfQ=
X-MC-Unique: 80JDRWLfN7CyG9mwRfNygQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Lmb+BOUa3q1Xu1nFvXk5nmz+v2yY0Vk5QqVpjdJnYevbPKO/EtUWkwQouhR94OOBfWR3oWzB9UXt9CYhBHPZ9xIS/Pm8Wvs9gI+W8kNAkdiW3LJJDidfZKNc9QpTg45Vb6hClmW0goQa+ckBTSeB0vlw2FGvyjDK7t5bK1fiZ8H5IBm+agj4H41QbXaJ1j+CUHtw0E3lSUbk0llbbAu9xBhPfMkQHOuax/tu570pMFSt1znDxPu8BDZIONoi3sPvewtPFrIudIIMztsYLZEcD5CFm8NCdMVSbOGos/6+jEu6zIfSypkWtP+ugTTJiGziSapy2dAwbADwcwDexV5+eA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Um7SSxksIO7x1ptRIJN1kMJiYNi1cluHX54IQUjSJ4c=;
 b=O15bh5yw2b1wu4v42HjUZnuij0NCx9ltqlp2z4LmEQM4iF89CsllhPKukY8sNsF24Gr74RA+I/F00mywcWYJrP2HTovcmIxYS2FwnUMgX7zwyDafWvdATJtml/epU9Ypqw9QM+mQdzK8ZlaK8zKo1RA7Hl83Eb/PKH0cWcGI2ulU1fXv1wZhMXIxjSpFoesodcm01wujLEQU3+Mf0pW25gQAXynIYBMk18SI9ff6j4fLIXUM43k6iJW4QBxoSdg0X/gUIQ+dMOKBvz4JwkvFNHxFe214z4+HqY+OSWSNGFY/cZD1/wXBuF29eIzRShE8P++61AKGR9/NWYW7x/L2Jg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 09/31] build: clean "lib.a"
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-10-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <bb2c21cc-b801-6d94-5762-7f9e35793998@suse.com>
Date: Wed, 7 Jul 2021 17:03:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-10-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR04CA0083.eurprd04.prod.outlook.com
 (2603:10a6:208:be::24) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6aefe260-102e-401f-1a76-08d9415857ed
X-MS-TrafficTypeDiagnostic: VI1PR04MB7037:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB703780ECCDE8197B088E5FB8B31A9@VI1PR04MB7037.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	cS3yvDHA8b2VEWwaK4Fg00vTKh7XyeSSU+u5F2PWDW3KbilDjmxknlAZUYcB0CZp0tbLa7hNcFK+oBUHHZFIz/7V79aA0handq2C2tg7JLRy7AFcLOQEsKbxBnv+XM1MQoyoOb/x5Y2RMLRoexfz/BftimgoLWG+k5mn+gzNr4lCXxW3fKE/FW476+vcbDu9dIQsjqsNrztVf7B2Zn6ApsQrIf6Qw1+BbVEiQhT/lmCgo86VGZ2V2K2oazKX2yCikwredokHynABhfiynrlweDEzAhB305X4CCgPr8YWMuaM7tUJIzZ8/TeHzABKhVC0FDsGqkKpJLIMpH5Y1UDdvgZ5yNeLJtpsdLI4aWLNrq9x9VcjuvUGni8Dr0a5dBh6ylSkbARvLQn6UXKlPjBJj1e/xrPL6CrSb435TvAZBHNhoFLQIK+pg1YgIyozDhCSWxNbZ6xqaQrij3LJmac9slh8sIOLHQ9oQLNQ+a/t3JtiBvRF/IJucTxVjQcqbwgm/cSj59K7t0h2DRbmIcq9BFpeDFbFx8vA+bx4PxCDgsD1WqlXd+Sw4RxA/veAU2DicSIntHtE85TDrX+GJy6bqy6SjXkOsv8DHdAc2Sy/e/Zx2q/Vj6eYoQAf4MzY5Jh30QcsQVVLXuipkhT+XrRQ4Mhn+Roa9cWLIlDWjD3WpSalkJu/ZR1d4+GhUwCnFl/r/TsFVdXZRIzMahE181ZB0vKw+lXODVYVBTM9dDUbTmE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(376002)(346002)(39850400004)(4326008)(186003)(36756003)(53546011)(2616005)(6916009)(8676002)(956004)(38100700002)(31696002)(31686004)(5660300002)(66556008)(66946007)(54906003)(6486002)(66476007)(86362001)(8936002)(26005)(4744005)(2906002)(478600001)(16576012)(316002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6aefe260-102e-401f-1a76-08d9415857ed
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:03:13.9009
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: X+tJYOmSb+3NOFm0RSAzJcvtV0DQ/vNo/3K17E7u+ukHVK7tbSwDY3B4LE95UqWI9zXsu55kd+VWKKzGSGGy3w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7037

On 01.07.2021 16:09, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Hmm, I was clearly under the impression (or at least assuming)
that $(targets) would be included in what gets cleaned by the
general rule. But it looks I was wrong with this:
Acked-by: Jan Beulich <jbeulich@suse.com>

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:06:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:06:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152363.281492 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m197h-00046Z-UO; Wed, 07 Jul 2021 15:06:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152363.281492; Wed, 07 Jul 2021 15:06:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m197h-00046S-Qh; Wed, 07 Jul 2021 15:06:01 +0000
Received: by outflank-mailman (input) for mailman id 152363;
 Wed, 07 Jul 2021 15:06:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m197h-00046M-2l
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:06:01 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dc01274e-9016-45d6-b528-8ea4986cb5c7;
 Wed, 07 Jul 2021 15:06:00 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2110.outbound.protection.outlook.com [104.47.18.110])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-18-zmS_FOdyPXW12z0qrOS6Ng-1; Wed, 07 Jul 2021 17:05:58 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7037.eurprd04.prod.outlook.com (2603:10a6:800:125::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.27; Wed, 7 Jul
 2021 15:05:57 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:05:57 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P195CA0012.EURP195.PROD.OUTLOOK.COM (2603:10a6:102:b6::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 15:05:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dc01274e-9016-45d6-b528-8ea4986cb5c7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625670359;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=uA6yKVbRGkdt6mFoIv47GD1QeubqKGcVngTzn74HTks=;
	b=YhuxOT7g+2+DLntB9PuhG+6BpUMAhB7WujqshKoXNxNoHPv/0OobUySRSGh2FdVLJhOSv/
	AMvaljVAbGE10MnrzpuBfPu2dTLmgPqPQExk9HcV5lRbuBAB47qWM7rpL4heB4TiQ73hbE
	5wzkqc4pPJ0E6D26Jj3OKPapksS9Y90=
X-MC-Unique: zmS_FOdyPXW12z0qrOS6Ng-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=B4ul1LUfhbVVPwgoaISr+xBV4ovy8DxjJySfTHkMDeuUBU6cNLPpf/jqriizFzN6gNAeYWkL3RJXWQoH7Di0j0xjI3yD3/RO9GYk7NoeiV7M/arBFbtxaGRJCx1iNISa2fUIeJDW5Mjdx6qQWqnDNrpmqoKEh27mif4f3+RIkuMfOGcIlxP3ObQLiBGIOhxJaxPssGVQK/NEwzTGOeHzYdrK/oOfH8kjx0dTM9xEclPhUJ8N4rwNMzgGTWOLeA7OIxUULxiQcRQBJhU0LdO0TSOmbgrr8/4gvqY5Tg7rHQGozOZDMCE9jz+IuJaO2GTTcK6R+jf3HO0NmW/YVmntcw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=uA6yKVbRGkdt6mFoIv47GD1QeubqKGcVngTzn74HTks=;
 b=Mi3jBdTtGi4+2/p9rRR2XiVka/DsQk/F0S9hmBQdY3w1PUl1RzsfNXSKnk0tq6glQJ1b0Pif+RtWic58pYoxeZ8FB16BhVvQUAMHWxfAlrwGpAf4jUUOFzg5aXTcjw3doBpn+TZIY6d9KO11nFRIL9tpNaT13teX2rfKncafyckjafX3F/4N71/p+8jpsQvBoxdg7M6/sVMYo//lYnz61b8Oa/QBQRQ/YqzVQXicApnB+htmmJIYf9CFBck9zemZG+v81sggjfPKeo1haCvKL7jVcuk51IMSEL1LihtKvFc9FO6MXZLcIQfUqLNRiUTYfK/zr9L0XYZiMr/XmtarPA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 10/31] build: use $(kconfig) shortcut in clean rule
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-11-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c68518c8-1b85-5d6e-cdc8-7005bf184304@suse.com>
Date: Wed, 7 Jul 2021 17:05:55 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-11-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P195CA0012.EURP195.PROD.OUTLOOK.COM
 (2603:10a6:102:b6::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6faa57fb-9cb2-4ec6-2ce1-08d94158b983
X-MS-TrafficTypeDiagnostic: VI1PR04MB7037:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB703738CA885313D9AAA689B8B31A9@VI1PR04MB7037.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:400;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	SDnzjleiF996ZqFsaeL4TXPZZtezxtwRxXWRRr07FXjC7XdvhCM73mXXEyp8U8Q2P5NFpWT8jwoL7YmAGWhg6Ygzl8GB2vmEKIxgwGcsVkE6taaH2LV047hjfUyA/do3017pqTfESQv7fzdoYvoDA7GZjemr3FCFjqnQ0BJN+xA4jVheTtL/x5o/Sc+0M3/oo7lk9ld3dJMl8mTBhvYy3e6tVkhYxQ3k5kpJT9doMBlwqewtXeWXG7AO3jeaPqP/DSA9ub01sWTHlFRYCHMP+0Ew6kPlOwyRRAo+njSeXqzJYPsWUR5lM87bVUqYgivT31l2eZsnLg99sAsuzUEMc5fTZ8PBJCeli4e+ZdGgENOLfS0j7uNNbrByN6enju5S8kJKhSopa487e4viE6ccXFpauEMXNw2YTkqsA2/p3FZiv3UWxw1HU5w3L3wEwh8C5pSRy0NcTElGrENApCdly7mlc5lCm8MIhguhjE1g/UxkJl/RHtfj6hmhUzgUk/a/TXXZxIat0PcWaXvypgfJhBjzYNF7AK7oKsBUajR7iXjQdQGR75JrvPL89k84H+mWy8jvPY8GmsGHV+mqeH5SgSOqz+FuPgGHfl8JrWuDI3MG2qSuEqGuVHD2mnejrSxYYj8EqvDCVavVQyEqGOtuzWU+I2sn9tJR5QaIO3HaeQhOQeavMOsmDpUcCkY6u2b08a5bJ+jI7uptM9WU/a3nfI4tsvApwKvTNTm+k/KmLcs=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(376002)(346002)(39850400004)(4326008)(186003)(36756003)(53546011)(2616005)(6916009)(8676002)(956004)(38100700002)(31696002)(31686004)(558084003)(5660300002)(66556008)(66946007)(54906003)(6486002)(66476007)(86362001)(8936002)(26005)(2906002)(478600001)(16576012)(316002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?AcGWjXG+3DePYZkRArr/OmQmuuQ8hvO4nKQF/mq?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6faa57fb-9cb2-4ec6-2ce1-08d94158b983
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:05:57.5984
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: zfqSVT+CG+nU2h0tN1aroX/aa/J4y9oadc68p/rTuysae4/6qn43f4t2qPIf0/3U0VdNFpTd4CpQvcmNYpoLBA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7037

On 01.07.2021 16:09, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:16:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:16:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152370.281503 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19HE-0005cw-Sg; Wed, 07 Jul 2021 15:15:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152370.281503; Wed, 07 Jul 2021 15:15:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19HE-0005cp-PP; Wed, 07 Jul 2021 15:15:52 +0000
Received: by outflank-mailman (input) for mailman id 152370;
 Wed, 07 Jul 2021 15:15:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m19HE-0005ci-1K
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:15:52 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3632d597-df36-11eb-8509-12813bfff9fa;
 Wed, 07 Jul 2021 15:15:50 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2056.outbound.protection.outlook.com [104.47.8.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-14-K08GgI72Mzye89QpRxw7AQ-1; Wed, 07 Jul 2021 17:15:48 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7024.eurprd04.prod.outlook.com (2603:10a6:800:124::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 15:15:46 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:15:46 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0272.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::20) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 15:15:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3632d597-df36-11eb-8509-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625670949;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=bCMC93upXs5jkb+MXGY8aI8pAPWSEWwdjnJOdQ5TQao=;
	b=GOVvJT1+uMrP6BBrgu6rsyh6BF0ARIAGTD9nsPwRjX55gmdBEZUg5JpA1qJX7ZcTjzuFAU
	4PwHs/63Up8dlm9IfovWl5TqgZe4oKBvh0pxBlfZLnhGh4KQct5N3BmdPjPVQg+aug2PR9
	MRbD83Dhn3YmdLAv2IIaXaHllcRYKfY=
X-MC-Unique: K08GgI72Mzye89QpRxw7AQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=aOrNzu+tThMZYuw8bzScnjtHuPEwWKbXjO8C2B5FM2LjlU+TfcMKmUWDM0FaZyB8FwLo9oYoaF/k5nzdXCjBXlDdReJDo2MZQFkBQNYljdoai8nbMHFFYeJcU3KoxjxTuHEE5aNkgq2CZiV2V1WnhCKDCCz1pgQ4CZOMuLoL5T3w+iZYnjPBV/4ZAXYbZOZvXHMsBSHXXDJxxB6hBr4QTQBmSJ1Jbo8Q5QBhKZsJGOSbKH+tJi73LYsPpbMD2d0TUNtDmOxlZlx+qC7mRJ13djdz1k+EqaCVJO58Kdhh/Ld8Z5YsO7+O23UVVrPY9jUMQKvhqtjHlYmqTti1uzxavQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bCMC93upXs5jkb+MXGY8aI8pAPWSEWwdjnJOdQ5TQao=;
 b=l5viSsJO5te6AkixuehD1paasCoO/1EyGO7Xj7h0MGfYCuq9JUk28EaHT5NdPt99nesX4RyyuDaBumYTj6S4kY/8xeYiiDIB2+7u1bJkBXrlXR2mri9sPk+YSNteA7LbcN2LEoyV2OSrF2nheC8Mwe9Ak5bolOrz+GCHURi6WM9Qq7TDRZMWYEQLS4eH+ZdNTTQ0JMz1Tf6LngMc2klImFDlODDxlOaCAZVqxEI0irjzrufD2aXSrdtgwXP9loce5bGwzv0A73LyAKeKV4cXqnD9iz28y/Ewel2Phg0JCSw9C2uSc9n9OGRcvjlG3o6m8UiuPM6x52b9yXWH0duAOQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 11/31] build: fix clean targets when subdir-y is
 used
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-12-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <ecdf93e1-ad03-9257-4d97-a1532878b873@suse.com>
Date: Wed, 7 Jul 2021 17:15:44 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-12-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0272.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1::20) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: cdff63b3-579a-4c4b-df3a-08d9415a185a
X-MS-TrafficTypeDiagnostic: VI1PR04MB7024:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB702490847E4474200C1F4DFFB31A9@VI1PR04MB7024.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	O1gJo6c/oQnWRVpjxamPKgYIqut0YFIz9oiNoeKHVoJp0tBWif50CHun/V2yq7nHncoQXKUcIzSq1HMRbNG6qv/uNtWCRd2EvHu125c2awNheeaoA2ip6M7XOT3bh3Y+WGf1VSa76tiyLo7Fhjdg2QEnnQ5sd1+nz/Jhkmj7ExAcHahH/3pizW2jEtP/2ytsjyhjeGMCx+x9Rvnx8GrTg71U5jWFDgCeUeIGPfuCqIWeZ4YjYpiv40MVdcp0WU36sTGUdS9oRceLPo4Dj2JMEAA2X+MamHmFwNMD9J23iFDjiECIeSi+h+jcnKRFSNQChXUZ4q5A+oiFseWxQ2/JGd+XW2F0tLRuOkvPA95g0GArbtZYVhFApkogCMAsyVyqUIndkVxcmzaIeYKVWVnJcM0HL69+KX09looUqVdfVNK2ZdWsCVvScoyaaM15M/3Qe9rBgmA8ZM/ykz7bx4aQ+qU/EPa7g1Q+rYZMlU7dFdrhptfiSHxNH45vflwcsh4rO7ChdFZIebph1mEco8AUTAT2qGu/HCiJzfMAKvzd+eAjmPiZ0tqspTUJngUBsqh1XwSebjz1cj4BpMzfdQy/4JqRL7K0QWp+0xwNnWzMpcA9uXKYUyzxu1n2vOJ4rUwSj779qsI5C9nAqAEMewzbMgM7BZn+bXkn1HKycFhyRlLRo48F4745EKpJOdLYK3FuUh1aw+hPsAXdcXK2QVSHTDOdfVcy/t4yMk1DjhbE3Kg=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(39850400004)(346002)(136003)(396003)(366004)(316002)(36756003)(86362001)(66946007)(66476007)(6486002)(66556008)(83380400001)(53546011)(16576012)(26005)(2616005)(956004)(2906002)(31696002)(5660300002)(31686004)(54906003)(186003)(4326008)(6916009)(478600001)(8936002)(38100700002)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: cdff63b3-579a-4c4b-df3a-08d9415a185a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:15:46.2565
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Kw9fCLlRtdEUO8EOjfyevnV9BeQj8XftM2W3WNII/gBDWcfl0m3AbOrfO1PzOmv0nLh/0IASZ45NntZRukm3hg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7024

On 01.07.2021 16:09, Anthony PERARD wrote:
> The make variable $(subdir-y) isn't used yet but will be in a
> following patch. Anything in $(subdir-y) doesn't to have a '/' as
> suffix as we already now it's a directory.
> 
> Rework the rules so that it doesn't matter whether there is a '/' or
> not. It also mimic more closely to the way Linux's Kbuild descend in
> subdirectories.
> 
> FORCE phony target isn't needed anymore running clean, so it can be
> removed.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

> --- a/xen/scripts/Makefile.clean
> +++ b/xen/scripts/Makefile.clean
> @@ -12,19 +12,18 @@ include Makefile
>  # Figure out what we need to clean from the various variables
>  # ==========================================================================
>  subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
> -              $(filter %/, $(obj-y) $(obj-n) $(obj-))
> +              $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))

Isn't this a normalization which also wants doing in xen/Rules.mk for
subdir-y? Or perhaps this is part of one of the subsequent patches
already?

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:26:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:26:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152376.281513 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19RM-0007Ay-TM; Wed, 07 Jul 2021 15:26:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152376.281513; Wed, 07 Jul 2021 15:26:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19RM-0007Ar-QN; Wed, 07 Jul 2021 15:26:20 +0000
Received: by outflank-mailman (input) for mailman id 152376;
 Wed, 07 Jul 2021 15:26:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m19RL-0007Aj-DP
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:26:19 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ac4af744-df37-11eb-850a-12813bfff9fa;
 Wed, 07 Jul 2021 15:26:18 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2056.outbound.protection.outlook.com [104.47.0.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-11-XDTiYRhWMKOZVVRmg8SMOg-1; Wed, 07 Jul 2021 17:26:15 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3118.eurprd04.prod.outlook.com (2603:10a6:802:a::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Wed, 7 Jul
 2021 15:26:14 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:26:14 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR02CA0084.eurprd02.prod.outlook.com (2603:10a6:208:154::25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Wed, 7 Jul 2021 15:26:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ac4af744-df37-11eb-850a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625671577;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=yPUGnd18QU02VmAyYX8VKIkXFpSfM89yLNPUejSeJY0=;
	b=NB0n5JvQ7/vxsBcm+7eMogmhnpsv5TMbhG6+Tw5xbDfs9wACVI7n9GkG1AeHL6ms4/MsMQ
	VUFoL6Z2JSbqT98buL2RUQaQ+veUBShZlc/adlqvu5dsPKjPdkm0jp/Im0CocLKK6DGixJ
	MuUgZjviq0z3cq8o92QEFO42pM8lxnw=
X-MC-Unique: XDTiYRhWMKOZVVRmg8SMOg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CjD8RP9gPM6aB/yj0Dkh2G7u0Iuo4webf4uLTN4vnPwe1iqSU4kveHBZJo8e3mjwyEBYW4G8IZIxOJbH9NTNctz+iMjf4Dgszir0iQLZv/lsIMWF41zNidjGgA4zzkWdppUBo+cthsuKDjXIdV5ozvYSDr4O93dZf5XSmMpoF+6Tq4d7Q6wEv7C3lNjgChFYxYC+JGN+KLvK23utqNSPbl+YCjJBAH0p0OCS7uPnbsw/FXmUMoM0gRjOiVeBqVQ9IOnsUnSu84JxOHBMEuPF2Rnq7NGdsS0eTlqB82nfhXVI4uNvIehCa3DxFT+DYTgkkB8pq+hfprMiwSw5xDcmpQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yPUGnd18QU02VmAyYX8VKIkXFpSfM89yLNPUejSeJY0=;
 b=G4t+MpgnBzhMnASCag1mdj3rmXYhkJ14yVtJyMp3nIit2uqGAUm+LEHIkjh1Q5tF3ZtvTU4vrzSDMAnxvYg7hCmXdKbJ1pp+1rcJxadj9N8fpQvV1PUeyhXyZ7jP+d1dhokGoSiWEY00N64KB0Ehu7dE8g1m0dIC3RutBHNaQE8Xy9Xaf3W7iDv19pXjXDlJtdVrhPneG8BZQ9hNzL0YctOpVyQ6orMhMRYG0u30sTWEkeQGR/u9Bxpzne3cEcpffCwUY/kwMq28nj7aGzlivs4eMciob78qWbVL01gqhqAZMkCa0HzthEF07cdwvn888xDMGuVf8370DTrlzcJZjw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 12/31] build: use subdir-y in test/Makefile
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-13-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <b93fcbc5-8b4f-7d17-7d0a-cd2cbf6fd2fe@suse.com>
Date: Wed, 7 Jul 2021 17:26:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-13-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR02CA0084.eurprd02.prod.outlook.com
 (2603:10a6:208:154::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1049166d-54f8-4ad2-c30f-08d9415b8eb2
X-MS-TrafficTypeDiagnostic: VI1PR04MB3118:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3118A834BBE1BEE1E3E9A8E8B31A9@VI1PR04MB3118.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1417;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	yzIh8WNzgM5ekrsdwYedFzaQmbfckHgB663dhJFBWRTUcsosyDwSxEQKgpAqln98zomJPuhDjSgdi3rpZYm4UUKZDlDvhmrZSi5LYxG4LXYxmWpkVTDPM87ZzLHuYu7A1Mb/5p+Yu5nsB2sow3DeLwXs8k6i4FzHeo+OHdv8vsggtlfIPGQKarPPsj0EVHofktHJXGDK81YVVuOF9Yt97LZ3BPatrn8IpQaZEZvLTYtSDPgdDY62glXiPmcZX6ygzvnUrBUxmQ93dgE/7wnqJmgKbjyRSEYs2QNoZaDzjHGod0B3N2YYFnvu/hXCas+xrzukSUb8fmBCcQ9FcH9xkGFA9EgbVoiy+DdxCiTljijU8y/kb8MQ1A5O53vGCRTTGcq9M9BOLdkXPT9lNetU9ayD5qNoQU6oGWBQ/NoMS9PBlt8zb73LG5M8MaTz+QX/qrfc4gjm2oEIOg6mH4oy2gGKnlHogHXitbYkLeMEUWHrzJFNvUM8jJKulx2HWNW+LD7TK02Y0K6flTEjiIt9Lat6/lZm7tGwDV+fXZKoubWHHdlQYj6ef1UVMtw332x+p6oZ43/Lo3buDPZo2fWqKoFTBtR4AeIsmKH+WPv1+rGKtaxQFPmD+uXzeTfbCbC8uclbkwMsNoMtKVl59bKbiI2J1jIew7wBf6ZMfHPwuwG7bnoeY8NDu7Z/93mwdwTmxwKrYVjp5KZc7MzZRxxLkqMhnFhb547ETxTNyrowwl4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(376002)(366004)(39850400004)(346002)(396003)(16576012)(8676002)(66476007)(66556008)(956004)(26005)(83380400001)(53546011)(5660300002)(54906003)(316002)(2616005)(86362001)(66946007)(38100700002)(2906002)(4326008)(478600001)(8936002)(31696002)(6486002)(36756003)(6916009)(186003)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?D3doO/jkKNmZzfKXOQVZsMYWT0vSclDArfw6ypV?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1049166d-54f8-4ad2-c30f-08d9415b8eb2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:26:14.2714
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ORKT1Klns7/AF0XBNt0JS9Ki8JuoXVMWVy2X86xXr4gchna3Je1dsOWVJAK68vluDl3JTx+JFUnLp7lvwyfB6w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3118

On 01.07.2021 16:09, Anthony PERARD wrote:
> --- a/xen/test/Makefile
> +++ b/xen/test/Makefile
> @@ -4,15 +4,10 @@ tests all: build
>  
>  ifneq ($(XEN_TARGET_ARCH),x86_32)
>  # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
> -SUBDIRS += livepatch
> +subdir-y += livepatch
>  endif

As per xen/Rules.mk having

subdir-y := $(subdir-y) $(filter %/, $(obj-y))
obj-y    := $(patsubst %/, %/built_in.o, $(obj-y))
...
subdir-obj-y := $(filter %/built_in.o, $(obj-y))

this will result in building of livepatch/built_in.o afaict. Is
this an intended but benign side effect?

>  install build subtree-force-update uninstall: %:
> -	set -e; for s in $(SUBDIRS); do \
> +	set -e; for s in $(subdir-y); do \
>  		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
>  	done
> -
> -clean::
> -	set -e; for s in $(SUBDIRS); do \
> -		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $@; \
> -	done

And then why can't the generic recursion rule in xen/Rules.mk
not also be used for the "build" target? (I guess "install" and
"uninstall" need to remain separate, and don't think I know what
"subtree-force-update" is about.)

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:28:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:28:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152383.281525 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19TU-0007u2-Do; Wed, 07 Jul 2021 15:28:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152383.281525; Wed, 07 Jul 2021 15:28:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19TU-0007tv-9q; Wed, 07 Jul 2021 15:28:32 +0000
Received: by outflank-mailman (input) for mailman id 152383;
 Wed, 07 Jul 2021 15:28:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m19TS-0007to-9I
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:28:30 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 700cab37-2683-4cb5-96c9-dcc08e252f1f;
 Wed, 07 Jul 2021 15:28:29 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2057.outbound.protection.outlook.com [104.47.8.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-11-pWtREk8_OIq-02k2w0jEZg-1; Wed, 07 Jul 2021 17:28:27 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3389.eurprd04.prod.outlook.com (2603:10a6:803:b::27)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Wed, 7 Jul
 2021 15:28:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:28:25 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0119.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::35) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 15:28:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 700cab37-2683-4cb5-96c9-dcc08e252f1f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625671708;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=hLbfsikYz/i0AKxfArOWpD8QrDhgJPQrDqUXAm9NvKA=;
	b=Qi3Wt7eGFW4JeFUBdaIyrLR5Bg9943+pss8W6IhSs4Z32JNSmfudWYnIQx9odLhnqyFF00
	Fc08npyqxBRlNZxeu85fsqPZqWWfF3wEnD2JFJY+edEVyrMJEKbulnu8376azaehMIjIIf
	9tK954munh+NCtD19oiUgUBs04ygB+M=
X-MC-Unique: pWtREk8_OIq-02k2w0jEZg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=d1Y0CvhFv8+bwQkrGCPQxcEtrcwLl9jPE7SQGf2XcWRful0LrS/KPFX7HlF7N98n3eSCo5kjZ6PkLlcMQGNyXjQfimOJehweMjxk9o95ZBo5ldUw4bJ5UPAmpf0pppJpWstVMPbWnUR7nik7V5Fa5Fz2zWgFso305NwkZ6n1VHrtGugf+QSbTC3uJCOJ5po+MAOnlcNPwMRVqh/DAsNvUAbni3KhiSm5h0lFh+knFXCOmYsh/m0UGjCGlp7RvFj1PSdCzr0ZEI996xCeCH27n9OEF7AnTIp0noiTtoupPd9uNuCen2e8K0I8rT5A648lDsk2T7QlhEvQw2OWSB5RuA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hLbfsikYz/i0AKxfArOWpD8QrDhgJPQrDqUXAm9NvKA=;
 b=ZUUSD90RdkG0j7cE1lbQym+suPUs0FPJxyMjCHpjGZZ7afT5Fdp4Px/tpzmf88TdArNPYoGutszaFSAonMCCh9o8348k5hM9WZSj2oO2b9YbIBIKWuLh6ImmYXGKqHi9Jkld2j4zgSQ8rpeWsQjXSqRzyiCYqSms/E89N7ttOrSkDfUrgsKH7QzS1wsbEZHKsV6XMwUES2T3WT8jsqgDK3uMfcN3X003cWOzGQf8YwRa3XXd97kYupUh+Y4xrJjH8PYVK+9C0W4MUC3+qubP15D1N1NHTIqBrNYOdX9kc/KzWdc0FTpT7V3vecCebeeRo8kPARXOnjsCNw3DhjvimA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 13/31] build,tools: have default rules depends on
 symbols
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-14-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <b82e204c-d737-19b0-67b5-2cc5871c8d47@suse.com>
Date: Wed, 7 Jul 2021 17:28:23 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-14-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0119.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::35) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d6dee144-af3d-407f-4772-08d9415bdce4
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3389:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB33895403255FC71630CC14BEB31A9@VI1PR0402MB3389.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:338;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	QGMe/3h/7BwTGp8GVb4mnfJKib0aHDXrSW/CJF+6nf1rhEG64iR1q1SY7DC67hjc7sjhtIE4nTuyiXOhZnnSWP1Db00yxshLarIce/9ntDPE7mnObGjlMcN0875y5cc4/lIB2OyFz68sTf3hs3LM9JGHWclVPTIj4MHiZTYqsCt8ZqI6LrRFrnou+X1RqXgU6c7Eweg2ROXGGFvmsItpDHQ7S6GPXiRPXcKQ6QZ7LGhd8KzH+5dJtNyk8e2HDCr3IzN8BiuxfUI95BbskhzMydqfeO5p72BplUpgu5a2mS7wWE5RVbQY7nAVr6YrOSADVZqhh/ZizkUnbk9WgSp2OM8AUjhnmN1rrgpkiz7d0BCfwbd/wamlzEz27MA0ne/F0bsNcvZfEKCxO3MjwAJnDiF7/IRqJbbgqdtDFO+6S8OvlxDfeayNDmr3aGQxnVgLVeMABGdtFhF8Chj468hEsw2q9yloCJm/CZql3jKIZDqMx0CNY0UZitwDCreHlJTgBEZ4rKjE9lEgVYZPdA9ufpHgaw0aHaqvSIFn0L4mFBdI1zG8WywV+0oyZlUYjL8csWddmXEIXnpC0+4gpSDrHtn/aX5xwugNhZh46dcGs5bmMlMVfSQTKWfykNMZ6b05DcSJBNWF4os+q8f3+G8qWa109m1XtUOMNPTVxLD1Lq01/aqv+zC4znn94+yK567ThluI5SUZTowdFOsxPLzE8UEpV4p+9RtmmJ6SfSnkKUM=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(66556008)(16576012)(66946007)(2906002)(498600001)(558084003)(66476007)(38100700002)(31686004)(36756003)(186003)(8676002)(6486002)(8936002)(26005)(54906003)(5660300002)(31696002)(6916009)(53546011)(956004)(4326008)(2616005)(86362001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d6dee144-af3d-407f-4772-08d9415bdce4
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:28:25.4232
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 34KUTdqDt6AWtWSZkX3DRRoKYW3QguhCj91js/WR+T9b/8R5FqxdsgamHGqNHy747tqSaJO6ox1paLi9F/piVg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3389

On 01.07.2021 16:09, Anthony PERARD wrote:
> No need to call $(MAKE) again.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152390.281547 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19Zv-0001Cm-BQ; Wed, 07 Jul 2021 15:35:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152390.281547; Wed, 07 Jul 2021 15:35:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19Zv-0001Cf-7x; Wed, 07 Jul 2021 15:35:11 +0000
Received: by outflank-mailman (input) for mailman id 152390;
 Wed, 07 Jul 2021 15:35:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19Zu-0000vf-J6
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:10 +0000
Received: from mail-pf1-x42d.google.com (unknown [2607:f8b0:4864:20::42d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7bedf122-7295-4f8a-81d5-13bd4bd70553;
 Wed, 07 Jul 2021 15:35:07 +0000 (UTC)
Received: by mail-pf1-x42d.google.com with SMTP id d12so2527788pfj.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:07 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.05
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:06 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7bedf122-7295-4f8a-81d5-13bd4bd70553
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=0MmjMjO7XvUbpBRdqqPG7tGmikUa5z2pWikCp/JzIEY=;
        b=NVwj9Iuc5KEhy+VNjKuoKXzwovkub/uFAwYhE0AnnHBmasJim5Egk/ApBPBkeHElpd
         Ip4OV9iRzcuH1M98BYimUE0ATtc9OZzjxhp9kVenh+1g2GC7j0FGlwVlX76/eAv9AUy5
         9BQLpOGq8N2Gl/12RRnCeEgUIV0/g/2A0sPA+EBgMkN3+JMDARX4y7TLbUDo0GsG2/oC
         JKM5rBkRlzM/vVRtQvdfIYDxvguje020NHwrbcvP3/tBkvF9IwOH4Gv8qwl1sFaYA/rf
         CE1zyF098euLk/pqCyShxE6yRwQHIyt8iAJXiqdBMrt+jGjPdOKIVaPjsI5TtBYHsTF2
         b/SQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=0MmjMjO7XvUbpBRdqqPG7tGmikUa5z2pWikCp/JzIEY=;
        b=YNdw12595XiJqgypm+LuNzyjqcxEyU+gyy/VhdwFoL7zm3Sk+Nj2kpCoOGILFebF+J
         Jhfi3GhmvWXRx/920tLxjkBkgkoW60CGfjg1jSC6mA9wEhrRpsSfJgmfYHaOU2CQcaWk
         a8qrPenDVPaoQjwbbGEXd/QUGc97j+S9jqQQEa2iNovt4NfkFG7cJDPL5INREuhMyFW+
         gDGD3pF274gZ0HZEpMTF7NQXa+qvGJ/iR2n291kuvuvuTyqvCBbHt87TWe6rbjQyC1qA
         qlIj2b+AA9G5I94G7+iHCRfbR0Eaq/BHURAXGQ4RtxyZDvCLSCvhAP8errFm7yCmMrNq
         ghkQ==
X-Gm-Message-State: AOAM530DAj+rWufJGtBPofz+n/8+nFl0GmPrU5VgMGDJI9wMfsDjrNXG
	LwEGtucra0R/4Fo1aRMsfpE=
X-Google-Smtp-Source: ABdhPJyEyO7Cyr41C6lgwYWdThy32+NVXiborZ3KnwFy57UZ1FE8H+OlybQRDClF4kF5jUwodhf1Og==
X-Received: by 2002:aa7:8e18:0:b029:2ec:a754:570e with SMTP id c24-20020aa78e180000b02902eca754570emr26014073pfr.38.1625672106748;
        Wed, 07 Jul 2021 08:35:06 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 01/12] x86/HV: Initialize shared memory boundary in the Isolation VM.
Date: Wed,  7 Jul 2021 11:34:42 -0400
Message-Id: <20210707153456.3976348-2-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V exposes shared memory boundary via cpuid
HYPERV_CPUID_ISOLATION_CONFIG and store it in the
shared_gpa_boundary of ms_hyperv struct. This prepares
to share memory with host for SNP guest.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/kernel/cpu/mshyperv.c |  2 ++
 include/asm-generic/mshyperv.h | 12 +++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 10b2a8c10cb6..8aed689db621 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -334,6 +334,8 @@ static void __init ms_hyperv_init_platform(void)
 	if (ms_hyperv.priv_high & HV_ISOLATION) {
 		ms_hyperv.isolation_config_a = cpuid_eax(HYPERV_CPUID_ISOLATION_CONFIG);
 		ms_hyperv.isolation_config_b = cpuid_ebx(HYPERV_CPUID_ISOLATION_CONFIG);
+		ms_hyperv.shared_gpa_boundary =
+			(u64)1 << ms_hyperv.shared_gpa_boundary_bits;
 
 		pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n",
 			ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index 3ae56a29594f..2914e27b0429 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -34,8 +34,18 @@ struct ms_hyperv_info {
 	u32 max_vp_index;
 	u32 max_lp_index;
 	u32 isolation_config_a;
-	u32 isolation_config_b;
+	union {
+		u32 isolation_config_b;
+		struct {
+			u32 cvm_type : 4;
+			u32 Reserved11 : 1;
+			u32 shared_gpa_boundary_active : 1;
+			u32 shared_gpa_boundary_bits : 6;
+			u32 Reserved12 : 20;
+		};
+	};
 	void  __percpu **ghcb_base;
+	u64 shared_gpa_boundary;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152389.281536 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19Zr-0000vt-4r; Wed, 07 Jul 2021 15:35:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152389.281536; Wed, 07 Jul 2021 15:35:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19Zr-0000vm-0Y; Wed, 07 Jul 2021 15:35:07 +0000
Received: by outflank-mailman (input) for mailman id 152389;
 Wed, 07 Jul 2021 15:35:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19Zp-0000vf-N2
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:05 +0000
Received: from mail-pf1-x429.google.com (unknown [2607:f8b0:4864:20::429])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4102ad92-5a19-4df2-af93-d23427aa261a;
 Wed, 07 Jul 2021 15:35:04 +0000 (UTC)
Received: by mail-pf1-x429.google.com with SMTP id f20so2521845pfa.1
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:04 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.02
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:03 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4102ad92-5a19-4df2-af93-d23427aa261a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=jkolUPwi5vmrrny8Lv1Ra8OVYttbBuLIiyALxAjfV3U=;
        b=uMrytKrdPPAXlONXoKnZbDo6E2aSYBoFVoQVDqkbtkCONIx0wfe5zboS/QgKGbqPlK
         HS7DtVjHbxLaSrJiY3p/LKmA3t54P4RWelPEkaOkO8stQ7CAdvAy7zQxCEhobAKO24Uc
         yzBRueqU/xom01Q9hKCy71J3KiVnkJ5uKwhY48+BfUMU4AbwU4AHP4T0qES8oolzCvTS
         TR/u5P+44atse+4WTf8EAqCmkpOdPJMPQcSu8WGo5Hw7d5AOnMUTkIvh5Nho1JiSvb7Y
         Ull2Bm5sux8+oXfXdMFGsGaeiQSo5wus3T4DkOI5mIPdsA0acl20F6nCBoK1W6wpKLxn
         8ZDA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=jkolUPwi5vmrrny8Lv1Ra8OVYttbBuLIiyALxAjfV3U=;
        b=X+LWZwJg68kQ1WZoKs7M7S01Joja7v5A3mof7uJ8FQ82TjNMyo7Xb2czJ/sCwgYX1M
         pLL3WKV2DJDHPeJa/JVbLycxmag9FnOqot+snbfjXrp9TFaor+GMaL1OCmbKBetqn8L/
         FYKJj3A74ogerN4r8dzyhxZ8F04+0N0IzpN7dchV19z2YJHRcKQiTnu932pNDSQ6HMRJ
         7qIE/Gk86P7YmCiAvDrOeO5N75A5gsgnOysuM1r+mSpmMwiOfjai3o7MXyBDUuPg7s9C
         GlD0nyV7jpd5OJh5rXg3DKnUZr+CWsqzRsI2p6gBLfZK764R3cBUOYo8BNTom7KyBfOf
         RUiw==
X-Gm-Message-State: AOAM5339x2mWZ2C89fBgcndroFiYFfCH/UZaMAzU6Kc7se0CoyvOBSwP
	AaGq6kkTZo4YJfxYgqTf88c=
X-Google-Smtp-Source: ABdhPJyD+VDToE/d2GDA5bL79Z5IjrRMQN05lni8aQ82HOiaAKMvr6K+0cHHIUktpTxzsCLuEpzwiw==
X-Received: by 2002:a62:5547:0:b029:2ec:8f20:4e2 with SMTP id j68-20020a6255470000b02902ec8f2004e2mr26077347pfb.71.1625672103921;
        Wed, 07 Jul 2021 08:35:03 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	Tianyu.Lan@microsoft.com,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	martin.b.radev@gmail.com,
	pgonda@google.com,
	hannes@cmpxchg.org,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	rientjes@google.com,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 00/12] x86/Hyper-V: Add Hyper-V Isolation VM support
Date: Wed,  7 Jul 2021 11:34:41 -0400
Message-Id: <20210707153456.3976348-1-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides two kinds of Isolation VMs. VBS(Virtualization-based
security) and AMD SEV-SNP unenlightened Isolation VMs. This patchset
is to add support for these Isolation VM support in Linux.

The memory of these vms are encrypted and host can't access guest
memory directly. Hyper-V provides new host visibility hvcall and
the guest needs to call new hvcall to mark memory visible to host
before sharing memory with host. For security, all network/storage
stack memory should not be shared with host and so there is bounce
buffer requests.

Vmbus channel ring buffer already plays bounce buffer role because
all data from/to host needs to copy from/to between the ring buffer
and IO stack memory. So mark vmbus channel ring buffer visible.

There are two exceptions - packets sent by vmbus_sendpacket_
pagebuffer() and vmbus_sendpacket_mpb_desc(). These packets
contains IO stack memory address and host will access these memory.
So add allocation bounce buffer support in vmbus for these packets.

For SNP isolation VM, guest needs to access the shared memory via
extra address space which is specified by Hyper-V CPUID HYPERV_CPUID_
ISOLATION_CONFIG. The access physical address of the shared memory
should be bounce buffer memory GPA plus with shared_gpa_boundary
reported by CPUID.

Change since v3:
       - Add interface set_memory_decrypted_map() to decrypt memory and
         map bounce buffer in extra address space 
       - Remove swiotlb remap function and store the remap address
         returned by set_memory_decrypted_map() in swiotlb mem data structure.
       - Introduce hv_set_mem_enc() to make code more readable in the __set_memory_enc_dec().

Change since v2:
       - Remove not UIO driver in Isolation VM patch
       - Use vmap_pfn() to replace ioremap_page_range function in
       order to avoid exposing symbol ioremap_page_range() and
       ioremap_page_range()
       - Call hv set mem host visibility hvcall in set_memory_encrypted/decrypted()
       - Enable swiotlb force mode instead of adding Hyper-V dma map/unmap hook
       - Fix code style

Tianyu Lan (12):
  x86/HV: Initialize shared memory boundary in the Isolation VM.
  x86/HV: Add new hvcall guest address host visibility support
  HV: Mark vmbus ring buffer visible to host in Isolation VM
  HV: Add Write/Read MSR registers via ghcb page
  HV: Add ghcb hvcall support for SNP VM
  HV/Vmbus: Add SNP support for VMbus channel initiate message
  HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
  x86/Swiotlb/HV: Add Swiotlb bounce buffer remap function for HV IVM
  HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
  HV/Netvsc: Add Isolation VM support for netvsc driver
  HV/Storvsc: Add Isolation VM support for storvsc driver
  x86/HV: Not set memory decrypted/encrypted during kexec alloc/free
    page in IVM

 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/hv_init.c          |  25 +--
 arch/x86/hyperv/ivm.c              | 299 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 ++
 arch/x86/include/asm/mshyperv.h    |  84 +++++++-
 arch/x86/include/asm/set_memory.h  |   2 +
 arch/x86/include/asm/sev-es.h      |   4 +
 arch/x86/kernel/cpu/mshyperv.c     |   5 +
 arch/x86/kernel/machine_kexec_64.c |   5 +-
 arch/x86/kernel/sev-es-shared.c    |  21 +-
 arch/x86/mm/pat/set_memory.c       |  34 +++-
 arch/x86/xen/pci-swiotlb-xen.c     |   3 +-
 drivers/hv/Kconfig                 |   1 +
 drivers/hv/channel.c               |  48 ++++-
 drivers/hv/connection.c            |  71 ++++++-
 drivers/hv/hv.c                    | 129 +++++++++----
 drivers/hv/hyperv_vmbus.h          |   3 +
 drivers/hv/ring_buffer.c           |  84 ++++++--
 drivers/hv/vmbus_drv.c             |   3 +
 drivers/iommu/hyperv-iommu.c       |  62 ++++++
 drivers/net/hyperv/hyperv_net.h    |   6 +
 drivers/net/hyperv/netvsc.c        | 144 +++++++++++++-
 drivers/net/hyperv/rndis_filter.c  |   2 +
 drivers/scsi/storvsc_drv.c         |  68 ++++++-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 include/asm-generic/mshyperv.h     |  53 ++++-
 include/linux/hyperv.h             |  16 ++
 include/linux/swiotlb.h            |   4 +
 kernel/dma/swiotlb.c               |  11 +-
 29 files changed, 1097 insertions(+), 111 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152391.281558 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19a0-0001X4-Jo; Wed, 07 Jul 2021 15:35:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152391.281558; Wed, 07 Jul 2021 15:35:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19a0-0001Wv-GL; Wed, 07 Jul 2021 15:35:16 +0000
Received: by outflank-mailman (input) for mailman id 152391;
 Wed, 07 Jul 2021 15:35:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19Zz-0000vf-JP
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:15 +0000
Received: from mail-pl1-x62d.google.com (unknown [2607:f8b0:4864:20::62d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 588f6865-4519-4f38-ad19-5a2091209ffe;
 Wed, 07 Jul 2021 15:35:09 +0000 (UTC)
Received: by mail-pl1-x62d.google.com with SMTP id i13so1262380plb.10
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:09 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.08
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:08 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 588f6865-4519-4f38-ad19-5a2091209ffe
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=Wbx/GDjQo5wf+q3MZtzwwUpSNi9ocBIpEvvl5wWSUuY=;
        b=e7uo+5Ivoc5v4lyVfzL5PJWG8DO2FVVvKVNLIP/JelHKqVQ3+/2ZYpapkBrb8LUFVC
         7qYGdaZxlntgy7UeV5pBsyBFqfO+9KN/V/vM4nPx2R0eLL9hzQmmf/tE41W+P0WBh1At
         K1Sp01WjqX2lAHavP/bYmMTQcIFW2bLY9Zr4o1smOkXa1eA2/B3W1FLG5w/rAY9GRB6T
         gUDQxan/h/L61nWFKR325fMENtL6sQZbbso2hLKeW0W8/J9m3ZedU3U7l3Ps2GvH8BvV
         0kvRsrTpIaE6ywUD5UHWtgCI4m2WoruEmTg8eGudyANQCG9ZEAxRyVEJzlSzFrr6JYOn
         VueA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=Wbx/GDjQo5wf+q3MZtzwwUpSNi9ocBIpEvvl5wWSUuY=;
        b=t30NMGyfzfXn/B6YSuugIjinvthwAQAoNAUpr0ppSB3RV6/NuIl0uA9wN/VSXAj94G
         s6pqo9yG9W5Nb1ys0Hf9zcFZt22LERHytp/Pkx1HUT+dWtFEiF9OO+9ucUhN/GvIn4Hc
         svL6XZkJS5spXUZMzVz/9irSelNgAEBWOL/auB2xd9Wkfy3NydEhpwfqcIrwp7km/v9O
         Ex5xSCVT7XAa/cHL8my474Z91r/n4hmix9KBCiUXe/1JnAUMQt7uNzDEX+KQ12W5niNO
         rd+J0QYHj++sFStdXX74+hkZbJeFSo4+sdiOgWFx4wyz/BVdohXFa1QrK5VcTOe5JXG5
         ub5w==
X-Gm-Message-State: AOAM530Q7nD2Fzb+v4F54bqO56U2jwKRhfFbqxEgvAPIJU5w+43aGzfJ
	vs102fNKkIFxH44hlqx1szk=
X-Google-Smtp-Source: ABdhPJzZTP+ads7LHHVospaj5MKCgPFde65N1bwnkO2O7gsx4XoJNrVJZzIIqkRlDyplTSDsm44ULQ==
X-Received: by 2002:a17:902:da85:b029:129:b7a8:6ef8 with SMTP id j5-20020a170902da85b0290129b7a86ef8mr5932578plx.77.1625672108933;
        Wed, 07 Jul 2021 08:35:08 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 02/12] x86/HV: Add new hvcall guest address host visibility support
Date: Wed,  7 Jul 2021 11:34:43 -0400
Message-Id: <20210707153456.3976348-3-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Add new hvcall guest address host visibility support to mark
memory visible to host. Call it inside set_memory_decrypted
/encrypted().

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/ivm.c              | 112 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 +++++
 arch/x86/include/asm/mshyperv.h    |   3 +-
 arch/x86/mm/pat/set_memory.c       |   6 +-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 6 files changed, 139 insertions(+), 3 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

diff --git a/arch/x86/hyperv/Makefile b/arch/x86/hyperv/Makefile
index 48e2c51464e8..5d2de10809ae 100644
--- a/arch/x86/hyperv/Makefile
+++ b/arch/x86/hyperv/Makefile
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0-only
-obj-y			:= hv_init.o mmu.o nested.o irqdomain.o
+obj-y			:= hv_init.o mmu.o nested.o irqdomain.o ivm.o
 obj-$(CONFIG_X86_64)	+= hv_apic.o hv_proc.o
 
 ifdef CONFIG_X86_64
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
new file mode 100644
index 000000000000..24a58795abd8
--- /dev/null
+++ b/arch/x86/hyperv/ivm.c
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Hyper-V Isolation VM interface with paravisor and hypervisor
+ *
+ * Author:
+ *  Tianyu Lan <Tianyu.Lan@microsoft.com>
+ */
+
+#include <linux/hyperv.h>
+#include <linux/types.h>
+#include <linux/bitfield.h>
+#include <linux/slab.h>
+#include <asm/io.h>
+#include <asm/mshyperv.h>
+
+/*
+ * hv_mark_gpa_visibility - Set pages visible to host via hvcall.
+ *
+ * In Isolation VM, all guest memory is encripted from host and guest
+ * needs to set memory visible to host via hvcall before sharing memory
+ * with host.
+ */
+int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility)
+{
+	struct hv_gpa_range_for_visibility **input_pcpu, *input;
+	u16 pages_processed;
+	u64 hv_status;
+	unsigned long flags;
+
+	/* no-op if partition isolation is not enabled */
+	if (!hv_is_isolation_supported())
+		return 0;
+
+	if (count > HV_MAX_MODIFY_GPA_REP_COUNT) {
+		pr_err("Hyper-V: GPA count:%d exceeds supported:%lu\n", count,
+			HV_MAX_MODIFY_GPA_REP_COUNT);
+		return -EINVAL;
+	}
+
+	local_irq_save(flags);
+	input_pcpu = (struct hv_gpa_range_for_visibility **)
+			this_cpu_ptr(hyperv_pcpu_input_arg);
+	input = *input_pcpu;
+	if (unlikely(!input)) {
+		local_irq_restore(flags);
+		return -EINVAL;
+	}
+
+	input->partition_id = HV_PARTITION_ID_SELF;
+	input->host_visibility = visibility;
+	input->reserved0 = 0;
+	input->reserved1 = 0;
+	memcpy((void *)input->gpa_page_list, pfn, count * sizeof(*pfn));
+	hv_status = hv_do_rep_hypercall(
+			HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY, count,
+			0, input, &pages_processed);
+	local_irq_restore(flags);
+
+	if (!(hv_status & HV_HYPERCALL_RESULT_MASK))
+		return 0;
+
+	return hv_status & HV_HYPERCALL_RESULT_MASK;
+}
+EXPORT_SYMBOL(hv_mark_gpa_visibility);
+
+/*
+ * hv_set_mem_host_visibility - Set specified memory visible to host.
+ *
+ * In Isolation VM, all guest memory is encrypted from host and guest
+ * needs to set memory visible to host via hvcall before sharing memory
+ * with host. This function works as wrap of hv_mark_gpa_visibility()
+ * with memory base and size.
+ */
+static int hv_set_mem_host_visibility(void *kbuffer, size_t size, u32 visibility)
+{
+	int pagecount = size >> HV_HYP_PAGE_SHIFT;
+	u64 *pfn_array;
+	int ret = 0;
+	int i, pfn;
+
+	if (!hv_is_isolation_supported() || !ms_hyperv.ghcb_base)
+		return 0;
+
+	pfn_array = kzalloc(HV_HYP_PAGE_SIZE, GFP_KERNEL);
+	if (!pfn_array)
+		return -ENOMEM;
+
+	for (i = 0, pfn = 0; i < pagecount; i++) {
+		pfn_array[pfn] = virt_to_hvpfn(kbuffer + i * HV_HYP_PAGE_SIZE);
+		pfn++;
+
+		if (pfn == HV_MAX_MODIFY_GPA_REP_COUNT || i == pagecount - 1) {
+			ret |= hv_mark_gpa_visibility(pfn, pfn_array, visibility);
+			pfn = 0;
+
+			if (ret)
+				goto err_free_pfn_array;
+		}
+	}
+
+ err_free_pfn_array:
+	kfree(pfn_array);
+	return ret;
+}
+
+int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
+{
+	return hv_set_mem_host_visibility((void *)addr,
+			numpages * HV_HYP_PAGE_SIZE,
+			enc ? VMBUS_PAGE_NOT_VISIBLE
+			: VMBUS_PAGE_VISIBLE_READ_WRITE);
+}
diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
index 606f5cc579b2..68826fbf92ca 100644
--- a/arch/x86/include/asm/hyperv-tlfs.h
+++ b/arch/x86/include/asm/hyperv-tlfs.h
@@ -262,6 +262,11 @@ enum hv_isolation_type {
 #define HV_X64_MSR_TIME_REF_COUNT	HV_REGISTER_TIME_REF_COUNT
 #define HV_X64_MSR_REFERENCE_TSC	HV_REGISTER_REFERENCE_TSC
 
+/* Hyper-V GPA map flags */
+#define	VMBUS_PAGE_NOT_VISIBLE		0
+#define	VMBUS_PAGE_VISIBLE_READ_ONLY	1
+#define	VMBUS_PAGE_VISIBLE_READ_WRITE	3
+
 /*
  * Declare the MSR used to setup pages used to communicate with the hypervisor.
  */
@@ -561,4 +566,17 @@ enum hv_interrupt_type {
 
 #include <asm-generic/hyperv-tlfs.h>
 
+/* All input parameters should be in single page. */
+#define HV_MAX_MODIFY_GPA_REP_COUNT		\
+	((PAGE_SIZE / sizeof(u64)) - 2)
+
+/* HvCallModifySparseGpaPageHostVisibility hypercall */
+struct hv_gpa_range_for_visibility {
+	u64 partition_id;
+	u32 host_visibility:2;
+	u32 reserved0:30;
+	u32 reserved1;
+	u64 gpa_page_list[HV_MAX_MODIFY_GPA_REP_COUNT];
+} __packed;
+
 #endif
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index aeacca7c4da8..2172493dc881 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -194,7 +194,8 @@ struct irq_domain *hv_create_pci_msi_domain(void);
 int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 		struct hv_interrupt_entry *entry);
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
-
+int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
+int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
 #else /* CONFIG_HYPERV */
 static inline void hyperv_init(void) {}
 static inline void hyperv_setup_mmu_ops(void) {}
diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index 156cd235659f..6cc83c57383d 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -29,6 +29,8 @@
 #include <asm/proto.h>
 #include <asm/memtype.h>
 #include <asm/set_memory.h>
+#include <asm/hyperv-tlfs.h>
+#include <asm/mshyperv.h>
 
 #include "../mm_internal.h"
 
@@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
 	int ret;
 
 	/* Nothing to do if memory encryption is not active */
-	if (!mem_encrypt_active())
+	if (hv_is_isolation_supported())
+		return hv_set_mem_enc(addr, numpages, enc);
+	else if (!mem_encrypt_active())
 		return 0;
 
 	/* Should not be working on unaligned addresses */
diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h
index 515c3fb06ab3..8a0219255545 100644
--- a/include/asm-generic/hyperv-tlfs.h
+++ b/include/asm-generic/hyperv-tlfs.h
@@ -158,6 +158,7 @@ struct ms_hyperv_tsc_page {
 #define HVCALL_RETARGET_INTERRUPT		0x007e
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0
+#define HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY 0x00db
 
 /* Extended hypercalls */
 #define HV_EXT_CALL_QUERY_CAPABILITIES		0x8001
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152392.281569 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19a6-0001uq-2b; Wed, 07 Jul 2021 15:35:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152392.281569; Wed, 07 Jul 2021 15:35:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19a5-0001uh-VX; Wed, 07 Jul 2021 15:35:21 +0000
Received: by outflank-mailman (input) for mailman id 152392;
 Wed, 07 Jul 2021 15:35:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19a4-0000vf-Je
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:20 +0000
Received: from mail-pj1-x1033.google.com (unknown [2607:f8b0:4864:20::1033])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 46fcb11a-10f8-4de5-8611-a39a46e83eb4;
 Wed, 07 Jul 2021 15:35:12 +0000 (UTC)
Received: by mail-pj1-x1033.google.com with SMTP id n11so1776508pjo.1
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:12 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.11
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 46fcb11a-10f8-4de5-8611-a39a46e83eb4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=+XJfA3AqCHkXuREWq5JYX1SJ1GS8dmwfVs7cs/uDyzo=;
        b=bui63f9RbeyQ+PjA944VL6eRYVLBMCTgOcLfL7xQd4MV+TGtlZkSCA8rNshpLHozV7
         EDzApfYSVdzgDBhHovaSMLT5NdnaVwtG4C1pbdo7Q08juYDuuI3z2tDDwrE3ko8nbycA
         bmcYDWSgYMR600u1g5+fy2uvqUffuDtVadjxcABOrsUHXRidIjPqqFGjuzQY8ChUFFp7
         IAXd5yOEalFiSg3IZmkvTq6kg0rbxMFNSKHHbwwuHqkbyN1eHbPo1jJaSMwX8vsUtnyr
         T2tqSkyBsX9X2+b02CuW2rweA2SgzcxtUt/E0fnHHNmW0W+cmQBpS8190Rui6bzRjt+3
         C71g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=+XJfA3AqCHkXuREWq5JYX1SJ1GS8dmwfVs7cs/uDyzo=;
        b=BLIm7qQNddkP73gkkTRr72kKgrzkJ/X6VpKIcaIU44aUloJSiiL18cXu1eyos9xaY4
         kLdgVe2OnK1Ph07ZsXlvOaqKSauVIbdIeAWkg66ml6CeViptcMua8MkauWsNt7ledGe7
         HdYFn+TDHjuyFxfMcgMCvuboaw8w0n9L5glgfe+z2eggD8sC7jy7zXvKYX4/+iLQg3qJ
         f5aTJttijFUtADY9hRDe0VmgYFgrLS874zO0D+9PXUXvmnf+W2XBHxHn8ptLIn+4pkSF
         cETGFfpUftXVpdn7vPxd8AlrDjeWRSh4A4IGrqn5J9Qnk+oKCL+FGEb9+imEF+3Okr2H
         4vpA==
X-Gm-Message-State: AOAM53111Q0RC1+ym6Pttja6cTHOQ4yUM4mEt0jT9u0fWPGQGj4iWI6M
	e1ELA7Y9SapnuC6uvsD27eo=
X-Google-Smtp-Source: ABdhPJzfU3YRfZk3nkyd7QDC0TVwR1zYpPvF6PjFltyPDJmrt5nAGFOniT/ucBwrM64vLDEXGYARhg==
X-Received: by 2002:a17:902:c78a:b029:129:7777:18c6 with SMTP id w10-20020a170902c78ab0290129777718c6mr17383657pla.36.1625672111967;
        Wed, 07 Jul 2021 08:35:11 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 03/12] HV: Mark vmbus ring buffer visible to host in Isolation VM
Date: Wed,  7 Jul 2021 11:34:44 -0400
Message-Id: <20210707153456.3976348-4-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Mark vmbus ring buffer visible with set_memory_decrypted() when
establish gpadl handle.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/channel.c   | 38 ++++++++++++++++++++++++++++++++++++--
 include/linux/hyperv.h | 10 ++++++++++
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index f3761c73b074..01048bb07082 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -17,6 +17,7 @@
 #include <linux/hyperv.h>
 #include <linux/uio.h>
 #include <linux/interrupt.h>
+#include <linux/set_memory.h>
 #include <asm/page.h>
 #include <asm/mshyperv.h>
 
@@ -465,7 +466,7 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	struct list_head *curr;
 	u32 next_gpadl_handle;
 	unsigned long flags;
-	int ret = 0;
+	int ret = 0, index;
 
 	next_gpadl_handle =
 		(atomic_inc_return(&vmbus_connection.next_gpadl_handle) - 1);
@@ -474,6 +475,13 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	if (ret)
 		return ret;
 
+	ret = set_memory_decrypted((unsigned long)kbuffer,
+				   HVPFN_UP(size));
+	if (ret) {
+		pr_warn("Failed to set host visibility.\n");
+		return ret;
+	}
+
 	init_completion(&msginfo->waitevent);
 	msginfo->waiting_channel = channel;
 
@@ -539,6 +547,15 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	/* At this point, we received the gpadl created msg */
 	*gpadl_handle = gpadlmsg->gpadl;
 
+	if (type == HV_GPADL_BUFFER)
+		index = 0;
+	else
+		index = channel->gpadl_range[1].gpadlhandle ? 2 : 1;
+
+	channel->gpadl_range[index].size = size;
+	channel->gpadl_range[index].buffer = kbuffer;
+	channel->gpadl_range[index].gpadlhandle = *gpadl_handle;
+
 cleanup:
 	spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
 	list_del(&msginfo->msglistentry);
@@ -549,6 +566,11 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	}
 
 	kfree(msginfo);
+
+	if (ret)
+		set_memory_encrypted((unsigned long)kbuffer,
+				     HVPFN_UP(size));
+
 	return ret;
 }
 
@@ -811,7 +833,7 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
 	struct vmbus_channel_gpadl_teardown *msg;
 	struct vmbus_channel_msginfo *info;
 	unsigned long flags;
-	int ret;
+	int ret, i;
 
 	info = kzalloc(sizeof(*info) +
 		       sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL);
@@ -859,6 +881,18 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
 	spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
 
 	kfree(info);
+
+	/* Find gpadl buffer virtual address and size. */
+	for (i = 0; i < VMBUS_GPADL_RANGE_COUNT; i++)
+		if (channel->gpadl_range[i].gpadlhandle == gpadl_handle)
+			break;
+
+	if (set_memory_encrypted((unsigned long)channel->gpadl_range[i].buffer,
+			HVPFN_UP(channel->gpadl_range[i].size)))
+		pr_warn("Fail to set mem host visibility.\n");
+
+	channel->gpadl_range[i].gpadlhandle = 0;
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(vmbus_teardown_gpadl);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 2e859d2f9609..06eccaba10c5 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -809,6 +809,14 @@ struct vmbus_device {
 
 #define VMBUS_DEFAULT_MAX_PKT_SIZE 4096
 
+struct vmbus_gpadl_range {
+	u32 gpadlhandle;
+	u32 size;
+	void *buffer;
+};
+
+#define VMBUS_GPADL_RANGE_COUNT		3
+
 struct vmbus_channel {
 	struct list_head listentry;
 
@@ -829,6 +837,8 @@ struct vmbus_channel {
 	struct completion rescind_event;
 
 	u32 ringbuffer_gpadlhandle;
+	/* GPADL_RING and Send/Receive GPADL_BUFFER. */
+	struct vmbus_gpadl_range gpadl_range[VMBUS_GPADL_RANGE_COUNT];
 
 	/* Allocated memory for ring buffer */
 	struct page *ringbuffer_page;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152393.281580 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aA-0002K6-Cg; Wed, 07 Jul 2021 15:35:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152393.281580; Wed, 07 Jul 2021 15:35:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aA-0002Jv-93; Wed, 07 Jul 2021 15:35:26 +0000
Received: by outflank-mailman (input) for mailman id 152393;
 Wed, 07 Jul 2021 15:35:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19a9-0000vf-Jy
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:25 +0000
Received: from mail-pf1-x42b.google.com (unknown [2607:f8b0:4864:20::42b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2af33f65-ec76-495f-8484-0a20e81a1840;
 Wed, 07 Jul 2021 15:35:15 +0000 (UTC)
Received: by mail-pf1-x42b.google.com with SMTP id a127so2495787pfa.10
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:15 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.13
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:14 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2af33f65-ec76-495f-8484-0a20e81a1840
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=Yf6ZTtN7PeYt6X8aFjGtHsBACJgt9SiJhwxT0+Mfzbw=;
        b=sD1xSC+/HSx7/DShJpqV09dyu+nfy8unhhdpK1oFEco/nmvlWQHLRkeSjvWFeqkz9s
         M/A0WDAbvuPVPXJRsV9dwBErU+88TkKUBcvl3Xd6RnLgUXTMbGaNpP/kOFPARsyTiFgA
         3ZcUktLGDtHQtCNsBmbMW/MhDhg8pme1zrpOfO/UirMvA6bFlBCMMNwvjgH+9JCY83Yp
         SmxH2Zl2huYhSwPNa57p+eQrZv/jS9AHQckby/dsFwImF8i9N8rfVO++6798oF/1t9qI
         lO3PelEZ72WwI4qw+FQo+GU4vVLMlwqEBYd0Le0OQI06DMBI/cwHo42vLm4VFQIJ/lVx
         y1Cw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=Yf6ZTtN7PeYt6X8aFjGtHsBACJgt9SiJhwxT0+Mfzbw=;
        b=LWwhiWqR1baBbcvrr037/Yoq+jRRys5922V4Td0jBR4JJYmvCdhAHHl/NtWKyWe7dO
         aaxuvVJAV+Kfo1CbT0xj3r36MtnUVv6HuXRKCifvhQWl9MWQlzrCroZPyPtwwKHgwYC5
         eBY/cUfa2Fgw7BpnhcdcCt0qnjJ3YuJu4KzmKon9o/DnFyO32rXgBvzlHOGuh6C5RV0U
         QwPZWA14tXPqIjU5v5OolM4wWxO3ApCb7CCHlFMZFc2EZR02arGVNBC6QI3jXWn5DL98
         kpO+03B4nUIciQHjiqEP8xSRr2GV6X4qPpefqyP7X5UXBJ+DmYGhL1UTcrApXt6s7lwK
         iUvA==
X-Gm-Message-State: AOAM530vOnnjW/pE3TEBBiVoDHEPkwVWFQ3ClkYZhFYcbsHUbAVa+NB4
	7byCichXT6qFwkpwysxNy1s=
X-Google-Smtp-Source: ABdhPJx8KqpacUqRnTW1lZz4e7hpDhFdHXGcDdr1kXcxQmLW6Zr/QMjwoPWnp/Wxf8NNNyNfuPh/bQ==
X-Received: by 2002:a63:7d15:: with SMTP id y21mr26920728pgc.352.1625672114425;
        Wed, 07 Jul 2021 08:35:14 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 04/12] HV: Add Write/Read MSR registers via ghcb page
Date: Wed,  7 Jul 2021 11:34:45 -0400
Message-Id: <20210707153456.3976348-5-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides GHCB protocol to write Synthetic Interrupt
Controller MSR registers in Isolation VM with AMD SEV SNP
and these registers are emulated by hypervisor directly.
Hyper-V requires to write SINTx MSR registers twice. First
writes MSR via GHCB page to communicate with hypervisor
and then writes wrmsr instruction to talk with paravisor
which runs in VMPL0. Guest OS ID MSR also needs to be set
via GHCB.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/hv_init.c       |  25 +------
 arch/x86/hyperv/ivm.c           | 115 ++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h |  78 +++++++++++++++++++-
 arch/x86/include/asm/sev-es.h   |   4 ++
 arch/x86/kernel/cpu/mshyperv.c  |   3 +
 arch/x86/kernel/sev-es-shared.c |  21 ++++--
 drivers/hv/hv.c                 | 121 ++++++++++++++++++++++----------
 include/asm-generic/mshyperv.h  |  12 +++-
 8 files changed, 308 insertions(+), 71 deletions(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index e058f72eeee5..97d1c774cfce 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -445,7 +445,7 @@ void __init hyperv_init(void)
 		goto clean_guest_os_id;
 
 	if (hv_isolation_type_snp()) {
-		ms_hyperv.ghcb_base = alloc_percpu(void *);
+		ms_hyperv.ghcb_base = alloc_percpu(union hv_ghcb __percpu *);
 		if (!ms_hyperv.ghcb_base)
 			goto clean_guest_os_id;
 
@@ -539,6 +539,7 @@ void hyperv_cleanup(void)
 
 	/* Reset our OS id */
 	wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
+	hv_ghcb_msr_write(HV_X64_MSR_GUEST_OS_ID, 0);
 
 	/*
 	 * Reset hypercall page reference before reset the page,
@@ -620,28 +621,6 @@ bool hv_is_hibernation_supported(void)
 }
 EXPORT_SYMBOL_GPL(hv_is_hibernation_supported);
 
-enum hv_isolation_type hv_get_isolation_type(void)
-{
-	if (!(ms_hyperv.priv_high & HV_ISOLATION))
-		return HV_ISOLATION_TYPE_NONE;
-	return FIELD_GET(HV_ISOLATION_TYPE, ms_hyperv.isolation_config_b);
-}
-EXPORT_SYMBOL_GPL(hv_get_isolation_type);
-
-bool hv_is_isolation_supported(void)
-{
-	return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
-}
-EXPORT_SYMBOL_GPL(hv_is_isolation_supported);
-
-DEFINE_STATIC_KEY_FALSE(isolation_type_snp);
-
-bool hv_isolation_type_snp(void)
-{
-	return static_branch_unlikely(&isolation_type_snp);
-}
-EXPORT_SYMBOL_GPL(hv_isolation_type_snp);
-
 /* Bit mask of the extended capability to query: see HV_EXT_CAPABILITY_xxx */
 bool hv_query_ext_cap(u64 cap_query)
 {
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 24a58795abd8..c7b54631ca0d 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -6,6 +6,8 @@
  *  Tianyu Lan <Tianyu.Lan@microsoft.com>
  */
 
+#include <linux/types.h>
+#include <linux/bitfield.h>
 #include <linux/hyperv.h>
 #include <linux/types.h>
 #include <linux/bitfield.h>
@@ -13,6 +15,119 @@
 #include <asm/io.h>
 #include <asm/mshyperv.h>
 
+void hv_ghcb_msr_write(u64 msr, u64 value)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+
+	ghcb_set_rcx(&hv_ghcb->ghcb, msr);
+	ghcb_set_rax(&hv_ghcb->ghcb, lower_32_bits(value));
+	ghcb_set_rdx(&hv_ghcb->ghcb, value >> 32);
+
+	if (sev_es_ghcb_hv_call(&hv_ghcb->ghcb, NULL, SVM_EXIT_MSR, 1, 0))
+		pr_warn("Fail to write msr via ghcb %llx.\n", msr);
+
+	local_irq_restore(flags);
+}
+
+void hv_ghcb_msr_read(u64 msr, u64 *value)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+
+	ghcb_set_rcx(&hv_ghcb->ghcb, msr);
+	if (sev_es_ghcb_hv_call(&hv_ghcb->ghcb, NULL, SVM_EXIT_MSR, 0, 0))
+		pr_warn("Fail to read msr via ghcb %llx.\n", msr);
+	else
+		*value = (u64)lower_32_bits(hv_ghcb->ghcb.save.rax)
+			| ((u64)lower_32_bits(hv_ghcb->ghcb.save.rdx) << 32);
+	local_irq_restore(flags);
+}
+
+void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value)
+{
+	hv_ghcb_msr_read(msr, value);
+}
+EXPORT_SYMBOL_GPL(hv_sint_rdmsrl_ghcb);
+
+void hv_sint_wrmsrl_ghcb(u64 msr, u64 value)
+{
+	hv_ghcb_msr_write(msr, value);
+
+	/* Write proxy bit vua wrmsrl instruction. */
+	if (msr >= HV_X64_MSR_SINT0 && msr <= HV_X64_MSR_SINT15)
+		wrmsrl(msr, value | 1 << 20);
+}
+EXPORT_SYMBOL_GPL(hv_sint_wrmsrl_ghcb);
+
+void hv_signal_eom_ghcb(void)
+{
+	hv_sint_wrmsrl_ghcb(HV_X64_MSR_EOM, 0);
+}
+EXPORT_SYMBOL_GPL(hv_signal_eom_ghcb);
+
+enum hv_isolation_type hv_get_isolation_type(void)
+{
+	if (!(ms_hyperv.priv_high & HV_ISOLATION))
+		return HV_ISOLATION_TYPE_NONE;
+	return FIELD_GET(HV_ISOLATION_TYPE, ms_hyperv.isolation_config_b);
+}
+EXPORT_SYMBOL_GPL(hv_get_isolation_type);
+
+/*
+ * hv_is_isolation_supported - Check system runs in the Hyper-V
+ * isolation VM.
+ */
+bool hv_is_isolation_supported(void)
+{
+	return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
+}
+EXPORT_SYMBOL_GPL(hv_is_isolation_supported);
+
+DEFINE_STATIC_KEY_FALSE(isolation_type_snp);
+
+/*
+ * hv_isolation_type_snp - Check system runs in the AMD SEV-SNP based
+ * isolation VM.
+ */
+bool hv_isolation_type_snp(void)
+{
+	return static_branch_unlikely(&isolation_type_snp);
+}
+EXPORT_SYMBOL_GPL(hv_isolation_type_snp);
+
 /*
  * hv_mark_gpa_visibility - Set pages visible to host via hvcall.
  *
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 2172493dc881..f9cc3753040a 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -30,6 +30,63 @@ static inline u64 hv_get_register(unsigned int reg)
 	return value;
 }
 
+#define hv_get_sint_reg(val, reg) {		\
+	if (hv_isolation_type_snp())		\
+		hv_get_##reg##_ghcb(&val);	\
+	else					\
+		rdmsrl(HV_X64_MSR_##reg, val);	\
+	}
+
+#define hv_set_sint_reg(val, reg) {		\
+	if (hv_isolation_type_snp())		\
+		hv_set_##reg##_ghcb(val);	\
+	else					\
+		wrmsrl(HV_X64_MSR_##reg, val);	\
+	}
+
+
+#define hv_get_simp(val) hv_get_sint_reg(val, SIMP)
+#define hv_get_siefp(val) hv_get_sint_reg(val, SIEFP)
+
+#define hv_set_simp(val) hv_set_sint_reg(val, SIMP)
+#define hv_set_siefp(val) hv_set_sint_reg(val, SIEFP)
+
+#define hv_get_synic_state(val) {			\
+	if (hv_isolation_type_snp())			\
+		hv_get_synic_state_ghcb(&val);		\
+	else						\
+		rdmsrl(HV_X64_MSR_SCONTROL, val);	\
+	}
+#define hv_set_synic_state(val) {			\
+	if (hv_isolation_type_snp())			\
+		hv_set_synic_state_ghcb(val);		\
+	else						\
+		wrmsrl(HV_X64_MSR_SCONTROL, val);	\
+	}
+
+#define hv_get_vp_index(index) rdmsrl(HV_X64_MSR_VP_INDEX, index)
+
+#define hv_signal_eom() {			 \
+	if (hv_isolation_type_snp() &&		 \
+	    old_msg_type != HVMSG_TIMER_EXPIRED) \
+		hv_signal_eom_ghcb();		 \
+	else					 \
+		wrmsrl(HV_X64_MSR_EOM, 0);	 \
+	}
+
+#define hv_get_synint_state(int_num, val) {		\
+	if (hv_isolation_type_snp())			\
+		hv_get_synint_state_ghcb(int_num, &val);\
+	else						\
+		rdmsrl(HV_X64_MSR_SINT0 + int_num, val);\
+	}
+#define hv_set_synint_state(int_num, val) {		\
+	if (hv_isolation_type_snp())			\
+		hv_set_synint_state_ghcb(int_num, val);	\
+	else						\
+		wrmsrl(HV_X64_MSR_SINT0 + int_num, val);\
+	}
+
 #define hv_get_raw_timer() rdtsc_ordered()
 
 void hyperv_vector_handler(struct pt_regs *regs);
@@ -196,6 +253,25 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
 int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
 int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
+void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
+void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
+void hv_signal_eom_ghcb(void);
+void hv_ghcb_msr_write(u64 msr, u64 value);
+void hv_ghcb_msr_read(u64 msr, u64 *value);
+
+#define hv_get_synint_state_ghcb(int_num, val)			\
+	hv_sint_rdmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
+#define hv_set_synint_state_ghcb(int_num, val) \
+	hv_sint_wrmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
+
+#define hv_get_SIMP_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SIMP, val)
+#define hv_set_SIMP_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SIMP, val)
+
+#define hv_get_SIEFP_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SIEFP, val)
+#define hv_set_SIEFP_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SIEFP, val)
+
+#define hv_get_synic_state_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SCONTROL, val)
+#define hv_set_synic_state_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SCONTROL, val)
 #else /* CONFIG_HYPERV */
 static inline void hyperv_init(void) {}
 static inline void hyperv_setup_mmu_ops(void) {}
@@ -212,9 +288,9 @@ static inline int hyperv_flush_guest_mapping_range(u64 as,
 {
 	return -1;
 }
+static inline void hv_signal_eom_ghcb(void) { };
 #endif /* CONFIG_HYPERV */
 
-
 #include <asm-generic/mshyperv.h>
 
 #endif
diff --git a/arch/x86/include/asm/sev-es.h b/arch/x86/include/asm/sev-es.h
index cf1d957c7091..482a4bb92c48 100644
--- a/arch/x86/include/asm/sev-es.h
+++ b/arch/x86/include/asm/sev-es.h
@@ -103,6 +103,10 @@ static __always_inline void sev_es_nmi_complete(void)
 		__sev_es_nmi_complete();
 }
 extern int __init sev_es_efi_map_ghcbs(pgd_t *pgd);
+enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
+				   struct es_em_ctxt *ctxt,
+				   u64 exit_code, u64 exit_info_1,
+				   u64 exit_info_2);
 #else
 static inline void sev_es_ist_enter(struct pt_regs *regs) { }
 static inline void sev_es_ist_exit(void) { }
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 8aed689db621..d9ac13230950 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -339,6 +339,9 @@ static void __init ms_hyperv_init_platform(void)
 
 		pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n",
 			ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b);
+
+		if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP)
+			static_branch_enable(&isolation_type_snp);
 	}
 
 	if (ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED) {
diff --git a/arch/x86/kernel/sev-es-shared.c b/arch/x86/kernel/sev-es-shared.c
index 0aa9f13efd57..b7da08c97d2c 100644
--- a/arch/x86/kernel/sev-es-shared.c
+++ b/arch/x86/kernel/sev-es-shared.c
@@ -93,10 +93,10 @@ static void vc_finish_insn(struct es_em_ctxt *ctxt)
 	ctxt->regs->ip += ctxt->insn.length;
 }
 
-static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
-					  struct es_em_ctxt *ctxt,
-					  u64 exit_code, u64 exit_info_1,
-					  u64 exit_info_2)
+enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
+				   struct es_em_ctxt *ctxt,
+				   u64 exit_code, u64 exit_info_1,
+				   u64 exit_info_2)
 {
 	enum es_result ret;
 
@@ -108,7 +108,16 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 	ghcb_set_sw_exit_info_1(ghcb, exit_info_1);
 	ghcb_set_sw_exit_info_2(ghcb, exit_info_2);
 
-	sev_es_wr_ghcb_msr(__pa(ghcb));
+	/*
+	 * Hyper-V runs paravisor with SEV. Ghcb page is allocated by
+	 * paravisor and not needs to be updated in the Linux guest.
+	 * Otherwise, the ghcb page's PA reported by paravisor is above
+	 * VTOM. Hyper-V use this function with NULL for ctxt point and
+	 * skip setting ghcb page in such case.
+	 */
+	if (ctxt)
+		sev_es_wr_ghcb_msr(__pa(ghcb));
+
 	VMGEXIT();
 
 	if ((ghcb->save.sw_exit_info_1 & 0xffffffff) == 1) {
@@ -119,7 +128,7 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 		v = info & SVM_EVTINJ_VEC_MASK;
 
 		/* Check if exception information from hypervisor is sane. */
-		if ((info & SVM_EVTINJ_VALID) &&
+		if (ctxt && (info & SVM_EVTINJ_VALID) &&
 		    ((v == X86_TRAP_GP) || (v == X86_TRAP_UD)) &&
 		    ((info & SVM_EVTINJ_TYPE_MASK) == SVM_EVTINJ_TYPE_EXEPT)) {
 			ctxt->fi.vector = v;
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index e83507f49676..59f7173c4d9f 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -8,6 +8,7 @@
  */
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
@@ -136,17 +137,24 @@ int hv_synic_alloc(void)
 		tasklet_init(&hv_cpu->msg_dpc,
 			     vmbus_on_msg_dpc, (unsigned long) hv_cpu);
 
-		hv_cpu->synic_message_page =
-			(void *)get_zeroed_page(GFP_ATOMIC);
-		if (hv_cpu->synic_message_page == NULL) {
-			pr_err("Unable to allocate SYNIC message page\n");
-			goto err;
-		}
+		/*
+		 * Synic message and event pages are allocated by paravisor.
+		 * Skip these pages allocation here.
+		 */
+		if (!hv_isolation_type_snp()) {
+			hv_cpu->synic_message_page =
+				(void *)get_zeroed_page(GFP_ATOMIC);
+			if (hv_cpu->synic_message_page == NULL) {
+				pr_err("Unable to allocate SYNIC message page\n");
+				goto err;
+			}
 
-		hv_cpu->synic_event_page = (void *)get_zeroed_page(GFP_ATOMIC);
-		if (hv_cpu->synic_event_page == NULL) {
-			pr_err("Unable to allocate SYNIC event page\n");
-			goto err;
+			hv_cpu->synic_event_page =
+				(void *)get_zeroed_page(GFP_ATOMIC);
+			if (hv_cpu->synic_event_page == NULL) {
+				pr_err("Unable to allocate SYNIC event page\n");
+				goto err;
+			}
 		}
 
 		hv_cpu->post_msg_page = (void *)get_zeroed_page(GFP_ATOMIC);
@@ -173,10 +181,17 @@ void hv_synic_free(void)
 	for_each_present_cpu(cpu) {
 		struct hv_per_cpu_context *hv_cpu
 			= per_cpu_ptr(hv_context.cpu_context, cpu);
+		free_page((unsigned long)hv_cpu->post_msg_page);
+
+		/*
+		 * Synic message and event pages are allocated by paravisor.
+		 * Skip free these pages here.
+		 */
+		if (hv_isolation_type_snp())
+			continue;
 
 		free_page((unsigned long)hv_cpu->synic_event_page);
 		free_page((unsigned long)hv_cpu->synic_message_page);
-		free_page((unsigned long)hv_cpu->post_msg_page);
 	}
 
 	kfree(hv_context.hv_numa_map);
@@ -199,26 +214,43 @@ void hv_synic_enable_regs(unsigned int cpu)
 	union hv_synic_scontrol sctrl;
 
 	/* Setup the Synic's message page */
-	simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP);
+	hv_get_simp(simp.as_uint64);
 	simp.simp_enabled = 1;
-	simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page)
-		>> HV_HYP_PAGE_SHIFT;
 
-	hv_set_register(HV_REGISTER_SIMP, simp.as_uint64);
+	if (hv_isolation_type_snp()) {
+		hv_cpu->synic_message_page
+			= memremap(simp.base_simp_gpa << HV_HYP_PAGE_SHIFT,
+				   HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+		if (!hv_cpu->synic_message_page)
+			pr_err("Fail to map syinc message page.\n");
+	} else {
+		simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page)
+			>> HV_HYP_PAGE_SHIFT;
+	}
+
+	hv_set_simp(simp.as_uint64);
 
 	/* Setup the Synic's event page */
-	siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP);
+	hv_get_siefp(siefp.as_uint64);
 	siefp.siefp_enabled = 1;
-	siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page)
-		>> HV_HYP_PAGE_SHIFT;
 
-	hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64);
+	if (hv_isolation_type_snp()) {
+		hv_cpu->synic_event_page =
+			memremap(siefp.base_siefp_gpa << HV_HYP_PAGE_SHIFT,
+				 HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+
+		if (!hv_cpu->synic_event_page)
+			pr_err("Fail to map syinc event page.\n");
+	} else {
+		siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page)
+			>> HV_HYP_PAGE_SHIFT;
+	}
+	hv_set_siefp(siefp.as_uint64);
 
 	/* Setup the shared SINT. */
 	if (vmbus_irq != -1)
 		enable_percpu_irq(vmbus_irq, 0);
-	shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 +
-					VMBUS_MESSAGE_SINT);
+	hv_get_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
 	shared_sint.vector = vmbus_interrupt;
 	shared_sint.masked = false;
@@ -233,14 +265,12 @@ void hv_synic_enable_regs(unsigned int cpu)
 #else
 	shared_sint.auto_eoi = 0;
 #endif
-	hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT,
-				shared_sint.as_uint64);
+	hv_set_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
 	/* Enable the global synic bit */
-	sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL);
+	hv_get_synic_state(sctrl.as_uint64);
 	sctrl.enable = 1;
-
-	hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64);
+	hv_set_synic_state(sctrl.as_uint64);
 }
 
 int hv_synic_init(unsigned int cpu)
@@ -257,37 +287,50 @@ int hv_synic_init(unsigned int cpu)
  */
 void hv_synic_disable_regs(unsigned int cpu)
 {
+	struct hv_per_cpu_context *hv_cpu
+		= per_cpu_ptr(hv_context.cpu_context, cpu);
 	union hv_synic_sint shared_sint;
 	union hv_synic_simp simp;
 	union hv_synic_siefp siefp;
 	union hv_synic_scontrol sctrl;
 
-	shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 +
-					VMBUS_MESSAGE_SINT);
-
+	hv_get_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 	shared_sint.masked = 1;
+	hv_set_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
+
 
 	/* Need to correctly cleanup in the case of SMP!!! */
 	/* Disable the interrupt */
-	hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT,
-				shared_sint.as_uint64);
+	hv_get_simp(simp.as_uint64);
 
-	simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP);
+	/*
+	 * In Isolation VM, sim and sief pages are allocated by
+	 * paravisor. These pages also will be used by kdump
+	 * kernel. So just reset enable bit here and keep page
+	 * addresses.
+	 */
 	simp.simp_enabled = 0;
-	simp.base_simp_gpa = 0;
+	if (hv_isolation_type_snp())
+		memunmap(hv_cpu->synic_message_page);
+	else
+		simp.base_simp_gpa = 0;
 
-	hv_set_register(HV_REGISTER_SIMP, simp.as_uint64);
+	hv_set_simp(simp.as_uint64);
 
-	siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP);
+	hv_get_siefp(siefp.as_uint64);
 	siefp.siefp_enabled = 0;
-	siefp.base_siefp_gpa = 0;
 
-	hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64);
+	if (hv_isolation_type_snp())
+		memunmap(hv_cpu->synic_event_page);
+	else
+		siefp.base_siefp_gpa = 0;
+
+	hv_set_siefp(siefp.as_uint64);
 
 	/* Disable the global synic bit */
-	sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL);
+	hv_get_synic_state(sctrl.as_uint64);
 	sctrl.enable = 0;
-	hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64);
+	hv_set_synic_state(sctrl.as_uint64);
 
 	if (vmbus_irq != -1)
 		disable_percpu_irq(vmbus_irq);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index 2914e27b0429..e6d6886faed1 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -22,9 +22,16 @@
 #include <linux/atomic.h>
 #include <linux/bitops.h>
 #include <linux/cpumask.h>
+#include <asm/svm.h>
+#include <asm/sev-es.h>
 #include <asm/ptrace.h>
+#include <asm/mshyperv.h>
 #include <asm/hyperv-tlfs.h>
 
+union hv_ghcb {
+	struct ghcb ghcb;
+} __packed __aligned(PAGE_SIZE);
+
 struct ms_hyperv_info {
 	u32 features;
 	u32 priv_high;
@@ -44,13 +51,14 @@ struct ms_hyperv_info {
 			u32 Reserved12 : 20;
 		};
 	};
-	void  __percpu **ghcb_base;
+	union hv_ghcb __percpu **ghcb_base;
 	u64 shared_gpa_boundary;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
 extern u64 hv_do_hypercall(u64 control, void *inputaddr, void *outputaddr);
 extern u64 hv_do_fast_hypercall8(u16 control, u64 input8);
+extern bool hv_isolation_type_snp(void);
 
 /* Helper functions that provide a consistent pattern for checking Hyper-V hypercall status. */
 static inline int hv_result(u64 status)
@@ -145,7 +153,7 @@ static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type)
 		 * possibly deliver another msg from the
 		 * hypervisor
 		 */
-		hv_set_register(HV_REGISTER_EOM, 0);
+		hv_signal_eom();
 	}
 }
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152395.281591 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aF-0002oA-VS; Wed, 07 Jul 2021 15:35:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152395.281591; Wed, 07 Jul 2021 15:35:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aF-0002no-Qu; Wed, 07 Jul 2021 15:35:31 +0000
Received: by outflank-mailman (input) for mailman id 152395;
 Wed, 07 Jul 2021 15:35:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19aE-0000vf-KA
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:30 +0000
Received: from mail-pg1-x534.google.com (unknown [2607:f8b0:4864:20::534])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a4a80eb2-0ebb-4ed2-baf2-cc2ed3f5eeaf;
 Wed, 07 Jul 2021 15:35:18 +0000 (UTC)
Received: by mail-pg1-x534.google.com with SMTP id t9so2639011pgn.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:18 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.17
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:17 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a4a80eb2-0ebb-4ed2-baf2-cc2ed3f5eeaf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=XnnD+WKjmMaIcoxzXQeIqu3OOT9S8jIhhegPGmtXPps=;
        b=oaL0A1JtN7PBLGoV1YGeMFUgyp9SyUFco9uhf2pPj9nDoTX16X2ZY93jk5mSlH+DsN
         SvCLYXZI+R7feW0Jx0OMtXNb4f62D1NKXZBhVGBE//ZTEOLu6B147uN+5g6H2xL9diy5
         ufW4ucIzb9GScnOrnpTdTFdTQX2AYyQODtFUohD33rBRHrIipu1aU1jrbbynVzOeLZPr
         5hxECBpjjXTRzk23jlBCHvmcAXtPztCNhXumUoIHe4jBxeK8cDgUJZKiMEk8kLBBHCU6
         7G8klAIhGVfKVULa1RhqCfv0O34Au8CkmaWIXjZAzuWOdrG/V8D3KqnPCDtjK/EdzTix
         jn7Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=XnnD+WKjmMaIcoxzXQeIqu3OOT9S8jIhhegPGmtXPps=;
        b=HgRWolNmj1kqWJV14o2x/lOJOXLpa+A80M4h4QQp34xZfTZt3jBnuko5E3G0aVrchy
         7UeNlb8HxVjhKBOCkl2vV+5+RJtmEARHvWuk0iGZ4M4wBfwD3ORPOtrOMyIumFMmrlMt
         +j9h3IoFwB+2a2W8RkVlLoIfd7W242ipuiUWCoq4bqVKn1kLLC7cj/WQdKPWXaITAONt
         q/zjdAm7hfV3YM4JpeGaCVOlqDzZhfgWVEP7lTac1VfhgRnUtLFqzWNkElN9GlxGQ/Us
         hZDKKgziH+wPoBqvRL5JGCKAfzw3h5JJdIAiW3C94rqi/23BWOr0tsgbUz2C7hcLlbpq
         SJYQ==
X-Gm-Message-State: AOAM531ZYMSk5X5ip7uFjyTRko3qLb7GTPWl1i1YQp3kni799hbWA0GB
	sUyze/jzGDM6k3DRClpOae0=
X-Google-Smtp-Source: ABdhPJxV6H7qeqYvuTG8QtTM4W1lsIpIcrJFKXi7bJYXvWIOKqZZzABLwFM0i62fKflJpqZul4Pglw==
X-Received: by 2002:a63:3dcb:: with SMTP id k194mr26633987pga.202.1625672118056;
        Wed, 07 Jul 2021 08:35:18 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 05/12] HV: Add ghcb hvcall support for SNP VM
Date: Wed,  7 Jul 2021 11:34:46 -0400
Message-Id: <20210707153456.3976348-6-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides ghcb hvcall to handle VMBus
HVCALL_SIGNAL_EVENT and HVCALL_POST_MESSAGE
msg in SNP Isolation VM. Add such support.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/ivm.c           | 42 +++++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h |  1 +
 drivers/hv/connection.c         |  6 ++++-
 drivers/hv/hv.c                 |  8 ++++++-
 include/asm-generic/mshyperv.h  | 29 +++++++++++++++++++++++
 5 files changed, 84 insertions(+), 2 deletions(-)

diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index c7b54631ca0d..8a6f4e9e3d6c 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -15,6 +15,48 @@
 #include <asm/io.h>
 #include <asm/mshyperv.h>
 
+u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return -EFAULT;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return -EFAULT;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+	hv_ghcb->ghcb.protocol_version = 1;
+	hv_ghcb->ghcb.ghcb_usage = 1;
+
+	hv_ghcb->hypercall.outputgpa = (u64)output;
+	hv_ghcb->hypercall.hypercallinput.asuint64 = 0;
+	hv_ghcb->hypercall.hypercallinput.callcode = control;
+
+	if (input_size)
+		memcpy(hv_ghcb->hypercall.hypercalldata, input, input_size);
+
+	VMGEXIT();
+
+	hv_ghcb->ghcb.ghcb_usage = 0xffffffff;
+	memset(hv_ghcb->ghcb.save.valid_bitmap, 0,
+	       sizeof(hv_ghcb->ghcb.save.valid_bitmap));
+
+	local_irq_restore(flags);
+
+	return hv_ghcb->hypercall.hypercalloutput.callstatus;
+}
+EXPORT_SYMBOL_GPL(hv_ghcb_hypercall);
+
 void hv_ghcb_msr_write(u64 msr, u64 value)
 {
 	union hv_ghcb *hv_ghcb;
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index f9cc3753040a..fe03e3e833ac 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -258,6 +258,7 @@ void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
 void hv_signal_eom_ghcb(void);
 void hv_ghcb_msr_write(u64 msr, u64 value);
 void hv_ghcb_msr_read(u64 msr, u64 *value);
+u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size);
 
 #define hv_get_synint_state_ghcb(int_num, val)			\
 	hv_sint_rdmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 311cd005b3be..186fd4c8acd4 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -445,6 +445,10 @@ void vmbus_set_event(struct vmbus_channel *channel)
 
 	++channel->sig_events;
 
-	hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event);
+	if (hv_isolation_type_snp())
+		hv_ghcb_hypercall(HVCALL_SIGNAL_EVENT, &channel->sig_event,
+				NULL, sizeof(u64));
+	else
+		hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event);
 }
 EXPORT_SYMBOL_GPL(vmbus_set_event);
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 59f7173c4d9f..e5c9fc467893 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -98,7 +98,13 @@ int hv_post_message(union hv_connection_id connection_id,
 	aligned_msg->payload_size = payload_size;
 	memcpy((void *)aligned_msg->payload, payload, payload_size);
 
-	status = hv_do_hypercall(HVCALL_POST_MESSAGE, aligned_msg, NULL);
+	if (hv_isolation_type_snp())
+		status = hv_ghcb_hypercall(HVCALL_POST_MESSAGE,
+				(void *)aligned_msg, NULL,
+				sizeof(struct hv_input_post_message));
+	else
+		status = hv_do_hypercall(HVCALL_POST_MESSAGE,
+				aligned_msg, NULL);
 
 	/* Preemption must remain disabled until after the hypercall
 	 * so some other thread can't get scheduled onto this cpu and
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index e6d6886faed1..8f6f283fb5b5 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -30,6 +30,35 @@
 
 union hv_ghcb {
 	struct ghcb ghcb;
+	struct {
+		u64 hypercalldata[509];
+		u64 outputgpa;
+		union {
+			union {
+				struct {
+					u32 callcode        : 16;
+					u32 isfast          : 1;
+					u32 reserved1       : 14;
+					u32 isnested        : 1;
+					u32 countofelements : 12;
+					u32 reserved2       : 4;
+					u32 repstartindex   : 12;
+					u32 reserved3       : 4;
+				};
+				u64 asuint64;
+			} hypercallinput;
+			union {
+				struct {
+					u16 callstatus;
+					u16 reserved1;
+					u32 elementsprocessed : 12;
+					u32 reserved2         : 20;
+				};
+				u64 asunit64;
+			} hypercalloutput;
+		};
+		u64 reserved2;
+	} hypercall;
 } __packed __aligned(PAGE_SIZE);
 
 struct ms_hyperv_info {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152396.281602 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aL-0003J0-8z; Wed, 07 Jul 2021 15:35:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152396.281602; Wed, 07 Jul 2021 15:35:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aL-0003Ir-55; Wed, 07 Jul 2021 15:35:37 +0000
Received: by outflank-mailman (input) for mailman id 152396;
 Wed, 07 Jul 2021 15:35:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19aJ-0000vf-KO
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:35 +0000
Received: from mail-pl1-x630.google.com (unknown [2607:f8b0:4864:20::630])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 32e8aa8c-2a8b-4034-be3b-9460ee6dd770;
 Wed, 07 Jul 2021 15:35:21 +0000 (UTC)
Received: by mail-pl1-x630.google.com with SMTP id a14so1276752pls.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:21 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:20 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 32e8aa8c-2a8b-4034-be3b-9460ee6dd770
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=DW09bNLqhYERQ+eFNE9hKu+s7sJ/vWcqsCTKXxunGqM=;
        b=cIFDaKgiiPtOdys0ckFLlqTXvpBjxusQHPyVw0git1HI34eAQHldx1OHbAukO02qK2
         jO41MxrAmo6HuVHrCcEi0xkyqRkM+X07+/a8n7GutyGjN6M3VL2n+zEkXM+gzp++4APs
         5eqR8YGL9FGVPiJEAcADtZHttI9CTB309h0GZhRqTr4jDQbTFZz2KPsVZ9aaArAaU8Yd
         wsluRatX1USADsiLfYwFP8U2SJX7psfyyN4Biux95YHUEPsfaAAiksQhTEREch+tDoiK
         VcTzQD2l/W8BVVTENf+Y3WTsexFQxrH7AdvSsm9F6ENcdIGE+NXQ7BUousTxHQ57SIzM
         ZQpg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=DW09bNLqhYERQ+eFNE9hKu+s7sJ/vWcqsCTKXxunGqM=;
        b=NkV+pvSYeh0NDUpb3FCHYk2IyGGw9ikmL88Hy08HvDolkirPLo3VicUfoHRvwFlss+
         QXYDYNATW2/cL7iN81zRY0VyocXehY9vZUxbMP76sD4ajr+PKOKX8TS4xRMkdrxdtKVC
         Tbt6L88++84MPWziH1SpiCqXhvOESkALEnWgaQXcKN117lylZ2UI8mCnStiQkYZ0Pm3v
         VyDEcZe5yumu3JOuCLeZ9zxEEe7R5nPQNoip9R5S8LZk/ostT5LYzM+ao4CGo2MLsuCP
         zvhsYpnEABOb90Ivny4403RrQdDr/fsC1FeuJ08W7DU+h/0cLQAYUY2xUXWPnmqBaLiZ
         Qi9Q==
X-Gm-Message-State: AOAM530kdZER5VdWSl/SRfLYTaIsR6ggUCXIdrEVumjqadw95MvwOdY7
	3QyRS+UH0ZCNo9PBChd9hSw=
X-Google-Smtp-Source: ABdhPJyGjZuqYuFFmQx9QyS7olrh0yJpKtElu89yKB6il9SeIMJNaibflmW/N5TqdWyGiGrRemLEcg==
X-Received: by 2002:a17:902:bf45:b029:129:8147:3a93 with SMTP id u5-20020a170902bf45b029012981473a93mr15498734pls.84.1625672120601;
        Wed, 07 Jul 2021 08:35:20 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 06/12] HV/Vmbus: Add SNP support for VMbus channel initiate message
Date: Wed,  7 Jul 2021 11:34:47 -0400
Message-Id: <20210707153456.3976348-7-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

The monitor pages in the CHANNELMSG_INITIATE_CONTACT msg are shared
with host in Isolation VM and so it's necessary to use hvcall to set
them visible to host. In Isolation VM with AMD SEV SNP, the access
address should be in the extra space which is above shared gpa
boundary. So remap these pages into the extra address(pa +
shared_gpa_boundary).

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/connection.c   | 65 +++++++++++++++++++++++++++++++++++++++
 drivers/hv/hyperv_vmbus.h |  1 +
 2 files changed, 66 insertions(+)

diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 186fd4c8acd4..a32bde143e4c 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -19,6 +19,7 @@
 #include <linux/vmalloc.h>
 #include <linux/hyperv.h>
 #include <linux/export.h>
+#include <linux/io.h>
 #include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
@@ -104,6 +105,12 @@ int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo, u32 version)
 
 	msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
 	msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
+
+	if (hv_is_isolation_supported()) {
+		msg->monitor_page1 += ms_hyperv.shared_gpa_boundary;
+		msg->monitor_page2 += ms_hyperv.shared_gpa_boundary;
+	}
+
 	msg->target_vcpu = hv_cpu_number_to_vp_number(VMBUS_CONNECT_CPU);
 
 	/*
@@ -148,6 +155,31 @@ int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo, u32 version)
 		return -ECONNREFUSED;
 	}
 
+	if (hv_is_isolation_supported()) {
+		vmbus_connection.monitor_pages_va[0]
+			= vmbus_connection.monitor_pages[0];
+		vmbus_connection.monitor_pages[0]
+			= memremap(msg->monitor_page1, HV_HYP_PAGE_SIZE,
+				   MEMREMAP_WB);
+		if (!vmbus_connection.monitor_pages[0])
+			return -ENOMEM;
+
+		vmbus_connection.monitor_pages_va[1]
+			= vmbus_connection.monitor_pages[1];
+		vmbus_connection.monitor_pages[1]
+			= memremap(msg->monitor_page2, HV_HYP_PAGE_SIZE,
+				   MEMREMAP_WB);
+		if (!vmbus_connection.monitor_pages[1]) {
+			memunmap(vmbus_connection.monitor_pages[0]);
+			return -ENOMEM;
+		}
+
+		memset(vmbus_connection.monitor_pages[0], 0x00,
+		       HV_HYP_PAGE_SIZE);
+		memset(vmbus_connection.monitor_pages[1], 0x00,
+		       HV_HYP_PAGE_SIZE);
+	}
+
 	return ret;
 }
 
@@ -159,6 +191,7 @@ int vmbus_connect(void)
 	struct vmbus_channel_msginfo *msginfo = NULL;
 	int i, ret = 0;
 	__u32 version;
+	u64 pfn[2];
 
 	/* Initialize the vmbus connection */
 	vmbus_connection.conn_state = CONNECTING;
@@ -216,6 +249,16 @@ int vmbus_connect(void)
 		goto cleanup;
 	}
 
+	if (hv_is_isolation_supported()) {
+		pfn[0] = virt_to_hvpfn(vmbus_connection.monitor_pages[0]);
+		pfn[1] = virt_to_hvpfn(vmbus_connection.monitor_pages[1]);
+		if (hv_mark_gpa_visibility(2, pfn,
+				VMBUS_PAGE_VISIBLE_READ_WRITE)) {
+			ret = -EFAULT;
+			goto cleanup;
+		}
+	}
+
 	msginfo = kzalloc(sizeof(*msginfo) +
 			  sizeof(struct vmbus_channel_initiate_contact),
 			  GFP_KERNEL);
@@ -282,6 +325,8 @@ int vmbus_connect(void)
 
 void vmbus_disconnect(void)
 {
+	u64 pfn[2];
+
 	/*
 	 * First send the unload request to the host.
 	 */
@@ -301,6 +346,26 @@ void vmbus_disconnect(void)
 		vmbus_connection.int_page = NULL;
 	}
 
+	if (hv_is_isolation_supported()) {
+		if (vmbus_connection.monitor_pages_va[0]) {
+			memunmap(vmbus_connection.monitor_pages[0]);
+			vmbus_connection.monitor_pages[0]
+				= vmbus_connection.monitor_pages_va[0];
+			vmbus_connection.monitor_pages_va[0] = NULL;
+		}
+
+		if (vmbus_connection.monitor_pages_va[1]) {
+			memunmap(vmbus_connection.monitor_pages[1]);
+			vmbus_connection.monitor_pages[1]
+				= vmbus_connection.monitor_pages_va[1];
+			vmbus_connection.monitor_pages_va[1] = NULL;
+		}
+
+		pfn[0] = virt_to_hvpfn(vmbus_connection.monitor_pages[0]);
+		pfn[1] = virt_to_hvpfn(vmbus_connection.monitor_pages[1]);
+		hv_mark_gpa_visibility(2, pfn, VMBUS_PAGE_NOT_VISIBLE);
+	}
+
 	hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[0]);
 	hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[1]);
 	vmbus_connection.monitor_pages[0] = NULL;
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 42f3d9d123a1..40bc0eff6665 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -240,6 +240,7 @@ struct vmbus_connection {
 	 * is child->parent notification
 	 */
 	struct hv_monitor_page *monitor_pages[2];
+	void *monitor_pages_va[2];
 	struct list_head chn_msg_list;
 	spinlock_t channelmsg_lock;
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152398.281613 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aP-0003qK-IB; Wed, 07 Jul 2021 15:35:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152398.281613; Wed, 07 Jul 2021 15:35:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aP-0003q8-Ew; Wed, 07 Jul 2021 15:35:41 +0000
Received: by outflank-mailman (input) for mailman id 152398;
 Wed, 07 Jul 2021 15:35:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19aO-0000vf-Ke
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:40 +0000
Received: from mail-pf1-x42a.google.com (unknown [2607:f8b0:4864:20::42a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id df10153b-594c-490d-bcdd-2b5f0af0a387;
 Wed, 07 Jul 2021 15:35:23 +0000 (UTC)
Received: by mail-pf1-x42a.google.com with SMTP id 21so2521691pfp.3
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:23 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.22
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:22 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: df10153b-594c-490d-bcdd-2b5f0af0a387
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=XbGhpS5yStXGWn3Ym/sECphkTnEdMSaFIpokEER49XU=;
        b=BtC8kdX2uIAXjsaHTdfZ3FZO+N9En6asx9AqhqBPqzz4yoUQnDknn819wfUH7ezd2p
         szndynSEmvQctwLw1nuFyxQHD2Dn6g4fxu85DeZxhAJmC823C/auEHp7CuPVW4JmKWPC
         +tLWV4Ub6Kt226chChhJxWigDi9zgY+gB1sip+rQGrKRyCoNohwasHCqxATli+kEBh11
         UAE5z21Wd+jPm91+hFX8Ue7a1zEAL53PiQuV+JBupHHxKpCxYNAWhV6faTjvx4/AvCpz
         z6ABnzr83wHK8D6bniKnHvLPW036vFU3jco8xhNqC0r/NaySaI0fJ184Z8ld4h0GYEYr
         ZLPQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=XbGhpS5yStXGWn3Ym/sECphkTnEdMSaFIpokEER49XU=;
        b=fCjRTQSV1r+g0a/xZGqbs3d2RXThfcgeBXbcNTXbwQLczV3SpcQ59xr/7fnSTjWlgU
         7nhwOCb2Mln0jFnRAuEVT5Li0NeidazLlpNC8p/nsxtT6q3yBuobUr8877TYXUlbes2P
         n4dIeIgwcrOwRB6amsY1uHlWNJgPfwj/SE9JkT2Ukdww+QqDUSY6RWuohduNwHhBdsz3
         75MEptRiTanPUBm541cX46s0KkY2V7WJC604Lpq+BVI4vuzEvHYDMD382HY4Y31SZuy8
         ljW4ah9sgOXRqFICvDp8VJGGS6vzb1uI2Kn8hD+2WUfUdHdzQlcHhrUWDTz0A1l9WttR
         X1OQ==
X-Gm-Message-State: AOAM533Zp8uJBgh7dUeHFV23sPaN5U4tWzIlhrCmetP/ZNsjh6TZzSkw
	OAY9ij5Wu67OoUN/qLgo01U=
X-Google-Smtp-Source: ABdhPJy77j4/OHtCtQz0cn9ku774dx02+q+pAFp0Fnosh6xARArR8grx/YZvqPCQ4ZIgKqBL1CVqwQ==
X-Received: by 2002:a05:6a00:1709:b029:308:747d:b7be with SMTP id h9-20020a056a001709b0290308747db7bemr26526754pfc.41.1625672123297;
        Wed, 07 Jul 2021 08:35:23 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 07/12] HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
Date: Wed,  7 Jul 2021 11:34:48 -0400
Message-Id: <20210707153456.3976348-8-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

VMbus ring buffer are shared with host and it's need to
be accessed via extra address space of Isolation VM with
SNP support. This patch is to map the ring buffer
address in extra address space via ioremap(). HV host
visibility hvcall smears data in the ring buffer and
so reset the ring buffer memory to zero after calling
visibility hvcall.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/Kconfig        |  1 +
 drivers/hv/channel.c      | 10 +++++
 drivers/hv/hyperv_vmbus.h |  2 +
 drivers/hv/ring_buffer.c  | 84 ++++++++++++++++++++++++++++++---------
 4 files changed, 79 insertions(+), 18 deletions(-)

diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
index 66c794d92391..a8386998be40 100644
--- a/drivers/hv/Kconfig
+++ b/drivers/hv/Kconfig
@@ -7,6 +7,7 @@ config HYPERV
 	depends on X86 && ACPI && X86_LOCAL_APIC && HYPERVISOR_GUEST
 	select PARAVIRT
 	select X86_HV_CALLBACK_VECTOR
+	select VMAP_PFN
 	help
 	  Select this option to run Linux as a Hyper-V client operating
 	  system.
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 01048bb07082..7350da9dbe97 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -707,6 +707,16 @@ static int __vmbus_open(struct vmbus_channel *newchannel,
 	if (err)
 		goto error_clean_ring;
 
+	err = hv_ringbuffer_post_init(&newchannel->outbound,
+				      page, send_pages);
+	if (err)
+		goto error_free_gpadl;
+
+	err = hv_ringbuffer_post_init(&newchannel->inbound,
+				      &page[send_pages], recv_pages);
+	if (err)
+		goto error_free_gpadl;
+
 	/* Create and init the channel open message */
 	open_info = kzalloc(sizeof(*open_info) +
 			   sizeof(struct vmbus_channel_open_channel),
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 40bc0eff6665..15cd23a561f3 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -172,6 +172,8 @@ extern int hv_synic_cleanup(unsigned int cpu);
 /* Interface */
 
 void hv_ringbuffer_pre_init(struct vmbus_channel *channel);
+int hv_ringbuffer_post_init(struct hv_ring_buffer_info *ring_info,
+		struct page *pages, u32 page_cnt);
 
 int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
 		       struct page *pages, u32 pagecnt, u32 max_pkt_size);
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 2aee356840a2..d4f93fca1108 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -17,6 +17,8 @@
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/prefetch.h>
+#include <linux/io.h>
+#include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
 
@@ -179,43 +181,89 @@ void hv_ringbuffer_pre_init(struct vmbus_channel *channel)
 	mutex_init(&channel->outbound.ring_buffer_mutex);
 }
 
-/* Initialize the ring buffer. */
-int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
-		       struct page *pages, u32 page_cnt, u32 max_pkt_size)
+int hv_ringbuffer_post_init(struct hv_ring_buffer_info *ring_info,
+		       struct page *pages, u32 page_cnt)
 {
+	u64 physic_addr = page_to_pfn(pages) << PAGE_SHIFT;
+	unsigned long *pfns_wraparound;
+	void *vaddr;
 	int i;
-	struct page **pages_wraparound;
 
-	BUILD_BUG_ON((sizeof(struct hv_ring_buffer) != PAGE_SIZE));
+	if (!hv_isolation_type_snp())
+		return 0;
+
+	physic_addr += ms_hyperv.shared_gpa_boundary;
 
 	/*
 	 * First page holds struct hv_ring_buffer, do wraparound mapping for
 	 * the rest.
 	 */
-	pages_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(struct page *),
+	pfns_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(unsigned long),
 				   GFP_KERNEL);
-	if (!pages_wraparound)
+	if (!pfns_wraparound)
 		return -ENOMEM;
 
-	pages_wraparound[0] = pages;
+	pfns_wraparound[0] = physic_addr >> PAGE_SHIFT;
 	for (i = 0; i < 2 * (page_cnt - 1); i++)
-		pages_wraparound[i + 1] = &pages[i % (page_cnt - 1) + 1];
-
-	ring_info->ring_buffer = (struct hv_ring_buffer *)
-		vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, PAGE_KERNEL);
-
-	kfree(pages_wraparound);
+		pfns_wraparound[i + 1] = (physic_addr >> PAGE_SHIFT) +
+			i % (page_cnt - 1) + 1;
 
-
-	if (!ring_info->ring_buffer)
+	vaddr = vmap_pfn(pfns_wraparound, page_cnt * 2 - 1, PAGE_KERNEL_IO);
+	kfree(pfns_wraparound);
+	if (!vaddr)
 		return -ENOMEM;
 
-	ring_info->ring_buffer->read_index =
-		ring_info->ring_buffer->write_index = 0;
+	/* Clean memory after setting host visibility. */
+	memset((void *)vaddr, 0x00, page_cnt * PAGE_SIZE);
+
+	ring_info->ring_buffer = (struct hv_ring_buffer *)vaddr;
+	ring_info->ring_buffer->read_index = 0;
+	ring_info->ring_buffer->write_index = 0;
 
 	/* Set the feature bit for enabling flow control. */
 	ring_info->ring_buffer->feature_bits.value = 1;
 
+	return 0;
+}
+
+/* Initialize the ring buffer. */
+int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
+		       struct page *pages, u32 page_cnt, u32 max_pkt_size)
+{
+	int i;
+	struct page **pages_wraparound;
+
+	BUILD_BUG_ON((sizeof(struct hv_ring_buffer) != PAGE_SIZE));
+
+	if (!hv_isolation_type_snp()) {
+		/*
+		 * First page holds struct hv_ring_buffer, do wraparound mapping for
+		 * the rest.
+		 */
+		pages_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(struct page *),
+					   GFP_KERNEL);
+		if (!pages_wraparound)
+			return -ENOMEM;
+
+		pages_wraparound[0] = pages;
+		for (i = 0; i < 2 * (page_cnt - 1); i++)
+			pages_wraparound[i + 1] = &pages[i % (page_cnt - 1) + 1];
+
+		ring_info->ring_buffer = (struct hv_ring_buffer *)
+			vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, PAGE_KERNEL);
+
+		kfree(pages_wraparound);
+
+		if (!ring_info->ring_buffer)
+			return -ENOMEM;
+
+		ring_info->ring_buffer->read_index =
+			ring_info->ring_buffer->write_index = 0;
+
+		/* Set the feature bit for enabling flow control. */
+		ring_info->ring_buffer->feature_bits.value = 1;
+	}
+
 	ring_info->ring_size = page_cnt << PAGE_SHIFT;
 	ring_info->ring_size_div10_reciprocal =
 		reciprocal_value(ring_info->ring_size / 10);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:35:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:35:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152405.281624 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aa-0004lW-0W; Wed, 07 Jul 2021 15:35:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152405.281624; Wed, 07 Jul 2021 15:35:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19aZ-0004lJ-R3; Wed, 07 Jul 2021 15:35:51 +0000
Received: by outflank-mailman (input) for mailman id 152405;
 Wed, 07 Jul 2021 15:35:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19aY-0000vf-LB
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:35:50 +0000
Received: from mail-pf1-x431.google.com (unknown [2607:f8b0:4864:20::431])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 744ed534-5d15-4e9c-a406-b91271b45d4f;
 Wed, 07 Jul 2021 15:35:26 +0000 (UTC)
Received: by mail-pf1-x431.google.com with SMTP id b12so2508099pfv.6
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:26 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.25
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:25 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 744ed534-5d15-4e9c-a406-b91271b45d4f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=vp54ZQawAXt49CkThDbFLyNwiKlz10UxxnQhsKUA4kk=;
        b=mwz531LG8VwujMK/fd5kQ/Q8ztNgBlPusuZpI54hFc8jgqOztkk7xMjkai9f1xw53X
         3jxlAZ4KOhdZzm/m4iKXDfDQhymoaUUYGhagpN7uMa8SDq+Sa/a+9QYq8IIiAk61RTQH
         FISIxcvVNyPYsimguuW+ypAYfEtcepFacqbJC/17qxvGWSlq60CpijWs/75jJZvZzyGb
         qvIKYMC9RmADtJQMWKkXUtdz8rboMK6L4hW0HIUXaeky620CVc2L3afCPwaINmrFFCRY
         JZYaWq9lQwV+TVAsHHKe80RS57OD7apJlBxNfhMxCkhzAHCrwmE8wU2j7aIcz7I+/im4
         RQnA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=vp54ZQawAXt49CkThDbFLyNwiKlz10UxxnQhsKUA4kk=;
        b=ZQ9BvwRPYMdjMl5MlxU4i26wGzSOXjTKFJ/a74iR4WHBnF0Fz6M/4zZNK5y8dp1Utk
         yrVIAp8WmwnYHZaTk7F9nILBFcjbjww5DKdTGAf2PW9GWwzBHgI/V+RVW1UaiLgetHW3
         DjnOE0LVi+v1DvGly7myi9bBnib9Ux4hm8hRQ35/VypkEmELyS1IFjWTSXd22zNmK0CQ
         VsPlsXVLJAqAvhzD3O6updwv8solTjxHPN94tizO3LiyKTUjLsnxXDNaKRvxjY9VmoRW
         RzghPsN3Wdp4PLnmkSiy8qB/ITF/4Ulvyv28yeLBw1IpdHuL1c4rlcd1gh87U8uWevtq
         Od4w==
X-Gm-Message-State: AOAM530GXeJo+CCkPCc5L2NSDrYLfPb967h81Fm0x46vQA2n9TOK6BBF
	TNYoHYswafFF8hpCKe/btTk=
X-Google-Smtp-Source: ABdhPJy/YtYVUOWKU35lbBAipCtqLf3uH0TJVUFZXqf0ls2icNYxU0hgKlwktbZS6t3Am5XVfFxACw==
X-Received: by 2002:a65:4286:: with SMTP id j6mr14062875pgp.10.1625672125944;
        Wed, 07 Jul 2021 08:35:25 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 08/12] x86/Swiotlb/HV: Add Swiotlb bounce buffer remap function for HV IVM
Date: Wed,  7 Jul 2021 11:34:49 -0400
Message-Id: <20210707153456.3976348-9-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM with AMD SEV, bounce buffer needs to be accessed via
extra address space which is above shared_gpa_boundary
(E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
The access physical address will be original physical address +
shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
spec is called virtual top of memory(vTOM). Memory addresses below
vTOM are automatically treated as private while memory above
vTOM is treated as shared.

Introduce set_memory_decrypted_map() function to decrypt memory and
remap memory with platform callback. Use set_memory_decrypted_
map() in the swiotlb code, store remap address returned by the new
API and use the remap address to copy data from/to swiotlb bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/ivm.c             | 30 ++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h   |  2 ++
 arch/x86/include/asm/set_memory.h |  2 ++
 arch/x86/mm/pat/set_memory.c      | 28 ++++++++++++++++++++++++++++
 include/linux/swiotlb.h           |  4 ++++
 kernel/dma/swiotlb.c              | 11 ++++++++---
 6 files changed, 74 insertions(+), 3 deletions(-)

diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 8a6f4e9e3d6c..ea33935e0c17 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -267,3 +267,33 @@ int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
 			enc ? VMBUS_PAGE_NOT_VISIBLE
 			: VMBUS_PAGE_VISIBLE_READ_WRITE);
 }
+
+/*
+ * hv_map_memory - map memory to extra space in the AMD SEV-SNP Isolation VM.
+ */
+unsigned long hv_map_memory(unsigned long addr, unsigned long size)
+{
+	unsigned long *pfns = kcalloc(size / HV_HYP_PAGE_SIZE,
+				      sizeof(unsigned long),
+		       GFP_KERNEL);
+	unsigned long vaddr;
+	int i;
+
+	if (!pfns)
+		return (unsigned long)NULL;
+
+	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+		pfns[i] = virt_to_hvpfn((void *)addr + i * HV_HYP_PAGE_SIZE) +
+			(ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+
+	vaddr = (unsigned long)vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE,
+					PAGE_KERNEL_IO);
+	kfree(pfns);
+
+	return vaddr;
+}
+
+void hv_unmap_memory(unsigned long addr)
+{
+	vunmap((void *)addr);
+}
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index fe03e3e833ac..ba3cb9e32fdb 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -253,6 +253,8 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
 int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
 int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
+unsigned long hv_map_memory(unsigned long addr, unsigned long size);
+void hv_unmap_memory(unsigned long addr);
 void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
 void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
 void hv_signal_eom_ghcb(void);
diff --git a/arch/x86/include/asm/set_memory.h b/arch/x86/include/asm/set_memory.h
index 43fa081a1adb..7a2117931830 100644
--- a/arch/x86/include/asm/set_memory.h
+++ b/arch/x86/include/asm/set_memory.h
@@ -49,6 +49,8 @@ int set_memory_decrypted(unsigned long addr, int numpages);
 int set_memory_np_noalias(unsigned long addr, int numpages);
 int set_memory_nonglobal(unsigned long addr, int numpages);
 int set_memory_global(unsigned long addr, int numpages);
+unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size);
+int set_memory_encrypted_unmap(unsigned long addr, unsigned long size);
 
 int set_pages_array_uc(struct page **pages, int addrinarray);
 int set_pages_array_wc(struct page **pages, int addrinarray);
diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index 6cc83c57383d..5d4d3963f4a2 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -2039,6 +2039,34 @@ int set_memory_decrypted(unsigned long addr, int numpages)
 }
 EXPORT_SYMBOL_GPL(set_memory_decrypted);
 
+static unsigned long __map_memory(unsigned long addr, unsigned long size)
+{
+	if (hv_is_isolation_supported())
+		return hv_map_memory(addr, size);
+
+	return addr;
+}
+
+static void __unmap_memory(unsigned long addr)
+{
+	if (hv_is_isolation_supported())
+		hv_unmap_memory(addr);
+}
+
+unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size)
+{
+	if (__set_memory_enc_dec(addr, size / PAGE_SIZE, false))
+		return (unsigned long)NULL;
+
+	return __map_memory(addr, size);
+}
+
+int set_memory_encrypted_unmap(unsigned long addr, unsigned long size)
+{
+	__unmap_memory(addr);
+	return __set_memory_enc_dec(addr, size / PAGE_SIZE, true);
+}
+
 int set_pages_uc(struct page *page, int numpages)
 {
 	unsigned long addr = (unsigned long)page_address(page);
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index f507e3eacbea..5c6f6c7380ef 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -72,6 +72,9 @@ extern enum swiotlb_force swiotlb_force;
  * @end:	The end address of the swiotlb memory pool. Used to do a quick
  *		range check to see if the memory was in fact allocated by this
  *		API.
+ * @vstart:	The virtual start address of the swiotlb memory pool. The swiotlb
+ *		memory pool may be remapped in the memory encrypted case and store
+ *		virtual address for bounce buffer operation.
  * @nslabs:	The number of IO TLB blocks (in groups of 64) between @start and
  *		@end. For default swiotlb, this is command line adjustable via
  *		setup_io_tlb_npages.
@@ -89,6 +92,7 @@ extern enum swiotlb_force swiotlb_force;
 struct io_tlb_mem {
 	phys_addr_t start;
 	phys_addr_t end;
+	void *vstart;
 	unsigned long nslabs;
 	unsigned long used;
 	unsigned int index;
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index d3fa4669229b..9911817250a8 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -194,8 +194,13 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
 		mem->slots[i].alloc_size = 0;
 	}
 
-	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
-	memset(vaddr, 0, bytes);
+	mem->vstart = (void *)set_memory_decrypted_map((unsigned long)vaddr, bytes);
+	if (!mem->vstart) {
+		pr_err("Failed to decrypt memory.\n");
+		return;
+	}
+
+	memset(mem->vstart, 0, bytes);
 }
 
 int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
@@ -352,7 +357,7 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
 	phys_addr_t orig_addr = mem->slots[index].orig_addr;
 	size_t alloc_size = mem->slots[index].alloc_size;
 	unsigned long pfn = PFN_DOWN(orig_addr);
-	unsigned char *vaddr = phys_to_virt(tlb_addr);
+	unsigned char *vaddr = mem->vstart + tlb_addr - mem->start;
 
 	if (orig_addr == INVALID_PHYS_ADDR)
 		return;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:40:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:40:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152441.281638 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ek-0007OE-NE; Wed, 07 Jul 2021 15:40:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152441.281638; Wed, 07 Jul 2021 15:40:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ek-0007O7-K8; Wed, 07 Jul 2021 15:40:10 +0000
Received: by outflank-mailman (input) for mailman id 152441;
 Wed, 07 Jul 2021 15:40:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m19ei-0007O0-UB
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:40:08 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9ab41a92-df39-11eb-850d-12813bfff9fa;
 Wed, 07 Jul 2021 15:40:07 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2107.outbound.protection.outlook.com [104.47.17.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-10-lKOikZomPBihPdHbAq4tyA-1; Wed, 07 Jul 2021 17:40:05 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7038.eurprd04.prod.outlook.com (2603:10a6:800:12d::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.24; Wed, 7 Jul
 2021 15:40:03 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:40:03 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0159.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1b::27) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 15:40:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9ab41a92-df39-11eb-850d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625672406;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=fNmVWWMwPJb34vqdlRm5vzD7Alq1jRH2uoPSe+Zvgso=;
	b=CXPLvPWJGmoAWsr1OhHVx4NxJkqLgfakr0Fky5sLKHwfworKBlBsLA7Vy8zJ9YyracVful
	rQ2gebM4R2nTQPhozBZ2aqiD8lj5WMCVH179Xv/pTie+55Ibi4PVrMHKlG6hDktH2VDVD6
	IgZr4/u/1fNj8nvlTsF8QcgMY1g+jVM=
X-MC-Unique: lKOikZomPBihPdHbAq4tyA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=iyF9BxdbiF9NthNNXjptpYOBMIN/p/3jaHtvY0ATmBYK9xJb0rA/CJ1tzW/O/yC32XtW0L6TiPQApWRbXOcCOchZTYHtxWygKxB6nnhLfD2OhpGS56hLZlNEDdsD5aXP8UbsxlXg5lD8wjiNQHbmcXaL/n1yldd/aigDT74U/ZnCAfqWohhttoHRSTbmT8MGLAcs7X54SwH6qDQylWivtRI84UzAgI6doy8Z0K9lmbUEJR6j1DwOVTLrtQGpDiWbu4BEGEN2DYWHv0HV+I643+ixXxJGTMe1ZB7kziyq2tjPP2gaRipZHyJMoljVIxSgWUSi1/E0ajE3vospG97IUA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fNmVWWMwPJb34vqdlRm5vzD7Alq1jRH2uoPSe+Zvgso=;
 b=FJri5rYWm0Z5j2ZCtEThYJHKeDVQ6M4tvT9iCZOhIEPd1XPDJ9wgcxl+WpkEfIYvSawZfjZwqo1SZY2yxJjKDNtUZdcoFbpTzuIh+66JWzXVC/O2krPVMyXS/oYS4h92HEXX5JUpI4QCxc7ygUUuQYFBqRQHrRrByq+qT/5DevE7qbycZsKWP2VN7yCtafob+cd4fIC65uw1ZgoC7LP6dWojzM8BN7ahnCuqVMJ9izJq+hrh4nv8m1THBtaEvK6Bqn432zqGR9UqXdYdlcui6CmF5icfWJ7AOc8len8sKPWWex8l/rLlVVJIUJ2RlPWp70DnJU6xesFLMNSdZdaqxA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 15/31] build: move make option changes check
 earlier
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-16-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <cb5a783f-36d2-fc73-f71c-4a12e5cf6515@suse.com>
Date: Wed, 7 Jul 2021 17:40:02 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-16-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0159.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1b::27) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 86f15d9d-f260-435d-26b7-08d9415d7d35
X-MS-TrafficTypeDiagnostic: VI1PR04MB7038:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7038CD15F354D7CDAA1EA7CAB31A9@VI1PR04MB7038.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1186;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Q9JspD4KJXenfHgic5v5qJHoDRhhOu/ElnE8ZrhD1GqRVxGXphHpYpZX1yzbD6mzarJHPpudqhkNKL46ab0OG2J/c5JtDEgYEOtnfsJxSHoLqC+2eheOJ5V4woOSdS8+oznmPSKFNiAyv0fy1+52tbD/4OWvUj6l3P+PlME9Kx7HihHFlTo8wHNLTUzfZ9ECs5NesE4N0jTvX/sGQiMC/0OvyxAMgVVjKNYYS3LcYqNrtaZHXNSvgX3eaz9CXyWA14IFhB+XegEUgZAnHUlQqk0ONsK99t4qP5mndPZkzlGlNLV6Wu5WlQYfRIB60DnDijHodwlvIlUbZAdmPC3+d2B/bEL9hyb3jq7XeDdriMwZJPmE5USmziRTL6xoBq43LrSbb20djkeONI0ovqNIgO/va6uDBaBQCTdQESjvJUZm4EJDY3FFBWlG9UMMT8bDs+t0fytCGE2eeiU5RmQ50bnzk8CUNOUZ1mByaM83WqkOq/UjKi3C/p37kDG7LPYnHL3L9Kd6sU08PvpVzRk4ROpGKeiwm9wn4s+HfrtCHcouRiIqAZWcgSu0NM3oA+P6MNlZBn2LRvCuTEpvK3YvKeGSSyOVFZtTcAn9LbecHET+D/UBsasoKDYsDrUf9caJhVp6TyBCx/3IsVced2FdXgPO5jfTBf4X8wtJW7oNrksBhKb4CDAeKVQpykPvLyr8fTQ7aaXGWf1IO5YNsWGAQCMv6x8sjOiYzQ0bcPDtS7s=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(136003)(346002)(396003)(376002)(366004)(478600001)(4326008)(54906003)(2616005)(2906002)(956004)(31696002)(66476007)(186003)(38100700002)(83380400001)(5660300002)(26005)(31686004)(53546011)(8676002)(6916009)(66556008)(6486002)(36756003)(316002)(86362001)(16576012)(66946007)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 86f15d9d-f260-435d-26b7-08d9415d7d35
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:40:03.8834
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 5YBnYTiXa0x064T+eX2IaJP/tq+fl0aH50QvR71B06dG3b8nvwa2fFPJHpRjaereit/xB4PaS5PiUlVuyyPh6g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7038

On 01.07.2021 16:09, Anthony PERARD wrote:
> And thus avoiding checking for those variable over and over again.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
in its present shape since all you do is move existing logic. But I
wonder if I could talk you into ...

> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -56,6 +56,28 @@ include scripts/Kbuild.include
>  ifneq ($(root-make-done),y)
>  # section to run before calling Rules.mk, but only once.
>  
> +ifneq ($(origin crash_debug),undefined)
> +$(error "You must use 'make menuconfig' to enable/disable crash_debug now.")
> +endif
> +ifeq ($(origin debug),command line)
> +$(warning "You must use 'make menuconfig' to enable/disable debug now.")
> +endif
> +ifneq ($(origin frame_pointer),undefined)
> +$(error "You must use 'make menuconfig' to enable/disable frame_pointer now.")
> +endif
> +ifneq ($(origin kexec),undefined)
> +$(error "You must use 'make menuconfig' to enable/disable kexec now.")
> +endif
> +ifneq ($(origin lock_profile),undefined)
> +$(error "You must use 'make menuconfig' to enable/disable lock_profile now.")
> +endif
> +ifneq ($(origin perfc),undefined)
> +$(error "You must use 'make menuconfig' to enable/disable perfc now.")
> +endif
> +ifneq ($(origin verbose),undefined)
> +$(error "You must use 'make menuconfig' to enable/disable verbose now.")
> +endif

... doing away with the misleading mentioning of just "menuconfig" here.
There are various other *config targets, many of which are also suitable
for the purpose. Personally I've used menuconfig (in Linux) the last
time perhaps 15 years ago, and hence I have almost forgotten about its
existence. IOW at the very least I'd see us insert "e.g." everywhere.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:41:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:41:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152448.281648 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gJ-000820-1l; Wed, 07 Jul 2021 15:41:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152448.281648; Wed, 07 Jul 2021 15:41:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gI-00081t-Uw; Wed, 07 Jul 2021 15:41:46 +0000
Received: by outflank-mailman (input) for mailman id 152448;
 Wed, 07 Jul 2021 15:41:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19an-0000vf-Lp
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:36:05 +0000
Received: from mail-pg1-x534.google.com (unknown [2607:f8b0:4864:20::534])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a37fa205-aade-4dab-a275-ac55548ded41;
 Wed, 07 Jul 2021 15:35:31 +0000 (UTC)
Received: by mail-pg1-x534.google.com with SMTP id t9so2639589pgn.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:31 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.29
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:30 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a37fa205-aade-4dab-a275-ac55548ded41
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=d9G7rX1Wf2e4jgYzMUXcCiOPT4rIMtwlWsRa/j4ZTx8=;
        b=a0WA71QYdRYsIFFCpSOQ59rb6NIZMHg0p/GePTUDNAMME7mU8fkVKQ8hbtv8NXT9Hs
         tkAsmM0GYzVm9SqNeRWPme3CUcDBs0jgx9038MoSwUACX+gbhlapPU6hOXRXscEoLixX
         XEraOZ2Q+yfuw06rWV3kogG1UnRVAjD/yXEN37KqLC3SKhedpogEULf/r+gKa4TlvvRU
         po/5RUBydAo53uwEG5SkDP6iAH4WlViYUDFRPTzPgqxw6KPWPNXrnmFudo+tMCz5oMyN
         vPic8DauVlFvqlQUm3H48Z/QA8gU0yJfkrljMeCx6M5Vm8d45pXGTBP1ED2PTPqIFiJl
         /P4A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=d9G7rX1Wf2e4jgYzMUXcCiOPT4rIMtwlWsRa/j4ZTx8=;
        b=NUP9W69h1TXLSom01+DkLBoVqEtaHQ/xO70x/XWRPyS6qznZXF+8u3NuaI2HFopfDm
         00NEfYRizOEhc5ttzv3omVyBfS2OLFfEc5cIaWm/mgn2ivPsUU4pL+aB4xzMS1YtLzDv
         wpI0OPTt5RmTXX7YRJBAYzWoDhQHCWpGyCKShaxTbTGVtz8urnzK0syasD2G7qzHhkuW
         3mRUh47sgD6tNJsEcegtaDQYgYPvNTeFqU4urBevpAOkNdNrwKhMHBIxuYOP0t+tsgEC
         G7YN+AI9PzH880oXxgf6uBr2B+G3f4qBjqCCmdKbZHRz+FzruXxEZVhtkZr4ljtCKXEc
         MFFQ==
X-Gm-Message-State: AOAM532OnRrKzvnUhJzGT/rtmuezWBeF3F5fSZpBnJsWIZY/obLdmj+7
	KpwTscK+2S4YuOHP0fDQCbM=
X-Google-Smtp-Source: ABdhPJyCzEVFM0wpXKgWELeDZM1cHITmWbDuJvdWh6ZeFbeZBDj1wIR9OXT9qousVFMFlP/DocwEZg==
X-Received: by 2002:a63:303:: with SMTP id 3mr26071907pgd.111.1625672130610;
        Wed, 07 Jul 2021 08:35:30 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 10/12] HV/Netvsc: Add Isolation VM support for netvsc driver
Date: Wed,  7 Jul 2021 11:34:51 -0400
Message-Id: <20210707153456.3976348-11-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM, all shared memory with host needs to mark visible
to host via hvcall. vmbus_establish_gpadl() has already done it for
netvsc rx/tx ring buffer. The page buffer used by vmbus_sendpacket_
pagebuffer() still need to handle. Use DMA API to map/umap these
memory during sending/receiving packet and Hyper-V DMA ops callback
will use swiotlb function to allocate bounce buffer and copy data
from/to bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/net/hyperv/hyperv_net.h   |   6 ++
 drivers/net/hyperv/netvsc.c       | 144 +++++++++++++++++++++++++++++-
 drivers/net/hyperv/rndis_filter.c |   2 +
 include/linux/hyperv.h            |   5 ++
 4 files changed, 154 insertions(+), 3 deletions(-)

diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index b11aa68b44ec..c2fbb9d4df2c 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -164,6 +164,7 @@ struct hv_netvsc_packet {
 	u32 total_bytes;
 	u32 send_buf_index;
 	u32 total_data_buflen;
+	struct hv_dma_range *dma_range;
 };
 
 #define NETVSC_HASH_KEYLEN 40
@@ -1074,6 +1075,7 @@ struct netvsc_device {
 
 	/* Receive buffer allocated by us but manages by NetVSP */
 	void *recv_buf;
+	void *recv_original_buf;
 	u32 recv_buf_size; /* allocated bytes */
 	u32 recv_buf_gpadl_handle;
 	u32 recv_section_cnt;
@@ -1082,6 +1084,8 @@ struct netvsc_device {
 
 	/* Send buffer allocated by us */
 	void *send_buf;
+	void *send_original_buf;
+	u32 send_buf_size;
 	u32 send_buf_gpadl_handle;
 	u32 send_section_cnt;
 	u32 send_section_size;
@@ -1729,4 +1733,6 @@ struct rndis_message {
 #define RETRY_US_HI	10000
 #define RETRY_MAX	2000	/* >10 sec */
 
+void netvsc_dma_unmap(struct hv_device *hv_dev,
+		      struct hv_netvsc_packet *packet);
 #endif /* _HYPERV_NET_H */
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 7bd935412853..fc312e5db4d5 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -153,8 +153,21 @@ static void free_netvsc_device(struct rcu_head *head)
 	int i;
 
 	kfree(nvdev->extension);
-	vfree(nvdev->recv_buf);
-	vfree(nvdev->send_buf);
+
+	if (nvdev->recv_original_buf) {
+		vunmap(nvdev->recv_buf);
+		vfree(nvdev->recv_original_buf);
+	} else {
+		vfree(nvdev->recv_buf);
+	}
+
+	if (nvdev->send_original_buf) {
+		vunmap(nvdev->send_buf);
+		vfree(nvdev->send_original_buf);
+	} else {
+		vfree(nvdev->send_buf);
+	}
+
 	kfree(nvdev->send_section_map);
 
 	for (i = 0; i < VRSS_CHANNEL_MAX; i++) {
@@ -330,6 +343,27 @@ int netvsc_alloc_recv_comp_ring(struct netvsc_device *net_device, u32 q_idx)
 	return nvchan->mrc.slots ? 0 : -ENOMEM;
 }
 
+static void *netvsc_remap_buf(void *buf, unsigned long size)
+{
+	unsigned long *pfns;
+	void *vaddr;
+	int i;
+
+	pfns = kcalloc(size / HV_HYP_PAGE_SIZE, sizeof(unsigned long),
+		       GFP_KERNEL);
+	if (!pfns)
+		return NULL;
+
+	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+		pfns[i] = virt_to_hvpfn(buf + i * HV_HYP_PAGE_SIZE)
+			+ (ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+
+	vaddr = vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE, PAGE_KERNEL_IO);
+	kfree(pfns);
+
+	return vaddr;
+}
+
 static int netvsc_init_buf(struct hv_device *device,
 			   struct netvsc_device *net_device,
 			   const struct netvsc_device_info *device_info)
@@ -340,6 +374,7 @@ static int netvsc_init_buf(struct hv_device *device,
 	unsigned int buf_size;
 	size_t map_words;
 	int i, ret = 0;
+	void *vaddr;
 
 	/* Get receive buffer area. */
 	buf_size = device_info->recv_sections * device_info->recv_section_size;
@@ -375,6 +410,15 @@ static int netvsc_init_buf(struct hv_device *device,
 		goto cleanup;
 	}
 
+	if (hv_isolation_type_snp()) {
+		vaddr = netvsc_remap_buf(net_device->recv_buf, buf_size);
+		if (!vaddr)
+			goto cleanup;
+
+		net_device->recv_original_buf = net_device->recv_buf;
+		net_device->recv_buf = vaddr;
+	}
+
 	/* Notify the NetVsp of the gpadl handle */
 	init_packet = &net_device->channel_init_pkt;
 	memset(init_packet, 0, sizeof(struct nvsp_message));
@@ -477,6 +521,15 @@ static int netvsc_init_buf(struct hv_device *device,
 		goto cleanup;
 	}
 
+	if (hv_isolation_type_snp()) {
+		vaddr = netvsc_remap_buf(net_device->send_buf, buf_size);
+		if (!vaddr)
+			goto cleanup;
+
+		net_device->send_original_buf = net_device->send_buf;
+		net_device->send_buf = vaddr;
+	}
+
 	/* Notify the NetVsp of the gpadl handle */
 	init_packet = &net_device->channel_init_pkt;
 	memset(init_packet, 0, sizeof(struct nvsp_message));
@@ -767,7 +820,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev,
 
 	/* Notify the layer above us */
 	if (likely(skb)) {
-		const struct hv_netvsc_packet *packet
+		struct hv_netvsc_packet *packet
 			= (struct hv_netvsc_packet *)skb->cb;
 		u32 send_index = packet->send_buf_index;
 		struct netvsc_stats *tx_stats;
@@ -783,6 +836,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev,
 		tx_stats->bytes += packet->total_bytes;
 		u64_stats_update_end(&tx_stats->syncp);
 
+		netvsc_dma_unmap(ndev_ctx->device_ctx, packet);
 		napi_consume_skb(skb, budget);
 	}
 
@@ -947,6 +1001,82 @@ static void netvsc_copy_to_send_buf(struct netvsc_device *net_device,
 		memset(dest, 0, padding);
 }
 
+void netvsc_dma_unmap(struct hv_device *hv_dev,
+		      struct hv_netvsc_packet *packet)
+{
+	u32 page_count = packet->cp_partial ?
+		packet->page_buf_cnt - packet->rmsg_pgcnt :
+		packet->page_buf_cnt;
+	int i;
+
+	if (!hv_is_isolation_supported())
+		return;
+
+	if (!packet->dma_range)
+		return;
+
+	for (i = 0; i < page_count; i++)
+		dma_unmap_single(&hv_dev->device, packet->dma_range[i].dma,
+				 packet->dma_range[i].mapping_size,
+				 DMA_TO_DEVICE);
+
+	kfree(packet->dma_range);
+}
+
+/* netvsc_dma_map - Map swiotlb bounce buffer with data page of
+ * packet sent by vmbus_sendpacket_pagebuffer() in the Isolation
+ * VM.
+ *
+ * In isolation VM, netvsc send buffer has been marked visible to
+ * host and so the data copied to send buffer doesn't need to use
+ * bounce buffer. The data pages handled by vmbus_sendpacket_pagebuffer()
+ * may not be copied to send buffer and so these pages need to be
+ * mapped with swiotlb bounce buffer. netvsc_dma_map() is to do
+ * that. The pfns in the struct hv_page_buffer need to be converted
+ * to bounce buffer's pfn. The loop here is necessary and so not
+ * use dma_map_sg() here.
+ */
+int netvsc_dma_map(struct hv_device *hv_dev,
+		   struct hv_netvsc_packet *packet,
+		   struct hv_page_buffer *pb)
+{
+	u32 page_count =  packet->cp_partial ?
+		packet->page_buf_cnt - packet->rmsg_pgcnt :
+		packet->page_buf_cnt;
+	dma_addr_t dma;
+	int i;
+
+	if (!hv_is_isolation_supported())
+		return 0;
+
+	packet->dma_range = kcalloc(page_count,
+				    sizeof(*packet->dma_range),
+				    GFP_KERNEL);
+	if (!packet->dma_range)
+		return -ENOMEM;
+
+	for (i = 0; i < page_count; i++) {
+		char *src = phys_to_virt((pb[i].pfn << HV_HYP_PAGE_SHIFT)
+					 + pb[i].offset);
+		u32 len = pb[i].len;
+
+		dma = dma_map_single(&hv_dev->device, src, len,
+				     DMA_TO_DEVICE);
+		if (dma_mapping_error(&hv_dev->device, dma)) {
+			kfree(packet->dma_range);
+			return -ENOMEM;
+		}
+
+		packet->dma_range[i].dma = dma;
+		packet->dma_range[i].mapping_size = len;
+		pb[i].pfn = dma >> HV_HYP_PAGE_SHIFT;
+		pb[i].offset = offset_in_hvpage(dma);
+		pb[i].len = len;
+	}
+
+	return 0;
+}
+
 static inline int netvsc_send_pkt(
 	struct hv_device *device,
 	struct hv_netvsc_packet *packet,
@@ -987,14 +1117,22 @@ static inline int netvsc_send_pkt(
 
 	trace_nvsp_send_pkt(ndev, out_channel, rpkt);
 
+	packet->dma_range = NULL;
 	if (packet->page_buf_cnt) {
 		if (packet->cp_partial)
 			pb += packet->rmsg_pgcnt;
 
+		ret = netvsc_dma_map(ndev_ctx->device_ctx, packet, pb);
+		if (ret)
+			return ret;
+
 		ret = vmbus_sendpacket_pagebuffer(out_channel,
 						  pb, packet->page_buf_cnt,
 						  &nvmsg, sizeof(nvmsg),
 						  req_id);
+
+		if (ret)
+			netvsc_dma_unmap(ndev_ctx->device_ctx, packet);
 	} else {
 		ret = vmbus_sendpacket(out_channel,
 				       &nvmsg, sizeof(nvmsg),
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index 983bf362466a..9425fee85aa0 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -361,6 +361,8 @@ static void rndis_filter_receive_response(struct net_device *ndev,
 			}
 		}
 
+		netvsc_dma_unmap(((struct net_device_context *)
+			netdev_priv(ndev))->device_ctx, &request->pkt);
 		complete(&request->wait_event);
 	} else {
 		netdev_err(ndev,
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index babbe19f57e2..90abff664495 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -1616,6 +1616,11 @@ struct hyperv_service_callback {
 	void (*callback)(void *context);
 };
 
+struct hv_dma_range {
+	dma_addr_t dma;
+	u32 mapping_size;
+};
+
 #define MAX_SRV_VER	0x7ffffff
 extern bool vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, u8 *buf, u32 buflen,
 				const int *fw_version, int fw_vercnt,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:42:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:42:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152452.281660 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gY-0008UO-AM; Wed, 07 Jul 2021 15:42:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152452.281660; Wed, 07 Jul 2021 15:42:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gY-0008UF-6q; Wed, 07 Jul 2021 15:42:02 +0000
Received: by outflank-mailman (input) for mailman id 152452;
 Wed, 07 Jul 2021 15:42:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19ax-0000vf-Lv
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:36:15 +0000
Received: from mail-pj1-x1036.google.com (unknown [2607:f8b0:4864:20::1036])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9f5343a9-2fb4-4ad6-b29d-8d5430575569;
 Wed, 07 Jul 2021 15:35:35 +0000 (UTC)
Received: by mail-pj1-x1036.google.com with SMTP id
 x21-20020a17090aa395b029016e25313bfcso1899662pjp.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:35 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.34
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:34 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9f5343a9-2fb4-4ad6-b29d-8d5430575569
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=TDHZQgnHR8D2Lbss+oxbhfWYDj9fVT4IV0q165q+scY=;
        b=jlhWksTt9ZXMQ3V5VZdagp4ykYr1NEm+E0/uwOYCfTgwiWHndiHvF1l07h0g10O76p
         /1E2rtwwZ9f1CUV+vUiBNbbCbTCtaahPxUZ7tRHr/nHBT2W6v86oKAwn8ZCCNPMumLn2
         0rXBqE/jPPwXQxXwuI41eD0/HivvOqDW6houVOHuI1fZVGi2I+zpMwIEd/ablG8Mh+Xd
         5CUPqxt1iAquu91aga4I00EZPhCMpR6UmUQsadux88HjkMINPdMyFaX59QQ6qLR52QGu
         HmmUFOOXJe8oM/DULJDYHJsB1MTWsYHfYYloQags21tXXhIuF7MvwEDioPNBthxVDBiR
         2eeQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=TDHZQgnHR8D2Lbss+oxbhfWYDj9fVT4IV0q165q+scY=;
        b=nl9NlruuMTZiYa3yLhfWSsyBL0isgQBHN/XqeDsrTEOtiWOvvWZHb9HlP4ztukMHCx
         XPCn64nl5QqZsnhUJZwwgO9TYc84ENOscAaWlnZ3I4SzZSkuv0CKp+Y3Monil8a/DvSJ
         AS/MJwVsX3FgLim1CRUwkl/IWtXOXLsIWSGNhjWEkc8Gq5NQVXBIgSY5QCBvdALtJscp
         9Z7o5p46sara2d+klY+7P4gijo29KqswabrYVX2YzI0aS4FHi4WLJTkTs4ENknQu/ypY
         6dfTuytlShYgwijwyeGmUJb9g4g8EKu+FvolU8buVfCJ8Ii54qFm1bMHsndIlVAyJiH/
         G93g==
X-Gm-Message-State: AOAM533dy9ByfWTMMeYjqEne0IjcbPYNNRVtdP8vtHafcOnlK0UpiAau
	jLdnv5GcT9ZM7KWCpcjYHgQ=
X-Google-Smtp-Source: ABdhPJxmKhX5fK2x5od9d5gvzBUJ0Dcm3yqb9eF3Fi8VSAbfNgyMwfqdNVErf+9OlaGCHUhH+iCf7g==
X-Received: by 2002:a17:902:b604:b029:128:bfa5:3c4c with SMTP id b4-20020a170902b604b0290128bfa53c4cmr21695343pls.29.1625672135173;
        Wed, 07 Jul 2021 08:35:35 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 12/12] x86/HV: Not set memory decrypted/encrypted during kexec alloc/free page in IVM
Date: Wed,  7 Jul 2021 11:34:53 -0400
Message-Id: <20210707153456.3976348-13-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V Isolation VM reuses set_memory_decrypted/encrypted function
and not needs to decrypt/encrypt memory in arch_kexec_post_alloc(pre_free)
_pages() just likes AMD SEV VM. So skip them.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/kernel/machine_kexec_64.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index c078b0d3ab0e..0cadc64b6873 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -26,6 +26,7 @@
 #include <asm/kexec-bzimage64.h>
 #include <asm/setup.h>
 #include <asm/set_memory.h>
+#include <asm/mshyperv.h>
 
 #ifdef CONFIG_ACPI
 /*
@@ -598,7 +599,7 @@ void arch_kexec_unprotect_crashkres(void)
  */
 int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
 {
-	if (sev_active())
+	if (sev_active() || hv_is_isolation_supported())
 		return 0;
 
 	/*
@@ -611,7 +612,7 @@ int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
 
 void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages)
 {
-	if (sev_active())
+	if (sev_active() || hv_is_isolation_supported())
 		return;
 
 	/*
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:42:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:42:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152455.281670 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gg-0000VI-MD; Wed, 07 Jul 2021 15:42:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152455.281670; Wed, 07 Jul 2021 15:42:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gg-0000VB-J2; Wed, 07 Jul 2021 15:42:10 +0000
Received: by outflank-mailman (input) for mailman id 152455;
 Wed, 07 Jul 2021 15:42:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19as-0000vf-Lq
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:36:10 +0000
Received: from mail-pl1-x62c.google.com (unknown [2607:f8b0:4864:20::62c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ab09452b-43ae-43fd-a27c-7a8bbe5c1731;
 Wed, 07 Jul 2021 15:35:33 +0000 (UTC)
Received: by mail-pl1-x62c.google.com with SMTP id x16so397921plg.3
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:33 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.32
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:32 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ab09452b-43ae-43fd-a27c-7a8bbe5c1731
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=HlyScOtQVoYnoHAZopBay4tlsKScaz3uD66IFgkGB/I=;
        b=bxNW29cQvWv3ujr0f58UjRu80DYsbpoGdhnIi/lG1c6YsKb4ztVOaciTtQsat/2hmY
         ylqCpErElnSmMMEwnm0xzwkPMzgpIThweHJbOgPQNWplt1zjoHk2gKy/i5mQUyxwK1nt
         TSJoaaT4RSoZGSUJxQ46jxAq6r+VG8ydemfCRwxghzMJsVh4Yicqg2DXYqd01kIFu7jj
         iNGBFRcmLAjLNa4rzkwkJZMtnKADBmqzdLPSaw+tM9QyLkOxDPEWpCIXBIfFVrmSZYPK
         GdWEVdbpBPX/opp6/oIg4LO/ghCsDtY6L41B4UJGaDYzMk4mS2QYngShB3OVMKPn2jhE
         f76w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=HlyScOtQVoYnoHAZopBay4tlsKScaz3uD66IFgkGB/I=;
        b=OE5wUdgHLSMfvm09Exu7VijAAVGugDoBvnxwpTiy4/eJ4J/g7YLBjXi3E4NhbdXvWu
         JEUeQN+Ql6OaBDtCeW9qkd/qmrdNyIFsehWPhf0QO3NS5SYLknGt2MtAShmJKnrYHC+N
         PwNA1VQ+obWNaRDzS5MiK2BQHClz9i06+ZPiusfOm21ezdCF8/4mYb5cdUY4y7979sR0
         8kkz/5dgjZwlFATQJoJtz1t5Cst4cEnBs9B4sX+QbvzlZd47iWW6lIEkM4xrFRWi3iN8
         gwVAuwWnJzT8uoyPJqMsU5EMupJEe50SNPr2uWuQ2Hbt2BXbG23fOXmDeZppdTYILe7D
         Rcbw==
X-Gm-Message-State: AOAM532lpIeR3Sq724KoNhdTDXDjkqOsCfWYn6zes5p9ES9Kxsni2E6p
	SBJpfeCus7jVPC/w9C2dEEo=
X-Google-Smtp-Source: ABdhPJx3i9GuiMNnKWlirproWAKBg0JIByqpe9SRXfc5+rRXed51xGE09BIxEwoqau8Zy8jDwnsrlQ==
X-Received: by 2002:a17:90a:c28a:: with SMTP id f10mr27527975pjt.15.1625672132814;
        Wed, 07 Jul 2021 08:35:32 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 11/12] HV/Storvsc: Add Isolation VM support for storvsc driver
Date: Wed,  7 Jul 2021 11:34:52 -0400
Message-Id: <20210707153456.3976348-12-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM, all shared memory with host needs to mark visible
to host via hvcall. vmbus_establish_gpadl() has already done it for
storvsc rx/tx ring buffer. The page buffer used by vmbus_sendpacket_
mpb_desc() still need to handle. Use DMA API to map/umap these
memory during sending/receiving packet and Hyper-V DMA ops callback
will use swiotlb function to allocate bounce buffer and copy data
from/to bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/scsi/storvsc_drv.c | 68 +++++++++++++++++++++++++++++++++++---
 1 file changed, 63 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 403753929320..cc9cb32f6621 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -21,6 +21,8 @@
 #include <linux/device.h>
 #include <linux/hyperv.h>
 #include <linux/blkdev.h>
+#include <linux/io.h>
+#include <linux/dma-mapping.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_host.h>
@@ -427,6 +429,8 @@ struct storvsc_cmd_request {
 	u32 payload_sz;
 
 	struct vstor_packet vstor_packet;
+	u32 hvpg_count;
+	struct hv_dma_range *dma_range;
 };
 
 
@@ -509,6 +513,14 @@ struct storvsc_scan_work {
 	u8 tgt_id;
 };
 
+#define storvsc_dma_map(dev, page, offset, size, dir) \
+	dma_map_page(dev, page, offset, size, dir)
+
+#define storvsc_dma_unmap(dev, dma_range, dir)		\
+		dma_unmap_page(dev, dma_range.dma,	\
+			       dma_range.mapping_size,	\
+			       dir ? DMA_FROM_DEVICE : DMA_TO_DEVICE)
+
 static void storvsc_device_scan(struct work_struct *work)
 {
 	struct storvsc_scan_work *wrk;
@@ -1267,6 +1279,7 @@ static void storvsc_on_channel_callback(void *context)
 	struct hv_device *device;
 	struct storvsc_device *stor_device;
 	struct Scsi_Host *shost;
+	int i;
 
 	if (channel->primary_channel != NULL)
 		device = channel->primary_channel->device_obj;
@@ -1321,6 +1334,15 @@ static void storvsc_on_channel_callback(void *context)
 				request = (struct storvsc_cmd_request *)scsi_cmd_priv(scmnd);
 			}
 
+			if (request->dma_range) {
+				for (i = 0; i < request->hvpg_count; i++)
+					storvsc_dma_unmap(&device->device,
+						request->dma_range[i],
+						request->vstor_packet.vm_srb.data_in == READ_TYPE);
+
+				kfree(request->dma_range);
+			}
+
 			storvsc_on_receive(stor_device, packet, request);
 			continue;
 		}
@@ -1817,7 +1839,9 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 		unsigned int hvpgoff, hvpfns_to_add;
 		unsigned long offset_in_hvpg = offset_in_hvpage(sgl->offset);
 		unsigned int hvpg_count = HVPFN_UP(offset_in_hvpg + length);
+		dma_addr_t dma;
 		u64 hvpfn;
+		u32 size;
 
 		if (hvpg_count > MAX_PAGE_BUFFER_COUNT) {
 
@@ -1831,6 +1855,13 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 		payload->range.len = length;
 		payload->range.offset = offset_in_hvpg;
 
+		cmd_request->dma_range = kcalloc(hvpg_count,
+				 sizeof(*cmd_request->dma_range),
+				 GFP_ATOMIC);
+		if (!cmd_request->dma_range) {
+			ret = -ENOMEM;
+			goto free_payload;
+		}
 
 		for (i = 0; sgl != NULL; sgl = sg_next(sgl)) {
 			/*
@@ -1854,9 +1885,29 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 			 * last sgl should be reached at the same time that
 			 * the PFN array is filled.
 			 */
-			while (hvpfns_to_add--)
-				payload->range.pfn_array[i++] =	hvpfn++;
+			while (hvpfns_to_add--) {
+				size = min(HV_HYP_PAGE_SIZE - offset_in_hvpg,
+					   (unsigned long)length);
+				dma = storvsc_dma_map(&dev->device, pfn_to_page(hvpfn++),
+						      offset_in_hvpg, size,
+						      scmnd->sc_data_direction);
+				if (dma_mapping_error(&dev->device, dma)) {
+					ret = -ENOMEM;
+					goto free_dma_range;
+				}
+
+				if (offset_in_hvpg) {
+					payload->range.offset = dma & ~HV_HYP_PAGE_MASK;
+					offset_in_hvpg = 0;
+				}
+
+				cmd_request->dma_range[i].dma = dma;
+				cmd_request->dma_range[i].mapping_size = size;
+				payload->range.pfn_array[i++] = dma >> HV_HYP_PAGE_SHIFT;
+				length -= size;
+			}
 		}
+		cmd_request->hvpg_count = hvpg_count;
 	}
 
 	cmd_request->payload = payload;
@@ -1867,13 +1918,20 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 	put_cpu();
 
 	if (ret == -EAGAIN) {
-		if (payload_sz > sizeof(cmd_request->mpb))
-			kfree(payload);
 		/* no more space */
-		return SCSI_MLQUEUE_DEVICE_BUSY;
+		ret = SCSI_MLQUEUE_DEVICE_BUSY;
+		goto free_dma_range;
 	}
 
 	return 0;
+
+free_dma_range:
+	kfree(cmd_request->dma_range);
+
+free_payload:
+	if (payload_sz > sizeof(cmd_request->mpb))
+		kfree(payload);
+	return ret;
 }
 
 static struct scsi_host_template scsi_driver = {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:42:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:42:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152456.281676 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gh-0000ZR-4B; Wed, 07 Jul 2021 15:42:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152456.281676; Wed, 07 Jul 2021 15:42:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19gg-0000Yb-Ro; Wed, 07 Jul 2021 15:42:10 +0000
Received: by outflank-mailman (input) for mailman id 152456;
 Wed, 07 Jul 2021 15:42:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19ai-0000vf-Li
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:36:00 +0000
Received: from mail-pf1-x42e.google.com (unknown [2607:f8b0:4864:20::42e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 19862674-945a-422a-8f4e-5732b1ceaeca;
 Wed, 07 Jul 2021 15:35:28 +0000 (UTC)
Received: by mail-pf1-x42e.google.com with SMTP id x16so2477304pfa.13
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:35:28 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:6b7f:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y11sm21096877pfo.160.2021.07.07.08.35.27
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:35:27 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 19862674-945a-422a-8f4e-5732b1ceaeca
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=uSViD25AWGJ6J+QgAwUoKBubGeqJPy/dkYcV0Fzox+c=;
        b=hxtJfit4Ppjmah6XFuSxBgEgKz4f338nj5l+EvxtZhggrVRUinn9AOrQHtV3DDZKcM
         Ej5ATK6iOzTsbjVivb/g+9BTMQWADu3EwiqxqN0N034NnjHVc5RFaWjZZi8FrmBMNjDc
         kTVnavRihE+IY8ODngcmJiywHcuNcHf6IcItZHfq52OJ3mn628/zSiJ1ZgbxaWVOUSz0
         Bsu309dV76TSTZYXHHmFastBrfBKRfU/I05CMDCuXl3O9z1Cu5af5rOCjJWqoHIbc7yU
         FHWKIg6ac9HX4tS5ngN1//k6dwB1ZObR8FLS5h0F4YZI3QaLm7LWUf48h70wjoQGvKbN
         Okyg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=uSViD25AWGJ6J+QgAwUoKBubGeqJPy/dkYcV0Fzox+c=;
        b=HO5JWDOL0N9JZ/957z4iJA/U3TkP3N7DNjZEOj2jxjlCg1wasgpzSUgjaHJL8unN89
         bAhyOqnKPEbJbbKgNO5lhUGqz5yISVJg2Mal+kQODEdRqS4ZqlBCJPYsmxbDMDg6KiIF
         TiCuX3RrdFV2uTv8EWoUMfGTgH7qqUSV6xS5/5cc9mQrVwgLCR7n7hoQUQ6PFP74o40j
         gWMGlKH4Bty45/fZDTVGZ6f8L2/xbBQNFdBOwIuRpHdLsXGP8ijIKbe3KMZSWn36PEWu
         7PtkwCyTKzjsHg32rHF6v04UimSzPq6aEiKg7kuHOBpJGbYn0bALWcRHJKSzj38D68S1
         1F5A==
X-Gm-Message-State: AOAM532J2SWUoYbEqSq7jjpnLdgO0sPp6wyIlUen3FaK78f9S0AS5TPj
	aSlCfFBh7Ubmv1BX1rYV+PU=
X-Google-Smtp-Source: ABdhPJxV4DDJMJ1p4O1TlHaSs9jPf4KD9VnkCZ6P4EFyDuvhbptUFuslKTwEut8HFiRhRRaysKUCzA==
X-Received: by 2002:a63:4b23:: with SMTP id y35mr26837209pga.179.1625672128224;
        Wed, 07 Jul 2021 08:35:28 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	rppt@kernel.org,
	akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	rientjes@google.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	hannes@cmpxchg.org,
	saravanand@fb.com,
	krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [RFC PATCH V4 09/12] HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
Date: Wed,  7 Jul 2021 11:34:50 -0400
Message-Id: <20210707153456.3976348-10-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707153456.3976348-1-ltykernel@gmail.com>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V Isolation VM requires bounce buffer support to copy
data from/to encrypted memory and so enable swiotlb force
mode to use swiotlb bounce buffer for DMA transaction.

In Isolation VM with AMD SEV, the bounce buffer needs to be
accessed via extra address space which is above shared_gpa_boundary
(E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
The access physical address will be original physical address +
shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
spec is called virtual top of memory(vTOM). Memory addresses below
vTOM are automatically treated as private while memory above
vTOM is treated as shared.

Swiotlb bounce buffer code calls set_memory_decrypted_map()
to mark bounce buffer visible to host and map it in extra
address space.

Hyper-V initalizes swiotlb bounce buffer and default swiotlb
needs to be disabled. pci_swiotlb_detect_override() and
pci_swiotlb_detect_4gb() enable the default one. To override
the setting, hyperv_swiotlb_detect() needs to run before
these detect functions which depends on the pci_xen_swiotlb_
init(). Make pci_xen_swiotlb_init() depends on the hyperv_swiotlb
_detect() to keep the order.

The map function vmap_pfn() can't work in the early place
hyperv_iommu_swiotlb_init() and so initialize swiotlb bounce
buffer in the hyperv_iommu_swiotlb_later_init().

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/xen/pci-swiotlb-xen.c |  3 +-
 drivers/hv/vmbus_drv.c         |  3 ++
 drivers/iommu/hyperv-iommu.c   | 62 ++++++++++++++++++++++++++++++++++
 include/linux/hyperv.h         |  1 +
 4 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/arch/x86/xen/pci-swiotlb-xen.c b/arch/x86/xen/pci-swiotlb-xen.c
index 54f9aa7e8457..43bd031aa332 100644
--- a/arch/x86/xen/pci-swiotlb-xen.c
+++ b/arch/x86/xen/pci-swiotlb-xen.c
@@ -4,6 +4,7 @@
 
 #include <linux/dma-map-ops.h>
 #include <linux/pci.h>
+#include <linux/hyperv.h>
 #include <xen/swiotlb-xen.h>
 
 #include <asm/xen/hypervisor.h>
@@ -91,6 +92,6 @@ int pci_xen_swiotlb_init_late(void)
 EXPORT_SYMBOL_GPL(pci_xen_swiotlb_init_late);
 
 IOMMU_INIT_FINISH(pci_xen_swiotlb_detect,
-		  NULL,
+		  hyperv_swiotlb_detect,
 		  pci_xen_swiotlb_init,
 		  NULL);
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 92cb3f7d21d9..5e3bb76d4dee 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -23,6 +23,7 @@
 #include <linux/cpu.h>
 #include <linux/sched/task_stack.h>
 
+#include <linux/dma-map-ops.h>
 #include <linux/delay.h>
 #include <linux/notifier.h>
 #include <linux/ptrace.h>
@@ -2080,6 +2081,7 @@ struct hv_device *vmbus_device_create(const guid_t *type,
 	return child_device_obj;
 }
 
+static u64 vmbus_dma_mask = DMA_BIT_MASK(64);
 /*
  * vmbus_device_register - Register the child device
  */
@@ -2120,6 +2122,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
 	}
 	hv_debug_add_dev_dir(child_device_obj);
 
+	child_device_obj->device.dma_mask = &vmbus_dma_mask;
 	return 0;
 
 err_kset_unregister:
diff --git a/drivers/iommu/hyperv-iommu.c b/drivers/iommu/hyperv-iommu.c
index e285a220c913..d7ea8e05b991 100644
--- a/drivers/iommu/hyperv-iommu.c
+++ b/drivers/iommu/hyperv-iommu.c
@@ -13,14 +13,22 @@
 #include <linux/irq.h>
 #include <linux/iommu.h>
 #include <linux/module.h>
+#include <linux/hyperv.h>
+#include <linux/io.h>
 
 #include <asm/apic.h>
 #include <asm/cpu.h>
 #include <asm/hw_irq.h>
 #include <asm/io_apic.h>
+#include <asm/iommu.h>
+#include <asm/iommu_table.h>
 #include <asm/irq_remapping.h>
 #include <asm/hypervisor.h>
 #include <asm/mshyperv.h>
+#include <asm/swiotlb.h>
+#include <linux/dma-map-ops.h>
+#include <linux/dma-direct.h>
+#include <linux/set_memory.h>
 
 #include "irq_remapping.h"
 
@@ -36,6 +44,8 @@
 static cpumask_t ioapic_max_cpumask = { CPU_BITS_NONE };
 static struct irq_domain *ioapic_ir_domain;
 
+static unsigned long hyperv_io_tlb_start, hyperv_io_tlb_size;
+
 static int hyperv_ir_set_affinity(struct irq_data *data,
 		const struct cpumask *mask, bool force)
 {
@@ -337,4 +347,56 @@ static const struct irq_domain_ops hyperv_root_ir_domain_ops = {
 	.free = hyperv_root_irq_remapping_free,
 };
 
+void __init hyperv_iommu_swiotlb_init(void)
+{
+	unsigned long bytes;
+	void *vstart;
+
+	/*
+	 * Allocate Hyper-V swiotlb bounce buffer at early place
+	 * to reserve large contiguous memory.
+	 */
+	hyperv_io_tlb_size = 200 * 1024 * 1024;
+	hyperv_io_tlb_start = memblock_alloc_low(PAGE_ALIGN(hyperv_io_tlb_size),
+						 HV_HYP_PAGE_SIZE);
+
+	if (!hyperv_io_tlb_start) {
+		pr_warn("Fail to allocate Hyper-V swiotlb buffer.\n");
+		return;
+	}
+}
+
+int __init hyperv_swiotlb_detect(void)
+{
+	if (hypervisor_is_type(X86_HYPER_MS_HYPERV)
+	    && hv_is_isolation_supported()) {
+		/*
+		 * Enable swiotlb force mode in Isolation VM to
+		 * use swiotlb bounce buffer for dma transaction.
+		 */
+		swiotlb_force = SWIOTLB_FORCE;
+		return 1;
+	}
+
+	return 0;
+}
+
+void __init hyperv_iommu_swiotlb_later_init(void)
+{
+	void *hyperv_io_tlb_remap;
+	int ret;
+
+	/*
+	 * Swiotlb bounce buffer needs to be mapped in extra address
+	 * space. Map function doesn't work in the early place and so
+	 * call swiotlb_late_init_with_tbl() here.
+	 */
+	swiotlb_late_init_with_tbl(hyperv_io_tlb_start,
+				   hyperv_io_tlb_size >> IO_TLB_SHIFT);
+}
+
+IOMMU_INIT_FINISH(hyperv_swiotlb_detect,
+		  NULL, hyperv_iommu_swiotlb_init,
+		  hyperv_iommu_swiotlb_later_init);
+
 #endif
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 06eccaba10c5..babbe19f57e2 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -1759,6 +1759,7 @@ int hyperv_write_cfg_blk(struct pci_dev *dev, void *buf, unsigned int len,
 int hyperv_reg_block_invalidate(struct pci_dev *dev, void *context,
 				void (*block_invalidate)(void *context,
 							 u64 block_mask));
+int __init hyperv_swiotlb_detect(void);
 
 struct hyperv_pci_block_ops {
 	int (*read_block)(struct pci_dev *dev, void *buf, unsigned int buf_len,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:46:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:46:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152479.281695 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ki-0002G9-Jp; Wed, 07 Jul 2021 15:46:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152479.281695; Wed, 07 Jul 2021 15:46:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ki-0002G2-Gl; Wed, 07 Jul 2021 15:46:20 +0000
Received: by outflank-mailman (input) for mailman id 152479;
 Wed, 07 Jul 2021 15:46:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19kh-0002Fw-5b
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:46:19 +0000
Received: from mail-pf1-x434.google.com (unknown [2607:f8b0:4864:20::434])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 820e5f88-7588-4532-993a-49a18aed7788;
 Wed, 07 Jul 2021 15:46:18 +0000 (UTC)
Received: by mail-pf1-x434.google.com with SMTP id 17so2550943pfz.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:18 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id y7sm19636443pfi.204.2021.07.07.08.46.16
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:17 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 820e5f88-7588-4532-993a-49a18aed7788
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=XEy9MBH2xC4dZEcS/mwpFTD3phu8HJFYvRE31VHkqO4=;
        b=IJYcWyjtiAGyctd33d7WzD1Ya5MME4uy2kn7cW2sqewG9RXXR1GpEC/KQMeGYUDW11
         CpTXGCQx+5YVMMyHklLmUqQ6FXM65pNimV5ZJZFHXYKFKUD4ga4dufPIfGqIdLt17/Iz
         oVM+0Moyjz7WkBA5Z7oSvtgXg6NpqxRyfWI2qaBil+8DNBU8eyuLSKCl+DLUj39HNSHI
         7fyY7LfXWyfUIuSgcaId0f6/nkqbXBVRdMPYL1UB2XyxRuRokathsSIffSmu29mHqW1v
         Kkalb1N37LwiliV2z7KMFoFdNDiam9ySQBJDqytMl/g0VqVy4YaiQuUCHWOI5QAmAhE6
         hXFA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=XEy9MBH2xC4dZEcS/mwpFTD3phu8HJFYvRE31VHkqO4=;
        b=oVS2EyYpiCx9cef2lRAIFLOONAXJWt/ot8SnzlIp5u21l6zCQjiTnQCOVFeGTqkGwz
         NAAp0QLLBfGbSZTrpACTb2ujvWNLid8HnF/oXtSL1I2OLQTI3WsGudQp27hKFZUWkl6e
         5soia3N3dXMuuw0cB0cjlGYfSYtXZB933glxmSfbKoHVUKMyI8PSyxdgBVWX/vQEUHnY
         FD+mMYoDiLI/ovSzfBonIg3Y0VQEB0+QhYmhSV5O1DvAzzXvJeL2GKuXWjBzTO2BXYaJ
         omznslZHq+GLJEBuSRxkme815FstqX+V+f1o2IkmDKZih141U3WY7UbsAU7Dd2tq+ir+
         qksA==
X-Gm-Message-State: AOAM5311ZPAjxked8UTTFne+LU191TngID/Nl5E8cY/Zqp5R4UuygJSU
	3NBgQnKyDTsO1NLPQx9Cmvg=
X-Google-Smtp-Source: ABdhPJy+Udd+5nfQjIRMeQLLR8/b7jtymgw9vnceB6ga/ifVauBDRWe6k84z/LyHbdn5WDkvZPN7uA==
X-Received: by 2002:a62:fb13:0:b029:309:8d89:46b2 with SMTP id x19-20020a62fb130000b02903098d8946b2mr25765076pfm.67.1625672777549;
        Wed, 07 Jul 2021 08:46:17 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	Tianyu.Lan@microsoft.com,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	martin.b.radev@gmail.com,
	pgonda@google.com,
	hannes@cmpxchg.org,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	rientjes@google.com,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 00/13] x86/Hyper-V: Add Hyper-V Isolation VM support
Date: Wed,  7 Jul 2021 11:45:07 -0400
Message-Id: <20210707154523.3977287-1-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides two kinds of Isolation VMs. VBS(Virtualization-based
security) and AMD SEV-SNP unenlightened Isolation VMs. This patchset
is to add support for these Isolation VM support in Linux.

The memory of these vms are encrypted and host can't access guest
memory directly. Hyper-V provides new host visibility hvcall and
the guest needs to call new hvcall to mark memory visible to host
before sharing memory with host. For security, all network/storage
stack memory should not be shared with host and so there is bounce
buffer requests.

Vmbus channel ring buffer already plays bounce buffer role because
all data from/to host needs to copy from/to between the ring buffer
and IO stack memory. So mark vmbus channel ring buffer visible.

There are two exceptions - packets sent by vmbus_sendpacket_
pagebuffer() and vmbus_sendpacket_mpb_desc(). These packets
contains IO stack memory address and host will access these memory.
So add allocation bounce buffer support in vmbus for these packets.

For SNP isolation VM, guest needs to access the shared memory via
extra address space which is specified by Hyper-V CPUID HYPERV_CPUID_
ISOLATION_CONFIG. The access physical address of the shared memory
should be bounce buffer memory GPA plus with shared_gpa_boundary
reported by CPUID.

Change since v3:
       - Add interface set_memory_decrypted_map() to decrypt memory and
         map bounce buffer in extra address space 
       - Remove swiotlb remap function and store the remap address
         returned by set_memory_decrypted_map() in swiotlb mem data structure.
       - Introduce hv_set_mem_enc() to make code more readable in the __set_memory_enc_dec().

Change since v2:
       - Remove not UIO driver in Isolation VM patch
       - Use vmap_pfn() to replace ioremap_page_range function in
       order to avoid exposing symbol ioremap_page_range() and
       ioremap_page_range()
       - Call hv set mem host visibility hvcall in set_memory_encrypted/decrypted()
       - Enable swiotlb force mode instead of adding Hyper-V dma map/unmap hook
       - Fix code style

Tianyu Lan (13):
  x86/HV: Initialize GHCB page in Isolation VM
  x86/HV: Initialize shared memory boundary in the Isolation VM.
  x86/HV: Add new hvcall guest address host visibility support
  HV: Mark vmbus ring buffer visible to host in Isolation VM
  HV: Add Write/Read MSR registers via ghcb page
  HV: Add ghcb hvcall support for SNP VM
  HV/Vmbus: Add SNP support for VMbus channel initiate message
  HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
  x86/Swiotlb/HV: Add Swiotlb bounce buffer remap function for HV IVM
  HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
  HV/Netvsc: Add Isolation VM support for netvsc driver
  HV/Storvsc: Add Isolation VM support for storvsc driver
  x86/HV: Not set memory decrypted/encrypted during kexec alloc/free
    page in IVM

 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/hv_init.c          |  25 +--
 arch/x86/hyperv/ivm.c              | 299 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 ++
 arch/x86/include/asm/mshyperv.h    |  84 +++++++-
 arch/x86/include/asm/set_memory.h  |   2 +
 arch/x86/include/asm/sev-es.h      |   4 +
 arch/x86/kernel/cpu/mshyperv.c     |   5 +
 arch/x86/kernel/machine_kexec_64.c |   5 +-
 arch/x86/kernel/sev-es-shared.c    |  21 +-
 arch/x86/mm/pat/set_memory.c       |  34 +++-
 arch/x86/xen/pci-swiotlb-xen.c     |   3 +-
 drivers/hv/Kconfig                 |   1 +
 drivers/hv/channel.c               |  48 ++++-
 drivers/hv/connection.c            |  71 ++++++-
 drivers/hv/hv.c                    | 129 +++++++++----
 drivers/hv/hyperv_vmbus.h          |   3 +
 drivers/hv/ring_buffer.c           |  84 ++++++--
 drivers/hv/vmbus_drv.c             |   3 +
 drivers/iommu/hyperv-iommu.c       |  62 ++++++
 drivers/net/hyperv/hyperv_net.h    |   6 +
 drivers/net/hyperv/netvsc.c        | 144 +++++++++++++-
 drivers/net/hyperv/rndis_filter.c  |   2 +
 drivers/scsi/storvsc_drv.c         |  68 ++++++-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 include/asm-generic/mshyperv.h     |  53 ++++-
 include/linux/hyperv.h             |  16 ++
 include/linux/swiotlb.h            |   4 +
 kernel/dma/swiotlb.c               |  11 +-
 29 files changed, 1097 insertions(+), 111 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:46:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:46:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152484.281707 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19l2-0002hm-T5; Wed, 07 Jul 2021 15:46:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152484.281707; Wed, 07 Jul 2021 15:46:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19l2-0002ha-Px; Wed, 07 Jul 2021 15:46:40 +0000
Received: by outflank-mailman (input) for mailman id 152484;
 Wed, 07 Jul 2021 15:46:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19l1-0002ed-BJ
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:46:39 +0000
Received: from mail-pj1-x102d.google.com (unknown [2607:f8b0:4864:20::102d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 25c1732b-c1bd-4cc8-a124-af89b54f37c9;
 Wed, 07 Jul 2021 15:46:38 +0000 (UTC)
Received: by mail-pj1-x102d.google.com with SMTP id fs7so1793688pjb.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:38 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.36
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:37 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 25c1732b-c1bd-4cc8-a124-af89b54f37c9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=XEy9MBH2xC4dZEcS/mwpFTD3phu8HJFYvRE31VHkqO4=;
        b=dVjU9z6yd+WtH5wOSKQA2aeo62Q55Ryf1sLhnW8ERHJkP5FeXEOXZo8pcwVX7GVsJl
         SONowG0KutFyHhmZBl6O3rcPAlnySVD/WytMsY0wpDvq8vddH/VhKizYx5wu4u62y6WQ
         yi5aDJkNgItUVJjPNZXit/rT1B2o9e71+ta9pdA5HqQDjq2R0RIMf5vCGZOg2KKKN+FY
         Gra8VhDU9iGdsKsuKlCK2QwTwqi7BeC/5rjtSLQKB5l3xAShMlgnGvfWh76z37tFab2R
         Y8p2fv9uiNRXN+g6vKG7/7Bq3LsuPRHd5FDg8+J0YDQp0lZbAJG5CoJxfVXOxaMhQNTT
         FXZg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=XEy9MBH2xC4dZEcS/mwpFTD3phu8HJFYvRE31VHkqO4=;
        b=VndSPG40M7VYmhahxvvYtdl0xNElJcZUxCsWVBTn9O4b28EbJOdELyQT1x3amCneoY
         gihrJu8pb22T8BgBSkUn8XiLZr/xu05VLio0ivyagdQLBUAu7Q4c/s6cmXMoquPSTLlN
         wEvezJ0qWsWT1w1CatjoJs5mbwGEzXxIBNpepzOzBjbvuaFNi3EeKeApWROIeru5CsWF
         DmyoZd668rCZFRwaqf3Fjof8SagPn/1yhv7uQLuC6F5xojXq76OKQXscV47+zMrtDLIp
         0bNjbJ6LstT36KPoaAB2SM/kmbeOE5lIl04PcURx1jG+mf4K7opssX9RIWRvIL4OxLSW
         u8eQ==
X-Gm-Message-State: AOAM530jqxTPRc3cR31Y4/l0iUQ8RmlqS2VuX4ZnFx0x14haWepta592
	3Kj+9ipPmtEBBtykTE31mNE=
X-Google-Smtp-Source: ABdhPJwrapkvQmhsq7izULEH3/UVyZc58oEb1wOxgfRpgO104u8No2xwyPDqA0U4C/PdBpq28eDgPQ==
X-Received: by 2002:a17:902:e843:b029:129:acb4:2464 with SMTP id t3-20020a170902e843b0290129acb42464mr7506834plg.77.1625672797807;
        Wed, 07 Jul 2021 08:46:37 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	Tianyu.Lan@microsoft.com,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	nramas@linux.microsoft.com,
	robh@kernel.org,
	keescook@chromium.org,
	martin.b.radev@gmail.com,
	pgonda@google.com,
	hannes@cmpxchg.org,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	rientjes@google.com,
	tj@kernel.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 00/13] x86/Hyper-V: Add Hyper-V Isolation VM support
Date: Wed,  7 Jul 2021 11:46:14 -0400
Message-Id: <20210707154629.3977369-1-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides two kinds of Isolation VMs. VBS(Virtualization-based
security) and AMD SEV-SNP unenlightened Isolation VMs. This patchset
is to add support for these Isolation VM support in Linux.

The memory of these vms are encrypted and host can't access guest
memory directly. Hyper-V provides new host visibility hvcall and
the guest needs to call new hvcall to mark memory visible to host
before sharing memory with host. For security, all network/storage
stack memory should not be shared with host and so there is bounce
buffer requests.

Vmbus channel ring buffer already plays bounce buffer role because
all data from/to host needs to copy from/to between the ring buffer
and IO stack memory. So mark vmbus channel ring buffer visible.

There are two exceptions - packets sent by vmbus_sendpacket_
pagebuffer() and vmbus_sendpacket_mpb_desc(). These packets
contains IO stack memory address and host will access these memory.
So add allocation bounce buffer support in vmbus for these packets.

For SNP isolation VM, guest needs to access the shared memory via
extra address space which is specified by Hyper-V CPUID HYPERV_CPUID_
ISOLATION_CONFIG. The access physical address of the shared memory
should be bounce buffer memory GPA plus with shared_gpa_boundary
reported by CPUID.

Change since v3:
       - Add interface set_memory_decrypted_map() to decrypt memory and
         map bounce buffer in extra address space 
       - Remove swiotlb remap function and store the remap address
         returned by set_memory_decrypted_map() in swiotlb mem data structure.
       - Introduce hv_set_mem_enc() to make code more readable in the __set_memory_enc_dec().

Change since v2:
       - Remove not UIO driver in Isolation VM patch
       - Use vmap_pfn() to replace ioremap_page_range function in
       order to avoid exposing symbol ioremap_page_range() and
       ioremap_page_range()
       - Call hv set mem host visibility hvcall in set_memory_encrypted/decrypted()
       - Enable swiotlb force mode instead of adding Hyper-V dma map/unmap hook
       - Fix code style

Tianyu Lan (13):
  x86/HV: Initialize GHCB page in Isolation VM
  x86/HV: Initialize shared memory boundary in the Isolation VM.
  x86/HV: Add new hvcall guest address host visibility support
  HV: Mark vmbus ring buffer visible to host in Isolation VM
  HV: Add Write/Read MSR registers via ghcb page
  HV: Add ghcb hvcall support for SNP VM
  HV/Vmbus: Add SNP support for VMbus channel initiate message
  HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
  x86/Swiotlb/HV: Add Swiotlb bounce buffer remap function for HV IVM
  HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
  HV/Netvsc: Add Isolation VM support for netvsc driver
  HV/Storvsc: Add Isolation VM support for storvsc driver
  x86/HV: Not set memory decrypted/encrypted during kexec alloc/free
    page in IVM

 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/hv_init.c          |  25 +--
 arch/x86/hyperv/ivm.c              | 299 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 ++
 arch/x86/include/asm/mshyperv.h    |  84 +++++++-
 arch/x86/include/asm/set_memory.h  |   2 +
 arch/x86/include/asm/sev-es.h      |   4 +
 arch/x86/kernel/cpu/mshyperv.c     |   5 +
 arch/x86/kernel/machine_kexec_64.c |   5 +-
 arch/x86/kernel/sev-es-shared.c    |  21 +-
 arch/x86/mm/pat/set_memory.c       |  34 +++-
 arch/x86/xen/pci-swiotlb-xen.c     |   3 +-
 drivers/hv/Kconfig                 |   1 +
 drivers/hv/channel.c               |  48 ++++-
 drivers/hv/connection.c            |  71 ++++++-
 drivers/hv/hv.c                    | 129 +++++++++----
 drivers/hv/hyperv_vmbus.h          |   3 +
 drivers/hv/ring_buffer.c           |  84 ++++++--
 drivers/hv/vmbus_drv.c             |   3 +
 drivers/iommu/hyperv-iommu.c       |  62 ++++++
 drivers/net/hyperv/hyperv_net.h    |   6 +
 drivers/net/hyperv/netvsc.c        | 144 +++++++++++++-
 drivers/net/hyperv/rndis_filter.c  |   2 +
 drivers/scsi/storvsc_drv.c         |  68 ++++++-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 include/asm-generic/mshyperv.h     |  53 ++++-
 include/linux/hyperv.h             |  16 ++
 include/linux/swiotlb.h            |   4 +
 kernel/dma/swiotlb.c               |  11 +-
 29 files changed, 1097 insertions(+), 111 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:46:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:46:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152486.281718 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19l7-000356-AL; Wed, 07 Jul 2021 15:46:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152486.281718; Wed, 07 Jul 2021 15:46:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19l7-00034v-5t; Wed, 07 Jul 2021 15:46:45 +0000
Received: by outflank-mailman (input) for mailman id 152486;
 Wed, 07 Jul 2021 15:46:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19l6-0002ed-3w
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:46:44 +0000
Received: from mail-pf1-x42e.google.com (unknown [2607:f8b0:4864:20::42e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f952742f-823b-431e-b5fa-5d6e02d6d4af;
 Wed, 07 Jul 2021 15:46:42 +0000 (UTC)
Received: by mail-pf1-x42e.google.com with SMTP id f20so2555667pfa.1
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:41 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.40
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:41 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f952742f-823b-431e-b5fa-5d6e02d6d4af
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=R5OLGAMwYXeSrSgg628gKxmY1CTczZlgXFfhQZlHpg0=;
        b=tgnrux6t6SkoTnavPrn5fh2qP8KaJe6YyAcLF8Zt4MPOaOlMQnjeAPQtLYHcXHGF0l
         RB/sKa5anmBAiy1Yvr2Y+jbSOIsZKj02IHcz79CtMxEELmbdvgejBFoU8P/inGk7Ski+
         UB5Fbm6qJvsCU7DXOgoODC5/LhmKJ2RHM0qWVcBm5px6hqJ6rLFhYCJMaghMJN7A4+Ae
         pn3qiH84GvkyWF7QU5yE4BQr7v0t0dCF2LiTlW/fuYW0dRdIKXqx8OiOcW0SB0gvFoEe
         6fqsHE83UrjkzL8JL9iT4cPKy7cfHYkLm0LgcRdpfqv0E36dKdrKn5jfgHF+5+w1Jqdf
         JEIA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=R5OLGAMwYXeSrSgg628gKxmY1CTczZlgXFfhQZlHpg0=;
        b=qM84QtTHgvqVQiVO5CFo0ahEow3uDPtUtElJ9uiDEeqTyg0CjZ2bzybXuvxk9STrrM
         ObYFSrZVh/9UaZQeRsZVE1k9kBqlDKSKNBqLKiEqQ2LgzpyUkHLg+ZnzU5sH97AX2RcQ
         eymrwVVMa0gW9DzKYWGXK69wD4a46shHcjRH4tbHx8v3mhNnAjTEFF4rx0c4qlGR9qUp
         X5IqudVYWYL/Za02zTDpfI4zlMf7G7Aw8TcoCQoN+g14mk6x0lJn4fOFVcEyHSlwzAVD
         CHCPLQcl8r/hvSWBgGs+NDdNox2Y9ro2fuMHXnLGYLNKs/z13rgPFwerSu8YNw4eJXok
         S1ew==
X-Gm-Message-State: AOAM533QMFIDo0g2b2uxTNz9vGB2Auny3BECo5Bf/2ohTE1d9bQCBrnq
	1HVrMcpFJFM24YPkh7cHhIg=
X-Google-Smtp-Source: ABdhPJzuj8kyKMtNb+EskaT+9TtDKmzwnLiT5Tz7koSTfL0Lib9zH4bi1+4ZTW8ZC1YP+6PSa+4BSA==
X-Received: by 2002:a62:fb13:0:b029:309:8d89:46b2 with SMTP id x19-20020a62fb130000b02903098d8946b2mr25766588pfm.67.1625672801313;
        Wed, 07 Jul 2021 08:46:41 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 01/13] x86/HV: Initialize GHCB page in Isolation VM
Date: Wed,  7 Jul 2021 11:46:15 -0400
Message-Id: <20210707154629.3977369-2-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V exposes GHCB page via SEV ES GHCB MSR for SNP guest
to communicate with hypervisor. Map GHCB page for all
cpus to read/write MSR register and submit hvcall request
via GHCB.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/hv_init.c       | 64 ++++++++++++++++++++++++++++++---
 arch/x86/include/asm/mshyperv.h |  2 ++
 include/asm-generic/mshyperv.h  |  2 ++
 3 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index b756b2866deb..e058f72eeee5 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -20,6 +20,7 @@
 #include <linux/kexec.h>
 #include <linux/version.h>
 #include <linux/vmalloc.h>
+#include <linux/io.h>
 #include <linux/mm.h>
 #include <linux/hyperv.h>
 #include <linux/slab.h>
@@ -54,6 +55,26 @@ EXPORT_SYMBOL_GPL(hyperv_pcpu_output_arg);
 u32 hv_max_vp_index;
 EXPORT_SYMBOL_GPL(hv_max_vp_index);
 
+static int hyperv_init_ghcb(void)
+{
+	u64 ghcb_gpa;
+	void *ghcb_va;
+	void **ghcb_base;
+
+	if (!ms_hyperv.ghcb_base)
+		return -EINVAL;
+
+	rdmsrl(MSR_AMD64_SEV_ES_GHCB, ghcb_gpa);
+	ghcb_va = memremap(ghcb_gpa, HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+	if (!ghcb_va)
+		return -ENOMEM;
+
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	*ghcb_base = ghcb_va;
+
+	return 0;
+}
+
 static int hv_cpu_init(unsigned int cpu)
 {
 	u64 msr_vp_index;
@@ -106,6 +127,8 @@ static int hv_cpu_init(unsigned int cpu)
 		wrmsrl(HV_X64_MSR_VP_ASSIST_PAGE, val);
 	}
 
+	hyperv_init_ghcb();
+
 	return 0;
 }
 
@@ -201,6 +224,7 @@ static int hv_cpu_die(unsigned int cpu)
 	unsigned long flags;
 	void **input_arg;
 	void *pg;
+	void **ghcb_va = NULL;
 
 	local_irq_save(flags);
 	input_arg = (void **)this_cpu_ptr(hyperv_pcpu_input_arg);
@@ -214,6 +238,13 @@ static int hv_cpu_die(unsigned int cpu)
 		*output_arg = NULL;
 	}
 
+	if (ms_hyperv.ghcb_base) {
+		ghcb_va = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+		if (*ghcb_va)
+			memunmap(*ghcb_va);
+		*ghcb_va = NULL;
+	}
+
 	local_irq_restore(flags);
 
 	free_pages((unsigned long)pg, hv_root_partition ? 1 : 0);
@@ -410,9 +441,22 @@ void __init hyperv_init(void)
 			VMALLOC_END, GFP_KERNEL, PAGE_KERNEL_ROX,
 			VM_FLUSH_RESET_PERMS, NUMA_NO_NODE,
 			__builtin_return_address(0));
-	if (hv_hypercall_pg == NULL) {
-		wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
-		goto remove_cpuhp_state;
+	if (hv_hypercall_pg == NULL)
+		goto clean_guest_os_id;
+
+	if (hv_isolation_type_snp()) {
+		ms_hyperv.ghcb_base = alloc_percpu(void *);
+		if (!ms_hyperv.ghcb_base)
+			goto clean_guest_os_id;
+
+		if (hyperv_init_ghcb()) {
+			free_percpu(ms_hyperv.ghcb_base);
+			ms_hyperv.ghcb_base = NULL;
+			goto clean_guest_os_id;
+		}
+
+		/* Hyper-V requires to write guest os id via ghcb in SNP IVM. */
+		hv_ghcb_msr_write(HV_X64_MSR_GUEST_OS_ID, guest_id);
 	}
 
 	rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
@@ -473,7 +517,8 @@ void __init hyperv_init(void)
 	hv_query_ext_cap(0);
 	return;
 
-remove_cpuhp_state:
+clean_guest_os_id:
+	wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
 	cpuhp_remove_state(cpuhp);
 free_vp_assist_page:
 	kfree(hv_vp_assist_page);
@@ -502,6 +547,9 @@ void hyperv_cleanup(void)
 	 */
 	hv_hypercall_pg = NULL;
 
+	if (ms_hyperv.ghcb_base)
+		free_percpu(ms_hyperv.ghcb_base);
+
 	/* Reset the hypercall page */
 	hypercall_msr.as_uint64 = 0;
 	wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
@@ -586,6 +634,14 @@ bool hv_is_isolation_supported(void)
 }
 EXPORT_SYMBOL_GPL(hv_is_isolation_supported);
 
+DEFINE_STATIC_KEY_FALSE(isolation_type_snp);
+
+bool hv_isolation_type_snp(void)
+{
+	return static_branch_unlikely(&isolation_type_snp);
+}
+EXPORT_SYMBOL_GPL(hv_isolation_type_snp);
+
 /* Bit mask of the extended capability to query: see HV_EXT_CAPABILITY_xxx */
 bool hv_query_ext_cap(u64 cap_query)
 {
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 67ff0d637e55..aeacca7c4da8 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -11,6 +11,8 @@
 #include <asm/paravirt.h>
 #include <asm/mshyperv.h>
 
+DECLARE_STATIC_KEY_FALSE(isolation_type_snp);
+
 typedef int (*hyperv_fill_flush_list_func)(
 		struct hv_guest_mapping_flush_list *flush,
 		void *data);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index 9a000ba2bb75..3ae56a29594f 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -35,6 +35,7 @@ struct ms_hyperv_info {
 	u32 max_lp_index;
 	u32 isolation_config_a;
 	u32 isolation_config_b;
+	void  __percpu **ghcb_base;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
@@ -224,6 +225,7 @@ bool hv_is_hyperv_initialized(void);
 bool hv_is_hibernation_supported(void);
 enum hv_isolation_type hv_get_isolation_type(void);
 bool hv_is_isolation_supported(void);
+bool hv_isolation_type_snp(void);
 void hyperv_cleanup(void);
 bool hv_query_ext_cap(u64 cap_query);
 #else /* CONFIG_HYPERV */
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:46:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:46:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152487.281729 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lC-0003RY-IE; Wed, 07 Jul 2021 15:46:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152487.281729; Wed, 07 Jul 2021 15:46:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lC-0003RP-EP; Wed, 07 Jul 2021 15:46:50 +0000
Received: by outflank-mailman (input) for mailman id 152487;
 Wed, 07 Jul 2021 15:46:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lB-0002ed-4D
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:46:49 +0000
Received: from mail-pg1-x530.google.com (unknown [2607:f8b0:4864:20::530])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f823c15d-0146-48bb-8c62-e74ba6bc6f20;
 Wed, 07 Jul 2021 15:46:44 +0000 (UTC)
Received: by mail-pg1-x530.google.com with SMTP id v7so2681618pgl.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:44 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.43
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:43 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f823c15d-0146-48bb-8c62-e74ba6bc6f20
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=0MmjMjO7XvUbpBRdqqPG7tGmikUa5z2pWikCp/JzIEY=;
        b=UW7L39XXXA0lFLWgWURoFcPlCEh4S4Z8KGVwXPdNWOZ1uC97xNL/QzrnRe932i5Zpl
         v+us9x+QqUCVOJR7NW0cti8Dlvz3ntW5JBnk3T8mrXTQQXScCfMHjoOC5qWs78n+WXHy
         l0/TBbeXhFNdgxncs8vmuBc0rOiOjaE2C0pPG29QKAwWxzv4x0ZxqdciLaEAszX0ad2L
         rytLK20HtdLSd1w9TyUEPQIWBcbAQAlFIoL9atuDdZLes8JZJ04ezb04sQO7vSDnJg/s
         lgt8L6SFaYrDfbO40RdC74i07ap4lhvqEU/pQl2wDRJfhNq+GPC5XQGz2XIiVhjZjRsT
         5j1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=0MmjMjO7XvUbpBRdqqPG7tGmikUa5z2pWikCp/JzIEY=;
        b=PrfrBcqv2sIE69wSNtdovZOmMq5X/Gb+VpbqMn5q0inT6dyKKUqghlBF5HHtfK4BrH
         TwK3oYJSiTSJNrvnycyYeKazLj8crEJcSPo8SzfJPxXgkUc+j//F1r2TensJ2EazWJc9
         08Bg69IJqwfPsqlWC1lwwqxyZX35NzP3LJDb+CeIPsG0W8txYqF48LDIK4hLZalrj4r2
         W4VKL0I2a5DtylM7XEZN3ZL6cosGxsF+2ncgZ5Kw92eyhHCSgLHMZsUe1+ncngwDlHb7
         /sZBh4B2id0BNEpmqh4naaGAYle8M08XupOujr7MD6EyPIB9iStMWkeN20hi3jukzb9r
         ozjg==
X-Gm-Message-State: AOAM5329ORqc7yzOldzgXuO7G6Z9D7SomAnYen74dwLtJc6/lX8+Y3z5
	9gSOJuc2rqlndgqpb5CzuWc=
X-Google-Smtp-Source: ABdhPJyAY8zlw6ShjL9q8KFDuhfqbUuaIuxnQh2fAt/BqNVogHlUsHJh8B4rAjBi+hH2uyVONxd4RA==
X-Received: by 2002:a05:6a00:8c4:b029:2b4:8334:ed4d with SMTP id s4-20020a056a0008c4b02902b48334ed4dmr25950524pfu.36.1625672804218;
        Wed, 07 Jul 2021 08:46:44 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 02/13] x86/HV: Initialize shared memory boundary in the Isolation VM.
Date: Wed,  7 Jul 2021 11:46:16 -0400
Message-Id: <20210707154629.3977369-3-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V exposes shared memory boundary via cpuid
HYPERV_CPUID_ISOLATION_CONFIG and store it in the
shared_gpa_boundary of ms_hyperv struct. This prepares
to share memory with host for SNP guest.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/kernel/cpu/mshyperv.c |  2 ++
 include/asm-generic/mshyperv.h | 12 +++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 10b2a8c10cb6..8aed689db621 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -334,6 +334,8 @@ static void __init ms_hyperv_init_platform(void)
 	if (ms_hyperv.priv_high & HV_ISOLATION) {
 		ms_hyperv.isolation_config_a = cpuid_eax(HYPERV_CPUID_ISOLATION_CONFIG);
 		ms_hyperv.isolation_config_b = cpuid_ebx(HYPERV_CPUID_ISOLATION_CONFIG);
+		ms_hyperv.shared_gpa_boundary =
+			(u64)1 << ms_hyperv.shared_gpa_boundary_bits;
 
 		pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n",
 			ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index 3ae56a29594f..2914e27b0429 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -34,8 +34,18 @@ struct ms_hyperv_info {
 	u32 max_vp_index;
 	u32 max_lp_index;
 	u32 isolation_config_a;
-	u32 isolation_config_b;
+	union {
+		u32 isolation_config_b;
+		struct {
+			u32 cvm_type : 4;
+			u32 Reserved11 : 1;
+			u32 shared_gpa_boundary_active : 1;
+			u32 shared_gpa_boundary_bits : 6;
+			u32 Reserved12 : 20;
+		};
+	};
 	void  __percpu **ghcb_base;
+	u64 shared_gpa_boundary;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:47:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:47:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152489.281740 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lL-000415-SN; Wed, 07 Jul 2021 15:46:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152489.281740; Wed, 07 Jul 2021 15:46:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lL-00040u-OE; Wed, 07 Jul 2021 15:46:59 +0000
Received: by outflank-mailman (input) for mailman id 152489;
 Wed, 07 Jul 2021 15:46:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lL-0002ed-4Y
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:46:59 +0000
Received: from mail-pg1-x52d.google.com (unknown [2607:f8b0:4864:20::52d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id baa5ace2-e2d6-40fa-84cb-9859b6b6173e;
 Wed, 07 Jul 2021 15:46:47 +0000 (UTC)
Received: by mail-pg1-x52d.google.com with SMTP id d12so2654901pgd.9
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:47 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.45
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:46 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: baa5ace2-e2d6-40fa-84cb-9859b6b6173e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=Wbx/GDjQo5wf+q3MZtzwwUpSNi9ocBIpEvvl5wWSUuY=;
        b=ecT1hGqfYNVSX47SXb/APhCQFAswJ6vhiyOM6V1lIiA0hdFY9ZpWFZt1c9TCHdJNBQ
         XcXQc3/4fDbjUbmerNVJa3Dq5cdzVDozKwKEKmH6PkjWp3yHaaNxPDerJsPua4+aXTpz
         NAqzl+0braib2153E5+FYzVaRmn3KttlKhGB5UEIqj5z7Xk9jLP9fxgQc7bkq8yIGvGS
         XiQXLXNrRP/d4WnulrZZCEKmBC83CaeEczmrFGQar6E5Fq85/gHnHoR8qDQg/EnO0TBu
         l1qwOsj5nozRCuye6CdjI4MHIeUpFkmrrSo/j8xH4id+T6+Nv0R1VCL2jOSOWnIuEImF
         PNZw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=Wbx/GDjQo5wf+q3MZtzwwUpSNi9ocBIpEvvl5wWSUuY=;
        b=EcgvQcmHhDdIkd3pIc1d6XlPui0nMxmA0jmb7N0LF1TVT5593RatWt8AgwiqBO+WXW
         hZi0dLkRkkuoeNkTH3GLvbNqajJssAAWwxnl92YZE0HnjP3TmWzvO3ofo++E6Ar5MVaL
         35gEdq/ucriKlTQmfTGQ8FR62DzIHjlcEfeZYFqdgiZcHdNn9Ey/U7uJKuQBDUEnhXGi
         3gIBiFswWzoWQs/yCtK7xmcY2kEmBPACa3Eka6tCN/9b93ceOxi0wJbDROoyDryateb6
         RiQabmVQKXR5U0QcbqdAWon7xHN7sJOLBtTxGPiXEd9xu67B2HAGcXU88wuCgb0adD3d
         Br7w==
X-Gm-Message-State: AOAM531ealoHdvJVTMGD2hTd8eHQ707nulJbk6c0s+udrP/eVXp2u8XI
	vPne0wUMQ77orc+mOgFsRrc=
X-Google-Smtp-Source: ABdhPJwxDqBKtHTZaIt8Uim4fO9bVuZt2kYRNRPcJ7s0g20n9ucfbPa+nMlRMlxLWT2zMMFJyY2OBg==
X-Received: by 2002:a65:528d:: with SMTP id y13mr27233738pgp.276.1625672807122;
        Wed, 07 Jul 2021 08:46:47 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 03/13] x86/HV: Add new hvcall guest address host visibility support
Date: Wed,  7 Jul 2021 11:46:17 -0400
Message-Id: <20210707154629.3977369-4-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Add new hvcall guest address host visibility support to mark
memory visible to host. Call it inside set_memory_decrypted
/encrypted().

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/ivm.c              | 112 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 +++++
 arch/x86/include/asm/mshyperv.h    |   3 +-
 arch/x86/mm/pat/set_memory.c       |   6 +-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 6 files changed, 139 insertions(+), 3 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

diff --git a/arch/x86/hyperv/Makefile b/arch/x86/hyperv/Makefile
index 48e2c51464e8..5d2de10809ae 100644
--- a/arch/x86/hyperv/Makefile
+++ b/arch/x86/hyperv/Makefile
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0-only
-obj-y			:= hv_init.o mmu.o nested.o irqdomain.o
+obj-y			:= hv_init.o mmu.o nested.o irqdomain.o ivm.o
 obj-$(CONFIG_X86_64)	+= hv_apic.o hv_proc.o
 
 ifdef CONFIG_X86_64
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
new file mode 100644
index 000000000000..24a58795abd8
--- /dev/null
+++ b/arch/x86/hyperv/ivm.c
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Hyper-V Isolation VM interface with paravisor and hypervisor
+ *
+ * Author:
+ *  Tianyu Lan <Tianyu.Lan@microsoft.com>
+ */
+
+#include <linux/hyperv.h>
+#include <linux/types.h>
+#include <linux/bitfield.h>
+#include <linux/slab.h>
+#include <asm/io.h>
+#include <asm/mshyperv.h>
+
+/*
+ * hv_mark_gpa_visibility - Set pages visible to host via hvcall.
+ *
+ * In Isolation VM, all guest memory is encripted from host and guest
+ * needs to set memory visible to host via hvcall before sharing memory
+ * with host.
+ */
+int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility)
+{
+	struct hv_gpa_range_for_visibility **input_pcpu, *input;
+	u16 pages_processed;
+	u64 hv_status;
+	unsigned long flags;
+
+	/* no-op if partition isolation is not enabled */
+	if (!hv_is_isolation_supported())
+		return 0;
+
+	if (count > HV_MAX_MODIFY_GPA_REP_COUNT) {
+		pr_err("Hyper-V: GPA count:%d exceeds supported:%lu\n", count,
+			HV_MAX_MODIFY_GPA_REP_COUNT);
+		return -EINVAL;
+	}
+
+	local_irq_save(flags);
+	input_pcpu = (struct hv_gpa_range_for_visibility **)
+			this_cpu_ptr(hyperv_pcpu_input_arg);
+	input = *input_pcpu;
+	if (unlikely(!input)) {
+		local_irq_restore(flags);
+		return -EINVAL;
+	}
+
+	input->partition_id = HV_PARTITION_ID_SELF;
+	input->host_visibility = visibility;
+	input->reserved0 = 0;
+	input->reserved1 = 0;
+	memcpy((void *)input->gpa_page_list, pfn, count * sizeof(*pfn));
+	hv_status = hv_do_rep_hypercall(
+			HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY, count,
+			0, input, &pages_processed);
+	local_irq_restore(flags);
+
+	if (!(hv_status & HV_HYPERCALL_RESULT_MASK))
+		return 0;
+
+	return hv_status & HV_HYPERCALL_RESULT_MASK;
+}
+EXPORT_SYMBOL(hv_mark_gpa_visibility);
+
+/*
+ * hv_set_mem_host_visibility - Set specified memory visible to host.
+ *
+ * In Isolation VM, all guest memory is encrypted from host and guest
+ * needs to set memory visible to host via hvcall before sharing memory
+ * with host. This function works as wrap of hv_mark_gpa_visibility()
+ * with memory base and size.
+ */
+static int hv_set_mem_host_visibility(void *kbuffer, size_t size, u32 visibility)
+{
+	int pagecount = size >> HV_HYP_PAGE_SHIFT;
+	u64 *pfn_array;
+	int ret = 0;
+	int i, pfn;
+
+	if (!hv_is_isolation_supported() || !ms_hyperv.ghcb_base)
+		return 0;
+
+	pfn_array = kzalloc(HV_HYP_PAGE_SIZE, GFP_KERNEL);
+	if (!pfn_array)
+		return -ENOMEM;
+
+	for (i = 0, pfn = 0; i < pagecount; i++) {
+		pfn_array[pfn] = virt_to_hvpfn(kbuffer + i * HV_HYP_PAGE_SIZE);
+		pfn++;
+
+		if (pfn == HV_MAX_MODIFY_GPA_REP_COUNT || i == pagecount - 1) {
+			ret |= hv_mark_gpa_visibility(pfn, pfn_array, visibility);
+			pfn = 0;
+
+			if (ret)
+				goto err_free_pfn_array;
+		}
+	}
+
+ err_free_pfn_array:
+	kfree(pfn_array);
+	return ret;
+}
+
+int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
+{
+	return hv_set_mem_host_visibility((void *)addr,
+			numpages * HV_HYP_PAGE_SIZE,
+			enc ? VMBUS_PAGE_NOT_VISIBLE
+			: VMBUS_PAGE_VISIBLE_READ_WRITE);
+}
diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
index 606f5cc579b2..68826fbf92ca 100644
--- a/arch/x86/include/asm/hyperv-tlfs.h
+++ b/arch/x86/include/asm/hyperv-tlfs.h
@@ -262,6 +262,11 @@ enum hv_isolation_type {
 #define HV_X64_MSR_TIME_REF_COUNT	HV_REGISTER_TIME_REF_COUNT
 #define HV_X64_MSR_REFERENCE_TSC	HV_REGISTER_REFERENCE_TSC
 
+/* Hyper-V GPA map flags */
+#define	VMBUS_PAGE_NOT_VISIBLE		0
+#define	VMBUS_PAGE_VISIBLE_READ_ONLY	1
+#define	VMBUS_PAGE_VISIBLE_READ_WRITE	3
+
 /*
  * Declare the MSR used to setup pages used to communicate with the hypervisor.
  */
@@ -561,4 +566,17 @@ enum hv_interrupt_type {
 
 #include <asm-generic/hyperv-tlfs.h>
 
+/* All input parameters should be in single page. */
+#define HV_MAX_MODIFY_GPA_REP_COUNT		\
+	((PAGE_SIZE / sizeof(u64)) - 2)
+
+/* HvCallModifySparseGpaPageHostVisibility hypercall */
+struct hv_gpa_range_for_visibility {
+	u64 partition_id;
+	u32 host_visibility:2;
+	u32 reserved0:30;
+	u32 reserved1;
+	u64 gpa_page_list[HV_MAX_MODIFY_GPA_REP_COUNT];
+} __packed;
+
 #endif
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index aeacca7c4da8..2172493dc881 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -194,7 +194,8 @@ struct irq_domain *hv_create_pci_msi_domain(void);
 int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 		struct hv_interrupt_entry *entry);
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
-
+int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
+int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
 #else /* CONFIG_HYPERV */
 static inline void hyperv_init(void) {}
 static inline void hyperv_setup_mmu_ops(void) {}
diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index 156cd235659f..6cc83c57383d 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -29,6 +29,8 @@
 #include <asm/proto.h>
 #include <asm/memtype.h>
 #include <asm/set_memory.h>
+#include <asm/hyperv-tlfs.h>
+#include <asm/mshyperv.h>
 
 #include "../mm_internal.h"
 
@@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
 	int ret;
 
 	/* Nothing to do if memory encryption is not active */
-	if (!mem_encrypt_active())
+	if (hv_is_isolation_supported())
+		return hv_set_mem_enc(addr, numpages, enc);
+	else if (!mem_encrypt_active())
 		return 0;
 
 	/* Should not be working on unaligned addresses */
diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h
index 515c3fb06ab3..8a0219255545 100644
--- a/include/asm-generic/hyperv-tlfs.h
+++ b/include/asm-generic/hyperv-tlfs.h
@@ -158,6 +158,7 @@ struct ms_hyperv_tsc_page {
 #define HVCALL_RETARGET_INTERRUPT		0x007e
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0
+#define HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY 0x00db
 
 /* Extended hypercalls */
 #define HV_EXT_CALL_QUERY_CAPABILITIES		0x8001
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:47:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:47:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152495.281751 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lW-0004mV-6n; Wed, 07 Jul 2021 15:47:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152495.281751; Wed, 07 Jul 2021 15:47:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lW-0004mM-2t; Wed, 07 Jul 2021 15:47:10 +0000
Received: by outflank-mailman (input) for mailman id 152495;
 Wed, 07 Jul 2021 15:47:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lV-0002ed-58
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:09 +0000
Received: from mail-pg1-x52c.google.com (unknown [2607:f8b0:4864:20::52c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3179204f-2683-4a13-a32d-f4f409af832b;
 Wed, 07 Jul 2021 15:46:50 +0000 (UTC)
Received: by mail-pg1-x52c.google.com with SMTP id u14so2645814pga.11
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:50 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.48
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:49 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3179204f-2683-4a13-a32d-f4f409af832b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=+XJfA3AqCHkXuREWq5JYX1SJ1GS8dmwfVs7cs/uDyzo=;
        b=lJrhgA1XTGfrv91uZ+jA8dtUDhjHzVehhtyPYHx4wY0tTXW2S4H7JfDXfyBeh2nD2o
         9mVqg3wXPbSUSV6fPlu3C/AZKJh4dS9KD9xwQPpzyrcN3Xu13jLVp8aQSrrWIFKNZQeD
         4G5G+wOLbTGP+A36EMXtcYoEySmW1Yi9WUlsc0j8F0qDh74W3Rp/ZaJhaGIxt/xKePha
         pD4wQ6tbM0JeW/zDuyKLpBxE/Rby1/lAn8KOSufgT/PSTFCbfQTpKjOK8zSVUOuIvlix
         z8rSVyoVFgMq0pQ1W5PcjZjPWnGlDLdW8cgZhFWyTykNUw0TChYbLtpnEaROSGBsJoHX
         5X9A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=+XJfA3AqCHkXuREWq5JYX1SJ1GS8dmwfVs7cs/uDyzo=;
        b=Ue0YpNP7dII2EBtxFsLb1t4oYC/mgVduKtEgSpv5BZmgcNKy+M/uEHVtTegSsRAa+M
         AiyCjO4jRxSJYH7koqXDH0crk8miehvBCgc/xnHZ/euVZrRPwSZUaleSiQUTV4dwUdz7
         Y9iLfTriy1RkykzmRdYIC76Pmv1D1od1ic/277x5ElnOcPY9IkTpVW5855ONVdUn+mlM
         Dci7jS2FPxXuzPmQnvpxzorZyGvqL/Dfy327CdDdBB2naNDNbiaW4OQ1JrfeseCRw+CH
         wkCEsG3VIH+ELgDP7toZavDqOGn7kXR5ZUWSaX39Nk4L4JGL+ysw05Y8DQDoJ9h8YRNi
         cR9w==
X-Gm-Message-State: AOAM531MiiZxyEthpZj5MuKyNd5LLHgM/g0vrgAgIJVi89BRf1+5xF1V
	NDNxRDv/HAzXCS9fQAFYsKU=
X-Google-Smtp-Source: ABdhPJxTu4cFz1SK0NY8gSx4hi5ea6vbpE+9icHBySCQX8uZ+4a9XgaS7eR3olRpzqi9WXosELCn4g==
X-Received: by 2002:a63:807:: with SMTP id 7mr15130001pgi.122.1625672809994;
        Wed, 07 Jul 2021 08:46:49 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 04/13] HV: Mark vmbus ring buffer visible to host in Isolation VM
Date: Wed,  7 Jul 2021 11:46:18 -0400
Message-Id: <20210707154629.3977369-5-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Mark vmbus ring buffer visible with set_memory_decrypted() when
establish gpadl handle.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/channel.c   | 38 ++++++++++++++++++++++++++++++++++++--
 include/linux/hyperv.h | 10 ++++++++++
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index f3761c73b074..01048bb07082 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -17,6 +17,7 @@
 #include <linux/hyperv.h>
 #include <linux/uio.h>
 #include <linux/interrupt.h>
+#include <linux/set_memory.h>
 #include <asm/page.h>
 #include <asm/mshyperv.h>
 
@@ -465,7 +466,7 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	struct list_head *curr;
 	u32 next_gpadl_handle;
 	unsigned long flags;
-	int ret = 0;
+	int ret = 0, index;
 
 	next_gpadl_handle =
 		(atomic_inc_return(&vmbus_connection.next_gpadl_handle) - 1);
@@ -474,6 +475,13 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	if (ret)
 		return ret;
 
+	ret = set_memory_decrypted((unsigned long)kbuffer,
+				   HVPFN_UP(size));
+	if (ret) {
+		pr_warn("Failed to set host visibility.\n");
+		return ret;
+	}
+
 	init_completion(&msginfo->waitevent);
 	msginfo->waiting_channel = channel;
 
@@ -539,6 +547,15 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	/* At this point, we received the gpadl created msg */
 	*gpadl_handle = gpadlmsg->gpadl;
 
+	if (type == HV_GPADL_BUFFER)
+		index = 0;
+	else
+		index = channel->gpadl_range[1].gpadlhandle ? 2 : 1;
+
+	channel->gpadl_range[index].size = size;
+	channel->gpadl_range[index].buffer = kbuffer;
+	channel->gpadl_range[index].gpadlhandle = *gpadl_handle;
+
 cleanup:
 	spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
 	list_del(&msginfo->msglistentry);
@@ -549,6 +566,11 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	}
 
 	kfree(msginfo);
+
+	if (ret)
+		set_memory_encrypted((unsigned long)kbuffer,
+				     HVPFN_UP(size));
+
 	return ret;
 }
 
@@ -811,7 +833,7 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
 	struct vmbus_channel_gpadl_teardown *msg;
 	struct vmbus_channel_msginfo *info;
 	unsigned long flags;
-	int ret;
+	int ret, i;
 
 	info = kzalloc(sizeof(*info) +
 		       sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL);
@@ -859,6 +881,18 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
 	spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
 
 	kfree(info);
+
+	/* Find gpadl buffer virtual address and size. */
+	for (i = 0; i < VMBUS_GPADL_RANGE_COUNT; i++)
+		if (channel->gpadl_range[i].gpadlhandle == gpadl_handle)
+			break;
+
+	if (set_memory_encrypted((unsigned long)channel->gpadl_range[i].buffer,
+			HVPFN_UP(channel->gpadl_range[i].size)))
+		pr_warn("Fail to set mem host visibility.\n");
+
+	channel->gpadl_range[i].gpadlhandle = 0;
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(vmbus_teardown_gpadl);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 2e859d2f9609..06eccaba10c5 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -809,6 +809,14 @@ struct vmbus_device {
 
 #define VMBUS_DEFAULT_MAX_PKT_SIZE 4096
 
+struct vmbus_gpadl_range {
+	u32 gpadlhandle;
+	u32 size;
+	void *buffer;
+};
+
+#define VMBUS_GPADL_RANGE_COUNT		3
+
 struct vmbus_channel {
 	struct list_head listentry;
 
@@ -829,6 +837,8 @@ struct vmbus_channel {
 	struct completion rescind_event;
 
 	u32 ringbuffer_gpadlhandle;
+	/* GPADL_RING and Send/Receive GPADL_BUFFER. */
+	struct vmbus_gpadl_range gpadl_range[VMBUS_GPADL_RANGE_COUNT];
 
 	/* Allocated memory for ring buffer */
 	struct page *ringbuffer_page;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:47:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:47:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152497.281762 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lb-0005ED-LO; Wed, 07 Jul 2021 15:47:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152497.281762; Wed, 07 Jul 2021 15:47:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lb-0005Dx-Hf; Wed, 07 Jul 2021 15:47:15 +0000
Received: by outflank-mailman (input) for mailman id 152497;
 Wed, 07 Jul 2021 15:47:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19la-0002ed-5Q
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:14 +0000
Received: from mail-pf1-x42a.google.com (unknown [2607:f8b0:4864:20::42a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ec27e03c-a224-4bcc-842b-d09f70cf2ac3;
 Wed, 07 Jul 2021 15:46:53 +0000 (UTC)
Received: by mail-pf1-x42a.google.com with SMTP id 17so2552682pfz.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:53 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.51
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:52 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec27e03c-a224-4bcc-842b-d09f70cf2ac3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=Yf6ZTtN7PeYt6X8aFjGtHsBACJgt9SiJhwxT0+Mfzbw=;
        b=sifWWUzXmixvnGdsQykdK2Wy6G+ZMy9MY6kv6S7iets5sYOfuSTxai3Y++EFR9zQL1
         6N2QQZHUhXBcXABah5k6DsIZzbwYym3TPlwmbwhwCPJk/3LVH5IeQAIeJlKVFbEFhg8R
         CUZlBsj1jbcK/UAIsHAPwaTk/Zdn0J/k87BLgyXQYIphH8+IBOQ7Y30r2Hdp3s9bPTS3
         YEwlNsQXEo7trKuzcvB1DrSMIGkZu/rJsd2K1t0spLWK9Ysx/Nhe5lfuP3g/3TmHp4sa
         F+7WngQNJM5y8InhFNVWvrTb7DBrvhzuJusVsn7iKACWSfBjoD8B/fJyOdcyWr49GIS+
         tX0w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=Yf6ZTtN7PeYt6X8aFjGtHsBACJgt9SiJhwxT0+Mfzbw=;
        b=IE+CWQmKPxzMZuJFzasqSSyHmH38GWqcwski5QVhIyWxWm0DOFVLXVdgFeqEzZjn1o
         SSld5KuCr4yhagWSImcokb7Y71q6WyK15r5YDBVwvvNJtXIdDVygNEnzynmyqWqrIEzu
         Yl0dw0UQ6WRhuFfKt5uO7mWWJqA9bIuaefc7q4Aipdesn29VfFxDztzUGnEXKcdEB+oD
         fZlW1Gzqb9DsyG5qqIhmb4DA+rDsJZ+GRDXzvUaCQHIebFAW6rL7UHOYWZyH2Y5sd0Yp
         v8xjhhhi7kAQi0WffKH22S4FWWyEbqqt82LugSm22oTmK7I5Lafp6PSGvgxyEyYTdWs0
         WLzA==
X-Gm-Message-State: AOAM533rpcxUazB0IZ3wZlWHaynOb5ub65a3tib1dCm1m+72046ktTzV
	kdCSTHlrSxB5uChIrsufirV5hGVMO4oRsjRu
X-Google-Smtp-Source: ABdhPJxPmY8rrNBIgMOufu5t49wD5FKe56ShTc3mMOWTqCdj4DWoMBZU8fK92CgFTTjFWXKCyNp4Gg==
X-Received: by 2002:a63:1841:: with SMTP id 1mr26554315pgy.377.1625672812665;
        Wed, 07 Jul 2021 08:46:52 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 05/13] HV: Add Write/Read MSR registers via ghcb page
Date: Wed,  7 Jul 2021 11:46:19 -0400
Message-Id: <20210707154629.3977369-6-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides GHCB protocol to write Synthetic Interrupt
Controller MSR registers in Isolation VM with AMD SEV SNP
and these registers are emulated by hypervisor directly.
Hyper-V requires to write SINTx MSR registers twice. First
writes MSR via GHCB page to communicate with hypervisor
and then writes wrmsr instruction to talk with paravisor
which runs in VMPL0. Guest OS ID MSR also needs to be set
via GHCB.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/hv_init.c       |  25 +------
 arch/x86/hyperv/ivm.c           | 115 ++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h |  78 +++++++++++++++++++-
 arch/x86/include/asm/sev-es.h   |   4 ++
 arch/x86/kernel/cpu/mshyperv.c  |   3 +
 arch/x86/kernel/sev-es-shared.c |  21 ++++--
 drivers/hv/hv.c                 | 121 ++++++++++++++++++++++----------
 include/asm-generic/mshyperv.h  |  12 +++-
 8 files changed, 308 insertions(+), 71 deletions(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index e058f72eeee5..97d1c774cfce 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -445,7 +445,7 @@ void __init hyperv_init(void)
 		goto clean_guest_os_id;
 
 	if (hv_isolation_type_snp()) {
-		ms_hyperv.ghcb_base = alloc_percpu(void *);
+		ms_hyperv.ghcb_base = alloc_percpu(union hv_ghcb __percpu *);
 		if (!ms_hyperv.ghcb_base)
 			goto clean_guest_os_id;
 
@@ -539,6 +539,7 @@ void hyperv_cleanup(void)
 
 	/* Reset our OS id */
 	wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
+	hv_ghcb_msr_write(HV_X64_MSR_GUEST_OS_ID, 0);
 
 	/*
 	 * Reset hypercall page reference before reset the page,
@@ -620,28 +621,6 @@ bool hv_is_hibernation_supported(void)
 }
 EXPORT_SYMBOL_GPL(hv_is_hibernation_supported);
 
-enum hv_isolation_type hv_get_isolation_type(void)
-{
-	if (!(ms_hyperv.priv_high & HV_ISOLATION))
-		return HV_ISOLATION_TYPE_NONE;
-	return FIELD_GET(HV_ISOLATION_TYPE, ms_hyperv.isolation_config_b);
-}
-EXPORT_SYMBOL_GPL(hv_get_isolation_type);
-
-bool hv_is_isolation_supported(void)
-{
-	return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
-}
-EXPORT_SYMBOL_GPL(hv_is_isolation_supported);
-
-DEFINE_STATIC_KEY_FALSE(isolation_type_snp);
-
-bool hv_isolation_type_snp(void)
-{
-	return static_branch_unlikely(&isolation_type_snp);
-}
-EXPORT_SYMBOL_GPL(hv_isolation_type_snp);
-
 /* Bit mask of the extended capability to query: see HV_EXT_CAPABILITY_xxx */
 bool hv_query_ext_cap(u64 cap_query)
 {
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 24a58795abd8..c7b54631ca0d 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -6,6 +6,8 @@
  *  Tianyu Lan <Tianyu.Lan@microsoft.com>
  */
 
+#include <linux/types.h>
+#include <linux/bitfield.h>
 #include <linux/hyperv.h>
 #include <linux/types.h>
 #include <linux/bitfield.h>
@@ -13,6 +15,119 @@
 #include <asm/io.h>
 #include <asm/mshyperv.h>
 
+void hv_ghcb_msr_write(u64 msr, u64 value)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+
+	ghcb_set_rcx(&hv_ghcb->ghcb, msr);
+	ghcb_set_rax(&hv_ghcb->ghcb, lower_32_bits(value));
+	ghcb_set_rdx(&hv_ghcb->ghcb, value >> 32);
+
+	if (sev_es_ghcb_hv_call(&hv_ghcb->ghcb, NULL, SVM_EXIT_MSR, 1, 0))
+		pr_warn("Fail to write msr via ghcb %llx.\n", msr);
+
+	local_irq_restore(flags);
+}
+
+void hv_ghcb_msr_read(u64 msr, u64 *value)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+
+	ghcb_set_rcx(&hv_ghcb->ghcb, msr);
+	if (sev_es_ghcb_hv_call(&hv_ghcb->ghcb, NULL, SVM_EXIT_MSR, 0, 0))
+		pr_warn("Fail to read msr via ghcb %llx.\n", msr);
+	else
+		*value = (u64)lower_32_bits(hv_ghcb->ghcb.save.rax)
+			| ((u64)lower_32_bits(hv_ghcb->ghcb.save.rdx) << 32);
+	local_irq_restore(flags);
+}
+
+void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value)
+{
+	hv_ghcb_msr_read(msr, value);
+}
+EXPORT_SYMBOL_GPL(hv_sint_rdmsrl_ghcb);
+
+void hv_sint_wrmsrl_ghcb(u64 msr, u64 value)
+{
+	hv_ghcb_msr_write(msr, value);
+
+	/* Write proxy bit vua wrmsrl instruction. */
+	if (msr >= HV_X64_MSR_SINT0 && msr <= HV_X64_MSR_SINT15)
+		wrmsrl(msr, value | 1 << 20);
+}
+EXPORT_SYMBOL_GPL(hv_sint_wrmsrl_ghcb);
+
+void hv_signal_eom_ghcb(void)
+{
+	hv_sint_wrmsrl_ghcb(HV_X64_MSR_EOM, 0);
+}
+EXPORT_SYMBOL_GPL(hv_signal_eom_ghcb);
+
+enum hv_isolation_type hv_get_isolation_type(void)
+{
+	if (!(ms_hyperv.priv_high & HV_ISOLATION))
+		return HV_ISOLATION_TYPE_NONE;
+	return FIELD_GET(HV_ISOLATION_TYPE, ms_hyperv.isolation_config_b);
+}
+EXPORT_SYMBOL_GPL(hv_get_isolation_type);
+
+/*
+ * hv_is_isolation_supported - Check system runs in the Hyper-V
+ * isolation VM.
+ */
+bool hv_is_isolation_supported(void)
+{
+	return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
+}
+EXPORT_SYMBOL_GPL(hv_is_isolation_supported);
+
+DEFINE_STATIC_KEY_FALSE(isolation_type_snp);
+
+/*
+ * hv_isolation_type_snp - Check system runs in the AMD SEV-SNP based
+ * isolation VM.
+ */
+bool hv_isolation_type_snp(void)
+{
+	return static_branch_unlikely(&isolation_type_snp);
+}
+EXPORT_SYMBOL_GPL(hv_isolation_type_snp);
+
 /*
  * hv_mark_gpa_visibility - Set pages visible to host via hvcall.
  *
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 2172493dc881..f9cc3753040a 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -30,6 +30,63 @@ static inline u64 hv_get_register(unsigned int reg)
 	return value;
 }
 
+#define hv_get_sint_reg(val, reg) {		\
+	if (hv_isolation_type_snp())		\
+		hv_get_##reg##_ghcb(&val);	\
+	else					\
+		rdmsrl(HV_X64_MSR_##reg, val);	\
+	}
+
+#define hv_set_sint_reg(val, reg) {		\
+	if (hv_isolation_type_snp())		\
+		hv_set_##reg##_ghcb(val);	\
+	else					\
+		wrmsrl(HV_X64_MSR_##reg, val);	\
+	}
+
+
+#define hv_get_simp(val) hv_get_sint_reg(val, SIMP)
+#define hv_get_siefp(val) hv_get_sint_reg(val, SIEFP)
+
+#define hv_set_simp(val) hv_set_sint_reg(val, SIMP)
+#define hv_set_siefp(val) hv_set_sint_reg(val, SIEFP)
+
+#define hv_get_synic_state(val) {			\
+	if (hv_isolation_type_snp())			\
+		hv_get_synic_state_ghcb(&val);		\
+	else						\
+		rdmsrl(HV_X64_MSR_SCONTROL, val);	\
+	}
+#define hv_set_synic_state(val) {			\
+	if (hv_isolation_type_snp())			\
+		hv_set_synic_state_ghcb(val);		\
+	else						\
+		wrmsrl(HV_X64_MSR_SCONTROL, val);	\
+	}
+
+#define hv_get_vp_index(index) rdmsrl(HV_X64_MSR_VP_INDEX, index)
+
+#define hv_signal_eom() {			 \
+	if (hv_isolation_type_snp() &&		 \
+	    old_msg_type != HVMSG_TIMER_EXPIRED) \
+		hv_signal_eom_ghcb();		 \
+	else					 \
+		wrmsrl(HV_X64_MSR_EOM, 0);	 \
+	}
+
+#define hv_get_synint_state(int_num, val) {		\
+	if (hv_isolation_type_snp())			\
+		hv_get_synint_state_ghcb(int_num, &val);\
+	else						\
+		rdmsrl(HV_X64_MSR_SINT0 + int_num, val);\
+	}
+#define hv_set_synint_state(int_num, val) {		\
+	if (hv_isolation_type_snp())			\
+		hv_set_synint_state_ghcb(int_num, val);	\
+	else						\
+		wrmsrl(HV_X64_MSR_SINT0 + int_num, val);\
+	}
+
 #define hv_get_raw_timer() rdtsc_ordered()
 
 void hyperv_vector_handler(struct pt_regs *regs);
@@ -196,6 +253,25 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
 int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
 int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
+void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
+void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
+void hv_signal_eom_ghcb(void);
+void hv_ghcb_msr_write(u64 msr, u64 value);
+void hv_ghcb_msr_read(u64 msr, u64 *value);
+
+#define hv_get_synint_state_ghcb(int_num, val)			\
+	hv_sint_rdmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
+#define hv_set_synint_state_ghcb(int_num, val) \
+	hv_sint_wrmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
+
+#define hv_get_SIMP_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SIMP, val)
+#define hv_set_SIMP_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SIMP, val)
+
+#define hv_get_SIEFP_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SIEFP, val)
+#define hv_set_SIEFP_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SIEFP, val)
+
+#define hv_get_synic_state_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SCONTROL, val)
+#define hv_set_synic_state_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SCONTROL, val)
 #else /* CONFIG_HYPERV */
 static inline void hyperv_init(void) {}
 static inline void hyperv_setup_mmu_ops(void) {}
@@ -212,9 +288,9 @@ static inline int hyperv_flush_guest_mapping_range(u64 as,
 {
 	return -1;
 }
+static inline void hv_signal_eom_ghcb(void) { };
 #endif /* CONFIG_HYPERV */
 
-
 #include <asm-generic/mshyperv.h>
 
 #endif
diff --git a/arch/x86/include/asm/sev-es.h b/arch/x86/include/asm/sev-es.h
index cf1d957c7091..482a4bb92c48 100644
--- a/arch/x86/include/asm/sev-es.h
+++ b/arch/x86/include/asm/sev-es.h
@@ -103,6 +103,10 @@ static __always_inline void sev_es_nmi_complete(void)
 		__sev_es_nmi_complete();
 }
 extern int __init sev_es_efi_map_ghcbs(pgd_t *pgd);
+enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
+				   struct es_em_ctxt *ctxt,
+				   u64 exit_code, u64 exit_info_1,
+				   u64 exit_info_2);
 #else
 static inline void sev_es_ist_enter(struct pt_regs *regs) { }
 static inline void sev_es_ist_exit(void) { }
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 8aed689db621..d9ac13230950 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -339,6 +339,9 @@ static void __init ms_hyperv_init_platform(void)
 
 		pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n",
 			ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b);
+
+		if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP)
+			static_branch_enable(&isolation_type_snp);
 	}
 
 	if (ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED) {
diff --git a/arch/x86/kernel/sev-es-shared.c b/arch/x86/kernel/sev-es-shared.c
index 0aa9f13efd57..b7da08c97d2c 100644
--- a/arch/x86/kernel/sev-es-shared.c
+++ b/arch/x86/kernel/sev-es-shared.c
@@ -93,10 +93,10 @@ static void vc_finish_insn(struct es_em_ctxt *ctxt)
 	ctxt->regs->ip += ctxt->insn.length;
 }
 
-static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
-					  struct es_em_ctxt *ctxt,
-					  u64 exit_code, u64 exit_info_1,
-					  u64 exit_info_2)
+enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
+				   struct es_em_ctxt *ctxt,
+				   u64 exit_code, u64 exit_info_1,
+				   u64 exit_info_2)
 {
 	enum es_result ret;
 
@@ -108,7 +108,16 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 	ghcb_set_sw_exit_info_1(ghcb, exit_info_1);
 	ghcb_set_sw_exit_info_2(ghcb, exit_info_2);
 
-	sev_es_wr_ghcb_msr(__pa(ghcb));
+	/*
+	 * Hyper-V runs paravisor with SEV. Ghcb page is allocated by
+	 * paravisor and not needs to be updated in the Linux guest.
+	 * Otherwise, the ghcb page's PA reported by paravisor is above
+	 * VTOM. Hyper-V use this function with NULL for ctxt point and
+	 * skip setting ghcb page in such case.
+	 */
+	if (ctxt)
+		sev_es_wr_ghcb_msr(__pa(ghcb));
+
 	VMGEXIT();
 
 	if ((ghcb->save.sw_exit_info_1 & 0xffffffff) == 1) {
@@ -119,7 +128,7 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 		v = info & SVM_EVTINJ_VEC_MASK;
 
 		/* Check if exception information from hypervisor is sane. */
-		if ((info & SVM_EVTINJ_VALID) &&
+		if (ctxt && (info & SVM_EVTINJ_VALID) &&
 		    ((v == X86_TRAP_GP) || (v == X86_TRAP_UD)) &&
 		    ((info & SVM_EVTINJ_TYPE_MASK) == SVM_EVTINJ_TYPE_EXEPT)) {
 			ctxt->fi.vector = v;
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index e83507f49676..59f7173c4d9f 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -8,6 +8,7 @@
  */
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
@@ -136,17 +137,24 @@ int hv_synic_alloc(void)
 		tasklet_init(&hv_cpu->msg_dpc,
 			     vmbus_on_msg_dpc, (unsigned long) hv_cpu);
 
-		hv_cpu->synic_message_page =
-			(void *)get_zeroed_page(GFP_ATOMIC);
-		if (hv_cpu->synic_message_page == NULL) {
-			pr_err("Unable to allocate SYNIC message page\n");
-			goto err;
-		}
+		/*
+		 * Synic message and event pages are allocated by paravisor.
+		 * Skip these pages allocation here.
+		 */
+		if (!hv_isolation_type_snp()) {
+			hv_cpu->synic_message_page =
+				(void *)get_zeroed_page(GFP_ATOMIC);
+			if (hv_cpu->synic_message_page == NULL) {
+				pr_err("Unable to allocate SYNIC message page\n");
+				goto err;
+			}
 
-		hv_cpu->synic_event_page = (void *)get_zeroed_page(GFP_ATOMIC);
-		if (hv_cpu->synic_event_page == NULL) {
-			pr_err("Unable to allocate SYNIC event page\n");
-			goto err;
+			hv_cpu->synic_event_page =
+				(void *)get_zeroed_page(GFP_ATOMIC);
+			if (hv_cpu->synic_event_page == NULL) {
+				pr_err("Unable to allocate SYNIC event page\n");
+				goto err;
+			}
 		}
 
 		hv_cpu->post_msg_page = (void *)get_zeroed_page(GFP_ATOMIC);
@@ -173,10 +181,17 @@ void hv_synic_free(void)
 	for_each_present_cpu(cpu) {
 		struct hv_per_cpu_context *hv_cpu
 			= per_cpu_ptr(hv_context.cpu_context, cpu);
+		free_page((unsigned long)hv_cpu->post_msg_page);
+
+		/*
+		 * Synic message and event pages are allocated by paravisor.
+		 * Skip free these pages here.
+		 */
+		if (hv_isolation_type_snp())
+			continue;
 
 		free_page((unsigned long)hv_cpu->synic_event_page);
 		free_page((unsigned long)hv_cpu->synic_message_page);
-		free_page((unsigned long)hv_cpu->post_msg_page);
 	}
 
 	kfree(hv_context.hv_numa_map);
@@ -199,26 +214,43 @@ void hv_synic_enable_regs(unsigned int cpu)
 	union hv_synic_scontrol sctrl;
 
 	/* Setup the Synic's message page */
-	simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP);
+	hv_get_simp(simp.as_uint64);
 	simp.simp_enabled = 1;
-	simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page)
-		>> HV_HYP_PAGE_SHIFT;
 
-	hv_set_register(HV_REGISTER_SIMP, simp.as_uint64);
+	if (hv_isolation_type_snp()) {
+		hv_cpu->synic_message_page
+			= memremap(simp.base_simp_gpa << HV_HYP_PAGE_SHIFT,
+				   HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+		if (!hv_cpu->synic_message_page)
+			pr_err("Fail to map syinc message page.\n");
+	} else {
+		simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page)
+			>> HV_HYP_PAGE_SHIFT;
+	}
+
+	hv_set_simp(simp.as_uint64);
 
 	/* Setup the Synic's event page */
-	siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP);
+	hv_get_siefp(siefp.as_uint64);
 	siefp.siefp_enabled = 1;
-	siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page)
-		>> HV_HYP_PAGE_SHIFT;
 
-	hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64);
+	if (hv_isolation_type_snp()) {
+		hv_cpu->synic_event_page =
+			memremap(siefp.base_siefp_gpa << HV_HYP_PAGE_SHIFT,
+				 HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+
+		if (!hv_cpu->synic_event_page)
+			pr_err("Fail to map syinc event page.\n");
+	} else {
+		siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page)
+			>> HV_HYP_PAGE_SHIFT;
+	}
+	hv_set_siefp(siefp.as_uint64);
 
 	/* Setup the shared SINT. */
 	if (vmbus_irq != -1)
 		enable_percpu_irq(vmbus_irq, 0);
-	shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 +
-					VMBUS_MESSAGE_SINT);
+	hv_get_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
 	shared_sint.vector = vmbus_interrupt;
 	shared_sint.masked = false;
@@ -233,14 +265,12 @@ void hv_synic_enable_regs(unsigned int cpu)
 #else
 	shared_sint.auto_eoi = 0;
 #endif
-	hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT,
-				shared_sint.as_uint64);
+	hv_set_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
 	/* Enable the global synic bit */
-	sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL);
+	hv_get_synic_state(sctrl.as_uint64);
 	sctrl.enable = 1;
-
-	hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64);
+	hv_set_synic_state(sctrl.as_uint64);
 }
 
 int hv_synic_init(unsigned int cpu)
@@ -257,37 +287,50 @@ int hv_synic_init(unsigned int cpu)
  */
 void hv_synic_disable_regs(unsigned int cpu)
 {
+	struct hv_per_cpu_context *hv_cpu
+		= per_cpu_ptr(hv_context.cpu_context, cpu);
 	union hv_synic_sint shared_sint;
 	union hv_synic_simp simp;
 	union hv_synic_siefp siefp;
 	union hv_synic_scontrol sctrl;
 
-	shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 +
-					VMBUS_MESSAGE_SINT);
-
+	hv_get_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 	shared_sint.masked = 1;
+	hv_set_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
+
 
 	/* Need to correctly cleanup in the case of SMP!!! */
 	/* Disable the interrupt */
-	hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT,
-				shared_sint.as_uint64);
+	hv_get_simp(simp.as_uint64);
 
-	simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP);
+	/*
+	 * In Isolation VM, sim and sief pages are allocated by
+	 * paravisor. These pages also will be used by kdump
+	 * kernel. So just reset enable bit here and keep page
+	 * addresses.
+	 */
 	simp.simp_enabled = 0;
-	simp.base_simp_gpa = 0;
+	if (hv_isolation_type_snp())
+		memunmap(hv_cpu->synic_message_page);
+	else
+		simp.base_simp_gpa = 0;
 
-	hv_set_register(HV_REGISTER_SIMP, simp.as_uint64);
+	hv_set_simp(simp.as_uint64);
 
-	siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP);
+	hv_get_siefp(siefp.as_uint64);
 	siefp.siefp_enabled = 0;
-	siefp.base_siefp_gpa = 0;
 
-	hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64);
+	if (hv_isolation_type_snp())
+		memunmap(hv_cpu->synic_event_page);
+	else
+		siefp.base_siefp_gpa = 0;
+
+	hv_set_siefp(siefp.as_uint64);
 
 	/* Disable the global synic bit */
-	sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL);
+	hv_get_synic_state(sctrl.as_uint64);
 	sctrl.enable = 0;
-	hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64);
+	hv_set_synic_state(sctrl.as_uint64);
 
 	if (vmbus_irq != -1)
 		disable_percpu_irq(vmbus_irq);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index 2914e27b0429..e6d6886faed1 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -22,9 +22,16 @@
 #include <linux/atomic.h>
 #include <linux/bitops.h>
 #include <linux/cpumask.h>
+#include <asm/svm.h>
+#include <asm/sev-es.h>
 #include <asm/ptrace.h>
+#include <asm/mshyperv.h>
 #include <asm/hyperv-tlfs.h>
 
+union hv_ghcb {
+	struct ghcb ghcb;
+} __packed __aligned(PAGE_SIZE);
+
 struct ms_hyperv_info {
 	u32 features;
 	u32 priv_high;
@@ -44,13 +51,14 @@ struct ms_hyperv_info {
 			u32 Reserved12 : 20;
 		};
 	};
-	void  __percpu **ghcb_base;
+	union hv_ghcb __percpu **ghcb_base;
 	u64 shared_gpa_boundary;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
 extern u64 hv_do_hypercall(u64 control, void *inputaddr, void *outputaddr);
 extern u64 hv_do_fast_hypercall8(u16 control, u64 input8);
+extern bool hv_isolation_type_snp(void);
 
 /* Helper functions that provide a consistent pattern for checking Hyper-V hypercall status. */
 static inline int hv_result(u64 status)
@@ -145,7 +153,7 @@ static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type)
 		 * possibly deliver another msg from the
 		 * hypervisor
 		 */
-		hv_set_register(HV_REGISTER_EOM, 0);
+		hv_signal_eom();
 	}
 }
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:47:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:47:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152499.281773 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lg-0005eY-12; Wed, 07 Jul 2021 15:47:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152499.281773; Wed, 07 Jul 2021 15:47:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19lf-0005eM-SD; Wed, 07 Jul 2021 15:47:19 +0000
Received: by outflank-mailman (input) for mailman id 152499;
 Wed, 07 Jul 2021 15:47:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lf-0002ed-5U
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:19 +0000
Received: from mail-pl1-x62d.google.com (unknown [2607:f8b0:4864:20::62d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ea1a7335-d03b-4b96-a550-7409c2ddb71f;
 Wed, 07 Jul 2021 15:46:56 +0000 (UTC)
Received: by mail-pl1-x62d.google.com with SMTP id p17so764633plf.12
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:56 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.54
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:55 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ea1a7335-d03b-4b96-a550-7409c2ddb71f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=XnnD+WKjmMaIcoxzXQeIqu3OOT9S8jIhhegPGmtXPps=;
        b=agixlmBytfRil/fkf4OgDDmdZCvfuSwnj5sy2vnE2pYjSr4fq49TUp4T0f/DBWL+R7
         dtp0xUVHFyRDbO2ZZHZG47mGHjJiVyYQesO2NN0JFKBXh2xwgv0l85XvXqUywSG8Fvr0
         1Ul+fpcelmkcjAQw+bszpcRSz+GI7SFKNDQMiNrze7nfUoRflIMbr8UPrWEDWdIiLHWT
         977bhPck25q/c2/QSy5qX/caMDzXJuO73RHyL0IAREsmggF+7GypT2XtMaRNeZvwgssJ
         Jb9R+KHghWzumV11pGybgCdu9V73FPISKwDj6Kc2id9ZDjTW1viAcgETkpNHjkay/0uH
         yUMg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=XnnD+WKjmMaIcoxzXQeIqu3OOT9S8jIhhegPGmtXPps=;
        b=dDnYE2WNJHzD0PM9mvHQkxIVhtlRjYvk2WDY6QLHF0piDiqIL90cFuWICJkul+BHJG
         5YbQTIJvDf7m4EYuf0qZXOfZpY1Z7nUyWY59n1Vmlq8CMCOtGzmXwiMx1JEy+8HuU7Tj
         7HBuCoABlbBBL9yrHmdEI2HjXZvQcskeVuHFDx98AZJ5eXOYb8rH6ATdCpjB81YfbKgI
         /YbkzPNiD+DGKlHNhcTsBA/qW378kraif9Q5JWghkqv+JX6MPDjf32hOZW4YFDRndxGf
         k4d7e710GkpS+C6YqOYDI3IiuJTPv92aNqtIdo8xd5T4ueupbbcmtK6F1VV+UuUBuvaG
         rS/g==
X-Gm-Message-State: AOAM532gx/L/Rei/bvm9IHENs+wiKRZcqQ3BF8iIWbkMDqGU6+WWN8zw
	7eHetpRKw6dAmHTsABGXeC8=
X-Google-Smtp-Source: ABdhPJwr1zQl10i7qLwixIOxPsOw0GmooMgWPeefwIHrZFrrW9J6CDnj4do29d88YBIZx41hhaEGeQ==
X-Received: by 2002:a17:902:ed82:b029:ef:48c8:128e with SMTP id e2-20020a170902ed82b02900ef48c8128emr21831521plj.72.1625672815405;
        Wed, 07 Jul 2021 08:46:55 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 06/13] HV: Add ghcb hvcall support for SNP VM
Date: Wed,  7 Jul 2021 11:46:20 -0400
Message-Id: <20210707154629.3977369-7-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides ghcb hvcall to handle VMBus
HVCALL_SIGNAL_EVENT and HVCALL_POST_MESSAGE
msg in SNP Isolation VM. Add such support.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/ivm.c           | 42 +++++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h |  1 +
 drivers/hv/connection.c         |  6 ++++-
 drivers/hv/hv.c                 |  8 ++++++-
 include/asm-generic/mshyperv.h  | 29 +++++++++++++++++++++++
 5 files changed, 84 insertions(+), 2 deletions(-)

diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index c7b54631ca0d..8a6f4e9e3d6c 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -15,6 +15,48 @@
 #include <asm/io.h>
 #include <asm/mshyperv.h>
 
+u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return -EFAULT;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return -EFAULT;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+	hv_ghcb->ghcb.protocol_version = 1;
+	hv_ghcb->ghcb.ghcb_usage = 1;
+
+	hv_ghcb->hypercall.outputgpa = (u64)output;
+	hv_ghcb->hypercall.hypercallinput.asuint64 = 0;
+	hv_ghcb->hypercall.hypercallinput.callcode = control;
+
+	if (input_size)
+		memcpy(hv_ghcb->hypercall.hypercalldata, input, input_size);
+
+	VMGEXIT();
+
+	hv_ghcb->ghcb.ghcb_usage = 0xffffffff;
+	memset(hv_ghcb->ghcb.save.valid_bitmap, 0,
+	       sizeof(hv_ghcb->ghcb.save.valid_bitmap));
+
+	local_irq_restore(flags);
+
+	return hv_ghcb->hypercall.hypercalloutput.callstatus;
+}
+EXPORT_SYMBOL_GPL(hv_ghcb_hypercall);
+
 void hv_ghcb_msr_write(u64 msr, u64 value)
 {
 	union hv_ghcb *hv_ghcb;
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index f9cc3753040a..fe03e3e833ac 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -258,6 +258,7 @@ void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
 void hv_signal_eom_ghcb(void);
 void hv_ghcb_msr_write(u64 msr, u64 value);
 void hv_ghcb_msr_read(u64 msr, u64 *value);
+u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size);
 
 #define hv_get_synint_state_ghcb(int_num, val)			\
 	hv_sint_rdmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 311cd005b3be..186fd4c8acd4 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -445,6 +445,10 @@ void vmbus_set_event(struct vmbus_channel *channel)
 
 	++channel->sig_events;
 
-	hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event);
+	if (hv_isolation_type_snp())
+		hv_ghcb_hypercall(HVCALL_SIGNAL_EVENT, &channel->sig_event,
+				NULL, sizeof(u64));
+	else
+		hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event);
 }
 EXPORT_SYMBOL_GPL(vmbus_set_event);
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 59f7173c4d9f..e5c9fc467893 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -98,7 +98,13 @@ int hv_post_message(union hv_connection_id connection_id,
 	aligned_msg->payload_size = payload_size;
 	memcpy((void *)aligned_msg->payload, payload, payload_size);
 
-	status = hv_do_hypercall(HVCALL_POST_MESSAGE, aligned_msg, NULL);
+	if (hv_isolation_type_snp())
+		status = hv_ghcb_hypercall(HVCALL_POST_MESSAGE,
+				(void *)aligned_msg, NULL,
+				sizeof(struct hv_input_post_message));
+	else
+		status = hv_do_hypercall(HVCALL_POST_MESSAGE,
+				aligned_msg, NULL);
 
 	/* Preemption must remain disabled until after the hypercall
 	 * so some other thread can't get scheduled onto this cpu and
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index e6d6886faed1..8f6f283fb5b5 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -30,6 +30,35 @@
 
 union hv_ghcb {
 	struct ghcb ghcb;
+	struct {
+		u64 hypercalldata[509];
+		u64 outputgpa;
+		union {
+			union {
+				struct {
+					u32 callcode        : 16;
+					u32 isfast          : 1;
+					u32 reserved1       : 14;
+					u32 isnested        : 1;
+					u32 countofelements : 12;
+					u32 reserved2       : 4;
+					u32 repstartindex   : 12;
+					u32 reserved3       : 4;
+				};
+				u64 asuint64;
+			} hypercallinput;
+			union {
+				struct {
+					u16 callstatus;
+					u16 reserved1;
+					u32 elementsprocessed : 12;
+					u32 reserved2         : 20;
+				};
+				u64 asunit64;
+			} hypercalloutput;
+		};
+		u64 reserved2;
+	} hypercall;
 } __packed __aligned(PAGE_SIZE);
 
 struct ms_hyperv_info {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:47:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:47:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152502.281784 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ll-00069F-Fb; Wed, 07 Jul 2021 15:47:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152502.281784; Wed, 07 Jul 2021 15:47:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ll-000697-B6; Wed, 07 Jul 2021 15:47:25 +0000
Received: by outflank-mailman (input) for mailman id 152502;
 Wed, 07 Jul 2021 15:47:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lk-0002ed-5e
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:24 +0000
Received: from mail-pf1-x436.google.com (unknown [2607:f8b0:4864:20::436])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id affef5dc-2f85-4946-b791-bae7063d5beb;
 Wed, 07 Jul 2021 15:46:58 +0000 (UTC)
Received: by mail-pf1-x436.google.com with SMTP id j199so2543224pfd.7
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:46:58 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.46.57
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:46:57 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: affef5dc-2f85-4946-b791-bae7063d5beb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=DW09bNLqhYERQ+eFNE9hKu+s7sJ/vWcqsCTKXxunGqM=;
        b=pzPZ4UbUjcWFHUdSVhYVjk9YtvOICnXi9Nj7qM0jD7NcOmMUzwlYm+mq4sVKSXHo4s
         zwWoOJE8e1JyIkMkk3/mjZ1AiiVZ0IENGQNVf2MOGDQLBposH64f6hW3VT0Cq2PsVCbr
         tOMBrJ9MBTTtQMescRAbw8HnjXqdHg2GSt7Vi8nWw5jrMF0tRLBbJCu3V07Jgtd5wXA9
         uyw3Qhuaro5O/6Tkkc6mOCO+9IQ1PdZdh1X3OflWYtFDTM7eEh2Db1vHkZYha9dY0Rx3
         Cm1uV3hTpgrxDjAS27M3/n9PWHnqdTXISGW4NU3SE49KizVIaa4miaPta4Ng6xcTA8rq
         b3fg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=DW09bNLqhYERQ+eFNE9hKu+s7sJ/vWcqsCTKXxunGqM=;
        b=jE2+hbilae/a8l0vyUDm5IPjawYzIkIffG+SjLd/YBdIYCyzmr9caZNPOoLAPC3hOW
         qtfKq5gzDmgCP6aW9xSZzudaH8fU+kSUWQf2hXLggIatKJutZj9JY0bZ6h6+KwxedeRD
         dd7e/+GBIyyWcGXL+5xjROosao2oWFNAvd1BVC2oPvQbSliqG7swkMsgfakiZFmMmYRg
         Wm6w2Fx3KTDK5T0IvsPYxokxHS5EnuUeof24iLDlYa2EnQXHRTElgkzffeP8Lppoe9UM
         Xu5AtBbkWrC5xAsSSELcazpyVcsGO5EFo5yEIWZgVIv9n1qYFTOu353N8rtqDbwzih6x
         08Zw==
X-Gm-Message-State: AOAM533R1jKJ0N2+C3wlKc3UWy9ZOqYz1WYAJdpQ0nXrVL3JJrKNv3t4
	bgxp4gYCE5NkC4N28zDw95U=
X-Google-Smtp-Source: ABdhPJwKvS+dtvQGx81eyCbmtw1G8LgUyQrXwz4RZg4n8DLW529IghRF7a3TI1kMxl+iEubpWMtjRg==
X-Received: by 2002:aa7:8d86:0:b029:2ec:82d2:5805 with SMTP id i6-20020aa78d860000b02902ec82d25805mr26174427pfr.11.1625672818255;
        Wed, 07 Jul 2021 08:46:58 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 07/13] HV/Vmbus: Add SNP support for VMbus channel initiate message
Date: Wed,  7 Jul 2021 11:46:21 -0400
Message-Id: <20210707154629.3977369-8-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

The monitor pages in the CHANNELMSG_INITIATE_CONTACT msg are shared
with host in Isolation VM and so it's necessary to use hvcall to set
them visible to host. In Isolation VM with AMD SEV SNP, the access
address should be in the extra space which is above shared gpa
boundary. So remap these pages into the extra address(pa +
shared_gpa_boundary).

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/connection.c   | 65 +++++++++++++++++++++++++++++++++++++++
 drivers/hv/hyperv_vmbus.h |  1 +
 2 files changed, 66 insertions(+)

diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 186fd4c8acd4..a32bde143e4c 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -19,6 +19,7 @@
 #include <linux/vmalloc.h>
 #include <linux/hyperv.h>
 #include <linux/export.h>
+#include <linux/io.h>
 #include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
@@ -104,6 +105,12 @@ int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo, u32 version)
 
 	msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
 	msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
+
+	if (hv_is_isolation_supported()) {
+		msg->monitor_page1 += ms_hyperv.shared_gpa_boundary;
+		msg->monitor_page2 += ms_hyperv.shared_gpa_boundary;
+	}
+
 	msg->target_vcpu = hv_cpu_number_to_vp_number(VMBUS_CONNECT_CPU);
 
 	/*
@@ -148,6 +155,31 @@ int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo, u32 version)
 		return -ECONNREFUSED;
 	}
 
+	if (hv_is_isolation_supported()) {
+		vmbus_connection.monitor_pages_va[0]
+			= vmbus_connection.monitor_pages[0];
+		vmbus_connection.monitor_pages[0]
+			= memremap(msg->monitor_page1, HV_HYP_PAGE_SIZE,
+				   MEMREMAP_WB);
+		if (!vmbus_connection.monitor_pages[0])
+			return -ENOMEM;
+
+		vmbus_connection.monitor_pages_va[1]
+			= vmbus_connection.monitor_pages[1];
+		vmbus_connection.monitor_pages[1]
+			= memremap(msg->monitor_page2, HV_HYP_PAGE_SIZE,
+				   MEMREMAP_WB);
+		if (!vmbus_connection.monitor_pages[1]) {
+			memunmap(vmbus_connection.monitor_pages[0]);
+			return -ENOMEM;
+		}
+
+		memset(vmbus_connection.monitor_pages[0], 0x00,
+		       HV_HYP_PAGE_SIZE);
+		memset(vmbus_connection.monitor_pages[1], 0x00,
+		       HV_HYP_PAGE_SIZE);
+	}
+
 	return ret;
 }
 
@@ -159,6 +191,7 @@ int vmbus_connect(void)
 	struct vmbus_channel_msginfo *msginfo = NULL;
 	int i, ret = 0;
 	__u32 version;
+	u64 pfn[2];
 
 	/* Initialize the vmbus connection */
 	vmbus_connection.conn_state = CONNECTING;
@@ -216,6 +249,16 @@ int vmbus_connect(void)
 		goto cleanup;
 	}
 
+	if (hv_is_isolation_supported()) {
+		pfn[0] = virt_to_hvpfn(vmbus_connection.monitor_pages[0]);
+		pfn[1] = virt_to_hvpfn(vmbus_connection.monitor_pages[1]);
+		if (hv_mark_gpa_visibility(2, pfn,
+				VMBUS_PAGE_VISIBLE_READ_WRITE)) {
+			ret = -EFAULT;
+			goto cleanup;
+		}
+	}
+
 	msginfo = kzalloc(sizeof(*msginfo) +
 			  sizeof(struct vmbus_channel_initiate_contact),
 			  GFP_KERNEL);
@@ -282,6 +325,8 @@ int vmbus_connect(void)
 
 void vmbus_disconnect(void)
 {
+	u64 pfn[2];
+
 	/*
 	 * First send the unload request to the host.
 	 */
@@ -301,6 +346,26 @@ void vmbus_disconnect(void)
 		vmbus_connection.int_page = NULL;
 	}
 
+	if (hv_is_isolation_supported()) {
+		if (vmbus_connection.monitor_pages_va[0]) {
+			memunmap(vmbus_connection.monitor_pages[0]);
+			vmbus_connection.monitor_pages[0]
+				= vmbus_connection.monitor_pages_va[0];
+			vmbus_connection.monitor_pages_va[0] = NULL;
+		}
+
+		if (vmbus_connection.monitor_pages_va[1]) {
+			memunmap(vmbus_connection.monitor_pages[1]);
+			vmbus_connection.monitor_pages[1]
+				= vmbus_connection.monitor_pages_va[1];
+			vmbus_connection.monitor_pages_va[1] = NULL;
+		}
+
+		pfn[0] = virt_to_hvpfn(vmbus_connection.monitor_pages[0]);
+		pfn[1] = virt_to_hvpfn(vmbus_connection.monitor_pages[1]);
+		hv_mark_gpa_visibility(2, pfn, VMBUS_PAGE_NOT_VISIBLE);
+	}
+
 	hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[0]);
 	hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[1]);
 	vmbus_connection.monitor_pages[0] = NULL;
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 42f3d9d123a1..40bc0eff6665 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -240,6 +240,7 @@ struct vmbus_connection {
 	 * is child->parent notification
 	 */
 	struct hv_monitor_page *monitor_pages[2];
+	void *monitor_pages_va[2];
 	struct list_head chn_msg_list;
 	spinlock_t channelmsg_lock;
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:49:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:49:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152521.281795 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19nN-0007wl-QO; Wed, 07 Jul 2021 15:49:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152521.281795; Wed, 07 Jul 2021 15:49:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19nN-0007wd-NM; Wed, 07 Jul 2021 15:49:05 +0000
Received: by outflank-mailman (input) for mailman id 152521;
 Wed, 07 Jul 2021 15:49:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m19nL-0007wR-VK
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:49:03 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 01bb24f3-e7cb-4637-a39b-548c7836938b;
 Wed, 07 Jul 2021 15:49:03 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2050.outbound.protection.outlook.com [104.47.13.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-6-QICQW-XdOLiok0RZTmbULg-1;
 Wed, 07 Jul 2021 17:49:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5325.eurprd04.prod.outlook.com (2603:10a6:803:60::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Wed, 7 Jul
 2021 15:48:59 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:48:59 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0007.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Wed, 7 Jul 2021 15:48:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 01bb24f3-e7cb-4637-a39b-548c7836938b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625672942;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=+0Z9u/K7f3vtGeuW0Z3V4KYztYfbieEU3MfisQUwMFs=;
	b=LUFlnI6Z7E6Ocu5NZdQ77B+u/pZ22VbD2tzq1T8+jiepR953aUPThhclmNXU4w3xv9g+VE
	ds9dwpTz9WVmO1Pc2bE+joPMDINGZwbp1gWMnNBmf/g5Vob4+rfb5QDd3PxBCJLD31ucpy
	dWXl0ID2P1Uz45pKWnmIFHbk9IAtd/8=
X-MC-Unique: QICQW-XdOLiok0RZTmbULg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c7KfWnCDyEtfjZeBb67zrVUZnH65HcEfAkt+EAUuEXSRNrFY9C4cEM/sapMq4y35pevssT6/Of8a9BQuLtAA2zDysYnURKSPfufsADFOC9tPPspQiE8RLTh5OFWRqXhRtDBjx9XdWl3Oiv6A6nAEwCRlaIUQPMKtgVERFmghPips/unGYj1OXHeIrD5ky8zsEfhEBBUISDvgEy7001uZT23NtoUml+QCrDp/dwwtgt5/uwJE0nXz52Phcb/XwhQI02qWJFQilxEd3T+9MZ450lM/moEHjEWrPOYOmKQZ6PXEMJWAQKkLO3fM/kvzgBi7ukcwbT2U66yGU+iu+LUL3Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+0Z9u/K7f3vtGeuW0Z3V4KYztYfbieEU3MfisQUwMFs=;
 b=dCtDFibsJZEz0YdJOcyn2VLbvU94x2CMgMn8Ipy3qiFmmQMXtKiaZpv1RkVMJBsqxwzrWRNtGoD4K6ZxljOpV83lsBje9dmCRMSt6RdurlAr3cdtlj4Yowx6FlN0lgYUkmNNY4AfK82MJiXCwMFTAXzo8spz7/03BO3xNfJiMDCuMTHdeTXQO0F/xPEEuB7ORdfl3OOsuxPwdCP6WOUGKDKJHL3RMXkwsESiYuvLvzw/L02Si68AGiG/XP7rI9/bWy/TU10P/efI3JY2+6HaP16vSpEnWRl5n2fGCIBHUPRrnMUC3JYGSqv2CqRcaCI8YODInCQBy0l+3JhOTE/aNw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 17/31] build: convert binfile use to if_changed
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-18-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <dbb33a01-d54b-d4f3-caf3-5e5544d52095@suse.com>
Date: Wed, 7 Jul 2021 17:48:57 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-18-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR3P281CA0007.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1d::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d90d6eb4-5373-48e8-de4d-08d9415ebc34
X-MS-TrafficTypeDiagnostic: VI1PR04MB5325:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB53250510EA79A33D9A97D4E9B31A9@VI1PR04MB5325.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	FCro0GsZUFHUHvhPOb9wZFs4LRrp+2gLgoqDO/OO3YcYI4ifilPVHaFTinEhefD5+TjVScW1x5iI/YF6bmFZabqoQV2WTPeFYJgDa6kwu/tgHgStaKWwu9SsynU8Yi976YuHuL0YkAHun8jlFR2/mq+hxiOBF+KFURTSR/r7DoSVIeKz/xbm+Et/Z/M76yYaSGQIoC6od6nGdAcgU9GE+wfEyfBvR97MXG1m5Wd/8VVgQUBlEJ8etHSvIiVEXm/bJXHKFmPFfqWUk/zhYpqacOqDlxwfglWWuey0w0fnVyDDiJiP7rqAZty8pdktdh/GEk5pitAANZ3Ws3rx2pIfMjdWSG6+Uj73DExOXnPAqgQHAMeQbSSx4KNXxrZyDf/BzlzsFrKpYwy2I9o4ElNxkZRIf+j+ZblPBQixORvnB9gDX8BsNDtFPjZZnPdQknwtgnYFQhIzCsaPCy+5dCIMI/2uf1FHK51aDUZmzBKqfqXZw8pA6bb1EI5VqNASzVMLj1qQqP/q8c9agviusrvUvs4h9YXGIAqJxFb3Jo3BJPin3b7MKQqLRaStyMIIoPJHsBaGJHpeKH1mMIIMcd/N7MOXMiisXVnOQpUpVGNZAb6iL0FDk5UcZ3lvQua/nZmG6RZay1teUsF0Nm3Rr6Zvx2vSxJ/a9NyMmHtwJdr7IgoRwC+ViLhLTq8k40cHZ4Gw7+HPZ5xRKkOFgwQZPT8nnliQxR2f49d1NR72qDFSmI4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(346002)(366004)(396003)(136003)(376002)(26005)(2616005)(5660300002)(478600001)(6916009)(316002)(6486002)(31686004)(66946007)(66556008)(16576012)(8936002)(86362001)(31696002)(186003)(53546011)(66476007)(956004)(4744005)(36756003)(8676002)(2906002)(54906003)(38100700002)(4326008)(7416002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?a2svQU10K0tTSDhKcmprMXpsTXVNa3dHOXVTSnFRNE5wUTRTRitLUVQxS0hn?=
 =?utf-8?B?SU96Rnh1b25SYUlIR1IxUHRFU1N3bFZ0Wk1xK2RSM1NubFpsSUR4ak1pOVBw?=
 =?utf-8?B?V0ZWN2ZWbmswQWxVdmZWRC8xTC9oQUhoWXVEM1NnekhOVURxR3RUWHVKQlpF?=
 =?utf-8?B?NkNMd2FIbEFiY2JiOEFJdDVhSEZDYVo0RVNldHJ1cHcxalFLY1V5S2RvbGJo?=
 =?utf-8?B?bVFYQUNhbURlbTd3YmkvdCt2RnRtYXo2MHBTdU1TMXovYjYvM1RDa2VFL2Rw?=
 =?utf-8?B?ZEVLRjRMOGFaaWZacHljTjBZRU55dHpoS2s0MnNWS29tcTZYb3BpaEdhakVy?=
 =?utf-8?B?Qlp3MThScHU0ai85UEcvNTE2djI0YUNCN3hWeEE0VDdWakFiQ2JxQnp2WVNp?=
 =?utf-8?B?dWhNeCt1Y1VTc2Iza3prQ0NHTXZzWWJvSFJHazJaVXlkajVYYmZ4VmhnUW9K?=
 =?utf-8?B?TklUTC9sUUJvZTF0aU1aWGRQZWhXUDRaRmNQZ3g1V2lNeUZjeExNVmwzT0I1?=
 =?utf-8?B?WU9jUmN5WGxMUjdKWVd6NHgzWDBCRzZvYkxvV3QrWmY3TVZ4SDhsZGt6azJ3?=
 =?utf-8?B?UXRQU0VISHFGa0FGQ2J4VTFzN2VzVkd5Z3VCS2F1Z29FVHNmQWZWYms5SlZa?=
 =?utf-8?B?bGMzSWlqQmdRQUgxWnA0Wm10QzA1bFAvWEhrMXFGNXhGVGZTL05Dd3hhWnZN?=
 =?utf-8?B?QkFDZjlyazhYM3IvajVMTlNNSDlYWkVLMFVySVBZNXV6QXV4cmpvdnhhTXo3?=
 =?utf-8?B?TmJkZGlQZzRvNzc3dnpqbEhENDZpNnJsZGxvNzNDOVBVMkhLNVVDQWNlTVoy?=
 =?utf-8?B?bEx5MkVmaUNjakV1bkpoREpHUndsdGt6N3hoa0VHVnpaY3YwdER6T3hWdmtI?=
 =?utf-8?B?M3RCVGo3dENtS1M4ZkQvbHFHSlN5d0xpMEkwTG0waURjUmZIUUhBQkdQcUY2?=
 =?utf-8?B?cUxGZUdLbzBGVDQrcUx0cmRZMjZuNDkxRmUrdytuWWRqNGJoQmh0WnhYcHJx?=
 =?utf-8?B?Vy9GUlc1NXV0aTg4eDRqTDFBSjB6WU1Cam5nb1BRSEdvQTRuelUwdHh2OWJR?=
 =?utf-8?B?aHVta0NPcUEvTDU3RkRJSjF2d2RDeUlEUnRWeVByMWkvK1FEY0FvcjhIUk1k?=
 =?utf-8?B?QWRKeC9pR3JrNGcyWFZrSDduQ0lhNnRJNGtsenJEb1c3djRHNW1hajhjNzJV?=
 =?utf-8?B?ZVQrSURtNVNRai9FTER3SXlKaWFidEV2bm9DMkkzemNtTnZRdU5xY1VacG41?=
 =?utf-8?B?OXVRNXhxR2VqVDc4TkVyYVFSWHJVYXlRaEtJNzJmQ0dzdWJFWi9SWU12T1lm?=
 =?utf-8?B?bW8xMGZTY2RsM1llWiswMGN5VW9OUStlcWZFa1JyVEI3T0hTTHZNZFZ0eGdN?=
 =?utf-8?B?bVhKeFU1dWZNcWxuMEpQRmtUdG9BQmJhV3FHeDVsekNHZVVXeXdWZU0xYlA2?=
 =?utf-8?B?VHlYT0Z2MlBkbjlSZVV5clZKbHl3R1cyVGYwb1FSdlphckVaWmRGY2IrN0lC?=
 =?utf-8?B?N3UvYU8xbkxKdnZyWWpQbDh4ZG5oOU0zRXh6dWpmYUV2SnU4b1dXWjN1NTRp?=
 =?utf-8?B?cE9IQ1dKT0FrUmVod013SnIzWE5IVFhoL3NmZDI0dlBaVUFtSUsrMFVBQW15?=
 =?utf-8?B?bmtuK0FyaEpyNGVlL0gwbXVLRkRINXZNU0FYY0I2ZU5LUUR2UmVGemV0Vkhz?=
 =?utf-8?B?bS82SXRDNTJkU2Vvb0FEdEtnck56UTVvTFI5cGFjTVpRemNRUFlFSVNobVBx?=
 =?utf-8?Q?pZQHtjl8fY5Q3vosGtWwMGfZKE4abIV6gu7sLIZ?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d90d6eb4-5373-48e8-de4d-08d9415ebc34
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:48:59.0668
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: BlQBLRBqvf6ZEAviRLv2vn3KYfNDtSW2AD5o4TAJb5BLTEncExJxyROItHhLkp1dBdVO+HX8FpTN3NedgUedGA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5325

On 01.07.2021 16:09, Anthony PERARD wrote:
> --- a/xen/common/Makefile
> +++ b/xen/common/Makefile
> @@ -80,8 +80,12 @@ config.gz: $(CONF_FILE)
>  
>  config_data.o: config.gz
>  
> -config_data.S: $(BASEDIR)/tools/binfile
> -	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
> +quiet_cmd_binfile = BINFILE $@
> +cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data

This is an abuse of $< which I consider overly confusing:
$(BASEDIR)/tools/binfile is not the input file to the rule. Instead
the script generates an assembly file "out of thin air", with not
input files at all. The rule and ...

> +config_data.S: $(BASEDIR)/tools/binfile FORCE

... dependency shouldn't give a different impression. What would
be nice (without having checked how difficult this might be) would
be if quiet_cmd_binfile and cmd_binfile could move to xen/Rules.mk
and merely be used from here (and the other location, where the
same concern obviously applies).

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:51:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:51:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152539.281809 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ps-0000xw-Gy; Wed, 07 Jul 2021 15:51:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152539.281809; Wed, 07 Jul 2021 15:51:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ps-0000x5-DE; Wed, 07 Jul 2021 15:51:40 +0000
Received: by outflank-mailman (input) for mailman id 152539;
 Wed, 07 Jul 2021 15:51:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19mT-0002ed-6y
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:48:09 +0000
Received: from mail-pj1-x1031.google.com (unknown [2607:f8b0:4864:20::1031])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ca43c959-8a80-44c2-a26d-38b2ca2f8494;
 Wed, 07 Jul 2021 15:47:13 +0000 (UTC)
Received: by mail-pj1-x1031.google.com with SMTP id
 b8-20020a17090a4888b02901725eedd346so1909825pjh.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:47:13 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.47.12
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:47:12 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ca43c959-8a80-44c2-a26d-38b2ca2f8494
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=HlyScOtQVoYnoHAZopBay4tlsKScaz3uD66IFgkGB/I=;
        b=gnz1C+yn2F6jk2O7gk2x9gxUHURZsfF5XLUJ9QUqZxW9QQ8vYC3vvegOxXO9R4DFYN
         9aEKSS0P/WP8FXlRkhBlICHCsZgnUNkAuXj8nx6L5YTV+kaDmrwF8i4/jBsHqeF8WqH7
         uFGPQwROQWFNjwC6rT/V+bBbNRJ2h7/YJRFCtUaL3fJS2vdOnzLy6vNSOHFb5ZFLk3r/
         hrKiKbbfpfSkPOvJuQ53To6i9/z5+AfF1kbKl+tWygqCe8kJqljt+E/DlC7f9zYoimIN
         99hqd8fWGEIOble3BEp3B9fbFL/yoNtxRUiHgHZHOu1QD9tOlArcAoHYdogTxetcVgku
         eGIA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=HlyScOtQVoYnoHAZopBay4tlsKScaz3uD66IFgkGB/I=;
        b=Wcx/2ypl9wXKp5JR+qZXaWF+QXt4UePVULaonGcit7OZMCsNnmwcty/L7x1m8qQGYG
         aEtj78pOQpPbSkVTgZgYWPpNrvZ5IIOzc2LJsch5YxPzEOhfo62EZVgTYknEyBDhOcGh
         yBpr/R/U+HWAIyV9nHCtSGynrZcykZ6MNazgG2YfdSYMcCUrJa4JAnhINDptW+dXGkLw
         H1UtcJtEk+LyicP3He/YEk+c/PgnhA0wnAHdn3pXKNuZWgKZVhdhDH42yw/aoH5hrzMI
         rPGUFnjMQibU6upv0N1o4BdOqnoLkILZASv2zqjTI3EwQCPkf1I+aHkoIGk4DnJCFxKG
         z7Pw==
X-Gm-Message-State: AOAM5324GiAYRCVsCqqsBhTx5LmFbLwsngbPEdY7K9eFCIZcXvkYCpXY
	qzMzvaljDQMEjKVYgsH6yG4=
X-Google-Smtp-Source: ABdhPJyKzXN9u1DVm1W6X3qXZ/nh6euE9GS3yVqvO9By160QCA1G6fa3xLr2paYIAzHzvblMoOF23g==
X-Received: by 2002:a17:90a:3c8d:: with SMTP id g13mr198396pjc.229.1625672833174;
        Wed, 07 Jul 2021 08:47:13 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 12/13] HV/Storvsc: Add Isolation VM support for storvsc driver
Date: Wed,  7 Jul 2021 11:46:26 -0400
Message-Id: <20210707154629.3977369-13-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM, all shared memory with host needs to mark visible
to host via hvcall. vmbus_establish_gpadl() has already done it for
storvsc rx/tx ring buffer. The page buffer used by vmbus_sendpacket_
mpb_desc() still need to handle. Use DMA API to map/umap these
memory during sending/receiving packet and Hyper-V DMA ops callback
will use swiotlb function to allocate bounce buffer and copy data
from/to bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/scsi/storvsc_drv.c | 68 +++++++++++++++++++++++++++++++++++---
 1 file changed, 63 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 403753929320..cc9cb32f6621 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -21,6 +21,8 @@
 #include <linux/device.h>
 #include <linux/hyperv.h>
 #include <linux/blkdev.h>
+#include <linux/io.h>
+#include <linux/dma-mapping.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_host.h>
@@ -427,6 +429,8 @@ struct storvsc_cmd_request {
 	u32 payload_sz;
 
 	struct vstor_packet vstor_packet;
+	u32 hvpg_count;
+	struct hv_dma_range *dma_range;
 };
 
 
@@ -509,6 +513,14 @@ struct storvsc_scan_work {
 	u8 tgt_id;
 };
 
+#define storvsc_dma_map(dev, page, offset, size, dir) \
+	dma_map_page(dev, page, offset, size, dir)
+
+#define storvsc_dma_unmap(dev, dma_range, dir)		\
+		dma_unmap_page(dev, dma_range.dma,	\
+			       dma_range.mapping_size,	\
+			       dir ? DMA_FROM_DEVICE : DMA_TO_DEVICE)
+
 static void storvsc_device_scan(struct work_struct *work)
 {
 	struct storvsc_scan_work *wrk;
@@ -1267,6 +1279,7 @@ static void storvsc_on_channel_callback(void *context)
 	struct hv_device *device;
 	struct storvsc_device *stor_device;
 	struct Scsi_Host *shost;
+	int i;
 
 	if (channel->primary_channel != NULL)
 		device = channel->primary_channel->device_obj;
@@ -1321,6 +1334,15 @@ static void storvsc_on_channel_callback(void *context)
 				request = (struct storvsc_cmd_request *)scsi_cmd_priv(scmnd);
 			}
 
+			if (request->dma_range) {
+				for (i = 0; i < request->hvpg_count; i++)
+					storvsc_dma_unmap(&device->device,
+						request->dma_range[i],
+						request->vstor_packet.vm_srb.data_in == READ_TYPE);
+
+				kfree(request->dma_range);
+			}
+
 			storvsc_on_receive(stor_device, packet, request);
 			continue;
 		}
@@ -1817,7 +1839,9 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 		unsigned int hvpgoff, hvpfns_to_add;
 		unsigned long offset_in_hvpg = offset_in_hvpage(sgl->offset);
 		unsigned int hvpg_count = HVPFN_UP(offset_in_hvpg + length);
+		dma_addr_t dma;
 		u64 hvpfn;
+		u32 size;
 
 		if (hvpg_count > MAX_PAGE_BUFFER_COUNT) {
 
@@ -1831,6 +1855,13 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 		payload->range.len = length;
 		payload->range.offset = offset_in_hvpg;
 
+		cmd_request->dma_range = kcalloc(hvpg_count,
+				 sizeof(*cmd_request->dma_range),
+				 GFP_ATOMIC);
+		if (!cmd_request->dma_range) {
+			ret = -ENOMEM;
+			goto free_payload;
+		}
 
 		for (i = 0; sgl != NULL; sgl = sg_next(sgl)) {
 			/*
@@ -1854,9 +1885,29 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 			 * last sgl should be reached at the same time that
 			 * the PFN array is filled.
 			 */
-			while (hvpfns_to_add--)
-				payload->range.pfn_array[i++] =	hvpfn++;
+			while (hvpfns_to_add--) {
+				size = min(HV_HYP_PAGE_SIZE - offset_in_hvpg,
+					   (unsigned long)length);
+				dma = storvsc_dma_map(&dev->device, pfn_to_page(hvpfn++),
+						      offset_in_hvpg, size,
+						      scmnd->sc_data_direction);
+				if (dma_mapping_error(&dev->device, dma)) {
+					ret = -ENOMEM;
+					goto free_dma_range;
+				}
+
+				if (offset_in_hvpg) {
+					payload->range.offset = dma & ~HV_HYP_PAGE_MASK;
+					offset_in_hvpg = 0;
+				}
+
+				cmd_request->dma_range[i].dma = dma;
+				cmd_request->dma_range[i].mapping_size = size;
+				payload->range.pfn_array[i++] = dma >> HV_HYP_PAGE_SHIFT;
+				length -= size;
+			}
 		}
+		cmd_request->hvpg_count = hvpg_count;
 	}
 
 	cmd_request->payload = payload;
@@ -1867,13 +1918,20 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 	put_cpu();
 
 	if (ret == -EAGAIN) {
-		if (payload_sz > sizeof(cmd_request->mpb))
-			kfree(payload);
 		/* no more space */
-		return SCSI_MLQUEUE_DEVICE_BUSY;
+		ret = SCSI_MLQUEUE_DEVICE_BUSY;
+		goto free_dma_range;
 	}
 
 	return 0;
+
+free_dma_range:
+	kfree(cmd_request->dma_range);
+
+free_payload:
+	if (payload_sz > sizeof(cmd_request->mpb))
+		kfree(payload);
+	return ret;
 }
 
 static struct scsi_host_template scsi_driver = {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:51:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:51:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152537.281806 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ps-0000uW-82; Wed, 07 Jul 2021 15:51:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152537.281806; Wed, 07 Jul 2021 15:51:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19ps-0000uP-4d; Wed, 07 Jul 2021 15:51:40 +0000
Received: by outflank-mailman (input) for mailman id 152537;
 Wed, 07 Jul 2021 15:51:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19md-0002ed-7K
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:48:19 +0000
Received: from mail-pg1-x530.google.com (unknown [2607:f8b0:4864:20::530])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ebec7393-d1fd-4e30-85c3-7850c9255489;
 Wed, 07 Jul 2021 15:47:16 +0000 (UTC)
Received: by mail-pg1-x530.google.com with SMTP id v7so2683332pgl.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:47:16 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.47.14
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:47:15 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ebec7393-d1fd-4e30-85c3-7850c9255489
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=84IEbLNgJNomBqMgxBtrETy72H72EvXAGdQ00eQF2Mc=;
        b=YNnohj4Chb9T3B9ZYxiBv9YVqoi0X5lB74SQ7L1EnVYnuQ7j+Sylm+oTEpclLAr4Rp
         QMdcSRfsEpsNu8h57gAfWgW+S7FmRK+lRz16mOIVQB9v19q7vKIS/3imFU7L8I+a+CoW
         4CZ1ji2QtUkrwbieeV7oza4eciyEFAW2B4m/iegyGFZxo9emMHECDfkYKuchj9BUm6ka
         +lt0qfR+AlSO/jWbQhKgOe0W6mJ6vX8d+oS1VyY2+/m2yXPG+YkyAhEMSZLvHoK3AYA2
         aynhmc1FnAYYAolwJfs0NpD2mwngTXdQQx4mA0KgjhyurE1FSWmq2vOFbfaVKW7EnbvH
         tEwg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=84IEbLNgJNomBqMgxBtrETy72H72EvXAGdQ00eQF2Mc=;
        b=JmB4NLzV12Grm7dtD1LoKqIrvzNhKP5h7d55VZeKQv9o2+M8fTNwAaEn+m6j9tVJEk
         yDzcGTjNcPMnooHXekaHl9F33auIzsC37ydnP2GkgEmci4LLQg4e6DFu1HiygfmXTdY2
         CznTKX6s+cE4a6Wq37fgUx10/27XqwrLY2nElMl5C+CJb+XWir667vbwcNewZoYI+d0U
         lO31rA36NusXaqSv2GuIX4V1tTnrtURA2mPnO0RcSopTcwyPo6OLXDtd5zxkheDa7yh6
         2GsGbckneV5D1HBwEd/zNNtzT93N/4bKvkLFld1WEj3Xys1DYCGPg5UCj8r2KDMlaLtD
         QAWg==
X-Gm-Message-State: AOAM532wMordziOSdpj/qrFm2KKJ7jsHUIZRECQIWnnWqgjua1HhFqgj
	wQNyaut/bd7v3HdcnC9aF2Y=
X-Google-Smtp-Source: ABdhPJwc0xo238tlV5y9FHemJmnwVdI1QKXmzxerVDS/ZE3a5qm/V6a2aCdYF88RGalmD6tecULCLg==
X-Received: by 2002:a63:1601:: with SMTP id w1mr26556927pgl.116.1625672836292;
        Wed, 07 Jul 2021 08:47:16 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 13/13] x86/HV: Not set memory decrypted/encrypted during kexec alloc/free page in IVM
Date: Wed,  7 Jul 2021 11:46:27 -0400
Message-Id: <20210707154629.3977369-14-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V Isolation VM reuses set_memory_decrypted/encrypted function
and not needs to decrypted/encrypted in arch_kexec_post_alloc(pre_free)
_pages just likes AMD SEV VM. So skip them.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/kernel/machine_kexec_64.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index c078b0d3ab0e..0cadc64b6873 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -26,6 +26,7 @@
 #include <asm/kexec-bzimage64.h>
 #include <asm/setup.h>
 #include <asm/set_memory.h>
+#include <asm/mshyperv.h>
 
 #ifdef CONFIG_ACPI
 /*
@@ -598,7 +599,7 @@ void arch_kexec_unprotect_crashkres(void)
  */
 int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
 {
-	if (sev_active())
+	if (sev_active() || hv_is_isolation_supported())
 		return 0;
 
 	/*
@@ -611,7 +612,7 @@ int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
 
 void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages)
 {
-	if (sev_active())
+	if (sev_active() || hv_is_isolation_supported())
 		return;
 
 	/*
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:51:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:51:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152544.281828 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19pz-0001WR-14; Wed, 07 Jul 2021 15:51:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152544.281828; Wed, 07 Jul 2021 15:51:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19py-0001WG-UE; Wed, 07 Jul 2021 15:51:46 +0000
Received: by outflank-mailman (input) for mailman id 152544;
 Wed, 07 Jul 2021 15:51:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lz-0002ed-6B
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:39 +0000
Received: from mail-pf1-x42d.google.com (unknown [2607:f8b0:4864:20::42d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f0b9a787-f737-4412-9481-afb69935da3d;
 Wed, 07 Jul 2021 15:47:05 +0000 (UTC)
Received: by mail-pf1-x42d.google.com with SMTP id d12so2561848pfj.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:47:05 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.47.03
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:47:04 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f0b9a787-f737-4412-9481-afb69935da3d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=vp54ZQawAXt49CkThDbFLyNwiKlz10UxxnQhsKUA4kk=;
        b=PnlYogD/c2tN+V//C2WWfqx2lkMsJm1KP/m5bsJdd/PBU3lKDLf3vgf1RfecUffbi5
         Cn7eWqP/lJmDf4AcC5jTnFHI8XDKLv2pE7h5Kbl/PQr4jI++do5kQr3pjjZRg6OGZ1WI
         4u3fUGsl1MLWEe26rGgo5F/gcLmw1fVA6or1qg3AXu5StUu6LTt905O7YR6NgXLAdA1Z
         Wc67MSOKPYhXSEqyPriybFeq5TXPFivuoUb3GBT9BOxPs6zLiJpMZR21Jo6GqowJg/XZ
         v90GyR43xecqXty3TDAWFr19k61piW/xLMYHzk4228TCmQNNj0RgkQUAinOcvSP9o8nP
         hsGQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=vp54ZQawAXt49CkThDbFLyNwiKlz10UxxnQhsKUA4kk=;
        b=pHOBsPeJUTv3Ytsd3r5jH9ZmI83HrOrPBmUDWZhix/Sqvd6aNo/okX8NiOtNHAJsBe
         2hDywQNXTMei3aakZp6RehwdHAsZhQc/Ej0cc/p5+a4vXgtb4UHJ5ioKj0z3KYL5atIH
         wJHKkYLlwvbcgGs5FQNLGFaqeuNBKs8iyhn4yXiUU0swi7nmAUqMZw2Fl33DtDjcNK72
         a9kQUkbSy6ZIOgRVeQ4CzIdTn+78c4JrXRkj2IWBX5DgygLUhlOaOaph/DlRID9PQqXL
         lstF16VOOuphmRnGwwVpFcLPbUNSVucng11y5JpbAguaNvEME6hooXtYRwQhQYp/8taH
         fcBA==
X-Gm-Message-State: AOAM53349n4/we6l1sSEIOEJMAENMdYp7aUPZqkfV3GJmWJHCK3tbD3f
	+FfSI7DonKhrW1L6beX1iGg=
X-Google-Smtp-Source: ABdhPJxiQoR7b9/H9OUOgdHQKh0PkV/Pa6tXWYSXPcKMMkE7EjBhqX/P5/cFjinfyZC3Zy0XtSMGAQ==
X-Received: by 2002:a05:6a00:2491:b029:308:d524:1a26 with SMTP id c17-20020a056a002491b0290308d5241a26mr25712835pfv.45.1625672824452;
        Wed, 07 Jul 2021 08:47:04 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 09/13] x86/Swiotlb/HV: Add Swiotlb bounce buffer remap function for HV IVM
Date: Wed,  7 Jul 2021 11:46:23 -0400
Message-Id: <20210707154629.3977369-10-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM with AMD SEV, bounce buffer needs to be accessed via
extra address space which is above shared_gpa_boundary
(E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
The access physical address will be original physical address +
shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
spec is called virtual top of memory(vTOM). Memory addresses below
vTOM are automatically treated as private while memory above
vTOM is treated as shared.

Introduce set_memory_decrypted_map() function to decrypt memory and
remap memory with platform callback. Use set_memory_decrypted_
map() in the swiotlb code, store remap address returned by the new
API and use the remap address to copy data from/to swiotlb bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/ivm.c             | 30 ++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h   |  2 ++
 arch/x86/include/asm/set_memory.h |  2 ++
 arch/x86/mm/pat/set_memory.c      | 28 ++++++++++++++++++++++++++++
 include/linux/swiotlb.h           |  4 ++++
 kernel/dma/swiotlb.c              | 11 ++++++++---
 6 files changed, 74 insertions(+), 3 deletions(-)

diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 8a6f4e9e3d6c..ea33935e0c17 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -267,3 +267,33 @@ int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
 			enc ? VMBUS_PAGE_NOT_VISIBLE
 			: VMBUS_PAGE_VISIBLE_READ_WRITE);
 }
+
+/*
+ * hv_map_memory - map memory to extra space in the AMD SEV-SNP Isolation VM.
+ */
+unsigned long hv_map_memory(unsigned long addr, unsigned long size)
+{
+	unsigned long *pfns = kcalloc(size / HV_HYP_PAGE_SIZE,
+				      sizeof(unsigned long),
+		       GFP_KERNEL);
+	unsigned long vaddr;
+	int i;
+
+	if (!pfns)
+		return (unsigned long)NULL;
+
+	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+		pfns[i] = virt_to_hvpfn((void *)addr + i * HV_HYP_PAGE_SIZE) +
+			(ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+
+	vaddr = (unsigned long)vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE,
+					PAGE_KERNEL_IO);
+	kfree(pfns);
+
+	return vaddr;
+}
+
+void hv_unmap_memory(unsigned long addr)
+{
+	vunmap((void *)addr);
+}
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index fe03e3e833ac..ba3cb9e32fdb 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -253,6 +253,8 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
 int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
 int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
+unsigned long hv_map_memory(unsigned long addr, unsigned long size);
+void hv_unmap_memory(unsigned long addr);
 void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
 void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
 void hv_signal_eom_ghcb(void);
diff --git a/arch/x86/include/asm/set_memory.h b/arch/x86/include/asm/set_memory.h
index 43fa081a1adb..7a2117931830 100644
--- a/arch/x86/include/asm/set_memory.h
+++ b/arch/x86/include/asm/set_memory.h
@@ -49,6 +49,8 @@ int set_memory_decrypted(unsigned long addr, int numpages);
 int set_memory_np_noalias(unsigned long addr, int numpages);
 int set_memory_nonglobal(unsigned long addr, int numpages);
 int set_memory_global(unsigned long addr, int numpages);
+unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size);
+int set_memory_encrypted_unmap(unsigned long addr, unsigned long size);
 
 int set_pages_array_uc(struct page **pages, int addrinarray);
 int set_pages_array_wc(struct page **pages, int addrinarray);
diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index 6cc83c57383d..5d4d3963f4a2 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -2039,6 +2039,34 @@ int set_memory_decrypted(unsigned long addr, int numpages)
 }
 EXPORT_SYMBOL_GPL(set_memory_decrypted);
 
+static unsigned long __map_memory(unsigned long addr, unsigned long size)
+{
+	if (hv_is_isolation_supported())
+		return hv_map_memory(addr, size);
+
+	return addr;
+}
+
+static void __unmap_memory(unsigned long addr)
+{
+	if (hv_is_isolation_supported())
+		hv_unmap_memory(addr);
+}
+
+unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size)
+{
+	if (__set_memory_enc_dec(addr, size / PAGE_SIZE, false))
+		return (unsigned long)NULL;
+
+	return __map_memory(addr, size);
+}
+
+int set_memory_encrypted_unmap(unsigned long addr, unsigned long size)
+{
+	__unmap_memory(addr);
+	return __set_memory_enc_dec(addr, size / PAGE_SIZE, true);
+}
+
 int set_pages_uc(struct page *page, int numpages)
 {
 	unsigned long addr = (unsigned long)page_address(page);
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index f507e3eacbea..5c6f6c7380ef 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -72,6 +72,9 @@ extern enum swiotlb_force swiotlb_force;
  * @end:	The end address of the swiotlb memory pool. Used to do a quick
  *		range check to see if the memory was in fact allocated by this
  *		API.
+ * @vstart:	The virtual start address of the swiotlb memory pool. The swiotlb
+ *		memory pool may be remapped in the memory encrypted case and store
+ *		virtual address for bounce buffer operation.
  * @nslabs:	The number of IO TLB blocks (in groups of 64) between @start and
  *		@end. For default swiotlb, this is command line adjustable via
  *		setup_io_tlb_npages.
@@ -89,6 +92,7 @@ extern enum swiotlb_force swiotlb_force;
 struct io_tlb_mem {
 	phys_addr_t start;
 	phys_addr_t end;
+	void *vstart;
 	unsigned long nslabs;
 	unsigned long used;
 	unsigned int index;
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index d3fa4669229b..9911817250a8 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -194,8 +194,13 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
 		mem->slots[i].alloc_size = 0;
 	}
 
-	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
-	memset(vaddr, 0, bytes);
+	mem->vstart = (void *)set_memory_decrypted_map((unsigned long)vaddr, bytes);
+	if (!mem->vstart) {
+		pr_err("Failed to decrypt memory.\n");
+		return;
+	}
+
+	memset(mem->vstart, 0, bytes);
 }
 
 int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
@@ -352,7 +357,7 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
 	phys_addr_t orig_addr = mem->slots[index].orig_addr;
 	size_t alloc_size = mem->slots[index].alloc_size;
 	unsigned long pfn = PFN_DOWN(orig_addr);
-	unsigned char *vaddr = phys_to_virt(tlb_addr);
+	unsigned char *vaddr = mem->vstart + tlb_addr - mem->start;
 
 	if (orig_addr == INVALID_PHYS_ADDR)
 		return;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:51:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:51:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152546.281839 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19q2-0001si-AT; Wed, 07 Jul 2021 15:51:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152546.281839; Wed, 07 Jul 2021 15:51:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19q2-0001sH-5k; Wed, 07 Jul 2021 15:51:50 +0000
Received: by outflank-mailman (input) for mailman id 152546;
 Wed, 07 Jul 2021 15:51:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19lp-0002ed-5v
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:29 +0000
Received: from mail-pg1-x52b.google.com (unknown [2607:f8b0:4864:20::52b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ca013a0e-bb47-48a7-a1bf-4e23d3020233;
 Wed, 07 Jul 2021 15:47:02 +0000 (UTC)
Received: by mail-pg1-x52b.google.com with SMTP id y17so2638554pgf.12
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:47:02 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.47.00
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:47:01 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ca013a0e-bb47-48a7-a1bf-4e23d3020233
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=XbGhpS5yStXGWn3Ym/sECphkTnEdMSaFIpokEER49XU=;
        b=MBlsmW2EGc08awn3pn+tF2cqU94Qi2j0RVzs5T4d5AWeM6k/iatip8No/fth4gt9MR
         DY81PMkdApCNFlfGSXT5ZtO5yenK2w0MxW3c3j6XHgi8khfVG4V+nYRb49rx9z97vYwN
         EXDGk7wfoTl45kU/4faVLyVELy4NMAW2A43MLsJxZrItmuhi8rW1cp0heFAuSOf2R28x
         Cdrg7vVbFw5bk7Im74s4nCeNM+VaOOlX/fZbJKtrHJBTRH6fMjfeJ9wn+Xr6ll3vgXPN
         ruab8PwcdsmrtjxBo3HQcisTjo+FaKBnaB/kp55dKdYw8WoQazY4D+WM4LEzDXF1ogQV
         TxQg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=XbGhpS5yStXGWn3Ym/sECphkTnEdMSaFIpokEER49XU=;
        b=NxnX8UuXVrZEmdRbXWIbM21MxNvlP85tliL73sE3edQjUfLK07aknSOalSIShACd16
         Qndzmtk2ant/gGINyb7n2TSX/eTaMisgUGbU9YfAhl9+sLjZzXz286xZS5C0jTLFUx5L
         2txbcS6Wy9ufVtD/pjryajHajwAIIuOv0mL9226PYBH2uksImt4T5GwoHxNwL1EmV84U
         9uoyOdSlpY+AICccas6qc2Kk4x4TnZlsQqEK7wNW1ZJkd+cuFxXaCrUqJy8bA5J+BAxu
         IISYSAipgixJ7sM4FqUdCPv/NjbSdquhEGUpGwe3UMD5eU9NJpjbFi3S7niP7ziohURX
         5oeA==
X-Gm-Message-State: AOAM533wtX7/ZsM34Nlph82MCZf1UbnmM+2FeK8ES2bHkUwuns5jNgFL
	oKVx+YUt6sHkcivWanpkMVM=
X-Google-Smtp-Source: ABdhPJxw02vtsDYKuD6z1M2sOL4tGys2fRSpSI1IN+SqrITeBu4uXF/xWC90CwUdn5ZrShyZXZ6xuA==
X-Received: by 2002:a05:6a00:158b:b029:319:c68a:8006 with SMTP id u11-20020a056a00158bb0290319c68a8006mr23629213pfk.7.1625672821514;
        Wed, 07 Jul 2021 08:47:01 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 08/13] HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
Date: Wed,  7 Jul 2021 11:46:22 -0400
Message-Id: <20210707154629.3977369-9-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

VMbus ring buffer are shared with host and it's need to
be accessed via extra address space of Isolation VM with
SNP support. This patch is to map the ring buffer
address in extra address space via ioremap(). HV host
visibility hvcall smears data in the ring buffer and
so reset the ring buffer memory to zero after calling
visibility hvcall.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/Kconfig        |  1 +
 drivers/hv/channel.c      | 10 +++++
 drivers/hv/hyperv_vmbus.h |  2 +
 drivers/hv/ring_buffer.c  | 84 ++++++++++++++++++++++++++++++---------
 4 files changed, 79 insertions(+), 18 deletions(-)

diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
index 66c794d92391..a8386998be40 100644
--- a/drivers/hv/Kconfig
+++ b/drivers/hv/Kconfig
@@ -7,6 +7,7 @@ config HYPERV
 	depends on X86 && ACPI && X86_LOCAL_APIC && HYPERVISOR_GUEST
 	select PARAVIRT
 	select X86_HV_CALLBACK_VECTOR
+	select VMAP_PFN
 	help
 	  Select this option to run Linux as a Hyper-V client operating
 	  system.
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 01048bb07082..7350da9dbe97 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -707,6 +707,16 @@ static int __vmbus_open(struct vmbus_channel *newchannel,
 	if (err)
 		goto error_clean_ring;
 
+	err = hv_ringbuffer_post_init(&newchannel->outbound,
+				      page, send_pages);
+	if (err)
+		goto error_free_gpadl;
+
+	err = hv_ringbuffer_post_init(&newchannel->inbound,
+				      &page[send_pages], recv_pages);
+	if (err)
+		goto error_free_gpadl;
+
 	/* Create and init the channel open message */
 	open_info = kzalloc(sizeof(*open_info) +
 			   sizeof(struct vmbus_channel_open_channel),
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 40bc0eff6665..15cd23a561f3 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -172,6 +172,8 @@ extern int hv_synic_cleanup(unsigned int cpu);
 /* Interface */
 
 void hv_ringbuffer_pre_init(struct vmbus_channel *channel);
+int hv_ringbuffer_post_init(struct hv_ring_buffer_info *ring_info,
+		struct page *pages, u32 page_cnt);
 
 int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
 		       struct page *pages, u32 pagecnt, u32 max_pkt_size);
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 2aee356840a2..d4f93fca1108 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -17,6 +17,8 @@
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/prefetch.h>
+#include <linux/io.h>
+#include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
 
@@ -179,43 +181,89 @@ void hv_ringbuffer_pre_init(struct vmbus_channel *channel)
 	mutex_init(&channel->outbound.ring_buffer_mutex);
 }
 
-/* Initialize the ring buffer. */
-int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
-		       struct page *pages, u32 page_cnt, u32 max_pkt_size)
+int hv_ringbuffer_post_init(struct hv_ring_buffer_info *ring_info,
+		       struct page *pages, u32 page_cnt)
 {
+	u64 physic_addr = page_to_pfn(pages) << PAGE_SHIFT;
+	unsigned long *pfns_wraparound;
+	void *vaddr;
 	int i;
-	struct page **pages_wraparound;
 
-	BUILD_BUG_ON((sizeof(struct hv_ring_buffer) != PAGE_SIZE));
+	if (!hv_isolation_type_snp())
+		return 0;
+
+	physic_addr += ms_hyperv.shared_gpa_boundary;
 
 	/*
 	 * First page holds struct hv_ring_buffer, do wraparound mapping for
 	 * the rest.
 	 */
-	pages_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(struct page *),
+	pfns_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(unsigned long),
 				   GFP_KERNEL);
-	if (!pages_wraparound)
+	if (!pfns_wraparound)
 		return -ENOMEM;
 
-	pages_wraparound[0] = pages;
+	pfns_wraparound[0] = physic_addr >> PAGE_SHIFT;
 	for (i = 0; i < 2 * (page_cnt - 1); i++)
-		pages_wraparound[i + 1] = &pages[i % (page_cnt - 1) + 1];
-
-	ring_info->ring_buffer = (struct hv_ring_buffer *)
-		vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, PAGE_KERNEL);
-
-	kfree(pages_wraparound);
+		pfns_wraparound[i + 1] = (physic_addr >> PAGE_SHIFT) +
+			i % (page_cnt - 1) + 1;
 
-
-	if (!ring_info->ring_buffer)
+	vaddr = vmap_pfn(pfns_wraparound, page_cnt * 2 - 1, PAGE_KERNEL_IO);
+	kfree(pfns_wraparound);
+	if (!vaddr)
 		return -ENOMEM;
 
-	ring_info->ring_buffer->read_index =
-		ring_info->ring_buffer->write_index = 0;
+	/* Clean memory after setting host visibility. */
+	memset((void *)vaddr, 0x00, page_cnt * PAGE_SIZE);
+
+	ring_info->ring_buffer = (struct hv_ring_buffer *)vaddr;
+	ring_info->ring_buffer->read_index = 0;
+	ring_info->ring_buffer->write_index = 0;
 
 	/* Set the feature bit for enabling flow control. */
 	ring_info->ring_buffer->feature_bits.value = 1;
 
+	return 0;
+}
+
+/* Initialize the ring buffer. */
+int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
+		       struct page *pages, u32 page_cnt, u32 max_pkt_size)
+{
+	int i;
+	struct page **pages_wraparound;
+
+	BUILD_BUG_ON((sizeof(struct hv_ring_buffer) != PAGE_SIZE));
+
+	if (!hv_isolation_type_snp()) {
+		/*
+		 * First page holds struct hv_ring_buffer, do wraparound mapping for
+		 * the rest.
+		 */
+		pages_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(struct page *),
+					   GFP_KERNEL);
+		if (!pages_wraparound)
+			return -ENOMEM;
+
+		pages_wraparound[0] = pages;
+		for (i = 0; i < 2 * (page_cnt - 1); i++)
+			pages_wraparound[i + 1] = &pages[i % (page_cnt - 1) + 1];
+
+		ring_info->ring_buffer = (struct hv_ring_buffer *)
+			vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, PAGE_KERNEL);
+
+		kfree(pages_wraparound);
+
+		if (!ring_info->ring_buffer)
+			return -ENOMEM;
+
+		ring_info->ring_buffer->read_index =
+			ring_info->ring_buffer->write_index = 0;
+
+		/* Set the feature bit for enabling flow control. */
+		ring_info->ring_buffer->feature_bits.value = 1;
+	}
+
 	ring_info->ring_size = page_cnt << PAGE_SHIFT;
 	ring_info->ring_size_div10_reciprocal =
 		reciprocal_value(ring_info->ring_size / 10);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:51:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:51:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152549.281850 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19q4-0002DA-LO; Wed, 07 Jul 2021 15:51:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152549.281850; Wed, 07 Jul 2021 15:51:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19q4-0002Cv-Gd; Wed, 07 Jul 2021 15:51:52 +0000
Received: by outflank-mailman (input) for mailman id 152549;
 Wed, 07 Jul 2021 15:51:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19mE-0002ed-6i
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:54 +0000
Received: from mail-pg1-x52b.google.com (unknown [2607:f8b0:4864:20::52b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 27ad855d-4f2c-4584-86e4-bc6fb9fc7caf;
 Wed, 07 Jul 2021 15:47:08 +0000 (UTC)
Received: by mail-pg1-x52b.google.com with SMTP id a2so2661703pgi.6
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:47:08 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.47.06
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:47:07 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 27ad855d-4f2c-4584-86e4-bc6fb9fc7caf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=uSViD25AWGJ6J+QgAwUoKBubGeqJPy/dkYcV0Fzox+c=;
        b=cQcYT5XSBLbRJRDUNa0e5CgSigjoy2I5REnIiUUUqfnwYfNGPXXLVSum+8IzUodfaP
         NTItaqDrZixn5v3ga9DqqV+CMjZrPq+hOq0qzW+JzdevrlfXgqEqK2Ehmyky0HMcgFP3
         fBUAJnZALGSD2lwUXPo1oB7+tjhYoonkMW4pDlMoiGMuEP1yUjVan+9lRbSkG9DNhWQV
         dWxY/vIo+6ak/OXzqcOGKv7Ch8+RaNsC9N5387m4YR1JdwzUEvcBUBdz3axjyvNLlHdK
         q4JRQ6k96Mk9DN+/RNIoDW1vtP7bBHzLBDQcvP33UQJ6r+BeKTe/eU2ca43MQb/lQL6x
         TM5g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=uSViD25AWGJ6J+QgAwUoKBubGeqJPy/dkYcV0Fzox+c=;
        b=aCfMtyczx32Kmq8JNTTYc6lKhGX5RajkwHe4H+V+1UNUUrmzqM0W5cAv3yOr1sHNoo
         12EUjL5gjDK+ZteZv4SrxiLfoUs2HLkmGnsDsnLFNLvkLBB1aHQ/5CVmh0cL2UaeYlBa
         cIEgwibFTpXfSQAPoIbXSnK//9SYeue9xnwWJgaIeIwavSaSO5I1Crktwx7atihM59Gb
         PB8/2RiTCzhrPTtn6fIdXqxrWmUzcCio73ImPbJHccZwYXqo29ehhf+MG1CfBHFvJiZu
         RLhLCQz5mbW2VTLUysVJiISzzpv22I/MXmdGo7ib1xWMgoiQWfz8LDFlBrkOifqofd4o
         RukQ==
X-Gm-Message-State: AOAM533mpPvrB+Mz6HYDziR+GfA+o0DHmTQI5f3k4b9M1wqZU6AZ2g3b
	Bu+QOcyvhFEnPZ+zCy7odqY=
X-Google-Smtp-Source: ABdhPJy7eYx9Hj+tY38P1ebQQq0y3i61YfxbRUD8cqpY0wJNgpDT6hIlSZDAU9aZE7BllJmWIxymNA==
X-Received: by 2002:a63:ed12:: with SMTP id d18mr26142030pgi.12.1625672827391;
        Wed, 07 Jul 2021 08:47:07 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 10/13] HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
Date: Wed,  7 Jul 2021 11:46:24 -0400
Message-Id: <20210707154629.3977369-11-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V Isolation VM requires bounce buffer support to copy
data from/to encrypted memory and so enable swiotlb force
mode to use swiotlb bounce buffer for DMA transaction.

In Isolation VM with AMD SEV, the bounce buffer needs to be
accessed via extra address space which is above shared_gpa_boundary
(E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
The access physical address will be original physical address +
shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
spec is called virtual top of memory(vTOM). Memory addresses below
vTOM are automatically treated as private while memory above
vTOM is treated as shared.

Swiotlb bounce buffer code calls set_memory_decrypted_map()
to mark bounce buffer visible to host and map it in extra
address space.

Hyper-V initalizes swiotlb bounce buffer and default swiotlb
needs to be disabled. pci_swiotlb_detect_override() and
pci_swiotlb_detect_4gb() enable the default one. To override
the setting, hyperv_swiotlb_detect() needs to run before
these detect functions which depends on the pci_xen_swiotlb_
init(). Make pci_xen_swiotlb_init() depends on the hyperv_swiotlb
_detect() to keep the order.

The map function vmap_pfn() can't work in the early place
hyperv_iommu_swiotlb_init() and so initialize swiotlb bounce
buffer in the hyperv_iommu_swiotlb_later_init().

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/xen/pci-swiotlb-xen.c |  3 +-
 drivers/hv/vmbus_drv.c         |  3 ++
 drivers/iommu/hyperv-iommu.c   | 62 ++++++++++++++++++++++++++++++++++
 include/linux/hyperv.h         |  1 +
 4 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/arch/x86/xen/pci-swiotlb-xen.c b/arch/x86/xen/pci-swiotlb-xen.c
index 54f9aa7e8457..43bd031aa332 100644
--- a/arch/x86/xen/pci-swiotlb-xen.c
+++ b/arch/x86/xen/pci-swiotlb-xen.c
@@ -4,6 +4,7 @@
 
 #include <linux/dma-map-ops.h>
 #include <linux/pci.h>
+#include <linux/hyperv.h>
 #include <xen/swiotlb-xen.h>
 
 #include <asm/xen/hypervisor.h>
@@ -91,6 +92,6 @@ int pci_xen_swiotlb_init_late(void)
 EXPORT_SYMBOL_GPL(pci_xen_swiotlb_init_late);
 
 IOMMU_INIT_FINISH(pci_xen_swiotlb_detect,
-		  NULL,
+		  hyperv_swiotlb_detect,
 		  pci_xen_swiotlb_init,
 		  NULL);
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 92cb3f7d21d9..5e3bb76d4dee 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -23,6 +23,7 @@
 #include <linux/cpu.h>
 #include <linux/sched/task_stack.h>
 
+#include <linux/dma-map-ops.h>
 #include <linux/delay.h>
 #include <linux/notifier.h>
 #include <linux/ptrace.h>
@@ -2080,6 +2081,7 @@ struct hv_device *vmbus_device_create(const guid_t *type,
 	return child_device_obj;
 }
 
+static u64 vmbus_dma_mask = DMA_BIT_MASK(64);
 /*
  * vmbus_device_register - Register the child device
  */
@@ -2120,6 +2122,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
 	}
 	hv_debug_add_dev_dir(child_device_obj);
 
+	child_device_obj->device.dma_mask = &vmbus_dma_mask;
 	return 0;
 
 err_kset_unregister:
diff --git a/drivers/iommu/hyperv-iommu.c b/drivers/iommu/hyperv-iommu.c
index e285a220c913..d7ea8e05b991 100644
--- a/drivers/iommu/hyperv-iommu.c
+++ b/drivers/iommu/hyperv-iommu.c
@@ -13,14 +13,22 @@
 #include <linux/irq.h>
 #include <linux/iommu.h>
 #include <linux/module.h>
+#include <linux/hyperv.h>
+#include <linux/io.h>
 
 #include <asm/apic.h>
 #include <asm/cpu.h>
 #include <asm/hw_irq.h>
 #include <asm/io_apic.h>
+#include <asm/iommu.h>
+#include <asm/iommu_table.h>
 #include <asm/irq_remapping.h>
 #include <asm/hypervisor.h>
 #include <asm/mshyperv.h>
+#include <asm/swiotlb.h>
+#include <linux/dma-map-ops.h>
+#include <linux/dma-direct.h>
+#include <linux/set_memory.h>
 
 #include "irq_remapping.h"
 
@@ -36,6 +44,8 @@
 static cpumask_t ioapic_max_cpumask = { CPU_BITS_NONE };
 static struct irq_domain *ioapic_ir_domain;
 
+static unsigned long hyperv_io_tlb_start, hyperv_io_tlb_size;
+
 static int hyperv_ir_set_affinity(struct irq_data *data,
 		const struct cpumask *mask, bool force)
 {
@@ -337,4 +347,56 @@ static const struct irq_domain_ops hyperv_root_ir_domain_ops = {
 	.free = hyperv_root_irq_remapping_free,
 };
 
+void __init hyperv_iommu_swiotlb_init(void)
+{
+	unsigned long bytes;
+	void *vstart;
+
+	/*
+	 * Allocate Hyper-V swiotlb bounce buffer at early place
+	 * to reserve large contiguous memory.
+	 */
+	hyperv_io_tlb_size = 200 * 1024 * 1024;
+	hyperv_io_tlb_start = memblock_alloc_low(PAGE_ALIGN(hyperv_io_tlb_size),
+						 HV_HYP_PAGE_SIZE);
+
+	if (!hyperv_io_tlb_start) {
+		pr_warn("Fail to allocate Hyper-V swiotlb buffer.\n");
+		return;
+	}
+}
+
+int __init hyperv_swiotlb_detect(void)
+{
+	if (hypervisor_is_type(X86_HYPER_MS_HYPERV)
+	    && hv_is_isolation_supported()) {
+		/*
+		 * Enable swiotlb force mode in Isolation VM to
+		 * use swiotlb bounce buffer for dma transaction.
+		 */
+		swiotlb_force = SWIOTLB_FORCE;
+		return 1;
+	}
+
+	return 0;
+}
+
+void __init hyperv_iommu_swiotlb_later_init(void)
+{
+	void *hyperv_io_tlb_remap;
+	int ret;
+
+	/*
+	 * Swiotlb bounce buffer needs to be mapped in extra address
+	 * space. Map function doesn't work in the early place and so
+	 * call swiotlb_late_init_with_tbl() here.
+	 */
+	swiotlb_late_init_with_tbl(hyperv_io_tlb_start,
+				   hyperv_io_tlb_size >> IO_TLB_SHIFT);
+}
+
+IOMMU_INIT_FINISH(hyperv_swiotlb_detect,
+		  NULL, hyperv_iommu_swiotlb_init,
+		  hyperv_iommu_swiotlb_later_init);
+
 #endif
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 06eccaba10c5..babbe19f57e2 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -1759,6 +1759,7 @@ int hyperv_write_cfg_blk(struct pci_dev *dev, void *buf, unsigned int len,
 int hyperv_reg_block_invalidate(struct pci_dev *dev, void *context,
 				void (*block_invalidate)(void *context,
 							 u64 block_mask));
+int __init hyperv_swiotlb_detect(void);
 
 struct hyperv_pci_block_ops {
 	int (*read_block)(struct pci_dev *dev, void *buf, unsigned int buf_len,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:52:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:52:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152555.281861 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19qF-0003AL-5x; Wed, 07 Jul 2021 15:52:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152555.281861; Wed, 07 Jul 2021 15:52:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19qF-00039z-1F; Wed, 07 Jul 2021 15:52:03 +0000
Received: by outflank-mailman (input) for mailman id 152555;
 Wed, 07 Jul 2021 15:52:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hxnL=L7=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m19mJ-0002ed-6s
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:47:59 +0000
Received: from mail-pf1-x429.google.com (unknown [2607:f8b0:4864:20::429])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 58f9da59-0e9c-4f53-8c76-da520f0ea693;
 Wed, 07 Jul 2021 15:47:11 +0000 (UTC)
Received: by mail-pf1-x429.google.com with SMTP id b12so2541184pfv.6
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 08:47:11 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:38:6b47:cf3e:bbf2:d229])
 by smtp.gmail.com with ESMTPSA id q18sm23093560pgj.8.2021.07.07.08.47.09
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 07 Jul 2021 08:47:10 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 58f9da59-0e9c-4f53-8c76-da520f0ea693
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=d9G7rX1Wf2e4jgYzMUXcCiOPT4rIMtwlWsRa/j4ZTx8=;
        b=MBccprpsRZbRBzn6Q74+KmpWH/C6n7RGUH8aA689Jf6+OWOMykcnt/ZY37atWT4gic
         DOjRNhV5KQvMsBL9VxsrKxt3IkxH7xLFDJNZiPni9y6shi6ugb60m7cU9VeXX64Y81LP
         xgPcv35SphN43aCrwRWGJr9XUKndx9QxVUhL/4TdO18lYNSAEJluabGylM3ACDVDtJ/h
         sBUs2A7aqcwl2SUBmvmD4p7RBT0gOmbRB7ShQ8nx7G0M5dGHQbYtntiAQ27Cy6+XC6wa
         f+tRGI3zFgJhUOaZEHGkNaMdOsoeZm+p5CYOC1oMvnExhumjI6l4IEtWCcA/ChkzHZO4
         5tCQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=d9G7rX1Wf2e4jgYzMUXcCiOPT4rIMtwlWsRa/j4ZTx8=;
        b=A8TPfNDrWOTGn2HkaBQq2x6wT3q8KzAMdleh3wfDJajbzUMMGWBI+RqtAhm3s1Ml9z
         jYGvj0oZqmCDbV7P5Qe7SdZXWl7W6u9XLTreSrQRzmhVg54ZqnMhZGnSmqJnwcxX9ipt
         Vxp2mkuSLPzYjvV7cYZNEulg8YE9o0s1KCqDFKqQ8yM46U855hFmDq2MC8lfhbBWiKs5
         vAOGt7Xqf2p3Z3VE05ZdefyKeARV2Q1Wns+WQCl5mtJsb5JTHAzQJmZrwHH2Uk4mJkj+
         KWOQ+LUPbWxHyiucG6IS5pLBZmLSOGg037i07XpWLb3whnapft2WeXpCZRfPs6nNcCi1
         Z5iQ==
X-Gm-Message-State: AOAM530KhN2obSP52bZUqPPWO+gn3HOmwutnWKeaqm04OJaDAlCWUo8P
	fS0zY2SErwtuv6bFsAhjYjE=
X-Google-Smtp-Source: ABdhPJzvlBIKPtUWe4+tZyz+A3EwlEGnKYo9dj5XU3MYJvkGWWUZOwWT2GALfxenXK+wdhiIBd383w==
X-Received: by 2002:a63:d915:: with SMTP id r21mr26953592pgg.283.1625672830421;
        Wed, 07 Jul 2021 08:47:10 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	Tianyu.Lan@microsoft.com,
	thomas.lendacky@amd.com,
	ardb@kernel.org,
	robh@kernel.org,
	nramas@linux.microsoft.com,
	pgonda@google.com,
	martin.b.radev@gmail.com,
	david@redhat.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	keescook@chromium.org,
	rientjes@google.com,
	hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: [Resend RFC PATCH V4 11/13] HV/Netvsc: Add Isolation VM support for netvsc driver
Date: Wed,  7 Jul 2021 11:46:25 -0400
Message-Id: <20210707154629.3977369-12-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210707154629.3977369-1-ltykernel@gmail.com>
References: <20210707154629.3977369-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM, all shared memory with host needs to mark visible
to host via hvcall. vmbus_establish_gpadl() has already done it for
netvsc rx/tx ring buffer. The page buffer used by vmbus_sendpacket_
pagebuffer() still need to handle. Use DMA API to map/umap these
memory during sending/receiving packet and Hyper-V DMA ops callback
will use swiotlb function to allocate bounce buffer and copy data
from/to bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/net/hyperv/hyperv_net.h   |   6 ++
 drivers/net/hyperv/netvsc.c       | 144 +++++++++++++++++++++++++++++-
 drivers/net/hyperv/rndis_filter.c |   2 +
 include/linux/hyperv.h            |   5 ++
 4 files changed, 154 insertions(+), 3 deletions(-)

diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index b11aa68b44ec..c2fbb9d4df2c 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -164,6 +164,7 @@ struct hv_netvsc_packet {
 	u32 total_bytes;
 	u32 send_buf_index;
 	u32 total_data_buflen;
+	struct hv_dma_range *dma_range;
 };
 
 #define NETVSC_HASH_KEYLEN 40
@@ -1074,6 +1075,7 @@ struct netvsc_device {
 
 	/* Receive buffer allocated by us but manages by NetVSP */
 	void *recv_buf;
+	void *recv_original_buf;
 	u32 recv_buf_size; /* allocated bytes */
 	u32 recv_buf_gpadl_handle;
 	u32 recv_section_cnt;
@@ -1082,6 +1084,8 @@ struct netvsc_device {
 
 	/* Send buffer allocated by us */
 	void *send_buf;
+	void *send_original_buf;
+	u32 send_buf_size;
 	u32 send_buf_gpadl_handle;
 	u32 send_section_cnt;
 	u32 send_section_size;
@@ -1729,4 +1733,6 @@ struct rndis_message {
 #define RETRY_US_HI	10000
 #define RETRY_MAX	2000	/* >10 sec */
 
+void netvsc_dma_unmap(struct hv_device *hv_dev,
+		      struct hv_netvsc_packet *packet);
 #endif /* _HYPERV_NET_H */
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 7bd935412853..fc312e5db4d5 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -153,8 +153,21 @@ static void free_netvsc_device(struct rcu_head *head)
 	int i;
 
 	kfree(nvdev->extension);
-	vfree(nvdev->recv_buf);
-	vfree(nvdev->send_buf);
+
+	if (nvdev->recv_original_buf) {
+		vunmap(nvdev->recv_buf);
+		vfree(nvdev->recv_original_buf);
+	} else {
+		vfree(nvdev->recv_buf);
+	}
+
+	if (nvdev->send_original_buf) {
+		vunmap(nvdev->send_buf);
+		vfree(nvdev->send_original_buf);
+	} else {
+		vfree(nvdev->send_buf);
+	}
+
 	kfree(nvdev->send_section_map);
 
 	for (i = 0; i < VRSS_CHANNEL_MAX; i++) {
@@ -330,6 +343,27 @@ int netvsc_alloc_recv_comp_ring(struct netvsc_device *net_device, u32 q_idx)
 	return nvchan->mrc.slots ? 0 : -ENOMEM;
 }
 
+static void *netvsc_remap_buf(void *buf, unsigned long size)
+{
+	unsigned long *pfns;
+	void *vaddr;
+	int i;
+
+	pfns = kcalloc(size / HV_HYP_PAGE_SIZE, sizeof(unsigned long),
+		       GFP_KERNEL);
+	if (!pfns)
+		return NULL;
+
+	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+		pfns[i] = virt_to_hvpfn(buf + i * HV_HYP_PAGE_SIZE)
+			+ (ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+
+	vaddr = vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE, PAGE_KERNEL_IO);
+	kfree(pfns);
+
+	return vaddr;
+}
+
 static int netvsc_init_buf(struct hv_device *device,
 			   struct netvsc_device *net_device,
 			   const struct netvsc_device_info *device_info)
@@ -340,6 +374,7 @@ static int netvsc_init_buf(struct hv_device *device,
 	unsigned int buf_size;
 	size_t map_words;
 	int i, ret = 0;
+	void *vaddr;
 
 	/* Get receive buffer area. */
 	buf_size = device_info->recv_sections * device_info->recv_section_size;
@@ -375,6 +410,15 @@ static int netvsc_init_buf(struct hv_device *device,
 		goto cleanup;
 	}
 
+	if (hv_isolation_type_snp()) {
+		vaddr = netvsc_remap_buf(net_device->recv_buf, buf_size);
+		if (!vaddr)
+			goto cleanup;
+
+		net_device->recv_original_buf = net_device->recv_buf;
+		net_device->recv_buf = vaddr;
+	}
+
 	/* Notify the NetVsp of the gpadl handle */
 	init_packet = &net_device->channel_init_pkt;
 	memset(init_packet, 0, sizeof(struct nvsp_message));
@@ -477,6 +521,15 @@ static int netvsc_init_buf(struct hv_device *device,
 		goto cleanup;
 	}
 
+	if (hv_isolation_type_snp()) {
+		vaddr = netvsc_remap_buf(net_device->send_buf, buf_size);
+		if (!vaddr)
+			goto cleanup;
+
+		net_device->send_original_buf = net_device->send_buf;
+		net_device->send_buf = vaddr;
+	}
+
 	/* Notify the NetVsp of the gpadl handle */
 	init_packet = &net_device->channel_init_pkt;
 	memset(init_packet, 0, sizeof(struct nvsp_message));
@@ -767,7 +820,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev,
 
 	/* Notify the layer above us */
 	if (likely(skb)) {
-		const struct hv_netvsc_packet *packet
+		struct hv_netvsc_packet *packet
 			= (struct hv_netvsc_packet *)skb->cb;
 		u32 send_index = packet->send_buf_index;
 		struct netvsc_stats *tx_stats;
@@ -783,6 +836,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev,
 		tx_stats->bytes += packet->total_bytes;
 		u64_stats_update_end(&tx_stats->syncp);
 
+		netvsc_dma_unmap(ndev_ctx->device_ctx, packet);
 		napi_consume_skb(skb, budget);
 	}
 
@@ -947,6 +1001,82 @@ static void netvsc_copy_to_send_buf(struct netvsc_device *net_device,
 		memset(dest, 0, padding);
 }
 
+void netvsc_dma_unmap(struct hv_device *hv_dev,
+		      struct hv_netvsc_packet *packet)
+{
+	u32 page_count = packet->cp_partial ?
+		packet->page_buf_cnt - packet->rmsg_pgcnt :
+		packet->page_buf_cnt;
+	int i;
+
+	if (!hv_is_isolation_supported())
+		return;
+
+	if (!packet->dma_range)
+		return;
+
+	for (i = 0; i < page_count; i++)
+		dma_unmap_single(&hv_dev->device, packet->dma_range[i].dma,
+				 packet->dma_range[i].mapping_size,
+				 DMA_TO_DEVICE);
+
+	kfree(packet->dma_range);
+}
+
+/* netvsc_dma_map - Map swiotlb bounce buffer with data page of
+ * packet sent by vmbus_sendpacket_pagebuffer() in the Isolation
+ * VM.
+ *
+ * In isolation VM, netvsc send buffer has been marked visible to
+ * host and so the data copied to send buffer doesn't need to use
+ * bounce buffer. The data pages handled by vmbus_sendpacket_pagebuffer()
+ * may not be copied to send buffer and so these pages need to be
+ * mapped with swiotlb bounce buffer. netvsc_dma_map() is to do
+ * that. The pfns in the struct hv_page_buffer need to be converted
+ * to bounce buffer's pfn. The loop here is necessary and so not
+ * use dma_map_sg() here.
+ */
+int netvsc_dma_map(struct hv_device *hv_dev,
+		   struct hv_netvsc_packet *packet,
+		   struct hv_page_buffer *pb)
+{
+	u32 page_count =  packet->cp_partial ?
+		packet->page_buf_cnt - packet->rmsg_pgcnt :
+		packet->page_buf_cnt;
+	dma_addr_t dma;
+	int i;
+
+	if (!hv_is_isolation_supported())
+		return 0;
+
+	packet->dma_range = kcalloc(page_count,
+				    sizeof(*packet->dma_range),
+				    GFP_KERNEL);
+	if (!packet->dma_range)
+		return -ENOMEM;
+
+	for (i = 0; i < page_count; i++) {
+		char *src = phys_to_virt((pb[i].pfn << HV_HYP_PAGE_SHIFT)
+					 + pb[i].offset);
+		u32 len = pb[i].len;
+
+		dma = dma_map_single(&hv_dev->device, src, len,
+				     DMA_TO_DEVICE);
+		if (dma_mapping_error(&hv_dev->device, dma)) {
+			kfree(packet->dma_range);
+			return -ENOMEM;
+		}
+
+		packet->dma_range[i].dma = dma;
+		packet->dma_range[i].mapping_size = len;
+		pb[i].pfn = dma >> HV_HYP_PAGE_SHIFT;
+		pb[i].offset = offset_in_hvpage(dma);
+		pb[i].len = len;
+	}
+
+	return 0;
+}
+
 static inline int netvsc_send_pkt(
 	struct hv_device *device,
 	struct hv_netvsc_packet *packet,
@@ -987,14 +1117,22 @@ static inline int netvsc_send_pkt(
 
 	trace_nvsp_send_pkt(ndev, out_channel, rpkt);
 
+	packet->dma_range = NULL;
 	if (packet->page_buf_cnt) {
 		if (packet->cp_partial)
 			pb += packet->rmsg_pgcnt;
 
+		ret = netvsc_dma_map(ndev_ctx->device_ctx, packet, pb);
+		if (ret)
+			return ret;
+
 		ret = vmbus_sendpacket_pagebuffer(out_channel,
 						  pb, packet->page_buf_cnt,
 						  &nvmsg, sizeof(nvmsg),
 						  req_id);
+
+		if (ret)
+			netvsc_dma_unmap(ndev_ctx->device_ctx, packet);
 	} else {
 		ret = vmbus_sendpacket(out_channel,
 				       &nvmsg, sizeof(nvmsg),
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index 983bf362466a..9425fee85aa0 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -361,6 +361,8 @@ static void rndis_filter_receive_response(struct net_device *ndev,
 			}
 		}
 
+		netvsc_dma_unmap(((struct net_device_context *)
+			netdev_priv(ndev))->device_ctx, &request->pkt);
 		complete(&request->wait_event);
 	} else {
 		netdev_err(ndev,
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index babbe19f57e2..90abff664495 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -1616,6 +1616,11 @@ struct hyperv_service_callback {
 	void (*callback)(void *context);
 };
 
+struct hv_dma_range {
+	dma_addr_t dma;
+	u32 mapping_size;
+};
+
 #define MAX_SRV_VER	0x7ffffff
 extern bool vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, u8 *buf, u32 buflen,
 				const int *fw_version, int fw_vercnt,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:56:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:56:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152591.281884 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19uO-0004xn-Qq; Wed, 07 Jul 2021 15:56:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152591.281884; Wed, 07 Jul 2021 15:56:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19uO-0004xg-NK; Wed, 07 Jul 2021 15:56:20 +0000
Received: by outflank-mailman (input) for mailman id 152591;
 Wed, 07 Jul 2021 15:56:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=zlai=L7=qq.com=2284696125@srs-us1.protection.inumbo.net>)
 id 1m19uM-0004xY-Bf
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:56:18 +0000
Received: from out203-205-221-239.mail.qq.com (unknown [203.205.221.239])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d9cebefe-df3b-11eb-850e-12813bfff9fa;
 Wed, 07 Jul 2021 15:56:13 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d9cebefe-df3b-11eb-850e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512;
	t=1625673371; bh=gU9PwkPvVjvpOG/849OouiNNqbZ2nTR1gkL3F74vuBI=;
	h=From:To:Subject:Date;
	b=G4Xb4TdyejT2gMGyIYILNMWtM4NguJKXhS0wvLxFvQy7MKmenR3N/h/R0n8TV3O0P
	 5Moqg+gF2FbpyzQOyku8m12vtEu1PK66aROFbPKrlm4/H3aPn9pdT6O/e92KZ64y6r
	 +t8+FvZ2RwaAT9lSd3o9QTf1nhAuzR2UYgzr2sHQ=
X-QQ-FEAT: Tubeh+4qKFT1T4gLbOBFKlsKho+WWiltTzFZv2Qu/RuMrS5aO65N0BwF64ZAd
	aBKl0ZAC772MiE3e8Bgqxmx60q0Cgm4mwdU3N4fs4YTBPYoJbVc1YWRXNsvc0iwifWwI6P6
	CvxrQ8qgFQlm7CpRKCvp3tEqZDiLlDUC9jvnbbadEitnb//AHp+peJ1Zd87yI6NmvgW2ARA
	1OZ5yXqT/lN44vlqxFhFMN9ieKPoWd8aXsHJPxAiWyM1FXdslQXHObWkipLuH0FoBSllMD6
	QwIlrbQxedh2gphMdIvt81+tk=
X-QQ-SSF: 0000000000000020000000000000007
X-QQ-XMAILINFO: OXr5wBFSWZxs/dPOZTuBSXuuS0RGK46uu27w2a08n3LbpKZ1YlUOPsgk5MJv6q
	 BX9jfbWXyYNzvv//ZMJpHjfltsTZhWYZBAWQExWPR/mdYeoX7j56wRIIfhXc1zgLCFhEAvaWVnX7w
	 IB1UyYfmSEstmLE6h4L1nMzHqsBUaTm90F4vM9Q4XxLWHNbdaX0VsKm6MRj/hMRU7c/J0TRAmRTDY
	 OaPyHMVfsNTVuaVJiieFlr6SZJ2Pi6KIxu+iYbneZWX/NwKTwj5TWujK3rjdgqXjnZDKXca0I+zs+
	 qjK+0EXcOhDOmy2GEANr79HyyyeIwFlPDgP41NcU26Y2cxKOmekNPDh7qbTR9DOR+dGMrCs6nqSUX
	 1qd62vBgkNv09sWPWh2D/olt0xRcCg2Cy3AN+n8GFY5OTiFQpHuZ4KXGpvKWxKPjPyvY90TCRzZlD
	 omIRWQOa+7SOy/GzDVEIOH0rsKmufIXAoahv1vQ2bWdYOlugrd3UfDBx+Bd0E0qgwXB+DVNZQO9yE
	 T+3opATOx//MFKYYxjgkKazjHgDUknD9GP1jx+m5BaOQQo+vM2QBLMUYXoFL0FySjiaiT+IXOdpOB
	 S9Gnpl7NpFqXqPx19ZFtUlxRFsProIyOiGn6fEj/+d10cVgwa6pdOOSGeulS6Qf0qktiVColpH55I
	 9xhW4q2vyfk7WRKC6q4odQddoXHQBI6cm8cnIvmNYl3IdknnsPo+ZjRygjmCrd0c9Jbdad+G2vmjZ
	 FpF8Di5wsbN7f2/WOK3/0fzVSWXaVARaPVl6NuvD68olWL4GFSMWnXqhq87tN4Hxm4zvmQGLKEb1/
	 0VNoVQHHI0RY
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 183.172.183.118
X-QQ-STYLE: 
X-QQ-mid: webmail801t1625673298t5344344
From: "=?gb18030?B?UnJvYWNo?=" <2284696125@qq.com>
To: "=?gb18030?B?SmFuIEJldWxpY2g=?=" <jbeulich@suse.com>, "=?gb18030?B?eGVuLWRldmVs?=" <xen-devel@lists.xenproject.org>
Subject: Re:  A possible pointer_overflow in xen-4.13
Mime-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_60E5CE52_0FE68AE8_0D77FB4E"
Content-Transfer-Encoding: 8Bit
Date: Wed, 7 Jul 2021 23:54:58 +0800
X-Priority: 3
Message-ID: <tencent_4882F9152B24798C8A395FEE6E9C3DFADE07@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
X-QQ-ReplyHash: 3526436329

This is a multi-part message in MIME format.

------=_NextPart_60E5CE52_0FE68AE8_0D77FB4E
Content-Type: text/plain;
	charset="gb18030"
Content-Transfer-Encoding: base64

SGksIHNvcnJ5IGFib3V0IHRoZSBsYXRlIHJlc3BvbmQuIEkgdHJpZWQgeW91ciBzdWdnZXN0
aW9uLCBpdCB3b3Jrcy4gSSdtIGtpbmQgb2Ygc3VycHJpc2VkIHRvbywgc2luY2Ugc3VjaCBw
cm9ibGVtIHNob3VsZCBleHBvc2VkIGxvbmcgdGltZSBhZ28uJm5ic3A7DQoNCg0KSSBsb29r
ZWQgZGVlcCBpbnRvIHlvdXIgc3VnZ2VzdGlvbi4gSSBiZWxpZXZlIHlvdSB3ZXJlIHJpZ2h0
IGFib3V0IGl0LCBzaW5jZSBwIC0gY3R4dC0mZ3Q7aW9fZW11bF9zdHViICZuYnNwO3dvbid0
IG92ZXJmbG93IGFuZCB0aGUgcG9pbnRlciBvdmVyZmxvdyBpcyBsaWtlbHkgdG8gaGFwcGVu
ICZuYnNwO2luJm5ic3A7Jm5ic3A7c3R1Yl92YSArIHAgb3ImbmJzcDtjdHh0LSZndDtpb19l
bXVsX3N0dWIuJm5ic3A7DQoNCg0KQW5kcmV3J3Mgc3VnZ2VzdGlvbiB3b3JrcyBwZXJoYXBz
IGl0IHRoZSBsb25nIHZhcmlhYmxlIGFsbG93cyB0aGUgZXhwcmVzc2lvbiB0byBzdG9yZSBt
b3JlIGJ5dGVzLCBob3dldmVyIGluIGxvbmcgdGVybSBpdCBtYXkgbm90IGJlIGEgc29saWQg
c29sdXRpb24uIFNvIGFsdGVybmF0aXZlIHNob3VsZCB3ZSB0YWtlIGJvdGggb2YgdGhlIGFk
dmlzZSB0aGF0IHVzaW5nDQorICZuYnNwOyBsb25nIGRpc3AgPSAobG9uZykoZikgLSAobG9u
Zykoc3R1Yl92YSArIChwIC0gY3R4dC0mZ3Q7aW9fZW11bF9zdHViKSArIDUpOyBcDQphcyBh
IGZpeCBwYXRjaA0KDQoNCkJlc3QgcmVnYXJkcw0KRnJhbmtsaW4NCg0KDQotLS0tLS0tLS0t
LS0tLS0tLS0mbmJzcDtPcmlnaW5hbCZuYnNwOy0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJvbTog
Jm5ic3A7IkphbiBCZXVsaWNoIjs8amJldWxpY2hAc3VzZS5jb20mZ3Q7Ow0KU2VuZCB0aW1l
OiZuYnNwO1dlZG5lc2RheSwgSnVsIDcsIDIwMjEgMzo1NSBQTQ0KVG86Jm5ic3A7IlJyb2Fj
aCI8MjI4NDY5NjEyNUBxcS5jb20mZ3Q7OyANCkNjOiZuYnNwOyJ4ZW4tZGV2ZWwiPHhlbi1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyZndDs7ICJBbmRyZXcgQ29vcGVyIjxhbmRyZXcu
Y29vcGVyM0BjaXRyaXguY29tJmd0OzsgDQpTdWJqZWN0OiAmbmJzcDtSZTogQSBwb3NzaWJs
ZSBwb2ludGVyX292ZXJmbG93IGluIHhlbi00LjEzDQoNCg0KDQpPbiAwNy4wNy4yMDIxIDA0
OjMyLCBScm9hY2ggd3JvdGU6DQomZ3Q7IEFmdGVyIHBhdGNoaW5nIGl0LCB0aGlzIHdvcmtz
IGZpbmUgYW5kIFVCU0FOIGRvc2Ugbm90IGhhdmUgYW55IGVycm9yIHJlcG9ydCBhYm91dCBp
dC4NCg0KV2hpY2ggSSdtIHN1cnByaXNlZCBhYm91dCwgYmVjYXVzZSBpbiBBbmRyZXcncyBz
dWdnZXN0aW9uIChzb3JyeSwNCm5lZWQgdG8gcmVwcm9kdWNlIGl0IG1hbnVhbGx5LCBiZWNh
dXNlIHF1b3RpbmcgeW91ciBIVE1MIG1haWwgaXMNCnJlbmRlcmluZyB1bnJlYWRhYmxlIHJl
c3VsdHMsIGFzIHlvdSBjYW4gc2VlIGJlbG93IGlmIHlvdSB2aWV3IGl0DQphcyBwbGFpbiB0
ZXh0KQ0KDQotLS0gYS94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMNCisrKyBiL3hl
bi9hcmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYw0KQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGlj
IGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0IHByaXZfb3BfY3R4
dCAqY3R4dCwgdTggb3Bjb2RlLA0KJm5ic3A7I2RlZmluZSBBUFBFTkRfQlVGRihiKSAoeyBt
ZW1jcHkocCwgYiwgc2l6ZW9mKGIpKTsgcCArPSBzaXplb2YoYik7IH0pDQombmJzcDsjZGVm
aW5lIEFQUEVORF9DQUxMKGYpJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFwNCiZuYnNwOyZu
YnNwOyZuYnNwOyAoeyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyBcDQotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChzdHViX3ZhICsgcCAtIGN0
eHQtJmd0O2lvX2VtdWxfc3R1YiArIDUpOyBcDQorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChsb25nKShzdHVi
X3ZhICsgcCAtIGN0eHQtJmd0O2lvX2VtdWxfc3R1YiArIDUpOyBcDQoNCnRoZXJlIGlzIHN0
aWxsIGEgcG9zc2libGUgcG9pbnRlciBvdmVyZmxvdyBhZmFpY3QsIHVubGlrZSBpbiB0aGUN
CnN1Z2dlc3Rpb24gSSBoYWQgZ2l2ZW46DQoNCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyBsb25nIGRpc3AgPSAobG9uZykoZikgLSAoc3R1Yl92YSArIChw
IC0gY3R4dC0mZ3Q7aW9fZW11bF9zdHViKSArIDUpOyBcDQoNClRoaXMgYmVjYXVzZSBvZiBl
eHByZXNzaW9uIGV2YWx1YXRpb24gb3JkZXIsIHdoaWNoIEkgdW5kZXJzdGFuZCB3b3VsZA0K
bWF0Y2ggdGhlIGZ1bGx5IHBhcmVudGhlc2l6ZWQNCg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChsb25nKSgo
KHN0dWJfdmEgKyBwKSAtIGN0eHQtJmd0O2lvX2VtdWxfc3R1YikgKyA1KTsgXA0KDQp3aGVy
ZSBib3RoIHN0dWJfdmEgKyBwIGFuZCB0aGUgc3Vic2VxdWVudCBzdWJ0cmFjdGlvbiBvZiBj
dHh0LSZndDtpb19lbXVsX3N0dWINCmFyZSBsaWFibGUgdG8gb3ZlcmZsb3cuIFdoZXJlYXMg
cCAtIGN0eHQtJmd0O2lvX2VtdWxfc3R1YiB3b24ndCBvdmVyZmxvdywgYXMNCnAgc3RhcnRz
IG91dCBmcm9tIGN0eHQtJmd0O2lvX2VtdWxfc3R1YiBhbmQgdGhlbiBnZXRzIGluY3JlbWVu
dGVkIGJ5IGEgZmV3IGJ5dGVzLg0KDQpXb3VsZCB5b3UgbWluZCBnaXZpbmcgdGhlIGFsdGVy
bmF0aXZlIHN1Z2dlc3Rpb24gYSB0cnkgYXMgd2VsbD8NCg0KSmFuDQoNCiZndDsgLS0tLS0t
LS0tLS0tLS0tLS0tJmFtcDtuYnNwO09yaWdpbmFsJmFtcDtuYnNwOy0tLS0tLS0tLS0tLS0t
LS0tLQ0KJmd0OyBGcm9tOiAmYW1wO25ic3A7IkFuZHJldyBDb29wZXIiOzxhbmRyZXcuY29v
cGVyM0BjaXRyaXguY29tJmFtcDtndDs7DQomZ3Q7IFNlbmQgdGltZTomYW1wO25ic3A7U2F0
dXJkYXksIEp1biAyNiwgMjAyMSA5OjUwIFBNDQomZ3Q7IFRvOiZhbXA7bmJzcDsiUnJvYWNo
IjwyMjg0Njk2MTI1QHFxLmNvbSZhbXA7Z3Q7OyAieGVuLWRldmVsIjx4ZW4tZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcmYW1wO2d0OzsgDQomZ3Q7IA0KJmd0OyBTdWJqZWN0OiAmYW1w
O25ic3A7UmU6IEEgcG9zc2libGUgcG9pbnRlcl9vdmVyZmxvdyBpbiB4ZW4tNC4xMw0KJmd0
OyANCiZndDsgDQomZ3Q7IA0KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBPbiAyNi8wNi8yMDIxIDE0OjI5
LCBScm9hY2ggd3JvdGU6DQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0K
Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBIaSwgSSBjb21waWxlIFhlbi00LjEzIHdpdGggQ09O
RklHX1VCU0FOLCBhbmQgdHJ5IHRlc3QmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaXQuIEhvd2V2ZXIs
IGR1cmluZyB0ZXN0aW5nLCB4bCBkbWVzZyBnb3QgdGhlIG91dHB1dCBhcyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyBzaG93biBiZWxvdy4NCiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQomZ3Q7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IA0KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGEgcG90ZW50
aWFsIHBvaW50ZXIgb3ZlcmZsb3cmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgd2l0aGluIGFyY2gveDg2
L3B2L2VtdWwtcHJpdi1vcC5jOjEzMSB3aGVyZSB4ZW4gdHJ5IHRvJm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IGV4ZWN1dGUgaW5zdHJ1Y3Rpb24gJycnIEFQUEVORF9DQUxMKHNhdmVfZ3Vlc3RfZ3By
cykmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgJycno6x3aGVyZSBBUFBFTkRfQ0FMTCB0cnkgdG8gYWRk
IGFuIG9mZnNldCBvbiAqcCB3aXRob3V0Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHByb3BlciBjaGVj
a2luZy4NCiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KJmd0OyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyBJIGNvbXBpbGVkIHhlbi00LjEzIGJ5IGNsYW5nLTksIHdpdGggZm9sbG93aW5n
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IGluc3RydWN0aW9uczogJycnIGV4cG9ydCBDT05GSUdfVUJT
QU49eSAnJycgJmFtcDthbXA7JmFtcDthbXA7ICcnJyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBtYWtl
IGNsYW5nPXkgZGVidWc9eSAnJycgLiBEbyB5b3UgaGF2ZSBhbnkgaWRlYSB3aGF0IGdvaW5n
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IG9uIGhlcmU/DQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KJmd0OyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCiZndDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgWW91IHNheSBYZW4gNC4xMywgYnV0IEFQ
UEVORF9DQUxMKCkgZG9lc24ndCBleGlzdCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyB0aGVyZS4mYW1wO25ic3A7IEkgYWRkZWQgaXQgaW4gNC4xNCB3aGVuIEkgcmV3
cm90ZSB0aGlzIG1lc3MgdG8gYmUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgY29tcGF0aWJsZSB3aXRoIENFVCBieSBub3QgdXNpbmcgYSBST1AgZ2FkZ2V0LiZhbXA7
bmJzcDsgWW91ciBiYWNrdHJhY2UmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgc2F5cyA0LjE1IHVuc3RhYmxlIHdoaWNoIG1lYW5zIGl0cyBhbiBvbGQgc3RhZ2luZyBi
dWlsZCAobm90IHRoYXQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdGhh
dCBpcyBnb2luZyB0byBoYXZlIGFueSBlZmZlY3Qgb24gdGhpcyBzcGVjaWZpYyBpc3N1ZSku
DQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KJmd0
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBUaGUgZmFjdCB0
aGF0IGl0IGNvbnRpbnVlZCBleGVjdXRpbmcgY29ycmVjdGx5IG1lYW5zIHRoZSZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjYWxjdWxhdGlvbiBkaWQgdGhlIHJpZ2h0
IHRoaW5nLCB3aGV0aGVyIG9yIG5vdCBVQlNBTiB3YXMgaGFwcHkuJm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFRoZSBkaXNwbGFjZW1lbnQgd2lsbCBlbmQg
dXAgbmVnYXRpdmUgYXMgdGhlIHN0dWIgd2UncmUgd3JpdGluZyBpcyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBudW1lcmljYWxseSBoaWdoZXIgdGhhbiB7bG9hZCxz
YXZlfV9ndWVzdF9ncHJzKCksIHdoaWNoIEkgZ3Vlc3MmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgbWVhbnMgdGhhdCBmIC0gc3R1Yl92YSB3aWxsIHVuZGVyZmxvdy4N
CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQomZ3Q7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEknbSB2ZXJ5IGNv
bmZ1c2VkIGFzIHRvIHdoeSBVQlNBTiByZXBvcnRzIGFnYWluc3QmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgc2F2ZV9ndWVzdF9ncHJzKCkgY29uc2lkZXJpbmcgdGhh
dCBsb2FkX2d1ZXN0X2dwcnMoKSB3aGVuIHRocm91Z2gmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgdGhlIGV4YWN0IHNhbWUgbG9naWMgYSBmZXcgaW5zdHJ1Y3Rpb25z
IGVhcmxpZXIuDQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IA0KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBF
aXRoZXIgd2F5LCBkb2VzIHRoaXMgbWFrZSB0aGUgcHJvYmxlbSBnbyBhd2F5Pw0KJmd0OyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCiZndDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZGlmZiAtLWdpdCBhL3hlbi9h
cmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyBiL3hlbi9hcmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYw0KJmd0OyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbmRleCAxMTQ2N2ExZTNhLi5i
ZTQxYmNlZDc2IDEwMDY0NA0KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyAtLS0gYS94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMNCiZndDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKysrIGIveGVuL2Fy
Y2gveDg2L3B2L2VtdWwtcHJpdi1vcC5jDQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IEBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBpb19lbXVsX3N0
dWJfdCAqaW9fZW11bF9zdHViX3NldHVwKHN0cnVjdCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyBwcml2X29wX2N0eHQgKmN0eHQsIHU4IG9wY29kZSwNCiZndDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmFtcDtuYnNwOyNkZWZp
bmUgQVBQRU5EX0JVRkYoYikgKHsgbWVtY3B5KHAsIGIsIHNpemVvZihiKSk7IHAgKz0mbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc2l6ZW9mKGIpOyB9KQ0KJmd0OyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO25ic3A7I2Rl
ZmluZSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBBUFBFTkRfQ0FMTChm
KSZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7ICZhbXA7bmJzcDsgXA0K
Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgKHsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFwNCiZn
dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLSZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7ICZhbXA7bmJzcDsg
bG9uZyBkaXNwID0gKGxvbmcpKGYpIC0gKHN0dWJfdmEgKyBwIC0mbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgY3R4dC0mYW1wO2d0O2lvX2VtdWxfc3R1YiArIDUpOyBc
DQomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyAmYW1wO25i
c3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChsb25nKShzdHViX3ZhICsgcCAtJm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGN0eHQtJmFtcDtndDtpb19lbXVsX3N0
dWIgKyA1KTsgXA0KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyAmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsgJmFtcDtuYnNwOyBCVUdfT04oKGludDMyX3QpZGlzcCAhPSZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBkaXNwKTsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7ICZhbXA7bmJzcDsgXA0KJmd0OyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsgJmFtcDtuYnNwOyAqcCsrID0m
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgMHhlODsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7ICZhbXA7bmJz
cDsgXA0KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsgJmFtcDtuYnNwOyAqKGludDMyX3QgKilwID0gZGlzcDsgcCArPSZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA0OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7ICZhbXA7bmJzcDsgXA0KJmd0OyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCiZndDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfkFuZHJldw0KJmd0Ow==

------=_NextPart_60E5CE52_0FE68AE8_0D77FB4E
Content-Type: text/html;
	charset="gb18030"
Content-Transfer-Encoding: base64

PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9R0IxODAzMCI+PGRpdj5IaSwgc29ycnkgYWJvdXQgdGhlIGxhdGUgcmVzcG9uZC4g
SSB0cmllZCB5b3VyIHN1Z2dlc3Rpb24sIGl0IHdvcmtzLiBJJ20ga2luZCBvZiBzdXJwcmlz
ZWQgdG9vLCBzaW5jZSBzdWNoIHByb2JsZW0gc2hvdWxkIGV4cG9zZWQgbG9uZyB0aW1lIGFn
by4mbmJzcDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkkgbG9va2VkIGRlZXAgaW50byB5
b3VyIHN1Z2dlc3Rpb24uIEkgYmVsaWV2ZSB5b3Ugd2VyZSByaWdodCBhYm91dCBpdCwgc2lu
Y2UgcCAtIGN0eHQtJmd0O2lvX2VtdWxfc3R1YiAmbmJzcDt3b24ndCBvdmVyZmxvdyBhbmQg
dGhlIHBvaW50ZXIgb3ZlcmZsb3cgaXMgbGlrZWx5IHRvIGhhcHBlbiAmbmJzcDtpbiZuYnNw
OyZuYnNwO3N0dWJfdmEgKyBwIG9yJm5ic3A7Y3R4dC0mZ3Q7aW9fZW11bF9zdHViLiZuYnNw
OzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QW5kcmV3J3Mgc3VnZ2VzdGlvbiB3b3JrcyBw
ZXJoYXBzIGl0IHRoZSBsb25nIHZhcmlhYmxlIGFsbG93cyB0aGUgZXhwcmVzc2lvbiB0byBz
dG9yZSBtb3JlIGJ5dGVzLCBob3dldmVyIGluIGxvbmcgdGVybSBpdCBtYXkgbm90IGJlIGEg
c29saWQgc29sdXRpb24uIFNvIGFsdGVybmF0aXZlIHNob3VsZCB3ZSB0YWtlIGJvdGggb2Yg
dGhlIGFkdmlzZSB0aGF0IHVzaW5nPC9kaXY+PGRpdj4rICZuYnNwOyBsb25nIGRpc3AgPSAo
bG9uZykoZikgLSAobG9uZykoc3R1Yl92YSArIChwIC0gY3R4dC0mZ3Q7aW9fZW11bF9zdHVi
KSArIDUpOyBcPC9kaXY+PGRpdj5hcyBhIGZpeCBwYXRjaDwvZGl2PjxkaXY+PGRpdj48YnI+
PC9kaXY+PGRpdj5CZXN0IHJlZ2FyZHM8L2Rpdj48ZGl2PkZyYW5rbGluPC9kaXY+PGRpdj48
YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMnB4O2ZvbnQtZmFtaWx5OiBBcmlh
bCBOYXJyb3c7cGFkZGluZzoycHggMCAycHggMDsiPi0tLS0tLS0tLS0tLS0tLS0tLSZuYnNw
O09yaWdpbmFsJm5ic3A7LS0tLS0tLS0tLS0tLS0tLS0tPC9kaXY+PGRpdiBzdHlsZT0iZm9u
dC1zaXplOiAxMnB4O2JhY2tncm91bmQ6I2VmZWZlZjtwYWRkaW5nOjhweDsiPjxkaXY+PGI+
RnJvbTogPC9iPiZuYnNwOyJKYW4gQmV1bGljaCI7Jmx0O2piZXVsaWNoQHN1c2UuY29tJmd0
Ozs8L2Rpdj48ZGl2PjxiPlNlbmQgdGltZTo8L2I+Jm5ic3A7V2VkbmVzZGF5LCBKdWwgNywg
MjAyMSAzOjU1IFBNPC9kaXY+PGRpdj48Yj5Ubzo8L2I+Jm5ic3A7IlJyb2FjaCImbHQ7MjI4
NDY5NjEyNUBxcS5jb20mZ3Q7OyA8d2JyPjwvZGl2PjxkaXY+PGI+Q2M6PC9iPiZuYnNwOyJ4
ZW4tZGV2ZWwiJmx0O3hlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyZndDs7ICJBbmRy
ZXcgQ29vcGVyIiZsdDthbmRyZXcuY29vcGVyM0BjaXRyaXguY29tJmd0OzsgPHdicj48L2Rp
dj48ZGl2PjxiPlN1YmplY3Q6IDwvYj4mbmJzcDtSZTogQSBwb3NzaWJsZSBwb2ludGVyX292
ZXJmbG93IGluIHhlbi00LjEzPC9kaXY+PC9kaXY+PGRpdj48YnI+PC9kaXY+T24gMDcuMDcu
MjAyMSAwNDozMiwgUnJvYWNoIHdyb3RlOjxicj4mZ3Q7IEFmdGVyIHBhdGNoaW5nIGl0LCB0
aGlzIHdvcmtzIGZpbmUgYW5kIFVCU0FOIGRvc2Ugbm90IGhhdmUgYW55IGVycm9yIHJlcG9y
dCBhYm91dCBpdC48YnI+PGJyPldoaWNoIEknbSBzdXJwcmlzZWQgYWJvdXQsIGJlY2F1c2Ug
aW4gQW5kcmV3J3Mgc3VnZ2VzdGlvbiAoc29ycnksPGJyPm5lZWQgdG8gcmVwcm9kdWNlIGl0
IG1hbnVhbGx5LCBiZWNhdXNlIHF1b3RpbmcgeW91ciBIVE1MIG1haWwgaXM8YnI+cmVuZGVy
aW5nIHVucmVhZGFibGUgcmVzdWx0cywgYXMgeW91IGNhbiBzZWUgYmVsb3cgaWYgeW91IHZp
ZXcgaXQ8YnI+YXMgcGxhaW4gdGV4dCk8YnI+PGJyPi0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9l
bXVsLXByaXYtb3AuYzxicj4rKysgYi94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmM8
YnI+QEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0
dWJfc2V0dXAoc3RydWN0IHByaXZfb3BfY3R4dCAqY3R4dCwgdTggb3Bjb2RlLDxicj4mbmJz
cDsjZGVmaW5lIEFQUEVORF9CVUZGKGIpICh7IG1lbWNweShwLCBiLCBzaXplb2YoYikpOyBw
ICs9IHNpemVvZihiKTsgfSk8YnI+Jm5ic3A7I2RlZmluZSBBUFBFTkRfQ0FMTChmKSZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyBcPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAoeyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBc
PGJyPi0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbG9uZyBk
aXNwID0gKGxvbmcpKGYpIC0gKHN0dWJfdmEgKyBwIC0gY3R4dC0mZ3Q7aW9fZW11bF9zdHVi
ICsgNSk7IFw8YnI+KyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyBsb25nIGRpc3AgPSAobG9uZykoZikgLSAobG9uZykoc3R1Yl92YSArIHAgLSBjdHh0LSZn
dDtpb19lbXVsX3N0dWIgKyA1KTsgXDxicj48YnI+dGhlcmUgaXMgc3RpbGwgYSBwb3NzaWJs
ZSBwb2ludGVyIG92ZXJmbG93IGFmYWljdCwgdW5saWtlIGluIHRoZTxicj5zdWdnZXN0aW9u
IEkgaGFkIGdpdmVuOjxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChzdHViX3ZhICsgKHAgLSBjdHh0
LSZndDtpb19lbXVsX3N0dWIpICsgNSk7IFw8YnI+PGJyPlRoaXMgYmVjYXVzZSBvZiBleHBy
ZXNzaW9uIGV2YWx1YXRpb24gb3JkZXIsIHdoaWNoIEkgdW5kZXJzdGFuZCB3b3VsZDxicj5t
YXRjaCB0aGUgZnVsbHkgcGFyZW50aGVzaXplZDxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGxvbmcgZGlzcCA9IChsb25nKShmKSAtIChsb25n
KSgoKHN0dWJfdmEgKyBwKSAtIGN0eHQtJmd0O2lvX2VtdWxfc3R1YikgKyA1KTsgXDxicj48
YnI+d2hlcmUgYm90aCBzdHViX3ZhICsgcCBhbmQgdGhlIHN1YnNlcXVlbnQgc3VidHJhY3Rp
b24gb2YgY3R4dC0mZ3Q7aW9fZW11bF9zdHViPGJyPmFyZSBsaWFibGUgdG8gb3ZlcmZsb3cu
IFdoZXJlYXMgcCAtIGN0eHQtJmd0O2lvX2VtdWxfc3R1YiB3b24ndCBvdmVyZmxvdywgYXM8
YnI+cCBzdGFydHMgb3V0IGZyb20gY3R4dC0mZ3Q7aW9fZW11bF9zdHViIGFuZCB0aGVuIGdl
dHMgaW5jcmVtZW50ZWQgYnkgYSBmZXcgYnl0ZXMuPGJyPjxicj5Xb3VsZCB5b3UgbWluZCBn
aXZpbmcgdGhlIGFsdGVybmF0aXZlIHN1Z2dlc3Rpb24gYSB0cnkgYXMgd2VsbD88YnI+PGJy
Pkphbjxicj48YnI+Jmd0OyAtLS0tLS0tLS0tLS0tLS0tLS0mYW1wO25ic3A7T3JpZ2luYWwm
YW1wO25ic3A7LS0tLS0tLS0tLS0tLS0tLS0tPGJyPiZndDsgRnJvbTogJmFtcDtuYnNwOyJB
bmRyZXcgQ29vcGVyIjsmbHQ7YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbSZhbXA7Z3Q7Ozxi
cj4mZ3Q7IFNlbmQgdGltZTomYW1wO25ic3A7U2F0dXJkYXksIEp1biAyNiwgMjAyMSA5OjUw
IFBNPGJyPiZndDsgVG86JmFtcDtuYnNwOyJScm9hY2giJmx0OzIyODQ2OTYxMjVAcXEuY29t
JmFtcDtndDs7ICJ4ZW4tZGV2ZWwiJmx0O3hlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZyZhbXA7Z3Q7OyA8YnI+Jmd0OyA8YnI+Jmd0OyBTdWJqZWN0OiAmYW1wO25ic3A7UmU6IEEg
cG9zc2libGUgcG9pbnRlcl9vdmVyZmxvdyBpbiB4ZW4tNC4xMzxicj4mZ3Q7IDxicj4mZ3Q7
IDxicj4mZ3Q7IDxicj4mZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE9uIDI2LzA2LzIwMjEgMTQ6MjksIFJy
b2FjaCB3cm90ZTo8YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+
Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBIaSwgSSBjb21waWxlIFhlbi00LjEzIHdpdGggQ09O
RklHX1VCU0FOLCBhbmQgdHJ5IHRlc3QmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaXQuIEhvd2V2ZXIs
IGR1cmluZyB0ZXN0aW5nLCB4bCBkbWVzZyBnb3QgdGhlIG91dHB1dCBhcyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyBzaG93biBiZWxvdy48YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+Jmd0OyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyA8YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGEg
cG90ZW50aWFsIHBvaW50ZXIgb3ZlcmZsb3cmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgd2l0aGluIGFy
Y2gveDg2L3B2L2VtdWwtcHJpdi1vcC5jOjEzMSB3aGVyZSB4ZW4gdHJ5IHRvJm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7IGV4ZWN1dGUgaW5zdHJ1Y3Rpb24gJycnIEFQUEVORF9DQUxMKHNhdmVfZ3Vl
c3RfZ3BycykmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJycno6x3aGVyZSBBUFBFTkRfQ0FMTCB0cnkg
dG8gYWRkIGFuIG9mZnNldCBvbiAqcCB3aXRob3V0Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHByb3Bl
ciBjaGVja2luZy48YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+Jmd0OyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8
YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyBJIGNvbXBpbGVkIHhlbi00LjEzIGJ5IGNsYW5nLTksIHdp
dGggZm9sbG93aW5nJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGluc3RydWN0aW9uczogJycnIGV4cG9y
dCBDT05GSUdfVUJTQU49eSAnJycgJmFtcDthbXA7JmFtcDthbXA7ICcnJyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyBtYWtlIGNsYW5nPXkgZGVidWc9eSAnJycgLiBEbyB5b3UgaGF2ZSBhbnkgaWRl
YSB3aGF0IGdvaW5nJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IG9uIGhlcmU/PGJyPiZndDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPGJyPiZn
dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsgPGJyPiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgWW91IHNh
eSBYZW4gNC4xMywgYnV0IEFQUEVORF9DQUxMKCkgZG9lc24ndCBleGlzdCZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0aGVyZS4mYW1wO25ic3A7IEkgYWRkZWQgaXQg
aW4gNC4xNCB3aGVuIEkgcmV3cm90ZSB0aGlzIG1lc3MgdG8gYmUmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgY29tcGF0aWJsZSB3aXRoIENFVCBieSBub3QgdXNpbmcg
YSBST1AgZ2FkZ2V0LiZhbXA7bmJzcDsgWW91ciBiYWNrdHJhY2UmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgc2F5cyA0LjE1IHVuc3RhYmxlIHdoaWNoIG1lYW5zIGl0
cyBhbiBvbGQgc3RhZ2luZyBidWlsZCAobm90IHRoYXQmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgdGhhdCBpcyBnb2luZyB0byBoYXZlIGFueSBlZmZlY3Qgb24gdGhp
cyBzcGVjaWZpYyBpc3N1ZSkuPGJyPiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgPGJyPiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgVGhlIGZhY3QgdGhhdCBpdCBjb250aW51ZWQgZXhlY3V0aW5nIGNvcnJl
Y3RseSBtZWFucyB0aGUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY2Fs
Y3VsYXRpb24gZGlkIHRoZSByaWdodCB0aGluZywgd2hldGhlciBvciBub3QgVUJTQU4gd2Fz
IGhhcHB5LiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBUaGUg
ZGlzcGxhY2VtZW50IHdpbGwgZW5kIHVwIG5lZ2F0aXZlIGFzIHRoZSBzdHViIHdlJ3JlIHdy
aXRpbmcgaXMmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbnVtZXJpY2Fs
bHkgaGlnaGVyIHRoYW4ge2xvYWQsc2F2ZX1fZ3Vlc3RfZ3BycygpLCB3aGljaCBJIGd1ZXNz
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IG1lYW5zIHRoYXQgZiAtIHN0
dWJfdmEgd2lsbCB1bmRlcmZsb3cuPGJyPiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsgPGJyPiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgSSdtIHZlcnkgY29uZnVzZWQgYXMgdG8gd2h5IFVCU0FOIHJlcG9y
dHMgYWdhaW5zdCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzYXZlX2d1
ZXN0X2dwcnMoKSBjb25zaWRlcmluZyB0aGF0IGxvYWRfZ3Vlc3RfZ3BycygpIHdoZW4gdGhy
b3VnaCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0aGUgZXhhY3Qgc2Ft
ZSBsb2dpYyBhIGZldyBpbnN0cnVjdGlvbnMgZWFybGllci48YnI+Jmd0OyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+Jmd0OyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBFaXRoZXIgd2F5LCBkb2VzIHRoaXMgbWFr
ZSB0aGUgcHJvYmxlbSBnbyBhd2F5Pzxicj4mZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IDxicj4mZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2
LW9wLmMmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYi94ZW4vYXJjaC94
ODYvcHYvZW11bC1wcml2LW9wLmM8YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyBpbmRleCAxMTQ2N2ExZTNhLi5iZTQxYmNlZDc2IDEwMDY0NDxi
cj4mZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC0tLSBh
L3hlbi9hcmNoL3g4Ni9wdi9lbXVsLXByaXYtb3AuYzxicj4mZ3Q7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICsrKyBiL3hlbi9hcmNoL3g4Ni9wdi9lbXVs
LXByaXYtb3AuYzxicj4mZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7IEBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBpb19lbXVsX3N0dWJfdCAqaW9fZW11
bF9zdHViX3NldHVwKHN0cnVjdCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyBwcml2X29wX2N0eHQgKmN0eHQsIHU4IG9wY29kZSw8YnI+Jmd0OyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO25ic3A7I2RlZmluZSBBUFBFTkRf
QlVGRihiKSAoeyBtZW1jcHkocCwgYiwgc2l6ZW9mKGIpKTsgcCArPSZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzaXplb2YoYik7IH0pPGJyPiZndDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmFtcDtuYnNwOyNkZWZpbmUmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQVBQRU5EX0NBTEwoZikmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyAmYW1wO25ic3A7IFw8YnI+Jmd0OyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgKHsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFw8YnI+Jmd0OyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAtJmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsgJmFtcDtuYnNwOyBsb25n
IGRpc3AgPSAobG9uZykoZikgLSAoc3R1Yl92YSArIHAgLSZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyBjdHh0LSZhbXA7Z3Q7aW9fZW11bF9zdHViICsgNSk7IFw8YnI+
Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyArJmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsgJmFtcDtuYnNw
OyBsb25nIGRpc3AgPSAobG9uZykoZikgLSAobG9uZykoc3R1Yl92YSArIHAgLSZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjdHh0LSZhbXA7Z3Q7aW9fZW11bF9zdHVi
ICsgNSk7IFw8YnI+Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyAmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsgJmFtcDtuYnNwOyBCVUdfT04oKGludDMyX3QpZGlzcCAhPSZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBkaXNwKTsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7ICZhbXA7bmJzcDsgXDxicj4mZ3Q7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyAmYW1wO25ic3A7ICpwKysg
PSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAweGU4OyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25i
c3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7
bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNw
OyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFt
cDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsgJmFtcDtu
YnNwOyBcPGJyPiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgJmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsm
YW1wO25ic3A7ICZhbXA7bmJzcDsgKihpbnQzMl90ICopcCA9IGRpc3A7IHAgKz0mbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgNDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtu
YnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7
JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1w
O25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz
cDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZh
bXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyAmYW1wO25ic3A7IFw8YnI+Jmd0OyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+Jmd0OyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB+QW5kcmV3PGJyPiZndDsgPGJy
Pjxicj48L2Rpdj4=

------=_NextPart_60E5CE52_0FE68AE8_0D77FB4E--



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 15:59:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 15:59:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152599.281894 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19xd-0005i8-GL; Wed, 07 Jul 2021 15:59:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152599.281894; Wed, 07 Jul 2021 15:59:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m19xd-0005i1-Cw; Wed, 07 Jul 2021 15:59:41 +0000
Received: by outflank-mailman (input) for mailman id 152599;
 Wed, 07 Jul 2021 15:59:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m19xc-0005hv-7a
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 15:59:40 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5525f194-df3c-11eb-850e-12813bfff9fa;
 Wed, 07 Jul 2021 15:59:39 +0000 (UTC)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2055.outbound.protection.outlook.com [104.47.1.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-QLyJFtqOM6my51NchyPAEQ-1; Wed, 07 Jul 2021 17:59:37 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB6672.eurprd04.prod.outlook.com (2603:10a6:803:127::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.26; Wed, 7 Jul
 2021 15:59:36 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 15:59:36 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0038.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::21) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.10 via Frontend Transport; Wed, 7 Jul 2021 15:59:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5525f194-df3c-11eb-850e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625673578;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=cwTAhm/zOhX+bPlP8KYW1EGlb9P7+x6ck8dBRYjYbGU=;
	b=mXoNz4PHIwxJ4YnrQS2gvWJ/AtCzEd+qOy3bPgolkomHurjn0xMZ17pY77gdvaTsqmqYuj
	hhxT0dVXJ4kKSjpmjabEAOanf5nwKR7y7PBTu5dUsQe/o6MPokmCVrZgdyQrUeXj4FF/ml
	Y6G/LBfrhzx2VF1jPENNCiWVi4aIpZ0=
X-MC-Unique: QLyJFtqOM6my51NchyPAEQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dHwefZvlAC6k/XYrDG4OwsiIsFNKtG988+IQau1Vv7Ny55fZxsjW4tFhsqFdZSbuVAo6LtcXnY7yy41EqY0FCgHW24RIq/JetKPgGcIfx7ho8ZuABN7NxCIlZUDamNjyVZYVs7DatcUSzislYsUCgnpiP8LyYIga6XQa8XIj+pEERU7XWvZr9rvxKpoxmKqfNEJJOSbZvcJzbEH6e5HXNOEdcMQ6nHV9LnUDRf4s4Wk7fFe45Gz7ebxbeLKgMrR1kgiblFQMQiTUhBdnJ9acb5SuCGrCl6hZuulwitEVb3ih038wBMJn4BYpqrqFXAARAX3JGmkMQGT8XXWweeSTag==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cwTAhm/zOhX+bPlP8KYW1EGlb9P7+x6ck8dBRYjYbGU=;
 b=jpcPV2stzGOMwqHInVyFitfusWC7PUWa937f8NbDqM7SGupv5AyG5cjd+HhWGaWWXK/Ym86FUckaH2EcXyvicjWUTxMZMTJj2khX4IMXWFfZl0Lin9pFgDcqKVxEeAvWCE59PLvABu0WNwRL9wi0+giUs0c1v/H3RGyogfgdzMzp7VgguUqEKueJZAD9Tp3eHVW86E3Rimpxsl+cKl2eEvnZBh4ATb74PdcXM/Vh7c3lEcjGZ/BiCmjDpHHHZuWxwSskiiQ8fHLe4/h/sEAWFom9BW398z43pTQ43iiQo8rIANx4Xo3wyM/t7tt2OkTdOkLPOG+O6ekxKVL/wGJDvg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: A possible pointer_overflow in xen-4.13
To: Rroach <2284696125@qq.com>
References: <tencent_4882F9152B24798C8A395FEE6E9C3DFADE07@qq.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <0215ab77-a128-774b-db73-691b5e7884bc@suse.com>
Date: Wed, 7 Jul 2021 17:59:35 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <tencent_4882F9152B24798C8A395FEE6E9C3DFADE07@qq.com>
Content-Type: text/plain; charset=gb18030
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0038.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:48::21) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f67f5a62-2c0e-4492-e7a1-08d941603802
X-MS-TrafficTypeDiagnostic: VE1PR04MB6672:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB66723AE61ADDF040467F4B60B31A9@VE1PR04MB6672.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	cyy2T3YzTeG+I0mVGw4PtwzhUuN85WTOsQDUeJsRQeATCVZWVvjTfxlIIB9LnZrdyTj311EvZbQE7YqgC7eNk9qsVcJWorRQ9BYvxFO0dzI7PeiWJExtUf63IoKm4FyNRIlup3UTIGpZiHsQqF0uiuRtGShctDwKD5riHncIw/GCNG1EnPosKESm/Gs7YLyT94HV+kC7biK+93Vy7ioRHPMYjcUhE4ln11eAw/YK70pXwzvnIqhRB8N9C0yxEA0kqqRjlXMcGsTN+Z+62ZRFfKW8wf2wZOpzkMfQo5/DuYLRR9hlec34Za51ZEggf39kQ0T1QnxHDfio2P0ThDIOdrpkRr/ei31cahYtwSRP0sJbUeaKosGp9IdG+dP+Wg8GlFmqbmTmPytf5RrTWcD7adVKs8y9HcH5iD3zC/Au7Qy0KU9Ncd3OCiz5MF5bogC0bgzj9Ge5VvY6mfVS1/OG0StV4psoXnO225SULkKQdy7eij3UBtcYEXcqCuNshNAACB9RevHRJjd/i1+D9vb8MTC7wa3r0J42j50QeAlJCoSI/xLaqPakdLWzEfc9e6Md9i98V/ynQkO8hOReeTKNLI14gsLz5LDYTYgdNdloF8uK2amqJLhy3so3MtUnJHom4BlHBMqgE4HeHJff4bF/BMv8ujd3OHwd4ynWCW2Amox7ghkW6ht/mFuszEaCrRylyPiIrFiERXZQBFUVJZPz26UTGVsnbyoKKRDe5+SYGhc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(366004)(376002)(346002)(396003)(136003)(38100700002)(31686004)(8676002)(36756003)(5660300002)(66556008)(66476007)(956004)(6916009)(478600001)(8936002)(4326008)(31696002)(2616005)(186003)(66946007)(86362001)(316002)(26005)(16576012)(6486002)(2906002)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f67f5a62-2c0e-4492-e7a1-08d941603802
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 15:59:36.3065
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: SflJYqt7mgf6n5QdPhPaIVfRFp5bC90aa+f7e0/LMw9CgLddhjitiH3KUuMFoYGf9acwqfyJqAx3c30ao/AcOg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6672

On 07.07.2021 17:54, Rroach wrote:
> Hi, sorry about the late respond. I tried your suggestion, it works. I'm kind of surprised too, since such problem should exposed long time ago.&nbsp;
> 
> 
> I looked deep into your suggestion. I believe you were right about it, since p - ctxt-&gt;io_emul_stub &nbsp;won't overflow and the pointer overflow is likely to happen &nbsp;in&nbsp;&nbsp;stub_va + p or&nbsp;ctxt-&gt;io_emul_stub.&nbsp;
> 
> 
> Andrew's suggestion works perhaps it the long variable allows the expression to store more bytes,

Xen (as much as e.g. Linux and I think most other Unix-es) assumes sizeof(void*)
and sizeof(long) to be the same.

> however in long term it may not be a solid solution. So alternative should we take both of the advise that using
> + &nbsp; long disp = (long)(f) - (long)(stub_va + (p - ctxt-&gt;io_emul_stub) + 5); \
> as a fix patch

I don't think so - we try to avoid casts wherever they're not strictly needed.

Btw, to record you in an eventual patch with a Reported-by, would you mind
providing your real name and maybe a less temporary-looking email address?

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 16:04:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 16:04:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152606.281905 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1A26-0007hC-2Z; Wed, 07 Jul 2021 16:04:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152606.281905; Wed, 07 Jul 2021 16:04:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1A25-0007h5-Vz; Wed, 07 Jul 2021 16:04:17 +0000
Received: by outflank-mailman (input) for mailman id 152606;
 Wed, 07 Jul 2021 16:04:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lj3M=L7=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1A25-0007gz-4m
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 16:04:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b3ce556d-5f5d-42b9-9cc3-91a7563fd1f9;
 Wed, 07 Jul 2021 16:04:16 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2053.outbound.protection.outlook.com [104.47.14.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-31-A__e8K_HM7ioSvIb_NXWjg-1; Wed, 07 Jul 2021 18:04:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Wed, 7 Jul
 2021 16:04:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4287.033; Wed, 7 Jul 2021
 16:04:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2PR09CA0019.eurprd09.prod.outlook.com (2603:10a6:101:16::31) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Wed, 7 Jul 2021 16:04:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b3ce556d-5f5d-42b9-9cc3-91a7563fd1f9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625673855;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=OMFN60umjUjUenjwkiIMAW/z2ogUhgCmiAccqgiY+Jo=;
	b=FzdPBuyGmmeRvzm1/giAbTd/8U6wxts1k9JAonlaBGarY8iNITLh4J3bux/BF/7k+IclkQ
	bTMkfEMbiz+e/z7whWdSxFQjSygQi3s7EHm7EC8I7aQMGWE4AcGY2jZ7TLBryqML2ufR00
	sj7+M3yU6titNPFmW7l0hdNVlqtAH/k=
X-MC-Unique: A__e8K_HM7ioSvIb_NXWjg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Kzzq6G/Ch+ns8G9sJ/VtZVOU2o686grjFK0FshFjFe1eXGuH1tApVmwP78R2jTD0RsaDFnLUauuu75NdHxMnoqzsi4RGFExUjwnq+8CYhvEPTc6Z+EGrW44oD+G0uLI5itCKnjGUBxCgZIb0ynRF3yvejL/N/M1O6VK3wXAddliyvYU7/ug7bedzUUcffedPIC3Kxd6k2UXp1YzJ1OLyvghZL+t8ihAXSDyVMQ5qL0tM0/+6qNbn9mVdc2f7t9YGPZjZftPm82FCyGSys0rz6y3fBMz+93emqLMd1pRusKGU+FohCdhrRQ8j7GjjR1iEYBsUnAj0lsQ3gtVeGiDRoA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OMFN60umjUjUenjwkiIMAW/z2ogUhgCmiAccqgiY+Jo=;
 b=NIdcDGVrdd2NaS0XPPdRreETbPuJzAupx4cFYR0L500Yi33hE0wo94qW0wka5WcWgKekI2pr24yA5+ieWsT42T8ObSECh8Hr8m2Mq7Nrz10guztYntsB/YsqfvXDmmZE9b/IAqFSvljzi+hK8CuD1VLbWk7Ou6ElFcD5nfKm0EQhF8pQEfVb46hBqtU0HhHtDv0nX571VcQ1bLoLwWvfbATQK5IzDwdGYeG39Oz/QFA6VOyllLwIhYpk9ln20MEqeaJBCo9eEvpmLdt4z8OtxB9NsK6xg+57Yi6uweAz/WwZ3GwRWTtah2CAEcRumadDG7hovkbu5t7xLF2qeHh75A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 23/31] build: fix arch/x86/node.o rule
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Wei Liu
 <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-24-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <87726f1a-3368-1e9e-8e6d-10295232aa98@suse.com>
Date: Wed, 7 Jul 2021 18:04:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-24-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR2PR09CA0019.eurprd09.prod.outlook.com
 (2603:10a6:101:16::31) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 9a9fc82f-ad1b-4edc-32c9-08d94160dd02
X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB329359E49F918ABF9F9D2A65B31A9@VI1PR04MB3293.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Xo5Ih1Omub0pcL9GDWPoJCmk34715BjUGcvR9kqDKlooQ14qW6k+qgPG9wkO+9yyIXEzFfUljz6ov8SIE/iUTZg2qFFtud1WpIkysussIjSPRIhhuUSEztBHimngwnkTb7JXyAntCbF+uc51y+es2GDoQTFI/qY7X+icGlk61SVxQUOYotRw5j7g9sUy18kxhE5eSrSWcCwHVppxVnWLyFnIBjyTRK+sR+MBOm6EYgCmGL/rJiDbXH0jyyW0/nH7etly8OtWr9M6nL82pAZrwBR8zQhBgZHBsV1shGTWAu7juKkmRodGA75Dh0fRbwjCxy+tmzWClD1E00YOF0N3H68pPGeR4wEct83WPoZUx4nexKP2tC0+QDRb7TxY6f6ROh7340p4fR46E3TGcNiQNR4b2haTqqNrm0Q+9nAkt1eJ9kGzOIjmdlkh70LM2CVej1QJAmyEoJwghbNUNiUSJsR+T/jQ8H3Nk5hcVFrUvgTQJgFJ6MBptTFbJXLFKyhc8B/BrCG5COZ0Yozo6uAo8dn1ihg2IG4W6Ek39xNsU1yKmR+5pnd2ocWxqyBtFbmQHfpqQj+X+nZetZc9MUiO0lhELcAuX3UdTDippY7N5H+phXEnpgYmGhrMJIGVusQ8HpqA2w+L3SkeJ+xRFouJNyM5h3SRFyJkEJgSyoRLeKEsqQM2OiS+UZ0X+xQ3DAZWzK0NK2nijabnwQbAq4ZK6gIO9rdBBx1rbbNQ2WANSOA=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(39850400004)(376002)(136003)(366004)(316002)(5660300002)(31696002)(956004)(36756003)(8676002)(66946007)(38100700002)(66556008)(186003)(66476007)(6916009)(86362001)(54906003)(26005)(2616005)(16576012)(31686004)(478600001)(2906002)(4744005)(6486002)(8936002)(53546011)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 9a9fc82f-ad1b-4edc-32c9-08d94160dd02
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 16:04:13.1030
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 0Ph0/K626ToFmvU2x2K4ltO2PjuulRmmhrKKc2muhtykGZq+RALGcJICJkbYVbIYTaVauXYXD+/q6mSc75Mdfg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293

On 01.07.2021 16:10, Anthony PERARD wrote:
> Avoid different spelling for the location of "xen-syms", and simply
> use the dependency variable. This avoid the assumption about $(TARGET)
> value.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
with s/node/note/ in the title (I was very curious what this patch was
about, and hence peeked ahead in the series).

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 16:14:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 16:14:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152618.281916 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1AC8-0000uV-0w; Wed, 07 Jul 2021 16:14:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152618.281916; Wed, 07 Jul 2021 16:14:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1AC7-0000uO-UE; Wed, 07 Jul 2021 16:14:39 +0000
Received: by outflank-mailman (input) for mailman id 152618;
 Wed, 07 Jul 2021 16:14:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=fyUe=L7=intel.com=dave.hansen@srs-us1.protection.inumbo.net>)
 id 1m1AC6-0000uI-Gf
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 16:14:38 +0000
Received: from mga05.intel.com (unknown [192.55.52.43])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id df59a751-fd74-4615-8084-b128a690850a;
 Wed, 07 Jul 2021 16:14:34 +0000 (UTC)
Received: from orsmga008.jf.intel.com ([10.7.209.65])
 by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 07 Jul 2021 09:14:33 -0700
Received: from lpbeverl-mobl.amr.corp.intel.com (HELO [10.212.176.148])
 ([10.212.176.148])
 by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 07 Jul 2021 09:14:30 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: df59a751-fd74-4615-8084-b128a690850a
X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="294975750"
X-IronPort-AV: E=Sophos;i="5.84,220,1620716400"; 
   d="scan'208";a="294975750"
X-IronPort-AV: E=Sophos;i="5.84,220,1620716400"; 
   d="scan'208";a="457529825"
Subject: Re: [Resend RFC PATCH V4 13/13] x86/HV: Not set memory
 decrypted/encrypted during kexec alloc/free page in IVM
To: Tianyu Lan <ltykernel@gmail.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com,
 kirill.shutemov@linux.intel.com, akpm@linux-foundation.org, rppt@kernel.org,
 Tianyu.Lan@microsoft.com, thomas.lendacky@amd.com, ardb@kernel.org,
 robh@kernel.org, nramas@linux.microsoft.com, pgonda@google.com,
 martin.b.radev@gmail.com, david@redhat.com, krish.sadhukhan@oracle.com,
 saravanand@fb.com, xen-devel@lists.xenproject.org, keescook@chromium.org,
 rientjes@google.com, hannes@cmpxchg.org, michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 brijesh.singh@amd.com, anparri@microsoft.com
References: <20210707154629.3977369-1-ltykernel@gmail.com>
 <20210707154629.3977369-14-ltykernel@gmail.com>
From: Dave Hansen <dave.hansen@intel.com>
Autocrypt: addr=dave.hansen@intel.com; keydata=
 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
 z5cecg==
Message-ID: <3b5a1bd0-369a-2723-97c1-4ab4edb14eda@intel.com>
Date: Wed, 7 Jul 2021 09:14:28 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210707154629.3977369-14-ltykernel@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/7/21 8:46 AM, Tianyu Lan wrote:
> @@ -598,7 +599,7 @@ void arch_kexec_unprotect_crashkres(void)
>   */
>  int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
>  {
> -	if (sev_active())
> +	if (sev_active() || hv_is_isolation_supported())
>  		return 0;
>  
>  	/*
> @@ -611,7 +612,7 @@ int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
>  
>  void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages)
>  {
> -	if (sev_active())
> +	if (sev_active() || hv_is_isolation_supported())
>  		return;

You might want to take a look through the "protected guest" patches.  I
think this series is touching a few of the same locations that TDX and
recent SEV work touch.

https://lore.kernel.org/lkml/20210618225755.662725-5-sathyanarayanan.kuppuswamy@linux.intel.com/



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 16:40:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 16:40:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152626.281933 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Aan-0004H0-5Z; Wed, 07 Jul 2021 16:40:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152626.281933; Wed, 07 Jul 2021 16:40:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Aan-0004Gt-2i; Wed, 07 Jul 2021 16:40:09 +0000
Received: by outflank-mailman (input) for mailman id 152626;
 Wed, 07 Jul 2021 16:40:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=DB7Z=L7=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m1Aak-0004F8-VB
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 16:40:07 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fb77036c-df41-11eb-8513-12813bfff9fa;
 Wed, 07 Jul 2021 16:40:05 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fb77036c-df41-11eb-8513-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625676005;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=G2BHIEtpUuN6vKB2Hf+XWzerCJ78wj5TfHidL9hYFW0=;
  b=Z+qknc10jiaywovYclTAUOiWuNLki/pyUzzZuM25EGyJTkPgdKOicbh+
   pGsqfMkh6xpSC1mSaG5Y4vXu3YsOJGY2LGxOxLWqBeFUZtvCze593a7aZ
   qNTNln234ruXqP+gAwbwkHsWlZ1sQgjS42GL/Z7biqadJpZsUqQHzdYrG
   w=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: WlUKnyQOz4vqmvVdwG5//E0aggVnxsz+o2QC2oCksAKy/CsZ1UZqEIl4pqpS9FeRmPNLTacwPm
 FQIAwPNRX9oa92EIrp7TzKYS+Ja1GJraU55HUdY6aMuyE2puBTuw/h9XnTYLbtl6Md2GQqPsW0
 TVavvVVgWoUuYldbmhG2KHsMMn+27z3UzkWFZtdg5ZwwwGLkcactgb1Shb8WOGRLR32UUuKtMB
 2HjTAwLFlY0kLb22hlRvSwQohbFaKB0cgobcjmIOUNHpTW7wqpKlSNxJMF7f+r7QvKv5mlWqBf
 nzs=
X-SBRS: 5.1
X-MesageID: 47465073
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:n/HkzqNsSwZDAsBcTsejsMiBIKoaSvp037Eqv3ofdfUzSL3+qy
 nOpoVj6faaslcssR0b9OxofZPwI080lqQFhbX5X43DYOCOggLBR+tfBMnZsljd8kXFh4hgPM
 xbHZSWZuedMbEDt7eY3DWF
X-IronPort-AV: E=Sophos;i="5.84,220,1620705600"; 
   d="scan'208";a="47465073"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Doug Goldstein
	<cardoe@cardoe.com>
Subject: [XEN PATCH 1/2] automation: Adding ninja-build to some docker images
Date: Wed, 7 Jul 2021 17:40:00 +0100
Message-ID: <20210707164001.894805-2-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210707164001.894805-1-anthony.perard@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This is to allow building the latest version of QEMU.

fedora/29:
    In addition to adding "ninja", I've add to make some other
    changes: some `go build` failed with `mkdir /.cache` no
    permission, so I've created a user.
    (this was discovered while testing the new container with the
    script containerize.)

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 automation/build/alpine/3.12.dockerfile        | 1 +
 automation/build/fedora/29.dockerfile          | 9 ++++++---
 automation/build/suse/opensuse-leap.dockerfile | 2 ++
 automation/build/ubuntu/bionic.dockerfile      | 2 ++
 automation/build/ubuntu/focal.dockerfile       | 2 ++
 5 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/automation/build/alpine/3.12.dockerfile b/automation/build/alpine/3.12.dockerfile
index bb8e5ece7414..4ee3ddc12e52 100644
--- a/automation/build/alpine/3.12.dockerfile
+++ b/automation/build/alpine/3.12.dockerfile
@@ -47,6 +47,7 @@ RUN \
   apk add glib-dev && \
   apk add libattr && \
   apk add libcap-ng-dev && \
+  apk add ninja && \
   apk add pixman-dev && \
   \
   # cleanup
diff --git a/automation/build/fedora/29.dockerfile b/automation/build/fedora/29.dockerfile
index 027b93ceaf4e..60a5d722668f 100644
--- a/automation/build/fedora/29.dockerfile
+++ b/automation/build/fedora/29.dockerfile
@@ -2,9 +2,6 @@ FROM fedora:29
 LABEL maintainer.name="The Xen Project" \
       maintainer.email="xen-devel@lists.xenproject.org"
 
-RUN mkdir /build
-WORKDIR /build
-
 # install Xen depends
 RUN dnf -y install \
         clang \
@@ -43,5 +40,11 @@ RUN dnf -y install \
         ocaml \
         ocaml-findlib \
         golang \
+        # QEMU
+        ninja-build \
     && dnf clean all && \
     rm -rf /var/cache/dnf
+
+RUN useradd --create-home user
+USER user
+WORKDIR /build
diff --git a/automation/build/suse/opensuse-leap.dockerfile b/automation/build/suse/opensuse-leap.dockerfile
index 573fbd8ae47e..03f8a7acad4f 100644
--- a/automation/build/suse/opensuse-leap.dockerfile
+++ b/automation/build/suse/opensuse-leap.dockerfile
@@ -67,5 +67,7 @@ RUN zypper install -y --no-recommends \
         which \
         xz-devel \
         zlib-devel \
+        # QEMU
+        ninja \
         && \
         zypper clean -a
diff --git a/automation/build/ubuntu/bionic.dockerfile b/automation/build/ubuntu/bionic.dockerfile
index 406a97494caf..1e5a27c70f15 100644
--- a/automation/build/ubuntu/bionic.dockerfile
+++ b/automation/build/ubuntu/bionic.dockerfile
@@ -45,6 +45,8 @@ RUN apt-get update && \
         wget \
         git \
         nasm \
+        # QEMU
+        ninja-build \
         && \
         apt-get autoremove -y && \
         apt-get clean && \
diff --git a/automation/build/ubuntu/focal.dockerfile b/automation/build/ubuntu/focal.dockerfile
index 952a3172aa64..74655b9876d2 100644
--- a/automation/build/ubuntu/focal.dockerfile
+++ b/automation/build/ubuntu/focal.dockerfile
@@ -44,6 +44,8 @@ RUN apt-get update && \
         wget \
         git \
         nasm \
+        # QEMU
+        ninja-build \
         && \
         apt-get autoremove -y && \
         apt-get clean && \
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 16:42:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 16:42:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152630.281945 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1AdM-000518-OZ; Wed, 07 Jul 2021 16:42:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152630.281945; Wed, 07 Jul 2021 16:42:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1AdM-000511-LC; Wed, 07 Jul 2021 16:42:48 +0000
Received: by outflank-mailman (input) for mailman id 152630;
 Wed, 07 Jul 2021 16:42:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=DB7Z=L7=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m1AdL-00050s-Hq
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 16:42:47 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 22b1667f-18e4-4790-a736-5d9d25782186;
 Wed, 07 Jul 2021 16:42:46 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 22b1667f-18e4-4790-a736-5d9d25782186
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625676166;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=em/dbn601C7FX6AESIr9b+T9YsaP6aH1UAY4t5Cecxg=;
  b=bBsiixoua899ULxCiaTdf5V60ZKuvu+nqo6dG0cxpR8QgYwXcvnbHHdJ
   ONawZfTLUaNgn5H+tuLK3bFn08uNJHyPt60rBJNaDWxgrNOXv2XLCIo8k
   qJ0ayriZT4yLsnyzHXcGVDg/4HcWpkscPn8FdkqDw9v6ouMd+2jowdldV
   Q=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 1PNoQvEBMHjM4eDi9YPk5qT80zOk7KTvVTqXCQq6xtqwEpnV0TDysfAeBkRSTsClCF71fnLAnl
 l7mo/CWKCqCYUUgZm2eDLpK0b+zSTTY6neaZhg07P5fpEdxSSvVipBBM6L9Y4H/LFVXwpDvLoJ
 WApRvfdYQGlYxUJLbeyOuOk60DljNrvbaedZzHOGvKe88jF74qj70QtDS83uQo7FeBRtA1VRhJ
 J8SXB5MI0AUMtjyBOwPs6X7V1FX3YCnk3B6h0vqvzf0IRp38ZILkPrXGkkCcqcQ69mJ26vxbEf
 vMA=
X-SBRS: 5.1
X-MesageID: 49394618
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:jy/6L6vA3j6FLfsw4UrG04nm7skDstV00zEX/kB9WHVpm6yj+v
 xG/c5rsCMc7Qx6ZJhOo7+90cW7L080lqQFg7X5X43DYOCOggLBQL2KhbGI/9SKIVycygcy78
 Zdm6gVMqyLMbB55/yKnTVRxbwbsaW6GKPDv5ag8590JzsaD52Jd21Ce36m+ksdfnggObMJUK
 Cyy+BgvDSadXEefq2AdwI4t7iqnaysqHr+CyR2fiIa1A==
X-IronPort-AV: E=Sophos;i="5.84,220,1620705600"; 
   d="scan'208";a="49394618"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Doug Goldstein
	<cardoe@cardoe.com>
Subject: [XEN PATCH 0/2] automation: Fix build with new qemu-xen version
Date: Wed, 7 Jul 2021 17:39:59 +0100
Message-ID: <20210707164001.894805-1-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.automation-add-ninja-v1

Adding ninja-build pkg when possible.

I'll push new containers soon.

Anthony PERARD (2):
  automation: Adding ninja-build to some docker images
  automation: Check if ninja is available before building QEMU

 automation/build/alpine/3.12.dockerfile        | 1 +
 automation/build/fedora/29.dockerfile          | 9 ++++++---
 automation/build/suse/opensuse-leap.dockerfile | 2 ++
 automation/build/ubuntu/bionic.dockerfile      | 2 ++
 automation/build/ubuntu/focal.dockerfile       | 2 ++
 automation/scripts/build                       | 4 +++-
 6 files changed, 16 insertions(+), 4 deletions(-)

-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 16:42:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 16:42:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152631.281956 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1AdS-0005K9-1k; Wed, 07 Jul 2021 16:42:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152631.281956; Wed, 07 Jul 2021 16:42:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1AdR-0005Jk-UM; Wed, 07 Jul 2021 16:42:53 +0000
Received: by outflank-mailman (input) for mailman id 152631;
 Wed, 07 Jul 2021 16:42:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=DB7Z=L7=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m1AdQ-00050s-Gl
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 16:42:52 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e92e19ae-7689-4d7b-9a37-40a289bc10fa;
 Wed, 07 Jul 2021 16:42:46 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e92e19ae-7689-4d7b-9a37-40a289bc10fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625676166;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=9bieze8oe0vLOiThGwS2ip9BrjWxM8RHuxHeePgyKcQ=;
  b=Kz76DANIirRMFc8ZAkXaHY21Q/n+cR81I/uPPCmXAizq4azpPtdYulZa
   8IhxXkTlj7P5gyaP3tRNqhiNs42OobO2+6IdWn93XZYDYvO+xyvh30c4z
   91bErclaLJld+Rj7OkQxbkOCzw0Ug/IQH5D7NOdW16b8DGw+Haax7tOtK
   c=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: D+YyPLM+VAE1LGQ2GgDoi6cCNhUgtu9tronggcAUkg2GZfEyrBgQgVLIbSvjcbaY/6VuaaiE0k
 wt0hV8dqoWU14ZCDTF0+9m1Y1uxvDNC6Er7cW4csTPvEwoQHMZmh8ja5xJbCfNY8nDzy3V/P/C
 72LPYU/QU23j7oW+QnxeSzcQaIUftMMDHF0uBkRdFHlty8PWG9LNtE9WGrIlG7aHfhPh0r5MdX
 Mg0K/I8jK6zpE7UCo5u4eVKcg9BZWrxPCY6cMRFGy65VJxXDtC2t68/Q5A6pa52OmFyHLFYzEz
 Lc0=
X-SBRS: 5.1
X-MesageID: 47750435
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:2S62UaDg8EF4UFDlHelW55DYdb4zR+YMi2TDt3oddfWaSKylfq
 GV7ZAmPHrP4gr5N0tOpTntAse9qBDnhPtICOsqTNSftWDd0QPFEGgL1+DfKlbbak/DH4BmtJ
 uJc8JFeaDN5VoRt7eH3OFveexQv+Vu88qT9JnjJ28Gd3AMV0n5hT0JcTpyFCdNNW97LKt8Lr
 WwzOxdqQGtfHwGB/7LfEXsD4D41qT2fIuNW29/OyIa
X-IronPort-AV: E=Sophos;i="5.84,220,1620705600"; 
   d="scan'208";a="47750435"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Doug Goldstein
	<cardoe@cardoe.com>
Subject: [XEN PATCH 2/2] automation: Check if ninja is available before building QEMU
Date: Wed, 7 Jul 2021 17:40:01 +0100
Message-ID: <20210707164001.894805-3-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210707164001.894805-1-anthony.perard@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

ninja is now required to build the latest version of QEMU, some
container still don't have ninja and attempting to add it breaks the
build for different reasons, so QEMU will be skip on those containers.

Failures:
- ubuntu/xenial:
    fatal: ninja version (1.5.1) incompatible with build file ninja_required_version version (1.7.1).
- debian/unstable-i386: (debian-unstable-32)
    /build/tools/flask/policy/Makefile.common:115: *** target pattern contains no '%'.  Stop.
- suse/opensuse-tumbleweed:
    failed to build iPXE
- debian/unstable:
    update of the container fails with:
        The following packages have unmet dependencies:
         clang-8 : Depends: libstdc++-8-dev but it is not installable
                   Depends: libgcc-8-dev but it is not installable
                   Depends: libobjc-8-dev but it is not installable
                   Recommends: llvm-8-dev but it is not going to be installed
                   Recommends: libomp-8-dev but it is not going to be installed

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 automation/scripts/build | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/automation/scripts/build b/automation/scripts/build
index 46b6903d2922..d8c77e244cda 100755
--- a/automation/scripts/build
+++ b/automation/scripts/build
@@ -46,7 +46,9 @@ if ! test -z "$(ldd /bin/ls|grep musl|head -1)"; then
 fi
 
 # Qemu requires Python 3.5 or later
-if ! type python3 || python3 -c "import sys; res = sys.version_info < (3, 5); exit(not(res))"; then
+# QEMU requires ninja
+if ! type python3 || python3 -c "import sys; res = sys.version_info < (3, 5); exit(not(res))" \
+        || ! type ninja; then
     cfgargs+=("--with-system-qemu=/bin/false")
 fi
 
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Wed Jul 07 17:33:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 17:33:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152649.281978 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1BQS-0002UC-NO; Wed, 07 Jul 2021 17:33:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152649.281978; Wed, 07 Jul 2021 17:33:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1BQS-0002U5-K3; Wed, 07 Jul 2021 17:33:32 +0000
Received: by outflank-mailman (input) for mailman id 152649;
 Wed, 07 Jul 2021 17:33:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=DB7Z=L7=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m1BQQ-0002TT-Pl
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 17:33:30 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dcf51b62-aecf-45ce-8d1f-919a80080a18;
 Wed, 07 Jul 2021 17:33:29 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dcf51b62-aecf-45ce-8d1f-919a80080a18
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625679209;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=/qQgonsgsqOWWgVwfH1QHXDw688aRUgMVQ9AYhqz+jI=;
  b=hARzHeGW7T7X7eacFIUjH2l5MmDvj+fslA9nE3JaPRp54tmTQgwRAwkP
   GoFWTvhINCJXQFAah1qtOXv0NLtLuVg6UCra12JGVS7YEb8hR3MOu8xKs
   1+KY5nxadhR5+NW7VKv3+HDOXPdTuH6+/J8j1+bkmeBD/Go74GYVsyId1
   s=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: eiCbKsYg+5hkCehyFK/IuzUv/3sd2iAwXOddc9Pd7SWX1z+pf9jNwvHwCb7irI1kxWR3o1MtDv
 Sep/1PokyAA/t7I9iIs58izufxn+51txAUY74sbuXC5026wjrKw8C4ORzeBA/z8D61xDpXAVXt
 d77pPn3gzx3ISUpGkYI/dh6Mlu7T1DR7y6oYiKsKO7dYKCdEKGsKkK2U9JjWBAqORJRzef2FGh
 hzwtzpq1Y/k1d3RFVCqnAYiM1TfNu/8JyUbXEt79F4j7BGsasUhuQfdVlQLhaI3zfKq7u8MZia
 9Lw=
X-SBRS: 5.1
X-MesageID: 49399305
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:mKxH1a/coEPHkc+k4U9uk+AuI+orL9Y04lQ7vn2ZKSY5TiVXra
 CTdZUgpHnJYVMqMk3I9uruBEDtex3hHNtOkOss1NSZLW7bUQmTXeJfBOLZqlWNJ8S9zJ856U
 4JScND4bbLfDxHZKjBgTVRE7wbsaa6GKLDv5ah85+6JzsaGp2J7G1Ce3am+lUdfng+OXKgfq
 Dsm/auoVCbCAwqR/X+PFYpdc7ZqebGkZr3CCR2eyLOuGG1/EiVAKeRKWnj4isj
X-IronPort-AV: E=Sophos;i="5.84,221,1620705600"; 
   d="scan'208";a="49399305"
Date: Wed, 7 Jul 2021 18:23:03 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 0/2] automation: Fix build with new qemu-xen version
Message-ID: <YOXi98Wh1wkCMgeu@perard>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210707164001.894805-1-anthony.perard@citrix.com>

On Wed, Jul 07, 2021 at 05:39:59PM +0100, Anthony PERARD wrote:
> Adding ninja-build pkg when possible.
> 
> I'll push new containers soon.

I've pushed:
    registry.gitlab.com/xen-project/xen/fedora:29
    registry.gitlab.com/xen-project/xen/ubuntu:bionic
    registry.gitlab.com/xen-project/xen/ubuntu:focal
    registry.gitlab.com/xen-project/xen/alpine:3.12
    registry.gitlab.com/xen-project/xen/suse:opensuse-leap

> 
> Anthony PERARD (2):
>   automation: Adding ninja-build to some docker images
>   automation: Check if ninja is available before building QEMU
> 
>  automation/build/alpine/3.12.dockerfile        | 1 +
>  automation/build/fedora/29.dockerfile          | 9 ++++++---
>  automation/build/suse/opensuse-leap.dockerfile | 2 ++
>  automation/build/ubuntu/bionic.dockerfile      | 2 ++
>  automation/build/ubuntu/focal.dockerfile       | 2 ++
>  automation/scripts/build                       | 4 +++-
>  6 files changed, 16 insertions(+), 4 deletions(-)

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 17:46:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 17:46:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152655.281990 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Bco-0003zu-SW; Wed, 07 Jul 2021 17:46:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152655.281990; Wed, 07 Jul 2021 17:46:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Bco-0003zn-PS; Wed, 07 Jul 2021 17:46:18 +0000
Received: by outflank-mailman (input) for mailman id 152655;
 Wed, 07 Jul 2021 17:46:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tWQe=L7=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1Bcn-0003zh-NM
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 17:46:18 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ab8a4a58-7762-40b7-b302-6035527587d9;
 Wed, 07 Jul 2021 17:46:16 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ab8a4a58-7762-40b7-b302-6035527587d9
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625679976;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=OP+Ck+UXDaOhq1d5xbPjjNdrHhZjC/f0SIYL7btGPYk=;
  b=NWg09Lx3wL2+oS34WDAc0mH5yraP8RI3wHS8A71ibtCqCn4xcpuLJKOV
   2lJ5717tgWpDWG6ChPwkzyjdIemeY65dnKmPSKMD18eEmb7kVKU6HNu2i
   YIyJ/UVhbTN0b1etsrv5wggvumNj9eOpWcVihhfu3LZoU/bHDXORWjjQB
   c=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: nYUjmyaNFKlAXpTtekfpxvhq0jLU7BoeEKKXBN9fZ77sz7qGgtZpDJKGI6IBh2ghTuz9QWrjW7
 THCoix/FUCgMacgvCUEWm6NKcIQQsA1S5ezzVk5jl0zvc9Ehm+sLpTc0/3SDfeS/4Er8ZXv1qR
 EY4H2RlVX4cYXDLQA4kmTqxisG8Jh//vL1GiPz3aDeMJ3kIfE9JSc3rhGWJ4Jtfsx7KVzrf26Y
 PqDMe4rBFkzNxCUjtHq+SIcLxZNmpjrbVyAzjNMVq4lDbVWLqlWIUQwx4A0ybL6AEMXRK8NcxN
 Dv4=
X-SBRS: 5.1
X-MesageID: 48143336
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:VdnjMqFaS0vSAbyKpLqEEseALOsnbusQ8zAXPiBKJCC9vPb5qy
 nOpoV+6faQslwssR4b9uxoVJPvfZq+z+8R3WByB8bAYOCOggLBQL2KhbGI/9SKIVydygcy78
 Zdm6gVMqyMMbB55/yKnDVRxbwbsaa6GKPDv5ah8590JzsaDJ2Jd21Ce32m+ksdfnghObMJUK
 Cyy+BgvDSadXEefq2AdwM4t7iqnayzqHr+CyR2fyIa1A==
X-IronPort-AV: E=Sophos;i="5.84,221,1620705600"; 
   d="scan'208";a="48143336"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dk5WV6UvBFL3+UZBx6qVI1TXDP0PzdNpHMsOZncsm1fIUq+y7ys0eFflSZHsrT4MAEBh78xjRPZmX8Yq5YETQO8quSFXuNQVlDgSjhH7nH3mJufFXgL6GMsffIE4f+1C1LpjnMqwX14iNdZk6x6zciCRmKwQxQ46Uetk1194dm2fdvs6PZqElKYSREQn0BYE/Ila77HAqv+1oV+ymcnseBBeZJ7ITjAIl9STDzq644Ol1J8UoPJPeG/w9ohGwRYALXtv0HwU6XIo2WWiKPaiGAQ3bcfE1klqHo7udmd9BuuTHB7qmjZWdS9fvXg1ZKe5Ysdcd6lXrnfXd9Vr+Qtv/w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rLATigvkRbYi4kss/x6fuGy5EMt+6wsPiF87a9iagnc=;
 b=kyIOv/8+xf6pW+IFNJ3qrJPcXES70yikatRKz1MiUH1oQqJosJn0A9xkmBnbWxezBdM55hiTXVsk/rXJr3IvrSWbooOcvrdpxf2NoATRxLfUa4fAbGl1YABgejvJuhqKTrmK7YRbKNZFv7K/CVoZ514lQx+gztf7GF663jiSoxd+q9VscG30QlKArmHFSnbPzvQ0mOduflKMqenZH1Sp7riB7bQ0ZDKkrri7DNrpbk6yQj0TMKGaOqeVLonjDOgdtRZfNmahljqAwinEOpuDg1K9MZoDi16hFgcChejpBxuG5ktcIL5UWV2ZT/Yn1moQgA7G9TGqm7Rbe0Dp679Pzw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rLATigvkRbYi4kss/x6fuGy5EMt+6wsPiF87a9iagnc=;
 b=V6+gI7V3sv7abZGc28sMlr0tbVw4RzL51nppv7sVwvPoqx0KZ78TFRveTJPxIApw+ZZeI+DlDIIk+HeHofqnphkC0robGbduL8By8GSz/Q+ZFkI+cGqBJYHEgQOpGcLpQ+XxEqZHr4hsfmzJeHSIx35KDgvIbUEMIHpKXEo7l4s=
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
To: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
Date: Wed, 7 Jul 2021 18:46:03 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210707164001.894805-3-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0016.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:5e::28) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ab8c904a-64a3-45af-1adf-08d9416f1ada
X-MS-TrafficTypeDiagnostic: BYAPR03MB4614:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB4614A920E7E2438EEA9327A1BA1A9@BYAPR03MB4614.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: q3iKM7cbPjK3+sZfi3bxj0XxNiCT4FZda3VVSynqNqLwviLGeiYzUgRUXF1r/Lri8O5yvpguzWsWQjzB00xpM1K3yjsn8pGFRyaOvDtaHQs2kPQv+v4qqIoQu/NqQMmTZYY/WTK2STlJL2+VIZYdF9ZPHCDJMfs0vz/Zf3O9KqBsLn9Cp1i+bBqKUFp1sRJTYXyhbORUsKHUbJf8/sMJlf+QHdOjCnAl5sUWOg+3VCBFKFg9RcTShp4qaQrP10lJmD5FNg3p7xnYlHXqcPEdhkOYAvMxWW5Nhx9SLxI45smL+zn1+vMkCx8hMpyEqMbdZQXozNK7Koa+NUrbJmgvk7RTGmGYXozgzKHUW8R7LOPwAGvxpWH0fF5O8hSb1l91pdIuq0zo5tEdFQ8G7DPjvnSWgKbCK7OJ0Ievju/m3NhMTSg0lXkAR9C+nblsVJMSlP1pUhczja/eWvRjtxZDvzw3wXpotVgxInrdA17Yq42plQu+hPJ0Q1s3SNJCN0Ao8E8zz8qyqI+AWXmbMXP7B5aqgeHlGkkxA+SJgmStFKWCcKJPXOmM6v2nDfMX8F32WnULHGeo91tdJDd2xWI04UJkiXSjxw6biq7zaCqiAg3F7jsygwq4tD6hF0i457+/VtFHlkAs0MLxGGOqg/bt5WWoHLYffRvfIq2gbd8jdZXKPgrq2zKS0A9whEz3uMzgrHugpzTvnxCqFJvByhDoFx3jkLGos7xC8ePhYZq3iTY=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(136003)(39850400004)(366004)(396003)(478600001)(16576012)(4326008)(316002)(36756003)(956004)(8676002)(2616005)(2906002)(5660300002)(186003)(8936002)(66476007)(66556008)(31686004)(66946007)(53546011)(86362001)(6666004)(31696002)(83380400001)(6486002)(26005)(38100700002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: ab8c904a-64a3-45af-1adf-08d9416f1ada
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 17:46:10.0600
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: zsVPXGatneTzEyrhxM264e4tiwQYut6IxmxUCni9x6NC7z88uGQSz/oShTBIK62A8C7QacjOrhaSNDeN82KetJ3N9ix2o55tV0wenSxfhl4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4614
X-OriginatorOrg: citrix.com

On 07/07/2021 17:40, Anthony PERARD wrote:
> ninja is now required to build the latest version of QEMU, some
> container still don't have ninja and attempting to add it breaks the
> build for different reasons, so QEMU will be skip on those containers.
>
> Failures:
> - ubuntu/xenial:
>     fatal: ninja version (1.5.1) incompatible with build file ninja_required_version version (1.7.1).
> - debian/unstable-i386: (debian-unstable-32)
>     /build/tools/flask/policy/Makefile.common:115: *** target pattern contains no '%'.  Stop.
> - suse/opensuse-tumbleweed:
>     failed to build iPXE
> - debian/unstable:
>     update of the container fails with:
>         The following packages have unmet dependencies:
>          clang-8 : Depends: libstdc++-8-dev but it is not installable
>                    Depends: libgcc-8-dev but it is not installable
>                    Depends: libobjc-8-dev but it is not installable
>                    Recommends: llvm-8-dev but it is not going to be installed
>                    Recommends: libomp-8-dev but it is not going to be installed

Only the first failure seems to be related to ninja.

The second is a known bug which still needs addressing.  Our build
system's logic to cope with `checkpolicy` being absent doesn't work.

Tumbleweed is generally broken and fails at ./configure due to missing
compression libraries.  It is quite possible that the iPXE failure is
related.

The final one is probably because unstable has dropped clang-8.  The
container hasn't been rebuilt in a while because we still haven't got
auto-rebuild sorted.

~Andrew


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 18:39:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 18:39:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152663.282006 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1CST-0000jD-2N; Wed, 07 Jul 2021 18:39:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152663.282006; Wed, 07 Jul 2021 18:39:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1CSS-0000j6-Ve; Wed, 07 Jul 2021 18:39:40 +0000
Received: by outflank-mailman (input) for mailman id 152663;
 Wed, 07 Jul 2021 18:39:40 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1CSR-0000iv-VC; Wed, 07 Jul 2021 18:39:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1CSR-0002Dr-NF; Wed, 07 Jul 2021 18:39:39 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1CSR-0004fw-Cu; Wed, 07 Jul 2021 18:39:39 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1CSR-0005TK-CN; Wed, 07 Jul 2021 18:39:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LEGr3M4dup8LbUBnjYYxgiu8OyDopCqGeBYNr+5f9OA=; b=yEiJX0kCLseuV1Af0eKhZh8n7l
	ORNedV0Z5Os9hT5ezLzBybyu8YC7ht2w3W9aM74fq3Aapu0Wf6sPCbLKKvaRfunOj8mxg9nJyfXGx
	7eRnbsyG+TAQnv70OYtZNJ3b5TbO9WQ7hiMW/TYC0Ppwk6/CMuR/Q5A9r4GU63dzMh/Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163408-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163408: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=e362d3276d40e4f370c92eaa6c0e84e34badb92b
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 18:39:39 +0000

flight 163408 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163408/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  e362d3276d40e4f370c92eaa6c0e84e34badb92b
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163326  2021-07-06 09:01:40 Z    1 days
Failing since        163328  2021-07-06 13:01:47 Z    1 days   17 attempts
Testing same since   163408  2021-07-07 15:00:25 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Bertrand Marquis <bertrand.marquis@arm.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>
  Rahul Singh <rahul.singh@arm.com>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   4473f36010..e362d3276d  e362d3276d40e4f370c92eaa6c0e84e34badb92b -> smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 18:45:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 18:45:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152672.282027 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1CY4-0002Al-Qd; Wed, 07 Jul 2021 18:45:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152672.282027; Wed, 07 Jul 2021 18:45:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1CY4-0002Ae-NS; Wed, 07 Jul 2021 18:45:28 +0000
Received: by outflank-mailman (input) for mailman id 152672;
 Wed, 07 Jul 2021 18:45:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ozWG=L7=kernel.org=pr-tracker-bot@srs-us1.protection.inumbo.net>)
 id 1m1CY2-0002AS-Ve
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 18:45:27 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7e0444e6-df53-11eb-8520-12813bfff9fa;
 Wed, 07 Jul 2021 18:45:25 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPS id 1F74761CCC;
 Wed,  7 Jul 2021 18:45:25 +0000 (UTC)
Received: from pdx-korg-docbuild-2.ci.codeaurora.org (localhost.localdomain
 [127.0.0.1])
 by pdx-korg-docbuild-2.ci.codeaurora.org (Postfix) with ESMTP id 199346094F;
 Wed,  7 Jul 2021 18:45:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7e0444e6-df53-11eb-8520-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625683525;
	bh=kdfpLu1SsHBuIdOzsEkc8SEq6yaCdkgmUWedy83UZdI=;
	h=Subject:From:In-Reply-To:References:Date:To:Cc:From;
	b=tacU79ggiYoCmccnpL7d5ZnPbXlKbuqXdL/LE2YfFfvk5zjIbzM1wkTChNmUfkWAA
	 JtsPKxPckrARc7w1mt/kHjjMB64lSu60OCiCIXrZleXLwUr2C/QdXaHHSbba10Ba/r
	 lyHpAm7rdbMQ3Blp+YxI0aR0Wje1rGuGMvCjk9JzXTtz49NDtvKapDz3pj1xJ2a5gT
	 GrvLXGjRlFuwvTDqqVaWd6MDOD+aPe0PGA7AHM+AA1yen4gxOIN5d25M8TnMpbvj2X
	 nJN0DhVupvd7Mm70s8Ini2XFUvb8aAZM7qgQbX+0n2V2UiXb/CqsmT53uF9XBswbw5
	 dOoHwq18JJ8Aw==
Subject: Re: [GIT PULL] xen: branch for v5.14-rc1
From: pr-tracker-bot@kernel.org
In-Reply-To: <20210707070139.27901-1-jgross@suse.com>
References: <20210707070139.27901-1-jgross@suse.com>
X-PR-Tracked-List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
X-PR-Tracked-Message-Id: <20210707070139.27901-1-jgross@suse.com>
X-PR-Tracked-Remote: git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git for-linus-5.14-rc1-tag
X-PR-Tracked-Commit-Id: 629a5d87e26fe96bcaab44cbb81f5866af6f7008
X-PR-Merge-Tree: torvalds/linux.git
X-PR-Merge-Refname: refs/heads/master
X-PR-Merge-Commit-Id: 4ea90317956718e0648e1f87e56530db809a5a04
Message-Id: <162568352509.3837.16922329777846284070.pr-tracker-bot@kernel.org>
Date: Wed, 07 Jul 2021 18:45:25 +0000
To: Juergen Gross <jgross@suse.com>
Cc: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com

The pull request you sent on Wed,  7 Jul 2021 09:01:39 +0200:

> git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git for-linus-5.14-rc1-tag

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/4ea90317956718e0648e1f87e56530db809a5a04

Thank you!

-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 19:30:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 19:30:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152681.282044 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1DF6-0006Mq-28; Wed, 07 Jul 2021 19:29:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152681.282044; Wed, 07 Jul 2021 19:29:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1DF5-0006Mj-UX; Wed, 07 Jul 2021 19:29:55 +0000
Received: by outflank-mailman (input) for mailman id 152681;
 Wed, 07 Jul 2021 19:29:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1DF5-0006MG-7Q; Wed, 07 Jul 2021 19:29:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1DF4-00033H-VV; Wed, 07 Jul 2021 19:29:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1DF4-0006pL-M4; Wed, 07 Jul 2021 19:29:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1DF4-0006ZX-LX; Wed, 07 Jul 2021 19:29:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=9c3R/5SPzGcmHggdMlpgGOrmh3tzbetN7KlLe+/zdFM=; b=yurzuzdHYiQDWGlUhDxmdUbKuF
	EyfseyyEEe6/OyMfYXkKKnm1y2dPbxMizOdgob4CQioTsQ6w9lvv+jM6spW+jbtxEqG40rwgI5Uqa
	5Q1BRkr/1PvHTB4jlSFHuz8QhlgPKEiChIvMkkhgcx89Tdk09Od16A8QTFEtbMTXKrrk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163389-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163389: regressions - trouble: broken/fail/pass
X-Osstest-Failures:
    linux-linus:test-amd64-coresched-i386-xl:<job status>:broken:regression
    linux-linus:test-amd64-i386-libvirt-xsm:<job status>:broken:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-xsm:guest-start/debian.repeat:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-coresched-i386-xl:host-install(5):broken:nonblocking
    linux-linus:test-amd64-i386-libvirt-xsm:host-install(5):broken:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=77d34a4683b053108ecd466cc7c4193b45805528
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 19:29:54 +0000

flight 163389 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163389/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-coresched-i386-xl    <job status>                 broken
 test-amd64-i386-libvirt-xsm     <job status>                 broken
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install    fail in 163363 REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install    fail in 163363 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-libvirt-xsm 20 guest-start/debian.repeat  fail pass in 163363

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-coresched-i386-xl  5 host-install(5)       broken blocked in 152332
 test-amd64-i386-libvirt-xsm   5 host-install(5)       broken blocked in 152332
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                77d34a4683b053108ecd466cc7c4193b45805528
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  340 days
Failing since        152366  2020-08-01 20:49:34 Z  339 days  580 attempts
Testing same since   163363  2021-07-06 20:09:53 Z    0 days    2 attempts

------------------------------------------------------------
6614 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 broken  
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  broken  
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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

broken-job test-amd64-coresched-i386-xl broken
broken-job test-amd64-i386-libvirt-xsm broken
broken-step test-amd64-coresched-i386-xl host-install(5)
broken-step test-amd64-i386-libvirt-xsm host-install(5)

Not pushing.

(No revision log; it would be 1929337 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 19:30:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 19:30:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152683.282058 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1DFF-00077w-D9; Wed, 07 Jul 2021 19:30:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152683.282058; Wed, 07 Jul 2021 19:30:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1DFF-00077A-7d; Wed, 07 Jul 2021 19:30:05 +0000
Received: by outflank-mailman (input) for mailman id 152683;
 Wed, 07 Jul 2021 19:30:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=CPPN=L7=gmail.com=rosbrookn@srs-us1.protection.inumbo.net>)
 id 1m1DFE-0006wK-6U
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 19:30:04 +0000
Received: from mail-qt1-x82d.google.com (unknown [2607:f8b0:4864:20::82d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1f8a3c8c-e5c1-4f4e-bee4-0e4e5e230a2c;
 Wed, 07 Jul 2021 19:30:03 +0000 (UTC)
Received: by mail-qt1-x82d.google.com with SMTP id d1so2921225qto.4
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 12:30:03 -0700 (PDT)
Received: from FED-nrosbr-BE.crux.rad.ainfosec.com
 (209-217-208-226.northland.net. [209.217.208.226])
 by smtp.gmail.com with ESMTPSA id x14sm5309510qkm.64.2021.07.07.12.30.01
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 07 Jul 2021 12:30:02 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1f8a3c8c-e5c1-4f4e-bee4-0e4e5e230a2c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:content-transfer-encoding:in-reply-to;
        bh=X/zO85YjvOrB7woXveint/YGYqlecHwG0pUi1LLySbw=;
        b=LRwsg7UjMKEOFGZ1wxkP2mbtz2Xid4zr68SQGOYiFJOGesveDNU881EuqdXkaQlKd4
         SDTYggjVe8ut6lkBNw1ab7WJ69c+sfuEbmLl7vPVaBPzHc6MuhyzfSUkmgiTI6Hg5kuB
         yoc7n+aC2/NijWsMyf1Nz1tzJRYB2RGRhK3rEobK0q2a1MdCux3l0ptpSEYnFs5yJ30G
         QUJulDCr1MQ+T/ZwBxdU3MSnDNp/J2tvQ/prYoCiYsh655pNj60W3wiY5iirNk0qCiMC
         p3tDUo4CSCMahJjFNHia54bPpjuVbCWE+0ZYk4dyUWCWKJF/E5MQlLqe3l5poiuq7vVE
         +41A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:cc:subject:message-id:references
         :mime-version:content-disposition:content-transfer-encoding
         :in-reply-to;
        bh=X/zO85YjvOrB7woXveint/YGYqlecHwG0pUi1LLySbw=;
        b=mOehaq4r/+NOK2J+qZPopoY6qNJksQW6Ln6azr4x9E1vPVK8OX0Sb46M7Pg46IteX5
         SjE18GVB6irL2uZINMGP+uUoXUQzpkWeqkPYyFcjZ6JzrmX1ZflVvco8W/lBqMywOlCw
         4UgAVrZwWQlz8rT9rNDD34VWz9xEelxI2QD6zVjClVOQ1ZHRpk9HmZnjF1/WvpWT2FvV
         qjgb1RDuRWsPx35O/XgJ1ei47nLssPQg8pE2WMcHP6qh+ZTqZGVQzlo0jPp08J35eOh8
         0XUigdmQE1dCwhtwMERIk/Qa44QyDM+0sET9jRuoPxRaZH987Tdq9AdWTIcChlXBDcSi
         Sc3Q==
X-Gm-Message-State: AOAM532fNCQhT3EC5+kP+TbOdaoNrY4sJA5DkAOopW95kP2WtIB078Mh
	4PpkQUmdh+wtmCJ1YYIOiyc=
X-Google-Smtp-Source: ABdhPJwssPXanCWHpIwA6NtdL6nKYk+/VW75N1Ine48YNrCRjgtvIY7/NHhDqAoztG/d68iNQt5KDw==
X-Received: by 2002:a05:622a:290:: with SMTP id z16mr18154094qtw.29.1625686203236;
        Wed, 07 Jul 2021 12:30:03 -0700 (PDT)
Date: Wed, 7 Jul 2021 15:29:59 -0400
From: Nick Rosbrook <rosbrookn@gmail.com>
To: George Dunlap <George.Dunlap@citrix.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [RESEND PATCH 03/12] golang/xenlight: fix string conversion in
 generated toC functions
Message-ID: <YOYAtx54IDRWT7O0@FED-nrosbr-BE.crux.rad.ainfosec.com>
References: <cover.1621887506.git.rosbrookn@ainfosec.com>
 <06763aceff41167d3d3bbd603f729572c1f55c77.1621887506.git.rosbrookn@ainfosec.com>
 <6BAF6F60-EC63-41AC-A46E-2045E746C7E1@citrix.com>
 <YNC6LzVHXCcNfg+E@FED-nrosbr-BE.crux.rad.ainfosec.com>
 <22BCDDFA-0EDB-466D-B644-54A956C0D84C@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <22BCDDFA-0EDB-466D-B644-54A956C0D84C@citrix.com>

On Thu, Jul 01, 2021 at 02:09:47PM +0000, George Dunlap wrote:
> 
> 
> > On Jun 21, 2021, at 5:11 PM, Nick Rosbrook <rosbrookn@gmail.com> wrote:
> > 
> > On Fri, Jun 18, 2021 at 11:00:26AM +0000, George Dunlap wrote:
> >> 
> >> 
> >>> On May 24, 2021, at 9:36 PM, Nick Rosbrook <rosbrookn@gmail.com> wrote:
> >>> 
> >>> In gengotypes.py, the toC functions only set C string fields when
> >>> the Go strings are non-empty. However, to prevent segfaults in some
> >>> cases, these fields should always at least be set to nil so that the C
> >>> memory is zeroed out.
> >>> 
> >>> Update gengotypes.py so that the generated code always sets these fields
> >>> to nil first, and then proceeds to check if the Go string is non-empty.
> >>> And, commit the new generated code.
> >>> 
> >>> Signed-off-by: Nick Rosbrook <rosbrookn@ainfosec.com>
> >> 
> >> So wait — if you do
> >> 
> >> var foo C.typename
> >> 
> >> Then golang won’t automatically zero out `foo`?
> >> 
> >> That seems like a bug really; but assuming this fixes real behavior you’ve encountered:
> > 
> > I would have to dig in again to figure out exactly what Go/cgo is doing
> > here, and whether or not this is a bug. But, the behavior I observed was
> > that without these nil assignments, I would sometimes get segfaults in
> > libxl_string_copy. This patch ensures that libxl__str_dup is not called
> > in the empty string case, thus avoiding the segfault.
> 
> I skimmed through the CGo page again when I was looking at this, and didn’t see anything specified about what happens if something is passed to a C function before being used by golang.  If you get a chance, I think it would be good to try to file a ticket with the golang project, pointing out the observed behavior, and asking them to either:
> 
> 1. Document that the golang compiler may not initialize a structure before passing it in to a C function
> 
> 2. Document that it *will* initialize values to zero, and fix the bug.
> 
Sorry for the late reply. But that's a good idea, I can try and come up
with a reproducible example and open an issue.

Thanks,
NR


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 19:52:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 19:52:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152695.282072 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1DbE-0001ap-7r; Wed, 07 Jul 2021 19:52:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152695.282072; Wed, 07 Jul 2021 19:52:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1DbE-0001ai-4X; Wed, 07 Jul 2021 19:52:48 +0000
Received: by outflank-mailman (input) for mailman id 152695;
 Wed, 07 Jul 2021 19:52:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=eUo+=L7=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1DbB-0001aY-Vg
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 19:52:46 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.219])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e5297a34-df5c-11eb-8526-12813bfff9fa;
 Wed, 07 Jul 2021 19:52:44 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx67JqgXTb
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Wed, 7 Jul 2021 21:52:42 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e5297a34-df5c-11eb-8526-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625687562;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=L3todOf+rRR85nJeOG5zIOoUYCN0b4ZAUs7tMpkzywY=;
    b=StVFz9IZYl/2r0dgFYt50RK3Ec4igr397KulvFQJ59DuIUI0nsI5/UQa2LI7Ig2oDT
    a7YD75K3jyVVT/jHmg4TG3GL043DbkXZMWc9oeOp04QfYrjxMF/yYCWo8dJEdhIKhBRd
    M09EhObyMT9L1wa74tq2Sv09x/bkAy6W67XwewvRtF/LLFIaLJjsZme2WezOLFuOyj76
    IFOwKYYVhvPYEv+7Oxg9jK4i6DGz1/yOCrl/5FRO/2YqeyxAO+oy/Bnvc9LZeDmyi75/
    7+NpsMGMzz8w0cTxqz9ojkys41wtdt7nfQZfhNONy1F1JsMR/t+FzeObA2O+W63JWGPH
    z+lw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Wed, 7 Jul 2021 21:52:35 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <20210707215235.76f15361.olaf@aepfle.de>
In-Reply-To: <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
	<20210707164001.894805-3-anthony.perard@citrix.com>
	<e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/o3LRHdSBZ6D2GQ3ZiFSyt.p";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/o3LRHdSBZ6D2GQ3ZiFSyt.p
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Wed, 7 Jul 2021 18:46:03 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> iPXE failure

it just needs to be updated to ipxe.git#master to make it compatible with g=
cc11.

Olaf

--Sig_/o3LRHdSBZ6D2GQ3ZiFSyt.p
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDmBgMACgkQ86SN7mm1
DoBtOBAAlcD8RPA0qYBFCmQuOuyVqATnzXc0lmOsnNX9Lsetdd4DihlFtBBtrjTC
HdTj7CrayuASsIClmvHzhcQ1OOqE+uqQ7j+vPEXhn8ZXCy9NOw/zfHGfZbL7NHyG
OYRF9NYukM6CKahIG7Y+C1uekPNIndW3SAQegDD5S9xXGmigk97lCl4rZdqUFJiI
y0z22jmXT8yw60WJg8OvnWfoGU160XMaTza2twgb2Km7MAza0iL4zWP0nxHlHm+j
SkLRGVlklkQItdmmxPcDTHcR+90I50edGHw1h71vDwwG86a+VbE1vHr7RAifL1Pw
s7nzHe8/XMj6osiNYZPxalzgnaTq/Z29akvwIaCwjBNU5w2NBUqRaBsrKrbHtHjV
Amk6N5Ul4kD2AZz1K5ahnM7fV55w4dOHB0xWCxGVJZz+o6Rwpj5X67zS2n8wX6MB
rFC6rdthp0iWxKGokWgOons6ViMCYeYFcU1H3FML++4/QvMRFVmSRKEZEclJAjUG
mTVTT2ij4ABvM4uDHgd3UnahUDRcC/wdMl8oo9awGFh3iBpd/Pw2Le4OADre4eZP
JhmEAtqWEP2EYLqMjPFkwN7NhH2ouN5e+spbfQKv9gjwOGU9pyD3IduLJgrnta8c
psuloYw1VrnmuZIM+88AYjBPAX+lXao0DTwO8Beu0OXdiqltGQo=
=qBjj
-----END PGP SIGNATURE-----

--Sig_/o3LRHdSBZ6D2GQ3ZiFSyt.p--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 20:36:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 20:36:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152703.282086 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1EH4-0005iP-Mv; Wed, 07 Jul 2021 20:36:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152703.282086; Wed, 07 Jul 2021 20:36:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1EH4-0005iI-Jl; Wed, 07 Jul 2021 20:36:02 +0000
Received: by outflank-mailman (input) for mailman id 152703;
 Wed, 07 Jul 2021 20:36:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=eUo+=L7=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1EH3-0005iC-Co
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 20:36:02 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.164])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 688bb293-4cd8-4e32-a446-4ecc739c2fd7;
 Wed, 07 Jul 2021 20:36:00 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx67KZwXZJ
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Wed, 7 Jul 2021 22:35:58 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 688bb293-4cd8-4e32-a446-4ecc739c2fd7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625690158;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=Cd9IqXgfDwCult7hj19byaCp61qXgIMz/XjhX2z4CfI=;
    b=S6h+PVT956hG7U5Sm1N2PWgcoKY2KoRftyiIoTqs8RR5q7V8DibvgFfDGcCYYVXbQ9
    KslDVmGZp6KiL0DJQEKeJcWx4mwgtmIAnw3ryk8a3LJZ0dgHrjLPjnNF5bW4vr2laH1e
    kHbS/+nylvkGuuhLPc39kma5AmTpsyN0vv4gSIkjuToUm04Fj7W75vvhE2U72yMJf/j+
    LE/P+GKf/zryjcBXubCEHAdJQZKsuJ92jz6hxRAQuIQShUUxiTEZ/O7pFxYJEtTNTlf2
    C/EFBfo2ok23njV21IScGQG4/wJVGNJQTg1y2CrrBXEoVLuar5HIlzF4yi+Do3w7gQGl
    9cvQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Wed, 7 Jul 2021 22:35:51 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <20210707223551.5462c74e.olaf@aepfle.de>
In-Reply-To: <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
	<20210707164001.894805-3-anthony.perard@citrix.com>
	<e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/Z40aI1UnBoBfs5S/.Rf6/_0";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/Z40aI1UnBoBfs5S/.Rf6/_0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Wed, 7 Jul 2021 18:46:03 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Tumbleweed is generally broken and fails at ./configure due to missing
> compression libraries.

Something requests zlib-devel to be installed.

I suggest to provide all config.logs, not just the one from the top directo=
ry.

Also a "test -f /etc/os-release && cat /etc/os-release" should be added aft=
er "$CC --version", just to know how stale the container is.

Olaf

--Sig_/Z40aI1UnBoBfs5S/.Rf6/_0
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDmECcACgkQ86SN7mm1
DoDEnQ//WJPtLa4Plvvf1g1U/XOpJJpreYCjzRb/X8pliatWn3CdouA4MQnf4P8l
B7aM+EGqd7Ruep3JdXpqreM8mfz6judMp76KDfueILaZYw158xmunlgPk8BIBW+Q
duEZIlDAfRvDR0tmTb6xdl7oTx/dF3agX9JMV83swYmbrgTMGKyGJc3PTcRmk/CM
S0nbXxW5/8gaLqHVGSNeCcPdzdnItG3gEYwK6khY0NiBS8i26o+dGFAPyGMNUwBu
xYrDWgZqpYZE1keBwoqOTD6uIbo3lcj1V/v/Poa7Umoj0meD0gr1YygDoLnZQHkN
3R4gcZZgxzkATloaYMFPbyCaMoePj+OgdnIqO3KxmoMKshMG8vg6SFnfJj8YzrZg
Al98oAC634toZ9bIAyPLOJePdz+8V4ViSfZtxmHfUNgxdQiAugDkwjcB9pt7O8RQ
kIt2jMn3fx5OqZgmgw9MyWjIMLYRm59vf0tIgR8eWjQSY7N/b8e9cWMOh6ZeZPVv
qmswEryiqq+mK8XAjjPGfwgzB9piHJ9hwMuP2JAUSjfq7ljNNghTmXxYSQ7cnQ97
GfQcmhU17JTJj/r/+K6Pl5wBX1JHtS/HXf+vrs+9FXPVeOB0tias64TWw+CBNUpf
/5KngZfyKfu1tasGWfeLZHdQzDFPf3BVScVtgRQfMbxFYZg4a+I=
=+PNg
-----END PGP SIGNATURE-----

--Sig_/Z40aI1UnBoBfs5S/.Rf6/_0--


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 20:47:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 20:47:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152710.282100 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ESC-0007Da-Pp; Wed, 07 Jul 2021 20:47:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152710.282100; Wed, 07 Jul 2021 20:47:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ESC-0007DT-Mb; Wed, 07 Jul 2021 20:47:32 +0000
Received: by outflank-mailman (input) for mailman id 152710;
 Wed, 07 Jul 2021 20:47:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1ESB-0007DH-9U; Wed, 07 Jul 2021 20:47:31 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1ESB-0004N7-59; Wed, 07 Jul 2021 20:47:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1ESA-0001HQ-P2; Wed, 07 Jul 2021 20:47:30 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1ESA-0003vQ-OV; Wed, 07 Jul 2021 20:47:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=m+kxR0aaveX7X0eM2tmMy5kQyupYCWgb+ddBZPhTae0=; b=bRWPVKRNdTQ0SgYbpdoeVB9zjG
	MZZ/6ObB6ani2JZ7KDCUIPaGlSSaqu/CTEoWeUI3uXu6Wum2zzwX8PVELydlbnncWO7xJQhVy4+E2
	/OyjX+H5uz3hqCRDB+jGj8xPqVc7fdWnrD1rdGiNfV4SeGEdE8DtoAC0okkY0Y/BJMmw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163394-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163394: regressions - trouble: broken/fail/pass
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-rtds:<job status>:broken:regression
    qemu-mainline:test-amd64-amd64-dom0pvh-xl-amd:<job status>:broken:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:<job status>:broken:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:<job status>:broken:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-dom0pvh-xl-amd:host-install(5):broken:heisenbug
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:host-install(5):broken:heisenbug
    qemu-mainline:test-amd64-i386-xl-pvshim:host-install(5):broken:heisenbug
    qemu-mainline:test-amd64-amd64-xl-rtds:host-install(5):broken:heisenbug
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    qemu-mainline:test-arm64-arm64-xl-credit2:xen-boot:fail:heisenbug
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9aef0954195cc592e86846dbbe7f3c2c5603690a
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 20:47:30 +0000

flight 163394 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163394/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-rtds        <job status>                 broken
 test-amd64-amd64-dom0pvh-xl-amd    <job status>                 broken
 test-amd64-i386-xl-pvshim       <job status>                 broken
 test-amd64-i386-xl-qemuu-win7-amd64    <job status>                 broken
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install fail in 163369 REGR. vs. 163321

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-dom0pvh-xl-amd  5 host-install(5)       broken pass in 163369
 test-amd64-i386-xl-qemuu-win7-amd64  5 host-install(5)   broken pass in 163369
 test-amd64-i386-xl-pvshim     5 host-install(5)          broken pass in 163369
 test-amd64-amd64-xl-rtds      5 host-install(5)          broken pass in 163369
 test-amd64-amd64-xl-rtds 20 guest-localmigrate/x10 fail in 163369 pass in 163327
 test-arm64-arm64-xl-credit2   8 xen-boot                   fail pass in 163369

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start          fail in 163369 never pass
 test-arm64-arm64-xl-credit2 15 migrate-support-check fail in 163369 never pass
 test-arm64-arm64-xl-credit2 16 saverestore-support-check fail in 163369 never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9aef0954195cc592e86846dbbe7f3c2c5603690a
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    1 days
Testing same since   163327  2021-07-06 12:39:04 Z    1 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  David Edmondson <david.edmondson@oracle.com>
  John Arbuckle <programmingkidx@gmail.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Thomas Huth <thuth@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              broken  
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          broken  
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    broken  
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     broken  
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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

broken-job test-amd64-amd64-xl-rtds broken
broken-job test-amd64-amd64-dom0pvh-xl-amd broken
broken-job test-amd64-i386-xl-pvshim broken
broken-job test-amd64-i386-xl-qemuu-win7-amd64 broken
broken-step test-amd64-amd64-dom0pvh-xl-amd host-install(5)
broken-step test-amd64-i386-xl-qemuu-win7-amd64 host-install(5)
broken-step test-amd64-i386-xl-pvshim host-install(5)
broken-step test-amd64-amd64-xl-rtds host-install(5)

Not pushing.

(No revision log; it would be 553 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 22:12:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 22:12:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152721.282120 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1FmM-00071J-Af; Wed, 07 Jul 2021 22:12:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152721.282120; Wed, 07 Jul 2021 22:12:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1FmM-00071C-7j; Wed, 07 Jul 2021 22:12:26 +0000
Received: by outflank-mailman (input) for mailman id 152721;
 Wed, 07 Jul 2021 22:12:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1FmK-00070I-7C; Wed, 07 Jul 2021 22:12:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1FmK-0005l2-3s; Wed, 07 Jul 2021 22:12:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1FmJ-00067q-TQ; Wed, 07 Jul 2021 22:12:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1FmJ-00046T-St; Wed, 07 Jul 2021 22:12:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=31P4IPRxnxzFwcgwsEGJQU4PnSRDOrlCPtPTTVO6T6s=; b=x31fGba31yw/PPKsN9tJ1xJ65K
	T7yDMEgTZEOt1+KtCkA4NhEplcscMjjUW5ai+FM7XObdICTbhlAMKOtR6a4JR1lW3scl9ZG8M9RJl
	mk7q+QrYWlt7HtKJWar1TcM0l73kPBfGgTKpcTC22xKwl773LuCKtwBNS+CJdJ1/xRns=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163415-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163415: trouble: broken/pass
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:<job status>:broken:regression
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:host-install(5):broken:regression
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=484910bf41fec2c80d79ed9c5c33831bee7318f0
X-Osstest-Versions-That:
    xen=e362d3276d40e4f370c92eaa6c0e84e34badb92b
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 07 Jul 2021 22:12:23 +0000

flight 163415 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163415/

Failures and problems with tests :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64    <job status>               broken
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 5 host-install(5) broken REGR. vs. 163408

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  484910bf41fec2c80d79ed9c5c33831bee7318f0
baseline version:
 xen                  e362d3276d40e4f370c92eaa6c0e84e34badb92b

Last test of basis   163408  2021-07-07 15:00:25 Z    0 days
Testing same since   163415  2021-07-07 19:00:25 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Jan Beulich <jbeulich@suse.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    broken  
 test-amd64-amd64-libvirt                                     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

broken-job test-amd64-amd64-xl-qemuu-debianhvm-amd64 broken
broken-step test-amd64-amd64-xl-qemuu-debianhvm-amd64 host-install(5)

Not pushing.

------------------------------------------------------------
commit 484910bf41fec2c80d79ed9c5c33831bee7318f0
Author: Anthony PERARD <anthony.perard@citrix.com>
Date:   Wed Jul 7 17:51:49 2021 +0200

    build,tools: have default rules depends on symbols
    
    No need to call $(MAKE) again.
    
    Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit ad76d87d65e1fd2ec3b08699d6dcfb0d2a9441c1
Author: Anthony PERARD <anthony.perard@citrix.com>
Date:   Wed Jul 7 17:51:34 2021 +0200

    build: use $(kconfig) shortcut in clean rule
    
    Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 3ce2765ac21dbd739e8216694b025aaabf4afff3
Author: Anthony PERARD <anthony.perard@citrix.com>
Date:   Wed Jul 7 17:51:18 2021 +0200

    build: clean "lib.a"
    
    Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 22:44:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 22:44:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152729.282134 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1GHf-0001oK-2E; Wed, 07 Jul 2021 22:44:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152729.282134; Wed, 07 Jul 2021 22:44:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1GHe-0001oD-VP; Wed, 07 Jul 2021 22:44:46 +0000
Received: by outflank-mailman (input) for mailman id 152729;
 Wed, 07 Jul 2021 22:44:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tWQe=L7=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1GHd-0001o7-WC
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 22:44:46 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ec960d4c-df74-11eb-8539-12813bfff9fa;
 Wed, 07 Jul 2021 22:44:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec960d4c-df74-11eb-8539-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625697884;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Y/RFHOmTQxWHCYhLL7X0WF1Y7NYykfPgGvgb6Wpa+UI=;
  b=bcVCs14dqgSFWW0sx9oz1UKKL0ZGlASn/IICRl3eM6y7qqgbeZPmImli
   ykc77HhL6flQvXXgtWyPbtnH5MlQ2oc6inH5v5xLbu+7KuTCJ4JODCBmW
   XJp56+TjtrKM9cyrH6HZtDMYDqJbvBWGBEoRjwuXnnxzAEJ2QGzgfsO0D
   4=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: qAmZMXx0XsueZ65rLp1MBxQTOCasSDDJowkhWez65gaAwDwmIRrwqTGTR3LnTTB6n68zf3S5Pq
 oZxJYXrnG0v1dPGrFAZsKYU3Lz42gA3oQiY7GjZP92jOFxVgmKb7YRVm9ye9jiUuDOt6MFUPgs
 eCmWkyjFuenhVSFVAS65j+DBykvwlNEIVvnuNL/bnNTKeBhSJnK6kneKVY0MIkjyjPJxlANZau
 312SruoFgoWGirx1dPZ5pnpq2Slh4UErwNEXQ+5OWy+ubXtoiA4nI0gMZorXf5t6SzxuYxFBV2
 EqE=
X-SBRS: 5.1
X-MesageID: 47847642
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:rnkXxaCbgRB5IHnlHehAsceALOsnbusQ8zAXPh9KJiC9I/b1qy
 nxppkmPH/P6Qr4WBkb6LS90dq7MAzhHPlOkPUs1NaZLXTbUQ6TQr2KgrGSuwEIdxeOkNK1kJ
 0QCZSWa+eAfWSS7/yKmTVQeuxIqLLskNHK9JXjJjVWPGZXgslbnnZE422gYy9LrWd9dP8E/d
 anl7F6T23KQwVoUi33PAhIY8Hz4/nw0L72ax8PABAqrCGIkDOT8bb/VzyVxA0XXT9jyaortT
 GtqX222oyT99WAjjPM3W7a6Jpb3PPn19t4HcSJzuwYMC/lhAqEbJloH5eCoDc2iuey70tCqq
 iCnz4Qe+BIr1/BdGC8phXgnyP61iw11nPkwViExVP+vM3QXlsBeol8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVittilG/rRMZ4K4uZkRkIM4jgYJq3MgiFBs/KuZGIMu60vFnLA
 BWNrCf2B4MGmnqKUww1wJUsa+RtndaJGbMfqFNgL3N79D69EoJuXfw//Zv6kvowqhNA6Ws19
 60R5iAq4s+OfP+TZgNTtvpEvHHR1Akf3r3QSuvyBLcZfk6B04=
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47847642"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NUbqnUnlnXgD7fHA7L+tQLTGi1gEKD3NFi2c1s/OycF5WP6ugJ+e2Aw7mxJtFyBZgurP3tUB+ONTmumhhVawsNLQa3w7BweM3i7cPadjtzK1FJDQuUWA0xj4NubEVyWrs1OVCtVSKRj1t/l3+eAGTG/S3hDyuhE0SHQVR1yVy8S88RVKwS6W2hW5qkimw6JMBexZgJPkZf/F0oPZhTDkBlEkb0l4JdhXWl3zN2Q2cY5/HbZ1xf++zw0ewL0lkDDOy2trjJVcniqBzFUmCFlD/AHJbQpHUW8bnpxeWrnVQfPLFkgKCppkWZEREuSMOiUsZ4E4nuggwZMlbdudrq01Fw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=3nkNjb8IYpxIhW6PeEExFbSvyORj5H+a+dPsoBFjZ4Q=;
 b=ObseIlRUsECwicSSLAPDkmt1MWXBMtwDF+WmPgfL6lifCeimrRJOFxExHfSsqZdIZUHPgzchKBYHAEOEQ9v3X7SFzw+GV7buKYGJt96pjNVNyIpTLs2f+yJbEP5HNNDJu/Wlbs2jIT41eG+Mxb3pnqxFToJVteVhm1TE+ACm+47ftDMjGz0SIbhSm/OQ+mS+/+9eNdvhQhX9rGsQRxwdx44ckgoLNfawT2qbyfmo2938+Fey5wvHVquOBhmdeUgwO7h4Kmz1lRSw1WdauqCz/ikYgeAWpyJOJYHSk69XBNa5gCUwSFUD0ie9V4X+lU5bgvfhAax7RtG6uyK+tMQ6IQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=3nkNjb8IYpxIhW6PeEExFbSvyORj5H+a+dPsoBFjZ4Q=;
 b=Q7gOnnzTIw8RbXtYa2PLOQHuwkfd5k5tV3Xt/fnLek5Npsa+Vk38LM2jy2L6IWqs9OUN+vZ635QvolKqJOrALpkBETvP3EnYCDaCAPJrfVZXz0MOhrEKE/yoassEikXv6SjdLwQ+maYeyxHD25Aitrf9eOm49FO4tyYRC/VI/aw=
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
To: Olaf Hering <olaf@aepfle.de>
CC: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
 <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
 <20210707215235.76f15361.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <930b58b7-326b-1855-6f24-2e2a4b3ed4a8@citrix.com>
Date: Wed, 7 Jul 2021 23:44:33 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210707215235.76f15361.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0132.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:9f::24) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e9491f18-4250-46a0-7394-08d94198cde4
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5454:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB545454A687DEF486851CD3BBBA1A9@SJ0PR03MB5454.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Ut/sCRfwLbM9PpSUFsmZqhzosisSJwSoZ3CPBBNIC6P66Du77WAWWqQ238EXXgZKYsrJxGH+AeAIb4TWX26VKLJRHEDktPzSp0r1pMArvZPmxnc8wwdzLWyhSRd2t8ZTkFnhnRLUey72tQWiA6wHJhhOScIOfPvviakux8Ym0kOo46wr6Rcr9JgzPig9RKzN7P+2CnU5TKiYf1Uv8YlxgQSct+6e9PDLRtPtS6099fDqM+GtRzategcas9GqmNJPMCG/PEDt3Osy6WxEWVdGOF/bgVL0CPR8fZOJp1QjzXyogbXVsjcZ8a/92zgb8mLCPIU2stQizkPpJvApHxFoNDW+oKla+c6byLvnzlPrGLbhAQGRFcJ5T+a2HHBFt4vmZcp5ZQ6VmXqirQwxHw7/okhdxmba8AoW0TpPF0g+D1yTM20CyKELKfSktGSnAamLRuCKC7jliDWtEZyV7DADI9UQS2x1uPF3Z0Z/wde7ZhPNmlM9CbIRNDOikElC5SLI8FE1Tq8rZVP+625jiSD1A/soDzuoWdpqMaVU5LUweyN4SebtqMGY7hRVobPtFp1lN7jmt7/Aw5iJf8DAPlFkIuREUrylmoFmKgEfBOABHW0vR4D/yXD/f+cK9vYzamPwu/uBKPfbMepTbJ7xJoLtU4TcaPIaPsX/7Scjg2Z3KmXj5FmJvHR5aR3fdM4++9JomNiqVMuSkSp7FFYehmckIahtMM2Sr4qd7Daob+ODugc=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(136003)(39860400002)(346002)(8936002)(53546011)(2906002)(2616005)(16576012)(316002)(956004)(36756003)(54906003)(8676002)(26005)(4744005)(31686004)(4326008)(6916009)(6486002)(83380400001)(6666004)(66946007)(478600001)(66476007)(86362001)(66556008)(5660300002)(38100700002)(31696002)(186003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?HbvsyQeJbqoAjFoHvbwEX+lk8cR0zXBrU6LzpY1yhL4jTt53UEtvbKOE?=
 =?Windows-1252?Q?ts819y8dLYWLyTxsEsimJxBlZQSIsoF3x+l1uppXhI/9p1JoBpq5ivMV?=
 =?Windows-1252?Q?ZzODw+bZvtqaXVWiYA9hX6gUChG1xg3uWvWMiBa4Uy6bxtLoIBlQxaMN?=
 =?Windows-1252?Q?UHs2Y7B6bOd3a3f9Qjk7CJEmTXwj8YhZHOK4yK2Hm5NkG6m9dHLmKEom?=
 =?Windows-1252?Q?YU9rHjPHVfvF4trJI14XMXP0KL4YRqK6zb13dLcQzO+KaX0vRpg4VrDf?=
 =?Windows-1252?Q?MmxZMh/6uEWgmz0MBmj1uqiF4SJ9tFH+Sd2hsaAj6rMgFpN723Nku1oi?=
 =?Windows-1252?Q?EXtVqkBwTk+AKKAkpNE354tMjwiJGxEn2LcLwZ6sGf3VWz2DsK6Cg0JH?=
 =?Windows-1252?Q?h+iCN3/T3E511DRajjAvZctu3TUnyoGdp3Nl9Mfqe87J6btXBCx7VTpa?=
 =?Windows-1252?Q?nqdWZ++XFc1hyVPGUYyIM3raehFOdjmylzV3IYDvTK9Xzf4md2ATvfz+?=
 =?Windows-1252?Q?MC2mwpavuiAppQ4eyvl2qba2vsRumcoLp9YWks+KaByLr3GYfWgHqxIt?=
 =?Windows-1252?Q?cZHCE6/BnGG7GktUMpEs5FksVnoH8lLvFVCuhdSvDS1tx2U6KwqsQux+?=
 =?Windows-1252?Q?ImJvgcDArm7dGCIhWlHYvuCkuzepiIyrnEpdjvVrhEijP2sj19q5F9Ji?=
 =?Windows-1252?Q?AqJ9/FMqtaXPPDKzKdu9f2elBlN2aoCjpSCimFb14kvOY2WZVYbIU+KC?=
 =?Windows-1252?Q?GcTGt7gFfabAT2uPie7XgqPqaMMD4tDuCv3oFfzHEkHC0nWbKGd1gp2D?=
 =?Windows-1252?Q?IkR/fgDtEgRnZoVpuHdhHGqDT8VIKKMCDVZtafjA3wGf9rlfzLamIEac?=
 =?Windows-1252?Q?JiPpeNI3cHw/7b8ZHcTmPYhYuJ5/DCrnLFSJGb/koKLwOEOhFyCV71cT?=
 =?Windows-1252?Q?i4EO5wkzdKKv0iIRIPN2EKJ6ICnsgYfNkOW0E+V73qcPXAliD2kCElUE?=
 =?Windows-1252?Q?OW9+HkTOMhTsJ8Wt8BfB/oZDvlY3VUD4JVIRmd2TS74TqJGLB+B6O4fO?=
 =?Windows-1252?Q?Xc+pH5QEFdGUqeJl3qyx+NFkoJaMkR/PXShSWBt2jY5oltWp5et6cD5t?=
 =?Windows-1252?Q?/+1S+J4GAd9R9kq3xJ8RoOF8rQkxKcfPQR/qhtj+ffbwejSspLKbL9R1?=
 =?Windows-1252?Q?zWjV6/RkM2mOui7f8hPcRGsWKBBFHQSZxbVeb4gK+5lkNh+JbfLhcESB?=
 =?Windows-1252?Q?r4rcovDdhxVNmmnHc2l9b014NqYbkDByTd+Zu0ic4L/2818Ou/tq4QNc?=
 =?Windows-1252?Q?w78e35byGaS5sMCSzEGow08y7ESBcZh004iarPkeC4yyZNVycFPTerOt?=
 =?Windows-1252?Q?5uABSpVlzS6O7kc862hrFUcp1QYiSWZ+F8q6D3gc+x/OYuNR5s1nR3HW?=
X-MS-Exchange-CrossTenant-Network-Message-Id: e9491f18-4250-46a0-7394-08d94198cde4
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 22:44:39.8799
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 2VNbte+8HDRFa+Vpnc/X5xy9gczos5x9mRMkvoEzsep1hPP3YVWNWgmEEIed45GWwkl4EnosKvStBbej6EY6TWBB4szyClh9q49N7L7DEZs=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5454
X-OriginatorOrg: citrix.com

On 07/07/2021 20:52, Olaf Hering wrote:
> Am Wed, 7 Jul 2021 18:46:03 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> iPXE failure
> it just needs to be updated to ipxe.git#master to make it compatible with gcc11.

Ah great. I presume that is your "[PATCH v2] tools: ipxe: update for
fixing build with GCC11" patch which has been sitting neglected on the list?

~Andrew


From xen-devel-bounces@lists.xenproject.org Wed Jul 07 22:47:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 07 Jul 2021 22:47:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152734.282145 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1GK3-0002QC-Gp; Wed, 07 Jul 2021 22:47:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152734.282145; Wed, 07 Jul 2021 22:47:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1GK3-0002Q5-Ck; Wed, 07 Jul 2021 22:47:15 +0000
Received: by outflank-mailman (input) for mailman id 152734;
 Wed, 07 Jul 2021 22:47:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tWQe=L7=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1GK1-0002Pv-HK
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 22:47:13 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 44a3620a-df75-11eb-8539-12813bfff9fa;
 Wed, 07 Jul 2021 22:47:12 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44a3620a-df75-11eb-8539-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625698032;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=iD5EPYGxSHmQZ2av1w+cNqIxBow1YzhsLe95DZyFDfE=;
  b=THi6f3Xzc/UjRQcdo2egWsDLCltulbjxkPLhQI9a8tQAQihtk8ZG6MnV
   71XDlB4J4+hqsRzkwk0J7A5xqq2m1ZQKI50KLNjSn3XjYlUKYWJgP2pO7
   FY3QSbWIXPJVeG27o91eucGeq3AovHcDIuzdWDwGZjxElAWHmcwL6XaX1
   g=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: PBoFu3skt49QX6dRQ7RTu1r8pA507gNaiGYI3qECCHh7baEDcV6pUJoGDIc+n2WepWjljNlgLY
 UWOyKckn3fPzmBAwUReFdFB4rBVBUe8sI7J9tx+5LvESUbgslZndfhPgfYjXP1WeqDU5kQAiMo
 b1fS7tIKW8vIQ2bQJu+RhHbv7GZJG2zUTnpRXH5C0lq1kw/JkDhMNdDBLDr7W0x1aZJ+73KWs7
 BDDa6iveZoxU1N4dxtdiQYIRTvETMy7leh2tHpcNOCyNfwVtH0/7WQgSSZlPptpY0ASy0Zn8HI
 5yM=
X-SBRS: 5.1
X-MesageID: 48162858
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:TnYik6Mc3s0H0MBcTy3155DYdb4zR+YMi2TDiHofdfUFSKClfp
 6V8cjztSWUtN4QMEtQ/exoS5PwPk80kqQFnbX5XI3SITUO3VHHEGgM1/qb/9SNIVyZygcZ79
 YbT0EcMqyBMbEZt7eC3ODQKb9Jq7PmgcPY99s2jU0dKj2CA5sQnjuRYTzrcHGeKjM2YKbRWK
 Dsnfau8FGbCAoqh4mAdzU4dtmGg+eOuIPtYBYACRJiwA6SjQmw4Lq/NxSDxB8RXx5G3L9nqA
 H+4kLEz5Tml8v+5g7X1mfV4ZgTsNz9yuFbDMjJrsQOMD3jhiuheYwkcbyfuzIepv2p9T8R4Z
 bxiiZlG/42x2Laf2mzrxeo8RLnyiwS53jrzkLdqWf/oOTiLQhKSPZptMZ8SF/0+kAgtNZz3O
 ZgxGSCradaChvGgWDU+8XIbRd3jUC5yEBS0dL7t0YvFLf2VYUh6bD2pChuYdA99WPBmcEa+d
 BVfYPhDK08SyLdU5ix1VMfs+BFXRwIb1y7qwY5y5WoO5U/pgEO86Ii/r1qop43zuN0d3B13Z
 WwDk1WrsA4ciY3V9M2OA5Te7r7NoTyKSi8eV56Z26XTJ06Bw==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="48162858"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZOJ8E9XdAN/Phw7SNiH92onbhVfcay/ViSM4+YNc9ENEFOzcwSdqBvZrQ2LMnPGFLsOwcQ7x/wATGNF+85PodrHVkkKruALiGP1SsDKizAlhUojRhAXEPQ5LRtFfSm6rAYH3FwqnTc0Cx3bG1kwz/QpVREX3I/IMl6HVYCs9NpciBw0xysYIIC5dAhc07+hqRvVoT6AA5rbzfiWi8alUTNCq4Frc87lYR+LvPDm9ZkrJkFEUAgQ/jdHH5xQSbntsZhn4lgwg/fDMQcaLptqKwcq2e5YRjSlK0Y+NvBR3W6G70xoYhK0U8Q65e35FnQSqaImxzyDNqdNRW+6/fFzmIA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iD5EPYGxSHmQZ2av1w+cNqIxBow1YzhsLe95DZyFDfE=;
 b=eVqi3Ek0FHNa7m1NYNojhx6i1MuwonUmfVfEZNcaq7o07COl04GUbVuESxBRIw9zYYlk7M4DjmURCAmhAOBBkC9qx9+0EGjJMPG/wu6+uUVLPsw0AtZ7JehBF5d5aJhGoGzNFfOGVAs3zjpuaT8Q6vWnSKpmjxLWL3Ut4OCjvpKXWQ3s353bh3Vm7bKPkcMhPtzDM1J8rjDBJ6r8WIFfsreI3hVsvbNYlKTcqg614kkZMlCTKNXvNqAPWSatnGPauREsqunIq6pQY6XVLE/zYQY8wbPSCRxhPt87e8OvRRnEM6CpYBxlg4RfBCSloVohwfXPKLMSZbHoFRYgCLPNnw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iD5EPYGxSHmQZ2av1w+cNqIxBow1YzhsLe95DZyFDfE=;
 b=rj8TAvU2h9eY9blgTNaCPxrnPHXWBT+2FeGABhRTUuL8Qr30mcZqlKwyFC+Ce4Z6RV/ekMcCwKAy9BfzQt4W7nz9X4ZmYrF4mFPj+sy8xzRqd/Bmfn+2TWIOEsAxVITFpq06P1EoRwpst6KDyINCKYoZC16S2SsAdjU6Er2wbKI=
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
To: Olaf Hering <olaf@aepfle.de>
CC: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
 <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
 <20210707223551.5462c74e.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <375823a3-8b49-7aab-ca2a-af219234b5e4@citrix.com>
Date: Wed, 7 Jul 2021 23:47:02 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210707223551.5462c74e.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0462.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1aa::17) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4984d34a-025b-4ef5-0c12-08d9419926a6
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6272:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB627234F191B673AEE6FAFB84BA1A9@SJ0PR03MB6272.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: dMuRz/EaDlq0GBnDeZUQgHkKb4EYF5Wuoc/5v5hzWGRJl7kXgQzVbe5s4VXETBL5VVLbsw2sthG+z8zgZW8KEqwRIZL6m322q83VBIQISGXh8GM9q0qJuadY+S8SsLJjBbSDmFKNdRrIs6fdlrnTDZoBNnp4PYbZFreszp9pjACOKCpZGq/INXfrZ0khN1JIN/ioWACdOEdzzr2HvWZ/LtbK0nyr5s+XF7ma48AFrurqyPj1OyY+aAs6keisMqjeXZPsebG64U7LYj1c/2sXAZNeg8sc0qyc0QjdRWQ2eiwLRRV3qwpwy6cvRdS0nGg/FdJZ6dn8+FjBJtz29lGM4pNYVj4PZ7PgSHbqNULqL6kI6AmloJnVyQ7U5/i/aDRaXZvs1W8KEMm2Gx6YrvcVr1FOuw5GoETfo3s8XU6lJCdyISjjwxsEPqGt6Z6hhHNaLEItqP6rrhdh6fV7o2Q1Nb1e3SGanhSa+2jzxDMxcsgNWQHBoPtodpRPqYjlszNmKNwn79sGU1brxVzN7Ymnkw3nv5tgsFhitLKGnGBuuEKLaan4dG4NtDx7FUtL60ZQhbylKU5LaG907Krds9l5w2NK1XhD6/t3qkVADZWubxvYkjaiQ+UHbJ/aZjCvO841NgVT8UC56QrxpI/blg+NDA3jc4Ja2dH8selIpvsADDj6WhBridSMuTVHKAftLw4QC21YEaa5K3K9PW6Zt1AVohR84v222aEX21Qo/DygQIU=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(376002)(366004)(346002)(396003)(4326008)(4744005)(8676002)(8936002)(6916009)(478600001)(2906002)(186003)(16576012)(2616005)(66476007)(6486002)(956004)(26005)(66946007)(53546011)(316002)(66556008)(86362001)(6666004)(54906003)(36756003)(31686004)(5660300002)(31696002)(83380400001)(38100700002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?BaSczJNbry6OUKCx/cNxoVjJmq4qiw3Zfxtm+scGabqwWuaNH91sJ6K4?=
 =?Windows-1252?Q?XS2rM0D6AhOFqBTOm0F/RTT2VL1bwoQdzvTdPCp6lwktfqSqQ5wrkT0Z?=
 =?Windows-1252?Q?ykZVVCynC3hdYIQalb4oT2roH4uzc85FqJIcDoHU+CePXh0fpg0XQaRr?=
 =?Windows-1252?Q?zRkQaFwCi1qrCJd0KbyvLHaUxFgv2cmkzLc9exEXBub4uI7WK3oNg8Ct?=
 =?Windows-1252?Q?09zSBQkx//id4rnG8Gycjw7rXySJwH2TxUEumaihQ/O01utg58FnQaaR?=
 =?Windows-1252?Q?yzFk4oLDkcRhIg6SRX8OsHh+fNzFFdBr7SLBwa/P/Q3W9cSMfAt2mxoB?=
 =?Windows-1252?Q?a1q9C1RncArQiAEqhkeV93Q+9GLMyDDh/AQyq86OH9RTJcX+hf5jVZgk?=
 =?Windows-1252?Q?ZxtJKonrsy7+GZssX7y5avA+wicGZdK+PS2s/iNir7NHAtDdAiTBlDMu?=
 =?Windows-1252?Q?+Ks7DCfrRGehCIxCHdVhOzOWGpPXGdzCmItzXboLLD72sDNvWtXDR4De?=
 =?Windows-1252?Q?mys6x1K3YWeKQQE85xq2iaokhlQm97xCBr5J0ivyOxzPC+sh2UjQlOt3?=
 =?Windows-1252?Q?ak6PM5iPaLqxitX48jhoskzS9cFc10q4O7hQhTmLsMOYv4H99FtDy8nH?=
 =?Windows-1252?Q?ROKcOVtoCtx7MB2/EqtQt5QGu4ZLHSTzEFY1kBskwmdIvxPsSFQn57/q?=
 =?Windows-1252?Q?+fbzLWOC2zxi3N5MyN0CpWRRuflZZzTgqJ3iy03HVfFD8+/P+zr8UqvX?=
 =?Windows-1252?Q?Ft37JKn/+9mEVcMY12HYhAP8Vf19u7FmgQ3LM08RBc52yHj3GGlv2FU7?=
 =?Windows-1252?Q?97fz+sy2cqHQmSGHXoS43wy4F4pMwf1IJrBiXWjOeZ0QN22dHzFlKX2T?=
 =?Windows-1252?Q?vMixhzfm5PnQCP+qlQJ0o3i061AqmKyyg6QYUAKwn3yTAakZ5+yd6s3X?=
 =?Windows-1252?Q?3PNmRE9WuiaZC5tGPTP0WZrDw5KDwT2cavDBhNgY1PdT51Ohp0lTJDqM?=
 =?Windows-1252?Q?WU08xwXugoU5sxXCp/TxvktUEUD2lcHPo9JweCFNtPmGa2UNiBj+rB0c?=
 =?Windows-1252?Q?nbL4Ohp5Vm+pxd8moIyBhTzkcMWn7F+ZEPu4oOFmGal7v39XMaE8FHDl?=
 =?Windows-1252?Q?KMoey4IQSGw5WoJZUSydKRU1On8n240em1jQJSI/bQwt+znsJ5I+Yv42?=
 =?Windows-1252?Q?UbYaAOpru3ok7o7cokwIPTwho198VLDZ6HgbqD3UYpjm+PGuLLLUR7a3?=
 =?Windows-1252?Q?ng98Wyq+Se6l0kmUyz4qlGRTlgKYOQ6gRc1vpzLFr5fPntfU1Nhiggih?=
 =?Windows-1252?Q?0XYihWVFVr0179iHAJ6D0ehjUHIpdV5KXX1CC7TSlov/+KCYU/C0ELM1?=
 =?Windows-1252?Q?/TlNnOZgYP+u9cujmbCpgy5FtNpPJPsI6v1ewk0gKUy1m91g5zXr5bmr?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 4984d34a-025b-4ef5-0c12-08d9419926a6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 22:47:08.5183
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: O3jP+l2prMY2xks/m+ozrVGSPA2gu7/2aGdSz/VKQWzwD4IDwUIEiIyXeLr/Ly0SC5ffR9RsT+oZAiMVH4xk6x8VS121er71GnL3BR60XJ4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6272
X-OriginatorOrg: citrix.com

On 07/07/2021 21:35, Olaf Hering wrote:
> Am Wed, 7 Jul 2021 18:46:03 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> Tumbleweed is generally broken and fails at ./configure due to missing
>> compression libraries.
> Something requests zlib-devel to be installed.

Yeah - it shouldn't be hard to fix.

> I suggest to provide all config.logs, not just the one from the top directory.
>
> Also a "test -f /etc/os-release && cat /etc/os-release" should be added after "$CC --version", just to know how stale the container is.

We ought to yes, although I think at the moment we probably don't want
to realise how stale all the containers are.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 00:19:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 00:19:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152745.282168 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1HlD-0002tL-Oc; Thu, 08 Jul 2021 00:19:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152745.282168; Thu, 08 Jul 2021 00:19:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1HlD-0002tE-K2; Thu, 08 Jul 2021 00:19:23 +0000
Received: by outflank-mailman (input) for mailman id 152745;
 Thu, 08 Jul 2021 00:19:22 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1HlC-0002t4-To; Thu, 08 Jul 2021 00:19:22 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1HlC-0008Qj-NJ; Thu, 08 Jul 2021 00:19:22 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1HlC-0004CQ-G8; Thu, 08 Jul 2021 00:19:22 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1HlC-0005Ra-Ff; Thu, 08 Jul 2021 00:19:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=8B66FXBL9aoEhg2x0B35e9TBKHBVT7Uj5kTPl2AmasY=; b=Sh8zJXXZWB+KLnvdbKy3e1l1dt
	AjbAU8TYIhMZIpPv6dhNXqmdZun/rBo3BfUf1tUbTdgLYwrccKev3b8g3WXWdX7GuY+htql49hsyc
	6Qym+ZVHyLvHaUtlYBRfGidlMU2WGfBPxLBRR4GNKe4jvy4AjctEtHRi7ftruWF+6oi8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-amd64-qemuu-freebsd11-amd64
Message-Id: <E1m1HlC-0005Ra-Ff@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 00:19:22 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-qemuu-freebsd11-amd64
testid guest-start

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163424/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-amd64-qemuu-freebsd11-amd64.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-amd64-qemuu-freebsd11-amd64.guest-start --summary-out=tmp/163424.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-amd64-qemuu-freebsd11-amd64 guest-start
Searching for failure / basis pass:
 163369 fail [host=albana0] / 163321 [host=godello0] 163311 [host=godello1] 163303 [host=chardonnay0] 163299 [host=pinot0] 163292 [host=godello1] 163276 [host=pinot1] 163235 [host=godello0] 163228 [host=albana1] 163220 [host=huxelrebe0] 163213 [host=godello1] 163204 [host=elbling1] 163194 [host=fiano0] 163187 [host=fiano1] 163179 [host=godello1] 163171 [host=elbling0] 163163 [host=godello0] 163156 [host=huxelrebe1] 163142 ok.
Failure / basis pass flights: 163369 / 163142
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#e3955ae93f5151ad2e982440b7c8d3776a9afee2-9aef0954195cc592e86846dbbe7f3c2c5603690a git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#bb11edcec1a953ce590da797b0d005cd60f21e83-44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Loaded 29870 nodes in revision graph
Searching for test results:
 163110 [host=albana1]
 163128 [host=chardonnay0]
 163142 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163156 [host=huxelrebe1]
 163163 [host=godello0]
 163171 [host=elbling0]
 163179 [host=godello1]
 163187 [host=fiano1]
 163194 [host=fiano0]
 163204 [host=elbling1]
 163213 [host=godello1]
 163220 [host=huxelrebe0]
 163228 [host=albana1]
 163235 [host=godello0]
 163276 [host=pinot1]
 163292 [host=godello1]
 163299 [host=pinot0]
 163303 [host=chardonnay0]
 163311 [host=godello1]
 163321 [host=godello0]
 163327 fail irrelevant
 163368 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163369 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163371 fail irrelevant
 163374 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 4fb2820854a796ab75ffb2ec896b67268281ecde 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163376 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c99fb3a50db983402e85423139e5d4449cda9111 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163377 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163380 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d6f9e011e8643fb00303e3fec24dd1e424f3f5b3 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163383 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1ec2cd0ce2ca94292ce237becc2c21b4eb9edca0 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163388 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c86bd2dc4c1d37653c27293b2dacee6bb46bb995 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163390 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6f84d726f3fe5e0f8c3b8dd36100ed9ab446ce1e 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163391 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 b1600ff19553c7acfe10b43d4f50331deff876d5 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163395 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163397 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163400 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 f08b65b651bca2eac543de694f866049e48fb242 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163403 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 232a4d2c25c3a83e148116a15f992f728c3579e6 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163405 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 ed3b3f1764b0deecc2d875ab897e5883ef42a615 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163407 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8d6cb100731c4d28535adbf2a3c2d1f29be3fef4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163409 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163410 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163411 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fe68090e8fbd6e831aaf3fc3bb0459c5cccf14cf 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163414 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163417 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163419 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163421 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163423 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163424 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163142 (pass), for basis pass
 Result found: flight 163369 (fail), for basis failure
 Repro found: flight 163395 (pass), for basis pass
 Repro found: flight 163397 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163414 (pass), for last pass
 Result found: flight 163417 (fail), for first failure
 Repro found: flight 163419 (pass), for last pass
 Repro found: flight 163421 (fail), for first failure
 Repro found: flight 163423 (pass), for last pass
 Repro found: flight 163424 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163424/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-amd64-qemuu-freebsd11-amd64.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163424: tolerable ALL FAIL

flight 163424 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163424/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start   fail baseline untested


jobs:
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 00:29:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 00:29:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152754.282185 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Hun-0004Pq-SL; Thu, 08 Jul 2021 00:29:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152754.282185; Thu, 08 Jul 2021 00:29:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Hun-0004Pj-P3; Thu, 08 Jul 2021 00:29:17 +0000
Received: by outflank-mailman (input) for mailman id 152754;
 Thu, 08 Jul 2021 00:29:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1Hum-0004Pd-P4
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 00:29:16 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.24])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 89db63ae-8e7b-42e4-b8d2-b0124787c480;
 Thu, 08 Jul 2021 00:29:15 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx680TDXrg
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 02:29:13 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 89db63ae-8e7b-42e4-b8d2-b0124787c480
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625704153;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=7NCZ+UrRcNjTfDzy1NJMTcfczUd64LlkUpj/dmVl5KI=;
    b=pusSIABDH0JqiCeAwG7eUfH5ThS3wDZJx61vUGRgqKOPG6wQovxgpHs2ca41C2zmUI
    dmBSslimHBKbe+nWgmrvgoo2fIB/JHDZT8vwMRGqVM8xJ5k8fcXG4H0afhR+v+Dh+t0Q
    5dJ7FDPNGhgQc1Zjlz+dX+X5YEJdlOc6kwZelM/EI2G7H/kiUL35lChB0hD85Vv5FFMh
    KYPaHk58P9N5B+mkBYxebZIscBvhdU0rIDJ7ON9xUCyOxDAH80oSITUO8Pt0VLeQCvrN
    Gx4ghT29OwouXbypAUxpbq7Skndtk8Z9oQqono69oq4MFA83pxI+2uoY6Butlw5lCD22
    R+Jg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 02:29:05 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <20210708022905.23e53efb.olaf@aepfle.de>
In-Reply-To: <930b58b7-326b-1855-6f24-2e2a4b3ed4a8@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
	<20210707164001.894805-3-anthony.perard@citrix.com>
	<e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
	<20210707215235.76f15361.olaf@aepfle.de>
	<930b58b7-326b-1855-6f24-2e2a4b3ed4a8@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/U/_DP1ZZ6ew/oBs+i1Z2iBj";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/U/_DP1ZZ6ew/oBs+i1Z2iBj
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Wed, 7 Jul 2021 23:44:33 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> On 07/07/2021 20:52, Olaf Hering wrote:
> > Am Wed, 7 Jul 2021 18:46:03 +0100
> > schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
> >> iPXE failure =20
> > it just needs to be updated to ipxe.git#master to make it compatible wi=
th gcc11. =20
> Ah great.=C2=A0 I presume that is your "[PATCH v2] tools: ipxe: update for
> fixing build with GCC11" patch which has been sitting neglected on the li=
st?

Yes, but the build logs indicate gcc10 is used in this container. So it mig=
ht be something else.

Olaf

--Sig_/U/_DP1ZZ6ew/oBs+i1Z2iBj
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDmRtEACgkQ86SN7mm1
DoBcqRAAmz6GKXxqCyqU0nqjvjb2x7klEd4KF8+juPSnXmNJp1omi0t3WRVeJJGp
Te5IXhj/aFACqHMHrHC1P4n93N3Tgtv1ThXLd7i7k0Axr8fUNry8JwldEiXxOVT0
f9E4W8bzHi8LqnimV/qNpI35JakoFW81IEpbnb6MwKYXsuvJKCgLXXSei90Rbo77
nfhkRLyGvEJzsEsaWvKHcrIDYcdO3nDJHifcylZXwNa0KVyXxj4hM2Axydt7lBIO
n/5tdPRUBWWIDc13ZIUlHB1+GCRRXDsjht/gsGG0LulDTJtim5i5v8SncRvLDGAQ
eoQGu7FcHOIbbsBjaHllhm7hBweuDXAh+lLfPLFlGmszf4NLM5TLTDF3hGO/0yDb
fFQ2QVTUDFB7qsKi7DlZTT0Ewd9r1H3gyWvn8r9HO9t7KQ5qiuX6mX8MqiPZgYlc
nDVYvONBnXRkU34WQdiiMV7exPlFSyBr6pOCOib9Gaap6UC2ipXVYGGLSaWCZcJo
ZwItMU7Rhd9ahOj/a1A1e5BBw+y9005UyoBWhZmMDMSBVF4As0PI08qJRZGqwhRX
mMuIxNwexVNqXIi133J7P0ZOhzNc1zb6JLJSsMSs4tNnBNC9XxD0Cki7s5jiY0XL
NAZHpKUYg7+f9+onap+cSoYZevOliNxsbOt1MYfb6Sb0bFN+97w=
=agkk
-----END PGP SIGNATURE-----

--Sig_/U/_DP1ZZ6ew/oBs+i1Z2iBj--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 00:32:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 00:32:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152760.282196 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Hxq-0005n4-Bb; Thu, 08 Jul 2021 00:32:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152760.282196; Thu, 08 Jul 2021 00:32:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Hxq-0005mx-7s; Thu, 08 Jul 2021 00:32:26 +0000
Received: by outflank-mailman (input) for mailman id 152760;
 Thu, 08 Jul 2021 00:32:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=X7bE=MA=m5p.com=ehem@srs-us1.protection.inumbo.net>)
 id 1m1Hxo-0005mk-V4
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 00:32:24 +0000
Received: from mailhost.m5p.com (unknown [74.104.188.4])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f6b8492a-df83-11eb-8542-12813bfff9fa;
 Thu, 08 Jul 2021 00:32:24 +0000 (UTC)
Received: from m5p.com (mailhost.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:f7])
 by mailhost.m5p.com (8.16.1/8.15.2) with ESMTPS id 1680WGKk036652
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO)
 for <xen-devel@lists.xenproject.org>; Wed, 7 Jul 2021 20:32:22 -0400 (EDT)
 (envelope-from ehem@m5p.com)
Received: (from ehem@localhost)
 by m5p.com (8.16.1/8.15.2/Submit) id 1680WGJx036651
 for xen-devel@lists.xenproject.org; Wed, 7 Jul 2021 17:32:16 -0700 (PDT)
 (envelope-from ehem)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6b8492a-df83-11eb-8542-12813bfff9fa
Date: Wed, 7 Jul 2021 17:32:16 -0700
From: Elliott Mitchell <ehem+xen@m5p.com>
To: xen-devel@lists.xenproject.org
Subject: Xen/ARM API issue (page size)
Message-ID: <YOZHkGrrl694NrfZ@mattapan.m5p.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
X-Spam-Status: No, score=0.4 required=10.0 tests=KHOP_HELO_FCRDNS autolearn=no
	autolearn_force=no version=3.4.5
X-Spam-Checker-Version: SpamAssassin 3.4.5 (2021-03-20) on mattapan.m5p.com

Hopefully I'm not about to show the limits of my knowledge...

Quite a few values passed to Xen via hypercalls include a page number.
This makes sense as that maps to the hardware.  Problem is, I cannot help
but notice aarch64 allows for 4KB, 16KB and 64KB pages.

I don't know how flexible aarch64 is.  I don't know whether an aarch64
core can support multiple page sizes.  My tentative reading of
information seemed to suggest a typical aarch64 core /could/ allow
multiple page sizes.

What happens if a system (and Xen) is setup to support 64KB pages, but a
particular domain has been built strictly with 4KB page support?

What if a particular domain wanted to use 64KB pages (4KB being too
granular), but Xen was set to use 4KB pages?

What if a system had two domains which were set for different page sizes,
but the two needed to interact?


Then you have things like VCPUOP_register_vcpu_info.  The structure is
setup as mfn and offset.  With the /actual/ page size being used there,
it is troublesome.  Several places might work better if pure 64-bit
addresses were used, but with alignment requirements specified.

Then there is a question of what happens when we get a core which has
more than 64 physical address bits (seems a few years off, but for a long
time 32 seemed high).


-- 
(\___(\___(\______          --=> 8-) EHM <=--          ______/)___/)___/)
 \BS (    |         ehem+sigmsg@m5p.com  PGP 87145445         |    )   /
  \_CS\   |  _____  -O #include <stddisclaimer.h> O-   _____  |   /  _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445




From xen-devel-bounces@lists.xenproject.org Thu Jul 08 00:32:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 00:32:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152761.282207 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Hxv-000651-Jy; Thu, 08 Jul 2021 00:32:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152761.282207; Thu, 08 Jul 2021 00:32:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Hxv-00064u-FS; Thu, 08 Jul 2021 00:32:31 +0000
Received: by outflank-mailman (input) for mailman id 152761;
 Thu, 08 Jul 2021 00:32:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1Hxt-0005mk-Ti
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 00:32:29 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f8b0f830-df83-11eb-8542-12813bfff9fa;
 Thu, 08 Jul 2021 00:32:27 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx680WQXrq
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 02:32:26 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f8b0f830-df83-11eb-8542-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625704346;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=CDNWoi0z8UuZxpF5SpC9Hp+geGCwEmKoOjwD2HC8Gak=;
    b=mMAG1SmVzDCZ1KmAUNhIyPR/HFWismT9C+FW9KSQs7LXGkoC/RcK0Lo5ZYqZWElJt3
    lDPTNqfkvdMWV03u0AqoPX6WuAA7KqZx8Nns9Cb5QLiEhRprhec/Sr4wgzU8RQ6TwPEi
    LYq/IHsYvHzzMw39tT3Qc8920pt2zJNZczyVAYnOQW2aiK+JQcnh4Ch9JdPmn79ZokPG
    S9xHE47mM7v0Mh1f0szv8LI5x2MN+V1sTPWEypQTwLMNXve6TLKFVUf1CR+1/wtdyu1o
    dhRAH7y95WLj/gO81Vfftt60NBpC9z+2b2bcV3HPzC7aShG/Cp7K3xlLyuP/aWXoS1/5
    /IAg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 02:32:24 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <20210708023224.6c05ff5b.olaf@aepfle.de>
In-Reply-To: <375823a3-8b49-7aab-ca2a-af219234b5e4@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
	<20210707164001.894805-3-anthony.perard@citrix.com>
	<e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
	<20210707223551.5462c74e.olaf@aepfle.de>
	<375823a3-8b49-7aab-ca2a-af219234b5e4@citrix.com>
X-Mailer: Claws Mail 2021.07.03 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/d3oWqw008L4FpQbrK1AY9pu";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/d3oWqw008L4FpQbrK1AY9pu
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Wed, 7 Jul 2021 23:47:02 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> We ought to yes, although I think at the moment we probably don't want
> to realise how stale all the containers are.

At least for Tumbleweed it is useful information.

opensuse-tumbleweed.dockerfile requests zlib-devel already.

tools/config.log is required to see what the failure actually is.
The toplevel config.log is not helpful in this particular case.

Olaf

--Sig_/d3oWqw008L4FpQbrK1AY9pu
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDmR5gACgkQ86SN7mm1
DoCCSw/+Jzps5QJE7TJ4y2hT7z3WbN8Vdxa0g4bxz1s4SAE3tyKy4ZmndAskFsRf
7C4K4kdQCyLNS0F1Nzr/MUEcbTBTmM5itN/7Gj9hjynhUQgXqWGRDAnHvdXHvBJ6
Q7iaHmLn+Afp1etLbk6SBLIA0Q9rYtllRNJ3IXgj3aeIMk8tj0iV/RuNyqPD1E2i
a5jWTcowMDXoxGRQ1FVprjy5ZmjR1k3b/xaolie7RIlqydKUFuVN/mCk+EtK+ZDo
rKnshaShzxN6tklntHwv6LhA5NuxD3cEQM4s5X7CayBZCqXJOzy8XNlP32lW0vSS
5XhjNes16dtMgPv6WPs4Ckl5hbXkqY9rm8xSQgXAus76wD9gTSANfm9YNRVeanOv
GUvdY531wmr5hDbUOx1w5NqPOYX6iinu5AsmswdA7NEiBhpRMC4v65feRQ3LxwrW
blczLeB/qjg+/1jKPNMzd9OU2ibULd/5HKqJQ8jEO5Ml9+ja78UfB/32mdK9BbxT
Ltx3/UfWkWYJ5pkCg19fvPEUvUQPLY1u5OcD/ODzs7bygNS0GjPx/a1KbrSdWEkt
Usa+2acehg0lgNgsHTSbJ50nSkm7eFpkUH51jSe7B3oxtCB3bktQr66Z8n013deA
WUBE71TnayI0NmIOWsUAblNMcQEt4dKfUQogUzxuQTMaaSdbNMQ=
=IUR5
-----END PGP SIGNATURE-----

--Sig_/d3oWqw008L4FpQbrK1AY9pu--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 00:56:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 00:56:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152772.282218 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IKd-0000I2-Ic; Thu, 08 Jul 2021 00:55:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152772.282218; Thu, 08 Jul 2021 00:55:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IKd-0000Hu-Dr; Thu, 08 Jul 2021 00:55:59 +0000
Received: by outflank-mailman (input) for mailman id 152772;
 Thu, 08 Jul 2021 00:55:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1IKc-0000Hk-L6; Thu, 08 Jul 2021 00:55:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1IKc-0000Zm-CY; Thu, 08 Jul 2021 00:55:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1IKc-0005ec-4n; Thu, 08 Jul 2021 00:55:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1IKc-0002qw-4I; Thu, 08 Jul 2021 00:55:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=5yVPUNhEG8QozzGRLQoY0WoOrWq93IKMosblmQGa884=; b=3xpcmarN5YY0vQT8LuXRb75m1K
	kvKH7rycKHGXFSbeeyNAp7pCmH9+O+f5UYt4zZy0OMo8YkFuE+UM8xGWTH61fzz7pW7lnnhOuV9R9
	gW8hakTE6QCk3+RuWmgMRV/pn29tt7XwoUuewPkhlU2IGMKKrfOYCD1dfXvQwr+oS7dI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163404-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163404: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=4c051c2c65a85f9c0268c5555460e2fdb8bca7a9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 00:55:58 +0000

flight 163404 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163404/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 4c051c2c65a85f9c0268c5555460e2fdb8bca7a9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   33 days
Failing since        162368  2021-06-04 15:42:59 Z   33 days   94 attempts
Testing same since   163404  2021-07-07 13:10:09 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3362 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:05:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:05:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152779.282232 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ITn-0002ou-Fg; Thu, 08 Jul 2021 01:05:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152779.282232; Thu, 08 Jul 2021 01:05:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ITn-0002on-Bv; Thu, 08 Jul 2021 01:05:27 +0000
Received: by outflank-mailman (input) for mailman id 152779;
 Thu, 08 Jul 2021 01:05:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1ITm-0002oh-7i
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 01:05:26 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 01c7be21-88cb-46bf-939e-b409fab3d219;
 Thu, 08 Jul 2021 01:05:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 01c7be21-88cb-46bf-939e-b409fab3d219
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625706324;
  h=to:references:from:subject:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=52G188GBr2yKCXgxyIQxTmZUqN+ykPYZAiKTx9XxRA4=;
  b=C/qbsxTmSvxZ6NW7Og8MoWOsDHrgzYF+sdYhUXtecFDLu6N7aNnJlprY
   sG2SS1jDHqKU9BKpSBFkDKebDr6UClKOiOoTweTPcKDNCFZ65prtBO/kp
   2LOryAHHlXsezS0KIYl4lIY64eyYENboPR5asMgJwh5mAFiPQC12UbaDN
   U=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: tTtVbmUNyLWZPuxui+Em3dIygfFKCyjOPpIhJ9PdJZh0cBNIS5zry2xVBsUpYuJDQiXWkQBSGN
 5wn+nArLYCXazeJrPXnFA6DAoJAxmX5EjJs3MX/JKkqb7jfBw1Hs60OZt5wwdIzCHmO3fLwroa
 mq8RZ6nUI0w4fTcLTHv+kyGUOQl7YfHJvkT2t/XmotiwAWJsYhe16T5hvbYT26wC+Z7PL8jfa9
 A/kPVULy2aWHVIIBp+5JtK0r4T64S1vwGeOog9LHN+lI0QvI0AgxjjfZidIhORgdq2ovg6Aez0
 MEM=
X-SBRS: 5.1
X-MesageID: 47854002
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:T+kO2aPj3P0+98BcTz/155DYdb4zR+YMi2TDiHofdfUFSKClfp
 6V8cjztSWUtN9jYgBdpTnmAtj8fZq8z+8O3WB1B9mftWbdyRKVxe1ZnO/fKnjbalbDH41mpN
 ZdmspFebvN5DFB5K6QimnIcKdS/DDEytHMuQ639QYScegAUdAG0+4WMHf4LqQ7fng/OXJvf6
 Dsmfav6gDQM0g/X4CePD0oTuLDr9rEmNbPZgMHPQcu7E2rgSmz4LD3PhCE1lNGOgk/jYsKwC
 zgqUjU96+ju/a0xlv10HLS1Y1fnJ/ExsFYDMKBp8AJInHHixquZq5mR7qe1QpF7d2H2RIPqp
 3hsh0gN8N85zf6ZWeuuybg3AHmzXIH92Li4UXwuwqjneXJABYBT+ZRj4NQdRXUr2A6ustn7a
 5N12WF87JKEBL7mjjn7dSgbWAlqqONmwtgrQcvtQ0cbWNHA4Uh6LD3vXklX6voJRiKqLzOS4
 JVfYXhDJ88SyLrU5jb1lMfieBEEE5DWStueXJyz/B95QIm6kyR/3FotvD3oU1wgK7Va6M0r9
 gsYZ4Y342ncKctHNVA7aE6MI2KNlA=
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47854002"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LaFKKs5q2+NomCr8ao/Qikg9Ve8dectt9qvEz0p6JY4IeH79JDr4k7LhIF2wIBVF84Y9yfwyopFAnhqFJKeoznfYCJu2laJa3aG2+dbh2JQPeOTiNLrq3cwO/iq3VtVRZka8xYMEAJxhA0l2K3KtVsHr5twQMWCtGd/AEBf4kd6PS0ReHzFZpw3Mdl+pZXjqXS3BjAqgkGaiw+AABjCeouJ+b38bZnBeAG8BoXHyb87YKZNpM5zFvyx6ZTHtrDV10vyGHwsmHEEYmorbRvZAksNiiNhQJlrbEaKv4YUWKQ1PzYlGL0FnwjFhB7ntYH3HVLFGNqRG0s1njie06Cb6ZQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wb7jLni2KNiU7hydmZyfj7hBZw60vdSL31Fq0oTE5d0=;
 b=gCez03pZkDr5fm5VGdDrLO0+6a4igsSX9UGOn7iiZqQBVUxgLY5mrk/+HgCNyY7CHRG0RVZASU3p78FIKLaBeXol0qLUyoE5KT5IH2SzzasS1FEtwZg7QDeREE7/wBA8CbxEsaboLxXxUobtNU4KKa2IyV0RvBzZ1l9pmZaRxBx2TiUkPCf78OkhePs6ycoH3WTWXxeUdh/XeO6L+okwX5FOpnV0qotlSaSWXxCiZSaT9VQho0vY1QzgEBgdT30UrhMNeOSc+mO0fSRhrMvA01vHXUFrTrcmc90TXwuXMeGasbDpri7zNao3k2r2y+0QIMLmlrwuYG4YkPCKRRAFDA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wb7jLni2KNiU7hydmZyfj7hBZw60vdSL31Fq0oTE5d0=;
 b=Ay+YQ0HDKyY1kaC2TyXmYBii7M2rF/gerU90xXjZ3LMx6gPYdf8BHSc5+72Xxem9KRbqlVQZvI/K9x6TMAaiW3aiaWg5Dryy2Y2tveCQrbscrw9Ad1qNaFtG+sDCtTyzTKTuB6ybXRwlRTO8NIWjviKVr0QoJ0e+FMJjYROiQrE=
To: Elliott Mitchell <ehem+xen@m5p.com>, <xen-devel@lists.xenproject.org>
References: <YOZHkGrrl694NrfZ@mattapan.m5p.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: Xen/ARM API issue (page size)
Message-ID: <8c7d9d21-d8be-d33f-6d37-dfb54f74c179@citrix.com>
Date: Thu, 8 Jul 2021 02:05:11 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOZHkGrrl694NrfZ@mattapan.m5p.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LNXP123CA0002.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:d2::14) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bda5f100-0285-4529-53dc-08d941ac7551
X-MS-TrafficTypeDiagnostic: BYAPR03MB3669:
X-Microsoft-Antispam-PRVS: <BYAPR03MB36693DB763F6CB498272D943BA199@BYAPR03MB3669.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: c7H5pYghE6Lmh7T85+JwOglwtfjqeeXNJFWCkwiQ83hL5tIRkh9fjctBo3lE1XyQB7QdWRYCJjyvgK3+TKHKz5O6lYCp9KH/Q43NQAJK+A5jNWO8K7jhKQikZmzq0HCvbOK8/tw6hm6o4xeSuiFWqJCavZ7QGPELWztRFlFY2S3hZgyhlLbQxuiwOs2cG9f0WF+lLPL9UepVewWCeTLZ7WeERNJhNSfzYSTxfZfgDlwt3UjJzvVxKa9jQZ777WszaLD3B1GiuQO62EALmHIFRq6W/AggU113B3nAzAA+dIrrRvNywpYrav7HyZdt1AoZfNGcQaqTVJbFQczh6ctjmDXS6ueWlB1zoKil1CabZluNSRmMvq+06AN+lLS7AzMIvmyb+xXO9403LtdaR5XdNm5FcwKDL6J7vOR5cLt/LGSIe9k1jsB3OICbyEU9LEwDlk+bTg3yVdojP0/OD1hxrxqb6mwhG+HfeKP4Z0lWnCLho9GdE6mk35xrZT3icJ2mR1w3vom8N1+ixx0T4NTDbNWetgDy6X5hQS1xBQpGl4X73btvxUmSNtmaDCnwETP2TZkCSgY6EUS3IZNFG7cXUiajN3kzvRxx/J/7GUrazEdje2vVPc0DykX42opG7RAPfvJHTqfPLXZpEozf4XRGgPO5BCJsT3UAjOLh410LC6XsI/OM5ftc0CL63dPTBxL1PPfDNaDiDTxn/13BQVKTB8D6IvWK+Ylh98RNkoYGSXg=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(366004)(396003)(346002)(39860400002)(316002)(8936002)(6486002)(2906002)(31686004)(31696002)(83380400001)(6666004)(5660300002)(86362001)(2616005)(16576012)(66556008)(26005)(66946007)(53546011)(8676002)(956004)(36756003)(478600001)(38100700002)(186003)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?F0osMVUsR3eUH2InSTTpmNtDr6h/eokKCqJYHg3?=
X-MS-Exchange-CrossTenant-Network-Message-Id: bda5f100-0285-4529-53dc-08d941ac7551
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 01:05:21.0968
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: dZ7cT96aeglbqqkPQNXrocmfzMjHVunptmzDNJtTAjp24BUGIDnJiYlRDss9uSQl9jFp9UemiU5Gaxkra8ebV9jnKZjixI6pfurvyJGuJHo=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3669
X-OriginatorOrg: citrix.com

On 08/07/2021 01:32, Elliott Mitchell wrote:
> Hopefully I'm not about to show the limits of my knowledge...
>
> Quite a few values passed to Xen via hypercalls include a page number.
> This makes sense as that maps to the hardware.  Problem is, I cannot help
> but notice aarch64 allows for 4KB, 16KB and 64KB pages.

Yes - page size is a know error through the ABI, seeing as Xen started
on x86 and 4k is the only size considered at the time.

32bit frame numbers were all the rage between the Pentum 2 (1997) and
the advent of 64bit systems (~2006), because they let you efficiently
reference up to 16T of physical memory, rather than being limited at 4G
if you used byte addresses instead.

It will be addressed in ABIv2 design (if I ever get enough time to write
everything down and make a start).

> I don't know how flexible aarch64 is.  I don't know whether an aarch64
> core can support multiple page sizes.  My tentative reading of
> information seemed to suggest a typical aarch64 core /could/ allow
> multiple page sizes.
>
> What happens if a system (and Xen) is setup to support 64KB pages, but a
> particular domain has been built strictly with 4KB page support?
>
> What if a particular domain wanted to use 64KB pages (4KB being too
> granular), but Xen was set to use 4KB pages?
>
> What if a system had two domains which were set for different page sizes,
> but the two needed to interact?

I'm afraid I'll have to defer to the arm folk to answer this, but my
understanding is that it should be possible to support guests compiled
with, and using, different page sizes (given a suitable ABI).

> Then you have things like VCPUOP_register_vcpu_info.  The structure is
> setup as mfn and offset.  With the /actual/ page size being used there,
> it is troublesome.  Several places might work better if pure 64-bit
> addresses were used, but with alignment requirements specified.

The way to fix size problems is to mandate that all addresses in the ABI
are full byte addresses, not frame numbers.=C2=A0 When alignment is require=
d,
and it frequently is, it is fine to use the lower bits for metadata.

Critically, what his means is that you don't need separate API/ABI's
based on page size.=C2=A0 e.g. "please balloon out this page" operates "on
the alignment the guest is using", rather than needing separate ops for
4k/2M/1G (to list the x86 page sizes only).

> Then there is a question of what happens when we get a core which has
> more than 64 physical address bits (seems a few years off, but for a long
> time 32 seemed high).

riscv128 is already being discussed, and current generation x86 servers
already have 52 address bits and are using them all (partly NVDIMMs
which take up huge swathes of address space, and the various encrypted
RAM technologies which steal upper address bits for key-ids).

The only sensible way to address this is to introduce new ops mirroring
existing ones, using larger integers.=C2=A0 e.g. get_e820 and get_e820_2
where the latter returns __uint128_t's instead of uint64_t's (or whatever).

Whenever you're talking about systems like this, Xen has to be compiled
for the widest data type, and we know the datatype used by guest kernels
(based on its control settings).=C2=A0 All the compatibility layer needs to
do is zero extend 64bit addresses to form 128bit ones.

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:08:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:08:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152786.282242 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IX6-0003XP-2K; Thu, 08 Jul 2021 01:08:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152786.282242; Thu, 08 Jul 2021 01:08:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IX5-0003XI-Vi; Thu, 08 Jul 2021 01:08:51 +0000
Received: by outflank-mailman (input) for mailman id 152786;
 Thu, 08 Jul 2021 01:08:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=EFbg=MA=citrix.com=igor.druzhinin@srs-us1.protection.inumbo.net>)
 id 1m1IX4-0003XC-TN
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 01:08:50 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 560eb9c5-8282-4e5e-8831-f011cc223a6b;
 Thu, 08 Jul 2021 01:08:49 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 560eb9c5-8282-4e5e-8831-f011cc223a6b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625706529;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=hpRq19QBaiklmThKbfGz9MR8NTp9J9/KfdbQ0rV8Zks=;
  b=YjJrJaDYmWAp9o4sNhu+kDb9grbpQOPzQIURAfLNAmFvd0UizpxWyGIg
   /ElCHbcGtnnXyNEZGbJZh1hMJua4xrrjK8X0Wn/yZ9wLGzVUzswmTV1AX
   V0PCbJBE1z5rce2eVOjZFz/x8oDyEGR8uwsR0lh+CYjzbsHTTfHrIDNb6
   g=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: gRLGubRZMug6oBsh+HeLZHZAD2xSCFuRfFqlGpjkMcHZFza6sGOLPKebk+IyuCzYLP03zwjBox
 VZzqMeCNX8Pk//yN3I/9IS8dHN2hav2GMUM55lgZVpy8p9RR1BgyW3xgxPoorLrq6WgYZSUYfY
 bZsQ3nuK2otW7+KIK6Tz0cguX03jAvhHFGscf7tDa5LpIfyshdz3Yl5LxRElOpEcYjwNm0mVWZ
 U2ekvbKF/HdfUrXkS2rFJHVnvp3LZIbEl8Nvb/HmKDXD91GuQW/LsnKRyFKOvj84Ir2uvdKTTF
 6xk=
X-SBRS: 5.1
X-MesageID: 48169990
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:6ksd1Kzt/GV12EiN+zeNKrPw1r1zdoMgy1knxilNoHxuH/BwWf
 rPoB17726RtN91YhsdcL+7V5VoLUmzyXcX2/h1AV7BZniEhILAFugLgbcKqweKJ8SUzJ8+6U
 4PSclD4N2bNykGsS75ijPIb+rJFrO8gd+VbeS19QYScelzAZsQiDuQkmygYzZLrA8tP+teKL
 OsovBpihCHYnotYsGyFhA+LpL+T42iruOeXfYebSRXkDWzsQ==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="48169990"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=iQA6k4ZAkPXuwQVMUuBSxWiMl1rbRUYhMhf7+twQ+xrKUIq+z9bleJOUhyx/DBR4rzCHBNejjyNzH2Nf6K3hB4sKqFbXQHu7doqvhIwRrjde9a59X8s47C8kC8naTrJ5y/tYy0cZrW98zThkpbNdkd8cb/smYiaMfKE/FcSUwGP7K9ktf66168HEMjidNAKOD8B/2D+T9X6ED1qIplMs/aIenH1qP+h3M5vOxhE300Ypl62UiU0sBsFiUIcle4AaCHNXE6Z39E5FNBXVDKHAozWw0fpDMVoRJNPZ+f65hMC9pFxX2F5MND2EzxUEMv3D/xfAfFfLo0JWi3a7uAEP5w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yefzc+M5i2H0lPr8iW9RedBY/KC1AATX6LXYLMhRrQ8=;
 b=IH/InWHQC+FBTxtTQj7GfsIfRyxQcYImRUMJXBSqVJmR2P45X8cWC5mO6avEP888l3aQpwDocIzNJFgyGyG98jMkc/v+iWBwi1wzNJ2fnoANwJ3o7Z6Xi+mE/QScZOxld2svbP8eAmANORzinvFrcYXiHe5GlcHO1xy98/m8GBpZ5f8pTDOjAJlKI1sdFbUGtv2J2d8Z2ycc7eKARmuTZBER469ewhcP/Qfg/gU1zIZP07TgXVZyEboZti3BPMERxOWNT2IKwMk8oBPcOF5WqlSKY0M32h0moyffw3BpRCHkF4xC2xx//3MLDAlfXp+7EfSMZW0UqQ70lOKzgwEpGA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yefzc+M5i2H0lPr8iW9RedBY/KC1AATX6LXYLMhRrQ8=;
 b=uY3ecL6vopeZbzBJ7YHD5gwRvweNhW2K1sEO36KT3Azei92K9IKNzEqsoApaKlgeHNaCI7ILkfV5hYeaHgvCnO0QmycBfiMa5VZRraJ+QAWMLVZXcNwYPrh8T+PwDQg7GBOGaybPTTSYv/ufmvVhdtI4Ujoaw9YGJQF5c7IiWjM=
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich <jbeulich@suse.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <george.dunlap@citrix.com>,
	<julien@xen.org>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
 <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
From: Igor Druzhinin <igor.druzhinin@citrix.com>
Message-ID: <5dfb0321-ca52-5464-8bbb-c29d329d24cf@citrix.com>
Date: Thu, 8 Jul 2021 02:08:33 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.8.0
In-Reply-To: <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: LO4P123CA0351.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18d::14) To BN3PR03MB2401.namprd03.prod.outlook.com
 (2a01:111:e400:7bbc::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f11e8cb2-c5f8-4e66-5e1d-08d941acec6c
X-MS-TrafficTypeDiagnostic: BN6PR03MB2626:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BN6PR03MB262659F511220D5F4F9DC3BDE4199@BN6PR03MB2626.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Us7ufhowxZPwchX2TYy/tvQr0QZT8y6VB48wIfv9hQvtRhUkXSdlscgS0MNybdFvPb6V9dMCCkhzHHsTZhYTZxbqKNizNPYaEkrjDR5dwKAeFcjZ4aK1CgKK+giuwQlaDGgUghE7P/hHtNObWYCDc1/Tb2Xh8aFZ8/WfrfCqF4skjtR6UySYrxU5s1BG46XJFvD4aqk2zKt8O1KCi/YwviPfXAdhU5PT9ETD3K1DTC6XkLY7G3CRinDgR9Yt4o95KBL7rVq9CjYrxBB8KzoTQ1t3Qfx1R+vgrbT+fpBeYGTjqPYdZHrWpX/Yw7ZqPvD1DDlHR0KqyXeLr3h5G8jVId1/JQSuYAdlvLQRN/LHreE+GzL8B8iC4CHgTd1hHjOSykMTPNwPWta982SN03zvz2iHnrYh6Uk4cGdzSOyUon766V53S47KI2LMYlgblUI0n6rnoBtxde2uifxuZlinfEga+doHXUQIi51qKe3vnFAIVhAvEIE98RhVx44mibwob2bKw70WtiKaPMDwXwZ5Y6U/wccZVnoK7P/VCgYUyQsfUosIkDQTFjzXvRxAWs5QcvgzwR67SOR5gQvpRZ3FqOWMCVJ2H2RXy0orJO9Kql9o7ttJlkbPqY7xZn2QqEpam3anBFBegWWRySpXRTVv215Y9C58BnBZuDay8wiM1KBLnIyeKjWdMFmEogbdHMKf3asWU5+SaYSrlwXbcz8YlwYzqStE1BvZIkqxxGMHHS8=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN3PR03MB2401.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(39860400002)(376002)(136003)(396003)(66556008)(66476007)(4744005)(478600001)(16576012)(83380400001)(6666004)(8936002)(8676002)(110136005)(44832011)(66946007)(5660300002)(2616005)(186003)(31696002)(86362001)(36756003)(956004)(38100700002)(53546011)(26005)(6486002)(2906002)(31686004)(316002)(4326008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?bZ3nbSNy7eVlOZSA4N8/1wNs9WtzWTa3zpW3Xmz?=
X-MS-Exchange-CrossTenant-Network-Message-Id: f11e8cb2-c5f8-4e66-5e1d-08d941acec6c
X-MS-Exchange-CrossTenant-AuthSource: BN3PR03MB2401.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 01:08:40.9999
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: qqgJkMlZH2IOpo7WbNwqgFQ2fnQJt42SvmDhAx9AD45OAe1kPjDugZX72Npyyq/hjJ5QeITuN95dz7ri1xTlDcQEMY0d18rjq2TSNXJb4rc=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR03MB2626
X-OriginatorOrg: citrix.com

On 07/07/2021 10:19, Andrew Cooper wrote:
> On 07/07/2021 08:46, Jan Beulich wrote:
>>> --- a/tools/include/xenctrl.h
>>> +++ b/tools/include/xenctrl.h
>>> @@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface *xch,
>>>   
>>>   int xc_domain_irq_permission(xc_interface *xch,
>>>                                uint32_t domid,
>>> -                             uint8_t pirq,
>>> +                             uint32_t pirq,
>>>                                uint8_t allow_access);
>> Take the opportunity and also change "allow_access" to bool? Or is
>> use of bool prohibited in external interfaces?
> 
> We've got bool's in the interface already.

Where exactly? I couldn't find a single "bool".

Igor


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:11:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:11:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152792.282254 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IZb-0004ro-HE; Thu, 08 Jul 2021 01:11:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152792.282254; Thu, 08 Jul 2021 01:11:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IZb-0004rh-Dc; Thu, 08 Jul 2021 01:11:27 +0000
Received: by outflank-mailman (input) for mailman id 152792;
 Thu, 08 Jul 2021 01:11:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1IZZ-0004rb-SV
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 01:11:25 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 34175ce2-93a2-4617-aa4a-100137b1ac5f;
 Thu, 08 Jul 2021 01:11:24 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 34175ce2-93a2-4617-aa4a-100137b1ac5f
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625706684;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=i8FAv9IDgQu+DVEWgwyu0whT6GuC795fF+5/SB+oysQ=;
  b=JdG39nvyz5EbCL5+xmSP6SrPuBJT4PxKFpRbfxJ9SXTbLAL/Cwm5gCoo
   EwaxcSYJn2T9rBSdzvP3qESI22PxYnxBDH1BQkwWaaY4cEmMtQHhp/ur9
   MR25S5nctduBppgbWjNyYLM11UiZagnx19lw4vyBt7HozAXgfhc8XMq+M
   c=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: HiOKPLIT17ZNjUUowMGWiZC/eXCB0SZ3feXCOptZZOq6uJ0blGUA13Nq64bZ0lvSUHnf9innor
 K0UJdSzFv4T3gZEAgFpup9sFejTU/v8l/slnXMVgdAvIyQJd6bFh29GCKvVZ7VOofCNcPI4VtU
 KEWS8QZb9nsUgFw+GUTWwouxSz1tt4oPKykHMqkc6pApiXyHaFgZ8TFoN1bqQUIg23huYrD0hB
 UyPPnTn+bEnZk6zbo/irtQIsk/zypJWO2Sun/0lW044vp2PRAYZTY7cHJD0oN46p0mxy8bjYCe
 O70=
X-SBRS: 5.1
X-MesageID: 47496529
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:kaWxvaPeGAxLxcBcTy/155DYdb4zR+YMi2TDiHoedfUFSKOlfp
 6V8MjztSWVtN4QMEtQ/uxoS5PwP080kqQFnrX5XI3SIDUO3VHIEGgM1/qY/9SNIVyGygcZ79
 YcT0EcMqyCMbEZt7eD3ODQKb9Jq7PrgcPY55aq854ud3ANV0gJ1XYINu/xKDwSeOApP+tcKH
 PR3Ls8m9L2Ek5nH/hTS0N1ENTrlpnurtbLcBQGDxko5E2nii6p0qfzF1y90g0FWz1C7L8++S
 yd+jaJp5mLgrWe8FvxxmXT55NZlJ/IzcZCPtWFjowwJi/3ggilSYx9U/mpvSwzosuo9FE2+e
 O87SsIDoBW0Tf8b2u1qRzi103LyzA18ULvzleenD/KvdH5bChSMbsCuatpNj/ir2YwttB116
 xGm0iDsYBMMB/GlCPho/DVShBRkFauq3ZKq59Rs5Vma/pbVFZtl/1ZwKsMe61wWh4SqbpXUN
 WGNfusocq/KjihHinkVgAF+q3fYpwxdi32CHTq9PbliwS/MRhCvgIlLfck7wA9HaQGOtJ5Dt
 T/Q9BVfY51P7krhIJGdao8qJiMeyDwqSylChPbHb2gLtBdB07w
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47496529"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JpAYrn0SpZ3QwZ1EM85IOviz4Wo4ZM+Sne/N3gGlzUvmjAgAabNJ3w3FtZrfTgBp2s/ZMdWlgPwhKjLPJfUJnh1+alx0SNt4DYG2ahox9x9hAiWDAB8c4l1a8T3IzXOXq1i8gPY8IaZL7oUJg+JDWSo3xccXxWKrkTmBEkqB/4MxklT54NatEXP1FZ4BaZXMX+xq5518+grG7IuqWbGn4jKaa1o38A//XA0KBGrWNINp3JdBaYX12/aHYaSYe7L/CmHoPR6rguPYrU0CLYZqi15yeb8m49VYA6MSKTq2nTIiwTaafPKLwFqrvVpCA2s4tmCeOMvmjJlZvp1CwBjXUQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=i8FAv9IDgQu+DVEWgwyu0whT6GuC795fF+5/SB+oysQ=;
 b=UKIdqzdS0ieNuPtMfJ0Y3Phi+sOP2zxcFDvRJzEca4Z2tLGSOZoZTxBHn5m6+EWZO728t8yUrVdclRMuuEoAQNCdX7q6K+gyrk47JAU2gklsmmiV9m9f2Y9cb2Cb2THvW/Ax7QUQFox8gVfk2CVy9Uo7bTqitzdnLPl6WjINn1xfv6voKrdsVCnSt6PFNmGSMmbYiVqiomB7bJjjnCTW0OlstrtN2TUxh3/CQZRUTb5yCPx4BDzTKx9m8T4fBw0eUC+NIuiJ3J+/GoYALBwkXOONkX2eqbNMWkM6rD09abIOHNGXD6hyq+uVG+Ke6riCytRs3OC/Z0dMRIPF18fqSg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=i8FAv9IDgQu+DVEWgwyu0whT6GuC795fF+5/SB+oysQ=;
 b=AgI6ltQHxacg0gD/Zd7I1PhvGkmWG37z8DZSKUJuNS/UanqIjv/qma1dLFBuKgPZUqBRBc5Ue7PMCn6+uenXLjmuNZyvsicVpIM3rPN9LCGdihMOJsxLyTWJWg6fyhALLP5yr/120puOSA84FBTF6ql9S9OjDXc3tSjacV4np4U=
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Igor Druzhinin <igor.druzhinin@citrix.com>, Jan Beulich
	<jbeulich@suse.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <george.dunlap@citrix.com>,
	<julien@xen.org>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
 <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
 <5dfb0321-ca52-5464-8bbb-c29d329d24cf@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <ea392b06-6277-ced8-0cbc-40967fc1ca61@citrix.com>
Date: Thu, 8 Jul 2021 02:11:09 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <5dfb0321-ca52-5464-8bbb-c29d329d24cf@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LNXP123CA0022.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:d2::34) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c097eac2-0930-4319-d510-08d941ad49ee
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6270:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB6270A2907E65D33F1927E845BA199@SJ0PR03MB6270.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: UUc9wX2L4LMHMSn383Uof/aBh0I6LhJ1sG45emt9FuORmJJr8H350vy4TpedvAGTIa2u6tl724fqMpaKpN3Fm8ETRunru19YgJDBZPPvxk0elDM8NmIYOPJ4kB5kaQElwyJMb9EqBm7q5GkGkNua9cbf4Ma6Kvxwr26I7OT6IcnJ9qaq/y1VcbLjwohyOgjUF0Z9TBRh0putzsPtDsI3XiR9ZOM9HdK1F0GnI0hSfqF33M9pvfj0f0wAWUWXZYgp8mnmHFp23OqnK01TPVb6PhbRRDxNC3fqBv6IjY2J9uF9lkRfJAthXwUNpki7PS/TBPtmgO8O3k1xAPPlvsihnb8Lg+XXoNoWQ0cJ5RaPA6pYtgRPgzcDqYqoE7V6RePAhoM9X1AceTwqTgbgD/MfXstLn4iZfFDbWqg4xUJJ9DjZw+nA2P6IYqjB9ZoabFq4Ftv54dU6DViM9Yna/fSZXyAeuIBAshP7y3pPFUvoClOkDnNAfU5efCzIu2Gyz59kZ1eXeqCMaRn9Yfj+uvHRl6kl9kQNCoZwCz43SysoQnP3pdDyO9Ohk0EcfR1TKhpBXBZdAvzz4nutUavRlV3pnjsQiguSmy7LoX+Uq5rDL1fcN7FNRKU6j6Fpu4mEC/PiZRAKH90HsOIwBoP4XPkiDwBaNL6PdkZr4//JlTdhQkdxY57tn7Xfp+zb3dQmXa6HsLoPXV+fb2SADsM5HHXydVsbw10VOAYgb+r+Q4HvsI8=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(396003)(39860400002)(376002)(346002)(316002)(110136005)(86362001)(186003)(31696002)(36756003)(83380400001)(5660300002)(956004)(53546011)(2616005)(16576012)(6666004)(66476007)(478600001)(31686004)(4326008)(66556008)(38100700002)(8676002)(66946007)(8936002)(2906002)(26005)(6486002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?fLwJYeFfdFy/benY2+AP/dprLyT3DuSQE8MoaNu?=
X-MS-Exchange-CrossTenant-Network-Message-Id: c097eac2-0930-4319-d510-08d941ad49ee
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 01:11:17.6621
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 3/biEVnZFzwgBNABrVOcEwcDRQtgDyqhYuZgTTrmFMqDYVxYXVfFg3b66qdAKIUZk6uZUffOMKQFGoSnLD/dRH4MrZDolwvgIOzKT/BMAHQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6270
X-OriginatorOrg: citrix.com

On 08/07/2021 02:08, Igor Druzhinin wrote:
> On 07/07/2021 10:19, Andrew Cooper wrote:
>> On 07/07/2021 08:46, Jan Beulich wrote:
>>>> --- a/tools/include/xenctrl.h
>>>> +++ b/tools/include/xenctrl.h
>>>> @@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface
>>>> *xch,
>>>>     int xc_domain_irq_permission(xc_interface *xch,
>>>>                                uint32_t domid,
>>>> -                             uint8_t pirq,
>>>> +                             uint32_t pirq,
>>>>                                uint8_t allow_access);
>>> Take the opportunity and also change "allow_access" to bool? Or is
>>> use of bool prohibited in external interfaces?
>>
>> We've got bool's in the interface already.
>
> Where exactly? I couldn't find a single "bool".

$ git grep -w bool -- :/tools/include/xen*.h
../tools/include/xenctrl.h:1844:                          uint32_t
domid, bool restore,
../tools/include/xenctrl.h:1846:                          unsigned int
nr_features, bool pae, bool itsc,
../tools/include/xenctrl.h:1847:                          bool
nested_virt, const struct xc_xend_cpuid *xend);
../tools/include/xenctrl.h:1954:int
xc_altp2m_get_domain_state(xc_interface *handle, uint32_t dom, bool *state);
../tools/include/xenctrl.h:1955:int
xc_altp2m_set_domain_state(xc_interface *handle, uint32_t dom, bool state);

and loads more.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:14:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:14:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152798.282265 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Icp-0005Xb-1F; Thu, 08 Jul 2021 01:14:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152798.282265; Thu, 08 Jul 2021 01:14:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Ico-0005XU-Ts; Thu, 08 Jul 2021 01:14:46 +0000
Received: by outflank-mailman (input) for mailman id 152798;
 Thu, 08 Jul 2021 01:14:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=EFbg=MA=citrix.com=igor.druzhinin@srs-us1.protection.inumbo.net>)
 id 1m1Icn-0005XO-LO
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 01:14:45 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e1fbf00e-4eca-4344-90d5-2930bf12521e;
 Thu, 08 Jul 2021 01:14:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e1fbf00e-4eca-4344-90d5-2930bf12521e
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625706884;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=83CwrkJjyOJ+U+ABfCUkVz9hB90og2+hFf3Fo7UbmwM=;
  b=U1tRJrbA8qz3qa3rw5H6GZl+QrvsCeRFWln8aNaJNnm5jEeVfoWrswDH
   O8jre4EFGBqgxi2ia+wh5w1KXpldxhLzwTZwZNIBO9wuM/Af/xfGaFJvs
   iy+77O2ymZyFma4KSSdrOvRAMTrP8xOI2uHEugw7yiPxA5QzrQzhmwiU7
   s=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: GQpsNhA0uFDkRYuYQENDswi2iA8K+3SjLbWDIjD5MzXJS6w8gRRuXPDZLbwUF1gYuBKBFkZjSA
 y2gQnCKrvMixv7BE3eTmhjEV3lxkDH7jBE4vusyP7qoo8WhdPMmmSyuoQuMTFXxXvOKeXfgnfZ
 EfDLI05/EpPKuU90gHT9NBPB0bYvh9oDduVRrBKHy1UadAiMlcKcVzzXzom1Eb2pyCGwSx6ttU
 5AxVXraNMoh8rItL/duyBMEEf4NIPlr86GZIPPoiNVDT3jmq9CyVkY7D9ayt3/YKCXGWh1m66C
 TlE=
X-SBRS: 5.1
X-MesageID: 48170263
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:sTxbaakYTo+cLl0I9Ysxuhu9/t7pDfPCimdD5ihNYBxZY6Wkfp
 +V8sjzhCWatN9OYh0dcLC7WJVpQRvnhPlICPoqTMiftW7dyRWVxeBZnPffKljbehEWmdQtrp
 uIH5IOceEYSGIK8PoSgzPIYOrIouP3iJxA7N22pxwGIHAIGsMQmjuRSDzrdHGeLDM2dabRf6
 Dsg/avyQDQHUj/Iv7LfEXsCIP41qz2fd/dEFE7Li9izDPLoSKj6bb8HRTd9hACUwlXybNn1W
 TeiQT26oiqrvn+k3bnpi7uxqUTvOGk5spIBcSKhMRQAjLwijywbIAkf7GZpjg6rMym9V5vut
 jRpBULOdh19hrqDy+IiCqo/zOl/Ccl6nfkx1Pdq2Dku9bFSDUzDNcErZ5FczPCgnBQ/u1U4e
 Zu5Sa0ppBXBRTPkGDW/N7TTSxnkUKyvD4LjfMTtXpCSoETAYUh7rD3xHklVKvoIRiKr7zOSI
 JVfYfhDbdtABOnhknizyxSKIfGZAVrIv/uKXJyyPB80FBt7TpEJgUjtZQidtppzuN1d3B+3Z
 WyDk1frsAEciYnV9MIOA4/e7rANoXse2OADIvAGyWqKEk4U0i946Ifpo9Fv92XRA==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="48170263"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QEWTiu25+uQ5HUexNW6UlJOFdWqvhmqUJc45RsibWoapr3SdWbYSMZBmDWFq3AKC3zyQdE8UgsPmf4oHPBpfVU0yflSKbMbDxZ71+6ruPWKXGWpAmmb8LcSYrcqBM2Ng5ywoYk8csBDH1r+dnoZwt1thp2VVxbdha2o9lq7i6dv1/dUbe1gRHVHuiUOf9WeiCuWpUyOYQAP6XGl1wE1AVDyNbYh7ijCnWW6mxZmcQfQ8Cli34PAFgG2XNR6R7sdvB8CMZkkWn6CLitZpObmPo/vG6657ou+0C6AVPQD+QGonVRplVNSvPTrKjyFXGYjZcaulL5kbRJoHdQNSVT90zA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=u+uE/GoEh5pA47/oqCoiIZu3SZACAEBjH1E1VYzbE74=;
 b=CUvhvOfYOAL8p6xBenIiWsznlQziw8wAt1enhCAmZY79pBzPcdyNqTAO92n0KhC+NIDbtviQRQS+AbTYDI9zkbKM1B1f/dxltAySXfQx/9VAHTfYObtrDbavSl5lcTpcyr/zO95k9HtcVWOnxt3/AfVVVdQ0ISIq3R05tcNUR9aFAd/voebGOIGuDa6UJX2AvBDmQb5Ymrd975hXzqtvRmBx/RBL8oYT8Qw7vM13gOsP67QuLIdM+EeYNrKCA1HaxsViC0q9qX8G6u9coa0mdBxUNtaoKm2n/i1xckbg61SKdv+dmF4uAL6uCvZ9v0dF0pVefWp0mfXw0pKOBH3hMw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=u+uE/GoEh5pA47/oqCoiIZu3SZACAEBjH1E1VYzbE74=;
 b=tqioW3EHpAovJhzQyFQ9NudWPtWWhwn9+xmNs3J9qAnNCafHRmxHTj0aUCueMapRWJwDIFX3dSiuOBj3Mw4TUzGQxpvabzmYDK1PQWkpb8gXAloL9teCtw2SyI0dWvkKcpx4uHcnHN0NKZQs+l/Ra1Cjs6PwnYaNSZ+dNxlHYEo=
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich <jbeulich@suse.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <george.dunlap@citrix.com>,
	<julien@xen.org>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
 <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
 <5dfb0321-ca52-5464-8bbb-c29d329d24cf@citrix.com>
 <ea392b06-6277-ced8-0cbc-40967fc1ca61@citrix.com>
From: Igor Druzhinin <igor.druzhinin@citrix.com>
Message-ID: <9e44dee6-a7c0-e139-4eda-a483b2ba16b3@citrix.com>
Date: Thu, 8 Jul 2021 02:14:28 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.8.0
In-Reply-To: <ea392b06-6277-ced8-0cbc-40967fc1ca61@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: LO2P265CA0362.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a3::14) To BN3PR03MB2401.namprd03.prod.outlook.com
 (2a01:111:e400:7bbc::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 95cc9367-b7ff-4119-d5cb-08d941adbf91
X-MS-TrafficTypeDiagnostic: BN6PR03MB2626:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BN6PR03MB2626D32AFD2E3AA76EFF1C12E4199@BN6PR03MB2626.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: HTe5kO0qWw3BrX+HK6vbkkzwEdu8f7s999bZc98M+xJaWv3e0FGrHRSQD+ZKfuF+MNQEbWf5oOdrf0FfW6yl6coqbrrqQrXzGdcuSqS7TA3nltiLa47l2eOebisTUvLOwQT7Xq/dhEbxzYZwr7M3fJnivETMWi8BoCyOqnY1dCyCA/OZWPUp+qfU2rBByHV4MqOCFIaOC5wJaA/Ibm21r5iN0Q9/Dj23pxden0g/ptMUSJygrdCsjXzt2+w8xp3MM9GAPw2+KgZcTMaAdMi7t1MRh1tf5DbNg0fidA/M2Y6VDEe7R8Cqk83dTSIz+PKg0eWLKdi/TSvH/wc6+UpkCm+LpzshLFhiiGC+4m6wswaLcZ8YB0s53yIQoqUXacY4Z0QmzCo0gWUXd4vjNDlrC9rREBomzhQziiuUjhltU9WlDdT2k9WLI2PrdLLwCJh08H90lzSdF2fS9A9atT0d0RhPbiJ6sJd7qTQqgQUvwseFLtA5DOZ7YsCVeAvA9Nqd3nQauJ6sx8+b0M2I+l5k+4b8gNry7+oM/thwIosrcsfkM4g5KCnd6QOhKPhTsLzRcTiouwMsRSW1KmojxgAP9JYdG8uLFEwBVQ3kiMaZt57wwwCkuLFDu/TutIDybHgtLHJMunV32rFgOCNp2E9U+8rDwyvcYrhlB8fxOFB010KajwDCDLPCStNIZsTiSLQo7Vi7ldD+kdTvyg/z0Tka9FKAzM6Cssx4169pl3FsuNA=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN3PR03MB2401.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(39860400002)(376002)(136003)(396003)(66556008)(66476007)(478600001)(16576012)(83380400001)(6666004)(8936002)(8676002)(110136005)(44832011)(66946007)(5660300002)(2616005)(186003)(31696002)(86362001)(36756003)(956004)(38100700002)(53546011)(26005)(6486002)(2906002)(31686004)(316002)(4326008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?cSIcS1dySdasriDD/aJkj3gqn9QX1EQb+aOu/nG?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 95cc9367-b7ff-4119-d5cb-08d941adbf91
X-MS-Exchange-CrossTenant-AuthSource: BN3PR03MB2401.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 01:14:35.0548
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: olCAdGDduddyNozFhC4BQxPjtm/b9R9ihHVgYfbBxW0cz6vng+BoKlpVK6Ep4TdOMjL1tGIXBUNpHLkwX5leLMM8HxYy9aV+WFJjE/72g4I=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR03MB2626
X-OriginatorOrg: citrix.com

On 08/07/2021 02:11, Andrew Cooper wrote:
> On 08/07/2021 02:08, Igor Druzhinin wrote:
>> On 07/07/2021 10:19, Andrew Cooper wrote:
>>> On 07/07/2021 08:46, Jan Beulich wrote:
>>>>> --- a/tools/include/xenctrl.h
>>>>> +++ b/tools/include/xenctrl.h
>>>>> @@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface
>>>>> *xch,
>>>>>      int xc_domain_irq_permission(xc_interface *xch,
>>>>>                                 uint32_t domid,
>>>>> -                             uint8_t pirq,
>>>>> +                             uint32_t pirq,
>>>>>                                 uint8_t allow_access);
>>>> Take the opportunity and also change "allow_access" to bool? Or is
>>>> use of bool prohibited in external interfaces?
>>>
>>> We've got bool's in the interface already.
>>
>> Where exactly? I couldn't find a single "bool".
> 
> $ git grep -w bool -- :/tools/include/xen*.h
> ../tools/include/xenctrl.h:1844:                          uint32_t
> domid, bool restore,
> ../tools/include/xenctrl.h:1846:                          unsigned int
> nr_features, bool pae, bool itsc,
> ../tools/include/xenctrl.h:1847:                          bool
> nested_virt, const struct xc_xend_cpuid *xend);
> ../tools/include/xenctrl.h:1954:int
> xc_altp2m_get_domain_state(xc_interface *handle, uint32_t dom, bool *state);
> ../tools/include/xenctrl.h:1955:int
> xc_altp2m_set_domain_state(xc_interface *handle, uint32_t dom, bool state);
> 
> and loads more.

Are we ok to have different types in ABI interface and in libxc
function prototype then? Because I was referring to ABI structures.

Igor



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:27:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152807.282282 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IoZ-000766-AY; Thu, 08 Jul 2021 01:26:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152807.282282; Thu, 08 Jul 2021 01:26:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IoZ-00075z-79; Thu, 08 Jul 2021 01:26:55 +0000
Received: by outflank-mailman (input) for mailman id 152807;
 Thu, 08 Jul 2021 01:26:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1IoY-00075t-9K
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 01:26:54 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e011cf08-5b9f-4934-9050-0e8222473e39;
 Thu, 08 Jul 2021 01:26:53 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e011cf08-5b9f-4934-9050-0e8222473e39
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625707612;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=NCsyovaDGC5PS7i4ezcUxXHb33WhIjTf2IzjSzcvd1Q=;
  b=LYy4fNRYrwZzTphwQj1iUBlS3kpp7lGp5oRs49qPTgEgQ22gtTO3J6pq
   deud6zLEVqCoi3wqJ5pAlv/vmqJ3jHfN67FlX72ewQj8+6VEVjTTHIBOH
   2LBrmZWLEbQjVQwPaCrKNEp1fcqi0tbdAUPTMlhv8dd5uqEoX9faNXfsh
   o=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: Isg8KaNH0BqOMgKPYesgf240P3TpYEpXKRkDrKyn+gf94mdo5dUvib1y0SgLOhhX23j1H45CZm
 LvrRKmjd/hXWTHhb9iRmwcd79DAp36Kd2GtlauXImxkt/12W1Sft42NIrTlXGD8IbHsF1MNhm3
 6RD1XKQdEZ3V+Auhx3WeG++IyHMaBYzJs8axa4FZrKDBZRFDWn10WgzFsJ8JV5eeWplkDI+5sk
 6o2Zy1uIkaMbzsFVHEXKueXbJd3KXsiJFiPqLPFG2jV347bERszdJ8cqN7L98fTwX+xhvxX6S0
 GuU=
X-SBRS: 5.1
X-MesageID: 47497182
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:+Q1cb69XwMiqQra+5Axuk+E2db1zdoMgy1knxilNoENuHPBwxv
 rAoB1E73PJYVYqOE3Jmbi7Sc29qADnhOBICO4qTMiftWjdyReVxeRZjLcKrAeQYBEWmtQts5
 uINpIOdeEYbmIK/voSgjPIa+rIqePvmMvD6Ja8vhUdOD2CKZsQiDuRYjzrYnGeLzM2fKbReq
 Dsg/av6wDQA0j+Oa+Adwg4tqX41pL2vaOjRSRDKw8s6QGIgz/twLnmEyKA1hNbdz9U278t/U
 XMjgS8v8yYwrCG4y6Z81WWw4VdmdPnxNcGLMuQivINIjGprgqzfoxuV5CLoThwiuCy71QBls
 XKvn4bTopOwkKUWlvwjQrm2gHm3jprwWTl00WkjXzqptG8bC4mCuJa7LgpMCfx2g4FhpVRwa
 hL12WWu958FhXbhhnw4NDOSlVDile0m3w/iuQe5kYvErf2UIUh6bD3wXklV6vpREnBmcYa+a
 hVfYHhDc9tABanhyuzhBg3/DTENU5DbCtvQSA5y4aoOnZt7ShEJ+Zx/r1Xop46zuNLd3Bz3Z
 WODk1ZrsA7ciYoV9MKOA4ge7r7NoWfe2OBDIqtSW6XXJ3vfUi98KLK3A==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47497182"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dlRZ9cP8lX1My1g7WRT39dqtrh1hzYY7n5P7GK4baWD/0oD6zzC03zC0/L3LmhNykxfjsgBDliCQUFFXkh1Aubr/Xzcv7oaC5ME3I83DOQnncwNjBzvHExhDyJknfoIKNwILWiYPz0ewchZL4/DPlJIB0SVdYD9a0O+MltH96P2gxjPydWUfxo4c1gml8b6d869UcZX+8E862YJ5rkFZOsEliqMBL3hb2XnCOWaACJmM7r0jfHxk+anFBudMBqbkkFaCjlHQilcXlk5Y0e1tlZfjY3xxvdSuBWxIUV4BN+pJkWZVKHWN6iSGMAiYOT0+gfUr+c99CwFXobMzRXlM4Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NCsyovaDGC5PS7i4ezcUxXHb33WhIjTf2IzjSzcvd1Q=;
 b=J67x/GkcJ0y8uwspKihAi/XhIgTrvBcUfJTMabme8YFQ/9j5ibqnWk1HleiTg4VCQiq61MUU7S3qyRGLmHPDOPOAUvqdJtY0a+UJGwrAJ3Sxzx2JuzmZjxLcjB4buq7tzDYGSfphHb8oYAenq6IlPAidq+s/QUFuCXsCdlMOFxPNKHhAuqjwSbP3SE4+5M13wOfvHOCmNNEfPlX4yyc3eogSPhWWvoVhYncTYKhtDc5DMKIFetV1FEWtc9MO2Ecrg5IEKyV/burtqB3axZn2kA+Zpjke63d7Dyx5KcPf+53O003d6vOpk6d/cBjyZeLjWyTo3as3XEEhm1IaIen1TQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NCsyovaDGC5PS7i4ezcUxXHb33WhIjTf2IzjSzcvd1Q=;
 b=wSXRtmfv93eAYHSgoXRGYSXJGQ3hGmNryF9UOC7gzsm7fRSU8ZEkGKDI5551sz3xIJ3FGHptSJdrUFkz8DFwcV3HmFVohzC8zEkCmuRr00+glKeznlywimBr6PoMK5Z+w3vjzFwJxxwQza819G8WoWKbxoysAP391Afygy3adwM=
To: Igor Druzhinin <igor.druzhinin@citrix.com>, Jan Beulich
	<jbeulich@suse.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <george.dunlap@citrix.com>,
	<julien@xen.org>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
 <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
 <5dfb0321-ca52-5464-8bbb-c29d329d24cf@citrix.com>
 <ea392b06-6277-ced8-0cbc-40967fc1ca61@citrix.com>
 <9e44dee6-a7c0-e139-4eda-a483b2ba16b3@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
Message-ID: <66508b62-ec4e-9097-062f-023e7e20cb42@citrix.com>
Date: Thu, 8 Jul 2021 02:26:41 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <9e44dee6-a7c0-e139-4eda-a483b2ba16b3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0086.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:76::26) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e7d1969e-a9b2-499e-fb5a-08d941af7586
X-MS-TrafficTypeDiagnostic: BYAPR03MB3989:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB398955093AC633673C73F1E6BA199@BYAPR03MB3989.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: WGVyCd1gZ95XundkDX8OsbEAhEdt/JJZH6RzM7daT5x75Und5HCQFqwlBH+efdwTki4V1mJwOcHRwYhv97s9t8AInk6XCHNGj9rJIxRDtcbfQVLEYhuWLuUsfqjn1XtxgVo6O0noEtvlEaMNz68BFVsHn7/NhVBeH2TZRen00Ytl692aqLQjRvy8ztklSWmb4j3ZEa0LFKFA7gZI6eydH/Unlli3yqtzRjafi5yxj6BjTJULLRpkws2scL8eM9nizInlMvHNAFG/YrSKc0wc/Pvpw6khEa+4r9mwTldKwyivO6CWG5QJWeZHCJN9XJrdu8+4230lwc67QacuJk+fy+LtaJ/VHGE4SE/rBNahL8CgkVcMDA14NhAP1s0oG7LEPNUKzChCX5mkYeAfxZInS77X2tu8Ht8qbPgxcGFIQWsbVSt7EEx8L4eiQcRIyAP2WMqXzn4FyX+AUpaj4rmmK8++z5J1NEXgQWom5z0XgeMGdEZC2n65WTD4PQ0dSaVit7mikfBw+1b8DKo4oUTi/ZKntx2SWwPZ37QnLpYCwzSi+CgPh/DQAbbaToLAi5mrUbNaMqzQymT1lXsp/xATdTmy9mIJehsjaiLMdeF4krqJGa+nnnzKAF0fWL/GhVcS40LXdYvMvq5V9jy/a/ep/mAPIEhilM5gvmNXfATCY2d6fkT5wngDMtAJOwz72Wv5ZKnagwyAdFNwevDbuZan3cmBRbr1Rksc/wsxvd7XUoE=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39860400002)(136003)(346002)(376002)(396003)(478600001)(8936002)(86362001)(5660300002)(16576012)(36756003)(110136005)(6666004)(53546011)(2906002)(316002)(31696002)(6486002)(83380400001)(66946007)(2616005)(4326008)(186003)(8676002)(66556008)(956004)(38100700002)(66476007)(31686004)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: e7d1969e-a9b2-499e-fb5a-08d941af7586
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 01:26:49.8457
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Vu7BoaQXZstu8Yv8jAZVs7hi1LuoOzmJ+plyj4NlpIQGt68GiNMfeDHolrOmVXPRy/DJblUQT9OM6mrbwdyDXbK2TorrfjVsrY8Yfew1GXU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3989
X-OriginatorOrg: citrix.com

T24gMDgvMDcvMjAyMSAwMjoxNCwgSWdvciBEcnV6aGluaW4gd3JvdGU6Cj4gT24gMDgvMDcvMjAy
MSAwMjoxMSwgQW5kcmV3IENvb3BlciB3cm90ZToKPj4gT24gMDgvMDcvMjAyMSAwMjowOCwgSWdv
ciBEcnV6aGluaW4gd3JvdGU6Cj4+PiBPbiAwNy8wNy8yMDIxIDEwOjE5LCBBbmRyZXcgQ29vcGVy
IHdyb3RlOgo+Pj4+IE9uIDA3LzA3LzIwMjEgMDg6NDYsIEphbiBCZXVsaWNoIHdyb3RlOgo+Pj4+
Pj4gLS0tIGEvdG9vbHMvaW5jbHVkZS94ZW5jdHJsLmgKPj4+Pj4+ICsrKyBiL3Rvb2xzL2luY2x1
ZGUveGVuY3RybC5oCj4+Pj4+PiBAQCAtMTM4NSw3ICsxMzg1LDcgQEAgaW50IHhjX2RvbWFpbl9p
b3BvcnRfcGVybWlzc2lvbih4Y19pbnRlcmZhY2UKPj4+Pj4+ICp4Y2gsCj4+Pj4+PiDCoMKgIMKg
IGludCB4Y19kb21haW5faXJxX3Blcm1pc3Npb24oeGNfaW50ZXJmYWNlICp4Y2gsCj4+Pj4+PiDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoCB1aW50MzJfdCBkb21pZCwKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50OF90IHBpcnEsCj4+Pj4+PiArwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMy
X3QgcGlycSwKPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ4X3QgYWxsb3dfYWNjZXNzKTsKPj4+Pj4gVGFrZSB0
aGUgb3Bwb3J0dW5pdHkgYW5kIGFsc28gY2hhbmdlICJhbGxvd19hY2Nlc3MiIHRvIGJvb2w/IE9y
IGlzCj4+Pj4+IHVzZSBvZiBib29sIHByb2hpYml0ZWQgaW4gZXh0ZXJuYWwgaW50ZXJmYWNlcz8K
Pj4+Pgo+Pj4+IFdlJ3ZlIGdvdCBib29sJ3MgaW4gdGhlIGludGVyZmFjZSBhbHJlYWR5Lgo+Pj4K
Pj4+IFdoZXJlIGV4YWN0bHk/IEkgY291bGRuJ3QgZmluZCBhIHNpbmdsZSAiYm9vbCIuCj4+Cj4+
ICQgZ2l0IGdyZXAgLXcgYm9vbCAtLSA6L3Rvb2xzL2luY2x1ZGUveGVuKi5oCj4+IC4uL3Rvb2xz
L2luY2x1ZGUveGVuY3RybC5oOjE4NDQ6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QKPj4gZG9taWQsIGJvb2wgcmVzdG9yZSwKPj4gLi4v
dG9vbHMvaW5jbHVkZS94ZW5jdHJsLmg6MTg0NjrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQKPj4gbnJfZmVhdHVyZXMsIGJvb2wg
cGFlLCBib29sIGl0c2MsCj4+IC4uL3Rvb2xzL2luY2x1ZGUveGVuY3RybC5oOjE4NDc6wqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbAo+PiBuZXN0
ZWRfdmlydCwgY29uc3Qgc3RydWN0IHhjX3hlbmRfY3B1aWQgKnhlbmQpOwo+PiAuLi90b29scy9p
bmNsdWRlL3hlbmN0cmwuaDoxOTU0OmludAo+PiB4Y19hbHRwMm1fZ2V0X2RvbWFpbl9zdGF0ZSh4
Y19pbnRlcmZhY2UgKmhhbmRsZSwgdWludDMyX3QgZG9tLCBib29sCj4+ICpzdGF0ZSk7Cj4+IC4u
L3Rvb2xzL2luY2x1ZGUveGVuY3RybC5oOjE5NTU6aW50Cj4+IHhjX2FsdHAybV9zZXRfZG9tYWlu
X3N0YXRlKHhjX2ludGVyZmFjZSAqaGFuZGxlLCB1aW50MzJfdCBkb20sIGJvb2wKPj4gc3RhdGUp
Owo+Pgo+PiBhbmQgbG9hZHMgbW9yZS4KPgo+IEFyZSB3ZSBvayB0byBoYXZlIGRpZmZlcmVudCB0
eXBlcyBpbiBBQkkgaW50ZXJmYWNlIGFuZCBpbiBsaWJ4Ywo+IGZ1bmN0aW9uIHByb3RvdHlwZSB0
aGVuPwoKWWVzLsKgIEFnYWluLCB3ZSd2ZSBnb3QgcGxlbnR5IG9mIGV4YW1wbGVzIGxpa2UgdGhp
cy4KCj4gQmVjYXVzZSBJIHdhcyByZWZlcnJpbmcgdG8gQUJJIHN0cnVjdHVyZXMuCgpUaGUgaHlw
ZXJjYWxsIHN0cnVjdHMgY2FuJ3QgY29udGFpbiBib29sLsKgIGJvb2wgaGFzIGltcGxlbWVudGF0
aW9uCmRlZmluZWQgd2lkdGggaW4gQywganVzdCBsaWtlIGVudW0sIGFuZCB0aGVyZSBpcyBubyBy
ZXF1aXJlbWVudCBmb3IKc2l6ZW9mKGJvb2wpIHRvIGJlIDEuCgpUaGUgcHJlLWV4aXN0aW5nIHVp
bnQ4X3QgaGVyZSBpcyBjb3JyZWN0LCBhbHRob3VnaCB0aGUgaHlwZXJjYWxsIGhhbmRsZXIKaWRl
YWxseSB3YW50cyBhIGZ1cnRoZXIgYWRqdXN0bWVudCB0byByZWplY3Qgbm9uLWJvb2xlYW4gdmFs
dWVzLsKgIFRoaXMKaHlwZXJjYWxsIGNsZWFybHkgcHJlZGF0ZXMgb3VyIG1vcmUgY2FyZWZ1bCBy
ZXZpZXcgcHJhY3RpY2VzLi4uCgp+QW5kcmV3Cg==


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:31:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:31:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152813.282293 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IsY-0008Si-T8; Thu, 08 Jul 2021 01:31:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152813.282293; Thu, 08 Jul 2021 01:31:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1IsY-0008Sb-Ok; Thu, 08 Jul 2021 01:31:02 +0000
Received: by outflank-mailman (input) for mailman id 152813;
 Thu, 08 Jul 2021 01:31:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=EFbg=MA=citrix.com=igor.druzhinin@srs-us1.protection.inumbo.net>)
 id 1m1IsX-0008SV-EZ
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 01:31:01 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 387dbcf3-fb8e-4bdf-b6ed-103f15cf5579;
 Thu, 08 Jul 2021 01:31:00 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 387dbcf3-fb8e-4bdf-b6ed-103f15cf5579
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625707860;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=PWb3UOCxEZjOQ0QNzRwuLU9Tt6S1u1y83ALAVn+4CVg=;
  b=dSctATJrbncQAcME9f+UYMiTrzgfwRg//DxzUA4X/jPI4nzJ2aidBa8d
   gIsVgCTrzspbjclg/T1MV9rHjtgHO4BExoX+JRsagWNbYiWjNXms4ftJb
   ys0hS22xTiR8RWZf0APQqaTU7dUxyVGmjQp+gdMg6givXWNF8GJkZXoyH
   8=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: d5HWfhS3+FDUdLulU8wMjQ9G8h9LpopIiZ4ogCxJhnySlpCO1nOkkgAP6VmCyPuaCZDZ+ONrgL
 zmhlL8zYFkLYbJp0IWHrE5Rdp92O043nI0UCW7kLaiUptZxHksos/SWUAMsvKcOpHbS9T3Vl6T
 cW+RxXmE4P1TqOa6m+0TBIO3xsg41GEcLpk9AaniCK9YVVhh3kLb0swIoieAY+4l8DW5dgA2Hp
 mTIzgf+qw86yD7DZ7Ztwiz6J/kxtWaK3w4LL7sseKUU1p2e0wpwYv9WGjWffreqcxAv7wnvxzc
 u5I=
X-SBRS: 5.1
X-MesageID: 47855046
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:rTunlazK53HUsT9BjkopKrPxwOskLtp133Aq2lEZdPULSKOlfp
 GV8MjziyWYtN9wYhAdcdDpAtjlfZquz+8I3WB3B8bcYOCGghrUEGgG1+XfKlLbalXDH4JmpM
 Fdmu1FeafN5DtB/LbHCWuDYq8dKbC8mcjC74eurAYecegpUdAG0+4QMHfrLqQcfnglOXNWLu
 v42iMKnUvaRZxBBf7LeEXtEtKz6+HjpdbDW1orFhQn4A6BgXeB76P7KQGR2lM7XylUybkv3G
 DZm0ihj5/T/c2T+1v57Sv+/p5WkNzuxp9qA9GNsNEcLnHJhhyzbIpsdrWetHQeof2p6nwtjN
 7Qyi1QcPhb2jf0RCWYsBHt0w7v3HIF8Hn502KVhnPlvIjQWC86I9Apv/MbTjLpr24b+P1s2q
 NC2GyU87BNCwnboSj779/UEzl3i0uPp2Y4m+J7tQ0ebWInUs4VkWUjxjIQLH9ZdxiKr7zPUd
 MeTf003cwmM29zNBvizy9SKLXGZAVBIv+EKnJy8fB9nQImxUyQYiMjtboid0w7heYAoq9/lq
 z525RT5cRzp/AtHNVA7cc6MIGK4z/2MF/x2Fz7GyWvKEhAAQOUl6LK
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47855046"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=liTwTlWM3+6s6liiTq1lBxytjgdWupmxySGL9HZotL8X9BaLyJ7FcnVxALWJb6avyeStR+WwA3jKK3JIrKAbTu7619T/cMdNgU1QGIhFmBKghFZmwtI3wbfnL925PrVCB/KCNMYRYvrl3b1Yc7BH92Rn08uq4Msn2Vt19g814L8hXjGNgTO2jn9IYb3jb8Fm4Vsqrsejww4uFe7Hho2W7iRjSOX8c6frTsMIL6gW334q/D9krHz/8af5747M77CIHM/lOdsRubdiL6GdVap80+QEHro26prX8wbIxVRQg5IySR4CsLA9SBkZiSmE/HKF6oDviDyDxS5A/7+IjeBBOg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=awJ/myImDWdcz2ZkP3fKf7BwQDQfG4vKXrF1quNLI1A=;
 b=Ajy8Kb5pCgn/42v7+isiKt58UlZL8zIOfTRph1FEy6szRQA7ETRy5tvgFNmx4VeyOAYxwpjxx3EhvJPc5aH5HSaHPKFe8oBXM3KzW59KDDnnDtyL/s4SIll5wJgRvPPqIvDePaOZHaD4Z02wV0ApKojrSokvqAy4j2XO/3hPpktokr39D/IB04k6qu4ByhzOuqrgGiEtGB/Ye44ej5y/KfkLkNUtFao2Ef56LmSt0fgEP1X4H3H2gVRkf9+1PYnBaMyfwzDKRZF8EophSpnLWJjJnKlPXtHaS1X0bqQB9UUA9X6sXFQTiVEWFunNK+KDYt4hnLwtTQF20wS9F+9anA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=awJ/myImDWdcz2ZkP3fKf7BwQDQfG4vKXrF1quNLI1A=;
 b=Y3Yr1d767YF7rxUIT2cdgiSv3rTJ/Pj1TkYW7XuNE36LYG9/DD/ofpVf/vJBjyEDCj5LEcmx0Q01S4kugJm7Mk3SITcjWa5JSFmjp/ZNvdZ4puUK85Q1L6M8h90t78BMz34IzMb4lizL8LCTZUSpWD30j+i/k5xytlPTo9aIXy8=
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich <jbeulich@suse.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <george.dunlap@citrix.com>,
	<julien@xen.org>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <56e4d04a-dc79-ecc2-5ed0-0afef09077e7@suse.com>
 <8567bc8e-27a5-2f56-2765-e9b249764aff@citrix.com>
 <5dfb0321-ca52-5464-8bbb-c29d329d24cf@citrix.com>
 <ea392b06-6277-ced8-0cbc-40967fc1ca61@citrix.com>
 <9e44dee6-a7c0-e139-4eda-a483b2ba16b3@citrix.com>
 <66508b62-ec4e-9097-062f-023e7e20cb42@citrix.com>
From: Igor Druzhinin <igor.druzhinin@citrix.com>
Message-ID: <781b2b33-f2a7-3163-55dd-0947726f8f89@citrix.com>
Date: Thu, 8 Jul 2021 02:30:50 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.8.0
In-Reply-To: <66508b62-ec4e-9097-062f-023e7e20cb42@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: LNXP123CA0012.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:d2::24) To BN3PR03MB2401.namprd03.prod.outlook.com
 (2a01:111:e400:7bbc::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d52fbb99-00cf-43a4-4305-08d941b00881
X-MS-TrafficTypeDiagnostic: BN9PR03MB5977:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BN9PR03MB59778452DC75400879A63287E4199@BN9PR03MB5977.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: +Hpe/+NSuE6qqf5pH59JIQ+oXC+jS+CNohXaP2x2dQC+vqwaIP8jOGq8R9zs1Ig1ExtWeCyMz5bpwIJ3JyQHsszC7GR95r4NogZceVyLMdfOYIcJrp1RQoa7oF0EYW6K+sgL9vIZLcw21CXoYOrfxNZ+gvy9xuyXNoVB27oFd6UduDtFZFpw92jMJgM9IAQFRr0ovfEjHg81EiQwDV0Wc2jOEFdl+V19Xr4T/juwSLj9cFd5C/ansC6lNrmzz56PKJ75sEhXCR8ljOQgsPF2x5+BEMIigTlTeu/tzTVjGuN5HfZYrqxrnQWlQExq/j+M2Ko3If3PNdaRNZjUrGS8dwAFQX+x9nngDyRkmAWEd6jf6KBx7IgCYdTlKXh3IrEBCi6MGUERVaPJM7P1iaAT9SFjRUto1o5LyCs2HDzIHJELhTxojbiSDXa4rHxdW1e5MC6ZjHsjRSuu/9sR+NgxAQ0mB54x7xlasEs9KJjKE/oRhg14duo98Wj2j60/xt28nyg9nUm1uBMV0CjSX05mhhZG+TBQAhmD0JCWpAz1qM/NOWW9efs3MdTfXMSM4RzMdKLH0076hRten/npWOCUAl1O+8vRwDamWZlW5f0sjfs0esrElcz1p8yxOsY39Eq6YWA0Ko12NieXAOJGcCQjVz6d7qd72ol2nr1HL6vxOBFMx+h22+VBy1oUc4oLyfP3BDGevXd/tkSnbaZu6QrTF/KuWX5hphfCJy5anGnZAV8=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN3PR03MB2401.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(136003)(396003)(39860400002)(366004)(5660300002)(956004)(110136005)(2616005)(6666004)(83380400001)(4326008)(86362001)(66556008)(8676002)(6486002)(16576012)(316002)(478600001)(26005)(53546011)(2906002)(44832011)(31696002)(38100700002)(8936002)(66476007)(31686004)(36756003)(186003)(66946007)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: d52fbb99-00cf-43a4-4305-08d941b00881
X-MS-Exchange-CrossTenant-AuthSource: BN3PR03MB2401.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 01:30:56.5373
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: LtVsivCjRhI6WXOLek3doO7XU7mRf0Dg56ufcpzqfmg4Mvf5BdPDJ3S/ntSX9CY9/9ZmelsvlowRlCKqibI8FJgtiXe+ZJ/Lguwt9KhPCRA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR03MB5977
X-OriginatorOrg: citrix.com

On 08/07/2021 02:26, Andrew Cooper wrote:
> On 08/07/2021 02:14, Igor Druzhinin wrote:
>> On 08/07/2021 02:11, Andrew Cooper wrote:
>>> On 08/07/2021 02:08, Igor Druzhinin wrote:
>>>> On 07/07/2021 10:19, Andrew Cooper wrote:
>>>>> On 07/07/2021 08:46, Jan Beulich wrote:
>>>>>>> --- a/tools/include/xenctrl.h
>>>>>>> +++ b/tools/include/xenctrl.h
>>>>>>> @@ -1385,7 +1385,7 @@ int xc_domain_ioport_permission(xc_interface
>>>>>>> *xch,
>>>>>>>       int xc_domain_irq_permission(xc_interface *xch,
>>>>>>>                                  uint32_t domid,
>>>>>>> -                             uint8_t pirq,
>>>>>>> +                             uint32_t pirq,
>>>>>>>                                  uint8_t allow_access);
>>>>>> Take the opportunity and also change "allow_access" to bool? Or is
>>>>>> use of bool prohibited in external interfaces?
>>>>>
>>>>> We've got bool's in the interface already.
>>>>
>>>> Where exactly? I couldn't find a single "bool".
>>>
>>> $ git grep -w bool -- :/tools/include/xen*.h
>>> ../tools/include/xenctrl.h:1844:                          uint32_t
>>> domid, bool restore,
>>> ../tools/include/xenctrl.h:1846:                          unsigned int
>>> nr_features, bool pae, bool itsc,
>>> ../tools/include/xenctrl.h:1847:                          bool
>>> nested_virt, const struct xc_xend_cpuid *xend);
>>> ../tools/include/xenctrl.h:1954:int
>>> xc_altp2m_get_domain_state(xc_interface *handle, uint32_t dom, bool
>>> *state);
>>> ../tools/include/xenctrl.h:1955:int
>>> xc_altp2m_set_domain_state(xc_interface *handle, uint32_t dom, bool
>>> state);
>>>
>>> and loads more.
>>
>> Are we ok to have different types in ABI interface and in libxc
>> function prototype then?
> 
> Yes.  Again, we've got plenty of examples like this.
> 
>> Because I was referring to ABI structures.
> 
> The hypercall structs can't contain bool.  bool has implementation
> defined width in C, just like enum, and there is no requirement for
> sizeof(bool) to be 1.
> 
> The pre-existing uint8_t here is correct, although the hypercall handler
> ideally wants a further adjustment to reject non-boolean values.  This
> hypercall clearly predates our more careful review practices...

Sure. Get what you want now. I'm just not a fan of type conversions
for the sake of it - prefer a common type to be used pervasively.
But, of course, happy to follow Xen practises.

Igor


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 01:37:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 01:37:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152819.282304 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Iyt-0000kG-J0; Thu, 08 Jul 2021 01:37:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152819.282304; Thu, 08 Jul 2021 01:37:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Iyt-0000k9-Ei; Thu, 08 Jul 2021 01:37:35 +0000
Received: by outflank-mailman (input) for mailman id 152819;
 Thu, 08 Jul 2021 01:37:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Iys-0000jz-84; Thu, 08 Jul 2021 01:37:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Iyr-0001wc-Vt; Thu, 08 Jul 2021 01:37:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Iyr-0007c6-Hc; Thu, 08 Jul 2021 01:37:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Iyr-0006BM-Gn; Thu, 08 Jul 2021 01:37:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NMVTG0JHQ6/5qM9wcUiSjAFqjVr25XzQn3rmeRg1vAc=; b=nxZBesBb8zh+TImXJPz/VJbDSx
	xyHxoOo9pxyk3AEt67r67sML50lv9BbqqSRao6d86Sb0/tv5k8MjqYoirFz2Gv8QNT26KIxjoAQSc
	Uicle2/QvxnqepnSvzI3uUqnM2fFkNP+9fbajLc8Z0RJuq0iQgEihU/1hRD/LrSaFy/8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163402-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163402: regressions - trouble: broken/fail/pass
X-Osstest-Failures:
    linux-5.4:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:<job status>:broken:regression
    linux-5.4:test-amd64-amd64-dom0pvh-xl-amd:<job status>:broken:regression
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:<job status>:broken:regression
    linux-5.4:test-amd64-i386-libvirt-xsm:<job status>:broken:regression
    linux-5.4:test-amd64-amd64-dom0pvh-xl-amd:host-install(5):broken:regression
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:host-install(5):broken:regression
    linux-5.4:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:host-install(5):broken:regression
    linux-5.4:test-amd64-i386-libvirt-xsm:host-install(5):broken:regression
    linux-5.4:test-armhf-armhf-xl-vhd:guest-start/debian.repeat:fail:regression
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
X-Osstest-Versions-That:
    linux=82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 01:37:33 +0000

flight 163402 linux-5.4 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163402/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm    <job status>             broken
 test-amd64-amd64-dom0pvh-xl-amd    <job status>                 broken
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm    <job status>       broken
 test-amd64-i386-libvirt-xsm     <job status>                 broken
 test-amd64-amd64-dom0pvh-xl-amd  5 host-install(5)     broken REGR. vs. 163198
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 5 host-install(5) broken REGR. vs. 163198
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 5 host-install(5) broken REGR. vs. 163198
 test-amd64-i386-libvirt-xsm   5 host-install(5)        broken REGR. vs. 163198
 test-armhf-armhf-xl-vhd     17 guest-start/debian.repeat fail REGR. vs. 163198

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

version targeted for testing:
 linux                8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
baseline version:
 linux                82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9

Last test of basis   163198  2021-06-30 13:43:03 Z    7 days
Testing same since   163402  2021-07-07 12:42:00 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alex Deucher <alexander.deucher@amd.com>
  Bartosz Golaszewski <bgolaszewski@baylibre.com>
  Christian König <christian.koenig@amd.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guenter Roeck <linux@roeck-us.net>
  Hulk Robot <hulkrobot@huawei.com>
  Jason Gunthorpe <jgg@nvidia.com>
  Johannes Berg <johannes.berg@intel.com>
  Leon Romanovsky <leonro@nvidia.com>
  Linux Kernel Functional Testing <lkft@linaro.org>
  ManYi Li <limanyi@uniontech.com>
  Mark Bloch <mbloch@nvidia.com>
  Martin K. Petersen <martin.petersen@oracle.com>
  Sasha Levin <sashal@kernel.org>
  Shuah Khan <skhan@linuxfoundation.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Sudip Mukherjee <sudipm.mukherjee@gmail.com>
  YueHaibing <yuehaibing@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            broken  
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  broken  
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  broken  
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              broken  
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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

broken-job test-amd64-i386-xl-qemuu-debianhvm-i386-xsm broken
broken-job test-amd64-amd64-dom0pvh-xl-amd broken
broken-job test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm broken
broken-job test-amd64-i386-libvirt-xsm broken
broken-step test-amd64-amd64-dom0pvh-xl-amd host-install(5)
broken-step test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm host-install(5)
broken-step test-amd64-i386-xl-qemuu-debianhvm-i386-xsm host-install(5)
broken-step test-amd64-i386-libvirt-xsm host-install(5)

Not pushing.

------------------------------------------------------------
commit 8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
Author: Sasha Levin <sashal@kernel.org>
Date:   Wed Jul 7 08:29:57 2021 -0400

    Linux 5.4.130
    
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Hulk Robot <hulkrobot@huawei.com>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 5e8519c4083bfd937f72c729659c714e7b8d5b29
Author: Mark Bloch <mbloch@nvidia.com>
Date:   Mon Jun 7 11:03:12 2021 +0300

    RDMA/mlx5: Block FDB rules when not in switchdev mode
    
    commit edc0b0bccc9c80d9a44d3002dcca94984b25e7cf upstream.
    
    Allow creating FDB steering rules only when in switchdev mode.
    
    The only software model where a userspace application can manipulate
    FDB entries is when it manages the eswitch. This is only possible in
    switchdev mode where we expose a single RDMA device with representors
    for all the vports that are connected to the eswitch.
    
    Fixes: 52438be44112 ("RDMA/mlx5: Allow inserting a steering rule to the FDB")
    Link: https://lore.kernel.org/r/e928ae7c58d07f104716a2a8d730963d1bd01204.1623052923.git.leonro@nvidia.com
    Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
    Signed-off-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    [sudip: manually backport to old file]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c5fb49e12f2c3c7ea04a343fdba4af265e91b61e
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Jun 25 10:37:34 2021 +0200

    gpio: AMD8111 and TQMX86 require HAS_IOPORT_MAP
    
    [ Upstream commit c6414e1a2bd26b0071e2b9d6034621f705dfd4c0 ]
    
    Both of these drivers use ioport_map(), so they need to
    depend on HAS_IOPORT_MAP. Otherwise, they cannot be built
    even with COMPILE_TEST on architectures without an ioport
    implementation, such as ARCH=um.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit cf5eb82097234b5c77107a58eccf0509c925fa8c
Author: Christian König <christian.koenig@amd.com>
Date:   Fri Jun 11 14:34:50 2021 +0200

    drm/nouveau: fix dma_address check for CPU/GPU sync
    
    [ Upstream commit d330099115597bbc238d6758a4930e72b49ea9ba ]
    
    AGP for example doesn't have a dma_address array.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210614110517.1624-1-christian.koenig@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 3edfd34f1338a6c5e105499287a93dec2a80284f
Author: ManYi Li <limanyi@uniontech.com>
Date:   Fri Jun 11 17:44:02 2021 +0800

    scsi: sr: Return appropriate error code when disk is ejected
    
    [ Upstream commit 7dd753ca59d6c8cc09aa1ed24f7657524803c7f3 ]
    
    Handle a reported media event code of 3. This indicates that the media has
    been removed from the drive and user intervention is required to proceed.
    Return DISK_EVENT_EJECT_REQUEST in that case.
    
    Link: https://lore.kernel.org/r/20210611094402.23884-1-limanyi@uniontech.com
    Signed-off-by: ManYi Li <limanyi@uniontech.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a6c85a8433e0606a8ad63a44c1aa32963b61a1a2
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Fri Nov 15 21:08:30 2019 +0800

    x86/efi: remove unused variables
    
    [ Upstream commit 6f090192f8225f52ba95d08785989688cb768cca ]
    
    commit ad723674d675 ("x86/efi: move common keyring handler functions
    to new file") leave this unused.
    
    Fixes: ad723674d675 ("x86/efi: move common keyring handler functions to new file")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Link: https://lore.kernel.org/r/20191115130830.13320-1-yuehaibing@huawei.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 02:06:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 02:06:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152827.282318 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1JQc-0004Hu-Vu; Thu, 08 Jul 2021 02:06:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152827.282318; Thu, 08 Jul 2021 02:06:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1JQc-0004Hn-S0; Thu, 08 Jul 2021 02:06:14 +0000
Received: by outflank-mailman (input) for mailman id 152827;
 Thu, 08 Jul 2021 02:06:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=EFbg=MA=citrix.com=igor.druzhinin@srs-us1.protection.inumbo.net>)
 id 1m1JQc-0004Hh-74
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 02:06:14 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 77124ee7-4800-43a9-a21c-5cda207e8ce1;
 Thu, 08 Jul 2021 02:06:13 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 77124ee7-4800-43a9-a21c-5cda207e8ce1
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625709972;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=lmP+s7hj4CGXQYdv4A66k2V6bBjlpcIds+s1MeLU+h4=;
  b=dzD/RaKfK3zGdyKjo5iqA8RJEU/mRgzRhJ1dcsHopBDjCT9JxBPIpHTI
   CAmQ8idKKxf9H+xbwpX5hCB6GY//7OefzHl/ow/qsoutFv+m31Or5FqDc
   XY5blMy/nKerrcjn/r0Bv6aGYLA2dhYnenj5iVRRm85wULnop3mDgRjEU
   Q=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: N9pNVU/J6k6tWZkopQdavz1+mSioRJyQE5qCeio68Fdf/axsevV2Tbx6nN3sEEYd87sP+5w+w+
 qQ1GJ8feBn2WYIu0eC+ssba1YnvZiqXiDx0Nx6iZt+g09xlUjvVrvAIIIg4X3tIg3a6LQ5Dody
 TL2mX3m4ns4+e+dukTztCUc+nGGY4EzQpXsuug2PMtW4n7fobsi1BJYSMBEj7VcOX1rBoDh7F3
 gKsZSDNB3ykZygHeVZxTHwXRJe2iUJgW7762MvlnwG82gcAvDyG4rRCuVGMwTewVI0PecJIsMG
 olQ=
X-SBRS: 5.1
X-MesageID: 47856587
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:y189FKione9kr20LZYSxuj59HXBQXzR13DAbv31ZSRFFG/FwyP
 rBoB1L73DJYWgqNE3I+erhBEGBKUmskqKdkrNhQotKOzOWxldATbsSkbcKpgeAJ8SQzJ8n6U
 4NSdkGNDS0NykGsS+Y2njKLz9D+qj+zEnAv463pB0BPGIaCdAU0+46MHf8LqQffng3OXNTLu
 v42iMonUvFRZ1aVLXAOpFTNNKz1uEj2aiWLiIuNloC0k2jnDmo4Ln1H1yx2QofaSpGxfMH/X
 LemwL0y62/u7XjoyWsllP73tBzop/M29FDDMuDhow8LSjtsB+hYMBEV6eZtD44jemz4BIBkc
 XKoT0nI8NvgkmhMF2dkF/I4U3NwTwu43jtxRuzmn34u/H0Qzo8Fo5omZ9ZWgGx0TtjgPhMlI
 Zwm06JvZteCh3N2A7n4cLTah1snk2o5VI/jO8oiWBFW4d2Us4TkWUmxjIQLH48JlO81Gh+e9
 MeSv00pcwmMW9yVkqp+1WGm7eXLy0O9n7seDlxhiSXuwIm1kyRgXFonPD2Mx87hdsAoqJ/lp
 P525JT5fpzp/8tHNZA7dg6ML2K40z2MF/x2TGpUBja/J9uAQOEl3ew2sRv2N2X
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47856587"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LaVSX26S6AiB52xOD4iC8oBjlRmkE/6yVkq7pq0e4XGaNLI8dBig1fJr5kFwAGY7H30TLAtMnN+jJ8DDCZj+e2fLyz0XcsQgz6IOdii3INCT9XT+WkrnYvzRNCCSIcgwwOYsg+K5RPQf1ufZ0F1w3Hq+2RxUk8b0NiG2YV8YGp3Sl2gX3xF/TS55bImVKpj84SEUn8NN8OGREuq7FWg5vJwkODdYSloX5zaquN8Ffn3Zqk1dgumUM4YawqblnzV0T1kXfxU+ugCvJl6J0JmeDyX9BNIiFJzZ/3rRPv4th/IrKhzvpxH1QzaceqddPYhsLH/HNcr2Eu+jphY1pz0uxA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wOrYbItSG9VbjUWIXGRVeYj+90dusnZu5+vaJUfv72M=;
 b=HPAStzO9OW4V4RWtYnLY8MHXl6JZqMqXv6cH+J3lcjwPHYd/c6A/4C9FebdRKnItxyP6Od8AYiQpTQ3Kf9ZoNwwZ3FQYjLDJfqfZHK0eRZcOXZ6UqN318t3e1dxB7qYhsfTlG2/pC0et896FDXiBLG6tnJWeRQUIQVxf+PlHQ6EFCwYzTu220RVmd3CNjF+qlshWIox+1pUyes31m86MNy+CUJSBzgkyU9LxPffSJZ9WUKK4gYV8SGMsk0Cn1W8FdBt+bryrKP8OFdhQ7Mptjh7J4RTGJAKWsF/S/6AH02MQ3OVwAF6xpwO0IiONg651lpnPGkjfCRigsF+3GIQPGA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wOrYbItSG9VbjUWIXGRVeYj+90dusnZu5+vaJUfv72M=;
 b=mqeTNi0fJ3ZR0TziNjK9C4Jc00256LHP41oi1dOayrFnG6bgHvdYZlKQONDMvFosRwu9EGFfXuO9axEbjlJ0WYlQ39+L3TjsYFSyCFBeY/ICh/kG7jGG8M2wB1J9CnRKThoVCyAimB9BzkS7MHVLxniTSalnh2yIOJOkTY0PGUg=
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
CC: <iwj@xenproject.org>, <wl@xen.org>, <andrew.cooper3@citrix.com>,
	<george.dunlap@citrix.com>, <sstabellini@kernel.org>, <jgross@suse.com>,
	<christian.lindig@citrix.com>, <dave@recoil.org>,
	<xen-devel@lists.xenproject.org>
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
 <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
 <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
 <e2def3e5-8e00-8b52-2d0f-5231963607ee@suse.com>
 <54b5ff4b-09ae-429b-4468-c1b4691079ed@xen.org>
From: Igor Druzhinin <igor.druzhinin@citrix.com>
Message-ID: <3aa3fa32-f17b-507c-aafa-66ec3d41d29c@citrix.com>
Date: Thu, 8 Jul 2021 03:06:00 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.8.0
In-Reply-To: <54b5ff4b-09ae-429b-4468-c1b4691079ed@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: LO2P265CA0283.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a1::31) To BN3PR03MB2401.namprd03.prod.outlook.com
 (2a01:111:e400:7bbc::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ef2e7b45-2cda-4e29-7503-08d941b4f25a
X-MS-TrafficTypeDiagnostic: BN9PR03MB6060:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BN9PR03MB6060DD96F743FF4B472C67D8E4199@BN9PR03MB6060.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: aZkI5ioJnoY1j/eGfVKb4yqtdrK8BVIMbJEyXl1OHzalM6pDXb1FG9cyfH8X3WaJU/xUCfC41hgPWGm1ulfzyCWXcLTw1DP+BuftYkhYTpgo6a7dgMEml0/hyt8EyVu+9hWrR8uag8R/c6FuFOvvfF5pM2kTI//q/1+SXcnwWjARKsZD0jX6TgU2Y/8ueH+UfFpja4g12Lt45SXgpmbmx3gGOCsFFHES8N3gaw8XcRAYqN4OSka9PwBiYlWOiiSsF4MowDYgtniBAHD7vxLQtijugtbrEZhxgkUi2wYsaRbGNRmwiUUcl/gDAvv4XpsmoINsiz0fQNfDTCJPwoz6/YzpSRv3k2wjM9vMyWZ2wcGKBgX80gqxLBT6n/Wnkzwrg+0mAJXTuO11YgltPh/28RkwnZ2LAyPPIYqAi9Cv1UnL1uQntlXALOZHSX1ex79HkH+rgL/T8FanLDQk/zfuMTM8xqUIyasAcYjB2Ue5NR+M5oSnw1hgp3wrsDXboAqR2JH//mVFULK94GVh/NQIzY5fkzS85hC4gsPb04w26s7xlnXFeCmp97qe3bpmJ7AUie6jDzfqNfKGEXJzVdKDilcW7Bh4M6u9TKBhw9lxr0tKT1SeRIFj88NlhV7pmmoLjp8ghJKdeg0chYeo/oiOvqGf/xG0t8pxty9jO0+GDRfyMYTjKMuhQ52nkfnnZCCIfYQCOXL+/K/TM1FBuoL/C7LNFENeMB1dxp8b5Zy82y8c6JBWr06VCHDNSk45v0Jr
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN3PR03MB2401.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(136003)(366004)(346002)(39860400002)(376002)(66946007)(66476007)(8936002)(2906002)(66556008)(316002)(53546011)(83380400001)(16576012)(6666004)(110136005)(36756003)(38100700002)(4326008)(5660300002)(31696002)(2616005)(186003)(31686004)(478600001)(6486002)(44832011)(86362001)(26005)(956004)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: ef2e7b45-2cda-4e29-7503-08d941b4f25a
X-MS-Exchange-CrossTenant-AuthSource: BN3PR03MB2401.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 02:06:06.7528
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: bzc0Ub4G3dLnfxdXA1hQ+d0zOQJUZcyzz2Fgq1LaoK0abZ1fZw5BZAMuD1qnppWkqFVXSuTHDaiKYT43QCNUKrMS/9o+MjXSMHNjlMoPacQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR03MB6060
X-OriginatorOrg: citrix.com

On 07/07/2021 14:21, Julien Grall wrote:
> On 07/07/2021 14:14, Jan Beulich wrote:
>> On 07.07.2021 14:59, Julien Grall wrote:
>>> On 07/07/2021 13:54, Jan Beulich wrote:
>>>> On 07.07.2021 14:51, Julien Grall wrote:
>>>>> On 07/07/2021 02:02, Igor Druzhinin wrote:
>>>>>> Current unit8_t for pirq argument in this interface is too restrictive
>>>>>> causing failures on modern hardware with lots of GSIs. That extends down to
>>>>>> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
>>>>>> as well. Internal Xen structures appear to be fine. Existing users of
>>>>>> the interface in tree (libxl, ocaml and python bindings) are already using
>>>>>> int for pirq representation that should be wide enough.
>>>>>
>>>>> By "int", I am assuming you imply "signed int", is that correct?

Yes, just "int" in the meaning "signed int" - I can clarify that in the description.

>>>>> If so, should the function xc_domain_irq_permission() interface take an
>>>>> int in parameter and check it is not negative?
>>>>
>>>> Please let's not make things worse than they are, the more that
>>>
>>> Well, what I am trying to prevent is surprise where the caller
>>> mistakenly pass a negative value that will be interpreted as a positive
>>> value...
>>
>> This happens all the time when converting from signed to unsigned
>> perhaps just internally.
> 
> I am not sure what's your point... Yes there are place in Xen that switch between signed and unsigned. We likely have some (latent) problem because of that...

Callers of libxc interface shouldn't have been using signed int at all.
They just happen to do it at least in-tree - that's what I found and mentioned
in the description. At the same time "int" type is for now wide enough so there
is no immediate rush to fix them up.

That gets a little bit tricky with bindings - they themselves expose pirq
as int. So a negative value could be passed by the caller and, given other
similar interace functions like xc_physdev_map_pirq() are using "int pirq"
to signal an error as negative value, that could be misinterpreted by lower
levels.

We can add extra checks in bindings to avoid passing all negative values to
libxc level. Would this be good enough?

>>> Such issues are beyong annoying to debug...
>>
>> No worse than any other out-of-bounds value, I would say.
>>
>>>   > ./CODING_STYLE is unambiguous in cases like this one.
>>>
>>> Hmmm... The coding style mention the fixed size but nothing about the
>>> signedness of the type...
>>
>> Oh, sorry, yes. The adjustment for this even pre-dates the two
>> patches to ./CODING_STYLE that I've on record as pending for
>> nearly two years.
>>
>>> The alternative suggestion is to keep a unsigned type but check the bit
>>> 31 is not set.
>>
>> Why? Why not bit 30 or bit 27? There's nothing special about
>> bit 31 in an unsigned number.
> 
> Bit 31 is the signed bit for signed number. The check would make sure that:
>   1) The value will fit other hypercall (the PIRQ is described as int in a few of the structure)
>   2) Catch potentially caller that would use the number that could potentially be interpreted as negative by other part of the hypervisor.
> 
> That said, I can live with the implicit signed -> unsigned convertion, however the commit message should at least be clarified because it is misleading.

Could you specify which statement exactly is misleading (or needs clariying)
in the commit message?

Igor


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 02:28:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 02:28:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152837.282335 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1JmP-0006fC-Vi; Thu, 08 Jul 2021 02:28:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152837.282335; Thu, 08 Jul 2021 02:28:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1JmP-0006f5-Qd; Thu, 08 Jul 2021 02:28:45 +0000
Received: by outflank-mailman (input) for mailman id 152837;
 Thu, 08 Jul 2021 02:28:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1JmO-0006ev-BK; Thu, 08 Jul 2021 02:28:44 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1JmO-0003Ez-0s; Thu, 08 Jul 2021 02:28:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1JmN-0001Uv-OH; Thu, 08 Jul 2021 02:28:43 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1JmN-0005Pg-Ni; Thu, 08 Jul 2021 02:28:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=J5Jy6Odx+jEpRNaEmr7N0kiLUA9Fpw664P0DljtFWak=; b=wp2eY0HSLuewozrUhYXmXkg5R5
	znlW5I2aZIrbUd6V5+iLHLqF2Vk7/ilnGzLNnnXwigQ0pJ0EN26zzTRYTQTyXaqd1UFNnsa7BB3Eg
	VAOpWsSJHPxWb3cbFkqdsiLCfd0zoho2EtbGC5cMC4m64BuiFgKhlJv4EukAtm97Ogeg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163422-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163422: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=484910bf41fec2c80d79ed9c5c33831bee7318f0
X-Osstest-Versions-That:
    xen=e362d3276d40e4f370c92eaa6c0e84e34badb92b
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 02:28:43 +0000

flight 163422 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163422/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  484910bf41fec2c80d79ed9c5c33831bee7318f0
baseline version:
 xen                  e362d3276d40e4f370c92eaa6c0e84e34badb92b

Last test of basis   163408  2021-07-07 15:00:25 Z    0 days
Testing same since   163415  2021-07-07 19:00:25 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Jan Beulich <jbeulich@suse.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   e362d3276d..484910bf41  484910bf41fec2c80d79ed9c5c33831bee7318f0 -> smoke


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 04:10:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 04:10:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152832.282360 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1LMv-00087Y-O9; Thu, 08 Jul 2021 04:10:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152832.282360; Thu, 08 Jul 2021 04:10:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1LMv-000876-JF; Thu, 08 Jul 2021 04:10:33 +0000
Received: by outflank-mailman (input) for mailman id 152832;
 Thu, 08 Jul 2021 02:09:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=47oT=MA=gmail.com=thesven73@srs-us1.protection.inumbo.net>)
 id 1m1JTN-0004ve-V9
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 02:09:06 +0000
Received: from mail-wm1-x330.google.com (unknown [2a00:1450:4864:20::330])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 794cb2af-2a61-4703-8ebc-2e895dffc133;
 Thu, 08 Jul 2021 02:09:05 +0000 (UTC)
Received: by mail-wm1-x330.google.com with SMTP id
 y21-20020a7bc1950000b02902161fccabf1so2401447wmi.2
 for <xen-devel@lists.xenproject.org>; Wed, 07 Jul 2021 19:09:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 794cb2af-2a61-4703-8ebc-2e895dffc133
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=3PsL89oWHD3lPAqXaooZwbzxbg1c8VW9/mevLYmxoEY=;
        b=Io7pdvzLgLAcWTLuF5ChPlqPXk8RD3AjkbMakmdmrW+tJF8WmpTLIy+6Q6+3CkaEMB
         DiGtf8xMIi/Js/Dp28RJSTDsd6fivWwEshHU0ncZmqrlNcSixmrFJIMiY5aH0CNk37lu
         ZxaGIjIRv4gnUqRRsRV9LF3hBCpGMTCjFBPurxMRm/oJnUVBQLyBO98Tze3h39uGWPjq
         L1hynZ4nw5dufGsacwH52FPdsq9ucSHiu2W0uD2PM6zfNlldOQXdtSmYU4w64AhwrfAV
         AGk22auShLhCRWC8I72blncKoOlQeoTMsnm/VTRo3w2RzqnlGs4u/t7Kteji5q2GImlm
         Xejg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=3PsL89oWHD3lPAqXaooZwbzxbg1c8VW9/mevLYmxoEY=;
        b=Czq2/l9tsOyz9ummamK4gMWxRkL1w7HFtYQ/fS1Zsd4u+Ewz18YXk7jAqhh5DxnyUC
         dx3ptmf3A4IlSxwVeSj2iP3j1Gkm+yobi7sp2mIbVOH9/fh2jm4dLPnL2Ksv2dWPuyh3
         zTtKug6MVPlcRUYYKcdwGIpNzClK7vbGxP8A/D3+vISsIVCMct8f7kqXvnRd1zci7Euj
         q0etSbMLPzheV5M1uacclIFsKSQZSTD/cPfY09hh9rO6iBPL2apl9PjfnvWEV/DmOLBu
         5WP7ggL0+u7+F65qnqIS7i7t9PDNlToiwLW+3Mw4skxyt2RO5K12jHZlqLX38HlMgwwT
         xA5A==
X-Gm-Message-State: AOAM530RYRpQeeRgXglIGNuQ1dVWQpah9s7tVToEpEYjDdKJxre/IyZU
	nP+/Jr3v4n/WPzy4xMGddMC735/fat1LmzhEoVY=
X-Google-Smtp-Source: ABdhPJx2ABZfFCczzC2+tHa6i67MY0TTbXPJ4h7OQNwopTDiNt9WjzOb7awBWWfFzzKIcRsQNvEeOBa03Rz7d0rVqcg=
X-Received: by 2002:a1c:7512:: with SMTP id o18mr999573wmc.94.1625710144333;
 Wed, 07 Jul 2021 19:09:04 -0700 (PDT)
MIME-Version: 1.0
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
From: Sven Van Asbroeck <thesven73@gmail.com>
Date: Wed, 7 Jul 2021 22:08:53 -0400
Message-ID: <CAGngYiWm4u27o-yy5L5tokMB5G1RUR5uYmKf2oXah2P3J=hK2A@mail.gmail.com>
Subject: Re: [PATCH v2 0/4] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sascha Hauer <kernel@pengutronix.de>, 
	Cornelia Huck <cohuck@redhat.com>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>, 
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, 
	Ben Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>, 
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>, 
	Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep Holla <sudeep.holla@arm.com>, 
	Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, 
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>, 
	Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Lee Jones <lee.jones@linaro.org>, 
	Tomas Winkler <tomas.winkler@intel.com>, Arnd Bergmann <arnd@arndb.de>, 
	Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, Jon Mason <jdmason@kudzu.us>, 
	Allen Hubbe <allenbh@gmail.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, 
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>, 
	Heikki Krogerus <heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>, 
	Jason Wang <jasowang@redhat.com>, Kirti Wankhede <kwankhede@nvidia.com>, 
	Alex Williamson <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, 
	Manohar Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Juergen Gross <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>, 
	Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, 
	Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler <tyreld@linux.ibm.com>, 
	Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland <samuel@sholland.org>, 
	Qinglang Miao <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>, 
	Kai-Heng Feng <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, 
	=?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, 
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@lists.infradead.org>, linux-mips@vger.kernel.org, 
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, 
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org, 
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org, 
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org, 
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org, 
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org, 
	linux-i2c <linux-i2c@vger.kernel.org>, linux-i3c@lists.infradead.org, 
	industrypack-devel@lists.sourceforge.net, 
	linux-media <linux-media@vger.kernel.org>, linux-mmc@vger.kernel.org, 
	netdev <netdev@vger.kernel.org>, linux-ntb@googlegroups.com, 
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org, 
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org, 
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org, 
	linux-spi <linux-spi@vger.kernel.org>, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, 
	xen-devel@lists.xenproject.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 6, 2021 at 11:50 AM Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
>  drivers/staging/fieldbus/anybuss/host.c   | 4 +---

Awesome !

Acked-by: Sven Van Asbroeck <TheSven73@gmail.com>


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 04:10:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 04:10:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152717.282355 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1LMv-00085N-EQ; Thu, 08 Jul 2021 04:10:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152717.282355; Thu, 08 Jul 2021 04:10:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1LMv-00085G-BF; Thu, 08 Jul 2021 04:10:33 +0000
Received: by outflank-mailman (input) for mailman id 152717;
 Wed, 07 Jul 2021 21:52:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/6yK=L7=eckelmann.de=T.Scherer@srs-us1.protection.inumbo.net>)
 id 1m1FSb-0005F3-0D
 for xen-devel@lists.xenproject.org; Wed, 07 Jul 2021 21:52:01 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.77]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8de958aa-df6d-11eb-8530-12813bfff9fa;
 Wed, 07 Jul 2021 21:51:59 +0000 (UTC)
Received: from AM9P189MB1700.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:2fc::15)
 by AM8P189MB1411.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:242::5) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Wed, 7 Jul
 2021 21:51:56 +0000
Received: from AM9P189MB1700.EURP189.PROD.OUTLOOK.COM
 ([fe80::cc15:eec3:792a:3310]) by AM9P189MB1700.EURP189.PROD.OUTLOOK.COM
 ([fe80::cc15:eec3:792a:3310%7]) with mapi id 15.20.4308.022; Wed, 7 Jul 2021
 21:51:56 +0000
Received: from localhost (2a00:1f08:400:4::2) by
 PR3P251CA0003.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 7 Jul 2021 21:51:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8de958aa-df6d-11eb-8530-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QGlI00tOYmH5JlziKq/YJEi2G81qTDnMLXD0g38ik6DfnM0fAeopR4eLT1hdnPRnDZ8i7uO633WimO/ulohWRnVDoKLAj4ILVrE4zuY9aQ6LEKOQmLg5l8BRTZXvolUV76N/CHs2wIIPjO50NILCtNWIwpD6kbr3U2UpK06tAsjz9TMSIk9eZ5yVZ46e+0twVfz/6v+r9lC8p/2r0BXU11Hyu7ysatrFHXI026sSArYV19vJcH/xiqTRCvRpqFWea/lksv3CuKfidvMK+fsJNku2nB1PNOaXbiqtp+HcVtui12vXXAr69WiFh7Rd0y5kvtAS5fPPGYTSiAGbgLI9jQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WOlcEdl7QPNc6aw+1dLvTyRyvVtdMsDxOzlMGNdOHQA=;
 b=AiHB8XcWUzftmRQ8B4O/zoeQlhLDIu4bcW+pvwfO5IsHVyUGscy/I9slvdI4WgQVktekfnhryaEwdFwTFR9imSMoCc7ARUnSrm1lo0QSMZZylMpO9wmjhJstddGpfrjQzsjZ6jsxhAkML4Y7hsoIfHC6tg++Wry/XcWXGJSlXi8DgBGUqDzUjEat06vi2vUN3x6vP4m+8BkhOlq3PsVo58xAjDuzfXE5VEmUY9jJo9CFe09LXvRtMvEygejTKmsr77qKSu+EoDaglo0q6aconvgiVlPLTKovwKAKscuSXmhWqg5tGP1bUJuT5wpB6DoQThzZyVtb5TI5bWVDfJIrWA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=eckelmann.de; dmarc=pass action=none header.from=eckelmann.de;
 dkim=pass header.d=eckelmann.de; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=eckelmannde.onmicrosoft.com; s=selector1-eckelmannde-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WOlcEdl7QPNc6aw+1dLvTyRyvVtdMsDxOzlMGNdOHQA=;
 b=nyoOMG2EmWX7k1wjdqkZw23W20Vbar7Ie7yaBQcRChgP48y90jPdfJOftoeeMoO4Jvuck46m4ECg7nBFX2PDldDe9whxUm102xMg+bGkcq6MSVWb/aizip8qyVPN1ROdiJG6B3GhSHSNuHYFfZgsJa7BNBB0tyB8MvXV6LjD+K4=
Authentication-Results: pengutronix.de; dkim=none (message not signed)
 header.d=none;pengutronix.de; dmarc=none action=none
 header.from=eckelmann.de;
Date: Wed, 7 Jul 2021 23:51:54 +0200
From: Thorsten Scherer <t.scherer@eckelmann.de>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	Cornelia Huck <cohuck@redhat.com>, linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org,
	Russell King <rmk+kernel@armlinux.org.uk>,
	Johannes Thumshirn <jth@kernel.org>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <20210707215108.ervxrkmbitp3l2ej@ws067.eckelmann.group>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
X-ClientProxiedBy: PR3P251CA0003.EURP251.PROD.OUTLOOK.COM
 (2603:10a6:102:b5::6) To AM9P189MB1700.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:20b:2fc::15)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8987669f-0789-4189-d163-08d94191700f
X-MS-TrafficTypeDiagnostic: AM8P189MB1411:
X-Microsoft-Antispam-PRVS:
 <AM8P189MB14112A254C08C477E55D0F8F9F1A9@AM8P189MB1411.EURP189.PROD.OUTLOOK.COM>
X-MS-Exchange-Transport-Forked: True
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Lb/VPh7eDx+8uAXqVeH7DJbNAOhaPuWa3f5CT3h/INJORJ7mDCVWkm0CgKnudmpM9LI5W5r92BSyz0MjERB/4Gl2oyYOs5kUzr701FfZiZY78zjaiiCvN937bnDKnFeBpH+5Eg0XX7n3GmrgtwbkOF74I2eM77+1VB/tY4YSiuWcARdLL6shSP45qF4FNj14/fNhVk0AUdcYfeOIsUk5I+bI5xtVyT9lRX30HosaKOFmZ7WZfL8Pedh+pb+FJSZr0vQK0xnGVagwa0sx0K5bG8EuKmDPkT/kHKOPCLtGkAy9cHH/TjUWbnenC+qYCABLS+BPXtsyhf09uojC24nCdD6qpui9tRfVEwLNN8soTS1mPqkyUjZbH2duVE8voOYUrFxoT5VB1WCHtBxJ5pf1YHLlwyNdvfjWduXRSI/1dx+pMFumUZbz4qaAIhbKhp3k0T8lKtEnVUz1tojhWXN5dkSDoOv2v09TWzbH8JNtjcm1shSJu2Ue06Lwl4vcFB4WVvzTisBKRlH4667qd3Fi6Wv0p3pLcBqXqFfUQmYbwjEjD/nEc8Xh72CCIvB6O9DMV7wGTsqVy1qgEVLiQb7fmJ1dUl9klnw57ekGd3WclklG+03/CyMV17aN8kRx6CvN4qltad8RnDU9uLm1fTUAh5SoGDVUWTVbMn1GXRNjoedSG7LnFrqmeG64bEyhrVjZW5I/ar6wxxFNkjqLmm8bNT+cimHXdWK0dPvh0tD8gYmiOnkVIw4J0AkuOz9DJBQNbLVcUoE/FBD9hslaMn1fvQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9P189MB1700.EURP189.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(396003)(346002)(39830400003)(366004)(376002)(136003)(4326008)(6916009)(4744005)(2906002)(6486002)(7406005)(7416002)(15974865002)(8936002)(8676002)(66946007)(478600001)(86362001)(5660300002)(316002)(52116002)(6496006)(1076003)(54906003)(38100700002)(66574015)(66556008)(66476007)(9686003)(186003)(557034005);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?iso-8859-1?Q?eDZZLUdi0LX9JYklNk1x7DqZXpMygmSWtSlaRlIBVNvRThOPePohfCLPA5?=
 =?iso-8859-1?Q?vqTMntKBtCEzz1xuRmWc4X3UdMrUl1+m/hUKXWwf8ByXww3o0gauh+nl2C?=
 =?iso-8859-1?Q?69oPdOhoDszfyN+oGyL8lKfkoIoELQDUp0Ha/E97SArD/mEBG3+8tGTpoH?=
 =?iso-8859-1?Q?R+/Dsd7ze7SAecXrgTcbqeE58MZtNUpv6qc3jyupRynVRxr2WwsDmPuw4e?=
 =?iso-8859-1?Q?VI6CvmvETAdFJ7Ich0AROZZHaaUyJXsw/T2LNLCk+NStIuzMFGKY/Tu6Vv?=
 =?iso-8859-1?Q?O9IX5YhN0GV5QDX4Gsp/qDQURyrnlnkOC6lE8kQoPlhRq7jFr1VnQWEVGh?=
 =?iso-8859-1?Q?4LphKn/5DEwUQSIv8a7ViE8raLMb4ZH86eg3sfpHrl8s4+QoxOdloluOpj?=
 =?iso-8859-1?Q?C9Wn34IqqcUow6TqqcoR4ZBmSIL9f4N5vo+8qJiIgtqJFtTzxqKOkWerSD?=
 =?iso-8859-1?Q?BWaD4YYbjzfF2ilwbrH+rqO8VnQXI5ld4/X1jcyMYvHLz6bg568C7V1KxD?=
 =?iso-8859-1?Q?Y7zEert5KiX/SyywI0tPlAyuqfgQ+6UQlk+fc/BPS+uz6jMsoaLINQxYVi?=
 =?iso-8859-1?Q?P9LpStzEEQAWUszpav4E4QzsZArxc2DTNOGkorJY8NnkthOeL7CBmQ8uSw?=
 =?iso-8859-1?Q?4URnC8tb0wov6bGORczmFXo4v5xsDTy+Y56CvMO7rKQ+mgK3EK3ynmizZ6?=
 =?iso-8859-1?Q?N7XObtVUWYuaOWevEeC5xqeZAblK7p/xBUrOZS/l61QdC4RpPv9x9LvOAn?=
 =?iso-8859-1?Q?rj5gjedsRyLrfjqZmVJD83C87tjMqZcwwWTTJXAZOK2BL6xcf9DCZeazaK?=
 =?iso-8859-1?Q?a6QmImE/vabFEUTlnw9THp+zXcbVPVJwCtXiHoFGQXYyMCIt6eXWo8O0vC?=
 =?iso-8859-1?Q?XslR0dVr6kKfKIJQ6pn0IKWgBw90OARdiPlJO/xswtkxlwACx9NcI/a1gf?=
 =?iso-8859-1?Q?Bxw4s+R9Tq/3wzGyGeszWMKLIr9cxaPrn5ywIu/smDokwdrndWaH8PiJlY?=
 =?iso-8859-1?Q?PeZQQzAB0LsN9sLV0OTfnoaUFyOd/NO7G91skbNKrwTr67CSMLZpO0Efix?=
 =?iso-8859-1?Q?ePmY/61Phqj1rTLGOc5UUnvgvLdUKPalem/6yK0T7emq+mTJ6f2adICuEA?=
 =?iso-8859-1?Q?fIeXJzzGT9XkhMHRlK4s9uNkklGZHW8ChgBnc/l37rX3dBSq6YR1xbogeC?=
 =?iso-8859-1?Q?vIIUdfOkiaNs6trXwq5V4kjGCaGafYjiQV1vzfd2NygYMLcH0Gy1Qm5ULX?=
 =?iso-8859-1?Q?/TafMLXdYbz3Nc2PBViPY72+XuZIeTPAyFAtWijazfS7dod5Zu9NFXXH3V?=
 =?iso-8859-1?Q?J7zFPCNC7zR7ej2QYOwXouGEQM83Ck5nULNdh8XhUk5cmio9IZQll40jUK?=
 =?iso-8859-1?Q?QIQevgKi3tv9aWyxzUZyC4tJ5cZcdoug=3D=3D?=
X-OriginatorOrg: eckelmann.de
X-MS-Exchange-CrossTenant-Network-Message-Id: 8987669f-0789-4189-d163-08d94191700f
X-MS-Exchange-CrossTenant-AuthSource: AM9P189MB1700.EURP189.PROD.OUTLOOK.COM
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2021 21:51:56.1698
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 62e24f58-823c-4d73-8ff2-db0a5f20156c
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Ur8XMZiF6bwEyBALI0qg2jMFHKKsDYaGvYi6ddYfgV7bn1VoiuIVhLN4LTrTEmRStKglRvEnKtWfYKCJBBKoYA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8P189MB1411


On Tue, Jul 06, 2021 at 05:48:03PM +0200, Uwe Kleine-Knig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.

[...]

>  drivers/siox/siox-core.c                  | 4 +---

(For drivers/siox)

Acked-by: Thorsten Scherer <t.scherer@eckelmann.de>

Best regards
Thorsten

--
Thorsten Scherer | Eckelmann AG | www.eckelmann.de |


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 05:41:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 05:41:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152862.282389 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Mmq-0000jp-PU; Thu, 08 Jul 2021 05:41:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152862.282389; Thu, 08 Jul 2021 05:41:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Mmq-0000ji-M1; Thu, 08 Jul 2021 05:41:24 +0000
Received: by outflank-mailman (input) for mailman id 152862;
 Thu, 08 Jul 2021 05:39:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=NGDu=MA=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m1MlB-0008R8-20
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 05:39:41 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 15c6d644-ff3b-4f3f-a218-bd49a302a8a2;
 Thu, 08 Jul 2021 05:39:39 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m1MkT-0006EF-FH; Thu, 08 Jul 2021 07:38:57 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m1Mk9-00030G-2j; Thu, 08 Jul 2021 07:38:37 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m1Mk8-0007Hx-U3; Thu, 08 Jul 2021 07:38:36 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 15c6d644-ff3b-4f3f-a218-bd49a302a8a2
Date: Thu, 8 Jul 2021 07:38:13 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Sven Van Asbroeck <thesven73@gmail.com>
Cc: nvdimm@lists.linux.dev, Alexey Kardashevskiy <aik@ozlabs.ru>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Jaroslav Kysela <perex@perex.cz>, linux-fpga@vger.kernel.org,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Paul Mackerras <paulus@samba.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Mike Christie <michael.christie@oracle.com>,
	Wei Liu <wei.liu@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	Michael Ellerman <mpe@ellerman.id.au>, linux-acpi@vger.kernel.org,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Tomas Winkler <tomas.winkler@intel.com>,
	Julien Grall <jgrall@amazon.com>, Ohad Ben-Cohen <ohad@wizery.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alex Elder <elder@kernel.org>, linux-parisc@vger.kernel.org,
	Geoff Levand <geoff@infradead.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-spi <linux-spi@vger.kernel.org>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Sascha Hauer <kernel@pengutronix.de>, Jon Mason <jdmason@kudzu.us>,
	linux-ntb@googlegroups.com, Wu Hao <hao.wu@intel.com>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	linux-wireless@vger.kernel.org,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	virtualization@lists.linux-foundation.org,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	target-devel@vger.kernel.org,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	linux-i2c <linux-i2c@vger.kernel.org>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Ira Weiny <ira.weiny@intel.com>, Helge Deller <deller@gmx.de>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	industrypack-devel@lists.sourceforge.net,
	linux-mips@vger.kernel.org, Len Brown <lenb@kernel.org>,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-media <linux-media@vger.kernel.org>,
	Maxime Ripard <mripard@kernel.org>, Johan Hovold <johan@kernel.org>,
	greybus-dev@lists.linaro.org, Bjorn Helgaas <bhelgaas@google.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@lists.infradead.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Stephen Boyd <sboyd@kernel.org>, Cornelia Huck <cohuck@redhat.com>,
	Wolfram Sang <wsa@kernel.org>, Joey Pabalan <jpabalanb@gmail.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Tom Rix <trix@redhat.com>, Jason Wang <jasowang@redhat.com>,
	SeongJae Park <sjpark@amazon.de>, linux-hyperv@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, Frank Li <lznuaa@gmail.com>,
	netdev <netdev@vger.kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Rob Herring <robh@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Mark Gross <mgross@linux.intel.com>, linux-staging@lists.linux.dev,
	Dexuan Cui <decui@microsoft.com>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Chen-Yu Tsai <wens@csie.org>, linux-input@vger.kernel.org,
	Matt Porter <mporter@kernel.crashing.org>,
	Allen Hubbe <allenbh@gmail.com>, Alex Dubov <oakad@yahoo.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Jiri Kosina <jikos@kernel.org>, Vladimir Zapolskiy <vz@mleia.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Moritz Fischer <mdf@kernel.org>, linux-cxl@vger.kernel.org,
	Michael Buesch <m@bues.ch>, Dan Williams <dan.j.williams@intel.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-mmc@vger.kernel.org, linux-sunxi@lists.linux.dev,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	"David S. Miller" <davem@davemloft.net>, kvm@vger.kernel.org,
	"Michael S. Tsirkin" <mst@redhat.com>,
	linux-remoteproc@vger.kernel.org,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	linux-i3c@lists.infradead.org,
	linux1394-devel@lists.sourceforge.net,
	Lee Jones <lee.jones@linaro.org>, Arnd Bergmann <arnd@arndb.de>,
	linux-scsi@vger.kernel.org, Vishal Verma <vishal.l.verma@intel.com>,
	Russell King <linux@armlinux.org.uk>,
	Andy Gross <agross@kernel.org>, linux-serial@vger.kernel.org,
	Jakub Kicinski <kuba@kernel.org>,
	Michael Jamet <michael.jamet@intel.com>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>, Hannes Reinecke <hare@suse.de>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Juergen Gross <jgross@suse.com>, linuxppc-dev@lists.ozlabs.org,
	Takashi Iwai <tiwai@suse.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Vinod Koul <vkoul@kernel.org>, Mark Brown <broonie@kernel.org>,
	Marc Zyngier <maz@kernel.org>, dmaengine@vger.kernel.org,
	Johannes Berg <johannes@sipsolutions.net>,
	Maximilian Luz <luzmaximilian@gmail.com>
Subject: Re: [PATCH v2 0/4] bus: Make remove callback return void
Message-ID: <20210708053813.pem2ufjuwkacptv3@pengutronix.de>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <CAGngYiWm4u27o-yy5L5tokMB5G1RUR5uYmKf2oXah2P3J=hK2A@mail.gmail.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="bpxpm3lcta7ifhrg"
Content-Disposition: inline
In-Reply-To: <CAGngYiWm4u27o-yy5L5tokMB5G1RUR5uYmKf2oXah2P3J=hK2A@mail.gmail.com>
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org


--bpxpm3lcta7ifhrg
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Jul 07, 2021 at 10:08:53PM -0400, Sven Van Asbroeck wrote:
> On Tue, Jul 6, 2021 at 11:50 AM Uwe Kleine-K=F6nig
> <u.kleine-koenig@pengutronix.de> wrote:
> >
> >  drivers/staging/fieldbus/anybuss/host.c   | 4 +---
>=20
> Awesome !
>=20
> Acked-by: Sven Van Asbroeck <TheSven73@gmail.com>

I note that as an Ack for patch 4 only, as the others don't touch this
file.

Best regards
Uwe

--=20
Pengutronix e.K.                           | Uwe Kleine-K=F6nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

--bpxpm3lcta7ifhrg
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmDmjzsACgkQwfwUeK3K
7Alp5wf+LJkpxzkaW2ldAtFhGuqT1XfOqbe9d5vNgqvqupJS1Q+aeie0kH0038ba
uN3KDJ2V2DAmMf6OIKUFucVxBpCC92myb63zIHRJs5kGzTu41BRp3yt/I650Xzdr
+MB/xdEr/XFy2f9gDr/QdCojwh44TXqKzZPG6a7r6uQu8/AAUOdVEcfK6o01hN8W
szxNTR1qtdQMHj9Ji8fo0wADdSPEez1kGe+HEOJVWBZnhdyCqS0jh774r7GsLjqY
l8S7HhKPoY6/CCbEHKfYA15GUvexTA14O2tn6vuQPtiTTdDoh/Nl0wj0z5/WbWjX
HF/tKnNb3l18s65PbEmxEKa2XonjFQ==
=+Y+1
-----END PGP SIGNATURE-----

--bpxpm3lcta7ifhrg--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 05:47:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 05:47:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152868.282400 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1MsQ-0001Qg-ED; Thu, 08 Jul 2021 05:47:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152868.282400; Thu, 08 Jul 2021 05:47:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1MsQ-0001QZ-Ak; Thu, 08 Jul 2021 05:47:10 +0000
Received: by outflank-mailman (input) for mailman id 152868;
 Thu, 08 Jul 2021 05:47:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1MsP-0001QT-2g
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 05:47:09 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ee2de78e-dfaf-11eb-8558-12813bfff9fa;
 Thu, 08 Jul 2021 05:47:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 0479620131;
 Thu,  8 Jul 2021 05:47:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id B37E61340F;
 Thu,  8 Jul 2021 05:47:06 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id CQAAKlqR5mDNfQAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 05:47:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ee2de78e-dfaf-11eb-8558-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625723227; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=ip5DNgexySMwzuWqwa7ACJthFTxiFhdfI+wAfyqI2vQ=;
	b=mtRhjyizl14mUB363xUyJ8hB7aUMyzMYom33vs6fkxmXh8GwkExiFT8QbjKbQGoINv2kte
	gOjwk1DxWJ93vQZ3gvMeN0i2VIfQ7+bhXGMkeixDvAWNvM/EEzz5AeozWs2btvrqz7US2A
	3k5qRk9rE4C8vyovYqa7MoEsauJPO/w=
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
To: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
Date: Thu, 8 Jul 2021 07:47:06 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="65Cl9OH3VxhoDnxdHBagUmL999Yvk5KRj"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--65Cl9OH3VxhoDnxdHBagUmL999Yvk5KRj
Content-Type: multipart/mixed; boundary="TaRSfQAduiJvbDCSd5wNF88LIRKqIxccY";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Message-ID: <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
In-Reply-To: <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>

--TaRSfQAduiJvbDCSd5wNF88LIRKqIxccY
Content-Type: multipart/mixed;
 boundary="------------1299B9F7BEB5CBBFFB8C69D9"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------1299B9F7BEB5CBBFFB8C69D9
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 17.05.21 17:33, Jan Beulich wrote:
> On 17.05.2021 17:22, Juergen Gross wrote:
>> On 17.05.21 17:12, Jan Beulich wrote:
>>> On 17.05.2021 16:23, Juergen Gross wrote:
>>>> On 17.05.21 16:11, Jan Beulich wrote:
>>>>> On 13.05.2021 12:02, Juergen Gross wrote:
>>>>>> @@ -1574,10 +1580,16 @@ static irqreturn_t blkif_interrupt(int irq=
, void *dev_id)
>>>>>>     	spin_lock_irqsave(&rinfo->ring_lock, flags);
>>>>>>      again:
>>>>>>     	rp =3D rinfo->ring.sring->rsp_prod;
>>>>>> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
>>>>>> +		pr_alert("%s: illegal number of responses %u\n",
>>>>>> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
>>>>>> +		goto err;
>>>>>> +	}
>>>>>>     	rmb(); /* Ensure we see queued responses up to 'rp'. */
>>>>>
>>>>> I think you want to insert after the barrier.
>>>>
>>>> Why? The relevant variable which is checked is "rp". The result of t=
he
>>>> check is in no way depending on the responses themselves. And any ch=
ange
>>>> of rsp_cons is protected by ring_lock, so there is no possibility of=

>>>> reading an old value here.
>>>
>>> But this is a standard double read situation: You might check a value=

>>> and then (via a separate read) use a different one past the barrier.
>>
>> Yes and no.
>>
>> rsp_cons should never be written by the other side, and additionally
>> it would be read multiple times anyway.
>=20
> But I'm talking about rsp_prod, as that's what rp gets loaded from.

Oh, now I get your problem.

But shouldn't that better be solved by using READ_ONCE() for reading rp
instead?


Juergen

--------------1299B9F7BEB5CBBFFB8C69D9
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------1299B9F7BEB5CBBFFB8C69D9--

--TaRSfQAduiJvbDCSd5wNF88LIRKqIxccY--

--65Cl9OH3VxhoDnxdHBagUmL999Yvk5KRj
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDmkVoFAwAAAAAACgkQsN6d1ii/Ey9d
SAf+KLMOHqZAOwV2oMpLnGz6nvcW8YhRf7arZPFHVihB8LPCP/ZMeXdUOOrg4Es9ObCPK3OsCyjO
2ZLyzCQN+5haDXDOJkvUkf6mZ4u/lS44+t0gONnt9mCbH1DAr/8vLPnAGXWbPy1bULNZS58k3j5c
Mb/bW0RiqyiAQWP8xXe7EkC4DV5fwQG1QUnOV3ULDUorDihhshR82yfWQ7+HzbzUVg2OZZGU8UlX
htMrMbRFoCfAEO98yZ+qbHTE/i54dl7pUAwc1dSqvMrYCGnCf0Q4D8E2xHzOhpDohPxpjPYGXF12
YgTs6YPWhtmHoOKBBACBsPfJWyBa0ZOIFq9oWWbTAQ==
=p302
-----END PGP SIGNATURE-----

--65Cl9OH3VxhoDnxdHBagUmL999Yvk5KRj--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:29:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:29:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152874.282410 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1NXP-0005a6-Qr; Thu, 08 Jul 2021 06:29:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152874.282410; Thu, 08 Jul 2021 06:29:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1NXP-0005Zz-Nw; Thu, 08 Jul 2021 06:29:31 +0000
Received: by outflank-mailman (input) for mailman id 152874;
 Thu, 08 Jul 2021 06:29:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1NXO-0005Zt-Rq
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 06:29:31 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.162])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ec565afa-8c9c-4d8c-abb9-328d26a49c9e;
 Thu, 08 Jul 2021 06:29:29 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx686TRYPP
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 08:29:27 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec565afa-8c9c-4d8c-abb9-328d26a49c9e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625725767;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=1eyEJColcB3QC1zip0cJhgsY6K/VL+/9YSaJUkfU8Lo=;
    b=p5Tj3JZToohdXCHQvZpPOFrWGOVlXd8uIxu0Uksja9T4dPGX7Hd4163io8WxmbUQbK
    yLs/D1b7WA5xDhDHLbYEo35OkfW7Hjo7FlAVEmVmVwoI0FZ1BO+pgyndgDeSbAwCvCcQ
    TKTg6WvqseNMdHPtG1mw8cOBEIyLilj7OORZIQ9Q9eVLlbyzGjufbAiao+grcO+0h6oy
    vh+RHjxclxNjGq9mdGe1zLibAMXsUonCuVI82xz7KNQZjdZstt17v/46dMfQ57b1TMBE
    IJZZtN4BNYKGQdfvDu/cR8T2440hFuiIbTWwfbomFzg3PFwVkVctwHiU95GPNCntaAoR
    ObgQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1] automation: dump contents of /etc/os-release
Date: Thu,  8 Jul 2021 08:29:22 +0200
Message-Id: <20210708062922.23393-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

To aid debugging build failures, dump /etc/os-release during build.
This helps with rolling releases such as Tumbleweed to understand the
state of the build container.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/scripts/build | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/automation/scripts/build b/automation/scripts/build
index 46b6903d29..55da912fc5 100755
--- a/automation/scripts/build
+++ b/automation/scripts/build
@@ -1,5 +1,7 @@
 #!/bin/bash -ex
 
+test -f /etc/os-release && cat "$_"
+
 $CC --version
 
 # Express the compiler version as an integer.  e.g. GCC 4.9.2 => 0x040902


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:37:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:37:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152879.282422 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1NfJ-00071S-Lp; Thu, 08 Jul 2021 06:37:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152879.282422; Thu, 08 Jul 2021 06:37:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1NfJ-00071L-Iq; Thu, 08 Jul 2021 06:37:41 +0000
Received: by outflank-mailman (input) for mailman id 152879;
 Thu, 08 Jul 2021 06:37:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1NfI-00071F-Ql
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 06:37:40 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id af483e02-32d8-4479-9171-94286c9c3905;
 Thu, 08 Jul 2021 06:37:39 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2172.outbound.protection.outlook.com [104.47.17.172])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-16-i6Sl78y1O9q5FFSMDd1U-g-1; Thu, 08 Jul 2021 08:37:37 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7360.eurprd04.prod.outlook.com (2603:10a6:800:1a3::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 06:37:34 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 06:37:34 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P189CA0039.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:53::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.19 via Frontend Transport; Thu, 8 Jul 2021 06:37:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: af483e02-32d8-4479-9171-94286c9c3905
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625726258;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=m/kSj1tXjJ7vYVzsCUDen7mAWc2/k5eNogbkEDG9GK4=;
	b=mp9b1t9cgD/mb/VJzClLBe4uN9DQ+gH7C+EEa2bSoPdZjjOwDPtE+e5p6s1W67Lzm0+Ml5
	Uhwxo8QWWwoHEOtHXAm3IY+uGbBttL+Imb+tP6Aa8HAk0KY550ZYi9MpFq/2TbsN4bVDQK
	cnQXUNTo847GAUVEeRuMwaoN+G8D4GA=
X-MC-Unique: i6Sl78y1O9q5FFSMDd1U-g-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=RBPdQQSUT/f04poBiESzn3XkN/SbstgM/nOTj33bGzKmTzBVes3bvKSPmuCfqN+PWF/bcWNjAlONQpDqsxPyolCzoggZdAFYgQTykpn85uwICD40ysnK3gQZEg8M6+ZsmqfaHV2EYq2RsEEaTBA0fHd4UpIiUgYkmevbFgqMnYDQXbhF1EB8lhMhEtP7wWX2BjocgEsoa+Gxc2+3F7nOgjDy+THVNwE1Jw3aVP52q/ypIIUBjAw0b1ALbuBUtqcSI1HvGB+mzRs6rIota7Iw9pYkl0qgvpCE7V9k2uFO7jxj9zuYl/E15lTWrTee88WfOIRNUfk6xnRvF8FPsUFkXw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=m/kSj1tXjJ7vYVzsCUDen7mAWc2/k5eNogbkEDG9GK4=;
 b=dZrAqqsoM72rDYx32dg0FZ2RzR6H/Yydr5wWONPjFGPrdsz5RZB21MkxclMMXB1aSR+zraCYE2auBGU72XGiRIKLTrzuEN8hJ2Dd9zd/bE6oHizxTPe5h8POV4qTDm5mozD66MSJIRc/6zLxGSw9vHBm2W4QFhs4bXNEAygVMl/hhHjUudNA4Q+T9a26fU4hqlig7shm4JYQ1PQe9bMv15qIAmogb9mD/6qLx3qBqhGg9hyKta0I8bB/OJXMPZle7gbBVFHC4LWRom6p6ZJTW6+bYUVwTMQF15B0eQOzpToabwKtxJGzhBVhFPlttVC6prmmeG/bDOGytVgtKnQ6bQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: vger.kernel.org; dkim=none (message not signed)
 header.d=none;vger.kernel.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
To: Juergen Gross <jgross@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
 <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
Date: Thu, 8 Jul 2021 08:37:32 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P189CA0039.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:102:53::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0496e8e4-f5a7-4bb0-d7a5-08d941dade59
X-MS-TrafficTypeDiagnostic: VE1PR04MB7360:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB73606589C82195C039B9CA6EB3199@VE1PR04MB7360.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	t/7Q9m+JE7JqNl+bSvJeZh0aC9FkViIj3OWF5ZF/5Vp+f81i07uzBF0QK+Sbtc2zigoxMIlg29hbgZyoA0gvfEZHWtUkjADKK8ZivChUln0AKV3Q55OTexxTWknifBZBWO+qsiBo+1xsEFKijOrdPv7sMAttVu3s8kWn7HuX9Le7LPM3xgMCY8150/mtiPb5Rc94IDFSXwEQWStU7hWD+KJsJngFONEMr15uv2afcUULMTIKP8qAwLkJo+ow1Hu81GiSbuL00mTDS1Dc1yn3HyAKaQCxFu0FFrkOCeK4gLDmc5HilvIL3YbQvyce9P4jkfJkmAK5v91IhvBmqaUOjWi3LnbGjrx5ycpGigD7WYoKpApni/aHhZ0RaoYCJE2vwH7HrwsITK2MKrAAnJeoGupOwMEzQMCDQ7P/hZ9C0tcA8GgrfQQwzA1caZ2HFofSAPEE5iGfXOg3wBdO7KSyXrY/bs5tKyCnpzjAbAP7tzxe6Lv08pl9KnZ1+x+b8vyD33+D/4SPfGzM+cLQlM6NEJSVRDicNyLTeoWqa8OSzcNDt0hrA+cazqJFYIm7Z/OHSxbuTN35I4crmJAcL/56PXjnFNO8JH4oZFc/YiFgHL8r2mbvrVy8ugeEIWJtAIzGyrVllQ02kioqDJBMd2C8KlboG4ZYiMwsmTx7IKNYo1aFGXa5yv2XNJEis2FVrNSEnQTrTSDTs2gz5GDNonlh4e/53+FgnbkBTR9jb8GAI58=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(376002)(366004)(136003)(396003)(39850400004)(6486002)(26005)(6636002)(2616005)(956004)(5660300002)(6862004)(186003)(16576012)(8676002)(4326008)(37006003)(2906002)(54906003)(316002)(66556008)(478600001)(31686004)(66946007)(53546011)(66476007)(8936002)(36756003)(83380400001)(31696002)(86362001)(38100700002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0496e8e4-f5a7-4bb0-d7a5-08d941dade59
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 06:37:34.0350
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Z8IJENMingx6r0rJhp8n8AlHpwP0uregUxA9rp5LTHFZny6oIFarRBKDBsz7MAiZTs6lVyDzt3GsipRNdACHTA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7360

On 08.07.2021 07:47, Juergen Gross wrote:
> On 17.05.21 17:33, Jan Beulich wrote:
>> On 17.05.2021 17:22, Juergen Gross wrote:
>>> On 17.05.21 17:12, Jan Beulich wrote:
>>>> On 17.05.2021 16:23, Juergen Gross wrote:
>>>>> On 17.05.21 16:11, Jan Beulich wrote:
>>>>>> On 13.05.2021 12:02, Juergen Gross wrote:
>>>>>>> @@ -1574,10 +1580,16 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>>>>>>>     	spin_lock_irqsave(&rinfo->ring_lock, flags);
>>>>>>>      again:
>>>>>>>     	rp = rinfo->ring.sring->rsp_prod;
>>>>>>> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
>>>>>>> +		pr_alert("%s: illegal number of responses %u\n",
>>>>>>> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
>>>>>>> +		goto err;
>>>>>>> +	}
>>>>>>>     	rmb(); /* Ensure we see queued responses up to 'rp'. */
>>>>>>
>>>>>> I think you want to insert after the barrier.
>>>>>
>>>>> Why? The relevant variable which is checked is "rp". The result of the
>>>>> check is in no way depending on the responses themselves. And any change
>>>>> of rsp_cons is protected by ring_lock, so there is no possibility of
>>>>> reading an old value here.
>>>>
>>>> But this is a standard double read situation: You might check a value
>>>> and then (via a separate read) use a different one past the barrier.
>>>
>>> Yes and no.
>>>
>>> rsp_cons should never be written by the other side, and additionally
>>> it would be read multiple times anyway.
>>
>> But I'm talking about rsp_prod, as that's what rp gets loaded from.
> 
> Oh, now I get your problem.
> 
> But shouldn't that better be solved by using READ_ONCE() for reading rp
> instead?

Not sure - the rmb() is needed anyway aiui, and hence you could as well
move your code addition.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:41:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:41:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152884.282433 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Nia-0008MA-4c; Thu, 08 Jul 2021 06:41:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152884.282433; Thu, 08 Jul 2021 06:41:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Nia-0008M3-1V; Thu, 08 Jul 2021 06:41:04 +0000
Received: by outflank-mailman (input) for mailman id 152884;
 Thu, 08 Jul 2021 06:41:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1NiY-0008Lh-Uf
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 06:41:02 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 75713a96-dfb7-11eb-855b-12813bfff9fa;
 Thu, 08 Jul 2021 06:41:01 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 719A220150;
 Thu,  8 Jul 2021 06:41:00 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 2E43D13743;
 Thu,  8 Jul 2021 06:41:00 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id Iq5rCfyd5mD3DAAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 06:41:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 75713a96-dfb7-11eb-855b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625726460; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=UX3Jn7QKJIgWoq9YIAaClEJrTpNP4qdIchyEuqqTUVw=;
	b=IxZo4LROO0bvAYuZYqErxE8mW17nhu8a9S8rQVAeR/JxlVuwb4jq74GxQs4yFIULQiy4ba
	Q4/rlwk4saWNsDiYanB7p1TC3LvrWG0B8xJI31qJ2ZhDMobUvwbuvavbFrUYdxSeQUntRx
	a+0rw8CSwO27rht8sJH/Wsn8cy7dOkQ=
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
To: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
 <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
 <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <7f606c27-173a-542d-406d-196dae784edd@suse.com>
Date: Thu, 8 Jul 2021 08:40:59 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="Ja2XZNSE8nO4IrLKl6sE4EnuPN7605kJy"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--Ja2XZNSE8nO4IrLKl6sE4EnuPN7605kJy
Content-Type: multipart/mixed; boundary="LM4uTaxxPZvHMHYeVdJJN6jdt4QkBjnKN";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Message-ID: <7f606c27-173a-542d-406d-196dae784edd@suse.com>
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
 <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
 <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
In-Reply-To: <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>

--LM4uTaxxPZvHMHYeVdJJN6jdt4QkBjnKN
Content-Type: multipart/mixed;
 boundary="------------2D62ABF81D642597E69B3D65"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------2D62ABF81D642597E69B3D65
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 08.07.21 08:37, Jan Beulich wrote:
> On 08.07.2021 07:47, Juergen Gross wrote:
>> On 17.05.21 17:33, Jan Beulich wrote:
>>> On 17.05.2021 17:22, Juergen Gross wrote:
>>>> On 17.05.21 17:12, Jan Beulich wrote:
>>>>> On 17.05.2021 16:23, Juergen Gross wrote:
>>>>>> On 17.05.21 16:11, Jan Beulich wrote:
>>>>>>> On 13.05.2021 12:02, Juergen Gross wrote:
>>>>>>>> @@ -1574,10 +1580,16 @@ static irqreturn_t blkif_interrupt(int i=
rq, void *dev_id)
>>>>>>>>      	spin_lock_irqsave(&rinfo->ring_lock, flags);
>>>>>>>>       again:
>>>>>>>>      	rp =3D rinfo->ring.sring->rsp_prod;
>>>>>>>> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
>>>>>>>> +		pr_alert("%s: illegal number of responses %u\n",
>>>>>>>> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
>>>>>>>> +		goto err;
>>>>>>>> +	}
>>>>>>>>      	rmb(); /* Ensure we see queued responses up to 'rp'. */
>>>>>>>
>>>>>>> I think you want to insert after the barrier.
>>>>>>
>>>>>> Why? The relevant variable which is checked is "rp". The result of=
 the
>>>>>> check is in no way depending on the responses themselves. And any =
change
>>>>>> of rsp_cons is protected by ring_lock, so there is no possibility =
of
>>>>>> reading an old value here.
>>>>>
>>>>> But this is a standard double read situation: You might check a val=
ue
>>>>> and then (via a separate read) use a different one past the barrier=
=2E
>>>>
>>>> Yes and no.
>>>>
>>>> rsp_cons should never be written by the other side, and additionally=

>>>> it would be read multiple times anyway.
>>>
>>> But I'm talking about rsp_prod, as that's what rp gets loaded from.
>>
>> Oh, now I get your problem.
>>
>> But shouldn't that better be solved by using READ_ONCE() for reading r=
p
>> instead?
>=20
> Not sure - the rmb() is needed anyway aiui, and hence you could as well=

> move your code addition.

Sure.

My question was rather: does the rmb() really eliminate the possibility
of a double read introduced by the compiler? If yes, moving the code is
the correct solution.


Juergen

--------------2D62ABF81D642597E69B3D65
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------2D62ABF81D642597E69B3D65--

--LM4uTaxxPZvHMHYeVdJJN6jdt4QkBjnKN--

--Ja2XZNSE8nO4IrLKl6sE4EnuPN7605kJy
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDmnfsFAwAAAAAACgkQsN6d1ii/Ey8Z
kQgAltUawxsUDWM34Hqa6p4r+kkm5+acFIcnRVNM+yie2Kl0XDI1MWK4aEhMQy25z5qtby23kJ9a
d2J4cqsindWkTWDQTZJgOGzbyWYnGAIBxT9nMXgLsrqt9RBLkNFKa2uBbhJoYf0bB5uhRXSfKAQO
J2MbH27Tg+qLggSSfXpwLNOuhIPYzu1sYoDz9M5tTJvB0bZff80bCHK0hp/5CQqUTYAyieHikwgD
qBPyBHOXJMMZ7QGLYF3yZ+dtwJLYq1npbVaCzZ312lxTst2BnO+q6OOPAT7pPZv0Cze2vjeg9fs4
y4l9cnffXUc5Fqtj1bxfO3prXtxMPUZz3M41Dff52Q==
=TPit
-----END PGP SIGNATURE-----

--Ja2XZNSE8nO4IrLKl6sE4EnuPN7605kJy--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:52:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:52:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152891.282450 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1NtF-0001QR-6p; Thu, 08 Jul 2021 06:52:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152891.282450; Thu, 08 Jul 2021 06:52:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1NtF-0001QK-3h; Thu, 08 Jul 2021 06:52:05 +0000
Received: by outflank-mailman (input) for mailman id 152891;
 Thu, 08 Jul 2021 06:52:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=P3FB=MA=arm.com=Wei.Chen@srs-us1.protection.inumbo.net>)
 id 1m1NtD-0001Pv-Rm
 for xen-devel@lists.xen.org; Thu, 08 Jul 2021 06:52:04 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (unknown
 [40.107.20.71]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0692fc9c-17c3-404a-b780-a8d465801bd1;
 Thu, 08 Jul 2021 06:51:59 +0000 (UTC)
Received: from AM5PR0601CA0066.eurprd06.prod.outlook.com (2603:10a6:206::31)
 by PAXPR08MB6607.eurprd08.prod.outlook.com (2603:10a6:102:152::19) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 8 Jul
 2021 06:51:56 +0000
Received: from AM5EUR03FT063.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:0:cafe::1d) by AM5PR0601CA0066.outlook.office365.com
 (2603:10a6:206::31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend
 Transport; Thu, 8 Jul 2021 06:51:56 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT063.mail.protection.outlook.com (10.152.16.226) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Thu, 8 Jul 2021 06:51:55 +0000
Received: ("Tessian outbound 17c2a40a31ce:v98");
 Thu, 08 Jul 2021 06:51:55 +0000
Received: from 60f4124d6978.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 4CC9BA9F-ED15-4504-A69C-DAE8DAE513D2.1; 
 Thu, 08 Jul 2021 06:51:44 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 60f4124d6978.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 08 Jul 2021 06:51:44 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com (2603:10a6:10:2a2::7)
 by DBBPR08MB4491.eurprd08.prod.outlook.com (2603:10a6:10:d2::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 06:51:43 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050]) by DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050%7]) with mapi id 15.20.4287.033; Thu, 8 Jul 2021
 06:51:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0692fc9c-17c3-404a-b780-a8d465801bd1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EFU3xeidvgAvymiPiM4NK5v3DTqxtViqdRdl6DMFB/0=;
 b=ro3bwvdL3GHH07AbN/BNbvgof7sP74U8KLheTX1/bgdLMXF29wQqaYU0G/OJUbY70yGKIzHF29bhtpu1T62rgrKrLFiRtWJ/w4YCYUFlh26kN8rE+kKc9JPZGtUdmAbvJSUUUYi538ugPxI7ba5g+eEBgtFBXg2k06rS0AYvx0E=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gQ6VkFE65AAdI444/CPzZ9iCiqqNhV+DI+7JA1Cuj7URszjuqMO02WItK2KLfYYruRFxW1OVD0siojZXD0fEb19Fdp3wnTIM/u0jJeod0XVCkw43PPGtkXhGiNQmSFmzH8oAga8t6n8JJKolCLljmzrBWSrpwglNsB7Rx5Hiy/cOxYHIFOaGwY8ytkOloyHssm1H6IaHAcnVJgZtRjyx6y3gKfQY+9xPD+hYW83C/yfrsC87OhN2bUlIfq5MC2tBAEgLjQ7Hlulsb1q2awNH6GCImuqyTEftrnO2afW6U+4Pdtvqf10U3z2yDBZREScHPhSm5sVXD3187kaH/X2Eag==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EFU3xeidvgAvymiPiM4NK5v3DTqxtViqdRdl6DMFB/0=;
 b=RGCfUzjh5DlkVPRM6+cqMAxodH4O2TX644HOKS/D165M/KWhvSQcXdUngKW3q+5tEy0V9uysI8wRNBQk/BLKLJ9AFLYrNfRAnWoeaqxGQSavsOtP1SrgPSMVjvuy1yymGr5eYiXztRezfmkuSAJ+00spvx3ZsjV6HFRRKfMrwGj01HO4QaEmLTADmb2zzQBMdafQrRexQL1LjgiBbE0xVWfqgVyS2n/2R7G9jGvjKeStgNYd0PHA6hoQSpmyybydqt7x5+DrhZ+SGUtFmfiLZ4saZLEW6sFgx9MzE2r85lcrWsWbN1qVlyZknnGuhUZ/zxbiBvhoiYzhbv2VKsTOBQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EFU3xeidvgAvymiPiM4NK5v3DTqxtViqdRdl6DMFB/0=;
 b=ro3bwvdL3GHH07AbN/BNbvgof7sP74U8KLheTX1/bgdLMXF29wQqaYU0G/OJUbY70yGKIzHF29bhtpu1T62rgrKrLFiRtWJ/w4YCYUFlh26kN8rE+kKc9JPZGtUdmAbvJSUUUYi538ugPxI7ba5g+eEBgtFBXg2k06rS0AYvx0E=
From: Wei Chen <Wei.Chen@arm.com>
To: Oleksandr <olekstysh@gmail.com>
CC: Stefano Stabellini <sstabellini@kernel.org>, "will@kernel.org"
	<will@kernel.org>, "julien.thierry.kdev@gmail.com"
	<julien.thierry.kdev@gmail.com>, "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	"jean-philippe@linaro.org" <jean-philippe@linaro.org>, Julien Grall
	<julien@xen.org>, Andre Przywara <Andre.Przywara@arm.com>, Marc Zyngier
	<maz@kernel.org>, Oleksandr Tyshchenko <Oleksandr_Tyshchenko@epam.com>, nd
	<nd@arm.com>
Subject: RE: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
Thread-Topic: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
Thread-Index: Addhq3Jd+FbZaJt0R6WdbgcPW7X96wLnXxMAAQ3e1FAAN8NWAABYHM1A
Date: Thu, 8 Jul 2021 06:51:42 +0000
Message-ID:
 <DB9PR08MB6857D8C481F55954C9DF72F29E199@DB9PR08MB6857.eurprd08.prod.outlook.com>
References:
 <DB9PR08MB6857B375207376D8320AFBA89E309@DB9PR08MB6857.eurprd08.prod.outlook.com>
 <alpine.DEB.2.21.2106291716560.9437@sstabellini-ThinkPad-T480s>
 <DB9PR08MB6857B9DC597D253F69D31B6D9E1C9@DB9PR08MB6857.eurprd08.prod.outlook.com>
 <17f02c54-4697-7aaa-6c6b-19c2bbeb169b@gmail.com>
In-Reply-To: <17f02c54-4697-7aaa-6c6b-19c2bbeb169b@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 37DE4A9B5F9B654191B9E00BBAFD096A.0
x-checkrecipientchecked: true
Authentication-Results-Original: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 812a6e9d-56ce-46f1-2864-08d941dce02f
x-ms-traffictypediagnostic: DBBPR08MB4491:|PAXPR08MB6607:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<PAXPR08MB6607821435C9C19CDB78F92B9E199@PAXPR08MB6607.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 L9n3zra+Rt53hjAuO8vb/FxASrnqYyPdqkFCf+qSeXrZpixeyObAbQWXyvtJM5JPDNCP3bq93q9W//w7X4cKb9s3E3MH214V9IxMd90xSC4LzeTdWMPmdeL2cDG6Dj4TM4TI1ZldKcRTNnzFaUK4RQWQZY2D/+DwVQTaJAeBJYt68ozQ5+KZceQ02zHL45wCplr6np9anzU1BUuiNjWV5OSsTgHTw/WpL5xIXYQuC5rRr6UH9+7GIYwgBPumVccU2SSHSmHUQq3JQ9bJ+cPM9pyBVndqEGdFNMK4701eJqf7HILp4k8PMOLbxNbtfdm2WrqDHcJIg4IrldQPwGENz7XtB9RG3ysltZFL1knG8+HYG1pO8Qgp2p3WGPn7wsrAKn85xQOBDlMTT+Ebs5N3zc4jP6r/BwLicgdr8Fp4BGvpUGdm/vb5dFL3tBpjbCvqwKBdU/OUh3B6KeXic8RMM3V7746R4zWD93FQ7fram6fZn0mAvnme8drKVurCt2sPdGnzqRDMYMDcg+xZQeiTMYyb4Ieb8t6llRfnoCNVPCRfMTZ86/mCJIXkUCTu6CD9xUBXunTWoqSO0f8VMHRltdTzZ/jvzIWmaF9B0kth2JQooFqUkgzA1QGYau4JJlmOCVhUruVIoYcd468tEPM6UnQJ8finFLDPmVPlqcoLD3fwcjW7LuabNyPgodK6LYTZbgxEIQ8MLzCg2IUdII35ndYP6vjiptfw8NhbZTU+CIYMINXRbVuc4W2KxMpKENIZ3FglZeiPLz2vwBT8DJ8FYA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6857.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(396003)(39830400003)(346002)(366004)(66476007)(316002)(122000001)(7696005)(86362001)(38100700002)(7416002)(5660300002)(52536014)(30864003)(8936002)(8676002)(66946007)(64756008)(66556008)(66446008)(6916009)(9686003)(26005)(478600001)(186003)(76116006)(54906003)(4326008)(83380400001)(966005)(53546011)(71200400001)(33656002)(6506007)(2906002)(55016002);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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/8?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4491
Original-Authentication-Results: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT063.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	71ad9356-908c-42b2-1a06-08d941dcd88e
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Uu4QQ7nE7DgVBQS2PFJFIo7NYteR+M9DqQSzBva4Qt5P50apueLmchcrloMgvDXP6LOkhYhaQiZDDPmqAn7iIQdBjByM78VWtR70yrA78wbhb2g+EEpA6UmN8z/zpvncIpjKrrtca7tvAfMCB7vzr35+FjKIqAwWg+8DFUj0Ak05FN2wcVEj+jp8iNbhC3BbXrXe9PNR35GZt0I8qEgVm+gzfA2O1I/GwKTaUaP4pp2l/sTSEUaHDoia2vnUeUsJJCblrJftLfF5fYQQ0ujA6GehWpQWm8FDhx9aUvKBA/i7OlbYB4f20Bn0gCEQzeX79K7p4vqHLTJDpXLTZ1OFnUWaQS7rHzlgqTh97yGNYHEmPt9cDYXqTbWSgDuBDhWs82hilsok07HtybB4FDwEeYKRRZ8dicGC7+fmzKU7+HhqBF1A8XrnbN6+e/ETcPWpejYPVFAHRQaCEVcfHHX+ve8NCnB3qrqgAcMEL5X0gqK4qIAYxHq6jN19pgz+Nyf3X5zeOCT/7ksK9Gl+Uin/U/mFRZkwaD+OjLeSm+SvB93LjORBVnUnd8XKtBKDyzA7zyXBiLjMQFIuS+41OEHSDtrCGxiwCYdeVj9btz/9CdFPKGdqm7qzwUHijde0Rpt7fAgZ7xb3oVzDWGQzURO10gp19M/DxVoRYwUT07iCZwaI2PFlL034yMJeCePQiHhb46qarzSPON8mBMzf8zrXgvHgnd81ACrCkxTtQu/OnzY/p+UKDhhZnhb2dEza13dgvRPoPXEp7okEhJOYGWbdmDaL35mSumNacbS7GjMewY9Al8+8FVY+nuk3pe+Cwm9Tha55rxQztsgiW0BE1O2Whg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(396003)(39830400003)(136003)(376002)(36840700001)(46966006)(70206006)(26005)(5660300002)(478600001)(6506007)(47076005)(82310400003)(36860700001)(8936002)(316002)(966005)(186003)(53546011)(83380400001)(52536014)(86362001)(336012)(33656002)(8676002)(2906002)(9686003)(55016002)(356005)(7696005)(54906003)(6862004)(4326008)(30864003)(81166007)(70586007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 06:51:55.8653
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 812a6e9d-56ce-46f1-2864-08d941dce02f
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT063.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6607

SGkgT2xla3NhbmRyLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFhl
bi1kZXZlbCA8eGVuLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc+IE9uIEJlaGFs
ZiBPZg0KPiBPbGVrc2FuZHINCj4gU2VudDogMjAyMeW5tDfmnIg25pelIDIwOjA3DQo+IFRvOiBX
ZWkgQ2hlbiA8V2VpLkNoZW5AYXJtLmNvbT4NCj4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0
YWJlbGxpbmlAa2VybmVsLm9yZz47IHdpbGxAa2VybmVsLm9yZzsNCj4ganVsaWVuLnRoaWVycnku
a2RldkBnbWFpbC5jb207IGt2bUB2Z2VyLmtlcm5lbC5vcmc7IHhlbi0NCj4gZGV2ZWxAbGlzdHMu
eGVuLm9yZzsgamVhbi1waGlsaXBwZUBsaW5hcm8ub3JnOyBKdWxpZW4gR3JhbGwNCj4gPGp1bGll
bkB4ZW4ub3JnPjsgQW5kcmUgUHJ6eXdhcmEgPEFuZHJlLlByenl3YXJhQGFybS5jb20+OyBNYXJj
IFp5bmdpZXINCj4gPG1hekBrZXJuZWwub3JnPjsgT2xla3NhbmRyIFR5c2hjaGVua28gPE9sZWtz
YW5kcl9UeXNoY2hlbmtvQGVwYW0uY29tPg0KPiBTdWJqZWN0OiBSZTogW0t2bXRvb2xdIFNvbWUg
dGhvdWdodHMgb24gdXNpbmcga3ZtdG9vbCBWaXJ0aW8gZm9yIFhlbg0KPiANCj4gDQo+IEhlbGxv
IFdlaSwNCj4gDQo+IA0KPiBTb3JyeSBmb3IgdGhlIGxhdGUgcmVzcG9uc2UuDQo+IEFuZCB0aGFu
a3MgZm9yIHdvcmtpbmcgaW4gdGhhdCBkaXJlY3Rpb24gYW5kIHByZXBhcmluZyB0aGUgZG9jdW1l
bnQuDQo+IA0KPiANCj4gT24gMDUuMDcuMjEgMTM6MDIsIFdlaSBDaGVuIHdyb3RlOg0KPiA+IEhp
IFN0ZWZhbm8sDQo+ID4NCj4gPiBUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuDQo+ID4NCj4gPj4g
LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogU3RlZmFubyBTdGFiZWxsaW5p
IDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPg0KPiA+PiBTZW50OiAyMDIx5bm0NuaciDMw5pelIDg6
NDMNCj4gPj4gVG86IHdpbGxAa2VybmVsLm9yZzsganVsaWVuLnRoaWVycnkua2RldkBnbWFpbC5j
b207IFdlaSBDaGVuDQo+ID4+IDxXZWkuQ2hlbkBhcm0uY29tPg0KPiA+PiBDYzoga3ZtQHZnZXIu
a2VybmVsLm9yZzsgeGVuLWRldmVsQGxpc3RzLnhlbi5vcmc7IGplYW4tDQo+IHBoaWxpcHBlQGxp
bmFyby5vcmc7DQo+ID4+IEp1bGllbiBHcmFsbCA8anVsaWVuQHhlbi5vcmc+OyBBbmRyZSBQcnp5
d2FyYSA8QW5kcmUuUHJ6eXdhcmFAYXJtLmNvbT47DQo+ID4+IE1hcmMgWnluZ2llciA8bWF6QGtl
cm5lbC5vcmc+OyBTdGVmYW5vIFN0YWJlbGxpbmkNCj4gPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+
Ow0KPiA+PiBPbGVrc2FuZHIgVHlzaGNoZW5rbyA8T2xla3NhbmRyX1R5c2hjaGVua29AZXBhbS5j
b20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbS3ZtdG9vbF0gU29tZSB0aG91Z2h0cyBvbiB1c2luZyBr
dm10b29sIFZpcnRpbyBmb3IgWGVuDQo+ID4+DQo+ID4+IEhpIFdlaSwNCj4gPj4NCj4gPj4gU29y
cnkgZm9yIHRoZSBsYXRlIHJlcGx5Lg0KPiA+Pg0KPiA+Pg0KPiA+PiBPbiBUdWUsIDE1IEp1biAy
MDIxLCBXZWkgQ2hlbiB3cm90ZToNCj4gPj4+IEhpLA0KPiA+Pj4NCj4gPj4+IEkgaGF2ZSBzb21l
IHRob3VnaHRzIG9mIHVzaW5nIGt2bXRvb2wgVmlydGlvIGltcGxlbWVudGF0aW9uDQo+ID4+PiBm
b3IgWGVuLiBJIGNvcGllZCBteSBtYXJrZG93biBmaWxlIHRvIHRoaXMgZW1haWwuIElmIHlvdSBo
YXZlDQo+ID4+PiB0aW1lLCBjb3VsZCB5b3UgcGxlYXNlIGhlbHAgbWUgcmV2aWV3IGl0Pw0KPiA+
Pj4NCj4gPj4+IEFueSBmZWVkYmFjayBpcyB3ZWxjb21lIQ0KPiA+Pj4NCj4gPj4+ICMgU29tZSB0
aG91Z2h0cyBvbiB1c2luZyBrdm10b29sIFZpcnRpbyBmb3IgWGVuDQo+ID4+PiAjIyBCYWNrZ3Jv
dW5kDQo+ID4+Pg0KPiA+Pj4gWGVuIGNvbW11bml0eSBpcyB3b3JraW5nIG9uIGFkZGluZyBWSVJU
SU8gY2FwYWJpbGl0eSB0byBYZW4uIEFuZCB3ZSdyZQ0KPiA+PiB3b3JraW5nDQo+ID4+PiBvbiBW
SVJUSU8gYmFja2VuZCBvZiBYZW4uIEJ1dCBleGNlcHQgUUVNVSBjYW4gc3VwcG9ydCB2aXJ0aW8t
bmV0IGZvcg0KPiA+PiB4ODYteGVuLA0KPiA+Pj4gdGhlcmUgaXMgbm90IGFueSBWSVJUSU8gYmFj
a2VuZCBjYW4gc3VwcG9ydCBYZW4uIEJlY2F1c2Ugb2YgdGhlDQo+ID4+IGNvbW11bml0eSdzDQo+
ID4+PiBzdHJvbmcgdm9pY2Ugb2YgT3V0LW9mLVFFTVUsIHdlIHdhbnQgdG8gZmluZCBhIGxpZ2h0
IHdlaWdodCBWSVJUSU8NCj4gPj4gYmFja2VuZCB0bw0KPiA+Pj4gc3VwcG9ydCBYZW4uDQo+IA0K
PiANCj4gWWVzLCBoYXZpbmcgc29tZXRoaW5nIGxpZ2h0IHdlaWdodCB0byBwcm92aWRlIFZpcnRp
byBiYWNrZW5kcyBmb3IgdGhlIGF0DQo+IGxlYXN0ICptYWluKiBkZXZpY2VzIChjb25zb2xlLCBi
bGssIG5ldCkNCj4gd2hpY2ggd2UgY291bGQgcnVuIG9uIFhlbiB3aXRob3V0IGFuIGV4dHJhIGVm
Zm9ydCB3b3VsZCBiZSByZWFsbHkgbmljZS4NCj4gDQo+IA0KPiA+Pj4NCj4gPj4+IFdlIGhhdmUg
YW4gaWRlYSBvZiB1dGlsaXppbmcgdGhlIHZpcnRpbyBpbXBsZW1lbnRhdG9uIG9mIGt2bXRvb2wg
Zm9yDQo+IFhlbi4NCj4gPj4gQW5kDQo+ID4+PiBXZSBrbm93IHRoZXJlIHdhcyBzb21lIGFncmVl
bWVudCB0aGF0IGt2bXRvb2wgd29uJ3QgdHJ5IHRvIGJlIGEgZnVsbA0KPiA+PiBRRU1VDQo+ID4+
PiBhbHRlcm5hdGl2ZS4gU28gd2UgaGF2ZSB3cml0dGVuIHR3byBwcm9wb3NhbHMgaW4gZm9sbG93
aW5nIGNvbnRlbnQgZm9yDQo+ID4+PiBjb21tdW5pdGllcyB0byBkaXNjdXNzIGluIHB1YmxpYzoN
Cj4gPj4+DQo+ID4+PiAjIyBQcm9wb3NhbHMNCj4gPj4+ICMjIyAxLiBJbnRyb2R1Y2UgYSBuZXcg
ImRtLW9ubHkiIGNvbW1hbmQNCj4gPj4+IDEuIEludHJvZHVjZSBhIG5ldyAiZG0tb25seSIgY29t
bWFuZCB0byBwcm92aWRlIGEgcHVyZSBkZXZpY2UgbW9kZWwNCj4gbW9kZS4NCj4gPj4gSW4NCj4g
Pj4+ICAgICB0aGlzIG1vZGUsIGt2bXRvb2wgb25seSBoYW5kbGVzIElPIHJlcXVlc3QuIFZNIGNy
ZWF0aW9uIGFuZA0KPiA+PiBpbml0aWFsaXphdGlvbg0KPiA+Pj4gICAgIHdpbGwgYmUgYnlwYXNz
ZWQuDQo+ID4+Pg0KPiA+Pj4gICAgICAqIFdlIHdpbGwgcmV3b3JrIHRoZSBpbnRlcmZhY2UgYmV0
d2VlbiB0aGUgdmlydGlvIGNvZGUgYW5kIHRoZQ0KPiByZXN0DQo+ID4+IG9mDQo+ID4+PiAgICAg
IGt2bXRvb2wsIHRvIHVzZSBqdXN0IHRoZSBtaW5pbWFsIHNldCBvZiBpbmZvcm1hdGlvbi4gQXQg
dGhlIGVuZCwNCj4gPj4gdGhlcmUNCj4gPj4+ICAgICAgd291bGQgYmUgTU1JTyBhY2Nlc3NlcyBh
bmQgc2hhcmVkIG1lbW9yeSB0aGF0IGNvbnRyb2wgdGhlIGRldmljZQ0KPiA+PiBtb2RlbCwNCj4g
Pj4+ICAgICAgc28gdGhhdCBjb3VsZCBiZSBhYnN0cmFjdGVkIHRvIGRvIGF3YXkgd2l0aCBhbnkg
S1ZNIHNwZWNpZmljcyBhdA0KPiBhbGwuDQo+ID4+IElmDQo+ID4+PiAgICAgIHRoaXMgaXMgd29y
a2FibGUsIHdlIHdpbGwgc2VuZCB0aGUgZmlyc3Qgc2V0IG9mIHBhdGNoZXMgdG8NCj4gaW50cm9k
dWNlDQo+ID4+IHRoaXMNCj4gPj4+ICAgICAgaW50ZXJmYWNlLCBhbmQgYWRhcHQgdGhlIGV4aXN0
aW5nIGt2bXRvb2wgdG8gaXQuIFRoZW4gbGF0ZXIgd2UNCj4gd2lsbA0KPiA+PiBjYW4NCj4gPj4+
ICAgICAgYWRkIFhlbiBzdXBwb3J0IG9uIHRvcCBvZiBpdC4NCj4gPj4+DQo+ID4+PiAgICAgIEFi
b3V0IFhlbiBzdXBwb3J0LCB3ZSB3aWxsIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgWGVuIGxpYnJh
cmllcywNCj4gPj4gYWxzbw0KPiA+Pj4gICAgICBhbGxvdyBwZW9wbGUgdG8gaWdub3JlIHRoZW0s
IGFzIGt2bXRvbGwgZG8gd2l0aCBvcHRpb25hbCBmZWF0dXJlcw0KPiA+PiBsaWtlDQo+ID4+PiAg
ICAgIGxpYnogb3IgbGliYWlvLg0KPiA+Pj4NCj4gPj4+ICAgICAgSWRlYWx5LCB3ZSB3YW50IHRv
IG1vdmUgYWxsIGNvZGUgcmVwbHlpbmcgb24gWGVuIGxpYnJhcmllcyB0byBhDQo+IHNldA0KPiA+
PiBvZg0KPiA+Pj4gICAgICBuZXcgZmlsZXMuIEluIHRoaXMgY2FzZSwgdGhlcyBmaWxlcyBjYW4g
b25seSBiZSBjb21waWxlZCB3aGVuIFhlbg0KPiA+Pj4gICAgICBsaWJyYXJpZXMgYXJlIGRldGVj
dGVkLiBCdXQgaWYgd2UgY2FuJ3QgZGVjb3VwbGUgdGhpcyBjb2RlDQo+ID4+IGNvbXBsZXRlbHks
DQo+ID4+PiAgICAgIHdlIG1heSBpbnRyb2R1Y2UgYSBiaXQgb2YgI2lmZGVmcyB0byBwcm90ZWN0
IHRoaXMgY29kZS4NCj4gPj4+DQo+ID4+PiAgICAgIElmIGt2bSBvciBvdGhlciBWTU0gZG8gbm90
IG5lZWQgImRtLW9ubHkiIG1vZGUuIE9yICJkbS1vbmx5IiBjYW4NCj4gbm90DQo+ID4+PiAgICAg
IHdvcmsgd2l0aG91dCBYZW4gbGlicmFyaWVzLiBXZSB3aWxsIG1ha2UgImRtLW9ubHkiIGNvbW1h
bmQNCj4gZGVwZW5kcw0KPiA+PiBvbg0KPiA+Pj4gICAgICB0aGUgcHJlc2VuY2Ugb2YgWGVuIGxp
YnJhcmllcy4NCj4gPj4+DQo+ID4+PiAgICAgIFNvIGEgbm9ybWFsIGNvbXBpbGUgKHdpdGhvdXQg
dGhlIFhlbiBsaWJyYXJpZXMgaW5zdGFsbGVkKSB3b3VsZA0KPiA+PiBjcmVhdGUNCj4gPj4+ICAg
ICAgYSBiaW5hcnkgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIGN1cnJlbnQgY29kZSwgYW5k
IG9ubHkgdGhlDQo+ID4+IHBlb3BsZQ0KPiA+Pj4gICAgICB3aG8gaGF2aW5nIFhlbiBsaWJyYXJp
ZXMgaW5zdGFsbGVkIHdvdWxkIGV2ZXIgZ2VuZXJhdGUgYSAiZG0tDQo+IG9ubHkiDQo+ID4+PiAg
ICAgIGNhcGFibGUga3ZtdG9vbC4NCj4gPj4+DQo+ID4+PiAjIyMgMi4gQWJzdHJhY3Qga3ZtdG9v
bCB2aXJ0aW8gaW1wbGVtZW50YXRpb24gYXMgYSBsaWJyYXJ5DQo+ID4+PiAxLiBBZGQgYSBrdm10
b29sIE1ha2VmaWxlIHRhcmdldCB0byBnZW5lcmF0ZSBhIHZpcnRpbyBsaWJyYXJ5LiBJbiB0aGlz
DQo+ID4+PiAgICAgc2NlbmFyaW8sIG5vdCBqdXN0IFhlbiwgYnV0IGFueSBwcm9qZWN0IGVsc2Ug
d2FudCB0byBwcm92aWRlIGENCj4gPj4+ICAgICB1c2Vyc3BhY2UgdmlydGlvIGJhY2tlbmQgc2Vy
dmljZSBjYW4gbGluayB0byB0aGlzIHZpcnRpbyBsaWJyYXJpcy4NCj4gPj4+ICAgICBUaGVzZSB1
c2VycyB3b3VsZCBiZW5lZml0IGZyb20gdGhlIFZJUlRJTyBpbXBsZW1lbnRhdGlvbiBvZg0KPiBr
dm10b29sDQo+ID4+PiAgICAgYW5kIHdpbGwgcGFydGljaXBhdGUgaW4gaW1wcm92ZW1lbnRzLCB1
cGdyYWRlcywgYW5kIG1haW50ZW5hbmNlIG9mDQo+ID4+PiAgICAgdGhlIFZJUlRJTyBsaWJyYXJp
ZXMuDQo+ID4+Pg0KPiA+Pj4gICAgICAqIEluIHRoaXMgY2FzZSwgWGVuIHBhcnQgY29kZSB3aWxs
IG5vdCB1cHN0cmVhbSB0byBrdm10b29sIHJlcG8sDQo+ID4+PiAgICAgICAgaXQgd291bGQgdGhl
biBiZSBuYXR1cmFsIHBhcnRzIG9mIHRoZSB4ZW4gcmVwbywgaW4geGVuL3Rvb2xzIG9yDQo+ID4+
PiAgICAgICAgbWFpbnRhaW5lZCBpbiBvdGhlciByZXBvLg0KPiA+Pj4NCj4gPj4+ICAgICAgICBX
ZSB3aWxsIGhhdmUgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIFZJUlRJTyBiYWNrZW5kIGZvciBYZW4s
IGp1c3QNCj4gPj4+ICAgICAgICBsaW5raW5nIHRvIGt2bXRvb2wncyBWSVJUSU8gbGlicmFyeS4N
Cj4gPj4+DQo+ID4+PiAgICAgICogVGhlIG1haW4gY2hhbmdlcyBvZiBrdm10b29sIHdvdWxkIGJl
Og0KPiA+Pj4gICAgICAgICAgMS4gU3RpbGwgbmVlZCB0byByZXdvcmsgdGhlIGludGVyZmFjZSBi
ZXR3ZWVuIHRoZSB2aXJ0aW8gY29kZQ0KPiA+Pj4gICAgICAgICAgICAgYW5kIHRoZSByZXN0IG9m
IGt2bXRvb2wsIHRvIGFic3RyYWN0IHRoZSB3aG9sZSB2aXJ0aW8NCj4gPj4+ICAgICAgICAgICAg
IGltcGxlbWVudGF0aW9uIGludG8gYSBsaWJyYXJ5DQo+ID4+PiAgICAgICAgICAyLiBNb2RpZnkg
Y3VycmVudCBidWlsZCBzeXN0ZW0gdG8gYWRkIGEgbmV3IHZpcnRpbyBsaWJyYXJ5DQo+ID4+IHRh
cmdldC4NCj4gPj4NCj4gPj4NCj4gPj4gSSBkb24ndCByZWFsbHkgaGF2ZSBhIHByZWZlcmVuY2Ug
YmV0d2VlbiB0aGUgdHdvLg0KPiA+Pg0KPiA+PiAgRnJvbSBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0
aCBYZW4gZW5hYmxlbWVudCBpbiBRRU1VLCBJIGNhbiBzYXkgdGhhdA0KPiB0aGUNCj4gPj4gWGVu
IHBhcnQgb2YgcmVjZWl2aW5nIElPIGVtdWxhdGlvbiByZXF1ZXN0cyBpcyBhY3R1YWxseSBwcmV0
dHkgbWluaW1hbC4NCj4gDQo+IEluIGdlbmVyYWwsIGJvdGggcHJvcG9zYWxzIHNvdW5kIGdvb2Qg
dG8gbWUsIHByb2JhYmx5IHdpdGggYSBsaXR0bGUNCj4gcHJlZmVyZW5jZSBmb3IgIzEsIGJ1dCBJ
IGFtIG5vdCBzdXJlIHRoYXQgSSBjYW4gc2VlIGFsbCBwaXRmYWxscyBoZXJlLg0KPiANCj4gDQo+
ID4gWWVzLCB3ZSBoYXZlIGRvbmUgc29tZSBwcm90b3R5cGluZywgYW5kIHRoZSBjb2RlIG9mIFhl
biByZWNlaXZlIElPUkVRDQo+ID4gc3VwcG9ydCBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gYSBzZXBh
cmF0ZSBuZXcgZmlsZSB3aXRob3V0IGludmFzaW9uIGludG8NCj4gPiB0aGUgZXhpc3Rpbmcga3Zt
dG9vbC4NCj4gPg0KPiA+IFRoZSBwb2ludCBpcyB0aGF0IHRoZSBkZXZpY2UgaW1wbGVtZW50YXRp
b24gY2FsbHMgdGhlIGh5cGVydmlzb3INCj4gaW50ZXJmYWNlcw0KPiA+IHRvIGhhbmRsZSB0aGVz
ZSBJT1JFUXMsIGFuZCBpcyBjdXJyZW50bHkgdGlnaHRseSBjb3VwbGVkIHRvIExpbnV4LUtWTSBp
bg0KPiB0aGUNCj4gPiBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIGRldmljZS4gV2l0aG91dCBzb21l
IGFic3RyYWN0IHdvcmssIHRoZXNlDQo+IGFkYXB0YXRpb25zDQo+ID4gY2FuIGxlYWQgdG8gbW9y
ZSBpbnRydXNpdmUgbW9kaWZpY2F0aW9ucy4NCj4gPg0KPiA+PiBTZWUgYXMgYSByZWZlcmVuY2UN
Cj4gPj4NCj4gaHR0cHM6Ly9naXRodWIuY29tL3FlbXUvcWVtdS9ibG9iLzEzZDVmODdjYzNiOTRi
ZmNjYzUwMTE0MmRmNGE3YjEyZmVlM2E2ZTcNCj4gPj4gL2h3L2kzODYveGVuL3hlbi1odm0uYyNM
MTE2My4NCj4gPj4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gcmV3b3JrIHRoZSBpbnRlcm5hbCBpbnRl
cmZhY2VzIHRoYXQgeW91IGxpc3RlZA0KPiA+PiBiZWxvdyBhcmUgZmFyIG1vcmUgImludGVyZXN0
aW5nIiB0aGFuIHRoZSBjb2RlIG5lY2Vzc2FyeSB0byByZWNlaXZlDQo+ID4+IGVtdWxhdGlvbiBy
ZXF1ZXN0cyBmcm9tIFhlbi4NCj4gDQo+IA0KPiArMQ0KPiANCj4gPj4NCj4gPiBJJ20gZ2xhZCB0
byBoZWFyIHRoYXQgOiApDQo+ID4NCj4gPj4gU28gaXQgbG9va3MgbGlrZSBvcHRpb24tMSB3b3Vs
ZCBiZSBsZXNzIGVmZm9ydHMgYW5kIGZld2VyIGNvZGUgY2hhbmdlcw0KPiA+PiBvdmVyYWxsIHRv
IGt2bXRvb2xzLiBPcHRpb24tMiBpcyBtb3JlIHdvcmsuIFRoZSBsaWJyYXJ5IGNvdWxkIGJlIG5p
Y2UNCj4gdG8NCj4gPj4gaGF2ZSBidXQgdGhlbiB3ZSB3b3VsZCBoYXZlIHRvIGJlIHZlcnkgY2Fy
ZWZ1bCBhYm91dCB0aGUgQVBJL0FCSSwNCj4gPj4gY29tcGF0aWJpbGl0eSwgZXRjLg0KPiA+Pg0K
PiA+PiBXaWxsIERlYWNvbiBhbmQgSnVsaWVuIFRoaWVycnkgbWlnaHQgaGF2ZSBhbiBvcGluaW9u
Lg0KPiA+Pg0KPiA+Pg0KPiA+IExvb2tpbmcgZm9yd2FyZCB0byBXaWxsIGFuZCBKdWxpZW4ncyBj
b21tZW50cy4NCj4gPg0KPiA+Pj4gIyMgUmV3b3JraW5nIHRoZSBpbnRlcmZhY2UgaXMgdGhlIGNv
bW1vbiB3b3JrIGZvciBhYm92ZSBwcm9wb3NhbHMNCj4gPj4+ICoqSW4ga3ZtdG9vbCwgb25lIHZp
cnR1YWwgZGV2aWNlIGNhbiBiZSBzZXBhcmF0ZWQgaW50byB0aHJlZSBsYXllcnM6KioNCj4gPj4+
DQo+ID4+PiAtIEEgZGV2aWNlIHR5cGUgbGF5ZXIgdG8gcHJvdmlkZSBhbiBhYnN0cmFjdA0KPiA+
Pj4gICAgICAtIFByb3ZpZGUgaW50ZXJmYWNlIHRvIGNvbGxlY3QgYW5kIHN0b3JlIGRldmljZSBj
b25maWd1cmF0aW9uLg0KPiA+Pj4gICAgICAgICAgVXNpbmcgYmxvY2sgZGV2aWNlIGFzIGFuIGV4
YW1wbGUsIGt2bXRvb2wgaXMgdXNpbmcgZGlza19pbWFnZQ0KPiB0bw0KPiA+Pj4gICAgICAgICAg
LSAgY29sbGVjdCBhbmQgc3RvcmUgZGlzayBwYXJhbWV0ZXJzIGxpa2U6DQo+ID4+PiAgICAgICAg
ICAgICAgLSAgYmFja2VuZCBpbWFnZSBmb3JtYXQ6IHJhdywgcWNvdyBvciBibG9jayBkZXZpY2UN
Cj4gPj4+ICAgICAgICAgICAgICAtICBiYWNrZW5kIGJsb2NrIGRldmljZSBvciBmaWxlIGltYWdl
IHBhdGgNCj4gPj4+ICAgICAgICAgICAgICAtICBSZWFkb25seSwgZGlyZWN0IGFuZCBldGMNCj4g
Pj4+ICAgICAgLSBQcm92aWRlIG9wZXJhdGlvbnMgdG8gaW50ZXJhY3Qgd2l0aCByZWFsIGJhY2tl
bmQgZGV2aWNlcyBvcg0KPiA+PiBzZXJ2aWNlczoNCj4gPj4+ICAgICAgICAgIC0gcHJvdmlkZSBi
YWNrZW5kIGRldmljZSBvcGVyYXRpb25zOg0KPiA+Pj4gICAgICAgICAgICAgIC0gYmxvY2sgZGV2
aWNlIG9wZXJhdGlvbnMNCj4gPj4+ICAgICAgICAgICAgICAtIHJhdyBpbWFnZSBvcGVyYXRpb25z
DQo+ID4+PiAgICAgICAgICAgICAgLSBxY293IGltYWdlIG9wZXJhdGlvbnMNCj4gPj4+IC0gSHlw
ZXJ2aXNvciBpbnRlcmZhY2VzDQo+ID4+PiAgICAgIC0gR3Vlc3QgbWVtb3J5IG1hcHBpbmcgYW5k
IHVubWFwcGluZyBpbnRlcmZhY2VzDQo+ID4+PiAgICAgIC0gVmlydHVhbCBkZXZpY2UgcmVnaXN0
ZXIgaW50ZXJmYWNlDQo+ID4+PiAgICAgICAgICAtIE1NSU8vUElPIHNwYWNlIHJlZ2lzdGVyDQo+
ID4+PiAgICAgICAgICAtIElSUSByZWdpc3Rlcg0KPiA+Pj4gICAgICAtIFZpcnR1YWwgSVJRIGlu
amVjdCBpbnRlcmZhY2UNCj4gPj4+ICAgICAgLSBIeXBlcnZpc29yIGV2ZW50ZmQgaW50ZXJmYWNl
DQo+ID4+IFRoZSAiaHlwZXJ2aXNvciBpbnRlcmZhY2VzIiBhcmUgdGhlIG9uZXMgdGhhdCBhcmUg
bW9zdCBpbnRlcmVzdGluZyBhcw0KPiB3ZQ0KPiA+PiBuZWVkIGFuIGFsdGVybmF0aXZlIGltcGxl
bWVudGF0aW9uIGZvciBYZW4gZm9yIGVhY2ggb2YgdGhlbS4gVGhpcyBpcw0KPiA+PiB0aGUgcGFy
dCB0aGF0IHdhcyBhIGJpdCBtb3JlIGRlbGljYXRlIHdoZW4gd2UgYWRkZWQgWGVuIHN1cHBvcnQg
dG8gUUVNVS4NCj4gPj4gRXNwZWNpYWxseSB0aGUgbWVtb3J5IG1hcHBpbmcgYW5kIHVubWFwcGlu
Zy4gQWxsIGRvYWJsZSBidXQgd2UgbmVlZA0KPiA+PiBwcm9wZXIgYWJzdHJhY3Rpb25zLg0KPiA+
Pg0KPiA+IFllcy4gR3Vlc3QgbWVtb3J5IG1hcHBpbmcgYW5kIHVubWFwcGluZywgaWYgd2UgdXNl
IG9wdGlvbiMxLCB0aGlzIHdpbGwNCj4gYmUgYQ0KPiA+IGEgYmlnIGNoYW5nZSBpbnRyb2R1Y2Vk
IGluIEt2bXRvb2wuIFNpbmNlIExpbnV4LUtWTSBndWVzdCBtZW1vcnkgaW4NCj4ga3ZtdG9vbA0K
PiA+IGlzIGZsYXQgbWFwcGVkIGluIGFkdmFuY2UsIGl0IGRvZXMgbm90IHJlcXVpcmUgZHluYW1p
YyBHdWVzdCBtZW1vcnkNCj4gbWFwcGluZw0KPiA+IGFuZCB1bm1hcHBpbmcuIEEgcHJvcGVyIGFi
c3RyYWN0IGludGVyZmFjZSBjYW4gYnJpZGdlIHRoaXMgZ2FwLg0KPiANCj4gVGhlIGxheWVyIHNl
cGFyYXRpb24gc2NoZW1lIGxvb2tzIHJlYXNvbmFibGUgdG8gbWUgYXQgZmlyc3Qgc2lnaHQuDQo+
IEFncmVlLCAiSHlwZXJ2aXNvciBpbnRlcmZhY2VzIiB3b3JyeSB0aGUgbW9zdCwgZXNwZWNpYWxs
eSAiR3Vlc3QgbWVtb3J5DQo+IG1hcHBpbmcgYW5kIHVubWFwcGluZyIgd2hpY2ggaXMgc29tZXRo
aW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IG9uIFhlbiBpbg0KPiBjb21wYXJpc29uIHdpdGggS3Zt
LiBJZiBJIGFtIG5vdCBtaXN0YWtlbiwgaW4gdGhlIFBvQyB0aGUgVmlydGlvIHJpbmcocykNCj4g
YXJlIG1hcHBlZCBhdCBvbmNlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHVubWFw
cGVkIGR1cmluZw0KPiByZWxlYXNpbmcgaXQsIHdoaWxlIHRoZSBwYXlsb2FkcyBJL08gYnVmZmVy
cyBhcmUgbWFwcGVkL3VubWFwcGVkIGF0DQo+IHJ1bi10aW1lIC4uLg0KDQpZZXMsIGN1cnJlbnQg
UG9DIHdvcmtzIGluIHRoaXMgd2F5Lg0KDQo+IElmIG9ubHkgd2UgY291bGQgbWFwIGFsbCBtZW1v
cnkgaW4gYWR2YW5jZSBhbmQganVzdCBjYWxjdWxhdGUgdmlydCBhZGRyDQo+IGF0IHJ1bi10aW1l
IGxpa2UgaXQgd2FzIGRvbmUgZm9yIEt2bSBjYXNlIGluIGd1ZXN0X2ZsYXRfdG9faG9zdCgpLiBX
aGF0DQo+IHdlIHdvdWxkIGp1c3QgbmVlZCBpcyB0byByZS1tYXAgbWVtb3J5IG9uY2UgdGhlIGd1
ZXN0IG1lbW9yeSBsYXlvdXQgaXMNCj4gY2hhbmdlZA0KDQpTb3JyeSwgSSBhbSBub3QgdmVyeSBz
dXJlIGFib3V0IGd1ZXN0IG1lbW9yeSBsYXlvdXQgY2hhbmdlZCBoZXJlPw0KR3Vlc3QgbWVtb3J5
IGhvdHBsdWc/IGJhbGxvb24/DQoNCj4gKGZvcnR1bmF0ZWx5LCB3ZSBoYXZlIGludmFsaWRhdGUg
bWFwY2FjaGUgcmVxdWVzdCB0byBzaWduYWwgYWJvdXQgdGhhdCkuDQo+IA0KPiANCj4gRllJLCBJ
IGhhZCBhIGRpc2N1c3Npb24gd2l0aCBKdWxpZW4gb24gSVJDIHJlZ2FyZGluZyBmb3JlaWduIG1l
bW9yeQ0KPiBtYXBwaW5ncyBhbmQgcG9zc2libGUgaW1wcm92ZW1lbnRzLCB0aGUgbWFpbiBwcm9i
bGVtIHRvZGF5IGlzIHRoYXQgd2UNCj4gbmVlZCB0byBzdGVhbCBwYWdlIGZyb20gdGhlIGJhY2tl
bmQgZG9tYWluIG1lbW9yeSBpbiBvcmRlciB0byBtYXAgZ3Vlc3QNCj4gcGFnZSBpbnRvIGJhY2tl
bmQgYWRkcmVzcyBzcGFjZSwgc28gaWYgd2UgZGVjaWRlIHRvIG1hcCBhbGwgbWVtb3J5IGluDQo+
IGFkdmFuY2UgYW5kIG5lZWQgdG8gc2VydmUgZ3Vlc3Qocykgd2l0aCBhIGxvdCBvZiBtZW1vcnkg
d2UgbWF5IHJ1biBvdXQNCj4gb2YgbWVtb3J5IGluIHRoZSBob3N0IHZlcnkgcXVpY2tseSAoc2Vl
IFhTQS0zMDApLiBTbyB0aGUgaWRlYSBpcyB0byB0cnkNCj4gdG8gbWFwIGd1ZXN0IG1lbW9yeSBp
bnRvIHNvbWUgdW51c2VkIGFkZHJlc3Mgc3BhY2UgcHJvdmlkZWQgYnkgdGhlDQo+IGh5cGVydmlz
b3IgYW5kIHRoZW4gaG90LXBsdWdnZWQgd2l0aG91dCBjaGFyZ2luZyByZWFsIGRvbWFpbiBwYWdl
cw0KPiAoZXZlcnl0aGluZyBub3QgbWFwcGVkIGludG8gUDJNIGNvdWxkIGJlIHRoZW9yZXRpY2Fs
bHkgdHJlYXRlZCBhcw0KPiB1bnVzZWQpLiBJIGhhdmUgYWxyZWFkeSBzdGFydGVkIGludmVzdGln
YXRpb25zLCBidXQgdW5mb3J0dW5hdGVseSBoYWQgdG8NCj4gcG9zdHBvbmUgdGhlbSBkdWUgdG8g
cHJvamVjdCByZWxhdGVkIGFjdGl2aXRpZXMsIGRlZmluaXRlbHkgSSBoYXZlIGENCj4gcGxhbiB0
byByZXN1bWUgdGhlbSBhZ2FpbiBhbmQgY3JlYXRlIGEgUG9DIGF0IGxlYXN0LiBUaGlzIHdvdWxk
IHNpbXBsaWZ5DQo+IHRoaW5ncywgaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgZWxpbWluYXRlIHRo
ZSBtZW1vcnkgcHJlc3N1cmUgaW4gdGhlIGhvc3QuDQo+IA0KDQpZZXMsIGRlZmluaXRlbHksIHdp
dGggdGhpcyBpbXByb3ZlbWVudHMsIHRoZSBnYXBzIGJldHdlZW4gS1ZNIGFuZCBYZW4NCmluIGd1
ZXN0IG1lbW9yeSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgY2FuIGJlIHJlZHVjZWQuIEF0IGxlYXN0
IHRoZQ0KbWFwcGluZy91bm1hcHBpbmcgY29kZSBlbWJlZGRpbmcgaW50byB0aGUgdmlydGlvIGRl
dmljZSBpbXBsZW1lbnRhdGlvbnMNCmluIG91ciBQb0MgaXMgbm8gbG9uZ2VyIG5lZWRlZC4NCg0K
PiANCj4gPg0KPiA+Pj4gLSBBbiBpbXBsZW1lbnRhdGlvbiBsYXllciB0byBoYW5kbGUgZ3Vlc3Qg
SU8gcmVxdWVzdC4NCj4gPj4+ICAgICAgLSBLdm10b29sIHByb3ZpZGVzIHZpcnR1YWwgZGV2aWNl
cyBmb3IgZ3Vlc3QuIFNvbWUgdmlydHVhbA0KPiBkZXZpY2VzDQo+ID4+IHR3bw0KPiA+Pj4gICAg
ICAgIGtpbmRzIG9mIGltcGxlbWVudGF0aW9uczoNCj4gPj4+ICAgICAgICAgIC0gVklSVElPIGlt
cGxlbWVudGF0aW9uDQo+ID4+PiAgICAgICAgICAtIFJlYWwgaGFyZHdhcmUgZW11bGF0aW9uDQo+
ID4+Pg0KPiA+Pj4gRm9yIGV4YW1wbGUsIGt2bXRvb2wgY29uc29sZSBoYXMgdmlydGlvIGNvbnNv
bGUgYW5kIDgyNTAgc2VyaWFsIHR3bw0KPiA+PiBraW5kcw0KPiA+Pj4gb2YgaW1wbGVtZW50YXRp
b25zLiBUaGVzZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIGRldmljZSB0eXBlDQo+ID4+IHBh
cmFtZXRlcnMNCj4gPj4+IHRvIGNyZWF0ZSBkZXZpY2VzLCBhbmQgZGVwZW5kcyBvbiBkZXZpY2Ug
dHlwZSBvcHMgdG8gZm9yd2FyZCBkYXRhDQo+ID4+IGZyb20vdG8NCj4gPj4+IHJlYWwgZGV2aWNl
LiBBbmQgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgaW52b2tlIGh5cGVydmlzb3IgaW50ZXJmYWNl
cw0KPiB0bw0KPiA+Pj4gbWFwL3VubWFwIHJlc291cmNlcyBhbmQgbm90aWZ5IGd1ZXN0Lg0KPiA+
Pj4NCj4gPj4+IEluIHRoZSBjdXJyZW50IGt2bXRvb2wgY29kZSwgdGhlIGJvdW5kYXJpZXMgYmV0
d2VlbiB0aGVzZSB0aHJlZSBsYXllcnMNCj4gPj4gYXJlDQo+ID4+PiByZWxhdGl2ZWx5IGNsZWFy
LCBidXQgdGhlcmUgYXJlIGEgZmV3IHBpZWNlcyBvZiBjb2RlIHRoYXQgYXJlIHNvbWV3aGF0DQo+
ID4+PiBpbnRlcmxlYXZlZCwgZm9yIGV4YW1wbGU6DQo+ID4+PiAtIEluIHZpcnRpb19ibGtfX2lu
aXQoLi4uKSBmdW5jdGlvbiwgdGhlIGNvZGUgd2lsbCB1c2UgZGlza19pbWFnZQ0KPiA+PiBkaXJl
Y3RseS4NCj4gPj4+ICAgIFRoaXMgZGF0YSBpcyBrdm10b29sIHNwZWNpZmllZC4gSWYgd2Ugd2Fu
dCB0byBtYWtlIFZJUlRJTw0KPiA+PiBpbXBsZW1lbnRhdGlvbg0KPiA+Pj4gICAgYmVjb21lIGh5
cGVydmlzb3IgYWdub3N0aWMuIFN1Y2gga2luZCBvZiBjb2RlIHNob3VsZCBiZSBtb3ZlZCB0bw0K
PiBvdGhlcg0KPiA+Pj4gICAgcGxhY2UuIE9yIHdlIGp1c3Qga2VlcCBjb2RlIGZyb20gdmlydGlv
X2Jsa19faW5pdF9vbmUoLi4uKSBpbg0KPiB2aXJ0aW8NCj4gPj4gYmxvY2sNCj4gPj4+ICAgIGlt
cGxlbWVudGF0aW9uLCBidXQga2VlcCB2aXJ0aW9fYmxrX19pbml0KC4uLikgaW4ga3ZtdG9vbCBz
cGVjaWZpZWQNCj4gPj4gcGFydA0KPiA+Pj4gICAgY29kZS4NCj4gPj4+DQo+ID4+PiBIb3dldmVy
LCBpbiB0aGUgY3VycmVudCBWSVJUSU8gZGV2aWNlIGNyZWF0aW9uIGFuZCBkYXRhIGhhbmRsaW5n
DQo+IHByb2Nlc3MsDQo+ID4+PiB0aGUgZGV2aWNlIHR5cGUgYW5kIGh5cGVydmlzb3IgQVBJIHVz
ZWQgYXJlIGJvdGggZXhjbHVzaXZlIHRvIGt2bXRvb2wNCj4gPj4gYW5kDQo+ID4+PiBLVk0uIElm
IHdlIHdhbnQgdG8gdXNlIGN1cnJlbnQgVklSVElPIGltcGxlbWVudGF0aW9uIGZvciBvdGhlciBk
ZXZpY2UNCj4gPj4+IG1vZGVscyBhbmQgaHlwZXJ2aXNvcnMsIGl0IGlzIHVubGlrZWx5IHRvIHdv
cmsgcHJvcGVybHkuDQo+ID4+Pg0KPiA+Pj4gU28sIHRoZSBtYWpvciB3b3JrIG9mIHJld29ya2lu
ZyBpbnRlcmZhY2UgaXMgZGVjb3VwbGluZyBWSVJUSU8NCj4gPj4gaW1wbGVtZW50YXRpb24NCj4g
Pj4+IGZyb20ga3ZtdG9vbCBhbmQgS1ZNLg0KPiA+Pj4NCj4gPj4+ICoqSW50cm9kdWNlIHNvbWUg
aW50ZXJtZWRpYXRlIGRhdGEgc3RydWN0dXJlcyB0byBkbyBkZWNvdXBsZToqKg0KPiA+Pj4gMS4g
SW50cm9kdWNlIGludGVybWVkaWRhdGUgdHlwZSBkYXRhIHN0cnVjdHVyZXMgbGlrZQ0KPiBgdmly
dGlvX2Rpc2tfdHlwZWAsDQo+ID4+PiAgICAgYHZpcnRpb19uZXRfdHlwZWAsIGB2aXJ0aW9fY29u
c29sZV90eXBlYCBhbmQgZXRjLiBUaGVzZSBkYXRhDQo+ID4+IHN0cnVjdHVyZXMNCj4gPj4+ICAg
ICB3aWxsIGJlIHRoZSBzdGFuZGFyZCBkZXZpY2UgdHlwZSBpbnRlcmZhY2VzIGJldHdlZW4gdmly
dGlvIGRldmljZQ0KPiA+Pj4gICAgIGltcGxlbWVudGF0aW9uIGFuZCBoeXBlcnZpc29yLiAgVXNp
bmcgdmlydGlvX2Rpc2tfdHlwZSBhcyBhbg0KPiBleGFtcGxlOg0KPiA+Pj4gICAgICB+fn5+DQo+
ID4+PiAgICAgIHN0cnVjdCB2aXJ0aW9fZGlza190eXBlIHsNCj4gPj4+ICAgICAgICAgIC8qDQo+
ID4+PiAgICAgICAgICAgKiBFc3NlbnRpYWwgY29uZmlndXJhdGlvbiBmb3IgdmlydGlvIGJsb2Nr
IGRldmljZSBjYW4gYmUgZ290DQo+ID4+IGZyb20NCj4gPj4+ICAgICAgICAgICAqIGt2bXRvb2wg
ZGlza19pbWFnZS4gT3RoZXIgaHlwZXJ2aXNvciBkZXZpY2UgbW9kZWwgYWxzbyBjYW4NCj4gPj4g
dXNlDQo+ID4+PiAgICAgICAgICAgKiB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIHBhc3MgbmVjZXNz
YXJ5IHBhcmFtZXRlcnMgZm9yDQo+IGNyZWF0aW5nDQo+ID4+PiAgICAgICAgICAgKiBhIHZpcnRp
byBibG9jayBkZXZpY2UuDQo+ID4+PiAgICAgICAgICAgKi8NCj4gPj4+ICAgICAgICAgIHN0cnVj
dCB2aXJ0aW9fYmxrX2NmZyB2YmxrX2NmZzsNCj4gPj4+ICAgICAgICAgIC8qDQo+ID4+PiAgICAg
ICAgICAgKiBWaXJ0aW8gYmxvY2sgZGV2aWNlIE1NSU8gYWRkcmVzcyBhbmQgSVJRIGxpbmUuIFRo
ZXNlIHR3bw0KPiA+PiBtZW1iZXJzDQo+ID4+PiAgICAgICAgICAgKiBhcmUgb3B0aW9uYWwuIElm
IGh5cGVydmlzb3IgcHJvdmlkZXMgYWxsb2NhdGVfbW1pb19zcGFjZQ0KPiBhbmQNCj4gPj4+ICAg
ICAgICAgICAqIGFsbG9jYXRlX2lycV9saW5lIGNhcGFiaWxpdHkgYW5kIGRldmljZSBtb2RlbCBk
b2Vzbid0IHNldA0KPiA+PiB0aGVzZQ0KPiA+Pj4gICAgICAgICAgICogdHdvIGZpZWxkcywgdmly
dGlvIGJsb2NrIGltcGxlbWVudGF0aW9uIHdpbGwgdXNlDQo+IGh5cGVydmlzb3INCj4gPj4gQVBJ
cw0KPiA+Pj4gICAgICAgICAgICogdG8gYWxsb2NhdGUgTU1JTyBhZGRyZXNzIGFuZCBJUlEgbGlu
ZS4gSWYgdGhlc2UgdHdvIGZpZWxkcw0KPiA+PiBhcmUNCj4gPj4+ICAgICAgICAgICAqIGNvbmZp
Z3VyZWQsIHZpcnRpbyBibG9jayBpbXBsZW1lbnRhdGlvbiB3aWxsIHVzZSB0aGVtLg0KPiA+Pj4g
ICAgICAgICAgICovDQo+ID4+PiAgICAgICAgICBwYWRkcl90IGFkZHI7DQo+ID4+PiAgICAgICAg
ICB1aW50MzJfdCBpcnE7DQo+ID4+PiAgICAgICAgICAvKg0KPiA+Pj4gICAgICAgICAgICogSW4g
a3ZtdG9vbCwgdGhpcyBvcHMgd2lsbCBjb25uZWN0IHRvIGRpc2tfaW1hZ2UgQVBJcy4NCj4gT3Ro
ZXINCj4gPj4+ICAgICAgICAgICAqIGh5cGVydmlzb3IgZGV2aWNlIG1vZGVsIHNob3VsZCBwcm92
aWRlIHNpbWlsYXIgQVBJcyBmb3INCj4gdGhpcw0KPiA+Pj4gICAgICAgICAgICogb3BzIHRvIGlu
dGVyYWN0IHdpdGggcmVhbCBiYWNrZW5kIGRldmljZS4NCj4gPj4+ICAgICAgICAgICAqLw0KPiA+
Pj4gICAgICAgICAgc3RydWN0IGRpc2tfdHlwZV9vcHMgew0KPiA+Pj4gICAgICAgICAgICAgIC5y
ZWFkDQo+ID4+PiAgICAgICAgICAgICAgLndyaXRlDQo+ID4+PiAgICAgICAgICAgICAgLmZsdXNo
DQo+ID4+PiAgICAgICAgICAgICAgLndhaXQNCj4gPj4+ICAgICAgICAgICAgICAuLi4NCj4gPj4+
ICAgICAgICAgIH0gb3BzOw0KPiA+Pj4gICAgICB9Ow0KPiA+Pj4gICAgICB+fn5+DQo+ID4+Pg0K
PiA+Pj4gMi4gSW50cm9kdWNlIGEgaW50ZXJtZWRpYXRlIGh5cGVydmlzb3IgZGF0YSBzdHJ1Y3R1
cmUuIFRoaXMgZGF0YQ0KPiA+PiBzdHJ1Y3R1cmUNCj4gPj4+ICAgICBwcm92aWRlcyBhIHNldCBv
ZiBzdGFuZGFyZCBoeXBlcnZpc29yIEFQSSBpbnRlcmZhY2VzLiBJbiB2aXJ0aW8NCj4gPj4+ICAg
ICBpbXBsZW1lbnRhdGlvbiwgdGhlIEtWTSBzcGVjaWZpZWQgQVBJcywgbGlrZSBrdm1fcmVnaXN0
ZXJfbW1pbywNCj4gd2lsbA0KPiA+PiBub3QNCj4gPj4+ICAgICBiZSBpbnZva2VkIGRpcmVjdGx5
LiBUaGUgdmlydGlvIGltcGxlbWVudGF0aW9uIHdpbGwgdXNlIHRoZXNlDQo+ID4+IGludGVyZmFj
ZXMNCj4gPj4+ICAgICB0byBhY2Nlc3MgaHlwZXJ2aXNvciBzcGVjaWZpZWQgQVBJcy4gZm9yIGV4
YW1wbGUgYHN0cnVjdCB2bW1faW1wbGA6DQo+ID4+PiAgICAgIH5+fn4NCj4gPj4+ICAgICAgc3Ry
dWN0IHZtbV9pbXBsIHsNCj4gPj4+ICAgICAgICAgIC8qDQo+ID4+PiAgICAgICAgICAgKiBQb2lu
dGVyIHRoYXQgbGluayB0byByZWFsIGh5cGVydmlzb3IgaGFuZGxlIGxpa2UgYHN0cnVjdA0KPiBr
dm0NCj4gPj4gKmt2bWAuDQo+ID4+PiAgICAgICAgICAgKiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBw
YXNzZWQgdG8gdGhlIHZtbSBvcHM7DQo+ID4+PiAgICAgICAgICAgKi8NCj4gPj4+ICAgICAgICAg
IHZvaWQgKnZtbTsNCj4gPj4+ICAgICAgICAgIGFsbG9jYXRlX2lycV9saW5lX2ZuX3Qodm9pZCog
dm1tLCAuLi4pOw0KPiA+Pj4gICAgICAgICAgYWxsb2NhdGVfbW1pb19zcGFjZV9mbl90KHZvaWQq
IHZtbSwgLi4uKTsNCj4gPj4+ICAgICAgICAgIHJlZ2lzdGVyX21taW9fZm5fdCh2b2lkKiB2bW0s
IC4uLik7DQo+ID4+PiAgICAgICAgICBtYXBfZ3Vlc3RfcGFnZV9mbl90KHZvaWQqIHZtbSwgLi4u
KTsNCj4gPj4+ICAgICAgICAgIHVubWFwX2d1ZXN0X3BhZ2VfZm5fdCh2b2lkKiB2bW0sIC4uLik7
DQo+ID4+PiAgICAgICAgICB2aXJ0dWFsX2lycV9pbmplY3RfZm5fdCh2b2lkKiB2bW0sIC4uLik7
DQo+ID4+PiAgICAgIH07DQo+ID4+PiAgICAgIH5+fn4NCj4gPj4gQXJlIHRoZSBtYXBfZ3Vlc3Rf
cGFnZSBhbmQgdW5tYXBfZ3Vlc3RfcGFnZSBmdW5jdGlvbnMgYWxyZWFkeSBjYWxsZWQgYXQNCj4g
Pj4gdGhlIGFwcHJvcHJpYXRlIHBsYWNlcyBmb3IgS1ZNPw0KPiA+IEFzIEkgaGFkIG1lbnRpb25l
ZCBpbiBhYm92ZSwgS1ZNIGRvZXNuJ3QgbmVlZCBtYXBfZ3Vlc3RfcGFnZSBhbmQNCj4gdW5tYXBf
Z3Vlc3RfcGFnZQ0KPiA+IGR5bmFtaWNhbGx5IHdoaWxlIGhhbmRsaW5nIHRoZSBJT1JFUS4gVGhl
c2UgdHdvIGludGVyZmFjZXMgY2FuIGJlDQo+IHBvaW50ZWQgdG8gTlVMTA0KPiA+IG9yIGVtcHR5
IGZ1bmN0aW9ucyBmb3IgS1ZNLg0KPiA+DQo+ID4+IElmIG5vdCwgdGhlIG1haW4gaXNzdWUgaXMg
Z29pbmcgdG8gYmUgYWRkaW5nIHRoZQ0KPiA+PiBtYXBfZ3Vlc3RfcGFnZS91bm1hcF9ndWVzdF9w
YWdlIGNhbGxzIHRvIHRoZSB2aXJ0aW8gZGV2aWNlDQo+ID4+IGltcGxlbWVudGF0aW9ucy4NCj4g
Pj4NCj4gPiBZZXMsIHdlIGNhbiBwbGFjZSB0aGVtIHRvIHZpcnRpbyBkZXZpY2UgaW1wbGVtZW50
YXRpb25zLCBhbmQga2VlcCBOT1ANCj4gPiBvcGVyYXRpb24gZm9yIEtWTS4gT3RoZXIgVk1NcyBj
YW4gYmUgaW1wbGVtZW50ZWQgYXMgdGhlIGNhc2UgbWF5IGJlDQo+ID4NCj4gPj4+IDMuIEFmdGVy
IGRlY291cGxlZCB3aXRoIGt2bXRvb2wsIGFueSBoeXBlcnZpc29yIGNhbiB1c2Ugc3RhbmRhcmQN
Cj4gPj4gYHZtbV9pbXBsYA0KPiA+Pj4gICAgIGFuZCBgdmlydGlvX3h4eHhfdHlwZWAgaW50ZXJm
YWNlcyB0byBpbnZva2Ugc3RhbmRhcmQgdmlydGlvDQo+ID4+IGltcGxlbWVudGF0aW9uDQo+ID4+
PiAgICAgaW50ZXJmYWNlcyB0byBjcmVhdGUgdmlydGlvIGRldmljZXMuDQo+ID4+PiAgICAgIH5+
fn4NCj4gPj4+ICAgICAgLyogUHJlcGFyZSBWTU0gaW50ZXJmYWNlICovDQo+ID4+PiAgICAgIHN0
cnVjdCB2bW1faW1wbCAqdm1tID0gLi4uOw0KPiA+Pj4gICAgICB2bW0tPnJlZ2lzdGVyX21taW9f
Zm5fdCA9IGt2bV9fcmVnaXN0ZXJfbW1pbzsNCj4gPj4+ICAgICAgLyoga3ZtX19tYXBfZ3VzZXRf
cGFnZSBpcyBhIHdyYXBwZXIgZ3Vlc3RfZmxhdF90b19ob3N0ICovDQo+ID4+PiAgICAgIHZtbS0+
bWFwX2d1ZXN0X3BhZ2VfZm5fdCA9IGt2bV9fbWFwX2d1c2V0X3BhZ2U7DQo+ID4+PiAgICAgIC4u
Lg0KPiA+Pj4NCj4gPj4+ICAgICAgLyogUHJlcGFyZSB2aXJ0aW9fZGlza190eXBlICovDQo+ID4+
PiAgICAgIHN0cnVjdCB2aXJ0aW9fZGlza190eXBlICp2ZGlza190eXBlID0gLi4uOw0KPiA+Pj4g
ICAgICB2ZGlza190eXBlLT52YmxrX2NmZy5jYXBhY2l0eSA9IGRpc2tfaW1hZ2UtPnNpemUgLyBT
RUNUT1JfU0laRTsNCj4gPj4+ICAgICAgLi4uDQo+ID4+PiAgICAgIHZkaXNrX3R5cGUtPm9wcy0+
cmVhZCA9IGRpc2tfaW1hZ2VfX3JlYWQ7DQo+ID4+PiAgICAgIHZkaXNrX3R5cGUtPm9wcy0+d3Jp
dGUgPSBkaXNrX2ltYWdlX193cml0ZTsNCj4gPj4+ICAgICAgLi4uDQo+ID4+Pg0KPiA+Pj4gICAg
ICAvKiBJbnZva2UgVklSVElPIGltcGxlbWVudGF0aW9uIEFQSSB0byBjcmVhdGUgYSB2aXJ0aW8g
YmxvY2sNCj4gZGV2aWNlDQo+ID4+ICovDQo+ID4+PiAgICAgIHZpcnRpb19ibGtfX2luaXRfb25l
KHZtbSwgdmRpc2tfdHlwZSk7DQo+ID4+PiAgICAgIH5+fn4NCj4gPj4+DQo+ID4+PiBWSVJUSU8g
YmxvY2sgZGV2aWNlIHNpbXBsZSBmbG93IGJlZm9yZSByZXdvcmtpbmcgaW50ZXJmYWNlOg0KPiA+
Pj4NCj4gPj4NCj4gaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xazBHcmQ0UlN1Q21o
S1VQa3RIajlGUmFtRVlyUENGa1gvdmlldz91c3ANCj4gPj4gPXNoYXJpbmcNCj4gPj4+ICFbaW1h
Z2VdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS91Yz9leHBvcnQ9dmlldyZpZD0xazBHcmQ0UlN1
Q21oS1VQa3QNCj4gSGoNCj4gPj4gOUZSYW1FWXJQQ0ZrWCkNCj4gPj4+IFZJUlRJTyBibG9jayBk
ZXZpY2Ugc2ltcGxlIGZsb3cgYWZ0ZXIgcmV3b3JraW5nIGludGVyZmFjZToNCj4gPj4+DQo+ID4+
DQo+IGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMXJNWFJ2dWx3bFJPMzlqdVdmMDhX
Z2szRzFOWnRHMm5ML3ZpZXc/dXNwDQo+ID4+ID1zaGFyaW5nDQo+ID4+PiAhW2ltYWdlXShodHRw
czovL2RyaXZlLmdvb2dsZS5jb20vdWM/ZXhwb3J0PXZpZXcmaWQ9MXJNWFJ2dWx3bFJPMzlqdVdm
DQo+IDA4DQo+ID4+IFdnazNHMU5adEcybkwpDQo+IA0KPiBDb3VsZCB5b3UgcGxlYXNlIHByb3Zp
ZGUgYW4gYWNjZXNzIGZvciB0aGVzZSBkb2N1bWVudHMgaWYgcG9zc2libGU/DQo+IA0KDQpDYW4g
eW91IGFjY2VzcyB0aGVtIHRocm91Z2ggdGhlc2UgdHdvIGxpbmtzPw0KaHR0cHM6Ly9kcml2ZS5n
b29nbGUuY29tL2ZpbGUvZC8xck1YUnZ1bHdsUk8zOWp1V2YwOFdnazNHMU5adEcybkwvdmlldz91
c3A9c2hhcmluZw0KaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xazBHcmQ0UlN1Q21o
S1VQa3RIajlGUmFtRVlyUENGa1gvdmlldz91c3A9c2hhcmluZw0KSSBhbSBzb3JyeSBJIGhhZCBz
ZXQgdGhlIHdyb25nIHNoYXJpbmcgb3B0aW9uIGZvciB0aGUgc2Vjb25kIG9uZSENCg0KPiANCj4g
Pj4+DQo+ID4+PiBUaGFua3MsDQo+ID4+PiBXZWkgQ2hlbg0KPiA+Pj4gSU1QT1JUQU5UIE5PVElD
RTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUNCj4g
Pj4gY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5v
dCB0aGUgaW50ZW5kZWQNCj4gPj4gcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIg
aW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUNCj4gPj4gY29udGVudHMgdG8gYW55
IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weQ0K
PiB0aGUNCj4gPj4gaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KPiA+IElN
UE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNo
bWVudHMgYXJlDQo+IGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYg
eW91IGFyZSBub3QgdGhlIGludGVuZGVkDQo+IHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUg
c2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlDQo+IGNvbnRlbnRzIHRv
IGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNv
cHkgdGhlDQo+IGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCj4gDQo+IC0t
DQo+IFJlZ2FyZHMsDQo+IA0KPiBPbGVrc2FuZHIgVHlzaGNoZW5rbw0KPiANCg0K


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:52:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:52:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152895.282460 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Ntp-0001yQ-K5; Thu, 08 Jul 2021 06:52:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152895.282460; Thu, 08 Jul 2021 06:52:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Ntp-0001yJ-H4; Thu, 08 Jul 2021 06:52:41 +0000
Received: by outflank-mailman (input) for mailman id 152895;
 Thu, 08 Jul 2021 06:52:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1Nto-0001y6-M2
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 06:52:40 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 83b7014e-ae78-4a1d-9b8e-8e9f13c8cc68;
 Thu, 08 Jul 2021 06:52:39 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2107.outbound.protection.outlook.com [104.47.17.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-hrloLkyTMG-oaWVi1Q547g-1; Thu, 08 Jul 2021 08:52:37 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3117.eurprd04.prod.outlook.com (2603:10a6:802:6::32) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Thu, 8 Jul
 2021 06:52:33 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 06:52:33 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0013.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.8 via Frontend Transport; Thu, 8 Jul 2021 06:52:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 83b7014e-ae78-4a1d-9b8e-8e9f13c8cc68
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625727158;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=MP+NHmOhOR9FUeuSZLn1wOVcE4VHHx3OuaTMn1B1Ufc=;
	b=I/qx2XpsolWTc/wgvXX+S1m3g8w3/G+80g+z4b/AwB0XJUgiwlXSL3iL1YuQwsFNbt/l+n
	tW5QEhMJy4dLLUHOmrIQgwpcBlHGk1nrkUoD88Wvk12NAXxH5DoCPCJJS8PrbdxmvFjL5f
	dJF4rfD0PqESsNOYbWhfysYu5R8xpyw=
X-MC-Unique: hrloLkyTMG-oaWVi1Q547g-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=d71zlIvzTdLpezd8srRq6i9qV61chMF9ODQbVTQVzJe2mAVDcB0+GmEvCbnu0OxjIlaiV6UjZ91JVlMRr98rtmPgyTFYZ2AIUoKI6CuoKoSmQWZ7laCLTN8OJBYZp02e1UF7lvTusPWxKC69RSWRShoXyPGl4fcDfftJTlIyNF4bkDVM28tu5HETXDHmTKQO5+bP0CZvRbIntvhBiFpJMnJOvvayRdJJb6OAFbHEoFcU6vzc2Jd7fsp59mm1B7290uxP8xdKMal7aNkuDYUkM62UAFn7plEqkIMAKATXE4j0FlEDIxLBHA18mw+69AAPazK/GeflJKxM83d5wwojkg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MP+NHmOhOR9FUeuSZLn1wOVcE4VHHx3OuaTMn1B1Ufc=;
 b=l46XNCM4JG2xHHqAy5Mrf2CiTau/4iRH9uLUy6vVHe60Kwb1geSwoV0WaHRfyFZw1HPUb3wf3LLGiCTqXbolfWFthrjc8CmuFCKcPhTq/bXs40LsJnOuR9CWkxthL+seK+kYzek+GYCDf8M64/ffZlpyh8UQYK7mcVzzJg0kNJzIclbE7mcVck9xZj+qpxxIy2WRc6GYECUS4a+doBKeWnP+RaC7yzruJ518dyBsHfO2sQCky9lR/122m9pCE9BmXeNXZlrj0u4WA3ZvG0gamACKurM1AAztQRkN/7PO+5yOyuxwHJoKKEJyz6l1zSLmX4pEkhcq3oo8Vsmi7Zbmhw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: vger.kernel.org; dkim=none (message not signed)
 header.d=none;vger.kernel.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
To: Juergen Gross <jgross@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
 <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
 <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
 <7f606c27-173a-542d-406d-196dae784edd@suse.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <fbd099f3-4d62-e0f6-1bad-6d317428051e@suse.com>
Date: Thu, 8 Jul 2021 08:52:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <7f606c27-173a-542d-406d-196dae784edd@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0013.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:15::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 560b950d-fd9c-4978-3f35-08d941dcf63b
X-MS-TrafficTypeDiagnostic: VI1PR04MB3117:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3117C4739CA41DD27DF6E003B3199@VI1PR04MB3117.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	A/9we6e9+DV4TdluH37oUdB9HVshATA/q/Y0PRf3604XuM4LBfX2xDSrsxVUgTvpCHSTAyp9tKYweNBLOPxzg81eOj2M0orkxr/vuaoy7O3z7AHQE6stXjl2gZqbCwTeNwJRnDGS8wrFpCIgDbTI7Ok7g3N0j7JHJpF9VsE8xVyBTGUivHsLJiX85NdGUSk/wxsWOjwJOuGwTNZf5Jn0Px6KxWmUMLqSf463M9CcdhFtAh0XNmSbE9xbAyJseo85YOB7v+Xu/ArNP6ErTUfPWZExrpVOi9YR4uDYFap7purtmqTYeu+H0VZg8MQysnYa4C/Wm24oG5PrKXRfg04r5wpm6KNpC2Nsd+t+WMFo4UHw7gWmpTryWb7Qrx1u5wHjH53gznkjNpA50jD2xjBEI0liZ4xkE+LzGB+BdDv+J56IJizu8uBInUekNCZRFQV5YKYc+BCLs/jYmANcZwjlvx1uRsczopfH7zHDHrdR33rlCVmQV4QN9pIJnfadFNs+QPbjXZYei1O04vPmOoBRN39qBQ+mBaxfyi/WvnilBbiBSqRv9lmPmyXeLfHfFfu3XS1s0vwsVTCkdA5vvF5KDsUCDgWBkWGFejMXrF655es8SP6S8RfcM1mXdLo/yIBs+C/ILQ9FrceKs8zn3NyO8DKvrk3Bymi8/wPWdVLMxupJB205CA/I+woiN3QqRlzd6qq5WKEZbXlUbG8eaPIGYSYoWMTV3t9ArEbie83+3bUudg3G7+xcZu5IRVoLZZh6
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(346002)(136003)(376002)(39850400004)(54906003)(8936002)(2906002)(6636002)(2616005)(5660300002)(83380400001)(956004)(66556008)(36756003)(37006003)(478600001)(31696002)(26005)(316002)(8676002)(66476007)(186003)(16576012)(38100700002)(66946007)(6862004)(31686004)(4326008)(86362001)(6486002)(53546011)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?/U2uDBzUNCHZRsB0iLbb6ALgbrbzmk1F4kLbb33?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 560b950d-fd9c-4978-3f35-08d941dcf63b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 06:52:33.0923
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Vli2JyaS8h1sMq4yORG4hHk8vEMxMDx0LvZ/ijBnF3Em/SFo+cdZfHCluyNhWk04C8yi/DZbtdcoOp7D1doGSw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3117

On 08.07.2021 08:40, Juergen Gross wrote:
> On 08.07.21 08:37, Jan Beulich wrote:
>> On 08.07.2021 07:47, Juergen Gross wrote:
>>> On 17.05.21 17:33, Jan Beulich wrote:
>>>> On 17.05.2021 17:22, Juergen Gross wrote:
>>>>> On 17.05.21 17:12, Jan Beulich wrote:
>>>>>> On 17.05.2021 16:23, Juergen Gross wrote:
>>>>>>> On 17.05.21 16:11, Jan Beulich wrote:
>>>>>>>> On 13.05.2021 12:02, Juergen Gross wrote:
>>>>>>>>> @@ -1574,10 +1580,16 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>>>>>>>>>      	spin_lock_irqsave(&rinfo->ring_lock, flags);
>>>>>>>>>       again:
>>>>>>>>>      	rp = rinfo->ring.sring->rsp_prod;
>>>>>>>>> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
>>>>>>>>> +		pr_alert("%s: illegal number of responses %u\n",
>>>>>>>>> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
>>>>>>>>> +		goto err;
>>>>>>>>> +	}
>>>>>>>>>      	rmb(); /* Ensure we see queued responses up to 'rp'. */
>>>>>>>>
>>>>>>>> I think you want to insert after the barrier.
>>>>>>>
>>>>>>> Why? The relevant variable which is checked is "rp". The result of the
>>>>>>> check is in no way depending on the responses themselves. And any change
>>>>>>> of rsp_cons is protected by ring_lock, so there is no possibility of
>>>>>>> reading an old value here.
>>>>>>
>>>>>> But this is a standard double read situation: You might check a value
>>>>>> and then (via a separate read) use a different one past the barrier.
>>>>>
>>>>> Yes and no.
>>>>>
>>>>> rsp_cons should never be written by the other side, and additionally
>>>>> it would be read multiple times anyway.
>>>>
>>>> But I'm talking about rsp_prod, as that's what rp gets loaded from.
>>>
>>> Oh, now I get your problem.
>>>
>>> But shouldn't that better be solved by using READ_ONCE() for reading rp
>>> instead?
>>
>> Not sure - the rmb() is needed anyway aiui, and hence you could as well
>> move your code addition.
> 
> Sure.
> 
> My question was rather: does the rmb() really eliminate the possibility
> of a double read introduced by the compiler? If yes, moving the code is
> the correct solution.

It doesn't eliminate the possibility of a double read, but (leaving
aside split accesses) that's not what you care about here. What you
need is a single stable value to operate on. No matter how many
(non-split) reads the compiler may issue to fill "rp", the final
read's value will be used in the subsequent calculation. Or at
least that's been my understanding; thinking about it the compiler
might issue multiple reads into distinct registers ahead of the
barrier, and use different registers for different subsequent
operations. While this would look like intentionally inefficient
code generation to me, you may indeed want to play safe and use
ACCESS_ONCE() _and_ the barrier. I guess there are more places then
which would want similar treatment, and it's not a problem that
this change introduces ...

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:54:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:54:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152900.282472 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Nvm-0002jJ-2P; Thu, 08 Jul 2021 06:54:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152900.282472; Thu, 08 Jul 2021 06:54:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Nvl-0002jC-Uf; Thu, 08 Jul 2021 06:54:41 +0000
Received: by outflank-mailman (input) for mailman id 152900;
 Thu, 08 Jul 2021 06:54:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1Nvk-0002iy-U4
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 06:54:40 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.163])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5d336f9c-dfb9-11eb-855c-12813bfff9fa;
 Thu, 08 Jul 2021 06:54:39 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx686sbYW8
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 08:54:37 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5d336f9c-dfb9-11eb-855c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625727277;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=+wON1GhjyCEn0KMzHsZrMJEuzljBNMj0Axm+cej/8jA=;
    b=ANc7PUq8f1eL1kIe715R0tApagnN6wsWNX84Ak1qNStV2PEWpFBTWsSMs0tQOmJwyT
    5FtvblIngDuJ5Qs8djCA7WvEfSa6KZESfShJWFzksqFmoCW7sspxh2hSBGYM/VR9Pmb/
    DpMFWIAvII0HKX0pnMS0++A9TBV8DUzoOTkMyd8xu5KvHLIIggvUOl/p9fSiYcLSt5uF
    xU/MRU3pfVhvyv7Xn9kHvnI1fwZsFaXX560D9pkI+kHuLMLMxuKY9NUeyY3CiihVENc+
    t7C2G7isa4gU1fkwXpssAegK9rebVDiQrnbN1NKKHLa6Rpno+sdbVZT3zoDOHyEsXcK7
    ioDQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1] automation: collect log files in subdirectories
Date: Thu,  8 Jul 2021 08:54:35 +0200
Message-Id: <20210708065435.24515-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The current single *.log pattern collects just config.log, which
usually contains little useful information.
Collect also log files in subdirectories, tools/config.log usually
contains information about configure failures.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/gitlab-ci/build.yaml | 1 +
 1 file changed, 1 insertion(+)

No idea if the syntax is correct, and how I would test such changes myself.

diff --git a/automation/gitlab-ci/build.yaml b/automation/gitlab-ci/build.yaml
index 20d1d0cb34..d177da1710 100644
--- a/automation/gitlab-ci/build.yaml
+++ b/automation/gitlab-ci/build.yaml
@@ -8,6 +8,7 @@
       - binaries/
       - xen-config
       - '*.log'
+      - '*/*.log'
     when: always
   except:
     - master


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 06:56:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 06:56:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152906.282483 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Nx7-0003ME-D9; Thu, 08 Jul 2021 06:56:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152906.282483; Thu, 08 Jul 2021 06:56:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Nx7-0003M7-8w; Thu, 08 Jul 2021 06:56:05 +0000
Received: by outflank-mailman (input) for mailman id 152906;
 Thu, 08 Jul 2021 06:56:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1Nx5-0003Lg-FZ
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 06:56:03 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8e7392bc-dfb9-11eb-855c-12813bfff9fa;
 Thu, 08 Jul 2021 06:56:02 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 6D88B21F87;
 Thu,  8 Jul 2021 06:56:01 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 28E9613743;
 Thu,  8 Jul 2021 06:56:01 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id V5kKCIGh5mDDEAAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 06:56:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8e7392bc-dfb9-11eb-855c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625727361; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=pzpJd3wum4aNU6Y2GxC23OoRKpVJ36kzq4QF+hF+b2M=;
	b=ZnxekhEJ4KE96uKTKCiRKpRw0ZWRYRbFPM3Vcn/Euf6ob40iij//2fXiJFRR2EvBGg6akw
	/4xynNwA2HJN86WzVtgNEMXngDgYgzhxHl0JqMgxMxY6MSC4X5EEXJyEeFhK8rcYhtWPdv
	8R3OZwYxVmImQ+xAD0pDDi8YNt8n4vA=
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
To: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
 <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
 <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
 <7f606c27-173a-542d-406d-196dae784edd@suse.com>
 <fbd099f3-4d62-e0f6-1bad-6d317428051e@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <0fec3ba6-266d-260e-716a-ae33d7670d34@suse.com>
Date: Thu, 8 Jul 2021 08:56:00 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <fbd099f3-4d62-e0f6-1bad-6d317428051e@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="iZDWzuLK32AToNJitjcVRgYW0sgvaJdX9"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--iZDWzuLK32AToNJitjcVRgYW0sgvaJdX9
Content-Type: multipart/mixed; boundary="qwxjABwKaKe3ZcM8poVIJe67PZhiHrrfz";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Message-ID: <0fec3ba6-266d-260e-716a-ae33d7670d34@suse.com>
Subject: Re: [PATCH 4/8] xen/blkfront: don't trust the backend response data
 blindly
References: <20210513100302.22027-1-jgross@suse.com>
 <20210513100302.22027-5-jgross@suse.com>
 <315ad8b9-8a98-8d3e-f66c-ab32af2731a8@suse.com>
 <6095c4b9-a9bb-8a38-fb6c-a5483105b802@suse.com>
 <a19a13ba-a386-2808-ad85-338d47085fa6@suse.com>
 <030ef85e-b5af-f46e-c8dc-88b8d195c4e1@suse.com>
 <477f01cd-8793-705c-10f9-cf0c0cd6ed84@suse.com>
 <dca55162-ec2e-682a-824d-b657a6407249@suse.com>
 <5a9dcc69-385a-eda5-6974-cb962ae62601@suse.com>
 <7f606c27-173a-542d-406d-196dae784edd@suse.com>
 <fbd099f3-4d62-e0f6-1bad-6d317428051e@suse.com>
In-Reply-To: <fbd099f3-4d62-e0f6-1bad-6d317428051e@suse.com>

--qwxjABwKaKe3ZcM8poVIJe67PZhiHrrfz
Content-Type: multipart/mixed;
 boundary="------------EDFAA6DF7F3CF735D9D48B84"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------EDFAA6DF7F3CF735D9D48B84
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 08.07.21 08:52, Jan Beulich wrote:
> On 08.07.2021 08:40, Juergen Gross wrote:
>> On 08.07.21 08:37, Jan Beulich wrote:
>>> On 08.07.2021 07:47, Juergen Gross wrote:
>>>> On 17.05.21 17:33, Jan Beulich wrote:
>>>>> On 17.05.2021 17:22, Juergen Gross wrote:
>>>>>> On 17.05.21 17:12, Jan Beulich wrote:
>>>>>>> On 17.05.2021 16:23, Juergen Gross wrote:
>>>>>>>> On 17.05.21 16:11, Jan Beulich wrote:
>>>>>>>>> On 13.05.2021 12:02, Juergen Gross wrote:
>>>>>>>>>> @@ -1574,10 +1580,16 @@ static irqreturn_t blkif_interrupt(int=
 irq, void *dev_id)
>>>>>>>>>>       	spin_lock_irqsave(&rinfo->ring_lock, flags);
>>>>>>>>>>        again:
>>>>>>>>>>       	rp =3D rinfo->ring.sring->rsp_prod;
>>>>>>>>>> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
>>>>>>>>>> +		pr_alert("%s: illegal number of responses %u\n",
>>>>>>>>>> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
>>>>>>>>>> +		goto err;
>>>>>>>>>> +	}
>>>>>>>>>>       	rmb(); /* Ensure we see queued responses up to 'rp'. */=

>>>>>>>>>
>>>>>>>>> I think you want to insert after the barrier.
>>>>>>>>
>>>>>>>> Why? The relevant variable which is checked is "rp". The result =
of the
>>>>>>>> check is in no way depending on the responses themselves. And an=
y change
>>>>>>>> of rsp_cons is protected by ring_lock, so there is no possibilit=
y of
>>>>>>>> reading an old value here.
>>>>>>>
>>>>>>> But this is a standard double read situation: You might check a v=
alue
>>>>>>> and then (via a separate read) use a different one past the barri=
er.
>>>>>>
>>>>>> Yes and no.
>>>>>>
>>>>>> rsp_cons should never be written by the other side, and additional=
ly
>>>>>> it would be read multiple times anyway.
>>>>>
>>>>> But I'm talking about rsp_prod, as that's what rp gets loaded from.=

>>>>
>>>> Oh, now I get your problem.
>>>>
>>>> But shouldn't that better be solved by using READ_ONCE() for reading=
 rp
>>>> instead?
>>>
>>> Not sure - the rmb() is needed anyway aiui, and hence you could as we=
ll
>>> move your code addition.
>>
>> Sure.
>>
>> My question was rather: does the rmb() really eliminate the possibilit=
y
>> of a double read introduced by the compiler? If yes, moving the code i=
s
>> the correct solution.
>=20
> It doesn't eliminate the possibility of a double read, but (leaving
> aside split accesses) that's not what you care about here. What you
> need is a single stable value to operate on. No matter how many
> (non-split) reads the compiler may issue to fill "rp", the final
> read's value will be used in the subsequent calculation. Or at
> least that's been my understanding; thinking about it the compiler
> might issue multiple reads into distinct registers ahead of the
> barrier, and use different registers for different subsequent
> operations. While this would look like intentionally inefficient
> code generation to me, you may indeed want to play safe and use
> ACCESS_ONCE() _and_ the barrier. I guess there are more places then
> which would want similar treatment, and it's not a problem that
> this change introduces ...

Nevertheless I think I can change it right away. It will also help
against load tearing.


Juergen

--------------EDFAA6DF7F3CF735D9D48B84
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------EDFAA6DF7F3CF735D9D48B84--

--qwxjABwKaKe3ZcM8poVIJe67PZhiHrrfz--

--iZDWzuLK32AToNJitjcVRgYW0sgvaJdX9
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDmoYAFAwAAAAAACgkQsN6d1ii/Ey+8
hwf9HndM8XWYHXr73UbskVZip/eM/AyRiyuc8mneuBGjivFC/ycCeFwoe+iAEsc0H2F5Edl1jAB7
5a4NqjIBQx9tpLwsggRWDUXQNhprdY1dbK/mkeqhELciVuW1blfjqlASlbi8BgIpizHo9ep/i5uC
97NBzCfQYUi3ZiKtFXecCX5ETPyc8OJWOMBvynDrJZ3Oahc88f8X3FYbFSYy1VYnRI7txGygEck5
Kyf6wiZw88afh3qc+MAq5Y4EeppwMIZ2sgE5ei/YtNdkII77hyI3L7AMmqCTIGdr98fr7QID32fc
8ZI9SiOqAXPThMQZhktOMmuBnwtH4wHGhfkM9+PGUg==
=OUo5
-----END PGP SIGNATURE-----

--iZDWzuLK32AToNJitjcVRgYW0sgvaJdX9--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 07:21:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 07:21:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152913.282497 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1OLn-0006Wh-Eo; Thu, 08 Jul 2021 07:21:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152913.282497; Thu, 08 Jul 2021 07:21:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1OLn-0006Wa-BZ; Thu, 08 Jul 2021 07:21:35 +0000
Received: by outflank-mailman (input) for mailman id 152913;
 Thu, 08 Jul 2021 07:21:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1OLl-0006VD-HE
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 07:21:33 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 108ebf69-5d7d-4b64-868d-284b5e8d8c7a;
 Thu, 08 Jul 2021 07:21:32 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2108.outbound.protection.outlook.com [104.47.17.108])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-14-y-afDG7AM46Vq-UqVCcZmg-1; Thu, 08 Jul 2021 09:21:30 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2605.eurprd04.prod.outlook.com (2603:10a6:800:57::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Thu, 8 Jul
 2021 07:21:28 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 07:21:28 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0051.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:55::26) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.21 via Frontend Transport; Thu, 8 Jul 2021 07:21:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 108ebf69-5d7d-4b64-868d-284b5e8d8c7a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625728890;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=ZZpAvKtmohzarK4azDYvQ9FxhhTmCdU3uZXkZyb9qg8=;
	b=lA0Z1vaft3YlxuFjkNkXdfw2T0VyaAllMwMurP3VUX4RqLDFMJ8B8FQvmxBTg3C9n3wwn9
	whenGkSVIrk6wo9j85x75WGbw2UeU0gVQKEFU/8tPp6YLCqHxrmPuV1GXZC59tnLQ16H0f
	8UxIbRo1eoaWeabzucuJEO6AFOr5TLA=
X-MC-Unique: y-afDG7AM46Vq-UqVCcZmg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Wva8rqJuInerYX0AeSLayJeRQRyYIOLXF5AcUGZ6CH7By6UE3RcIIDTcaLjWrT1HhTd0Rx8Cj2sWvNf/oKzwaVsb2xG9HLBfu3EOvAV9p79l5R6wka9CWsKRzmWwbrRZSTAGSUGyiLcYMC8W8bjmQOEBS2MQv3Jwd/BvNkzI3hPgH+88N3FcRpRkJojcZwemOLr9dlR52YX5Dq0e2OAkzGvhPoPiSxCy4pRVLhKmTIuXgNOmYAJJtpYJWNV8s8Z4r3wNVsL/RtYK4IEB8QYFx3p0NeLv2LgNllEuE61WmJAvERAXXW6walyvR3CV5Z1PwYP6TY6ZWjgX4WgJ3d/FnQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZZpAvKtmohzarK4azDYvQ9FxhhTmCdU3uZXkZyb9qg8=;
 b=YVYGn3YSiYodBqUUtLQyxUBQ8zdaMlZoHpfva+yseyWG7m1J6b83Sm4oWI6zCR/WDX8axS2jqBu76OBK6vVidLxEDF68YkbWSuAmBezpGauNZ7wDaSeRU44r4gYj0r++rdSFCOAOosv3WhHrTVliSXbCFrdAuT5tCLsA6TJ/bXCeNQk2nMfvzlTUHuKV1XfAl5XmMuUymakHs6pAo6JrBIvTjybSOvsCqSKJSCe+6B3dTXOo89lMMNq+v8nIvooeUoEKfAsjtpuGpTuYyD4bxQ6oS+2ueo4h6RA48yf+zeM8KUpSJ8Gf0+69rJ6rlOMgrEWV7UYFNhIGNIKLL8ZWzw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: qq.com; dkim=none (message not signed)
 header.d=none;qq.com; dmarc=none action=none header.from=suse.com;
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Rroach <2284696125@qq.com>
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH] x86/PV: address odd UB in I/O emulation
Message-ID: <b9bbc584-db3c-0b03-0314-3dd907f645bc@suse.com>
Date: Thu, 8 Jul 2021 09:21:26 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0051.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:55::26) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 22a18163-c9e6-4573-28bd-08d941e100a2
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2605:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26058CDC3DBCF69C684AF90CB3199@VI1PR0401MB2605.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	xgYJbeM9nFRly+TJ4pH6A07O1biOJbL7UfZlz749mA9NMq39zvRPZr5ttDXm02+bl+lvubtAiwAnky1+hyH47S+sPc1pke5IxT16D5tjjBzgzCtl0A6/nwGZJ7dMhtj5o0+sOqbRlEJ7A2NrUTBD73YiUoOSUzcbsCPagzdGesuZ0jY3E3H7CxU9jWHggtvgyDoX6E15WKD5rDlXFJeQbi1qfMq16uZcBizV5NWVEVgIRYZIhuskZ8lAaMY4jMOw4rSoZAF+9z7mDCmsO0tWs+k6+o1/V3Qhg80O/9uuAQE1C+ko/QjBPgTJwP9Brc8DNNIAntL+kftnzzYpRvO2w174ZDFvbr6TTgS2Ye5S8FxeOnSjmEFH2+RJpReRDpYp31ogj6PLynfFflEKNjbi+mOikSNSBB3gWNmeHkAHOiGKKhCLmwPYERlUOQAyQCc99ns1hXaLBRyQt3NhG7ldcOr/Bc2yF5wN5jhTdYEq5fmzLJzhcZD+dSlPkFqryHZtvngIGD/n3ZlUzJMlKGymyIR+ETgONEvqJFDl3eAzIRU8svOoNUzyLl/UW5csUUWEC1VUpQq2a7JIuiBm4uNe9e3ZVjJn2kw2jUPlGrXu9TlcCd6FVV/tyqWBw1dW2VcrtNypI2GJ1yK5cM9KbHIwPQpL5dLOXdwA7G4ipzMP5hHrn06xH1i9y32Bkcw1cSxek8s+bvQ1i+1cFgNAuVdyR5B7xIBCaeFcp8Crm6p8QGI=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(396003)(376002)(136003)(366004)(31686004)(66556008)(186003)(36756003)(38100700002)(83380400001)(86362001)(66476007)(478600001)(6486002)(4326008)(2906002)(316002)(8936002)(8676002)(6916009)(5660300002)(2616005)(16576012)(54906003)(66946007)(956004)(26005)(31696002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 22a18163-c9e6-4573-28bd-08d941e100a2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 07:21:28.4569
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 8g9KXORZDCd1dvLuxZlfR/s4W2dXj/iJi42a94p+t5u2BVJBz2q9eCStd/zl0DFDu6MUaFEpVMP+CtwbTl6Bsg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2605

Compilers are certainly right in detecting UB here, given that fully
parenthesized (to express precedence) the original offending expression
was (((stub_va + p) - ctxt->io_emul_stub) + 5), which in fact exhibits
two overflows in pointer calculations. We really want to calculate
(p - ctxt->io_emul_stub) first, which is guaranteed to not overflow.

The issue was observed with clang 9 on 4.13.

The oddities are
- the issue was detected on APPEND_CALL(save_guest_gprs), despite the
  earlier similar APPEND_CALL(load_guest_gprs),
- merely casting the original offending expression to long was reported
  to also help.

While at it also avoid converting guaranteed (with our current address
space layout) negative values to unsigned long (which has implementation
defined behavior): Have stub_va be of pointer type. And since it's on an
immediately adjacent line, also constify this_stubs.

Fixes: d89e5e65f305 ("x86/ioemul: Rewrite stub generation to be shadow stack compatible")
Reported-by: Franklin Shen <2284696125@qq.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
I'm not going to insist on the part avoiding implementation defined
behavior here. If I am to drop that, it is less clear whether
constifying this_stubs would then still be warranted.

--- a/xen/arch/x86/pv/emul-priv-op.c
+++ b/xen/arch/x86/pv/emul-priv-op.c
@@ -89,8 +89,8 @@ static io_emul_stub_t *io_emul_stub_setu
         0xc3,       /* ret       */
     };
 
-    struct stubs *this_stubs = &this_cpu(stubs);
-    unsigned long stub_va = this_stubs->addr + STUB_BUF_SIZE / 2;
+    const struct stubs *this_stubs = &this_cpu(stubs);
+    const void *stub_va = (void *)this_stubs->addr + STUB_BUF_SIZE / 2;
     unsigned int quirk_bytes = 0;
     char *p;
 
@@ -98,7 +98,7 @@ static io_emul_stub_t *io_emul_stub_setu
 #define APPEND_BUFF(b) ({ memcpy(p, b, sizeof(b)); p += sizeof(b); })
 #define APPEND_CALL(f)                                                  \
     ({                                                                  \
-        long disp = (long)(f) - (stub_va + p - ctxt->io_emul_stub + 5); \
+        long disp = (void *)(f) - (stub_va + (p - ctxt->io_emul_stub) + 5); \
         BUG_ON((int32_t)disp != disp);                                  \
         *p++ = 0xe8;                                                    \
         *(int32_t *)p = disp; p += 4;                                   \
@@ -106,7 +106,7 @@ static io_emul_stub_t *io_emul_stub_setu
 
     if ( !ctxt->io_emul_stub )
         ctxt->io_emul_stub =
-            map_domain_page(_mfn(this_stubs->mfn)) + (stub_va & ~PAGE_MASK);
+            map_domain_page(_mfn(this_stubs->mfn)) + PAGE_OFFSET(stub_va);
 
     p = ctxt->io_emul_stub;
 
@@ -141,7 +141,7 @@ static io_emul_stub_t *io_emul_stub_setu
     block_speculation(); /* SCSB */
 
     /* Handy function-typed pointer to the stub. */
-    return (void *)stub_va;
+    return stub_va;
 
 #undef APPEND_CALL
 #undef APPEND_BUFF



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 07:34:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 07:34:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152921.282511 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1OYF-00086N-Qw; Thu, 08 Jul 2021 07:34:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152921.282511; Thu, 08 Jul 2021 07:34:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1OYF-00086E-N8; Thu, 08 Jul 2021 07:34:27 +0000
Received: by outflank-mailman (input) for mailman id 152921;
 Thu, 08 Jul 2021 07:34:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1OYF-000868-0a
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 07:34:27 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.171])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id eb75271e-dfbe-11eb-855d-12813bfff9fa;
 Thu, 08 Jul 2021 07:34:25 +0000 (UTC)
Received: from aepfle.de by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx687Y4Yio
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 09:34:04 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: eb75271e-dfbe-11eb-855d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625729648;
    s=strato-dkim-0002; d=aepfle.de;
    h=In-Reply-To:References:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=Ie8bhNxcgTEIyaHnXue+qUsCeFcFU7OWzE+Hs21wg9g=;
    b=nKxlYYk9ExTxZ9BuI9EhfpAje6vEfx0GVmBer00VZb2GlgTta4a3e6mEReme+AVLKJ
    x1g28GBLyGoFvM6gaG5z7b+cV6ZJFLoem/obwXB9+z0+SoPV6pwNVVIIk3/UOPHsneyg
    GWLwYXUqnjer9VpKH4m9Cx5Kv703S9RZFcbTVNL6kEIMVP91SRDKJaQgZM42hrAkVc4e
    lmSSydRxnY+lu4pZdDi8VibLUhPOJminze/kIh5/0FPTHkurK2p5a/EfuKxM/KIN1xWG
    WfgjyRn1yLU1J5t4Nvhf0XjMie6PdfNUCxeSR2W7CoeJ26/3wkjbXCgr0r3rPyjQAbxh
    dA9w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QDiZbDmui9LcK/RdXt7GAQpV1nK0bLlEYINdoY/p1XzQbc+3kk9TsJTnzSvdM+YSIzPms="
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 09:34:00 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Tianyu Lan <ltykernel@gmail.com>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
	wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
	mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
	dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
	konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com,
	sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
	davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
	martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
	m.szyprowski@samsung.com, robin.murphy@arm.com, rppt@kernel.org,
	akpm@linux-foundation.org, kirill.shutemov@linux.intel.com,
	Tianyu.Lan@microsoft.com, thomas.lendacky@amd.com, ardb@kernel.org,
	nramas@linux.microsoft.com, robh@kernel.org, keescook@chromium.org,
	rientjes@google.com, pgonda@google.com, martin.b.radev@gmail.com,
	hannes@cmpxchg.org, saravanand@fb.com, krish.sadhukhan@oracle.com,
	xen-devel@lists.xenproject.org, tj@kernel.org,
	michael.h.kelley@microsoft.com, iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org, vkuznets@redhat.com, brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: Re: [RFC PATCH V4 01/12] x86/HV: Initialize shared memory boundary
 in the Isolation VM.
Message-ID: <20210708073400.GA28528@aepfle.de>
References: <20210707153456.3976348-1-ltykernel@gmail.com>
 <20210707153456.3976348-2-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <20210707153456.3976348-2-ltykernel@gmail.com>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Wed, Jul 07, Tianyu Lan wrote:

> +++ b/include/asm-generic/mshyperv.h
> @@ -34,8 +34,18 @@ struct ms_hyperv_info {

>  	void  __percpu **ghcb_base;

It would be cool if the cover letter states which commit id this series is based on.

Thanks,
Olaf


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 08:00:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 08:00:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152932.282522 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Oxf-0003Ib-0Z; Thu, 08 Jul 2021 08:00:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152932.282522; Thu, 08 Jul 2021 08:00:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Oxe-0003IU-TO; Thu, 08 Jul 2021 08:00:42 +0000
Received: by outflank-mailman (input) for mailman id 152932;
 Thu, 08 Jul 2021 08:00:42 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Oxe-0003IK-7k; Thu, 08 Jul 2021 08:00:42 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Oxd-0001PB-S2; Thu, 08 Jul 2021 08:00:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Oxd-0000hB-Il; Thu, 08 Jul 2021 08:00:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Oxd-0002pN-IG; Thu, 08 Jul 2021 08:00:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=mZLxDGi3yw/w2Yyb8lbfT+anEU0J4H/Lv4oowxlcWjs=; b=DOeYslDRLS5eFndU65qaKHf/0E
	pd2Or9U3kkB27eaCzG4XWIsE8w646XwrJ6e+wCCoroc/+x+3ij99cniRb3UawxyqWaWVvm5AtHjZm
	XyS9yjk2s91kzGte49HaMuNZyPjhV3lOGX9X7OLgsRtG5OFytqKsL3zMPTuak1u+hwQ8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163416-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163416: trouble: broken/fail/pass
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:<job status>:broken:regression
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:host-install(5):broken:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=e362d3276d40e4f370c92eaa6c0e84e34badb92b
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 08:00:41 +0000

flight 163416 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163416/

Failures and problems with tests :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm    <job status>            broken
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 5 host-install(5) broken REGR. vs. 163386

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

version targeted for testing:
 xen                  e362d3276d40e4f370c92eaa6c0e84e34badb92b
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163386  2021-07-07 05:04:03 Z    1 days
Testing same since   163416  2021-07-07 19:07:21 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Bertrand Marquis <bertrand.marquis@arm.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>
  Rahul Singh <rahul.singh@arm.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 broken  
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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

broken-job test-amd64-amd64-xl-qemut-debianhvm-i386-xsm broken
broken-step test-amd64-amd64-xl-qemut-debianhvm-i386-xsm host-install(5)

Not pushing.

------------------------------------------------------------
commit e362d3276d40e4f370c92eaa6c0e84e34badb92b
Author: Rahul Singh <rahul.singh@arm.com>
Date:   Tue Jul 6 11:53:59 2021 +0100

    xen/arm: smmuv1: Switch from kzalloc_array(..) to devm_kcalloc(..)
    
    Switch from kzalloc_array(..) to devm_kcalloc(..) when allocating the
    SMR to make code coherent.
    
    Signed-off-by: Rahul Singh <rahul.singh@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Acked-by: Julien Grall <jgrall@amazon.com>

commit 63fdea768d175e96443a53b95a6441f520743e2e
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Tue Jul 6 12:28:53 2021 +0200

    arm: Fix arch_initialise_vcpu to be unsupported
    
    Function arch_initialise_vcpu is not reachable as the
    VCPUOP_initialise is an unsupported operation on arm.
    Modify the function by adding ASSERT_UNREACHABLE() and
    returning -EOPNOTSUPP.
    
    Suggested-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Acked-by: Julien Grall <jgrall@amazon.com>

commit 32cbc7f96ffa3ddceacb3812da0e31a82840b138
Author: Bertrand Marquis <bertrand.marquis@arm.com>
Date:   Tue Jul 6 16:28:57 2021 +0100

    tools: Fix CPSR/SPSR print size
    
    918b8842a852 changed CPSR and SPSR to be stored as 64bit values.
    
    This is fixing the print size in some tools to use 64bit type.
    
    Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t")
    Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Michal Orzel <michal.orzel@arm.com>
    Tested-by: Michal Orzel <michal.orzel@arm.com>

commit cc83cae4de8116c7a8c9c9510d6b117745f42ff5
Author: Julien Grall <jgrall@amazon.com>
Date:   Tue Jul 6 14:20:00 2021 +0100

    tools/xen-foreign: Update the size for vcpu_guest_{core_regs, context}
    
    Commit 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to
    uint64_t") updated the size of the structure vcpu_guest_core_regs and
    indirectly vcpu_guest_context.
    
    On Arm, the two structures are only accessible to the tools and the
    hypervisor (and therefore stable). However, they are still checked
    by the scripts in tools/include/xen-foreign are not able to understand
    that.
    
    Ideally we should rework the scripts so we don't have to update
    the size for non-stable structure. But I don't have limited time
    to spend on the issue. So chose the simple solution and update
    the size accordingly.
    
    Note that we need to keep vcpu_guest_core_regs around because
    the structure is used by vcpu_guest_context and therefore the
    scripts expects the generated header to contain it.
    
    Fixes: 918b8842a852 ("arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t")
    Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Signed-off-by: Julien Grall <jgrall@amazon.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Michal Orzel <michal.orzel@arm.com>
    Tested-by: Michal Orzel <michal.orzel@arm.com>

commit b8d27e5b3391f4f90744f6ce75c02bd2661f7788
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:35:54 2021 +0200

    x86/mem-sharing: mov {get,put}_two_gfns()
    
    There's no reason for every CU including p2m.h to have these two
    functions compiled, when they're both mem-sharing specific right now and
    for the foreseeable future.
    
    Largely just code movement, with some style tweaks, the inline-s
    dropped, and "put" being made consistent with "get" as to their NULL
    checking of the passed in pointer to struct two_gfns.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

commit 09af2d01a2fe6a0af08598bdfe12c9707f4d82ba
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:35:12 2021 +0200

    x86/mem-sharing: ensure consistent lock order in get_two_gfns()
    
    While the comment validly says "Sort by domain, if same domain by gfn",
    the implementation also included equal domain IDs in the first part of
    the check, thus rending the second part entirely dead and leaving
    deadlock potential when there's only a single domain involved.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Tamas K Lengyel <tamas@tklengyel.com>

commit 980d6acf1517f0602e6dcf05ea922cf14c95e9c0
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jul 7 12:32:45 2021 +0200

    IOMMU: make DMA containment of quarantined devices optional
    
    Containing still in flight DMA was introduced to work around certain
    devices / systems hanging hard upon hitting a "not-present" IOMMU fault.
    Passing through (such) devices (on such systems) is inherently insecure
    (as guests could easily arrange for IOMMU faults of any kind to occur).
    Defaulting to a mode where admins may not even become aware of issues
    with devices can be considered undesirable. Therefore convert this mode
    of operation to an optional one, not one enabled by default.
    
    This involves resurrecting code commit ea38867831da ("x86 / iommu: set
    up a scratch page in the quarantine domain") did remove, in a slightly
    extended and abstracted fashion. Here, instead of reintroducing a pretty
    pointless use of "goto" in domain_context_unmap(), and instead of making
    the function (at least temporarily) inconsistent, take the opportunity
    and replace the other similarly pointless "goto" as well.
    
    In order to key the re-instated bypasses off of there (not) being a root
    page table this further requires moving the allocate_domain_resources()
    invocation from reassign_device() to amd_iommu_setup_domain_device() (or
    else reassign_device() would allocate a root page table anyway); this is
    benign to the second caller of the latter function.
    
    In VT-d's domain_context_unmap(), instead of adding yet another
    "goto out" when all that's wanted is a "return", eliminate the "out"
    label at the same time.
    
    Take the opportunity and also limit the control to builds supporting
    PCI.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Paul Durrant <paul@xen.org>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>

commit f17a73b3c0264c62dd6b5dae01ed621c051c3038
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:08 2021 +0200

    tools/migration: unify type checking for data pfns in migration stream
    
    Introduce a helper which decides if a given pfn type has data
    in the migration stream.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>

commit 5588ebcfca774477cf823949e5703b0ac48818cc
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:07 2021 +0200

    tools/migration: unify type checking for data pfns in the VM
    
    Introduce a helper which decides if a given pfn in the migration
    stream is backed by memory.
    
    This highlights more clearly that type XEN_DOMCTL_PFINFO_XALLOC (a
    synthetic toolstack-only type used between Xen 4.2 to 4.5 which
    indicated a dirty page on the sending side for which no data will be
    send in the initial iteration) does get populated in the VM.
    
    No change in behaviour intended, except for invalid page types which now
    have a safer default.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 9e59d9f8ee3808acde9833192211da25f66d8cc2
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:05 2021 +0200

    tools/migration: unify known page type checking
    
    Users of xc_get_pfn_type_batch may want to sanity check the data
    returned by Xen. Add helpers for this purpose:
    
    is_known_page_type verifies the type returned by Xen on the saving
    side, or the incoming type for a page on the restoring side, is known
    by the save/restore code.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit a27976a1080d537fb1f212a8f9133d60daa0025b
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:01 2021 +0200

    tools/python: fix Python3.4 TypeError in format string
    
    Using the first element of a tuple for a format specifier fails with
    python3.4 as included in SLE12:
        b = b"string/%x" % (i, )
    TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
    
    It happens to work with python 2.7 and 3.6.
    To support older Py3, format as strings and explicitly encode as ASCII.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit c8f88810db2a25d6aacf65c1c60bc4f5d848a483
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 1 11:56:00 2021 +0200

    tools/python: handle libxl__physmap_info.name properly in convert-legacy-stream
    
    The trailing member name[] in libxl__physmap_info is written as a
    cstring into the stream. The current code does a sanity check if the
    last byte is zero. This attempt fails with python3 because name[-1]
    returns a type int. As a result the comparison with byte(\00) fails:
    
      File "/usr/lib/xen/bin/convert-legacy-stream", line 347, in read_libxl_toolstack
        raise StreamError("physmap name not NUL terminated")
      StreamError: physmap name not NUL terminated
    
    To handle both python variants, cast to bytearray().
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

commit 918b8842a852e0e7446286f546724b1c63c56c66
Author: Michal Orzel <michal.orzel@arm.com>
Date:   Mon Jul 5 08:39:52 2021 +0200

    arm64: Change type of hsr, cpsr, spsr_el1 to uint64_t
    
    AArch64 registers are 64bit whereas AArch32 registers
    are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
    we should get rid of helpers READ/WRITE_SYSREG32
    in favour of using READ/WRITE_SYSREG.
    We should also use register_t type when reading sysregs
    which can correspond to uint64_t or uint32_t.
    Even though many AArch64 registers have upper 32bit reserved
    it does not mean that they can't be widen in the future.
    
    Modify type of hsr, cpsr, spsr_el1 to uint64_t.
    Previously we relied on the padding after spsr_el1.
    As we removed the padding, modify the union to be 64bit so we don't corrupt spsr_fiq.
    No need to modify the assembly code because the accesses were based on 64bit
    registers as there was a 32bit padding after spsr_el1.
    
    Remove 32bit padding in cpu_user_regs before spsr_fiq
    as it is no longer needed due to upper union being 64bit now.
    Add 64bit padding in cpu_user_regs before spsr_el1
    because the kernel frame should be 16-byte aligned.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/arch-arm.h" to allow ABI compatibility between 32bit and 64bit.
    Increment XEN_DOMCTL_INTERFACE_VERSION.
    
    Change type of cpsr to uint64_t in the public outside interface
    "public/vm_event.h" to allow ABI compatibility between 32bit and 64bit.
    
    Signed-off-by: Michal Orzel <michal.orzel@arm.com>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 08:54:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 08:54:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152945.282542 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Png-0008Ji-Dv; Thu, 08 Jul 2021 08:54:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152945.282542; Thu, 08 Jul 2021 08:54:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Png-0008Jb-As; Thu, 08 Jul 2021 08:54:28 +0000
Received: by outflank-mailman (input) for mailman id 152945;
 Thu, 08 Jul 2021 08:53:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Sueo=MA=linux.intel.com=lingshan.zhu@srs-us1.protection.inumbo.net>)
 id 1m1Pmu-0008IE-EC
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 08:53:40 +0000
Received: from mga01.intel.com (unknown [192.55.52.88])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fc20511f-dfc9-11eb-855d-12813bfff9fa;
 Thu, 08 Jul 2021 08:53:39 +0000 (UTC)
Received: from fmsmga003.fm.intel.com ([10.253.24.29])
 by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 08 Jul 2021 01:53:36 -0700
Received: from lingshan-mobl5.ccr.corp.intel.com (HELO [10.249.171.108])
 ([10.249.171.108])
 by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 08 Jul 2021 01:53:28 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fc20511f-dfc9-11eb-855d-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10038"; a="231224873"
X-IronPort-AV: E=Sophos;i="5.84,222,1620716400"; 
   d="scan'208";a="231224873"
X-IronPort-AV: E=Sophos;i="5.84,222,1620716400"; 
   d="scan'208";a="487473996"
Subject: Re: [PATCH V7 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
To: Peter Zijlstra <peterz@infradead.org>,
 Zhu Lingshan <lingshan.zhu@intel.com>
Cc: pbonzini@redhat.com, bp@alien8.de, seanjc@google.com,
 vkuznets@redhat.com, wanpengli@tencent.com, jmattson@google.com,
 joro@8bytes.org, weijiang.yang@intel.com, kan.liang@linux.intel.com,
 ak@linux.intel.com, wei.w.wang@intel.com, eranian@google.com,
 liuxiangdong5@huawei.com, linux-kernel@vger.kernel.org, x86@kernel.org,
 kvm@vger.kernel.org, like.xu.linux@gmail.com,
 Like Xu <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>,
 Marc Zyngier <maz@kernel.org>, Guo Ren <guoren@kernel.org>,
 Nick Hu <nickhu@andestech.com>, Paul Walmsley <paul.walmsley@sifive.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu,
 linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org,
 xen-devel@lists.xenproject.org
References: <20210622094306.8336-1-lingshan.zhu@intel.com>
 <20210622094306.8336-2-lingshan.zhu@intel.com>
 <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
From: Zhu Lingshan <lingshan.zhu@linux.intel.com>
Message-ID: <82ae3758-6b99-dc43-9515-fabb2b036f3b@linux.intel.com>
Date: Thu, 8 Jul 2021 16:53:26 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.10.0
MIME-Version: 1.0
In-Reply-To: <YN722HIrzc6Z2+oD@hirez.programming.kicks-ass.net>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Language: en-US



On 7/2/2021 7:22 PM, Peter Zijlstra wrote:
> On Tue, Jun 22, 2021 at 05:42:49PM +0800, Zhu Lingshan wrote:
>> diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
>> index 8f71dd72ef95..c71af4cfba9b 100644
>> --- a/arch/x86/events/core.c
>> +++ b/arch/x86/events/core.c
>> @@ -90,6 +90,27 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
>>    */
>>   DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
>>   
>> +DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
>> +DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
>> +DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
>> +
>> +void arch_perf_update_guest_cbs(void)
>> +{
>> +	static_call_update(x86_guest_state, (void *)&__static_call_return0);
>> +	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
>> +	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
>> +
>> +	if (perf_guest_cbs && perf_guest_cbs->state)
>> +		static_call_update(x86_guest_state, perf_guest_cbs->state);
>> +
>> +	if (perf_guest_cbs && perf_guest_cbs->get_ip)
>> +		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
>> +
>> +	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr)
>> +		static_call_update(x86_guest_handle_intel_pt_intr,
>> +				   perf_guest_cbs->handle_intel_pt_intr);
>> +}
> Coding style wants { } on that last if().
will fix these coding style issues in V8

Thanks!


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 09:10:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 09:10:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152955.282553 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Q2x-000293-RW; Thu, 08 Jul 2021 09:10:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152955.282553; Thu, 08 Jul 2021 09:10:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Q2x-00028w-NK; Thu, 08 Jul 2021 09:10:15 +0000
Received: by outflank-mailman (input) for mailman id 152955;
 Thu, 08 Jul 2021 09:10:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Cooy=MA=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m1Q2w-00028q-GS
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 09:10:14 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.1.70]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0b6cffc6-a60f-4870-9d99-31076b88ab70;
 Thu, 08 Jul 2021 09:10:11 +0000 (UTC)
Received: from DB8PR04CA0018.eurprd04.prod.outlook.com (2603:10a6:10:110::28)
 by VE1PR08MB5584.eurprd08.prod.outlook.com (2603:10a6:800:1a4::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Thu, 8 Jul
 2021 09:10:05 +0000
Received: from DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:110:cafe::2a) by DB8PR04CA0018.outlook.office365.com
 (2603:10a6:10:110::28) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend
 Transport; Thu, 8 Jul 2021 09:10:05 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT057.mail.protection.outlook.com (10.152.20.235) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Thu, 8 Jul 2021 09:10:04 +0000
Received: ("Tessian outbound 8b91ad1fd5d8:v98");
 Thu, 08 Jul 2021 09:10:04 +0000
Received: from 804d128ef79e.3
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 C368C1DD-74A8-4136-B4A5-041BE7CF9873.1; 
 Thu, 08 Jul 2021 09:09:54 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 804d128ef79e.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 08 Jul 2021 09:09:54 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VE1PR08MB5616.eurprd08.prod.outlook.com (2603:10a6:800:1a1::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 09:09:50 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 09:09:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0b6cffc6-a60f-4870-9d99-31076b88ab70
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HTEVzp+S11eLoOtWJX+xUq1ENEFre6S4/IvyLcFsY7s=;
 b=ufBYVSW8MHvYgN/HjZSmJYwg4hwgJlYmBgZXYaO3LB2t5xP6qZnkt70jzbK8jq/tWXDhuX9vLC7pk2PfOEzDkK89WPnGxLkqD/j16tySp3G62NINDmuMBuoAmngg+8C3EUE65nuwlwgoKDGTi4NZKtpBv7TdFpVlio+VM1PmDK8=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c1xRCf9qrwfzgj1aEWPLeLCAqqsnWGmGxX7I3uhhOxDMRgYEl3Z1WBSAigXomk/VpotZLXeC7c2sULyJPZkxEuEAFR8LXho0MK6v+C2yrR057fR39UmZjeeroggRkoE1eUrn3pf4X7bSwtEQ+1jT4ueOYH83MxNCAKQD7lnmZLBSREX0Wp4DiFco8c0On+PpEgxqqer/BdVAgXgyOBxX9Yf69PGzvw+Zz4uAYldum2m4xyxkiVn/zZYXh0oYeOKK7m9Xukcoc1CuYpO35FwYXauaTLhB+eYjFslEuY+qwTAW9tDQCnd5ZWrFyXuimsuRAAvXrCitLo1iJTmV3WXmSQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HTEVzp+S11eLoOtWJX+xUq1ENEFre6S4/IvyLcFsY7s=;
 b=MA/Fgb/siog2CfNZMnXhOjdJjHAahgcszwL6Lo51QMfrgBM/WX4eCvI5twxY72iieqT2FvARBxm/JdXbWNPE+GhdLeOoHUM2BNyqwIJi7wcnDBvLdD8vpVgs+MFyL5Wlu/P7ZhEpRyBaiWS9O1AGG51jQQ/K1VbcY5b1tu84onAmNj4PoLJQOOOa+2WP8vBQb5+n7OZ+251Xng2MnXWyZglYTNgD+WImz5nQ7cq5/TNVLrruntZaooluLTtcwdzMTXa44HajWlT95UQPQaggfA4irKI1AXxl75MkHUYi3TUQAlbXil/iqNtnLNB+723LZ2XJT6ywOpdAMOZXhlfscA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HTEVzp+S11eLoOtWJX+xUq1ENEFre6S4/IvyLcFsY7s=;
 b=ufBYVSW8MHvYgN/HjZSmJYwg4hwgJlYmBgZXYaO3LB2t5xP6qZnkt70jzbK8jq/tWXDhuX9vLC7pk2PfOEzDkK89WPnGxLkqD/j16tySp3G62NINDmuMBuoAmngg+8C3EUE65nuwlwgoKDGTi4NZKtpBv7TdFpVlio+VM1PmDK8=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, Wei Chen
	<Wei.Chen@arm.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>
Subject: RE: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
Thread-Topic: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
Thread-Index: AQHXW0b5Q8/Ges+XOkqFV81MfBckcqsNDrqAgChoyZCAADlHgIADP/Fg
Date: Thu, 8 Jul 2021 09:09:49 +0000
Message-ID:
 <VE1PR08MB5215139E9710EE5DE8E698B1F7199@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
In-Reply-To: <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: B00918E82434894F8CCB24051F33C06E.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 5bab744a-37a8-42ce-d020-08d941f02cbc
x-ms-traffictypediagnostic: VE1PR08MB5616:|VE1PR08MB5584:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<VE1PR08MB558494D2D1371F8A39569260F7199@VE1PR08MB5584.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 Yxe3kFYJTiD5QjuLinYxRvMCSzNN6lWokM1JYQeJBZO80k75qY4pxV0lm+8UePAZmtB67TA4XHRsttNf1md0DDsMacO6bGxCzVHlrDLuJifXOmbTZzt7SLdhYLVPMV07reKV2imNgjTBELm4nF/Tlpp41q+cP4UsnlHjp95iKog9zHggZA+0mR9mp03ZKUwn1qb1xaTiBSSs6s7wzatrLng2ul5EH+0b6uU+CYnnLZciZmMEiB1b5hR+PBlIXNFBQ0nt8IYu48QEha0izGj62XtC8pTqxSO/JSg1RwUU+ughJvbyTIxUc8GH1bb9vT3TUtBkox65nWq3XXeUaWnU6UPXmgt1If6UuIWQ333O4vU3mFIfHOOqNFR1DW7/SGzUz1iS5mz6WvsAOK35nuDqO6Mfb+NXJ5weFtfHlmwM+a1Y6hEgxme9l/tGeQxG08XJla0M9QTpd0bH3j4cZlVpN+0sT48y33T4ydb6YIHJON6B9SWN4H3xB4MkUBJGWmY3eM0ic75dkmLqP4CV9fKzxoHAHCERkKLWCSN4chUXCPjRKgpo1dxg+03vEuDuSpjrm5eQYg2xod8zpw/ah8tPgpeB9bBh06Wr1P0FR08X9XeXX1pIw9zecEuVD0sA1a2xFU2564+bQsfjtXhm+2sEeQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(366004)(376002)(39850400004)(136003)(396003)(33656002)(71200400001)(76116006)(8936002)(52536014)(4326008)(316002)(64756008)(5660300002)(55016002)(6636002)(86362001)(83380400001)(53546011)(2906002)(8676002)(66556008)(7696005)(66946007)(478600001)(66476007)(26005)(66446008)(38100700002)(122000001)(9686003)(54906003)(6506007)(186003)(110136005);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?8/J+CoshNddzXKU/sjh4dBYVuXorX8+dsxtsHo/?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5616
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	6b992674-7596-48e5-110d-08d941f02409
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	VHraiq+lzJ9DSRmBk5OtFZdeHL73fmJPngZHXBVzCoeU23ruFwPBjh+SGl9px5fdZC2XcErAEXDI7OpINK/2hEO5FtoqVpzMAXCYrWUJhNYBlqO/MjjgsYMlfhfKcHfvbUWPtJoXteuvbV7D/0RT+EH01vxjF+GU1jX/7gXOLunDIcP0a8vEhx9KsBUjwPSrlbWsRZGPVr9orQySBWlugkr4U4YSo/zYxCma6YTkRNeldkf2yjV1v5vptPkSfbALqKgJ+t1pfvKQIqCH7UbSzs6qU6Wo0aZllFoAps2f2UTMLWM9Hbcfbf62nXK82V0ymxUu8JnPkQOKK6XvIt1X1fwXeti51iPlhKbZNzjl7znHNOTRRvMYOtNn20XeKcN//UDqFcBD8c3Zm0V6TVDC993gXq5FfBHVx+5P79YPr292xB8Cd8iMOINKzjdXblQheY344Q7aO0+vcycJ5PkM2lPcdheMBdTqboek9vz5u9/fx8lOv0D+ja4JDc7f8bCD2ra5X0+K1bQemxu9y7pqohjgoVKXtCjUjl+CiZYLmDHTL3gejUHyvyzkBAPXQsZHYVahhA5P8mrNSsiJ3ey2xpTjqhHjoS6LkInyiWQgS11QzWI5+VtOnADndwkrnht9+Ua3zuxQHYpfnXOz1EffBFN98fcs9pf4cGQsRyivmLF4xvRdZCx0XP42Q/x7NGyejDocx1uiidyxirf2jxZfIQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(39850400004)(396003)(376002)(46966006)(36840700001)(356005)(82310400003)(4326008)(336012)(83380400001)(36860700001)(82740400003)(186003)(110136005)(55016002)(7696005)(52536014)(47076005)(2906002)(86362001)(33656002)(81166007)(9686003)(54906003)(6506007)(478600001)(5660300002)(316002)(8936002)(70206006)(6636002)(8676002)(107886003)(26005)(70586007)(53546011);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 09:10:04.8093
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 5bab744a-37a8-42ce-d020-08d941f02cbc
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5584

SGkgSmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBUdWVzZGF5LCBKdWx5IDYsIDIwMjEgMjo1
NCBQTQ0KPiBUbzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+DQo+IENjOiBCZXJ0
cmFuZCBNYXJxdWlzIDxCZXJ0cmFuZC5NYXJxdWlzQGFybS5jb20+OyBXZWkgQ2hlbg0KPiA8V2Vp
LkNoZW5AYXJtLmNvbT47IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gc3N0YWJl
bGxpbmlAa2VybmVsLm9yZzsgSnVsaWVuIEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4NCj4gU3ViamVj
dDogUmU6IFtQQVRDSCA2LzldIHhlbi9hcm06IGludHJvZHVjZSBhbGxvY19zdGF0aWNtZW1fcGFn
ZXMgYW5kDQo+IGFsbG9jX2RvbXN0YXRpY19wYWdlcw0KPiANCj4gT24gMDYuMDcuMjAyMSAwNzo1
OCwgUGVubnkgWmhlbmcgd3JvdGU6DQo+ID4+IEZyb206IEphbiBCZXVsaWNoIDxqYmV1bGljaEBz
dXNlLmNvbT4NCj4gPj4gU2VudDogVGh1cnNkYXksIEp1bmUgMTAsIDIwMjEgNjoyMyBQTQ0KPiA+
Pg0KPiA+PiBPbiAwNy4wNi4yMDIxIDA0OjQzLCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPj4+IC0t
LSBhL3hlbi9jb21tb24vcGFnZV9hbGxvYy5jDQo+ID4+PiArKysgYi94ZW4vY29tbW9uL3BhZ2Vf
YWxsb2MuYw0KPiA+Pj4gQEAgLTEwNjUsNiArMTA2NSw3NSBAQCBzdGF0aWMgc3RydWN0IHBhZ2Vf
aW5mbyAqYWxsb2NfaGVhcF9wYWdlcygNCj4gPj4+ICAgICAgcmV0dXJuIHBnOw0KPiA+Pj4gIH0N
Cj4gPj4+DQo+ID4+PiArI2lmZGVmIENPTkZJR19TVEFUSUNfQUxMT0NBVElPTg0KPiA+Pj4gKy8q
DQo+ID4+PiArICogQWxsb2NhdGUgbnJfbWZucyBjb250aWd1b3VzIHBhZ2VzLCBzdGFydGluZyBh
dCAjc21mbiwgb2Ygc3RhdGljIG1lbW9yeS4NCj4gPj4+ICsgKiBJdCBpcyB0aGUgZXF1aXZhbGVu
dCBvZiBhbGxvY19oZWFwX3BhZ2VzIGZvciBzdGF0aWMgbWVtb3J5ICAqLw0KPiA+Pj4gK3N0YXRp
YyBzdHJ1Y3QgcGFnZV9pbmZvICphbGxvY19zdGF0aWNtZW1fcGFnZXModW5zaWduZWQgbG9uZyBu
cl9tZm5zLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWZuX3Qgc21mbiwNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludA0KPiA+Pj4gK21lbWZsYWdzKSB7DQo+ID4+PiAr
ICAgIGJvb2wgbmVlZF90bGJmbHVzaCA9IGZhbHNlOw0KPiA+Pj4gKyAgICB1aW50MzJfdCB0bGJm
bHVzaF90aW1lc3RhbXAgPSAwOw0KPiA+Pj4gKyAgICB1bnNpZ25lZCBsb25nIGk7DQo+ID4+PiAr
ICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgICAvKiBGb3Igbm93
LCBpdCBvbmx5IHN1cHBvcnRzIGFsbG9jYXRpbmcgYXQgc3BlY2lmaWVkIGFkZHJlc3MuICovDQo+
ID4+PiArICAgIGlmICggIW1mbl92YWxpZChzbWZuKSB8fCAhbnJfbWZucyApDQo+ID4+PiArICAg
IHsNCj4gPj4+ICsgICAgICAgIHByaW50ayhYRU5MT0dfRVJSDQo+ID4+PiArICAgICAgICAgICAg
ICAgIkludmFsaWQgJWx1IHN0YXRpYyBtZW1vcnkgc3RhcnRpbmcgYXQNCj4gPj4+ICsgJSJQUklf
bWZuIlxuIiwNCj4gPj4NCj4gPj4gUmVhZGluZyBhIGxvZyBjb250YWluaW5nIGUuZy4gIkludmFs
aWQgMCBzdGF0aWMgbWVtb3J5IHN0YXJ0aW5nIGF0DQo+ID4+IC4uLiIgSSBkb24ndCB0aGluayBJ
IHdvdWxkIHJlY29nbml6ZSB0aGF0IHRoZSAiMCIgaXMgdGhlIGNvdW50IG9mIHBhZ2VzLg0KPiA+
DQo+ID4gU3VyZS4gSG93IGFib3V0ICJ0cnkgdG8gYWxsb2NhdGUgb3V0IG9mIHJhbmdlIHBhZ2Ug
JSJQUklfbWZuIlxuIj8NCj4gDQo+IFRoaXMgc3RpbGwgZG9lc24ndCBjb252ZXkgX2JvdGhfIHBh
cnRzIG9mIHRoZSBpZigpIHRoYXQgd291bGQgY2F1c2UgdGhlIGxvZw0KPiBtZXNzYWdlIHRvIGJl
IGlzc3VlZC4NCj4gDQoNClNvcnJ5LiBIb3cgYWJvdXQNCiINCiAgICAgICAgcHJpbnRrKFhFTkxP
R19FUlINCiAgICAgICAgICAgICAgICJFaXRoZXIgb3V0LW9mLXJhbmdlIHN0YXRpYyBtZW1vcnkg
c3RhcnRpbmcgYXQgJSJQUklfbWZuIiINCiAgICAgICAgICAgICAgICJvciBpbnZhbGlkIG51bWJl
ciBvZiBwYWdlczogJXVsLlxuIiwNCiAgICAgICAgICAgICAgIG1mbl94KHNtZm4pLCBucl9tZm5z
KTsNCiINCg0KPiA+Pj4gKyAgICAgICAgICAgICAgIG5yX21mbnMsIG1mbl94KHNtZm4pKTsNCj4g
Pj4+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiA+Pj4gKyAgICB9DQo+ID4+PiArICAgIHBnID0g
bWZuX3RvX3BhZ2Uoc21mbik7DQo+ID4+PiArDQo+ID4+PiArICAgIGZvciAoIGkgPSAwOyBpIDwg
bnJfbWZuczsgaSsrICkNCj4gPj4+ICsgICAgew0KPiA+Pj4gKyAgICAgICAgLyoNCj4gPj4+ICsg
ICAgICAgICAqIFJlZmVyZW5jZSBjb3VudCBtdXN0IGNvbnRpbnVvdXNseSBiZSB6ZXJvIGZvciBm
cmVlIHBhZ2VzDQo+ID4+PiArICAgICAgICAgKiBvZiBzdGF0aWMgbWVtb3J5KFBHQ19yZXNlcnZl
ZCkuDQo+ID4+PiArICAgICAgICAgKi8NCj4gPj4+ICsgICAgICAgIEFTU0VSVChwZ1tpXS5jb3Vu
dF9pbmZvICYgUEdDX3Jlc2VydmVkKTsNCj4gPj4NCj4gPj4gV2hhdCBsb2dpYyBlbHNld2hlcmUg
Z3VhcmFudGVlcyB0aGF0IHRoaXMgd2lsbCBob2xkPyBBU1NFUlQoKXMgYXJlIHRvDQo+ID4+IHZl
cmlmeSB0aGF0IGFzc3VtcHRpb25zIGFyZSBtZXQuIEJ1dCBJIGRvbid0IHRoaW5rIHlvdSBjYW4g
c2Vuc2libHkNCj4gPj4gYXNzdW1lIHRoZSBjYWxsZXIga25vd3MgdGhlIHJhbmdlIGlzIHJlc2Vy
dmVkIChhbmQgZnJlZSksIG9yIGVsc2UgeW91DQo+ID4+IGNvdWxkIGdldCBhd2F5IHdpdGhvdXQg
YW55IGFsbG9jYXRpb24gZnVuY3Rpb24uDQo+ID4NCj4gPiBUaGUgY2FsbGVyIHNoYWxsIG9ubHkg
Y2FsbCBhbGxvY19zdGF0aWNtZW1fcGFnZXMgd2hlbiBpdCBrbm93cyByYW5nZQ0KPiA+IGlzIHJl
c2VydmVkLCBsaWtlLCBhbGxvY19zdGF0aWNtZW1fcGFnZXMgaXMgb25seSBjYWxsZWQgaW4gdGhl
IGNvbnRleHQNCj4gPiBvZiBhbGxvY19kb21zdGF0aWNfcGFnZXMgZm9yIG5vdy4NCj4gDQo+IElm
IHRoZSBjYWxsZXIga25vd3MgdGhlIHN0YXRpYyByYW5nZXMsIHRoaXMgaXNuJ3QgcmVhbGx5ICJh
bGxvY2F0aW9uIi4NCj4gSS5lLiBJIHRoZW4gcXVlc3Rpb24gdGhlIG5lZWQgZm9yICJhbGxvY2F0
aW5nIiBpbiB0aGUgZmlyc3QgcGxhY2UuDQo+DQo+ID4+PiArICAgICAgICBpZiAoIChwZ1tpXS5j
b3VudF9pbmZvICYgflBHQ19yZXNlcnZlZCkgIT0gUEdDX3N0YXRlX2ZyZWUgKQ0KPiA+Pj4gKyAg
ICAgICAgew0KPiA+Pj4gKyAgICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSDQo+ID4+PiArICAg
ICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgY291bnQgbXVzdCBjb250aW51b3VzbHkgYmUgemVy
byBmb3IgZnJlZSBwYWdlcyINCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgInBnWyVsdV0gTUZO
ICUiUFJJX21mbiIgYz0lI2x4IHQ9JSN4XG4iLA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICBp
LCBtZm5feChwYWdlX3RvX21mbihwZyArIGkpKSwNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg
cGdbaV0uY291bnRfaW5mbywgcGdbaV0udGxiZmx1c2hfdGltZXN0YW1wKTsNCj4gPj4+ICsgICAg
ICAgICAgICBCVUcoKTsNCj4gPj4+ICsgICAgICAgIH0NCj4gPj4NCj4gPj4gVGhlIHNhbWUgYXBw
bGllcyBoZXJlIGF0IGxlYXN0IHVudGlsIHByb3BlciBsb2NraW5nIGdldHMgYWRkZWQsIHdoaWNo
DQo+ID4+IEkgZ3Vlc3MgaXMgaGFwcGVuaW5nIGluIHRoZSBuZXh0IHBhdGNoIHdoZW4gcmVhbGx5
IGl0IHdvdWxkIG5lZWQgdG8gaGFwcGVuDQo+IHJpZ2h0IGhlcmUuDQo+ID4+DQo+ID4NCj4gPiBP
aywgSSB3aWxsIGNvbWJpbmUgdHdvIGNvbW1pdHMgdG9nZXRoZXIsIGFuZCBhZGQgbG9ja2luZyBo
ZXJlLg0KPiA+IEkgdGhvdWdodCB0aGUgY29udGVudCBvZiB0aGlzIGNvbW1pdCBpcyBhIGxpdHRs
ZSBiaXQgdG9vIG11Y2gsIHNvDQo+ID4gbWF5YmUgYWRkaW5nIHRoZSBwcm9wZXIgbG9jayBzaGFs
bCBiZSBjcmVhdGVkIGFzIGEgbmV3IHBhdGNoLiDwn5iJDQo+ID4NCj4gPj4gRnVydGhlcm1vcmUg
SSBkb24ndCBzZWUgd2h5IHlvdSBkb24ndCBmb2xkIEFTU0VSVCgpIGFuZCBpZiBpbnRvDQo+ID4+
DQo+ID4+ICAgICAgICAgaWYgKCBwZ1tpXS5jb3VudF9pbmZvICE9IChQR0Nfc3RhdGVfZnJlZSB8
IFBHQ19yZXNlcnZlZCkgKQ0KPiA+Pg0KPiA+PiBBZnRlciBhbGwgUEdDX3Jlc2VydmVkIGlzIG5v
dCBzaW1pbGFyIHRvIFBHQ19uZWVkX3NjcnViLCB3aGljaA0KPiA+PiBhbGxvY19oZWFwX3BhZ2Vz
KCkgbWFza3Mgb3V0IHRoZSB3YXkgeW91IGFsc28gaGF2ZSBpdCBoZXJlLg0KPiA+Pg0KPiA+DQo+
ID4gSSB1bmRlcnN0YW5kIHRoYXQgeW91IHByZWZlciBpZiBjb25kaXRpb24gaXMgcGhyYXNlZCBh
cyBmb2xsb3dzOg0KPiA+ICAJaWYgKCBwZ1tpXS5jb3VudF9pbmZvICE9IChQR0Nfc3RhdGVfZnJl
ZSB8IFBHQ19yZXNlcnZlZCkgKSBBZ3JlZQ0KPiA+IHRoYXQgUEdDX3Jlc2VydmVkIHNoYWxsIGhh
cyB0aGUgc2FtZSBwb3NpdGlvbiBhcyBQR0Nfc3RhdGVfZnJlZS4NCj4gPiBIbW1tLCBmb3Igd2h5
IEkgZG9uJ3QgZm9sZCBBU1NFUlQoKSwgZG8geW91IG1lYW4gdGhhdA0KPiA+IEFTU0VSVChwZ1tp
XS5jb3VudF9pbmZvID09IChQR0Nfc3RhdGVfZnJlZSB8IFBHQ19yZXNlcnZlZCkpPw0KPiANCj4g
Tm8uIEJ5IGNvbnZlcnRpbmcgdG8gdGhlIHN1Z2dlc3RlZCBjb25zdHJ1Y3QgdGhlIEFTU0VSVCgp
IGRpc2FwcGVhcnMgYnkgd2F5DQo+IG9mIGZvbGRpbmcgX2ludG9fIHRoZSBpZigpLg0KPiANCj4g
Pj4gQXMgdG8gdGhlIHByaW50aygpIC0gdGhlIGV4dHJhIHZlcmJvc2l0eSBjb21wYXJlZCB0byB0
aGUgb3JpZ2luYWwNCj4gPj4gaXNuJ3QgaGVscGZ1bCBvciBuZWNlc3NhcnkgaW1vLiBUaGUgbWVz
c2FnZSBuZWVkcyB0byBiZQ0KPiA+PiBkaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgb3RoZXIgb25l
LCB5ZXMsIHNvIGl0IHdvdWxkIGJldHRlciBtZW50aW9uDQo+ID4+ICJzdGF0aWMiIGluIHNvbWUg
d2F5LiBCdXQgdGhlIHByZWZpeCB5b3UgaGF2ZSBpcyB0b28gbG9uZyBmb3IgbXkgdGFzdGUgKGFu
ZA0KPiBsYWNrcyBhIHNlcGFyYXRpbmcgYmxhbmsgYW55d2F5KS4NCj4gPj4NCj4gPg0KPiA+IElm
IHlvdSBkb24ndCBsaWtlIHRoZSBleHRyYSB2ZXJib3NpdHksIG1heWJlIGp1c3QgIiBTdGF0aWMg
cGdbJWx1XSBNRk4NCj4gPiAlIlBSSV9tZm4iIGM9JSNseCB0PSUjeC5cbiI/DQo+IA0KPiBTb21l
dGhpbmcgYWxvbmcgdGhlc2UgbGluZXMsIHllcywgYnV0IEkgd29uZGVyIGhvdyBkaWZmaWN1bHQg
aXQgaXMgdG8gdGFrZSB0aGUNCj4gb3JpZ2luYWwgbWVzc2FnZSBhbmQgaW5zZXJ0ICJzdGF0aWMi
IGF0IGEgc3VpdGFibGUgcGxhY2UuDQo+IEFueSBwYXJ0IHlvdSBvbWl0IHdvdWxkIGFnYWluIHdh
bnQganVzdGlmeWluZy4gUGVyc29uYWxseSBJJ2QgZ28gd2l0aCAicGdbJXVdDQo+IHN0YXRpYyBN
Rk4gJSJQUklfbWZuIiBjPSUjbHggbz0ldSB2PSUjbHggdD0lI3hcbiIgdW5sZXNzIGFueSBvZiB0
aGUgcGFydHMNCj4gYXJlIHByb3ZhYmx5IHBvaW50bGVzcyB0byBsb2cgZm9yIHN0YXRpYyBwYWdl
cy4NCj4gDQo+ID4+PiBAQCAtMjQzNCw2ICsyNTEyLDU3IEBAIHN0cnVjdCBwYWdlX2luZm8gKmFs
bG9jX2RvbWhlYXBfcGFnZXMoDQo+ID4+PiAgICAgIHJldHVybiBwZzsNCj4gPj4+ICB9DQo+ID4+
Pg0KPiA+Pj4gKyNpZmRlZiBDT05GSUdfU1RBVElDX0FMTE9DQVRJT04NCj4gPj4+ICsvKg0KPiA+
Pj4gKyAqIEFsbG9jYXRlIG5yX21mbnMgY29udGlndW91cyBwYWdlcywgc3RhcnRpbmcgYXQgI3Nt
Zm4sIG9mIHN0YXRpYw0KPiA+Pj4gK21lbW9yeSwNCj4gPj4+ICsgKiB0aGVuIGFzc2lnbiB0aGVt
IHRvIG9uZSBzcGVjaWZpYyBkb21haW4gI2QuDQo+ID4+PiArICogSXQgaXMgdGhlIGVxdWl2YWxl
bnQgb2YgYWxsb2NfZG9taGVhcF9wYWdlcyBmb3Igc3RhdGljIG1lbW9yeS4NCj4gPj4+ICsgKi8N
Cj4gPj4+ICtzdHJ1Y3QgcGFnZV9pbmZvICphbGxvY19kb21zdGF0aWNfcGFnZXMoDQo+ID4+PiAr
ICAgICAgICBzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG5yX21mbnMsIG1mbl90IHNt
Zm4sDQo+ID4+PiArICAgICAgICB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpDQo+ID4+PiArew0KPiA+
Pj4gKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZyA9IE5VTEw7DQo+ID4+PiArICAgIHVuc2lnbmVk
IGxvbmcgZG1hX3NpemU7DQo+ID4+PiArDQo+ID4+PiArICAgIEFTU0VSVCghaW5faXJxKCkpOw0K
PiA+Pj4gKw0KPiA+Pj4gKyAgICBpZiAoICFkbWFfYml0c2l6ZSApDQo+ID4+PiArICAgICAgICBt
ZW1mbGFncyAmPSB+TUVNRl9ub19kbWE7DQo+ID4+PiArICAgIGVsc2UNCj4gPj4+ICsgICAgew0K
PiA+Pj4gKyAgICAgICAgaWYgKCAoZG1hX2JpdHNpemUgLSBQQUdFX1NISUZUKSA+IDAgKQ0KPiA+
Pj4gKyAgICAgICAgew0KPiA+Pj4gKyAgICAgICAgICAgIGRtYV9zaXplID0gMXVsIDw8IChkbWFf
Yml0c2l6ZSAtIFBBR0VfU0hJRlQpOw0KPiA+Pj4gKyAgICAgICAgICAgIC8qIFN0YXJ0aW5nIGFk
ZHJlc3Mgc2hhbGwgbWVldCB0aGUgRE1BIGxpbWl0YXRpb24uICovDQo+ID4+PiArICAgICAgICAg
ICAgaWYgKCBtZm5feChzbWZuKSA8IGRtYV9zaXplICkNCj4gPj4+ICsgICAgICAgICAgICAgICAg
cmV0dXJuIE5VTEw7DQo+ID4+DQo+ID4+IEkgdGhpbmsgSSBkaWQgYXNrIHRoaXMgb24gdjEgYWxy
ZWFkeTogV2h5IHRoZSBmaXJzdCBwYWdlPyBTdGF0aWMNCj4gPj4gbWVtb3J5IHJlZ2lvbnMsIHVu
bGlrZSBidWRkeSBhbGxvY2F0b3Igem9uZXMsIGNhbiBjcm9zcyBwb3dlci1vZi0yDQo+ID4+IGFk
ZHJlc3MgYm91bmRhcmllcy4gSGVuY2UgaXQgb3VnaHQgdG8gYmUgdGhlIGxhc3QgcGFnZSB0aGF0
IGdldHMNCj4gPj4gY2hlY2tlZCBmb3IgZml0dGluZyBhZGRyZXNzIHdpZHRoIHJlc3RyaWN0aW9u
IHJlcXVpcmVtZW50cy4NCj4gPj4NCj4gPj4gQW5kIHRoZW4gLSBpcyB0aGlzIG5lY2Vzc2FyeSBh
dCBhbGw/IFNob3VsZG4ndCAicHJlLWRlZmluZWQgYnkNCj4gPj4gY29uZmlndXJhdGlvbiB1c2lu
ZyBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyIgaW1wbHkgdGhlIG1lbW9yeQ0KPiA+PiBkZXNpZ25h
dGVkIGZvciBhIGd1ZXN0IGZpdHMgaXRzIERNQSBuZWVkcz8NCj4gPj4NCj4gPg0KPiA+IEhtbW0s
IEluIG15IHVuZGVyc3RhbmRpbmcsIGhlcmUgaXMgdGhlIERNQSByZXN0cmljdGlvbiB3aGVuIHVz
aW5nIGJ1ZGR5DQo+IGFsbG9jYXRvcjoNCj4gPiAgICAgZWxzZSBpZiAoIChkbWFfem9uZSA9IGJp
dHNfdG9fem9uZShkbWFfYml0c2l6ZSkpIDwgem9uZV9oaSApDQo+ID4gICAgICAgICBwZyA9IGFs
bG9jX2hlYXBfcGFnZXMoZG1hX3pvbmUgKyAxLCB6b25lX2hpLCBvcmRlciwgbWVtZmxhZ3MsDQo+
ID4gZCk7IGRtYV96b25lIGlzIHJlc3RyaWN0aW5nIHRoZSBzdGFydGluZyBidWRkeSBhbGxvY2F0
b3Igem9uZSwgc28gSSBhbQ0KPiA+IHRoaW5raW5nIHRoYXQgaGVyZSwgaXQgc2hhbGwgcmVzdHJp
Y3QgdGhlIGZpcnN0IHBhZ2UuDQo+ID4NCj4gPiBpbW8sIGlmIGxldCB1c2VyIGRlZmluZSwgaXQg
YWxzbyBjb3VsZCBiZSBtaXNzaW5nIERNQSByZXN0cmljdGlvbj8NCj4gDQo+IERpZCB5b3UgcmVh
ZCBteSBlYXJsaWVyIHJlcGx5PyBBZ2FpbjogVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBvcmRpbmFy
eQ0KPiBhbGxvY2F0aW9ucyAoYnVkZGllcykgY2FuJ3QgY3Jvc3Mgem9uZSBib3VuZGFyaWVzLiBI
ZW5jZSBpdCBpcyBpcnJlbGV2YW50IGlmIHlvdQ0KPiBjaGVjayBETUEgcHJvcGVydGllcyBvbiB0
aGUgZmlyc3Qgb3IgbGFzdCBwYWdlIC0gYm90aCB3aWxsIGhhdmUgdGhlIHNhbWUNCj4gbnVtYmVy
IG9mIHNpZ25pZmljYW50IGJpdHMuIFRoZSBzYW1lIGlzIC0gYWZhaWN0IC0gbm90IHRydWUgZm9y
IHN0YXRpYyBhbGxvY2F0aW9uDQo+IHJhbmdlcy4NCj4gDQoNClRydWUuDQoNCk9yZGluYXJ5IGFs
bG9jYXRpb25zIChidWRkaWVzKSBjYW4ndCBjcm9zcyB6b25lIGJvdW5kYXJpZXMsIFNvIEkgdW5k
ZXJzdGFuZCB0aGF0DQpmb2xsb3dpbmcgdGhlIGxvZ2ljIGluICJhbGxvY19oZWFwX3BhZ2VzKGRt
YV96b25lICsgMSwgem9uZV9oaSwgb3JkZXIsIG1lbWZsYWdzLCBkKTsiDQpwYWdlcyBvZiB0aGUg
c21hbGxlc3QgYWRkcmVzcyBzaGFsbCBiZSBhbGxvY2F0ZWQgZnJvbSAiZG1hX3pvbmUgKyAxIiwg
bGlrZSB5b3UNCnNhaWQsIGl0IGlzIGlycmVsZXZhbnQgaWYgeW91IGNoZWNrIERNQSBwcm9wZXJ0
aWVzIG9uIHRoZSBmaXJzdCBvciBsYXN0IHBhZ2VzLCBidXQgaW1vLCBubyBtYXR0ZXINCmZpcnN0
IG9yIGxhc3QgcGFnZSwgYm90aCBzaGFsbCBiZSBsYXJnZXIgdGhhbiAoMl4oZG1hX3pvbmUgKyAx
KSkuDQoNClRha2luZyAzMiBhcyBkbWFfYml0c2l6ZSwgdGhlbiB0aGUgbWVtb3J5IHdpdGggdGhp
cyBETUEgcmVzdHJpY3Rpb24gYWxsb2NhdGVkIGJ5DQoiYWxsb2NfaGVhcF9wYWdlcyhkbWFfem9u
ZSArIDEsIHpvbmVfaGksIG9yZGVyLCBtZW1mbGFncywgZCk7IiBzaGFsbCBiZSBhdCBsZWFzdA0K
bW9yZSB0aGFuIDRHLg0KDQpUaGF04oCZcyB3aHkgSSBrZWVwIGNvbXBhcmluZyB0aGUgZmlyc3Qg
cGFnZSBvZiBzdGF0aWMgYWxsb2NhdGlvbiwgdGhhdCBJIGFtIGZvbGxvd2luZyB0aGUNCiJtb3Jl
IHRoYW4iIGxvZ2ljIGhlcmUuDQoNCkJ1dCB5b3UncmUgcmlnaHQsIEkgZ290IGEgbGl0dGxlIGlu
dmVzdGlnYXRpb24gb24gQVJNIERNQSBsaW1pdGF0aW9uLCBzdGlsbCB0YWtpbmcgZG1hX2JpdHNp
emU9MzINCmFzIGFuIGV4YW1wbGUsIHdlIHdhbnQgdGhhdCB0aGUgYWN0dWFsbHkgYWxsb2NhdGVk
IG1lbW9yeSBpcyBzbWFsbGVyIHRoYW4gNEcsIG5vdCBtb3JlIHRoYW4uDQpTbyBJIHRoaW5rIHRo
ZSBsb2dpYyBiZWhpbmQgdGhpcyBjb2RlIGxpbmUNCiIgYWxsb2NfaGVhcF9wYWdlcyhkbWFfem9u
ZSArIDEsIHpvbmVfaGksIG9yZGVyLCBtZW1mbGFncywgZCk7IiBpcyBub3QgcmlnaHQgZm9yIEFS
TSwgYW5kIGl0IHNoYWxsDQpiZSBjaGFuZ2VkIHRvICJhbGxvY19oZWFwX3BhZ2VzKHpvbmVfbG8s
IGRtYV96b25lICsgMSwgb3JkZXIsIG1lbWZsYWdzLCBkKTsiIGFzIGNvcnJlY3Rpb24uDQoNCkFu
ZCBMYXRlciB3ZWkgd2lsbCBzZW5kIGEgbmV3IGlzc3VlIG9uIERNQSBsaW1pdGF0aW9uIG9uIEFS
TSB0byBjb21tdW5pdHkgZm9yIGRpc2N1c3Npb24uDQoNCkZvciBoZXJlLCBJJ2xsIHRha2UgeW91
ciBzdWdnZXN0aW9uIGZvciByZW1vdmluZyBETUEgbGltaXRhdGlvbiBvbiBTdGF0aWMgQWxsb2Nh
dGlvbi4NCg0KPiBPZiBjb3Vyc2UsIGFzIGV4cHJlc3NlZCBiZWZvcmUsIGEgcXVlc3Rpb24gaXMg
d2hldGhlciBETUEgc3VpdGFiaWxpdHkgbmVlZHMNCj4gY2hlY2tpbmcgaW4gdGhlIGZpcnN0IHBs
YWNlIGZvciBzdGF0aWMgYWxsb2NhdGlvbnM6IEknZCB2aWV3IGl0IGFzIG1pcy1jb25maWd1cmF0
aW9uDQo+IGlmIGEgZG9tYWluIHdhcyBwcm92aWRlZCBtZW1vcnkgaXQgY2FuJ3QgcmVhbGx5IHVz
ZSBwcm9wZXJseS4NCj4gDQo+IEphbg0KDQpDaGVlcnMNCg0KUGVubnkgWmhlbmcNCg==


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 09:39:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 09:39:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152962.282570 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1QUh-0004eX-9b; Thu, 08 Jul 2021 09:38:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152962.282570; Thu, 08 Jul 2021 09:38:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1QUh-0004eQ-54; Thu, 08 Jul 2021 09:38:55 +0000
Received: by outflank-mailman (input) for mailman id 152962;
 Thu, 08 Jul 2021 09:38:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1QUf-0004eG-OE; Thu, 08 Jul 2021 09:38:53 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1QUf-000313-Jl; Thu, 08 Jul 2021 09:38:53 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1QUf-0003Yp-61; Thu, 08 Jul 2021 09:38:53 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1QUf-00018B-5S; Thu, 08 Jul 2021 09:38:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xW83Wsb1YUcOoGeRyS3jrRkwPJEke+BQPpv2W3sacZs=; b=MDr27EZVOyiKmGQOmjhULx8YXH
	qpQEN1c78ScPljTE7Geajte4k122Eo2vajSqrGWUpu3VQ+KpCAPmkiDhdHKK1AROP8YjFe/f+K17W
	YbLmrvozIoftzEJL7VlkWRkjl1JeZFItDJsttb6vO/5Sg8oXIGjq5VCHjOFzZC8c4z4M=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163418-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163418: regressions - trouble: broken/fail/pass
X-Osstest-Failures:
    linux-linus:test-amd64-coresched-amd64-xl:<job status>:broken:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-coresched-amd64-xl:host-install(5):broken:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=a931dd33d370896a683236bba67c0d6f3d01144d
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 09:38:53 +0000

flight 163418 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163418/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-coresched-amd64-xl    <job status>                 broken
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-coresched-amd64-xl  5 host-install(5)      broken blocked in 152332
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                a931dd33d370896a683236bba67c0d6f3d01144d
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  341 days
Failing since        152366  2020-08-01 20:49:34 Z  340 days  581 attempts
Testing same since   163418  2021-07-07 19:41:22 Z    0 days    1 attempts

------------------------------------------------------------
6617 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                broken  
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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

broken-job test-amd64-coresched-amd64-xl broken
broken-step test-amd64-coresched-amd64-xl host-install(5)

Not pushing.

(No revision log; it would be 1931824 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 10:06:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 10:06:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152969.282584 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1QvC-0007p9-GX; Thu, 08 Jul 2021 10:06:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152969.282584; Thu, 08 Jul 2021 10:06:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1QvC-0007p2-D1; Thu, 08 Jul 2021 10:06:18 +0000
Received: by outflank-mailman (input) for mailman id 152969;
 Thu, 08 Jul 2021 10:06:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1QvB-0007ow-LU
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 10:06:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 215b3fe8-dfd4-11eb-855f-12813bfff9fa;
 Thu, 08 Jul 2021 10:06:15 +0000 (UTC)
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2050.outbound.protection.outlook.com [104.47.9.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-RNIzeyVPNneu6iAiCwVSMA-2; Thu, 08 Jul 2021 12:06:13 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5743.eurprd04.prod.outlook.com (2603:10a6:803:e0::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 10:06:12 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 10:06:12 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR08CA0010.eurprd08.prod.outlook.com (2603:10a6:208:d2::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Thu, 8 Jul 2021 10:06:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 215b3fe8-dfd4-11eb-855f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625738774;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=rVfISkU99P0r19Z3rZgAf7vFzRW94H9r+AliVenu5dM=;
	b=a0kANcrrCZl9vJIDhVorFPyO4RWRbseKpCNyHN9AG13Z+S30pdTVxGNFSJ49rmHoNXa+5H
	WmEj3x/QV0AZNYhJ3WWSwU1lAWPzbpn1MInwvldLo8PGszYK5iWw0iO//VXqTtRfWPgiMB
	gAGeVQv/hak0U7CaikRPa/z6sSu4F1I=
X-MC-Unique: RNIzeyVPNneu6iAiCwVSMA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fPDF3hHqnZ9mIjJbDtot+oBL16glBOWD1xtUkYen4PenHU0+p91BNty+V9kmYYz6JrE2yzpg+NVXcrO/MYTAlaVKjbrYDcQagQKYw8zR/VJFRtO+FjdaUJdvrR4IENs+AZGRDKpFchXNh7yQPK6cr1iyL5DL/H6JgmL/3IykinVBynloDd/GIls1OKpJlY8kTfIgU8l2EKJy3lwo7kKhpjMwIPk+hbsNbQlhgDwfkrUmfV5XZ5K9MsX4tf5MfYiph4iNtHCaKgqskeVkBoW8Nax8KypWk/syg/CnpwQ3aL5AbuYULMXg/9EmvVCatD8npDPEHXKR+vuwcCIJlqB1YA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MRYQ7yGEcA6a2SeFyLvl9aWSx4oFdocsSXHzBfXWTBw=;
 b=ZFDC1kFWerG+/XztH0+LbuEYI3kHHHOrTd1G8yr6XtIZmlUZBmcq57wQQ1EJOxcjZHIKx0vOtW5gULyfNRQ8daXirIfDyegVCZHRIlVvqAmBj2JDq26GrW853TvIKzCQ48kJXne2DqvKqwRAzmOYEzUR7vg74VJCORzMngulqRe8XtorRhaWxnbRy13EyHYhfy7pN3FbTRX64gp+u4lHy+p0yjKF0i0jTZSG/vcizQIRO9qNMlhDgaj8wGIgpUYU3/EySD18Qz6DQ/TyV5XtwxyBRErJE5pb7Yr2CdGvgrEnhyzRNa4HkOG8KAPsIG88aHuyRs2m00xkpihPDeZ48w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
To: Penny Zheng <Penny.Zheng@arm.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 Julien Grall <julien@xen.org>, Wei Chen <Wei.Chen@arm.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
 <VE1PR08MB5215139E9710EE5DE8E698B1F7199@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <886da191-602d-5dc6-8a4c-777aed90fb09@suse.com>
Date: Thu, 8 Jul 2021 12:06:10 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <VE1PR08MB5215139E9710EE5DE8E698B1F7199@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: AM0PR08CA0010.eurprd08.prod.outlook.com
 (2603:10a6:208:d2::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5608c6c9-c362-4891-aa90-08d941f803a1
X-MS-TrafficTypeDiagnostic: VI1PR04MB5743:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB57434A53346D8BF28AF86225B3199@VI1PR04MB5743.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	6DADQS2ByTHugL4r2J0EO1XiKVh9ggQFyvfTqgNRz629NIqm1goGolZzTDyBu9YknQPu8qlMOpVBDe271/nvE7Fu+wDwyEN90CMBOF5bzHkBxMEf/Sm7xDy+q+EBV/oue5pS4ZcfYdnILbwT3R59ucOde2KWD0hcN2p/63GITc8BkVsECgkzEGoTbMY5tdOdRpF+CvMNMbxIq1e3cC37UkskptKhEQuI9pLsBwAxFEFSx/TJjtFtSP0scdv0nfkw7zylrNSmVbgqof8FuIWVr423VJtQ1HszpSQLSQJKyMsdCitJmVKS7XsWKtHbGL4okXZ2xQKFln3Neo0/9K2h9MorUQR1PT3U0g+JIR86Zwv+zAOFyqo6umRjLw0inFXc6zyVURJZ3MtkofkjLlHjC0eX/8V/sSDwxkojsZY7frwnrM2JCw4nwPy9T60EPyaja5s0X+olyeIi3FfX5AiAqmSBk3zb6CtJO1A380ZkGL1ijTm7xyiaMFr/56IRgyClh0oFGymcxpuSLyqZEAP5KAONTUpLXHpTK5mel4XZ77GkzJ0mo6BUhLKTTfnHVAbCwOs4crTdmFdJDFz9FXh0NhY22a4m1E/Lizv5yVWyl4LKvUrAqHEYgI98WBkFUOGHrJkl+o51/TNA8j8sogyXp08qwdk0Y1PG3P7iA1kcIbXrPIkG/y9G9kIqRElhbvwrnqRNCZnjRwDTuR8RT3x+X7Fs0sXotPe7PzJUqxbqVjo=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(366004)(396003)(39850400004)(376002)(6486002)(66946007)(38100700002)(4326008)(36756003)(16576012)(316002)(54906003)(2616005)(956004)(66476007)(66556008)(2906002)(8936002)(8676002)(86362001)(6916009)(5660300002)(83380400001)(26005)(186003)(53546011)(31696002)(31686004)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?XfQ8+aaXGXp6fKtAFTxMqovW+qtuIxfGFJuHLBcakPKz/TVKPd6pji6KcgeH?=
 =?us-ascii?Q?NTKcVRJ9qOjG8Lc63QslaSXQiMFN5KKxrsLkMZAt2R3gdWbR4f++/kaTXmNi?=
 =?us-ascii?Q?LjnzlnfMeaKyDU0ztPkD8T4QZiYSnpsNhs1SYUk7dxPw8OsnhedJMyolkTuO?=
 =?us-ascii?Q?sNvw3QrcxNqH+sYPqcGWsnIOulS/bNwGrz7xZUynd2tImQwpph4mS3MF2FU8?=
 =?us-ascii?Q?xv5uSgslNwg4KQj+PnkIlthmZpHThimf3DqNZyHLUDXaPkEZ9OBK81MCOSkz?=
 =?us-ascii?Q?9xYHLSYTH3lI1jUHq4Q8VauB4RWgYVIAWHh9osg/ofKlsQMDkJfHQPHOm+16?=
 =?us-ascii?Q?EJR8ttZwGkgTfgTLdV4ZO/HPuD8uqxaLdCWDU9siQ7JUqPWg3liGyZea2QOf?=
 =?us-ascii?Q?imTlpEU15nrlhqwaOrKMXRtm8aEba9IaOM3aQWh+uyVeO12Il2TRU8zYwh/l?=
 =?us-ascii?Q?enFtwIUTaFT4z+kW2k/Ld45BYuAvj8mMrrBgMKiAFXYqWHN/BeFqQJJ/1VEk?=
 =?us-ascii?Q?4KZuEISoBPN4xYDS64WaKE7mVS+Dqe+NUGhX98uHiCMT4VfRsWIr/53tNZfO?=
 =?us-ascii?Q?QBo/zwERJPqvHaxIM4YfK20j2pIYYQO1O7izPoI8Z4pECma+TVWWR4xjI5F/?=
 =?us-ascii?Q?E2u8xdBdmldLTf5SdRE+LD/t8YyMku7rgoX6o9IXKrhWXs4QoxnL3TmhsICw?=
 =?us-ascii?Q?LwTHEWf0gWoLK0S9qPeiV/TqCL41L6Py3pcZOYhaUWv+f6+x8gtBWsp6/LRo?=
 =?us-ascii?Q?gHrJqQ8bgAdiwrPNV8WotM8F1O9W9x1ygb/gMMcH2b+YtCiOlFU2E27jjxrf?=
 =?us-ascii?Q?8GsAqbwR9kmhb2CfXWEbV5rBDhP/rjfVTaC0y/u/lf8W0/rk1+aaPta4ROss?=
 =?us-ascii?Q?BL4cBgS/nc/qXMwwqmCDFzAQ8sc0sirhpaDXh2oQvcpSK0yo15+ODDHoZxR6?=
 =?us-ascii?Q?Xj4z1RuzbfJqsjOcMD40lduulsuA0xcCMwTlg/fIbt0AVL6bwutiolY5F4go?=
 =?us-ascii?Q?E+4dZ9nLX1EQONuDtKw4mLLd25yvzAcEEqWUw1iqF46adVEfzcmOCexeRN+v?=
 =?us-ascii?Q?3LhhgsDr4bEQyddiZ15Vpq7BjneCG//JNIX0JRUEB9nj2iqxGpweU0abDzqY?=
 =?us-ascii?Q?qUvzTCkJtByGH/Gz2M+sLP1vspf6V4Qod00s2o/4YGWuPSfsUCjJAgZkwVAN?=
 =?us-ascii?Q?PWDvf2TYTE4s7bUOuwLbPk26c9ry6gphGQoxvvh0bkakfzkbo870/+QzrZro?=
 =?us-ascii?Q?xCKRe0Rzq6MSj/h6d2byttQeoWf33GN2DfU1rQJLgG2lU/iDiLGshU2n4bFD?=
 =?us-ascii?Q?wdR23+ZdNa5nVLGiSAzfns5Q?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5608c6c9-c362-4891-aa90-08d941f803a1
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 10:06:11.9696
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Zdy/qhOBbPEiqomJgsLZ8rsUXN6uWeasuWnYg6o1O4MOiCRlrp93j/1las89OGRzVllQgHUSjV52nlwIw9DUmw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5743

On 08.07.2021 11:09, Penny Zheng wrote:
> Hi Jan
>=20
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@suse.com>
>> Sent: Tuesday, July 6, 2021 2:54 PM
>> To: Penny Zheng <Penny.Zheng@arm.com>
>> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
>> <Wei.Chen@arm.com>; xen-devel@lists.xenproject.org;
>> sstabellini@kernel.org; Julien Grall <julien@xen.org>
>> Subject: Re: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
>> alloc_domstatic_pages
>>
>> On 06.07.2021 07:58, Penny Zheng wrote:
>>>> From: Jan Beulich <jbeulich@suse.com>
>>>> Sent: Thursday, June 10, 2021 6:23 PM
>>>>
>>>> On 07.06.2021 04:43, Penny Zheng wrote:
>>>>> --- a/xen/common/page_alloc.c
>>>>> +++ b/xen/common/page_alloc.c
>>>>> @@ -1065,6 +1065,75 @@ static struct page_info *alloc_heap_pages(
>>>>>      return pg;
>>>>>  }
>>>>>
>>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>>> +/*
>>>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static m=
emory.
>>>>> + * It is the equivalent of alloc_heap_pages for static memory  */
>>>>> +static struct page_info *alloc_staticmem_pages(unsigned long nr_mfns=
,
>>>>> +                                               mfn_t smfn,
>>>>> +                                               unsigned int
>>>>> +memflags) {
>>>>> +    bool need_tlbflush =3D false;
>>>>> +    uint32_t tlbflush_timestamp =3D 0;
>>>>> +    unsigned long i;
>>>>> +    struct page_info *pg;
>>>>> +
>>>>> +    /* For now, it only supports allocating at specified address. */
>>>>> +    if ( !mfn_valid(smfn) || !nr_mfns )
>>>>> +    {
>>>>> +        printk(XENLOG_ERR
>>>>> +               "Invalid %lu static memory starting at
>>>>> + %"PRI_mfn"\n",
>>>>
>>>> Reading a log containing e.g. "Invalid 0 static memory starting at
>>>> ..." I don't think I would recognize that the "0" is the count of page=
s.
>>>
>>> Sure. How about "try to allocate out of range page %"PRI_mfn"\n"?
>>
>> This still doesn't convey _both_ parts of the if() that would cause the =
log
>> message to be issued.
>>
>=20
> Sorry. How about
> "
>         printk(XENLOG_ERR
>                "Either out-of-range static memory starting at %"PRI_mfn""
>                "or invalid number of pages: %ul.\n",
>                mfn_x(smfn), nr_mfns);
> "

I'm sorry - while now you convey both aspects, the message has become
too verbose. What's wrong with "Invalid static memory request: ... pages
at ...\"? But I wonder anyway if a log message is appropriate here in
the first place.

>>>>> @@ -2434,6 +2512,57 @@ struct page_info *alloc_domheap_pages(
>>>>>      return pg;
>>>>>  }
>>>>>
>>>>> +#ifdef CONFIG_STATIC_ALLOCATION
>>>>> +/*
>>>>> + * Allocate nr_mfns contiguous pages, starting at #smfn, of static
>>>>> +memory,
>>>>> + * then assign them to one specific domain #d.
>>>>> + * It is the equivalent of alloc_domheap_pages for static memory.
>>>>> + */
>>>>> +struct page_info *alloc_domstatic_pages(
>>>>> +        struct domain *d, unsigned long nr_mfns, mfn_t smfn,
>>>>> +        unsigned int memflags)
>>>>> +{
>>>>> +    struct page_info *pg =3D NULL;
>>>>> +    unsigned long dma_size;
>>>>> +
>>>>> +    ASSERT(!in_irq());
>>>>> +
>>>>> +    if ( !dma_bitsize )
>>>>> +        memflags &=3D ~MEMF_no_dma;
>>>>> +    else
>>>>> +    {
>>>>> +        if ( (dma_bitsize - PAGE_SHIFT) > 0 )
>>>>> +        {
>>>>> +            dma_size =3D 1ul << (dma_bitsize - PAGE_SHIFT);
>>>>> +            /* Starting address shall meet the DMA limitation. */
>>>>> +            if ( mfn_x(smfn) < dma_size )
>>>>> +                return NULL;
>>>>
>>>> I think I did ask this on v1 already: Why the first page? Static
>>>> memory regions, unlike buddy allocator zones, can cross power-of-2
>>>> address boundaries. Hence it ought to be the last page that gets
>>>> checked for fitting address width restriction requirements.
>>>>
>>>> And then - is this necessary at all? Shouldn't "pre-defined by
>>>> configuration using physical address ranges" imply the memory
>>>> designated for a guest fits its DMA needs?
>>>>
>>>
>>> Hmmm, In my understanding, here is the DMA restriction when using buddy
>> allocator:
>>>     else if ( (dma_zone =3D bits_to_zone(dma_bitsize)) < zone_hi )
>>>         pg =3D alloc_heap_pages(dma_zone + 1, zone_hi, order, memflags,
>>> d); dma_zone is restricting the starting buddy allocator zone, so I am
>>> thinking that here, it shall restrict the first page.
>>>
>>> imo, if let user define, it also could be missing DMA restriction?
>>
>> Did you read my earlier reply? Again: The difference is that ordinary
>> allocations (buddies) can't cross zone boundaries. Hence it is irrelevan=
t if you
>> check DMA properties on the first or last page - both will have the same
>> number of significant bits. The same is - afaict - not true for static a=
llocation
>> ranges.
>>
>=20
> True.
>=20
> Ordinary allocations (buddies) can't cross zone boundaries, So I understa=
nd that
> following the logic in "alloc_heap_pages(dma_zone + 1, zone_hi, order, me=
mflags, d);"
> pages of the smallest address shall be allocated from "dma_zone + 1", lik=
e you
> said, it is irrelevant if you check DMA properties on the first or last p=
ages, but imo, no matter
> first or last page, both shall be larger than (2^(dma_zone + 1)).
>=20
> Taking 32 as dma_bitsize, then the memory with this DMA restriction alloc=
ated by
> "alloc_heap_pages(dma_zone + 1, zone_hi, order, memflags, d);" shall be a=
t least
> more than 4G.

DMA restrictions are always "needs to be no more than N bits".

> That=E2=80=99s why I keep comparing the first page of static allocation, =
that I am following the
> "more than" logic here.
>=20
> But you're right, I got a little investigation on ARM DMA limitation, sti=
ll taking dma_bitsize=3D32
> as an example, we want that the actually allocated memory is smaller than=
 4G, not more than.
> So I think the logic behind this code line
> " alloc_heap_pages(dma_zone + 1, zone_hi, order, memflags, d);" is not ri=
ght for ARM, and it shall
> be changed to "alloc_heap_pages(zone_lo, dma_zone + 1, order, memflags, d=
);" as correction.

But this step is to _avoid_ the DMA-reserved part of the heap.
The caller requests address restricted memory by passing suitable
memflags. If the request doesn't require access to the DMA-
reserved part of the heap (dma_zone < zone_hi) we first try to
get memory from there. Only if that fails will we fall back and
try taking memory from the lower region. IOW the problem with
your code is more fundamental: You use dma_bitsize when really
you ought to extract the caller's requested restriction (if any)
from memflags. I would assume that dma_bitsize is orthogonal to
static memory, i.e. you don't need to try to preserve low memory.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 10:17:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 10:17:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152974.282594 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1R6A-0000vm-Kr; Thu, 08 Jul 2021 10:17:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152974.282594; Thu, 08 Jul 2021 10:17:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1R6A-0000vf-Hx; Thu, 08 Jul 2021 10:17:38 +0000
Received: by outflank-mailman (input) for mailman id 152974;
 Thu, 08 Jul 2021 10:17:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1R69-0000vV-MD; Thu, 08 Jul 2021 10:17:37 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1R69-0003hI-D1; Thu, 08 Jul 2021 10:17:37 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1R69-0004hh-51; Thu, 08 Jul 2021 10:17:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1R69-0000wN-4S; Thu, 08 Jul 2021 10:17:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=heW1So29u+fZzVRBkKFl1h2F4i9W/A80EuCpcBDLios=; b=Br6xob0242lZTEdqLTBEd7fDIH
	6GfqJ+muR8PmhQYg/+8N7e0S1wLnffIxaiBVVgHmfaLqV3y5mLeyxxo6NvEjPPWWBWGowhS0y1/2U
	CYGcodbqKQ+94ZOq3E768ZZn4M4DAFVxBHcJiOrVLxBJ/zuD/XYeZllt7dU0yeXBkzY4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163431-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163431: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=de1e0ae0e3119e9bfd0c21e8502e64c076009861
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 10:17:37 +0000

flight 163431 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163431/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              de1e0ae0e3119e9bfd0c21e8502e64c076009861
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  363 days
Failing since        151818  2020-07-11 04:18:52 Z  362 days  354 attempts
Testing same since   163431  2021-07-08 04:19:58 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64156 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 10:23:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 10:23:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152981.282612 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1RBh-0002L1-Ar; Thu, 08 Jul 2021 10:23:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152981.282612; Thu, 08 Jul 2021 10:23:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1RBh-0002Ku-7a; Thu, 08 Jul 2021 10:23:21 +0000
Received: by outflank-mailman (input) for mailman id 152981;
 Thu, 08 Jul 2021 10:23:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1RBf-0002Kk-Jt; Thu, 08 Jul 2021 10:23:19 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1RBf-0003oR-EL; Thu, 08 Jul 2021 10:23:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1RBf-0004vV-4m; Thu, 08 Jul 2021 10:23:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1RBf-0004Tc-4D; Thu, 08 Jul 2021 10:23:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=8xpqZQUH4YKOZz8FLb3n7ggu2XNtDQql9gro5KyGDDA=; b=YONohrxgaZfpRU9PdlY2ygAukg
	Jw2aJT9eB0Fd31xs2etLOaUPZg2qU9L6jezCDf4YfUw0Xz58XLIB/SxRoDzfVa41qBMilkOUajWzN
	EHRlnY26CN2Ra+eD2j/1D2oHhJPcnzsxFdynplF585vdWq3WbHpCZlxC6SFBy7tVaybg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163426-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163426: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=0e3b6bd0ee753d77c957480657060ae1ea5172b0
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 10:23:19 +0000

flight 163426 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163426/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 0e3b6bd0ee753d77c957480657060ae1ea5172b0
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   34 days
Failing since        162368  2021-06-04 15:42:59 Z   33 days   95 attempts
Testing same since   163426  2021-07-08 01:10:13 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3418 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 10:52:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 10:52:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152990.282629 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Rdb-0005Qr-Lv; Thu, 08 Jul 2021 10:52:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152990.282629; Thu, 08 Jul 2021 10:52:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Rdb-0005Qk-Iq; Thu, 08 Jul 2021 10:52:11 +0000
Received: by outflank-mailman (input) for mailman id 152990;
 Thu, 08 Jul 2021 10:52:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=mEkc=MA=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m1Rda-0005Qe-9F
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 10:52:10 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2eebbe15-09cd-4348-84ed-2edcc1f9c49f;
 Thu, 08 Jul 2021 10:52:09 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2eebbe15-09cd-4348-84ed-2edcc1f9c49f
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625741529;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=3HBLD4vlwTbkOgi6R/w1pduAtFCNCy+QJS7RYM7kHlE=;
  b=f6NXYpdDU9RZ4gFBwXYDU+K63ZMCxGoZv9nVSpQpYox2bu1K+5J+Bstr
   5Hhwhh/eHQiZG9XkaZspxB0uqsyK8ECDF8FG2mIrcs6SDz5ERJZAY+4Vm
   8U2+uirUfD1Mdl051NAaWsoNBqPHn6VB5CneQ4T4N9gDDG1ZYRIVBf5z4
   o=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 3KdEPvKP31zCDsRBC1io33jvNVVAyRFP1gC6FYboLFiKb4cWH27ZkJIfEGz4hFlKgYWQJ2l/R8
 QklRZvAOQ9HmJhEA5llTy/k9VKXmAPvqXJp1lU6b3ZUduvQl/q9trZuAEBBrgnB7uKITAMel4l
 ixLep7nk9jT1M01MYIUCbjinDhfP0wfmgbEH/airAfej3HUyPJPzRUMB3cK7zDhkXVBk68hK2e
 dJV/o19calk5xgKlvpOaSv0ou3i/UbrQHw9iVewB7tsUZsxulCYDnpiQksBNib4NcLdEhWkUos
 iFs=
X-SBRS: 5.1
X-MesageID: 47827284
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:rQahdqHO+6k5S+VopLqE0MeALOsnbusQ8zAXP0AYc31om+ij5q
 eTdZMgpHnJYVcqKRUdcL+7VJVoLUmyyXcx2/hpAV7AZniChILLFvAA0WKK+VSJcEeSygce79
 YDT0EXMqyJMbEQt6bHCWeDfeod/A==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47827284"
Date: Thu, 8 Jul 2021 11:52:03 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <YObY02T0Mhnw82DS@perard>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
 <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>

On Wed, Jul 07, 2021 at 06:46:03PM +0100, Andrew Cooper wrote:
> On 07/07/2021 17:40, Anthony PERARD wrote:
> > ninja is now required to build the latest version of QEMU, some
> > container still don't have ninja and attempting to add it breaks the
> > build for different reasons, so QEMU will be skip on those containers.
> >
> > Failures:
> > - ubuntu/xenial:
> >     fatal: ninja version (1.5.1) incompatible with build file ninja_required_version version (1.7.1).
> > - debian/unstable-i386: (debian-unstable-32)
> >     /build/tools/flask/policy/Makefile.common:115: *** target pattern contains no '%'.  Stop.
> > - suse/opensuse-tumbleweed:
> >     failed to build iPXE
> > - debian/unstable:
> >     update of the container fails with:
> >         The following packages have unmet dependencies:
> >          clang-8 : Depends: libstdc++-8-dev but it is not installable
> >                    Depends: libgcc-8-dev but it is not installable
> >                    Depends: libobjc-8-dev but it is not installable
> >                    Recommends: llvm-8-dev but it is not going to be installed
> >                    Recommends: libomp-8-dev but it is not going to be installed
> 
> Only the first failure seems to be related to ninja.
> 
> The second is a known bug which still needs addressing. Our build
> system's logic to cope with `checkpolicy` being absent doesn't work.
> 
> Tumbleweed is generally broken and fails at ./configure due to missing
> compression libraries. It is quite possible that the iPXE failure is
> related.
> 
> The final one is probably because unstable has dropped clang-8. The
> container hasn't been rebuilt in a while because we still haven't got
> auto-rebuild sorted.


So those containers are ones that I've noticed needed ninja (as found
out by looking at a single pipeline), but one which trying to install
ninja and thus rebuilding the container mean that the build was broken.
I just didn't want to spend time trying to fix issues that should have
been found out by a regular rebuild of the containers. So I've just
listed the reason there and moved on.

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:07:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:07:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.152996.282640 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1RsS-00071n-VZ; Thu, 08 Jul 2021 11:07:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 152996.282640; Thu, 08 Jul 2021 11:07:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1RsS-00071g-RB; Thu, 08 Jul 2021 11:07:32 +0000
Received: by outflank-mailman (input) for mailman id 152996;
 Thu, 08 Jul 2021 11:07:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Cooy=MA=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m1RsR-00071Y-Jc
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:07:31 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.0.55]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0981ba37-08bb-4fdd-95c0-7f1bd546197a;
 Thu, 08 Jul 2021 11:07:28 +0000 (UTC)
Received: from DB6PR0601CA0007.eurprd06.prod.outlook.com (2603:10a6:4:7b::17)
 by PAXPR08MB6816.eurprd08.prod.outlook.com (2603:10a6:102:130::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Thu, 8 Jul
 2021 11:07:26 +0000
Received: from DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:7b:cafe::b0) by DB6PR0601CA0007.outlook.office365.com
 (2603:10a6:4:7b::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Thu, 8 Jul 2021 11:07:26 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT033.mail.protection.outlook.com (10.152.20.76) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Thu, 8 Jul 2021 11:07:26 +0000
Received: ("Tessian outbound 257aba444440:v98");
 Thu, 08 Jul 2021 11:07:26 +0000
Received: from 864199ffcfed.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 B1F19F28-4CDE-4E8F-84B8-FDC8F26BF6DA.1; 
 Thu, 08 Jul 2021 11:07:20 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 864199ffcfed.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 08 Jul 2021 11:07:20 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR0802MB2413.eurprd08.prod.outlook.com (2603:10a6:800:b9::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 11:07:18 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 11:07:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0981ba37-08bb-4fdd-95c0-7f1bd546197a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=y3RtZeATn69YkYX3X9oMAoBOMiXYHPyT1fSxmSjkEY4=;
 b=keYrMZVSwdBoVqFu3WFzF5nXJs3PmVzz8naaqANWvoCPW9wieRH9zQFVIj0ILLM8r4D38vI2aPKoh0Y0ltyyTAGijygFsF4O6yjXylGD6QLSvI+s9Pq30mlq3g5v7mgMOkfQcgTzQdPje1oN5PDrntVvVh5tO8AnaiN68+MZKxw=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EUK+dudsTMSQIy81OhLfpZ1INaKYDvXMswi+4TPPSj/bKULovFDot/HH4FQEB5E+nw/4rFi0pxQBZWiXWoBgokuKkSjC9U4l3Iyl4ujS6/AMha72b3D3tbskCniNi9vBDme0JM8iwIo4ainXFDy2eWvM3d4Lfl91eh5tRCkjOFe0dUMqTMb2qdPkBpJ4SiCSShXpNI8bSDfeQQV9B1bll/9ZYmhYzuA8kvEzyUb7DF/U6dsItDdzySXu5riA5oiYITSIY5OkS+Ccb2O93uXlAXIrvOOu7YurB9+4oarYwcg4QISG2I9+s5J2sm89NKKyrxyhxIycyWglaH9vJY9Okg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=y3RtZeATn69YkYX3X9oMAoBOMiXYHPyT1fSxmSjkEY4=;
 b=KlQkdYfXVsDuYlgTJpNHGJlVGRTQ4UAY/oi9cO45o3HRO6Mcv/W4Y0Y6lDEnrv2p2qn+UTCvp1dSbeMVOMc3lwh9Z8DfwM+xkjYuc7wVWmw6BhGMMPnm9CTRVzn0S4J4Esityhi1Tgg1rohf7qV5tOrZdQSFfw2jtlyP9NLvyWHCzurjOWxLHZe2kp6FwNlthcQ+HJmdxcNjFw7OXF3zGEPsITNppRkVjWNbEQD/dpxeBrvfgQSvB7MFLQkK6BZSDIa93lQ3930CL0xEYF/071ock0xkIqb4fR6SkiBya1OwM7da0fsefjOgsYN6mkPfS8N+M8g9IYXjffiUNt6j5Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=y3RtZeATn69YkYX3X9oMAoBOMiXYHPyT1fSxmSjkEY4=;
 b=keYrMZVSwdBoVqFu3WFzF5nXJs3PmVzz8naaqANWvoCPW9wieRH9zQFVIj0ILLM8r4D38vI2aPKoh0Y0ltyyTAGijygFsF4O6yjXylGD6QLSvI+s9Pq30mlq3g5v7mgMOkfQcgTzQdPje1oN5PDrntVvVh5tO8AnaiN68+MZKxw=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"sstabellini@kernel.org" <sstabellini@kernel.org>, Julien Grall
	<julien@xen.org>, Wei Chen <Wei.Chen@arm.com>
Subject: RE: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
Thread-Topic: [PATCH 6/9] xen/arm: introduce alloc_staticmem_pages and
 alloc_domstatic_pages
Thread-Index:
 AQHXW0b5Q8/Ges+XOkqFV81MfBckcqsNDrqAgChoyZCAADlHgIADP/FggAAadwCAAAIMsA==
Date: Thu, 8 Jul 2021 11:07:18 +0000
Message-ID:
 <VE1PR08MB5215EC648B15AF57D2E7051EF7199@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210607024318.3988467-1-penny.zheng@arm.com>
 <20210607024318.3988467-7-penny.zheng@arm.com>
 <c31a85c3-89ea-76a4-3b29-a411d419fb59@suse.com>
 <VE1PR08MB5215E2802F3DE22F1F244023F71B9@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <caa11a54-acb6-928d-de3a-8e081a7c3d34@suse.com>
 <VE1PR08MB5215139E9710EE5DE8E698B1F7199@VE1PR08MB5215.eurprd08.prod.outlook.com>
 <886da191-602d-5dc6-8a4c-777aed90fb09@suse.com>
In-Reply-To: <886da191-602d-5dc6-8a4c-777aed90fb09@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 3FB372343F2AC74180C47D5DB0EF4BEA.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: ddab1da7-cfd5-4723-8671-08d9420091d2
x-ms-traffictypediagnostic: VI1PR0802MB2413:|PAXPR08MB6816:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<PAXPR08MB6816B8D2419A401AA6CB2A42F7199@PAXPR08MB6816.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 nE5FIYHoSNomMgONyKAD4JQNQ6n2VzbYdT5FnV+Js+DfuZviIW3P/yRzEbS0AMl8urNntrAh5BerfpFPrizuqLQIuykGSsVQ2/4ZxsR7tI2dXoTrhsWKl8RGGU00oyKRPyCwiHgRy+DA84jhntkyMLWHFr4mNwukhbYR7MN1n3y54y94fzfOh9ks+EWXSSN69dj9sJ+er6YUQdWfFcpWRzDjwQoUzjsS/vmXYnxqxa+YA32+a5Y+CKteK35J4St9DnCvlPJwDcjURQTUEu8G2OZq+HZYE/Ci7kZxq7+i8DI4cmPbu4U3gYIdbLtzb1aMDaClVEOsPuztcB9o5cZ/tcFPSODffRMeF021hf4Vfz32iqoawMMiaXPfsx7w28F71bAzz3qitR6lXSheohZ/vCeUPLO2AsqyFnY+rj4xMPtIT359stXzsdG2Ft3/kK9ge0AvOTBRqeGNXOmElU9Yf0XhLhm1qdrHb2eXBrTRtWUf7vHAxlehIPqR6Tp+UiI4PhsE8iwuYrJxW9u+FiMOYkvx6K72MWAhdUmKNA67yAC730OWhKZ5EsYXkxjvMYT20rONpAYknDpzEUcxNHOBwEfRohL55aqdLZCTmB3WQax3ngd1HY7ng+/8W95UtdNBK7w3CCcHrOfxqcwQCtq3dBn+7brAb3Iw+n5/6W/P8VCN52y3IAs2t1JIU3O1+KSdvQ38RNsJGGLHHpUikKQeyw==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(376002)(396003)(366004)(39850400004)(26005)(122000001)(4326008)(316002)(76116006)(38100700002)(8936002)(186003)(2906002)(83380400001)(66946007)(66476007)(64756008)(33656002)(6916009)(54906003)(66556008)(9686003)(53546011)(478600001)(7696005)(55016002)(71200400001)(5660300002)(8676002)(6506007)(52536014)(86362001)(66446008)(396324004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2413
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	01569a71-a11c-4ad4-aff6-08d942008d21
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	YSjlI9/hwH0+MRzHxh3gkeT6+wvxiHH3dwlYZhCIAeAhK4SKcM0ryzQobKOkRDNPdGHjipO7ZgElEafJJM2zF0epmnU0//RvAlxIAttarW6Gq4mXHj5pbmHO+kQVHndN2ElnSAtdvG8GlD4VK5fcQ2PpiHEI6OROMbGWBlc3Nmts7QbWQM97hov4zsao6YTQZNFDJCba0plIclYo++WckVCEp//zPCcR9FoFJFcrLXoM5x8u6AsYwQOzcNqN6VKMT817Fgd2LLeCqIQGwkNlBqGqhuc/oM+ygQdQHjvM9F5ueCUkPg091uj0jASeFosfsvOt904fZ+OqrjplZQYvsgD8C/PZpLxpqqO4r8uewGwy/kHtsnie78BYp5wCMjbGTKasZepE37S6XfzNIqzElGe01Eu90gleo01tHgVELytLHpHaFbcbPlzXpqbLpOpHkSQpgxwDOVKWHf5MqqrA4fvP4Cq+289DhU8LK32iyvktaQaDWPmM9KkRQGtUheMN7TPjsMWmQiam6pRvV1B1xDZm0msIqjoPi4CMbTTaaSv9XEYxF9Rmkoo/X+pFL+IdjIP1stKdM+eOi9VDDJ7k1BpRO2tOCYagzkk0T8KmHNWklLPQwUYtR7x+FyFvJFM6RxDriLDIoKCaHBPOFBKrDuKDUYDwBJD7qCI/B+n/3EzFvit9oUXAecairwNHcQhEEHnP3ANrdl/7SmgphdNlrWMr2IWnYoGEhk0ubVxSEac=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(396003)(39850400004)(346002)(376002)(36840700001)(46966006)(82310400003)(9686003)(53546011)(8676002)(6506007)(336012)(70586007)(316002)(26005)(70206006)(5660300002)(54906003)(55016002)(7696005)(82740400003)(52536014)(47076005)(186003)(6862004)(83380400001)(478600001)(81166007)(2906002)(4326008)(33656002)(356005)(8936002)(86362001)(36860700001)(396324004);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 11:07:26.3472
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ddab1da7-cfd5-4723-8671-08d9420091d2
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT033.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6816

SGkgSmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgSnVseSA4LCAyMDIxIDY6
MDYgUE0NCj4gVG86IFBlbm55IFpoZW5nIDxQZW5ueS5aaGVuZ0Bhcm0uY29tPg0KPiBDYzogQmVy
dHJhbmQgTWFycXVpcyA8QmVydHJhbmQuTWFycXVpc0Bhcm0uY29tPjsgeGVuLQ0KPiBkZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZzsgc3N0YWJlbGxpbmlAa2VybmVsLm9yZzsgSnVsaWVuIEdyYWxs
DQo+IDxqdWxpZW5AeGVuLm9yZz47IFdlaSBDaGVuIDxXZWkuQ2hlbkBhcm0uY29tPg0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIDYvOV0geGVuL2FybTogaW50cm9kdWNlIGFsbG9jX3N0YXRpY21lbV9w
YWdlcyBhbmQNCj4gYWxsb2NfZG9tc3RhdGljX3BhZ2VzDQo+IA0KPiBPbiAwOC4wNy4yMDIxIDEx
OjA5LCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPiBIaSBKYW4NCj4gPg0KPiA+PiAtLS0tLU9yaWdp
bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5j
b20+DQo+ID4+IFNlbnQ6IFR1ZXNkYXksIEp1bHkgNiwgMjAyMSAyOjU0IFBNDQo+ID4+IFRvOiBQ
ZW5ueSBaaGVuZyA8UGVubnkuWmhlbmdAYXJtLmNvbT4NCj4gPj4gQ2M6IEJlcnRyYW5kIE1hcnF1
aXMgPEJlcnRyYW5kLk1hcnF1aXNAYXJtLmNvbT47IFdlaSBDaGVuDQo+ID4+IDxXZWkuQ2hlbkBh
cm0uY29tPjsgeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOw0KPiA+PiBzc3RhYmVsbGlu
aUBrZXJuZWwub3JnOyBKdWxpZW4gR3JhbGwgPGp1bGllbkB4ZW4ub3JnPg0KPiA+PiBTdWJqZWN0
OiBSZTogW1BBVENIIDYvOV0geGVuL2FybTogaW50cm9kdWNlIGFsbG9jX3N0YXRpY21lbV9wYWdl
cyBhbmQNCj4gPj4gYWxsb2NfZG9tc3RhdGljX3BhZ2VzDQo+ID4+DQo+ID4+IE9uIDA2LjA3LjIw
MjEgMDc6NTgsIFBlbm55IFpoZW5nIHdyb3RlOg0KPiA+Pj4+IEZyb206IEphbiBCZXVsaWNoIDxq
YmV1bGljaEBzdXNlLmNvbT4NCj4gPj4+PiBTZW50OiBUaHVyc2RheSwgSnVuZSAxMCwgMjAyMSA2
OjIzIFBNDQo+ID4+Pj4NCj4gPj4+PiBPbiAwNy4wNi4yMDIxIDA0OjQzLCBQZW5ueSBaaGVuZyB3
cm90ZToNCj4gPj4+Pj4gLS0tIGEveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMNCj4gPj4+Pj4gKysr
IGIveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMNCj4gPj4+Pj4gQEAgLTEwNjUsNiArMTA2NSw3NSBA
QCBzdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqYWxsb2NfaGVhcF9wYWdlcygNCj4gPj4+Pj4gICAg
ICByZXR1cm4gcGc7DQo+ID4+Pj4+ICB9DQo+ID4+Pj4+DQo+ID4+Pj4+ICsjaWZkZWYgQ09ORklH
X1NUQVRJQ19BTExPQ0FUSU9ODQo+ID4+Pj4+ICsvKg0KPiA+Pj4+PiArICogQWxsb2NhdGUgbnJf
bWZucyBjb250aWd1b3VzIHBhZ2VzLCBzdGFydGluZyBhdCAjc21mbiwgb2Ygc3RhdGljDQo+IG1l
bW9yeS4NCj4gPj4+Pj4gKyAqIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mIGFsbG9jX2hlYXBfcGFn
ZXMgZm9yIHN0YXRpYyBtZW1vcnkgICovDQo+ID4+Pj4+ICtzdGF0aWMgc3RydWN0IHBhZ2VfaW5m
byAqYWxsb2Nfc3RhdGljbWVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfbWZucywNCj4gPj4+Pj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZuX3Qgc21m
biwNCj4gPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50DQo+ID4+Pj4+ICttZW1mbGFncykgew0KPiA+Pj4+PiArICAgIGJvb2wg
bmVlZF90bGJmbHVzaCA9IGZhbHNlOw0KPiA+Pj4+PiArICAgIHVpbnQzMl90IHRsYmZsdXNoX3Rp
bWVzdGFtcCA9IDA7DQo+ID4+Pj4+ICsgICAgdW5zaWduZWQgbG9uZyBpOw0KPiA+Pj4+PiArICAg
IHN0cnVjdCBwYWdlX2luZm8gKnBnOw0KPiA+Pj4+PiArDQo+ID4+Pj4+ICsgICAgLyogRm9yIG5v
dywgaXQgb25seSBzdXBwb3J0cyBhbGxvY2F0aW5nIGF0IHNwZWNpZmllZCBhZGRyZXNzLiAqLw0K
PiA+Pj4+PiArICAgIGlmICggIW1mbl92YWxpZChzbWZuKSB8fCAhbnJfbWZucyApDQo+ID4+Pj4+
ICsgICAgew0KPiA+Pj4+PiArICAgICAgICBwcmludGsoWEVOTE9HX0VSUg0KPiA+Pj4+PiArICAg
ICAgICAgICAgICAgIkludmFsaWQgJWx1IHN0YXRpYyBtZW1vcnkgc3RhcnRpbmcgYXQNCj4gPj4+
Pj4gKyAlIlBSSV9tZm4iXG4iLA0KPiA+Pj4+DQo+ID4+Pj4gUmVhZGluZyBhIGxvZyBjb250YWlu
aW5nIGUuZy4gIkludmFsaWQgMCBzdGF0aWMgbWVtb3J5IHN0YXJ0aW5nIGF0DQo+ID4+Pj4gLi4u
IiBJIGRvbid0IHRoaW5rIEkgd291bGQgcmVjb2duaXplIHRoYXQgdGhlICIwIiBpcyB0aGUgY291
bnQgb2YgcGFnZXMuDQo+ID4+Pg0KPiA+Pj4gU3VyZS4gSG93IGFib3V0ICJ0cnkgdG8gYWxsb2Nh
dGUgb3V0IG9mIHJhbmdlIHBhZ2UgJSJQUklfbWZuIlxuIj8NCj4gPj4NCj4gPj4gVGhpcyBzdGls
bCBkb2Vzbid0IGNvbnZleSBfYm90aF8gcGFydHMgb2YgdGhlIGlmKCkgdGhhdCB3b3VsZCBjYXVz
ZQ0KPiA+PiB0aGUgbG9nIG1lc3NhZ2UgdG8gYmUgaXNzdWVkLg0KPiA+Pg0KPiA+DQo+ID4gU29y
cnkuIEhvdyBhYm91dA0KPiA+ICINCj4gPiAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSDQo+ID4g
ICAgICAgICAgICAgICAgIkVpdGhlciBvdXQtb2YtcmFuZ2Ugc3RhdGljIG1lbW9yeSBzdGFydGlu
ZyBhdCAlIlBSSV9tZm4iIg0KPiA+ICAgICAgICAgICAgICAgICJvciBpbnZhbGlkIG51bWJlciBv
ZiBwYWdlczogJXVsLlxuIiwNCj4gPiAgICAgICAgICAgICAgICBtZm5feChzbWZuKSwgbnJfbWZu
cyk7DQo+ID4gIg0KPiANCj4gSSdtIHNvcnJ5IC0gd2hpbGUgbm93IHlvdSBjb252ZXkgYm90aCBh
c3BlY3RzLCB0aGUgbWVzc2FnZSBoYXMgYmVjb21lIHRvbw0KPiB2ZXJib3NlLiBXaGF0J3Mgd3Jv
bmcgd2l0aCAiSW52YWxpZCBzdGF0aWMgbWVtb3J5IHJlcXVlc3Q6IC4uLiBwYWdlcyBhdCAuLi5c
Ij8NCj4gQnV0IEkgd29uZGVyIGFueXdheSBpZiBhIGxvZyBtZXNzYWdlIGlzIGFwcHJvcHJpYXRl
IGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlLg0KPiANCg0KU29ycnkgZm9yIG15IHBvb3IgRW5nbGlz
aCB3cml0aW5nLiA6Lw0KSnVzdCBoYXZpbmcgYSBoYWJpdChtYXliZSBub3QgYSBnb29kIGhhYml0
KSBvZiBwcmludGluZyBlcnJvciBtZXNzYWdlcywgaWYgeW91IHRoaW5rIHRoZQ0KbG9nIGl0c2Vs
ZiBpcyB2ZXJib3NlIGhlcmUsIEknbGwgcmVtb3ZlIGl0LiA7KQ0KDQo+ID4+Pj4+IEBAIC0yNDM0
LDYgKzI1MTIsNTcgQEAgc3RydWN0IHBhZ2VfaW5mbyAqYWxsb2NfZG9taGVhcF9wYWdlcygNCj4g
Pj4+Pj4gICAgICByZXR1cm4gcGc7DQo+ID4+Pj4+ICB9DQo+ID4+Pj4+DQo+ID4+Pj4+ICsjaWZk
ZWYgQ09ORklHX1NUQVRJQ19BTExPQ0FUSU9ODQo+ID4+Pj4+ICsvKg0KPiA+Pj4+PiArICogQWxs
b2NhdGUgbnJfbWZucyBjb250aWd1b3VzIHBhZ2VzLCBzdGFydGluZyBhdCAjc21mbiwgb2YNCj4g
Pj4+Pj4gK3N0YXRpYyBtZW1vcnksDQo+ID4+Pj4+ICsgKiB0aGVuIGFzc2lnbiB0aGVtIHRvIG9u
ZSBzcGVjaWZpYyBkb21haW4gI2QuDQo+ID4+Pj4+ICsgKiBJdCBpcyB0aGUgZXF1aXZhbGVudCBv
ZiBhbGxvY19kb21oZWFwX3BhZ2VzIGZvciBzdGF0aWMgbWVtb3J5Lg0KPiA+Pj4+PiArICovDQo+
ID4+Pj4+ICtzdHJ1Y3QgcGFnZV9pbmZvICphbGxvY19kb21zdGF0aWNfcGFnZXMoDQo+ID4+Pj4+
ICsgICAgICAgIHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgbnJfbWZucywgbWZuX3Qg
c21mbiwNCj4gPj4+Pj4gKyAgICAgICAgdW5zaWduZWQgaW50IG1lbWZsYWdzKQ0KPiA+Pj4+PiAr
ew0KPiA+Pj4+PiArICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnID0gTlVMTDsNCj4gPj4+Pj4gKyAg
ICB1bnNpZ25lZCBsb25nIGRtYV9zaXplOw0KPiA+Pj4+PiArDQo+ID4+Pj4+ICsgICAgQVNTRVJU
KCFpbl9pcnEoKSk7DQo+ID4+Pj4+ICsNCj4gPj4+Pj4gKyAgICBpZiAoICFkbWFfYml0c2l6ZSAp
DQo+ID4+Pj4+ICsgICAgICAgIG1lbWZsYWdzICY9IH5NRU1GX25vX2RtYTsNCj4gPj4+Pj4gKyAg
ICBlbHNlDQo+ID4+Pj4+ICsgICAgew0KPiA+Pj4+PiArICAgICAgICBpZiAoIChkbWFfYml0c2l6
ZSAtIFBBR0VfU0hJRlQpID4gMCApDQo+ID4+Pj4+ICsgICAgICAgIHsNCj4gPj4+Pj4gKyAgICAg
ICAgICAgIGRtYV9zaXplID0gMXVsIDw8IChkbWFfYml0c2l6ZSAtIFBBR0VfU0hJRlQpOw0KPiA+
Pj4+PiArICAgICAgICAgICAgLyogU3RhcnRpbmcgYWRkcmVzcyBzaGFsbCBtZWV0IHRoZSBETUEg
bGltaXRhdGlvbi4gKi8NCj4gPj4+Pj4gKyAgICAgICAgICAgIGlmICggbWZuX3goc21mbikgPCBk
bWFfc2l6ZSApDQo+ID4+Pj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4+Pj4N
Cj4gPj4+PiBJIHRoaW5rIEkgZGlkIGFzayB0aGlzIG9uIHYxIGFscmVhZHk6IFdoeSB0aGUgZmly
c3QgcGFnZT8gU3RhdGljDQo+ID4+Pj4gbWVtb3J5IHJlZ2lvbnMsIHVubGlrZSBidWRkeSBhbGxv
Y2F0b3Igem9uZXMsIGNhbiBjcm9zcyBwb3dlci1vZi0yDQo+ID4+Pj4gYWRkcmVzcyBib3VuZGFy
aWVzLiBIZW5jZSBpdCBvdWdodCB0byBiZSB0aGUgbGFzdCBwYWdlIHRoYXQgZ2V0cw0KPiA+Pj4+
IGNoZWNrZWQgZm9yIGZpdHRpbmcgYWRkcmVzcyB3aWR0aCByZXN0cmljdGlvbiByZXF1aXJlbWVu
dHMuDQo+ID4+Pj4NCj4gPj4+PiBBbmQgdGhlbiAtIGlzIHRoaXMgbmVjZXNzYXJ5IGF0IGFsbD8g
U2hvdWxkbid0ICJwcmUtZGVmaW5lZCBieQ0KPiA+Pj4+IGNvbmZpZ3VyYXRpb24gdXNpbmcgcGh5
c2ljYWwgYWRkcmVzcyByYW5nZXMiIGltcGx5IHRoZSBtZW1vcnkNCj4gPj4+PiBkZXNpZ25hdGVk
IGZvciBhIGd1ZXN0IGZpdHMgaXRzIERNQSBuZWVkcz8NCj4gPj4+Pg0KPiA+Pj4NCj4gPj4+IEht
bW0sIEluIG15IHVuZGVyc3RhbmRpbmcsIGhlcmUgaXMgdGhlIERNQSByZXN0cmljdGlvbiB3aGVu
IHVzaW5nDQo+ID4+PiBidWRkeQ0KPiA+PiBhbGxvY2F0b3I6DQo+ID4+PiAgICAgZWxzZSBpZiAo
IChkbWFfem9uZSA9IGJpdHNfdG9fem9uZShkbWFfYml0c2l6ZSkpIDwgem9uZV9oaSApDQo+ID4+
PiAgICAgICAgIHBnID0gYWxsb2NfaGVhcF9wYWdlcyhkbWFfem9uZSArIDEsIHpvbmVfaGksIG9y
ZGVyLA0KPiA+Pj4gbWVtZmxhZ3MsIGQpOyBkbWFfem9uZSBpcyByZXN0cmljdGluZyB0aGUgc3Rh
cnRpbmcgYnVkZHkgYWxsb2NhdG9yDQo+ID4+PiB6b25lLCBzbyBJIGFtIHRoaW5raW5nIHRoYXQg
aGVyZSwgaXQgc2hhbGwgcmVzdHJpY3QgdGhlIGZpcnN0IHBhZ2UuDQo+ID4+Pg0KPiA+Pj4gaW1v
LCBpZiBsZXQgdXNlciBkZWZpbmUsIGl0IGFsc28gY291bGQgYmUgbWlzc2luZyBETUEgcmVzdHJp
Y3Rpb24/DQo+ID4+DQo+ID4+IERpZCB5b3UgcmVhZCBteSBlYXJsaWVyIHJlcGx5PyBBZ2Fpbjog
VGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBvcmRpbmFyeQ0KPiA+PiBhbGxvY2F0aW9ucyAoYnVkZGll
cykgY2FuJ3QgY3Jvc3Mgem9uZSBib3VuZGFyaWVzLiBIZW5jZSBpdCBpcw0KPiA+PiBpcnJlbGV2
YW50IGlmIHlvdSBjaGVjayBETUEgcHJvcGVydGllcyBvbiB0aGUgZmlyc3Qgb3IgbGFzdCBwYWdl
IC0NCj4gPj4gYm90aCB3aWxsIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJp
dHMuIFRoZSBzYW1lIGlzIC0NCj4gPj4gYWZhaWN0IC0gbm90IHRydWUgZm9yIHN0YXRpYyBhbGxv
Y2F0aW9uIHJhbmdlcy4NCj4gPj4NCj4gPg0KPiA+IFRydWUuDQo+ID4NCj4gPiBPcmRpbmFyeSBh
bGxvY2F0aW9ucyAoYnVkZGllcykgY2FuJ3QgY3Jvc3Mgem9uZSBib3VuZGFyaWVzLCBTbyBJDQo+
ID4gdW5kZXJzdGFuZCB0aGF0IGZvbGxvd2luZyB0aGUgbG9naWMgaW4gImFsbG9jX2hlYXBfcGFn
ZXMoZG1hX3pvbmUgKyAxLA0KPiB6b25lX2hpLCBvcmRlciwgbWVtZmxhZ3MsIGQpOyINCj4gPiBw
YWdlcyBvZiB0aGUgc21hbGxlc3QgYWRkcmVzcyBzaGFsbCBiZSBhbGxvY2F0ZWQgZnJvbSAiZG1h
X3pvbmUgKyAxIiwNCj4gPiBsaWtlIHlvdSBzYWlkLCBpdCBpcyBpcnJlbGV2YW50IGlmIHlvdSBj
aGVjayBETUEgcHJvcGVydGllcyBvbiB0aGUNCj4gPiBmaXJzdCBvciBsYXN0IHBhZ2VzLCBidXQg
aW1vLCBubyBtYXR0ZXIgZmlyc3Qgb3IgbGFzdCBwYWdlLCBib3RoIHNoYWxsIGJlIGxhcmdlcg0K
PiB0aGFuICgyXihkbWFfem9uZSArIDEpKS4NCj4gPg0KPiA+IFRha2luZyAzMiBhcyBkbWFfYml0
c2l6ZSwgdGhlbiB0aGUgbWVtb3J5IHdpdGggdGhpcyBETUEgcmVzdHJpY3Rpb24NCj4gPiBhbGxv
Y2F0ZWQgYnkgImFsbG9jX2hlYXBfcGFnZXMoZG1hX3pvbmUgKyAxLCB6b25lX2hpLCBvcmRlciwg
bWVtZmxhZ3MsDQo+ID4gZCk7IiBzaGFsbCBiZSBhdCBsZWFzdCBtb3JlIHRoYW4gNEcuDQo+IA0K
PiBETUEgcmVzdHJpY3Rpb25zIGFyZSBhbHdheXMgIm5lZWRzIHRvIGJlIG5vIG1vcmUgdGhhbiBO
IGJpdHMiLg0KPiANCj4gPiBUaGF04oCZcyB3aHkgSSBrZWVwIGNvbXBhcmluZyB0aGUgZmlyc3Qg
cGFnZSBvZiBzdGF0aWMgYWxsb2NhdGlvbiwgdGhhdA0KPiA+IEkgYW0gZm9sbG93aW5nIHRoZSAi
bW9yZSB0aGFuIiBsb2dpYyBoZXJlLg0KPiA+DQo+ID4gQnV0IHlvdSdyZSByaWdodCwgSSBnb3Qg
YSBsaXR0bGUgaW52ZXN0aWdhdGlvbiBvbiBBUk0gRE1BIGxpbWl0YXRpb24sDQo+ID4gc3RpbGwg
dGFraW5nIGRtYV9iaXRzaXplPTMyIGFzIGFuIGV4YW1wbGUsIHdlIHdhbnQgdGhhdCB0aGUgYWN0
dWFsbHkNCj4gYWxsb2NhdGVkIG1lbW9yeSBpcyBzbWFsbGVyIHRoYW4gNEcsIG5vdCBtb3JlIHRo
YW4uDQo+ID4gU28gSSB0aGluayB0aGUgbG9naWMgYmVoaW5kIHRoaXMgY29kZSBsaW5lICIgYWxs
b2NfaGVhcF9wYWdlcyhkbWFfem9uZQ0KPiA+ICsgMSwgem9uZV9oaSwgb3JkZXIsIG1lbWZsYWdz
LCBkKTsiIGlzIG5vdCByaWdodCBmb3IgQVJNLCBhbmQgaXQgc2hhbGwNCj4gPiBiZSBjaGFuZ2Vk
IHRvICJhbGxvY19oZWFwX3BhZ2VzKHpvbmVfbG8sIGRtYV96b25lICsgMSwgb3JkZXIsIG1lbWZs
YWdzLA0KPiBkKTsiIGFzIGNvcnJlY3Rpb24uDQo+IA0KPiBCdXQgdGhpcyBzdGVwIGlzIHRvIF9h
dm9pZF8gdGhlIERNQS1yZXNlcnZlZCBwYXJ0IG9mIHRoZSBoZWFwLg0KDQpUaGFua3MgZm9yIHRo
ZSBleHBsYW5hdGlvbiEhIQ0KDQpJIHRvdGFsbHkgbWlzLXVuZGVyc3Rvb2QgdGhlIHVzYWdlIG9m
IGRtYV9iaXRzaXplLiBJdCB0dXJucyBvdXQgdG8gYmUgdGhlIERNQS1yZXNlcnZlZC4uLg0KUHV0
dGluZyBETUEgbGltaXRhdGlvbiBvbiB6b25lX2xvIGlzIGFic29sdXRlbHkgcmlnaHQgb24gQVJN
IGFsc28uDQoNCj4gVGhlIGNhbGxlciByZXF1ZXN0cyBhZGRyZXNzIHJlc3RyaWN0ZWQgbWVtb3J5
IGJ5IHBhc3Npbmcgc3VpdGFibGUgbWVtZmxhZ3MuIElmDQo+IHRoZSByZXF1ZXN0IGRvZXNuJ3Qg
cmVxdWlyZSBhY2Nlc3MgdG8gdGhlIERNQS0gcmVzZXJ2ZWQgcGFydCBvZiB0aGUgaGVhcA0KPiAo
ZG1hX3pvbmUgPCB6b25lX2hpKSB3ZSBmaXJzdCB0cnkgdG8gZ2V0IG1lbW9yeSBmcm9tIHRoZXJl
LiBPbmx5IGlmIHRoYXQgZmFpbHMNCj4gd2lsbCB3ZSBmYWxsIGJhY2sgYW5kIHRyeSB0YWtpbmcg
bWVtb3J5IGZyb20gdGhlIGxvd2VyIHJlZ2lvbi4gSU9XIHRoZQ0KPiBwcm9ibGVtIHdpdGggeW91
ciBjb2RlIGlzIG1vcmUgZnVuZGFtZW50YWw6IFlvdSB1c2UgZG1hX2JpdHNpemUgd2hlbg0KPiBy
ZWFsbHkgeW91IG91Z2h0IHRvIGV4dHJhY3QgdGhlIGNhbGxlcidzIHJlcXVlc3RlZCByZXN0cmlj
dGlvbiAoaWYgYW55KSBmcm9tDQo+IG1lbWZsYWdzLiBJIHdvdWxkIGFzc3VtZSB0aGF0IGRtYV9i
aXRzaXplIGlzIG9ydGhvZ29uYWwgdG8gc3RhdGljIG1lbW9yeSwgaS5lLg0KPiB5b3UgZG9uJ3Qg
bmVlZCB0byB0cnkgdG8gcHJlc2VydmUgbG93IG1lbW9yeS4NCj4gDQoNClRydWUsIE5vIG5lZWQg
dG8gcHJlc2VydmUgbG93IG1lbW9yeSBmb3Igc3RhdGljIG1lbW9yeS4NCg0KPiBKYW4NCg0KUGVu
bnkgWmhlbmcNCg0K


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:16:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:16:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153002.282651 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1S0f-0008Um-Mr; Thu, 08 Jul 2021 11:16:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153002.282651; Thu, 08 Jul 2021 11:16:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1S0f-0008Uf-J4; Thu, 08 Jul 2021 11:16:01 +0000
Received: by outflank-mailman (input) for mailman id 153002;
 Thu, 08 Jul 2021 11:16:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1S0e-0008UZ-0M
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:16:00 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id de947cd8-dfdd-11eb-8565-12813bfff9fa;
 Thu, 08 Jul 2021 11:15:58 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: de947cd8-dfdd-11eb-8565-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625742958;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=3MoJZ9JcCyTQH5qyPFt7VX9OcnzWl1dsyioG9EGBiqA=;
  b=N9dnteD0iKYAq6TAtJeMTUBHKaDanMNtXhxQ+nPA+pIFx52VdJQlMYhF
   iLW0PEydnb+O9mHH7DoeiVC3f8S9q7fcVIyh9VPp+z9x3GzcKV5r1GopE
   YBZmvj9To/Ou+1cIAVj6gX82gr0ojea5/f7sVC79qNWvzxT2rrVmYC4I9
   8=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: f+3oZqNBqUMQxF0l7ib9xgyqd/HNdPryT3Z9K1M3ciz2xRKRsEx/q71OWwUAowthWznGJ983kM
 Mhk/qbFlGZrZtXivihZtrrxuZdcmoK0oYu6xEb6XafCGlGZy+4kDS2DR/shcbhFtgW5lnm9YrQ
 GPrd6F3GAcRr8kU2DHKljgOnnJUKKJypvq42m+jLb4bRevnBDsixi83rdYCnEm0TV9oWYCoFfP
 uC4O3qjdK94WK50FBfCu8u3UYi0G/x+YKHXzxH06oPvOXoKHzz9zHlrYnLw+uNkRNAA0mDu2gh
 qd8=
X-SBRS: 5.1
X-MesageID: 47816510
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Jw/46KhPaG4CSKi+6dNkfGwnlHBQXtcji2hC6mlwRA09TyX4ra
 6TdZEgvyMc5wx/ZJhNo6HkBED4ewK5yXYxjLNhXotKPzOGhILLFu1fBOLZqlXd8kbFh4xgPM
 lbHpSWWOeaMbAW5/yb3DWF
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47816510"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=O6wkGa03wHH7gREupybBkjWTnXnT9/sI23REKdNEoVG2UFH2URc4C3Dzw/adLIW0Ue7X8KzVGXuYM0JuPAR+N84sqwRFz+y7M+BcrE2vm6vPmHrL11e93pcPwB9LmNuddmLFQ9IqUb9YLZ1WnHOg7o/HqOrRCXCldzS8k5bEAmdZsAkWnIvicO5ee+W+vXWwtXa2Ncln81SyBs4ssry8O2kSkMonufaly6UjWOg1H0+7CiQEcvuVwEhbiav3dBqcjoAoXA0Rgk5tXtqVPcC8Rm0qbnxY9KnShmfw8XwSGUJQmh/y7MKJya3NivqUesQ4/CYuSQmzzdod3Z7qNi744g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=LMXIU9hE9xko+HDwqxD9aIlaGPvtgEvYN145lL8FbHE=;
 b=cIXyDIAAwalTLVfkU/Tr9MzOJuW2Xt0xnF/CEiKNQREiIGECeUDhGZjRr249vfhOfycbn699+JuLj/7SIR1qyyjoRlr6Q6eSVvwmqwA7ddZ7YAl/4XqySDShUCpM7p/sM0+Ktboo4YNpDNKKW69gDhgTwyR9KNA9KhTHbVUeS8obqz72YgBCpfn0FduDAV4iGaBQS5BwanxZSwtuK4Di0ir8ocWdYElIO43imHiWs4bx4u8hp3Hf26bcBACmhwBSIe2foaABnlGDELr56acK9A9h91SES3QdFbD1ySOdXILVU25RzLmxKPgRMgpOQMSRINIp5rhesHIzDMdJyOBm0A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=LMXIU9hE9xko+HDwqxD9aIlaGPvtgEvYN145lL8FbHE=;
 b=GAH9lke2ASlygk87I7XcYWcS7Zwucxb/2rmz/1wmuOoBJa0XCKBSl1cCZi4yWvaEJa3wi4tPHzks3xjA0QsJTbVxi2ukiO2E8Z/+JEUIZnnBEgZbAuf7kLsVwRRVQEdOqFpY6598TALkUHw2AXs1CjD4khZ+wguP3zJ98L0P1Hc=
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>, Franklin Shen <2284696125@qq.com>
References: <b9bbc584-db3c-0b03-0314-3dd907f645bc@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] x86/PV: address odd UB in I/O emulation
Message-ID: <30186860-de22-3e71-bdb1-52f42b0394f5@citrix.com>
Date: Thu, 8 Jul 2021 12:15:47 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <b9bbc584-db3c-0b03-0314-3dd907f645bc@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0098.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:139::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d5e0e141-63de-4539-a3ac-08d94201bfd9
X-MS-TrafficTypeDiagnostic: BYAPR03MB4245:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB424520370637F2424F7144CFBA199@BYAPR03MB4245.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: KPVoF8nYgX4++EQ59i8GKZgzviFLjuRdBvlQ3DlnLzbF60KPuY9Azck/RHoS4q9T9m/UdL7BiKHf6NBDgmyRlR+DPPEQu5hu0qitSBwpHmnoVbLVw380Cfk6IHGmyVZqbzU1y5Opps+qUnvp56AqRCItcSSNAMA2zy3qBL7BaiERHE2eYXeL0lMA0DudPl99oLh7lDKQPp/43PMtsvCkXR+5IIQ8tIV4Otx9ghhaU2EIUwZXGoHfE27BcIeooILNDl/8m88yLyLQOhLqlFrRuGVDT9gi14n2lcl9FXv2/acyZTatNaWgaNU2sGOwL9uUNXYf1CElkU00De57XeQXrUF6y2ht1mohPAiJat9BbN5VglWj3sRHbQ62Yc+gDSzpUtZ1SVNUPkp0OYdfxNbi9xSvfXNWIoK5nDFbLezhJBgaVYNi5bBpwus+YcGrMO0G4ExJHR9onynaVfnDXKRiSB5rTz7CEGo7W18Xo1EIYm0F18y57kD9a8UNb/ApHWwVntnwTwgDSReu/jhagjRJvFBokKlMz+Rl/aWc2gJjgHGnCMeGC0Q9oHalKakiYD0DYTFxc2ja8KDTogYbtKDVwVbdD0LkCztHuIIMtiNuM6K50uEInnWKkG1jCActo54qGU+ppQTzI0u/6KJtu+k093AgCh7o+bg8YH9SvrezU8V7BHZsM5JMXkrsjt9RzRXQ32mEGuJGTyBzcgQ9sg7/bHUtB9vl26ObwIxQh5igohY=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(376002)(39860400002)(346002)(396003)(110136005)(16576012)(316002)(2616005)(956004)(4326008)(5660300002)(31696002)(6486002)(31686004)(66476007)(83380400001)(66946007)(66556008)(2906002)(478600001)(26005)(86362001)(54906003)(6666004)(8676002)(8936002)(186003)(36756003)(53546011)(38100700002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: d5e0e141-63de-4539-a3ac-08d94201bfd9
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 11:15:53.2746
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: qMhH5MjCtbFEdqV2wnBWjcEvKhzQCbfXc+jeGMDczI/v9u1V+kAJ75J/PPZWaCK2VkoW4lkt2O/FxrBQxeU/M5hMRSJnR1jMY0BzIlsIc6I=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4245
X-OriginatorOrg: citrix.com

On 08/07/2021 08:21, Jan Beulich wrote:
> Compilers are certainly right in detecting UB here, given that fully
> parenthesized (to express precedence) the original offending expression
> was (((stub_va + p) - ctxt->io_emul_stub) + 5), which in fact exhibits
> two overflows in pointer calculations. We really want to calculate
> (p - ctxt->io_emul_stub) first, which is guaranteed to not overflow.

I agree that avoiding this overflow is an improvement, but as I said in
my original analysis, (f) - (expr) also underflows and results in a
negative displacement.

This is specifically why I did the cast the other way around, so we're
subtracting integers not pointers.

It appears that we don't use -fwrapv so in any case, the only way of
doing this without UB is to use unsigned long's everywhere.

> The issue was observed with clang 9 on 4.13.
>
> The oddities are
> - the issue was detected on APPEND_CALL(save_guest_gprs), despite the
>   earlier similar APPEND_CALL(load_guest_gprs),
> - merely casting the original offending expression to long was reported
>   to also help.

Further to the above, that was also so didn't have an expression of
(ptr) - (unsigned long).

>
> While at it also avoid converting guaranteed (with our current address
> space layout) negative values to unsigned long (which has implementation
> defined behavior):

?=C2=A0 Converting between signed and unsigned representations has explicit=
ly
well defined behaviour.

>  Have stub_va be of pointer type. And since it's on an
> immediately adjacent line, also constify this_stubs.
>
> Fixes: d89e5e65f305 ("x86/ioemul: Rewrite stub generation to be shadow st=
ack compatible")
> Reported-by: Franklin Shen <2284696125@qq.com>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> I'm not going to insist on the part avoiding implementation defined
> behavior here. If I am to drop that, it is less clear whether
> constifying this_stubs would then still be warranted.

You're implicitly casting away const now at the return, which is
something you object to in other peoples patches.

>
> --- a/xen/arch/x86/pv/emul-priv-op.c
> +++ b/xen/arch/x86/pv/emul-priv-op.c
> @@ -89,8 +89,8 @@ static io_emul_stub_t *io_emul_stub_setu
>          0xc3,       /* ret       */
>      };
> =20
> -    struct stubs *this_stubs =3D &this_cpu(stubs);
> -    unsigned long stub_va =3D this_stubs->addr + STUB_BUF_SIZE / 2;
> +    const struct stubs *this_stubs =3D &this_cpu(stubs);
> +    const void *stub_va =3D (void *)this_stubs->addr + STUB_BUF_SIZE / 2=
;
>      unsigned int quirk_bytes =3D 0;
>      char *p;
> =20
> @@ -98,7 +98,7 @@ static io_emul_stub_t *io_emul_stub_setu
>  #define APPEND_BUFF(b) ({ memcpy(p, b, sizeof(b)); p +=3D sizeof(b); })
>  #define APPEND_CALL(f)                                                  =
\
>      ({                                                                  =
\
> -        long disp =3D (long)(f) - (stub_va + p - ctxt->io_emul_stub + 5)=
; \
> +        long disp =3D (void *)(f) - (stub_va + (p - ctxt->io_emul_stub) =
+ 5); \

The only version of this which is UB-free is

long disp =3D (unsigned long)(f) - (stub_va + (p - ctxt->io_emul_stub) + 5)=
;

As long as (p - ctxt->io_emul_stub) doesn't overflow (which it doesn't),
every other piece of that expression is well defined when stub_va stays
as its original type.

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:24:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:24:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153008.282662 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1S8D-0001Ux-H2; Thu, 08 Jul 2021 11:23:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153008.282662; Thu, 08 Jul 2021 11:23:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1S8D-0001Uq-Dv; Thu, 08 Jul 2021 11:23:49 +0000
Received: by outflank-mailman (input) for mailman id 153008;
 Thu, 08 Jul 2021 11:23:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1S8C-0001Uk-ME
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:23:48 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 78dbfe91-707a-4924-b3b3-fbdbee80679d;
 Thu, 08 Jul 2021 11:23:47 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 78dbfe91-707a-4924-b3b3-fbdbee80679d
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625743427;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=TkMciVPeJZJ4pd6aDf9KgsWkn7CQVJuUPWrPbtchctE=;
  b=KAj29JFTIwBaeAZHiyu3KBwAyFNKZUziY8L03lMJ2W4Y0E2s+FvF/rC6
   R7bPHGKvq08SsNA2LdyXQ/wrqJgdfcZyGC5kl6uRUZsSRutZRm9HF8+pz
   jVV0uJmCzKM0muvDPMWlEkKY9tgbuQQgb0oIaspgYNmstvilnl9RXryOm
   o=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: RVpuTz0ktAPhAFYUvhq1Hu6jJQEySuDlKRGUm83lF7+szD/cgYrVFhrtLtmZMi6IVpzm6Ad7Wz
 RxC4SrXZlE9wGo12a2U5T4cAVB9wM0qNDLeRSCIoelCUUabZ1o4/BySZIK7kV8a5A7GIUGgZcU
 lE6POiwL/Okp+oAFMGdjec398TGW7FXiPps42hvz2nvqkjNhuv+W7LpKdnWTa7vjsXAYTWYWs6
 bGOIgNJDSVmCAom25grl9IXWGtp9dBMeipADCC3Fhau33I7vS87AYhMDSTst5KdBfAjatxDAlZ
 mtU=
X-SBRS: 5.1
X-MesageID: 47829873
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:6qWhXqypPopB77zI1XYBKrPxwuskLtp133Aq2lEZdPULSKKlfp
 GV88jziyWZtN9wYhEdcdDpAtjlfZquz+8K3WB3B8bcYOCGghrVEGgG1+rfKlLbalbDH4JmpM
 Fdmu1FeaDN5DtB/LXHCWuDYq4dKbC8mcjC74qurAYOPHRXguNbnmBE426gYz1LrWJ9dOME/f
 Snl696TnabCA4qhpPRPAh1YwGPnayFqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD79jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbU811rhOkWO5Tf90Qjp1zgjr1X4z0WDvHflqcvlABonFston+tiA1nkwntlmOs5/L
 NA3mqfuZYSJwjHhj7B69/BUAwvvlaooEAljfUYgxVkIMgjgYdq3MgiFX5uYdA99HqQ0vFgLA
 AuNrCd2B9uSyLeU5iD1VMfmeBFNx8Ib2W7qktrgL3e79EZpgEg86O0rPZv10voz6hNPKWs0d
 60eZiApIs+OvP+UpgNctvpYfHHR1AlEii8fF57HzzcZek60jT22sXK3Ik=
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47829873"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GHV/V9gtsCoUrLbgIj0LDYw8umOwoaX+5/+qlMMvKqJPjFbq6NwXbsGk8mWMjPDSBalX8wzBeNpKdOjhTemEya5iSHa76eirvysT5s+cBm4T0pVG/PbQ1HM9AVusc+1JAvMsE6+3TIL+n2ey8B3duIm6Djz2XWvs2QHu44hIvdPJdq+BskzW7q10LDP4wkfSx1BxKKsfaQIr+/g+7eDW9Py6lHFDG0VVvyziejzqmGIvvaZ0IHPGKZwE/d0wxHe73oCE78eumDS8jb09RREhaELVsk4ffV4doTf0U8LheaRPAQt3v/vEzZHTaGNJGnoicclXctDNQbpCzBCgKIREng==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jRJ8gXC6RBFPQjBvCkDOF4p2MtJZRtCX/AjIffnMPMw=;
 b=dThEguynpz8XO1Q1elIyJaoCpVBBhjoKncdVjcChUU5AMpjSjRORbbUTkQwFmZdyIkpzuk3FwibEk/AS4EKmWPjEWj/wWlCNHrSQQtN5nQpKD405iPwxz2+7ydnK9oZoOkt9KTGb9USECP9NrjBljB021COZ6r/qsrxcJudtFrW55pCfl50fo9CgZw6H6BBw5aO1pW1tKiLJvPDghj/nRdx8wAyM2XmGxFLHxRNXE1X4vZVal7WIrMFq1AOdK2g/kQcg93y9HuN8Jhb+9r+vz66hvLQLAemhCm6jETqWjmf3HFGL/JFD/ucmMaAIv+73JEcYAgDoTEn8HSDJfQODXw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jRJ8gXC6RBFPQjBvCkDOF4p2MtJZRtCX/AjIffnMPMw=;
 b=sduK7dNx1iSY5nEJib3tZIt8ODjyfl8JRnYDFrj1/OOb/Dvgm1EleTiThGQ8bZWfoy3K7s+YXW3GlkxcS2k7NdAodhJaOzNPFnS2lTVaLTcCvzyh0TiQFu3WabEJ8XeHUqF/qaXlyVUX6gm8cY5roQo7O3dawSDfm1rv9KM+uPE=
To: Anthony PERARD <anthony.perard@citrix.com>
CC: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
 <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com> <YObY02T0Mhnw82DS@perard>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <4667fbe6-8767-4769-7d3d-26ebfdf070ed@citrix.com>
Date: Thu, 8 Jul 2021 12:23:38 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YObY02T0Mhnw82DS@perard>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0417.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a0::21) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: c65fefc7-50ec-42a9-13f0-08d94202d87c
X-MS-TrafficTypeDiagnostic: BYAPR03MB4245:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB4245CE1EBBE8D65223386939BA199@BYAPR03MB4245.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2399;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: f250VSg83iFRbeBVjPE1YtKg6ad+6sqpB6oO2h4Qk5W7TuiUCit1jTMqaGEmuO69737lw7a6QhLfZjBs1AzgY390QWfWCn19s8a1QzOIAVZUE1i4Doo2HWPEwp9HFetLN2sdE8+glx9twG185HcTwmISZAM36zeHKusIKrEYoMTF1BtnwF8qnq7FXGT+jdTCayySdiHI7yxqSP8z5SglFY+tHYZbCmIqLrdMV1nulgir7ImoTTGgquwV6qlF2AvVtupXjar5Vp5W9NC+V5cr9hM7yuRMOlZsa32/EMjzUJdOifnxsFF7OGvE/Nkb2BZkq+NauRIR9H/miW0LHUhwFowtNhINGYeaTWXU2YwYQMf7oJGdOVc80aD2vH+FqCYM9z/MzS/HVYZqHCJMUgwfEepwMSZawtCY8JXxYNCz5MJc32hOlB/6Uke6+3+ff/PyXtfWXrHwRUIzLFjJAZ8KSrWw2xfoDNYdMn1LydvfBOYnQfQdhAE4eAiyXp27lAWYbJM1rsDPKQCsi3O7A2TFJx7/tTBwx574CyjseFVEPrdNPW/rR9IATF5NeLzDpj8HrB/3pF1mO7YNZD0j7khAlBqrg/h8DUM/R/15SS0aKt9LXZsXo5AS0ZO/dd2gSEHzEY9gvT7Rr/XHnHG/sTjvFlPqDqn5UhfmtMOpJkuKgZ0m/f0i4rorFndx6J1dlkX/aMsCsmpLaKl/5ZpIlUTTp32eCxKkt9wf8ADqdQBAas3bccgIWkqaxTbl8nwI9ce+
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(346002)(39860400002)(376002)(136003)(366004)(6666004)(8936002)(186003)(8676002)(26005)(478600001)(36756003)(86362001)(38100700002)(6862004)(6636002)(53546011)(956004)(2616005)(5660300002)(4326008)(16576012)(316002)(83380400001)(37006003)(66476007)(2906002)(66946007)(66556008)(31696002)(6486002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ckp0Qm5UMGVheXU0ZlZtZmw2WjlRR2UxKzVkNmtMS2tTckc4UnFiQXBMZkVl?=
 =?utf-8?B?NDZUM2wrbDVJN3NSSXBlWjVQWlFwcUhPdWVTSlNtMW5qYmZDd0NWZ2ZONmZr?=
 =?utf-8?B?UyttNFYxWG5DTFprOElNVTRuSEp6MzNDQUE5M2NiVUk5UFZtbFVEdXowRWZN?=
 =?utf-8?B?YVNXZ2I1a2RaQk1MUWZMUDJ1Qnlnb1o1N3Q3S1JpamhvcTFidXVzeCtIOXdR?=
 =?utf-8?B?LzJuTkNhYXpZR0h3MlhnRWZCSXZpZ3JSY0xJSzAxUklTWDZuUVlFVm40QlM4?=
 =?utf-8?B?Nlh5UG9Fd0Fabkpmc0l0b3pZdGtTSFhUTEJYRTJaVWNGTmNXN3psa1NkL2Jv?=
 =?utf-8?B?emVSaGNNUU1YekpIc0NyZzlldTM3SGRweU0vaTB6b2R5cDBlUGlXb1pwYnRq?=
 =?utf-8?B?c3MzWkpQdnMrSEw1NS9jOUV1enY0Ym9kRVlNWWVBcm9XQytNTkVuZVdqQ0lx?=
 =?utf-8?B?MW8wUnlPUE9XWGJoWnhObkhiVjlsZ2xzTHptZlJCSm1Lb2lWN2ppakZBdHI1?=
 =?utf-8?B?RW5Tc0tqTVJaOGE2L0M2RjNvNEdyM1NOcVFLRDc2ZUVzamUxVEM0dTg0SE5j?=
 =?utf-8?B?eU8xbUI1cDFSd1F5VkkxTmFtQ2FpNzhPaWNBRlYyYllLQ0w2MXNjWkRsMzBo?=
 =?utf-8?B?M0hWL04zd2ozdG5YOStTb0NidDUxbUxnakh0L2R1QjBjYndXZ2hXcElISlAy?=
 =?utf-8?B?WmhmbmEzVkxEN2VQeVV5UHhPNEpuNlJpY3BDSzBEYk13U2hIV3VxL1A3V05Q?=
 =?utf-8?B?NWZCZ3pESG82STRzR3RXV2REZ2RDdGp4dkIxamp2aDhvSkI3cm9aVzM4bDhr?=
 =?utf-8?B?NnNSUjRFVFpxcGhpUWNMeFdSaEdBdDZaRFlHOHdDZ0txVStiTDZoWEhTOVB4?=
 =?utf-8?B?Rmprc3NRRlZJdHp4c3NvMDA4ZEhnWWpGRWI4T2R1cFJwanpqK1VUZ3BXei9s?=
 =?utf-8?B?RW5DcmtpVFNZcEFhUmhYaGhJeVRGWnlBdHFic05wTkRUVGRhTUVNemd6WTdO?=
 =?utf-8?B?NkdDT2JGdER0bjgrR3hJWEh1ZE52dUNoa3U5eXZkb3hOa1NqY09SMWZUMDJB?=
 =?utf-8?B?UDNiYjhYRkpVYUF0Y0FmZTgyK2tSdnNiVVhPdG5JMnY4R1dPakFqTzJFLzJD?=
 =?utf-8?B?TVc0dG1abU5WS3c5NisxZExTYUwzY0NoM3Q2Rk1wbUFmcnJFODIrYjZ4WHFJ?=
 =?utf-8?B?NVZib3BEQnFZS2djZWdwamVsMkRQNnZmcnlpSmFTbDJMTWNuWFRGU1BMeE0z?=
 =?utf-8?B?S2xzU0l3enBxdVFhc29STGpCaWNpZU1lVVNuUFFCczIwQmpOZndYQW40dmZy?=
 =?utf-8?B?Z3JRREo2TktEckV5eno2anJUMCtwTHVTNnVpajdDU2lyNVpGelErNm01ek5j?=
 =?utf-8?B?R0JqMmVQbjVBaktnRGV5NXBGSFgyeUU1cXZUMFJIVm85RHZNdW12RXBPQ1hn?=
 =?utf-8?B?QmJ4Ny9aL25sdVVYZEpuemxuc2UxRXA1RFVYLzhUTHZTdEN0a1dlajB3Kzd3?=
 =?utf-8?B?NkcxOFJzbHNpR1FBclZiYkNXWElWc1dIK21ITWk2ZXNmRWFKSFJUbFg4MUVu?=
 =?utf-8?B?Z2NXV2dDNGVOa25FWWExc1E0M1JVc0gxVXpwYm1iTEVFKzZyb0U0ZWd2Vi9T?=
 =?utf-8?B?N3pqZTdQTEdDTXM3YzhoZjR0QTUrMEkyWlg2am11Ui8vU0hQbWRsdFRjK0Vz?=
 =?utf-8?B?cHFFeE1rV1gvWFpmQitGYi9Rcjc2bkRmZVlOR0FHRmlBRHlpcmJWTUZxMFdh?=
 =?utf-8?Q?QMjaDZ+FUUI4LSDorUjJ1d5mo1HZv3a0p0tib6M?=
X-MS-Exchange-CrossTenant-Network-Message-Id: c65fefc7-50ec-42a9-13f0-08d94202d87c
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 11:23:44.0173
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: wc3h8ffhMRaK+02NMdbpN7RyOVgeBcugWKN49ppGwPLA+X3AEVtjuY6idj0sLn1TOxtthUaHuuuAncakM12Em09bJ2wdS+Rn55UF2f7KWCY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4245
X-OriginatorOrg: citrix.com

On 08/07/2021 11:52, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 06:46:03PM +0100, Andrew Cooper wrote:
>> On 07/07/2021 17:40, Anthony PERARD wrote:
>>> ninja is now required to build the latest version of QEMU, some
>>> container still don't have ninja and attempting to add it breaks the
>>> build for different reasons, so QEMU will be skip on those containers.
>>>
>>> Failures:
>>> - ubuntu/xenial:
>>>     fatal: ninja version (1.5.1) incompatible with build file ninja_req=
uired_version version (1.7.1).
>>> - debian/unstable-i386: (debian-unstable-32)
>>>     /build/tools/flask/policy/Makefile.common:115: *** target pattern c=
ontains no '%'.  Stop.
>>> - suse/opensuse-tumbleweed:
>>>     failed to build iPXE
>>> - debian/unstable:
>>>     update of the container fails with:
>>>         The following packages have unmet dependencies:
>>>          clang-8 : Depends: libstdc++-8-dev but it is not installable
>>>                    Depends: libgcc-8-dev but it is not installable
>>>                    Depends: libobjc-8-dev but it is not installable
>>>                    Recommends: llvm-8-dev but it is not going to be ins=
talled
>>>                    Recommends: libomp-8-dev but it is not going to be i=
nstalled
>> Only the first failure seems to be related to ninja.
>>
>> The second is a known bug which still needs addressing.=C2=A0 Our build
>> system's logic to cope with `checkpolicy` being absent doesn't work.
>>
>> Tumbleweed is generally broken and fails at ./configure due to missing
>> compression libraries.=C2=A0 It is quite possible that the iPXE failure =
is
>> related.
>>
>> The final one is probably because unstable has dropped clang-8.=C2=A0 Th=
e
>> container hasn't been rebuilt in a while because we still haven't got
>> auto-rebuild sorted.
>
> So those containers are ones that I've noticed needed ninja (as found
> out by looking at a single pipeline), but one which trying to install
> ninja and thus rebuilding the container mean that the build was broken.
> I just didn't want to spend time trying to fix issues that should have
> been found out by a regular rebuild of the containers.

That's fine, but as these containers weren't rebuilt, the details of any
knock-on error aren't relevant here.

I'd go with simply:

"ninja is now required to build the latest version of QEMU, and not all
distros have a suitable version.=C2=A0 Skip the QEMU build when ninja is no=
t
available".

Can fix on commit if you're happy with this.

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:31:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:31:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153015.282676 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SFE-0002sz-9I; Thu, 08 Jul 2021 11:31:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153015.282676; Thu, 08 Jul 2021 11:31:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SFE-0002ss-66; Thu, 08 Jul 2021 11:31:04 +0000
Received: by outflank-mailman (input) for mailman id 153015;
 Thu, 08 Jul 2021 11:31:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=mEkc=MA=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m1SFD-0002sm-97
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:31:03 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f92ac5d2-dfdf-11eb-8566-12813bfff9fa;
 Thu, 08 Jul 2021 11:31:02 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f92ac5d2-dfdf-11eb-8566-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625743862;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=esbQBVKkIBzl+74nh9KJhdLM7ID0KyDQoub54rhJncg=;
  b=VqOxNPS8Kgp6aGeW6g+L1Op096VE9go9++lAhbzg2TCcx149SnfP1BSm
   Jn6kQTb5vlXv0kvfu4WLapmTKaIsXGdhjSBVjfVHVlMXzjB5tMjgiZNBe
   zm1/rRjwlir6+WufRre9/DCXLsDtvaSt40Zes4V2jLv6gtjttX6CvDt9d
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: HXec6kzt16mgJQKxAcOzU5NRmTAJVrmDQSS4y8PAnxA3baa85izGTg4YTuY2SdAEqStzPdlKaD
 jcrGzu7ADs9HzlBt1qQtIJRTE2hgGoNmndLH9jP41OT6h664sLMhblWkCnkwYUqv/efVGCSFqT
 cXERBEV4s7lyPpzC7EgHt9rtLtxZf1p9IGnFNLcHokQdyXNM/XXO04Os4ezFGk1QWVOR9ytbQs
 MeavI66n9qhURXDHsVhUCd4RuzRnigGuwoRBTTDjDwJfclqc5dMMWNngz5vpoa1zWVelnH9AGJ
 PCE=
X-SBRS: 5.1
X-MesageID: 47817631
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:X1yb1qoR8WMd9nyxluQCzGUaV5oTeYIsimQD101hICG8cqSj9v
 xGuM5rsiMc7wxhPk3I+OrwXJVoLkmxyXcY2+Ys1PKZLXDbUQiTXeRfBOnZsl7d8kTFn4Y3v8
 pdmupFeb/N5DBB/L7HCWKDc+rIruPozJyV
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47817631"
Date: Thu, 8 Jul 2021 12:30:58 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <YObh8vb+oNDgpCoI@perard>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
 <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com> <YObY02T0Mhnw82DS@perard>
 <4667fbe6-8767-4769-7d3d-26ebfdf070ed@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <4667fbe6-8767-4769-7d3d-26ebfdf070ed@citrix.com>

On Thu, Jul 08, 2021 at 12:23:38PM +0100, Andrew Cooper wrote:
> I'd go with simply:
> 
> "ninja is now required to build the latest version of QEMU, and not all
> distros have a suitable version. Skip the QEMU build when ninja is not
> available".
> 
> Can fix on commit if you're happy with this.

Sounds good, thanks.

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:38:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:38:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153024.282690 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SLw-0003cT-5Q; Thu, 08 Jul 2021 11:38:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153024.282690; Thu, 08 Jul 2021 11:38:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SLw-0003cM-0j; Thu, 08 Jul 2021 11:38:00 +0000
Received: by outflank-mailman (input) for mailman id 153024;
 Thu, 08 Jul 2021 11:37:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1SLu-0003cG-8Z
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:37:58 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f0770e36-dfe0-11eb-8566-12813bfff9fa;
 Thu, 08 Jul 2021 11:37:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f0770e36-dfe0-11eb-8566-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625744277;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=WRE9HRlcs4Z1cZlaVwxWMh/Z04+e+twlf1o40TOfUq8=;
  b=R5sRd4+5WGdX6EEZjBm4fiscnw4wPwqEebghrsnlnuQdHLMq0Tb4MQwo
   sWnHvxEmgb3d9p2tOMZ7YMv6+kUiBRShAYMPNjOi7wimfNgxodeVJTJDB
   gxX2Kyeg2Xp99JRyKdablKfvQRnKjiWC8jbhJ1rd4c03hkzfGzIEMZra6
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: HSW9AGvF1lopADBWfm7WLsb/2nZdM6waByjStO4hEEFhBvZwYuAFCkJvMYNyfhH0LEf4Oik4qW
 //ZRLHZ0N5HM7rTdS9c/sHJ+wOwpqrrcbE33qfqHIjJhk8VfLuqdi/TXvlruhzNIMc2/zj0O8a
 tyeFih/DWKO6Lek+p3Q2XlAsl+PhMBV8hY1PIP1/HEzObGsL+ntFAbmyxD7goJfWD32uzpiN3J
 /g5fXBSmpXsntpt3zTxwMwJKpBq7ud8I6fSA3r9dhoCklMnbrLjFGQcxlPE8nAlwFWasUsd/fQ
 jNw=
X-SBRS: 5.1
X-MesageID: 47889376
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:nT0lBKqnTIMV6P+vMW3LrIkaV5veL9V00zEX/kB9WHVpm5Oj+P
 xGzc526farslsssREb+OxpOMG7MBfhHO1OkPYs1NCZLXXbUQqTXfxfBO7ZrQEIdBeOjtK1uZ
 0QFZSWTeeAd2SS7vyKkDVQcexQueVvmZrA7Yy1rwYPPHNXguNbnmBE426gYzxLrWJ9dPgE/f
 Snl696TnabCA8qhpPRPAh6YwGPnayHqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD19jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbU+11rhOkWO5Tf90Qjp1zgjr1X4z0WDvHflqcvlABonFston+tiA1vkwntlmOs5/L
 NA3mqfuZYSJwjHhj7B69/BUAwvvlaooEAljfUYgxVkIMojgYdq3M4iFX5uYdI99HqQ0vFiLA
 AuNrCT2B9uSyLYU5iD1VMfh+BFNx8Ib2S7qktrgL3c79EZpgE+86Ii/r1qop43zuN1d3B13Z
 WwDk1WrsA4ciY3V9M3OA5Te7r8NoTyKSi8Rl56Z26XTZ06Bw==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47889376"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZMyvVB2REbA8pEtAFXIQ6sqvnCr+rAFukF9FTOQGQa+sDqua1UCQiB4QwI/8gZhLeBE24wUGS7AXSKHoAasai+6OIZ6C/J+hsbPaak67B+eUeTlJyot5s8DjqV3XRLJ8FLMZlEAjgQg8gkGw9aj6RtDKVA0vebZ9NBjq5ZaGVtB8YaZ513K3Xx5CeRHAsgCOrQsaswFMVLAeNK4AKNFGZThY2uLgI/xo5N5EOwSCmrlv4AFJmIPf8MOBLy1pD2SILn9uzl8xttaN7eFlWKxIY7zGlmRoqLSEtB5u39uZmwrQDD4y7/FTafnGAWNufYmIdTwt6MxXecCYV2SH3+I03A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WRE9HRlcs4Z1cZlaVwxWMh/Z04+e+twlf1o40TOfUq8=;
 b=j4rdtYjxn/rQAc0J4AzQ7YVc1VNrHwB8U6intP5Rd5ma38QxrdC5lBN+XeWy5y9U3bGd0xpU2yRYuHuyePxjzViuyV/IJyvvuAAmTXOBUo4rp82B04pkK5ho0Gflr29ytFOV9SbG6hwLHH9o4+cCu65WB/3NrcPwjFPMhTCG78fRSxDe32ySRuiM+IVmQ/wdUR/013jW3bVnR5obUCgtARxFjjwTzsyQEHrEYVOHx5r7TwlsIraZpocY1JHLtmwBFNfNfSld5WhinrUupZbSe8uPMhSyvbeCffS7WC0X1pObE51psm9q7ANbJv69d9XVAgLLB5UV4GsEUOi0RRaHxA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WRE9HRlcs4Z1cZlaVwxWMh/Z04+e+twlf1o40TOfUq8=;
 b=RK23w5zLvzmwRgqfIsFksx3q4Y2dD6rry+A4rrKhulWtogkHs40GF6ZX8wmCYHa6R6zliHN2DlMvC//EovbHkvKX8eMWTOJQcwJXWHxLAhjIB3RqaOtxhdhwHW+47N3GPbbXR25rqJwRjJ+nHZDQtUhL13JuPhpVkkQYF9yFZxY=
Subject: Re: [PATCH v1] automation: dump contents of /etc/os-release
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
References: <20210708062922.23393-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <122b1f88-6663-2251-4211-01674f9b34a4@citrix.com>
Date: Thu, 8 Jul 2021 12:37:46 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708062922.23393-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0367.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18e::12) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ada8d669-b6f3-4151-0a03-08d94204d246
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5534:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5534331FFB1D7F938DCBCFB3BA199@SJ0PR03MB5534.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1923;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: y+44sEpPqjG8/X30iriechWh9UxeDM5PWpY3+mkRtMfVUOcXxVFzQl8Fc6+2GXUoj1bDbsl4YDiXGkb8yNVwXG6q6Foat/IRBzBjoW62Q0y+ird1v9vrbRhPJitr7j80bhhjYZNyfY4dH9Bzz8zCTFHMx8WPR0cSd8IOnNakg8cx2O6zvufNczqFRNjJg4HYFGmBH7gE5+3mxazA/3Eh4zQyw2HQAG4ku9DRClZyd7tAqXyp7q8gTevA5MiTqoW3fF/6JCpSbNq3JI3wXgXBh1bYkjVyioYbGbB66GdrKZlhsKGxWkiTbj/Ih5nC3XHBzCKaRSEQq5aZ75AfpySB35B/YGHLl5eCE8GP+obY9oTanjIrkDKmvtNt2vJf/SKDVt0WtNUN3MoeRkQqah5ODyIBL2474zdAKQXtytzP7+QBcpgVptmIIgyHoQO3RETY6pA16JnJ/8ZRYGeQXP1O5D+ckmGCUB42O4EUF3w6Tl+xnC7jUK6ioLuNCby7o+Cn+ASvNyNkRjM5tnIDa8az2JPnIt9QDYy3GvKF3oNVKK1b4F5WkOfFORU+wjqCCziieJjqmdEGcbg9O6kJJJsoAp+G/m9PoMYOqM9bqRobAyR+g83M99Jk/aF5eDOh3XZmPHEOJD23JDDRaUO94DGscdLEn2viRSLAmmvTay/CnfRJ4p8GcBAc/MsuUmXT8Men5L0P7lGf5rZrwKJPTFr4gImwKqnLd4DBnHgQRwDsvSU=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(39860400002)(376002)(136003)(396003)(31696002)(5660300002)(38100700002)(186003)(6486002)(36756003)(31686004)(83380400001)(16576012)(8676002)(6666004)(86362001)(4326008)(4744005)(478600001)(8936002)(66476007)(26005)(66556008)(956004)(66946007)(2906002)(316002)(53546011)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: ada8d669-b6f3-4151-0a03-08d94204d246
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 11:37:52.6572
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: sL/RlpMs+pdOdMtffi45DiUIhxJxofOX21i8RFGb8Bf33O9ptBEXX4doS7QkWTWMakdXOePKQZL8XFP2E5FbyBMsfhWsWy8I9aRUA5IkxiE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5534
X-OriginatorOrg: citrix.com

On 08/07/2021 07:29, Olaf Hering wrote:
> To aid debugging build failures, dump /etc/os-release during build.
> This helps with rolling releases such as Tumbleweed to understand the
> state of the build container.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:44:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:44:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153029.282701 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SRl-00054P-RX; Thu, 08 Jul 2021 11:44:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153029.282701; Thu, 08 Jul 2021 11:44:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SRl-00054I-OP; Thu, 08 Jul 2021 11:44:01 +0000
Received: by outflank-mailman (input) for mailman id 153029;
 Thu, 08 Jul 2021 11:44:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1SRk-00054C-VR
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:44:00 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 570e777a-fa20-4be8-9ab8-ce5188528d6a;
 Thu, 08 Jul 2021 11:43:59 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 570e777a-fa20-4be8-9ab8-ce5188528d6a
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625744639;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=iWDMupBO+rDIxrUq5GS6por6hOtDOQJtJ+daBsoBA0k=;
  b=Aznoi1bXvR2qlQfsBaIXphdwe4B3jtFR45YZ8yUSgSdffKWTEqAcsbPZ
   zxhMqQOrOcR/c2zLjM+IY2tdykUdSBUzAaMOZUDQJxMEEAGwdw4mx5mBg
   EnimT99LhhreyFlCd4foNBtjpvSgDsVCfL0CeQYS+iaeVxWXvvKqPcd0R
   M=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: PighIETYezsLKuRe2KH3niMeUo045W2nfpH+vMtsvbcAiEMAMFET6Xq6NH1hGyZiMlg9elG8CQ
 9QKcrdun3EFx7tx7FbVnKBFZ5I6bZ0XjDvOMzLwhnFuwQRG8aOmXh/G/9PHNIlT6rge0lOkp3w
 IZqkn+NC9k961o8oFSZ9TcFwUlZH8m7z//WHHEPu3rfQGFJBxmROm3CC4vV4rzUF3jXO/O4GfB
 NRsBnSYKgwa/fkSNyVxtLZuJUh3gew5LfeE0N0n5kETfjoZEe4TgyugBI+wNp6Z57LZx2ErOAh
 0rI=
X-SBRS: 5.1
X-MesageID: 47818272
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:pUvyPqvW6EMnRHDLXyCSlpBC7skDjNV00zEX/kB9WHVpm6yj+v
 xGUs566faUskd0ZJhEo7q90ca7Lk80maQa3WBzB8bGYOCFghrKEGgK1+KLrwEIcxeUygc379
 YDT0ERMrzN5VgRt7eG3OG7eexQvOVuJsqT9JjjJ3QGd3AVV0l5hT0JbTpyiidNNXJ77ZxSLu
 v72uN34wCOVF4wdcqBCnwMT4H41qf2fMKPW29+O/Y/gjP+9Q+V1A==
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47818272"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OY5ZO28md9q7893R1cZcJ8HIbUOGGwUrlMozJhdW3cI2jxW4m7IRNrvrrVLUTThI9TqFRncTQBTo1mw6LfTFQFtyLUhWyGD2ttgllIF9YzhgtI0MJ4pyBspWtgpAy4seWi2gZcVTROyT1F0kJH15Nyf/sO7DMjK4uURu5FmkKatTjqLIyTImWd4LhG5F0ikTQLwvatc1DNJqORAKWep31K9xl/spcDgSFlkKcn5Jd2KVdrMRzh0v78LqM9sKzsuve89WSrYBa+/eniVKLcOQx7ebau/CL4XADmWVf8Ybq6K7BV3GWpYSbBB6H+tMX+kPlOz93FM4EZbGfxk0G+CBtA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8YI1I2uH2ODMa7er0pTVVBQk+8xgk97Su8uLqmTzWWo=;
 b=ZGzCNOuYAO3KHe1GyFnKx7+ZNzIvp7KXIiYQtkwcYSB6RN2TAcC1tkcipf/+Ork+qyxkIzKhBhHk/hRQfHBM73mLYGC72x0NCmdej3IMAt/I7LHWoyI3Drgr2Js9VLup6fdwl4h+7g2QPod51uXO/x1ydbkegWTXP4vFeMprs6caZNBTMyVl/CtBQacuyxH7ufFHsQjeTjp6Db45NfwTZUQrikVBrYIW4viBI42G82OXX8NYAD2S8PHg415qOViPjEBL0q0k8L7CHO095Q8yb0RWSH5WJ1JjZLK0AIvqTqTqWWzVRnhjf8UoqQv+orNIh9H9+BaLiXJO6ZRZRNvJNg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8YI1I2uH2ODMa7er0pTVVBQk+8xgk97Su8uLqmTzWWo=;
 b=ve2UtVgz3i8Htq6YJwx72itEcxda10j/a5rzBryEmKta7/GkLa2r7Oa6U23HFchXTmIERuUKvezOOaAd56WY7aCeJ6TkADD2cFtmQqmPMaW/jYgeL+Z+f0d4pqdGijRIjFtNPqjcVnOxvAZj6vpjX7XUSvr51jxoF2bFGD+lSL8=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
References: <20210708065435.24515-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
Date: Thu, 8 Jul 2021 12:43:41 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708065435.24515-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0464.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1aa::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8bbc9f27-17b9-4197-cc44-08d94205a5b5
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5534:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB553441BADD6C3AC9B1299E50BA199@SJ0PR03MB5534.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4125;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: pkOg7pXfrR5m477YYIw3kR9J7fi90cuqCO30KSxVYo5aVqn8oORXi494VMeWLuQvCklrMcxo7vJDwUI9Duofx8mBBwoKvf5wx39WkCDIOwoVGMQNrWMaIlLaWCBqQ3L4fyjkarEgKNLmVwaZdC+jpS3SOFVy8sP5Mpicp/nzEUy6X94WBnUSGRGLDImL/00H625jZ421gwHAcVSO62nOIFSIpWe9RZS0ZZ1E5nkwynwU5r+h+QJL867wBQkV0/+wzrZ6w69Z/q7sTLR+5SJ1tkG4zMXIxkaGdRa5SI6OsAaCV5AYb0jdAGgwXdrI78xTxobQUjX9x2EnBRno/4R055WSLRc/jWcZ0f5cgkRCZXATwFYDRog5xISF274jDJjv31Pq3QHk1nMO8h4o01ZfCxgDIpIsG8Va49NS0+p0povgWXT1WalTZX6THF8aH51AodI3IuvLqYOoZb3FmybtG3QpFjbcRDU/alOzUQkOEXO6Tec0He+KaCJtsYSqEJ7uhMHOigzCUTIr3hG32/HfAYcedKIiRJbScK+Q/meVSpSa6LuW2F6GXS1TeOywrIipM9fI6qE1QiyTH2cWwsdb0YZSBRh6k1biYD4NXL9XG/3A4R5CCtgiaAj9hQsRNu8LHwzWSBguMC35Ut4x35qeEUsYpTpavZ5fF5wZnOZSqmZ8eG5/9eaBee1QR5NxvNCuwg1COtX65hFMpEHhePWcR7R2BZZEuBY4vuF7/qPqjvJNRLaAXFKbWWCZAJzi32fxAx+lwbsWPKLdxgKN0SnhvgrHaNLN7uHMIxLwgxWZ3C0C2cITh8scPmQyHXigRo8N
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(39860400002)(376002)(136003)(396003)(31696002)(5660300002)(38100700002)(186003)(6486002)(36756003)(31686004)(83380400001)(16576012)(8676002)(6666004)(86362001)(4326008)(4744005)(478600001)(8936002)(66476007)(26005)(66556008)(956004)(66946007)(2906002)(966005)(316002)(53546011)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 8bbc9f27-17b9-4197-cc44-08d94205a5b5
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 11:43:47.3889
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 1jYllLtWTPQe9iikBEREVbfXUyIOoXfLbzEP531Wuq2/+cprV+IITn5dTr0jguoVHmZNcIB/c0SHnZS3c/mUzkgJpX3FKuUGeE0ktgg4Pss=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5534
X-OriginatorOrg: citrix.com

On 08/07/2021 07:54, Olaf Hering wrote:
> The current single *.log pattern collects just config.log, which
> usually contains little useful information.
> Collect also log files in subdirectories, tools/config.log usually
> contains information about configure failures.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>  automation/gitlab-ci/build.yaml | 1 +
>  1 file changed, 1 insertion(+)
>
> No idea if the syntax is correct, and how I would test such changes mysel=
f.

https://gitlab.com/xen-project/people/andyhhp/xen/-/pipelines/333797480
is a pipeline running with this patch in place.

As for testing, get an account on Gitlab.=C2=A0 I'll add you to xen-project=
,
after which pushes to your local fork of Xen here will use the
project-wide runner configuration, rather than using the Gitlab's pool
of public workers (which amongst other things, lack ARM).

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 11:49:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 11:49:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153035.282712 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SX7-0005k0-Fs; Thu, 08 Jul 2021 11:49:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153035.282712; Thu, 08 Jul 2021 11:49:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1SX7-0005jt-Cv; Thu, 08 Jul 2021 11:49:33 +0000
Received: by outflank-mailman (input) for mailman id 153035;
 Thu, 08 Jul 2021 11:49:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1SX6-0005jn-9O
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 11:49:32 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.218])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2f272eec-e939-48bc-8260-e03df5a16e34;
 Thu, 08 Jul 2021 11:49:31 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68BnTa47
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 13:49:29 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2f272eec-e939-48bc-8260-e03df5a16e34
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625744969;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=uC0DRUeikHzls3iF8+TSpWo4D0zgm/OGgytXMHohXvc=;
    b=pmUBY9BLotq1X0gtzd7g5z7IY9/j0AL72YvMRq8EHdtau9TDTPNDxYXfhVj6iN+LA1
    N5L/x8B6tPGFq53Vk2D1rS9h0Xq04BaLG9QXZQT8I3wPYpt0E8P3QOg8JL2ORmwf8Cci
    tU/1ygdR+JJKJzavWRjks/aE45B7CoIZagZfL9luTxE8qvUISA0wNqk5xLuMJesHoiwD
    bn2PkD1JtDUlTE/q0znRFX/6JZTjhFb12Vh1C2lD+s++XUSlkUlx7z3OpByVEoWG7mEi
    rbLUP4Pgs3VvX/HlzyYFp6fFHjaDwExd27EFQnBVXmZNnh4atuK92M3A9RaezXrdtjZm
    Pysg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 13:49:08 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <20210708134908.2e08141d.olaf@aepfle.de>
In-Reply-To: <e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
References: <20210708065435.24515-1-olaf@aepfle.de>
	<e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/qtmdmqhoTFHZfoJ=ff3sx4q";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/qtmdmqhoTFHZfoJ=ff3sx4q
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 8 Jul 2021 12:43:41 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> https://gitlab.com/xen-project/people/andyhhp/xen/-/pipelines/333797480
> is a pipeline running with this patch in place.

Thanks, apparently the logs are in place now.

My github/gitlab username is 'olafhering'.

Olaf

--Sig_/qtmdmqhoTFHZfoJ=ff3sx4q
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDm5jQACgkQ86SN7mm1
DoApJg//XLK3S12ZElKJ/O2lBuzumy4a3erF796Ft8m8z0eueFgseVYaBjHigIeq
pEjxxXTrZr/kHp5W/vZzxIpUnUx/vcgjnVVlUpLYsgPuQE573igXbKzikP+/q4lk
p0J1+Pv3YZPXCXI+oQqVWPcyBqDtGCh0MlgdkrhZ1qJcWlL/MMKbD3rRGbAdrlo7
IiCcFpNQS+wdYophPAW9dnhsjf/ID++HZh6jwL1zeG5XdsmhgupdiC0pVutuYsIV
bWS8f/q0moBjgdAXlVu/gNioc2mUCVtiA3BBIk/UncHAnWFWeQzJuZ/ujRG+duMb
ptExVUkradZrtKoEMq+v8pO56FkBAU9YICFbdpfacX2Uderb3EpH+CQC2MhG35gq
3nsz6KdTjQlHsIVZN0ELjC5xHV2288A2L++Eg3Ha7g5+UclrEn7F+XLiSk8kPlFS
QNcEmJX9phHwjt4avcP/+U5FXusePTGLPm8Pm0R5LA6Jc4wvQvHhbUAOON/zg5/A
S6xdHWcI2SawEiXhJdTDxkKVjeYozFlG5lWFQZ4RdcmuDF5buOWNRdI/Zd8hl7VK
cC0CSIzKUTOV5SrdemupL+YkDJCyyD/7IhtIUJTsJFV1rjYkjdAvwv/NKxGd5zEc
LhcZwMJATMi2PFwM27kkmM8IuBZHsDtmK8BQyUECeEkSMQ4lClI=
=S9Z2
-----END PGP SIGNATURE-----

--Sig_/qtmdmqhoTFHZfoJ=ff3sx4q--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:03:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:03:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153040.282723 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Sk7-00083z-SO; Thu, 08 Jul 2021 12:02:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153040.282723; Thu, 08 Jul 2021 12:02:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Sk7-00083s-P9; Thu, 08 Jul 2021 12:02:59 +0000
Received: by outflank-mailman (input) for mailman id 153040;
 Thu, 08 Jul 2021 12:02:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=T7pH=MA=suse.de=tzimmermann@srs-us1.protection.inumbo.net>)
 id 1m1Sk6-00083m-E8
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:02:58 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2eb7ce81-e464-4a25-bb21-555f8497a89d;
 Thu, 08 Jul 2021 12:02:56 +0000 (UTC)
Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id ECEFE201B9;
 Thu,  8 Jul 2021 12:02:55 +0000 (UTC)
Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id CBBF213BDF;
 Thu,  8 Jul 2021 12:02:55 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap2.suse-dmz.suse.de with ESMTPSA id uLSBMG/p5mCTUAAAMHmgww
 (envelope-from <tzimmermann@suse.de>); Thu, 08 Jul 2021 12:02:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2eb7ce81-e464-4a25-bb21-555f8497a89d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa;
	t=1625745775; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=1bqk4P66kfUPF0nZTSeMx/UpEB11u4JVq6Vaz9UQ/2c=;
	b=uk09hWmclWAeIBNVTmsoMVNS8+g9imZXMylOus6mqzkEhl3bzviQfYbzVis/78Iez3OU37
	MmwaA7HNsOjaEs01OF3I3vlJiSnEHVdV1Rrs9g2VoY/8ez8OSeMZPdcH1GbuTXPk3hnnnT
	oL+KpPuiDNRPzTYvEzrF+6uzVyj0xh4=
DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;
	s=susede2_ed25519; t=1625745775;
	h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=1bqk4P66kfUPF0nZTSeMx/UpEB11u4JVq6Vaz9UQ/2c=;
	b=Dj7dVUL4IbxxFeR/bXTHKkjkeMSkjsxP+i7O0Y7OsgIjwi2anUO7vduH6vnTDk1QfZ5+1j
	9QLQovxiZUjZgpAQ==
Subject: Re: [PATCH] drm/xen: Implement mmap as GEM object function
To: oleksandr_andrushchenko@epam.com, airlied@linux.ie, daniel@ffwll.ch
Cc: dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org
References: <20210624095349.8874-1-tzimmermann@suse.de>
From: Thomas Zimmermann <tzimmermann@suse.de>
Message-ID: <02731933-2404-5834-a0bf-6aacbafa6cd1@suse.de>
Date: Thu, 8 Jul 2021 14:02:55 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210624095349.8874-1-tzimmermann@suse.de>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="sz55DMZojMrMiKXiWuCunu8RrlyzGWBGd"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--sz55DMZojMrMiKXiWuCunu8RrlyzGWBGd
Content-Type: multipart/mixed; boundary="2cnUca9kI22p8Xjoc733cFC69OgALfHLy";
 protected-headers="v1"
From: Thomas Zimmermann <tzimmermann@suse.de>
To: oleksandr_andrushchenko@epam.com, airlied@linux.ie, daniel@ffwll.ch
Cc: dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org
Message-ID: <02731933-2404-5834-a0bf-6aacbafa6cd1@suse.de>
Subject: Re: [PATCH] drm/xen: Implement mmap as GEM object function
References: <20210624095349.8874-1-tzimmermann@suse.de>
In-Reply-To: <20210624095349.8874-1-tzimmermann@suse.de>

--2cnUca9kI22p8Xjoc733cFC69OgALfHLy
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable

ping for review

Am 24.06.21 um 11:53 schrieb Thomas Zimmermann:
> Moving the driver-specific mmap code into a GEM object function allows
> for using DRM helpers for various mmap callbacks.
>=20
> The respective xen functions are being removed. The file_operations
> structure fops is now being created by the helper macro
> DEFINE_DRM_GEM_FOPS().
>=20
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   drivers/gpu/drm/xen/xen_drm_front.c     |  16 +---
>   drivers/gpu/drm/xen/xen_drm_front_gem.c | 108 +++++++++--------------=
-
>   drivers/gpu/drm/xen/xen_drm_front_gem.h |   7 --
>   3 files changed, 44 insertions(+), 87 deletions(-)
>=20
> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/=
xen_drm_front.c
> index 9f14d99c763c..434064c820e8 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> @@ -469,19 +469,7 @@ static void xen_drm_drv_release(struct drm_device =
*dev)
>   	kfree(drm_info);
>   }
>  =20
> -static const struct file_operations xen_drm_dev_fops =3D {
> -	.owner          =3D THIS_MODULE,
> -	.open           =3D drm_open,
> -	.release        =3D drm_release,
> -	.unlocked_ioctl =3D drm_ioctl,
> -#ifdef CONFIG_COMPAT
> -	.compat_ioctl   =3D drm_compat_ioctl,
> -#endif
> -	.poll           =3D drm_poll,
> -	.read           =3D drm_read,
> -	.llseek         =3D no_llseek,
> -	.mmap           =3D xen_drm_front_gem_mmap,
> -};
> +DEFINE_DRM_GEM_FOPS(xen_drm_dev_fops);
>  =20
>   static const struct drm_driver xen_drm_driver =3D {
>   	.driver_features           =3D DRIVER_GEM | DRIVER_MODESET | DRIVER_=
ATOMIC,
> @@ -489,7 +477,7 @@ static const struct drm_driver xen_drm_driver =3D {=

>   	.prime_handle_to_fd        =3D drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle        =3D drm_gem_prime_fd_to_handle,
>   	.gem_prime_import_sg_table =3D xen_drm_front_gem_import_sg_table,
> -	.gem_prime_mmap            =3D xen_drm_front_gem_prime_mmap,
> +	.gem_prime_mmap            =3D drm_gem_prime_mmap,
>   	.dumb_create               =3D xen_drm_drv_dumb_create,
>   	.fops                      =3D &xen_drm_dev_fops,
>   	.name                      =3D "xendrm-du",
> diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/=
xen/xen_drm_front_gem.c
> index b293c67230ef..dd358ba2bf8e 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front_gem.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c
> @@ -57,6 +57,47 @@ static void gem_free_pages_array(struct xen_gem_obje=
ct *xen_obj)
>   	xen_obj->pages =3D NULL;
>   }
>  =20
> +static int xen_drm_front_gem_object_mmap(struct drm_gem_object *gem_ob=
j,
> +					 struct vm_area_struct *vma)
> +{
> +	struct xen_gem_object *xen_obj =3D to_xen_gem_obj(gem_obj);
> +	int ret;
> +
> +	vma->vm_ops =3D gem_obj->funcs->vm_ops;
> +
> +	/*
> +	 * Clear the VM_PFNMAP flag that was set by drm_gem_mmap(), and set t=
he
> +	 * vm_pgoff (used as a fake buffer offset by DRM) to 0 as we want to =
map
> +	 * the whole buffer.
> +	 */
> +	vma->vm_flags &=3D ~VM_PFNMAP;
> +	vma->vm_flags |=3D VM_MIXEDMAP;
> +	vma->vm_pgoff =3D 0;
> +
> +	/*
> +	 * According to Xen on ARM ABI (xen/include/public/arch-arm.h):
> +	 * all memory which is shared with other entities in the system
> +	 * (including the hypervisor and other guests) must reside in memory
> +	 * which is mapped as Normal Inner Write-Back Outer Write-Back
> +	 * Inner-Shareable.
> +	 */
> +	vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags);
> +
> +	/*
> +	 * vm_operations_struct.fault handler will be called if CPU access
> +	 * to VM is here. For GPUs this isn't the case, because CPU  doesn't
> +	 * touch the memory. Insert pages now, so both CPU and GPU are happy.=

> +	 *
> +	 * FIXME: as we insert all the pages now then no .fault handler must
> +	 * be called, so don't provide one
> +	 */
> +	ret =3D vm_map_pages(vma, xen_obj->pages, xen_obj->num_pages);
> +	if (ret < 0)
> +		DRM_ERROR("Failed to map pages into vma: %d\n", ret);
> +
> +	return ret;
> +}
> +
>   static const struct vm_operations_struct xen_drm_drv_vm_ops =3D {
>   	.open           =3D drm_gem_vm_open,
>   	.close          =3D drm_gem_vm_close,
> @@ -67,6 +108,7 @@ static const struct drm_gem_object_funcs xen_drm_fro=
nt_gem_object_funcs =3D {
>   	.get_sg_table =3D xen_drm_front_gem_get_sg_table,
>   	.vmap =3D xen_drm_front_gem_prime_vmap,
>   	.vunmap =3D xen_drm_front_gem_prime_vunmap,
> +	.mmap =3D xen_drm_front_gem_object_mmap,
>   	.vm_ops =3D &xen_drm_drv_vm_ops,
>   };
>  =20
> @@ -238,58 +280,6 @@ xen_drm_front_gem_import_sg_table(struct drm_devic=
e *dev,
>   	return &xen_obj->base;
>   }
>  =20
> -static int gem_mmap_obj(struct xen_gem_object *xen_obj,
> -			struct vm_area_struct *vma)
> -{
> -	int ret;
> -
> -	/*
> -	 * clear the VM_PFNMAP flag that was set by drm_gem_mmap(), and set t=
he
> -	 * vm_pgoff (used as a fake buffer offset by DRM) to 0 as we want to =
map
> -	 * the whole buffer.
> -	 */
> -	vma->vm_flags &=3D ~VM_PFNMAP;
> -	vma->vm_flags |=3D VM_MIXEDMAP;
> -	vma->vm_pgoff =3D 0;
> -	/*
> -	 * According to Xen on ARM ABI (xen/include/public/arch-arm.h):
> -	 * all memory which is shared with other entities in the system
> -	 * (including the hypervisor and other guests) must reside in memory
> -	 * which is mapped as Normal Inner Write-Back Outer Write-Back
> -	 * Inner-Shareable.
> -	 */
> -	vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags);
> -
> -	/*
> -	 * vm_operations_struct.fault handler will be called if CPU access
> -	 * to VM is here. For GPUs this isn't the case, because CPU
> -	 * doesn't touch the memory. Insert pages now, so both CPU and GPU ar=
e
> -	 * happy.
> -	 * FIXME: as we insert all the pages now then no .fault handler must
> -	 * be called, so don't provide one
> -	 */
> -	ret =3D vm_map_pages(vma, xen_obj->pages, xen_obj->num_pages);
> -	if (ret < 0)
> -		DRM_ERROR("Failed to map pages into vma: %d\n", ret);
> -
> -	return ret;
> -}
> -
> -int xen_drm_front_gem_mmap(struct file *filp, struct vm_area_struct *v=
ma)
> -{
> -	struct xen_gem_object *xen_obj;
> -	struct drm_gem_object *gem_obj;
> -	int ret;
> -
> -	ret =3D drm_gem_mmap(filp, vma);
> -	if (ret < 0)
> -		return ret;
> -
> -	gem_obj =3D vma->vm_private_data;
> -	xen_obj =3D to_xen_gem_obj(gem_obj);
> -	return gem_mmap_obj(xen_obj, vma);
> -}
> -
>   int xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj, stru=
ct dma_buf_map *map)
>   {
>   	struct xen_gem_object *xen_obj =3D to_xen_gem_obj(gem_obj);
> @@ -313,17 +303,3 @@ void xen_drm_front_gem_prime_vunmap(struct drm_gem=
_object *gem_obj,
>   {
>   	vunmap(map->vaddr);
>   }
> -
> -int xen_drm_front_gem_prime_mmap(struct drm_gem_object *gem_obj,
> -				 struct vm_area_struct *vma)
> -{
> -	struct xen_gem_object *xen_obj;
> -	int ret;
> -
> -	ret =3D drm_gem_mmap_obj(gem_obj, gem_obj->size, vma);
> -	if (ret < 0)
> -		return ret;
> -
> -	xen_obj =3D to_xen_gem_obj(gem_obj);
> -	return gem_mmap_obj(xen_obj, vma);
> -}
> diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.h b/drivers/gpu/drm/=
xen/xen_drm_front_gem.h
> index a4e67d0a149c..eaea470f7001 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front_gem.h
> +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.h
> @@ -15,9 +15,7 @@ struct dma_buf_attachment;
>   struct dma_buf_map;
>   struct drm_device;
>   struct drm_gem_object;
> -struct file;
>   struct sg_table;
> -struct vm_area_struct;
>  =20
>   struct drm_gem_object *xen_drm_front_gem_create(struct drm_device *de=
v,
>   						size_t size);
> @@ -33,15 +31,10 @@ struct page **xen_drm_front_gem_get_pages(struct dr=
m_gem_object *obj);
>  =20
>   void xen_drm_front_gem_free_object_unlocked(struct drm_gem_object *ge=
m_obj);
>  =20
> -int xen_drm_front_gem_mmap(struct file *filp, struct vm_area_struct *v=
ma);
> -
>   int xen_drm_front_gem_prime_vmap(struct drm_gem_object *gem_obj,
>   				 struct dma_buf_map *map);
>  =20
>   void xen_drm_front_gem_prime_vunmap(struct drm_gem_object *gem_obj,
>   				    struct dma_buf_map *map);
>  =20
> -int xen_drm_front_gem_prime_mmap(struct drm_gem_object *gem_obj,
> -				 struct vm_area_struct *vma);
> -
>   #endif /* __XEN_DRM_FRONT_GEM_H */
>=20

--=20
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 N=C3=BCrnberg, Germany
(HRB 36809, AG N=C3=BCrnberg)
Gesch=C3=A4ftsf=C3=BChrer: Felix Imend=C3=B6rffer


--2cnUca9kI22p8Xjoc733cFC69OgALfHLy--

--sz55DMZojMrMiKXiWuCunu8RrlyzGWBGd
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmDm6W8FAwAAAAAACgkQlh/E3EQov+CG
Jw//VGeqNQ9YnFxiPMekzgOrmQfYifS4YcOAyiOaYd/1DyR7shk9AhVWU1DtO9P4Aj09WZB81sIW
8aOwARPN5nDKTNHjQMJD6EU5spAm5tUB7hV3p9Iw0Z74LTsyAESh5rSZhIWQFRyDppFNDMH+KeSp
4jS1N5vemsUH/lmiBvsEwq/UYlSKb++LsLfGfP7hknz3msUiwL69pVoYHtnnurY9xlDX6xvc0e/S
fuwPhWJofLQzCa4WKtuyXGaA5sl+mMl4OOGTQAxZXRl67uo1k4CH28zrOFd/YbP/KBYDFODtTpGu
4KtxcTTmrFvoJT5non3diBAJ7/RGIIWU4ElOZtBIvvHtRGfnf4IB1WbYNQLcy7v5uXfDb7fnfk8f
9ifVrXDIDZA6PBX7j7+fDdsKUgXCSxk/ypFQ8o19j/Gv/6hKV5foZM/W5zc2cMkCCkHkwPoOnUwa
8eM3qR10bNSi94D/ceNAOwnC1AMUShVMI/hhzVnosXGS5MfAREZWO16bnmNrBZI+39wGKK90N+6q
pn0um17obu298jqH57Z8cVCWGTL78tAHPmcZakfQ65FM7deD7dTTYLoJMugWMmzUWbD7ra0npqU2
AjCutzmUsef/bYfH3whAMyUTkiW7iF5TnWC5UIFKmaogcXly8ivp4XOiVmXCeOSUttWsyuk61zOZ
MCM=
=p5NF
-----END PGP SIGNATURE-----

--sz55DMZojMrMiKXiWuCunu8RrlyzGWBGd--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:03:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:03:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153044.282734 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Sl5-0000BF-5v; Thu, 08 Jul 2021 12:03:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153044.282734; Thu, 08 Jul 2021 12:03:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Sl5-0000Az-2P; Thu, 08 Jul 2021 12:03:59 +0000
Received: by outflank-mailman (input) for mailman id 153044;
 Thu, 08 Jul 2021 12:03:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1Sl3-0000Ap-U4
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:03:57 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 92476172-dfe4-11eb-8567-12813bfff9fa;
 Thu, 08 Jul 2021 12:03:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 92476172-dfe4-11eb-8567-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625745836;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=fQNIrLovho5rj/E2P9miQoP1u+BXyeC0t/sYsADKQLA=;
  b=TBQSCACuJnGl89v9zUjGX/QvWzjJdF/LHq1DUyjNEHeQTZV9XYhkHlhW
   sC3yCgYlYrVnciEmGAuE5AxVLhA2PQwXhpxClFqcgkYPGePNSwTr7+pTj
   i0/dHBFGjlLdZGyaAYQzTULJkNmyK7+zrCl/O2tzrOTAN7c2yO35tKDpA
   o=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: qteArndRXtg5Ac94ZN/GQ+AvMg3USCmLR98hfKX+z3En7loXXcvoZq04Dd/2XGEiXtYnDfN0Jz
 kPo93ngrilOPt9wpphd3ALWwv6VdI29YFxP0xkhHaRye9SzZVllpk+PC2No5uZYBJpwPqlNfyP
 Ye3USqaK5Hgqz0ghoezIg4zqGdRuvNyVy+BftRwwBPnaN+lXmv4MK3DVqbdPyT3FuxF6u21HXH
 CPvRB0mxF6ckAxNKONixQcIx7LJWARkRl7iesVGqoPr40NMhYZaSioFhk+XdT5l9vuKWQ+q5jI
 Loo=
X-SBRS: 5.1
X-MesageID: 47534457
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:hl1656qSrcxUksfHKQbfSF8aV5vHL9V00zEX/kB9WHVpm5Oj+P
 xGzc526farslsssREb+OxpOMG7MBfhHO1OkPYs1NCZLXXbUQqTXfxfBO7ZrQEIdBeOjtK1uZ
 0QFZSWTeeAd2SS7vyKkDVQcexQueVvmZrA7Yy1rwYPPHNXguNbnmBE426gYzxLrWJ9dPgE/f
 Snl696TnabCA8qhpPRPAh6YwGPnayGqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD09jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbU911rhOkWO5Tf90Qjp1zgjr1X4z0WDvHflqcvlABonFston+tiA1jkwntlmOs5/L
 NA3mqfuZYSJwjHhj7B69/BUAwvvlaooEAljfUYgxVkIMsjgYdq3MkiFX5uYdM99HqQ0vFhLA
 AuNrCc2B9uSyLZU5iD1VMfhuBFNx8Ib2S7qktrgL3f79EZpgEh86O0rPZv6Evoz6hNP6Ws0d
 60epiApIs+O/P+UpgNc9vpYfHHQFAlEii8fV57HzzcZeg60jT22sbK3Ik=
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47534457"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Vwr4EXNcbzKjnZY2Fh4QaAt8//bOcgaNk6ZMkD4XkuESnYcEysZqAl0ZSOVG+4bIsQba88453gocGlkR+ZjRm8ltGHCSO5NamAddRaE0aztGDEepVeYH2M6vdl+ymWrSMUD92bWH5NALu5wMdEpxeGT7lFGgSFQkCxLuDqW2hFoEbYf1Hyv+yeZOUZypWvwuzucak6NYt3LkSbecu5+1L9SX7TIW3h61E6+BwENn1KqG32GXoNqDkdjWwLn6pOB+UPceY8X7oBQJhJ81Hw21YxGTzgCUN4/wrJdzV8NnF1PcwCSFraG1VKlJJETW4Sz1VVXZwC5hn2QEdEij6OQsng==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dLIjE3swPEJWZE+a7NZ70qvwlGgS8FnIvEOnNLpweRE=;
 b=DHvxvWyB8+A7nkAGaggf4v3REGIS4IBQHe+5qIdLq0W6PkSBJL8cKISabBrrks3ibhZA4s+X1/R16fS72ZBTh1i0sIntDwPb+CeRngW3W3iAxbJIVzRzz7w2pXB+RGHWSo46p9AeJLpk3MwOvfbAiyDZ3s7RYmIY4AEWhU5zsbzSATJbEPA4Pt+HW4i5fH057Y2LpdGzq9tu8OpheywR8fw5xWWkia2tcOZxmQUENSM5JJKxpNCf+HgQitUaeRIWYwAT0SaM8m3t3KMxucsK98aqnnyx13xogB61gvXC/HNU0DuWWrzyHEY9VJT/1D7x538QhPep+tUA/3ZiSQRMEg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dLIjE3swPEJWZE+a7NZ70qvwlGgS8FnIvEOnNLpweRE=;
 b=DaS0sQlgKyZLIAE0dIUXCXUq7hIo41X+rGjDdvTqL2fTJC8EzKIEX6MuAN38Frx7v1wCNMg/+6hMaseuLJgSOkjvC/rMlmb7C2T8eM7Qxmng0IzeASV5lR2vGIq4Kbn+hyM3TzszfPKsSNex0DFqBuxSNwb1wPP9n4xvDZedPYQ=
Subject: Re: [XEN PATCH v6 03/31] build: use if_changed on built_in.o
To: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>
CC: Jan Beulich <jbeulich@suse.com>, George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>, Julien Grall <julien@xen.org>, Stefano
 Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-4-anthony.perard@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <9bb04af6-105f-1040-d71e-799497034f2f@citrix.com>
Date: Thu, 8 Jul 2021 13:03:46 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210701141011.785641-4-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0116.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:192::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f7c6e834-ee49-4257-6e64-08d9420874f4
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5887:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB58871AFC64780CB7F97EB8A3BA199@SJ0PR03MB5887.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1728;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: XhppEmvWO2UWx3Xizm5uCjSfZ3fuDlqrOPadVu4eqzEVjCUWcuah9NDPCa1eYs6Sy3w6ZU9Hr4HPgdHNprb+52z964ZiXQPNrLYdBKE6rHWKq27H2HPpRjaRNBw5IZhG27E7jp13ZA+cy6nU8GO1C6JKIEUf2X5pCKC+DdDwTCQD4BINs2PAhZitmux4AeAG8rKN0QHiFw1BjEOUy0omAVFox8VtGYv4JOb9HU54SNbLW0SxEwjECMCI/WUYuCtTAk9lubA5n8LAySni4VjWGjRps7Y1z28w1LWVrvsS1UabfGJBuabRC4cOCtmDEwWGHY4poHx9AgvFBWpJ7h0klagZJorFT1N5e25EhALiWGBte4youuHBQ+SdO16QfilEGM6TlroUqpZaEuqWJ0LL07qWsR/9oXrqTa73QnEJRng9pEhWHD9TVlsCPJYK3rByjw9Hc0g/oxlio0oLXmYxkhJXIq3UyZmXBd692LrnypYneOxIsCFF14HWe5CtMCvgDgRN6pqbvbDCnyMs2OTSdkgyDzIHuymfCzQmlfe4HQ1b42l76QLyLaR+ZDq78pixOi7ZsF7jQm5Pmo/2mTMMssN1HudxYtLkHGnJepAvkTXhzGfgcsS3vpeovQHvl6kLNLBiepHCu3bSXKeEjvojFTIbhO1XgVPv/s6di636/Ejzp7szfF4CuLyLavdbF4TPUuoYJA1cFyBKyi9Cgtr0vdpoQbxtC+YS/I2ad9HOaHaU8K1TqkFcd8+y4SMO0jay
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(39860400002)(376002)(346002)(366004)(8936002)(16576012)(31686004)(54906003)(8676002)(4744005)(6666004)(2616005)(316002)(478600001)(38100700002)(4326008)(5660300002)(956004)(6486002)(26005)(2906002)(31696002)(36756003)(66476007)(66556008)(53546011)(66946007)(186003)(86362001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: f7c6e834-ee49-4257-6e64-08d9420874f4
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 12:03:54.1562
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Lcp5JZJj9/U3P/ETkAHlYu5E2Q2cpJOf4B6cTyG2bB4HGMceT9L7Hygn8Ap9cSBv3Nvnf3V2Vyr2mag6FgOFcMc25058oWOvowsWolKRJ40=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5887
X-OriginatorOrg: citrix.com

On 01/07/2021 15:09, Anthony PERARD wrote:
> diff --git a/xen/Rules.mk b/xen/Rules.mk
> index f778058f80a6..6a0cdfde2eed 100644
> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -147,17 +147,22 @@ include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
>  c_flags += $(CFLAGS-y)
>  a_flags += $(CFLAGS-y) $(AFLAGS-y)
>  
> -built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y)
> -ifeq ($(strip $(obj-y)),)
> -	$(CC) $(c_flags) -c -x c /dev/null -o $@
> -else
> +quiet_cmd_cc_builtin = LD      $@

s/LD/CC/

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:23:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:23:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153052.282745 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1T3o-0002Wf-Qz; Thu, 08 Jul 2021 12:23:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153052.282745; Thu, 08 Jul 2021 12:23:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1T3o-0002WY-Mo; Thu, 08 Jul 2021 12:23:20 +0000
Received: by outflank-mailman (input) for mailman id 153052;
 Thu, 08 Jul 2021 12:23:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1T3n-0002WS-FG
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:23:19 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.166])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4672edf4-dfe7-11eb-856a-12813bfff9fa;
 Thu, 08 Jul 2021 12:23:18 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68CNGaDe
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 14:23:16 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4672edf4-dfe7-11eb-856a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625746996;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=uEdnSFn26ZNkcVYn2T2Hij0fY7vtwDovyc8xFVQpFsU=;
    b=nZd4a+RohF39uLfIBbgxB901l2FL/z5y0iWHxyRYX7zsyZY6Bm17cTe+tPK5t/epIu
    gL+PtXIvuW1+deANm7sA5sfaaKuyaebN25Kovu6vqrjY3GSDZE9Nc9ynR70ms0LO8UWm
    ek1pyyqdp7THN3M8tThECEp6Y9V6jxq52UlJQMisrdroGytHosc7V3YCcfVze8OUNnNv
    iWoevYfPtx7j76fH33IODgCntp8465gdE2yoiJ6dmw2M3sq/C++pnsoRgY/VfOKaW2Vo
    YhmIBHaFHIqcAuEsHhFZfjKtbVd0lpSEw3I5mTD5P/kHsz8yLFwQ7jMDCk7YxI0Wg51/
    6gdA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 14:23:09 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <20210708142309.6d093d7e.olaf@aepfle.de>
In-Reply-To: <20210708023224.6c05ff5b.olaf@aepfle.de>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
	<20210707164001.894805-3-anthony.perard@citrix.com>
	<e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
	<20210707223551.5462c74e.olaf@aepfle.de>
	<375823a3-8b49-7aab-ca2a-af219234b5e4@citrix.com>
	<20210708023224.6c05ff5b.olaf@aepfle.de>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/4h66G54_=6rrJk12_DpTQcR";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/4h66G54_=6rrJk12_DpTQcR
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 8 Jul 2021 02:32:24 +0200
schrieb Olaf Hering <olaf@aepfle.de>:

> At least for Tumbleweed it is useful information.

CPE_NAME=3D"cpe:/o:opensuse:tumbleweed:20190730"

Two years old for a rolling release.

Is there any documentation how to refresh the used containers? I think for =
Tumbleweed this should be done every other week.

Olaf

--Sig_/4h66G54_=6rrJk12_DpTQcR
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDm7i0ACgkQ86SN7mm1
DoAakQ//Ugp97vSFJm3a4QapQo+WTiEjVLCNY7s0WofMOttN1jE6l5bnU0TNWFPa
Yr8jRI6+cuZ7LM7wY+ilqwnm6VkoSFh8XOM3zODq/JUoNlCYEN+k7Gjns9HkSrtL
BJMLCFUdjTSZvdj74W0Y0mPyLmposZEk53dumL+NS5qYMnSRN0pQQyS2BvSPIe4K
tYR2UFWuE/ZBRJELRFL7D0OcmkS8yS7WRI5i2gIJWTYLIbWNAhofWrZDEBZuE4Vd
PXao4sDSqHTIozbChaLT/eDExbpPeepDv6Axj0+mPvsW7aVnZitbuwPuMTGoYl/F
+du7tRug2YC2Z70OE5N7ZHZVTtG2lekgd7/jzEt8n66uLgfJT3591TPIRUdcbEGJ
AIKMlKKpNB7Ay6pqSE87Z3WdVK9w+zTOPI2fWgXbFdQXhWpajYubo+g0U0jtC9/X
A9iIYwZSt0+LngdUExSgUNTlUuxedYpMTrsEG6e7BiWtRlT5/UCHI+GO4t1gb3aK
cMhSFgMClbdMu14psiJB1NA7GvZkqZlgSS2PnU7/yNTqHf6ruJ6IrR2e+60Jl4we
evtnZwpJr01qV5xOawpQ+G+PyrywsrnHSEUQ5+xeJaSnJOzRg2vPBE6h1Z7O474+
SZTh6SxxKfXEsbRqP7EoUaOP/s8kkXyjIozyp5DWPynwUpOsuY8=
=rh91
-----END PGP SIGNATURE-----

--Sig_/4h66G54_=6rrJk12_DpTQcR--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:32:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:32:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153059.282759 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TCp-0003y1-Od; Thu, 08 Jul 2021 12:32:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153059.282759; Thu, 08 Jul 2021 12:32:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TCp-0003xu-LE; Thu, 08 Jul 2021 12:32:39 +0000
Received: by outflank-mailman (input) for mailman id 153059;
 Thu, 08 Jul 2021 12:32:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1TCo-0003xk-CN; Thu, 08 Jul 2021 12:32:38 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1TCo-0005wQ-8F; Thu, 08 Jul 2021 12:32:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1TCn-0002KA-SD; Thu, 08 Jul 2021 12:32:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1TCn-0005q0-Re; Thu, 08 Jul 2021 12:32:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ucROKnicM6jyHvyxaWuGb226iart/E+N9kO6yuUEUPk=; b=p7xDN6dlL3vz/oq7XfieTesZ7Y
	yvqphDAR4XBEK72ac4bURpDzydpjsW4mrMdbdr7GEXgpQhHMgO+5h89O4bWxSe3dObsW31m8RymUi
	DIXjtNerGVtl3lZqw8jIk+tUv5EgZBqUSM68rHc2s5Ce638Bfk6mElnP8ArNZmPB+cB8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163420-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163420: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9aef0954195cc592e86846dbbe7f3c2c5603690a
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 12:32:37 +0000

flight 163420 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163420/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163327

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9aef0954195cc592e86846dbbe7f3c2c5603690a
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    2 days
Testing same since   163327  2021-07-06 12:39:04 Z    1 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  David Edmondson <david.edmondson@oracle.com>
  John Arbuckle <programmingkidx@gmail.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Thomas Huth <thuth@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 553 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:44:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:44:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153070.282787 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNm-0005mZ-A5; Thu, 08 Jul 2021 12:43:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153070.282787; Thu, 08 Jul 2021 12:43:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNm-0005mS-6v; Thu, 08 Jul 2021 12:43:58 +0000
Received: by outflank-mailman (input) for mailman id 153070;
 Thu, 08 Jul 2021 12:43:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1TNk-0005Vo-J4
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:43:56 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 279d68c0-dfea-11eb-856d-12813bfff9fa;
 Thu, 08 Jul 2021 12:43:55 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 4F8CB201BF;
 Thu,  8 Jul 2021 12:43:54 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 1286D12FF6;
 Thu,  8 Jul 2021 12:43:54 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 0PxXAwrz5mCCYAAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 12:43:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 279d68c0-dfea-11eb-856d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625748234; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=z4HBJ9j3raPc5OQynJOO5Jq31LuNuXGgUK0tD1yAAz0=;
	b=sWvKQnWc94bZ1fP4UEJt71N35uFn7oCLbc0csxkGx4o+LVmDT2pyO7HqvbXaKCwahkZKxF
	MkPJTMcVDWZxdBgJLBnDIKZ71EDBp41dd/wd5oYFGaNJXpG1ziztI6xniHN1m8IXcMSpqa
	uBLOyVv5yXoOiwRfosNF4MCI2cpnyRI=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>
Subject: [PATCH v2 3/3] xen/blkfront: don't trust the backend response data blindly
Date: Thu,  8 Jul 2021 14:43:45 +0200
Message-Id: <20210708124345.10173-4-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210708124345.10173-1-jgross@suse.com>
References: <20210708124345.10173-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Today blkfront will trust the backend to send only sane response data.
In order to avoid privilege escalations or crashes in case of malicious
backends verify the data to be within expected limits. Especially make
sure that the response always references an outstanding request.

Introduce a new state of the ring BLKIF_STATE_ERROR which will be
switched to in case an inconsistency is being detected. Recovering from
this state is possible only via removing and adding the virtual device
again (e.g. via a suspend/resume cycle).

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- use READ_ONCE() for reading the producer index
- check validity of producer index only after memory barrier (Jan Beulich)
- use virt_rmb() as barrier (Jan Beulich)
---
 drivers/block/xen-blkfront.c | 66 ++++++++++++++++++++++++++----------
 1 file changed, 49 insertions(+), 17 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 80701860870a..ecdbb0381b4c 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -80,6 +80,7 @@ enum blkif_state {
 	BLKIF_STATE_DISCONNECTED,
 	BLKIF_STATE_CONNECTED,
 	BLKIF_STATE_SUSPENDED,
+	BLKIF_STATE_ERROR,
 };
 
 struct grant {
@@ -89,6 +90,7 @@ struct grant {
 };
 
 enum blk_req_status {
+	REQ_PROCESSING,
 	REQ_WAITING,
 	REQ_DONE,
 	REQ_ERROR,
@@ -543,7 +545,7 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
 
 	id = get_id_from_freelist(rinfo);
 	rinfo->shadow[id].request = req;
-	rinfo->shadow[id].status = REQ_WAITING;
+	rinfo->shadow[id].status = REQ_PROCESSING;
 	rinfo->shadow[id].associated_id = NO_ASSOCIATED_ID;
 
 	rinfo->shadow[id].req.u.rw.id = id;
@@ -572,6 +574,7 @@ static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_inf
 
 	/* Copy the request to the ring page. */
 	*final_ring_req = *ring_req;
+	rinfo->shadow[id].status = REQ_WAITING;
 
 	return 0;
 }
@@ -847,8 +850,11 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 
 	/* Copy request(s) to the ring page. */
 	*final_ring_req = *ring_req;
-	if (unlikely(require_extra_req))
+	rinfo->shadow[id].status = REQ_WAITING;
+	if (unlikely(require_extra_req)) {
 		*final_extra_ring_req = *extra_ring_req;
+		rinfo->shadow[extra_id].status = REQ_WAITING;
+	}
 
 	if (new_persistent_gnts)
 		gnttab_free_grant_references(setup.gref_head);
@@ -1402,8 +1408,8 @@ static enum blk_req_status blkif_rsp_to_req_status(int rsp)
 static int blkif_get_final_status(enum blk_req_status s1,
 				  enum blk_req_status s2)
 {
-	BUG_ON(s1 == REQ_WAITING);
-	BUG_ON(s2 == REQ_WAITING);
+	BUG_ON(s1 < REQ_DONE);
+	BUG_ON(s2 < REQ_DONE);
 
 	if (s1 == REQ_ERROR || s2 == REQ_ERROR)
 		return BLKIF_RSP_ERROR;
@@ -1436,7 +1442,7 @@ static bool blkif_completion(unsigned long *id,
 		s->status = blkif_rsp_to_req_status(bret->status);
 
 		/* Wait the second response if not yet here. */
-		if (s2->status == REQ_WAITING)
+		if (s2->status < REQ_DONE)
 			return false;
 
 		bret->status = blkif_get_final_status(s->status,
@@ -1555,11 +1561,17 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 
 	spin_lock_irqsave(&rinfo->ring_lock, flags);
  again:
-	rp = rinfo->ring.sring->rsp_prod;
-	rmb(); /* Ensure we see queued responses up to 'rp'. */
+	rp = READ_ONCE(rinfo->ring.sring->rsp_prod);
+	virt_rmb(); /* Ensure we see queued responses up to 'rp'. */
+	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
+		pr_alert("%s: illegal number of responses %u\n",
+			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
+		goto err;
+	}
 
 	for (i = rinfo->ring.rsp_cons; i != rp; i++) {
 		unsigned long id;
+		unsigned int op;
 
 		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
 		id = bret.id;
@@ -1570,14 +1582,28 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		 * look in get_id_from_freelist.
 		 */
 		if (id >= BLK_RING_SIZE(info)) {
-			WARN(1, "%s: response to %s has incorrect id (%ld)\n",
-			     info->gd->disk_name, op_name(bret.operation), id);
-			/* We can't safely get the 'struct request' as
-			 * the id is busted. */
-			continue;
+			pr_alert("%s: response has incorrect id (%ld)\n",
+				 info->gd->disk_name, id);
+			goto err;
 		}
+		if (rinfo->shadow[id].status != REQ_WAITING) {
+			pr_alert("%s: response references no pending request\n",
+				 info->gd->disk_name);
+			goto err;
+		}
+
+		rinfo->shadow[id].status = REQ_PROCESSING;
 		req  = rinfo->shadow[id].request;
 
+		op = rinfo->shadow[id].req.operation;
+		if (op == BLKIF_OP_INDIRECT)
+			op = rinfo->shadow[id].req.u.indirect.indirect_op;
+		if (bret.operation != op) {
+			pr_alert("%s: response has wrong operation (%u instead of %u)\n",
+				 info->gd->disk_name, bret.operation, op);
+			goto err;
+		}
+
 		if (bret.operation != BLKIF_OP_DISCARD) {
 			/*
 			 * We may need to wait for an extra response if the
@@ -1602,7 +1628,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		case BLKIF_OP_DISCARD:
 			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
 				struct request_queue *rq = info->rq;
-				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
+
+				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
 					   info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 				info->feature_discard = 0;
@@ -1614,13 +1641,13 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		case BLKIF_OP_FLUSH_DISKCACHE:
 		case BLKIF_OP_WRITE_BARRIER:
 			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
-				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
+				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
 				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
 			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
 				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
-				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
+				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
 				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
@@ -1635,8 +1662,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		case BLKIF_OP_READ:
 		case BLKIF_OP_WRITE:
 			if (unlikely(bret.status != BLKIF_RSP_OKAY))
-				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
-					"request: %x\n", bret.status);
+				dev_dbg_ratelimited(&info->xbdev->dev,
+					"Bad return from blkdev data request: %x\n", bret.status);
 
 			break;
 		default:
@@ -1662,6 +1689,11 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
 
 	return IRQ_HANDLED;
+
+ err:
+	info->connected = BLKIF_STATE_ERROR;
+	pr_alert("%s disabled for further use\n", info->gd->disk_name);
+	return IRQ_HANDLED;
 }
 
 
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:44:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:44:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153071.282798 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNp-00064Y-K2; Thu, 08 Jul 2021 12:44:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153071.282798; Thu, 08 Jul 2021 12:44:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNp-00064R-Gf; Thu, 08 Jul 2021 12:44:01 +0000
Received: by outflank-mailman (input) for mailman id 153071;
 Thu, 08 Jul 2021 12:44:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1TNo-0005Vi-Gc
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:44:00 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2d8c5b08-7436-465e-b966-aadad158685b;
 Thu, 08 Jul 2021 12:43:54 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 0C3DB2198B;
 Thu,  8 Jul 2021 12:43:54 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id BC119133FE;
 Thu,  8 Jul 2021 12:43:53 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id ADi5LAnz5mCCYAAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 12:43:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2d8c5b08-7436-465e-b966-aadad158685b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625748234; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=P4npa89ZahTLG6OBPNclvRbrcVBcLwXWzLAhBZSh1SY=;
	b=kQxNjstg82kL4O4ZbGnRoUnxhb1jfiG/cNcdtcWx6GOnVEHDD/BIvDQn1QL50wL2g7eREQ
	KqL6OG17bCJJPC/EAF6ca9HUJFjNj1LV9M3DbH3D37UtCY2ggjLGBQkostZ7F+AZ7jDqdi
	6YlCyZaiFi82VevtT4x4ee0iMGO5qiQ=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Jens Axboe <axboe@kernel.dk>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v2 2/3] xen/blkfront: don't take local copy of a request from the ring page
Date: Thu,  8 Jul 2021 14:43:44 +0200
Message-Id: <20210708124345.10173-3-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210708124345.10173-1-jgross@suse.com>
References: <20210708124345.10173-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

In order to avoid a malicious backend being able to influence the local
copy of a request build the request locally first and then copy it to
the ring page instead of doing it the other way round as today.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
V2:
- init variable to avoid potential compiler warning (Jan Beulich)
---
 drivers/block/xen-blkfront.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 86356014d35e..80701860870a 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -546,7 +546,7 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
 	rinfo->shadow[id].status = REQ_WAITING;
 	rinfo->shadow[id].associated_id = NO_ASSOCIATED_ID;
 
-	(*ring_req)->u.rw.id = id;
+	rinfo->shadow[id].req.u.rw.id = id;
 
 	return id;
 }
@@ -554,11 +554,12 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
 static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_info *rinfo)
 {
 	struct blkfront_info *info = rinfo->dev_info;
-	struct blkif_request *ring_req;
+	struct blkif_request *ring_req, *final_ring_req;
 	unsigned long id;
 
 	/* Fill out a communications ring structure. */
-	id = blkif_ring_get_request(rinfo, req, &ring_req);
+	id = blkif_ring_get_request(rinfo, req, &final_ring_req);
+	ring_req = &rinfo->shadow[id].req;
 
 	ring_req->operation = BLKIF_OP_DISCARD;
 	ring_req->u.discard.nr_sectors = blk_rq_sectors(req);
@@ -569,8 +570,8 @@ static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_inf
 	else
 		ring_req->u.discard.flag = 0;
 
-	/* Keep a private copy so we can reissue requests when recovering. */
-	rinfo->shadow[id].req = *ring_req;
+	/* Copy the request to the ring page. */
+	*final_ring_req = *ring_req;
 
 	return 0;
 }
@@ -703,6 +704,7 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 {
 	struct blkfront_info *info = rinfo->dev_info;
 	struct blkif_request *ring_req, *extra_ring_req = NULL;
+	struct blkif_request *final_ring_req, *final_extra_ring_req = NULL;
 	unsigned long id, extra_id = NO_ASSOCIATED_ID;
 	bool require_extra_req = false;
 	int i;
@@ -747,7 +749,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 	}
 
 	/* Fill out a communications ring structure. */
-	id = blkif_ring_get_request(rinfo, req, &ring_req);
+	id = blkif_ring_get_request(rinfo, req, &final_ring_req);
+	ring_req = &rinfo->shadow[id].req;
 
 	num_sg = blk_rq_map_sg(req->q, req, rinfo->shadow[id].sg);
 	num_grant = 0;
@@ -798,7 +801,9 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 		ring_req->u.rw.nr_segments = num_grant;
 		if (unlikely(require_extra_req)) {
 			extra_id = blkif_ring_get_request(rinfo, req,
-							  &extra_ring_req);
+							  &final_extra_ring_req);
+			extra_ring_req = &rinfo->shadow[extra_id].req;
+
 			/*
 			 * Only the first request contains the scatter-gather
 			 * list.
@@ -840,10 +845,10 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 	if (setup.segments)
 		kunmap_atomic(setup.segments);
 
-	/* Keep a private copy so we can reissue requests when recovering. */
-	rinfo->shadow[id].req = *ring_req;
+	/* Copy request(s) to the ring page. */
+	*final_ring_req = *ring_req;
 	if (unlikely(require_extra_req))
-		rinfo->shadow[extra_id].req = *extra_ring_req;
+		*final_extra_ring_req = *extra_ring_req;
 
 	if (new_persistent_gnts)
 		gnttab_free_grant_references(setup.gref_head);
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:44:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:44:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153069.282776 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNl-0005W1-2M; Thu, 08 Jul 2021 12:43:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153069.282776; Thu, 08 Jul 2021 12:43:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNk-0005Vu-VX; Thu, 08 Jul 2021 12:43:56 +0000
Received: by outflank-mailman (input) for mailman id 153069;
 Thu, 08 Jul 2021 12:43:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1TNj-0005Vi-Hv
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:43:55 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 288ec912-d0ef-41c8-a47a-d8fe9ac8a46e;
 Thu, 08 Jul 2021 12:43:54 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 6F37421910;
 Thu,  8 Jul 2021 12:43:53 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 2FEE912FF6;
 Thu,  8 Jul 2021 12:43:53 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id QiFxCgnz5mCCYAAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 12:43:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 288ec912-d0ef-41c8-a47a-d8fe9ac8a46e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625748233; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=FPMlgO+Zfo14oN0BcwYJE0QxFqpC+nPj8IpTkd710H4=;
	b=LtDxVYxw8NSplGmzVQW3iV1asSAQcG2u79ScBvLOfTA9AgcT0W5CJNKY8AWeRfznZYMjT6
	SJ93ktysNftCsUW3OTocLzu2Uh1Of6+hkDdUxPfzvMSSZ85RwzA6H7WwToYc19I52HWrN1
	BkIRL0rzWzk+5sk2hSRdeD7Td/wtZzk=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>
Subject: [PATCH v2 0/3] xen: harden blkfront against malicious backends
Date: Thu,  8 Jul 2021 14:43:42 +0200
Message-Id: <20210708124345.10173-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Xen backends of para-virtualized devices can live in dom0 kernel, dom0
user land, or in a driver domain. This means that a backend might
reside in a less trusted environment than the Xen core components, so
a backend should not be able to do harm to a Xen guest (it can still
mess up I/O data, but it shouldn't be able to e.g. crash a guest by
other means or cause a privilege escalation in the guest).

Unfortunately blkfront in the Linux kernel is fully trusting its
backend. This series is fixing blkfront in this regard.

It was discussed to handle this as a security problem, but the topic
was discussed in public before, so it isn't a real secret.

Changes in V2:
- put blkfront patches into own series
- some minor comments addressed

Juergen Gross (3):
  xen/blkfront: read response from backend only once
  xen/blkfront: don't take local copy of a request from the ring page
  xen/blkfront: don't trust the backend response data blindly

 drivers/block/xen-blkfront.c | 122 +++++++++++++++++++++++------------
 1 file changed, 80 insertions(+), 42 deletions(-)

-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:44:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:44:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153072.282809 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNu-0006R1-Vn; Thu, 08 Jul 2021 12:44:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153072.282809; Thu, 08 Jul 2021 12:44:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TNu-0006Qq-RH; Thu, 08 Jul 2021 12:44:06 +0000
Received: by outflank-mailman (input) for mailman id 153072;
 Thu, 08 Jul 2021 12:44:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1TNt-0005Vi-Gv
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:44:05 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42a12c1b-72d6-410e-91d3-2d6cb7fc8d93;
 Thu, 08 Jul 2021 12:43:54 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id B74A62196E;
 Thu,  8 Jul 2021 12:43:53 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 74C2912FF6;
 Thu,  8 Jul 2021 12:43:53 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id EARJGwnz5mCCYAAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 12:43:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 42a12c1b-72d6-410e-91d3-2d6cb7fc8d93
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625748233; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=6XFRHPnaBepuoc+g0wkn7qafVkVXfKovIiQKKuCigY0=;
	b=BXFPPPGLMorJwQJ/GBAcYquuPoBZv0JZuWqXHV8Uakpm4PYoIFYsrVZaXWXbkIe5qsl0d2
	moJj/mx6I15y4Zg+tYjoRLtiw/NSzyzKZN7QTWu0Wv936j8y3qEQ+YbeEsxVJyIy7y60m9
	3wbGtStlqlhO9oeX43eCEorvroh4ff4=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v2 1/3] xen/blkfront: read response from backend only once
Date: Thu,  8 Jul 2021 14:43:43 +0200
Message-Id: <20210708124345.10173-2-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210708124345.10173-1-jgross@suse.com>
References: <20210708124345.10173-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

In order to avoid problems in case the backend is modifying a response
on the ring page while the frontend has already seen it, just read the
response into a local buffer in one go and then operate on that buffer
only.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
 drivers/block/xen-blkfront.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8d49f8fa98bb..86356014d35e 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1539,7 +1539,7 @@ static bool blkif_completion(unsigned long *id,
 static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 {
 	struct request *req;
-	struct blkif_response *bret;
+	struct blkif_response bret;
 	RING_IDX i, rp;
 	unsigned long flags;
 	struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id;
@@ -1556,8 +1556,9 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 	for (i = rinfo->ring.rsp_cons; i != rp; i++) {
 		unsigned long id;
 
-		bret = RING_GET_RESPONSE(&rinfo->ring, i);
-		id   = bret->id;
+		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
+		id = bret.id;
+
 		/*
 		 * The backend has messed up and given us an id that we would
 		 * never have given to it (we stamp it up to BLK_RING_SIZE -
@@ -1565,39 +1566,39 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		 */
 		if (id >= BLK_RING_SIZE(info)) {
 			WARN(1, "%s: response to %s has incorrect id (%ld)\n",
-			     info->gd->disk_name, op_name(bret->operation), id);
+			     info->gd->disk_name, op_name(bret.operation), id);
 			/* We can't safely get the 'struct request' as
 			 * the id is busted. */
 			continue;
 		}
 		req  = rinfo->shadow[id].request;
 
-		if (bret->operation != BLKIF_OP_DISCARD) {
+		if (bret.operation != BLKIF_OP_DISCARD) {
 			/*
 			 * We may need to wait for an extra response if the
 			 * I/O request is split in 2
 			 */
-			if (!blkif_completion(&id, rinfo, bret))
+			if (!blkif_completion(&id, rinfo, &bret))
 				continue;
 		}
 
 		if (add_id_to_freelist(rinfo, id)) {
 			WARN(1, "%s: response to %s (id %ld) couldn't be recycled!\n",
-			     info->gd->disk_name, op_name(bret->operation), id);
+			     info->gd->disk_name, op_name(bret.operation), id);
 			continue;
 		}
 
-		if (bret->status == BLKIF_RSP_OKAY)
+		if (bret.status == BLKIF_RSP_OKAY)
 			blkif_req(req)->error = BLK_STS_OK;
 		else
 			blkif_req(req)->error = BLK_STS_IOERR;
 
-		switch (bret->operation) {
+		switch (bret.operation) {
 		case BLKIF_OP_DISCARD:
-			if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) {
+			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
 				struct request_queue *rq = info->rq;
 				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
-					   info->gd->disk_name, op_name(bret->operation));
+					   info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 				info->feature_discard = 0;
 				info->feature_secdiscard = 0;
@@ -1607,15 +1608,15 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 			break;
 		case BLKIF_OP_FLUSH_DISKCACHE:
 		case BLKIF_OP_WRITE_BARRIER:
-			if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) {
+			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
 				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
-				       info->gd->disk_name, op_name(bret->operation));
+				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
-			if (unlikely(bret->status == BLKIF_RSP_ERROR &&
+			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
 				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
 				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
-				       info->gd->disk_name, op_name(bret->operation));
+				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
 			if (unlikely(blkif_req(req)->error)) {
@@ -1628,9 +1629,9 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 			fallthrough;
 		case BLKIF_OP_READ:
 		case BLKIF_OP_WRITE:
-			if (unlikely(bret->status != BLKIF_RSP_OKAY))
+			if (unlikely(bret.status != BLKIF_RSP_OKAY))
 				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
-					"request: %x\n", bret->status);
+					"request: %x\n", bret.status);
 
 			break;
 		default:
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:44:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:44:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153067.282820 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TOJ-0007fX-AU; Thu, 08 Jul 2021 12:44:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153067.282820; Thu, 08 Jul 2021 12:44:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TOJ-0007fQ-6z; Thu, 08 Jul 2021 12:44:31 +0000
Received: by outflank-mailman (input) for mailman id 153067;
 Thu, 08 Jul 2021 12:41:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=76hI=MA=linaro.org=ulf.hansson@srs-us1.protection.inumbo.net>)
 id 1m1TLY-0005Sb-Qg
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:41:40 +0000
Received: from mail-vs1-xe33.google.com (unknown [2607:f8b0:4864:20::e33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 323957cb-11fa-4269-8f1c-6e4598220845;
 Thu, 08 Jul 2021 12:41:39 +0000 (UTC)
Received: by mail-vs1-xe33.google.com with SMTP id m12so3487674vst.8
 for <xen-devel@lists.xenproject.org>; Thu, 08 Jul 2021 05:41:39 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 323957cb-11fa-4269-8f1c-6e4598220845
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=linaro.org; s=google;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=hP9H7HVTE7TFrRNTl1vyqWVVeZcuqXBCZg0bGqclL/A=;
        b=VetX2Cfr8bdRNaZiWLEm04u6bqZW3l6DI4CAN74JIY7k4z1gUX2WPAhVDnzm350lf2
         zN9Z12JQmbzlk/BWNUXvjVAbpB66ZXuvK3SPb444QQ5diXQOytBY51L2/oTaoUD9VeXU
         uFurAnxdtCpnicZBLB0yD9ojUwv6W/qtm1PvBS9AFUFJNPr3tKxeC4wQWDvFkNeWRoRf
         7SjXn45LyDiaoeLgbbyRwVPp/zZWqO3qYud0+Xn/514eUefuiFS0gjROioJ7tCP2C/ZN
         ZUSLS7lmtDXFsaxdqMahs7f08oqXmzo9A5DfBGmAWg3PByPV9/9CFdzFbNZ8GtPMsFJE
         z42g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=hP9H7HVTE7TFrRNTl1vyqWVVeZcuqXBCZg0bGqclL/A=;
        b=BKQnmr4ba+nfvK+dYbonuLCmZeV7tAbHnNTdVIrGzhngV9/Ul39DXM7UGd9UZNRpDm
         r7a97r1AmTTg6AQdzaWaxi2Gqu597gszZRJhc7DNs1kXdnIid8JNqN4G1/g3n9MEz/by
         kYmK1+M+RXWiGyvapWjoQmpsOGtiBkbxF2BY3w9M1Y8zDNTrg26n6mATZrExqAsqJdOT
         M6GoH4fnkqHSGvIeo5wYMwgdvOGC/PZniC4762higRfgMIiMDDFd/rV/I5hzoqQhZoRn
         5KC3ivXA7Tmo/PRDsY+xqqrx09JfpB7fYjtPdYkVKpeiVgyNB+U3HLivwDD4tBzwqmYD
         DOZQ==
X-Gm-Message-State: AOAM5321k/+ATPf48ri4cgrSQ8gAbnLbHHVYaZFb5PK22zhu8upswA3T
	BIp6FRyIJJbahy2agirbKp77MJo4hcIicxW6Gc96hg==
X-Google-Smtp-Source: ABdhPJywz4fR2V+V+6/E9OWxEVi9/b58VFa4IZ2LlJTPpT0B9SRAdSG9PM7u1rPMHG2ZlSabjmUDzfVjnsqdUEe3bFI=
X-Received: by 2002:a67:8783:: with SMTP id j125mr27888650vsd.42.1625748098931;
 Thu, 08 Jul 2021 05:41:38 -0700 (PDT)
MIME-Version: 1.0
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de> <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
From: Ulf Hansson <ulf.hansson@linaro.org>
Date: Thu, 8 Jul 2021 14:41:02 +0200
Message-ID: <CAPDyKFo0zuooWAkuR=BcsvcJ2pmSrcEoBhuC8+ne18GQphyPHA@mail.gmail.com>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sascha Hauer <kernel@pengutronix.de>, 
	Cornelia Huck <cohuck@redhat.com>, 
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Russell King <linux@armlinux.org.uk>, 
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Helge Deller <deller@gmx.de>, 
	Geoff Levand <geoff@infradead.org>, Michael Ellerman <mpe@ellerman.id.au>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Alison Schofield <alison.schofield@intel.com>, 
	Vishal Verma <vishal.l.verma@intel.com>, Ira Weiny <ira.weiny@intel.com>, 
	Ben Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>, 
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>, 
	Stefan Richter <stefanr@s5r6.in-berlin.de>, Sudeep Holla <sudeep.holla@arm.com>, 
	Cristian Marussi <cristian.marussi@arm.com>, Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>, 
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>, 
	Benjamin Tissoires <benjamin.tissoires@redhat.com>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Stephen Hemminger <sthemmin@microsoft.com>, Wei Liu <wei.liu@kernel.org>, 
	Dexuan Cui <decui@microsoft.com>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, Wolfram Sang <wsa@kernel.org>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Mauro Carvalho Chehab <mchehab@kernel.org>, 
	Maxim Levitsky <maximlevitsky@gmail.com>, Alex Dubov <oakad@yahoo.com>, 
	Lee Jones <lee.jones@linaro.org>, Tomas Winkler <tomas.winkler@intel.com>, 
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>, "David S. Miller" <davem@davemloft.net>, 
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>, 
	Kishon Vijay Abraham I <kishon@ti.com>, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, 
	=?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	Bjorn Helgaas <bhelgaas@google.com>, Dominik Brodowski <linux@dominikbrodowski.net>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Hans de Goede <hdegoede@redhat.com>, 
	Mark Gross <mgross@linux.intel.com>, Matt Porter <mporter@kernel.crashing.org>, 
	Alexandre Bounine <alex.bou9@gmail.com>, Ohad Ben-Cohen <ohad@wizery.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Mathieu Poirier <mathieu.poirier@linaro.org>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Thorsten Scherer <t.scherer@eckelmann.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Andy Gross <agross@kernel.org>, 
	Mark Brown <broonie@kernel.org>, Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>, 
	Sven Van Asbroeck <TheSven73@gmail.com>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, 
	Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, 
	Mika Westerberg <mika.westerberg@linux.intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, 
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>, 
	Heikki Krogerus <heikki.krogerus@linux.intel.com>, "Michael S. Tsirkin" <mst@redhat.com>, 
	Jason Wang <jasowang@redhat.com>, Kirti Wankhede <kwankhede@nvidia.com>, 
	Alex Williamson <alex.williamson@redhat.com>, Martyn Welch <martyn@welchs.me.uk>, 
	Manohar Vanga <manohar.vanga@gmail.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Juergen Gross <jgross@suse.com>, Stefano Stabellini <sstabellini@kernel.org>, 
	Johannes Berg <johannes@sipsolutions.net>, Jaroslav Kysela <perex@perex.cz>, 
	Takashi Iwai <tiwai@suse.com>, Marc Zyngier <maz@kernel.org>, Tyrel Datwyler <tyreld@linux.ibm.com>, 
	Vladimir Zapolskiy <vz@mleia.com>, Samuel Holland <samuel@sholland.org>, 
	Qinglang Miao <miaoqinglang@huawei.com>, Alexey Kardashevskiy <aik@ozlabs.ru>, 
	Kai-Heng Feng <kai.heng.feng@canonical.com>, Joey Pabalan <jpabalanb@gmail.com>, 
	=?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Adrian Hunter <adrian.hunter@intel.com>, Frank Li <lznuaa@gmail.com>, 
	Mike Christie <michael.christie@oracle.com>, Bodo Stroesser <bostroesser@gmail.com>, 
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>, SeongJae Park <sjpark@amazon.de>, 
	Julien Grall <jgrall@amazon.com>, linux-arm-kernel@lists.infradead.org, 
	linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, 
	linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, 
	linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev, 
	linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, dmaengine@vger.kernel.org, 
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org, 
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org, 
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org, 
	industrypack-devel@lists.sourceforge.net, linux-media@vger.kernel.org, 
	linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-ntb@googlegroups.com, 
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org, 
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org, 
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org, 
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, 
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, 
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, 
	xen-devel@lists.xenproject.org, Russell King <rmk+kernel@armlinux.org.uk>, 
	Johannes Thumshirn <jth@kernel.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, 6 Jul 2021 at 17:53, Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
>
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Am=
ba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Roh=C3=A1r <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drive=
rs/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and=
 typec)
> Acked-by: Samuel Iglesias Gons=C3=A1lvez <siglesias@igalia.com> (For ipac=
k)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>

Acked-by: Ulf Hansson <ulf.hansson@linaro.org> # For MMC

[...]

Kind regards
Uffe


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:52:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:52:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153097.282830 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TVc-0000zf-BX; Thu, 08 Jul 2021 12:52:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153097.282830; Thu, 08 Jul 2021 12:52:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TVc-0000zY-8U; Thu, 08 Jul 2021 12:52:04 +0000
Received: by outflank-mailman (input) for mailman id 153097;
 Thu, 08 Jul 2021 12:52:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1TVb-0000zS-4G
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:52:03 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ce103491-a6d6-4733-a750-cd8e4b5f940d;
 Thu, 08 Jul 2021 12:52:01 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ce103491-a6d6-4733-a750-cd8e4b5f940d
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625748721;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=6I+al9BNJnxC2CU82cVxmyQEnKESTV/qboQ+l8LAysM=;
  b=ZU78NVFcWQ0gRCR2FjURU3aNUXW8Cpka7Hl8qVl0fmLF++hrzFExyneH
   HDsGAEq8khIGlfHk8pyJi1puekpZl4fNC+pOCQoibKiuW/wlaY21jGOUr
   qms0B7/HObf2FDl2oSa1oM+GrqxohFcG0QkFTf+UsrDxSuguQ1EaylCZL
   k=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: zcUNPUOMT7VNHbfjFoyji97OnY5tQW7p3ezGXVPSfpLKYUOyYhQuOtZZdxz0KFJ8OpicrH4cmy
 25lBLkL95TZ4BdBt9nM+v3JJ/xrdAIXUs8rnw6CTPLYZY00825jRwOBgn+pNRocHaqvxbJL+SW
 wbVPDh54d0Ftbf1qp8RQ/BUjnOLV2ZUMiKRD55++5Fcsi9zOc6qJ3/gtB4CsV5pAcs5mMciUF2
 rCKgtV5knrLsl7FfTl0WtqildpQvOR9TgEo5DawVqAh8Yff4w8V4NaIezeUh6GnXuFEOhNa/9N
 E3M=
X-SBRS: 5.1
X-MesageID: 49470813
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:CNAKfKGOg1OUq1ScpLqFBJHXdLJyesId70hD6qkvc3Nom52j+/
 xGws536faVslcssHFJo6HkBEDyewKiyXcT2/hsAV7CZniahILMFu9fBOTZskXd8kHFh4lgPO
 JbAtJD4b7LfChHZKTBkXCF+r8bqbHtmsDY5pat854ud3APV0gJ1XYJNu/xKDwReOApP+taKH
 PR3Ls9m9L2Ek5nEPhTS0N1E9TrlpnurtbLcBQGDxko5E2nii6p0qfzF1y90g0FWz1C7L8++S
 yd+jaJqJmLgrWe8FvxxmXT55NZlJ/IzcZCPtWFjowwJi/3ggilSYx9U/mpvSwzosuo9FE2+e
 O87CsIDoBW0Tf8b2u1qRzi103LyzA18ULvzleenD/KvdH5bChSMbsDuatpNj/ir2YwttB116
 xGm0iDsYBMMB/GlCPho/DVShBRkFauq3ZKq59Ss5Vma/paVFZtl/1awKsMe61wWx4SqbpXUd
 WGNfuspsq/KjihHjbkVgAF+q3eYpwxdi32CXTq9PbligS/MRhCvj0lLfck7wM9HaQGOtF5Dt
 T/Q9FVfY51P7grhIJGda08qJiMeyHwqSylChPaHb2gLtBeB07w
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="49470813"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Qx14CpCpkIHitHCaWqlZ2GorA4zwrE5SzGUViVb5NKL174c2HEYc9N6uD20FeztSFwu2VC+/NnudjVGF5XHN4U5e8tyXcdz93k3rRT/Rf/pAYN2l716vMwo9Lxn7hVZJfIMVXqN0eOtr7n/92GYwtUOiViVwbYi8PVnzhPspe5lDsjrvPcf11j6vhczh6E5kkY6pLtK4uXtyKQX6Oe5a3IxSVPDG9/s1pCs39XXHeFqAs5llTKBj01+jWVfbMp7WpYoBknyNLjKaW9mzPUhBwN/G9zOWkDoKsMqGguovmIR032m5iq9HRx/okNwUs0K0spDWnDiwLgIumM3KGnlBAg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6I+al9BNJnxC2CU82cVxmyQEnKESTV/qboQ+l8LAysM=;
 b=iqXl/2y7QImThwystxi7EhchNdmaa/baCep3FZJ3gnQNEjpjA1Qd+sHyzNcDlAmvm7GV1j+AuWthHeBwK075Jcgkt4aO1yyWx25J1Q3CAJaX4ks1ytJmH9IRyzeILqiTD97s9zW390rAoyh2w/8PppC9iokfxyW/SOhR07PQPZL90x6+Lyl1LvBGDbWlgEOabPXIYjjR3MrQSA/dR/mi0O0Q4WYAeVD2Wg6u4bqByhR8Ga9I17MlOsrzG/0ghERoeqNVSQ8X/S4x2/tWyFl2Apb2Tz//fYIdH9JYwffomU4+aciT4z3JQbNygE7ZbmO3goxa3jvLRrvTkFxaQTt8qA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6I+al9BNJnxC2CU82cVxmyQEnKESTV/qboQ+l8LAysM=;
 b=GWtkjjP+8dMyDJ3MKnJZogm3TyirVSjNh6O72zVvw9Osx0M+VwBRlTpQEojj7MVew8ROhUYrmBjI3Bi7KI040PbsnKipf82RqhmS3qpRNGCb6374be73UgG15ZqLShD3BtnYfOv8W9xSCDFsCeKmzXMjWpZJ4r1qsYqLpsPjCoE=
To: Olaf Hering <olaf@aepfle.de>
CC: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
 <20210707164001.894805-3-anthony.perard@citrix.com>
 <e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
 <20210707223551.5462c74e.olaf@aepfle.de>
 <375823a3-8b49-7aab-ca2a-af219234b5e4@citrix.com>
 <20210708023224.6c05ff5b.olaf@aepfle.de>
 <20210708142309.6d093d7e.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <8878bdd2-fd3e-92c0-624f-cb0ee9deb280@citrix.com>
Date: Thu, 8 Jul 2021 13:51:49 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708142309.6d093d7e.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0327.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a4::27) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 18c82440-ce09-414c-6927-08d9420f2aa2
X-MS-TrafficTypeDiagnostic: BY5PR03MB5348:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BY5PR03MB5348C66E1D21112013150F47BA199@BY5PR03MB5348.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: gfWw8pqGiLUuc8cJyx4PtvUotLJYGoQKrHgOdeiFi80q91uUlgK2AFFAOsd6ZXXIGWHjWhFFIw3J2kUodzhdg3C4ZH5r5xbmKt28jQ8lhQexUmZLsasq+4rpmxuY4L+nGUKnUE4rYvXAJ1y2kJ6RDaeCh7Dt4ulOtxFaNJbIFZyymw81EXDi78tuufS6SJ2UGaM3MygyIrj3WDHINH1K7P7xntTAwQxZaqbv4+Ow189R7pQB0kSSD7cVml2wjOU44sw9atZxATNB2YOPL8jxuW7eNCQsaYw2KUuzNukcKZwu0ISzM4wAXs5jzXYMUeeL28LjrLJPjJ7yEq0mC8rblpBzUmLl9tltpRV5IHJg3geDOZXIpks4Ew2dNbCKX27dMHpdKulGEDQEjwU7eaBy1ez7Ty0EVJKFGUL7iriYDhP0YzlkEXMuCZDzNJ1PYoKudiFI+EPv8bNbzIvgLfNnqQTzDAJc0ITCNBn79ZOF6Z2PP/7+QQEmPW5EtmZiosKWYh+u3d+pf40qVa18bUJ0BrvnpjT6cUF0GaBVp0zRELo3xUu3r+5IL9bs2CG5AOOD/KNEbaGmI3xEt2vj0h9g7C4987dL8lfGL59AHBYjlie2jxqBqk+YV/5WhbSVNzVY3Wi3SqNGo70G1PudQJOURQlxcOcraD3FQ3RooLyawd6EQeXRkJeeLOXF9DlVEHcHSQ0nRXRdkxGNT94zyLoYOlkOSXc/uLfZ40fXqLzsYmQyWhIYBadC4Xbv4avVbWwMc6v6g9d5sG0NMMuuXijgDH5UpKAPJufjztVdmScMf6kDfelaWnDtiBPZnCqzl2HO
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(366004)(136003)(39860400002)(376002)(186003)(6666004)(8936002)(8676002)(26005)(478600001)(86362001)(36756003)(54906003)(38100700002)(6916009)(53546011)(956004)(2616005)(5660300002)(4326008)(16576012)(316002)(83380400001)(66946007)(2906002)(66476007)(66556008)(31696002)(6486002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?4NZJff+oZs3fGgw0ecyx+Z3Emf4BE3qg6qvXARvGUPLPD857VENtGbZg?=
 =?Windows-1252?Q?u1iEMSghiNYiQ7F3wHNYhjYZC4CFXbol8l7jHzZUg9JZoHOrYzgAWvGt?=
 =?Windows-1252?Q?9/yuqAwuQPB96s1BbvFo/WmqKCqG03MZhmyAO19dN74BR/K8lZH0qA1I?=
 =?Windows-1252?Q?VKBljGIg6cKr1+phv2JzWtxDo4HKKWa1KsC7oV3kba1zvCGX9Bvx/hA+?=
 =?Windows-1252?Q?rbMse3lPjMlzy3iVXN47vcS6Nchj//L9g/++BC7NqhGP7T9id7ZNt8rN?=
 =?Windows-1252?Q?/nvIvfB2u6LsCkaa6YxcSrGhbU93dG5nocbvrtxHXPVBWOjoyuajBi6+?=
 =?Windows-1252?Q?eA13WNcpS5oN7Xawn4/UnKvu6lmiLnt+AFzkadDx1mfWYGfaaBPY6f4q?=
 =?Windows-1252?Q?4u4ByPYiu6X+t6E1mqJttuSSzKhGMHE7bKXM5y3/KnIWyDHZXH3muv7R?=
 =?Windows-1252?Q?RpITH4ZI7SvtIdElXZSc4z5HkBwZu//fzQdwlWrrYe7YNhDfNYZM+e41?=
 =?Windows-1252?Q?07ExS9exkTC0b9lssxGe8u9odz4EGqYcLB4dQTROmX0Bz6ruNe5k5twn?=
 =?Windows-1252?Q?cCvZcMakVlsGeCEFdub5w/Grtixqnk8oKU6nW+819EQVcjWWsFl6xrch?=
 =?Windows-1252?Q?8h6zV0pT/ukp7CRHcohjY/7IBqtUOwqWZwkPVVkFrv0IW8gM8SFUUN8A?=
 =?Windows-1252?Q?cCQ3JPu7kCkZ9yhdBQSXYB1wrp4IPBy9ymX3BVmGRthnVv2fJbsoZvlk?=
 =?Windows-1252?Q?bQh6lgQnUWxGA6dNtXiurXm8npFuAJksPWKO8cV7a8rck412fB7L7R0X?=
 =?Windows-1252?Q?IPJDkvbFFUQKx0VyoYSqTY/dtbTKoODLKOIMp9shGOxANsLJO7XTK6/2?=
 =?Windows-1252?Q?Nllj22YS8hIrrQpu0+MXIlY4AbVoYUpffGyp7sJZLYW6BjnGDIt68DEQ?=
 =?Windows-1252?Q?qJWlU1izfQWn16PzccmfbcDvoFzxzI4KlY6U7DH/2gNdonCBPiLj9c3T?=
 =?Windows-1252?Q?BNmSIlhitZxuRzXjxcgmeAsr1fbRN8OwbtDLQqzF+eaTd8STHDW194ra?=
 =?Windows-1252?Q?baVMqrTqQpJrSUSEbfwHPCAoVLorlWW0o0XOAiYO4KOM/Jp2JKgzlnao?=
 =?Windows-1252?Q?kjIeQvqEd1NHjNoYI9aoOMSJbpUW6o8KT8OWtWOOmBLietmpXamXf8Sx?=
 =?Windows-1252?Q?4+loAkcdOuyVSZMVuPBThvHTpbmX1zGmCXaeb/n/bFGUn/svdmNRGc5Z?=
 =?Windows-1252?Q?4b8utmnHJ7Niw+/qMdwzEy/f0vM4IHFxLbuyV4W6Ufict5w3KqDEq+cJ?=
 =?Windows-1252?Q?yyNqF7m2PxWFEpu8R1wCi4OvJ7Qm1WIJA3eMMY9I6zvA5MGEtkc+bO0H?=
 =?Windows-1252?Q?rY6BjwcldpDj7xqx8pPxagDyhN4EAY0na1WI5DHO6RRlh50ZFI+qBDfq?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 18c82440-ce09-414c-6927-08d9420f2aa2
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 12:51:55.8124
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: wWyFiflE7+Ui5nGjYDav+4kNtV5DEb2UO+ZmpZeH9X/xMiKctFuzfM0TF/S2vvNvohfY57k3APzaCqBvrykyMw22YRTKEMxbSVc3L8sfqSQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5348
X-OriginatorOrg: citrix.com

On 08/07/2021 13:23, Olaf Hering wrote:
> Am Thu, 8 Jul 2021 02:32:24 +0200
> schrieb Olaf Hering <olaf@aepfle.de>:
>
>> At least for Tumbleweed it is useful information.
> CPE_NAME=3D"cpe:/o:opensuse:tumbleweed:20190730"
>
> Two years old for a rolling release.
>
> Is there any documentation how to refresh the used containers? I think fo=
r Tumbleweed this should be done every other week.

Automatically rebuilding the containers is still a task on the CI
working group's todo list.

That said, the tumbleweed containers were rebuilt far more recently than
that, so something is wonky...


In a xen tree, see automation/build/Makefile for details, but tl;dr to
rebuild:

$ make -C automation/build/ tumbleweed

and to push:

$ docker login registry.gitlab.com/xen-project/xen
$ make -C automation/build/ tumbleweed PUSH=3D1

Bear in mind that the final line will update the live CI system.=A0 What I
normally do to test new containers is to give it a test suffix, push to
the live system, and push a branch to xen.git with the container names
edited in automation/gitlab-ci/*.yaml.

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 12:53:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 12:53:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153103.282842 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TX2-0001bu-N0; Thu, 08 Jul 2021 12:53:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153103.282842; Thu, 08 Jul 2021 12:53:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TX2-0001bn-Jm; Thu, 08 Jul 2021 12:53:32 +0000
Received: by outflank-mailman (input) for mailman id 153103;
 Thu, 08 Jul 2021 12:53:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1TX1-0001bf-Tg
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 12:53:31 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7ea6d7e0-dfeb-11eb-856d-12813bfff9fa;
 Thu, 08 Jul 2021 12:53:30 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2058.outbound.protection.outlook.com [104.47.12.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-26-rVdwFxZoNvepsIM_FrX4yQ-1; Thu, 08 Jul 2021 14:53:28 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7149.eurprd04.prod.outlook.com (2603:10a6:800:12e::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Thu, 8 Jul
 2021 12:53:26 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 12:53:26 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0058.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:55::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4287.26 via Frontend Transport; Thu, 8 Jul 2021 12:53:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7ea6d7e0-dfeb-11eb-856d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625748809;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=ckRA/k8NtXCisAyIk+Nh4vI6YTPAVVdhC7LXo6uhO2Q=;
	b=APEx96JQ8roB8HCDxUzGhnAnJUyeLZuLr/fy7AnJyRTNt9inKXhyOd5y7Rw8IxmHoiYx6P
	GRx0IRypqZHqjrdNtXOT8+6JArWzo2Pfjjcdl3a5DduIBWyKWS2iNOeNjrssEtuABvj/73
	C8OFd3P+TQIb/9ZKIAYYWQhRkR1tQ1w=
X-MC-Unique: rVdwFxZoNvepsIM_FrX4yQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AoOCVQgyF9kz9DOStTsaf9lpBBBjGkX3gv0JA+YcIJP1g0j6yaf01t0kFxr6caJwYVSfo/gJ9+VAIeTNZG2LmVmI5GqQ/amwKibJfFCNbUPv/fpv9kx7qK2gH//GithEHtlONU9MEt1OCTUg1lulmjSrsXODfP/rlCPCDZ4hw77vCEBg5uHAujKfDVxDu6BGv/pOQniphzb1vJk+UoXxtHkXxD9Gx1/1FritqhgDDjBJHHkAs7zwAfupweN8s0dMruIfnpohO5o4HS4xhxq9Q5b+pMCkJPCap/CUFiHV8LVGG0JsudPf/0MtoruIRw6rxGLWh4hOCVOpF+A0c0wu2A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=91Vc3yL3Dj95o8w0qk28ld+UBjCT9m9oRccVquHOXtI=;
 b=Bujyn0LC+xIOegKRJRLUcbqSFVG2xG896eEc+quI6fGIT07F8zYrDn2wEgTkPIDN5qOSClvzcZqupgL0hM2HnPfeNRBiEUMiZOuxGC+a6SGHfWTyDub/uFf/6HobsCpk7qozzgGyEiEIP6WZNFtJvVPsFnPz9j4MsNQskoEG4XRU3JAE4cwMXAeCSuGKjMm9gXeqhaxNGfp7Z4lja4Rkvk4a8u/tS6ArTfyiWUZYmYrn/IjC3BECwhohyxQD1/OB9zmNF5tQ375Cv5J+ZAqZzHpJkUoJlZw+IKk2+tDOxd+D7HYdERCKoZHf8Esvx41coktgPUJgHpjLgW6wbnCV/Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] x86/PV: address odd UB in I/O emulation
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Franklin Shen <2284696125@qq.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <b9bbc584-db3c-0b03-0314-3dd907f645bc@suse.com>
 <30186860-de22-3e71-bdb1-52f42b0394f5@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <268610e8-a974-a9a7-8a53-04de8a2cb751@suse.com>
Date: Thu, 8 Jul 2021 14:53:24 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <30186860-de22-3e71-bdb1-52f42b0394f5@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: PR3P191CA0058.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:55::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a2bdbd90-ff03-4f39-4a3a-08d9420f608b
X-MS-TrafficTypeDiagnostic: VI1PR04MB7149:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71498666A870E17AE558266FB3199@VI1PR04MB7149.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Z25MFZc6HE4PLY9b7bP6Dqa4TRBpq7jUMsQFnDyEnaSqth4a01HpsOuR+pc6IxoOAOfvqtPvX+j2TUh5fzhJKtQypDPtSp5qe/Ewd/Z7B6zq7TLwZMT3XRuztwt3vppYAcuNlaF+BtORAl6/cOURpoWwWkI6pD6wDDpsFT9Kz5FFb3RJ/e/MU9/uzX48XILra/LdOdvFQVuFKrHfzwc1wcZKkIGNRM6F2evxFMY8sDk9jVmQrugmH6fMhnknEyzyKn1Vmzsuh9o3iL5IHihg/iumh7tmUnZv+wcth9gqC1KqX3Ahcjofpch948+SxvLR6lYAXlWGyTKJxPF+w0smxAhfGnJcYRpeWv7WPK46hSYZGXDAK1188XGv89RW0PENliPOYeAP1NTFXI8MZBzXEHVCVtcq22xOW3dpeQ7sqCyI5GDpWZ3CI7UbyfzB70mAfY2w2ux6OjFHyovMH6+01F4vaPe1IZX38X56xXfzzsp1c/qAx/jcn2ADRCWR7rALpxWvETpPGxmmCkPyV6jq8U8Q8FZCMm58JSQm4hdRUE3tsbP8WdyDam4a7RDfod+rc1yTbAw3tYUlwPV64nsjOYwHUzvmGBFhm83d1XBx2vf0lzbdpSh1A5GE5/FF6TiIUTTjJt5marUdVRfmwoQe+nIHU9oJz1Qzn5S1uPBMCm2EJwXbjbrR8vLojLqnz1PWBhrEvieN0Xtute8ZeeHOjpTGWXqvPUrDhqYStPFElys=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(39850400004)(136003)(366004)(396003)(53546011)(316002)(8936002)(6486002)(186003)(36756003)(86362001)(8676002)(31696002)(26005)(2906002)(66946007)(54906003)(83380400001)(6916009)(956004)(2616005)(31686004)(38100700002)(4326008)(66556008)(478600001)(66476007)(5660300002)(16576012)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?yS5rChIqhzWLI6/vacDmqzQinhQghLBG+84Cr/qMikDU0leWKgFj84SqdR+c?=
 =?us-ascii?Q?gg8zKgBLwqKkcHRH3G1K7aOnuBRCmWu9ZLlxHdK/EAZ6XJDJTmonpBIMMjMJ?=
 =?us-ascii?Q?wIGsHDdL38pJ7X1vGPgMD7pMQyoC9g3xsUaut2C3+QQFjDIOx3lm6987EqFE?=
 =?us-ascii?Q?v2ti2LgvaaXflVVnyz/Gm87AcjwT8ppLW8ghQ9r6A5knBiOO64d08saGTxXk?=
 =?us-ascii?Q?6cz+1DyGdnSL/Zh6BuvG4UjkJSE5iTlzVcbSw6ypZTzwVVUe4H5dAOsC2ua1?=
 =?us-ascii?Q?XqtEm2e0jPv2ybIKDoFpCUNkz85mgpFtrA7oGZABwtBbxgUNErGXXl8dv4se?=
 =?us-ascii?Q?XSkQdQJwV1s6SmMinj+Owcou9SKGFEtg2qJAY+bislD80a4Ey8snhQ+KBVwn?=
 =?us-ascii?Q?hoX5x9c6gBt0CPojoM3/P3Mq4uf5TBV+8uTDFAg1tYbiekMSi63cG/UrQ1DL?=
 =?us-ascii?Q?NrUppZYAhcQHdZ5FrBVHe1pXWSReev8JJ/S85OOAhzokU/G6h5Alrthgs2e7?=
 =?us-ascii?Q?0FhtPY8uj3Ehfkjv22XyDoAXD7cOSldo9aX9g/dm3uUn7AugZCWoEa1Hl/0L?=
 =?us-ascii?Q?+veqBXk49s1V+6nKLdqIVR7xBfupZICYWcUx6r0/QsjdrPjIwGShSLN9zDGD?=
 =?us-ascii?Q?4cbl3FUT4t/WaKm5w5aZgz/h113M4LZD8eJoceX0cVgDaqhsF2k/dyLJLA0s?=
 =?us-ascii?Q?VZuLB7azV2nwKXs6tj+fw6OYvYZE3TTIgmRTqzRn5QcgG2n/cIlKizZ9DPsm?=
 =?us-ascii?Q?xT9E8T2xdEy6/twwgxMXz3l/YF+myzQMThHlsMmf7fKw5p0OyzBBmkg8Gs7S?=
 =?us-ascii?Q?/I7GeBIlaNprb8eRkLhv6Z5sJANzMiNNoC6NylWnQu7E09+HkE1Rov0ed43p?=
 =?us-ascii?Q?cQHdrwV9QP2M9BuxhoCHYWuraNJkFHR9+XvOfAixgt5DqfLUd8OwDlbhc9Jr?=
 =?us-ascii?Q?+THlGQFUYFoJw26vlYmE87kaw0D6X0Hmi469i/tUiENVa6gaiA4x9V/ZNtqs?=
 =?us-ascii?Q?f0TpW6sJXvMd/HdxL5egq/VVEtXEEf9S+RAw6p4D1fFAAJN7rK++UhMqgTaK?=
 =?us-ascii?Q?7GLvgMvISzwN87j+KP98kmOsdahVjcLTE6tsKGG9nB+zgPDR157dzEy8mZsH?=
 =?us-ascii?Q?lyaNtmFT4W7fQdaXGT71KO41NwNyh2wmgxOaKiHeBhLOVKhU+hHcvlxQLX2J?=
 =?us-ascii?Q?zBYh3nRdW522nK9mtSMp41/9cUpjthQJZbxs/mHU+M0tJP4mPoiJQfuPd5Fq?=
 =?us-ascii?Q?2pDFB658cN+MHHDZFs9wx5o5Ap6+n2Zl8cAaz7O4xMtCPGFOmWACa0LbGeGb?=
 =?us-ascii?Q?VRBlSqY1dUaEjCjT1w2bMZgW?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a2bdbd90-ff03-4f39-4a3a-08d9420f608b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 12:53:26.3168
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: nrNbvFClUee3zRO9Zu15hXuQEUG7xuYUg/9iOXhXNq109h+yHi6qSUcmvoQb1VQj3OuHccLwFsRQY9CMl8dZLA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7149

On 08.07.2021 13:15, Andrew Cooper wrote:
> On 08/07/2021 08:21, Jan Beulich wrote:
>> Compilers are certainly right in detecting UB here, given that fully
>> parenthesized (to express precedence) the original offending expression
>> was (((stub_va + p) - ctxt->io_emul_stub) + 5), which in fact exhibits
>> two overflows in pointer calculations. We really want to calculate
>> (p - ctxt->io_emul_stub) first, which is guaranteed to not overflow.
>=20
> I agree that avoiding this overflow is an improvement, but as I said in
> my original analysis, (f) - (expr) also underflows and results in a
> negative displacement.

And how is a negative displacement a problem? ptrdiff_t is explicitly
a signed type. The language (I'm inclined to say "of course") allows
for pointer subtraction in both directions, i.e. one isn't required
to know which one of the operands is pointing to the lower address.

> This is specifically why I did the cast the other way around, so we're
> subtracting integers not pointers.

Iirc what you did was to cast the result of the pointer arithmetic.
The fact that this has silenced the reporting of UB was suspicious
in the first place, as I did also point out ...

> It appears that we don't use -fwrapv so in any case, the only way of
> doing this without UB is to use unsigned long's everywhere.
>=20
>> The issue was observed with clang 9 on 4.13.
>>
>> The oddities are
>> - the issue was detected on APPEND_CALL(save_guest_gprs), despite the
>>   earlier similar APPEND_CALL(load_guest_gprs),
>> - merely casting the original offending expression to long was reported
>>   to also help.

... here.

> Further to the above, that was also so didn't have an expression of
> (ptr) - (unsigned long).

We didn't have such an expression - the left side (the function
pointer) is already being cast to long.

>> While at it also avoid converting guaranteed (with our current address
>> space layout) negative values to unsigned long (which has implementation
>> defined behavior):
>=20
> ?=C2=A0 Converting between signed and unsigned representations has explic=
itly
> well defined behaviour.

Converting _from_ signed _to_ unsigned does, but the other way around
in only has if the value is representable (i.e. doesn't end up negative).

>>  Have stub_va be of pointer type. And since it's on an
>> immediately adjacent line, also constify this_stubs.
>>
>> Fixes: d89e5e65f305 ("x86/ioemul: Rewrite stub generation to be shadow s=
tack compatible")
>> Reported-by: Franklin Shen <2284696125@qq.com>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>> ---
>> I'm not going to insist on the part avoiding implementation defined
>> behavior here. If I am to drop that, it is less clear whether
>> constifying this_stubs would then still be warranted.
>=20
> You're implicitly casting away const now at the return, which is
> something you object to in other peoples patches.

There's no concept of "const" when the pointed to type is a function
type. Or else the compiler would legitimately complain about the
loss of const.

>> --- a/xen/arch/x86/pv/emul-priv-op.c
>> +++ b/xen/arch/x86/pv/emul-priv-op.c
>> @@ -89,8 +89,8 @@ static io_emul_stub_t *io_emul_stub_setu
>>          0xc3,       /* ret       */
>>      };
>> =20
>> -    struct stubs *this_stubs =3D &this_cpu(stubs);
>> -    unsigned long stub_va =3D this_stubs->addr + STUB_BUF_SIZE / 2;
>> +    const struct stubs *this_stubs =3D &this_cpu(stubs);
>> +    const void *stub_va =3D (void *)this_stubs->addr + STUB_BUF_SIZE / =
2;
>>      unsigned int quirk_bytes =3D 0;
>>      char *p;
>> =20
>> @@ -98,7 +98,7 @@ static io_emul_stub_t *io_emul_stub_setu
>>  #define APPEND_BUFF(b) ({ memcpy(p, b, sizeof(b)); p +=3D sizeof(b); })
>>  #define APPEND_CALL(f)                                                 =
 \
>>      ({                                                                 =
 \
>> -        long disp =3D (long)(f) - (stub_va + p - ctxt->io_emul_stub + 5=
); \
>> +        long disp =3D (void *)(f) - (stub_va + (p - ctxt->io_emul_stub)=
 + 5); \
>=20
> The only version of this which is UB-free is
>=20
> long disp =3D (unsigned long)(f) - (stub_va + (p - ctxt->io_emul_stub) + =
5);

As per above I don't see why you claim this is the only UB-free form;
for now I don't see any UB in the form I've used. Plus your variant
again utilizes unsigned -> signed conversion, which I've explained I'd
prefer to avoid (but would be willing to give up on, as that's only a
secondary goal here, and we surely have very many cases of such
throughout the code base).

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 13:02:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 13:02:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153114.282869 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Tfv-0003IK-Qs; Thu, 08 Jul 2021 13:02:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153114.282869; Thu, 08 Jul 2021 13:02:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Tfv-0003ID-Ln; Thu, 08 Jul 2021 13:02:43 +0000
Received: by outflank-mailman (input) for mailman id 153114;
 Thu, 08 Jul 2021 13:02:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1Tfu-0003I7-3t
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 13:02:42 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c6d6e50e-dfec-11eb-856e-12813bfff9fa;
 Thu, 08 Jul 2021 13:02:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c6d6e50e-dfec-11eb-856e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625749361;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=lBLcg6CBnboiqdDOjgoNlM69uDiJIy0y5YoDScL5KRY=;
  b=FqtVX1lESIN2LFyScDHWXaRUHc+/yu15S+nsv8/zP+1rqeHEs/IiPJtK
   0Aj+96ZeWvqhnozvbYD7zjFB2Z9btnbmR+2qI3HflpL+x/mvWDh7nGoNb
   Ii6Ev0oXL1h9UR2rj2nDIUzQ+cYJLoz/zrvsLvdKb8oK4IG06xV29gOn3
   c=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: GM7N9kOUxuAeMpZgxkRZ+N8BQKDMekpAseiArMgFoy1j2USByBGyVHMjpVVirdKSbKhfAi7u1a
 +FLShRipoQrKwqGjE0c7MkvezUc0H1yua6NYuAhmnn4Pu2l/qAM2BTNVzlN7QOptYwnscSDCjq
 sfCCDeE6noyC75bKN78GfTR7nXK3TVfmMzxEL1xRrRVSx4yU6IBDGBJdSOTCPSoemA4jZwhe5j
 eJqDMOtomYxAIpMXtwA1c/j7+9gtivBmQlu3cKcxaUpnRtr+uV9eTQdjNlGasDLQQhBEgNCjfw
 T64=
X-SBRS: 5.1
X-MesageID: 47539781
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:T/iNT64wPocDr4ceRgPXwAzXdLJyesId70hD6qkQc3Fom62j5q
 WTdZEgvyMc5wx/ZJhNo7690cq7MBHhHPxOgbX5VI3KNGXbUQOTR72KhrGSoAEIdReeygZcv5
 0QCZSXCrfLfCVHZRCR2njFLz4iquP3j5xBnY3lvhNQpZkBUdAZ0+9+YDzrdXFedU19KrcSMo
 GT3cZDryrIQwVtUizqbkN1OdQqvrfw5evbXSI=
X-IronPort-AV: E=Sophos;i="5.84,222,1620705600"; 
   d="scan'208";a="47539781"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Anthony PERARD
	<anthony.perard@citrix.com>, Doug Goldstein <cardoe@cardoe.com>, Wei Liu
	<wl@xen.org>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Subject: [PATCH] cirrus-ci: Fix FreeBSD build following QEMU update
Date: Thu, 8 Jul 2021 14:02:32 +0100
Message-ID: <20210708130232.3159-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

QEMU requires ninja and bash to build now.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Anthony PERARD <anthony.perard@citrix.com>
CC: Doug Goldstein <cardoe@cardoe.com>
CC: Wei Liu <wl@xen.org>
CC: Roger Pau Monné <roger.pau@citrix.com>

https://cirrus-ci.com/build/4782098465685504 is run with the build fixed
---
 .cirrus.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.cirrus.yml b/.cirrus.yml
index fdb1c9c94d7c..b17f0b6369e1 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -4,7 +4,7 @@ freebsd_template: &FREEBSD_TEMPLATE
     APPEND_LIB: /usr/local/lib
     APPEND_INCLUDES: /usr/local/include
 
-  install_script: pkg install -y seabios gmake
+  install_script: pkg install -y seabios gmake ninja bash
                                  pkgconf python libiconv bison perl5
                                  yajl lzo2 pixman argp-standalone
                                  libxml2 glib git
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 13:11:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 13:11:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153119.282880 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ToB-0004gm-Kb; Thu, 08 Jul 2021 13:11:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153119.282880; Thu, 08 Jul 2021 13:11:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ToB-0004gf-HU; Thu, 08 Jul 2021 13:11:15 +0000
Received: by outflank-mailman (input) for mailman id 153119;
 Thu, 08 Jul 2021 13:11:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1ToA-0004gZ-Gx
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 13:11:14 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f81e5bfa-dfed-11eb-856e-12813bfff9fa;
 Thu, 08 Jul 2021 13:11:13 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2104.outbound.protection.outlook.com [104.47.17.104])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-hNxWYglAO0O33bdWQOT1nA-2; Thu, 08 Jul 2021 15:11:11 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5167.eurprd04.prod.outlook.com (2603:10a6:803:5b::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Thu, 8 Jul
 2021 13:11:08 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 13:11:08 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0008.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4264.18 via Frontend Transport; Thu, 8 Jul 2021 13:11:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f81e5bfa-dfed-11eb-856e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625749872;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=dApYUv0qBUWG/wRh9snu9rIDXsxOLh5oXW2J0EqkRjU=;
	b=Qqx0quu3LaPpEv3UKaoxcfTUVCJdqqyZ4Ageis0pbRP2ZLUDko+GHIHIIqPV9FHjMiSWRR
	jUM85mvNImZ++0vS79RqCcWiLh7XAyGwMCXwPJd36JGiLPCAotzNr5GEMQrjePD6G13ADX
	F6l58zTv8KDsA9n0XAoui1KNse6jzB4=
X-MC-Unique: hNxWYglAO0O33bdWQOT1nA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MLk6rZXViFu7Y2TOTHEwfy+5qhcjUEiTjSi6kMpRGeXLTbX3cociKgiFbMBooAUrovV3rDjELkIC/xFLAivmxSI/7lEPP+ksRSarbKcIm68kBgOyjE/b2YRfIISMEB1+lE4PEfpF5omiGQQK8c8YF9Wb+8AWhcinwjQwlYQHJWxx/r6ZnVjjdHag26Sh/lMpr8oak2Z0htwisXLvRKo8S2kU/ij6nZ2nI8HAflZ9UTpf7XU5jWbAzraMs/IcvlXhZMVMP4bUgwJyq5tHK0hHDEGJ6ztg3dNRvQ9+HYT90fh+EYuBYxpDtZmRqcHThU2bsthHu+O5fgH7h7Crq7javQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dApYUv0qBUWG/wRh9snu9rIDXsxOLh5oXW2J0EqkRjU=;
 b=VAdiMJmCCnkHquSE7nCNKxGliAxuVRHKEHKT11p5bVn2xgqH4N/LqJtEDZeDgu/H6Zb6uOWhuYl+I9NGhM0XBMpHSF/WcCncMuT6CDYDiunbP3Ww98QghFaoUsZZlfddIf+OxfBl+h3fHQLWLwAP9tik36vCfLozzFSuuTARH74GmErqSzBHFd899+WNWsyd/UqH6txXatl6Z0IIaLW8i7KjejDh9GyGbKXq6AT5WBxkUnsfTStdvu1qcRh5rsACLAp1Ay7ZZVM8BoTErPXY1CrIOg2FbiRJ7sSc0r17Zp2piXt14tQahonZz/FJQQbufDHnu9YhJ6mK9ouJcAw/xw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: vger.kernel.org; dkim=none (message not signed)
 header.d=none;vger.kernel.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
To: Juergen Gross <jgross@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>, xen-devel@lists.xenproject.org,
 linux-kernel@vger.kernel.org, linux-block@vger.kernel.org
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c33d7570-d986-749d-1e4f-85829a11babb@suse.com>
Date: Thu, 8 Jul 2021 15:11:06 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708124345.10173-4-jgross@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0008.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 61fe5661-7176-464b-7042-08d94211d979
X-MS-TrafficTypeDiagnostic: VI1PR04MB5167:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5167CFFD359DFFA79FC3CAA9B3199@VI1PR04MB5167.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:862;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	759rmCWBcna+LESXm5El+06QO+Q6e7T+OsR8b3PRrlz1pTEf97QY5nwzO0VTRAD5AITHyW/5RhzwRArdlA9LP+HXD5xnv4wQZ1OGyT6lZz60QU6kWxSfd1E0utFJo6MWlG2jYQQiN6p9+8zfcGyEMZhWepH2SuAQGWiHyNEQzxzdBHvp7jCLaNvAA2FJsXEcA6jZhpfvUku/gtWyLHciGhBfv4FyMwcxsT46WG6MIqn2m3549kQoAg0zE5eG6KqVJZsPqJCDXIn5N3rqsY1RBVqZTydhv2Cc5hVU0nQb0EGQe+bxOmKIKmz7PSpdq/865hpNPeb+EN0sZSxG4pOR/KdggK9Mo63ZKi+LT1rxEKdzDZvYtIO2cvFRxpiaQH1NkSy3SqbhVSLx9cD2ovGCrv3126ibKkAlMPKtO0egzPlkBxOYiXUjGsGA9jQ+dOCPDwAIrc2Vxj8F53kte6RUlOmBZiYesKfQJTZ6iY1v4CmYBXaafpPBAlZ1yviuFyjCdzqbusIge57qXj93Ube9Ni2uVBwagzpNSj3/MtK6UIKeYNCf/zCtnkF/l4essmfv38S94cVhlnd6vJczwbqLgzpPY0U+AEGTF5TslS0TKVn7LcbTwEw4/BRgvSQ0EWdQNrVLGyRXmD4MU91FtoOm3rZAladVU/+S4e8knJKiH/y2V/6uWnXVvhaUnjNjxdPK+axWhssgjrS8AATUGbZg/wksCwNqnXOVlkINpo4bQ+ZdWqELhYdUnD//+jUjkoOv
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(366004)(39850400004)(396003)(376002)(26005)(66556008)(86362001)(37006003)(16576012)(54906003)(8676002)(478600001)(5660300002)(6636002)(36756003)(53546011)(66476007)(6486002)(956004)(4326008)(2616005)(38100700002)(83380400001)(66946007)(31686004)(31696002)(6862004)(186003)(2906002)(8936002)(316002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 61fe5661-7176-464b-7042-08d94211d979
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 13:11:08.1956
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 4sCOwJ3oMz+phsm4z9QPbBYGdLGN3i73yU8PrsQVHmk4uitO1FJ0I4hCLnqSjGVc/I/9/WxEWIT3Px3MFIe9bQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5167

On 08.07.2021 14:43, Juergen Gross wrote:
> Today blkfront will trust the backend to send only sane response data.
> In order to avoid privilege escalations or crashes in case of malicious
> backends verify the data to be within expected limits. Especially make
> sure that the response always references an outstanding request.
> 
> Introduce a new state of the ring BLKIF_STATE_ERROR which will be
> switched to in case an inconsistency is being detected. Recovering from
> this state is possible only via removing and adding the virtual device
> again (e.g. via a suspend/resume cycle).
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
albeit ...

> @@ -1602,7 +1628,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		case BLKIF_OP_DISCARD:
>  			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
>  				struct request_queue *rq = info->rq;
> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
> +
> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>  					   info->gd->disk_name, op_name(bret.operation));
>  				blkif_req(req)->error = BLK_STS_NOTSUPP;
>  				info->feature_discard = 0;
> @@ -1614,13 +1641,13 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		case BLKIF_OP_FLUSH_DISKCACHE:
>  		case BLKIF_OP_WRITE_BARRIER:
>  			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>  				       info->gd->disk_name, op_name(bret.operation));
>  				blkif_req(req)->error = BLK_STS_NOTSUPP;
>  			}
>  			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
>  				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
> -				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
> +				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
>  				       info->gd->disk_name, op_name(bret.operation));
>  				blkif_req(req)->error = BLK_STS_NOTSUPP;
>  			}
> @@ -1635,8 +1662,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		case BLKIF_OP_READ:
>  		case BLKIF_OP_WRITE:
>  			if (unlikely(bret.status != BLKIF_RSP_OKAY))
> -				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
> -					"request: %x\n", bret.status);
> +				dev_dbg_ratelimited(&info->xbdev->dev,
> +					"Bad return from blkdev data request: %x\n", bret.status);
>  
>  			break;
>  		default:

... all of these look kind of unrelated to the topic of the patch,
and the conversion also isn't mentioned as on-purpose in the
description.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 13:14:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 13:14:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153125.282891 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TrI-0005Ra-7k; Thu, 08 Jul 2021 13:14:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153125.282891; Thu, 08 Jul 2021 13:14:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1TrI-0005RT-4L; Thu, 08 Jul 2021 13:14:28 +0000
Received: by outflank-mailman (input) for mailman id 153125;
 Thu, 08 Jul 2021 13:14:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1TrH-0005RL-9E
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 13:14:27 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f06b50a2-46ee-4551-b826-cf89111bcb78;
 Thu, 08 Jul 2021 13:14:26 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 91BB022360;
 Thu,  8 Jul 2021 13:14:25 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 4A36F1338E;
 Thu,  8 Jul 2021 13:14:25 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 7uMMEDH65mAYagAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 13:14:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f06b50a2-46ee-4551-b826-cf89111bcb78
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625750065; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=kjDxg716BeRs2qtkJRO5dJhtTxFQMs1Qz7BRV05AbBo=;
	b=JbRdunVsKhyiVVBCo8yMgJQKvZpa5rMbzks6AVmCpSyppVRrYJBCrq2uPHRVMi9+QXBsdF
	DIsyBIzkB6codFI98AJt3j6MOUMCRKVb7cGf7TDfT0EcgGFtJx0/J+97cnxQpbYyyFMGnt
	yDwCVoelae67WiglcvOVtpIZpldRzdE=
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
To: Jan Beulich <jbeulich@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>, xen-devel@lists.xenproject.org,
 linux-kernel@vger.kernel.org, linux-block@vger.kernel.org
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
 <c33d7570-d986-749d-1e4f-85829a11babb@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <49aa4ddb-ca58-e0df-0675-daa72866d3db@suse.com>
Date: Thu, 8 Jul 2021 15:14:24 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <c33d7570-d986-749d-1e4f-85829a11babb@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="GZlw9XRimbRflKEqbIeJ6AKoGzpNRdN8y"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--GZlw9XRimbRflKEqbIeJ6AKoGzpNRdN8y
Content-Type: multipart/mixed; boundary="vTD9BTL08Q22LyNlkVoVSug6qRFaht5uE";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>, xen-devel@lists.xenproject.org,
 linux-kernel@vger.kernel.org, linux-block@vger.kernel.org
Message-ID: <49aa4ddb-ca58-e0df-0675-daa72866d3db@suse.com>
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
 <c33d7570-d986-749d-1e4f-85829a11babb@suse.com>
In-Reply-To: <c33d7570-d986-749d-1e4f-85829a11babb@suse.com>

--vTD9BTL08Q22LyNlkVoVSug6qRFaht5uE
Content-Type: multipart/mixed;
 boundary="------------A72E68CB9B686B2D3C20F643"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------A72E68CB9B686B2D3C20F643
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 08.07.21 15:11, Jan Beulich wrote:
> On 08.07.2021 14:43, Juergen Gross wrote:
>> Today blkfront will trust the backend to send only sane response data.=

>> In order to avoid privilege escalations or crashes in case of maliciou=
s
>> backends verify the data to be within expected limits. Especially make=

>> sure that the response always references an outstanding request.
>>
>> Introduce a new state of the ring BLKIF_STATE_ERROR which will be
>> switched to in case an inconsistency is being detected. Recovering fro=
m
>> this state is possible only via removing and adding the virtual device=

>> again (e.g. via a suspend/resume cycle).
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>=20
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> albeit ...
>=20
>> @@ -1602,7 +1628,8 @@ static irqreturn_t blkif_interrupt(int irq, void=
 *dev_id)
>>   		case BLKIF_OP_DISCARD:
>>   			if (unlikely(bret.status =3D=3D BLKIF_RSP_EOPNOTSUPP)) {
>>   				struct request_queue *rq =3D info->rq;
>> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
>> +
>> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>>   					   info->gd->disk_name, op_name(bret.operation));
>>   				blkif_req(req)->error =3D BLK_STS_NOTSUPP;
>>   				info->feature_discard =3D 0;
>> @@ -1614,13 +1641,13 @@ static irqreturn_t blkif_interrupt(int irq, vo=
id *dev_id)
>>   		case BLKIF_OP_FLUSH_DISKCACHE:
>>   		case BLKIF_OP_WRITE_BARRIER:
>>   			if (unlikely(bret.status =3D=3D BLKIF_RSP_EOPNOTSUPP)) {
>> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
>> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>>   				       info->gd->disk_name, op_name(bret.operation));
>>   				blkif_req(req)->error =3D BLK_STS_NOTSUPP;
>>   			}
>>   			if (unlikely(bret.status =3D=3D BLKIF_RSP_ERROR &&
>>   				     rinfo->shadow[id].req.u.rw.nr_segments =3D=3D 0)) {
>> -				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
>> +				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
>>   				       info->gd->disk_name, op_name(bret.operation));
>>   				blkif_req(req)->error =3D BLK_STS_NOTSUPP;
>>   			}
>> @@ -1635,8 +1662,8 @@ static irqreturn_t blkif_interrupt(int irq, void=
 *dev_id)
>>   		case BLKIF_OP_READ:
>>   		case BLKIF_OP_WRITE:
>>   			if (unlikely(bret.status !=3D BLKIF_RSP_OKAY))
>> -				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
>> -					"request: %x\n", bret.status);
>> +				dev_dbg_ratelimited(&info->xbdev->dev,
>> +					"Bad return from blkdev data request: %x\n", bret.status);
>>  =20
>>   			break;
>>   		default:
>=20
> ... all of these look kind of unrelated to the topic of the patch,
> and the conversion also isn't mentioned as on-purpose in the
> description.

Hmm, yes, I'll add a sentence to the commit message.


Juergen


--------------A72E68CB9B686B2D3C20F643
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------A72E68CB9B686B2D3C20F643--

--vTD9BTL08Q22LyNlkVoVSug6qRFaht5uE--

--GZlw9XRimbRflKEqbIeJ6AKoGzpNRdN8y
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDm+jAFAwAAAAAACgkQsN6d1ii/Ey9U
qwgAkr0wNLGpOOsrdkkQSuu01w0EXUKmCsaY0frdbjaBvlyymrbtIlFUGKElPVo6uVMymxdXQwuQ
CXN1fm4UhG4IRUTeewD561qAQtOcxRl5s0wOSTs6FszzntEMPioHM2EcslKf2g9MWeSy5HxWClbd
nmvqFApYxTQLI7zn1tyeye5f/ogOqbi47pz7SS9qJEPcGeRmDS8pJNaPImpsYW4eWc/YAmFe1efz
w1e7dNN+mznb5YD5q/r3jNwG+bvSblEqjQChMy3Vix+kavEUlkbfhjUvC9yE5Y1Zt3Q35BGe+1o+
HG9Xe7em243oyG66ZyoxxULe1vM4l9wkHV0rttQWSg==
=Vhp7
-----END PGP SIGNATURE-----

--GZlw9XRimbRflKEqbIeJ6AKoGzpNRdN8y--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 13:17:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 13:17:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153130.282902 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Tuc-00066j-Nd; Thu, 08 Jul 2021 13:17:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153130.282902; Thu, 08 Jul 2021 13:17:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Tuc-00066c-K3; Thu, 08 Jul 2021 13:17:54 +0000
Received: by outflank-mailman (input) for mailman id 153130;
 Thu, 08 Jul 2021 13:17:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=XUKi=MA=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1Tub-00066S-8H
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 13:17:53 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a7eefe9c-2b59-43cf-9226-1ca5919ac7ca;
 Thu, 08 Jul 2021 13:17:52 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2059.outbound.protection.outlook.com [104.47.14.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-17-YgeoyRklMSO-Cn8P8Xy5ww-1; Thu, 08 Jul 2021 15:17:49 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7360.eurprd04.prod.outlook.com (2603:10a6:800:1a3::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 13:17:45 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 13:17:45 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR01CA0077.eurprd01.prod.exchangelabs.com (2603:10a6:208:10e::18) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22 via Frontend
 Transport; Thu, 8 Jul 2021 13:17:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a7eefe9c-2b59-43cf-9226-1ca5919ac7ca
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625750271;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=wyfmdxiIyabVcikSXehTwfXS7Hk9myvO060s8bSdjMg=;
	b=YX8Qq4I4MFXJSEQQya6iZZ29Y2RW4e3MbhVp+QRAzOo0Chgs+j09fzbrbKKnpOOEtQrc6D
	9abPH0zrHni7tUL/DTvhDGoORIL1nb3TdRP8sX0ajzTgkGZ7tPrdXUDL0H+dS2OHTPL22E
	g+nCKfx/mJSAjXUz57EIZr4NZq22BIo=
X-MC-Unique: YgeoyRklMSO-Cn8P8Xy5ww-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=mpfwj2XHHV7hIFf0TVC+ZJM6vQAyL3H9vyhExdCoLJjFa1cj2fMnNn2iW0zl8QcqtrcHtwQNIUsDwSLVRDE2gZhU/PinuTtxWJqu62jiSHMD9DwJvQW2OFjqfw+LUMI63ePI4RXMe7X9hiIQvtX4iZXmdEWbwxfjpq4DVRW6WIlIJzlT1soHAmlxGzZFyd8MqygvH30DHfg+Y1F1xiB0E1xSe5IuB6L7AJSm3TjOiffbyC0hn2cPFXKryQr6EnZp4YE266F1cWC8tAb55OrTA/ACd5Wt23VCAo/0dNXY/sPZIAmo/PCtxwopuAV4+1t+jcmDP1KbWi2x6xSucLv/fg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wyfmdxiIyabVcikSXehTwfXS7Hk9myvO060s8bSdjMg=;
 b=gdbb+RLhvQmj61UNkSCqSbuaxwuDgVShJIOlLfBe0OOJ+k6J84UTXybyP8BYSzNV/qvzeexTxflbEmsMnzNt7bzP9YLpJXRor0u+DKWHhjL6H6IBlFeXUEfUYU0tAWD1TSJpuqMrnc1229+KcYz2DQ6r2BgmZ++UiKIRvUM0MI4IG9ZlhCXYbj8NpuHNF7e8sj+OEIjl+Y6i5fJvFepRI+yvuKZG96UzCwaknIxo6qjfzP9QPQAxENucgn+xKGPt7DwMiuMYsJzV6XY4pdeeeT5bgqIToruyeeM8J+nacMkz4ieJNBREx9ljEnQvd8P84NIzCSne0Z7WCaITREo0hQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [RFC PATCH 08/10] xsm-silo: convert silo over to domain roles
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: sstabellini@kernel.org, julien@xen.org, Volodymyr_Babchuk@epam.com,
 andrew.cooper3@citrix.com, george.dunlap@citrix.com, iwj@xenproject.org,
 wl@xen.org, roger.pau@citrix.com, tamas@tklengyel.com, tim@xen.org,
 jgross@suse.com, aisaila@bitdefender.com, ppircalabu@bitdefender.com,
 dfaggioli@suse.com, paul@xen.org, kevin.tian@intel.com,
 dgdegra@tycho.nsa.gov, adam.schwalm@starlab.io, scott.davis@starlab.io,
 xen-devel@lists.xenproject.org
References: <20210514205437.13661-1-dpsmith@apertussolutions.com>
 <20210514205437.13661-9-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <da689bf7-0e39-fdc6-c3f9-2ec1200f8f48@suse.com>
Date: Thu, 8 Jul 2021 15:17:42 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210514205437.13661-9-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR01CA0077.eurprd01.prod.exchangelabs.com
 (2603:10a6:208:10e::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: dccb83ba-c2c2-48c4-af97-08d94212c652
X-MS-TrafficTypeDiagnostic: VE1PR04MB7360:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB73601A91BD8D07209AF8F8D7B3199@VE1PR04MB7360.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5236;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	VIaWkwlkkBxYTE99zrzXZEWrcSWGDZABSlXVWluLvSQhgogeNbnNStlqfiJH4U2S85CBj3YefTmTS6+xjGjTrF5VLSWT+bqASGxMbV/HQQEyToOVlINsTUQx+eUFTZx/nIJqcdpHnub8hsPUGE1N+jWHgqgMPKd+vi16POGcU46f1uH2OVjTTPPFFIb9uqeJn0zcR/Ray3vYxfCTmx7nzT3XTnRRzLrsgsATl4VmG93rV1wEhY6YXe9NzJ3fxqptQyf03XwnQ9OP+MDFx8ibOiPH50K/1edonmnNKOwZO/Hw5KwdcOB7pH7r0VYEj9emjiGSasLiQULBzUIpMvCyT/y2+9qpza1gNsktRX6+NejOXhWlcf9j3m5ybQFZapSAK+2Ls/OZQreKfXbOqUcR4kFUYI0a8iO/Z2i8Ox5nrJr8XZy55zv3ltu73Wq3L4YfT5z3wr/gm47a4J+I6JtYgdgz9dI4rT3lsCJhfN2SNvt49gb1eS0HI+mm96/HSWqxph9chgw3DCrxvsxftm6d2alCwhkVJjoMoQfhZUmP+Zmj44xt+xutoojynSKNAhRui0Pd2r0T80Iw0yQctgSz+Zkeijai3lo28+EO5wsA08kU180TrVx3NvY2WOQ4t3Bf+GckM7d1gOLzmtE6nbEkP984qirInogUPRnzzi8Ts3Wr9v0M0FJCKKMPPqHxYwfR4uGrIKTnleFw1RwouX7j/W+XHWVREzGNzRm6/M6eKxe0qDEIIv01DLrmVXTO1E/sCPM6dFsGYxQ2SMDbbx0xhrfAQU1C2T8+tibemKzLLbc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(376002)(396003)(346002)(366004)(136003)(66476007)(31686004)(66946007)(66556008)(478600001)(31696002)(86362001)(38100700002)(36756003)(8936002)(53546011)(956004)(2616005)(5660300002)(6486002)(26005)(6916009)(4326008)(7416002)(2906002)(186003)(8676002)(16576012)(316002)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?NYPV1a2+Uc45k3TBa8NgQmnlnMNz/pzQsFEw+1G?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: dccb83ba-c2c2-48c4-af97-08d94212c652
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 13:17:45.6686
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: CSEB5XaaEl6BRqten2LxTIyfYpdvYvSQC2Q7LYPWWYohUszU/Qk3pj2FDo/A3W+tSWm+NL+DvTWG6t+ub2Uu+A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7360

On 14.05.2021 22:54, Daniel P. Smith wrote:
> --- a/xen/xsm/silo.c
> +++ b/xen/xsm/silo.c
> @@ -17,9 +17,11 @@
>   * You should have received a copy of the GNU General Public License along with
>   * this program; If not, see <http://www.gnu.org/licenses/>.
>   */
> -#define XSM_NO_WRAPPERS
> -#include <xsm/dummy.h>
>  
> +#include <xsm/xsm.h>
> +#include <xsm/roles.h>
> +
> +#define SILO_ALLOWED_ROLES ( XSM_DOM_SUPER | XSM_DEV_BACK )

Assuming XSM_DEV_BACK means (or at least may also mean) a backend outside
of Dom0 serving another domain's frontend, ...

> @@ -29,8 +31,10 @@ static bool silo_mode_dom_check(const struct domain *ldom,
>  {
>      const struct domain *currd = current->domain;
>  
> -    return (is_control_domain(currd) || is_control_domain(ldom) ||
> -            is_control_domain(rdom) || ldom == rdom);
> +    return ( currd->xsm_roles & SILO_ALLOWED_ROLES ||
> +            ldom->xsm_roles & SILO_ALLOWED_ROLES ||
> +            rdom->xsm_roles & SILO_ALLOWED_ROLES ||
> +            ldom == rdom );

... I don't think this is an appropriate conversion. Aiui a backend in
a driver domain is out of reach for a domain in SILO mode.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 13:54:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 13:54:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153139.282916 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UU8-0001eC-Kd; Thu, 08 Jul 2021 13:54:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153139.282916; Thu, 08 Jul 2021 13:54:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UU8-0001e5-H9; Thu, 08 Jul 2021 13:54:36 +0000
Received: by outflank-mailman (input) for mailman id 153139;
 Thu, 08 Jul 2021 13:54:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=sNSP=MA=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m1UU6-0001dz-HY
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 13:54:34 +0000
Received: from mail-pg1-x52c.google.com (unknown [2607:f8b0:4864:20::52c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 785b577f-1c1b-4611-a466-36bdc2565e62;
 Thu, 08 Jul 2021 13:54:33 +0000 (UTC)
Received: by mail-pg1-x52c.google.com with SMTP id h4so6028644pgp.5
 for <xen-devel@lists.xenproject.org>; Thu, 08 Jul 2021 06:54:33 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 s6sm10053656pjp.45.2021.07.08.06.54.18
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 08 Jul 2021 06:54:32 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 785b577f-1c1b-4611-a466-36bdc2565e62
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=flXS1TuPwc//SKu4jyAw/jiI5sdlmmbGzljFY5ti5Is=;
        b=XPkbMtvNl1RRRIvI1exOBM0vNgLKe6Jr87NeF6M+XhU9hnWhIdYPy6g62fwe5U7Scv
         3OrZnM5xlgUHY4f2QkjgEeTcpa0o7dLnUyXfN9mRo8UFkwC9CeIap+ugcNZHLtK80D4t
         8wj5AZpA2H01PaBi7V8Kr6OodXxWYwqaKRbRwr4D/HdqeXVSeWVPyWGFP9JDZE8rPpuq
         b1I1cNp+0ih77D2DO6KbMwqCi2Da2EhcxiCcJG4ylxqWFEI1KpNBSWZO6ZthAYh6sGk7
         5b0XLFqNbcA1I9TlauYSplfC94nkC/MEEMZPwarYocJlHfxxxZoTys2fUSvH0P62QbMn
         xy8A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=flXS1TuPwc//SKu4jyAw/jiI5sdlmmbGzljFY5ti5Is=;
        b=kPbcfEB6uKJ/O6HWnPHz04MejmCrR3pE+m075O26uS1/netuBNxFtyq8+Sanc6+Acs
         i1difG0MUkN4cNONtVj93D88dQAiTtSmOFxMb9G35P+f6scatu2mK9a/KPW4alSR6goD
         z29Bq/IwnYLuD6UvQDlwX5SNSfrfc/xbzcgbXOE2XTsq55X3RTFdoWW31d7ZqK/PXky4
         eHWwV1UKc1cpuvR46iRu7S9d/94ajrC870CT95ACXwqen/8EKngr2hoZelHQl6ive4ze
         xcFLlCHRwORwPWXtaKYzNI+iNry4gOhftpVUwvpx9AJK8XpxZnov7ai00KmP4L+/Lsxp
         EWPQ==
X-Gm-Message-State: AOAM530WCb7nqFWscpU9APoLNVYgPKXZNnjVrprzSiDGWhYJdvpyiURM
	AyM6yKTtPcBd2KSbOL4A75I=
X-Google-Smtp-Source: ABdhPJz+HRb86cNh6Rdrx5mbqP68t5brrjDI0iQFQSntirGPjVbEL5v53qALGvweTO+18SVX/9PgGQ==
X-Received: by 2002:a63:f556:: with SMTP id e22mr32044865pgk.189.1625752472618;
        Thu, 08 Jul 2021 06:54:32 -0700 (PDT)
Subject: Re: [Resend RFC PATCH V4 13/13] x86/HV: Not set memory
 decrypted/encrypted during kexec alloc/free page in IVM
To: Dave Hansen <dave.hansen@intel.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com,
 kirill.shutemov@linux.intel.com, akpm@linux-foundation.org, rppt@kernel.org,
 Tianyu.Lan@microsoft.com, thomas.lendacky@amd.com, ardb@kernel.org,
 robh@kernel.org, nramas@linux.microsoft.com, pgonda@google.com,
 martin.b.radev@gmail.com, david@redhat.com, krish.sadhukhan@oracle.com,
 saravanand@fb.com, xen-devel@lists.xenproject.org, keescook@chromium.org,
 rientjes@google.com, hannes@cmpxchg.org, michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 brijesh.singh@amd.com, anparri@microsoft.com
References: <20210707154629.3977369-1-ltykernel@gmail.com>
 <20210707154629.3977369-14-ltykernel@gmail.com>
 <3b5a1bd0-369a-2723-97c1-4ab4edb14eda@intel.com>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <e4508d82-826e-86be-96cf-feecc1b4a260@gmail.com>
Date: Thu, 8 Jul 2021 21:54:15 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <3b5a1bd0-369a-2723-97c1-4ab4edb14eda@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi Dave:
      Thanks for your review.

On 7/8/2021 12:14 AM, Dave Hansen wrote:
> On 7/7/21 8:46 AM, Tianyu Lan wrote:
>> @@ -598,7 +599,7 @@ void arch_kexec_unprotect_crashkres(void)
>>    */
>>   int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
>>   {
>> -	if (sev_active())
>> +	if (sev_active() || hv_is_isolation_supported())
>>   		return 0;
>>   
>>   	/*
>> @@ -611,7 +612,7 @@ int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp)
>>   
>>   void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages)
>>   {
>> -	if (sev_active())
>> +	if (sev_active() || hv_is_isolation_supported())
>>   		return;
> 
> You might want to take a look through the "protected guest" patches.  I
> think this series is touching a few of the same locations that TDX and
> recent SEV work touch.
> 
> https://lore.kernel.org/lkml/20210618225755.662725-5-sathyanarayanan.kuppuswamy@linux.intel.com/

Thanks for reminder. You are right. There will be a generic API to check 
"proteced guest" type.


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 13:57:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 13:57:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153144.282930 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UWc-0002Gs-5H; Thu, 08 Jul 2021 13:57:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153144.282930; Thu, 08 Jul 2021 13:57:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UWc-0002Gl-2G; Thu, 08 Jul 2021 13:57:10 +0000
Received: by outflank-mailman (input) for mailman id 153144;
 Thu, 08 Jul 2021 13:57:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1UWb-0002Gd-2h
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 13:57:09 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.221])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 490ca520-40da-4b9f-9c72-899f7228d3d8;
 Thu, 08 Jul 2021 13:57:07 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68Dv5aiP
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 15:57:05 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 490ca520-40da-4b9f-9c72-899f7228d3d8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625752626;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=GIxhBhKx+asUMGqMeQnvVvWl5d6HJxeGX4Nv35+DEH8=;
    b=gucMe4OjTK3n4Dgw8QfoCDi96ZiLqjrsdwwy4+A5QHUnrFD65lglpJiJbRF0Aapf5r
    f11n9EHVnpbSScwRC+hlGdzt0zmAu8Cmq7fivq582rD1QzAxzCrXrpQ9KF0jPyASv/py
    vVYuESIp3bF550h3e4W2bX7I6IxfD9gN8tt5cqpckf+ElPDX8VI4e7ZFDPrknOrRWmU3
    JhGwAbLWvtESipHOOKaY+DpYibh7VctJwx8mlnF1z+sS4h6dEwjUP8/vhX1cka+z9tyr
    PNfQck39agsj9LY0Ucsaxel8Xq17N8ex3Ybz1Tq9e6Popet/ibyVa5K13CqogXadgIO2
    hVGg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1] automation: use zypper dup in tumbleweed dockerfile
Date: Thu,  8 Jul 2021 15:57:04 +0200
Message-Id: <20210708135704.25626-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The 'dup' command aligns the installed packages with the packages
found in the enabled repositories, taking the repository priorities
into account. Using this command is generally a safe thing to do.

In the context of Tumbleweed using 'dup' is essential, because package
versions might be downgraded, and package names occasionally change.
Only 'dup' will do the correct thing in such cases.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/build/suse/opensuse-tumbleweed.dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/automation/build/suse/opensuse-tumbleweed.dockerfile b/automation/build/suse/opensuse-tumbleweed.dockerfile
index a33ab0d870..3965e7f9cd 100644
--- a/automation/build/suse/opensuse-tumbleweed.dockerfile
+++ b/automation/build/suse/opensuse-tumbleweed.dockerfile
@@ -7,7 +7,7 @@ ENV USER root
 RUN mkdir /build
 WORKDIR /build
 
-RUN zypper ref && zypper up -y --no-recommends
+RUN zypper ref && zypper dup -y --no-recommends
 RUN zypper install -y --no-recommends \
         acpica \
         bc \


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:20:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:20:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153152.282940 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UtT-0005Su-6B; Thu, 08 Jul 2021 14:20:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153152.282940; Thu, 08 Jul 2021 14:20:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UtT-0005Sn-3I; Thu, 08 Jul 2021 14:20:47 +0000
Received: by outflank-mailman (input) for mailman id 153152;
 Thu, 08 Jul 2021 14:20:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1UtR-0005Sh-73
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:20:45 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.23])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e35a0b36-f64e-4aa0-aff7-2977f4108cdf;
 Thu, 08 Jul 2021 14:20:43 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68EKfarS
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 16:20:41 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e35a0b36-f64e-4aa0-aff7-2977f4108cdf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625754042;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=3O4AkGnlRCXNoQoz4cQMzgXir54YFm6vf23izuYy6mA=;
    b=NWxBdwrRlYQQPQlmUx2MVEj4eu0mjIyy2ZOoe+rRwwc0WaBGTbCU4A7uclbr4DZRfU
    bnTdXQ90pwFu9WxK5YkK6pfVuOsQBJltJpI57dAfMbxCaSa8Z6dBe7dGov3gdinJ4Tct
    3R5426X9Jrccy3GKZqmbd0Ltz+BMAeFcDPW7/D5uKkRwrT9xH0ReuoegtxWAtm42FA9t
    KGtGjJ6Ks/L9ufFKzceYQ5ISK+BSw9KzVWo477ZxFocslizU0q3fj8IIAOxsP2zc/ZFf
    U12bG6HsKub7F53vUW4XV/4R40ZdSKjpEzqEFBcW1ShqqDMP5+o72Sg/qtpNmzGomh1a
    /PeA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 16:20:35 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [XEN PATCH 2/2] automation: Check if ninja is available before
 building QEMU
Message-ID: <20210708162035.273e2641.olaf@aepfle.de>
In-Reply-To: <8878bdd2-fd3e-92c0-624f-cb0ee9deb280@citrix.com>
References: <20210707164001.894805-1-anthony.perard@citrix.com>
	<20210707164001.894805-3-anthony.perard@citrix.com>
	<e775d987-939c-e7dc-077c-fc61a2883f6e@citrix.com>
	<20210707223551.5462c74e.olaf@aepfle.de>
	<375823a3-8b49-7aab-ca2a-af219234b5e4@citrix.com>
	<20210708023224.6c05ff5b.olaf@aepfle.de>
	<20210708142309.6d093d7e.olaf@aepfle.de>
	<8878bdd2-fd3e-92c0-624f-cb0ee9deb280@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/Kb_Xg6ELy=NzlVCrl5Q8sht";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/Kb_Xg6ELy=NzlVCrl5Q8sht
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 8 Jul 2021 13:51:49 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> That said, the tumbleweed containers were rebuilt far more recently than
> that, so something is wonky...

After playing with 'automation/scripts/containerize', docker image ls shows:
registry.gitlab.com/xen-project/xen/suse   opensuse-tumbleweed   f9b84e2346=
f0   7 weeks ago         2.27GB

No idea how that created a container with broken content.
zlib-devel.rpm exists, but libz.so is a broken symlink.

I will update the README to list the required steps for updating.

Olaf

--Sig_/Kb_Xg6ELy=NzlVCrl5Q8sht
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDnCbMACgkQ86SN7mm1
DoByBQ//cw4aKDHy8AQmTmIruHHZZKmPJIRWRMVEELtvQw7CdZlYbBB5ovqUSHwE
b925JBVhDrzEq4GtmeIbX3ZOc4FNxIaDWXC8z5bWWWdIrboQnjKseXSk6y/nTc3n
NJm1t6Qoyeba9qSPiuwJQog5odoV6aJZS3oxI39ZIMjx0oaAPRl8p1nHweTsNt8g
hEX28yBdKSa/ZXY6brH7GSsa4jRt3VYvDfHKtRL2Y7FeH0SLCSN/HIzGGh6/ogbA
FMrZC2TjHmhAhZ67L2r6PTIX/D4OHUtqvbuwtzV7I/dGSEk2ICXZuBh/UTNp+oQ+
/gC7vb4hFCP+q/E+r9PyXlK4/yRkLMeruuNU8QwDoRIEjw2eZ+yBqIgyt7kUi5FD
En2/2UccpxiixTnjGcDs5H7Mpc1Zb1Gy8Ccy0FcR/0vynhe+YiptxryVK+V/6rGt
PpBNapyCH2ZKglaDXQ4PZBPkeY/kTvoyZjvSjCTUe25kb2McQIbVlE1w4muy9ycT
QG8ug43+Lum0cUQveFQSEZ0bHSh2Gdbu2WA4RqRIRkOE6zjM41ncqXwt7ElGVJr4
SADPqTcQkhq7Zxh+dIn1XwdA5QOJaqsjIzIAW+IKzA52X2xG0x+6cFwMIzkeCmz3
l2U5q1tb7NTDEXiHp6E1rOEVdUNxpItO/lhqbGbHQ6Kp3GeHYn8=
=Rqy9
-----END PGP SIGNATURE-----

--Sig_/Kb_Xg6ELy=NzlVCrl5Q8sht--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:22:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:22:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153157.282952 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UvO-00068M-Jt; Thu, 08 Jul 2021 14:22:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153157.282952; Thu, 08 Jul 2021 14:22:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1UvO-00068F-GG; Thu, 08 Jul 2021 14:22:46 +0000
Received: by outflank-mailman (input) for mailman id 153157;
 Thu, 08 Jul 2021 14:22:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kKjp=MA=oracle.com=konrad.wilk@srs-us1.protection.inumbo.net>)
 id 1m1UvM-000686-NQ
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:22:44 +0000
Received: from mx0a-00069f02.pphosted.com (unknown [205.220.165.32])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f53345ae-dff7-11eb-8585-12813bfff9fa;
 Thu, 08 Jul 2021 14:22:43 +0000 (UTC)
Received: from pps.filterd (m0246627.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 168EMXX3025875; Thu, 8 Jul 2021 14:22:40 GMT
Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80])
 by mx0b-00069f02.pphosted.com with ESMTP id 39nbsxtkt6-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Thu, 08 Jul 2021 14:22:40 +0000
Received: from pps.filterd (userp3030.oracle.com [127.0.0.1])
 by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 168EKD8h037372;
 Thu, 8 Jul 2021 14:22:39 GMT
Received: from nam11-dm6-obe.outbound.protection.outlook.com
 (mail-dm6nam11lp2175.outbound.protection.outlook.com [104.47.57.175])
 by userp3030.oracle.com with ESMTP id 39jd15rr8k-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Thu, 08 Jul 2021 14:22:39 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com (2603:10b6:a03:85::27)
 by SJ0PR10MB4784.namprd10.prod.outlook.com (2603:10b6:a03:2d4::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 8 Jul
 2021 14:22:35 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d]) by BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d%6]) with mapi id 15.20.4308.022; Thu, 8 Jul 2021
 14:22:35 +0000
Received: from char.us.oracle.com (130.44.160.152) by
 MN2PR10CA0032.namprd10.prod.outlook.com (2603:10b6:208:120::45) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Thu, 8 Jul 2021 14:22:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f53345ae-dff7-11eb-8585-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc
 : subject : message-id : references : content-type : in-reply-to :
 mime-version; s=corp-2020-01-29;
 bh=8+aqNpOIdC336lxqyNc/bD55AhEDMwUsfe+OdCIsvpw=;
 b=LTNyKg14gbyoNV21MAfFLgnpgzRETypOrZqXWbE7dapEYl7lmZFGkO6qG/3uuuioXPXA
 FQX3zpQa0Ao1tFjt35GcZ74JkICBk38jyUVwLU79crA5x/jtXrV3poLlVT4q3Dkod4L7
 5RKScWJC6DyTnmRP5lA1SZmL+ij6FC26z8obUi+NqR2tZqqP19kN/tQGlbLSFJSl7K3O
 12WjDki1feB9fyUo5Ii2B/brLut/+N9nAntfkG7JvkfQrkvHqsHkIhki755viU02cleq
 /3guEjYK92/sopediQKbEP1Anm8CoOfBrxrrm7vFq1zaMKubjhXpIWNVlXaVch+b9FId Mg== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=mTZaeum1WY5qH2L0fakQjhybJgs1q6/zXBLJPB4U5y7JyE6Gvr+FWmFi0wG6mdkLGHnoZwWWW7WEeD4OVJbZSBbGzj5evNpc+eslaxEM8EPO/5mFWJEJk5+incV1a9AbfwIR0VNDYUk0mxsn15PBJzUpjP9AjFz+MnSvsSn/dVyNQQl3ftBppw4B+g3ecuujwlBZaJxo5WCexhxnCTJg8ZPRtK4/2TtJxGcnxWOLw/l6TYxrdhjZlhd6/YZpqdxCa1uuG+jPmB6WUQzV2d3l9+A95+dPTUr4Fj9B0XeYOgRvsjw1aULNjvsQen+5QmpiTBLXz0WKSfkIXk5ef6ayUQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8+aqNpOIdC336lxqyNc/bD55AhEDMwUsfe+OdCIsvpw=;
 b=lNdoIV+XNbb7jYR9JezJDXD8G88AGVIe3KGnp/rz0PJVYLkNKPblJcGTxG/Ip5GRKbjAiFHivxGCurXvAzJhpR9WiEfo8IuACkpylVk23XIBDtX25BueiL4jQUstQ9bUJz0ovPckk9Y4BUk838ceY/xqsF6uKRVwIvwO3W5S4HzOrs5I+u7gXqpuRNuXBod85gbVOBd60BKJVhUHYKCN/MPTGtFdAz9+SH2E4Eal0E4qpXvCwEKttGb6YPXRFlFGeXNePqrmF7JaQCGtnbghS05BXuxCyJ4Tanv3fmgnyW9mb461W/oLzBcnJQeE+OFYS+P1PNW+5BSTGkE4wLULWw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8+aqNpOIdC336lxqyNc/bD55AhEDMwUsfe+OdCIsvpw=;
 b=Avq5tnJoooPOrbPR98xd2+EB6fnWcm17UxXHEErvOc25MKmIoVjbhTK6en1TcDKF+Bs6+1x5n7n8HnKXzlxpSV5qs91VAGEglercYR3GVRUMknbt/tGM7Y+Her/etIL32ZkIMM5muOuxQeatbjwTupfy2qLZLSccF8q9bZOQEpk=
Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=oracle.com;
Date: Thu, 8 Jul 2021 10:22:31 -0400
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Juergen Gross <jgross@suse.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
        linux-kernel@vger.kernel.org,
        Boris Ostrovsky <boris.ostrovsky@oracle.com>,
        Stefano Stabellini <sstabellini@kernel.org>,
        Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>,
        Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v2 0/3] xen: harden blkfront against malicious backends
Message-ID: <YOcKJ6m31tHuq2kh@char.us.oracle.com>
References: <20210708124345.10173-1-jgross@suse.com>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210708124345.10173-1-jgross@suse.com>
X-ClientProxiedBy: MN2PR10CA0032.namprd10.prod.outlook.com
 (2603:10b6:208:120::45) To BYAPR10MB2999.namprd10.prod.outlook.com
 (2603:10b6:a03:85::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d36ba2f3-bf74-4b9b-d202-08d9421bd50b
X-MS-TrafficTypeDiagnostic: SJ0PR10MB4784:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<SJ0PR10MB47849DD12284E1917D44FB4489199@SJ0PR10MB4784.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	NpJNicft54NU0o5bY+ypmRKcSOJzBbttEiPos6zjQgNHWTRB6mv0vygbpsSkhlJBWcLfDP129P2h6ncn4Ao9h0ekIDnbspLQ3QBlo3cbDWJfEIC7rIizcCebUuggqrlhf0G3ugw6BbxJXAQFtHVejXMfg2eenI5RAtDn9T5oKZrbkOOR5BfO1BpTkGRk2c6DXmktXa+nrUx13MoGYRkch6b70jFFVwJQI2F+/ae3bsHJOhQ7Ncx6TXB6jNFwyrdQ4K8TZc1qblpMvwiamDNbJfb12cXOJd5a7LAy1+Ij/If1qYtS47aV1xu7iY7aeLVAGEI2lmg5x/LXUFH/fatCHidvPWI559WRWNZhFG6bP86io3u50+Kl5rquUI5GwNYs2zKVDTsth+xwCAeNdvbTuUN6wy2E5uzRTNT1lGSepZ+tX5EFRaoz7/jLRVRAlks1iZaysOFNVi/y24YBLahyyI6EIscOblnNc6iocZhBMUxTDfJv2g+cmEKo+r+3wO95Z70wbZDqkcqYXAmYsf9nWQGIlez3s+wWGA1IstH1LwlaAUBccQcEOL43yDSGL1JX8uF5QA/wbAGFU9wDowNtwXToysuPc2K3oIQjDQ3ThwJVeI0RCUjWYs8FIKyR9Z0laCsIWQr9AvtBolKGJ23MdgY+hQ9bP/42EyRaGcDtwkTq8v6144XmoqiVQCdmjJPn64/nNgFayKjuLZbYEw18FsafJIOIgeX8rYHER5cEDCHof9aqtLBvtccwJe7p7MytWEcVk4VcjLC7vrlmCzajIIF90bxLCmlgqosgnn8YAu8=
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2999.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(346002)(39860400002)(136003)(396003)(478600001)(316002)(38350700002)(86362001)(966005)(38100700002)(2906002)(83380400001)(52116002)(6916009)(26005)(7696005)(8936002)(54906003)(186003)(8676002)(4326008)(6666004)(66476007)(66946007)(66556008)(956004)(5660300002)(55016002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	=?us-ascii?Q?y3ARb6nCAKV3Czv7MtYPpmokDhR/zrnUzhjSPOK7Rcq027a1q0auvcQfbfRh?=
 =?us-ascii?Q?GrDKA0zJTL9PIf7YUB+svcFOoUY0z/OMzJ5vf73B54cgM4bdTB24ubBak0+d?=
 =?us-ascii?Q?8CcY/ha3JbHxOzDQlDHtMfdRoKq2/M167r7MpgZPWP39CaFnaR/tm1MBVDfR?=
 =?us-ascii?Q?nOBVmeDeYPA6dOn8SmfcOc86unJHDXZt/13wzafPAL5o6FioyRBB81T49BsX?=
 =?us-ascii?Q?NbUaL0M97O1nmigeGpx+PhBuPPawSUYF0BKq+bCmS6pEZX5KzLZ2Lv62ZSxZ?=
 =?us-ascii?Q?5HxGQWqwXDVK9tygyd+zm0QSA0XLv8dfeuHbLgt8lMUjkjas9MNnwaflR5Gb?=
 =?us-ascii?Q?PuboWg/NHCL646vFWy4qpdDCTUmi7ZonVW19jIn8HYWxRgv7esjeePAPPMPY?=
 =?us-ascii?Q?ZkTFe6RMjz67kX03nQKlle5Eu24zIAO+qg0K0cGo1ebELE78Psjym7ccxtue?=
 =?us-ascii?Q?xPJXYgKB0spNZChvX76VetlRiogU5aqvO5fLs/7LLKiYO9OoHDLJSv/5humf?=
 =?us-ascii?Q?tcVYDrs6U62UxAa6EaQROPJbweFBUnDgeh5aQNKFiK5licpny3I2iylvDFsj?=
 =?us-ascii?Q?YGmeR0NaD2v3152+HRZ2jHp5J8fVWNTZ2B2ngxJJUxj1ArYvXXNBy+BOS98R?=
 =?us-ascii?Q?N5v35WC2su+E46NwySSmhNIH3kErwjIwEbPObmXnAUdeMTJA5KXchFPn1rp9?=
 =?us-ascii?Q?LiPb4OmXlNTm4RkttT43mDbJytFDhJVLaxSQtOYsxVXO2PKs2htM/mkxf4qP?=
 =?us-ascii?Q?5wJvNyrY/4KyERZ/3IPI8XiEeWySqoFXb4uc2lTI13xlhzvubYQmS95tGppq?=
 =?us-ascii?Q?Ym2e9g+fpuCzY5iptD3K1YrwbOLEJlvdDusgnCqh50IEThCcGRwaTQYzD6cq?=
 =?us-ascii?Q?mdmW3CXXcSCqTp9ldmeKMjG+bW/WjaP/xp9PjXedqX/Hs0sgQUAb0ehogCbo?=
 =?us-ascii?Q?tCwJAb3dqSWiC41Nz+FK9flmFQJYeWCLS4la9FDY/9X3XKQhpH3sOOKlfaVu?=
 =?us-ascii?Q?U4SfGYWPfUHzIULcelfC0OMyiHLK0jSu8Vc+srBdhyMNxpIo5mcIrd7Il6j/?=
 =?us-ascii?Q?Yx6/sz/FKCpOPaCN81TPqk+eZmh+HFAhvCzBQ+XaNcwOFcAhPo5+h/X4au4+?=
 =?us-ascii?Q?FTDdUCvwVn4knty8ZhJMJmSGDWdfLpUxWcJIX7TF9ypwmNtkEPnuKFB/heVd?=
 =?us-ascii?Q?Tw6xkEuFJy0cVUbSFKneVg5efVxxllAsZuG9yjH4rkDulgogwldYa5IH+v3k?=
 =?us-ascii?Q?KOyrwSO3XR81IQ0kesCX+QMZw6xqLmW3ruN9nfinFlK0g9f/7WgcKQCldVPM?=
 =?us-ascii?Q?49gueOoFptQI5UHmwPf3SHiH?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d36ba2f3-bf74-4b9b-d202-08d9421bd50b
X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2999.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 14:22:35.6637
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: tJft0CievwA0O/A/blsVuPrNFEgcrqjXzukmfT7Q9lg5oa/01dqMykVWDAbazvIS2uYBPocCX29YIdHHDW8kww==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB4784
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10038 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0
 suspectscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0
 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2104190000 definitions=main-2107080078
X-Proofpoint-ORIG-GUID: I-PLq_lY1OLt-zFhG7kTrumscKKdY6nu
X-Proofpoint-GUID: I-PLq_lY1OLt-zFhG7kTrumscKKdY6nu

On Thu, Jul 08, 2021 at 02:43:42PM +0200, Juergen Gross wrote:
> Xen backends of para-virtualized devices can live in dom0 kernel, dom0
> user land, or in a driver domain. This means that a backend might
> reside in a less trusted environment than the Xen core components, so
> a backend should not be able to do harm to a Xen guest (it can still
> mess up I/O data, but it shouldn't be able to e.g. crash a guest by
> other means or cause a privilege escalation in the guest).
> 
> Unfortunately blkfront in the Linux kernel is fully trusting its
> backend. This series is fixing blkfront in this regard.
> 
> It was discussed to handle this as a security problem, but the topic
> was discussed in public before, so it isn't a real secret.

Wow. This looks like what Marek did .. in 2018!

https://lists.xenproject.org/archives/html/xen-devel/2018-04/msg02336.html

Would it be worth crediting Marek?
> 
> Changes in V2:
> - put blkfront patches into own series
> - some minor comments addressed
> 
> Juergen Gross (3):
>   xen/blkfront: read response from backend only once
>   xen/blkfront: don't take local copy of a request from the ring page
>   xen/blkfront: don't trust the backend response data blindly
> 
>  drivers/block/xen-blkfront.c | 122 +++++++++++++++++++++++------------
>  1 file changed, 80 insertions(+), 42 deletions(-)
> 
> -- 
> 2.26.2
> 


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:30:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:30:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153163.282962 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1V2l-0007Wp-Cb; Thu, 08 Jul 2021 14:30:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153163.282962; Thu, 08 Jul 2021 14:30:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1V2l-0007Wi-9d; Thu, 08 Jul 2021 14:30:23 +0000
Received: by outflank-mailman (input) for mailman id 153163;
 Thu, 08 Jul 2021 14:30:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1V2i-0007Wc-ST
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:30:21 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fa27d53c-e3db-45db-a7fe-56386e0518f8;
 Thu, 08 Jul 2021 14:30:19 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fa27d53c-e3db-45db-a7fe-56386e0518f8
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625754619;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=rTjQALzbrCnJJvrn3LSZIzsfY5FFImyYsa5npi49v+M=;
  b=AssUZgVfidBnjSdxDHuNltibY/nV3+N+CTGE7jd8E9psXomUi1+K9n8G
   AsotFuIc0orFQgHJVmeOtmiFN+58WAIo8Sxh5JEAbnqqva2EeRbZHuO0T
   LvkylBE3lDVhWdsStChMnxJ5C/6fsShzhVa009j0f5nDurOMDvDlwDLi9
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 9czKw9DQ0JVk4v3p/m+Ccp4GmpQpFwILCGJET7E0PkXau+JUyOiHp5TcVBGH/5uy6wMT1L2VDK
 YtA7bIR14mbceK4EC0Xq7uO9uHRWEVKAjMRtsnMciLyJPnWNKtWJSsyjQdgW1eROs3dkjGNnim
 n0ODI9WtFXGmHDEgHnRC/imrDYBkSPpBeCwXE66r06BvDBSo1QJFl0iVGQXVxFvO98r5TGQYqr
 uWaVhctckmi/idC5UBwooUntBUjkR2E0RZEcFUg5BZNnG23ATIbGXiAVZ3TzfLLQNyYPpQOPFn
 P4A=
X-SBRS: 5.1
X-MesageID: 47838684
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:VhX3qqu77DYoWVaG4E6f+GPm7skDrtV00zEX/kB9WHVpmwKj5q
 KTdZUgpFHJYVkqKQQdcLy7V5VoIkmsvaKdg7NhTotKNTOO0ADDEGgI1/qe/9SPIVyDygYlvp
 0QPJSWqeecYTYa7beYkWzId6dGsb/3idHR9JyutQYTPH8aGtARnnUJfnftYzsGDXgMdNBJWe
 vR2vZ6
X-IronPort-AV: E=Sophos;i="5.84,224,1620705600"; 
   d="scan'208";a="47838684"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=H9By2E2EHzXToh9OiL2jX09vMYpTimhqb31jNwTIHSYoYXjt9CfFH4bnXH2E/q1OZxkGQyCa6om3DxYiR61W8VDAdZxjrDOs5pgvvozUMrUporZr9ujGA1wfg0irghl5Tqk63j8xYMVYN7AsCmx1UbJNQKfyYH14nYQ2rs2YINsxUpVhVM5HrKU7fCdpubTyKa1Flot2PXAZH1cyDGmql1pWpLDJt2Xhamd0Z2BudG/iBx5aF97xZkdRmBwkojFbXNQfHQu8b2k1OVoe7VU6C7u+5dPHl/CenKpxFVoQcWrvmgtJf53nF4N6lgI8pB2Fr8G/mXdpXQjTLZ+3TexGgQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rTjQALzbrCnJJvrn3LSZIzsfY5FFImyYsa5npi49v+M=;
 b=WAKI3b8sN3bi9Im9Skp9c1N+0JnbAKsSWLvGBaYyZxXevuY6u2BvVzJARrabnZt39e4qLBiT18MwVIj9d9pL3OltHqo6O/ILyCpF1DUUFndjiJ630dvYQPMUEIyeBzua6kGXHM7lIzKf0qNIKG+awYaOs5htevadOAGJLIf1i++d6nnxL9SCz7hkcnkJiXhjM3Md+3qN3udY+lGCKhJh56FzhjoTM85l7SXcZxkyiXq+ldjGJ4XHI8XNK6TKh4JKI7eNttMm+vxI3qfZ9BLjPPnJtqkTNcR6XmYHSnEirOVVFAPBqeN4Pi3TBhGdIQ5duj6S1xfrQ53lsQU+mInqqA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rTjQALzbrCnJJvrn3LSZIzsfY5FFImyYsa5npi49v+M=;
 b=f0sL6Owdcz1t23ZfnLKGpbYE1mAwOgiDWDC7iF9SuVk47YpxjEi89WXKbG8BdUh7LQUNGEYnz0oSLPV38JjCoeunrboe0GDWIfX3/ZEEoXxjvAp2n53xWSIWouvls2u5YlXHAJo5G3vp7DZWzSLjhKcoPgo+zlyZANdh0x8Jfxg=
Subject: Re: [PATCH v1] automation: use zypper dup in tumbleweed dockerfile
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
References: <20210708135704.25626-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <0b16fc43-9b5b-1edb-0e21-024bd9cd9708@citrix.com>
Date: Thu, 8 Jul 2021 15:30:09 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708135704.25626-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0460.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1aa::15) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 13c43661-9434-4211-6300-08d9421ce712
X-MS-TrafficTypeDiagnostic: BYAPR03MB3559:
X-Microsoft-Antispam-PRVS: <BYAPR03MB35593A7B131C33A6BA0F025DBA199@BYAPR03MB3559.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: o7vwkc3lYyZjiFiTgIzgbF34oNABIy+IgDOgyOAsJlZdq+IKWKLWKPEvLACbjboVVltENuMmFjgmi0RZ/4ReFxoiUE9SQNZZdZj8Jsqra9Uu6raR9kqEZmCx0oewnR+QRjUWQ082x4YLOrBBXPWkLaZEWUHaZj1HTLUfVwsrKgI37xi84XSR2Xff6VwNtL0RzOMRHae2Rj+25d1xv1B7LmRltKx+d4dTYA10r5uPItiCJ//2Y2N+omAjdznqoZU3iulTt1Y4rnEuctgmjOy9SV6B0kbOjCzx/JrFgTsyzoCOuiMRcp2WdewFHgdGiCyBRCVEuJpDrq0Ol17SdYNTyryTwnt6HDMAIpwkmCPNKuYFFBl/2v76fDzo/EzcSRsDQRCUTX4NGq1C8Byob21pbVERLzEfks4z7hDC8xJBz157uI6gp4nrYGCyX8UNl+rTW6vPKYSz2HdrSCKBuHupjC2AvCXwGaRMmq+8gNclI8qlD938VF1WLb92J75sDMFTExHm8EUUgqfHyp8U20UsC3DOWkH2FU7DIJIKZvUZBtSdSuAhs70LvuKiw5pjNzt/ckAFjUQkjI3taOGRnst/jWP+2gxjObcLdXSOd2CdPGqZWtFbOY6rj40cB6Dwi+uOZdWHZjdOvUocYl+oU9aEPbqvM7CqYQlG3SaFL7aQqq0k5CWDoCxP1rf2/FiJqKSCfUf3cTVwte4hgVBM9Qahivj/esAzRnWwOuGw3Lyk9S0=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39850400004)(396003)(366004)(346002)(376002)(66946007)(66476007)(31686004)(38100700002)(83380400001)(2906002)(478600001)(66556008)(6666004)(186003)(4326008)(26005)(6486002)(53546011)(956004)(31696002)(5660300002)(316002)(2616005)(16576012)(4744005)(36756003)(8936002)(86362001)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 13c43661-9434-4211-6300-08d9421ce712
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 14:30:15.5283
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: GxIMGa3s2u+McFeliS0PGfFzjPB51KCIKnER4IBsI7EGGHAwBzcN9nkftKOwFpL3oBY7XSvm0EfKOVku8vqefE0uYqtpOkb9G1bkN/K2yGU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3559
X-OriginatorOrg: citrix.com

On 08/07/2021 14:57, Olaf Hering wrote:
> The 'dup' command aligns the installed packages with the packages
> found in the enabled repositories, taking the repository priorities
> into account. Using this command is generally a safe thing to do.
>
> In the context of Tumbleweed using 'dup' is essential, because package
> versions might be downgraded, and package names occasionally change.
> Only 'dup' will do the correct thing in such cases.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

Have you rebuilt with this change in place, or shall I do that after
committing?

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:34:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:34:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153168.282973 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1V6Q-0008Cr-Tn; Thu, 08 Jul 2021 14:34:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153168.282973; Thu, 08 Jul 2021 14:34:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1V6Q-0008Ck-Qo; Thu, 08 Jul 2021 14:34:10 +0000
Received: by outflank-mailman (input) for mailman id 153168;
 Thu, 08 Jul 2021 14:34:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1V6P-0008Ce-Sg
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:34:09 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.54])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8d937c64-dff9-11eb-8586-12813bfff9fa;
 Thu, 08 Jul 2021 14:34:08 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68EY6avp
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 16:34:06 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8d937c64-dff9-11eb-8586-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625754847;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=ZqCEmnNfSXnJYVa9GBuB7RsNZxVDoHcpp8odhGs654A=;
    b=mgv7Jjw0zb/uXbFkDPnbd7ZQXSW1/HeWV9/dWOyBser8v7l+Ovxm6OvNy66/8dl2ly
    YIzKoSizNtDxfRj22mMny7s6k7nQOjvRUpqP/mHr1oDnjHH8FaXFKY6X1amBZr6RJSBu
    SH9+it3ZnCTjV4i42hJq+gkNQgmlEbMJuvTClu2MMgV+wNDo1eF52wyy5UXGUxwCt5s2
    xDEababAubC4aQNsh0IShYj4vza3KzMRuW6fVlm4nGBB1REaBUAqpFdr17m4kpBQ3177
    uVtNKlKAuavf/3gy4e625iu7aCQyH0XUUJNvNtzDmXCwYWfGHcEhF5+i5dXEv0Ee5D69
    y0SA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 16:33:52 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: use zypper dup in tumbleweed dockerfile
Message-ID: <20210708163352.08da715a.olaf@aepfle.de>
In-Reply-To: <0b16fc43-9b5b-1edb-0e21-024bd9cd9708@citrix.com>
References: <20210708135704.25626-1-olaf@aepfle.de>
	<0b16fc43-9b5b-1edb-0e21-024bd9cd9708@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/135sV0iSmbPhKtRVL/Jo=XR";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/135sV0iSmbPhKtRVL/Jo=XR
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 8 Jul 2021 15:30:09 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Have you rebuilt with this change in place, or shall I do that after
> committing?

The current image has the latest snapshot 20210706, so today it has no effe=
ct.

I'm testing this new build and will update the README before pushing an upd=
ate.


Olaf

--Sig_/135sV0iSmbPhKtRVL/Jo=XR
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDnDNAACgkQ86SN7mm1
DoC1eQ/+Nydk2MqIGo7TOItHfsljlvWnLwel7deuHi1i7VeyX3WAiG6lpPQkeaqQ
wfR8HLywBRsUqvhti7W7fCjDrc4EglxPdZH1Mo2k0QoZ9TqJKT8uE1By8GhhlzqA
rpyusnjMGJAk9ivzhmBv+Hp5T4CB5k+97Mq5c46/Ned08QTri7bVUvAQw5JWmcCG
Lcoc8t3Zz5+H6ucxLQF2VyKasDquVgufC7EqPESxILYzO1DzI8j710P1HnLwW92l
E+sM3iGRwaeAl/zwKmO6byUvjg4h5g0Fe5M16uAy2f11qVXz8VXbaoqyurI6PWcW
FQCoyRyLTICBObqFg1rQtTwJu+c1UCp8ORXn3KekgLjGZOJ9zkU07sboJkbtbXFa
IaTDcN/44+8PQ5M7cot8dTJhr6ZwUuQDaiAMlj1wsRj2gBsdFpmsfWujeuhzzWa6
9Gz/E6q+5TzsiEVf0N4AQwJY1Cg4X9EoSX8EkEnFGKhXr7DijHjaG1RIBKbmwSzq
DV/y85O+2032/F6KPdqvDhj5V43Ucuj3mu2bcKu3mzEenizugUkVzvQmcdWQGbr9
ZIlVPZdnvfu+HTZyj0qSoziCU2TH419u7d0F7qxTferwdwlrzquUg7pSBgqf1Pm0
GibcI5RgQSS/4nEAuqzl0dMLuOePB68K2cPjCNhq1WtrO2AVwkA=
=TovD
-----END PGP SIGNATURE-----

--Sig_/135sV0iSmbPhKtRVL/Jo=XR--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:40:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:40:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153174.282985 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VC6-0000el-Q2; Thu, 08 Jul 2021 14:40:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153174.282985; Thu, 08 Jul 2021 14:40:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VC6-0000du-Jm; Thu, 08 Jul 2021 14:40:02 +0000
Received: by outflank-mailman (input) for mailman id 153174;
 Thu, 08 Jul 2021 14:40:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=pQIU=MA=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1VC5-0000VK-Gh
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:40:01 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5f040f66-dffa-11eb-8586-12813bfff9fa;
 Thu, 08 Jul 2021 14:40:00 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 25C2320200;
 Thu,  8 Jul 2021 14:39:59 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id D6F431340F;
 Thu,  8 Jul 2021 14:39:58 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id HcdpMj4O52A0BgAAGKfGzw
 (envelope-from <jgross@suse.com>); Thu, 08 Jul 2021 14:39:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5f040f66-dffa-11eb-8586-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625755199; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=tGlyjvVcdB+UHOiEghzdT2fFrllDod0pSZIRp6jpzl8=;
	b=c/JwAqgM48EfOa/u5FRuokNdPDoU7kBWVvUIilCV5TsflcU/c9wsM3Y9XAcv4W8DU2YL8M
	sN++iTROuwvFSwSlEJtjPAvpWM20rQxYWhMQAmlLPh1pUNVSFcpZl5mEbFoHV9A9+jm3ns
	hjdjkuAkDV1EOVRo+E3w2UU+INzWll8=
Subject: Re: [PATCH v2 0/3] xen: harden blkfront against malicious backends
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>
References: <20210708124345.10173-1-jgross@suse.com>
 <YOcKJ6m31tHuq2kh@char.us.oracle.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <0baeba93-39eb-2bae-1abd-d4e17e6e025e@suse.com>
Date: Thu, 8 Jul 2021 16:39:58 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <YOcKJ6m31tHuq2kh@char.us.oracle.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="AUb03P1MDMichPalfOxIhOW2NvcAWdu9W"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--AUb03P1MDMichPalfOxIhOW2NvcAWdu9W
Content-Type: multipart/mixed; boundary="tw3RkRTgaKFDYv3rDVnbl8TQ9vsKG9hLo";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>
Message-ID: <0baeba93-39eb-2bae-1abd-d4e17e6e025e@suse.com>
Subject: Re: [PATCH v2 0/3] xen: harden blkfront against malicious backends
References: <20210708124345.10173-1-jgross@suse.com>
 <YOcKJ6m31tHuq2kh@char.us.oracle.com>
In-Reply-To: <YOcKJ6m31tHuq2kh@char.us.oracle.com>

--tw3RkRTgaKFDYv3rDVnbl8TQ9vsKG9hLo
Content-Type: multipart/mixed;
 boundary="------------E2D77528BDEDE4B59B780699"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------E2D77528BDEDE4B59B780699
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 08.07.21 16:22, Konrad Rzeszutek Wilk wrote:
> On Thu, Jul 08, 2021 at 02:43:42PM +0200, Juergen Gross wrote:
>> Xen backends of para-virtualized devices can live in dom0 kernel, dom0=

>> user land, or in a driver domain. This means that a backend might
>> reside in a less trusted environment than the Xen core components, so
>> a backend should not be able to do harm to a Xen guest (it can still
>> mess up I/O data, but it shouldn't be able to e.g. crash a guest by
>> other means or cause a privilege escalation in the guest).
>>
>> Unfortunately blkfront in the Linux kernel is fully trusting its
>> backend. This series is fixing blkfront in this regard.
>>
>> It was discussed to handle this as a security problem, but the topic
>> was discussed in public before, so it isn't a real secret.
>=20
> Wow. This looks like what Marek did .. in 2018!
>=20
> https://lists.xenproject.org/archives/html/xen-devel/2018-04/msg02336.h=
tml

Yes, seems to have been a similar goal.

> Would it be worth crediting Marek?

I'm fine mentioning his patches, but I didn't know of his patches until
having sent out V1 of my series.

I'd be interested in learning why his patches haven't been taken back
then.


Juergen

--------------E2D77528BDEDE4B59B780699
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------E2D77528BDEDE4B59B780699--

--tw3RkRTgaKFDYv3rDVnbl8TQ9vsKG9hLo--

--AUb03P1MDMichPalfOxIhOW2NvcAWdu9W
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDnDj4FAwAAAAAACgkQsN6d1ii/Ey/s
NAf/ZOrEbCLL/q4BQvH8BR1lZ/HY0KLRN/w4xFr1kbbQOWLnDsGCWo/iS/MQNGP2o4SuvDxqcmDi
VC469qLrYuaclP2V/Qmz3iqUVil1QNOg4Pp/nJEl//7NTAQ+MS5hPn7cXHPCl5ReD+78vFR2LeXm
9VsdyVToIbL28ue4KRMRRq4Dql3f8iXqQfRA2omJK2mpOoktxeB2vFrpJ6D7yhc40zdyNokjiUYg
oJlHhrG3tuZoXaHPHvrgT1/fnhf1s82+FBx4fO9E3gOQs2QC1MP7I+obRGtOuDyNnz8X1WhUgRjo
weVQgoDkNtwd3H7oAWAQiDD+KyAb2gik9vBkdnvqqg==
=v4HE
-----END PGP SIGNATURE-----

--AUb03P1MDMichPalfOxIhOW2NvcAWdu9W--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:40:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:40:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153177.282995 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VCm-0001kY-0P; Thu, 08 Jul 2021 14:40:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153177.282995; Thu, 08 Jul 2021 14:40:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VCl-0001kR-Tc; Thu, 08 Jul 2021 14:40:43 +0000
Received: by outflank-mailman (input) for mailman id 153177;
 Thu, 08 Jul 2021 14:40:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=sNSP=MA=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m1VCk-0001kH-3h
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:40:42 +0000
Received: from mail-pg1-x530.google.com (unknown [2607:f8b0:4864:20::530])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 703edd62-5722-46bd-b49b-278a95260bed;
 Thu, 08 Jul 2021 14:40:41 +0000 (UTC)
Received: by mail-pg1-x530.google.com with SMTP id s18so6171343pgg.8
 for <xen-devel@lists.xenproject.org>; Thu, 08 Jul 2021 07:40:41 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:18:efec::4b1])
 by smtp.gmail.com with ESMTPSA id
 h20sm3216729pfn.173.2021.07.08.07.40.26
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 08 Jul 2021 07:40:39 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 703edd62-5722-46bd-b49b-278a95260bed
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=YXjZj7OhvPZJaAtT6Qwq7/8ZjjZCmfNtMSr8qDj8MRU=;
        b=ayW8QQM2efuvpdH0iOtsj9sDatgzjNkhl4+y/ouwe04BZcpt7tSpZSztZE1HcOshdP
         QXaUNAf/1sngsBP+5ZL0dubNDykY4vKK6b9Wmf6V3NS5iLDuzZvWuWys1GP5fH3k/OTC
         tYDRBkngjXQYqPF3DQewzYEvp4aC50Y/xFZW27B7I7FoSeruMrEakyjTyq4nU9lq5OXG
         9pEOEVcjBjM/2JuAGoOCNl8yharry3mPga7LZqh8ptcnsE3cQjXBDpSs+J18TjrzoZin
         UJfMRAaQiH9cX09/xDZhBpWcjIM9jra7EdcFVO0s5QSQNR3e2+qLq6ocQLn3NXgEDy83
         /jFw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=YXjZj7OhvPZJaAtT6Qwq7/8ZjjZCmfNtMSr8qDj8MRU=;
        b=oODMI4ts+D+0Q1/PxZWfwQh7CM14Q9dTPS0p3/y0GrnQV7cn4Ud1oTETLhwBrLnBzn
         t075nLR/ZYJlPzgV/zh/FMnSunILH146pTqnc2z4DApabjS77yqZvYcQQwc9LPinTiwv
         johVf70ncw63EIdnwqi5zDghaPcvQFmZL/tY6IdDWOpAMys7TrJSN8fcdFfQM9FjXRjw
         cqyjzTzVnreaCRD950/evT5SYAJNU9fIgoZZ7Y7+cldDkmhn9rgax+K3k61/P37d8/Fh
         fnbrzHbe3VlnRZQcFdScw8WVQYXVeTgkE8LQC8W+cUMMlbXRnPv5ux+IlzIuTGK6n69f
         /7sg==
X-Gm-Message-State: AOAM533T4zpPcjWQKMhFlHzR7xeffCzMb8NgwDkIzpPhLSeEexpOBrfX
	+gOJn10TyV9qvsL+MdASaME=
X-Google-Smtp-Source: ABdhPJwsdOgUCGltloBXaOdJeRrQgvHkqG47NpBLcd9gNcAJ5PSk2V3aVVR6tD13omBoKJiA4S0mBQ==
X-Received: by 2002:aa7:818a:0:b029:309:a073:51cb with SMTP id g10-20020aa7818a0000b0290309a07351cbmr31830476pfi.40.1625755240540;
        Thu, 08 Jul 2021 07:40:40 -0700 (PDT)
Subject: Re: [RFC PATCH V4 01/12] x86/HV: Initialize shared memory boundary in
 the Isolation VM.
To: Olaf Hering <olaf@aepfle.de>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
 wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
 mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
 dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
 konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com,
 sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, rppt@kernel.org,
 akpm@linux-foundation.org, kirill.shutemov@linux.intel.com,
 Tianyu.Lan@microsoft.com, thomas.lendacky@amd.com, ardb@kernel.org,
 nramas@linux.microsoft.com, robh@kernel.org, keescook@chromium.org,
 rientjes@google.com, pgonda@google.com, martin.b.radev@gmail.com,
 hannes@cmpxchg.org, saravanand@fb.com, krish.sadhukhan@oracle.com,
 xen-devel@lists.xenproject.org, tj@kernel.org,
 michael.h.kelley@microsoft.com, iommu@lists.linux-foundation.org,
 linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
 linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
 netdev@vger.kernel.org, vkuznets@redhat.com, brijesh.singh@amd.com,
 anparri@microsoft.com
References: <20210707153456.3976348-1-ltykernel@gmail.com>
 <20210707153456.3976348-2-ltykernel@gmail.com>
 <20210708073400.GA28528@aepfle.de>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <9b5d6843-67c5-066e-0997-995ec77e06b2@gmail.com>
Date: Thu, 8 Jul 2021 22:40:24 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210708073400.GA28528@aepfle.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

Hi Olaf:

On 7/8/2021 3:34 PM, Olaf Hering wrote:
> On Wed, Jul 07, Tianyu Lan wrote:
> 
>> +++ b/include/asm-generic/mshyperv.h
>> @@ -34,8 +34,18 @@ struct ms_hyperv_info {
> 
>>   	void  __percpu **ghcb_base;
> 
> It would be cool if the cover letter states which commit id this series is based on.

Thanks for your reminder. I will add this in the later version.
This patchset is rebased on Hyper-V next branch with Swiotlb 
“Restricted DMA“ patches from Claire Chang <tientzu@chromium.org>
 
https://lore.kernel.org/lkml/20210624155526.2775863-1-tientzu@chromium.org/


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:44:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:44:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153185.283006 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VGj-0002Va-Hs; Thu, 08 Jul 2021 14:44:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153185.283006; Thu, 08 Jul 2021 14:44:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VGj-0002VT-Ev; Thu, 08 Jul 2021 14:44:49 +0000
Received: by outflank-mailman (input) for mailman id 153185;
 Thu, 08 Jul 2021 14:44:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qibP=MA=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1VGi-0002VN-2b
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:44:48 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0a18c13a-dffb-11eb-8589-12813bfff9fa;
 Thu, 08 Jul 2021 14:44:47 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0a18c13a-dffb-11eb-8589-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625755487;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=VuBRQZuwfmzYd2jyatOEf9/HhhYWaHC9/FW4ECcjKr4=;
  b=WyuDRvCGiS97ZZ14NY9MrT6KJJFauAJtP46GgDCLvgqlVLbL77VgrORd
   CI82eVF3Al3JqGRs3wts2pMGFvziaMig+7N8lKmxp9qj+/qAANEtcwbss
   cAGUa2poEZ5WHjgAdNzHLObC41SGOiLaAVNZbg9A/HTQFgSKxvjbboitt
   U=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=hardfail (body hash did not verify [final]) header.i=@citrix.onmicrosoft.com
IronPort-SDR: fvLg16k/u0ocCACGWwZsL6jfegdqtSdy/QNXVmKRnvunogikkVlrALMf7eZC9xcwEJCXuMF+bb
 aB9Ue4zQkxM4/d+FQSDnGFYj2KNZ3ZBjdWgRB+psqGoG2Prtw2dj3kKq4YVOljneUCx/N+84i8
 SMaXsDmxT48WtpwGeGD12BWEx97Lx65fQqynFspJdW5tbuDXh4w0DU36Zc4im0LNQFvi9o0nns
 KIXprfs3RVzMftKArW8on7wq9856PBZ/YRqbdyfB4IOWqYkk33571QgR+sb465q6KcVkAFk1z6
 2G8=
X-SBRS: None
X-MesageID: 47840050
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:/wYjgKnfIVHfKIbv+v0VWo3GwHzpDfPPimdD5ihNYBxZY6Wkfp
 iV7ZImPH/P+XYssHFJo7C90dq7MDbhHP9OkM0s1NKZNzUO11HYSL2KgbGN/9SCIVyIygc+79
 YGT0EWMrSZZzQUsS+Q2njaLz9U+qjjzEnev5a9854Cd2BXgwwK1WpEIzfeNnczaBhNBJI/Gp
 bZzNFAvSCcdXMeadn+LmUZXsDYzue73a7OUFojPVoK+QOOhTSn5PrRCB6DxCoTVDtJ3PML7X
 XFqQrk/a+u2svLgiM0llWjpKi+quGRh+erN/b8xvT97Q+cxTpAUb4REYFqegpF7t1Hpmxa0e
 Uk6C1QRvibo0mhBl1cJnDWqkvdOOJE0Q6g9bbfuwqUneXpAD09EMZPnoRfb1/Q7Fchpsh11O
 ZR03uerIc/N2KzoM3R3am5a/hRrDvGnZPiq59ts1VPFY8FLLNBp40W+01YVJ8GASLh8YgiVO
 1jFtvV6vpaeU6TKymxhBga/PW8GnAoWhuWSEkLvcKYlzBQgXBi1kMdgMgShG0J+p4xQ4RNo+
 7ELqNrnrdTSdJ+V9MJOA7Ae7rHNoXpe2OxDIu/GyWcKEg3AQOyl3es2sRP2AiDQu108KcP
X-IronPort-AV: E=Sophos;i="5.84,224,1620705600"; 
   d="scan'208";a="47840050"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Kt8vLc420I3HtW7b4ysn5acSWyxwUxqZQ+tD4xSSLeIawf8dbARLodCL6Qdrvkp1mQt7/OytveckLnrJqkVkT5Hydq77F0JoOgkIx4Nx6ARr8tmAs8twgvu+aw1C9ToYVttZCR6cT4PSBNvhm/QrxUvby9KDOoLgD2oonFP3TiZR6FV23Oi26mgD77AHZkuFQjWebiA/2M3ylamkKHqayphr6GnJza2mxLleexGGggopJpM3TScV4EZxUi/Jidv+X8+c3nVUKxbnkC+L3SnrGcbt0bNfea+fnMAKKWOqbKnaS21ThnZK/JEnsCILatIPRT0yB/+1Wr7c6YEugFaKCQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qGBhDckLYKwKxdc6dYJ3hX2aWc1DJk6+8Nd6l9Ijz3Y=;
 b=UmL9WDOKN3gasTbPKA3/vTRx+qeqVaO8IzN5ybKjtXej1NeBYwzH3ZxmfF00OGNmu5ywuk7SVDK8vth+sH57Bhs2GpdmJLQgvRyDU9W15g53CfCoykBojKzPoFbX9ERFcN3W1JeZAiteL0vMRFAnxELuggU4rnPKqzn5Mstj+TNmpFfjWhK12oWmVTxxJMoKktf1iBriUIFoYJa0DD8BdAZ3huHbsTQXe2stA2bs1ScRlPZ2aEWrnKoLYqThPlmvF5ryc6/oPLloKSCC9arQRO5VvQm2rv5evo1UMrA5gTxNkvi5CE+CR0Ui4NwiINWs7TLQ/W4GHxMx7TuEI5YT9A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qGBhDckLYKwKxdc6dYJ3hX2aWc1DJk6+8Nd6l9Ijz3Y=;
 b=B23/zKlHnVQUhAs1F7a6/ivySUZ/Vja4Fbhy8GhqLOICA6nVOm2nV4xDpKaAWeY9h6V6oVFgwlEvXu2PPlDvJ0W1ldEr/udyNzGXw3xHgBbCK66oYIKMaKe4LoUtzgg97YtOYeoEn7SdV9YReyTyr6ZLhX3Ou/XY9TZ5jUvJV10=
Subject: Re: [PATCH v1] automation: use zypper dup in tumbleweed dockerfile
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
References: <20210708135704.25626-1-olaf@aepfle.de>
 <0b16fc43-9b5b-1edb-0e21-024bd9cd9708@citrix.com>
 <20210708163352.08da715a.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <5710b7ef-5779-6a60-e679-86aced373f4a@citrix.com>
Date: Thu, 8 Jul 2021 15:44:34 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708163352.08da715a.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0482.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1a8::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bc3cbd0e-365e-48b0-a158-08d9421eeaa4
X-MS-TrafficTypeDiagnostic: BY5PR03MB5345:
X-Microsoft-Antispam-PRVS: <BY5PR03MB53452AC555D50D42D4A5AF3FBA199@BY5PR03MB5345.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1284;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: PP3ir9F6a/b+Y+GDHNww9Lz8OprcO/DfawALzKaN2hWRuw77boXh4FQuZF9Uo4CsgL/Yx8R08oAmY5t5Qyyss3yAjZMk2qap9SmL9XTjnlMKBxM4jLcTlD2x7M+G/omotyZWhvBFYqcbTaoJyA+4a+KFbhtBsbLYIlTQXcuqQ796HG5PYbe8JjDGdQhj7yX4mF/7x14vFa2N1/Z7t/uLR/FBRcGtA5FnSI+2JgbTDxtLlLViEyDZcL1ChL4XvLkAQyEpOzcDY8jAWshcMOq2a4f/nRO3SG/0d9pezChVTgDPxQL2V/sXuNHbQJvxZH+KYkk8Fp6WG4ri2QaAbQR9b1FgmZBr10jeTEBteGdCCYCaHVErUsh4KjzAZbYQitlThDgZog3sRDkRsYChAP1+h/tv2GN9EzyIxcuUAW1SoQsRl5mPeDf3oiPZPxxQS53otlqU1FqaJEISFogOET3HotSYu+nsjSImUseqkfXgEMXOY1UsyCJXDtkWxqlnmYLRHuf1OplBTMWh5G2CIwYciAbxEq3ec1UaNs9dY0KphfS0+noAMLIKJaEu7Z5cjckabKSyDf/mTmsQm1Bg2lQs1xoCZ5B1ca0PdkZY8OUKvP2RDNGT+bO261bTgtUP8tlYwFewEVbdAs0Qk8j0nJmYsAyfrzCz5E498i5PEI7ju+yQghl+jqxjFy8VzJ8j4UHZGUatenl1Hsy7s+SMUqMYb+kWic2B9MGpNKIbDisC1og=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(136003)(39860400002)(366004)(376002)(83380400001)(36756003)(6666004)(6486002)(66556008)(4326008)(86362001)(31696002)(66476007)(31686004)(16576012)(66946007)(316002)(6916009)(38100700002)(4744005)(5660300002)(8936002)(478600001)(26005)(2906002)(8676002)(186003)(2616005)(956004)(53546011)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?Windows-1252?Q?GXJMAKhW42qHhKTgfyHgLwuSsMSuE5tBjvsLKsiJYSOLOwmrLpMfLNM5?=
 =?Windows-1252?Q?REbCNHk2Yq4ZQyaIFXTh4W0XuGV0v+Q5tQntlsvinQWvmFMeur08WMw+?=
 =?Windows-1252?Q?d1f5x+vYEBYUGsvebvE4rryFZeLc6lFA1mGg43+xaXr61U+xsdeQ2ERv?=
 =?Windows-1252?Q?4iG+9l0sXqFBXmh4MKUczqklHhbzvRrIJ65x7yw+fKW41F2KY1njjr39?=
 =?Windows-1252?Q?EtAWUTCzcWgaoHOFeNzlRa3/DWrMlcgXxGGfaUpIt7NnkZQouVj+lU0d?=
 =?Windows-1252?Q?B0yM/PXNHssp/DvsifMu1a+akHnRGJOrkAqWY/+QxpT0unZjDC2jbvHb?=
 =?Windows-1252?Q?9T4Ld9+DlFydhcTX9ogSMQyCzOIIAPeyqmn9IyU253ZMEPlOVh7Hf1Aj?=
 =?Windows-1252?Q?S0o6LMxBsDXe9l6UWFJzjV5ey8jH11WZ5ND22V1pVQbmlxzGasvdu3Hf?=
 =?Windows-1252?Q?JPgypOIjv1it0fBM7OCTPX8zNu4TJkE04Dq5NVFe9PcAVHgkaT4/nKzC?=
 =?Windows-1252?Q?TKtPh700iuGHoa7bxfbnUh1lJwcaBIVTfsKkLADvymFLgoZe9ZNx7ZSY?=
 =?Windows-1252?Q?E88F7qZfHdgEIYQrCnPgYP3wouaV0MI5ZJYRsC5B48/GBY6TCjAQj2C7?=
 =?Windows-1252?Q?swNHw8M98KjQQ5BA0EF5NjBCu/OkGKrZOdcKBO9fW4Ubu/7jNgkXPoXf?=
 =?Windows-1252?Q?CBbx/ZhH8tpJwprRnTuXhgjQOy9jszLLsMmoJevTAMXuTqpWWeNy5c7U?=
 =?Windows-1252?Q?VmyURfhiRaeNJT6Fv5pQEcOg+4rleRPkRk1PpoKE6WyJpdIiSahk0mYq?=
 =?Windows-1252?Q?XYKzdmSxaDjB4y2u7msVz+QA8uq1zt+kTzXDaXC5eSiJ8lebv+9q9jmW?=
 =?Windows-1252?Q?x/+i8oEj3zxle97cMsUlYKTtOZ6o3nmUjULHpPOAJ0x/usIx0tL3HjbA?=
 =?Windows-1252?Q?pmax0K4T2dGbEjmJUzm+/hpsetODpSViRXtwZSimRhGdI+MnDmj1mWEK?=
 =?Windows-1252?Q?xJx7JAZyyg8CHd6ilNQXcgjVu83zpoWCKg9w+Oru6cCfRIzKaU3i6MA2?=
 =?Windows-1252?Q?RRgQob5U+4aPmFWJciSjwV8+ROYoe/1OJ2NRisCq9zsfT4ji1Ol81xWy?=
 =?Windows-1252?Q?HJGdlMlj8GwLLQSofSaY6d2p/RcwJHcFK6GWS18FYm8yspTdXQh+lLn4?=
 =?Windows-1252?Q?qZgQGLZ11c3NeM5/ieDERBCCxlcud7+g+En/D5pfuHTsoBzkGkWMb54m?=
 =?Windows-1252?Q?/XEgCEjq4CQsLptEfJkFZsiELmeclwgc6RlDDsfd6obP3fVSj1oSxpZi?=
 =?Windows-1252?Q?ENCxTsFYEN9hQzkBE7ocLNybYkDKl5bGWozdTwhjEIadnV8A/CbEtn0g?=
 =?Windows-1252?Q?muZ98macXLIe7SPwqCj7GIql4bhEfhV1s3J1NAf/ExmfplbdUWiz0Mpp?=
X-MS-Exchange-CrossTenant-Network-Message-Id: bc3cbd0e-365e-48b0-a158-08d9421eeaa4
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2021 14:44:40.4034
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: jUkK7mGrpxISDy9v10ex+eVG2Cj4R7jHr4jONVaTRQRK4JGpkinDzEmTZiA/0prO7K3gRa3V5zTs6pWlTFAkOh6Fmr189oU4bIYvlnSEv6g=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5345
X-OriginatorOrg: citrix.com

On 08/07/2021 15:33, Olaf Hering wrote:
> Am Thu, 8 Jul 2021 15:30:09 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> Have you rebuilt with this change in place, or shall I do that after
>> committing?
> The current image has the latest snapshot 20210706, so today it has no effect.
>
> I'm testing this new build and will update the README before pushing an update.

Ok. I won't commit this patch yet.

Please include it in a series of any/all changes to the tumbleweed
container, so we can commit all patches around the same time that we
update the live containers.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:56:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:56:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153192.283018 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VS6-0003yA-Mm; Thu, 08 Jul 2021 14:56:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153192.283018; Thu, 08 Jul 2021 14:56:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VS6-0003y3-J8; Thu, 08 Jul 2021 14:56:34 +0000
Received: by outflank-mailman (input) for mailman id 153192;
 Thu, 08 Jul 2021 14:56:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1VS5-0003xx-KQ
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:56:34 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.54])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ae7f1dc2-dffc-11eb-858b-12813bfff9fa;
 Thu, 08 Jul 2021 14:56:32 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68EuUb33
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 16:56:30 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ae7f1dc2-dffc-11eb-858b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625756190;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=GqJyxamRDB5rxjDIiXc2b/W8Owo3jcxpls/DUmsB3sA=;
    b=Wr4CAdfmpOsIdifcb/JZ2AqXxqmzCNwQGlxXQKBRWUFqH4WoXyidB5akftXQRbkw9T
    vPsyqoaMBagoYoXwfYrFnHzTEd7pRe7LDAe0eg784N9/p48uDjnNCy/66DHdpbolbY+P
    J5FLXeMEW5Locri258PcR6NWFeHrdIxd3OiB1boiRFnUhjeGRzxVuJ6znhK+JMKabv5M
    uBfTzZ7jQvAVenpO6LK2UNBxgrgUMtdyBoiR1mRQ2CnCdIlPQn0KmqdmjgdiuiL3QjJN
    piH2EHUhtwY02egkROWOjMDuyukCHMbKIxK1oQc7qNZhLoVH1B/0evPznMyxqoeSMwdd
    fp8A==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1] automation: document how to refresh a container
Date: Thu,  8 Jul 2021 16:56:28 +0200
Message-Id: <20210708145628.8902-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The Tumbleweed container should be updated often.
Describe the neccessary steps how to refresh and test it before
pushing the new image to gitlab.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/build/README.md | 13 +++++++++++++
 1 file changed, 13 insertions(+)

I did not actually run the "PUSH" command.

diff --git a/automation/build/README.md b/automation/build/README.md
index e1fb3124de..7f33ea077b 100644
--- a/automation/build/README.md
+++ b/automation/build/README.md
@@ -91,5 +91,18 @@ you have access to do so and have your Docker logged into the registry.
 To login you must run `docker login registry.gitlab.com`. For more
 information see the [registry help].
 
+This example shows how to refresh a container for a rolling release
+such as openSUSE Tumbleweed. Login with the gitlab.com credentials.
+
+```
+docker login registry.gitlab.com/xen-project/xen
+make -C automation/build suse/opensuse-tumbleweed
+docker image ls
+env CONTAINER_NO_PULL=1 \
+  CONTAINER=tumbleweed \
+  automation/scripts/containerize bash -exc './configure && make'
+make -C automation/build suse/opensuse-tumbleweed PUSH=1
+```
+
 [registry]: https://gitlab.com/xen-project/xen/container_registry
 [registry help]: https://gitlab.com/help/user/project/container_registry


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 14:56:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 14:56:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153194.283029 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VSS-0004Pr-04; Thu, 08 Jul 2021 14:56:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153194.283029; Thu, 08 Jul 2021 14:56:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VSR-0004Pk-Su; Thu, 08 Jul 2021 14:56:55 +0000
Received: by outflank-mailman (input) for mailman id 153194;
 Thu, 08 Jul 2021 14:56:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1VSQ-0004OF-Qv
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 14:56:54 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.166])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 264e25f5-6f9d-40c3-919f-3c030941e29c;
 Thu, 08 Jul 2021 14:56:53 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68Eupb39
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 16:56:51 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 264e25f5-6f9d-40c3-919f-3c030941e29c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625756212;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=as8CzECp3VUH0KQhsm3sCfDW5/hNDE73Qf/G7ueUrrU=;
    b=Agnn9Oib4ufeF1ACHY9GeRPMgCZmth5gLwWF9O1sTxZn3qf4RRdTYNpbdRTmidbXOC
    zGvHgEg27m5s4JYjg+15Ich7P0gqcNd8iaIG8O381rDOxbqHke63ISHVp7Gd8SC+d6U0
    j8UUg+Q61P5NDntyoiQ8x75HBKWQGwYvBt/U274i00Q4ehhZvjBfawvmVJc8euOwbu6c
    W0KByl49E9AaRCglfd2qyn+8F1OPJ4lyuXIvxFJpXMC49ya9v75eMDvXnsFMKEKQx5Ic
    WywUo5f5ctLcd0MnCAWk++jcxTXN/bIFgAADzeHutu2riuGhMGbvGiY6+JyApierA3Pr
    CHeA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1] automation: avoid globbering the docker run args
Date: Thu,  8 Jul 2021 16:56:49 +0200
Message-Id: <20210708145650.8961-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

containerize bash -c './configure && make' fails due to shell expansion.

Collect all arguments for the script and pass them verbatim to the
docker run command.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/scripts/containerize | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/automation/scripts/containerize b/automation/scripts/containerize
index 59edf0ba40..7682ccd347 100755
--- a/automation/scripts/containerize
+++ b/automation/scripts/containerize
@@ -47,10 +47,10 @@ case "_${CONTAINER_UID0}" in
 esac
 
 # Save the commands for future use
-cmd=$@
+cmd=("$@")
 
 # If no command was specified, just drop us into a shell if we're interactive
-[ $# -eq 0 ] && tty -s && cmd="/bin/bash"
+[ $# -eq 0 ] && tty -s && cmd=("/bin/bash")
 
 # Are we in an interactive terminal?
 tty -s && termint=t
@@ -104,4 +104,4 @@ exec ${docker_cmd} run \
     ${CONTAINER_ARGS} \
     -${termint}i --rm -- \
     ${CONTAINER} \
-    ${cmd}
+    "${cmd[@]}"


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 15:01:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 15:01:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153204.283040 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VWX-00062v-Me; Thu, 08 Jul 2021 15:01:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153204.283040; Thu, 08 Jul 2021 15:01:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1VWX-00062o-Jh; Thu, 08 Jul 2021 15:01:09 +0000
Received: by outflank-mailman (input) for mailman id 153204;
 Thu, 08 Jul 2021 15:01:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Di/c=MA=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1VWW-00062R-0P
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 15:01:08 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.54])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 51e0a116-dffd-11eb-858c-12813bfff9fa;
 Thu, 08 Jul 2021 15:01:06 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx68F14b4V
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 8 Jul 2021 17:01:04 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 51e0a116-dffd-11eb-858c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625756465;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=1jjthxlov89BXy9H91jDQWZa2UZ5mwf9V2WpGOOXsKk=;
    b=b39JeAzulCGFKknzQ3WRo4pUR3zaVuB0nIYcE7TiEe6UBTR4n5bCd8ImlqTD24QPh7
    e+JxDfBP+0myX0IqJ8j5P9r2e23dLuFSov6XQOZhUFxH+0nIboHmYIX/lj6l0XuLz0xv
    oqecCoDXJM1KLBLr6+qvCrmglG3CLnnSrwwjJyr7OLn3P2QR2fB+J6z/Fl3i/Ozt6eAS
    73LjgUnaWTVYbKZXl+AIRaBdvwqZl6WZs6shBlVJoZNybWELA0PIOjobdMj3GyP5kdbo
    yIjg0vY2tsB0FxQtH0ySXywT+6pjJlMM0mXEJkcYTem3sloPOx8cyzmVHk9rws5V07zL
    9L7w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Thu, 8 Jul 2021 17:00:56 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: use zypper dup in tumbleweed dockerfile
Message-ID: <20210708170056.1286f34e.olaf@aepfle.de>
In-Reply-To: <5710b7ef-5779-6a60-e679-86aced373f4a@citrix.com>
References: <20210708135704.25626-1-olaf@aepfle.de>
	<0b16fc43-9b5b-1edb-0e21-024bd9cd9708@citrix.com>
	<20210708163352.08da715a.olaf@aepfle.de>
	<5710b7ef-5779-6a60-e679-86aced373f4a@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/2HlWygWkIvjS2tOm+XR4EaX";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/2HlWygWkIvjS2tOm+XR4EaX
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 8 Jul 2021 15:44:34 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Please include it in a series of any/all changes to the tumbleweed
> container, so we can commit all patches around the same time that we
> update the live containers.

I sent out two individual other patches for automation, but nothing substan=
tial.

I think a new image can be built with current staging, further changes will=
 not affect the contents of such image.

Now it gets up to the ipxe failure due to gcc11 being the default compiler =
since a couple of weeks.

Olaf

--Sig_/2HlWygWkIvjS2tOm+XR4EaX
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDnEygACgkQ86SN7mm1
DoD3ag//ZSoY2RJGhOq+aiYLrv4Tp6/EXuXFXcfgKtCAyrNpHJCl9ay5e/AzR6y9
KRSsjbmIas4adk97VJwYkByLjn4pa0fSZdeqeFmQ0bpVd3IbtaBAnRa3T7EC1iiZ
08Dlx9e9OLWbhQ//kBkeUiMOA5Dxt9QsKT16CGCcm4o9XvnfTWBbwem3t4WIz5ZJ
fkIvWewm4yqISfWMMajR3xr30T9UKtgt8mMJGySNytwL9axfXIDFOraoWMjLOpEf
Kv84WhMTGUs9utwfWUYI8jfD5f0f6+3Q6IZl0UNDfDIae98QYkWdrMrccbwzJF29
dJNAvfs+DUP8urOUyQ0H59thTF2a8pYWQllQ9bLAf4vCouZpFVvsI+CHwn1ny77s
1UxrFOYEr02zw0+zpZU2+WVzzsq5+ljF+2PROEVh1Du0G5jiDgI0o2P9pYVw1byt
jY80zGGSk1entvRazO0evng1QChdQXdWRPAtTbiR+BzRxhivOfsdP9XaGn5cr86H
PK7swxKW2OU6gJyMUhD2lV+XUfz3DvHb4cj5iRdaLRDHEVj6qTYcFJjGviZLV4Yg
AL6u6GesUY3uDbKYom/DDMifr2mfyDpvLID6iD/B1PR5lXvQLQWoBkCfBrSnx35L
jenms12cy9uMXv1xslEz8usz191UvgaqSi4usXncajnDXLDxQXI=
=JlpR
-----END PGP SIGNATURE-----

--Sig_/2HlWygWkIvjS2tOm+XR4EaX--


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 16:04:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 16:04:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153217.283059 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1WVb-0003vr-HX; Thu, 08 Jul 2021 16:04:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153217.283059; Thu, 08 Jul 2021 16:04:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1WVb-0003vk-Ee; Thu, 08 Jul 2021 16:04:15 +0000
Received: by outflank-mailman (input) for mailman id 153217;
 Thu, 08 Jul 2021 16:04:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1WVZ-0003va-7w; Thu, 08 Jul 2021 16:04:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1WVZ-0001p1-4N; Thu, 08 Jul 2021 16:04:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1WVY-00047f-QP; Thu, 08 Jul 2021 16:04:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1WVY-0006IE-Pu; Thu, 08 Jul 2021 16:04:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=HlUguLbtyv4ITligAphxB8G565XhEL609HoMzLkTt1I=; b=elYrFGMhlgnqP6qc83R5PCScQ/
	X728HndjhzTLLIqEeg9ucWpPYdZ+Bo/yskwLbOEDDG2eBPHKOyy8QLeT2cP1CHRQDuWl2M1Ze1f90
	5bJHRXqIHcS72Q3lXZN/yPI5utTKR5LxmzkjxSnzTqTAQItm3DnlTEx9MMl42rwNeYAs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163445-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163445: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
X-Osstest-Versions-That:
    xen=484910bf41fec2c80d79ed9c5c33831bee7318f0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 16:04:12 +0000

flight 163445 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163445/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa
baseline version:
 xen                  484910bf41fec2c80d79ed9c5c33831bee7318f0

Last test of basis   163422  2021-07-07 23:01:39 Z    0 days
Testing same since   163445  2021-07-08 13:00:28 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   484910bf41..0f435e2b58  0f435e2b58543f5baae96e17a10ae20d3dbc28fa -> smoke


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 16:06:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 16:06:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153223.283076 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1WY2-0004Y2-0m; Thu, 08 Jul 2021 16:06:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153223.283076; Thu, 08 Jul 2021 16:06:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1WY1-0004Xv-U8; Thu, 08 Jul 2021 16:06:45 +0000
Received: by outflank-mailman (input) for mailman id 153223;
 Thu, 08 Jul 2021 16:06:45 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1WY0-0004Xp-Vv
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 16:06:44 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1WY0-0001qt-Py; Thu, 08 Jul 2021 16:06:44 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1WY0-0006fh-JR; Thu, 08 Jul 2021 16:06:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:To:Subject;
	bh=NMp5Iq+XPGr19gNXrSBf67+iNiC+S4afAtG15Bllq0E=; b=351+y2F7j8m0eBfvdoVdJUQpHE
	bxt/CKCgRa6PaeJPf3AIyesVVqrT7V0CsaXMlQ/CZk6xa+mEqYAyj2BKRJzf2avYzTecWKKT+3OFw
	E7kgFGuF6Pt04D+24kI6WiOMWRTCxNYlq5T6SYnTsdwvEHdVR9hhDDnOa1bpPhioMxr8=;
Subject: Re: Xen/ARM API issue (page size)
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 Elliott Mitchell <ehem+xen@m5p.com>, xen-devel@lists.xenproject.org
References: <YOZHkGrrl694NrfZ@mattapan.m5p.com>
 <8c7d9d21-d8be-d33f-6d37-dfb54f74c179@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <2f27358a-e1d1-4627-3608-0c2fcd0754c0@xen.org>
Date: Thu, 8 Jul 2021 17:06:42 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <8c7d9d21-d8be-d33f-6d37-dfb54f74c179@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi,

I will answer the two e-mails at the same time as my answer will be 
similar :).

On 08/07/2021 02:05, Andrew Cooper wrote:
> On 08/07/2021 01:32, Elliott Mitchell wrote:
>> Hopefully I'm not about to show the limits of my knowledge...
>>
>> Quite a few values passed to Xen via hypercalls include a page number.
>> This makes sense as that maps to the hardware.  Problem is, I cannot help
>> but notice aarch64 allows for 4KB, 16KB and 64KB pages.
> 
> Yes - page size is a know error through the ABI, seeing as Xen started
> on x86 and 4k is the only size considered at the time.
> 
> 32bit frame numbers were all the rage between the Pentum 2 (1997) and
> the advent of 64bit systems (~2006), because they let you efficiently
> reference up to 16T of physical memory, rather than being limited at 4G
> if you used byte addresses instead.
> 
> It will be addressed in ABIv2 design (if I ever get enough time to write
> everything down and make a start).

IIRC, ABIv2 will only focus on the interface between the hypervisor and 
the guests. However, I think we will also need to update the PV protocol 
so two domains agree on the page granularity used.

> 
>> I don't know how flexible aarch64 is.  I don't know whether an aarch64
>> core can support multiple page sizes.  My tentative reading of
>> information seemed to suggest a typical aarch64 core /could/ allow
>> multiple page sizes.

The Arm architecture allows the hypervisor and the kernel to chose its 
own granularity. IOW, a kernel may use 4KB when the hypervisor use 64KB.

Most of the arm64 cores supports all the page granularity. That said, 
this is not a requirement from the Arm Arm, so it may be possible to 
have cores only supporting a subset of the page granularity.

>>
>> What happens if a system (and Xen) is setup to support 64KB pages, but a
>> particular domain has been built strictly with 4KB page support?

If the processor only support 64KB, then you would not be able to boot a 
4KB kernel there.

>>
>> What if a particular domain wanted to use 64KB pages (4KB being too
>> granular), but Xen was set to use 4KB pages?
Today the hypercall ABI using the same page granularity as the 
hypervisor. IOW, the domain would need to break its page in 4KB chunk to 
talk to the hypervisor.

FWIW, this is how Linux with 64KB/16KB page granularity is able to run 
on current Xen.

>>
>> What if a system had two domains which were set for different page sizes,
>> but the two needed to interact?

They would need to agree on the page granularity used. At the moment, 
this is implicitely fixed to 4KB.

> 
> I'm afraid I'll have to defer to the arm folk to answer this, but my
> understanding is that it should be possible to support guests compiled
> with, and using, different page sizes (given a suitable ABI).
> 
>> Then you have things like VCPUOP_register_vcpu_info.  The structure is
>> setup as mfn and offset.  With the /actual/ page size being used there,
>> it is troublesome.  Several places might work better if pure 64-bit
>> addresses were used, but with alignment requirements specified.
> 
> The way to fix size problems is to mandate that all addresses in the ABI
> are full byte addresses, not frame numbers.  When alignment is required,
> and it frequently is, it is fine to use the lower bits for metadata.
> 
> Critically, what his means is that you don't need separate API/ABI's
> based on page size.  e.g. "please balloon out this page" operates "on
> the alignment the guest is using", rather than needing separate ops for
> 4k/2M/1G (to list the x86 page sizes only).

I think the full address is not sufficient here. The stage-2 page-table 
(aka EPT on x86) is using the page granularity of the hypervisor.

So for anything that requires change in the P2M, the domain needs to 
make sure the address is aligned to the page granularity of the hypervisor.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 16:31:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 16:31:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153229.283088 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1WwL-0007et-41; Thu, 08 Jul 2021 16:31:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153229.283088; Thu, 08 Jul 2021 16:31:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1WwL-0007em-0D; Thu, 08 Jul 2021 16:31:53 +0000
Received: by outflank-mailman (input) for mailman id 153229;
 Thu, 08 Jul 2021 16:31:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6RBA=MA=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m1WwJ-0007eg-Pe
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 16:31:51 +0000
Received: from mail-lj1-x230.google.com (unknown [2a00:1450:4864:20::230])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 508ce9f9-b69a-48e7-b915-3b5631caf8db;
 Thu, 08 Jul 2021 16:31:49 +0000 (UTC)
Received: by mail-lj1-x230.google.com with SMTP id p24so3430646ljj.1
 for <xen-devel@lists.xenproject.org>; Thu, 08 Jul 2021 09:31:49 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 508ce9f9-b69a-48e7-b915-3b5631caf8db
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=KWmUfTnqkNlHdqJRREseSiCTtVrfIdoQtm/dHJKOlzE=;
        b=B5W5LVpMBA+M63ZPywCVhrRlC856xcDFAkNAg+Q3Dfn8xietPe97IAoYoszxSIHcpC
         ZBJUwfuBxkMuIZLHUzSvuTGOiP2moUBDk5sRWwpqlXPDdMNXoqQNJuuK7sd1vFY+Kjfm
         QEovmpBYoVwaqtp+AqclUKVoqvZ9mHXNmHtivFHGB6R3KLb8bepoekQukO9ydJSTWUuB
         ds/VpIsyr8rRWsxZ/1DGGLubJqWtk7afL+UVAMPFuVkRB0tnbktHZluDtm+kgQmEwpvG
         V8X/tvmgzydXIK8TBhfpk4h3ZO+s0WdD4JgMm5dwa43CdtMIGgPct4a6cEVUA8kX6WWR
         pJyw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=KWmUfTnqkNlHdqJRREseSiCTtVrfIdoQtm/dHJKOlzE=;
        b=J/UuSdueHJRO9brBpJjr9iCXk48whI6FBb/L1S2Wj1Nf4yqHv7SUyFkY3NWAhKa0bg
         SNpCA2OJlWEXJFZxMTDMqlElqL8yp0+viZO1aM+G2NNnpdPOMz88Uy7khtu2owNfrJYo
         Aa05Kj3LLl5I1T+57qz/J96gZRbjV0MUasiol/KsOv8VpDkglDBGafMDu4bKV9+DooR8
         l4cQAG/5D7n0PeMIx2ehdIwywH7ATtX0zjyxBhfj8GVuk2OKaJl2d7vcsRUIggJfAjjW
         O0Qu1CC5iux1AnVoIL5jyOaT0NsHILpHpAHE3NSQtHjOcoMpZkRqUbyTRlR6mAbOeTVW
         W/iQ==
X-Gm-Message-State: AOAM5319RLNMnzIPcATz4a6hZ4gn27W9napm2esyayO1IC9Fjralm4pS
	PK8GQTcyvPZQ1JvoghY+52VwXWTAY7Bvah3fLwM=
X-Google-Smtp-Source: ABdhPJzcTZkp2zZUE6dyxTjzMiPS9P7Mt0ty0+CPn2C8h4jZAp7kqmW86w1HEM2IkOHkVZAl89nR5+kOgOsvvWxyIf8=
X-Received: by 2002:a05:651c:210:: with SMTP id y16mr9741000ljn.437.1625761908266;
 Thu, 08 Jul 2021 09:31:48 -0700 (PDT)
MIME-Version: 1.0
References: <20210706100141.303960-1-pbonzini@redhat.com> <20210706100141.303960-37-pbonzini@redhat.com>
In-Reply-To: <20210706100141.303960-37-pbonzini@redhat.com>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Thu, 8 Jul 2021 12:31:36 -0400
Message-ID: <CAKf6xps07sbk7MnehPTKes52sst0UyaHiHjjSdEX0bFjT+E_ag@mail.gmail.com>
Subject: Re: [PULL 36/40] vl: switch -M parsing to keyval
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: QEMU <qemu-devel@nongnu.org>, xen-devel <xen-devel@lists.xenproject.org>, 
	Anthony PERARD <anthony.perard@citrix.com>
Content-Type: text/plain; charset="UTF-8"

On Tue, Jul 6, 2021 at 6:43 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> Switch from QemuOpts to keyval.  This enables the introduction
> of non-scalar machine properties, and JSON syntax in the future.
>
> For JSON syntax to be supported right now, we would have to
> consider what would happen if string-based dictionaries (produced by
> -M key=val) were to be merged with strongly-typed dictionaries
> (produced by -M {'key': 123}).
>
> The simplest way out is to never enter the situation, and only allow one
> -M option when JSON syntax is in use.  However, we want options such as
> -smp to become syntactic sugar for -M, and this is a problem; as soon
> as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
> together with -smp.  Therefore, allowing JSON syntax right now for -M
> would be a forward-compatibility nightmare and it would be impossible
> anyway to introduce -M incrementally in tools.
>
> Instead, support for JSON syntax is delayed until after the main
> options are converted to QOM compound properties.  These include -boot,
> -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
> syntax is introduced, these options will _also_ be forbidden together
> with -M '{...}'.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  softmmu/vl.c | 315 ++++++++++++++++++++++++---------------------------
>  1 file changed, 146 insertions(+), 169 deletions(-)

Xen's osstest bisector found this commit breaks starting a Xen vm:
https://lore.kernel.org/xen-devel/E1m1HlC-0005Ra-Ff@osstest.test-lab.xenproject.org/

qemu fails to start with:
Unexpected error in object_property_find_err() at
../qemu-xen-dir-remote/qom/object.c:1299:
qemu-system-i386: Property 'xenfv-3.1-machine.accel' not found

The Xen machines have `default_machine_opts =
"accel=xen,suppress-vmdesc=on"` which may be the problem?

Regards,
Jason


> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 7dd2d72d0b..f848abd31a 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -145,6 +145,8 @@ static const char *cpu_option;
>  static const char *mem_path;
>  static const char *incoming;
>  static const char *loadvm;
> +static const char *accelerators;
> +static QDict *machine_opts_dict;
>  static QTAILQ_HEAD(, ObjectOption) object_opts = QTAILQ_HEAD_INITIALIZER(object_opts);
>  static ram_addr_t maxram_size;
>  static uint64_t ram_slots;
> @@ -235,21 +237,6 @@ static QemuOptsList qemu_option_rom_opts = {
>      },
>  };
>
> -static QemuOptsList qemu_machine_opts = {
> -    .name = "machine",
> -    .implied_opt_name = "type",
> -    .merge_lists = true,
> -    .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
> -    .desc = {
> -        /*
> -         * no elements => accept any
> -         * sanity checking will happen later
> -         * when setting machine properties
> -         */
> -        { }
> -    },
> -};
> -
>  static QemuOptsList qemu_accel_opts = {
>      .name = "accel",
>      .implied_opt_name = "accel",
> @@ -498,16 +485,6 @@ static QemuOptsList qemu_action_opts = {
>      },
>  };
>
> -/**
> - * Get machine options
> - *
> - * Returns: machine options (never null).
> - */
> -static QemuOpts *qemu_get_machine_opts(void)
> -{
> -    return qemu_find_opts_singleton("machine");
> -}
> -
>  const char *qemu_get_vm_name(void)
>  {
>      return qemu_name;
> @@ -815,33 +792,6 @@ static MachineClass *find_default_machine(GSList *machines)
>      return default_machineclass;
>  }
>
> -static int machine_help_func(QemuOpts *opts, MachineState *machine)
> -{
> -    ObjectProperty *prop;
> -    ObjectPropertyIterator iter;
> -
> -    if (!qemu_opt_has_help_opt(opts)) {
> -        return 0;
> -    }
> -
> -    object_property_iter_init(&iter, OBJECT(machine));
> -    while ((prop = object_property_iter_next(&iter))) {
> -        if (!prop->set) {
> -            continue;
> -        }
> -
> -        printf("%s.%s=%s", MACHINE_GET_CLASS(machine)->name,
> -               prop->name, prop->type);
> -        if (prop->description) {
> -            printf(" (%s)\n", prop->description);
> -        } else {
> -            printf("\n");
> -        }
> -    }
> -
> -    return 1;
> -}
> -
>  static void version(void)
>  {
>      printf("QEMU emulator version " QEMU_FULL_VERSION "\n"
> @@ -1554,33 +1504,31 @@ static gint machine_class_cmp(gconstpointer a, gconstpointer b)
>                    object_class_get_name(OBJECT_CLASS(mc1)));
>  }
>
> -static MachineClass *machine_parse(const char *name, GSList *machines)
> +static void machine_help_func(const QDict *qdict)
>  {
> -    MachineClass *mc;
> -    GSList *el;
> +    GSList *machines, *el;
> +    const char *type = qdict_get_try_str(qdict, "type");
>
> -    if (is_help_option(name)) {
> -        printf("Supported machines are:\n");
> -        machines = g_slist_sort(machines, machine_class_cmp);
> -        for (el = machines; el; el = el->next) {
> -            MachineClass *mc = el->data;
> -            if (mc->alias) {
> -                printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
> -            }
> -            printf("%-20s %s%s%s\n", mc->name, mc->desc,
> -                   mc->is_default ? " (default)" : "",
> -                   mc->deprecation_reason ? " (deprecated)" : "");
> +    machines = object_class_get_list(TYPE_MACHINE, false);
> +    if (type) {
> +        ObjectClass *machine_class = OBJECT_CLASS(find_machine(type, machines));
> +        if (machine_class) {
> +            type_print_class_properties(object_class_get_name(machine_class));
> +            return;
>          }
> -        exit(0);
>      }
>
> -    mc = find_machine(name, machines);
> -    if (!mc) {
> -        error_report("unsupported machine type");
> -        error_printf("Use -machine help to list supported machines\n");
> -        exit(1);
> +    printf("Supported machines are:\n");
> +    machines = g_slist_sort(machines, machine_class_cmp);
> +    for (el = machines; el; el = el->next) {
> +        MachineClass *mc = el->data;
> +        if (mc->alias) {
> +            printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
> +        }
> +        printf("%-20s %s%s%s\n", mc->name, mc->desc,
> +               mc->is_default ? " (default)" : "",
> +               mc->deprecation_reason ? " (deprecated)" : "");
>      }
> -    return mc;
>  }
>
>  static const char *pid_file;
> @@ -1633,32 +1581,31 @@ static const QEMUOption *lookup_opt(int argc, char **argv,
>      return popt;
>  }
>
> -static MachineClass *select_machine(void)
> +static MachineClass *select_machine(QDict *qdict, Error **errp)
>  {
> +    const char *optarg = qdict_get_try_str(qdict, "type");
>      GSList *machines = object_class_get_list(TYPE_MACHINE, false);
> -    MachineClass *machine_class = find_default_machine(machines);
> -    const char *optarg;
> -    QemuOpts *opts;
> -    Location loc;
> +    MachineClass *machine_class;
> +    Error *local_err = NULL;
>
> -    loc_push_none(&loc);
> -
> -    opts = qemu_get_machine_opts();
> -    qemu_opts_loc_restore(opts);
> -
> -    optarg = qemu_opt_get(opts, "type");
>      if (optarg) {
> -        machine_class = machine_parse(optarg, machines);
> +        machine_class = find_machine(optarg, machines);
> +        qdict_del(qdict, "type");
> +        if (!machine_class) {
> +            error_setg(&local_err, "unsupported machine type");
> +        }
> +    } else {
> +        machine_class = find_default_machine(machines);
> +        if (!machine_class) {
> +            error_setg(&local_err, "No machine specified, and there is no default");
> +        }
>      }
>
> -    if (!machine_class) {
> -        error_report("No machine specified, and there is no default");
> -        error_printf("Use -machine help to list supported machines\n");
> -        exit(1);
> -    }
> -
> -    loc_pop(&loc);
>      g_slist_free(machines);
> +    if (local_err) {
> +        error_append_hint(&local_err, "Use -machine help to list supported machines\n");
> +        error_propagate(errp, local_err);
> +    }
>      return machine_class;
>  }
>
> @@ -1677,42 +1624,70 @@ static int object_parse_property_opt(Object *obj,
>      return 0;
>  }
>
> -static int machine_set_property(void *opaque,
> -                                const char *name, const char *value,
> -                                Error **errp)
> +/* *Non*recursively replace underscores with dashes in QDict keys.  */
> +static void keyval_dashify(QDict *qdict, Error **errp)
>  {
> -    g_autofree char *qom_name = g_strdup(name);
> +    const QDictEntry *ent, *next;
>      char *p;
>
> -    for (p = qom_name; *p; p++) {
> -        if (*p == '_') {
> -            *p = '-';
> +    for (ent = qdict_first(qdict); ent; ent = next) {
> +        g_autofree char *new_key = NULL;
> +
> +        next = qdict_next(qdict, ent);
> +        if (!strchr(ent->key, '_')) {
> +            continue;
>          }
> +        new_key = g_strdup(ent->key);
> +        for (p = new_key; *p; p++) {
> +            if (*p == '_') {
> +                *p = '-';
> +            }
> +        }
> +        if (qdict_haskey(qdict, new_key)) {
> +            error_setg(errp, "Conflict between '%s' and '%s'", ent->key, new_key);
> +            return;
> +        }
> +        qobject_ref(ent->value);
> +        qdict_put_obj(qdict, new_key, ent->value);
> +        qdict_del(qdict, ent->key);
>      }
> +}
> +
> +static void qemu_apply_legacy_machine_options(QDict *qdict)
> +{
> +    const char *value;
> +
> +    keyval_dashify(qdict, &error_fatal);
>
>      /* Legacy options do not correspond to MachineState properties.  */
> -    if (g_str_equal(qom_name, "accel")) {
> -        return 0;
> -    }
> -    if (g_str_equal(qom_name, "igd-passthru")) {
> -        object_register_sugar_prop(ACCEL_CLASS_NAME("xen"), qom_name, value,
> -                                   false);
> -        return 0;
> -    }
> -    if (g_str_equal(qom_name, "kvm-shadow-mem")) {
> -        object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), qom_name, value,
> -                                   false);
> -        return 0;
> -    }
> -    if (g_str_equal(qom_name, "kernel-irqchip")) {
> -        object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), qom_name, value,
> -                                   false);
> -        object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), qom_name, value,
> -                                   false);
> -        return 0;
> +    value = qdict_get_try_str(qdict, "accel");
> +    if (value) {
> +        accelerators = g_strdup(value);
> +        qdict_del(qdict, "accel");
>      }
>
> -    return object_parse_property_opt(opaque, name, value, "type", errp);
> +    value = qdict_get_try_str(qdict, "igd-passthru");
> +    if (value) {
> +        object_register_sugar_prop(ACCEL_CLASS_NAME("xen"), "igd-passthru", value,
> +                                   false);
> +        qdict_del(qdict, "igd-passthru");
> +    }
> +
> +    value = qdict_get_try_str(qdict, "kvm-shadow-mem");
> +    if (value) {
> +        object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), "kvm-shadow-mem", value,
> +                                   false);
> +        qdict_del(qdict, "kvm-shadow-mem");
> +    }
> +
> +    value = qdict_get_try_str(qdict, "kernel-irqchip");
> +    if (value) {
> +        object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), "kernel-irqchip", value,
> +                                   false);
> +        object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), "kernel-irqchip", value,
> +                                   false);
> +        qdict_del(qdict, "kernel-irqchip");
> +    }
>  }
>
>  static void object_option_foreach_add(bool (*type_opt_predicate)(const char *))
> @@ -1827,16 +1802,14 @@ static bool object_create_early(const char *type)
>      return true;
>  }
>
> -static void qemu_apply_machine_options(void)
> +static void qemu_apply_machine_options(QDict *qdict)
>  {
>      MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
> -    QemuOpts *machine_opts = qemu_get_machine_opts();
>      const char *boot_order = NULL;
>      const char *boot_once = NULL;
>      QemuOpts *opts;
>
> -    qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
> -                     &error_fatal);
> +    object_set_properties_from_keyval(OBJECT(current_machine), qdict, false, &error_fatal);
>      current_machine->ram_size = ram_size;
>      current_machine->maxram_size = maxram_size;
>      current_machine->ram_slots = ram_slots;
> @@ -1865,10 +1838,8 @@ static void qemu_apply_machine_options(void)
>      current_machine->boot_once = boot_once;
>
>      if (semihosting_enabled() && !semihosting_get_argc()) {
> -        const char *kernel_filename = qemu_opt_get(machine_opts, "kernel");
> -        const char *kernel_cmdline = qemu_opt_get(machine_opts, "append") ?: "";
>          /* fall back to the -kernel/-append */
> -        semihosting_arg_fallback(kernel_filename, kernel_cmdline);
> +        semihosting_arg_fallback(current_machine->kernel_filename, current_machine->kernel_cmdline);
>      }
>  }
>
> @@ -1924,8 +1895,7 @@ static void qemu_create_early_backends(void)
>
>      /*
>       * Note: we need to create audio and block backends before
> -     * machine_set_property(), so machine properties can refer to
> -     * them.
> +     * setting machine properties, so they can be referred to.
>       */
>      configure_blockdev(&bdo_queue, machine_class, snapshot);
>      audio_init_audiodevs();
> @@ -2091,16 +2061,14 @@ static void set_memory_options(MachineClass *mc)
>      loc_pop(&loc);
>  }
>
> -static void qemu_create_machine(MachineClass *machine_class)
> +static void qemu_create_machine(QDict *qdict)
>  {
> +    MachineClass *machine_class = select_machine(qdict, &error_fatal);
>      object_set_machine_compat_props(machine_class->compat_props);
>
>      set_memory_options(machine_class);
>
>      current_machine = MACHINE(object_new_with_class(OBJECT_CLASS(machine_class)));
> -    if (machine_help_func(qemu_get_machine_opts(), current_machine)) {
> -        exit(0);
> -    }
>      object_property_add_child(object_get_root(), "machine",
>                                OBJECT(current_machine));
>      object_property_add_child(container_get(OBJECT(current_machine),
> @@ -2131,8 +2099,12 @@ static void qemu_create_machine(MachineClass *machine_class)
>       * specified either by the configuration file or by the command line.
>       */
>      if (machine_class->default_machine_opts) {
> -        qemu_opts_set_defaults(qemu_find_opts("machine"),
> -                               machine_class->default_machine_opts, 0);
> +        QDict *default_opts =
> +            keyval_parse(machine_class->default_machine_opts, NULL, NULL,
> +                         &error_abort);
> +        object_set_properties_from_keyval(OBJECT(current_machine), default_opts,
> +                                          false, &error_abort);
> +        qobject_unref(default_opts);
>      }
>  }
>
> @@ -2154,7 +2126,8 @@ static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
>   */
>  static bool is_qemuopts_group(const char *group)
>  {
> -    if (g_str_equal(group, "object")) {
> +    if (g_str_equal(group, "object") ||
> +        g_str_equal(group, "machine")) {
>          return false;
>      }
>      return true;
> @@ -2167,6 +2140,13 @@ static void qemu_record_config_group(const char *group, QDict *dict,
>          Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(dict));
>          object_option_add_visitor(v);
>          visit_free(v);
> +    } else if (g_str_equal(group, "machine")) {
> +        /*
> +         * Cannot merge string-valued and type-safe dictionaries, so JSON
> +         * is not accepted yet for -M.
> +         */
> +        assert(!from_json);
> +        keyval_merge(machine_opts_dict, dict, errp);
>      } else {
>          abort();
>      }
> @@ -2297,13 +2277,11 @@ static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
>
>  static void configure_accelerators(const char *progname)
>  {
> -    const char *accelerators;
>      bool init_failed = false;
>
>      qemu_opts_foreach(qemu_find_opts("icount"),
>                        do_configure_icount, NULL, &error_fatal);
>
> -    accelerators = qemu_opt_get(qemu_get_machine_opts(), "accel");
>      if (QTAILQ_EMPTY(&qemu_accel_opts.head)) {
>          char **accel_list, **tmp;
>
> @@ -2391,12 +2369,11 @@ static void create_default_memdev(MachineState *ms, const char *path)
>                              &error_fatal);
>  }
>
> -static void qemu_validate_options(void)
> +static void qemu_validate_options(const QDict *machine_opts)
>  {
> -    QemuOpts *machine_opts = qemu_get_machine_opts();
> -    const char *kernel_filename = qemu_opt_get(machine_opts, "kernel");
> -    const char *initrd_filename = qemu_opt_get(machine_opts, "initrd");
> -    const char *kernel_cmdline = qemu_opt_get(machine_opts, "append");
> +    const char *kernel_filename = qdict_get_try_str(machine_opts, "kernel");
> +    const char *initrd_filename = qdict_get_try_str(machine_opts, "initrd");
> +    const char *kernel_cmdline = qdict_get_try_str(machine_opts, "append");
>
>      if (kernel_filename == NULL) {
>           if (kernel_cmdline != NULL) {
> @@ -2736,7 +2713,6 @@ void qemu_init(int argc, char **argv, char **envp)
>      qemu_add_opts(&qemu_trace_opts);
>      qemu_plugin_add_opts();
>      qemu_add_opts(&qemu_option_rom_opts);
> -    qemu_add_opts(&qemu_machine_opts);
>      qemu_add_opts(&qemu_accel_opts);
>      qemu_add_opts(&qemu_mem_opts);
>      qemu_add_opts(&qemu_smp_opts);
> @@ -2777,6 +2753,7 @@ void qemu_init(int argc, char **argv, char **envp)
>          }
>      }
>
> +    machine_opts_dict = qdict_new();
>      if (userconfig) {
>          qemu_read_default_config_file(&error_fatal);
>      }
> @@ -2866,8 +2843,7 @@ void qemu_init(int argc, char **argv, char **envp)
>                  parse_display(optarg);
>                  break;
>              case QEMU_OPTION_nographic:
> -                olist = qemu_find_opts("machine");
> -                qemu_opts_parse_noisily(olist, "graphics=off", false);
> +                qdict_put_str(machine_opts_dict, "graphics", "off");
>                  nographic = true;
>                  dpy.type = DISPLAY_TYPE_NONE;
>                  break;
> @@ -2891,16 +2867,16 @@ void qemu_init(int argc, char **argv, char **envp)
>                  }
>                  break;
>              case QEMU_OPTION_kernel:
> -                qemu_opts_set(qemu_find_opts("machine"), "kernel", optarg, &error_abort);
> +                qdict_put_str(machine_opts_dict, "kernel", optarg);
>                  break;
>              case QEMU_OPTION_initrd:
> -                qemu_opts_set(qemu_find_opts("machine"), "initrd", optarg, &error_abort);
> +                qdict_put_str(machine_opts_dict, "initrd", optarg);
>                  break;
>              case QEMU_OPTION_append:
> -                qemu_opts_set(qemu_find_opts("machine"), "append", optarg, &error_abort);
> +                qdict_put_str(machine_opts_dict, "append", optarg);
>                  break;
>              case QEMU_OPTION_dtb:
> -                qemu_opts_set(qemu_find_opts("machine"), "dtb", optarg, &error_abort);
> +                qdict_put_str(machine_opts_dict, "dtb", optarg);
>                  break;
>              case QEMU_OPTION_cdrom:
>                  drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
> @@ -3010,7 +2986,7 @@ void qemu_init(int argc, char **argv, char **envp)
>                  }
>                  break;
>              case QEMU_OPTION_bios:
> -                qemu_opts_set(qemu_find_opts("machine"), "firmware", optarg, &error_abort);
> +                qdict_put_str(machine_opts_dict, "firmware", optarg);
>                  break;
>              case QEMU_OPTION_singlestep:
>                  singlestep = 1;
> @@ -3281,17 +3257,20 @@ void qemu_init(int argc, char **argv, char **envp)
>                  preconfig_requested = true;
>                  break;
>              case QEMU_OPTION_enable_kvm:
> -                olist = qemu_find_opts("machine");
> -                qemu_opts_parse_noisily(olist, "accel=kvm", false);
> +                qdict_put_str(machine_opts_dict, "accel", "kvm");
>                  break;
>              case QEMU_OPTION_M:
>              case QEMU_OPTION_machine:
> -                olist = qemu_find_opts("machine");
> -                opts = qemu_opts_parse_noisily(olist, optarg, true);
> -                if (!opts) {
> -                    exit(1);
> +                {
> +                    bool help;
> +
> +                    keyval_parse_into(machine_opts_dict, optarg, "type", &help, &error_fatal);
> +                    if (help) {
> +                        machine_help_func(machine_opts_dict);
> +                        exit(EXIT_SUCCESS);
> +                    }
> +                    break;
>                  }
> -                break;
>              case QEMU_OPTION_accel:
>                  accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
>                                                       optarg, true);
> @@ -3318,12 +3297,10 @@ void qemu_init(int argc, char **argv, char **envp)
>                  }
>                  break;
>              case QEMU_OPTION_usb:
> -                olist = qemu_find_opts("machine");
> -                qemu_opts_parse_noisily(olist, "usb=on", false);
> +                qdict_put_str(machine_opts_dict, "usb", "on");
>                  break;
>              case QEMU_OPTION_usbdevice:
> -                olist = qemu_find_opts("machine");
> -                qemu_opts_parse_noisily(olist, "usb=on", false);
> +                qdict_put_str(machine_opts_dict, "usb", "on");
>                  add_device_config(DEV_USB, optarg);
>                  break;
>              case QEMU_OPTION_device:
> @@ -3342,12 +3319,10 @@ void qemu_init(int argc, char **argv, char **envp)
>                  vnc_parse(optarg);
>                  break;
>              case QEMU_OPTION_no_acpi:
> -                olist = qemu_find_opts("machine");
> -                qemu_opts_parse_noisily(olist, "acpi=off", false);
> +                qdict_put_str(machine_opts_dict, "acpi", "off");
>                  break;
>              case QEMU_OPTION_no_hpet:
> -                olist = qemu_find_opts("machine");
> -                qemu_opts_parse_noisily(olist, "hpet=off", false);
> +                qdict_put_str(machine_opts_dict, "hpet", "off");
>                  break;
>              case QEMU_OPTION_no_reboot:
>                  olist = qemu_find_opts("action");
> @@ -3600,7 +3575,7 @@ void qemu_init(int argc, char **argv, char **envp)
>       */
>      loc_set_none();
>
> -    qemu_validate_options();
> +    qemu_validate_options(machine_opts_dict);
>      qemu_process_sugar_options();
>
>      /*
> @@ -3633,7 +3608,7 @@ void qemu_init(int argc, char **argv, char **envp)
>
>      configure_rtc(qemu_find_opts_singleton("rtc"));
>
> -    qemu_create_machine(select_machine());
> +    qemu_create_machine(machine_opts_dict);
>
>      suspend_mux_open();
>
> @@ -3641,12 +3616,14 @@ void qemu_init(int argc, char **argv, char **envp)
>      qemu_create_default_devices();
>      qemu_create_early_backends();
>
> -    qemu_apply_machine_options();
> +    qemu_apply_legacy_machine_options(machine_opts_dict);
> +    qemu_apply_machine_options(machine_opts_dict);
> +    qobject_unref(machine_opts_dict);
>      phase_advance(PHASE_MACHINE_CREATED);
>
>      /*
>       * Note: uses machine properties such as kernel-irqchip, must run
> -     * after machine_set_property().
> +     * after qemu_apply_machine_options.
>       */
>      configure_accelerators(argv[0]);
>      phase_advance(PHASE_ACCEL_CREATED);
> --
> 2.31.1
>
>
>


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 16:44:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 16:44:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153234.283099 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1X8c-0000ms-Cq; Thu, 08 Jul 2021 16:44:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153234.283099; Thu, 08 Jul 2021 16:44:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1X8c-0000ml-9q; Thu, 08 Jul 2021 16:44:34 +0000
Received: by outflank-mailman (input) for mailman id 153234;
 Thu, 08 Jul 2021 16:44:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=CMl4=MA=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1m1X8b-0000mf-7Q
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 16:44:33 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c4cf171c-e00b-11eb-859d-12813bfff9fa;
 Thu, 08 Jul 2021 16:44:32 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 88F256145A;
 Thu,  8 Jul 2021 16:44:23 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c4cf171c-e00b-11eb-859d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1625762671;
	bh=W3zJ1dUIVfwK2RD5Gb/pjjaY8IvTpKuqVuwPdbuz25M=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=Sp+30VCoqVzKdRCHxsdjheJ32Al4GyKkdqY67UI3HBglP9/4ElBHuP/C2H/FyWKo7
	 e/R4/9B3d7vhaPNlh1DPVXpIf7uT6p/REBIACdKpJwJF9GZS42ymRBAxS0kVUi63dX
	 LFzIygW0HZtu2Ulg0IazOQ0jJMqOOsCWNLsNFVLNWlAdaw+e6puTS7FlMwyfD5gEdI
	 lFB3Rrin6g2B0nXBBJNO+PUuvd4DpkVlBGoDw/jR5Tje1HakbrKaEjYhMjAxMq0G0/
	 9JUb/J7ll5Lxx3f7sEDifcv8wjoDYV7KpD0n+YA4MYDlWDIvbopDufBoyo/NtyqWxC
	 FAtOTP/W4ikEQ==
Date: Thu, 8 Jul 2021 17:44:19 +0100
From: Will Deacon <will@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>, Christoph Hellwig <hch@lst.de>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, benh@kernel.crashing.org,
	joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>,
	Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	maarten.lankhorst@linux.intel.com, airlied@linux.ie,
	Dan Williams <dan.j.williams@intel.com>,
	linuxppc-dev@lists.ozlabs.org, jani.nikula@linux.intel.com,
	Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
	Bjorn Helgaas <bhelgaas@google.com>,
	Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	jgross@suse.com, Nicolas Boichat <drinkcat@chromium.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Qian Cai <quic_qiancai@quicinc.com>,
	lkml <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
	Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210708164418.GB23598@willie-the-truck>
References: <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <bb32d5a6-2b34-4524-e171-3e9f5f4d3a94@arm.com>
 <20210706170657.GD20750@willie-the-truck>
 <e1c026c6-22c7-8979-4941-de9cfab3863a@kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <e1c026c6-22c7-8979-4941-de9cfab3863a@kernel.org>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Tue, Jul 06, 2021 at 12:14:16PM -0700, Nathan Chancellor wrote:
> On 7/6/2021 10:06 AM, Will Deacon wrote:
> > On Tue, Jul 06, 2021 at 04:39:11PM +0100, Robin Murphy wrote:
> > > On 2021-07-06 15:05, Christoph Hellwig wrote:
> > > > On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> > > > > FWIW I was pondering the question of whether to do something along those
> > > > > lines or just scrap the default assignment entirely, so since I hadn't got
> > > > > round to saying that I've gone ahead and hacked up the alternative
> > > > > (similarly untested) for comparison :)
> > > > > 
> > > > > TBH I'm still not sure which one I prefer...
> > > > 
> > > > Claire did implement something like your suggestion originally, but
> > > > I don't really like it as it doesn't scale for adding multiple global
> > > > pools, e.g. for the 64-bit addressable one for the various encrypted
> > > > secure guest schemes.
> > > 
> > > Ah yes, that had slipped my mind, and it's a fair point indeed. Since we're
> > > not concerned with a minimal fix for backports anyway I'm more than happy to
> > > focus on Will's approach. Another thing is that that looks to take us a
> > > quiet step closer to the possibility of dynamically resizing a SWIOTLB pool,
> > > which is something that some of the hypervisor protection schemes looking to
> > > build on top of this series may want to explore at some point.
> > 
> > Ok, I'll split that nasty diff I posted up into a reviewable series and we
> > can take it from there.
> 
> For what it's worth, I attempted to boot Will's diff on top of Konrad's
> devel/for-linus-5.14 and it did not work; in fact, I got no output on my
> monitor period, even with earlyprintk=, and I do not think this machine has
> a serial console.

Looking back at the diff, I completely messed up swiotlb_exit() by mixing up
physical and virtual addresses.

> Robin's fix does work, it survived ten reboots with no issues getting to X
> and I do not see the KASAN and slub debug messages anymore but I understand
> that this is not the preferred solution it seems (although Konrad did want
> to know if it works).
> 
> I am happy to test any further patches or follow ups as needed, just keep me
> on CC.

Cheers. Since this isn't 5.14 material any more, I'll CC you on a series
next week.

Will


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 17:31:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 17:31:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153242.283116 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1XrM-0005Yr-0R; Thu, 08 Jul 2021 17:30:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153242.283116; Thu, 08 Jul 2021 17:30:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1XrL-0005Yk-TO; Thu, 08 Jul 2021 17:30:47 +0000
Received: by outflank-mailman (input) for mailman id 153242;
 Thu, 08 Jul 2021 17:30:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1XrL-0005Ye-6h
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 17:30:47 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1XrJ-0003Fp-7d; Thu, 08 Jul 2021 17:30:45 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1XrJ-0008UB-1j; Thu, 08 Jul 2021 17:30:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=wt0uW65InpZeLYKnZnrc3/xmojAKMLMMwXZYFLOfR6w=; b=mHefa9RF4/19QyBHUQevUKTz0q
	4R4I2LY4trGSTb+P/prbNAnvkSHbyh8W6mfYsJng472BTF39IHMl1h9qLv1IRuDNW1pbGYY8fVxb7
	cbLVeSnsqTeJVdsLH3r4tsNhxU6B0cGc7uHmCUHfkDvv2laLkk0xiiX9MvIYABnOF9+0=;
Subject: Re: [PATCH v4 3/5] tools/libs/foreignmemory: Fix PAGE_SIZE
 redefinition error
To: Costin Lupu <costin.lupu@cs.pub.ro>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <83beb95e3633b1aca7801fd8592406e2057f9bdc.1623155575.git.costin.lupu@cs.pub.ro>
From: Julien Grall <julien@xen.org>
Message-ID: <5fe5e336-6fbd-de40-6ec1-dda674a4d86d@xen.org>
Date: Thu, 8 Jul 2021 18:30:43 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <83beb95e3633b1aca7801fd8592406e2057f9bdc.1623155575.git.costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Costin,

On 08/06/2021 13:35, Costin Lupu wrote:
> If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
> header) then gcc will trigger a redefinition error because of -Werror. This
> patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
> confusion between control domain page granularity (PAGE_* definitions) and
> guest domain page granularity.
> 
> The exception is in osdep_xenforeignmemory_map() where we need the system page
> size to check whether the PFN array should be allocated with mmap() or with
> dynamic allocation.
> 
> Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>

Reviewed-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 17:33:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 17:33:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153246.283126 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Xtu-0006EP-E3; Thu, 08 Jul 2021 17:33:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153246.283126; Thu, 08 Jul 2021 17:33:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Xtu-0006EI-BE; Thu, 08 Jul 2021 17:33:26 +0000
Received: by outflank-mailman (input) for mailman id 153246;
 Thu, 08 Jul 2021 17:33:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1Xtt-0006E9-Hp
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 17:33:25 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1Xtr-0003KO-Pm; Thu, 08 Jul 2021 17:33:23 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1Xtr-0000Q6-KL; Thu, 08 Jul 2021 17:33:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=51iGEuNXJe1hlr2Lc2A1XK7pk3Aj8iC55h1SiwtAQfw=; b=GE+McHv2IKBydAZ4hJteZ7pxk2
	1F4QK5598zVwxFiEwG5eS37y2a3RTkrbrL14Vyqz0v/9++KZT6HsxKZGVNxAyncE6hGnC73KSXXiK
	XEZ3Gd6emFB1NYmRxXdmd8g2DyuGEjjCe/cKumeFYX0ONMgeF0Qr4H9vFwfbXdCAGhjI=;
Subject: Re: [PATCH v4 4/5] tools/libs/gnttab: Fix PAGE_SIZE redefinition
 error
To: Costin Lupu <costin.lupu@cs.pub.ro>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <84d03c4595428e4ff857dcacc72f6b9c04476849.1623155575.git.costin.lupu@cs.pub.ro>
From: Julien Grall <julien@xen.org>
Message-ID: <90974b14-4a8d-d9dd-f8e9-65eef692d28a@xen.org>
Date: Thu, 8 Jul 2021 18:33:22 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <84d03c4595428e4ff857dcacc72f6b9c04476849.1623155575.git.costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Costin,

On 08/06/2021 13:35, Costin Lupu wrote:
> If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
> header) then gcc will trigger a redefinition error because of -Werror. This
> patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
> confusion between control domain page granularity (PAGE_* definitions) and
> guest domain page granularity.
> 
> The exception is in osdep_xenforeignmemory_map() where we need the system page

Did you mean osdep_gnttab_grant_map?

> size to check whether the PFN array should be allocated with mmap() or with
> dynamic allocation.
> 
> Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>

Other than the question above:

Reviewed-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 17:40:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 17:40:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153253.283138 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Y0E-0006uv-51; Thu, 08 Jul 2021 17:39:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153253.283138; Thu, 08 Jul 2021 17:39:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Y0E-0006uo-1p; Thu, 08 Jul 2021 17:39:58 +0000
Received: by outflank-mailman (input) for mailman id 153253;
 Thu, 08 Jul 2021 17:39:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Y0D-0006ue-4C; Thu, 08 Jul 2021 17:39:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Y0C-0003Rn-Ne; Thu, 08 Jul 2021 17:39:56 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Y0C-00014I-BJ; Thu, 08 Jul 2021 17:39:56 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1Y0C-0002wS-Am; Thu, 08 Jul 2021 17:39:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=m/9yO/upiTl7SEmywwnBsKg4QwsbDmeT3ZQgXU7bPvs=; b=KJAiWPHZ9uxVqXO5K5MrEEmNvA
	SPDlNqCZXd8o1moLA3liT97bGeNLSzE9O91aQFaGMXhVgjT0cTI9U0eUsycvis4lOgTM/a8WjNk0s
	io5swwDEisqwaJImel2SJXSF8B714FgYgMUPGswkXAbJwxk8OQSQVLm7eL37dwJrDe2Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163428-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163428: regressions - FAIL
X-Osstest-Failures:
    linux-5.4:test-amd64-i386-libvirt-xsm:<job status>:broken:regression
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:<job status>:broken:regression
    linux-5.4:test-amd64-amd64-dom0pvh-xl-amd:<job status>:broken:regression
    linux-5.4:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:<job status>:broken:regression
    linux-5.4:test-armhf-armhf-xl-vhd:guest-start/debian.repeat:fail:regression
    linux-5.4:test-amd64-amd64-dom0pvh-xl-amd:host-install(5):broken:heisenbug
    linux-5.4:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:host-install(5):broken:heisenbug
    linux-5.4:test-amd64-i386-libvirt-xsm:host-install(5):broken:heisenbug
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:host-install(5):broken:heisenbug
    linux-5.4:test-armhf-armhf-xl-vhd:xen-boot:fail:heisenbug
    linux-5.4:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
X-Osstest-Versions-That:
    linux=82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 17:39:56 +0000

flight 163428 linux-5.4 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163428/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-libvirt-xsm     <job status>                 broken  in 163402
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm <job status> broken in 163402
 test-amd64-amd64-dom0pvh-xl-amd    <job status>               broken in 163402
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm    <job status>   broken in 163402
 test-armhf-armhf-xl-vhd 17 guest-start/debian.repeat fail in 163402 REGR. vs. 163198

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-dom0pvh-xl-amd 5 host-install(5) broken in 163402 pass in 163428
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 5 host-install(5) broken in 163402 pass in 163428
 test-amd64-i386-libvirt-xsm  5 host-install(5) broken in 163402 pass in 163428
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 5 host-install(5) broken in 163402 pass in 163428
 test-armhf-armhf-xl-vhd       8 xen-boot                   fail pass in 163402
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat  fail pass in 163402

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-vhd     14 migrate-support-check fail in 163402 never pass
 test-armhf-armhf-xl-vhd 15 saverestore-support-check fail in 163402 never pass
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163198
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163198
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163198
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163198
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163198
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163198
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163198
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163198
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163198
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163198
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163198
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
baseline version:
 linux                82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9

Last test of basis   163198  2021-06-30 13:43:03 Z    8 days
Testing same since   163402  2021-07-07 12:42:00 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alex Deucher <alexander.deucher@amd.com>
  Bartosz Golaszewski <bgolaszewski@baylibre.com>
  Christian König <christian.koenig@amd.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guenter Roeck <linux@roeck-us.net>
  Hulk Robot <hulkrobot@huawei.com>
  Jason Gunthorpe <jgg@nvidia.com>
  Johannes Berg <johannes.berg@intel.com>
  Leon Romanovsky <leonro@nvidia.com>
  Linux Kernel Functional Testing <lkft@linaro.org>
  ManYi Li <limanyi@uniontech.com>
  Mark Bloch <mbloch@nvidia.com>
  Martin K. Petersen <martin.petersen@oracle.com>
  Sasha Levin <sashal@kernel.org>
  Shuah Khan <skhan@linuxfoundation.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Sudip Mukherjee <sudipm.mukherjee@gmail.com>
  YueHaibing <yuehaibing@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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

broken-job test-amd64-i386-libvirt-xsm broken
broken-job test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm broken
broken-job test-amd64-amd64-dom0pvh-xl-amd broken
broken-job test-amd64-i386-xl-qemuu-debianhvm-i386-xsm broken

Not pushing.

------------------------------------------------------------
commit 8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
Author: Sasha Levin <sashal@kernel.org>
Date:   Wed Jul 7 08:29:57 2021 -0400

    Linux 5.4.130
    
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Hulk Robot <hulkrobot@huawei.com>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 5e8519c4083bfd937f72c729659c714e7b8d5b29
Author: Mark Bloch <mbloch@nvidia.com>
Date:   Mon Jun 7 11:03:12 2021 +0300

    RDMA/mlx5: Block FDB rules when not in switchdev mode
    
    commit edc0b0bccc9c80d9a44d3002dcca94984b25e7cf upstream.
    
    Allow creating FDB steering rules only when in switchdev mode.
    
    The only software model where a userspace application can manipulate
    FDB entries is when it manages the eswitch. This is only possible in
    switchdev mode where we expose a single RDMA device with representors
    for all the vports that are connected to the eswitch.
    
    Fixes: 52438be44112 ("RDMA/mlx5: Allow inserting a steering rule to the FDB")
    Link: https://lore.kernel.org/r/e928ae7c58d07f104716a2a8d730963d1bd01204.1623052923.git.leonro@nvidia.com
    Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
    Signed-off-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    [sudip: manually backport to old file]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c5fb49e12f2c3c7ea04a343fdba4af265e91b61e
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Jun 25 10:37:34 2021 +0200

    gpio: AMD8111 and TQMX86 require HAS_IOPORT_MAP
    
    [ Upstream commit c6414e1a2bd26b0071e2b9d6034621f705dfd4c0 ]
    
    Both of these drivers use ioport_map(), so they need to
    depend on HAS_IOPORT_MAP. Otherwise, they cannot be built
    even with COMPILE_TEST on architectures without an ioport
    implementation, such as ARCH=um.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit cf5eb82097234b5c77107a58eccf0509c925fa8c
Author: Christian König <christian.koenig@amd.com>
Date:   Fri Jun 11 14:34:50 2021 +0200

    drm/nouveau: fix dma_address check for CPU/GPU sync
    
    [ Upstream commit d330099115597bbc238d6758a4930e72b49ea9ba ]
    
    AGP for example doesn't have a dma_address array.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210614110517.1624-1-christian.koenig@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 3edfd34f1338a6c5e105499287a93dec2a80284f
Author: ManYi Li <limanyi@uniontech.com>
Date:   Fri Jun 11 17:44:02 2021 +0800

    scsi: sr: Return appropriate error code when disk is ejected
    
    [ Upstream commit 7dd753ca59d6c8cc09aa1ed24f7657524803c7f3 ]
    
    Handle a reported media event code of 3. This indicates that the media has
    been removed from the drive and user intervention is required to proceed.
    Return DISK_EVENT_EJECT_REQUEST in that case.
    
    Link: https://lore.kernel.org/r/20210611094402.23884-1-limanyi@uniontech.com
    Signed-off-by: ManYi Li <limanyi@uniontech.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a6c85a8433e0606a8ad63a44c1aa32963b61a1a2
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Fri Nov 15 21:08:30 2019 +0800

    x86/efi: remove unused variables
    
    [ Upstream commit 6f090192f8225f52ba95d08785989688cb768cca ]
    
    commit ad723674d675 ("x86/efi: move common keyring handler functions
    to new file") leave this unused.
    
    Fixes: ad723674d675 ("x86/efi: move common keyring handler functions to new file")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Link: https://lore.kernel.org/r/20191115130830.13320-1-yuehaibing@huawei.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 17:40:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 17:40:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153255.283151 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Y0V-00081J-J9; Thu, 08 Jul 2021 17:40:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153255.283151; Thu, 08 Jul 2021 17:40:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Y0V-00081A-G6; Thu, 08 Jul 2021 17:40:15 +0000
Received: by outflank-mailman (input) for mailman id 153255;
 Thu, 08 Jul 2021 17:40:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1Y0U-00080S-5C
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 17:40:14 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1Y0T-0003SB-Bi; Thu, 08 Jul 2021 17:40:13 +0000
Received: from [54.239.6.177] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1Y0T-0000rh-5s; Thu, 08 Jul 2021 17:40:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=7KxRVb+n4c1aHg1YBSgHb3C37SPmmOt7z4Bqs3aKzKc=; b=oj0mN/U8s1ZmOR9Kjux5NZEaTQ
	UfCAGRziEu9mq2sWAgczNei7DPnb/roH0HJEOKZr7EHSLpGPwv2qxfZWoTYgcjlNKnCawhA8b+G3W
	V3poZfDWVnY/I9ebbeBaEp/g/NqUbu9Yeqc9PhNJM+q+3w9c9MuPLKnCfhYKJDg67kUU=;
Subject: Re: [PATCH v2 1/2] tools/xenstore: set oom score for xenstore daemon
 on Linux
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210608055839.10313-1-jgross@suse.com>
 <20210608055839.10313-2-jgross@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <467dc0c1-cf0a-2aaf-0c99-c1ca70b95912@xen.org>
Date: Thu, 8 Jul 2021 18:40:11 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210608055839.10313-2-jgross@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Juergen,

On 08/06/2021 06:58, Juergen Gross wrote:
> Xenstored is absolutely mandatory for a Xen host and it can't be
> restarted, so being killed by OOM-killer in case of memory shortage is
> to be avoided.
> 
> Set /proc/$pid/oom_score_adj (if available) to -500 in order to allow
> xenstored to use large amounts of memory without being killed.
> 
> Make sure the pid file isn't a left-over from a previous run delete it
> before starting xenstored.

This sentence is a bit confusing to read. Do you mean "*To* make 
sure....*,* delete it before"?

> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
> V2:
> - set oom score from launch script (Julien Grall)
> - split off open file descriptor limit setting (Julien Grall)
> ---
>   tools/hotplug/Linux/launch-xenstore.in | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/tools/hotplug/Linux/launch-xenstore.in b/tools/hotplug/Linux/launch-xenstore.in
> index 019f9d6f4d..3ad71e3d08 100644
> --- a/tools/hotplug/Linux/launch-xenstore.in
> +++ b/tools/hotplug/Linux/launch-xenstore.in
> @@ -59,11 +59,14 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
>   		echo "No xenstored found"
>   		exit 1
>   	}
> +	rm -f @XEN_RUN_DIR@/xenstored.pid
>   
>   	echo -n Starting $XENSTORED...
>   	$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
>   
>   	systemd-notify --booted 2>/dev/null || timeout_xenstore $XENSTORED || exit 1
> +	XS_PID=`cat @XEN_RUN_DIR@/xenstored.pid`
> +	echo -500 >/proc/$XS_PID/oom_score_adj

NIT: It would be worth considering to introduce a variable so this can 
be set from the configuration file.

With or without it:

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 18:27:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 18:27:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153273.283166 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Yk9-0004Bq-6a; Thu, 08 Jul 2021 18:27:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153273.283166; Thu, 08 Jul 2021 18:27:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1Yk9-0004Be-3U; Thu, 08 Jul 2021 18:27:25 +0000
Received: by outflank-mailman (input) for mailman id 153273;
 Thu, 08 Jul 2021 18:27:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=GyU7=MA=linuxfoundation.org=gregkh@srs-us1.protection.inumbo.net>)
 id 1m1Yk7-0004Av-TM
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 18:27:23 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1ecc3bee-4222-436a-b8be-333e7cfc4143;
 Thu, 08 Jul 2021 18:27:23 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id F252761624;
 Thu,  8 Jul 2021 18:27:21 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1ecc3bee-4222-436a-b8be-333e7cfc4143
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org;
	s=korg; t=1625768842;
	bh=HLLd3yEwXW77mwQmJLlWxcwIg2HQCrgxTc0Cq671Rdc=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=ISvWTBqXNhkL5ubz3r4XbJLMQ+yC3qpd5DsGTvRh/ckjkwP0BF1LziVzEvFqLO9VI
	 cMEn5oBLMPQ4aAo1HMgXzqxVGKc2zI8tYNqHmTeWc2RC3Gw4uWvXqVcisP1BHGSVnp
	 bx+E3PYQBVz2dii2IdbAyeweqhVgbodTI68CZ2yY=
Date: Thu, 8 Jul 2021 20:27:19 +0200
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Juergen Gross <jgross@suse.com>
Cc: "stable@vger.kernel.org" <stable@vger.kernel.org>,
	Ross Lagerwall <ross.lagerwall@citrix.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Subject: Re: Backport of commit 3de218ff39b9e3f0d4
Message-ID: <YOdDh1I8bGqY7ded@kroah.com>
References: <194665ee-3a94-3c1a-23ca-f71c007c74a5@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <194665ee-3a94-3c1a-23ca-f71c007c74a5@suse.com>

On Mon, Jul 05, 2021 at 01:58:09PM +0200, Juergen Gross wrote:
> Hi Greg,
> 
> the attached patch is a backport of upstream commit 3de218ff39b9e3f0d4
> for Linux 5.10 and older (I've checked it to apply down to 4.4).

Now applied, thanks.

greg k-h


From xen-devel-bounces@lists.xenproject.org Thu Jul 08 22:05:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 22:05:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153315.283231 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1c8O-00081G-9D; Thu, 08 Jul 2021 22:04:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153315.283231; Thu, 08 Jul 2021 22:04:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1c8O-000819-5r; Thu, 08 Jul 2021 22:04:40 +0000
Received: by outflank-mailman (input) for mailman id 153315;
 Thu, 08 Jul 2021 22:04:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1c8N-00080z-8m; Thu, 08 Jul 2021 22:04:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1c8N-0007uk-0b; Thu, 08 Jul 2021 22:04:39 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1c8M-0006NR-Mf; Thu, 08 Jul 2021 22:04:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1c8M-0005Zn-MA; Thu, 08 Jul 2021 22:04:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=g8w3+z56ZrEq6+15FHAXuw4lkYFno2cu8sFbf+kP5Vo=; b=lfvCM+G66BC/rk3fZqznY4K1aZ
	Vv2YvEZlPzW5y8h57hc7eZ4cwDdvpvuHoF43DItrjbpaNSuHL4UeMUbHWVrhhP22Uph+tQVTe/Ppx
	8Q9ggkGWK0KRiebJvOOpLrW5rVgYQ34NYl1V0krosvvskS1cMZiN+vfmOljtKXgyxCq0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-amd64-qemuu-freebsd12-amd64
Message-Id: <E1m1c8M-0005Zn-MA@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 22:04:38 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-qemuu-freebsd12-amd64
testid guest-start

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163456/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-amd64-qemuu-freebsd12-amd64.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-amd64-qemuu-freebsd12-amd64.guest-start --summary-out=tmp/163456.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-amd64-qemuu-freebsd12-amd64 guest-start
Searching for failure / basis pass:
 163420 fail [host=albana0] / 163321 [host=elbling1] 163311 [host=godello0] 163303 [host=pinot1] 163299 [host=huxelrebe0] 163292 [host=albana1] 163276 [host=elbling0] 163235 [host=pinot0] 163228 [host=fiano1] 163220 [host=elbling1] 163213 [host=chardonnay0] 163204 [host=fiano1] 163194 [host=godello0] 163187 ok.
Failure / basis pass flights: 163420 / 163187
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#13d5f87cc3b94bfccc501142df4a7b12fee3a6e7-9aef0954195cc592e86846dbbe7f3c2c5603690a git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#c636a5fe59575d84778f676ca1728fbd1a7c7104-4473f3601098a2c3cf5ab89d5a29504772985e3a
Loaded 20233 nodes in revision graph
Searching for test results:
 163187 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
 163194 [host=godello0]
 163204 [host=fiano1]
 163213 [host=chardonnay0]
 163220 [host=elbling1]
 163228 [host=fiano1]
 163235 [host=pinot0]
 163276 [host=elbling0]
 163292 [host=albana1]
 163299 [host=huxelrebe0]
 163303 [host=pinot1]
 163311 [host=godello0]
 163321 [host=elbling1]
 163327 fail irrelevant
 163369 fail irrelevant
 163425 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
 163427 fail irrelevant
 163429 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 4fb2820854a796ab75ffb2ec896b67268281ecde 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163420 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163430 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e5f607913cee3f3b486eb024dbc7079b51f6da57 54082c81d96028ba8c76fbe6784085cf1df76b20 5fa174cbf54cc625a023b8e7170e359dd150c072
 163432 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163433 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 04ea4d3cfd0a21b248ece8eb7a9436a3d9898dd8 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163434 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c86bd2dc4c1d37653c27293b2dacee6bb46bb995 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163435 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 5c02c865866fdd2d17e8f5507deb4aa1f74bf59f 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163437 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 11984b18bb0b237440af18edb702f85aa8277efe 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163438 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 587d59d6ccd0e73bfe5689d9232804339aa09bdf 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163440 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 711c0418c8c1ce3a24346f058b001c4c5a2f0f81 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163442 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 be7e89f63f97c6e745f906bdafb0a6a0b070e720 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163443 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163446 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8d6cb100731c4d28535adbf2a3c2d1f29be3fef4 54082c81d96028ba8c76fbe6784085cf1df76b20 d468f9522174114ab06239894b6079c0a487e408
 163447 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163448 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d47a8b3b692a06852bd70fd7832bd22adfcb2431 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163449 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163451 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163452 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163453 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163454 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163455 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163456 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163187 (pass), for basis pass
 Result found: flight 163420 (fail), for basis failure
 Repro found: flight 163425 (pass), for basis pass
 Repro found: flight 163443 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163451 (pass), for last pass
 Result found: flight 163452 (fail), for first failure
 Repro found: flight 163453 (pass), for last pass
 Repro found: flight 163454 (fail), for first failure
 Repro found: flight 163455 (pass), for last pass
 Repro found: flight 163456 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163456/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-amd64-qemuu-freebsd12-amd64.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163456: tolerable ALL FAIL

flight 163456 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163456/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start   fail baseline untested


jobs:
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Thu Jul 08 22:06:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 22:06:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153321.283245 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1c9m-00008l-La; Thu, 08 Jul 2021 22:06:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153321.283245; Thu, 08 Jul 2021 22:06:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1c9m-00008e-IZ; Thu, 08 Jul 2021 22:06:06 +0000
Received: by outflank-mailman (input) for mailman id 153321;
 Thu, 08 Jul 2021 22:06:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=X7bE=MA=m5p.com=ehem@srs-us1.protection.inumbo.net>)
 id 1m1c9l-00008W-1T
 for xen-devel@lists.xenproject.org; Thu, 08 Jul 2021 22:06:05 +0000
Received: from mailhost.m5p.com (unknown [74.104.188.4])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id afbfb516-e038-11eb-85bf-12813bfff9fa;
 Thu, 08 Jul 2021 22:06:03 +0000 (UTC)
Received: from m5p.com (mailhost.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:f7])
 by mailhost.m5p.com (8.16.1/8.15.2) with ESMTPS id 168M5rla041516
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO);
 Thu, 8 Jul 2021 18:05:59 -0400 (EDT) (envelope-from ehem@m5p.com)
Received: (from ehem@localhost)
 by m5p.com (8.16.1/8.15.2/Submit) id 168M5rWX041515;
 Thu, 8 Jul 2021 15:05:53 -0700 (PDT) (envelope-from ehem)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: afbfb516-e038-11eb-85bf-12813bfff9fa
Date: Thu, 8 Jul 2021 15:05:53 -0700
From: Elliott Mitchell <ehem+xen@m5p.com>
To: Julien Grall <julien@xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Subject: Re: Xen/ARM API issue (page size)
Message-ID: <YOd2wSfaThhDPoHp@mattapan.m5p.com>
References: <YOZHkGrrl694NrfZ@mattapan.m5p.com>
 <8c7d9d21-d8be-d33f-6d37-dfb54f74c179@citrix.com>
 <2f27358a-e1d1-4627-3608-0c2fcd0754c0@xen.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <2f27358a-e1d1-4627-3608-0c2fcd0754c0@xen.org>
X-Spam-Status: No, score=0.4 required=10.0 tests=KHOP_HELO_FCRDNS autolearn=no
	autolearn_force=no version=3.4.5
X-Spam-Checker-Version: SpamAssassin 3.4.5 (2021-03-20) on mattapan.m5p.com

On Thu, Jul 08, 2021 at 05:06:42PM +0100, Julien Grall wrote:
> On 08/07/2021 02:05, Andrew Cooper wrote:
> > On 08/07/2021 01:32, Elliott Mitchell wrote:
> >> Hopefully I'm not about to show the limits of my knowledge...
> >>
> >> Quite a few values passed to Xen via hypercalls include a page number.
> >> This makes sense as that maps to the hardware.  Problem is, I cannot help
> >> but notice aarch64 allows for 4KB, 16KB and 64KB pages.
> > 
> > Yes - page size is a know error through the ABI, seeing as Xen started
> > on x86 and 4k is the only size considered at the time.
> > 
> > 32bit frame numbers were all the rage between the Pentum 2 (1997) and
> > the advent of 64bit systems (~2006), because they let you efficiently
> > reference up to 16T of physical memory, rather than being limited at 4G
> > if you used byte addresses instead.
> > 
> > It will be addressed in ABIv2 design (if I ever get enough time to write
> > everything down and make a start).
> 
> IIRC, ABIv2 will only focus on the interface between the hypervisor and 
> the guests. However, I think we will also need to update the PV protocol 
> so two domains agree on the page granularity used.

I'm inclined to concur with Andrew Cooper here.  It makes a fair bit of
sense to consistently use full addresses across the entire ABI, just
specify alignment so the lower bits end up zeroes.


> Most of the arm64 cores supports all the page granularity. That said, 
> this is not a requirement from the Arm Arm, so it may be possible to 
> have cores only supporting a subset of the page granularity.

At which point it is possible to have a device where the page size(s)
supported by some cores are disjoint from the page size(s) supported by
other cores.

I imagine someone has plans.  An obvious use case would be a cellphone
chip with a low-power core for the modem and a high-power OS core.


> >> What happens if a system (and Xen) is setup to support 64KB pages, but a
> >> particular domain has been built strictly with 4KB page support?
> 
> If the processor only support 64KB, then you would not be able to boot a 
> 4KB kernel there.

I was being explicit about covering both cases of distinct page sizes
between Xen and domain (Xen with smaller page size, domain with smaller
page size).


> >> What if a particular domain wanted to use 64KB pages (4KB being too
> >> granular), but Xen was set to use 4KB pages?
> Today the hypercall ABI using the same page granularity as the 
> hypervisor. IOW, the domain would need to break its page in 4KB chunk to 
> talk to the hypervisor.
> 
> FWIW, this is how Linux with 64KB/16KB page granularity is able to run 
> on current Xen.

Breaking pages up is generally easier than putting them back together.
Good news is this could be handled similar to DMA operations and a few
pages reserved for interaction with small page domains.


> >> What if a system had two domains which were set for different page sizes,
> >> but the two needed to interact?
> 
> They would need to agree on the page granularity used. At the moment, 
> this is implicitely fixed to 4KB.

"implicitly" -> "undocumented" -> "guess" -> "12 hour build wasted"

For the case I'm concerned with, the history is a decent hint, but not
being explicitly documented is Bad.  In the Xen ABI there are too many
references to "page size" without the page size being defined as 4KB.

In a few years there may be someone on this list who assumed "page size"
meant whatever page size was in use and will be rather annoyed it means
4096, when both Xen and their OS were using 65536.


-- 
(\___(\___(\______          --=> 8-) EHM <=--          ______/)___/)___/)
 \BS (    |         ehem+sigmsg@m5p.com  PGP 87145445         |    )   /
  \_CS\   |  _____  -O #include <stddisclaimer.h> O-   _____  |   /  _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445




From xen-devel-bounces@lists.xenproject.org Thu Jul 08 22:45:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 08 Jul 2021 22:45:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153337.283287 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1clW-0004Zl-8d; Thu, 08 Jul 2021 22:45:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153337.283287; Thu, 08 Jul 2021 22:45:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1clW-0004Ze-58; Thu, 08 Jul 2021 22:45:06 +0000
Received: by outflank-mailman (input) for mailman id 153337;
 Thu, 08 Jul 2021 22:45:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1clV-0004Z3-26; Thu, 08 Jul 2021 22:45:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1clU-000080-Pi; Thu, 08 Jul 2021 22:45:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1clU-0007lm-G0; Thu, 08 Jul 2021 22:45:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1clU-0006w6-FY; Thu, 08 Jul 2021 22:45:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=qiLRIH5hxSBj48ivSg37UkKi9ggbXlk9IM4izxw9H/4=; b=OunCRXEBW8J8Vcv26XVPazLlFe
	R9vxtuLwoBHQOVtN06dA9m6DJakOlO2oS4eIcrZVgSVZKcqu7twM5PA0Efp3VWgvVkjslOAg2V5rm
	xK+ySnjzeVGWHhjaW6d6wL/d/nObOBq4oIMoFK2aeEZRHe4uze0+Q9+G9vkYPuvnn0gM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163436-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163436: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=484910bf41fec2c80d79ed9c5c33831bee7318f0
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 08 Jul 2021 22:45:04 +0000

flight 163436 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163436/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  484910bf41fec2c80d79ed9c5c33831bee7318f0
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163386  2021-07-07 05:04:03 Z    1 days
Failing since        163416  2021-07-07 19:07:21 Z    1 days    2 attempts
Testing same since   163436  2021-07-08 08:02:33 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Bertrand Marquis <bertrand.marquis@arm.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>
  Rahul Singh <rahul.singh@arm.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   4473f36010..484910bf41  484910bf41fec2c80d79ed9c5c33831bee7318f0 -> master


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 00:05:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 00:05:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153372.283361 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1e0s-0005oN-1w; Fri, 09 Jul 2021 00:05:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153372.283361; Fri, 09 Jul 2021 00:05:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1e0r-0005oG-V8; Fri, 09 Jul 2021 00:05:01 +0000
Received: by outflank-mailman (input) for mailman id 153372;
 Fri, 09 Jul 2021 00:05:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1e0q-0005o6-K0; Fri, 09 Jul 2021 00:05:00 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1e0q-00026u-EC; Fri, 09 Jul 2021 00:05:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1e0q-0001Om-7E; Fri, 09 Jul 2021 00:05:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1e0q-0001aY-6g; Fri, 09 Jul 2021 00:05:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=QqUwzC0+mwcklINMVwLS1Gf/03Zq71cvjZ51Nls7H1w=; b=ggqKbTFbpVH7nmUulMtr4QNKPG
	8mv5V0Uq79VA9Xa3KZjjxRT4Q5dZJOOlwU65bXEd1VXgJgNwNUfM6NFlcgzsFw565dJMdRHxYxvqG
	ZitJTfsCXqwR59PcWysKNdJbTeP41CuaVKDoMM0BBj3LXAK4p9iRrHKznOtTMEZS01rQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163441-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163441: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=b560e9d9b67450d3baea56d0e211066722643c57
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 00:05:00 +0000

flight 163441 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163441/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 b560e9d9b67450d3baea56d0e211066722643c57
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   34 days
Failing since        162368  2021-06-04 15:42:59 Z   34 days   96 attempts
Testing same since   163441  2021-07-08 10:30:46 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3445 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 00:29:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 00:29:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153379.283375 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1eNs-0008Ax-1t; Fri, 09 Jul 2021 00:28:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153379.283375; Fri, 09 Jul 2021 00:28:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1eNr-0008Aq-Uk; Fri, 09 Jul 2021 00:28:47 +0000
Received: by outflank-mailman (input) for mailman id 153379;
 Fri, 09 Jul 2021 00:28:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1eNr-0008Ag-5v; Fri, 09 Jul 2021 00:28:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1eNq-0002UJ-Sg; Fri, 09 Jul 2021 00:28:46 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1eNq-00025f-Hh; Fri, 09 Jul 2021 00:28:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1eNq-0006hK-HC; Fri, 09 Jul 2021 00:28:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=5bVn6ERumnL0yg6Fg4RRFQLQssBmEFSkBmWknzoXUq8=; b=qrM3/AHDAweCS/hwtvN6W5fZfk
	dvlUaQgzCPW96c2SD/q6gh3vDEqFTod2/TapyJ4/NhAPswSqigVXykRV2r5MSkRxgGqrN677cZgIJ
	XOdKvJ0hlbzTJZjuJ0sHUX3HmTjrgn8G0Dve6GPHUVxugEu5Dj7wCO1kII9haUR/NUKA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163439-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163439: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:guest-start/debianhvm.repeat:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=e9f1cbc0c4114880090c7a578117d3b9cf184ad4
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 00:28:46 +0000

flight 163439 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163439/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 18 guest-start/debianhvm.repeat fail REGR. vs. 152332
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                e9f1cbc0c4114880090c7a578117d3b9cf184ad4
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  342 days
Failing since        152366  2020-08-01 20:49:34 Z  341 days  582 attempts
Testing same since   163439  2021-07-08 09:43:16 Z    0 days    1 attempts

------------------------------------------------------------
6628 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1935500 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 03:42:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 03:42:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153404.283418 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1hOj-0003Da-Iu; Fri, 09 Jul 2021 03:41:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153404.283418; Fri, 09 Jul 2021 03:41:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1hOj-0003DT-Fj; Fri, 09 Jul 2021 03:41:53 +0000
Received: by outflank-mailman (input) for mailman id 153404;
 Fri, 09 Jul 2021 03:41:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1hOi-0003DJ-5q; Fri, 09 Jul 2021 03:41:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1hOh-0006je-TM; Fri, 09 Jul 2021 03:41:51 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1hOh-0000kL-Hl; Fri, 09 Jul 2021 03:41:51 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1hOh-00066r-HC; Fri, 09 Jul 2021 03:41:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=e2P/E+cOO7r2a0AhQZN+LjNcZSBDQD491hRQQhfKhbA=; b=xmVNW84iE4QDn5lkALG15ycdb/
	JNhQKs/jAWEAdKtBF4B0D9I9H2c6Z6vCtcqu6pYGMBv7jiXiKPKLLL71gUuxVJi2Qu/3Ph5rMxlMa
	PwWl/dSw8fcbYJ0ngIqYWS2gmlpugqhgfqFy+DT9/UDcs5tN2qUWDnIVMd169u33fOMQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163444-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163444: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9aef0954195cc592e86846dbbe7f3c2c5603690a
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 03:41:51 +0000

flight 163444 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163444/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163327

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9aef0954195cc592e86846dbbe7f3c2c5603690a
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    3 days
Testing same since   163327  2021-07-06 12:39:04 Z    2 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  David Edmondson <david.edmondson@oracle.com>
  John Arbuckle <programmingkidx@gmail.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Thomas Huth <thuth@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 553 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 06:35:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 06:35:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153421.283469 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1k6S-0002oU-Q6; Fri, 09 Jul 2021 06:35:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153421.283469; Fri, 09 Jul 2021 06:35:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1k6S-0002oN-N0; Fri, 09 Jul 2021 06:35:12 +0000
Received: by outflank-mailman (input) for mailman id 153421;
 Fri, 09 Jul 2021 06:35:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lQXj=MB=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1k6S-0002oH-3d
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 06:35:12 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ceb781be-e07f-11eb-85d2-12813bfff9fa;
 Fri, 09 Jul 2021 06:35:10 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2057.outbound.protection.outlook.com [104.47.13.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-26-RZR042R5O32_2tJPYc3sbw-1; Fri, 09 Jul 2021 08:35:07 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4445.eurprd04.prod.outlook.com (2603:10a6:803:6e::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.33; Fri, 9 Jul
 2021 06:35:05 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Fri, 9 Jul 2021
 06:35:05 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0071.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::10) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.11 via Frontend Transport; Fri, 9 Jul 2021 06:35:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ceb781be-e07f-11eb-85d2-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625812509;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=b+AqiIWTysBKJojy2RXCG6sPRdvypnGNnb8IKWgMX/g=;
	b=U7KZ3BTlTDLUMFeXYCUorET2aMvNcAe3HDHooNcNy1q2fmGJry/nGcf7c+YEtb7vEOWiMa
	vdnOJks+XSid9iWETXFWz7g/XBLN6Zc+DHMIzvNLBM/2YEHCpvewxAEU9HE0UY3Qd+3YGd
	mruRTbYU62JEEKUEWYHt3JZxNaqeUHU=
X-MC-Unique: RZR042R5O32_2tJPYc3sbw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c2IsWZLnsi1ZfXVIDG9mlRePMfzI6jHbXXUrJnrpm42NHLighznhtMiCoQZrr5vGhD/N3SxtDbmIQgYzeBW5vDY6wDuM+XbRt1ydwtH4vVFu88YaV99PrJcsI3V3QL0++dQmUYzS8mJMbGvEPwxpr62fmqyrb61yewkuYIRwzAZ1PXLK/0LJ96zadO5ust9PVQAsFEMCftw6jQAAvSNP0j1GtAD492m0XZQU+Tzp5RAwGtPo8wO9aqXbaiUDXJee2m6PkAfZ9IZ2sx4NfQLSlLxe8siv87uv/GXsYN0pyGXQR1LKvJc15BydRnJCSHrZtdtxIVJkteSN0J9z0QVYhg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=b+AqiIWTysBKJojy2RXCG6sPRdvypnGNnb8IKWgMX/g=;
 b=gWiM0p27mzez+tu0VkJ+LH7KirF8ESCcluzCeZ+WpTE1YYZrt516x1GPN7QSS1Dyj5k11r1dG/RWgpE9Vo3TDrpj1nF0xJp0COqOVu0rf5BhzaQvyTl5m0j73L7QR5RsdyRXMym6QxGLon8rfCvMpD+JrD4wmHUokSSCdp588RG+nbhwu1o00bDAEQiBlG3vXyLZDU3fqmMS3W4Ycxj8JxsPudQ3Xb8KBrRnWSf8lqQzVkkVfrCRy3+Fl85GqcGHLf+4gatX3oByZIt7dRMyCRjxgn9zcLtcuu1MZrtif2j5IbzBfH9sz18XUckcc9OMBsYVI7TIS/Qo71+N0SnLdQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v4 0/2] Introducing Hyperlaunch capability design
 (formerly: DomB mode of dom0less)
To: Christopher Clark <christopher.w.clark@gmail.com>,
 dpsmith@apertussolutions.com
Cc: andrew.cooper3@citrix.com, stefano.stabellini@xilinx.com,
 jgrall@amazon.com, Julien.grall.oss@gmail.com, iwj@xenproject.org,
 wl@xen.org, george.dunlap@citrix.com, persaur@gmail.com,
 Bertrand.Marquis@arm.com, roger.pau@citrix.com, luca.fancellu@arm.com,
 paul@xen.org, adam.schwalm@starlab.io, scott.davis@starlab.io,
 Christopher Clark <christopher.clark@starlab.io>,
 xen-devel@lists.xenproject.org
References: <20210514034101.3683-1-christopher.w.clark@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c420fd7a-c8f9-03d4-760d-f619a927531f@suse.com>
Date: Fri, 9 Jul 2021 08:35:03 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210514034101.3683-1-christopher.w.clark@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0071.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:49::10) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7e139d08-d3ce-4f01-81a1-08d942a3b009
X-MS-TrafficTypeDiagnostic: VI1PR04MB4445:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB444541C24E1FEE29BBF4DC13B3189@VI1PR04MB4445.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	DbQEVjcRrUUXUa5TB8Agt9Oncun+hYIwNsfikM3lH1fC4HsW926XTghKq81ed6+6NomN5xUCYU6KSHk9Mz7HNh42oy8XU+GeqV35xAjwLuOEBhNR5/tWa7VzAE6DfraVdJeyRJtm3NRKOWHYQ+H4NYGUcdNynyU8j5L3s9MAhoiQEjmtgj3/w3knf7nVjO4/wrTjXdMENCE6llLnkajFsneG+mDT1P8JpbkJsFqIlhleN+hjA9Ktn4DiijRms3cOxOUg8sPLO5F1tvud/nFyxyAi6P1YuoqTyfRoGq6kc+TCF5H3Hb2sxSDcAYdsQuiB5jEx+pRWGiuc0PxOUILEZRtnIJ/Xls9fED/FK6BeRSqfgFBdY2uSgi37vV+qVqb76nUoAqSSIq811G9za0HkKnqbJqFAc47mp2Nnn6kb7bY1F4OI9u7kAnVC8ZzWeTG45VhNL3U40aHImodGMnEHygGkIKoevM+EpLHhwzhtNp2txKV8LbwY5zS4T/AKGJrAGS1+skjiJBVFjMZszyIgL7902j/wZYGv3vDiqUw1v5xzuFj5dWg4ye1zqdWM7HuHydaFft8UVoDF35g7ppeU/FVVZ2UufLPU8n/TEpeVyyAeiRJZPF2Q6P7oBwFBJHsjk0n9xRxAlQOFPp/aWWZsUB5H4dPQJwzPkWN/7Gf5OnS16F4y7W+2948e2rzwqc0jFDSsyaWQ7hmyRN7ougd6LVIbswxNHJDV54xTC5RmZqHOuYSG3/7Kf6CyJImgHGVz
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39840400004)(136003)(376002)(366004)(396003)(346002)(26005)(316002)(8676002)(186003)(36756003)(4744005)(2616005)(86362001)(83380400001)(6486002)(31686004)(38100700002)(956004)(8936002)(4326008)(478600001)(53546011)(66476007)(2906002)(16576012)(66946007)(5660300002)(31696002)(7416002)(66556008)(32563001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?d1uNMo7iqKDT6b+L5//SshcevKDu2XSFnU469G5?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7e139d08-d3ce-4f01-81a1-08d942a3b009
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 06:35:05.2819
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: X+xfvsahvRkxE+EzPn1ysJuib77zHURL7sYn3euC3liD0D3mQBmHBYGL3V/If3dyEC/R1y3KkrlRFCkXebwJRg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4445

On 14.05.2021 05:40, Christopher Clark wrote:
> We are submitting for inclusion in the Xen documentation:
> 
> - the Hyperlaunch design document, and
> - the Hyperlaunch device tree design document
> 
> to describe a new method for launching the Xen hypervisor.
> 
> The Hyperlaunch feature builds upon prior dom0less work,
> to bring a flexible and security-minded means to launch a
> variety of VM configurations as part of the startup of Xen.
> 
> Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
> Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
> 
> 
> Daniel P. Smith (2):
>   docs/designs/launch: hyperlaunch design document
>   docs/designs/launch: hyperlaunch device tree

As settled on during the community call yesterday I've committed
these. I have to admit though that I would have found it nice if
there wouldn't have been a need to massage the patches: git
legitimately complained about trailing whitespace in quite a few
locations.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 06:55:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 06:55:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153428.283480 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1kPY-0005DO-Ka; Fri, 09 Jul 2021 06:54:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153428.283480; Fri, 09 Jul 2021 06:54:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1kPY-0005DH-HI; Fri, 09 Jul 2021 06:54:56 +0000
Received: by outflank-mailman (input) for mailman id 153428;
 Fri, 09 Jul 2021 06:54:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=lQXj=MB=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m1kPX-0005DB-PV
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 06:54:55 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id edd21a23-6c0a-48e1-8160-5314c5c172d9;
 Fri, 09 Jul 2021 06:54:54 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2058.outbound.protection.outlook.com [104.47.13.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-7--DkjzUFpNGefCoysl8usPA-1;
 Fri, 09 Jul 2021 08:54:52 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7375.eurprd04.prod.outlook.com (2603:10a6:800:1a8::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 9 Jul
 2021 06:54:50 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.022; Fri, 9 Jul 2021
 06:54:50 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR02CA0195.eurprd02.prod.outlook.com (2603:10a6:20b:28e::32) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23 via Frontend
 Transport; Fri, 9 Jul 2021 06:54:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: edd21a23-6c0a-48e1-8160-5314c5c172d9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1625813693;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=4VIVQKKSJaH8pLHfH4nQaEpWHQQMqchVtwdLoMY9bxA=;
	b=RfRpaerhqahqWmC1Vh38ZD+B8iLty2Ls+kziGlTXyUl4e14jNHM3qx2et7KU9GmdJrGi52
	u4ilnKMm1RxnF7YOVdNt/GOjKBps87nn2Wl+7k6/6jqnDhBkjg4rWDBs+yZLRKD8AlnY6S
	PJzadX60DPe8FvF5Lfwzhvxf36Fuxtw=
X-MC-Unique: -DkjzUFpNGefCoysl8usPA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Dt+vsjdkV96nWDlqu2/1g7cyf5FaLnDACTdZY+cxfigHttHQRG5qDRqbr9R2f4pvXmZbNdKwi8XBDwXXPZubtniSt3vlGBVVIwyI+CxwPsBmsfow+87+nxfNKLlASolKsAGlFrmsHGgyLe5l1tkuOvmuOJ+xXmUkM+qqDqUMkpoXqTK5qgWVWJSjYDHucVn7YshTKLZrDMluO0r52lu76F/lK99VfbUJqnH2/6kvSAgWkYucjEPEg74xB/haitJbuZljseVOk5jXf3YvuVVh9wlE2bA78oczfdcIitbTv3mkr24fP97ZeV0Ks5jQjE+qBGa6OAWvSBCudARqkpt7ig==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4VIVQKKSJaH8pLHfH4nQaEpWHQQMqchVtwdLoMY9bxA=;
 b=AXCaxeVZUExbbC9xJywoIXTGytlinWZ9q2xxcKZfLny4dc/MGA1uwhArUztCHFQJ/XXpD4lpeWZVMfQpifln7lYYLqqKeHW0qlLjj3BuhBbBZs01Yxq3Iebtf1JdElJWjyVcRJSYuTvKMFKCa7yIWf50275WG8JiM1PsPhgdQWFeAsm6zeIbpPzIEwNKqhM5LThOHshn0XzrydH7bQ9T44REwNywv0ocsdQRJtEuqhhwkVsHVRaX/JOyNH4dU7v9wDbkhBtnNXLfp4El6UbrsyKG6/D8gswEeq8CL5/yv8m9ca9J7JKlMhxwtu4jzYjziWX2JADmnuQlG48fSPO8CQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v1] compiler.h: define CONFIG_GCC_VERSION
To: Olaf Hering <olaf@aepfle.de>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <George.Dunlap@eu.citrix.com>,
 Ian Jackson <ian.jackson@eu.citrix.com>, Julien Grall <julien@xen.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210618164207.5111-1-olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <3731c0b8-0e84-9fd4-80d5-416cd2c59818@suse.com>
Date: Fri, 9 Jul 2021 08:54:48 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210618164207.5111-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR02CA0195.eurprd02.prod.outlook.com
 (2603:10a6:20b:28e::32) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fcffc0a9-4cbe-42e2-944e-08d942a6728e
X-MS-TrafficTypeDiagnostic: VE1PR04MB7375:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB73750697830EF30B348C9567B3189@VE1PR04MB7375.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NIQpBVgu12BbW4Xuz/YoAkKDapI+MdkkR3dScqNKnJT64PxFNRTxPB+lt6p+NZ81R1YF5PBNRgtlISEbCU6TwsVjszjcoXCpvgBYw3hcQv6XUVQseNbo09EgETtT0LCxgUBrIjeqy7F3o2K6b3bTnyXTX9f+DrGYQipsfHvemZ2GaeoHbyK3Gs+lXqbxrP0cxZwOXrCsIhf4T/PnuPUyS9Q2rd5AgfxjOKU/EKcZ/dd+z5mAHSEtLBd+1afN4Axru9Kk/kf4GAWQrMMDlxgBg+50fcLDN+RhkoqZ8VSqZ9O0SEL79sIMrnsY90hSuoieiZsZU95V5Z2IaFzyHDVOgxiPmGWaqpqLNfHIez+aW1ZJLkpfKBSwlDcoUCe11XzgZq9ET8T3STxiMSwSzdlLbUmA8+sXAgF1tj+BVAqzekEYV69mafMCj1NJ8otjxoD3xhcov7BvAVp/ncQFHBBB3GWoMEmNY+voFOahZctD0rpLwFaJzEVM2da6GnN1boLJHSXZNkCef6Bw/p88fwhjVN7jyg32MiwAjwtowLWrO9tEN+lueJK4xA34Llh4nLVuSwvBXRq7UYLX9S1e0a0JkcUWLQzNVPM647sYoCDFgZS7OyKWdRZr9OOyptbzKJvtIXR//jboPn553WngaQRRwobdNUrSYgRgLf56iebyzBVCvpphk7sNw+no1q61MGfo4HBq9T978Rk/Kk0HqGOpzExrK4OMDceMauyeu+X8ot4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(376002)(136003)(39850400004)(366004)(53546011)(36756003)(8936002)(26005)(31696002)(186003)(54906003)(316002)(86362001)(2906002)(478600001)(8676002)(31686004)(16576012)(66476007)(66946007)(6916009)(4326008)(5660300002)(6486002)(66556008)(38100700002)(956004)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fcffc0a9-4cbe-42e2-944e-08d942a6728e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 06:54:50.5315
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: kaLL+QDxOcKyXDelsf7SZO9njPtYyyoJR7PEABw1VLtcLHC3aEKnuz6CT6ejh7bAZw/Ef2NnV5AOo0CUefM8Eg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7375

On 18.06.2021 18:42, Olaf Hering wrote:
> --- a/xen/include/xen/compiler.h
> +++ b/xen/include/xen/compiler.h
> @@ -99,6 +99,13 @@
>      __asm__ ("" : "=r"(__ptr) : "0"(ptr));      \
>      (typeof(ptr)) (__ptr + (off)); })
>  
> +#ifndef CONFIG_GCC_VERSION
> +# ifdef __GNUC__
> +#  define CONFIG_GCC_VERSION (__GNUC__ * 10000           \
> +                              + __GNUC_MINOR__ * 100     \
> +                              + __GNUC_PATCHLEVEL__)
> +# endif
> +#endif
>  #if CONFIG_GCC_VERSION >= 110000 /* See gcc bug 100680. */
>  # define gcc11_wrap(x) RELOC_HIDE(x, 0)
>  #else

Having thought about it, this feels like the wrong solution to
me: I'd rather not see us introduce further CONFIG_* which don't
really come from Kconfig. The more when we have an even simpler
alternative:

there's no CONFIG_GCC_VERSION

This was introduced in 4.14 only.

Reported-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/include/xen/compiler.h
+++ b/xen/include/xen/compiler.h
@@ -99,7 +99,7 @@
     __asm__ ("" : "=r"(__ptr) : "0"(ptr));      \
     (typeof(ptr)) (__ptr + (off)); })
 
-#if CONFIG_GCC_VERSION >= 110000 /* See gcc bug 100680. */
+#if __GNUC__ >= 11 /* See gcc bug 100680. */
 # define gcc11_wrap(x) RELOC_HIDE(x, 0)
 #else
 # define gcc11_wrap(x) (x)

I'll also adjust the original backport itself before putting it
on the 4.12 branch (where I think we want both this and the other
gcc 11 fixes).

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 08:10:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 08:10:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153441.283500 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1lZy-0004HV-L7; Fri, 09 Jul 2021 08:09:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153441.283500; Fri, 09 Jul 2021 08:09:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1lZy-0004HO-H7; Fri, 09 Jul 2021 08:09:46 +0000
Received: by outflank-mailman (input) for mailman id 153441;
 Fri, 09 Jul 2021 08:09:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=WfOa=MB=kojedz.in=richard@srs-us1.protection.inumbo.net>)
 id 1m1lZx-0004HI-MN
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 08:09:46 +0000
Received: from pi.kojedz.in (unknown [109.61.102.5])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 03f02284-e08d-11eb-85d8-12813bfff9fa;
 Fri, 09 Jul 2021 08:09:43 +0000 (UTC)
Received: from webmail.srv.kojedz.in (pi.kojedz.in
 [IPv6:2a01:be00:10:201:0:80:0:1])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
 (No client certificate requested)
 (Authenticated sender: richard@kojedz.in)
 by pi.kojedz.in (Postfix) with ESMTPSA id 64428BC7B
 for <xen-devel@lists.xenproject.org>; Fri,  9 Jul 2021 10:09:41 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 03f02284-e08d-11eb-85d8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kojedz.in; s=mail;
	t=1625818181; bh=P6FFuxV/dGedGQ2EQoFTtuFSDii+Y4ibKb3JQWjZMfA=;
	h=Date:From:To:Subject;
	b=SJf4aX+yAOt0TKROKf1iJr3ck3goKA8i5BztTZG74hUw0tKshnACzUnhKhQsRpcB7
	 w2dnl+4c23YhrYQRvL750p1baEB5uhiaYP/gPa0k833FE4C1piPddLWLTHMAAuOT6v
	 zpjSAAoZt4YG7NbxUooDT9fSXh38Hvn8xsMtG269COwgvogz1tVlVMqiIhll4Iixaj
	 nZJVBSy4kuPgXxAf79Zxb4HXhvF+Q61WhyVbKCx551oIiOr9bKh5Becj0hy4XXxs2S
	 WIUZ6cJLjo89x/4nJVVIhyrf20iJHYFL2WnM4Lbvu7CxgpCNY4kv8txCEpY7H5oVzD
	 5YHozTW3PQWch8HH4yoqFpQqX5O4DntgUWuXfi6fM38yh/1Ho1SwuO0NT9Z3ZOts1b
	 tgyoLBlqN3QagzYsnmbyaw5quhSvWMo36WstMSB5Y9fTMJaIP+js35ekjRO5tDz1JY
	 nI+O3ZjmuAU8gZL86dYRDSUmENpEfGwP2E1s6i7rcYqHOMnCaJijxC7MS3OY/8O4lr
	 K1eRk7ckaryZu6rE1GRUF28HN0FNFLs+MDrYmHE3+9a62jgQ6X5nIFOTW7SeBBgYyI
	 jRCUSaEf8XlTsEVINMbVCc0ijkjJHP0Rm9lxh8Tl01v4DztgvI3FEvjGiwWgvTsZGO
	 Q9wmnyaohCZA1zl5lD/vLBbY=
MIME-Version: 1.0
Date: Fri, 09 Jul 2021 10:09:41 +0200
From: Richard Kojedzinszky <richard@kojedz.in>
To: xen-devel@lists.xenproject.org
Subject: fix vbd rd_sects stat
User-Agent: Roundcube Webmail/1.4.11
Message-ID: <585c34fd96c6e22847333d9d18843c0f@kojedz.in>
X-Sender: richard@kojedz.in
Content-Type: multipart/mixed;
 boundary="=_166633c9f6f5ab3eb31c6c3714bf1cdc"

--=_166633c9f6f5ab3eb31c6c3714bf1cdc
Content-Transfer-Encoding: base64
Content-Type: text/x-diff;
 name=0001-xenstat_linux.c-fix-populating-vbd.rd_sect.patch
Content-Disposition: attachment;
 filename=0001-xenstat_linux.c-fix-populating-vbd.rd_sect.patch;
 size=1130

RnJvbSBkMDlkMjdlNDBjZmJkZDJkYmY1YWVmYWE0MGE0ZjQ2Y2NiMjY4MDU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlkOiA8ZDA5ZDI3ZTQwY2ZiZGQyZGJmNWFlZmFhNDBhNGY0
NmNjYjI2ODA1Ni4xNjI1ODE4MDI1LmdpdC5yaWNoYXJkQGtvamVkei5pbj4KRnJvbTogUmljaGFy
ZCBLb2plZHppbnN6a3kgPHJpY2hhcmRAa29qZWR6LmluPgpEYXRlOiBGcmksIDkgSnVsIDIwMjEg
MTA6MDY6NDUgKzAyMDAKU3ViamVjdDogW1BBVENIXSB4ZW5zdGF0X2xpbnV4LmM6IGZpeCBwb3B1
bGF0aW5nIHZiZC5yZF9zZWN0CgotLS0KIHRvb2xzL2xpYnMvc3RhdC94ZW5zdGF0X2xpbnV4LmMg
fCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRp
ZmYgLS1naXQgYS90b29scy9saWJzL3N0YXQveGVuc3RhdF9saW51eC5jIGIvdG9vbHMvbGlicy9z
dGF0L3hlbnN0YXRfbGludXguYwppbmRleCA4NzVhMDYxN2FkLi44OTM5Y2YzYmNkIDEwMDY0NAot
LS0gYS90b29scy9saWJzL3N0YXQveGVuc3RhdF9saW51eC5jCisrKyBiL3Rvb2xzL2xpYnMvc3Rh
dC94ZW5zdGF0X2xpbnV4LmMKQEAgLTQ3NSw3ICs0NzUsNyBAQCBpbnQgeGVuc3RhdF9jb2xsZWN0
X3ZiZHMoeGVuc3RhdF9ub2RlICogbm9kZSkKIAkJCQkocmVhZF9hdHRyaWJ1dGVzX3ZiZChkcC0+
ZF9uYW1lLCAic3RhdGlzdGljcy93cl9yZXEiLCBidWYsIDI1Nik8PTApIHx8CiAJCQkJKChyZXQg
PSBzc2NhbmYoYnVmLCAiJWxsdSIsICZ2YmQud3JfcmVxcykpICE9IDEpIHx8CiAJCQkJKHJlYWRf
YXR0cmlidXRlc192YmQoZHAtPmRfbmFtZSwgInN0YXRpc3RpY3MvcmRfc2VjdCIsIGJ1ZiwgMjU2
KTw9MCkgfHwKLQkJCQkoKHJldCA9IHNzY2FuZihidWYsICIlbGx1IiwgJnZiZC53cl9zZWN0cykp
ICE9IDEpIHx8CisJCQkJKChyZXQgPSBzc2NhbmYoYnVmLCAiJWxsdSIsICZ2YmQucmRfc2VjdCkp
ICE9IDEpIHx8CiAJCQkJKHJlYWRfYXR0cmlidXRlc192YmQoZHAtPmRfbmFtZSwgInN0YXRpc3Rp
Y3Mvd3Jfc2VjdCIsIGJ1ZiwgMjU2KTw9MCkgfHwKIAkJCQkoKHJldCA9IHNzY2FuZihidWYsICIl
bGx1IiwgJnZiZC53cl9zZWN0cykpICE9IDEpKQogCQkJewotLSAKMi4yMC4xCgo=
--=_166633c9f6f5ab3eb31c6c3714bf1cdc--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 08:15:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 08:15:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153453.283511 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1lf2-0005ji-7s; Fri, 09 Jul 2021 08:15:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153453.283511; Fri, 09 Jul 2021 08:15:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1lf2-0005jb-4J; Fri, 09 Jul 2021 08:15:00 +0000
Received: by outflank-mailman (input) for mailman id 153453;
 Fri, 09 Jul 2021 08:14:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1OC2=MB=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1m1lf0-0005jV-U1
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 08:14:59 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bf7a9480-e08d-11eb-85d8-12813bfff9fa;
 Fri, 09 Jul 2021 08:14:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bf7a9480-e08d-11eb-85d8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625818497;
  h=date:from:to:cc:subject:message-id:references:
   content-transfer-encoding:in-reply-to:mime-version;
  bh=wNCHcaY8PpQa06AnzSJ35wlGVWYVRcExyqVoNOh81Ek=;
  b=Wa/Q8g3s8NbV3KwHaGfS127EwLZZHcPS/4NIWtlv8bfeIjbbQuPbxMKR
   dikeCS7VhxMyftWAk55FvqO2HM1qfbwkandGJo2XfbQ3NybfB0z9eO6Ru
   HgOtYddyu0CK4LTyFDedsiikhgJUMazCC/YZz9bJ4yld64XB8irxswUrk
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: xS/GOEzTtq6b1R/p/oo7VFVtoWP4RUIXIeWY7FxJJMjrReLEoSwKcvf96106FGt0fpy89+5T2Z
 L2zhpF0nj3goGDTt34s+i5toxWD/9Ge5kPf1cCtTxIHggOOQ7z3t6coMXZ62NUmI6NBq5QMzts
 pKfQHhRS0SEgxRvexnQAyh+9428xUpO9BuhCtqhc6S51ymzQGMeeIWK0wkhpv1hfspT0Lgcje0
 d8/QKAO0ad4FyO1JORczTutCBCdpCwQQ9832FigzH9sHfsbzwXpuUQcxtGIl1Rkkn1+U8IAHFA
 zcU=
X-SBRS: 5.1
X-MesageID: 48291211
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:2Xwd9q7Qu73YqfLp7wPXwXqBI+orL9Y04lQ7vn2ZFiYlEPBwxv
 re/8jziyWVtN9IYgBQpTiBUJPwOE80hqQFkbX5XI3SHzUO11HYUb2KgbGSpAEIXheOiNK1tp
 0QMZSWaueAcWSS5PySiGTVfLhAsbz3lJxAx92usEuFJTsaN52IhD0JcjpzZ3cGPjWucqBJb6
 Z0iPA3wQZJDx4sBPiTNz0kWPXnodvTzPvdCiIuNloC0k2jnDmo4Ln1H1yzxREFSQ5Cxr8k7C
 zsjxH5zr/LiYD/9jbsk0voq7hGktrozdVOQOaWjNIOFznqggG0IKx8Rry5uiwvqu3H0idvrD
 CMmWZmAy1A0QKJQoiHm2q05+Am6kd015bW8y7fvZIkm72ieNt1MbsduWsTSGqr16NphqAP7E
 sM5RPHi3MfN2K1oMzwiuK4Ii1Chw66p2EvnvUUiGEaWYwCaKVJpYha509NFowcdRiKprzPPd
 MeQP003swmPm9yrkqp9VVH0ZipRDA+Dx2GSk8Ntoic1CVXhmlwyw8dyNYElnkN+ZohQ90cjt
 60cphAhfVLVIsbfKh9DOAOTY++DXHMWwvFNCaXLU78HK8KNnrRo9r84akz5uutZJsUpaFC2a
 gpkGko+FLaXnieQfFm8Kc7hCwlcV/NFwgFkPsukKSRkoeMDYbWDQ==
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="48291211"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jjAIWBQytW+Y68tsT/vG6Fgi4dRoZfihmANUhJnHn210Sm0l5tUJdejS3w5FeQMdrbzf2ig/tJRzxU1in6VbbbWQBk/50lpv6UvOvjN3pn1D1av/PX/DbBurCym9/CIMd3PjxABWyjVEWrM+jN0YEEE7+0JH11uwBFbHMHYG9QLOT1MYy9j0d2ohr+JIW+uqktIfuD8QpwgDQZ4wCiYpuW4oadUtnhcKoOqkR7KI19q1fRz2BYLJokEWXVdLWJdL/fwG2bDlSeJVYgS0STrIby8HDXNYBiq9h99bNei/3xsYXl4a56L2Y/L++U4kJKb59ippKg44fxSBVVf3YAyLsA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oFem6uGJ2E9xEXuVT0KjbIet7gkhYvqMRPD+x1DZX/s=;
 b=n1QgdWCvhR8SXUS0P0OTk+LdIH2uY2NGbA0SUSis+d8PYw5/WNcPLgypg6qb7OOfjj5ApbwdvPL0QOWmRdZ9d6uKtE4o+AQtl0uU/E6W0xowsr6Qd6QoHfQU0w57K6L+8Q8QyUDjU1QuoG9wHk8WQmHKxOhWy6wlhZjiNEUDQocA0/I0rxn+4VdzRWoy0MeBE8aMeMLyYubljU3obQqSy/ZEKBFtWk7FtahFPC9hyztUIeS7oZyRJh73WrRFWhHqphXSELllDU4QrEZom55THY54xGJ0TsQm65gWG7OzZh7+fZyM5sbmOBx43R6XTLkv2KNXRZlqma7RNqyd0Md75A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oFem6uGJ2E9xEXuVT0KjbIet7gkhYvqMRPD+x1DZX/s=;
 b=XomXI5H5k4A3RB56JK38qqizVAFe2kx7jDwABVeEX7W/9JWlN3xbZQkmxZd2pETk97vvXeBGRThhj7F3UgyZvZLk2FXx1F+DngC7DiWZTAqX3lJHgzTntM3dlmsSDBwJ+TzIS9iarEE5NuYTbn5i/hZ3sxuCINpxLGL2A/4mvAU=
Date: Fri, 9 Jul 2021 10:14:41 +0200
From: Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Anthony PERARD
	<anthony.perard@citrix.com>, Doug Goldstein <cardoe@cardoe.com>, Wei Liu
	<wl@xen.org>
Subject: Re: [PATCH] cirrus-ci: Fix FreeBSD build following QEMU update
Message-ID: <YOgFceT/gHZsYvGp@Air-de-Roger>
References: <20210708130232.3159-1-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210708130232.3159-1-andrew.cooper3@citrix.com>
X-ClientProxiedBy: MR2P264CA0006.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:500:1::18) To DS7PR03MB5608.namprd03.prod.outlook.com
 (2603:10b6:5:2c9::18)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 069001a0-4ceb-4b76-9a25-08d942b19def
X-MS-TrafficTypeDiagnostic: DM6PR03MB3835:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <DM6PR03MB38358A73F69C102F29A795A78F189@DM6PR03MB3835.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1060;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: w2MOTdMyy4Leu4PaxK1LH/P5JJ+Nk9pJqQn2+LVhWgAf0DY/KT/PoaOuFXcTmgcJFR7TqAND16OLcAK6slULANjvg2MoS8psUtDYqbq0xIcDYcUsuyO/N/qBw33Dy52uleZlH8phkQUOHtCwpDXuet5AZC7JSJwHiOAwczQvSur/5ZIH0ysmVfR9pVS8rd2jrCT5BKS8L1w+bkHzI9Ls3oYsYXh4iaSwEe56IjMnj8Ut1r1R4ncNMOUfYTcTA8WCaC2fUe59sOBdh9F7t4IsQrpuF/TV8MFdmHaI0GZxLO7UMte18N8pyTWsYoPZEM/u2tZhW/z8E8R8YcaQ+MoYzH40w6wnAoiaIi6fl+RsqJZeB6dDiZeiTpS2OMseOCoMCawlzVYFAco5HItKwAtFcXllKJvOtAGySJ2THT4P3U8dvvl5PqeqSSA2ww/vjPLkcKIUDm6WW1HXZ6hGmC3MXvdO3Pj3A6z6QzEtDsvcEV2ImV3dAPf8GiFGA/PvwCZhwkOVbu38mC2tFkQxQRoQ2bnqfz0r+2qp1UnjhyLJ0k6/iaDt3YmUNiqO8QsQcUm0kVjVQBDyE6h4QPVFnnahepOcTTnum8pcQrRDSvIuRnIRr4BTJWp/Iaoq6fSWpM4jmOyXa802G/rE5LHm73Gr5g==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(7916004)(4636009)(136003)(366004)(376002)(396003)(346002)(39850400004)(6486002)(66946007)(8676002)(38100700002)(6636002)(186003)(66476007)(478600001)(6496006)(6666004)(66556008)(9686003)(54906003)(33716001)(85182001)(4326008)(558084003)(26005)(86362001)(316002)(956004)(8936002)(6862004)(5660300002)(2906002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?UQmR7Cbb6Sb+5EzFaUQIDOMvghjO/KV/aOaK/oq?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 069001a0-4ceb-4b76-9a25-08d942b19def
X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 08:14:47.7051
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: T/8EwWPkoUv1fGPgStjH29vWdAdqboS786beXj7DrwAs1MAsEDjfpV+gzDm3KMTAPWlPtMXjbZhPmMMDq0D3BQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB3835
X-OriginatorOrg: citrix.com

On Thu, Jul 08, 2021 at 02:02:32PM +0100, Andrew Cooper wrote:
> QEMU requires ninja and bash to build now.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Roger Pau Monné <roger.pau@citrix.com>

Thanks!


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 08:33:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 08:33:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153459.283521 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1lx8-00086b-KE; Fri, 09 Jul 2021 08:33:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153459.283521; Fri, 09 Jul 2021 08:33:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1lx8-00086U-H7; Fri, 09 Jul 2021 08:33:42 +0000
Received: by outflank-mailman (input) for mailman id 153459;
 Fri, 09 Jul 2021 08:33:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1OC2=MB=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1m1lx7-00086O-B7
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 08:33:41 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5cea9279-3b2f-41af-a263-f0b3f5e81ac4;
 Fri, 09 Jul 2021 08:33:40 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5cea9279-3b2f-41af-a263-f0b3f5e81ac4
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625819620;
  h=date:from:to:cc:subject:message-id:references:
   content-transfer-encoding:in-reply-to:mime-version;
  bh=nngl7V5K6Z5vKANX18zotJU3yl28ufC4P5mgv3z8cyQ=;
  b=fVBNqUIqh463RgAK2Dr4xfha2R3GVhOEA9Ie04ZPbGMpPPpQyOs4i2Xq
   bPH2RLrtME5rFvAuar+mSRELBnkJb50UVAhgyvU/+n7JCz0Z7klXp5CvS
   LV9w6Q1m5fM6zTKznYk9i/vTglOtYf9CFAgVvcnRAcg9dJH9X9yqy51xZ
   U=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: ZkysGMRK8DJPx81GA2D+JhgcLE/ulq3r/iE06h+t65Y5y1rU7deQ2E9HAMmeuHDZ6qBdjfCF8z
 RBD9SGsZ0k48Tsg16MFfSXloWB+lBDgFT18W0vKQGXvyZ2UmDYxvOy/Kz9r7FzM34TTSGKaQBu
 QS7euSL//wrlrpHDk3nWbtH22wKy+YJXFocazMdLIKpzUnnWBhXwElRNQsGbFhjy6in8fmsa56
 l+LdVRUFU3LMMR6RpX5SPfTyU4vzZCzD7x4/Hx3AYVXqGxDd/wj+oyeZ3a+fotZUoZ11sUoqOQ
 bkk=
X-SBRS: 5.1
X-MesageID: 47615989
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:QcVp4q3oVcMXlEMhFoZYwQqjBU1yeYIsimQD101hICG9Lfb2qy
 n+ppgmPEHP5Qr5OEtApTiBUJPwJk800aQFm7X5Wo3SITUO2VHYV72KiLGN/9SOIVydygcw79
 YET0E6MqyNMbEYt7eK3ODbKadY/DDvysnB7o2/vhQdPj2CKZsQlzuRYjzrbHGeLzM2Y6bReq
 Dsgvau8FGbCAsqh4mAdzM4dtmGg+eOuIPtYBYACRJiwA6SjQmw4Lq/NxSDxB8RXx5G3L9nqA
 H+4kDEz5Tml8v+5g7X1mfV4ZgTsNz9yuFbDMjJrsQOMD3jhiuheYwkcbyfuzIepv2p9T8R4Z
 TxiiZlG/42x2Laf2mzrxeo8RLnyiwS53jrzkLdqWf/oOTiLQhKSvZptMZ8SF/0+kAgtNZz3O
 ZgxGSCradaChvGgWDU+8XIbRd3jUC5yEBS39L7t0YvErf2VYUh77D2pChuYdI99WPBmc8a+d
 BVfYHhDK08SyLfU5ix1VMfsOBFXRwIb167qwY5y4uoOgNt7QVEJn0jtboid0c7heAAoqZ/lp
 D524RT5flzp5wtHOlA7Nloe7rBNoWKe2OLDF6v
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47615989"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cHog8tom7xr0w4MJlBWXuUL1FOQQKZ68lFxKyrsIPpub8ygkcTBJ75R1QoIVnM78zr2qD3z+n9nhy9KVXZTnuFezNlSIftTu76hcXlAGJZNI3LVaC37rvE0agRBsTTbqUuCiYN4LLaCCvU4CEZwYiZ6/fzebFE8eNcHEVpbxiR7zQf4vfsbklPOAS9CRcneBrr4qGzwjXmOBL3w8cUB7fPDJ06A56Zw8gOnM8TnyBS13phoY8CfXkKdG6VjogW1e64ORCx5ZbeswI2MBqaiQY4KJgtmtB6fHD0o/ByYnMuMUcBNYvJgAmsfkKfRVfdwgU2tS7JpWcXr5NCEAEFsIqw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=E9KKl21UAmL/jws+5CN1kY0kBERKBHzSIvi3oXfE8CA=;
 b=NkCE2W+GOmD16BdQ+su52iwVhtk1M5Eq1hmiQKPKf0ESneNpAs00VogtJhpY6VNLkMnxx7Vp4svN5+mMMepMh4y1HP9wanJyvpKap7TI4mVP9AuQRGxRy7Y8n/DkXR1esQtuATahxDtzvojt7bGwvW4HZw/bmt3VhWNOteMhpZjlYcLT+nzXflhhTVFIWaztct39akC3C0YxtrbzBApturjUFTkHw9URUefEUb2RatRh0q+UpYV6O+xGNpbNo92Bw5DEtQlJioLDiec35xrkaC/jBNFvoV1tgPJ04MF2Pw+dOMP2opIDLZlUQTtNarfFxPl/g0kqsWXXfExofwxvGA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=E9KKl21UAmL/jws+5CN1kY0kBERKBHzSIvi3oXfE8CA=;
 b=f9gIfuXeqkdrD/ZR6eHoo7cr35CbnfGTKfsmXfqFAlZXKdAKfgIjINUpbE0kBDIZM7V3WEZKJM/a5U6sO+PmOusJoa3Qbc/bDdupVrLrenr+1rw/LHe7r9vOEz8kPGhQM75SpczRmpyT+4Lnr9CuQqGGMaX+UvNQXk66RpHm6wQ=
Date: Fri, 9 Jul 2021 10:33:24 +0200
From: Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>
To: Juergen Gross <jgross@suse.com>
CC: <xen-devel@lists.xenproject.org>, <linux-block@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>, Konrad Rzeszutek Wilk
	<konrad.wilk@oracle.com>, Jens Axboe <axboe@kernel.dk>, Jan Beulich
	<jbeulich@suse.com>
Subject: Re: [PATCH v2 1/3] xen/blkfront: read response from backend only once
Message-ID: <YOgJ1GZFoKhRPHLX@Air-de-Roger>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-2-jgross@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210708124345.10173-2-jgross@suse.com>
X-ClientProxiedBy: PR3P193CA0055.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:51::30) To DS7PR03MB5608.namprd03.prod.outlook.com
 (2603:10b6:5:2c9::18)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 954ae81c-7c55-478b-8abe-08d942b439f8
X-MS-TrafficTypeDiagnostic: DM5PR03MB3291:
X-Microsoft-Antispam-PRVS: <DM5PR03MB3291785A49076C14898A07978F189@DM5PR03MB3291.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: bseVXSgx/ipDXjCVF4Kbvnch1BvEMZkbt7LV/kZH0VCDUaKec2k5tymt5XRVNyZOvjXnRShUKTkc9I0fE0HnmxKFUboEtyUhbAOEHG8DUUKjFVIHeYG3lENIQWYxwZHBQN5BmsH675wB25rP+3r3V9XD45ShwuzkzQqWUJxT+hBqO1OQHYbzZUQP/7ACjUZycUD1SWt+R2/Zc8UZSDJsynkJ9rh7HpXECuPXUyOg1iDmH+3I4UaTibrkB1hsjmzqBpcHFkeumcksmvsQFz0zeGSOZsEwMvxcc9UvSos2d+iQx4cZaPylv52+YCGLAU7uiXyvrLy9KN00cZI84r59lTPKPCJOEjwcrSua1z1HxmXk3z4Omho54QCAH/Nh5n/EjMB1Ng4FBBvFTMqE7JT8JSpIvAzEY4aZn/6remh2S7clrZhpKnUQvOUSejS5sH60Of9kmbeZ1KO1FLEwzatTL3HIjwlrXins0+JwhH5tA8Ah1IDzcLttEcqZ8jj6QT9Nvxnu8qAfWPR7n6HCgLL2VrnnNr6t1u+gXf8LfKZnsiA0TTs2C+bM4QLY2Fio37x3x/DOnNcY4/X19wVZYg7ONVVMZApvkghYubOwGWGCA/aSt5kyof9txzXsKUBhKQx/EoSfU4XgQ1igD7OYk0935Q==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(7916004)(366004)(346002)(376002)(136003)(39860400002)(396003)(26005)(6496006)(6666004)(8676002)(86362001)(85182001)(4744005)(2906002)(316002)(478600001)(6486002)(83380400001)(33716001)(66556008)(66946007)(956004)(54906003)(186003)(6916009)(4326008)(5660300002)(8936002)(9686003)(38100700002)(66476007);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 954ae81c-7c55-478b-8abe-08d942b439f8
X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 08:33:28.4807
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NHJV/N8lmKeRjFr9WqyfE97MUrfTdcWQsfjrzzJBhMU5RqyEiFfv9uQZoKve06nSTM1F7DXqFJFfvZdEtwHWyQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB3291
X-OriginatorOrg: citrix.com

On Thu, Jul 08, 2021 at 02:43:43PM +0200, Juergen Gross wrote:
> In order to avoid problems in case the backend is modifying a response
> on the ring page while the frontend has already seen it, just read the
> response into a local buffer in one go and then operate on that buffer
> only.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Roger Pau Monné <roger.pau@citrix.com>

Thanks, Roger.


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 08:51:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 08:51:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153468.283539 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mEX-00022r-CV; Fri, 09 Jul 2021 08:51:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153468.283539; Fri, 09 Jul 2021 08:51:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mEX-00022k-7h; Fri, 09 Jul 2021 08:51:41 +0000
Received: by outflank-mailman (input) for mailman id 153468;
 Fri, 09 Jul 2021 08:51:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1mEV-00022a-Os; Fri, 09 Jul 2021 08:51:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1mEV-0004lt-Ff; Fri, 09 Jul 2021 08:51:39 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1mEV-0007dV-7h; Fri, 09 Jul 2021 08:51:39 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1mEV-00022d-7B; Fri, 09 Jul 2021 08:51:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Cx6pHCcoN4+Lk5jr2l4iA1qj6khRtR0hZtVq7jfOV1A=; b=RMqEmHSrIYTWFS6IsJ+V1Pzcfu
	+7tk3Yz5ttkP+sb0xnorG7hhkVquemzvPCdwglfml8YKJyNWZQ/59m0KjRcd6AZ9AS5ZQuYtsNKy7
	RfZo7kkzyd3euXuCNGZK0bKUzSUk3P1Bm2LgBiUXMljrTwbg4v1jm7oiVxiSDpPqpiQk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163450-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163450: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
X-Osstest-Versions-That:
    linux=82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 08:51:39 +0000

flight 163450 linux-5.4 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163450/

Failures :-/ but no regressions.

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

version targeted for testing:
 linux                8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
baseline version:
 linux                82ffbc138a1fc9076f55e626bd8352fc9a2ca9e9

Last test of basis   163198  2021-06-30 13:43:03 Z    8 days
Testing same since   163402  2021-07-07 12:42:00 Z    1 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alex Deucher <alexander.deucher@amd.com>
  Bartosz Golaszewski <bgolaszewski@baylibre.com>
  Christian König <christian.koenig@amd.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guenter Roeck <linux@roeck-us.net>
  Hulk Robot <hulkrobot@huawei.com>
  Jason Gunthorpe <jgg@nvidia.com>
  Johannes Berg <johannes.berg@intel.com>
  Leon Romanovsky <leonro@nvidia.com>
  Linux Kernel Functional Testing <lkft@linaro.org>
  ManYi Li <limanyi@uniontech.com>
  Mark Bloch <mbloch@nvidia.com>
  Martin K. Petersen <martin.petersen@oracle.com>
  Sasha Levin <sashal@kernel.org>
  Shuah Khan <skhan@linuxfoundation.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Sudip Mukherjee <sudipm.mukherjee@gmail.com>
  YueHaibing <yuehaibing@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   82ffbc138a1f..8b24c7edc2f2  8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6 -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 08:55:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 08:55:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153475.283553 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mIW-0002iF-WD; Fri, 09 Jul 2021 08:55:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153475.283553; Fri, 09 Jul 2021 08:55:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mIW-0002i8-SD; Fri, 09 Jul 2021 08:55:48 +0000
Received: by outflank-mailman (input) for mailman id 153475;
 Fri, 09 Jul 2021 08:55:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1OC2=MB=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1m1mIW-0002i2-Aq
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 08:55:48 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d49598d1-b7b8-4819-acbe-96e4b253648b;
 Fri, 09 Jul 2021 08:55:46 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d49598d1-b7b8-4819-acbe-96e4b253648b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625820946;
  h=date:from:to:cc:subject:message-id:references:
   content-transfer-encoding:in-reply-to:mime-version;
  bh=v80nvruMhMDWFw2bzoYTuW/XAJ9Oxps7XQZohkOcA2A=;
  b=iBqc59zSwFLZZQfL6MZmPAvO98LeyISS6HYuOuUEyap4nuXmjk6X31+3
   GqynvaGHE+H9Hlr45Xzf1i0O2T4BOZAG7DKAyepLjG+74U/CRUTfdC1O/
   EdBpr6CxaQKdFf0OMx3aNs+UPsy6jYUGZmTbX7v5h1Uo1j5kp6z6L+RBu
   4=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: HKveQechKVogurJDHf50iWrE9UmrzOMzk5rHVyo5XVZmHG8VCK7L2BGRp5Hitkn9VVd8rCb3Yi
 E2FvdVyLPaAXbBwke5irROYTHD68iGxh73Mfuj/o5n/Hu0NHnE16eDvtrzd6RalMrLb2XPqQLz
 QeNITddgKU4HLw20T4wrBHFm2G3IdpffZGZ+I/OR4gL3Y/3x9qgYU17/dbZ9xq31wQA/tlM3aD
 zTYjnemK7nmYmtDXnZiLPiEow6IdKkDP6gWzQJCsN4/FYagU6AKXHgZmDHH6ZAE3Rs0Sz1HS+4
 lPI=
X-SBRS: 5.1
X-MesageID: 48293333
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:yQxhtqEyCvE6zxF4pLqFF5HXdLJyesId70hD6qkvc3Nom52j+/
 xGws536faVslcssHFJo6HmBEClewKnyXcT2/htAV7CZnichILMFu9fBOTZsl/d8kHFh4tgPO
 JbAtRD4b7LfClHZKTBkXCF+r8bqbHtmsDY5pas854ud3ATV0gJ1XYGNu/xKDwReOApP+tcKH
 LKjfA32AZINE5nJPiTNz0gZazuttfLnJXpbVovAAMm0hCHiXeN5KThGxaV8x8CW3cXqI1SvV
 Ttokjc3OGOovu7whjT2yv66IlXosLozp9mCNaXgsYYBz3wgkKDZZhnWZeFoDcpydvfpWoCoZ
 3pmVMNLs5z43TeciWeuh32wTTt1z4o9jvL1UKYqWGLm725eBsKT+56wa5JeBrQ7EQt+Ptm1r
 hQ4m6fv51LSTvdgSXG4cTSXR0CrDv7nZMbq59Rs5Vja/pdVFcIxrZvuX+9Ua1wUx4S0bpXUN
 WHV6rnlbJrmTrwVQGogoFtqObcF0jbUC32BXTqgfblpgS+qkoJuXfw9PZv7Evoy6hNP6Wsx9
 60epiAx4s+BfP/U8pGdZA8qI2MeyrwfS4=
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="48293333"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ns8AdZtXsAezku1Yo+a1/lU2IqdWtS0W+Zm3dUgMoKRGO2uBABTVZo5YjKcTFpTph80nrdVsmY1Iz2IB4rJkZJ85Af17VRV1QDUsO+SuGJIFmHq5ySUvn5i39GiN7zxrp43V1CyUu5xkNro6Ojb+F5J1y6C6gjlrq+JJH9QWD2Kwi0DpsU9ey8bThloBvCgaYRxyCk1OTZ9sfoEZ9fK3yzztQpkt4hA2zj4DOvGLSUfY5FkE417ceiOyhEFwRihELqw9UOuetZWQPO0rUz8qTnbMi7N6rGVKhdEkbFkUh31HvGnscBAtl9WrHIJ/TKzsInC1O1UCXdWoZNlj2iHlDg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YV6xnMEA5BfgGTyWTcsopm+KDXmcg5HCi+m92NikJRs=;
 b=loD+Vg5dYnfZNPbMkA5Xl2j9nVgxjSEBheSbWZw/euRtJPTdulv53bzgnf9pMOY2XMXitNod5pgak7KzqKBiUJ+aWRMz7HhomvkD36n1dYpdIVDDkQnDlZT+TiRxi3iTjRykuhOmzUBBqtYJ7Zp/mBswnV/40jLql3aX7Og88mooyWLc7UHhhWqI/lM/X9EEgq5K/cBhjToRHXfiMpYF6eLGeNl5EPZZWh4ObevqCFTGIDeFwh2isnYekUNZXTCHl0iY+9EEJmmHzvWqgK0P/61cwnB1fil2v55Ck2/mCOzjw9fhfxs6BdFNRyGxrIz6HEVQlO1zvrSjJg6MiDwaWA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YV6xnMEA5BfgGTyWTcsopm+KDXmcg5HCi+m92NikJRs=;
 b=B82nRL1Namdl9ZgLsRgolcNtRcJ1tLiFh/BwWcC8WfvA3m4/Xc+VdWlerpZvihe8uojOvQm/J0xZLr5qNJ1sRFcdLRMI3KKHXo9VcHn5i9r8iwCOHss/xbljihB/iuiBlK4r5gLZuif3QSLhsz9RUaR5fpuUDtzeE9oHvezZ+oA=
Date: Fri, 9 Jul 2021 10:55:37 +0200
From: Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>
To: Juergen Gross <jgross@suse.com>
CC: <xen-devel@lists.xenproject.org>, <linux-block@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, Konrad Rzeszutek Wilk
	<konrad.wilk@oracle.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
	Jan Beulich <jbeulich@suse.com>
Subject: Re: [PATCH v2 2/3] xen/blkfront: don't take local copy of a request
 from the ring page
Message-ID: <YOgPCZbEF+t5DN+G@Air-de-Roger>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-3-jgross@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210708124345.10173-3-jgross@suse.com>
X-ClientProxiedBy: MR2P264CA0049.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:500:31::13) To DS7PR03MB5608.namprd03.prod.outlook.com
 (2603:10b6:5:2c9::18)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 52cb1f34-3824-4150-8f3d-08d942b75533
X-MS-TrafficTypeDiagnostic: DM6PR03MB4970:
X-Microsoft-Antispam-PRVS: <DM6PR03MB4970769F5B063410D42B93748F189@DM6PR03MB4970.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: g2mEckyKSJkkz/c8K57uQ83M83tEnN2m52VEPcOjBc8He2R6vjtK8fe5KWYkmdG6WNXygdBY3qBE3ubBb3L/1xjNajUPjPBlHUNVu6RnxMpC16gAClRKK8EpssyoteOE9Hm8Fzitx3iv1izLoskIYrG+W118MX89A/uRQ7yciS2BXDQccs/LbhIt+xuuzF/lbhMlm6XhWRk7tYPY5c2oxKd0n6oAn4pX4ogUm1aCrhBBGhGF73Fo8c1ilpFQggxJFmqP6f03JAG7qCOEiWabh4LJUwzxH+2xOUo4+cD2dI0G/tyQqF1k1DqJKAJe4NyAcT595VW2EHgjFt1UHPhJ5M4CciFGAac9yaNSTlpdD+RCWpGZKYCnZYSWPxV8RwXFo+H7dqkqc7ckYIY7Pz6TA+TISmiZ35sSU+97PMPtJGq2IFe5sSUsClRNvw05TS3QcqdF0a3DpWxTBKfzlYYGvoCOOe3iJrx7whd3xoPPHDjbkn6jKJWHLCbjfSo/NCKj/yrpLupYJ5HV2Uhkcm4enuZWEHeCk9XUvAGtwouUXl7y9W8PoKkNA2agDNhn3Mh609xjH+fbaD9LBP1zfFYppvQdytzHsVAJP4lCqLkGSCXlk9wfOvWJiBTcj5DoGL86VHlbi4qauy+D/e3mSY/vqQ==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(7916004)(4636009)(396003)(39860400002)(376002)(136003)(346002)(366004)(66556008)(316002)(6916009)(6486002)(4326008)(6666004)(33716001)(83380400001)(2906002)(66476007)(8676002)(6496006)(38100700002)(66946007)(186003)(86362001)(5660300002)(85182001)(478600001)(54906003)(8936002)(956004)(9686003)(26005);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 52cb1f34-3824-4150-8f3d-08d942b75533
X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 08:55:42.7507
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: cZE1+H8WnRUMWGjscCQcz/r1gFb+W4wazpP4+jXiqeR2zYeUOrldT8srkzYpy5Ke0D1c09IgakVWHhrtk6865g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4970
X-OriginatorOrg: citrix.com

On Thu, Jul 08, 2021 at 02:43:44PM +0200, Juergen Gross wrote:
> In order to avoid a malicious backend being able to influence the local
> copy of a request build the request locally first and then copy it to
> the ring page instead of doing it the other way round as today.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Roger Pau Monné <roger.pau@citrx.com>

Thanks!

One unrelated comment below.

> ---
> V2:
> - init variable to avoid potential compiler warning (Jan Beulich)
> ---
>  drivers/block/xen-blkfront.c | 25 +++++++++++++++----------
>  1 file changed, 15 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
> index 86356014d35e..80701860870a 100644
> --- a/drivers/block/xen-blkfront.c
> +++ b/drivers/block/xen-blkfront.c
> @@ -546,7 +546,7 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
>  	rinfo->shadow[id].status = REQ_WAITING;
>  	rinfo->shadow[id].associated_id = NO_ASSOCIATED_ID;
>  
> -	(*ring_req)->u.rw.id = id;
> +	rinfo->shadow[id].req.u.rw.id = id;
>  
>  	return id;
>  }
> @@ -554,11 +554,12 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
>  static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_info *rinfo)
>  {
>  	struct blkfront_info *info = rinfo->dev_info;
> -	struct blkif_request *ring_req;
> +	struct blkif_request *ring_req, *final_ring_req;
>  	unsigned long id;
>  
>  	/* Fill out a communications ring structure. */
> -	id = blkif_ring_get_request(rinfo, req, &ring_req);
> +	id = blkif_ring_get_request(rinfo, req, &final_ring_req);
> +	ring_req = &rinfo->shadow[id].req;
>  
>  	ring_req->operation = BLKIF_OP_DISCARD;
>  	ring_req->u.discard.nr_sectors = blk_rq_sectors(req);
> @@ -569,8 +570,8 @@ static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_inf
>  	else
>  		ring_req->u.discard.flag = 0;
>  
> -	/* Keep a private copy so we can reissue requests when recovering. */
> -	rinfo->shadow[id].req = *ring_req;
> +	/* Copy the request to the ring page. */
> +	*final_ring_req = *ring_req;
>  
>  	return 0;
>  }
> @@ -703,6 +704,7 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
>  {
>  	struct blkfront_info *info = rinfo->dev_info;
>  	struct blkif_request *ring_req, *extra_ring_req = NULL;
> +	struct blkif_request *final_ring_req, *final_extra_ring_req = NULL;
>  	unsigned long id, extra_id = NO_ASSOCIATED_ID;
>  	bool require_extra_req = false;
>  	int i;
> @@ -747,7 +749,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
>  	}
>  
>  	/* Fill out a communications ring structure. */
> -	id = blkif_ring_get_request(rinfo, req, &ring_req);
> +	id = blkif_ring_get_request(rinfo, req, &final_ring_req);
> +	ring_req = &rinfo->shadow[id].req;
>  
>  	num_sg = blk_rq_map_sg(req->q, req, rinfo->shadow[id].sg);
>  	num_grant = 0;
> @@ -798,7 +801,9 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
>  		ring_req->u.rw.nr_segments = num_grant;
>  		if (unlikely(require_extra_req)) {
>  			extra_id = blkif_ring_get_request(rinfo, req,
> -							  &extra_ring_req);
> +							  &final_extra_ring_req);
> +			extra_ring_req = &rinfo->shadow[extra_id].req;

I'm slightly confused about this extra request stuff because I cannot
find any check that asserts we have two empty slots on the ring before
getting here (I only see a RING_FULL check in blkif_queue_rq).

This is AFAIK only used on Arm when guest page size > 4KB.

Roger.


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:00:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:00:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153482.283563 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mMY-0003RG-KO; Fri, 09 Jul 2021 08:59:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153482.283563; Fri, 09 Jul 2021 08:59:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mMY-0003R9-HR; Fri, 09 Jul 2021 08:59:58 +0000
Received: by outflank-mailman (input) for mailman id 153482;
 Fri, 09 Jul 2021 08:59:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=e3y7=MB=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1m1mMX-0003R3-Gq
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 08:59:57 +0000
Received: from mx.upb.ro (unknown [141.85.13.5])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3cd5a921-af71-4d8d-8cda-5be73a2e1182;
 Fri, 09 Jul 2021 08:59:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id 1A243B560106;
 Fri,  9 Jul 2021 11:59:53 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id l7e-VKF1PcMi; Fri,  9 Jul 2021 11:59:51 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id E8B69B56010F;
 Fri,  9 Jul 2021 11:59:50 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id wmBlERRNqV0L; Fri,  9 Jul 2021 11:59:50 +0300 (EEST)
Received: from [192.168.0.104] (unknown [86.124.207.155])
 by mx.upb.ro (Postfix) with ESMTPSA id 69562B560108;
 Fri,  9 Jul 2021 11:59:50 +0300 (EEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3cd5a921-af71-4d8d-8cda-5be73a2e1182
X-Virus-Scanned: amavisd-new at upb.ro
Subject: Re: [PATCH v4 4/5] tools/libs/gnttab: Fix PAGE_SIZE redefinition
 error
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <84d03c4595428e4ff857dcacc72f6b9c04476849.1623155575.git.costin.lupu@cs.pub.ro>
 <90974b14-4a8d-d9dd-f8e9-65eef692d28a@xen.org>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <f888c8ed-4b5d-6ca1-326e-a3ab5b5f0c94@cs.pub.ro>
Date: Fri, 9 Jul 2021 11:59:49 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <90974b14-4a8d-d9dd-f8e9-65eef692d28a@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi Julien,

On 7/8/21 8:33 PM, Julien Grall wrote:
> Hi Costin,
> 
> On 08/06/2021 13:35, Costin Lupu wrote:
>> If PAGE_SIZE is already defined in the system (e.g. in
>> /usr/include/limits.h
>> header) then gcc will trigger a redefinition error because of -Werror.
>> This
>> patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order
>> to avoid
>> confusion between control domain page granularity (PAGE_* definitions)
>> and
>> guest domain page granularity.
>>
>> The exception is in osdep_xenforeignmemory_map() where we need the
>> system page
> 
> Did you mean osdep_gnttab_grant_map?
> 

Argh, yes, sorry about that. Can we fix this on upstreaming or should I
send a new version?

>> size to check whether the PFN array should be allocated with mmap() or
>> with
>> dynamic allocation.
>>
>> Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
> 
> Other than the question above:
> 
> Reviewed-by: Julien Grall <jgrall@amazon.com>
> 

Cheers,
Costin


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:00:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:00:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153484.283575 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mMs-0004ZX-TK; Fri, 09 Jul 2021 09:00:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153484.283575; Fri, 09 Jul 2021 09:00:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mMs-0004ZQ-Q5; Fri, 09 Jul 2021 09:00:18 +0000
Received: by outflank-mailman (input) for mailman id 153484;
 Fri, 09 Jul 2021 09:00:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1mMr-0004Yf-3A
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:00:17 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 13997968-e094-11eb-85d9-12813bfff9fa;
 Fri, 09 Jul 2021 09:00:16 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 13997968-e094-11eb-85d9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625821215;
  h=to:references:from:subject:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=PCQi+EMHDJS+sZ7ct1tpemYXZp+PSoR3mMxplyEHJu8=;
  b=RKeoTxy9uClq58binGX+UHA45ODoP7YtOo8b/Uug1V2jBbIX7Ihx9Tct
   fKyQNQphmnLaPTy967f7AfLpYCQU4QppvQexDPv1x25mBYlBSag9X93mJ
   9bg6TGIoNPMTakz/eNUCktaJBVOZmfDnCKr7Wyc1WighG7MG58/ch7Pau
   g=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: D0Bx8NAqjgCM6rgXpSvGqpVwl3oEnp7K9wDSsreuFFQZM1jrXXxiQvWgbs7TJptO+1XQmRIi/8
 z+O+yCQHq18LeCT3OekVgHz9FjSap2YRKHe+8CI5+j+1iuvaZTqDYjhUq/ixJx9wu33HiCvhev
 aLs+a8oObUWZKmENKh063h7jKXmKLvWjq8paSHBb1sO219CCjxM72kBOkGL4U4I4S2vcTp1fAv
 k7NRfcyVWDZhXOwFG4ra+rG3oNmNWRSmMPkGYFyP6ZU2y04pnZgzG343WFWQhshtPwt+xOJ2Lz
 Lyw=
X-SBRS: 5.1
X-MesageID: 47909293
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:+1gu8K0lszc4LKssuwuAygqjBUJyeYIsimQD101hICG9Lfb3qy
 n+ppsmPEHP5Ar5OEtBpTnyAtj+fZq6z+8I3WBxB8beYOCCggqVxe5ZnPPfKlHbakrDH6tmpN
 1dmstFea3N5DpB/L/HCWCDer5KqrT3k9HL9JXjJjVWPGVXgslbnnZE422gYytLrWd9dP8E/d
 anl7F6T23KQwVoUi33PAhJY8Hz4/nw0L72ax8PABAqrCGIkDOT8bb/VzyVxA0XXT9jyaortT
 GtqX232oyT99WAjjPM3W7a6Jpb3PPn19t4HcSJzuwYMC/lhAqEbJloH5eCoDc2iuey70tCqq
 iBnz4Qe+BIr1/BdGC8phXgnyP61iw11nPkwViExVP+vM3QXlsBeop8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVittilG/rRMZ4K8uZkRkIMkjgYJq3MkiFBs/KuZFIMu60vFoLA
 BWNrCe2B4MGmnqKEww1wJUsa+RtndaJGbPfqFNgL3S79FspgEM86Iv/r1Xop4xzuNJd3B63Z
 WyDk1JrsAEciZEV9M2OA8+KfHHfFAlByi8aV6vHQ==
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47909293"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=A2PwUfHndHwtFwed5QCn13g+DAnuntbPEhQG82Aq94NoDWZzM65F0V+/G2eAAcqo0NRaHDQQHQ8pNBk3jrLL1Wt4HyOwXqo4azJJX23vUChKXy4f1hemP2FpLsdiseii5ovT8xA6/H6efJ2qVd+1dYAhKFNiW4WWazaqQZAuSGZ8K3c3PwNMydy8JP1ktAkRvPiIb6lf/kk0TL+PU3UmL/ljB7NB2GD4rUc1aW9tUVP5aGT7TMMgrWxhZpvULndvOvOAa7Vt7VvFF0aVPVmHBpnuyap8pEQsMWDSAONCfX+E49K0E0p9ix8HEs+s/dvbs2YjsNioa++PxqPnj7LxrQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PCQi+EMHDJS+sZ7ct1tpemYXZp+PSoR3mMxplyEHJu8=;
 b=eFLhfUKuTELNDBv1mfHmN+pu8i57RU0FRG/QptN+BVNm6O+WXDqJsHwoQ4YqDKKPKpQFGoGvV5dfkj2Z3K3yHYGahxdNSAAqzqz5+2188w18Iksu4PUGt/kbeXVbd96yJJBzPkL9DQuFfCRORqm29r3+R5JCEZxIyOtu1HmLtOaIKcecNm+FmzGAKOEKQkEnB+tNQHf8/ESwpxExI4rdvuqmnNpvt3A4+ENR4V/ej7fvSaet46vWU3FAJVQOAER05S83qTlBlX3L95bgQUotRSUykwJvTvDYZ8K848anbbbycQNATzP3eUdCwNgHl+n9jjAbqP07r+z50Ve2wcFo5Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PCQi+EMHDJS+sZ7ct1tpemYXZp+PSoR3mMxplyEHJu8=;
 b=VsAfcvKHnVSwBG40aYnmaTLqAaejAwJxiimA+actR5Pi8xFcWj0N5+7OafnX3BIZL02/zlw0k+PR5bgDqbsFIwgf4PmN/FwS+SVshEI7S4kpGiI9jAkDkp+h7ZTlResPtHZRbF4A/2TCQWSXcmRewikmy4UzTyE/4a2MeEBU6ro=
To: Richard Kojedzinszky <richard@kojedz.in>, <xen-devel@lists.xenproject.org>
References: <585c34fd96c6e22847333d9d18843c0f@kojedz.in>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: fix vbd rd_sects stat
Message-ID: <522642c6-6ad9-28d4-469e-53583441287e@citrix.com>
Date: Fri, 9 Jul 2021 09:59:54 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <585c34fd96c6e22847333d9d18843c0f@kojedz.in>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0489.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1ab::8) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 46d609c1-85ad-4ad8-b9b5-08d942b7eedc
X-MS-TrafficTypeDiagnostic: BYAPR03MB4808:
X-Microsoft-Antispam-PRVS: <BYAPR03MB480803737C4B910643B7D37CBA189@BYAPR03MB4808.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: M4IFpl8wf0LiLzFT4yrHzcTOpzd+5m6oizGYjREldTYc50riEd1jNco2rR9pMP6gq8Qs8e5kk6edZsURI1Dduz7iEyEnHNgMvZpJeSj2kXi4FNlyB7hkZ6KqtVevDyQ2i5m2e1wYZQ+xpnip/IBfAwDl9d/BuOieh/3skGRYojUvYV8t+f5j6oCiMnXMNpQLJfHFUr32JGcxFJIGsn7QD/P7GUkCOmDKwjwLXOFPsAOMTrr+qY5nOYxu42Q0xbLTRUbQDVwm5rss2kfmhTkDrRI6WCsXp59Q+pnvrr6L+uEg2rPXeVkbl7MjdrVKwH052CqMuObRq6sKBxUjFy5zJeD3C5sxzfGzZOlKmBxWL+yOUXKtDS5RKGUzmQ7WqzZYsd6D6cMySTfSWI5qNjTZWpT466aF+EaNi4vNfxO/6uB0r/XnEOJP/UPIUMAoLfAUN9EqVBM9/xgsbafz26Ag9PPwoqYXxzTEfH19ENrdWu6ghfOxScmQV7bBoztxoZf3fCVMB/QwxoWP9tE6ieOZ3J8GtNYiaS9tpY4TN+E6xssdKvRRHPIVv0PO42b/aAHzmHv9KQjRjVKFUocFtA+iJZfN8IAlXsCpdTYIgMU9BKBUpz0bDdu7Bm6FMVmVFhf9GtUDdFWvRa42EoNqbSeXshJ3n82zkf58r9MMYIbFudxJU776ZdF0esae46wPYoyOzLlA7s74icAR8En2NBzqrDmfbdZhFm5qERrVsyW8MRKwJzeqv8TSJjbbCBwRrOuwUpwGwVHixw4HqrqdjXWFGcsdei+ZKL+Ha4MjbvfZPoDNiGGxn+XlhD4Nu+/+6cY4
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(366004)(136003)(376002)(396003)(346002)(2616005)(956004)(66556008)(66476007)(8936002)(83380400001)(31696002)(26005)(66946007)(2906002)(38100700002)(53546011)(31686004)(6666004)(6486002)(4744005)(36756003)(8676002)(86362001)(16576012)(478600001)(186003)(5660300002)(316002)(966005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SDlsNndNQy82UlpTYjdSSHZpQWF6d1pVckNhMDlRTWVOczRLN1ZFeDdPUE04?=
 =?utf-8?B?UUxidGcwak8yS2d3a1c3TWdoNnNoVStXNUJ3T0NmR1daYTJibnl3WEhIaHpR?=
 =?utf-8?B?ZVFHNUkyTmNRcWliUFQzSk44VmtzaVY3eUx1ejRBbTFLVFlYSkRGOTRMWFBV?=
 =?utf-8?B?cnRUb2RscG9DSXVnYlFtZE9yckdtT09FaXBpaUdOU1NJb0JtSXNIakNudDlu?=
 =?utf-8?B?K3c1TVdyMFM2OStYOHhPTHRzVlR1djZ2R3NPcVVicFVXSHM3UXRJN2hlSmtN?=
 =?utf-8?B?TFdKVmRaY2pYQ00rQTVGN1hvVkdVdGhLNkRYdlliVTdCRU1EZ3JVMk5tZ2pG?=
 =?utf-8?B?SWF2MXBrWGQzbkg3Z3ZNUmdzSTdQcTBqU2dyQ2lSVHN2R0RXYlgvcG83eldk?=
 =?utf-8?B?M2ducVJlRm1oQUVXSWhRbnJKaGJkT1BpNWp6dmc2ampvV01wcm1hejlxRWxo?=
 =?utf-8?B?NlJncS9XbGt2QWV2aWhxemFjaVBCdTIwaldrbTdEb0MySWtIdFB3OHRJNU4w?=
 =?utf-8?B?NjZkWXM4VHZ6S1R2Z005TVNCN0p1WXhIeE1BNktoQUpjSmFLR0Z0MGQ3a1ho?=
 =?utf-8?B?QkRkV2dUaUxMMWR3M294U05NcTV3UzBzTmdJbmVIMjNTaS9QS2VhMjFWc0o1?=
 =?utf-8?B?ZzBKODZueHFBMzJRR2FhUWYzSlhJMFZZZEFTOGFyL2pwTGdkV0I4VDMzcXNk?=
 =?utf-8?B?ME9NWGg4S0I5UDZtMWUrM05yZTR0WHJGaHVINU5zSitkSUFKcU95NWltTElx?=
 =?utf-8?B?NEY4ckpra3lXdjBUeHMvY0N5WWc5a3lWaGk3UHgvamFWWUhQeW1LcHlFVTIv?=
 =?utf-8?B?b2h0M05PaHRzeDNSbGp0aytYaSs1VmRGZ2NqUmgxZEt1U0ZWYURDQzdJMW41?=
 =?utf-8?B?YzJFRmZranR3dXE2VkZrYVVhZTlvNEdlS1VONy8zUUVXZUlFUXRrSVhOTG1Z?=
 =?utf-8?B?ZmFrTmQ4aHF2cVJ3VHh0Z0hGdjk0bm5STVFrRzFVZ0ErU082NHJVdnM0b2t0?=
 =?utf-8?B?T095MHVMdnIvNFZHUGZSZUx2b1A0ckhIVlBXeGMwR3MrY3BxNnhTc3ZkeFNL?=
 =?utf-8?B?N014dTFVOTY5cndqWUpTMXArUGtBV0dJUjYzcWxiLzNuck8rZjVZc0w1MjJR?=
 =?utf-8?B?SEk1ZzBJbEJDMlAxb1kwSFhTbElFek9ab3RCQlZ1Z2xYdHljL2JJK3k2UStr?=
 =?utf-8?B?ZUlpbEk1L3lSRksySXF5K0tuUnZobUJMRjdjdWlBMXBwUTVtcjZCcmZ1QitK?=
 =?utf-8?B?Ung1WHdSSGNhaWRJT2t5K2RacVJ2d0dXNHZuc2oxUy96TFpuNTd0OXJPU3VM?=
 =?utf-8?B?TGl5ZTRLdkVXQW5CM2pYWDZhLzZLbDVicllsYnovVXE4SXhuZWl6a1M5Y1F0?=
 =?utf-8?B?clFZR3JrUHpWeDBsU2E4Rms2Mkl2bWxyTEtSeUc5QThWNXBaMjZRUkVlY1pF?=
 =?utf-8?B?ZW9vVEtaaW8zRHFXUjI0WmMyQ2JGeVRQOUQ1cU11OGJLYkM3ek5FQ0R5M0xs?=
 =?utf-8?B?a1pFYlI1RWlDWHdLbW5PNGxnalhOYUhvRjdrMG9xMXVHMytFcHF0c2ZONi85?=
 =?utf-8?B?UURCWjdoYSs1bnVvSUJRbEszM0NiV0wwMGQ5MGlzT2VRbWZneHV6akg1OVhm?=
 =?utf-8?B?Mk5qcjB4OGs1OVpnYi9vRTNZdkZrNVpVOWRTWHdueWdWMlVLc0lkODI2M0E5?=
 =?utf-8?B?ZTgwdy9WZkw4Mjlyamhya0dPNFNCc0NCRlZzcG5LUnA3T3l5dzlUOFZjdDBw?=
 =?utf-8?Q?OUDbAxGFbLdF2YU7pNK+coXGHZMdHw0dYYEJYII?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 46d609c1-85ad-4ad8-b9b5-08d942b7eedc
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 09:00:00.5815
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: U/4DpjQS0O4MkE2TkjYNuaYG8K97uRqKZZHXQUvMTqZPQseFenuo7QhEFEHIQax0ixgevITuQOEJS1plAHNozOOrGixqclgU403VbOwE51s=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4808
X-OriginatorOrg: citrix.com

On 09/07/2021 09:09, Richard Kojedzinszky wrote:

Thankyou for the patch.=C2=A0 That is quite an embarrassing bug.

However, for copyright reasons, we require all submissions to contain a
Signed-off-by line, as per the Developer's Certificate of Origin,
https://wiki.xenproject.org/wiki/Submitting_Xen_Project_Patches#Signed-off-=
by

Given how trivial this patch is, feel free to just reply to this email
with confirmation and I can sort it out on commit.

However, for future patches, please include directly.=C2=A0 (Also, if you a=
re
able to use git-send-email, and the get_maintainers.pl script, that
would be even better.)

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:06:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:06:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153494.283586 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mSf-0005UZ-Kr; Fri, 09 Jul 2021 09:06:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153494.283586; Fri, 09 Jul 2021 09:06:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mSf-0005US-H0; Fri, 09 Jul 2021 09:06:17 +0000
Received: by outflank-mailman (input) for mailman id 153494;
 Fri, 09 Jul 2021 09:06:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1mSd-0005U8-Tj
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:06:15 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mSc-00053A-AU; Fri, 09 Jul 2021 09:06:14 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mSc-0004WQ-4B; Fri, 09 Jul 2021 09:06:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=c79V0Am6xRo3BHBJWrfaUXzbzdRWiRCJ6sMHawdLaIo=; b=3sH96EkQ8t2iRe2Qei2d+roDfg
	78YlGc5nNKnNJjgNrh0myTNzIsajPMs8aOZasAWHJ0MpXrJUK1qjHWJcx5Z2arhQjTTWQq4U28bdh
	TrxqgKU3xURkL+zSbfTGJqqCFmufWRZjuBzYEQ8gaHqQ7jomg1LMxoQpR5T9pLnOUCtM=;
Subject: Re: [PATCH v4 4/5] tools/libs/gnttab: Fix PAGE_SIZE redefinition
 error
To: Costin Lupu <costin.lupu@cs.pub.ro>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <84d03c4595428e4ff857dcacc72f6b9c04476849.1623155575.git.costin.lupu@cs.pub.ro>
 <90974b14-4a8d-d9dd-f8e9-65eef692d28a@xen.org>
 <f888c8ed-4b5d-6ca1-326e-a3ab5b5f0c94@cs.pub.ro>
From: Julien Grall <julien@xen.org>
Message-ID: <333d749a-a47b-dfb8-fbbe-3f47a7879a06@xen.org>
Date: Fri, 9 Jul 2021 10:06:12 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <f888c8ed-4b5d-6ca1-326e-a3ab5b5f0c94@cs.pub.ro>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 09/07/2021 09:59, Costin Lupu wrote:
> Hi Julien,

Hi Costin,

> 
> On 7/8/21 8:33 PM, Julien Grall wrote:
>> Hi Costin,
>>
>> On 08/06/2021 13:35, Costin Lupu wrote:
>>> If PAGE_SIZE is already defined in the system (e.g. in
>>> /usr/include/limits.h
>>> header) then gcc will trigger a redefinition error because of -Werror.
>>> This
>>> patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order
>>> to avoid
>>> confusion between control domain page granularity (PAGE_* definitions)
>>> and
>>> guest domain page granularity.
>>>
>>> The exception is in osdep_xenforeignmemory_map() where we need the
>>> system page
>>
>> Did you mean osdep_gnttab_grant_map?
>>
> 
> Argh, yes, sorry about that. Can we fix this on upstreaming or should I
> send a new version?

I can do it on commit.

Cheers,

> 
>>> size to check whether the PFN array should be allocated with mmap() or
>>> with
>>> dynamic allocation.
>>>
>>> Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
>>
>> Other than the question above:
>>
>> Reviewed-by: Julien Grall <jgrall@amazon.com>
>>
> 
> Cheers,
> Costin
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:19:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:19:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153500.283597 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mf2-00070s-RT; Fri, 09 Jul 2021 09:19:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153500.283597; Fri, 09 Jul 2021 09:19:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mf2-00070l-MM; Fri, 09 Jul 2021 09:19:04 +0000
Received: by outflank-mailman (input) for mailman id 153500;
 Fri, 09 Jul 2021 09:19:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1mf1-00070f-Iw
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:19:03 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mf1-0005Gm-6t; Fri, 09 Jul 2021 09:19:03 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mf1-0005Aa-04; Fri, 09 Jul 2021 09:19:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=pCDBDtUrIE4AfgI7cCyh5rfWyI8a14rMuO5Qjz/aBX4=; b=bXiIfBtJbIZAa37LF/ttvcpb6h
	74iIYvBrMZDHANA9zpdxrcAdCGrimTUj2Roa7OHzDTQSDOHrdgRT0OjwmVkZ/QR5qfTBTyoK8nsTR
	jd6Ya+8eabvkUsWouww6eLjPEaQ8vykvM+H2mE0m3kNjrXEdBsvoTOQ7Ak1AyMEyd1BI=;
Subject: Re: Xen/ARM API issue (page size)
To: Elliott Mitchell <ehem+xen@m5p.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
References: <YOZHkGrrl694NrfZ@mattapan.m5p.com>
 <8c7d9d21-d8be-d33f-6d37-dfb54f74c179@citrix.com>
 <2f27358a-e1d1-4627-3608-0c2fcd0754c0@xen.org>
 <YOd2wSfaThhDPoHp@mattapan.m5p.com>
From: Julien Grall <julien@xen.org>
Message-ID: <b32c978e-14d0-7cea-7f66-f6e33a3fc60e@xen.org>
Date: Fri, 9 Jul 2021 10:19:01 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <YOd2wSfaThhDPoHp@mattapan.m5p.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Elliott,

On 08/07/2021 23:05, Elliott Mitchell wrote:
> On Thu, Jul 08, 2021 at 05:06:42PM +0100, Julien Grall wrote:
>> On 08/07/2021 02:05, Andrew Cooper wrote:
>>> On 08/07/2021 01:32, Elliott Mitchell wrote:
>>>> Hopefully I'm not about to show the limits of my knowledge...
>>>>
>>>> Quite a few values passed to Xen via hypercalls include a page number.
>>>> This makes sense as that maps to the hardware.  Problem is, I cannot help
>>>> but notice aarch64 allows for 4KB, 16KB and 64KB pages.
>>>
>>> Yes - page size is a know error through the ABI, seeing as Xen started
>>> on x86 and 4k is the only size considered at the time.
>>>
>>> 32bit frame numbers were all the rage between the Pentum 2 (1997) and
>>> the advent of 64bit systems (~2006), because they let you efficiently
>>> reference up to 16T of physical memory, rather than being limited at 4G
>>> if you used byte addresses instead.
>>>
>>> It will be addressed in ABIv2 design (if I ever get enough time to write
>>> everything down and make a start).
>>
>> IIRC, ABIv2 will only focus on the interface between the hypervisor and
>> the guests. However, I think we will also need to update the PV protocol
>> so two domains agree on the page granularity used.
> 
> I'm inclined to concur with Andrew Cooper here.  It makes a fair bit of
> sense to consistently use full addresses across the entire ABI, just
> specify alignment so the lower bits end up zeroes.
> 
> 
>> Most of the arm64 cores supports all the page granularity. That said,
>> this is not a requirement from the Arm Arm, so it may be possible to
>> have cores only supporting a subset of the page granularity.
> 
> At which point it is possible to have a device where the page size(s)
> supported by some cores are disjoint from the page size(s) supported by
> other cores.
Well yes, it is possible to have cores with incompatible features. 
However, the software may decide to not support that configuration.

For instance, Linux will sanitize the CPU features and may not boot (or 
prevent a CPU to boot) if it can't find a valid subset.

In the case of the page granularity, all the cores where the OS will run 
needs to have a common page granularity supported. Linux will have to be 
built with PAGE_SIZE set to that granularity (Linux cannot dynamically 
switched).

> I imagine someone has plans.  An obvious use case would be a cellphone
> chip with a low-power core for the modem and a high-power OS core.
So long the OS is running on just the high-power core, then it is fine.

> 
> 
>>>> What happens if a system (and Xen) is setup to support 64KB pages, but a
>>>> particular domain has been built strictly with 4KB page support?
>>
>> If the processor only support 64KB, then you would not be able to boot a
>> 4KB kernel there.
> 
> I was being explicit about covering both cases of distinct page sizes
> between Xen and domain (Xen with smaller page size, domain with smaller
> page size).

Ok. I think I covered the case where Xen will use a smaller page 
granularity compare to the domain. But I haven't covered the opposite.

With the current ABI, a guest would need to be modified so it will 
allocate memory and talk to the hypervisor using 64KB chunk (assuming 
this is what the hypervisor was build with).

>>>> What if a particular domain wanted to use 64KB pages (4KB being too
>>>> granular), but Xen was set to use 4KB pages?
>> Today the hypercall ABI using the same page granularity as the
>> hypervisor. IOW, the domain would need to break its page in 4KB chunk to
>> talk to the hypervisor.
>>
>> FWIW, this is how Linux with 64KB/16KB page granularity is able to run
>> on current Xen.
> 
> Breaking pages up is generally easier than putting them back together.

IIRC, on Linux we are not putting them back together. Instead, we are 
wasting 60KB for every page to keep the code simple. Obviously, this 
could be improved... But this is not thing I had time to look at it.

[...]

>>>> What if a system had two domains which were set for different page sizes,
>>>> but the two needed to interact?
>>
>> They would need to agree on the page granularity used. At the moment,
>> this is implicitely fixed to 4KB.
> 
> "implicitly" -> "undocumented" -> "guess" -> "12 hour build wasted"
> 
> For the case I'm concerned with, the history is a decent hint, but not
> being explicitly documented is Bad.  In the Xen ABI there are too many
> references to "page size" without the page size being defined as 4KB.
> 
> In a few years there may be someone on this list who assumed "page size"
> meant whatever page size was in use and will be rather annoyed it means
> 4096, when both Xen and their OS were using 65536.

The documentation in Xen (including the ABI) is not at its best. The 
community is currently working on improving it.

You are welcome to help to contribute around the page size.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:21:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:21:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153505.283608 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mgw-0008JH-5n; Fri, 09 Jul 2021 09:21:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153505.283608; Fri, 09 Jul 2021 09:21:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mgw-0008JA-2S; Fri, 09 Jul 2021 09:21:02 +0000
Received: by outflank-mailman (input) for mailman id 153505;
 Fri, 09 Jul 2021 09:21:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=AxIF=MB=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1mgu-0008J2-L7
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:21:00 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.52])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2e39f9a5-3ff7-4b13-a5a8-09929b9ac25a;
 Fri, 09 Jul 2021 09:20:59 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx699KldeT
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 9 Jul 2021 11:20:47 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2e39f9a5-3ff7-4b13-a5a8-09929b9ac25a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625822447;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=5eochGW7odPx77rwB+QMk7QUCNnEiHfeIjBN466b8q0=;
    b=rSodZlMXwXN7lBHcvAXIfqrrIHGwkYOKGyzG1AyrS/G+HPGlJiafy0n0u33Av8oNcf
    EmOhJZmfrxKXJ6iFJ2ZzhCoLH5RJCn9PGC+D2OOPARY5uDwyqBcNeDGr1R+yoAqTxChX
    YXe2vI2+cRbDMa2dT3NPZUAqxkzDRR7RNvvlS/2U1umrdB6HsUzRwmmwXvMUWGiDJROC
    JvzesEAkSx+xVZ+epTKIOiV0nu7XHVM35RTOPbKHsYTKvxamSz9Yeph0HjdG5fSPKVD+
    rNzIT/PJPQszInPc0eTuFvL0nXydASZGzSC74gxHFi9ixFhbPglDIsGvCwqGLAmAw7kU
    pqdg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Fri, 9 Jul 2021 11:20:40 +0200
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>, George
 Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Jan
 Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, Stefano
 Stabellini <sstabellini@kernel.org>, Juergen Gross <jgross@suse.com>,
 Anthony PERARD <anthony.perard@citrix.com>
Subject: Re: [PATCH v20210701 07/40] tools: create libxensaverestore
Message-ID: <20210709112040.2dd4ec8d.olaf@aepfle.de>
In-Reply-To: <20210701095635.15648-8-olaf@aepfle.de>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-8-olaf@aepfle.de>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/XUSGmeNa2Dx+F8hKNYzMB91";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/XUSGmeNa2Dx+F8hKNYzMB91
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu,  1 Jul 2021 11:56:02 +0200
schrieb Olaf Hering <olaf@aepfle.de>:

> Move all save/restore related code

This is now 6 months old.

What is blocking approval?


Olaf

--Sig_/XUSGmeNa2Dx+F8hKNYzMB91
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDoFOgACgkQ86SN7mm1
DoDEIQ//dhOo/oTj9sPng39SsmZQ/H88HUCXU+DU7fSS4WPD5AuUiEx2i97Dyerh
z7zow1xis6Pkx0xxIT878kzbG3yfqJAs9P0OLLgkhCu/lsOa4Iqa/K1BpZkk1YaH
n9v0M2fxZ6htXMM1nWH1ykV6WUEkqzpQoI3mMgz40s/6ENxv/PnE7RGv+F/r+51/
8jvcGCvsRyqyNufYISqLOAhlBJk7WWaWsD98nVWySycQvfmR7XPIDrDA1ZYLKYPc
GOKkpU21yooTxpAgMPBwde57G1YyoeqmRosKHUd/PIIiIp5L6HtAlyMGPcuXPh86
+If7mKsZeY24ZO2rOYd8qakIs+gflm7HZ6DV2k6yW6Ga04JKEIoMQP0u7JGjqhMd
PRu1LmPA6DLdhozJGnAO14wfUT5FmZxm45moCsZJjwvQJeEt79VsaUt8Ekow5xPB
fqsfydQdxuDklQq2Y33zmiKugfvD0rqE62hjrM42xmiclkqFYAUTEe57MWfj/j6x
Pce8KUMeA3t1pfa0YYgWSOnOtE196dee8WAy3Ac/UonLbykHfjmSXCHj6Li7P+SD
lb+i/rt5TgkLuR+Pa3o+CY7o125t5PjSD2sFN6BG9EstJdGJ1Igk5rvsxpQr+HGs
Ww6PVpPWPgONLUzjbQDrLhXqXuB+fOHHrK3I3bokol0feeBiiKQ=
=riy0
-----END PGP SIGNATURE-----

--Sig_/XUSGmeNa2Dx+F8hKNYzMB91--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:32:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:32:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153513.283619 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mrY-0001QW-8i; Fri, 09 Jul 2021 09:32:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153513.283619; Fri, 09 Jul 2021 09:32:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mrY-0001QP-59; Fri, 09 Jul 2021 09:32:00 +0000
Received: by outflank-mailman (input) for mailman id 153513;
 Fri, 09 Jul 2021 09:31:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1mrW-0001QJ-IU
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:31:58 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mrT-0005TG-QF; Fri, 09 Jul 2021 09:31:55 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mrT-0005pj-JM; Fri, 09 Jul 2021 09:31:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Cmo8WwFlhuDtDaHoGVbUwDuA69hII1OEqHXWY1b8kxU=; b=vDwA8bh8g0Pj/YIdBQ5SoJJkud
	XXPPkmmnUg+0nI55STdx1e7kvAIO4hPZhXZ0qcLpMzdOnLr4/nLF8B8fbFcG+4Xx4peKydSPBGqz4
	Axy6dVzfi0FdUJ/9M/7RFfp9F6qXbYBWfPHpF9Q3jGcISH4YBmebBQPRP6zua7mOo6Jk=;
Subject: Re: [PATCH v20210701 07/40] tools: create libxensaverestore
To: Olaf Hering <olaf@aepfle.de>, xen-devel@lists.xenproject.org
Cc: Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Stefano Stabellini
 <sstabellini@kernel.org>, Juergen Gross <jgross@suse.com>,
 Anthony PERARD <anthony.perard@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-8-olaf@aepfle.de>
 <20210709112040.2dd4ec8d.olaf@aepfle.de>
From: Julien Grall <julien@xen.org>
Message-ID: <cb473d34-7022-74d2-e679-087bf84c26b8@xen.org>
Date: Fri, 9 Jul 2021 10:31:53 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210709112040.2dd4ec8d.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Olaf,

On 09/07/2021 10:20, Olaf Hering wrote:
> Am Thu,  1 Jul 2021 11:56:02 +0200
> schrieb Olaf Hering <olaf@aepfle.de>:
> 
>> Move all save/restore related code
> 
> This is now 6 months old.
> 
> What is blocking approval?

There is already an ack from Wei which should be sufficient for the 
tools part.


But looking at the history of the patch, there seem to have been concern 
from Andrew. Were they resolved?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:32:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:32:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153518.283630 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ms1-00023W-Jk; Fri, 09 Jul 2021 09:32:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153518.283630; Fri, 09 Jul 2021 09:32:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ms1-00023P-Gq; Fri, 09 Jul 2021 09:32:29 +0000
Received: by outflank-mailman (input) for mailman id 153518;
 Fri, 09 Jul 2021 09:32:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=WfOa=MB=kojedz.in=richard@srs-us1.protection.inumbo.net>)
 id 1m1mrz-00021U-EX
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:32:27 +0000
Received: from pi.kojedz.in (unknown [2a01:be00:10:201:0:80:0:1])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bb53465e-5e3b-4daa-b339-2b964feb1557;
 Fri, 09 Jul 2021 09:32:26 +0000 (UTC)
Received: from [IPv6:2a01:be00:0:2:29b2:6c38:b1b7:afc5] (unknown
 [IPv6:2a01:be00:0:2:29b2:6c38:b1b7:afc5])
 (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
 (No client certificate requested)
 (Authenticated sender: richard@kojedz.in)
 by pi.kojedz.in (Postfix) with ESMTPSA id C9F86C1B0;
 Fri,  9 Jul 2021 11:32:24 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bb53465e-5e3b-4daa-b339-2b964feb1557
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kojedz.in; s=mail;
	t=1625823145; bh=mXzX4zkmNiwBO+NUpFqoWx+93sk4+KjYM3ETlQg+PDA=;
	h=Date:In-Reply-To:References:Subject:To:From;
	b=PsCi3LN8JZVBHcF/qZXMSGcRSe0Y/5eHOnkCDP0NimOzmIqKCDv0gtnURXLd/gWRB
	 Ux/FYm/wpHH37x9PZt/V1gVcIWr5NOIFoI3vatOkXcbHjBF+ywhvBDq0I4Cd5HNCsy
	 2QWkcZPvZAWCkblKXG4XGBUXSqPanfU2fopxXLJjb7la/d69ZYOYwv/K5FVhq7Dalq
	 m4tucWnx4no/PMtfbOvn6V2Xyrqj8h33LRx4zvwHIM4tfOgVDLBknjuDcVcHqnc6fE
	 G3vF4sfD32giwT/ULPl/lyr3xCD0vTARlqx/hZock+l5aiDxWlfRlJ0OqcJtegpll2
	 HWMY/vk/wocmH3w9MnSXWmZt3R32fL/AUsr6qJ2HrM42N2Pawkw7ewJG4wQ/jyB6Wl
	 JrGcYNh0tOZcii8D/g2Pn8R/Oyfn1Kipwt8HzhTeXQt7Z4cBIyTLxma++0PO8Z8F3t
	 0NosetDYn5ZZfi3WERUf4yHM5PPzWqgbN9gGfgFhTLkNmZUqyPqdsrh9hQGnEd8QfF
	 MUv14LshGlrPU80Z3upoia1gcJPzFIqdR9GNXSzfQJC7daRyVU3RnD1/hdWrse50R7
	 nEYlt/f2XnmSzJeMZVXEaq1wm2O+XZpLI9GtMU6DcWouQnEBNCTYjOva8dTT+oCMjF
	 5EZ2qrCMbRl6WTlvxdsMbsQg=
Date: Fri, 09 Jul 2021 11:32:20 +0200
User-Agent: K-9 Mail for Android
In-Reply-To: <522642c6-6ad9-28d4-469e-53583441287e@citrix.com>
References: <585c34fd96c6e22847333d9d18843c0f@kojedz.in> <522642c6-6ad9-28d4-469e-53583441287e@citrix.com>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----3CUGW2BUZTVZ2WIDP4SY4014O4SO7V"
Content-Transfer-Encoding: 7bit
Subject: Re: fix vbd rd_sects stat
To: Andrew Cooper <andrew.cooper3@citrix.com>,xen-devel@lists.xenproject.org
From: Richard Kojedzinszky <richard@kojedz.in>
Message-ID: <61970531-A990-44B4-8614-320141E7C2D7@kojedz.in>

------3CUGW2BUZTVZ2WIDP4SY4014O4SO7V
Content-Type: text/plain;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

Then please add signed-by headers=2E :)


Thanks

2021=2E j=C3=BAlius 9=2E 10:59:54 CEST, Andrew Cooper <andrew=2Ecooper3@ci=
trix=2Ecom> =C3=ADrta:
>On 09/07/2021 09:09, Richard Kojedzinszky wrote:
>
>Thankyou for the patch=2E=C2=A0 That is quite an embarrassing bug=2E
>
>However, for copyright reasons, we require all submissions to contain a
>Signed-off-by line, as per the Developer's Certificate of Origin,
>https://wiki=2Exenproject=2Eorg/wiki/Submitting_Xen_Project_Patches#Signe=
d-off-by
>
>Given how trivial this patch is, feel free to just reply to this email
>with confirmation and I can sort it out on commit=2E
>
>However, for future patches, please include directly=2E=C2=A0 (Also, if y=
ou
>are
>able to use git-send-email, and the get_maintainers=2Epl script, that
>would be even better=2E)
>
>~Andrew

--=20
Ezt a levelet az Android k=C3=A9sz=C3=BCl=C3=A9kemr=C5=91l k=C3=BCldtem K-=
9 Mail-el=2E Eln=C3=A9z=C3=A9st a t=C3=B6m=C3=B6rs=C3=A9gem=C3=A9rt=2E
------3CUGW2BUZTVZ2WIDP4SY4014O4SO7V
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head></head><body>Then please add signed-by headers=2E :)<br><br><br=
>Thanks<br><br><div class=3D"gmail_quote">2021=2E j=C3=BAlius 9=2E 10:59:54=
 CEST, Andrew Cooper &lt;andrew=2Ecooper3@citrix=2Ecom&gt; =C3=ADrta:<block=
quote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt 0=2E8ex; border-le=
ft: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class=3D"k9mail">On 09/07/2021 09:09, Richard Kojedzinszky wrote:<br>=
<br>Thankyou for the patch=2E&nbsp; That is quite an embarrassing bug=2E<br=
><br>However, for copyright reasons, we require all submissions to contain =
a<br>Signed-off-by line, as per the Developer's Certificate of Origin,<br><=
a href=3D"https://wiki=2Exenproject=2Eorg/wiki/Submitting_Xen_Project_Patch=
es#Signed-off-by">https://wiki=2Exenproject=2Eorg/wiki/Submitting_Xen_Proje=
ct_Patches#Signed-off-by</a><br><br>Given how trivial this patch is, feel f=
ree to just reply to this email<br>with confirmation and I can sort it out =
on commit=2E<br><br>However, for future patches, please include directly=2E=
&nbsp; (Also, if you are<br>able to use git-send-email, and the get_maintai=
ners=2Epl script, that<br>would be even better=2E)<br><br>~Andrew<br><br></=
pre></blockquote></div><br>-- <br>Ezt a levelet az Android k=C3=A9sz=C3=BCl=
=C3=A9kemr=C5=91l k=C3=BCldtem K-9 Mail-el=2E Eln=C3=A9z=C3=A9st a t=C3=B6m=
=C3=B6rs=C3=A9gem=C3=A9rt=2E</body></html>
------3CUGW2BUZTVZ2WIDP4SY4014O4SO7V--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:33:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:33:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153530.283640 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mtF-0002hl-U5; Fri, 09 Jul 2021 09:33:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153530.283640; Fri, 09 Jul 2021 09:33:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mtF-0002he-RE; Fri, 09 Jul 2021 09:33:45 +0000
Received: by outflank-mailman (input) for mailman id 153530;
 Fri, 09 Jul 2021 09:33:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=AxIF=MB=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1mtF-0002hY-1N
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:33:45 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.164])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 10a59baa-8c45-4371-8aa3-8edffba21d2c;
 Fri, 09 Jul 2021 09:33:44 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx699XYdlm
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 9 Jul 2021 11:33:34 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 10a59baa-8c45-4371-8aa3-8edffba21d2c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625823215;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=9YN/+Z68CKXPjcb0qyth/k4kP6bwaYhEAbzraNhvKPo=;
    b=WjTe3KNDOQ/fb0UqblT5DiRWTe8Smxosu2ydjQgKn2HDNNU20RAnL/nJWiTl0CEzGr
    qQfqcSc3wlLhEoytZ+KAKQ+J57/IW3kpFv1GTjMxC5wxbo3Hg6tjqfFUCcBGe/7D6Wqn
    wkmOx0V/7KZe+Y0YY+EusS3l74HUoJIj8Hz2j5bmhVIrAkMIGvA0bMZEEClqmAAqgd56
    Ma5NdHm1UFMNLztYP062gGvkmhg6b0Nz19PrfrGPDrO+mFBSiJ72qyH3a26o8dXb7DcK
    FLOg+3ypUj318PhfJmeTyr1rreYsp8opA1PYB7K3xTSTmkIZb3gFr7HYP17juluEqTzo
    /W0Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Fri, 9 Jul 2021 11:33:21 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Julien Grall <julien@xen.org>
Cc: xen-devel@lists.xenproject.org, Wei Liu <wl@xen.org>, Andrew Cooper
 <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, Ian
 Jackson <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Juergen Gross <jgross@suse.com>,
 Anthony PERARD <anthony.perard@citrix.com>
Subject: Re: [PATCH v20210701 07/40] tools: create libxensaverestore
Message-ID: <20210709113321.0b947a8a.olaf@aepfle.de>
In-Reply-To: <cb473d34-7022-74d2-e679-087bf84c26b8@xen.org>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-8-olaf@aepfle.de>
	<20210709112040.2dd4ec8d.olaf@aepfle.de>
	<cb473d34-7022-74d2-e679-087bf84c26b8@xen.org>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/B_Hw7=eXOAH4ZQiooRtS_d0";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/B_Hw7=eXOAH4ZQiooRtS_d0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Fri, 9 Jul 2021 10:31:53 +0100
schrieb Julien Grall <julien@xen.org>:

> Were they resolved?

I think so, yes.

Olaf

--Sig_/B_Hw7=eXOAH4ZQiooRtS_d0
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDoF+EACgkQ86SN7mm1
DoD2MA/+J6T824zMKsEjRN2IczaZlPCvrS7GrivNRXHIJghP6JTdsO7u1Ucsq/yj
K9n7RcikAkveGXlRQ4w03Z5ubwUhV/k2+fh1W7mRRnMDCa7jiwRbAFGy59HFJXeP
dJEj2hsRmyspHMwT9cFsYTLmblJgMSVmLCC97i1FTS+3V5nF8m2ZCC8gT9XLrdy2
aaM5/cBeTVRs6y2cLNdgSHrjWvEJGYFVUEmoHGpF2KKTaO8mnk0SCFhbbvZSpONc
7FiLeBXFVQWAn6gm/px+EBMF2Zfq2r2Fc38ER9lSj1N+vcYsdVb5lKzjVdKpphly
c7xQbIfSwLiuYFG0KJ7WfsJsVnPRsQXrPnjvyxpMK913tuMO2hA/icfW8pbeSV+N
qt1sGTHt/jj50QjCpVw7UBnrC9oF+Hq4aCvwjPqp5qnRCrBKlhGQUgc/zzQ7ZynF
+fITsuppJ6q4cZNd2uH3aC34EkLHhUW5VoZ6m6nh5L0ihuu9jS+UvNS6TIP5EGmd
At6GvfERaGIRC2K45dUNkmOxTxQf1odwRMmnifNH4PRFfWsw8XrGeLBu6VHvwLvS
1SUS2plnMXEe4SROHqMWpQCLrjXZ6pC4QNeRsn2EacdPGULr03V/OBpc/6GLRbAc
kFwUftQ/S5qUqAdnF5vkJ5K5jbZ7d2MQ792bO0NO1+DTXX4e7NM=
=5akL
-----END PGP SIGNATURE-----

--Sig_/B_Hw7=eXOAH4ZQiooRtS_d0--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:35:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:35:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153535.283651 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mul-0003Kr-9F; Fri, 09 Jul 2021 09:35:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153535.283651; Fri, 09 Jul 2021 09:35:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1mul-0003Kk-6F; Fri, 09 Jul 2021 09:35:19 +0000
Received: by outflank-mailman (input) for mailman id 153535;
 Fri, 09 Jul 2021 09:35:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1muk-0003Ke-KO
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:35:18 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1mui-0005YX-3O; Fri, 09 Jul 2021 09:35:16 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1muh-0006Cq-TX; Fri, 09 Jul 2021 09:35:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=a5Ztq9YTbLg4aLZLurZnEdCD/9y7SKe2SS9EyMB1iUg=; b=u27zJ+b/ytHad5tCX+BfNhmsG/
	nKeIYBlFCWE8hl4cNKG7xtcwgB+DqDj3kSlJRdaSacw1ruxw+uP4nVQ0n/f9JCvl1e+4Ixs9I2yVs
	eCzFPMKoTE2r556apwKWoXl6H8NVMKUoRRMk5v01Xfz/VODAcyMb2XuSvNtGbxOTYTwc=;
Subject: Re: [PATCH v20210701 07/40] tools: create libxensaverestore
To: Olaf Hering <olaf@aepfle.de>, xen-devel@lists.xenproject.org
Cc: Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Stefano Stabellini
 <sstabellini@kernel.org>, Juergen Gross <jgross@suse.com>,
 Anthony PERARD <anthony.perard@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
 <20210701095635.15648-8-olaf@aepfle.de>
From: Julien Grall <julien@xen.org>
Message-ID: <4630739a-5ec7-ab20-d587-8c76f784b0a7@xen.org>
Date: Fri, 9 Jul 2021 10:35:13 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210701095635.15648-8-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Olaf,

On 01/07/2021 10:56, Olaf Hering wrote:
> Move all save/restore related code from libxenguest.so into a separate
> library libxensaverestore.so. The only consumer is libxl-save-helper.
> There is no need to have the moved code mapped all the time in binaries
> where libxenguest.so is used.
> 
> According to size(1) the change is:
>     text	   data	    bss	    dec	    hex	filename
>   187183	   4304	     48	 191535	  2ec2f	guest/libxenguest.so.4.15.0
> 
>   124106	   3376	     48	 127530	  1f22a	guest/libxenguest.so.4.15.0
>    67841	   1872	      8	  69721	  11059	saverestore/libxensaverestore.so.4.15.0
> 
> While touching the files anyway, take the opportunity to drop the
> redundant xg_sr_ filename prefix.
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> Acked-by: Wei Liu <wl@xen.org>

The changelog is not very useful to keep in the commit message. We 
usally add --- on its own line before so they will get stripped when the 
patch is applied.

This comment applies for the full series. But I can deal with this patch 
if I happen to commit it.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 09:43:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 09:43:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153544.283663 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1n26-0004oe-4K; Fri, 09 Jul 2021 09:42:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153544.283663; Fri, 09 Jul 2021 09:42:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1n26-0004oX-0l; Fri, 09 Jul 2021 09:42:54 +0000
Received: by outflank-mailman (input) for mailman id 153544;
 Fri, 09 Jul 2021 09:42:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1OC2=MB=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1m1n24-0004oR-F2
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 09:42:52 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4f8551a8-df35-4d4c-a8c6-f407ba0c789c;
 Fri, 09 Jul 2021 09:42:50 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4f8551a8-df35-4d4c-a8c6-f407ba0c789c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625823770;
  h=date:from:to:cc:subject:message-id:references:
   content-transfer-encoding:in-reply-to:mime-version;
  bh=0ksuzbvpO1c5eENZgOWZ7/aG9qwF/t66/TU/ry71ASo=;
  b=QGzSRWDbvnWk7i3fRhTSCx7mHenVnaS9jH8MJhJCOPcEWwth8lWFFGcj
   NvJP0k8YL4XRI/SyefldvKDrxcTUVTf5M+EEMvJ5D3MZ9sM86oehd+wJN
   jxBiV+zaxknVuJ+7hoTbqXesvrhgqNIA4Gsz2w+PouuX1TnDvgCoMHxsi
   Y=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: eEniMIMRunvOhaxk6jZW5GhByfhdGFx+EJBKorpWusJ6lpGqsRlGbJ/g3ygXtVxs+9iMxHoyaG
 6hAv1sw3+trsdASj6WsRmrHOgqmZdvSYuPPkCSUav35gHfeadgtwsVRdte2LMU4UU+WhoDmgBS
 +cZFT9AbivoFUpKRRDwtGhhgGFZR0xE9tlGTnnfwxH9cpRO6MnpyU0aPh3PizFGn3hR6JfbwTg
 4q+FQAYH0YGvhklRk6VMS/S25EcN+LJ5o8JHG8ri3XpPpyea0El7XU3E/YlYhy6JwURa0+KVU0
 kEg=
X-SBRS: 5.1
X-MesageID: 47911728
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:pQhpk6oTnvbwQr2t9YaQaXYaV5vUL9V00zEX/kB9WHVpm5Oj+P
 xGzc526farslsssREb+OxpOMG7MBThHLpOkPMs1NCZLXTbUQqTXfpfBO7ZrQEIdBeOlNK1uZ
 0QFpSWTeeAcWSS7vyKkTVQcexQueVvmZrA7Yy1rwYPPHJXguNbnn9E426gYzNLrWJ9dPwE/f
 Snl656T23KQwVpUi33PAhOY8Hz4/nw0L72ax8PABAqrCGIkDOT8bb/VzyVxA0XXT9jyaortT
 GtqX202oyT99WAjjPM3W7a6Jpb3PPn19t4HcSJzuwYMC/lhAqEbJloH5eCoDc2iuey70tCqq
 iAnz4Qe+BIr1/BdGC8phXgnyP61iw11nPkwViExVP+vM3QXlsBeot8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVittilG/rRMZ4KAuZkRkIMgjgYJq3M4iFBs/KuZEIMu60vFpLA
 BWNrCd2B4MGmnqK0ww1wJUsayRtndaJGbOfqFNgL3T79FspgEN86Iv/r1oop4xzuNOd3B63Z
 WxDk1JrsAHciZEV9M3OA8+KfHHfVAlByi8dl6vHQ==
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47911728"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=PJdgaWnaNmWETE/8QT8pdrgqp/4aVRw6Eez0tEU6w3jDO7zDn935P9Nksj+ncaeWhL2Q+aRtMJswRUAFVuZBGnlgzg3RPwEyh+1ieC0eRwCyR4Jp73Aypz4DGDT+/fRkJ55e2pCjYjFvxB8ZIKOSZUT3ga5XMPj280Mxd4X2NYKDwelNyVlT8QB2JoPigNIJ0rMUEu/t4D1W3hajhGzZ7prElM/y/omM63df3hczopQJONNucORYaqyNz9A3CleTfMIAOh8dcaCQosZKo99FQBoCn2hCMSOYvYfc3VdDD0t2EHbhUBoZqxGtQ+fKa5f7so0lDc7R8uHylpDu98hwKw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2e9meAlnIBEgl5WbIMQZHa8lBG6LVBBKSxU/RMyg2c8=;
 b=Bg6y1OBQCtm4n+R9JenDrCtycbXPOX8rraGAslDGBc/eNqlJj1ADpVl1lH9SJLtneH4FEgZRZj3HGyzomAbm8ouwHlq1rTIz6Z2xDNaD8gZTt0AnCN4xpa92wL8wmHe7Pz++GDR93kB2UD0Ck2qUUbRt3sSgkbADIAUH+welw8yRUndjFJQJlcEfDGyxrLxgbWaqx7mAJd+BvG23luHegKeL2Xc6lroGkPlmDlNQPCd7UMKI1crpwzZL2OM+MKhazDj9FG9+h/M/JHyjebCenegg7+WPoJJ6328TzMvkPIqVC/dNx2FJ5XxsenneXNETknPkQ1K/IAd6Ke6VjvaPzQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2e9meAlnIBEgl5WbIMQZHa8lBG6LVBBKSxU/RMyg2c8=;
 b=Fgo0R0gNnuzukKcLgxJq4lDRZ2+5FSFPCTG+IVakRYK/5I9pCEEIG4/f5SJljvPUCD4c5ly1x5jMAZ7Yc6qe6mdY3iFXLtjuYlbLPaGDoEBka3bEFpSNE2yF/BQlfo9/opl1Vnnbgp+1BmI4w64WJZu+Rb92f22wHBTw+xD5MTc=
Date: Fri, 9 Jul 2021 11:42:22 +0200
From: Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>
To: Juergen Gross <jgross@suse.com>
CC: <xen-devel@lists.xenproject.org>, <linux-block@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>, Konrad Rzeszutek Wilk
	<konrad.wilk@oracle.com>, Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
Message-ID: <YOgZ/lzDIlzIxCZp@Air-de-Roger>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210708124345.10173-4-jgross@suse.com>
X-ClientProxiedBy: MR1P264CA0027.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:501:2f::14) To DS7PR03MB5608.namprd03.prod.outlook.com
 (2603:10b6:5:2c9::18)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e7b5c31f-adbd-4c23-e8fa-08d942bddcd8
X-MS-TrafficTypeDiagnostic: DM6PR03MB4537:
X-Microsoft-Antispam-PRVS: <DM6PR03MB4537C27E4BF6751F0350608F8F189@DM6PR03MB4537.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1332;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: FisVEeVO1kTbz7jaG5BE2YfaKNh2MWul3CJtrB11NeMRLxf8Eo7InnGn4PAjWpZ5dXG6LrA2DJKZVG/XBp1vv4/BZo55gGzR/WFeKCzD5/C7swVbDDrRlS7Yc9aR5wWnrPLmWjxSGMceG8e9XQPwBad0NhjyLasPAMY4TrS1tDG1NLIRMF8aELZw0NnhZ6QRFLPi4+uUUvJMAKyhukNBBvOkKRIczzo+HgXiJkoEo/94Fshza42ZfFtRYHxiG4v5VGA8MzAuFwzNdHeHolEj3lPNu4YdagroLJAf7QaLVgPJMgQ55jMoj5bjSKq8C1cKjZG4nVoTFAAGUngINWqhsJyxOr03hS1JyHYOZLJIaARkDUihH3JPVJt60Pm3Jcav7FtSDy2AqnE6H/C75WfB2N+5sMMBtbv/sSwElsCjPS4D4f/30R7RMkNbfP3aZkLdL3X+FT3aUKaOOcmNQPVrgXRDpfDnI/O1FdUKNfiKuHs8YIBEy7PizYZv4u090XbGGj8YOZYBYcBpuKjs+OTSzo48o6IviBha+RfYSwjYVESYXU5zPHzjUeGrs09Iryw8lXbSzI0ugD/aJBX2vo0v1AlGUWzSmvwcZs0dXVi0O2nzWH6QKELYx8zv1QnON7/r1L0V7tdUyxe9kvfMCI8Bdg==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(7916004)(4636009)(396003)(366004)(39850400004)(376002)(346002)(136003)(85182001)(956004)(6486002)(54906003)(26005)(9686003)(186003)(5660300002)(66556008)(66946007)(8676002)(66476007)(316002)(8936002)(6496006)(83380400001)(478600001)(86362001)(33716001)(38100700002)(4326008)(6666004)(6916009)(2906002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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/cI5S1?=
X-MS-Exchange-CrossTenant-Network-Message-Id: e7b5c31f-adbd-4c23-e8fa-08d942bddcd8
X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 09:42:27.2365
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 523R3wrDUS3KweIVyb+DuSOyioyfv8al4gyStTdgPqjW0d8ZHeLOLnGBtfNBx0dDr3CZFItEKGzBhlMALcqZYQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR03MB4537
X-OriginatorOrg: citrix.com

On Thu, Jul 08, 2021 at 02:43:45PM +0200, Juergen Gross wrote:
> Today blkfront will trust the backend to send only sane response data.
> In order to avoid privilege escalations or crashes in case of malicious
> backends verify the data to be within expected limits. Especially make
> sure that the response always references an outstanding request.
> 
> Introduce a new state of the ring BLKIF_STATE_ERROR which will be
> switched to in case an inconsistency is being detected. Recovering from
> this state is possible only via removing and adding the virtual device
> again (e.g. via a suspend/resume cycle).
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Acked-by: Roger Pau Monné <roger.pau@citrix.com>

> ---
> V2:
> - use READ_ONCE() for reading the producer index
> - check validity of producer index only after memory barrier (Jan Beulich)
> - use virt_rmb() as barrier (Jan Beulich)
> ---
>  drivers/block/xen-blkfront.c | 66 ++++++++++++++++++++++++++----------
>  1 file changed, 49 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
> index 80701860870a..ecdbb0381b4c 100644
> --- a/drivers/block/xen-blkfront.c
> +++ b/drivers/block/xen-blkfront.c
> @@ -80,6 +80,7 @@ enum blkif_state {
>  	BLKIF_STATE_DISCONNECTED,
>  	BLKIF_STATE_CONNECTED,
>  	BLKIF_STATE_SUSPENDED,
> +	BLKIF_STATE_ERROR,
>  };
>  
>  struct grant {
> @@ -89,6 +90,7 @@ struct grant {
>  };
>  
>  enum blk_req_status {
> +	REQ_PROCESSING,
>  	REQ_WAITING,
>  	REQ_DONE,
>  	REQ_ERROR,
> @@ -543,7 +545,7 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
>  
>  	id = get_id_from_freelist(rinfo);
>  	rinfo->shadow[id].request = req;
> -	rinfo->shadow[id].status = REQ_WAITING;
> +	rinfo->shadow[id].status = REQ_PROCESSING;
>  	rinfo->shadow[id].associated_id = NO_ASSOCIATED_ID;
>  
>  	rinfo->shadow[id].req.u.rw.id = id;
> @@ -572,6 +574,7 @@ static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_inf
>  
>  	/* Copy the request to the ring page. */
>  	*final_ring_req = *ring_req;
> +	rinfo->shadow[id].status = REQ_WAITING;
>  
>  	return 0;
>  }
> @@ -847,8 +850,11 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
>  
>  	/* Copy request(s) to the ring page. */
>  	*final_ring_req = *ring_req;
> -	if (unlikely(require_extra_req))
> +	rinfo->shadow[id].status = REQ_WAITING;
> +	if (unlikely(require_extra_req)) {
>  		*final_extra_ring_req = *extra_ring_req;
> +		rinfo->shadow[extra_id].status = REQ_WAITING;
> +	}
>  
>  	if (new_persistent_gnts)
>  		gnttab_free_grant_references(setup.gref_head);
> @@ -1402,8 +1408,8 @@ static enum blk_req_status blkif_rsp_to_req_status(int rsp)
>  static int blkif_get_final_status(enum blk_req_status s1,
>  				  enum blk_req_status s2)
>  {
> -	BUG_ON(s1 == REQ_WAITING);
> -	BUG_ON(s2 == REQ_WAITING);
> +	BUG_ON(s1 < REQ_DONE);
> +	BUG_ON(s2 < REQ_DONE);
>  
>  	if (s1 == REQ_ERROR || s2 == REQ_ERROR)
>  		return BLKIF_RSP_ERROR;
> @@ -1436,7 +1442,7 @@ static bool blkif_completion(unsigned long *id,
>  		s->status = blkif_rsp_to_req_status(bret->status);
>  
>  		/* Wait the second response if not yet here. */
> -		if (s2->status == REQ_WAITING)
> +		if (s2->status < REQ_DONE)
>  			return false;
>  
>  		bret->status = blkif_get_final_status(s->status,
> @@ -1555,11 +1561,17 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  
>  	spin_lock_irqsave(&rinfo->ring_lock, flags);
>   again:
> -	rp = rinfo->ring.sring->rsp_prod;
> -	rmb(); /* Ensure we see queued responses up to 'rp'. */
> +	rp = READ_ONCE(rinfo->ring.sring->rsp_prod);
> +	virt_rmb(); /* Ensure we see queued responses up to 'rp'. */

Is the READ_ONCE strictly needed? Doesn't the barrier prevent rp from
not being loaded at this point?

> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
> +		pr_alert("%s: illegal number of responses %u\n",
> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
> +		goto err;
> +	}
>  
>  	for (i = rinfo->ring.rsp_cons; i != rp; i++) {
>  		unsigned long id;
> +		unsigned int op;
>  
>  		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
>  		id = bret.id;
> @@ -1570,14 +1582,28 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		 * look in get_id_from_freelist.
>  		 */
>  		if (id >= BLK_RING_SIZE(info)) {
> -			WARN(1, "%s: response to %s has incorrect id (%ld)\n",
> -			     info->gd->disk_name, op_name(bret.operation), id);
> -			/* We can't safely get the 'struct request' as
> -			 * the id is busted. */
> -			continue;
> +			pr_alert("%s: response has incorrect id (%ld)\n",
> +				 info->gd->disk_name, id);
> +			goto err;
>  		}
> +		if (rinfo->shadow[id].status != REQ_WAITING) {
> +			pr_alert("%s: response references no pending request\n",
> +				 info->gd->disk_name);
> +			goto err;
> +		}
> +
> +		rinfo->shadow[id].status = REQ_PROCESSING;
>  		req  = rinfo->shadow[id].request;
>  
> +		op = rinfo->shadow[id].req.operation;
> +		if (op == BLKIF_OP_INDIRECT)
> +			op = rinfo->shadow[id].req.u.indirect.indirect_op;
> +		if (bret.operation != op) {
> +			pr_alert("%s: response has wrong operation (%u instead of %u)\n",
> +				 info->gd->disk_name, bret.operation, op);

You could also use op_name here, but I guess this could mask the
operation as 'unknown' for any number out of the defined ones.

> +			goto err;
> +		}
> +
>  		if (bret.operation != BLKIF_OP_DISCARD) {
>  			/*
>  			 * We may need to wait for an extra response if the
> @@ -1602,7 +1628,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		case BLKIF_OP_DISCARD:
>  			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
>  				struct request_queue *rq = info->rq;
> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
> +
> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>  					   info->gd->disk_name, op_name(bret.operation));
>  				blkif_req(req)->error = BLK_STS_NOTSUPP;
>  				info->feature_discard = 0;
> @@ -1614,13 +1641,13 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		case BLKIF_OP_FLUSH_DISKCACHE:
>  		case BLKIF_OP_WRITE_BARRIER:
>  			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>  				       info->gd->disk_name, op_name(bret.operation));
>  				blkif_req(req)->error = BLK_STS_NOTSUPP;
>  			}
>  			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
>  				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
> -				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
> +				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
>  				       info->gd->disk_name, op_name(bret.operation));
>  				blkif_req(req)->error = BLK_STS_NOTSUPP;
>  			}
> @@ -1635,8 +1662,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
>  		case BLKIF_OP_READ:
>  		case BLKIF_OP_WRITE:
>  			if (unlikely(bret.status != BLKIF_RSP_OKAY))
> -				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
> -					"request: %x\n", bret.status);
> +				dev_dbg_ratelimited(&info->xbdev->dev,
> +					"Bad return from blkdev data request: %x\n", bret.status);

Since you are touching the line, could you use %#x here? It's IMO not
obvious from the context this status will be printed in hex base. Also
bret.status parameter could be split into a newline.

Thanks, Roger.


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:06:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:06:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153555.283686 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oKV-0004D5-8S; Fri, 09 Jul 2021 11:05:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153555.283686; Fri, 09 Jul 2021 11:05:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oKV-0004Cy-3z; Fri, 09 Jul 2021 11:05:59 +0000
Received: by outflank-mailman (input) for mailman id 153555;
 Fri, 09 Jul 2021 11:05:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1oKT-0004Co-Mr; Fri, 09 Jul 2021 11:05:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1oKT-00078e-JG; Fri, 09 Jul 2021 11:05:57 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1oKT-00077m-C9; Fri, 09 Jul 2021 11:05:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1oKT-0004HO-97; Fri, 09 Jul 2021 11:05:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rQF69EfmbVHcnDS0aKJLFjksMQJ3Lj78KRuSS1tNYaI=; b=PYxXiODphQTXgxqGydMfpfQaxD
	a5oPxmgQ20AMZRWafHyQaGBNr2iCdciwcOG+Q/cUwcTSpSmFbQHNiEXCz+uSJVOtDMDIX5Vdf2eZE
	UxyogbQLHC4fvixzu9I37AGVmNztkgZ55YpgOoqvJNBCa906OUisRBUOPrQ0/050YxuU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163468-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163468: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=140931aa2894991d9d6f1b2ba6ca275e1bc56259
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 11:05:57 +0000

flight 163468 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163468/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  140931aa2894991d9d6f1b2ba6ca275e1bc56259
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163445  2021-07-08 13:00:28 Z    0 days
Testing same since   163468  2021-07-09 07:00:28 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   0f435e2b58..140931aa28  140931aa2894991d9d6f1b2ba6ca275e1bc56259 -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:09:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:09:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153561.283700 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oNi-0004r6-OC; Fri, 09 Jul 2021 11:09:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153561.283700; Fri, 09 Jul 2021 11:09:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oNi-0004qz-KA; Fri, 09 Jul 2021 11:09:18 +0000
Received: by outflank-mailman (input) for mailman id 153561;
 Fri, 09 Jul 2021 11:09:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=P3Jm=MB=intel.com=rong.a.chen@srs-us1.protection.inumbo.net>)
 id 1m1oNg-0004qr-DH
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 11:09:16 +0000
Received: from mga01.intel.com (unknown [192.55.52.88])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 175f2c98-e0a6-11eb-85df-12813bfff9fa;
 Fri, 09 Jul 2021 11:09:13 +0000 (UTC)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 09 Jul 2021 04:09:11 -0700
Received: from shao2-debian.sh.intel.com (HELO localhost) ([10.239.13.11])
 by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 09 Jul 2021 04:09:08 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 175f2c98-e0a6-11eb-85df-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="231451815"
X-IronPort-AV: E=Sophos;i="5.84,226,1620716400"; 
   d="gz'50?scan'50,208,50";a="231451815"
X-IronPort-AV: E=Sophos;i="5.84,226,1620716400"; 
   d="gz'50?scan'50,208,50";a="498878514"
Date: Fri, 9 Jul 2021 19:09:06 +0800
From: kernel test robot <rong.a.chen@intel.com>
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: kbuild-all@lists.01.org, Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
Message-ID: <20210709110906.GN2022171@shao2-debian>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="73fGQZLCrFzENemP"
Content-Disposition: inline
In-Reply-To: <20210708124345.10173-4-jgross@suse.com>
User-Agent: Mutt/1.10.1 (2018-07-13)


--73fGQZLCrFzENemP
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline

Hi Juergen,

I love your patch! Perhaps something to improve:

[auto build test WARNING on xen-tip/linux-next]
[also build test WARNING on next-20210708]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Juergen-Gross/xen-harden-blkfront-against-malicious-backends/20210708-204423
base:   https://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git linux-next
config: x86_64-rhel-8.3-kselftests (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://github.com/0day-ci/linux/commit/26379fb9eaab91fc62eefa414619d27072941f59
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Juergen-Gross/xen-harden-blkfront-against-malicious-backends/20210708-204423
        git checkout 26379fb9eaab91fc62eefa414619d27072941f59
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)
>> drivers/block/xen-blkfront.c:1568:20: sparse: sparse: context imbalance in 'blkif_interrupt' - different lock contexts for basic block

vim +/blkif_interrupt +1568 drivers/block/xen-blkfront.c

9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1567  
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17 @1568  static irqreturn_t blkif_interrupt(int irq, void *dev_id)
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1569  {
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1570  	struct request *req;
4c0a9a02397621 Juergen Gross         2021-07-08  1571  	struct blkif_response bret;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1572  	RING_IDX i, rp;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1573  	unsigned long flags;
81f35161577236 Bob Liu               2015-11-14  1574  	struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id;
81f35161577236 Bob Liu               2015-11-14  1575  	struct blkfront_info *info = rinfo->dev_info;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1576  
11659569f7202d Bob Liu               2015-11-14  1577  	if (unlikely(info->connected != BLKIF_STATE_CONNECTED))
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1578  		return IRQ_HANDLED;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1579  
11659569f7202d Bob Liu               2015-11-14  1580  	spin_lock_irqsave(&rinfo->ring_lock, flags);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1581   again:
26379fb9eaab91 Juergen Gross         2021-07-08  1582  	rp = READ_ONCE(rinfo->ring.sring->rsp_prod);
26379fb9eaab91 Juergen Gross         2021-07-08  1583  	virt_rmb(); /* Ensure we see queued responses up to 'rp'. */
26379fb9eaab91 Juergen Gross         2021-07-08  1584  	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
26379fb9eaab91 Juergen Gross         2021-07-08  1585  		pr_alert("%s: illegal number of responses %u\n",
26379fb9eaab91 Juergen Gross         2021-07-08  1586  			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
26379fb9eaab91 Juergen Gross         2021-07-08  1587  		goto err;
26379fb9eaab91 Juergen Gross         2021-07-08  1588  	}
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1589  
81f35161577236 Bob Liu               2015-11-14  1590  	for (i = rinfo->ring.rsp_cons; i != rp; i++) {
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1591  		unsigned long id;
26379fb9eaab91 Juergen Gross         2021-07-08  1592  		unsigned int op;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1593  
4c0a9a02397621 Juergen Gross         2021-07-08  1594  		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
4c0a9a02397621 Juergen Gross         2021-07-08  1595  		id = bret.id;
4c0a9a02397621 Juergen Gross         2021-07-08  1596  
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1597  		/*
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1598  		 * The backend has messed up and given us an id that we would
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1599  		 * never have given to it (we stamp it up to BLK_RING_SIZE -
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1600  		 * look in get_id_from_freelist.
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1601  		 */
86839c56dee28c Bob Liu               2015-06-03  1602  		if (id >= BLK_RING_SIZE(info)) {
26379fb9eaab91 Juergen Gross         2021-07-08  1603  			pr_alert("%s: response has incorrect id (%ld)\n",
26379fb9eaab91 Juergen Gross         2021-07-08  1604  				 info->gd->disk_name, id);
26379fb9eaab91 Juergen Gross         2021-07-08  1605  			goto err;
26379fb9eaab91 Juergen Gross         2021-07-08  1606  		}
26379fb9eaab91 Juergen Gross         2021-07-08  1607  		if (rinfo->shadow[id].status != REQ_WAITING) {
26379fb9eaab91 Juergen Gross         2021-07-08  1608  			pr_alert("%s: response references no pending request\n",
26379fb9eaab91 Juergen Gross         2021-07-08  1609  				 info->gd->disk_name);
26379fb9eaab91 Juergen Gross         2021-07-08  1610  			goto err;
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1611  		}
26379fb9eaab91 Juergen Gross         2021-07-08  1612  
26379fb9eaab91 Juergen Gross         2021-07-08  1613  		rinfo->shadow[id].status = REQ_PROCESSING;
81f35161577236 Bob Liu               2015-11-14  1614  		req  = rinfo->shadow[id].request;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1615  
26379fb9eaab91 Juergen Gross         2021-07-08  1616  		op = rinfo->shadow[id].req.operation;
26379fb9eaab91 Juergen Gross         2021-07-08  1617  		if (op == BLKIF_OP_INDIRECT)
26379fb9eaab91 Juergen Gross         2021-07-08  1618  			op = rinfo->shadow[id].req.u.indirect.indirect_op;
26379fb9eaab91 Juergen Gross         2021-07-08  1619  		if (bret.operation != op) {
26379fb9eaab91 Juergen Gross         2021-07-08  1620  			pr_alert("%s: response has wrong operation (%u instead of %u)\n",
26379fb9eaab91 Juergen Gross         2021-07-08  1621  				 info->gd->disk_name, bret.operation, op);
26379fb9eaab91 Juergen Gross         2021-07-08  1622  			goto err;
26379fb9eaab91 Juergen Gross         2021-07-08  1623  		}
26379fb9eaab91 Juergen Gross         2021-07-08  1624  
4c0a9a02397621 Juergen Gross         2021-07-08  1625  		if (bret.operation != BLKIF_OP_DISCARD) {
6cc5683390472c Julien Grall          2015-08-13  1626  			/*
6cc5683390472c Julien Grall          2015-08-13  1627  			 * We may need to wait for an extra response if the
6cc5683390472c Julien Grall          2015-08-13  1628  			 * I/O request is split in 2
6cc5683390472c Julien Grall          2015-08-13  1629  			 */
4c0a9a02397621 Juergen Gross         2021-07-08  1630  			if (!blkif_completion(&id, rinfo, &bret))
6cc5683390472c Julien Grall          2015-08-13  1631  				continue;
6cc5683390472c Julien Grall          2015-08-13  1632  		}
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1633  
81f35161577236 Bob Liu               2015-11-14  1634  		if (add_id_to_freelist(rinfo, id)) {
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1635  			WARN(1, "%s: response to %s (id %ld) couldn't be recycled!\n",
4c0a9a02397621 Juergen Gross         2021-07-08  1636  			     info->gd->disk_name, op_name(bret.operation), id);
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1637  			continue;
6878c32e5cc0e4 Konrad Rzeszutek Wilk 2012-05-25  1638  		}
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1639  
4c0a9a02397621 Juergen Gross         2021-07-08  1640  		if (bret.status == BLKIF_RSP_OKAY)
2a842acab109f4 Christoph Hellwig     2017-06-03  1641  			blkif_req(req)->error = BLK_STS_OK;
2a842acab109f4 Christoph Hellwig     2017-06-03  1642  		else
2a842acab109f4 Christoph Hellwig     2017-06-03  1643  			blkif_req(req)->error = BLK_STS_IOERR;
2a842acab109f4 Christoph Hellwig     2017-06-03  1644  
4c0a9a02397621 Juergen Gross         2021-07-08  1645  		switch (bret.operation) {
ed30bf317c5ceb Li Dongyang           2011-09-01  1646  		case BLKIF_OP_DISCARD:
4c0a9a02397621 Juergen Gross         2021-07-08  1647  			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
ed30bf317c5ceb Li Dongyang           2011-09-01  1648  				struct request_queue *rq = info->rq;
26379fb9eaab91 Juergen Gross         2021-07-08  1649  
26379fb9eaab91 Juergen Gross         2021-07-08  1650  				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
4c0a9a02397621 Juergen Gross         2021-07-08  1651  					   info->gd->disk_name, op_name(bret.operation));
2a842acab109f4 Christoph Hellwig     2017-06-03  1652  				blkif_req(req)->error = BLK_STS_NOTSUPP;
ed30bf317c5ceb Li Dongyang           2011-09-01  1653  				info->feature_discard = 0;
5ea42986694a96 Konrad Rzeszutek Wilk 2011-10-12  1654  				info->feature_secdiscard = 0;
8b904b5b6b58b9 Bart Van Assche       2018-03-07  1655  				blk_queue_flag_clear(QUEUE_FLAG_DISCARD, rq);
8b904b5b6b58b9 Bart Van Assche       2018-03-07  1656  				blk_queue_flag_clear(QUEUE_FLAG_SECERASE, rq);
ed30bf317c5ceb Li Dongyang           2011-09-01  1657  			}
ed30bf317c5ceb Li Dongyang           2011-09-01  1658  			break;
edf6ef59ec7ee8 Konrad Rzeszutek Wilk 2011-05-03  1659  		case BLKIF_OP_FLUSH_DISKCACHE:
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1660  		case BLKIF_OP_WRITE_BARRIER:
4c0a9a02397621 Juergen Gross         2021-07-08  1661  			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
26379fb9eaab91 Juergen Gross         2021-07-08  1662  				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
4c0a9a02397621 Juergen Gross         2021-07-08  1663  				       info->gd->disk_name, op_name(bret.operation));
31c4ccc3ecb494 Bart Van Assche       2017-07-21  1664  				blkif_req(req)->error = BLK_STS_NOTSUPP;
dcb8baeceaa1c6 Jeremy Fitzhardinge   2010-11-02  1665  			}
4c0a9a02397621 Juergen Gross         2021-07-08  1666  			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
81f35161577236 Bob Liu               2015-11-14  1667  				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
26379fb9eaab91 Juergen Gross         2021-07-08  1668  				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
4c0a9a02397621 Juergen Gross         2021-07-08  1669  				       info->gd->disk_name, op_name(bret.operation));
2a842acab109f4 Christoph Hellwig     2017-06-03  1670  				blkif_req(req)->error = BLK_STS_NOTSUPP;
dcb8baeceaa1c6 Jeremy Fitzhardinge   2010-11-02  1671  			}
2609587c1eeb4f Christoph Hellwig     2017-04-20  1672  			if (unlikely(blkif_req(req)->error)) {
2a842acab109f4 Christoph Hellwig     2017-06-03  1673  				if (blkif_req(req)->error == BLK_STS_NOTSUPP)
2a842acab109f4 Christoph Hellwig     2017-06-03  1674  					blkif_req(req)->error = BLK_STS_OK;
a418090aa88b9b Mike Christie         2016-06-05  1675  				info->feature_fua = 0;
4913efe456c987 Tejun Heo             2010-09-03  1676  				info->feature_flush = 0;
4913efe456c987 Tejun Heo             2010-09-03  1677  				xlvbd_flush(info);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1678  			}
df561f6688fef7 Gustavo A. R. Silva   2020-08-23  1679  			fallthrough;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1680  		case BLKIF_OP_READ:
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1681  		case BLKIF_OP_WRITE:
4c0a9a02397621 Juergen Gross         2021-07-08  1682  			if (unlikely(bret.status != BLKIF_RSP_OKAY))
26379fb9eaab91 Juergen Gross         2021-07-08  1683  				dev_dbg_ratelimited(&info->xbdev->dev,
26379fb9eaab91 Juergen Gross         2021-07-08  1684  					"Bad return from blkdev data request: %x\n", bret.status);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1685  
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1686  			break;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1687  		default:
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1688  			BUG();
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1689  		}
2609587c1eeb4f Christoph Hellwig     2017-04-20  1690  
15f73f5b3e5958 Christoph Hellwig     2020-06-11  1691  		if (likely(!blk_should_fake_timeout(req->q)))
08e0029aa2a4ac Christoph Hellwig     2017-04-20  1692  			blk_mq_complete_request(req);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1693  	}
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1694  
81f35161577236 Bob Liu               2015-11-14  1695  	rinfo->ring.rsp_cons = i;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1696  
81f35161577236 Bob Liu               2015-11-14  1697  	if (i != rinfo->ring.req_prod_pvt) {
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1698  		int more_to_do;
81f35161577236 Bob Liu               2015-11-14  1699  		RING_FINAL_CHECK_FOR_RESPONSES(&rinfo->ring, more_to_do);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1700  		if (more_to_do)
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1701  			goto again;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1702  	} else
81f35161577236 Bob Liu               2015-11-14  1703  		rinfo->ring.sring->rsp_event = i + 1;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1704  
11659569f7202d Bob Liu               2015-11-14  1705  	kick_pending_request_queues_locked(rinfo);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1706  
11659569f7202d Bob Liu               2015-11-14  1707  	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1708  
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1709  	return IRQ_HANDLED;
26379fb9eaab91 Juergen Gross         2021-07-08  1710  
26379fb9eaab91 Juergen Gross         2021-07-08  1711   err:
26379fb9eaab91 Juergen Gross         2021-07-08  1712  	info->connected = BLKIF_STATE_ERROR;
26379fb9eaab91 Juergen Gross         2021-07-08  1713  	pr_alert("%s disabled for further use\n", info->gd->disk_name);
26379fb9eaab91 Juergen Gross         2021-07-08  1714  	return IRQ_HANDLED;
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1715  }
9f27ee59503865 Jeremy Fitzhardinge   2007-07-17  1716  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

--73fGQZLCrFzENemP
Content-Type: application/gzip
Content-Disposition: attachment; filename=".config.gz"
Content-Transfer-Encoding: base64

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
ioQtrQIA

--73fGQZLCrFzENemP
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-leave@lists.01.org

--73fGQZLCrFzENemP--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:31:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:31:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153569.283711 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oih-0007zy-Kq; Fri, 09 Jul 2021 11:30:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153569.283711; Fri, 09 Jul 2021 11:30:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oih-0007zr-HB; Fri, 09 Jul 2021 11:30:59 +0000
Received: by outflank-mailman (input) for mailman id 153569;
 Fri, 09 Jul 2021 11:30:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1oig-0007zl-Bu
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 11:30:58 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ec641b34-1ffd-4df2-af83-9b5f8d1474da;
 Fri, 09 Jul 2021 11:30:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec641b34-1ffd-4df2-af83-9b5f8d1474da
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625830256;
  h=subject:to:references:from:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=psB2xWnBcPcXhQInXe22j9/v+qsHYQplJW/VaNwSB1I=;
  b=D0p17KDWRxY1WcX7UjFYzVW/MsGBU223CkgQ0P9aMVvXehLqOsAEicEW
   rHKQQMkWtFMItTLIyqqh6Q7Hui5Ax1b/U54H39rCAMv8Tq1jloS+Eb/tC
   2n1paap3RdUq117nIm+TGdPdSjHGRMS/JatlKKDvNZ4L5u5minjEpcIBB
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: uOU7JcjEgkc/3tIGHl3pRCEs2s4YvR0T+OUap/NqQkbDEA+GBhifwdgBMk2qqGMJX9BZRyPcjn
 rq6dA4HWHpAJRFpwc9MKjssbOPc1agpsLy4Rhxd359Smrr/E3+gJKk81+Z04oTcVnNbyk3SCoJ
 9azvZtWT4xxh5HrA7tzD37gnEaBlBsy6AsInmwiLYE8K45SgZlP1ShwttbSg02jiGckOsX9NQ8
 BYRjoNCGe02/em9XseHnSn6l2U4WIpa7cSSr8RMkDbZKnQnp3Q0p5zq0rXPET5CHeonCz6vNBB
 fFs=
X-SBRS: 5.1
X-MesageID: 47918126
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ivwUVquIO/uCIuFkLj6iH2Uu7skChoMji2hC6mlwRA09TyXGra
 6TdaUguiMc1gx8ZJhBo7C90dq7MAzhHPlOkPUs1NaZLXTbUQ6TTb2KgrGSuwEIdxeOkNK1kJ
 0QCZSWa+eAfWSS7/yKmTVQeuxIqLLsndHK9IWuvUuFDzsaDJ2Ihz0JezpzeXcGITWua6BJcK
 Z0qvA33AZJLh8sH7qG7zQ+LqX+juyOsKijTQ8NBhYh5gXLpTS06ITiGxzd+hsFSTtAzZor7G
 CAymXCl+qemsD+7iWZ+37Y7pxQltek4txfBPaUgsxQDjn3kA6naKloRrXHljEop+OE7kosjb
 D30lsdFvU2z0mUUnC+oBPr1QWl+i0p8WXexViRhmamidDlRRohYvAxxb5xQ1/80Q4Nrdt82K
 VE0yayrJxMFy7Nmyz7+pzhSwxqrEypunAv+NRjzkC3abFuKoO5kLZvuX+8SPw7bWbHAcEcYa
 dT5fjnlbVrmQjwVQGfgoEHq+bcLUjaHX+9MwA/U4Kuon5rdUtCvj8lLfok7z49HaIGOux5Dt
 v/Q9NVfZF1P4QrhPFGda08qfXeMB26ffuLChPKHWja
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47918126"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=F6RHk4J3T+cj+bsA1yOkSW7qb2jm1nfgyfRRh1kmQZ/iFppX/cgCHshbWHMj73/cJoD7Emn3LOH+CVRAmVFTVepeGSwLyTssVbAoLM+b+EC8dnWf2JP/A/m4HJCDoHSVfXKZobC32akFIAgCTbspU4kdHA18zItLXdilbE7zEbQ6tpIVQro07GAL94/JrM6aYBRnG75yAKrhRqENuIQV5CmRT6IfhpH+m4t2+m9IkE1Gw3BiueHOvOLZMyS7HbK7oyM/tBVnV59bMYQOEjT5QG4vWIaNlN90gvJO01GhJ7D3qbOy40UWXtOiv4nlYFE8UrSx/xg7WNYXOdrxKPw9aA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=psB2xWnBcPcXhQInXe22j9/v+qsHYQplJW/VaNwSB1I=;
 b=KiBlTIWCh0y8/n3yXM/btuDxjedWznjmoYC0aI535NYF/zAyJxHYxBoBiJGy72cZpNUAj8XYNr3ejez8AtMjyy3JVdWcbiuKb80qZwy98HXncDyPiOxg5jvdSkwjndw4MUiY5cYVMHc2HzJVvJfbTg1cTyTdvZWh67uxJzrELMNYNmPJM8wysnNeiLLCGkx4eg0bU4WRiWZGxqACoINztcu5vo83HlZ237L3hCOv5AqKvKP0tCdfHmO5CoZJgPipK6Q4x/Eik9BA9oluweBAN+PaslyafKSJtaDQqHpuPJFhGmdA3TmujwRtNhf1CyG4Vli/a+ZCsXUqv42DTOSZfg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=psB2xWnBcPcXhQInXe22j9/v+qsHYQplJW/VaNwSB1I=;
 b=pnUBRubCZlT3vI7jTu0VNH2bOpMOfMwltDt9SE9kzDwPu4zOEdFbJ+vltuILIooVBcTCHsmYm09UhR+nyPM3DBcLuNQfXgyGDUrtcwW03nHPvthEZHZPWBeEdkbR1cP5tbdBxJgYvQkxSCz+vYEdidWGDgW2F6vOKzO+u56G6rU=
Subject: Re: fix vbd rd_sects stat
To: Richard Kojedzinszky <richard@kojedz.in>, <xen-devel@lists.xenproject.org>
References: <585c34fd96c6e22847333d9d18843c0f@kojedz.in>
 <522642c6-6ad9-28d4-469e-53583441287e@citrix.com>
 <61970531-A990-44B4-8614-320141E7C2D7@kojedz.in>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <4cb7a1b3-00ce-5866-12b5-a7df8f7a878a@citrix.com>
Date: Fri, 9 Jul 2021 12:30:33 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <61970531-A990-44B4-8614-320141E7C2D7@kojedz.in>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0501.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:13b::8) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2a0f2455-d830-42a5-37a8-08d942ccfaac
X-MS-TrafficTypeDiagnostic: BYAPR03MB4872:
X-Microsoft-Antispam-PRVS: <BYAPR03MB48721B80861957DBABEE26C4BA189@BYAPR03MB4872.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: djCOa8OneUeHRtVSnSgyijikac5K1/43yBjnuAqub6BYhakv1XufoNq6c+mooXoURa3xg7whBMwHkcaRuiuETVAd6k2I2pJ/mBSVu4cb/YZpOAO1p80Klozhg6Sz9x59MfS8rn1OS4BZGy0sqbSwNUWrelhrKPheZIGAzFof73QUPAR221Yai/jMA+aohl4G5BktYnT45ZU0xHiaYAiswpdqbHb0ywoMGmx7gmeIYbTgd+Urmm83fIaoV52tgHHgvrTVRF+AXOVNAB19DWpT/Zw3Q22DvXHFQzC46NlKiE/7nFOiZRutqCM9P5wO9ZTV/3yLhglPUcg7eyY/gZlvMNkZRWYTVorG8d9BnTfU/gCJvIjaayOJdAK2TYQJdoNHClsAkncJf9k82ifFfAHfZ3TChyWj/2fv6L9EAVAyUNVnQdWMnj9iDCcprxNc1t09epmTOM9J8fD8jWlEhLehm33ak6rG4eSLcYR6N4qqF8f+Kw6PDTvH3i8U0o0nPUSwMJDkeDdP6XgWBRckDbb8KRskb+MVj1RSYgjK4rFNHB7ThJbHHBhtLTEuMM9VBz/iBh6bx2DX9i8p//wkxJvV7lw5idK3pfBwKrwK7X8eZ5u1PWAGrarGzT9r7/inX1Hm/n1K2Pbi/jIEOv1BRUZ2qNSOh+tUHt3A91A47tOKj1tp22v7i8VHYtbsf20jqEN1SRDNV4xHZPGerXiJjY9mnuKFOw82H7SiCYTdCeVVjPYFYOQJlo70TBpbxPgK0KF1cCbxR9ph7yixo+Oq9GzjRzt8zdPQ5ycNVcLdb8O7ZHi7zcKPLS3Ye3iJ61S1J608
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(396003)(366004)(376002)(136003)(956004)(38100700002)(8676002)(6666004)(66476007)(31696002)(53546011)(8936002)(2906002)(16576012)(31686004)(26005)(66946007)(316002)(36756003)(2616005)(6486002)(5660300002)(966005)(66556008)(86362001)(186003)(478600001)(558084003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?Rpl9aGdiXW1q8rRNWE+Mjt7rznN/NgZvQ65jhxi?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 2a0f2455-d830-42a5-37a8-08d942ccfaac
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 11:30:39.7826
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: FWhuS+uePNE4SvMiaZOFy1+nQIj+lX51dA1vJ2Rn0R/r4TU4QCjnC8XyxEjSI0tbz7wsfDRqcqPVlziIbR6cZ0Vh8vCtoz2dxrbV7/LXLQA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4872
X-OriginatorOrg: citrix.com

On 09/07/2021 10:32, Richard Kojedzinszky wrote:
> Then please add signed-by headers. :)

Ok.   I have fixed up and committed the patch.

https://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=89d57f291e37b4769ab26db919eba46548f2e13e

This will want queueing for backporting

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:33:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:33:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153575.283726 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1okr-0000GO-3o; Fri, 09 Jul 2021 11:33:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153575.283726; Fri, 09 Jul 2021 11:33:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1okq-0000G8-Vb; Fri, 09 Jul 2021 11:33:12 +0000
Received: by outflank-mailman (input) for mailman id 153575;
 Fri, 09 Jul 2021 11:33:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1okq-0000G2-3I
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 11:33:12 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 70529bd5-e0a9-11eb-85e2-12813bfff9fa;
 Fri, 09 Jul 2021 11:33:11 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 70529bd5-e0a9-11eb-85e2-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625830390;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=9kK0lePgWZ7iWYenYpILaIvYBKVL7vzm5fHWixv51d0=;
  b=a8KAGV1PFvXdOtNqICQoCsF/+bZFkF7ZJmHSIV6bj0YIA9taS5fmK+PH
   piS2jTCpxFADCZrpFxZWXBYjUw0Etw7StwyuTudjoDHLqssMuH9Ger1ND
   PqE04I/tsJdN8CF+MctIZRrH8jOuNnr153M03hA1rEey/AIEA0WbUiFgr
   Q=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: VwgHp0l8+UBPQFz7BQZ+/ZhEWgcwn3vqsPS3HF73sl6SAOuVMmmJt1+rKuBUmX4VHHh11tHnI0
 LsMqjHerzs1CCFAi0RKjO8kzfvLhduZOqtFXwvhDstGtHqM0jwGNE3sGSO+Uu285QaJsgJMrQI
 SUyodVydSxn9hhnyi6lbg2odvryX1mLFM5bzBnupuj3umReGA4HshvQE/7ZZkd+JPk+2hH8f8v
 PerDkREFYxdEKThaQCdhrlbMPpxkYfhWpkR2ahZso20IJd4FP+WrMpYlUpDxC6NK/s2X025XVu
 LdU=
X-SBRS: 5.1
X-MesageID: 48302201
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:X8Ip/qs5oAPYy1UvHr4KVDZP7skCgYMji2hC6mlwRA09TyXGra
 6TdaUguiMc1gx8ZJhBo7C90KnpewK6yXcH2/huAV7EZniYhILIFvAf0WKG+Vzd8kLFh5VgPM
 tbAtFD4ZjLfCVHZKXBkXqF+rQbsaG6GcmT7I+0pRodLnAJGtRdBkVCe2Cm+yVNNXl77PECZf
 +hD6R81l6dkDgsH76G7i5vZZmzmzSHruOrXTc2QzocrCWehzKh77D3VzCewxclSjtKhZMv63
 LMnQDV7riq96jT8G6T60bjq7Bt3PfxwNpKA8KBzuATNzXXkw6tIKBsQaeLsjwZqPymrHwqjN
 7PiRE9ONkb0QKfQkiF5T/WnyXw2jcn7HHvjXWCh2H4nMD/TDUmT+JcmINwaHLimgkdleA59J
 gO83OStpJRAx+Ftj/6/cL0WxZjkVfxiWY+kNQUk2dUXeIlGf9sRLQkjQZo+ao7bWbHANhNKp
 goMCic3ocWTbqiVQGagoE1q+bcGEjad3y9Mzo/Us/86UkcoJk29TpA+CUlpAZ2yHsKcegN2w
 31CNUdqFhwdL5hUUtcPpZKfSLlMB2BffrzWFjiaGgPUpt3Y07wlw==
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="48302201"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gy5kb5wDjoB506Z+NzUJ2QDTvYVMFfKbmWmqSQMMMtWQqNxpf/CdNmI0O2bDXQkrE1uRRVVv49ZDZole5PhL/zzsfxPotCRehD/5Wy/nwediK7Y6ZXWqD/Hk3JNC2MB5PYRANnyTzFz3Fed1f6Ps7KV37w8Mw4tK58smLyaO0KqhZvMtlZSnzPClSJZahODOjgW37c3YeDApjAjSD56ovfasDTWEH+0Ot63bikmiWEyl0L5DgowW3LJhUNJrYyJxtXx29hVw+iC9mnSKvl+kSKlVH6RzMwshatsAE2IrZobmspv0xLY0owTb7EcKgLHNoEmqJbsvc2GChyD1hzHwgQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9kK0lePgWZ7iWYenYpILaIvYBKVL7vzm5fHWixv51d0=;
 b=QNKeJ9fjOkZvhpF1AezzwpGrsGMfQsvHhjfbHmpELWV+b/MivNwunnoLPXfY4UHnVlBKZh5J/8cNWnLMlJne8pMEtvUApPAw1qN+YKKX2d8lr3C99gVoIXj/iemo7fKkvNyvaSRUDhj29olg8XPQFPbasu/nMaBxZT1tAnid8fFN9w0Fq/08OHPBXyMDBBoTL+B1lmLBaLWFAU7iHilSPpqQBHtsaQN97YSqryJQwpIj48FRTYXpR0WQVFarqFvei+QA5GpXPpsMqHRwEhHZjU48vGYEG2CxhqTykEOCoe0b4FDBfahaswwfMI+N0jddRsOcVd0fagAQAx9TQ/MZag==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9kK0lePgWZ7iWYenYpILaIvYBKVL7vzm5fHWixv51d0=;
 b=pduWlwkcTpQT5sj+kotAPqqtOGxF8+N2sOKf2ya1oKhe4lvZMDc/knybOzd7smQmMRyac5Rqkjmv0K8LmIU/ynPOD8Vyg08+uMpkHgAluEdjGyz4LZkluG5dY7sAYOsrMGTHGHPOEWJAYTKNLWMyttnt4yxa2CZemPYt9iybikI=
Subject: Re: [PATCH v2] tools: ipxe: update for fixing build with GCC11
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210616131435.27770-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <90c83829-7c4e-49b2-cc94-7791b38d0c65@citrix.com>
Date: Fri, 9 Jul 2021 12:32:36 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210616131435.27770-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0329.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a4::29) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4d4a319b-e9db-4a3b-ed6f-08d942cd443a
X-MS-TrafficTypeDiagnostic: BYAPR03MB4872:
X-Microsoft-Antispam-PRVS: <BYAPR03MB48724B581BA763483833CB7ABA189@BYAPR03MB4872.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:336;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: sCiqpAzWW0czI1zsRISkBjypuBb4AP/BiacoD2cezvfU9POrY3TD/x37TOMgC0NUADNK5GQciWNUD4u6pnnLGPI6LorhfBTf8PsW8ikLA+LlJQihzmRFI85gdGbM+8gS8tDC8jWRPUB79AcNoisusOxIIRg4wSEvLTcjNAoF+B71USuDmGl0ADXI9QuTnY21PWEopOyPVamozLtPwjTqvKNV9E+vW7w4gzXTKAKGJj3G+m1H52vIO0C/29LDLbwOSi2U6Ku66wxTk5w+wXir6O/GJJ14hUtnysuSO6fqBJ1Z7sPRrQHLNYdK/F4suiZM/0nlXU2H3Ck7ZymMlSkM9efmR+IvORy4FNhBpVZQJN8uwZlVsCVgvWOq95qVfcbuPCK7KoIvkfjhHTWPNSbmOlNJ3KnbXMf8ZLOkTavk7g+vrlm2T+XJlc4UrN75gGg4ByenSlmNh3dP1w0y9+EstSxs3vUdCIMyctBuMTrjHi+k3KqgkiiPgBRq63OcjZ0AVy+lZ+gZ9p8nr6HvXRdrKuoGPjo46rFhHbhl1LspL4znp3ES0phzvamtLqkeXPFpnquNcuRGKSKVIG/HPILToyMRyYC6CStYV39WePAxxt8+3N81q2dC9YmIA/N2eEr+S4k4oe43mo+WuWC8+l0s1xNKPLiwPavnCQmVjIcC1AXBEKFF5VsC6FkaeWnWa/evfpUvBUATh+zIsQP9HT8YDwXc4PqKbVj+GAqeHoP7sjg=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(366004)(396003)(346002)(39860400002)(36756003)(6486002)(2616005)(186003)(478600001)(4326008)(5660300002)(66556008)(86362001)(4744005)(31696002)(53546011)(8936002)(66476007)(8676002)(6666004)(38100700002)(956004)(54906003)(66946007)(26005)(316002)(16576012)(2906002)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?8+1/Opat9uqwfPUHO3BZfm3ZAfByebMB/Up6AFg?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 4d4a319b-e9db-4a3b-ed6f-08d942cd443a
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 11:32:43.2875
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NOo+n1TwnvDpmqHR6LJ3db3lwqQTkfys9Fga8zXGR7YLxcS025ngBe0P3sMBf6nFR/hzUmh8fUNDbZlREdkRRB+tfR1gbgJHDJLkuEa58mE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4872
X-OriginatorOrg: citrix.com

On 16/06/2021 14:14, Olaf Hering wrote:
> Use a snapshot which includes commit
> f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
> memory output constraints for big-integer inline assembly"),
> which fixes build with gcc11.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> and committed, along
with what is hopefully the right rune to do the xenbits tarball


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:38:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:38:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153584.283744 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1opS-00013z-OC; Fri, 09 Jul 2021 11:37:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153584.283744; Fri, 09 Jul 2021 11:37:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1opS-00013s-LN; Fri, 09 Jul 2021 11:37:58 +0000
Received: by outflank-mailman (input) for mailman id 153584;
 Fri, 09 Jul 2021 11:37:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=WfOa=MB=kojedz.in=richard@srs-us1.protection.inumbo.net>)
 id 1m1opR-00013m-5O
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 11:37:57 +0000
Received: from pi.kojedz.in (unknown [2a01:be00:10:201:0:80:0:1])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 390c37d2-c40f-4c5c-a2a2-854c795d10c7;
 Fri, 09 Jul 2021 11:37:56 +0000 (UTC)
Received: from webmail.srv.kojedz.in (pi.kojedz.in
 [IPv6:2a01:be00:10:201:0:80:0:1])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
 (No client certificate requested)
 (Authenticated sender: richard@kojedz.in)
 by pi.kojedz.in (Postfix) with ESMTPSA id 48674C82B;
 Fri,  9 Jul 2021 13:37:54 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 390c37d2-c40f-4c5c-a2a2-854c795d10c7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kojedz.in; s=mail;
	t=1625830674; bh=9TDpvRUgQHV5MexC+f/YDj+szEufaxX9H8TuNjhJiEQ=;
	h=Date:From:To:Cc:Subject:In-Reply-To:References;
	b=gd1WDA1KJho1YBoeqw/m++cdtrkpgjOmTrbNOhn0LGJe1Oa38ynnSf4M+dnbwh5qS
	 UVBWDlaneRbbTGPNVy2VM6QTkAET9kALwTZx1A83qr/qWPJWEDfZhpJT25RnKRGRCs
	 r53+JIpdBbK+HyGOXGcylJDVd0nXIxDgBx7K1FbfeEFMt/lmnp958ObxrtF6W/W9fY
	 3rGn/PmIHOpC1hwQIqZkAX0cpU5UJRnu3yERuXUnhZVvpXMWHGgQ2ICCLRPSMCGRUw
	 qtrq/RMGNhstqypAXz+3SNihwxx/HXXFmZQAcX7TP7zHvnpdaq2PW/j1Hb0a/6wPRf
	 vfK0yzpS7mAyMFANsUpwcqNSlyWsNCd2jdzsemNzJkOJFepOorNqRqy7yvZBTCOyQB
	 kSMJPUhaIPv9GXKuKwBwqO84G36hoquP8PCEXW+T2gcQ5UO2t3wf2E7iT3L0fsmi3/
	 1zanrxO25NssppzGwyW9EmciQabEScIrwDXphqlYRtw/2AqhEy10wj9PqeYng59Epo
	 JEnp9drj2pmU0yYZz/6vFXGVBuw8YNgga3QWnY3HNzkMUS9ubm8XLXtcyK5gv+wYNo
	 pUTrzDGT2TmMxKeIYCI+vt3hcTx+xA0ZQRDRqDrR7miun8f8KWkUgagZIgyD7Lg8/P
	 xoyV7b9B3VFufsBhMmlrO/tQ=
MIME-Version: 1.0
Date: Fri, 09 Jul 2021 13:37:54 +0200
From: Richard Kojedzinszky <richard@kojedz.in>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: xen-devel@lists.xenproject.org
Subject: Re: fix vbd rd_sects stat
In-Reply-To: <4cb7a1b3-00ce-5866-12b5-a7df8f7a878a@citrix.com>
References: <585c34fd96c6e22847333d9d18843c0f@kojedz.in>
 <522642c6-6ad9-28d4-469e-53583441287e@citrix.com>
 <61970531-A990-44B4-8614-320141E7C2D7@kojedz.in>
 <4cb7a1b3-00ce-5866-12b5-a7df8f7a878a@citrix.com>
User-Agent: Roundcube Webmail/1.4.11
Message-ID: <5fa286cab6fa4612547862040729a9ab@kojedz.in>
X-Sender: richard@kojedz.in
Content-Type: text/plain; charset=UTF-8;
 format=flowed
Content-Transfer-Encoding: 8bit

Dear Andrew,

Many thanks.

Meanwhile I would like to promote our xenstat-exporter, which we use for 
monitoring our vps instances.

https://github.com/euronetzrt/xenstat-exporter

We've spotted the bug during browsing the metrics.

Regards,
Richard

2021-07-09 13:30 időpontban Andrew Cooper ezt írta:
> On 09/07/2021 10:32, Richard Kojedzinszky wrote:
>> Then please add signed-by headers. :)
> 
> Ok.   I have fixed up and committed the patch.
> 
> https://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=89d57f291e37b4769ab26db919eba46548f2e13e
> 
> This will want queueing for backporting
> 
> ~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:38:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:38:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153594.283759 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oq2-0001dL-3Y; Fri, 09 Jul 2021 11:38:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153594.283759; Fri, 09 Jul 2021 11:38:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1oq2-0001dE-05; Fri, 09 Jul 2021 11:38:34 +0000
Received: by outflank-mailman (input) for mailman id 153594;
 Fri, 09 Jul 2021 11:38:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+p3w=MB=arm.com=andre.przywara@srs-us1.protection.inumbo.net>)
 id 1m1oq1-0001d8-3z
 for xen-devel@lists.xen.org; Fri, 09 Jul 2021 11:38:33 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id a323de3f-4b29-422a-9179-0cd32b50cc1d;
 Fri, 09 Jul 2021 11:38:30 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ECE34ED1;
 Fri,  9 Jul 2021 04:38:29 -0700 (PDT)
Received: from slackpad.fritz.box (unknown [172.31.20.19])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 577B53F5A1;
 Fri,  9 Jul 2021 04:38:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a323de3f-4b29-422a-9179-0cd32b50cc1d
Date: Fri, 9 Jul 2021 12:37:49 +0100
From: Andre Przywara <andre.przywara@arm.com>
To: Wei Chen <Wei.Chen@arm.com>, Alexandru Elisei <alexandru.elisei@arm.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>, "xen-devel@lists.xen.org"
 <xen-devel@lists.xen.org>, "will@kernel.org" <will@kernel.org>,
 "jean-philippe@linaro.org" <jean-philippe@linaro.org>, Julien Grall
 <julien@xen.org>, Marc Zyngier <maz@kernel.org>,
 "julien.thierry.kdev@gmail.com" <julien.thierry.kdev@gmail.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Oleksandr Tyshchenko
 <Oleksandr_Tyshchenko@epam.com>
Subject: Re: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
Message-ID: <20210709123749.1aaa5bfe@slackpad.fritz.box>
In-Reply-To: <DB9PR08MB6857B375207376D8320AFBA89E309@DB9PR08MB6857.eurprd08.prod.outlook.com>
References: <DB9PR08MB6857B375207376D8320AFBA89E309@DB9PR08MB6857.eurprd08.prod.outlook.com>
Organization: Arm Ltd.
X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.31; x86_64-slackware-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

On Tue, 15 Jun 2021 07:12:08 +0100
Wei Chen <Wei.Chen@arm.com> wrote:

Hi Wei,

> I have some thoughts of using kvmtool Virtio implementation
> for Xen. I copied my markdown file to this email. If you have
> time, could you please help me review it?
> 
> Any feedback is welcome!
> 
> # Some thoughts on using kvmtool Virtio for Xen
> ## Background
> 
> Xen community is working on adding VIRTIO capability to Xen. And we're working
> on VIRTIO backend of Xen. But except QEMU can support virtio-net for x86-xen,
> there is not any VIRTIO backend can support Xen. Because of the community's
> strong voice of Out-of-QEMU, we want to find a light weight VIRTIO backend to
> support Xen.
> 
> We have an idea of utilizing the virtio implementaton of kvmtool for Xen. And
> We know there was some agreement that kvmtool won't try to be a full QEMU
> alternative. So we have written two proposals in following content for
> communities to discuss in public:
> 
> ## Proposals
> ### 1. Introduce a new "dm-only" command
> 1. Introduce a new "dm-only" command to provide a pure device model mode. In
>    this mode, kvmtool only handles IO request. VM creation and initialization
>    will be bypassed.
> 
>     * We will rework the interface between the virtio code and the rest of
>     kvmtool, to use just the minimal set of information. At the end, there
>     would be MMIO accesses and shared memory that control the device model,
>     so that could be abstracted to do away with any KVM specifics at all. If
>     this is workable, we will send the first set of patches to introduce this
>     interface, and adapt the existing kvmtool to it. Then later we will can
>     add Xen support on top of it.
> 
>     About Xen support, we will detect the presence of Xen libraries, also
>     allow people to ignore them, as kvmtoll do with optional features like
>     libz or libaio.
> 
>     Idealy, we want to move all code replying on Xen libraries to a set of
>     new files. In this case, thes files can only be compiled when Xen
>     libraries are detected. But if we can't decouple this code completely,
>     we may introduce a bit of #ifdefs to protect this code.
> 
>     If kvm or other VMM do not need "dm-only" mode. Or "dm-only" can not
>     work without Xen libraries. We will make "dm-only" command depends on
>     the presence of Xen libraries.
> 
>     So a normal compile (without the Xen libraries installed) would create
>     a binary as close as possible to the current code, and only the people
>     who having Xen libraries installed would ever generate a "dm-only"
>     capable kvmtool.

This is not for me to decide, but just to let you know that this
approach might not be very popular with kvmtool people, as kvmtool's
design goal is be "lean and mean". So slapping a lot of code on the
side, not helping with the actual KVM functionality, does not sound too
tempting.

> 
> ### 2. Abstract kvmtool virtio implementation as a library
> 1. Add a kvmtool Makefile target to generate a virtio library. In this
>    scenario, not just Xen, but any project else want to provide a
>    userspace virtio backend service can link to this virtio libraris.
>    These users would benefit from the VIRTIO implementation of kvmtool
>    and will participate in improvements, upgrades, and maintenance of
>    the VIRTIO libraries.
> 
>     * In this case, Xen part code will not upstream to kvmtool repo,
>       it would then be natural parts of the xen repo, in xen/tools or
>       maintained in other repo.
> 
>       We will have a completely separate VIRTIO backend for Xen, just
>       linking to kvmtool's VIRTIO library.
> 
>     * The main changes of kvmtool would be:
>         1. Still need to rework the interface between the virtio code
>            and the rest of kvmtool, to abstract the whole virtio
>            implementation into a library
>         2. Modify current build system to add a new virtio library target.

As this has at least the prospect of being cleaner, this approach
sounds better to me.

> 
> ## Reworking the interface is the common work for above proposals
> **In kvmtool, one virtual device can be separated into three layers:**
> 
> - A device type layer to provide an abstract
>     - Provide interface to collect and store device configuration.
>         Using block device as an example, kvmtool is using disk_image to
>         -  collect and store disk parameters like:
>             -  backend image format: raw, qcow or block device
>             -  backend block device or file image path
>             -  Readonly, direct and etc
>     - Provide operations to interact with real backend devices or services:
>         - provide backend device operations:
>             - block device operations
>             - raw image operations
>             - qcow image operations

So I was wondering if the device backend would come as part of the
library package? At the end of the day this mostly POSIX code to access
some files.
Or did you plan to terminate the library interface at the block access
level (read/write device x sector y), and have the actual storage
backends (raw, qcow, block device, you-name-it) in the Xen parts? What
would Xen need here, on top of what kvmtool already offers?

And that brings up the question of portability: At the moment kvmtool is
Linux only (naturally), but IIUC Xen Dom0s also run in *BSD,
potentially even other OSes? That might not be a showstopper, but the
kvmtool code might contain some Linux-isms (libaio?), which would need
to be abstracted first.


I haven't looked at the details down the line, but I guess we should
agree on the general feasibility first.

Cheers,
Andre

> - Hypervisor interfaces
>     - Guest memory mapping and unmapping interfaces
>     - Virtual device register interface
>         - MMIO/PIO space register
>         - IRQ register
>     - Virtual IRQ inject interface
>     - Hypervisor eventfd interface
> - An implementation layer to handle guest IO request.
>     - Kvmtool provides virtual devices for guest. Some virtual devices two
>       kinds of implementations:
>         - VIRTIO implementation
>         - Real hardware emulation
> 
> For example, kvmtool console has virtio console and 8250 serial two kinds
> of implementations. These implementation depends on device type parameters
> to create devices, and depends on device type ops to forward data from/to
> real device. And the implementation will invoke hypervisor interfaces to
> map/unmap resources and notify guest.
> 
> In the current kvmtool code, the boundaries between these three layers are
> relatively clear, but there are a few pieces of code that are somewhat
> interleaved, for example:
> - In virtio_blk__init(...) function, the code will use disk_image directly.
>   This data is kvmtool specified. If we want to make VIRTIO implementation
>   become hypervisor agnostic. Such kind of code should be moved to other
>   place. Or we just keep code from virtio_blk__init_one(...) in virtio block
>   implementation, but keep virtio_blk__init(...) in kvmtool specified part
>   code.
> 
> However, in the current VIRTIO device creation and data handling process,
> the device type and hypervisor API used are both exclusive to kvmtool and
> KVM. If we want to use current VIRTIO implementation for other device
> models and hypervisors, it is unlikely to work properly.
> 
> So, the major work of reworking interface is decoupling VIRTIO implementation
> from kvmtool and KVM.
> 
> **Introduce some intermediate data structures to do decouple:**
> 1. Introduce intermedidate type data structures like `virtio_disk_type`,
>    `virtio_net_type`, `virtio_console_type` and etc. These data structures
>    will be the standard device type interfaces between virtio device
>    implementation and hypervisor.  Using virtio_disk_type as an example:
>     ~~~~
>     struct virtio_disk_type {
>         /*
>          * Essential configuration for virtio block device can be got from
>          * kvmtool disk_image. Other hypervisor device model also can use
>          * this data structure to pass necessary parameters for creating
>          * a virtio block device.
>          */
>         struct virtio_blk_cfg vblk_cfg;
>         /*
>          * Virtio block device MMIO address and IRQ line. These two members
>          * are optional. If hypervisor provides allocate_mmio_space and
>          * allocate_irq_line capability and device model doesn't set these
>          * two fields, virtio block implementation will use hypervisor APIs
>          * to allocate MMIO address and IRQ line. If these two fields are
>          * configured, virtio block implementation will use them.
>          */
>         paddr_t addr;
>         uint32_t irq;
>         /*
>          * In kvmtool, this ops will connect to disk_image APIs. Other
>          * hypervisor device model should provide similar APIs for this
>          * ops to interact with real backend device.
>          */
>         struct disk_type_ops {
>             .read
>             .write
>             .flush
>             .wait
>             ...
>         } ops;
>     };
>     ~~~~
> 
> 2. Introduce a intermediate hypervisor data structure. This data structure
>    provides a set of standard hypervisor API interfaces. In virtio
>    implementation, the KVM specified APIs, like kvm_register_mmio, will not
>    be invoked directly. The virtio implementation will use these interfaces
>    to access hypervisor specified APIs. for example `struct vmm_impl`:
>     ~~~~
>     struct vmm_impl {
>         /*
>          * Pointer that link to real hypervisor handle like `struct kvm *kvm`.
>          * This pointer will be passed to the vmm ops;
>          */
>         void *vmm;
>         allocate_irq_line_fn_t(void* vmm, ...);
>         allocate_mmio_space_fn_t(void* vmm, ...);
>         register_mmio_fn_t(void* vmm, ...);
>         map_guest_page_fn_t(void* vmm, ...);
>         unmap_guest_page_fn_t(void* vmm, ...);
>         virtual_irq_inject_fn_t(void* vmm, ...);
>     };
>     ~~~~
> 
> 3. After decoupled with kvmtool, any hypervisor can use standard `vmm_impl`
>    and `virtio_xxxx_type` interfaces to invoke standard virtio implementation
>    interfaces to create virtio devices.
>     ~~~~
>     /* Prepare VMM interface */
>     struct vmm_impl *vmm = ...;
>     vmm->register_mmio_fn_t = kvm__register_mmio;
>     /* kvm__map_guset_page is a wrapper guest_flat_to_host */
>     vmm->map_guest_page_fn_t = kvm__map_guset_page;
>     ...
> 
>     /* Prepare virtio_disk_type */
>     struct virtio_disk_type *vdisk_type = ...;
>     vdisk_type->vblk_cfg.capacity = disk_image->size / SECTOR_SIZE;
>     ...
>     vdisk_type->ops->read = disk_image__read;
>     vdisk_type->ops->write = disk_image__write;
>     ...
> 
>     /* Invoke VIRTIO implementation API to create a virtio block device */
>     virtio_blk__init_one(vmm, vdisk_type);
>     ~~~~
> 
> VIRTIO block device simple flow before reworking interface:
> https://drive.google.com/file/d/1k0Grd4RSuCmhKUPktHj9FRamEYrPCFkX/view?usp=sharing
> ![image](https://drive.google.com/uc?export=view&id=1k0Grd4RSuCmhKUPktHj9FRamEYrPCFkX)
> 
> VIRTIO block device simple flow after reworking interface:
> https://drive.google.com/file/d/1rMXRvulwlRO39juWf08Wgk3G1NZtG2nL/view?usp=sharing
> ![image](https://drive.google.com/uc?export=view&id=1rMXRvulwlRO39juWf08Wgk3G1NZtG2nL)
> 
> 
> Thanks,
> Wei Chen



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 11:48:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 11:48:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153604.283773 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ozz-0003EM-7f; Fri, 09 Jul 2021 11:48:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153604.283773; Fri, 09 Jul 2021 11:48:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1ozz-0003EF-3u; Fri, 09 Jul 2021 11:48:51 +0000
Received: by outflank-mailman (input) for mailman id 153604;
 Fri, 09 Jul 2021 11:48:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1ozy-0003E9-9I
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 11:48:50 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e3070d9e-2b16-450b-8fe4-b3038855205b;
 Fri, 09 Jul 2021 11:48:49 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e3070d9e-2b16-450b-8fe4-b3038855205b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625831329;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=KRG1AmYNIZ9Y43c9MVBYSUyKQZgg0eQeAARAwW5mT/o=;
  b=a9qi7/+rc1XUXeacT2MKjZLH8X91Ek7QHq0fitCEaSXHyonWkHRTlN+w
   B//baqJ0sbriuq3ovb0nlhb5xxQb7F+53IWFOzETYypQ5On4ey79eUlW4
   mkYVSQ1WLwFmb6wl57v1+HDIEZUfdmfdr8Q7G/iRlQuhP1TInTKIl1mzO
   g=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: QsvYD26k3cKvHFI9OeQ1wULE3VkMedTnCtHXU/Kd7hklyjSDzo3y9wnoP4pXHyvqPf0ozkO1UR
 ppVjGs1OBuMYg9wOlYHEaY/AOI2BA8U92EQug0tInBunRwESh1KoCkZ4haKNZvACTeeW3bxwY1
 0ACf0OuGNWjm/bAh2Z2t0NsW2IUWCdYdIWBEuqK7rOci6gRQf7fT76pSorsjbCTmBQS3aPeYf3
 tS74TkbZyZUO3sQWFwZDMaI954u/0FIEtekxFG21HobLkCHEn1uUnGWwX/BaaPJi2FYqAQJ0cA
 8kc=
X-SBRS: 5.1
X-MesageID: 49565674
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:3D8X9qmKzUrY6fvKqe34A8DNVrHpDfLh3DAbv31ZSRFFG/Fw8P
 re5MjztCWE8wr5PUtKpTnuAtjlfZqxz+8W3WBzB9aftWvdyQ2VxehZhOOJ/9SKIVyYygcy79
 YET4FOTPf5CUFzjcj8pCm0euxQueVviJrJuc7ui05EdyZFUOVBwm5CZTpzaXcGJzVuNN4DOL
 C93+pqgAflWVl/VKqG7nFuZYT+T9anrv/bXSI=
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="49565674"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Gv9tgxaMvQmmok6jlwUfIDOVb/I4P5+sxhJMe7nqNaptqLz1+TkCiRprnvPqbWHitu3GMQYaUyRdc7WjJX7H/ScplcihSw8VKXKagwEvZov6WMhYd2lyJV1msV4zLlNBE3R6aNQoZAO41VobG3hdN7KRbaLvGKP1q4Sjwr/lt6+Tql05y9ob9IqiL+XuwWgWZRHAXzPBUqYv6vlKplXgtyVQ4dupndzJr74eUBdD+dGlB72HcMurvDdVxyvDocauEPvivtRGeKSJMrnooTCm1yN3kZr5g7CxwPd44i/+2MsRuGDDVbAf6/SS/npL2i7ABU0d/7GGzZrFshV8ImwDyg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KRG1AmYNIZ9Y43c9MVBYSUyKQZgg0eQeAARAwW5mT/o=;
 b=BjvYb2Lg39m+8qEdQoSWlXh2+fCarBcmRB0K5oOAyD2kStDTL+djtKOMKrTHCF0I/1/YZV5FhYHcCcAlomeFhUjdfYS74is+s5KqkHb0NTcqt8qHG73LTAEcYx/2BXA1cDmmecYHYzCimLkktm2hFdgugbKWu3D0sZXzQk2wNcOFajmroMe86aMgKn7ii8GWK8qQch+iiJwjDYnuiQ9JmtoU2Wxi0C0GlieQ2jnRNuuv5oiVvbbDgfDzequz0tcroguptbDSfue33gsB7u7uIFfG/ldar9/oVlOb82oRxbYWvi8Tt2p9v7M0pufOwZwA4Asf7V2uxh0mQFtVVKpV5Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KRG1AmYNIZ9Y43c9MVBYSUyKQZgg0eQeAARAwW5mT/o=;
 b=pMSCDAQ1r4syFNpdSUVCUQLdmlL7iS5FHwg6Sl1skf5aXBZNw7he4iStrttyHgH09VQSgzwnJdCcnVWf6TFN2KqvJV8B65RAoxmbOnHInC00Y5ZJBCxHQT7I/xhRZYrcWm9KCRTfgIGGu2W1MgYziPtUNotLL7OjGd7uGmA7uUs=
Subject: Re: [PATCH v1] automation: avoid globbering the docker run args
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
References: <20210708145650.8961-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <96748a07-e262-f028-4475-a827845f8beb@citrix.com>
Date: Fri, 9 Jul 2021 12:48:38 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708145650.8961-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0386.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18f::13) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: dd3f8d6e-3de2-4cd6-6eca-08d942cf817f
X-MS-TrafficTypeDiagnostic: BYAPR03MB3669:
X-Microsoft-Antispam-PRVS: <BYAPR03MB3669D0F6495746922FD5A728BA189@BYAPR03MB3669.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: m4UZDmKorfzS91Ia5fDqyOfULVWyqYOEN8UodWy+IJPsuPqlgbU7DPGz7lWw2jiSR2K7dVJTV6jppCIjpkTD2M8h7CGeRHtZDROWOlmoCc/bCDzzf0qFXZiDfbF0do6Hur4twFiJ/Ji1IGpRlnnEgJM7/lVP7XXeD4rPlOdfDHAcqizSv0tAE3iTuehxWB292wa6GAMXJJULnC4OYHrSkaLllFKziJ5956LdThOgtFSbC0JtU45rM4p8x1GL039Pl+DDVDy2bNs31nfrkGOxW+uLL8rKQn8fdO2M9OWg6TOV1DXNYUO3irPHjcnHMOxVLHWajBpDX6FhgOoL1dtIvH34qy9BkOL22KKaXsBE8Moixi/9n5fxP3fbodBY0U4cKrpzUDGEig7iW7oiKgjQ0sVoz9eHdcosMfXQLHaUevr4h6Hn8NgJLmEFy0YuGtSh1wyJ8sYaHp0NFAYL+xTE39q73DhdB6Y8qqU7DXmb26lqngpJzyM3EHOxcdJas2VSLeU4XBhAOZ+MX1tWuZdxSCAqzEwjgomZuvrrQD1LzqhkO9YJr5nZnMJam0yE8wDRmjVDAm3fauTZKe4YZhzFNziqk8VnTdP4umx5+TttlyEyRMbkRNi+1Bakh4x9ht8Sc5AdMRyOqZnapnyisOEmEHXtU/l7SVrLE1DpWEXa+FdFQWvhXFJOFksgjZCTd3nDKcXTiXi0E8eohM/JkV1gY22lIEv0LssPSX1ZhPrLExmus+gx0QJsVe+lorVic+Tp
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(366004)(346002)(396003)(39860400002)(86362001)(6486002)(5660300002)(16576012)(4744005)(53546011)(4326008)(2906002)(38100700002)(66556008)(8936002)(36756003)(316002)(956004)(2616005)(31696002)(66946007)(8676002)(478600001)(6666004)(26005)(31686004)(66476007)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: dd3f8d6e-3de2-4cd6-6eca-08d942cf817f
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 11:48:45.0030
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: MyFirTAHO3DOqsm0kLPT05zHrlk4y54HYJT2JbCLjrGJUnnOPMlHY36q3wI9eP8Lbzo7pUWPW9RDPj/HbEIZ/IsrPVvgZLtSctTMg/7eTgo=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3669
X-OriginatorOrg: citrix.com

On 08/07/2021 15:56, Olaf Hering wrote:
> containerize bash -c './configure && make' fails due to shell expansion.
>
> Collect all arguments for the script and pass them verbatim to the
> docker run command.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>

Acked-by: Andrew Cooper <andew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:03:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:03:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153614.283784 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pE0-0005kp-Sf; Fri, 09 Jul 2021 12:03:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153614.283784; Fri, 09 Jul 2021 12:03:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pE0-0005ki-OB; Fri, 09 Jul 2021 12:03:20 +0000
Received: by outflank-mailman (input) for mailman id 153614;
 Fri, 09 Jul 2021 12:03:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1pDy-0005kX-LD
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 12:03:18 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 44317f20-cec0-4d6e-9335-7b1d0c416151;
 Fri, 09 Jul 2021 12:03:17 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44317f20-cec0-4d6e-9335-7b1d0c416151
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625832197;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=KP/P3cgjZ2naWvGN2SO98xSxlgDJ4fxlXoUAh/LpcpA=;
  b=bAiTKNe8aAhdtBPCXOQdpAQjCJ7h8cxUh9XSD5NeAsFA/on+6Lu7XnZl
   rw6WJbmyemfaFOxPXihwmItcLb3WfmsTQRyhd5l8Q3P/0cJn6L514yy+A
   Lpgdnr7sGWaSWmIr7hyg5eovvUX9QZL/qxGQSx/Jgz4Lq+/RcBOaOoBAW
   U=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: MVEzP2OpelgBOuXu3AjIdmx/3Wy2g521rNTAn0eQSn82pClDm7Nj3O/ptghmabSWZbW77T4AUq
 UQWzsBrPIxMbEd86t9MPFAYaIM6HoaWxGcPUA0zuY94YMBeeUz4RmtN7s5UvuZtdQnj3NmJ2KE
 hdIK4k21MoPDIB4vzN55GBt+/RwU7O/tT47+Lwctww5wM2oLxKE7cMJRxJ0SaabRFHtFJ6cCpe
 SaMPd77MRl+NDQG9TXM4fBh9sibDUt1aINVK1Y5qTkBJ5WiiwgvxVtyQb1Tqpp8euk92QQa/g8
 Z3c=
X-SBRS: 5.1
X-MesageID: 47987237
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:XQnFfa9I/I8584u5Ki1uk+Evdb1zdoMgy1knxilNoENuHPBwxv
 rAoB1E73PJYVYqOE3Jmbi7Sc29qADnhOBICO4qTMiftWjdyReVxeRZjLcKrAeQYBEWmtQts5
 uINpIOdeEYbmIK/voSgjPIa+rIqePvmMvD6Ja8vhUdOD2CKZsQiDuRYjzrYnGeLzM2fKbReq
 Dsg/av6wDQA0j+Oa+Adwg4tqX41pH2vaOjRSRDKw8s6QGIgz/twLnmEyKA1hNbdz9U278t/U
 XMjgS8v8yYwr+G4y6Z81WWw4VdmdPnxNcGLMuQivINIjGprgqzfoxuV5CLoThwiuCy71QBls
 XKvn4bTotOwkKUWlvwjQrm2gHm3jprwWTl00WkjXzqptG8bC4mCuJa7LgpMSfx2g4FhpVRwa
 hL12WWu958FhXbhhnw4NDOSlVDile0m3w/iuQe5kYvEbf2UIUh6LD3wXklVKvpREnBmcca+a
 hVfYDhDc9tABGnhyuzhBgo/DTENU5DbCtvQSA5y4eoOnZt7SlEJnAjtbsid0E7hdoAoql/lp
 D525tT5cdzp+8tHOhA7bQ6MIaK4lKke2OEDIvVGyW+KJ06
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47987237"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ccimj/d4hoi1nyCnk1zAYa5yuokve15dIy9mfQzPFP9utPKbGViuSJRw2hDbS2+yi4CIfMDUv4b2nhwYku0/faa7606ciP4mlnxLZ5yEh1zJSWbtKn7Yda+SsfFu8M3ky/nmBWJWg33GPuA0A/SPI65I/TewOOvbb6Dyg4osmRcLyF6XFfl3pCRYyvUkmd4W1ChIVsCH3nob47IotiMOTm396RB4WjW2zSnBkeYZoIqClsHKp9/Vx8XKu9xRrBvo9RjfM6LRgNe5lZGPuYwKXBGkNJEtabwvIrKJyceDHfXXQrqY5HnmZ+S8o6tam0vBI49XDTd3Dys+Y/OdKXwmAQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=357tfsZfYpMIGXZxF8my277cJhJim5eElO4nSeS++9k=;
 b=kbuCa0H4Mm1KxdC6G7RE8uwBY0BjyLhNsFRBRQaqHsxJ2yTXHf8oFAvzj/igPFkiNo/G3WI84HKxOaEYJjYByWXMTmpv6QQJfUeuHxZmTtJZxZa71+PcwBMiGP9Qzl9MtLhKAOk9pl8Y+j8napZGjS0PL4qpgIMsn7pG1X388aKmYgl+8lYFdoEiBjnJjfz92mHd4AyfVKT8wX8F9+a/PgSPVcFSAh/RMTSYUMCfC/ro3WKHh+fpx2RqGD1wGWzCWvgsLGEp9df+civqwkUNoqyqNjpcZAW5zzUN6BgsvNqrJm/Dxo6j91SQZOky5rYMFc9eCSuuz8EJDdb9yfpBog==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=357tfsZfYpMIGXZxF8my277cJhJim5eElO4nSeS++9k=;
 b=qMoZ9GKe1rxvc1Zrmn+dRDgJd7O5ny/DjD5Yho4heJHj0twnS39gursHi2SRODs2SHxQI1qa5SK2eGONylHDuyC88FKLCVEf9WAi9PU9UVDbIfU5EIyGu13KRgwgMbIZmQhZVQjGAW798lDnMzqNSjDDP3Rbg1RQa3938YwjTuM=
To: Olaf Hering <olaf@aepfle.de>, <xen-devel@lists.xenproject.org>
CC: Doug Goldstein <cardoe@cardoe.com>
References: <20210708145628.8902-1-olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v1] automation: document how to refresh a container
Message-ID: <b405e7c8-44ac-56c0-8fcc-3c25ac4b3914@citrix.com>
Date: Fri, 9 Jul 2021 13:02:54 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210708145628.8902-1-olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0424.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18b::15) To BN7PR03MB3618.namprd03.prod.outlook.com
 (2603:10b6:406:c3::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3825821b-40e1-4875-ef72-08d942d17f39
X-MS-TrafficTypeDiagnostic: BN6PR03MB3188:
X-Microsoft-Antispam-PRVS: <BN6PR03MB318820714390FBD01C8B1408BA189@BN6PR03MB3188.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: ef9cU46h2BPUf3nfpIyyWZOsb4eXUg2MlNtPyuwbQEdtx97HKxBL26AVy0qhGsx5qoMEwqx/5s2rExy9J9QtRzmQTvoqT9ZLR8MEoEME3ed9UYM4/aaYNtJiBcqq+AkZ7GOaAD3VCBbHHKk7Nfm89Ec2f46bQYR8e6bL3xUJykvCpzdjvuYnvB6PuGs91GZChxOu1gHCLnVbKjH18Yu/cPjzLqKNa0Cn9u2F26lPNU4FY+ZaEs0EVqapXQBAaWKQF7NvthdEku/aKJOXKAon22HfPpiREqNJsjP12q337P86D97Oi4c/vzMe0BDFZ/TIr0kGdWDiNmcwduXZFA6EI92WXeoEpeQLq8ZqOrXtXSHcacket7OSq/P38i1XKxcVeCWx1IbIyvLoafI7ThPCkdw8+983F7sqVHkto5Q1BZoiwbfRMhL0G3io/Nq2D8MVDIQ0VSLod4gPw4Mu/Jmwjm5xIrRW9WxE/UNGH1x2IUn9RvQpFf4pQATURnoOVKLr+kJ1Dzmtc/DDM8qN4Qhx40UBAU8JX2KZtxpeGZ6NtHtrjWXOvSHHN1crPx6EJzp6RWI5qaQnHT7rhSiokKGQpklmROGTv4nKvzjVt6BuOf71nTGgM6mSxk1r4HFXMr1+ZGYSfNY9aK6Ds842a586EYqEoJuS5g7cZcJ9nB7QHd+qtkBKBuj6yUUiEX/FrElrigBvNiXQ3iz62itNZs0wgCF6nh/nGOSciHWu0Pe77QqOnSHzmTQm2vhxl5tg4b3U3w4KCiqX7eSjfU7Gz8WHSEiED5UDoXVa4s4/HgMvLHYnuhly+GKTEJCj0M9wqcP1CgN82rYWbtJz55Y9RnYfkQ==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN7PR03MB3618.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(39860400002)(396003)(346002)(136003)(478600001)(966005)(31686004)(6666004)(83380400001)(16576012)(4326008)(53546011)(956004)(316002)(26005)(36756003)(31696002)(66556008)(38100700002)(8936002)(66476007)(86362001)(2906002)(6486002)(2616005)(186003)(66946007)(5660300002)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 3825821b-40e1-4875-ef72-08d942d17f39
X-MS-Exchange-CrossTenant-AuthSource: BN7PR03MB3618.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 12:03:00.2455
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: g5N4+ODUGiQxV8sJcbDCdLks7ZZE/sw9ip0wizH/uN21Kaq5wsHb5mGmnuhl39K8ieboVdVHFrsLHkF3LhrKUbxq8CtLyX3t8wVVIPp8Xi4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR03MB3188
X-OriginatorOrg: citrix.com

On 08/07/2021 15:56, Olaf Hering wrote:
> The Tumbleweed container should be updated often.
> Describe the neccessary steps how to refresh and test it before
> pushing the new image to gitlab.
>
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>  automation/build/README.md | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> I did not actually run the "PUSH" command.
>
> diff --git a/automation/build/README.md b/automation/build/README.md
> index e1fb3124de..7f33ea077b 100644
> --- a/automation/build/README.md
> +++ b/automation/build/README.md
> @@ -91,5 +91,18 @@ you have access to do so and have your Docker logged i=
nto the registry.
>  To login you must run `docker login registry.gitlab.com`. For more
>  information see the [registry help].
> =20
> +This example shows how to refresh a container for a rolling release
> +such as openSUSE Tumbleweed. Login with the gitlab.com credentials.
> +
> +```
> +docker login registry.gitlab.com/xen-project/xen
> +make -C automation/build suse/opensuse-tumbleweed
> +docker image ls

Do we need the ls here?=C2=A0 That sounds a little like debugging.

Otherwise, LGTM.

> +env CONTAINER_NO_PULL=3D1 \
> +  CONTAINER=3Dtumbleweed \
> +  automation/scripts/containerize bash -exc './configure && make'
> +make -C automation/build suse/opensuse-tumbleweed PUSH=3D1
> +```
> +
>  [registry]: https://gitlab.com/xen-project/xen/container_registry
>  [registry help]: https://gitlab.com/help/user/project/container_registry
>




From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:19:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:19:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153621.283795 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pT7-0007LN-7o; Fri, 09 Jul 2021 12:18:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153621.283795; Fri, 09 Jul 2021 12:18:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pT7-0007LG-4e; Fri, 09 Jul 2021 12:18:57 +0000
Received: by outflank-mailman (input) for mailman id 153621;
 Fri, 09 Jul 2021 12:18:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1pT6-0007LA-9F
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 12:18:56 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d3dfab28-e0af-11eb-85e4-12813bfff9fa;
 Fri, 09 Jul 2021 12:18:55 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d3dfab28-e0af-11eb-85e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625833134;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=KLV3x48Y1E72VtdNOqBWc2ImaKcR2HFSWrxL7+3qHUo=;
  b=KaCGQFbxtzrThkc/519lOCO2XZxO01lTb9FjAfCWcWCP2nRZ7eUUUymv
   fYLkbU7cKICnW5AbydW8KyJr++EnJThNn6+B59888OCXn3G/mOWQFKrcj
   dszTZu/Pa28tla2zRD3oqWPKwpprcu6xsQ0YWY/2RYGg6tZt5pvpT6r1a
   M=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 0d+b3mhVWEHcIG74RbA+ql/hPpNw9TdLvd3oAAwDsMlzNYDYa/piUNymevdJV3YW5G4ZYWxN/F
 gBA6iWR6CLfs9e45L4wvGgdBIKwbXRQjv/MKhW3NSwHBkvsvXb39AUXnDFnyFG5e7c3z4Nj19X
 IMThT1v3Mj1GoSWgwxxWuV/VCb/XZ/a6oYqwr9SkLxhiQG6SWV/FWOYTziC2rBccgN9PL924Xk
 /fcehD9331m3gL5NwIPCR36UYrssZUiEunQmzNcQRsdKUP9H54qPVS0zzqEMiLXICVfcDTeKQ6
 dmk=
X-SBRS: 5.1
X-MesageID: 47931100
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:/J4S/6v2skC6W4AvnrZn66lP7skDYdV00zEX/kB9WHVpm62j9/
 xG885w6faZslsssRIb+OxoWpPufZq0z/ccirX5Vo3NYOCJggeVBbAnw6On/ibpHDf3/PNc06
 BpdsFFeb7NMWQ=
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47931100"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NfK3+JShXVHf7Q6teknmeB2xaYLJzi3rpnx63lQhxBRF1VqEj/ehfz5yw3eb8jC66kCLV7PkkSE9TvJvo6J02k3WYGCG0xuJv3PRLxfNELEnmxIy+mJUAwf8giDRzy7gklLaFa551b0wOzeaV6FPATKOmMbbGU8rjft6e8Lp/MB9mS1fOLe0VC6tWG9iu12OSu7z2bWy5hrigRK3NX30wNwVsI3RtSGPkszgPVRhDmSlOGhhnrpiL2tIp8fZ7+89YqvspJLlD8dYf4TRfNKAxGCGDif0sxdfppalTJbliYOuXczCz1usogagowupbaRog8uKWtZB8QFIEDEzgZ6mAA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KLV3x48Y1E72VtdNOqBWc2ImaKcR2HFSWrxL7+3qHUo=;
 b=S44kOE/9ZADACH81w7vfhe5TM2XD+Yy+5W/LnGNn+6CAYZjwtYqnrKon1Vs57bMtWjwZMyRFhuQf7q1bvJyoyKHrOfMUBoyDaGFOdhAfppZzsSrXSut9pjVbp5OvZvlhITnPAGyDSJAWkcvX3RI0X+ep1QO9KK8drglzK5xWEMILIC6E5z1DjR+kLD8I9adI8PHgpP4luqD3ZGwonF4yBRU6jMw+I22wrEsPr8Dg80sqgnWzOjiHm3KYvTjcPSROb6RlvdlfpLFuwAlZdgiciGgO36+0vKTXZoH8WWCRZACbhOcHRSKUvzl8lrPJnTUYX6JRe2ee6BvLk7/O7vBwog==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KLV3x48Y1E72VtdNOqBWc2ImaKcR2HFSWrxL7+3qHUo=;
 b=sp8dPG2HBVX4NzvtL6smt3iKqee8x9UeP28JSN+y2yZn7NxDch/MmeYtadEAk/CJCHGJvI664mmzMaa4k4X5bTU3AL1yfe3an7MzrNdzbMOUkOWkmU5jpPQPxb/DQbzVGcA3DTnXBGcPYJ+xrlnplwNS1TueYk/laBv1jtgFQ+I=
Subject: xenstat-exporter: [Was Re: fix vbd rd_sects stat]
To: Richard Kojedzinszky <richard@kojedz.in>
CC: <xen-devel@lists.xenproject.org>, <community.manager@xenproject.org>
References: <585c34fd96c6e22847333d9d18843c0f@kojedz.in>
 <522642c6-6ad9-28d4-469e-53583441287e@citrix.com>
 <61970531-A990-44B4-8614-320141E7C2D7@kojedz.in>
 <4cb7a1b3-00ce-5866-12b5-a7df8f7a878a@citrix.com>
 <5fa286cab6fa4612547862040729a9ab@kojedz.in>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <73cc89bc-a746-6fb7-2535-08c85221bb89@citrix.com>
Date: Fri, 9 Jul 2021 13:18:45 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <5fa286cab6fa4612547862040729a9ab@kojedz.in>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0319.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:197::18) To BN7PR03MB3618.namprd03.prod.outlook.com
 (2603:10b6:406:c3::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e013cfc3-6267-4865-1690-08d942d3b629
X-MS-TrafficTypeDiagnostic: BN8PR03MB4707:
X-Microsoft-Antispam-PRVS: <BN8PR03MB4707329A78BC14F5C68DF847BA189@BN8PR03MB4707.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6790;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 32/e8lMsn6MBL9k5qxGAKzhspK1tCo0CkZEHluq2qz9d/qkTzHOoxkzB59V8Cu5Gc1uLpaydup8Um+XZLGvxRgzufdFi3FhBl80fmkjYd1TpK9ANgrTm2VKqZdOk/3JHHQUQvTi+HtBg80QFXXx5HtDygg0fYzuW1EDiiYY+CpWQktGBJV4RnQBPRWaH+AsD5N8eC4559kNOak23hEAcy9qlwo7DYYz92zCDp1sa8OV+YqU4mR7okmMCoL2MEyq0BfLL1vriYHXvOUCIYsoJ5y73fQyYS4zqDSOAaMyyyN/ykSIQFrFvMPiJI/0Lca3GeH3EcVngRuWb+bY+d58Q9pAVSsANXsxrYNIjSEm8+E9koul6l9QbItvT3jYpeGr7KgeKzNSlYg/E2m31xHc2E9+to7pxoMN6FOJ0J3FDmdFWhlef7P9csxuhBLZyWr/QMvE2EZCOFBkzMF0cWaYD/+pOia9+fkioOKINyt5LbOXYNM9agqbZcC+J18Nco+GaVK/1BpnueyBymYgI0JkjO3MUuSKaG7YLYQSsJUVzERgDn+RXpwkNfTCx+pC9MSZZrhR85E6ajHj0iEFzU7vRNlu/m3hd8rgE1MGoEmlSIHWOQEyAJd4ath/Eo/v79UgzU+y0jqaNFxadmFar74dApW953v9NRxOLT7lSEIzcAq0aChtKxCY8QBZjmqeLSd0Tlwzy0ZNCVQWJh6fnA5mP5+aqHiACq/s32p5X3v7XJYFpOpwEQI355mjbIPQKt8yNozQxQAWOXa3b9QhmXN1Op/6REerxdSD2q0jFm9iyrSrVf1ILWWZ0wRbGdiRbKNuc
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN7PR03MB3618.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(136003)(39860400002)(396003)(346002)(6666004)(956004)(83380400001)(2616005)(38100700002)(86362001)(31696002)(6486002)(186003)(2906002)(316002)(8936002)(16576012)(53546011)(31686004)(4744005)(8676002)(26005)(66946007)(966005)(36756003)(478600001)(5660300002)(66556008)(66476007)(4326008)(6916009)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: e013cfc3-6267-4865-1690-08d942d3b629
X-MS-Exchange-CrossTenant-AuthSource: BN7PR03MB3618.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 12:18:51.2214
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 8lomqdQy6r8jy4eFKi8zKKos8H0i8uaXUwkgy8uhUVG61J7vVl9Qrc2qjDMUOBzm3/ZQaMgf6mapu2AuZu96bUayP7sw8HrTvEWNPdPCSk8=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR03MB4707
X-OriginatorOrg: citrix.com

On 09/07/2021 12:37, Richard Kojedzinszky wrote:
> Dear Andrew,
>
> Many thanks.
>
> Meanwhile I would like to promote our xenstat-exporter, which we use
> for monitoring our vps instances.
>
> https://github.com/euronetzrt/xenstat-exporter
>
> We've spotted the bug during browsing the metrics.

Hello.

We're always interested to hear what people are doing in the Xen
ecosystem.  CC-ing the Community Manager.

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:23:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153627.283806 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pXr-0000Ju-RD; Fri, 09 Jul 2021 12:23:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153627.283806; Fri, 09 Jul 2021 12:23:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pXr-0000Jn-Nd; Fri, 09 Jul 2021 12:23:51 +0000
Received: by outflank-mailman (input) for mailman id 153627;
 Fri, 09 Jul 2021 12:23:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=AxIF=MB=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1pXq-0000Jh-Kb
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 12:23:50 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.21])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 83233834-e0b0-11eb-85e4-12813bfff9fa;
 Fri, 09 Jul 2021 12:23:49 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx69CNleeT
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 9 Jul 2021 14:23:47 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 83233834-e0b0-11eb-85e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625833427;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=m1wERmyKbLHuKhYrgWINBK+zaTeCYTMFvHW6vRjiDrw=;
    b=r1gPUeplpKi/P2qGLdnSZ6vxspoPNEEYTTpc0wj1f0fjgzY55NkvMvuMkcAcHSYhKf
    g7jl90ILtlvsXZK6wqqiahkFmpxc02E+ARvX7PROAzMlPRbn9uimitoyB31MVUsGGtGy
    8jk/j6vo0uj1BFzrG5mXg154aqZtSgSUz0y+czfSYo813evU2Eh6G3nssIG5l6eH94U1
    Ydu2Btc/M1/LXDdNyuOkSu+QL4McS3MiAdZYEkiXnLpB95OxTqpBBM0OwN7gsESuZaSL
    Uy+JTjskD4fmi2zkeWyVIdeOpQCNsyuxV4MwWlA5ARtiZVceqfhiy8XVpepPG37rdvwt
    Awlw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Ax6FOE3sSy9BcWAcR/hQoAs9MGk67vg1baqX"
X-RZG-CLASS-ID: mo00
Date: Fri, 9 Jul 2021 14:23:33 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: document how to refresh a container
Message-ID: <20210709142333.45b5795b.olaf@aepfle.de>
In-Reply-To: <b405e7c8-44ac-56c0-8fcc-3c25ac4b3914@citrix.com>
References: <20210708145628.8902-1-olaf@aepfle.de>
	<b405e7c8-44ac-56c0-8fcc-3c25ac4b3914@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/fSp7cjdb3B7qEhhk7JRUC3w";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/fSp7cjdb3B7qEhhk7JRUC3w
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Fri, 9 Jul 2021 13:02:54 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> Do we need the ls here?=C2=A0 That sounds a little like debugging.

Maybe not, it may show a long list of unrelated stuff.
It is just to verify a fresh container exists, as you said, just for debugg=
ing.

Olaf

--Sig_/fSp7cjdb3B7qEhhk7JRUC3w
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDoP8UACgkQ86SN7mm1
DoA7jA/+PosQIbbOV3yRAF5u9tDoYYc8vYsV4d4xUW4jKHvI2HTele4VpDjnv/LY
eRtwbeed2fowKPASVCpEkPsfEmTCgTdzRMz0niNQoQBqNfqp6zmC2P8DUzgrznl+
ysMXokoG9QUTjehEaehHXd7UCqJlYBOAKE4gcd92Q4eCiXbOdlAzJ55OW7bKTNiK
54QC4zyMaWgnwC21VzhKPq8tn6Qp4TNUUS8/kcKwFocNGuPZmxcLNvrJgxD3ksXG
8pqINBHAFRDehxEYREHClzf87ODVfzhvR6/fSW7CTBNu135k2HNUWDHyvC8tC25D
MhrO7AtFwMEqUSD9GQlhgjY7rDjBUgJ7SgYegtNuxKL1FpAVWWJkJ4K9IA7GeuGG
fsrleyNEkgc9bUbvzpeI2cCMStKtEknBywFphjOJichH6a7uQvEEN9cIY+VHQiiW
7dZzoMEkhos14DzVUlwzMRAFVT9yzt5XNKmDJhTyiQXSxYytP6avBPzBpGUU3NsD
Pww3ccmgxBrQZJ64LZ6ky0vrOaxo2G2L+jogwxEUfrxLxZYF+uogc82dBr5KL8ZS
HpJ3lo8Jjv7OXm+l33bHwAkL8fueEaksi0gxnQPPqb7W1j4N2sbRYgOTWWJV574T
lbNom9tzaxpFcKLw0irwiQF5kJKyI9F5jHLjPp8r3FLGvtBKRMg=
=sW94
-----END PGP SIGNATURE-----

--Sig_/fSp7cjdb3B7qEhhk7JRUC3w--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:28:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:28:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153633.283816 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pcT-0000z8-EB; Fri, 09 Jul 2021 12:28:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153633.283816; Fri, 09 Jul 2021 12:28:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1pcT-0000z1-Aq; Fri, 09 Jul 2021 12:28:37 +0000
Received: by outflank-mailman (input) for mailman id 153633;
 Fri, 09 Jul 2021 12:28:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1pcS-0000yv-3Z
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 12:28:36 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2dcbe844-e0b1-11eb-85e4-12813bfff9fa;
 Fri, 09 Jul 2021 12:28:35 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2dcbe844-e0b1-11eb-85e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625833714;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=qZIpxNz5S7vxlr6U/6C4q/EeeNlbnsZjFUafPE8UC5w=;
  b=eSPZ+W9H81/zFVhE2zujazYqn1xLrZhUJQ1SUQBI6RVS7wNA7j+igRT5
   3P2FLmLeMA4bM8cGg9KVkoEY97uDNz5AKDWe3DLqGoMu2f0FwHFvhtGsF
   KWwejSHJlXhTGbHZTITrqWKSORV3BpEYF8kl6ybA8RjiQyNt2cComvJwS
   E=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: k9VC9Q6oOItfahc0WPKqEt2Z8vrkp+PK/aaAmSamaaJE1OsBMiogqC0epIo3KxvSs8aiQoO7x3
 kF3qod1+EC03Vg2BPL1dmGHV9kZUpImxQo8l7kPqD4EOUhpGDVbwpvRwyB7gfwEASp4PlS4WPK
 aCFoO42wVwTz641+yxrGqh5PD+sUBMeuDz/2soyRplU6v/DXFoPe0dbxK81wR+nYT+YJNUr/fI
 8WyzK9R+pCcrCebp5ddv3JYJ+5pPwT5L9rxBsVbJ6J/iuNoRlBeYAAlGGrsQtkXuj02IGvX/1H
 reY=
X-SBRS: 5.1
X-MesageID: 49568524
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:00ylt6HDw8GdU5H4pLqFH5HXdLJyesId70hD6qkvc3Jom52j+P
 xGws526faVslYssHFJo6HmBEDyewKjyXcT2/hvAV7CZnibhILMFuBfBOTZskbd8kHFh5dgPO
 JbAtVD4b7LfCtHZKTBkXGF+r8bqbHtms3Y5pa9vgJQpENRGsddBm9Ce3am+yZNNWx77PQCZf
 6hD4Z81kCdkSN9VLXLOpBJZZmOm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjMTSSlGz7sO+X
 XM11WR3NTsj9iLjjvnk0PD5ZVfn9XsjvNFGcy3k8AQbhHhkByhaohNU6CL+Bo1vOaswlA3l8
 SkmWZuA+1Dr1fqOk2lqxrk3AftlBw07WX59FOeiXz/5eTkWTMTEaN69MFkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l3CzvWEpnYco/jxiuLMlGfpsRLEkjQdo+M9qJlO81GlnKp
 guMCjk3ocVTbvABEqp+FWGqbeXLwYO9hTveDlIhiXa6UkOoJlD9Tpu+CUopAZJyHsMcegx2w
 36CNUfqFhvdL5dUUsvPpZNfSOIYla9CC4kdljieWjaKA==
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="49568524"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OKRowcQU8uGfqf0IE/9WQwgqQjpR4YFbJmCBSUGOX2vFeYD7G6wsl1I6D9Rd9hA5aHzg8DBszv1HfFOtMgMGX1iAsgSNoObZK3SL7wpmXABH/DvgDh3Pw05TbSvDdBDR/DFZfjwsgd/z5a1Dc9rDBwDFpdIJAEOCKJnOTRCKHOZVui062NtrbvY/qg4rafaRLfMLSbkbiKwpKtntEHLz8RulL8xEhc9ufH30cCZ8f4y5v/gX1Dkg9U+OzbjF/1fDTuB95H8Z+U32xpv3fozRjQGKm5itC4ZNBoOztUcX4ByDuratsGX4vKnmGhkaJIvMk72zMhu+YvHW22IUE5f0wA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qZIpxNz5S7vxlr6U/6C4q/EeeNlbnsZjFUafPE8UC5w=;
 b=FZlv/mS7HEsrDQYKsA5K90/igRyKP5yP8TlUQ5PebwN9sH8cs3At5cqhv7ZzQUaSnn8h+SgjrvRP6ZCM2mRNbURLwCs/4WXZlVFJWs8t8mro5SMgoDWgmlRmnAP1oY+jLx0gZBN1aT60UF7wrDRqXLGXesg5dtJ2uw9GIjYEGGAu5k8U7aVm/rp4lLrsBgoC6BKTE9A2LBZku2LzUxLA4wZpbNVmEbh2K04r4CMx8vPEYBPw8t4BsGpqURpkpARYANO/SIpbOmffTKm6zPwMmIUzcMxs7gxnF90fehVwQ3mMo9M6+efxO/EPUAoXA7bGHL1Y3/qHA/uxjucN/dB48w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qZIpxNz5S7vxlr6U/6C4q/EeeNlbnsZjFUafPE8UC5w=;
 b=vC+qP6KNWOm3f3NjjZhl8rxNzQT452vcmiG8XoZADTMFE4T9AY0gCx/emDmfnpdly4gChWi7CEnDJr8QCwM71sX/W3OiprUiO+bcnr7Va5T6a0oeX+EPI83jQ0bCb47Vry5pVCVvSvPluypESvdNaiXrSc+LS7mKvkTBc38geaE=
Subject: Re: [PATCH v1] automation: document how to refresh a container
To: Olaf Hering <olaf@aepfle.de>
CC: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
References: <20210708145628.8902-1-olaf@aepfle.de>
 <b405e7c8-44ac-56c0-8fcc-3c25ac4b3914@citrix.com>
 <20210709142333.45b5795b.olaf@aepfle.de>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <befa4ec9-33c1-6bc8-c2c4-f0187d3012a9@citrix.com>
Date: Fri, 9 Jul 2021 13:28:25 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210709142333.45b5795b.olaf@aepfle.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0005.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:150::10) To BN7PR03MB3618.namprd03.prod.outlook.com
 (2603:10b6:406:c3::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: dbce9186-24fb-4774-536d-08d942d50ffb
X-MS-TrafficTypeDiagnostic: BN8PR03MB5140:
X-Microsoft-Antispam-PRVS: <BN8PR03MB5140C537507056F0540C8516BA189@BN8PR03MB5140.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1148;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: xWB/DCapqDLdaHWzFWZjp+v72yjHF47IMAFAHTBZI6ficBU03P+bFNWjy+B6VYdBO0a/fO+FUqkodN0JtlNF+cSkyHiUf5sqJEBl3acEEW+8wSdY2Ghj32/c/sRqUlgSH0ENUp3Btody9XIuMyWU2j9gGXog8p2yVr6S274lgU2QePXyQbzAksIgks3siF3mq4WVWbliM2hRnx95u17wOJhFuB/HLfpMAozhiOzJBwHbjZI7yT4E05ybiANW37TQ7l/xviqU7V2+PKRZ9vRg25qkkRKU5u1GRPKJ3Jk0EK3/tYGpUrg3BM22MNd/Nd8pVfM/btxjLa00+h8Cs/ey/DO4kJtHAX3aUAJx4yMhJOLTCzhGmW9kEeoacKv6VyoW0sfYycSMzAK4Id1GidR6VXItUhruFbpLe/reds3LuMrUiwIxxePVzZDiBhwUE8aT6DP1j+xZn8VRTNybxUIMiOcQxhlXgkoY7TnPNAfvjVfHxLmPul64DCIwfjFjk7OkTVdb905pny/rmSMry4a3MNE0QFZcHQUzITTBsTdklkxyNFxTIpfkAH4qc3jzjVCleZcALBWjVp/rF0JviEHcPl+GE/2PyPgab1uVRGPKt2umhq/HKzfd+K/wMjF/NvgtV5wuaxytjJ5vGoTZ5RpbHc49aYpv6KdVJ6wOYeSsC7fGI4UPLdx6zrL5r2lVrhDb/zZ6JmZCp5wNLvsOhO2IkHYMdDg0yX0iMFdFCkX7NDs=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN7PR03MB3618.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39860400002)(366004)(136003)(346002)(396003)(16576012)(316002)(38100700002)(66946007)(66476007)(66556008)(5660300002)(53546011)(8676002)(2906002)(26005)(36756003)(6916009)(956004)(478600001)(4326008)(86362001)(4744005)(31696002)(6486002)(83380400001)(31686004)(186003)(6666004)(8936002)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: dbce9186-24fb-4774-536d-08d942d50ffb
X-MS-Exchange-CrossTenant-AuthSource: BN7PR03MB3618.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 12:28:31.4061
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: O8kgdlnpxBiEpQEodkBZb7PTSK2kzVa1eaAg+Q+wNvp0CX3UQdGOVWrFVatUcXquGXoWaWK498b9r6KLwb0dswT7AIjPXpGeNya0JPaC/3M=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR03MB5140
X-OriginatorOrg: citrix.com

On 09/07/2021 13:23, Olaf Hering wrote:
> Am Fri, 9 Jul 2021 13:02:54 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
>
>> Do we need the ls here?  That sounds a little like debugging.
> Maybe not, it may show a long list of unrelated stuff.
> It is just to verify a fresh container exists, as you said, just for debugging.

Ok - I'll drop that line and commit, then we can see about rebuilding
the container.

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:34:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:34:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153640.283828 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1piB-0002Sa-6t; Fri, 09 Jul 2021 12:34:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153640.283828; Fri, 09 Jul 2021 12:34:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1piB-0002ST-3x; Fri, 09 Jul 2021 12:34:31 +0000
Received: by outflank-mailman (input) for mailman id 153640;
 Fri, 09 Jul 2021 12:34:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0kUe=MB=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1piA-0002SN-2g
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 12:34:30 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0076f9be-e0b2-11eb-85e4-12813bfff9fa;
 Fri, 09 Jul 2021 12:34:28 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id D8218220D1;
 Fri,  9 Jul 2021 12:34:27 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id B025C137DD;
 Fri,  9 Jul 2021 12:34:27 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 3UkYKVNC6GCVXwAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 09 Jul 2021 12:34:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0076f9be-e0b2-11eb-85e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625834067; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=d3jtSJxPTb9P4Fv16k9KFkInAO1kGhVW/xm3J2BYf9I=;
	b=nYe05seQfIVUi89xCsJh4mGT0CINPajxsmHavDs8DDnW9fAKGtzDi5z242DeCHGoyM5tV5
	bGyEt+pctNbD8w3zn3URcVb/ce+rmkFUIeikIcrXTW+6iTFUg2zMbjjgqfCcAh630XmDkn
	aTOtCJV73+8Pq6ejcpeNO3FqGaI3pco=
Subject: Re: [PATCH v2 1/2] tools/xenstore: set oom score for xenstore daemon
 on Linux
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210608055839.10313-1-jgross@suse.com>
 <20210608055839.10313-2-jgross@suse.com>
 <467dc0c1-cf0a-2aaf-0c99-c1ca70b95912@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <6c4b8bb2-56c0-e0ee-2eea-52f2925803c9@suse.com>
Date: Fri, 9 Jul 2021 14:34:26 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <467dc0c1-cf0a-2aaf-0c99-c1ca70b95912@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="35LkoPCyx7iHMswZz6xzX4aL2wDm7Hazv"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--35LkoPCyx7iHMswZz6xzX4aL2wDm7Hazv
Content-Type: multipart/mixed; boundary="wg9e16dML2tcETP3SYd2ypPHjpWeDyylI";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Message-ID: <6c4b8bb2-56c0-e0ee-2eea-52f2925803c9@suse.com>
Subject: Re: [PATCH v2 1/2] tools/xenstore: set oom score for xenstore daemon
 on Linux
References: <20210608055839.10313-1-jgross@suse.com>
 <20210608055839.10313-2-jgross@suse.com>
 <467dc0c1-cf0a-2aaf-0c99-c1ca70b95912@xen.org>
In-Reply-To: <467dc0c1-cf0a-2aaf-0c99-c1ca70b95912@xen.org>

--wg9e16dML2tcETP3SYd2ypPHjpWeDyylI
Content-Type: multipart/mixed;
 boundary="------------C952ACE623DF1776165288A8"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------C952ACE623DF1776165288A8
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 08.07.21 19:40, Julien Grall wrote:
> Hi Juergen,
>=20
> On 08/06/2021 06:58, Juergen Gross wrote:
>> Xenstored is absolutely mandatory for a Xen host and it can't be
>> restarted, so being killed by OOM-killer in case of memory shortage is=

>> to be avoided.
>>
>> Set /proc/$pid/oom_score_adj (if available) to -500 in order to allow
>> xenstored to use large amounts of memory without being killed.
>>
>> Make sure the pid file isn't a left-over from a previous run delete it=

>> before starting xenstored.
>=20
> This sentence is a bit confusing to read. Do you mean "*To* make=20
> sure....*,* delete it before"?

Yes, will change it.

>=20
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>> V2:
>> - set oom score from launch script (Julien Grall)
>> - split off open file descriptor limit setting (Julien Grall)
>> ---
>> =C2=A0 tools/hotplug/Linux/launch-xenstore.in | 3 +++
>> =C2=A0 1 file changed, 3 insertions(+)
>>
>> diff --git a/tools/hotplug/Linux/launch-xenstore.in=20
>> b/tools/hotplug/Linux/launch-xenstore.in
>> index 019f9d6f4d..3ad71e3d08 100644
>> --- a/tools/hotplug/Linux/launch-xenstore.in
>> +++ b/tools/hotplug/Linux/launch-xenstore.in
>> @@ -59,11 +59,14 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons =

>> && . @CONFIG_DIR@/@CONFIG_LEAF
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "No xensto=
red found"
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }
>> +=C2=A0=C2=A0=C2=A0 rm -f @XEN_RUN_DIR@/xenstored.pid
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo -n Starting $XENSTORED...
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $XENSTORED --pid-file @XEN_RUN_DIR@/xen=
stored.pid $XENSTORED_ARGS
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 systemd-notify --booted 2>/dev/null || =
timeout_xenstore=20
>> $XENSTORED || exit 1
>> +=C2=A0=C2=A0=C2=A0 XS_PID=3D`cat @XEN_RUN_DIR@/xenstored.pid`
>> +=C2=A0=C2=A0=C2=A0 echo -500 >/proc/$XS_PID/oom_score_adj
>=20
> NIT: It would be worth considering to introduce a variable so this can =

> be set from the configuration file.

Do you have any scenario in mind where this would be beneficial?

I'm not against it, but I'm wondering why anybody would want that
to be configurable.

>=20
> With or without it:
>=20
> Acked-by: Julien Grall <jgrall@amazon.com>

Juergen

--------------C952ACE623DF1776165288A8
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------C952ACE623DF1776165288A8--

--wg9e16dML2tcETP3SYd2ypPHjpWeDyylI--

--35LkoPCyx7iHMswZz6xzX4aL2wDm7Hazv
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDoQlMFAwAAAAAACgkQsN6d1ii/Ey/r
fggAnv6no8aje6PS6TAXRcruQLsBI0WJjqqjg05sFbhOChhAcgtzCbUCex3fPG9+ixNgYjgY1q9r
llzT+UP1JkqTle//AxVoMfkMlXG1zLiVYvBAyqOqj+86Y7IvXF60JbFcmGzSC6NM6oPtYXpwIC+p
bLbTGkH/P/7N1cOTXvpzGp0EO+FrSApn07DCpuLak8BA8KsyIKfZIuSLmwQvbW4ffKdG7U+NijVO
FRj5AWg1tuj07D2wlK3E3ZqfJab3aergyy4tCb5mO+Y2DHknooc+HJgCd0/uqqmpausRywXYvelr
f8MR9r9JA9moeD1E/EAegfcs6tFULWpmkEgUYp4F9g==
=TcTi
-----END PGP SIGNATURE-----

--35LkoPCyx7iHMswZz6xzX4aL2wDm7Hazv--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:40:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:40:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153646.283839 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1poF-0003s6-Sz; Fri, 09 Jul 2021 12:40:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153646.283839; Fri, 09 Jul 2021 12:40:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1poF-0003rz-Pd; Fri, 09 Jul 2021 12:40:47 +0000
Received: by outflank-mailman (input) for mailman id 153646;
 Fri, 09 Jul 2021 12:40:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SDc5=MB=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m1poF-0003rt-5W
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 12:40:47 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id e0c7a59b-e0b2-11eb-85e5-12813bfff9fa;
 Fri, 09 Jul 2021 12:40:45 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5932AED1;
 Fri,  9 Jul 2021 05:40:45 -0700 (PDT)
Received: from e123311-lin.arm.com (unknown [10.57.0.90])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DB99E3F5A1;
 Fri,  9 Jul 2021 05:40:43 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e0c7a59b-e0b2-11eb-85e5-12813bfff9fa
From: Michal Orzel <michal.orzel@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	bertrand.marquis@arm.com
Subject: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
Date: Fri,  9 Jul 2021 14:40:35 +0200
Message-Id: <20210709124035.5520-1-michal.orzel@arm.com>
X-Mailer: git-send-email 2.29.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

AArch64 system registers are 64bit whereas AArch32 ones
are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
we should get rid of helpers READ/WRITE_SYSREG32
in favour of using READ/WRITE_SYSREG.

The last place in code making use of READ/WRITE_SYSREG32
on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
Implement a macro WRITE_SYSREG_SZ which expands as follows:
-on arm64: WRITE_SYSREG
-on arm32: WRITE_SYSREG{32/64}

As there are no other places in the code using these helpers
on arm64 - remove them.

Signed-off-by: Michal Orzel <michal.orzel@arm.com>
---
Changes since v1:
-implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
---
 xen/arch/arm/vcpreg.c               | 12 +++++++++++-
 xen/include/asm-arm/arm64/sysregs.h |  4 ----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
index f0cdcc8a54..10c4846954 100644
--- a/xen/arch/arm/vcpreg.c
+++ b/xen/arch/arm/vcpreg.c
@@ -47,6 +47,16 @@
  *
  */
 
+#ifdef CONFIG_ARM_64
+#define WRITE_SYSREG_SZ(sz, val, sysreg)     WRITE_SYSREG(val, sysreg)
+#else
+/*
+ * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
+ * on the below macro to be defined like that as well.
+ */
+#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
+#endif
+
 /* The name is passed from the upper macro to workaround macro expansion. */
 #define TVM_REG(sz, func, reg...)                                           \
 static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
@@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
     bool cache_enabled = vcpu_has_cache_enabled(v);                         \
                                                                             \
     GUEST_BUG_ON(read);                                                     \
-    WRITE_SYSREG##sz(*r, reg);                                              \
+    WRITE_SYSREG_SZ(sz, *r, reg);                                           \
                                                                             \
     p2m_toggle_cache(v, cache_enabled);                                     \
                                                                             \
diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/asm-arm/arm64/sysregs.h
index 077fd95fb7..795901e1ba 100644
--- a/xen/include/asm-arm/arm64/sysregs.h
+++ b/xen/include/asm-arm/arm64/sysregs.h
@@ -87,10 +87,6 @@
 
 /* Access to system registers */
 
-#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name))
-
-#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name)
-
 #define WRITE_SYSREG64(v, name) do {                    \
     uint64_t _r = v;                                    \
     asm volatile("msr "__stringify(name)", %0" : : "r" (_r));       \
-- 
2.29.0



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 12:59:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 12:59:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153652.283849 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1q6F-0005TT-ES; Fri, 09 Jul 2021 12:59:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153652.283849; Fri, 09 Jul 2021 12:59:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1q6F-0005TM-Be; Fri, 09 Jul 2021 12:59:23 +0000
Received: by outflank-mailman (input) for mailman id 153652;
 Fri, 09 Jul 2021 12:59:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1q6D-0005T6-Li; Fri, 09 Jul 2021 12:59:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1q6D-0000cY-FS; Fri, 09 Jul 2021 12:59:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1q6D-0003dD-6r; Fri, 09 Jul 2021 12:59:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1q6D-0002UH-6L; Fri, 09 Jul 2021 12:59:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=7+/SO70Gf6I8Y/kVOCB1t2vZwar3ACeCN0MadYyM8Uc=; b=Ba0Miy9NyMXp2RVE5rC9HioANf
	czNQn4napVQm78qUWsyXNXR9zLYolTw4wxPDLx3XHqgTkirx4bJNC7s5Hcw80HuO9X7RAN2jgK+rW
	bWxLzn9IXSZEEwbzupBsw4v1dcrE9ABA/abeBZfXBNJf8wsYwB8DWHZUZkwvoGC1xC0k=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163460-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163460: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=b560e9d9b67450d3baea56d0e211066722643c57
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 12:59:21 +0000

flight 163460 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163460/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 b560e9d9b67450d3baea56d0e211066722643c57
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   35 days
Failing since        162368  2021-06-04 15:42:59 Z   34 days   97 attempts
Testing same since   163441  2021-07-08 10:30:46 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3445 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 13:35:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 13:35:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153675.283894 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1qeb-0002GN-Fx; Fri, 09 Jul 2021 13:34:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153675.283894; Fri, 09 Jul 2021 13:34:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1qeb-0002GG-Bc; Fri, 09 Jul 2021 13:34:53 +0000
Received: by outflank-mailman (input) for mailman id 153675;
 Fri, 09 Jul 2021 13:34:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1qea-0002G6-Kl; Fri, 09 Jul 2021 13:34:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1qea-0001Cy-D2; Fri, 09 Jul 2021 13:34:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1qea-0005Ob-5z; Fri, 09 Jul 2021 13:34:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1qea-00015D-5W; Fri, 09 Jul 2021 13:34:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=hDlwfYBNUCLS2BY7TvKLueCZFNlErswVXsJEjKWfUZg=; b=V8IUylnNpWPEWVdVaZd4qdZPH+
	RFkjmDZfuayeJ64K2PaXPzkrzs2U8J/cGgoWDRm5mSPlRBs3vzEkLrRu/wuHjlXx1aVbqJt9AtSkW
	zi5euSgnMyN2EC8roE626KWkmCHZdOX6DWKcKU2n9vUolVCkK9fOeDhSaHIa1HBRnMO0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-qemuu-rhel6hvm-amd
Message-Id: <E1m1qea-00015D-5W@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 13:34:52 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-qemuu-rhel6hvm-amd
testid redhat-install

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  9aef0954195cc592e86846dbbe7f3c2c5603690a
  Bug not present: 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163473/


  commit 9aef0954195cc592e86846dbbe7f3c2c5603690a
  Merge: 9bef7ea9d9 7ca6f2ad37
  Author: Peter Maydell <peter.maydell@linaro.org>
  Date:   Tue Jul 6 11:24:58 2021 +0100
  
      Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging
      
      * More Meson test conversions and configure cleanups
      * Generalize XSAVE area offset so that it matches AMD processors on KVM
      * Improvements for -display and deprecation of -no-quit
      * Enable SMP configuration as a compound machine property ("-M smp.cpus=...")
      * Haiku compilation fix
      * Add icon on Darwin
      
      # gpg: Signature made Tue 06 Jul 2021 08:35:23 BST
      # gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
      # gpg:                issuer "pbonzini@redhat.com"
      # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
      # gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
      # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
      #      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83
      
      * remotes/bonzini-gitlab/tags/for-upstream: (40 commits)
        config-host.mak: remove unused compiler-related lines
        Set icon for QEMU binary on Mac OS
        qemu-option: remove now-dead code
        machine: add smp compound property
        vl: switch -M parsing to keyval
        keyval: introduce keyval_parse_into
        keyval: introduce keyval_merge
        qom: export more functions for use with non-UserCreatable objects
        configure: convert compiler tests to meson, part 6
        configure: convert compiler tests to meson, part 5
        configure: convert compiler tests to meson, part 4
        configure: convert compiler tests to meson, part 3
        configure: convert compiler tests to meson, part 2
        configure: convert compiler tests to meson, part 1
        configure: convert HAVE_BROKEN_SIZE_MAX to meson
        configure, meson: move CONFIG_IVSHMEM to meson
        meson: store dependency('threads') in a variable
        meson: sort existing compiler tests
        configure, meson: convert libxml2 detection to meson
        configure, meson: convert liburing detection to meson
        ...
      
      Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  
  commit 7ca6f2ad375d32e81844788dbc2b05a04cc391b5
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Tue Jul 6 08:59:01 2021 +0200
  
      config-host.mak: remove unused compiler-related lines
      
      Most of the build is not done via Makefiles, therefore the toolchain
      variables are mostly unused.  They are still used by tests/tcg
      and pc-bios/roms, but most of them are not needed there.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 3983a767e3d85008c1fb4b8618ac67bf5aee7527
  Author: John Arbuckle <programmingkidx@gmail.com>
  Date:   Mon Jul 5 15:53:28 2021 -0400
  
      Set icon for QEMU binary on Mac OS
      
      Before switching the build system over to Meson, an icon was
      added to the QEMU binary on Mac OS. This patch adds back that
      feature; it piggybacks on the existing scripts/entitlement.sh,
      which already does in-place changes to the executable on Darwin.
      
      Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
      Message-Id: <20210705195328.36442-1-programmingkidx@gmail.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 904806c69bd4e013491550d05f5c2cbdba9a9b38
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Wed Nov 11 09:03:37 2020 -0500
  
      qemu-option: remove now-dead code
      
      -M was the sole user of qemu_opts_set and qemu_opts_set_defaults,
      remove them and the arguments that they used.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit fe68090e8fbd6e831aaf3fc3bb0459c5cccf14cf
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 09:03:48 2021 -0400
  
      machine: add smp compound property
      
      Make -smp syntactic sugar for a compound property "-machine
      smp.{cores,threads,cpu,...}".  machine_smp_parse is replaced by the
      setter for the property.
      
      numa-test will now cover the new syntax, while other tests
      still use -smp.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c445909e1f3d5722ed26f067bbffed71cbefd711
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Mon Nov 2 07:36:48 2020 -0500
  
      keyval: introduce keyval_parse_into
      
      Allow parsing multiple keyval sequences into the same dictionary.
      This will be used to simplify the parsing of the -M command line
      option, which is currently a .merge_lists = true QemuOpts group.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 9176e800dbcb2636a2f24411eafc3c800e3455bd
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Nov 12 08:40:11 2020 -0500
  
      keyval: introduce keyval_merge
      
      This patch introduces a function that merges two keyval-produced
      (or keyval-like) QDicts.  It can be used to emulate the behavior of
      .merge_lists = true QemuOpts groups, merging -readconfig sections and
      command-line options in a single QDict, and also to implement -set.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 3bb6944585aa6f28b21265c88d86264e8e9f7e53
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Mon Nov 2 11:08:07 2020 -0500
  
      qom: export more functions for use with non-UserCreatable objects
      
      Machines and accelerators are not user-creatable but they are going
      to share similar command-line parsing machinery.  Export functions
      that will be used with -machine and -accel in softmmu/vl.c.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit d47a8b3b692a06852bd70fd7832bd22adfcb2431
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:02:00 2021 +0200
  
      configure: convert compiler tests to meson, part 6
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit a620fbe9ace71a89bd3d0c57a045b93a772070d5
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 13:04:47 2021 +0200
  
      configure: convert compiler tests to meson, part 5
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:02:00 2021 +0200
  
      configure: convert compiler tests to meson, part 4
      
      And remove them from the summary, since now their outcome is verbosely
      included in the meson output.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit be7e89f63f97c6e745f906bdafb0a6a0b070e720
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:02:00 2021 +0200
  
      configure: convert compiler tests to meson, part 3
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit ed3b3f1764b0deecc2d875ab897e5883ef42a615
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:14:48 2021 +0200
  
      configure: convert compiler tests to meson, part 2
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e66420ac6dc97e5f5afcb25a918cb5e7a5cd63f2
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:10:05 2021 +0200
  
      configure: convert compiler tests to meson, part 1
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e46bd55d9cbb45b4e6681dd91da0fca821e2ed9d
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:57:04 2021 +0200
  
      configure: convert HAVE_BROKEN_SIZE_MAX to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit ccd250aa2d8e214195d5cee37c1ddc58e123b821
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:50:17 2021 +0200
  
      configure, meson: move CONFIG_IVSHMEM to meson
      
      This is a duplicate of CONFIG_EVENTFD, handle it directly in meson.build.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 15:01:35 2021 +0200
  
      meson: store dependency('threads') in a variable
      
      It can be useful for has_function checks.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 69d8de7a2d7c3512f6f7762abd8c1c1b9b4044e4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:56:11 2021 +0200
  
      meson: sort existing compiler tests
      
      The next patches will add more compiler tests.  Sort and group the
      existing tests, keeping similar cc.has_* tests together and sorting them
      alphabetically by macro name.  This should make it easier to look for
      examples when adding new tests to meson.build.
      
      Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c5b36c25c2fe1110cf8646ef02083c71757d6e00
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert libxml2 detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 53c22b68e3ecd1764dfd325baefea6acd0b1dc70
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert liburing detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e36e8c70f6d3ed844f4606f3f019d2ae808f0af1
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert libpmem detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 83ef16821a41e540cec7a282374dcbfc1b2b0851
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert libdaxctl detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 587d59d6ccd0e73bfe5689d9232804339aa09bdf
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert virgl detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c23d7b4e570ce7e63042a60f0747595f515c6822
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert vte detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit f08b65b651bca2eac543de694f866049e48fb242
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Tue Jun 15 17:18:42 2021 +0200
  
      configure: drop vte-2.90 check
      
      All currently supported distros have vte 0.37 or newer, which is where the
      ABI changed from 2.90 to 2.91.  So drop support for the older ABI.
      
      Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 48e5c98a38920e088a00e43cf12a4881fceeb4cb
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:32 2021 +0100
  
      target/i386: Move X86XSaveArea into TCG
      
      Given that TCG is now the only consumer of X86XSaveArea, move the
      structure definition and associated offset declarations and checks to a
      TCG specific header.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-9-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit fea4500841024195ec701713e05b92ebf667f192
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:31 2021 +0100
  
      target/i386: Populate x86_ext_save_areas offsets using cpuid where possible
      
      Rather than relying on the X86XSaveArea structure definition,
      determine the offset of XSAVE state areas using CPUID leaf 0xd where
      possible (KVM and HVF).
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-8-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 3568987f78faff90829ea6c885bbdd5b083dc86c
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:30 2021 +0100
  
      target/i386: Observe XSAVE state area offsets
      
      Rather than relying on the X86XSaveArea structure definition directly,
      the routines that manipulate the XSAVE state area should observe the
      offsets declared in the x86_ext_save_areas array.
      
      Currently the offsets declared in the array are derived from the
      structure definition, resulting in no functional change.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-7-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 5aa10ab1a08e4123dee214a2f854909efb07b45b
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:29 2021 +0100
  
      target/i386: Make x86_ext_save_areas visible outside cpu.c
      
      Provide visibility of the x86_ext_save_areas array and associated type
      outside of cpu.c.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-6-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c0198c5f87b6db25712672292e01ab710d6ef631
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:28 2021 +0100
  
      target/i386: Pass buffer and length to XSAVE helper
      
      In preparation for removing assumptions about XSAVE area offsets, pass
      a buffer pointer and buffer length to the XSAVE helper functions.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-5-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit fde74821006472f40fee9a094e6da86cd39b5623
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:27 2021 +0100
  
      target/i386: Clarify the padding requirements of X86XSaveArea
      
      Replace the hard-coded size of offsets or structure elements with
      defined constants or sizeof().
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-4-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 436463b84b75fad6ff962e45a2220a7d1d17557e
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:26 2021 +0100
  
      target/i386: Consolidate the X86XSaveArea offset checks
      
      Rather than having similar but different checks in cpu.h and kvm.c,
      move them all to cpu.h.
      Message-Id: <20210705104632.2902400-3-david.edmondson@oracle.com>
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit ac7b7cae4e8598359a2a7557899904c9563a776a
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:25 2021 +0100
  
      target/i386: Declare constants for XSAVE offsets
      
      Declare and use manifest constants for the XSAVE state component
      offsets.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-2-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit dd52af17ec947332dfe45bd5f098c94c6ec0baa3
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Aug 20 09:15:08 2020 -0400
  
      coverity-scan: switch to vpath build
      
      This is the patch that has been running on the coverity cronjob
      for a few weeks now.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit dff5f68224505926762c9609b7fb120a2adc6aee
  Author: Philippe Mathieu-Daudé <f4bug@amsat.org>
  Date:   Sat Jun 19 11:13:41 2021 +0200
  
      coverity-scan: Remove lm32 / unicore32 targets
      
      lm32 has been removed in commit 9d49bcf6992 ("Drop the deprecated
      lm32 target"), and unicore32 in 4369223902a ("Drop the deprecated
      unicore32 target").
      
      Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
      Message-Id: <20210619091342.3660495-2-f4bug@amsat.org>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 95f439bd115efacb8593ca26e14303116f7ca988
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:31 2021 +0200
  
      qemu-options: Improve the documentation of the -display options
      
      The sdl and gtk display options support more parameters than currently
      documented. Also the "vnc" option got lost during a recent commit,
      add it again.
      
      Fixes: ddc717581c ("Add display suboptions to man pages")
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-5-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit b6ddc6a2b2b8c32dc2db12d5848eadde10e30136
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:30 2021 +0200
  
      ui: Mark the '-no-quit' option as deprecated
      
      It's just a wrapper around the -display ...,window-close=off parameter,
      and the name "no-quit" is rather confusing compared to "window-close"
      (since there are still other means to quit the emulator), so we should
      rather tell our users to use the "window-close" parameter instead.
      
      While we're at it, update the documentation to state that
      "-no-quit" is available for GTK, too, not only for SDL.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-4-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit bb20b86db9acb7a6f653fd40c45d46a9df6b2a75
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:29 2021 +0200
  
      ui: Fix the "-display sdl,window_close=..." parameter
      
      According to the QAPI schema, there is a "-" and not a "_" between
      "window" and "close", and we're also talking about "window-close"
      in the long parameter description in qemu-options.hx, so we should
      make sure that we rather use the variant with the "-" by default
      instead of only allowing the one with the "_" here. The old way
      still stays enabled for compatibility, but we deprecate it, so that
      we can switch to a QAPIfied parameter one day more easily.
      
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-3-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit f6b560bbc1b0120d7737c0efb53f691828d82faa
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:28 2021 +0200
  
      softmmu/vl: Remove obsolete comment about the "frame" parameter
      
      The frame parameter has been removed along with the support for
      SDL 1.2.
      
      Fixes: 09bd7ba9f5 ("Remove deprecated -no-frame option")
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-2-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit bc05439334061f6adc04e4a044d490f961e7e0c3
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Mon Jul 5 10:25:42 2021 +0200
  
      Makefile: Remove /usr/bin/env wrapper from the SHELL variable
      
      The wrapper should not be needed here (it's not the shebang line of
      a shell script), and it is causing trouble on Haiku where "env"
      resides in a different directory.
      
      Reported-by: Richard Zak <richard.j.zak@gmail.com>
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
      Message-Id: <20210705082542.936856-1-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-qemuu-rhel6hvm-amd.redhat-install.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-qemuu-rhel6hvm-amd.redhat-install --summary-out=tmp/163473.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-qemuu-rhel6hvm-amd redhat-install
Searching for failure / basis pass:
 163444 fail [host=pinot1] / 163321 ok.
Failure / basis pass flights: 163444 / 163321
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9-9aef0954195cc592e86846dbbe7f3c2c5603690a git://xenbits.xen.org/osstest/seabios.git#54082c81d96028ba8c76fbe6784085cf1df76b20-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#74d044d51b19bb697eac5c3deafa140f6afafec8-4473f3601098a2c3cf5ab89d5a29504772985e3a
>From git://cache:9419/git://git.qemu.org/qemu
   9db3065c62..53c0123118  master     -> origin/master
   53c0123118..05de778b5b  staging    -> origin/staging
>From git://cache:9419/git://xenbits.xen.org/xen
   6de3e5fce5..cf4aa8dfb2  staging    -> origin/staging
Loaded 15005 nodes in revision graph
Searching for test results:
 163321 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163457 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163444 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163459 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163462 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 d468f9522174114ab06239894b6079c0a487e408
 163463 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 33e48312cf28f6fb78c03b14514fa7718de97ef5
 163465 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 09e2cd69956fe529bfc3d53dae477b44eff217d1
 163467 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163469 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163470 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163471 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163472 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163473 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
Searching for interesting versions
 Result found: flight 163321 (pass), for basis pass
 Result found: flight 163420 (fail), for basis failure
 Repro found: flight 163457 (pass), for basis pass
 Repro found: flight 163459 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
No revisions left to test, checking graph state.
 Result found: flight 163467 (pass), for last pass
 Result found: flight 163469 (fail), for first failure
 Repro found: flight 163470 (pass), for last pass
 Repro found: flight 163471 (fail), for first failure
 Repro found: flight 163472 (pass), for last pass
 Repro found: flight 163473 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  9aef0954195cc592e86846dbbe7f3c2c5603690a
  Bug not present: 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163473/


  commit 9aef0954195cc592e86846dbbe7f3c2c5603690a
  Merge: 9bef7ea9d9 7ca6f2ad37
  Author: Peter Maydell <peter.maydell@linaro.org>
  Date:   Tue Jul 6 11:24:58 2021 +0100
  
      Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging
      
      * More Meson test conversions and configure cleanups
      * Generalize XSAVE area offset so that it matches AMD processors on KVM
      * Improvements for -display and deprecation of -no-quit
      * Enable SMP configuration as a compound machine property ("-M smp.cpus=...")
      * Haiku compilation fix
      * Add icon on Darwin
      
      # gpg: Signature made Tue 06 Jul 2021 08:35:23 BST
      # gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
      # gpg:                issuer "pbonzini@redhat.com"
      # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
      # gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
      # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
      #      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83
      
      * remotes/bonzini-gitlab/tags/for-upstream: (40 commits)
        config-host.mak: remove unused compiler-related lines
        Set icon for QEMU binary on Mac OS
        qemu-option: remove now-dead code
        machine: add smp compound property
        vl: switch -M parsing to keyval
        keyval: introduce keyval_parse_into
        keyval: introduce keyval_merge
        qom: export more functions for use with non-UserCreatable objects
        configure: convert compiler tests to meson, part 6
        configure: convert compiler tests to meson, part 5
        configure: convert compiler tests to meson, part 4
        configure: convert compiler tests to meson, part 3
        configure: convert compiler tests to meson, part 2
        configure: convert compiler tests to meson, part 1
        configure: convert HAVE_BROKEN_SIZE_MAX to meson
        configure, meson: move CONFIG_IVSHMEM to meson
        meson: store dependency('threads') in a variable
        meson: sort existing compiler tests
        configure, meson: convert libxml2 detection to meson
        configure, meson: convert liburing detection to meson
        ...
      
      Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  
  commit 7ca6f2ad375d32e81844788dbc2b05a04cc391b5
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Tue Jul 6 08:59:01 2021 +0200
  
      config-host.mak: remove unused compiler-related lines
      
      Most of the build is not done via Makefiles, therefore the toolchain
      variables are mostly unused.  They are still used by tests/tcg
      and pc-bios/roms, but most of them are not needed there.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 3983a767e3d85008c1fb4b8618ac67bf5aee7527
  Author: John Arbuckle <programmingkidx@gmail.com>
  Date:   Mon Jul 5 15:53:28 2021 -0400
  
      Set icon for QEMU binary on Mac OS
      
      Before switching the build system over to Meson, an icon was
      added to the QEMU binary on Mac OS. This patch adds back that
      feature; it piggybacks on the existing scripts/entitlement.sh,
      which already does in-place changes to the executable on Darwin.
      
      Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
      Message-Id: <20210705195328.36442-1-programmingkidx@gmail.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 904806c69bd4e013491550d05f5c2cbdba9a9b38
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Wed Nov 11 09:03:37 2020 -0500
  
      qemu-option: remove now-dead code
      
      -M was the sole user of qemu_opts_set and qemu_opts_set_defaults,
      remove them and the arguments that they used.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit fe68090e8fbd6e831aaf3fc3bb0459c5cccf14cf
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 09:03:48 2021 -0400
  
      machine: add smp compound property
      
      Make -smp syntactic sugar for a compound property "-machine
      smp.{cores,threads,cpu,...}".  machine_smp_parse is replaced by the
      setter for the property.
      
      numa-test will now cover the new syntax, while other tests
      still use -smp.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c445909e1f3d5722ed26f067bbffed71cbefd711
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Mon Nov 2 07:36:48 2020 -0500
  
      keyval: introduce keyval_parse_into
      
      Allow parsing multiple keyval sequences into the same dictionary.
      This will be used to simplify the parsing of the -M command line
      option, which is currently a .merge_lists = true QemuOpts group.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 9176e800dbcb2636a2f24411eafc3c800e3455bd
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Nov 12 08:40:11 2020 -0500
  
      keyval: introduce keyval_merge
      
      This patch introduces a function that merges two keyval-produced
      (or keyval-like) QDicts.  It can be used to emulate the behavior of
      .merge_lists = true QemuOpts groups, merging -readconfig sections and
      command-line options in a single QDict, and also to implement -set.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 3bb6944585aa6f28b21265c88d86264e8e9f7e53
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Mon Nov 2 11:08:07 2020 -0500
  
      qom: export more functions for use with non-UserCreatable objects
      
      Machines and accelerators are not user-creatable but they are going
      to share similar command-line parsing machinery.  Export functions
      that will be used with -machine and -accel in softmmu/vl.c.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit d47a8b3b692a06852bd70fd7832bd22adfcb2431
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:02:00 2021 +0200
  
      configure: convert compiler tests to meson, part 6
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit a620fbe9ace71a89bd3d0c57a045b93a772070d5
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 13:04:47 2021 +0200
  
      configure: convert compiler tests to meson, part 5
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:02:00 2021 +0200
  
      configure: convert compiler tests to meson, part 4
      
      And remove them from the summary, since now their outcome is verbosely
      included in the meson output.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit be7e89f63f97c6e745f906bdafb0a6a0b070e720
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:02:00 2021 +0200
  
      configure: convert compiler tests to meson, part 3
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit ed3b3f1764b0deecc2d875ab897e5883ef42a615
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:14:48 2021 +0200
  
      configure: convert compiler tests to meson, part 2
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e66420ac6dc97e5f5afcb25a918cb5e7a5cd63f2
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:10:05 2021 +0200
  
      configure: convert compiler tests to meson, part 1
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e46bd55d9cbb45b4e6681dd91da0fca821e2ed9d
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:57:04 2021 +0200
  
      configure: convert HAVE_BROKEN_SIZE_MAX to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit ccd250aa2d8e214195d5cee37c1ddc58e123b821
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 12:50:17 2021 +0200
  
      configure, meson: move CONFIG_IVSHMEM to meson
      
      This is a duplicate of CONFIG_EVENTFD, handle it directly in meson.build.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 15:01:35 2021 +0200
  
      meson: store dependency('threads') in a variable
      
      It can be useful for has_function checks.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 69d8de7a2d7c3512f6f7762abd8c1c1b9b4044e4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:56:11 2021 +0200
  
      meson: sort existing compiler tests
      
      The next patches will add more compiler tests.  Sort and group the
      existing tests, keeping similar cc.has_* tests together and sorting them
      alphabetically by macro name.  This should make it easier to look for
      examples when adding new tests to meson.build.
      
      Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c5b36c25c2fe1110cf8646ef02083c71757d6e00
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert libxml2 detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 53c22b68e3ecd1764dfd325baefea6acd0b1dc70
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert liburing detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit e36e8c70f6d3ed844f4606f3f019d2ae808f0af1
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert libpmem detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 83ef16821a41e540cec7a282374dcbfc1b2b0851
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert libdaxctl detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 587d59d6ccd0e73bfe5689d9232804339aa09bdf
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert virgl detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c23d7b4e570ce7e63042a60f0747595f515c6822
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Jun 3 11:31:35 2021 +0200
  
      configure, meson: convert vte detection to meson
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit f08b65b651bca2eac543de694f866049e48fb242
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Tue Jun 15 17:18:42 2021 +0200
  
      configure: drop vte-2.90 check
      
      All currently supported distros have vte 0.37 or newer, which is where the
      ABI changed from 2.90 to 2.91.  So drop support for the older ABI.
      
      Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 48e5c98a38920e088a00e43cf12a4881fceeb4cb
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:32 2021 +0100
  
      target/i386: Move X86XSaveArea into TCG
      
      Given that TCG is now the only consumer of X86XSaveArea, move the
      structure definition and associated offset declarations and checks to a
      TCG specific header.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-9-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit fea4500841024195ec701713e05b92ebf667f192
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:31 2021 +0100
  
      target/i386: Populate x86_ext_save_areas offsets using cpuid where possible
      
      Rather than relying on the X86XSaveArea structure definition,
      determine the offset of XSAVE state areas using CPUID leaf 0xd where
      possible (KVM and HVF).
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-8-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 3568987f78faff90829ea6c885bbdd5b083dc86c
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:30 2021 +0100
  
      target/i386: Observe XSAVE state area offsets
      
      Rather than relying on the X86XSaveArea structure definition directly,
      the routines that manipulate the XSAVE state area should observe the
      offsets declared in the x86_ext_save_areas array.
      
      Currently the offsets declared in the array are derived from the
      structure definition, resulting in no functional change.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-7-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 5aa10ab1a08e4123dee214a2f854909efb07b45b
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:29 2021 +0100
  
      target/i386: Make x86_ext_save_areas visible outside cpu.c
      
      Provide visibility of the x86_ext_save_areas array and associated type
      outside of cpu.c.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-6-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit c0198c5f87b6db25712672292e01ab710d6ef631
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:28 2021 +0100
  
      target/i386: Pass buffer and length to XSAVE helper
      
      In preparation for removing assumptions about XSAVE area offsets, pass
      a buffer pointer and buffer length to the XSAVE helper functions.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-5-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit fde74821006472f40fee9a094e6da86cd39b5623
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:27 2021 +0100
  
      target/i386: Clarify the padding requirements of X86XSaveArea
      
      Replace the hard-coded size of offsets or structure elements with
      defined constants or sizeof().
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-4-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 436463b84b75fad6ff962e45a2220a7d1d17557e
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:26 2021 +0100
  
      target/i386: Consolidate the X86XSaveArea offset checks
      
      Rather than having similar but different checks in cpu.h and kvm.c,
      move them all to cpu.h.
      Message-Id: <20210705104632.2902400-3-david.edmondson@oracle.com>
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit ac7b7cae4e8598359a2a7557899904c9563a776a
  Author: David Edmondson <david.edmondson@oracle.com>
  Date:   Mon Jul 5 11:46:25 2021 +0100
  
      target/i386: Declare constants for XSAVE offsets
      
      Declare and use manifest constants for the XSAVE state component
      offsets.
      
      Signed-off-by: David Edmondson <david.edmondson@oracle.com>
      Message-Id: <20210705104632.2902400-2-david.edmondson@oracle.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit dd52af17ec947332dfe45bd5f098c94c6ec0baa3
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu Aug 20 09:15:08 2020 -0400
  
      coverity-scan: switch to vpath build
      
      This is the patch that has been running on the coverity cronjob
      for a few weeks now.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit dff5f68224505926762c9609b7fb120a2adc6aee
  Author: Philippe Mathieu-Daudé <f4bug@amsat.org>
  Date:   Sat Jun 19 11:13:41 2021 +0200
  
      coverity-scan: Remove lm32 / unicore32 targets
      
      lm32 has been removed in commit 9d49bcf6992 ("Drop the deprecated
      lm32 target"), and unicore32 in 4369223902a ("Drop the deprecated
      unicore32 target").
      
      Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
      Message-Id: <20210619091342.3660495-2-f4bug@amsat.org>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit 95f439bd115efacb8593ca26e14303116f7ca988
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:31 2021 +0200
  
      qemu-options: Improve the documentation of the -display options
      
      The sdl and gtk display options support more parameters than currently
      documented. Also the "vnc" option got lost during a recent commit,
      add it again.
      
      Fixes: ddc717581c ("Add display suboptions to man pages")
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-5-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit b6ddc6a2b2b8c32dc2db12d5848eadde10e30136
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:30 2021 +0200
  
      ui: Mark the '-no-quit' option as deprecated
      
      It's just a wrapper around the -display ...,window-close=off parameter,
      and the name "no-quit" is rather confusing compared to "window-close"
      (since there are still other means to quit the emulator), so we should
      rather tell our users to use the "window-close" parameter instead.
      
      While we're at it, update the documentation to state that
      "-no-quit" is available for GTK, too, not only for SDL.
      
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-4-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit bb20b86db9acb7a6f653fd40c45d46a9df6b2a75
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:29 2021 +0200
  
      ui: Fix the "-display sdl,window_close=..." parameter
      
      According to the QAPI schema, there is a "-" and not a "_" between
      "window" and "close", and we're also talking about "window-close"
      in the long parameter description in qemu-options.hx, so we should
      make sure that we rather use the variant with the "-" by default
      instead of only allowing the one with the "_" here. The old way
      still stays enabled for compatibility, but we deprecate it, so that
      we can switch to a QAPIfied parameter one day more easily.
      
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-3-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit f6b560bbc1b0120d7737c0efb53f691828d82faa
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Wed Jun 30 18:32:28 2021 +0200
  
      softmmu/vl: Remove obsolete comment about the "frame" parameter
      
      The frame parameter has been removed along with the support for
      SDL 1.2.
      
      Fixes: 09bd7ba9f5 ("Remove deprecated -no-frame option")
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Message-Id: <20210630163231.467987-2-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  
  commit bc05439334061f6adc04e4a044d490f961e7e0c3
  Author: Thomas Huth <thuth@redhat.com>
  Date:   Mon Jul 5 10:25:42 2021 +0200
  
      Makefile: Remove /usr/bin/env wrapper from the SHELL variable
      
      The wrapper should not be needed here (it's not the shebang line of
      a shell script), and it is causing trouble on Haiku where "env"
      resides in a different directory.
      
      Reported-by: Richard Zak <richard.j.zak@gmail.com>
      Signed-off-by: Thomas Huth <thuth@redhat.com>
      Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
      Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
      Message-Id: <20210705082542.936856-1-thuth@redhat.com>
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-qemuu-rhel6hvm-amd.redhat-install.{dot,ps,png,html,svg}.
----------------------------------------
163473: tolerable ALL FAIL

flight 163473 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163473/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install    fail baseline untested


jobs:
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 13:54:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 13:54:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153684.283911 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1qxT-0004f2-9a; Fri, 09 Jul 2021 13:54:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153684.283911; Fri, 09 Jul 2021 13:54:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1qxT-0004ev-6f; Fri, 09 Jul 2021 13:54:23 +0000
Received: by outflank-mailman (input) for mailman id 153684;
 Fri, 09 Jul 2021 13:54:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0kUe=MB=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1qxS-0004ep-83
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 13:54:22 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a5e3ff2b-84cc-4645-a0d9-9e1db1308da2;
 Fri, 09 Jul 2021 13:54:21 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 8BA3D22312;
 Fri,  9 Jul 2021 13:54:20 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 48851137F8;
 Fri,  9 Jul 2021 13:54:20 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id h+nnDwxV6GAqeAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 09 Jul 2021 13:54:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a5e3ff2b-84cc-4645-a0d9-9e1db1308da2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625838860; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=pYcFbzVs+nt+UrJKaNfGtZEdh6esdWkryDHl6n/wINE=;
	b=s+Wbabp+Rpuft2Pb34V0GfC9WZ2FiaSCQOPCDKhvFQy7GFymlxbHPzz2yI5kKWz1Zsnljv
	JxzirPWhEMense2vHjfCO3rOWYkF46aHBlL+v4kFgRu0WrKz29Kkdy7N4vuOAPUV4q/Yl1
	Uw8dXx/HbuUscaxyrYDMC4ErzzHgnG8=
Subject: Re: [PATCH v2 2/3] xen/blkfront: don't take local copy of a request
 from the ring page
To: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org, Konrad Rzeszutek Wilk
 <konrad.wilk@oracle.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 Jan Beulich <jbeulich@suse.com>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-3-jgross@suse.com> <YOgPCZbEF+t5DN+G@Air-de-Roger>
From: Juergen Gross <jgross@suse.com>
Message-ID: <57f50e6f-4fc4-7318-9f7f-c5b4e0e63487@suse.com>
Date: Fri, 9 Jul 2021 15:54:19 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <YOgPCZbEF+t5DN+G@Air-de-Roger>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="rmyaqJHSnZ9Q2teyceTX9GLRzbIdvZGdC"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--rmyaqJHSnZ9Q2teyceTX9GLRzbIdvZGdC
Content-Type: multipart/mixed; boundary="V2YEAoLTDoiLiUaHWQ3PyouYqQ5WXYqkP";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org, Konrad Rzeszutek Wilk
 <konrad.wilk@oracle.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Jens Axboe <axboe@kernel.dk>,
 Jan Beulich <jbeulich@suse.com>
Message-ID: <57f50e6f-4fc4-7318-9f7f-c5b4e0e63487@suse.com>
Subject: Re: [PATCH v2 2/3] xen/blkfront: don't take local copy of a request
 from the ring page
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-3-jgross@suse.com> <YOgPCZbEF+t5DN+G@Air-de-Roger>
In-Reply-To: <YOgPCZbEF+t5DN+G@Air-de-Roger>

--V2YEAoLTDoiLiUaHWQ3PyouYqQ5WXYqkP
Content-Type: multipart/mixed;
 boundary="------------394D9FD2988C5A38C6586243"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------394D9FD2988C5A38C6586243
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 09.07.21 10:55, Roger Pau Monn=C3=A9 wrote:
> On Thu, Jul 08, 2021 at 02:43:44PM +0200, Juergen Gross wrote:
>> In order to avoid a malicious backend being able to influence the loca=
l
>> copy of a request build the request locally first and then copy it to
>> the ring page instead of doing it the other way round as today.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>=20
> Acked-by: Roger Pau Monn=C3=A9 <roger.pau@citrx.com>
>=20
> Thanks!
>=20
> One unrelated comment below.
>=20

=2E..

>> @@ -798,7 +801,9 @@ static int blkif_queue_rw_req(struct request *req,=
 struct blkfront_ring_info *ri
>>   		ring_req->u.rw.nr_segments =3D num_grant;
>>   		if (unlikely(require_extra_req)) {
>>   			extra_id =3D blkif_ring_get_request(rinfo, req,
>> -							  &extra_ring_req);
>> +							  &final_extra_ring_req);
>> +			extra_ring_req =3D &rinfo->shadow[extra_id].req;
>=20
> I'm slightly confused about this extra request stuff because I cannot
> find any check that asserts we have two empty slots on the ring before
> getting here (I only see a RING_FULL check in blkif_queue_rq).
>=20
> This is AFAIK only used on Arm when guest page size > 4KB.

I agree that this is a bug and should be fixed.


Juergen

--------------394D9FD2988C5A38C6586243
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------394D9FD2988C5A38C6586243--

--V2YEAoLTDoiLiUaHWQ3PyouYqQ5WXYqkP--

--rmyaqJHSnZ9Q2teyceTX9GLRzbIdvZGdC
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDoVQsFAwAAAAAACgkQsN6d1ii/Ey8N
3wf9EH4Rre+cHR2SHXBP//TGxZRVnHAgv6Coa8591dXk0ZDOKH8as41kE6KLMIA7PewKK+U9J56F
YFGpBRgVFsheOz+rqRB3xEPRA/bxZjE+ADfWDuB+10JHodllNpWODj8NH34JVTLxpmnXxa1e9hkg
s7GTFN6ycEaH7GOz6z0r8Hlap+ErnafsF6/RKIPBSz6DC3rSafuUjW6z6HBkHJGKmI0r7jd+9ygR
T2w6h+jdWhr5r4Zru5rCUXQfTI4S/XeEH+KphbRaIS/dHDsqGJ7QUf2rw9vCc4ZJIpSey4Qp3DVJ
XbQvEeikehlBeuGQeCwRT0pbZ8z7wA17wWCZB6iQGw==
=x9l4
-----END PGP SIGNATURE-----

--rmyaqJHSnZ9Q2teyceTX9GLRzbIdvZGdC--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 13:58:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 13:58:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153689.283921 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1r1d-0005KP-SP; Fri, 09 Jul 2021 13:58:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153689.283921; Fri, 09 Jul 2021 13:58:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1r1d-0005KI-PS; Fri, 09 Jul 2021 13:58:41 +0000
Received: by outflank-mailman (input) for mailman id 153689;
 Fri, 09 Jul 2021 13:58:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0kUe=MB=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m1r1c-0005K7-3j
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 13:58:40 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4b31c698-3235-4ce2-b509-685d633383e9;
 Fri, 09 Jul 2021 13:58:39 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 742A722180;
 Fri,  9 Jul 2021 13:58:38 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 3D7DD137F8;
 Fri,  9 Jul 2021 13:58:38 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id l3W+DQ5W6GCYeQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 09 Jul 2021 13:58:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4b31c698-3235-4ce2-b509-685d633383e9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1625839118; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=TP1/uoVP2wkmjJxosE1T60JaJRCCcXfD2nkG/A4nXMI=;
	b=c2FLhMJ8+yG3MTvCaSzH5E4acsH8MFSWwJ3O1uxntsY5+2FefFEGzc2l9qc1l305EysCBv
	0XzaKsaaGYVuYXjWWYCbkXYO0gyM5wdc3eoAl783b0AZhdfY9hmQRG6mgiCgz1+Y/LjuoE
	JF/qPVWOwYEk+aXuDVLSWumr7vw6BTI=
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
To: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Jens Axboe <axboe@kernel.dk>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com> <YOgZ/lzDIlzIxCZp@Air-de-Roger>
From: Juergen Gross <jgross@suse.com>
Message-ID: <4f460d31-c4da-8a58-8ee5-7735f5260f08@suse.com>
Date: Fri, 9 Jul 2021 15:58:37 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <YOgZ/lzDIlzIxCZp@Air-de-Roger>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="PtD6XltbThet5UCMvmi5pahWMOzO45Xvp"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--PtD6XltbThet5UCMvmi5pahWMOzO45Xvp
Content-Type: multipart/mixed; boundary="S35JlfSQdS3KAz9fiFZDLgLQ5ZAlpJMxS";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Jens Axboe <axboe@kernel.dk>
Message-ID: <4f460d31-c4da-8a58-8ee5-7735f5260f08@suse.com>
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com> <YOgZ/lzDIlzIxCZp@Air-de-Roger>
In-Reply-To: <YOgZ/lzDIlzIxCZp@Air-de-Roger>

--S35JlfSQdS3KAz9fiFZDLgLQ5ZAlpJMxS
Content-Type: multipart/mixed;
 boundary="------------15EFA2D45E58C234A1B0B486"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------15EFA2D45E58C234A1B0B486
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 09.07.21 11:42, Roger Pau Monn=C3=A9 wrote:
> On Thu, Jul 08, 2021 at 02:43:45PM +0200, Juergen Gross wrote:
>> Today blkfront will trust the backend to send only sane response data.=

>> In order to avoid privilege escalations or crashes in case of maliciou=
s
>> backends verify the data to be within expected limits. Especially make=

>> sure that the response always references an outstanding request.
>>
>> Introduce a new state of the ring BLKIF_STATE_ERROR which will be
>> switched to in case an inconsistency is being detected. Recovering fro=
m
>> this state is possible only via removing and adding the virtual device=

>> again (e.g. via a suspend/resume cycle).
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>=20
> Acked-by: Roger Pau Monn=C3=A9 <roger.pau@citrix.com>

>> @@ -1555,11 +1561,17 @@ static irqreturn_t blkif_interrupt(int irq, vo=
id *dev_id)
>>  =20
>>   	spin_lock_irqsave(&rinfo->ring_lock, flags);
>>    again:
>> -	rp =3D rinfo->ring.sring->rsp_prod;
>> -	rmb(); /* Ensure we see queued responses up to 'rp'. */
>> +	rp =3D READ_ONCE(rinfo->ring.sring->rsp_prod);
>> +	virt_rmb(); /* Ensure we see queued responses up to 'rp'. */
>=20
> Is the READ_ONCE strictly needed? Doesn't the barrier prevent rp from
> not being loaded at this point?

I asked Jan the same and he didn't want to rule that out. Additionally
the READ_ONCE() helps against (rather improbable) load tearing of the
compiler.

>> +		op =3D rinfo->shadow[id].req.operation;
>> +		if (op =3D=3D BLKIF_OP_INDIRECT)
>> +			op =3D rinfo->shadow[id].req.u.indirect.indirect_op;
>> +		if (bret.operation !=3D op) {
>> +			pr_alert("%s: response has wrong operation (%u instead of %u)\n",
>> +				 info->gd->disk_name, bret.operation, op);
>=20
> You could also use op_name here, but I guess this could mask the
> operation as 'unknown' for any number out of the defined ones.

This case shouldn't happen normally, so having the numerical value is
enough and will help for hiding any undefined op.

>> @@ -1635,8 +1662,8 @@ static irqreturn_t blkif_interrupt(int irq, void=
 *dev_id)
>>   		case BLKIF_OP_READ:
>>   		case BLKIF_OP_WRITE:
>>   			if (unlikely(bret.status !=3D BLKIF_RSP_OKAY))
>> -				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
>> -					"request: %x\n", bret.status);
>> +				dev_dbg_ratelimited(&info->xbdev->dev,
>> +					"Bad return from blkdev data request: %x\n", bret.status);
>=20
> Since you are touching the line, could you use %#x here? It's IMO not
> obvious from the context this status will be printed in hex base. Also
> bret.status parameter could be split into a newline.

Fine with me.


Juergen

--------------15EFA2D45E58C234A1B0B486
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------15EFA2D45E58C234A1B0B486--

--S35JlfSQdS3KAz9fiFZDLgLQ5ZAlpJMxS--

--PtD6XltbThet5UCMvmi5pahWMOzO45Xvp
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDoVg0FAwAAAAAACgkQsN6d1ii/Ey8r
5Qf/fnwieeILe/0AWJq3TSZW//Hls69d7iMLWayHcIvKzJT/O0ycZLRSEwYdoxWuqQuqXI4kOoW+
cTsx5YLrkLc1qHWBhEwjV0SA+56z+w3U0FNaZ0URgGEXOqWeCil5RSGvXSPIVTSHQTRrL9sK2sct
s9FSsxQd13cN4qiYhclm0PGuCdNjXFZe8Da0S4CGNzZuQ8kG7djtPpTVjtgfHYo5aAdZIBoIkUT9
JNr43Q+wJfO/8GDGnkMWlimzTPuUtwYRxHAb3nDHPhlRaagY+xcldl70oOy9j7afzlcWzngRHFZo
Obl8YWBtkze41hp5T86JhzX8vonfsoE6e0ci8BVmsA==
=jZIg
-----END PGP SIGNATURE-----

--PtD6XltbThet5UCMvmi5pahWMOzO45Xvp--


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 14:07:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 14:07:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153696.283933 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1r9g-00070x-OB; Fri, 09 Jul 2021 14:07:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153696.283933; Fri, 09 Jul 2021 14:07:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1r9g-00070q-Kq; Fri, 09 Jul 2021 14:07:00 +0000
Received: by outflank-mailman (input) for mailman id 153696;
 Fri, 09 Jul 2021 14:06:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=AxIF=MB=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1r9e-00070i-KN
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 14:06:58 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.21])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8fa7647f-a8b2-4c40-897d-7f9966856e85;
 Fri, 09 Jul 2021 14:06:57 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx69E6tf3k
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 9 Jul 2021 16:06:55 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8fa7647f-a8b2-4c40-897d-7f9966856e85
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625839615;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=urRQ9cDz0GYm7h6Wbhvh0nAibRF5M2Xlo4EVIkBq0KU=;
    b=R4ogQxmTR2nUjZxQ9wQuCDlgazxrCxS7dcJPJs6tPdnxgv+l56UnDpdaZqtOJ4u+bT
    Zoba3QYdaKlmJqULiXKqjhJrer3m+n0PCabzU0ImcGQcklmfaKLU11OyKvEJIHMUh+HY
    MfNV6JdeZQDct7BQ3qSn5+oE5d6uxD499CldE40aX0uSEUfaw+gaD6eIuDfztMFUbd2U
    N8ih2y9jw1IuSxcl4AbCOLQwI224n1VcSJef9EWrBCpVOASLDaTyE31I2MorFXs2sRfa
    1G0nHAYBuU561aM44ULvgASTXR41vKi1pSBglyh9mZ/z7Obkmklw/IilPNSe5te9d/G/
    +mwg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1] automation: add meson and ninja to tumbleweed container
Date: Fri,  9 Jul 2021 16:06:53 +0200
Message-Id: <20210709140653.14220-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

qemu uses meson as for configuration, and requires ninja for building.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/build/suse/opensuse-tumbleweed.dockerfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/automation/build/suse/opensuse-tumbleweed.dockerfile b/automation/build/suse/opensuse-tumbleweed.dockerfile
index 3965e7f9cd..be5ddb0d98 100644
--- a/automation/build/suse/opensuse-tumbleweed.dockerfile
+++ b/automation/build/suse/opensuse-tumbleweed.dockerfile
@@ -48,8 +48,10 @@ RUN zypper install -y --no-recommends \
         libzstd-devel \
         lzo-devel \
         make \
+        meson \
         nasm \
         ncurses-devel \
+        ninja \
         ocaml \
         ocaml-findlib-devel \
         ocaml-ocamlbuild \


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 14:33:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 14:33:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153702.283944 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rYl-0001uV-ST; Fri, 09 Jul 2021 14:32:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153702.283944; Fri, 09 Jul 2021 14:32:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rYl-0001uO-PQ; Fri, 09 Jul 2021 14:32:55 +0000
Received: by outflank-mailman (input) for mailman id 153702;
 Fri, 09 Jul 2021 14:32:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=AxIF=MB=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1rYk-0001uH-P5
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 14:32:54 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.20])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8aad459d-e0c2-11eb-85f4-12813bfff9fa;
 Fri, 09 Jul 2021 14:32:53 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx69EWpf9D
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 9 Jul 2021 16:32:51 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8aad459d-e0c2-11eb-85f4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625841171;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=wJEuN7IcmG/orFXDSp2phKEUtyHRKhzgT7wACeQ3PXE=;
    b=Izj3QclkbYUiuesbLn9GaB0SYjXOB/3JIw5qx40LkBNKgnge8Zger7bNVMS7Snd+bO
    2wiDXJ3Twkbu2fDh5up3Zx7JiDAryQ5oXuLmj4b9w3faUjHcRaR5PLIkJMa9U+TVt//M
    oCE1QyVreoCpVg8+620am0C3/OSKDeEnNcEMRXomXUvzjzexf79Art2+pWdgwKewHgwd
    +OeUW6Wg0FNShAD0iXqeIW2ZdFzNI35IxiPLIie/RuC3Sp/kj3cHJ2/OdEWOsCXIb9G2
    3F9GBT4fzrJir67+RvZAQyS3dxnvb1QPQnt5QHzi5dV5WCWYzITpYDSgIFNDMC4as6li
    nIOQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1 1/2] automation: provide SDL and SDL2 in opensuse images
Date: Fri,  9 Jul 2021 16:32:47 +0200
Message-Id: <20210709143248.20310-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
Use pkgconfig() as resolvable instead of a rpm name, the latter may change.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/build/suse/opensuse-leap.dockerfile       | 3 ++-
 automation/build/suse/opensuse-tumbleweed.dockerfile | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/automation/build/suse/opensuse-leap.dockerfile b/automation/build/suse/opensuse-leap.dockerfile
index 03f8a7acad..2f92392d76 100644
--- a/automation/build/suse/opensuse-leap.dockerfile
+++ b/automation/build/suse/opensuse-leap.dockerfile
@@ -31,7 +31,6 @@ RUN zypper install -y --no-recommends \
         glibc-devel-32bit \
         gzip \
         hostname \
-        libSDL2-devel \
         libaio-devel \
         libbz2-devel \
         libext2fs-devel \
@@ -56,6 +55,8 @@ RUN zypper install -y --no-recommends \
         pandoc \
         patch \
         pkg-config \
+        'pkgconfig(sdl)' \
+        'pkgconfig(sdl2)' \
         python \
         python-devel \
         python3-devel \
diff --git a/automation/build/suse/opensuse-tumbleweed.dockerfile b/automation/build/suse/opensuse-tumbleweed.dockerfile
index be5ddb0d98..ed10cd8a22 100644
--- a/automation/build/suse/opensuse-tumbleweed.dockerfile
+++ b/automation/build/suse/opensuse-tumbleweed.dockerfile
@@ -31,7 +31,6 @@ RUN zypper install -y --no-recommends \
         glibc-devel-32bit \
         gzip \
         hostname \
-        libSDL2-devel \
         libaio-devel \
         libbz2-devel \
         libext2fs-devel \
@@ -59,6 +58,8 @@ RUN zypper install -y --no-recommends \
         pandoc \
         patch \
         pkg-config \
+        'pkgconfig(sdl)' \
+        'pkgconfig(sdl2)' \
         python-devel \
         python3-devel \
         systemd-devel \


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 14:33:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 14:33:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153703.283955 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rYn-0002Ah-4B; Fri, 09 Jul 2021 14:32:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153703.283955; Fri, 09 Jul 2021 14:32:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rYn-0002Aa-0e; Fri, 09 Jul 2021 14:32:57 +0000
Received: by outflank-mailman (input) for mailman id 153703;
 Fri, 09 Jul 2021 14:32:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=AxIF=MB=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m1rYm-0001uz-1a
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 14:32:56 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.24])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 907767b0-a386-473a-a826-5750a5ccd9c9;
 Fri, 09 Jul 2021 14:32:54 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx69EWrf9E
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 9 Jul 2021 16:32:53 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 907767b0-a386-473a-a826-5750a5ccd9c9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1625841173;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=ZvpxNsh5S6aCi3dz5XgIxfqvAswKpjs7QNEeoF8oZA0=;
    b=T467g7uSGO+0+5e5Hl/Snsp1hO6sxoXMKAZtwD/OHAs9i8hg2SXfprViFby9uTESAv
    xuicOzzhebJGQDrULCOj0Opv+mB8ibftLAQM9TS/MyWVK/L75+sqcfXgwzpFgSrtmYLN
    i4ibqd64sO+TGnpFjyJpIPSFXGWdmBffR6C96paX8rFw6PQHSbTqTZzAfB63HHHJ5R3J
    /4EbM0livY+GFOeYz7VuKHPyxHhXxFLVg14AvYejy7x/0pq7HnG5FkfDH3Y1sCd4fqye
    x1wm5DtY4CcBrgs4qvfAlKXYTZfNic707zDKFnU4aLnBix9kqRjJFo8Kcb3gd42/KJVc
    ckHw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs3rVb2Qcstn6hLmi/A5ONQi+eEunNNoWD5g0T8"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH v1 2/2] automation: provide pciutils in opensuse packages
Date: Fri,  9 Jul 2021 16:32:48 +0200
Message-Id: <20210709143248.20310-2-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210709143248.20310-1-olaf@aepfle.de>
References: <20210709143248.20310-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 automation/build/suse/opensuse-leap.dockerfile       | 1 +
 automation/build/suse/opensuse-tumbleweed.dockerfile | 1 +
 2 files changed, 2 insertions(+)

diff --git a/automation/build/suse/opensuse-leap.dockerfile b/automation/build/suse/opensuse-leap.dockerfile
index 2f92392d76..5e8111f40b 100644
--- a/automation/build/suse/opensuse-leap.dockerfile
+++ b/automation/build/suse/opensuse-leap.dockerfile
@@ -55,6 +55,7 @@ RUN zypper install -y --no-recommends \
         pandoc \
         patch \
         pkg-config \
+        'pkgconfig(libpci)' \
         'pkgconfig(sdl)' \
         'pkgconfig(sdl2)' \
         python \
diff --git a/automation/build/suse/opensuse-tumbleweed.dockerfile b/automation/build/suse/opensuse-tumbleweed.dockerfile
index ed10cd8a22..b165c48245 100644
--- a/automation/build/suse/opensuse-tumbleweed.dockerfile
+++ b/automation/build/suse/opensuse-tumbleweed.dockerfile
@@ -58,6 +58,7 @@ RUN zypper install -y --no-recommends \
         pandoc \
         patch \
         pkg-config \
+        'pkgconfig(libpci)' \
         'pkgconfig(sdl)' \
         'pkgconfig(sdl2)' \
         python-devel \


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 14:54:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 14:54:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153715.283970 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rtD-00059q-2y; Fri, 09 Jul 2021 14:54:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153715.283970; Fri, 09 Jul 2021 14:54:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rtC-00059j-VV; Fri, 09 Jul 2021 14:54:02 +0000
Received: by outflank-mailman (input) for mailman id 153715;
 Fri, 09 Jul 2021 14:54:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1rtB-00059W-0I; Fri, 09 Jul 2021 14:54:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1rtA-0002aQ-R4; Fri, 09 Jul 2021 14:54:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1rtA-0008O2-Is; Fri, 09 Jul 2021 14:54:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1rtA-00082m-IQ; Fri, 09 Jul 2021 14:54:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NbZew7QUgWQmUp7rSv+DOgXSModifhB9ueCOTlF89c0=; b=dGRIbot1q3sH2nKuyPTVKvcvs9
	6jVg1JxxxFWm+IBygGpEx+UBwbezWBj0YYGG60oEKBLlwGXquuf+R/4sZY5zB9rYx0nMQbfZF7Vxk
	tZgpNZjjhTdCDUYDzGDAb8/tQAP2TOQRWVzAacG8wqOtdTXt48do12notCXfRmNosctw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163466-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163466: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=12f96b06118e5d9061cf94724666eb254a150f65
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 14:54:00 +0000

flight 163466 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163466/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              12f96b06118e5d9061cf94724666eb254a150f65
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  364 days
Failing since        151818  2020-07-11 04:18:52 Z  363 days  355 attempts
Testing same since   163466  2021-07-09 04:18:51 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64171 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 14:58:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 14:58:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153722.283984 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rxw-0005pR-Mn; Fri, 09 Jul 2021 14:58:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153722.283984; Fri, 09 Jul 2021 14:58:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1rxw-0005pK-Jh; Fri, 09 Jul 2021 14:58:56 +0000
Received: by outflank-mailman (input) for mailman id 153722;
 Fri, 09 Jul 2021 14:58:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1rxv-0005pE-Ri
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 14:58:55 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1rxI-0002fX-Sa; Fri, 09 Jul 2021 14:58:16 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1rxI-00050O-LC; Fri, 09 Jul 2021 14:58:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Ior2SaE97cRM43UQs43PwiSC3TTJ9FyWh2BNEejkN0M=; b=KklH+ZbbF3R/Sxn3T/9yxUgAZA
	P088sSUW3Ig5n6PerzGoyUgsd+a8+T3pOD4iWfLLVdO19S/Wp4GdMFEu99aX7KbveE8OWGfNrPU1d
	Z3Q8Y2JT2Nlx521hh+56FNB8YVDVQhiPuR/9xseCM/NtBEFXNqNo0ERKiyE8UB8fy7WQ=;
Subject: Re: [PATCH v4 0/5] Fix redefinition errors for toolstack libs
To: Costin Lupu <costin.lupu@cs.pub.ro>, xen-devel@lists.xenproject.org
Cc: Tim Deegan <tim@xen.org>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Christian Lindig <christian.lindig@citrix.com>,
 David Scott <dave@recoil.org>, Julien Grall <jgrall@amazon.com>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
From: Julien Grall <julien@xen.org>
Message-ID: <fd842748-18ca-c86d-f961-f2f82971e239@xen.org>
Date: Fri, 9 Jul 2021 15:58:14 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <cover.1623155575.git.costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Costin,

On 08/06/2021 13:35, Costin Lupu wrote:
> For replication I used gcc 10.3 on an Alpine system. In order to replicate the
> redefinition error for PAGE_SIZE one should install the 'fortify-headers'
> package which will change the chain of included headers by indirectly including
> /usr/include/limits.h where PAGE_SIZE and PATH_MAX are defined.
> 
> Changes since v1:
> - Use XC_PAGE_* macros instead of PAGE_* macros
> 
> Changes since v2:
> - Define KDD_PAGE_* macros for changes in debugger/kdd/
> 
> Changes since v3:
> - Use sysconf(_SC_PAGESIZE) instead of getpagesize()
> 
> Costin Lupu (5):
>    tools/debugger: Fix PAGE_SIZE redefinition error
>    tools/libfsimage: Fix PATH_MAX redefinition error
>    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
>    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
>    tools/ocaml: Fix redefinition errors

Ian gave his acked-by on IRC, so I will commit them in a bit.

Cheers,

> 
>   tools/debugger/kdd/kdd-xen.c                  | 15 ++++------
>   tools/debugger/kdd/kdd.c                      | 19 ++++++-------
>   tools/debugger/kdd/kdd.h                      |  7 +++++
>   tools/libfsimage/ext2fs/fsys_ext2fs.c         |  2 ++
>   tools/libfsimage/reiserfs/fsys_reiserfs.c     |  2 ++
>   tools/libs/foreignmemory/core.c               |  2 +-
>   tools/libs/foreignmemory/freebsd.c            | 10 +++----
>   tools/libs/foreignmemory/linux.c              | 23 +++++++--------
>   tools/libs/foreignmemory/minios.c             |  2 +-
>   tools/libs/foreignmemory/netbsd.c             | 10 +++----
>   tools/libs/foreignmemory/private.h            |  9 +-----
>   tools/libs/gnttab/freebsd.c                   | 28 +++++++++----------
>   tools/libs/gnttab/linux.c                     | 28 +++++++++----------
>   tools/libs/gnttab/netbsd.c                    | 23 +++++++--------
>   tools/ocaml/libs/xc/xenctrl_stubs.c           | 10 +++----
>   .../ocaml/libs/xentoollog/xentoollog_stubs.c  |  4 +++
>   tools/ocaml/libs/xl/xenlight_stubs.c          |  4 +++
>   17 files changed, 98 insertions(+), 100 deletions(-)
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:09:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:09:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153729.283997 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1s7c-0007LV-NW; Fri, 09 Jul 2021 15:08:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153729.283997; Fri, 09 Jul 2021 15:08:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1s7c-0007LO-KT; Fri, 09 Jul 2021 15:08:56 +0000
Received: by outflank-mailman (input) for mailman id 153729;
 Fri, 09 Jul 2021 15:08:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1s7b-0007LI-5f
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:08:55 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1s7U-0002rj-ES; Fri, 09 Jul 2021 15:08:48 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1s7U-0005xM-7j; Fri, 09 Jul 2021 15:08:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:References:Cc:To:From:Subject;
	bh=ZBbcOx7dwWouv7UKAjyflo65nfjzHnPnyXki2CJKyCo=; b=63rajmraZhRyh/PF9//YW6afNj
	kjYYvuaZIQwkvONh/mahQjVzlGeutuzUNTVPLD0KAcOBWiwOW5a/OtYvG2Yoqcnbe3/k+1DHKk4jW
	bYWEHFfH1228Qrz1png2sTp0o+cM60SYHcQrfZyaI7pGvwEaxUl0XkQqIuZ/9ojTe9A8=;
Subject: Re: [PATCH v4 0/5] Fix redefinition errors for toolstack libs
From: Julien Grall <julien@xen.org>
To: Costin Lupu <costin.lupu@cs.pub.ro>, xen-devel@lists.xenproject.org
Cc: Tim Deegan <tim@xen.org>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Christian Lindig <christian.lindig@citrix.com>,
 David Scott <dave@recoil.org>, Julien Grall <jgrall@amazon.com>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <fd842748-18ca-c86d-f961-f2f82971e239@xen.org>
Message-ID: <9da5d95a-643a-d6dd-dd8e-dbad3c2b323a@xen.org>
Date: Fri, 9 Jul 2021 16:08:46 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <fd842748-18ca-c86d-f961-f2f82971e239@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi,

On 09/07/2021 15:58, Julien Grall wrote:
> Hi Costin,
> 
> On 08/06/2021 13:35, Costin Lupu wrote:
>> For replication I used gcc 10.3 on an Alpine system. In order to 
>> replicate the
>> redefinition error for PAGE_SIZE one should install the 'fortify-headers'
>> package which will change the chain of included headers by indirectly 
>> including
>> /usr/include/limits.h where PAGE_SIZE and PATH_MAX are defined.
>>
>> Changes since v1:
>> - Use XC_PAGE_* macros instead of PAGE_* macros
>>
>> Changes since v2:
>> - Define KDD_PAGE_* macros for changes in debugger/kdd/
>>
>> Changes since v3:
>> - Use sysconf(_SC_PAGESIZE) instead of getpagesize()
>>
>> Costin Lupu (5):
>>    tools/debugger: Fix PAGE_SIZE redefinition error
>>    tools/libfsimage: Fix PATH_MAX redefinition error
>>    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
>>    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
>>    tools/ocaml: Fix redefinition errors
> 
> Ian gave his acked-by on IRC, so I will commit them in a bit.

The last patch technically needed an acked-by from Christian. AFAICT, he 
gave it on v1 [1] but you didn't retain it as you switch to XC_PAGE_SHIFT.

The change looks non-controversial so I went ahead with committing 
because it has sit for a while on the ML and it would help building Xen 
new containers we are about to add in the CI.

Cheers,

[1] 0b82dc88-fe59-3074-471f-2e36ba3b840e@cs.pub.ro

> 
> Cheers,
> 
>>
>>   tools/debugger/kdd/kdd-xen.c                  | 15 ++++------
>>   tools/debugger/kdd/kdd.c                      | 19 ++++++-------
>>   tools/debugger/kdd/kdd.h                      |  7 +++++
>>   tools/libfsimage/ext2fs/fsys_ext2fs.c         |  2 ++
>>   tools/libfsimage/reiserfs/fsys_reiserfs.c     |  2 ++
>>   tools/libs/foreignmemory/core.c               |  2 +-
>>   tools/libs/foreignmemory/freebsd.c            | 10 +++----
>>   tools/libs/foreignmemory/linux.c              | 23 +++++++--------
>>   tools/libs/foreignmemory/minios.c             |  2 +-
>>   tools/libs/foreignmemory/netbsd.c             | 10 +++----
>>   tools/libs/foreignmemory/private.h            |  9 +-----
>>   tools/libs/gnttab/freebsd.c                   | 28 +++++++++----------
>>   tools/libs/gnttab/linux.c                     | 28 +++++++++----------
>>   tools/libs/gnttab/netbsd.c                    | 23 +++++++--------
>>   tools/ocaml/libs/xc/xenctrl_stubs.c           | 10 +++----
>>   .../ocaml/libs/xentoollog/xentoollog_stubs.c  |  4 +++
>>   tools/ocaml/libs/xl/xenlight_stubs.c          |  4 +++
>>   17 files changed, 98 insertions(+), 100 deletions(-)
>>
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:11:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:11:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153740.284032 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sAR-0000Vo-Dr; Fri, 09 Jul 2021 15:11:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153740.284032; Fri, 09 Jul 2021 15:11:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sAR-0000Vh-Ak; Fri, 09 Jul 2021 15:11:51 +0000
Received: by outflank-mailman (input) for mailman id 153740;
 Fri, 09 Jul 2021 15:11:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=bo+/=MB=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m1sAP-0000VI-Me
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:11:49 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.42]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fae34f96-e0c7-11eb-85f9-12813bfff9fa;
 Fri, 09 Jul 2021 15:11:48 +0000 (UTC)
Received: from AM6PR0202CA0054.eurprd02.prod.outlook.com
 (2603:10a6:20b:3a::31) by HE1PR08MB2666.eurprd08.prod.outlook.com
 (2603:10a6:7:2f::28) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.32; Fri, 9 Jul
 2021 15:11:46 +0000
Received: from AM5EUR03FT038.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:3a:cafe::79) by AM6PR0202CA0054.outlook.office365.com
 (2603:10a6:20b:3a::31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Fri, 9 Jul 2021 15:11:46 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT038.mail.protection.outlook.com (10.152.17.118) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Fri, 9 Jul 2021 15:11:45 +0000
Received: ("Tessian outbound 329e6475aa72:v98");
 Fri, 09 Jul 2021 15:11:45 +0000
Received: from 73943b131325.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 C98C05F4-34C3-44E4-94F8-3867ADE80521.1; 
 Fri, 09 Jul 2021 15:11:03 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 73943b131325.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 09 Jul 2021 15:11:03 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PR3PR08MB5770.eurprd08.prod.outlook.com (2603:10a6:102:87::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Fri, 9 Jul
 2021 15:11:01 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%8]) with mapi id 15.20.4308.023; Fri, 9 Jul 2021
 15:11:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fae34f96-e0c7-11eb-85f9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ly/jGwJSTuKTo5IM7EFHb6rlW8MzAtRJMEWFJ8/GNTc=;
 b=IQ7QTyFfobR0BTVewjgHipRRT47aAkAM9lab/+i3pd6gwRnHEJgTargPxLyBrupWm3upQd3Fh9VUq0mSh7L1apSeDwVe6bTiyXYsX5aDApwOUHYOpsXE2DHnRD4txVaFiqkMXvnq/9IHC8+/lgPF6ms2LIdBOJGodxGO31an2Fk=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 19aa48cda8627b84
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EnmxTgv7kxm7v2qBdIjvkYQzrT8umNs+4ln/SE8wu6vUlchvaBzckFma2fKVhkW7E93vPNRNoqqpI+uO3IGj1uxa6VpHE2StKVHja9mIoArEi1tJV19nlmhixCjirCdxFUTGE81ad7Ol0L+YJoHd8M9cCgu4Fet+ttvT2R180M9m1nWdyxwn9j/GT3H/YHfs2U+ITZisSXo9f6/mtW3ueRjaHv11aU2Z38CLDpuF6TcCzu43S79/kpSIGuPeRV9EpB2AaVFEbBAVSSz9f50cxZtm9aM5xoagXGastQVCerOS6+ovApTR2QgoERqgKMkZWZakyS5GPSz00SNZPygaNA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ly/jGwJSTuKTo5IM7EFHb6rlW8MzAtRJMEWFJ8/GNTc=;
 b=WoGZHmA3/NSqh2a63BUX/4zPfo04Q71PtoSJ2fe/vTDl5y7pgqhtRSHRFKykKMsUdgbJqRcXl0YadqUwZTiOBa+sRvsoXXoeK5EWl2LopRUpa6Vf2+pZWJ0UHS8qDmFZQ7b3YQ1uhiOjAQE0gL0o3l2uKu1LzAasWCSdAIQjKNipiSQ/JvwgzC73z7drdEDQgjphQQkzGlVnKnj1PSnMlg/aDoTalFO8VvdQSFw5zFWwe3dOynDYR+PUmz2pU9qRz8fM6MJUQAaLyO31dWvwNhCBd6dmD0jQphiejgRrZi2KMYu/D7f5uE9cLSMHEXyoGpjefAZaS8qiXz7Dhxpw+Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ly/jGwJSTuKTo5IM7EFHb6rlW8MzAtRJMEWFJ8/GNTc=;
 b=IQ7QTyFfobR0BTVewjgHipRRT47aAkAM9lab/+i3pd6gwRnHEJgTargPxLyBrupWm3upQd3Fh9VUq0mSh7L1apSeDwVe6bTiyXYsX5aDApwOUHYOpsXE2DHnRD4txVaFiqkMXvnq/9IHC8+/lgPF6ms2LIdBOJGodxGO31an2Fk=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Michal Orzel <Michal.Orzel@arm.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Stefano
 Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr
 Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
Thread-Topic: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
Thread-Index: AQHXdL+w0n2h/dQ/DEuP6N84Q1GgYKs6v8AA
Date: Fri, 9 Jul 2021 15:11:01 +0000
Message-ID: <FB2FEF37-4BA3-41C0-B517-3834D7B1EAB9@arm.com>
References: <20210709124035.5520-1-michal.orzel@arm.com>
In-Reply-To: <20210709124035.5520-1-michal.orzel@arm.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 6ff2e220-b86a-49e6-834f-08d942ebddfc
x-ms-traffictypediagnostic: PR3PR08MB5770:|HE1PR08MB2666:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<HE1PR08MB2666BA4869BFB4B732EAB2C19D189@HE1PR08MB2666.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 GvaXmtd1T+QrYuzI/k31K+hh5p/OJIP2a8z99QP7mi+1FgjZP+C/EKxRbeUQ99LrOOqjp3at3oc8zUnXf8sslpkHqbCsrCSs9cHm2rFlJrZLsn1vQK2RtFDyqxhk1iRF4PSaMzYBKLq62y7khWD/ahmiVZivM5fpbrwdpc28XwiGd7HrLdrdJ/vf7cAB+5PeCM8o+x8cHN4yULGKYn9takDeAZDallJHE4/+N9bm8MkmZCpGk6lRgVbkgNxLD3RkMYiBysqprvNf2Nqpr88z/OzLsqzQBO66gMmXYm6qlu2OP0X29k4suvLgDzaanmufAT36WZgiXUGwUfi3VHnpPvuWR+CWl7Gq3h7PQbaCoApX5L3p2lI329r2jQkp/udBafq79zvp+knmeELVAj+LP/XHNOQBrGA+/ADYzU4vm+kKpwu8ZBR78f2oN4tFc17+sp4St8gm712JEtjdn+SZd1ZO4qI26eI0WCoechu2Bagaa6Z3urKMczgoebU5F0QMuruF4eUXH/tC6s8MYQBZYPAYc5ajoxfikcNeCVkhMRw8G9JH9lOebHRMvBMJ9KsJ3QMzdo4cv7Edz5xxe8qpAUOiGV+MzfuyDodA/jfhuUSJHfhzl37mG+dPr+ASlNp4laRQqm4E788tLNDK92WGsrinRLMTIQuejpqQsJnxFGP/PzAdmm2rRzG6pIE86Og1wv0E+68JruzCEJPLt4WWuQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(39850400004)(376002)(396003)(366004)(136003)(71200400001)(6862004)(86362001)(33656002)(6636002)(122000001)(2906002)(36756003)(6486002)(478600001)(53546011)(6506007)(76116006)(4326008)(37006003)(316002)(6512007)(91956017)(8676002)(5660300002)(64756008)(54906003)(186003)(38100700002)(66946007)(66556008)(83380400001)(2616005)(26005)(66476007)(8936002)(66446008)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?nZTwppuf+UR8Tn92xQ6eARDI1g/yEP5YpBj7oMg7kLfzj6EoHywnY6DjoQw1?=
 =?us-ascii?Q?mc9SLL6PGKinIvK0lhgRTb9EH0SDYlKFpzaphQia3ghdZjDx6PFBznV+iyZS?=
 =?us-ascii?Q?mQ24xIyYk3oOvQOfkAp0WSPPz0ayZmxqOILHonYSyr7najA/un70bVm2uzFj?=
 =?us-ascii?Q?C8RJVfAxnjPSZgBm6XyoWPEFcsHBoKhjJNZi9WTfBjl/NGKS0kEh3N2o6ZqW?=
 =?us-ascii?Q?L+HSDzKYdOpWoMTs0cPVIbw5r6FYei6vZCelJLSNJ753+G637ICQemiuZkk/?=
 =?us-ascii?Q?3Esn1TbkP2oFuuBcoXllhJmlqVmUuWsheTO99aQjireHooyRam0qVZOmUQAh?=
 =?us-ascii?Q?uw+/Bx1fe8eAO86+lM7+JCf3IdgtTsOo+2h5+WzG2YCBvRpScv5Ece0rSQgD?=
 =?us-ascii?Q?7DctNadm+Bsmesp8k4dPNBBPyXhHtB202pyVTUZqUw6VrgI9qkSsLm48vhTR?=
 =?us-ascii?Q?YV3pXomwX1UcwYwPz/kDbRucnbBwx8/K3q4lIHe51z/Q897wsFciytJCt5LA?=
 =?us-ascii?Q?KJdmvihL1qcH1m2oC9mt924WANdMgu7JDRCy1+lnN1JKSOZrHsOL8+VSL44z?=
 =?us-ascii?Q?z/H9dcYnUYQazSG1lzbwl2qUnHbPHJyIYBvaBBRzIeTsEJwv5dqwldGR5xdf?=
 =?us-ascii?Q?6IkwrkepdsFHhrCK3HinPUqtuPwxdQddvMhz6IS2dgpKKe9+cgdiuJnfJppb?=
 =?us-ascii?Q?lgEFVXusqBYT20o0KhypPqtC81idHhaZ629Zi7pYETxxDmVuesWeqwwuPyvj?=
 =?us-ascii?Q?od8ZO+05jkgTTzJZOedyGQCO1C1y+dl5wOQZzqcMX40et6vviwdy55vl2+8F?=
 =?us-ascii?Q?5DtGG0rDMu8lpOIzdFBR/xGrWyQvMviQtkwxfYBYmxuU6Lk+tSrhqCe0T5g8?=
 =?us-ascii?Q?phNdUnpbcdiqvnLD7Y6LPRNojSlmnQx6UD/Xw9I/tuzPr9uDJLTQz2koSQWf?=
 =?us-ascii?Q?JkZhJ5X+VSfefXGqo4ZnyJK+w8yBy+FlDdlqAqzJoBNOhw+Vn3sr49IiNxuF?=
 =?us-ascii?Q?jWcOODNijkPmUOs7C44L9Uh7Yyf5jRIHi000ppLM+OR3OjThtnzdcTImhwX7?=
 =?us-ascii?Q?SFq1u3NBa90gm/9SRZmzDCw/tXSthm2qmee+rajIyeQiiK7WNjBx7BplcCUd?=
 =?us-ascii?Q?KhnqnUsmmx3oSYCCLz+YuO/fRlKqcZoaH5QSUqwtqylnsfhLCtmoaUlDeYyl?=
 =?us-ascii?Q?/U2rdnhYWeq9AmZ0h/4fWDJy03NVpf3EM4kvjw1dWeLP3DFJXw0upjqi3YOu?=
 =?us-ascii?Q?Z5neDx78gx9og4ffdmruT5ZdCZSXuRWdhVF3ws6+2R89PJ0vLJhxhnuGNq3p?=
 =?us-ascii?Q?mzNqbpzz5aU4uHrM5RlUFIhb?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <40ADF417DEF1CA49A07497577745C937@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5770
Original-Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT038.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	9c3e4092-a9d0-4f57-2142-08d942ebc375
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	gbVmNCe5pCw/L93EonLp+nWfTKvTi274axpnSWRBwI56qh9tWGh+lXm8pP0DoNu3R8LGcQso3AibZ57ybC3s/njiEDmTdfAtWGOMR047z9Ny4blBju5CSD6bG4Yzg07tSoEtYQU93gP4IJY3xfoF+SKQ2f1g8iC4RGiwgQjIFgcvY9aFrFxiaEL82OG78CKnVW8hIHAshMmSIhaPK3nFeThcWhSl0pUAcgnsoXeVpFvud8Ea4HZsmkazbmit8+wsznE4YgbJ28PFJEFSL9wzXh0cRWYCPCYWXDpW8LdhI5OizljaIN+ILY50PIYNz/3/I4WGxDh080L9ieHbYGFCmlWkyD+qhd4auB4LiMYesw6JVNJ642zXE/svk9upqZwgK+w/VAM7FvcYx1tDwdkabxOftqkRrcfNpWXl9ch5S46VZTl9oDEewwRUe9Z0JwuumBHXf8Fs/trd1SxPOrOqbqcqmmduM9Ay7ezP5GNBw8jdHxEhBaNx4+OKep/trZ6HUxtvZtyjCGazK0w9mDSccaivA8AMaj9Xv4nU+TzT9sYtcY2Go+K2vqZ897hA/bd0qYzEBq01fCsXd+VdXyZ1vVxClIEPYJ+Yf9p4OwaFmz0IsAw+lys1wil6tK28bIVgipWg3YPWF81d/Rq/Auknup9Rvtp0qoJp9MDLfM5NZY4Yc8a5peQJkVWCVIhcqVLyVeGlbmPJ+AxN3VS9Re2Cyg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(376002)(396003)(39850400004)(36840700001)(46966006)(33656002)(316002)(6506007)(2616005)(26005)(47076005)(356005)(6636002)(8676002)(83380400001)(478600001)(336012)(81166007)(53546011)(5660300002)(82740400003)(82310400003)(37006003)(2906002)(70586007)(8936002)(4326008)(186003)(6862004)(36860700001)(107886003)(54906003)(6512007)(36756003)(86362001)(70206006)(6486002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 15:11:45.7977
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 6ff2e220-b86a-49e6-834f-08d942ebddfc
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT038.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2666

Hi Michal,

> On 9 Jul 2021, at 13:40, Michal Orzel <Michal.Orzel@arm.com> wrote:
>=20
> AArch64 system registers are 64bit whereas AArch32 ones
> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
> we should get rid of helpers READ/WRITE_SYSREG32
> in favour of using READ/WRITE_SYSREG.
>=20
> The last place in code making use of READ/WRITE_SYSREG32
> on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
> Implement a macro WRITE_SYSREG_SZ which expands as follows:
> -on arm64: WRITE_SYSREG
> -on arm32: WRITE_SYSREG{32/64}
>=20
> As there are no other places in the code using these helpers
> on arm64 - remove them.
>=20
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

Cheers
Bertrand

> ---
> Changes since v1:
> -implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
> ---
> xen/arch/arm/vcpreg.c               | 12 +++++++++++-
> xen/include/asm-arm/arm64/sysregs.h |  4 ----
> 2 files changed, 11 insertions(+), 5 deletions(-)
>=20
> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
> index f0cdcc8a54..10c4846954 100644
> --- a/xen/arch/arm/vcpreg.c
> +++ b/xen/arch/arm/vcpreg.c
> @@ -47,6 +47,16 @@
>  *
>  */
>=20
> +#ifdef CONFIG_ARM_64
> +#define WRITE_SYSREG_SZ(sz, val, sysreg)     WRITE_SYSREG(val, sysreg)
> +#else
> +/*
> + * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which impos=
es
> + * on the below macro to be defined like that as well.
> + */
> +#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysre=
g)
> +#endif
> +
> /* The name is passed from the upper macro to workaround macro expansion.=
 */
> #define TVM_REG(sz, func, reg...)                                        =
   \
> static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read) =
   \
> @@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##=
_t *r, bool read)    \
>     bool cache_enabled =3D vcpu_has_cache_enabled(v);                    =
     \
>                                                                          =
   \
>     GUEST_BUG_ON(read);                                                  =
   \
> -    WRITE_SYSREG##sz(*r, reg);                                          =
    \
> +    WRITE_SYSREG_SZ(sz, *r, reg);                                       =
    \
>                                                                          =
   \
>     p2m_toggle_cache(v, cache_enabled);                                  =
   \
>                                                                          =
   \
> diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/asm-arm/ar=
m64/sysregs.h
> index 077fd95fb7..795901e1ba 100644
> --- a/xen/include/asm-arm/arm64/sysregs.h
> +++ b/xen/include/asm-arm/arm64/sysregs.h
> @@ -87,10 +87,6 @@
>=20
> /* Access to system registers */
>=20
> -#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name))
> -
> -#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name)
> -
> #define WRITE_SYSREG64(v, name) do {                    \
>     uint64_t _r =3D v;                                    \
>     asm volatile("msr "__stringify(name)", %0" : : "r" (_r));       \
> --=20
> 2.29.0
>=20
>=20



From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:21:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:21:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153753.284054 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sJe-0002Bh-NW; Fri, 09 Jul 2021 15:21:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153753.284054; Fri, 09 Jul 2021 15:21:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sJe-0002Ba-Kb; Fri, 09 Jul 2021 15:21:22 +0000
Received: by outflank-mailman (input) for mailman id 153753;
 Fri, 09 Jul 2021 15:21:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sJd-0002BQ-Hx; Fri, 09 Jul 2021 15:21:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sJd-00035x-9c; Fri, 09 Jul 2021 15:21:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sJd-0000nX-2A; Fri, 09 Jul 2021 15:21:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sJd-0001PP-1e; Fri, 09 Jul 2021 15:21:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=UDI660XEgxjSyjQ2Ww3h2vGyLlzrc0YNKOtEwOP16Yw=; b=FV6ZM2rBTANVhWZrAB1HW5JsJW
	5jt5y/VXkxJqj1dplpCcm2rDMXWNz9+cuV3XyRMPqc+fUx+mdGyTmc6baRwTRU7uu42E2wUNNlXaU
	C89TrrOi56s56vmN/PFhhXqo3YigGKgbJLhzDGwf8O12AlJvKTNDXumxkRbcd7wO7Olg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163458-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163458: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
X-Osstest-Versions-That:
    xen=484910bf41fec2c80d79ed9c5c33831bee7318f0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 15:21:21 +0000

flight 163458 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163458/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa
baseline version:
 xen                  484910bf41fec2c80d79ed9c5c33831bee7318f0

Last test of basis   163436  2021-07-08 08:02:33 Z    1 days
Testing same since   163458  2021-07-08 23:09:08 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Olaf Hering <olaf@aepfle.de>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   484910bf41..0f435e2b58  0f435e2b58543f5baae96e17a10ae20d3dbc28fa -> master


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:21:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:21:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153758.284069 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sKB-0002n3-2T; Fri, 09 Jul 2021 15:21:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153758.284069; Fri, 09 Jul 2021 15:21:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sKA-0002mw-Vm; Fri, 09 Jul 2021 15:21:54 +0000
Received: by outflank-mailman (input) for mailman id 153758;
 Fri, 09 Jul 2021 15:21:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sK9-0002me-US; Fri, 09 Jul 2021 15:21:53 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sK9-00036m-OQ; Fri, 09 Jul 2021 15:21:53 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sK9-0000o3-FS; Fri, 09 Jul 2021 15:21:53 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1sK9-0002By-Ew; Fri, 09 Jul 2021 15:21:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=IZX2WXjRj6OcwiLYSZVnnO38w3WxSJ3izdBlOizSmSw=; b=C38RdnFE98hB2drEXlS/2JfxRr
	lV76OkDMH122SRaGjVgd5CTTS8ED01NqUiE5otsLlTcUzH7SC6rd2jCRQm0ZO/1pBhfjQhbd7ap2X
	w/28OblU6LhQOS2upF5JUrCqUgpcVfemRNnnKpf7Ejcg2IuAu35W5kZT/ugw49XOesNM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163474-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163474: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=140931aa2894991d9d6f1b2ba6ca275e1bc56259
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 15:21:53 +0000

flight 163474 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163474/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  140931aa2894991d9d6f1b2ba6ca275e1bc56259

Last test of basis   163468  2021-07-09 07:00:28 Z    0 days
Testing same since   163474  2021-07-09 12:00:25 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   140931aa28..6de3e5fce5  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:21:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:21:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153760.284082 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sKC-000340-C6; Fri, 09 Jul 2021 15:21:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153760.284082; Fri, 09 Jul 2021 15:21:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sKC-00033r-7o; Fri, 09 Jul 2021 15:21:56 +0000
Received: by outflank-mailman (input) for mailman id 153760;
 Fri, 09 Jul 2021 15:21:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1sKA-0002mo-9t
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:21:54 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1sK9-00036i-6Z; Fri, 09 Jul 2021 15:21:53 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1sK9-0006zO-0e; Fri, 09 Jul 2021 15:21:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=8TWwdOhogmWcktj/If7KTHO0YXBNsrc5h20i6FqZuY0=; b=OtrtfiCFNjmC2Oycyu/+bje5o9
	5z4OlQHHk8dH3h4iC/B0m+GVQkc+TvA+5mysI6zkIGAsi6HNFdK6mKwn9FwCql620tztVtRB4d6TL
	xRQsN9zfzSfd5a2L1EO6WsBjBfEAEHDs1TOe9UkTfhLDsDr3EzzMof6gyol2OkJvrkFM=;
Subject: Re: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210709124035.5520-1-michal.orzel@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <24141b99-a4a2-80f2-1cca-4f86ebc90d94@xen.org>
Date: Fri, 9 Jul 2021 16:21:51 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210709124035.5520-1-michal.orzel@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Michal,

On 09/07/2021 13:40, Michal Orzel wrote:
> AArch64 system registers are 64bit whereas AArch32 ones
> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
> we should get rid of helpers READ/WRITE_SYSREG32
> in favour of using READ/WRITE_SYSREG.
> 
> The last place in code making use of READ/WRITE_SYSREG32
> on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
> Implement a macro WRITE_SYSREG_SZ which expands as follows:
> -on arm64: WRITE_SYSREG
> -on arm32: WRITE_SYSREG{32/64}
> 
> As there are no other places in the code using these helpers
> on arm64 - remove them.
> 
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
> ---
> Changes since v1:
> -implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
> ---
>   xen/arch/arm/vcpreg.c               | 12 +++++++++++-
>   xen/include/asm-arm/arm64/sysregs.h |  4 ----
>   2 files changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
> index f0cdcc8a54..10c4846954 100644
> --- a/xen/arch/arm/vcpreg.c
> +++ b/xen/arch/arm/vcpreg.c
> @@ -47,6 +47,16 @@
>    *
>    */
>   
> +#ifdef CONFIG_ARM_64
> +#define WRITE_SYSREG_SZ(sz, val, sysreg)     WRITE_SYSREG(val, sysreg)

I think you want to cast to (uint##sz##_t) to avoid any surprise. I think...

> +#else
> +/*
> + * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
> + * on the below macro to be defined like that as well.
> + */
> +#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
> +#endif
> +
>   /* The name is passed from the upper macro to workaround macro expansion. */
>   #define TVM_REG(sz, func, reg...)                                           \
>   static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
> @@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>       bool cache_enabled = vcpu_has_cache_enabled(v);                         \
>                                                                               \
>       GUEST_BUG_ON(read);                                                     \
> -    WRITE_SYSREG##sz(*r, reg);                                              \
> +    WRITE_SYSREG_SZ(sz, *r, reg);                                           \
>                                                                               \
>       p2m_toggle_cache(v, cache_enabled);                                     \
>                                                                               \
> diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/asm-arm/arm64/sysregs.h
> index 077fd95fb7..795901e1ba 100644
> --- a/xen/include/asm-arm/arm64/sysregs.h
> +++ b/xen/include/asm-arm/arm64/sysregs.h
> @@ -87,10 +87,6 @@
>   
>   /* Access to system registers */
>   
> -#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name))
> -
> -#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name)

... this was intended behavior but I used the wrong cast here.

> -
>   #define WRITE_SYSREG64(v, name) do {                    \
>       uint64_t _r = v;                                    \
>       asm volatile("msr "__stringify(name)", %0" : : "r" (_r));       \
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:37:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:37:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153781.284113 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sZb-0005Lr-3u; Fri, 09 Jul 2021 15:37:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153781.284113; Fri, 09 Jul 2021 15:37:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sZb-0005Lk-0g; Fri, 09 Jul 2021 15:37:51 +0000
Received: by outflank-mailman (input) for mailman id 153781;
 Fri, 09 Jul 2021 15:37:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=iqbd=MB=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m1sZZ-0005Le-FT
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:37:49 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9cb1181e-e0cb-11eb-85fe-12813bfff9fa;
 Fri, 09 Jul 2021 15:37:48 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9cb1181e-e0cb-11eb-85fe-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1625845068;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Bl+Y1SSUS+A/PkpMC4wxWjeriDdYg2w8BFKyFQM3sI8=;
  b=aiFl6HpKQ3gQbqTdRT5Jns1wl04JxaLXCxbj6OZBMXZ/HwKGHDTV7wRe
   BxpUQ54/w2CGCQFd8ZKoTZXTEmg2DdoN38Xq0WvQiFHlUOu2KOtuoQdDv
   aejcP7xR7/y+IP17Hafr5p8cRfjCJxXmohMKP+srDE/dhmQD1Q/0+PH/h
   I=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: zi52qASwbM1vkb+UPRzXwUTvZ691Az1rrmh8QCx4AOsdz9uGJ07LUUPBJTruoFSeRrKtK+9aBz
 4r2cUessYdC04mUv1P78E6eMdizM83S27FxgwEK3pAOQMS3NG7x/9jjhc+iaUVyfrhSPozPSqM
 ckw6/hGJu9G7Xfdunspa6CPNH9dw94tZmrERgWx2SQKvYIjJU7X2el72q2kEqFYdc3whhMh/Ju
 cpTOJu+RCeb7BclTTXwbbIbbuHfFrjx8v1YgE9BDsEEyZl3m+WXT693ZaiP1V3MFAwJCN5B/bv
 13Y=
X-SBRS: 5.1
X-MesageID: 47647386
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:IeRNpKP9le3jo8BcTsmjsMiBIKoaSvp037BN7TEVdfU1SL37qy
 nAppQmPHPP5gr5O0tOpTnjAtjlfZq0z/cciuN9UYtKNDOW31dAR7sSjrcKrQeAJ8VznNQts5
 tdTw==
X-IronPort-AV: E=Sophos;i="5.84,226,1620705600"; 
   d="scan'208";a="47647386"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=bvMD2p+pnjW7SJWrdiRDKBOuriMydErNi2xMtPImOehSOqZYuL7bPL7mcgtvnADFCeHe+EXW7UsFh1qxWRDAPDUbQay5k/b8qMZvuoM2WEvIEtiL9aJ1qGizYqeNiejaafXI8v+qLV0pCQxkQ3v4u5VUJiONBjyIzkpbSqUtFSk7PvDRaVEFS7PeuYJMTgbQ9p398Hhcdm6Sj7Kxh2zZpFwjR/P7+INNtq82KXHhAJpOLacQDciFwE9GD5FNd3tvPw7m0Om2E6pdusJCjMtu4PB+DunQAb4gmNNbr1eoxpKQ2RIwFx8rTuA/Nyw44IwrD/HBStoCNo2kFXxA7e0QKQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Bl+Y1SSUS+A/PkpMC4wxWjeriDdYg2w8BFKyFQM3sI8=;
 b=Tm6+mEbiHE5GISSGZKRBMAre+dJA7yM1h4VT4kvL59X16sIXSIdlzlTlkslDPABXRYn2Ymd1p4HkHh5Rk+FGf8E2CHOsxaWsIwEE5YWeFzkjc/9TbKQgigauIjJoguisauEm5nhr13B3z+CBq5MxzvvKGoZJCwtMTJi9v20FaHM4zN8qppxuehS3KKgytCQHSVZ6Ov9152EjQzEgowy/trfbtoPgL0qpxISoW433KdyjV3ck2Wpblnp+qaaE08x52+PNlxl5gpBm62EW/bkzjPDq9znIE6EMEv3lGsKwxqpyEjB8Z0PUY+iRtnXgtFhCJnNZuqOxoEq2LoRx7lPqIw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Bl+Y1SSUS+A/PkpMC4wxWjeriDdYg2w8BFKyFQM3sI8=;
 b=Br96YWAcaQmNZxRXLvZf37sCzVEaOCrhJoUUZQIHTc/Q5z9dVgkSRnaCPn9lgDHJgE7QHbBkAPKm3voYMD8n5LGwRkX8TRcsAIV5mSGOxtY2XoweGafDE+Z8xSmHhlZ+iLZB/TkxGAD84uewZ1/4/0VvPpJnbM5jR2eZrJibfKM=
Subject: Re: [PATCH] tools/misc/xen-vmtrace: handle more signals and install
 by default
To: Tamas K Lengyel <tamas@tklengyel.com>, <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210507152836.20026-1-tamas@tklengyel.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <c29ee04f-786d-ce4e-3122-8169d7e8a78e@citrix.com>
Date: Fri, 9 Jul 2021 16:37:37 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210507152836.20026-1-tamas@tklengyel.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0092.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:139::7) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6b976c80-492b-4066-78eb-08d942ef7ee7
X-MS-TrafficTypeDiagnostic: BYAPR03MB4296:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4296922D26B840D0660CF2BEBA189@BYAPR03MB4296.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:400;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: KeHWqd4+i31R8WSMqvyP3afbgTykmg8jrltuS31ICgkEyuWLSL9bYZfV+ZI3dDT2kbwYqoW16B7gMVF4rRDkhPZ7JoD20KHuNz7Be5qR9Tmvc9HH7lognOurMmNlfztY9A6pGnpDhZsujSOhjimnjA7jY4lcRHUIgNGS0c+RM9Kz5AXEH5PrNYGHOuTcGRo+b4OM7P86GmGU7Do0aeOP013Ou2GcioLMe44ghx7XV0l6W1UPRTJreFB8OaL2vvhb7MjZjd0LyYz9MQsfzheQydgdEh8DCwSTDvhvtUuKv5HKaKEHrdVnFc+DFMcBLe9q+afbBwVjK9jEH/FxmgI1vK1V9Bk5WTpMtEtDKgjPmXzQ0BE1RnHeMHbOik6P0M+M2KMOagHYMyHTwZrMtP9ZFZwHOFUg2olPiNXzKyHFuWXbhvNMeguh8h2jm9VqyCZI0Z/1wKS/nqN5cXK5SsA5agoJqZdFbFgjYgwzr9uMtuu64JyI9nX58zsc2YIfD6XyBKSWlaTkDUSSvKfSBjz244AI/8UizWuBAkCk5BjAcSLnCaB3M93TiWCFYJnK5xr8RRZSdeN+fHQdb+ERKcaQwwFKdLnPQ1x2s2wH7U/X3fZ0c7fJJJWU39oNtyDyvnQt8aSQuiMH+wzRZIsUX2DQSofMkAIB+6KNA/0HK+HBB1Gz3cgIldKHqwHeWUYZ1tOhX/qAUfZLVLhqZW7d9+UHgNH5IaKLJ32a0tOZazuijXk=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(39850400004)(136003)(346002)(396003)(558084003)(53546011)(316002)(16576012)(186003)(2906002)(66556008)(26005)(4326008)(86362001)(36756003)(31696002)(54906003)(478600001)(38100700002)(66476007)(2616005)(6666004)(5660300002)(956004)(8676002)(31686004)(66946007)(8936002)(6486002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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/C4cuV?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 6b976c80-492b-4066-78eb-08d942ef7ee7
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 15:37:44.5430
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: E2Q2ihavL9R0zUKLWqb7Z4vksdvPAWsf9cjZqkAU4npuWuZ+1/KzSUfOiltEych4mUGE5MUW+uGbppit5HOXsBEJvwGk8kFhfmSbelEfTZg=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4296
X-OriginatorOrg: citrix.com

On 07/05/2021 16:28, Tamas K Lengyel wrote:
> Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:48:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:48:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153787.284123 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sjk-0006qL-2V; Fri, 09 Jul 2021 15:48:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153787.284123; Fri, 09 Jul 2021 15:48:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sjj-0006qE-Vw; Fri, 09 Jul 2021 15:48:19 +0000
Received: by outflank-mailman (input) for mailman id 153787;
 Fri, 09 Jul 2021 15:48:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m1sji-0006q5-D6
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:48:18 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m1sji-0003bR-AQ
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:48:18 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m1sji-0001Es-71
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:48:18 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m1sje-0003vQ-Ib; Fri, 09 Jul 2021 16:48:14 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Subject:CC:To:Date:Message-ID:
	Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=2RAimFeRdEiEA1Q05Krb6n6ep/OmQcSGnGcnN0xX9oU=; b=4KbEjJRnn5XRfR+Ur6/PRMZXEy
	S61zLlq7CxrEJLl1myrMDKMn2R+OQi2O5Wo+sLySXZgR6Njd0HbJ25fKAZZfC0YGCP13u9VQY9sJE
	4PNzGiQGbrGYjZwi0MxDVRcYW/KezKyKLDWpzf3sBJuCQTZ0Gs5AcSs1HJdDmNpXNwgE=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24808.28606.387467.578829@mariner.uk.xensource.com>
Date: Fri, 9 Jul 2021 16:48:14 +0100
To: committers@xenproject.org
CC: xen-devel@lists.xenproject.org,
    Doug Goldstein <cardoe@cardoe.com>,
    Wei Liu <wl@xen.org>
Subject: gitlab merge request -> list patchbomb workflows
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

At Xen Summit we had another discussion about patch submission and
review workflows.

We agreed that it would be a nice idea to conduct another experiment
with gitlab MRs.  The previous experiment yielded negative results,
but we think we might be able to do better.

The shape of the experiment was roughly:

 * Some robot would convert a gitlab MR into a patchbomb and email
   it to the list.  (The From: line would be the MR submitter's
   gitlab profile email address.)

 * Patch review would be done in the usual way by email.  These emails
   would naturally end up in the MR submitter's mailbox.

 * We would initially conduct the experiment with internal submitters,
   and with short/simple patches.

Open questions that weren't answered at the time include:

 * How do we intend to track acked/reviewed status ?  I think
   patchwork can help with this, but if we keep the series simple
   perhaps this will be fine.

 * If a resubmission was needed, how would a v2 post be triggered ?
   I don't think we have a good answer to this.  I considered tha
   following possible ultimate possibilities:

     A. when you update the git branch after the v1 posting,
        the robot marks the MR as draft.  Repost happe ns when
        you mark the MR as ready for review

     B. the robot comments in the gitlab issue, and there is
        some @robot command to tell it to repost

   AFAICT there is no code anywhere that would do either of these.
   I suggest for now we do (B) manually with a human (probably, me)
   writing comments in the MR.

 * Who if anyone will fold acked-by/reviewed-by into commit messages

   We cannot sensibly ask someone using the gitlab MR UI to do this.
   Also avoiding this manual clerical work was one of the benefits we
   are hoping to achieve.

   I therefore suggest that we don't do this folding at all, and use
   patchwork's UI to review the status of a series.

Next steps:

I looked for a tool that would do the automatic patchbombing.  It
doesn't seem to exist.  For other reasons I now have a library that
can scan/inspect git{lab,hub} MRs.

For now I propose to write a simple tool which does the patchbomb, and
expect to run it by hand on our experimental MRs.

Comments?

Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 15:58:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 15:58:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153793.284135 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sti-0008K0-24; Fri, 09 Jul 2021 15:58:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153793.284135; Fri, 09 Jul 2021 15:58:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1sth-0008Jt-Ug; Fri, 09 Jul 2021 15:58:37 +0000
Received: by outflank-mailman (input) for mailman id 153793;
 Fri, 09 Jul 2021 15:58:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m1stg-0008Jn-7L
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 15:58:36 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1stc-0003ma-QU; Fri, 09 Jul 2021 15:58:32 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m1stc-00028j-KU; Fri, 09 Jul 2021 15:58:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=iwMuUrx8wPTxt8aYxEc7wISOn8P8ja4mwUT0aUygz8s=; b=e6WF/vd5gcrkOVtyEsIJbRIgSq
	JZpOCIx8/+OytpT18hiXvcg+yt2pNZOxtx9HQ7GCQh0ajW8iEocjgzmcIw1K5xLHsw8vsuAGdku0Z
	9tvkdKb9xkx6MYr5zWPXgxsWWhTIxrKqHl8iHRKmuC20Dj7Lv2kX8tv7eVZAPGOmxDK4=;
Subject: Re: gitlab merge request -> list patchbomb workflows
To: Ian Jackson <iwj@xenproject.org>, committers@xenproject.org
Cc: xen-devel@lists.xenproject.org, Doug Goldstein <cardoe@cardoe.com>,
 Wei Liu <wl@xen.org>
References: <24808.28606.387467.578829@mariner.uk.xensource.com>
From: Julien Grall <julien@xen.org>
Message-ID: <8a40ee32-4141-ddc4-4c19-582334f3b245@xen.org>
Date: Fri, 9 Jul 2021 16:58:30 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <24808.28606.387467.578829@mariner.uk.xensource.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Ian,

On 09/07/2021 16:48, Ian Jackson wrote:
> At Xen Summit we had another discussion about patch submission and
> review workflows.
> 
> We agreed that it would be a nice idea to conduct another experiment
> with gitlab MRs.  The previous experiment yielded negative results,
> but we think we might be able to do better.
> 
> The shape of the experiment was roughly:
> 
>   * Some robot would convert a gitlab MR into a patchbomb and email
>     it to the list.  (The From: line would be the MR submitter's
>     gitlab profile email address.)
> 
>   * Patch review would be done in the usual way by email.  These emails
>     would naturally end up in the MR submitter's mailbox.
> 
>   * We would initially conduct the experiment with internal submitters,
>     and with short/simple patches.
> 
> Open questions that weren't answered at the time include:
> 
>   * How do we intend to track acked/reviewed status ?  I think
>     patchwork can help with this, but if we keep the series simple
>     perhaps this will be fine.
> 
>   * If a resubmission was needed, how would a v2 post be triggered ?
>     I don't think we have a good answer to this.  I considered tha
>     following possible ultimate possibilities:
> 
>       A. when you update the git branch after the v1 posting,
>          the robot marks the MR as draft.  Repost happe ns when
>          you mark the MR as ready for review
> 
>       B. the robot comments in the gitlab issue, and there is
>          some @robot command to tell it to repost
> 
>     AFAICT there is no code anywhere that would do either of these.
>     I suggest for now we do (B) manually with a human (probably, me)
>     writing comments in the MR.
> 
>   * Who if anyone will fold acked-by/reviewed-by into commit messages
> 
>     We cannot sensibly ask someone using the gitlab MR UI to do this.
>     Also avoiding this manual clerical work was one of the benefits we
>     are hoping to achieve.
> 
>     I therefore suggest that we don't do this folding at all, and use
>     patchwork's UI to review the status of a series.

I am not entirely sure if this is what you are looking for. However, I 
thought I would mention it.

I have recently started to use b4 [1] to fetch patches and collect tags 
from the mailing list. I am wondering if the tools could be extended to 
also allow a quick look through of the review "state" of each patch?

Cheers,

[1] 
https://people.kernel.org/monsieuricon/introducing-b4-and-patch-attestation

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 16:21:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 16:21:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153801.284151 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1tG5-0003YD-11; Fri, 09 Jul 2021 16:21:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153801.284151; Fri, 09 Jul 2021 16:21:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1tG4-0003Y6-UN; Fri, 09 Jul 2021 16:21:44 +0000
Received: by outflank-mailman (input) for mailman id 153801;
 Fri, 09 Jul 2021 16:21:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m1tG3-0003Xz-NR
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 16:21:43 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m1tG3-0004ia-Lq
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 16:21:43 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m1tG3-00047j-Kt
 for xen-devel@lists.xenproject.org; Fri, 09 Jul 2021 16:21:43 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m1tFy-0004qE-Qj; Fri, 09 Jul 2021 17:21:38 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=TMVVps2m/IFzp9vbKnm1JGXOUDWAYDSOnyIcy1LdA/8=; b=QeGNzcFVkuKFJhCS1szrZUrnL5
	FaAeKO7+ixhjHHfNqx1b/c89ctWWJJ5hJ+HlLbh5AHueSGAflIPO6BEB0gIXnK4HqjCAjYqIU1Zm9
	3QsIDhYjpY4zfBJrpr7hNz8IZsKAAogOE3YuSalLBnxqmjRCPP8QX2U/SxTVX27TYrno=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24808.30610.559142.775285@mariner.uk.xensource.com>
Date: Fri, 9 Jul 2021 17:21:38 +0100
To: Julien Grall <julien@xen.org>
Cc: committers@xenproject.org,
    xen-devel@lists.xenproject.org,
    Doug Goldstein <cardoe@cardoe.com>,
    Wei Liu <wl@xen.org>
Subject: Re: gitlab merge request -> list patchbomb workflows
In-Reply-To: <8a40ee32-4141-ddc4-4c19-582334f3b245@xen.org>
References: <24808.28606.387467.578829@mariner.uk.xensource.com>
	<8a40ee32-4141-ddc4-4c19-582334f3b245@xen.org>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Julien Grall writes ("Re: gitlab merge request -> list patchbomb workflows"):
> I have recently started to use b4 [1] to fetch patches and collect tags 
> from the mailing list. I am wondering if the tools could be extended to 
> also allow a quick look through of the review "state" of each patch?

Cool.  That's interesting.  I need to think about it some more, but I
think this is a possible alternative to using patchwork for the
analysis task.

Also, if a robot wanted to post a v2 it could use b4 to fold the acks
etc. into the repost, without the submitter having to add them to the
git branch.

Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 17:43:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 17:43:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153827.284190 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1uX7-0003to-Fr; Fri, 09 Jul 2021 17:43:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153827.284190; Fri, 09 Jul 2021 17:43:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1uX7-0003th-CJ; Fri, 09 Jul 2021 17:43:25 +0000
Received: by outflank-mailman (input) for mailman id 153827;
 Fri, 09 Jul 2021 17:43:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1uX6-0003tX-Ga; Fri, 09 Jul 2021 17:43:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1uX6-000651-7m; Fri, 09 Jul 2021 17:43:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1uX5-0004ta-RZ; Fri, 09 Jul 2021 17:43:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1uX5-0006uR-R6; Fri, 09 Jul 2021 17:43:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+AYojcPmpP525it5OV10JO7x2wfcdPheBu38+7cH8x4=; b=wuBWyXAeow0N5lm19jqI9d37WU
	2unRpDF4KeQVlI/UeNbt3YZ31XCvAxa7KeI5Zx992s35lO5KkxD+BPEZicyjmypIShQONwtdu/Nvv
	/Q6vc8BtH6UabD/QV47HqSjYAshZaxauB0N+Lrh2CRHOq0SfTHvYuSRzcCtoNpQDHdSw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163461-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163461: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-seattle:debian-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-install:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-install:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-install:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-shadow:guest-start/debian.repeat:fail:regression
    linux-linus:test-armhf-armhf-xl-cubietruck:debian-install:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:debian-install:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=f55966571d5eb2876a11e48e798b4592fa1ffbb7
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 17:43:23 +0000

flight 163461 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163461/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-seattle  12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          12 debian-install           fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 12 debian-install           fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-xl-shadow  22 guest-start/debian.repeat fail REGR. vs. 152332
 test-armhf-armhf-xl-cubietruck 12 debian-install         fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 12 debian-install          fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass

version targeted for testing:
 linux                f55966571d5eb2876a11e48e798b4592fa1ffbb7
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  342 days
Failing since        152366  2020-08-01 20:49:34 Z  341 days  583 attempts
Testing same since   163461  2021-07-09 00:41:36 Z    0 days    1 attempts

------------------------------------------------------------
6633 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               fail    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   fail    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1939263 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 18:20:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 18:20:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153837.284209 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1v6d-00087T-GU; Fri, 09 Jul 2021 18:20:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153837.284209; Fri, 09 Jul 2021 18:20:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1v6d-00087M-De; Fri, 09 Jul 2021 18:20:07 +0000
Received: by outflank-mailman (input) for mailman id 153837;
 Fri, 09 Jul 2021 18:20:06 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1v6c-00080K-0x; Fri, 09 Jul 2021 18:20:06 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1v6b-0006jk-Ro; Fri, 09 Jul 2021 18:20:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1v6b-0006PW-K3; Fri, 09 Jul 2021 18:20:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1v6b-0000Ta-Jb; Fri, 09 Jul 2021 18:20:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=wIsfuQ4Lljvv5MI9e+o7jWXixp5MdgIVg/o7l8E0/ZI=; b=ntrTpOI3lkHR/IcUpN2RRg4vNm
	7OzbX3Og+uijwl1SPsGoaaMaE22atYtssm0dnlqxGVOg9yWYVca7jvtsD0b6oieXTxc5pvV5azmGa
	95KabHmgKPHbtlCOVu2igFODRcoAIgSxG8b+07dcfH+IAGu6YocdUmK6vRin7LeryEWI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163475-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163475: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=f47c4676dd1a532b22a059cd036918abd6b0dd11
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 18:20:05 +0000

flight 163475 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163475/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 f47c4676dd1a532b22a059cd036918abd6b0dd11
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   35 days
Failing since        162368  2021-06-04 15:42:59 Z   35 days   98 attempts
Testing same since   163475  2021-07-09 12:59:53 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3468 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 19:44:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 19:44:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153851.284250 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1wQO-0007kE-8p; Fri, 09 Jul 2021 19:44:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153851.284250; Fri, 09 Jul 2021 19:44:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1wQO-0007k7-53; Fri, 09 Jul 2021 19:44:36 +0000
Received: by outflank-mailman (input) for mailman id 153851;
 Fri, 09 Jul 2021 19:44:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1wQM-0007jx-EY; Fri, 09 Jul 2021 19:44:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1wQM-00089m-5t; Fri, 09 Jul 2021 19:44:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1wQL-0002YF-T4; Fri, 09 Jul 2021 19:44:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1wQL-000764-SY; Fri, 09 Jul 2021 19:44:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=lEXXFK3l/XyepiR4+FilFT/7+GZp55wuK5Rt9WyH4uo=; b=Mb6b60Fn3iqZzGClSix8okZ7ww
	pkAumRSOtNjJXwB7Oqi0VHNkTm8Vt3TygT4r9kADLmiz3TOf6tRc9Q4Y2+ENcHcIJcJ9Ipz2te89R
	oJF2Nm2ADetrrkvCCySsLfCJNa7Ta/iLiDmTkypVWTFpje1FQSAk2XnK+UG7hDHiYYZk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163464-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163464: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9db3065c62a983286d06c207f4981408cf42184d
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 19:44:33 +0000

flight 163464 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163464/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     18 guest-localmigrate       fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9db3065c62a983286d06c207f4981408cf42184d
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    3 days
Failing since        163327  2021-07-06 12:39:04 Z    3 days    6 attempts
Testing same since   163464  2021-07-09 03:43:51 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alex Bennée <alex.bennee@linaro.org>
  Andreas Schwab <schwab@suse.de>
  David Edmondson <david.edmondson@oracle.com>
  John Arbuckle <programmingkidx@gmail.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Richard Henderson <richard.henderson@linaro.org>
  Thomas Huth <thuth@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 698 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 09 20:03:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 09 Jul 2021 20:03:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153858.284263 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1wip-0001ki-OC; Fri, 09 Jul 2021 20:03:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153858.284263; Fri, 09 Jul 2021 20:03:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m1wip-0001kb-LJ; Fri, 09 Jul 2021 20:03:39 +0000
Received: by outflank-mailman (input) for mailman id 153858;
 Fri, 09 Jul 2021 20:03:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1wio-0001kR-Ai; Fri, 09 Jul 2021 20:03:38 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1wio-00007O-2O; Fri, 09 Jul 2021 20:03:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m1win-0003ZH-R4; Fri, 09 Jul 2021 20:03:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m1win-0000Ho-Qb; Fri, 09 Jul 2021 20:03:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/r4TcL3Av1zLKc4tfVx1rzNqVU60LkW2WpcXtYHlGp4=; b=QE/6n2+jAf04X6txYKS7uQC6sh
	+Mr7qEKKIiCfhNzreLWZlsIYfvksOdXm4eyu6PeL6lLjYzinIRfE2pHqYESDi1ZE4atGAZJbj8abu
	Qty+t3j2+qn3aFpVit5N33rMFEZMDZf1mX9qWYVheVLtdRBuw3ZScYUeLmd2m0Q0Y8LA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163480-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163480: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=e6917412628d11986f0e6fc028851c8181b24fb8
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 09 Jul 2021 20:03:37 +0000

flight 163480 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163480/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  e6917412628d11986f0e6fc028851c8181b24fb8
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    0 days
Testing same since   163480  2021-07-09 16:08:01 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Olaf Hering <olaf@aepfle.de>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 00:19:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 00:19:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153891.284347 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m20iU-000058-JT; Sat, 10 Jul 2021 00:19:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153891.284347; Sat, 10 Jul 2021 00:19:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m20iU-00004y-Fm; Sat, 10 Jul 2021 00:19:34 +0000
Received: by outflank-mailman (input) for mailman id 153891;
 Sat, 10 Jul 2021 00:19:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m20iT-0008WT-1M; Sat, 10 Jul 2021 00:19:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m20iS-0004up-TL; Sat, 10 Jul 2021 00:19:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m20iS-00021M-Lm; Sat, 10 Jul 2021 00:19:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m20iS-0008Js-LK; Sat, 10 Jul 2021 00:19:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=PjFjpTgY2mqXj2Rx945b58hAdsYv8e2vfGBPGvDUc8o=; b=vIotP7j4LsoarfFT7a/MrHVSQJ
	6vytnyJqq0Ydzf2tArffWp0befS94up+ztaB1ZPqW7DIlagZFrK84hgK2CczTQJunFl4PlaHt0C13
	RFbHOd/tV752lZ3UH9C9cBDoq3YwsbuSsZz48KGcUGosOffwTS2ySHdje8/Q1o4rByDo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [xen-unstable-smoke bisection] complete build-amd64
Message-Id: <E1m20iS-0008Js-LK@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 00:19:32 +0000

branch xen-unstable-smoke
xenbranch xen-unstable-smoke
job build-amd64
testid xen-build

Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  0dbb4be739c50b8018aeeb285ef290bf7962a28e
  Bug not present: d276e0f3f14f2d46f27989008770eb2b9c678bc4
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163499/


  commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
  Author: Costin Lupu <costin.lupu@cs.pub.ro>
  Date:   Tue Jun 8 15:35:27 2021 +0300
  
      tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
      
      If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
      header) then gcc will trigger a redefinition error because of -Werror. This
      patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
      confusion between control domain page granularity (PAGE_* definitions) and
      guest domain page granularity.
      
      The exception is in osdep_xenforeignmemory_map() where we need the system page
      size to check whether the PFN array should be allocated with mmap() or with
      dynamic allocation.
      
      Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
      Reviewed-by: Julien Grall <jgrall@amazon.com>
      Acked-by: Ian Jackson <iwj@xenproject.org>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/xen-unstable-smoke/build-amd64.xen-build.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/xen-unstable-smoke/build-amd64.xen-build --summary-out=tmp/163499.bisection-summary --basis-template=163474 --blessings=real,real-bisect,real-retry xen-unstable-smoke build-amd64 xen-build
Searching for failure / basis pass:
 163480 fail [host=himrod2] / 163474 ok.
Failure / basis pass flights: 163480 / 163474
(tree with no url: minios)
(tree with no url: ovmf)
(tree with no url: seabios)
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git
Latest 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 e6917412628d11986f0e6fc028851c8181b24fb8
Basis pass 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c7437ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://xenbits.xen.org/qemu-xen.git#136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823-136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 git://xenbits.xen.org/xen.git#6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf-e6917412628d11986f0e6fc028851c8181b24fb8
Loaded 5001 nodes in revision graph
Searching for test results:
 163474 pass 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
 163480 fail 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 e6917412628d11986f0e6fc028851c8181b24fb8
 163487 pass 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
 163488 fail 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 e6917412628d11986f0e6fc028851c8181b24fb8
 163491 pass 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 d276e0f3f14f2d46f27989008770eb2b9c678bc4
 163492 fail 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
 163493 fail 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0dbb4be739c50b8018aeeb285ef290bf7962a28e
 163495 pass 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 d276e0f3f14f2d46f27989008770eb2b9c678bc4
 163496 fail 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0dbb4be739c50b8018aeeb285ef290bf7962a28e
 163498 pass 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 d276e0f3f14f2d46f27989008770eb2b9c678bc4
 163499 fail 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Searching for interesting versions
 Result found: flight 163474 (pass), for basis pass
 For basis failure, parent search stopping at 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 d276e0f3f14f2d46f27989008770eb2b9c678bc4, results HASH(0x5651c08f6828) HASH(0x5651c090bb80) HASH(0x5651c08f4220) For basis failure, parent search stopping at 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf, results HASH(0x5651c08fed80) HASH(0x5651c08ff080) Result found: flight 163480 (fail), for \
 basis failure (at ancestor ~631)
 Repro found: flight 163487 (pass), for basis pass
 Repro found: flight 163488 (fail), for basis failure
 0 revisions at 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 d276e0f3f14f2d46f27989008770eb2b9c678bc4
No revisions left to test, checking graph state.
 Result found: flight 163491 (pass), for last pass
 Result found: flight 163493 (fail), for first failure
 Repro found: flight 163495 (pass), for last pass
 Repro found: flight 163496 (fail), for first failure
 Repro found: flight 163498 (pass), for last pass
 Repro found: flight 163499 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  0dbb4be739c50b8018aeeb285ef290bf7962a28e
  Bug not present: d276e0f3f14f2d46f27989008770eb2b9c678bc4
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163499/


  commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
  Author: Costin Lupu <costin.lupu@cs.pub.ro>
  Date:   Tue Jun 8 15:35:27 2021 +0300
  
      tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
      
      If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
      header) then gcc will trigger a redefinition error because of -Werror. This
      patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
      confusion between control domain page granularity (PAGE_* definitions) and
      guest domain page granularity.
      
      The exception is in osdep_xenforeignmemory_map() where we need the system page
      size to check whether the PFN array should be allocated with mmap() or with
      dynamic allocation.
      
      Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
      Reviewed-by: Julien Grall <jgrall@amazon.com>
      Acked-by: Ian Jackson <iwj@xenproject.org>

Revision graph left in /home/logs/results/bisect/xen-unstable-smoke/build-amd64.xen-build.{dot,ps,png,html,svg}.
----------------------------------------
163499: tolerable ALL FAIL

flight 163499 xen-unstable-smoke real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163499/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 build-amd64                   6 xen-build               fail baseline untested


jobs:
 build-amd64                                                  fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Sat Jul 10 00:50:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 00:50:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153900.284366 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m21C0-0003c2-3T; Sat, 10 Jul 2021 00:50:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153900.284366; Sat, 10 Jul 2021 00:50:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m21C0-0003bP-0T; Sat, 10 Jul 2021 00:50:04 +0000
Received: by outflank-mailman (input) for mailman id 153900;
 Sat, 10 Jul 2021 00:50:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=enOJ=MC=gmail.com=connojdavis@srs-us1.protection.inumbo.net>)
 id 1m21By-0003Qb-Lu
 for xen-devel@lists.xenproject.org; Sat, 10 Jul 2021 00:50:02 +0000
Received: from mail-il1-x12d.google.com (unknown [2607:f8b0:4864:20::12d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f17ae1e6-01f7-4f36-8d22-8e4a61b01f30;
 Sat, 10 Jul 2021 00:50:01 +0000 (UTC)
Received: by mail-il1-x12d.google.com with SMTP id w1so10243193ilg.10
 for <xen-devel@lists.xenproject.org>; Fri, 09 Jul 2021 17:50:01 -0700 (PDT)
Received: from [192.168.99.80] (142-79-211-230.starry-inc.net.
 [142.79.211.230])
 by smtp.gmail.com with ESMTPSA id g20sm3797355ilk.81.2021.07.09.17.50.00
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Fri, 09 Jul 2021 17:50:00 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f17ae1e6-01f7-4f36-8d22-8e4a61b01f30
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-transfer-encoding:content-language;
        bh=GyA7orxIj2I4yfecdJ2AxRucK28QZX1c2h0DymEbjX4=;
        b=RHTm+apOKPJL9IXreo+VSxRIXbcqvBYUIIWdyfzwo08RzziUjnu12h/qnKr2mAW8OB
         24+yOwzwXgJahWc8oVH/EpJJP9Q3UZ6qH0hGHYafxshTKWqcB/zRQ3Zb3Y8YNEK9ra1v
         ZjWC1oQrPEW8s8S4PZG2ghSN7NnUGiazcU5eZ9hmvXrPEi957vweydOZ0viRa9Z21r3s
         XZ75ieG1UwdNUhZ0v/poFlbK4mURN6qudFu3IgqfRA5vt1WuWPAw7dpr8ubH3PtDHs71
         FcTDA7B27AWGbI7OhpK7ns/aQ83NO2MJeRcKl8gSX+t+sstGaMhcX23oimE6SjrSmw3V
         ZqIQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-transfer-encoding
         :content-language;
        bh=GyA7orxIj2I4yfecdJ2AxRucK28QZX1c2h0DymEbjX4=;
        b=gnIWrvsqDMzw4ji/eOApaENY9/cw/jJK7ma+nTDVfsFXBxrkAwN5ZoykJB/clnS0cH
         /rebmMyAP8Jq4mlXYbVw/ybkPYbuScsmXPoUe3cCVDyVjjbWBlVOd/fcIqpTV1AfAS4N
         5mGUniHRKJTu3F5TqynSKvu24Khetn5pIkGgWiDhMpUVGO//wA4+ilNg4R7XuCrdhg9/
         rjhcD2LKMXaVkYSOzGT0tVVnbLnrE4s9epzYTB53RNKjj9XVyWKI7VVsDOEYKFjHfr19
         jdpBnfY93r6X1UhB0jXNB9folPeTRDNZWceOK9u+LpOveuQZHlHdF+22+QhD3p5jN0XW
         MV+A==
X-Gm-Message-State: AOAM531Z9Ev9HTd1UUFuwuwDwLm5xbtf1NBv1RzaP422YVgKKubdwa54
	FAHgei8LaRR/G3L4A4VmI3s=
X-Google-Smtp-Source: ABdhPJxtB3KFa4Mi31hHm+JelZtFbJLH/GLWxiVhWyzvtVJpEHSJUMy4bzNC/TWap9Ljbp6q4wP6QQ==
X-Received: by 2002:a92:d44b:: with SMTP id r11mr6661033ilm.217.1625878201215;
        Fri, 09 Jul 2021 17:50:01 -0700 (PDT)
Subject: Re: [XEN PATCH v6 31/31] build,riscv: tell the build system about
 riscv64/head.S
To: Anthony PERARD <anthony.perard@citrix.com>, xen-devel@lists.xenproject.org
Cc: Bob Eshleman <bobbyeshleman@gmail.com>,
 Alistair Francis <alistair.francis@wdc.com>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-32-anthony.perard@citrix.com>
From: Connor Davis <connojdavis@gmail.com>
Message-ID: <3da1bee5-13cb-2f32-67ae-4a56fe356d7c@gmail.com>
Date: Fri, 9 Jul 2021 18:50:33 -0600
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210701141011.785641-32-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Language: en-US



On 7/1/21 8:10 AM, Anthony PERARD wrote:
> This allows to `make arch/riscv/riscv64/head.o`.
>
> Example of rune on a fresh copy of the repository:
>      make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu- KBUILD_DEFCONFIG=tiny64_defconfig arch/riscv/riscv64/head.o
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>   xen/arch/riscv/riscv64/Makefile | 1 +
>   1 file changed, 1 insertion(+)
>   create mode 100644 xen/arch/riscv/riscv64/Makefile
>
> diff --git a/xen/arch/riscv/riscv64/Makefile b/xen/arch/riscv/riscv64/Makefile
> new file mode 100644
> index 000000000000..15a4a65f6615
> --- /dev/null
> +++ b/xen/arch/riscv/riscv64/Makefile
> @@ -0,0 +1 @@
> +extra-y += head.o
Acked-by: Connor Davis <connojdavis@gmail.com>


- Connor


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 01:10:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 01:10:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153907.284384 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m21Vl-0007VT-Nt; Sat, 10 Jul 2021 01:10:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153907.284384; Sat, 10 Jul 2021 01:10:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m21Vl-0007VM-KD; Sat, 10 Jul 2021 01:10:29 +0000
Received: by outflank-mailman (input) for mailman id 153907;
 Sat, 10 Jul 2021 01:10:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m21Vk-0007VC-GK; Sat, 10 Jul 2021 01:10:28 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m21Vk-0006NF-9t; Sat, 10 Jul 2021 01:10:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m21Vk-0003XQ-2p; Sat, 10 Jul 2021 01:10:28 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m21Vk-0008K3-2H; Sat, 10 Jul 2021 01:10:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=yBGGXxx3A3tScXah45NFgzQQboeMCc5lrFV43GxkaTs=; b=id4VhQmOBR5B06yPE8fKRcwe85
	GQQKxwyQ9ppKcwSQOObMC9ZxQrnoIdgkVlz3BZR1ea12uMQFUKmRtdLpqGlVAW7W3r3sRW9zEAZi7
	yWSDUVfv8u/woOHqbt0MuuFA1adUXP6g9dDd5UukLHzzI7qM268EPdsjTALMWZ7TnxnE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163489-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163489: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 01:10:28 +0000

flight 163489 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163489/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    0 days
Failing since        163480  2021-07-09 16:08:01 Z    0 days    2 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 01:18:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 01:18:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153914.284397 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m21dC-0008Ky-Nf; Sat, 10 Jul 2021 01:18:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153914.284397; Sat, 10 Jul 2021 01:18:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m21dC-0008Kr-KJ; Sat, 10 Jul 2021 01:18:10 +0000
Received: by outflank-mailman (input) for mailman id 153914;
 Sat, 10 Jul 2021 01:18:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6jBP=MC=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m21dA-0008Kl-Dm
 for xen-devel@lists.xenproject.org; Sat, 10 Jul 2021 01:18:08 +0000
Received: from out4-smtp.messagingengine.com (unknown [66.111.4.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id aeeb5034-e11c-11eb-8630-12813bfff9fa;
 Sat, 10 Jul 2021 01:18:07 +0000 (UTC)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
 by mailout.nyi.internal (Postfix) with ESMTP id 4DDDA5C00D3;
 Fri,  9 Jul 2021 21:18:07 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163])
 by compute6.internal (MEProxy); Fri, 09 Jul 2021 21:18:07 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri,
 9 Jul 2021 21:18:05 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aeeb5034-e11c-11eb-8630-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=bZemiW
	HC6mJXf+fhe+/akDBGDyErdmDCwBUBBwrstFs=; b=v1jOmZPSyEypAaXv8ZWizy
	uj8/zR28wuNNzcFqz5dRUCE8sKP6rFwYY8c/ZSPl2ifaRRphg7HKG5NXiYQWgCwc
	H/LKqHdIyU/Vg15VhRfwxu2Ul5WQ8Ac8kXGTAjkgIW7OXzEn6xtxkHLqDpVbf2Zq
	7BJp0/oxYqKI+YFPifTqa+NoAJaX7YwUuMiZHTkBG7WN800bNi5WjmAcz/gawOQS
	/2UDltySyhtfAiLkqi5avdYbbGg+U3Ll+P5Akx4lKeYT2qzPhPA/OKAfjV07DvZW
	q3e0Z3FZT/Vkhs8peZ4T+na0eKxovG0tQqwoQaRjMZflqhG8fZ/Z8m7w1tkGLcjw
	==
X-ME-Sender: <xms:TvXoYCFSe4NyrgJzz6TBoSxqsgAXmcHA_cCmLhhzPtWxgiRYUiDNpw>
    <xme:TvXoYDW6rWMZ2AeZY4RZSutQD71AQfjhONWVJnY8C5jAA-ebjssYoU-P4UcLCDZTZ
    jDzFUna0nJX3A>
X-ME-Received: <xmr:TvXoYMI-gBzGNZ0-i51wiO-fyqQt8fo0ZKgH7FqUvl5cRgc0Cs7hZw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrtdejgdefgecutefuodetggdotefrodftvf
    curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
    uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
    fjughrpeffhffvuffkfhggtggujgesghdtreertddtjeenucfhrhhomhepofgrrhgvkhcu
    ofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuceomhgrrhhmrghrvghksehinhhvih
    hsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepvedvlefh
    udevlefgvddvkeeftddvudejgfethedvveelkefhleevheegfedvgfdunecuffhomhgrih
    hnpeigvghnphhrohhjvggtthdrohhrghdpkhgvrhhnvghlrdhorhhgnecuvehluhhsthgv
    rhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghksehinh
    hvihhsihgslhgvthhhihhnghhslhgrsgdrtghomh
X-ME-Proxy: <xmx:TvXoYMFwuLami-TOm7JV-2p9DvvMeQcJ3qdLQvpAU6AK1dYqvnE55Q>
    <xmx:TvXoYIUsBQ7JeqSdM81i7dEGMnrHjrVD4cwg7axesw4R5uJnyYqsLA>
    <xmx:TvXoYPMOtn_z3__hx7s_S5VHU6xwi52aAxJvsHk8Ub6-vtNtfzIUmg>
    <xmx:T_XoYKKBVZsRGqBIE5i2o9KXolVbCqBHgqOEt_4Fa8T7F_npwlrRrA>
Date: Sat, 10 Jul 2021 03:18:02 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Juergen Gross <jgross@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v2 0/3] xen: harden blkfront against malicious backends
Message-ID: <YOj1Spa1hitL61j/@mail-itl>
References: <20210708124345.10173-1-jgross@suse.com>
 <YOcKJ6m31tHuq2kh@char.us.oracle.com>
 <0baeba93-39eb-2bae-1abd-d4e17e6e025e@suse.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="Ge6yG1DC6TeEMfry"
Content-Disposition: inline
In-Reply-To: <0baeba93-39eb-2bae-1abd-d4e17e6e025e@suse.com>


--Ge6yG1DC6TeEMfry
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Sat, 10 Jul 2021 03:18:02 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Juergen Gross <jgross@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v2 0/3] xen: harden blkfront against malicious backends

On Thu, Jul 08, 2021 at 04:39:58PM +0200, Juergen Gross wrote:
> On 08.07.21 16:22, Konrad Rzeszutek Wilk wrote:
> > On Thu, Jul 08, 2021 at 02:43:42PM +0200, Juergen Gross wrote:
> > > Xen backends of para-virtualized devices can live in dom0 kernel, dom0
> > > user land, or in a driver domain. This means that a backend might
> > > reside in a less trusted environment than the Xen core components, so
> > > a backend should not be able to do harm to a Xen guest (it can still
> > > mess up I/O data, but it shouldn't be able to e.g. crash a guest by
> > > other means or cause a privilege escalation in the guest).
> > >=20
> > > Unfortunately blkfront in the Linux kernel is fully trusting its
> > > backend. This series is fixing blkfront in this regard.
> > >=20
> > > It was discussed to handle this as a security problem, but the topic
> > > was discussed in public before, so it isn't a real secret.
> >=20
> > Wow. This looks like what Marek did .. in 2018!
> >=20
> > https://lists.xenproject.org/archives/html/xen-devel/2018-04/msg02336.h=
tml
>=20
> Yes, seems to have been a similar goal.
>=20
> > Would it be worth crediting Marek?
>=20
> I'm fine mentioning his patches, but I didn't know of his patches until
> having sent out V1 of my series.

Some email issue likely? You were on explicit CC in that series.

> I'd be interested in learning why his patches haven't been taken back
> then.

Mostly it was waiting in limbo on "public: add RING_COPY_RESPONSE()"[1] pat=
ch
to the Xen tree, to be then synchronized back to Linux headers. That patch
was finally committed in March this year. I should've followed up on it,
earlier than 3 years later...

[1] https://lore.kernel.org/xen-devel/20180430215436.21062-1-marmarek@invis=
iblethingslab.com/T/#u

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--Ge6yG1DC6TeEMfry
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmDo9UsACgkQ24/THMrX
1yw/9gf5AU6+c7KNNXatKEEkWqWF9n+TvflptjRsFCE3FC/WAeidzxn6Rgz/mRSx
m0BR7Q6h3UhVOTTF5c/CmcVcrHOs8BZUeL0MAZuyDDYpa8bZWgfFFsW8k5//deh6
fRkX91YuB0uh2Bopgug/CujeGfvg4AbbDweI16OmECqx1sjqX6KrZmj8uHUz8A0f
AX2vTmWi1tEI9E+tJY5nNxaTIjzFEmB1aTgbbFUjbtvedzpDUhWkjCcB2oSza5+c
eiUIsuxB+Vtjbs/FOPflhSwE7mZTWeoohdhPxY9k8kRxlE7Q9FORNFMX6vSxVpLy
hVAz0mhhmdDTi252V/zLYuABcymTQQ==
=c9JX
-----END PGP SIGNATURE-----

--Ge6yG1DC6TeEMfry--


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 02:20:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 02:20:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153924.284415 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m22b6-0006VY-3B; Sat, 10 Jul 2021 02:20:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153924.284415; Sat, 10 Jul 2021 02:20:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m22b5-0006V4-VQ; Sat, 10 Jul 2021 02:20:03 +0000
Received: by outflank-mailman (input) for mailman id 153924;
 Sat, 10 Jul 2021 02:20:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m22b4-0006IZ-CN; Sat, 10 Jul 2021 02:20:02 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m22b4-0007w1-3X; Sat, 10 Jul 2021 02:20:02 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m22b3-0005bb-Ry; Sat, 10 Jul 2021 02:20:01 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m22b3-0000M8-RU; Sat, 10 Jul 2021 02:20:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=37E1PF/1JhnKKmLhI+L6PW4PvDdwBUv91f0stpiRxic=; b=VQ9UCnCf4dL27WWD6W91gfBHzG
	xcjQjdtqmnKxI9Snq3Y0tNIZ69av0Yhyn0SDtODIZ9gSQwTZsE/9UeAozMkj9O4xAFOlOP/sn4cx+
	eaXqGKvT0ubG1k8WlJNT45/Gr5MRgqnfbMfLBWxSd14O2rzKdY55HFvhioXmCfx4JLlw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163484-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163484: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=cc89d245f98ba4885910940d57eeb7008b81fd00
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 02:20:01 +0000

flight 163484 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163484/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 cc89d245f98ba4885910940d57eeb7008b81fd00
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   35 days
Failing since        162368  2021-06-04 15:42:59 Z   35 days   99 attempts
Testing same since   163484  2021-07-09 18:40:11 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3500 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 03:13:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 03:13:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153930.284429 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m23Qa-0003Xm-3c; Sat, 10 Jul 2021 03:13:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153930.284429; Sat, 10 Jul 2021 03:13:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m23QZ-0003Xf-W3; Sat, 10 Jul 2021 03:13:15 +0000
Received: by outflank-mailman (input) for mailman id 153930;
 Sat, 10 Jul 2021 03:13:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m23QY-0003XV-Di; Sat, 10 Jul 2021 03:13:14 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m23QY-0000QP-2G; Sat, 10 Jul 2021 03:13:14 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m23QX-0007S9-OY; Sat, 10 Jul 2021 03:13:13 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m23QX-0000WX-O0; Sat, 10 Jul 2021 03:13:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=e6AjTT2s5QO3xzvaU5J37qL7GwFpswLPPClVBXpkUNg=; b=yXrRMzriA5JWw5aU8Pg/6eMiiT
	gCmIrtxmLgNdk2zxm7CdqzD0Ahhei/BDnBaZGwHzlBlT82F3Km/aHTll5QefK9yvHAAFL4SV9VslS
	1Z7p/Xnnm4GUpLWQaX+db8+5kWoIlJxMdvR24dYq7z/DOnOB4AAf/ku+F6gmoRx1jTHA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163478-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163478: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-libvirt:xen-boot:fail:heisenbug
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 03:13:13 +0000

flight 163478 xen-unstable real [real]
flight 163502 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163478/
http://logs.test-lab.xenproject.org/osstest/logs/163502/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-libvirt      8 xen-boot            fail pass in 163502-retest
 test-amd64-amd64-examine      4 memdisk-try-append  fail pass in 163502-retest

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt 16 saverestore-support-check fail in 163502 like 163458
 test-armhf-armhf-libvirt    15 migrate-support-check fail in 163502 never pass
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    1 days
Testing same since   163478  2021-07-09 15:23:45 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 05:26:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 05:26:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153948.284463 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m25VX-0007qd-7z; Sat, 10 Jul 2021 05:26:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153948.284463; Sat, 10 Jul 2021 05:26:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m25VX-0007qW-52; Sat, 10 Jul 2021 05:26:31 +0000
Received: by outflank-mailman (input) for mailman id 153948;
 Sat, 10 Jul 2021 05:26:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m25VV-0007qM-Ep; Sat, 10 Jul 2021 05:26:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m25VV-00034b-7R; Sat, 10 Jul 2021 05:26:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m25VU-0003xU-VX; Sat, 10 Jul 2021 05:26:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m25VU-0007Zg-V3; Sat, 10 Jul 2021 05:26:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=wi4XgEg1Js+y7ELSgY/gD4A7h6VqszawagLBUDaLD18=; b=42NlPBIZpRFnAlFkNpXvlzmlh+
	ktw2xvQptlTwuswNFNEtb/OjG5ylY1ck0tiOfEoaeA7JhKvu0u3iGpw3fwFKIf+fuMm2VT+zcqbT/
	kPPq79prhnbOrm5VtDGHgaIxKb/YftJJw/u6SXWqDM1JfahsX9CoCZ7unyC/2VSOE8G8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163503-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163503: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 05:26:28 +0000

flight 163503 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163503/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    0 days
Failing since        163480  2021-07-09 16:08:01 Z    0 days    3 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 06:49:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 06:49:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153957.284483 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m26nN-0007KD-JP; Sat, 10 Jul 2021 06:49:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153957.284483; Sat, 10 Jul 2021 06:49:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m26nN-0007K6-G1; Sat, 10 Jul 2021 06:49:01 +0000
Received: by outflank-mailman (input) for mailman id 153957;
 Sat, 10 Jul 2021 06:48:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m26nL-0007Jw-Ri; Sat, 10 Jul 2021 06:48:59 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m26nL-0004UQ-Ks; Sat, 10 Jul 2021 06:48:59 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m26nL-0006cs-Aj; Sat, 10 Jul 2021 06:48:59 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m26nL-0001Fr-AE; Sat, 10 Jul 2021 06:48:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=UqKoASKABHPdh/xlt+h26Kxv9tGUHHJJedYJK8XutdM=; b=FTqPZU+VUpfJo3Rp/5uXgd30SI
	AVusPS2LFebisIQSdKq9EmDDRPvA7FekZOI6NNvelAtQ12QIRQBpDov+afn3Ty6s6QWfytZkBQX5L
	761XIiOkWpSNtRSjIkE9iQhqSwnI2uzP50sMVqAFQaOG7yVWXs42OHmxEGgzHR1sn+nA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163482-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163482: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=9b76d71fa8be8c52dbc855ab516754f0c93e2980
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 06:48:59 +0000

flight 163482 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163482/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass

version targeted for testing:
 linux                9b76d71fa8be8c52dbc855ab516754f0c93e2980
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  343 days
Failing since        152366  2020-08-01 20:49:34 Z  342 days  584 attempts
Testing same since   163482  2021-07-09 17:47:44 Z    0 days    1 attempts

------------------------------------------------------------
6642 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1944806 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 06:55:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 06:55:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153964.284498 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m26tR-0000Of-HV; Sat, 10 Jul 2021 06:55:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153964.284498; Sat, 10 Jul 2021 06:55:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m26tR-0000OY-CY; Sat, 10 Jul 2021 06:55:17 +0000
Received: by outflank-mailman (input) for mailman id 153964;
 Sat, 10 Jul 2021 06:55:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m26tP-0000OO-Sn; Sat, 10 Jul 2021 06:55:15 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m26tP-0004bK-P0; Sat, 10 Jul 2021 06:55:15 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m26tP-00071g-Hq; Sat, 10 Jul 2021 06:55:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m26tP-0006cE-HM; Sat, 10 Jul 2021 06:55:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=HBW9ZGCgUYPUDNQdXICsHaAxXcYu1vsmgsKUf9gDdYQ=; b=vogKpSOzPJ4hKfJG5Yr8dCUqrb
	8NbQcH/1pt7Z/3Y3zvJqTt/FdBw4k/vmPMcbyZS2YHKIm3Gr9MEuD+etvHU+Ef2ImnP5ok/R1dGn2
	BaB5CIjBw7/n0W5kDFGGRou/si+ZDfwMM/okNPU0iggnOBbxSujRSDm9wA8JxWa8NGAs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163505-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163505: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=ad1009ec626bea7a718d595f98f0ad49a16c6e5b
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 06:55:15 +0000

flight 163505 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163505/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 ad1009ec626bea7a718d595f98f0ad49a16c6e5b
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   36 days
Failing since        162368  2021-06-04 15:42:59 Z   35 days  100 attempts
Testing same since   163505  2021-07-10 02:21:50 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3576 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 07:20:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 07:20:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153971.284512 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m27Hu-0003dH-EC; Sat, 10 Jul 2021 07:20:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153971.284512; Sat, 10 Jul 2021 07:20:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m27Hu-0003dA-Az; Sat, 10 Jul 2021 07:20:34 +0000
Received: by outflank-mailman (input) for mailman id 153971;
 Sat, 10 Jul 2021 07:20:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m27Hs-0003d0-BP; Sat, 10 Jul 2021 07:20:32 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m27Hs-00055a-4g; Sat, 10 Jul 2021 07:20:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m27Hr-0008ST-PY; Sat, 10 Jul 2021 07:20:31 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m27Hr-0000mb-Oz; Sat, 10 Jul 2021 07:20:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3cWHUIuyo9P0VKB4GYOs6yA8aEXLyWMJSgLP5mPyVyI=; b=X0+nhaaY9XqQho1Y5n+TCPyx5w
	9JPT0whDWBOQvJEsb78qM9PYYY0xCnzUBErVPd553m1f902DpCdu5civ+X+xTzzCDDzvDsQ7CTodd
	rsBDpffwfF9/5SM/WPY6mjoLLsnrvbQKZpzBJqI/8POjm4KXizH+6bgQX4V1LO2q9LyY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163486-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163486: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=05de778b5b8ab0b402996769117b88c7ea5c7c61
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 07:20:31 +0000

flight 163486 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163486/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                05de778b5b8ab0b402996769117b88c7ea5c7c61
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    4 days
Failing since        163327  2021-07-06 12:39:04 Z    3 days    7 attempts
Testing same since   163486  2021-07-09 20:08:05 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alex Bennée <alex.bennee@linaro.org>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  David Edmondson <david.edmondson@oracle.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Igor Mammedov <imammedo@redhat.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Michael S. Tsirkin <mst@redhat.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Vincent Bernat <vincent@bernat.ch>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1189 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 08:53:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 08:53:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.153988.284543 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m28je-0004OC-RL; Sat, 10 Jul 2021 08:53:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 153988.284543; Sat, 10 Jul 2021 08:53:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m28je-0004O5-NK; Sat, 10 Jul 2021 08:53:18 +0000
Received: by outflank-mailman (input) for mailman id 153988;
 Sat, 10 Jul 2021 08:53:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m28jd-0004Nv-Cn; Sat, 10 Jul 2021 08:53:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m28jd-0007Bq-5S; Sat, 10 Jul 2021 08:53:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m28jc-0004SH-Ti; Sat, 10 Jul 2021 08:53:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m28jc-0004CW-TD; Sat, 10 Jul 2021 08:53:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=OvKLBBryh/YDHhyvW0ntzU2ZW9GOlsk+dhlOckRMUTs=; b=BOdfQJQcVxkgJjeSeKRqn3NYeN
	HFKVDMSqsl83t0OPjycILuT/lDW/Gm+NJ2UYjpDB98LBIgoqXr+KIMSRF1woY9ERT0JlJB38mNPnK
	PdA2GVp+7S/rROfxVaIUJWV+PQwzKvzufPmdxOc0G2mGr5jMWAsh936PHGuNGfrpc4NI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163512-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163512: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 08:53:16 +0000

flight 163512 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163512/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    0 days
Failing since        163480  2021-07-09 16:08:01 Z    0 days    4 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 12:33:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 12:33:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154015.284576 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2CAl-0007ne-8p; Sat, 10 Jul 2021 12:33:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154015.284576; Sat, 10 Jul 2021 12:33:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2CAl-0007nW-2v; Sat, 10 Jul 2021 12:33:31 +0000
Received: by outflank-mailman (input) for mailman id 154015;
 Sat, 10 Jul 2021 12:33:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2CAj-0007nM-UP; Sat, 10 Jul 2021 12:33:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2CAj-0002RW-Ox; Sat, 10 Jul 2021 12:33:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2CAj-0008Fq-HU; Sat, 10 Jul 2021 12:33:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2CAj-0003Vm-H2; Sat, 10 Jul 2021 12:33:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=YyA2gdD3YTyTO8j1MyN2onj8g94mg7pvWjt7JihJzqo=; b=eGsyjEOSLjBH4/xQSEPwe316f6
	7PEPzF5gUQvqO9qE1IcTlybxpo6YY84JDCxFNEFAMW2kbKDWzHmCoXlsVG/4XvQFinGx1Cl/hii4y
	Tmz7APcIjlmZvW0T0s9xz939iA2l5CcM9iHLgwFbPtLgypMVbiCSVV16fc6W673GkZ/o=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163510-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163510: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=11fcf054e6778e977ea82baa10db9ee7a197d4f6
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 12:33:29 +0000

flight 163510 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163510/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              11fcf054e6778e977ea82baa10db9ee7a197d4f6
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  365 days
Failing since        151818  2020-07-11 04:18:52 Z  364 days  356 attempts
Testing same since   163510  2021-07-10 04:20:02 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64232 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 13:25:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 13:25:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154023.284596 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Cyu-0004Np-8e; Sat, 10 Jul 2021 13:25:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154023.284596; Sat, 10 Jul 2021 13:25:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Cyu-0004Ni-5g; Sat, 10 Jul 2021 13:25:20 +0000
Received: by outflank-mailman (input) for mailman id 154023;
 Sat, 10 Jul 2021 13:25:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Cys-0004NY-8W; Sat, 10 Jul 2021 13:25:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Cys-0003HA-26; Sat, 10 Jul 2021 13:25:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Cyr-0001xG-PM; Sat, 10 Jul 2021 13:25:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Cyr-0008Uz-Os; Sat, 10 Jul 2021 13:25:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=T8Bqytn7Lg1dXWsAAaeIEVNOb6B/49ri72Z1vq89UTA=; b=1MPBcZfdi5ylwoNM2FjKCrrQpK
	8sb4uYZ2OuOpgB48cUnXSXYC6LiDAmpPeCdybL9ter45bRlc1ivtdAlTFrdO2rJT8nGrU5pTKdWwz
	IjdKN38VUO4gkB1jfWDx5vUF1wvDsbZxYybW3KVmpJzpjAhV/iEwoVbrK+syp4WA3TWU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163520-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163520: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 13:25:17 +0000

flight 163520 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163520/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    1 days
Failing since        163480  2021-07-09 16:08:01 Z    0 days    5 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    0 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 15:17:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 15:17:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154037.284628 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Eim-0006NX-N4; Sat, 10 Jul 2021 15:16:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154037.284628; Sat, 10 Jul 2021 15:16:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Eim-0006NQ-Jv; Sat, 10 Jul 2021 15:16:48 +0000
Received: by outflank-mailman (input) for mailman id 154037;
 Sat, 10 Jul 2021 15:16:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Eil-0006NG-AF; Sat, 10 Jul 2021 15:16:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Eil-00058r-48; Sat, 10 Jul 2021 15:16:47 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Eik-0005jS-Tm; Sat, 10 Jul 2021 15:16:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Eik-0005Wp-TD; Sat, 10 Jul 2021 15:16:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=GcxdLGCS/x8C3upqYFxlc1ouU+5DDvT2kBm8qWSr5Iw=; b=adn1n1W02m9+6cwbnNzAygYUhd
	+TzOc0xfNwMqGkljkt6A0PuRwXfU688L0gWkRqdsByQRa8T7D28W2c7CnyEhphMunmfJdVafuAZts
	XR7Kfy5NS3H9a79dr22Zg6DpdL8dGBZc196RrZY0WpY0+dB5iaug1R649gU/UYLcCpzs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163506-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163506: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 15:16:46 +0000

flight 163506 xen-unstable real [real]
flight 163525 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163506/
http://logs.test-lab.xenproject.org/osstest/logs/163525/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    1 days
Testing same since   163478  2021-07-09 15:23:45 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 15:59:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 15:59:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154047.284651 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2FOB-0002AR-7j; Sat, 10 Jul 2021 15:59:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154047.284651; Sat, 10 Jul 2021 15:59:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2FOB-0002AK-4L; Sat, 10 Jul 2021 15:59:35 +0000
Received: by outflank-mailman (input) for mailman id 154047;
 Sat, 10 Jul 2021 15:59:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2FO9-0002AA-Rg; Sat, 10 Jul 2021 15:59:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2FO9-0005qb-MC; Sat, 10 Jul 2021 15:59:33 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2FO9-0006sg-BM; Sat, 10 Jul 2021 15:59:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2FO9-0007S3-Ar; Sat, 10 Jul 2021 15:59:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Bk0jjPgJSqoRZ2fecRMr1ofiYgNOwfTMQhVBbzgrMpM=; b=6G+hY633wQyiA0dwlX6nkFHiVn
	LYKUMBvu45QF/jPBZdGRCVp/hsuP1BcCTi+e0gn1+COlDhBrOfBx4KR3b3iGGir/Y0vvsGH5I1ndh
	q3xh176D8GkdTXIw52OVRJyh7zgSlH8vCN++cRZu09uIN68uEfmFy6AUup42OCtUXIV8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163515-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163515: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=ad1009ec626bea7a718d595f98f0ad49a16c6e5b
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 15:59:33 +0000

flight 163515 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163515/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 ad1009ec626bea7a718d595f98f0ad49a16c6e5b
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   36 days
Failing since        162368  2021-06-04 15:42:59 Z   36 days  101 attempts
Testing same since   163505  2021-07-10 02:21:50 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3576 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 17:26:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 17:26:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154063.284680 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Gjz-0002os-3F; Sat, 10 Jul 2021 17:26:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154063.284680; Sat, 10 Jul 2021 17:26:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Gjy-0002ol-Uh; Sat, 10 Jul 2021 17:26:10 +0000
Received: by outflank-mailman (input) for mailman id 154063;
 Sat, 10 Jul 2021 17:26:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Gjy-0002ob-Gn; Sat, 10 Jul 2021 17:26:10 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Gjy-0007nj-6v; Sat, 10 Jul 2021 17:26:10 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Gjy-00018S-05; Sat, 10 Jul 2021 17:26:10 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Gjx-0006o7-Vo; Sat, 10 Jul 2021 17:26:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=KD/PPjBfLCFnOljxsXQy9w68dC2drqEOR60dYPK21e0=; b=azJX/hiNHON1lrtFhM6jofRi82
	7TlHQS/KUBuO2gq8HYjK6fBVN7fprAxlMwhN+/vjapZqukDiZOta50vWNCdvqPFjcdzqOkw5p0GiF
	ZnyKsjBRrCZGelaWsi+H7u5x+r9dFfrtMaEqks8gH8PEfT1ka9PbliUiuIeFifOPaCHs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163527-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163527: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 17:26:09 +0000

flight 163527 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163527/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    1 days
Failing since        163480  2021-07-09 16:08:01 Z    1 days    6 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    0 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 17:36:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 17:36:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154070.284694 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2GuD-0004J8-31; Sat, 10 Jul 2021 17:36:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154070.284694; Sat, 10 Jul 2021 17:36:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2GuC-0004J1-W6; Sat, 10 Jul 2021 17:36:44 +0000
Received: by outflank-mailman (input) for mailman id 154070;
 Sat, 10 Jul 2021 17:36:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2GuB-0004IY-PI; Sat, 10 Jul 2021 17:36:43 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2GuB-0007y5-GR; Sat, 10 Jul 2021 17:36:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2GuB-0001Rp-9H; Sat, 10 Jul 2021 17:36:43 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2GuB-0007Y3-8k; Sat, 10 Jul 2021 17:36:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=e4APusrFepsHjov9WrBf3I/eYskWNyM0hs22bM76ynU=; b=YbQxiX82AiH2xY1w0rmNrT+so2
	PC1J8Omhkk9cyvhuOVD0BDEyFS8gt4WhcHzdBtuZOl2iPjTGd0s4bFZCBNVK8JNdQJZgRB/5fhckY
	6i1Cwy782hlqPsdTERjajDh0218OvC+CeMN9ku7U2jm9dz1vcAVWoaIZEcokYKJOx8Ss=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-amd64-libvirt-xsm
Message-Id: <E1m2GuB-0007Y3-8k@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 17:36:43 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-libvirt-xsm
testid guest-start

Tree: libvirt git://xenbits.xen.org/libvirt.git
Tree: libvirt_keycodemapdb https://gitlab.com/keycodemap/keycodemapdb.git
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163535/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-amd64-libvirt-xsm.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-amd64-libvirt-xsm.guest-start --summary-out=tmp/163535.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-amd64-libvirt-xsm guest-start
Searching for failure / basis pass:
 163486 fail [host=huxelrebe0] / 163321 [host=elbling0] 163311 [host=godello0] 163303 [host=fiano1] 163299 [host=chardonnay0] 163292 [host=huxelrebe1] 163276 [host=elbling1] 163235 [host=fiano0] 163228 [host=albana1] 163220 [host=pinot1] 163213 [host=godello0] 163204 [host=godello1] 163194 [host=chardonnay0] 163187 [host=huxelrebe1] 163179 [host=albana0] 163171 [host=godello0] 163163 ok.
Failure / basis pass flights: 163486 / 163163
(tree with no url: minios)
Tree: libvirt git://xenbits.xen.org/libvirt.git
Tree: libvirt_keycodemapdb https://gitlab.com/keycodemap/keycodemapdb.git
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/libvirt.git#2c846fa6bcc11929c9fb857a22430fb9945654ad-2c846fa6bcc11929c9fb857a22430fb9945654ad https://gitlab.com/keycodemap/keycodemapdb.git#27acf0ef828bf719b2053ba398b195829413dbdd-27acf0ef828bf719b2053ba398b195829413dbdd git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0\
 dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c7437ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#e3955ae93f5151ad2e982440b7c8d3776a9afee2-05de778b5b8ab0b402996769117b88c7ea5c7c61 git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c8\
 1d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#bb11edcec1a953ce590da797b0d005cd60f21e83-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Loaded 37426 nodes in revision graph
Searching for test results:
 163110 [host=godello0]
 163128 [host=pinot0]
 163142 [host=albana1]
 163156 [host=chardonnay0]
 163163 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163171 [host=godello0]
 163179 [host=albana0]
 163187 [host=huxelrebe1]
 163194 [host=chardonnay0]
 163204 [host=godello1]
 163213 [host=godello0]
 163220 [host=pinot1]
 163228 [host=albana1]
 163235 [host=fiano0]
 163276 [host=elbling1]
 163292 [host=huxelrebe1]
 163299 [host=chardonnay0]
 163303 [host=fiano1]
 163311 [host=godello0]
 163321 [host=elbling0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163476 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163477 fail irrelevant
 163479 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 4fb2820854a796ab75ffb2ec896b67268281ecde 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163481 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e5f607913cee3f3b486eb024dbc7079b51f6da57 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163483 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163464 fail irrelevant
 163485 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d43ebd9dc8a268195dcc8219ced96f9e3bdc4050 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163490 fail irrelevant
 163486 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163494 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 dd62bf14b756821fa293e3465955a41e9d460deb 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163497 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 b1600ff19553c7acfe10b43d4f50331deff876d5 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163500 blocked 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163501 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8d6cb100731c4d28535adbf2a3c2d1f29be3fef4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163504 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c5b36c25c2fe1110cf8646ef02083c71757d6e00 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163507 blocked 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 09af2d01a2fe6a0af08598bdfe12c9707f4d82ba
 163509 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163511 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163513 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 484910bf41fec2c80d79ed9c5c33831bee7318f0
 163517 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163519 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163522 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 09e2cd69956fe529bfc3d53dae477b44eff217d1
 163524 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 904806c69bd4e013491550d05f5c2cbdba9a9b38 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163526 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163529 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163530 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163532 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163535 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163163 (pass), for basis pass
 Result found: flight 163486 (fail), for basis failure
 Repro found: flight 163517 (pass), for basis pass
 Repro found: flight 163519 (fail), for basis failure
 0 revisions at 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163509 (pass), for last pass
 Result found: flight 163526 (fail), for first failure
 Repro found: flight 163529 (pass), for last pass
 Repro found: flight 163530 (fail), for first failure
 Repro found: flight 163532 (pass), for last pass
 Repro found: flight 163535 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163535/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-amd64-libvirt-xsm.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163535: tolerable FAIL

flight 163535 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163535/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-libvirt-xsm 14 guest-start             fail baseline untested


jobs:
 build-amd64-libvirt                                          pass    
 test-amd64-amd64-libvirt-xsm                                 fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Sat Jul 10 20:03:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 20:03:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154088.284729 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2JCI-0001ZB-Nc; Sat, 10 Jul 2021 20:03:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154088.284729; Sat, 10 Jul 2021 20:03:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2JCI-0001Z4-Ju; Sat, 10 Jul 2021 20:03:34 +0000
Received: by outflank-mailman (input) for mailman id 154088;
 Sat, 10 Jul 2021 20:03:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2JCH-0001Yu-4r; Sat, 10 Jul 2021 20:03:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2JCG-000270-OP; Sat, 10 Jul 2021 20:03:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2JCG-0000cr-Ct; Sat, 10 Jul 2021 20:03:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2JCG-0001YY-CP; Sat, 10 Jul 2021 20:03:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jld4vJCBPvRsA+RcjWeKC6LZiBnT0iDOe/BDPmAa0kA=; b=cAq00l2x/Zz+CIz4Lty5yz/S+N
	xt04FsdkLvu8qKMBJPGxnXzVSTlg0F7CUs6Je8Zv+chKiM0nhA7hSv2K0A02CRIDo6oe+GKt3fl7V
	YoyusLJdVFzGXhKusUgRMd8tDsozm+7w1OcVBy8wS4xnvfwNA5rXMENq+BMAX4Tts0H8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163514-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163514: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=50be9417e23af5a8ac860d998e1e3f06b8fd79d7
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 20:03:32 +0000

flight 163514 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163514/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass

version targeted for testing:
 linux                50be9417e23af5a8ac860d998e1e3f06b8fd79d7
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  344 days
Failing since        152366  2020-08-01 20:49:34 Z  342 days  585 attempts
Testing same since   163514  2021-07-10 06:52:13 Z    0 days    1 attempts

------------------------------------------------------------
6646 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1946887 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 20:38:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 20:38:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154097.284748 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Jjy-0004r4-Bg; Sat, 10 Jul 2021 20:38:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154097.284748; Sat, 10 Jul 2021 20:38:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Jjy-0004qx-8i; Sat, 10 Jul 2021 20:38:22 +0000
Received: by outflank-mailman (input) for mailman id 154097;
 Sat, 10 Jul 2021 20:38:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Jjx-0004qn-Mv; Sat, 10 Jul 2021 20:38:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Jjx-0002fr-EK; Sat, 10 Jul 2021 20:38:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Jjx-0002SS-7W; Sat, 10 Jul 2021 20:38:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Jjx-0007tD-4F; Sat, 10 Jul 2021 20:38:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Ike9Pv3OncBP2F6V0WKWq6Jl+WjmDMlnW7xiB7QhhG0=; b=dEMHyqf1CQ8vSW99TtoByI+7uR
	2Wk3yTKJkkXGyESEbymffIzDdCSKaV8jNQJQiIjKoD890oLp3SW/YdgX1+uj62KsZus63LxIlTnYT
	MxR0IYoJ70PfRenNHYqltC7fgX+8NdniWhS3T5sjxhUUDUduyc/WNlsqpNX+Iy/AOxnA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163538-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163538: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 20:38:21 +0000

flight 163538 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163538/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    1 days
Failing since        163480  2021-07-09 16:08:01 Z    1 days    7 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    0 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 10 21:54:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 21:54:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154107.284769 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Kv6-00044R-9o; Sat, 10 Jul 2021 21:53:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154107.284769; Sat, 10 Jul 2021 21:53:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Kv6-00044K-6i; Sat, 10 Jul 2021 21:53:56 +0000
Received: by outflank-mailman (input) for mailman id 154107;
 Sat, 10 Jul 2021 21:53:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Kv4-00044A-Pk; Sat, 10 Jul 2021 21:53:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Kv4-0003ry-Kn; Sat, 10 Jul 2021 21:53:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Kv4-000611-7K; Sat, 10 Jul 2021 21:53:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Kv4-0004Ly-6o; Sat, 10 Jul 2021 21:53:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=ZV/0kz48hZNz3r12x9v68EXI/qoI4OO76ADqTEA24eE=; b=kVV82eB0xGhvzOI6vIoKPdYhMe
	NuX9jIgNM/kTgQB919aQ01P+oDoY6SL/ENvZXrYNQoAT17TQPZ/2NIGGz3xTw53qNc5mCD9UZjy/M
	bIG4aQlj5xk26ovZFADSjzq99iwe5HuJfYtf7O/pHcSEoB865wk0i7U8yeKZHjtodujs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [xen-unstable bisection] complete test-amd64-amd64-qemuu-nested-amd
Message-Id: <E1m2Kv4-0004Ly-6o@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 21:53:54 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-qemuu-nested-amd
testid xen-boot/l1

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  bfcdaae9c210bd7984d7691285aaf43deb1b0604
  Bug not present: 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163542/


  commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
  Author: Jan Beulich <jbeulich@suse.com>
  Date:   Fri Jul 9 08:28:14 2021 +0200
  
      x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
      
      Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
      exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
      at least on Fam11 and older CPUs, are also consulted by modern Linux,
      and their (bogus) built-in zapping of #GP faults from MSR accesses leads
      to it effectively reading zero instead of the intended values, which are
      relevant for PCI BAR placement (which ought to all live in MMIO-type
      space, not in DRAM-type one).
      
      For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
      covers the IORRs, expose them as well. Introduce (consistently named)
      constants for the bits we're interested in and use them in pre-existing
      code as well. While there also drop the unused and somewhat questionable
      K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
      MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
      gets read by Linux, dealing with which was already the subject of
      6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
      MSR reads"]).
      
      As a welcome side effect, verbosity on/of debug builds gets (perhaps
      significantly) reduced.
      
      Note that at least as far as those MSR accesses by Linux are concerned,
      there's no similar issue for DomU-s, as the accesses sit behind PCI
      device matching logic. The checked for devices would never be exposed to
      DomU-s in the first place. Nevertheless I think that at least for HVM we
      should return sensible values, not 0 (as svm_msr_read_intercept() does
      right now). The intended values may, however, need to be determined by
      hvmloader, and then get made known to Xen.
      
      Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
      Reported-by: Olaf Hering <olaf@aepfle.de>
      Signed-off-by: Jan Beulich <jbeulich@suse.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/xen-unstable/test-amd64-amd64-qemuu-nested-amd.xen-boot--l1.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/xen-unstable/test-amd64-amd64-qemuu-nested-amd.xen-boot--l1 --summary-out=tmp/163542.bisection-summary --basis-template=163458 --blessings=real,real-bisect,real-retry xen-unstable test-amd64-amd64-qemuu-nested-amd xen-boot/l1
Searching for failure / basis pass:
 163506 fail [host=pinot0] / 163458 ok.
Failure / basis pass flights: 163506 / 163458
(tree with no url: minios)
(tree with no url: ovmf)
(tree with no url: seabios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://xenbits.xen.org/qemu-xen.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c7437ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://xenbits.xen.org/qemu-xen.git#136c34c9bc4179dc64b15b2bb5f0c54\
 ca4ddf823-136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 git://xenbits.xen.org/xen.git#0f435e2b58543f5baae96e17a10ae20d3dbc28fa-6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Loaded 5001 nodes in revision graph
Searching for test results:
 163458 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163478 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
 163508 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163518 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
 163521 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 836314747b0fd1688fc9526f7c73fd9313ba82f3
 163506 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
 163523 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
 163528 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 bfcdaae9c210bd7984d7691285aaf43deb1b0604
 163534 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
 163537 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 bfcdaae9c210bd7984d7691285aaf43deb1b0604
 163539 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
 163542 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 bfcdaae9c210bd7984d7691285aaf43deb1b0604
Searching for interesting versions
 Result found: flight 163458 (pass), for basis pass
 For basis failure, parent search stopping at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111, results HASH(0x5587144c06f0) HASH(0x5587144d0c00) HASH(0x5587144cd070) For basis failure, parent search stopping at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9b\
 c4179dc64b15b2bb5f0c54ca4ddf823 0f435e2b58543f5baae96e17a10ae20d3dbc28fa, results HASH(0x5587144c8738) HASH(0x5587144c3980) Result found: flight 163478 (fail), for basis failure (at ancestor ~620)
 Repro found: flight 163508 (pass), for basis pass
 Repro found: flight 163518 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 136c34c9bc4179dc64b15b2bb5f0c54ca4ddf823 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
No revisions left to test, checking graph state.
 Result found: flight 163523 (pass), for last pass
 Result found: flight 163528 (fail), for first failure
 Repro found: flight 163534 (pass), for last pass
 Repro found: flight 163537 (fail), for first failure
 Repro found: flight 163539 (pass), for last pass
 Repro found: flight 163542 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  xen git://xenbits.xen.org/xen.git
  Bug introduced:  bfcdaae9c210bd7984d7691285aaf43deb1b0604
  Bug not present: 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163542/


  commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
  Author: Jan Beulich <jbeulich@suse.com>
  Date:   Fri Jul 9 08:28:14 2021 +0200
  
      x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
      
      Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
      exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
      at least on Fam11 and older CPUs, are also consulted by modern Linux,
      and their (bogus) built-in zapping of #GP faults from MSR accesses leads
      to it effectively reading zero instead of the intended values, which are
      relevant for PCI BAR placement (which ought to all live in MMIO-type
      space, not in DRAM-type one).
      
      For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
      covers the IORRs, expose them as well. Introduce (consistently named)
      constants for the bits we're interested in and use them in pre-existing
      code as well. While there also drop the unused and somewhat questionable
      K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
      MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
      gets read by Linux, dealing with which was already the subject of
      6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
      MSR reads"]).
      
      As a welcome side effect, verbosity on/of debug builds gets (perhaps
      significantly) reduced.
      
      Note that at least as far as those MSR accesses by Linux are concerned,
      there's no similar issue for DomU-s, as the accesses sit behind PCI
      device matching logic. The checked for devices would never be exposed to
      DomU-s in the first place. Nevertheless I think that at least for HVM we
      should return sensible values, not 0 (as svm_msr_read_intercept() does
      right now). The intended values may, however, need to be determined by
      hvmloader, and then get made known to Xen.
      
      Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
      Reported-by: Olaf Hering <olaf@aepfle.de>
      Signed-off-by: Jan Beulich <jbeulich@suse.com>

Revision graph left in /home/logs/results/bisect/xen-unstable/test-amd64-amd64-qemuu-nested-amd.xen-boot--l1.{dot,ps,png,html,svg}.
----------------------------------------
163542: tolerable ALL FAIL

flight 163542 xen-unstable real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163542/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1        fail baseline untested


jobs:
 test-amd64-amd64-qemuu-nested-amd                            fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Sat Jul 10 22:16:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 10 Jul 2021 22:16:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154114.284783 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2LH3-0006T5-6E; Sat, 10 Jul 2021 22:16:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154114.284783; Sat, 10 Jul 2021 22:16:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2LH3-0006Sy-2V; Sat, 10 Jul 2021 22:16:37 +0000
Received: by outflank-mailman (input) for mailman id 154114;
 Sat, 10 Jul 2021 22:16:35 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2LH1-0006So-Kf; Sat, 10 Jul 2021 22:16:35 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2LH1-0004Fr-Ad; Sat, 10 Jul 2021 22:16:35 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2LH1-00087F-14; Sat, 10 Jul 2021 22:16:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2LH1-00033m-0b; Sat, 10 Jul 2021 22:16:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=TxFP5ji3z4kwliGocRCT+P2jhIhCqUoHIaIjEp72XmI=; b=fd3k/qV1rJJw7kY+W9EDS1Yjth
	17QRyvTiPh6awj3B9XdRbBPAWAYhHLH8lIpSx4dwlmerW/sR8g3C5XH6lgO5yKAljT4b8kiNCk6zU
	H680S/RBGXPX7Zdk1Y5nZwVO5sKYFhQAaljwYMqN8JNQjYnS4W2QDRQJQnpnyYs8VNMQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163516-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163516: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=05de778b5b8ab0b402996769117b88c7ea5c7c61
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 10 Jul 2021 22:16:35 +0000

flight 163516 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163516/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                05de778b5b8ab0b402996769117b88c7ea5c7c61
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    4 days
Failing since        163327  2021-07-06 12:39:04 Z    4 days    8 attempts
Testing same since   163486  2021-07-09 20:08:05 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alex Bennée <alex.bennee@linaro.org>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  David Edmondson <david.edmondson@oracle.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Igor Mammedov <imammedo@redhat.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Michael S. Tsirkin <mst@redhat.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Vincent Bernat <vincent@bernat.ch>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1189 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 00:17:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 00:17:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154124.284803 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2N9U-0001Ng-4z; Sun, 11 Jul 2021 00:16:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154124.284803; Sun, 11 Jul 2021 00:16:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2N9U-0001NZ-1B; Sun, 11 Jul 2021 00:16:56 +0000
Received: by outflank-mailman (input) for mailman id 154124;
 Sun, 11 Jul 2021 00:16:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2N9T-0001NP-8p; Sun, 11 Jul 2021 00:16:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2N9S-0006nl-W5; Sun, 11 Jul 2021 00:16:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2N9S-00059s-Ns; Sun, 11 Jul 2021 00:16:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2N9S-0004SJ-NO; Sun, 11 Jul 2021 00:16:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=B4WtbNc1JVskZi6IfuoQPhVjusSZ6a0cA+rzrL8dEpc=; b=FlxOBJTGWuLZwFswgWMere11yv
	hgCLMA4aKwkIDurUxfp4Bz+HUhAHrjAyZ22ocJp3Ji8lBK4qANUEcojMHyFQb8x/Txf5n2EDWx2y5
	tpAknusDfIVbPm/Jx0FUUS/gBqq8+3X1HHdGIwB/WboNSr/1zaoOhcsk44+6SUMswjIQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163533-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163533: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=ad1009ec626bea7a718d595f98f0ad49a16c6e5b
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 00:16:54 +0000

flight 163533 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163533/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 ad1009ec626bea7a718d595f98f0ad49a16c6e5b
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   36 days
Failing since        162368  2021-06-04 15:42:59 Z   36 days  102 attempts
Testing same since   163505  2021-07-10 02:21:50 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3576 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 00:31:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 00:31:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154131.284817 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2NNr-0003gE-G3; Sun, 11 Jul 2021 00:31:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154131.284817; Sun, 11 Jul 2021 00:31:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2NNr-0003g7-D3; Sun, 11 Jul 2021 00:31:47 +0000
Received: by outflank-mailman (input) for mailman id 154131;
 Sun, 11 Jul 2021 00:31:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2NNq-0003fx-GJ; Sun, 11 Jul 2021 00:31:46 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2NNq-00072h-7C; Sun, 11 Jul 2021 00:31:46 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2NNp-0005pm-VN; Sun, 11 Jul 2021 00:31:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2NNp-0004ZP-Ut; Sun, 11 Jul 2021 00:31:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=sPrQBmVng3GRpZXqzjtXsWechvkeUiifGHMXQPMitfU=; b=pN8XAuZzyfUNRqSD1yimyQRd+h
	4jVNU+HhwgXgOq1fcvoDytUnDZjXJ7cSExhJgwm8ZMkyghPIHlMbxrxMqcyaYrOshmudBrXjGRCge
	daUEqBHEeFq9Y6YCNvp0MlUZBs5tD74yVosgOKTPCCILVNaMSPPaQ3hWQ6RfPuuDZb1A=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163543-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163543: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 00:31:45 +0000

flight 163543 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163543/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    1 days
Failing since        163480  2021-07-09 16:08:01 Z    1 days    8 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    1 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 02:56:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 02:56:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154141.284840 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Pcx-00016T-Qb; Sun, 11 Jul 2021 02:55:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154141.284840; Sun, 11 Jul 2021 02:55:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Pcx-00016M-Lq; Sun, 11 Jul 2021 02:55:31 +0000
Received: by outflank-mailman (input) for mailman id 154141;
 Sun, 11 Jul 2021 02:55:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Pcw-00016C-5p; Sun, 11 Jul 2021 02:55:30 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Pcv-0001zW-So; Sun, 11 Jul 2021 02:55:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Pcv-0002EK-F4; Sun, 11 Jul 2021 02:55:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Pcv-00011x-Eb; Sun, 11 Jul 2021 02:55:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=pG9uYiQ/JhCNkIaxuXwVsIdxW8C1rXIDfCiyd7E3aQY=; b=fpXZ5UIhyEmKZHGk6OuQtFdAUX
	dmSIStShQHj3RGWq3AaSN75yO/8/u7it057OXbmX7zIH1OGB+6H/zAgKOBIqDpevqkWVVFj5zaneY
	d9pveHp+0YjnDOPdVFm8qRejUg3vVFhXt9cvvf04EJkuBvfyw7rvKMc0m/V7+fOiT8HU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163531-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163531: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 02:55:29 +0000

flight 163531 xen-unstable real [real]
flight 163548 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163531/
http://logs.test-lab.xenproject.org/osstest/logs/163548/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    2 days
Testing same since   163478  2021-07-09 15:23:45 Z    1 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 03:59:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 03:59:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154150.284856 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2QcV-00075B-K2; Sun, 11 Jul 2021 03:59:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154150.284856; Sun, 11 Jul 2021 03:59:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2QcV-000754-Gp; Sun, 11 Jul 2021 03:59:07 +0000
Received: by outflank-mailman (input) for mailman id 154150;
 Sun, 11 Jul 2021 03:59:06 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2QcU-00074u-E3; Sun, 11 Jul 2021 03:59:06 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2QcU-00031i-5o; Sun, 11 Jul 2021 03:59:06 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2QcT-0003xW-T5; Sun, 11 Jul 2021 03:59:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2QcT-0003nq-Sa; Sun, 11 Jul 2021 03:59:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=dxa8C2Ww2vFx7MSO5G/9/HrTttQ4tMj06IiUcatAqOA=; b=olFOp0l17IfJEiVrNgQquiHK2m
	iuPy8QjBQQr0eByV4eepZnFZ270IfGI3RdogY7ASL9QERDHwI/Rw8Kzec3IHAxsOaWVNqDBvTublh
	kmYv2tpVnIzkcC8vtLtjNNteL9YUq+bK8I0e+/RMTQqyWMyoZifthy1kUvDsmplkvQz0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163549-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163549: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 03:59:05 +0000

flight 163549 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163549/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    1 days
Failing since        163480  2021-07-09 16:08:01 Z    1 days    9 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    1 days    8 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 05:21:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 05:21:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154162.284877 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2RuI-0007a2-TD; Sun, 11 Jul 2021 05:21:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154162.284877; Sun, 11 Jul 2021 05:21:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2RuI-0007Zv-Ph; Sun, 11 Jul 2021 05:21:34 +0000
Received: by outflank-mailman (input) for mailman id 154162;
 Sun, 11 Jul 2021 05:21:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2RuH-0007Zl-RI; Sun, 11 Jul 2021 05:21:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2RuH-0004qt-Gm; Sun, 11 Jul 2021 05:21:33 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2RuH-0006MA-7V; Sun, 11 Jul 2021 05:21:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2RuH-0005WE-71; Sun, 11 Jul 2021 05:21:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Ez0tNNgKH9ZlXxUb+UxeSU08I+hOq2QFEtbgOKYMQUQ=; b=Vkd5/hDMq+vfc+wWNQzgCKNFE0
	uIjycDIEl2Nrbo/0vAgdAaYCVM+tHE53PzujAHgCdBJWgChvuvhY+oE9KRUJGMInSYRd5zrIeqNPr
	dTe/bfpxhWayaAU68X6SnK4zBh04O7/n2/1bYirWmn7qt3xxvWf9J9vi+hKDr29Q+1xc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163541-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163541: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:host-ping-check-xen:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=1e16624d7b4376797ede36e3c955375cf0f23298
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 05:21:33 +0000

flight 163541 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163541/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl          10 host-ping-check-xen      fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                1e16624d7b4376797ede36e3c955375cf0f23298
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  344 days
Failing since        152366  2020-08-01 20:49:34 Z  343 days  586 attempts
Testing same since   163541  2021-07-10 20:12:39 Z    0 days    1 attempts

------------------------------------------------------------
6677 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1963267 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 06:09:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 06:09:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154170.284890 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Sez-0003XZ-Lt; Sun, 11 Jul 2021 06:09:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154170.284890; Sun, 11 Jul 2021 06:09:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Sez-0003XS-Iw; Sun, 11 Jul 2021 06:09:49 +0000
Received: by outflank-mailman (input) for mailman id 154170;
 Sun, 11 Jul 2021 06:09:48 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Sey-0003XI-Ah; Sun, 11 Jul 2021 06:09:48 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Sey-0005hk-6G; Sun, 11 Jul 2021 06:09:48 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Sex-00083p-VU; Sun, 11 Jul 2021 06:09:48 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Sex-0005qS-Rq; Sun, 11 Jul 2021 06:09:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=OmU+PLAahPAWMot5v1F4aWpIfmKbtQBhzfmbqwVIkZg=; b=Lawe+lCI8z4MWaGyL43Zkmjapx
	LRlhcpIliMLyGFe3H4duZv3REi1Y/uRIqcegiONYvAI0RxkAQ3vO4smMRJ8NZQAXADUrmfgRhkQiX
	SwIBB958bx4R7VAZFchzpVHBKPKYBcCLC2LkSmbmTV/F5M8p+yNGZW0z3O96uEd6fIKY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163547-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163547: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=ad1009ec626bea7a718d595f98f0ad49a16c6e5b
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 06:09:47 +0000

flight 163547 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163547/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 ad1009ec626bea7a718d595f98f0ad49a16c6e5b
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   37 days
Failing since        162368  2021-06-04 15:42:59 Z   36 days  103 attempts
Testing same since   163505  2021-07-10 02:21:50 Z    1 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3576 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 06:13:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 06:13:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154176.284904 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Si7-0004wW-55; Sun, 11 Jul 2021 06:13:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154176.284904; Sun, 11 Jul 2021 06:13:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Si7-0004wP-20; Sun, 11 Jul 2021 06:13:03 +0000
Received: by outflank-mailman (input) for mailman id 154176;
 Sun, 11 Jul 2021 06:13:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hnat=MD=yahoo.com=hack3rcon@srs-us1.protection.inumbo.net>)
 id 1m2Si5-0004wI-Kv
 for xen-devel@lists.xenproject.org; Sun, 11 Jul 2021 06:13:02 +0000
Received: from sonic304-56.consmr.mail.bf2.yahoo.com (unknown [74.6.128.31])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0b40ba66-e20f-11eb-86a8-12813bfff9fa;
 Sun, 11 Jul 2021 06:13:00 +0000 (UTC)
Received: from sonic.gate.mail.ne1.yahoo.com by
 sonic304.consmr.mail.bf2.yahoo.com with HTTP; Sun, 11 Jul 2021 06:13:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0b40ba66-e20f-11eb-86a8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1625983980; bh=Ebu+7k3DOYvgHrN5J0mdaoSnTJwRXFP5Yza6Nr1wo3Y=; h=Date:From:To:Subject:References:From:Subject:Reply-To; b=BJy3zgqoOtYcfdVCwrRF0Lri0J6SBLxgRdfM/2Cm2GAaKQIroHAeH9N67dvZG/4XT3gs/keAT3N0VAeaas0Bt6JIRkNI7V/SSuVgnd67OTRCXB50ffYv9jo7BL4g97bsHu/+LjiAonsrUocw9cJDHbpwQEtTewpq9xHUqqpF4M6n+/f8X6BfCHYjPyzmbZhw4lYXhlICmfVsCinfp5iV1cyMidh2P+5p892HsAbW51UDdCPFgRlYm0OOuDBkXrS9JvcX4p9chXY7qAW24ChW1GT5kkc4AwPmjjkj2N9nFXTbJRiZxC2IjBL4rVe8edRgAxRgDYZG4JNZ3zGPjLh+5w==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1625983980; bh=EkOTeg9AtopRfvrXIlB6/JRvjb4YAKkldL9WVps2yiw=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=fVV4V9ID/yNaODb1/o9AHRa6PhgcaOEgbs1d0qPYzQ8Jl7jRCZMMNAy3TX0i+y8Uw3jw3wOC9VlLxw2txDB24hZAbQ4ounBca/kYPKp3LnfYuvjybXrIsfh9VNI+JMvJAKmBh7FI76VWxVO8KVCOVmNigeGAu5eRd1Va7PM+mDo0bjoe0ha6q+dLuEXgkM5L/p3dCyOF1isSLbNY8WkzrOTFOxUD5BUnrxuU8/KFHKKCxt15Y0WQu6JguPqUWSdFEH5LHWbEcYVc3eN2gKI9gWokaz/hP90sxfzEopSghI7OH+A1I2+6rohTVWMwHVkPH8sFHE0ZGlmtCvc44gE1rw==
X-YMail-OSG: dZc48S4VM1nYFb.1L1YL9vXl90M5Ho5Kv4lTfesHJsQndeLdELOAZmBG9uPTC3G
 17lmKm0AYP4_i.Acf8e0mjx.S58GYLukAH5ReMfvQErKvK85dqICFYbsJAdGwyE20Rz7xmTp9iTT
 LjLgJiLWMhxHGAejl37pnGl9.RqeoPMuoAwKD3HoT1JFm_wvHar9m.KpO9JvjKD4eY1UMLkWQavk
 2B73r.hWMcq9IOgFndKEsQMn20D2A8_xJIN3_DGb_bTdgFio0jaJRRhk5lfiLuzK7V3nC7vPDrMT
 KjxpHuDlO6wOJx3iaMJg_m2vI2VNE1ZBqTG4Sxr86SYe1WBTlfoo3dfem8TLSmRTzwfcgVzxK6AJ
 E7bWZhnJy8YF34QP8uo2FLv4QlB80IyDga1nGX47C6O9wGRLWT9N2wI4zM.Ip35dBBHSdgsyoXoa
 k0z2r00BaOV2wPlAz8T_VfhynD3JiyQoY6jEeYf7W_GJycRfWnuu3F32sqrbzROvAjT7Nk15UbLG
 JPFMr04o2psn1IyjTs2tmnb_2tjhM490uZNMY08cdGnSY0hSqxuiVkjI_sAGmyxghd.v1oyiYQXG
 ZK9pFz0JQepSexOMbOXKiAAnPkj5O2ocpK5MM.l_DH75GCw4UobkFbvAaCWqY4yFIl1ydFXvWE3u
 UlA0GNa5dCl9kuSTparpLCbHXDYutFT6eL12a7TRR2u5OTzdsusc6b49zsPJfFlsvkuyKjjQdI5U
 2ylc1oo9nuO.vNOCyvD7Vwg.hk02P_xW_pQaStijPPlRPjXO_AE2uvFZHNQxZRltt7Os39LdfZqC
 35GjkJfQCew_ywPLRswEuM6VD0uptjMZ7B3tAE.zlZ4j2pf5tNwLdSPOgvYTffgwAdZtp1ROPoWr
 SwBEvyYdssWrsvCCUw8XKOFzC82w3xwIaJq2sKBai1XTpi_J8jI0vqUhKs99xJTqTAlTJf8Pki6n
 xcGLeWbHXe5g3r1l7NYXAyWK4Eu_y6MVRz59Tz32XFid7.B4fDybb9iFbOL2nkmCFlb1ymMK5WyP
 McW00vJql_u4bsofgks9agGa_6KBg_TK9JVl7VhtDDb.0Sx8tV5tUWpTHPhmJ.cmMLdEm.bA8773
 qmcL_Nf_CO0FJOwdn2SI1zz78ZJjCLHNWtFedH_2pF_T50tYAeuE0jkYfO2GpRj9jKfHgHcmA9Aa
 hphcTmU5R6aptprcGCjNzFHzykZZ.gMQjvNf5u2tRagCm3o_.w1P9lcjHqrrjebi9DbU9uR5kuU6
 qxJQJiou83WbTE_eMkx39IVHp10zDsOhLIcu0zl4YcBgufzIR2ksixVyaskVsfd2Kgk9YokOD3vW
 Zeh4LBqZskvk14MEVkhkbFKdxMtgAXElXZegKOsYTcl_kU4K_hYVy.arw5alCHevsYPjJnXjP71u
 wAVfdIQMCQQK25j5VbrTKnk6mSyBxNQ0m7A836LhzFh8U_4xMdzuq83Kkw45yTdlFjkBcsC6S2ZD
 TS7IfHuZ1DSdH4OhT9ONdGOdnC12nrvRBN4lw_bvrmvCRv.PPhJoiy03wCB7REWDBoMwNvnL6kMr
 NPLU3EvGOvxRZTKLGllCjftz5XtGlsVqsY69vFLdZfQrzWKmWuWXPgbA9AxWyFd7z0vLiv3K3QGu
 wAA2USebx3Pd302wQv_2dFF9kV1CA7NUy9MHXA96NWapez2iOZOhkr4l562x5lTLPTDhR4ry0Bum
 716vIq7lP.FP2GhS.2v.21gdNKdThlgUk1DBlBWQL5ElHc82MmQiomGseIViwcwM0hmnwhj2zm4L
 _6.2yWhKZkML3t3h56PhvMWdTGvFXHDahgAcYbnHjqCbyHP2JEGthULeSUeRVjrBvJh6FyeaesQ0
 q77xiok4JfowcOe5yV4Z2WVN90p3sT2padqAUlLzGcHi.TpiElX7tkuTb2lN7j8AcznRQ2Y3M145
 2GkFOz98uHrTDyUafDx.egqpZhtQUjqOCsTqLJjFgBf1Eocrb9MTcZuWOBJq.qTLx2Hoa1Db.sQq
 uXxOPYInhel2rzXR00XwBKvbsLXRe2OXMD9Cdw._IrOKp8gX8qsPSrjJKX9cGbB9J.CPNwihz9Co
 uWirZE6ZCc7yIfAS.gly7Mjvpv40dmSiwcRTby0hAEvcLUaxTuQj91a9_Yu_eHiMGjF71KbYl2bw
 wfw6mpgkZjl8ksiP.zOOFj.xRXwYHYbnmP7HiiWG0OEQw_lPnzOTwwDq2d7ezqSfadVTfV1e_ORn
 MOTF4K_93wqnM96H3v96lmMBHc_cLSb25aPrFIhmjb.2WEw5fhiIVuJqEBIy26IHvzlZXFpSNPPb
 AwQm97WrurszhTwTzJ_ibzFTJqwPHolUkOUd_p.CHiOVc8E.UVMKn5vkol3s3QcTBQVUay9qWcF6
 U.gJMonWEUFq2RuXCCHw5Z7t0mhCXU1ON
X-Sonic-MF: <hack3rcon@yahoo.com>
Date: Sun, 11 Jul 2021 06:12:56 +0000 (UTC)
From: Jason Long <hack3rcon@yahoo.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
Message-ID: <965827691.2911401.1625983976625@mail.yahoo.com>
Subject: Why not a Xen forum on LF website?
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
References: <965827691.2911401.1625983976625.ref@mail.yahoo.com>
X-Mailer: WebService/1.1.18469 YMailNorrin
Content-Length: 77

Hello,
Why Linux Foundation has a KVM forum, but not a Xen forum?


Thanks.


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 09:30:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 09:30:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154195.284940 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Vmz-0006gq-2b; Sun, 11 Jul 2021 09:30:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154195.284940; Sun, 11 Jul 2021 09:30:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Vmy-0006gj-V7; Sun, 11 Jul 2021 09:30:16 +0000
Received: by outflank-mailman (input) for mailman id 154195;
 Sun, 11 Jul 2021 09:30:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vmy-0006gZ-6U; Sun, 11 Jul 2021 09:30:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vmx-00014J-W0; Sun, 11 Jul 2021 09:30:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vmx-0001eR-NF; Sun, 11 Jul 2021 09:30:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vmx-0002wU-Ml; Sun, 11 Jul 2021 09:30:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3VKhD1s/vUlnTby5dd6c/V3ZoSpIGzzlF3ssWtg/nUg=; b=TqTlfNHCz2Yb96CjviLPn1IR8X
	PyM/pBqatfr8Pyijqe552fj+h0L1z4BYOYh4q7eZFSthQrTdy9jpYeKd1nHGoEvbTqKm0cPW9IGS1
	h9e479v5pb5c0Rf7ZfRCaK3eeNVZmPjdZ7o+MsBKkVEJ9QErBsCjM96WA1fQsoAi6Vo0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163553-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163553: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 09:30:15 +0000

flight 163553 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163553/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    1 days
Failing since        163480  2021-07-09 16:08:01 Z    1 days   10 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    1 days    9 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 09:40:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 09:40:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154202.284954 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Vwm-0008Aj-4G; Sun, 11 Jul 2021 09:40:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154202.284954; Sun, 11 Jul 2021 09:40:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Vwm-0008Ac-0V; Sun, 11 Jul 2021 09:40:24 +0000
Received: by outflank-mailman (input) for mailman id 154202;
 Sun, 11 Jul 2021 09:40:23 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vwl-0008AS-69; Sun, 11 Jul 2021 09:40:23 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vwl-0001Dt-0P; Sun, 11 Jul 2021 09:40:23 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vwk-0002WJ-Li; Sun, 11 Jul 2021 09:40:22 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Vwk-0005yG-LD; Sun, 11 Jul 2021 09:40:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=wkIff+ayTGe9NsxV490INosAO7EXtbm56lGn7g7FV5Y=; b=fLSx1xQQk/Zt2/uRNaSGF0MDeB
	7EfA68kA91UZ4D1C6aowpdYrQsx0YUUJlurmAwSBMsQFElLPGqPxr03hklEh7vI3yzNWO21PbK9E4
	nlGE8sql9w2bVWIIZdsQPed0s3gpvAeDEPjFTNl+9UzVHSLgY84/LeQlXOejtUDTKH9o=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163545-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163545: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=42e1d798a6a01817bdcf722ac27eea01531e21cd
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 09:40:22 +0000

flight 163545 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163545/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                42e1d798a6a01817bdcf722ac27eea01531e21cd
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    5 days
Failing since        163327  2021-07-06 12:39:04 Z    4 days    9 attempts
Testing same since   163545  2021-07-10 22:38:01 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Or Ozeri <oro@il.ibm.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3003 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 10:03:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 10:03:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154210.284968 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2WJN-0002MD-7Y; Sun, 11 Jul 2021 10:03:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154210.284968; Sun, 11 Jul 2021 10:03:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2WJN-0002M6-4U; Sun, 11 Jul 2021 10:03:45 +0000
Received: by outflank-mailman (input) for mailman id 154210;
 Sun, 11 Jul 2021 10:03:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WJL-0002Lw-4h; Sun, 11 Jul 2021 10:03:43 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WJL-0001hR-0E; Sun, 11 Jul 2021 10:03:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WJK-00039x-Pf; Sun, 11 Jul 2021 10:03:42 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WJK-00022n-P9; Sun, 11 Jul 2021 10:03:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=t8JR4lGH8t0bK7K2oY1P41guwKaZVOTe05n6F3973vU=; b=oBRsMg1r5pyh9QoKgWY5o9sXYB
	usqtru4COnO8bGC1LXCNDBZCTsnAutA1gE9g8o3mrIsvs3XyRMFYxBR83tlKDpzbkBH85p44RgvjV
	VVeI0RhXYzK25vwXvINPxLmKNk7xaCxkx65r3ujahaA8gM5Iza7TLn2U9xMDi53icIg8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163555-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163555: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=11fcf054e6778e977ea82baa10db9ee7a197d4f6
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 10:03:42 +0000

flight 163555 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163555/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              11fcf054e6778e977ea82baa10db9ee7a197d4f6
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  366 days
Failing since        151818  2020-07-11 04:18:52 Z  365 days  357 attempts
Testing same since   163510  2021-07-10 04:20:02 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64232 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 10:23:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 10:23:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154217.284982 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2WcC-0004hN-Qj; Sun, 11 Jul 2021 10:23:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154217.284982; Sun, 11 Jul 2021 10:23:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2WcC-0004hG-N4; Sun, 11 Jul 2021 10:23:12 +0000
Received: by outflank-mailman (input) for mailman id 154217;
 Sun, 11 Jul 2021 10:23:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WcB-0004h6-1R; Sun, 11 Jul 2021 10:23:11 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WcA-00020y-QY; Sun, 11 Jul 2021 10:23:10 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WcA-0003jR-Ex; Sun, 11 Jul 2021 10:23:10 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2WcA-0003Ky-EV; Sun, 11 Jul 2021 10:23:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=WenS3ESgwqmMdSN95aSEPzDzZ+cC4Vs7TKmAQ6RSpcM=; b=wbyKjKGAwgzEvwdhF2Ck+pHUDA
	t+e+D2VlC1HCDejvYHeFJAHT7P+1+Y5OEMr8wN5+n0us/gsjrAqfD/hDANM+AwKfjfSRNdXI6orVp
	ukFiclSqd0qi3aml1QmiaEHnTjameS6dn4NAJkh+COjDIe1bkFJ+8N09+tkdhqCx8qDw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163562-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-coverity test] 163562: all pass - PUSHED
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=4473f3601098a2c3cf5ab89d5a29504772985e3a
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 10:23:10 +0000

flight 163562 xen-unstable-coverity real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163562/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  4473f3601098a2c3cf5ab89d5a29504772985e3a

Last test of basis   163396  2021-07-07 09:23:02 Z    4 days
Testing same since   163562  2021-07-11 09:18:28 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Bertrand Marquis <bertrand.marquis@arm.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Michal Orzel <michal.orzel@arm.com>
  Olaf Hering <olaf@aepfle.de>
  Rahul Singh <rahul.singh@arm.com>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 coverity-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/xen.git
   4473f36010..6de3e5fce5  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf -> coverity-tested/smoke


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 13:01:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 13:01:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154234.285008 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Z5R-0002SB-HF; Sun, 11 Jul 2021 13:01:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154234.285008; Sun, 11 Jul 2021 13:01:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2Z5R-0002S4-EE; Sun, 11 Jul 2021 13:01:33 +0000
Received: by outflank-mailman (input) for mailman id 154234;
 Sun, 11 Jul 2021 13:01:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Z5P-0002Ru-VH; Sun, 11 Jul 2021 13:01:31 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Z5P-0004Zq-Kk; Sun, 11 Jul 2021 13:01:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Z5P-0003sj-AC; Sun, 11 Jul 2021 13:01:31 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2Z5P-0005hr-9h; Sun, 11 Jul 2021 13:01:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=8QmKPNm4+DxMaWI6z6JfhtspHAnSEntEWCyS2GeUYM8=; b=NpsN2PsWVfvaO/NDS8sPeEHRNQ
	hw8ONQ+0iFeO5xA+RcL5wOGP3bREY0oDcxkBur6Lup2gzt5+5TuqrlUa+B9LrUJaBmYk/uSGkRh5R
	Svj5VvtE2HSmzg2TPPGvlbMp1QeWK3AteVkl5dcMbsKzRBW8PiMfpoq/aEBSeqveHfRw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163552-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163552: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 13:01:31 +0000

flight 163552 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163552/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-examine      4 memdisk-try-append         fail pass in 163531

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    2 days
Testing same since   163478  2021-07-09 15:23:45 Z    1 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 14:23:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 14:23:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154245.285027 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2aMn-0001iL-Nk; Sun, 11 Jul 2021 14:23:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154245.285027; Sun, 11 Jul 2021 14:23:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2aMn-0001iE-KX; Sun, 11 Jul 2021 14:23:33 +0000
Received: by outflank-mailman (input) for mailman id 154245;
 Sun, 11 Jul 2021 14:23:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aMm-0001i4-1v; Sun, 11 Jul 2021 14:23:32 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aMl-0005yZ-R0; Sun, 11 Jul 2021 14:23:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aMl-0006XM-JT; Sun, 11 Jul 2021 14:23:31 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aMl-0007DL-Iw; Sun, 11 Jul 2021 14:23:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=r14oDABnyj2cIDY1shestXNv+pa+uEQmaQ/WYv4gXHk=; b=4KznYnZlIZg6q8fHgwXi+8LzDv
	YJNJ8HP/0a4YOjiUCla31hDg5NzbCBR2/zyKXwc3PT3WaYckbcRhJwf/+hSiDvU6raA64E9qr8DkR
	UIcaCRlQouPdXdV9HSSEEr8XAewqchkpVdE/5lyinowzMbvlLRT2VqXnbZxvN3uuvWRA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163557-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163557: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=ad1009ec626bea7a718d595f98f0ad49a16c6e5b
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 14:23:31 +0000

flight 163557 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163557/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 ad1009ec626bea7a718d595f98f0ad49a16c6e5b
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   37 days
Failing since        162368  2021-06-04 15:42:59 Z   36 days  104 attempts
Testing same since   163505  2021-07-10 02:21:50 Z    1 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3576 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 14:34:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 14:34:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154253.285042 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2aWx-0003Gq-WC; Sun, 11 Jul 2021 14:34:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154253.285042; Sun, 11 Jul 2021 14:34:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2aWx-0003Gj-RT; Sun, 11 Jul 2021 14:34:03 +0000
Received: by outflank-mailman (input) for mailman id 154253;
 Sun, 11 Jul 2021 14:34:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aWw-0003GZ-Gc; Sun, 11 Jul 2021 14:34:02 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aWw-000699-AP; Sun, 11 Jul 2021 14:34:02 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aWv-0006qS-VG; Sun, 11 Jul 2021 14:34:02 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2aWv-0005vD-Uk; Sun, 11 Jul 2021 14:34:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=2G551l865EHf//YpI97V6JwBLBAVZHI9rA1nxr8gZiA=; b=n0pZkyeDKWS8+BiEgiwdsVNdtR
	JRxXK7KcKeNfLfdw4wrP+7p3hu0oJIDQd7aFmy8R0FdwJmZIaFXRkbhoRMwzxSmAvCDRPEeVBV0YL
	U9hG9JNeS8k0H8QVQsgiYPHqI98QViyopGoKf5Xm2O50JJyPEPGFcgoQeyrcq1ci6UTQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163564-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163564: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 14:34:01 +0000

flight 163564 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163564/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    2 days
Failing since        163480  2021-07-09 16:08:01 Z    1 days   11 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    1 days   10 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 15:52:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 15:52:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154262.285061 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2bkb-0002ND-Rq; Sun, 11 Jul 2021 15:52:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154262.285061; Sun, 11 Jul 2021 15:52:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2bkb-0002N6-Oj; Sun, 11 Jul 2021 15:52:13 +0000
Received: by outflank-mailman (input) for mailman id 154262;
 Sun, 11 Jul 2021 15:52:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2bka-0002Mw-F9; Sun, 11 Jul 2021 15:52:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2bka-0007O5-5n; Sun, 11 Jul 2021 15:52:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2bkZ-0000qg-PO; Sun, 11 Jul 2021 15:52:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2bkZ-0006F7-Ot; Sun, 11 Jul 2021 15:52:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=GhPGggnkIH3dCJ3wfS7qRRFw1kkhJx6KXy34399AIeU=; b=4QkymG5EvOFmUKU6uOpMWSpvZY
	9w49eUZ5z+bneFhIz1BbZPrsORezrBs1Pd4zceDcJO8NX9X6y2pW6K9fBrDIov2Vxi14JusWcHmT3
	U7sz6sS1DUOWoHZQasCD4X8nOnSb7Rl9lWS7PxbcviO/DUaarVgy4hN7E0u6TC0gvyH4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163556-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163556: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=de5540965853e514a85d3b775e9049deb85a2ff3
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 15:52:11 +0000

flight 163556 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163556/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-examine      4 memdisk-try-append       fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                de5540965853e514a85d3b775e9049deb85a2ff3
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  344 days
Failing since        152366  2020-08-01 20:49:34 Z  343 days  587 attempts
Testing same since   163556  2021-07-11 05:24:39 Z    0 days    1 attempts

------------------------------------------------------------
6677 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1963906 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 18:37:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 18:37:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154275.285082 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2eKZ-0000iS-1p; Sun, 11 Jul 2021 18:37:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154275.285082; Sun, 11 Jul 2021 18:37:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2eKY-0000iL-Uq; Sun, 11 Jul 2021 18:37:30 +0000
Received: by outflank-mailman (input) for mailman id 154275;
 Sun, 11 Jul 2021 18:37:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2eKY-0000iB-7r; Sun, 11 Jul 2021 18:37:30 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2eKY-0002Cu-2G; Sun, 11 Jul 2021 18:37:30 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2eKX-0007TY-Q6; Sun, 11 Jul 2021 18:37:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2eKX-0006V0-PS; Sun, 11 Jul 2021 18:37:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xHZ4buBaUeu8lM0Mi3q1KnCCexWovnpF5w9Verb9dTA=; b=0Ig9ZjkfPxSSTLaKCE/Rj7dBjk
	9WGkjRb3+ZYpBZWLOqdtobj+NwmFvFmD4loDdcbkMrapRlJ/8JclRBIz2xKa7iH/DMWFqFU4VQBCN
	MwVuUNWMHDYDsBkbKg/hvwRPeANRlqjjMD1ONsepAheKpeFdimlnGPSj27JVRjcZG+ik=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163572-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163572: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 18:37:29 +0000

flight 163572 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163572/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    2 days
Failing since        163480  2021-07-09 16:08:01 Z    2 days   12 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    1 days   11 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 20:17:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 20:17:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154284.285101 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2fsh-0001bA-Gx; Sun, 11 Jul 2021 20:16:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154284.285101; Sun, 11 Jul 2021 20:16:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2fsh-0001b3-Dv; Sun, 11 Jul 2021 20:16:51 +0000
Received: by outflank-mailman (input) for mailman id 154284;
 Sun, 11 Jul 2021 20:16:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2fsf-0001at-Lo; Sun, 11 Jul 2021 20:16:49 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2fsf-0003t7-8e; Sun, 11 Jul 2021 20:16:49 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2fse-0004Dj-Ub; Sun, 11 Jul 2021 20:16:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2fse-0003N0-U5; Sun, 11 Jul 2021 20:16:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=d2jSSAQZkIcAOybFpAJG8od2cfL4BSXlyebeY9HDzZw=; b=aAqM336wfPhrpZalbd0P7CI36L
	bHby5VKHKrQTDWjMDYqVXSKUxEec/KMPUowYAtuWOW0vlpRT7M/HhyNUTQDODZhcuoJpU+KSPNC3q
	+4JAAstJkASiX67hIMQMXOQUcmYaFGRCRVp4ahwfHWGo6YhkRtvuH5ZRwah4i3869TyU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163563-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163563: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=42e1d798a6a01817bdcf722ac27eea01531e21cd
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 20:16:48 +0000

flight 163563 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163563/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                42e1d798a6a01817bdcf722ac27eea01531e21cd
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    5 days
Failing since        163327  2021-07-06 12:39:04 Z    5 days   10 attempts
Testing same since   163545  2021-07-10 22:38:01 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Or Ozeri <oro@il.ibm.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3003 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 22:39:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 22:39:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154295.285128 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2i6k-00067o-7B; Sun, 11 Jul 2021 22:39:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154295.285128; Sun, 11 Jul 2021 22:39:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2i6k-00067h-3K; Sun, 11 Jul 2021 22:39:30 +0000
Received: by outflank-mailman (input) for mailman id 154295;
 Sun, 11 Jul 2021 22:39:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2i6i-00067X-Bp; Sun, 11 Jul 2021 22:39:28 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2i6i-0006Dv-24; Sun, 11 Jul 2021 22:39:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2i6h-00036E-P6; Sun, 11 Jul 2021 22:39:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2i6h-0003Ou-M5; Sun, 11 Jul 2021 22:39:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=c/MdM1LzCC7klzuUA/H7IXlLXR8/r6aNRWIE7ceRC+E=; b=Q590dhsY3guUA7AGZQsnO3BQ4R
	WVxeEZjyNQE8ySAL8aek3g4mZXHmZVQXly1soCWIl+xBh0eXHQeFKdlFeTwvTkLyNa/4pLNkiuNaD
	ELFqf4XatAWln46xpGTOHzdeIUxQ8i22FJhdrTS2oTlYUMfgfGTkSnCocbARF0xtGd18=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163576-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163576: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 22:39:27 +0000

flight 163576 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163576/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    2 days
Failing since        163480  2021-07-09 16:08:01 Z    2 days   13 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    2 days   12 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sun Jul 11 23:48:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 11 Jul 2021 23:48:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154305.285148 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2jBc-0004OY-1J; Sun, 11 Jul 2021 23:48:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154305.285148; Sun, 11 Jul 2021 23:48:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2jBb-0004OR-Sq; Sun, 11 Jul 2021 23:48:35 +0000
Received: by outflank-mailman (input) for mailman id 154305;
 Sun, 11 Jul 2021 23:48:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2jBa-0004OH-0Y; Sun, 11 Jul 2021 23:48:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2jBZ-0007Lp-KV; Sun, 11 Jul 2021 23:48:33 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2jBY-0006vI-L1; Sun, 11 Jul 2021 23:48:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2jBY-00051o-KW; Sun, 11 Jul 2021 23:48:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NfRFJrW1cwgoFLrCPz5k3PwDjXXQ5yapKoxWJ0BBIHU=; b=CCqs/xLBMrEhrDNXvcIrQok5ro
	bUzAwrP/Z8CaFlXoSgOHZohVcmXD8E31ZXqeJJtj4+Kk6CJaTjZJJpxRviQ6d2Rzdk/oeMtOOutVl
	tW+hotMP75y0bMVDyqodcXhdpToztRsOAFyXmcslFdFnwrcNiUFe9j4E8CKw/dr1hAP0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163566-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163566: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=e8d9b740a5503f5bd2948a51a0c3fa564c82cfe3
X-Osstest-Versions-That:
    linux=8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 11 Jul 2021 23:48:32 +0000

flight 163566 linux-5.4 real [real]
flight 163579 linux-5.4 real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163566/
http://logs.test-lab.xenproject.org/osstest/logs/163579/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 20 guest-start/debianhvm.repeat fail pass in 163579-retest

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163450
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163450
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163450
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163450
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163450
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163450
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163450
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163450
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163450
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163450
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163450
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   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-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 linux                e8d9b740a5503f5bd2948a51a0c3fa564c82cfe3
baseline version:
 linux                8b24c7edc2f285b2eff7af7dcf02f752ae03b5b6

Last test of basis   163450  2021-07-08 17:42:31 Z    3 days
Testing same since   163566  2021-07-11 11:14:34 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alper Gun <alpergun@google.com>
  David Rientjes <rientjes@google.com>
  Florian Fainelli <f.fainelli@gmail.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guenter Roeck <linux@roeck-us.net>
  Heiko Carstens <hca@linux.ibm.com>
  Hulk Robot <hulkrobot@huawei.com>
  Jon Hunter <jonathanh@nvidia.com>
  Juergen Gross <jgross@suse.com>
  Julien Grall <julien@xen.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Nobuhiro Iwamatsu (CIP) <nobuhiro1.iwamatsu@toshiba.co.jp>
  Paolo Bonzini <pbonzini@redhat.com>
  Shuah Khan <skhan@linuxfoundation.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Vasily Gorbik <gor@linux.ibm.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   8b24c7edc2f2..e8d9b740a550  e8d9b740a5503f5bd2948a51a0c3fa564c82cfe3 -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 02:05:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 02:05:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154316.285171 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2lJW-0002IA-7L; Mon, 12 Jul 2021 02:04:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154316.285171; Mon, 12 Jul 2021 02:04:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2lJW-0002I2-0n; Mon, 12 Jul 2021 02:04:54 +0000
Received: by outflank-mailman (input) for mailman id 154316;
 Mon, 12 Jul 2021 02:04:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lJU-0002Hs-UI; Mon, 12 Jul 2021 02:04:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lJU-0002oj-K4; Mon, 12 Jul 2021 02:04:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lJU-0005gq-6C; Mon, 12 Jul 2021 02:04:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lJU-0005jT-5h; Mon, 12 Jul 2021 02:04:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=nOkylSJrBupBSSyDeGF3pfC+p2dtAOEH0Lt2l2F93Mw=; b=cgZLgbjGWVUh7ZOb0ji8sfX5u4
	yc2m2q8okkHLxvRxeeL2mFcFX9U2CqWHiLc1wjXc5mWJZkcni/4PlavwB/m0Ma0l66elxBLHeyZzU
	xLqVxXloXHX7lHz98kQuo1uQ0oj2LlrbieDQWkKkMr7+kmxijF5+o+NFfan3t/2dZQ0g=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163581-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163581: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 02:04:52 +0000

flight 163581 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163581/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    2 days
Failing since        163480  2021-07-09 16:08:01 Z    2 days   14 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    2 days   13 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 02:47:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 02:47:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154324.285188 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2lz5-0006OP-GC; Mon, 12 Jul 2021 02:47:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154324.285188; Mon, 12 Jul 2021 02:47:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2lz5-0006OI-D2; Mon, 12 Jul 2021 02:47:51 +0000
Received: by outflank-mailman (input) for mailman id 154324;
 Mon, 12 Jul 2021 02:47:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lz4-0006O7-4i; Mon, 12 Jul 2021 02:47:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lz3-0003Ul-Vr; Mon, 12 Jul 2021 02:47:49 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lz3-0008CS-OO; Mon, 12 Jul 2021 02:47:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2lz3-00068G-Nu; Mon, 12 Jul 2021 02:47:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NfLO+WDiAaEx1MIMwnnacIER1eWQLmaksMFUAf3F4g0=; b=58SrbbLMXx+6cdYV77Qzr4SLi7
	5KRDoN+CLZM7vW6MyHoxjEpfRdCHErIYvVJOuduqBt9JQnzZ3YmFo4F0/a9qaSOVkJ32laH0TuZUk
	gwCV2+H86faL3evxNNDKdn0G/dwvZ0tXRuBFkmbVEmJHB5fmlIcHXfKBKTMhg1Jsgqtk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163570-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163570: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=ad1009ec626bea7a718d595f98f0ad49a16c6e5b
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 02:47:49 +0000

flight 163570 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163570/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 ad1009ec626bea7a718d595f98f0ad49a16c6e5b
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   37 days
Failing since        162368  2021-06-04 15:42:59 Z   37 days  105 attempts
Testing same since   163505  2021-07-10 02:21:50 Z    2 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3576 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 05:30:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 05:30:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154335.285214 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2oWT-0005k4-A9; Mon, 12 Jul 2021 05:30:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154335.285214; Mon, 12 Jul 2021 05:30:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2oWT-0005jx-6u; Mon, 12 Jul 2021 05:30:29 +0000
Received: by outflank-mailman (input) for mailman id 154335;
 Mon, 12 Jul 2021 05:30:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2oWS-0005jn-CP; Mon, 12 Jul 2021 05:30:28 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2oWS-00076c-5n; Mon, 12 Jul 2021 05:30:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2oWR-0006U5-UK; Mon, 12 Jul 2021 05:30:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2oWR-0007Mn-Tr; Mon, 12 Jul 2021 05:30:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=S6KIJD0b1WyEcJ52/ruAAmKRXwkyS2Yam2sfdEr9C3I=; b=tOfxD3HANtOENwxyzNRwUwLkfs
	i1+FRP3yKjUuAAXE6iEFm/3eQChPp0s6WWo77LMfXorFCsGHEn9SLuEhrNLdwur0N1rwhU9bR7UzQ
	7uKsY5p+08TVAGYVfjXZIz/wZCXiRX0+RNSTb4XMUsEZliTqioqeqFgGZIy9seQ1evKE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-freebsd10-i386
Message-Id: <E1m2oWR-0007Mn-Tr@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 05:30:27 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-freebsd10-i386
testid guest-start

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163589/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-freebsd10-i386.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-freebsd10-i386.guest-start --summary-out=tmp/163589.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-freebsd10-i386 guest-start
Searching for failure / basis pass:
 163563 fail [host=fiano1] / 163321 [host=huxelrebe0] 163311 [host=pinot0] 163303 [host=huxelrebe1] 163299 [host=chardonnay0] 163292 [host=fiano0] 163276 [host=albana1] 163235 [host=huxelrebe1] 163228 [host=elbling1] 163220 [host=albana0] 163213 [host=elbling0] 163204 [host=huxelrebe0] 163194 [host=chardonnay0] 163187 [host=huxelrebe0] 163179 [host=pinot1] 163171 [host=pinot0] 163163 [host=huxelrebe0] 163156 [host=chardonnay0] 163142 [host=huxelrebe1] 163128 [host=elbling0] 163110 ok.
Failure / basis pass flights: 163563 / 163110
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#e3955ae93f5151ad2e982440b7c8d3776a9afee2-42e1d798a6a01817bdcf722ac27eea01531e21cd git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Loaded 35430 nodes in revision graph
Searching for test results:
 163066 [host=albana0]
 163110 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
 163128 [host=elbling0]
 163142 [host=huxelrebe1]
 163156 [host=chardonnay0]
 163163 [host=huxelrebe0]
 163171 [host=pinot0]
 163179 [host=pinot1]
 163187 [host=huxelrebe0]
 163194 [host=chardonnay0]
 163204 [host=huxelrebe0]
 163213 [host=elbling0]
 163220 [host=albana0]
 163228 [host=elbling1]
 163235 [host=huxelrebe1]
 163276 [host=albana1]
 163292 [host=fiano0]
 163299 [host=chardonnay0]
 163303 [host=huxelrebe1]
 163311 [host=pinot0]
 163321 [host=huxelrebe0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163536 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
 163540 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163544 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163546 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163550 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163551 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163558 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 300491f988f649fced2ffd5c46c1bc911fee0e60 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163559 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163560 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 33e48312cf28f6fb78c03b14514fa7718de97ef5
 163545 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163561 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163565 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
 163567 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163554 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 dd62bf14b756821fa293e3465955a41e9d460deb 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163569 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 63fdea768d175e96443a53b95a6441f520743e2e
 163571 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163574 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163575 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163578 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163580 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163582 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163583 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163584 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163587 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163589 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163110 (pass), for basis pass
 Result found: flight 163545 (fail), for basis failure
 Repro found: flight 163565 (pass), for basis pass
 Repro found: flight 163567 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163580 (pass), for last pass
 Result found: flight 163582 (fail), for first failure
 Repro found: flight 163583 (pass), for last pass
 Repro found: flight 163584 (fail), for first failure
 Repro found: flight 163587 (pass), for last pass
 Repro found: flight 163589 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163589/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-freebsd10-i386.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163589: tolerable ALL FAIL

flight 163589 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163589/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-freebsd10-i386 13 guest-start           fail baseline untested


jobs:
 test-amd64-i386-freebsd10-i386                               fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 06:24:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 06:24:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154346.285237 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2pMQ-0002W9-JS; Mon, 12 Jul 2021 06:24:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154346.285237; Mon, 12 Jul 2021 06:24:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2pMQ-0002W2-Ec; Mon, 12 Jul 2021 06:24:10 +0000
Received: by outflank-mailman (input) for mailman id 154346;
 Mon, 12 Jul 2021 06:24:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pMO-0002Vc-N3; Mon, 12 Jul 2021 06:24:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pMO-000850-FQ; Mon, 12 Jul 2021 06:24:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pMO-00081O-9B; Mon, 12 Jul 2021 06:24:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pMO-0002wR-8g; Mon, 12 Jul 2021 06:24:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=2tRRtSCdis+FJ6E9lPcECggYo/qRJdQ9b0ztC9XEffU=; b=KdPIdaCnl4VYrJ1zEY02ixhQsL
	cElXqf7CGdLagJ/gUHQxBNNRq0g9r6d59L1cM3yjuBzbMDalOsHWn3+u3FR3R5ReO0LsFm0JrzBcX
	9899GOi7f5fTsUftsZx3X7kVNuqw2foByNXmmxG4AJRsxhKK3e/PVlT7za+SiouN8yNM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163586-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163586: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 06:24:08 +0000

flight 163586 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163586/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    2 days
Failing since        163480  2021-07-09 16:08:01 Z    2 days   15 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    2 days   14 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 06:26:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 06:26:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154351.285251 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2pOk-00037t-WC; Mon, 12 Jul 2021 06:26:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154351.285251; Mon, 12 Jul 2021 06:26:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2pOk-00037m-Sy; Mon, 12 Jul 2021 06:26:34 +0000
Received: by outflank-mailman (input) for mailman id 154351;
 Mon, 12 Jul 2021 06:26:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=bOWM=ME=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m2pOj-00037g-Bv
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 06:26:33 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 1929566c-e2da-11eb-86cd-12813bfff9fa;
 Mon, 12 Jul 2021 06:26:31 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8750A6D;
 Sun, 11 Jul 2021 23:26:31 -0700 (PDT)
Received: from [10.57.1.228] (unknown [10.57.1.228])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 932073F766;
 Sun, 11 Jul 2021 23:26:30 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1929566c-e2da-11eb-86cd-12813bfff9fa
Subject: Re: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210709124035.5520-1-michal.orzel@arm.com>
 <24141b99-a4a2-80f2-1cca-4f86ebc90d94@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <076a6500-2471-c834-97b9-547e3cf3e3b2@arm.com>
Date: Mon, 12 Jul 2021 08:26:25 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <24141b99-a4a2-80f2-1cca-4f86ebc90d94@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

Hi Julien,

On 09.07.2021 17:21, Julien Grall wrote:
> Hi Michal,
> 
> On 09/07/2021 13:40, Michal Orzel wrote:
>> AArch64 system registers are 64bit whereas AArch32 ones
>> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
>> we should get rid of helpers READ/WRITE_SYSREG32
>> in favour of using READ/WRITE_SYSREG.
>>
>> The last place in code making use of READ/WRITE_SYSREG32
>> on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
>> Implement a macro WRITE_SYSREG_SZ which expands as follows:
>> -on arm64: WRITE_SYSREG
>> -on arm32: WRITE_SYSREG{32/64}
>>
>> As there are no other places in the code using these helpers
>> on arm64 - remove them.
>>
>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
>> ---
>> Changes since v1:
>> -implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
>> ---
>>   xen/arch/arm/vcpreg.c               | 12 +++++++++++-
>>   xen/include/asm-arm/arm64/sysregs.h |  4 ----
>>   2 files changed, 11 insertions(+), 5 deletions(-)
>>
>> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
>> index f0cdcc8a54..10c4846954 100644
>> --- a/xen/arch/arm/vcpreg.c
>> +++ b/xen/arch/arm/vcpreg.c
>> @@ -47,6 +47,16 @@
>>    *
>>    */
>>   +#ifdef CONFIG_ARM_64
>> +#define WRITE_SYSREG_SZ(sz, val, sysreg)     WRITE_SYSREG(val, sysreg)
> 
> I think you want to cast to (uint##sz##_t) to avoid any surprise. I think...
> 
But the val will always be of type uint##sz##_t because it is passed from ...
>> +#else
>> +/*
>> + * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
>> + * on the below macro to be defined like that as well.
>> + */
>> +#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
>> +#endif
>> +
>>   /* The name is passed from the upper macro to workaround macro expansion. */
>>   #define TVM_REG(sz, func, reg...)                                           \
>>   static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>> @@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
... here(*r argument).
So I do not think that such casting makes sense e.g
uint##sz##_t foo;
WRITE_SYSREG((uint##sz##_t)foo, bar);

Also whatever type we will pass to WRITE_SYSREG,  it will be casted to uint64_t ...
>>       bool cache_enabled = vcpu_has_cache_enabled(v);                         \
>>                                                                               \
>>       GUEST_BUG_ON(read);                                                     \
>> -    WRITE_SYSREG##sz(*r, reg);                                              \
>> +    WRITE_SYSREG_SZ(sz, *r, reg);                                           \
>>                                                                               \
>>       p2m_toggle_cache(v, cache_enabled);                                     \
>>                                                                               \
>> diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/asm-arm/arm64/sysregs.h
>> index 077fd95fb7..795901e1ba 100644
>> --- a/xen/include/asm-arm/arm64/sysregs.h
>> +++ b/xen/include/asm-arm/arm64/sysregs.h
>> @@ -87,10 +87,6 @@
>>     /* Access to system registers */
>>   -#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name))
>> -
>> -#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name)
> 
> ... this was intended behavior but I used the wrong cast here.
> 
>> -
>>   #define WRITE_SYSREG64(v, name) do {                    \
>>       uint64_t _r = v;                                    \
...here
>>       asm volatile("msr "__stringify(name)", %0" : : "r" (_r));       \
>>
> 

Cheers,
Michal


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 06:58:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 06:58:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154375.285286 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2pt8-0007Si-Vb; Mon, 12 Jul 2021 06:57:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154375.285286; Mon, 12 Jul 2021 06:57:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2pt8-0007Sb-SN; Mon, 12 Jul 2021 06:57:58 +0000
Received: by outflank-mailman (input) for mailman id 154375;
 Mon, 12 Jul 2021 06:57:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pt7-0007SR-UN; Mon, 12 Jul 2021 06:57:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pt7-0000Cg-Ok; Mon, 12 Jul 2021 06:57:57 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pt7-0000fM-G6; Mon, 12 Jul 2021 06:57:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2pt7-0008FF-Fd; Mon, 12 Jul 2021 06:57:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Tdo1zLD5ZaZJbAiOxSwKuy8Y/Qq9kQBi9XZSvr56s2Y=; b=Xp9NgXjBjCDFMiFfoO6iBnDAQ2
	jdk/tXVmVslVVze9zm1Cz11qm4tvU7+VGDnqzVZj2HA0Ceecg+JokYx4MAHnuvLkTjbR7AENTA51e
	he4nyoCB7/by5VWFOnRft1Yr87ZxpzrQ3RN4hptHEkhNiiaJXxjtrwmivTP064Y/pq08=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163568-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163568: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 06:57:57 +0000

flight 163568 xen-unstable real [real]
flight 163591 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163568/
http://logs.test-lab.xenproject.org/osstest/logs/163591/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    3 days
Testing same since   163478  2021-07-09 15:23:45 Z    2 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:00:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:00:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154385.285306 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2qrC-0005dF-LS; Mon, 12 Jul 2021 08:00:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154385.285306; Mon, 12 Jul 2021 08:00:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2qrC-0005cN-ID; Mon, 12 Jul 2021 08:00:02 +0000
Received: by outflank-mailman (input) for mailman id 154385;
 Mon, 12 Jul 2021 08:00:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2qrB-00057y-6o; Mon, 12 Jul 2021 08:00:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2qrB-0001DN-0r; Mon, 12 Jul 2021 08:00:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2qrA-0002Hi-O5; Mon, 12 Jul 2021 08:00:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2qrA-00026M-Ng; Mon, 12 Jul 2021 08:00:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=2OzENA26pCuVdLvorewE5Hmf3Q+MmViRtKcrI17uF8s=; b=Dnj0fvvTyR/CjuBCHAObjGGeFV
	Uj2koCnss5wMKepBJIPdnalPocfccNtCKkqlPCBjh8PbckLU0aVt+doIreXUJq/LbfpF6723AMz7e
	DuGlu77dtbgk+t2YfyOuE2pwC/BKLCctczRvJUREbCS/HYEJLAtYp8p7fAIA/ETZgGS4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163588-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163588: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=11fcf054e6778e977ea82baa10db9ee7a197d4f6
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 08:00:00 +0000

flight 163588 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163588/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              11fcf054e6778e977ea82baa10db9ee7a197d4f6
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  367 days
Failing since        151818  2020-07-11 04:18:52 Z  366 days  358 attempts
Testing same since   163510  2021-07-10 04:20:02 Z    2 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64232 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:03:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:03:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154396.285319 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2quj-0007Fm-EZ; Mon, 12 Jul 2021 08:03:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154396.285319; Mon, 12 Jul 2021 08:03:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2quj-0007Ff-B1; Mon, 12 Jul 2021 08:03:41 +0000
Received: by outflank-mailman (input) for mailman id 154396;
 Mon, 12 Jul 2021 08:03:40 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2qui-0007FT-AL; Mon, 12 Jul 2021 08:03:40 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2qui-0001xm-5v; Mon, 12 Jul 2021 08:03:40 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2quh-0002OB-W7; Mon, 12 Jul 2021 08:03:40 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2quh-0004Fd-Vh; Mon, 12 Jul 2021 08:03:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=5Df1idcynPGqW3zMBJBiEz+B9NcNrLmzqsPmmI2w3v8=; b=4WnM7fmULaCfHIU+qvKBN2EAo5
	tFLfRlTi/K+aeueuHQCJMdlzQMLo5QMQ+u0PTifjRjpt8xyQAYjRcsjaRqw1AtJRlfQ2eP0BfcF8t
	+CH1oJwDuHhGfuj9OndsIf+OWZnUvEgCFG6LNjJP3NYlQfuCr4Q6hclnRhY567vgHKEs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163573-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163573: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=de5540965853e514a85d3b775e9049deb85a2ff3
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 08:03:39 +0000

flight 163573 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163573/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 14 guest-start    fail in 163556 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-examine    4 memdisk-try-append fail in 163556 pass in 163573
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163556
 test-arm64-arm64-libvirt-xsm 13 debian-fixup               fail pass in 163556

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                de5540965853e514a85d3b775e9049deb85a2ff3
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  345 days
Failing since        152366  2020-08-01 20:49:34 Z  344 days  588 attempts
Testing same since   163556  2021-07-11 05:24:39 Z    1 days    2 attempts

------------------------------------------------------------
6677 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1963906 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:33:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:33:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154406.285334 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rNK-0003Rv-P9; Mon, 12 Jul 2021 08:33:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154406.285334; Mon, 12 Jul 2021 08:33:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rNK-0003Rn-II; Mon, 12 Jul 2021 08:33:14 +0000
Received: by outflank-mailman (input) for mailman id 154406;
 Mon, 12 Jul 2021 08:33:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m2rNJ-0003Rh-1g
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 08:33:13 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2rNH-0001Hx-RI; Mon, 12 Jul 2021 08:33:11 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2rNH-0001nh-Kq; Mon, 12 Jul 2021 08:33:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=kUuvFVs03oX1CwJf7o+7+AnKIVzAVyJW/GEjOCD5gd8=; b=L5NSpSIbPt6In0w1akNZ5ZoH1d
	KX1OB5vYTZJ2bUWzolZ6pTTr2RTdtQNURDLkGOj48wm7zZwRGvXQdMqxpbk5uT/OQcqxKipDXAlPh
	uSwghDmu7oaPI5keshWsATzh2kyabFQFQABIk9KnqRN5pTcBlD59mG8cJ4/PB8qXdKK4=;
Subject: Re: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210709124035.5520-1-michal.orzel@arm.com>
 <24141b99-a4a2-80f2-1cca-4f86ebc90d94@xen.org>
 <076a6500-2471-c834-97b9-547e3cf3e3b2@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <ad4a4cb4-efbd-1e62-8de4-366302a244b5@xen.org>
Date: Mon, 12 Jul 2021 09:33:09 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <076a6500-2471-c834-97b9-547e3cf3e3b2@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 12/07/2021 07:26, Michal Orzel wrote:
> Hi Julien,

Hi Michal,

> On 09.07.2021 17:21, Julien Grall wrote:
>> Hi Michal,
>>
>> On 09/07/2021 13:40, Michal Orzel wrote:
>>> AArch64 system registers are 64bit whereas AArch32 ones
>>> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
>>> we should get rid of helpers READ/WRITE_SYSREG32
>>> in favour of using READ/WRITE_SYSREG.
>>>
>>> The last place in code making use of READ/WRITE_SYSREG32
>>> on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
>>> Implement a macro WRITE_SYSREG_SZ which expands as follows:
>>> -on arm64: WRITE_SYSREG
>>> -on arm32: WRITE_SYSREG{32/64}
>>>
>>> As there are no other places in the code using these helpers
>>> on arm64 - remove them.
>>>
>>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
>>> ---
>>> Changes since v1:
>>> -implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
>>> ---
>>>    xen/arch/arm/vcpreg.c               | 12 +++++++++++-
>>>    xen/include/asm-arm/arm64/sysregs.h |  4 ----
>>>    2 files changed, 11 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
>>> index f0cdcc8a54..10c4846954 100644
>>> --- a/xen/arch/arm/vcpreg.c
>>> +++ b/xen/arch/arm/vcpreg.c
>>> @@ -47,6 +47,16 @@
>>>     *
>>>     */
>>>    +#ifdef CONFIG_ARM_64
>>> +#define WRITE_SYSREG_SZ(sz, val, sysreg)     WRITE_SYSREG(val, sysreg)
>>
>> I think you want to cast to (uint##sz##_t) to avoid any surprise. I think...
>>
> But the val will always be of type uint##sz##_t because it is passed from ...
>>> +#else
>>> +/*
>>> + * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
>>> + * on the below macro to be defined like that as well.
>>> + */
>>> +#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
>>> +#endif
>>> +
>>>    /* The name is passed from the upper macro to workaround macro expansion. */
>>>    #define TVM_REG(sz, func, reg...)                                           \
>>>    static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>>> @@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
> ... here(*r argument).
> So I do not think that such casting makes sense e.g
> uint##sz##_t foo;
> WRITE_SYSREG((uint##sz##_t)foo, bar);

I agree that this doesn't make sense for the *current* use. However, 
when writing code, we need to think how one could use it in the future...

When I read the name, I would expect that if I call it with sz == 32, 
then bottom 32-bit value to be written and the top 32-bit zeroed. But 
this is not the case...

You are relying on the developper and reviewer to notice that only 
32-bit value should be passed when sz == 32.

I am not particularly keen on relying on this when a simple cast could 
prevent any future misuse. Alternatively, I would be happy to consider 
checking the type of the value at build time.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:38:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:38:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154413.285345 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rSl-0004Bv-AZ; Mon, 12 Jul 2021 08:38:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154413.285345; Mon, 12 Jul 2021 08:38:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rSl-0004Bo-6y; Mon, 12 Jul 2021 08:38:51 +0000
Received: by outflank-mailman (input) for mailman id 154413;
 Mon, 12 Jul 2021 08:38:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m2rSk-0004Bi-GI
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 08:38:50 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2rSj-0001Np-FS; Mon, 12 Jul 2021 08:38:49 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2rSj-000255-9g; Mon, 12 Jul 2021 08:38:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=vUffdroP7VsgOpcXVmt0zL1hgSPI6XZJf36TOMRtkiM=; b=fR+hE52GfZOH0mtGiTG8s+3Oct
	yuq4uK6NcJSBXp6MFfxd5ooKDwdTUouvOJZ3xVx38kgQjsPACVFPfgWsSZxM8cu0LJM+qxwxU3s0l
	jrnz+RuN9I4Hy6AdCSI00iv9eKcqCMcn4miT8Fbak+CvHia5WLpIHh+21caUOyKm8wlw=;
Subject: Re: [PATCH v2 1/2] tools/xenstore: set oom score for xenstore daemon
 on Linux
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
References: <20210608055839.10313-1-jgross@suse.com>
 <20210608055839.10313-2-jgross@suse.com>
 <467dc0c1-cf0a-2aaf-0c99-c1ca70b95912@xen.org>
 <6c4b8bb2-56c0-e0ee-2eea-52f2925803c9@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <729f7677-8449-bea0-ed59-7ae1e42fe711@xen.org>
Date: Mon, 12 Jul 2021 09:38:47 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <6c4b8bb2-56c0-e0ee-2eea-52f2925803c9@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Juergen,

On 09/07/2021 13:34, Juergen Gross wrote:
> On 08.07.21 19:40, Julien Grall wrote:
>> Hi Juergen,
>>
>> On 08/06/2021 06:58, Juergen Gross wrote:
>>> Xenstored is absolutely mandatory for a Xen host and it can't be
>>> restarted, so being killed by OOM-killer in case of memory shortage is
>>> to be avoided.
>>>
>>> Set /proc/$pid/oom_score_adj (if available) to -500 in order to allow
>>> xenstored to use large amounts of memory without being killed.
>>>
>>> Make sure the pid file isn't a left-over from a previous run delete it
>>> before starting xenstored.
>>
>> This sentence is a bit confusing to read. Do you mean "*To* make 
>> sure....*,* delete it before"?
> 
> Yes, will change it.
> 
>>
>>>
>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>>> ---
>>> V2:
>>> - set oom score from launch script (Julien Grall)
>>> - split off open file descriptor limit setting (Julien Grall)
>>> ---
>>>   tools/hotplug/Linux/launch-xenstore.in | 3 +++
>>>   1 file changed, 3 insertions(+)
>>>
>>> diff --git a/tools/hotplug/Linux/launch-xenstore.in 
>>> b/tools/hotplug/Linux/launch-xenstore.in
>>> index 019f9d6f4d..3ad71e3d08 100644
>>> --- a/tools/hotplug/Linux/launch-xenstore.in
>>> +++ b/tools/hotplug/Linux/launch-xenstore.in
>>> @@ -59,11 +59,14 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons 
>>> && . @CONFIG_DIR@/@CONFIG_LEAF
>>>           echo "No xenstored found"
>>>           exit 1
>>>       }
>>> +    rm -f @XEN_RUN_DIR@/xenstored.pid
>>>       echo -n Starting $XENSTORED...
>>>       $XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
>>>       systemd-notify --booted 2>/dev/null || timeout_xenstore 
>>> $XENSTORED || exit 1
>>> +    XS_PID=`cat @XEN_RUN_DIR@/xenstored.pid`
>>> +    echo -500 >/proc/$XS_PID/oom_score_adj
>>
>> NIT: It would be worth considering to introduce a variable so this can 
>> be set from the configuration file.
> 
> Do you have any scenario in mind where this would be beneficial?
> 
> I'm not against it, but I'm wondering why anybody would want that
> to be configurable.

So from the commit message (and browsing a bit), I don't understand how 
-500 would fit every case. IOW why not -600/-700...?

If it is a random value, then we should consider to allow the user to 
modify it easily. If the value has a specific meaning, then I think this 
ought to be written in the commit message and possibly launch-xenstore.in.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:47:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:47:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154420.285355 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rai-0005dc-4t; Mon, 12 Jul 2021 08:47:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154420.285355; Mon, 12 Jul 2021 08:47:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rai-0005dV-1T; Mon, 12 Jul 2021 08:47:04 +0000
Received: by outflank-mailman (input) for mailman id 154420;
 Mon, 12 Jul 2021 08:47:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=bOWM=ME=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m2rag-0005dN-Ih
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 08:47:02 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id b94ae67a-e2ed-11eb-86d8-12813bfff9fa;
 Mon, 12 Jul 2021 08:47:00 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 81A321FB;
 Mon, 12 Jul 2021 01:47:00 -0700 (PDT)
Received: from [10.57.1.228] (unknown [10.57.1.228])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8E4643F694;
 Mon, 12 Jul 2021 01:46:59 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b94ae67a-e2ed-11eb-86d8-12813bfff9fa
Subject: Re: [PATCH v2] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210709124035.5520-1-michal.orzel@arm.com>
 <24141b99-a4a2-80f2-1cca-4f86ebc90d94@xen.org>
 <076a6500-2471-c834-97b9-547e3cf3e3b2@arm.com>
 <ad4a4cb4-efbd-1e62-8de4-366302a244b5@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <ca4bdb02-0a0e-46dc-5271-166660225e3e@arm.com>
Date: Mon, 12 Jul 2021 10:46:50 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <ad4a4cb4-efbd-1e62-8de4-366302a244b5@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit



On 12.07.2021 10:33, Julien Grall wrote:
> 
> 
> On 12/07/2021 07:26, Michal Orzel wrote:
>> Hi Julien,
> 
> Hi Michal,
> 
>> On 09.07.2021 17:21, Julien Grall wrote:
>>> Hi Michal,
>>>
>>> On 09/07/2021 13:40, Michal Orzel wrote:
>>>> AArch64 system registers are 64bit whereas AArch32 ones
>>>> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
>>>> we should get rid of helpers READ/WRITE_SYSREG32
>>>> in favour of using READ/WRITE_SYSREG.
>>>>
>>>> The last place in code making use of READ/WRITE_SYSREG32
>>>> on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
>>>> Implement a macro WRITE_SYSREG_SZ which expands as follows:
>>>> -on arm64: WRITE_SYSREG
>>>> -on arm32: WRITE_SYSREG{32/64}
>>>>
>>>> As there are no other places in the code using these helpers
>>>> on arm64 - remove them.
>>>>
>>>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
>>>> ---
>>>> Changes since v1:
>>>> -implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
>>>> ---
>>>>    xen/arch/arm/vcpreg.c               | 12 +++++++++++-
>>>>    xen/include/asm-arm/arm64/sysregs.h |  4 ----
>>>>    2 files changed, 11 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
>>>> index f0cdcc8a54..10c4846954 100644
>>>> --- a/xen/arch/arm/vcpreg.c
>>>> +++ b/xen/arch/arm/vcpreg.c
>>>> @@ -47,6 +47,16 @@
>>>>     *
>>>>     */
>>>>    +#ifdef CONFIG_ARM_64
>>>> +#define WRITE_SYSREG_SZ(sz, val, sysreg)     WRITE_SYSREG(val, sysreg)
>>>
>>> I think you want to cast to (uint##sz##_t) to avoid any surprise. I think...
>>>
>> But the val will always be of type uint##sz##_t because it is passed from ...
>>>> +#else
>>>> +/*
>>>> + * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
>>>> + * on the below macro to be defined like that as well.
>>>> + */
>>>> +#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
>>>> +#endif
>>>> +
>>>>    /* The name is passed from the upper macro to workaround macro expansion. */
>>>>    #define TVM_REG(sz, func, reg...)                                           \
>>>>    static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>>>> @@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>> ... here(*r argument).
>> So I do not think that such casting makes sense e.g
>> uint##sz##_t foo;
>> WRITE_SYSREG((uint##sz##_t)foo, bar);
> 
> I agree that this doesn't make sense for the *current* use. However, when writing code, we need to think how one could use it in the future...
> 
> When I read the name, I would expect that if I call it with sz == 32, then bottom 32-bit value to be written and the top 32-bit zeroed. But this is not the case...
> 
> You are relying on the developper and reviewer to notice that only 32-bit value should be passed when sz == 32.
> 
> I am not particularly keen on relying on this when a simple cast could prevent any future misuse. Alternatively, I would be happy to consider checking the type of the value at build time.
> 
> Cheers,
> 

Ok, you are right that it does not cost much to add it, so let's stick with:
#ifdef CONFIG_ARM_64
#define WRITE_SYSREG_SZ(sz, val, sysreg) WRITE_SYSREG((uint##sz##_t)val, sysreg)
#else

I will push v3 with this change.

Cheers,
Michal


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:52:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:52:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154427.285367 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rfn-00071y-OU; Mon, 12 Jul 2021 08:52:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154427.285367; Mon, 12 Jul 2021 08:52:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rfn-00071r-LR; Mon, 12 Jul 2021 08:52:19 +0000
Received: by outflank-mailman (input) for mailman id 154427;
 Mon, 12 Jul 2021 08:52:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2rfm-00071g-GK; Mon, 12 Jul 2021 08:52:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2rfm-0001aZ-Bq; Mon, 12 Jul 2021 08:52:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2rfm-0003vx-4B; Mon, 12 Jul 2021 08:52:18 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2rfm-0000NU-3j; Mon, 12 Jul 2021 08:52:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=QFwny4vq+lU2C5+gHj+/2nJ2xhRfyKA2eZ/NqMURoeM=; b=Tu0wK+28DlELpvRfNRXQN98nxt
	DliivcB5isn6nm3fV1EvQoyW2rkX2hRG4wL1kHDKvChyhf6k2arTpdjkPBaN/4cRa6Jk0xXlcoN7p
	ilZQP7fzFfCgcbx+SD5zt/nKvZkgqEH/WuaANZMBbZJkROtO5bpfeLuy9ouPB5YmJcR8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163585-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163585: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=3de3c24755bdee191429c0a72aed5110e9a0b2f9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 08:52:18 +0000

flight 163585 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163585/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 3de3c24755bdee191429c0a72aed5110e9a0b2f9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   38 days
Failing since        162368  2021-06-04 15:42:59 Z   37 days  106 attempts
Testing same since   163585  2021-07-12 02:49:31 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3593 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:53:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:53:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154434.285381 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rh5-0007eg-3v; Mon, 12 Jul 2021 08:53:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154434.285381; Mon, 12 Jul 2021 08:53:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rh5-0007eZ-0R; Mon, 12 Jul 2021 08:53:39 +0000
Received: by outflank-mailman (input) for mailman id 154434;
 Mon, 12 Jul 2021 08:53:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=bOWM=ME=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m2rh3-0007eN-5K
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 08:53:37 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id a4ddd3ae-e2ee-11eb-86d8-12813bfff9fa;
 Mon, 12 Jul 2021 08:53:36 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DB3261FB;
 Mon, 12 Jul 2021 01:53:35 -0700 (PDT)
Received: from e123311-lin.arm.com (unknown [10.57.1.228])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C07FC3F694;
 Mon, 12 Jul 2021 01:53:34 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a4ddd3ae-e2ee-11eb-86d8-12813bfff9fa
From: Michal Orzel <michal.orzel@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	bertrand.marquis@arm.com
Subject: [PATCH v3] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
Date: Mon, 12 Jul 2021 10:53:29 +0200
Message-Id: <20210712085329.16613-1-michal.orzel@arm.com>
X-Mailer: git-send-email 2.29.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

AArch64 system registers are 64bit whereas AArch32 ones
are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
we should get rid of helpers READ/WRITE_SYSREG32
in favour of using READ/WRITE_SYSREG.

The last place in code making use of READ/WRITE_SYSREG32
on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
Implement a macro WRITE_SYSREG_SZ which expands as follows:
-on arm64: WRITE_SYSREG
-on arm32: WRITE_SYSREG{32/64}

As there are no other places in the code using these helpers
on arm64 - remove them.

Signed-off-by: Michal Orzel <michal.orzel@arm.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
---
Changes since v2:
-add uint##sz##_t casting
Changes since v1:
-implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
---
 xen/arch/arm/vcpreg.c               | 12 +++++++++++-
 xen/include/asm-arm/arm64/sysregs.h |  4 ----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
index f0cdcc8a54..e3ce56d875 100644
--- a/xen/arch/arm/vcpreg.c
+++ b/xen/arch/arm/vcpreg.c
@@ -47,6 +47,16 @@
  *
  */
 
+#ifdef CONFIG_ARM_64
+#define WRITE_SYSREG_SZ(sz, val, sysreg) WRITE_SYSREG((uint##sz##_t)val, sysreg)
+#else
+/*
+ * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
+ * on the below macro to be defined like that as well.
+ */
+#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
+#endif
+
 /* The name is passed from the upper macro to workaround macro expansion. */
 #define TVM_REG(sz, func, reg...)                                           \
 static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
@@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
     bool cache_enabled = vcpu_has_cache_enabled(v);                         \
                                                                             \
     GUEST_BUG_ON(read);                                                     \
-    WRITE_SYSREG##sz(*r, reg);                                              \
+    WRITE_SYSREG_SZ(sz, *r, reg);                                           \
                                                                             \
     p2m_toggle_cache(v, cache_enabled);                                     \
                                                                             \
diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/asm-arm/arm64/sysregs.h
index 077fd95fb7..795901e1ba 100644
--- a/xen/include/asm-arm/arm64/sysregs.h
+++ b/xen/include/asm-arm/arm64/sysregs.h
@@ -87,10 +87,6 @@
 
 /* Access to system registers */
 
-#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name))
-
-#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name)
-
 #define WRITE_SYSREG64(v, name) do {                    \
     uint64_t _r = v;                                    \
     asm volatile("msr "__stringify(name)", %0" : : "r" (_r));       \
-- 
2.29.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 08:59:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 08:59:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154442.285392 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rmn-0008RO-Oj; Mon, 12 Jul 2021 08:59:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154442.285392; Mon, 12 Jul 2021 08:59:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2rmn-0008RH-Lm; Mon, 12 Jul 2021 08:59:33 +0000
Received: by outflank-mailman (input) for mailman id 154442;
 Mon, 12 Jul 2021 08:59:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m2rmm-0008RB-Ls
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 08:59:32 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2rml-0001il-Dv; Mon, 12 Jul 2021 08:59:31 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2rml-0003Ij-7X; Mon, 12 Jul 2021 08:59:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=d+bCJYDqjlfJMW5H6z+eJhNAcZKBVzhukXJibUgBzfY=; b=wn+/wICYuTHVa/EVynTjQvbCY1
	rbqKJVZOmyktdH8yQnODqVb5+BZZLzjayXeWRcJnRnrpJjXVnq1xtFNJSONXIeZo/mQ+q24plcRYw
	5AUeoejMj+x4Vs9FbMVuIIfp0h9cX1M2vdTRm0063VPQZrhbXwA9VQAfhQg4/quInZNE=;
Subject: Re: [PATCH] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Igor Druzhinin <igor.druzhinin@citrix.com>,
 Jan Beulich <jbeulich@suse.com>
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, sstabellini@kernel.org, jgross@suse.com,
 christian.lindig@citrix.com, dave@recoil.org, xen-devel@lists.xenproject.org
References: <1625619764-23537-1-git-send-email-igor.druzhinin@citrix.com>
 <b1720313-d636-9c8c-3109-748dbe311187@xen.org>
 <5e454ba6-3d3f-9402-140d-f576f9124402@suse.com>
 <927c1c59-734a-4013-9286-137fd7026c26@xen.org>
 <e2def3e5-8e00-8b52-2d0f-5231963607ee@suse.com>
 <54b5ff4b-09ae-429b-4468-c1b4691079ed@xen.org>
 <3aa3fa32-f17b-507c-aafa-66ec3d41d29c@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <eed93e60-6394-458e-14b9-16c77ab993db@xen.org>
Date: Mon, 12 Jul 2021 09:59:28 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <3aa3fa32-f17b-507c-aafa-66ec3d41d29c@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Igor,

On 08/07/2021 03:06, Igor Druzhinin wrote:
> On 07/07/2021 14:21, Julien Grall wrote:
>> On 07/07/2021 14:14, Jan Beulich wrote:
>>> On 07.07.2021 14:59, Julien Grall wrote:
>>>> On 07/07/2021 13:54, Jan Beulich wrote:
>>>>> On 07.07.2021 14:51, Julien Grall wrote:
>>>>>> On 07/07/2021 02:02, Igor Druzhinin wrote:
>>>>>>> Current unit8_t for pirq argument in this interface is too 
>>>>>>> restrictive
>>>>>>> causing failures on modern hardware with lots of GSIs. That 
>>>>>>> extends down to
>>>>>>> XEN_DOMCTL_irq_permission ABI structure where it needs to be 
>>>>>>> fixed up
>>>>>>> as well. Internal Xen structures appear to be fine. Existing 
>>>>>>> users of
>>>>>>> the interface in tree (libxl, ocaml and python bindings) are 
>>>>>>> already using
>>>>>>> int for pirq representation that should be wide enough.
>>>>>>
>>>>>> By "int", I am assuming you imply "signed int", is that correct?
> 
> Yes, just "int" in the meaning "signed int" - I can clarify that in the 
> description.
> 
>>>>>> If so, should the function xc_domain_irq_permission() interface 
>>>>>> take an
>>>>>> int in parameter and check it is not negative?
>>>>>
>>>>> Please let's not make things worse than they are, the more that
>>>>
>>>> Well, what I am trying to prevent is surprise where the caller
>>>> mistakenly pass a negative value that will be interpreted as a positive
>>>> value...
>>>
>>> This happens all the time when converting from signed to unsigned
>>> perhaps just internally.
>>
>> I am not sure what's your point... Yes there are place in Xen that 
>> switch between signed and unsigned. We likely have some (latent) 
>> problem because of that...
> 
> Callers of libxc interface shouldn't have been using signed int at all.
> They just happen to do it at least in-tree - that's what I found and 
> mentioned
> in the description. At the same time "int" type is for now wide enough 
> so there
> is no immediate rush to fix them up.
> 
> That gets a little bit tricky with bindings - they themselves expose pirq
> as int. So a negative value could be passed by the caller and, given other
> similar interace functions like xc_physdev_map_pirq() are using "int pirq"
> to signal an error as negative value, that could be misinterpreted by lower
> levels.
> 
> We can add extra checks in bindings to avoid passing all negative values to
> libxc level. Would this be good enough?
> 
>>>> Such issues are beyong annoying to debug...
>>>
>>> No worse than any other out-of-bounds value, I would say.
>>>
>>>>   > ./CODING_STYLE is unambiguous in cases like this one.
>>>>
>>>> Hmmm... The coding style mention the fixed size but nothing about the
>>>> signedness of the type...
>>>
>>> Oh, sorry, yes. The adjustment for this even pre-dates the two
>>> patches to ./CODING_STYLE that I've on record as pending for
>>> nearly two years.
>>>
>>>> The alternative suggestion is to keep a unsigned type but check the bit
>>>> 31 is not set.
>>>
>>> Why? Why not bit 30 or bit 27? There's nothing special about
>>> bit 31 in an unsigned number.
>>
>> Bit 31 is the signed bit for signed number. The check would make sure 
>> that:
>>   1) The value will fit other hypercall (the PIRQ is described as int 
>> in a few of the structure)
>>   2) Catch potentially caller that would use the number that could 
>> potentially be interpreted as negative by other part of the hypervisor.
>>
>> That said, I can live with the implicit signed -> unsigned convertion, 
>> however the commit message should at least be clarified because it is 
>> misleading.
> 
> Could you specify which statement exactly is misleading (or needs 
> clariying)
> in the commit message?

The commit message is mentioning that all the callers are using "signed 
int" but then the patch will use "uint32_t" without really saying why...

I think adding something along the line to:

"While all the callers are using signed int, PIRQ indexes are not meant 
to be negative. Switch the type to unsigned 32-bit and leave the caller 
clean-up for future follow-up."

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 09:34:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 09:34:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154452.285409 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2sK8-0004Ej-J8; Mon, 12 Jul 2021 09:34:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154452.285409; Mon, 12 Jul 2021 09:34:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2sK8-0004Ec-F1; Mon, 12 Jul 2021 09:34:00 +0000
Received: by outflank-mailman (input) for mailman id 154452;
 Mon, 12 Jul 2021 09:33:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2sK6-0004ES-VN; Mon, 12 Jul 2021 09:33:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2sK6-0002JJ-Me; Mon, 12 Jul 2021 09:33:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2sK6-0005kx-B3; Mon, 12 Jul 2021 09:33:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2sK6-0001ct-AX; Mon, 12 Jul 2021 09:33:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Tkgza560TFzYf8J4pqJt7OhpW7LqT6zH6w6gL5nBkc4=; b=A480kAnADiyFQZKkPHZcl/G7eO
	S6Wnx2eNqnrppBeezRhJBXRnWAv9hC+sYRt8ikLwUTsgyek0/HkcFwW3sJ99M7uj+Uh9kWFeJkt+z
	oOlx3ymojtCDVUofVvIJ3mZ4qNSZbMDNdMm+jaZCAzf31sHpZCiAIkpSYkJJ64fnJ0m4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163577-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163577: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9516034d05a8c71ef157a59f525e4c4f7ed79827
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 09:33:58 +0000

flight 163577 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163577/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9516034d05a8c71ef157a59f525e4c4f7ed79827
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    6 days
Failing since        163327  2021-07-06 12:39:04 Z    5 days   11 attempts
Testing same since   163577  2021-07-11 20:39:18 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Corey Minyard <cminyard@mvista.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Or Ozeri <oro@il.ibm.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3773 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 09:36:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 09:36:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154458.285422 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2sM9-0004tS-Ve; Mon, 12 Jul 2021 09:36:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154458.285422; Mon, 12 Jul 2021 09:36:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2sM9-0004tL-Sl; Mon, 12 Jul 2021 09:36:05 +0000
Received: by outflank-mailman (input) for mailman id 154458;
 Mon, 12 Jul 2021 09:36:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m2sM8-0004tF-2m
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 09:36:04 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2sM6-0002Ln-VF; Mon, 12 Jul 2021 09:36:02 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2sM6-0005X8-KZ; Mon, 12 Jul 2021 09:36:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=e8GXjaMyBdA7nCCveZUk+adpKSsvIwE1fgO7pBP1mPA=; b=liEQFhsQl4JSZymloWNXQMH6gJ
	UMkZmjDtbR2fUwTf1XMl56vWfWcXD0rlH1V9cbcz3gRcpElon9nKlUoMOdScZ0mdBHawWmeisOblt
	wiJX33wqPmXf/ZFclK2Cwnmo/P75QT/lsPTkeC/V6AitqCQQh3noHLLu4Mz9OZ8EMI9U=;
Subject: Re: [RFC PATCH 2/4] xen/arm: Import ID features sanitize from linux
To: Bertrand Marquis <bertrand.marquis@arm.com>,
 xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <da0e48cde6c26d19fde468ad2860b807459a1042.1624974370.git.bertrand.marquis@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d312b6aa-7bdd-5ce1-f28b-3227a9331c62@xen.org>
Date: Mon, 12 Jul 2021 10:36:00 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <da0e48cde6c26d19fde468ad2860b807459a1042.1624974370.git.bertrand.marquis@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 29/06/2021 18:08, Bertrand Marquis wrote:
> Import structures declared in Linux file arch/arm64/kernel/cpufeature.c
> and import the required types.
> Current code has been imported from Linux 5.13-rc5 (Commit ID
> cd1245d75ce93b8fd206f4b34eb58bcfe156d5e9)
> 
> Those structure will be used to sanitize the cpu features available to
> the ones availble on all cores of a system even if we are on an
> heterogeneous platform (from example a big/LITTLE).
> 
> For each feature field of all ID registers, those structures define what
> is the safest value and if we can allow to have different values in
> different cores.
> 
> This patch is introducing Linux code without any changes to it.
> 
> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
> ---
>   xen/arch/arm/arm64/Makefile      |   1 +
>   xen/arch/arm/arm64/cpusanitize.c | 494 +++++++++++++++++++++++++++++++
>   2 files changed, 495 insertions(+)
>   create mode 100644 xen/arch/arm/arm64/cpusanitize.c
> 
> diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile
> index 40642ff574..c626990185 100644
> --- a/xen/arch/arm/arm64/Makefile
> +++ b/xen/arch/arm/arm64/Makefile
> @@ -1,6 +1,7 @@
>   obj-y += lib/
>   
>   obj-y += cache.o
> +obj-y += cpusanitize.o

Looking at the code, I don't think this cpusanitize.c would build after 
this patch. To allow bisection, this line would need to move when the 
file can build.

>   obj-$(CONFIG_HARDEN_BRANCH_PREDICTOR) += bpi.o
>   obj-$(CONFIG_EARLY_PRINTK) += debug.o
>   obj-y += domctl.o
> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpusanitize.c
> new file mode 100644
> index 0000000000..4cc8378c14
> --- /dev/null
> +++ b/xen/arch/arm/arm64/cpusanitize.c

Any reason to not stick with the Linux name?

> @@ -0,0 +1,494 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Sanitize CPU feature definitions
> + *
> + * Copyright (C) 2021 Arm Ltd.
> + * based on code from the Linux kernel, which is:
> + *  Copyright (C) 2015 ARM Ltd.

Linux has a large comment explaining the goal of the file. I think it is 
worth to keep it for Xen.

> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program.  If not, see <http://www.gnu.org/licenses/>.

This is a redundant with the SPDX tag above. Please get rid of one of them.

> + */
> +
> +#include <xen/types.h>
> +#include <asm/sysregs.h>
> +#include <asm/cpufeature.h>
> +
> +/*
> + * CPU feature register tracking
> + *
> + * The safe value of a CPUID feature field is dependent on the implications
> + * of the values assigned to it by the architecture. Based on the relationship
> + * between the values, the features are classified into 3 types - LOWER_SAFE,
> + * HIGHER_SAFE and EXACT.
> + *
> + * The lowest value of all the CPUs is chosen for LOWER_SAFE and highest
> + * for HIGHER_SAFE. It is expected that all CPUs have the same value for
> + * a field when EXACT is specified, failing which, the safe value specified
> + * in the table is chosen.
> + */
> +
> +enum ftr_type {
> +    FTR_EXACT,               /* Use a predefined safe value */
> +    FTR_LOWER_SAFE,          /* Smaller value is safe */
> +    FTR_HIGHER_SAFE,         /* Bigger value is safe */
> +    FTR_HIGHER_OR_ZERO_SAFE, /* Bigger value is safe, but 0 is biggest */
> +};
Please use the Linux coding style to stay consistent with the rest of 
the file. However, unless there is a reason to, I would prefer if the 
definition are in a separate header like Linux did.

> +
> +#define FTR_STRICT      true    /* SANITY check strict matching required */
> +#define FTR_NONSTRICT   false   /* SANITY check ignored */
> +
> +#define FTR_SIGNED      true    /* Value should be treated as signed */
> +#define FTR_UNSIGNED    false   /* Value should be treated as unsigned */
> +
> +#define FTR_VISIBLE true    /* Feature visible to the user space */
> +#define FTR_HIDDEN  false   /* Feature is hidden from the user */
> +
> +#define FTR_VISIBLE_IF_IS_ENABLED(config)       \
> +    (IS_ENABLED(config) ? FTR_VISIBLE : FTR_HIDDEN)
> +
> +struct arm64_ftr_bits {
> +    bool    sign;   /* Value is signed ? */
> +    bool    visible;
> +    bool    strict; /* CPU Sanity check: strict matching required ? */
> +    enum ftr_type   type;
> +    u8      shift;
> +    u8      width;
> +    s64     safe_val; /* safe value for FTR_EXACT features */
> +};
> +
> +/*
> + * NOTE: The following structures are imported directly from Linux kernel and
> + * should be kept in sync.
> + * The current version has been imported from arch/arm64/kernel/cpufeature.c
> + *  from kernel version 5.13-rc5
> + */

It feels a bit odd to add this comment in the middle of the definition. 
It would be better to move it close to the copyright.

> +
> +#define __ARM64_FTR_BITS(SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
> +	{						\
> +		.sign = SIGNED,				\
> +		.visible = VISIBLE,			\
> +		.strict = STRICT,			\
> +		.type = TYPE,				\
> +		.shift = SHIFT,				\
> +		.width = WIDTH,				\
> +		.safe_val = SAFE_VAL,			\
> +	}
> +
> +/* Define a feature with unsigned values */
> +#define ARM64_FTR_BITS(VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
> +	__ARM64_FTR_BITS(FTR_UNSIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL)
> +
> +/* Define a feature with a signed value */
> +#define S_ARM64_FTR_BITS(VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
> +	__ARM64_FTR_BITS(FTR_SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL)
> +
> +#define ARM64_FTR_END					\
> +	{						\
> +		.width = 0,				\
> +	}
> +
> +static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);

This function is not defined in the code you import.

> +
> +static bool __system_matches_cap(unsigned int n);

Ditto.

> +
> +/*
> + * NOTE: Any changes to the visibility of features should be kept in
> + * sync with the documentation of the CPU feature register ABI.
> + */
> +static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_RNDR_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_TLB_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_TS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_FHM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_DP_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_SM4_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_SM3_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_SHA3_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_RDM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_ATOMICS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_CRC32_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_SHA2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_SHA1_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_AES_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_I8MM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_DGH_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_BF16_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SPECRES_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FRINTTS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPI_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPA_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_LRCPC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FCMA_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_JSCVT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
> +		       FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_API_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
> +		       FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_APA_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_DPB_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64pfr0[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV3_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_DIT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_AMU_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_MPAM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_SEL2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +				   FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_SVE_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_RAS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_GIC_SHIFT, 4, 0),
> +	S_ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_ASIMD_SHIFT, 4, ID_AA64PFR0_ASIMD_NI),
> +	S_ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_FP_SHIFT, 4, ID_AA64PFR0_FP_NI),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_EL3_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_EL2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_EL1_SHIFT, 4, ID_AA64PFR0_EL1_64BIT_ONLY),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_EL0_SHIFT, 4, ID_AA64PFR0_EL0_64BIT_ONLY),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64pfr1[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_MPAMFRAC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_RASFRAC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_MTE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_MTE_SHIFT, 4, ID_AA64PFR1_MTE_NI),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR1_SSBS_SHIFT, 4, ID_AA64PFR1_SSBS_PSTATE_NI),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_BTI),
> +				    FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_BT_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_F64MM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_F32MM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_I8MM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BF16_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64mmfr0[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_ECV_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_FGT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_EXS_SHIFT, 4, 0),
> +	/*
> +	 * Page size not being supported at Stage-2 is not fatal. You
> +	 * just give up KVM if PAGE_SIZE isn't supported there. Go fix
> +	 * your favourite nesting hypervisor.
> +	 *
> +	 * There is a small corner case where the hypervisor explicitly
> +	 * advertises a given granule size at Stage-2 (value 2) on some
> +	 * vCPUs, and uses the fallback to Stage-1 (value 0) for other
> +	 * vCPUs. Although this is not forbidden by the architecture, it
> +	 * indicates that the hypervisor is being silly (or buggy).
> +	 *
> +	 * We make no effort to cope with this and pretend that if these
> +	 * fields are inconsistent across vCPUs, then it isn't worth
> +	 * trying to bring KVM up.
> +	 */
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN4_2_SHIFT, 4, 1),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN64_2_SHIFT, 4, 1),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN16_2_SHIFT, 4, 1),
> +	/*
> +	 * We already refuse to boot CPUs that don't support our configured
> +	 * page size, so we can only detect mismatches for a page size other
> +	 * than the one we're currently using. Unfortunately, SoCs like this
> +	 * exist in the wild so, even though we don't like it, we'll have to go
> +	 * along with it and treat them as non-strict.
> +	 */
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN4_SHIFT, 4, ID_AA64MMFR0_TGRAN4_NI),
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN64_SHIFT, 4, ID_AA64MMFR0_TGRAN64_NI),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_TGRAN16_SHIFT, 4, ID_AA64MMFR0_TGRAN16_NI),
> +
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_BIGENDEL0_SHIFT, 4, 0),
> +	/* Linux shouldn't care about secure memory */
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_SNSMEM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_BIGENDEL_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_ASID_SHIFT, 4, 0),
> +	/*
> +	 * Differing PARange is fine as long as all peripherals and memory are mapped
> +	 * within the minimum PARange of all CPUs
> +	 */
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_PARANGE_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64mmfr1[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_ETS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_TWED_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_XNX_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_AA64MMFR1_SPECSEI_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_PAN_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_LOR_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_HPD_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_VHE_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_VMIDBITS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_HADBS_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64mmfr2[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_E0PD_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_EVT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_BBM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_TTL_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_FWB_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_IDS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_AT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_ST_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_NV_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_CCIDX_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_LVA_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_IESB_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_LSM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_UAO_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_CNP_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_ctr[] = {
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_CWG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_ERG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1),
> +	/*
> +	 * Linux can handle differing I-cache policies. Userspace JITs will
> +	 * make use of *minLine.
> +	 * If we have differing I-cache policies, report it as the weakest - VIPT.
> +	 */
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, 2, ICACHE_POLICY_VIPT),	/* L1Ip */
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static struct arm64_ftr_override __ro_after_init no_override = { };
> +
> +struct arm64_ftr_reg arm64_ftr_reg_ctrel0 = {
> +	.name		= "SYS_CTR_EL0",
> +	.ftr_bits	= ftr_ctr,
> +	.override	= &no_override,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_mmfr0[] = {
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_INNERSHR_SHIFT, 4, 0xf),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_FCSE_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_MMFR0_AUXREG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_TCM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_SHARELVL_SHIFT, 4, 0),
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_OUTERSHR_SHIFT, 4, 0xf),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_PMSA_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_VMSA_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = {
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_DOUBLELOCK_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR0_PMSVER_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_CTX_CMPS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_WRPS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_BRPS_SHIFT, 4, 0),
> +	/*
> +	 * We can instantiate multiple PMU instances with different levels
> +	 * of support.
> +	 */
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64DFR0_PMUVER_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64DFR0_DEBUGVER_SHIFT, 4, 0x6),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_mvfr2[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR2_FPMISC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR2_SIMDMISC_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_dczid[] = {
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, DCZID_DZP_SHIFT, 1, 1),
> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, DCZID_BS_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_isar0[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DIVIDE_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DEBUG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_COPROC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_CMPBRANCH_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_BITFIELD_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_BITCOUNT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_SWAP_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_isar5[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_RDM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_CRC32_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA1_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_AES_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SEVL_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_mmfr4[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_EVT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_CCIDX_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_LSM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_HPDS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_CNP_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_XNX_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_AC2_SHIFT, 4, 0),
> +
> +	/*
> +	 * SpecSEI = 1 indicates that the PE might generate an SError on an
> +	 * external abort on speculative read. It is safe to assume that an
> +	 * SError might be generated than it will not be. Hence it has been
> +	 * classified as FTR_HIGHER_SAFE.
> +	 */
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_MMFR4_SPECSEI_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_isar4[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_SWP_FRAC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_PSR_M_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_SYNCH_PRIM_FRAC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_BARRIER_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_SMC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_WRITEBACK_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_WITHSHIFTS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_UNPRIV_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_mmfr5[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR5_ETS_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_isar6[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_I8MM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_BF16_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_SPECRES_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_SB_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_FHM_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_DP_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_JSCVT_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_pfr0[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_DIT_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_PFR0_CSV2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE3_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE2_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE1_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE0_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_pfr1[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_GIC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_VIRT_FRAC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_SEC_FRAC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_GENTIMER_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_VIRTUALIZATION_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_MPROGMOD_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_SECURITY_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_PROGMOD_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_pfr2[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_PFR2_SSBS_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_PFR2_CSV3_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_dfr0[] = {
> +	/* [31:28] TraceFilt */
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_PERFMON_SHIFT, 4, 0xf),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_MPROFDBG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_MMAPTRC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_COPTRC_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_MMAPDBG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_COPSDBG_SHIFT, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_COPDBG_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_id_dfr1[] = {
> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR1_MTPMU_SHIFT, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_zcr[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE,
> +		ZCR_ELx_LEN_SHIFT, ZCR_ELx_LEN_SIZE, 0),	/* LEN */
> +	ARM64_FTR_END,
> +};
> +
> +/*
> + * Common ftr bits for a 32bit register with all hidden, strict
> + * attributes, with 4bit feature fields and a default safe value of
> + * 0. Covers the following 32bit registers:
> + * id_isar[1-4], id_mmfr[1-3], id_pfr1, mvfr[0-1]
> + */
> +static const struct arm64_ftr_bits ftr_generic_32bits[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 28, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 24, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 20, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 16, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 12, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 8, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 4, 4, 0),
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 0, 4, 0),
> +	ARM64_FTR_END,
> +};
> +
> +/* Table for a single 32bit feature value */
> +static const struct arm64_ftr_bits ftr_single32[] = {
> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, 0, 32, 0),
> +	ARM64_FTR_END,
> +};
> +
> +static const struct arm64_ftr_bits ftr_raz[] = {
> +	ARM64_FTR_END,
> +};
> +
> +/*
> + * End of imported linux structures
> + */
> +
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 09:40:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 09:40:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154467.285434 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2sQQ-0006Lm-LT; Mon, 12 Jul 2021 09:40:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154467.285434; Mon, 12 Jul 2021 09:40:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2sQQ-0006Lf-IJ; Mon, 12 Jul 2021 09:40:30 +0000
Received: by outflank-mailman (input) for mailman id 154467;
 Mon, 12 Jul 2021 09:40:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1mfh=ME=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m2sQO-0006LZ-MO
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 09:40:28 +0000
Received: from mail-pl1-x634.google.com (unknown [2607:f8b0:4864:20::634])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 983280c0-cb53-4de1-b527-740d77b0a5c9;
 Mon, 12 Jul 2021 09:40:27 +0000 (UTC)
Received: by mail-pl1-x634.google.com with SMTP id p17so8332007plf.12
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 02:40:27 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 31sm16879517pgu.17.2021.07.12.02.40.14
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 12 Jul 2021 02:40:26 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 983280c0-cb53-4de1-b527-740d77b0a5c9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:from:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=k4GGfq+hVsQvPEL9sGnkKkX1T5cHEpElvgl+H/D8GGg=;
        b=EkbTRNsENXQloBh/r+302XMpUfivY4n/w5cVp65wMsO8W0nGbNZWXtUpGIviZUFMAy
         hVFPC6f41UQksp8J6hOtkXkI1ILbHE9sNZcJkJnKx0RudbrlBVNOQLGk52plindDLFMf
         0HidNEe5dnhfekaP3FOVdL3ce/SvQgBj9ik/lEvFt5vP9q7wJ5ZuDvmEpmvcF5JRom1t
         2eapWgs0Md02bchF5N+TVdbkrIOrWMIsIpK0TzcTloe094d/by9NBbGKhQB62sMXf/ds
         jqItDVYo/8NVUWioCBvu/2MyBq3LvV1RB8PjsNypw3SWcxG1OHtv43K0i0bJE0RuT+wZ
         vSmQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:from:to:cc:references:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=k4GGfq+hVsQvPEL9sGnkKkX1T5cHEpElvgl+H/D8GGg=;
        b=GTQiBkqgmEQV5zozbX5lOiOdMSIiSmi+EwYjOBQa+dGdZBgTZ3PJEH0cLRUJPMpySG
         TY5y8zTHEvgnUL0U3aEAz23c91ZW5KheBWL6rlb1w3jKz3T74EvzblNTu/MzQm8Us0+u
         FoNoM2VVo4+vxg8IUF8JxQAC9cpdtYVHxAr0GU3jKCwo87LGb0M6ZC6VdoNbJMV8X1rE
         udi/8nEnrXmd9LFQwwyNNhhCPU4gy/cPmFakxdoeE6o9+yvPQMJAnvC4UIuqD6sgrcvr
         NZ34pmNRaFgz5WYmYovKVqHCI85+rsUlcD8iEH5Rnf60WDYeO3ElKz8pSOTtJ7r3n22r
         7NMg==
X-Gm-Message-State: AOAM530l9fV8rK21uZJfoUAKot4tv7dHWYHS9odKKWngm8MkCEP/Xw7r
	j/QFy1+BON+CBZ9CFpWDqiA=
X-Google-Smtp-Source: ABdhPJwRdZQLr6WcRQHTJmvy3QekS6aYpqqDhr3YMzQ3fQO9CQGmdbyBFz8czGBJt97d+duRqdeEsg==
X-Received: by 2002:a17:90b:4a4d:: with SMTP id lb13mr13276916pjb.221.1626082827215;
        Mon, 12 Jul 2021 02:40:27 -0700 (PDT)
Subject: Re: [RFC PATCH V3 08/11] swiotlb: Add bounce buffer remap address
 setting function
From: Tianyu Lan <ltykernel@gmail.com>
To: Christoph Hellwig <hch@lst.de>, Robin Murphy <robin.murphy@arm.com>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
 wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
 mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
 arnd@arndb.de, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, akpm@linux-foundation.org,
 kirill.shutemov@linux.intel.com, rppt@kernel.org, hannes@cmpxchg.org,
 cai@lca.pw, krish.sadhukhan@oracle.com, saravanand@fb.com,
 Tianyu.Lan@microsoft.com, konrad.wilk@oracle.com, m.szyprowski@samsung.com,
 boris.ostrovsky@oracle.com, jgross@suse.com, sstabellini@kernel.org,
 joro@8bytes.org, will@kernel.org, xen-devel@lists.xenproject.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, iommu@lists.linux-foundation.org,
 linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
 linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
 netdev@vger.kernel.org, vkuznets@redhat.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, sunilmut@microsoft.com
References: <20210530150628.2063957-1-ltykernel@gmail.com>
 <20210530150628.2063957-9-ltykernel@gmail.com>
 <20210607064312.GB24478@lst.de>
 <94038087-a33c-93c5-27bf-7ec1f6f5f0e3@arm.com> <20210614153252.GA1741@lst.de>
 <9e347c4c-d4b9-129c-10d2-0d7ff1b917cc@gmail.com>
Message-ID: <873a6872-e2f5-7c6c-ec57-d21305380cd9@gmail.com>
Date: Mon, 12 Jul 2021 17:40:12 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <9e347c4c-d4b9-129c-10d2-0d7ff1b917cc@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

Hi Christoph and Robin:
      I introduced new interface set_memory_decrypted_map() to hide all
the hypervisor code behind it in the latest version. In current generic
code, only swiotlb bounce buffer needs to be decrypted and remapped in 
the same time and so keep set_memory_decrypted(). If there were more 
requests of set_memory_decrypted_map() for other platform, we may
replace set_memory_decrypted() step by step. Please have a look.
       https://lkml.org/lkml/2021/7/7/570

Thanks.

On 6/15/2021 11:24 PM, Tianyu Lan wrote:
> On 6/14/2021 11:32 PM, Christoph Hellwig wrote:
>> On Mon, Jun 14, 2021 at 02:49:51PM +0100, Robin Murphy wrote:
>>> FWIW, I think a better generalisation for this would be allowing
>>> set_memory_decrypted() to return an address rather than implicitly
>>> operating in-place, and hide all the various hypervisor hooks behind 
>>> that.
>>
>> Yes, something like that would be a good idea.  As-is
>> set_memory_decrypted is a pretty horribly API anyway due to passing
>> the address as void, and taking a size parameter while it works in units
>> of pages.  So I'd very much welcome a major overhaul of this API.
>>
> 
> Hi Christoph and Robin:
>      Thanks for your suggestion. I will try this idea in the next 
> version. Besides make the address translation into set_memory_
> decrypted() and return address, do you want to make other changes to the 
> API in order to make it more reasonable(e.g size parameter)?
> 
> Thanks


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 10:10:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 10:10:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154475.285444 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2stW-0001Eb-2X; Mon, 12 Jul 2021 10:10:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154475.285444; Mon, 12 Jul 2021 10:10:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2stV-0001EU-Vu; Mon, 12 Jul 2021 10:10:33 +0000
Received: by outflank-mailman (input) for mailman id 154475;
 Mon, 12 Jul 2021 10:10:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2stV-0001EK-1y; Mon, 12 Jul 2021 10:10:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2stU-00031Y-Oc; Mon, 12 Jul 2021 10:10:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2stU-0008QF-HN; Mon, 12 Jul 2021 10:10:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2stU-0007nP-Gp; Mon, 12 Jul 2021 10:10:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Yvbn0G/qr+6yGbFU1y45/ZYLsYADiOWAgmn8dnfbpbQ=; b=UiXGv6Zf6Dy3czQs48e+QXjKqo
	WOHQivG1k/mnBUXb9cCH2se4spLfDseFFTr16IxYY5ZYXdJQOCFZ7xjcz2iZ7P0qlB5ekK0x9Qast
	Rm1CkY87xyYU2AePz4moTHWwED8a6EKx1YJT+9SLQnCPH5J4JfIKwsL9G1oh2yfs4AQM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163595-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163595: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 10:10:32 +0000

flight 163595 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163595/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    2 days
Failing since        163480  2021-07-09 16:08:01 Z    2 days   16 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    2 days   15 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 10:16:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 10:16:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154483.285459 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2syy-0001xP-QC; Mon, 12 Jul 2021 10:16:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154483.285459; Mon, 12 Jul 2021 10:16:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2syy-0001xI-MM; Mon, 12 Jul 2021 10:16:12 +0000
Received: by outflank-mailman (input) for mailman id 154483;
 Mon, 12 Jul 2021 10:16:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m2syx-0001xC-GG
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 10:16:11 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2syt-00037R-9S; Mon, 12 Jul 2021 10:16:07 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2sys-0000GG-VC; Mon, 12 Jul 2021 10:16:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=BhuzIdzTxqiJCnaqT9e2eQ0LXxSrzyuusXdoli5bbrA=; b=qplNoa9S7K/O/9CyR6U37MqCij
	r3wvsXfpzFnuDqE0RkAjjRNMXarjAMGPze7LCq01wMwd+avAT3PJ9FXrkZ+c362LL3gHvqzkGpo6H
	sMrubdt/kf8YhtiDY/lvNq1JDafvKodn6UECyQlOo9FAkcmG3SHuEPv3HdSHb5cQhilo=;
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
To: Bertrand Marquis <bertrand.marquis@arm.com>,
 xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
Date: Mon, 12 Jul 2021 11:16:04 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Bertrand,

On 29/06/2021 18:08, Bertrand Marquis wrote:
> Define a sanitize_cpu function to be called on secondary cores to
> sanitize the cpuinfo structure from the boot CPU.
> 
> The safest value is taken when possible and the system is marked tainted
> if we encounter values which are incompatible with each other.
> 
> Call the sanitize_cpu function on all secondary cores and remove the
> code disabling secondary cores if they are not the same as the boot core
> as we are now able to handle this use case.
> 
> This is only supported on arm64 so cpu_sanitize is an empty static
> inline on arm32.
> 
> This patch also removes the code imported from Linux that will not be
> used by Xen.
> 
> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
> ---
>   xen/arch/arm/arm64/cpusanitize.c | 236 ++++++++++++++++++++++++-------
>   xen/arch/arm/smpboot.c           |   5 +-
>   xen/include/asm-arm/cpufeature.h |   9 ++
>   xen/include/xen/lib.h            |   1 +
>   4 files changed, 199 insertions(+), 52 deletions(-)
> 
> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpusanitize.c
> index 4cc8378c14..744006ca7c 100644
> --- a/xen/arch/arm/arm64/cpusanitize.c
> +++ b/xen/arch/arm/arm64/cpusanitize.c
> @@ -97,10 +97,6 @@ struct arm64_ftr_bits {
>   		.width = 0,				\
>   	}
>   
> -static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);
> -
> -static bool __system_matches_cap(unsigned int n);
> -
>   /*
>    * NOTE: Any changes to the visibility of features should be kept in
>    * sync with the documentation of the CPU feature register ABI.
> @@ -277,31 +273,6 @@ static const struct arm64_ftr_bits ftr_id_aa64mmfr2[] = {
>   	ARM64_FTR_END,
>   };
>   
> -static const struct arm64_ftr_bits ftr_ctr[] = {
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1),
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1),
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_CWG_SHIFT, 4, 0),
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_ERG_SHIFT, 4, 0),
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1),
> -	/*
> -	 * Linux can handle differing I-cache policies. Userspace JITs will
> -	 * make use of *minLine.
> -	 * If we have differing I-cache policies, report it as the weakest - VIPT.
> -	 */
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, 2, ICACHE_POLICY_VIPT),	/* L1Ip */
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_SHIFT, 4, 0),
> -	ARM64_FTR_END,
> -};

I don't think this is should be dropped. Xen will need to know the 
safest cacheline size that can be used for cache maintenance instructions.

> -
> -static struct arm64_ftr_override __ro_after_init no_override = { };
> -
> -struct arm64_ftr_reg arm64_ftr_reg_ctrel0 = {
> -	.name		= "SYS_CTR_EL0",
> -	.ftr_bits	= ftr_ctr,
> -	.override	= &no_override,
> -};
> -
>   static const struct arm64_ftr_bits ftr_id_mmfr0[] = {
>   	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_INNERSHR_SHIFT, 4, 0xf),
>   	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_FCSE_SHIFT, 4, 0),
> @@ -335,12 +306,6 @@ static const struct arm64_ftr_bits ftr_mvfr2[] = {
>   	ARM64_FTR_END,
>   };
>   
> -static const struct arm64_ftr_bits ftr_dczid[] = {
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, DCZID_DZP_SHIFT, 1, 1),
> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, DCZID_BS_SHIFT, 4, 0),
> -	ARM64_FTR_END,
> -};

Why is this dropped?

> -
>   static const struct arm64_ftr_bits ftr_id_isar0[] = {
>   	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DIVIDE_SHIFT, 4, 0),
>   	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DEBUG_SHIFT, 4, 0),
> @@ -454,12 +419,6 @@ static const struct arm64_ftr_bits ftr_id_dfr1[] = {
>   	ARM64_FTR_END,
>   };
>   
> -static const struct arm64_ftr_bits ftr_zcr[] = {
> -	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE,
> -		ZCR_ELx_LEN_SHIFT, ZCR_ELx_LEN_SIZE, 0),	/* LEN */
> -	ARM64_FTR_END,
> -};

At some point we will support SVE in Xen. So any reason we would not 
want to keep the code?

> -
>   /*
>    * Common ftr bits for a 32bit register with all hidden, strict
>    * attributes, with 4bit feature fields and a default safe value of
> @@ -478,17 +437,192 @@ static const struct arm64_ftr_bits ftr_generic_32bits[] = {
>   	ARM64_FTR_END,
>   };
>   
> -/* Table for a single 32bit feature value */
> -static const struct arm64_ftr_bits ftr_single32[] = {
> -	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, 0, 32, 0),
> -	ARM64_FTR_END,
> -};
> -
> -static const struct arm64_ftr_bits ftr_raz[] = {
> -	ARM64_FTR_END,
> -};
> -
>   /*
>    * End of imported linux structures
>    */
>   
> +static inline int __attribute_const__
> +cpuid_feature_extract_signed_field_width(u64 features, int field, int width)
> +{
> +    return (s64)(features << (64 - width - field)) >> (64 - width);
> +}

Please avoid to mix Xen and Linux coding style in the same file.

Also, this function and some others below seems to have been taken as-is 
from Linux. So this should at least be mentionned in the commit message.

I would also consider to import them in a separate patch (or maybe in 
patch#2) so it is clear this is not "new" code.

> +
> +static inline int __attribute_const__
> +cpuid_feature_extract_signed_field(u64 features, int field)
> +{
> +    return cpuid_feature_extract_signed_field_width(features, field, 4);
> +}
> +
> +static inline unsigned int __attribute_const__
> +cpuid_feature_extract_unsigned_field_width(u64 features, int field, int width)
> +{
> +    return (u64)(features << (64 - width - field)) >> (64 - width);
> +}
> +
> +static inline unsigned int __attribute_const__
> +cpuid_feature_extract_unsigned_field(u64 features, int field)
> +{
> +    return cpuid_feature_extract_unsigned_field_width(features, field, 4);
> +}
> +
> +static inline u64 arm64_ftr_mask(const struct arm64_ftr_bits *ftrp)
> +{
> +    return (u64)GENMASK(ftrp->shift + ftrp->width - 1, ftrp->shift);
> +}
> +
> +static inline int __attribute_const__
> +cpuid_feature_extract_field_width(u64 features, int field, int width,
> +                                  bool sign)
> +{
> +    return (sign) ?
> +        cpuid_feature_extract_signed_field_width(features, field, width) :
> +        cpuid_feature_extract_unsigned_field_width(features, field, width);
> +}
> +
> +static inline int __attribute_const__
> +cpuid_feature_extract_field(u64 features, int field, bool sign)
> +{
> +    return cpuid_feature_extract_field_width(features, field, 4, sign);
> +}
> +
> +static inline s64 arm64_ftr_value(const struct arm64_ftr_bits *ftrp, u64 val)
> +{
> +    return (s64)cpuid_feature_extract_field_width(val, ftrp->shift,
> +                                                  ftrp->width, ftrp->sign);
> +}
> +
> +static s64 arm64_ftr_safe_value(const struct arm64_ftr_bits *ftrp, s64 new,
> +                                s64 cur)
> +{
> +    s64 ret = 0;
> +
> +    switch ( ftrp->type ) {
> +    case FTR_EXACT:
> +        ret = ftrp->safe_val;
> +        break;
> +    case FTR_LOWER_SAFE:
> +        ret = new < cur ? new : cur;
> +        break;
> +    case FTR_HIGHER_OR_ZERO_SAFE:
> +        if (!cur || !new)
> +            break;
> +        fallthrough;
> +    case FTR_HIGHER_SAFE:
> +        ret = new > cur ? new : cur;

We have a macro max() defined in kernel.h.

> +        break;
> +    default:
> +        BUG();
> +    }
> +
> +    return ret;
> +}
> +
> +static void sanitize_reg(u64 *cur_reg, u64 new_reg, const char *reg_name,
> +                        const struct arm64_ftr_bits *ftrp)
> +{
> +    int taint = 0;
> +    u64 old_reg = *cur_reg;
> +
> +    for ( ; ftrp->width !=0 ; ftrp++ )
> +    {
> +        u64 mask;
> +        s64 cur_field = arm64_ftr_value(ftrp, *cur_reg);
> +        s64 new_field = arm64_ftr_value(ftrp, new_reg);
> +
> +        if ( cur_field == new_field )
> +            continue;
> +
> +        if ( ftrp->strict )
> +            taint = 1;
> +
> +        mask = arm64_ftr_mask(ftrp);
> +
> +        *cur_reg &= ~mask;
> +        *cur_reg |= (arm64_ftr_safe_value(ftrp, new_field, cur_field)
> +                    << ftrp->shift) & mask;
> +    }
> +
> +    if ( old_reg != new_reg )
> +        printk(XENLOG_DEBUG "SANITY DIF: %s 0x%"PRIx64" -> 0x%"PRIx64"\n",
> +               reg_name, old_reg, new_reg);
> +    if ( old_reg != *cur_reg )
> +        printk(XENLOG_DEBUG "SANITY FIX: %s 0x%"PRIx64" -> 0x%"PRIx64"\n",
> +               reg_name, old_reg, *cur_reg);
> +
> +    if ( taint )
> +    {
> +        printk(XENLOG_WARNING "SANITY CHECK: Unexpected variation in %s.\n",
> +                reg_name);
> +        add_taint(TAINT_CPU_OUT_OF_SPEC);
> +    }
> +}
> +
> +
> +/*
> + * This function should be called on secondary cores to sanitize the boot cpu
> + * cpuinfo.

Can we renamed boot_cpu_data to system_cpuinfo (or something similar)? 
This would make clear this is not only the features for the boot CPU?

> + */
> +void sanitize_cpu(const struct cpuinfo_arm *new)

How about naming it to "update_system_features()"?

> +{
> +
> +#define SANITIZE_REG(field, num, reg)  \
> +    sanitize_reg(&boot_cpu_data.field.bits[num], new->field.bits[num], \
> +                 #reg, ftr_##reg)
> +
> +#define SANITIZE_ID_REG(field, num, reg)  \
> +    sanitize_reg(&boot_cpu_data.field.bits[num], new->field.bits[num], \
> +                 #reg, ftr_id_##reg)
> +
> +#define SANITIZE_GENERIC_REG(field, num, reg)  \
> +    sanitize_reg(&boot_cpu_data.field.bits[num], new->field.bits[num], \
> +                 #reg, ftr_generic_32bits)
> +
> +    SANITIZE_ID_REG(pfr64, 0, aa64pfr0);
> +    SANITIZE_ID_REG(pfr64, 1, aa64pfr1);
> +
> +    SANITIZE_ID_REG(dbg64, 0, aa64dfr0);
> +
> +    /* aux64 x2 */
> +
> +    SANITIZE_ID_REG(mm64, 0, aa64mmfr0);
> +    SANITIZE_ID_REG(mm64, 1, aa64mmfr1);
> +    SANITIZE_ID_REG(mm64, 2, aa64mmfr2);
> +
> +    SANITIZE_ID_REG(isa64, 0, aa64isar0);
> +    SANITIZE_ID_REG(isa64, 1, aa64isar1);
> +
> +    SANITIZE_ID_REG(zfr64, 0, aa64zfr0);
> +
> +    if ( cpu_feature64_has_el0_32(&boot_cpu_data) )
> +    {
> +        SANITIZE_ID_REG(pfr32, 0, pfr0);
> +        SANITIZE_ID_REG(pfr32, 1, pfr1);
> +        SANITIZE_ID_REG(pfr32, 2, pfr2);
> +
> +        SANITIZE_ID_REG(dbg32, 0, dfr0);
> +        SANITIZE_ID_REG(dbg32, 1, dfr1);
> +
> +        /* aux32 x1 */

What does this comment mean?

> +
> +        SANITIZE_ID_REG(mm32, 0, mmfr0);
> +        SANITIZE_GENERIC_REG(mm32, 1, mmfr1);
> +        SANITIZE_GENERIC_REG(mm32, 2, mmfr2);
> +        SANITIZE_GENERIC_REG(mm32, 3, mmfr3);
> +        SANITIZE_ID_REG(mm32, 4, mmfr4);
> +        SANITIZE_ID_REG(mm32, 5, mmfr5);
> +
> +        SANITIZE_ID_REG(isa32, 0, isar0);
> +        SANITIZE_GENERIC_REG(isa32, 1, isar1);
> +        SANITIZE_GENERIC_REG(isa32, 2, isar2);
> +        SANITIZE_GENERIC_REG(isa32, 3, isar3);
> +        SANITIZE_ID_REG(isa32, 4, isar4);
> +        SANITIZE_ID_REG(isa32, 5, isar5);
> +        SANITIZE_ID_REG(isa32, 6, isar6);
> +
> +        SANITIZE_GENERIC_REG(mvfr, 0, mvfr0);
> +        SANITIZE_GENERIC_REG(mvfr, 1, mvfr1);
> +#ifndef MVFR2_MAYBE_UNDEFINED
> +        SANITIZE_REG(mvfr, 2, mvfr2);
> +#endif
> +    }
> +}
> diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
> index a1ee3146ef..8fdf5e70d3 100644
> --- a/xen/arch/arm/smpboot.c
> +++ b/xen/arch/arm/smpboot.c
> @@ -307,12 +307,14 @@ void start_secondary(void)
>       set_processor_id(cpuid);
>   
>       identify_cpu(&current_cpu_data);
> +    sanitize_cpu(&current_cpu_data);
>       processor_setup();
>   
>       init_traps();
>   
> +#ifndef CONFIG_ARM_64
>       /*
> -     * Currently Xen assumes the platform has only one kind of CPUs.
> +     * Currently Xen assumes the platform has only one kind of CPUs on ARM32.
>        * This assumption does not hold on big.LITTLE platform and may
>        * result to instability and insecure platform (unless cpu affinity
>        * is manually specified for all domains). Better to park them for
> @@ -328,6 +330,7 @@ void start_secondary(void)
>                  boot_cpu_data.midr.bits);
>           stop_cpu();
>       }
> +#endif
>   
>       if ( dcache_line_bytes != read_dcache_line_bytes() )
>       {

Any plan to drop this check?

> diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h
> index ba48db3eac..ad34e55cc8 100644
> --- a/xen/include/asm-arm/cpufeature.h
> +++ b/xen/include/asm-arm/cpufeature.h
> @@ -330,6 +330,15 @@ extern struct cpuinfo_arm boot_cpu_data;
>   
>   extern void identify_cpu(struct cpuinfo_arm *);
>   
> +#ifdef CONFIG_ARM_64
> +extern void sanitize_cpu(const struct cpuinfo_arm *);
> +#else
> +static inline void sanitize_cpu(const struct cpuinfo_arm *cpuinfo)
> +{
> +    /* Not supported on arm32 */
> +}
> +#endif
> +
>   extern struct cpuinfo_arm cpu_data[];
>   #define current_cpu_data cpu_data[smp_processor_id()]
>   
> diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
> index 1198c7c0b2..c6987973bf 100644
> --- a/xen/include/xen/lib.h
> +++ b/xen/include/xen/lib.h
> @@ -192,6 +192,7 @@ uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
>   #define TAINT_ERROR_INJECT              (1u << 2)
>   #define TAINT_HVM_FEP                   (1u << 3)
>   #define TAINT_MACHINE_UNSECURE          (1u << 4)
> +#define TAINT_CPU_OUT_OF_SPEC           (1u << 5)

You want to also update at least print_tainted().

>   extern unsigned int tainted;
>   #define TAINT_STRING_MAX_LEN            20
>   extern char *print_tainted(char *str);
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 10:51:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 10:51:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154493.285476 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tWe-00062g-Lm; Mon, 12 Jul 2021 10:51:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154493.285476; Mon, 12 Jul 2021 10:51:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tWe-00062Z-Hj; Mon, 12 Jul 2021 10:51:00 +0000
Received: by outflank-mailman (input) for mailman id 154493;
 Mon, 12 Jul 2021 10:51:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SUz8=ME=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m2tWd-00062T-W1
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 10:51:00 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.64]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0a5b9ee0-e2ff-11eb-86e3-12813bfff9fa;
 Mon, 12 Jul 2021 10:50:58 +0000 (UTC)
Received: from DB3PR06CA0012.eurprd06.prod.outlook.com (2603:10a6:8:1::25) by
 AM5PR0801MB2083.eurprd08.prod.outlook.com (2603:10a6:203:4d::15) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Mon, 12 Jul
 2021 10:50:56 +0000
Received: from DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:8:1:cafe::85) by DB3PR06CA0012.outlook.office365.com
 (2603:10a6:8:1::25) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Mon, 12 Jul 2021 10:50:56 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT045.mail.protection.outlook.com (10.152.21.164) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Mon, 12 Jul 2021 10:50:56 +0000
Received: ("Tessian outbound 8b91ad1fd5d8:v98");
 Mon, 12 Jul 2021 10:50:56 +0000
Received: from 12e6e87c3c03.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 311772F7-3A90-479F-A05E-A063611FFF7C.1; 
 Mon, 12 Jul 2021 10:50:24 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 12e6e87c3c03.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 12 Jul 2021 10:50:24 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PAXPR08MB6592.eurprd08.prod.outlook.com (2603:10a6:102:158::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Mon, 12 Jul
 2021 10:50:22 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%8]) with mapi id 15.20.4308.026; Mon, 12 Jul 2021
 10:50:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0a5b9ee0-e2ff-11eb-86e3-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gpROOC5XltsUGm+yEoptO2dxSk8iMDYqLm01ZSKpsDU=;
 b=Xx9vbrfrwuvJlVj2SV/DHkAngAoTpum5SMT/Y800+9iOFVPG9lSz5HmwDtMw5Ao4ZR63JNtqPtblPeD1nDuwMN5AjpKNWnpD+J8HuxTJJRv6ak9ZR3IDEwTQaPhKdDEmfZnqze1jGCAyeO9+/lGL+1Es2Dy6N443rF4cV8w40FE=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: ad0d734b986f6dc8
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cvQxr0FmjRmJb5sQ+tTCVlQAPfYJyB/kTWtWadESFMNEIfSqv5IR0Tyn8AFG0ttRmdn/PssIACmyd+cTKPfkcUvt8Q+MfCZb0LO4XiGTvVdntKfMnb9eE+HUYtCfUDNC4KV0WMPPmK9jvkIkquJ8D7FY2N5kJEPJuf4MF5McZZc85d4JG2z5+o9NvDWob6wk3uGooIw/99En1hA/23Fb15oLsQU7dGkmZ/Y6EKJd/qXRWZf0Poulef87ETBfeQpGGw0vdtBfTLEqIGaxIL96y6n9VT/myN6rwhbXs1zj2ZhM+4/t4+ZwI683yzErnrtVlqp/91dRCHwHcuw72xBGAw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gpROOC5XltsUGm+yEoptO2dxSk8iMDYqLm01ZSKpsDU=;
 b=EGA6X969B15ATmB69EZZ8BA8HtVPMjgj+06yCzjtIa3abtfJ+Ez7ltz+fPl2f3rAY6KViewJDrlPTWJ5+4T+9z747WNjcrHTCPazZS9vLhnAK+OtX6phvxRcDdYbUoLwJEYoP5EZqVptjbpU4MqnVsDSHbUaqnjm0e7ISLozJQYsdpv+YCF4hLsNSaawVjUetcfsfWeNI1/dSaV/jvk8GROVQx2Mu/RrHLe3kU8O/N6dEcqyCCvvRQBcQdXGX6wvfQDzyHbl2cJX0u6uWdGh+g+T6w2Tmh2qFUG7likbKCiiByu4SB2SCzosMpdYyMz/Ey1GL7Vm2rCjXu1FypWhzQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gpROOC5XltsUGm+yEoptO2dxSk8iMDYqLm01ZSKpsDU=;
 b=Xx9vbrfrwuvJlVj2SV/DHkAngAoTpum5SMT/Y800+9iOFVPG9lSz5HmwDtMw5Ao4ZR63JNtqPtblPeD1nDuwMN5AjpKNWnpD+J8HuxTJJRv6ak9ZR3IDEwTQaPhKdDEmfZnqze1jGCAyeO9+/lGL+1Es2Dy6N443rF4cV8w40FE=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Stefano
 Stabellini <sstabellini@kernel.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>
Subject: Re: [RFC PATCH 2/4] xen/arm: Import ID features sanitize from linux
Thread-Topic: [RFC PATCH 2/4] xen/arm: Import ID features sanitize from linux
Thread-Index: AQHXbQzgNu/qUFs3aEClaXaz6zdScKs/KIwAgAAUw4A=
Date: Mon, 12 Jul 2021 10:50:21 +0000
Message-ID: <C505E8BE-9B75-4C19-A822-C65B5807EFAA@arm.com>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <da0e48cde6c26d19fde468ad2860b807459a1042.1624974370.git.bertrand.marquis@arm.com>
 <d312b6aa-7bdd-5ce1-f28b-3227a9331c62@xen.org>
In-Reply-To: <d312b6aa-7bdd-5ce1-f28b-3227a9331c62@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 285c781c-960a-49c5-f080-08d94522ed73
x-ms-traffictypediagnostic: PAXPR08MB6592:|AM5PR0801MB2083:
X-Microsoft-Antispam-PRVS:
	<AM5PR0801MB208329CFBA03F0E317DBDBD39D159@AM5PR0801MB2083.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 Rnub/BFl86CWBaBgZ7QGaTLRhvYajqSieGXSAOWidS430fx/ZBk4HHmeFaIh2WAa5Wzm/dS0jfJ8+yW+k/K2qNOQisUaWoQ+SU44Zym6hhoqCRueIvFPUdy/MHqA+BCbeL65H1DPp/704LqyPFB+RqQnI2W69I4TKdzKLVZiniwH6D/ai9TJTPtFNYDURCa6b51F1+mWTucVCenxV3G5oMmk4LOC/12zR1kspCynj1lY2JgXFFs/qDKCkP93j2BnWiUw+zVpUt3lxu1HgKJCTBI7zwTlVOrsw5fnqBBMi316Auyr8WiXiVIbTId4KNtIsEOe5zxJ3sFwnMlPKuJbJcV/JZViZcNaWuHejUV13mWUozSwK0wQMBwl1K+jSIGm0JP0BuOyOrYv9bzSNDn0gl8T9LuCL1od/ER+6OuSMNhpBlS4dlA/4TUlKnAyoj7fF0fINv2z0+3f1SdcnGoRjfQU5/7wUg+eX+Jg02qsNrqeD/q7kofBpqXuxliEPU71at80wQPfcwucgXDf5FlGzjepQ7nMmuyux/7nzWCK7NL49sfacT0uM7klgfALzB47U14OXYQV1Ya3+si2lFQNC1IRb919NTlA8kQR7j1UwSvG6tKRMzdc3zZlvzmJ7VO4QWfmAtVtXJdR3qcKrXPEA050Rn6Fr92c9zTj7Qb1o6dYGhFoq1b6JCgCWdVxKfvc8Xi2Ma76qaT+P5nW/wPJialA/mQzvK3IaceI6vA2eRdcyywoMeA2OXp2D6sb+fueam+bGEKezIelpPSQ6oSpWjTGWpJFIZL8fGIGDPFSB5+3OUm2IOGMMFq03dlgHuZN
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39850400004)(346002)(376002)(396003)(366004)(91956017)(76116006)(66446008)(186003)(66946007)(26005)(4326008)(84040400003)(33656002)(6486002)(83380400001)(36756003)(66556008)(122000001)(66476007)(64756008)(38100700002)(5660300002)(2616005)(8676002)(6506007)(86362001)(2906002)(6512007)(6916009)(30864003)(71200400001)(53546011)(8936002)(478600001)(54906003)(316002)(2004002)(45980500001)(559001)(579004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?D7AL10g5Pd35ORHW5pqc9gZP1eg8ZUinDBHRCgoLkvh1PLGntJ3aSbLWV4ht?=
 =?us-ascii?Q?ydbEXZPmGKpociew08YPTAf5dgP/LU5r8efGYpLL5HRUaJiDRGUvt1RjP4o7?=
 =?us-ascii?Q?YFaMGjDQst/vBp9SGCeGpMRoxsEbt/pCLlDO9dJ+gmM41E9e/qX11GSaBsZu?=
 =?us-ascii?Q?OENZipbB9v9reqIRn0P8edocaZ1GeWOVZPKGABumagw61EQFrVv0zNOgse0z?=
 =?us-ascii?Q?AIjyvgvR2tvbl58gjeXoSLgO59y8RPm5Att1/YL478aGIiAxu7E8aGGs3v/P?=
 =?us-ascii?Q?WOUbPJyAqFdoVteKyqCFh4fkB6SCV2IOigclaomMekTWm+WD6VN1KEBnjeNF?=
 =?us-ascii?Q?O+TogoNBM3iRNjrC73QFcqsX9kTApKWV8c+7jaNF8y2v/F5vExyhJ0Jbu03f?=
 =?us-ascii?Q?qy3lcWQGPUky9X2fo5XZ7qTsvU2LrNHzI6cLPb3yUhcdLMQ9S2drNMFZjBbA?=
 =?us-ascii?Q?tKQd4SQX3O41U2wOGIE6i/zdLojs3YDw5p1ay8ceqG0kuX3QtNvOF1kZY5tk?=
 =?us-ascii?Q?yY1ZA9mPGyJMAFss0SdnzaMkNUKGeaCHMPd30HGfL+PEJpUA8Uc1vsG3D1zR?=
 =?us-ascii?Q?MLUHATjeltHg2QijO0ZwflU967E5efuA607HlJ4odEsV+efzOGbosjnxdBkm?=
 =?us-ascii?Q?qwSjD7qmWecAFiZOP4BkhlvaTVnsY3zivwMQT14ICP2dQ+jcs6gMxdNW3YQl?=
 =?us-ascii?Q?2ql2b7Dq+b/mf9IAKz2w/bjUnP8l7Mok1xAQapayMjvTlZrZOsbqefRPI6xV?=
 =?us-ascii?Q?te9DDe8nt2XCZ+hsIFEnTjlmzmrNiY8SvUJHbyOBa+tqDQe798f/W2Tmfy8X?=
 =?us-ascii?Q?Ny8oFCTtnN5c+GStaHv69bQQgcSmrD41RM3Dbz8DAI1C5an6zqRwDVzr0ng8?=
 =?us-ascii?Q?C3uv2OvLqKeEi/Zsuozd9mKKmRY2DKh+sPvG8y76WuzQYf5ELFf0HEzRB6JJ?=
 =?us-ascii?Q?J2JCKdrZmLUwsDMp3/sMK1aPk+q37ERlO0GTzOzM7au3ug8wG7k/TyOBxDfE?=
 =?us-ascii?Q?if1FoT6eMgNbzj+OPTMYvMl9vpTq54+JmvvDBeiE4i0VI8x0dB6zzpRLH+2b?=
 =?us-ascii?Q?xyqmeobIxkYpTwOJKBfQajY/yBpP4xQeG0cWJH1iq+vYT8+1Va8uyqYeh1HS?=
 =?us-ascii?Q?EyeOpxBmzMiCFP4io8itHehkmg17bo5S+7B3HAjvecTWvUAXsqHsjBlhnUWP?=
 =?us-ascii?Q?HJ+jp034nm4thLbLP45MqumM8uKNGySQjarjvuO2HJ1eA+iVa2tafN/MzyWV?=
 =?us-ascii?Q?eG4bPiLWqHSJwYir1iK4fsDLBZew8ohAMWio4G2+RLGE9CK3qPWV0bApEi6f?=
 =?us-ascii?Q?OZoYHTKoRBoHLMfPH2ztFfyr?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="us-ascii"
Content-ID: <A8B63EFE3CB6F74FB744474180D33FAD@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6592
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	d9e0f1af-1e1c-4e88-6693-08d94522d8e5
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	4cEHgMljyiy/0c52+BqAAN7UgG81tAT/qmIwtjkFei9HM9/bZylh9kCj4v4mv4+WEG99e3QBD9xqNxVVMKURy5VhIn3Ktu1CtoEf968A/E7SYNNbqFCvbwDcKCi1+4LuFBVDsOMvIOguL+/AefkXP5MdZz6y6XaA26bPZNQwzX1/C4Q6Io53N/9ZBbfRt3XpG6PsIAhNaXGU+DZIbdeR2YoFzojo19hzvP3dTKyEXzcOtiHtBVAiXO1PQaKkzGT/c1XQaLMvsL6usAoMu2ZyHBYitxbOL8skohfF/SrgVddPVIjXTq7N75Vjc651PYDidAkSyK2nEF+JCbue1C9KnBkFEvv2/cZBCQdB41hledynQ0zHIitBUJ9n+cdcxSFUpjHMHttYoyZeaGI7QTGGCUSrqLDlAo9Ijgd3HLrAESS5mJn9+CP081rYUU6TC1m/YIB8dmDRj2e36bXyTR8YvA3r0VvkkPNz1f2GtoxOy8W/0BS7v3uQP9Y+DSW36TX8+McmS9XeMlsOlpODQQ0kM+uK1yFBsREfWiW4ZtPbl0UWZAOaGkxi4izdRf5p4QNZWCE9Vsn6JFwXBndUAZZ++MRFa2eeWrEBTN+FL+WbIxEyKF467Q7WZRMMhOanz6tKV4vx17mEY/CbIJHT3h1DpsA6y5ufjPG4RfzO1Ww/Hza9sTL/pOUTp5v8ygEfEblU/vL5lPUzUopxxy0N02/zwVzPgxp6T/t4j1a7Cx+y40710pgrG6lesVLEyjNftO0kILo8mlFQtNk5WQcSQ5gyF1ZJoVtK1KMEX5vWRUAhpGQ3ROXKgW4YOvONRvqmhqfx
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(39860400002)(396003)(376002)(346002)(36840700001)(46966006)(2616005)(53546011)(54906003)(6862004)(82310400003)(84040400003)(33656002)(316002)(26005)(6506007)(70206006)(36756003)(70586007)(30864003)(2906002)(8676002)(47076005)(86362001)(83380400001)(478600001)(6486002)(81166007)(356005)(107886003)(82740400003)(8936002)(336012)(186003)(6512007)(5660300002)(36860700001)(4326008)(2004002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 10:50:56.4558
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 285c781c-960a-49c5-f080-08d94522ed73
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB2083

Hi Julien,


> On 12 Jul 2021, at 10:36, Julien Grall <julien@xen.org> wrote:
>=20
>=20
>=20
> On 29/06/2021 18:08, Bertrand Marquis wrote:
>> Import structures declared in Linux file arch/arm64/kernel/cpufeature.c
>> and import the required types.
>> Current code has been imported from Linux 5.13-rc5 (Commit ID
>> cd1245d75ce93b8fd206f4b34eb58bcfe156d5e9)
>> Those structure will be used to sanitize the cpu features available to
>> the ones availble on all cores of a system even if we are on an
>> heterogeneous platform (from example a big/LITTLE).
>> For each feature field of all ID registers, those structures define what
>> is the safest value and if we can allow to have different values in
>> different cores.
>> This patch is introducing Linux code without any changes to it.
>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>> ---
>>  xen/arch/arm/arm64/Makefile      |   1 +
>>  xen/arch/arm/arm64/cpusanitize.c | 494 +++++++++++++++++++++++++++++++
>>  2 files changed, 495 insertions(+)
>>  create mode 100644 xen/arch/arm/arm64/cpusanitize.c
>> diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile
>> index 40642ff574..c626990185 100644
>> --- a/xen/arch/arm/arm64/Makefile
>> +++ b/xen/arch/arm/arm64/Makefile
>> @@ -1,6 +1,7 @@
>>  obj-y +=3D lib/
>>    obj-y +=3D cache.o
>> +obj-y +=3D cpusanitize.o
>=20
> Looking at the code, I don't think this cpusanitize.c would build after t=
his patch. To allow bisection, this line would need to move when the file c=
an build.

You are right. I will push the Makefile change to the next patch.

>=20
>>  obj-$(CONFIG_HARDEN_BRANCH_PREDICTOR) +=3D bpi.o
>>  obj-$(CONFIG_EARLY_PRINTK) +=3D debug.o
>>  obj-y +=3D domctl.o
>> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpusa=
nitize.c
>> new file mode 100644
>> index 0000000000..4cc8378c14
>> --- /dev/null
>> +++ b/xen/arch/arm/arm64/cpusanitize.c
>=20
> Any reason to not stick with the Linux name?

File in linux is named cpufeature.c and we already have a file cpufeature.c=
 in arch/arm so I wanted to prevent clashes.
As this is anyway in arm64 subdirectory the clash does not really exist so =
I will rename the file to cpufeature.c.

>=20
>> @@ -0,0 +1,494 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * Sanitize CPU feature definitions
>> + *
>> + * Copyright (C) 2021 Arm Ltd.
>> + * based on code from the Linux kernel, which is:
>> + *  Copyright (C) 2015 ARM Ltd.
>=20
> Linux has a large comment explaining the goal of the file. I think it is =
worth to keep it for Xen.

Ok

>=20
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program.  If not, see <http://www.gnu.org/licenses/>=
.
>=20
> This is a redundant with the SPDX tag above. Please get rid of one of the=
m.

Ok I will keep just the SPDX and copyrights.


>=20
>> + */
>> +
>> +#include <xen/types.h>
>> +#include <asm/sysregs.h>
>> +#include <asm/cpufeature.h>
>> +
>> +/*
>> + * CPU feature register tracking
>> + *
>> + * The safe value of a CPUID feature field is dependent on the implicat=
ions
>> + * of the values assigned to it by the architecture. Based on the relat=
ionship
>> + * between the values, the features are classified into 3 types - LOWER=
_SAFE,
>> + * HIGHER_SAFE and EXACT.
>> + *
>> + * The lowest value of all the CPUs is chosen for LOWER_SAFE and highes=
t
>> + * for HIGHER_SAFE. It is expected that all CPUs have the same value fo=
r
>> + * a field when EXACT is specified, failing which, the safe value speci=
fied
>> + * in the table is chosen.
>> + */
>> +
>> +enum ftr_type {
>> +    FTR_EXACT,               /* Use a predefined safe value */
>> +    FTR_LOWER_SAFE,          /* Smaller value is safe */
>> +    FTR_HIGHER_SAFE,         /* Bigger value is safe */
>> +    FTR_HIGHER_OR_ZERO_SAFE, /* Bigger value is safe, but 0 is biggest =
*/
>> +};
> Please use the Linux coding style to stay consistent with the rest of the=
 file. However, unless there is a reason to, I would prefer if the definiti=
on are in a separate header like Linux did.

Ok, I will apply the linux coding style to the whole file.

>=20
>> +
>> +#define FTR_STRICT      true    /* SANITY check strict matching require=
d */
>> +#define FTR_NONSTRICT   false   /* SANITY check ignored */
>> +
>> +#define FTR_SIGNED      true    /* Value should be treated as signed */
>> +#define FTR_UNSIGNED    false   /* Value should be treated as unsigned =
*/
>> +
>> +#define FTR_VISIBLE true    /* Feature visible to the user space */
>> +#define FTR_HIDDEN  false   /* Feature is hidden from the user */
>> +
>> +#define FTR_VISIBLE_IF_IS_ENABLED(config)       \
>> +    (IS_ENABLED(config) ? FTR_VISIBLE : FTR_HIDDEN)
>> +
>> +struct arm64_ftr_bits {
>> +    bool    sign;   /* Value is signed ? */
>> +    bool    visible;
>> +    bool    strict; /* CPU Sanity check: strict matching required ? */
>> +    enum ftr_type   type;
>> +    u8      shift;
>> +    u8      width;
>> +    s64     safe_val; /* safe value for FTR_EXACT features */
>> +};
>> +
>> +/*
>> + * NOTE: The following structures are imported directly from Linux kern=
el and
>> + * should be kept in sync.
>> + * The current version has been imported from arch/arm64/kernel/cpufeat=
ure.c
>> + *  from kernel version 5.13-rc5
>> + */
>=20
> It feels a bit odd to add this comment in the middle of the definition. I=
t would be better to move it close to the copyright.

Ok.

>=20
>> +
>> +#define __ARM64_FTR_BITS(SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, S=
AFE_VAL) \
>> +	{						\
>> +		.sign =3D SIGNED,				\
>> +		.visible =3D VISIBLE,			\
>> +		.strict =3D STRICT,			\
>> +		.type =3D TYPE,				\
>> +		.shift =3D SHIFT,				\
>> +		.width =3D WIDTH,				\
>> +		.safe_val =3D SAFE_VAL,			\
>> +	}
>> +
>> +/* Define a feature with unsigned values */
>> +#define ARM64_FTR_BITS(VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
>> +	__ARM64_FTR_BITS(FTR_UNSIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SA=
FE_VAL)
>> +
>> +/* Define a feature with a signed value */
>> +#define S_ARM64_FTR_BITS(VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL)=
 \
>> +	__ARM64_FTR_BITS(FTR_SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE=
_VAL)
>> +
>> +#define ARM64_FTR_END					\
>> +	{						\
>> +		.width =3D 0,				\
>> +	}
>> +
>> +static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);
>=20
> This function is not defined in the code you import.

I imported the block I am interested in from Linux and I am filtering it in=
 the
Next patch where I remove those function prototypes.

This was to allow easier update of the code.

Should I filter directly when importing linux code then ?

>=20
>> +
>> +static bool __system_matches_cap(unsigned int n);
>=20
> Ditto.

Cheers
Bertrand

>=20
>> +
>> +/*
>> + * NOTE: Any changes to the visibility of features should be kept in
>> + * sync with the documentation of the CPU feature register ABI.
>> + */
>> +static const struct arm64_ftr_bits ftr_id_aa64isar0[] =3D {
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_R=
NDR_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_TL=
B_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_T=
S_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_F=
HM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_D=
P_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_S=
M4_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_S=
M3_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_S=
HA3_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_R=
DM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_A=
TOMICS_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_C=
RC32_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_S=
HA2_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_S=
HA1_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR0_A=
ES_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64isar1[] =3D {
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_I=
8MM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_D=
GH_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_B=
F16_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SP=
ECRES_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_S=
B_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_F=
RINTTS_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPI_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPA_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_L=
RCPC_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_F=
CMA_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_J=
SCVT_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
>> +		       FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_API_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
>> +		       FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_APA_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_D=
PB_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64pfr0[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
CSV3_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
CSV2_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_DI=
T_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
AMU_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_MPA=
M_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
SEL2_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +				   FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_SVE_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_RAS=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_GIC=
_SHIFT, 4, 0),
>> +	S_ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
ASIMD_SHIFT, 4, ID_AA64PFR0_ASIMD_NI),
>> +	S_ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
FP_SHIFT, 4, ID_AA64PFR0_FP_NI),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
EL3_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
EL2_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
EL1_SHIFT, 4, ID_AA64PFR0_EL1_64BIT_ONLY),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_=
EL0_SHIFT, 4, ID_AA64PFR0_EL0_64BIT_ONLY),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64pfr1[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_MPA=
MFRAC_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_RAS=
FRAC_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_MTE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_MTE_SHIFT, 4, ID_AA64P=
FR1_MTE_NI),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR1=
_SSBS_SHIFT, 4, ID_AA64PFR1_SSBS_PSTATE_NI),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_BTI),
>> +				    FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR1_BT_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64zfr0[] =3D {
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_F64MM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_F32MM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_I8MM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BF16_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
>> +		       FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64mmfr0[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_EC=
V_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_FG=
T_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_EX=
S_SHIFT, 4, 0),
>> +	/*
>> +	 * Page size not being supported at Stage-2 is not fatal. You
>> +	 * just give up KVM if PAGE_SIZE isn't supported there. Go fix
>> +	 * your favourite nesting hypervisor.
>> +	 *
>> +	 * There is a small corner case where the hypervisor explicitly
>> +	 * advertises a given granule size at Stage-2 (value 2) on some
>> +	 * vCPUs, and uses the fallback to Stage-1 (value 0) for other
>> +	 * vCPUs. Although this is not forbidden by the architecture, it
>> +	 * indicates that the hypervisor is being silly (or buggy).
>> +	 *
>> +	 * We make no effort to cope with this and pretend that if these
>> +	 * fields are inconsistent across vCPUs, then it isn't worth
>> +	 * trying to bring KVM up.
>> +	 */
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRA=
N4_2_SHIFT, 4, 1),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRA=
N64_2_SHIFT, 4, 1),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRA=
N16_2_SHIFT, 4, 1),
>> +	/*
>> +	 * We already refuse to boot CPUs that don't support our configured
>> +	 * page size, so we can only detect mismatches for a page size other
>> +	 * than the one we're currently using. Unfortunately, SoCs like this
>> +	 * exist in the wild so, even though we don't like it, we'll have to g=
o
>> +	 * along with it and treat them as non-strict.
>> +	 */
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMF=
R0_TGRAN4_SHIFT, 4, ID_AA64MMFR0_TGRAN4_NI),
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMF=
R0_TGRAN64_SHIFT, 4, ID_AA64MMFR0_TGRAN64_NI),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0=
_TGRAN16_SHIFT, 4, ID_AA64MMFR0_TGRAN16_NI),
>> +
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_BI=
GENDEL0_SHIFT, 4, 0),
>> +	/* Linux shouldn't care about secure memory */
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0=
_SNSMEM_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_BI=
GENDEL_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR0_AS=
ID_SHIFT, 4, 0),
>> +	/*
>> +	 * Differing PARange is fine as long as all peripherals and memory are=
 mapped
>> +	 * within the minimum PARange of all CPUs
>> +	 */
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR0=
_PARANGE_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64mmfr1[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_ET=
S_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_TW=
ED_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_XN=
X_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_AA64MMFR1_S=
PECSEI_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_PA=
N_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_LO=
R_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_HP=
D_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_VH=
E_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_VM=
IDBITS_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_HA=
DBS_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64mmfr2[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR2=
_E0PD_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_EV=
T_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_BB=
M_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_TT=
L_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_FW=
B_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_ID=
S_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_A=
T_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_ST=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_NV=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_CC=
IDX_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_LV=
A_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR2=
_IESB_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_LS=
M_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_UA=
O_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR2_CN=
P_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_ctr[] =3D {
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 =
*/
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT,=
 1, 1),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT,=
 1, 1),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_C=
WG_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_E=
RG_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_S=
HIFT, 4, 1),
>> +	/*
>> +	 * Linux can handle differing I-cache policies. Userspace JITs will
>> +	 * make use of *minLine.
>> +	 * If we have differing I-cache policies, report it as the weakest - V=
IPT.
>> +	 */
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, =
2, ICACHE_POLICY_VIPT),	/* L1Ip */
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_S=
HIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static struct arm64_ftr_override __ro_after_init no_override =3D { };
>> +
>> +struct arm64_ftr_reg arm64_ftr_reg_ctrel0 =3D {
>> +	.name		=3D "SYS_CTR_EL0",
>> +	.ftr_bits	=3D ftr_ctr,
>> +	.override	=3D &no_override,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_mmfr0[] =3D {
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_INNE=
RSHR_SHIFT, 4, 0xf),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_FCSE_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_MMFR0_AUX=
REG_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_TCM_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_SHAREL=
VL_SHIFT, 4, 0),
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_OUTE=
RSHR_SHIFT, 4, 0xf),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_PMSA_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_VMSA_S=
HIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_aa64dfr0[] =3D {
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_D=
OUBLELOCK_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR0_=
PMSVER_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_CTX=
_CMPS_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_WRP=
S_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR0_BRP=
S_SHIFT, 4, 0),
>> +	/*
>> +	 * We can instantiate multiple PMU instances with different levels
>> +	 * of support.
>> +	 */
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64DFR0_PMU=
VER_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64DFR0_DEBUGVER=
_SHIFT, 4, 0x6),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_mvfr2[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR2_FPMISC_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR2_SIMDMISC_=
SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_dczid[] =3D {
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, DCZID_DZP_SHIFT, 1,=
 1),
>> +	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, DCZID_BS_SHIFT=
, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_isar0[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DIVIDE=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DEBUG_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_COPROC=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_CMPBRA=
NCH_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_BITFIE=
LD_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_BITCOU=
NT_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_SWAP_S=
HIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_isar5[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_RDM_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_CRC32_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA2_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA1_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_AES_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SEVL_S=
HIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_mmfr4[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_EVT_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_CCIDX_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_LSM_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_HPDS_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_CNP_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_XNX_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR4_AC2_SH=
IFT, 4, 0),
>> +
>> +	/*
>> +	 * SpecSEI =3D 1 indicates that the PE might generate an SError on an
>> +	 * external abort on speculative read. It is safe to assume that an
>> +	 * SError might be generated than it will not be. Hence it has been
>> +	 * classified as FTR_HIGHER_SAFE.
>> +	 */
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_MMFR4_SPECS=
EI_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_isar4[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_SWP_FR=
AC_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_PSR_M_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_SYNCH_=
PRIM_FRAC_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_BARRIE=
R_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_SMC_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_WRITEB=
ACK_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_WITHSH=
IFTS_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR4_UNPRIV=
_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_mmfr5[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR5_ETS_SH=
IFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_isar6[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_I8MM_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_BF16_S=
HIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_SPECRE=
S_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_SB_SHI=
FT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_FHM_SH=
IFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_DP_SHI=
FT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR6_JSCVT_=
SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_pfr0[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_DIT_SHI=
FT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_PFR0_CSV2=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE3_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE2_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE1_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR0_STATE0_=
SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_pfr1[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_GIC_SHI=
FT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_VIRT_FR=
AC_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_SEC_FRA=
C_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_GENTIME=
R_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_VIRTUAL=
IZATION_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_MPROGMO=
D_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_SECURIT=
Y_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_PFR1_PROGMOD=
_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_pfr2[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_PFR2_SSBS=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_PFR2_CSV3=
_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_dfr0[] =3D {
>> +	/* [31:28] TraceFilt */
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_PERFM=
ON_SHIFT, 4, 0xf),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_MPROFDB=
G_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_MMAPTRC=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_COPTRC_=
SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_MMAPDBG=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_COPSDBG=
_SHIFT, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR0_COPDBG_=
SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_id_dfr1[] =3D {
>> +	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_DFR1_MTPMU=
_SHIFT, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_zcr[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE,
>> +		ZCR_ELx_LEN_SHIFT, ZCR_ELx_LEN_SIZE, 0),	/* LEN */
>> +	ARM64_FTR_END,
>> +};
>> +
>> +/*
>> + * Common ftr bits for a 32bit register with all hidden, strict
>> + * attributes, with 4bit feature fields and a default safe value of
>> + * 0. Covers the following 32bit registers:
>> + * id_isar[1-4], id_mmfr[1-3], id_pfr1, mvfr[0-1]
>> + */
>> +static const struct arm64_ftr_bits ftr_generic_32bits[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 28, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 24, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 20, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 16, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 12, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 8, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 4, 4, 0),
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 0, 4, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +/* Table for a single 32bit feature value */
>> +static const struct arm64_ftr_bits ftr_single32[] =3D {
>> +	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, 0, 32, 0),
>> +	ARM64_FTR_END,
>> +};
>> +
>> +static const struct arm64_ftr_bits ftr_raz[] =3D {
>> +	ARM64_FTR_END,
>> +};
>> +
>> +/*
>> + * End of imported linux structures
>> + */
>> +
>=20
> --=20
> Julien Grall



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 10:53:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 10:53:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154500.285486 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tZP-0006jJ-6J; Mon, 12 Jul 2021 10:53:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154500.285486; Mon, 12 Jul 2021 10:53:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tZP-0006jC-3E; Mon, 12 Jul 2021 10:53:51 +0000
Received: by outflank-mailman (input) for mailman id 154500;
 Mon, 12 Jul 2021 10:53:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2tZN-0006j6-Ka
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 10:53:49 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7987c5bb-0b59-41ff-9601-9226955f7269;
 Mon, 12 Jul 2021 10:53:48 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7987c5bb-0b59-41ff-9601-9226955f7269
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626087228;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=TGWOSZFW36I+1wTfbvinRjzRN7QWE80Sw924WPMV/V8=;
  b=ZkFG4f+Zb8bumqYUTzv8BCXKor6/lHO4bMBMmq4Xi0+b5DK4quALSYOt
   o0rUcV9mficqem9vCCdZFxvBhls01nxUZnsb3RzAL0GDuWbVrWo3c4QeX
   vZC3yio4pEssVxV0ZU/pB5vySx6ntadU0qpHVRRz5EhepjMz7e6F/K6Vp
   o=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Y/zBjq4bDdCpLPDRfTg0OLBa5RDI3wsg3PBQnImaTiZ6Hno2DZ/wiH38oKvGpKtpAkNBNqbBsi
 I+/c5BN8/dpqagQSqef79nwOtqeUAry4KDDaJf7CHnHi1oU8inGWL0V2PdQxJuZi+r4ki104J7
 814FvhVDpDtgztqy2TYcihaaFhm4VC9RpcEdzOa2WfAcfbmX+LHDW7tlDV6BE7x6olchgmHGce
 xKcPWmJOeo0qwR8A7BMAvZp/jDCAqupTJXXknOqoWTyaNEp4PfrWW7+Dd390cjNcR7FSdPIXjp
 2tM=
X-SBRS: 5.1
X-MesageID: 49691875
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Pk6sV6j4X1wjUPBb+E7KjxpOkHBQXuIji2hC6mlwRA09TyXPrb
 HLoB1973/JYVcqOU3I9urpBEDtexjhHP1Oj7X5X43PYOC8ghrMEGgK1+LfKlvbcREWndQz6U
 4PScVD4HKbNykcsS5XijPIcOrJYbO8gcKVuds=
X-IronPort-AV: E=Sophos;i="5.84,232,1620705600"; 
   d="scan'208";a="49691875"
Date: Mon, 12 Jul 2021 11:53:44 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>, "Tim
 Deegan" <tim@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 02/31] build: introduce cpp_flags macro
Message-ID: <YOwfOPEd0pdH3N4F@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-3-anthony.perard@citrix.com>
 <1eaf6dcc-1b92-361e-04d2-a172223ae96c@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <1eaf6dcc-1b92-361e-04d2-a172223ae96c@suse.com>

On Wed, Jul 07, 2021 at 04:18:18PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> >  xen/Rules.mk                    | 7 +++++--
> >  xen/arch/x86/mm/Makefile        | 2 +-
> >  xen/arch/x86/mm/hap/Makefile    | 2 +-
> >  xen/arch/x86/mm/shadow/Makefile | 2 +-
> >  4 files changed, 8 insertions(+), 5 deletions(-)
> 
> There are two further uses, one in xen/Makefile and one in
> xen/x86/Makefile. I think both want replacing too, and the
> former suggests you also want to strip -flto alongside -Wa,%.
> I can accept the use in xen/include/Makefile not getting
> touched, as it also removes an -include option at the same
> time.

Sounds good, I'll filter -flto and convert "asm-offsets.s" and
"xen.lds".

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 11:03:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 11:03:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154508.285498 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tiM-0008EN-3c; Mon, 12 Jul 2021 11:03:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154508.285498; Mon, 12 Jul 2021 11:03:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tiL-0008EG-Vy; Mon, 12 Jul 2021 11:03:05 +0000
Received: by outflank-mailman (input) for mailman id 154508;
 Mon, 12 Jul 2021 11:03:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2tiK-0008EA-Uf
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 11:03:04 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 13b568aa-27b3-4e24-87ec-f93db7e88299;
 Mon, 12 Jul 2021 11:03:04 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 13b568aa-27b3-4e24-87ec-f93db7e88299
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626087783;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=MDGf0GOT8MKEQ9BoxBwjqpUYukrI9cs/XR0ewV3rjgI=;
  b=BpfE7znsJvCL0YP5zQSoitxvP2Upv2s+/J2b8cdxWR+jn9L0MVhOhcsY
   Br+AO/pBKz9vuuQbRgILa0gNo6PDUSDGCvpBsXp5YQ7f8a/OqxN50NYkq
   d/Us7CB1hm9IqAhfOdoOkoHlJthxQUrafHhamjUOKWqv8i5H+uNuOIVhn
   8=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: +ZWWVgX8WxgtVXVnKsD9iejoiHigL0gY+lVoXiPUv4Ozx65KWKJnOMqtBahhaBeoQNftFQhp1T
 ThjZr/uiEWIsynxXFrxcyPixhlDlns7YEk4xnwglCugV42heexDBnPNoLjFShCHz9j+k52irBm
 H46p39zRLMtsdcw9n5paZp4UNaCHbueGmgh+ga66QkpZpyk7FNJLMuEHihwDyOu9VBKKlCqhv9
 hlOJ4iTjtHwsepTAb7XHfsalurXhCa2bwlxxtQ9PBXCxV/ofcRxw6afcLTQufr+yhCB31BiSNL
 9Xc=
X-SBRS: 5.1
X-MesageID: 48113017
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:B/pCia880OhYKgafUnpuk+DaI+orL9Y04lQ7vn2YSXRuE/Bws/
 re+8jztCWE7Ar5N0tNpTntAsa9qDbnhPhICOoqTNKftWvdyQiVxehZhOOIqVDd8m/Fh4xgPM
 9bAtFD4bbLbWSS4/yV3DWF
X-IronPort-AV: E=Sophos;i="5.84,232,1620705600"; 
   d="scan'208";a="48113017"
Date: Mon, 12 Jul 2021 12:02:59 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, Roger Pau
 =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>,
	<xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 05/31] build: factorise generation of the linker
 scripts
Message-ID: <YOwhY9yycoMACBGK@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-6-anthony.perard@citrix.com>
 <5a9f0468-7ef6-eebb-cebc-492050ed7e8f@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <5a9f0468-7ef6-eebb-cebc-492050ed7e8f@suse.com>

On Wed, Jul 07, 2021 at 04:25:33PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > In Arm and X86 makefile, generating the linker script is the same, so
> > we can simply have both call the same macro.
> > 
> > We need to add *.lds files into extra-y so that Rules.mk can find the
> > .*.cmd dependency file and load it.
> > 
> > Change made to the command line:
> > - Use cpp_flags macro which simply filter -Wa,% options from $(a_flags).
> > - Added -D__LINKER__ even it is only used by Arm's lds.
> 
> I'm not really happy about this, not the least because the symbol's name
> doesn't fit its purpose (we're not linking, but producing a linker script
> at that stage), but well ...

Also, the leading "__" is probably a bad idea as I think it's reserved?

I'll look at adding creating a patch which would rename that to
LINKER_SCRIPT which seems more appropriate.

> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 11:04:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 11:04:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154514.285509 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tjF-0000Ph-Cr; Mon, 12 Jul 2021 11:04:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154514.285509; Mon, 12 Jul 2021 11:04:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tjF-0000Pa-9L; Mon, 12 Jul 2021 11:04:01 +0000
Received: by outflank-mailman (input) for mailman id 154514;
 Mon, 12 Jul 2021 11:04:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SUz8=ME=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m2tjE-0000PK-36
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 11:04:00 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.15.80]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dbb09620-e300-11eb-86e4-12813bfff9fa;
 Mon, 12 Jul 2021 11:03:59 +0000 (UTC)
Received: from AS8PR04CA0071.eurprd04.prod.outlook.com (2603:10a6:20b:313::16)
 by DB9PR08MB7132.eurprd08.prod.outlook.com (2603:10a6:10:2ca::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Mon, 12 Jul
 2021 11:03:56 +0000
Received: from VE1EUR03FT007.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:313:cafe::1e) by AS8PR04CA0071.outlook.office365.com
 (2603:10a6:20b:313::16) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend
 Transport; Mon, 12 Jul 2021 11:03:56 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT007.mail.protection.outlook.com (10.152.18.114) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Mon, 12 Jul 2021 11:03:55 +0000
Received: ("Tessian outbound 8b91ad1fd5d8:v98");
 Mon, 12 Jul 2021 11:03:55 +0000
Received: from 6819bb5c397f.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 F23ED7BB-39CD-42CC-BB0A-FCFBFE741ECE.1; 
 Mon, 12 Jul 2021 11:03:17 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 6819bb5c397f.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 12 Jul 2021 11:03:17 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PAXPR08MB6704.eurprd08.prod.outlook.com (2603:10a6:102:130::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Mon, 12 Jul
 2021 11:03:09 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%8]) with mapi id 15.20.4308.026; Mon, 12 Jul 2021
 11:03:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dbb09620-e300-11eb-86e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=GGC+gAuQ2833ltizTLXI9PJzrLPwP/h70LyoK5EiFCc=;
 b=Rkk/gEOXqMBtU/SB9YYXxelnAI2hNeQsVuuPPMnwWRqyKk43s+JhzevC57s5L45XgPjJGaI01X8j3lXCItoZy0LGeJZHphbo88Wbb24LfpvdRu+IkIEOM+B4RRbJ0H81nMUMLZlr3y0hDdvh1h91TOTGztl73sIHRKd6i0HffpE=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: e6c66003bacc61d3
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=bfS6IwpB8tZ+9Bx+xqZMr37o9qMbFkEfBL3wfWtwQgAPdlybeMFd1nXxnHjs67qilqwXaoXXVjtLNw1/fE1mEtTTgRBJS63f/5jPuZlxKeaFiGyYQfMI8qT5+OGnq8Ka4ha6D8f9cXs0A2sJbM0PafkTXwmTA+H+GDdFirXC6NTPLZ6GfECS3zCVH0U4jVuRomxxa3eMPBMlLlrlP/5qGCIhjtmi5K0rTfrgPrrsSRh4mc2RGKn5VqOO6kDWoMmGxsFk1tBE/C9n6a4ifWUaJafpIy7w3VkDkRiqwwpTMMv8s4mSiv8KkHRZ/F40Q6W7MCCHOHcGfwsw9ePrAsliQw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=GGC+gAuQ2833ltizTLXI9PJzrLPwP/h70LyoK5EiFCc=;
 b=GoyOHT0AAWTiS20yMgEIKBOAgYr1Z1T8XoA7xPEbfOvyoQmuebxvKRwUeGZnJOd8Oy76p5eAN4Qep2ULkZOmpY0pVsZx31ANqNEif8SvWml7N4TnzdY/EL7PVzHDafTw1fXu9H3dOWNlZ+A/fcOlsOeSFReZKzVfMrlpBh9v4LHtbmDxvyh0urSnSb2nKbo0TwG3LrSxPerSXVOZAXjtA2gd0BPnuBRmvWAJPrF+/um/prrvyboSxeB+u5vgU94vVd733AnXdZrFEPamFYrImgzirB6VmFxudNxwlrD/pLQvm6cDqli75QqvTakK/5R4laXSaeD61m/mqabdfjQwiw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=GGC+gAuQ2833ltizTLXI9PJzrLPwP/h70LyoK5EiFCc=;
 b=Rkk/gEOXqMBtU/SB9YYXxelnAI2hNeQsVuuPPMnwWRqyKk43s+JhzevC57s5L45XgPjJGaI01X8j3lXCItoZy0LGeJZHphbo88Wbb24LfpvdRu+IkIEOM+B4RRbJ0H81nMUMLZlr3y0hDdvh1h91TOTGztl73sIHRKd6i0HffpE=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Jan Beulich
	<jbeulich@suse.com>, Wei Liu <wl@xen.org>
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
Thread-Topic: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
Thread-Index: AQHXbQmqqZ2dUoMblUy//wgHf+AX8qs/M8QAgAANJgA=
Date: Mon, 12 Jul 2021 11:03:09 +0000
Message-ID: <EE203ED0-5FB9-4597-878B-7261C989763F@arm.com>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
 <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
In-Reply-To: <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: c47d82f7-cd03-45af-2074-08d94524bde7
x-ms-traffictypediagnostic: PAXPR08MB6704:|DB9PR08MB7132:
X-Microsoft-Antispam-PRVS:
	<DB9PR08MB7132024341B833F5E1DEA2F59D159@DB9PR08MB7132.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:4125;OLM:4125;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 MIdjqWuiPc6CRSmyYxapSWB760w9L12U97uRJUFyftAq+t9vVB4NIw4kTqjbOSwogjUcnxbqaEzAuXjnpnek+81bdYibwDLdPpQUu1QPmqkSEtLbq9JrBGL3sfITbivAjtP4SNjscLusUgDGp8VvOAdxjKBy5HbWue1GW5YV0VRP7pUkufqYrQPhcDpphYIewxNZyWpHRe1e52HW2Alpx1PlVEuo4FwyNJobDkyvmdHuIUQQGMJ2Ef0b/rSVNUYy1CffN9H0TaxpG3rdWiFi/XmvkV1F2bpJYynKDtjIzTFFBqpHCwB9qCR7puyt2r9o0e/nsNPDbu6BgHIWvQOY9SsgsexybvZgZ0x9VbzjQlD476EV5bLB+ddSG1qdsi/tGofsSGv+rMZZaU5QfY7aMYAz/6Y9SW8F0Tm41CJpWIECDyvRc5mKLI2zRsYShj9Ab/83VwlUoOUW11mmdN5egdE231ypUnlIVDVvHOetS8xp+gmoAiZqEUAxcBkaq6XD4Xfz01ReS+D5dkf/FyzDAK2KsVIGYEZf6OKYf/jHTJcAegyEjAf6+J8TgZPVNT6JwwKf/YxmCP8m93jqkQ+BF7UwrbraR4rdcF3qKcNUupM4Zo0jfpxCizs9hZOA1sfjtSqCr5skYhK5F7/097cPCt8ZI0Es9Lw0+LFa/EvM+DPfgJvzZI+5TRuS2ACsgcBnum2/cjcSlQU/YpgBtUiy9g==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(396003)(346002)(136003)(376002)(39850400004)(36756003)(8936002)(186003)(5660300002)(6916009)(6506007)(38100700002)(6486002)(54906003)(2616005)(8676002)(76116006)(30864003)(53546011)(316002)(478600001)(64756008)(33656002)(66556008)(66476007)(6512007)(26005)(66446008)(122000001)(83380400001)(2906002)(66946007)(86362001)(91956017)(4326008)(71200400001)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?AeiMUlhWuPmqsCvTpzmYeYVfFoE+wsybiggxxUOyimb4uHQoud/fOhz2gTI6?=
 =?us-ascii?Q?Qodk9efP7foI883RXGhvBLNuutvbiftzmumXVCnhx46fjjd0i6rwdiqeJtT5?=
 =?us-ascii?Q?1aBfelzSIdGpQJGSPFx+/8auCfDhI8t3R3yqwSBt0LnbVyOO7Kll2VZ/s194?=
 =?us-ascii?Q?f5WVKke574jnRCk2z1xFJYewe4ses1b+o4raao2FDPZLa0q79sk4kPSoSeOq?=
 =?us-ascii?Q?Uc0A6IbW8EJ8gqxH6NCzs/oQ1xNEOpiAyXbGdc2e3uTW8GV6TmUQkcglEhEk?=
 =?us-ascii?Q?+yxf6gWC/usR+wxT3Ov+vOImRbR7dwghlHvGdvkbtorG41dh/+CqcMBL3lOG?=
 =?us-ascii?Q?P1Aqw1xOYBMObSM1/gP/x3OnzWcLuh+k0dpvQJv+CMWDtEgs52q8xppwSikg?=
 =?us-ascii?Q?hble/tshY5+mhRd79qKTjFACpnCaXMnEqdNEPrlOicw+VFoSnxs1nEB0stmb?=
 =?us-ascii?Q?wAYLA2O8y6sUS3AnU6keDyB/QLMc3afqmAcSJ1Oi4Ku7/WzZnnOwRKtLabwX?=
 =?us-ascii?Q?dcnPajUyWJmFjfJ1MsdPNqv4VdfZ4ir6nbacu2kRUsTZdYR54eaS6pi0ql67?=
 =?us-ascii?Q?vv+vsykTqbPfX4H0GMuA7wxWTXGifyxI5xuJyPy0cFv1D/1sJUh5mRF5zt7I?=
 =?us-ascii?Q?kUwneJGMqSEcNXebR+JVJgXgF0h73oh41pWAuCFwewUY3YLxrOs7b0c505hl?=
 =?us-ascii?Q?6hF7x+oc53CCVO04npLE7hieZF9z1EiR6H0dQjvY8Wi5BjQl5Gni5Ciqsqp3?=
 =?us-ascii?Q?S7R1EgIfoWjOLQV7uehGpR1R+wmMLs+8SYAW0iaoKGvdaB/wEzxfM9HWOVcT?=
 =?us-ascii?Q?Mxd1vCp9uEHMquz5jSSsWNRK4n/aeTHN19b+wmbEBII6pqawYio2xCwnZEDh?=
 =?us-ascii?Q?M6nAuUHJmHRgJSAmPzcCbGuMlx27XFp8tyV9jIoxYMexc2K/zR+FMV/cu9xp?=
 =?us-ascii?Q?DwBOo+5ilg/RXbenuuksL4kZdQvF4kZd8vz2B+o0PdHKD5K+sTV77YrAiUKD?=
 =?us-ascii?Q?8iWnt+piyv1nZmz7LIUTN7uemYqpRQugKhy6ZPSD3cSL311QuibGmOzzf8CQ?=
 =?us-ascii?Q?NBlp7ACHXStj6Am8Nn5h3e1QTL6zL/1nlb65Tv0RAPpJG2YOA7sik6zUQCzS?=
 =?us-ascii?Q?bLLE3uSzAkXJ/PhrPuWwFsiJ8txRDaszpSC87sG16JTRLVeU3C/pDH+dXjmq?=
 =?us-ascii?Q?7LQqiH30ZxegsIDfK8LncWVuXz9+oEfYx5sJICYoW0tE9pLYabWFjrt2LlFn?=
 =?us-ascii?Q?rbMtdjrcXLfPm+bhxVKz+Vr3vy+j1Jh5kypdDLpx6B5JISYJWWZZw2fLKXAa?=
 =?us-ascii?Q?biReNEUvZT7Pz7QJHOi5odC5?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="us-ascii"
Content-ID: <7B07CF8EB04D1F4486B952439B35BAFE@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6704
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT007.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	6157a3d7-ba97-45fc-e584-08d94524a277
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	QrMGfbudJ52n0ZAk3tBcy76RhuIIzXhKozFDUcreozWZ3iONLGnKUHba4BEYOgZEK17YYwJq/CZHbfNyVcIm0Fnov3URpKRu1PprHCQhaA+cQ0gOKeKui7uW2lbjpFfi1mbXapYuEfxN13Iu+KGzD5DrBJd9XcI4b6VqHig35qlQ/AY0XVkVmJ7xqC2w9iVhabGA9urjfAkfYLAuJVpCpjsVEPuSWkBmC0HFfklRURfkh0BTHUX2L6GGw3fBzycNbWzfw4OdsMNFX9zSg254GiJWzhdXWg4AjoFB/fQDtGxh+XKgQEe9KxzJ2cV2YWKWL8n+QiBoDIVorTZde+b06BJehevTeMlDVLSEpg5HpCccVIYRvV7mHC9GpUq2z7lORLDs3kun6U4oGK/qjikUQ8DaHIjbGrBJy4BaktT2loYRo+VD2naO0yLMNQe4dMBljht6jPPNvhCbrP+oDHt5T2YK2RviICKBsllYKsCPMMy/KkqTXj8WRgw2gMSVloN/MPj6E9pMt/xPOAmwj4VSCTZjAZIvWWnmxhDPxvCWCXnvfXdPKMytTYSifsoNH+nrN7tR99jKBKa19dR6dy8ZNFzYqJG7WlL0cD4yvKfFYHeNJAw7pKqKRYcjCmwcE4SlRHRCx0k46xaxOutWjhtHpeHPe/uASBjtcIY3d1N5gZSYRQwGOVONmIxdH33VUVsjabYX5ntFwSWDEm7uyyqiLw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39860400002)(136003)(396003)(376002)(346002)(36840700001)(46966006)(70206006)(2616005)(336012)(36860700001)(82310400003)(54906003)(53546011)(6486002)(6512007)(6506007)(33656002)(70586007)(478600001)(4326008)(8676002)(5660300002)(8936002)(2906002)(316002)(6862004)(26005)(36756003)(186003)(83380400001)(30864003)(47076005)(82740400003)(81166007)(86362001)(356005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 11:03:55.5266
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: c47d82f7-cd03-45af-2074-08d94524bde7
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT007.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7132

Hi Julien,

> On 12 Jul 2021, at 11:16, Julien Grall <julien@xen.org> wrote:
>=20
> Hi Bertrand,
>=20
> On 29/06/2021 18:08, Bertrand Marquis wrote:
>> Define a sanitize_cpu function to be called on secondary cores to
>> sanitize the cpuinfo structure from the boot CPU.
>> The safest value is taken when possible and the system is marked tainted
>> if we encounter values which are incompatible with each other.
>> Call the sanitize_cpu function on all secondary cores and remove the
>> code disabling secondary cores if they are not the same as the boot core
>> as we are now able to handle this use case.
>> This is only supported on arm64 so cpu_sanitize is an empty static
>> inline on arm32.
>> This patch also removes the code imported from Linux that will not be
>> used by Xen.
>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>> ---
>>  xen/arch/arm/arm64/cpusanitize.c | 236 ++++++++++++++++++++++++-------
>>  xen/arch/arm/smpboot.c           |   5 +-
>>  xen/include/asm-arm/cpufeature.h |   9 ++
>>  xen/include/xen/lib.h            |   1 +
>>  4 files changed, 199 insertions(+), 52 deletions(-)
>> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpusa=
nitize.c
>> index 4cc8378c14..744006ca7c 100644
>> --- a/xen/arch/arm/arm64/cpusanitize.c
>> +++ b/xen/arch/arm/arm64/cpusanitize.c
>> @@ -97,10 +97,6 @@ struct arm64_ftr_bits {
>>  		.width =3D 0,				\
>>  	}
>>  -static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);
>> -
>> -static bool __system_matches_cap(unsigned int n);
>> -
>>  /*
>>   * NOTE: Any changes to the visibility of features should be kept in
>>   * sync with the documentation of the CPU feature register ABI.
>> @@ -277,31 +273,6 @@ static const struct arm64_ftr_bits ftr_id_aa64mmfr2=
[] =3D {
>>  	ARM64_FTR_END,
>>  };
>>  -static const struct arm64_ftr_bits ftr_ctr[] =3D {
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 =
*/
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT,=
 1, 1),
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT,=
 1, 1),
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_C=
WG_SHIFT, 4, 0),
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_E=
RG_SHIFT, 4, 0),
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_S=
HIFT, 4, 1),
>> -	/*
>> -	 * Linux can handle differing I-cache policies. Userspace JITs will
>> -	 * make use of *minLine.
>> -	 * If we have differing I-cache policies, report it as the weakest - V=
IPT.
>> -	 */
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, =
2, ICACHE_POLICY_VIPT),	/* L1Ip */
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_S=
HIFT, 4, 0),
>> -	ARM64_FTR_END,
>> -};
>=20
> I don't think this is should be dropped. Xen will need to know the safest=
 cacheline size that can be used for cache maintenance instructions.

I will surround those entries by #if 0 instead

>=20
>> -
>> -static struct arm64_ftr_override __ro_after_init no_override =3D { };
>> -
>> -struct arm64_ftr_reg arm64_ftr_reg_ctrel0 =3D {
>> -	.name		=3D "SYS_CTR_EL0",
>> -	.ftr_bits	=3D ftr_ctr,
>> -	.override	=3D &no_override,
>> -};
>> -
>>  static const struct arm64_ftr_bits ftr_id_mmfr0[] =3D {
>>  	S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_INNE=
RSHR_SHIFT, 4, 0xf),
>>  	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_MMFR0_FCSE_S=
HIFT, 4, 0),
>> @@ -335,12 +306,6 @@ static const struct arm64_ftr_bits ftr_mvfr2[] =3D =
{
>>  	ARM64_FTR_END,
>>  };
>>  -static const struct arm64_ftr_bits ftr_dczid[] =3D {
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, DCZID_DZP_SHIFT, 1,=
 1),
>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, DCZID_BS_SHIFT=
, 4, 0),
>> -	ARM64_FTR_END,
>> -};
>=20
> Why is this dropped?

Same I will keep that with #if 0

>=20
>> -
>>  static const struct arm64_ftr_bits ftr_id_isar0[] =3D {
>>  	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DIVIDE=
_SHIFT, 4, 0),
>>  	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR0_DEBUG_=
SHIFT, 4, 0),
>> @@ -454,12 +419,6 @@ static const struct arm64_ftr_bits ftr_id_dfr1[] =
=3D {
>>  	ARM64_FTR_END,
>>  };
>>  -static const struct arm64_ftr_bits ftr_zcr[] =3D {
>> -	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE,
>> -		ZCR_ELx_LEN_SHIFT, ZCR_ELx_LEN_SIZE, 0),	/* LEN */
>> -	ARM64_FTR_END,
>> -};
>=20
> At some point we will support SVE in Xen. So any reason we would not want=
 to keep the code?

Same I will keep that with #if 0

>=20
>> -
>>  /*
>>   * Common ftr bits for a 32bit register with all hidden, strict
>>   * attributes, with 4bit feature fields and a default safe value of
>> @@ -478,17 +437,192 @@ static const struct arm64_ftr_bits ftr_generic_32=
bits[] =3D {
>>  	ARM64_FTR_END,
>>  };
>>  -/* Table for a single 32bit feature value */
>> -static const struct arm64_ftr_bits ftr_single32[] =3D {
>> -	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, 0, 32, 0),
>> -	ARM64_FTR_END,
>> -};
>> -
>> -static const struct arm64_ftr_bits ftr_raz[] =3D {
>> -	ARM64_FTR_END,
>> -};
>> -
>>  /*
>>   * End of imported linux structures
>>   */
>>  +static inline int __attribute_const__
>> +cpuid_feature_extract_signed_field_width(u64 features, int field, int w=
idth)
>> +{
>> +    return (s64)(features << (64 - width - field)) >> (64 - width);
>> +}
>=20
> Please avoid to mix Xen and Linux coding style in the same file.
>=20
> Also, this function and some others below seems to have been taken as-is =
from Linux. So this should at least be mentionned in the commit message.
>=20
> I would also consider to import them in a separate patch (or maybe in pat=
ch#2) so it is clear this is not "new" code.

I will move those in patch 2 and keep Linux code.

>=20
>> +
>> +static inline int __attribute_const__
>> +cpuid_feature_extract_signed_field(u64 features, int field)
>> +{
>> +    return cpuid_feature_extract_signed_field_width(features, field, 4)=
;
>> +}
>> +
>> +static inline unsigned int __attribute_const__
>> +cpuid_feature_extract_unsigned_field_width(u64 features, int field, int=
 width)
>> +{
>> +    return (u64)(features << (64 - width - field)) >> (64 - width);
>> +}
>> +
>> +static inline unsigned int __attribute_const__
>> +cpuid_feature_extract_unsigned_field(u64 features, int field)
>> +{
>> +    return cpuid_feature_extract_unsigned_field_width(features, field, =
4);
>> +}
>> +
>> +static inline u64 arm64_ftr_mask(const struct arm64_ftr_bits *ftrp)
>> +{
>> +    return (u64)GENMASK(ftrp->shift + ftrp->width - 1, ftrp->shift);
>> +}
>> +
>> +static inline int __attribute_const__
>> +cpuid_feature_extract_field_width(u64 features, int field, int width,
>> +                                  bool sign)
>> +{
>> +    return (sign) ?
>> +        cpuid_feature_extract_signed_field_width(features, field, width=
) :
>> +        cpuid_feature_extract_unsigned_field_width(features, field, wid=
th);
>> +}
>> +
>> +static inline int __attribute_const__
>> +cpuid_feature_extract_field(u64 features, int field, bool sign)
>> +{
>> +    return cpuid_feature_extract_field_width(features, field, 4, sign);
>> +}
>> +
>> +static inline s64 arm64_ftr_value(const struct arm64_ftr_bits *ftrp, u6=
4 val)
>> +{
>> +    return (s64)cpuid_feature_extract_field_width(val, ftrp->shift,
>> +                                                  ftrp->width, ftrp->si=
gn);
>> +}
>> +
>> +static s64 arm64_ftr_safe_value(const struct arm64_ftr_bits *ftrp, s64 =
new,
>> +                                s64 cur)
>> +{
>> +    s64 ret =3D 0;
>> +
>> +    switch ( ftrp->type ) {
>> +    case FTR_EXACT:
>> +        ret =3D ftrp->safe_val;
>> +        break;
>> +    case FTR_LOWER_SAFE:
>> +        ret =3D new < cur ? new : cur;
>> +        break;
>> +    case FTR_HIGHER_OR_ZERO_SAFE:
>> +        if (!cur || !new)
>> +            break;
>> +        fallthrough;
>> +    case FTR_HIGHER_SAFE:
>> +        ret =3D new > cur ? new : cur;
>=20
> We have a macro max() defined in kernel.h.

Right I will use that instead.

>=20
>> +        break;
>> +    default:
>> +        BUG();
>> +    }
>> +
>> +    return ret;
>> +}
>> +
>> +static void sanitize_reg(u64 *cur_reg, u64 new_reg, const char *reg_nam=
e,
>> +                        const struct arm64_ftr_bits *ftrp)
>> +{
>> +    int taint =3D 0;
>> +    u64 old_reg =3D *cur_reg;
>> +
>> +    for ( ; ftrp->width !=3D0 ; ftrp++ )
>> +    {
>> +        u64 mask;
>> +        s64 cur_field =3D arm64_ftr_value(ftrp, *cur_reg);
>> +        s64 new_field =3D arm64_ftr_value(ftrp, new_reg);
>> +
>> +        if ( cur_field =3D=3D new_field )
>> +            continue;
>> +
>> +        if ( ftrp->strict )
>> +            taint =3D 1;
>> +
>> +        mask =3D arm64_ftr_mask(ftrp);
>> +
>> +        *cur_reg &=3D ~mask;
>> +        *cur_reg |=3D (arm64_ftr_safe_value(ftrp, new_field, cur_field)
>> +                    << ftrp->shift) & mask;
>> +    }
>> +
>> +    if ( old_reg !=3D new_reg )
>> +        printk(XENLOG_DEBUG "SANITY DIF: %s 0x%"PRIx64" -> 0x%"PRIx64"\=
n",
>> +               reg_name, old_reg, new_reg);
>> +    if ( old_reg !=3D *cur_reg )
>> +        printk(XENLOG_DEBUG "SANITY FIX: %s 0x%"PRIx64" -> 0x%"PRIx64"\=
n",
>> +               reg_name, old_reg, *cur_reg);
>> +
>> +    if ( taint )
>> +    {
>> +        printk(XENLOG_WARNING "SANITY CHECK: Unexpected variation in %s=
.\n",
>> +                reg_name);
>> +        add_taint(TAINT_CPU_OUT_OF_SPEC);
>> +    }
>> +}
>> +
>> +
>> +/*
>> + * This function should be called on secondary cores to sanitize the bo=
ot cpu
>> + * cpuinfo.
>=20
> Can we renamed boot_cpu_data to system_cpuinfo (or something similar)? Th=
is would make clear this is not only the features for the boot CPU?

Ok I will do that.

>=20
>> + */
>> +void sanitize_cpu(const struct cpuinfo_arm *new)
>=20
> How about naming it to "update_system_features()"?

Ok

>=20
>> +{
>> +
>> +#define SANITIZE_REG(field, num, reg)  \
>> +    sanitize_reg(&boot_cpu_data.field.bits[num], new->field.bits[num], =
\
>> +                 #reg, ftr_##reg)
>> +
>> +#define SANITIZE_ID_REG(field, num, reg)  \
>> +    sanitize_reg(&boot_cpu_data.field.bits[num], new->field.bits[num], =
\
>> +                 #reg, ftr_id_##reg)
>> +
>> +#define SANITIZE_GENERIC_REG(field, num, reg)  \
>> +    sanitize_reg(&boot_cpu_data.field.bits[num], new->field.bits[num], =
\
>> +                 #reg, ftr_generic_32bits)
>> +
>> +    SANITIZE_ID_REG(pfr64, 0, aa64pfr0);
>> +    SANITIZE_ID_REG(pfr64, 1, aa64pfr1);
>> +
>> +    SANITIZE_ID_REG(dbg64, 0, aa64dfr0);
>> +
>> +    /* aux64 x2 */
>> +
>> +    SANITIZE_ID_REG(mm64, 0, aa64mmfr0);
>> +    SANITIZE_ID_REG(mm64, 1, aa64mmfr1);
>> +    SANITIZE_ID_REG(mm64, 2, aa64mmfr2);
>> +
>> +    SANITIZE_ID_REG(isa64, 0, aa64isar0);
>> +    SANITIZE_ID_REG(isa64, 1, aa64isar1);
>> +
>> +    SANITIZE_ID_REG(zfr64, 0, aa64zfr0);
>> +
>> +    if ( cpu_feature64_has_el0_32(&boot_cpu_data) )
>> +    {
>> +        SANITIZE_ID_REG(pfr32, 0, pfr0);
>> +        SANITIZE_ID_REG(pfr32, 1, pfr1);
>> +        SANITIZE_ID_REG(pfr32, 2, pfr2);
>> +
>> +        SANITIZE_ID_REG(dbg32, 0, dfr0);
>> +        SANITIZE_ID_REG(dbg32, 1, dfr1);
>> +
>> +        /* aux32 x1 */
>=20
> What does this comment mean?

Leftover during dev that I should turn in proper comment.
It was there as I am not sanitizing one aux32 register.
Same goes for the comment before for aux64.

I will remove them.

>=20
>> +
>> +        SANITIZE_ID_REG(mm32, 0, mmfr0);
>> +        SANITIZE_GENERIC_REG(mm32, 1, mmfr1);
>> +        SANITIZE_GENERIC_REG(mm32, 2, mmfr2);
>> +        SANITIZE_GENERIC_REG(mm32, 3, mmfr3);
>> +        SANITIZE_ID_REG(mm32, 4, mmfr4);
>> +        SANITIZE_ID_REG(mm32, 5, mmfr5);
>> +
>> +        SANITIZE_ID_REG(isa32, 0, isar0);
>> +        SANITIZE_GENERIC_REG(isa32, 1, isar1);
>> +        SANITIZE_GENERIC_REG(isa32, 2, isar2);
>> +        SANITIZE_GENERIC_REG(isa32, 3, isar3);
>> +        SANITIZE_ID_REG(isa32, 4, isar4);
>> +        SANITIZE_ID_REG(isa32, 5, isar5);
>> +        SANITIZE_ID_REG(isa32, 6, isar6);
>> +
>> +        SANITIZE_GENERIC_REG(mvfr, 0, mvfr0);
>> +        SANITIZE_GENERIC_REG(mvfr, 1, mvfr1);
>> +#ifndef MVFR2_MAYBE_UNDEFINED
>> +        SANITIZE_REG(mvfr, 2, mvfr2);
>> +#endif
>> +    }
>> +}
>> diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
>> index a1ee3146ef..8fdf5e70d3 100644
>> --- a/xen/arch/arm/smpboot.c
>> +++ b/xen/arch/arm/smpboot.c
>> @@ -307,12 +307,14 @@ void start_secondary(void)
>>      set_processor_id(cpuid);
>>        identify_cpu(&current_cpu_data);
>> +    sanitize_cpu(&current_cpu_data);
>>      processor_setup();
>>        init_traps();
>>  +#ifndef CONFIG_ARM_64
>>      /*
>> -     * Currently Xen assumes the platform has only one kind of CPUs.
>> +     * Currently Xen assumes the platform has only one kind of CPUs on =
ARM32.
>>       * This assumption does not hold on big.LITTLE platform and may
>>       * result to instability and insecure platform (unless cpu affinity
>>       * is manually specified for all domains). Better to park them for
>> @@ -328,6 +330,7 @@ void start_secondary(void)
>>                 boot_cpu_data.midr.bits);
>>          stop_cpu();
>>      }
>> +#endif
>>        if ( dcache_line_bytes !=3D read_dcache_line_bytes() )
>>      {
>=20
> Any plan to drop this check?

Yes this should be done as a next patch in the serie once we valeted
The way to go for the base.

>=20
>> diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpuf=
eature.h
>> index ba48db3eac..ad34e55cc8 100644
>> --- a/xen/include/asm-arm/cpufeature.h
>> +++ b/xen/include/asm-arm/cpufeature.h
>> @@ -330,6 +330,15 @@ extern struct cpuinfo_arm boot_cpu_data;
>>    extern void identify_cpu(struct cpuinfo_arm *);
>>  +#ifdef CONFIG_ARM_64
>> +extern void sanitize_cpu(const struct cpuinfo_arm *);
>> +#else
>> +static inline void sanitize_cpu(const struct cpuinfo_arm *cpuinfo)
>> +{
>> +    /* Not supported on arm32 */
>> +}
>> +#endif
>> +
>>  extern struct cpuinfo_arm cpu_data[];
>>  #define current_cpu_data cpu_data[smp_processor_id()]
>>  diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
>> index 1198c7c0b2..c6987973bf 100644
>> --- a/xen/include/xen/lib.h
>> +++ b/xen/include/xen/lib.h
>> @@ -192,6 +192,7 @@ uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c=
);
>>  #define TAINT_ERROR_INJECT              (1u << 2)
>>  #define TAINT_HVM_FEP                   (1u << 3)
>>  #define TAINT_MACHINE_UNSECURE          (1u << 4)
>> +#define TAINT_CPU_OUT_OF_SPEC           (1u << 5)
>=20
> You want to also update at least print_tainted().

Oh yes I will fix that in the next version.

Cheers
Bertrand

>=20
>>  extern unsigned int tainted;
>>  #define TAINT_STRING_MAX_LEN            20
>>  extern char *print_tainted(char *str);
>=20
> --=20
> Julien Grall



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 11:08:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 11:08:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154523.285519 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tnv-0001Eu-3O; Mon, 12 Jul 2021 11:08:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154523.285519; Mon, 12 Jul 2021 11:08:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tnv-0001En-0S; Mon, 12 Jul 2021 11:08:51 +0000
Received: by outflank-mailman (input) for mailman id 154523;
 Mon, 12 Jul 2021 11:08:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2tnt-0001Eh-Tg
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 11:08:49 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 881d88ab-e301-11eb-86e4-12813bfff9fa;
 Mon, 12 Jul 2021 11:08:48 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 881d88ab-e301-11eb-86e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626088128;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=lJUq4Z0u3S96kD1s6DMoESEiQ6//EUE6Tykso2B4kOE=;
  b=C7r7XwxWA9JISTxu+WO9RVaQ/yXC9V2NMMn80ubJqRJKKiQwQRNtMB2d
   DPgAgrKe1YcYaHtevUFdEJUW5O3y26OvtonEMnNOTDDjDPNZmK7aCycZL
   uB6e8SE7fIS1aaXNkTC+Db4rB0dNx61ZtZcko9idmDIylqBxePz+pL2J3
   Q=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: bY4JrQDKTjk3mTik+xtB+spGuvyL1L4MAUTe7ke5+ppupXX9lNziMY5cJ1kEaknG1MVTXunMW1
 1AvE0XyWtLMuxHnd+tr7nqEAUfeqHkWXyyRfwu5jKa/HYSdirN0DUYWwYuR/pIm+dZuPPDCrvw
 KauvP3cd71GaRk8qsq9+D1mcAHKSy+yInxDkt4skbOky53fWOHA0qP9E9Q+FJQ+UTv7paG23bO
 ApqpCPWa/73dZY2j7C8SxdVqkXTYgReD2g8Q7j+62Exeh2wl50IWsAOLAsSlwCJvEodzpVe7H+
 3JM=
X-SBRS: None
X-MesageID: 48049175
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ds4ZrKNxS/SR4MBcTsOjsMiBIKoaSvp037Eqv3oRdfVwSL3+qy
 nOpoV+6faaslossR0b9uxofZPwJ080lqQFhLX5X43SPzUO0VHAROoJgLcKgQeQeREWntQtrJ
 uIGJIfNDSfNzZHsfo=
X-IronPort-AV: E=Sophos;i="5.84,232,1620705600"; 
   d="scan'208";a="48049175"
Date: Mon, 12 Jul 2021 12:08:34 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: <xen-devel@lists.xenproject.org>, Jan Beulich <jbeulich@suse.com>, "George
 Dunlap" <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, "Julien
 Grall" <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: Re: [XEN PATCH v6 03/31] build: use if_changed on built_in.o
Message-ID: <YOwisvhJDI4upgEk@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-4-anthony.perard@citrix.com>
 <9bb04af6-105f-1040-d71e-799497034f2f@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <9bb04af6-105f-1040-d71e-799497034f2f@citrix.com>

On Thu, Jul 08, 2021 at 01:03:46PM +0100, Andrew Cooper wrote:
> On 01/07/2021 15:09, Anthony PERARD wrote:
> > diff --git a/xen/Rules.mk b/xen/Rules.mk
> > index f778058f80a6..6a0cdfde2eed 100644
> > --- a/xen/Rules.mk
> > +++ b/xen/Rules.mk
> > @@ -147,17 +147,22 @@ include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
> >  c_flags += $(CFLAGS-y)
> >  a_flags += $(CFLAGS-y) $(AFLAGS-y)
> >  
> > -built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y)
> > -ifeq ($(strip $(obj-y)),)
> > -	$(CC) $(c_flags) -c -x c /dev/null -o $@
> > -else
> > +quiet_cmd_cc_builtin = LD      $@
> 
> s/LD/CC/

Will fix that.

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 11:13:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 11:13:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154530.285530 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tsS-0002ba-Lv; Mon, 12 Jul 2021 11:13:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154530.285530; Mon, 12 Jul 2021 11:13:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2tsS-0002bT-J8; Mon, 12 Jul 2021 11:13:32 +0000
Received: by outflank-mailman (input) for mailman id 154530;
 Mon, 12 Jul 2021 11:13:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m2tsR-0002bI-0T
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 11:13:31 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2tsM-00048M-UX; Mon, 12 Jul 2021 11:13:26 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m2tsM-000438-NR; Mon, 12 Jul 2021 11:13:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=C+lewWRkDobev4Eti7xPYHfuZPO+uLyxtBqdNI6+DMw=; b=a9VAqO+36t53cXg1lLbpmZsauM
	EcGhohBXcwCcTJu4Sp901FoPPFoiak5ozkypvAQjPzqRjyPtTErQj3/PAfNSP7Zo6Xbrj7CNShP1Y
	K1HbnavaJ2tylK5wfM0IJ+/BjPJ7ddBLVkPrdRiWStwRslWsPB07EnqxpAwCxQxYkRao=;
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
To: Bertrand Marquis <Bertrand.Marquis@arm.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
 <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
 <EE203ED0-5FB9-4597-878B-7261C989763F@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <08d7e35e-6785-9ce9-2e8b-1bbf65e4b47f@xen.org>
Date: Mon, 12 Jul 2021 12:13:24 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <EE203ED0-5FB9-4597-878B-7261C989763F@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 12/07/2021 12:03, Bertrand Marquis wrote:
> Hi Julien,

Hi Bertrand,

>> On 12 Jul 2021, at 11:16, Julien Grall <julien@xen.org> wrote:
>>
>> Hi Bertrand,
>>
>> On 29/06/2021 18:08, Bertrand Marquis wrote:
>>> Define a sanitize_cpu function to be called on secondary cores to
>>> sanitize the cpuinfo structure from the boot CPU.
>>> The safest value is taken when possible and the system is marked tainted
>>> if we encounter values which are incompatible with each other.
>>> Call the sanitize_cpu function on all secondary cores and remove the
>>> code disabling secondary cores if they are not the same as the boot core
>>> as we are now able to handle this use case.
>>> This is only supported on arm64 so cpu_sanitize is an empty static
>>> inline on arm32.
>>> This patch also removes the code imported from Linux that will not be
>>> used by Xen.
>>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>>> ---
>>>   xen/arch/arm/arm64/cpusanitize.c | 236 ++++++++++++++++++++++++-------
>>>   xen/arch/arm/smpboot.c           |   5 +-
>>>   xen/include/asm-arm/cpufeature.h |   9 ++
>>>   xen/include/xen/lib.h            |   1 +
>>>   4 files changed, 199 insertions(+), 52 deletions(-)
>>> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpusanitize.c
>>> index 4cc8378c14..744006ca7c 100644
>>> --- a/xen/arch/arm/arm64/cpusanitize.c
>>> +++ b/xen/arch/arm/arm64/cpusanitize.c
>>> @@ -97,10 +97,6 @@ struct arm64_ftr_bits {
>>>   		.width = 0,				\
>>>   	}
>>>   -static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);
>>> -
>>> -static bool __system_matches_cap(unsigned int n);
>>> -
>>>   /*
>>>    * NOTE: Any changes to the visibility of features should be kept in
>>>    * sync with the documentation of the CPU feature register ABI.
>>> @@ -277,31 +273,6 @@ static const struct arm64_ftr_bits ftr_id_aa64mmfr2[] = {
>>>   	ARM64_FTR_END,
>>>   };
>>>   -static const struct arm64_ftr_bits ftr_ctr[] = {
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1),
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1),
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_CWG_SHIFT, 4, 0),
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_ERG_SHIFT, 4, 0),
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1),
>>> -	/*
>>> -	 * Linux can handle differing I-cache policies. Userspace JITs will
>>> -	 * make use of *minLine.
>>> -	 * If we have differing I-cache policies, report it as the weakest - VIPT.
>>> -	 */
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, 2, ICACHE_POLICY_VIPT),	/* L1Ip */
>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_SHIFT, 4, 0),
>>> -	ARM64_FTR_END,
>>> -};
>>
>> I don't think this is should be dropped. Xen will need to know the safest cacheline size that can be used for cache maintenance instructions.
> 
> I will surround those entries by #if 0 instead

But, why can't this just be sanitized as the other registers? If this is 
just a matter of missing structure in Xen, then we should add one.

The same goes for the other 2 below.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 12:37:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 12:37:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154543.285548 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2vBV-0002Ov-Nm; Mon, 12 Jul 2021 12:37:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154543.285548; Mon, 12 Jul 2021 12:37:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2vBV-0002Oo-JS; Mon, 12 Jul 2021 12:37:17 +0000
Received: by outflank-mailman (input) for mailman id 154543;
 Mon, 12 Jul 2021 12:37:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m2vBT-0002Oi-VY
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 12:37:16 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e25a4aae-e30d-11eb-86e8-12813bfff9fa;
 Mon, 12 Jul 2021 12:37:14 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e25a4aae-e30d-11eb-86e8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626093434;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=k6yCF3T5XWJfLXzW7043PzCL0bWNDFETlXEvaGiXeQI=;
  b=Mx5NngajeUQ+tRhOgCFheSD9bDaaS3a41tbwd8/xlJuNZvi2iQqquAob
   GWHvU/L+DFUNtbSkcorGnEUCKOS0+ndad5V86FE3Nkxg1HWqZzcPgTZVX
   5LQjFXcqa1CDw3zx71Q5xtSuVdx1pTwMluqNab/ATzb3S6NY/LBzbkucK
   w=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: S42uZYb4tjTVEfpJY2qXTLYJT73DZlIDRDo4uXjbiWZkMho3BfINUeu30cveTzvcjbAYu3bauw
 NOKJ9BQQldwWP6ndnvmRmqwd79cUxBC//xbjw5KCzZQSBHJ/BhNuNfCMqjNYqY2pr+bGVJPf2Q
 PVdaOOHdPHzMgR8IbPhdjnbaJwsaG5d4N5TX56/yBKJQylLPesiwul3nL2zLhzk4xAi3UQcs2S
 zmVklq3UAKrH7eV38zdqbPRmcUp/6yUewc0JR8XYCizLhnKzrZDQr6IGEs/zBeJuaDUti+y0fi
 Y34=
X-SBRS: 5.1
X-MesageID: 48438713
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:OVPStaBn4mBiKN7lHemW55DYdb4zR+YMi2TC1yhKKCC9Ffbo7/
 xG/c5rrCMc5wxhO03I9eruBEDEewK5yXcX2/h2AV7BZniFhILAFugLhuGOrwEIWReOkdK1vZ
 0QCJSWY+eRMbEVt6jHCXGDYrMd/OU=
X-IronPort-AV: E=Sophos;i="5.84,232,1620705600"; 
   d="scan'208";a="48438713"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich
	<JBeulich@suse.com>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?=
	<roger.pau@citrix.com>, Wei Liu <wl@xen.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, Bob Eshleman <bobbyeshleman@gmail.com>,
	Alistair Francis <alistair.francis@wdc.com>, Connor Davis
	<connojdavis@gmail.com>, "Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: [PATCH 0.5/6] xen: Implement xen/alternative-call.h for use in common code
Date: Mon, 12 Jul 2021 13:36:31 +0100
Message-ID: <20210712123631.3022-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20210617233918.10095-2-dpsmith@apertussolutions.com>
References: <20210617233918.10095-2-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

The alternative call infrastructure is x86-only for now, but the common iommu
code has a variant and more common code wants to use the infrastructure.

Introduce CONFIG_ALTERNATIVE_CALL and a conditional implemetnation so common
code can use the optimisation when available, without requiring all
architectures to implement no-op stubs.

Write some documentation, which was thus far entirely absent, covering the
requirements for an architecture to implement this optimsiation, and how to
use the infrastructure in general code.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Wei Liu <wl@xen.org>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Julien Grall <julien@xen.org>
CC: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
CC: Bob Eshleman <bobbyeshleman@gmail.com>
CC: Alistair Francis <alistair.francis@wdc.com>
CC: Connor Davis <connojdavis@gmail.com>
CC: Daniel P. Smith <dpsmith@apertussolutions.com>

This is a pre-requisite to "xsm: refactor xsm_ops handling" to avoid breaking
the ARM build.

Build test for the XSM code:

  diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
  index 5eab21e1b168..592074e8f41c 100644
  --- a/xen/xsm/xsm_core.c
  +++ b/xen/xsm/xsm_core.c
  @@ -195,6 +195,16 @@ bool __init has_xsm_magic(paddr_t start)
   }
    #endif

  +#include <xen/alternative-call.h>
  +struct foo {
  +    int (*bar)(void *);
  +} foo __alt_call_maybe_initdata;
  +
  +int test_alternative_call(void)
  +{
  +    return alternative_call(foo.bar, NULL);
  +}
  +
   int __init register_xsm(struct xsm_operations *ops)
    {
         if ( verify(ops) )
---
 xen/arch/x86/Kconfig               |  1 +
 xen/common/Kconfig                 |  3 ++
 xen/include/xen/alternative-call.h | 65 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)
 create mode 100644 xen/include/xen/alternative-call.h

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 9b164db64187..c91cdd83dc8a 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -9,6 +9,7 @@ config X86
 	select ARCH_SUPPORTS_INT128
 	select CORE_PARKING
 	select HAS_ALTERNATIVE
+	select ALTERNATIVE_CALL
 	select HAS_COMPAT
 	select HAS_CPUFREQ
 	select HAS_EHCI
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 0ddd18e11af3..1594ce4e7313 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -25,6 +25,9 @@ config GRANT_TABLE
 config HAS_ALTERNATIVE
 	bool
 
+config ALTERNATIVE_CALL
+	bool
+
 config HAS_COMPAT
 	bool
 
diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alternative-call.h
new file mode 100644
index 000000000000..11d1c2606818
--- /dev/null
+++ b/xen/include/xen/alternative-call.h
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef XEN_ALTERNATIVE_CALL
+#define XEN_ALTERNATIVE_CALL
+
+/*
+ * Some subsystems in Xen may have multiple implementions, which can be
+ * resolved to a single implementation at boot time.  By default, this will
+ * result in the use of function pointers.
+ *
+ * Some architectures may have mechanisms for dynamically modifying .text.
+ * Using this mechnaism, function pointers can be converted to direct calls
+ * which are typically more efficient at runtime.
+ *
+ * For architectures to support:
+ *
+ * - Implement alternative_{,v}call() in asm/alternative.h.  Code generation
+ *   requirements are to emit a function pointer call at build time, and stash
+ *   enough metadata to simplify the call at boot once the implementation has
+ *   been resolved.
+ * - Select ALTERNATIVE_CALL in Kconfig.
+ *
+ * To use:
+ *
+ * Consider the following simplified example.
+ *
+ *  1) struct foo_ops __alt_call_maybe_initdata ops;
+ *
+ *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops = { ... };
+ *     struct foo_ops __alt_call_maybe_initconst foo_b_ops = { ... };
+ *
+ *     void foo_init(void)
+ *     {
+ *         ...
+ *         if ( use_impl_a )
+ *             ops = *foo_a_ops;
+ *         else if ( use_impl_b )
+ *             ops = *foo_b_ops;
+ *         ...
+ *     }
+ *
+ *  3) alternative_call(ops.bar, ...);
+ *
+ * There needs to a single ops object (1) which will eventually contain the
+ * function pointers.  This should be populated in foo's init() function (2)
+ * by one of the available implementations.  To call functions, use
+ * alternative_{,v}call() referencing the main ops object (3).
+ */
+
+#ifdef CONFIG_ALTERNATIVE_CALL
+
+#include <asm/alternative.h>
+
+#define __alt_call_maybe_initdata  __initdata
+#define __alt_call_maybe_initconst __initconst
+
+#else
+
+#define alternative_call(func, args...)  (func)(args)
+#define alternative_vcall(func, args...) (func)(args)
+
+#define __alt_call_maybe_initdata
+#define __alt_call_maybe_initconst
+
+#endif /* !CONFIG_ALTERNATIVE_CALL */
+#endif /* XEN_ALTERNATIVE_CALL */
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 12:49:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 12:49:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154550.285558 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2vND-0003xO-QU; Mon, 12 Jul 2021 12:49:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154550.285558; Mon, 12 Jul 2021 12:49:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2vND-0003xH-Na; Mon, 12 Jul 2021 12:49:23 +0000
Received: by outflank-mailman (input) for mailman id 154550;
 Mon, 12 Jul 2021 12:49:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2vNB-0003x9-TZ
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 12:49:21 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 93809bc0-e30f-11eb-86e8-12813bfff9fa;
 Mon, 12 Jul 2021 12:49:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 93809bc0-e30f-11eb-86e8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626094160;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=oM74VD8l8XOPg3/eEybFck4wjl/ovZD5q3idvb/NzRI=;
  b=TXZRHXVvDyZ0Hn+5T1dCfCLPUuLSExZrydAzF5viUBYhYokbjMQ+AqQU
   Zu7PQI2MrhYK8vohzlUs2wK9DVRQ5S/wyMtTrAf8wNCFsJEgRw3C683YU
   XxLSZMyHJCPe+ccJfGNx7/YjNoPZeTmHB4GILJK6YWb5BymYk9L2i5Mi0
   g=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: oKsT2lLZY3nNM1eeJ8Q/FszhjtyMX765Bhr8p2+87MorSaP/cl+d3HvydRXYm7TfF7cvqUZw3u
 9reLguJfwWNOy3N6bCBdt4aM7Kp1KYgNYoCZ56DHfeU4nGFLI2ywOxsn3KQu708YoCtkZHdpRn
 q8QfDKHB8CGcBHHNbWH6d6X+k56oQ7GeVMay3yatontqxSAtlg8fZu1ZTCafu4ohKNGOGaAdXZ
 XZd4JrMzAooTC+GTJ/Gnkd2ep/FUxO3XgLjpP/DKkbPKbhvYMc5ogHrcCSALcmQg8L8jxQ2qBX
 bzk=
X-SBRS: 5.1
X-MesageID: 48056604
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:uMzOu6BXjgiU9krlHemu55DYdb4zR+YMi2TC1yhKKCC9Vvbo8P
 xG/c5rsSMc5wx8ZJhNo7+90ey7MBXhHP1OkOws1NWZLWrbUQKTRekIh+bfKn/bak/DH4ZmpN
 5dmsNFaOEYY2IVsfrH
X-IronPort-AV: E=Sophos;i="5.84,232,1620705600"; 
   d="scan'208";a="48056604"
Date: Mon, 12 Jul 2021 13:49:15 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>, "Tim
 Deegan" <tim@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 06/31] x86/mm: avoid building multiple .o from a
 single .c file
Message-ID: <YOw6S4uJ4hF6/P3y@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-7-anthony.perard@citrix.com>
 <73b924a9-dd69-7cc8-acf6-e4ae746c244c@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <73b924a9-dd69-7cc8-acf6-e4ae746c244c@suse.com>

On Wed, Jul 07, 2021 at 04:45:11PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> >  xen/Makefile                            | 11 -----------
> >  xen/Rules.mk                            |  2 +-
> >  xen/arch/x86/mm/Makefile                |  9 ---------
> >  xen/arch/x86/mm/guest_walk.c            |  3 ---
> >  xen/arch/x86/mm/guest_walk_2.c          |  2 ++
> >  xen/arch/x86/mm/guest_walk_3.c          |  2 ++
> >  xen/arch/x86/mm/guest_walk_4.c          |  2 ++
> >  xen/arch/x86/mm/hap/Makefile            |  9 ---------
> >  xen/arch/x86/mm/hap/guest_walk.c        |  3 ---
> >  xen/arch/x86/mm/hap/guest_walk_2level.c |  2 ++
> >  xen/arch/x86/mm/hap/guest_walk_3level.c |  2 ++
> >  xen/arch/x86/mm/hap/guest_walk_4level.c |  2 ++
> 
> Is there a particular reason you've kept the "level" in these three
> file names? Preferably with them shortened (and ideally dashes used
> everywhere in the new file names instead of underscores)

I had no reason to rename them. (Also, renaming them makes the patch
bigger ;-) as we would rename the objects files.)

But I can rename as part of the patch. Should I rename all of them (mm
hap and shadow) to "guest-walk-$level.c" ? Or just "guest-$level.c" like
in shadow/ ? On the other hand, it would probably be helpful to have the same
basename for both the source and the .c that includes the source (e.g.
"guest_walk.c" and "guest_walk_2.c" have "guest_walk" in common). So if
we were to replace underscores by dashes, we should probably rename
"guest_walk.c" to "guest-walk.c" as well.

So I'll remove the "level" from the filenames in hap/ to start with in
an update to this patch, it it worth it to do more that that?

> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 13:57:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 13:57:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154565.285581 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2wQe-0002Gi-SS; Mon, 12 Jul 2021 13:57:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154565.285581; Mon, 12 Jul 2021 13:57:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2wQe-0002Gb-PU; Mon, 12 Jul 2021 13:57:00 +0000
Received: by outflank-mailman (input) for mailman id 154565;
 Mon, 12 Jul 2021 13:56:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=p/tL=ME=kernel.org=will@srs-us1.protection.inumbo.net>)
 id 1m2wQc-0002GV-MK
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 13:56:58 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b905b8e8-b7c3-4c29-b8d1-447ab9edba85;
 Mon, 12 Jul 2021 13:56:57 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0A31561003;
 Mon, 12 Jul 2021 13:56:48 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b905b8e8-b7c3-4c29-b8d1-447ab9edba85
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626098216;
	bh=KqwO5Vj/j6Fq4TmXSaTqESu5yHRQzrkv3vVFfvNbMGY=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=apLKxQ3ase69s99n1r/hg6FOeb+BIYvcXeks3TH0kXFsiV4vt4JUCfZRcjNqqJoI+
	 C/PtbYfC7V6I9+tFs23xYS40pB1IE1Ru0GO/sR7kIL+zLBxUujKnwvKpXUPJuSJZEH
	 W/rAB9EgGt57/FadwbxksE14xUlBKeyWZI/Wnb4Nnt0t5RD8RNJlUOkSuzegkOaEqs
	 Qc6OK9PK6WVdefs+A+PDuKLzETeUU+bVabgaTyboguU6s7wHGEC28+izJWHslIy77f
	 yr0fKTdfH84fcYgWwvMeJ8lGvcnMqQz4hxapleBU2sKhQTn0GZErsyzP3AbO0nm6/5
	 eLx4kI3jlwL/w==
Date: Mon, 12 Jul 2021 14:56:45 +0100
From: Will Deacon <will@kernel.org>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Christoph Hellwig <hch@lst.de>, Robin Murphy <robin.murphy@arm.com>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, benh@kernel.crashing.org,
	joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>,
	Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
	maarten.lankhorst@linux.intel.com, airlied@linux.ie,
	Dan Williams <dan.j.williams@intel.com>,
	linuxppc-dev@lists.ozlabs.org, jani.nikula@linux.intel.com,
	Nathan Chancellor <nathan@kernel.org>,
	Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
	Bjorn Helgaas <bhelgaas@google.com>,
	Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	jgross@suse.com, Nicolas Boichat <drinkcat@chromium.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Qian Cai <quic_qiancai@quicinc.com>,
	lkml <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
	Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <20210712135645.GA28881@willie-the-truck>
References: <0f7bd903-e309-94a0-21d7-f0e8e9546018@arm.com>
 <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <YORsr0h7u5l9DZwh@char.us.oracle.com>
 <20210706165720.GC20750@willie-the-truck>
 <YOSMDZmtfXEKerpf@char.us.oracle.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <YOSMDZmtfXEKerpf@char.us.oracle.com>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Tue, Jul 06, 2021 at 12:59:57PM -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Jul 06, 2021 at 05:57:21PM +0100, Will Deacon wrote:
> > On Tue, Jul 06, 2021 at 10:46:07AM -0400, Konrad Rzeszutek Wilk wrote:
> > > On Tue, Jul 06, 2021 at 04:05:13PM +0200, Christoph Hellwig wrote:
> > > > On Tue, Jul 06, 2021 at 03:01:04PM +0100, Robin Murphy wrote:
> > > > > FWIW I was pondering the question of whether to do something along those 
> > > > > lines or just scrap the default assignment entirely, so since I hadn't got 
> > > > > round to saying that I've gone ahead and hacked up the alternative 
> > > > > (similarly untested) for comparison :)
> > > > >
> > > > > TBH I'm still not sure which one I prefer...
> > > > 
> > > > Claire did implement something like your suggestion originally, but
> > > > I don't really like it as it doesn't scale for adding multiple global
> > > > pools, e.g. for the 64-bit addressable one for the various encrypted
> > > > secure guest schemes.
> > > 
> > > Couple of things:
> > >  - I am not pushing to Linus the Claire's patchset until we have a
> > >    resolution on this. I hope you all agree that is a sensible way
> > >    forward as much as I hate doing that.
> > 
> > Sure, it's a pity but we could clearly use a bit more time to get these
> > just right and we've run out of time for 5.14.
> > 
> > I think the main question I have is how would you like to see patches for
> > 5.15? i.e. as patches on top of devel/for-linus-5.14 or something else?
> 
> Yes that would be perfect. If there are any dependencies on the rc1, I
> can rebase it on top of that.

Yes, please, rebasing would be very helpful. The broader rework of
'io_tlb_default_mem' is going to conflict quite badly otherwise.

Cheers,

Will


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 14:19:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 14:19:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154572.285593 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2wmU-0004if-Pf; Mon, 12 Jul 2021 14:19:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154572.285593; Mon, 12 Jul 2021 14:19:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2wmU-0004iY-MT; Mon, 12 Jul 2021 14:19:34 +0000
Received: by outflank-mailman (input) for mailman id 154572;
 Mon, 12 Jul 2021 14:19:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2wmU-0004iO-42; Mon, 12 Jul 2021 14:19:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2wmT-0007GE-S4; Mon, 12 Jul 2021 14:19:33 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2wmT-0004DO-KG; Mon, 12 Jul 2021 14:19:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2wmT-0000wB-Jj; Mon, 12 Jul 2021 14:19:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LdOcLwDx3aIxsNx88/waX5JENfoZB+Sdp7ynOLowPz0=; b=qRwgMjLaAZ6YBMmCsVD33Kle93
	IzBivCRUYf7Gzv04G7Qctv/c4kOxWLGukRq4tJgc9He8Nx3m7549O64ezhHxFT8vu6Rn5eTjKZlA9
	TQTCzFL0F3dMD3G44im+2+sWz4EI2976IZmrKfcJ+bljQBFI+z+rmGFFkxfZbZHjpJz8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163602-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163602: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 14:19:33 +0000

flight 163602 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163602/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    3 days
Failing since        163480  2021-07-09 16:08:01 Z    2 days   17 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    2 days   16 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 14:35:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 14:35:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154581.285607 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2x1r-00075Q-BH; Mon, 12 Jul 2021 14:35:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154581.285607; Mon, 12 Jul 2021 14:35:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2x1r-00075J-7w; Mon, 12 Jul 2021 14:35:27 +0000
Received: by outflank-mailman (input) for mailman id 154581;
 Mon, 12 Jul 2021 14:35:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2x1p-00075A-PB
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 14:35:26 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 647a1cf2-e31e-11eb-86ee-12813bfff9fa;
 Mon, 12 Jul 2021 14:35:24 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 647a1cf2-e31e-11eb-86ee-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626100524;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=IkPkydloPVJe8qtxGhVv8kkIxThqfSTkhZ5cBVnB4MQ=;
  b=BoaBMUlOySEYgQmriAMnJXh89iYFhz8O8jqTJdro0DSlCwojCn8Vq4Jg
   k2XmWBcdGBK4J7VpoUNKYjvmKmZ15aRL934YnYfo3/FN1I6xk7/zMoKt5
   IW5YFDJp88KAfJfUb5A+a5J8lXkf9lw0JdC/h/9EE344gKCHDGNvdOYeu
   0=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: /H15ZIHrqPax3rtyH9+BJF5cIyPNLlOHesyC2rXS18ZSh1YUG31MVA8GtNDBEmiwMRVp9JkncT
 9lnY4bvcj/kwXfmjIR9R95AwwyrjFhd+T/lbRqsV+XpewcCVhOjOp6pkHpgMq8meyK8b3kVNEI
 7Rtmwu4gYb6NzFz+0+ipn6KsjbL8olEAXPBIok2dj94qYbjh1G7WvBgyo+n8BLw5fVRylzUCAw
 G/ZKAX2CQsNmPGZ7J4sXA2XQm8Hla2M4CEMOMEvejXAsu83js0KpGA/UtUXR+n8imnAg6OVqoy
 jXY=
X-SBRS: 5.1
X-MesageID: 47771900
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:cxwA46sR2UW2DmtSTiIOCifV7skDZdV00zEX/kB9WHVpm6uj5q
 KTdZUgpHzJYVkqNU3I9ertBEDiexPhHPxOj7X5VI3KNGKNhILBFvAH0WKI+Vzd8kPFmdK1rp
 0QFpRDNA==
X-IronPort-AV: E=Sophos;i="5.84,234,1620705600"; 
   d="scan'208";a="47771900"
Date: Mon, 12 Jul 2021 15:35:20 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 07/31] build,include: rework compat-build-source.py
Message-ID: <YOxTKHCQDSs2mHG8@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-8-anthony.perard@citrix.com>
 <3b7b6366-c138-3e92-3a9b-640fcf949b15@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <3b7b6366-c138-3e92-3a9b-640fcf949b15@suse.com>

On Wed, Jul 07, 2021 at 04:58:29PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > Improvement are:
> > - give the path to xlat.lst as argument
> > - include `grep -v` in compat-build-source.py script, we don't need to
> >   write this in several scripted language.
> > 
> > Also remove dependency on Makefile as the file generation doesn't
> > depend on it anymore.
> 
> Did it before any more?

Kind of, yes, there is "grep -v" that makes the Makefile part of the
script that generates the target.

> In the subsequent patch I can see more of
> a reason to drop the dependency, but neither there nor here I'm
> really convinced: In general I think every generate file would
> better depend on the makefile containing the rule used for its
> building, as a change to that rule means the target wants
> rebuilding.

Does that mean that nearly every single targets should depends on a
"Makefile" or on "Rules.mk" ? :-)

As for the current target "compat/%.c", with this patch applied, the
only few things that the content of the file depends on is the script,
the first dependency, and "xlat.lst" (also a dependency). So the
Makefile doesn't play a role into what get's into the target, the
"mkdir" and the "mv" don't really matter. If the rule where to be
changed in a way that changed the content of the target, that would be
wrong in my opinion, the change should be done in the script.
If someone wanted to rewrite the script in a different language and thus
renaming the script, that would be fine too as make would notice that
the new script is newer that the target (as the file for the script as
just been created).

But, I guess we could start to use the "if_changed" macro here to
detected rule changes.

I really don't like when a target depends on a "Makefile" because that
means the target gets rebuilt for unrelated reason so I'd like to avoid
dependency on it when possible.

> Therefore for the moment ...
>
> > Acked-by: Jan Beulich <jbeulich@suse.com>
> 
> ... this holds only with the dependency kept in place. But I'll
> be happy to get convinced otherwise.

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 14:42:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 14:42:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154587.285617 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2x8U-000086-06; Mon, 12 Jul 2021 14:42:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154587.285617; Mon, 12 Jul 2021 14:42:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2x8T-00007z-TX; Mon, 12 Jul 2021 14:42:17 +0000
Received: by outflank-mailman (input) for mailman id 154587;
 Mon, 12 Jul 2021 14:42:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2x8S-00007s-2k
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 14:42:16 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 59357372-e31f-11eb-86ef-12813bfff9fa;
 Mon, 12 Jul 2021 14:42:15 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 59357372-e31f-11eb-86ef-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626100934;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=AS7ZNg4Tqka4pfg9hSdQfj62jtgn04NDY6RLVqXGxzY=;
  b=THEAcObEv7dC5TeOUYDUkHgG8Z6nP6KBudmq3wDnSnQh1zgY5YyGq+15
   u6N7gxu9Rj7YlOwv+viXzq41roGGMibIJpByFuZBHKU4iudNknKtqPczD
   QFSvRBQN8XlmUMxHWzLZFnpmn13sL0Nm7FfwuITmxRl8AEJs3wtAxVxNl
   8=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: xJBSIDu/M272tH2EVtmo7XuTbnlTvXdeMzC5Zd+KprpuVmJRHeve3SFoI+DuXAfM8wWVQO01GZ
 SojV9fN8yK2j4VZ335TmrS+5I/3tl8RCleiiM/Bss5plEFePzCOVUk88aozMubVnkMcanLuXWz
 2ZcEHf1GGM/aWFgOVxRKg9O36B6FOJHjwfa6yq6k9yMvb6SHcaBH+EvtsgKjvhwn8Qcgz6so2F
 GoLKJ8f+2CMXe2s0xF0iy1QgO1B/+MonjI/cwFFgZ8ZmrkRkFwktbTe3m7JMDpzw6Ccg4AP9tA
 zl0=
X-SBRS: 5.1
X-MesageID: 48069256
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Pqk1Zq9v4cMdceO96Mtuk+AuI+orL9Y04lQ7vn2ZKSY5TiVXra
 CTdZUgpHnJYVMqMk3I9uruBEDtex3hHNtOkOss1NSZLW7bUQmTXeJfBOLZqlWNJ8S9zJ856U
 4JScND4bbLfDxHZKjBgTVRE7wbsaa6GKLDv5ah85+6JzsaGp2J7G1Ce3am+lUdfng+OXKgfq
 Dsm/auoVCbCAwqR/X+PFYpdc7ZqebGkZr3CCR2eyLOuGG1/EiVAKeRKWnj4isj
X-IronPort-AV: E=Sophos;i="5.84,234,1620705600"; 
   d="scan'208";a="48069256"
Date: Mon, 12 Jul 2021 15:42:10 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 09/31] build: clean "lib.a"
Message-ID: <YOxUwpjwRZBlP1xB@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-10-anthony.perard@citrix.com>
 <bb2c21cc-b801-6d94-5762-7f9e35793998@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <bb2c21cc-b801-6d94-5762-7f9e35793998@suse.com>

On Wed, Jul 07, 2021 at 05:03:12PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Hmm, I was clearly under the impression (or at least assuming)
> that $(targets) would be included in what gets cleaned by the
> general rule.

Unfortunately, that not true for two reasons, the first is that `make
clean` doesn't actually remove anything from $(targets), but that could
be changed as Linux does remove files listed in $(targets). The second is
that `make clean` doesn't actually use anything from "Rules.mk" and
doesn't include it, so when running `make clean`, "lib.a" is never in
$(targets).

> Acked-by: Jan Beulich <jbeulich@suse.com>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 14:54:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 14:54:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154593.285628 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2xK8-0001lS-2Y; Mon, 12 Jul 2021 14:54:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154593.285628; Mon, 12 Jul 2021 14:54:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2xK7-0001lL-VZ; Mon, 12 Jul 2021 14:54:19 +0000
Received: by outflank-mailman (input) for mailman id 154593;
 Mon, 12 Jul 2021 14:54:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2xK7-0001lF-EG
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 14:54:19 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08401b6e-e321-11eb-86ef-12813bfff9fa;
 Mon, 12 Jul 2021 14:54:18 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08401b6e-e321-11eb-86ef-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626101657;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=mlp4vXboFWNjT2ndWvNd8eo+Kao87TBHZbzIe22ZgyM=;
  b=LTgo4HQKRNW4H/45+PQT+W+vBAh6VOztLEBTk+6Sv37eabUc1n0gI77/
   wzn3qtqmzDx9143poXpKNKTG8bzS4Kjk9cime7RCCJIx1AH/UuYmZ4Khp
   uJOpIlz02gMjgKZdPjXZOZHkrxqu/REkNoBDTd9hCfarfZZbja4jch9Q4
   g=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: JPB299ONwkUGzCZHFfcalILyp5qTFYkS6lFBvF5YknLdZuFQVr86u+fydN373RQu/gdXrMXd9c
 HTrAiKKLGq4RLi2mfJRj8vTjFmZl0gT59RJ7kTItM6nE99wOEvLfnbKPmBKKMivCFusw+Dharj
 rThOX5JG1lILA7A7RnrhS75FzJfrkKz5BEcgAhF/5A4S+VfRZJuOntVJRFstvW7QJ01vLooZmQ
 g7E6ZiumAWq5wOdsdatkYfAeMUF+UuHyLvVd3k/3vl2KBbbJKsxnhl3180DXbyNJLWQvGhCuGQ
 xG4=
X-SBRS: 5.1
X-MesageID: 47773444
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:BcS2Y6Oi7cX4A8BcTsOjsMiBIKoaSvp037Eqv3oRdfVwSL3+qy
 nOpoV+6faaslossR0b9uxofZPwJ080lqQFhLX5X43SPzUO0VHAROoJgLcKgQeQeREWntQtrJ
 uIGJIfNDSfNzZHsfo=
X-IronPort-AV: E=Sophos;i="5.84,234,1620705600"; 
   d="scan'208";a="47773444"
Date: Mon, 12 Jul 2021 15:54:14 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 11/31] build: fix clean targets when subdir-y is
 used
Message-ID: <YOxXljEDXDTWpD1H@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-12-anthony.perard@citrix.com>
 <ecdf93e1-ad03-9257-4d97-a1532878b873@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <ecdf93e1-ad03-9257-4d97-a1532878b873@suse.com>

On Wed, Jul 07, 2021 at 05:15:44PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > The make variable $(subdir-y) isn't used yet but will be in a
> > following patch. Anything in $(subdir-y) doesn't to have a '/' as
> > suffix as we already now it's a directory.
> > 
> > Rework the rules so that it doesn't matter whether there is a '/' or
> > not. It also mimic more closely to the way Linux's Kbuild descend in
> > subdirectories.
> > 
> > FORCE phony target isn't needed anymore running clean, so it can be
> > removed.
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks.

> > --- a/xen/scripts/Makefile.clean
> > +++ b/xen/scripts/Makefile.clean
> > @@ -12,19 +12,18 @@ include Makefile
> >  # Figure out what we need to clean from the various variables
> >  # ==========================================================================
> >  subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
> > -              $(filter %/, $(obj-y) $(obj-n) $(obj-))
> > +              $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
> 
> Isn't this a normalization which also wants doing in xen/Rules.mk for
> subdir-y? Or perhaps this is part of one of the subsequent patches
> already?

Indeed, a similar change is done as part of
    build: build everything from the root dir, use obj=$subdir

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 15:22:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 15:22:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154603.285651 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2xlC-0005EA-Eq; Mon, 12 Jul 2021 15:22:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154603.285651; Mon, 12 Jul 2021 15:22:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2xlC-0005E3-Bk; Mon, 12 Jul 2021 15:22:18 +0000
Received: by outflank-mailman (input) for mailman id 154603;
 Mon, 12 Jul 2021 15:22:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2xlA-0005Dw-PE
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 15:22:16 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d1e120bd-e286-43c5-98c1-4fbf908f60bb;
 Mon, 12 Jul 2021 15:22:15 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d1e120bd-e286-43c5-98c1-4fbf908f60bb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626103335;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=OqzM52hAuO0JMLI/f2YPIKbXHI3aQoZ29E+wY6ZE+Zk=;
  b=EQpI/l6RadLXO1crTfraxNUDIduv13qm10EZ5VorDF12GI5zGH72itxJ
   zivXYTjKwIgI9w2lG9uTcBT7i90UWr2593kzwbcfx2Z7NGZnA3PxJ6yzO
   ZjSXg2gsiOLNosMp705ERoFkXtHCaZcxtZ1bj25PAxQ1RenID9JhJtUic
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: oLmyHTcK2Tb5AHkx9L2hkNnM8SumIBKOdhJJOWewB3tbjVseW5Gl7FeH8JcXkoNp61PJsFAB++
 dvJEmVNLcrk6Va/3ECS3onqr1QEc7+1EMP5uo5MqZWLrlnBBgykW79Fslweg+76A9V2ciMkpcq
 K7viZPNioyWhKKzvRiHeKun0eTvKEhAP1y/CTZ/rbma8Qd0NinJ00iBZ0BcLOZBqjVih1ntqXB
 SLj2b+5OfZK+zV1j3XUwZ9TmufcZ7aQy6pO6z2aSB9oUGouu1CJqruEF9Yx95lrJxNhZ1eW0cR
 7wM=
X-SBRS: 5.1
X-MesageID: 48137041
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:sQIWoaCrozRAy8LlHemu55DYdb4zR+YMi2TC1yhKKCC9Vvbo8P
 xG/c5rsSMc5wx8ZJhNo7+90ey7MBXhHP1OkOws1NWZLWrbUQKTRekIh+bfKn/bak/DH4ZmpN
 5dmsNFaOEYY2IVsfrH
X-IronPort-AV: E=Sophos;i="5.84,234,1620705600"; 
   d="scan'208";a="48137041"
Date: Mon, 12 Jul 2021 16:22:11 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 12/31] build: use subdir-y in test/Makefile
Message-ID: <YOxeI1Bn1nxNMjb2@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-13-anthony.perard@citrix.com>
 <b93fcbc5-8b4f-7d17-7d0a-cd2cbf6fd2fe@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <b93fcbc5-8b4f-7d17-7d0a-cd2cbf6fd2fe@suse.com>

On Wed, Jul 07, 2021 at 05:26:13PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > --- a/xen/test/Makefile
> > +++ b/xen/test/Makefile
> > @@ -4,15 +4,10 @@ tests all: build
> >  
> >  ifneq ($(XEN_TARGET_ARCH),x86_32)
> >  # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
> > -SUBDIRS += livepatch
> > +subdir-y += livepatch
> >  endif
> 
> As per xen/Rules.mk having
> 
> subdir-y := $(subdir-y) $(filter %/, $(obj-y))
> obj-y    := $(patsubst %/, %/built_in.o, $(obj-y))
> ...
> subdir-obj-y := $(filter %/built_in.o, $(obj-y))
> 
> this will result in building of livepatch/built_in.o afaict. Is
> this an intended but benign side effect?

Actually, nothing in Rules.mk is using $(subdir-y) other than updating
it with possible subdir from $(obj-y).
Recursion into a subdir only happen if it is listed in $(obj-y) and thus
should be part of a built_in.o. Rules.mk doesn't have a mean to recurs
otherwise.

So nothing is actually going to try to build livepatch/build_in.o due to
$(subdir-y).

> >  install build subtree-force-update uninstall: %:
> > -	set -e; for s in $(SUBDIRS); do \
> > +	set -e; for s in $(subdir-y); do \
> >  		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
> >  	done
> > -
> > -clean::
> > -	set -e; for s in $(SUBDIRS); do \
> > -		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $@; \
> > -	done
> 
> And then why can't the generic recursion rule in xen/Rules.mk
> not also be used for the "build" target? (I guess "install" and
> "uninstall" need to remain separate, and don't think I know what
> "subtree-force-update" is about.)

There's some more changed in a later patch[1] to Rules.mk which would
make it possible to remove the need for a "build" target and I actually
remove the "build" target as well as the "subtree-force-update" target.
Some more changes in tests/livepatch/ are done in patch[2] which
actually allow to remove the "build" target.

    [1] build: build everything from the root dir, use obj=$subdir
    [2] build: rework test/livepatch/Makefile

I think the "subtree-force-update" target as to do with having the same
logic to deal with $(SUBDIRS) as the logic in tools/ and the top
makefile, but might not have been actually hooked up.

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 15:49:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 15:49:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154609.285662 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2yBG-0007tc-HR; Mon, 12 Jul 2021 15:49:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154609.285662; Mon, 12 Jul 2021 15:49:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2yBG-0007tV-EP; Mon, 12 Jul 2021 15:49:14 +0000
Received: by outflank-mailman (input) for mailman id 154609;
 Mon, 12 Jul 2021 15:49:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2yBE-0007tK-LF; Mon, 12 Jul 2021 15:49:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2yBE-0000KL-Ch; Mon, 12 Jul 2021 15:49:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2yBE-00084v-1u; Mon, 12 Jul 2021 15:49:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2yBE-0000KC-0n; Mon, 12 Jul 2021 15:49:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=EfJ/DBvI+ylnzNxQNPPrdqYcZw76jRUaNIG4dDl/SOU=; b=ylxJH5RwXCydPplpal06+N5hx4
	Q19M5SQyMpwd2JQEG2E1CiGNHg7zKRaOvnUZYMZvpJVqt0/9eyQZ/2nPJwEv6lDQXbc3kVf7RpMAn
	yD11f5gp0K1ofcLzjKvxzdGZipKXepjrZ+BFLGl3yPoiFbCkwR/l+/TFNwMJZoEXA8Xo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163594-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163594: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-shadow:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-amd64:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 15:49:12 +0000

flight 163594 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163594/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-shadow   22 guest-start/debian.repeat  fail pass in 163568
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 20 guest-start/debianhvm.repeat fail pass in 163568

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    3 days
Testing same since   163478  2021-07-09 15:23:45 Z    3 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   fail    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 16:21:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 16:21:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154626.285686 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2ygS-0004Mb-FH; Mon, 12 Jul 2021 16:21:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154626.285686; Mon, 12 Jul 2021 16:21:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2ygS-0004MU-CN; Mon, 12 Jul 2021 16:21:28 +0000
Received: by outflank-mailman (input) for mailman id 154626;
 Mon, 12 Jul 2021 16:21:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2ygR-0004MO-P8
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 16:21:27 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 34b9795e-e32d-11eb-86f0-12813bfff9fa;
 Mon, 12 Jul 2021 16:21:26 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 34b9795e-e32d-11eb-86f0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626106886;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=+f+/RKfGGq3vzgHiXU9QeyQquC+hZBnGdwCm8vZIaeU=;
  b=fjZUS2EK7jSEyYQQ3lsYM6BA01eoQ1NeW+UgOQO+UBQu2tV7r/ceazeY
   Y6yKoES1DyyoQ0jwFnizW5bcUNIPAjk7dxYl25pj7uynhvPUhfPeB7X7g
   d993GemkmcoRhKLyixe9ZloSswnKie1XogoaKFAXh5ThZCLgBq/N8BKEi
   8=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: JHecxpWxKWvBNFzMwxdBD9dPNLx1TBJcMZ3st5F02jjSTEBX7krXTan7krk5/qj+C1gkxhjz6r
 3DWHYQvHr1fGG+yXTpmMOEk6rtE0TZgfDbwnumaQv2rWYhzG0AlKYqOOiJZ7DL6tmTEz0l8zvQ
 1b5c2fYSPv4leLMxWbM5AX7b/eEpfgCIP3FTcyR8sUnsZCRkaFL+qnwzgIX/KM0rHrqvAn6xaw
 91nYCcVZJmGxQhb9JS9rqpyTn6JTxuB4zRVq49ObjKgp0WQuRfH8FB2YMiJ80qGUb5+LEw7jMQ
 Mew=
X-SBRS: 5.1
X-MesageID: 49724044
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:yblBIa7ehEx687yjQQPXwDLXdLJyesId70hD6qkQc3FomwKj9/
 xG/c5rsSMc7Qx6ZJhOo7+90cW7L080lqQFhLX5X43SPzUO0VHARO1fBOPZqAEIcBeOlNK1u5
 0AT0B/YueAcGSTj6zBkXWF+wBL+qj5zEiq792usUuEVWtRGsZdB58SMHfhLqVxLjM2Y6YRJd
 6nyedsgSGvQngTZtTTPAh+YwCSz+e77a4PeHQ9dmYa1DU=
X-IronPort-AV: E=Sophos;i="5.84,234,1620705600"; 
   d="scan'208";a="49724044"
Date: Mon, 12 Jul 2021 17:21:22 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 15/31] build: move make option changes check
 earlier
Message-ID: <YOxsAjsZd1lbkVN4@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-16-anthony.perard@citrix.com>
 <cb5a783f-36d2-fc73-f71c-4a12e5cf6515@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <cb5a783f-36d2-fc73-f71c-4a12e5cf6515@suse.com>

On Wed, Jul 07, 2021 at 05:40:02PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > And thus avoiding checking for those variable over and over again.
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Acked-by: Jan Beulich <jbeulich@suse.com>
> in its present shape since all you do is move existing logic. But I
> wonder if I could talk you into ...
> 
> > +ifneq ($(origin verbose),undefined)
> > +$(error "You must use 'make menuconfig' to enable/disable verbose now.")
> > +endif
> 
> ... doing away with the misleading mentioning of just "menuconfig" here.
> There are various other *config targets, many of which are also suitable
> for the purpose. Personally I've used menuconfig (in Linux) the last
> time perhaps 15 years ago, and hence I have almost forgotten about its
> existence. IOW at the very least I'd see us insert "e.g." everywhere.

Hopefully, no one ever hits those error anymore, it's been 5 years it
seems since the changes has been made.

But I can write instead:
    "You must use e.g. 'make menuconfig' to enable/disable verbose now."
or maybe:
    "You must use Kconfig with e.g. 'make menuconfig' to enable/disable verbose now."
    ?

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 16:30:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 16:30:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154631.285698 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2yon-0005iK-Bq; Mon, 12 Jul 2021 16:30:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154631.285698; Mon, 12 Jul 2021 16:30:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2yon-0005hm-7u; Mon, 12 Jul 2021 16:30:05 +0000
Received: by outflank-mailman (input) for mailman id 154631;
 Mon, 12 Jul 2021 16:30:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SUz8=ME=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m2yom-0005UN-4K
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 16:30:04 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.71]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c3826230-8d16-477f-8a56-63b4147f0459;
 Mon, 12 Jul 2021 16:30:01 +0000 (UTC)
Received: from DB6PR0601CA0035.eurprd06.prod.outlook.com (2603:10a6:4:17::21)
 by AS8PR08MB6773.eurprd08.prod.outlook.com (2603:10a6:20b:392::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Mon, 12 Jul
 2021 16:30:00 +0000
Received: from DB5EUR03FT019.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:17:cafe::9e) by DB6PR0601CA0035.outlook.office365.com
 (2603:10a6:4:17::21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Mon, 12 Jul 2021 16:30:00 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT019.mail.protection.outlook.com (10.152.20.163) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Mon, 12 Jul 2021 16:30:00 +0000
Received: ("Tessian outbound 770f4ae52989:v98");
 Mon, 12 Jul 2021 16:30:00 +0000
Received: from 0f886c8ea683.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 2553A7BD-C831-41ED-850F-9EAD2463B4AB.1; 
 Mon, 12 Jul 2021 16:29:53 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0f886c8ea683.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 12 Jul 2021 16:29:53 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PAXPR08MB6461.eurprd08.prod.outlook.com (2603:10a6:102:153::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Mon, 12 Jul
 2021 16:29:51 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%8]) with mapi id 15.20.4308.026; Mon, 12 Jul 2021
 16:29:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c3826230-8d16-477f-8a56-63b4147f0459
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nDi9gURwFbIpHSQ4Stw2sY27xUAqhSkKVF8aEU/6B0M=;
 b=idUqKYwFh272UDw1If0NbWMiRM8K/XajiZjpPkrVyB/vce+A7iFqnNGfVjeKfMQjy6g98jKD04OPIbPC/ZxkpgPwbjElUQKR5RF+rbuobwGaVOQpgRoUYAKRiyk1csg3RL902Iqx2aOC6UzJmEmOoLtQWoEBLkNZ4XIF11o4JJM=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: e93e0f6662bcc2e9
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=aX9hQCOlFuY/IU8NzDFgSgxxWxFKZa3bfrgaM7mPwGDwh6dwli2Mvhc3OJTDRnDc4x5SDTxG3CtrermrveXnAF1IE4jGCtWTWrpELhFoXQWitVLaYjQU0JlED2mxzftOpt+B0ae9QZuW1IVdIXWpjxGL5Ig+gqGFVlgUQtOFDUqCUYN9FgCE6Fz940DNUcVE5J20Dtjw5xN/dYSrQe2yGBoNzZLlVpY7etuIHrS2PZHDCI+REnv0rK3DJ7X4caHkLvtepznWCKko3A72ykbufe1Dqi8afxrvl3M5KuZWf888vbp0EHBh8aK/XVUPATA9DGICHlF8fxT9IriXiBpj5g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nDi9gURwFbIpHSQ4Stw2sY27xUAqhSkKVF8aEU/6B0M=;
 b=R9IPRPuYKztSVIOuSIZi8yVN/5k/E6V7MbWRrYMfpibtqBNcgNDPcK7sz6XTQTSKsxAJPiBYXPpejxAK6TkCBvvQgT2dBvo+4YK7Kyn6R0zT4Q49lbj4Zz8EPHsFYsKqhrfGBSw54WnQl9isb0MfntrivB2FKsFtetLRNYuhQl+TUCKR/5/rMbmQXZg351Bg01hB0sz5fqBWz7UV6QnvK1QA8EYLL20wSJUicXE7ndWied/f1/ofxL5xLYdAkN53DaIRNq6NYqv8cA8bLCYNfbsJ/SlRxh2narlySwxy3lo+nY9gYHdg1x4iTRW9WMpn3Ed3O61uFmo1q0bCulQ2gw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nDi9gURwFbIpHSQ4Stw2sY27xUAqhSkKVF8aEU/6B0M=;
 b=idUqKYwFh272UDw1If0NbWMiRM8K/XajiZjpPkrVyB/vce+A7iFqnNGfVjeKfMQjy6g98jKD04OPIbPC/ZxkpgPwbjElUQKR5RF+rbuobwGaVOQpgRoUYAKRiyk1csg3RL902Iqx2aOC6UzJmEmOoLtQWoEBLkNZ4XIF11o4JJM=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Jan Beulich
	<jbeulich@suse.com>, Wei Liu <wl@xen.org>
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
Thread-Topic: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
Thread-Index: AQHXbQmqqZ2dUoMblUy//wgHf+AX8qs/M8QAgAANJgCAAALfAIAAWGkA
Date: Mon, 12 Jul 2021 16:29:51 +0000
Message-ID: <D4992248-BED1-4766-8872-1BFEB04068FE@arm.com>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
 <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
 <EE203ED0-5FB9-4597-878B-7261C989763F@arm.com>
 <08d7e35e-6785-9ce9-2e8b-1bbf65e4b47f@xen.org>
In-Reply-To: <08d7e35e-6785-9ce9-2e8b-1bbf65e4b47f@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: e6352720-ce8a-4e5a-5821-08d945524b61
x-ms-traffictypediagnostic: PAXPR08MB6461:|AS8PR08MB6773:
X-Microsoft-Antispam-PRVS:
	<AS8PR08MB677321B29EF8E58EEFD6E7029D159@AS8PR08MB6773.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 319FUu2k3fLWZJfacTlKjPQXYH+0Z0Y95YW1S+7ntBeKbBBz8ayiX9mLT/7x1sXQtoOnO1PJn4SZHk1WRPxr6uuKwBIHAPLXAYlwOfKjl0OOaZA0KO/RsiunV02ofiayBMVS2AcqU68k9nGUPgvclPpg6mxkfMV1C8Kuq19lp99saZrhy3MSho+9FR2UGes9H+kNYcHjSOP9GbZy2TZaFHB16kWq7UjST6oA2RIqsOwyCJH9erCgWplkqm2RdksMiGzBQ/Km6PEF3OstcQuzV/YZqouMmGQ/vkY5WikohgDOczSF4XqF2g9GH1n1rkE9Vq0qIPv8thKUuDpgcZMjtEETQw7wnkR76RaIczVJvP6HnWnfcF9nMsEZQJtaXMlNRCiXYAJZWSuOPkW3vm8BLUhVfTaVYdrullj9Fm71YNmbS8OMqQWDHIuxAAqgnwX8Lg7s+0Uaa+/V4JiIdfEVs8QiOAzJh4hXUhybNNRFAytMJpGrJNacgVNTNgOIb6fMUiXzqtuO/RD40m2sIBzdOVDLjPxOpnZUKxFpd3hcYF8BIbc8uIFQcCYJ8ORAZnDzplnulvQEH0Y3aX/vUeaHQvbq73cKo7kCbt3XYp/0YFzcSpgk2j/6lyb1lheyfXQLKBOVx6YoEU1D0ppmzQ0KMSl+mOXkMCT29SaKIhK53pSYtQD6Qp9MLwb4TTDx2lzKo13FsTHyvz/XLRbsXHLDzw==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(39840400004)(346002)(136003)(376002)(366004)(71200400001)(76116006)(2906002)(91956017)(64756008)(66446008)(6916009)(478600001)(36756003)(5660300002)(2616005)(33656002)(6512007)(122000001)(66476007)(66946007)(66556008)(38100700002)(8936002)(4326008)(186003)(53546011)(6506007)(8676002)(6486002)(316002)(86362001)(54906003)(26005)(83380400001)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?ZjYm7ZE/jE7MX/JhNLNF5R6FxfHARNnyieVA5XDy0YDBK4u3GMdaCmC2KWRN?=
 =?us-ascii?Q?dONwmNeWqOq5+XJ6QNzfMqseBkbD0kqbO04HPBtqphBd9cLYsGYNJ4eKjIfK?=
 =?us-ascii?Q?13dU5eyT3kWk0b9vAGjr5tfK5npapC8j3w5DUp5C+vf7RFfCIYTzkoHEA9Pc?=
 =?us-ascii?Q?1z9NlW6YxkdvN0QxtB8zoai96BeyLFaNCA1pVzcLaGl/c5Dme/lLNoW4sihH?=
 =?us-ascii?Q?NKoviLrJsGMJYvVtKyIBpdi9E3gQr28rkM7n6Jbb51sRCrGzoruyH0mkTPZp?=
 =?us-ascii?Q?CFxfWvMQw5DoO0AHZb1AwgiWRKYd+hdQpTfubg6eg9u/w2G3gbV5OSin1gYj?=
 =?us-ascii?Q?e/tRDZu79E96Ow9bNI5ycFXZBHVDNS3dQ6q9kf265pJFcb3/GrDNAbdPtDhV?=
 =?us-ascii?Q?iqOwhawvcLr6dy2qBq+iiAM475OwRmNbPjjUgLNo0PVR3rhagSy4OhtocGQ6?=
 =?us-ascii?Q?OaIOwj21h/H3VGmq1QQD8KsqXZwAR6p0KbewJyw65+K+cSgpEBhf/IOF2THe?=
 =?us-ascii?Q?ME9VEMUpWQtf9xakpZGmzfLRQrfj0XM6wDzh/zgmYNkzK9BHMBZ1utvrUuFJ?=
 =?us-ascii?Q?sRb/iAC2H/CO7oXbegYoLLwuCR/NLCkKEXQuAFENSsUvE45djMmFdkSnf3Ju?=
 =?us-ascii?Q?zatJTz0PZaOy3GAcNr+VhIQpxx4BhS4qKejyQv6jcXb008oD1kz57WlxpEJZ?=
 =?us-ascii?Q?OwZbw1VN0ztY5fPT09nmqV+RGKNIHMuIa4Fs7OVZGy8dMZdiIbWRanogk+/O?=
 =?us-ascii?Q?Pv+AtJSZS6J08eo51X3fJg98n2XGPHYM9Y8ZUjf/++9b3Ibhi6Q/jxCqtdcG?=
 =?us-ascii?Q?kqlJ47JTxWdQoz0+5pDYFoPEAUbBxtQdthrUKGpjgVpZ9ZXUijFy4g+7GETJ?=
 =?us-ascii?Q?vLkf8GUTu6T9WTlwD/uMtqe2qeASjGzU31QIirqvKf+W0Vxi+hwdtmkUghmQ?=
 =?us-ascii?Q?QzcS53Mnl9BxNasfr2jxKmY/+bvrbnLt6bOfE/yYpB8+LkTqxXipBnmgD99U?=
 =?us-ascii?Q?nWyUsMuHdzbeqFHM/q3+iA1C8bQbr/Hj0kf17gT5OCICm4nFyatWR/pI/R8e?=
 =?us-ascii?Q?ZXniecApowFk+W4jupiXHWUPL7q5J/Q0dVRY0RG6giFrqfcCvYVo0UX9c4JH?=
 =?us-ascii?Q?U1UMmz7t8IRDvW7hDFE211BXERMb11p3SIPpJYXrbh/T3vBC5tbxKCRUElIy?=
 =?us-ascii?Q?w0ItH9XTNGVOfE7dGEGdrLwFh0UIEkDNSlOTL/vkeUQofgC99JEAdgMVlpui?=
 =?us-ascii?Q?bRng0ETv8AeSXoo9rRBQ9pFKkbj9Er/zzfw8IUyP2v9tNez/3xyLcXotCt8E?=
 =?us-ascii?Q?lkKQHGev/g1pG8ogSDttQnLH?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="us-ascii"
Content-ID: <220E4D2AC52D584AA10A5DD677E52EE6@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6461
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT019.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	c817a6a2-942f-4895-eeb5-08d945524607
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Ak0LxnG4Mg10plCEf/wkhJzzEOFOJ5S/oDHg8o86tOUoDsqdr4derksoiaaqUKesqMQFlkmBE8M8AS1elgRlPOc2XPu5Z0jCkGOrBPtB62JNa6muwK2W5r1vOrbqXwNiSl8qDvlayYvX/Xw+u2Blk2sdy+xuMwIQC6oN4fc+vHRq9bTh5aG9ViI/3S7CNRKB1vVNaHAY38C0UPXVaNk2SuOfoQfI2z4kp6M+1/8pfJMeyji9l/9i3GlMuS4bVX05yi0yIu1P9J59n6gX2KE755rFo5lY8Q2Odle4K9DBzfHepwqJRrgG8wHc9pJJbJpXYROIa5NZBvUuJO7uPeLgwR/dpSsQimNQh9zKxULCpxBrtnARb0yHrwyG7p0smW17I6QLx5lg6AnqvCOpYyApS0woOLKukmO0+Qkj+zbiFSLd/KI920TdATVVjdpI4EORS9txkO8qNQv4kvqCRAfZG8OaWDMmS023irjIzE+Y5PZQvkbZRCSkfrNs9y5nOjOO8MajVO4/5Gd/G/yrRcLQLcG2JEa8LKJdTqIvjtLdNHB/dGUyuhDBxQgCAxoHXTFSdjuI/IvTB78e3joRTMukzNWbUXy3/UXjy5v7of18X/wo0UYxm6AcM/VW33F9P3qRGGn9MjjnX7B6NzshZAazbDL4IwjOLDgYBVHw/6PZXFkKIvSTU9xla/z6zG3QU/CM7OTXT8Uk4sa9gTLMZBhBnQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39840400004)(376002)(136003)(396003)(346002)(46966006)(36840700001)(316002)(33656002)(47076005)(4326008)(36756003)(81166007)(186003)(478600001)(82310400003)(54906003)(86362001)(36860700001)(2616005)(83380400001)(5660300002)(2906002)(8936002)(26005)(8676002)(70586007)(53546011)(6506007)(356005)(70206006)(6862004)(336012)(6512007)(6486002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 16:30:00.3861
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: e6352720-ce8a-4e5a-5821-08d945524b61
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT019.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6773

Hi Julien,

> On 12 Jul 2021, at 12:13, Julien Grall <julien@xen.org> wrote:
>=20
>=20
>=20
> On 12/07/2021 12:03, Bertrand Marquis wrote:
>> Hi Julien,
>=20
> Hi Bertrand,
>=20
>>> On 12 Jul 2021, at 11:16, Julien Grall <julien@xen.org> wrote:
>>>=20
>>> Hi Bertrand,
>>>=20
>>> On 29/06/2021 18:08, Bertrand Marquis wrote:
>>>> Define a sanitize_cpu function to be called on secondary cores to
>>>> sanitize the cpuinfo structure from the boot CPU.
>>>> The safest value is taken when possible and the system is marked taint=
ed
>>>> if we encounter values which are incompatible with each other.
>>>> Call the sanitize_cpu function on all secondary cores and remove the
>>>> code disabling secondary cores if they are not the same as the boot co=
re
>>>> as we are now able to handle this use case.
>>>> This is only supported on arm64 so cpu_sanitize is an empty static
>>>> inline on arm32.
>>>> This patch also removes the code imported from Linux that will not be
>>>> used by Xen.
>>>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>>>> ---
>>>>  xen/arch/arm/arm64/cpusanitize.c | 236 ++++++++++++++++++++++++------=
-
>>>>  xen/arch/arm/smpboot.c           |   5 +-
>>>>  xen/include/asm-arm/cpufeature.h |   9 ++
>>>>  xen/include/xen/lib.h            |   1 +
>>>>  4 files changed, 199 insertions(+), 52 deletions(-)
>>>> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpu=
sanitize.c
>>>> index 4cc8378c14..744006ca7c 100644
>>>> --- a/xen/arch/arm/arm64/cpusanitize.c
>>>> +++ b/xen/arch/arm/arm64/cpusanitize.c
>>>> @@ -97,10 +97,6 @@ struct arm64_ftr_bits {
>>>>  		.width =3D 0,				\
>>>>  	}
>>>>  -static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap)=
;
>>>> -
>>>> -static bool __system_matches_cap(unsigned int n);
>>>> -
>>>>  /*
>>>>   * NOTE: Any changes to the visibility of features should be kept in
>>>>   * sync with the documentation of the CPU feature register ABI.
>>>> @@ -277,31 +273,6 @@ static const struct arm64_ftr_bits ftr_id_aa64mmf=
r2[] =3D {
>>>>  	ARM64_FTR_END,
>>>>  };
>>>>  -static const struct arm64_ftr_bits ftr_ctr[] =3D {
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES=
1 */
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIF=
T, 1, 1),
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIF=
T, 1, 1),
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR=
_CWG_SHIFT, 4, 0),
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR=
_ERG_SHIFT, 4, 0),
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE=
_SHIFT, 4, 1),
>>>> -	/*
>>>> -	 * Linux can handle differing I-cache policies. Userspace JITs will
>>>> -	 * make use of *minLine.
>>>> -	 * If we have differing I-cache policies, report it as the weakest -=
 VIPT.
>>>> -	 */
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT=
, 2, ICACHE_POLICY_VIPT),	/* L1Ip */
>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE=
_SHIFT, 4, 0),
>>>> -	ARM64_FTR_END,
>>>> -};
>>>=20
>>> I don't think this is should be dropped. Xen will need to know the safe=
st cacheline size that can be used for cache maintenance instructions.
>> I will surround those entries by #if 0 instead
>=20
> But, why can't this just be sanitized as the other registers? If this is =
just a matter of missing structure in Xen, then we should add one.
>=20
> The same goes for the other 2 below.

The point of the RFC was to validate the way to go and do the base.

Those require changes out of the cpuinfo and are on my todo list to.

Regards
Bertrand

>=20
> Cheers,
>=20
> --=20
> Julien Grall



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 16:32:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 16:32:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154636.285708 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2yrW-0006Xl-Oh; Mon, 12 Jul 2021 16:32:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154636.285708; Mon, 12 Jul 2021 16:32:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2yrW-0006Xe-Lg; Mon, 12 Jul 2021 16:32:54 +0000
Received: by outflank-mailman (input) for mailman id 154636;
 Mon, 12 Jul 2021 16:32:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=SKSD=ME=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m2yrV-0006XY-4Z
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 16:32:53 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d2c77bbe-13ff-4d4f-a893-80180d4e9d5a;
 Mon, 12 Jul 2021 16:32:51 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d2c77bbe-13ff-4d4f-a893-80180d4e9d5a
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626107571;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=QqjednZWiW7Krg0g4ko5oGfOhVausO7FISERS9qFUHM=;
  b=XrPh4FDE9qifJQh0sw8Y2DR0RgM4a0zvxQvRORVBpjizpG5gSRgv+mlH
   hnZo0XIdYFNpO/JH7+NaVQVpqm5gS7dUMlIKLo2itmj64sVen11GieDDX
   G7raHaj6my9zRxGCjkcDP2idpXfpFVP6fMN/p8CTwq5nBBWHTU8R2TAoA
   E=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: SCMWdATDDpfEzRf6O7buMkpv1TprRQxLbNWdQM5/6DL202IqcZMASy0Fk7L5g4TH97zWlhTlbT
 +c0RDVKF50sHCgOJXzr9A9RPssML6Fs5oqj8616c+3BlTUHOf1fvvuAuz7S5Q2FnZCsUkEylXi
 f2CTVp4NUw/O8qQwHZChkD1kkkYCu3Aa16XTEHHrfnuNlco7ix/fWpEYZGCKDq5e3Y5ncSI0/3
 86aFqUV9UcWZ2Ndo16BHFUo+Y7z57p0khSw7kbPSwhVyZfhQ0zd4i0MUpdRk7QTJL8MPeFjNqF
 Z/g=
X-SBRS: 5.1
X-MesageID: 49725095
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:lLzoDKFazmVvpUcApLqEEseALOsnbusQ8zAXPiBKJCC9vPb5qy
 nOpoV+6faQslwssR4b9uxoVJPvfZq+z+8R3WByB8bAYOCOggLBQL2KhbGI/9SKIVydygcy78
 Zdm6gVMqyMMbB55/yKnDVRxbwbsaa6GKPDv5ah8590JzsaDJ2Jd21Ce32m+ksdfnghObMJUK
 Cyy+BgvDSadXEefq2AdwM4t7iqnayzqHr+CyR2fyIa1A==
X-IronPort-AV: E=Sophos;i="5.84,234,1620705600"; 
   d="scan'208";a="49725095"
Date: Mon, 12 Jul 2021 17:32:47 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 17/31] build: convert binfile use to if_changed
Message-ID: <YOxurzTEAfW3I8yU@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-18-anthony.perard@citrix.com>
 <dbb33a01-d54b-d4f3-caf3-5e5544d52095@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <dbb33a01-d54b-d4f3-caf3-5e5544d52095@suse.com>

On Wed, Jul 07, 2021 at 05:48:57PM +0200, Jan Beulich wrote:
> On 01.07.2021 16:09, Anthony PERARD wrote:
> > --- a/xen/common/Makefile
> > +++ b/xen/common/Makefile
> > @@ -80,8 +80,12 @@ config.gz: $(CONF_FILE)
> >  
> >  config_data.o: config.gz
> >  
> > -config_data.S: $(BASEDIR)/tools/binfile
> > -	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
> > +quiet_cmd_binfile = BINFILE $@
> > +cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data
> 
> This is an abuse of $< which I consider overly confusing:
> $(BASEDIR)/tools/binfile is not the input file to the rule. Instead
> the script generates an assembly file "out of thin air", with not
> input files at all. The rule and ...
> 
> > +config_data.S: $(BASEDIR)/tools/binfile FORCE
> 
> ... dependency shouldn't give a different impression. What would
> be nice (without having checked how difficult this might be) would
> be if quiet_cmd_binfile and cmd_binfile could move to xen/Rules.mk
> and merely be used from here (and the other location, where the
> same concern obviously applies).

I've though of having cmd_binfile in Rules.mk, but it's made more
complicated by having a "-i" flag used in flask/.

So one things I've writen was:

config_data.S: $(BASEDIR)/tools/binfile FORCE
       $(call if_changed,binfile,,config.gz xen_config_data)
flask-policy.S: $(BASEDIR)/tools/binfile FORCE
       $(call if_changed,binfile,-i,policy.bin xsm_flask_init_policy)

with:
cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(2) $@ $(3)

I thought this would be confusing, so I avoid it.
But maybe with the lists of flags at the end, it would be better:
   $(call if_changed,binfile,policy.bin xsm_flask_init_policy,-i)

Still want to move cmd_binfile to Rules.mk?

But I can at least spell "tools/binfile" instead of using $<.

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 17:26:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 17:26:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154646.285726 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2zgz-0003Pf-UG; Mon, 12 Jul 2021 17:26:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154646.285726; Mon, 12 Jul 2021 17:26:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m2zgz-0003PY-RL; Mon, 12 Jul 2021 17:26:05 +0000
Received: by outflank-mailman (input) for mailman id 154646;
 Mon, 12 Jul 2021 17:26:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2zgy-0003PO-ML; Mon, 12 Jul 2021 17:26:04 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2zgy-0002Tj-GU; Mon, 12 Jul 2021 17:26:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m2zgy-0002bq-3k; Mon, 12 Jul 2021 17:26:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m2zgy-00031r-3I; Mon, 12 Jul 2021 17:26:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=yRW7Z1Gz9ePe93mvmqa8TE/4jJNJy6LuMLI21OkDhbs=; b=Fok9JLsdDycbRYm9gMf/xtxJrr
	JWQRq7DbcT+1U3MXF8op3X6PPorukop7DMjE24AvToTFG7AFukKRLOoDH0ZXhcffxiFvb8mt6CDqO
	S9UhaKRjt7FCpX7K0hrEZj9Guhx1Em0CTsgqmEVMcToyFBUbxa2Vn+W66ZWSaK/tQ16E=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163598-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163598: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=40a9066439cbab235933525810f46f03806c6ef1
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 17:26:04 +0000

flight 163598 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163598/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 40a9066439cbab235933525810f46f03806c6ef1
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   38 days
Failing since        162368  2021-06-04 15:42:59 Z   38 days  107 attempts
Testing same since   163598  2021-07-12 09:12:40 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3617 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 18:30:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 18:30:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154656.285746 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30gm-000135-Hd; Mon, 12 Jul 2021 18:29:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154656.285746; Mon, 12 Jul 2021 18:29:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30gm-00012y-Ed; Mon, 12 Jul 2021 18:29:56 +0000
Received: by outflank-mailman (input) for mailman id 154656;
 Mon, 12 Jul 2021 18:29:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Aa2W=ME=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m30gk-00012s-W4
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 18:29:55 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 269accc6-e33f-11eb-86fc-12813bfff9fa;
 Mon, 12 Jul 2021 18:29:53 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0056761164;
 Mon, 12 Jul 2021 18:29:52 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 269accc6-e33f-11eb-86fc-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626114593;
	bh=96J+P/54PiSdkLBZltfwRuUs97KzYduOedGlhSWmuLE=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=eexoAoAsXrIivQfGgNwWpRYCcPyaiDXO0/WClkmryPk597BobEGfZUtog+IaN2qD3
	 bBcXx4+muveRVztjRawd02enjGom4hkv0/HX/9kkpjKvMtO8satMgBshEydpeAVeME
	 Xpm8qCI2D/o6/+YonNj6GGBupssJ0yFbllOVBoa5ehylU6YpvVlXqUSSIYV0B0o7he
	 AYy2dKMaVC25XK489xF3spG/WE0PpPMsJ6rE5wRbhpOUc1LTxUDIHs6GIUaLpoiXtn
	 jCXDz+pop3li9yckIywTqK4rupJUtpxmJJT7DRa6AXyrJiEqO+wqJjxFgXw8R2cq9s
	 tbxrzL5vOnapw==
Date: Mon, 12 Jul 2021 11:29:43 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Ian Jackson <iwj@xenproject.org>
cc: Julien Grall <julien@xen.org>, committers@xenproject.org, 
    xen-devel@lists.xenproject.org, Doug Goldstein <cardoe@cardoe.com>, 
    Wei Liu <wl@xen.org>
Subject: Re: gitlab merge request -> list patchbomb workflows
In-Reply-To: <24808.30610.559142.775285@mariner.uk.xensource.com>
Message-ID: <alpine.DEB.2.21.2107121128410.23286@sstabellini-ThinkPad-T480s>
References: <24808.28606.387467.578829@mariner.uk.xensource.com> <8a40ee32-4141-ddc4-4c19-582334f3b245@xen.org> <24808.30610.559142.775285@mariner.uk.xensource.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Fri, 9 Jul 2021, Ian Jackson wrote:
> Julien Grall writes ("Re: gitlab merge request -> list patchbomb workflows"):
> > I have recently started to use b4 [1] to fetch patches and collect tags 
> > from the mailing list. I am wondering if the tools could be extended to 
> > also allow a quick look through of the review "state" of each patch?
> 
> Cool.  That's interesting.  I need to think about it some more, but I
> think this is a possible alternative to using patchwork for the
> analysis task.
> 
> Also, if a robot wanted to post a v2 it could use b4 to fold the acks
> etc. into the repost, without the submitter having to add them to the
> git branch.

Hi Ian,

I think kernel.org is already working on the same feature, you might
want to ask Konstantin Ryabitsev about it.

Cheers,

Stefano


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 18:34:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 18:34:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154662.285757 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30l3-0002PY-3T; Mon, 12 Jul 2021 18:34:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154662.285757; Mon, 12 Jul 2021 18:34:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30l3-0002PR-0J; Mon, 12 Jul 2021 18:34:21 +0000
Received: by outflank-mailman (input) for mailman id 154662;
 Mon, 12 Jul 2021 18:34:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Tj0=ME=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1m30l1-0002PL-H1
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 18:34:19 +0000
Received: from mail-wm1-x331.google.com (unknown [2a00:1450:4864:20::331])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0f83cf8d-db51-42fe-aa7b-d1c1c105337e;
 Mon, 12 Jul 2021 18:34:18 +0000 (UTC)
Received: by mail-wm1-x331.google.com with SMTP id l6so3750442wmq.0
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 11:34:18 -0700 (PDT)
Received: from [192.168.1.186]
 (host86-143-223-59.range86-143.btcentralplus.com. [86.143.223.59])
 by smtp.gmail.com with ESMTPSA id f1sm14586309wri.74.2021.07.12.11.34.17
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 12 Jul 2021 11:34:17 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0f83cf8d-db51-42fe-aa7b-d1c1c105337e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=Rjq+Zul/CI8PmAeKphdfwfNYT1aj+dJajjwBw2huDjk=;
        b=cvQzETFtwJbbuONVsW+hcqqWjC4j17EirE8R2bBz02HwuIUQAz+Or+aiZJAn1LeWTI
         gyQo46KaqAhKjlT1FwsyYXNHt37a0n5Tv8QHKRkjFk8NEIJTqDadj0VMw0Miu+qIDWYK
         Q8HARjM2MSu1qKIbfioGmDyshzPpgmqnnNePsiM0tqoXhYukAvPLBlZHU6TatlN4rbgT
         4LPhZ9MLMzFzB3eZojl2qGrI8AynOGERTaa8orwQQJDeVcE3l+5zk1RfhnnGeZ3VUpTd
         G+Kw2dKURrzzhhC2SKjKDB4S16bmG5WQFAc8/JRGi6AhJzjZg4jqvA6gJHz9fRyQYEME
         OFeA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=Rjq+Zul/CI8PmAeKphdfwfNYT1aj+dJajjwBw2huDjk=;
        b=suE6qfsoytBQrEbDfqnr0aO+Yqkf+3i8DYnbmpIYtbe0SRlhaZkwt1oBR647qtzJnG
         FiDUQkkm7PjM095XcvyRZ2hgQRTIQjgwF6xL7fpqRO6VPbrx/d6vI6V73jqil4KDUXSr
         vCWNYGVV/QMf6ca7xzpIEs7Il4th//1wuJNDBx/38/R84MVyueI2ZxR0jGCNDeVMSDtV
         n/yvVsYo/IYUesv3wDlCQ9+FPR4uVIDaokxWb32dNjEKTzcSao2tuQ+EQeo8qI5zQ2Jo
         eOdlqeQpEu8a1TrVuLbmRMkMIWjNMxDwRD0XdHOL+GZoaLYES4l9cIe7h0fnvHwQE8/x
         3u3A==
X-Gm-Message-State: AOAM531VJSz31LOiUI0i8iZONTZYXJJLifnhv7r9UYd41gZHPKc3KGqF
	YU1Kr33cbQ0/jsE0UmNZszs=
X-Google-Smtp-Source: ABdhPJweuHSr3489cD0WMZM9a7eK8kUlX0GqC8WftxOkWzuy0gblCUaQYhVfE9aSfW1TtQfM9Yo/Rw==
X-Received: by 2002:a05:600c:3b86:: with SMTP id n6mr665530wms.28.1626114857788;
        Mon, 12 Jul 2021 11:34:17 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: [PATCH 1/2] IOMMU: correct parsing of "quarantine=scratch-page"
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
References: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
 <dd85d77a-34c4-dbdf-1822-28612fe9f7ac@suse.com>
Message-ID: <66a38211-6fad-ade5-e633-b7b2011c0cdd@xen.org>
Date: Mon, 12 Jul 2021 19:34:16 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <dd85d77a-34c4-dbdf-1822-28612fe9f7ac@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 07/07/2021 14:21, Jan Beulich wrote:
> During the multiple renames of the sub-option I apparently forgot to
> update the left side of the &&, and this pretty consistently.
> 
> Fixes: 980d6acf1517 ("IOMMU: make DMA containment of quarantined devices optional")
> 
> Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Paul Durrant <paul@xen.org>

> 
> --- a/xen/drivers/passthrough/iommu.c
> +++ b/xen/drivers/passthrough/iommu.c
> @@ -82,7 +82,7 @@ static int __init parse_iommu_param(cons
>   #ifdef CONFIG_HAS_PCI
>           else if ( (val = parse_boolean("quarantine", s, ss)) >= 0 )
>               iommu_quarantine = val;
> -        else if ( ss == s + 15 && !strncmp(s, "quarantine=scratch-page", 23) )
> +        else if ( ss == s + 23 && !strncmp(s, "quarantine=scratch-page", 23) )
>               iommu_quarantine = IOMMU_quarantine_scratch_page;
>   #endif
>   #ifdef CONFIG_X86
> 



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 18:35:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 18:35:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154667.285768 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30lu-0002zM-Ei; Mon, 12 Jul 2021 18:35:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154667.285768; Mon, 12 Jul 2021 18:35:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30lu-0002zF-BZ; Mon, 12 Jul 2021 18:35:14 +0000
Received: by outflank-mailman (input) for mailman id 154667;
 Mon, 12 Jul 2021 18:35:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Tj0=ME=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1m30ls-0002z3-UK
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 18:35:12 +0000
Received: from mail-wr1-x42f.google.com (unknown [2a00:1450:4864:20::42f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 537434f8-cf87-46a1-9570-e2b4f7e51665;
 Mon, 12 Jul 2021 18:35:12 +0000 (UTC)
Received: by mail-wr1-x42f.google.com with SMTP id d12so26312431wre.13
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 11:35:12 -0700 (PDT)
Received: from [192.168.1.186]
 (host86-143-223-59.range86-143.btcentralplus.com. [86.143.223.59])
 by smtp.gmail.com with ESMTPSA id h13sm15046299wrs.68.2021.07.12.11.35.10
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 12 Jul 2021 11:35:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 537434f8-cf87-46a1-9570-e2b4f7e51665
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=7IOFMEaRXeb4lEhp2WUWQKlciZCWXIIZtMZDzWywoQE=;
        b=iJ5ypSOwhZ1GrRtpiXszUM+5DzrGOgexYHG8U7Mc+DDSREbz0w+aHGa45PxH42Gyxi
         0pfPYkDMR+fOdhj2yWUtiErQzJL5BlIQNHCbJk3nVBOwmSmBbinAjKGjfJ/HKvcttf7a
         6fao64lFvcgyNHsLTspMvmYZ12+VBWaDyAZCQQBvjZW6ui1thulFX9DIpLNjrAWvwF7R
         ADn797u2YfILlvEemxqBw2xGzWFJdpSarYg1PsGbGie0lhBG9EHiS4Cx4GirY50veGSH
         bfTCZGb5ZC6nV4enyfCrSP0vQCQGOGkGBsfVKuSHUFKRlt33UOxxPJ+90xN1ut1GnIbx
         zmng==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=7IOFMEaRXeb4lEhp2WUWQKlciZCWXIIZtMZDzWywoQE=;
        b=isZFozRyx4ofkkYxloVhOHoz87wxZqJ6+mNZFsxLYBBSpmBQ8lIKJ2iSPei0iX9BhL
         Fari3FIcAW+1QuCUSrVv2uYGBsVTkujUgUl7/XOguRMDbiEOmdYgra6qaekaBaISD+/u
         6RDZxru5UV8nuJ8CQnBngKpL2E5XuGS+h5yjzjcM5O2VpGdgc1/zvgQKpaPfZrQjBkCL
         A8cqP526RdkGtKzj8+/YaVsIOyvwnZ2j+g2KCkke7549dJPm4N4VVdMzt6bXLQdB+olW
         yZW5P5NL+FGDmajTxFTL1KsEOud6T8+NqIggrHwk1ov700nnWAS6pfXVDu0SGEyki4sh
         zFmA==
X-Gm-Message-State: AOAM531xSCxb9hE5jRevp6f1ikb3rqWj4krs03KAwxl7wPZbAucxxhPz
	S6gEjTNDsZ3JuYHT5yl14xk=
X-Google-Smtp-Source: ABdhPJzlymIG/+7+4jY63p8axw0hsT46LSF5jRgU2hk2Q0460Tgl8C/UNryGwoIamG4oXsb9663AGQ==
X-Received: by 2002:adf:fb8f:: with SMTP id a15mr465196wrr.92.1626114911428;
        Mon, 12 Jul 2021 11:35:11 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: [PATCH 2/2] CHANGELOG: record changed PCI device quarantining
 default
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
References: <95ceeea0-5623-952e-00c9-2c7f1a3459dc@suse.com>
 <79d35b3a-4f13-fd5b-91db-2805c999b36d@suse.com>
Message-ID: <8ba4e63d-12f6-2aef-0833-d9e0b989a9b9@xen.org>
Date: Mon, 12 Jul 2021 19:35:10 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <79d35b3a-4f13-fd5b-91db-2805c999b36d@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 07/07/2021 14:22, Jan Beulich wrote:
> This amends commit 980d6acf1517 ("IOMMU: make DMA containment of
> quarantined devices optional").
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Paul Durrant <paul@xen.org>

> 
> --- a/CHANGELOG.md
> +++ b/CHANGELOG.md
> @@ -10,6 +10,13 @@ The format is based on [Keep a Changelog
>    - XENSTORED_ROOTDIR environment variable from configuartion files and
>      initscripts, due to being unused.
>   
> +### Changed
> + - Quarantining of passed-through PCI devices no longer defaults to directing I/O to a scratch
> +   page, matching original post-XSA-302 behavior (albeit the change was also backported, first
> +   appearing in 4.12.2 and 4.11.4). Prior (4.13...4.15-like) behavior can be arranged for
> +   either by enabling the IOMMU_QUARANTINE_SCRATCH_PAGE setting at build (configuration) time
> +   or by passing "iommu=quarantine=scratch-page" on the hypervisor command line.
> +
>   ## [4.15.0 UNRELEASED](https://xenbits.xen.org/gitweb/?p=xen.git;a=shortlog;h=RELEASE-4.15.0) - TBD
>   
>   ### Added / support upgraded
> 



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 18:43:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 18:43:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154674.285779 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30uG-0004UX-9y; Mon, 12 Jul 2021 18:43:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154674.285779; Mon, 12 Jul 2021 18:43:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m30uG-0004UQ-6z; Mon, 12 Jul 2021 18:43:52 +0000
Received: by outflank-mailman (input) for mailman id 154674;
 Mon, 12 Jul 2021 18:43:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m30uE-0004UG-Uj; Mon, 12 Jul 2021 18:43:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m30uE-0003pa-Po; Mon, 12 Jul 2021 18:43:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m30uE-00058S-Hy; Mon, 12 Jul 2021 18:43:50 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m30uE-0000PC-HW; Mon, 12 Jul 2021 18:43:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=IenrjJ7OVBlGo/2BilOpGsZ4dD38LwR9faJbp3kXD3E=; b=jmtQs4retA3+JkQ6nHPLH0kssE
	gTXkFjNbv7jjboVPSmURcUlEaTgqmd5hMcTyiX8T33eA7vEB9E8Kn/GcpFUk9TdkDk5APkaognfX2
	P0k4B4UGA47tTDm0ZSeBA/yYWSYSAF682LpOhZgCyUzmzBvEaWSduc7FZ57/5LImO0GY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163607-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163607: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 18:43:50 +0000

flight 163607 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163607/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    3 days
Failing since        163480  2021-07-09 16:08:01 Z    3 days   18 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    2 days   17 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 18:53:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 18:53:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154693.285796 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m313b-00063N-9U; Mon, 12 Jul 2021 18:53:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154693.285796; Mon, 12 Jul 2021 18:53:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m313b-00063G-6W; Mon, 12 Jul 2021 18:53:31 +0000
Received: by outflank-mailman (input) for mailman id 154693;
 Mon, 12 Jul 2021 18:53:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m313Z-00063A-RM
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 18:53:29 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m313W-0003zb-3c; Mon, 12 Jul 2021 18:53:26 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m313V-0003dC-T3; Mon, 12 Jul 2021 18:53:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=hdPBhBGzLry2pnYqzisz3UPJUplMRXnaUuOJh3m7cOc=; b=yTvY2BRXFp+toOr/aEXygTtPt+
	qIL2gVzNiP8HTYBbpRbdFqAacPRDN16RJ0+4E5k/9QVu/63mkD/PCMBP1bNbVStDvKyV8iqZ+qdwM
	98j7BNKbr3dW9aE6OsCY/0ADWwVOmGO+kYYwCpY3uKYj3Zzhued1Vjpu54moFOC1nMEM=;
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
To: Bertrand Marquis <Bertrand.Marquis@arm.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Wei Liu <wl@xen.org>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
 <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
 <EE203ED0-5FB9-4597-878B-7261C989763F@arm.com>
 <08d7e35e-6785-9ce9-2e8b-1bbf65e4b47f@xen.org>
 <D4992248-BED1-4766-8872-1BFEB04068FE@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <fa6b7a04-0408-e9c4-216f-33af3295d8cf@xen.org>
Date: Mon, 12 Jul 2021 19:53:23 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <D4992248-BED1-4766-8872-1BFEB04068FE@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Bertrand,

On 12/07/2021 17:29, Bertrand Marquis wrote:
>> On 12 Jul 2021, at 12:13, Julien Grall <julien@xen.org> wrote:
>>
>>
>>
>> On 12/07/2021 12:03, Bertrand Marquis wrote:
>>> Hi Julien,
>>
>> Hi Bertrand,
>>
>>>> On 12 Jul 2021, at 11:16, Julien Grall <julien@xen.org> wrote:
>>>>
>>>> Hi Bertrand,
>>>>
>>>> On 29/06/2021 18:08, Bertrand Marquis wrote:
>>>>> Define a sanitize_cpu function to be called on secondary cores to
>>>>> sanitize the cpuinfo structure from the boot CPU.
>>>>> The safest value is taken when possible and the system is marked tainted
>>>>> if we encounter values which are incompatible with each other.
>>>>> Call the sanitize_cpu function on all secondary cores and remove the
>>>>> code disabling secondary cores if they are not the same as the boot core
>>>>> as we are now able to handle this use case.
>>>>> This is only supported on arm64 so cpu_sanitize is an empty static
>>>>> inline on arm32.
>>>>> This patch also removes the code imported from Linux that will not be
>>>>> used by Xen.
>>>>> Signed-off-by: Bertrand Marquis <bertrand.marquis@arm.com>
>>>>> ---
>>>>>   xen/arch/arm/arm64/cpusanitize.c | 236 ++++++++++++++++++++++++-------
>>>>>   xen/arch/arm/smpboot.c           |   5 +-
>>>>>   xen/include/asm-arm/cpufeature.h |   9 ++
>>>>>   xen/include/xen/lib.h            |   1 +
>>>>>   4 files changed, 199 insertions(+), 52 deletions(-)
>>>>> diff --git a/xen/arch/arm/arm64/cpusanitize.c b/xen/arch/arm/arm64/cpusanitize.c
>>>>> index 4cc8378c14..744006ca7c 100644
>>>>> --- a/xen/arch/arm/arm64/cpusanitize.c
>>>>> +++ b/xen/arch/arm/arm64/cpusanitize.c
>>>>> @@ -97,10 +97,6 @@ struct arm64_ftr_bits {
>>>>>   		.width = 0,				\
>>>>>   	}
>>>>>   -static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);
>>>>> -
>>>>> -static bool __system_matches_cap(unsigned int n);
>>>>> -
>>>>>   /*
>>>>>    * NOTE: Any changes to the visibility of features should be kept in
>>>>>    * sync with the documentation of the CPU feature register ABI.
>>>>> @@ -277,31 +273,6 @@ static const struct arm64_ftr_bits ftr_id_aa64mmfr2[] = {
>>>>>   	ARM64_FTR_END,
>>>>>   };
>>>>>   -static const struct arm64_ftr_bits ftr_ctr[] = {
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1),
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1),
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_CWG_SHIFT, 4, 0),
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_ERG_SHIFT, 4, 0),
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1),
>>>>> -	/*
>>>>> -	 * Linux can handle differing I-cache policies. Userspace JITs will
>>>>> -	 * make use of *minLine.
>>>>> -	 * If we have differing I-cache policies, report it as the weakest - VIPT.
>>>>> -	 */
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, 2, ICACHE_POLICY_VIPT),	/* L1Ip */
>>>>> -	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_SHIFT, 4, 0),
>>>>> -	ARM64_FTR_END,
>>>>> -};
>>>>
>>>> I don't think this is should be dropped. Xen will need to know the safest cacheline size that can be used for cache maintenance instructions.
>>> I will surround those entries by #if 0 instead
>>
>> But, why can't this just be sanitized as the other registers? If this is just a matter of missing structure in Xen, then we should add one.
>>
>> The same goes for the other 2 below.
> 
> The point of the RFC was to validate the way to go and do the base.

Right... I was commenting on your suggestion to switch to #if 0 for the 
next version. I assume this will be a non-RFC and...

> Those require changes out of the cpuinfo and are on my todo list to
... it wasn't clear to me that the change on the cpuinfo was on your 
TODO list for the next version.

So I prefer to ask before you spend time working on a change that I may 
disagree with ;).

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 19:03:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 19:03:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154707.285811 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m31Db-0007gy-EJ; Mon, 12 Jul 2021 19:03:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154707.285811; Mon, 12 Jul 2021 19:03:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m31Db-0007gr-At; Mon, 12 Jul 2021 19:03:51 +0000
Received: by outflank-mailman (input) for mailman id 154707;
 Mon, 12 Jul 2021 19:03:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m31DZ-0007gl-Kq
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 19:03:49 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m31DY-0004Bu-L2; Mon, 12 Jul 2021 19:03:48 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m31DY-0004Ou-Ex; Mon, 12 Jul 2021 19:03:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=j3gC4tzSDNVgvNvhWGQQUwuoFkRhQ4Gqkovqcg7R4yU=; b=c0wSllF0C4glpwOQxePHaEkiXW
	ITiL7Ph2Hy2aAKth0CxKFGHxUwJeBzgJ7iTPiPt5GxUIi8lok8+1VIH2Zn6wtpLsOj2M7C1GjjOX4
	jbOkEkb/kCpmqbTV6wAdG8NrJrByai90JFZJsy/3D9o7rgwE6YVVtfIaRaom2ep3aQu0=;
Subject: Re: [RFC PATCH 2/4] xen/arm: Import ID features sanitize from linux
To: Bertrand Marquis <Bertrand.Marquis@arm.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <da0e48cde6c26d19fde468ad2860b807459a1042.1624974370.git.bertrand.marquis@arm.com>
 <d312b6aa-7bdd-5ce1-f28b-3227a9331c62@xen.org>
 <C505E8BE-9B75-4C19-A822-C65B5807EFAA@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <00b09f8c-96f1-3c97-6a72-6a864b69e038@xen.org>
Date: Mon, 12 Jul 2021 20:03:46 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <C505E8BE-9B75-4C19-A822-C65B5807EFAA@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Bertrand,

On 12/07/2021 11:50, Bertrand Marquis wrote:
>>> +#define __ARM64_FTR_BITS(SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
>>> +	{						\
>>> +		.sign = SIGNED,				\
>>> +		.visible = VISIBLE,			\
>>> +		.strict = STRICT,			\
>>> +		.type = TYPE,				\
>>> +		.shift = SHIFT,				\
>>> +		.width = WIDTH,				\
>>> +		.safe_val = SAFE_VAL,			\
>>> +	}
>>> +
>>> +/* Define a feature with unsigned values */
>>> +#define ARM64_FTR_BITS(VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
>>> +	__ARM64_FTR_BITS(FTR_UNSIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL)
>>> +
>>> +/* Define a feature with a signed value */
>>> +#define S_ARM64_FTR_BITS(VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL) \
>>> +	__ARM64_FTR_BITS(FTR_SIGNED, VISIBLE, STRICT, TYPE, SHIFT, WIDTH, SAFE_VAL)
>>> +
>>> +#define ARM64_FTR_END					\
>>> +	{						\
>>> +		.width = 0,				\
>>> +	}
>>> +
>>> +static void cpu_enable_cnp(struct arm64_cpu_capabilities const *cap);
>>
>> This function is not defined in the code you import.
> 
> I imported the block I am interested in from Linux and I am filtering it in the
> Next patch where I remove those function prototypes.
I find it a bit confusing because most of the code imported makes sense 
except the two prototypes. At the same time...

> 
> This was to allow easier update of the code.

... I agree with this because if we need a resync of this patch, we may 
inadvertently re-introduce the prototype. So...

> 
> Should I filter directly when importing linux code then ?

... I will leave that up to you.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154759.285856 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32WE-0007W5-IY; Mon, 12 Jul 2021 20:27:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154759.285856; Mon, 12 Jul 2021 20:27:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32WE-0007Vy-FZ; Mon, 12 Jul 2021 20:27:10 +0000
Received: by outflank-mailman (input) for mailman id 154759;
 Mon, 12 Jul 2021 20:27:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32WD-0007Vs-Bg
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:09 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 86ece388-e34f-11eb-8706-12813bfff9fa;
 Mon, 12 Jul 2021 20:27:07 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 162612162173030.685544024765363;
 Mon, 12 Jul 2021 13:27:01 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 86ece388-e34f-11eb-8706-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121625; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=Q2eQ6R/AQZjPMt9McBECeY4heGEeH6O6cLSOAYytFf4lf8ksZSD63B1CBJ2u4BL9kAp6cDUtYnt3nZPnqHzymRIoJeNv9wksqfFzng73GpROhK37Nx6AZQNkWq6IS/WQeEx8jO6Q6Tw4dEpScZMwdEtMLerCR63Tz2pWti6Y87A=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121625; h=Content-Transfer-Encoding:Cc:Date:From:MIME-Version:Message-ID:Subject:To; 
	bh=9iesqu1CfuYWPlaOe8yxlR3SXqyntAXWBDNEZCKcZiM=; 
	b=aJ1x+cRGGGSBds5eGbXGkjmmD0ZMCMrSKiyK2ZDjooNr8Nu5PsjhVuf5iJm0BXsm0LRBFd0f5BYs7Fceuz4fKFP/2TvrVzEMpM3M9CL5X6Y6tHb7DUfwf3+bqY27WMzvUgVLuLfQufQgcViD07XfgWPStd11oxB2vv6du197zUo=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121625;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Transfer-Encoding;
	bh=9iesqu1CfuYWPlaOe8yxlR3SXqyntAXWBDNEZCKcZiM=;
	b=cWwTr+jqiF1Wl8F/U1iABnV9g/GC/Drasz9brI5Xm3CQKTYHSNAyh/bSGljd70++
	eJfHwheUNtCp3qCMVH6xOWifrpRSGLPaSzwpfDhq8VucWeKUfyOeYDiOMe/VQndYt41
	HHkKLz2WN1ygfVXFhqKdHp6G6mdYu3JlHQBgdJJw=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: [PATCH v2 00/10]  xsm: refactoring xsm hooks
Date: Mon, 12 Jul 2021 16:32:23 -0400
Message-Id: <20210712203233.20289-1-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

Based on feedback from 2021 Xen Developers Summit the xsm-roles RFC
patch set is being split into two separate patch sets. This is the first
patch set and is focused purely on the clean up and refactoring of the
XSM hooks.

This patch set refactors the xsm_ops wrapper hooks to use the alternative_call
infrastructure. Then proceeds to move and realign the headers to remove the
psuedo is/is not enable implementation. The remainder of the changes are clean up
and removing no longer necessary abstractions.

v2:
 - restructured the patches, breaking them up as needed
 - incorporate Andrew Cooper's alternative call common code
 - change XSM module registration, removing register_xsm
 - incoporate KConfig recommendations
 - reworded commit messages
 - incorporate macro expansion recommendations
 - misc clean-up fallout from recommendations

Andrew Cooper (1):
  xen: Implement xen/alternative-call.h for use in common code

Daniel P. Smith (9):
  xsm: refactor xsm_ops handling
  xsm: remove the ability to disable flask
  xsm: convert xsm_ops hook calls to alternative call
  xsm: decouple xsm header inclusion selection
  xsm: enable xsm to always be included
  xsm: drop generic event channel labeling
  xsm: remove xsm_default_t from hook definitions
  xsm: expand the function related macros in dummy.h
  xsm: removing the XSM_ASSERT_ACTION macro

 xen/arch/arm/dm.c                     |   2 +-
 xen/arch/arm/domctl.c                 |   6 +-
 xen/arch/arm/hvm.c                    |   2 +-
 xen/arch/arm/mm.c                     |   2 +-
 xen/arch/arm/platform_hypercall.c     |   2 +-
 xen/arch/x86/Kconfig                  |   1 +
 xen/arch/x86/cpu/mcheck/mce.c         |   2 +-
 xen/arch/x86/cpu/vpmu.c               |   2 +-
 xen/arch/x86/domctl.c                 |   8 +-
 xen/arch/x86/hvm/dm.c                 |   2 +-
 xen/arch/x86/hvm/hvm.c                |  12 +-
 xen/arch/x86/irq.c                    |   5 +-
 xen/arch/x86/mm.c                     |  20 +-
 xen/arch/x86/mm/mem_paging.c          |   2 +-
 xen/arch/x86/mm/mem_sharing.c         |   9 +-
 xen/arch/x86/mm/p2m.c                 |   2 +-
 xen/arch/x86/mm/paging.c              |   4 +-
 xen/arch/x86/mm/shadow/set.c          |   2 +-
 xen/arch/x86/msi.c                    |   3 +-
 xen/arch/x86/pci.c                    |   2 +-
 xen/arch/x86/physdev.c                |  17 +-
 xen/arch/x86/platform_hypercall.c     |  10 +-
 xen/arch/x86/pv/emul-priv-op.c        |   2 +-
 xen/arch/x86/sysctl.c                 |   4 +-
 xen/common/Kconfig                    |  48 +-
 xen/common/domain.c                   |   4 +-
 xen/common/domctl.c                   |  12 +-
 xen/common/event_channel.c            |  12 +-
 xen/common/grant_table.c              |  16 +-
 xen/common/hypfs.c                    |   2 +-
 xen/common/kernel.c                   |   2 +-
 xen/common/kexec.c                    |   2 +-
 xen/common/mem_access.c               |   2 +-
 xen/common/memory.c                   |  16 +-
 xen/common/monitor.c                  |   2 +-
 xen/common/sched/core.c               |   6 +-
 xen/common/sysctl.c                   |   8 +-
 xen/common/vm_event.c                 |   2 +-
 xen/common/xenoprof.c                 |   2 +-
 xen/drivers/char/console.c            |   2 +-
 xen/drivers/passthrough/device_tree.c |   4 +-
 xen/drivers/passthrough/pci.c         |  12 +-
 xen/include/xen/alternative-call.h    |  65 +++
 xen/include/xen/sched.h               |   9 -
 xen/include/xsm/dummy.h               | 774 --------------------------
 xen/include/xsm/xsm-core.h            | 237 ++++++++
 xen/include/xsm/xsm.h                 | 623 +++++++--------------
 xen/xsm/Makefile                      |   4 +-
 xen/xsm/dummy.c                       |   7 +-
 xen/xsm/dummy.h                       | 696 +++++++++++++++++++++++
 xen/xsm/flask/flask_op.c              |  30 -
 xen/xsm/flask/hooks.c                 |  11 +-
 xen/xsm/silo.c                        |  23 +-
 xen/xsm/xsm_core.c                    |  76 +--
 54 files changed, 1381 insertions(+), 1451 deletions(-)
 create mode 100644 xen/include/xen/alternative-call.h
 delete mode 100644 xen/include/xsm/dummy.h
 create mode 100644 xen/include/xsm/xsm-core.h
 create mode 100644 xen/xsm/dummy.h

-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154760.285868 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32WJ-0007my-RZ; Mon, 12 Jul 2021 20:27:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154760.285868; Mon, 12 Jul 2021 20:27:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32WJ-0007mp-OF; Mon, 12 Jul 2021 20:27:15 +0000
Received: by outflank-mailman (input) for mailman id 154760;
 Mon, 12 Jul 2021 20:27:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32WI-0007Vs-78
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:14 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8a2cacf4-e34f-11eb-8706-12813bfff9fa;
 Mon, 12 Jul 2021 20:27:13 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121624633615.1024060464936;
 Mon, 12 Jul 2021 13:27:04 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8a2cacf4-e34f-11eb-8706-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121627; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=L/vL9BjiRAQyNL5o6PslUOP9aWfjW041mBBJz1L0MDilxaAByMQhYiv3FvkviZ7+dWuaTDYGGVLkXpgQQc9zrVLLQbYgxiq+nG21QITwXkEs4qAILClM7lKAbdj/snQiLNirmdUdALvvgRkL4O9m6ig/j0erSjM6zesvF2OXKr8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121627; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=jFGpZRxd7dAEvfpeCIB9cuklmVsrATB/7yKSZCVWMz4=; 
	b=nd8KcewbpDx7kr6z9QgeK48sayquQlREsorgldErpYA0H09TuMObsgTCwvS/xsU8q079MKTRzMuylrt7NEUSFALReXJrd6lpJuSrQbk1lfoSoRn4qdNb915F7agxQYKfGUB+973wZOCULub/B+1Zr7vdtE1+CDhI3q0GyMWauI0=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121627;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=jFGpZRxd7dAEvfpeCIB9cuklmVsrATB/7yKSZCVWMz4=;
	b=iJ9urGDK0LCfdkxTRDUByAD7np8r+mMoajgGLKeA4RExmgFruoK3BpG/FBEv1JpX
	v4VNf3/QKyElkqUy/XXnp77r47L3MvpwhMfMbo0QJ8gx5AVfkNN9d2e7do6zGuehVlk
	SDyOhyATA0/a8heLJjikwT4rHMrrw15awZocL2tY=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: Wei Liu <wl@xen.org>,
	xen-devel@lists.xenproject.org
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
	Jan Beulich <jbeulich@suse.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>
Subject: [PATCH v2 01/10] xen: Implement xen/alternative-call.h for use in common code
Date: Mon, 12 Jul 2021 16:32:24 -0400
Message-Id: <20210712203233.20289-2-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

From: Andrew Cooper <andrew.cooper3@citrix.com>

The alternative call infrastructure is x86-only for now, but the common iommu
code has a variant and more common code wants to use the infrastructure.

Introduce CONFIG_ALTERNATIVE_CALL and a conditional implemetnation so common
code can use the optimisation when available, without requiring all
architectures to implement no-op stubs.

Write some documentation, which was thus far entirely absent, covering the
requirements for an architecture to implement this optimsiation, and how to
use the infrastructure in general code.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
 xen/arch/x86/Kconfig               |  1 +
 xen/common/Kconfig                 |  3 ++
 xen/include/xen/alternative-call.h | 65 ++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)
 create mode 100644 xen/include/xen/alternative-call.h

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 9b164db641..c91cdd83dc 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -9,6 +9,7 @@ config X86
 	select ARCH_SUPPORTS_INT128
 	select CORE_PARKING
 	select HAS_ALTERNATIVE
+	select ALTERNATIVE_CALL
 	select HAS_COMPAT
 	select HAS_CPUFREQ
 	select HAS_EHCI
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 0ddd18e11a..1594ce4e73 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -25,6 +25,9 @@ config GRANT_TABLE
 config HAS_ALTERNATIVE
 	bool
 
+config ALTERNATIVE_CALL
+	bool
+
 config HAS_COMPAT
 	bool
 
diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alternative-call.h
new file mode 100644
index 0000000000..11d1c26068
--- /dev/null
+++ b/xen/include/xen/alternative-call.h
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef XEN_ALTERNATIVE_CALL
+#define XEN_ALTERNATIVE_CALL
+
+/*
+ * Some subsystems in Xen may have multiple implementions, which can be
+ * resolved to a single implementation at boot time.  By default, this will
+ * result in the use of function pointers.
+ *
+ * Some architectures may have mechanisms for dynamically modifying .text.
+ * Using this mechnaism, function pointers can be converted to direct calls
+ * which are typically more efficient at runtime.
+ *
+ * For architectures to support:
+ *
+ * - Implement alternative_{,v}call() in asm/alternative.h.  Code generation
+ *   requirements are to emit a function pointer call at build time, and stash
+ *   enough metadata to simplify the call at boot once the implementation has
+ *   been resolved.
+ * - Select ALTERNATIVE_CALL in Kconfig.
+ *
+ * To use:
+ *
+ * Consider the following simplified example.
+ *
+ *  1) struct foo_ops __alt_call_maybe_initdata ops;
+ *
+ *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops = { ... };
+ *     struct foo_ops __alt_call_maybe_initconst foo_b_ops = { ... };
+ *
+ *     void foo_init(void)
+ *     {
+ *         ...
+ *         if ( use_impl_a )
+ *             ops = *foo_a_ops;
+ *         else if ( use_impl_b )
+ *             ops = *foo_b_ops;
+ *         ...
+ *     }
+ *
+ *  3) alternative_call(ops.bar, ...);
+ *
+ * There needs to a single ops object (1) which will eventually contain the
+ * function pointers.  This should be populated in foo's init() function (2)
+ * by one of the available implementations.  To call functions, use
+ * alternative_{,v}call() referencing the main ops object (3).
+ */
+
+#ifdef CONFIG_ALTERNATIVE_CALL
+
+#include <asm/alternative.h>
+
+#define __alt_call_maybe_initdata  __initdata
+#define __alt_call_maybe_initconst __initconst
+
+#else
+
+#define alternative_call(func, args...)  (func)(args)
+#define alternative_vcall(func, args...) (func)(args)
+
+#define __alt_call_maybe_initdata
+#define __alt_call_maybe_initconst
+
+#endif /* !CONFIG_ALTERNATIVE_CALL */
+#endif /* XEN_ALTERNATIVE_CALL */
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154762.285879 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32WU-0008C0-49; Mon, 12 Jul 2021 20:27:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154762.285879; Mon, 12 Jul 2021 20:27:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32WU-0008Bt-0p; Mon, 12 Jul 2021 20:27:26 +0000
Received: by outflank-mailman (input) for mailman id 154762;
 Mon, 12 Jul 2021 20:27:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32WS-00089m-ID
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:24 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8fbb819a-e34f-11eb-8706-12813bfff9fa;
 Mon, 12 Jul 2021 20:27:22 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121625956852.6416374676493;
 Mon, 12 Jul 2021 13:27:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8fbb819a-e34f-11eb-8706-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121627; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=VWYjf37AA/MPBjBL565JbWtbyTaps0GHyX1sBAyrZHzk04fUMa7RG4zNSan1fgrHxI9Egv+MMh40wuQH1pkFK71ts6yIr/V1cFe8mo7741nAiRmr+jpRE89TLbKIHJOJIPkAeb/hGfGJ10uAwJJ/+mTDalnp6FpNq8sRXumJUwE=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121627; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=gDu8jJ6R5Zx5yM5PugT1EdL7sMQTspIU2RFRkJquHjo=; 
	b=FeWAeCNPQ+WfltohGZpLcbTGCLjl1dtqmQnBZy18ieBRkVDqA/c3C6h4PHppCWvl0+n2HuZsEcxk+Wh4qr0iWDojA5Z7h0CQF0ivdo919t3sevZtScVdK4vLayGOcQ/E2TBIV8UxEbzKTJinJUzZn4c5YOi/zSN73iNoeJpOgdA=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121627;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=gDu8jJ6R5Zx5yM5PugT1EdL7sMQTspIU2RFRkJquHjo=;
	b=KKRKxsBv+p+tMstCS8kSOXECk5N/HRgMjS3p6x0fGxG3igx2PHX+kAb3Vhiu4WwF
	9ftA2fJV+qkdUO45k9VGEDDz3yB4bSjQM+7KM+z6Hqb3Mh0skwxeT+LM6ODfJu3ZvDF
	B4ja3RSSABxtcG83KvIDJqz2qLlnoW7QsveFkKIU=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 02/10] xsm: refactor xsm_ops handling
Date: Mon, 12 Jul 2021 16:32:25 -0400
Message-Id: <20210712203233.20289-3-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

This converts the global xsm_ops from being a pointer to a struct xsm_ops to being an
explicit instance. It then reworks the XSM modules init function to
return their xsm_ops struct which is copied in to the global xsm_ops.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/include/xsm/xsm.h    | 215 ++++++++++++++++++++-------------------
 xen/xsm/dummy.c          |   2 -
 xen/xsm/flask/flask_op.c |   4 +-
 xen/xsm/flask/hooks.c    |  11 +-
 xen/xsm/silo.c           |   5 +-
 xen/xsm/xsm_core.c       |  72 +++++++------
 6 files changed, 158 insertions(+), 151 deletions(-)

diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index ad3cddbf7d..a8805f514b 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -191,295 +191,295 @@ struct xsm_operations {
 
 #ifdef CONFIG_XSM
 
-extern struct xsm_operations *xsm_ops;
+extern struct xsm_operations xsm_ops;
 
 #ifndef XSM_NO_WRAPPERS
 
 static inline void xsm_security_domaininfo (struct domain *d,
                                         struct xen_domctl_getdomaininfo *info)
 {
-    xsm_ops->security_domaininfo(d, info);
+    xsm_ops.security_domaininfo(d, info);
 }
 
 static inline int xsm_domain_create (xsm_default_t def, struct domain *d, u32 ssidref)
 {
-    return xsm_ops->domain_create(d, ssidref);
+    return xsm_ops.domain_create(d, ssidref);
 }
 
 static inline int xsm_getdomaininfo (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->getdomaininfo(d);
+    return xsm_ops.getdomaininfo(d);
 }
 
 static inline int xsm_domctl_scheduler_op (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops->domctl_scheduler_op(d, cmd);
+    return xsm_ops.domctl_scheduler_op(d, cmd);
 }
 
 static inline int xsm_sysctl_scheduler_op (xsm_default_t def, int cmd)
 {
-    return xsm_ops->sysctl_scheduler_op(cmd);
+    return xsm_ops.sysctl_scheduler_op(cmd);
 }
 
 static inline int xsm_set_target (xsm_default_t def, struct domain *d, struct domain *e)
 {
-    return xsm_ops->set_target(d, e);
+    return xsm_ops.set_target(d, e);
 }
 
 static inline int xsm_domctl (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops->domctl(d, cmd);
+    return xsm_ops.domctl(d, cmd);
 }
 
 static inline int xsm_sysctl (xsm_default_t def, int cmd)
 {
-    return xsm_ops->sysctl(cmd);
+    return xsm_ops.sysctl(cmd);
 }
 
 static inline int xsm_readconsole (xsm_default_t def, uint32_t clear)
 {
-    return xsm_ops->readconsole(clear);
+    return xsm_ops.readconsole(clear);
 }
 
 static inline int xsm_evtchn_unbound (xsm_default_t def, struct domain *d1, struct evtchn *chn,
                                                                     domid_t id2)
 {
-    return xsm_ops->evtchn_unbound(d1, chn, id2);
+    return xsm_ops.evtchn_unbound(d1, chn, id2);
 }
 
 static inline int xsm_evtchn_interdomain (xsm_default_t def, struct domain *d1,
                 struct evtchn *chan1, struct domain *d2, struct evtchn *chan2)
 {
-    return xsm_ops->evtchn_interdomain(d1, chan1, d2, chan2);
+    return xsm_ops.evtchn_interdomain(d1, chan1, d2, chan2);
 }
 
 static inline void xsm_evtchn_close_post (struct evtchn *chn)
 {
-    xsm_ops->evtchn_close_post(chn);
+    xsm_ops.evtchn_close_post(chn);
 }
 
 static inline int xsm_evtchn_send (xsm_default_t def, struct domain *d, struct evtchn *chn)
 {
-    return xsm_ops->evtchn_send(d, chn);
+    return xsm_ops.evtchn_send(d, chn);
 }
 
 static inline int xsm_evtchn_status (xsm_default_t def, struct domain *d, struct evtchn *chn)
 {
-    return xsm_ops->evtchn_status(d, chn);
+    return xsm_ops.evtchn_status(d, chn);
 }
 
 static inline int xsm_evtchn_reset (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->evtchn_reset(d1, d2);
+    return xsm_ops.evtchn_reset(d1, d2);
 }
 
 static inline int xsm_grant_mapref (xsm_default_t def, struct domain *d1, struct domain *d2,
                                                                 uint32_t flags)
 {
-    return xsm_ops->grant_mapref(d1, d2, flags);
+    return xsm_ops.grant_mapref(d1, d2, flags);
 }
 
 static inline int xsm_grant_unmapref (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->grant_unmapref(d1, d2);
+    return xsm_ops.grant_unmapref(d1, d2);
 }
 
 static inline int xsm_grant_setup (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->grant_setup(d1, d2);
+    return xsm_ops.grant_setup(d1, d2);
 }
 
 static inline int xsm_grant_transfer (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->grant_transfer(d1, d2);
+    return xsm_ops.grant_transfer(d1, d2);
 }
 
 static inline int xsm_grant_copy (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->grant_copy(d1, d2);
+    return xsm_ops.grant_copy(d1, d2);
 }
 
 static inline int xsm_grant_query_size (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->grant_query_size(d1, d2);
+    return xsm_ops.grant_query_size(d1, d2);
 }
 
 static inline int xsm_alloc_security_domain (struct domain *d)
 {
-    return xsm_ops->alloc_security_domain(d);
+    return xsm_ops.alloc_security_domain(d);
 }
 
 static inline void xsm_free_security_domain (struct domain *d)
 {
-    xsm_ops->free_security_domain(d);
+    xsm_ops.free_security_domain(d);
 }
 
 static inline int xsm_alloc_security_evtchns(
     struct evtchn chn[], unsigned int nr)
 {
-    return xsm_ops->alloc_security_evtchns(chn, nr);
+    return xsm_ops.alloc_security_evtchns(chn, nr);
 }
 
 static inline void xsm_free_security_evtchns(
     struct evtchn chn[], unsigned int nr)
 {
-    xsm_ops->free_security_evtchns(chn, nr);
+    xsm_ops.free_security_evtchns(chn, nr);
 }
 
 static inline char *xsm_show_security_evtchn (struct domain *d, const struct evtchn *chn)
 {
-    return xsm_ops->show_security_evtchn(d, chn);
+    return xsm_ops.show_security_evtchn(d, chn);
 }
 
 static inline int xsm_init_hardware_domain (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->init_hardware_domain(d);
+    return xsm_ops.init_hardware_domain(d);
 }
 
 static inline int xsm_get_pod_target (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->get_pod_target(d);
+    return xsm_ops.get_pod_target(d);
 }
 
 static inline int xsm_set_pod_target (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->set_pod_target(d);
+    return xsm_ops.set_pod_target(d);
 }
 
 static inline int xsm_memory_exchange (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->memory_exchange(d);
+    return xsm_ops.memory_exchange(d);
 }
 
 static inline int xsm_memory_adjust_reservation (xsm_default_t def, struct domain *d1, struct
                                                                     domain *d2)
 {
-    return xsm_ops->memory_adjust_reservation(d1, d2);
+    return xsm_ops.memory_adjust_reservation(d1, d2);
 }
 
 static inline int xsm_memory_stat_reservation (xsm_default_t def, struct domain *d1,
                                                             struct domain *d2)
 {
-    return xsm_ops->memory_stat_reservation(d1, d2);
+    return xsm_ops.memory_stat_reservation(d1, d2);
 }
 
 static inline int xsm_memory_pin_page(xsm_default_t def, struct domain *d1, struct domain *d2,
                                       struct page_info *page)
 {
-    return xsm_ops->memory_pin_page(d1, d2, page);
+    return xsm_ops.memory_pin_page(d1, d2, page);
 }
 
 static inline int xsm_add_to_physmap(xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->add_to_physmap(d1, d2);
+    return xsm_ops.add_to_physmap(d1, d2);
 }
 
 static inline int xsm_remove_from_physmap(xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->remove_from_physmap(d1, d2);
+    return xsm_ops.remove_from_physmap(d1, d2);
 }
 
 static inline int xsm_map_gmfn_foreign (xsm_default_t def, struct domain *d, struct domain *t)
 {
-    return xsm_ops->map_gmfn_foreign(d, t);
+    return xsm_ops.map_gmfn_foreign(d, t);
 }
 
 static inline int xsm_claim_pages(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->claim_pages(d);
+    return xsm_ops.claim_pages(d);
 }
 
 static inline int xsm_console_io (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops->console_io(d, cmd);
+    return xsm_ops.console_io(d, cmd);
 }
 
 static inline int xsm_profile (xsm_default_t def, struct domain *d, int op)
 {
-    return xsm_ops->profile(d, op);
+    return xsm_ops.profile(d, op);
 }
 
 static inline int xsm_kexec (xsm_default_t def)
 {
-    return xsm_ops->kexec();
+    return xsm_ops.kexec();
 }
 
 static inline int xsm_schedop_shutdown (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops->schedop_shutdown(d1, d2);
+    return xsm_ops.schedop_shutdown(d1, d2);
 }
 
 static inline char *xsm_show_irq_sid (int irq)
 {
-    return xsm_ops->show_irq_sid(irq);
+    return xsm_ops.show_irq_sid(irq);
 }
 
 static inline int xsm_map_domain_pirq (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->map_domain_pirq(d);
+    return xsm_ops.map_domain_pirq(d);
 }
 
 static inline int xsm_map_domain_irq (xsm_default_t def, struct domain *d, int irq, void *data)
 {
-    return xsm_ops->map_domain_irq(d, irq, data);
+    return xsm_ops.map_domain_irq(d, irq, data);
 }
 
 static inline int xsm_unmap_domain_pirq (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->unmap_domain_pirq(d);
+    return xsm_ops.unmap_domain_pirq(d);
 }
 
 static inline int xsm_unmap_domain_irq (xsm_default_t def, struct domain *d, int irq, void *data)
 {
-    return xsm_ops->unmap_domain_irq(d, irq, data);
+    return xsm_ops.unmap_domain_irq(d, irq, data);
 }
 
 static inline int xsm_bind_pt_irq(xsm_default_t def, struct domain *d,
                                   struct xen_domctl_bind_pt_irq *bind)
 {
-    return xsm_ops->bind_pt_irq(d, bind);
+    return xsm_ops.bind_pt_irq(d, bind);
 }
 
 static inline int xsm_unbind_pt_irq(xsm_default_t def, struct domain *d,
                                     struct xen_domctl_bind_pt_irq *bind)
 {
-    return xsm_ops->unbind_pt_irq(d, bind);
+    return xsm_ops.unbind_pt_irq(d, bind);
 }
 
 static inline int xsm_irq_permission (xsm_default_t def, struct domain *d, int pirq, uint8_t allow)
 {
-    return xsm_ops->irq_permission(d, pirq, allow);
+    return xsm_ops.irq_permission(d, pirq, allow);
 }
 
 static inline int xsm_iomem_permission (xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
-    return xsm_ops->iomem_permission(d, s, e, allow);
+    return xsm_ops.iomem_permission(d, s, e, allow);
 }
 
 static inline int xsm_iomem_mapping (xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
-    return xsm_ops->iomem_mapping(d, s, e, allow);
+    return xsm_ops.iomem_mapping(d, s, e, allow);
 }
 
 static inline int xsm_pci_config_permission (xsm_default_t def, struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access)
 {
-    return xsm_ops->pci_config_permission(d, machine_bdf, start, end, access);
+    return xsm_ops.pci_config_permission(d, machine_bdf, start, end, access);
 }
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
 static inline int xsm_get_device_group(xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops->get_device_group(machine_bdf);
+    return xsm_ops.get_device_group(machine_bdf);
 }
 
 static inline int xsm_assign_device(xsm_default_t def, struct domain *d, uint32_t machine_bdf)
 {
-    return xsm_ops->assign_device(d, machine_bdf);
+    return xsm_ops.assign_device(d, machine_bdf);
 }
 
 static inline int xsm_deassign_device(xsm_default_t def, struct domain *d, uint32_t machine_bdf)
 {
-    return xsm_ops->deassign_device(d, machine_bdf);
+    return xsm_ops.deassign_device(d, machine_bdf);
 }
 #endif /* HAS_PASSTHROUGH && HAS_PCI) */
 
@@ -487,240 +487,240 @@ static inline int xsm_deassign_device(xsm_default_t def, struct domain *d, uint3
 static inline int xsm_assign_dtdevice(xsm_default_t def, struct domain *d,
                                       const char *dtpath)
 {
-    return xsm_ops->assign_dtdevice(d, dtpath);
+    return xsm_ops.assign_dtdevice(d, dtpath);
 }
 
 static inline int xsm_deassign_dtdevice(xsm_default_t def, struct domain *d,
                                         const char *dtpath)
 {
-    return xsm_ops->deassign_dtdevice(d, dtpath);
+    return xsm_ops.deassign_dtdevice(d, dtpath);
 }
 
 #endif /* HAS_PASSTHROUGH && HAS_DEVICE_TREE */
 
 static inline int xsm_resource_plug_pci (xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops->resource_plug_pci(machine_bdf);
+    return xsm_ops.resource_plug_pci(machine_bdf);
 }
 
 static inline int xsm_resource_unplug_pci (xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops->resource_unplug_pci(machine_bdf);
+    return xsm_ops.resource_unplug_pci(machine_bdf);
 }
 
 static inline int xsm_resource_plug_core (xsm_default_t def)
 {
-    return xsm_ops->resource_plug_core();
+    return xsm_ops.resource_plug_core();
 }
 
 static inline int xsm_resource_unplug_core (xsm_default_t def)
 {
-    return xsm_ops->resource_unplug_core();
+    return xsm_ops.resource_unplug_core();
 }
 
 static inline int xsm_resource_setup_pci (xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops->resource_setup_pci(machine_bdf);
+    return xsm_ops.resource_setup_pci(machine_bdf);
 }
 
 static inline int xsm_resource_setup_gsi (xsm_default_t def, int gsi)
 {
-    return xsm_ops->resource_setup_gsi(gsi);
+    return xsm_ops.resource_setup_gsi(gsi);
 }
 
 static inline int xsm_resource_setup_misc (xsm_default_t def)
 {
-    return xsm_ops->resource_setup_misc();
+    return xsm_ops.resource_setup_misc();
 }
 
 static inline int xsm_page_offline(xsm_default_t def, uint32_t cmd)
 {
-    return xsm_ops->page_offline(cmd);
+    return xsm_ops.page_offline(cmd);
 }
 
 static inline int xsm_hypfs_op(xsm_default_t def)
 {
-    return xsm_ops->hypfs_op();
+    return xsm_ops.hypfs_op();
 }
 
 static inline long xsm_do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
-    return xsm_ops->do_xsm_op(op);
+    return xsm_ops.do_xsm_op(op);
 }
 
 #ifdef CONFIG_COMPAT
 static inline int xsm_do_compat_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
-    return xsm_ops->do_compat_op(op);
+    return xsm_ops.do_compat_op(op);
 }
 #endif
 
 static inline int xsm_hvm_param (xsm_default_t def, struct domain *d, unsigned long op)
 {
-    return xsm_ops->hvm_param(d, op);
+    return xsm_ops.hvm_param(d, op);
 }
 
 static inline int xsm_hvm_control(xsm_default_t def, struct domain *d, unsigned long op)
 {
-    return xsm_ops->hvm_control(d, op);
+    return xsm_ops.hvm_control(d, op);
 }
 
 static inline int xsm_hvm_param_altp2mhvm (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->hvm_param_altp2mhvm(d);
+    return xsm_ops.hvm_param_altp2mhvm(d);
 }
 
 static inline int xsm_hvm_altp2mhvm_op (xsm_default_t def, struct domain *d, uint64_t mode, uint32_t op)
 {
-    return xsm_ops->hvm_altp2mhvm_op(d, mode, op);
+    return xsm_ops.hvm_altp2mhvm_op(d, mode, op);
 }
 
 static inline int xsm_get_vnumainfo (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->get_vnumainfo(d);
+    return xsm_ops.get_vnumainfo(d);
 }
 
 static inline int xsm_vm_event_control (xsm_default_t def, struct domain *d, int mode, int op)
 {
-    return xsm_ops->vm_event_control(d, mode, op);
+    return xsm_ops.vm_event_control(d, mode, op);
 }
 
 #ifdef CONFIG_MEM_ACCESS
 static inline int xsm_mem_access (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->mem_access(d);
+    return xsm_ops.mem_access(d);
 }
 #endif
 
 #ifdef CONFIG_MEM_PAGING
 static inline int xsm_mem_paging (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->mem_paging(d);
+    return xsm_ops.mem_paging(d);
 }
 #endif
 
 #ifdef CONFIG_MEM_SHARING
 static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->mem_sharing(d);
+    return xsm_ops.mem_sharing(d);
 }
 #endif
 
 static inline int xsm_platform_op (xsm_default_t def, uint32_t op)
 {
-    return xsm_ops->platform_op(op);
+    return xsm_ops.platform_op(op);
 }
 
 #ifdef CONFIG_X86
 static inline int xsm_do_mca(xsm_default_t def)
 {
-    return xsm_ops->do_mca();
+    return xsm_ops.do_mca();
 }
 
 static inline int xsm_shadow_control (xsm_default_t def, struct domain *d, uint32_t op)
 {
-    return xsm_ops->shadow_control(d, op);
+    return xsm_ops.shadow_control(d, op);
 }
 
 static inline int xsm_mem_sharing_op (xsm_default_t def, struct domain *d, struct domain *cd, int op)
 {
-    return xsm_ops->mem_sharing_op(d, cd, op);
+    return xsm_ops.mem_sharing_op(d, cd, op);
 }
 
 static inline int xsm_apic (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops->apic(d, cmd);
+    return xsm_ops.apic(d, cmd);
 }
 
 static inline int xsm_memtype (xsm_default_t def, uint32_t access)
 {
-    return xsm_ops->memtype(access);
+    return xsm_ops.memtype(access);
 }
 
 static inline int xsm_machine_memory_map(xsm_default_t def)
 {
-    return xsm_ops->machine_memory_map();
+    return xsm_ops.machine_memory_map();
 }
 
 static inline int xsm_domain_memory_map(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->domain_memory_map(d);
+    return xsm_ops.domain_memory_map(d);
 }
 
 static inline int xsm_mmu_update (xsm_default_t def, struct domain *d, struct domain *t,
                                   struct domain *f, uint32_t flags)
 {
-    return xsm_ops->mmu_update(d, t, f, flags);
+    return xsm_ops.mmu_update(d, t, f, flags);
 }
 
 static inline int xsm_mmuext_op (xsm_default_t def, struct domain *d, struct domain *f)
 {
-    return xsm_ops->mmuext_op(d, f);
+    return xsm_ops.mmuext_op(d, f);
 }
 
 static inline int xsm_update_va_mapping(xsm_default_t def, struct domain *d, struct domain *f,
                                                             l1_pgentry_t pte)
 {
-    return xsm_ops->update_va_mapping(d, f, pte);
+    return xsm_ops.update_va_mapping(d, f, pte);
 }
 
 static inline int xsm_priv_mapping(xsm_default_t def, struct domain *d, struct domain *t)
 {
-    return xsm_ops->priv_mapping(d, t);
+    return xsm_ops.priv_mapping(d, t);
 }
 
 static inline int xsm_ioport_permission (xsm_default_t def, struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
-    return xsm_ops->ioport_permission(d, s, e, allow);
+    return xsm_ops.ioport_permission(d, s, e, allow);
 }
 
 static inline int xsm_ioport_mapping (xsm_default_t def, struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
-    return xsm_ops->ioport_mapping(d, s, e, allow);
+    return xsm_ops.ioport_mapping(d, s, e, allow);
 }
 
 static inline int xsm_pmu_op (xsm_default_t def, struct domain *d, unsigned int op)
 {
-    return xsm_ops->pmu_op(d, op);
+    return xsm_ops.pmu_op(d, op);
 }
 
 #endif /* CONFIG_X86 */
 
 static inline int xsm_dm_op(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->dm_op(d);
+    return xsm_ops.dm_op(d);
 }
 
 static inline int xsm_xen_version (xsm_default_t def, uint32_t op)
 {
-    return xsm_ops->xen_version(op);
+    return xsm_ops.xen_version(op);
 }
 
 static inline int xsm_domain_resource_map(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops->domain_resource_map(d);
+    return xsm_ops.domain_resource_map(d);
 }
 
 #ifdef CONFIG_ARGO
 static inline int xsm_argo_enable(const struct domain *d)
 {
-    return xsm_ops->argo_enable(d);
+    return xsm_ops.argo_enable(d);
 }
 
 static inline int xsm_argo_register_single_source(const struct domain *d,
                                                   const struct domain *t)
 {
-    return xsm_ops->argo_register_single_source(d, t);
+    return xsm_ops.argo_register_single_source(d, t);
 }
 
 static inline int xsm_argo_register_any_source(const struct domain *d)
 {
-    return xsm_ops->argo_register_any_source(d);
+    return xsm_ops.argo_register_any_source(d);
 }
 
 static inline int xsm_argo_send(const struct domain *d, const struct domain *t)
 {
-    return xsm_ops->argo_send(d, t);
+    return xsm_ops.argo_send(d, t);
 }
 
 #endif /* CONFIG_ARGO */
@@ -747,16 +747,14 @@ extern int xsm_dt_policy_init(void **policy_buffer, size_t *policy_size);
 extern bool has_xsm_magic(paddr_t);
 #endif
 
-extern int register_xsm(struct xsm_operations *ops);
-
-extern struct xsm_operations dummy_xsm_ops;
 extern void xsm_fixup_ops(struct xsm_operations *ops);
 
 #ifdef CONFIG_XSM_FLASK
-extern void flask_init(const void *policy_buffer, size_t policy_size);
+extern struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size);
 #else
-static inline void flask_init(const void *policy_buffer, size_t policy_size)
+static inline struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size)
 {
+    return NULL;
 }
 #endif
 
@@ -766,9 +764,12 @@ extern const unsigned int xsm_flask_init_policy_size;
 #endif
 
 #ifdef CONFIG_XSM_SILO
-extern void silo_init(void);
+extern struct xsm_operations *silo_init(void);
 #else
-static inline void silo_init(void) {}
+static inline struct xsm_operations *silo_init(void)
+{
+    return NULL;
+}
 #endif
 
 #else /* CONFIG_XSM */
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index de44b10130..066694763a 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -13,8 +13,6 @@
 #define XSM_NO_WRAPPERS
 #include <xsm/dummy.h>
 
-struct xsm_operations dummy_xsm_ops;
-
 #define set_to_dummy_if_null(ops, function)                            \
     do {                                                               \
         if ( !ops->function )                                          \
diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
index 01e52138a1..32e079d676 100644
--- a/xen/xsm/flask/flask_op.c
+++ b/xen/xsm/flask/flask_op.c
@@ -226,6 +226,7 @@ static int flask_security_sid(struct xen_flask_sid_context *arg)
 static int flask_disable(void)
 {
     static int flask_disabled = 0;
+    struct xsm_operations default_ops;
 
     if ( ss_initialized )
     {
@@ -244,7 +245,8 @@ static int flask_disable(void)
     flask_disabled = 1;
 
     /* Reset xsm_ops to the original module. */
-    xsm_ops = &dummy_xsm_ops;
+    xsm_fixup_ops(&default_ops);
+    xsm_ops = default_ops;
 
     return 0;
 }
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index f1a1217c98..a3a88aa8ed 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -1883,7 +1883,8 @@ static struct xsm_operations flask_ops = {
 #endif
 };
 
-void __init flask_init(const void *policy_buffer, size_t policy_size)
+struct xsm_operations __init *flask_init(const void *policy_buffer,
+					 size_t policy_size)
 {
     int ret = -ENOENT;
 
@@ -1891,7 +1892,7 @@ void __init flask_init(const void *policy_buffer, size_t policy_size)
     {
     case FLASK_BOOTPARAM_DISABLED:
         printk(XENLOG_INFO "Flask: Disabled at boot.\n");
-        return;
+        return NULL;
 
     case FLASK_BOOTPARAM_PERMISSIVE:
         flask_enforcing = 0;
@@ -1908,9 +1909,6 @@ void __init flask_init(const void *policy_buffer, size_t policy_size)
 
     avc_init();
 
-    if ( register_xsm(&flask_ops) )
-        panic("Flask: Unable to register with XSM\n");
-
     if ( policy_size && flask_bootparam != FLASK_BOOTPARAM_LATELOAD )
         ret = security_load_policy(policy_buffer, policy_size);
 
@@ -1923,6 +1921,9 @@ void __init flask_init(const void *policy_buffer, size_t policy_size)
         printk(XENLOG_INFO "Flask:  Starting in enforcing mode.\n");
     else
         printk(XENLOG_INFO "Flask:  Starting in permissive mode.\n");
+
+    return &flask_ops;
+
 }
 
 /*
diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c
index fc2ca5cd2d..808350f122 100644
--- a/xen/xsm/silo.c
+++ b/xen/xsm/silo.c
@@ -112,12 +112,11 @@ static struct xsm_operations silo_xsm_ops = {
 #endif
 };
 
-void __init silo_init(void)
+struct xsm_operations __init *silo_init(void)
 {
     printk("Initialising XSM SILO mode\n");
 
-    if ( register_xsm(&silo_xsm_ops) )
-        panic("SILO: Unable to register with XSM\n");
+    return &silo_xsm_ops;
 }
 
 /*
diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
index 5eab21e1b1..7265f742e9 100644
--- a/xen/xsm/xsm_core.c
+++ b/xen/xsm/xsm_core.c
@@ -28,9 +28,17 @@
 #include <asm/setup.h>
 #endif
 
-#define XSM_FRAMEWORK_VERSION    "1.0.0"
+#define XSM_FRAMEWORK_VERSION    "1.0.1"
 
-struct xsm_operations *xsm_ops;
+struct xsm_operations xsm_ops;
+
+enum xsm_ops_state {
+    XSM_OPS_UNREGISTERED,
+    XSM_OPS_REG_FAILED,
+    XSM_OPS_REGISTERED,
+};
+
+static enum xsm_ops_state xsm_ops_registered = XSM_OPS_UNREGISTERED;
 
 enum xsm_bootparam {
     XSM_BOOTPARAM_DUMMY,
@@ -68,17 +76,10 @@ static int __init parse_xsm_param(const char *s)
 }
 custom_param("xsm", parse_xsm_param);
 
-static inline int verify(struct xsm_operations *ops)
-{
-    /* verify the security_operations structure exists */
-    if ( !ops )
-        return -EINVAL;
-    xsm_fixup_ops(ops);
-    return 0;
-}
-
 static int __init xsm_core_init(const void *policy_buffer, size_t policy_size)
 {
+	struct xsm_operations *mod_ops;
+
 #ifdef CONFIG_XSM_FLASK_POLICY
     if ( policy_size == 0 )
     {
@@ -87,25 +88,35 @@ static int __init xsm_core_init(const void *policy_buffer, size_t policy_size)
     }
 #endif
 
-    if ( verify(&dummy_xsm_ops) )
+    if ( xsm_ops_registered != XSM_OPS_UNREGISTERED )
     {
-        printk(XENLOG_ERR "Could not verify dummy_xsm_ops structure\n");
+        printk(XENLOG_ERR
+               "Could not init XSM, xsm_ops register already attempted\n");
         return -EIO;
     }
 
-    xsm_ops = &dummy_xsm_ops;
-
     switch ( xsm_bootparam )
     {
     case XSM_BOOTPARAM_DUMMY:
+        xsm_ops_registered = XSM_OPS_REGISTERED;
         break;
 
     case XSM_BOOTPARAM_FLASK:
-        flask_init(policy_buffer, policy_size);
+        mod_ops = flask_init(policy_buffer, policy_size);
+	if ( mod_ops )
+	{
+		xsm_ops_registered = XSM_OPS_REGISTERED;
+		xsm_ops = *mod_ops;
+	}
         break;
 
     case XSM_BOOTPARAM_SILO:
-        silo_init();
+        mod_ops = silo_init();
+	if ( mod_ops )
+	{
+		xsm_ops_registered = XSM_OPS_REGISTERED;
+		xsm_ops = *mod_ops;
+	}
         break;
 
     default:
@@ -113,6 +124,17 @@ static int __init xsm_core_init(const void *policy_buffer, size_t policy_size)
         break;
     }
 
+    /*
+     * This handles three cases,
+     *   - dummy policy module was selected
+     *   - a policy module  does not provide all handlers
+     *   - a policy module failed to init
+     */
+    xsm_fixup_ops(&xsm_ops);
+
+    if ( xsm_ops_registered != XSM_OPS_REGISTERED )
+        xsm_ops_registered = XSM_OPS_REG_FAILED;
+
     return 0;
 }
 
@@ -195,22 +217,6 @@ bool __init has_xsm_magic(paddr_t start)
 }
 #endif
 
-int __init register_xsm(struct xsm_operations *ops)
-{
-    if ( verify(ops) )
-    {
-        printk(XENLOG_ERR "Could not verify xsm_operations structure\n");
-        return -EINVAL;
-    }
-
-    if ( xsm_ops != &dummy_xsm_ops )
-        return -EAGAIN;
-
-    xsm_ops = ops;
-
-    return 0;
-}
-
 #endif
 
 long do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154766.285890 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wd-0000JF-Hu; Mon, 12 Jul 2021 20:27:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154766.285890; Mon, 12 Jul 2021 20:27:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wd-0000J8-EB; Mon, 12 Jul 2021 20:27:35 +0000
Received: by outflank-mailman (input) for mailman id 154766;
 Mon, 12 Jul 2021 20:27:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32Wc-0000G7-8D
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:34 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 94fe06b5-e34f-11eb-8706-12813bfff9fa;
 Mon, 12 Jul 2021 20:27:32 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121626885671.5433375318461;
 Mon, 12 Jul 2021 13:27:06 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 94fe06b5-e34f-11eb-8706-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121629; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=CPvP9wgoNh6e900cWHvPfPJAqIhFY/wuJyLEBOu8t9t9WRfyXknfQETgfOIlgNPUZop5fkKHKbtaIy+QadstSZhxt7fu8art7m/Zo2ult0YPOMBWJKAEGk8yipZD2alZz9brtAhicKUfu27Ayf8uJoOnIVuzI1nPBIn9hVKnaVs=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121629; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=d8fvO/Y/tL6tNfEYDxIkBWTObzNZmpuF9LQtKCVWxKw=; 
	b=cjS+iWNY2hiV2AfL9+jkkvK8QqDbE2aZxk7TU6K7UxyJhWjq5GJobc3V5X7fREi0rcGY/bjr33dpOYI+R12eUViRrwsWL4dGsW+TRTJM1k0yhxzog9aokK+nfytrgYYcFXtP+KTjWNaz4DlRQn/9TW8zLq5AogiSO2G+7b3ATw8=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121629;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=d8fvO/Y/tL6tNfEYDxIkBWTObzNZmpuF9LQtKCVWxKw=;
	b=qth+65wrriwEHe5ifQ45PT8aEiUOHvNw5rTEkNvGHsrz6u7y6I5MwScUdXBi/ne4
	YzRXIKJInl7kMDbZz1/1RXeV3U7dzv65zW+kQ1VWIj43qvpXXbATsmLp4RQgMfvX502
	nUEmnxBZHxcMkG4PN/mhr0OF+QQpSZsbc6q4ha3g=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 03/10] xsm: remove the ability to disable flask
Date: Mon, 12 Jul 2021 16:32:26 -0400
Message-Id: <20210712203233.20289-4-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

The flask XSM module provided the ability to switch from flask back to
the dummy XSM module during runtime. With this removal the only way to
switch between XSM modules is at boot time.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/xsm/flask/flask_op.c | 32 --------------------------------
 1 file changed, 32 deletions(-)

diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
index 32e079d676..f41c025391 100644
--- a/xen/xsm/flask/flask_op.c
+++ b/xen/xsm/flask/flask_op.c
@@ -223,34 +223,6 @@ static int flask_security_sid(struct xen_flask_sid_context *arg)
 
 #ifndef COMPAT
 
-static int flask_disable(void)
-{
-    static int flask_disabled = 0;
-    struct xsm_operations default_ops;
-
-    if ( ss_initialized )
-    {
-        /* Not permitted after initial policy load. */
-        return -EINVAL;
-    }
-
-    if ( flask_disabled )
-    {
-        /* Only do this once. */
-        return -EINVAL;
-    }
-
-    printk("Flask:  Disabled at runtime.\n");
-
-    flask_disabled = 1;
-
-    /* Reset xsm_ops to the original module. */
-    xsm_fixup_ops(&default_ops);
-    xsm_ops = default_ops;
-
-    return 0;
-}
-
 static int flask_security_setavc_threshold(struct xen_flask_setavc_threshold *arg)
 {
     int rv = 0;
@@ -700,10 +672,6 @@ ret_t do_flask_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_flask_op)
         rv = flask_mls_enabled;
         break;    
 
-    case FLASK_DISABLE:
-        rv = flask_disable();
-        break;
-
     case FLASK_GETAVC_THRESHOLD:
         rv = avc_cache_threshold;
         break;
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154768.285901 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wi-0000nZ-RY; Mon, 12 Jul 2021 20:27:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154768.285901; Mon, 12 Jul 2021 20:27:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wi-0000nQ-O3; Mon, 12 Jul 2021 20:27:40 +0000
Received: by outflank-mailman (input) for mailman id 154768;
 Mon, 12 Jul 2021 20:27:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32Wh-0000G7-8I
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:39 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 97c07288-e34f-11eb-8706-12813bfff9fa;
 Mon, 12 Jul 2021 20:27:35 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121627762864.2744382381806;
 Mon, 12 Jul 2021 13:27:07 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 97c07288-e34f-11eb-8706-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121630; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=JtXw0c/QAuWlMItpCxtOcMSakPlMF5JUK6OQ86TinynIVBZg9Rdd3BwTtMh0ccfDwEKLlAI+di3mTWdbqtSyfixZo6UVdfVWTQeflKUxwYCbVpU9dJRSTvUfedrfCoiNHxa5gtZaC9MJ4ydVYJA5jFCsnzn6TswXdJRaN68smW4=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121630; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=EVI3r5/NVdfiqnv6zKBaOaVGS6sc4GpYB+jbYAB3278=; 
	b=M1fotNt3dNX7csmmnXTGV5dwbpop29L39X2/imz+4vy1CJGpG91ZfYo1Vk+KuisSy/dIaOQOheHVPwHenuLREURx6YiwcBpDKrwOGyoXMmUb3kuxOJ6wPMdu88dawRIQfh8oT8Jy2rR0t28NkJl06A8Yzw5jlAPXYbu4Xcf0d7Y=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121630;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=EVI3r5/NVdfiqnv6zKBaOaVGS6sc4GpYB+jbYAB3278=;
	b=ubqOetPqQGbufsPD7ZLy2dKTyfHbgfRklIBVrjt8pwiEjtlEMABZHYD9i1/4Y9bW
	+aR6rVby5WFmjcACdiae2sGzn+ge+oILk73//5Q9LRIy0KbIFBzEMZJktC92QQ0A6YW
	/TDq64zyAKpg5e2kq0makiJJqpCPQntugTQbPNsQ=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 04/10] xsm: convert xsm_ops hook calls to alternative call
Date: Mon, 12 Jul 2021 16:32:27 -0400
Message-Id: <20210712203233.20289-5-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

To reduce retpolines convert all the pointer function calls of the
xsm_ops hooks over to the alternative_call infrastructure.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/include/xsm/xsm.h | 195 +++++++++++++++++++++---------------------
 1 file changed, 99 insertions(+), 96 deletions(-)

diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index a8805f514b..a39b5dc42f 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -15,6 +15,9 @@
 #ifndef __XSM_H__
 #define __XSM_H__
 
+#ifdef CONFIG_XSM
+#include <xen/alternative-call.h>
+#endif
 #include <xen/sched.h>
 #include <xen/multiboot.h>
 
@@ -198,288 +201,288 @@ extern struct xsm_operations xsm_ops;
 static inline void xsm_security_domaininfo (struct domain *d,
                                         struct xen_domctl_getdomaininfo *info)
 {
-    xsm_ops.security_domaininfo(d, info);
+    alternative_vcall(xsm_ops.security_domaininfo, d, info);
 }
 
 static inline int xsm_domain_create (xsm_default_t def, struct domain *d, u32 ssidref)
 {
-    return xsm_ops.domain_create(d, ssidref);
+    return alternative_call(xsm_ops.domain_create, d, ssidref);
 }
 
 static inline int xsm_getdomaininfo (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.getdomaininfo(d);
+    return alternative_call(xsm_ops.getdomaininfo, d);
 }
 
 static inline int xsm_domctl_scheduler_op (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops.domctl_scheduler_op(d, cmd);
+    return alternative_call(xsm_ops.domctl_scheduler_op, d, cmd);
 }
 
 static inline int xsm_sysctl_scheduler_op (xsm_default_t def, int cmd)
 {
-    return xsm_ops.sysctl_scheduler_op(cmd);
+    return alternative_call(xsm_ops.sysctl_scheduler_op, cmd);
 }
 
 static inline int xsm_set_target (xsm_default_t def, struct domain *d, struct domain *e)
 {
-    return xsm_ops.set_target(d, e);
+    return alternative_call(xsm_ops.set_target, d, e);
 }
 
 static inline int xsm_domctl (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops.domctl(d, cmd);
+    return alternative_call(xsm_ops.domctl, d, cmd);
 }
 
 static inline int xsm_sysctl (xsm_default_t def, int cmd)
 {
-    return xsm_ops.sysctl(cmd);
+    return alternative_call(xsm_ops.sysctl, cmd);
 }
 
 static inline int xsm_readconsole (xsm_default_t def, uint32_t clear)
 {
-    return xsm_ops.readconsole(clear);
+    return alternative_call(xsm_ops.readconsole, clear);
 }
 
 static inline int xsm_evtchn_unbound (xsm_default_t def, struct domain *d1, struct evtchn *chn,
                                                                     domid_t id2)
 {
-    return xsm_ops.evtchn_unbound(d1, chn, id2);
+    return alternative_call(xsm_ops.evtchn_unbound, d1, chn, id2);
 }
 
 static inline int xsm_evtchn_interdomain (xsm_default_t def, struct domain *d1,
                 struct evtchn *chan1, struct domain *d2, struct evtchn *chan2)
 {
-    return xsm_ops.evtchn_interdomain(d1, chan1, d2, chan2);
+    return alternative_call(xsm_ops.evtchn_interdomain, d1, chan1, d2, chan2);
 }
 
 static inline void xsm_evtchn_close_post (struct evtchn *chn)
 {
-    xsm_ops.evtchn_close_post(chn);
+    alternative_vcall(xsm_ops.evtchn_close_post, chn);
 }
 
 static inline int xsm_evtchn_send (xsm_default_t def, struct domain *d, struct evtchn *chn)
 {
-    return xsm_ops.evtchn_send(d, chn);
+    return alternative_call(xsm_ops.evtchn_send, d, chn);
 }
 
 static inline int xsm_evtchn_status (xsm_default_t def, struct domain *d, struct evtchn *chn)
 {
-    return xsm_ops.evtchn_status(d, chn);
+    return alternative_call(xsm_ops.evtchn_status, d, chn);
 }
 
 static inline int xsm_evtchn_reset (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.evtchn_reset(d1, d2);
+    return alternative_call(xsm_ops.evtchn_reset, d1, d2);
 }
 
 static inline int xsm_grant_mapref (xsm_default_t def, struct domain *d1, struct domain *d2,
                                                                 uint32_t flags)
 {
-    return xsm_ops.grant_mapref(d1, d2, flags);
+    return alternative_call(xsm_ops.grant_mapref, d1, d2, flags);
 }
 
 static inline int xsm_grant_unmapref (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.grant_unmapref(d1, d2);
+    return alternative_call(xsm_ops.grant_unmapref, d1, d2);
 }
 
 static inline int xsm_grant_setup (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.grant_setup(d1, d2);
+    return alternative_call(xsm_ops.grant_setup, d1, d2);
 }
 
 static inline int xsm_grant_transfer (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.grant_transfer(d1, d2);
+    return alternative_call(xsm_ops.grant_transfer, d1, d2);
 }
 
 static inline int xsm_grant_copy (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.grant_copy(d1, d2);
+    return alternative_call(xsm_ops.grant_copy, d1, d2);
 }
 
 static inline int xsm_grant_query_size (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.grant_query_size(d1, d2);
+    return alternative_call(xsm_ops.grant_query_size, d1, d2);
 }
 
 static inline int xsm_alloc_security_domain (struct domain *d)
 {
-    return xsm_ops.alloc_security_domain(d);
+    return alternative_call(xsm_ops.alloc_security_domain, d);
 }
 
 static inline void xsm_free_security_domain (struct domain *d)
 {
-    xsm_ops.free_security_domain(d);
+    alternative_vcall(xsm_ops.free_security_domain, d);
 }
 
 static inline int xsm_alloc_security_evtchns(
     struct evtchn chn[], unsigned int nr)
 {
-    return xsm_ops.alloc_security_evtchns(chn, nr);
+    return alternative_call(xsm_ops.alloc_security_evtchns, chn, nr);
 }
 
 static inline void xsm_free_security_evtchns(
     struct evtchn chn[], unsigned int nr)
 {
-    xsm_ops.free_security_evtchns(chn, nr);
+    alternative_vcall(xsm_ops.free_security_evtchns, chn, nr);
 }
 
 static inline char *xsm_show_security_evtchn (struct domain *d, const struct evtchn *chn)
 {
-    return xsm_ops.show_security_evtchn(d, chn);
+    return alternative_call(xsm_ops.show_security_evtchn, d, chn);
 }
 
 static inline int xsm_init_hardware_domain (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.init_hardware_domain(d);
+    return alternative_call(xsm_ops.init_hardware_domain, d);
 }
 
 static inline int xsm_get_pod_target (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.get_pod_target(d);
+    return alternative_call(xsm_ops.get_pod_target, d);
 }
 
 static inline int xsm_set_pod_target (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.set_pod_target(d);
+    return alternative_call(xsm_ops.set_pod_target, d);
 }
 
 static inline int xsm_memory_exchange (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.memory_exchange(d);
+    return alternative_call(xsm_ops.memory_exchange, d);
 }
 
 static inline int xsm_memory_adjust_reservation (xsm_default_t def, struct domain *d1, struct
                                                                     domain *d2)
 {
-    return xsm_ops.memory_adjust_reservation(d1, d2);
+    return alternative_call(xsm_ops.memory_adjust_reservation, d1, d2);
 }
 
 static inline int xsm_memory_stat_reservation (xsm_default_t def, struct domain *d1,
                                                             struct domain *d2)
 {
-    return xsm_ops.memory_stat_reservation(d1, d2);
+    return alternative_call(xsm_ops.memory_stat_reservation, d1, d2);
 }
 
 static inline int xsm_memory_pin_page(xsm_default_t def, struct domain *d1, struct domain *d2,
                                       struct page_info *page)
 {
-    return xsm_ops.memory_pin_page(d1, d2, page);
+    return alternative_call(xsm_ops.memory_pin_page, d1, d2, page);
 }
 
 static inline int xsm_add_to_physmap(xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.add_to_physmap(d1, d2);
+    return alternative_call(xsm_ops.add_to_physmap, d1, d2);
 }
 
 static inline int xsm_remove_from_physmap(xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.remove_from_physmap(d1, d2);
+    return alternative_call(xsm_ops.remove_from_physmap, d1, d2);
 }
 
 static inline int xsm_map_gmfn_foreign (xsm_default_t def, struct domain *d, struct domain *t)
 {
-    return xsm_ops.map_gmfn_foreign(d, t);
+    return alternative_call(xsm_ops.map_gmfn_foreign, d, t);
 }
 
 static inline int xsm_claim_pages(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.claim_pages(d);
+    return alternative_call(xsm_ops.claim_pages, d);
 }
 
 static inline int xsm_console_io (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops.console_io(d, cmd);
+    return alternative_call(xsm_ops.console_io, d, cmd);
 }
 
 static inline int xsm_profile (xsm_default_t def, struct domain *d, int op)
 {
-    return xsm_ops.profile(d, op);
+    return alternative_call(xsm_ops.profile, d, op);
 }
 
 static inline int xsm_kexec (xsm_default_t def)
 {
-    return xsm_ops.kexec();
+    return alternative_call(xsm_ops.kexec);
 }
 
 static inline int xsm_schedop_shutdown (xsm_default_t def, struct domain *d1, struct domain *d2)
 {
-    return xsm_ops.schedop_shutdown(d1, d2);
+    return alternative_call(xsm_ops.schedop_shutdown, d1, d2);
 }
 
 static inline char *xsm_show_irq_sid (int irq)
 {
-    return xsm_ops.show_irq_sid(irq);
+    return alternative_call(xsm_ops.show_irq_sid, irq);
 }
 
 static inline int xsm_map_domain_pirq (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.map_domain_pirq(d);
+    return alternative_call(xsm_ops.map_domain_pirq, d);
 }
 
 static inline int xsm_map_domain_irq (xsm_default_t def, struct domain *d, int irq, void *data)
 {
-    return xsm_ops.map_domain_irq(d, irq, data);
+    return alternative_call(xsm_ops.map_domain_irq, d, irq, data);
 }
 
 static inline int xsm_unmap_domain_pirq (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.unmap_domain_pirq(d);
+    return alternative_call(xsm_ops.unmap_domain_pirq, d);
 }
 
 static inline int xsm_unmap_domain_irq (xsm_default_t def, struct domain *d, int irq, void *data)
 {
-    return xsm_ops.unmap_domain_irq(d, irq, data);
+    return alternative_call(xsm_ops.unmap_domain_irq, d, irq, data);
 }
 
 static inline int xsm_bind_pt_irq(xsm_default_t def, struct domain *d,
                                   struct xen_domctl_bind_pt_irq *bind)
 {
-    return xsm_ops.bind_pt_irq(d, bind);
+    return alternative_call(xsm_ops.bind_pt_irq, d, bind);
 }
 
 static inline int xsm_unbind_pt_irq(xsm_default_t def, struct domain *d,
                                     struct xen_domctl_bind_pt_irq *bind)
 {
-    return xsm_ops.unbind_pt_irq(d, bind);
+    return alternative_call(xsm_ops.unbind_pt_irq, d, bind);
 }
 
 static inline int xsm_irq_permission (xsm_default_t def, struct domain *d, int pirq, uint8_t allow)
 {
-    return xsm_ops.irq_permission(d, pirq, allow);
+    return alternative_call(xsm_ops.irq_permission, d, pirq, allow);
 }
 
 static inline int xsm_iomem_permission (xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
-    return xsm_ops.iomem_permission(d, s, e, allow);
+    return alternative_call(xsm_ops.iomem_permission, d, s, e, allow);
 }
 
 static inline int xsm_iomem_mapping (xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
-    return xsm_ops.iomem_mapping(d, s, e, allow);
+    return alternative_call(xsm_ops.iomem_mapping, d, s, e, allow);
 }
 
 static inline int xsm_pci_config_permission (xsm_default_t def, struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access)
 {
-    return xsm_ops.pci_config_permission(d, machine_bdf, start, end, access);
+    return alternative_call(xsm_ops.pci_config_permission, d, machine_bdf, start, end, access);
 }
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
 static inline int xsm_get_device_group(xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops.get_device_group(machine_bdf);
+    return alternative_call(xsm_ops.get_device_group, machine_bdf);
 }
 
 static inline int xsm_assign_device(xsm_default_t def, struct domain *d, uint32_t machine_bdf)
 {
-    return xsm_ops.assign_device(d, machine_bdf);
+    return alternative_call(xsm_ops.assign_device, d, machine_bdf);
 }
 
 static inline int xsm_deassign_device(xsm_default_t def, struct domain *d, uint32_t machine_bdf)
 {
-    return xsm_ops.deassign_device(d, machine_bdf);
+    return alternative_call(xsm_ops.deassign_device, d, machine_bdf);
 }
 #endif /* HAS_PASSTHROUGH && HAS_PCI) */
 
@@ -487,60 +490,60 @@ static inline int xsm_deassign_device(xsm_default_t def, struct domain *d, uint3
 static inline int xsm_assign_dtdevice(xsm_default_t def, struct domain *d,
                                       const char *dtpath)
 {
-    return xsm_ops.assign_dtdevice(d, dtpath);
+    return alternative_call(xsm_ops.assign_dtdevice, d, dtpath);
 }
 
 static inline int xsm_deassign_dtdevice(xsm_default_t def, struct domain *d,
                                         const char *dtpath)
 {
-    return xsm_ops.deassign_dtdevice(d, dtpath);
+    return alternative_call(xsm_ops.deassign_dtdevice, d, dtpath);
 }
 
 #endif /* HAS_PASSTHROUGH && HAS_DEVICE_TREE */
 
 static inline int xsm_resource_plug_pci (xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops.resource_plug_pci(machine_bdf);
+    return alternative_call(xsm_ops.resource_plug_pci, machine_bdf);
 }
 
 static inline int xsm_resource_unplug_pci (xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops.resource_unplug_pci(machine_bdf);
+    return alternative_call(xsm_ops.resource_unplug_pci, machine_bdf);
 }
 
 static inline int xsm_resource_plug_core (xsm_default_t def)
 {
-    return xsm_ops.resource_plug_core();
+    return alternative_call(xsm_ops.resource_plug_core);
 }
 
 static inline int xsm_resource_unplug_core (xsm_default_t def)
 {
-    return xsm_ops.resource_unplug_core();
+    return alternative_call(xsm_ops.resource_unplug_core);
 }
 
 static inline int xsm_resource_setup_pci (xsm_default_t def, uint32_t machine_bdf)
 {
-    return xsm_ops.resource_setup_pci(machine_bdf);
+    return alternative_call(xsm_ops.resource_setup_pci, machine_bdf);
 }
 
 static inline int xsm_resource_setup_gsi (xsm_default_t def, int gsi)
 {
-    return xsm_ops.resource_setup_gsi(gsi);
+    return alternative_call(xsm_ops.resource_setup_gsi, gsi);
 }
 
 static inline int xsm_resource_setup_misc (xsm_default_t def)
 {
-    return xsm_ops.resource_setup_misc();
+    return alternative_call(xsm_ops.resource_setup_misc);
 }
 
 static inline int xsm_page_offline(xsm_default_t def, uint32_t cmd)
 {
-    return xsm_ops.page_offline(cmd);
+    return alternative_call(xsm_ops.page_offline, cmd);
 }
 
 static inline int xsm_hypfs_op(xsm_default_t def)
 {
-    return xsm_ops.hypfs_op();
+    return alternative_call(xsm_ops.hypfs_op);
 }
 
 static inline long xsm_do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
@@ -557,105 +560,105 @@ static inline int xsm_do_compat_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 
 static inline int xsm_hvm_param (xsm_default_t def, struct domain *d, unsigned long op)
 {
-    return xsm_ops.hvm_param(d, op);
+    return alternative_call(xsm_ops.hvm_param, d, op);
 }
 
 static inline int xsm_hvm_control(xsm_default_t def, struct domain *d, unsigned long op)
 {
-    return xsm_ops.hvm_control(d, op);
+    return alternative_call(xsm_ops.hvm_control, d, op);
 }
 
 static inline int xsm_hvm_param_altp2mhvm (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.hvm_param_altp2mhvm(d);
+    return alternative_call(xsm_ops.hvm_param_altp2mhvm, d);
 }
 
 static inline int xsm_hvm_altp2mhvm_op (xsm_default_t def, struct domain *d, uint64_t mode, uint32_t op)
 {
-    return xsm_ops.hvm_altp2mhvm_op(d, mode, op);
+    return alternative_call(xsm_ops.hvm_altp2mhvm_op, d, mode, op);
 }
 
 static inline int xsm_get_vnumainfo (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.get_vnumainfo(d);
+    return alternative_call(xsm_ops.get_vnumainfo, d);
 }
 
 static inline int xsm_vm_event_control (xsm_default_t def, struct domain *d, int mode, int op)
 {
-    return xsm_ops.vm_event_control(d, mode, op);
+    return alternative_call(xsm_ops.vm_event_control, d, mode, op);
 }
 
 #ifdef CONFIG_MEM_ACCESS
 static inline int xsm_mem_access (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.mem_access(d);
+    return alternative_call(xsm_ops.mem_access, d);
 }
 #endif
 
 #ifdef CONFIG_MEM_PAGING
 static inline int xsm_mem_paging (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.mem_paging(d);
+    return alternative_call(xsm_ops.mem_paging, d);
 }
 #endif
 
 #ifdef CONFIG_MEM_SHARING
 static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.mem_sharing(d);
+    return alternative_call(xsm_ops.mem_sharing, d);
 }
 #endif
 
 static inline int xsm_platform_op (xsm_default_t def, uint32_t op)
 {
-    return xsm_ops.platform_op(op);
+    return alternative_call(xsm_ops.platform_op, op);
 }
 
 #ifdef CONFIG_X86
 static inline int xsm_do_mca(xsm_default_t def)
 {
-    return xsm_ops.do_mca();
+    return alternative_call(xsm_ops.do_mca);
 }
 
 static inline int xsm_shadow_control (xsm_default_t def, struct domain *d, uint32_t op)
 {
-    return xsm_ops.shadow_control(d, op);
+    return alternative_call(xsm_ops.shadow_control, d, op);
 }
 
 static inline int xsm_mem_sharing_op (xsm_default_t def, struct domain *d, struct domain *cd, int op)
 {
-    return xsm_ops.mem_sharing_op(d, cd, op);
+    return alternative_call(xsm_ops.mem_sharing_op, d, cd, op);
 }
 
 static inline int xsm_apic (xsm_default_t def, struct domain *d, int cmd)
 {
-    return xsm_ops.apic(d, cmd);
+    return alternative_call(xsm_ops.apic, d, cmd);
 }
 
 static inline int xsm_memtype (xsm_default_t def, uint32_t access)
 {
-    return xsm_ops.memtype(access);
+    return alternative_call(xsm_ops.memtype, access);
 }
 
 static inline int xsm_machine_memory_map(xsm_default_t def)
 {
-    return xsm_ops.machine_memory_map();
+    return alternative_call(xsm_ops.machine_memory_map);
 }
 
 static inline int xsm_domain_memory_map(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.domain_memory_map(d);
+    return alternative_call(xsm_ops.domain_memory_map, d);
 }
 
 static inline int xsm_mmu_update (xsm_default_t def, struct domain *d, struct domain *t,
                                   struct domain *f, uint32_t flags)
 {
-    return xsm_ops.mmu_update(d, t, f, flags);
+    return alternative_call(xsm_ops.mmu_update, d, t, f, flags);
 }
 
 static inline int xsm_mmuext_op (xsm_default_t def, struct domain *d, struct domain *f)
 {
-    return xsm_ops.mmuext_op(d, f);
+    return alternative_call(xsm_ops.mmuext_op, d, f);
 }
 
 static inline int xsm_update_va_mapping(xsm_default_t def, struct domain *d, struct domain *f,
@@ -666,61 +669,61 @@ static inline int xsm_update_va_mapping(xsm_default_t def, struct domain *d, str
 
 static inline int xsm_priv_mapping(xsm_default_t def, struct domain *d, struct domain *t)
 {
-    return xsm_ops.priv_mapping(d, t);
+    return alternative_call(xsm_ops.priv_mapping, d, t);
 }
 
 static inline int xsm_ioport_permission (xsm_default_t def, struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
-    return xsm_ops.ioport_permission(d, s, e, allow);
+    return alternative_call(xsm_ops.ioport_permission, d, s, e, allow);
 }
 
 static inline int xsm_ioport_mapping (xsm_default_t def, struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
-    return xsm_ops.ioport_mapping(d, s, e, allow);
+    return alternative_call(xsm_ops.ioport_mapping, d, s, e, allow);
 }
 
 static inline int xsm_pmu_op (xsm_default_t def, struct domain *d, unsigned int op)
 {
-    return xsm_ops.pmu_op(d, op);
+    return alternative_call(xsm_ops.pmu_op, d, op);
 }
 
 #endif /* CONFIG_X86 */
 
 static inline int xsm_dm_op(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.dm_op(d);
+    return alternative_call(xsm_ops.dm_op, d);
 }
 
 static inline int xsm_xen_version (xsm_default_t def, uint32_t op)
 {
-    return xsm_ops.xen_version(op);
+    return alternative_call(xsm_ops.xen_version, op);
 }
 
 static inline int xsm_domain_resource_map(xsm_default_t def, struct domain *d)
 {
-    return xsm_ops.domain_resource_map(d);
+    return alternative_call(xsm_ops.domain_resource_map, d);
 }
 
 #ifdef CONFIG_ARGO
 static inline int xsm_argo_enable(const struct domain *d)
 {
-    return xsm_ops.argo_enable(d);
+    return alternative_call(xsm_ops.argo_enable, d);
 }
 
 static inline int xsm_argo_register_single_source(const struct domain *d,
                                                   const struct domain *t)
 {
-    return xsm_ops.argo_register_single_source(d, t);
+    return alternative_call(xsm_ops.argo_register_single_source, d, t);
 }
 
 static inline int xsm_argo_register_any_source(const struct domain *d)
 {
-    return xsm_ops.argo_register_any_source(d);
+    return alternative_call(xsm_ops.argo_register_any_source, d);
 }
 
 static inline int xsm_argo_send(const struct domain *d, const struct domain *t)
 {
-    return xsm_ops.argo_send(d, t);
+    return alternative_call(xsm_ops.argo_send, d, t);
 }
 
 #endif /* CONFIG_ARGO */
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154770.285912 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wm-00019G-5g; Mon, 12 Jul 2021 20:27:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154770.285912; Mon, 12 Jul 2021 20:27:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wm-000193-1n; Mon, 12 Jul 2021 20:27:44 +0000
Received: by outflank-mailman (input) for mailman id 154770;
 Mon, 12 Jul 2021 20:27:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32Wk-00017U-Tv
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:42 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 985ecf20-0016-42bb-ac26-01c09d25bdeb;
 Mon, 12 Jul 2021 20:27:40 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121628684837.3979961814088;
 Mon, 12 Jul 2021 13:27:08 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 985ecf20-0016-42bb-ac26-01c09d25bdeb
ARC-Seal: i=1; a=rsa-sha256; t=1626121631; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=hDDRonRt/SYhncgPrsOzeA5RyJiAmaGrE/l9MaRor2PCEiiMIlSCKEaV9wc0iyu9guZVPmsLrXNCfEWIcOi1mQASAtq6rJQyHcxaelu4Q3Zc8PEVWzgpXLVJ4czfARBbrP1Aih5hnVCptmyZtYNsF2YuOPHTnzZClb32jDqlJUc=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121631; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=KR8/Pq1GSk4sRI4dMypnhhBZKWMZPy2srdbMZbah3fs=; 
	b=ZEtRN0qBQkbX+XFcVKvwxLB9DKSDbX2FoC7XX6imy7wyXkinK+nBE1MTZtHzBzIM2n8D6QOYTRt7mjAZQYjNsGSHWMSMDmpGH75cqORRdluwEuziTsAGW3SEYXe1nRQIdTjMSx0n/TUuqRiOr8uBCk3pI4Y5WTbnC+HjzZ4lbmE=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121631;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=KR8/Pq1GSk4sRI4dMypnhhBZKWMZPy2srdbMZbah3fs=;
	b=dJIDtnYUXA0EKMosopboHdACPJxj9vp4bWSNJfUbtlgRFlF6rG05bZh3NMfTCcVO
	JV1ayJE+NQOCcK0LW0CHjKIlIJsx0TZ5nYv49TuBLPLO1RF6xjCmTJZBJT+pFPQeBsf
	wCo+2oia84FwXyBChqoLavtVzDYDvAR4/0rHudkA=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 05/10] xsm: decouple xsm header inclusion selection
Date: Mon, 12 Jul 2021 16:32:28 -0400
Message-Id: <20210712203233.20289-6-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

Multiple preprocessor defines were used as a mechanism to selective
include parts of the xsm.h header file. This makes it difficult to know
which portion is being included at anyone time. This commit works to
simplify this by separating the core structure and functions of XSM into
xsm-core.h away from the wrapper functions which remain in xsm.h and
dummy.h.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/include/xsm/dummy.h    |   2 +-
 xen/include/xsm/xsm-core.h | 263 +++++++++++++++++++++++++++++++++++++
 xen/include/xsm/xsm.h      | 241 +--------------------------------
 xen/xsm/dummy.c            |   1 -
 xen/xsm/silo.c             |   1 -
 5 files changed, 265 insertions(+), 243 deletions(-)
 create mode 100644 xen/include/xsm/xsm-core.h

diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
index 363c6d7798..c445c5681b 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/include/xsm/dummy.h
@@ -16,7 +16,7 @@
  */
 
 #include <xen/sched.h>
-#include <xsm/xsm.h>
+#include <xsm/xsm-core.h>
 #include <public/hvm/params.h>
 
 /* Cannot use BUILD_BUG_ON here because the expressions we check are not
diff --git a/xen/include/xsm/xsm-core.h b/xen/include/xsm/xsm-core.h
new file mode 100644
index 0000000000..4f5e7a7d17
--- /dev/null
+++ b/xen/include/xsm/xsm-core.h
@@ -0,0 +1,263 @@
+/*
+ *  This file contains the XSM hook definitions for Xen.
+ *
+ *  This work is based on the LSM implementation in Linux 2.6.13.4.
+ *
+ *  Author:  George Coker, <gscoker@alpha.ncsc.mil>
+ *
+ *  Contributors: Michael LeMay, <mdlemay@epoch.ncsc.mil>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2,
+ *  as published by the Free Software Foundation.
+ */
+
+#ifndef __XSM_CORE_H__
+#define __XSM_CORE_H__
+
+#include <xen/sched.h>
+#include <xen/multiboot.h>
+
+typedef void xsm_op_t;
+DEFINE_XEN_GUEST_HANDLE(xsm_op_t);
+
+/* policy magic number (defined by XSM_MAGIC) */
+typedef u32 xsm_magic_t;
+
+#ifdef CONFIG_XSM_FLASK
+#define XSM_MAGIC 0xf97cff8c
+#else
+#define XSM_MAGIC 0x0
+#endif
+
+/* These annotations are used by callers and in dummy.h to document the
+ * default actions of XSM hooks. They should be compiled out otherwise.
+ */
+enum xsm_default {
+    XSM_HOOK,     /* Guests can normally access the hypercall */
+    XSM_DM_PRIV,  /* Device model can perform on its target domain */
+    XSM_TARGET,   /* Can perform on self or your target domain */
+    XSM_PRIV,     /* Privileged - normally restricted to dom0 */
+    XSM_XS_PRIV,  /* Xenstore domain - can do some privileged operations */
+    XSM_OTHER     /* Something more complex */
+};
+typedef enum xsm_default xsm_default_t;
+
+struct xsm_operations {
+    void (*security_domaininfo) (struct domain *d,
+                                        struct xen_domctl_getdomaininfo *info);
+    int (*domain_create) (struct domain *d, u32 ssidref);
+    int (*getdomaininfo) (struct domain *d);
+    int (*domctl_scheduler_op) (struct domain *d, int op);
+    int (*sysctl_scheduler_op) (int op);
+    int (*set_target) (struct domain *d, struct domain *e);
+    int (*domctl) (struct domain *d, int cmd);
+    int (*sysctl) (int cmd);
+    int (*readconsole) (uint32_t clear);
+
+    int (*evtchn_unbound) (struct domain *d, struct evtchn *chn, domid_t id2);
+    int (*evtchn_interdomain) (struct domain *d1, struct evtchn *chn1,
+                                        struct domain *d2, struct evtchn *chn2);
+    void (*evtchn_close_post) (struct evtchn *chn);
+    int (*evtchn_send) (struct domain *d, struct evtchn *chn);
+    int (*evtchn_status) (struct domain *d, struct evtchn *chn);
+    int (*evtchn_reset) (struct domain *d1, struct domain *d2);
+
+    int (*grant_mapref) (struct domain *d1, struct domain *d2, uint32_t flags);
+    int (*grant_unmapref) (struct domain *d1, struct domain *d2);
+    int (*grant_setup) (struct domain *d1, struct domain *d2);
+    int (*grant_transfer) (struct domain *d1, struct domain *d2);
+    int (*grant_copy) (struct domain *d1, struct domain *d2);
+    int (*grant_query_size) (struct domain *d1, struct domain *d2);
+
+    int (*alloc_security_domain) (struct domain *d);
+    void (*free_security_domain) (struct domain *d);
+    int (*alloc_security_evtchns) (struct evtchn chn[], unsigned int nr);
+    void (*free_security_evtchns) (struct evtchn chn[], unsigned int nr);
+    char *(*show_security_evtchn) (struct domain *d, const struct evtchn *chn);
+    int (*init_hardware_domain) (struct domain *d);
+
+    int (*get_pod_target) (struct domain *d);
+    int (*set_pod_target) (struct domain *d);
+    int (*memory_exchange) (struct domain *d);
+    int (*memory_adjust_reservation) (struct domain *d1, struct domain *d2);
+    int (*memory_stat_reservation) (struct domain *d1, struct domain *d2);
+    int (*memory_pin_page) (struct domain *d1, struct domain *d2, struct page_info *page);
+    int (*add_to_physmap) (struct domain *d1, struct domain *d2);
+    int (*remove_from_physmap) (struct domain *d1, struct domain *d2);
+    int (*map_gmfn_foreign) (struct domain *d, struct domain *t);
+    int (*claim_pages) (struct domain *d);
+
+    int (*console_io) (struct domain *d, int cmd);
+
+    int (*profile) (struct domain *d, int op);
+
+    int (*kexec) (void);
+    int (*schedop_shutdown) (struct domain *d1, struct domain *d2);
+
+    char *(*show_irq_sid) (int irq);
+    int (*map_domain_pirq) (struct domain *d);
+    int (*map_domain_irq) (struct domain *d, int irq, const void *data);
+    int (*unmap_domain_pirq) (struct domain *d);
+    int (*unmap_domain_irq) (struct domain *d, int irq, const void *data);
+    int (*bind_pt_irq) (struct domain *d, struct xen_domctl_bind_pt_irq *bind);
+    int (*unbind_pt_irq) (struct domain *d, struct xen_domctl_bind_pt_irq *bind);
+    int (*irq_permission) (struct domain *d, int pirq, uint8_t allow);
+    int (*iomem_permission) (struct domain *d, uint64_t s, uint64_t e, uint8_t allow);
+    int (*iomem_mapping) (struct domain *d, uint64_t s, uint64_t e, uint8_t allow);
+    int (*pci_config_permission) (struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access);
+
+#if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
+    int (*get_device_group) (uint32_t machine_bdf);
+    int (*assign_device) (struct domain *d, uint32_t machine_bdf);
+    int (*deassign_device) (struct domain *d, uint32_t machine_bdf);
+#endif
+
+#if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_DEVICE_TREE)
+    int (*assign_dtdevice) (struct domain *d, const char *dtpath);
+    int (*deassign_dtdevice) (struct domain *d, const char *dtpath);
+#endif
+
+    int (*resource_plug_core) (void);
+    int (*resource_unplug_core) (void);
+    int (*resource_plug_pci) (uint32_t machine_bdf);
+    int (*resource_unplug_pci) (uint32_t machine_bdf);
+    int (*resource_setup_pci) (uint32_t machine_bdf);
+    int (*resource_setup_gsi) (int gsi);
+    int (*resource_setup_misc) (void);
+
+    int (*page_offline)(uint32_t cmd);
+    int (*hypfs_op)(void);
+
+    long (*do_xsm_op) (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
+#ifdef CONFIG_COMPAT
+    int (*do_compat_op) (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
+#endif
+
+    int (*hvm_param) (struct domain *d, unsigned long op);
+    int (*hvm_control) (struct domain *d, unsigned long op);
+    int (*hvm_param_altp2mhvm) (struct domain *d);
+    int (*hvm_altp2mhvm_op) (struct domain *d, uint64_t mode, uint32_t op);
+    int (*get_vnumainfo) (struct domain *d);
+
+    int (*vm_event_control) (struct domain *d, int mode, int op);
+
+#ifdef CONFIG_MEM_ACCESS
+    int (*mem_access) (struct domain *d);
+#endif
+
+#ifdef CONFIG_MEM_PAGING
+    int (*mem_paging) (struct domain *d);
+#endif
+
+#ifdef CONFIG_MEM_SHARING
+    int (*mem_sharing) (struct domain *d);
+#endif
+
+    int (*platform_op) (uint32_t cmd);
+
+#ifdef CONFIG_X86
+    int (*do_mca) (void);
+    int (*shadow_control) (struct domain *d, uint32_t op);
+    int (*mem_sharing_op) (struct domain *d, struct domain *cd, int op);
+    int (*apic) (struct domain *d, int cmd);
+    int (*memtype) (uint32_t access);
+    int (*machine_memory_map) (void);
+    int (*domain_memory_map) (struct domain *d);
+#define XSM_MMU_UPDATE_READ      1
+#define XSM_MMU_UPDATE_WRITE     2
+#define XSM_MMU_NORMAL_UPDATE    4
+#define XSM_MMU_MACHPHYS_UPDATE  8
+    int (*mmu_update) (struct domain *d, struct domain *t,
+                       struct domain *f, uint32_t flags);
+    int (*mmuext_op) (struct domain *d, struct domain *f);
+    int (*update_va_mapping) (struct domain *d, struct domain *f, l1_pgentry_t pte);
+    int (*priv_mapping) (struct domain *d, struct domain *t);
+    int (*ioport_permission) (struct domain *d, uint32_t s, uint32_t e, uint8_t allow);
+    int (*ioport_mapping) (struct domain *d, uint32_t s, uint32_t e, uint8_t allow);
+    int (*pmu_op) (struct domain *d, unsigned int op);
+#endif
+    int (*dm_op) (struct domain *d);
+    int (*xen_version) (uint32_t cmd);
+    int (*domain_resource_map) (struct domain *d);
+#ifdef CONFIG_ARGO
+    int (*argo_enable) (const struct domain *d);
+    int (*argo_register_single_source) (const struct domain *d,
+                                        const struct domain *t);
+    int (*argo_register_any_source) (const struct domain *d);
+    int (*argo_send) (const struct domain *d, const struct domain *t);
+#endif
+};
+
+extern void xsm_fixup_ops(struct xsm_operations *ops);
+
+#ifdef CONFIG_XSM
+
+#ifdef CONFIG_MULTIBOOT
+extern int xsm_multiboot_init(unsigned long *module_map,
+                              const multiboot_info_t *mbi);
+extern int xsm_multiboot_policy_init(unsigned long *module_map,
+                                     const multiboot_info_t *mbi,
+                                     void **policy_buffer,
+                                     size_t *policy_size);
+#endif
+
+#ifdef CONFIG_HAS_DEVICE_TREE
+/*
+ * Initialize XSM
+ *
+ * On success, return 1 if using SILO mode else 0.
+ */
+extern int xsm_dt_init(void);
+extern int xsm_dt_policy_init(void **policy_buffer, size_t *policy_size);
+extern bool has_xsm_magic(paddr_t);
+#endif
+
+#ifdef CONFIG_XSM_FLASK
+extern struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size);
+#else
+static inline struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size)
+{
+    return NULL;
+}
+#endif
+
+#ifdef CONFIG_XSM_FLASK_POLICY
+extern const unsigned char xsm_flask_init_policy[];
+extern const unsigned int xsm_flask_init_policy_size;
+#endif
+
+#ifdef CONFIG_XSM_SILO
+extern struct xsm_operations *silo_init(void);
+#else
+static inline struct xsm_operations *silo_init(void)
+{
+    return NULL;
+}
+#endif
+
+#else /* CONFIG_XSM */
+
+#ifdef CONFIG_MULTIBOOT
+static inline int xsm_multiboot_init (unsigned long *module_map,
+                                      const multiboot_info_t *mbi)
+{
+    return 0;
+}
+#endif
+
+#ifdef CONFIG_HAS_DEVICE_TREE
+static inline int xsm_dt_init(void)
+{
+    return 0;
+}
+
+static inline bool has_xsm_magic(paddr_t start)
+{
+    return false;
+}
+#endif /* CONFIG_HAS_DEVICE_TREE */
+
+#endif /* CONFIG_XSM */
+
+#endif /* __XSM_CORE_H */
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index a39b5dc42f..f86cea4f88 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -20,184 +20,12 @@
 #endif
 #include <xen/sched.h>
 #include <xen/multiboot.h>
-
-typedef void xsm_op_t;
-DEFINE_XEN_GUEST_HANDLE(xsm_op_t);
-
-/* policy magic number (defined by XSM_MAGIC) */
-typedef u32 xsm_magic_t;
-
-#ifdef CONFIG_XSM_FLASK
-#define XSM_MAGIC 0xf97cff8c
-#else
-#define XSM_MAGIC 0x0
-#endif
-
-/* These annotations are used by callers and in dummy.h to document the
- * default actions of XSM hooks. They should be compiled out otherwise.
- */
-enum xsm_default {
-    XSM_HOOK,     /* Guests can normally access the hypercall */
-    XSM_DM_PRIV,  /* Device model can perform on its target domain */
-    XSM_TARGET,   /* Can perform on self or your target domain */
-    XSM_PRIV,     /* Privileged - normally restricted to dom0 */
-    XSM_XS_PRIV,  /* Xenstore domain - can do some privileged operations */
-    XSM_OTHER     /* Something more complex */
-};
-typedef enum xsm_default xsm_default_t;
-
-struct xsm_operations {
-    void (*security_domaininfo) (struct domain *d,
-                                        struct xen_domctl_getdomaininfo *info);
-    int (*domain_create) (struct domain *d, u32 ssidref);
-    int (*getdomaininfo) (struct domain *d);
-    int (*domctl_scheduler_op) (struct domain *d, int op);
-    int (*sysctl_scheduler_op) (int op);
-    int (*set_target) (struct domain *d, struct domain *e);
-    int (*domctl) (struct domain *d, int cmd);
-    int (*sysctl) (int cmd);
-    int (*readconsole) (uint32_t clear);
-
-    int (*evtchn_unbound) (struct domain *d, struct evtchn *chn, domid_t id2);
-    int (*evtchn_interdomain) (struct domain *d1, struct evtchn *chn1,
-                                        struct domain *d2, struct evtchn *chn2);
-    void (*evtchn_close_post) (struct evtchn *chn);
-    int (*evtchn_send) (struct domain *d, struct evtchn *chn);
-    int (*evtchn_status) (struct domain *d, struct evtchn *chn);
-    int (*evtchn_reset) (struct domain *d1, struct domain *d2);
-
-    int (*grant_mapref) (struct domain *d1, struct domain *d2, uint32_t flags);
-    int (*grant_unmapref) (struct domain *d1, struct domain *d2);
-    int (*grant_setup) (struct domain *d1, struct domain *d2);
-    int (*grant_transfer) (struct domain *d1, struct domain *d2);
-    int (*grant_copy) (struct domain *d1, struct domain *d2);
-    int (*grant_query_size) (struct domain *d1, struct domain *d2);
-
-    int (*alloc_security_domain) (struct domain *d);
-    void (*free_security_domain) (struct domain *d);
-    int (*alloc_security_evtchns) (struct evtchn chn[], unsigned int nr);
-    void (*free_security_evtchns) (struct evtchn chn[], unsigned int nr);
-    char *(*show_security_evtchn) (struct domain *d, const struct evtchn *chn);
-    int (*init_hardware_domain) (struct domain *d);
-
-    int (*get_pod_target) (struct domain *d);
-    int (*set_pod_target) (struct domain *d);
-    int (*memory_exchange) (struct domain *d);
-    int (*memory_adjust_reservation) (struct domain *d1, struct domain *d2);
-    int (*memory_stat_reservation) (struct domain *d1, struct domain *d2);
-    int (*memory_pin_page) (struct domain *d1, struct domain *d2, struct page_info *page);
-    int (*add_to_physmap) (struct domain *d1, struct domain *d2);
-    int (*remove_from_physmap) (struct domain *d1, struct domain *d2);
-    int (*map_gmfn_foreign) (struct domain *d, struct domain *t);
-    int (*claim_pages) (struct domain *d);
-
-    int (*console_io) (struct domain *d, int cmd);
-
-    int (*profile) (struct domain *d, int op);
-
-    int (*kexec) (void);
-    int (*schedop_shutdown) (struct domain *d1, struct domain *d2);
-
-    char *(*show_irq_sid) (int irq);
-    int (*map_domain_pirq) (struct domain *d);
-    int (*map_domain_irq) (struct domain *d, int irq, const void *data);
-    int (*unmap_domain_pirq) (struct domain *d);
-    int (*unmap_domain_irq) (struct domain *d, int irq, const void *data);
-    int (*bind_pt_irq) (struct domain *d, struct xen_domctl_bind_pt_irq *bind);
-    int (*unbind_pt_irq) (struct domain *d, struct xen_domctl_bind_pt_irq *bind);
-    int (*irq_permission) (struct domain *d, int pirq, uint8_t allow);
-    int (*iomem_permission) (struct domain *d, uint64_t s, uint64_t e, uint8_t allow);
-    int (*iomem_mapping) (struct domain *d, uint64_t s, uint64_t e, uint8_t allow);
-    int (*pci_config_permission) (struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access);
-
-#if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
-    int (*get_device_group) (uint32_t machine_bdf);
-    int (*assign_device) (struct domain *d, uint32_t machine_bdf);
-    int (*deassign_device) (struct domain *d, uint32_t machine_bdf);
-#endif
-
-#if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_DEVICE_TREE)
-    int (*assign_dtdevice) (struct domain *d, const char *dtpath);
-    int (*deassign_dtdevice) (struct domain *d, const char *dtpath);
-#endif
-
-    int (*resource_plug_core) (void);
-    int (*resource_unplug_core) (void);
-    int (*resource_plug_pci) (uint32_t machine_bdf);
-    int (*resource_unplug_pci) (uint32_t machine_bdf);
-    int (*resource_setup_pci) (uint32_t machine_bdf);
-    int (*resource_setup_gsi) (int gsi);
-    int (*resource_setup_misc) (void);
-
-    int (*page_offline)(uint32_t cmd);
-    int (*hypfs_op)(void);
-
-    long (*do_xsm_op) (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
-#ifdef CONFIG_COMPAT
-    int (*do_compat_op) (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
-#endif
-
-    int (*hvm_param) (struct domain *d, unsigned long op);
-    int (*hvm_control) (struct domain *d, unsigned long op);
-    int (*hvm_param_altp2mhvm) (struct domain *d);
-    int (*hvm_altp2mhvm_op) (struct domain *d, uint64_t mode, uint32_t op);
-    int (*get_vnumainfo) (struct domain *d);
-
-    int (*vm_event_control) (struct domain *d, int mode, int op);
-
-#ifdef CONFIG_MEM_ACCESS
-    int (*mem_access) (struct domain *d);
-#endif
-
-#ifdef CONFIG_MEM_PAGING
-    int (*mem_paging) (struct domain *d);
-#endif
-
-#ifdef CONFIG_MEM_SHARING
-    int (*mem_sharing) (struct domain *d);
-#endif
-
-    int (*platform_op) (uint32_t cmd);
-
-#ifdef CONFIG_X86
-    int (*do_mca) (void);
-    int (*shadow_control) (struct domain *d, uint32_t op);
-    int (*mem_sharing_op) (struct domain *d, struct domain *cd, int op);
-    int (*apic) (struct domain *d, int cmd);
-    int (*memtype) (uint32_t access);
-    int (*machine_memory_map) (void);
-    int (*domain_memory_map) (struct domain *d);
-#define XSM_MMU_UPDATE_READ      1
-#define XSM_MMU_UPDATE_WRITE     2
-#define XSM_MMU_NORMAL_UPDATE    4
-#define XSM_MMU_MACHPHYS_UPDATE  8
-    int (*mmu_update) (struct domain *d, struct domain *t,
-                       struct domain *f, uint32_t flags);
-    int (*mmuext_op) (struct domain *d, struct domain *f);
-    int (*update_va_mapping) (struct domain *d, struct domain *f, l1_pgentry_t pte);
-    int (*priv_mapping) (struct domain *d, struct domain *t);
-    int (*ioport_permission) (struct domain *d, uint32_t s, uint32_t e, uint8_t allow);
-    int (*ioport_mapping) (struct domain *d, uint32_t s, uint32_t e, uint8_t allow);
-    int (*pmu_op) (struct domain *d, unsigned int op);
-#endif
-    int (*dm_op) (struct domain *d);
-    int (*xen_version) (uint32_t cmd);
-    int (*domain_resource_map) (struct domain *d);
-#ifdef CONFIG_ARGO
-    int (*argo_enable) (const struct domain *d);
-    int (*argo_register_single_source) (const struct domain *d,
-                                        const struct domain *t);
-    int (*argo_register_any_source) (const struct domain *d);
-    int (*argo_send) (const struct domain *d, const struct domain *t);
-#endif
-};
+#include <xsm/xsm-core.h>
 
 #ifdef CONFIG_XSM
 
 extern struct xsm_operations xsm_ops;
 
-#ifndef XSM_NO_WRAPPERS
-
 static inline void xsm_security_domaininfo (struct domain *d,
                                         struct xen_domctl_getdomaininfo *info)
 {
@@ -728,77 +556,10 @@ static inline int xsm_argo_send(const struct domain *d, const struct domain *t)
 
 #endif /* CONFIG_ARGO */
 
-#endif /* XSM_NO_WRAPPERS */
-
-#ifdef CONFIG_MULTIBOOT
-extern int xsm_multiboot_init(unsigned long *module_map,
-                              const multiboot_info_t *mbi);
-extern int xsm_multiboot_policy_init(unsigned long *module_map,
-                                     const multiboot_info_t *mbi,
-                                     void **policy_buffer,
-                                     size_t *policy_size);
-#endif
-
-#ifdef CONFIG_HAS_DEVICE_TREE
-/*
- * Initialize XSM
- *
- * On success, return 1 if using SILO mode else 0.
- */
-extern int xsm_dt_init(void);
-extern int xsm_dt_policy_init(void **policy_buffer, size_t *policy_size);
-extern bool has_xsm_magic(paddr_t);
-#endif
-
-extern void xsm_fixup_ops(struct xsm_operations *ops);
-
-#ifdef CONFIG_XSM_FLASK
-extern struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size);
-#else
-static inline struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size)
-{
-    return NULL;
-}
-#endif
-
-#ifdef CONFIG_XSM_FLASK_POLICY
-extern const unsigned char xsm_flask_init_policy[];
-extern const unsigned int xsm_flask_init_policy_size;
-#endif
-
-#ifdef CONFIG_XSM_SILO
-extern struct xsm_operations *silo_init(void);
-#else
-static inline struct xsm_operations *silo_init(void)
-{
-    return NULL;
-}
-#endif
-
 #else /* CONFIG_XSM */
 
 #include <xsm/dummy.h>
 
-#ifdef CONFIG_MULTIBOOT
-static inline int xsm_multiboot_init (unsigned long *module_map,
-                                      const multiboot_info_t *mbi)
-{
-    return 0;
-}
-#endif
-
-#ifdef CONFIG_HAS_DEVICE_TREE
-static inline int xsm_dt_init(void)
-{
-    return 0;
-}
-
-static inline bool has_xsm_magic(paddr_t start)
-{
-    return false;
-}
-#endif /* CONFIG_HAS_DEVICE_TREE */
-
 #endif /* CONFIG_XSM */
 
 #endif /* __XSM_H */
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index 066694763a..de4d6cf2cf 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -10,7 +10,6 @@
  *  as published by the Free Software Foundation.
  */
 
-#define XSM_NO_WRAPPERS
 #include <xsm/dummy.h>
 
 #define set_to_dummy_if_null(ops, function)                            \
diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c
index 808350f122..754787e895 100644
--- a/xen/xsm/silo.c
+++ b/xen/xsm/silo.c
@@ -17,7 +17,6 @@
  * You should have received a copy of the GNU General Public License along with
  * this program; If not, see <http://www.gnu.org/licenses/>.
  */
-#define XSM_NO_WRAPPERS
 #include <xsm/dummy.h>
 
 /*
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:27:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:27:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154776.285923 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wv-0001w7-LL; Mon, 12 Jul 2021 20:27:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154776.285923; Mon, 12 Jul 2021 20:27:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Wv-0001vx-I1; Mon, 12 Jul 2021 20:27:53 +0000
Received: by outflank-mailman (input) for mailman id 154776;
 Mon, 12 Jul 2021 20:27:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32Wu-0001pl-SF
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:27:52 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5e5d01e6-93c0-4ebc-9d40-2aa5879800ae;
 Mon, 12 Jul 2021 20:27:49 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121630315142.0329323422933;
 Mon, 12 Jul 2021 13:27:10 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5e5d01e6-93c0-4ebc-9d40-2aa5879800ae
ARC-Seal: i=1; a=rsa-sha256; t=1626121631; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=eMZ2mICuKz7KK7nRBfbpxL+RCwjb+0L904DD4LwaO7ZITFVCOvt5aUJo13prRZjtarFllZtkqKCK9ZMtysd1CBAfNkB/UzaWD8KSaZauXeng6Ws/v6Xw/+wvKxPWNu4TyjXbSMeo/YpvsRdQQ/G5oZ/ciAQZOzaI/c/2lngRg3Q=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121631; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=YWzPA5qzQSXMCUu1twwJ0OViSWCY5jll7afwMfCQ5A0=; 
	b=bWUsQVTvvJuooyQExDF6fEmLDMfWWbr62p0u4gK+GnRsbphxf0A7qJlzft4O7/A1OCdUk/89zVGdX/e07htE7a/sMQBZthOYP46qdUg/sF/2oQy+FFNhTYUWCsqlO8N9lu9RqN0GakoUcd4RcR8TFKJLLy6CEFjc52D4ESW/0QI=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121631;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=YWzPA5qzQSXMCUu1twwJ0OViSWCY5jll7afwMfCQ5A0=;
	b=BsKXOKMw4lFEl1j9hrwm0E8IqZgIPM18IoW1ThHICw+dc7eYR/O/ytGuKb6NbxjU
	C9/zysmE8BcXfSI/NclpR9LtfYF198qQ3aq2BRoz4BV6XaGf7b6ZXjXhP3lpB3nsp+E
	fxFbb8cIWOr1k5nMBX0oNtQi1LUWk7cZnkZE3qnQ=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 06/10] xsm: enable xsm to always be included
Date: Mon, 12 Jul 2021 16:32:29 -0400
Message-Id: <20210712203233.20289-7-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

The only difference between !CONFIG_XSM and CONFIG_XSM when SILO and FLASK are
not enabled is whether the XSM hooks in dummy.h are called as static inline
functions or as function pointers to static functions. As such this commit,

 * eliminates CONFIG_XSM
 * introduces CONFIG_XSM_EVTCHN_LABELING as replacement for enabling event
   channel labels
 * makes CONFIG_XSM_SILO AND CONFIG_XSM_FLASK default to no

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/common/Kconfig            |  51 ++++----
 xen/include/xen/sched.h       |   2 +-
 xen/include/xsm/xsm-core.h    |  26 ----
 xen/include/xsm/xsm.h         |   8 --
 xen/xsm/Makefile              |   4 +-
 xen/xsm/dummy.c               |   4 +-
 xen/{include => }/xsm/dummy.h | 220 ++++++++++++++++------------------
 xen/xsm/silo.c                |  17 +--
 xen/xsm/xsm_core.c            |   4 -
 9 files changed, 141 insertions(+), 195 deletions(-)
 rename xen/{include => }/xsm/dummy.h (63%)

diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 1594ce4e73..3b50391392 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -200,23 +200,20 @@ config XENOPROF
 
 	  If unsure, say Y.
 
-config XSM
-	bool "Xen Security Modules support"
-	default ARM
-	---help---
-	  Enables the security framework known as Xen Security Modules which
-	  allows administrators fine-grained control over a Xen domain and
-	  its capabilities by defining permissible interactions between domains,
-	  the hypervisor itself, and related resources such as memory and
-	  devices.
+menu "Xen Security Modules"
 
-	  If unsure, say N.
+config XSM_EVTCHN_LABELING
+	bool "Enables security labeling of event channels"
+	default n
+	help
+	  This enables an XSM module to label and enforce access control over
+	  event channels.
 
 config XSM_FLASK
-	def_bool y
-	prompt "FLux Advanced Security Kernel support"
-	depends on XSM
-	---help---
+	bool "FLux Advanced Security Kernel support"
+	default n
+	select XSM_EVTCHN_LABELING
+	help
 	  Enables FLASK (FLux Advanced Security Kernel) as the access control
 	  mechanism used by the XSM framework.  This provides a mandatory access
 	  control framework by which security enforcement, isolation, and
@@ -226,10 +223,10 @@ config XSM_FLASK
 	  If unsure, say Y.
 
 config XSM_FLASK_AVC_STATS
-	def_bool y
-	prompt "Maintain statistics on the FLASK access vector cache" if EXPERT
+	bool "Maintain statistics on the FLASK access vector cache" if EXPERT
+	default y
 	depends on XSM_FLASK
-	---help---
+	help
 	  Maintain counters on the access vector cache that can be viewed using
 	  the FLASK_AVC_CACHESTATS sub-op of the xsm_op hypercall.  Disabling
 	  this will save a tiny amount of memory and time to update the stats.
@@ -240,7 +237,7 @@ config XSM_FLASK_POLICY
 	bool "Compile Xen with a built-in FLASK security policy"
 	default y if "$(XEN_HAS_CHECKPOLICY)" = "y"
 	depends on XSM_FLASK
-	---help---
+	help
 	  This includes a default XSM policy in the hypervisor so that the
 	  bootloader does not need to load a policy to get sane behavior from an
 	  XSM-enabled hypervisor.  If this is disabled, a policy must be
@@ -253,10 +250,10 @@ config XSM_FLASK_POLICY
 	  If unsure, say Y.
 
 config XSM_SILO
-	def_bool y
-	prompt "SILO support"
-	depends on XSM
-	---help---
+	bool "SILO support"
+	default y if ARM
+	default n
+	help
 	  Enables SILO as the access control mechanism used by the XSM framework.
 	  This is not the default module, add boot parameter xsm=silo to choose
 	  it. This will deny any unmediated communication channels (grant tables
@@ -265,24 +262,26 @@ config XSM_SILO
 	  If unsure, say Y.
 
 choice
-	prompt "Default XSM implementation"
-	depends on XSM
+	prompt "Default XSM module"
 	default XSM_SILO_DEFAULT if XSM_SILO && ARM
 	default XSM_FLASK_DEFAULT if XSM_FLASK
 	default XSM_SILO_DEFAULT if XSM_SILO
 	default XSM_DUMMY_DEFAULT
 	config XSM_DUMMY_DEFAULT
-		bool "Match non-XSM behavior"
+		bool "Classic Dom0 behavior"
 	config XSM_FLASK_DEFAULT
 		bool "FLux Advanced Security Kernel" if XSM_FLASK
 	config XSM_SILO_DEFAULT
 		bool "SILO" if XSM_SILO
+
 endchoice
 
+endmenu
+
 config LATE_HWDOM
 	bool "Dedicated hardware domain"
 	default n
-	depends on XSM && X86
+	depends on XSM_FLASK && X86
 	---help---
 	  Allows the creation of a dedicated hardware domain distinct from
 	  domain 0 that manages devices without needing access to other
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 28146ee404..aecf0b8424 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -120,7 +120,7 @@ struct evtchn
     unsigned short notify_vcpu_id; /* VCPU for local delivery notification */
     uint32_t fifo_lastq;           /* Data for identifying last queue. */
 
-#ifdef CONFIG_XSM
+#ifdef CONFIG_XSM_EVTCHN_LABELING
     union {
 #ifdef XSM_NEED_GENERIC_EVTCHN_SSID
         /*
diff --git a/xen/include/xsm/xsm-core.h b/xen/include/xsm/xsm-core.h
index 4f5e7a7d17..e2eed30e90 100644
--- a/xen/include/xsm/xsm-core.h
+++ b/xen/include/xsm/xsm-core.h
@@ -191,8 +191,6 @@ struct xsm_operations {
 
 extern void xsm_fixup_ops(struct xsm_operations *ops);
 
-#ifdef CONFIG_XSM
-
 #ifdef CONFIG_MULTIBOOT
 extern int xsm_multiboot_init(unsigned long *module_map,
                               const multiboot_info_t *mbi);
@@ -236,28 +234,4 @@ static inline struct xsm_operations *silo_init(void)
 }
 #endif
 
-#else /* CONFIG_XSM */
-
-#ifdef CONFIG_MULTIBOOT
-static inline int xsm_multiboot_init (unsigned long *module_map,
-                                      const multiboot_info_t *mbi)
-{
-    return 0;
-}
-#endif
-
-#ifdef CONFIG_HAS_DEVICE_TREE
-static inline int xsm_dt_init(void)
-{
-    return 0;
-}
-
-static inline bool has_xsm_magic(paddr_t start)
-{
-    return false;
-}
-#endif /* CONFIG_HAS_DEVICE_TREE */
-
-#endif /* CONFIG_XSM */
-
 #endif /* __XSM_CORE_H */
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index f86cea4f88..170eae9b25 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -22,8 +22,6 @@
 #include <xen/multiboot.h>
 #include <xsm/xsm-core.h>
 
-#ifdef CONFIG_XSM
-
 extern struct xsm_operations xsm_ops;
 
 static inline void xsm_security_domaininfo (struct domain *d,
@@ -556,10 +554,4 @@ static inline int xsm_argo_send(const struct domain *d, const struct domain *t)
 
 #endif /* CONFIG_ARGO */
 
-#else /* CONFIG_XSM */
-
-#include <xsm/dummy.h>
-
-#endif /* CONFIG_XSM */
-
 #endif /* __XSM_H */
diff --git a/xen/xsm/Makefile b/xen/xsm/Makefile
index cf0a728f1c..0059794dd5 100644
--- a/xen/xsm/Makefile
+++ b/xen/xsm/Makefile
@@ -1,6 +1,6 @@
 obj-y += xsm_core.o
-obj-$(CONFIG_XSM) += xsm_policy.o
-obj-$(CONFIG_XSM) += dummy.o
+obj-y += xsm_policy.o
+obj-y += dummy.o
 obj-$(CONFIG_XSM_SILO) += silo.o
 
 obj-$(CONFIG_XSM_FLASK) += flask/
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index de4d6cf2cf..bfd8b96f08 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -10,12 +10,12 @@
  *  as published by the Free Software Foundation.
  */
 
-#include <xsm/dummy.h>
+#include "dummy.h"
 
 #define set_to_dummy_if_null(ops, function)                            \
     do {                                                               \
         if ( !ops->function )                                          \
-            ops->function = xsm_##function;                            \
+            ops->function = dummy_##function;                          \
     } while (0)
 
 void __init xsm_fixup_ops (struct xsm_operations *ops)
diff --git a/xen/include/xsm/dummy.h b/xen/xsm/dummy.h
similarity index 63%
rename from xen/include/xsm/dummy.h
rename to xen/xsm/dummy.h
index c445c5681b..a3e698c3b5 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/xsm/dummy.h
@@ -42,12 +42,10 @@ static inline void __xsm_action_mismatch_detected(void)
 void __xsm_action_mismatch_detected(void);
 #endif
 
-#ifdef CONFIG_XSM
-
-/* In CONFIG_XSM builds, this header file is included from xsm/dummy.c, and
- * contains static (not inline) functions compiled to the dummy XSM module.
- * There is no xsm_default_t argument available, so the value from the assertion
- * is used to initialize the variable.
+/* This header file is included from xsm/dummy.c, and contains static (not
+ * inline) functions compiled to the dummy XSM module.  There is no
+ * xsm_default_t argument available, so the value from the assertion is used to
+ * initialize the variable.
  */
 #define XSM_INLINE __maybe_unused
 
@@ -55,20 +53,6 @@ void __xsm_action_mismatch_detected(void);
 #define XSM_DEFAULT_VOID void
 #define XSM_ASSERT_ACTION(def) xsm_default_t action = def; (void)action
 
-#else /* CONFIG_XSM */
-
-/* In !CONFIG_XSM builds, this header file is included from xsm/xsm.h, and
- * contains inline functions for each XSM hook. These functions also perform
- * compile-time checks on the xsm_default_t argument to ensure that the behavior
- * of the dummy XSM module is the same as the behavior with XSM disabled.
- */
-#define XSM_INLINE always_inline
-#define XSM_DEFAULT_ARG xsm_default_t action,
-#define XSM_DEFAULT_VOID xsm_default_t action
-#define XSM_ASSERT_ACTION(def) LINKER_BUG_ON(def != action)
-
-#endif /* CONFIG_XSM */
-
 static always_inline int xsm_default_action(
     xsm_default_t action, struct domain *src, struct domain *target)
 {
@@ -98,43 +82,43 @@ static always_inline int xsm_default_action(
     }
 }
 
-static XSM_INLINE void xsm_security_domaininfo(struct domain *d,
+static XSM_INLINE void dummy_security_domaininfo(struct domain *d,
                                     struct xen_domctl_getdomaininfo *info)
 {
     return;
 }
 
-static XSM_INLINE int xsm_domain_create(XSM_DEFAULT_ARG struct domain *d, u32 ssidref)
+static XSM_INLINE int dummy_domain_create(XSM_DEFAULT_ARG struct domain *d, u32 ssidref)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_getdomaininfo(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_getdomaininfo(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_domctl_scheduler_op(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static XSM_INLINE int dummy_domctl_scheduler_op(XSM_DEFAULT_ARG struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_sysctl_scheduler_op(XSM_DEFAULT_ARG int cmd)
+static XSM_INLINE int dummy_sysctl_scheduler_op(XSM_DEFAULT_ARG int cmd)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_set_target(XSM_DEFAULT_ARG struct domain *d, struct domain *e)
+static XSM_INLINE int dummy_set_target(XSM_DEFAULT_ARG struct domain *d, struct domain *e)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_domctl(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static XSM_INLINE int dummy_domctl(XSM_DEFAULT_ARG struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( cmd )
@@ -151,85 +135,85 @@ static XSM_INLINE int xsm_domctl(XSM_DEFAULT_ARG struct domain *d, int cmd)
     }
 }
 
-static XSM_INLINE int xsm_sysctl(XSM_DEFAULT_ARG int cmd)
+static XSM_INLINE int dummy_sysctl(XSM_DEFAULT_ARG int cmd)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_readconsole(XSM_DEFAULT_ARG uint32_t clear)
+static XSM_INLINE int dummy_readconsole(XSM_DEFAULT_ARG uint32_t clear)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_alloc_security_domain(struct domain *d)
+static XSM_INLINE int dummy_alloc_security_domain(struct domain *d)
 {
     return 0;
 }
 
-static XSM_INLINE void xsm_free_security_domain(struct domain *d)
+static XSM_INLINE void dummy_free_security_domain(struct domain *d)
 {
     return;
 }
 
-static XSM_INLINE int xsm_grant_mapref(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2,
+static XSM_INLINE int dummy_grant_mapref(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2,
                                                                 uint32_t flags)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_grant_unmapref(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_grant_unmapref(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_grant_setup(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_grant_setup(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_grant_transfer(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_grant_transfer(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_grant_copy(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_grant_copy(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_grant_query_size(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_grant_query_size(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_memory_exchange(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_memory_exchange(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_memory_adjust_reservation(XSM_DEFAULT_ARG struct domain *d1,
+static XSM_INLINE int dummy_memory_adjust_reservation(XSM_DEFAULT_ARG struct domain *d1,
                                                             struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_memory_stat_reservation(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_memory_stat_reservation(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_console_io(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static XSM_INLINE int dummy_console_io(XSM_DEFAULT_ARG struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     if ( d->is_console )
@@ -241,129 +225,129 @@ static XSM_INLINE int xsm_console_io(XSM_DEFAULT_ARG struct domain *d, int cmd)
     return xsm_default_action(XSM_PRIV, d, NULL);
 }
 
-static XSM_INLINE int xsm_profile(XSM_DEFAULT_ARG struct domain *d, int op)
+static XSM_INLINE int dummy_profile(XSM_DEFAULT_ARG struct domain *d, int op)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d, NULL);
 }
 
-static XSM_INLINE int xsm_kexec(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_kexec(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_schedop_shutdown(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_schedop_shutdown(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_memory_pin_page(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2,
+static XSM_INLINE int dummy_memory_pin_page(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2,
                                           struct page_info *page)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_claim_pages(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_claim_pages(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_evtchn_unbound(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn,
+static XSM_INLINE int dummy_evtchn_unbound(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn,
                                          domid_t id2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_evtchn_interdomain(XSM_DEFAULT_ARG struct domain *d1, struct evtchn
+static XSM_INLINE int dummy_evtchn_interdomain(XSM_DEFAULT_ARG struct domain *d1, struct evtchn
                                 *chan1, struct domain *d2, struct evtchn *chan2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE void xsm_evtchn_close_post(struct evtchn *chn)
+static XSM_INLINE void dummy_evtchn_close_post(struct evtchn *chn)
 {
     return;
 }
 
-static XSM_INLINE int xsm_evtchn_send(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn)
+static XSM_INLINE int dummy_evtchn_send(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d, NULL);
 }
 
-static XSM_INLINE int xsm_evtchn_status(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn)
+static XSM_INLINE int dummy_evtchn_status(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_evtchn_reset(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_evtchn_reset(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_alloc_security_evtchns(
+static XSM_INLINE int dummy_alloc_security_evtchns(
     struct evtchn chn[], unsigned int nr)
 {
     return 0;
 }
 
-static XSM_INLINE void xsm_free_security_evtchns(
+static XSM_INLINE void dummy_free_security_evtchns(
     struct evtchn chn[], unsigned int nr)
 {
     return;
 }
 
-static XSM_INLINE char *xsm_show_security_evtchn(struct domain *d, const struct evtchn *chn)
+static XSM_INLINE char *dummy_show_security_evtchn(struct domain *d, const struct evtchn *chn)
 {
     return NULL;
 }
 
-static XSM_INLINE int xsm_init_hardware_domain(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_init_hardware_domain(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_get_pod_target(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_get_pod_target(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_set_pod_target(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_set_pod_target(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_get_vnumainfo(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_get_vnumainfo(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
-static XSM_INLINE int xsm_get_device_group(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static XSM_INLINE int dummy_get_device_group(XSM_DEFAULT_ARG uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_assign_device(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf)
+static XSM_INLINE int dummy_assign_device(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_deassign_device(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf)
+static XSM_INLINE int dummy_deassign_device(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
@@ -372,14 +356,14 @@ static XSM_INLINE int xsm_deassign_device(XSM_DEFAULT_ARG struct domain *d, uint
 #endif /* HAS_PASSTHROUGH && HAS_PCI */
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_DEVICE_TREE)
-static XSM_INLINE int xsm_assign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
+static XSM_INLINE int dummy_assign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
                                           const char *dtpath)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_deassign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
+static XSM_INLINE int dummy_deassign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
                                             const char *dtpath)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
@@ -388,134 +372,134 @@ static XSM_INLINE int xsm_deassign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
 
 #endif /* HAS_PASSTHROUGH && HAS_DEVICE_TREE */
 
-static XSM_INLINE int xsm_resource_plug_core(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_resource_plug_core(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_resource_unplug_core(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_resource_unplug_core(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_resource_plug_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static XSM_INLINE int dummy_resource_plug_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_resource_unplug_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static XSM_INLINE int dummy_resource_unplug_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_resource_setup_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static XSM_INLINE int dummy_resource_setup_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_resource_setup_gsi(XSM_DEFAULT_ARG int gsi)
+static XSM_INLINE int dummy_resource_setup_gsi(XSM_DEFAULT_ARG int gsi)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_resource_setup_misc(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_resource_setup_misc(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_page_offline(XSM_DEFAULT_ARG uint32_t cmd)
+static XSM_INLINE int dummy_page_offline(XSM_DEFAULT_ARG uint32_t cmd)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_hypfs_op(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_hypfs_op(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE long xsm_do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
+static XSM_INLINE long dummy_do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
     return -ENOSYS;
 }
 
 #ifdef CONFIG_COMPAT
-static XSM_INLINE int xsm_do_compat_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
+static XSM_INLINE int dummy_do_compat_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
     return -ENOSYS;
 }
 #endif
 
-static XSM_INLINE char *xsm_show_irq_sid(int irq)
+static XSM_INLINE char *dummy_show_irq_sid(int irq)
 {
     return NULL;
 }
 
-static XSM_INLINE int xsm_map_domain_pirq(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_map_domain_pirq(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_map_domain_irq(XSM_DEFAULT_ARG struct domain *d,
+static XSM_INLINE int dummy_map_domain_irq(XSM_DEFAULT_ARG struct domain *d,
                                          int irq, const void *data)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_unmap_domain_pirq(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_unmap_domain_pirq(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_bind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind)
+static XSM_INLINE int dummy_bind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_unbind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind)
+static XSM_INLINE int dummy_unbind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_unmap_domain_irq(XSM_DEFAULT_ARG struct domain *d,
+static XSM_INLINE int dummy_unmap_domain_irq(XSM_DEFAULT_ARG struct domain *d,
                                            int irq, const void *data)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_irq_permission(XSM_DEFAULT_ARG struct domain *d, int pirq, uint8_t allow)
+static XSM_INLINE int dummy_irq_permission(XSM_DEFAULT_ARG struct domain *d, int pirq, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_iomem_permission(XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
+static XSM_INLINE int dummy_iomem_permission(XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_iomem_mapping(XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
+static XSM_INLINE int dummy_iomem_mapping(XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_pci_config_permission(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf,
+static XSM_INLINE int dummy_pci_config_permission(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf,
                                         uint16_t start, uint16_t end,
                                         uint8_t access)
 {
@@ -523,43 +507,43 @@ static XSM_INLINE int xsm_pci_config_permission(XSM_DEFAULT_ARG struct domain *d
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_add_to_physmap(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_add_to_physmap(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_remove_from_physmap(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static XSM_INLINE int dummy_remove_from_physmap(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int xsm_map_gmfn_foreign(XSM_DEFAULT_ARG struct domain *d, struct domain *t)
+static XSM_INLINE int dummy_map_gmfn_foreign(XSM_DEFAULT_ARG struct domain *d, struct domain *t)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, t);
 }
 
-static XSM_INLINE int xsm_hvm_param(XSM_DEFAULT_ARG struct domain *d, unsigned long op)
+static XSM_INLINE int dummy_hvm_param(XSM_DEFAULT_ARG struct domain *d, unsigned long op)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_hvm_control(XSM_DEFAULT_ARG struct domain *d, unsigned long op)
+static XSM_INLINE int dummy_hvm_control(XSM_DEFAULT_ARG struct domain *d, unsigned long op)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_hvm_param_altp2mhvm(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_hvm_param_altp2mhvm(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_hvm_altp2mhvm_op(XSM_DEFAULT_ARG struct domain *d, uint64_t mode, uint32_t op)
+static XSM_INLINE int dummy_hvm_altp2mhvm_op(XSM_DEFAULT_ARG struct domain *d, uint64_t mode, uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
 
@@ -578,14 +562,14 @@ static XSM_INLINE int xsm_hvm_altp2mhvm_op(XSM_DEFAULT_ARG struct domain *d, uin
     }
 }
 
-static XSM_INLINE int xsm_vm_event_control(XSM_DEFAULT_ARG struct domain *d, int mode, int op)
+static XSM_INLINE int dummy_vm_event_control(XSM_DEFAULT_ARG struct domain *d, int mode, int op)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
 #ifdef CONFIG_MEM_ACCESS
-static XSM_INLINE int xsm_mem_access(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_mem_access(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
@@ -593,7 +577,7 @@ static XSM_INLINE int xsm_mem_access(XSM_DEFAULT_ARG struct domain *d)
 #endif
 
 #ifdef CONFIG_MEM_PAGING
-static XSM_INLINE int xsm_mem_paging(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_mem_paging(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
@@ -601,57 +585,57 @@ static XSM_INLINE int xsm_mem_paging(XSM_DEFAULT_ARG struct domain *d)
 #endif
 
 #ifdef CONFIG_MEM_SHARING
-static XSM_INLINE int xsm_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 #endif
 
-static XSM_INLINE int xsm_platform_op(XSM_DEFAULT_ARG uint32_t op)
+static XSM_INLINE int dummy_platform_op(XSM_DEFAULT_ARG uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
 #ifdef CONFIG_X86
-static XSM_INLINE int xsm_do_mca(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_do_mca(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_shadow_control(XSM_DEFAULT_ARG struct domain *d, uint32_t op)
+static XSM_INLINE int dummy_shadow_control(XSM_DEFAULT_ARG struct domain *d, uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_mem_sharing_op(XSM_DEFAULT_ARG struct domain *d, struct domain *cd, int op)
+static XSM_INLINE int dummy_mem_sharing_op(XSM_DEFAULT_ARG struct domain *d, struct domain *cd, int op)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, cd);
 }
 
-static XSM_INLINE int xsm_apic(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static XSM_INLINE int dummy_apic(XSM_DEFAULT_ARG struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, d, NULL);
 }
 
-static XSM_INLINE int xsm_machine_memory_map(XSM_DEFAULT_VOID)
+static XSM_INLINE int dummy_machine_memory_map(XSM_DEFAULT_VOID)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int xsm_domain_memory_map(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_domain_memory_map(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_mmu_update(XSM_DEFAULT_ARG struct domain *d, struct domain *t,
+static XSM_INLINE int dummy_mmu_update(XSM_DEFAULT_ARG struct domain *d, struct domain *t,
                                      struct domain *f, uint32_t flags)
 {
     int rc = 0;
@@ -663,38 +647,38 @@ static XSM_INLINE int xsm_mmu_update(XSM_DEFAULT_ARG struct domain *d, struct do
     return rc;
 }
 
-static XSM_INLINE int xsm_mmuext_op(XSM_DEFAULT_ARG struct domain *d, struct domain *f)
+static XSM_INLINE int dummy_mmuext_op(XSM_DEFAULT_ARG struct domain *d, struct domain *f)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, f);
 }
 
-static XSM_INLINE int xsm_update_va_mapping(XSM_DEFAULT_ARG struct domain *d, struct domain *f, 
+static XSM_INLINE int dummy_update_va_mapping(XSM_DEFAULT_ARG struct domain *d, struct domain *f,
                                                             l1_pgentry_t pte)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, f);
 }
 
-static XSM_INLINE int xsm_priv_mapping(XSM_DEFAULT_ARG struct domain *d, struct domain *t)
+static XSM_INLINE int dummy_priv_mapping(XSM_DEFAULT_ARG struct domain *d, struct domain *t)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, t);
 }
 
-static XSM_INLINE int xsm_ioport_permission(XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
+static XSM_INLINE int dummy_ioport_permission(XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_ioport_mapping(XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
+static XSM_INLINE int dummy_ioport_mapping(XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int xsm_pmu_op (XSM_DEFAULT_ARG struct domain *d, unsigned int op)
+static XSM_INLINE int dummy_pmu_op (XSM_DEFAULT_ARG struct domain *d, unsigned int op)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( op )
@@ -711,30 +695,30 @@ static XSM_INLINE int xsm_pmu_op (XSM_DEFAULT_ARG struct domain *d, unsigned int
 
 #endif /* CONFIG_X86 */
 
-static XSM_INLINE int xsm_dm_op(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_dm_op(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
 #ifdef CONFIG_ARGO
-static XSM_INLINE int xsm_argo_enable(const struct domain *d)
+static XSM_INLINE int dummy_argo_enable(const struct domain *d)
 {
     return 0;
 }
 
-static XSM_INLINE int xsm_argo_register_single_source(const struct domain *d,
+static XSM_INLINE int dummy_argo_register_single_source(const struct domain *d,
                                                       const struct domain *t)
 {
     return 0;
 }
 
-static XSM_INLINE int xsm_argo_register_any_source(const struct domain *d)
+static XSM_INLINE int dummy_argo_register_any_source(const struct domain *d)
 {
     return 0;
 }
 
-static XSM_INLINE int xsm_argo_send(const struct domain *d,
+static XSM_INLINE int dummy_argo_send(const struct domain *d,
                                     const struct domain *t)
 {
     return 0;
@@ -743,7 +727,7 @@ static XSM_INLINE int xsm_argo_send(const struct domain *d,
 #endif /* CONFIG_ARGO */
 
 #include <public/version.h>
-static XSM_INLINE int xsm_xen_version (XSM_DEFAULT_ARG uint32_t op)
+static XSM_INLINE int dummy_xen_version (XSM_DEFAULT_ARG uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( op )
@@ -767,7 +751,7 @@ static XSM_INLINE int xsm_xen_version (XSM_DEFAULT_ARG uint32_t op)
     }
 }
 
-static XSM_INLINE int xsm_domain_resource_map(XSM_DEFAULT_ARG struct domain *d)
+static XSM_INLINE int dummy_domain_resource_map(XSM_DEFAULT_ARG struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c
index 754787e895..78dc429df7 100644
--- a/xen/xsm/silo.c
+++ b/xen/xsm/silo.c
@@ -17,7 +17,8 @@
  * You should have received a copy of the GNU General Public License along with
  * this program; If not, see <http://www.gnu.org/licenses/>.
  */
-#include <xsm/dummy.h>
+#include <xsm/xsm-core.h>
+#include "dummy.h"
 
 /*
  * Check if inter-domain communication is allowed.
@@ -43,7 +44,7 @@ static int silo_evtchn_unbound(struct domain *d1, struct evtchn *chn,
     else
     {
         if ( silo_mode_dom_check(d1, d2) )
-            rc = xsm_evtchn_unbound(d1, chn, id2);
+            rc = dummy_evtchn_unbound(d1, chn, id2);
         rcu_unlock_domain(d2);
     }
 
@@ -54,7 +55,7 @@ static int silo_evtchn_interdomain(struct domain *d1, struct evtchn *chan1,
                                    struct domain *d2, struct evtchn *chan2)
 {
     if ( silo_mode_dom_check(d1, d2) )
-        return xsm_evtchn_interdomain(d1, chan1, d2, chan2);
+        return dummy_evtchn_interdomain(d1, chan1, d2, chan2);
     return -EPERM;
 }
 
@@ -62,21 +63,21 @@ static int silo_grant_mapref(struct domain *d1, struct domain *d2,
                              uint32_t flags)
 {
     if ( silo_mode_dom_check(d1, d2) )
-        return xsm_grant_mapref(d1, d2, flags);
+        return dummy_grant_mapref(d1, d2, flags);
     return -EPERM;
 }
 
 static int silo_grant_transfer(struct domain *d1, struct domain *d2)
 {
     if ( silo_mode_dom_check(d1, d2) )
-        return xsm_grant_transfer(d1, d2);
+        return dummy_grant_transfer(d1, d2);
     return -EPERM;
 }
 
 static int silo_grant_copy(struct domain *d1, struct domain *d2)
 {
     if ( silo_mode_dom_check(d1, d2) )
-        return xsm_grant_copy(d1, d2);
+        return dummy_grant_copy(d1, d2);
     return -EPERM;
 }
 
@@ -86,14 +87,14 @@ static int silo_argo_register_single_source(const struct domain *d1,
                                             const struct domain *d2)
 {
     if ( silo_mode_dom_check(d1, d2) )
-        return xsm_argo_register_single_source(d1, d2);
+        return dummy_argo_register_single_source(d1, d2);
     return -EPERM;
 }
 
 static int silo_argo_send(const struct domain *d1, const struct domain *d2)
 {
     if ( silo_mode_dom_check(d1, d2) )
-        return xsm_argo_send(d1, d2);
+        return dummy_argo_send(d1, d2);
     return -EPERM;
 }
 
diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
index 7265f742e9..1654648961 100644
--- a/xen/xsm/xsm_core.c
+++ b/xen/xsm/xsm_core.c
@@ -18,8 +18,6 @@
 #include <xen/hypercall.h>
 #include <xsm/xsm.h>
 
-#ifdef CONFIG_XSM
-
 #ifdef CONFIG_MULTIBOOT
 #include <asm/setup.h>
 #endif
@@ -217,8 +215,6 @@ bool __init has_xsm_magic(paddr_t start)
 }
 #endif
 
-#endif
-
 long do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
     return xsm_do_xsm_op(op);
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:28:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:28:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154794.285933 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32XV-0003Fk-5c; Mon, 12 Jul 2021 20:28:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154794.285933; Mon, 12 Jul 2021 20:28:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32XV-0003Fd-2k; Mon, 12 Jul 2021 20:28:29 +0000
Received: by outflank-mailman (input) for mailman id 154794;
 Mon, 12 Jul 2021 20:28:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32XT-0002d1-TJ
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:28:27 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d46873e7-58be-4c02-995b-cdbd467750bd;
 Mon, 12 Jul 2021 20:28:20 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121631731159.05291359206763;
 Mon, 12 Jul 2021 13:27:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d46873e7-58be-4c02-995b-cdbd467750bd
ARC-Seal: i=1; a=rsa-sha256; t=1626121633; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=kLdJdIu2B0sLjxgDl0cXV5ahlraberDEFR87mh1XZs9TlmMNaZunpWNjNq02oBNQycG5VG9+Fc3SrBKprpLIKXCFTFBie4a7FVI9VRV7UqpOPmbDh2l5I4MsvBlCm01m2MgpkJvrnmf9FbavQMIusRT0tdUICk/qW6gjPvrF+Mo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121633; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=DGzgCbEHasEIauV+Grt/GSDN45RLCvReoOth5bQGsrA=; 
	b=nufHYMT4eSltdL2thnqcZqiN19ON6WU6lFW7sEDVzoq0+wvnOQU5NqUzaHZ5MW9jYzgmqeAc5u7VIYedev3ZF55bpZZZjtW2xwG0ithFloGci/YD0ckmH7AZjXAYDjhvLZ3lXC8SaMC45K2+F4XNeZLyaX2vsLab/rrOanzyVE8=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121633;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=DGzgCbEHasEIauV+Grt/GSDN45RLCvReoOth5bQGsrA=;
	b=k05zMi0++lXNBT/DGe/jzY7TQLwS94Fs6aAVtZClVGJmJfTbhmHDkk/Dtqo0lw0a
	14Wq27Y+gsOphTXoDcFrSx5Oh4fg0wCi9OyvjURR4t9/LiM/w52ObDewf8cJ3ftLvPX
	/k/mvwJEFMzF/Ad34rg0QY9BOIZSBjbk+JC7Xsqg=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v2 07/10] xsm: drop generic event channel labeling
Date: Mon, 12 Jul 2021 16:32:30 -0400
Message-Id: <20210712203233.20289-8-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

The generic event channel labeling has not been used by any XSM module since
its introduction. This commit removes the capability leaving FLASK labeling
field always present. In the future if a new XSM module needs to have its own
channel label, this or a new form can be introduced.
---
 xen/common/Kconfig      | 8 --------
 xen/include/xen/sched.h | 9 ---------
 2 files changed, 17 deletions(-)

diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 3b50391392..d03a991183 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -202,17 +202,9 @@ config XENOPROF
 
 menu "Xen Security Modules"
 
-config XSM_EVTCHN_LABELING
-	bool "Enables security labeling of event channels"
-	default n
-	help
-	  This enables an XSM module to label and enforce access control over
-	  event channels.
-
 config XSM_FLASK
 	bool "FLux Advanced Security Kernel support"
 	default n
-	select XSM_EVTCHN_LABELING
 	help
 	  Enables FLASK (FLux Advanced Security Kernel) as the access control
 	  mechanism used by the XSM framework.  This provides a mandatory access
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index aecf0b8424..ef6ba6d791 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -120,15 +120,7 @@ struct evtchn
     unsigned short notify_vcpu_id; /* VCPU for local delivery notification */
     uint32_t fifo_lastq;           /* Data for identifying last queue. */
 
-#ifdef CONFIG_XSM_EVTCHN_LABELING
     union {
-#ifdef XSM_NEED_GENERIC_EVTCHN_SSID
-        /*
-         * If an XSM module needs more space for its event channel context,
-         * this pointer stores the necessary data for the security server.
-         */
-        void *generic;
-#endif
 #ifdef CONFIG_XSM_FLASK
         /*
          * Inlining the contents of the structure for FLASK avoids unneeded
@@ -138,7 +130,6 @@ struct evtchn
         uint32_t flask_sid;
 #endif
     } ssid;
-#endif
 } __attribute__((aligned(64)));
 
 int  evtchn_init(struct domain *d, unsigned int max_port);
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:30:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:30:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154807.285945 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32ZP-0004si-IZ; Mon, 12 Jul 2021 20:30:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154807.285945; Mon, 12 Jul 2021 20:30:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32ZP-0004sb-EU; Mon, 12 Jul 2021 20:30:27 +0000
Received: by outflank-mailman (input) for mailman id 154807;
 Mon, 12 Jul 2021 20:30:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32ZN-0004sV-R3
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:30:25 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9f31bf61-55c3-4e42-b684-1863e66e6827;
 Mon, 12 Jul 2021 20:30:21 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121634497312.6061069236812;
 Mon, 12 Jul 2021 13:27:14 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9f31bf61-55c3-4e42-b684-1863e66e6827
ARC-Seal: i=1; a=rsa-sha256; t=1626121637; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=eqjJ3+td5fkuOHmczY4OBzCD4DKRvkBPx4EnV0TJt2qAV2yV3RGbyt/qWTj9KaKFybEssBsBUv/ka9AhUB6JWGfxoQgs2ENAUOD17JeQKPyCi1QZIFaafxihygftArf0oPuIa24KB0osVTUOov0c1V6qNDjhVmpy4cDRwDI54wo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121637; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=l7iTiH1TnFmdKssJ7HyibwMjIoKF172+3QJDRd39Re0=; 
	b=JOGL2u1zmwUhj/NyQ4LGRW826aIYw/n0kR624J65fkrWQw1NHREvjp/vnlZ/Y2OduOSELJblPUY9mD+xlC17OAcz6V3uVSMkbVpISzMKMbJITdj03azxOLMCg5XFgdpp01Yu4EBMiXSdhd7t380TOrSD25lpSLADWGnDFZf+9ek=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121637;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=l7iTiH1TnFmdKssJ7HyibwMjIoKF172+3QJDRd39Re0=;
	b=muJp7JkNqoiAqMKxSlc43FuuFVUfRtaAQH4UnZn7uxKccIjFSG5BmPZCtpF5YwND
	qNPmxOHb4JI3KkkpdJ/Sbdchuq9tvsti6K6rowu8wj7oySyQWGi4fTqGS2cJCmCiLe6
	/IsMDlYfUae0l/830VGE6YU72p7x1ba4GjacnSAo=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Tim Deegan <tim@xen.org>,
	Alexandru Isaila <aisaila@bitdefender.com>,
	Petre Pircalabu <ppircalabu@bitdefender.com>,
	xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Tamas K Lengyel <tamas@tklengyel.com>,
	Juergen Gross <jgross@suse.com>,
	Dario Faggioli <dfaggioli@suse.com>,
	Paul Durrant <paul@xen.org>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 08/10] xsm: remove xsm_default_t from hook definitions
Date: Mon, 12 Jul 2021 16:32:31 -0400
Message-Id: <20210712203233.20289-9-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

The passing of an xsm_default_t at each of the xsm hook call sites
served different functions depending on whether XSM was enabled or not.
When XSM was not enabled it attempted to function as a link-time check
that declared default action at the call site matched the default
declared action for that hook in the dummy policy. When XSM was enabled,
it would just drop the  parameter.

The removal of these values is two fold. They are a redundancy that
provides little context, especially when the value is XSM_OTHER.  A more
appropriate approach is that the hook functions in the dummy policy
should provide reasoning of the default value when it is not clear. Next
is that with the change to make XSM always enabled is the case where the
parameter is completely ignored. Thus it is logical to remove them from
the hook call sites.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/arch/arm/dm.c                     |   2 +-
 xen/arch/arm/domctl.c                 |   6 +-
 xen/arch/arm/hvm.c                    |   2 +-
 xen/arch/arm/mm.c                     |   2 +-
 xen/arch/arm/platform_hypercall.c     |   2 +-
 xen/arch/x86/cpu/mcheck/mce.c         |   2 +-
 xen/arch/x86/cpu/vpmu.c               |   2 +-
 xen/arch/x86/domctl.c                 |   8 +-
 xen/arch/x86/hvm/dm.c                 |   2 +-
 xen/arch/x86/hvm/hvm.c                |  12 +-
 xen/arch/x86/irq.c                    |   5 +-
 xen/arch/x86/mm.c                     |  20 +--
 xen/arch/x86/mm/mem_paging.c          |   2 +-
 xen/arch/x86/mm/mem_sharing.c         |   9 +-
 xen/arch/x86/mm/p2m.c                 |   2 +-
 xen/arch/x86/mm/paging.c              |   4 +-
 xen/arch/x86/mm/shadow/set.c          |   2 +-
 xen/arch/x86/msi.c                    |   3 +-
 xen/arch/x86/pci.c                    |   2 +-
 xen/arch/x86/physdev.c                |  17 ++-
 xen/arch/x86/platform_hypercall.c     |  10 +-
 xen/arch/x86/pv/emul-priv-op.c        |   2 +-
 xen/arch/x86/sysctl.c                 |   4 +-
 xen/common/domain.c                   |   4 +-
 xen/common/domctl.c                   |  12 +-
 xen/common/event_channel.c            |  12 +-
 xen/common/grant_table.c              |  16 +--
 xen/common/hypfs.c                    |   2 +-
 xen/common/kernel.c                   |   2 +-
 xen/common/kexec.c                    |   2 +-
 xen/common/mem_access.c               |   2 +-
 xen/common/memory.c                   |  16 +--
 xen/common/monitor.c                  |   2 +-
 xen/common/sched/core.c               |   6 +-
 xen/common/sysctl.c                   |   8 +-
 xen/common/vm_event.c                 |   2 +-
 xen/common/xenoprof.c                 |   2 +-
 xen/drivers/char/console.c            |   2 +-
 xen/drivers/passthrough/device_tree.c |   4 +-
 xen/drivers/passthrough/pci.c         |  12 +-
 xen/include/xsm/xsm.h                 | 172 +++++++++++++-------------
 41 files changed, 197 insertions(+), 203 deletions(-)

diff --git a/xen/arch/arm/dm.c b/xen/arch/arm/dm.c
index 1b3fd6bc7d..c8b89c8f47 100644
--- a/xen/arch/arm/dm.c
+++ b/xen/arch/arm/dm.c
@@ -45,7 +45,7 @@ int dm_op(const struct dmop_args *op_args)
     if ( rc )
         return rc;
 
-    rc = xsm_dm_op(XSM_DM_PRIV, d);
+    rc = xsm_dm_op(d);
     if ( rc )
         goto out;
 
diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c
index b7d27f37df..e7202703ee 100644
--- a/xen/arch/arm/domctl.c
+++ b/xen/arch/arm/domctl.c
@@ -95,11 +95,11 @@ long arch_do_domctl(struct xen_domctl *domctl, struct domain *d,
          * done by the 2 hypercalls for consistency with other
          * architectures.
          */
-        rc = xsm_map_domain_irq(XSM_HOOK, d, irq, NULL);
+        rc = xsm_map_domain_irq(d, irq, NULL);
         if ( rc )
             return rc;
 
-        rc = xsm_bind_pt_irq(XSM_HOOK, d, bind);
+        rc = xsm_bind_pt_irq(d, bind);
         if ( rc )
             return rc;
 
@@ -130,7 +130,7 @@ long arch_do_domctl(struct xen_domctl *domctl, struct domain *d,
         if ( irq != virq )
             return -EINVAL;
 
-        rc = xsm_unbind_pt_irq(XSM_HOOK, d, bind);
+        rc = xsm_unbind_pt_irq(d, bind);
         if ( rc )
             return rc;
 
diff --git a/xen/arch/arm/hvm.c b/xen/arch/arm/hvm.c
index 8951b34086..cf4bd9ae09 100644
--- a/xen/arch/arm/hvm.c
+++ b/xen/arch/arm/hvm.c
@@ -101,7 +101,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( d == NULL )
             return -ESRCH;
 
-        rc = xsm_hvm_param(XSM_TARGET, d, op);
+        rc = xsm_hvm_param(d, op);
         if ( rc )
             goto param_fail;
 
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 0e07335291..a256c89b62 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -1446,7 +1446,7 @@ int xenmem_add_to_physmap_one(
             return -EINVAL;
         }
 
-        rc = xsm_map_gmfn_foreign(XSM_TARGET, d, od);
+        rc = xsm_map_gmfn_foreign(d, od);
         if ( rc )
         {
             put_pg_owner(od);
diff --git a/xen/arch/arm/platform_hypercall.c b/xen/arch/arm/platform_hypercall.c
index 8efac7ee60..52985f8a51 100644
--- a/xen/arch/arm/platform_hypercall.c
+++ b/xen/arch/arm/platform_hypercall.c
@@ -33,7 +33,7 @@ long do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
     if ( d == NULL )
         return -ESRCH;
 
-    ret = xsm_platform_op(XSM_PRIV, op->cmd);
+    ret = xsm_platform_op(op->cmd);
     if ( ret )
         return ret;
 
diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c
index 7f433343bc..58beb96663 100644
--- a/xen/arch/x86/cpu/mcheck/mce.c
+++ b/xen/arch/x86/cpu/mcheck/mce.c
@@ -1376,7 +1376,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
     struct xen_mc_msrinject *mc_msrinject;
     struct xen_mc_mceinject *mc_mceinject;
 
-    ret = xsm_do_mca(XSM_PRIV);
+    ret = xsm_do_mca();
     if ( ret )
         return x86_mcerr("", ret);
 
diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c
index 16e91a3694..34b536417b 100644
--- a/xen/arch/x86/cpu/vpmu.c
+++ b/xen/arch/x86/cpu/vpmu.c
@@ -706,7 +706,7 @@ long do_xenpmu_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t) arg)
     if ( !opt_vpmu_enabled || has_vlapic(current->domain) )
         return -EOPNOTSUPP;
 
-    ret = xsm_pmu_op(XSM_OTHER, current->domain, op);
+    ret = xsm_pmu_op(current->domain, op);
     if ( ret )
         return ret;
 
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 26a76d2be9..8343c59e83 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -234,7 +234,7 @@ long arch_do_domctl(
         if ( (fp + np) <= fp || (fp + np) > MAX_IOPORTS )
             ret = -EINVAL;
         else if ( !ioports_access_permitted(currd, fp, fp + np - 1) ||
-                  xsm_ioport_permission(XSM_HOOK, d, fp, fp + np - 1, allow) )
+                  xsm_ioport_permission(d, fp, fp + np - 1, allow) )
             ret = -EPERM;
         else if ( allow )
             ret = ioports_permit_access(d, fp, fp + np - 1);
@@ -534,7 +534,7 @@ long arch_do_domctl(
         if ( !is_hvm_domain(d) )
             break;
 
-        ret = xsm_bind_pt_irq(XSM_HOOK, d, bind);
+        ret = xsm_bind_pt_irq(d, bind);
         if ( ret )
             break;
 
@@ -569,7 +569,7 @@ long arch_do_domctl(
         if ( irq <= 0 || !irq_access_permitted(currd, irq) )
             break;
 
-        ret = xsm_unbind_pt_irq(XSM_HOOK, d, bind);
+        ret = xsm_unbind_pt_irq(d, bind);
         if ( ret )
             break;
 
@@ -616,7 +616,7 @@ long arch_do_domctl(
         if ( !ioports_access_permitted(currd, fmp, fmp + np - 1) )
             break;
 
-        ret = xsm_ioport_mapping(XSM_HOOK, d, fmp, fmp + np - 1, add);
+        ret = xsm_ioport_mapping(d, fmp, fmp + np - 1, add);
         if ( ret )
             break;
 
diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c
index b60b9f3364..6f996371b9 100644
--- a/xen/arch/x86/hvm/dm.c
+++ b/xen/arch/x86/hvm/dm.c
@@ -370,7 +370,7 @@ int dm_op(const struct dmop_args *op_args)
     if ( !is_hvm_domain(d) )
         goto out;
 
-    rc = xsm_dm_op(XSM_DM_PRIV, d);
+    rc = xsm_dm_op(d);
     if ( rc )
         goto out;
 
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 5086773e5c..c1b0d6fca8 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -4080,7 +4080,7 @@ static int hvm_allow_set_param(struct domain *d,
     uint64_t value;
     int rc;
 
-    rc = xsm_hvm_param(XSM_TARGET, d, HVMOP_set_param);
+    rc = xsm_hvm_param(d, HVMOP_set_param);
     if ( rc )
         return rc;
 
@@ -4227,7 +4227,7 @@ static int hvm_set_param(struct domain *d, uint32_t index, uint64_t value)
         rc = pmtimer_change_ioport(d, value);
         break;
     case HVM_PARAM_ALTP2M:
-        rc = xsm_hvm_param_altp2mhvm(XSM_PRIV, d);
+        rc = xsm_hvm_param_altp2mhvm(d);
         if ( rc )
             break;
         if ( (value > XEN_ALTP2M_limited) ||
@@ -4356,7 +4356,7 @@ static int hvm_allow_get_param(struct domain *d,
 {
     int rc;
 
-    rc = xsm_hvm_param(XSM_TARGET, d, HVMOP_get_param);
+    rc = xsm_hvm_param(d, HVMOP_get_param);
     if ( rc )
         return rc;
 
@@ -4566,7 +4566,7 @@ static int do_altp2m_op(
         goto out;
     }
 
-    if ( (rc = xsm_hvm_altp2mhvm_op(XSM_OTHER, d, mode, a.cmd)) )
+    if ( (rc = xsm_hvm_altp2mhvm_op(d, mode, a.cmd)) )
         goto out;
 
     switch ( a.cmd )
@@ -4947,7 +4947,7 @@ static int hvmop_get_mem_type(
     if ( d == NULL )
         return -ESRCH;
 
-    rc = xsm_hvm_param(XSM_TARGET, d, HVMOP_get_mem_type);
+    rc = xsm_hvm_param(d, HVMOP_get_mem_type);
     if ( rc )
         goto out;
 
@@ -5040,7 +5040,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( unlikely(d != current->domain) )
             rc = -EOPNOTSUPP;
         else if ( is_hvm_domain(d) && paging_mode_shadow(d) )
-            rc = xsm_hvm_param(XSM_TARGET, d, op);
+            rc = xsm_hvm_param(d, op);
         if ( !rc )
             pagetable_dying(a.gpa);
 
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index a1693f92dd..9f79ec1b86 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -2122,7 +2122,7 @@ int map_domain_pirq(
         return 0;
     }
 
-    ret = xsm_map_domain_irq(XSM_HOOK, d, irq, data);
+    ret = xsm_map_domain_irq(d, irq, data);
     if ( ret )
     {
         dprintk(XENLOG_G_ERR, "dom%d: could not permit access to irq %d mapping to pirq %d\n",
@@ -2342,8 +2342,7 @@ int unmap_domain_pirq(struct domain *d, int pirq)
         nr = msi_desc->msi.nvec;
     }
 
-    ret = xsm_unmap_domain_irq(XSM_HOOK, d, irq,
-                               msi_desc ? msi_desc->dev : NULL);
+    ret = xsm_unmap_domain_irq(d, irq, msi_desc ? msi_desc->dev : NULL);
     if ( ret )
         goto done;
 
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 4d799032dc..33d0aa8d4b 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -977,7 +977,7 @@ get_page_from_l1e(
          * minor hack can go away.
          */
         if ( (real_pg_owner == NULL) || (pg_owner == l1e_owner) ||
-             xsm_priv_mapping(XSM_TARGET, pg_owner, real_pg_owner) )
+             xsm_priv_mapping(pg_owner, real_pg_owner) )
         {
             gdprintk(XENLOG_WARNING,
                      "pg_owner d%d l1e_owner d%d, but real_pg_owner d%d\n",
@@ -3407,7 +3407,7 @@ long do_mmuext_op(
         return -EINVAL;
     }
 
-    rc = xsm_mmuext_op(XSM_TARGET, currd, pg_owner);
+    rc = xsm_mmuext_op(currd, pg_owner);
     if ( rc )
     {
         put_pg_owner(pg_owner);
@@ -3497,7 +3497,7 @@ long do_mmuext_op(
                 break;
             }
 
-            rc = xsm_memory_pin_page(XSM_HOOK, currd, pg_owner, page);
+            rc = xsm_memory_pin_page(currd, pg_owner, page);
             if ( !rc && unlikely(test_and_set_bit(_PGT_pinned,
                                                   &page->u.inuse.type_info)) )
             {
@@ -4006,7 +4006,7 @@ long do_mmu_update(
             }
             if ( xsm_needed != xsm_checked )
             {
-                rc = xsm_mmu_update(XSM_TARGET, d, pt_owner, pg_owner, xsm_needed);
+                rc = xsm_mmu_update(d, pt_owner, pg_owner, xsm_needed);
                 if ( rc )
                     break;
                 xsm_checked = xsm_needed;
@@ -4142,7 +4142,7 @@ long do_mmu_update(
             xsm_needed |= XSM_MMU_MACHPHYS_UPDATE;
             if ( xsm_needed != xsm_checked )
             {
-                rc = xsm_mmu_update(XSM_TARGET, d, NULL, pg_owner, xsm_needed);
+                rc = xsm_mmu_update(d, NULL, pg_owner, xsm_needed);
                 if ( rc )
                     break;
                 xsm_checked = xsm_needed;
@@ -4391,7 +4391,7 @@ static int __do_update_va_mapping(
 
     perfc_incr(calls_to_update_va);
 
-    rc = xsm_update_va_mapping(XSM_TARGET, d, pg_owner, val);
+    rc = xsm_update_va_mapping(d, pg_owner, val);
     if ( rc )
         return rc;
 
@@ -4630,7 +4630,7 @@ long arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( d == NULL )
             return -ESRCH;
 
-        rc = xsm_domain_memory_map(XSM_TARGET, d);
+        rc = xsm_domain_memory_map(d);
         if ( rc )
         {
             rcu_unlock_domain(d);
@@ -4697,7 +4697,7 @@ long arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         unsigned int i;
         bool store;
 
-        rc = xsm_machine_memory_map(XSM_PRIV);
+        rc = xsm_machine_memory_map();
         if ( rc )
             return rc;
 
@@ -4787,9 +4787,9 @@ long arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
             return -ESRCH;
 
         if ( cmd == XENMEM_set_pod_target )
-            rc = xsm_set_pod_target(XSM_PRIV, d);
+            rc = xsm_set_pod_target(d);
         else
-            rc = xsm_get_pod_target(XSM_PRIV, d);
+            rc = xsm_get_pod_target(d);
 
         if ( rc != 0 )
             goto pod_target_out_unlock;
diff --git a/xen/arch/x86/mm/mem_paging.c b/xen/arch/x86/mm/mem_paging.c
index 01281f786e..073edb9499 100644
--- a/xen/arch/x86/mm/mem_paging.c
+++ b/xen/arch/x86/mm/mem_paging.c
@@ -452,7 +452,7 @@ int mem_paging_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_paging_op_t) arg)
     if ( rc )
         return rc;
 
-    rc = xsm_mem_paging(XSM_DM_PRIV, d);
+    rc = xsm_mem_paging(d);
     if ( rc )
         goto out;
 
diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
index 98b14f7b0a..db5f5ce8b5 100644
--- a/xen/arch/x86/mm/mem_sharing.c
+++ b/xen/arch/x86/mm/mem_sharing.c
@@ -1883,7 +1883,7 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
     if ( rc )
         return rc;
 
-    rc = xsm_mem_sharing(XSM_DM_PRIV, d);
+    rc = xsm_mem_sharing(d);
     if ( rc )
         goto out;
 
@@ -1928,7 +1928,7 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
         if ( rc )
             goto out;
 
-        rc = xsm_mem_sharing_op(XSM_DM_PRIV, d, cd, mso.op);
+        rc = xsm_mem_sharing_op(d, cd, mso.op);
         if ( rc )
         {
             rcu_unlock_domain(cd);
@@ -1994,7 +1994,7 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
         if ( rc )
             goto out;
 
-        rc = xsm_mem_sharing_op(XSM_DM_PRIV, d, cd, mso.op);
+        rc = xsm_mem_sharing_op(d, cd, mso.op);
         if ( rc )
         {
             rcu_unlock_domain(cd);
@@ -2056,8 +2056,7 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
          * We reuse XENMEM_sharing_op_share XSM check here as this is
          * essentially the same concept repeated over multiple pages.
          */
-        rc = xsm_mem_sharing_op(XSM_DM_PRIV, d, cd,
-                                XENMEM_sharing_op_share);
+        rc = xsm_mem_sharing_op(d, cd, XENMEM_sharing_op_share);
         if ( rc )
         {
             rcu_unlock_domain(cd);
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index dbb1cbeb59..5cee9f5a1d 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -2637,7 +2637,7 @@ static int p2m_add_foreign(struct domain *tdom, unsigned long fgfn,
             goto out;
     }
 
-    rc = xsm_map_gmfn_foreign(XSM_TARGET, tdom, fdom);
+    rc = xsm_map_gmfn_foreign(tdom, fdom);
     if ( rc )
         goto out;
 
diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c
index c304c24526..86a1ec5b80 100644
--- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c
@@ -714,7 +714,7 @@ int paging_domctl(struct domain *d, struct xen_domctl_shadow_op *sc,
         return -EBUSY;
     }
 
-    rc = xsm_shadow_control(XSM_HOOK, d, sc->op);
+    rc = xsm_shadow_control(d, sc->op);
     if ( rc )
         return rc;
 
@@ -771,7 +771,7 @@ long paging_domctl_continuation(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
     if ( d == NULL )
         return -ESRCH;
 
-    ret = xsm_domctl(XSM_OTHER, d, op.cmd);
+    ret = xsm_domctl(d, op.cmd);
     if ( !ret )
     {
         if ( domctl_lock_acquire() )
diff --git a/xen/arch/x86/mm/shadow/set.c b/xen/arch/x86/mm/shadow/set.c
index 87e9c6eeb2..e7433ac81b 100644
--- a/xen/arch/x86/mm/shadow/set.c
+++ b/xen/arch/x86/mm/shadow/set.c
@@ -117,7 +117,7 @@ shadow_get_page_from_l1e(shadow_l1e_t sl1e, struct domain *d, p2m_type_t type)
      * not own, we let it succeed anyway.
      */
     if ( owner && (d != owner) &&
-         !(res = xsm_priv_mapping(XSM_TARGET, d, owner)) )
+         !(res = xsm_priv_mapping(d, owner)) )
     {
         res = get_page_from_l1e(sl1e, d, owner);
         SHADOW_PRINTK("privileged %pd installs map of %pd's mfn %"PRI_mfn": %s\n",
diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c
index 5febc0ea4b..f821d145e5 100644
--- a/xen/arch/x86/msi.c
+++ b/xen/arch/x86/msi.c
@@ -1310,8 +1310,7 @@ int pci_restore_msi_state(struct pci_dev *pdev)
     if ( !use_msi )
         return -EOPNOTSUPP;
 
-    ret = xsm_resource_setup_pci(XSM_PRIV,
-                                (pdev->seg << 16) | (pdev->bus << 8) |
+    ret = xsm_resource_setup_pci((pdev->seg << 16) | (pdev->bus << 8) |
                                 pdev->devfn);
     if ( ret )
         return ret;
diff --git a/xen/arch/x86/pci.c b/xen/arch/x86/pci.c
index a9decd4f33..d5886c59e6 100644
--- a/xen/arch/x86/pci.c
+++ b/xen/arch/x86/pci.c
@@ -74,7 +74,7 @@ int pci_conf_write_intercept(unsigned int seg, unsigned int bdf,
                              uint32_t *data)
 {
     struct pci_dev *pdev;
-    int rc = xsm_pci_config_permission(XSM_HOOK, current->domain, bdf,
+    int rc = xsm_pci_config_permission(current->domain, bdf,
                                        reg, reg + size - 1, 1);
 
     if ( rc < 0 )
diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c
index 23465bcd00..3f2a2035c5 100644
--- a/xen/arch/x86/physdev.c
+++ b/xen/arch/x86/physdev.c
@@ -110,7 +110,7 @@ int physdev_map_pirq(domid_t domid, int type, int *index, int *pirq_p,
     if ( d == NULL )
         return -ESRCH;
 
-    ret = xsm_map_domain_pirq(XSM_DM_PRIV, d);
+    ret = xsm_map_domain_pirq(d);
     if ( ret )
         goto free_domain;
 
@@ -148,7 +148,7 @@ int physdev_unmap_pirq(domid_t domid, int pirq)
         return -ESRCH;
 
     if ( domid != DOMID_SELF || !is_hvm_domain(d) || !has_pirq(d) )
-        ret = xsm_unmap_domain_pirq(XSM_DM_PRIV, d);
+        ret = xsm_unmap_domain_pirq(d);
     if ( ret )
         goto free_domain;
 
@@ -355,7 +355,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         ret = -EFAULT;
         if ( copy_from_guest(&apic, arg, 1) != 0 )
             break;
-        ret = xsm_apic(XSM_PRIV, currd, cmd);
+        ret = xsm_apic(currd, cmd);
         if ( ret )
             break;
         ret = ioapic_guest_read(apic.apic_physbase, apic.reg, &apic.value);
@@ -369,7 +369,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         ret = -EFAULT;
         if ( copy_from_guest(&apic, arg, 1) != 0 )
             break;
-        ret = xsm_apic(XSM_PRIV, currd, cmd);
+        ret = xsm_apic(currd, cmd);
         if ( ret )
             break;
         ret = ioapic_guest_write(apic.apic_physbase, apic.reg, apic.value);
@@ -385,7 +385,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 
         /* Use the APIC check since this dummy hypercall should still only
          * be called by the domain with access to program the ioapic */
-        ret = xsm_apic(XSM_PRIV, currd, cmd);
+        ret = xsm_apic(currd, cmd);
         if ( ret )
             break;
 
@@ -535,8 +535,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( copy_from_guest(&dev, arg, 1) )
             ret = -EFAULT;
         else
-            ret = xsm_resource_setup_pci(XSM_PRIV,
-                                         (dev.seg << 16) | (dev.bus << 8) |
+            ret = xsm_resource_setup_pci((dev.seg << 16) | (dev.bus << 8) |
                                          dev.devfn) ?:
                   pci_prepare_msix(dev.seg, dev.bus, dev.devfn,
                                    cmd != PHYSDEVOP_prepare_msix);
@@ -546,7 +545,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     case PHYSDEVOP_pci_mmcfg_reserved: {
         struct physdev_pci_mmcfg_reserved info;
 
-        ret = xsm_resource_setup_misc(XSM_PRIV);
+        ret = xsm_resource_setup_misc();
         if ( ret )
             break;
 
@@ -611,7 +610,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( setup_gsi.gsi < 0 || setup_gsi.gsi >= nr_irqs_gsi )
             break;
 
-        ret = xsm_resource_setup_gsi(XSM_PRIV, setup_gsi.gsi);
+        ret = xsm_resource_setup_gsi(setup_gsi.gsi);
         if ( ret )
             break;
 
diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c
index 284c2dfb9e..40d0f81572 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -221,7 +221,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
     if ( op->interface_version != XENPF_INTERFACE_VERSION )
         return -EACCES;
 
-    ret = xsm_platform_op(XSM_PRIV, op->cmd);
+    ret = xsm_platform_op(op->cmd);
     if ( ret )
         return ret;
 
@@ -639,7 +639,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
     {
         int cpu = op->u.cpu_ol.cpuid;
 
-        ret = xsm_resource_plug_core(XSM_HOOK);
+        ret = xsm_resource_plug_core();
         if ( ret )
             break;
 
@@ -665,7 +665,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
     {
         int cpu = op->u.cpu_ol.cpuid;
 
-        ret = xsm_resource_unplug_core(XSM_HOOK);
+        ret = xsm_resource_unplug_core();
         if ( ret )
             break;
 
@@ -694,7 +694,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
     break;
 
     case XENPF_cpu_hotadd:
-        ret = xsm_resource_plug_core(XSM_HOOK);
+        ret = xsm_resource_plug_core();
         if ( ret )
             break;
 
@@ -704,7 +704,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
     break;
 
     case XENPF_mem_hotadd:
-        ret = xsm_resource_plug_core(XSM_HOOK);
+        ret = xsm_resource_plug_core();
         if ( ret )
             break;
 
diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c
index 11467a1e3a..3a534a168c 100644
--- a/xen/arch/x86/pv/emul-priv-op.c
+++ b/xen/arch/x86/pv/emul-priv-op.c
@@ -252,7 +252,7 @@ static bool pci_cfg_ok(struct domain *currd, unsigned int start,
     }
 
     return !write ?
-           xsm_pci_config_permission(XSM_HOOK, currd, machine_bdf,
+           xsm_pci_config_permission(currd, machine_bdf,
                                      start, start + size - 1, 0) == 0 :
            pci_conf_write_intercept(0, machine_bdf, start, size, write) >= 0;
 }
diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c
index aff52a13f3..975672360b 100644
--- a/xen/arch/x86/sysctl.c
+++ b/xen/arch/x86/sysctl.c
@@ -190,8 +190,8 @@ long arch_do_sysctl(
         }
 
         if ( !ret )
-            ret = plug ? xsm_resource_plug_core(XSM_HOOK)
-                       : xsm_resource_unplug_core(XSM_HOOK);
+            ret = plug ? xsm_resource_plug_core()
+                       : xsm_resource_unplug_core();
 
         if ( !ret )
             ret = continue_hypercall_on_cpu(0, fn, hcpu);
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 6b71c6d6a9..392865f0f1 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -311,7 +311,7 @@ static int late_hwdom_init(struct domain *d)
     if ( d != hardware_domain || d->domain_id == 0 )
         return 0;
 
-    rv = xsm_init_hardware_domain(XSM_HOOK, d);
+    rv = xsm_init_hardware_domain(d);
     if ( rv )
         return rv;
 
@@ -649,7 +649,7 @@ struct domain *domain_create(domid_t domid,
         if ( !d->iomem_caps || !d->irq_caps )
             goto fail;
 
-        if ( (err = xsm_domain_create(XSM_HOOK, d, config->ssidref)) != 0 )
+        if ( (err = xsm_domain_create(d, config->ssidref)) != 0 )
             goto fail;
 
         d->controller_pause_count = 1;
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index ef202c2b8c..de258ab7f7 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -314,7 +314,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
             return -ESRCH;
     }
 
-    ret = xsm_domctl(XSM_OTHER, d, op->cmd);
+    ret = xsm_domctl(d, op->cmd);
     if ( ret )
         goto domctl_out_unlock_domonly;
 
@@ -553,7 +553,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
         if ( d == NULL )
             goto getdomaininfo_out;
 
-        ret = xsm_getdomaininfo(XSM_HOOK, d);
+        ret = xsm_getdomaininfo(d);
         if ( ret )
             goto getdomaininfo_out;
 
@@ -688,7 +688,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
             break;
         }
         irq = pirq_access_permitted(current->domain, pirq);
-        if ( !irq || xsm_irq_permission(XSM_HOOK, d, irq, allow) )
+        if ( !irq || xsm_irq_permission(d, irq, allow) )
             ret = -EPERM;
         else if ( allow )
             ret = irq_permit_access(d, irq);
@@ -709,7 +709,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
 
         if ( !iomem_access_permitted(current->domain,
                                      mfn, mfn + nr_mfns - 1) ||
-             xsm_iomem_permission(XSM_HOOK, d, mfn, mfn + nr_mfns - 1, allow) )
+             xsm_iomem_permission(d, mfn, mfn + nr_mfns - 1, allow) )
             ret = -EPERM;
         else if ( allow )
             ret = iomem_permit_access(d, mfn, mfn + nr_mfns - 1);
@@ -746,7 +746,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
              !iomem_access_permitted(d, mfn, mfn_end) )
             break;
 
-        ret = xsm_iomem_mapping(XSM_HOOK, d, mfn, mfn_end, add);
+        ret = xsm_iomem_mapping(d, mfn, mfn_end, add);
         if ( ret )
             break;
 
@@ -804,7 +804,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
 
         ret = -EOPNOTSUPP;
         if ( is_hvm_domain(e) )
-            ret = xsm_set_target(XSM_HOOK, d, e);
+            ret = xsm_set_target(d, e);
         if ( ret )
         {
             put_domain(e);
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index da88ad141a..288d8c36f2 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -301,7 +301,7 @@ static int evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc)
         ERROR_EXIT_DOM(port, d);
     chn = evtchn_from_port(d, port);
 
-    rc = xsm_evtchn_unbound(XSM_TARGET, d, chn, alloc->remote_dom);
+    rc = xsm_evtchn_unbound(d, chn, alloc->remote_dom);
     if ( rc )
         goto out;
 
@@ -376,7 +376,7 @@ static int evtchn_bind_interdomain(evtchn_bind_interdomain_t *bind)
          (rchn->u.unbound.remote_domid != ld->domain_id) )
         ERROR_EXIT_DOM(-EINVAL, rd);
 
-    rc = xsm_evtchn_interdomain(XSM_HOOK, ld, lchn, rd, rchn);
+    rc = xsm_evtchn_interdomain(ld, lchn, rd, rchn);
     if ( rc )
         goto out;
 
@@ -754,7 +754,7 @@ int evtchn_send(struct domain *ld, unsigned int lport)
         goto out;
     }
 
-    ret = xsm_evtchn_send(XSM_HOOK, ld, lchn);
+    ret = xsm_evtchn_send(ld, lchn);
     if ( ret )
         goto out;
 
@@ -979,7 +979,7 @@ int evtchn_status(evtchn_status_t *status)
         goto out;
     }
 
-    rc = xsm_evtchn_status(XSM_TARGET, d, chn);
+    rc = xsm_evtchn_status(d, chn);
     if ( rc )
         goto out;
 
@@ -1295,7 +1295,7 @@ long do_event_channel_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( d == NULL )
             return -ESRCH;
 
-        rc = xsm_evtchn_reset(XSM_TARGET, current->domain, d);
+        rc = xsm_evtchn_reset(current->domain, d);
         if ( !rc )
             rc = evtchn_reset(d, cmd == EVTCHNOP_reset_cont);
 
@@ -1356,7 +1356,7 @@ int alloc_unbound_xen_event_channel(
         goto out;
     chn = evtchn_from_port(ld, port);
 
-    rc = xsm_evtchn_unbound(XSM_TARGET, ld, chn, remote_domid);
+    rc = xsm_evtchn_unbound(ld, chn, remote_domid);
     if ( rc )
         goto out;
 
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index fab77ab9cc..087b214335 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -1051,7 +1051,7 @@ map_grant_ref(
         return;
     }
 
-    rc = xsm_grant_mapref(XSM_HOOK, ld, rd, op->flags);
+    rc = xsm_grant_mapref(ld, rd, op->flags);
     if ( rc )
     {
         rcu_unlock_domain(rd);
@@ -1391,7 +1391,7 @@ unmap_common(
         return;
     }
 
-    rc = xsm_grant_unmapref(XSM_HOOK, ld, rd);
+    rc = xsm_grant_unmapref(ld, rd);
     if ( rc )
     {
         rcu_unlock_domain(rd);
@@ -2009,7 +2009,7 @@ gnttab_setup_table(
         goto out;
     }
 
-    if ( xsm_grant_setup(XSM_TARGET, curr->domain, d) )
+    if ( xsm_grant_setup(curr->domain, d) )
     {
         op.status = GNTST_permission_denied;
         goto out;
@@ -2091,7 +2091,7 @@ gnttab_query_size(
         goto out;
     }
 
-    if ( xsm_grant_query_size(XSM_TARGET, current->domain, d) )
+    if ( xsm_grant_query_size(current->domain, d) )
     {
         op.status = GNTST_permission_denied;
         goto out;
@@ -2262,7 +2262,7 @@ gnttab_transfer(
             goto put_gfn_and_copyback;
         }
 
-        if ( xsm_grant_transfer(XSM_HOOK, d, e) )
+        if ( xsm_grant_transfer(d, e) )
         {
             gop.status = GNTST_permission_denied;
         unlock_and_copyback:
@@ -2800,7 +2800,7 @@ static int gnttab_copy_lock_domains(const struct gnttab_copy *op,
     if ( rc < 0 )
         goto error;
 
-    rc = xsm_grant_copy(XSM_HOOK, src->domain, dest->domain);
+    rc = xsm_grant_copy(src->domain, dest->domain);
     if ( rc < 0 )
     {
         rc = GNTST_permission_denied;
@@ -3219,7 +3219,7 @@ gnttab_get_status_frames(XEN_GUEST_HANDLE_PARAM(gnttab_get_status_frames_t) uop,
         op.status = GNTST_bad_domain;
         goto out1;
     }
-    rc = xsm_grant_setup(XSM_TARGET, current->domain, d);
+    rc = xsm_grant_setup(current->domain, d);
     if ( rc )
     {
         op.status = GNTST_permission_denied;
@@ -3283,7 +3283,7 @@ gnttab_get_version(XEN_GUEST_HANDLE_PARAM(gnttab_get_version_t) uop)
     if ( d == NULL )
         return -ESRCH;
 
-    rc = xsm_grant_query_size(XSM_TARGET, current->domain, d);
+    rc = xsm_grant_query_size(current->domain, d);
     if ( rc )
     {
         rcu_unlock_domain(d);
diff --git a/xen/common/hypfs.c b/xen/common/hypfs.c
index e71f7df479..052f3d472a 100644
--- a/xen/common/hypfs.c
+++ b/xen/common/hypfs.c
@@ -679,7 +679,7 @@ long do_hypfs_op(unsigned int cmd,
     struct hypfs_entry *entry;
     static char path[XEN_HYPFS_MAX_PATHLEN];
 
-    if ( xsm_hypfs_op(XSM_PRIV) )
+    if ( xsm_hypfs_op() )
         return -EPERM;
 
     if ( cmd == XEN_HYPFS_OP_get_version )
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index d77756a81e..89e01e908c 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -459,7 +459,7 @@ __initcall(param_init);
 
 DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 {
-    bool_t deny = !!xsm_xen_version(XSM_OTHER, cmd);
+    bool_t deny = !!xsm_xen_version(cmd);
 
     switch ( cmd )
     {
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index ebeee6405a..a0d2858cd8 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -1219,7 +1219,7 @@ static int do_kexec_op_internal(unsigned long op,
 {
     int ret = -EINVAL;
 
-    ret = xsm_kexec(XSM_PRIV);
+    ret = xsm_kexec();
     if ( ret )
         return ret;
 
diff --git a/xen/common/mem_access.c b/xen/common/mem_access.c
index 010e6f8dbf..2066510d3b 100644
--- a/xen/common/mem_access.c
+++ b/xen/common/mem_access.c
@@ -47,7 +47,7 @@ int mem_access_memop(unsigned long cmd,
     if ( !p2m_mem_access_sanity_check(d) )
         goto out;
 
-    rc = xsm_mem_access(XSM_DM_PRIV, d);
+    rc = xsm_mem_access(d);
     if ( rc )
         goto out;
 
diff --git a/xen/common/memory.c b/xen/common/memory.c
index 72a6b70cb5..d2621bbb47 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -609,7 +609,7 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
         goto fail_early;
     }
 
-    rc = xsm_memory_exchange(XSM_TARGET, d);
+    rc = xsm_memory_exchange(d);
     if ( rc )
     {
         rcu_unlock_domain(d);
@@ -1072,7 +1072,7 @@ static long xatp_permission_check(struct domain *d, unsigned int space)
          (!is_hardware_domain(d) || (d != current->domain)) )
         return -EACCES;
 
-    return xsm_add_to_physmap(XSM_TARGET, current->domain, d);
+    return xsm_add_to_physmap(current->domain, d);
 }
 
 unsigned int ioreq_server_max_frames(const struct domain *d)
@@ -1232,7 +1232,7 @@ static int acquire_resource(
     if ( rc )
         return rc;
 
-    rc = xsm_domain_resource_map(XSM_DM_PRIV, d);
+    rc = xsm_domain_resource_map(d);
     if ( rc )
         goto out;
 
@@ -1388,7 +1388,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
              && (reservation.mem_flags & XENMEMF_populate_on_demand) )
             args.memflags |= MEMF_populate_on_demand;
 
-        if ( xsm_memory_adjust_reservation(XSM_TARGET, curr_d, d) )
+        if ( xsm_memory_adjust_reservation(curr_d, d) )
         {
             rcu_unlock_domain(d);
             return start_extent;
@@ -1462,7 +1462,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( d == NULL )
             return -ESRCH;
 
-        rc = xsm_memory_stat_reservation(XSM_TARGET, curr_d, d);
+        rc = xsm_memory_stat_reservation(curr_d, d);
         if ( rc )
         {
             rcu_unlock_domain(d);
@@ -1584,7 +1584,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
             return -ESRCH;
 
         rc = paging_mode_translate(d)
-             ? xsm_remove_from_physmap(XSM_TARGET, curr_d, d)
+             ? xsm_remove_from_physmap(curr_d, d)
              : -EACCES;
         if ( rc )
         {
@@ -1631,7 +1631,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( d == NULL )
             return -EINVAL;
 
-        rc = xsm_claim_pages(XSM_PRIV, d);
+        rc = xsm_claim_pages(d);
 
         if ( !rc )
             rc = domain_set_outstanding_pages(d, reservation.nr_extents);
@@ -1662,7 +1662,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( (d = rcu_lock_domain_by_any_id(topology.domid)) == NULL )
             return -ESRCH;
 
-        rc = xsm_get_vnumainfo(XSM_TARGET, d);
+        rc = xsm_get_vnumainfo(d);
         if ( rc )
         {
             rcu_unlock_domain(d);
diff --git a/xen/common/monitor.c b/xen/common/monitor.c
index d5c9ff1cbf..ff17bad733 100644
--- a/xen/common/monitor.c
+++ b/xen/common/monitor.c
@@ -36,7 +36,7 @@ int monitor_domctl(struct domain *d, struct xen_domctl_monitor_op *mop)
     if ( unlikely(current->domain == d) ) /* no domain_pause() */
         return -EPERM;
 
-    rc = xsm_vm_event_control(XSM_PRIV, d, mop->op, mop->event);
+    rc = xsm_vm_event_control(d, mop->op, mop->event);
     if ( unlikely(rc) )
         return rc;
 
diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c
index 6d34764d38..e5c154fe9d 100644
--- a/xen/common/sched/core.c
+++ b/xen/common/sched/core.c
@@ -1944,7 +1944,7 @@ ret_t do_sched_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
         if ( d == NULL )
             break;
 
-        ret = xsm_schedop_shutdown(XSM_DM_PRIV, current->domain, d);
+        ret = xsm_schedop_shutdown(current->domain, d);
         if ( likely(!ret) )
             domain_shutdown(d, sched_remote_shutdown.reason);
 
@@ -2046,7 +2046,7 @@ long sched_adjust(struct domain *d, struct xen_domctl_scheduler_op *op)
 {
     long ret;
 
-    ret = xsm_domctl_scheduler_op(XSM_HOOK, d, op->cmd);
+    ret = xsm_domctl_scheduler_op(d, op->cmd);
     if ( ret )
         return ret;
 
@@ -2081,7 +2081,7 @@ long sched_adjust_global(struct xen_sysctl_scheduler_op *op)
     struct cpupool *pool;
     int rc;
 
-    rc = xsm_sysctl_scheduler_op(XSM_HOOK, op->cmd);
+    rc = xsm_sysctl_scheduler_op(op->cmd);
     if ( rc )
         return rc;
 
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index 3558641cd9..4e25c0e499 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -41,7 +41,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
     if ( op->interface_version != XEN_SYSCTL_INTERFACE_VERSION )
         return -EACCES;
 
-    ret = xsm_sysctl(XSM_PRIV, op->cmd);
+    ret = xsm_sysctl(op->cmd);
     if ( ret )
         return ret;
 
@@ -58,7 +58,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
     switch ( op->cmd )
     {
     case XEN_SYSCTL_readconsole:
-        ret = xsm_readconsole(XSM_HOOK, op->u.readconsole.clear);
+        ret = xsm_readconsole(op->u.readconsole.clear);
         if ( ret )
             break;
 
@@ -88,7 +88,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
             if ( num_domains == op->u.getdomaininfolist.max_domains )
                 break;
 
-            ret = xsm_getdomaininfo(XSM_HOOK, d);
+            ret = xsm_getdomaininfo(d);
             if ( ret )
                 continue;
 
@@ -191,7 +191,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
         if ( op->u.page_offline.end < op->u.page_offline.start )
             break;
 
-        ret = xsm_page_offline(XSM_HOOK, op->u.page_offline.cmd);
+        ret = xsm_page_offline(op->u.page_offline.cmd);
         if ( ret )
             break;
 
diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c
index 70ab3ba406..307f99fcf0 100644
--- a/xen/common/vm_event.c
+++ b/xen/common/vm_event.c
@@ -584,7 +584,7 @@ int vm_event_domctl(struct domain *d, struct xen_domctl_vm_event_op *vec)
         return 0;
     }
 
-    rc = xsm_vm_event_control(XSM_PRIV, d, vec->mode, vec->op);
+    rc = xsm_vm_event_control(d, vec->mode, vec->op);
     if ( rc )
         return rc;
 
diff --git a/xen/common/xenoprof.c b/xen/common/xenoprof.c
index 1926a92fe4..76d8b1f807 100644
--- a/xen/common/xenoprof.c
+++ b/xen/common/xenoprof.c
@@ -737,7 +737,7 @@ ret_t do_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
         return -EPERM;
     }
 
-    ret = xsm_profile(XSM_HOOK, current->domain, op);
+    ret = xsm_profile(current->domain, op);
     if ( ret )
         return ret;
 
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 7d0a603d03..b5d62ea4ee 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -681,7 +681,7 @@ long do_console_io(unsigned int cmd, unsigned int count,
     long rc;
     unsigned int idx, len;
 
-    rc = xsm_console_io(XSM_OTHER, current->domain, cmd);
+    rc = xsm_console_io(current->domain, cmd);
     if ( rc )
         return rc;
 
diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
index 999b831d90..67b03fd2a9 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -230,7 +230,7 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct domain *d,
         if ( ret )
             break;
 
-        ret = xsm_assign_dtdevice(XSM_HOOK, d, dt_node_full_name(dev));
+        ret = xsm_assign_dtdevice(d, dt_node_full_name(dev));
         if ( ret )
             break;
 
@@ -284,7 +284,7 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct domain *d,
         if ( ret )
             break;
 
-        ret = xsm_deassign_dtdevice(XSM_HOOK, d, dt_node_full_name(dev));
+        ret = xsm_deassign_dtdevice(d, dt_node_full_name(dev));
 
         if ( d == dom_io )
             return -EINVAL;
diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c
index 199ce08612..1363ef8121 100644
--- a/xen/drivers/passthrough/pci.c
+++ b/xen/drivers/passthrough/pci.c
@@ -704,7 +704,7 @@ int pci_add_device(u16 seg, u8 bus, u8 devfn,
     else
         pdev_type = "device";
 
-    ret = xsm_resource_plug_pci(XSM_PRIV, (seg << 16) | (bus << 8) | devfn);
+    ret = xsm_resource_plug_pci((seg << 16) | (bus << 8) | devfn);
     if ( ret )
         return ret;
 
@@ -814,7 +814,7 @@ int pci_remove_device(u16 seg, u8 bus, u8 devfn)
     struct pci_dev *pdev;
     int ret;
 
-    ret = xsm_resource_unplug_pci(XSM_PRIV, (seg << 16) | (bus << 8) | devfn);
+    ret = xsm_resource_unplug_pci((seg << 16) | (bus << 8) | devfn);
     if ( ret )
         return ret;
 
@@ -1477,7 +1477,7 @@ static int iommu_get_device_group(
              ((pdev->bus == bus) && (pdev->devfn == devfn)) )
             continue;
 
-        if ( xsm_get_device_group(XSM_HOOK, (seg << 16) | (pdev->bus << 8) | pdev->devfn) )
+        if ( xsm_get_device_group((seg << 16) | (pdev->bus << 8) | pdev->devfn) )
             continue;
 
         sdev_id = ops->get_device_group_id(seg, pdev->bus, pdev->devfn);
@@ -1545,7 +1545,7 @@ int iommu_do_pci_domctl(
         u32 max_sdevs;
         XEN_GUEST_HANDLE_64(uint32) sdevs;
 
-        ret = xsm_get_device_group(XSM_HOOK, domctl->u.get_device_group.machine_sbdf);
+        ret = xsm_get_device_group(domctl->u.get_device_group.machine_sbdf);
         if ( ret )
             break;
 
@@ -1596,7 +1596,7 @@ int iommu_do_pci_domctl(
 
         machine_sbdf = domctl->u.assign_device.u.pci.machine_sbdf;
 
-        ret = xsm_assign_device(XSM_HOOK, d, machine_sbdf);
+        ret = xsm_assign_device(d, machine_sbdf);
         if ( ret )
             break;
 
@@ -1641,7 +1641,7 @@ int iommu_do_pci_domctl(
 
         machine_sbdf = domctl->u.assign_device.u.pci.machine_sbdf;
 
-        ret = xsm_deassign_device(XSM_HOOK, d, machine_sbdf);
+        ret = xsm_deassign_device(d, machine_sbdf);
         if ( ret )
             break;
 
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index 170eae9b25..bab10be7a2 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -30,53 +30,53 @@ static inline void xsm_security_domaininfo (struct domain *d,
     alternative_vcall(xsm_ops.security_domaininfo, d, info);
 }
 
-static inline int xsm_domain_create (xsm_default_t def, struct domain *d, u32 ssidref)
+static inline int xsm_domain_create (struct domain *d, u32 ssidref)
 {
     return alternative_call(xsm_ops.domain_create, d, ssidref);
 }
 
-static inline int xsm_getdomaininfo (xsm_default_t def, struct domain *d)
+static inline int xsm_getdomaininfo (struct domain *d)
 {
     return alternative_call(xsm_ops.getdomaininfo, d);
 }
 
-static inline int xsm_domctl_scheduler_op (xsm_default_t def, struct domain *d, int cmd)
+static inline int xsm_domctl_scheduler_op (struct domain *d, int cmd)
 {
     return alternative_call(xsm_ops.domctl_scheduler_op, d, cmd);
 }
 
-static inline int xsm_sysctl_scheduler_op (xsm_default_t def, int cmd)
+static inline int xsm_sysctl_scheduler_op (int cmd)
 {
     return alternative_call(xsm_ops.sysctl_scheduler_op, cmd);
 }
 
-static inline int xsm_set_target (xsm_default_t def, struct domain *d, struct domain *e)
+static inline int xsm_set_target (struct domain *d, struct domain *e)
 {
     return alternative_call(xsm_ops.set_target, d, e);
 }
 
-static inline int xsm_domctl (xsm_default_t def, struct domain *d, int cmd)
+static inline int xsm_domctl (struct domain *d, int cmd)
 {
     return alternative_call(xsm_ops.domctl, d, cmd);
 }
 
-static inline int xsm_sysctl (xsm_default_t def, int cmd)
+static inline int xsm_sysctl (int cmd)
 {
     return alternative_call(xsm_ops.sysctl, cmd);
 }
 
-static inline int xsm_readconsole (xsm_default_t def, uint32_t clear)
+static inline int xsm_readconsole (uint32_t clear)
 {
     return alternative_call(xsm_ops.readconsole, clear);
 }
 
-static inline int xsm_evtchn_unbound (xsm_default_t def, struct domain *d1, struct evtchn *chn,
+static inline int xsm_evtchn_unbound (struct domain *d1, struct evtchn *chn,
                                                                     domid_t id2)
 {
     return alternative_call(xsm_ops.evtchn_unbound, d1, chn, id2);
 }
 
-static inline int xsm_evtchn_interdomain (xsm_default_t def, struct domain *d1,
+static inline int xsm_evtchn_interdomain (struct domain *d1,
                 struct evtchn *chan1, struct domain *d2, struct evtchn *chan2)
 {
     return alternative_call(xsm_ops.evtchn_interdomain, d1, chan1, d2, chan2);
@@ -87,48 +87,48 @@ static inline void xsm_evtchn_close_post (struct evtchn *chn)
     alternative_vcall(xsm_ops.evtchn_close_post, chn);
 }
 
-static inline int xsm_evtchn_send (xsm_default_t def, struct domain *d, struct evtchn *chn)
+static inline int xsm_evtchn_send (struct domain *d, struct evtchn *chn)
 {
     return alternative_call(xsm_ops.evtchn_send, d, chn);
 }
 
-static inline int xsm_evtchn_status (xsm_default_t def, struct domain *d, struct evtchn *chn)
+static inline int xsm_evtchn_status (struct domain *d, struct evtchn *chn)
 {
     return alternative_call(xsm_ops.evtchn_status, d, chn);
 }
 
-static inline int xsm_evtchn_reset (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_evtchn_reset (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.evtchn_reset, d1, d2);
 }
 
-static inline int xsm_grant_mapref (xsm_default_t def, struct domain *d1, struct domain *d2,
+static inline int xsm_grant_mapref (struct domain *d1, struct domain *d2,
                                                                 uint32_t flags)
 {
     return alternative_call(xsm_ops.grant_mapref, d1, d2, flags);
 }
 
-static inline int xsm_grant_unmapref (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_grant_unmapref (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.grant_unmapref, d1, d2);
 }
 
-static inline int xsm_grant_setup (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_grant_setup (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.grant_setup, d1, d2);
 }
 
-static inline int xsm_grant_transfer (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_grant_transfer (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.grant_transfer, d1, d2);
 }
 
-static inline int xsm_grant_copy (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_grant_copy (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.grant_copy, d1, d2);
 }
 
-static inline int xsm_grant_query_size (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_grant_query_size (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.grant_query_size, d1, d2);
 }
@@ -160,80 +160,80 @@ static inline char *xsm_show_security_evtchn (struct domain *d, const struct evt
     return alternative_call(xsm_ops.show_security_evtchn, d, chn);
 }
 
-static inline int xsm_init_hardware_domain (xsm_default_t def, struct domain *d)
+static inline int xsm_init_hardware_domain (struct domain *d)
 {
     return alternative_call(xsm_ops.init_hardware_domain, d);
 }
 
-static inline int xsm_get_pod_target (xsm_default_t def, struct domain *d)
+static inline int xsm_get_pod_target (struct domain *d)
 {
     return alternative_call(xsm_ops.get_pod_target, d);
 }
 
-static inline int xsm_set_pod_target (xsm_default_t def, struct domain *d)
+static inline int xsm_set_pod_target (struct domain *d)
 {
     return alternative_call(xsm_ops.set_pod_target, d);
 }
 
-static inline int xsm_memory_exchange (xsm_default_t def, struct domain *d)
+static inline int xsm_memory_exchange (struct domain *d)
 {
     return alternative_call(xsm_ops.memory_exchange, d);
 }
 
-static inline int xsm_memory_adjust_reservation (xsm_default_t def, struct domain *d1, struct
+static inline int xsm_memory_adjust_reservation (struct domain *d1, struct
                                                                     domain *d2)
 {
     return alternative_call(xsm_ops.memory_adjust_reservation, d1, d2);
 }
 
-static inline int xsm_memory_stat_reservation (xsm_default_t def, struct domain *d1,
+static inline int xsm_memory_stat_reservation (struct domain *d1,
                                                             struct domain *d2)
 {
     return alternative_call(xsm_ops.memory_stat_reservation, d1, d2);
 }
 
-static inline int xsm_memory_pin_page(xsm_default_t def, struct domain *d1, struct domain *d2,
+static inline int xsm_memory_pin_page(struct domain *d1, struct domain *d2,
                                       struct page_info *page)
 {
     return alternative_call(xsm_ops.memory_pin_page, d1, d2, page);
 }
 
-static inline int xsm_add_to_physmap(xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_add_to_physmap(struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.add_to_physmap, d1, d2);
 }
 
-static inline int xsm_remove_from_physmap(xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_remove_from_physmap(struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.remove_from_physmap, d1, d2);
 }
 
-static inline int xsm_map_gmfn_foreign (xsm_default_t def, struct domain *d, struct domain *t)
+static inline int xsm_map_gmfn_foreign (struct domain *d, struct domain *t)
 {
     return alternative_call(xsm_ops.map_gmfn_foreign, d, t);
 }
 
-static inline int xsm_claim_pages(xsm_default_t def, struct domain *d)
+static inline int xsm_claim_pages(struct domain *d)
 {
     return alternative_call(xsm_ops.claim_pages, d);
 }
 
-static inline int xsm_console_io (xsm_default_t def, struct domain *d, int cmd)
+static inline int xsm_console_io (struct domain *d, int cmd)
 {
     return alternative_call(xsm_ops.console_io, d, cmd);
 }
 
-static inline int xsm_profile (xsm_default_t def, struct domain *d, int op)
+static inline int xsm_profile (struct domain *d, int op)
 {
     return alternative_call(xsm_ops.profile, d, op);
 }
 
-static inline int xsm_kexec (xsm_default_t def)
+static inline int xsm_kexec (void)
 {
     return alternative_call(xsm_ops.kexec);
 }
 
-static inline int xsm_schedop_shutdown (xsm_default_t def, struct domain *d1, struct domain *d2)
+static inline int xsm_schedop_shutdown (struct domain *d1, struct domain *d2)
 {
     return alternative_call(xsm_ops.schedop_shutdown, d1, d2);
 }
@@ -243,131 +243,129 @@ static inline char *xsm_show_irq_sid (int irq)
     return alternative_call(xsm_ops.show_irq_sid, irq);
 }
 
-static inline int xsm_map_domain_pirq (xsm_default_t def, struct domain *d)
+static inline int xsm_map_domain_pirq (struct domain *d)
 {
     return alternative_call(xsm_ops.map_domain_pirq, d);
 }
 
-static inline int xsm_map_domain_irq (xsm_default_t def, struct domain *d, int irq, void *data)
+static inline int xsm_map_domain_irq (struct domain *d, int irq, void *data)
 {
     return alternative_call(xsm_ops.map_domain_irq, d, irq, data);
 }
 
-static inline int xsm_unmap_domain_pirq (xsm_default_t def, struct domain *d)
+static inline int xsm_unmap_domain_pirq (struct domain *d)
 {
     return alternative_call(xsm_ops.unmap_domain_pirq, d);
 }
 
-static inline int xsm_unmap_domain_irq (xsm_default_t def, struct domain *d, int irq, void *data)
+static inline int xsm_unmap_domain_irq (struct domain *d, int irq, void *data)
 {
     return alternative_call(xsm_ops.unmap_domain_irq, d, irq, data);
 }
 
-static inline int xsm_bind_pt_irq(xsm_default_t def, struct domain *d,
+static inline int xsm_bind_pt_irq(struct domain *d,
                                   struct xen_domctl_bind_pt_irq *bind)
 {
     return alternative_call(xsm_ops.bind_pt_irq, d, bind);
 }
 
-static inline int xsm_unbind_pt_irq(xsm_default_t def, struct domain *d,
+static inline int xsm_unbind_pt_irq(struct domain *d,
                                     struct xen_domctl_bind_pt_irq *bind)
 {
     return alternative_call(xsm_ops.unbind_pt_irq, d, bind);
 }
 
-static inline int xsm_irq_permission (xsm_default_t def, struct domain *d, int pirq, uint8_t allow)
+static inline int xsm_irq_permission (struct domain *d, int pirq, uint8_t allow)
 {
     return alternative_call(xsm_ops.irq_permission, d, pirq, allow);
 }
 
-static inline int xsm_iomem_permission (xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
+static inline int xsm_iomem_permission (struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
     return alternative_call(xsm_ops.iomem_permission, d, s, e, allow);
 }
 
-static inline int xsm_iomem_mapping (xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
+static inline int xsm_iomem_mapping (struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
 {
     return alternative_call(xsm_ops.iomem_mapping, d, s, e, allow);
 }
 
-static inline int xsm_pci_config_permission (xsm_default_t def, struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access)
+static inline int xsm_pci_config_permission (struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access)
 {
     return alternative_call(xsm_ops.pci_config_permission, d, machine_bdf, start, end, access);
 }
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
-static inline int xsm_get_device_group(xsm_default_t def, uint32_t machine_bdf)
+static inline int xsm_get_device_group(uint32_t machine_bdf)
 {
     return alternative_call(xsm_ops.get_device_group, machine_bdf);
 }
 
-static inline int xsm_assign_device(xsm_default_t def, struct domain *d, uint32_t machine_bdf)
+static inline int xsm_assign_device(struct domain *d, uint32_t machine_bdf)
 {
     return alternative_call(xsm_ops.assign_device, d, machine_bdf);
 }
 
-static inline int xsm_deassign_device(xsm_default_t def, struct domain *d, uint32_t machine_bdf)
+static inline int xsm_deassign_device(struct domain *d, uint32_t machine_bdf)
 {
     return alternative_call(xsm_ops.deassign_device, d, machine_bdf);
 }
 #endif /* HAS_PASSTHROUGH && HAS_PCI) */
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_DEVICE_TREE)
-static inline int xsm_assign_dtdevice(xsm_default_t def, struct domain *d,
-                                      const char *dtpath)
+static inline int xsm_assign_dtdevice(struct domain *d, const char *dtpath)
 {
     return alternative_call(xsm_ops.assign_dtdevice, d, dtpath);
 }
 
-static inline int xsm_deassign_dtdevice(xsm_default_t def, struct domain *d,
-                                        const char *dtpath)
+static inline int xsm_deassign_dtdevice(struct domain *d, const char *dtpath)
 {
     return alternative_call(xsm_ops.deassign_dtdevice, d, dtpath);
 }
 
 #endif /* HAS_PASSTHROUGH && HAS_DEVICE_TREE */
 
-static inline int xsm_resource_plug_pci (xsm_default_t def, uint32_t machine_bdf)
+static inline int xsm_resource_plug_pci (uint32_t machine_bdf)
 {
     return alternative_call(xsm_ops.resource_plug_pci, machine_bdf);
 }
 
-static inline int xsm_resource_unplug_pci (xsm_default_t def, uint32_t machine_bdf)
+static inline int xsm_resource_unplug_pci (uint32_t machine_bdf)
 {
     return alternative_call(xsm_ops.resource_unplug_pci, machine_bdf);
 }
 
-static inline int xsm_resource_plug_core (xsm_default_t def)
+static inline int xsm_resource_plug_core (void)
 {
     return alternative_call(xsm_ops.resource_plug_core);
 }
 
-static inline int xsm_resource_unplug_core (xsm_default_t def)
+static inline int xsm_resource_unplug_core (void)
 {
     return alternative_call(xsm_ops.resource_unplug_core);
 }
 
-static inline int xsm_resource_setup_pci (xsm_default_t def, uint32_t machine_bdf)
+static inline int xsm_resource_setup_pci (uint32_t machine_bdf)
 {
     return alternative_call(xsm_ops.resource_setup_pci, machine_bdf);
 }
 
-static inline int xsm_resource_setup_gsi (xsm_default_t def, int gsi)
+static inline int xsm_resource_setup_gsi (int gsi)
 {
     return alternative_call(xsm_ops.resource_setup_gsi, gsi);
 }
 
-static inline int xsm_resource_setup_misc (xsm_default_t def)
+static inline int xsm_resource_setup_misc (void)
 {
     return alternative_call(xsm_ops.resource_setup_misc);
 }
 
-static inline int xsm_page_offline(xsm_default_t def, uint32_t cmd)
+static inline int xsm_page_offline(uint32_t cmd)
 {
     return alternative_call(xsm_ops.page_offline, cmd);
 }
 
-static inline int xsm_hypfs_op(xsm_default_t def)
+static inline int xsm_hypfs_op(void)
 {
     return alternative_call(xsm_ops.hypfs_op);
 }
@@ -384,148 +382,148 @@ static inline int xsm_do_compat_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 }
 #endif
 
-static inline int xsm_hvm_param (xsm_default_t def, struct domain *d, unsigned long op)
+static inline int xsm_hvm_param (struct domain *d, unsigned long op)
 {
     return alternative_call(xsm_ops.hvm_param, d, op);
 }
 
-static inline int xsm_hvm_control(xsm_default_t def, struct domain *d, unsigned long op)
+static inline int xsm_hvm_control(struct domain *d, unsigned long op)
 {
     return alternative_call(xsm_ops.hvm_control, d, op);
 }
 
-static inline int xsm_hvm_param_altp2mhvm (xsm_default_t def, struct domain *d)
+static inline int xsm_hvm_param_altp2mhvm (struct domain *d)
 {
     return alternative_call(xsm_ops.hvm_param_altp2mhvm, d);
 }
 
-static inline int xsm_hvm_altp2mhvm_op (xsm_default_t def, struct domain *d, uint64_t mode, uint32_t op)
+static inline int xsm_hvm_altp2mhvm_op (struct domain *d, uint64_t mode, uint32_t op)
 {
     return alternative_call(xsm_ops.hvm_altp2mhvm_op, d, mode, op);
 }
 
-static inline int xsm_get_vnumainfo (xsm_default_t def, struct domain *d)
+static inline int xsm_get_vnumainfo (struct domain *d)
 {
     return alternative_call(xsm_ops.get_vnumainfo, d);
 }
 
-static inline int xsm_vm_event_control (xsm_default_t def, struct domain *d, int mode, int op)
+static inline int xsm_vm_event_control (struct domain *d, int mode, int op)
 {
     return alternative_call(xsm_ops.vm_event_control, d, mode, op);
 }
 
 #ifdef CONFIG_MEM_ACCESS
-static inline int xsm_mem_access (xsm_default_t def, struct domain *d)
+static inline int xsm_mem_access (struct domain *d)
 {
     return alternative_call(xsm_ops.mem_access, d);
 }
 #endif
 
 #ifdef CONFIG_MEM_PAGING
-static inline int xsm_mem_paging (xsm_default_t def, struct domain *d)
+static inline int xsm_mem_paging (struct domain *d)
 {
     return alternative_call(xsm_ops.mem_paging, d);
 }
 #endif
 
 #ifdef CONFIG_MEM_SHARING
-static inline int xsm_mem_sharing (xsm_default_t def, struct domain *d)
+static inline int xsm_mem_sharing (struct domain *d)
 {
     return alternative_call(xsm_ops.mem_sharing, d);
 }
 #endif
 
-static inline int xsm_platform_op (xsm_default_t def, uint32_t op)
+static inline int xsm_platform_op (uint32_t op)
 {
     return alternative_call(xsm_ops.platform_op, op);
 }
 
 #ifdef CONFIG_X86
-static inline int xsm_do_mca(xsm_default_t def)
+static inline int xsm_do_mca(void)
 {
     return alternative_call(xsm_ops.do_mca);
 }
 
-static inline int xsm_shadow_control (xsm_default_t def, struct domain *d, uint32_t op)
+static inline int xsm_shadow_control (struct domain *d, uint32_t op)
 {
     return alternative_call(xsm_ops.shadow_control, d, op);
 }
 
-static inline int xsm_mem_sharing_op (xsm_default_t def, struct domain *d, struct domain *cd, int op)
+static inline int xsm_mem_sharing_op (struct domain *d, struct domain *cd, int op)
 {
     return alternative_call(xsm_ops.mem_sharing_op, d, cd, op);
 }
 
-static inline int xsm_apic (xsm_default_t def, struct domain *d, int cmd)
+static inline int xsm_apic (struct domain *d, int cmd)
 {
     return alternative_call(xsm_ops.apic, d, cmd);
 }
 
-static inline int xsm_memtype (xsm_default_t def, uint32_t access)
+static inline int xsm_memtype (uint32_t access)
 {
     return alternative_call(xsm_ops.memtype, access);
 }
 
-static inline int xsm_machine_memory_map(xsm_default_t def)
+static inline int xsm_machine_memory_map(void)
 {
     return alternative_call(xsm_ops.machine_memory_map);
 }
 
-static inline int xsm_domain_memory_map(xsm_default_t def, struct domain *d)
+static inline int xsm_domain_memory_map(struct domain *d)
 {
     return alternative_call(xsm_ops.domain_memory_map, d);
 }
 
-static inline int xsm_mmu_update (xsm_default_t def, struct domain *d, struct domain *t,
+static inline int xsm_mmu_update (struct domain *d, struct domain *t,
                                   struct domain *f, uint32_t flags)
 {
     return alternative_call(xsm_ops.mmu_update, d, t, f, flags);
 }
 
-static inline int xsm_mmuext_op (xsm_default_t def, struct domain *d, struct domain *f)
+static inline int xsm_mmuext_op (struct domain *d, struct domain *f)
 {
     return alternative_call(xsm_ops.mmuext_op, d, f);
 }
 
-static inline int xsm_update_va_mapping(xsm_default_t def, struct domain *d, struct domain *f,
+static inline int xsm_update_va_mapping(struct domain *d, struct domain *f,
                                                             l1_pgentry_t pte)
 {
     return xsm_ops.update_va_mapping(d, f, pte);
 }
 
-static inline int xsm_priv_mapping(xsm_default_t def, struct domain *d, struct domain *t)
+static inline int xsm_priv_mapping(struct domain *d, struct domain *t)
 {
     return alternative_call(xsm_ops.priv_mapping, d, t);
 }
 
-static inline int xsm_ioport_permission (xsm_default_t def, struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
+static inline int xsm_ioport_permission (struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
     return alternative_call(xsm_ops.ioport_permission, d, s, e, allow);
 }
 
-static inline int xsm_ioport_mapping (xsm_default_t def, struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
+static inline int xsm_ioport_mapping (struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
 {
     return alternative_call(xsm_ops.ioport_mapping, d, s, e, allow);
 }
 
-static inline int xsm_pmu_op (xsm_default_t def, struct domain *d, unsigned int op)
+static inline int xsm_pmu_op (struct domain *d, unsigned int op)
 {
     return alternative_call(xsm_ops.pmu_op, d, op);
 }
 
 #endif /* CONFIG_X86 */
 
-static inline int xsm_dm_op(xsm_default_t def, struct domain *d)
+static inline int xsm_dm_op(struct domain *d)
 {
     return alternative_call(xsm_ops.dm_op, d);
 }
 
-static inline int xsm_xen_version (xsm_default_t def, uint32_t op)
+static inline int xsm_xen_version (uint32_t op)
 {
     return alternative_call(xsm_ops.xen_version, op);
 }
 
-static inline int xsm_domain_resource_map(xsm_default_t def, struct domain *d)
+static inline int xsm_domain_resource_map(struct domain *d)
 {
     return alternative_call(xsm_ops.domain_resource_map, d);
 }
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:30:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:30:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154812.285956 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Zt-0005Uz-W6; Mon, 12 Jul 2021 20:30:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154812.285956; Mon, 12 Jul 2021 20:30:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32Zt-0005Uo-So; Mon, 12 Jul 2021 20:30:57 +0000
Received: by outflank-mailman (input) for mailman id 154812;
 Mon, 12 Jul 2021 20:30:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32Zt-0005Ue-Hy
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:30:57 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0e9cbae2-e350-11eb-8707-12813bfff9fa;
 Mon, 12 Jul 2021 20:30:55 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121635730192.9107776027231;
 Mon, 12 Jul 2021 13:27:15 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e9cbae2-e350-11eb-8707-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121638; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=YrYVzIKMcTMGlbgqJB+S9HNtfVtX4ekH5BqpjjFSEN6xVIcA/GT/m+HaQPKXGbSAAFc2G3UdddmJLm+pE1Oh0iejlyeqln8cOcOV4S8DM7ZOTdEEXuCQec35byTqvLya0zDs2xxqd4hrda2DKgDqzrX1bci81t+Qxa4V69iDlyY=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121638; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=kh0KMg27tKSsDe22tQu9Z3PZUDHTMTDEO+ctwo3vIpI=; 
	b=UgdMcdkezq33hhMsXjiiPyJ4fUTg3Yi4txRK+8Ox6cvLuhsWBV8ramAlQa8BVjt6WRX6AlC9mP+7v7njxqJR5Ozv+qPoIaNQshN15j/BAn/jGV5doGqwcOM6SQtBHGmVbE9b3a4O6jr/HGl5B26DKwXgjKnWDIHhwQhWCe+eXxI=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121638;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=kh0KMg27tKSsDe22tQu9Z3PZUDHTMTDEO+ctwo3vIpI=;
	b=FmHXmhgqmTa9DXPsIKDmVAWB34r97SN4kLMvEhKkKEj4lPDUY+toUL3yTpKs1zJr
	n2ob+Hh8QJ1/iJF1oQ7e89rHobmPZbZuVjLlDm7HX7YPKEeNRtikx/49bNHWVDSos5m
	BjKUDnRHA/KZapIDhQm6CW6g9nRqvcWNaOPs0pdY=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 09/10] xsm: expand the function related macros in dummy.h
Date: Mon, 12 Jul 2021 16:32:32 -0400
Message-Id: <20210712203233.20289-10-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

With the elimination of switching how dummy.h gets included, the function
declaration macros are no longer necessary. This commit expands them out to the
only value for which they will ever be set. This results in function
declaration lengths changing and since some definitions did not even follow the
80 column wrapping style, all function definitions were aligned with the
predominate style found in core hypervisor code.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/xsm/dummy.h | 275 +++++++++++++++++++++++++++---------------------
 1 file changed, 153 insertions(+), 122 deletions(-)

diff --git a/xen/xsm/dummy.h b/xen/xsm/dummy.h
index a3e698c3b5..1cb26e4146 100644
--- a/xen/xsm/dummy.h
+++ b/xen/xsm/dummy.h
@@ -9,7 +9,7 @@
  *
  *
  *  Each XSM hook implementing an access check should have its first parameter
- *  preceded by XSM_DEFAULT_ARG (or use XSM_DEFAULT_VOID if it has no
+ *  preceded by (or use XSM_DEFAULT_VOID if it has no
  *  arguments). The first non-declaration statement shold be XSM_ASSERT_ACTION
  *  with the expected type of the hook, which will either define or check the
  *  value of action.
@@ -47,14 +47,11 @@ void __xsm_action_mismatch_detected(void);
  * xsm_default_t argument available, so the value from the assertion is used to
  * initialize the variable.
  */
-#define XSM_INLINE __maybe_unused
-
-#define XSM_DEFAULT_ARG /* */
-#define XSM_DEFAULT_VOID void
 #define XSM_ASSERT_ACTION(def) xsm_default_t action = def; (void)action
 
-static always_inline int xsm_default_action(
-    xsm_default_t action, struct domain *src, struct domain *target)
+static always_inline int xsm_default_action(xsm_default_t action,
+                                            struct domain *src,
+                                            struct domain *target)
 {
     switch ( action ) {
     case XSM_HOOK:
@@ -82,43 +79,43 @@ static always_inline int xsm_default_action(
     }
 }
 
-static XSM_INLINE void dummy_security_domaininfo(struct domain *d,
+static inline void dummy_security_domaininfo(struct domain *d,
                                     struct xen_domctl_getdomaininfo *info)
 {
     return;
 }
 
-static XSM_INLINE int dummy_domain_create(XSM_DEFAULT_ARG struct domain *d, u32 ssidref)
+static inline int dummy_domain_create(struct domain *d, u32 ssidref)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_getdomaininfo(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_getdomaininfo(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_domctl_scheduler_op(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static inline int dummy_domctl_scheduler_op(struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_sysctl_scheduler_op(XSM_DEFAULT_ARG int cmd)
+static inline int dummy_sysctl_scheduler_op(int cmd)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_set_target(XSM_DEFAULT_ARG struct domain *d, struct domain *e)
+static inline int dummy_set_target(struct domain *d, struct domain *e)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_domctl(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static inline int dummy_domctl(struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( cmd )
@@ -135,85 +132,91 @@ static XSM_INLINE int dummy_domctl(XSM_DEFAULT_ARG struct domain *d, int cmd)
     }
 }
 
-static XSM_INLINE int dummy_sysctl(XSM_DEFAULT_ARG int cmd)
+static inline int dummy_sysctl(int cmd)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_readconsole(XSM_DEFAULT_ARG uint32_t clear)
+static inline int dummy_readconsole(uint32_t clear)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_alloc_security_domain(struct domain *d)
+static inline int dummy_alloc_security_domain(struct domain *d)
 {
     return 0;
 }
 
-static XSM_INLINE void dummy_free_security_domain(struct domain *d)
+static inline void dummy_free_security_domain(struct domain *d)
 {
     return;
 }
 
-static XSM_INLINE int dummy_grant_mapref(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2,
-                                                                uint32_t flags)
+static inline int dummy_grant_mapref(struct domain *d1,
+                                             struct domain *d2,
+                                             uint32_t flags)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_grant_unmapref(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_grant_unmapref(struct domain *d1,
+                                               struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_grant_setup(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_grant_setup(struct domain *d1,
+                                            struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_grant_transfer(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_grant_transfer(struct domain *d1,
+                                               struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_grant_copy(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_grant_copy(struct domain *d1, struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_grant_query_size(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_grant_query_size(struct domain *d1,
+                                                 struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_memory_exchange(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_memory_exchange(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_memory_adjust_reservation(XSM_DEFAULT_ARG struct domain *d1,
-                                                            struct domain *d2)
+static inline int dummy_memory_adjust_reservation(struct domain *d1,
+                                                          struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_memory_stat_reservation(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_memory_stat_reservation(struct domain *d1,
+                                                        struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_console_io(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static inline int dummy_console_io(struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     if ( d->is_console )
@@ -225,129 +228,140 @@ static XSM_INLINE int dummy_console_io(XSM_DEFAULT_ARG struct domain *d, int cmd
     return xsm_default_action(XSM_PRIV, d, NULL);
 }
 
-static XSM_INLINE int dummy_profile(XSM_DEFAULT_ARG struct domain *d, int op)
+static inline int dummy_profile(struct domain *d, int op)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d, NULL);
 }
 
-static XSM_INLINE int dummy_kexec(XSM_DEFAULT_VOID)
+static inline int dummy_kexec(void)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_schedop_shutdown(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_schedop_shutdown(struct domain *d1,
+                                                 struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_memory_pin_page(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2,
-                                          struct page_info *page)
+static inline int dummy_memory_pin_page(struct domain *d1,
+                                                struct domain *d2,
+                                                struct page_info *page)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_claim_pages(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_claim_pages(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_evtchn_unbound(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn,
-                                         domid_t id2)
+static inline int dummy_evtchn_unbound(struct domain *d,
+                                               struct evtchn *chn,
+                                               domid_t id2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_evtchn_interdomain(XSM_DEFAULT_ARG struct domain *d1, struct evtchn
-                                *chan1, struct domain *d2, struct evtchn *chan2)
+static inline int dummy_evtchn_interdomain(struct domain *d1,
+                                                   struct evtchn *chan1,
+                                                   struct domain *d2,
+                                                   struct evtchn *chan2)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE void dummy_evtchn_close_post(struct evtchn *chn)
+static inline void dummy_evtchn_close_post(struct evtchn *chn)
 {
     return;
 }
 
-static XSM_INLINE int dummy_evtchn_send(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn)
+static inline int dummy_evtchn_send(struct domain *d,
+                                            struct evtchn *chn)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, d, NULL);
 }
 
-static XSM_INLINE int dummy_evtchn_status(XSM_DEFAULT_ARG struct domain *d, struct evtchn *chn)
+static inline int dummy_evtchn_status(struct domain *d,
+                                              struct evtchn *chn)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_evtchn_reset(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_evtchn_reset(struct domain *d1,
+                                             struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_alloc_security_evtchns(
-    struct evtchn chn[], unsigned int nr)
+static inline int dummy_alloc_security_evtchns(struct evtchn chn[],
+                                                       unsigned int nr)
 {
     return 0;
 }
 
-static XSM_INLINE void dummy_free_security_evtchns(
-    struct evtchn chn[], unsigned int nr)
+static inline void dummy_free_security_evtchns(struct evtchn chn[],
+                                                       unsigned int nr)
 {
     return;
 }
 
-static XSM_INLINE char *dummy_show_security_evtchn(struct domain *d, const struct evtchn *chn)
+static inline char *dummy_show_security_evtchn(struct domain *d,
+                                                       const struct evtchn *chn)
 {
     return NULL;
 }
 
-static XSM_INLINE int dummy_init_hardware_domain(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_init_hardware_domain(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_get_pod_target(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_get_pod_target(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_set_pod_target(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_set_pod_target(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_get_vnumainfo(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_get_vnumainfo(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
-static XSM_INLINE int dummy_get_device_group(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static inline int dummy_get_device_group(uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_assign_device(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf)
+static inline int dummy_assign_device(struct domain *d,
+                                              uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_deassign_device(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf)
+static inline int dummy_deassign_device(struct domain *d,
+                                                uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
@@ -356,15 +370,15 @@ static XSM_INLINE int dummy_deassign_device(XSM_DEFAULT_ARG struct domain *d, ui
 #endif /* HAS_PASSTHROUGH && HAS_PCI */
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_DEVICE_TREE)
-static XSM_INLINE int dummy_assign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
-                                          const char *dtpath)
+static inline int dummy_assign_dtdevice(struct domain *d,
+                                                const char *dtpath)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_deassign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
-                                            const char *dtpath)
+static inline int dummy_deassign_dtdevice(struct domain *d,
+                                                  const char *dtpath)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
@@ -372,178 +386,190 @@ static XSM_INLINE int dummy_deassign_dtdevice(XSM_DEFAULT_ARG struct domain *d,
 
 #endif /* HAS_PASSTHROUGH && HAS_DEVICE_TREE */
 
-static XSM_INLINE int dummy_resource_plug_core(XSM_DEFAULT_VOID)
+static inline int dummy_resource_plug_core(void)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_resource_unplug_core(XSM_DEFAULT_VOID)
+static inline int dummy_resource_unplug_core(void)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_resource_plug_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static inline int dummy_resource_plug_pci(uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_resource_unplug_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static inline int dummy_resource_unplug_pci(uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_resource_setup_pci(XSM_DEFAULT_ARG uint32_t machine_bdf)
+static inline int dummy_resource_setup_pci(uint32_t machine_bdf)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_resource_setup_gsi(XSM_DEFAULT_ARG int gsi)
+static inline int dummy_resource_setup_gsi(int gsi)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_resource_setup_misc(XSM_DEFAULT_VOID)
+static inline int dummy_resource_setup_misc(void)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_page_offline(XSM_DEFAULT_ARG uint32_t cmd)
+static inline int dummy_page_offline(uint32_t cmd)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_hypfs_op(XSM_DEFAULT_VOID)
+static inline int dummy_hypfs_op(void)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE long dummy_do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
+static inline long dummy_do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
     return -ENOSYS;
 }
 
 #ifdef CONFIG_COMPAT
-static XSM_INLINE int dummy_do_compat_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
+static inline int dummy_do_compat_op(
+                                XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
 {
     return -ENOSYS;
 }
 #endif
 
-static XSM_INLINE char *dummy_show_irq_sid(int irq)
+static inline char *dummy_show_irq_sid(int irq)
 {
     return NULL;
 }
 
-static XSM_INLINE int dummy_map_domain_pirq(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_map_domain_pirq(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_map_domain_irq(XSM_DEFAULT_ARG struct domain *d,
-                                         int irq, const void *data)
+static inline int dummy_map_domain_irq(struct domain *d, int irq,
+                                               const void *data)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_unmap_domain_pirq(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_unmap_domain_pirq(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_bind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind)
+static inline int dummy_bind_pt_irq(struct domain *d,
+                                            struct xen_domctl_bind_pt_irq *bind)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_unbind_pt_irq(XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind)
+static inline int dummy_unbind_pt_irq(struct domain *d,
+                                        struct xen_domctl_bind_pt_irq *bind)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_unmap_domain_irq(XSM_DEFAULT_ARG struct domain *d,
-                                           int irq, const void *data)
+static inline int dummy_unmap_domain_irq(struct domain *d, int irq,
+                                                 const void *data)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_irq_permission(XSM_DEFAULT_ARG struct domain *d, int pirq, uint8_t allow)
+static inline int dummy_irq_permission(struct domain *d, int pirq,
+                                               uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_iomem_permission(XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
+static inline int dummy_iomem_permission(struct domain *d, uint64_t s,
+                                                 uint64_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_iomem_mapping(XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow)
+static inline int dummy_iomem_mapping(struct domain *d, uint64_t s,
+                                              uint64_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_pci_config_permission(XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf,
-                                        uint16_t start, uint16_t end,
-                                        uint8_t access)
+static inline int dummy_pci_config_permission(struct domain *d,
+                                                      uint32_t machine_bdf,
+                                                      uint16_t start,
+                                                      uint16_t end,
+                                                      uint8_t access)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_add_to_physmap(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_add_to_physmap(struct domain *d1,
+                                               struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_remove_from_physmap(XSM_DEFAULT_ARG struct domain *d1, struct domain *d2)
+static inline int dummy_remove_from_physmap(struct domain *d1,
+                                                    struct domain *d2)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d1, d2);
 }
 
-static XSM_INLINE int dummy_map_gmfn_foreign(XSM_DEFAULT_ARG struct domain *d, struct domain *t)
+static inline int dummy_map_gmfn_foreign(struct domain *d,
+                                                 struct domain *t)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, t);
 }
 
-static XSM_INLINE int dummy_hvm_param(XSM_DEFAULT_ARG struct domain *d, unsigned long op)
+static inline int dummy_hvm_param(struct domain *d, unsigned long op)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_hvm_control(XSM_DEFAULT_ARG struct domain *d, unsigned long op)
+static inline int dummy_hvm_control(struct domain *d, unsigned long op)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_hvm_param_altp2mhvm(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_hvm_param_altp2mhvm(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_hvm_altp2mhvm_op(XSM_DEFAULT_ARG struct domain *d, uint64_t mode, uint32_t op)
+static inline int dummy_hvm_altp2mhvm_op(struct domain *d,
+                                                 uint64_t mode, uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
 
@@ -562,14 +588,15 @@ static XSM_INLINE int dummy_hvm_altp2mhvm_op(XSM_DEFAULT_ARG struct domain *d, u
     }
 }
 
-static XSM_INLINE int dummy_vm_event_control(XSM_DEFAULT_ARG struct domain *d, int mode, int op)
+static inline int dummy_vm_event_control(struct domain *d, int mode,
+                                                 int op)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
 #ifdef CONFIG_MEM_ACCESS
-static XSM_INLINE int dummy_mem_access(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_mem_access(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
@@ -577,7 +604,7 @@ static XSM_INLINE int dummy_mem_access(XSM_DEFAULT_ARG struct domain *d)
 #endif
 
 #ifdef CONFIG_MEM_PAGING
-static XSM_INLINE int dummy_mem_paging(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_mem_paging(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
@@ -585,58 +612,59 @@ static XSM_INLINE int dummy_mem_paging(XSM_DEFAULT_ARG struct domain *d)
 #endif
 
 #ifdef CONFIG_MEM_SHARING
-static XSM_INLINE int dummy_mem_sharing(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_mem_sharing(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 #endif
 
-static XSM_INLINE int dummy_platform_op(XSM_DEFAULT_ARG uint32_t op)
+static inline int dummy_platform_op(uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
 #ifdef CONFIG_X86
-static XSM_INLINE int dummy_do_mca(XSM_DEFAULT_VOID)
+static inline int dummy_do_mca(void)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_shadow_control(XSM_DEFAULT_ARG struct domain *d, uint32_t op)
+static inline int dummy_shadow_control(struct domain *d, uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_mem_sharing_op(XSM_DEFAULT_ARG struct domain *d, struct domain *cd, int op)
+static inline int dummy_mem_sharing_op(struct domain *d,
+                                               struct domain *cd, int op)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, cd);
 }
 
-static XSM_INLINE int dummy_apic(XSM_DEFAULT_ARG struct domain *d, int cmd)
+static inline int dummy_apic(struct domain *d, int cmd)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, d, NULL);
 }
 
-static XSM_INLINE int dummy_machine_memory_map(XSM_DEFAULT_VOID)
+static inline int dummy_machine_memory_map(void)
 {
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
 
-static XSM_INLINE int dummy_domain_memory_map(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_domain_memory_map(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_mmu_update(XSM_DEFAULT_ARG struct domain *d, struct domain *t,
-                                     struct domain *f, uint32_t flags)
+static inline int dummy_mmu_update(struct domain *d, struct domain *t,
+                                           struct domain *f, uint32_t flags)
 {
     int rc = 0;
     XSM_ASSERT_ACTION(XSM_TARGET);
@@ -647,38 +675,41 @@ static XSM_INLINE int dummy_mmu_update(XSM_DEFAULT_ARG struct domain *d, struct
     return rc;
 }
 
-static XSM_INLINE int dummy_mmuext_op(XSM_DEFAULT_ARG struct domain *d, struct domain *f)
+static inline int dummy_mmuext_op(struct domain *d, struct domain *f)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, f);
 }
 
-static XSM_INLINE int dummy_update_va_mapping(XSM_DEFAULT_ARG struct domain *d, struct domain *f,
-                                                            l1_pgentry_t pte)
+static inline int dummy_update_va_mapping(struct domain *d,
+                                                  struct domain *f,
+                                                  l1_pgentry_t pte)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, f);
 }
 
-static XSM_INLINE int dummy_priv_mapping(XSM_DEFAULT_ARG struct domain *d, struct domain *t)
+static inline int dummy_priv_mapping(struct domain *d, struct domain *t)
 {
     XSM_ASSERT_ACTION(XSM_TARGET);
     return xsm_default_action(action, d, t);
 }
 
-static XSM_INLINE int dummy_ioport_permission(XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
+static inline int dummy_ioport_permission(struct domain *d, uint32_t s,
+                                                  uint32_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_ioport_mapping(XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, uint8_t allow)
+static inline int dummy_ioport_mapping(struct domain *d, uint32_t s,
+                                               uint32_t e, uint8_t allow)
 {
     XSM_ASSERT_ACTION(XSM_HOOK);
     return xsm_default_action(action, current->domain, d);
 }
 
-static XSM_INLINE int dummy_pmu_op (XSM_DEFAULT_ARG struct domain *d, unsigned int op)
+static inline int dummy_pmu_op (struct domain *d, unsigned int op)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( op )
@@ -695,31 +726,31 @@ static XSM_INLINE int dummy_pmu_op (XSM_DEFAULT_ARG struct domain *d, unsigned i
 
 #endif /* CONFIG_X86 */
 
-static XSM_INLINE int dummy_dm_op(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_dm_op(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
 
 #ifdef CONFIG_ARGO
-static XSM_INLINE int dummy_argo_enable(const struct domain *d)
+static inline int dummy_argo_enable(const struct domain *d)
 {
     return 0;
 }
 
-static XSM_INLINE int dummy_argo_register_single_source(const struct domain *d,
-                                                      const struct domain *t)
+static inline int dummy_argo_register_single_source(const struct domain *d,
+                                                            const struct domain *t)
 {
     return 0;
 }
 
-static XSM_INLINE int dummy_argo_register_any_source(const struct domain *d)
+static inline int dummy_argo_register_any_source(const struct domain *d)
 {
     return 0;
 }
 
-static XSM_INLINE int dummy_argo_send(const struct domain *d,
-                                    const struct domain *t)
+static inline int dummy_argo_send(const struct domain *d,
+                                          const struct domain *t)
 {
     return 0;
 }
@@ -727,7 +758,7 @@ static XSM_INLINE int dummy_argo_send(const struct domain *d,
 #endif /* CONFIG_ARGO */
 
 #include <public/version.h>
-static XSM_INLINE int dummy_xen_version (XSM_DEFAULT_ARG uint32_t op)
+static inline int dummy_xen_version(uint32_t op)
 {
     XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( op )
@@ -751,7 +782,7 @@ static XSM_INLINE int dummy_xen_version (XSM_DEFAULT_ARG uint32_t op)
     }
 }
 
-static XSM_INLINE int dummy_domain_resource_map(XSM_DEFAULT_ARG struct domain *d)
+static inline int dummy_domain_resource_map(struct domain *d)
 {
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:31:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:31:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154816.285967 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32a2-0005pi-B3; Mon, 12 Jul 2021 20:31:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154816.285967; Mon, 12 Jul 2021 20:31:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32a2-0005pb-7w; Mon, 12 Jul 2021 20:31:06 +0000
Received: by outflank-mailman (input) for mailman id 154816;
 Mon, 12 Jul 2021 20:31:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9Agf=ME=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m32a0-0005oi-Kk
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 20:31:04 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 12d70888-e350-11eb-8707-12813bfff9fa;
 Mon, 12 Jul 2021 20:31:02 +0000 (UTC)
Received: from sisyou.hme. (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626121636585297.66257063713635;
 Mon, 12 Jul 2021 13:27:16 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 12d70888-e350-11eb-8707-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626121639; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=Alb+MINzXH+bQwKwNkaPrm1Y3kEhpIOnIzAgo3/YrC8a1ZbWIe7BKWBaMTT0t0O2chgy8DjkbmPUPYvb0khfBlacBVK5w6x5k+PuvEGbVpx/HlWQBfYdk16fPqHTMGQZdiFURIsoUcwGx7/fw6KbN7+3JWX9zVIiywOk2/NZmDQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626121639; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=LV+3c7OanjF9V/QSRwZgTnYolGtu8qd9oivP6z0k1EE=; 
	b=OhicGuXe/BWiSJwWf39s4lJIHqF3Ba29tBPrSXXzmpOEuh/FQzRXUGQ41JmAdbbaA3xCbPtIXVCmsGYVTSjqewF3/9xOgNQzfGwslJ38m4oJTPhoiYrhhzeTuOh22i+PN54a4pxtf98gidfvPT1lzpw/inNO5AD6l9Cp+M2jbJY=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626121639;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding;
	bh=LV+3c7OanjF9V/QSRwZgTnYolGtu8qd9oivP6z0k1EE=;
	b=mvk07+6QLusJqFycMyiJAwbxkogNP6tWALXFamy9d8+q6yrZKBPhfd6Yl/D2BODu
	tZKzZOMHSMFeqDV5kCMc6Oj0FK8LEOFeNJGPNWKcUQSWRHxjc8YiSZ0c+f5ux7aNHxS
	VoGTGlSOS9vtj1EZheZKxr4joTugtTQJvSp57Mbc=
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v2 10/10] xsm: removing the XSM_ASSERT_ACTION macro
Date: Mon, 12 Jul 2021 16:32:33 -0400
Message-Id: <20210712203233.20289-11-dpsmith@apertussolutions.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

With the eliminations of default priv from all the XSM hook call sites, this
renders the XSM_ASSERT_ACTION macro unneeded. This commit cleans up all the
dummy hooks, removing the macro.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/xsm/dummy.h | 253 +++++++++++++++---------------------------------
 1 file changed, 80 insertions(+), 173 deletions(-)

diff --git a/xen/xsm/dummy.h b/xen/xsm/dummy.h
index 1cb26e4146..1aaec86b05 100644
--- a/xen/xsm/dummy.h
+++ b/xen/xsm/dummy.h
@@ -6,13 +6,6 @@
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2,
  *  as published by the Free Software Foundation.
- *
- *
- *  Each XSM hook implementing an access check should have its first parameter
- *  preceded by (or use XSM_DEFAULT_VOID if it has no
- *  arguments). The first non-declaration statement shold be XSM_ASSERT_ACTION
- *  with the expected type of the hook, which will either define or check the
- *  value of action.
  */
 
 #include <xen/sched.h>
@@ -47,7 +40,6 @@ void __xsm_action_mismatch_detected(void);
  * xsm_default_t argument available, so the value from the assertion is used to
  * initialize the variable.
  */
-#define XSM_ASSERT_ACTION(def) xsm_default_t action = def; (void)action
 
 static always_inline int xsm_default_action(xsm_default_t action,
                                             struct domain *src,
@@ -87,37 +79,31 @@ static inline void dummy_security_domaininfo(struct domain *d,
 
 static inline int dummy_domain_create(struct domain *d, u32 ssidref)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_getdomaininfo(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_domctl_scheduler_op(struct domain *d, int cmd)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_sysctl_scheduler_op(int cmd)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_set_target(struct domain *d, struct domain *e)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_domctl(struct domain *d, int cmd)
 {
-    XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( cmd )
     {
     case XEN_DOMCTL_ioport_mapping:
@@ -134,14 +120,12 @@ static inline int dummy_domctl(struct domain *d, int cmd)
 
 static inline int dummy_sysctl(int cmd)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_readconsole(uint32_t clear)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_alloc_security_domain(struct domain *d)
@@ -158,67 +142,57 @@ static inline int dummy_grant_mapref(struct domain *d1,
                                              struct domain *d2,
                                              uint32_t flags)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_HOOK, d1, d2);
 }
 
 static inline int dummy_grant_unmapref(struct domain *d1,
                                                struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_HOOK, d1, d2);
 }
 
 static inline int dummy_grant_setup(struct domain *d1,
                                             struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_grant_transfer(struct domain *d1,
                                                struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_HOOK, d1, d2);
 }
 
 static inline int dummy_grant_copy(struct domain *d1, struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_HOOK, d1, d2);
 }
 
 static inline int dummy_grant_query_size(struct domain *d1,
                                                  struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_memory_exchange(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_TARGET, current->domain, d);
 }
 
 static inline int dummy_memory_adjust_reservation(struct domain *d1,
                                                           struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_memory_stat_reservation(struct domain *d1,
                                                         struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_console_io(struct domain *d, int cmd)
 {
-    XSM_ASSERT_ACTION(XSM_OTHER);
     if ( d->is_console )
         return xsm_default_action(XSM_HOOK, d, NULL);
 #ifdef CONFIG_VERBOSE_DEBUG
@@ -230,43 +204,37 @@ static inline int dummy_console_io(struct domain *d, int cmd)
 
 static inline int dummy_profile(struct domain *d, int op)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d, NULL);
+    return xsm_default_action(XSM_HOOK, d, NULL);
 }
 
 static inline int dummy_kexec(void)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_schedop_shutdown(struct domain *d1,
                                                  struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_PRIV, d1, d2);
 }
 
 static inline int dummy_memory_pin_page(struct domain *d1,
                                                 struct domain *d2,
                                                 struct page_info *page)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_HOOK, d1, d2);
 }
 
 static inline int dummy_claim_pages(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_PRIV, current->domain, d);
 }
 
 static inline int dummy_evtchn_unbound(struct domain *d,
                                                struct evtchn *chn,
                                                domid_t id2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_TARGET, current->domain, d);
 }
 
 static inline int dummy_evtchn_interdomain(struct domain *d1,
@@ -274,8 +242,7 @@ static inline int dummy_evtchn_interdomain(struct domain *d1,
                                                    struct domain *d2,
                                                    struct evtchn *chan2)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_HOOK, d1, d2);
 }
 
 static inline void dummy_evtchn_close_post(struct evtchn *chn)
@@ -286,22 +253,19 @@ static inline void dummy_evtchn_close_post(struct evtchn *chn)
 static inline int dummy_evtchn_send(struct domain *d,
                                             struct evtchn *chn)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, d, NULL);
+    return xsm_default_action(XSM_HOOK, d, NULL);
 }
 
 static inline int dummy_evtchn_status(struct domain *d,
                                               struct evtchn *chn)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_TARGET, current->domain, d);
 }
 
 static inline int dummy_evtchn_reset(struct domain *d1,
                                              struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_alloc_security_evtchns(struct evtchn chn[],
@@ -324,47 +288,40 @@ static inline char *dummy_show_security_evtchn(struct domain *d,
 
 static inline int dummy_init_hardware_domain(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_get_pod_target(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_PRIV, current->domain, d);
 }
 
 static inline int dummy_set_pod_target(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_PRIV, current->domain, d);
 }
 
 static inline int dummy_get_vnumainfo(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_TARGET, current->domain, d);
 }
 
 #if defined(CONFIG_HAS_PASSTHROUGH) && defined(CONFIG_HAS_PCI)
 static inline int dummy_get_device_group(uint32_t machine_bdf)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_assign_device(struct domain *d,
                                               uint32_t machine_bdf)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_deassign_device(struct domain *d,
                                                 uint32_t machine_bdf)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 #endif /* HAS_PASSTHROUGH && HAS_PCI */
@@ -373,71 +330,60 @@ static inline int dummy_deassign_device(struct domain *d,
 static inline int dummy_assign_dtdevice(struct domain *d,
                                                 const char *dtpath)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_deassign_dtdevice(struct domain *d,
                                                   const char *dtpath)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 #endif /* HAS_PASSTHROUGH && HAS_DEVICE_TREE */
 
 static inline int dummy_resource_plug_core(void)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_resource_unplug_core(void)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_resource_plug_pci(uint32_t machine_bdf)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_resource_unplug_pci(uint32_t machine_bdf)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_resource_setup_pci(uint32_t machine_bdf)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_resource_setup_gsi(int gsi)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_resource_setup_misc(void)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_page_offline(uint32_t cmd)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_HOOK, current->domain, NULL);
 }
 
 static inline int dummy_hypfs_op(void)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline long dummy_do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
@@ -460,63 +406,54 @@ static inline char *dummy_show_irq_sid(int irq)
 
 static inline int dummy_map_domain_pirq(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 
 static inline int dummy_map_domain_irq(struct domain *d, int irq,
                                                const void *data)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_unmap_domain_pirq(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 
 static inline int dummy_bind_pt_irq(struct domain *d,
                                             struct xen_domctl_bind_pt_irq *bind)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_unbind_pt_irq(struct domain *d,
                                         struct xen_domctl_bind_pt_irq *bind)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_unmap_domain_irq(struct domain *d, int irq,
                                                  const void *data)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_irq_permission(struct domain *d, int pirq,
                                                uint8_t allow)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_iomem_permission(struct domain *d, uint64_t s,
                                                  uint64_t e, uint8_t allow)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_iomem_mapping(struct domain *d, uint64_t s,
                                               uint64_t e, uint8_t allow)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_pci_config_permission(struct domain *d,
@@ -525,54 +462,45 @@ static inline int dummy_pci_config_permission(struct domain *d,
                                                       uint16_t end,
                                                       uint8_t access)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_add_to_physmap(struct domain *d1,
                                                struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_remove_from_physmap(struct domain *d1,
                                                     struct domain *d2)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d1, d2);
+    return xsm_default_action(XSM_TARGET, d1, d2);
 }
 
 static inline int dummy_map_gmfn_foreign(struct domain *d,
                                                  struct domain *t)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d, t);
+    return xsm_default_action(XSM_TARGET, d, t);
 }
 
 static inline int dummy_hvm_param(struct domain *d, unsigned long op)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_TARGET, current->domain, d);
 }
 
 static inline int dummy_hvm_control(struct domain *d, unsigned long op)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 
 static inline int dummy_hvm_param_altp2mhvm(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_PRIV, current->domain, d);
 }
 
 static inline int dummy_hvm_altp2mhvm_op(struct domain *d,
                                                  uint64_t mode, uint32_t op)
 {
-    XSM_ASSERT_ACTION(XSM_OTHER);
-
     switch ( mode )
     {
     case XEN_ALTP2M_mixed:
@@ -591,127 +519,109 @@ static inline int dummy_hvm_altp2mhvm_op(struct domain *d,
 static inline int dummy_vm_event_control(struct domain *d, int mode,
                                                  int op)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_PRIV, current->domain, d);
 }
 
 #ifdef CONFIG_MEM_ACCESS
 static inline int dummy_mem_access(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 #endif
 
 #ifdef CONFIG_MEM_PAGING
 static inline int dummy_mem_paging(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 #endif
 
 #ifdef CONFIG_MEM_SHARING
 static inline int dummy_mem_sharing(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 #endif
 
 static inline int dummy_platform_op(uint32_t op)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 #ifdef CONFIG_X86
 static inline int dummy_do_mca(void)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_shadow_control(struct domain *d, uint32_t op)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_mem_sharing_op(struct domain *d,
                                                struct domain *cd, int op)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, cd);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, cd);
 }
 
 static inline int dummy_apic(struct domain *d, int cmd)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, d, NULL);
+    return xsm_default_action(XSM_PRIV, d, NULL);
 }
 
 static inline int dummy_machine_memory_map(void)
 {
-    XSM_ASSERT_ACTION(XSM_PRIV);
-    return xsm_default_action(action, current->domain, NULL);
+    return xsm_default_action(XSM_PRIV, current->domain, NULL);
 }
 
 static inline int dummy_domain_memory_map(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_TARGET, current->domain, d);
 }
 
 static inline int dummy_mmu_update(struct domain *d, struct domain *t,
                                            struct domain *f, uint32_t flags)
 {
     int rc = 0;
-    XSM_ASSERT_ACTION(XSM_TARGET);
     if ( f != dom_io )
-        rc = xsm_default_action(action, d, f);
+        rc = xsm_default_action(XSM_TARGET, d, f);
     if ( evaluate_nospec(t) && !rc )
-        rc = xsm_default_action(action, d, t);
+        rc = xsm_default_action(XSM_TARGET, d, t);
     return rc;
 }
 
 static inline int dummy_mmuext_op(struct domain *d, struct domain *f)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d, f);
+    return xsm_default_action(XSM_TARGET, d, f);
 }
 
 static inline int dummy_update_va_mapping(struct domain *d,
                                                   struct domain *f,
                                                   l1_pgentry_t pte)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d, f);
+    return xsm_default_action(XSM_TARGET, d, f);
 }
 
 static inline int dummy_priv_mapping(struct domain *d, struct domain *t)
 {
-    XSM_ASSERT_ACTION(XSM_TARGET);
-    return xsm_default_action(action, d, t);
+    return xsm_default_action(XSM_TARGET, d, t);
 }
 
 static inline int dummy_ioport_permission(struct domain *d, uint32_t s,
                                                   uint32_t e, uint8_t allow)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_ioport_mapping(struct domain *d, uint32_t s,
                                                uint32_t e, uint8_t allow)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_HOOK, current->domain, d);
 }
 
 static inline int dummy_pmu_op (struct domain *d, unsigned int op)
 {
-    XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( op )
     {
     case XENPMU_init:
@@ -728,8 +638,7 @@ static inline int dummy_pmu_op (struct domain *d, unsigned int op)
 
 static inline int dummy_dm_op(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
 
 #ifdef CONFIG_ARGO
@@ -760,7 +669,6 @@ static inline int dummy_argo_send(const struct domain *d,
 #include <public/version.h>
 static inline int dummy_xen_version(uint32_t op)
 {
-    XSM_ASSERT_ACTION(XSM_OTHER);
     switch ( op )
     {
     case XENVER_version:
@@ -784,6 +692,5 @@ static inline int dummy_xen_version(uint32_t op)
 
 static inline int dummy_domain_resource_map(struct domain *d)
 {
-    XSM_ASSERT_ACTION(XSM_DM_PRIV);
-    return xsm_default_action(action, current->domain, d);
+    return xsm_default_action(XSM_DM_PRIV, current->domain, d);
 }
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 20:52:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 20:52:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154834.285983 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32uQ-0000F7-48; Mon, 12 Jul 2021 20:52:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154834.285983; Mon, 12 Jul 2021 20:52:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m32uQ-0000F0-1A; Mon, 12 Jul 2021 20:52:10 +0000
Received: by outflank-mailman (input) for mailman id 154834;
 Mon, 12 Jul 2021 20:52:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Aa2W=ME=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m32uO-0000Eu-AO
 for xen-devel@lists.xen.org; Mon, 12 Jul 2021 20:52:08 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04a8c5a0-e353-11eb-8709-12813bfff9fa;
 Mon, 12 Jul 2021 20:52:07 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id BFC3461002;
 Mon, 12 Jul 2021 20:52:05 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 04a8c5a0-e353-11eb-8709-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626123126;
	bh=J6m9ao+LV67ChBaN6D64zfORhcALTt0HFhiUy/cX4yk=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=MqxrWtNtRibR6ZBFDxMeQZ8Meqm2snsLyWgMfVMLk57zGg1pd9db/FoZ+tkxENbgy
	 fKhmAnV8sMaaevh+nCKW7nPdqSYH0wB3f8eRS+ySaIgw72MH+h/9SW0QVRzUXogKX+
	 PMDtQBZ9dwOjob5BN24RqAHb4Ia7jEMSwVMet1mU6KPc8n3FHLQ6+x+rxG6hZA2MHM
	 qjwxbka8/LlWPS37/wDnZc47WAtIGVa/Q+EvZ7vnkYhCrUPMju/vakgKDlzzlZIuFm
	 1MF/QjiajpOO7+BE3fYtR/stmiaaBD2QMrtbUf+8MZqHEAa/DWKoma3VuUUHOcqRjx
	 3/7jehQiSkIuQ==
Date: Mon, 12 Jul 2021 13:52:05 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Andre Przywara <andre.przywara@arm.com>
cc: Wei Chen <Wei.Chen@arm.com>, Alexandru Elisei <alexandru.elisei@arm.com>, 
    "kvm@vger.kernel.org" <kvm@vger.kernel.org>, 
    "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, 
    "will@kernel.org" <will@kernel.org>, 
    "jean-philippe@linaro.org" <jean-philippe@linaro.org>, 
    Julien Grall <julien@xen.org>, Marc Zyngier <maz@kernel.org>, 
    "julien.thierry.kdev@gmail.com" <julien.thierry.kdev@gmail.com>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    Oleksandr Tyshchenko <Oleksandr_Tyshchenko@epam.com>
Subject: Re: [Kvmtool] Some thoughts on using kvmtool Virtio for Xen
In-Reply-To: <20210709123749.1aaa5bfe@slackpad.fritz.box>
Message-ID: <alpine.DEB.2.21.2107121342290.23286@sstabellini-ThinkPad-T480s>
References: <DB9PR08MB6857B375207376D8320AFBA89E309@DB9PR08MB6857.eurprd08.prod.outlook.com> <20210709123749.1aaa5bfe@slackpad.fritz.box>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Fri, 9 Jul 2021, Andre Przywara wrote:
> On Tue, 15 Jun 2021 07:12:08 +0100
> Wei Chen <Wei.Chen@arm.com> wrote:
> 
> Hi Wei,
> 
> > I have some thoughts of using kvmtool Virtio implementation
> > for Xen. I copied my markdown file to this email. If you have
> > time, could you please help me review it?
> > 
> > Any feedback is welcome!
> > 
> > # Some thoughts on using kvmtool Virtio for Xen
> > ## Background
> > 
> > Xen community is working on adding VIRTIO capability to Xen. And we're working
> > on VIRTIO backend of Xen. But except QEMU can support virtio-net for x86-xen,
> > there is not any VIRTIO backend can support Xen. Because of the community's
> > strong voice of Out-of-QEMU, we want to find a light weight VIRTIO backend to
> > support Xen.
> > 
> > We have an idea of utilizing the virtio implementaton of kvmtool for Xen. And
> > We know there was some agreement that kvmtool won't try to be a full QEMU
> > alternative. So we have written two proposals in following content for
> > communities to discuss in public:
> > 
> > ## Proposals
> > ### 1. Introduce a new "dm-only" command
> > 1. Introduce a new "dm-only" command to provide a pure device model mode. In
> >    this mode, kvmtool only handles IO request. VM creation and initialization
> >    will be bypassed.
> > 
> >     * We will rework the interface between the virtio code and the rest of
> >     kvmtool, to use just the minimal set of information. At the end, there
> >     would be MMIO accesses and shared memory that control the device model,
> >     so that could be abstracted to do away with any KVM specifics at all. If
> >     this is workable, we will send the first set of patches to introduce this
> >     interface, and adapt the existing kvmtool to it. Then later we will can
> >     add Xen support on top of it.
> > 
> >     About Xen support, we will detect the presence of Xen libraries, also
> >     allow people to ignore them, as kvmtoll do with optional features like
> >     libz or libaio.
> > 
> >     Idealy, we want to move all code replying on Xen libraries to a set of
> >     new files. In this case, thes files can only be compiled when Xen
> >     libraries are detected. But if we can't decouple this code completely,
> >     we may introduce a bit of #ifdefs to protect this code.
> > 
> >     If kvm or other VMM do not need "dm-only" mode. Or "dm-only" can not
> >     work without Xen libraries. We will make "dm-only" command depends on
> >     the presence of Xen libraries.
> > 
> >     So a normal compile (without the Xen libraries installed) would create
> >     a binary as close as possible to the current code, and only the people
> >     who having Xen libraries installed would ever generate a "dm-only"
> >     capable kvmtool.
> 
> This is not for me to decide, but just to let you know that this
> approach might not be very popular with kvmtool people, as kvmtool's
> design goal is be "lean and mean". So slapping a lot of code on the
> side, not helping with the actual KVM functionality, does not sound too
> tempting.
> 
> > 
> > ### 2. Abstract kvmtool virtio implementation as a library
> > 1. Add a kvmtool Makefile target to generate a virtio library. In this
> >    scenario, not just Xen, but any project else want to provide a
> >    userspace virtio backend service can link to this virtio libraris.
> >    These users would benefit from the VIRTIO implementation of kvmtool
> >    and will participate in improvements, upgrades, and maintenance of
> >    the VIRTIO libraries.
> > 
> >     * In this case, Xen part code will not upstream to kvmtool repo,
> >       it would then be natural parts of the xen repo, in xen/tools or
> >       maintained in other repo.
> > 
> >       We will have a completely separate VIRTIO backend for Xen, just
> >       linking to kvmtool's VIRTIO library.
> > 
> >     * The main changes of kvmtool would be:
> >         1. Still need to rework the interface between the virtio code
> >            and the rest of kvmtool, to abstract the whole virtio
> >            implementation into a library
> >         2. Modify current build system to add a new virtio library target.
> 
> As this has at least the prospect of being cleaner, this approach
> sounds better to me.

There are two sets of changes:

a) Xen ioreq handling
b) introducing map_guest_page/unmap_guest_page and abstracting other
   hypervisor interfaces 

a) is minimal and b) is more invasive. The problem is b) is required
regardless, so the library approach wouldn't really help much with
reducing the amount of changes required for this to work. But yes, it
might be cleaner.


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 22:17:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 22:17:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154843.286000 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m34EP-0008Ao-EU; Mon, 12 Jul 2021 22:16:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154843.286000; Mon, 12 Jul 2021 22:16:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m34EP-0008Ah-BN; Mon, 12 Jul 2021 22:16:53 +0000
Received: by outflank-mailman (input) for mailman id 154843;
 Mon, 12 Jul 2021 22:16:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m34EO-0008AX-QB; Mon, 12 Jul 2021 22:16:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m34EO-0007UG-HQ; Mon, 12 Jul 2021 22:16:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m34EO-0006y5-9L; Mon, 12 Jul 2021 22:16:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m34EO-0007e8-8o; Mon, 12 Jul 2021 22:16:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+6KmMtMb6ceO15oeHIqHHESrIuEkOstZ0HjOLmw/ZaE=; b=pAoFWwkxu81T3TrTCMzRhkTN4k
	buhXNxS+qz5NINpuB9ZVe1lAHZDBjj5YxpbY6kJEGfrzmmJMz51c9zsjzzhUNvCjq6ytIhMQWTl79
	rURULLoFL41O/5zXx2rsRZxpjZBrDESa34nww/8DyCE8hfsQBMgAKsNA37Y/dl+4ubas=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163614-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163614: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 22:16:52 +0000

flight 163614 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163614/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    3 days
Failing since        163480  2021-07-09 16:08:01 Z    3 days   19 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    3 days   18 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 22:40:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 22:40:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154852.286020 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m34b9-0002vA-G2; Mon, 12 Jul 2021 22:40:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154852.286020; Mon, 12 Jul 2021 22:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m34b9-0002v3-D7; Mon, 12 Jul 2021 22:40:23 +0000
Received: by outflank-mailman (input) for mailman id 154852;
 Mon, 12 Jul 2021 22:40:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m34b7-0002ut-PY; Mon, 12 Jul 2021 22:40:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m34b7-0007rv-Hr; Mon, 12 Jul 2021 22:40:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m34b7-00007x-6x; Mon, 12 Jul 2021 22:40:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m34b7-00089e-6S; Mon, 12 Jul 2021 22:40:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=lnMYR2eX8inmPaGQ2Mpx3Vzu1abwf1xd/O4xzD19SZc=; b=xHtrYTdYQGQFq2P3Z4e2SmLWtn
	IPOf9cv7YeDoaw80U7FELcm2A6rgG4TOXz5mQTdVrPj9UZyeSRuFT/aU++4w+ViRS6BUNH1oG/PwY
	DRpS2Vzja0zMuPm5zAgj1gOdKkSzq8/ShtzKbmUzDLVPOyZWuU2eluluuPNSoJPFSBqY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163597-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163597: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=e73f0f0ee7541171d89f2e2491130c7771ba58d3
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 22:40:21 +0000

flight 163597 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163597/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                e73f0f0ee7541171d89f2e2491130c7771ba58d3
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  346 days
Failing since        152366  2020-08-01 20:49:34 Z  345 days  589 attempts
Testing same since   163597  2021-07-12 08:07:20 Z    0 days    1 attempts

------------------------------------------------------------
6679 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1966291 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:12:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:12:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154876.286035 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m356b-0006JA-UA; Mon, 12 Jul 2021 23:12:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154876.286035; Mon, 12 Jul 2021 23:12:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m356b-0006J3-RD; Mon, 12 Jul 2021 23:12:53 +0000
Received: by outflank-mailman (input) for mailman id 154876;
 Mon, 12 Jul 2021 23:12:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m356Z-0006Ix-Ow
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 23:12:52 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ad741910-e366-11eb-870e-12813bfff9fa;
 Mon, 12 Jul 2021 23:12:50 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ad741910-e366-11eb-870e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626131570;
  h=to:references:from:subject:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=fO5xrBFe9sZDy1xRbutWikW+NSmnMmrkkxEtZnT1q7U=;
  b=Fb/IfcN9ye1jmCY5hNsBOaGJmHArv7YCw7p6kWK6Jjo1s6bMex34t0vc
   pyPXDr6J6CqwngbfUJUZ2Oh9Xsx87YU2YvWAlCT9O+hsZ4i5UIYwXekyG
   5yDPjViskocbgCHdECggxT8N8XPW7nx85h62V/5JrskKl4Y3fOhNeKipN
   I=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: zGh6s00ADok86WXpGRQbEwyAEPC4EzDLh/QnGyYd2Aj4lUVVtm8ibvXgodJO9U8hcuaqDREQih
 m5F0HWXQaXktSQZyaag5s3YP2DmMewIrqNfh6m2RedbIhNY65+NQgxstLseyvNEwu9O63SNWLT
 QsRDsT4DSKI3gBcGQAi2JNM/6lO+SnmlbCvpAxN4vohnKw2/SmYI/GUR/tHA+m3JjE5F8oe//f
 jascjsKQakn78cyKRRg2wevpPrs1NuJjISsSaqrQtSqvL5jJAsZV28kdX0a6Sqbz6Ut0rSiq4N
 kos=
X-SBRS: 5.1
X-MesageID: 48170957
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:UyVlT6MhUkVhGsBcTzH155DYdb4zR+YMi2TDiHoedfUFSKOlfp
 6V8MjztSWVtN9jYgBepTnmAtj9fZq8z+8J3WB1B9aftWbdyROVxe1ZnOzfKnjbalfDH41mpN
 ddmspFeaTN5DFB5K6QimTIcKdDsau6GeKT9IPjJh9WPHBXgspbnmFE42igYyhLrUV9dOEE/M
 323Ls4m9PsQwVbUu2LQl0+G8TTrdzCk5zrJTYAGh4c8QGLyRel8qTzHRS01goXF2on+8ZszU
 H11yjCoomzufCyzRHRk0fV8pRtgdPkjv9OHtaFhMQ5IijlziyoeINicbufuy1dmpDi1H8a1P
 335zswNcV67H3cOkuvpwH25gXm2DEyr1f/1F6xmxLY0IzEbQN/L/AEqZNScxPf5UZllsp7yr
 h302WQsIcSJQ/cnR76+8PDW3hR5wuJSEIZ4KwuZkFkIM4jgOc7l/1awKoVKuZPIMvC0vFlLA
 E0Z/uso8q/GDihHgPkVmoG+q3lYp18JGbBfqE4gL3g79FhpgEx86Ip/r1rop4+zuNLd3Bl3Z
 WODk06rsAFcicpBZgNctvpB/HHU1DwfQ==
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="48170957"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MctR3fia/gt+fZmrcyCen6be4bmQckTd/MTxRqI/UnMhLinB2OxeF/JQMbgJciuzmntTNOPrgFVPFTVG6VUGEQobRnEo/l+NIh672htx1sv3SaVuwsNtz/Yx26vCYQhQNZgJbPFOgZWcopZHA796UmiyDA1CvkY3uwPO+9ylOvKv7gnFmdeCmGvJf+TaAqXFJ/zEmBUa6q7wmj1CrXoC/NTMt9jylVbSb1MmzIHCb6/eek+W5YCrXIWxtmJWsfILtDkMXEEqO4qrw8bD2oHF5xC9BDtovai+cKjaR2rPyRlcPFm+QJf9NrgwnoxURVJ5EmKwvu/v4jdGYikbM5xcGQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IdtvBYwMbV/PM/7BNt6mcTNmrFO7CR4EdLVk/zw+8vw=;
 b=NZZDjiyVpWUEtLLu2G9b/3JbObykGPngf/3BMwn6Z+jYvLb1n3LGGWhX+UolIg8C5NWM8GG9mOnJ/0sX4M6FeCnzu0RjJevtHQsJe5xyR4YgDdwEkd/QL5OPP/j7qcEGVXPi0pMN2QbxG9NKE9RKlpTU88qZWQyjfbqRX15e3bMwof7rGHbzQqXM0tTFS9Qz90+5QLXKSOipkhPwIHIMNRLrQ2qMwDBbYQ1zFXjX44kg2kVXWfMJSUIP6jNukBdh2TQYh0zPw64ONv+j7OD1S76IGrtWkQbzdNLEw6DgusrL3r/JbaNpD/NnnJGCPY9dbSKlUcPF+DE11gmIs7MP/A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IdtvBYwMbV/PM/7BNt6mcTNmrFO7CR4EdLVk/zw+8vw=;
 b=NyEF92On1jVG4okmdvu5GNm6Pyz8MEXPJpoFUXEDacv6Dibhe3doNg3UPuRpUm/VDJfRbVOqmwGZL6sZfHPprAgBj/F4xkuDV1I3oG4A8O5Hk5wD12E3cFBGA8Ga3zxKGaFhLacYfgdeMIBJ17ksFKZW+mV4wXGqiLhzio3kiik=
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	<xen-devel@lists.xenproject.org>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v2 00/10] xsm: refactoring xsm hooks
Message-ID: <9d8e9cbf-e7cd-cfc8-ee55-204537590d62@citrix.com>
Date: Tue, 13 Jul 2021 00:12:41 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-1-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0353.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:d::29) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d95b1510-6493-48bf-246e-08d9458a8f71
X-MS-TrafficTypeDiagnostic: BYAPR03MB3943:
X-Microsoft-Antispam-PRVS: <BYAPR03MB394333C2521749A3354A0E10BA159@BYAPR03MB3943.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1417;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: PDElU3RP+rSV+wCd06r27YO+ylTa8EhkC1pla5O22oRBm5atXlgtGSuRQOxjNjAMDdsuY6q+qO7oguun3HdxbdG3AwmtUqxb2Ta4vQulN74K145oEygDaw+AMV6GhjDKNcpghTPgJ3nXjic8lkqiqzC2EBpA3FrVJLHuSHbhwuDA52oF25o9BzNMONeiA1TzBPOdigTt5Bb5S+PEQMAPoM0fYgyYLJgu5LmMd1v9g1qpy1Mz/sUvel/bQsaHbVI7qG+YgEHX0IQo+z0jFmMSv8NcL2Xb6UxbnEviN7bilX/Re3Rc/nFpNTL3oa0fNC8LymgjO+Iz5x6nmOru29/YrZ6Gn/6oQeLmQd87gNc9JkezAASmlevJKQbHiSMy8SxzltVTftO940wZ3eqx+KBzt+er+b0t9jgUd2+Kh/RVjZJN/FG4JdmjV/3PQZun5k9z5c6BywYxBXhujT0aOzIwK2mQRo5O8BNXqMIy8AiQCKJeVfXWh9b5/laip84L4OxbiRE5jC4JjyuEtXUfHkN2rI5v3HkxYO4nrP/oFC5G8Xwz9D4oQWSVu38fGgxSNViNcmnn5u2JuuvE4Xwcrv3e3dOHzJ57+GidMVme1Cnae4dYwVjYetQZBuTqRLXaNqNM0o+Z5o3dsqYVCWBLZ7Gs8ueRKK02Gr2m8APYZD0z1DdOnytXTkEcMzgVBYMYXeWjlIoSAxAbjBndvpkI98a8TY7+MFxllmHUjyGA+1GRpInV5ZcmcLzhARau/0c72RQdpv5MnCj4E3j4fjg0ovX1ByWdCqLdcpNT76KQdyKYab/SDw6TWj3z+dUhnMfBRpiI
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(366004)(136003)(39860400002)(396003)(36756003)(478600001)(966005)(31686004)(316002)(86362001)(6666004)(26005)(6486002)(31696002)(16576012)(186003)(2616005)(53546011)(2906002)(956004)(83380400001)(8936002)(8676002)(66946007)(66476007)(5660300002)(38100700002)(66556008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: d95b1510-6493-48bf-246e-08d9458a8f71
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 23:12:46.8193
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: EkQ9K8jS8+2KZpxlPQCu6FB2hQ0B3V6qC2Etd+W9EAGeHLtGRbGRY8K7XX34HJaPZocNb5YjygOxw1t6s13BqInV0iFqqaN5/1/x8Fpv7RI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3943
X-OriginatorOrg: citrix.com

On 12/07/2021 21:32, Daniel P. Smith wrote:
> Based on feedback from 2021 Xen Developers Summit the xsm-roles RFC
> patch set is being split into two separate patch sets. This is the first
> patch set and is focused purely on the clean up and refactoring of the
> XSM hooks.
>
> This patch set refactors the xsm_ops wrapper hooks to use the alternative=
_call
> infrastructure. Then proceeds to move and realign the headers to remove t=
he
> psuedo is/is not enable implementation. The remainder of the changes are =
clean up
> and removing no longer necessary abstractions.
>
> v2:
>  - restructured the patches, breaking them up as needed
>  - incorporate Andrew Cooper's alternative call common code
>  - change XSM module registration, removing register_xsm
>  - incoporate KConfig recommendations
>  - reworded commit messages
>  - incorporate macro expansion recommendations
>  - misc clean-up fallout from recommendations

CI is heavily broken atm, but there is one issue I've spotted which is
introduced by this series.

https://gitlab.com/xen-project/patchew/xen/-/jobs/1418359368

In file included from xsm_policy.c:21:
/builds/xen-project/patchew/xen/xen/include/xsm/xsm.h: In function
'xsm_security_domaininfo':
/builds/xen-project/patchew/xen/xen/include/xsm/xsm.h:30:5: error:
implicit declaration of function 'alternative_vcall'
[-Werror=3Dimplicit-function-declaration]
=C2=A0=C2=A0 30 |=C2=A0=C2=A0=C2=A0=C2=A0 alternative_vcall(xsm_ops.securit=
y_domaininfo, d, info);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~~~~~


You need to drop the XSM guard around including xen/alternative-call.h
in patch 4, especially seeing as as you don't delete it in patch 6 where
CONFIG_XSM formally disappears.=C2=A0 The x86 build only works by chance,
with asm/alternative.h being included implicitly.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:17:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:17:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154882.286045 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35B1-00071p-HR; Mon, 12 Jul 2021 23:17:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154882.286045; Mon, 12 Jul 2021 23:17:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35B1-00071i-Dc; Mon, 12 Jul 2021 23:17:27 +0000
Received: by outflank-mailman (input) for mailman id 154882;
 Mon, 12 Jul 2021 23:17:26 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m35B0-00071W-5R; Mon, 12 Jul 2021 23:17:26 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m35Az-0008TB-T9; Mon, 12 Jul 2021 23:17:25 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m35Az-0002OY-Jv; Mon, 12 Jul 2021 23:17:25 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m35Az-0004w9-JK; Mon, 12 Jul 2021 23:17:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=VNJRdzPA2xpvNotNmSsKi5uE2CUP4gqZjI7A9X1UAss=; b=1RQzsdTvGK5arFdKatWfFbWB2f
	BD+tzcgoAMMkUhjrjnSSX+Ij1SdLJE3swehITv5Vd0wUQ0CooTPe9Rw/aM349vbVTYLwTezT28h1Q
	0gF8ku7IBak8oL+03GXS7gu5N2cnnBJ/Iftt13uUiDbjbpkmIQzomvGsZRvQLVohjqBU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163600-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163600: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=86108e23d798bcd3fce35ad271b198f8a8611746
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 12 Jul 2021 23:17:25 +0000

flight 163600 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163600/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                86108e23d798bcd3fce35ad271b198f8a8611746
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    6 days
Failing since        163327  2021-07-06 12:39:04 Z    6 days   12 attempts
Testing same since   163600  2021-07-12 09:36:09 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Corey Minyard <cminyard@mvista.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3956 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:22:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:22:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154890.286059 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35Fg-0008TE-BR; Mon, 12 Jul 2021 23:22:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154890.286059; Mon, 12 Jul 2021 23:22:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35Fg-0008T7-8O; Mon, 12 Jul 2021 23:22:16 +0000
Received: by outflank-mailman (input) for mailman id 154890;
 Mon, 12 Jul 2021 23:22:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m35Ff-0008T1-8V
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 23:22:15 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fd72ca28-e367-11eb-870e-12813bfff9fa;
 Mon, 12 Jul 2021 23:22:14 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fd72ca28-e367-11eb-870e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626132134;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=cIelzpufYg9nItQp7ba1nwJVA5XICTgXKeIOBei7J3M=;
  b=ErV3hqOaatkcxTVC1xQI567hCz+yI02l43KLTc67GWH32jKdPPHo+mSr
   0oVquyyW0Hdiwn0zZROX8A9/9EEDaAW7wMbQl49c0uHxChX7MZ9UDr6UB
   VtDGaAqNoS3jXopjty/2vI50G2c5bsNQZqYBdn1jSx4bVhHrfcvqEo2cr
   g=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: LcsHe/Bpj02iJPKX6pbhtXXkD2/pFkWy+NkKDI/4kGG+3FnZ1PqxKelkyB20zKqwQlxoDAerT7
 0NPXwN9Kvr0DY/t7Pks6Bydz+xdGYBVyBhGkNMlW+tVLZ07vw9Vn3Da4j22llEHSWZQOSRMvBx
 IFiDb4ig1mw/uzLQigw3CSZXXT+JvRtTkvprz4gXrpAtd/MJozsVycYd6tA1CaRi1Mk51fOJnM
 vhs9k317S+dU6VI2nAbpUrB5CnLg88Ndixa3jzF+h4rCBJkfVRp8o5fRius46k1c03FMe1CCu4
 1E0=
X-SBRS: 5.1
X-MesageID: 49754033
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Bt12uaHAcv4M/fgkpLqFHZHXdLJyesId70hD6qkvc3Nom52j+/
 xGws536faVslcssHFJo6HkBEDyewKiyXcT2/hsAV7CZniahILMFu9fBOTZskXd8kHFh4lgPO
 JbAtJD4b7LfChHZKTBkXCF+r8bqbHtmsDY5pat854ud3APV0gJ1XYJNu/xKDwReOApP+taKH
 PR3Ls9m9L2Ek5nEPhTS0N1EtTrlpnurtbLcBQGDxko5E2nii6p0qfzF1y90g0FWz1C7L8++S
 yd+jaJqZmLgrWe8FvxxmXT55NZlJ/IzcZCPtWFjowwJi/3ggilSYx9U/mpvSwzosuo9FE2+e
 O87ysIDoBW0Tf8b2u1qRzi103LyzA18ULvzleenD/KvdH5bChSMbsAuatpNj/ir2YwttB116
 xGm0iDsYBMMB/GlCPho/DVShBRkFauq3ZKq59Ts5Vma/pdVFZtl/1bwKsMe61wWB4SqbpXXt
 WGNfusp8q/KjihHjfkVgAF+q3eYpwxdi32CnTq9PbllQS+p0oJu3fw8vZv10voxKhNPqWs2N
 60RZiAtIs+BfP+PpgNTtvof6OMexrwqFT3QTuvHWg=
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="49754033"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JSkgTTOs4TclajAeTEYqEygHlLwtVcIzsJqwY0ZKnMlzln3Ipy0CqlAw7jm+EBZKlZUGEq6F/zGOryBR98au/o8M8Usq1Fsf7tyNkKNAwlvTlV4OJ9+VislGf2ZVwKsLUWyvD6oSvkobKQsb39dpou0UP9bcMNF3mq5JtcikJNQSHLIHuoD5WxZW4rCBpsmBc4Tr5YdAOiZQ/oDgSM7WtQHoO+foVFXgYDNVWHZNP7EcjJDdHCS/JYeyC14PEP45wFRjoahJDgp9Tri0BmIf+Bohsrm7D/KLGXk752YLJMm+EUzSpjpPn18knctmSiKaHnalg0tEAEnBdRN5BJyJbw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cIelzpufYg9nItQp7ba1nwJVA5XICTgXKeIOBei7J3M=;
 b=n1oIgmZHXaDKZSu1EiExa6c6mjOGNYKkp/vAhHQpqUGymmD3gKovvRwbc5p3mv2y4hoLsY4NiBg7CJuvUa9aLeYVTqCxBqN/KMt6BUDgVuYtC2rEAsisaKlgZ0bq0XkRCsPG8tT/eSaDxHHP4S4EK2ymP2EM0q4LbMOb0tO2nQLRRIExnL9gV0pvHhuDPqrdCXu18AVwcnvAmbfaL7eingtAUQ9++2sg/ojd5Y53uVWKbJ/mWRTeXzBc4GWdXFknWk+Rri/fUSCePQQDZHVI8e+Czr/DCowUidk0I6B7IvLZYwh9uCg9JZ6VKogO0ojIZOiqk/mDUJ3WDbZbs0HmGA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=cIelzpufYg9nItQp7ba1nwJVA5XICTgXKeIOBei7J3M=;
 b=sksveIqHgs5vBXyFnrHwUM6bpQi15a7lDHmF3+4fdyZQSjItT0dnUkqXWg6ed730mvb6SsvFMw+AheNilAiwirW+ChbIn++s1FrXqeRj0ZWvK1tKetf/rQ7pUr9hoLITBLPYgjXM17HPIOvFgjxdkenZEEUlsOG42GVb7BKP5/8=
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	<xen-devel@lists.xenproject.org>
CC: Daniel De Graaf <dgdegra@tycho.nsa.gov>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-4-dpsmith@apertussolutions.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v2 03/10] xsm: remove the ability to disable flask
Message-ID: <d7b3baaf-15b2-d991-a380-9524ad37a118@citrix.com>
Date: Tue, 13 Jul 2021 00:22:01 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-4-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0400.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:189::9) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2f1b743b-5b73-4e99-26a1-08d9458bddfc
X-MS-TrafficTypeDiagnostic: BY5PR03MB5282:
X-Microsoft-Antispam-PRVS: <BY5PR03MB52822E5E1EE9BCE51AC8CD08BA159@BY5PR03MB5282.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: OvaOdbmlmDGGxFmxyEHABFkKuRjCDs3uAwcM9pCGExeOxMWkwh+v8Mck/+vf4RmS78G0Bgxd8VTLSP+WCOW1DbPNIGrRGBSrVz6Xo5NzZLhNO9vlYxJg5IiBd9viFJpWGEtt91NMyMwD4bdV5iXYyxC+SJQl0K1PF+q6Ut677jcZ5vibXKUUyOXZdM/EPxY8UJ8YQuTFWVxOJEn5Hknii301+A1t8SO2IGxTWXRnBguhsVC3B0f+Gtb4cI5sNumuoV17Aqy1cWTw1NvTdevOLn/w7o8AQNveaOAf4bzKTOsJay6XNHbJPKE2aMSO+bhB/0LdLGTFfrnzh2cgsH78ENx7gGG8mscwGNzqC3b+EuvrH8vEjzp7XFipnu8sxm1CGdWYzfqc4Np1IeSsnTaRUAC6MtqjFNiFHGtgqYqTgHCWMU7ChnWAGetsKhr/fJuKOAshBiaH6lvTuYCSKCBBZsWw4uh8XtHSL16esfhJ+yrA6aPBvM9/iUrNkg5/x1me1NCv+QgkSTyQmk/IR5wSFFtbG8OLkrhamzTJApSlM953Cb06vTNYcpXqYmb93Bxv1MqkxB1VfY//TOgruf6//3vzLsuMoDzdi6HElUyn8wG9eoZvgr+p8BH3pbvILkznxuVU8zICOCX54g4doGoWCvNjrAi/sWEnO1lmVzcfP8H9ZJVLQsq5/O0CounkDMOFB3P644j+L3zIvfJ8e7lNFrjoLnXhHWlTd6PZgmtL5vI=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(136003)(39860400002)(366004)(396003)(376002)(4326008)(6666004)(86362001)(31696002)(478600001)(8676002)(31686004)(8936002)(4744005)(66946007)(5660300002)(66556008)(66476007)(38100700002)(16576012)(53546011)(316002)(186003)(26005)(83380400001)(6486002)(2906002)(956004)(36756003)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?akECqqtXgCAjTUh/t3h36RkV/x6PvzYc5zqN+7c?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 2f1b743b-5b73-4e99-26a1-08d9458bddfc
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 23:22:07.8785
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: kjoAkTtMFF5fWDtNijwxBx9JlI6//tfsf6MvRuq3D5y0+RpMs3ooaxK13VDXZCXdAZGn3zJlzrW4aey7FgXQWnH3PavFYmIXf1DfvsoD2NE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5282
X-OriginatorOrg: citrix.com

T24gMTIvMDcvMjAyMSAyMTozMiwgRGFuaWVsIFAuIFNtaXRoIHdyb3RlOgo+IFRoZSBmbGFzayBY
U00gbW9kdWxlIHByb3ZpZGVkIHRoZSBhYmlsaXR5IHRvIHN3aXRjaCBmcm9tIGZsYXNrIGJhY2sg
dG8KPiB0aGUgZHVtbXkgWFNNIG1vZHVsZSBkdXJpbmcgcnVudGltZS4gV2l0aCB0aGlzIHJlbW92
YWwgdGhlIG9ubHkgd2F5IHRvCj4gc3dpdGNoIGJldHdlZW4gWFNNIG1vZHVsZXMgaXMgYXQgYm9v
dCB0aW1lLgo+Cj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIFAuIFNtaXRoIDxkcHNtaXRoQGFwZXJ0
dXNzb2x1dGlvbnMuY29tPgoKVGhpcyBwYXRjaCB3YW50cyByZW9yZGVyaW5nIGFoZWFkIG9mICJ4
c206IHJlZmFjdG9yIHhzbV9vcHMgaGFuZGxpbmciCndoaWNoIHdpbGwgcmVkdWNlIHRoZSBjaHVy
biBpbiB0aGF0IHBhdGNoLgoKSW4gYWRkaXRpb24sIHlvdSB3YW50OgoKZGlmZiAtLWdpdCBhL3hl
bi9pbmNsdWRlL3B1YmxpYy94c20vZmxhc2tfb3AuaApiL3hlbi9pbmNsdWRlL3B1YmxpYy94c20v
Zmxhc2tfb3AuaAppbmRleCAxNmFmN2JjMjJmNzUuLmI0MWRkNmRhYzg5NCAxMDA2NDQKLS0tIGEv
eGVuL2luY2x1ZGUvcHVibGljL3hzbS9mbGFza19vcC5oCisrKyBiL3hlbi9pbmNsdWRlL3B1Ymxp
Yy94c20vZmxhc2tfb3AuaApAQCAtMTg4LDcgKzE4OCw3IEBAIHN0cnVjdCB4ZW5fZmxhc2tfb3Ag
ewrCoCNkZWZpbmUgRkxBU0tfU0VUQk9PTMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEyCsKgI2RlZmlu
ZSBGTEFTS19DT01NSVRCT09MU8KgwqDCoMKgwqDCoCAxMwrCoCNkZWZpbmUgRkxBU0tfTUxTwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxNAotI2RlZmluZSBGTEFTS19ESVNBQkxFwqDCoMKg
wqDCoMKgwqDCoMKgwqAgMTUKKyNkZWZpbmUgRkxBU0tfRElTQUJMRcKgwqDCoMKgwqDCoMKgwqDC
oMKgIDE1IC8qIE5vIGxvbmdlciBpbXBsZW1lbnRlZCAqLwrCoCNkZWZpbmUgRkxBU0tfR0VUQVZD
X1RIUkVTSE9MRMKgIDE2CsKgI2RlZmluZSBGTEFTS19TRVRBVkNfVEhSRVNIT0xEwqAgMTcKwqAj
ZGVmaW5lIEZMQVNLX0FWQ19IQVNIU1RBVFPCoMKgwqDCoCAxOAoKdG8gbWF0Y2ggdGhlIHJlbW92
YWwgb2YgRkxBU0tfVVNFUiBpbiBjL3MgNTU5ZjQzOWJmYTNiZgoKfkFuZHJldwo=


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:39:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:39:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154897.286071 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35WL-0001hM-P5; Mon, 12 Jul 2021 23:39:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154897.286071; Mon, 12 Jul 2021 23:39:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35WL-0001hF-M5; Mon, 12 Jul 2021 23:39:29 +0000
Received: by outflank-mailman (input) for mailman id 154897;
 Mon, 12 Jul 2021 23:39:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m35WK-0001h9-0U
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 23:39:28 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 864b2797-7ace-415c-825a-d1d7bfcaec71;
 Mon, 12 Jul 2021 23:39:25 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 864b2797-7ace-415c-825a-d1d7bfcaec71
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626133165;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=pO8fkT3vopgEnIlBAh9Iq7UJnuaOFq5Rjcyjh7/BjEs=;
  b=Mj1rzrD47Zrh9s+CDmVE+k+gWRdLHr0YOhh6ozR7AC5EDN+S+kcfHEcH
   owzvCmN2A+9WUTnspt0CZy8m5cpD177Fwl2HzxNCXkgnmKMSGB/jzeydr
   GozOeYZXUq51mwtNZMmmO1ZW8u5ZgAa9ME/0ewAdvbUgqcVut89KMhods
   o=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: PBGlFF5phMbRjvvph/nD9WETrimkuo6e2K0kGE/+8Hy24G8ZEEeIlPj1denGVSlZPKXCSY5eud
 5/iZ+2liuixxFbuIB5ajQt02REQ/zFh1sMjmZcVUNSOxZ+vp1hipK9H43Gj8hfnn8h5GcQd66R
 m6wxk8/6dT4KMFFmevwJqroeQUmqELLN1BQIO3ss3+3NbetvLu6F07PckjqI0Z+eCjoIKc0V2w
 c622RRkZeLGXAtC2las08s8CpyTGEa+KbqYzeqhUdWDwz+1x9xO3PR9HwbcX+2BTG7n47+jHku
 Q2Q=
X-SBRS: 5.1
X-MesageID: 48172094
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:AuU7KKMkQEUiNcBcTzT155DYdb4zR+YMi2TDiHofdfUFSKClfp
 6V8cjztSWUtN4QMEtQ/OxoS5PwPk80kqQFnbX5XI3SITUO3VHHEGgM1/qb/9SNIVyYygcZ79
 YbT0EcMqyBMbEZt7eC3ODQKb9Jq7PmgcPY99s2jU0dKT2CA5sQnjuRYTzrdHGeKjM2Z6bRWK
 Dsnfau8FGbCAoqh4mAdzQ4dtmGg+eOuIPtYBYACRJiwA6SjQmw4Lq/NxSDxB8RXx5G3L9nqA
 H+4kPEz5Tml8v+5g7X1mfV4ZgTsNz9yuFbDMjJrsQOMD3jhiuheYwkcbyfuzIepv2p9T8R4Z
 XxiiZlG/42x2Laf2mzrxeo8RLnyiwS53jrzkLdqWf/oOTiLQhKS/ZptMZ8SF/0+kAgtNZz3O
 ZgxGSCradaChvGgWDU+8XIbRd3jUC5yEBS0NL7t0YvE7f2VYUh6LD2pChuYdM99WPBmc4a+d
 BVfYLhDK08SyLcU5ix1VMfs+BFXRwIb1+7qwY5y4qoOgNt7QREJn0jtYUid0c7hecAoqZ/lp
 P524RT5fpzp5wtHOhA7Nloe7rANoWKe2OUDF6v
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="48172094"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Xm75UGVNnSqrTOmdscdNuZnGFU5CLILrKu78w+PKWOUEl0/3XIAGM3okasWwhL1Swn18M+O96UTDsQg76Rm68xKGB9yJgijWR/uAAfGJKvHkUVq8YlUEj7WwIFA4T92r28r+iSWHq1COpRJzyUMFm0c/yvs+d67d95fMQ6SjBHyqPia+G2+3jheU9LNgFNwbE3XaZBRIkFZYUJOgIY9reTzX4WK5hAPXkwpw0GV9W+dUzjrlUM6KBv3e9Fqb+tgsz+7+A/4G3DWhfT4Plsr/phk5nM5JpOwJqDIKukJtV7EnZ4IcuLIWekWoAz1Kq+lycXK+HwZAlg4TVXOmf3HnRA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lgPcwIi4Fw0krICkUzQ1EJQMUmXCnim7ofrU9aZ3b0g=;
 b=dRtDPhk4UUQSREk5O5CAiPTK8mjC1I2hSyZF9UKGCjF+QLABkoBctuH7GVC1dFzDUl38UzpjUgPxUKx+eBNVl/oAHEPxZGoiByD4CwF3ZFWg7hFEfFFPMERLI4gng9VJv5yr48z5VK+jKRy9YUgm0au0AW3lgmOSEaZUwh534NMWD1pWVIb5Twcnwf9fXU2fbxW7sjkFIJTEXUK8kU9TDw3SX2ZoUbVfGidbATLL7acKxwSLBk6Beyu/EC69jc0XShktlphF4U50dJz2zTlk8dCLRfI7jL3S0oSB7ghRZU1OnW7uhuf4t7/5iVnPjCn+Gd/SG8aD1snOkmYZtB8/PQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lgPcwIi4Fw0krICkUzQ1EJQMUmXCnim7ofrU9aZ3b0g=;
 b=bljuIuV7IO5ThCREZD78633fpXl5n/5ypo/7RAKQoTbpQ1Pla9GduxSlo8EIUVQHUdTFRjHRaept0mSCbHcZJdMGfoY9DMRCQUL81PuYTuFiwourjnR1LKtzH6bQEn3atP5BMexbPqCq6SpiQs/sYjt+gJwwy8Idp14/3z5J0rE=
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	<xen-devel@lists.xenproject.org>
CC: Daniel De Graaf <dgdegra@tycho.nsa.gov>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-3-dpsmith@apertussolutions.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v2 02/10] xsm: refactor xsm_ops handling
Message-ID: <1638ecbe-59a2-1ef1-f18e-dc63e1740168@citrix.com>
Date: Tue, 13 Jul 2021 00:39:14 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-3-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0160.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:188::21) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1c9dfeec-f93a-4032-1ca6-08d9458e466a
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6239:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB6239B278BEEB283128AC8D99BA159@SJ0PR03MB6239.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: v3PhMr9vfVdDo9CP1crDKV3m01Ck+TgVRoiTMbDV7vHOcqaRXNFKPVpXhgyNRihKm+7ZGrAdDtxiQSUFr3w2Kg26N3+qxla1xWxIK3COMwCSQjcgqJdMYaen9scWVRlECXjeTfR4EQz4qm1Fw7SR1olEJs9mLHTPlXOe7MdIBAvyn4H5hjEMtOGrczII89mSE3/kD0STqZXm0j0uEqVp0Lhzy2HKk2znLQF0rLplO55EWt7nvU/VCI2mLHiqnUodVv7DNWpZu1xFMo6o50Xcd5CYXWofua5BgecAk349+AIUJgbam1LKXK/Yy0qaBt+/CF3BQjHfc8bksD3NnDw1CnuPpuvXGuoPTP+kJPln3qxdkH5kjrLsvSYDlD7DKGjXLKltn1WkpFSoAfF0LhKx6TuALEbO9CWHGmMUS/JKlKjf9HbuCAx/OzcUdgmFf5JUb0mFAE9o29iLFSbKyn9cmJ8uByHMZLWeON3qycgy/njGmxdoJN1K2JyOf9sNmqby+LoEnlhft1wHz0sorlLJ9Yv3XVcbk4Mj2joOHyBqMJ7Ue6k1B4+AWYuWEdLpsKUCpqTzJJS2lB+O9VtnvGBGQuuVPBhKVV8NLH9vRH1VzsGW/jcG4RdEQ9VM7tBt2wzJ6BTKjpBNlUC7lsu0KyBpei1gsSm8U8rc6LUD7F4ODpFA6sJtHZBcKBKLJFbIXTXpsm5DDco+JHyFz69ZRlTnML+RtxKTI9M0VlvHf7cBCgVoHZYYTd4HrW3BXYRpKAlP
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(396003)(136003)(39860400002)(366004)(346002)(316002)(38100700002)(16576012)(53546011)(478600001)(956004)(8936002)(6486002)(31696002)(66556008)(26005)(2906002)(2616005)(66476007)(8676002)(86362001)(6666004)(4326008)(66946007)(186003)(36756003)(31686004)(5660300002)(83380400001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 1c9dfeec-f93a-4032-1ca6-08d9458e466a
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 23:39:22.1036
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: bENckx69dWu8waNei2BSxWifwrIxa58W9g4zz9nDiZitkfb/IUvPzJky1hm6q9XWpXnxfGrh9GPoKT8TFxf2BgfukP3fOdNjUApzYDb5WoI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6239
X-OriginatorOrg: citrix.com

On 12/07/2021 21:32, Daniel P. Smith wrote:
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index ad3cddbf7d..a8805f514b 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -747,16 +747,14 @@ extern int xsm_dt_policy_init(void **policy_buffer,=
 size_t *policy_size);
>  extern bool has_xsm_magic(paddr_t);
>  #endif
> =20
> -extern int register_xsm(struct xsm_operations *ops);
> -
> -extern struct xsm_operations dummy_xsm_ops;
>  extern void xsm_fixup_ops(struct xsm_operations *ops);
> =20
>  #ifdef CONFIG_XSM_FLASK
> -extern void flask_init(const void *policy_buffer, size_t policy_size);
> +extern struct xsm_operations *flask_init(const void *policy_buffer, size=
_t policy_size);
>  #else
> -static inline void flask_init(const void *policy_buffer, size_t policy_s=
ize)
> +static inline struct xsm_operations *flask_init(const void *policy_buffe=
r, size_t policy_size)
>  {
> +    return NULL;
>  }
>  #endif

As you touch almost every current user of xsm_operations and introduce
quite a few more, can I recommend taking the opportunity to shorten the
name to struct xsm_ops.

> diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
> index 01e52138a1..32e079d676 100644
> --- a/xen/xsm/flask/flask_op.c
> +++ b/xen/xsm/flask/flask_op.c
> @@ -226,6 +226,7 @@ static int flask_security_sid(struct xen_flask_sid_co=
ntext *arg)
>  static int flask_disable(void)
>  {
>      static int flask_disabled =3D 0;
> +    struct xsm_operations default_ops;
> =20
>      if ( ss_initialized )
>      {
> @@ -244,7 +245,8 @@ static int flask_disable(void)
>      flask_disabled =3D 1;
> =20
>      /* Reset xsm_ops to the original module. */
> -    xsm_ops =3D &dummy_xsm_ops;
> +    xsm_fixup_ops(&default_ops);
> +    xsm_ops =3D default_ops;
> =20
>      return 0;
>  }

These two hunks will disappear when patch 3 is reordered with respect to
this one.

... which is good because you've just pointed xsm_ops at a
soon-to-be-out-of-scope local variable on the stack.

> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
> index f1a1217c98..a3a88aa8ed 100644
> --- a/xen/xsm/flask/hooks.c
> +++ b/xen/xsm/flask/hooks.c
> @@ -1883,7 +1883,8 @@ static struct xsm_operations flask_ops =3D {
>  #endif
>  };

flask and silo ops should become:

static const struct xsm_ops __initconst {flask,silo}_ops =3D {

as they're neither modified, nor needed after init, following this change.

> =20
> -void __init flask_init(const void *policy_buffer, size_t policy_size)
> +struct xsm_operations __init *flask_init(const void *policy_buffer,
> +					 size_t policy_size)

struct xsm_ops *__init flask_init(...)

Otherwise you've got the __init in the middle of the return type, and
some compilers are more picky than others.

> @@ -1923,6 +1921,9 @@ void __init flask_init(const void *policy_buffer, s=
ize_t policy_size)
>          printk(XENLOG_INFO "Flask:  Starting in enforcing mode.\n");
>      else
>          printk(XENLOG_INFO "Flask:  Starting in permissive mode.\n");
> +
> +    return &flask_ops;
> +

Stray newline.

>  }
> =20
>  /*
> diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c
> index fc2ca5cd2d..808350f122 100644
> --- a/xen/xsm/silo.c
> +++ b/xen/xsm/silo.c
> @@ -112,12 +112,11 @@ static struct xsm_operations silo_xsm_ops =3D {
>  #endif
>  };
> =20
> -void __init silo_init(void)
> +struct xsm_operations __init *silo_init(void)

Same here as with flask.

> diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
> index 5eab21e1b1..7265f742e9 100644
> --- a/xen/xsm/xsm_core.c
> +++ b/xen/xsm/xsm_core.c
> @@ -68,17 +76,10 @@ static int __init parse_xsm_param(const char *s)
>  }
>  custom_param("xsm", parse_xsm_param);
> =20
> -static inline int verify(struct xsm_operations *ops)
> -{
> -    /* verify the security_operations structure exists */
> -    if ( !ops )
> -        return -EINVAL;
> -    xsm_fixup_ops(ops);
> -    return 0;
> -}
> -
>  static int __init xsm_core_init(const void *policy_buffer, size_t policy=
_size)
>  {
> +	struct xsm_operations *mod_ops;
> +

Hard tabs, and later in this function.=C2=A0 Also, how about just 'ops' for
the local variable name?

> @@ -113,6 +124,17 @@ static int __init xsm_core_init(const void *policy_b=
uffer, size_t policy_size)
>          break;
>      }
> =20
> +    /*
> +     * This handles three cases,
> +     *   - dummy policy module was selected
> +     *   - a policy module  does not provide all handlers

Stray double space.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:45:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:45:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154903.286082 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35bi-00034W-DH; Mon, 12 Jul 2021 23:45:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154903.286082; Mon, 12 Jul 2021 23:45:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35bi-00034O-9v; Mon, 12 Jul 2021 23:45:02 +0000
Received: by outflank-mailman (input) for mailman id 154903;
 Mon, 12 Jul 2021 23:45:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m35bg-00034I-7L
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 23:45:00 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 679e497e-39b3-449d-a1fc-3ac381064b85;
 Mon, 12 Jul 2021 23:44:58 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 679e497e-39b3-449d-a1fc-3ac381064b85
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626133498;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=F82zOYAtgHECIpCZvh/BkXZhYe6/goJUX338nclORpw=;
  b=h+76dd7siBIaSVVVgm+umJCM2r83ARvNroyPUiDD0TWfeVB6RpjrDOI3
   xPdZfn3ArjgEFaoTnTc+Bb7KVU3R7Fq0tryaG7u7X29RIu+UJDBiaN6kP
   I7u5dJ01duSqNolVkl40h5vrR4NcPDm3G4tkBl3VSMOppvCR759TLlgMq
   8=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: tot671/bkt9g07MfKfalv8s6aU4YYc9ncDJQyuGHm93GQx3n4CQ/jiDz/GVLKTrJp5KjpKosYl
 a3SCuhTdDwrfIo7vBbiTl9nU4kA1zbOAd3yiFC0QB8dO2am7VsOiiSt1NaOBp+Et7MRtUzzF3f
 RKDeFww6XgzZwyp5XyYwPY609+dXk6uux6IUOcEQj3Xu9yjSHn9yWdFd9feAdrpSe6Em21eh41
 kavsN2BKt1G8+JNyuGQ3VLAHwdm25mIKMuuFYlPsNI9Lenvs+P/CGJschfCLKrkzifTjOKV0fE
 pHA=
X-SBRS: 5.1
X-MesageID: 47810340
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:73F3BaHiCW2XteSspLqFH5HXdLJyesId70hD6qkvc3Jom52j+P
 xGws526faVslYssHFJo6HmBEDyewKjyXcT2/hvAV7CZnibhILMFuBfBOTZskbd8kHFh5dgPO
 JbAtVD4b7LfCtHZKTBkXGF+r8bqbHtms3Y5pa9vgJQpENRGsddBm9Ce3am+yZNNWx77PQCZf
 6hD4Z81kCdkSN9VLXLOpBJZZmOm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjMTSSlGz7sO+X
 XM11WR3NTsj9iLjjvnk0PD5ZVfn9XsjvNFGcy3k8AQbhHhkByhaohNU6CL+Bo1vOaswlA3l8
 SkmWZuA+1Dr1fqOk2lqxrk3AftlBw07WX59FOeiXz/5eTkWTMTEaN69MFkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l3CzvWEpnYco/jxiuLMlGfpsRLEkjQdo+M9qJlO81GlnKp
 guMCjk3ocVTbvABEqp+FWGqbeXLwYO9hTveDlIhiXa6UkOoJlD9Tpu+CUopAZJyHsMcegx2w
 36CNUfqFhvdL5dUUsvPpZNfSOIYla9CC4kdljieWjaKA==
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="47810340"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=G+mo4vP8ljWzCc+o9F3Ghdp6R4u8BxUDmlumY4A/fwXByhv9TJqq8QRrpviv/SiU1h14qCZD/RgCxw2Lox50rX+qCreCSlqnUXOhMlQNMNYZ7rmh5qkxco3+SPE47FcsSsN+sYitXe7ylAO9AeqDNqhnsVZT0Z96vtvLY2mu7fyF8wk8u+nnLL2hkw9TISuA+G2qsNo4hPGgU1G47IC4uRqJfpnSmvqE7T+vWdpURNu2SP8Ph5aimHulIFZ+aFi3+Ya8Z9LZWBjkEnOiDRHkkaafjdWqPjaj3KtieZ0e7kfXl8clG21k96doHadaBeyElaZrpEBeX8FH/Y8XMI+Kzg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DeEPdXEhoBd2G9OcuYNEeCOJ7z60/R4/DkbrKBc9/V8=;
 b=mVm2lfYBnNhYTcp4uKgNNCaemku53LoajQWYXa+noGy3sZqkOa6RXDoZWFJrGU+RmeLE+cFC64johnL+eQgZj8lfFUBVEle6sjsv3JRN03ckgXL1tH+GJ1P4ky4cmUAhADxp9af1MP3mRRVp5CnMWLfnyPj4IYEZxoTfvcJnTaHk3SelBz+xO8+mT40GelbeRJ+ysCwbm506p+lqoNOG3KmKNLgTxyAuLzEVqCkaMwarejPa78DpfMcNGVbyyGOKsq209XFr2XbYQEe3XXFw/uaUEHRFwr2+Xq7KCOstsX5eP4NLRp0AO4hwPpsxS/3/K7bFpeTx9ergCo3C9Xi+7A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DeEPdXEhoBd2G9OcuYNEeCOJ7z60/R4/DkbrKBc9/V8=;
 b=HAzqp+slxiAVfEi520YxnZGqcAWNUYiRePzPlpjjEp8v+163JXrKeOgclWLEbLENcju0z3GqIUD4K2koCRtU598ZkCWcn0vYgqG7n5aIH7bcpGrq6OCwHEzPLG8nvNljMyqJEcWmz8xD9Uzg4Fehr8b9wfCdrpgB5wqRMkugRLE=
Subject: Re: [PATCH v2 04/10] xsm: convert xsm_ops hook calls to alternative
 call
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	<xen-devel@lists.xenproject.org>
CC: Daniel De Graaf <dgdegra@tycho.nsa.gov>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-5-dpsmith@apertussolutions.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <be7899b7-aa4b-91f5-76ff-416f25f16d68@citrix.com>
Date: Tue, 13 Jul 2021 00:44:49 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-5-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0142.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:9f::34) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d813f579-5d16-4994-5b42-08d9458f0d25
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5454:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB545465F9DF1CE5C598241421BA159@SJ0PR03MB5454.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1051;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: L0ViihyEW4YiAXxpBjgRd+1y/WXZb7C8atDkhbQSXHb1il3/JzUlYHFbjNUjtTLzWBogfSB2zW7u1cZ3NJtyI5isscbbXvf0YdvWwQVGfCCdkKvFbDrx81Zb4regosi8zuQ8V9hN0oZnXhdgVxedI75SWtcAAG0UGVx7wjjJgTZijXuQcHDQnTntHzrf8ntGdYVms8iXxwZYHOWAwvq5fJRuHLZz/1kI/YZaiYnI3TRQYhUfgctspq5ekGT9EumSoSrt4Zpo+0UC1I0IxoHJgLI9KqJQy00QVn4LSroULZRsDadfUnbf7yu+J9is5O1h4lvr5ff99ZMl7Pt8vooK/LEtb7TFpkuHBUbJ7cM6t2OaWKu1eSF1B9COoqoHNiEAHDHuLc9gzC57E7a5ICSKo0XrMUYj1ufiBX8HSleC/xrN125tieNRGQMliZtgHMHmz/z5+2V6QDo93kE3v4NbSTWWLKr8GrXIQZeb6/4HbEG8NhbBXF9u5/+k4mDWSt7fQ/pamIReRkYbQpdKMx3VBEvb3LiIGvvlec2OmAuJjvs2Guhh4Chs3XpFbI0lqoCVlsZJqCJM0K870VQbgmw+yX28P2wEmvp3Q9paelGdj1K27CI5HZBqWGhz8effhIwD+lEYXMtTC8JlmSG3CSA1PXkwM00L0goA8Gx4qLYgFVzO6nIgrFkDhSmkQyU/S3oqiy7eBDn29JQ3a9VHm1MCUnxiGbFmH3dP4zQVc4d9YTM=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(346002)(396003)(366004)(376002)(83380400001)(8676002)(4326008)(5660300002)(38100700002)(478600001)(2616005)(86362001)(6666004)(31686004)(31696002)(53546011)(26005)(2906002)(66476007)(66556008)(186003)(4744005)(316002)(8936002)(16576012)(6486002)(66946007)(956004)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?4pAEjW6Ef/+ZeWZv8PqSSlfPt1SpQqYP80ii7CM?=
X-MS-Exchange-CrossTenant-Network-Message-Id: d813f579-5d16-4994-5b42-08d9458f0d25
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 23:44:55.5016
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: +WmvIDXFVZzDF21zeyO7osWkY2omsbJDnUbx1HBrT+SapahMg4eIY3XV6ENAeF27ZKCC/oqGIrSy7Ssla63cLPnslJ8zhZmJ3Staatx5+UE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5454
X-OriginatorOrg: citrix.com

On 12/07/2021 21:32, Daniel P. Smith wrote:
> To reduce retpolines convert all the pointer function calls of the
> xsm_ops hooks over to the alternative_call infrastructure.
>
> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
> ---
>  xen/include/xsm/xsm.h | 195 +++++++++++++++++++++---------------------
>  1 file changed, 99 insertions(+), 96 deletions(-)
>
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index a8805f514b..a39b5dc42f 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -15,6 +15,9 @@
>  #ifndef __XSM_H__
>  #define __XSM_H__
>  
> +#ifdef CONFIG_XSM
> +#include <xen/alternative-call.h>
> +#endif

This guard needs dropping to fix the build on ARM.

Otherwise, Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:48:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:48:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154910.286093 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35fR-0003qh-2c; Mon, 12 Jul 2021 23:48:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154910.286093; Mon, 12 Jul 2021 23:48:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35fQ-0003qa-Ui; Mon, 12 Jul 2021 23:48:52 +0000
Received: by outflank-mailman (input) for mailman id 154910;
 Mon, 12 Jul 2021 23:48:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m35fP-0003qU-Vw
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 23:48:52 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b5231a08-e36b-11eb-870f-12813bfff9fa;
 Mon, 12 Jul 2021 23:48:51 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b5231a08-e36b-11eb-870f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626133731;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=ZDT1nEqRbZnUvCFs3RdjtBs+jIlcpKvZMrvsxYuV0fQ=;
  b=MmQQ5TvUeGs+hm0MUGmF6xrXjjm4MXROk/mofKnopVvWgtDyoXsiOxvv
   B67iuJBuo1kXdUcyr1mcl+fpluUcj0Cxyz2u70HXlzu8QAvhy7tVtMJMy
   DAWB+0QRV496ZY4PE9F6AUHCuueZqo98whtp/yanTd61R3XPEbnkA8p73
   k=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 0CZqER92cZ19JpEBI9UM9FDTBIu9q/+FvgSOtvE7NncPmaY1EkUezuJkfFTGtcJ0mIqDTfYJEA
 XSWr5J61uZL7YxqxaCUmOuriDL0j5SF7V6/iNzuSZNYL9EN/sETUGoLrcMhMfhSIYiKOO3/EyX
 OmbCqcPxv83JA4VNT29RRj/4ZP8A6igJg58mpXDcd6C837ws7MkD9s5YbUnjiWynGoyN2phS5M
 wIpMls3xklbg9BZQ0Wo9vj5zfxzyRRETD9QGtTyH4bAIDJhtQ7ib5UBHtzHnmmDcPsmuDhhZKL
 MRE=
X-SBRS: 5.1
X-MesageID: 48118809
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:j/3CQ6rkQq9rcNx/D3TrML8aV5rveYIsimQD101hICG9Evb0qy
 nOpoV/6faQslwssR4b9uxoVJPvfZq+z+8W3WByB9eftWDd0QPFEGgL1+DfKlbbak7DH4BmtJ
 uJc8JFeafN5VoRt7eG3OFveexQvOVu88qT9JjjJ28Gd3APV0n5hT0JcjpyFCdNNW57LKt8Lr
 WwzOxdqQGtfHwGB/7LfUXsD4D41rv2fIuNW29+OyIa
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="48118809"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JvzJP9Gxtj8AjGWO4B46CtIDTQ/KjsZgs1ZZAgz6ZItHoxYke/afEuiXImRZzr40BimUMEILYwMXmWboF2B55n2myOaGpYkoECXReQSRzNUfSfTI8o6rQmGhRGIl8gI5+AofdbSWp6T0YaUErbNSWN4teYpSILzFvKjeFgbOpbChvbVZ83lMsbNkrfHC2MvNu2GCH8RSxcaOpnZIhor2Hy7igPGO0/5NpYtTQDYH7b8aSSZRTZ2i6dEMq7kZfDxilfxeRcKErBEfVk2PxYP4I5fcglvstE6oA1aDmQVx/gAKhgAOnyMVpuBgjRH6SBV861okQ8W2yeHVawIT2wQBTA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qin92F4bC2RxTlzUZNheYyJ0+TFTswG2B7/ZNScveJ0=;
 b=mPhJGJmEdcUTlBNOj3l+KS+CHcEj4dmWXaVJG1E+EmpmG+GamO+gTygiIdA1X1r2X9eB9Tpnp+jWKZqXVSFOhqaiLyx+Vzm/jBjBOXVeUYkmGSakssBZlGOUYmcGcYaVOB9Lye3v6gIHBSLoSfkJPSx7AchnnE4GjssXgDQUxc5IriwHTv5vuMXm0y/FdFEt18+M5oAAuTkFMXhaWAOANDfGT1JA0h2P+HaYvhI38jA2q045Zjo+x8nC4q4uxR3s8Sh4cF4T+w1+y0pADsxNBUJadEVHeAJS+b2/qNmyXdyxI8bL5lnRzsWYk4IwehgVqbZcCpkfY5d8Tn6hupfZyg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qin92F4bC2RxTlzUZNheYyJ0+TFTswG2B7/ZNScveJ0=;
 b=vPsQ9GiaWW3bErV3HG8uM4ksW8aShmrXxr3A9eX1R7bYtj89PqVNTDQ/ZLyeA/mHhzrXfQpPQ+nE7ogk3RSi/ZpddonLKtVf62iKH1vnseThx0YwO1yKQJMwKzd484eVQ3oaMDx5fp1pFM4qX9RVzrOO4HcUGF/pVDYwcqHauqc=
Subject: Re: [PATCH v2 01/10] xen: Implement xen/alternative-call.h for use in
 common code
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>, Wei Liu <wl@xen.org>,
	<xen-devel@lists.xenproject.org>
CC: Jan Beulich <jbeulich@suse.com>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>, George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Julien Grall <julien@xen.org>, Stefano Stabellini
	<sstabellini@kernel.org>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-2-dpsmith@apertussolutions.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <2a794038-f4f5-1525-5af8-d89b687a8043@citrix.com>
Date: Tue, 13 Jul 2021 00:48:37 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-2-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0079.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:8::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 682c7b3d-83f8-4f60-86fd-08d9458f95c5
X-MS-TrafficTypeDiagnostic: BYAPR03MB3669:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB36691267897FBDC41606A2E8BA159@BYAPR03MB3669.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 7rX659tChKy8/j86SZokQ8WsiWgk4h0z+tne+fBTwKwnwMNvKDaxJ+9R1CZGAJuivR4jZVxjbozWbAWwMFSDGydUMJIq03NPl5K5s2a5rLp5xwlhQigTVhEwMUwyslivVon2PaTo0v8ufGkrrlzgo71swbow2bprZWmO8ZPC1kkVPNYH7nkIr4O/pd/m41mD8EqEPERouccDUDCNcEI4cxxj8NHI3BpmcIHaAcXbc7a81gxw3T8O5zfYBiZXJmXVu1rs8CvS490kZLP+IMdM6bdOXpppozwkNtdnu99TJW3DDfK2UDF1fSRG4uHCFjvMCYReRKBMZn8Ls9gn7dbSCPx1tYj0sbZSyM2juZWu+RqNfoX5VRNaHZHHeyn330nU6ipP5LnUCr39P6is75kfxCwdmNDEfPq1dicIpvN6f11LYuoGL/+LpoFWNNsmCItag0/BOGcPeD2KOiZlQT1FDhN8W5vSMCeMNSZszyBOC9GO5Uy1uneVHwDIL++oBTXD3TOxxmTa4SQDmz7qGe/JYWirwsCVAfgR7sffArHOp4P396TJYK+2PDrvZOV6idoHSKOr7pwL9s7BfE/lwqex9GvSZeuqdnW4tIqIEnDLoPBrWH6jvyjEHskPlNouy6PCXnc3+xgTJTDt09kz7w9MOPcZCkyrhh4YYQUhRahRUrsUwAzsfNvsW6+g0U/84xASY+dprGQyB9BjqDvP/mLu2fZc62x4rZAk6UIAkvi/2H8=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(376002)(346002)(396003)(39860400002)(38100700002)(478600001)(86362001)(8676002)(316002)(31686004)(66556008)(66476007)(4326008)(2906002)(110136005)(6486002)(66946007)(54906003)(2616005)(26005)(956004)(36756003)(31696002)(5660300002)(53546011)(8936002)(186003)(16576012)(6666004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 682c7b3d-83f8-4f60-86fd-08d9458f95c5
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 23:48:44.8444
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: pGjcBwyr2PUxzozc+J4pIbCD2gpNWxHVLkpb1AAkecSsAde1bVwwVIKn4qt7N+B4bx2WRK8fOhpzYHX7057j8+s2SyIlhSYcdAoUFrRhZyI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3669
X-OriginatorOrg: citrix.com

On 12/07/2021 21:32, Daniel P. Smith wrote:
> diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alternative-call.h
> new file mode 100644
> index 0000000000..11d1c26068
> --- /dev/null
> +++ b/xen/include/xen/alternative-call.h
> @@ -0,0 +1,65 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef XEN_ALTERNATIVE_CALL
> +#define XEN_ALTERNATIVE_CALL
> +
> +/*
> + * Some subsystems in Xen may have multiple implementions, which can be
> + * resolved to a single implementation at boot time.  By default, this will
> + * result in the use of function pointers.
> + *
> + * Some architectures may have mechanisms for dynamically modifying .text.
> + * Using this mechnaism, function pointers can be converted to direct calls
> + * which are typically more efficient at runtime.
> + *
> + * For architectures to support:
> + *
> + * - Implement alternative_{,v}call() in asm/alternative.h.  Code generation
> + *   requirements are to emit a function pointer call at build time, and stash
> + *   enough metadata to simplify the call at boot once the implementation has
> + *   been resolved.
> + * - Select ALTERNATIVE_CALL in Kconfig.
> + *
> + * To use:
> + *
> + * Consider the following simplified example.
> + *
> + *  1) struct foo_ops __alt_call_maybe_initdata ops;
> + *
> + *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops = { ... };
> + *     struct foo_ops __alt_call_maybe_initconst foo_b_ops = { ... };

It occurs to me after reviewing patch 2 that these want to be const
struct foo_ops __initconst ..., and there is no need for
__alt_call_maybe_initconst at all.

The only thing wanting a conditional annotation like this is the single
ops object, and it needs to be initdata (or hopefully ro_after_init in
the future).

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 12 23:53:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 12 Jul 2021 23:53:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154917.286106 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35jb-0005CP-K2; Mon, 12 Jul 2021 23:53:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154917.286106; Mon, 12 Jul 2021 23:53:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m35jb-0005CI-Gv; Mon, 12 Jul 2021 23:53:11 +0000
Received: by outflank-mailman (input) for mailman id 154917;
 Mon, 12 Jul 2021 23:53:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pbkG=ME=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m35ja-0005CC-Pc
 for xen-devel@lists.xenproject.org; Mon, 12 Jul 2021 23:53:10 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6818a19a-e6e9-48b0-bb9d-2498e63d99fb;
 Mon, 12 Jul 2021 23:53:09 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6818a19a-e6e9-48b0-bb9d-2498e63d99fb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626133989;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=UkqL6zHJ3SCgfJ274ZhKSZmHWvAVbXLTCX5GOxIG018=;
  b=Axh1MsvX+jZ47R7kqGOwFmS/gLIPp/hDPoLXP+Bi/8ppsLxhLh2FtKaV
   IUqxeeevnYJlvdZYCmlJf649gJ/tz3fMxeuJir9+d/R058NgJudITmrUu
   O8KzeBKpLek/oamT2Smhidh6FTbIVtr9ggg2WlSXKutmkNHJPzl6a8csS
   w=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: hw6WYGGxZPbfIjCO9AUg6jfyLXbV+sAhwm6HoprnQxPMu3BiXpeuePKlzpMcspC7WKCE0kM7LY
 x8rBQWfButEA3ATfEi32AEFvi7ceF5Yoju/ql6Fu7RMgKP5TxiSfvf4bfs7ccPVTge7ZZq6hdd
 CkXHCD2CplAwkeoeSTox8OHFWjw3YEm160IiPeizWr+DFCwRkhqjEJm8K8yF2iLB08opTaaakQ
 QsiT3iSdDFWSo2YQYNIE6wOw/7rT2QT1IXHF1pEeyEAlw+jd8yDhnwWbtiLpWuoQvWqkNr7KnW
 L6M=
X-SBRS: 5.1
X-MesageID: 48172651
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:w+X3uastIATg++8gtVT7aSzs7skCmoMji2hC6mlwRA09TyXGra
 +TdaUguSMc1gx9ZJhBo7G90KnpewK5yXcH2/hvAV7EZnibhILIFvAe0WKG+VPd8kLFh5ZgPM
 tbAs5D4ZjLfCJHZKXBkXmF+rQbsaC6GcmT7I+0pRcdLnAZV0gj1XYfNu/yKDwGeOAsP+taKH
 Pz3Lsjm9PtQwVtUiztbUN1IdQr6ue72K7OUFojPVoK+QOOhTSn5PrTFAWZ5A4XV3dqza05+W
 bIvgTl7uH72svLhCP05iv21dB7idHhwtxMCIiljdUUECzljkKNaJ56U7OPkTgpqKWE6Uoskv
 PLvxA8Vv4DpE/5TyWQm1/AygPg2DEh5zvJ0lmDm0bupsT/WXYTF9dBrZgxSGqb12MQ+PVHlI
 5b1WOQsJRaSTnamj7m2tTOXxZ20mKpvHsZl/IJhXA3a/pfVFZol/1bwKppKuZFIMqjg7pXV9
 WGTfuspcq+SGnqLUww5QJUsZqRth1ZJGb0fqAA0vblmAS+0koJlnfxaaQk7wE9HakGOu15Dt
 L/Q+xVfYF1P7orhJ1GdZA8qOuMeybwqEH3QS+vyWqOLtBPB5uKke+u3IkI
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="48172651"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KnAMUB6soGEHm30BA328/ayLAPFEbkuJQR4M5LpGCu85yAocWS4wIqc6P6/hgk3kE4PfvGzrJyFGrxYZOJlPhjJnMgwQVdXGHMKETeZEnf5FB7ZYdKkmlILuYeN59z7o1DI+dB1vfk+3uUG6h96yhMn/TUlJyDwb690tk6/lv3TPphK+VoLLhsyAqQRBTe/MAHgRpfmQ0OvXk+1T1rzvn/0h/giQZrY8IOWp0AS4LOD8BjA0LyYHetpqmj85g3IifF30gfZsetpQsz68KTiDOEBRJaJt5G/qit65slM/MjuEFMytH80gc7bNbrz7ENu0XJk9DL3PqfbMmjbUY2qsgw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=UkqL6zHJ3SCgfJ274ZhKSZmHWvAVbXLTCX5GOxIG018=;
 b=ccfDPwEFKWvh7Ncyy1UyftEVU/UHrzUGS6LWjAgels6PDOsau1iPhp6wklMqMnVeNSW45TPQkUNatHThFthFtO+ir1bemiO6uNp6tko9kRKS+F9Sr0Okb6vaOxJAHU06pBRWqsSdCeBOdclnneBvjPRZMA5rgQ6iF4s6PQSdNiJvGUN+o9NochrSv1rDXhuf+8oaze65EkOJzlAwsYRzIN4XAM0a/Vi455s/MMQkD4x6JVneqNtLixwfFociyuTPnua3T5jG97d3lwY/hdgQc+zr3ynFf2qQAzDIll+yxyz5X2uHPF0l8B+TuSVhQvUXM9ay3SBePCYHx5bkg/Vn+A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=UkqL6zHJ3SCgfJ274ZhKSZmHWvAVbXLTCX5GOxIG018=;
 b=FLY/G1sIMFRiYZVUh+YuslFW4piJ8+/NSKP9q/Jj1lsw8GU3+km5NMspkIpXGegdxigiQCzJajCoGNPj+QlJk8+lAVQvgBOyrPo2oJc2dnK97hiGRcdUIS9ok3Y8Hn8qHtmVIWyYbKByg+t2XsK1XT1JR6O8iNHWph8cQP5w99E=
Subject: Re: [PATCH v2 07/10] xsm: drop generic event channel labeling
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	<xen-devel@lists.xenproject.org>
CC: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-8-dpsmith@apertussolutions.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <223bef6d-dc64-8353-af8c-357637b88f4b@citrix.com>
Date: Tue, 13 Jul 2021 00:52:55 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-8-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0381.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18f::8) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d7b8d1b8-1d0d-4c70-cbd4-08d945902f8e
X-MS-TrafficTypeDiagnostic: BYAPR03MB3495:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB349578D268DC80EE937B6D85BA159@BYAPR03MB3495.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: ObSkpcxSZi+QEsfbMto9bPLT9dmmcnTizNSquJl+NvwBJ4GDB25RjlB/kIRAiTT+lyJoAKwwqmyjfAqxwNb5XDuyw0sGe3EGuNWv6FPrk1fYteJckXgMfKasB30sW+wW7KmwzUdMObkzV2pBBnkkILfj0jb0KgEltXYhdRvKMYqoLOUhkR03MBqnTAAOnl8NFnfm8Wuz6firXDojE4CmMVTwZgaB7nV0ZsmrLXBRfMHFoEMVPuTOrxAZXOvdwiUaqnLyuZ2jnIXuRou4F1iTam2sWbmz4ga1p8LKLjTXKGrLFBZi2qdXpaCCfBFqFOOG8Z8s1GiTI+RDb3b5r2uRTKOKCOkF5GmZPatdbEFAMijgZrbjvh7VBiOgdX6bPC8pScmBpX5fI5TK/sB5xeotnv+Dth08UjcOTTg/OjDgXg+Nv+DH5mmR/+uTla4fqOrGS1djAJO4PZaRVIuWa0odSrZdykdWoMfVMibp+48MPo6OdMgpDWDT2WeonqqfzuN5yI5y5fYCvcJr6u086F3zrASPFM+tck7m32x+PKG+FSHVWoGdLSx6wjsvmpt9ck6xBCc6JbtATe7K3dIATYoaJKploWUJmdSpZ5h3/1Xa/HasMCUqlDojp2m8AjJSQU62eXNliOfa7CzxUV3gOP53OBn51cP0gZCgkDA3s8AP3RQcSfVumotJKrEUDtQMeiI+96G1kYpjg7HB3TP2zodJM3XyX1LCwqslZUEvxnBePavHo5Vo6YEJZmsl9qpb20tfoAkI3iRls5HLDeZILyquCg==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(136003)(39860400002)(366004)(376002)(5660300002)(86362001)(186003)(53546011)(66476007)(66556008)(26005)(66946007)(36756003)(31686004)(31696002)(6486002)(83380400001)(16576012)(4326008)(6666004)(316002)(8676002)(478600001)(8936002)(956004)(2906002)(2616005)(38100700002)(54906003)(4744005)(41533002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: d7b8d1b8-1d0d-4c70-cbd4-08d945902f8e
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2021 23:53:02.6689
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: T8ho8eInd+J5+Yv8gPxCjHRR42h9RrwlD4wFXwuTyZdiyFPgvNgTEAIDyKKzQ6XZ9aVIWhtChLv0s4BRjHAuYw8JAMqw5Wevrpu1A7SdZWM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3495
X-OriginatorOrg: citrix.com

On 12/07/2021 21:32, Daniel P. Smith wrote:
> The generic event channel labeling has not been used by any XSM module since
> its introduction. This commit removes the capability leaving FLASK labeling
> field always present. In the future if a new XSM module needs to have its own
> channel label, this or a new form can be introduced.

You're missing a SoB line.

Also, this too would benefit from being reordered higher than patch 6,
to reduce the churn there.


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 01:32:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 01:32:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154926.286127 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37HA-0005EF-3O; Tue, 13 Jul 2021 01:31:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154926.286127; Tue, 13 Jul 2021 01:31:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37H9-0005E8-VT; Tue, 13 Jul 2021 01:31:55 +0000
Received: by outflank-mailman (input) for mailman id 154926;
 Tue, 13 Jul 2021 01:31:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6+yj=MF=citrix.com=igor.druzhinin@srs-us1.protection.inumbo.net>)
 id 1m37H8-0005E2-Cp
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 01:31:54 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7fbb7b1b-f65c-4a29-bddb-06a340249361;
 Tue, 13 Jul 2021 01:31:53 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7fbb7b1b-f65c-4a29-bddb-06a340249361
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626139913;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=NkwRuJxlwnRRpB4yrKu+6gXylzkNyPxMz5n1KzPcKMM=;
  b=GbG7w/8kUVSnftxIc+jrcN2ycUwNVcrMecuzHDKuXL3vhq4fJ70hdumF
   PpmkgauT3wTyp+qKmH+ccRrWIX0uJPtDGvE1jaD71uYF9rmeu6ilpswIo
   NBZNlHG7i2CFmiW7Sa7fTm59TAnm98OBxo4D0Z0msaV/BgQ3Tj2n569Q2
   s=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: P4dJ5aX6S1uEC8ZSiiJyKE3adwg2pQF/tC5RqfwNfyM69Plhct4gHXII/6uc8bWss/6/lX5BzT
 VjNKtWnK/KXaJgw7CLj6vhU47dLTcXw2oFV2ADnLqBjfZ5wNb5HhFuKSVg/rQZc6SC8GTU+0G+
 oWVaNWnAjFgHXZRHvm1FfSXH+7wzz9SBE38Ka7S6j4KsGo0nte+uVniqLLtW0VLeyHc6bztlER
 v/YSCO0zA+qSDUK9nRmf2ZSjp6HrQ10du+WckQ5b13pHgZOA9Hg5gkCkV1ShXFGx5OggD8GIEA
 i0Q=
X-SBRS: 5.1
X-MesageID: 48122841
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:BWtsVKqssXqj+b3Fya/xptIaV5ojeYIsimQD101hICG8cqSj9v
 xG/c5rsyMc5wxhO03I9eruBEDiewK6yXcW2/hyAV7KZmCP0wHEQL2KhbGSpwEIcBefygcy78
 ldmtBFebjNMWQ=
X-IronPort-AV: E=Sophos;i="5.84,235,1620705600"; 
   d="scan'208";a="48122841"
From: Igor Druzhinin <igor.druzhinin@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: <iwj@xenproject.org>, <wl@xen.org>, <andrew.cooper3@citrix.com>,
	<george.dunlap@citrix.com>, <jbeulich@suse.com>, <julien@xen.org>,
	<sstabellini@kernel.org>, <jgross@suse.com>, <christian.lindig@citrix.com>,
	<dave@recoil.org>, Igor Druzhinin <igor.druzhinin@citrix.com>
Subject: [PATCH v2] tools/libxc: use uint32_t for pirq in xc_domain_irq_permission
Date: Tue, 13 Jul 2021 02:31:41 +0100
Message-ID: <1626139901-9444-1-git-send-email-igor.druzhinin@citrix.com>
X-Mailer: git-send-email 2.7.4
MIME-Version: 1.0
Content-Type: text/plain

Current unit8_t for pirq argument in this interface is too restrictive
causing failures on modern hardware with lots of GSIs. That extends down to
XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
as well.

Internal Xen structures appear to be fine. Existing users of the interface
in tree (libxl, ocaml and python bindings) are currently using signed int
for pirq representation which should be wide enough. Converting them to
uint32_t now is desirable to avoid accidental passing of a negative
number (probably denoting an error code) by caller as pirq, but left for
the future clean up.

Domctl interface version is needed to be bumped with this change but that
was already done by 918b8842a8 ("arm64: Change type of hsr, cpsr, spsr_el1
to uint64_t") in this release cycle.

Additionally, take a change and convert allow_access argument to bool.

Reviewed-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
---

Changes in v2:
- extra wording for clarity in commit message (Julien)
- change allow_access to bool (Andrew)
- add padding (Jan)

---
 tools/include/xenctrl.h             | 4 ++--
 tools/libs/ctrl/xc_domain.c         | 4 ++--
 tools/ocaml/libs/xc/xenctrl_stubs.c | 4 ++--
 xen/include/public/domctl.h         | 3 ++-
 4 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h
index 2a7c836..14adaa0 100644
--- a/tools/include/xenctrl.h
+++ b/tools/include/xenctrl.h
@@ -1385,8 +1385,8 @@ int xc_domain_ioport_permission(xc_interface *xch,
 
 int xc_domain_irq_permission(xc_interface *xch,
                              uint32_t domid,
-                             uint8_t pirq,
-                             uint8_t allow_access);
+                             uint32_t pirq,
+                             bool allow_access);
 
 int xc_domain_iomem_permission(xc_interface *xch,
                                uint32_t domid,
diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c
index 7d11884..1cdf3d1 100644
--- a/tools/libs/ctrl/xc_domain.c
+++ b/tools/libs/ctrl/xc_domain.c
@@ -1384,8 +1384,8 @@ int xc_vcpu_setcontext(xc_interface *xch,
 
 int xc_domain_irq_permission(xc_interface *xch,
                              uint32_t domid,
-                             uint8_t pirq,
-                             uint8_t allow_access)
+                             uint32_t pirq,
+                             bool allow_access)
 {
     DECLARE_DOMCTL;
 
diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c
index 6e4bc56..266eb32 100644
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -1077,8 +1077,8 @@ CAMLprim value stub_xc_domain_irq_permission(value xch, value domid,
 					     value pirq, value allow)
 {
 	CAMLparam4(xch, domid, pirq, allow);
-	uint8_t c_pirq;
-	uint8_t c_allow;
+	uint32_t c_pirq;
+	bool c_allow;
 	int ret;
 
 	c_pirq = Int_val(pirq);
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 4dbf107..088c964 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -441,8 +441,9 @@ struct xen_domctl_setdebugging {
 
 /* XEN_DOMCTL_irq_permission */
 struct xen_domctl_irq_permission {
-    uint8_t pirq;
+    uint32_t pirq;
     uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
+    uint8_t pad[3];
 };
 
 
-- 
2.7.4



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 01:48:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 01:48:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154931.286137 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37XW-0006tN-DJ; Tue, 13 Jul 2021 01:48:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154931.286137; Tue, 13 Jul 2021 01:48:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37XW-0006tG-AB; Tue, 13 Jul 2021 01:48:50 +0000
Received: by outflank-mailman (input) for mailman id 154931;
 Tue, 13 Jul 2021 01:48:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m37XV-0006t6-E9; Tue, 13 Jul 2021 01:48:49 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m37XV-00012K-61; Tue, 13 Jul 2021 01:48:49 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m37XU-0000Xm-Ub; Tue, 13 Jul 2021 01:48:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m37XU-0007SB-U5; Tue, 13 Jul 2021 01:48:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=unvPjfSISjEdSm/2Ee6+4BmQBwvcWk+zve3PtYC3dg4=; b=T8TiGDr7hEKHW86e3Bb/Ia0a/8
	XVDF3DHbaPjTwnosCUYiqH1xiHPihCqj6L710oqHf9Tz0Oh/oIsChcGLMsryEsRNBuikw5ixI36+q
	eaB2Hus2TbX68v5+GQV5PoI6AGMR7W6CdrFsSY+ipuvx7Zr9KR76GgkuadB1hjGB6mmg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163612-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163612: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fb5b6220a9718fc28ae67f317d3611214a05589c
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 01:48:48 +0000

flight 163612 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163612/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fb5b6220a9718fc28ae67f317d3611214a05589c
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   38 days
Failing since        162368  2021-06-04 15:42:59 Z   38 days  108 attempts
Testing same since   163612  2021-07-12 17:41:17 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3703 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:00:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:00:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154937.286151 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37j4-00017J-IV; Tue, 13 Jul 2021 02:00:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154937.286151; Tue, 13 Jul 2021 02:00:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37j4-00017C-FZ; Tue, 13 Jul 2021 02:00:46 +0000
Received: by outflank-mailman (input) for mailman id 154937;
 Tue, 13 Jul 2021 02:00:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yAHm=MF=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m37j3-000176-4j
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 02:00:45 +0000
Received: from mail-pl1-x62a.google.com (unknown [2607:f8b0:4864:20::62a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6bd7ad08-2fb5-4a1e-b973-6d5dbdb8c28f;
 Tue, 13 Jul 2021 02:00:44 +0000 (UTC)
Received: by mail-pl1-x62a.google.com with SMTP id a14so10270753pls.4
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 19:00:44 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id o20sm19285728pgv.80.2021.07.12.19.00.41
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 12 Jul 2021 19:00:42 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 6bd7ad08-2fb5-4a1e-b973-6d5dbdb8c28f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=TJffYyNEYPV7UUGUzzKW/M1E28weI4MdqsDg7hJV21Q=;
        b=Enz2IR2ui9Lm/csfiIqHAkSlODOLLVEBqz0DgAFNvvIZIQBX6mDlWZJpjBpambWFIL
         MHhh17gAaWEeEEb6KXyhNAc/DsiIqhc6hY/eAbA3CyXcITmZLlqHx1SguRpW1CS7OjVr
         PLfZZv/kTOeKR1JUH7xmfkNFTUYZNAHi4e8gwsy1setka5FHhFlRFMCWbNQCnMKmNJ09
         YVE4XGFRyd94QYp2pUC6K2cthmxyXM+ExKug3d5o7Eufh5m5/EmfJjeiiGb7F5XfjXZM
         QKMUKAcrrHkyuXrOkefxvLP8VOe0D5xhIG1wzaju37RxHtWkNt3F5sXSYRVfSkAhXLuD
         EMKA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :mime-version:content-transfer-encoding;
        bh=TJffYyNEYPV7UUGUzzKW/M1E28weI4MdqsDg7hJV21Q=;
        b=ZMkkivhqbUHM6UcuTpToPN4TDvU13onIlxbMbBhYTg9u9o9yrLVe6oi/QOC3qKQd88
         sfjdpC3xhwpUiQK27sXTnwqFvAsC1MszMXAqHj6DXFbx0o333N8xR3P1AvSamT1Ka8Qr
         C/w4lig8fj1LFUmPoJrLkfLGmUdGJykw2niGx82EgykaWLec886qCdEMd7rzuNG+vwba
         pDFDdEhOG4/SYrYeCWF3JgdO01Lx8VcGP31FPXQtjJdxjdUyVOhYXwcG/Ch8sMHHVYA6
         L21SMD9Hul5Sxmv+Ru6UMUE+soJuYbidwcC+Z5Al47A/ZA7IAsumuWF620KRducsYjBZ
         OsnA==
X-Gm-Message-State: AOAM532n2aizVxwey0cIGFcN5nJudnzKc65vTmwkKWbXXu2kwbVbGMpK
	36ubEbjUvoSyXpAbo7EbcFE5TbrTu8MqVL+S
X-Google-Smtp-Source: ABdhPJzNjulYimGQpHlHc9BG4XxMgISJNxKkD/IERvShv13AmrJE+pPTkSytcvoREsdUEMUeHZfdJA==
X-Received: by 2002:a17:90a:fb51:: with SMTP id iq17mr17121198pjb.36.1626141642969;
        Mon, 12 Jul 2021 19:00:42 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH 0/4] Remove unconditional arch dependency on asm/debugger.h
Date: Mon, 12 Jul 2021 18:59:52 -0700
Message-Id: <cover.1626134829.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Currently, any architecture wishing to use common/ is likely
to be required to implement the functions found in "asm/debugger.h".
Some architectures, however, do not have an actual use for these
functions and so are forced to implement stubs.  This patch does the
following:

* Supplies common stubs if !CONFIG_CRASH_DEBUG for any architecture,
  removing the need for all new architectures to have "asm/debugger.h".
* Moves the x86 implementation to "arch/x86/debugger.c".
* Removes the ARM calls to its stubs.
* Centralizes x86 code conditionally compiled by CONFIG_CRASH_DEBUG
  into arch/x86/debugger.c, which is now conditionally built for
  CONFIG_CRASH_DEBUG via Kbuild (i.e., obj-$(CONFIG_CRASH_DEBUG)).
* Tries to improve the x86 implementation by not inlining large
  functions (but preserving inlining for those that seemed "small").

Bobby Eshleman (4):
  build: use common stubs for debugger_trap_* functions if
    !CONFIG_CRASH_DEBUG
  arm/traps: remove debugger_trap_fatal() calls
  x86/debug: move debugger_trap_entry into debugger.c not inlined
  x86/debug: move domain_pause_for_debugger to debugger.c

 xen/arch/arm/traps.c            |  8 +--
 xen/arch/x86/Makefile           |  1 +
 xen/arch/x86/debug.c            |  2 +-
 xen/arch/x86/debugger.c         | 53 ++++++++++++++++++++
 xen/arch/x86/domain.c           | 15 +-----
 xen/arch/x86/domctl.c           |  2 +-
 xen/arch/x86/gdbstub.c          |  4 +-
 xen/arch/x86/hvm/svm/svm.c      |  2 +-
 xen/arch/x86/hvm/vmx/realmode.c |  2 +-
 xen/arch/x86/hvm/vmx/vmx.c      |  2 +-
 xen/arch/x86/nmi.c              |  2 +-
 xen/arch/x86/traps.c            |  2 +-
 xen/arch/x86/x86_64/gdbstub.c   |  3 +-
 xen/common/domain.c             |  2 +-
 xen/common/gdbstub.c            |  3 +-
 xen/common/keyhandler.c         |  2 +-
 xen/common/shutdown.c           |  2 +-
 xen/drivers/char/console.c      |  2 +-
 xen/include/asm-arm/debugger.h  | 15 ------
 xen/include/asm-x86/debugger.h  | 89 ++++-----------------------------
 xen/include/xen/debugger.h      | 81 ++++++++++++++++++++++++++++++
 21 files changed, 166 insertions(+), 128 deletions(-)
 create mode 100644 xen/arch/x86/debugger.c
 delete mode 100644 xen/include/asm-arm/debugger.h
 create mode 100644 xen/include/xen/debugger.h

-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:00:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:00:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154938.286163 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37j9-0001Om-RA; Tue, 13 Jul 2021 02:00:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154938.286163; Tue, 13 Jul 2021 02:00:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37j9-0001Od-NF; Tue, 13 Jul 2021 02:00:51 +0000
Received: by outflank-mailman (input) for mailman id 154938;
 Tue, 13 Jul 2021 02:00:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yAHm=MF=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m37j8-000176-2X
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 02:00:50 +0000
Received: from mail-pf1-x42b.google.com (unknown [2607:f8b0:4864:20::42b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f6e1a125-b99f-41b4-8694-e9fac392ad66;
 Tue, 13 Jul 2021 02:00:45 +0000 (UTC)
Received: by mail-pf1-x42b.google.com with SMTP id j199so18136688pfd.7
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 19:00:45 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id o20sm19285728pgv.80.2021.07.12.19.00.43
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 12 Jul 2021 19:00:43 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: f6e1a125-b99f-41b4-8694-e9fac392ad66
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=Apyk2EsaQkKzjgWc1lHDgAWxDVjQnXEaCPOUVZyL41s=;
        b=uKLbGF8kjX0PotsoBntlRXMQ1mdfytGQNDGsTrDOnRm+itBtYwLQmZMyhenIycQL/O
         mgU77BfZmXKU2RdIvK1MScxENdi9HAyjRrIkc17I66ODOLOFiTBqHBJVhwD/jXIOil6k
         WJi6lfBgc8fEmZP0lJq0aj8lXSzMWidbbSNvqqOEWy751OHexhMKH9zk3WLukM5r8Xq+
         YNvQnU0EYMobNX9vyOoG5oP54ifoRy+XSrYfmRU7Muu2krrgossLA2V0x4ziSPhUy21S
         ZFBpPyxDr1pxJWHAYL8Z3ClmaKMbsYuqq5z5IzxjG1kW+boMIMkHoI4sWnUQ6bvo8+FF
         nm3g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=Apyk2EsaQkKzjgWc1lHDgAWxDVjQnXEaCPOUVZyL41s=;
        b=dQBYxc4M9b4XTM9DiUznsvd+CTDCfUPYdk+nuXlnWDX8DsAwDJdzA9dXJYES00SPMh
         3tcj88zHUkNj+vduSpkLKRgffNy3BloZE5ijRCxUmqIpY0gnIDWJhmobJ7wxB1fF5J8c
         XSvZ4dW31/9IkFvXgH7H6cSaiSsgewscQp/lUZt86MKWtI4N4GS+0fwfmk08TSOgzMfR
         /7ofp96Rbgy68GpIqaMLQVMVfikULtEI7tpMrzKM2U7P7+n09FPcKO/6UUGagt4RYf1/
         S/njmnWCeCRnuHZwdZR49qF2QoDbPT5VBzTpGne0LORQpl3XnbsVQ517vd1f0FOdZt9S
         m6Gg==
X-Gm-Message-State: AOAM5323jvcXQK+la6V9x8mlnWm4CBAIdTnKv1az6nU86NN84sazdbfA
	PqqDu1wQjVA7CKBZjggMNYEDbGuuoQvQfMXJ
X-Google-Smtp-Source: ABdhPJzLUz9cHsC/W0S2fJwDKf2SCR2CfHQ9KllaO9/lns1Evj2NCJQy6ZX2mL499BP38kMCO0KaVg==
X-Received: by 2002:a63:1d41:: with SMTP id d1mr1975744pgm.199.1626141644242;
        Mon, 12 Jul 2021 19:00:44 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH 1/4] build: use common stubs for debugger_trap_* functions if !CONFIG_CRASH_DEBUG
Date: Mon, 12 Jul 2021 18:59:53 -0700
Message-Id: <2fc1a1416d37b5eed0ebfdeff8bb9dd61bc7acc7.1626136452.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626136452.git.bobby.eshleman@gmail.com>
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Previously Xen required all architectures implement the debugger_trap_*
functions whether or not it actually needs them.

This commit makes debugger_trap* functions resolve to arch-specific
function definitions if CONFIG_CRASH_DEBUG=y, but resolves to a set of
common no-op stubs if !CONFIG_CRASH_DEBUG, which avoids requiring every
arch to carry its own stubs.  This means asm/debugger.h may also be
dropped for architectures that do not need this functionality.

Inside xen/debugger.h:
    * If !CONFIG_CRASH_DEBUG, use stubs.
    * Otherwise, include arch-specific <asm/debugger.h>

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---
 xen/arch/arm/traps.c            |  2 +-
 xen/arch/x86/debug.c            |  2 +-
 xen/arch/x86/domain.c           |  5 +-
 xen/arch/x86/domctl.c           |  2 +-
 xen/arch/x86/gdbstub.c          |  4 +-
 xen/arch/x86/hvm/svm/svm.c      |  2 +-
 xen/arch/x86/hvm/vmx/realmode.c |  2 +-
 xen/arch/x86/hvm/vmx/vmx.c      |  2 +-
 xen/arch/x86/nmi.c              |  2 +-
 xen/arch/x86/traps.c            |  2 +-
 xen/arch/x86/x86_64/gdbstub.c   |  3 +-
 xen/common/domain.c             |  2 +-
 xen/common/gdbstub.c            |  3 +-
 xen/common/keyhandler.c         |  2 +-
 xen/common/shutdown.c           |  2 +-
 xen/drivers/char/console.c      |  2 +-
 xen/include/asm-arm/debugger.h  | 15 ------
 xen/include/asm-x86/debugger.h  | 66 +++++----------------------
 xen/include/xen/debugger.h      | 81 +++++++++++++++++++++++++++++++++
 19 files changed, 115 insertions(+), 86 deletions(-)
 delete mode 100644 xen/include/asm-arm/debugger.h
 create mode 100644 xen/include/xen/debugger.h

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 4ccb6e7d18..5a0a5eff1d 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -41,7 +41,7 @@
 #include <asm/acpi.h>
 #include <asm/cpuerrata.h>
 #include <asm/cpufeature.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/event.h>
 #include <asm/hsr.h>
 #include <asm/mmio.h>
diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/debug.c
index d90dc93056..4386e8d1b1 100644
--- a/xen/arch/x86/debug.c
+++ b/xen/arch/x86/debug.c
@@ -19,7 +19,7 @@
 #include <xen/mm.h>
 #include <xen/domain_page.h>
 #include <xen/guest_access.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/p2m.h>
 
 typedef unsigned long dbgva_t;
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index ef1812dc14..47448f2f8c 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -16,6 +16,7 @@
 #include <xen/errno.h>
 #include <xen/sched.h>
 #include <xen/domain.h>
+#include <xen/debugger.h>
 #include <xen/smp.h>
 #include <xen/delay.h>
 #include <xen/softirq.h>
@@ -2539,9 +2540,9 @@ static int __init init_vcpu_kick_softirq(void)
 }
 __initcall(init_vcpu_kick_softirq);
 
+#ifdef CONFIG_CRASH_DEBUG
 void domain_pause_for_debugger(void)
 {
-#ifdef CONFIG_CRASH_DEBUG
     struct vcpu *curr = current;
     struct domain *d = curr->domain;
 
@@ -2550,8 +2551,8 @@ void domain_pause_for_debugger(void)
     /* if gdbsx active, we just need to pause the domain */
     if ( curr->arch.gdbsx_vcpu_event == 0 )
         send_global_virq(VIRQ_DEBUGGER);
-#endif
 }
+#endif
 
 /*
  * Local variables:
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 26a76d2be9..1bc8ba7251 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -33,7 +33,7 @@
 #include <public/vm_event.h>
 #include <asm/mem_sharing.h>
 #include <asm/xstate.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/psr.h>
 #include <asm/cpuid.h>
 
diff --git a/xen/arch/x86/gdbstub.c b/xen/arch/x86/gdbstub.c
index 8f4f49fd3b..f20cbf1f45 100644
--- a/xen/arch/x86/gdbstub.c
+++ b/xen/arch/x86/gdbstub.c
@@ -18,7 +18,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
-#include <asm/debugger.h>
+#include <asm/uaccess.h>
+#include <xen/debugger.h>
+#include <xen/gdbstub.h>
 
 u16
 gdb_arch_signal_num(struct cpu_user_regs *regs, unsigned long cookie)
diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index 642a64b747..d7ec7c15f9 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -58,7 +58,7 @@
 #include <asm/hvm/trace.h>
 #include <asm/hap.h>
 #include <asm/apic.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/hvm/monitor.h>
 #include <asm/monitor.h>
 #include <asm/xstate.h>
diff --git a/xen/arch/x86/hvm/vmx/realmode.c b/xen/arch/x86/hvm/vmx/realmode.c
index cc23afa788..1f8513c132 100644
--- a/xen/arch/x86/hvm/vmx/realmode.c
+++ b/xen/arch/x86/hvm/vmx/realmode.c
@@ -14,7 +14,7 @@
 #include <xen/sched.h>
 #include <xen/paging.h>
 #include <xen/softirq.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/event.h>
 #include <asm/hvm/emulate.h>
 #include <asm/hvm/hvm.h>
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index e09b7e3af9..1820e4be0c 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -51,7 +51,7 @@
 #include <asm/hvm/trace.h>
 #include <asm/hvm/monitor.h>
 #include <asm/xenoprof.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/apic.h>
 #include <asm/hvm/nestedhvm.h>
 #include <asm/altp2m.h>
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index ab94a96c4d..eaf404402d 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -30,7 +30,7 @@
 #include <asm/msr.h>
 #include <asm/mpspec.h>
 #include <asm/nmi.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/div64.h>
 #include <asm/apic.h>
 
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index e60af16ddd..44811c9599 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -62,7 +62,7 @@
 #include <asm/uaccess.h>
 #include <asm/i387.h>
 #include <asm/xstate.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/msr.h>
 #include <asm/nmi.h>
 #include <asm/xenoprof.h>
diff --git a/xen/arch/x86/x86_64/gdbstub.c b/xen/arch/x86/x86_64/gdbstub.c
index 2626519c89..126af03f50 100644
--- a/xen/arch/x86/x86_64/gdbstub.c
+++ b/xen/arch/x86/x86_64/gdbstub.c
@@ -17,7 +17,8 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <asm/debugger.h>
+#include <xen/debugger.h>
+#include <xen/gdbstub.h>
 
 #define GDB_REG64(r) gdb_write_to_packet_hex(r, sizeof(u64), ctx)
 #define GDB_REG32(r)  gdb_write_to_packet_hex(r, sizeof(u32), ctx)
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 6b71c6d6a9..88ba680fe7 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -33,7 +33,7 @@
 #include <xen/xenoprof.h>
 #include <xen/irq.h>
 #include <xen/argo.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/p2m.h>
 #include <asm/processor.h>
 #include <public/sched.h>
diff --git a/xen/common/gdbstub.c b/xen/common/gdbstub.c
index 848c1f4327..6f3d7ca72f 100644
--- a/xen/common/gdbstub.c
+++ b/xen/common/gdbstub.c
@@ -38,7 +38,8 @@
 #include <xen/serial.h>
 #include <xen/irq.h>
 #include <xen/watchdog.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
+#include <xen/gdbstub.h>
 #include <xen/init.h>
 #include <xen/param.h>
 #include <xen/smp.h>
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index 8b9f378371..5c66ca0056 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -20,7 +20,7 @@
 #include <xen/mm.h>
 #include <xen/watchdog.h>
 #include <xen/init.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/div64.h>
 
 static unsigned char keypress_key;
diff --git a/xen/common/shutdown.c b/xen/common/shutdown.c
index abde48aa4c..c82a4999d9 100644
--- a/xen/common/shutdown.c
+++ b/xen/common/shutdown.c
@@ -8,7 +8,7 @@
 #include <xen/shutdown.h>
 #include <xen/console.h>
 #include <xen/kexec.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <public/sched.h>
 
 /* opt_noreboot: If true, machine will need manual reset on error. */
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 7d0a603d03..060d32757f 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -26,7 +26,7 @@
 #include <xen/kexec.h>
 #include <xen/ctype.h>
 #include <xen/warning.h>
-#include <asm/debugger.h>
+#include <xen/debugger.h>
 #include <asm/div64.h>
 #include <xen/hypercall.h> /* for do_console_io */
 #include <xen/early_printk.h>
diff --git a/xen/include/asm-arm/debugger.h b/xen/include/asm-arm/debugger.h
deleted file mode 100644
index ac776efa78..0000000000
--- a/xen/include/asm-arm/debugger.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef __ARM_DEBUGGER_H__
-#define __ARM_DEBUGGER_H__
-
-#define debugger_trap_fatal(v, r) (0)
-#define debugger_trap_immediate() ((void) 0)
-
-#endif /* __ARM_DEBUGGER_H__ */
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/xen/include/asm-x86/debugger.h b/xen/include/asm-x86/debugger.h
index 99803bfd0c..38359da0a1 100644
--- a/xen/include/asm-x86/debugger.h
+++ b/xen/include/asm-x86/debugger.h
@@ -1,44 +1,26 @@
 /******************************************************************************
- * asm/debugger.h
- * 
- * Generic hooks into arch-dependent Xen.
- * 
- * Each debugger should define two functions here:
- * 
- * 1. debugger_trap_entry(): 
- *  Called at start of any synchronous fault or trap, before any other work
- *  is done. The idea is that if your debugger deliberately caused the trap
- *  (e.g. to implement breakpoints or data watchpoints) then you can take
- *  appropriate action and return a non-zero value to cause early exit from
- *  the trap function.
- * 
- * 2. debugger_trap_fatal():
- *  Called when Xen is about to give up and crash. Typically you will use this
- *  hook to drop into a debug session. It can also be used to hook off
- *  deliberately caused traps (which you then handle and return non-zero).
+ * x86 Debugger Hooks
  *
- * 3. debugger_trap_immediate():
- *  Called if we want to drop into a debugger now.  This is essentially the
- *  same as debugger_trap_fatal, except that we use the current register state
- *  rather than the state which was in effect when we took the trap.
- *  For example: if we're dying because of an unhandled exception, we call
- *  debugger_trap_fatal; if we're dying because of a panic() we call
- *  debugger_trap_immediate().
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
-
 #ifndef __X86_DEBUGGER_H__
 #define __X86_DEBUGGER_H__
 
-#include <xen/sched.h>
 #include <asm/regs.h>
 #include <asm/processor.h>
+#include <xen/gdbstub.h>
+#include <xen/domain.h>
+#include <xen/event.h>
+#include <xen/sched.h>
 
 void domain_pause_for_debugger(void);
 
-#ifdef CONFIG_CRASH_DEBUG
-
-#include <xen/gdbstub.h>
-
 static inline bool debugger_trap_fatal(
     unsigned int vector, struct cpu_user_regs *regs)
 {
@@ -74,28 +56,4 @@ static inline bool debugger_trap_entry(
     return false;
 }
 
-#else
-
-static inline bool debugger_trap_fatal(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return false;
-}
-
-#define debugger_trap_immediate() ((void)0)
-
-static inline bool debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return false;
-}
-
-#endif
-
-#ifdef CONFIG_GDBSX
-unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
-                        unsigned int len, domid_t domid, bool toaddr,
-                        uint64_t pgd3);
-#endif
-
 #endif /* __X86_DEBUGGER_H__ */
diff --git a/xen/include/xen/debugger.h b/xen/include/xen/debugger.h
new file mode 100644
index 0000000000..d6d820f4e5
--- /dev/null
+++ b/xen/include/xen/debugger.h
@@ -0,0 +1,81 @@
+/******************************************************************************
+ * Generic hooks into arch-dependent Xen.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ * Each debugger should define three functions here:
+ *
+ * 1. debugger_trap_entry():
+ *  Called at start of any synchronous fault or trap, before any other work
+ *  is done. The idea is that if your debugger deliberately caused the trap
+ *  (e.g. to implement breakpoints or data watchpoints) then you can take
+ *  appropriate action and return a non-zero value to cause early exit from
+ *  the trap function.
+ *
+ * 2. debugger_trap_fatal():
+ *  Called when Xen is about to give up and crash. Typically you will use this
+ *  hook to drop into a debug session. It can also be used to hook off
+ *  deliberately caused traps (which you then handle and return non-zero).
+ *
+ * 3. debugger_trap_immediate():
+ *  Called if we want to drop into a debugger now.  This is essentially the
+ *  same as debugger_trap_fatal, except that we use the current register state
+ *  rather than the state which was in effect when we took the trap.
+ *  For example: if we're dying because of an unhandled exception, we call
+ *  debugger_trap_fatal; if we're dying because of a panic() we call
+ *  debugger_trap_immediate().
+ */
+
+#ifndef __XEN_DEBUGGER_H__
+#define __XEN_DEBUGGER_H__
+
+/* Dummy value used by ARM stubs. */
+#ifndef TRAP_invalid_op
+# define TRAP_invalid_op 6
+#endif
+
+#ifdef CONFIG_CRASH_DEBUG
+
+#include <asm/debugger.h>
+
+#else
+
+#include <asm/regs.h>
+#include <asm/processor.h>
+
+static inline void domain_pause_for_debugger(void)
+{
+}
+
+static inline bool debugger_trap_fatal(
+    unsigned int vector, const struct cpu_user_regs *regs)
+{
+    return false;
+}
+
+static inline void debugger_trap_immediate(void)
+{
+}
+
+static inline bool debugger_trap_entry(
+    unsigned int vector, const struct cpu_user_regs *regs)
+{
+    return false;
+}
+
+#endif /* CONFIG_CRASH_DEBUG */
+
+#ifdef CONFIG_GDBSX
+unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
+                        unsigned int len, domid_t domid, bool toaddr,
+                        uint64_t pgd3);
+#endif /* CONFIG_GDBSX */
+
+#endif /* __XEN_DEBUGGER_H__ */
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:00:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:00:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154939.286174 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37jF-0001jw-4b; Tue, 13 Jul 2021 02:00:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154939.286174; Tue, 13 Jul 2021 02:00:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37jF-0001jp-0m; Tue, 13 Jul 2021 02:00:57 +0000
Received: by outflank-mailman (input) for mailman id 154939;
 Tue, 13 Jul 2021 02:00:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yAHm=MF=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m37jD-000176-2m
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 02:00:55 +0000
Received: from mail-pl1-x62d.google.com (unknown [2607:f8b0:4864:20::62d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3ff32f20-1db9-4b45-af84-32f0c6ae204e;
 Tue, 13 Jul 2021 02:00:46 +0000 (UTC)
Received: by mail-pl1-x62d.google.com with SMTP id v14so3328772plg.9
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 19:00:46 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id o20sm19285728pgv.80.2021.07.12.19.00.44
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 12 Jul 2021 19:00:45 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 3ff32f20-1db9-4b45-af84-32f0c6ae204e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=ETCvvoLrlGjCQWP7sohk1l4ug8oahZVh7nYA0Gt5aRs=;
        b=PN7qycbKZ9dR/LzS0glr8GMR+f2ztvIFGFwGqy786AT1CPnQZ5d/ZqRmShlGwfnlZb
         WPUbUl5kQJwWG4wMSfveXdJsGhwCrUYmAEeqtxnvju/vIQgTJpooLb72Hp2E6RGpJ3IU
         6J+aHO7SQVmolBLsGEsq2SsaoMD1Bj6fNqOSKBoDNAAGz12g9wFoxg1bw7B7CGx78S5M
         f6iQw+XUD3BjExwNCBINCYhRO5XLVnX8JJZW2o9xzXAqnrVNTTixEKAIh06TLZhSHDRs
         7YYdzHsdSs5nuA8CNviSy3BDOAPBv6KHuBHBizkgGxGywLOPu5wuFubdEw4oCizz3JBP
         ejfQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=ETCvvoLrlGjCQWP7sohk1l4ug8oahZVh7nYA0Gt5aRs=;
        b=QbFjMrssXo95fjtwnqlBGeBVKjBy75PNQrAPeLnCIgJZ9Rxh4UWnz6MnfwE10/IjJD
         8OgpKt7pmql9duH2ImhGrHxgkNjH9HdTQ/xYJW6WrtzZyK1QuDjSQcwB/K91RSPHQ7fZ
         chsHq/okCE0tt8nWU9Kp0/+HfCjVH9gTZ/q6MffzSel7bvi8w/I8WkZl2Jp2WW6msTyq
         qY/oFBVrZluLh+FZiGFjwtjSRTE79V+XTn47+00yCX3lj8pKjmj6h7kq+xw+/uJEvjPt
         Ug3LafP7FwX0qf4zTmBAVd4VaM4V0kGuKlZf5ijtkOGdmDrNyNTgDvRwRBZ9IPyNLpFP
         oDZw==
X-Gm-Message-State: AOAM531uUoYWQ6OeG2IBOAQb1YJs8kNDFFvuPfItdGrlO0d382FIEWeC
	veJb+nklTF1HKH5tFTOr5QKFxO8BkfqqpyZX
X-Google-Smtp-Source: ABdhPJwtUvTf3MaX/Rj6pTO/MUDcJS9nQZwGhCK26AXxHrpEWNHwyBb/iqgG8KwGtRzIwudERf6BQw==
X-Received: by 2002:a17:902:6b47:b029:129:ab4e:6407 with SMTP id g7-20020a1709026b47b0290129ab4e6407mr1570395plt.20.1626141645515;
        Mon, 12 Jul 2021 19:00:45 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH 2/4] arm/traps: remove debugger_trap_fatal() calls
Date: Mon, 12 Jul 2021 18:59:54 -0700
Message-Id: <53d50b747796d3ece965f872426dc311073775ab.1626136452.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626136452.git.bobby.eshleman@gmail.com>
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

ARM doesn't actually use debugger_trap_* anything, and is stubbed out.

Simply remove the calls. This also renders TRAP_invalid_op unused in
any common code, so remove that definition too.

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---
 xen/arch/arm/traps.c       | 6 ------
 xen/include/xen/debugger.h | 5 -----
 2 files changed, 11 deletions(-)

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 5a0a5eff1d..0310bc91a0 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -1266,10 +1266,6 @@ int do_bug_frame(const struct cpu_user_regs *regs, vaddr_t pc)
 
     case BUGFRAME_bug:
         printk("Xen BUG at %s%s:%d\n", prefix, filename, lineno);
-
-        if ( debugger_trap_fatal(TRAP_invalid_op, regs) )
-            return 0;
-
         show_execution_state(regs);
         panic("Xen BUG at %s%s:%d\n", prefix, filename, lineno);
 
@@ -1281,8 +1277,6 @@ int do_bug_frame(const struct cpu_user_regs *regs, vaddr_t pc)
 
         printk("Assertion '%s' failed at %s%s:%d\n",
                predicate, prefix, filename, lineno);
-        if ( debugger_trap_fatal(TRAP_invalid_op, regs) )
-            return 0;
         show_execution_state(regs);
         panic("Assertion '%s' failed at %s%s:%d\n",
               predicate, prefix, filename, lineno);
diff --git a/xen/include/xen/debugger.h b/xen/include/xen/debugger.h
index d6d820f4e5..8297e582e4 100644
--- a/xen/include/xen/debugger.h
+++ b/xen/include/xen/debugger.h
@@ -36,11 +36,6 @@
 #ifndef __XEN_DEBUGGER_H__
 #define __XEN_DEBUGGER_H__
 
-/* Dummy value used by ARM stubs. */
-#ifndef TRAP_invalid_op
-# define TRAP_invalid_op 6
-#endif
-
 #ifdef CONFIG_CRASH_DEBUG
 
 #include <asm/debugger.h>
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:01:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:01:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154941.286185 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37jJ-00026d-JQ; Tue, 13 Jul 2021 02:01:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154941.286185; Tue, 13 Jul 2021 02:01:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37jJ-00026U-F1; Tue, 13 Jul 2021 02:01:01 +0000
Received: by outflank-mailman (input) for mailman id 154941;
 Tue, 13 Jul 2021 02:01:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yAHm=MF=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m37jI-000176-2q
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 02:01:00 +0000
Received: from mail-pj1-x102f.google.com (unknown [2607:f8b0:4864:20::102f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6a4a83df-4f93-4d66-99d0-66d242d5a5c6;
 Tue, 13 Jul 2021 02:00:47 +0000 (UTC)
Received: by mail-pj1-x102f.google.com with SMTP id cu14so5895987pjb.0
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 19:00:47 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id o20sm19285728pgv.80.2021.07.12.19.00.45
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 12 Jul 2021 19:00:46 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 6a4a83df-4f93-4d66-99d0-66d242d5a5c6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=IYB3iZHRXJw5EDQRJ886nEUR/jLEeGwphV4Z/nAkuoA=;
        b=vQ8b5kDFCqOCH0hWy6rT6p8nLejfhuuLpsltsXVzLAmuo5T987HMdrzKNAzs8zXx1I
         hj8NSaAWveXgYkkrhHv5Wbs9gdoDLBVdUiPLoqTv1puh84PAYCnh83910gsqPG4QFxmd
         9aRYjWk3ARbB34GnYn7BGqaq/isfBFEYt3Sdt4j9m4BqHWN14ot01dR78yTZZXuY9jmJ
         ba58Cn3F/PET1RMzapZdti3pNaWxOaUFmyRrKwD9XDPEzBa0HTKgh7PSd9TwdNkOpEJv
         KnjMCjymALCnQtqBvl6F9hThvZl7+QmOVEmq6LwvE6/KTpmp9oPNgkVfgw6Q4o33Soyl
         nbbw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=IYB3iZHRXJw5EDQRJ886nEUR/jLEeGwphV4Z/nAkuoA=;
        b=jj+zRYlyxpZfQP5TmWqLVjjfNxY63lRTR+L0PnOevQlVO6eONS9pk3+zEJxM4qz6zV
         iA8TpYTb3AMB6Ip4gXf86GwLGGXsU3Ov/kSYOLuLgPYCV31f/5emxJUT63TSV+vzQHAr
         JZN+tSmGN7Tf8AggsQsZheisRy+6ojedDlqBEEuUeiYtpiOdBjbZOZWxHcpUyjBiLYnT
         j+RRovKfkUmHeNBmSUj6l7Jq+uYcG9+bP2PXWlicGOhcSwfj1MbWR6vq3ezPULaY3Pz1
         +Jp5y3BxKz4ASshXx0rlcGt6YpjPyKVvUPOAdwSyTA2ZC7JImuMfLa9GJS87TkdeQHZL
         J0/g==
X-Gm-Message-State: AOAM531eUdVRYpkqEfIll0jeEW2B4fn4WSDRR85cs0ciYTfs7l12sXgD
	ZhghetxduHfY2Jlo9kUBYMrrOx2fKgRISqKl
X-Google-Smtp-Source: ABdhPJzTADmqDU1sLjfzYDfb9vCVlvA29Sl+JJg1Q5nFHyy4feMy996dHxe//jyKECBphs6uEpqPKw==
X-Received: by 2002:a17:902:650b:b029:129:9c6a:13d8 with SMTP id b11-20020a170902650bb02901299c6a13d8mr1661193plk.63.1626141646687;
        Mon, 12 Jul 2021 19:00:46 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH 3/4] x86/debug: move debugger_trap_entry into debugger.c not inlined
Date: Mon, 12 Jul 2021 18:59:55 -0700
Message-Id: <02355502c796b500a6b7e9e60b903d245d2ece23.1626136452.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626136452.git.bobby.eshleman@gmail.com>
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The function debugger_trap_entry() is rather large for an inlined
function.  This commit moves debugger_trap_entry() into debugger.c and
makes it not inlined.

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---
 xen/arch/x86/Makefile          |  1 +
 xen/arch/x86/debugger.c        | 41 ++++++++++++++++++++++++++++++++++
 xen/include/asm-x86/debugger.h | 29 ++----------------------
 3 files changed, 44 insertions(+), 27 deletions(-)
 create mode 100644 xen/arch/x86/debugger.c

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 2ec883456e..ba274fb8e6 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -32,6 +32,7 @@ obj-y += emul-i8254.o
 obj-y += extable.o
 obj-y += flushtlb.o
 obj-$(CONFIG_CRASH_DEBUG) += gdbstub.o
+obj-$(CONFIG_CRASH_DEBUG) += debugger.o
 obj-y += hypercall.o
 obj-y += i387.o
 obj-y += i8259.o
diff --git a/xen/arch/x86/debugger.c b/xen/arch/x86/debugger.c
new file mode 100644
index 0000000000..6f33f509ff
--- /dev/null
+++ b/xen/arch/x86/debugger.c
@@ -0,0 +1,41 @@
+/******************************************************************************
+ * x86 crash debug hooks
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <asm/debugger.h>
+#include <xen/domain.h>
+#include <xen/event.h>
+#include <xen/sched.h>
+
+bool debugger_trap_entry(
+    unsigned int vector, struct cpu_user_regs *regs)
+{
+    /*
+     * This function is called before any checks are made.  Amongst other
+     * things, be aware that during early boot, current is not a safe pointer
+     * to follow.
+     */
+    struct vcpu *v = current;
+
+    if ( vector != TRAP_int3 && vector != TRAP_debug )
+        return false;
+
+    if ( guest_mode(regs) && guest_kernel_mode(v, regs) &&
+         v->domain->debugger_attached  )
+    {
+        if ( vector != TRAP_debug ) /* domain pause is good enough */
+            current->arch.gdbsx_vcpu_event = vector;
+        domain_pause_for_debugger();
+        return true;
+    }
+
+    return false;
+}
diff --git a/xen/include/asm-x86/debugger.h b/xen/include/asm-x86/debugger.h
index 38359da0a1..0e30d27a4e 100644
--- a/xen/include/asm-x86/debugger.h
+++ b/xen/include/asm-x86/debugger.h
@@ -15,9 +15,6 @@
 #include <asm/regs.h>
 #include <asm/processor.h>
 #include <xen/gdbstub.h>
-#include <xen/domain.h>
-#include <xen/event.h>
-#include <xen/sched.h>
 
 void domain_pause_for_debugger(void);
 
@@ -31,29 +28,7 @@ static inline bool debugger_trap_fatal(
 /* Int3 is a trivial way to gather cpu_user_regs context. */
 #define debugger_trap_immediate() __asm__ __volatile__ ( "int3" );
 
-static inline bool debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    /*
-     * This function is called before any checks are made.  Amongst other
-     * things, be aware that during early boot, current is not a safe pointer
-     * to follow.
-     */
-    struct vcpu *v = current;
-
-    if ( vector != TRAP_int3 && vector != TRAP_debug )
-        return false;
-
-    if ( guest_mode(regs) && guest_kernel_mode(v, regs) &&
-         v->domain->debugger_attached  )
-    {
-        if ( vector != TRAP_debug ) /* domain pause is good enough */
-            current->arch.gdbsx_vcpu_event = vector;
-        domain_pause_for_debugger();
-        return true;
-    }
-
-    return false;
-}
+bool debugger_trap_entry(
+    unsigned int vector, struct cpu_user_regs *regs);
 
 #endif /* __X86_DEBUGGER_H__ */
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:01:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:01:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154942.286196 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37jO-0002dR-Vd; Tue, 13 Jul 2021 02:01:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154942.286196; Tue, 13 Jul 2021 02:01:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37jO-0002dD-OY; Tue, 13 Jul 2021 02:01:06 +0000
Received: by outflank-mailman (input) for mailman id 154942;
 Tue, 13 Jul 2021 02:01:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yAHm=MF=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m37jN-000176-32
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 02:01:05 +0000
Received: from mail-pg1-x52b.google.com (unknown [2607:f8b0:4864:20::52b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c179980e-02e2-42b5-998e-9a3efa51a5c9;
 Tue, 13 Jul 2021 02:00:48 +0000 (UTC)
Received: by mail-pg1-x52b.google.com with SMTP id 62so20246129pgf.1
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 19:00:48 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id o20sm19285728pgv.80.2021.07.12.19.00.46
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 12 Jul 2021 19:00:47 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: c179980e-02e2-42b5-998e-9a3efa51a5c9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=FV7wVbCGMMxrIWv0cXlRnxEDbi/EU7T33uAI58BfHiU=;
        b=I9wBSC0qbzn6iH0pzFRVbANuqOnUAbwdZdEpNoqu2Ru2wnHJx6OugnlgLE0T5b7/Xs
         1SyUMIPOcav02xFdHshZhfNU72HWkLv7qGndAEdJ5r50Jm47w3/XkCS+FKHZWmZC8osu
         iZJyM2T0+SP/jcQlt+S/lh6nLmqQb2X2LM2lK0eL92ynU88rQTynFVAOCH8ozHAw1ubZ
         FCHjxt0Bzu7mXo6CFkXzx9lhd5uxJUMgixaxl/ZY/5eyN5y92idbS4UInL5QM1qYWQsz
         OGvLmyj8OtLApFR1T0ays+itej2MGpFQFYoRHHpj0exWiHXlDnZJpSlR8YHCHHUcPAe1
         CMcw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=FV7wVbCGMMxrIWv0cXlRnxEDbi/EU7T33uAI58BfHiU=;
        b=jT5XPPjFd2mhzskH71fs7DGtUClEVe3e1RVQaag8MHWO9zEDgxPVRTPf4EhVSROChM
         QMb/tD2jsDoC13L+iSkAlzN4KRkA45edpfdHBFpwkL+4/L9+Yte2R+UlTXWVH03lx4uO
         g2LP2W1LAVlqSNHg5a4rLv/RkjvXdd+I8VSFMawpEvTv483WpTKIs5YUMlh/ZbMFLpFq
         7q0jR4f/hjJNJ3VMnwFI/unQJvq0mGy/ysJXqKO0AzzIXyMKpUMihETWLbh69+jroOi+
         EnE6Oya55uy3xaRAPwUho51w/w0sHfRdG3GxYeujNgFk/Ht3wr+Cx/aBSYx4I601Obyt
         vBRQ==
X-Gm-Message-State: AOAM531o9N1cJrf7prmHHip6C5jVZ4A+lq4jiL1Y0mYQA8FvP69pdfT/
	CajHjPXTya1IP+Ypb4w0GEMqjIQkPst4dZxz
X-Google-Smtp-Source: ABdhPJw4iTdhZagH3LsD7nmLQqLY0SxxEikJty4X7J2WQ12xQxcsdLG98MQ0afVc6GOX7DZiKeqmrQ==
X-Received: by 2002:a63:5f93:: with SMTP id t141mr2033622pgb.236.1626141647878;
        Mon, 12 Jul 2021 19:00:47 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH 4/4] x86/debug: move domain_pause_for_debugger to debugger.c
Date: Mon, 12 Jul 2021 18:59:56 -0700
Message-Id: <b7b3169d191c3ec86a9cf5267e661aac9c17559b.1626136452.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626136452.git.bobby.eshleman@gmail.com>
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The function domain_pause_for_debugger() is conditionally compiled if
CONFIG_CRASH_DEBUG=y.  Instead of placing an extra #ifdef inside
domain.c, this commit moves domain_pause_for_debugger() into
x86/debugger.c which is only built by Kbuild given CONFIG_CRASH_DEBUG=y.

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---
 xen/arch/x86/debugger.c | 12 ++++++++++++
 xen/arch/x86/domain.c   | 14 --------------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/xen/arch/x86/debugger.c b/xen/arch/x86/debugger.c
index 6f33f509ff..4f7c44600f 100644
--- a/xen/arch/x86/debugger.c
+++ b/xen/arch/x86/debugger.c
@@ -15,6 +15,18 @@
 #include <xen/event.h>
 #include <xen/sched.h>
 
+void domain_pause_for_debugger(void)
+{
+    struct vcpu *curr = current;
+    struct domain *d = curr->domain;
+
+    domain_pause_by_systemcontroller_nosync(d);
+
+    /* if gdbsx active, we just need to pause the domain */
+    if ( curr->arch.gdbsx_vcpu_event == 0 )
+        send_global_virq(VIRQ_DEBUGGER);
+}
+
 bool debugger_trap_entry(
     unsigned int vector, struct cpu_user_regs *regs)
 {
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 47448f2f8c..545da32c3b 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -2540,20 +2540,6 @@ static int __init init_vcpu_kick_softirq(void)
 }
 __initcall(init_vcpu_kick_softirq);
 
-#ifdef CONFIG_CRASH_DEBUG
-void domain_pause_for_debugger(void)
-{
-    struct vcpu *curr = current;
-    struct domain *d = curr->domain;
-
-    domain_pause_by_systemcontroller_nosync(d);
-
-    /* if gdbsx active, we just need to pause the domain */
-    if ( curr->arch.gdbsx_vcpu_event == 0 )
-        send_global_virq(VIRQ_DEBUGGER);
-}
-#endif
-
 /*
  * Local variables:
  * mode: C
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:16:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:16:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154966.286213 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37xp-0005Ia-7E; Tue, 13 Jul 2021 02:16:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154966.286213; Tue, 13 Jul 2021 02:16:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m37xp-0005IT-4I; Tue, 13 Jul 2021 02:16:01 +0000
Received: by outflank-mailman (input) for mailman id 154966;
 Tue, 13 Jul 2021 02:16:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=lsEr=MF=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m37xo-0005IN-0h
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 02:16:00 +0000
Received: from mail-qk1-x735.google.com (unknown [2607:f8b0:4864:20::735])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7f40fb3f-71d8-4df6-8f2e-032d2b5b96c8;
 Tue, 13 Jul 2021 02:15:59 +0000 (UTC)
Received: by mail-qk1-x735.google.com with SMTP id 18so3006889qka.0
 for <xen-devel@lists.xenproject.org>; Mon, 12 Jul 2021 19:15:59 -0700 (PDT)
Received: from shine.lan ([2001:470:8:67e:9378:603d:7cd:adab])
 by smtp.gmail.com with ESMTPSA id i2sm7373697qko.43.2021.07.12.19.15.57
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 12 Jul 2021 19:15:58 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7f40fb3f-71d8-4df6-8f2e-032d2b5b96c8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=wdFnm7RRtRSFE80bwUaEsdN3yV2SV0vP3Z2kzFYnnlc=;
        b=KLvkyE6NIO+HnpW500TF1rsk7wL1s1nRmBBwARovCS6WsK/Pw7sUPDlVNr02S9m2OM
         boL6JgcMW9ffHlkUZEKbzWa5LdW3q45N35Bbltm8t7zZrE8N0tmd+NXugEhkCT3O14ZI
         zw5+ZugrmKpWbuh9ssrdLBKsWjis3lsLp95wu3ndVBDF2DrY81FYdiyvmp/HaLn00f9Z
         s4NAOJifObvuFtnVbNpfxvqxdlhOaK0jRytrSU9vv9TVBGg1jPW82Osd6DvdQjI0GQKe
         OyvZKri+ag4HbUvKPPYiQyYm4aGEN7rrzEdlU3qi7jyVugodmtKpeb/o08xXNqnFwlTE
         MYtw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=wdFnm7RRtRSFE80bwUaEsdN3yV2SV0vP3Z2kzFYnnlc=;
        b=dezuxWT+SjF4kVAaxfoebEwrIXRipR2En5Yg9tTfh33ZLkIqZhPztIjiJVu/i4bRPq
         4++XC7orxSA7NIF2u6kCONJOGx14P+sdiddnCguFFZZXpWITzAIun3H5sOlxQmHhWywb
         EQgbgaL3coEAzLtgT4JywwTTWRCjnOj2HFxtWuUeTqNKWaIlCLntpw1i1g6+QShI43dn
         ppVnJIyFfiQExIkVD4MU7BtQhmoW6tSJHnVFTyR3ZRbsucJFLxHISsiwKxMPBUrRjkvH
         ZIAvzzZTbai49PBLjuRVrb7CFTD+jVkHCj+xTOjI7Cj9wp4gDbgKvS/lIMwTOwf32GKy
         17BQ==
X-Gm-Message-State: AOAM5327SfjgTc+XODbPKvtrDtWNAq8V77/Afee4Lal1j6ArPKKDbVRW
	kwJLI22+GZ845NNMIo03QY8=
X-Google-Smtp-Source: ABdhPJxh39sItlBbypn5s+6CpMU8gblLRgspg+iwxnB/h0Z++e0kBQYb+IZ7woPGm+m+cRaoBZWkFw==
X-Received: by 2002:a05:620a:15b:: with SMTP id e27mr1858216qkn.488.1626142558861;
        Mon, 12 Jul 2021 19:15:58 -0700 (PDT)
From: Jason Andryuk <jandryuk@gmail.com>
To: jandryuk@gmail.com
Cc: anthony.perard@citrix.com,
	pbonzini@redhat.com,
	qemu-devel@nongnu.org,
	xen-devel@lists.xenproject.org
Subject: [PATCH] vl: Parse legacy default_machine_opts
Date: Mon, 12 Jul 2021 22:15:52 -0400
Message-Id: <20210713021552.19110-1-jandryuk@gmail.com>
X-Mailer: git-send-email 2.30.2
In-Reply-To: <CAKf6xps07sbk7MnehPTKes52sst0UyaHiHjjSdEX0bFjT+E_ag@mail.gmail.com>
References: <CAKf6xps07sbk7MnehPTKes52sst0UyaHiHjjSdEX0bFjT+E_ag@mail.gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

qemu can't start a xen vm after commit d8fb7d0969d5
"vl: switch -M parsing to keyval" with:

$ ./qemu-system-i386 -M xenfv
Unexpected error in object_property_find_err() at ../qom/object.c:1298:
qemu-system-i386: Property 'xenfv-3.1-machine.accel' not found
Aborted (core dumped)

The default_machine_opts handling doesn't process the legacy machine
options like "accel".  Call qemu_apply_legacy_machine_options to provide
the legacy handling.

Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
---
 softmmu/vl.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/softmmu/vl.c b/softmmu/vl.c
index 4df1496101..f4d8630fc6 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -2126,6 +2126,7 @@ static void qemu_create_machine(QDict *qdict)
         QDict *default_opts =
             keyval_parse(machine_class->default_machine_opts, NULL, NULL,
                          &error_abort);
+        qemu_apply_legacy_machine_options(default_opts);
         object_set_properties_from_keyval(OBJECT(current_machine), default_opts,
                                           false, &error_abort);
         qobject_unref(default_opts);
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 02:37:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 02:37:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154972.286224 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m38Ih-0007hk-3M; Tue, 13 Jul 2021 02:37:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154972.286224; Tue, 13 Jul 2021 02:37:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m38Ig-0007hd-Ue; Tue, 13 Jul 2021 02:37:34 +0000
Received: by outflank-mailman (input) for mailman id 154972;
 Tue, 13 Jul 2021 02:37:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m38Ig-0007hT-1d; Tue, 13 Jul 2021 02:37:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m38If-0002He-Py; Tue, 13 Jul 2021 02:37:33 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m38If-0002PD-IF; Tue, 13 Jul 2021 02:37:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m38If-0001O9-Hh; Tue, 13 Jul 2021 02:37:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=olEWI09aVpOus7j8VzwhunTwRiumb4/TwYQliaabumo=; b=5LTAQKzw7eJkr4G19eRMkNNiTl
	ERnS4nyuURjj7SHO+9fE4J4rlwIefNYhSBuzsbcfIudMv+8d2jg+HcReqsoOpjAzxiKL2u8GOiJVP
	tkYeBFmGF3Pbcq6aod1x2CT+eWp4T/sWGBtGd+RVJiF/UVrKEoBloKbVq5G33TDUBc5Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163619-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163619: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 02:37:33 +0000

flight 163619 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163619/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    3 days
Failing since        163480  2021-07-09 16:08:01 Z    3 days   20 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    3 days   19 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 03:20:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 03:20:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.154983.286244 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m38xj-0003ca-BH; Tue, 13 Jul 2021 03:19:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 154983.286244; Tue, 13 Jul 2021 03:19:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m38xj-0003cT-6Z; Tue, 13 Jul 2021 03:19:59 +0000
Received: by outflank-mailman (input) for mailman id 154983;
 Tue, 13 Jul 2021 03:19:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=tLs3=MF=arm.com=Wei.Chen@srs-us1.protection.inumbo.net>)
 id 1m38xh-0003c4-JW
 for xen-devel@lists.xen.org; Tue, 13 Jul 2021 03:19:57 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.53]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 319a88ce-e389-11eb-871b-12813bfff9fa;
 Tue, 13 Jul 2021 03:19:55 +0000 (UTC)
Received: from AS8PR05CA0027.eurprd05.prod.outlook.com (2603:10a6:20b:311::32)
 by AS8PR08MB6056.eurprd08.prod.outlook.com (2603:10a6:20b:299::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Tue, 13 Jul
 2021 03:19:48 +0000
Received: from AM5EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:311:cafe::b7) by AS8PR05CA0027.outlook.office365.com
 (2603:10a6:20b:311::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Tue, 13 Jul 2021 03:19:48 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT013.mail.protection.outlook.com (10.152.16.140) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 03:19:47 +0000
Received: ("Tessian outbound 770f4ae52989:v98");
 Tue, 13 Jul 2021 03:19:47 +0000
Received: from 451d0fd7f54b.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 BC3AFBC2-0FDD-40CC-89C2-869917590FAD.1; 
 Tue, 13 Jul 2021 03:19:40 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 451d0fd7f54b.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 13 Jul 2021 03:19:40 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com (2603:10a6:10:2a2::7)
 by DB9PR08MB6844.eurprd08.prod.outlook.com (2603:10a6:10:2a6::21) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Tue, 13 Jul
 2021 03:19:38 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050]) by DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050%9]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 03:19:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 319a88ce-e389-11eb-871b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HE4/j+9ppXS1MAB9BJaWimkipXECDi8DSsGDky5Uqow=;
 b=WD0tkihk5rUfWy1gFQwVplD+AhrEiO1RBs0X4QpuDeD6mGcYILe75Vf5azw7s4Dm/cTifBdA47WtCYEqd5oLqBo5iA+2h+ccW9KV2qyemGlazunRSJbMSXQTB70vY/THfQR6Eq8DrpCvVaEWPw9eMd5kfkWEvbMGfNVEWIShz78=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LP9GIMl4+RB10vyGUDUEbhV98Cz4Y81/vJJhapeYQ4NcTT57v/bRhSRUkVKDBxUqBroi1lT3OgrtpLdjX//+3SxQCG9Z6c8lKCY2RA9arJNEuyViXXaBrFNjJVb5Z20SKjozh4ppKYywcNXHIjYPGU9VtDR2wGYxwwSrqpQdO0BppPA7mpOSS8e9ffxnaXKtSVq9nh21d1WVC3X1gLcLQDeqpd9+tEGbwUloFqHuYs1d/W0OODOskri6ayNPgmVkUXmHV3FoRR6m3wxM4q+sv87sLQxbdYzXkk0HeTs+gdrkWxe45lET/s1V3KH5/+ck51stybJ/iXHZ+SHr8zhsIA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HE4/j+9ppXS1MAB9BJaWimkipXECDi8DSsGDky5Uqow=;
 b=cSFjsPzfbVmldRmsYduElN+v8fWO9HuVlgx8YZ7YtBe3SjDDSgQLHuWOZtNWGv0pumP2hYkaG2SZqBeTXeKpJvx5wr2lHU7Qn4e+Ag7wsdNkxgRD47OxZeS5MkxZ5zmc3GvwugPI2FFvxwRsruHLyxl6mQzoNkSj/iLmD6zDhi0vZnPnNTBx9XQzhpeOdJzFCzsII027Ak/zqR6iVPiymfqRhn+/5v0UvlA5ttfFQnJNL5iXTRnK8r9qFvCr9bUo3HRubw21E0x8mLKvmEljf5uHtNSpr1R6HtDRJUgC+v1CYRE3lnXIZkLIS1nc2zDhxNVuZ7pYRgAdyWGUYzsJ5A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HE4/j+9ppXS1MAB9BJaWimkipXECDi8DSsGDky5Uqow=;
 b=WD0tkihk5rUfWy1gFQwVplD+AhrEiO1RBs0X4QpuDeD6mGcYILe75Vf5azw7s4Dm/cTifBdA47WtCYEqd5oLqBo5iA+2h+ccW9KV2qyemGlazunRSJbMSXQTB70vY/THfQR6Eq8DrpCvVaEWPw9eMd5kfkWEvbMGfNVEWIShz78=
From: Wei Chen <Wei.Chen@arm.com>
To: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>
CC: Penny Zheng <Penny.Zheng@arm.com>, Bertrand Marquis
	<Bertrand.Marquis@arm.com>
Subject: DMA restriction and NUMA node number
Thread-Topic: DMA restriction and NUMA node number
Thread-Index: Add3jZlm0dMwxzV2RvOni5fmVkcvwg==
Date: Tue, 13 Jul 2021 03:19:38 +0000
Message-ID:
 <DB9PR08MB68573DE6333A36646EDC75409E149@DB9PR08MB6857.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 4146CE20899D7B4495998E923DBEFF9C.0
x-checkrecipientchecked: true
Authentication-Results-Original: lists.xen.org; dkim=none (message not signed)
 header.d=none;lists.xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 6a1de324-22a4-4d5e-5b2e-08d945ad119b
x-ms-traffictypediagnostic: DB9PR08MB6844:|AS8PR08MB6056:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AS8PR08MB6056B0821AD579C645791AE39E149@AS8PR08MB6056.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:3044;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 kbIEFBRHm/Ry9NuukKguthuObQrhpTGYizfCWQEYDCtnD3Y4zD2rF04FlNyJmNAV7NsF3U1X0RQa9MW2OWj3/eJMCbGM6UYSgLQCl2NZKhQ4BcYZeqZFkuOt5R7MX4CUiHXgdTH7zX7rEflZk7B9XL+9m7r6tmeXiDaJTuV4EgKQQTZrQE7mZ3qwIE6PZzPyHFm8dqtLtqDx6pqluyamLk7Zn9xEeHwvMR8tfsqfJXnj64J5BteO9ujB68ofidUbI0d4XkViqLTi8QG71UKMqY4H5MoOHbTT643WkJl9RQId7N8AMQgKu9zEFwoLpx1sU6m6J2fj/mrJYC0Gnvevm9hfhm5tPkQr1Lm63z2TVTjJiX94/LZenkfZrV9CThGfO/s4YBXgKOtesUgswjBn1McApEhPBFTzjdBcXV3TEIwMH7dBr8njE0qJ7OW1hIUlYZIaBBl6TnUPESmVn3VJB2emvukyRWI3JbF/P/VoR9UDdA3ss0mysb24awbsVgYKOXQS53YeLhuembz3dfv9dH8zaI2Ttg/YFGw3VD3mRCl7W2xbfUeeWQRhNo/04583g3YM/yMmmA+NQfYH9NhyUSKrxPUa2cPUSPglufb1GNVIqzN3GRBGyhEucC8mC2f8Pubos/TLhQEX06POFkCma3FcAxSgw9Qm1KN7ZGQKQDJRKk6BrlSWtSYcbLU5Tg3AU7q5nPgBS18dLSmirKj4VUAVCilEY/YLXUAieezYI005i/ncdpz1EjStW3GAMnhFvcZHZGC+sbAPFq6jEnrP4A==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6857.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(346002)(366004)(376002)(136003)(396003)(966005)(186003)(26005)(2906002)(38100700002)(33656002)(71200400001)(55016002)(52536014)(9686003)(478600001)(8676002)(5660300002)(64756008)(66556008)(66446008)(76116006)(66946007)(66476007)(83380400001)(6506007)(7696005)(110136005)(316002)(4326008)(122000001)(54906003)(8936002)(86362001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?6tLfSP7e2aaFy+f0njWwmFUPfjn35XuG8iQJX6ohcmy3tXtQ3sMn/w/JEld8?=
 =?us-ascii?Q?PLX0bTwzdEjRAlwXt3HpmCPRBsEAnS/O+lSTukcDMxqneKGU7Y2rUd0SHAxD?=
 =?us-ascii?Q?ZiQ5eBTKNz0jHe0ANID8zFyKB0lKjdP9dJ0XOg7ShYGePlMP7S3bodQnMcK5?=
 =?us-ascii?Q?1ZH3tyE0mEP3kLhcqdUt8B+KzDdwqAJFd1AFN3RSji5Kb87Bt9eG3QDJPs6L?=
 =?us-ascii?Q?YfmynHYcS2Q58H8PORumS4zXV7D7vYsvBnYAyh8fcz6zcNrCs3+8maoJ8BDq?=
 =?us-ascii?Q?z4JsiSQ1kfb9rsR912P4UFiHjs5ia/cXKYl/6KWfS7efPRJQzOr36wxK4fyq?=
 =?us-ascii?Q?zGkOZP6MAnGXfuJlAdN5/Os5bM1RbYpwQF5pn5lU6nnKWCb2wMNgztjNCEyY?=
 =?us-ascii?Q?aHJ0VuSt0lZ8u/eW5HNOGVKPl14br74srBtzMcm99oejjnCoqUuaqDM7BwYS?=
 =?us-ascii?Q?DiyyAADaReceFScJlT6ikY5EXKLnM4hsrpoGhVPyfCVeG1VhCQA4SIz+qSsk?=
 =?us-ascii?Q?bbo+bQ9SP5UIMcSxUsfwtvpTXx0dB5Udhgbe+oacrVjIWEgh4SPgb+BmAZZ2?=
 =?us-ascii?Q?vYQVv7SMAg1u2nvov7zhdTwYTUG5X38bUqwUc7NTFmGnX164PgYVt7walR38?=
 =?us-ascii?Q?f3n8REe9VvYkAbkykgCl1p2EAlNZLsNEL+186SPpmOLIifx69TTiLYiqLZFE?=
 =?us-ascii?Q?+DThDHeo4Ri4vtapQ0YAMIu+kXHjwPgiH1/nOU6CP1c6D1V6AuPB5b7aVr6i?=
 =?us-ascii?Q?hDzoF1lXpfU4rPU3P79zcvxqSYgFfrFLmQ3LxFJZ7XZAFCpc31JpUk6T16+5?=
 =?us-ascii?Q?USx9YFNNlLUTC1lixO7PS3Zg7XQlgm3bMatDjGAFSZAgyBRZj8xEcCVEkckw?=
 =?us-ascii?Q?BY1B5WvaHOXLoJ+f/61/NIJSWaU4sdn48TRGTG8k3efr61kim3AcVrLyZuCa?=
 =?us-ascii?Q?O1JfsdZTRcGPYmI8oABAIAnhcjuVKtjK/pznUIDFHQVqFImJFGk45fmp2n1M?=
 =?us-ascii?Q?+ZLVnSMoKA+Ti9mG4d3Yi2SfVlpB4Mph0miJ54/Ql1tHwca71VQP1kBZdmA0?=
 =?us-ascii?Q?eLUZ1yvcflck6qkfr46zV/G0HIhxeQZfGIb1W0pHzMDZyBM0eK43ufPzUjWi?=
 =?us-ascii?Q?jYlbJ3iuJL7BIbdAs54yqCfxyUi/4D05aTO2ZPHeXUUOYVB5WxWZ60m4MLVp?=
 =?us-ascii?Q?51svlX3yOJb6McA/Ielo/pvq4k4I6tLJaB8ugX0WIN+jUNkpu6JZybxt3UHS?=
 =?us-ascii?Q?AJF8l60sxg58EFmrwjR4ZUtowmL0MYGjM2wqTUJg2NthTTcTQGRUkyv4ZNz3?=
 =?us-ascii?Q?3Qc=3D?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6844
Original-Authentication-Results: lists.xen.org; dkim=none (message not signed)
 header.d=none;lists.xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	eac58736-9881-4b72-2c5b-08d945ad0c4c
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	YkL3w+ZKIyr4sgYYAcNOFk6zYIqcZiTs2M0lFdIAZf7kO7KFhLutenMc6k3RyGVx+DeAe85Ulb4LRZ/vnB9DIPt9uXvN701CaILupctP0bMu9fJrokPL/wIHW8RtIX5nDRM/4w1eC0im0pVu+FdtDMmiHxL1Ovo7Le8UEcAxtrVSgFKFZIjsROvGNUy5q+8FrZIeR1wSfg41Xow9yKE0i3Cz5nPeLrvk9QuWTZILfdLUDxd+jfAN+Y11Dhp660m60cL3QXFLV3I3QvMzuHAFxii+YFOLB4RhdjQPD9a2oi7Y23z9yhnP6DlpK+j/FHKaYDqLyd28TpzlOExhIG+Umvm6Hcz44H9uuelE21FCPlHy7AakIpveS78xOmMoL77H73T1gbNHql+neAh49k1jzJtqfgMoDt/7FM9k165Ft/z1DXI1QDWRYj97VdXeTwexM60YiKSJO9ZLLsqvmNSLJoZPTybJPWmo6NP/imwFsmmeB0ssfDRJqCmpCmCUjeNEghJtmgo5Gn8D0gokGllExLU/L4md6W6cqgUE4YLdvL1U4jDDXGIjQn4Gw1ZU5yXeykA4rww2nHi59Oo0+sObkpo9U0/X5/+1iuMTB9LEMqbW+8dmbgJSbgfmkNYsQx6zSPcmBKen2xW5tHSN0WSbsxvhbzYdahiCsr1wdy5mMcRGu8THz/R87a9eGLc0rUgrnsxaFrLUUrmRjZGEy5pyMK7VU2p+gKMCF6GwAOy6pBcWCFcxZyCaGqBndrPJeavscYQ8s8vGZoh7JUUN4+O9vuZ7Bn9Zzj/w7VgZWx7oc6Ep8o+JVGr+nHU8d/kt/wW1a5X5wzQhH6OYrqRZpeK4gw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(396003)(39850400004)(346002)(136003)(376002)(46966006)(36840700001)(2906002)(47076005)(8936002)(110136005)(356005)(81166007)(316002)(336012)(8676002)(9686003)(186003)(6506007)(55016002)(70206006)(70586007)(26005)(7696005)(478600001)(5660300002)(36860700001)(82310400003)(4326008)(54906003)(52536014)(33656002)(86362001)(83380400001)(966005)(82740400003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 03:19:47.6148
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 6a1de324-22a4-4d5e-5b2e-08d945ad119b
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6056

Hi,

I am doing some NUMA testing on Xen. And I find the DMA restriction is
based on NUMA node number [1].
    if ( !dma_bitsize && (num_online_nodes() > 1) )
        dma_bitsize =3D arch_get_dma_bitsize();

On Arm64, we will set dma_bitsize [2] to 0, that means we don't need to
reserve DMA memory. But when num_online_nodes > 1, the dma_bitsize
will override to 32. This may be caused by the Arm64 version
arch_get_dma_bitsize, it may be a simple implementation and not NUMA
aware.

But I still quite curious about why DMA restriction depends on NUMA
node number. In Arm64, dma_bitsize does not change when the NUMA node
changes. So we didn't expect arch_get_dma_bitsize to be called here.

I copied Keir's commit message from 2008. It seems this code was considered
only for x86, when he was working on it. But I'm not an x86 expert, so I
hope Xen x86 folks can give some help. Understanding this will help us to
do some adaptations to Arm in subsequent modifications : )

commit accacb43cb7f16e9d1d8c0e58ea72c9d0c32cec2
Author: Keir Fraser <keir.fraser@citrix.com>
Date:   Mon Jul 28 16:40:30 2008 +0100

    Simplify 'dma heap' logic.

    1. Only useful for NUMA systems, so turn it off on non-NUMA systems by
       default.
    2. On NUMA systems, by default relate the DMA heap size to NUMA node 0
       memory size (so that not all of node 0's memory ends up being 'DMA
       heap').
    3. Remove the 'dma emergency pool'. It's less useful now that running
       out of low memory isn;t as fatal as it used to be (e.g., when we
       needed to be able to allocate low-memory PAE page directories).

[1] https://xenbits.xen.org/gitweb/?p=3Dxen.git;a=3Dblob;f=3Dxen/common/pag=
e_alloc.c;h=3D958ba0cd9256c8270e38585d272be2bf5cc0679e;hb=3Drefs/heads/mast=
er#l1876
[2] https://xenbits.xen.org/gitweb/?p=3Dxen.git;a=3Dblob;f=3Dxen/common/pag=
e_alloc.c;h=3D958ba0cd9256c8270e38585d272be2bf5cc0679e;hb=3Drefs/heads/mast=
er#l226


--
Cheers,
Wei Chen

IMPORTANT NOTICE: The contents of this email and any attachments are confid=
ential and may also be privileged. If you are not the intended recipient, p=
lease notify the sender immediately and do not disclose the contents to any=
 other person, use it for any purpose, or store or copy the information in =
any medium. Thank you.


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 04:45:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 04:45:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155000.286267 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3AID-0003yr-BD; Tue, 13 Jul 2021 04:45:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155000.286267; Tue, 13 Jul 2021 04:45:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3AID-0003yk-86; Tue, 13 Jul 2021 04:45:13 +0000
Received: by outflank-mailman (input) for mailman id 155000;
 Tue, 13 Jul 2021 04:45:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3AIC-0003ya-4j; Tue, 13 Jul 2021 04:45:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3AIB-0004Y4-Oy; Tue, 13 Jul 2021 04:45:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3AIB-00074o-GX; Tue, 13 Jul 2021 04:45:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3AIB-0007m4-G3; Tue, 13 Jul 2021 04:45:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=KXBA4mrYPAGJR65MCx5UbUbkWTLEYp2gQlfZx/8z4P8=; b=r3GW7fTxPMJubMMwtZkKxBjC2O
	P6bjL1q8ytPjhscJCGgjPH/VVSVSxD+4TIKD7B9Rmesf7kNzUGHUaNAmCJ+l0/1Wgiseq8PEIHRhw
	c0oh5bLgwhDImEETV6Gxz1kqLfjvt4wbLJgqcpdEB4ZE3MXDTrwJm2W3zxzb3hUbW4sI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163610-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163610: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 04:45:11 +0000

flight 163610 xen-unstable real [real]
flight 163626 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163610/
http://logs.test-lab.xenproject.org/osstest/logs/163626/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    4 days
Testing same since   163478  2021-07-09 15:23:45 Z    3 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 05:59:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 05:59:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155008.286287 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3BSG-0002vY-5R; Tue, 13 Jul 2021 05:59:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155008.286287; Tue, 13 Jul 2021 05:59:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3BSG-0002vR-1i; Tue, 13 Jul 2021 05:59:40 +0000
Received: by outflank-mailman (input) for mailman id 155008;
 Tue, 13 Jul 2021 05:59:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3BSE-0002vH-Iu; Tue, 13 Jul 2021 05:59:38 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3BSE-000624-BT; Tue, 13 Jul 2021 05:59:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3BSE-0000dp-4W; Tue, 13 Jul 2021 05:59:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3BSE-0001ai-41; Tue, 13 Jul 2021 05:59:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=iJabSP3VtX/hqCXe0lZ1StGkaSxtiJmYOzaslC+jYBk=; b=Ko9+oPVcgWuKZvkevDYPl1qMhQ
	6J9WgFlRUBeJCKrRUgqyhY2iIZ+e5uGtn8JR0YicDL+kAHgQgo32PNg4HzSF4ywY5aDGfGBQiwPUq
	iPuMPv6hQTcwcTsdqFKpGt0dxKzgXyhUmYdPReWOz6Z7NhpfpabUkRf9mYNO2l2WSPdE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163627-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163627: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 05:59:38 +0000

flight 163627 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163627/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    3 days
Failing since        163480  2021-07-09 16:08:01 Z    3 days   21 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    3 days   20 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 06:28:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 06:28:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155017.286307 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3BuT-0006KN-Hw; Tue, 13 Jul 2021 06:28:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155017.286307; Tue, 13 Jul 2021 06:28:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3BuT-0006KG-Em; Tue, 13 Jul 2021 06:28:49 +0000
Received: by outflank-mailman (input) for mailman id 155017;
 Tue, 13 Jul 2021 06:28:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3BuS-0006KA-6y
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 06:28:48 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8792dea2-1874-4e82-a2bb-07d38347eeaf;
 Tue, 13 Jul 2021 06:28:46 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2058.outbound.protection.outlook.com [104.47.14.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-TsgJPXppNbKl3VgTu-LKlQ-1; Tue, 13 Jul 2021 08:28:44 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2446.eurprd04.prod.outlook.com (2603:10a6:800:4e::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Tue, 13 Jul
 2021 06:28:42 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 06:28:42 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0008.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 06:28:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8792dea2-1874-4e82-a2bb-07d38347eeaf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626157725;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=7zd019r5dabsAbw9PEOYqJoOKhTQ9EnewFNJ+EinRTE=;
	b=Sn/WApGIB9sKf4vFLXF+/HUyaO8KRdMAGycXXK0DLN5qzQsIdRMn+2+9Nz2bVtvqH0toYD
	Rceg/Mbo4T6LuswD24qesH64eTltHXJ/27QNfTOx7J8kNEbizC7llAyQOs/hD3HG08Ull3
	bz9oWn4lrYBXf5nFmCvL3m6RgWWSJOk=
X-MC-Unique: TsgJPXppNbKl3VgTu-LKlQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UxrO3ErhX1EjxGp7/GM77hGL9UZ239Lq7jyKNu3dRvWUHmTWGM7PnGqOq6PPQAVPQ/fEpB7zOJiwnw1BLuKhKaJEYT9R1jdFx7GB5/8Nd1DnK0AjRWOf7FALh1OCAeBWO1CsAO9CH+AXJL+zJDgDN/71PaV72KW7z/Db/+koJK233UgkYdxeh8IKeS7+/CiHpBLJ4qdz3sgvOUM47PyIAR+aSGvCC1Ssu7BXTFISn2qE3/kD+nWCACbBgUFF4z9j+D9T9d9fsWzCeSyOxEyXWQ3JSwS/Mz7dXxr11Gg2A/gWgtn7vaAvbhPhFQbCy25NowKCaeslbt3nK9felwlXqQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7zd019r5dabsAbw9PEOYqJoOKhTQ9EnewFNJ+EinRTE=;
 b=A1d2uMiXU7bLW5HWdGxOg4SI0eQKvgGnl0v6UZ5SaBL5XASnsKCnsX9dCI5BW9l3ts5q2SII+OzTu8iBcGS3svXtSQ82z1cfVyPOi8BtW9rGOD7UoW6yYP3cam8jDgdbO9SgUJ8O/t7ddx8etwfiQuHyrHFP2/O9GMfzaSK6g6fysSkyV+i4uQVeKNcxdpF5H9lvlsb+YqOqNkTBLY49pqFcGW8Tn2/h8EMXfVun0GuiaU0R9r3Z64Q9XffrVon1N2sP19F0iCxZzxGDrn/ftroPilO0MKDdOV3MoDV9vyhhrs+fB+iz0oKrZA3ZgahGGx+qS/qkrjMsEyKKw2HuDQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2 01/10] xen: Implement xen/alternative-call.h for use in
 common code
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org, Wei Liu <wl@xen.org>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-2-dpsmith@apertussolutions.com>
 <2a794038-f4f5-1525-5af8-d89b687a8043@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <4a55dc14-5d02-2594-38e8-f732ead164a6@suse.com>
Date: Tue, 13 Jul 2021 08:28:44 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <2a794038-f4f5-1525-5af8-d89b687a8043@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0008.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 13dd9262-a8fc-456b-48db-08d945c77566
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2446:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2446D0E3269042B6C75BAA39B3149@VI1PR0401MB2446.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	XzqrYtgma+aALz53p/ts9id9Od0DguyFzEKIUzRvw2Zawuf7b+5e4G7IItJ2o1gcen84q1JxUtXixk32QM+/9+pxj1qHXP9YekHJqilwVcQipsmbFseMhopF/1ZHJe56rCQUmqjM4GdT9ozNZF0cCpnEgpl4NcMCWT+a+2xO205taljIhISJhgNSgBmo8EUhjj7SMH7BGgky3iGAH1FWgsyRv7BbKd9R8Npv2EkCQB5M0DqCJHRyquzwUK1Ormeu6FlyGZdVRVZWIbDwvPm7mm1FM5S9yjsaic6O/X0DN5p2mHri/Q6x71/N1a1JqAmZ+sGX40glMeIwSwhVdHAK3Hj54XouJe1U8K1AsaocPAs9IzS5EaUrtlKXcYX4N7L1eJ8LY9epM1SeWGYBZJL1bfwKN7cQ6x415dtHR086//ZSiGBiJi+tdFbGjTGQisCYZZAR0oNgJWEeo8N8VqpVfJGjmw4j5y19tvZ4XeaRv6DMvT0vLi017006kJfVBm/CCHQ1rTzOFtMLRGFvxc0duevFmH1LPJiZwbKEpOfOGprxhcNyJIUlUx1zDTvixy4NwYPRL3i6FW8qOZlGhj9m682Bdtlx8wG5KeZlNxA8X4zZjjdFX1L2CEt/71hM7jtNn8Cx8Oho1++nJ/AqgxQ4wc0CZ8XKOmQ3jJaLJG5l+Hh6WbjK+hG+8uirAmAtq8WZYazUvcmKfQKzrLqBj8UXk/eg86YAaLcNtmznDJLRSrg=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(366004)(39850400004)(396003)(376002)(956004)(66946007)(31696002)(86362001)(16576012)(316002)(26005)(2906002)(5660300002)(36756003)(66556008)(4326008)(2616005)(31686004)(54906003)(8676002)(6486002)(66476007)(110136005)(53546011)(8936002)(38100700002)(478600001)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 13dd9262-a8fc-456b-48db-08d945c77566
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 06:28:42.2920
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ni7Y7b7Ci/Xj7Cg5fDJmmmsmPwAQ19SrIqjPutmSgZMW/wf/2t6GfBvLfrRnl2O2m9ZttAUQQoSWarF9jBi+jQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2446

On 13.07.2021 01:48, Andrew Cooper wrote:
> On 12/07/2021 21:32, Daniel P. Smith wrote:
>> diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alternative-call.h
>> new file mode 100644
>> index 0000000000..11d1c26068
>> --- /dev/null
>> +++ b/xen/include/xen/alternative-call.h
>> @@ -0,0 +1,65 @@
>> +/* SPDX-License-Identifier: GPL-2.0 */
>> +#ifndef XEN_ALTERNATIVE_CALL
>> +#define XEN_ALTERNATIVE_CALL
>> +
>> +/*
>> + * Some subsystems in Xen may have multiple implementions, which can be
>> + * resolved to a single implementation at boot time.  By default, this will
>> + * result in the use of function pointers.
>> + *
>> + * Some architectures may have mechanisms for dynamically modifying .text.
>> + * Using this mechnaism, function pointers can be converted to direct calls
>> + * which are typically more efficient at runtime.
>> + *
>> + * For architectures to support:
>> + *
>> + * - Implement alternative_{,v}call() in asm/alternative.h.  Code generation
>> + *   requirements are to emit a function pointer call at build time, and stash
>> + *   enough metadata to simplify the call at boot once the implementation has
>> + *   been resolved.
>> + * - Select ALTERNATIVE_CALL in Kconfig.
>> + *
>> + * To use:
>> + *
>> + * Consider the following simplified example.
>> + *
>> + *  1) struct foo_ops __alt_call_maybe_initdata ops;
>> + *
>> + *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops = { ... };
>> + *     struct foo_ops __alt_call_maybe_initconst foo_b_ops = { ... };
> 
> It occurs to me after reviewing patch 2 that these want to be const
> struct foo_ops __initconst ...,

__initconstrel then, I suppose.

> and there is no need for
> __alt_call_maybe_initconst at all.
> 
> The only thing wanting a conditional annotation like this is the single
> ops object, and it needs to be initdata (or hopefully ro_after_init in
> the future).

ro_after_init and initdata can't be alternatives of one another; ops
(until be gain ro_after_init) need to remain in .bss (or .data).

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 06:47:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 06:47:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155029.286318 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CCr-0000L1-5Z; Tue, 13 Jul 2021 06:47:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155029.286318; Tue, 13 Jul 2021 06:47:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CCr-0000Ku-2B; Tue, 13 Jul 2021 06:47:49 +0000
Received: by outflank-mailman (input) for mailman id 155029;
 Tue, 13 Jul 2021 06:47:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3CCp-0000Kn-9I
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 06:47:47 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3a2878b2-e3a6-11eb-8726-12813bfff9fa;
 Tue, 13 Jul 2021 06:47:45 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2111.outbound.protection.outlook.com [104.47.17.111])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-23-uy6E8l3HP2GyrkibL8zRfQ-1; Tue, 13 Jul 2021 08:47:42 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5471.eurprd04.prod.outlook.com (2603:10a6:803:d0::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Tue, 13 Jul
 2021 06:47:40 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 06:47:40 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR0501CA0066.eurprd05.prod.outlook.com (2603:10a6:200:68::34) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19 via Frontend
 Transport; Tue, 13 Jul 2021 06:47:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3a2878b2-e3a6-11eb-8726-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626158864;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=/8aF1fBFzzq9HM3x/0tgyw8+NTiqGYnkNgO6hpnH6mg=;
	b=TBuSzH2w4DaxAWfcwItzRg5g2HeHVXOhDYWkncmN9vmyNgbYeQKirFDVyggv2Iu3jR3Tdk
	3rRm9ebBJ7+VIZyeYIuHk65KTeh6hzRcVpnA7TCpdMibS/xIpF1iinvjwaQudyuUon1SdH
	zw63bIqQWFHhoZ1DWACi3dxHxRnfpzA=
X-MC-Unique: uy6E8l3HP2GyrkibL8zRfQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MCLJCSyE5bEpxqg8iChOXDfA9g4NrZYHTT/cUFH+bgwR2YYQX/Sk7lk8vQ68wZGECFFh73nW2TOw5igcC1l02aZdiIM3hPz/JBUdnj8wnGGgc1/e2zY+/A2ETZBPpHw+0PT5OWa7wjMgaviH3q4CnfjeR25ilNUrMqJvHWOM1PAh4uBZM+xUu6GWCo7ASIxYY+zfR/ek5BOp+XvFHT21J4FRzD7BQwK4RRGjIUud9n23xF7FR8IU3wgtk8ZA/sl7Ye5iCIaZEO1xWzpMf0bdceH6elEA5+sP6vQn6OSp9rvZpT0/9w7FeqswL+ZNZdR94e+sDY+jHyf37Vcqt3Lsrg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/8aF1fBFzzq9HM3x/0tgyw8+NTiqGYnkNgO6hpnH6mg=;
 b=WIS8CYZK7bwU4DJFKMxhJWQCCDlvZayiMtZ41l/qlbIvlk2ilztQ+8IeAkiKwjSVTe0RqIkD//7JlKUqp9fUNEJRUxFGvxsPPYS7r+TVBoEigqwb67J1jtDQVql1szZKqh5w3upVMsl2wWKAtrBcEz7ZxKin9ecpAUO43bQ5g4MvXSK+sd0JDCqnIuAYDZp1OzpPVhvZFnB5BWgpEfYSKDbaKdOWgHKogTljf8oqBrDE0R8Ck0f0iSViWULQ75VlecJ39TTI2RgcN4Q5U5jGh6QAT1bDUFAJzYaZ0I+sy+hQmNsp9g1jLD6eQCvI1X3EGAO9Knuv5cR4s8fv+PAX4A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v4 3/5] tools/libs/foreignmemory: Fix PAGE_SIZE
 redefinition error
To: Costin Lupu <costin.lupu@cs.pub.ro>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
Cc: xen-devel@lists.xenproject.org
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <83beb95e3633b1aca7801fd8592406e2057f9bdc.1623155575.git.costin.lupu@cs.pub.ro>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <bcc8d8c6-f9d2-6fdc-4533-398b7f261126@suse.com>
Date: Tue, 13 Jul 2021 08:47:42 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <83beb95e3633b1aca7801fd8592406e2057f9bdc.1623155575.git.costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM4PR0501CA0066.eurprd05.prod.outlook.com
 (2603:10a6:200:68::34) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a804cef7-0803-4360-312e-08d945ca1bb2
X-MS-TrafficTypeDiagnostic: VI1PR04MB5471:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54714FA10E538F6BD5D2FE32B3149@VI1PR04MB5471.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	hrejV5Ac8wL2EQ5JY87WGOVj3CzOGFDevDFtqhE81bx4qVqX2JwMpdxydKma91bXHK4HiZ2lbqktxedVaNcfbO60b7eG87KI8MQmH8UH2W4rx+xFwj3GqNAqYPIaVbE4aRU3Qra9HksJtxFE9R5DbDzwQnyuw7KCWVlAZyEDWYBwOiucZZGCvlmjV2VGlqH9FhgVBrg0oVoBQe/Rl7MmYjhOQ6HPUoBvjmm4EOctlhuFrWZvN+NNh59XajRAhxDVV2HdRsVW0gteu59MDMLfHJEiybgYTG2x5aR7chekRvyOeNTWjKJhV1XrsuffFlhPea1CwslT3R8PZRE96d+xLdwhGGOuRaTn0miQrOnQnPGYFYqEsjgZA0hn7M2hLkz8HyZyn1nfiu/DKrcZGY1H5ynyNk6OjrvEWuk6qieUGqQRCgo/zrukP+4WJSCOZh2CdMrn1s4Jxl7CvwD+cw+TrOvtTo29UlpS6O7p2A6ii3Whd3IdlRN7RcY5ahS6NMDxHRCV4c8z8MBvGz+YdSZ0GHj//jt8yJPLv5fXJxRol2Whcs+sKY2hCE3DQIxBdOajIvhF89QcHFIp5ErQH7n5z20mlynu6rFRD1nQJE4ujPYwNYQ6CzGel+YvGkyoopYqOcIny1VDY8WPjpFK4MDCxydSypdaoqJ7mHKFBK4bVgoJMCV+/A73jzNPbz9QUwC/KltBvhTPr4SqAIBGRlXi8JcCdDaQNK7iPYf6XpCgF60=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(376002)(366004)(136003)(39860400002)(16576012)(8936002)(31686004)(2616005)(316002)(86362001)(38100700002)(5660300002)(31696002)(478600001)(26005)(53546011)(4326008)(6666004)(30864003)(36756003)(8676002)(186003)(66476007)(66556008)(2906002)(6486002)(110136005)(83380400001)(66946007)(956004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a804cef7-0803-4360-312e-08d945ca1bb2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 06:47:40.1788
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 9v618D4EYJnjhpcZkVijktLY7wMQW+V2UsGuG+Kcjf9B1dRlMMgSzoM7FcNI/LyCCNtmct1vtSszjmAIK0anQQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5471

On 08.06.2021 14:35, Costin Lupu wrote:
> --- a/tools/libs/foreignmemory/private.h
> +++ b/tools/libs/foreignmemory/private.h
> @@ -1,6 +1,7 @@
>  #ifndef XENFOREIGNMEMORY_PRIVATE_H
>  #define XENFOREIGNMEMORY_PRIVATE_H
>  
> +#include <xenctrl.h>
>  #include <xentoollog.h>
>  
>  #include <xenforeignmemory.h>

At the risk of repeating what may have been discussed on irc already yesterday
(which I would not have seen), this is the cause for the present smoke test
failure:

In file included from /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:39,
                 from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:36,
                 from private.h:4,
                 from minios.c:29:
/home/osstest/build.163627.build-amd64/xen/xen/include/public/memory.h:407:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(const_uint8) buffer;
     ^~~~~~~~~~~~~~~~~~~
In file included from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:36,
                 from private.h:4,
                 from minios.c:29:
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:101:34: error: field 'arch' has incomplete type
     struct xen_arch_domainconfig arch;
                                  ^~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:152:34: error: field 'arch_config' has incomplete type
     struct xen_arch_domainconfig arch_config;
                                  ^~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:182:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_pfn_t) array;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:263:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:280:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:301:26: error: field 'nodemap' has incomplete type
     struct xenctl_bitmap nodemap;/* IN */
                          ^~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:337:26: error: field 'cpumap_hard' has incomplete type
     struct xenctl_bitmap cpumap_hard;
                          ^~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:338:26: error: field 'cpumap_soft' has incomplete type
     struct xenctl_bitmap cpumap_soft;
                          ^~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:418:13: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
             XEN_GUEST_HANDLE_64(xen_domctl_schedparam_vcpu_t) vcpus;
             ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:473:5: error: unknown type name 'int64_aligned_t'
     int64_aligned_t time_offset_seconds; /* applied to domain wallclock time */
     ^~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:480:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:533:13: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
             XEN_GUEST_HANDLE_64(char) path; /* path to the device tree node */
             ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:544:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint32)  sdev_array;   /* OUT */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:685:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_policy; /* IN/OUT */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:735:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint8) buffer;  /* OUT: buffer to write record into */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:909:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint64) buffer;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:963:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_domctl_vcpu_msr_t) msrs; /* IN/OUT */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:984:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint) vdistance;
     ^~~~~~~~~~~~~~~~~~~
In file included from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:38,
                 from private.h:4,
                 from minios.c:29:
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:56:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(char) buffer;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:73:26: error: field 'cpu_mask' has incomplete type
     struct xenctl_bitmap cpu_mask;
                          ^~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:155:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:165:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:174:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(const_char) keys;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:188:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:217:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint64) trans_pt;   /* Px transition table */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:225:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint64) triggers;    /* Cx trigger counts */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:317:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint32) affected_cpus;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:474:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_sysctl_lockprof_data_t) data;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:504:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_sysctl_cputopo_t) cputopo;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:537:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_sysctl_meminfo_t) meminfo;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:563:26: error: field 'cpumap' has incomplete type
     struct xenctl_bitmap cpumap; /*     OUT: IF */
                          ^~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:665:13: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
             XEN_GUEST_HANDLE_64(xen_sysctl_arinc653_schedule_t) schedule;
             ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:707:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(char) buffer; /* OUT */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:738:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(physdev_pci_device_t) devs;
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:814:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint32) features; /* OUT: */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:887:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(char) name;         /* IN: pointer to name. */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:912:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(uint8) payload;     /* IN, the ELF file. */
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:975:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_livepatch_status_t) status;  /* OUT. Must have enough
     ^~~~~~~~~~~~~~~~~~~
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:1059:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
     XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_policy; /* OUT */
     ^~~~~~~~~~~~~~~~~~~
In file included from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:55,
                 from private.h:4,
                 from minios.c:29:
/home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/arch-x86/xen-mca.h:431:5: error: unknown type name 'xenctl_bitmap_t'
     xenctl_bitmap_t cpumap;
     ^~~~~~~~~~~~~~~
In file included from private.h:4,
                 from minios.c:29:
/home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:468:34: error: field 'arch_config' has incomplete type
     struct xen_arch_domainconfig arch_config;
                                  ^~~~~~~~~~~

Clearly xenctrl.h cannot be included freely right now; it expects other
header to have been included first. Question is whether that's what needs
fixing, or whether the new #include wants prefixing by whatever prereq
headers that are needed. Or whether, considering that libxenforeignmemory.so
doesn't depend on libxc.so, including xenctrl.h is inappropriate here in the
first place, meaning that the tool stack's PAGE_SIZE abstraction may want to
move to a separate header which is not tied to any particular library.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:22:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:22:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155037.286335 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CkY-0004Vl-W6; Tue, 13 Jul 2021 07:22:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155037.286335; Tue, 13 Jul 2021 07:22:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CkY-0004Ve-SP; Tue, 13 Jul 2021 07:22:38 +0000
Received: by outflank-mailman (input) for mailman id 155037;
 Tue, 13 Jul 2021 07:22:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3CkW-0004VY-Vr
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:22:37 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1836dca8-e3ab-11eb-8728-12813bfff9fa;
 Tue, 13 Jul 2021 07:22:35 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2052.outbound.protection.outlook.com [104.47.0.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-4-mCZHXbfTOuCRdYVv55B5vA-1;
 Tue, 13 Jul 2021 09:22:33 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Tue, 13 Jul
 2021 07:22:31 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:22:31 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:208:14::37) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.21 via Frontend Transport; Tue, 13 Jul 2021 07:22:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1836dca8-e3ab-11eb-8728-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626160954;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=YGOrdCOMlh6d+dkgExNRzWBXwcOU2OHQ/LG4J2hiiWs=;
	b=f6MxehUT+wvodfOt0JvJxrTt88eKz5DinXLdQN461/qSJSQ6xqjuBrsofM1KvCrfTXtmAj
	t+7vZLRFU5UIdFLvi128LVnrLYJlhZciSmCqevz1QctA1Yok+VrvXIiR/lSY8BORrNuUU+
	Q75T3/Z7zSYD+e91PE3Np0xA4LSdVI8=
X-MC-Unique: mCZHXbfTOuCRdYVv55B5vA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LdhKHY3PW+71sqJ4yTILHf+KO+y32UQINGuv0diXdfM2krUWHwMQWvQdlxcQmpi3k26oALUKQXgXaoeXHrGQcYYm/b0QwhjmYKXbUMftD9fjEKRTWWXdQzxaPSgzWWCiaJm8/6m6u9qXI9KphFsYZtdQMWZeRoilsjRigfmz9Ez+oEeyGuVcmLUv4JxbavuzlDIOAE/xQ/e9S40kuK6Exi43918Yomh+NYt+5fSSDg5pR6WkjR6BtmuWflqUEd+M9pvaM0LoSmemKLfDalxDYhyMJf+779ojw3EziXbRxojeJfkUxS/+YS/2RteyLbD2hCpmFjTxT65hDqRxQGdCSQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YGOrdCOMlh6d+dkgExNRzWBXwcOU2OHQ/LG4J2hiiWs=;
 b=j/8Sjhf1ejpXy6HWlhZIWWspJX1z1ZJ5kw9SvW19+mCWrmFQyhtfrTu1UkakcWX4AO1n4C6J0Y1yUclT8r3qFzW/nbkdlSIZnLlQkpVEgSwgSAH790sXeTxBAiK6Uj0/Kk3do6HoAsGhskdq4OPvDCzdbryyFwoivHRQ9HY9Kxs+BAqYinU5vGheEy0BMN5NtH5ITYCKpMvdFlSBJXzPkGoJpI4xNlhJ8wZAkQP7sxJWBeuse7lsBl8WZzcsQD7Y9PTY5XMxrYZWiLwyQyMk5IMbMz2BbJoyd+LJpFm7LKuVbqtww2TIOUDWPtXYHTYbpj+hwOnrNX6G7m6q7oQn2Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH] x86/AMD: adjust SYSCFG, TOM, etc exposure to deal with
 running nested
Message-ID: <cd23fd18-66f9-55c7-4a1c-a50d66628d69@suse.com>
Date: Tue, 13 Jul 2021 09:22:33 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR03CA0024.eurprd03.prod.outlook.com
 (2603:10a6:208:14::37) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0873bcc6-d74f-4370-4c66-08d945cef9dc
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2829B9777A763F77BB2CC4A0B3149@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	4012Cm59RuDHPmALJLatlAGUOt+Epz90RTX5Afri4KQ5HXBZbVQFyg7TAyAVumhWsHDV42y+XPo7uiJzz4uQiCMAnVN81yQGq+pHH6j8UGsIfO8B/xBSeBLL7EEDFGkNcSzUs5MVdwkT+E90eoLAI/OIGbDwTwIex/nRwnSDp0+kEkNC2pWJvd20vkgC0zDDpE0c/Cp+2tFBfdN8EaszbnPSKq1bIzUDfxr9db6p1rB84KiAna0JVROufUgp430xOYqH/RTSmCc8T1k+wNaaHukm/LGsazPqh3Lj0N72cE8ghk1bdNdEjepvD+vA1+bgLZL273TFKrwP850ReV39NfAN7zG6tQN466YvYs90ASl4HdRHJvn/lhtsR4ooccGRBou7uuR7SsSAGFULcpR88HCruxN1lIuOzhz6L1JwF1wxgQeVDBMxNTuzDn42guBX7kTPhTE3AK8QcBiUCo2EYOJF9QUWyPhIG8uZ0DFq/56UfLAvjMe0ut8E3yUs9YkcFaC+X8o0otuuYNQ9q49YuMYcePXpIiHka5ZQcnpCqHdfcjthBNlz1RPa749+jwLYbVnVYhclk4/lJNbqYPjC+DJOVKnCXoUcFH8VlREQaC6ONlLh08NIMXjwWg58COeXdujFJQiuAS3BK6HbDvy8EcPeDxLC95x5be3BxYLHUEyglfTpUpNGNEIux7cophaqAM6ztquOIHPWY8MvWShvhHGj5yDKEftcXUJfLs7SXKE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(39860400002)(396003)(136003)(346002)(5660300002)(26005)(6916009)(6486002)(186003)(2906002)(36756003)(478600001)(8676002)(31686004)(66946007)(66476007)(66556008)(83380400001)(16576012)(316002)(54906003)(31696002)(956004)(86362001)(8936002)(2616005)(38100700002)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0873bcc6-d74f-4370-4c66-08d945cef9dc
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:22:30.8119
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: gV8m3NJsRGwIfK3L1kOeqVp8muQZI4TiWreDFVgl1nTT5AlqlZBZzNTj4MnFXcFDGQkilNY9z2oFl+blIvoLmg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

In the original change I neglected to consider the case of us running as
L1 under another Xen. In this case we're not Dom0, so the underlying Xen
wouldn't permit us access to these MSRs. As an immediate workaround use
rdmsr_safe(); I don't view this as the final solution though, as the
original problem the earlier change tried to address also applies when
running nested. Yet it is then unclear to me how to properly address the
issue: We shouldn't generally expose the MSR values, but handing back
zero (or effectively any other static value) doesn't look appropriate
either.

Fixes: bfcdaae9c210 ("x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0")
Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/msr.c
+++ b/xen/arch/x86/msr.c
@@ -367,7 +367,8 @@ int guest_rdmsr(struct vcpu *v, uint32_t
             goto gp_fault;
         if ( !is_hardware_domain(d) )
             return X86EMUL_UNHANDLEABLE;
-        rdmsrl(msr, *val);
+        if ( rdmsr_safe(msr, *val) )
+            goto gp_fault;
         if ( msr == MSR_K8_SYSCFG )
             *val &= (SYSCFG_TOM2_FORCE_WB | SYSCFG_MTRR_TOM2_EN |
                      SYSCFG_MTRR_VAR_DRAM_EN | SYSCFG_MTRR_FIX_DRAM_EN);



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:28:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:28:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155042.286346 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CqN-0005Js-KH; Tue, 13 Jul 2021 07:28:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155042.286346; Tue, 13 Jul 2021 07:28:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CqN-0005Jl-HI; Tue, 13 Jul 2021 07:28:39 +0000
Received: by outflank-mailman (input) for mailman id 155042;
 Tue, 13 Jul 2021 07:28:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3CqM-0005Jf-TT
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:28:38 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 71ec2ccb-c919-4a7d-a4d0-4509fddb9bff;
 Tue, 13 Jul 2021 07:28:37 +0000 (UTC)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2053.outbound.protection.outlook.com [104.47.5.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-17-QtPoz5HlPoKmtgsh3yVEmw-1; Tue, 13 Jul 2021 09:28:35 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7149.eurprd04.prod.outlook.com (2603:10a6:800:12e::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Tue, 13 Jul
 2021 07:28:33 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:28:33 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3PR09CA0013.eurprd09.prod.outlook.com (2603:10a6:102:b7::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 07:28:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 71ec2ccb-c919-4a7d-a4d0-4509fddb9bff
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626161316;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=SDZRzSsMsHriMl7Ei0wanroOEzhHhSecTryBf7rF50o=;
	b=cKNco1UyovaiH6ODhh2ao4TGOfG1CW8JcD1YXJflqlvmA3acxHifd9p53ylESZaB/nbhvI
	IyCMvfyJOl184YQqvuniVCDMRx5C29VJLy+hbLn65144Hlt8i7bB2ogyTBVV3WLYJVNzl6
	IBTFfgRPDJjPCg2/Y0aodm4LIoYIFsg=
X-MC-Unique: QtPoz5HlPoKmtgsh3yVEmw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QRBH4DiZMiLOlI077vPqrdRk4kFc2IcRuXTw2XEepjzUQ7DBhsDFh2obE9VrQc7XjViCln0xrxu3GL4FsqXt4kzhRbZNalp3/hSyEsNc59Kg4f6W3q3uT63IWt4m468lgT/EeJREyGakVNShW8rN/hp90lZTQxoGRaDKOuZO9WVNOkB5Qnq6NZflvt1gwExsFHZSyO3Bp4De07aqk+LlVV6v1eJ+9Y2unfJhE0dn7byV1g8n3ltnrkf4RLO1NX050CCj1QTPy+y1m1IarUH+fF0QcAiTISfdFEKIdtRLnKo2NxOItvkJH252cYce8ankyBNqf7aPJpvahscjuDm8FQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=SDZRzSsMsHriMl7Ei0wanroOEzhHhSecTryBf7rF50o=;
 b=VFgNoXolhPb1EATeLpzbcux72khhSHtd87SCmR3mGHEbhhe7K/WvK6KJM7ZdHlrUQ5HrX85RhZk1JDxXSJ9T2GA0X4wN7e5xoxrpcJvSaBxQN6fFnBFKzNbsLGvY2d0e6voz34SeuztmJlqpxTFDa/o/R73A3KjW25BoxW/bdQC/kDMHP0CHJagitQd5u0PdGgUJT4KsJjwNNsOEl16NbB4HHO5pE8MyZe3PJNUacYLTqwcWjI4O+Fe3dAW7QQM03BLt7WplSsJipJsXlRHuR2JFmXX2yK+OV3ZxR0FD4hQTLYb2ioqsyfc/nkm7WmfGr5cEW4F7X0s85AP3R49JmQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 05/31] build: factorise generation of the linker
 scripts
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-6-anthony.perard@citrix.com>
 <5a9f0468-7ef6-eebb-cebc-492050ed7e8f@suse.com> <YOwhY9yycoMACBGK@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <76fa22fe-c2fa-b563-9644-f2dabc3a6f6d@suse.com>
Date: Tue, 13 Jul 2021 09:28:35 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOwhY9yycoMACBGK@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3PR09CA0013.eurprd09.prod.outlook.com
 (2603:10a6:102:b7::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b09d72c1-e0d7-4cff-1eaa-08d945cfd1dd
X-MS-TrafficTypeDiagnostic: VI1PR04MB7149:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71494C0AB0F0032B844EB2BBB3149@VI1PR04MB7149.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2zL5WoZm518RdvYHzQ0+kvAO6ZToLmgDJzKgwAGtO8CftwmZ1sV0D+wq2DB77kU5EA3McWI8pLVuoCdSNqod/gkK1/P7f6F/XgMYu0k4XvW7dBe/SsmEScopTJKwShfC7+2T1Du9irfVVO57TuuEbuklHcMGINkWA83NUjY/yw5qbPiCIxigfxzFrGSRPYM50Nmkkp5j3Q3423I38Zq7yVr9fOO2tzwc45MmY/BQmBFCx8HrmYk3f2dZNxhvVsni6E2aMplFYHiO63PhLUQBSuESUI6SaB8Ul39mdlssBpUmQYctEj/jvaxvOa0NPF9y/l1kalsbXRwRK8ncHlK7hO7VUPwRC18QVhNPGwuOAxv1cKlyFDp+mMRUQYWYRPZ2VqZq+K3WB/xG/r8AdXGYrLzqTHJye5QIMpLFbdsO61Zt5yaPhTTJM9oIaXPhgOZuHzMZDlrJMFejL5SFRkfsjShM5pKuDnjjJEU30n6GZbdl+S4W5/zvjDF27Fxpdvxq005a6hJfLVRZO//cHC+CcSOPsf4nNfRxnRNeCv6/upjLLE2U5Ztg2GvqgiSmhbUmJ3Czj+jt5K7B/wOVfXxUqEjWOPK6o9VyexfQ2s1r2N1VzBtNxNMM9i1Lyv8YYt2j+LNgHGyTcQ2Q16ddYzL+mgb/weNWFGtN35HfIXhuvNz2wNwb8gk1mHpwVnCiqBBUq57SYcrrcd1VeodZM7d9oZXbaz6sjdGjr1O2NcsTnjLwdeTK3qK+SBf7nAA4IpsI
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(346002)(376002)(396003)(39860400002)(956004)(8676002)(86362001)(54906003)(4744005)(2616005)(31686004)(66556008)(2906002)(7416002)(478600001)(66946007)(66476007)(5660300002)(36756003)(53546011)(186003)(38100700002)(31696002)(16576012)(26005)(316002)(6486002)(4326008)(8936002)(6916009)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?sRCpFsqfCTC7pYAr8WOY5IS/cPeGfNJDDh7hsUT?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b09d72c1-e0d7-4cff-1eaa-08d945cfd1dd
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:28:33.1861
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 8R1cCa8koETWylvFDwSGvFXFJhFIhQoqaXCxfSRXzV0MiKhw8Q6nP5NLY+dBbBIkq1m4zM36PQbX72z8LuxGHQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7149

On 12.07.2021 13:02, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 04:25:33PM +0200, Jan Beulich wrote:
>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>> In Arm and X86 makefile, generating the linker script is the same, so
>>> we can simply have both call the same macro.
>>>
>>> We need to add *.lds files into extra-y so that Rules.mk can find the
>>> .*.cmd dependency file and load it.
>>>
>>> Change made to the command line:
>>> - Use cpp_flags macro which simply filter -Wa,% options from $(a_flags).
>>> - Added -D__LINKER__ even it is only used by Arm's lds.
>>
>> I'm not really happy about this, not the least because the symbol's name
>> doesn't fit its purpose (we're not linking, but producing a linker script
>> at that stage), but well ...
> 
> Also, the leading "__" is probably a bad idea as I think it's reserved?

I guess that's intentional in this case, matching in particular
__ASSEMBLY__.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:32:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:32:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155047.286356 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ctt-0006jU-3n; Tue, 13 Jul 2021 07:32:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155047.286356; Tue, 13 Jul 2021 07:32:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ctt-0006jN-0m; Tue, 13 Jul 2021 07:32:17 +0000
Received: by outflank-mailman (input) for mailman id 155047;
 Tue, 13 Jul 2021 07:32:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3Ctr-0006jH-O7
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:32:15 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c391e981-962c-4c24-b169-4156f37cdf14;
 Tue, 13 Jul 2021 07:32:14 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2050.outbound.protection.outlook.com [104.47.2.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-26-S0BDWLcDNk-E73AfhXRAWQ-1; Tue, 13 Jul 2021 09:32:12 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4942.eurprd04.prod.outlook.com (2603:10a6:803:59::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Tue, 13 Jul
 2021 07:32:11 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:32:11 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0065.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.10 via Frontend Transport; Tue, 13 Jul 2021 07:32:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c391e981-962c-4c24-b169-4156f37cdf14
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626161533;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=0Vkp9tSA4aA3ABziLTFUO8428NUHA8vTa+2c7slAeLg=;
	b=lD+Mg6CF+DbnHmsPgcmgwpbNXXQf9xjH90l0MW8V3u+BG+IFzcYybFWlj5e6k65sWADV/E
	RvWkhMymle8ai/D1gYtycBPIdUwi0acGrZDF95kGfFm/tHo2hFtlc9YeEJxrpuNTYMVf7a
	raXFE0mwCfwku/5UuqZ/VSZd3oiVFMQ=
X-MC-Unique: S0BDWLcDNk-E73AfhXRAWQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cP01vk5Z/UOvF3zyBDqQxP0L/k9AKJ6bjm6u6RAMA5BoLJz9uAecfz3AvZEmCpVSzUf9iPvoqKTClSxAWg40E3VoN1FAbmsGXDezuFkkcjY8P5YaWHBFih+6CEzEfMuE2AHZxeOdTs/ah2RqeUPTHNruj5dLcKKsJyybI7pqn4fhdEptyWAq1cluKueQh8K6+Y5qjCXTW8FyoTiJ+2XNf4KV+k5upk/n2QpR1C6NASXIAt8zW6JswOSdFJwxsKndmAYYU9hXY+ZoHclGqLrzl5z4QcSD62+cO4iYIg7lertnpsEm/nWYiJhVfzYhbNvQ8tIMvP2lPFuJciA43m+Unw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=0Vkp9tSA4aA3ABziLTFUO8428NUHA8vTa+2c7slAeLg=;
 b=fgJYMoh2MQ8Kb27k/o+Ouy5Nxnl7wBEimTI6wDSEJ+OIbE6ierwfHUM6dKcwe/kAIkTohfN3sri+Dh/6vHUHTCUXxOIRZK4CBLl+X+0zVCN7tilfScWH3w/r4gtg8NGm37yOnigJzrzBVkuBmsujNtZKW0qYTplPSFs0Y9DN1Y6pS2knxBWUS9A8kycnZSqv+YdUoOMWcFKt/40ap8NgC739Adkcqq3l2ETjnLXycrgDdHUAVQ62rEWJk+Qipen7WRXFEHykA4ln6SEDZnU5ie1VSkwZTJJ4bQb4ZDnAp450kbmq8JNTcgTlj0VBrNtZOHswd3DiqU/Sn/MR54uczA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 06/31] x86/mm: avoid building multiple .o from a
 single .c file
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Tim Deegan <tim@xen.org>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-7-anthony.perard@citrix.com>
 <73b924a9-dd69-7cc8-acf6-e4ae746c244c@suse.com> <YOw6S4uJ4hF6/P3y@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <14c31abe-e395-6d60-bd91-4941564fc5a4@suse.com>
Date: Tue, 13 Jul 2021 09:32:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOw6S4uJ4hF6/P3y@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0065.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:49::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a584682d-e7ed-4d24-d8de-08d945d053c1
X-MS-TrafficTypeDiagnostic: VI1PR04MB4942:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB49422361C8371DD4A515DBF4B3149@VI1PR04MB4942.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ioixtbi7yk2gLpro2UxFyDjagBYfwwzywRRogw66HbozEUPQXoHf2w93P4thydr1pBt+eRPne8ex7dXHlDXUUaGW2MiGWZ3DkGiEEVMceKUEONlygK2enWnDoRpyHKMQu1Iq2zWWcGeRJ6Cno+vNUkpRnmu4CdliL6b26xe1pxQiyFqIsyuyvG9np053ONJ9E0Ei6HHTMD8LyhsjAonju3uR5+CxKMZ4W/3NdYDjtl9YUZsfF+JmP9+ine/8s3Qfwsb4HUOO8tqUt+N9cleSf8FJurlN9QiskEQC1Ww7oBswZrWMt3t4G+UGzVIGACg319PG3q20cQ7Vh/wd8k9nEtz697QyIGF/M0SN6Amk7wJQBH7OVYN/aBAm9eCnnEI5QzYOrX+ogvC6NXpMHwO7auqr2T91ud7Bgb1Jj0Ma2mLNtaKEztCV5qNg6KN7igKt1ZSjtmSmkcASUgYqwiqdtw1cZYNezMaG6MiM5DxqqK31tQZB02KOGVV8pNCpaW7h2KNlfMUFJYFkXJm88uGob5bAqp3EOuTJvDmPmH0TpE0/STr958/3UuNH2aDYmCcdrKLkAM8ojHYT/6PbKQVfV+FIe9CWMYQnyfz0CT23xKcV4THeIbMjYPMbbSQNuiX7xPRNJVQCnRN69Eqf88l2pcGBZgNOpM79Y5GaD8DdnMQ3pwScUT5jyKi63r0fR+J/WNtJU1ZJLTqxMTasHzjOXu7OhVUS7ubd/O6yOP4MqbC4YgBfQl+UY/aGtKKy56ltyaCtga17PdWDvhvW4gIbiA==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(396003)(39850400004)(366004)(136003)(376002)(956004)(86362001)(53546011)(7416002)(5660300002)(316002)(2616005)(186003)(6916009)(6486002)(16576012)(478600001)(8936002)(36756003)(83380400001)(26005)(2906002)(66476007)(31696002)(38100700002)(66556008)(4326008)(8676002)(31686004)(66946007)(54906003)(142923001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a584682d-e7ed-4d24-d8de-08d945d053c1
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:32:11.1302
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Uplggo2aQjFQhC9wR+S1TFkJAaf0Py1hclqbNnNiFSSvFDTHv15V87d3foJhY7GfnobAuIoO3eVM9siEHuSxPg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4942

On 12.07.2021 14:49, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 04:45:11PM +0200, Jan Beulich wrote:
>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>>  xen/Makefile                            | 11 -----------
>>>  xen/Rules.mk                            |  2 +-
>>>  xen/arch/x86/mm/Makefile                |  9 ---------
>>>  xen/arch/x86/mm/guest_walk.c            |  3 ---
>>>  xen/arch/x86/mm/guest_walk_2.c          |  2 ++
>>>  xen/arch/x86/mm/guest_walk_3.c          |  2 ++
>>>  xen/arch/x86/mm/guest_walk_4.c          |  2 ++
>>>  xen/arch/x86/mm/hap/Makefile            |  9 ---------
>>>  xen/arch/x86/mm/hap/guest_walk.c        |  3 ---
>>>  xen/arch/x86/mm/hap/guest_walk_2level.c |  2 ++
>>>  xen/arch/x86/mm/hap/guest_walk_3level.c |  2 ++
>>>  xen/arch/x86/mm/hap/guest_walk_4level.c |  2 ++
>>
>> Is there a particular reason you've kept the "level" in these three
>> file names? Preferably with them shortened (and ideally dashes used
>> everywhere in the new file names instead of underscores)
> 
> I had no reason to rename them. (Also, renaming them makes the patch
> bigger ;-) as we would rename the objects files.)
> 
> But I can rename as part of the patch. Should I rename all of them (mm
> hap and shadow) to "guest-walk-$level.c" ? Or just "guest-$level.c" like
> in shadow/ ? On the other hand, it would probably be helpful to have the same
> basename for both the source and the .c that includes the source (e.g.
> "guest_walk.c" and "guest_walk_2.c" have "guest_walk" in common). So if
> we were to replace underscores by dashes, we should probably rename
> "guest_walk.c" to "guest-walk.c" as well.
> 
> So I'll remove the "level" from the filenames in hap/ to start with in
> an update to this patch, it it worth it to do more that that?

I'd be okay with just the removal of "level"; switching to dashes would
be nice imo, but I can see this being controversial - as you say, names
would go slightly out of sync, and whether renaming the base files is
warranted is hard to say. I'd be personally in favor, but I can see why
people may prefer not to have those extra renames in here.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:37:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:37:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155053.286368 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CyW-0007Yi-Qy; Tue, 13 Jul 2021 07:37:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155053.286368; Tue, 13 Jul 2021 07:37:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3CyW-0007Yb-NH; Tue, 13 Jul 2021 07:37:04 +0000
Received: by outflank-mailman (input) for mailman id 155053;
 Tue, 13 Jul 2021 07:37:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3CyV-0007YT-L2
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:37:03 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 180320af-59b6-4747-9e57-2d20e705c40c;
 Tue, 13 Jul 2021 07:37:02 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2110.outbound.protection.outlook.com [104.47.18.110])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-22-KMsezLDONPmhpftZH0rwug-1; Tue, 13 Jul 2021 09:37:00 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4847.eurprd04.prod.outlook.com (2603:10a6:803:54::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.27; Tue, 13 Jul
 2021 07:36:58 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:36:58 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0013.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19e::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 07:36:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 180320af-59b6-4747-9e57-2d20e705c40c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626161821;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=IPD3XeB9jTummquCVG4iXWuZyFEN+iUVjpUAtFM9rc8=;
	b=L1qNKIH222XYQXpkmXDeTi6qFNgbBhNPYkyBq4TwDjVNei6rCZ87m3ADKhbJnXq+OGSsHI
	KbwkwoQ36DesoqL0o2IoR6xxFNGbSL1oCkANBbBuedSZ3jKBvo6zQM7sOhS2X66u8f1mcK
	SIgeaYJRRXvtMtKIG4+S0n8RKKqtaFE=
X-MC-Unique: KMsezLDONPmhpftZH0rwug-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=S0YF8x3f7YU8e+mh3U0PnXv+9nOUe5EYnvxxtb7p5XvIZy/imaAOpdQAlEPUPxN92me/qjf/Ix56fcYPT9XfM1iDAzOa9QwQQ2uEYhUycCwCBOEHKamgZNxUNUtzv82H/kFfqDRajHks54o5FbUCCmu1SGqnXPV+5SA6b6uUxHZuvAlq2OGmiPq2gTWz1eH3enenkcFDvNdGefm+pJQfI5VxKdsd+uDIUvEol/htk+xvFuCnQib0pxMjytSiFXVFSUwZBU/YO88QJUF3V9xKoIPTBk4X+2GQxHktT6Gtuh2pwQUHaPLsmroO+O4HRaWarsiLPHlPykjLUkH1WqyUPQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IPD3XeB9jTummquCVG4iXWuZyFEN+iUVjpUAtFM9rc8=;
 b=N7vIHszfK91kzpu6n6Hi4DW9gTsMyJhbaiKeCmPRZtODHkkB49W8ssNeIvLBGoDWHiS+yZhPIz/BeC1DhGeM0+i96TMZJm2ko8GTqO+ln0mcrtvmU9IL+dZnndbYvy6fx2qnTvPGUR0hTMmpbpZNMNcVNdTzvnd3XPCta5hTVzr4pcQnOg1yJVu060fNsV3MzSlqIBFEhrUJcBBtEoZu4mFmva1NqZSdF43+nlN1dN5GM2pu3Yk9u+P5U12o7x9gHNe65oHcK90lHsMlIL70g2RO1eV607LHh2xheMx91kEl5DS1tD+EvvhBmIXIHDI0K2qywIR9wWmuViE0H95cGw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 07/31] build,include: rework compat-build-source.py
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-8-anthony.perard@citrix.com>
 <3b7b6366-c138-3e92-3a9b-640fcf949b15@suse.com> <YOxTKHCQDSs2mHG8@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <3ec5fa48-9079-3e8b-f5d7-41c2b1b923f1@suse.com>
Date: Tue, 13 Jul 2021 09:37:00 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOxTKHCQDSs2mHG8@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1P264CA0013.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19e::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4a5b31b0-11b5-4060-f431-08d945d0fea9
X-MS-TrafficTypeDiagnostic: VI1PR04MB4847:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4847B21521DFB52A5CAF4AC4B3149@VI1PR04MB4847.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	9CF0JwiifYeAo7wGZCCYW/cTw1ySVgUiWx0LKWbBS2Pv4+wqmJD2VJXSkWeG9PNaJ9F/T1EmFivAsobYqaNtgd2olXRYHd03ClWiFiln/OfEyX/E9oRJJ/vX17xCeTyIiHVA2wngwxky4lmq6uUcH9yWw5OWFbKL6E0c6DBJpOue6bZyYk8VQ6AKdr2/oYDQE5wBBOvc8Ud9rFEWqBg99noLCQ6Vh+0fw9RnvC15U9vqqqKW1FwVRdIJ6unGrW7QB0pUAao3oSQ2C70+ruDZE2ue5yIM9FRYl35O7nbbTdxbJcgTvd+RDvVy8inl1GpQJH3E6UWexpeCZYO5bPsQ6+4y10odtO6BluTzKBbXMW5edopHg1J1WkBy9BrS8rTna/UgBA8SEd+jWXs1xsolGlOuqfzsj9YeN4T/bX0xbLf+yRTSMEgveyM3ja0OKM1qxZK0lD+4YqZ4oao3EIRRwyDccqmQfrXDghRBpjk6ZuWDhn5fB2xPdrn9d1++e+6I2ag7jWWt01uIQaDxt+smXUmKCszZqHCtTevgddcKUK6iyd6xmVPjZ1JaBqENeJUP6mIJJAEYeMrnILRZPfLUn7nbZ9pr35VHX3eYzFaMfvGvSLE0LtV16peJ5YmcZW7kXc7mCB9B8aPchY3KXXIYaEVlQS27Ns/U+zHngHNkW8Qw5YxTkXbFbNOT3eR1gD8tscPR9HmzwnzNDCdRdoQiojcWIv2rAh9HBUVyzeYWjcQ=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39850400004)(136003)(366004)(376002)(396003)(2616005)(956004)(4326008)(186003)(2906002)(36756003)(5660300002)(26005)(53546011)(6486002)(478600001)(83380400001)(38100700002)(86362001)(31696002)(6666004)(316002)(66476007)(66946007)(66556008)(6916009)(54906003)(16576012)(8676002)(8936002)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4a5b31b0-11b5-4060-f431-08d945d0fea9
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:36:57.8990
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: qkrF6a4J/G7fln3UzYm1phydD+5UrgXWIFU0HfinWRd+duUFK7mx6GUa9xWPTOp01oMI2J+or/0bmlVcXQ/QVQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4847

On 12.07.2021 16:35, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 04:58:29PM +0200, Jan Beulich wrote:
>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>> Improvement are:
>>> - give the path to xlat.lst as argument
>>> - include `grep -v` in compat-build-source.py script, we don't need to
>>>   write this in several scripted language.
>>>
>>> Also remove dependency on Makefile as the file generation doesn't
>>> depend on it anymore.
>>
>> Did it before any more?
> 
> Kind of, yes, there is "grep -v" that makes the Makefile part of the
> script that generates the target.
> 
>> In the subsequent patch I can see more of
>> a reason to drop the dependency, but neither there nor here I'm
>> really convinced: In general I think every generate file would
>> better depend on the makefile containing the rule used for its
>> building, as a change to that rule means the target wants
>> rebuilding.
> 
> Does that mean that nearly every single targets should depends on a
> "Makefile" or on "Rules.mk" ? :-)

Well, yes, I indeed think so.

> As for the current target "compat/%.c", with this patch applied, the
> only few things that the content of the file depends on is the script,
> the first dependency, and "xlat.lst" (also a dependency). So the
> Makefile doesn't play a role into what get's into the target, the
> "mkdir" and the "mv" don't really matter. If the rule where to be
> changed in a way that changed the content of the target, that would be
> wrong in my opinion, the change should be done in the script.
> If someone wanted to rewrite the script in a different language and thus
> renaming the script, that would be fine too as make would notice that
> the new script is newer that the target (as the file for the script as
> just been created).

Right, but e.g. adding an option to the scrip invocation would then
not trigger a rebuild.

> But, I guess we could start to use the "if_changed" macro here to
> detected rule changes.
> 
> I really don't like when a target depends on a "Makefile" because that
> means the target gets rebuilt for unrelated reason so I'd like to avoid
> dependency on it when possible.

I can see the background of this viewpoint, but personally I think the
extra rebuilds are the price to pay to not have any rebuilds skipped
when they would be needed. Overall it is my understanding that to get
this more fine grained is what if_changed is for.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:41:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:41:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155057.286379 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D2R-0000W0-BP; Tue, 13 Jul 2021 07:41:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155057.286379; Tue, 13 Jul 2021 07:41:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D2R-0000Vt-7f; Tue, 13 Jul 2021 07:41:07 +0000
Received: by outflank-mailman (input) for mailman id 155057;
 Tue, 13 Jul 2021 07:41:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3D2P-0000Vl-Ry
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:41:05 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dd4433e2-9d83-4822-b88a-5658fb06b6d7;
 Tue, 13 Jul 2021 07:41:05 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2050.outbound.protection.outlook.com [104.47.0.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-21-6XPprlsLNPWeMx3RMa_hIA-1; Tue, 13 Jul 2021 09:41:02 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7087.eurprd04.prod.outlook.com (2603:10a6:800:12a::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Tue, 13 Jul
 2021 07:41:00 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:41:00 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0006.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::11) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4242.21 via Frontend Transport; Tue, 13 Jul 2021 07:41:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dd4433e2-9d83-4822-b88a-5658fb06b6d7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626162064;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=WeskLsgQzCKIXI6FsZlZmD2fkaezCdSKwu1Qyucblno=;
	b=CmTarmoIXlYmK09vbbyOs2bnw5gmdacCGS8bZc7HMLvL4NdI02jYK3BHL2PdrUYVRWEnQc
	6qZiAaCD6A87Ps1IeJRd3kDh3Oizx2Dv9tUR4Dza8otPcojx/OhTuvoNR1CqsQI4B0jCQ4
	V+3HLbSnpDcYcqKOfCo5iPimxWs5CcQ=
X-MC-Unique: 6XPprlsLNPWeMx3RMa_hIA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jy5trdU0jBdCZYpxk4B5MWN5yesOezR6A/K7D7AeJJQkdT1yfqWMjcFXAtXK3JOoHV4lZ4tYX/yrlTVQI3w9FBSjWywVspAAP0aIHSCcGOeNAVIK9JYYK7CVC4XGSXVwLdl83Y4vuW0nHbFLE60TxKg+4us7dPaAn20UJMcF38V3EjM4wC7s1691xJf8dzlYSAK8qCMpBHAGicvXvqzHdm2vZ3CTR/qIdLd5pNfecW00s2eyffRNMdzTSOgxJuH5btdx8o0+oHEvWAI42AphE262eOm71OFncke3qQrlH9IBXy8p+Hg2Hwe4tqJupH4vL/BVGt/SNrGIbVC4PbcR8Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WeskLsgQzCKIXI6FsZlZmD2fkaezCdSKwu1Qyucblno=;
 b=STPWZJTNYWPzvnMc5oJUniTbzuLql3ai0qw4CQohIsAWzXSdhocT8VBRVn3L2poc7no0IW0pvbC1v7wwTEtL6oQqOSYYUc4IHJkwD5hqbd5sXbd1e6vdAOJAGPGi7siQYc0f1k19zNiXaZtWaaTnWffcTZKFI67GREJtyqyQXZs24p6yWxVeAiXtOvLAkBdpqVd5HDmYjl1nrAtw4LVLWprmLPteoM5RELTuCivnMFuenNJUlrCnQOSTM4hSl4/PzS1GgdaE3gErBquqlpdohu+WWYR/fjfNXKV8lvHt66Q7D83fJUsFVys/ayg13J+zEiwCyiVl0DtZDgJb80eqGA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 12/31] build: use subdir-y in test/Makefile
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-13-anthony.perard@citrix.com>
 <b93fcbc5-8b4f-7d17-7d0a-cd2cbf6fd2fe@suse.com> <YOxeI1Bn1nxNMjb2@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <65edfaec-4525-c3ff-3658-1088e4b65f9d@suse.com>
Date: Tue, 13 Jul 2021 09:41:03 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOxeI1Bn1nxNMjb2@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0006.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::11) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8def2eaf-d0bd-4629-34d3-08d945d18f60
X-MS-TrafficTypeDiagnostic: VI1PR04MB7087:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7087BC8170C8F38765340FCAB3149@VI1PR04MB7087.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	d/PFAfAAnWs//d8w6nYoA6akOlps4zL9V/sp9Y09etrkbpRS9Klec2a7HtWfuVJJCGPT9JqMuJsX8A6iF9Y5OkX8iJ3PyHSMPtG+VXTdUtI7cv9E37FW3wxrmDWckPCARItkgyCNkJ5ZaicqIqJ3m2xomcRElxkIsPdmG567jLFBVF0xqf2rxZLeekbTYAXj1x2TjBSRfctQFSmrBFD36h2eHxvDMdHbf3kN24btuKNcXcR5vaKgrk0UD2VFtMiZ0bSuNe3BCUcn9SiQUbuWsz/zjfMLRmV32vMmMHeUTl2c/S/N8sCVtTE1vfR6kUENmzlmdLNtqhl5HtBKoMMFvouPnFoQjewIB7hMwI8ob0WX2IZHiZMCq2Te4UH/HDco8/D3vi6zAzAqzM5bQDEo3AsHMAXmR14n8hMSOrXEjH6JWc9RMD+Lh6bR3cgEh39EVMNXN81vJEom+IHUNYluD+w7hrywijT9FmGT2MAhGGuvjtXnWTnU58YUnhApheiAgeyj4OUEHaJDUXVwkgif5A/QCfVmmolAUywviv3Oqbuzs0z7Oz5uJq8maxkL7ryaX4MjXOnw4QFjSJ9UWP+EbNB24koxRXsW9ixIEPnWXfyxvRG30X+tmnXqNscbAhgLLOyEfEn6gKTSfllgIZJN9nDyicsEBb/YTT26hr06KROHLmF4twtAlNkjzjI1zbPIL94/15lzSWeFRYVVVft56G7qTSn7AxS7+kFyB2gWupw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(136003)(396003)(376002)(39850400004)(54906003)(83380400001)(5660300002)(6916009)(31686004)(186003)(53546011)(4326008)(478600001)(31696002)(2906002)(8676002)(36756003)(86362001)(956004)(26005)(66476007)(38100700002)(66946007)(2616005)(316002)(66556008)(8936002)(6486002)(16576012)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?cDORxEk14G1H/chbIP9K8J6G/hDx8StOjsN69kj?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 8def2eaf-d0bd-4629-34d3-08d945d18f60
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:41:00.6363
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: srFg4QtT3ha8tiE0/S7VA3vJtV7AKRCL83JFfePSoYZ1OR6KFsyCg/erHzki5J6K6+RCK63GPzpDBBfSWUlDPA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7087

On 12.07.2021 17:22, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 05:26:13PM +0200, Jan Beulich wrote:
>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>> --- a/xen/test/Makefile
>>> +++ b/xen/test/Makefile
>>> @@ -4,15 +4,10 @@ tests all: build
>>>  
>>>  ifneq ($(XEN_TARGET_ARCH),x86_32)
>>>  # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
>>> -SUBDIRS += livepatch
>>> +subdir-y += livepatch
>>>  endif
>>
>> As per xen/Rules.mk having
>>
>> subdir-y := $(subdir-y) $(filter %/, $(obj-y))
>> obj-y    := $(patsubst %/, %/built_in.o, $(obj-y))
>> ...
>> subdir-obj-y := $(filter %/built_in.o, $(obj-y))
>>
>> this will result in building of livepatch/built_in.o afaict. Is
>> this an intended but benign side effect?
> 
> Actually, nothing in Rules.mk is using $(subdir-y) other than updating
> it with possible subdir from $(obj-y).
> Recursion into a subdir only happen if it is listed in $(obj-y) and thus
> should be part of a built_in.o. Rules.mk doesn't have a mean to recurs
> otherwise.
> 
> So nothing is actually going to try to build livepatch/build_in.o due to
> $(subdir-y).

Question then is: Isn't this actually a bug?

>>>  install build subtree-force-update uninstall: %:
>>> -	set -e; for s in $(SUBDIRS); do \
>>> +	set -e; for s in $(subdir-y); do \
>>>  		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
>>>  	done
>>> -
>>> -clean::
>>> -	set -e; for s in $(SUBDIRS); do \
>>> -		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $@; \
>>> -	done
>>
>> And then why can't the generic recursion rule in xen/Rules.mk
>> not also be used for the "build" target? (I guess "install" and
>> "uninstall" need to remain separate, and don't think I know what
>> "subtree-force-update" is about.)
> 
> There's some more changed in a later patch[1] to Rules.mk which would
> make it possible to remove the need for a "build" target and I actually
> remove the "build" target as well as the "subtree-force-update" target.
> Some more changes in tests/livepatch/ are done in patch[2] which
> actually allow to remove the "build" target.
> 
>     [1] build: build everything from the root dir, use obj=$subdir
>     [2] build: rework test/livepatch/Makefile
> 
> I think the "subtree-force-update" target as to do with having the same
> logic to deal with $(SUBDIRS) as the logic in tools/ and the top
> makefile, but might not have been actually hooked up.

Okay, I guess I need to get further through the series to see the final
effects.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:42:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:42:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155067.286390 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D3M-00017R-Q3; Tue, 13 Jul 2021 07:42:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155067.286390; Tue, 13 Jul 2021 07:42:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D3M-00017K-Mo; Tue, 13 Jul 2021 07:42:04 +0000
Received: by outflank-mailman (input) for mailman id 155067;
 Tue, 13 Jul 2021 07:42:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3D3M-000177-BF
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:42:04 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3cb7118b-a80c-482c-ab4c-ccaea91ef647;
 Tue, 13 Jul 2021 07:42:03 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2059.outbound.protection.outlook.com [104.47.0.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-19-yqTWvNOcNuusVhVqttGRyQ-1; Tue, 13 Jul 2021 09:42:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7087.eurprd04.prod.outlook.com (2603:10a6:800:12a::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Tue, 13 Jul
 2021 07:42:00 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:42:00 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0013.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4242.19 via Frontend Transport; Tue, 13 Jul 2021 07:41:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3cb7118b-a80c-482c-ab4c-ccaea91ef647
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626162122;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=AI5fMCkaJ0OCgAepZ4TEXcCAhau8XZFddLb8uRA2ASI=;
	b=hXGkENkdhMbWtO6FIMfzbWatbk3RYeaY6V5aeyiRY3/hl6X5N59zna82wviHrfzqN9V2N5
	ZO7NRLowSKRVFzWdT5K5yo+kYSy2GO3oOjY+oszzZ1L5FR2oLujQfVKhPXnFlzyZrWALAz
	uAm140STo5tASte1836Su6swN3BE/IU=
X-MC-Unique: yqTWvNOcNuusVhVqttGRyQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Q/L2zhSZMia+wfBPD3PrBbgw2VafJNoHWAhOM6XR4XPdKUsZZlmLYGJKSKwPLtO9dTTd6sQbGxkSLYcDy2w/JqnKZDiJvn2AArjl1mQxIy4cKqP2jL9igCZkTiXruDnzZcGVa4HTKydubUneFLx16MQp9sBpxTS7HtiiYONNQUOLiTh3BqOexaJeSlmiEH4eJQyVk+uHbIqfc/aRPv3R0F2/sVncMy4S6hor9qooc4/YyTncaIFW23fgGluP4n0l/39wgzLWZyvIPE/iDEaQBjZQ1+x/2YzazFFMqZNsndjEfwyUmgAVAgp2warL2NDY+rM9VtT7mHRsuaoAUKQIsw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=AI5fMCkaJ0OCgAepZ4TEXcCAhau8XZFddLb8uRA2ASI=;
 b=i2M/f6b1tGjNxvJ2dijfRzzZwEIK4oKnVi5l13oIwnxlayHw1PWfEsL4b6tKjCpksBEXPkjMbTcpyWnPmlF61jZjV/SOdaez+3X7xei1uulIRog/ptvDkOwfZTvcZ15/s2gHI02jbJLrMbuLRebnb6mZA1zFYe888GGK290m2o3Zli/hzkSjJ9zk6XeY+we9I+fwLrru0MbJrC3sczVCfOQPHvesHRtPYmP85b6JRk88XvO2/R2qgn59z1zENTxZWvNmVeBsA2TKD/pYJGe2YDMH5Fgo+4t4+uLuCDMEbIPPwqjRt8zRfJZeJy3ac+HN3mFU498l1vx4Jf1e9zC8Vg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 15/31] build: move make option changes check
 earlier
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-16-anthony.perard@citrix.com>
 <cb5a783f-36d2-fc73-f71c-4a12e5cf6515@suse.com> <YOxsAjsZd1lbkVN4@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <16f1240e-32aa-f902-4527-fb97b6888831@suse.com>
Date: Tue, 13 Jul 2021 09:42:02 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOxsAjsZd1lbkVN4@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0013.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f3210835-2e86-48d9-e1bb-08d945d1b2ab
X-MS-TrafficTypeDiagnostic: VI1PR04MB7087:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7087DEA258DE8D3F3B1E721EB3149@VI1PR04MB7087.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	akOHScV8J43TwTaUisi+YyTrIncMvCOKsSJSzr0ThChFpb5lGnt5+hDVMgRCxuL2UUqaJ8JcK02QZL4yAaSKhfiB9ltaGcM2fxlrGEXb6XGB9AJwyTXpnHa+PyPU8a1AIXMtC2TtrN2rn5cT/5wUSR2Ai2nfZf4tNX9jDjhNxsnwLtCc6oafwwC3G7hG+6xP/pe15pIx7uMy8geltJ6oEWg3AMFlKc4a0p070Dxed7cNgANAMhP+93PL5LhPcZdpSEiLi06pNLJxB3cTl2lrEChEQJLbgumlG1EDbWMO10HTaNhLZRB0Nir2iGAcIESRRv4VVeB4B9Xp3De3j0NH3d8ZU9nIRAeLjVPIK9fuHmCPvzZN6AqnZMMUZ51RCjbVfe+GHyo8/2HeYILA4yBW+BtmVXij80ptAsxjpfOsKggTx8YCjdpoGkL9mjZlRKGhYzHd9hjOSecIXavuhy8xwLg4SMBAd6r/aKSvbVvhm/5dQXgv8iqImhoK2zyj3DsFcGC8YYMVhp+7RmrZ0iXVIufNEA0nM/gUQ7Kpx2K+xxhFrP7IVKS0NNfgojMcuicVxC5sI/8Yv1+AOiP6JBxfkotpegi6GPJLYNo2srfzfpDLEESts/WJUC/YCl4+T+g78C6Xak4BiYF0IDDoHXtcK4FsMACpFlA2WPoriBWrcp0pxvrF6PJjSPhUD1hIMyDr8wz5gtOBxCc1FBxemK3qKaAEaMjc3yGiyLr5e9EEKJ4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(136003)(39840400004)(396003)(376002)(54906003)(6666004)(5660300002)(6916009)(31686004)(186003)(53546011)(4326008)(478600001)(31696002)(2906002)(8676002)(36756003)(86362001)(956004)(26005)(66476007)(38100700002)(66946007)(2616005)(316002)(66556008)(8936002)(6486002)(16576012)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f3210835-2e86-48d9-e1bb-08d945d1b2ab
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:41:59.8595
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: HqFRMH3SU0DE6Xmue+ONP0IGIK/Hk83bvpo5Z4gJUESEUmSN3bfTySAavJEge/2/XTCIgIPdwnmb487IaTdLEw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7087

On 12.07.2021 18:21, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 05:40:02PM +0200, Jan Beulich wrote:
>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>> And thus avoiding checking for those variable over and over again.
>>>
>>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
>>
>> Acked-by: Jan Beulich <jbeulich@suse.com>
>> in its present shape since all you do is move existing logic. But I
>> wonder if I could talk you into ...
>>
>>> +ifneq ($(origin verbose),undefined)
>>> +$(error "You must use 'make menuconfig' to enable/disable verbose now.")
>>> +endif
>>
>> ... doing away with the misleading mentioning of just "menuconfig" here.
>> There are various other *config targets, many of which are also suitable
>> for the purpose. Personally I've used menuconfig (in Linux) the last
>> time perhaps 15 years ago, and hence I have almost forgotten about its
>> existence. IOW at the very least I'd see us insert "e.g." everywhere.
> 
> Hopefully, no one ever hits those error anymore, it's been 5 years it
> seems since the changes has been made.
> 
> But I can write instead:
>     "You must use e.g. 'make menuconfig' to enable/disable verbose now."
> or maybe:
>     "You must use Kconfig with e.g. 'make menuconfig' to enable/disable verbose now."
>     ?

Either would be fine with me, with a slight preference to the shorter
form.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:42:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:42:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155063.286401 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D4B-0001m6-6S; Tue, 13 Jul 2021 07:42:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155063.286401; Tue, 13 Jul 2021 07:42:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D4B-0001lx-3L; Tue, 13 Jul 2021 07:42:55 +0000
Received: by outflank-mailman (input) for mailman id 155063;
 Tue, 13 Jul 2021 07:41:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/VJd=MF=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m3D39-00014d-Da
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:41:51 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3ec3d935-0ee5-448a-b0ff-b5a90e68f7c6;
 Tue, 13 Jul 2021 07:41:49 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3D1n-0003wU-UB; Tue, 13 Jul 2021 09:40:28 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3D1h-0006Pq-8S; Tue, 13 Jul 2021 09:40:21 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3D1h-0000sY-4N; Tue, 13 Jul 2021 09:40:21 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3ec3d935-0ee5-448a-b0ff-b5a90e68f7c6
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Eric Farman <farman@linux.ibm.com>,
	Frank Li <lznuaa@gmail.com>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Hannes Reinecke <hare@suse.de>,
	Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>,
	Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Jaroslav Kysela <perex@perex.cz>,
	Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>,
	Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>,
	Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>,
	Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	YueHaibing <yuehaibing@huawei.com>,
	alsa-devel@alsa-project.org,
	dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net,
	kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org,
	linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-media@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org,
	linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev,
	linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	netdev@vger.kernel.org,
	nvdimm@lists.linux.dev,
	platform-driver-x86@vger.kernel.org,
	target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org
Subject: [PATCH v3 0/5] bus: Make remove callback return void
Date: Tue, 13 Jul 2021 09:40:09 +0200
Message-Id: <20210713074014.684791-1-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

Hello,

this is the final patch set for my effort to make struct
bus_type::remove return void.

The first four patches contain cleanups that make some of these
callbacks (more obviously) always return 0. They are acked by the
respective maintainers. Bjorn Helgaas explicitly asked to include the
pci patch (#1) into this series, so Greg taking this is fine. I assume
the s390 people are fine with Greg taking patches #2 to #4, too, they
didn't explicitly said so though.

The last patch actually changes the prototype and so touches quite some
drivers and has the potential to conflict with future developments, so I
consider it beneficial to put these patches into next soon. I expect
that it will be Greg who takes the complete series, he already confirmed
via irc (for v2) to look into this series.

In the last round I failed to send the cover letter to all affected
people, sorry for that, this should be fixed now.

Best regards
Uwe

Changes since v2:
 - Add several acks/review tags
 - Include patch #1 explicitly
 - rebase to v5.14-rc1, build test on amd64, arm64 and s390 using
   allmodconfig

Uwe Kleine-König (5):
  PCI: endpoint: Make struct pci_epf_driver::remove return void
  s390/cio: Make struct css_driver::remove return void
  s390/ccwgroup: Drop if with an always false condition
  s390/scm: Make struct scm_driver::remove return void
  bus: Make remove callback return void

 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 arch/s390/include/asm/eadm.h              | 2 +-
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 7 ++-----
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 7 ++-----
 drivers/s390/block/scm_drv.c              | 4 +---
 drivers/s390/cio/ccwgroup.c               | 6 +-----
 drivers/s390/cio/chsc_sch.c               | 3 +--
 drivers/s390/cio/css.c                    | 7 +++----
 drivers/s390/cio/css.h                    | 2 +-
 drivers/s390/cio/device.c                 | 9 +++------
 drivers/s390/cio/eadm_sch.c               | 4 +---
 drivers/s390/cio/scm.c                    | 5 +++--
 drivers/s390/cio/vfio_ccw_drv.c           | 3 +--
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 include/linux/device/bus.h                | 2 +-
 include/linux/pci-epf.h                   | 2 +-
 sound/aoa/soundbus/core.c                 | 4 +---
 87 files changed, 98 insertions(+), 241 deletions(-)

base-commit: e73f0f0ee7541171d89f2e2491130c7771ba58d3
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:42:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:42:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155065.286407 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D4B-0001qF-Io; Tue, 13 Jul 2021 07:42:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155065.286407; Tue, 13 Jul 2021 07:42:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3D4B-0001p4-Cc; Tue, 13 Jul 2021 07:42:55 +0000
Received: by outflank-mailman (input) for mailman id 155065;
 Tue, 13 Jul 2021 07:41:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/VJd=MF=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m3D3F-00015e-4s
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:41:57 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bb95d605-ff5c-4d3b-93b6-f36f3dd310a4;
 Tue, 13 Jul 2021 07:41:52 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3D1n-0003zr-Vz; Tue, 13 Jul 2021 09:40:28 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3D1j-0006QX-Ox; Tue, 13 Jul 2021 09:40:23 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3D1i-0000vy-Hv; Tue, 13 Jul 2021 09:40:22 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bb95d605-ff5c-4d3b-93b6-f36f3dd310a4
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Frank Li <lznuaa@gmail.com>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hannes Reinecke <hare@suse.de>,
	Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>,
	Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Jaroslav Kysela <perex@perex.cz>,
	Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>,
	Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>,
	Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>,
	Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	YueHaibing <yuehaibing@huawei.com>,
	alsa-devel@alsa-project.org,
	dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net,
	kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org,
	linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-media@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org,
	linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev,
	linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	netdev@vger.kernel.org,
	nvdimm@lists.linux.dev,
	platform-driver-x86@vger.kernel.org,
	target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org,
	Johannes Thumshirn <jth@kernel.org>,
	"Rafael J . Wysocki" <rafael@kernel.org>
Subject: [PATCH v3 5/5] bus: Make remove callback return void
Date: Tue, 13 Jul 2021 09:40:14 +0200
Message-Id: <20210713074014.684791-6-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
In-Reply-To: <20210713074014.684791-1-u.kleine-koenig@pengutronix.de>
References: <20210713074014.684791-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-Patch-Hashes: v=1; h=sha256; i=nwraWdwDJwSCf/PVA+pCJjcxHppjqX/HTinL8xamX9o=; m=ziH5qs3H2jnGskCKzejNXaENxMH8EgSJcO+tV5Q1Ac8=; p=p1mrMFFy3Pdj4j7dHjX2dcRs9JNeC9yQebRu27ayjG0=; g=e9831fd69c58c32f30ab91ddbbdea0c2e82dec4a
X-Patch-Sig: m=pgp; i=uwe@kleine-koenig.org; s=0x0D2511F322BFAB1C1580266BE2DCDD9132669BD6; b=iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmDtQ0IACgkQwfwUeK3K7AnkawgAlRz dCqtSOP9ih1i4W5wwF/bZeXj4tznZGIH2+sYq5x2oA3dI4XG2dSDnYZQbB46jUkU05A1jWJf5G+VB hsA+rguikQ8PP3sFmUWKeblEoPrsYTOvISytC1ya7RKqeAwah0ZUsQkI6MEF3om+EpdOfPnDxA7eu YbIUBqsKD4OfahXRYWxY/ZfFwSzgIH/TIrFfZLDieHjDwP1exZhl/I0daGuK7EsE4gS6si+Zqk0wt lFUvmwBtgrM7Ocfy+LgSlv/Upgm8XLqNRldlCr+/NrBKIieAgKTyMfgdz4ogrf3hglogP3aTJwi5v pwYjP8gv6ConYtl+DRxGpkG9lYKyo5g==
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

The driver core ignores the return value of this callback because there
is only little it can do when a device disappears.

This is the final bit of a long lasting cleanup quest where several
buses were converted to also return void from their remove callback.
Additionally some resource leaks were fixed that were caused by drivers
returning an error code in the expectation that the driver won't go
away.

With struct bus_type::remove returning void it's prevented that newly
implemented buses return an ignored error code and so don't anticipate
wrong expectations for driver authors.

Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Amba and related parts)
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Chen-Yu Tsai <wens@csie.org> (for sunxi-rsb)
Acked-by: Pali Rohár <pali@kernel.org>
Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for media)
Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Acked-By: Vinod Koul <vkoul@kernel.org>
Acked-by: Juergen Gross <jgross@suse.com> (For xen)
Acked-by: Lee Jones <lee.jones@linaro.org> (For mfd)
Acked-by: Johannes Thumshirn <jth@kernel.org> (For mcb)
Acked-by: Johan Hovold <johan@kernel.org>
Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For slimbus)
Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For vfio)
Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and typec)
Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> (For ipack)
Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com> (For thunderbolt)
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> (For intel_th)
Acked-by: Dominik Brodowski <linux@dominikbrodowski.net> (For pcmcia)
Reviewed-by: Cornelia Huck <cohuck@redhat.com> (For drivers/s390 and drivers/vfio)
Acked-by: Rafael J. Wysocki <rafael@kernel.org> (For ACPI)
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org> (rpmsg and apr)
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> (For intel-ish-hid)
Acked-by: Dan Williams <dan.j.williams@intel.com> (For CXL, DAX, and NVDIMM)
Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com> (For isa)
Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (For firewire)
Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> (For hid)
Acked-by: Thorsten Scherer <t.scherer@eckelmann.de> (For siox)
Acked-by: Sven Van Asbroeck <TheSven73@gmail.com> (For anybuss)
Acked-by: Ulf Hansson <ulf.hansson@linaro.org> (For MMC)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 4 +---
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 7 ++-----
 drivers/s390/cio/ccwgroup.c               | 4 +---
 drivers/s390/cio/css.c                    | 4 +---
 drivers/s390/cio/device.c                 | 4 +---
 drivers/s390/cio/scm.c                    | 4 +---
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 include/linux/device/bus.h                | 2 +-
 sound/aoa/soundbus/core.c                 | 4 +---
 80 files changed, 84 insertions(+), 221 deletions(-)

diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index e45f4e4e06b6..24d21ba63030 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int locomo_bus_remove(struct device *dev)
+static void locomo_bus_remove(struct device *dev)
 {
 	struct locomo_dev *ldev = LOCOMO_DEV(dev);
 	struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(ldev);
-	return 0;
 }
 
 struct bus_type locomo_bus_type = {
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index ff5e0d04cb89..092a2ebc0c28 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sa1111_bus_remove(struct device *dev)
+static void sa1111_bus_remove(struct device *dev)
 {
 	struct sa1111_dev *sadev = to_sa1111_device(dev);
 	struct sa1111_driver *drv = SA1111_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(sadev);
-
-	return 0;
 }
 
 struct bus_type sa1111_bus_type = {
diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
index 827b50f1c73e..53813f9464a2 100644
--- a/arch/arm/mach-rpc/ecard.c
+++ b/arch/arm/mach-rpc/ecard.c
@@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int ecard_drv_remove(struct device *dev)
+static void ecard_drv_remove(struct device *dev)
 {
 	struct expansion_card *ec = ECARD_DEV(dev);
 	struct ecard_driver *drv = ECARD_DRV(dev->driver);
@@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
 	ec->ops = &ecard_default_ops;
 	barrier();
 	ec->irq_data = NULL;
-
-	return 0;
 }
 
 /*
diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.c
index de0768a49ee8..dfc52f661ad0 100644
--- a/arch/mips/sgi-ip22/ip22-gio.c
+++ b/arch/mips/sgi-ip22/ip22-gio.c
@@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
 	return error;
 }
 
-static int gio_device_remove(struct device *dev)
+static void gio_device_remove(struct device *dev)
 {
 	struct gio_device *gio_dev = to_gio_device(dev);
 	struct gio_driver *drv = to_gio_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(gio_dev);
-	return 0;
 }
 
 static void gio_device_shutdown(struct device *dev)
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
index 80fa0650736b..776d624a7207 100644
--- a/arch/parisc/kernel/drivers.c
+++ b/arch/parisc/kernel/drivers.c
@@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device *dev)
 	return rc;
 }
 
-static int __exit parisc_driver_remove(struct device *dev)
+static void __exit parisc_driver_remove(struct device *dev)
 {
 	struct parisc_device *pa_dev = to_parisc_device(dev);
 	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
+
 	if (pa_drv->remove)
 		pa_drv->remove(pa_dev);
-
-	return 0;
 }
 	
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..cc5774c64fae 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
 	return result;
 }
 
-static int ps3_system_bus_remove(struct device *_dev)
+static void ps3_system_bus_remove(struct device *_dev)
 {
 	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
 	struct ps3_system_bus_driver *drv;
@@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
 			__func__, __LINE__, drv->core.name);
 
 	pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->core));
-	return 0;
 }
 
 static void ps3_system_bus_shutdown(struct device *_dev)
diff --git a/arch/powerpc/platforms/pseries/ibmebus.c b/arch/powerpc/platforms/pseries/ibmebus.c
index c6c79ef55e13..7ee3ed7d6cc2 100644
--- a/arch/powerpc/platforms/pseries/ibmebus.c
+++ b/arch/powerpc/platforms/pseries/ibmebus.c
@@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct device *dev)
 	return error;
 }
 
-static int ibmebus_bus_device_remove(struct device *dev)
+static void ibmebus_bus_device_remove(struct device *dev)
 {
 	struct platform_device *of_dev = to_platform_device(dev);
 	struct platform_driver *drv = to_platform_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(of_dev);
-	return 0;
 }
 
 static void ibmebus_bus_device_shutdown(struct device *dev)
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..58283cecbd52 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
 }
 
 /* convert from struct device to struct vio_dev and pass to driver. */
-static int vio_bus_remove(struct device *dev)
+static void vio_bus_remove(struct device *dev)
 {
 	struct vio_dev *viodev = to_vio_dev(dev);
 	struct vio_driver *viodrv = to_vio_driver(dev->driver);
@@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
 		vio_cmo_bus_remove(viodev);
 
 	put_device(devptr);
-	return 0;
 }
 
 static void vio_bus_shutdown(struct device *dev)
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index f854bcb8d010..b941555cb5e4 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -1019,7 +1019,7 @@ static int acpi_device_probe(struct device *dev)
 	return 0;
 }
 
-static int acpi_device_remove(struct device *dev)
+static void acpi_device_remove(struct device *dev)
 {
 	struct acpi_device *acpi_dev = to_acpi_device(dev);
 	struct acpi_driver *acpi_drv = acpi_dev->driver;
@@ -1034,7 +1034,6 @@ static int acpi_device_remove(struct device *dev)
 	acpi_dev->driver_data = NULL;
 
 	put_device(dev);
-	return 0;
 }
 
 struct bus_type acpi_bus_type = {
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 939ca220bf78..962041148482 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
 	return ret;
 }
 
-static int amba_remove(struct device *dev)
+static void amba_remove(struct device *dev)
 {
 	struct amba_device *pcdev = to_amba_device(dev);
 	struct amba_driver *drv = to_amba_driver(dev->driver);
@@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
 
 	amba_put_disable_pclk(pcdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void amba_shutdown(struct device *dev)
diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
index adc199dfba3c..0c86f5bed9f4 100644
--- a/drivers/base/auxiliary.c
+++ b/drivers/base/auxiliary.c
@@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int auxiliary_bus_remove(struct device *dev)
+static void auxiliary_bus_remove(struct device *dev)
 {
 	struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev->driver);
 	struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
@@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
 	if (auxdrv->remove)
 		auxdrv->remove(auxdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void auxiliary_bus_shutdown(struct device *dev)
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
index aa4737667026..55e3ee2da98f 100644
--- a/drivers/base/isa.c
+++ b/drivers/base/isa.c
@@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int isa_bus_remove(struct device *dev)
+static void isa_bus_remove(struct device *dev)
 {
 	struct isa_driver *isa_driver = dev->platform_data;
 
 	if (isa_driver && isa_driver->remove)
 		isa_driver->remove(dev, to_isa_dev(dev)->id);
-
-	return 0;
 }
 
 static void isa_bus_shutdown(struct device *dev)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 8640578f45e9..a94b7f454881 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
 	return ret;
 }
 
-static int platform_remove(struct device *_dev)
+static void platform_remove(struct device *_dev)
 {
 	struct platform_driver *drv = to_platform_driver(_dev->driver);
 	struct platform_device *dev = to_platform_device(_dev);
@@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
 			dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n");
 	}
 	dev_pm_domain_detach(_dev, true);
-
-	return 0;
 }
 
 static void platform_shutdown(struct device *_dev)
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 6535614a7dc1..e076630d17bd 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
 
 static int bcma_bus_match(struct device *dev, struct device_driver *drv);
 static int bcma_device_probe(struct device *dev);
-static int bcma_device_remove(struct device *dev);
+static void bcma_device_remove(struct device *dev);
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env);
 
 static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf)
@@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
 	return err;
 }
 
-static int bcma_device_remove(struct device *dev)
+static void bcma_device_remove(struct device *dev)
 {
 	struct bcma_device *core = container_of(dev, struct bcma_device, dev);
 	struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
@@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
 	if (adrv->remove)
 		adrv->remove(core);
 	put_device(dev);
-
-	return 0;
 }
 
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
index d46db132d085..6f225dddc74f 100644
--- a/drivers/bus/sunxi-rsb.c
+++ b/drivers/bus/sunxi-rsb.c
@@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device *dev)
 	return drv->probe(rdev);
 }
 
-static int sunxi_rsb_device_remove(struct device *dev)
+static void sunxi_rsb_device_remove(struct device *dev)
 {
 	const struct sunxi_rsb_driver *drv = to_sunxi_rsb_driver(dev->driver);
 
 	drv->remove(to_sunxi_rsb_device(dev));
-
-	return 0;
 }
 
 static struct bus_type sunxi_rsb_bus = {
diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
index a2e4d54fc7bc..2b90b7c3b9d7 100644
--- a/drivers/cxl/core.c
+++ b/drivers/cxl/core.c
@@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
 	return to_cxl_drv(dev->driver)->probe(dev);
 }
 
-static int cxl_bus_remove(struct device *dev)
+static void cxl_bus_remove(struct device *dev)
 {
 	struct cxl_driver *cxl_drv = to_cxl_drv(dev->driver);
 
 	if (cxl_drv->remove)
 		cxl_drv->remove(dev);
-	return 0;
 }
 
 struct bus_type cxl_bus_type = {
diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index 5aee26e1bbd6..6cc4da4c713d 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int dax_bus_remove(struct device *dev)
+static void dax_bus_remove(struct device *dev)
 {
 	struct dax_device_driver *dax_drv = to_dax_drv(dev->driver);
 	struct dev_dax *dev_dax = to_dev_dax(dev);
 
 	if (dax_drv->remove)
 		dax_drv->remove(dev_dax);
-
-	return 0;
 }
 
 static struct bus_type dax_bus_type = {
diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
index 0460d58e3941..5a017c62c752 100644
--- a/drivers/dma/idxd/sysfs.c
+++ b/drivers/dma/idxd/sysfs.c
@@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
 	dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
 }
 
-static int idxd_config_bus_remove(struct device *dev)
+static void idxd_config_bus_remove(struct device *dev)
 {
 	int rc;
 
@@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device *dev)
 			dev_info(dev, "Device %s disabled\n", dev_name(dev));
 
 	}
-
-	return 0;
 }
 
 static void idxd_config_bus_shutdown(struct device *dev)
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index 68216988391f..90ed8fdaba75 100644
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
 	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
 }
 
-static int fw_unit_remove(struct device *dev)
+static void fw_unit_remove(struct device *dev)
 {
 	struct fw_driver *driver =
 			container_of(dev->driver, struct fw_driver, driver);
 
 	driver->remove(fw_unit(dev));
-
-	return 0;
 }
 
 static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
index 784cf0027da3..2682c3df651c 100644
--- a/drivers/firmware/arm_scmi/bus.c
+++ b/drivers/firmware/arm_scmi/bus.c
@@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
 	return scmi_drv->probe(scmi_dev);
 }
 
-static int scmi_dev_remove(struct device *dev)
+static void scmi_dev_remove(struct device *dev)
 {
 	struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
 	struct scmi_device *scmi_dev = to_scmi_dev(dev);
 
 	if (scmi_drv->remove)
 		scmi_drv->remove(scmi_dev);
-
-	return 0;
 }
 
 static struct bus_type scmi_bus_type = {
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
index dc83ea118c67..c52bcaa9def6 100644
--- a/drivers/firmware/google/coreboot_table.c
+++ b/drivers/firmware/google/coreboot_table.c
@@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int coreboot_bus_remove(struct device *dev)
+static void coreboot_bus_remove(struct device *dev)
 {
 	struct coreboot_device *device = CB_DEV(dev);
 	struct coreboot_driver *driver = CB_DRV(dev->driver);
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 static struct bus_type coreboot_bus_type = {
diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
index 511b20ff35a3..1ae6779a0dd6 100644
--- a/drivers/fpga/dfl.c
+++ b/drivers/fpga/dfl.c
@@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
 	return ddrv->probe(ddev);
 }
 
-static int dfl_bus_remove(struct device *dev)
+static void dfl_bus_remove(struct device *dev)
 {
 	struct dfl_driver *ddrv = to_dfl_drv(dev->driver);
 	struct dfl_device *ddev = to_dfl_dev(dev);
 
 	if (ddrv->remove)
 		ddrv->remove(ddev);
-
-	return 0;
 }
 
 static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 7db332139f7d..dbed2524fd47 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
 	return ret;
 }
 
-static int hid_device_remove(struct device *dev)
+static void hid_device_remove(struct device *dev)
 {
 	struct hid_device *hdev = to_hid_device(dev);
 	struct hid_driver *hdrv;
@@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
 
 	if (!hdev->io_started)
 		up(&hdev->driver_input_lock);
-
-	return 0;
 }
 
 static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
index f0802b047ed8..8a51bd9cd093 100644
--- a/drivers/hid/intel-ish-hid/ishtp/bus.c
+++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
@@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, struct device_driver *drv)
  *
  * Return: Return value from driver remove() call.
  */
-static int ishtp_cl_device_remove(struct device *dev)
+static void ishtp_cl_device_remove(struct device *dev)
 {
 	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
 	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev->driver);
@@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 /**
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 57bbbaa4e8f7..392c1ac4f819 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -922,7 +922,7 @@ static int vmbus_probe(struct device *child_device)
 /*
  * vmbus_remove - Remove a vmbus device
  */
-static int vmbus_remove(struct device *child_device)
+static void vmbus_remove(struct device *child_device)
 {
 	struct hv_driver *drv;
 	struct hv_device *dev = device_to_hv_device(child_device);
@@ -932,11 +932,8 @@ static int vmbus_remove(struct device *child_device)
 		if (drv->remove)
 			drv->remove(dev);
 	}
-
-	return 0;
 }
 
-
 /*
  * vmbus_shutdown - Shutdown a vmbus device
  */
diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
index 66eed2dff818..7e753a75d23b 100644
--- a/drivers/hwtracing/intel_th/core.c
+++ b/drivers/hwtracing/intel_th/core.c
@@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
 
 static void intel_th_device_remove(struct intel_th_device *thdev);
 
-static int intel_th_remove(struct device *dev)
+static void intel_th_remove(struct device *dev)
 {
 	struct intel_th_driver *thdrv = to_intel_th_driver(dev->driver);
 	struct intel_th_device *thdev = to_intel_th_device(dev);
@@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_active(dev);
 	pm_runtime_enable(dev);
-
-	return 0;
 }
 
 static struct bus_type intel_th_bus = {
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 84f12bf90644..54964fbe3f03 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
 	return status;
 }
 
-static int i2c_device_remove(struct device *dev)
+static void i2c_device_remove(struct device *dev)
 {
 	struct i2c_client	*client = to_i2c_client(dev);
 	struct i2c_adapter      *adap;
@@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
 	client->irq = 0;
 	if (client->flags & I2C_CLIENT_HOST_NOTIFY)
 		pm_runtime_put(&client->adapter->dev);
-
-	/* return always 0 because there is WIP to make remove-functions void */
-	return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index e2e12a5585e5..c3b4c677b442 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
 	return driver->probe(i3cdev);
 }
 
-static int i3c_device_remove(struct device *dev)
+static void i3c_device_remove(struct device *dev)
 {
 	struct i3c_device *i3cdev = dev_to_i3cdev(dev);
 	struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
@@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
 		driver->remove(i3cdev);
 
 	i3c_device_free_ibi(i3cdev);
-
-	return 0;
 }
 
 struct bus_type i3c_bus_type = {
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index 61fa7e724172..db58a01b23d3 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device *dev)
 	return gameport->drv ? 0 : -ENODEV;
 }
 
-static int gameport_driver_remove(struct device *dev)
+static void gameport_driver_remove(struct device *dev)
 {
 	struct gameport *gameport = to_gameport_port(dev);
 	struct gameport_driver *drv = to_gameport_driver(dev->driver);
 
 	drv->disconnect(gameport);
-	return 0;
 }
 
 static void gameport_attach_driver(struct gameport_driver *drv)
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 29f491082926..ec117be3d8d8 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -778,12 +778,11 @@ static int serio_driver_probe(struct device *dev)
 	return serio_connect_driver(serio, drv);
 }
 
-static int serio_driver_remove(struct device *dev)
+static void serio_driver_remove(struct device *dev)
 {
 	struct serio *serio = to_serio_port(dev);
 
 	serio_disconnect_driver(serio);
-	return 0;
 }
 
 static void serio_cleanup(struct serio *serio)
diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
index 7de9605cac4f..b1c3198355e7 100644
--- a/drivers/ipack/ipack.c
+++ b/drivers/ipack/ipack.c
@@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
 	return drv->ops->probe(dev);
 }
 
-static int ipack_bus_remove(struct device *device)
+static void ipack_bus_remove(struct device *device)
 {
 	struct ipack_device *dev = to_ipack_dev(device);
 	struct ipack_driver *drv = to_ipack_driver(device->driver);
 
 	if (drv->ops->remove)
 		drv->ops->remove(dev);
-
-	return 0;
 }
 
 static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c
index 49af60bdac92..c1fdf2896021 100644
--- a/drivers/macintosh/macio_asic.c
+++ b/drivers/macintosh/macio_asic.c
@@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
 	return error;
 }
 
-static int macio_device_remove(struct device *dev)
+static void macio_device_remove(struct device *dev)
 {
 	struct macio_dev * macio_dev = to_macio_device(dev);
 	struct macio_driver * drv = to_macio_driver(dev->driver);
@@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(macio_dev);
 	macio_dev_put(macio_dev);
-
-	return 0;
 }
 
 static void macio_device_shutdown(struct device *dev)
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index 38fbb3b59873..edf4ee6eff25 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
 	return ret;
 }
 
-static int mcb_remove(struct device *dev)
+static void mcb_remove(struct device *dev)
 {
 	struct mcb_driver *mdrv = to_mcb_driver(dev->driver);
 	struct mcb_device *mdev = to_mcb_device(dev);
@@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
 	module_put(carrier_mod);
 
 	put_device(&mdev->dev);
-
-	return 0;
 }
 
 static void mcb_shutdown(struct device *dev)
diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
index b730225ca887..a2b18e2bed1b 100644
--- a/drivers/media/pci/bt8xx/bttv-gpio.c
+++ b/drivers/media/pci/bt8xx/bttv-gpio.c
@@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
 	return sub->probe ? sub->probe(sdev) : -ENODEV;
 }
 
-static int bttv_sub_remove(struct device *dev)
+static void bttv_sub_remove(struct device *dev)
 {
 	struct bttv_sub_device *sdev = to_bttv_sub_dev(dev);
 	struct bttv_sub_driver *sub = to_bttv_sub_drv(dev->driver);
 
 	if (sub->remove)
 		sub->remove(sdev);
-	return 0;
 }
 
 struct bus_type bttv_sub_bus_type = {
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
index bb1065990aeb..660df7d269fa 100644
--- a/drivers/memstick/core/memstick.c
+++ b/drivers/memstick/core/memstick.c
@@ -91,7 +91,7 @@ static int memstick_device_probe(struct device *dev)
 	return rc;
 }
 
-static int memstick_device_remove(struct device *dev)
+static void memstick_device_remove(struct device *dev)
 {
 	struct memstick_dev *card = container_of(dev, struct memstick_dev,
 						  dev);
@@ -105,7 +105,6 @@ static int memstick_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
index eff9423e90f5..2fa592c37c6f 100644
--- a/drivers/mfd/mcp-core.c
+++ b/drivers/mfd/mcp-core.c
@@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
 	return drv->probe(mcp);
 }
 
-static int mcp_bus_remove(struct device *dev)
+static void mcp_bus_remove(struct device *dev)
 {
 	struct mcp *mcp = to_mcp(dev);
 	struct mcp_driver *drv = to_mcp_driver(dev->driver);
 
 	drv->remove(mcp);
-	return 0;
 }
 
 static struct bus_type mcp_bus_type = {
diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
index 935acc6bbf3c..3bf2bb4fd152 100644
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device *dev)
  *
  * Return:  0 on success; < 0 otherwise
  */
-static int mei_cl_device_remove(struct device *dev)
+static void mei_cl_device_remove(struct device *dev)
 {
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct mei_cl_driver *cldrv = to_mei_cl_driver(dev->driver);
@@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device *dev)
 
 	mei_cl_bus_module_put(cldev);
 	module_put(THIS_MODULE);
-
-	return 0;
 }
 
 static ssize_t name_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
index 667e574a7df2..52656fc87e99 100644
--- a/drivers/misc/tifm_core.c
+++ b/drivers/misc/tifm_core.c
@@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
 	return;
 }
 
-static int tifm_device_remove(struct device *dev)
+static void tifm_device_remove(struct device *dev)
 {
 	struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
 	struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
@@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index 4383c262b3f5..f6b7a9c5bbff 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
 	return drv->probe(card);
 }
 
-static int mmc_bus_remove(struct device *dev)
+static void mmc_bus_remove(struct device *dev)
 {
 	struct mmc_driver *drv = to_mmc_driver(dev->driver);
 	struct mmc_card *card = mmc_dev_to_card(dev);
 
 	drv->remove(card);
-
-	return 0;
 }
 
 static void mmc_bus_shutdown(struct device *dev)
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index 3d709029e07c..fda03b35c14a 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sdio_bus_remove(struct device *dev)
+static void sdio_bus_remove(struct device *dev)
 {
 	struct sdio_driver *drv = to_sdio_driver(dev->driver);
 	struct sdio_func *func = dev_to_sdio_func(dev);
@@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
 		pm_runtime_put_sync(dev);
 
 	dev_pm_domain_detach(dev, false);
-
-	return 0;
 }
 
 static const struct dev_pm_ops sdio_bus_pm_ops = {
diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
index ccec29970d5b..14b154929533 100644
--- a/drivers/net/netdevsim/bus.c
+++ b/drivers/net/netdevsim/bus.c
@@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
 	return nsim_dev_probe(nsim_bus_dev);
 }
 
-static int nsim_bus_remove(struct device *dev)
+static void nsim_bus_remove(struct device *dev)
 {
 	struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
 
 	nsim_dev_remove(nsim_bus_dev);
-	return 0;
 }
 
 static int nsim_num_vf(struct device *dev)
diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
index f8f75a504a58..27dd93deff6e 100644
--- a/drivers/ntb/core.c
+++ b/drivers/ntb/core.c
@@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_remove(struct device *dev)
+static void ntb_remove(struct device *dev)
 {
 	struct ntb_dev *ntb;
 	struct ntb_client *client;
@@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
 		client->ops.remove(client, ntb);
 		put_device(dev);
 	}
-
-	return 0;
 }
 
 static void ntb_dev_release(struct device *dev)
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 4a02561cfb96..a9b97ebc71ac 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_transport_bus_remove(struct device *dev)
+static void ntb_transport_bus_remove(struct device *dev)
 {
 	const struct ntb_transport_client *client;
 
@@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device *dev)
 	client->remove(dev);
 
 	put_device(dev);
-
-	return 0;
 }
 
 static struct bus_type ntb_transport_bus = {
diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
index e6aa87043a95..9dc7f3edd42b 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int nvdimm_bus_remove(struct device *dev)
+static void nvdimm_bus_remove(struct device *dev)
 {
 	struct nd_device_driver *nd_drv = to_nd_device_driver(dev->driver);
 	struct module *provider = to_bus_provider(dev);
@@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
 	dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver->name,
 			dev_name(dev));
 	module_put(provider);
-	return 0;
 }
 
 static void nvdimm_bus_shutdown(struct device *dev)
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index 4b9ad96bf1b2..502eb79cd551 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device *dev)
 	return driver->probe(epf);
 }
 
-static int pci_epf_device_remove(struct device *dev)
+static void pci_epf_device_remove(struct device *dev)
 {
 	struct pci_epf *epf = to_pci_epf(dev);
 	struct pci_epf_driver *driver = to_pci_epf_driver(dev->driver);
@@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device *dev)
 	if (driver->remove)
 		driver->remove(epf);
 	epf->driver = NULL;
-
-	return 0;
 }
 
 static struct bus_type pci_epf_bus_type = {
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3a72352aa5cf..a0615395500a 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
 	return error;
 }
 
-static int pci_device_remove(struct device *dev)
+static void pci_device_remove(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_driver *drv = pci_dev->driver;
@@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
 	 */
 
 	pci_dev_put(pci_dev);
-	return 0;
 }
 
 static void pci_device_shutdown(struct device *dev)
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index bd81aa64d011..5bd1b80424e7 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
 	return;
 }
 
-static int pcmcia_device_remove(struct device *dev)
+static void pcmcia_device_remove(struct device *dev)
 {
 	struct pcmcia_device *p_dev;
 	struct pcmcia_driver *p_drv;
@@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device *dev)
 	/* references from pcmcia_device_probe */
 	pcmcia_put_dev(p_dev);
 	module_put(p_drv->owner);
-
-	return 0;
 }
 
 
diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c
index 0169677c243e..0a40dd9c94ed 100644
--- a/drivers/platform/surface/aggregator/bus.c
+++ b/drivers/platform/surface/aggregator/bus.c
@@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
 		->probe(to_ssam_device(dev));
 }
 
-static int ssam_bus_remove(struct device *dev)
+static void ssam_bus_remove(struct device *dev)
 {
 	struct ssam_device_driver *sdrv = to_ssam_device_driver(dev->driver);
 
 	if (sdrv->remove)
 		sdrv->remove(to_ssam_device(dev));
-
-	return 0;
 }
 
 struct bus_type ssam_bus_type = {
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 62e0d56a3332..a76313006bdc 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int wmi_dev_remove(struct device *dev)
+static void wmi_dev_remove(struct device *dev)
 {
 	struct wmi_block *wblock = dev_to_wblock(dev);
 	struct wmi_driver *wdriver =
@@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
 
 	if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
 		dev_warn(dev, "failed to disable device\n");
-
-	return 0;
 }
 
 static struct class wmi_bus_class = {
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index c29d590c5e4f..cc6757dfa3f1 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
 	return error;
 }
 
-static int pnp_device_remove(struct device *dev)
+static void pnp_device_remove(struct device *dev)
 {
 	struct pnp_dev *pnp_dev = to_pnp_dev(dev);
 	struct pnp_driver *drv = pnp_dev->driver;
@@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
 		pnp_disable_dev(pnp_dev);
 
 	pnp_device_detach(pnp_dev);
-	return 0;
 }
 
 static void pnp_device_shutdown(struct device *dev)
diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c
index 72874153972e..a72bb0a40fcf 100644
--- a/drivers/rapidio/rio-driver.c
+++ b/drivers/rapidio/rio-driver.c
@@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
  * driver, then run the driver remove() method.  Then update
  * the reference count.
  */
-static int rio_device_remove(struct device *dev)
+static void rio_device_remove(struct device *dev)
 {
 	struct rio_dev *rdev = to_rio_dev(dev);
 	struct rio_driver *rdrv = rdev->driver;
@@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
 	}
 
 	rio_dev_put(rdev);
-
-	return 0;
 }
 
 static void rio_device_shutdown(struct device *dev)
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index c1404d3dae2c..9151836190ce 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -530,14 +530,13 @@ static int rpmsg_dev_probe(struct device *dev)
 	return err;
 }
 
-static int rpmsg_dev_remove(struct device *dev)
+static void rpmsg_dev_remove(struct device *dev)
 {
 	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
 	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
-	int err = 0;
 
 	if (rpdev->ops->announce_destroy)
-		err = rpdev->ops->announce_destroy(rpdev);
+		rpdev->ops->announce_destroy(rpdev);
 
 	if (rpdrv->remove)
 		rpdrv->remove(rpdev);
@@ -546,8 +545,6 @@ static int rpmsg_dev_remove(struct device *dev)
 
 	if (rpdev->ept)
 		rpmsg_destroy_ept(rpdev->ept);
-
-	return err;
 }
 
 static struct bus_type rpmsg_bus = {
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
index a6aeab1ea0ae..382c5b5f8cd3 100644
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -439,15 +439,13 @@ module_exit(cleanup_ccwgroup);
 
 /************************** driver stuff ******************************/
 
-static int ccwgroup_remove(struct device *dev)
+static void ccwgroup_remove(struct device *dev)
 {
 	struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
 	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(dev->driver);
 
 	if (gdrv->remove)
 		gdrv->remove(gdev);
-
-	return 0;
 }
 
 static void ccwgroup_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 092fd1ea5799..ebc321edba51 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -1371,7 +1371,7 @@ static int css_probe(struct device *dev)
 	return ret;
 }
 
-static int css_remove(struct device *dev)
+static void css_remove(struct device *dev)
 {
 	struct subchannel *sch;
 
@@ -1379,8 +1379,6 @@ static int css_remove(struct device *dev)
 	if (sch->driver->remove)
 		sch->driver->remove(sch);
 	sch->driver = NULL;
-
-	return 0;
 }
 
 static void css_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index cd5d2d4d8e46..adf33b653d87 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -1741,7 +1741,7 @@ ccw_device_probe (struct device *dev)
 	return 0;
 }
 
-static int ccw_device_remove(struct device *dev)
+static void ccw_device_remove(struct device *dev)
 {
 	struct ccw_device *cdev = to_ccwdev(dev);
 	struct ccw_driver *cdrv = cdev->drv;
@@ -1775,8 +1775,6 @@ static int ccw_device_remove(struct device *dev)
 	spin_unlock_irq(cdev->ccwlock);
 	io_subchannel_quiesce(sch);
 	__disable_cmf(cdev);
-
-	return 0;
 }
 
 static void ccw_device_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index b31711307e5a..b6b4589c70bd 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -28,15 +28,13 @@ static int scmdev_probe(struct device *dev)
 	return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV;
 }
 
-static int scmdev_remove(struct device *dev)
+static void scmdev_remove(struct device *dev)
 {
 	struct scm_device *scmdev = to_scm_dev(dev);
 	struct scm_driver *scmdrv = to_scm_drv(dev->driver);
 
 	if (scmdrv->remove)
 		scmdrv->remove(scmdev);
-
-	return 0;
 }
 
 static int scmdev_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index 8d3a1d84a757..0992edcaf1af 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -901,7 +901,7 @@ static int ap_device_probe(struct device *dev)
 	return rc;
 }
 
-static int ap_device_remove(struct device *dev)
+static void ap_device_remove(struct device *dev)
 {
 	struct ap_device *ap_dev = to_ap_dev(dev);
 	struct ap_driver *ap_drv = ap_dev->drv;
@@ -926,8 +926,6 @@ static int ap_device_remove(struct device *dev)
 	ap_dev->drv = NULL;
 
 	put_device(dev);
-
-	return 0;
 }
 
 struct ap_queue *ap_get_qdev(ap_qid_t qid)
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 5b3a20a140f9..58f69366bdcc 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device *dev)
 	return error;
 }
 
-static int sdebug_driver_remove(struct device *dev)
+static void sdebug_driver_remove(struct device *dev)
 {
 	struct sdebug_host_info *sdbg_host;
 	struct sdebug_dev_info *sdbg_devinfo, *tmp;
@@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device *dev)
 	}
 
 	scsi_host_put(sdbg_host->shost);
-	return 0;
 }
 
 static int pseudo_lld_bus_match(struct device *dev,
diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
index 1794ff0106bc..7c4f32d76966 100644
--- a/drivers/siox/siox-core.c
+++ b/drivers/siox/siox-core.c
@@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
 	return sdriver->probe(sdevice);
 }
 
-static int siox_remove(struct device *dev)
+static void siox_remove(struct device *dev)
 {
 	struct siox_driver *sdriver =
 		container_of(dev->driver, struct siox_driver, driver);
@@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
 
 	if (sdriver->remove)
 		sdriver->remove(sdevice);
-
-	return 0;
 }
 
 static void siox_shutdown(struct device *dev)
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 1d2bc181da05..78480e332ab8 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
 	return ret;
 }
 
-static int slim_device_remove(struct device *dev)
+static void slim_device_remove(struct device *dev)
 {
 	struct slim_device *sbdev = to_slim_device(dev);
 	struct slim_driver *sbdrv;
@@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
 		if (sbdrv->remove)
 			sbdrv->remove(sbdev);
 	}
-
-	return 0;
 }
 
 static int slim_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
index 7abfc8c4fdc7..475a57b435b2 100644
--- a/drivers/soc/qcom/apr.c
+++ b/drivers/soc/qcom/apr.c
@@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int apr_device_remove(struct device *dev)
+static void apr_device_remove(struct device *dev)
 {
 	struct apr_device *adev = to_apr_device(dev);
 	struct apr_driver *adrv;
@@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
 		idr_remove(&apr->svcs_idr, adev->svc_id);
 		spin_unlock(&apr->svcs_lock);
 	}
-
-	return 0;
 }
 
 static int apr_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index c99181165321..ad2b558dc9cb 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
 	return ret;
 }
 
-static int spi_remove(struct device *dev)
+static void spi_remove(struct device *dev)
 {
 	const struct spi_driver		*sdrv = to_spi_driver(dev->driver);
 
@@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
 	}
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void spi_shutdown(struct device *dev)
diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
index 51f5aeb65b3b..b37ead9e2fad 100644
--- a/drivers/spmi/spmi.c
+++ b/drivers/spmi/spmi.c
@@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
 	return err;
 }
 
-static int spmi_drv_remove(struct device *dev)
+static void spmi_drv_remove(struct device *dev)
 {
 	const struct spmi_driver *sdrv = to_spmi_driver(dev->driver);
 
@@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
-	return 0;
 }
 
 static void spmi_drv_shutdown(struct device *dev)
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 3a29b5570f9f..8a93c83cb6f8 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device *dev)
 		ssb_drv->shutdown(ssb_dev);
 }
 
-static int ssb_device_remove(struct device *dev)
+static void ssb_device_remove(struct device *dev)
 {
 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
@@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
 	if (ssb_drv && ssb_drv->remove)
 		ssb_drv->remove(ssb_dev);
 	ssb_device_put(ssb_dev);
-
-	return 0;
 }
 
 static int ssb_device_probe(struct device *dev)
diff --git a/drivers/staging/fieldbus/anybuss/host.c b/drivers/staging/fieldbus/anybuss/host.c
index 0f730efe9a6d..8a75f6642c78 100644
--- a/drivers/staging/fieldbus/anybuss/host.c
+++ b/drivers/staging/fieldbus/anybuss/host.c
@@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int anybus_bus_remove(struct device *dev)
+static void anybus_bus_remove(struct device *dev)
 {
 	struct anybuss_client_driver *adrv =
 		to_anybuss_client_driver(dev->driver);
 
 	if (adrv->remove)
 		adrv->remove(to_anybuss_client(dev));
-
-	return 0;
 }
 
 static struct bus_type anybus_bus = {
diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c
index 13d319860da5..5a5c17a4519b 100644
--- a/drivers/staging/greybus/gbphy.c
+++ b/drivers/staging/greybus/gbphy.c
@@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int gbphy_dev_remove(struct device *dev)
+static void gbphy_dev_remove(struct device *dev)
 {
 	struct gbphy_driver *gbphy_drv = to_gbphy_driver(dev->driver);
 	struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
@@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
 	pm_runtime_dont_use_autosuspend(dev);
-
-	return 0;
 }
 
 static struct bus_type gbphy_bus_type = {
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 6d0b0e67e79e..cbb2118fb35e 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m, struct Scsi_Host *host)
 }
 
 static int tcm_loop_driver_probe(struct device *);
-static int tcm_loop_driver_remove(struct device *);
+static void tcm_loop_driver_remove(struct device *);
 
 static int pseudo_lld_bus_match(struct device *dev,
 				struct device_driver *dev_driver)
@@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device *dev)
 	return 0;
 }
 
-static int tcm_loop_driver_remove(struct device *dev)
+static void tcm_loop_driver_remove(struct device *dev)
 {
 	struct tcm_loop_hba *tl_hba;
 	struct Scsi_Host *sh;
@@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device *dev)
 
 	scsi_remove_host(sh);
 	scsi_host_put(sh);
-	return 0;
 }
 
 static void tcm_loop_release_adapter(struct device *dev)
diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
index a062befcb3b2..7018d959f775 100644
--- a/drivers/thunderbolt/domain.c
+++ b/drivers/thunderbolt/domain.c
@@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
 	return driver->probe(svc, id);
 }
 
-static int tb_service_remove(struct device *dev)
+static void tb_service_remove(struct device *dev)
 {
 	struct tb_service *svc = tb_to_service(dev);
 	struct tb_service_driver *driver;
@@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
 	driver = container_of(dev->driver, struct tb_service_driver, driver);
 	if (driver->remove)
 		driver->remove(svc);
-
-	return 0;
 }
 
 static void tb_service_shutdown(struct device *dev)
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 9cdfcfe07e87..92498961fd92 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int serdev_drv_remove(struct device *dev)
+static void serdev_drv_remove(struct device *dev)
 {
 	const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
 	if (sdrv->remove)
 		sdrv->remove(to_serdev_device(dev));
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static struct bus_type serdev_bus_type = {
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 7e13b74e60e5..4169cf40a03b 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
 	return drv->probe(to_ulpi_dev(dev));
 }
 
-static int ulpi_remove(struct device *dev)
+static void ulpi_remove(struct device *dev)
 {
 	struct ulpi_driver *drv = to_ulpi_driver(dev->driver);
 
 	if (drv->remove)
 		drv->remove(to_ulpi_dev(dev));
-
-	return 0;
 }
 
 static struct bus_type ulpi_bus = {
diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
index 7133818a58b9..9e38142acd38 100644
--- a/drivers/usb/serial/bus.c
+++ b/drivers/usb/serial/bus.c
@@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device *dev)
 	return retval;
 }
 
-static int usb_serial_device_remove(struct device *dev)
+static void usb_serial_device_remove(struct device *dev)
 {
 	struct usb_serial_port *port = to_usb_serial_port(dev);
 	struct usb_serial_driver *driver;
@@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device *dev)
 
 	if (!autopm_err)
 		usb_autopm_put_interface(port->serial->interface);
-
-	return 0;
 }
 
 static ssize_t new_id_store(struct device_driver *driver,
diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
index 7f3c9a8e2bf0..78e0e78954f2 100644
--- a/drivers/usb/typec/bus.c
+++ b/drivers/usb/typec/bus.c
@@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
 	return ret;
 }
 
-static int typec_remove(struct device *dev)
+static void typec_remove(struct device *dev)
 {
 	struct typec_altmode_driver *drv = to_altmode_driver(dev->driver);
 	struct typec_altmode *adev = to_typec_altmode(dev);
@@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
 
 	adev->desc = NULL;
 	adev->ops = NULL;
-
-	return 0;
 }
 
 struct bus_type typec_bus = {
diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
index bb3f1d1f0422..3fc4525fc05c 100644
--- a/drivers/vdpa/vdpa.c
+++ b/drivers/vdpa/vdpa.c
@@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
 	return ret;
 }
 
-static int vdpa_dev_remove(struct device *d)
+static void vdpa_dev_remove(struct device *d)
 {
 	struct vdpa_device *vdev = dev_to_vdpa(d);
 	struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver);
 
 	if (drv && drv->remove)
 		drv->remove(vdev);
-
-	return 0;
 }
 
 static struct bus_type vdpa_bus = {
diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_driver.c
index c368ec824e2b..e2cb1ff56f6c 100644
--- a/drivers/vfio/mdev/mdev_driver.c
+++ b/drivers/vfio/mdev/mdev_driver.c
@@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
 	return ret;
 }
 
-static int mdev_remove(struct device *dev)
+static void mdev_remove(struct device *dev)
 {
 	struct mdev_driver *drv =
 		container_of(dev->driver, struct mdev_driver, driver);
@@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
 		drv->remove(mdev);
 
 	mdev_detach_iommu(mdev);
-
-	return 0;
 }
 
 static int mdev_match(struct device *dev, struct device_driver *drv)
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index 4b15c00c0a0a..2a6055c0d4d3 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
 
 }
 
-static int virtio_dev_remove(struct device *_d)
+static void virtio_dev_remove(struct device *_d)
 {
 	struct virtio_device *dev = dev_to_virtio(_d);
 	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
@@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
 
 	/* Acknowledge the device's existence again. */
 	virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
-	return 0;
 }
 
 static struct bus_type virtio_bus = {
diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
index 1b15afea28ee..8dba20186be3 100644
--- a/drivers/vme/vme.c
+++ b/drivers/vme/vme.c
@@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
 	return -ENODEV;
 }
 
-static int vme_bus_remove(struct device *dev)
+static void vme_bus_remove(struct device *dev)
 {
 	struct vme_driver *driver;
 	struct vme_dev *vdev = dev_to_vme_dev(dev);
@@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
 	driver = dev->platform_data;
 	if (driver->remove)
 		driver->remove(vdev);
-
-	return 0;
 }
 
 struct bus_type vme_bus_type = {
diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
index 2a93b7c9c159..2754bdfadcb8 100644
--- a/drivers/xen/xenbus/xenbus.h
+++ b/drivers/xen/xenbus/xenbus.h
@@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
 
 int xenbus_match(struct device *_dev, struct device_driver *_drv);
 int xenbus_dev_probe(struct device *_dev);
-int xenbus_dev_remove(struct device *_dev);
+void xenbus_dev_remove(struct device *_dev);
 int xenbus_register_driver_common(struct xenbus_driver *drv,
 				  struct xen_bus_type *bus,
 				  struct module *owner,
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 33d09b3f6211..bd003ca8acbe 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -325,7 +325,7 @@ int xenbus_dev_probe(struct device *_dev)
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_probe);
 
-int xenbus_dev_remove(struct device *_dev)
+void xenbus_dev_remove(struct device *_dev)
 {
 	struct xenbus_device *dev = to_xenbus_device(_dev);
 	struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
@@ -355,8 +355,6 @@ int xenbus_dev_remove(struct device *_dev)
 	if (!drv->allow_rebind ||
 	    xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)
 		xenbus_switch_state(dev, XenbusStateClosed);
-
-	return 0;
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_remove);
 
diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
index 1ea5e1d1545b..062777a45a74 100644
--- a/include/linux/device/bus.h
+++ b/include/linux/device/bus.h
@@ -91,7 +91,7 @@ struct bus_type {
 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
 	int (*probe)(struct device *dev);
 	void (*sync_state)(struct device *dev);
-	int (*remove)(struct device *dev);
+	void (*remove)(struct device *dev);
 	void (*shutdown)(struct device *dev);
 
 	int (*online)(struct device *dev);
diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
index 002fb5bf220b..c9579d97fbab 100644
--- a/sound/aoa/soundbus/core.c
+++ b/sound/aoa/soundbus/core.c
@@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return retval;
 }
 
-static int soundbus_device_remove(struct device *dev)
+static void soundbus_device_remove(struct device *dev)
 {
 	struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
 	struct soundbus_driver * drv = to_soundbus_driver(dev->driver);
@@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(soundbus_dev);
 	soundbus_dev_put(soundbus_dev);
-
-	return 0;
 }
 
 static void soundbus_device_shutdown(struct device *dev)
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 07:51:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 07:51:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155084.286423 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DCm-00043T-LC; Tue, 13 Jul 2021 07:51:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155084.286423; Tue, 13 Jul 2021 07:51:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DCm-00043M-GM; Tue, 13 Jul 2021 07:51:48 +0000
Received: by outflank-mailman (input) for mailman id 155084;
 Tue, 13 Jul 2021 07:51:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3DCl-00043G-H4
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 07:51:47 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8b6f9b98-74b9-4a7f-9c33-e33c2d989672;
 Tue, 13 Jul 2021 07:51:46 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2104.outbound.protection.outlook.com [104.47.18.104])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-6-vdIhfjQLN7qw195KT_2y0A-1; Tue, 13 Jul 2021 09:51:44 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4191.eurprd04.prod.outlook.com (2603:10a6:803:45::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Tue, 13 Jul
 2021 07:51:43 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 07:51:43 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0237.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 07:51:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8b6f9b98-74b9-4a7f-9c33-e33c2d989672
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626162705;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=tJDyZWNz9UB8xi3a2Tl57QvZ9V91tU1yw0GrhIYiE1w=;
	b=TEqZ78uN7sLesw30bQqtXTZ1u6UVGQDEXgKxBU7j8uUqWVx8G1niWdviqCf1Ops8ynR5su
	zZPB9vNZopECJxSw18buDr+/JZDdneNmg7cYVGTLeYOb1iCl+zqolRT1eNcPZK+nVsOFBh
	xoPQGRJ40ieMLM9p71WdiKDYQ09Ttnc=
X-MC-Unique: vdIhfjQLN7qw195KT_2y0A-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=oBDKsfmjgTcAw+LUqmFVsLtVLgoSxydYf/L3Im/UGZUQfS23hLHX8dTXQW8Rvzrk5iMQ/5GV19qL16ecz3k3QNJd7Zcg+0COHvIvD09jI1p78YuYSELdXPE1gQVnXE1k3nbw4dpuL4R71H9Ll1Ox68DJow/MEQ0o1nnCqGUd9AVvjAbckaOoeJ0ipcgP6XOQGtzGhlyQbo0xUCVeLZ9IhX1Qb3QCfQqazkxX05DrNApOCwljsQT8Q6RlEePy2lI2wcMdIVWL1SIk9PDN/3uchUH9HIF9x/080jYgUBosclhzDVQuNFpvay1009llcrpOBgIPvxE67CcWN+iEq9K+Tg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=tJDyZWNz9UB8xi3a2Tl57QvZ9V91tU1yw0GrhIYiE1w=;
 b=IUbfzThG1rPG9QVlZT8oymtTKyEbiCc0+NshtnPVUsx6kXNDXYhjtXsjk6HOFhcyyxQ55auWZZ5/dwvbjeOhh0u7JR57eQBUh00By2xKeBWfaW57k88GsQDMW9VWK12xaYeA9WZukBV6/+a58LskcXJcJApfRwKdGblh3AvSFomxp0HU0T8AcJSrDzsDkpGmgcUTUCl1A8EEtMHaA3aFr8vpbvG992NVjXOZyEEzxFq9nCrexHsGcgDZAqqI4xOYyMKd/J27y5t2Ovk5HKxsdI47/n2TWTNfEJJ357UbGlu2pxH4veBOU8JPtpa1spi5EOV37t9cwXUOmdnfisk3LA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 17/31] build: convert binfile use to if_changed
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-18-anthony.perard@citrix.com>
 <dbb33a01-d54b-d4f3-caf3-5e5544d52095@suse.com> <YOxurzTEAfW3I8yU@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <ddc38760-c042-febb-822f-560a4b613e91@suse.com>
Date: Tue, 13 Jul 2021 09:51:45 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YOxurzTEAfW3I8yU@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0237.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6ab602b7-01d5-405f-c310-08d945d30e44
X-MS-TrafficTypeDiagnostic: VI1PR04MB4191:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4191D9F2C63290F4C4CA3721B3149@VI1PR04MB4191.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	SzxMXGjWgU+fRX+ErO8Oq4F3lQ+YnpknQVL5amqSkIgY/Tz+nJYq0uqXDJlXfHIWdphqBSwB/Ri/nymWUh+Ytq9Cil1Ew+86pgU+G0ASu/+0VddnOjlbCiJjiqdy3w/YUM4lTGK9LQtglcEfobQh+gID62G/mTWIhvU9zuc+N5F4pGcQb1uweGoujMsBEok3mVpHs9WaD3cGQ7KyohFmXoFTTZliSGv/Y95uK453Ae3wAQrJb5I2hj6ZjzpHvJQL4STAxnKtYO8TiBayHRHSAx+4ooT/2gR5AvZSqMTlLq+Fulfz93XbaDFYb9q2fRmvNhdSt0GTsUhO9gz25rSh+hefPzCL/pS2he/pPCFLaWII7pAJLhjfb+FW+53CMgtADNWhzNU+Xk6Rk+mGYloMyInSnM11TC8qBYQ4QRd7PynZxB35arPmORPcabphlBgBJqgZ5zM9IlzU3wfvKnPf3lj2nbGKUy2249/TYfqe55DvI3vN1NE+e28BAEnLeAbNJekWUt5YoGN1ETEk7yyisiLLBS52EIrSumpi14mVBDMRsEMm1tgoUmA3qmAwviUH9ruHA/hNjGtv5GPTNaqTqYQTXiFBYrU3S7sEfRDwDKBHCNuA/TD01luvGDKHe9JNZw2BMDq4jMVXLVxNTzIVv0EpNu3O0hDFs9GkKNvnnrZfkLUHm2fxQoFm0g/6q4NVadHEFJxpW5Pu3Uq40ma5w2PZwHvdTZqu8CWt2i09moU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(396003)(136003)(346002)(39850400004)(8676002)(54906003)(186003)(6916009)(38100700002)(66556008)(6486002)(956004)(2616005)(478600001)(66476007)(316002)(4326008)(31686004)(26005)(66946007)(16576012)(31696002)(7416002)(8936002)(36756003)(2906002)(86362001)(5660300002)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6ab602b7-01d5-405f-c310-08d945d30e44
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 07:51:43.0348
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: QVKPNd2dWU2AU2dOHUUVtN90Oc3OooYpjchuu9vrTP+JTD6vJRGM3pv+5fbG4gDaYl2ockJ1llCEklkeaUPGoQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4191

On 12.07.2021 18:32, Anthony PERARD wrote:
> On Wed, Jul 07, 2021 at 05:48:57PM +0200, Jan Beulich wrote:
>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>> --- a/xen/common/Makefile
>>> +++ b/xen/common/Makefile
>>> @@ -80,8 +80,12 @@ config.gz: $(CONF_FILE)
>>>  
>>>  config_data.o: config.gz
>>>  
>>> -config_data.S: $(BASEDIR)/tools/binfile
>>> -	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
>>> +quiet_cmd_binfile = BINFILE $@
>>> +cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data
>>
>> This is an abuse of $< which I consider overly confusing:
>> $(BASEDIR)/tools/binfile is not the input file to the rule. Instead
>> the script generates an assembly file "out of thin air", with not
>> input files at all. The rule and ...
>>
>>> +config_data.S: $(BASEDIR)/tools/binfile FORCE
>>
>> ... dependency shouldn't give a different impression. What would
>> be nice (without having checked how difficult this might be) would
>> be if quiet_cmd_binfile and cmd_binfile could move to xen/Rules.mk
>> and merely be used from here (and the other location, where the
>> same concern obviously applies).
> 
> I've though of having cmd_binfile in Rules.mk, but it's made more
> complicated by having a "-i" flag used in flask/.
> 
> So one things I've writen was:
> 
> config_data.S: $(BASEDIR)/tools/binfile FORCE
>        $(call if_changed,binfile,,config.gz xen_config_data)
> flask-policy.S: $(BASEDIR)/tools/binfile FORCE
>        $(call if_changed,binfile,-i,policy.bin xsm_flask_init_policy)
> 
> with:
> cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(2) $@ $(3)
> 
> I thought this would be confusing, so I avoid it.

Indeed that's why I did write "without having checked how difficult
this might be", because I definitely didn't want to suggest such
anomalies to get introduced. It's unhelpful that options have to
come first.

> But maybe with the lists of flags at the end, it would be better:
>    $(call if_changed,binfile,policy.bin xsm_flask_init_policy,-i)

Yes, this is a little better imo, but still not pretty.

> Still want to move cmd_binfile to Rules.mk?

I'd still like it to be moved, but without resulting in a rule
that's not consistent with others. Maybe we should have a
BINFILE_FLAGS variable (paralleling e.g. CFLAGS)?

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 08:09:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 08:09:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155099.286439 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DTO-0006My-Ba; Tue, 13 Jul 2021 08:08:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155099.286439; Tue, 13 Jul 2021 08:08:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DTO-0006Mr-5z; Tue, 13 Jul 2021 08:08:58 +0000
Received: by outflank-mailman (input) for mailman id 155099;
 Tue, 13 Jul 2021 08:08:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3DTM-0006Ml-Fg
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 08:08:56 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id de1e2a39-f357-43af-9572-dd69dc960230;
 Tue, 13 Jul 2021 08:08:55 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2059.outbound.protection.outlook.com [104.47.14.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-17-42D3VLmhPLyLmD_pbqe3yA-1; Tue, 13 Jul 2021 10:08:53 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4846.eurprd04.prod.outlook.com (2603:10a6:803:5b::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Tue, 13 Jul
 2021 08:08:51 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 08:08:51 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0050.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:51::25) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Tue, 13 Jul 2021 08:08:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: de1e2a39-f357-43af-9572-dd69dc960230
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626163734;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=Es8rIQ/70i6W1mPzYIj7OBzyjIGpeUVo6ozIzqQPwkk=;
	b=c0OQrVLOSvIrWFEsMH4xQ5lii9Jz/ShWP1v5iQb1Txg8c4//SloZvP3MX+MeSdGKU8hOAP
	lTQdZvWA2akUQF8QYth6M251k0K4tPEgwocTLMAvyifr6Oa1AAs1YLdPaBuCNzEUjm1iVp
	kuRL0BafG/NbQh+RqJu7y+kioEb5dyc=
X-MC-Unique: 42D3VLmhPLyLmD_pbqe3yA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YJqk1CVhV8XKfdoYZf+a29FHlxNJfBAZCVQIabn2N0zDx63+5D1npoEau9Q/Rx8ZAkZFl9gx5kwjVW76A0oIlnehFxvDVioQAw8gZtdHpNr2/L3vTNylDK26L019O5iqfFmKsdZrGbvDxdLWmVFDcfB9Fwi4F0gA+8C+2cVmnUa9m6R89Rtn2uWSQ9sIp14JEwsLpBmQ9wgxCUIRgXCQ6TeJeaB9kxnjO7W0Fc/V1bbBCMvUBmtIqJKwUXMMC7oX8IBUtf59cyxSI1UwJgUpmU6DUYMr0nkyLlKaMG5jIkHizXzUMQ8W5TK2xlzHDBP2rCdGF+VwRPwcYnf56qI4pw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Es8rIQ/70i6W1mPzYIj7OBzyjIGpeUVo6ozIzqQPwkk=;
 b=H+GiKoRkU9YTVsDprTFHFub9qJ0/64GJMzpMWslHHbyhFtP43aHDdePzDVQRtyn+UECwWufikVAgxiWpDo9MpRBqmXZU3pBUnXFhSda8q4A0LdcmPZE7/yMMZG/9s9tQBGLd85fCU3D5lEgoVDGndgrost2xI/rzCef3FwcwiaIzSvUuiksfx75YHTiIlfyyIaDqGqAY/4CJIkmOVzbgZjG3ebzb8239fdYbILBQaC1gPeVRS17wftnzXZUTjz9Ovt9mPuQA0nAomtZIAV04eju7BUvVF1l9mi4zdlehGVbyvF9qKtRvSpaT9dqvJuTyfjPzL8yrAXJ0Cg5wPpokGQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH] x86: mark compat hypercall regs clobbering for intended
 fall-through
Message-ID: <5cc873c5-fb76-52b3-5af6-0a5f4987f2d9@suse.com>
Date: Tue, 13 Jul 2021 10:08:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0050.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:51::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1dd41d1f-8d5f-4ea3-d4ed-08d945d57368
X-MS-TrafficTypeDiagnostic: VI1PR04MB4846:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB484665BAE604BBC2AE4DB734B3149@VI1PR04MB4846.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NpszVFiVqkyjaY/rLetJNIf9BR5wTKin0gebIFY4UrWkpyPNzYxi9GLr1wsKjodV0Ati1sUiyn6hP2iHoTQO+RuRXQndie3kkQGIsb5gFvJzULY7Qxda5Uo/bfwUYS5HWyuQ1IKgwEZcR8NClEBieNJslLbaQOqrFbLQGoyY6UaNs5e3buqQTYZWVHxgrTVVp827LgCYYjPBVwXj0XgUoj0/DIyAw3nTtS2ekpbceATxol3OGEiB6L6CvlLdHxm/RvXem6K4+Ko5ZMR7UFK6ZS60hYdjAwIC/hwWTEUdC5YA+eSKcJkciejAphI2jAkaN0/YM00ZO6guw7lpaS0TwP+SeDT6xa1RCsz0ar+bcHQs+7Xl2gob7tFuZTFsZrJgTD9j02oZFFWmmdxYy4vyTx3yAeqCIpguty2Mwyyf6mJ8iU0G0Sk/vDxCm9mcmvrB8/KZE6JMv2593ed3NfhF/s2c9VJrGGembfJvIAJ5T/9mcHJJHQnHuu5IDRLZAZLtAkYnyAAfOWlYvxb8bGKyYfUHGNQPhmJiAmfrU6hA66kVnn300csYGks/4AqS98VRWnj0mfcm1JYDpqi7gvbGQFxm6KXiW3cItGtbqDKKBlbpfQ0JnJPOHwE52hUzRJiUNLRPB78cH4EFUu1tooyq16Mz10eiSEOMsECzsbe7JVU5VEIn5sRKnnJSWLAxPc7o3Oepii9eTSgVfsVZwRXuk1+JmtYD5yYobnW831p9lgw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(376002)(136003)(346002)(39850400004)(5660300002)(478600001)(31696002)(36756003)(86362001)(4326008)(26005)(6486002)(8936002)(54906003)(316002)(16576012)(6916009)(8676002)(38100700002)(186003)(2906002)(31686004)(956004)(2616005)(66556008)(66946007)(66476007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1dd41d1f-8d5f-4ea3-d4ed-08d945d57368
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 08:08:51.7106
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lNRIeSFPtGnfMa+U2VubvESyAuwuhFTQcPi0KZQqbRrUVwkiLRw4oZuAkQvDWRqwpwYw5ai+pnjI09YAVuaorw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4846

Oddly enough in the original report Coverity only complained about the
native hypercall related switch() statements. Now that it has seen those
fixed, it complains about (only HVM) compat ones. Hence the CIDs below
are all for the HVM side of things, yet while at it take care of the PV
side as well.

Coverity-ID: 1487105, 1487106, 1487107, 1487108, 1487109.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
I have to admit that I really have trouble spotting a pattern in what
Coverity spots or does not spot.

--- a/xen/arch/x86/hvm/hypercall.c
+++ b/xen/arch/x86/hvm/hypercall.c
@@ -292,11 +292,11 @@ int hvm_hypercall(struct cpu_user_regs *
         /* Deliberately corrupt parameter regs not used by this hypercall. */
         switch ( hypercall_args_table[eax].compat )
         {
-        case 0: ebx = 0xdeadf00d;
-        case 1: ecx = 0xdeadf00d;
-        case 2: edx = 0xdeadf00d;
-        case 3: esi = 0xdeadf00d;
-        case 4: edi = 0xdeadf00d;
+        case 0: ebx = 0xdeadf00d; fallthrough;
+        case 1: ecx = 0xdeadf00d; fallthrough;
+        case 2: edx = 0xdeadf00d; fallthrough;
+        case 3: esi = 0xdeadf00d; fallthrough;
+        case 4: edi = 0xdeadf00d; fallthrough;
         case 5: ebp = 0xdeadf00d;
         }
 #endif
@@ -312,11 +312,11 @@ int hvm_hypercall(struct cpu_user_regs *
             /* Deliberately corrupt parameter regs used by this hypercall. */
             switch ( hypercall_args_table[eax].compat )
             {
-            case 6: regs->rbp = 0xdeadf00d;
-            case 5: regs->rdi = 0xdeadf00d;
-            case 4: regs->rsi = 0xdeadf00d;
-            case 3: regs->rdx = 0xdeadf00d;
-            case 2: regs->rcx = 0xdeadf00d;
+            case 6: regs->rbp = 0xdeadf00d; fallthrough;
+            case 5: regs->rdi = 0xdeadf00d; fallthrough;
+            case 4: regs->rsi = 0xdeadf00d; fallthrough;
+            case 3: regs->rdx = 0xdeadf00d; fallthrough;
+            case 2: regs->rcx = 0xdeadf00d; fallthrough;
             case 1: regs->rbx = 0xdeadf00d;
             }
         }
--- a/xen/arch/x86/pv/hypercall.c
+++ b/xen/arch/x86/pv/hypercall.c
@@ -197,11 +197,11 @@ void pv_hypercall(struct cpu_user_regs *
         /* Deliberately corrupt parameter regs not used by this hypercall. */
         switch ( hypercall_args_table[eax].compat )
         {
-        case 0: ebx = 0xdeadf00d;
-        case 1: ecx = 0xdeadf00d;
-        case 2: edx = 0xdeadf00d;
-        case 3: esi = 0xdeadf00d;
-        case 4: edi = 0xdeadf00d;
+        case 0: ebx = 0xdeadf00d; fallthrough;
+        case 1: ecx = 0xdeadf00d; fallthrough;
+        case 2: edx = 0xdeadf00d; fallthrough;
+        case 3: esi = 0xdeadf00d; fallthrough;
+        case 4: edi = 0xdeadf00d; fallthrough;
         case 5: ebp = 0xdeadf00d;
         }
 #endif
@@ -223,11 +223,11 @@ void pv_hypercall(struct cpu_user_regs *
             /* Deliberately corrupt parameter regs used by this hypercall. */
             switch ( hypercall_args_table[eax].compat )
             {
-            case 6: regs->ebp = 0xdeadf00d;
-            case 5: regs->edi = 0xdeadf00d;
-            case 4: regs->esi = 0xdeadf00d;
-            case 3: regs->edx = 0xdeadf00d;
-            case 2: regs->ecx = 0xdeadf00d;
+            case 6: regs->ebp = 0xdeadf00d; fallthrough;
+            case 5: regs->edi = 0xdeadf00d; fallthrough;
+            case 4: regs->esi = 0xdeadf00d; fallthrough;
+            case 3: regs->edx = 0xdeadf00d; fallthrough;
+            case 2: regs->ecx = 0xdeadf00d; fallthrough;
             case 1: regs->ebx = 0xdeadf00d;
             }
         }



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 08:13:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 08:13:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155111.286453 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DXR-0007nR-Uw; Tue, 13 Jul 2021 08:13:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155111.286453; Tue, 13 Jul 2021 08:13:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DXR-0007nK-Qj; Tue, 13 Jul 2021 08:13:09 +0000
Received: by outflank-mailman (input) for mailman id 155111;
 Tue, 13 Jul 2021 08:13:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DXQ-0007nA-9n; Tue, 13 Jul 2021 08:13:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DXP-0000Wz-TU; Tue, 13 Jul 2021 08:13:07 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DXP-0004bg-KN; Tue, 13 Jul 2021 08:13:07 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DXP-0002wa-Jt; Tue, 13 Jul 2021 08:13:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=wM+FOI+0d0CUMwiU8TJRbstj80M1GY1dM3gCxxhOqlg=; b=isGLxnU+2etemHfXno5C6NNXpn
	UtK8VRLWRZO0vkGiYOCTRvtuGlPll8R5flsa+9omoL5pUZCIbFqowvKWwDMLU06z5YJ7NOEyUVHfO
	io37jE9hSm9Wg9brzPaJiPeNYfCx7y+TILoG8ZC8RkTfFtWkeHGtUPN2iCUMMTBhi0uQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-amd64-libvirt
Message-Id: <E1m3DXP-0002wa-Jt@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 08:13:07 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-libvirt
testid guest-start

Tree: libvirt git://xenbits.xen.org/libvirt.git
Tree: libvirt_keycodemapdb https://gitlab.com/keycodemap/keycodemapdb.git
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163636/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-amd64-libvirt.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-amd64-libvirt.guest-start --summary-out=tmp/163636.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-amd64-libvirt guest-start
Searching for failure / basis pass:
 163600 fail [host=huxelrebe1] / 163321 [host=fiano1] 163311 [host=huxelrebe0] 163303 [host=godello1] 163299 [host=elbling1] 163292 [host=elbling0] 163276 [host=albana0] 163235 [host=godello0] 163228 [host=chardonnay0] 163220 [host=fiano0] 163213 [host=pinot1] 163204 [host=pinot0] 163194 [host=albana1] 163187 ok.
Failure / basis pass flights: 163600 / 163187
(tree with no url: minios)
Tree: libvirt git://xenbits.xen.org/libvirt.git
Tree: libvirt_keycodemapdb https://gitlab.com/keycodemap/keycodemapdb.git
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/libvirt.git#2c846fa6bcc11929c9fb857a22430fb9945654ad-2c846fa6bcc11929c9fb857a22430fb9945654ad https://gitlab.com/keycodemap/keycodemapdb.git#27acf0ef828bf719b2053ba398b195829413dbdd-27acf0ef828bf719b2053ba398b195829413dbdd git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0\
 dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c7437ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#13d5f87cc3b94bfccc501142df4a7b12fee3a6e7-86108e23d798bcd3fce35ad271b198f8a8611746 git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c8\
 1d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#c636a5fe59575d84778f676ca1728fbd1a7c7104-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
>From git://cache:9419/git://git.qemu.org/qemu
   57e28d34c0..eca7371335  master     -> origin/master
   eca7371335..9a0e86aeea  staging    -> origin/staging
Loaded 50592 nodes in revision graph
Searching for test results:
 163187 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
 163194 [host=albana1]
 163204 [host=pinot0]
 163213 [host=pinot1]
 163220 [host=fiano0]
 163228 [host=chardonnay0]
 163235 [host=godello0]
 163276 [host=albana0]
 163292 [host=elbling0]
 163299 [host=elbling1]
 163303 [host=godello1]
 163311 [host=huxelrebe0]
 163321 [host=fiano1]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163545 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163590 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
 163592 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163593 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163596 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163577 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163599 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163601 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163603 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163604 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c86bd2dc4c1d37653c27293b2dacee6bb46bb995 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163605 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8bf27550effb124221100c3c6f5d513dd29ec37d 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163606 blocked 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 c8f88810db2a25d6aacf65c1c60bc4f5d848a483
 163608 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c5b36c25c2fe1110cf8646ef02083c71757d6e00 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163609 blocked 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163611 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 3ce2765ac21dbd739e8216694b025aaabf4afff3
 163613 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163615 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163616 blocked 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 980d6acf1517f0602e6dcf05ea922cf14c95e9c0
 163617 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3983a767e3d85008c1fb4b8618ac67bf5aee7527 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163600 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163618 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163622 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 13d5f87cc3b94bfccc501142df4a7b12fee3a6e7 e3c30795823672eec9bde75187e184f23ed98d70 c636a5fe59575d84778f676ca1728fbd1a7c7104
 163623 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163625 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163628 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163629 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163631 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163633 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163635 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163636 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163187 (pass), for basis pass
 Result found: flight 163600 (fail), for basis failure
 Repro found: flight 163622 (pass), for basis pass
 Repro found: flight 163623 (fail), for basis failure
 0 revisions at 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163628 (pass), for last pass
 Result found: flight 163629 (fail), for first failure
 Repro found: flight 163631 (pass), for last pass
 Repro found: flight 163633 (fail), for first failure
 Repro found: flight 163635 (pass), for last pass
 Repro found: flight 163636 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163636/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-amd64-libvirt.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163636: tolerable FAIL

flight 163636 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163636/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-libvirt     14 guest-start             fail baseline untested


jobs:
 build-amd64-libvirt                                          pass    
 test-amd64-amd64-libvirt                                     fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 08:18:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 08:18:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155125.286470 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DcP-0000Gn-PK; Tue, 13 Jul 2021 08:18:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155125.286470; Tue, 13 Jul 2021 08:18:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3DcP-0000Gg-ML; Tue, 13 Jul 2021 08:18:17 +0000
Received: by outflank-mailman (input) for mailman id 155125;
 Tue, 13 Jul 2021 08:18:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DcO-0000GW-Kx; Tue, 13 Jul 2021 08:18:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DcO-0000eF-GD; Tue, 13 Jul 2021 08:18:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DcO-0004me-4b; Tue, 13 Jul 2021 08:18:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3DcO-0005Db-4E; Tue, 13 Jul 2021 08:18:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=reEaZRNEahlWH+PzbQzgbu5naxqa5jdgfq3DCYGN/nI=; b=CdPpOlTVx/qzJ07sWV3+Ri1SEX
	Igy6ttLgrHsNJ7MJlwJR2dPRokCdsTvPkSQei7xGuq3lTVoWLKHH6Z4E0picpv3+nd1Gv9U0/sPyK
	6JnmeyiiK86p96Ayb4Mgii/qyQ9VCCJWEbNkyXx+sz9HHaIjzUQ5gLAP9RIIUZaHuOHk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163624-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163624: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fb5b6220a9718fc28ae67f317d3611214a05589c
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 08:18:16 +0000

flight 163624 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163624/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fb5b6220a9718fc28ae67f317d3611214a05589c
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   39 days
Failing since        162368  2021-06-04 15:42:59 Z   38 days  109 attempts
Testing same since   163612  2021-07-12 17:41:17 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3703 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 08:37:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 08:37:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155155.286508 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Dul-0002zL-ND; Tue, 13 Jul 2021 08:37:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155155.286508; Tue, 13 Jul 2021 08:37:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Dul-0002zE-IQ; Tue, 13 Jul 2021 08:37:15 +0000
Received: by outflank-mailman (input) for mailman id 155155;
 Tue, 13 Jul 2021 08:37:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZRbA=MF=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3Duk-0002z8-JV
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 08:37:14 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 482b1506-75a2-4f00-bcc0-5d3e1bc552ba;
 Tue, 13 Jul 2021 08:37:13 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 482b1506-75a2-4f00-bcc0-5d3e1bc552ba
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626165433;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=DWTDIDsOJ+jJQltSfbd8k/oG42bvhthjSxkKwGx1Plk=;
  b=BJdzWgVz3zmjtBlcN+M7TPXQYKeE4eZrKwaE5x60cLXJdryw0WStCWJ3
   Kd0rWMXWVEdGk+y3EBRJOJWMPiljpaAHXAHIb6d5TEmTs4krCYSE/DW0R
   Hnu+KHbwoXcFYmSR/Vj/bHuj6zZltZGaaDjt6+xpW+2XUD/M4jX8Lr9/b
   4=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: DWBwoMmAMU7KUY1W6lkCoo5xleip9DSMbuvvxU//otzxrk9PBs12Ad2vBzJUO2ljgAkTsbp9BK
 Nwc80pb8ee03xSVGEQfpnfVF3TnX8rgG0Ae4O6il14Vw2CYPXKvyTn/SAOhcQr1rQ1EBqnJEey
 afdBQ8li5UNvoHbBK5t3U0QgFN1TG1WQJchLKGq/u5/5OgD4rJmTMhch9jj0jbAJNA/43aV7Sn
 sCnuFAHWR1nrDZ4FGninfJ9mPtEGTECQcnetgo25ET4qgIafPaHNl9ewGytwWoA5VOJIC5edy/
 WR8=
X-SBRS: 5.1
X-MesageID: 47833559
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:F/cZ1Kthop9uACUt0OlE5L5C7skCmIMji2hC6mlwRA09TyXGra
 6TdaUguiMc1gx8ZJhBo7C90KnpewK5yXcH2/huAV7EZniYhILIFvAf0WKG+Vzd8kLFh5VgPM
 tbAs5D4ZjLfCVHZKXBkXqF+rQbsaG6GcmT7I+0pRodLnAJGtRdBkVCe2Gm+yVNNXl77PECZe
 OhD6R81l+dkDgsH76G7i5vZZmzmzSHruOoXTc2QzocrCWehzKh77D3VzCewxclSjtKhZMv63
 LMnQDV7riq96jT8G6c60bjq7Bt3PfxwNpKA8KBzuATNzXXkw6tIKBsQaeLsjwZqPymrHwqjN
 7PiRE9ONkb0QKeQkiF5T/WnyXw2jcn7HHvjXWCh2H4nMD/TDUmT+JcmINwaHLimggdleA59J
 gO83OStpJRAx+Ftj/6/cL0WxZjkVfxiWY+kNQUk2dUXeIlGfxsRLQkjQdo+ao7bWXHANhNKp
 gpMCic3ocXTbqiVQGdgoE1q+bcB0jad3y9Mzo/Us/86UkdoJk29TpB+CSz9k1wva7VcKM0kN
 gsBJ4Y342mfvVmGZ6VO91xN/dfKla9DC4kY1jibWgOKsk8SjrwQtjMke4I2N0=
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="47833559"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fuWH7WFs/PPlylsdGhB91LzFOS/TKUfWL6mze9kX1lBOD3ApC/KnFByH+QEWu24IRX88AMwfmJ0HlF9aTStAorFBtnmndxOnzIF+VKUr65sCk6ufpqjQUmtRnqqM6IE9BrLyEeWfAa8i0bFJt9pSYHwVT6B5VPQgxFYfV81ozDE92AGh4DkmN1bc1hwKHWjSAsT+117rpV24dlkwHMDO0W9+funbjTk4sJiBRlq0g1vHdqgWcaiN9ZYjJOwSafV7D6YODuDQK9fgC7HmUujXhAEtkM8e6lP0ML16F4Oxwos8PU5jt/gpWl9n98T1sCOSHh9+nfHaMwiDNeNxumBYUQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=RyYacCnsEOtfBZL26rEsFEhjatanWjE22XhyJQZInP0=;
 b=ma8i2NNhEniBxk9iUme4VTaPPflWO73HH4/lnGNAGBcn8Ul7HlUXS9ZDPavNFLweNNWOGk8GYNR+9i58Vkm5trN5CRQjrkAHJ+E2qP3gK0EaNyBSbTz+rVmcNNcGNAIrZfRNKkQSwAARwUqUKFjoZDWHUhzwqYFtuoVil5P2vgeeVhv+7JTNw8UQ+DBVPbY78mJ7pxuyOzEceeTnmujOeRl3BtFPatqR9eZ4r9AO7//MJ/U9lCB6DqePXbnoqxxogwVvRym6ymt3AfJEi5xiAyegCBeeFUBnbJ9NdMD/uxqoNhc73wifggNQgF3Kk5VYWX5RmRakPPQdnMvtUoo6xA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=RyYacCnsEOtfBZL26rEsFEhjatanWjE22XhyJQZInP0=;
 b=mtJKl8xmd5uIaNZpH9N3nqss5GAXGaEeqnGYuhPIYvPlrE+DdVOwG9yvOIfxhoDFUTp7QpNRuOGWRI4A/dj306sA+RkL7+iSVAAhBLbGxVOm5pbl8f5eUp6qjGPP1MD3685MT7plRo6WA50Iaxyn1sixmfdBLyOyZm64aus+FdI=
To: Jan Beulich <jbeulich@suse.com>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>
CC: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
	<xen-devel@lists.xenproject.org>, Wei Liu <wl@xen.org>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-2-dpsmith@apertussolutions.com>
 <2a794038-f4f5-1525-5af8-d89b687a8043@citrix.com>
 <4a55dc14-5d02-2594-38e8-f732ead164a6@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v2 01/10] xen: Implement xen/alternative-call.h for use in
 common code
Message-ID: <a95650ec-1bd0-d36d-8a76-43c315fb620e@citrix.com>
Date: Tue, 13 Jul 2021 09:36:58 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <4a55dc14-5d02-2594-38e8-f732ead164a6@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO3P123CA0011.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:ba::16) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 98a7a5b1-ef91-4a8f-f2e5-08d945d964bb
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5648:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB56481051FBBC87386C3498D8BA149@SJ0PR03MB5648.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 95Qd1hRcl5kxjf8JdkRAG5M+T57hY1Hp0VvS6ccjqnPSRtGLp8BCFapgHNl1oQgb7r3YKJNNkmd4rzBj+t4ob+Aa4RJliz9Gd5PyjuL0j5l/qhcv0qCoXGBcimuI0qVcTq82uQ/lNyQsEo7jNFJh189Y/jrCqfGgjnwXLbIPVTfllktgWFLZgLnj4UwoAlyAc39ZP2kYY2grtFDluOXZy5AnOeHUMWRGcVI/Ea1HmsMuJPpUCzvswpRyl043BNTq7EwAPldn0uuxt5wjgUi0lfQADi4EwV9qRTePX7DdMLssatUzCTwxrDGmFe8kIfQbCk2t+sE3cn1xRZpGsYfuJrmrIHq0pb8uhoUxqgcLxDqwxDm32QR+1Kw8PIENvx/wtmbY8VDoZG/ZpqPaaXA5SMBjkg+yxQGzIHxh4DbWr+5IJMhl000lzWIREwIPf1c1JTypZuAnlv12nsJBHTN5N+fVo/2PE3EGFo/2foUEBgh3Ex4rTor7DDTTk3F0Wa/XC+BIjN0Zd2A95stwWmGOU1iU8uGbTWVnZQGYfkfSt3KB994fciNsf5VOK7rtP/f9UZZS1xEe+SmGOIvC5Yxs3jZ0RXdEmr5IM/sXthzUcai1Tsl2BUMZ7GoZEz+x0TXdKiL5OX6EhY6ZvTbcOCsV5l934Gn9Sj9b7FY1BVvMoPT4r3zf9wbyG9vN1E0mJyh5l+zaOExNAhXKLuBv+7IgBelB0U6f0Kjrnpa02+tQVrc=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(376002)(346002)(39850400004)(396003)(8676002)(31686004)(478600001)(6666004)(26005)(16576012)(8936002)(6486002)(86362001)(38100700002)(53546011)(4326008)(31696002)(5660300002)(66946007)(2906002)(36756003)(110136005)(66476007)(66556008)(54906003)(186003)(956004)(316002)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?ohaSnzoruCX9Inz1r/UVCbi9YjQS0buRbloPjRv?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 98a7a5b1-ef91-4a8f-f2e5-08d945d964bb
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 08:37:05.3122
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: zeEDOkII1aWk1zw+lqDuagt9PIsiB5qC2PZKPhJOZk7Snqcy+6ED4xyD8GFDqMV6cxCILILUChJ62X58bMRLn/dhDajtxGWZCfhWnrG/BI8=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5648
X-OriginatorOrg: citrix.com

On 13/07/2021 07:28, Jan Beulich wrote:
> On 13.07.2021 01:48, Andrew Cooper wrote:
>> On 12/07/2021 21:32, Daniel P. Smith wrote:
>>> diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alter=
native-call.h
>>> new file mode 100644
>>> index 0000000000..11d1c26068
>>> --- /dev/null
>>> +++ b/xen/include/xen/alternative-call.h
>>> @@ -0,0 +1,65 @@
>>> +/* SPDX-License-Identifier: GPL-2.0 */
>>> +#ifndef XEN_ALTERNATIVE_CALL
>>> +#define XEN_ALTERNATIVE_CALL
>>> +
>>> +/*
>>> + * Some subsystems in Xen may have multiple implementions, which can b=
e
>>> + * resolved to a single implementation at boot time.  By default, this=
 will
>>> + * result in the use of function pointers.
>>> + *
>>> + * Some architectures may have mechanisms for dynamically modifying .t=
ext.
>>> + * Using this mechnaism, function pointers can be converted to direct =
calls
>>> + * which are typically more efficient at runtime.
>>> + *
>>> + * For architectures to support:
>>> + *
>>> + * - Implement alternative_{,v}call() in asm/alternative.h.  Code gene=
ration
>>> + *   requirements are to emit a function pointer call at build time, a=
nd stash
>>> + *   enough metadata to simplify the call at boot once the implementat=
ion has
>>> + *   been resolved.
>>> + * - Select ALTERNATIVE_CALL in Kconfig.
>>> + *
>>> + * To use:
>>> + *
>>> + * Consider the following simplified example.
>>> + *
>>> + *  1) struct foo_ops __alt_call_maybe_initdata ops;
>>> + *
>>> + *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops =3D { ... }=
;
>>> + *     struct foo_ops __alt_call_maybe_initconst foo_b_ops =3D { ... }=
;
>> It occurs to me after reviewing patch 2 that these want to be const
>> struct foo_ops __initconst ...,
> __initconstrel then, I suppose.
>
>> and there is no need for
>> __alt_call_maybe_initconst at all.
>>
>> The only thing wanting a conditional annotation like this is the single
>> ops object, and it needs to be initdata (or hopefully ro_after_init in
>> the future).
> ro_after_init and initdata can't be alternatives of one another; ops
> (until be gain ro_after_init) need to remain in .bss (or .data).

Once alternatives have run, the ops structure is no longer referenced by
anything at runtime, and can be reclaimed.

All the x86 examples are weird because we've either got extra data
fields which are referenced at runtime, or we've not accelerated all
function pointers.

In neither case does modifying an accelerated function pointer after the
fact do what the programmer expected, and conditionally initdata makes
this far more obvious.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 08:52:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 08:52:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155167.286522 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3E8x-0005Ka-0b; Tue, 13 Jul 2021 08:51:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155167.286522; Tue, 13 Jul 2021 08:51:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3E8w-0005KT-Tj; Tue, 13 Jul 2021 08:51:54 +0000
Received: by outflank-mailman (input) for mailman id 155167;
 Tue, 13 Jul 2021 08:51:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3E8u-0005KJ-VQ; Tue, 13 Jul 2021 08:51:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3E8u-0001D3-OW; Tue, 13 Jul 2021 08:51:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3E8u-0006lU-Ge; Tue, 13 Jul 2021 08:51:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3E8u-0008Te-G7; Tue, 13 Jul 2021 08:51:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=aJg0euaTGZHTU0LfnhpPXYKhd9z4JuBCxwNKSALOoTQ=; b=tEGzVKzL41MW6Ks+sxXiGE3qLu
	jbyOo18ckN7RahDOmfPWgvkxNcqFbR/ey90OVK9OzQkD6NvlawaEwi4xHOwTKwEkNFeLEfodSUO/R
	vg/bCmxUl6I1wNf3nmjmPkC6U8vDGlZLh2zvnyTk6emoKz7PqE90zrLfKxcMuN4C0qWg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163630-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163630: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=0d1ccad240eb43d9a1a6927400f58caa280fd1be
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 08:51:52 +0000

flight 163630 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163630/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              0d1ccad240eb43d9a1a6927400f58caa280fd1be
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  368 days
Failing since        151818  2020-07-11 04:18:52 Z  367 days  359 attempts
Testing same since   163630  2021-07-13 04:18:46 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64429 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 08:53:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 08:53:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155176.286541 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EAY-000657-La; Tue, 13 Jul 2021 08:53:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155176.286541; Tue, 13 Jul 2021 08:53:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EAY-000650-Hp; Tue, 13 Jul 2021 08:53:34 +0000
Received: by outflank-mailman (input) for mailman id 155176;
 Tue, 13 Jul 2021 08:53:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3EAX-00064e-73
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 08:53:33 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id eb31bd58-da21-4765-9c3f-449cff17f262;
 Tue, 13 Jul 2021 08:53:32 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2057.outbound.protection.outlook.com [104.47.8.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-28-GdrGRXzoMRyPKi0cwt5v7w-1; Tue, 13 Jul 2021 10:53:30 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4349.eurprd04.prod.outlook.com (2603:10a6:803:40::27)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Tue, 13 Jul
 2021 08:53:28 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 08:53:27 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0158.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1b::26) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 08:53:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: eb31bd58-da21-4765-9c3f-449cff17f262
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626166411;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=OgMfnghc11eKjaG5/zPcZfPSSKlkqnJnpmhblcTbWZ8=;
	b=PUbiRjf6cMPOb0Bl8p6amHu5d/YvfCtrdrNygA0N/a1oBdG/dV7tlL2HXJL4cBXSrCdYmt
	z/XvukP4KmTZBNFMWrLdO+niPjjQVavIe1flpvtDWNKxNtQuGMy/ZK8Foaiy/mWCitNxZT
	9EyyszShh6TZmiWQp4wsEeafiZwdjEo=
X-MC-Unique: GdrGRXzoMRyPKi0cwt5v7w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NK8/eoQ3cXS4BTSJLP15MxtmC8yV8h/CgA232e0s/Nb240pj9CnW5M42UewHsGqehzbCuGJjQ1OmhdI0q4Rld5tzqlLbqUr8XBQ96AnOF56yoWb9nMWygb9SOcH8PGpG7tOIu70/n/bSwFmdZqlBSZ+xesp4SXUS9eNKGL5e5AK+59RlIcR06SwKwMbpXSkrCE6aiZfnqovhSQpH/BtCWJQWUVMbNperGXg4nuw8L25JB394jQCo5SZIVhAMlvgL6Ljejc5U6pXF0wLhecZsIek5b7iLK8c1bK251Vo/SXb2L+r8Ju0rHhz5ukInxt+P1FuARThYLiMz4oEIs8xAvQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OgMfnghc11eKjaG5/zPcZfPSSKlkqnJnpmhblcTbWZ8=;
 b=Dbq+R8ZeKeZ382RABuWEgFvcKCzyWlPpVqpxYpK8SBc2A5smLRW3rzB7sFvm3om9ALkKeuM42EXvPhLyYD39WpeqTJvEKgbUtQVJg2necvhEtmzA1j87K5jJcAaFpT0MnYfPMHwisAQ99xrsUAbOUM4n5kfwuUoLZYs1R6QqBd3QXEBKKuUMNPnGlFmV4bK/+rtN7cDtz/kDsaP75keIW9RSH9uWk01QfXfqWtOdMca7t1HR17kfjXiEQCDq+cgv7kDH6xIS7U4S1BmhkPmARLGlUwaSeO0LpoY0z0joZArNSRufp1SDNECl4sQ4QJUjKFdMVOPUCD7JxDqaslyAZw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: apertussolutions.com; dkim=none (message not signed)
 header.d=none;apertussolutions.com; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 01/10] xen: Implement xen/alternative-call.h for use in
 common code
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org, Wei Liu <wl@xen.org>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-2-dpsmith@apertussolutions.com>
 <2a794038-f4f5-1525-5af8-d89b687a8043@citrix.com>
 <4a55dc14-5d02-2594-38e8-f732ead164a6@suse.com>
 <a95650ec-1bd0-d36d-8a76-43c315fb620e@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <278c7192-d3d2-c0aa-bac2-49e62d76db81@suse.com>
Date: Tue, 13 Jul 2021 10:53:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <a95650ec-1bd0-d36d-8a76-43c315fb620e@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0158.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1b::26) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6f77eb52-115b-4adf-9141-08d945dbae7e
X-MS-TrafficTypeDiagnostic: VI1PR04MB4349:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB434996B800E08E15E866ABB2B3149@VI1PR04MB4349.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Kwnc1ga6ra+6evsJFz5MswlVWuAdGlCvdNBSMOwI0a2XV4AwYLgwQex/DDiFX3TCwiFKbp4QtNA/S3ltL9AxBvscs23AfMcIOZ04L9Zz2c44H+j9yNz+CamwIjdB+O+TCpGiGVwCY6GTzMmZbAK69X+H3waEQkNDZmEY3oGgqXfL/Rsym0dq3vy3NebVs2RNZeQoVq73aqm/yC3j9uARohXFVtZ+FoV5OvUmfCMpGvVWvpRknPIQeAoFYsZdHBZ7EtKzECoeH5gXAkqM7ZeIdfLjec6eZhDfcUbo1nqUUNrmAP7qgMAsV2ZGbJONXzCV2S0/PvfsoJGWZWZ600u8kugxPYwmtvqI483btkXH0zHsUZ7u9TrYQoXOEhbgUVSA8B964/gqa+ZyIsEU44Exsft3cD+GuIsW7tGxe1/i8tCYEeH38pD99x0LaCGdx/8iR0BHxdEoIbK0o+8wtmqmsXS6KOGMvvr/5g0181lb/CZHSbp8h6GHMhKQCxv0A67KyK0wuxY353Vs5KSZiqSnm1266CBfn3TFw+1XMdetfspT+GmPkCrKqi2YE7XDFzffUs1mrpY/dQiY1wXASZvavtBwWNe156vC302nTTLuOE+V70Yo6HtvJZDdIn+XWfU1M9LDlV3zOCZVeYW7tFwBg97HGTRhGLkfw7jwMfLIQuBjV1LiTf/6kWWE1RO0EpBgR1cNOXu0fUZcaFLLLk52uVwCU3JtFW0UNdbVO7YhJ34=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39850400004)(136003)(366004)(376002)(346002)(6916009)(478600001)(31686004)(66946007)(53546011)(6486002)(38100700002)(54906003)(16576012)(36756003)(31696002)(4326008)(86362001)(5660300002)(8676002)(66556008)(956004)(316002)(66476007)(2616005)(8936002)(26005)(186003)(2906002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?aEYvOGF1elgycnhLMk1ZWmh2S2R3Zm1CdE5TcmRIbWlyTWFuWFVsbElpbXJ0?=
 =?utf-8?B?VTJlNTNIZ1h2RU01K1YySlorVXQ2NnZGbU10MlVwUkZLQ0pkT2EzTjlhcmRH?=
 =?utf-8?B?SXlTbXlDY0VlTHpYVHB5b1Mva2ZFRnNiTTE4d0Q4dGlDaXl1WWJqejNVTGxT?=
 =?utf-8?B?dUdCaVkvL2t2TWc3Ym1FMXJlNkN6bU9ENGg0TWhMR2ZoMzVmN0hPMGc0U0Rv?=
 =?utf-8?B?WW1aSm1CSFN5MDZvditObE5KbEZNY0tKNmhsTTd6dGlaWXpJMk9xQ1YvKzhi?=
 =?utf-8?B?RCs5VHNRbmdRNDBmazNnQUNraHNWb0JyTksxZmVub3JzTG1iSXg2a1BteGNK?=
 =?utf-8?B?eTlza0l0NFdKbVlNQ2lJUW1ZTUpad0EzVFZHY1lNc2RPd0phZUtoeDlDcXRN?=
 =?utf-8?B?cGtIdDB5YmF0YkFWcDIwbkd6VS83bDg3UXJHeFF5enYyRXFqK3JvaXpBS1Nm?=
 =?utf-8?B?c2hERWE1ZWhKc3FMMXJabU5yaFVTNDJIVG1IWHNaYWYzUXhORE1iVjFteE1k?=
 =?utf-8?B?TGpsQzFwYy9kRU13a01OR2FjYXhUYnA3V2NIUlEwN092Z1Z4QmFCY3ZKL1Uv?=
 =?utf-8?B?V00yM2tsVWdLU000eUhGSzhZZjc4MGIzQ0dqclphd1RHSXJaeHE2S214bDhB?=
 =?utf-8?B?WEJxUzdxOEF0c1BWeS9EaUw3OTFDaTlaN05laDk2dTQ5cS9mQytjQjZ6aFg0?=
 =?utf-8?B?RUQyMW5WcXYwWG1wWWlUSVpwVzFKYWUxTnUzNmVwbEx0VlRsWlJQM0FQT20v?=
 =?utf-8?B?R09waCtzbDE4TDM3NmcyQTVIWGZFTTFLTEp0VTNUdm5KVXpRVzQ3WDdQRCty?=
 =?utf-8?B?YzdVZWZoUnN3Q2l0Ylg0N1JkRnBzTkpkZENXSDFHU2VScSt5OWxweU9TNngr?=
 =?utf-8?B?bHhhME9ZSDc0UEVQSWZzNEtGaGsweThtN0ZoMlpRaUNobm1iMXNMWkgwbjY0?=
 =?utf-8?B?S3l5TTFkV29ZQnc3czg3cE1tbWdUbDU0Q3VYVzcyZkRGcUtiWEp1MXRSTCtM?=
 =?utf-8?B?dXZPUEdnZ2xBeERxOVR6NEpYdlR4d2IvZTdUTWhkc1RYczd3SDFsK3hpRk9K?=
 =?utf-8?B?MWJJRFJTMVp6aVgrMVNEUHgwS21XYUp1cU00RnZMSUk0aGNsUDVoWTNTUkcr?=
 =?utf-8?B?Z3dKYlJYcU9pK29hSFpuTXc1K0FJY01NUHUxeFNPajlveWc4b09oZkxHbWpE?=
 =?utf-8?B?Qm9WTVA1Qi96S25uTGhBVVlPOGxBN3c5WWFOZy95M29GRk9pazJMOUN2SFc4?=
 =?utf-8?B?Qk10SnlQLzNEZGVvSjY5a2VPTUZVUlNGeitvOUVoL2VMR1Z1b1gxOWJjYXVP?=
 =?utf-8?B?WnZ0THQxdWdPMWY1K2ZDT3VuWmg1QmFiWE1STjlhcUsvRU96VGc4NGU2SWt2?=
 =?utf-8?B?eEd4SkhEWHJ4a3VLTDBKUmd1ZnQ5TWxBWnlSWW16VmFjajFEWDdPemNvTlhJ?=
 =?utf-8?B?cTltWCtOMXE3b2JYUUlVNUI0VUVQZFlEd1lubk1kY0gzRjFlTFRCZ3RnZTF6?=
 =?utf-8?B?TVN1TEd1Q01Zd3VrdThodHNqemZIdGdFcFlJdEI3R0FPUmFBR2FjSHpGbXVo?=
 =?utf-8?B?Nzdta0hpVi9YTEZuRTFEMEVPVnQ0emc1RnlQNEQ3ZlhwalBWbVFwWFBYbjVm?=
 =?utf-8?B?eTAvcHYrOEdkMWJzT2lIZ3hlQUJFTHhOdjA5YUFFbjFoOEJOOUdYSk4wNGx3?=
 =?utf-8?B?MWNxOUNhOE5NVW4wRU9MaCt3VUFwQ2FTcFpRVHZzcmZWVXA0STZVczhvUnBj?=
 =?utf-8?Q?LxEWlRyHs7Ki9L93Sf7io4nRrmmSyb8qztkoB2C?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6f77eb52-115b-4adf-9141-08d945dbae7e
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 08:53:27.8469
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: wQ1Kv7ZBX4dtFIpi7TKTsYSGvf8DvULDeMKuF9wq3X/mnvjE+ClRntyoYerruKPm1+t+iLIdQ6+EmTrisQ3PqA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4349

On 13.07.2021 10:36, Andrew Cooper wrote:
> On 13/07/2021 07:28, Jan Beulich wrote:
>> On 13.07.2021 01:48, Andrew Cooper wrote:
>>> On 12/07/2021 21:32, Daniel P. Smith wrote:
>>>> diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alternative-call.h
>>>> new file mode 100644
>>>> index 0000000000..11d1c26068
>>>> --- /dev/null
>>>> +++ b/xen/include/xen/alternative-call.h
>>>> @@ -0,0 +1,65 @@
>>>> +/* SPDX-License-Identifier: GPL-2.0 */
>>>> +#ifndef XEN_ALTERNATIVE_CALL
>>>> +#define XEN_ALTERNATIVE_CALL
>>>> +
>>>> +/*
>>>> + * Some subsystems in Xen may have multiple implementions, which can be
>>>> + * resolved to a single implementation at boot time.  By default, this will
>>>> + * result in the use of function pointers.
>>>> + *
>>>> + * Some architectures may have mechanisms for dynamically modifying .text.
>>>> + * Using this mechnaism, function pointers can be converted to direct calls
>>>> + * which are typically more efficient at runtime.
>>>> + *
>>>> + * For architectures to support:
>>>> + *
>>>> + * - Implement alternative_{,v}call() in asm/alternative.h.  Code generation
>>>> + *   requirements are to emit a function pointer call at build time, and stash
>>>> + *   enough metadata to simplify the call at boot once the implementation has
>>>> + *   been resolved.
>>>> + * - Select ALTERNATIVE_CALL in Kconfig.
>>>> + *
>>>> + * To use:
>>>> + *
>>>> + * Consider the following simplified example.
>>>> + *
>>>> + *  1) struct foo_ops __alt_call_maybe_initdata ops;
>>>> + *
>>>> + *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops = { ... };
>>>> + *     struct foo_ops __alt_call_maybe_initconst foo_b_ops = { ... };
>>> It occurs to me after reviewing patch 2 that these want to be const
>>> struct foo_ops __initconst ...,
>> __initconstrel then, I suppose.
>>
>>> and there is no need for
>>> __alt_call_maybe_initconst at all.
>>>
>>> The only thing wanting a conditional annotation like this is the single
>>> ops object, and it needs to be initdata (or hopefully ro_after_init in
>>> the future).
>> ro_after_init and initdata can't be alternatives of one another; ops
>> (until be gain ro_after_init) need to remain in .bss (or .data).
> 
> Once alternatives have run, the ops structure is no longer referenced by
> anything at runtime, and can be reclaimed.

Oh, right - if all pointers have been consumed for patching, initdata
is of course fine.

Jan

> All the x86 examples are weird because we've either got extra data
> fields which are referenced at runtime, or we've not accelerated all
> function pointers.
> 
> In neither case does modifying an accelerated function pointer after the
> fact do what the programmer expected, and conditionally initdata makes
> this far more obvious.
> 
> ~Andrew
> 



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:20:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:20:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155219.286572 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EaX-0001Ny-3v; Tue, 13 Jul 2021 09:20:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155219.286572; Tue, 13 Jul 2021 09:20:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EaX-0001Nr-13; Tue, 13 Jul 2021 09:20:25 +0000
Received: by outflank-mailman (input) for mailman id 155219;
 Tue, 13 Jul 2021 09:20:23 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3EaV-0001Nl-Tn
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 09:20:23 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3EaU-0001ki-LP; Tue, 13 Jul 2021 09:20:22 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3EaU-00010t-CH; Tue, 13 Jul 2021 09:20:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:MIME-Version:
	Message-Id:Date:Subject:Cc:To:From;
	bh=4Od6Pp7OPQpJU9KVHYnFK3cfHd/Ra2FO/b82se4czDI=; b=UJuCeKN/zRu+A1Lh51BJkR0udY
	6W7AtHxa66Iso05z7vd4S0bR4oZnrU18bciqNQAcx+LXxZPUf9OuefPMbofyHZS2LP+HfXbEGpbax
	60/YZ7Yscos6S5rok7RDJlhfPekx5grab3EnYnySCXtVaSj1ODsSUwItNeCJS8ACNxUM=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
Date: Tue, 13 Jul 2021 10:20:19 +0100
Message-Id: <20210713092019.7379-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

From: Julien Grall <jgrall@amazon.com>

Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
wreck the build in an interesting way:

In file included from xen/stubdom/include/xen/domctl.h:39:0,
                 from xen/tools/include/xenctrl.h:36,
                 from private.h:4,
                 from minios.c:29:
xen/include/public/memory.h:407:5: error: expected specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
     XEN_GUEST_HANDLE_64(const_uint8) buffer;
     ^~~~~~~~~~~~~~~~~~~

This is happening because xenctrl.h defines __XEN_TOOLS__ and therefore
the public headers will start to expose the non-stable ABI. However,
xen.h has already been included by a mini-OS header before hand. So
there is a mismatch in the way the headers are included.

For now solve it in a very simple (and gross) way by including
xenctrl.h before the mini-os headers.

Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error")
Signed-off-by: Julien Grall <jgrall@amazon.com>

---

Cc: Andrew Cooper <andrew.cooper3@citrix.com>

I couldn't find a better way with would not result to revert the patch
(and break build on some system) or involve a longer rework of the
headers.
---
 tools/libs/foreignmemory/minios.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tools/libs/foreignmemory/minios.c b/tools/libs/foreignmemory/minios.c
index c5453736d598..d7b3f0e1c823 100644
--- a/tools/libs/foreignmemory/minios.c
+++ b/tools/libs/foreignmemory/minios.c
@@ -17,6 +17,14 @@
  * Copyright 2007-2008 Samuel Thibault <samuel.thibault@eu.citrix.com>.
  */
 
+/*
+ * xenctlr.h currently defines __XEN_TOOLS__ which affects what is
+ * exposed by Xen headers. As the define needs to be set consistently,
+ * we want to include xenctrl.h before the mini-os headers (they include
+ * public headers).
+ */
+#include <xenctrl.h>
+
 #include <mini-os/types.h>
 #include <mini-os/os.h>
 #include <mini-os/mm.h>
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:25:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:25:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155225.286583 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EfX-00023D-Nz; Tue, 13 Jul 2021 09:25:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155225.286583; Tue, 13 Jul 2021 09:25:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EfX-000236-KW; Tue, 13 Jul 2021 09:25:35 +0000
Received: by outflank-mailman (input) for mailman id 155225;
 Tue, 13 Jul 2021 09:25:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZRbA=MF=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3EfW-000230-3K
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 09:25:34 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 456cde8d-e3bc-11eb-8732-12813bfff9fa;
 Tue, 13 Jul 2021 09:25:32 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 456cde8d-e3bc-11eb-8732-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626168332;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=09DN/OrsM8w5wnQf7uW0cDZONrjLuBbqw+jWFouPET8=;
  b=GFk7W+038hlfKJah6FGqaFp1eYm/rmdYRzHlUsvcwVBvRt4WXMXPRy3k
   nQoTEC1if8h0N5AJ4bPckzbIeayv/AsnKDTPqLGzzx39r3mg3qQdDunBe
   WSPkub4ANJ+ifiv2yi4GDJ3u7tgLLIy69L6bDFTFcJuwEsuf9B7pg1eUu
   4=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: HjiPkdvLwgT4D/3EbPRSu884Ndbq8I4lKdjz9FGA6SaVY1xcbT21iVZs+iYhTel4Wmq7IppyJA
 w322owHZ0jKP6fKPT5OKgOYvSQ0UgKHofckiRmPTEv5M0v759GcFlUx63I0La+I+6mgFvdLojr
 GTRBCm5O5gp9NaiYCnj0P49QLLaLrasCfKz4fxX4ZC74bBnlSNwdoc6Bax+YM2AHivY6i7/IAe
 Ck/6Lu5EAE7vr7+sdJ9NasLr+NlDToGSbYbiqVViR9plxavzpH9PqlsU7eicpXj5bUxOT/xRpY
 qdc=
X-SBRS: 5.1
X-MesageID: 48518959
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:75tH6KhdOY3GFXYJygvSyBsQjHBQXiAji2hC6mlwRA09TyX5ra
 2TdTogtSMc6QxhPE3I/OrrBEDuexzhHPJOj7X5Xo3SOTUO2lHYT72KhLGKq1Hd8kXFndK1vp
 0QEZSWZueQMbB75/yKnTVREbwbsaW6GHbDv5ag859vJzsaFZ2J921Ce2Gm+tUdfng8OXI+fq
 DsgPZvln6bVlk8SN+0PXUBV/irnaywqHq3CSR2fiLO8WO1/EuV1II=
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="48518959"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YqQdmYMVefp7j/yxfKZMf7odEoHdix00krQpaElc20PyZJL/q1UXMspKh2BqeWbj0vium4aNqALkjmIrD1qjD3Ars+Bnt3sRsj7ZZq9eSgWhqa501SjQiiO4IsTQaqzkWpV+i5gh3DpK4HSjAtvFd9x334HyLH44A56TcRILfLd+IHTQgh6HwGrLuS1Uj7MKZfMU36jNYDLjG9O3mDczkh+cZkNDy7J4n7l4q906uUp4SahPVS1nv81QkrSTcE3Liy351+JDviaFSHZIA/omZxZHIcTxKFAGt7UwKetmIkF1pd+cAnuEN6k0DId57U21bJ/Dzh9q+yMrWKIU1mknUg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=e3aLAE0wN+Xi8yK1UzQV53NnMyHm/VmnS2oCnmkikec=;
 b=NaOWN+htbq1zitfkcHbElyUw6hAJ6lzSGcimBCECPi36KU4pDBIpDeE7SDY4mmOo99rOJhrl9jssejUcH58pmYXXturBpNf+SC1ixscePgrA3a2vpIqoq+UYhaS6oSKKdG9yJKDWJnTMVwiXp5wC871dQ20XRMuEKLwsgqSqM5w1E85fNrKrn4yP2gZ5af4JM+0+7spdve2CbUHjlA2cJK2afK4k6DiO9Og1FeYVC+w7uwZueXFjEqBkDGpxwiwQhN810BwF2uU+V1gxOjeVCSp4FYbutqwkvAqEF5yNu5KJMtoQ7SSEPa0aIbL/Ukf8rLPnNF0wv3BSP1IFV6smAg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=e3aLAE0wN+Xi8yK1UzQV53NnMyHm/VmnS2oCnmkikec=;
 b=mZJ+/J9CZuNIB89ufMFeifjRYShaW8LXMIZ9TOXC0XBUanttHV6JHtctvn+1ujHPei8afCuAIPBsnywFJRiHUYm2iXL4CDCW+kOk7QASYXetrEyun6ThAENOQ2N1FZZ0LDhmb2ssYuEoLMsT7VUK1H54q9K+2lIR3JwAj4cmzyA=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, <xen-devel@lists.xenproject.org>
CC: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <10b44ae3-b366-7f4f-ab7b-b75c6e43ffdd@citrix.com>
Date: Tue, 13 Jul 2021 10:25:20 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210713092019.7379-1-julien@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0446.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1a9::19) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bd49f801-a93d-4c1e-f025-08d945e0268c
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5439:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5439B0A12ED02D27811BB091BA149@SJ0PR03MB5439.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: hE7xYMoXcZapHqIB7ScDhXeO5ryeaASDJ3c+83r8w9CuPuEI2DC/EgZISkFFivE6Hw6huLhmOkjEprPKR7TMpIwLlXe/RlSDAEBsAYo85m0A2GCVJUzT6AtlxLaQpiXb/GFUqWrLyGEubPKdd3bRxVURwpeCmR65tkB6ULc4L7Dxn/iNScX9vnmpYEwd5gttZeNglisyARSQ7msSB7WsroQSaYZ9Wcb7x5+8aDJpcMAc8Qu3AXPImEfHKA5dTKsO1UZ2T3YOu4oozWOxLHc81z4s+ZX/U4vkkCfsYtHqu+ZUiQjgmTTPD7/Vh5iRUc6CecewQYYYU924syuOD1sMonFBlwK3mD08bIBaVmFHS5brAKJbX0dxI1rW7XQ0yHkjZ1DVK+VAcVXjXHfhgGcf/CIqYBD65PF9Dh1Za6wiHiKJFJleE/0PC00PuysrPe+P2pzReEfE7Cv+bnOn48uLWrEDPHgSUrMEBiFbNtAoQo/S2Roj2HdXfu5EfXSI9TImE53QpcBJnq7kP+UGkuJjyohG2IkjdfKMvbCL+JemrzSvi5wg7s0QrISc7Z3fjd1XWQbKJB2P8gVvysR8BMEqr3ceIDTTiC0jFWphrMKjdfhbD1P4UxmneINd4tlhBJ5iuiI9qjRfU0+aawppjrYTWBMeKL/+of1BX9eXdJ0tilZ9Kwy53vaM43onqW9NbMkMn7KScOLwzJUWa9mCj5SS2DM40PrGGBIvHdNK9fTGQQSYHaww17LnFWUTOCFl8ZOp
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(136003)(376002)(366004)(39830400003)(53546011)(16576012)(8936002)(31686004)(38100700002)(186003)(26005)(31696002)(36756003)(2616005)(2906002)(956004)(54906003)(316002)(6666004)(6486002)(478600001)(66946007)(66556008)(5660300002)(8676002)(66476007)(4326008)(86362001)(98903001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V0UvVUVMdlpYNUVlYjVtSzdaUEFlM29LUEY0NXZHcDMvblVFRWprUkRSRUhE?=
 =?utf-8?B?MTNyZ01hc3JacWxwYXFJb0hITXE4bVpaellFT2tUakgwWFFja3Vpb2pOb1Za?=
 =?utf-8?B?Y0pUZHF1SjVuZTg1VzB2cXpZT0JlbnZRckxmUTI2NnNla242ZndyVnZETnhx?=
 =?utf-8?B?VFBzVkQwZW10dUhMY3pSa0YzemVVWmo5WTJlenVtM3VRTldKOTlQVjhWV3hP?=
 =?utf-8?B?LzJEdWtIbVp5bUVVNmg3NFlJOHlVdllZalRsbUR5Z1VaQ1hhQ1E0aHFpTndx?=
 =?utf-8?B?MmJPWWNFWEtZdHpPSURINnhRQVVqRjlDcEFKQ0NYY290alFKVXFCUnFPMk85?=
 =?utf-8?B?T3JVOTk4WnI0VE02ZFRmWHk0Znp0V2o2UG42RnNGRXN2aVl6dVJmTkxOV29r?=
 =?utf-8?B?OGY1ajh1N1BjelptMGNjYkU2QUlBckJPajVjNGlXbEVmbmJCV0JaNTVMdFFs?=
 =?utf-8?B?K2RFcE1Sd3BZRkYyTXMwZ1ZWNm9xa3hkUnVSWjRkS0oyWEgzRnBaWVZwQWRX?=
 =?utf-8?B?WUJQbGtjTExLeU5nUEs4enk3SGFUdGN4SmRMbFVxV0pnQXlLL1VwUGk0aWJv?=
 =?utf-8?B?Lzk5MkswNG42OWpSK0c1QVI3Z282VFlYUXp6Q2dvTHNZaXJkQ1hlUyt6Vk94?=
 =?utf-8?B?WGhmbVl4R3U5SEsxcWFxdkpWMnBHcUxaTWw5c2pJVFpSTFVZUGF1MThaeEdt?=
 =?utf-8?B?VkpOMXM4ZGJWdWtYbjJ3ckErZ3ZtekRFUE9tcWJaV3NiWmRPdUNuUlhESEhM?=
 =?utf-8?B?SGJNNVdaaCtRT0lLaEtYa2IrSHZhSDBmb2RDWEV3MnZ1SUlpRmxhMS9PZ1ND?=
 =?utf-8?B?Uk1SenFQd3hUWnY2YUZvcHc4QnN0Wi9jeDVxWS9TbXBEelI1UVFpOHltWmkx?=
 =?utf-8?B?bFhSNHk1MzhDM21hUCt5QlN5RjdURTY5ZlUzTHkzc1R0OVJGTk5vN0Ruc2NP?=
 =?utf-8?B?T3V4SWwxYis5Z1VrMkJQbEI3THJtRzJYL3kxczhDQm9PNy9pTExib3Jwd25v?=
 =?utf-8?B?b1NKU1JsOENhRGYxVzlnUHRQMzRkMStlVW1ib3FWcThvM2RMeWwwV1ZFTTRl?=
 =?utf-8?B?Q1lrYWt4ckFsQ09HNGtPck8xaE5lMk8xQzJEeHJCUUpza1ZGZkF4d2dVUnM2?=
 =?utf-8?B?S2hEVXRwamR4NWlDdllyV1poeGgxNWJmM3h1RUF5ay9xaTlkLy9GNjd1VE5V?=
 =?utf-8?B?TkR6eEpLL2VKU2FvbkdBRUI4WjR5TFQvdUwxZFVraGhWMUxydWVpV21KZU1W?=
 =?utf-8?B?ZnNmVFlXMnpBQkQvZGhDME5Xb2ZLbkRFWEs2ZTlsN0VBVDVjNlBxTGhGQ3ZQ?=
 =?utf-8?B?UkMzMWpoVTVNUVV5c21xSXVlWnJIekRpdDRCZHU3TDkydkxzRStXT0FoZjJ2?=
 =?utf-8?B?OTI5ZmQ2VjNnWk9FZ2laQWRMUW8zbExTMVc5dUtjTWYvMmpVYWlhYmNKMWhs?=
 =?utf-8?B?VEZCZnRRVXgwRkx6Rzczdmx2UFhDSzdyd3J3ZkxlVmVXN096c210OXZoeEJh?=
 =?utf-8?B?OWRMQmhtMENBbFJsanFUN3ozNWZBN3hwVUNXNjlocnZmdlVIUHJ2ekZtRjdt?=
 =?utf-8?B?UmdXWmxOTi9EVytTb3VoblhpV2JYMEpNWlRmRVdzVktVQWlGRHN1NFhBTlJm?=
 =?utf-8?B?dmpPZWZ2TlBocDhFWlovVm5nS0pnZjNsb2VDYXQrUU9rUDBDRzFXM2V2aVVB?=
 =?utf-8?B?bDlZcENRRUY5d0tYYzdYQUQ1amJzWjFOVXc3TUtlN2lCcXZZOWIrcUFxZDBK?=
 =?utf-8?Q?5L3rCzRoennwxFuws/BqNP28/1p89s+IFzlapc7?=
X-MS-Exchange-CrossTenant-Network-Message-Id: bd49f801-a93d-4c1e-f025-08d945e0268c
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 09:25:27.2806
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: mcHTZMTpoCU80dzaCuKhX90GWmek139q25mk+KmgM4G0EcRC49o28iATSED2J0yRhJqd301Lhhdpq883OGaUniF4lV7a0H8V1nXw8XX0IWg=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5439
X-OriginatorOrg: citrix.com

On 13/07/2021 10:20, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
>
> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
> wreck the build in an interesting way:
>
> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>                  from xen/tools/include/xenctrl.h:36,
>                  from private.h:4,
>                  from minios.c:29:
> xen/include/public/memory.h:407:5: error: expected specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
>      XEN_GUEST_HANDLE_64(const_uint8) buffer;
>      ^~~~~~~~~~~~~~~~~~~
>
> This is happening because xenctrl.h defines __XEN_TOOLS__ and therefore
> the public headers will start to expose the non-stable ABI. However,
> xen.h has already been included by a mini-OS header before hand. So
> there is a mismatch in the way the headers are included.
>
> For now solve it in a very simple (and gross) way by including
> xenctrl.h before the mini-os headers.
>
> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error")
> Signed-off-by: Julien Grall <jgrall@amazon.com>
>
> ---
>
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>
> I couldn't find a better way with would not result to revert the patch
> (and break build on some system) or involve a longer rework of the
> headers.
> ---
>  tools/libs/foreignmemory/minios.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/tools/libs/foreignmemory/minios.c b/tools/libs/foreignmemory/minios.c
> index c5453736d598..d7b3f0e1c823 100644
> --- a/tools/libs/foreignmemory/minios.c
> +++ b/tools/libs/foreignmemory/minios.c
> @@ -17,6 +17,14 @@
>   * Copyright 2007-2008 Samuel Thibault <samuel.thibault@eu.citrix.com>.
>   */
>  
> +/*
> + * xenctlr.h

xenctrl.h

Otherwise, Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

>  currently defines __XEN_TOOLS__ which affects what is
> + * exposed by Xen headers. As the define needs to be set consistently,
> + * we want to include xenctrl.h before the mini-os headers (they include
> + * public headers).
> + */
> +#include <xenctrl.h>
> +
>  #include <mini-os/types.h>
>  #include <mini-os/os.h>
>  #include <mini-os/mm.h>



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:25:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:25:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155226.286594 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EfZ-0002JZ-2N; Tue, 13 Jul 2021 09:25:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155226.286594; Tue, 13 Jul 2021 09:25:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EfY-0002JS-T2; Tue, 13 Jul 2021 09:25:36 +0000
Received: by outflank-mailman (input) for mailman id 155226;
 Tue, 13 Jul 2021 09:25:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3EfY-0002BW-5O; Tue, 13 Jul 2021 09:25:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3EfX-0001q1-TC; Tue, 13 Jul 2021 09:25:35 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3EfX-0008PJ-LU; Tue, 13 Jul 2021 09:25:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3EfX-0008CV-Kz; Tue, 13 Jul 2021 09:25:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=T6s+ILfBffsEy6BGL/zYMqIVYHnHNshqu/veL18tXeM=; b=pBdBDAmpSX9ktgtEv9H9Ac670u
	Wp8k8CUv5u1X7Ax5RAIzHg01FPtcuALuP6uvl9Wx+ex9BUPbpWZ6R1EbVbN6kN3jDW8eo7DihKujx
	ueY7KDDJsZKFtD3KgJmswWNyxRoeTXxqYLrC3g0UFeuuTLi3d/ieKoC5soaXpQcYtcOw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163634-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163634: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=93c9edbef51b31056f93a37a778326c90a83158c
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 09:25:35 +0000

flight 163634 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163634/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  93c9edbef51b31056f93a37a778326c90a83158c
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    3 days
Failing since        163480  2021-07-09 16:08:01 Z    3 days   22 attempts
Testing same since   163489  2021-07-09 21:00:27 Z    3 days   21 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:26:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:26:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155235.286607 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EgA-0003Jr-Fk; Tue, 13 Jul 2021 09:26:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155235.286607; Tue, 13 Jul 2021 09:26:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EgA-0003Jk-Cr; Tue, 13 Jul 2021 09:26:14 +0000
Received: by outflank-mailman (input) for mailman id 155235;
 Tue, 13 Jul 2021 09:26:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aFX4=MF=xen.org=julien@srs-us1.protection.inumbo.net>)
 id 1m3Eg8-0003JY-MA
 for xen-devel@lists.xen.org; Tue, 13 Jul 2021 09:26:12 +0000
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5caadb4e-e3bc-11eb-8732-12813bfff9fa;
 Tue, 13 Jul 2021 09:26:11 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3Eg5-0001qy-0U; Tue, 13 Jul 2021 09:26:09 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3Eg4-0001V2-Qv; Tue, 13 Jul 2021 09:26:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5caadb4e-e3bc-11eb-8732-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=3YQrEjXOnQWWIIrOWht7OZAhShEQAqUA1Tq0eteRHHg=; b=2aFvsSyxwNQ1DGx74zQwi3B6+q
	LHMncAcPkN8iSeUwznRHAmp/Fr1AVuQgZTZryl8wNccIBy8aHXFsru6Iz5mxB3rL5OclvBA1gPRN7
	uV+HCRLxuDTJ7+sewUXyRl1pMuYczEzRt8NNlBhD5j/L7bUuGF/LtGpTC7ZNHxuwTAJY=;
Subject: Re: DMA restriction and NUMA node number
To: Wei Chen <Wei.Chen@arm.com>,
 "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich <jbeulich@suse.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
Cc: Penny Zheng <Penny.Zheng@arm.com>,
 Bertrand Marquis <Bertrand.Marquis@arm.com>
References: <DB9PR08MB68573DE6333A36646EDC75409E149@DB9PR08MB6857.eurprd08.prod.outlook.com>
From: Julien Grall <julien@xen.org>
Message-ID: <89025168-bf55-5dff-db61-989b95934775@xen.org>
Date: Tue, 13 Jul 2021 10:26:06 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <DB9PR08MB68573DE6333A36646EDC75409E149@DB9PR08MB6857.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

(+Andrew, Jan, Roger)

On 13/07/2021 04:19, Wei Chen wrote:
> Hi,
> 
> I am doing some NUMA testing on Xen. And I find the DMA restriction is
> based on NUMA node number [1].
>      if ( !dma_bitsize && (num_online_nodes() > 1) )
>          dma_bitsize = arch_get_dma_bitsize();
> 
> On Arm64, we will set dma_bitsize [2] to 0, that means we don't need to
> reserve DMA memory. But when num_online_nodes > 1, the dma_bitsize
> will override to 32. This may be caused by the Arm64 version
> arch_get_dma_bitsize, it may be a simple implementation and not NUMA
> aware.
> 
> But I still quite curious about why DMA restriction depends on NUMA
> node number. In Arm64, dma_bitsize does not change when the NUMA node
> changes. So we didn't expect arch_get_dma_bitsize to be called here.
> 
> I copied Keir's commit message from 2008. It seems this code was considered
> only for x86, when he was working on it. But I'm not an x86 expert, so I
> hope Xen x86 folks can give some help. Understanding this will help us to

It is best to CCed the relevant person so they know you have requested 
there input. I have added the x86 maintainers in the thread.

> do some adaptations to Arm in subsequent modifications : )
> 
> commit accacb43cb7f16e9d1d8c0e58ea72c9d0c32cec2
> Author: Keir Fraser <keir.fraser@citrix.com>
> Date:   Mon Jul 28 16:40:30 2008 +0100
> 
>      Simplify 'dma heap' logic.
> 
>      1. Only useful for NUMA systems, so turn it off on non-NUMA systems by
>         default.
>      2. On NUMA systems, by default relate the DMA heap size to NUMA node 0
>         memory size (so that not all of node 0's memory ends up being 'DMA
>         heap').
>      3. Remove the 'dma emergency pool'. It's less useful now that running
>         out of low memory isn;t as fatal as it used to be (e.g., when we
>         needed to be able to allocate low-memory PAE page directories).
> 
> [1] https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/page_alloc.c;h=958ba0cd9256c8270e38585d272be2bf5cc0679e;hb=refs/heads/master#l1876
> [2] https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/common/page_alloc.c;h=958ba0cd9256c8270e38585d272be2bf5cc0679e;hb=refs/heads/master#l226

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:27:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:27:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155240.286618 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Eha-000401-R9; Tue, 13 Jul 2021 09:27:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155240.286618; Tue, 13 Jul 2021 09:27:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Eha-0003zu-OI; Tue, 13 Jul 2021 09:27:42 +0000
Received: by outflank-mailman (input) for mailman id 155240;
 Tue, 13 Jul 2021 09:27:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3EhY-0003zk-VZ
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 09:27:41 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c3a7d015-d64b-4754-810e-65d940125079;
 Tue, 13 Jul 2021 09:27:40 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 4FE482007D;
 Tue, 13 Jul 2021 09:27:39 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 1E74713A38;
 Tue, 13 Jul 2021 09:27:39 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id RYjUBYtc7WBjHQAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 09:27:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c3a7d015-d64b-4754-810e-65d940125079
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626168459; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=zEZvwH5BHaU8+osZSVxk8G65+sIKidC1FiCCPwwdqM4=;
	b=DYUTueddEb/uKnwzUwJbJ/H39rlhKwgC+Sq2gDbP19mbz2QqK+pKLfyAss036W/vcKxhaT
	YenbwRA5p9co5VEQCjsYB52CmhHUSe9GlWFspsmbVv+ZaMjLq0I8Gjr77y5i9JqzWgF46t
	sje+eN91pm4BHmDe85VEjUC1vXbwXo0=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210713092019.7379-1-julien@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
Date: Tue, 13 Jul 2021 11:27:38 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210713092019.7379-1-julien@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="12vu99ZCUy1ecLLjVsADAYzmdKeget9oC"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--12vu99ZCUy1ecLLjVsADAYzmdKeget9oC
Content-Type: multipart/mixed; boundary="odc1wvahjuxVhHWiQ7uXmGJMRIP1ZsTRu";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
In-Reply-To: <20210713092019.7379-1-julien@xen.org>

--odc1wvahjuxVhHWiQ7uXmGJMRIP1ZsTRu
Content-Type: multipart/mixed;
 boundary="------------3E5354AD8CD294AE4448FF90"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------3E5354AD8CD294AE4448FF90
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 11:20, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
>=20
> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
> wreck the build in an interesting way:
>=20
> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>                   from xen/tools/include/xenctrl.h:36,
>                   from private.h:4,
>                   from minios.c:29:
> xen/include/public/memory.h:407:5: error: expected specifier-qualifier-=
list before =E2=80=98XEN_GUEST_HANDLE_64=E2=80=99
>       XEN_GUEST_HANDLE_64(const_uint8) buffer;
>       ^~~~~~~~~~~~~~~~~~~
>=20
> This is happening because xenctrl.h defines __XEN_TOOLS__ and therefore=

> the public headers will start to expose the non-stable ABI. However,
> xen.h has already been included by a mini-OS header before hand. So
> there is a mismatch in the way the headers are included.
>=20
> For now solve it in a very simple (and gross) way by including
> xenctrl.h before the mini-os headers.
>=20
> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE redefinit=
ion error")
> Signed-off-by: Julien Grall <jgrall@amazon.com>
>=20
> ---
>=20
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>=20
> I couldn't find a better way with would not result to revert the patch
> (and break build on some system) or involve a longer rework of the
> headers.

Just adding a "#define __XEN_TOOLS__" before the #include statements
doesn't work?

> ---
>   tools/libs/foreignmemory/minios.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
>=20
> diff --git a/tools/libs/foreignmemory/minios.c b/tools/libs/foreignmemo=
ry/minios.c
> index c5453736d598..d7b3f0e1c823 100644
> --- a/tools/libs/foreignmemory/minios.c
> +++ b/tools/libs/foreignmemory/minios.c
> @@ -17,6 +17,14 @@
>    * Copyright 2007-2008 Samuel Thibault <samuel.thibault@eu.citrix.com=
>.
>    */
>  =20
> +/*
> + * xenctlr.h currently defines __XEN_TOOLS__ which affects what is

Typo, should be xenctrl.h

> + * exposed by Xen headers. As the define needs to be set consistently,=

> + * we want to include xenctrl.h before the mini-os headers (they inclu=
de
> + * public headers).
> + */
> +#include <xenctrl.h>
> +
>   #include <mini-os/types.h>
>   #include <mini-os/os.h>
>   #include <mini-os/mm.h>
>=20

Juergen

--------------3E5354AD8CD294AE4448FF90
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------3E5354AD8CD294AE4448FF90--

--odc1wvahjuxVhHWiQ7uXmGJMRIP1ZsTRu--

--12vu99ZCUy1ecLLjVsADAYzmdKeget9oC
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtXIoFAwAAAAAACgkQsN6d1ii/Ey8Q
FAf5AbINjPizQ+8+rQPvVzK7r8f7lU05QygNRTxGL6PSUqDwuuFexGzZJhaMglL3EIRz7l/AQLMc
dmN7F7ltSbEUNMZ4AvjQgeu2g9SU+WdeM5g+Qg4ChTXCJuFvSdvQ/NEWA+PFvzTW8oy6LD3JDAvM
wXqSs82Fv8M5HyOcL2UfUsnduUo/2A5vrFzV+cywlbaDDaqUnzl0D0xspTZ5GZsBkmbrcGUd6aSj
7v7gJKeN6PjEIFKnPBbF17a6ZYFa/3C+7x2TwrTRbIjmPYzbOIUbcTFJfrKTkxl+YvXPXj8DzVUc
dXvtYb7W9FGdhgTZ3t6lTLLTvBkDzPtJYK7FK9ZuYw==
=taUR
-----END PGP SIGNATURE-----

--12vu99ZCUy1ecLLjVsADAYzmdKeget9oC--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:31:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:31:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155247.286630 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Elc-0005PI-Cz; Tue, 13 Jul 2021 09:31:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155247.286630; Tue, 13 Jul 2021 09:31:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Elc-0005PB-9V; Tue, 13 Jul 2021 09:31:52 +0000
Received: by outflank-mailman (input) for mailman id 155247;
 Tue, 13 Jul 2021 09:31:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3Elb-0005P4-Ax
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 09:31:51 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3ElZ-0001xH-9u; Tue, 13 Jul 2021 09:31:49 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3ElZ-0001t4-3i; Tue, 13 Jul 2021 09:31:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Z1+YjkNeRwD6c90OG38e0Q4IIhzBXvlJ9JskkUS3Djo=; b=t3xDfYRvkhCQZd8tf+QjKAON/d
	A0dSwSsmbLxakkq0RsSsCjEVsmfxdiAvKm3lyqnOEWPjbHfH6iMzWNwXT69m2ui7yedLYrUR/gBBS
	C6ybYwQWpobCGTu+f+EbRzgCXhW0uzQcgDwN0anBqTpgWAtmJclW53yJoIpL+pqSqndg=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <3ba3b128-027b-f95a-6021-5e34da56d260@xen.org>
Date: Tue, 13 Jul 2021 10:31:47 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 13/07/2021 10:27, Juergen Gross wrote:
> On 13.07.21 11:20, Julien Grall wrote:
>> From: Julien Grall <jgrall@amazon.com>
>>
>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
>> wreck the build in an interesting way:
>>
>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>                   from xen/tools/include/xenctrl.h:36,
>>                   from private.h:4,
>>                   from minios.c:29:
>> xen/include/public/memory.h:407:5: error: expected 
>> specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
>>       XEN_GUEST_HANDLE_64(const_uint8) buffer;
>>       ^~~~~~~~~~~~~~~~~~~
>>
>> This is happening because xenctrl.h defines __XEN_TOOLS__ and therefore
>> the public headers will start to expose the non-stable ABI. However,
>> xen.h has already been included by a mini-OS header before hand. So
>> there is a mismatch in the way the headers are included.
>>
>> For now solve it in a very simple (and gross) way by including
>> xenctrl.h before the mini-os headers.
>>
>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE 
>> redefinition error")
>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>
>> ---
>>
>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>
>> I couldn't find a better way with would not result to revert the patch
>> (and break build on some system) or involve a longer rework of the
>> headers.
> 
> Just adding a "#define __XEN_TOOLS__" before the #include statements
> doesn't work?
It works but if someone decides to the rework the header and drop 
__XEN_TOOLS__ we would still define in minios.c (we technically don't 
need it). So I find the solution a lot worse than what I wrote.

> 
>> ---
>>   tools/libs/foreignmemory/minios.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/tools/libs/foreignmemory/minios.c 
>> b/tools/libs/foreignmemory/minios.c
>> index c5453736d598..d7b3f0e1c823 100644
>> --- a/tools/libs/foreignmemory/minios.c
>> +++ b/tools/libs/foreignmemory/minios.c
>> @@ -17,6 +17,14 @@
>>    * Copyright 2007-2008 Samuel Thibault <samuel.thibault@eu.citrix.com>.
>>    */
>> +/*
>> + * xenctlr.h currently defines __XEN_TOOLS__ which affects what is
> 
> Typo, should be xenctrl.h

I will fix it.

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:35:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:35:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155253.286641 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EpY-00066I-VQ; Tue, 13 Jul 2021 09:35:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155253.286641; Tue, 13 Jul 2021 09:35:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3EpY-00066B-S1; Tue, 13 Jul 2021 09:35:56 +0000
Received: by outflank-mailman (input) for mailman id 155253;
 Tue, 13 Jul 2021 09:35:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZRbA=MF=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3EpX-000665-8n
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 09:35:55 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b7c757ae-e3bd-11eb-8735-12813bfff9fa;
 Tue, 13 Jul 2021 09:35:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b7c757ae-e3bd-11eb-8735-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626168954;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=vxT5CkU7iAcdzNi84SrgQZamLR7X08gqED74PP0+ZAI=;
  b=B5pz8/tWdStW5vOLaMcujPov1GfvnjTOdY87qBqFEo5pKrQuIePAItzp
   r2XSl+YJuV0AYuLDI3avZZAQs1rTuw0AfFev/lTYUkDdaQgURv2FyvC5w
   Uw/fvJ7IEnogoLCVSQl60NPYW1DJNfpkhqEKlzOHIVGURj5XT/5tnXHls
   A=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 7te/4Q1QP8lyw9wzH1vl0HTyahtxdjkT107rxeb05OLAbMJuGGgYuUG5NwpO7/kMPGUwtJIDta
 6EHMQA6NRfbN5myc1r0igayK6pl28vsm15KWM5ThQVzrBt1hK2sorR7sVRDCYCC/RuLicNqro2
 CrAyWDUgs2PIUN/sBu+Zkv9mDlKhqiNTKNIzr/ZJqi6jrdcbVxrnoSXxEahQ9ng5ITAthOEhHA
 x2T8cwUXKBme8afoXcnsy2yIfkoxfq5pM/n9w2q1ABHeeYa3GqwxgG34hxDwP9L2/rcYDCmu43
 rBw=
X-SBRS: 5.1
X-MesageID: 48137066
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:JnpiRa++mY2wrK7kp0Zuk+Etdb1zdoMgy1knxilNoENuHfBwxv
 rDoB1E73LJYVYqOU3Jmbi7Scy9qADnhOFICO4qTMuftWjdyRaVxeRZg7cKrAeQYxEWmtQtsp
 uINpIOcuEYbmIK/foSgjPIaurIqePvmMvD5Za8vgVQpENRGsVdBm9Ce3em+yZNNW977PQCZf
 ihD4Z81kGdkSN9VLXEOpBJZZmPm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjMTSSlGz7sO+X
 XM11WR3NTtj9iLjjvnk0PD5ZVfn9XsjvNFGcy3k8AQbhHhkByhaohNU6CL+Bo1vOaswlA3l8
 SkmWZtA+1Dr1fqOk2lqxrk3AftlBw07WX59FOeiXz/5eTkWTMTEaN69MJkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l3CzvWEpnYco/j1iuLMlGf1sRLEkjQZo+M9qJlO/1GlnKp
 ghMCjk3ocUTbvABEqp+VWGqbeXLwcO9hTveDlLhiXa6UkRoJlD9Tpt+CUopAZIyHsMcegw2w
 36CNUeqFhvdL5cUUsvPpZKfSOIYla9Ny4kdljieGjaKA==
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="48137066"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KVn/U5/k53a2+UykKWuYd5PoLH0rBTynUA0vnD6ueF8oyJ6T5PueOqHsk0+z327hqi4zPYTK6JU1kXkjPJDYXlCfWO4GAZEITryCKT1GgnRolEMzXzlOgk3Ipy3iRlieCKKWpP6neCUqXUSWoCOP7pDhFFepNUI+8r0S8BQjqQfwjMVoP8Y3Q2IjMiRToa1JMtx6g/6sR4PKSqzaYbWSGasLJ7G5Uiu5k/n/q07jCAStDgQ86P97nFQCa/RGYmo1InsJeOb83C4twj8UBPyrHMw4r06HMIAb2v+RsVnHsjUbAC5EhCbQTZ3LdX11rD/svMY5+809tro6IHnJxJYx2Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vxT5CkU7iAcdzNi84SrgQZamLR7X08gqED74PP0+ZAI=;
 b=KneSavR30sTmHtpRdpgv0LwXtDcYklYoxpWCdo7nWkE6VEc7NU/u/NeNN9kNxO1odSqZDRT0g7Pkkx45IkoZkz/ZiaanZSol44MOWmLVGYWt+SHFQtK79i+7WgKdpGQdpHXcUquAgfYlwslgAwxHF1/phNGYkxL8YYMWlIR0DUCXtZoYg71QXONkMTmkxrHxZdtlZhxx83Ppl0NHNFe+zR8hcSFE2QasyaXCemu4wzzeZdKsdxD3LJAEcENQwnE9HKwSZliLD01YRaHPnywTxqG69/s0fMux1OsCCwzd4F7zy50ct0kU8gE2wdAdyaKhcnharSLeQs8GySOpewaEvA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vxT5CkU7iAcdzNi84SrgQZamLR7X08gqED74PP0+ZAI=;
 b=TkzH7GxAAdEt8/nZWD/+uXLavHWgRk0+HxeiHK/oucNlmHf1F/uVsjMaXbKvNuGSlHmrGQi076zPFByQpdeQlgp5yMzD0NopPfsVtLKwxSLQVNwB0qb1SSt/jcv/p2pHONjFoKxp2R1XhMjkHo5/50fHVg+lHVtzjq3DyINSSVs=
To: Juergen Gross <jgross@suse.com>, Julien Grall <julien@xen.org>,
	<xen-devel@lists.xenproject.org>
CC: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
Message-ID: <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
Date: Tue, 13 Jul 2021 10:35:43 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0255.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:194::8) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a77d2dd6-a0d4-4ad6-88d1-08d945e19a03
X-MS-TrafficTypeDiagnostic: BY5PR03MB5077:
X-Microsoft-Antispam-PRVS: <BY5PR03MB50776CD25D9E49238DE586A3BA149@BY5PR03MB5077.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 2VHLjsHqUe/wdXqBclDpbY6nVsGBn5qroj6xoOB6qrxv2pGXcMQCefBldHJGkZppJAWWgsvqtmFPvw8LkFIjYppUIPLN+tVfawAnTUR7xlbFdyPDN5bDCJVr3vV6+SnUAnSvfj5HtxPifdxgpyy+gmd3ABVTi/0tX1dHZ27eBAxf/pcpaD7OnClLqPf+33bhOh7dmaU2WS6X6Ev1y6OvoXnjLKi4t15zGxacAB7a0fdiXejwoLEvaJjdgUQhC5T1ttOFxbOUwp88KiKtEV3X+IeCpTAlWve++U5P5Vm4WWeBHFmKajwKQdRzspAe62acHKyGXdynd/NtHCzy3fhYjpjGeCIhsRv8rVB9lB3RN6Q4xhjOgVgYFd5dNEaaKZ1/uqUVa5YEsQk9WMQdJumfBXXgpa9kXB+bibrGbRKcqLC0/RTe7SspIe7PHOEIUAb4qPEToYy5aGJrnNiwa59yksHcHDX2KH52k29P3gaOeL0T8FaSY0rJLnjV4j7HBKbIO6Wah9kJEf2soIadCxg5O31AJ2xfMKMOxxutP2tDL0XcWooEqRSdpUcrzCd9g7yHWz4qYWk4KFHU6mI45BVsbKihbKRwwYs2bRWJEDeWime7zBubcaqU4WJTEb2QsXaUkS49dSCyHwm/tZh+hit3F3CgpKrFzQDdIuNnnhmOFvIa2G4HtbN5JIIw4R/zwxBW/P9gQjlpB5rVHODhuc1GsrPZHT4jzeIdNWjGA5zgd3oa8etTiwQQnbXNHfEshVYu8PT6pfoOnIehwkA5uqi3OQ==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(396003)(136003)(366004)(346002)(376002)(54906003)(31696002)(86362001)(66556008)(31686004)(478600001)(110136005)(2906002)(956004)(8936002)(6666004)(53546011)(66476007)(38100700002)(4326008)(26005)(6486002)(316002)(16576012)(66946007)(36756003)(186003)(2616005)(5660300002)(8676002)(98903001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: a77d2dd6-a0d4-4ad6-88d1-08d945e19a03
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 09:35:50.5095
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: c6UDtE/FJVrHFFejChY51Iv+sBsuYFo4g2Wzzc5Xj8aawz17vfE4rDH2eYAJAWHYGIkI2zD8GXnMN9gZK9Dj6XdUxPZKeQ8TcyGPiYYJmd4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5077
X-OriginatorOrg: citrix.com

On 13/07/2021 10:27, Juergen Gross wrote:
> On 13.07.21 11:20, Julien Grall wrote:
>> From: Julien Grall <jgrall@amazon.com>
>>
>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
>> wreck the build in an interesting way:
>>
>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from xen/tools/include/xenctrl.h:36,
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from private.h:4,
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from minios.c:29:
>> xen/include/public/memory.h:407:5: error: expected
>> specifier-qualifier-list before =E2=80=98XEN_GUEST_HANDLE_64=E2=80=99
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 XEN_GUEST_HANDLE_64(const_uint8) buffer;
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~~~~~~~
>>
>> This is happening because xenctrl.h defines __XEN_TOOLS__ and therefore
>> the public headers will start to expose the non-stable ABI. However,
>> xen.h has already been included by a mini-OS header before hand. So
>> there is a mismatch in the way the headers are included.
>>
>> For now solve it in a very simple (and gross) way by including
>> xenctrl.h before the mini-os headers.
>>
>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>> redefinition error")
>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>
>> ---
>>
>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>
>> I couldn't find a better way with would not result to revert the patch
>> (and break build on some system) or involve a longer rework of the
>> headers.
>
> Just adding a "#define __XEN_TOOLS__" before the #include statements
> doesn't work?

Not really, no.

libxenforeignmem has nothing at all to do with any Xen unstable
interfaces.=C2=A0 Including xenctrl.h in the first place was wrong, because
it is an unstable library.=C2=A0 By extension, the use of XC_PAGE_SIZE is
also wrong.

This all needs reverting/reworking to avoid making the stable libraries
depend on unstable ones, but in the short term we also need to unbreak
the CI.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 09:54:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 09:54:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155260.286652 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3F7D-00009H-KN; Tue, 13 Jul 2021 09:54:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155260.286652; Tue, 13 Jul 2021 09:54:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3F7D-00009A-Gd; Tue, 13 Jul 2021 09:54:11 +0000
Received: by outflank-mailman (input) for mailman id 155260;
 Tue, 13 Jul 2021 09:54:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3F7B-000090-PP; Tue, 13 Jul 2021 09:54:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3F7B-0002LS-HY; Tue, 13 Jul 2021 09:54:09 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3F7B-0001Nt-7F; Tue, 13 Jul 2021 09:54:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3F7B-0001Nk-6o; Tue, 13 Jul 2021 09:54:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=60y1mfuCIfq2oaNmlmy2lO751W739uxb545X/BM69DA=; b=ffIFHiuiMbqBjUDK4nlEC+h0yQ
	dpOIgtCQS2Ij7vJQQJwb07Nfx5uX41FPtxdoHff/iq5PtE8odkyiUYHG+SYQ0c49hjVdgxbxk/ifv
	tEa0u/iJ5I8FWAbobFjG1jJN9dIZ2LYHFdahybCc7Y1ce15mvyQ0Ys9B5wpfM9floTyE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163620-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163620: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start.2:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7fef2edf7cc753b51f7ccc74993971b0a9c81eca
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 09:54:09 +0000

flight 163620 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163620/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-qemuu-freebsd11-amd64 22 guest-start.2  fail REGR. vs. 152332
 test-amd64-amd64-examine      4 memdisk-try-append       fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 152332
 test-armhf-armhf-xl-rtds      8 xen-boot                 fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                7fef2edf7cc753b51f7ccc74993971b0a9c81eca
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  346 days
Failing since        152366  2020-08-01 20:49:34 Z  345 days  590 attempts
Testing same since   163620  2021-07-12 23:09:54 Z    0 days    1 attempts

------------------------------------------------------------
6679 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1966348 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 10:21:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 10:21:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155274.286671 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3FXU-0003aj-Tm; Tue, 13 Jul 2021 10:21:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155274.286671; Tue, 13 Jul 2021 10:21:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3FXU-0003ac-Qn; Tue, 13 Jul 2021 10:21:20 +0000
Received: by outflank-mailman (input) for mailman id 155274;
 Tue, 13 Jul 2021 10:21:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3FXS-0003aW-S1
 for xen-devel@lists.xen.org; Tue, 13 Jul 2021 10:21:18 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b97abda5-57cf-4e77-a560-f79e43d45cb7;
 Tue, 13 Jul 2021 10:21:17 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2052.outbound.protection.outlook.com [104.47.4.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-8-O-m_LBK0OwS0UEUFC7sWAw-1;
 Tue, 13 Jul 2021 12:21:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2448.eurprd04.prod.outlook.com (2603:10a6:800:52::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Tue, 13 Jul
 2021 10:21:12 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 10:21:12 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR02CA0210.eurprd02.prod.outlook.com (2603:10a6:20b:28f::17) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22 via Frontend
 Transport; Tue, 13 Jul 2021 10:21:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b97abda5-57cf-4e77-a560-f79e43d45cb7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626171676;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=YPogjXGnneTfopHremv1nQK2ZA0ZEzkrqvTgoUvG+No=;
	b=ia9X4C7iIANT7Q56sDwsUGn2FtP4ZnVKViTCofiVfHLoaboTovKG3UowgwrcVv9Ng7zRhc
	/UlX0fEiK7JL2V/f2VrY4QomtNcudwGthFbuqqbH4FlfzJVj7BplO/9bssbLVfgwA5hjYX
	YAF4o+i5ihrEFZuGTbPi/mprobBOuPY=
X-MC-Unique: O-m_LBK0OwS0UEUFC7sWAw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Vuzqk5t5i55oceFN4lsD8S8OjcNHlBsMbJSm4xioe0CAqudPSg5w7RH5Oo9n3HENFqcYVLRc/Fv8Knw5qNiPSgfhcdsqdmV/In5oiX4YX3lZ4kJWYMRJPpoa3lYE+b2FmenCBapBls3mYJik0+uU5b/JeBEJGp+QTQSdBG/2iQXtmjjJosGijr2eeQBvrrgnUQSoSq2YmJDcvl+BQ9LCq8AsYsETsB2Wv6dtUP5Sqz3ZFwhymg4UPn6caYBnIdPEqh3f4ed43xMMA9NWA0DcAFvs7vSP+ujx01WziaiJoGkd4PnQKBHGIf3ZOPz1FLidoBhIEVBOZ3y1E2xXR1L2xQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YPogjXGnneTfopHremv1nQK2ZA0ZEzkrqvTgoUvG+No=;
 b=YmVOdv1G7dDWRN3lT7S3Xq1mxMuw8qa+ddgesEbxEIwIgbCTZxgTZRGL4rPB/cuMplMLtD+uCHm1FxmBlQpIBsiiJBX9GmVXgOd2AwOhsfw7CIl71gKLYMygFP2DlppP2nkQHpGugbY8nHL3TTFUxwlAXdWJj16qU2n/FNIVAyskxb44vRgcdP1iep4sswZ+5AvYeqfVBYuA0XPXKH7aCQL4OqC5gOM/XZRJ8X0e1mTMC4NB4Q1afszY1AE+G+AV3EVH/hi59v+lcLVS69/Ir2bEnfGolhVbhlnp4AB1z7CbG1w3pJo4/ydZDcWVqF3ESl6+WLFkGle34e7IPN53jw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: DMA restriction and NUMA node number
To: Julien Grall <julien@xen.org>, Wei Chen <Wei.Chen@arm.com>
Cc: Penny Zheng <Penny.Zheng@arm.com>,
 Bertrand Marquis <Bertrand.Marquis@arm.com>,
 "xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>
References: <DB9PR08MB68573DE6333A36646EDC75409E149@DB9PR08MB6857.eurprd08.prod.outlook.com>
 <89025168-bf55-5dff-db61-989b95934775@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <080cf741-7a11-4df5-5f24-cc7680f92151@suse.com>
Date: Tue, 13 Jul 2021 12:21:09 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <89025168-bf55-5dff-db61-989b95934775@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR02CA0210.eurprd02.prod.outlook.com
 (2603:10a6:20b:28f::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 160c9035-d322-4cb8-a5c9-08d945e7f04a
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2448:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB24480B019B08E1DD9DD23E27B3149@VI1PR0401MB2448.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	1ReSOgYQg5wUvC1W2dDYL+pFYIpYhElHgrIlWUDqOAxQnnfnZjqOMn+Yb+T4yAYL3l5yx1pOFFkQBIuIPoT9JveH18CqaSoqSDcnRygypDpv25crcN47lsLd/nnTW7RTJ2pjyxP5YnTdNl91dB4PPBicmUOftXoiyuyA4INdWiTa+o1MzOhTXD0kKsQqzpIYmCFVP7WYHncl+jaCMs8plDfoSsQTcFqPtCwlD4mfUqKqPd+EffNkRMN7L20JpPYIUsyQUHYkeeyuX7S0BUvgH5aWq9PuqiT6tjm5N5iUCefUPCjZTNUOfyO4CuYf961jwmiwM6HzRaaakSz29yXzvr4mRC/D0ZG7Dj2V899UWnS2vZcP1W3gxBWzyWvFLwug5L7gaxinepDAUY2QTIJFoLlptG1C08tk0j4GQS7wuVZT1xgc8zGB4Prl/srNiBbwr3d87n8Sf+lq2X0cC1el10F2MygasO1vUrKN4YZd7SgJDuLmYc7oS29cc3SBVCUF4GHb78px6DRiIrn+yuMfbNGa0vz6JOjqnXQaElB6Oc3yEIO9ar8QtaJ4tCvLaCEiIStbQVYFtmIIsP0YL5NMdZHdzFS5tmtd6b6H3dcEMdNMkf7A/Q4f4llbCHsIiBKB6X+QJ2tKkEUiZhsY/0gG3Ig8zPAeBd7qH47NYC0piU1PioVIVoffP3Nb06chifGQZ7m7WV+b4/7YjD2AA5Qbp3fUvtg8p/GI6wVgWDi5Ke0=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(136003)(346002)(396003)(376002)(366004)(16576012)(316002)(83380400001)(956004)(2616005)(4326008)(110136005)(54906003)(8676002)(53546011)(6486002)(36756003)(31696002)(26005)(186003)(86362001)(8936002)(478600001)(5660300002)(31686004)(38100700002)(66556008)(66476007)(2906002)(66946007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 160c9035-d322-4cb8-a5c9-08d945e7f04a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 10:21:12.2031
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: POmMLbiCR1+crF6naT3iK5BObrt8UVjZa3MF+bJVZThB9rp5FJaAcgdg1fpy0sOX4KuNsbjGsJykAJuH0STXog==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2448

On 13.07.2021 11:26, Julien Grall wrote:
> On 13/07/2021 04:19, Wei Chen wrote:
>> I am doing some NUMA testing on Xen. And I find the DMA restriction is
>> based on NUMA node number [1].
>>      if ( !dma_bitsize && (num_online_nodes() > 1) )
>>          dma_bitsize = arch_get_dma_bitsize();
>>
>> On Arm64, we will set dma_bitsize [2] to 0, that means we don't need to
>> reserve DMA memory. But when num_online_nodes > 1, the dma_bitsize
>> will override to 32. This may be caused by the Arm64 version
>> arch_get_dma_bitsize, it may be a simple implementation and not NUMA
>> aware.
>>
>> But I still quite curious about why DMA restriction depends on NUMA
>> node number.

So really do you mean "node count", not "node number"?

>> In Arm64, dma_bitsize does not change when the NUMA node
>> changes. So we didn't expect arch_get_dma_bitsize to be called here.
>>
>> I copied Keir's commit message from 2008. It seems this code was considered
>> only for x86, when he was working on it. But I'm not an x86 expert, so I
>> hope Xen x86 folks can give some help. Understanding this will help us to
> 
> It is best to CCed the relevant person so they know you have requested 
> there input. I have added the x86 maintainers in the thread.
> 
>> do some adaptations to Arm in subsequent modifications : )
>>
>> commit accacb43cb7f16e9d1d8c0e58ea72c9d0c32cec2
>> Author: Keir Fraser <keir.fraser@citrix.com>
>> Date:   Mon Jul 28 16:40:30 2008 +0100
>>
>>      Simplify 'dma heap' logic.
>>
>>      1. Only useful for NUMA systems, so turn it off on non-NUMA systems by
>>         default.
>>      2. On NUMA systems, by default relate the DMA heap size to NUMA node 0
>>         memory size (so that not all of node 0's memory ends up being 'DMA
>>         heap').
>>      3. Remove the 'dma emergency pool'. It's less useful now that running
>>         out of low memory isn;t as fatal as it used to be (e.g., when we
>>         needed to be able to allocate low-memory PAE page directories).

So on x86 memory starts from 0, and we want to be cautious with giving
out memory that may be needed for special purposes (first and foremost
DMA). With the buddy allocator working from high addresses to lower ones,
low addresses will be used last (unless specifically requested) without
any further precautions when not taking NUMA into account. This in
particular covers the case of just a single NUMA node.

When taking NUMA into account we need to be more careful: If a single
node contains the majority (or all) of the more precious memory, we
want to prefer non-local allocations over exhausting the more precious
memory ranges. Hence we need to set aside some largely arbitrary amount
allocation of which would happen only after also exhausting all other
nodes' memory.

I hope I have suitably reconstructed the thinking back then. And yes,
there are x86 implications in here.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 10:35:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 10:35:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155290.286686 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Fl7-0005It-8X; Tue, 13 Jul 2021 10:35:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155290.286686; Tue, 13 Jul 2021 10:35:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Fl7-0005Im-5A; Tue, 13 Jul 2021 10:35:25 +0000
Received: by outflank-mailman (input) for mailman id 155290;
 Tue, 13 Jul 2021 10:35:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3Fl5-0005Ig-MR
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 10:35:23 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0bf25f15-21ff-4d56-a6e4-7fccb7837604;
 Tue, 13 Jul 2021 10:35:22 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 042FB20099;
 Tue, 13 Jul 2021 10:35:22 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id C3E5713985;
 Tue, 13 Jul 2021 10:35:21 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id ewwBLmls7WAaMwAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 10:35:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0bf25f15-21ff-4d56-a6e4-7fccb7837604
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626172522; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=yEOWyRpQJpmw6+Nyh6i3LlNyleYauISxad/pVWoUlrE=;
	b=poySpv5n2bD7UdPei+bWcZq9Eq71zeyPHFJHhNirYDoUfJe7xh/l1lE5H9+qR9UPmqW5XU
	a1mraAvCdWLlj8/1CbD3ArmdA7Dm+7qblbQaNNav0dq17Lrk1RuMoQLz1l2l+ji7qoFuHy
	6lYjSrm+2rLm0NwWSR2GkOA3uKBM3+Q=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <3ba3b128-027b-f95a-6021-5e34da56d260@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <3f03e5fa-788f-3411-0a8a-b5eef7f891e1@suse.com>
Date: Tue, 13 Jul 2021 12:35:21 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <3ba3b128-027b-f95a-6021-5e34da56d260@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="4TLJOly6GVSuLgubEat8h9LzIn2bgVWHI"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--4TLJOly6GVSuLgubEat8h9LzIn2bgVWHI
Content-Type: multipart/mixed; boundary="2UjXorYKcJ5p0to9IeY2TMnw8bjYarl4q";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <3f03e5fa-788f-3411-0a8a-b5eef7f891e1@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <3ba3b128-027b-f95a-6021-5e34da56d260@xen.org>
In-Reply-To: <3ba3b128-027b-f95a-6021-5e34da56d260@xen.org>

--2UjXorYKcJ5p0to9IeY2TMnw8bjYarl4q
Content-Type: multipart/mixed;
 boundary="------------1F760C88C8845CCFD002A317"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------1F760C88C8845CCFD002A317
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 11:31, Julien Grall wrote:
>=20
>=20
> On 13/07/2021 10:27, Juergen Gross wrote:
>> On 13.07.21 11:20, Julien Grall wrote:
>>> From: Julien Grall <jgrall@amazon.com>
>>>
>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and=

>>> wreck the build in an interesting way:
>>>
>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from xen/tools/include/xenctrl.h:36,
>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from private.h:4,
>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from minios.c:29:
>>> xen/include/public/memory.h:407:5: error: expected=20
>>> specifier-qualifier-list before =E2=80=98XEN_GUEST_HANDLE_64=E2=80=99=

>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 XEN_GUEST_HANDLE_64(const_uint8) buffe=
r;
>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~~~~~~~
>>>
>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and therefo=
re
>>> the public headers will start to expose the non-stable ABI. However,
>>> xen.h has already been included by a mini-OS header before hand. So
>>> there is a mismatch in the way the headers are included.
>>>
>>> For now solve it in a very simple (and gross) way by including
>>> xenctrl.h before the mini-os headers.
>>>
>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE=20
>>> redefinition error")
>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>
>>> ---
>>>
>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>
>>> I couldn't find a better way with would not result to revert the patc=
h
>>> (and break build on some system) or involve a longer rework of the
>>> headers.
>>
>> Just adding a "#define __XEN_TOOLS__" before the #include statements
>> doesn't work?
> It works but if someone decides to the rework the header and drop=20
> __XEN_TOOLS__ we would still define in minios.c (we technically don't=20
> need it). So I find the solution a lot worse than what I wrote.

Hmm, yes.


Juergen

--------------1F760C88C8845CCFD002A317
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------1F760C88C8845CCFD002A317--

--2UjXorYKcJ5p0to9IeY2TMnw8bjYarl4q--

--4TLJOly6GVSuLgubEat8h9LzIn2bgVWHI
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtbGkFAwAAAAAACgkQsN6d1ii/Ey8Q
YQgAn6FE5Fc9+evR5odXdX0IjLVrXYmbn+XykPB9kFRANTHhdjomofaKKw/aVgTrSnfWnf+mu4eS
9xDjw0yw0Si4DucD6WEI33i+YwU7Zh2CPVncMoRMgEoadoTZvPAN3rFS8YiyGlBZEI4ldgW4KTMP
Sqbr4MgVrvvREoG5u9j23u6ta+WNbOKqGdukqaaZts0w33GeDEQMoYS+9sC8Of+gks+F+1cr8TDz
2Fq5BgzqNcUxxmXv3a8sNZB8fUnnP9k0tc6o8do8DtkLcVO00cMKvNSoIeaVC74goxmaZ+x+/Vhk
bR7yMC2NXB9dNYL6+6ibqADI5+GuAIPlJde4DJ8h+Q==
=lFTV
-----END PGP SIGNATURE-----

--4TLJOly6GVSuLgubEat8h9LzIn2bgVWHI--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 10:50:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 10:50:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155295.286697 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Fzp-0007iV-Ja; Tue, 13 Jul 2021 10:50:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155295.286697; Tue, 13 Jul 2021 10:50:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Fzp-0007iO-Ga; Tue, 13 Jul 2021 10:50:37 +0000
Received: by outflank-mailman (input) for mailman id 155295;
 Tue, 13 Jul 2021 10:50:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=tLs3=MF=arm.com=Wei.Chen@srs-us1.protection.inumbo.net>)
 id 1m3Fzo-0007iE-8G
 for xen-devel@lists.xen.org; Tue, 13 Jul 2021 10:50:36 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.74]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2603b172-e3c8-11eb-873d-12813bfff9fa;
 Tue, 13 Jul 2021 10:50:34 +0000 (UTC)
Received: from AS8PR04CA0043.eurprd04.prod.outlook.com (2603:10a6:20b:312::18)
 by AM6PR08MB3909.eurprd08.prod.outlook.com (2603:10a6:20b:8e::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.19; Tue, 13 Jul
 2021 10:50:31 +0000
Received: from AM5EUR03FT006.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:312:cafe::89) by AS8PR04CA0043.outlook.office365.com
 (2603:10a6:20b:312::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend
 Transport; Tue, 13 Jul 2021 10:50:31 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT006.mail.protection.outlook.com (10.152.16.122) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Tue, 13 Jul 2021 10:50:30 +0000
Received: ("Tessian outbound 770f4ae52989:v98");
 Tue, 13 Jul 2021 10:50:30 +0000
Received: from 62b0970c553e.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 987FDE56-F544-4837-B3DC-6F1DBB3E5F9D.1; 
 Tue, 13 Jul 2021 10:50:21 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 62b0970c553e.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 13 Jul 2021 10:50:21 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com (2603:10a6:10:2a2::7)
 by DBBPR08MB5948.eurprd08.prod.outlook.com (2603:10a6:10:202::22) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Tue, 13 Jul
 2021 10:50:18 +0000
Received: from DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050]) by DB9PR08MB6857.eurprd08.prod.outlook.com
 ([fe80::c45:7e0b:231:b050%9]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 10:50:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2603b172-e3c8-11eb-873d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6QepIXfzkBJrmwksHDfXsLidyKq4aMvUuffWXtzxvRY=;
 b=G+4f6Krzs7mo7DKx3HwzDKdk35slUSn9vYFeZ1n9+O+uT52av2ogWKjGT5rEtRWiwPTiy1ArnyXfsbmCT49XWWjSV3xxo0LoQwyaykrzOMYE+5dEHazH6SzU7Hnc61ib/8lQ0VJsb35KCpA9lB8QABqNyea9OQPWpbn7P1aiJCg=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=HHi4cuLdDhE9h3/Zjv7ggOWEGOB1aFBqb7Z2OI3hyKU0klmJIxEFjBrOt9BZ7z7iQ9UMbn50Lg6IJ8yUOluEIJsbbHLZYuLaE6rig8l8STRhaprFxaPOXjeoq/wUbmacY8O0Accqz4nt/14GoRKfbn7IR4/VWLi0MUUpT7coCYDU77GQoUo5/gCu6MpCAh7kGdZTJE8p3GEJJKv4sePFRRlWrbSMq4s5bgiIHf8AUDJf/x/ZMdYgNdkvcDnQfEQPlLTlZj4WrXVK/I5bAKPeNR/jqca059uVwyiwlxOPCVxPwqdLsZcRw5lmaWi3Z2RyBfVEa7KMPBCxvK4AzfH4wg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6QepIXfzkBJrmwksHDfXsLidyKq4aMvUuffWXtzxvRY=;
 b=OwxjV8n5cHwWpByHdQP7PBfMf7I6FwXzX0ZLSrSkAG/RTbsD8oFmFbLjUAMn7SVK/9IebIiNrPD0ut74N1UAOGe692IHEZTgLUO3DJwPNpmXlXHNhjGqluVBByVymHwjHm9l1WRhYPNEiG1HLLUS2s4SowJGD/VFXY6Zhjb2pj4SaYxKVhrXiO7bAApWw9m+dxARoxG+a3zvlVny+Ymg29NE8jneM2KW5P5o746DEPb0L2qul8h0eLni2Tz3gJkb2qvLK9aSGq4mTZFQJYe2kUhkXVKjwjiiCEkAYHaVKlss4/HoJx/Cez1x8yylDY1r/SpgBsvdvJIHPiWRIE1iWw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6QepIXfzkBJrmwksHDfXsLidyKq4aMvUuffWXtzxvRY=;
 b=G+4f6Krzs7mo7DKx3HwzDKdk35slUSn9vYFeZ1n9+O+uT52av2ogWKjGT5rEtRWiwPTiy1ArnyXfsbmCT49XWWjSV3xxo0LoQwyaykrzOMYE+5dEHazH6SzU7Hnc61ib/8lQ0VJsb35KCpA9lB8QABqNyea9OQPWpbn7P1aiJCg=
From: Wei Chen <Wei.Chen@arm.com>
To: Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>
CC: Penny Zheng <Penny.Zheng@arm.com>, Bertrand Marquis
	<Bertrand.Marquis@arm.com>, "xen-devel@lists.xen.org"
	<xen-devel@lists.xen.org>, =?utf-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?=
	<roger.pau@citrix.com>, Stefano Stabellini <sstabellini@kernel.org>, Andrew
 Cooper <andrew.cooper3@citrix.com>
Subject: RE: DMA restriction and NUMA node number
Thread-Topic: DMA restriction and NUMA node number
Thread-Index: Add3jZlm0dMwxzV2RvOni5fmVkcvwgAO4HYAAAHsL4AAAIBVIA==
Date: Tue, 13 Jul 2021 10:50:18 +0000
Message-ID:
 <DB9PR08MB6857356F5E942970978838099E149@DB9PR08MB6857.eurprd08.prod.outlook.com>
References:
 <DB9PR08MB68573DE6333A36646EDC75409E149@DB9PR08MB6857.eurprd08.prod.outlook.com>
 <89025168-bf55-5dff-db61-989b95934775@xen.org>
 <080cf741-7a11-4df5-5f24-cc7680f92151@suse.com>
In-Reply-To: <080cf741-7a11-4df5-5f24-cc7680f92151@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 3277E48538F01E4CA5B3C4E3D7331820.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 1e4c010d-27c6-4fc0-1194-08d945ec08a8
x-ms-traffictypediagnostic: DBBPR08MB5948:|AM6PR08MB3909:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB3909F5BE4EF23BFBED1DE1359E149@AM6PR08MB3909.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 slK49nrv4MkWboYCoQSNJRNk3Vp0BCuJGPLNeePlyN8chDYeQIYmdCeUasVF7rBT9kVZH0K897Wx8DnSnvRBqkidBgBC2cuWxb+YwQXDrUB0rlvZOglHonOfnG7ROmXWecM2BZBE0G5es4jXz4b3j8LmNGHro3RGqCbqIbsBbGhkelPUSH0kJLdpqAtSunUHcJfNh/BZChVF9h6ynJiIn4N6gA/F6KuufuHlb6qLdwOuXqsOcWC3KHa4slgDrUpKuagIg9SJGqc2XGLBp3vMx/tc/DnUkVaOAgOrMjeTWlSlIwa+6y6C+ixd9+iPVzEs3H+ntZq/NjnJM56zk4VcOEuo2zlS+C6S6zm3jZY6c2twYHA2Qj32eKlbCWOJgncxBLYVdZT7m8AcGDxmqn++wGfI1Yn3eWpszOJKUurobKoyxmY/NnaAeT8JhfgqcmD2aIq3WngX44igBPfC2ZLLqPnbGzHnLQz9WJRCVCsaIqq0jynzBazjWctkcw+9+3+TwNKTZR7HDjpKmE5pcWozkSO+hEpsdzZxKH1Cd4o8eeeTQsiLsZS310/D46GONI72PGzWGvwoxoGZ9jDJk4aq9+M2BasuDKMzDUN6ePicTcV0cbebQyz2MpxkpCYvmzckyKcaEAtVC2Bjsh8sOjg3wA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6857.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(366004)(376002)(346002)(39860400002)(52536014)(6506007)(478600001)(66946007)(122000001)(7696005)(38100700002)(8936002)(66446008)(66476007)(54906003)(83380400001)(71200400001)(8676002)(26005)(55016002)(66556008)(9686003)(4326008)(2906002)(64756008)(5660300002)(76116006)(110136005)(186003)(316002)(53546011)(33656002)(86362001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?7vMtQPnv89taOFlKIk=3D?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB5948
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT006.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	634d7664-cd1d-4619-251d-08d945ec0139
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	JDmQ69ZOSvFIJVozdlh+vg6fZ6A00IuW1oW7Zk+zlEF890P89LjIBCm943UX+lKQjEScaOQAqp93SaSoj9A3f/9HBdvPfAaQfCqsW3YsZlPbOlfaQtbOokrB5zWrJ0ETKo4G53EfmYE7LoYCa9uZPun1jID2KpXuPxNOi6CRrzg2f1HHrJ6nlNVuaOlR64NpgxmFcPAAAH/BdK4x4NHBJrZG1h6z60XfZZv3FSe4ZagvffrhRi/7IEpqnCDFjA34WgeiAN0LSb2JCikDzHBZplx4dlAe3W7b3zKcNG5PS3w6RwfraOQAEggwIY7lMtaUVIFVtgz5YOYNwFQKb79DnBbiMe6I1HfNNGko6qJU/OK1KsjXdaC54DNwSTi+cUzqubR33zN5NLN1xwQgWDCMx3sPMGcLGF21/HzW0BbQ6+HquJ9yUUcdVZCkTcvLd2z/NYYOYcrkEi6+7Zhr+Pym89wI9q3Kv2CgW6MK4CJZ0CEsD/wz3cB5FSbaNqiJDdDUzFwzNn4duIJYAuHOxY+ZoTOGfH0ehqauFWgtB+W4iMvueNGves33sZc6eywDvU23vJzjRuJOEYufULCxfwhDS62L3CxeCLNyksmdAfePZiI2PxZYvAm26OTIMtWfjTqaQ8kqo52XOXGHVAWvJN35MvyWjVQEnqkJsaWJXQuKs4n95sOiI21RBSedPjcZ31W1v/8Vet84MyECY1aMDWgKAg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(376002)(39860400002)(396003)(346002)(36840700001)(46966006)(5660300002)(7696005)(478600001)(53546011)(186003)(86362001)(52536014)(33656002)(4326008)(36860700001)(54906003)(82310400003)(83380400001)(316002)(8676002)(82740400003)(70586007)(47076005)(8936002)(2906002)(81166007)(356005)(110136005)(70206006)(26005)(9686003)(6506007)(107886003)(55016002)(336012);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 10:50:30.8722
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 1e4c010d-27c6-4fc0-1194-08d945ec08a8
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT006.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3909

SGkgSmFuLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEphbiBCZXVs
aWNoIDxqYmV1bGljaEBzdXNlLmNvbT4NCj4gU2VudDogMjAyMeW5tDfmnIgxM+aXpSAxODoyMQ0K
PiBUbzogSnVsaWVuIEdyYWxsIDxqdWxpZW5AeGVuLm9yZz47IFdlaSBDaGVuIDxXZWkuQ2hlbkBh
cm0uY29tPg0KPiBDYzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+OyBCZXJ0cmFu
ZCBNYXJxdWlzDQo+IDxCZXJ0cmFuZC5NYXJxdWlzQGFybS5jb20+OyB4ZW4tZGV2ZWxAbGlzdHMu
eGVuLm9yZzsgUm9nZXIgUGF1IE1vbm7DqQ0KPiA8cm9nZXIucGF1QGNpdHJpeC5jb20+OyBTdGVm
YW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+Ow0KPiBBbmRyZXcgQ29vcGVy
IDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPg0KPiBTdWJqZWN0OiBSZTogRE1BIHJlc3RyaWN0
aW9uIGFuZCBOVU1BIG5vZGUgbnVtYmVyDQo+DQo+IE9uIDEzLjA3LjIwMjEgMTE6MjYsIEp1bGll
biBHcmFsbCB3cm90ZToNCj4gPiBPbiAxMy8wNy8yMDIxIDA0OjE5LCBXZWkgQ2hlbiB3cm90ZToN
Cj4gPj4gSSBhbSBkb2luZyBzb21lIE5VTUEgdGVzdGluZyBvbiBYZW4uIEFuZCBJIGZpbmQgdGhl
IERNQSByZXN0cmljdGlvbiBpcw0KPiA+PiBiYXNlZCBvbiBOVU1BIG5vZGUgbnVtYmVyIFsxXS4N
Cj4gPj4gICAgICBpZiAoICFkbWFfYml0c2l6ZSAmJiAobnVtX29ubGluZV9ub2RlcygpID4gMSkg
KQ0KPiA+PiAgICAgICAgICBkbWFfYml0c2l6ZSA9IGFyY2hfZ2V0X2RtYV9iaXRzaXplKCk7DQo+
ID4+DQo+ID4+IE9uIEFybTY0LCB3ZSB3aWxsIHNldCBkbWFfYml0c2l6ZSBbMl0gdG8gMCwgdGhh
dCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvDQo+ID4+IHJlc2VydmUgRE1BIG1lbW9yeS4gQnV0IHdo
ZW4gbnVtX29ubGluZV9ub2RlcyA+IDEsIHRoZSBkbWFfYml0c2l6ZQ0KPiA+PiB3aWxsIG92ZXJy
aWRlIHRvIDMyLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgdGhlIEFybTY0IHZlcnNpb24NCj4gPj4g
YXJjaF9nZXRfZG1hX2JpdHNpemUsIGl0IG1heSBiZSBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBh
bmQgbm90IE5VTUENCj4gPj4gYXdhcmUuDQo+ID4+DQo+ID4+IEJ1dCBJIHN0aWxsIHF1aXRlIGN1
cmlvdXMgYWJvdXQgd2h5IERNQSByZXN0cmljdGlvbiBkZXBlbmRzIG9uIE5VTUENCj4gPj4gbm9k
ZSBudW1iZXIuDQo+DQo+IFNvIHJlYWxseSBkbyB5b3UgbWVhbiAibm9kZSBjb3VudCIsIG5vdCAi
bm9kZSBudW1iZXIiPw0KPg0KDQpJIG1lYW4gTlVNQSBvbmxpbmUgbm9kZXMuIElmICJub2RlIGNv
dW50IiBoZXJlIG1lYW5zICJjb3VudCBob3cgbWFueSBOVU1BDQpub2RlcyBhcmUgb25saW5lIiwg
bXkgYW5zd2VyIGlzIHllcyBmb3IgIm5vZGUgY291bnQiLg0KDQo+ID4+IEluIEFybTY0LCBkbWFf
Yml0c2l6ZSBkb2VzIG5vdCBjaGFuZ2Ugd2hlbiB0aGUgTlVNQSBub2RlDQo+ID4+IGNoYW5nZXMu
IFNvIHdlIGRpZG4ndCBleHBlY3QgYXJjaF9nZXRfZG1hX2JpdHNpemUgdG8gYmUgY2FsbGVkIGhl
cmUuDQo+ID4+DQo+ID4+IEkgY29waWVkIEtlaXIncyBjb21taXQgbWVzc2FnZSBmcm9tIDIwMDgu
IEl0IHNlZW1zIHRoaXMgY29kZSB3YXMNCj4gY29uc2lkZXJlZA0KPiA+PiBvbmx5IGZvciB4ODYs
IHdoZW4gaGUgd2FzIHdvcmtpbmcgb24gaXQuIEJ1dCBJJ20gbm90IGFuIHg4NiBleHBlcnQsIHNv
DQo+IEkNCj4gPj4gaG9wZSBYZW4geDg2IGZvbGtzIGNhbiBnaXZlIHNvbWUgaGVscC4gVW5kZXJz
dGFuZGluZyB0aGlzIHdpbGwgaGVscCB1cw0KPiB0bw0KPiA+DQo+ID4gSXQgaXMgYmVzdCB0byBD
Q2VkIHRoZSByZWxldmFudCBwZXJzb24gc28gdGhleSBrbm93IHlvdSBoYXZlIHJlcXVlc3RlZA0K
PiA+IHRoZXJlIGlucHV0LiBJIGhhdmUgYWRkZWQgdGhlIHg4NiBtYWludGFpbmVycyBpbiB0aGUg
dGhyZWFkLg0KPiA+DQo+ID4+IGRvIHNvbWUgYWRhcHRhdGlvbnMgdG8gQXJtIGluIHN1YnNlcXVl
bnQgbW9kaWZpY2F0aW9ucyA6ICkNCj4gPj4NCj4gPj4gY29tbWl0IGFjY2FjYjQzY2I3ZjE2ZTlk
MWQ4YzBlNThlYTcyYzlkMGMzMmNlYzINCj4gPj4gQXV0aG9yOiBLZWlyIEZyYXNlciA8a2Vpci5m
cmFzZXJAY2l0cml4LmNvbT4NCj4gPj4gRGF0ZTogICBNb24gSnVsIDI4IDE2OjQwOjMwIDIwMDgg
KzAxMDANCj4gPj4NCj4gPj4gICAgICBTaW1wbGlmeSAnZG1hIGhlYXAnIGxvZ2ljLg0KPiA+Pg0K
PiA+PiAgICAgIDEuIE9ubHkgdXNlZnVsIGZvciBOVU1BIHN5c3RlbXMsIHNvIHR1cm4gaXQgb2Zm
IG9uIG5vbi1OVU1BDQo+IHN5c3RlbXMgYnkNCj4gPj4gICAgICAgICBkZWZhdWx0Lg0KPiA+PiAg
ICAgIDIuIE9uIE5VTUEgc3lzdGVtcywgYnkgZGVmYXVsdCByZWxhdGUgdGhlIERNQSBoZWFwIHNp
emUgdG8gTlVNQQ0KPiBub2RlIDANCj4gPj4gICAgICAgICBtZW1vcnkgc2l6ZSAoc28gdGhhdCBu
b3QgYWxsIG9mIG5vZGUgMCdzIG1lbW9yeSBlbmRzIHVwIGJlaW5nDQo+ICdETUENCj4gPj4gICAg
ICAgICBoZWFwJykuDQo+ID4+ICAgICAgMy4gUmVtb3ZlIHRoZSAnZG1hIGVtZXJnZW5jeSBwb29s
Jy4gSXQncyBsZXNzIHVzZWZ1bCBub3cgdGhhdA0KPiBydW5uaW5nDQo+ID4+ICAgICAgICAgb3V0
IG9mIGxvdyBtZW1vcnkgaXNuO3QgYXMgZmF0YWwgYXMgaXQgdXNlZCB0byBiZSAoZS5nLiwgd2hl
bg0KPiB3ZQ0KPiA+PiAgICAgICAgIG5lZWRlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGxvdy1t
ZW1vcnkgUEFFIHBhZ2UgZGlyZWN0b3JpZXMpLg0KPg0KPiBTbyBvbiB4ODYgbWVtb3J5IHN0YXJ0
cyBmcm9tIDAsIGFuZCB3ZSB3YW50IHRvIGJlIGNhdXRpb3VzIHdpdGggZ2l2aW5nDQo+IG91dCBt
ZW1vcnkgdGhhdCBtYXkgYmUgbmVlZGVkIGZvciBzcGVjaWFsIHB1cnBvc2VzIChmaXJzdCBhbmQg
Zm9yZW1vc3QNCj4gRE1BKS4gV2l0aCB0aGUgYnVkZHkgYWxsb2NhdG9yIHdvcmtpbmcgZnJvbSBo
aWdoIGFkZHJlc3NlcyB0byBsb3dlciBvbmVzLA0KPiBsb3cgYWRkcmVzc2VzIHdpbGwgYmUgdXNl
ZCBsYXN0ICh1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZCkgd2l0aG91dA0KPiBhbnkgZnVy
dGhlciBwcmVjYXV0aW9ucyB3aGVuIG5vdCB0YWtpbmcgTlVNQSBpbnRvIGFjY291bnQuIFRoaXMg
aW4NCj4gcGFydGljdWxhciBjb3ZlcnMgdGhlIGNhc2Ugb2YganVzdCBhIHNpbmdsZSBOVU1BIG5v
ZGUuDQo+DQo+IFdoZW4gdGFraW5nIE5VTUEgaW50byBhY2NvdW50IHdlIG5lZWQgdG8gYmUgbW9y
ZSBjYXJlZnVsOiBJZiBhIHNpbmdsZQ0KPiBub2RlIGNvbnRhaW5zIHRoZSBtYWpvcml0eSAob3Ig
YWxsKSBvZiB0aGUgbW9yZSBwcmVjaW91cyBtZW1vcnksIHdlDQo+IHdhbnQgdG8gcHJlZmVyIG5v
bi1sb2NhbCBhbGxvY2F0aW9ucyBvdmVyIGV4aGF1c3RpbmcgdGhlIG1vcmUgcHJlY2lvdXMNCj4g
bWVtb3J5IHJhbmdlcy4gSGVuY2Ugd2UgbmVlZCB0byBzZXQgYXNpZGUgc29tZSBsYXJnZWx5IGFy
Yml0cmFyeSBhbW91bnQNCj4gYWxsb2NhdGlvbiBvZiB3aGljaCB3b3VsZCBoYXBwZW4gb25seSBh
ZnRlciBhbHNvIGV4aGF1c3RpbmcgYWxsIG90aGVyDQo+IG5vZGVzJyBtZW1vcnkuDQo+DQo+IEkg
aG9wZSBJIGhhdmUgc3VpdGFibHkgcmVjb25zdHJ1Y3RlZCB0aGUgdGhpbmtpbmcgYmFjayB0aGVu
LiBBbmQgeWVzLA0KPiB0aGVyZSBhcmUgeDg2IGltcGxpY2F0aW9ucyBpbiBoZXJlLg0KPg0KDQpU
aGFua3MgZm9yIHlvdXIgZXhwbGFuYXRpb24sIHdlIGhhdmUgYSBkZWVwZXIgdW5kZXJzdGFuZGlu
ZyBvZiB0aGUNCnRob3VnaHRzIG9mIHRoaXMgRE1BIHJlc3RyaWN0aW9uLiBBbHRob3VnaCB0aGUg
bWVtb3J5IGxheW91dCBvZiBBcm0NCmFuZCB4ODYgaXMgbm90IHRoZSBzYW1lLCB3ZSBjYW4gdHJ5
IHRvIGtlZXAgdGhpcyBpZGVhIHN0aWxsIGluIGNvbW1vbiwNCmFuZCB0cnkgcmVzb2x2ZSB0aGlz
IGRpZmZlcmVuY2UgaW4gQXJtJ3MgQVJDSC4NCg0KVGhhbmtzLA0KV2VpIENoZW4NCg0KPiBKYW4N
Cg0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBh
dHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJ
ZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBz
ZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55
IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0
aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0K


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 11:06:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 11:06:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155303.286709 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GFP-00010t-2T; Tue, 13 Jul 2021 11:06:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155303.286709; Tue, 13 Jul 2021 11:06:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GFO-00010m-VJ; Tue, 13 Jul 2021 11:06:42 +0000
Received: by outflank-mailman (input) for mailman id 155303;
 Tue, 13 Jul 2021 11:06:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3GFN-00010c-3E; Tue, 13 Jul 2021 11:06:41 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3GFM-0003bX-SI; Tue, 13 Jul 2021 11:06:40 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3GFM-0004ye-Hg; Tue, 13 Jul 2021 11:06:40 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3GFM-0002IL-H9; Tue, 13 Jul 2021 11:06:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=r5C3XNvIXF5cO2eeQoGoOoGQUiUXg8YQ0eMGHLxk0sE=; b=S8rKyJ/zSm4LVxujQkEnGr0dKV
	wHUndmb4KqrYSpmL+oNNBeOdE3nRSNdB/7sEiTS9PFqwZGdySJAoFJvGfU/porGCrXtTOgTUk3xXO
	598Ygw+O/pdXKNiiCcI2RhsLIhVSxzw0IjmCgoQL9F8IlZcSkwxNjHae9XbwhTwkYVG4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163621-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163621: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=57e28d34c0cb04abf7683ac6a12c87ede447c320
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 11:06:40 +0000

flight 163621 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163621/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                57e28d34c0cb04abf7683ac6a12c87ede447c320
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    7 days
Failing since        163327  2021-07-06 12:39:04 Z    6 days   13 attempts
Testing same since   163621  2021-07-12 23:38:04 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Lara Lazier <laramglazier@gmail.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 6016 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 11:21:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 11:21:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155310.286723 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GU5-0003NU-Kv; Tue, 13 Jul 2021 11:21:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155310.286723; Tue, 13 Jul 2021 11:21:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GU5-0003NN-Hq; Tue, 13 Jul 2021 11:21:53 +0000
Received: by outflank-mailman (input) for mailman id 155310;
 Tue, 13 Jul 2021 11:21:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3GU4-0003NH-VP
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 11:21:52 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3GU3-0003q2-9C; Tue, 13 Jul 2021 11:21:51 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3GU3-0001QQ-2s; Tue, 13 Jul 2021 11:21:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=H4NYwjbTrn53yYXWyIU9SS1xHZ/zkq4DxbPNL7Eokl0=; b=abMudJAFkykTYRF00GSCeY4jZD
	oq+plaEK5xd3XMfEl+EqAjT1gu8V4op/95dYvvyW/K14AgjZ/2r2HIAiuhI3rBFfPQ1KJFdUQaA/W
	njcMGM2am+LU3niBUeDu7y475rzAfcPXCHDw0VuES6xpyJK0OMe83VqjMe/kVkVy/Vhk=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Andrew Cooper <andrew.cooper3@citrix.com>, Juergen Gross
 <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
Date: Tue, 13 Jul 2021 12:21:48 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Andrew,

On 13/07/2021 10:35, Andrew Cooper wrote:
> On 13/07/2021 10:27, Juergen Gross wrote:
>> On 13.07.21 11:20, Julien Grall wrote:
>>> From: Julien Grall <jgrall@amazon.com>
>>>
>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
>>> wreck the build in an interesting way:
>>>
>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>                    from xen/tools/include/xenctrl.h:36,
>>>                    from private.h:4,
>>>                    from minios.c:29:
>>> xen/include/public/memory.h:407:5: error: expected
>>> specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
>>>        XEN_GUEST_HANDLE_64(const_uint8) buffer;
>>>        ^~~~~~~~~~~~~~~~~~~
>>>
>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and therefore
>>> the public headers will start to expose the non-stable ABI. However,
>>> xen.h has already been included by a mini-OS header before hand. So
>>> there is a mismatch in the way the headers are included.
>>>
>>> For now solve it in a very simple (and gross) way by including
>>> xenctrl.h before the mini-os headers.
>>>
>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>> redefinition error")
>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>
>>> ---
>>>
>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>
>>> I couldn't find a better way with would not result to revert the patch
>>> (and break build on some system) or involve a longer rework of the
>>> headers.
>>
>> Just adding a "#define __XEN_TOOLS__" before the #include statements
>> doesn't work?
> 
> Not really, no.
> 
> libxenforeignmem has nothing at all to do with any Xen unstable
> interfaces.  Including xenctrl.h in the first place was wrong, because
> it is an unstable library.  By extension, the use of XC_PAGE_SIZE is
> also wrong.

Well... Previously we were using PAGE_SIZE which is just plain wrong on Arm.

At the moment, we don't have a way to query the page granularity of the 
hypervisor. But we know it can't change because of the way the current 
ABI was designed. Hence why using XC_PAGE_SIZE is the best of option we 
had until we go to ABIv2.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 11:24:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 11:24:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155314.286734 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GWD-000412-1x; Tue, 13 Jul 2021 11:24:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155314.286734; Tue, 13 Jul 2021 11:24:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GWC-00040v-V2; Tue, 13 Jul 2021 11:24:04 +0000
Received: by outflank-mailman (input) for mailman id 155314;
 Tue, 13 Jul 2021 11:24:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZRbA=MF=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3GWB-00040S-Ci
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 11:24:03 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fbdadde5-924f-4875-91a6-b3f92c30003c;
 Tue, 13 Jul 2021 11:24:02 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fbdadde5-924f-4875-91a6-b3f92c30003c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626175442;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=DSATlIsLgU8p+g1i3c0Aw8JPeUufzeiIhCzmr1/3EKA=;
  b=LpGQkWAP3ofmkqvRJOlloXfhyGYrcjYgH4XPJ3VcAPEsuyhvaxEqRnPD
   Kj2mT+M877rzl/YarqEo3+ltDt3xCXpPRjeh3KlnhcFAgSO35F0Vxo5t3
   AZeTl2Fz0X3rEOCdoyVwBZnr3/X2JOvsBqApbO3GGK+xBLuYrB6KiiV3x
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: qnXolNMXHQHkSXE1eORRu7xn7VWv0E3olUh1F1IWm7HqqpCqI302UVj+gWeYxouXElkAFESVlp
 ovLDkcO1yT2rKZa50IlWbwbiLXNXWT50ZDqQH/65QantHGc7sNfzFxR9qZf0LGBCAQB764tb6f
 +ttWAABY3WncuP5d1sk/I1uIv2oS74+OUrPspUW/6L975HaJf4xEsOrzIxcgMXfz6f46DKBI7Z
 tdsOhP4gSbWjtae6rkyM0zwR466cj5Z1z3ylxEqXhk9IQagKQOifis4xX/ld96u3gcPPq8zRCS
 j8Q=
X-SBRS: 5.1
X-MesageID: 48526132
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:aKvfMqHqMalRdzjepLqFH5HXdLJyesId70hD6qkvc3Jom52j+P
 xGws526faVslYssHFJo6HmBEDyewKjyXcT2/hvAV7CZnibhILMFuBfBOTZskbd8kHFh5dgPO
 JbAtVD4b7LfCtHZKTBkXGF+r8bqbHtms3Y5pa9vgJQpENRGsddBm9Ce3am+yZNNWx77PQCZf
 6hD4Z81kCdkSN9VLXLOpBJZZmOm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjMTSSlGz7sO+X
 XM11WR3NTsj9iLjjvnk0PD5ZVfn9XsjvNFGcy3k8AQbhHhkByhaohNU6CL+Bo1vOaswlA3l8
 SkmWZuA+1Dr1fqOk2lqxrk3AftlBw07WX59FOeiXz/5eTkWTMTEaN69MFkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l3CzvWEpnYco/jxiuLMlGfpsRLEkjQdo+M9qJlO81GlnKp
 guMCjk3ocVTbvABEqp+FWGqbeXLwYO9hTveDlIhiXa6UkOoJlD9Tpu+CUopAZJyHsMcegx2w
 36CNUfqFhvdL5dUUsvPpZNfSOIYla9CC4kdljieWjaKA==
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="48526132"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kLY6YbkB66yugONGi45oE+D04YyXOorY2v3Dn8FVfjCO5zOy8oNOl2xxYfYmb4jYLELFCgq0aj6Q0Nj3+Ry45r57faOgUkOD81QgJj27X9z+KCxz2uWYXEK4g3QsWi1l/C0gwpcDibtq7v38U0bJz2th1IKPAzhtyWdgwMERrGT47sK1PqHM8G+C98+VGcC4J9gfDPw+CngAFbRc8YqkYFK07uhfruI7GyffPhU6qZyuvBozATlwCQhi3rPCByvhxLwRH5TKOaoWs14RyJuGuxmFblj37h0lVBxXfpCie7d34HUOBzv+sRwoDh/TPvkXiznZWWuD275+RHQ39CljXQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DSATlIsLgU8p+g1i3c0Aw8JPeUufzeiIhCzmr1/3EKA=;
 b=DTijWqDWw8lwMQ69770Pyx2AdrVTYMVOKJncIi9eEkXjqPSA4Pe2SBajxdio+orzaLY7BCbpYREaG/Rgez9wqzjVBXnQWKj7wHVPvkBSrs30JCKCz27wMXCUYeRvC2YeStJ+USAgz1a5S2rCg/vn5Kb2CxBquUE4FgC0IfS/uw6Upgv2l/5FfOIV98nOGiz2RNhbiKgw0dCG/89fFiBsWywvD8Mj0VYEmWSPTIZr9fHE3UdH8/T/nYbDWYqyC9RGKOQ51gKJtAUsI8j8ZjmSw3x8Cx/yJooAWRk4TtlVrw/JzYnNEutuOYAPp3Rgw67BICqdnF90a0wj+O1vaJdt/g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DSATlIsLgU8p+g1i3c0Aw8JPeUufzeiIhCzmr1/3EKA=;
 b=RIIxL7gIbWhe8KPXBJ0Qz2gTUQzzdth3AQU9v9ddCXNxxohrQo1CzyfrUG4wQ3gSJ2Rbuf+Iy10/bIRktfZ1xQhw2N2p6PIVCDjMyiBhP40SYwyW1gsHyPyeDYzMOycuJtByC33KoPFSwZjSDXtSTvrAD+r/XtdGSMdvfLGrTeg=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, Juergen Gross <jgross@suse.com>,
	<xen-devel@lists.xenproject.org>
CC: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
Date: Tue, 13 Jul 2021 12:23:51 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0245.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1a7::16) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b68c78a0-d643-4278-b4df-08d945f0b46d
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5664:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB566483DCAA63FA81F1445E2ABA149@SJ0PR03MB5664.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: awq3DvAFU2vRospWEbxXIo8qBN9Oqp+rxbltL4W2D+KbDCba/TvuposIB+RN6ZVApLavk1y1sU58VOW/Uv+uIMWSeXf+Nin5pbsoE5clp/WkpjlwlZ6tPXWjLxUx11Vsa4aWHH+IoyxijF5Gu9+zSdot0DNgbUiPuKv2+VWz/JZ4rvIhb8qCq907EVcKKx4xL2XGOAIbwBWyjXjlYWziD5sju8dnrrtEaXY01Qdtky3IGAVdXzXOy3OHwmBWHhKy/hWoOHQayfmL9YWuHzLllaXbskV4eKuhC6nP0TCiAH9f0JLfjrdyOlrOTxCvnCbmR7jbU/0QrLaBZ74HSJeTkLTXOGByS8w8obtPpFmdWL0fK3eHauGRSLA9x580vNdyuDUl1bLLu9Z5McQYaE5X7bgeuFZiP5WhTFSfYNDGNZknr9eYQWn8Hm1/5Fc0j1xrSUJvsdE1nJD3UzvAeYOupqTP93KhY2usORazdhjcK53klG1rH/sBCQtV98UyBMSspIdsxMtiAqj59LAKHvjRRdc9frW/5+ZbRWb/I6ruSnHZUmos41BzHnuvthVd3+FKHNArBj1C7WWYdHLjGbdJ1wH1vszQBW/yachnhgkFqGLhDb9z5p5smLYtHHAteZTOIHQ545FBGf7KyEkrDEnszmGf1n41h4GGdqrnGq74CPU+lQcpFmdvv7uaZ6Olba2GMoG/cS20zTfxpduexkif7M4wOtggwVO5L7Su9fJYijdCL4WvzlnA2wq0tjb0sjpu
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(136003)(396003)(346002)(39850400004)(31686004)(8936002)(6486002)(66556008)(66476007)(478600001)(66946007)(2616005)(956004)(54906003)(8676002)(38100700002)(4326008)(36756003)(110136005)(26005)(53546011)(186003)(31696002)(16576012)(316002)(6666004)(2906002)(5660300002)(86362001)(98903001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: b68c78a0-d643-4278-b4df-08d945f0b46d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 11:23:57.3540
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Snil5YGBALeOoAW62xGRSQqXjfUoVY5kGd+diPvoryvb2XgfdCpkxjMExbtLcXTc4Df7TiqpICfdIwCMWpSgPqTQPFK5QsxFCDDiIfm3Wu0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5664
X-OriginatorOrg: citrix.com

On 13/07/2021 12:21, Julien Grall wrote:
> Hi Andrew,
>
> On 13/07/2021 10:35, Andrew Cooper wrote:
>> On 13/07/2021 10:27, Juergen Gross wrote:
>>> On 13.07.21 11:20, Julien Grall wrote:
>>>> From: Julien Grall <jgrall@amazon.com>
>>>>
>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
>>>> wreck the build in an interesting way:
>>>>
>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>                    from xen/tools/include/xenctrl.h:36,
>>>>                    from private.h:4,
>>>>                    from minios.c:29:
>>>> xen/include/public/memory.h:407:5: error: expected
>>>> specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
>>>>        XEN_GUEST_HANDLE_64(const_uint8) buffer;
>>>>        ^~~~~~~~~~~~~~~~~~~
>>>>
>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>> therefore
>>>> the public headers will start to expose the non-stable ABI. However,
>>>> xen.h has already been included by a mini-OS header before hand. So
>>>> there is a mismatch in the way the headers are included.
>>>>
>>>> For now solve it in a very simple (and gross) way by including
>>>> xenctrl.h before the mini-os headers.
>>>>
>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>> redefinition error")
>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>
>>>> ---
>>>>
>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>
>>>> I couldn't find a better way with would not result to revert the patch
>>>> (and break build on some system) or involve a longer rework of the
>>>> headers.
>>>
>>> Just adding a "#define __XEN_TOOLS__" before the #include statements
>>> doesn't work?
>>
>> Not really, no.
>>
>> libxenforeignmem has nothing at all to do with any Xen unstable
>> interfaces.  Including xenctrl.h in the first place was wrong, because
>> it is an unstable library.  By extension, the use of XC_PAGE_SIZE is
>> also wrong.
>
> Well... Previously we were using PAGE_SIZE which is just plain wrong
> on Arm.
>
> At the moment, we don't have a way to query the page granularity of
> the hypervisor. But we know it can't change because of the way the
> current ABI was designed. Hence why using XC_PAGE_SIZE is the best of
> option we had until we go to ABIv2.

Still doesn't mean that XC_PAGE_SIZE was ok to use.

Sounds like the constant needs moving into the Xen public headers, and
the inclusions of xenctrl.h into stable libraries needs reverting.

~Andrew


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 11:52:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 11:52:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155333.286747 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GxE-0007T9-Aq; Tue, 13 Jul 2021 11:52:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155333.286747; Tue, 13 Jul 2021 11:52:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3GxE-0007T2-81; Tue, 13 Jul 2021 11:52:00 +0000
Received: by outflank-mailman (input) for mailman id 155333;
 Tue, 13 Jul 2021 11:51:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZPIt=MF=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1m3GxC-0007Sw-Eh
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 11:51:58 +0000
Received: from mx.upb.ro (unknown [141.85.13.5])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a4df6a12-17ab-4e9e-932a-aef0a6d5958b;
 Tue, 13 Jul 2021 11:51:56 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id 197C5B56007F;
 Tue, 13 Jul 2021 14:51:54 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id As47PXx6yl0A; Tue, 13 Jul 2021 14:51:50 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id 44382B56008E;
 Tue, 13 Jul 2021 14:51:50 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id YxEouSP46Lan; Tue, 13 Jul 2021 14:51:50 +0300 (EEST)
Received: from [192.168.1.35] (unknown [82.78.48.206])
 by mx.upb.ro (Postfix) with ESMTPSA id AE319B56007F;
 Tue, 13 Jul 2021 14:51:49 +0300 (EEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a4df6a12-17ab-4e9e-932a-aef0a6d5958b
X-Virus-Scanned: amavisd-new at upb.ro
Subject: Re: [PATCH v4 3/5] tools/libs/foreignmemory: Fix PAGE_SIZE
 redefinition error
To: Jan Beulich <jbeulich@suse.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
Cc: xen-devel@lists.xenproject.org, julien Grall <julien@xen.org>
References: <cover.1623155575.git.costin.lupu@cs.pub.ro>
 <83beb95e3633b1aca7801fd8592406e2057f9bdc.1623155575.git.costin.lupu@cs.pub.ro>
 <bcc8d8c6-f9d2-6fdc-4533-398b7f261126@suse.com>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <9e20b180-a122-6a0c-fa13-249a8279547c@cs.pub.ro>
Date: Tue, 13 Jul 2021 14:51:49 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <bcc8d8c6-f9d2-6fdc-4533-398b7f261126@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi Jan,

First of all sorry for breaking the stubdom build. Please see inline.

On 7/13/21 9:47 AM, Jan Beulich wrote:
> On 08.06.2021 14:35, Costin Lupu wrote:
>> --- a/tools/libs/foreignmemory/private.h
>> +++ b/tools/libs/foreignmemory/private.h
>> @@ -1,6 +1,7 @@
>>  #ifndef XENFOREIGNMEMORY_PRIVATE_H
>>  #define XENFOREIGNMEMORY_PRIVATE_H
>>  
>> +#include <xenctrl.h>
>>  #include <xentoollog.h>
>>  
>>  #include <xenforeignmemory.h>
> 
> At the risk of repeating what may have been discussed on irc already yesterday
> (which I would not have seen), this is the cause for the present smoke test
> failure:
> 
> In file included from /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:39,
>                  from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:36,
>                  from private.h:4,
>                  from minios.c:29:
> /home/osstest/build.163627.build-amd64/xen/xen/include/public/memory.h:407:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(const_uint8) buffer;
>      ^~~~~~~~~~~~~~~~~~~
> In file included from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:36,
>                  from private.h:4,
>                  from minios.c:29:
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:101:34: error: field 'arch' has incomplete type
>      struct xen_arch_domainconfig arch;
>                                   ^~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:152:34: error: field 'arch_config' has incomplete type
>      struct xen_arch_domainconfig arch_config;
>                                   ^~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:182:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_pfn_t) array;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:263:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:280:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:301:26: error: field 'nodemap' has incomplete type
>      struct xenctl_bitmap nodemap;/* IN */
>                           ^~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:337:26: error: field 'cpumap_hard' has incomplete type
>      struct xenctl_bitmap cpumap_hard;
>                           ^~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:338:26: error: field 'cpumap_soft' has incomplete type
>      struct xenctl_bitmap cpumap_soft;
>                           ^~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:418:13: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>              XEN_GUEST_HANDLE_64(xen_domctl_schedparam_vcpu_t) vcpus;
>              ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:473:5: error: unknown type name 'int64_aligned_t'
>      int64_aligned_t time_offset_seconds; /* applied to domain wallclock time */
>      ^~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:480:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:533:13: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>              XEN_GUEST_HANDLE_64(char) path; /* path to the device tree node */
>              ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:544:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint32)  sdev_array;   /* OUT */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:685:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_policy; /* IN/OUT */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:735:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint8) buffer;  /* OUT: buffer to write record into */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:909:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint64) buffer;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:963:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_domctl_vcpu_msr_t) msrs; /* IN/OUT */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/domctl.h:984:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint) vdistance;
>      ^~~~~~~~~~~~~~~~~~~
> In file included from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:38,
>                  from private.h:4,
>                  from minios.c:29:
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:56:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(char) buffer;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:73:26: error: field 'cpu_mask' has incomplete type
>      struct xenctl_bitmap cpu_mask;
>                           ^~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:155:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:165:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:174:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(const_char) keys;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:188:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:217:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint64) trans_pt;   /* Px transition table */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:225:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint64) triggers;    /* Cx trigger counts */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:317:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint32) affected_cpus;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:474:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_sysctl_lockprof_data_t) data;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:504:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_sysctl_cputopo_t) cputopo;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:537:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_sysctl_meminfo_t) meminfo;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:563:26: error: field 'cpumap' has incomplete type
>      struct xenctl_bitmap cpumap; /*     OUT: IF */
>                           ^~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:665:13: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>              XEN_GUEST_HANDLE_64(xen_sysctl_arinc653_schedule_t) schedule;
>              ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:707:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(char) buffer; /* OUT */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:738:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(physdev_pci_device_t) devs;
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:814:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint32) features; /* OUT: */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:887:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(char) name;         /* IN: pointer to name. */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:912:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(uint8) payload;     /* IN, the ELF file. */
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:975:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_livepatch_status_t) status;  /* OUT. Must have enough
>      ^~~~~~~~~~~~~~~~~~~
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/sysctl.h:1059:5: error: expected specifier-qualifier-list before 'XEN_GUEST_HANDLE_64'
>      XEN_GUEST_HANDLE_64(xen_cpuid_leaf_t) cpuid_policy; /* OUT */
>      ^~~~~~~~~~~~~~~~~~~
> In file included from /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:55,
>                  from private.h:4,
>                  from minios.c:29:
> /home/osstest/build.163627.build-amd64/xen/stubdom/include/xen/arch-x86/xen-mca.h:431:5: error: unknown type name 'xenctl_bitmap_t'
>      xenctl_bitmap_t cpumap;
>      ^~~~~~~~~~~~~~~
> In file included from private.h:4,
>                  from minios.c:29:
> /home/osstest/build.163627.build-amd64/xen/tools/include/xenctrl.h:468:34: error: field 'arch_config' has incomplete type
>      struct xen_arch_domainconfig arch_config;
>                                   ^~~~~~~~~~~
> 
> Clearly xenctrl.h cannot be included freely right now; it expects other
> header to have been included first. Question is whether that's what needs
> fixing, or whether the new #include wants prefixing by whatever prereq
> headers that are needed. Or whether, considering that libxenforeignmemory.so
> doesn't depend on libxc.so, including xenctrl.h is inappropriate here in the
> first place, meaning that the tool stack's PAGE_SIZE abstraction may want to
> move to a separate header which is not tied to any particular library.
> 

XEN_GUEST_HANDLE_64 is defined in xen.h. The xenctrl.h header does
include xen.h before including memory.h, where XEN_GUEST_HANDLE_64 is
used. However, xen.h is also included before that inclusion by
mini-os/os.h (included by minios.c) without defining __XEN_TOOLS__ and
thus disabling the definition of XEN_GUEST_HANDLE_64 from xen.h.

Although moving the PAGE_SIZE abstraction definitions in a header of its
own would fix this build issue, we would still have the problem
described above, i.e. we include xen.h without defining __XEN_TOOLS__,
but we would need toolstack definitions. This is a bit unclear for me,
shouldn't __XEN_TOOLS__ be defined for a stubdom?

Having said that, I can create a new header for the toolstack PAGE_SIZE
abstraction, but I would need some name suggestions. Would
xenctrl_page.h be ok? Would we keep the XC_PAGE_* names if we consider
that they will be toolstack specific (and not tied to xenctrl lib)?.


Cheers,
Costin


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 11:53:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 11:53:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155338.286759 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Gyf-000891-R2; Tue, 13 Jul 2021 11:53:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155338.286759; Tue, 13 Jul 2021 11:53:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Gyf-00088u-Ny; Tue, 13 Jul 2021 11:53:29 +0000
Received: by outflank-mailman (input) for mailman id 155338;
 Tue, 13 Jul 2021 11:53:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3Gye-00088m-9r
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 11:53:28 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3Gyc-0004Nm-Qf; Tue, 13 Jul 2021 11:53:26 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3Gyc-0003LA-KL; Tue, 13 Jul 2021 11:53:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=qFWzMrAnFLTbg5OYti62kn+1gygCOpsd0IbV7p4VS+8=; b=2Sf3Kw0W5dUWz8tqmqF8fYf1ot
	cJ1z1u5F1mW8lY+QN7ApEHIczNc0t1c77Pp1wCjXcDdpb0G0dQFWPfizjwjZMuOkIeRSaWxrKtr99
	gm3UtaDJ6Bkv8l3bhP/Tyr3sB5m/bCAClmqqFnzzsnXXAh8ar50IFlmFf7crtAOQICeA=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Andrew Cooper <andrew.cooper3@citrix.com>, Juergen Gross
 <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
Date: Tue, 13 Jul 2021 12:53:24 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Andrew,

On 13/07/2021 12:23, Andrew Cooper wrote:
> On 13/07/2021 12:21, Julien Grall wrote:
>> Hi Andrew,
>>
>> On 13/07/2021 10:35, Andrew Cooper wrote:
>>> On 13/07/2021 10:27, Juergen Gross wrote:
>>>> On 13.07.21 11:20, Julien Grall wrote:
>>>>> From: Julien Grall <jgrall@amazon.com>
>>>>>
>>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h and
>>>>> wreck the build in an interesting way:
>>>>>
>>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>>                     from xen/tools/include/xenctrl.h:36,
>>>>>                     from private.h:4,
>>>>>                     from minios.c:29:
>>>>> xen/include/public/memory.h:407:5: error: expected
>>>>> specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
>>>>>         XEN_GUEST_HANDLE_64(const_uint8) buffer;
>>>>>         ^~~~~~~~~~~~~~~~~~~
>>>>>
>>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>>> therefore
>>>>> the public headers will start to expose the non-stable ABI. However,
>>>>> xen.h has already been included by a mini-OS header before hand. So
>>>>> there is a mismatch in the way the headers are included.
>>>>>
>>>>> For now solve it in a very simple (and gross) way by including
>>>>> xenctrl.h before the mini-os headers.
>>>>>
>>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>>> redefinition error")
>>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>>
>>>>> ---
>>>>>
>>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>>
>>>>> I couldn't find a better way with would not result to revert the patch
>>>>> (and break build on some system) or involve a longer rework of the
>>>>> headers.
>>>>
>>>> Just adding a "#define __XEN_TOOLS__" before the #include statements
>>>> doesn't work?
>>>
>>> Not really, no.
>>>
>>> libxenforeignmem has nothing at all to do with any Xen unstable
>>> interfaces.  Including xenctrl.h in the first place was wrong, because
>>> it is an unstable library.  By extension, the use of XC_PAGE_SIZE is
>>> also wrong.
>>
>> Well... Previously we were using PAGE_SIZE which is just plain wrong
>> on Arm.
>>
>> At the moment, we don't have a way to query the page granularity of
>> the hypervisor. But we know it can't change because of the way the
>> current ABI was designed. Hence why using XC_PAGE_SIZE is the best of
>> option we had until we go to ABIv2.
> 
> Still doesn't mean that XC_PAGE_SIZE was ok to use.

Note that I wrote "best of the option". The series has been sitting for 
ages with no-one answering... You could have provided your option back 
then if you thought it wasn't a good use...

> 
> Sounds like the constant needs moving into the Xen public headers, and
> the inclusions of xenctrl.h into stable libraries needs reverting.

This could work. Are you planning to work on it?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 12:39:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 12:39:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155354.286777 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3HhG-0004Uu-JU; Tue, 13 Jul 2021 12:39:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155354.286777; Tue, 13 Jul 2021 12:39:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3HhG-0004Un-EH; Tue, 13 Jul 2021 12:39:34 +0000
Received: by outflank-mailman (input) for mailman id 155354;
 Tue, 13 Jul 2021 12:39:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZRbA=MF=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3HhE-0004Uh-Ft
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 12:39:32 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5a56451f-1125-4536-a15d-75de4833918a;
 Tue, 13 Jul 2021 12:39:30 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5a56451f-1125-4536-a15d-75de4833918a
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626179970;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Ef84o/OeHu6OqZFNBEnEMx42HBtfd51MIH4pilvhb/U=;
  b=F8fQj3XA6FPK08cUfzf4W3Hzwf+3oT8U/BRZ6CYz7ksg54CBaKeKZ1ww
   QpAYpeik3dZFHzAwZg5PokG4XlG/cc1Gf1vrxshu0UaXZpZMgC3h5bTe1
   Vohn1wT340QfCiATSxAJt5w18MQrRrI+7oIBgiVTiQgnUfR6+wrhm7uAz
   I=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: glGuvsySL4quMF26omlxfjiCcSBG1K4lre3CWoDU+iz7b+FK87Qzd4tQgW9FM/WIXfnQM7uf3U
 g84KJ6rRgrQzxmU5sIUkK5vvFun3XGoIBgz5zO5a0iXvZoDJ/18jj+EiL4IE1wXDoigG5LdkUX
 6SJUUHlKIokudA5pXiXxqBH0s9APj1Bw0/bA7w0+PRT39SFF77dzTvMT1RkZ09ZGPaoGUu+t2s
 B55K5cxFSqOtQrU6S44tgXVQoJI40m2HuV/srbndpGey/Gaj3npkXBjy74lirQkb3/mia5N1hV
 yko=
X-SBRS: 5.1
X-MesageID: 48157128
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:AS8xy6+8Qz7uX1FLaq9uk+AiI+orL9Y04lQ7vn2ZKSY5TiVXra
 CTdZUgpHvJYVMqMk3I9uruBEDtex3hHP1OkOws1NWZLWrbUQKTRekP0WKL+Vbd8kbFh4xgPM
 lbEpSXCLfLfCVHZcSR2njFLz73quP3j5xBho3lvglQpRkBUdAG0+/gYDzraXGfQmN9dPwEPa
 vZ3OVrjRy6d08aa8yqb0N1JdQq97Xw5evbiQdtPW9e1DWz
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="48157128"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cwXQhKTSeng+RDwwvNt/3+eZr3+HzQGbvlZnYj9gxJ/XuDk1ds6XN28FJc2hO8eHW7BkSSQmlHoksNZRqf4XYh1HSyY+u8rV+tTocHGqKy45Acre6/PVTvwCMpg76eM4nL80jI79piwMOwYlXbNSbRb/gLqJJC56KCrRqnmbNaeZgPn1U1xHGhZWrhv0YRvDyN9OQFyl+yqH+X2UqMUHAGWOC3Dc0yUAm32HHocf+b9qSe3/OYZo1nuXJ1yKPWNl2r4TEvC0X8MAt4OKmi6Dj1g4X88kuidb8v2edUM3B/aDezDqyXspKxILshGsUcWufbbSayKga9i9XErAlaj8xQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ef84o/OeHu6OqZFNBEnEMx42HBtfd51MIH4pilvhb/U=;
 b=a7olgLiWBKO0rVWkQfvFvmIaD4OGn6KOWcAz1o9objAopYeH2fkNITaBc0XLditi2D7I2yUfOI2YAa8nVuuA08TUXJRIzoqrYOxRgfDTEYPbwWBCM1sfbLx18AESIw45lQ5RnAMcti0fcFl0suP9VQer/U2KoshCTHTl8q0JKTu15LdWl71/A+PnEG91YDwEmvUUaNY9VzC0+A+kbeoSuf54U4NB4zKw/tpPtPh2sd+KzHx4MOHy7WSqwXePyXCRyjYL8V+apX0kT7n+9PO8qdPeKCbmPKup+d60+BCqtrlBpD6kGNm+9q4DE3LUAYPlh5/wvu8xlpVXDkY5IcXFCg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ef84o/OeHu6OqZFNBEnEMx42HBtfd51MIH4pilvhb/U=;
 b=fsUAwKk+BZbSFZj4FRPgs6kWzl30NcoyQtWVouaFfon7TGNMtfRaI1aew8DHaVLQdO0rRyTobI3Xqn+H1gacD49fQX3FCa8J1jDRJiONiQWRJNVsxu+itw6XXUOPKjS9DkjeRudpk1WgSSv4rpNBiwi+7ZdHrwGBD761fg6L0Ac=
To: Julien Grall <julien@xen.org>, Juergen Gross <jgross@suse.com>,
	<xen-devel@lists.xenproject.org>
CC: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
Message-ID: <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
Date: Tue, 13 Jul 2021 13:39:17 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0084.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:138::17) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 28122c0d-85d8-484e-a493-08d945fb3e9c
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5887:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5887AAB103D1858137DA38A6BA149@SJ0PR03MB5887.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Y4zxqcmFFLDjz7UuUinbbV91y1o+cJJdIQca7oWGdWfbF4VorsmIk620sUGqfoaHQg79hAMWdBCNTKgmwDs+aoWUGQsyjOsBQBIqn2Nxnf4zdp7heuPCyGktU7O//O2iuW8tLoGuQuIKUtFT3LiPwCFS33DZ5R4R9LGdO+qQmFjyEgsTqzqmmGB1d62jcbZl0U9xTDHEKQCwHwMsV4Ii/5qm2fmXnDDZ9zH+EnY6r6tBzd9X4jKbDzKouIZQMfftk5xfNSJ2f52HPSTlo4ezLMmgPXWW+s9uap3DE3FhK0chpUqLOf3Bt23sxO3ntpkPKyRxBxHCNp1TCDmKTqg1fIQ6OJ5MbXumVYJmE+cLCM3NohnFwAfddwesof+Wszms0TpOt0jMmqx+LYMJwnJDlokK0atoaVdXgKbwDfa4Rt3d25a1BkMii59n1HcluKYablTxzIyefVDKNhKuyn/tcoPOR8bM1//LJk6JL+7BsXzH95NZsErFIdkMfUglbhLmVsUgbjtI1dgLAKhwqRaMEAuEHnA8mmNx0Gsg8QxZa5vNAIXJ45/05Qv7ZOZQyxUpoJkpOselKxm9hLyYKxInGu+f83a132pgwHQHz8hc9gLsFcTj5FP6HcMk7nZ9qkPd3eeE+LudM6csLYppWT2ho/oK9evZ0JaxaVDWp7TuH7/I1HQ8Ce1n18TPvvHZXAkFAcXdvEKfQmp+giJnjsLA0cC5BfHjq7Rk3DteZx73c1NFN5NcRtdnYcNi3t0AGY5v
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(366004)(39850400004)(136003)(376002)(5660300002)(8676002)(31686004)(4326008)(186003)(54906003)(38100700002)(66946007)(478600001)(53546011)(110136005)(31696002)(956004)(66556008)(66476007)(36756003)(26005)(6666004)(2906002)(86362001)(316002)(6486002)(2616005)(8936002)(16576012)(98903001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 28122c0d-85d8-484e-a493-08d945fb3e9c
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 12:39:24.0945
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 9bP6WQNUCtP4nid1CSJMm8HMP1LMgZj2u1B7qmTj/9Yo3lFDc0wHCAukvW+5aIXRjiI1GAo6pHkWzsh8jYbvjgKz1KJJ0yqDYGv4OdQDr5o=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5887
X-OriginatorOrg: citrix.com

On 13/07/2021 12:53, Julien Grall wrote:
> Hi Andrew,
>
> On 13/07/2021 12:23, Andrew Cooper wrote:
>> On 13/07/2021 12:21, Julien Grall wrote:
>>> Hi Andrew,
>>>
>>> On 13/07/2021 10:35, Andrew Cooper wrote:
>>>> On 13/07/2021 10:27, Juergen Gross wrote:
>>>>> On 13.07.21 11:20, Julien Grall wrote:
>>>>>> From: Julien Grall <jgrall@amazon.com>
>>>>>>
>>>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h
>>>>>> and
>>>>>> wreck the build in an interesting way:
>>>>>>
>>>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from xen/tools/include/xen=
ctrl.h:36,
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from private.h:4,
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from minios.c:29:
>>>>>> xen/include/public/memory.h:407:5: error: expected
>>>>>> specifier-qualifier-list before =E2=80=98XEN_GUEST_HANDLE_64=E2=80=
=99
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 XEN_GUEST_HANDLE_64(const=
_uint8) buffer;
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~~~~~~~
>>>>>>
>>>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>>>> therefore
>>>>>> the public headers will start to expose the non-stable ABI. However,
>>>>>> xen.h has already been included by a mini-OS header before hand. So
>>>>>> there is a mismatch in the way the headers are included.
>>>>>>
>>>>>> For now solve it in a very simple (and gross) way by including
>>>>>> xenctrl.h before the mini-os headers.
>>>>>>
>>>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>>>> redefinition error")
>>>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>>>
>>>>>> ---
>>>>>>
>>>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>>>
>>>>>> I couldn't find a better way with would not result to revert the
>>>>>> patch
>>>>>> (and break build on some system) or involve a longer rework of the
>>>>>> headers.
>>>>>
>>>>> Just adding a "#define __XEN_TOOLS__" before the #include statements
>>>>> doesn't work?
>>>>
>>>> Not really, no.
>>>>
>>>> libxenforeignmem has nothing at all to do with any Xen unstable
>>>> interfaces.=C2=A0 Including xenctrl.h in the first place was wrong, be=
cause
>>>> it is an unstable library.=C2=A0 By extension, the use of XC_PAGE_SIZE=
 is
>>>> also wrong.
>>>
>>> Well... Previously we were using PAGE_SIZE which is just plain wrong
>>> on Arm.
>>>
>>> At the moment, we don't have a way to query the page granularity of
>>> the hypervisor. But we know it can't change because of the way the
>>> current ABI was designed. Hence why using XC_PAGE_SIZE is the best of
>>> option we had until we go to ABIv2.
>>
>> Still doesn't mean that XC_PAGE_SIZE was ok to use.
>
> Note that I wrote "best of the option". The series has been sitting
> for ages with no-one answering... You could have provided your option
> back then if you thought it wasn't a good use...

On a series I wasn't even CC'd on?

And noone had even bothered to compile test?

>
>>
>> Sounds like the constant needs moving into the Xen public headers, and
>> the inclusions of xenctrl.h into stable libraries needs reverting.
>
> This could work. Are you planning to work on it?

No.=C2=A0 I don't have enough time to do my own work thanks to all the CI
breakage and regressions being committed.

This needs fixing, or the original series reverting for 4.16 because the
current form (with or without this emergency build fix) isn't acceptable
to release with.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 13:00:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 13:00:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155360.286788 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3I1l-0007i6-7z; Tue, 13 Jul 2021 13:00:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155360.286788; Tue, 13 Jul 2021 13:00:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3I1l-0007hz-51; Tue, 13 Jul 2021 13:00:45 +0000
Received: by outflank-mailman (input) for mailman id 155360;
 Tue, 13 Jul 2021 13:00:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3I1j-0007ht-Dn
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 13:00:43 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3I1g-0005Z3-DC; Tue, 13 Jul 2021 13:00:40 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3I1g-0007rx-6K; Tue, 13 Jul 2021 13:00:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=kUHn0hW3j0aohKyPohiOuURVNltDR9boIkEquO8Icfc=; b=hjNdpOjcLuyB/ma5yv2PCVT13s
	ICBhFkcdiGmCHu8PgtJbKjdaJcsamSoxUVOKljGaHTxgbfRgQV3mqfPMimi0pyTprpmgUUnhVriYJ
	7LxCjq52FmEkVgxSqGUyMCQCSZVwmERrfi4gcmT803RHNhNJxbCKLT4AeHARTY5u1NRA=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Andrew Cooper <andrew.cooper3@citrix.com>, Juergen Gross
 <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <3c819563-b354-5527-050d-f698324d6021@xen.org>
Date: Tue, 13 Jul 2021 14:00:38 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 13/07/2021 13:39, Andrew Cooper wrote:
> On 13/07/2021 12:53, Julien Grall wrote:
>> Hi Andrew,
>>
>> On 13/07/2021 12:23, Andrew Cooper wrote:
>>> On 13/07/2021 12:21, Julien Grall wrote:
>>>> Hi Andrew,
>>>>
>>>> On 13/07/2021 10:35, Andrew Cooper wrote:
>>>>> On 13/07/2021 10:27, Juergen Gross wrote:
>>>>>> On 13.07.21 11:20, Julien Grall wrote:
>>>>>>> From: Julien Grall <jgrall@amazon.com>
>>>>>>>
>>>>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.h
>>>>>>> and
>>>>>>> wreck the build in an interesting way:
>>>>>>>
>>>>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>>>>                      from xen/tools/include/xenctrl.h:36,
>>>>>>>                      from private.h:4,
>>>>>>>                      from minios.c:29:
>>>>>>> xen/include/public/memory.h:407:5: error: expected
>>>>>>> specifier-qualifier-list before ‘XEN_GUEST_HANDLE_64’
>>>>>>>          XEN_GUEST_HANDLE_64(const_uint8) buffer;
>>>>>>>          ^~~~~~~~~~~~~~~~~~~
>>>>>>>
>>>>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>>>>> therefore
>>>>>>> the public headers will start to expose the non-stable ABI. However,
>>>>>>> xen.h has already been included by a mini-OS header before hand. So
>>>>>>> there is a mismatch in the way the headers are included.
>>>>>>>
>>>>>>> For now solve it in a very simple (and gross) way by including
>>>>>>> xenctrl.h before the mini-os headers.
>>>>>>>
>>>>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>>>>> redefinition error")
>>>>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>>>>
>>>>>>> ---
>>>>>>>
>>>>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>>>>
>>>>>>> I couldn't find a better way with would not result to revert the
>>>>>>> patch
>>>>>>> (and break build on some system) or involve a longer rework of the
>>>>>>> headers.
>>>>>>
>>>>>> Just adding a "#define __XEN_TOOLS__" before the #include statements
>>>>>> doesn't work?
>>>>>
>>>>> Not really, no.
>>>>>
>>>>> libxenforeignmem has nothing at all to do with any Xen unstable
>>>>> interfaces.  Including xenctrl.h in the first place was wrong, because
>>>>> it is an unstable library.  By extension, the use of XC_PAGE_SIZE is
>>>>> also wrong.
>>>>
>>>> Well... Previously we were using PAGE_SIZE which is just plain wrong
>>>> on Arm.
>>>>
>>>> At the moment, we don't have a way to query the page granularity of
>>>> the hypervisor. But we know it can't change because of the way the
>>>> current ABI was designed. Hence why using XC_PAGE_SIZE is the best of
>>>> option we had until we go to ABIv2.
>>>
>>> Still doesn't mean that XC_PAGE_SIZE was ok to use.
>>
>> Note that I wrote "best of the option". The series has been sitting
>> for ages with no-one answering... You could have provided your option
>> back then if you thought it wasn't a good use...
> 
> On a series I wasn't even CC'd on?

You had the link on IRC because we discussed it.

> 
> And noone had even bothered to compile test?

Well, that was a mistake. At the same time, if it compiled the "issue" 
you describe would have gone unnoticed. ;)

>>
>>>
>>> Sounds like the constant needs moving into the Xen public headers, and
>>> the inclusions of xenctrl.h into stable libraries needs reverting.
>>
>> This could work. Are you planning to work on it?
> 
> No.  I don't have enough time to do my own work thanks to all the CI
> breakage and regressions being committed.
> This needs fixing, or the original series reverting for 4.16 because the
> current form (with or without this emergency build fix) isn't acceptable
> to release with.
I disagree with this caracterization. Yes, this is including a 
non-stable header but it doesn't link with non-stable library.

In fact, reverting the series will bring back two issues:
   1) Xen tools will not build on all the distros
   2) Using PAGE_{SIZE, SHIFT} break arm tools because the userspace is 
not meant to rely on a given kernel page granularity.

So this doesn't look like a priority for 4.16. Although, it would be a 
nice clean-up to have so the libraries are more compliant.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 13:22:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 13:22:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155367.286799 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3IMx-0001qF-1C; Tue, 13 Jul 2021 13:22:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155367.286799; Tue, 13 Jul 2021 13:22:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3IMw-0001q8-UJ; Tue, 13 Jul 2021 13:22:38 +0000
Received: by outflank-mailman (input) for mailman id 155367;
 Tue, 13 Jul 2021 13:22:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3IMv-0001py-QX; Tue, 13 Jul 2021 13:22:37 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3IMv-0005uF-LQ; Tue, 13 Jul 2021 13:22:37 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3IMv-0004O5-Bg; Tue, 13 Jul 2021 13:22:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3IMv-00044P-B8; Tue, 13 Jul 2021 13:22:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=EDx1J5Rohzdji9hUHiD1QLE4T5WEC4R33+Ws+5BTyYk=; b=fNpKQx7AfEyKwjRiD/XyeM/Ylc
	zvhk/fZZSnRCAfEzVOXMjZcRcFAQW9UQ2GXCrpys4arFe4IjL5Da+J7wL9igbTJLFEeKBe8i+kkO5
	izAtMsFYQv9vUx83RljFb0xFM3cBzY9QU4PCsrVAY1W+gtcAnhEXZM3aTQrM81aZIMhw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163641-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163641: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:build-amd64:xen-build:fail:regression
    xen-unstable-smoke:build-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:build-check(1):blocked:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=1d3250f8c4cb750bb0dcf9fdbe01f8de85780281
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 13:22:37 +0000

flight 163641 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163641/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-amd64                   6 xen-build                fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 build-amd64-libvirt           1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  1 build-check(1)        blocked n/a
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  1d3250f8c4cb750bb0dcf9fdbe01f8de85780281
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    4 days
Failing since        163480  2021-07-09 16:08:01 Z    3 days   23 attempts
Testing same since   163641  2021-07-13 10:07:43 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  fail    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          blocked 
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    blocked 
 test-amd64-amd64-libvirt                                     blocked 


------------------------------------------------------------
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


Not pushing.

------------------------------------------------------------
commit 1d3250f8c4cb750bb0dcf9fdbe01f8de85780281
Author: Jan Beulich <jbeulich@suse.com>
Date:   Tue Jul 13 10:17:33 2021 +0200

    CHANGELOG: record changed PCI device quarantining default
    
    This amends commit 980d6acf1517 ("IOMMU: make DMA containment of
    quarantined devices optional").
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Paul Durrant <paul@xen.org>

commit ec6e56359553e82fefa877fd221479847ffc93dd
Author: Jan Beulich <jbeulich@suse.com>
Date:   Tue Jul 13 10:16:18 2021 +0200

    IOMMU: correct parsing of "quarantine=scratch-page"
    
    During the multiple renames of the sub-option I apparently forgot to
    update the left side of the &&, and this pretty consistently.
    
    Fixes: 980d6acf1517 ("IOMMU: make DMA containment of quarantined devices optional")
    Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Paul Durrant <paul@xen.org>

commit 93c9edbef51b31056f93a37a778326c90a83158c
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 16:02:29 2021 +0100

    tests/xenstore: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    This causes the code to be noticed by CI, which objects as follows:
    
      test-xenstore.c: In function 'main':
      test-xenstore.c:486:5: error: ignoring return value of 'asprintf', declared
      with attribute warn_unused_result [-Werror=unused-result]
           asprintf(&path, "%s/%u", TEST_PATH, getpid());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Address the CI failure by checking the asprintf() return value and exiting.
    
    Rename xs-test to test-xenstore to be consistent with other tests.  Honour
    APPEND_FLAGS too.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 6a9f5477637a9f2d1d61c0a065eeb01bf84f6484
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:37:49 2021 +0100

    tests/cpu-policy: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Rework TARGET-y to be TARGETS, drop redundant -f's for $(RM), drop the
    unconditional -O3 and use the default instead, and drop CFLAGS from the link
    line but honour APPEND_LDFLAGS.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit ff759953b32286f376fda7f3ff5a17eccb542b03
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 15:22:11 2021 +0100

    tests/resource: Rework Makefile
    
    In particular, fill in the install/uninstall rules so this test can be
    packaged to be automated sensibly.
    
    Make all object files depend on the Makefile, drop redundant -f's for $(RM),
    and use $(TARGET) when appropriate.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>

commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Tue Jun 15 14:19:15 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Jan Beulich <jbeulich@suse.com>

commit 2c7242bb2a11c027921b7f153841e59457edacc3
Author: Tamas K Lengyel <tamas@tklengyel.com>
Date:   Fri May 7 11:28:36 2021 -0400

    tools/misc/xen-vmtrace: handle more signals and install by default
    
    Signed-off-by: Tamas K Lengyel <tamas@tklengyel.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit e6917412628d11986f0e6fc028851c8181b24fb8
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:48 2021 +0200

    automation: provide pciutils in opensuse packages
    
    qemu-xen-traditional may make use of pciutils-devel, for PCI passthrough.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4ad75403625111bdd60571c3caaaefd3a84c574e
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:32:47 2021 +0200

    automation: provide SDL and SDL2 in opensuse images
    
    qemu-xen-traditional may make use of SDL, qemu-xen may make use of SDL2.
    Use pkgconfig() as resolvable instead of a rpm name, the latter may change.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 303c857a2701fe7c180744faca3507efd3edbb1d
Author: Olaf Hering <olaf@aepfle.de>
Date:   Fri Jul 9 16:06:53 2021 +0200

    automation: add meson and ninja to tumbleweed container
    
    qemu uses meson as for configuration, and requires ninja for building.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 2d1a35f1e6c2113a6322fdb758a198608c90e4bd
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:29 2021 +0300

    tools/ocaml: Fix redefinition errors
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    Same issue applies for redefinitions of Val_none and Some_val macros which
    can be already define in the OCaml system headers (e.g.
    /usr/lib/ocaml/caml/mlvalues.h).
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>
    Tested-by: Dario Faggioli <dfaggioli@suse.com>

commit d1b32abd94b620db05dfff0f4ce9cc17b9da0ccf
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:28 2021 +0300

    tools/libs/gnttab: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 0dbb4be739c50b8018aeeb285ef290bf7962a28e
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:27 2021 +0300

    tools/libs/foreignmemory: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with XC_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity.
    
    The exception is in osdep_xenforeignmemory_map() where we need the system page
    size to check whether the PFN array should be allocated with mmap() or with
    dynamic allocation.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit d276e0f3f14f2d46f27989008770eb2b9c678bc4
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:26 2021 +0300

    tools/libfsimage: Fix PATH_MAX redefinition error
    
    If PATH_MAX is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Julien Grall <jgrall@amazon.com>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit 37588941a249a0b45a44a6385b187d7d10132e7d
Author: Costin Lupu <costin.lupu@cs.pub.ro>
Date:   Tue Jun 8 15:35:25 2021 +0300

    tools/debugger: Fix PAGE_SIZE redefinition error
    
    If PAGE_SIZE is already defined in the system (e.g. in /usr/include/limits.h
    header) then gcc will trigger a redefinition error because of -Werror. This
    patch replaces usage of PAGE_* macros with KDD_PAGE_* macros in order to avoid
    confusion between control domain page granularity (PAGE_* definitions) and
    guest domain page granularity (which is what we are dealing with here).
    
    We chose to define the KDD_PAGE_* macros instead of using XC_PAGE_* macros
    because (1) the code in kdd.c should not include any Xen headers and (2) to add
    consistency for code in both kdd.c and kdd-xen.c.
    
    Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
    Reviewed-by: Tim Deegan <tim@xen.org>
    Acked-by: Ian Jackson <iwj@xenproject.org>

commit cf4aa8dfb201a7db3e9ec2d4a2ff56961c7719fb
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:28 2021 +0200

    automation: document how to refresh a container
    
    The Tumbleweed container should be updated often.
    Describe the neccessary steps how to refresh and test it before
    pushing the new image to gitlab.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 4905c2da20e2d95ff577033b0513d4bb57a9c086
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 16:56:49 2021 +0200

    automation: avoid globbering the docker run args
    
    containerize bash -c './configure && make' fails due to shell expansion.
    
    Collect all arguments for the script and pass them verbatim to the
    docker run command.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andew.cooper3@citrix.com>

commit ea7f91ded56e6de1fbf79b8a7c0985a5f5de5740
Author: Olaf Hering <olaf@aepfle.de>
Date:   Thu Jul 8 15:57:04 2021 +0200

    automation: use zypper dup in tumbleweed dockerfile
    
    The 'dup' command aligns the installed packages with the packages
    found in the enabled repositories, taking the repository priorities
    into account. Using this command is generally a safe thing to do.
    
    In the context of Tumbleweed using 'dup' is essential, because package
    versions might be downgraded, and package names occasionally change.
    Only 'dup' will do the correct thing in such cases.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 13:46:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 13:46:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155378.286813 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ik4-0004ci-5A; Tue, 13 Jul 2021 13:46:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155378.286813; Tue, 13 Jul 2021 13:46:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ik4-0004cb-1D; Tue, 13 Jul 2021 13:46:32 +0000
Received: by outflank-mailman (input) for mailman id 155378;
 Tue, 13 Jul 2021 13:46:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZPIt=MF=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1m3Ik2-0004cV-HW
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 13:46:30 +0000
Received: from mx.upb.ro (unknown [141.85.13.231])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b8da5cea-e3e0-11eb-875d-12813bfff9fa;
 Tue, 13 Jul 2021 13:46:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id 6D530B560070;
 Tue, 13 Jul 2021 16:46:27 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id vdXjRt43a79H; Tue, 13 Jul 2021 16:46:24 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id BA062B56009C;
 Tue, 13 Jul 2021 16:46:24 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id zM1_ZrPGeOW0; Tue, 13 Jul 2021 16:46:24 +0300 (EEST)
Received: from [192.168.1.35] (unknown [82.78.48.206])
 by mx.upb.ro (Postfix) with ESMTPSA id 7252DB560070;
 Tue, 13 Jul 2021 16:46:23 +0300 (EEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b8da5cea-e3e0-11eb-875d-12813bfff9fa
X-Virus-Scanned: amavisd-new at upb.ro
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
Date: Tue, 13 Jul 2021 16:46:23 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <3c819563-b354-5527-050d-f698324d6021@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable

Hi guys,

On 7/13/21 4:00 PM, Julien Grall wrote:
>=20
>=20
> On 13/07/2021 13:39, Andrew Cooper wrote:
>> On 13/07/2021 12:53, Julien Grall wrote:
>>> Hi Andrew,
>>>
>>> On 13/07/2021 12:23, Andrew Cooper wrote:
>>>> On 13/07/2021 12:21, Julien Grall wrote:
>>>>> Hi Andrew,
>>>>>
>>>>> On 13/07/2021 10:35, Andrew Cooper wrote:
>>>>>> On 13/07/2021 10:27, Juergen Gross wrote:
>>>>>>> On 13.07.21 11:20, Julien Grall wrote:
>>>>>>>> From: Julien Grall <jgrall@amazon.com>
>>>>>>>>
>>>>>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.=
h
>>>>>>>> and
>>>>>>>> wreck the build in an interesting way:
>>>>>>>>
>>>>>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from xen/tools/inc=
lude/xenctrl.h:36,
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from private.h:4,
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from minios.c:29:
>>>>>>>> xen/include/public/memory.h:407:5: error: expected
>>>>>>>> specifier-qualifier-list before =E2=80=98XEN_GUEST_HANDLE_64=E2=80=
=99
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 XEN_GUEST_HANDL=
E_64(const_uint8) buffer;
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~~~=
~~~~
>>>>>>>>
>>>>>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>>>>>> therefore
>>>>>>>> the public headers will start to expose the non-stable ABI.
>>>>>>>> However,
>>>>>>>> xen.h has already been included by a mini-OS header before hand.=
 So
>>>>>>>> there is a mismatch in the way the headers are included.
>>>>>>>>
>>>>>>>> For now solve it in a very simple (and gross) way by including
>>>>>>>> xenctrl.h before the mini-os headers.
>>>>>>>>
>>>>>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>>>>>> redefinition error")
>>>>>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>>>>>
>>>>>>>> ---
>>>>>>>>
>>>>>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>>>>>
>>>>>>>> I couldn't find a better way with would not result to revert the
>>>>>>>> patch
>>>>>>>> (and break build on some system) or involve a longer rework of t=
he
>>>>>>>> headers.
>>>>>>>
>>>>>>> Just adding a "#define __XEN_TOOLS__" before the #include stateme=
nts
>>>>>>> doesn't work?
>>>>>>
>>>>>> Not really, no.
>>>>>>
>>>>>> libxenforeignmem has nothing at all to do with any Xen unstable
>>>>>> interfaces.=C2=A0 Including xenctrl.h in the first place was wrong=
,
>>>>>> because
>>>>>> it is an unstable library.=C2=A0 By extension, the use of XC_PAGE_=
SIZE is
>>>>>> also wrong.
>>>>>
>>>>> Well... Previously we were using PAGE_SIZE which is just plain wron=
g
>>>>> on Arm.
>>>>>
>>>>> At the moment, we don't have a way to query the page granularity of
>>>>> the hypervisor. But we know it can't change because of the way the
>>>>> current ABI was designed. Hence why using XC_PAGE_SIZE is the best =
of
>>>>> option we had until we go to ABIv2.
>>>>
>>>> Still doesn't mean that XC_PAGE_SIZE was ok to use.
>>>
>>> Note that I wrote "best of the option". The series has been sitting
>>> for ages with no-one answering... You could have provided your option
>>> back then if you thought it wasn't a good use...
>>
>> On a series I wasn't even CC'd on?
>=20
> You had the link on IRC because we discussed it.
>=20
>>
>> And noone had even bothered to compile test?
>=20
> Well, that was a mistake. At the same time, if it compiled the "issue"
> you describe would have gone unnoticed. ;)
>=20
>>>
>>>>
>>>> Sounds like the constant needs moving into the Xen public headers, a=
nd
>>>> the inclusions of xenctrl.h into stable libraries needs reverting.
>>>
>>> This could work. Are you planning to work on it?
>>
>> No.=C2=A0 I don't have enough time to do my own work thanks to all the=
 CI
>> breakage and regressions being committed.
>> This needs fixing, or the original series reverting for 4.16 because t=
he
>> current form (with or without this emergency build fix) isn't acceptab=
le
>> to release with.
> I disagree with this caracterization. Yes, this is including a
> non-stable header but it doesn't link with non-stable library.
>=20
> In fact, reverting the series will bring back two issues:
> =C2=A0 1) Xen tools will not build on all the distros
> =C2=A0 2) Using PAGE_{SIZE, SHIFT} break arm tools because the userspac=
e is
> not meant to rely on a given kernel page granularity.
>=20
> So this doesn't look like a priority for 4.16. Although, it would be a
> nice clean-up to have so the libraries are more compliant.

First of all, sorry for breaking the build.

As Jan already suggested on a different thread, we can fix this by
isolating the XC_PAGE_* definitions of the toolstack in a header of
their own. I'm open to suggestions regarding the name of the header (my
suggestion would be xenctrl_page.h) and path (I guess it should be in
tools/include, right?). Also, should we change the names of the macros
from XC_PAGE_* to something else in order to reflect that they are
toolstack related instead of xenctrl specific?

@Andrew: Can you please tell me why XC_PAGE_SIZE wasn't ok to use? I'm
asking this in order to fully understand the issue.


Cheers,
Costin


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 13:53:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 13:53:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155384.286824 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Iqq-00062B-Qg; Tue, 13 Jul 2021 13:53:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155384.286824; Tue, 13 Jul 2021 13:53:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Iqq-000624-Nj; Tue, 13 Jul 2021 13:53:32 +0000
Received: by outflank-mailman (input) for mailman id 155384;
 Tue, 13 Jul 2021 13:53:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Iqp-00061p-CP; Tue, 13 Jul 2021 13:53:31 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Iqp-0006Qd-7d; Tue, 13 Jul 2021 13:53:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Iqp-0005Q9-04; Tue, 13 Jul 2021 13:53:31 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Iqo-0002M5-Vm; Tue, 13 Jul 2021 13:53:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=2jMiI2P69z1wskGV4u06Rhwlka6cc55JzgUoIQw5PG0=; b=Me90Trwnkf5zzx3WqM6VMGr0QK
	RIfDqkinMUE1fWpPRuT/Ihu5xj48bMdT5TcEdMcmNFAFn4yA7b+06kzXsVJDkqS/4H3JZ0ScbCak8
	Mu+RMupFwNnhmi1Y+8rmDUiX1X3r4M31wjbGLgpCgL8mT05lmDQAhj9vF3jqI90l77HQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163638-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163638: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=9bf4aee7340c331a47d3a60388d478461979a45d
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 13:53:30 +0000

flight 163638 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163638/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 9bf4aee7340c331a47d3a60388d478461979a45d
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   39 days
Failing since        162368  2021-06-04 15:42:59 Z   38 days  110 attempts
Testing same since   163638  2021-07-13 09:09:10 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3764 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:00:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:00:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155391.286841 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ixn-0007e1-Kp; Tue, 13 Jul 2021 14:00:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155391.286841; Tue, 13 Jul 2021 14:00:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ixn-0007du-H6; Tue, 13 Jul 2021 14:00:43 +0000
Received: by outflank-mailman (input) for mailman id 155391;
 Tue, 13 Jul 2021 14:00:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3Ixm-0007do-1Q
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:00:42 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6e076c88-6236-45a4-9d3a-90b8405da5cf;
 Tue, 13 Jul 2021 14:00:40 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 047FE2057E;
 Tue, 13 Jul 2021 14:00:40 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id B688413A45;
 Tue, 13 Jul 2021 14:00:39 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id OVB5Koec7WCvdgAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 14:00:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6e076c88-6236-45a4-9d3a-90b8405da5cf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626184840; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=AJCzCtGRNhYmTLrGH3J+hHcdizJYVl1PN4hFAGBJgrI=;
	b=YiP1gv6Vs1/SMh/fHTYBsGfz0HnvLpUBbtxW7WJsSZw4SJc7nYXuLqE4u06ScD8XaTE0j7
	/SRVK4XHiOHM80a/rmuli9iwxNXWff16hEse4qFhqGIO6L6C5cjxW7HeGGQCzl/10PdzYK
	BxzXNU03Hnt/P7x5y93F3Zgsq/DFCgA=
To: Costin Lupu <costin.lupu@cs.pub.ro>, Julien Grall <julien@xen.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
From: Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
Message-ID: <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
Date: Tue, 13 Jul 2021 16:00:39 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="teuPerawMk3KVgZzEGHSfj0vASGeFavTS"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--teuPerawMk3KVgZzEGHSfj0vASGeFavTS
Content-Type: multipart/mixed; boundary="OQ5SkGBxwWLZBxo0B5e0s9fKmPRFbUrdZ";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Costin Lupu <costin.lupu@cs.pub.ro>, Julien Grall <julien@xen.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>
Message-ID: <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
In-Reply-To: <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>

--OQ5SkGBxwWLZBxo0B5e0s9fKmPRFbUrdZ
Content-Type: multipart/mixed;
 boundary="------------D549EFAE3489D5528953C02F"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------D549EFAE3489D5528953C02F
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 15:46, Costin Lupu wrote:
> Hi guys,
>=20
> On 7/13/21 4:00 PM, Julien Grall wrote:
>>
>>
>> On 13/07/2021 13:39, Andrew Cooper wrote:
>>> On 13/07/2021 12:53, Julien Grall wrote:
>>>> Hi Andrew,
>>>>
>>>> On 13/07/2021 12:23, Andrew Cooper wrote:
>>>>> On 13/07/2021 12:21, Julien Grall wrote:
>>>>>> Hi Andrew,
>>>>>>
>>>>>> On 13/07/2021 10:35, Andrew Cooper wrote:
>>>>>>> On 13/07/2021 10:27, Juergen Gross wrote:
>>>>>>>> On 13.07.21 11:20, Julien Grall wrote:
>>>>>>>>> From: Julien Grall <jgrall@amazon.com>
>>>>>>>>>
>>>>>>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private=
=2Eh
>>>>>>>>> and
>>>>>>>>> wreck the build in an interesting way:
>>>>>>>>>
>>>>>>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from xen/tools/=
include/xenctrl.h:36,
>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from private.h:=
4,
>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from minios.c:2=
9:
>>>>>>>>> xen/include/public/memory.h:407:5: error: expected
>>>>>>>>> specifier-qualifier-list before =E2=80=98XEN_GUEST_HANDLE_64=E2=
=80=99
>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 XEN_GUEST_HAN=
DLE_64(const_uint8) buffer;
>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~=
~~~~~~
>>>>>>>>>
>>>>>>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>>>>>>> therefore
>>>>>>>>> the public headers will start to expose the non-stable ABI.
>>>>>>>>> However,
>>>>>>>>> xen.h has already been included by a mini-OS header before hand=
=2E So
>>>>>>>>> there is a mismatch in the way the headers are included.
>>>>>>>>>
>>>>>>>>> For now solve it in a very simple (and gross) way by including
>>>>>>>>> xenctrl.h before the mini-os headers.
>>>>>>>>>
>>>>>>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>>>>>>> redefinition error")
>>>>>>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>>
>>>>>>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>>>>>>
>>>>>>>>> I couldn't find a better way with would not result to revert th=
e
>>>>>>>>> patch
>>>>>>>>> (and break build on some system) or involve a longer rework of =
the
>>>>>>>>> headers.
>>>>>>>>
>>>>>>>> Just adding a "#define __XEN_TOOLS__" before the #include statem=
ents
>>>>>>>> doesn't work?
>>>>>>>
>>>>>>> Not really, no.
>>>>>>>
>>>>>>> libxenforeignmem has nothing at all to do with any Xen unstable
>>>>>>> interfaces.=C2=A0 Including xenctrl.h in the first place was wron=
g,
>>>>>>> because
>>>>>>> it is an unstable library.=C2=A0 By extension, the use of XC_PAGE=
_SIZE is
>>>>>>> also wrong.
>>>>>>
>>>>>> Well... Previously we were using PAGE_SIZE which is just plain wro=
ng
>>>>>> on Arm.
>>>>>>
>>>>>> At the moment, we don't have a way to query the page granularity o=
f
>>>>>> the hypervisor. But we know it can't change because of the way the=

>>>>>> current ABI was designed. Hence why using XC_PAGE_SIZE is the best=
 of
>>>>>> option we had until we go to ABIv2.
>>>>>
>>>>> Still doesn't mean that XC_PAGE_SIZE was ok to use.
>>>>
>>>> Note that I wrote "best of the option". The series has been sitting
>>>> for ages with no-one answering... You could have provided your optio=
n
>>>> back then if you thought it wasn't a good use...
>>>
>>> On a series I wasn't even CC'd on?
>>
>> You had the link on IRC because we discussed it.
>>
>>>
>>> And noone had even bothered to compile test?
>>
>> Well, that was a mistake. At the same time, if it compiled the "issue"=

>> you describe would have gone unnoticed. ;)
>>
>>>>
>>>>>
>>>>> Sounds like the constant needs moving into the Xen public headers, =
and
>>>>> the inclusions of xenctrl.h into stable libraries needs reverting.
>>>>
>>>> This could work. Are you planning to work on it?
>>>
>>> No.=C2=A0 I don't have enough time to do my own work thanks to all th=
e CI
>>> breakage and regressions being committed.
>>> This needs fixing, or the original series reverting for 4.16 because =
the
>>> current form (with or without this emergency build fix) isn't accepta=
ble
>>> to release with.
>> I disagree with this caracterization. Yes, this is including a
>> non-stable header but it doesn't link with non-stable library.
>>
>> In fact, reverting the series will bring back two issues:
>>  =C2=A0 1) Xen tools will not build on all the distros
>>  =C2=A0 2) Using PAGE_{SIZE, SHIFT} break arm tools because the usersp=
ace is
>> not meant to rely on a given kernel page granularity.
>>
>> So this doesn't look like a priority for 4.16. Although, it would be a=

>> nice clean-up to have so the libraries are more compliant.
>=20
> First of all, sorry for breaking the build.
>=20
> As Jan already suggested on a different thread, we can fix this by
> isolating the XC_PAGE_* definitions of the toolstack in a header of
> their own. I'm open to suggestions regarding the name of the header (my=

> suggestion would be xenctrl_page.h) and path (I guess it should be in
> tools/include, right?). Also, should we change the names of the macros
> from XC_PAGE_* to something else in order to reflect that they are
> toolstack related instead of xenctrl specific?

I would rather have that definition in xen/include/public/arch-*.h as
this is a hypervisor attribute.

And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.


Juergen


--------------D549EFAE3489D5528953C02F
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------D549EFAE3489D5528953C02F--

--OQ5SkGBxwWLZBxo0B5e0s9fKmPRFbUrdZ--

--teuPerawMk3KVgZzEGHSfj0vASGeFavTS
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtnIcFAwAAAAAACgkQsN6d1ii/Ey+3
hAf+N5RyK/PlOw8Nv6iGGJKRs+Fs5hL9RvnLHxbZvI1A8sIhjBWSh7yMT/KCO1GwJ8LrpPIGYESD
vol29v4RS20OVXm/8mLDwtqvWkR+WGK3T5H+rGHcGMV89KvmF5fnlutdvHiVGycpEnRgbltIrw3l
+FgDTYsX4gmt0vb6q3fCPMoglHi2D1nyI+YVNIYBTByYf9CxZLFH3W1V0AJEc7+UXLT7adlwnzfg
7thOBd8RQrXvV4reuQxsMxnE4zCfUpthu/Lo13H1SXonlwk1mjOpmq6pOBSB8pSu1o50jc0Aq6ek
sEfe8qprqX0QJ03w/xihF7U8NOerYxf8k71OQ1RrGA==
=bdbK
-----END PGP SIGNATURE-----

--teuPerawMk3KVgZzEGHSfj0vASGeFavTS--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:14:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:14:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155397.286855 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JB5-0000t4-1Q; Tue, 13 Jul 2021 14:14:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155397.286855; Tue, 13 Jul 2021 14:14:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JB4-0000sx-U3; Tue, 13 Jul 2021 14:14:26 +0000
Received: by outflank-mailman (input) for mailman id 155397;
 Tue, 13 Jul 2021 14:14:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3JB3-0000sr-Td
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:14:25 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 12dd8191-7856-4bd8-8db4-8b758b3bb4ca;
 Tue, 13 Jul 2021 14:14:24 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2052.outbound.protection.outlook.com [104.47.12.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-4-YIh8kkozOMOAnGx5D7VL-A-1;
 Tue, 13 Jul 2021 16:14:21 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7087.eurprd04.prod.outlook.com (2603:10a6:800:12a::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Tue, 13 Jul
 2021 14:14:20 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 14:14:20 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0059.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:55::34) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.23 via Frontend Transport; Tue, 13 Jul 2021 14:14:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 12dd8191-7856-4bd8-8db4-8b758b3bb4ca
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626185663;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=nX7GxssaRMK8RA6AYai5CpKD2yKt5kGdgqrHlx1ZQgw=;
	b=kZiydDO1vP6peXQ7cI3UYhalrZ04kON1Eq49rjxm5OUAQ3gWQnEs5FiQn2gggspkiHzghZ
	RRtvafkXn7+RNuKkYxqQtiZ/7P/x91gh0XGyp/IF/mYN/GtUjvu0IgMHeTSnQQs5uZwgRm
	v0cZElAOwmeeK8CUhCGMUk1OBlioLnY=
X-MC-Unique: YIh8kkozOMOAnGx5D7VL-A-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZatsdZ1ltjf2JJdc/nZMOr/LLwi1ueW71QJF60tjWks8/1ecnKO698R3FP6O47XRPmhB5Qu133dBuQxdeiLsyLjHb8A0KGeOlRucMxj16Zaeh+DV+vrKrMpZLUUdyjOGSSWpDFQVXXPOT64vZ2UbQldvfh9f4tEdNR0wazO3P3iCkkwNXAOndc5s1WqtylzfXijtRrbwOaYjtEP2/UwhgFac/hp4+0vT+jzcLNzprkAXZ/w47w+6P4yqpZKk9ZIYxL+wtYD6zrTFPxO5OHFEphFWAzIbBLJ9RBIMmkvgjFlvhk4wPNHc9tlUy0De9+EKNvTuH3Lm4c1PS4yYI9bO6A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fny9C6Ied+8Sr90b5zajdsmH/hQyiGydJvaeJVjhdBk=;
 b=Gy8058mciUwqSUnx5CQ9IAezJFs4ku1mSDkNmsGQvVKqV15lZl1VyRBKe79TWSPwVZWUoh87f7yQaON6IIyS7kKnmoIVSG8eHMTuUu3aQbRRyuEc3SmOapW61H2wd/qNqv2M+eW3PhYM/BG67TP+OZV7pmiGRx/+byHaF66Z7VeY5gk8q2dURSZUBHCtPQedvFR+0Rmay0N0/dObpskmApoXKSbeduYW3wsnRZD9DcLkeUEcW7R69gS51cwtBqMg5wu9lxlfudoINfxqJd981sGMabPT2+JUJzj96p/BZ6IrPj34R+0iGn1Oy0hmwmA2aq2wvaPRc9gt3/2yKzp0pQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Juergen Gross <jgross@suse.com>
CC: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Julien Grall <julien@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
Date: Tue, 13 Jul 2021 16:14:17 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: PR3P191CA0059.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:55::34) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5c433621-8332-4bde-6fb0-08d9460881b3
X-MS-TrafficTypeDiagnostic: VI1PR04MB7087:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7087BFD3C4B5DD1126450AC9B3149@VI1PR04MB7087.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	56gRqyT4j4bHnpf94GPTZG1dTeYVdkzczL4iQzXEqATHTLyXLn7nTYQ9Rj8+uOJbbl3B2BsDuLmH76dhicliR7Vy7bsfBkOkNzdJautAcMD3YnDwa54+1qjCEo2RU0dMPQ4ggBC6PITizjZ7eU+t7ROjBtMQ0cI6HB31z4PouIA02syFSEa4rXdpvC6dHdWXpHvPr5Ap49dBV1XCBl35kd6CRPj4nTKyHkuXoagAbBrv2qVkEOl424trR39NXizE0gugZ1gQx7UNAsQnd4bFFEm8yqF7XOvoVXLBXtTC01VxR1r1sw+D73s1hUXWtSHTFDxPIA5W/nlHHf9HPeK1khZX3HTLMYnUjYJ/ZnNOw2gYetGbmYuPJZAL5yK/Rp/ZAdrl25pTdp/SFMBljeubj9bKcnkj+kRYqplCvkawiER1H3QRH6oCHD2iiOs0/T5UfkKh0A+Byg8fI35339gXbW07EleO/0O7BKl+p9fYUAOZVJAOB0o4Zh1dClivEv1SivYKmJqb1cUf9ivPxWmQBCE97QTssbcVdEZxCKjv21fvs/isqWJWDQEJi+I6mm0j1OhWqGlX++9e0KOvNpikuEJ/0ltNirWoP2gyWfLqGPbOeFlhT4qrAyjwIPWXuXrDVfg2971mXFCUKSUE8oHH3HJi7h9FpxIz7qCixKkGv6gA0y4z8GNb5CIQvrTQz2AghDpK8GFcre8jQgqAMTT7HDY0/+jBtuDSrjZgN0jPZiB6rw1Nn6+VfyFOFpiNDkgx
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(39850400004)(376002)(136003)(396003)(54906003)(83380400001)(6862004)(5660300002)(8936002)(31686004)(53546011)(186003)(478600001)(31696002)(2906002)(4326008)(8676002)(36756003)(86362001)(66946007)(956004)(26005)(38100700002)(6486002)(66556008)(37006003)(66476007)(6636002)(316002)(2616005)(16576012)(98903001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?w9m/NEqZ4lIINyDsb2yBZsDinDIccNMfasgi46fW87pj7RVC/vQLD5krI8BG?=
 =?us-ascii?Q?95NVKZ0VTGH60Bxa4371qLDiNbPPJZlcnbA8p1zfiJFDQ1BBWVa2rTIkBD16?=
 =?us-ascii?Q?+uIuRN+eu+v1F3jyC8KlP4ne8iF5lLEu5D+KMw8LgWm1jE4wOoolRIxCuK08?=
 =?us-ascii?Q?eXfujKkqc9mUbsO2nCh2pP0vlWrV4V5aMUhkjebpbXVsY0yzEYClvDqy38xK?=
 =?us-ascii?Q?QEZk7hKZJk1BRLVb2829LHIrg4NFG5nXxNWhpYfkBospU8xE/Py+Z7+V83ls?=
 =?us-ascii?Q?86qWoM3+C5zN8Yy+sHqVo8qTAbFNKCj21Az5P0z3un5PBcTVh0B2QbzSHtud?=
 =?us-ascii?Q?ZguIee/UwaYWkhvo2tlp3jCpx1jwSUIH/KsWHtSdcbYSwAPGtHsmER4lH64C?=
 =?us-ascii?Q?08tsl54UyFPqaN+abXeizZ6PO5Fd4qfUnSB3QtoQOvtCz0PeLgFwnJKnMRWa?=
 =?us-ascii?Q?ATyHwlhWnQ1mjDu85wWRUXfDq/7K5W0/xX81DAi962cGqVmVdUkFYyhOnlDw?=
 =?us-ascii?Q?664Sa/Yd36b/F1w40UtTUovvm7ks6ljhPxO/JduigfSQSaF0TXg7pYt3tJI4?=
 =?us-ascii?Q?Ws38xBEP+Qscjkw2n5OPuqMh5Q/3+uZ1OORCOEEJfEKGcdTDJJQsspIBrYOq?=
 =?us-ascii?Q?UydzO+3z43ioESUVL2vn6gYYqxGUgxm1GWiXvdTIYxGMqcJldympUIvT37/6?=
 =?us-ascii?Q?SEpBytY5h6ljtWXJDbipcOSEmt3b43UILkudBguSM5dxOvxeNXkKPMTdA8WN?=
 =?us-ascii?Q?K0r2UoHAJY3Lcv/wDEbbzw2ygfkz49r/bCsyhK1h0WPDPkUuHl+oIYMg03dm?=
 =?us-ascii?Q?xUzAT7Ggs2MpMDRjVsYOlPQb+Wz9cehlybFaxKV4WzJKbLP0jJMfNc9wIr3C?=
 =?us-ascii?Q?J5bOUUxHuapiV/+RCY+Pyj9ha9eJOCaWY44wsdZZwqr4YsdiQrhgEIaAHakG?=
 =?us-ascii?Q?kSU0vtZPobHHPxjCrOQgq62CTIyEE3vnuBHlJEFnDhYQUdy80xNHOSLpabZQ?=
 =?us-ascii?Q?JjKg5W4hLJXhD/YbrsihnadLF7PYzuVGqbpgaqxXZDutCsPiNwtiEyxYTBO0?=
 =?us-ascii?Q?unfmm+TE2jiOnAEMoG/BlteQiJ6oZfhmOtYRHWj/1WjovLnb4+9sz/j4hXfZ?=
 =?us-ascii?Q?1jnqpbcU+TS1dqNVRu8mCEBz89rMyVdrSH0CmSuN+zECuuQt9e7veLwYfu1F?=
 =?us-ascii?Q?Mbh64fBNBeFfH3V4qdhWCrjCUns1w+rU2yZh3JL5JgeBSe2X+iXwWPeKxlJ6?=
 =?us-ascii?Q?sEqJsTA0EkEPXFRaBo3hkWWKt2btYON3ftKFLbOa2joW8SFAfMUfTNPDM+vI?=
 =?us-ascii?Q?/bEIs0zwPAJh5CI2a2BBtZN6?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5c433621-8332-4bde-6fb0-08d9460881b3
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 14:14:20.1797
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: LXwAks8TrWnyiZ0iSko4MiKoqdqZ+6QCQ7gCN59NxMx1hGhYgMCEzuRmUWg4a6dCiHMumZBLmstg9SOQ68o8Nw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7087

On 13.07.2021 16:00, Juergen Gross wrote:
> On 13.07.21 15:46, Costin Lupu wrote:
>> Hi guys,
>>
>> On 7/13/21 4:00 PM, Julien Grall wrote:
>>>
>>>
>>> On 13/07/2021 13:39, Andrew Cooper wrote:
>>>> On 13/07/2021 12:53, Julien Grall wrote:
>>>>> Hi Andrew,
>>>>>
>>>>> On 13/07/2021 12:23, Andrew Cooper wrote:
>>>>>> On 13/07/2021 12:21, Julien Grall wrote:
>>>>>>> Hi Andrew,
>>>>>>>
>>>>>>> On 13/07/2021 10:35, Andrew Cooper wrote:
>>>>>>>> On 13/07/2021 10:27, Juergen Gross wrote:
>>>>>>>>> On 13.07.21 11:20, Julien Grall wrote:
>>>>>>>>>> From: Julien Grall <jgrall@amazon.com>
>>>>>>>>>>
>>>>>>>>>> Commit 0dbb4be739c5 add the inclusion of xenctrl.h from private.=
h
>>>>>>>>>> and
>>>>>>>>>> wreck the build in an interesting way:
>>>>>>>>>>
>>>>>>>>>> In file included from xen/stubdom/include/xen/domctl.h:39:0,
>>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from xen/tools/in=
clude/xenctrl.h:36,
>>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from private.h:4,
>>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 from minios.c:29:
>>>>>>>>>> xen/include/public/memory.h:407:5: error: expected
>>>>>>>>>> specifier-qualifier-list before =E2=80=98XEN_GUEST_HANDLE_64=E2=
=80=99
>>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 XEN_GUEST_HAND=
LE_64(const_uint8) buffer;
>>>>>>>>>>  =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^~~~~~~~~~~~~~=
~~~~~
>>>>>>>>>>
>>>>>>>>>> This is happening because xenctrl.h defines __XEN_TOOLS__ and
>>>>>>>>>> therefore
>>>>>>>>>> the public headers will start to expose the non-stable ABI.
>>>>>>>>>> However,
>>>>>>>>>> xen.h has already been included by a mini-OS header before hand.=
 So
>>>>>>>>>> there is a mismatch in the way the headers are included.
>>>>>>>>>>
>>>>>>>>>> For now solve it in a very simple (and gross) way by including
>>>>>>>>>> xenctrl.h before the mini-os headers.
>>>>>>>>>>
>>>>>>>>>> Fixes: 0dbb4be739c5 ("tools/libs/foreignmemory: Fix PAGE_SIZE
>>>>>>>>>> redefinition error")
>>>>>>>>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>>>>>>>>>
>>>>>>>>>> ---
>>>>>>>>>>
>>>>>>>>>> Cc: Andrew Cooper <andrew.cooper3@citrix.com>
>>>>>>>>>>
>>>>>>>>>> I couldn't find a better way with would not result to revert the
>>>>>>>>>> patch
>>>>>>>>>> (and break build on some system) or involve a longer rework of t=
he
>>>>>>>>>> headers.
>>>>>>>>>
>>>>>>>>> Just adding a "#define __XEN_TOOLS__" before the #include stateme=
nts
>>>>>>>>> doesn't work?
>>>>>>>>
>>>>>>>> Not really, no.
>>>>>>>>
>>>>>>>> libxenforeignmem has nothing at all to do with any Xen unstable
>>>>>>>> interfaces.=C2=A0 Including xenctrl.h in the first place was wrong=
,
>>>>>>>> because
>>>>>>>> it is an unstable library.=C2=A0 By extension, the use of XC_PAGE_=
SIZE is
>>>>>>>> also wrong.
>>>>>>>
>>>>>>> Well... Previously we were using PAGE_SIZE which is just plain wron=
g
>>>>>>> on Arm.
>>>>>>>
>>>>>>> At the moment, we don't have a way to query the page granularity of
>>>>>>> the hypervisor. But we know it can't change because of the way the
>>>>>>> current ABI was designed. Hence why using XC_PAGE_SIZE is the best =
of
>>>>>>> option we had until we go to ABIv2.
>>>>>>
>>>>>> Still doesn't mean that XC_PAGE_SIZE was ok to use.
>>>>>
>>>>> Note that I wrote "best of the option". The series has been sitting
>>>>> for ages with no-one answering... You could have provided your option
>>>>> back then if you thought it wasn't a good use...
>>>>
>>>> On a series I wasn't even CC'd on?
>>>
>>> You had the link on IRC because we discussed it.
>>>
>>>>
>>>> And noone had even bothered to compile test?
>>>
>>> Well, that was a mistake. At the same time, if it compiled the "issue"
>>> you describe would have gone unnoticed. ;)
>>>
>>>>>
>>>>>>
>>>>>> Sounds like the constant needs moving into the Xen public headers, a=
nd
>>>>>> the inclusions of xenctrl.h into stable libraries needs reverting.
>>>>>
>>>>> This could work. Are you planning to work on it?
>>>>
>>>> No.=C2=A0 I don't have enough time to do my own work thanks to all the=
 CI
>>>> breakage and regressions being committed.
>>>> This needs fixing, or the original series reverting for 4.16 because t=
he
>>>> current form (with or without this emergency build fix) isn't acceptab=
le
>>>> to release with.
>>> I disagree with this caracterization. Yes, this is including a
>>> non-stable header but it doesn't link with non-stable library.
>>>
>>> In fact, reverting the series will bring back two issues:
>>>  =C2=A0 1) Xen tools will not build on all the distros
>>>  =C2=A0 2) Using PAGE_{SIZE, SHIFT} break arm tools because the userspa=
ce is
>>> not meant to rely on a given kernel page granularity.
>>>
>>> So this doesn't look like a priority for 4.16. Although, it would be a
>>> nice clean-up to have so the libraries are more compliant.
>>
>> First of all, sorry for breaking the build.
>>
>> As Jan already suggested on a different thread, we can fix this by
>> isolating the XC_PAGE_* definitions of the toolstack in a header of
>> their own. I'm open to suggestions regarding the name of the header (my
>> suggestion would be xenctrl_page.h) and path (I guess it should be in
>> tools/include, right?). Also, should we change the names of the macros
>> from XC_PAGE_* to something else in order to reflect that they are
>> toolstack related instead of xenctrl specific?
>=20
> I would rather have that definition in xen/include/public/arch-*.h as
> this is a hypervisor attribute.
>=20
> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.

Even that doesn't seem right to me, at least in principle. There shouldn't
be a build time setting when it may vary at runtime. IOW on Arm I think a
runtime query to the hypervisor would be needed instead. And thinking
even more generally, perhaps there could also be mixed (base) page sizes
in use at run time, so it may need to be a bit mask which gets returned.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:19:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:19:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155402.286866 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JFg-0001eh-Jo; Tue, 13 Jul 2021 14:19:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155402.286866; Tue, 13 Jul 2021 14:19:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JFg-0001ea-GZ; Tue, 13 Jul 2021 14:19:12 +0000
Received: by outflank-mailman (input) for mailman id 155402;
 Tue, 13 Jul 2021 14:19:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3JFf-0001eU-FD
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:19:11 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3JFb-0006wk-Vf; Tue, 13 Jul 2021 14:19:07 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3JFb-00047y-PF; Tue, 13 Jul 2021 14:19:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=f+XN0xR8iXaoRMZld8LT3jZGzJZyV2/UgdteyhFi9HA=; b=gFxcbEamk3xRask1fhfNkoqzuE
	DHSm42J0x1Ioa9hQYNvNXlUdQC1dO+SYYqEpcjSdzgRLlszKHG/ijFFSV0rKXLZfM1Fq9xNahw5BN
	zPfncpe32DdXQ0w5rxYhJ6e+UPWLBNyah/o/mFtUdQVGiod6esnyL0R8qZTxWT4msCOE=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Jan Beulich <jbeulich@suse.com>, Juergen Gross <jgross@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
Date: Tue, 13 Jul 2021 15:19:05 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 13/07/2021 15:14, Jan Beulich wrote:
>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
> 
> Even that doesn't seem right to me, at least in principle. There shouldn't
> be a build time setting when it may vary at runtime. IOW on Arm I think a
> runtime query to the hypervisor would be needed instead.

Yes, we want to be able to use the same userspace/OS without rebuilding 
to a specific hypervisor page size.

> And thinking
> even more generally, perhaps there could also be mixed (base) page sizes
> in use at run time, so it may need to be a bit mask which gets returned.

I am not sure to understand this. Are you saying the hypervisor may use 
at the same time different page size?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:23:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:23:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155409.286877 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JJj-000328-4a; Tue, 13 Jul 2021 14:23:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155409.286877; Tue, 13 Jul 2021 14:23:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JJj-000321-1I; Tue, 13 Jul 2021 14:23:23 +0000
Received: by outflank-mailman (input) for mailman id 155409;
 Tue, 13 Jul 2021 14:23:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3JJh-00031v-LK
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:23:21 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id df6cfb6a-e3e5-11eb-8766-12813bfff9fa;
 Tue, 13 Jul 2021 14:23:20 +0000 (UTC)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2059.outbound.protection.outlook.com [104.47.10.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-32-onCbJJhXP0uIPvpFIohJfw-2; Tue, 13 Jul 2021 16:23:18 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2334.eurprd04.prod.outlook.com (2603:10a6:800:29::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Tue, 13 Jul
 2021 14:23:16 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 14:23:16 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0009.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.21 via Frontend Transport; Tue, 13 Jul 2021 14:23:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: df6cfb6a-e3e5-11eb-8766-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626186199;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=QQ2kfo7NyDf0RDajIvE+rIqhi8x8fQmOx9DdY947RNI=;
	b=kiy7SiC5Ce7NUvXp8oNxrTQlIl4VNvq0XG13NweJswGdTXVENCBK4nByBB1xqxEDwYCMiv
	yts7du+DSOkBxVJ3hApjuXyiPNDufyrv8qOQCkOSAabo/gebD6fxA/IwMJS15ulhdmwgXX
	fkAcbDt+DDq4B9Be2hpAJ2dEB3LOTvk=
X-MC-Unique: onCbJJhXP0uIPvpFIohJfw-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UO25kwCx1CMT/71tFBznuFywSKuv7n7hqLJj1qqNcanWxislbYKbe2p7VFD1CJH5AMVEVzk3nEOA1eMPXRaU6ADNuPfOY44Pm9w6lvO8s1yrTbJ5eJMEgmrjcBGmEzkWoaoHR9la2eRoMHv0hnu3dVP1lC6voZnkaif9sFCTPTEr4LgEPUoOdaO/7kE22PDj70FeWBW0sVkkzmbVk4YijTPMdPCjr3A0BcMWYL6yR/FCFmdWlcsGYmgIcO7RkLxzYYGcYD/Z73Si/Y3co4DepooQRKveoHdZQJyA4VvmSz2R8/5h1Jpd4MBUGwSWZBPAsySUMBDeS3fRNOkVKFwpkQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=QQ2kfo7NyDf0RDajIvE+rIqhi8x8fQmOx9DdY947RNI=;
 b=C0OgO8ACINiJIK6miR7jbD1bv/YjZVIK6Yw5PnZmakuoiQ1os0I2YijY8fFmXvcjoAaOJMA5uBCmlrm5Q5eqoQVr3xKEvW91BlqrUhqw7egsy1u5eNF/GVAX2hKzaGiSwIo9snp5IuDl0d8/rCFhRbqYyW9GKnt9RCY43xUeI/wUR2fGg+l7yZE3Tw5eHT2bIohblt4B7yVm2UWsOEjCMO1Ql8aHTlkb1cWip9yn89+xGRL0NYcQ9yKhmf1T9gvWVqIB+N5C3S45goSSzY2LO2BHIXvt9nCHTqZ1Zj+AZKK6I56wup57wFIdqt3CDd07EqdUm1N+kXiugjK8qiIlfA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
Date: Tue, 13 Jul 2021 16:23:14 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0009.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2f5d6ffd-4031-44a6-609b-08d94609c13f
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2334:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2334674055AC74253A41CB78B3149@VI1PR0401MB2334.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NKbKsRZpNbyD8DByOrPVV6t3VSXFrlh7Kqi1fcRyXqTDFUuXOKeVFPLZdxCVR5a0GOqZ5/QXr9YmLAq97k7hMrk7+jQAN3FWEJ0OscgqxtzO58RCy2EjBRo8gJazps/B4zCg2ciGdQD8kfMdyLW11Sm7kMJ6kWOIM9IuyQTLkvSf6Ek68z8LbwFH9V7pS3DHaIqCmOmLvKnZksdgz2E8HKxdjK9BnQJtz/xn54YooPS9qFJZLJKyFOYVDnzukSETOduz6yKQwlGaicAA3y4L8g+KIAMcePYe8j+jDkBnuTno2kbfh97zucn5TwLa2ZXLUzcNWVkuRGKZoi/MonaLhgSURSggz/d2SihNlvwbyn2QhPF9pV1VqRX3UGw1eHXQQ+1jaOCntvAgVtjLa/yU8pxjyPaP1g/+2J6qbiOH8AQljOeotWDbU5rHYChck3ZUINHRPUgrutQPy4QWgJOdnsI4iwOFJX4Z+QSCT9Z7t+fJky+w2WImTh1OhEgN3ZVL9fCebKubxk3KqW/B6hmdG9forAgF5cEs8cQnp0M1glZbvWUbxsvdsEynX0KJUhhkC+PmDto8mfYpbLBnwQmcUAHcEMY5ZDhhlw0gcpgG5rOnPfmIek6ANoW/Xwxm10ZcikfUEofX0sEueniy2oI9hJJ+Hpcxmn6B2qpirBe67+Qr6rrw74DbXda67nB2ff/FBdOiKF2H8EMdvZEcQ4GLdu6YKlkFVwyB3WulYm8qjnEbCStgkGU5e8UsEM9NeuwFgHgNFhpaPMQvztO1AQHbwA==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(376002)(366004)(136003)(39850400004)(396003)(53546011)(16576012)(107886003)(478600001)(8936002)(38100700002)(316002)(54906003)(31686004)(8676002)(31696002)(5660300002)(6486002)(186003)(6916009)(2616005)(66556008)(36756003)(86362001)(956004)(66946007)(66476007)(26005)(4326008)(2906002)(98903001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?NgrZBnKo/FImJLbZe/jRHd+iCPsorpJ4dJiUZv/?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 2f5d6ffd-4031-44a6-609b-08d94609c13f
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 14:23:16.2131
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: PXpt8179gc3n3bPCxx2XeUFmjzLaH5wzJkUL7xEu0ZwdVOm8iinrTkwLrCf3CBo/m+wNPqHV/ZWMPp/pVvQZ5Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2334

On 13.07.2021 16:19, Julien Grall wrote:
> On 13/07/2021 15:14, Jan Beulich wrote:
>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>
>> Even that doesn't seem right to me, at least in principle. There shouldn't
>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>> runtime query to the hypervisor would be needed instead.
> 
> Yes, we want to be able to use the same userspace/OS without rebuilding 
> to a specific hypervisor page size.
> 
>> And thinking
>> even more generally, perhaps there could also be mixed (base) page sizes
>> in use at run time, so it may need to be a bit mask which gets returned.
> 
> I am not sure to understand this. Are you saying the hypervisor may use 
> at the same time different page size?

I think so, yes. And I further think the hypervisor could even allow its
guests to do so. There would be a distinction between the granularity at
which RAM gets allocated and the granularity at which page mappings (RAM
or other) can be established. Which yields an environment which I'd say
has no clear "system page size".

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:23:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:23:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155411.286888 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JJv-0003OC-Gq; Tue, 13 Jul 2021 14:23:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155411.286888; Tue, 13 Jul 2021 14:23:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JJv-0003O1-De; Tue, 13 Jul 2021 14:23:35 +0000
Received: by outflank-mailman (input) for mailman id 155411;
 Tue, 13 Jul 2021 14:23:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3JJt-0003NI-V6
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:23:33 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e3ebc9c6-347d-48d4-94b6-77041bf9799a;
 Tue, 13 Jul 2021 14:23:33 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 67C4722890;
 Tue, 13 Jul 2021 14:23:32 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 2CC4313A58;
 Tue, 13 Jul 2021 14:23:32 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id ZLoVCeSh7WBLfgAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 14:23:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e3ebc9c6-347d-48d4-94b6-77041bf9799a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626186212; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=PSubJzN3irHqULkfJ0eXM7ZlsnSW9RzCGDYJLxOrVIg=;
	b=QDjjf2mVZB0DXMdotlqIGZGPSQTPeRyDmMq+39JKZh8FnbUVU0/crWUu6iOXz6qljgcYSQ
	gl0U4/UJs2sMlcZ1FDyzJImEhO/rTTks+17KUsHCq77Lr60ayObhAVEoZsm/2f9AYQTpfB
	10/RLkoER2DcPooLoEz7fN9ao70ymnM=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
Date: Tue, 13 Jul 2021 16:23:31 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="8XwUkfOBqSuhGDe7YLmCnPrumzvcIXzMH"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--8XwUkfOBqSuhGDe7YLmCnPrumzvcIXzMH
Content-Type: multipart/mixed; boundary="hvoPHkx442Sg1VotuwVVHTMpdoZVKm2pu";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
In-Reply-To: <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>

--hvoPHkx442Sg1VotuwVVHTMpdoZVKm2pu
Content-Type: multipart/mixed;
 boundary="------------7D968306B2C63AC5C95627B8"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------7D968306B2C63AC5C95627B8
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 16:19, Julien Grall wrote:
> Hi Jan,
>=20
> On 13/07/2021 15:14, Jan Beulich wrote:
>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*=
=2E
>>
>> Even that doesn't seem right to me, at least in principle. There=20
>> shouldn't
>> be a build time setting when it may vary at runtime. IOW on Arm I thin=
k a
>> runtime query to the hypervisor would be needed instead.
>=20
> Yes, we want to be able to use the same userspace/OS without rebuilding=
=20
> to a specific hypervisor page size.

This define is used for accessing data of other domains. See the define
for XEN_PAGE_SIZE in xen/include/public/io/ring.h

So it should be a constant (minimal) page size for all hypervisors and
guests of an architecture.


Juergen

--------------7D968306B2C63AC5C95627B8
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------7D968306B2C63AC5C95627B8--

--hvoPHkx442Sg1VotuwVVHTMpdoZVKm2pu--

--8XwUkfOBqSuhGDe7YLmCnPrumzvcIXzMH
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtoeMFAwAAAAAACgkQsN6d1ii/Ey81
2Af/Ysy4EBv4ni5G5VrDgGWQVHWZRl8OAdsbZppH6nzFuYCNL3bLR1mC/uCnl/r/QRbUy8myXAfE
m6CvkxXMEXxAZESu7A2MPVFpDiN++vT29Dkh85aOFbkPJx58UsslOEWVlwe85MUs7Syclk1EysWO
neOs+KjoG2P7oQ7k9/69p4/rTEYVnrwX98dmRtYSaFjNxqltSdj/+25RLnhQ9TZVGC5gHBxRS2NH
59YPioWw0AY0DmsaXxVeBzmd78G6md206OLo1MKUZuA6zGu/vN9uTXUp90UizuqBVhFur/n7EW2h
N39Ni6uC3+PXxldBdzrww4pJwC5/zFaihjY6hPhATQ==
=Powl
-----END PGP SIGNATURE-----

--8XwUkfOBqSuhGDe7YLmCnPrumzvcIXzMH--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:28:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:28:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155419.286898 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JOa-0004TS-42; Tue, 13 Jul 2021 14:28:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155419.286898; Tue, 13 Jul 2021 14:28:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JOa-0004TL-0v; Tue, 13 Jul 2021 14:28:24 +0000
Received: by outflank-mailman (input) for mailman id 155419;
 Tue, 13 Jul 2021 14:28:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3JOZ-0004TF-08
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:28:23 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 92e609e9-e3e6-11eb-8766-12813bfff9fa;
 Tue, 13 Jul 2021 14:28:21 +0000 (UTC)
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2051.outbound.protection.outlook.com [104.47.1.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-16-l4Nrf5G4MM-1BbLLU3UmOw-2; Tue, 13 Jul 2021 16:28:20 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5469.eurprd04.prod.outlook.com (2603:10a6:803:cf::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.24; Tue, 13 Jul
 2021 14:28:17 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 14:28:17 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0014.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Tue, 13 Jul 2021 14:28:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 92e609e9-e3e6-11eb-8766-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626186501;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=DznpkMNqZ0ohejiR3qL3nZcQ+XKnW2f7V7/asPvb7o4=;
	b=AGw8xUlFA43DLHnRZNg7yhwQxYT7rpk/co1sX/RVSgqFcHT3GraWlS1VHSrQDv+goJEx2o
	G52GOTP+AhiKXibFeiVAhFIu5y9/ydpF0x8nt11x4iS1m29DSHeXvtTh+G0UJ2zKL+JEMY
	fI4ni5rcnNpV+4JpQwNRXIJdtfJkKPQ=
X-MC-Unique: l4Nrf5G4MM-1BbLLU3UmOw-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gKFOYHhtFd2sYMyppvV+mdeqO30ramvHc6fdAIQYW85WshGy3N9GmWeDWFuPvvcav7GD79Rmt5+VMmrW/tvYNKN+i7ArfiKaetM0P2tHIryO4JYrEVQyaiEZ+PktMWqphLsVO/hLfa/e0yPqS3URB/a39TyKE1tSHOlRawoygtAMFov7dDiwy3mtH0GMEMm/CDryVpuRoA4PsgrATOZmewPS5aaudOm2iAtT+eGY05iOgbf2O6QOVOjpAgZouJ1wTFWkOAo7bNQP+BXVDN9yqngNP0FN0WYnwkLVZNJW/VWFO5jGw2H4WPUOjp6J3ABL/lMb7jSko9crzGfhzZvwWw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DznpkMNqZ0ohejiR3qL3nZcQ+XKnW2f7V7/asPvb7o4=;
 b=YW6nQaBcG6GWMXCx3R9J3h0lykYv+6RFNXw/q/0p4OYsnB/uHaVVf/gD5uzjIP8VLFhwOGyXpZAKSCwH/zYw2YS92Q3s48zAsM6gwi+O5PbhqXbi/AVdzPiJodICCnkovML1Kd7OUxP9PpaHA9B0aLCxsNdLO76TsBoJjh3I7j8n7ZGdhJagMf7cY+3b5P6340X8fty60eMDmcO0ICQZ5BT1hZAGpMOgunVThxSLsDrawSrxYfaKVkSSlsB5LpnWHmD74bok4mrXRDw99WjqvuQsaYk64sU2ALvZqyNxinUNdzGJlJRYSXMgVyFWgTvW2cE4xCpgaAXBQpikoWDcQQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Juergen Gross <jgross@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Julien Grall <julien@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <6ab28be1-3b75-3b17-828b-6a4c6147726e@suse.com>
Date: Tue, 13 Jul 2021 16:28:15 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0014.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::19) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 46a0a21a-d274-4e3e-4990-08d9460a74ab
X-MS-TrafficTypeDiagnostic: VI1PR04MB5469:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5469B162A21CB18719966B3DB3149@VI1PR04MB5469.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Z6h51ViBCZvIlVPJFdGCjC61zaYxs/PpOhytMehW1dyGBircMVJ43T3QnA2ECGTnw361jhLWuBqs8EaVwZE1BM30iDGlxl9gCHWnM735vW7xbkI6gyTdicXl8PE8QMTZh8Rq69omsqeKEokS2JmVVz50iFDQ7OK1Smfw2opqS2Of0INNgwdQSRaSEGrqZYgauKZa9b2YJ8M0O3w3ULO3sLTySm4Iti1tzmZrMO+L5EifwvU3KmPjgspm4VY3WQAH12xE7EoZ8uHh1aoVmnwgDdi51SJ3IzhWSxn7o93PHpecd+g/owmQ5z6OmwHYeWKBsDdD4GfOfb1uTcu5ZqW4k8OBaNQTxkDiigPgUMRC3dvSZ36fm4U6cwWTQRY4W6Yz+B4vNqYgNiSL/m57PTVWWvJFt22qJ5fS3vPj5vGG9DaoyoWdyETBepR6U6ChSneXhDOH2b2N/+F5d+5hKH28gGNeY6iG9090hECzBOWkiLnysq9/wcYXsRFO0dPeEkeMY+8YsIHjx6MKNu4EKG4E2PyRKvsBjqEdK7mgsB6oV0EHSdK9jM8ocLxFMjOofBErSwv1X+ZTsONcFEohO79G6CnyhhfzzPct8/DAUL+26jTAoJ1cBaWFzvRyMRXoTBsEg5nMUJ9eFGd+X9ugPH5N6nVdMjY+edydGuERRGtNFZEjYCN3pbqa5j4wihJSwVDWw8688AW1OTgamkLGNQqlWQH1BoMgdXUmspmxUrFa9YaFL6wMJmr/oOPsqIq94BxOoewREO4wF7Jt8HSpJsgTPQ==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39850400004)(366004)(346002)(376002)(396003)(31696002)(83380400001)(53546011)(36756003)(86362001)(186003)(37006003)(2906002)(4326008)(478600001)(38100700002)(6862004)(31686004)(956004)(6486002)(66946007)(26005)(66476007)(8936002)(66556008)(8676002)(6636002)(16576012)(316002)(54906003)(2616005)(5660300002)(98903001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?ZHNyT1lPNUpCaEtkcWVsbXBnaDJXZUVoQkpReWRlNmRQWkRaOUVQQ2ZpbEFD?=
 =?utf-8?B?aHlHbVdZZjdkNGMwQ0dpR2lwUkdTc3RyOUVGcGNNc21BY0ZoSWZ2b0JDeHND?=
 =?utf-8?B?T213YW9EVjJ0YzlUQ05rZTByeDFFWkRBMDAxdER3OUI0bURKOGFmSnp1SWJZ?=
 =?utf-8?B?cll5MitLTVQzcE9paFI3WnZ0ODlVdVdSZTRyOWJISHdudDYvenU0aWdlb25v?=
 =?utf-8?B?NnY5dkhDdW14c1ZnSWxsZWhrL2Foc0g1NjdGT214OUZlR0svdjVPVjBTVXNQ?=
 =?utf-8?B?d0VBRFJHSE50T1ZWdEtIME1kQXl1OGlFa3dPUGtNUjJVVWN5S0RrY09UOTAv?=
 =?utf-8?B?eGY1b3dyMEhoSEFyMGprQ3orMk1raEtoalZ0ZGFKdWlsZmJ6bFNpN2dlVzlG?=
 =?utf-8?B?UGxaSURQZFdGdDdaT0FQVFZRTktyUmZsUFp6VjdFYzh1U3FKMWwwN0xBekVC?=
 =?utf-8?B?UFlRZFpaNzFFWFJuazQxM2Q0M1VPa2ZvdXV2K09OQ3d2MU5za24yVXFGeTdw?=
 =?utf-8?B?RFNoMWJ6WU1vdFBQa3FBQVNxSFIxK0lXaEFDQUJDMldWM3Q5Wm8wM1BhQ2M2?=
 =?utf-8?B?SG56WE1nR1VFR3Y2TFBhRFBlZ2lDNTNrMzIxSSs2UlhxSEhSSXVqKzNFMHFC?=
 =?utf-8?B?dUIwYjJXS3h3dWRscVBGOHBwRlJJWTF1TDBadnl6THZ0ZE5iY2ZCMzFMeHo2?=
 =?utf-8?B?UnUzODN2dHNpc3FMbDlVOXF3MlJWcnNYRWRQTnA3cHlSZ0JDc0xZbkdYTElu?=
 =?utf-8?B?aDZvVks3R3dGVWRsbVZSblJJa0c1NWZxR0JOQndtNU1mcUo0NkM0N1BGWE9t?=
 =?utf-8?B?T2JZcmhpRUFVTXcrc2MvRkpscDhXMFYyOEdjWlRUWFUzWmIwSEREMzZ3akY1?=
 =?utf-8?B?M1FWdkpRbXcrM3o3MHo1MVFOVzdiU1E5eFdwRWdDdUJEeHN2OUc2ZzNMeEVo?=
 =?utf-8?B?UXcrZlgwc285R0tCM0NNOU8rRnZVd21mNVhQbys3TktHbWJYNUtDSlFvTlhR?=
 =?utf-8?B?NnZjZ09jQ21yWEQ3TWVBREY4YW9MMXV0T3lZNDNHMVZCaDN6UWJsa3RCSEZQ?=
 =?utf-8?B?ZlFQRHVMTmNsSE85b2t2Q0RsbGdlUWEwNHpvTUZ3VjlER1A4bzVpYW1lcUUw?=
 =?utf-8?B?MWhLMVU1OC83TWQxV3ZXUWRVUFZvd0RxMk8yWlNnMDVXUUFUcjlvN29mQmdj?=
 =?utf-8?B?N1FBL3hYWlc5dEhqQ0ZDQ0FGd3B3aHIxbWhQZjhQVzVobThVd0ZySTJMV2M0?=
 =?utf-8?B?ZTdjaWQ1VjBudGxXY3BNRGxOelk4YmRCZm4ydFE0bTBHVzlYOHVtQzJKclRo?=
 =?utf-8?B?WEtXRXl3Rmt2QUdhSTV3cnNHbnNLR2ZvM2o1YVByVmpuaGlnbHV4ek9vNVp5?=
 =?utf-8?B?NEtkVERHcEJGdnFBaG15by9sREl2RTI3NGdhVGF5aFBiWGZMVDFSTmo1M2dG?=
 =?utf-8?B?MjVmdlNwQ0FieFUzdE94TU5odS8vUkZjLzZna1BsT1JPaGVWRWFoUlhUNVFx?=
 =?utf-8?B?NmpEOFlmRWN0bkVRcFVCZkMzN3FMY1AyRU9kd0NFdVc4NnFEMitHSlREN1Fx?=
 =?utf-8?B?N1lnYm1pTEo2dDVMU1Q0dG95VkxxbkJLaURoS3FBUkx4SGtmdW1oSnluTWt6?=
 =?utf-8?B?bkdQYlRvRjEyeDBtM3hpZ0VvNXE4eHVXLzhDejBUODVoZ1h5Y3REK1lKNDFR?=
 =?utf-8?B?SHJhSWx0S1pxVUdZbUIwblF5ZFB0eDVoMi9mQWNJb0N0MjF5cmV1V0Fjbm5x?=
 =?utf-8?Q?8SciPp4isw2X72wd04G2PzfllOnSPsozQaQ3HaM?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 46a0a21a-d274-4e3e-4990-08d9460a74ab
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 14:28:17.1805
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lNgH1zjxDbyw/JOOTi8DkXTK/8/pQsRe+S2z9R8Fgvt/SUM6pMVbxqCZwthWwHDnxUpWx879rD5Y/y3XEM0W7Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5469

On 13.07.2021 16:23, Juergen Gross wrote:
> On 13.07.21 16:19, Julien Grall wrote:
>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>
>>> Even that doesn't seem right to me, at least in principle. There 
>>> shouldn't
>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>> runtime query to the hypervisor would be needed instead.
>>
>> Yes, we want to be able to use the same userspace/OS without rebuilding 
>> to a specific hypervisor page size.
> 
> This define is used for accessing data of other domains. See the define
> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
> 
> So it should be a constant (minimal) page size for all hypervisors and
> guests of an architecture.

But that's only because of limitations baked into ring.h. For example,
a grant shouldn't be (address,attributes), but (address,order,attributes).
A frontend running in an OS with 16k page size could then still announce
a single ring "page", and a backend running in an OS with 4k page size
would still have no trouble mapping that ring. (The other way around
would of course get more interesting.)

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:33:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:33:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155424.286909 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JTT-0005qJ-ND; Tue, 13 Jul 2021 14:33:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155424.286909; Tue, 13 Jul 2021 14:33:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JTT-0005qC-K7; Tue, 13 Jul 2021 14:33:27 +0000
Received: by outflank-mailman (input) for mailman id 155424;
 Tue, 13 Jul 2021 14:33:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3JTS-0005q6-0p
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:33:26 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1f84c1b7-7df0-46cf-8aee-275083a820e7;
 Tue, 13 Jul 2021 14:33:25 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 7373E22837;
 Tue, 13 Jul 2021 14:33:24 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 36D2813A5A;
 Tue, 13 Jul 2021 14:33:24 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id lSjICzSk7WATAwAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 14:33:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1f84c1b7-7df0-46cf-8aee-275083a820e7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626186804; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=hGPyn4B+UdaB2vduktnP6jj4T80ZQa+xfoh4D5FMKlQ=;
	b=KxTzAtv9mWIVuGWLGGThz0Q0/CoSyFl9Rzn+Dk6MJxBYGY+2Csr+EiS1HJfLv81RVX7wGF
	jjbnXPW6vnKYUmzrzcEEGO7fEA9rr/KvaNmN2HU9xEpCLY+wCGV+5qLg0tFFCq4l/vB1T4
	0JKNs86Yt+Ek95Vk3HhvLZDmLRxXF2c=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Julien Grall <julien@xen.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <6ab28be1-3b75-3b17-828b-6a4c6147726e@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <1475856f-276e-49f9-f6b5-7c76b2932393@suse.com>
Date: Tue, 13 Jul 2021 16:33:23 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <6ab28be1-3b75-3b17-828b-6a4c6147726e@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="GHilLac9at5xnaUQcbzvfyU6y8OY5506y"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--GHilLac9at5xnaUQcbzvfyU6y8OY5506y
Content-Type: multipart/mixed; boundary="a4rfSGmAyrEGEJKKDARG5SPcFaCQSWTW7";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Julien Grall <julien@xen.org>
Message-ID: <1475856f-276e-49f9-f6b5-7c76b2932393@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <6ab28be1-3b75-3b17-828b-6a4c6147726e@suse.com>
In-Reply-To: <6ab28be1-3b75-3b17-828b-6a4c6147726e@suse.com>

--a4rfSGmAyrEGEJKKDARG5SPcFaCQSWTW7
Content-Type: multipart/mixed;
 boundary="------------9C8360CFC2575F1E06A98579"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------9C8360CFC2575F1E06A98579
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 16:28, Jan Beulich wrote:
> On 13.07.2021 16:23, Juergen Gross wrote:
>> On 13.07.21 16:19, Julien Grall wrote:
>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE=
_*.
>>>>
>>>> Even that doesn't seem right to me, at least in principle. There
>>>> shouldn't
>>>> be a build time setting when it may vary at runtime. IOW on Arm I th=
ink a
>>>> runtime query to the hypervisor would be needed instead.
>>>
>>> Yes, we want to be able to use the same userspace/OS without rebuildi=
ng
>>> to a specific hypervisor page size.
>>
>> This define is used for accessing data of other domains. See the defin=
e
>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>
>> So it should be a constant (minimal) page size for all hypervisors and=

>> guests of an architecture.
>=20
> But that's only because of limitations baked into ring.h. For example,
> a grant shouldn't be (address,attributes), but (address,order,attribute=
s).
> A frontend running in an OS with 16k page size could then still announc=
e
> a single ring "page", and a backend running in an OS with 4k page size
> would still have no trouble mapping that ring. (The other way around
> would of course get more interesting.)

Right. The current interfaces don't provide this ability. For those the
minimal size is "the right thing" IMO.


Juergen


--------------9C8360CFC2575F1E06A98579
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------9C8360CFC2575F1E06A98579--

--a4rfSGmAyrEGEJKKDARG5SPcFaCQSWTW7--

--GHilLac9at5xnaUQcbzvfyU6y8OY5506y
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtpDMFAwAAAAAACgkQsN6d1ii/Ey/G
TAf/TO87ikLG0qjBBMQ/Ph2+A+wDvZdwyWj5jwxy4CuBs2vdjgrjtUaHJ93HeI94hNii7p6c9o0Y
Ia9ryRvT/P3BltJ3GdQZGVnMc/FeIBG+rt90iYUa4/NeXpQv+0xU6iWY+RadsJcJhx6iMxKqX7Gx
DFkdihU/61BdiPPAE2dx/hJLNTAAdct2iYkEfvL41U0t9rDwWBYFbexOt5cM3rIzuzhk2dtG78qN
QCPT3j+seveij+WUEWJpt9e4izgvDPpkds0vNXNJMIiAi4bLHdp30Ufu6SmetkSZWlR1+lKZp8J0
M2T0yjzQk48BzJK4LJ17+x49x8L/JmYPX8m5FwJavw==
=FWQV
-----END PGP SIGNATURE-----

--GHilLac9at5xnaUQcbzvfyU6y8OY5506y--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:33:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:33:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155425.286921 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JTf-0006Aw-2e; Tue, 13 Jul 2021 14:33:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155425.286921; Tue, 13 Jul 2021 14:33:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JTe-0006An-Vm; Tue, 13 Jul 2021 14:33:38 +0000
Received: by outflank-mailman (input) for mailman id 155425;
 Tue, 13 Jul 2021 14:33:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3JTd-0006AD-LK
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:33:37 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3JTZ-0007DW-MG; Tue, 13 Jul 2021 14:33:33 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3JTZ-00053a-FV; Tue, 13 Jul 2021 14:33:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Z1OgfnxVesMF5jM15whSji2FNIAfCZyjuJZmhA6cW7U=; b=kt9OT7fRiKNg2pET5jmjgl4uqu
	A93hc6zicJNRXGt3R/C8EPWJ7/efPsoR406ZivdMO44YG5z3yYIRW3VjPbEKtDfyHzpKlh6HSWtew
	crPaZTt1E1fnWLeQ3ZakleHDOWdJsZo8LKshPqhAE2U2bx8NYXGY7V0Nz3cMHI9Kwoqg=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
Date: Tue, 13 Jul 2021 15:33:31 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 13/07/2021 15:23, Jan Beulich wrote:
> On 13.07.2021 16:19, Julien Grall wrote:
>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>
>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>> runtime query to the hypervisor would be needed instead.
>>
>> Yes, we want to be able to use the same userspace/OS without rebuilding
>> to a specific hypervisor page size.
>>
>>> And thinking
>>> even more generally, perhaps there could also be mixed (base) page sizes
>>> in use at run time, so it may need to be a bit mask which gets returned.
>>
>> I am not sure to understand this. Are you saying the hypervisor may use
>> at the same time different page size?
> 
> I think so, yes. And I further think the hypervisor could even allow its
> guests to do so.

This is already the case on Arm. We need to differentiate between the 
page size used by the guest and the one used by Xen for the stage-2 page 
table (what you call EPT on x86).

In this case, we are talking about the page size used by the hypervisor 
to configure the stage-2 page table

> There would be a distinction between the granularity at
> which RAM gets allocated and the granularity at which page mappings (RAM
> or other) can be established. Which yields an environment which I'd say
> has no clear "system page size".

I don't quite understand why you would allocate and etablish the memory 
with a different page size in the hypervisor. Can you give an example?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:35:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:35:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155434.286932 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JVR-00076G-Fl; Tue, 13 Jul 2021 14:35:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155434.286932; Tue, 13 Jul 2021 14:35:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JVR-000769-Ch; Tue, 13 Jul 2021 14:35:29 +0000
Received: by outflank-mailman (input) for mailman id 155434;
 Tue, 13 Jul 2021 14:35:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=A8l0=MF=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m3JVP-00075k-C6
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:35:27 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8feed2a0-e3e7-11eb-8769-12813bfff9fa;
 Tue, 13 Jul 2021 14:35:26 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8feed2a0-e3e7-11eb-8769-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626186925;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=5XNp7hPH+qgdc7zi0i+5iA7KippVl8+xbGSipe7kON0=;
  b=bPLinRGgwwZa2/T6oru35EmC0tmXQ6aim3JgBDjdfr9CqPpn47IaGU8X
   rGcpjyHw2Oe/exJDXkbZHzdtItfnTmUhzRo08aLFkiHA8opJP6MTCEbK1
   heQq2m1USSUMFyL5qoSr3YTsQIiHP/K1ZMxt7LdDz+qMUZ+2/qRvdFo+p
   g=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: JoMCBYI15a+j4WB/zUlO/EGuzfPHYN2ZV6EFfZUWZn13E5bKRDvrvquwHyVYG7vji1TsOyy6s7
 U+lDPSC10URGrbk498gCDkEogTIMMoaiiZh/Le0CiviOivSBS9LnDIZX9EAiIgVGp2a1oOzq4n
 FOy0Q4XSB8b/sewkK8ovSo9zNkTxilzKGhzdhovfEs051SxNtcwAaSuiYi+FV+JwjXwS/NC0pj
 wqqA/DtmbZ7USfunoiAHjbKdlMonydspkiYOcl2/U7Srido5jj9heG1IKpbMCOK/1Zn5aHYB4O
 ARA=
X-SBRS: 5.1
X-MesageID: 49810425
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:WbM86qMNgEhhZcBcTqKjsMiBIKoaSvp037BL7SBMoHluGfBw+P
 rCoB1273XJYVUqOU3I5+ruBEDoexq1yXcf2+Us1NmZMjXbhA==
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="49810425"
Date: Tue, 13 Jul 2021 15:35:22 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 12/31] build: use subdir-y in test/Makefile
Message-ID: <YO2kqruG8fejtDYl@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-13-anthony.perard@citrix.com>
 <b93fcbc5-8b4f-7d17-7d0a-cd2cbf6fd2fe@suse.com> <YOxeI1Bn1nxNMjb2@perard>
 <65edfaec-4525-c3ff-3658-1088e4b65f9d@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <65edfaec-4525-c3ff-3658-1088e4b65f9d@suse.com>

On Tue, Jul 13, 2021 at 09:41:03AM +0200, Jan Beulich wrote:
> On 12.07.2021 17:22, Anthony PERARD wrote:
> > On Wed, Jul 07, 2021 at 05:26:13PM +0200, Jan Beulich wrote:
> >> On 01.07.2021 16:09, Anthony PERARD wrote:
> >>> --- a/xen/test/Makefile
> >>> +++ b/xen/test/Makefile
> >>> @@ -4,15 +4,10 @@ tests all: build
> >>>  
> >>>  ifneq ($(XEN_TARGET_ARCH),x86_32)
> >>>  # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
> >>> -SUBDIRS += livepatch
> >>> +subdir-y += livepatch
> >>>  endif
> >>
> >> As per xen/Rules.mk having
> >>
> >> subdir-y := $(subdir-y) $(filter %/, $(obj-y))
> >> obj-y    := $(patsubst %/, %/built_in.o, $(obj-y))
> >> ...
> >> subdir-obj-y := $(filter %/built_in.o, $(obj-y))
> >>
> >> this will result in building of livepatch/built_in.o afaict. Is
> >> this an intended but benign side effect?
> > 
> > Actually, nothing in Rules.mk is using $(subdir-y) other than updating
> > it with possible subdir from $(obj-y).
> > Recursion into a subdir only happen if it is listed in $(obj-y) and thus
> > should be part of a built_in.o. Rules.mk doesn't have a mean to recurs
> > otherwise.
> > 
> > So nothing is actually going to try to build livepatch/build_in.o due to
> > $(subdir-y).
> 
> Question then is: Isn't this actually a bug?

No, "obj-y += livepatch/" need to be used instead, to build "livepatch/built_in.o".
Because "$(obj-y)" are objects to be included in a "built_in.o".

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:36:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:36:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155440.286943 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JWb-0007rA-Qy; Tue, 13 Jul 2021 14:36:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155440.286943; Tue, 13 Jul 2021 14:36:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JWb-0007r3-Mz; Tue, 13 Jul 2021 14:36:41 +0000
Received: by outflank-mailman (input) for mailman id 155440;
 Tue, 13 Jul 2021 14:36:40 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3JWa-0007qt-El; Tue, 13 Jul 2021 14:36:40 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3JWa-0007Gq-7q; Tue, 13 Jul 2021 14:36:40 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3JWZ-0007NX-UQ; Tue, 13 Jul 2021 14:36:40 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3JWZ-00041Y-Tv; Tue, 13 Jul 2021 14:36:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=TsASGaSt48SRzqZEPPkzKjr4+Acn3MYyVo82OHDDo9A=; b=tkhopYdsgrvN/2StRkEbmGEwnU
	7Rf+hnTp60k2de3vBghijIO7GxNYJ3bttkvxf7l+353/Vlx5V/tJl4+ZRfKA2Ry9s7Buf//mWgOkJ
	Bxllfup0Xl6EFmAS4ei7PDHkgnY4JpK7wchOOfR8F4UX3fjilnx1VRSACCVZcNRUuLT4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163632-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163632: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 14:36:39 +0000

flight 163632 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163632/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat  fail pass in 163610

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    4 days
Testing same since   163478  2021-07-09 15:23:45 Z    3 days    8 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:38:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:38:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155446.286957 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JXz-00005a-BU; Tue, 13 Jul 2021 14:38:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155446.286957; Tue, 13 Jul 2021 14:38:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3JXz-00005S-7C; Tue, 13 Jul 2021 14:38:07 +0000
Received: by outflank-mailman (input) for mailman id 155446;
 Tue, 13 Jul 2021 14:38:06 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3JXy-00004z-69
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:38:06 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3JXv-0007IB-AX; Tue, 13 Jul 2021 14:38:03 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3JXv-0005J1-4s; Tue, 13 Jul 2021 14:38:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=4Y7jt1ktPkJzY0CSwfcz5djnI8YxTaVdzE/nVOnBpcM=; b=qcgrORYAgDzEHwj44Q+T30XHK/
	JsmtMKN3+fS6XU2o2ZF3arpPpSqryftk84jmrCqqEA56xH4MdP6+l3BecfwWwhLdVYbN2gNAtyH1i
	3TiUm6RNDmdM5MqOmMm6jg4mj9hRGGzh1f439zwvJoa0OG6edvvJ4wypPRtQVSwT2/as=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Juergen Gross <jgross@suse.com>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
Date: Tue, 13 Jul 2021 15:38:01 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Juergen,

On 13/07/2021 15:23, Juergen Gross wrote:
> On 13.07.21 16:19, Julien Grall wrote:
>> Hi Jan,
>>
>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>
>>> Even that doesn't seem right to me, at least in principle. There 
>>> shouldn't
>>> be a build time setting when it may vary at runtime. IOW on Arm I 
>>> think a
>>> runtime query to the hypervisor would be needed instead.
>>
>> Yes, we want to be able to use the same userspace/OS without 
>> rebuilding to a specific hypervisor page size.
> 
> This define is used for accessing data of other domains. See the define
> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
> 
> So it should be a constant (minimal) page size for all hypervisors and
> guests of an architecture.

Do you mean the maximum rather than minimal? If you use the minimal 
(4KB), then you would not be able to map the page in the stage-2 if the 
hypervisor is using 64KB.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 14:58:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 14:58:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155455.286968 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Jrm-0002gq-0g; Tue, 13 Jul 2021 14:58:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155455.286968; Tue, 13 Jul 2021 14:58:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Jrl-0002gj-TR; Tue, 13 Jul 2021 14:58:33 +0000
Received: by outflank-mailman (input) for mailman id 155455;
 Tue, 13 Jul 2021 14:58:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=A8l0=MF=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m3Jrk-0002gd-6n
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 14:58:32 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5bdf917e-2927-499f-838d-3964e6969f9b;
 Tue, 13 Jul 2021 14:58:30 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5bdf917e-2927-499f-838d-3964e6969f9b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626188310;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=RZMpCbqD5drMfUio+HAs5niwWvaS/B493xQBUNIla0o=;
  b=VKPk2d9vUyWVPHKvKnqJedti7sUKR31zFPtfzs3wtY37clGvqUnG3MsE
   mtUNFeeZxAyodvL4ahhTK8lMIqWTVOJDcioYHZCWhCm6hR49zDcNGwiQ8
   DUBCmqxctDHUhZRpwLJg+rwtBQQTO6YGYITZ57/8pUW3HCqman+mBMsNh
   Y=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: drYYIWQU6jP0kFVdig1/onAD4lTM0PqCNoWy2ZORMVmc3GPZiP1Dl2lBf0nha2bYA1gT81mIWu
 BGtOApQqi2ThYLYA1OhMTDVqCKc6VxFBL/XyfwdpA4BnA1zBuDcqD0f0gYIneYeVRkXvNzSjGb
 jIpc2+Ma3jk5zQ7Ylga9oD4o+tfLkIl8GO2F73yApnKxP9aI+McIjfll06urNeM5RTtT3PEH/z
 98K4lINIuLkZtEkceeNlI/C1i/r3hLB80Wil30o/DCasS5aDIfxQsXB+KGUavR/piBJ+9r+oGo
 RwQ=
X-SBRS: 5.1
X-MesageID: 47866055
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:3ocXg6hgXK7alHLTgJEt6h8tsnBQXtgji2hC6mlwRA09TySZ//
 rOoB0+726StN9xYgBFpTnuAsW9qB/nmqKdpLNhW4tKPzOW3VdATrsSjrcKqgeIc0aVm9K1l5
 0QEZSWYOeAdGSS5vyb3ODXKbgd/OU=
X-IronPort-AV: E=Sophos;i="5.84,236,1620705600"; 
   d="scan'208";a="47866055"
Date: Tue, 13 Jul 2021 15:58:25 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v6 17/31] build: convert binfile use to if_changed
Message-ID: <YO2qEaFOMVM3xvkO@perard>
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-18-anthony.perard@citrix.com>
 <dbb33a01-d54b-d4f3-caf3-5e5544d52095@suse.com> <YOxurzTEAfW3I8yU@perard>
 <ddc38760-c042-febb-822f-560a4b613e91@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <ddc38760-c042-febb-822f-560a4b613e91@suse.com>

On Tue, Jul 13, 2021 at 09:51:45AM +0200, Jan Beulich wrote:
> On 12.07.2021 18:32, Anthony PERARD wrote:
> > On Wed, Jul 07, 2021 at 05:48:57PM +0200, Jan Beulich wrote:
> >> On 01.07.2021 16:09, Anthony PERARD wrote:
> >>> --- a/xen/common/Makefile
> >>> +++ b/xen/common/Makefile
> >>> @@ -80,8 +80,12 @@ config.gz: $(CONF_FILE)
> >>>  
> >>>  config_data.o: config.gz
> >>>  
> >>> -config_data.S: $(BASEDIR)/tools/binfile
> >>> -	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
> >>> +quiet_cmd_binfile = BINFILE $@
> >>> +cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data
> >>
> >> This is an abuse of $< which I consider overly confusing:
> >> $(BASEDIR)/tools/binfile is not the input file to the rule. Instead
> >> the script generates an assembly file "out of thin air", with not
> >> input files at all. The rule and ...
> >>
> >>> +config_data.S: $(BASEDIR)/tools/binfile FORCE
> >>
> >> ... dependency shouldn't give a different impression. What would
> >> be nice (without having checked how difficult this might be) would
> >> be if quiet_cmd_binfile and cmd_binfile could move to xen/Rules.mk
> >> and merely be used from here (and the other location, where the
> >> same concern obviously applies).
> > 
> > I've though of having cmd_binfile in Rules.mk, but it's made more
> > complicated by having a "-i" flag used in flask/.
> > 
> > So one things I've writen was:
> > 
> > config_data.S: $(BASEDIR)/tools/binfile FORCE
> >        $(call if_changed,binfile,,config.gz xen_config_data)
> > flask-policy.S: $(BASEDIR)/tools/binfile FORCE
> >        $(call if_changed,binfile,-i,policy.bin xsm_flask_init_policy)
> > 
> > with:
> > cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(2) $@ $(3)
> > 
> > I thought this would be confusing, so I avoid it.
> 
> Indeed that's why I did write "without having checked how difficult
> this might be", because I definitely didn't want to suggest such
> anomalies to get introduced. It's unhelpful that options have to
> come first.
> 
> > But maybe with the lists of flags at the end, it would be better:
> >    $(call if_changed,binfile,policy.bin xsm_flask_init_policy,-i)
> 
> Yes, this is a little better imo, but still not pretty.
> 
> > Still want to move cmd_binfile to Rules.mk?
> 
> I'd still like it to be moved, but without resulting in a rule
> that's not consistent with others. Maybe we should have a
> BINFILE_FLAGS variable (paralleling e.g. CFLAGS)?

Sound good.

    cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)

    flask-policy.S: BINFILE_FLAGS := -i
    flask-policy.S: $(BASEDIR)/tools/binfile FORCE
           $(call if_changed,binfile,policy.bin xsm_flask_init_policy)

Would the above be OK?
Otherwise, maybe you'll prefer the following:

    flask-policy.S: BINFILE_FLAGS = -i $@ policy.bin xsm_flask_init_policy
    flask-policy.S: $(BASEDIR)/tools/binfile FORCE
           $(call if_changed,binfile)

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 15:09:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 15:09:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155460.286979 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3K2d-0004Gx-1d; Tue, 13 Jul 2021 15:09:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155460.286979; Tue, 13 Jul 2021 15:09:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3K2c-0004Gq-U5; Tue, 13 Jul 2021 15:09:46 +0000
Received: by outflank-mailman (input) for mailman id 155460;
 Tue, 13 Jul 2021 15:09:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3K2b-0004Gh-KY
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 15:09:45 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 59f3840d-e3ec-11eb-8770-12813bfff9fa;
 Tue, 13 Jul 2021 15:09:44 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 208FE201F5;
 Tue, 13 Jul 2021 15:09:43 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id D180313A5D;
 Tue, 13 Jul 2021 15:09:42 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id bPjQMbas7WAfEAAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 15:09:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 59f3840d-e3ec-11eb-8770-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626188983; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=28uLKl2AaulOAU1cviaKzK4VHArehXLuMrftITCUqBI=;
	b=ngPHa5hM8rfEjdSu5ia5uRm1lW6NNnxuMQizbNQxeohP/15LJdVriT1ETUb59OyX//BR1i
	LA+TXMq/atVsZZ4jhsww32UUB174spJHfbVk/Q0Ed2e2f54VBVffklDikSYPc+1GrCT1Mq
	EM5F1/KShLuQkw+txBd1mZXRE7KLImM=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
Date: Tue, 13 Jul 2021 17:09:42 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="wBDReZjgVz7ESAQ0DWulygyjkhupS7V34"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--wBDReZjgVz7ESAQ0DWulygyjkhupS7V34
Content-Type: multipart/mixed; boundary="p5tm4OmIRJrbZWSCKJ8RBaen12QOYVy3J";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
In-Reply-To: <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>

--p5tm4OmIRJrbZWSCKJ8RBaen12QOYVy3J
Content-Type: multipart/mixed;
 boundary="------------04EAB4319125C7A031A6B53F"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------04EAB4319125C7A031A6B53F
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 16:38, Julien Grall wrote:
> Hi Juergen,
>=20
> On 13/07/2021 15:23, Juergen Gross wrote:
>> On 13.07.21 16:19, Julien Grall wrote:
>>> Hi Jan,
>>>
>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE=
_*.
>>>>
>>>> Even that doesn't seem right to me, at least in principle. There=20
>>>> shouldn't
>>>> be a build time setting when it may vary at runtime. IOW on Arm I=20
>>>> think a
>>>> runtime query to the hypervisor would be needed instead.
>>>
>>> Yes, we want to be able to use the same userspace/OS without=20
>>> rebuilding to a specific hypervisor page size.
>>
>> This define is used for accessing data of other domains. See the defin=
e
>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>
>> So it should be a constant (minimal) page size for all hypervisors and=

>> guests of an architecture.
>=20
> Do you mean the maximum rather than minimal? If you use the minimal=20
> (4KB), then you would not be able to map the page in the stage-2 if the=
=20
> hypervisor is using 64KB.

But this would mean that the current solution to use XC_PAGE_SIZE is
wrong, as this is 4k.


Juergen


--------------04EAB4319125C7A031A6B53F
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------04EAB4319125C7A031A6B53F--

--p5tm4OmIRJrbZWSCKJ8RBaen12QOYVy3J--

--wBDReZjgVz7ESAQ0DWulygyjkhupS7V34
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtrLYFAwAAAAAACgkQsN6d1ii/Ey+h
Rwf/Rfm1tzuWMSjc5z3TvOIj+1z1KCIX+RvkTgmi4CO1H5Q2t9mA+I+O+I1e2nEIMJNx0BZRLRnA
xIaQrevL5c48ZMQB7VD9jYbz4aL6MuRCJ95sU6IB8zCDi3QNQ2ow3TimaGSYme4be5dQ4SJaT/Ve
aHtcKKCQ0zupHhibD++7ZjgVe5B2rOZ6EV72dZLMOHmTssPpjfRMckNYtIURYimFiV7zJzmtMClf
aqhoH7m92J2Drwrb4J0cvRH3rHuo2qNpYq4CqSr3Ph2NQjF4uAduiUii/ttRh/KdEgq9u8Aihxw1
p51mVpz4dxwMDjsVlvTBK1YJABcPCowOzVZIV7abeA==
=4mXw
-----END PGP SIGNATURE-----

--wBDReZjgVz7ESAQ0DWulygyjkhupS7V34--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 15:16:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 15:16:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155465.286990 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3K8f-0005hx-Md; Tue, 13 Jul 2021 15:16:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155465.286990; Tue, 13 Jul 2021 15:16:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3K8f-0005hq-JM; Tue, 13 Jul 2021 15:16:01 +0000
Received: by outflank-mailman (input) for mailman id 155465;
 Tue, 13 Jul 2021 15:16:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3K8f-0005hI-8a
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 15:16:01 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3K8a-0007xM-Tw; Tue, 13 Jul 2021 15:15:56 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3K8a-0007VB-Mn; Tue, 13 Jul 2021 15:15:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=83DVCQtIzPbN/ken9uYkOE1EsFwq13Zl6+swGYXNp0E=; b=wdqqw2CUYVMiBKnJ/UvabE1ysj
	uP0K6opmhc9YELyiYFqzzU9LzKijNYd1b8pfY93OgSZawkIcTLIF9x30PYBfUO9h7M3Oug+shUFhZ
	5UqBLBQ7dX7f/LMDjWQ4K3gAoc/X3d8ET8LbmeIzr6ih3GF2fjy+BvSlX4BnuJw+fxAg=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Juergen Gross <jgross@suse.com>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
 <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
Date: Tue, 13 Jul 2021 16:15:54 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Juergen,

On 13/07/2021 16:09, Juergen Gross wrote:
> On 13.07.21 16:38, Julien Grall wrote:
>> Hi Juergen,
>>
>> On 13/07/2021 15:23, Juergen Gross wrote:
>>> On 13.07.21 16:19, Julien Grall wrote:
>>>> Hi Jan,
>>>>
>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>> And I don't think it should be named XC_PAGE_*, but rather 
>>>>>> XEN_PAGE_*.
>>>>>
>>>>> Even that doesn't seem right to me, at least in principle. There 
>>>>> shouldn't
>>>>> be a build time setting when it may vary at runtime. IOW on Arm I 
>>>>> think a
>>>>> runtime query to the hypervisor would be needed instead.
>>>>
>>>> Yes, we want to be able to use the same userspace/OS without 
>>>> rebuilding to a specific hypervisor page size.
>>>
>>> This define is used for accessing data of other domains. See the define
>>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>>
>>> So it should be a constant (minimal) page size for all hypervisors and
>>> guests of an architecture.
>>
>> Do you mean the maximum rather than minimal? If you use the minimal 
>> (4KB), then you would not be able to map the page in the stage-2 if 
>> the hypervisor is using 64KB.
> 
> But this would mean that the current solution to use XC_PAGE_SIZE is
> wrong, as this is 4k.

The existing ABI is implicitely based on using the hypervisor page 
granularity (currently 4KB).

There is really no way we can support existing guest on 64KB hypervisor. 
But if we were going to break them, then we should consider to do one of 
the following option:
    1) use 64KB page granularity for ABI
    2) query the hypervisor page granularity at runtime

The ideal is 2) because it is more scalable for the future. We also need 
to consider to extend the PV protocol so the backend and frontend can 
agree on the page size.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 15:20:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 15:20:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155477.287001 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3KDF-0007FI-9A; Tue, 13 Jul 2021 15:20:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155477.287001; Tue, 13 Jul 2021 15:20:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3KDF-0007FB-5C; Tue, 13 Jul 2021 15:20:45 +0000
Received: by outflank-mailman (input) for mailman id 155477;
 Tue, 13 Jul 2021 15:20:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+3sG=MF=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m3KDE-0007F5-DT
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 15:20:44 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ac34fe78-8dd2-49f7-9854-ad224bf67590;
 Tue, 13 Jul 2021 15:20:43 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 74FE62287E;
 Tue, 13 Jul 2021 15:20:42 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 383D213A5D;
 Tue, 13 Jul 2021 15:20:42 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id /uvOC0qv7WARFAAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 13 Jul 2021 15:20:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ac34fe78-8dd2-49f7-9854-ad224bf67590
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626189642; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=gR5bqz+wSeIF9u3YneTgsLIBC29UB9Z6ixAunk7BI50=;
	b=SIIH8e84Ci4ZS6no30RYiAWiw94N1TinmPXyEMQ2BvAoSC8gZHoWQDlp5TwU2TKUFCRALC
	oAs9DM6YSYbUeSJzFJ6cfmMBEaCawPqW/yvzEZ2KVKHqs5sRk+Fb4njRkJKHTqNq77+Syi
	PD5ZMKNehOuVXcjOaJMn5Bn8XebVN/I=
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
 <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
 <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <7fab704a-6b59-1e9b-663e-a3afdfcc319f@suse.com>
Date: Tue, 13 Jul 2021 17:20:41 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="b29Uzl3jyIdMKcrPV5SdZCKA5DN1UHEFi"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--b29Uzl3jyIdMKcrPV5SdZCKA5DN1UHEFi
Content-Type: multipart/mixed; boundary="n2TvMf4ohvVdaE1a6L8RtH65yvicFtrmR";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <7fab704a-6b59-1e9b-663e-a3afdfcc319f@suse.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
 <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
 <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
In-Reply-To: <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>

--n2TvMf4ohvVdaE1a6L8RtH65yvicFtrmR
Content-Type: multipart/mixed;
 boundary="------------E95AD78BA905F755E19F940D"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------E95AD78BA905F755E19F940D
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 13.07.21 17:15, Julien Grall wrote:
> Hi Juergen,
>=20
> On 13/07/2021 16:09, Juergen Gross wrote:
>> On 13.07.21 16:38, Julien Grall wrote:
>>> Hi Juergen,
>>>
>>> On 13/07/2021 15:23, Juergen Gross wrote:
>>>> On 13.07.21 16:19, Julien Grall wrote:
>>>>> Hi Jan,
>>>>>
>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>> And I don't think it should be named XC_PAGE_*, but rather=20
>>>>>>> XEN_PAGE_*.
>>>>>>
>>>>>> Even that doesn't seem right to me, at least in principle. There=20
>>>>>> shouldn't
>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I =

>>>>>> think a
>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>
>>>>> Yes, we want to be able to use the same userspace/OS without=20
>>>>> rebuilding to a specific hypervisor page size.
>>>>
>>>> This define is used for accessing data of other domains. See the def=
ine
>>>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>>>
>>>> So it should be a constant (minimal) page size for all hypervisors a=
nd
>>>> guests of an architecture.
>>>
>>> Do you mean the maximum rather than minimal? If you use the minimal=20
>>> (4KB), then you would not be able to map the page in the stage-2 if=20
>>> the hypervisor is using 64KB.
>>
>> But this would mean that the current solution to use XC_PAGE_SIZE is
>> wrong, as this is 4k.
>=20
> The existing ABI is implicitely based on using the hypervisor page=20
> granularity (currently 4KB).
>=20
> There is really no way we can support existing guest on 64KB hypervisor=
=2E=20
> But if we were going to break them, then we should consider to do one o=
f=20
> the following option:
>  =C2=A0=C2=A0 1) use 64KB page granularity for ABI
>  =C2=A0=C2=A0 2) query the hypervisor page granularity at runtime
>=20
> The ideal is 2) because it is more scalable for the future. We also nee=
d=20
> to consider to extend the PV protocol so the backend and frontend can=20
> agree on the page size.

I absolutely agree, but my suggestion was to help finding a proper way
to cleanup the current interface mess. And this should be done the way
I suggested IMO.

A later interface extension for future guests can still be done on top
of that.


Juergen

--------------E95AD78BA905F755E19F940D
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------E95AD78BA905F755E19F940D--

--n2TvMf4ohvVdaE1a6L8RtH65yvicFtrmR--

--b29Uzl3jyIdMKcrPV5SdZCKA5DN1UHEFi
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDtr0kFAwAAAAAACgkQsN6d1ii/Ey/O
ZQgAjBkOJO/HDotuu66KUK21cC+SFSTZCnkTMhidxwtTxq4Egr5tE7a9ziH7Q3SzOk+V4PJROY++
iuBWZUMwL9P0mUbR6/mlT3U5KrCXC4WsZJ+b3B910WFs8bpxIQDVcik68AbKHykPkeIa8gJipcm6
xfZshvWzktJrH0Kek1jvF6P4XI3M8xTaWrOuAIgsvr6uFjPOnB4yN7MCLftrOhj1qX1gHWmSIj9T
mWwv78v/HpmKduF999EDla9yEvgYLebmERcyXEePJGiGVJQu4lasTKufAF2ZeP23X91xIih9a0r2
gsuOBz0COvfH5UVpLVh48gu1xHhfLVjlINsUhYch9A==
=I+YP
-----END PGP SIGNATURE-----

--b29Uzl3jyIdMKcrPV5SdZCKA5DN1UHEFi--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 15:34:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 15:34:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155490.287015 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3KQ7-0000V5-L8; Tue, 13 Jul 2021 15:34:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155490.287015; Tue, 13 Jul 2021 15:34:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3KQ7-0000Uy-GN; Tue, 13 Jul 2021 15:34:03 +0000
Received: by outflank-mailman (input) for mailman id 155490;
 Tue, 13 Jul 2021 15:34:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3KQ5-0000Us-Nq
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 15:34:01 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id be589754-e3ef-11eb-8775-12813bfff9fa;
 Tue, 13 Jul 2021 15:34:00 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2056.outbound.protection.outlook.com [104.47.12.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-L--j-kVZOHSNMxT4wy1I0Q-1; Tue, 13 Jul 2021 17:33:58 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5470.eurprd04.prod.outlook.com (2603:10a6:803:d6::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.26; Tue, 13 Jul
 2021 15:33:56 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 15:33:55 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0185.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::29) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.21 via Frontend Transport; Tue, 13 Jul 2021 15:33:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: be589754-e3ef-11eb-8775-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626190439;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=dnXGTv3FQadO8NOCbKMdMebJy20YymrXYr8MzcF5cd0=;
	b=VT1+q2/hqmKG1YIBmyBnJVU/GLtsOOG+gdx2k5Tc1kp2hMf+6ALR1a1rDY4YCpJ5lDi1qs
	avdf33TaAp59UKChDXfDKomv0UcsBCUMTQa2wq3MQv4qEGhQskvmDNmyTyV/p/Sf6Hn6hh
	7bAJErS+PY1QwmEG3ulurLdOlPrayLw=
X-MC-Unique: L--j-kVZOHSNMxT4wy1I0Q-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fzx0kYg7WhknrZwAVzhBek/MgNLW97gvSNexEQIt2wPVUsEjkK3fa0IRbhNyih8h67Q6hodgqiq1d8CFEVlsXLitlQurG98mys4DTFpfRyXia9kgyphl9HCp2b4G/VwxRI7CMjt8IHo/piujmSut0IWl3KRL3UVvqwkN055Y4arQdcHhleEpgwYAoyxbxBV09h9TXjPBsxUrInSyNBkxN4AAagQtJHVL9xUaeBE9exjRCBEl6hz+j5uC4OEQqKXmr/Jwr3vahFXyVb30yGc1PI9xWco8IHO2xempj+0is6lR4T2Ad9iglvp2CPwxGgy3A2JD2apmkux0Ug8BdcKdLQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dnXGTv3FQadO8NOCbKMdMebJy20YymrXYr8MzcF5cd0=;
 b=k1GVdo+ecApBEQQJJyOoXgM4AlSe35HY2WiSCWtljIqSuBDh8/zH0hbqVEz2hs9L9Ys5jXaf2quJP0Ge3+rUMf1SpGixCdbSLNaorxBldy55z0o1lwOYHVmSehwPyArMVht9vUZN2gc4idIwTFdqYkWxEd77/LL3cLaom5oZtqvhsIf4na/RQN+C3jouro0AQJB8cGZue25KD0CUGakCmp3QwTcDUTi9L4WNbGeAER6bwrFouef6Gj5CSESgUlnIrZBCo/WnC3H0LYzcsSX0adxak3esXe1hD7VnQKHRB6DifoFVIebqfN1KwRTpRQid9z+49Wk/I2gY0q0tOaCt6g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v6 17/31] build: convert binfile use to if_changed
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 xen-devel@lists.xenproject.org
References: <20210701141011.785641-1-anthony.perard@citrix.com>
 <20210701141011.785641-18-anthony.perard@citrix.com>
 <dbb33a01-d54b-d4f3-caf3-5e5544d52095@suse.com> <YOxurzTEAfW3I8yU@perard>
 <ddc38760-c042-febb-822f-560a4b613e91@suse.com> <YO2qEaFOMVM3xvkO@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <85755375-8674-04be-bf2b-31b96763e202@suse.com>
Date: Tue, 13 Jul 2021 17:33:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <YO2qEaFOMVM3xvkO@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0185.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1c::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: cb7285a2-8a6b-4c64-e000-08d94613a052
X-MS-TrafficTypeDiagnostic: VI1PR04MB5470:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54700E66248DA722A4B2B9A1B3149@VI1PR04MB5470.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	6W0BeGvO6jsZbyMPBnVv05d0jLIeQGqpEShXzab3h79yjPzghnYnI2/EszJQtZtxmjI1c4cKTIvMkq0K/FKIRlWp+zvJXQFyqYxXEQEh3StytfSTdGI/B5lL38ubuBsJsR0bgckdOESeWRfCwIqSsFHPVtJ+tlMGnIRQBUPlYgcqkgEKFrp13M+7uwYCT8JggJza3QfSGkRwte6wx0aUi+O/fEdgwnj9QcbpZiNejMNT5e6MbEPz0Lfk2P7wJBTIlGty9NJGNS29waXJn2PG8omnjymnltfGdyOF3bGZ2kV5QvAiV4K8WGgjPkL29cTjHViC+jpSQQ3sepllcRSRAFZEIkDjij7x2bmc7CixH8/DNR0G7j82kljB3k31DQeWE3Axw+rjYqzAQXtyerB7fEsPMnlQLEQCN3HMEKXhXtxP/7yxZM4mIabkqTcN6rVNUB2QEBp3cqwLfSR44dRTZr3S5ZX7mjPHzj82i/MBb2xORF352HYCjPEAZk3L6QMYe2Km74py5mPuI30N3MDawh1855GtGNFB42bAy3slECBAHUnsQD1t/Ckxm36Iwp/r08YaQl9Y571vO5LH9EQEMrN/GpHH6IFb1XGbEzC19Gy8SKGxjm7LAlBYeTvmO+fY8twYghBMYDV01tZfq4qr2rBKEtjuHkvH4Ks0vrdL80ve/JspMqNerXq+RexR1sIQtWl3F27aUoWZm8uiGGb690wpBx26FcmTra51ugo6S5k=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(366004)(376002)(39850400004)(136003)(54906003)(66946007)(316002)(66476007)(86362001)(2906002)(6916009)(16576012)(8676002)(8936002)(956004)(31696002)(66556008)(478600001)(38100700002)(36756003)(4326008)(26005)(7416002)(31686004)(186003)(6486002)(53546011)(5660300002)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?gD9kAW8Li/JHrM5XFTVJQEfjqZV9qVWmKFLW7/d?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: cb7285a2-8a6b-4c64-e000-08d94613a052
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 15:33:55.8704
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: OyiTO/bxKRy4sMM2qZA4O+y3NGl816mbqUCvOAeA/a+5P+id+l65RTtSPEKRHU6dUq5czpc5Wi8jXL7dWOf71Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5470

On 13.07.2021 16:58, Anthony PERARD wrote:
> On Tue, Jul 13, 2021 at 09:51:45AM +0200, Jan Beulich wrote:
>> On 12.07.2021 18:32, Anthony PERARD wrote:
>>> On Wed, Jul 07, 2021 at 05:48:57PM +0200, Jan Beulich wrote:
>>>> On 01.07.2021 16:09, Anthony PERARD wrote:
>>>>> --- a/xen/common/Makefile
>>>>> +++ b/xen/common/Makefile
>>>>> @@ -80,8 +80,12 @@ config.gz: $(CONF_FILE)
>>>>>  
>>>>>  config_data.o: config.gz
>>>>>  
>>>>> -config_data.S: $(BASEDIR)/tools/binfile
>>>>> -	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
>>>>> +quiet_cmd_binfile = BINFILE $@
>>>>> +cmd_binfile = $(SHELL) $< $@ config.gz xen_config_data
>>>>
>>>> This is an abuse of $< which I consider overly confusing:
>>>> $(BASEDIR)/tools/binfile is not the input file to the rule. Instead
>>>> the script generates an assembly file "out of thin air", with not
>>>> input files at all. The rule and ...
>>>>
>>>>> +config_data.S: $(BASEDIR)/tools/binfile FORCE
>>>>
>>>> ... dependency shouldn't give a different impression. What would
>>>> be nice (without having checked how difficult this might be) would
>>>> be if quiet_cmd_binfile and cmd_binfile could move to xen/Rules.mk
>>>> and merely be used from here (and the other location, where the
>>>> same concern obviously applies).
>>>
>>> I've though of having cmd_binfile in Rules.mk, but it's made more
>>> complicated by having a "-i" flag used in flask/.
>>>
>>> So one things I've writen was:
>>>
>>> config_data.S: $(BASEDIR)/tools/binfile FORCE
>>>        $(call if_changed,binfile,,config.gz xen_config_data)
>>> flask-policy.S: $(BASEDIR)/tools/binfile FORCE
>>>        $(call if_changed,binfile,-i,policy.bin xsm_flask_init_policy)
>>>
>>> with:
>>> cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(2) $@ $(3)
>>>
>>> I thought this would be confusing, so I avoid it.
>>
>> Indeed that's why I did write "without having checked how difficult
>> this might be", because I definitely didn't want to suggest such
>> anomalies to get introduced. It's unhelpful that options have to
>> come first.
>>
>>> But maybe with the lists of flags at the end, it would be better:
>>>    $(call if_changed,binfile,policy.bin xsm_flask_init_policy,-i)
>>
>> Yes, this is a little better imo, but still not pretty.
>>
>>> Still want to move cmd_binfile to Rules.mk?
>>
>> I'd still like it to be moved, but without resulting in a rule
>> that's not consistent with others. Maybe we should have a
>> BINFILE_FLAGS variable (paralleling e.g. CFLAGS)?
> 
> Sound good.
> 
>     cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
> 
>     flask-policy.S: BINFILE_FLAGS := -i
>     flask-policy.S: $(BASEDIR)/tools/binfile FORCE
>            $(call if_changed,binfile,policy.bin xsm_flask_init_policy)
> 
> Would the above be OK?
> Otherwise, maybe you'll prefer the following:
> 
>     flask-policy.S: BINFILE_FLAGS = -i $@ policy.bin xsm_flask_init_policy
>     flask-policy.S: $(BASEDIR)/tools/binfile FORCE
>            $(call if_changed,binfile)

I think I like the former better than the latter, but I could live
with either.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 15:52:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 15:52:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155498.287029 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Khj-0002yI-81; Tue, 13 Jul 2021 15:52:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155498.287029; Tue, 13 Jul 2021 15:52:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Khj-0002yB-3X; Tue, 13 Jul 2021 15:52:15 +0000
Received: by outflank-mailman (input) for mailman id 155498;
 Tue, 13 Jul 2021 15:52:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3Khh-0002y5-Lv
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 15:52:13 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 49625a36-e3f2-11eb-8778-12813bfff9fa;
 Tue, 13 Jul 2021 15:52:12 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2107.outbound.protection.outlook.com [104.47.18.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-28-Aa9hmHAYMcKSR0EuWBX9tw-1; Tue, 13 Jul 2021 17:52:10 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2829.eurprd04.prod.outlook.com (2603:10a6:800:bb::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Tue, 13 Jul
 2021 15:52:09 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 15:52:09 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P251CA0019.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Tue, 13 Jul 2021 15:52:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 49625a36-e3f2-11eb-8778-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626191531;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=T4kWRIDVcbNzl4v12lZZtVM45qrpJCA3fYxM+m53KQE=;
	b=RVLD2mnjQ9RKkGxvbGVPfyOJw5nVXu+6K0teb2dKZTZ+BcfMC3+ZH3N/Gp3p6uxUvbmc7X
	ibDFkoaXWYTpTi+/5qzAt1qGHUSezo6UJDArf5btOen1rcIb+GkK0bo4dJ6rpVz476Yap+
	ETr6dVNfI/mNKGVajg3uZ2JoyWz02Ao=
X-MC-Unique: Aa9hmHAYMcKSR0EuWBX9tw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=iERb2B4OeH35MQ8imk++0xJuVD4dOhQS//biFIIBJNhQ5Hw6vV2IzyY1vYBApooDRIbbOv638DDA2mraY6ndy2PGuvbYoBRgcVkC5YHmPZm2bHLzCXXFbnb+W1uGVgMvUgSrYkbejNH5FtW0ojfmrTy5czBuaHUisop+B/yb1XNaInNgB0SD92OUsR6U1j+K/NRjIxPAkBHHLvPuBSCUcUagWAFuAcytxbcvE/+mvm5k+vUTXZANJqVrCgqSVyGDjgTjarl+RjliwjBkAilADwU7qAVym2OlwdHVdRMcRlM14QODZhA+ZPIgJZdU4YucnVUxiL+NFvxXwxuT9jI6cg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=T4kWRIDVcbNzl4v12lZZtVM45qrpJCA3fYxM+m53KQE=;
 b=NguPme7hxceHvAMu9QouzDnAzNDBikdbHS89v8RGVsTeB8YjSMLjaA4JNyda24Ul6LJxb5izuB1zdSrSxX8PMSG8osupsCo1THuKBV92wKuF/JCvEcQLx+PvITsyaguhN9DVi6qDy4RiwtB2Y2vxocqlYo/jJGs0puwsWTBNApjVAccJUO5beybqEr/zPd+EJ/ybbVWW8MsB3cz0kqDc8u3ZitY1jFqJatAwFQebzscTg6BYzmiCoH7fPKph03+MsD1YCkIIgICh5irRMWSlFjOUvqnXyTe7+oVm2V9+1XUSFpGbtlUsDtIKz973CX2NwDLwUBExcPmttNJsm83QqQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
 <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
Date: Tue, 13 Jul 2021 17:52:07 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P251CA0019.EURP251.PROD.OUTLOOK.COM
 (2603:10a6:102:b5::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 03762694-bc46-4e6a-2a78-08d946162be8
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2829:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2829C12F66744835C53CF04CB3149@VI1PR0402MB2829.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2eEqwmEnvsA6h6TggLNgDr6V+uhF3hbCk04Kkp3CCAUufU3QG9HYvnZxTLR+4Sl9lZm8IVrBSvfyXWgdZtUIEnVcn8E/NgccTudL7TpCHu8ygy30P9wC+Rjw9PtvQybG7pXalrrJZgu3oTUoGpQwRu9IuVXW2uYEK+nd2CFtCf6gJmNdRnLbfwpCJ2prp28zBd3poUh4QonUZhKm0LdxLRzdrtOXlWcra32ZdAIBeH+aO7ZqZJ469KHg87Rl2a31EkNVW/oJcF54kq3HcEF8MWLLIe0Bfa20jwRnqddY8iPyDhiZ0mN+EXxcfICZmxNExIf5AoDsrhB2hC28T9Xblj0tRh48i3e/u8CZnr4w9YR1UPlXKDYOqVWDbOTnLTaM6eNX/3pl0rValQBIohu7vHSeEh79zA4Lyjq5JxAqV7q09M90niMHz93oR/rfG+5y56E/BClXZMvSzWiJpIMOCaEWGtdS3iS0ho1aJhXnZx1AQKgGMvHVEUsxh0NqQSIdDcvM44Jr77zo9Qt/pjfq494G/+nD49JMoYfFnLGp9YE8bPM+3+lDAjTjY8zRMzZeyk5xQCMzbzu/TJU2zrz6nIL62cI4gZpmR/hGPwGxQQIjAYEzY59lx3so2Clb9JIGiEl1SnqAawrQC3r3jOztBwomg/HqIdnSmZYUQvKi9fPgJHdPC0kOhKrEGF/O0Xdxd4wyHp8GuKxtNh0LGpGY3qcOdyq6HtTaDafOy88owd21dhuh9O18ZtLmQBhHOJBantO8rUQ+xiRWLlrJq2pEag==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(346002)(136003)(39860400002)(396003)(5660300002)(26005)(6486002)(2906002)(36756003)(8676002)(478600001)(186003)(6916009)(66476007)(31686004)(66556008)(956004)(66946007)(53546011)(16576012)(316002)(54906003)(86362001)(31696002)(38100700002)(107886003)(8936002)(4326008)(2616005)(98903001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 03762694-bc46-4e6a-2a78-08d946162be8
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 15:52:09.0665
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: FdeZCww+HrMpHERzhnWfyRybjhKrODS4n6t/O4onQp3ZKcseamZD4xs6hUAMZgoCfvXtAiOG8o7zhrQ3VQrErQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2829

On 13.07.2021 16:33, Julien Grall wrote:
> On 13/07/2021 15:23, Jan Beulich wrote:
>> On 13.07.2021 16:19, Julien Grall wrote:
>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>>
>>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>>> runtime query to the hypervisor would be needed instead.
>>>
>>> Yes, we want to be able to use the same userspace/OS without rebuilding
>>> to a specific hypervisor page size.
>>>
>>>> And thinking
>>>> even more generally, perhaps there could also be mixed (base) page sizes
>>>> in use at run time, so it may need to be a bit mask which gets returned.
>>>
>>> I am not sure to understand this. Are you saying the hypervisor may use
>>> at the same time different page size?
>>
>> I think so, yes. And I further think the hypervisor could even allow its
>> guests to do so.
> 
> This is already the case on Arm. We need to differentiate between the 
> page size used by the guest and the one used by Xen for the stage-2 page 
> table (what you call EPT on x86).
> 
> In this case, we are talking about the page size used by the hypervisor 
> to configure the stage-2 page table
> 
>> There would be a distinction between the granularity at
>> which RAM gets allocated and the granularity at which page mappings (RAM
>> or other) can be established. Which yields an environment which I'd say
>> has no clear "system page size".
> 
> I don't quite understand why you would allocate and etablish the memory 
> with a different page size in the hypervisor. Can you give an example?

Pages may get allocated in 16k chunks, but there may be ways to map
4k MMIO regions, 4k grants, etc. Due to the 16k allocation granularity
you'd e.g. still balloon pages in and out at 16k granularity.

Jan



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 16:16:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 16:16:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155505.287045 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3L4j-0006Df-7G; Tue, 13 Jul 2021 16:16:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155505.287045; Tue, 13 Jul 2021 16:16:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3L4j-0006DW-4U; Tue, 13 Jul 2021 16:16:01 +0000
Received: by outflank-mailman (input) for mailman id 155505;
 Tue, 13 Jul 2021 16:16:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3L4i-0006DQ-BL
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 16:16:00 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3L4e-000173-W2; Tue, 13 Jul 2021 16:15:56 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3L4e-0002T9-Oc; Tue, 13 Jul 2021 16:15:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=bz1HCH7H0UxTodOJdtGTjFnwDY2dkeGZcM+kThjTzfs=; b=XJ9mhbRSVD5I6YAwj2tA7Ckz0a
	u/tu69gV/x+KVc4txFvARKJIREDaNL/tDyBCWa1O89vOJ70EDXehxgCiI8MSuy/90qgWmt2mtoZgw
	WJ+u+ilbRw+xqAuCSVLe+aiMqxF7xKvsVrip4uujJ3v28dHCR8r4rrldhYEotuOprhV8=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
 <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
 <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <c7f47a50-b559-f8ba-5ad2-6868c01b6f52@xen.org>
Date: Tue, 13 Jul 2021 17:15:54 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 13/07/2021 16:52, Jan Beulich wrote:
> On 13.07.2021 16:33, Julien Grall wrote:
>> On 13/07/2021 15:23, Jan Beulich wrote:
>>> On 13.07.2021 16:19, Julien Grall wrote:
>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>>>
>>>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>>>> runtime query to the hypervisor would be needed instead.
>>>>
>>>> Yes, we want to be able to use the same userspace/OS without rebuilding
>>>> to a specific hypervisor page size.
>>>>
>>>>> And thinking
>>>>> even more generally, perhaps there could also be mixed (base) page sizes
>>>>> in use at run time, so it may need to be a bit mask which gets returned.
>>>>
>>>> I am not sure to understand this. Are you saying the hypervisor may use
>>>> at the same time different page size?
>>>
>>> I think so, yes. And I further think the hypervisor could even allow its
>>> guests to do so.
>>
>> This is already the case on Arm. We need to differentiate between the
>> page size used by the guest and the one used by Xen for the stage-2 page
>> table (what you call EPT on x86).
>>
>> In this case, we are talking about the page size used by the hypervisor
>> to configure the stage-2 page table
>>
>>> There would be a distinction between the granularity at
>>> which RAM gets allocated and the granularity at which page mappings (RAM
>>> or other) can be established. Which yields an environment which I'd say
>>> has no clear "system page size".
>>
>> I don't quite understand why you would allocate and etablish the memory
>> with a different page size in the hypervisor. Can you give an example?
> 
> Pages may get allocated in 16k chunks, but there may be ways to map
> 4k MMIO regions, 4k grants, etc. Due to the 16k allocation granularity
> you'd e.g. still balloon pages in and out at 16k granularity.
Right, 16KB is a multiple of 4KB, so a guest could say "Please allocate 
a contiguous chunk of 4 4KB pages".

 From my understanding, you are suggesting to tell the guest that we 
"support 4KB, 16KB, 64KB...". However, it should be sufficient to say 
"we support 4KB and all its multiple".

For hypervisor configured with 16KB (or 64KB) as the smaller page 
granularity, then we would say "we support 16KB (resp. 64KB) and all its 
multiple".

So the only thing we need is a way to query the small page granularity 
supported. This could be a shift, size, whatever...

If the guest is supporting a small page granularity, then the guest 
would need to make sure to adapt the balloning, grants... so they are at 
least a multiple of the page granularity supported by the hypervisor.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 16:27:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 16:27:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155511.287056 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3LFz-0007rJ-BF; Tue, 13 Jul 2021 16:27:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155511.287056; Tue, 13 Jul 2021 16:27:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3LFz-0007rC-8M; Tue, 13 Jul 2021 16:27:39 +0000
Received: by outflank-mailman (input) for mailman id 155511;
 Tue, 13 Jul 2021 16:27:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=G3ja=MF=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3LFx-0007r6-Ih
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 16:27:37 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3b534839-e3f7-11eb-877f-12813bfff9fa;
 Tue, 13 Jul 2021 16:27:36 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2056.outbound.protection.outlook.com [104.47.12.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-19-QiGfjtuMN3y5mmPPBwLf8Q-2; Tue, 13 Jul 2021 18:27:34 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2703.eurprd04.prod.outlook.com (2603:10a6:800:ae::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Tue, 13 Jul
 2021 16:27:30 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4308.027; Tue, 13 Jul 2021
 16:27:30 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM4PR07CA0023.eurprd07.prod.outlook.com (2603:10a6:205:1::36) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.10 via Frontend Transport; Tue, 13 Jul 2021 16:27:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3b534839-e3f7-11eb-877f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626193655;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=IXFogW2iLNr3+ISwri6Kupc6tyJl+RHjwnHigCw36RY=;
	b=j+OJxWfjkuDNHJ1R3i0izhBrKeXuI3lAPPUwXynNENSQRncTElpW2Bjd5vwbua7RSKPQPE
	omgu5zIOGBOJy5LejOepGW99KOG8nc4c3ouI9eMJqS8dMMJXikpOzJ6oNABOqWPuuwNVJr
	SsRDF1aZfo8K2VCwmNAgbWkcMy8pmKc=
X-MC-Unique: QiGfjtuMN3y5mmPPBwLf8Q-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Dbp8smAJ2DzOZwQ/OYPQPpn7mC3PmMLpsgfdAXXFcl++O/EhXnAy4hMQx376ok4RYECIIgI83wUwnCKtUd39HEVxA70LZe7dNP/EoF1aoFLdwEOm2xbbEGaD2A1tghBMUa7aQTcareuus2nKGi7Ro7cqB4QAU7HHHAEwMBaCAQUdpKO+7yn4DvPcNXGg/gksLrHGTz7TkC48jnDBpZ4hHFRLfcJLUtBJNOjWJFqxhaayhd/4z5zzNCIYNlloPQqiIXwQU8UoIsmx8iWuMwU+3T9MCJSXC5RjLkzx0WcML5lk8xmiqogTleV1KXa1hUytxR+PZ90o/ptXL48B6vQ5cQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IXFogW2iLNr3+ISwri6Kupc6tyJl+RHjwnHigCw36RY=;
 b=NrXkY44PTjr1uNOd5b9GlSg5O5dVA86heR1IB56lXsJvu/ot6+mAKsWHxFP1omsRpoOWAMCF7n2fKVFQOkmNbQocni9idXyb0FSmM36jou9xmzRCYWt7XclJyVuHRf27rlejTS8/0dvMJvth+dVJhw/pTz5rZjqSkcnmkRdSdHGmnPNixUv8CJmXDTRg8tx3lvnZI3SW9mUdNgD6/wgYedrorQMl4yB7Zpn83Q/kdlbqXFfk9atKBCkO+c0s6xLSmgKNQhDD0qlJr5hOHtSIvgxTtQMgnEKwso8M0VIwENtLSivoFHvbfibcMo7Q9SSffUO84IldzOHwpMGzvXZ8YA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
 <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
 <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
 <c7f47a50-b559-f8ba-5ad2-6868c01b6f52@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <51a62c3f-e3ef-f7ec-748f-75ade81f51cd@suse.com>
Date: Tue, 13 Jul 2021 18:27:28 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <c7f47a50-b559-f8ba-5ad2-6868c01b6f52@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM4PR07CA0023.eurprd07.prod.outlook.com
 (2603:10a6:205:1::36) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 65cd1f32-0208-40a1-2749-08d9461b1c74
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2703:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2703369A60DADE9EAF79F8ABB3149@VI1PR0402MB2703.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	fYZ9dqOnW3FZXvQEy1mJ7AzfTh7rjEMLC9xlZ8jXnLN3suqsbC+oTJZ6p0ik2TFAwhROiSNqDIkrUz+rMKYHJ7ZVEgP6Gl/zAxh+vWyAH39ZXfaaGINKSdBPIlf9TNITGWh9o4bOpP/LqGX6bX6+NtQvSLLfhXBejMQmlB/AWKaYqMxII59H0Ub1z041YkGxb8/e37HwE+Y5jm0DdhvPgTg8PmnOCQTM6G0AaC1v4fmX6LAhRS0BR50FiDkU3OTUhJCR8rPUI6CVhk+mRWbCqR+Hm6xNNUyImgtPCS2cGqvRna5RHUW2EmvmuCk2WUHb0zVobqG7TE18GyZ/jqvLFdhyxFQXFZ1dvjjA/O771Fw299+XWwYmgIV2t4HOfNIVj7f4u413F6R1dXa5T1WaGAJXKxuE1yt0Nk3t84SUuTOVJCcdP6fV0tsus/ACbt1C9RUzz6G//irMAeXaJXJ4PlM0UEeAgi1PHARvfSw87jabMzH4HwsX3A9/tdKzFLcXZh6OPLm1N0Ms8hHFrYKuqUrU4Lbxg2zNEw/x4UXA/lcUWB2mUR9iHK90V5VQTHnIWjjF7GCdIESEABwcc9P0MOQybPZ+NDtaqjAVJgu6l1p4WUzzOCBBf/rSatocRzD+XLfpCKWnDSs0t8lv1Ke5K5oRddLM2H0Z0nM3TJS1XmOOsAnfSGudXKKy51wID8qlGN2gbUK8bYa6AY0OP0B1JfCCgT9LS398Qf00xQrNZjfefBD6SxBIorNaiFEpbbntjbFlzpDADh3XBlfXixAYvA==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(376002)(366004)(396003)(346002)(39840400004)(2906002)(66476007)(5660300002)(66556008)(8936002)(8676002)(26005)(6486002)(478600001)(66946007)(31696002)(6916009)(2616005)(4326008)(16576012)(186003)(36756003)(38100700002)(86362001)(107886003)(54906003)(316002)(31686004)(956004)(53546011)(98903001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 65cd1f32-0208-40a1-2749-08d9461b1c74
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2021 16:27:30.5831
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 8YYXD7hbhDOuzuBejrPZltHujnInPuoa8DZq7dmj2YmWz1s/7eCpFtWI03LmVXS2ssVd9LxpKOM19N2FZyZuFQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2703

On 13.07.2021 18:15, Julien Grall wrote:
> On 13/07/2021 16:52, Jan Beulich wrote:
>> On 13.07.2021 16:33, Julien Grall wrote:
>>> On 13/07/2021 15:23, Jan Beulich wrote:
>>>> On 13.07.2021 16:19, Julien Grall wrote:
>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>>>>
>>>>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>
>>>>> Yes, we want to be able to use the same userspace/OS without rebuilding
>>>>> to a specific hypervisor page size.
>>>>>
>>>>>> And thinking
>>>>>> even more generally, perhaps there could also be mixed (base) page sizes
>>>>>> in use at run time, so it may need to be a bit mask which gets returned.
>>>>>
>>>>> I am not sure to understand this. Are you saying the hypervisor may use
>>>>> at the same time different page size?
>>>>
>>>> I think so, yes. And I further think the hypervisor could even allow its
>>>> guests to do so.
>>>
>>> This is already the case on Arm. We need to differentiate between the
>>> page size used by the guest and the one used by Xen for the stage-2 page
>>> table (what you call EPT on x86).
>>>
>>> In this case, we are talking about the page size used by the hypervisor
>>> to configure the stage-2 page table
>>>
>>>> There would be a distinction between the granularity at
>>>> which RAM gets allocated and the granularity at which page mappings (RAM
>>>> or other) can be established. Which yields an environment which I'd say
>>>> has no clear "system page size".
>>>
>>> I don't quite understand why you would allocate and etablish the memory
>>> with a different page size in the hypervisor. Can you give an example?
>>
>> Pages may get allocated in 16k chunks, but there may be ways to map
>> 4k MMIO regions, 4k grants, etc. Due to the 16k allocation granularity
>> you'd e.g. still balloon pages in and out at 16k granularity.
> Right, 16KB is a multiple of 4KB, so a guest could say "Please allocate 
> a contiguous chunk of 4 4KB pages".
> 
>  From my understanding, you are suggesting to tell the guest that we 
> "support 4KB, 16KB, 64KB...". However, it should be sufficient to say 
> "we support 4KB and all its multiple".

No - in this case it could legitimately expect to be able to balloon
out a single 4k page. Yet that's not possible with 16k allocation
granularity.

Jan

> For hypervisor configured with 16KB (or 64KB) as the smaller page 
> granularity, then we would say "we support 16KB (resp. 64KB) and all its 
> multiple".
> 
> So the only thing we need is a way to query the small page granularity 
> supported. This could be a shift, size, whatever...
> 
> If the guest is supporting a small page granularity, then the guest 
> would need to make sure to adapt the balloning, grants... so they are at 
> least a multiple of the page granularity supported by the hypervisor.
> 
> Cheers,
> 



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 16:33:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 16:33:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155517.287068 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3LLK-0000o1-03; Tue, 13 Jul 2021 16:33:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155517.287068; Tue, 13 Jul 2021 16:33:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3LLJ-0000nu-TP; Tue, 13 Jul 2021 16:33:09 +0000
Received: by outflank-mailman (input) for mailman id 155517;
 Tue, 13 Jul 2021 16:33:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3LLI-0000no-JP
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 16:33:08 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3LLF-0001OU-En; Tue, 13 Jul 2021 16:33:05 +0000
Received: from [54.239.6.178] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3LLF-0003TF-8R; Tue, 13 Jul 2021 16:33:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Dj9ivjP2ZsRkDSRdyqma7HlZaMaPM8MScTI1W4tk/lo=; b=MNvbpCkSItdjtkyDa1zxfTOCVY
	lUMreKSNKeKtL4r9xo9hQOuFBvSmpBw56gSOsg+nLADmdj8Me9aZGKhqu1WqsJKqR1bWI4Ayz90l+
	8okb7NjCh6+GvqvBtLFDGfIrlIa9uN2IoMDDxfhrTrT9kztrGUN9RNEDMwfBMB1QFZII=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
 <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
 <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
 <c7f47a50-b559-f8ba-5ad2-6868c01b6f52@xen.org>
 <51a62c3f-e3ef-f7ec-748f-75ade81f51cd@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <de797e4f-cab9-a31e-4cf7-5e8996cae5bc@xen.org>
Date: Tue, 13 Jul 2021 17:33:03 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <51a62c3f-e3ef-f7ec-748f-75ade81f51cd@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 13/07/2021 17:27, Jan Beulich wrote:
> On 13.07.2021 18:15, Julien Grall wrote:
>> On 13/07/2021 16:52, Jan Beulich wrote:
>>> On 13.07.2021 16:33, Julien Grall wrote:
>>>> On 13/07/2021 15:23, Jan Beulich wrote:
>>>>> On 13.07.2021 16:19, Julien Grall wrote:
>>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>>>>>
>>>>>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>>
>>>>>> Yes, we want to be able to use the same userspace/OS without rebuilding
>>>>>> to a specific hypervisor page size.
>>>>>>
>>>>>>> And thinking
>>>>>>> even more generally, perhaps there could also be mixed (base) page sizes
>>>>>>> in use at run time, so it may need to be a bit mask which gets returned.
>>>>>>
>>>>>> I am not sure to understand this. Are you saying the hypervisor may use
>>>>>> at the same time different page size?
>>>>>
>>>>> I think so, yes. And I further think the hypervisor could even allow its
>>>>> guests to do so.
>>>>
>>>> This is already the case on Arm. We need to differentiate between the
>>>> page size used by the guest and the one used by Xen for the stage-2 page
>>>> table (what you call EPT on x86).
>>>>
>>>> In this case, we are talking about the page size used by the hypervisor
>>>> to configure the stage-2 page table
>>>>
>>>>> There would be a distinction between the granularity at
>>>>> which RAM gets allocated and the granularity at which page mappings (RAM
>>>>> or other) can be established. Which yields an environment which I'd say
>>>>> has no clear "system page size".
>>>>
>>>> I don't quite understand why you would allocate and etablish the memory
>>>> with a different page size in the hypervisor. Can you give an example?
>>>
>>> Pages may get allocated in 16k chunks, but there may be ways to map
>>> 4k MMIO regions, 4k grants, etc. Due to the 16k allocation granularity
>>> you'd e.g. still balloon pages in and out at 16k granularity.
>> Right, 16KB is a multiple of 4KB, so a guest could say "Please allocate
>> a contiguous chunk of 4 4KB pages".
>>
>>   From my understanding, you are suggesting to tell the guest that we
>> "support 4KB, 16KB, 64KB...". However, it should be sufficient to say
>> "we support 4KB and all its multiple".
> 
> No - in this case it could legitimately expect to be able to balloon
> out a single 4k page. Yet that's not possible with 16k allocation
> granularity.

I am confused... why would you want to put such restriction? IOW, what 
are you trying to protect against?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 17:50:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 17:50:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155527.287088 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MY5-0000e8-K2; Tue, 13 Jul 2021 17:50:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155527.287088; Tue, 13 Jul 2021 17:50:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MY5-0000e1-HG; Tue, 13 Jul 2021 17:50:25 +0000
Received: by outflank-mailman (input) for mailman id 155527;
 Tue, 13 Jul 2021 17:50:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MY4-0000dv-Ds
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 17:50:24 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.23])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cb23590d-e402-11eb-8792-12813bfff9fa;
 Tue, 13 Jul 2021 17:50:23 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DHoGt8f
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 19:50:16 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cb23590d-e402-11eb-8792-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626198616;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=SFJVxYgUdrFLkXTG9tAv0/GsNieccbCQUJp8qPRcpc8=;
    b=ZEk+2HcYwQ3xMo/ZveglVX4bf22md81YNzjhMpoNt92upS2Hmjag46pTEQ5Orfb/Vo
    suCrw4OnFjP1+exXR6eb1rncHQQuzBLejnNFp405W3o7NQSLRpxSCqLZfarKVvEh063Z
    reJdpYV22Q+URaPrqeAmz25ApLAo8xthwBoyX0e9BKWE0Dp9VO9rIg96ZSFHkKAPzs1Y
    gMDzbLaAjfaH4yOxjUlzBzL2dRosK4YQwI/1Dvjq5kue2KKTKh3WELLAyAAovoRyOYDx
    MsYoNhRR8VzKHrqWdtHmhiDwvgIF1w9fvPOO9L4lYtZ1lneXBP55/iHU0WqyZ/oYMwWb
    3M5g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisEoBB7TP03sFNuPSPN4PnbbdNTIb1D72sIcKVnq"
X-RZG-CLASS-ID: mo00
Date: Tue, 13 Jul 2021 19:50:09 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, Wei
 Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v20210701 15/40] tools: prepare to allocate saverestore
 arrays once
Message-ID: <20210713195009.3657104f.olaf@aepfle.de>
In-Reply-To: <6bd5fbb4-881f-e41c-46f5-d31c93a7ff7a@citrix.com>
References: <20210701095635.15648-1-olaf@aepfle.de>
	<20210701095635.15648-16-olaf@aepfle.de>
	<644a7a4c-4fab-07be-2e69-2637254de859@citrix.com>
	<20210705132700.05d92744.olaf@aepfle.de>
	<6bd5fbb4-881f-e41c-46f5-d31c93a7ff7a@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/uqzX_/hadRCxFLYTx9V8ZQ4";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/uqzX_/hadRCxFLYTx9V8ZQ4
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Mon, 5 Jul 2021 14:01:07 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> > Unfortunately, I'm not able to prove the reported gain with the systems=
 I have today.
> > I'm waiting for preparation of different hardware, right now I have onl=
y a pair of CoyotePass and WilsonCity.
> >
> > I'm sure there were NUMA effects involved. Last years libvirt was unabl=
e to properly pin vcpus. If I pin all the involved memory to node#0 there i=
s some jitter in the logged numbers, but no obvious improvement. The fist i=
teration is slightly faster, but that is it. =20
>=20
> Oh - so the speedup might not be from reduced data handling?
>=20
> Avoiding unnecessary data copies is clearly going to improve things,
> even if it isn't 25%.


For HVM the only notable improvement is the initial iteration.

On average with 4 migrations of a single domU from A to B and back from B t=
o A, transfer rate goes up from ~490MiB/s to ~677MiB/s. The initial transfe=
r time for the 4194299 domU pages:

with plain staging:
36.800582009
32.145531727
31.827540709
33.009956041
34.951513466
33.416769973
32.128985762
33.201786076

with the series applied:
24.266428156
24.632898175
24.112660134
23.603475994
24.418323859
23.841875914
25.087779229
23.493812677


Migration of a PV domU is much faster, but transfer rate for each iteration=
 varies with or without the patches being applied.


Olaf

--Sig_/uqzX_/hadRCxFLYTx9V8ZQ4
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDt0lEACgkQ86SN7mm1
DoA+ZQ/+Pjrj+2WdAQPe6a99bsgsaDYhd6fyesbznYTQeaiPJ2Gdgkwi8vvGJTjX
KliDBfIxM1eXPgWmr+fuWtMN+THSnWwPU/QO/k5HInoTF/PPiwR2tgrda6OYnX80
cxfnN2tCP3UbuM2JgKqczVtujtGUlI8FNnbov/2xVKtEPt+fmoqgo6Jt6ncds/ZR
DKLRk6C8V2LpY4bBD1DxfQ9/7hVXmxOHoRR9EpjFISCeVJK5uMGEbeS+/4qwxZDp
4BI0SXcB37bYv6svg8MMkuO6GHpVsbi2rQsSEZz8K6u/yPTrMWmjlhFpm+FbKOOS
XtZ8nUSLUhc8LrDLrrTXY5zyPiivL73jmVy6K1FgAmLv4V9ry/EkbnD32whD7yd6
QAcvpIZYwbwYTal2pFEjLJ1nfIZ6cIsAPfj6wgZPPbkCVS/SoXuKOWFWBNNQ0TxC
Q0RWeP5zDkVlVdXMx2a9ugNK/FE0HWpPAs1F/vLGmBqs7tDNYJsXvZmL7pbMYKd8
Gk73+gbs94frZBadJtRuIbWdkie5Ve4imp7mlQXyFvS+z+bxXg6/deSV23syeaTn
XGsuH1jwH9x3zBvCP5+vUEIWPbgl2VpJ/tWpo8tao+ztPmsLDT8ADzqkKGJmoZZ7
SxbdGWERVXP1J90t17COsRMjRPPLfkR+s76BxH0ClZoFAJWLZO0=
=zGOK
-----END PGP SIGNATURE-----

--Sig_/uqzX_/hadRCxFLYTx9V8ZQ4--


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155537.287112 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnT-0002lQ-Ac; Tue, 13 Jul 2021 18:06:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155537.287112; Tue, 13 Jul 2021 18:06:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnT-0002lJ-7b; Tue, 13 Jul 2021 18:06:19 +0000
Received: by outflank-mailman (input) for mailman id 155537;
 Tue, 13 Jul 2021 18:06:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MnR-0002kr-UR
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:17 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04584618-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:17 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6BtAi
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:11 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 04584618-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199571;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=oJEcT6v2n/O5Zj5MH8UEB3htWfj1QTk7O+DK+AM3TXA=;
    b=PciP9VORIaGFuJ6qCss2A4mnbbOe3K7r8nCJEEeY0df5QeLCvNsAWdxdTi7yOZgbtZ
    vYBPx1JZAGcofS+BtlzPu5X2ur1W1HxgQZ0cFo3a+AuADZ1TQJigZT8yQhXMSRsiCmr6
    71Qo0bws7mPRd0nXPxmuYE4I+V6+GZeV0X1E/9t9AxVqxLZUOI8r0JlNMjJJkZ3lTahF
    2Fd0FU4e5Aq8xoyfH81c+YW10a4Jfw+bPYE8JFpKCqvlkc1CRGSriq1eqECbv6gcn5cF
    qhfiNK08nJuri8KlYheJWB9LZl66rKRxhnfRPKCFMoJUnYXp7Xk34LjWUvpClDR2ZgsO
    Nepg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210713 01/31] tools: fix make rpmball
Date: Tue, 13 Jul 2021 20:05:35 +0200
Message-Id: <20210713180605.12096-2-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Commit 438c5ffa44e99cceb574c0f9946aacacdedd2952 ("rpmball: Adjust to
new rpm, do not require --force") attempted to handle stricter
directory permissions in newer distributions.

This introduced a few issues:
- /boot used to be a constant prior commit
  6475d700055fa952f7671cee982a23de2f5e4a7c ("use BOOT_DIR as xen.gz
  install location"), since this commit the location has to be
  referenced via ${BOOT_DIR}
- it assumed the prefix and the various configurable paths match the
  glob pattern /*/*/*

Adjust the code to build a filelist on demand and filter directories
from an installed filesystem.rpm. This works on a SUSE system, and
will likely work on a RedHat based system as well.

Take the opportunity to replace the usage of $RPM_BUILD_ROOT with
%buildroot, and use pushd/popd pairs.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/misc/mkrpm | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/tools/misc/mkrpm b/tools/misc/mkrpm
index 68819b2d73..b31054444d 100644
--- a/tools/misc/mkrpm
+++ b/tools/misc/mkrpm
@@ -50,20 +50,35 @@ uninstall.
 %build
 
 %install
-rm -rf \$RPM_BUILD_ROOT
-mkdir -p \$RPM_BUILD_ROOT
-cd %{_xenroot}
-dist/install.sh \$RPM_BUILD_ROOT/
+rm -rf %{buildroot}
+mkdir -p %{buildroot}
+pushd %{_xenroot}
+dist/install.sh %{buildroot}
+
+pushd %{buildroot}
+popd
+rm -f dist/filesystem.txt
+rm -f dist/directories.txt
+rm -f dist/files.txt
+find %{buildroot} -type d | sed 's|^%{buildroot}||' | sort > dist/directories.txt
+find %{buildroot} -type f | sed 's|^%{buildroot}||' | sort > dist/files.txt
+find %{buildroot} -type l | sed 's|^%{buildroot}||' | sort >> dist/files.txt
+if rpm -ql filesystem > dist/filesystem.txt
+then
+  while read
+  do
+    sed -i "s|^\${REPLY}$||" dist/directories.txt
+  done < dist/filesystem.txt
+fi
+sed 's@^@%%dir @' dist/directories.txt >> dist/files.txt
 
-cd \$RPM_BUILD_ROOT
+popd
 
 %clean
-rm -rf \$RPM_BUILD_ROOT
+rm -rf %{buildroot}
 
-%files
+%files -f %{_xenroot}/dist/files.txt
 %defattr(-,root,root,-)
-/*/*/*
-/boot/*
 
 %post
 EOF


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155536.287102 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnP-0002UY-Vm; Tue, 13 Jul 2021 18:06:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155536.287102; Tue, 13 Jul 2021 18:06:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnP-0002UR-So; Tue, 13 Jul 2021 18:06:15 +0000
Received: by outflank-mailman (input) for mailman id 155536;
 Tue, 13 Jul 2021 18:06:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MnO-0002UL-J6
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:14 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 30fc50c8-e1dc-4ff1-8d1d-4c356814afbf;
 Tue, 13 Jul 2021 18:06:12 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6BtAh
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:11 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 30fc50c8-e1dc-4ff1-8d1d-4c356814afbf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199571;
    s=strato-dkim-0002; d=aepfle.de;
    h=Message-Id:Date:Subject:Cc:To:From:Cc:Date:From:Subject:Sender;
    bh=mthTF5r+qAPoUx8ZZzZfwGJJ6UKC6kYK5J2l3AApMng=;
    b=RwKDSyLHacX4KZRAxY6H5/2WZZLcFY5/r0D8V+pOJJLSLc9gd9z4BpPmsnx7RggbrU
    Irb5Rl2s6Fep4iI9Mh0FVjboWzPyAsIhp3p4YRwE2bMe8BFZxOPn1upS+Nq0+nIZsrcy
    8JeFFtW7KoHPU3HYQsnxrm6zFQft5fs2f1MBf03ktTsNJ4GZaP9n7RugpUclz/5t0+dP
    gXMBPDVB9pXc/EufDaSHV1wIqM/Y8QuLI7weLHbhd9GdMdienjGu/wJ6VEm9dCfkG6bt
    oxYXMPVR/orohGIhwosMHQbfkd8mKE7NLVNr5QJfDgsXAHnObs1iorVr+feiMOfFuKQ3
    QR+g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>
Subject: [PATCH v20210713 00/31] leftover from 2020
Date: Tue, 13 Jul 2021 20:05:34 +0200
Message-Id: <20210713180605.12096-1-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Various unreviewed changes, rebase to 3a98c1a4ce.

Olaf Hering (31):
  tools: fix make rpmball
  hotplug/Linux: fix starting of xenstored with restarting systemd
  tools: add API to work with sevaral bits at once
  xl: fix description of migrate --debug
  tools: add readv_exact to libxenctrl
  tools: show migration transfer rate in send_dirty_pages
  tools: save: preallocate mfns array
  tools: save: preallocate types array
  tools: save: preallocate errors array
  tools: save: preallocate iov array
  tools: save: preallocate rec_pfns array
  tools: save: preallocate guest_data array
  tools: save: preallocate local_pages array
  tools: restore: preallocate pfns array
  tools: restore: preallocate types array
  tools: restore: preallocate mfns array
  tools: restore: preallocate map_errs array
  tools: restore: preallocate populate_pfns pfns array
  tools: restore: preallocate populate_pfns mfns array
  tools: restore: split record processing
  tools: restore: split handle_page_data
  tools: restore: write data directly into guest
  tools: recognize LIBXL_API_VERSION for 4.16
  tools: adjust libxl_domain_suspend to receive a struct props
  tools: add callback to libxl for precopy_policy and precopy_stats
  tools: add --max_iters to libxl_domain_suspend
  tools: add --min_remaining to libxl_domain_suspend
  tools: add --abort_if_busy to libxl_domain_suspend
  tools: add API for expandable bitmaps
  tools: use xg_sr_bitmap for populated_pfns
  tools: use superpages during restore of HVM guest

 docs/man/xl.1.pod.in                          |  24 +-
 tools/hotplug/Linux/init.d/xencommons.in      |   2 +-
 tools/hotplug/Linux/launch-xenstore.in        |  40 +-
 .../Linux/systemd/xenstored.service.in        |   2 +-
 tools/include/libxl.h                         |  32 +-
 tools/libs/ctrl/xc_bitops.h                   |  28 +
 tools/libs/ctrl/xc_private.c                  |  57 +-
 tools/libs/ctrl/xc_private.h                  |   1 +
 tools/libs/guest/xg_dom_x86.c                 |   5 -
 tools/libs/guest/xg_private.h                 |   5 +
 tools/libs/guest/xg_sr_common.c               |  72 ++-
 tools/libs/guest/xg_sr_common.h               | 162 ++++-
 tools/libs/guest/xg_sr_restore.c              | 601 +++++++++++-------
 tools/libs/guest/xg_sr_restore_x86_hvm.c      | 371 +++++++++++
 tools/libs/guest/xg_sr_restore_x86_pv.c       |  68 +-
 tools/libs/guest/xg_sr_save.c                 | 188 +++---
 tools/libs/guest/xg_sr_save_x86_hvm.c         |   5 +-
 tools/libs/guest/xg_sr_save_x86_pv.c          |  31 +-
 tools/libs/light/libxl_dom_save.c             |  24 +
 tools/libs/light/libxl_domain.c               |  10 +-
 tools/libs/light/libxl_internal.h             |   6 +
 tools/libs/light/libxl_save_msgs_gen.pl       |   3 +-
 tools/libs/light/libxl_stream_write.c         |   9 +-
 tools/libs/light/libxl_types.idl              |   1 +
 tools/misc/mkrpm                              |  33 +-
 tools/ocaml/libs/xl/xenlight_stubs.c          |   3 +-
 tools/xl/xl_cmdtable.c                        |  26 +-
 tools/xl/xl_migrate.c                         |  54 +-
 tools/xl/xl_saverestore.c                     |   3 +-
 29 files changed, 1436 insertions(+), 430 deletions(-)



From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155538.287124 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnV-000332-Hz; Tue, 13 Jul 2021 18:06:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155538.287124; Tue, 13 Jul 2021 18:06:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnV-00032r-Et; Tue, 13 Jul 2021 18:06:21 +0000
Received: by outflank-mailman (input) for mailman id 155538;
 Tue, 13 Jul 2021 18:06:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MnT-0002UL-Fo
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:19 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b883459d-473c-4d3c-a22e-a01fa3628ede;
 Tue, 13 Jul 2021 18:06:17 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6CtAk
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:12 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b883459d-473c-4d3c-a22e-a01fa3628ede
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199572;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=4WYZHRcGpgtt0AApxzyOy4HkByS6ppN/3uviqFvGNT0=;
    b=gtSK6ABErb1YI8s+5/58wut9xJISpnDjs25U6sS+QGQDeyPNXkZ2MM7VY3ekmJt/uC
    22VYTQ7goGuzoXZTubM2lITtegcQrARH5NGJjB4y2OZRCzsvWozHG1MrMkNzEvkhaYZG
    nAhHQb6CquW7HEh+HiwJ+9u0UaT9AF7pOuOJ34r94KSsnCq8YK2mN7zXNrh8abNFPP/l
    j1iLhqTykQ0MSmpJRpVgFUzDOC5kgKb2EkgXmb3E9bqg2mQ0LOU0/XygzaaTQj/hnmDz
    gtG/FG+CGug5iv5YyOxWtbDwXjTFlgsmULXQDowbOx9qUkpuFfLABMmSiqlAguK0hHFM
    lGdg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 03/31] tools: add API to work with sevaral bits at once
Date: Tue, 13 Jul 2021 20:05:37 +0200
Message-Id: <20210713180605.12096-4-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Introduce new API to test if a fixed number of bits is clear or set,
and clear or set them all at once.

The caller has to make sure the input bitnumber is a multiple of BITS_PER_LONG.

This API avoids the loop over each bit in a known range just to see
if all of them are either clear or set.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
v02:
- change return type from int to bool (jgross)
---
 tools/libs/ctrl/xc_bitops.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/tools/libs/ctrl/xc_bitops.h b/tools/libs/ctrl/xc_bitops.h
index f0bac4a071..8e8c6efb45 100644
--- a/tools/libs/ctrl/xc_bitops.h
+++ b/tools/libs/ctrl/xc_bitops.h
@@ -3,6 +3,7 @@
 
 /* bitmap operations for single threaded access */
 
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -77,4 +78,31 @@ static inline void bitmap_or(void *_dst, const void *_other,
         dst[i] |= other[i];
 }
 
+static inline bool test_bit_long_set(unsigned long nr_base, const void *_addr)
+{
+    const unsigned long *addr = _addr;
+    unsigned long val = addr[nr_base / BITS_PER_LONG];
+
+    return val == ~0;
+}
+
+static inline bool test_bit_long_clear(unsigned long nr_base, const void *_addr)
+{
+    const unsigned long *addr = _addr;
+    unsigned long val = addr[nr_base / BITS_PER_LONG];
+
+    return val == 0;
+}
+
+static inline void clear_bit_long(unsigned long nr_base, void *_addr)
+{
+    unsigned long *addr = _addr;
+    addr[nr_base / BITS_PER_LONG] = 0;
+}
+
+static inline void set_bit_long(unsigned long nr_base, void *_addr)
+{
+    unsigned long *addr = _addr;
+    addr[nr_base / BITS_PER_LONG] = ~0;
+}
 #endif  /* XC_BITOPS_H */


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155539.287135 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnX-0003ML-SU; Tue, 13 Jul 2021 18:06:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155539.287135; Tue, 13 Jul 2021 18:06:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MnX-0003MB-OV; Tue, 13 Jul 2021 18:06:23 +0000
Received: by outflank-mailman (input) for mailman id 155539;
 Tue, 13 Jul 2021 18:06:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MnW-0002kr-T2
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:22 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [81.169.146.167])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04ccd15e-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:17 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6BtAj
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:11 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 04ccd15e-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199572;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=G9MXmcB02gC5L6Rf3KqCQCmQRU/JibmaTKTy7tmcVlI=;
    b=pQ5/nQNGQg0JTqc78E/qLUshNNM7s61SiAI126cpuRIVtR+uUzFWR5MvQNfV2RaYZF
    dwFUiVK3cSBvF8Gme1wOEyS3sfwPkY+13sZ6QTreEt8L4IrPnjkdBa5f/Fw9P3rMhgwX
    kHV3mZp2Yc5uMON8VXYpFG48xKUbjtY4slTIDA+NYS1fFTyOTbztevO7MDjBvbkB1n+A
    O+gfYWLuHrG01HwpaneYYrwgXbvok+PQ92UZbWdThNu5zM5hdesO6bP4B6bQ/0PxCZRA
    Q/5Q9TuE3TCTxFshFxXuPNjpeKLrD3ZUJDJ//M7TcFop+79jZqpq7qBqjho2v7qOLvXE
    rn/g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210713 02/31] hotplug/Linux: fix starting of xenstored with restarting systemd
Date: Tue, 13 Jul 2021 20:05:36 +0200
Message-Id: <20210713180605.12096-3-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

A hard to trigger race with another unrelated systemd service and
xenstored.service unveiled a bug in the way how xenstored is launched
with systemd.

launch-xenstore may start either a daemon or a domain. In case a domain
is used, systemd-notify was called. If another service triggered a
restart of systemd while xenstored.service was executed, systemd may
temporary lose track of services with Type=notify. As a result,
xenstored.service would be marked as failed and units that depend on it
will not be started. This breaks the enire Xen toolstack.

The chain of events is basically: xenstored.service sends the
notification to systemd, this is a one-way event. Then systemd may be
restarted by the other unit. During this time, xenstored.service is done
and exits. Once systemd is done with its restart, it collects the pending
notifications and childs. If it does not find the unit which sent the
notification it will declare it as failed.

A workaround for this scenario is to leave the child processes running
for a short time after sending the "READY=1" notification. If systemd
happens to restart it will still find the unit it launched.

Adjust the callers of launch-xenstore to specifiy the init system:
Do not fork xenstored with systemd, preserve pid. This wil also avoid
the need for a sleep because the process which sent the "READY=1" (the
previously forked child) is still alive.

Remove the --pid-file in the systemd case because the pid of the child
is known, and the file had probably little effect anyway due to lack of
PidFile= and Type=forking in the unit file.

Be verbose about xenstored startup only with sysv to avoid interleaved
output in systemd journal. Do the same also for domain case, even if is
not strictly needed because init-xenstore-domain has no output.

The fix for upstream systemd which is supposed to fix it:
575b300b795b6 ("pid1: rework how we dispatch SIGCHLD and other signals")

Signed-off-by: Olaf Hering <olaf@aepfle.de>

---
v04:
- do mkdir unconditionally because init-xenstore-domain writes the domid to
  xenstored.pid
v03:
- remove run_xenstored function, follow style of shell built-in test function
v02:
- preserve Type=notify
---
 tools/hotplug/Linux/init.d/xencommons.in      |  2 +-
 tools/hotplug/Linux/launch-xenstore.in        | 40 ++++++++++++++-----
 .../Linux/systemd/xenstored.service.in        |  2 +-
 3 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/tools/hotplug/Linux/init.d/xencommons.in b/tools/hotplug/Linux/init.d/xencommons.in
index 7fd6903b98..dcb0ce4b73 100644
--- a/tools/hotplug/Linux/init.d/xencommons.in
+++ b/tools/hotplug/Linux/init.d/xencommons.in
@@ -60,7 +60,7 @@ do_start () {
 	mkdir -m700 -p ${XEN_LOCK_DIR}
 	mkdir -p ${XEN_LOG_DIR}
 
-	@XEN_SCRIPT_DIR@/launch-xenstore || exit 1
+	@XEN_SCRIPT_DIR@/launch-xenstore 'sysv' || exit 1
 
 	echo Setting domain 0 name, domid and JSON config...
 	${LIBEXEC_BIN}/xen-init-dom0 ${XEN_DOM0_UUID}
diff --git a/tools/hotplug/Linux/launch-xenstore.in b/tools/hotplug/Linux/launch-xenstore.in
index 019f9d6f4d..d40c66482a 100644
--- a/tools/hotplug/Linux/launch-xenstore.in
+++ b/tools/hotplug/Linux/launch-xenstore.in
@@ -15,6 +15,17 @@
 # License along with this library; If not, see <http://www.gnu.org/licenses/>.
 #
 
+initd=$1
+
+case "$initd" in
+	sysv) nonl='-n' ;;
+	systemd) nonl= ;;
+	*)
+	echo "first argument must be 'sysv' or 'systemd'"
+	exit 1
+	;;
+esac
+
 XENSTORED=@XENSTORED@
 
 . @XEN_SCRIPT_DIR@/hotplugpath.sh
@@ -44,14 +55,16 @@ timeout_xenstore () {
 	return 0
 }
 
-test_xenstore && exit 0
+mkdir -p @XEN_RUN_DIR@
+
+if test "$initd" = 'sysv' ; then
+	test_xenstore && exit 0
+fi
 
 test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons
 
 [ "$XENSTORETYPE" = "" ] && XENSTORETYPE=daemon
 
-/bin/mkdir -p @XEN_RUN_DIR@
-
 [ "$XENSTORETYPE" = "daemon" ] && {
 	[ -z "$XENSTORED_TRACE" ] || XENSTORED_ARGS="$XENSTORED_ARGS -T @XEN_LOG_DIR@/xenstored-trace.log"
 	[ -z "$XENSTORED" ] && XENSTORED=@XENSTORED@
@@ -59,13 +72,15 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 		echo "No xenstored found"
 		exit 1
 	}
+	[ "$initd" = 'sysv' ] && {
+		echo $nonl Starting $XENSTORED...
+		$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
+		timeout_xenstore $XENSTORED || exit 1
+		exit 0
+	}
 
-	echo -n Starting $XENSTORED...
-	$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
-
-	systemd-notify --booted 2>/dev/null || timeout_xenstore $XENSTORED || exit 1
-
-	exit 0
+	exec $XENSTORED -N $XENSTORED_ARGS
+	exit 1
 }
 
 [ "$XENSTORETYPE" = "domain" ] && {
@@ -75,9 +90,12 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 	XENSTORE_DOMAIN_ARGS="$XENSTORE_DOMAIN_ARGS --memory $XENSTORE_DOMAIN_SIZE"
 	[ -z "$XENSTORE_MAX_DOMAIN_SIZE" ] || XENSTORE_DOMAIN_ARGS="$XENSTORE_DOMAIN_ARGS --maxmem $XENSTORE_MAX_DOMAIN_SIZE"
 
-	echo -n Starting $XENSTORE_DOMAIN_KERNEL...
+	echo $nonl Starting $XENSTORE_DOMAIN_KERNEL...
 	${LIBEXEC_BIN}/init-xenstore-domain $XENSTORE_DOMAIN_ARGS || exit 1
-	systemd-notify --ready 2>/dev/null
+	[ "$initd" = 'systemd' ] && {
+		systemd-notify --ready
+		sleep 9
+	}
 
 	exit 0
 }
diff --git a/tools/hotplug/Linux/systemd/xenstored.service.in b/tools/hotplug/Linux/systemd/xenstored.service.in
index 80c1d408a5..c226eb3635 100644
--- a/tools/hotplug/Linux/systemd/xenstored.service.in
+++ b/tools/hotplug/Linux/systemd/xenstored.service.in
@@ -11,7 +11,7 @@ Type=notify
 NotifyAccess=all
 RemainAfterExit=true
 ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
-ExecStart=@XEN_SCRIPT_DIR@/launch-xenstore
+ExecStart=@XEN_SCRIPT_DIR@/launch-xenstore 'systemd'
 
 [Install]
 WantedBy=multi-user.target


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155540.287146 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mna-0003fq-5m; Tue, 13 Jul 2021 18:06:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155540.287146; Tue, 13 Jul 2021 18:06:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mna-0003fd-20; Tue, 13 Jul 2021 18:06:26 +0000
Received: by outflank-mailman (input) for mailman id 155540;
 Tue, 13 Jul 2021 18:06:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MnY-0002UL-GA
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:24 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.169])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b220a611-2cbe-434e-8ba0-601220fb6ed2;
 Tue, 13 Jul 2021 18:06:19 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6DtAn
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:13 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b220a611-2cbe-434e-8ba0-601220fb6ed2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199573;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=Clrkbg11Ho2H2QvphK9GJKKzvhCVY4UGRclGnlEVBNo=;
    b=ncMC99+8T5s1sxnqRqUJetKk4Ynh023mspDlqYFfw21vrPc9vPmbwd4iNgTktq39zg
    5P2NX4LhClwagTbO9H2zaxMPd1Aj4d1iv1uDj+GUp3bG2nDEpLuO7WXlhZ9HONA+7DdP
    KARztatEq/Rc251lD7N2vUB6lTwbWxCg+JvcK5k7v6+x3JdfTZDbPWXB9uKLS1hwYkQn
    AAIHv0u8p34wWirG59r9QG/zhSYSDeSylI5/JgSfG67PqSWGh5YovuKXOWAMhOft0t1/
    mpnsFdsKQYHYl9EKkLdKFo50ZmHwk4Wxzs4bQqjd34T/2FRiCemmLCn1I5MelgmGU2FY
    5NSg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 06/31] tools: show migration transfer rate in send_dirty_pages
Date: Tue, 13 Jul 2021 20:05:40 +0200
Message-Id: <20210713180605.12096-7-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Show how fast domU pages are transferred in each iteration.

The relevant data is how fast the pfns travel, not so much how much
protocol overhead exists. So the reported MiB/sec is just for pfns.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
v02:
- rearrange MiB_sec calculation (jgross)
---
 tools/libs/guest/xg_sr_common.h |  2 ++
 tools/libs/guest/xg_sr_save.c   | 46 +++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 36d45ef56f..2e70cc6269 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -238,6 +238,8 @@ struct xc_sr_context
             bool debug;
 
             unsigned long p2m_size;
+            size_t pages_sent;
+            size_t overhead_sent;
 
             struct precopy_stats stats;
 
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 3fce41b6cf..00b81033a9 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -1,5 +1,6 @@
 #include <assert.h>
 #include <arpa/inet.h>
+#include <time.h>
 
 #include "xg_sr_common.h"
 
@@ -238,6 +239,8 @@ static int write_batch(struct xc_sr_context *ctx)
     iov[3].iov_len = nr_pfns * sizeof(*rec_pfns);
 
     iovcnt = 4;
+    ctx->save.pages_sent += nr_pages;
+    ctx->save.overhead_sent += sizeof(rec) + sizeof(hdr) + nr_pfns * sizeof(*rec_pfns);
 
     if ( nr_pages )
     {
@@ -357,6 +360,42 @@ static int suspend_domain(struct xc_sr_context *ctx)
     return 0;
 }
 
+static void show_transfer_rate(struct xc_sr_context *ctx, struct timespec *start)
+{
+    xc_interface *xch = ctx->xch;
+    struct timespec end = {}, diff = {};
+    size_t ms, MiB_sec;
+
+    if (!ctx->save.pages_sent)
+        return;
+
+    if ( clock_gettime(CLOCK_MONOTONIC, &end) )
+        PERROR("clock_gettime");
+
+    if ( (end.tv_nsec - start->tv_nsec) < 0 )
+    {
+        diff.tv_sec = end.tv_sec - start->tv_sec - 1;
+        diff.tv_nsec = end.tv_nsec - start->tv_nsec + (1000U*1000U*1000U);
+    }
+    else
+    {
+        diff.tv_sec = end.tv_sec - start->tv_sec;
+        diff.tv_nsec = end.tv_nsec - start->tv_nsec;
+    }
+
+    ms = (diff.tv_nsec / (1000U*1000U));
+    ms += (diff.tv_sec * 1000U);
+    if (!ms)
+        ms = 1;
+
+    MiB_sec = (ctx->save.pages_sent * PAGE_SIZE * 1000U) / ms / (1024U*1024U);
+
+    errno = 0;
+    IPRINTF("%s: %zu bytes + %zu pages in %ld.%09ld sec, %zu MiB/sec", __func__,
+            ctx->save.overhead_sent, ctx->save.pages_sent,
+            diff.tv_sec, diff.tv_nsec, MiB_sec);
+}
+
 /*
  * Send a subset of pages in the guests p2m, according to the dirty bitmap.
  * Used for each subsequent iteration of the live migration loop.
@@ -370,9 +409,15 @@ static int send_dirty_pages(struct xc_sr_context *ctx,
     xen_pfn_t p;
     unsigned long written;
     int rc;
+    struct timespec start = {};
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->save.dirty_bitmap_hbuf);
 
+    ctx->save.pages_sent = 0;
+    ctx->save.overhead_sent = 0;
+    if ( clock_gettime(CLOCK_MONOTONIC, &start) )
+        PERROR("clock_gettime");
+
     for ( p = 0, written = 0; p < ctx->save.p2m_size; ++p )
     {
         if ( !test_bit(p, dirty_bitmap) )
@@ -396,6 +441,7 @@ static int send_dirty_pages(struct xc_sr_context *ctx,
     if ( written > entries )
         DPRINTF("Bitmap contained more entries than expected...");
 
+    show_transfer_rate(ctx, &start);
     xc_report_progress_step(xch, entries, entries);
 
     return ctx->save.ops.check_vm_state(ctx);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155541.287157 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnd-00043C-GH; Tue, 13 Jul 2021 18:06:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155541.287157; Tue, 13 Jul 2021 18:06:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnd-00042y-CI; Tue, 13 Jul 2021 18:06:29 +0000
Received: by outflank-mailman (input) for mailman id 155541;
 Tue, 13 Jul 2021 18:06:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnb-0002kr-TC
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:27 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.171])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04c70dca-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:18 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6DtAm
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:13 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 04c70dca-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199573;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=ZZ0YSTyEBhj0g0V+Ydgj4/Yi9sY29bXNxKbK7IWr/j0=;
    b=or2CNPZebb1mJf1DOfIfMr473GTLnQNrbvFumssG8yG0z+Smm2mRS83ULtrtnP75ZH
    TgmQuSoPN/BR1OBl7L6WB5GPFXElXHstZ3aK3FFmQzAFqND5XaAN/Vudw7UNcqV0QdNQ
    BjqonEGOaPVDKgRPoU0rd/Bme3L3sPasN3Z0kSNkraLKqyaBbnyLfnv5Tb0RmAmfUz+i
    CNDqpIWt8jxdxSEf2Ki3vbMQAp9XQIC5LMQQpTwn1BUYztfAv6n7/uYumOMrf6yzxcgn
    UfP+eg4KoCg4CeeMLIH2BzV106unOEyMB+IHTnlPsJptLQTf91ZHVfNLCfNOzqqHnW+2
    gk2w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 05/31] tools: add readv_exact to libxenctrl
Date: Tue, 13 Jul 2021 20:05:39 +0200
Message-Id: <20210713180605.12096-6-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Read a batch of iovec's.

Short reads are the common case, finish the trailing iov with read_exact.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
v2:
- add comment to short-read handling
---
 tools/libs/ctrl/xc_private.c | 57 +++++++++++++++++++++++++++++++++++-
 tools/libs/ctrl/xc_private.h |  1 +
 2 files changed, 57 insertions(+), 1 deletion(-)

diff --git a/tools/libs/ctrl/xc_private.c b/tools/libs/ctrl/xc_private.c
index c0422662f0..bab9a31a70 100644
--- a/tools/libs/ctrl/xc_private.c
+++ b/tools/libs/ctrl/xc_private.c
@@ -698,8 +698,23 @@ int write_exact(int fd, const void *data, size_t size)
 
 #if defined(__MINIOS__)
 /*
- * MiniOS's libc doesn't know about writev(). Implement it as multiple write()s.
+ * MiniOS's libc doesn't know about readv/writev().
+ * Implement it as multiple read/write()s.
  */
+int readv_exact(int fd, const struct iovec *iov, int iovcnt)
+{
+    int rc, i;
+
+    for ( i = 0; i < iovcnt; ++i )
+    {
+        rc = read_exact(fd, iov[i].iov_base, iov[i].iov_len);
+        if ( rc )
+            return rc;
+    }
+
+    return 0;
+}
+
 int writev_exact(int fd, const struct iovec *iov, int iovcnt)
 {
     int rc, i;
@@ -714,6 +729,46 @@ int writev_exact(int fd, const struct iovec *iov, int iovcnt)
     return 0;
 }
 #else
+int readv_exact(int fd, const struct iovec *iov, int iovcnt)
+{
+    int rc = 0, idx = 0;
+    ssize_t len;
+
+    while ( idx < iovcnt )
+    {
+        len = readv(fd, &iov[idx], min(iovcnt - idx, IOV_MAX));
+        if ( len == -1 && errno == EINTR )
+            continue;
+        if ( len <= 0 )
+        {
+            rc = -1;
+            goto out;
+        }
+
+        /* Finish a potential short read in the last iov */
+        while ( len > 0 && idx < iovcnt )
+        {
+            if ( len >= iov[idx].iov_len )
+            {
+                len -= iov[idx].iov_len;
+            }
+            else
+            {
+                void *p = iov[idx].iov_base + len;
+                size_t l = iov[idx].iov_len - len;
+
+                rc = read_exact(fd, p, l);
+                if ( rc )
+                    goto out;
+                len = 0;
+            }
+            idx++;
+        }
+    }
+out:
+    return rc;
+}
+
 int writev_exact(int fd, const struct iovec *iov, int iovcnt)
 {
     struct iovec *local_iov = NULL;
diff --git a/tools/libs/ctrl/xc_private.h b/tools/libs/ctrl/xc_private.h
index 3e299b943f..66086ef19f 100644
--- a/tools/libs/ctrl/xc_private.h
+++ b/tools/libs/ctrl/xc_private.h
@@ -410,6 +410,7 @@ int xc_flush_mmu_updates(xc_interface *xch, struct xc_mmu *mmu);
 
 /* Return 0 on success; -1 on error setting errno. */
 int read_exact(int fd, void *data, size_t size); /* EOF => -1, errno=0 */
+int readv_exact(int fd, const struct iovec *iov, int iovcnt);
 int write_exact(int fd, const void *data, size_t size);
 int writev_exact(int fd, const struct iovec *iov, int iovcnt);
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155542.287167 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnf-0004Rl-QV; Tue, 13 Jul 2021 18:06:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155542.287167; Tue, 13 Jul 2021 18:06:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnf-0004RT-MM; Tue, 13 Jul 2021 18:06:31 +0000
Received: by outflank-mailman (input) for mailman id 155542;
 Tue, 13 Jul 2021 18:06:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnd-0002UL-GI
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:29 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.170])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d82de438-271f-492e-98e5-d7dd1528d28f;
 Tue, 13 Jul 2021 18:06:19 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6DtAo
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:13 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d82de438-271f-492e-98e5-d7dd1528d28f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199574;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=2FOHALqjtAayiATag1w1tv+uvw3U+jkLCXoGYWrbCds=;
    b=VO3jOq8wx19i17M6djKvvv/rVPvoCedUnBlNa2YflKQht9tDddIEXbmES7UG+Yr01N
    OTB/5NSLG+V/an6eErcPVeqqtATRJkX+NgxBqZweHpvzbjcE1ceMWIkqJZvssjYu58j8
    6QnNMi2bl8Nc6/WDFXKlh64L8jtDLezKsrE5g5rhNKa/mmaN3BvQzcW9rVisOx8n7BZz
    GvWh+EnRgbstv5CEyCzn8YgnM0aPaJahvGKajWPvkOeEYWRBEZYeeErf7/0D/te9hPF6
    u0tDjCIDx25bBjCPzyYYMF7W8qr0OXxj7pa/umD/GUjl6EILnS3fITrfEKxJ3MBXxFMB
    OSZw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 07/31] tools: save: preallocate mfns array
Date: Tue, 13 Jul 2021 20:05:41 +0200
Message-Id: <20210713180605.12096-8-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch, see add_to_batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h |  1 +
 tools/libs/guest/xg_sr_save.c   | 25 +++++++++++++------------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 2e70cc6269..fc403adc64 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -244,6 +244,7 @@ struct xc_sr_context
             struct precopy_stats stats;
 
             xen_pfn_t *batch_pfns;
+            xen_pfn_t *mfns;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 00b81033a9..0abe63a377 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -88,7 +88,7 @@ static int write_checkpoint_record(struct xc_sr_context *ctx)
 static int write_batch(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = NULL, *types = NULL;
+    xen_pfn_t *types = NULL;
     void *guest_mapping = NULL;
     void **guest_data = NULL;
     void **local_pages = NULL;
@@ -105,8 +105,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Mfns of the batch pfns. */
-    mfns = malloc(nr_pfns * sizeof(*mfns));
     /* Types of the batch pfns. */
     types = malloc(nr_pfns * sizeof(*types));
     /* Errors from attempting to map the gfns. */
@@ -118,7 +116,7 @@ static int write_batch(struct xc_sr_context *ctx)
     /* iovec[] for writev(). */
     iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !mfns || !types || !errors || !guest_data || !local_pages || !iov )
+    if ( !types || !errors || !guest_data || !local_pages || !iov )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -127,11 +125,11 @@ static int write_batch(struct xc_sr_context *ctx)
 
     for ( i = 0; i < nr_pfns; ++i )
     {
-        types[i] = mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
+        types[i] = ctx->save.mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
                                                       ctx->save.batch_pfns[i]);
 
         /* Likely a ballooned page. */
-        if ( mfns[i] == INVALID_MFN )
+        if ( ctx->save.mfns[i] == INVALID_MFN )
         {
             set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
             ++ctx->save.nr_deferred_pages;
@@ -150,20 +148,21 @@ static int write_batch(struct xc_sr_context *ctx)
     {
         if ( !is_known_page_type(types[i]) )
         {
-            ERROR("Unknown type %#"PRIpfn" for pfn %#"PRIpfn, types[i], mfns[i]);
+            ERROR("Unknown type %#"PRIpfn" for pfn %#"PRIpfn,
+                  types[i], ctx->save.mfns[i]);
             goto err;
         }
 
         if ( !page_type_has_stream_data(types[i]) )
             continue;
 
-        mfns[nr_pages++] = mfns[i];
+        ctx->save.mfns[nr_pages++] = ctx->save.mfns[i];
     }
 
     if ( nr_pages > 0 )
     {
         guest_mapping = xenforeignmemory_map(
-            xch->fmem, ctx->domid, PROT_READ, nr_pages, mfns, errors);
+            xch->fmem, ctx->domid, PROT_READ, nr_pages, ctx->save.mfns, errors);
         if ( !guest_mapping )
         {
             PERROR("Failed to map guest pages");
@@ -179,7 +178,7 @@ static int write_batch(struct xc_sr_context *ctx)
             if ( errors[p] )
             {
                 ERROR("Mapping of pfn %#"PRIpfn" (mfn %#"PRIpfn") failed %d",
-                      ctx->save.batch_pfns[i], mfns[p], errors[p]);
+                      ctx->save.batch_pfns[i], ctx->save.mfns[p], errors[p]);
                 goto err;
             }
 
@@ -277,7 +276,6 @@ static int write_batch(struct xc_sr_context *ctx)
     free(guest_data);
     free(errors);
     free(types);
-    free(mfns);
 
     return rc;
 }
@@ -851,9 +849,11 @@ static int setup(struct xc_sr_context *ctx)
         xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)));
     ctx->save.batch_pfns = malloc(MAX_BATCH_SIZE *
                                   sizeof(*ctx->save.batch_pfns));
+    ctx->save.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.mfns));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
-    if ( !ctx->save.batch_pfns || !dirty_bitmap || !ctx->save.deferred_pages )
+    if ( !ctx->save.batch_pfns || !ctx->save.mfns ||
+         !dirty_bitmap || !ctx->save.deferred_pages )
     {
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
               " deferred pages");
@@ -884,6 +884,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
+    free(ctx->save.mfns);
     free(ctx->save.batch_pfns);
 }
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155543.287179 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mni-0004v0-DV; Tue, 13 Jul 2021 18:06:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155543.287179; Tue, 13 Jul 2021 18:06:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mni-0004up-9A; Tue, 13 Jul 2021 18:06:34 +0000
Received: by outflank-mailman (input) for mailman id 155543;
 Tue, 13 Jul 2021 18:06:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mng-0002kr-Tc
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:32 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.50])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 05524e76-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:20 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6CtAl
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:12 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 05524e76-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199573;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=sGK5MVxjAVkaDlLv2beeaP+qQqyTAMbH073gSSJ9pMg=;
    b=j9zo2skvObV82f3sAdqJlzNQ2egJfGE23XTdygGlcV6tTMcE1vM/Xa4T1jpmnnbF7U
    v32DmdcLl7kopNAWu03Z/Q3/vV71CdVanXp+hgD0rFOdpebmPKWvPdh5FZWq+mkoVuzD
    fftBP6GZQLYXwVy3TEa7IwgO7dMTztdTAUb2jUfh0inFhLG1i3IyksokZ+wUQVdTDpEs
    wOTVucqVf2NxEX07JQoTW9MhLNkz3qz3B1TJr2RNWfjEgtcUxSc4deKX9H1B0kROP2E+
    8j7bj3PvTQfBaLvbVIUtQv+OcRLPKTmNDL6EZX6nfZ/lsQtzTQIuKDDAyfJWm51K31Yo
    l4yg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: [PATCH v20210713 04/31] xl: fix description of migrate --debug
Date: Tue, 13 Jul 2021 20:05:38 +0200
Message-Id: <20210713180605.12096-5-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

xl migrate --debug used to track every pfn in every batch of pages.
But these times are gone. The code in xc_domain_save is the consumer
of this knob, now may enable verification mode.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
v03:
- adjust to describe what --debug would do when the code which
  consumes this knob is fixed.
v02:
- the option has no effect anymore
---
 docs/man/xl.1.pod.in   | 4 +++-
 tools/xl/xl_cmdtable.c | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index e2176bd696..bae557b1de 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -481,7 +481,9 @@ domain.
 
 =item B<--debug>
 
-Display huge (!) amount of debug information during the migration process.
+This enables verification mode, which will transfer the entire domU memory
+once more to the receiving host to make sure the content is identical on
+both sides.
 
 =item B<-p>
 
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index 661323d488..e4f27a3248 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -172,7 +172,7 @@ const struct cmd_spec cmd_table[] = {
       "                migrate-receive [-d -e]\n"
       "-e              Do not wait in the background (on <host>) for the death\n"
       "                of the domain.\n"
-      "--debug         Print huge (!) amount of debug during the migration process.\n"
+      "--debug         Enable verification mode.\n"
       "-p              Do not unpause domain after migrating it.\n"
       "-D              Preserve the domain id"
     },


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155544.287190 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnk-0005Ja-PS; Tue, 13 Jul 2021 18:06:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155544.287190; Tue, 13 Jul 2021 18:06:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnk-0005JJ-K8; Tue, 13 Jul 2021 18:06:36 +0000
Received: by outflank-mailman (input) for mailman id 155544;
 Tue, 13 Jul 2021 18:06:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mni-0002UL-GY
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:34 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.84])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7b4da61c-8660-40a3-9938-c1ee21a1e524;
 Tue, 13 Jul 2021 18:06:21 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6EtAq
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:14 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7b4da61c-8660-40a3-9938-c1ee21a1e524
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199575;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=JHY4TWvZbK0Ujx5K1FzKpVZtdjbItuCiEYMs+LDvHbM=;
    b=ljQs4jTzCjTxtbdo8sA7N9xF0Frzyd3ti0GAU/YGeaD7VRXzfPhSOkiqaYr2A0oUEi
    2FmWlhYXYGqpOgyoA+xVhj8VwyraZda50fG1ARqL4PwvAFBcL9o366CrhXst+Wh1fMCA
    2KyCI+nIy2UERtzUCcbR83PRD8/Z6hP9HZI3SY5+vYNJG+lXVj3c95LxB+pEdx3rdgEE
    ZIiN80EuBYQ0UjKaR7E+yP5rGq720osynus+Jzlgp8ZRr0lpaKpJ3UsttsWSkW6XD+JR
    JAjNy9txaZCln6fLDH1BQ5jDWhBBlC5yY1488B9HlueYEMGAI7MMY0yZhytJpLEfSjty
    VgEg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 09/31] tools: save: preallocate errors array
Date: Tue, 13 Jul 2021 20:05:43 +0200
Message-Id: <20210713180605.12096-10-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h |  1 +
 tools/libs/guest/xg_sr_save.c   | 20 ++++++++++----------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index d80de6e7da..d2b838ed33 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -246,6 +246,7 @@ struct xc_sr_context
             xen_pfn_t *batch_pfns;
             xen_pfn_t *mfns;
             xen_pfn_t *types;
+            int *errors;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 29a5fe82f0..5b416fda60 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -91,7 +91,7 @@ static int write_batch(struct xc_sr_context *ctx)
     void *guest_mapping = NULL;
     void **guest_data = NULL;
     void **local_pages = NULL;
-    int *errors = NULL, rc = -1;
+    int rc = -1;
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
     void *page, *orig_page;
@@ -104,8 +104,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Errors from attempting to map the gfns. */
-    errors = malloc(nr_pfns * sizeof(*errors));
     /* Pointers to page data to send.  Mapped gfns or local allocations. */
     guest_data = calloc(nr_pfns, sizeof(*guest_data));
     /* Pointers to locally allocated pages.  Need freeing. */
@@ -113,7 +111,7 @@ static int write_batch(struct xc_sr_context *ctx)
     /* iovec[] for writev(). */
     iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !errors || !guest_data || !local_pages || !iov )
+    if ( !guest_data || !local_pages || !iov )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -158,8 +156,8 @@ static int write_batch(struct xc_sr_context *ctx)
 
     if ( nr_pages > 0 )
     {
-        guest_mapping = xenforeignmemory_map(
-            xch->fmem, ctx->domid, PROT_READ, nr_pages, ctx->save.mfns, errors);
+        guest_mapping = xenforeignmemory_map(xch->fmem, ctx->domid, PROT_READ,
+            nr_pages, ctx->save.mfns, ctx->save.errors);
         if ( !guest_mapping )
         {
             PERROR("Failed to map guest pages");
@@ -172,10 +170,11 @@ static int write_batch(struct xc_sr_context *ctx)
             if ( !page_type_has_stream_data(ctx->save.types[i]) )
                 continue;
 
-            if ( errors[p] )
+            if ( ctx->save.errors[p] )
             {
                 ERROR("Mapping of pfn %#"PRIpfn" (mfn %#"PRIpfn") failed %d",
-                      ctx->save.batch_pfns[i], ctx->save.mfns[p], errors[p]);
+                      ctx->save.batch_pfns[i], ctx->save.mfns[p],
+                      ctx->save.errors[p]);
                 goto err;
             }
 
@@ -271,7 +270,6 @@ static int write_batch(struct xc_sr_context *ctx)
     free(iov);
     free(local_pages);
     free(guest_data);
-    free(errors);
 
     return rc;
 }
@@ -847,10 +845,11 @@ static int setup(struct xc_sr_context *ctx)
                                   sizeof(*ctx->save.batch_pfns));
     ctx->save.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.mfns));
     ctx->save.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.types));
+    ctx->save.errors = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.errors));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
     if ( !ctx->save.batch_pfns || !ctx->save.mfns || !ctx->save.types ||
-         !dirty_bitmap || !ctx->save.deferred_pages )
+         !ctx->save.errors || !dirty_bitmap || !ctx->save.deferred_pages )
     {
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
               " deferred pages");
@@ -881,6 +880,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
+    free(ctx->save.errors);
     free(ctx->save.types);
     free(ctx->save.mfns);
     free(ctx->save.batch_pfns);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155545.287201 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnn-0005kW-6b; Tue, 13 Jul 2021 18:06:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155545.287201; Tue, 13 Jul 2021 18:06:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnn-0005jo-0s; Tue, 13 Jul 2021 18:06:39 +0000
Received: by outflank-mailman (input) for mailman id 155545;
 Tue, 13 Jul 2021 18:06:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnl-0002kr-TS
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:37 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 05524e77-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:20 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6EtAp
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:14 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 05524e77-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199574;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=LtyVn9iWhbeG3QGf2nqJ2jlqNwljeyLy9bqS6muxnCY=;
    b=TwKmNEFGrByXOUSKlKyVErjP2hkP9l9R4JHcqbeop4rPR+2Ihe1ItAOP8mHGOSz2zw
    msCAcjiJ8UYk8Srchu1mPulRWdnpVi2SGwA1pKEFiNnnM6FdYn1ZkSz13UqG4RJJfHvl
    1yTz1mqfJU69hYPBsujLWN0cCDqCI2bZ4RF9XDQptM84w9+buvB4PuCBfUkSwchaI9Li
    umqESpwS+me9yWnyMdmQk9qenWTiCWtD8ffiPQuE7ZxE4wsnkgxhG71YVHINCSfT3ES1
    v3Xe5Stifm8ZMJFPcFUk1NqWHbCrFc4Sc1yNjkmT79ZiNsgxkM98YoniQMOP7kCscPa5
    n8sw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 08/31] tools: save: preallocate types array
Date: Tue, 13 Jul 2021 20:05:42 +0200
Message-Id: <20210713180605.12096-9-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h |  1 +
 tools/libs/guest/xg_sr_save.c   | 28 +++++++++++++---------------
 2 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index fc403adc64..d80de6e7da 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -245,6 +245,7 @@ struct xc_sr_context
 
             xen_pfn_t *batch_pfns;
             xen_pfn_t *mfns;
+            xen_pfn_t *types;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 0abe63a377..29a5fe82f0 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -88,7 +88,6 @@ static int write_checkpoint_record(struct xc_sr_context *ctx)
 static int write_batch(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *types = NULL;
     void *guest_mapping = NULL;
     void **guest_data = NULL;
     void **local_pages = NULL;
@@ -105,8 +104,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Types of the batch pfns. */
-    types = malloc(nr_pfns * sizeof(*types));
     /* Errors from attempting to map the gfns. */
     errors = malloc(nr_pfns * sizeof(*errors));
     /* Pointers to page data to send.  Mapped gfns or local allocations. */
@@ -116,7 +113,7 @@ static int write_batch(struct xc_sr_context *ctx)
     /* iovec[] for writev(). */
     iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !types || !errors || !guest_data || !local_pages || !iov )
+    if ( !errors || !guest_data || !local_pages || !iov )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -125,7 +122,7 @@ static int write_batch(struct xc_sr_context *ctx)
 
     for ( i = 0; i < nr_pfns; ++i )
     {
-        types[i] = ctx->save.mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
+        ctx->save.types[i] = ctx->save.mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
                                                       ctx->save.batch_pfns[i]);
 
         /* Likely a ballooned page. */
@@ -136,7 +133,7 @@ static int write_batch(struct xc_sr_context *ctx)
         }
     }
 
-    rc = xc_get_pfn_type_batch(xch, ctx->domid, nr_pfns, types);
+    rc = xc_get_pfn_type_batch(xch, ctx->domid, nr_pfns, ctx->save.types);
     if ( rc )
     {
         PERROR("Failed to get types for pfn batch");
@@ -146,14 +143,14 @@ static int write_batch(struct xc_sr_context *ctx)
 
     for ( i = 0; i < nr_pfns; ++i )
     {
-        if ( !is_known_page_type(types[i]) )
+        if ( !is_known_page_type(ctx->save.types[i]) )
         {
             ERROR("Unknown type %#"PRIpfn" for pfn %#"PRIpfn,
-                  types[i], ctx->save.mfns[i]);
+                  ctx->save.types[i], ctx->save.mfns[i]);
             goto err;
         }
 
-        if ( !page_type_has_stream_data(types[i]) )
+        if ( !page_type_has_stream_data(ctx->save.types[i]) )
             continue;
 
         ctx->save.mfns[nr_pages++] = ctx->save.mfns[i];
@@ -172,7 +169,7 @@ static int write_batch(struct xc_sr_context *ctx)
 
         for ( i = 0, p = 0; i < nr_pfns; ++i )
         {
-            if ( !page_type_has_stream_data(types[i]) )
+            if ( !page_type_has_stream_data(ctx->save.types[i]) )
                 continue;
 
             if ( errors[p] )
@@ -183,7 +180,7 @@ static int write_batch(struct xc_sr_context *ctx)
             }
 
             orig_page = page = guest_mapping + (p * PAGE_SIZE);
-            rc = ctx->save.ops.normalise_page(ctx, types[i], &page);
+            rc = ctx->save.ops.normalise_page(ctx, ctx->save.types[i], &page);
 
             if ( orig_page != page )
                 local_pages[i] = page;
@@ -194,7 +191,7 @@ static int write_batch(struct xc_sr_context *ctx)
                 {
                     set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
                     ++ctx->save.nr_deferred_pages;
-                    types[i] = XEN_DOMCTL_PFINFO_XTAB;
+                    ctx->save.types[i] = XEN_DOMCTL_PFINFO_XTAB;
                     --nr_pages;
                 }
                 else
@@ -223,7 +220,7 @@ static int write_batch(struct xc_sr_context *ctx)
     rec.length += nr_pages * PAGE_SIZE;
 
     for ( i = 0; i < nr_pfns; ++i )
-        rec_pfns[i] = ((uint64_t)(types[i]) << 32) | ctx->save.batch_pfns[i];
+        rec_pfns[i] = ((uint64_t)(ctx->save.types[i]) << 32) | ctx->save.batch_pfns[i];
 
     iov[0].iov_base = &rec.type;
     iov[0].iov_len = sizeof(rec.type);
@@ -275,7 +272,6 @@ static int write_batch(struct xc_sr_context *ctx)
     free(local_pages);
     free(guest_data);
     free(errors);
-    free(types);
 
     return rc;
 }
@@ -850,9 +846,10 @@ static int setup(struct xc_sr_context *ctx)
     ctx->save.batch_pfns = malloc(MAX_BATCH_SIZE *
                                   sizeof(*ctx->save.batch_pfns));
     ctx->save.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.mfns));
+    ctx->save.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.types));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
-    if ( !ctx->save.batch_pfns || !ctx->save.mfns ||
+    if ( !ctx->save.batch_pfns || !ctx->save.mfns || !ctx->save.types ||
          !dirty_bitmap || !ctx->save.deferred_pages )
     {
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
@@ -884,6 +881,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
+    free(ctx->save.types);
     free(ctx->save.mfns);
     free(ctx->save.batch_pfns);
 }


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155546.287212 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnp-0006KQ-O6; Tue, 13 Jul 2021 18:06:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155546.287212; Tue, 13 Jul 2021 18:06:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnp-0006JK-Hq; Tue, 13 Jul 2021 18:06:41 +0000
Received: by outflank-mailman (input) for mailman id 155546;
 Tue, 13 Jul 2021 18:06:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnn-0002UL-Gf
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:39 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2477b7d6-a2ac-427c-997e-ddef9a8e3457;
 Tue, 13 Jul 2021 18:06:23 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6GtAu
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:16 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2477b7d6-a2ac-427c-997e-ddef9a8e3457
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199576;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=PTsQYvP6bBBv2G619w4kDBe3knppN9bIh+m3fSDyz7g=;
    b=labA6MsB39oPGMVWJ22VGeOWY5y7tTfBKBx4UIM2aUQZlpcy9RdUZznD48oXJr59r0
    OyZu/zfPUIW0DdeKGmOZVUNP9eWyUIUtx1ZMgW4iZg4pgWkKeujB1EF3YS2NHRZHJUOM
    fxA62Cai41o4FMSSEugvI8eB1FHwvozRY5qEatmTqL9Ci3e16J6xuRD/jXClDQpPHDzT
    QrlPb3/2mUJrVV9fkFepPsMXn+dLRcZ9gnLru61HaTJQhiZsce8jYIOIHHM8LsYzq1nw
    QpNCFLjOLXFk84j/rkTUM/H0w9L5GehLvB+4H+m6qDK+RC67FCTfXLojplWANNmJtqwf
    j6bA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 13/31] tools: save: preallocate local_pages array
Date: Tue, 13 Jul 2021 20:05:47 +0200
Message-Id: <20210713180605.12096-14-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch.
Allocate the space once.

Adjust the code to use the unmodified src page in case of HVM.
In case of PV the page may need to be normalised, use a private memory
area for this purpose.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h       | 22 ++++++++++---------
 tools/libs/guest/xg_sr_save.c         | 26 ++++------------------
 tools/libs/guest/xg_sr_save_x86_hvm.c |  5 +++--
 tools/libs/guest/xg_sr_save_x86_pv.c  | 31 ++++++++++++++++++---------
 4 files changed, 40 insertions(+), 44 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index b90b35e564..34d4c15b22 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -33,16 +33,12 @@ struct xc_sr_save_ops
      * Optionally transform the contents of a page from being specific to the
      * sending environment, to being generic for the stream.
      *
-     * The page of data at the end of 'page' may be a read-only mapping of a
-     * running guest; it must not be modified.  If no transformation is
-     * required, the callee should leave '*pages' untouched.
+     * The page of data '*src' may be a read-only mapping of a running guest;
+     * it must not be modified. If no transformation is required, the callee
+     * should leave '*src' untouched, and return it via '**ptr'.
      *
-     * If a transformation is required, the callee should allocate themselves
-     * a local page using malloc() and return it via '*page'.
-     *
-     * The caller shall free() '*page' in all cases.  In the case that the
-     * callee encounters an error, it should *NOT* free() the memory it
-     * allocated for '*page'.
+     * If a transformation is required, the callee should provide the
+     * transformed page in a private buffer and return it via '**ptr'.
      *
      * It is valid to fail with EAGAIN if the transformation is not able to be
      * completed at this point.  The page shall be retried later.
@@ -50,7 +46,7 @@ struct xc_sr_save_ops
      * @returns 0 for success, -1 for failure, with errno appropriately set.
      */
     int (*normalise_page)(struct xc_sr_context *ctx, xen_pfn_t type,
-                          void **page);
+                          void *src, unsigned int idx, void **ptr);
 
     /**
      * Set up local environment to save a domain. (Typically querying
@@ -357,6 +353,12 @@ struct xc_sr_context
 
                 union
                 {
+                    struct
+                    {
+                        /* Used by write_batch for modified pages. */
+                        void *normalised_pages;
+                    } save;
+
                     struct
                     {
                         /* State machine for the order of received records. */
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 0ab8b7205c..c74c8d9348 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -89,11 +89,10 @@ static int write_batch(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
     void *guest_mapping = NULL;
-    void **local_pages = NULL;
     int rc = -1;
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
-    void *page, *orig_page;
+    void *src;
     int iovcnt = 0;
     struct xc_sr_rec_page_data_header hdr = { 0 };
     struct xc_sr_record rec = {
@@ -102,16 +101,6 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Pointers to locally allocated pages.  Need freeing. */
-    local_pages = calloc(nr_pfns, sizeof(*local_pages));
-
-    if ( !local_pages )
-    {
-        ERROR("Unable to allocate arrays for a batch of %u pages",
-              nr_pfns);
-        goto err;
-    }
-
     for ( i = 0; i < nr_pfns; ++i )
     {
         ctx->save.types[i] = ctx->save.mfns[i] = ctx->save.ops.pfn_to_gfn(ctx,
@@ -175,11 +164,9 @@ static int write_batch(struct xc_sr_context *ctx)
                 goto err;
             }
 
-            orig_page = page = guest_mapping + (p * PAGE_SIZE);
-            rc = ctx->save.ops.normalise_page(ctx, ctx->save.types[i], &page);
-
-            if ( orig_page != page )
-                local_pages[i] = page;
+            src = guest_mapping + (p * PAGE_SIZE);
+            rc = ctx->save.ops.normalise_page(ctx, ctx->save.types[i], src, i,
+                                              &ctx->save.guest_data[i]);
 
             if ( rc )
             {
@@ -194,8 +181,6 @@ static int write_batch(struct xc_sr_context *ctx)
                 else
                     goto err;
             }
-            else
-                ctx->save.guest_data[i] = page;
 
             rc = -1;
             ++p;
@@ -256,9 +241,6 @@ static int write_batch(struct xc_sr_context *ctx)
  err:
     if ( guest_mapping )
         xenforeignmemory_unmap(xch->fmem, guest_mapping, nr_pages_mapped);
-    for ( i = 0; local_pages && i < nr_pfns; ++i )
-        free(local_pages[i]);
-    free(local_pages);
 
     return rc;
 }
diff --git a/tools/libs/guest/xg_sr_save_x86_hvm.c b/tools/libs/guest/xg_sr_save_x86_hvm.c
index 1634a7bc43..11232b9f1d 100644
--- a/tools/libs/guest/xg_sr_save_x86_hvm.c
+++ b/tools/libs/guest/xg_sr_save_x86_hvm.c
@@ -129,9 +129,10 @@ static xen_pfn_t x86_hvm_pfn_to_gfn(const struct xc_sr_context *ctx,
     return pfn;
 }
 
-static int x86_hvm_normalise_page(struct xc_sr_context *ctx,
-                                  xen_pfn_t type, void **page)
+static int x86_hvm_normalise_page(struct xc_sr_context *ctx, xen_pfn_t type,
+                                  void *src, unsigned int idx, void **ptr)
 {
+    *ptr = src;
     return 0;
 }
 
diff --git a/tools/libs/guest/xg_sr_save_x86_pv.c b/tools/libs/guest/xg_sr_save_x86_pv.c
index 4964f1f7b8..defc044001 100644
--- a/tools/libs/guest/xg_sr_save_x86_pv.c
+++ b/tools/libs/guest/xg_sr_save_x86_pv.c
@@ -999,29 +999,31 @@ static xen_pfn_t x86_pv_pfn_to_gfn(const struct xc_sr_context *ctx,
  * save_ops function.  Performs pagetable normalisation on appropriate pages.
  */
 static int x86_pv_normalise_page(struct xc_sr_context *ctx, xen_pfn_t type,
-                                 void **page)
+                                 void *src, unsigned int idx, void **ptr)
 {
     xc_interface *xch = ctx->xch;
-    void *local_page;
+    void *dst;
     int rc;
 
     type &= XEN_DOMCTL_PFINFO_LTABTYPE_MASK;
 
     if ( type < XEN_DOMCTL_PFINFO_L1TAB || type > XEN_DOMCTL_PFINFO_L4TAB )
+    {
+        *ptr = src;
         return 0;
+    }
 
-    local_page = malloc(PAGE_SIZE);
-    if ( !local_page )
+    if ( idx >= MAX_BATCH_SIZE )
     {
-        ERROR("Unable to allocate scratch page");
-        rc = -1;
-        goto out;
+        ERROR("idx %u out of range", idx);
+        errno = ERANGE;
+        return -1;
     }
 
-    rc = normalise_pagetable(ctx, *page, local_page, type);
-    *page = local_page;
+    dst = ctx->x86.pv.save.normalised_pages + (idx * PAGE_SIZE);
+    rc = normalise_pagetable(ctx, src, dst, type);
+    *ptr = dst;
 
- out:
     return rc;
 }
 
@@ -1031,8 +1033,16 @@ static int x86_pv_normalise_page(struct xc_sr_context *ctx, xen_pfn_t type,
  */
 static int x86_pv_setup(struct xc_sr_context *ctx)
 {
+    xc_interface *xch = ctx->xch;
     int rc;
 
+    ctx->x86.pv.save.normalised_pages = malloc(MAX_BATCH_SIZE * PAGE_SIZE);
+    if ( !ctx->x86.pv.save.normalised_pages )
+    {
+        PERROR("Failed to allocate normalised_pages");
+        return -1;
+    }
+
     rc = x86_pv_domain_info(ctx);
     if ( rc )
         return rc;
@@ -1118,6 +1128,7 @@ static int x86_pv_check_vm_state(struct xc_sr_context *ctx)
 
 static int x86_pv_cleanup(struct xc_sr_context *ctx)
 {
+    free(ctx->x86.pv.save.normalised_pages);
     free(ctx->x86.pv.p2m_pfns);
 
     if ( ctx->x86.pv.p2m )


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155549.287223 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mns-0006tY-IY; Tue, 13 Jul 2021 18:06:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155549.287223; Tue, 13 Jul 2021 18:06:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mns-0006sL-Cs; Tue, 13 Jul 2021 18:06:44 +0000
Received: by outflank-mailman (input) for mailman id 155549;
 Tue, 13 Jul 2021 18:06:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnq-0002kr-To
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:42 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.84])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 06d8627e-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:21 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6FtAs
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:15 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 06d8627e-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199575;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=XZ2E1yVunQhUbaAeVwgeHEncoGw74SQmLvitByCyUhE=;
    b=RHia578d3804xnF/HNtoZnA2X/2CGarVamyyO7j3GnUaX6TPSHvkUoZK4DBlJjFUZB
    g0x8gmoFUdYRSH6umMAoyT5JHTyV03egjJudIRQKn7B24wzYCOywDQkgjoP6exjcu+yj
    ymO6EU2PhPiiAcIdfm7PVZbfvi69FQhGKeK+fPBcdtYd35jy1vl1d9qH6bbPNceObsx9
    /0WefHFCiwMB1CCwRafv/C6SDJeoBqXdn4GX7nZCjyiS5ATOFWL9wfiLB3PzCgflbUbx
    YnmE9XevkbQlXt50QBTHjsaqpCmcliu6AD/G2JtMrhEORfuINwgA6Hi7eNb/1ZGUBxOf
    RegA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 11/31] tools: save: preallocate rec_pfns array
Date: Tue, 13 Jul 2021 20:05:45 +0200
Message-Id: <20210713180605.12096-12-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h |  1 +
 tools/libs/guest/xg_sr_save.c   | 28 +++++++++++-----------------
 2 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index e2a068bb7e..b054661897 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -248,6 +248,7 @@ struct xc_sr_context
             xen_pfn_t *types;
             int *errors;
             struct iovec *iov;
+            uint64_t *rec_pfns;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 92eba456e6..7c417f4a2a 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -95,7 +95,6 @@ static int write_batch(struct xc_sr_context *ctx)
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
     void *page, *orig_page;
-    uint64_t *rec_pfns = NULL;
     int iovcnt = 0;
     struct xc_sr_rec_page_data_header hdr = { 0 };
     struct xc_sr_record rec = {
@@ -202,22 +201,15 @@ static int write_batch(struct xc_sr_context *ctx)
         }
     }
 
-    rec_pfns = malloc(nr_pfns * sizeof(*rec_pfns));
-    if ( !rec_pfns )
-    {
-        ERROR("Unable to allocate %zu bytes of memory for page data pfn list",
-              nr_pfns * sizeof(*rec_pfns));
-        goto err;
-    }
-
     hdr.count = nr_pfns;
 
     rec.length = sizeof(hdr);
-    rec.length += nr_pfns * sizeof(*rec_pfns);
+    rec.length += nr_pfns * sizeof(*ctx->save.rec_pfns);
     rec.length += nr_pages * PAGE_SIZE;
 
     for ( i = 0; i < nr_pfns; ++i )
-        rec_pfns[i] = ((uint64_t)(ctx->save.types[i]) << 32) | ctx->save.batch_pfns[i];
+        ctx->save.rec_pfns[i] = ((uint64_t)(ctx->save.types[i]) << 32) |
+                                ctx->save.batch_pfns[i];
 
     ctx->save.iov[0].iov_base = &rec.type;
     ctx->save.iov[0].iov_len = sizeof(rec.type);
@@ -228,12 +220,13 @@ static int write_batch(struct xc_sr_context *ctx)
     ctx->save.iov[2].iov_base = &hdr;
     ctx->save.iov[2].iov_len = sizeof(hdr);
 
-    ctx->save.iov[3].iov_base = rec_pfns;
-    ctx->save.iov[3].iov_len = nr_pfns * sizeof(*rec_pfns);
+    ctx->save.iov[3].iov_base = ctx->save.rec_pfns;
+    ctx->save.iov[3].iov_len = nr_pfns * sizeof(*ctx->save.rec_pfns);
 
     iovcnt = 4;
     ctx->save.pages_sent += nr_pages;
-    ctx->save.overhead_sent += sizeof(rec) + sizeof(hdr) + nr_pfns * sizeof(*rec_pfns);
+    ctx->save.overhead_sent += sizeof(rec) + sizeof(hdr) +
+                               nr_pfns * sizeof(*ctx->save.rec_pfns);
 
     if ( nr_pages )
     {
@@ -260,7 +253,6 @@ static int write_batch(struct xc_sr_context *ctx)
     rc = ctx->save.nr_batch_pfns = 0;
 
  err:
-    free(rec_pfns);
     if ( guest_mapping )
         xenforeignmemory_unmap(xch->fmem, guest_mapping, nr_pages_mapped);
     for ( i = 0; local_pages && i < nr_pfns; ++i )
@@ -844,11 +836,12 @@ static int setup(struct xc_sr_context *ctx)
     ctx->save.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.types));
     ctx->save.errors = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.errors));
     ctx->save.iov = malloc((4 + MAX_BATCH_SIZE) * sizeof(*ctx->save.iov));
+    ctx->save.rec_pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.rec_pfns));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
     if ( !ctx->save.batch_pfns || !ctx->save.mfns || !ctx->save.types ||
-         !ctx->save.errors || !ctx->save.iov || !dirty_bitmap ||
-         !ctx->save.deferred_pages )
+         !ctx->save.errors || !ctx->save.iov || !ctx->save.rec_pfns ||
+         !dirty_bitmap || !ctx->save.deferred_pages )
     {
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
               " deferred pages");
@@ -879,6 +872,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
+    free(ctx->save.rec_pfns);
     free(ctx->save.iov);
     free(ctx->save.errors);
     free(ctx->save.types);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155550.287234 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnu-0007QK-VD; Tue, 13 Jul 2021 18:06:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155550.287234; Tue, 13 Jul 2021 18:06:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnu-0007PD-MM; Tue, 13 Jul 2021 18:06:46 +0000
Received: by outflank-mailman (input) for mailman id 155550;
 Tue, 13 Jul 2021 18:06:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mns-0002UL-Gq
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:44 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.170])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c567cd93-a813-4192-b89f-81bbb939ef08;
 Tue, 13 Jul 2021 18:06:24 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6HtAy
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:17 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c567cd93-a813-4192-b89f-81bbb939ef08
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199578;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=YRVl0CnaOM9g6RFoif4tiboPYUw5yevknXWVbW/ME0k=;
    b=Zs0Xodk75jN9h8CKY05mz+GWB0Wz5eCjvywwarFzGRPrEFHLwAHucVDm8au4Ux6H66
    GtTv3WTWHmD6XQYoLcwZZ+W9ijQz/8VpWCoNBjpKy1l+MOiWvdpHruGmTbOC7UrD697J
    lXG3wzeply4r3vA6GZWact/xyfIx++IO0LgqWmcpoXUd4QsjjOxMuXS1o2aa+kjwkAm6
    G3ZsvgM4Q9zIlbyUtyEpVID6ePweIT0UOaxldvdb9kT9CuYZbKxdiu143sYRMjssmgJe
    e6OzjVAhuGbh1iZzr8BPPBw4ZRdnU240FHtjHybfjY28FwtgT+rVXZCVAwfJr1w3y331
    6M8g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 16/31] tools: restore: preallocate mfns array
Date: Tue, 13 Jul 2021 20:05:50 +0200
Message-Id: <20210713180605.12096-17-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in an incoming batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |  1 +
 tools/libs/guest/xg_sr_restore.c | 16 ++++++++--------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index bd2027ba5d..11e45dbdc5 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -258,6 +258,7 @@ struct xc_sr_context
             struct restore_callbacks *callbacks;
             xen_pfn_t *pfns;
             uint32_t *types;
+            xen_pfn_t *mfns;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index bbb55b6844..24cd8c6a07 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -204,7 +204,6 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
                              xen_pfn_t *pfns, uint32_t *types, void *page_data)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = malloc(count * sizeof(*mfns));
     int *map_errs = malloc(count * sizeof(*map_errs));
     int rc;
     void *mapping = NULL, *guest_page = NULL;
@@ -212,11 +211,11 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         j,          /* j indexes the subset of pfns we decide to map. */
         nr_pages = 0;
 
-    if ( !mfns || !map_errs )
+    if ( !map_errs )
     {
         rc = -1;
         ERROR("Failed to allocate %zu bytes to process page data",
-              count * (sizeof(*mfns) + sizeof(*map_errs)));
+              count * sizeof(*map_errs));
         goto err;
     }
 
@@ -232,7 +231,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         ctx->restore.ops.set_page_type(ctx, pfns[i], types[i]);
 
         if ( page_type_has_stream_data(types[i]) )
-            mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
+            ctx->restore.mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
     }
 
     /* Nothing to do? */
@@ -241,7 +240,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
 
     mapping = guest_page = xenforeignmemory_map(
         xch->fmem, ctx->domid, PROT_READ | PROT_WRITE,
-        nr_pages, mfns, map_errs);
+        nr_pages, ctx->restore.mfns, map_errs);
     if ( !mapping )
     {
         rc = -1;
@@ -259,7 +258,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         {
             rc = -1;
             ERROR("Mapping pfn %#"PRIpfn" (mfn %#"PRIpfn", type %#"PRIx32") failed with %d",
-                  pfns[i], mfns[j], types[i], map_errs[j]);
+                  pfns[i], ctx->restore.mfns[j], types[i], map_errs[j]);
             goto err;
         }
 
@@ -298,7 +297,6 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         xenforeignmemory_unmap(xch->fmem, mapping, nr_pages);
 
     free(map_errs);
-    free(mfns);
 
     return rc;
 }
@@ -718,7 +716,8 @@ static int setup(struct xc_sr_context *ctx)
 
     ctx->restore.pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pfns));
     ctx->restore.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.types));
-    if ( !ctx->restore.pfns  || !ctx->restore.types )
+    ctx->restore.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.mfns));
+    if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -755,6 +754,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.mfns);
     free(ctx->restore.types);
     free(ctx->restore.pfns);
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155551.287245 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnx-0007zy-EL; Tue, 13 Jul 2021 18:06:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155551.287245; Tue, 13 Jul 2021 18:06:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnx-0007z7-6i; Tue, 13 Jul 2021 18:06:49 +0000
Received: by outflank-mailman (input) for mailman id 155551;
 Tue, 13 Jul 2021 18:06:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnv-0002kr-Tv
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:47 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.83])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 06e2c55c-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:21 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6FtAr
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:15 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 06e2c55c-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199575;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=VixOpRBMsoM0fDQKIvQSxrobwoztUo22eEi66PpWlks=;
    b=AVCvEuKrE0LIt1SG29Y5us1wSfMsF0h+fPKTaGaZ1W8adH59yDqT9H6WSPjLOeG3d6
    rpKNTUQpwPwQFnoJZHAe244nYJVrojPKzFNAQ+YM9gIwKf0BLXXS69yePFMivqBapQvD
    FKUhywPEjBhWuktE5tXwjuXXApsN/7w17X4mYRITmpgVLOnSM4+IB+y4tpauw6n9gSQH
    vdDl7o/FHRHemtvrfZ+6ihl4scNghZeomLPtMWfgUuwPvRHn+oh29q4gJCMchZh5HDHm
    tou+a0RAQAobxOmqomf0F9VqqfKznq7KPffA66if6z4aQqCaX55dtnXyg0QR4ub1N6q5
    LDRQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 10/31] tools: save: preallocate iov array
Date: Tue, 13 Jul 2021 20:05:44 +0200
Message-Id: <20210713180605.12096-11-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h |  1 +
 tools/libs/guest/xg_sr_save.c   | 34 ++++++++++++++++-----------------
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index d2b838ed33..e2a068bb7e 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -247,6 +247,7 @@ struct xc_sr_context
             xen_pfn_t *mfns;
             xen_pfn_t *types;
             int *errors;
+            struct iovec *iov;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 5b416fda60..92eba456e6 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -96,7 +96,7 @@ static int write_batch(struct xc_sr_context *ctx)
     unsigned int nr_pfns = ctx->save.nr_batch_pfns;
     void *page, *orig_page;
     uint64_t *rec_pfns = NULL;
-    struct iovec *iov = NULL; int iovcnt = 0;
+    int iovcnt = 0;
     struct xc_sr_rec_page_data_header hdr = { 0 };
     struct xc_sr_record rec = {
         .type = REC_TYPE_PAGE_DATA,
@@ -108,10 +108,8 @@ static int write_batch(struct xc_sr_context *ctx)
     guest_data = calloc(nr_pfns, sizeof(*guest_data));
     /* Pointers to locally allocated pages.  Need freeing. */
     local_pages = calloc(nr_pfns, sizeof(*local_pages));
-    /* iovec[] for writev(). */
-    iov = malloc((nr_pfns + 4) * sizeof(*iov));
 
-    if ( !guest_data || !local_pages || !iov )
+    if ( !guest_data || !local_pages )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -221,17 +219,17 @@ static int write_batch(struct xc_sr_context *ctx)
     for ( i = 0; i < nr_pfns; ++i )
         rec_pfns[i] = ((uint64_t)(ctx->save.types[i]) << 32) | ctx->save.batch_pfns[i];
 
-    iov[0].iov_base = &rec.type;
-    iov[0].iov_len = sizeof(rec.type);
+    ctx->save.iov[0].iov_base = &rec.type;
+    ctx->save.iov[0].iov_len = sizeof(rec.type);
 
-    iov[1].iov_base = &rec.length;
-    iov[1].iov_len = sizeof(rec.length);
+    ctx->save.iov[1].iov_base = &rec.length;
+    ctx->save.iov[1].iov_len = sizeof(rec.length);
 
-    iov[2].iov_base = &hdr;
-    iov[2].iov_len = sizeof(hdr);
+    ctx->save.iov[2].iov_base = &hdr;
+    ctx->save.iov[2].iov_len = sizeof(hdr);
 
-    iov[3].iov_base = rec_pfns;
-    iov[3].iov_len = nr_pfns * sizeof(*rec_pfns);
+    ctx->save.iov[3].iov_base = rec_pfns;
+    ctx->save.iov[3].iov_len = nr_pfns * sizeof(*rec_pfns);
 
     iovcnt = 4;
     ctx->save.pages_sent += nr_pages;
@@ -243,15 +241,15 @@ static int write_batch(struct xc_sr_context *ctx)
         {
             if ( guest_data[i] )
             {
-                iov[iovcnt].iov_base = guest_data[i];
-                iov[iovcnt].iov_len = PAGE_SIZE;
+                ctx->save.iov[iovcnt].iov_base = guest_data[i];
+                ctx->save.iov[iovcnt].iov_len = PAGE_SIZE;
                 iovcnt++;
                 --nr_pages;
             }
         }
     }
 
-    if ( writev_exact(ctx->fd, iov, iovcnt) )
+    if ( writev_exact(ctx->fd, ctx->save.iov, iovcnt) )
     {
         PERROR("Failed to write page data to stream");
         goto err;
@@ -267,7 +265,6 @@ static int write_batch(struct xc_sr_context *ctx)
         xenforeignmemory_unmap(xch->fmem, guest_mapping, nr_pages_mapped);
     for ( i = 0; local_pages && i < nr_pfns; ++i )
         free(local_pages[i]);
-    free(iov);
     free(local_pages);
     free(guest_data);
 
@@ -846,10 +843,12 @@ static int setup(struct xc_sr_context *ctx)
     ctx->save.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.mfns));
     ctx->save.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.types));
     ctx->save.errors = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.errors));
+    ctx->save.iov = malloc((4 + MAX_BATCH_SIZE) * sizeof(*ctx->save.iov));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
     if ( !ctx->save.batch_pfns || !ctx->save.mfns || !ctx->save.types ||
-         !ctx->save.errors || !dirty_bitmap || !ctx->save.deferred_pages )
+         !ctx->save.errors || !ctx->save.iov || !dirty_bitmap ||
+         !ctx->save.deferred_pages )
     {
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
               " deferred pages");
@@ -880,6 +879,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
+    free(ctx->save.iov);
     free(ctx->save.errors);
     free(ctx->save.types);
     free(ctx->save.mfns);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155552.287254 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mnz-0008Nu-6N; Tue, 13 Jul 2021 18:06:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155552.287254; Tue, 13 Jul 2021 18:06:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mny-0008Ln-QF; Tue, 13 Jul 2021 18:06:50 +0000
Received: by outflank-mailman (input) for mailman id 155552;
 Tue, 13 Jul 2021 18:06:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mnx-0002UL-Gz
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:49 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.171])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a7527314-1255-4f65-8912-cbbd84ac5443;
 Tue, 13 Jul 2021 18:06:24 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6ItAz
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:18 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a7527314-1255-4f65-8912-cbbd84ac5443
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199578;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=mxNpwWOhZuO/yAfsj1BhbOC7Eeea1lW7O20Bo/SSJmE=;
    b=HbNTpUkaCGH7smmG0mRQLhqgGG/1A9vgPoaBIZvvS0ju1bTcHhjH8bJgkThGS+5kj8
    Vw7H9McJFKbB9GEXnNxveKT5SETAMzjYr49v6Kc514vP/JsCqEs0MwnmQ3pRbopO1w1V
    66eiIFywf3sEEsjffgaqezJ8UAfuuOSDF3/FmW/O29dAe0p2e1fbkAUB88eFaQBneVmd
    O8X3VLh2RlkPObAi+kI7ivGHR0A0Sv08BX/gpSMLv3M0W2/X1VpC7JwfVHu4ohGRlsqX
    s9obyuUsrbhve2kMKU4nQ8owzFf/SAkXGWv6HdtumjWT4/HVHVnCXS7O3c9R1QMBP5W2
    0IBQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 17/31] tools: restore: preallocate map_errs array
Date: Tue, 13 Jul 2021 20:05:51 +0200
Message-Id: <20210713180605.12096-18-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in an incoming batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |  1 +
 tools/libs/guest/xg_sr_restore.c | 22 +++++++---------------
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 11e45dbdc5..336be98c93 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -259,6 +259,7 @@ struct xc_sr_context
             xen_pfn_t *pfns;
             uint32_t *types;
             xen_pfn_t *mfns;
+            int *map_errs;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 24cd8c6a07..866a7c86cd 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -204,21 +204,12 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
                              xen_pfn_t *pfns, uint32_t *types, void *page_data)
 {
     xc_interface *xch = ctx->xch;
-    int *map_errs = malloc(count * sizeof(*map_errs));
     int rc;
     void *mapping = NULL, *guest_page = NULL;
     unsigned int i, /* i indexes the pfns from the record. */
         j,          /* j indexes the subset of pfns we decide to map. */
         nr_pages = 0;
 
-    if ( !map_errs )
-    {
-        rc = -1;
-        ERROR("Failed to allocate %zu bytes to process page data",
-              count * sizeof(*map_errs));
-        goto err;
-    }
-
     rc = populate_pfns(ctx, count, pfns, types);
     if ( rc )
     {
@@ -240,7 +231,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
 
     mapping = guest_page = xenforeignmemory_map(
         xch->fmem, ctx->domid, PROT_READ | PROT_WRITE,
-        nr_pages, ctx->restore.mfns, map_errs);
+        nr_pages, ctx->restore.mfns, ctx->restore.map_errs);
     if ( !mapping )
     {
         rc = -1;
@@ -254,11 +245,11 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
         if ( !page_type_has_stream_data(types[i]) )
             continue;
 
-        if ( map_errs[j] )
+        if ( ctx->restore.map_errs[j] )
         {
             rc = -1;
             ERROR("Mapping pfn %#"PRIpfn" (mfn %#"PRIpfn", type %#"PRIx32") failed with %d",
-                  pfns[i], ctx->restore.mfns[j], types[i], map_errs[j]);
+                  pfns[i], ctx->restore.mfns[j], types[i], ctx->restore.map_errs[j]);
             goto err;
         }
 
@@ -296,8 +287,6 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
     if ( mapping )
         xenforeignmemory_unmap(xch->fmem, mapping, nr_pages);
 
-    free(map_errs);
-
     return rc;
 }
 
@@ -717,7 +706,9 @@ static int setup(struct xc_sr_context *ctx)
     ctx->restore.pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pfns));
     ctx->restore.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.types));
     ctx->restore.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.mfns));
-    if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns )
+    ctx->restore.map_errs = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.map_errs));
+    if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns ||
+         !ctx->restore.map_errs )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -754,6 +745,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.map_errs);
     free(ctx->restore.mfns);
     free(ctx->restore.types);
     free(ctx->restore.pfns);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155554.287267 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo1-0000eJ-VZ; Tue, 13 Jul 2021 18:06:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155554.287267; Tue, 13 Jul 2021 18:06:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo1-0000cb-Ic; Tue, 13 Jul 2021 18:06:53 +0000
Received: by outflank-mailman (input) for mailman id 155554;
 Tue, 13 Jul 2021 18:06:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mo0-0002kr-UC
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:52 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [85.215.255.84])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 06e2c55e-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:21 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6GtAt
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:16 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 06e2c55e-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199576;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=OMEAEb7NX4AU8uov75H5dJFOZP1BqztZJlpHGBMjQLg=;
    b=P2TG24K45DBPU/4N7u49xflxJX+B0lyYYFgOgIBOmGVMdlb0dVr84dZ9mWSph+fTyF
    mzJEQoShbw4m6PiJ4WwXpmUyL5rDVA4Js8B6BBnBiqGBVoC+eX8h64fQPiFnnzJOJYZD
    fzIPs+UpX0H1cHBM7qWA9xbB4WQW515+K7T8EGTica5RINupOdTnjkrbGfx4veOtYzmJ
    uv5BrYrOXfPQbilpjmrWzum/+jXMyyaLXvnjpM0XN26aqnWm3Ep6wpeTE1YvAv5nvgMy
    FHlIpgYkIUnbvYaA8a0qO8uhP/+2UONtGF6K6HO5cTmhoEax+iaRbrNkSx0R+tLBxy9x
    0qAw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 12/31] tools: save: preallocate guest_data array
Date: Tue, 13 Jul 2021 20:05:46 +0200
Message-Id: <20210713180605.12096-13-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in a batch.
Allocate the space once.

Because this was allocated with calloc:
Adjust the loop to clear unused entries as needed.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h |  1 +
 tools/libs/guest/xg_sr_save.c   | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index b054661897..b90b35e564 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -249,6 +249,7 @@ struct xc_sr_context
             int *errors;
             struct iovec *iov;
             uint64_t *rec_pfns;
+            void **guest_data;
             unsigned int nr_batch_pfns;
             unsigned long *deferred_pages;
             unsigned long nr_deferred_pages;
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index 7c417f4a2a..0ab8b7205c 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -89,7 +89,6 @@ static int write_batch(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
     void *guest_mapping = NULL;
-    void **guest_data = NULL;
     void **local_pages = NULL;
     int rc = -1;
     unsigned int i, p, nr_pages = 0, nr_pages_mapped = 0;
@@ -103,12 +102,10 @@ static int write_batch(struct xc_sr_context *ctx)
 
     assert(nr_pfns != 0);
 
-    /* Pointers to page data to send.  Mapped gfns or local allocations. */
-    guest_data = calloc(nr_pfns, sizeof(*guest_data));
     /* Pointers to locally allocated pages.  Need freeing. */
     local_pages = calloc(nr_pfns, sizeof(*local_pages));
 
-    if ( !guest_data || !local_pages )
+    if ( !local_pages )
     {
         ERROR("Unable to allocate arrays for a batch of %u pages",
               nr_pfns);
@@ -165,7 +162,10 @@ static int write_batch(struct xc_sr_context *ctx)
         for ( i = 0, p = 0; i < nr_pfns; ++i )
         {
             if ( !page_type_has_stream_data(ctx->save.types[i]) )
+            {
+                ctx->save.guest_data[i] = NULL;
                 continue;
+            }
 
             if ( ctx->save.errors[p] )
             {
@@ -183,6 +183,7 @@ static int write_batch(struct xc_sr_context *ctx)
 
             if ( rc )
             {
+                ctx->save.guest_data[i] = NULL;
                 if ( rc == -1 && errno == EAGAIN )
                 {
                     set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages);
@@ -194,7 +195,7 @@ static int write_batch(struct xc_sr_context *ctx)
                     goto err;
             }
             else
-                guest_data[i] = page;
+                ctx->save.guest_data[i] = page;
 
             rc = -1;
             ++p;
@@ -232,9 +233,9 @@ static int write_batch(struct xc_sr_context *ctx)
     {
         for ( i = 0; i < nr_pfns; ++i )
         {
-            if ( guest_data[i] )
+            if ( ctx->save.guest_data[i] )
             {
-                ctx->save.iov[iovcnt].iov_base = guest_data[i];
+                ctx->save.iov[iovcnt].iov_base = ctx->save.guest_data[i];
                 ctx->save.iov[iovcnt].iov_len = PAGE_SIZE;
                 iovcnt++;
                 --nr_pages;
@@ -258,7 +259,6 @@ static int write_batch(struct xc_sr_context *ctx)
     for ( i = 0; local_pages && i < nr_pfns; ++i )
         free(local_pages[i]);
     free(local_pages);
-    free(guest_data);
 
     return rc;
 }
@@ -837,11 +837,12 @@ static int setup(struct xc_sr_context *ctx)
     ctx->save.errors = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.errors));
     ctx->save.iov = malloc((4 + MAX_BATCH_SIZE) * sizeof(*ctx->save.iov));
     ctx->save.rec_pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.rec_pfns));
+    ctx->save.guest_data = malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.guest_data));
     ctx->save.deferred_pages = bitmap_alloc(ctx->save.p2m_size);
 
     if ( !ctx->save.batch_pfns || !ctx->save.mfns || !ctx->save.types ||
          !ctx->save.errors || !ctx->save.iov || !ctx->save.rec_pfns ||
-         !dirty_bitmap || !ctx->save.deferred_pages )
+         !ctx->save.guest_data ||!dirty_bitmap || !ctx->save.deferred_pages )
     {
         ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and"
               " deferred pages");
@@ -872,6 +873,7 @@ static void cleanup(struct xc_sr_context *ctx)
     xc_hypercall_buffer_free_pages(xch, dirty_bitmap,
                                    NRPAGES(bitmap_size(ctx->save.p2m_size)));
     free(ctx->save.deferred_pages);
+    free(ctx->save.guest_data);
     free(ctx->save.rec_pfns);
     free(ctx->save.iov);
     free(ctx->save.errors);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155556.287275 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo3-00017q-Sk; Tue, 13 Jul 2021 18:06:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155556.287275; Tue, 13 Jul 2021 18:06:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo3-000175-Nt; Tue, 13 Jul 2021 18:06:55 +0000
Received: by outflank-mailman (input) for mailman id 155556;
 Tue, 13 Jul 2021 18:06:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mo2-0002UL-H5
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:54 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.101])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 21a92166-9a3d-403a-96dc-95dc64418e01;
 Tue, 13 Jul 2021 18:06:26 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6JtB2
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:19 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 21a92166-9a3d-403a-96dc-95dc64418e01
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199579;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=Fd4Q1B2DPhDxZ+ElDKm1Z9i8GuAzFG2GaIOlaJriZzY=;
    b=pGHNg93OpQHnVpiCxnMQ9Pw4QQhRBMPvijxM9tSsveV5FJl2EGBWmbmGF4yYDlirbn
    tn1FDgsNc1FfLeVXG9sEhvVtG/uH7B4pD+rGSDaGx5l4++29llXNoHdGpwNuZ9ljJTTN
    3HP39YcSzBPOBYlBe6KgUm5eRb/RTjImATr/rmrYjYtQdFmTIntAL/5a0/Lz92KnxLA6
    MBUL1Mmv5U5F/KVGrIB8Y0tRwGgi8MoU/n+5KvxwTS8PJvX9P5z8H41APDM4grf9dDOy
    DpdrrAWC9iL4ZEZWhFj6A827uyOvgvhnBZMP4rUF8BHuAi0U2sko5AjJPP+9+6aLdsDn
    s27w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v20210713 20/31] tools: restore: split record processing
Date: Tue, 13 Jul 2021 20:05:54 +0200
Message-Id: <20210713180605.12096-21-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

handle_page_data must be able to read directly into mapped guest memory.
This will avoid unneccesary memcpy calls for data which can be consumed verbatim.

Rearrange the code to allow decisions based on the incoming record.

This change is preparation for future changes in handle_page_data,
no change in behavior is intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
---
 tools/libs/guest/xg_sr_common.c  | 33 ++++++++++++---------
 tools/libs/guest/xg_sr_common.h  |  4 ++-
 tools/libs/guest/xg_sr_restore.c | 49 ++++++++++++++++++++++----------
 tools/libs/guest/xg_sr_save.c    |  7 ++++-
 4 files changed, 63 insertions(+), 30 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.c b/tools/libs/guest/xg_sr_common.c
index 17567ab133..cabde4ef74 100644
--- a/tools/libs/guest/xg_sr_common.c
+++ b/tools/libs/guest/xg_sr_common.c
@@ -91,26 +91,33 @@ int write_split_record(struct xc_sr_context *ctx, struct xc_sr_record *rec,
     return -1;
 }
 
-int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec)
+int read_record_header(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr)
 {
     xc_interface *xch = ctx->xch;
-    struct xc_sr_rhdr rhdr;
-    size_t datasz;
 
-    if ( read_exact(fd, &rhdr, sizeof(rhdr)) )
+    if ( read_exact(fd, rhdr, sizeof(*rhdr)) )
     {
         PERROR("Failed to read Record Header from stream");
         return -1;
     }
 
-    if ( rhdr.length > REC_LENGTH_MAX )
+    if ( rhdr->length > REC_LENGTH_MAX )
     {
-        ERROR("Record (0x%08x, %s) length %#x exceeds max (%#x)", rhdr.type,
-              rec_type_to_str(rhdr.type), rhdr.length, REC_LENGTH_MAX);
+        ERROR("Record (0x%08x, %s) length %#x exceeds max (%#x)", rhdr->type,
+              rec_type_to_str(rhdr->type), rhdr->length, REC_LENGTH_MAX);
         return -1;
     }
 
-    datasz = ROUNDUP(rhdr.length, REC_ALIGN_ORDER);
+    return 0;
+}
+
+int read_record_data(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr,
+                     struct xc_sr_record *rec)
+{
+    xc_interface *xch = ctx->xch;
+    size_t datasz;
+
+    datasz = ROUNDUP(rhdr->length, REC_ALIGN_ORDER);
 
     if ( datasz )
     {
@@ -119,7 +126,7 @@ int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec)
         if ( !rec->data )
         {
             ERROR("Unable to allocate %zu bytes for record data (0x%08x, %s)",
-                  datasz, rhdr.type, rec_type_to_str(rhdr.type));
+                  datasz, rhdr->type, rec_type_to_str(rhdr->type));
             return -1;
         }
 
@@ -128,18 +135,18 @@ int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec)
             free(rec->data);
             rec->data = NULL;
             PERROR("Failed to read %zu bytes of data for record (0x%08x, %s)",
-                   datasz, rhdr.type, rec_type_to_str(rhdr.type));
+                   datasz, rhdr->type, rec_type_to_str(rhdr->type));
             return -1;
         }
     }
     else
         rec->data = NULL;
 
-    rec->type   = rhdr.type;
-    rec->length = rhdr.length;
+    rec->type   = rhdr->type;
+    rec->length = rhdr->length;
 
     return 0;
-};
+}
 
 static void __attribute__((unused)) build_assertions(void)
 {
diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index c6c6a31dc6..077d8f2890 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -458,7 +458,9 @@ static inline int write_record(struct xc_sr_context *ctx,
  *
  * On failure, the contents of the record structure are undefined.
  */
-int read_record(struct xc_sr_context *ctx, int fd, struct xc_sr_record *rec);
+int read_record_header(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr);
+int read_record_data(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr,
+                     struct xc_sr_record *rec);
 
 /*
  * This would ideally be private in restore.c, but is needed by
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 2734ef06fd..8f6da97d09 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -466,7 +466,7 @@ static int send_checkpoint_dirty_pfn_list(struct xc_sr_context *ctx)
     return rc;
 }
 
-static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec);
+static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_record *rec);
 static int handle_checkpoint(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
@@ -505,7 +505,7 @@ static int handle_checkpoint(struct xc_sr_context *ctx)
 
         for ( i = 0; i < ctx->restore.buffered_rec_num; i++ )
         {
-            rc = process_record(ctx, &ctx->restore.buffered_records[i]);
+            rc = process_buffered_record(ctx, &ctx->restore.buffered_records[i]);
             if ( rc )
                 goto err;
         }
@@ -566,10 +566,11 @@ static int handle_checkpoint(struct xc_sr_context *ctx)
     return rc;
 }
 
-static int buffer_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
+static int buffer_record(struct xc_sr_context *ctx, struct xc_sr_rhdr *rhdr)
 {
     xc_interface *xch = ctx->xch;
     unsigned int new_alloc_num;
+    struct xc_sr_record rec;
     struct xc_sr_record *p;
 
     if ( ctx->restore.buffered_rec_num >= ctx->restore.allocated_rec_num )
@@ -587,8 +588,13 @@ static int buffer_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         ctx->restore.allocated_rec_num = new_alloc_num;
     }
 
+    if ( read_record_data(ctx, ctx->fd, rhdr, &rec) )
+    {
+        return -1;
+    }
+
     memcpy(&ctx->restore.buffered_records[ctx->restore.buffered_rec_num++],
-           rec, sizeof(*rec));
+           &rec, sizeof(rec));
 
     return 0;
 }
@@ -619,7 +625,7 @@ int handle_static_data_end(struct xc_sr_context *ctx)
     return rc;
 }
 
-static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
+static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
 {
     xc_interface *xch = ctx->xch;
     int rc = 0;
@@ -657,6 +663,19 @@ static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     return rc;
 }
 
+static int process_incoming_record_header(struct xc_sr_context *ctx, struct xc_sr_rhdr *rhdr)
+{
+    struct xc_sr_record rec;
+    int rc;
+
+    rc = read_record_data(ctx, ctx->fd, rhdr, &rec);
+    if ( rc )
+        return rc;
+
+    return process_buffered_record(ctx, &rec);
+}
+
+
 static int setup(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
@@ -753,7 +772,7 @@ static void cleanup(struct xc_sr_context *ctx)
 static int restore(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
-    struct xc_sr_record rec;
+    struct xc_sr_rhdr rhdr;
     int rc, saved_rc = 0, saved_errno = 0;
 
     IPRINTF("Restoring domain");
@@ -764,7 +783,7 @@ static int restore(struct xc_sr_context *ctx)
 
     do
     {
-        rc = read_record(ctx, ctx->fd, &rec);
+        rc = read_record_header(ctx, ctx->fd, &rhdr);
         if ( rc )
         {
             if ( ctx->restore.buffer_all_records )
@@ -774,25 +793,25 @@ static int restore(struct xc_sr_context *ctx)
         }
 
         if ( ctx->restore.buffer_all_records &&
-             rec.type != REC_TYPE_END &&
-             rec.type != REC_TYPE_CHECKPOINT )
+             rhdr.type != REC_TYPE_END &&
+             rhdr.type != REC_TYPE_CHECKPOINT )
         {
-            rc = buffer_record(ctx, &rec);
+            rc = buffer_record(ctx, &rhdr);
             if ( rc )
                 goto err;
         }
         else
         {
-            rc = process_record(ctx, &rec);
+            rc = process_incoming_record_header(ctx, &rhdr);
             if ( rc == RECORD_NOT_PROCESSED )
             {
-                if ( rec.type & REC_TYPE_OPTIONAL )
+                if ( rhdr.type & REC_TYPE_OPTIONAL )
                     DPRINTF("Ignoring optional record %#x (%s)",
-                            rec.type, rec_type_to_str(rec.type));
+                            rhdr.type, rec_type_to_str(rhdr.type));
                 else
                 {
                     ERROR("Mandatory record %#x (%s) not handled",
-                          rec.type, rec_type_to_str(rec.type));
+                          rhdr.type, rec_type_to_str(rhdr.type));
                     rc = -1;
                     goto err;
                 }
@@ -803,7 +822,7 @@ static int restore(struct xc_sr_context *ctx)
                 goto err;
         }
 
-    } while ( rec.type != REC_TYPE_END );
+    } while ( rhdr.type != REC_TYPE_END );
 
  remus_failover:
     if ( ctx->stream_type == XC_STREAM_COLO )
diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
index c74c8d9348..ef8c49f23d 100644
--- a/tools/libs/guest/xg_sr_save.c
+++ b/tools/libs/guest/xg_sr_save.c
@@ -591,6 +591,7 @@ static int send_memory_live(struct xc_sr_context *ctx)
 static int colo_merge_secondary_dirty_bitmap(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
+    struct xc_sr_rhdr rhdr;
     struct xc_sr_record rec;
     uint64_t *pfns = NULL;
     uint64_t pfn;
@@ -599,7 +600,11 @@ static int colo_merge_secondary_dirty_bitmap(struct xc_sr_context *ctx)
     DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
                                     &ctx->save.dirty_bitmap_hbuf);
 
-    rc = read_record(ctx, ctx->save.recv_fd, &rec);
+    rc = read_record_header(ctx, ctx->save.recv_fd, &rhdr);
+    if ( rc )
+        goto err;
+
+    rc = read_record_data(ctx, ctx->save.recv_fd, &rhdr, &rec);
     if ( rc )
         goto err;
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:06:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:06:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155557.287288 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo7-0001v7-Bn; Tue, 13 Jul 2021 18:06:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155557.287288; Tue, 13 Jul 2021 18:06:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo7-0001tb-6m; Tue, 13 Jul 2021 18:06:59 +0000
Received: by outflank-mailman (input) for mailman id 155557;
 Tue, 13 Jul 2021 18:06:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mo5-0002kr-UL
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:57 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.171])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0840d682-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:23 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6HtAx
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:17 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0840d682-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199577;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=EqbkUFGoJ5kAajdvgf66aZTTmFJgr8buS42CRf7IZCM=;
    b=s3tvuDYTIJBgYEAhcTEYPn+hd/6Lox5NyjwWlrhxIQPcX0AMX321FES4gI/cm16cVH
    aKEO92boPkt+pmCfzl39cbgZXfD4grPxXSdLlTPlV56wOusEU5XVI73C9BGqjfP70WMJ
    9T1+qM3PQif9Hy6kCjBrihoLjyDQs2TWOEk/YSDwvycL+C0e7b7C2lRSel7bAmGdJIZT
    FkZRzljpZsOLxWGQRrsUcqnl+tQpJOAcgkFFiptA4OkORj7SELNN7yaiRrSE2QCsUghD
    cgF1wDDi4y3zbKAwV6sEuF9ydc6xMbcceOsOH+lQ2ama6MLT2Z8wAsK7CD3jwb0uZowD
    I2iQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 15/31] tools: restore: preallocate types array
Date: Tue, 13 Jul 2021 20:05:49 +0200
Message-Id: <20210713180605.12096-16-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in an incoming batch.
Allocate the space once.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |  1 +
 tools/libs/guest/xg_sr_restore.c | 22 +++++++---------------
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index d32b4c46f3..bd2027ba5d 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -257,6 +257,7 @@ struct xc_sr_context
             struct xc_sr_restore_ops ops;
             struct restore_callbacks *callbacks;
             xen_pfn_t *pfns;
+            uint32_t *types;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index e812f65f99..bbb55b6844 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -315,7 +315,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     int rc = -1;
 
     xen_pfn_t pfn;
-    uint32_t *types = NULL, type;
+    uint32_t type;
 
     /*
      * v2 compatibility only exists for x86 streams.  This is a bit of a
@@ -362,14 +362,6 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    types = malloc(pages->count * sizeof(*types));
-    if ( !types )
-    {
-        ERROR("Unable to allocate enough memory for %u pfns",
-              pages->count);
-        goto err;
-    }
-
     for ( i = 0; i < pages->count; ++i )
     {
         pfn = pages->pfn[i] & PAGE_DATA_PFN_MASK;
@@ -393,7 +385,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
             pages_of_data++;
 
         ctx->restore.pfns[i] = pfn;
-        types[i] = type;
+        ctx->restore.types[i] = type;
     }
 
     if ( rec->length != (sizeof(*pages) +
@@ -406,11 +398,9 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    rc = process_page_data(ctx, pages->count, ctx->restore.pfns, types,
-                           &pages->pfn[pages->count]);
+    rc = process_page_data(ctx, pages->count, ctx->restore.pfns,
+                           ctx->restore.types, &pages->pfn[pages->count]);
  err:
-    free(types);
-
     return rc;
 }
 
@@ -727,7 +717,8 @@ static int setup(struct xc_sr_context *ctx)
     }
 
     ctx->restore.pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pfns));
-    if ( !ctx->restore.pfns )
+    ctx->restore.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.types));
+    if ( !ctx->restore.pfns  || !ctx->restore.types )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -764,6 +755,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.types);
     free(ctx->restore.pfns);
 
     if ( ctx->restore.ops.cleanup(ctx) )


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:07:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:07:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155559.287295 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo8-0002Le-WD; Tue, 13 Jul 2021 18:07:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155559.287295; Tue, 13 Jul 2021 18:07:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mo8-0002JA-MT; Tue, 13 Jul 2021 18:07:00 +0000
Received: by outflank-mailman (input) for mailman id 155559;
 Tue, 13 Jul 2021 18:06:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mo7-0002UL-H7
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:06:59 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 045a64bf-ada9-407e-9b5b-9982c9b9430b;
 Tue, 13 Jul 2021 18:06:27 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6LtB5
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:21 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 045a64bf-ada9-407e-9b5b-9982c9b9430b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199581;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=0LMXyjqr5dhJU6Kt86LbarPPbfCTtmro+NAOq1cH7Ts=;
    b=NbJSr7qRx5y1Mp3a4m25zYbTv6HLGzbHHCVKMN+Gg8MyFXyxcPyht+QXzJ/+z5T6zU
    Bb8DfaI6GiJI5/jS/wALXD20j2+0sW1hozlazEnDKC+tJnXSWu60yOx9nAfDgI7v6TDX
    pdbbtJwg/s1xY8Hoj467EEDmaO+Q73184qCKLKrdRo/FK+axgcjLLQRYuiR0xp8noVzt
    j0vxOn3RAGxzg9QiTI2F7BLA5TAT5FcNwHoHfiGq2xZjVJ65/8fsuQpEnNS3sVLKPPqi
    8br5s2ILbnfAY5Mv1KpQ+D/xW6fDIChi+WE646SoQluHjj6s3yFXDQU3EDsmrWY1bOZ9
    M34w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: [PATCH v20210713 23/31] tools: recognize LIBXL_API_VERSION for 4.16
Date: Tue, 13 Jul 2021 20:05:57 +0200
Message-Id: <20210713180605.12096-24-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This is required by upcoming API changes.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/include/libxl.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index ae7fe27c1f..29931626a2 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -729,7 +729,8 @@ typedef struct libxl__ctx libxl_ctx;
 #if LIBXL_API_VERSION != 0x040200 && LIBXL_API_VERSION != 0x040300 && \
     LIBXL_API_VERSION != 0x040400 && LIBXL_API_VERSION != 0x040500 && \
     LIBXL_API_VERSION != 0x040700 && LIBXL_API_VERSION != 0x040800 && \
-    LIBXL_API_VERSION != 0x041300 && LIBXL_API_VERSION != 0x041400
+    LIBXL_API_VERSION != 0x041300 && LIBXL_API_VERSION != 0x041400 && \
+    LIBXL_API_VERSION != 0x041600
 #error Unknown LIBXL_API_VERSION
 #endif
 #endif


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:07:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:07:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155563.287311 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MoC-00039r-FC; Tue, 13 Jul 2021 18:07:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155563.287311; Tue, 13 Jul 2021 18:07:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MoC-00039O-6v; Tue, 13 Jul 2021 18:07:04 +0000
Received: by outflank-mailman (input) for mailman id 155563;
 Tue, 13 Jul 2021 18:07:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoA-0002kr-UQ
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:02 +0000
Received: from mo4-p02-ob.smtp.rzone.de (unknown [81.169.146.170])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08701ffa-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:24 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6HtAw
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:17 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08701ffa-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199577;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=SHDAXXjQ4k5wqGqgpZ5ML0uGXKdasaiKGHiNj6axBrA=;
    b=USdFIKxpv0yDNCsW+ZdmUnwSYK+mlD+t9QhFMzLQMGv38mnlBbQ4pE6ErpP/pUguwf
    jbniADxY0RwY0LeHmvos3wlJTmz8oTXwpsb/vkNQFSQtnrSrxoQrSpNNL7OG+feIJbwv
    y3DzpcZajCgmFPnQiCW+SZvOC1aAPeSTO0okqDdgT7iWIlRneiDpGiGuq5V50PDqlaoo
    dH79WEABvneFg7XnwSn37PMKR3l/i4QS8u02HQXgjBeARX3qzQYVpUl4N6Z7IDRiK3wP
    sfiDbeOp2Mplfo+MzMNKIRkE+EeYosRGrbOyX3z/iald+672r+x5xRJyGg3rWcXfIXs6
    6nig==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 14/31] tools: restore: preallocate pfns array
Date: Tue, 13 Jul 2021 20:05:48 +0200
Message-Id: <20210713180605.12096-15-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in an incoming batch.
Allocate the space once.

Adjust the verification for page count. It must be at least one page,
but not more than MAX_BATCH_SIZE.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |  1 +
 tools/libs/guest/xg_sr_restore.c | 23 +++++++++++++++--------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 34d4c15b22..d32b4c46f3 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -256,6 +256,7 @@ struct xc_sr_context
         {
             struct xc_sr_restore_ops ops;
             struct restore_callbacks *callbacks;
+            xen_pfn_t *pfns;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index aa4113d7f6..e812f65f99 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -314,7 +314,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
     unsigned int i, pages_of_data = 0;
     int rc = -1;
 
-    xen_pfn_t *pfns = NULL, pfn;
+    xen_pfn_t pfn;
     uint32_t *types = NULL, type;
 
     /*
@@ -349,9 +349,9 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    if ( pages->count < 1 )
+    if ( !pages->count || pages->count > MAX_BATCH_SIZE )
     {
-        ERROR("Expected at least 1 pfn in PAGE_DATA record");
+        ERROR("Unexpected pfn count %u in PAGE_DATA record", pages->count);
         goto err;
     }
 
@@ -362,9 +362,8 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    pfns = malloc(pages->count * sizeof(*pfns));
     types = malloc(pages->count * sizeof(*types));
-    if ( !pfns || !types )
+    if ( !types )
     {
         ERROR("Unable to allocate enough memory for %u pfns",
               pages->count);
@@ -393,7 +392,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
              * have a page worth of data in the record. */
             pages_of_data++;
 
-        pfns[i] = pfn;
+        ctx->restore.pfns[i] = pfn;
         types[i] = type;
     }
 
@@ -407,11 +406,10 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    rc = process_page_data(ctx, pages->count, pfns, types,
+    rc = process_page_data(ctx, pages->count, ctx->restore.pfns, types,
                            &pages->pfn[pages->count]);
  err:
     free(types);
-    free(pfns);
 
     return rc;
 }
@@ -728,6 +726,14 @@ static int setup(struct xc_sr_context *ctx)
         goto err;
     }
 
+    ctx->restore.pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pfns));
+    if ( !ctx->restore.pfns )
+    {
+        ERROR("Unable to allocate memory");
+        rc = -1;
+        goto err;
+    }
+
     ctx->restore.buffered_records = malloc(
         DEFAULT_BUF_RECORDS * sizeof(struct xc_sr_record));
     if ( !ctx->restore.buffered_records )
@@ -758,6 +764,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.pfns);
 
     if ( ctx->restore.ops.cleanup(ctx) )
         PERROR("Failed to clean up");


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:15:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:15:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155598.287322 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mwj-0007Dz-Lv; Tue, 13 Jul 2021 18:15:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155598.287322; Tue, 13 Jul 2021 18:15:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mwj-0007Ds-Iu; Tue, 13 Jul 2021 18:15:53 +0000
Received: by outflank-mailman (input) for mailman id 155598;
 Tue, 13 Jul 2021 18:15:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoP-0002kr-Uz
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:18 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.173])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0a456ae3-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:27 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6KtB3
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:20 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0a456ae3-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199580;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=KXZqlmH3BT1hKTi/gqEWtzOcR1ftjdBkrbLwzUIkCqY=;
    b=oKqOBiKczsL0VEbHMdRM8eTatQ/c4qBBN8C0orirKp84TgFzaCoDVbKJ0AUObahCKe
    95ZFIub0tYsWfzbruWy8YloWi0pQ0nSO2CYou6qBqpvPb8Awad8daxuLnIPsEaajCePl
    JbNGT7tsFG5VGue0N1+n9BuLOFWacdo+9iYRAd4nWtr7T6AHOrzE+PHOQiNnRDLaroc1
    5RDxgwO8K8ebJFuTegEI8OpOmFmgLdv3oihSV9QDCZgFH/OPXdfeWxuyZW42ADWcluKh
    Fa9c9G0XoI12PgCVI+B27SsKbFQ8jH2iEC180ksQr64zSOorfX1ClajKSrofVkKRzlgu
    tDAA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 21/31] tools: restore: split handle_page_data
Date: Tue, 13 Jul 2021 20:05:55 +0200
Message-Id: <20210713180605.12096-22-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

handle_page_data must be able to read directly into mapped guest memory.
This will avoid unneccesary memcpy calls for data that can be consumed verbatim.

Split the various steps of record processing:
- move processing to handle_buffered_page_data
- adjust xenforeignmemory_map to set errno in case of failure
- adjust verify mode to set errno in case of failure

This change is preparation for future changes in handle_page_data,
no change in behavior is intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |   4 +
 tools/libs/guest/xg_sr_restore.c | 320 ++++++++++++++++++++-----------
 2 files changed, 207 insertions(+), 117 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 077d8f2890..020b41ea8b 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -262,6 +262,10 @@ struct xc_sr_context
             int *map_errs;
             xen_pfn_t *pp_pfns;
             xen_pfn_t *pp_mfns;
+            void **guest_data;
+
+            void *guest_mapping;
+            uint32_t nr_mapped_pages;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 8f6da97d09..777d005fbd 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -183,121 +183,18 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
     return rc;
 }
 
-/*
- * Given a list of pfns, their types, and a block of page data from the
- * stream, populate and record their types, map the relevant subset and copy
- * the data into the guest.
- */
-static int process_page_data(struct xc_sr_context *ctx, unsigned int count,
-                             xen_pfn_t *pfns, uint32_t *types, void *page_data)
+static int handle_static_data_end_v2(struct xc_sr_context *ctx)
 {
-    xc_interface *xch = ctx->xch;
-    int rc;
-    void *mapping = NULL, *guest_page = NULL;
-    unsigned int i, /* i indexes the pfns from the record. */
-        j,          /* j indexes the subset of pfns we decide to map. */
-        nr_pages = 0;
-
-    rc = populate_pfns(ctx, count, pfns, types);
-    if ( rc )
-    {
-        ERROR("Failed to populate pfns for batch of %u pages", count);
-        goto err;
-    }
-
-    for ( i = 0; i < count; ++i )
-    {
-        ctx->restore.ops.set_page_type(ctx, pfns[i], types[i]);
-
-        if ( page_type_has_stream_data(types[i]) )
-            ctx->restore.mfns[nr_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, pfns[i]);
-    }
-
-    /* Nothing to do? */
-    if ( nr_pages == 0 )
-        goto done;
-
-    mapping = guest_page = xenforeignmemory_map(
-        xch->fmem, ctx->domid, PROT_READ | PROT_WRITE,
-        nr_pages, ctx->restore.mfns, ctx->restore.map_errs);
-    if ( !mapping )
-    {
-        rc = -1;
-        PERROR("Unable to map %u mfns for %u pages of data",
-               nr_pages, count);
-        goto err;
-    }
-
-    for ( i = 0, j = 0; i < count; ++i )
-    {
-        if ( !page_type_has_stream_data(types[i]) )
-            continue;
-
-        if ( ctx->restore.map_errs[j] )
-        {
-            rc = -1;
-            ERROR("Mapping pfn %#"PRIpfn" (mfn %#"PRIpfn", type %#"PRIx32") failed with %d",
-                  pfns[i], ctx->restore.mfns[j], types[i], ctx->restore.map_errs[j]);
-            goto err;
-        }
-
-        /* Undo page normalisation done by the saver. */
-        rc = ctx->restore.ops.localise_page(ctx, types[i], page_data);
-        if ( rc )
-        {
-            ERROR("Failed to localise pfn %#"PRIpfn" (type %#"PRIx32")",
-                  pfns[i], types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
-            goto err;
-        }
-
-        if ( ctx->restore.verify )
-        {
-            /* Verify mode - compare incoming data to what we already have. */
-            if ( memcmp(guest_page, page_data, PAGE_SIZE) )
-                ERROR("verify pfn %#"PRIpfn" failed (type %#"PRIx32")",
-                      pfns[i], types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
-        }
-        else
-        {
-            /* Regular mode - copy incoming data into place. */
-            memcpy(guest_page, page_data, PAGE_SIZE);
-        }
-
-        ++j;
-        guest_page += PAGE_SIZE;
-        page_data += PAGE_SIZE;
-    }
-
- done:
-    rc = 0;
-
- err:
-    if ( mapping )
-        xenforeignmemory_unmap(xch->fmem, mapping, nr_pages);
-
-    return rc;
-}
+    int rc = 0;
 
-/*
- * Validate a PAGE_DATA record from the stream, and pass the results to
- * process_page_data() to actually perform the legwork.
- */
-static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
-{
+#if defined(__i386__) || defined(__x86_64__)
     xc_interface *xch = ctx->xch;
-    struct xc_sr_rec_page_data_header *pages = rec->data;
-    unsigned int i, pages_of_data = 0;
-    int rc = -1;
-
-    xen_pfn_t pfn;
-    uint32_t type;
-
     /*
      * v2 compatibility only exists for x86 streams.  This is a bit of a
      * bodge, but it is less bad than duplicating handle_page_data() between
      * different architectures.
      */
-#if defined(__i386__) || defined(__x86_64__)
+
     /* v2 compat.  Infer the position of STATIC_DATA_END. */
     if ( ctx->restore.format_version < 3 && !ctx->restore.seen_static_data_end )
     {
@@ -315,12 +212,26 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         ERROR("No STATIC_DATA_END seen");
         goto err;
     }
+
+    rc = 0;
+err:
 #endif
 
-    if ( rec->length < sizeof(*pages) )
+    return rc;
+}
+
+static bool verify_rec_page_hdr(struct xc_sr_context *ctx, uint32_t rec_length,
+                                 struct xc_sr_rec_page_data_header *pages)
+{
+    xc_interface *xch = ctx->xch;
+    bool ret = false;
+
+    errno = EINVAL;
+
+    if ( rec_length < sizeof(*pages) )
     {
         ERROR("PAGE_DATA record truncated: length %u, min %zu",
-              rec->length, sizeof(*pages));
+              rec_length, sizeof(*pages));
         goto err;
     }
 
@@ -330,13 +241,28 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         goto err;
     }
 
-    if ( rec->length < sizeof(*pages) + (pages->count * sizeof(uint64_t)) )
+    if ( rec_length < sizeof(*pages) + (pages->count * sizeof(uint64_t)) )
     {
         ERROR("PAGE_DATA record (length %u) too short to contain %u"
-              " pfns worth of information", rec->length, pages->count);
+              " pfns worth of information", rec_length, pages->count);
         goto err;
     }
 
+    ret = true;
+
+err:
+    return ret;
+}
+
+static bool verify_rec_page_pfns(struct xc_sr_context *ctx, uint32_t rec_length,
+                                 struct xc_sr_rec_page_data_header *pages)
+{
+    xc_interface *xch = ctx->xch;
+    uint32_t i, pages_of_data = 0;
+    xen_pfn_t pfn;
+    uint32_t type;
+    bool ret = false;
+
     for ( i = 0; i < pages->count; ++i )
     {
         pfn = pages->pfn[i] & PAGE_DATA_PFN_MASK;
@@ -363,19 +289,177 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec)
         ctx->restore.types[i] = type;
     }
 
-    if ( rec->length != (sizeof(*pages) +
+    if ( rec_length != (sizeof(*pages) +
                          (sizeof(uint64_t) * pages->count) +
                          (PAGE_SIZE * pages_of_data)) )
     {
         ERROR("PAGE_DATA record wrong size: length %u, expected "
-              "%zu + %zu + %lu", rec->length, sizeof(*pages),
+              "%zu + %zu + %lu", rec_length, sizeof(*pages),
               (sizeof(uint64_t) * pages->count), (PAGE_SIZE * pages_of_data));
         goto err;
     }
 
-    rc = process_page_data(ctx, pages->count, ctx->restore.pfns,
-                           ctx->restore.types, &pages->pfn[pages->count]);
+    ret = true;
+
+err:
+    return ret;
+}
+
+/*
+ * Populate pfns, if required
+ * Fill guest_data with either mapped address or NULL
+ * The caller must unmap guest_mapping
+ */
+static int map_guest_pages(struct xc_sr_context *ctx,
+                           struct xc_sr_rec_page_data_header *pages)
+{
+    xc_interface *xch = ctx->xch;
+    uint32_t i, p;
+    int rc;
+
+    rc = populate_pfns(ctx, pages->count, ctx->restore.pfns, ctx->restore.types);
+    if ( rc )
+    {
+        ERROR("Failed to populate pfns for batch of %u pages", pages->count);
+        goto err;
+    }
+
+    ctx->restore.nr_mapped_pages = 0;
+
+    for ( i = 0; i < pages->count; i++ )
+    {
+        ctx->restore.ops.set_page_type(ctx, ctx->restore.pfns[i], ctx->restore.types[i]);
+
+        if ( page_type_has_stream_data(ctx->restore.types[i]) == false )
+        {
+            ctx->restore.guest_data[i] = NULL;
+            continue;
+        }
+
+        ctx->restore.mfns[ctx->restore.nr_mapped_pages++] = ctx->restore.ops.pfn_to_gfn(ctx, ctx->restore.pfns[i]);
+    }
+
+    /* Nothing to do? */
+    if ( ctx->restore.nr_mapped_pages == 0 )
+        goto done;
+
+    ctx->restore.guest_mapping = xenforeignmemory_map(xch->fmem, ctx->domid,
+            PROT_READ | PROT_WRITE, ctx->restore.nr_mapped_pages,
+            ctx->restore.mfns, ctx->restore.map_errs);
+    if ( !ctx->restore.guest_mapping )
+    {
+        rc = -1;
+        PERROR("Unable to map %u mfns for %u pages of data",
+               ctx->restore.nr_mapped_pages, pages->count);
+        goto err;
+    }
+
+    /* Verify mapping, and assign address to pfn data */
+    for ( i = 0, p = 0; i < pages->count; i++ )
+    {
+        if ( !page_type_has_stream_data(ctx->restore.types[i]) )
+            continue;
+
+        if ( ctx->restore.map_errs[p] == 0 )
+        {
+            ctx->restore.guest_data[i] = ctx->restore.guest_mapping + (p * PAGE_SIZE);
+            p++;
+            continue;
+        }
+
+        errno = ctx->restore.map_errs[p];
+        rc = -1;
+        PERROR("Mapping pfn %#"PRIpfn" (mfn %#"PRIpfn", type %#"PRIx32") failed",
+              ctx->restore.pfns[i], ctx->restore.mfns[p], ctx->restore.types[i]);
+        goto err;
+    }
+
+done:
+    rc = 0;
+
+err:
+    return rc;
+}
+
+/*
+ * Handle PAGE_DATA record from an existing buffer
+ * Given a list of pfns, their types, and a block of page data from the
+ * stream, populate and record their types, map the relevant subset and copy
+ * the data into the guest.
+ */
+static int handle_buffered_page_data(struct xc_sr_context *ctx,
+                                     struct xc_sr_record *rec)
+{
+    xc_interface *xch = ctx->xch;
+    struct xc_sr_rec_page_data_header *pages = rec->data;
+    void *p;
+    uint32_t i;
+    int rc = -1, idx;
+
+    rc = handle_static_data_end_v2(ctx);
+    if ( rc )
+        goto err;
+
+    /* First read and verify the header */
+    if ( !verify_rec_page_hdr(ctx, rec->length, pages) )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Then read and verify the pfn numbers */
+    if ( !verify_rec_page_pfns(ctx, rec->length, pages) )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Map the target pfn */
+    rc = map_guest_pages(ctx, pages);
+    if ( rc )
+        goto err;
+
+    for ( i = 0, idx = 0; i < pages->count; i++ )
+    {
+        if ( !ctx->restore.guest_data[i] )
+            continue;
+
+        p = &pages->pfn[pages->count] + (idx * PAGE_SIZE);
+        rc = ctx->restore.ops.localise_page(ctx, ctx->restore.types[i], p);
+        if ( rc )
+        {
+            ERROR("Failed to localise pfn %#"PRIpfn" (type %#"PRIx32")",
+                  ctx->restore.pfns[i], ctx->restore.types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+            goto err;
+
+        }
+
+        if ( ctx->restore.verify )
+        {
+            if ( memcmp(ctx->restore.guest_data[i], p, PAGE_SIZE) )
+            {
+                errno = EIO;
+                ERROR("verify pfn %#"PRIpfn" failed (type %#"PRIx32")",
+                      ctx->restore.pfns[i], ctx->restore.types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+                goto err;
+            }
+        }
+        else
+        {
+            memcpy(ctx->restore.guest_data[i], p, PAGE_SIZE);
+        }
+
+        idx++;
+    }
+
+    rc = 0;
+
  err:
+    if ( ctx->restore.guest_mapping )
+    {
+        xenforeignmemory_unmap(xch->fmem, ctx->restore.guest_mapping, ctx->restore.nr_mapped_pages);
+        ctx->restore.guest_mapping = NULL;
+    }
     return rc;
 }
 
@@ -636,7 +720,7 @@ static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_recor
         break;
 
     case REC_TYPE_PAGE_DATA:
-        rc = handle_page_data(ctx, rec);
+        rc = handle_buffered_page_data(ctx, rec);
         break;
 
     case REC_TYPE_VERIFY:
@@ -716,9 +800,10 @@ static int setup(struct xc_sr_context *ctx)
     ctx->restore.map_errs = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.map_errs));
     ctx->restore.pp_pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_pfns));
     ctx->restore.pp_mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_mfns));
+    ctx->restore.guest_data = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.guest_data));
     if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns ||
          !ctx->restore.map_errs || !ctx->restore.pp_pfns ||
-         !ctx->restore.pp_mfns )
+         !ctx->restore.pp_mfns || !ctx->restore.guest_data )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -755,6 +840,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.guest_data);
     free(ctx->restore.pp_mfns);
     free(ctx->restore.pp_pfns);
     free(ctx->restore.map_errs);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:15:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:15:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155599.287326 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mwj-0007Gd-Vj; Tue, 13 Jul 2021 18:15:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155599.287326; Tue, 13 Jul 2021 18:15:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mwj-0007GO-Rh; Tue, 13 Jul 2021 18:15:53 +0000
Received: by outflank-mailman (input) for mailman id 155599;
 Tue, 13 Jul 2021 18:15:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Moq-0002UL-Ip
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:44 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.173])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 09db5836-ef13-4b8c-9624-2d4ead1701d9;
 Tue, 13 Jul 2021 18:06:32 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6NtBA
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:23 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 09db5836-ef13-4b8c-9624-2d4ead1701d9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199583;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=qKsJRazTHUTD2Ybtcf5xNrQhUiwz4suhpfKf90n01qY=;
    b=MifQ4DoZPVgmf+LZCCmY1rG3HBSr6oI+WcjM6O3Uh7+rtMobbpLmRz4tgFEtwJy2B8
    f1UE4OWSAFcj2GIJJTzKb8WQEQbjKbzpxYtUXrSDL8cy4VEZIHIURUy75wDNsKMEhUFy
    9pPHbcqjEaLYEI9xcP8B9FQJGb7zy/p7DGdRtuDThAVaDEqaymCIur+xDRKxXLjOZqCi
    lNggFMT0jjwOaFYWnQbXlvKYATYv3W6t2Gx2KUQ9Mw4TwpE6keh1reGgdePj6+kzB2M3
    uNENFYtOClJZD3ULdjIxoN+gL/nRvf8FgJctLAfntwgmNVjcn8Si/0hwJu6TnTwlNCc9
    TNqw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 28/31] tools: add --abort_if_busy to libxl_domain_suspend
Date: Tue, 13 Jul 2021 20:06:02 +0200
Message-Id: <20210713180605.12096-29-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Provide a knob to the host admin to abort the live migration of a
running domU if the downtime during final transit will be too long
for the workload within domU.

Adjust error reporting. Add ERROR_MIGRATION_ABORTED to allow callers of
libxl_domain_suspend to distinguish between errors and the requested
constraint.

Adjust precopy_policy to simplify reporting of remaining dirty pages.
The loop in send_memory_live populates ->dirty_count in a different
place than ->iteration. Let it proceeed one more time to provide the
desired information before leaving the loop.

This patch adjusts xl(1) and the libxl API.
External users check LIBXL_HAVE_DOMAIN_SUSPEND_PROPS for the availibility
of the new .abort_if_busy property.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 docs/man/xl.1.pod.in                  |  8 +++++++
 tools/include/libxl.h                 |  1 +
 tools/libs/light/libxl_dom_save.c     |  7 ++++++-
 tools/libs/light/libxl_domain.c       |  1 +
 tools/libs/light/libxl_internal.h     |  2 ++
 tools/libs/light/libxl_stream_write.c |  9 +++++++-
 tools/libs/light/libxl_types.idl      |  1 +
 tools/xl/xl_cmdtable.c                |  6 +++++-
 tools/xl/xl_migrate.c                 | 30 ++++++++++++++++++++-------
 9 files changed, 55 insertions(+), 10 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index a40f1d4ba0..c49d595f5e 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -508,6 +508,14 @@ low, the guest is suspended and the domU will finally be moved to I<host>.
 This allows the host admin to control for how long the domU will likely
 be suspended during transit.
 
+=item B<--abort_if_busy>
+
+Abort migration instead of doing final suspend/move/resume if the
+guest produced more than I<min_remaining> dirty pages during th number
+of I<max_iters> iterations.
+This avoids long periods of time where the guest is suspended, which
+may confuse the workload within domU.
+
 =back
 
 =item B<remus> [I<OPTIONS>] I<domain-id> I<host>
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 28d70b1078..cc056ed627 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1719,6 +1719,7 @@ typedef struct {
 } libxl_domain_suspend_props;
 #define LIBXL_SUSPEND_DEBUG 1
 #define LIBXL_SUSPEND_LIVE 2
+#define LIBXL_SUSPEND_ABORT_IF_BUSY 4
 
 int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
                          libxl_domain_suspend_props *props,
diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 14e197c581..467bbc44f1 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -383,11 +383,16 @@ static int libxl__domain_save_precopy_policy(struct precopy_stats stats, void *u
          stats.iteration, stats.dirty_count, stats.total_written);
     if (stats.dirty_count >= 0 && stats.dirty_count < dss->min_remaining)
         goto stop_copy;
-    if (stats.iteration >= dss->max_iters)
+    if (stats.dirty_count >= 0 && stats.iteration >= dss->max_iters)
         goto stop_copy;
     return XGS_POLICY_CONTINUE_PRECOPY;
 
 stop_copy:
+    if (dss->abort_if_busy)
+    {
+        dss->remaining_dirty_pages = stats.dirty_count;
+        return XGS_POLICY_ABORT;
+    }
     return XGS_POLICY_STOP_AND_COPY;
 }
 
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 06ca7a7df6..e4740b063e 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -529,6 +529,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
     dss->type = type;
     dss->max_iters = props->max_iters ?: LIBXL_XGS_POLICY_MAX_ITERATIONS;
     dss->min_remaining = props->min_remaining ?: LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT;
+    dss->abort_if_busy = props->flags & LIBXL_SUSPEND_ABORT_IF_BUSY;
     dss->live = props->flags & LIBXL_SUSPEND_LIVE;
     dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index c503fe156c..862976b2b2 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -3647,9 +3647,11 @@ struct libxl__domain_save_state {
     libxl_domain_type type;
     int live;
     int debug;
+    int abort_if_busy;
     int checkpointed_stream;
     uint32_t max_iters;
     uint32_t min_remaining;
+    long remaining_dirty_pages;
     const libxl_domain_remus_info *remus;
     /* private */
     int rc;
diff --git a/tools/libs/light/libxl_stream_write.c b/tools/libs/light/libxl_stream_write.c
index 634f3240d1..1ab3943f3e 100644
--- a/tools/libs/light/libxl_stream_write.c
+++ b/tools/libs/light/libxl_stream_write.c
@@ -344,11 +344,18 @@ void libxl__xc_domain_save_done(libxl__egc *egc, void *dss_void,
         goto err;
 
     if (retval) {
+        if (dss->remaining_dirty_pages) {
+            LOGD(NOTICE, dss->domid, "saving domain: aborted,"
+                 " %ld remaining dirty pages.", dss->remaining_dirty_pages);
+        } else {
         LOGEVD(ERROR, errnoval, dss->domid, "saving domain: %s",
               dss->dsps.guest_responded ?
               "domain responded to suspend request" :
               "domain did not respond to suspend request");
-        if (!dss->dsps.guest_responded)
+        }
+        if (dss->remaining_dirty_pages)
+           rc = ERROR_MIGRATION_ABORTED;
+        else if(!dss->dsps.guest_responded)
             rc = ERROR_GUEST_TIMEDOUT;
         else if (dss->rc)
             rc = dss->rc;
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index f45adddab0..b91769ee10 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -76,6 +76,7 @@ libxl_error = Enumeration("error", [
     (-30, "QMP_DEVICE_NOT_ACTIVE"), # a device has failed to be become active
     (-31, "QMP_DEVICE_NOT_FOUND"), # the requested device has not been found
     (-32, "QEMU_API"), # QEMU's replies don't contains expected members
+    (-33, "MIGRATION_ABORTED"),
     ], value_namespace = "")
 
 libxl_domain_type = Enumeration("domain_type", [
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index e10b580261..b5225a5f1b 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -176,7 +176,11 @@ const struct cmd_spec cmd_table[] = {
       "-p                Do not unpause domain after migrating it.\n"
       "-D                Preserve the domain id\n"
       "--max_iters N     Number of copy iterations before final stop+move\n"
-      "--min_remaining N Number of remaining dirty pages before final stop+move"
+      "--min_remaining N Number of remaining dirty pages before final stop+move\n"
+      "--abort_if_busy   Abort migration instead of doing final stop+move,\n"
+      "                  if the number of dirty pages is higher than <min_remaining>\n"
+      "                  after <max_iters> iterations. Otherwise the amount of memory\n"
+      "                  to be transfered would exceed maximum allowed domU downtime."
     },
     { "restore",
       &main_restore, 0, 1,
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 14feb2b7ec..f523746e5b 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -177,7 +177,7 @@ static void migrate_do_preamble(int send_fd, int recv_fd, pid_t child,
 }
 
 static void migrate_domain(uint32_t domid, int preserve_domid,
-                           const char *rune, int debug,
+                           const char *rune, int debug, int abort_if_busy,
                            uint32_t max_iters,
                            uint32_t min_remaining,
                            const char *override_config_file)
@@ -213,14 +213,20 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
 
     if (debug)
         props.flags |= LIBXL_SUSPEND_DEBUG;
+    if (abort_if_busy)
+        props.flags |= LIBXL_SUSPEND_ABORT_IF_BUSY;
     rc = libxl_domain_suspend(ctx, domid, send_fd, &props, NULL);
     if (rc) {
         fprintf(stderr, "migration sender: libxl_domain_suspend failed"
                 " (rc=%d)\n", rc);
-        if (rc == ERROR_GUEST_TIMEDOUT)
-            goto failed_suspend;
-        else
-            goto failed_resume;
+        switch (rc) {
+            case ERROR_GUEST_TIMEDOUT:
+                goto failed_suspend;
+            case ERROR_MIGRATION_ABORTED:
+                goto failed_busy;
+            default:
+                goto failed_resume;
+        }
     }
 
     //fprintf(stderr, "migration sender: Transfer complete.\n");
@@ -302,6 +308,12 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     fprintf(stderr, "Migration failed, failed to suspend at sender.\n");
     exit(EXIT_FAILURE);
 
+ failed_busy:
+    close(send_fd);
+    migration_child_report(recv_fd);
+    fprintf(stderr, "Migration aborted as requested, domain is too busy.\n");
+    exit(EXIT_FAILURE);
+
  failed_resume:
     close(send_fd);
     migration_child_report(recv_fd);
@@ -545,13 +557,14 @@ int main_migrate(int argc, char **argv)
     char *rune = NULL;
     char *host;
     int opt, daemonize = 1, monitor = 1, debug = 0, pause_after_migration = 0;
-    int preserve_domid = 0;
+    int preserve_domid = 0, abort_if_busy = 0;
     uint32_t max_iters = 0;
     uint32_t min_remaining = 0;
     static struct option opts[] = {
         {"debug", 0, 0, 0x100},
         {"max_iters", 1, 0, 0x101},
         {"min_remaining", 1, 0, 0x102},
+        {"abort_if_busy", 0, 0, 0x103},
         {"live", 0, 0, 0x200},
         COMMON_LONG_OPTS
     };
@@ -585,6 +598,9 @@ int main_migrate(int argc, char **argv)
     case 0x102: /* --min_remaining */
         min_remaining = atoi(optarg);
         break;
+    case 0x103: /* --abort_if_busy */
+        abort_if_busy = 1;
+        break;
     case 0x200: /* --live */
         /* ignored for compatibility with xm */
         break;
@@ -619,7 +635,7 @@ int main_migrate(int argc, char **argv)
                   pause_after_migration ? " -p" : "");
     }
 
-    migrate_domain(domid, preserve_domid, rune, debug,
+    migrate_domain(domid, preserve_domid, rune, debug, abort_if_busy,
                    max_iters, min_remaining, config_filename);
     return EXIT_SUCCESS;
 }


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:16:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:16:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155611.287344 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mx0-00087U-DJ; Tue, 13 Jul 2021 18:16:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155611.287344; Tue, 13 Jul 2021 18:16:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mx0-00087J-9Y; Tue, 13 Jul 2021 18:16:10 +0000
Received: by outflank-mailman (input) for mailman id 155611;
 Tue, 13 Jul 2021 18:16:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoZ-0002kr-VO
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:28 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.101])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0b687569-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:30 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6LtB6
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:21 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0b687569-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199581;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=GjudnVF2IHqXv7qlToU0RRwDe7Jc7WilBXGXYBOzt/s=;
    b=J/0o1XrmqfrXKI3DihqrrnnSctYBw0s8LXUYPsJXNCmiklD8n8Aj/Tkr0R4D4jSDUV
    GrrgaaxGbsNqdffLtaKR7ifUph8rxmZYP+Uj8jaa5kbmlkXKnOVvyZn3av5k43Pnt8c8
    fXFqeX/OZn3fNgBgHji4nMsNg3eh0vMsaAyOgAjpp+wIUh6lgifGly0dOgVhb6AVhTUZ
    JP9XuOa5pDmYQ7wMZdxTxj64v5X0i6JZgTLG3hkgM8vQJXLXie8u9ZjET5xgn/DA+8RI
    H6D9QKPeKLSNfyw0WUGTCkie47tzN1+R/N+rVSFdC7RYPXvMmMf5i/I0oyTrspS0yd/Z
    m6YQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Christian Lindig <christian.lindig@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	David Scott <dave@recoil.org>
Subject: [PATCH v20210713 24/31] tools: adjust libxl_domain_suspend to receive a struct props
Date: Tue, 13 Jul 2021 20:05:58 +0200
Message-Id: <20210713180605.12096-25-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Upcoming changes will pass more knobs down to xc_domain_save.
Adjust the libxl_domain_suspend API to allow easy adding of additional knobs.

No change in behavior intented.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
---
 tools/include/libxl.h                | 26 +++++++++++++++++++++++---
 tools/libs/light/libxl_domain.c      |  7 ++++---
 tools/ocaml/libs/xl/xenlight_stubs.c |  3 ++-
 tools/xl/xl_migrate.c                |  9 ++++++---
 tools/xl/xl_saverestore.c            |  3 ++-
 5 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 29931626a2..9a4d7514ed 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1706,12 +1706,32 @@ static inline int libxl_retrieve_domain_configuration_0x041200(
     libxl_retrieve_domain_configuration_0x041200
 #endif
 
+/*
+ * LIBXL_HAVE_DOMAIN_SUSPEND_PROPS indicates that the
+ * libxl_domain_suspend_props() function takes a props struct.
+ */
+#define LIBXL_HAVE_DOMAIN_SUSPEND_PROPS 1
+
+typedef struct {
+    uint32_t flags; /* LIBXL_SUSPEND_* */
+} libxl_domain_suspend_props;
+#define LIBXL_SUSPEND_DEBUG 1
+#define LIBXL_SUSPEND_LIVE 2
+
 int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
-                         int flags, /* LIBXL_SUSPEND_* */
+                         libxl_domain_suspend_props *props,
                          const libxl_asyncop_how *ao_how)
                          LIBXL_EXTERNAL_CALLERS_ONLY;
-#define LIBXL_SUSPEND_DEBUG 1
-#define LIBXL_SUSPEND_LIVE 2
+#if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION < 0x041600
+static inline int libxl_domain_suspend_0x041500(libxl_ctx *ctx, uint32_t domid,
+                         int fd, int flags, /* LIBXL_SUSPEND_* */
+                         const libxl_asyncop_how *ao_how)
+{
+    libxl_domain_suspend_props props = { .flags = flags, };
+    return libxl_domain_suspend(ctx, domid, fd, &props, ao_how);
+}
+#define libxl_domain_suspend libxl_domain_suspend_0x041500
+#endif
 
 /*
  * Only suspend domain, do not save its state to file, do not destroy it.
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index c00c36c928..5dbd27900f 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -505,7 +505,8 @@ static void domain_suspend_cb(libxl__egc *egc,
 
 }
 
-int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags,
+int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
+                         libxl_domain_suspend_props *props,
                          const libxl_asyncop_how *ao_how)
 {
     AO_CREATE(ctx, domid, ao_how);
@@ -526,8 +527,8 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags,
     dss->domid = domid;
     dss->fd = fd;
     dss->type = type;
-    dss->live = flags & LIBXL_SUSPEND_LIVE;
-    dss->debug = flags & LIBXL_SUSPEND_DEBUG;
+    dss->live = props->flags & LIBXL_SUSPEND_LIVE;
+    dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
 
     rc = libxl__fd_flags_modify_save(gc, dss->fd,
diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c
index 45b8af61c7..ea5ee33ce9 100644
--- a/tools/ocaml/libs/xl/xenlight_stubs.c
+++ b/tools/ocaml/libs/xl/xenlight_stubs.c
@@ -618,10 +618,11 @@ value stub_libxl_domain_suspend(value ctx, value domid, value fd, value async, v
 	int ret;
 	uint32_t c_domid = Int_val(domid);
 	int c_fd = Int_val(fd);
+	libxl_domain_suspend_props props = {};
 	libxl_asyncop_how *ao_how = aohow_val(async);
 
 	caml_enter_blocking_section();
-	ret = libxl_domain_suspend(CTX, c_domid, c_fd, 0, ao_how);
+	ret = libxl_domain_suspend(CTX, c_domid, c_fd, &props, ao_how);
 	caml_leave_blocking_section();
 
 	free(ao_how);
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index b8594f44a5..144890924f 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -186,7 +186,10 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     char *away_domname;
     char rc_buf;
     uint8_t *config_data;
-    int config_len, flags = LIBXL_SUSPEND_LIVE;
+    int config_len;
+    libxl_domain_suspend_props props = {
+        .flags = LIBXL_SUSPEND_LIVE,
+        };
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
                            &config_data, &config_len);
@@ -205,8 +208,8 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     xtl_stdiostream_adjust_flags(logger, XTL_STDIOSTREAM_HIDE_PROGRESS, 0);
 
     if (debug)
-        flags |= LIBXL_SUSPEND_DEBUG;
-    rc = libxl_domain_suspend(ctx, domid, send_fd, flags, NULL);
+        props.flags |= LIBXL_SUSPEND_DEBUG;
+    rc = libxl_domain_suspend(ctx, domid, send_fd, &props, NULL);
     if (rc) {
         fprintf(stderr, "migration sender: libxl_domain_suspend failed"
                 " (rc=%d)\n", rc);
diff --git a/tools/xl/xl_saverestore.c b/tools/xl/xl_saverestore.c
index 953d791d1a..476d4d9a6a 100644
--- a/tools/xl/xl_saverestore.c
+++ b/tools/xl/xl_saverestore.c
@@ -130,6 +130,7 @@ static int save_domain(uint32_t domid, int preserve_domid,
     int fd;
     uint8_t *config_data;
     int config_len;
+    libxl_domain_suspend_props props = {};
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
                            &config_data, &config_len);
@@ -146,7 +147,7 @@ static int save_domain(uint32_t domid, int preserve_domid,
 
     save_domain_core_writeconfig(fd, filename, config_data, config_len);
 
-    int rc = libxl_domain_suspend(ctx, domid, fd, 0, NULL);
+    int rc = libxl_domain_suspend(ctx, domid, fd, &props, NULL);
     close(fd);
 
     if (rc < 0) {


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:16:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:16:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155612.287354 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mx2-0008T3-Lp; Tue, 13 Jul 2021 18:16:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155612.287354; Tue, 13 Jul 2021 18:16:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mx2-0008St-IV; Tue, 13 Jul 2021 18:16:12 +0000
Received: by outflank-mailman (input) for mailman id 155612;
 Tue, 13 Jul 2021 18:16:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Mx1-0008Me-9t; Tue, 13 Jul 2021 18:16:11 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Mx1-0003DK-3K; Tue, 13 Jul 2021 18:16:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Mx0-0006Oj-QG; Tue, 13 Jul 2021 18:16:10 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Mx0-0003RB-Pl; Tue, 13 Jul 2021 18:16:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=YmuQOuhmoqPmlQCR3IWauFga9JH6NUEps5vxMEBbtoc=; b=Hp9XE2Hp+m36AID4SxHxsFRBGm
	4BMEmJFPIWgJkczV2CCrDeqdZnKRAQa3eOsz2Rsu7sVQlYVUJF5OkY8BPKLmRdm8zj1Pt4RUWb7mq
	l3MV4fjLF/GACkLwrRlBhdP3LjSIwTddY1ZuCUJM8nHUa+vSkI3EKsICLWi8r3WXRV7w=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163640-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163640: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7fef2edf7cc753b51f7ccc74993971b0a9c81eca
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 18:16:10 +0000

flight 163640 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163640/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                7fef2edf7cc753b51f7ccc74993971b0a9c81eca
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  346 days
Failing since        152366  2020-08-01 20:49:34 Z  345 days  591 attempts
Testing same since   163620  2021-07-12 23:09:54 Z    0 days    2 attempts

------------------------------------------------------------
6679 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1966348 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:16:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:16:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155619.287368 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mx9-0000dr-6Z; Tue, 13 Jul 2021 18:16:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155619.287368; Tue, 13 Jul 2021 18:16:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mx9-0000dN-3F; Tue, 13 Jul 2021 18:16:19 +0000
Received: by outflank-mailman (input) for mailman id 155619;
 Tue, 13 Jul 2021 18:16:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoK-0002kr-Um
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:12 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08fbe437-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:25 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6JtB1
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:19 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08fbe437-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199579;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=wFaHjRr5CaNl9QDq6ACoz1L0ZIK5luGgqWXq90MCCnY=;
    b=iGZkvu+nFDp2Qi9G/qyWxe53jJ5q5rpan1wOShcflsFO4qJkJDt19PiA+mHfcbxnDs
    4mKieBHWjIJld2E6m1z3zkX0P1f2F/tai4zZufT5ngAXAf8KCRR/cHZxFmJlHu4++E3n
    dhiiXQ9bwccdaAdpCH/AW8A8S11ZhevYyoLSiGWNYYy2IiNVzs1XCd1Ss2hSPpzp6ru3
    aBlrRnhBGBHTGRGyQZYB6y4lgxvGrHIWeQ8vFB/tbSC/+Z9kHznU2lnKiy7nk5nVueJc
    2emK1CkzG69D1aj0YCdSBQ5yNRMH2LZvquqR5o/yQdUmrYekoYi4rgOZvtRGLjVaDbpe
    1kMA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 19/31] tools: restore: preallocate populate_pfns mfns array
Date: Tue, 13 Jul 2021 20:05:53 +0200
Message-Id: <20210713180605.12096-20-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in an incoming batch.
Allocate the space once.

Use some prefix to avoid conflict with an array used in handle_page_data.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |  1 +
 tools/libs/guest/xg_sr_restore.c | 23 ++++++++---------------
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index ca44e59382..c6c6a31dc6 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -261,6 +261,7 @@ struct xc_sr_context
             xen_pfn_t *mfns;
             int *map_errs;
             xen_pfn_t *pp_pfns;
+            xen_pfn_t *pp_mfns;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index caac4bb5fa..2734ef06fd 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -138,17 +138,9 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
                   const xen_pfn_t *original_pfns, const uint32_t *types)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = malloc(count * sizeof(*mfns));
     unsigned int i, nr_pfns = 0;
     int rc = -1;
 
-    if ( !mfns )
-    {
-        ERROR("Failed to allocate %zu bytes for populating the physmap",
-              2 * count * sizeof(*mfns));
-        goto err;
-    }
-
     for ( i = 0; i < count; ++i )
     {
         if ( (!types || page_type_to_populate(types[i])) &&
@@ -157,7 +149,7 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
             rc = pfn_set_populated(ctx, original_pfns[i]);
             if ( rc )
                 goto err;
-            ctx->restore.pp_pfns[nr_pfns] = mfns[nr_pfns] = original_pfns[i];
+            ctx->restore.pp_pfns[nr_pfns] = ctx->restore.pp_mfns[nr_pfns] = original_pfns[i];
             ++nr_pfns;
         }
     }
@@ -165,7 +157,7 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
     if ( nr_pfns )
     {
         rc = xc_domain_populate_physmap_exact(
-            xch, ctx->domid, nr_pfns, 0, 0, mfns);
+            xch, ctx->domid, nr_pfns, 0, 0, ctx->restore.pp_mfns);
         if ( rc )
         {
             PERROR("Failed to populate physmap");
@@ -174,22 +166,20 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
 
         for ( i = 0; i < nr_pfns; ++i )
         {
-            if ( mfns[i] == INVALID_MFN )
+            if ( ctx->restore.pp_mfns[i] == INVALID_MFN )
             {
                 ERROR("Populate physmap failed for pfn %u", i);
                 rc = -1;
                 goto err;
             }
 
-            ctx->restore.ops.set_gfn(ctx, ctx->restore.pp_pfns[i], mfns[i]);
+            ctx->restore.ops.set_gfn(ctx, ctx->restore.pp_pfns[i], ctx->restore.pp_mfns[i]);
         }
     }
 
     rc = 0;
 
  err:
-    free(mfns);
-
     return rc;
 }
 
@@ -706,8 +696,10 @@ static int setup(struct xc_sr_context *ctx)
     ctx->restore.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.mfns));
     ctx->restore.map_errs = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.map_errs));
     ctx->restore.pp_pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_pfns));
+    ctx->restore.pp_mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_mfns));
     if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns ||
-         !ctx->restore.map_errs || !ctx->restore.pp_pfns )
+         !ctx->restore.map_errs || !ctx->restore.pp_pfns ||
+         !ctx->restore.pp_mfns )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -744,6 +736,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.pp_mfns);
     free(ctx->restore.pp_pfns);
     free(ctx->restore.map_errs);
     free(ctx->restore.mfns);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:16:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:16:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155633.287380 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MxI-0001IF-H5; Tue, 13 Jul 2021 18:16:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155633.287380; Tue, 13 Jul 2021 18:16:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MxI-0001Hy-Da; Tue, 13 Jul 2021 18:16:28 +0000
Received: by outflank-mailman (input) for mailman id 155633;
 Tue, 13 Jul 2021 18:16:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Mob-0002UL-I1
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:29 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.173])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4a8a3ea9-6210-4d4a-a421-7fa78117dac6;
 Tue, 13 Jul 2021 18:06:31 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6MtB8
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:22 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4a8a3ea9-6210-4d4a-a421-7fa78117dac6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199582;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=qvO8GzSJw/Kk2FcJhvVEgMzp+lMjpREiYaCjuaK8qSw=;
    b=tRRttb8vYOfgsZYnk/bwRjPm3BeTUdiaQl7IH/iqlKEtzSmz+Bn1+jQkHPc0IY+DPn
    eUIrgIr9sF1AqdAOP2hzxZIBm11miE8FvBL+/wQ2YSPUXbnndr6uUC8tLbSNBUWvLuqr
    3kPGrTt2IzUTajYkDAYHwTo2Awnuqjsib7P6kiYBV3N5wgXeTY92vG9iK/BHM71rKGW1
    UQdz/Ovoa87e8vAMjO7Nn+KVjbTtw3v4cj0V3+/tnbSQHspe8vR2g6zNkLFAo9NEdeu1
    bip6bV7QhBTTNXnmP71pvmwjNNkmkbas+EMTtddKZpXpxBXKyx4WRc88qPDZc+Prf5l7
    IlFg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 26/31] tools: add --max_iters to libxl_domain_suspend
Date: Tue, 13 Jul 2021 20:06:00 +0200
Message-Id: <20210713180605.12096-27-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Migrating a large, and potentially busy, domU will take more
time than neccessary due to excessive number of copying iterations.

Allow to host admin to control the number of iterations which
copy cumulated domU dirty pages to the target host.

The default remains 5, which means one initial iteration to copy the
entire domU memory, and up to 4 additional iterations to copy dirty
memory from the still running domU. After the given number of iterations
the domU is suspended, remaining dirty memory is copied and the domU is
finally moved to the target host.

This patch adjusts xl(1) and the libxl API.
External users check LIBXL_HAVE_DOMAIN_SUSPEND_PROPS for the availibility
of the new .max_iters property.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 docs/man/xl.1.pod.in              |  4 ++++
 tools/include/libxl.h             |  1 +
 tools/libs/light/libxl_dom_save.c |  2 +-
 tools/libs/light/libxl_domain.c   |  1 +
 tools/libs/light/libxl_internal.h |  1 +
 tools/xl/xl_cmdtable.c            |  3 ++-
 tools/xl/xl_migrate.c             | 10 +++++++++-
 7 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index bae557b1de..9b104720d3 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -496,6 +496,10 @@ such that it will be identical on the destination host, unless that
 configuration is overridden using the B<-C> option. Note that it is not
 possible to use this option for a 'localhost' migration.
 
+=item B<--max_iters> I<iterations>
+
+Number of copy iterations before final suspend+move (default: 5)
+
 =back
 
 =item B<remus> [I<OPTIONS>] I<domain-id> I<host>
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 9a4d7514ed..bf77da0524 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1714,6 +1714,7 @@ static inline int libxl_retrieve_domain_configuration_0x041200(
 
 typedef struct {
     uint32_t flags; /* LIBXL_SUSPEND_* */
+    uint32_t max_iters;
 } libxl_domain_suspend_props;
 #define LIBXL_SUSPEND_DEBUG 1
 #define LIBXL_SUSPEND_LIVE 2
diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 839e061881..106c08a199 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -383,7 +383,7 @@ static int libxl__domain_save_precopy_policy(struct precopy_stats stats, void *u
          stats.iteration, stats.dirty_count, stats.total_written);
     if (stats.dirty_count >= 0 && stats.dirty_count < LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT)
         goto stop_copy;
-    if (stats.iteration >= LIBXL_XGS_POLICY_MAX_ITERATIONS)
+    if (stats.iteration >= dss->max_iters)
         goto stop_copy;
     return XGS_POLICY_CONTINUE_PRECOPY;
 
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 5dbd27900f..9f98cd7f2b 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -527,6 +527,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
     dss->domid = domid;
     dss->fd = fd;
     dss->type = type;
+    dss->max_iters = props->max_iters ?: LIBXL_XGS_POLICY_MAX_ITERATIONS;
     dss->live = props->flags & LIBXL_SUSPEND_LIVE;
     dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index f7df4ab397..cfb83d80d7 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -3648,6 +3648,7 @@ struct libxl__domain_save_state {
     int live;
     int debug;
     int checkpointed_stream;
+    uint32_t max_iters;
     const libxl_domain_remus_info *remus;
     /* private */
     int rc;
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index e4f27a3248..678b236d76 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -174,7 +174,8 @@ const struct cmd_spec cmd_table[] = {
       "                of the domain.\n"
       "--debug         Enable verification mode.\n"
       "-p              Do not unpause domain after migrating it.\n"
-      "-D              Preserve the domain id"
+      "-D              Preserve the domain id\n"
+      "--max_iters N   Number of copy iterations before final stop+move"
     },
     { "restore",
       &main_restore, 0, 1,
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 144890924f..af117d4d56 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -178,6 +178,7 @@ static void migrate_do_preamble(int send_fd, int recv_fd, pid_t child,
 
 static void migrate_domain(uint32_t domid, int preserve_domid,
                            const char *rune, int debug,
+                           uint32_t max_iters,
                            const char *override_config_file)
 {
     pid_t child = -1;
@@ -189,6 +190,7 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     int config_len;
     libxl_domain_suspend_props props = {
         .flags = LIBXL_SUSPEND_LIVE,
+        .max_iters = max_iters,
         };
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
@@ -542,8 +544,10 @@ int main_migrate(int argc, char **argv)
     char *host;
     int opt, daemonize = 1, monitor = 1, debug = 0, pause_after_migration = 0;
     int preserve_domid = 0;
+    uint32_t max_iters = 0;
     static struct option opts[] = {
         {"debug", 0, 0, 0x100},
+        {"max_iters", 1, 0, 0x101},
         {"live", 0, 0, 0x200},
         COMMON_LONG_OPTS
     };
@@ -571,6 +575,9 @@ int main_migrate(int argc, char **argv)
     case 0x100: /* --debug */
         debug = 1;
         break;
+    case 0x101: /* --max_iters */
+        max_iters = atoi(optarg);
+        break;
     case 0x200: /* --live */
         /* ignored for compatibility with xm */
         break;
@@ -605,7 +612,8 @@ int main_migrate(int argc, char **argv)
                   pause_after_migration ? " -p" : "");
     }
 
-    migrate_domain(domid, preserve_domid, rune, debug, config_filename);
+    migrate_domain(domid, preserve_domid, rune, debug,
+                   max_iters, config_filename);
     return EXIT_SUCCESS;
 }
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:16:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:16:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155634.287385 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MxI-0001Ld-Vq; Tue, 13 Jul 2021 18:16:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155634.287385; Tue, 13 Jul 2021 18:16:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MxI-0001KS-LR; Tue, 13 Jul 2021 18:16:28 +0000
Received: by outflank-mailman (input) for mailman id 155634;
 Tue, 13 Jul 2021 18:16:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoW-0002UL-Ht
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:24 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.100])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2d529767-36b1-4653-86ed-96c892b17c81;
 Tue, 13 Jul 2021 18:06:30 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6MtB7
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:22 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2d529767-36b1-4653-86ed-96c892b17c81
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199582;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=+k3zEXoyDaXQEiwvjOV10rf+liXTt7laH3C3jd8kr68=;
    b=FOKUhjofFTsweTT9yIXVCx+FyE+wsZGTUdNwhv7ts3CvDvMsT/m/Ih+OZszMb2BqK0
    EQY51Er931hHXpHOVSLjw90N6/lzp7qO0VAfzr0sii+XeDjQIMw/KCo8lSPnAyb8xw3S
    YxBXIrL6EbowucDFcKLrQdjkvvVJCZ7FlIDLTzFOHYeqnsqtgzUj9oA2PT3vKb5ACmcz
    ou9fBTCDsSsQboq4HVYFioY3KeJo6rta0zyTFF6RJshhXvHry3GKuY9pnJ8Hpe3LWo2m
    1sOMeDcZzyE7e2i4jcZrDpEHw+me9xJZW9zqoH5MDLK1fPy6N5z9A4k++C0HwceqHP9A
    iEAw==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 25/31] tools: add callback to libxl for precopy_policy and precopy_stats
Date: Tue, 13 Jul 2021 20:05:59 +0200
Message-Id: <20210713180605.12096-26-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This duplicates simple_precopy_policy. To recap its purpose:
- do up to 5 iterations of copying dirty domU memory to target,
  including the initial copying of all domU memory, excluding
  the final copying while the domU is suspended
- do fewer iterations in case the domU dirtied less than 50 pages

Take the opportunity to also move xen_pfn_t into qw().

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
v02:
- use plain struct precopy_stats instead of inventing
  a new precopy_stats_t (anthony)
---
 tools/libs/light/libxl_dom_save.c       | 19 +++++++++++++++++++
 tools/libs/light/libxl_internal.h       |  2 ++
 tools/libs/light/libxl_save_msgs_gen.pl |  3 ++-
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 32e3cb5a13..839e061881 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -373,6 +373,24 @@ int libxl__save_emulator_xenstore_data(libxl__domain_save_state *dss,
     return rc;
 }
 
+static int libxl__domain_save_precopy_policy(struct precopy_stats stats, void *user)
+{
+    libxl__save_helper_state *shs = user;
+    libxl__domain_save_state *dss = shs->caller_state;
+    STATE_AO_GC(dss->ao);
+
+    LOGD(DEBUG, shs->domid, "iteration %u dirty_count %ld total_written %lu",
+         stats.iteration, stats.dirty_count, stats.total_written);
+    if (stats.dirty_count >= 0 && stats.dirty_count < LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT)
+        goto stop_copy;
+    if (stats.iteration >= LIBXL_XGS_POLICY_MAX_ITERATIONS)
+        goto stop_copy;
+    return XGS_POLICY_CONTINUE_PRECOPY;
+
+stop_copy:
+    return XGS_POLICY_STOP_AND_COPY;
+}
+
 /*----- main code for saving, in order of execution -----*/
 
 void libxl__domain_save(libxl__egc *egc, libxl__domain_save_state *dss)
@@ -430,6 +448,7 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_save_state *dss)
         callbacks->suspend = libxl__domain_suspend_callback;
 
     callbacks->switch_qemu_logdirty = libxl__domain_suspend_common_switch_qemu_logdirty;
+    callbacks->precopy_policy = libxl__domain_save_precopy_policy;
 
     dss->sws.ao  = dss->ao;
     dss->sws.dss = dss;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index 0b4671318c..f7df4ab397 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -124,6 +124,8 @@
 #define DOMID_XS_PATH "domid"
 #define PVSHIM_BASENAME "xen-shim"
 #define PVSHIM_CMDLINE "pv-shim console=xen,pv"
+#define LIBXL_XGS_POLICY_MAX_ITERATIONS 5
+#define LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT 50
 
 /* Size macros. */
 #define __AC(X,Y)   (X##Y)
diff --git a/tools/libs/light/libxl_save_msgs_gen.pl b/tools/libs/light/libxl_save_msgs_gen.pl
index 9d425b1dee..b95942ed91 100755
--- a/tools/libs/light/libxl_save_msgs_gen.pl
+++ b/tools/libs/light/libxl_save_msgs_gen.pl
@@ -23,6 +23,7 @@ our @msgs = (
                                              STRING doing_what),
                                             'unsigned long', 'done',
                                             'unsigned long', 'total'] ],
+    [ 'scxW',   "precopy_policy", ['struct precopy_stats', 'stats'] ],
     [ 'srcxA',  "suspend", [] ],
     [ 'srcxA',  "postcopy", [] ],
     [ 'srcxA',  "checkpoint", [] ],
@@ -142,7 +143,7 @@ static void bytes_put(unsigned char *const buf, int *len,
 
 END
 
-foreach my $simpletype (qw(int uint16_t uint32_t unsigned), 'unsigned long', 'xen_pfn_t') {
+foreach my $simpletype (qw(int uint16_t uint32_t unsigned xen_pfn_t), 'struct precopy_stats', 'unsigned long') {
     my $typeid = typeid($simpletype);
     $out_body{'callout'} .= <<END;
 static int ${typeid}_get(const unsigned char **msg,


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:16:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:16:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155639.287402 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MxN-00023T-73; Tue, 13 Jul 2021 18:16:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155639.287402; Tue, 13 Jul 2021 18:16:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MxN-00022K-2U; Tue, 13 Jul 2021 18:16:33 +0000
Received: by outflank-mailman (input) for mailman id 155639;
 Tue, 13 Jul 2021 18:16:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoC-0002UL-HN
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:04 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.173])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2ecee7c7-15e0-4e66-8c9d-84abd882dd66;
 Tue, 13 Jul 2021 18:06:26 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6KtB4
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:20 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2ecee7c7-15e0-4e66-8c9d-84abd882dd66
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199580;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=XpbwYZI6TX0rUOJJRsTgz/BUclsrX9blWzzFnveyZbk=;
    b=VFXG3isBNY/F8rK3W7hVJ+jAumS2jr7OBkfKi/kQyVsjO9MhFxPG8EMZfthuBNd0Ca
    gbpfcdPvvHMeIQHpGU/CA6KyiBijdWqraaSFTSTv8ilxhYhOW2etctIm7X0rw1bjnYeJ
    HF7sjJrjjJRZ8yAyP6V7IGOgwGVL225GxXMcRUx9u/o7ebMtgdKiKilfu7ptuaeQzNyw
    ASF81BzLfIQz43rTpRcVUjR3E1eTo06QJbAI18HBifHDclpJORK7cTmIoMiOq+mlA9QV
    UEwW+0OEye86Y/oW/Vd1w8Oc/WRKUhE96FpEuQt1THvSdlvDkUfj0+VI24fHNFpIjEct
    7LnQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 22/31] tools: restore: write data directly into guest
Date: Tue, 13 Jul 2021 20:05:56 +0200
Message-Id: <20210713180605.12096-23-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Read incoming migration stream directly into the guest memory.
This avoids the memory allocation and copying, and the resulting
performance penalty.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |   3 +
 tools/libs/guest/xg_sr_restore.c | 155 ++++++++++++++++++++++++++++++-
 2 files changed, 153 insertions(+), 5 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 020b41ea8b..8981c21acd 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -263,6 +263,8 @@ struct xc_sr_context
             xen_pfn_t *pp_pfns;
             xen_pfn_t *pp_mfns;
             void **guest_data;
+            struct iovec *iov;
+            struct xc_sr_rec_page_data_header *pages;
 
             void *guest_mapping;
             uint32_t nr_mapped_pages;
@@ -311,6 +313,7 @@ struct xc_sr_context
 
             /* Sender has invoked verify mode on the stream. */
             bool verify;
+            void *verify_buf;
         } restore;
     };
 
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 777d005fbd..d4012bcffd 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -381,6 +381,129 @@ err:
     return rc;
 }
 
+/*
+ * Handle PAGE_DATA record from the stream.
+ * Given a list of pfns, their types, and a block of page data from the
+ * stream, populate and record their types, map the relevant subset and copy
+ * the data into the guest.
+ */
+static int handle_incoming_page_data(struct xc_sr_context *ctx,
+                                     struct xc_sr_rhdr *rhdr)
+{
+    xc_interface *xch = ctx->xch;
+    struct xc_sr_rec_page_data_header *pages = ctx->restore.pages;
+    uint64_t *pfn_nums = &pages->pfn[0];
+    uint32_t i;
+    int rc, iov_idx;
+
+    rc = handle_static_data_end_v2(ctx);
+    if ( rc )
+        goto err;
+
+    /* First read and verify the header */
+    rc = read_exact(ctx->fd, pages, sizeof(*pages));
+    if ( rc )
+    {
+        PERROR("Could not read rec_pfn header");
+        goto err;
+    }
+
+    if ( !verify_rec_page_hdr(ctx, rhdr->length, pages) )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Then read and verify the incoming pfn numbers */
+    rc = read_exact(ctx->fd, pfn_nums, sizeof(*pfn_nums) * pages->count);
+    if ( rc )
+    {
+        PERROR("Could not read rec_pfn data");
+        goto err;
+    }
+
+    if ( !verify_rec_page_pfns(ctx, rhdr->length, pages) )
+    {
+        rc = -1;
+        goto err;
+    }
+
+    /* Finally read and verify the incoming pfn data */
+    rc = map_guest_pages(ctx, pages);
+    if ( rc )
+        goto err;
+
+    /* Prepare read buffers, either guest or throw-away memory */
+    for ( i = 0, iov_idx = 0; i < pages->count; i++ )
+    {
+        struct iovec *iov;
+
+        if ( !ctx->restore.guest_data[i] )
+            continue;
+
+        iov = &ctx->restore.iov[iov_idx];
+        iov->iov_len = PAGE_SIZE;
+        if ( ctx->restore.verify )
+            iov->iov_base = ctx->restore.verify_buf + (i * PAGE_SIZE);
+        else
+            iov->iov_base = ctx->restore.guest_data[i];
+        iov_idx++;
+    }
+
+    if ( !iov_idx )
+        goto done;
+
+    rc = readv_exact(ctx->fd, ctx->restore.iov, iov_idx);
+    if ( rc )
+    {
+        PERROR("read of %d pages failed", iov_idx);
+        goto err;
+    }
+
+    /* Post-processing of pfn data */
+    for ( i = 0, iov_idx = 0; i < pages->count; i++ )
+    {
+        void *addr;
+
+        if ( !ctx->restore.guest_data[i] )
+            continue;
+
+        addr = ctx->restore.iov[iov_idx].iov_base;
+        rc = ctx->restore.ops.localise_page(ctx, ctx->restore.types[i], addr);
+        if ( rc )
+        {
+            ERROR("Failed to localise pfn %#"PRIpfn" (type %#"PRIx32")",
+                  ctx->restore.pfns[i],
+                  ctx->restore.types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+            goto err;
+
+        }
+
+        if ( ctx->restore.verify )
+        {
+            if ( memcmp(ctx->restore.guest_data[i], addr, PAGE_SIZE) )
+            {
+                ERROR("verify pfn %#"PRIpfn" failed (type %#"PRIx32")",
+                      ctx->restore.pfns[i],
+                      ctx->restore.types[i] >> XEN_DOMCTL_PFINFO_LTAB_SHIFT);
+            }
+        }
+
+        iov_idx++;
+    }
+
+done:
+    rc = 0;
+
+err:
+    if ( ctx->restore.guest_mapping )
+    {
+        xenforeignmemory_unmap(xch->fmem, ctx->restore.guest_mapping, ctx->restore.nr_mapped_pages);
+        ctx->restore.guest_mapping = NULL;
+    }
+    return rc;
+}
+
 /*
  * Handle PAGE_DATA record from an existing buffer
  * Given a list of pfns, their types, and a block of page data from the
@@ -726,6 +849,15 @@ static int process_buffered_record(struct xc_sr_context *ctx, struct xc_sr_recor
     case REC_TYPE_VERIFY:
         DPRINTF("Verify mode enabled");
         ctx->restore.verify = true;
+        if ( !ctx->restore.verify_buf )
+        {
+            ctx->restore.verify_buf = malloc(MAX_BATCH_SIZE * PAGE_SIZE);
+            if ( !ctx->restore.verify_buf )
+            {
+                PERROR("Unable to allocate verify_buf");
+                rc = -1;
+            }
+        }
         break;
 
     case REC_TYPE_CHECKPOINT:
@@ -752,11 +884,19 @@ static int process_incoming_record_header(struct xc_sr_context *ctx, struct xc_s
     struct xc_sr_record rec;
     int rc;
 
-    rc = read_record_data(ctx, ctx->fd, rhdr, &rec);
-    if ( rc )
-        return rc;
+    switch ( rhdr->type )
+    {
+    case REC_TYPE_PAGE_DATA:
+        rc = handle_incoming_page_data(ctx, rhdr);
+        break;
+    default:
+        rc = read_record_data(ctx, ctx->fd, rhdr, &rec);
+        if ( rc == 0 )
+            rc = process_buffered_record(ctx, &rec);;
+        break;
+    }
 
-    return process_buffered_record(ctx, &rec);
+    return rc;
 }
 
 
@@ -801,9 +941,12 @@ static int setup(struct xc_sr_context *ctx)
     ctx->restore.pp_pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_pfns));
     ctx->restore.pp_mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_mfns));
     ctx->restore.guest_data = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.guest_data));
+    ctx->restore.iov = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.iov));
+    ctx->restore.pages = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pages->pfn) + sizeof(*ctx->restore.pages));
     if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns ||
          !ctx->restore.map_errs || !ctx->restore.pp_pfns ||
-         !ctx->restore.pp_mfns || !ctx->restore.guest_data )
+         !ctx->restore.pp_mfns || !ctx->restore.guest_data ||
+         !ctx->restore.iov || !ctx->restore.pages )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -840,6 +983,8 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.pages);
+    free(ctx->restore.iov);
     free(ctx->restore.guest_data);
     free(ctx->restore.pp_mfns);
     free(ctx->restore.pp_pfns);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:17:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:17:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155669.287413 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mxz-0003hg-Mu; Tue, 13 Jul 2021 18:17:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155669.287413; Tue, 13 Jul 2021 18:17:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mxz-0003hX-Jg; Tue, 13 Jul 2021 18:17:11 +0000
Received: by outflank-mailman (input) for mailman id 155669;
 Tue, 13 Jul 2021 18:17:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoU-0002kr-V7
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:22 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0bea7630-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:29 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6NtBB
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:23 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0bea7630-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199584;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=JrGxNpYov5voRDtMV5w4X2CbyE19s8jrygFtsIfZxys=;
    b=dqjaMd1F8I7hTN9jlHVKhrUl1RimwUM5FkZ/HrMgw2O9/o9nPFeQIRAvTK3NJB2UxS
    1iQbMgtVB66RRjrQQ/eopanr+m8VLVVBKcnuKfLOwoSvaTYBp3hlQ+cjS+NETGmKjrDX
    +DOEexmLpBJHCJSy5nd1pJiDetjG8qx5JM9bVmg8sZGICKgkCh5J0s3YGE7awkNK47jb
    mZqJ68kCoKtUzPPCrWPzAWRFfxwoA3UF3LeeqbGoILqjThjSSILUxEe2Wco34lFijEj/
    RlSNFtmhun3avVAe0NlYr5yoF8PQRNefs+rwHzSMsbnnpBRnCw8sv0n8b5RsCmBz0Hkj
    o9LQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 29/31] tools: add API for expandable bitmaps
Date: Tue, 13 Jul 2021 20:06:03 +0200
Message-Id: <20210713180605.12096-30-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Since the incoming migration stream lacks info about what the highest pfn
will be, some data structures can not be allocated upfront.

Add an API for expandable bitmaps, loosely based on pfn_set_populated.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.c | 39 +++++++++++++++++++
 tools/libs/guest/xg_sr_common.h | 67 +++++++++++++++++++++++++++++++++
 2 files changed, 106 insertions(+)

diff --git a/tools/libs/guest/xg_sr_common.c b/tools/libs/guest/xg_sr_common.c
index cabde4ef74..6d495ba72d 100644
--- a/tools/libs/guest/xg_sr_common.c
+++ b/tools/libs/guest/xg_sr_common.c
@@ -163,6 +163,45 @@ static void __attribute__((unused)) build_assertions(void)
     BUILD_BUG_ON(sizeof(struct xc_sr_rec_hvm_params)        != 8);
 }
 
+/*
+ * Expand the tracking structures as needed.
+ * To avoid realloc()ing too excessively, the size increased to the nearest
+ * power of two large enough to contain the required number of bits.
+ */
+bool _sr_bitmap_expand(struct sr_bitmap *bm, unsigned long bits)
+{
+    size_t new_max;
+    size_t old_sz, new_sz;
+    void *p;
+
+    if (bits <= bm->bits)
+        return true;
+
+    /* Round up to the nearest power of two larger than bit, less 1. */
+    new_max = bits;
+    new_max |= new_max >> 1;
+    new_max |= new_max >> 2;
+    new_max |= new_max >> 4;
+    new_max |= new_max >> 8;
+    new_max |= new_max >> 16;
+    new_max |= sizeof(unsigned long) > 4 ? new_max >> 32 : 0;
+
+    /* Allocate units of unsigned long */
+    new_max = (new_max + BITS_PER_LONG - 1) & ~(BITS_PER_LONG - 1);
+
+    old_sz = bitmap_size(bm->bits);
+    new_sz = bitmap_size(new_max);
+    p = realloc(bm->p, new_sz);
+    if (!p)
+        return false;
+
+    memset(p + old_sz, 0, new_sz - old_sz);
+    bm->p = p;
+    bm->bits = new_max;
+
+    return true;
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 8981c21acd..686a9614c2 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -18,6 +18,73 @@ const char *rec_type_to_str(uint32_t type);
 struct xc_sr_context;
 struct xc_sr_record;
 
+struct sr_bitmap
+{
+    void *p;
+    unsigned long bits;
+};
+
+extern bool _sr_bitmap_expand(struct sr_bitmap *bm, unsigned long bits);
+
+static inline bool sr_bitmap_expand(struct sr_bitmap *bm, unsigned long bits)
+{
+    if (bits > bm->bits)
+        return _sr_bitmap_expand(bm, bits);
+    return true;
+}
+
+static inline void sr_bitmap_free(struct sr_bitmap *bm)
+{
+    free(bm->p);
+    bm->p = NULL;
+}
+
+static inline bool sr_set_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (sr_bitmap_expand(bm, bit) == false)
+        return false;
+
+    set_bit(bit, bm->p);
+    return true;
+}
+
+static inline bool sr_test_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit > bm->bits)
+        return false;
+    return !!test_bit(bit, bm->p);
+}
+
+static inline void sr_clear_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit <= bm->bits)
+        clear_bit(bit, bm->p);
+}
+
+static inline bool sr_test_and_clear_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit > bm->bits)
+        return false;
+    return !!test_and_clear_bit(bit, bm->p);
+}
+
+/* No way to report potential allocation error, bitmap must be expanded prior usage */
+static inline bool sr_test_and_set_bit(unsigned long bit, struct sr_bitmap *bm)
+{
+    if (bit > bm->bits)
+        return false;
+    return !!test_and_set_bit(bit, bm->p);
+}
+
+static inline bool sr_set_long_bit(unsigned long base_bit, struct sr_bitmap *bm)
+{
+    if (sr_bitmap_expand(bm, base_bit + BITS_PER_LONG) == false)
+        return false;
+
+    set_bit_long(base_bit, bm->p);
+    return true;
+}
+
 /**
  * Save operations.  To be implemented for each type of guest, for use by the
  * common save algorithm.


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:17:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:17:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155670.287417 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mxz-0003kz-Vp; Tue, 13 Jul 2021 18:17:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155670.287417; Tue, 13 Jul 2021 18:17:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Mxz-0003kF-Rf; Tue, 13 Jul 2021 18:17:11 +0000
Received: by outflank-mailman (input) for mailman id 155670;
 Tue, 13 Jul 2021 18:17:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoF-0002kr-Ud
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:07 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [81.169.146.174])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08701ffb-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:24 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6ItB0
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:18 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08701ffb-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199579;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=9FxM3Bx9wXja4XqBD1sGOusWUB3Xe2+i7IOocJp1ap0=;
    b=pmlv471FKO6AMjwr8Z6WkjOjfeDTfhS4g1PsNX7OPQtPlshRqiH1D8t1MyyDwoQY28
    KvOnByp+tMenERKqJ44CYafWgoXdqW+quP8mocvhZcsZmcM5vo7wj6xa48FdiuBKMD2k
    svubuN12GRx9hb6T0FYR1RyYj0t9FThxcE8ujtpcF+LMoOL7kyhr22c/25KS2UkmG0C3
    ihAdX79HLuAIQ3vrzcEWEtTb/H4lEN4AXnjX7PMk5dRFgimqOzTjo2L5TnDh7verjJkE
    /3+jRvcwtro77LyVxMS1amPehmuTuM0nRIgltngD/ivuO651cAOq2C8J8fRiNsjmDWOT
    W+9g==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 18/31] tools: restore: preallocate populate_pfns pfns array
Date: Tue, 13 Jul 2021 20:05:52 +0200
Message-Id: <20210713180605.12096-19-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Remove repeated allocation from migration loop. There will never be
more than MAX_BATCH_SIZE pages to process in an incoming batch.
Allocate the space once.

Use some prefix to avoid conflict with an array used in handle_page_data.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h  |  1 +
 tools/libs/guest/xg_sr_restore.c | 14 +++++++-------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 336be98c93..ca44e59382 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -260,6 +260,7 @@ struct xc_sr_context
             uint32_t *types;
             xen_pfn_t *mfns;
             int *map_errs;
+            xen_pfn_t *pp_pfns;
 
             int send_back_fd;
             unsigned long p2m_size;
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 866a7c86cd..caac4bb5fa 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -138,12 +138,11 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
                   const xen_pfn_t *original_pfns, const uint32_t *types)
 {
     xc_interface *xch = ctx->xch;
-    xen_pfn_t *mfns = malloc(count * sizeof(*mfns)),
-        *pfns = malloc(count * sizeof(*pfns));
+    xen_pfn_t *mfns = malloc(count * sizeof(*mfns));
     unsigned int i, nr_pfns = 0;
     int rc = -1;
 
-    if ( !mfns || !pfns )
+    if ( !mfns )
     {
         ERROR("Failed to allocate %zu bytes for populating the physmap",
               2 * count * sizeof(*mfns));
@@ -158,7 +157,7 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
             rc = pfn_set_populated(ctx, original_pfns[i]);
             if ( rc )
                 goto err;
-            pfns[nr_pfns] = mfns[nr_pfns] = original_pfns[i];
+            ctx->restore.pp_pfns[nr_pfns] = mfns[nr_pfns] = original_pfns[i];
             ++nr_pfns;
         }
     }
@@ -182,14 +181,13 @@ int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
                 goto err;
             }
 
-            ctx->restore.ops.set_gfn(ctx, pfns[i], mfns[i]);
+            ctx->restore.ops.set_gfn(ctx, ctx->restore.pp_pfns[i], mfns[i]);
         }
     }
 
     rc = 0;
 
  err:
-    free(pfns);
     free(mfns);
 
     return rc;
@@ -707,8 +705,9 @@ static int setup(struct xc_sr_context *ctx)
     ctx->restore.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.types));
     ctx->restore.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.mfns));
     ctx->restore.map_errs = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.map_errs));
+    ctx->restore.pp_pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pp_pfns));
     if ( !ctx->restore.pfns || !ctx->restore.types || !ctx->restore.mfns ||
-         !ctx->restore.map_errs )
+         !ctx->restore.map_errs || !ctx->restore.pp_pfns )
     {
         ERROR("Unable to allocate memory");
         rc = -1;
@@ -745,6 +744,7 @@ static void cleanup(struct xc_sr_context *ctx)
 
     free(ctx->restore.buffered_records);
     free(ctx->restore.populated_pfns);
+    free(ctx->restore.pp_pfns);
     free(ctx->restore.map_errs);
     free(ctx->restore.mfns);
     free(ctx->restore.types);


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:17:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:17:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155684.287435 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MyI-0004ox-7l; Tue, 13 Jul 2021 18:17:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155684.287435; Tue, 13 Jul 2021 18:17:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MyI-0004oo-4R; Tue, 13 Jul 2021 18:17:30 +0000
Received: by outflank-mailman (input) for mailman id 155684;
 Tue, 13 Jul 2021 18:17:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Moe-0002kr-Vh
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:33 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.101])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0d8f4cae-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:32 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6NtB9
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:23 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0d8f4cae-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199583;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=I/lmWw3IgCqn4YYqBC4pCwVLRg7vIlArFuK/FzOA0bI=;
    b=P61u/Ci+HPY72HauyHCN+5Avj8F/wP2x1/Y9Fv4FTdxfsI3QCFWkczjPGfTORgy0vO
    cqvwgUwW5zCnBunpFY8OEhaFhvcnuFuQ/BkGfSMX8v9p2eu3a7bBPSdLOwn1ea1sbLkm
    eHaTMEdUNZcGCogcGWKiayJP3J35Rs8EebntWXkT0F5KUvL3K6nKFllAzBNxr976x6EX
    n42cWcEZgGkeycoTdnZqLAlcEnoTKr0wQn03ig97gGEr+xpKxynRJK10FGiFVxS6lSVZ
    R33gcoNpl+zVc+XNe8/Sd0BEG2KvZhemQgeAS7Fpo0K10mITC0IdVf/rBbGInlcX7V9b
    B24w==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 27/31] tools: add --min_remaining to libxl_domain_suspend
Date: Tue, 13 Jul 2021 20:06:01 +0200
Message-Id: <20210713180605.12096-28-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The decision to stop+move a domU to the new host must be based on two factors:
- the available network bandwidth for the migration stream
- the maximum time a workload within a domU can be savely suspended

Both values define how many dirty pages a workload may produce prior the
final stop+move.

The default value of 50 pages is much too low with todays network bandwidths.
On an idle 1GiB link these 200K will be transferred within ~2ms.

Give the admin a knob to adjust the point when the final stop+move will
be done, so he can base this decision on his own needs.

This patch adjusts xl(1) and the libxl API.
External users check LIBXL_HAVE_DOMAIN_SUSPEND_PROPS for the availibility
of the new .min_remaining property.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 docs/man/xl.1.pod.in              |  8 ++++++++
 tools/include/libxl.h             |  1 +
 tools/libs/light/libxl_dom_save.c |  2 +-
 tools/libs/light/libxl_domain.c   |  1 +
 tools/libs/light/libxl_internal.h |  1 +
 tools/xl/xl_cmdtable.c            | 23 ++++++++++++-----------
 tools/xl/xl_migrate.c             |  9 ++++++++-
 7 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in
index 9b104720d3..a40f1d4ba0 100644
--- a/docs/man/xl.1.pod.in
+++ b/docs/man/xl.1.pod.in
@@ -500,6 +500,14 @@ possible to use this option for a 'localhost' migration.
 
 Number of copy iterations before final suspend+move (default: 5)
 
+=item B<--min_remaing> I<pages>
+
+Number of remaining dirty pages. If the number of dirty pages drops that
+low, the guest is suspended and the domU will finally be moved to I<host>.
+
+This allows the host admin to control for how long the domU will likely
+be suspended during transit.
+
 =back
 
 =item B<remus> [I<OPTIONS>] I<domain-id> I<host>
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index bf77da0524..28d70b1078 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1715,6 +1715,7 @@ static inline int libxl_retrieve_domain_configuration_0x041200(
 typedef struct {
     uint32_t flags; /* LIBXL_SUSPEND_* */
     uint32_t max_iters;
+    uint32_t min_remaining;
 } libxl_domain_suspend_props;
 #define LIBXL_SUSPEND_DEBUG 1
 #define LIBXL_SUSPEND_LIVE 2
diff --git a/tools/libs/light/libxl_dom_save.c b/tools/libs/light/libxl_dom_save.c
index 106c08a199..14e197c581 100644
--- a/tools/libs/light/libxl_dom_save.c
+++ b/tools/libs/light/libxl_dom_save.c
@@ -381,7 +381,7 @@ static int libxl__domain_save_precopy_policy(struct precopy_stats stats, void *u
 
     LOGD(DEBUG, shs->domid, "iteration %u dirty_count %ld total_written %lu",
          stats.iteration, stats.dirty_count, stats.total_written);
-    if (stats.dirty_count >= 0 && stats.dirty_count < LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT)
+    if (stats.dirty_count >= 0 && stats.dirty_count < dss->min_remaining)
         goto stop_copy;
     if (stats.iteration >= dss->max_iters)
         goto stop_copy;
diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c
index 9f98cd7f2b..06ca7a7df6 100644
--- a/tools/libs/light/libxl_domain.c
+++ b/tools/libs/light/libxl_domain.c
@@ -528,6 +528,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
     dss->fd = fd;
     dss->type = type;
     dss->max_iters = props->max_iters ?: LIBXL_XGS_POLICY_MAX_ITERATIONS;
+    dss->min_remaining = props->min_remaining ?: LIBXL_XGS_POLICY_TARGET_DIRTY_COUNT;
     dss->live = props->flags & LIBXL_SUSPEND_LIVE;
     dss->debug = props->flags & LIBXL_SUSPEND_DEBUG;
     dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
diff --git a/tools/libs/light/libxl_internal.h b/tools/libs/light/libxl_internal.h
index cfb83d80d7..c503fe156c 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -3649,6 +3649,7 @@ struct libxl__domain_save_state {
     int debug;
     int checkpointed_stream;
     uint32_t max_iters;
+    uint32_t min_remaining;
     const libxl_domain_remus_info *remus;
     /* private */
     int rc;
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index 678b236d76..e10b580261 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -165,17 +165,18 @@ const struct cmd_spec cmd_table[] = {
       &main_migrate, 0, 1,
       "Migrate a domain to another host",
       "[options] <Domain> <host>",
-      "-h              Print this help.\n"
-      "-C <config>     Send <config> instead of config file from creation.\n"
-      "-s <sshcommand> Use <sshcommand> instead of ssh.  String will be passed\n"
-      "                to sh. If empty, run <host> instead of ssh <host> xl\n"
-      "                migrate-receive [-d -e]\n"
-      "-e              Do not wait in the background (on <host>) for the death\n"
-      "                of the domain.\n"
-      "--debug         Enable verification mode.\n"
-      "-p              Do not unpause domain after migrating it.\n"
-      "-D              Preserve the domain id\n"
-      "--max_iters N   Number of copy iterations before final stop+move"
+      "-h                Print this help.\n"
+      "-C <config>       Send <config> instead of config file from creation.\n"
+      "-s <sshcommand>   Use <sshcommand> instead of ssh.  String will be passed\n"
+      "                  to sh. If empty, run <host> instead of ssh <host> xl\n"
+      "                  migrate-receive [-d -e]\n"
+      "-e                Do not wait in the background (on <host>) for the death\n"
+      "                  of the domain.\n"
+      "--debug           Enable verification mode.\n"
+      "-p                Do not unpause domain after migrating it.\n"
+      "-D                Preserve the domain id\n"
+      "--max_iters N     Number of copy iterations before final stop+move\n"
+      "--min_remaining N Number of remaining dirty pages before final stop+move"
     },
     { "restore",
       &main_restore, 0, 1,
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index af117d4d56..14feb2b7ec 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -179,6 +179,7 @@ static void migrate_do_preamble(int send_fd, int recv_fd, pid_t child,
 static void migrate_domain(uint32_t domid, int preserve_domid,
                            const char *rune, int debug,
                            uint32_t max_iters,
+                           uint32_t min_remaining,
                            const char *override_config_file)
 {
     pid_t child = -1;
@@ -191,6 +192,7 @@ static void migrate_domain(uint32_t domid, int preserve_domid,
     libxl_domain_suspend_props props = {
         .flags = LIBXL_SUSPEND_LIVE,
         .max_iters = max_iters,
+        .min_remaining = min_remaining,
         };
 
     save_domain_core_begin(domid, preserve_domid, override_config_file,
@@ -545,9 +547,11 @@ int main_migrate(int argc, char **argv)
     int opt, daemonize = 1, monitor = 1, debug = 0, pause_after_migration = 0;
     int preserve_domid = 0;
     uint32_t max_iters = 0;
+    uint32_t min_remaining = 0;
     static struct option opts[] = {
         {"debug", 0, 0, 0x100},
         {"max_iters", 1, 0, 0x101},
+        {"min_remaining", 1, 0, 0x102},
         {"live", 0, 0, 0x200},
         COMMON_LONG_OPTS
     };
@@ -578,6 +582,9 @@ int main_migrate(int argc, char **argv)
     case 0x101: /* --max_iters */
         max_iters = atoi(optarg);
         break;
+    case 0x102: /* --min_remaining */
+        min_remaining = atoi(optarg);
+        break;
     case 0x200: /* --live */
         /* ignored for compatibility with xm */
         break;
@@ -613,7 +620,7 @@ int main_migrate(int argc, char **argv)
     }
 
     migrate_domain(domid, preserve_domid, rune, debug,
-                   max_iters, config_filename);
+                   max_iters, min_remaining, config_filename);
     return EXIT_SUCCESS;
 }
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:17:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:17:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155686.287446 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MyK-00059B-Gm; Tue, 13 Jul 2021 18:17:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155686.287446; Tue, 13 Jul 2021 18:17:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MyK-000594-D1; Tue, 13 Jul 2021 18:17:32 +0000
Received: by outflank-mailman (input) for mailman id 155686;
 Tue, 13 Jul 2021 18:17:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3Moo-0002kr-Vy
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:43 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0e6d9fe0-e405-11eb-8793-12813bfff9fa;
 Tue, 13 Jul 2021 18:06:34 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6OtBD
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:24 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e6d9fe0-e405-11eb-8793-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199585;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=wGKWX5aTtfp07dJARW3c54kyVscPxuckFQpYQ0Sy/fE=;
    b=kkAtcH82o5J5C+nsMxvglRQY8df4pcJAAYfigNUqTGPWi211etbsLkrJmkvQdqrFNx
    cOlTuFNgimK0L/GKSHDUsUAtQ380WkRCr18ulf000qJl8wnZlt2qvJAwGYZ3/Ut8ekD9
    QjZcDQdefrvGugv2z0ApcgM3k44kB4WsL/doIMiyVZxqnqczFN0sAR8+fXigLemGqzSu
    +1X2mieZjfEEt0sQiOGppdrVewRmjaOj1ghvr6rk+7MBuF7CgTgvkndHpN4budP+C6gD
    lqnyxLKbfjZwMIIn7hgVdSoJmGRZ6Vw+Oqv8gaS2uQh1RgfJApQu3aTHyG3GyVW3F1Fx
    zpBQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 31/31] tools: use superpages during restore of HVM guest
Date: Tue, 13 Jul 2021 20:06:05 +0200
Message-Id: <20210713180605.12096-32-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

During creating of a HVM domU meminit_hvm() tries to map superpages.
After save/restore or migration this mapping is lost, everything is
allocated in single pages. This causes a performance degradation after
migration.

Add neccessary code to preallocate a superpage for an incoming chunk of
pfns. In case a pfn was not populated on the sending side, it must be
freed on the receiving side to avoid over-allocation.

The existing code for x86_pv is moved unmodified into its own file.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_dom_x86.c            |   5 -
 tools/libs/guest/xg_private.h            |   5 +
 tools/libs/guest/xg_sr_common.h          |  28 +-
 tools/libs/guest/xg_sr_restore.c         |  60 +---
 tools/libs/guest/xg_sr_restore_x86_hvm.c | 370 ++++++++++++++++++++++-
 tools/libs/guest/xg_sr_restore_x86_pv.c  |  61 +++-
 6 files changed, 456 insertions(+), 73 deletions(-)

diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c
index d2eb89ce01..ec0d18fd60 100644
--- a/tools/libs/guest/xg_dom_x86.c
+++ b/tools/libs/guest/xg_dom_x86.c
@@ -44,11 +44,6 @@
 
 #define SUPERPAGE_BATCH_SIZE 512
 
-#define SUPERPAGE_2MB_SHIFT   9
-#define SUPERPAGE_2MB_NR_PFNS (1UL << SUPERPAGE_2MB_SHIFT)
-#define SUPERPAGE_1GB_SHIFT   18
-#define SUPERPAGE_1GB_NR_PFNS (1UL << SUPERPAGE_1GB_SHIFT)
-
 #define X86_CR0_PE 0x01
 #define X86_CR0_ET 0x10
 
diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h
index 28441ee13f..b7372e6bd5 100644
--- a/tools/libs/guest/xg_private.h
+++ b/tools/libs/guest/xg_private.h
@@ -179,4 +179,9 @@ struct xc_cpu_policy {
 };
 #endif /* x86 */
 
+#define SUPERPAGE_2MB_SHIFT   9
+#define SUPERPAGE_2MB_NR_PFNS (1UL << SUPERPAGE_2MB_SHIFT)
+#define SUPERPAGE_1GB_SHIFT   18
+#define SUPERPAGE_1GB_NR_PFNS (1UL << SUPERPAGE_1GB_SHIFT)
+
 #endif /* XG_PRIVATE_H */
diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 2ae5c74d23..5af0468603 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -207,6 +207,16 @@ struct xc_sr_restore_ops
      */
     int (*setup)(struct xc_sr_context *ctx);
 
+    /**
+     * Populate PFNs
+     *
+     * Given a set of pfns, obtain memory from Xen to fill the physmap for the
+     * unpopulated subset.
+     */
+    int (*populate_pfns)(struct xc_sr_context *ctx, unsigned count,
+                         const xen_pfn_t *original_pfns, const uint32_t *types);
+
+
     /**
      * Process an individual record from the stream.  The caller shall take
      * care of processing common records (e.g. END, PAGE_DATA).
@@ -338,6 +348,8 @@ struct xc_sr_context
 
             int send_back_fd;
             unsigned long p2m_size;
+            unsigned long max_pages;
+            unsigned long tot_pages;
             xc_hypercall_buffer_t dirty_bitmap_hbuf;
 
             /* From Image Header. */
@@ -471,6 +483,14 @@ struct xc_sr_context
                     {
                         /* HVM context blob. */
                         struct xc_sr_blob context;
+
+                        /* Bitmap of currently allocated PFNs during restore. */
+                        struct sr_bitmap attempted_1g;
+                        struct sr_bitmap attempted_2m;
+                        struct sr_bitmap allocated_pfns;
+                        xen_pfn_t prev_populated_pfn;
+                        xen_pfn_t iteration_tracker_pfn;
+                        unsigned long iteration;
                     } restore;
                 };
             } hvm;
@@ -535,14 +555,6 @@ int read_record_header(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhd
 int read_record_data(struct xc_sr_context *ctx, int fd, struct xc_sr_rhdr *rhdr,
                      struct xc_sr_record *rec);
 
-/*
- * This would ideally be private in restore.c, but is needed by
- * x86_pv_localise_page() if we receive pagetables frames ahead of the
- * contents of the frames they point at.
- */
-int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
-                  const xen_pfn_t *original_pfns, const uint32_t *types);
-
 /* Handle a STATIC_DATA_END record. */
 int handle_static_data_end(struct xc_sr_context *ctx);
 
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index a897e4bb89..8a97747c38 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -71,60 +71,6 @@ static int read_headers(struct xc_sr_context *ctx)
     return 0;
 }
 
-/*
- * Given a set of pfns, obtain memory from Xen to fill the physmap for the
- * unpopulated subset.  If types is NULL, no page type checking is performed
- * and all unpopulated pfns are populated.
- */
-int populate_pfns(struct xc_sr_context *ctx, unsigned int count,
-                  const xen_pfn_t *original_pfns, const uint32_t *types)
-{
-    xc_interface *xch = ctx->xch;
-    unsigned int i, nr_pfns = 0;
-    int rc = -1;
-
-    for ( i = 0; i < count; ++i )
-    {
-        if ( (!types || page_type_to_populate(types[i])) &&
-             !pfn_is_populated(ctx, original_pfns[i]) )
-        {
-            rc = pfn_set_populated(ctx, original_pfns[i]);
-            if ( rc )
-                goto err;
-            ctx->restore.pp_pfns[nr_pfns] = ctx->restore.pp_mfns[nr_pfns] = original_pfns[i];
-            ++nr_pfns;
-        }
-    }
-
-    if ( nr_pfns )
-    {
-        rc = xc_domain_populate_physmap_exact(
-            xch, ctx->domid, nr_pfns, 0, 0, ctx->restore.pp_mfns);
-        if ( rc )
-        {
-            PERROR("Failed to populate physmap");
-            goto err;
-        }
-
-        for ( i = 0; i < nr_pfns; ++i )
-        {
-            if ( ctx->restore.pp_mfns[i] == INVALID_MFN )
-            {
-                ERROR("Populate physmap failed for pfn %u", i);
-                rc = -1;
-                goto err;
-            }
-
-            ctx->restore.ops.set_gfn(ctx, ctx->restore.pp_pfns[i], ctx->restore.pp_mfns[i]);
-        }
-    }
-
-    rc = 0;
-
- err:
-    return rc;
-}
-
 static int handle_static_data_end_v2(struct xc_sr_context *ctx)
 {
     int rc = 0;
@@ -259,7 +205,8 @@ static int map_guest_pages(struct xc_sr_context *ctx,
     uint32_t i, p;
     int rc;
 
-    rc = populate_pfns(ctx, pages->count, ctx->restore.pfns, ctx->restore.types);
+    rc = ctx->restore.ops.populate_pfns(ctx, pages->count, ctx->restore.pfns,
+                                        ctx->restore.types);
     if ( rc )
     {
         ERROR("Failed to populate pfns for batch of %u pages", pages->count);
@@ -1091,6 +1038,9 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
         return -1;
     }
 
+    /* See xc_domain_getinfo */
+    ctx.restore.max_pages = ctx.dominfo.max_memkb >> (PAGE_SHIFT-10);
+    ctx.restore.tot_pages = ctx.dominfo.nr_pages;
     ctx.restore.p2m_size = nr_pfns;
     ctx.restore.ops = ctx.dominfo.hvm
         ? restore_ops_x86_hvm : restore_ops_x86_pv;
diff --git a/tools/libs/guest/xg_sr_restore_x86_hvm.c b/tools/libs/guest/xg_sr_restore_x86_hvm.c
index ac3a9824bb..4d0583c4f7 100644
--- a/tools/libs/guest/xg_sr_restore_x86_hvm.c
+++ b/tools/libs/guest/xg_sr_restore_x86_hvm.c
@@ -130,6 +130,25 @@ static int x86_hvm_localise_page(struct xc_sr_context *ctx,
     return 0;
 }
 
+static bool x86_hvm_expand_sp_bitmaps(struct xc_sr_context *ctx, unsigned long max_pfn)
+{
+    struct sr_bitmap *bm;
+
+    bm = &ctx->x86.hvm.restore.attempted_1g;
+    if ( !sr_bitmap_expand(bm, max_pfn >> SUPERPAGE_1GB_SHIFT) )
+        return false;
+
+    bm = &ctx->x86.hvm.restore.attempted_2m;
+    if ( !sr_bitmap_expand(bm, max_pfn >> SUPERPAGE_2MB_SHIFT) )
+        return false;
+
+    bm = &ctx->x86.hvm.restore.allocated_pfns;
+    if ( !sr_bitmap_expand(bm, max_pfn) )
+        return false;
+
+    return true;
+}
+
 /*
  * restore_ops function. Confirms the stream matches the domain.
  */
@@ -164,12 +183,21 @@ static int x86_hvm_setup(struct xc_sr_context *ctx)
 
     max_pfn = max(ctx->restore.p2m_size, ctx->dominfo.max_memkb >> (PAGE_SHIFT-10));
     if ( !sr_bitmap_expand(&ctx->restore.populated_pfns, max_pfn) )
-    {
-        PERROR("Unable to allocate memory for populated_pfns bitmap");
-        return -1;
-    }
+        goto out;
+
+    if ( !x86_hvm_expand_sp_bitmaps(ctx, max_pfn) )
+        goto out;
+
+    /* FIXME: distinguish between PVH and HVM */
+    /* No superpage in 1st 2MB due to VGA hole */
+    sr_set_bit(0, &ctx->x86.hvm.restore.attempted_1g);
+    sr_set_bit(0, &ctx->x86.hvm.restore.attempted_2m);
 
     return 0;
+
+out:
+    PERROR("Unable to allocate memory for pfn bitmaps");
+    return -1;
 }
 
 /*
@@ -250,6 +278,9 @@ static int x86_hvm_stream_complete(struct xc_sr_context *ctx)
 static int x86_hvm_cleanup(struct xc_sr_context *ctx)
 {
     sr_bitmap_free(&ctx->restore.populated_pfns);
+    sr_bitmap_free(&ctx->x86.hvm.restore.attempted_1g);
+    sr_bitmap_free(&ctx->x86.hvm.restore.attempted_2m);
+    sr_bitmap_free(&ctx->x86.hvm.restore.allocated_pfns);
     free(ctx->x86.hvm.restore.context.ptr);
 
     free(ctx->x86.restore.cpuid.ptr);
@@ -258,6 +289,336 @@ static int x86_hvm_cleanup(struct xc_sr_context *ctx)
     return 0;
 }
 
+/*
+ * Set a range of pfns as allocated
+ */
+static void pfn_set_long_allocated(struct xc_sr_context *ctx, xen_pfn_t base_pfn)
+{
+    sr_set_long_bit(base_pfn, &ctx->x86.hvm.restore.allocated_pfns);
+}
+
+static void pfn_set_allocated(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    sr_set_bit(pfn, &ctx->x86.hvm.restore.allocated_pfns);
+}
+
+struct x86_hvm_sp {
+    xen_pfn_t pfn;
+    xen_pfn_t base_pfn;
+    unsigned long index;
+    unsigned long count;
+};
+
+/*
+ * Try to allocate a 1GB page for this pfn, but avoid Over-allocation.
+ * If this succeeds, mark the range of 2MB pages as busy.
+ */
+static bool x86_hvm_alloc_1g(struct xc_sr_context *ctx, struct x86_hvm_sp *sp)
+{
+    xc_interface *xch = ctx->xch;
+    unsigned int order;
+    int i, done;
+    xen_pfn_t extent;
+
+    /* Only one attempt to avoid overlapping allocation */
+    if ( sr_test_and_set_bit(sp->index, &ctx->x86.hvm.restore.attempted_1g) )
+        return false;
+
+    order = SUPERPAGE_1GB_SHIFT;
+    sp->count = SUPERPAGE_1GB_NR_PFNS;
+
+    /* Allocate only if there is room for another superpage */
+    if ( ctx->restore.tot_pages + sp->count > ctx->restore.max_pages )
+        return false;
+
+    extent = sp->base_pfn = (sp->pfn >> order) << order;
+    done = xc_domain_populate_physmap(xch, ctx->domid, 1, order, 0, &extent);
+    if ( done < 0 ) {
+        PERROR("populate_physmap failed.");
+        return false;
+    }
+    if ( done == 0 )
+        return false;
+
+    DPRINTF("1G %" PRI_xen_pfn "\n", sp->base_pfn);
+
+    /* Mark all 2MB pages as done to avoid overlapping allocation */
+    for ( i = 0; i < (SUPERPAGE_1GB_NR_PFNS/SUPERPAGE_2MB_NR_PFNS); i++ )
+        sr_set_bit((sp->base_pfn >> SUPERPAGE_2MB_SHIFT) + i, &ctx->x86.hvm.restore.attempted_2m);
+
+    return true;
+}
+
+/* Allocate a 2MB page if x86_hvm_alloc_1g failed, avoid Over-allocation. */
+static bool x86_hvm_alloc_2m(struct xc_sr_context *ctx, struct x86_hvm_sp *sp)
+{
+    xc_interface *xch = ctx->xch;
+    unsigned int order;
+    int done;
+    xen_pfn_t extent;
+
+    /* Only one attempt to avoid overlapping allocation */
+    if ( sr_test_and_set_bit(sp->index, &ctx->x86.hvm.restore.attempted_2m) )
+        return false;
+
+    order = SUPERPAGE_2MB_SHIFT;
+    sp->count = SUPERPAGE_2MB_NR_PFNS;
+
+    /* Allocate only if there is room for another superpage */
+    if ( ctx->restore.tot_pages + sp->count > ctx->restore.max_pages )
+        return false;
+
+    extent = sp->base_pfn = (sp->pfn >> order) << order;
+    done = xc_domain_populate_physmap(xch, ctx->domid, 1, order, 0, &extent);
+    if ( done < 0 ) {
+        PERROR("populate_physmap failed.");
+        return false;
+    }
+    if ( done == 0 )
+        return false;
+
+    DPRINTF("2M %" PRI_xen_pfn "\n", sp->base_pfn);
+    return true;
+}
+
+/* Allocate a single page if x86_hvm_alloc_2m failed. */
+static bool x86_hvm_alloc_4k(struct xc_sr_context *ctx, struct x86_hvm_sp *sp)
+{
+    xc_interface *xch = ctx->xch;
+    unsigned int order;
+    int done;
+    xen_pfn_t extent;
+
+    order = 0;
+    sp->count = 1UL;
+
+    /* Allocate only if there is room for another page */
+    if ( ctx->restore.tot_pages + sp->count > ctx->restore.max_pages ) {
+        errno = E2BIG;
+        return false;
+    }
+
+    extent = sp->base_pfn = (sp->pfn >> order) << order;
+    done = xc_domain_populate_physmap(xch, ctx->domid, 1, order, 0, &extent);
+    if ( done < 0 ) {
+        PERROR("populate_physmap failed.");
+        return false;
+    }
+    if ( done == 0 ) {
+        errno = ENOMEM;
+        return false;
+    }
+
+    DPRINTF("4K %" PRI_xen_pfn "\n", sp->base_pfn);
+    return true;
+}
+/*
+ * Attempt to allocate a superpage where the pfn resides.
+ */
+static int x86_hvm_allocate_pfn(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    bool success;
+    unsigned long idx_1g, idx_2m;
+    struct x86_hvm_sp sp = {
+        .pfn = pfn
+    };
+
+    if ( sr_test_bit(pfn, &ctx->x86.hvm.restore.allocated_pfns) )
+        return 0;
+
+    idx_1g = pfn >> SUPERPAGE_1GB_SHIFT;
+    idx_2m = pfn >> SUPERPAGE_2MB_SHIFT;
+
+    sp.index = idx_1g;
+    success = x86_hvm_alloc_1g(ctx, &sp);
+
+    if ( success == false ) {
+        sp.index = idx_2m;
+        success = x86_hvm_alloc_2m(ctx, &sp);
+    }
+
+    if ( success == false ) {
+        sp.index = 0;
+        success = x86_hvm_alloc_4k(ctx, &sp);
+    }
+
+    if ( success == false )
+        return -1;
+
+    do {
+        if ( sp.count >= BITS_PER_LONG ) {
+            sp.count -= BITS_PER_LONG;
+            ctx->restore.tot_pages += BITS_PER_LONG;
+            pfn_set_long_allocated(ctx, sp.base_pfn + sp.count);
+        } else {
+            sp.count--;
+            ctx->restore.tot_pages++;
+            pfn_set_allocated(ctx, sp.base_pfn + sp.count);
+        }
+    } while ( sp.count );
+
+    return 0;
+}
+
+/*
+ * Deallocate memory.
+ * There was likely an optimistic superpage allocation.
+ * This means more pages may have been allocated past gap_end.
+ * This range is not freed now. Incoming higher pfns will release it.
+ */
+static int x86_hvm_punch_hole(struct xc_sr_context *ctx,
+                               xen_pfn_t gap_start, xen_pfn_t gap_end)
+{
+    xc_interface *xch = ctx->xch;
+    xen_pfn_t _pfn, pfn;
+    uint32_t domid, freed = 0;
+    int rc;
+
+    pfn = gap_start >> SUPERPAGE_1GB_SHIFT;
+    do
+    {
+        sr_set_bit(pfn, &ctx->x86.hvm.restore.attempted_1g);
+    } while (++pfn <= gap_end >> SUPERPAGE_1GB_SHIFT);
+
+    pfn = gap_start >> SUPERPAGE_2MB_SHIFT;
+    do
+    {
+        sr_set_bit(pfn, &ctx->x86.hvm.restore.attempted_2m);
+    } while (++pfn <= gap_end >> SUPERPAGE_2MB_SHIFT);
+
+    pfn = gap_start;
+
+    while ( pfn <= gap_end )
+    {
+        if ( sr_test_and_clear_bit(pfn, &ctx->x86.hvm.restore.allocated_pfns) )
+        {
+            domid = ctx->domid;
+            _pfn = pfn;
+            rc = xc_domain_decrease_reservation_exact(xch, domid, 1, 0, &_pfn);
+            if ( rc )
+            {
+                PERROR("Failed to release pfn %" PRI_xen_pfn, pfn);
+                return -1;
+            }
+            ctx->restore.tot_pages--;
+            freed++;
+        }
+        pfn++;
+    }
+    if ( freed )
+        DPRINTF("freed %u between %" PRI_xen_pfn " %" PRI_xen_pfn "\n",
+                freed, gap_start, gap_end);
+    return 0;
+}
+
+static int x86_hvm_unpopulate_page(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    sr_clear_bit(pfn, &ctx->restore.populated_pfns);
+    return x86_hvm_punch_hole(ctx, pfn, pfn);
+}
+
+static int x86_hvm_populate_page(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    xen_pfn_t gap_start, gap_end;
+    bool has_gap, first_iteration;
+    int rc;
+
+    /*
+     * Check for a gap between the previous populated pfn and this pfn.
+     * In case a gap exists, it is required to punch a hole to release memory,
+     * starting after the previous pfn and before this pfn.
+     *
+     * But: this can be done only during the first iteration, which is the
+     * only place there superpage allocations are attempted. All following
+     * iterations lack the info to properly maintain prev_populated_pfn.
+     */
+    has_gap = ctx->x86.hvm.restore.prev_populated_pfn + 1 < pfn;
+    first_iteration = ctx->x86.hvm.restore.iteration == 0;
+    if ( has_gap && first_iteration )
+    {
+        gap_start = ctx->x86.hvm.restore.prev_populated_pfn + 1;
+        gap_end = pfn - 1;
+
+        rc = x86_hvm_punch_hole(ctx, gap_start, gap_end);
+        if ( rc )
+            goto err;
+    }
+
+    rc = x86_hvm_allocate_pfn(ctx, pfn);
+    if ( rc )
+        goto err;
+    pfn_set_populated(ctx, pfn);
+    ctx->x86.hvm.restore.prev_populated_pfn = pfn;
+
+    rc = 0;
+err:
+    return rc;
+}
+
+/*
+ * Try to allocate superpages.
+ * This works without memory map because the pfns arrive in incremental order.
+ * All pfn numbers and their type are submitted.
+ * Only pfns with data will have also pfn content transmitted.
+ */
+static int x86_hvm_populate_pfns(struct xc_sr_context *ctx, unsigned count,
+                                 const xen_pfn_t *original_pfns,
+                                 const uint32_t *types)
+{
+    xc_interface *xch = ctx->xch;
+    xen_pfn_t pfn, min_pfn, max_pfn;
+    bool to_populate, populated;
+    unsigned i = count;
+    int rc = 0;
+
+    min_pfn = count ? original_pfns[0] : 0;
+    max_pfn = count ? original_pfns[count - 1] : 0;
+    DPRINTF("batch of %u pfns between %" PRI_xen_pfn " %" PRI_xen_pfn "\n",
+            count, min_pfn, max_pfn);
+
+    if ( !x86_hvm_expand_sp_bitmaps(ctx, max_pfn) )
+    {
+        ERROR("Unable to allocate memory for pfn bitmaps");
+        return -1;
+    }
+
+    /*
+     * There is no indicator for a new iteration.
+     * Simulate it by checking if a lower pfn is coming in.
+     * In the end it matters only to know if this iteration is the first one.
+     */
+    if ( min_pfn < ctx->x86.hvm.restore.iteration_tracker_pfn )
+        ctx->x86.hvm.restore.iteration++;
+    ctx->x86.hvm.restore.iteration_tracker_pfn = min_pfn;
+
+    for ( i = 0; i < count; ++i )
+    {
+        pfn = original_pfns[i];
+
+        to_populate = page_type_to_populate(types[i]);
+        populated = pfn_is_populated(ctx, pfn);
+
+        /*
+         * page has data, pfn populated: nothing to do
+         * page has data, pfn not populated: likely never seen before
+         * page has no data, pfn populated: likely ballooned out during migration
+         * page has no data, pfn not populated: nothing to do
+         */
+        if ( to_populate && !populated )
+        {
+            rc = x86_hvm_populate_page(ctx, pfn);
+        } else if ( !to_populate && populated )
+        {
+            rc = x86_hvm_unpopulate_page(ctx, pfn);
+        }
+        if ( rc )
+            break;
+    }
+
+    return rc;
+}
+
+
 struct xc_sr_restore_ops restore_ops_x86_hvm =
 {
     .pfn_is_valid    = x86_hvm_pfn_is_valid,
@@ -266,6 +627,7 @@ struct xc_sr_restore_ops restore_ops_x86_hvm =
     .set_page_type   = x86_hvm_set_page_type,
     .localise_page   = x86_hvm_localise_page,
     .setup           = x86_hvm_setup,
+    .populate_pfns   = x86_hvm_populate_pfns,
     .process_record  = x86_hvm_process_record,
     .static_data_complete = x86_static_data_complete,
     .stream_complete = x86_hvm_stream_complete,
diff --git a/tools/libs/guest/xg_sr_restore_x86_pv.c b/tools/libs/guest/xg_sr_restore_x86_pv.c
index 477b6329f7..0e994d4277 100644
--- a/tools/libs/guest/xg_sr_restore_x86_pv.c
+++ b/tools/libs/guest/xg_sr_restore_x86_pv.c
@@ -959,6 +959,64 @@ static void x86_pv_set_gfn(struct xc_sr_context *ctx, xen_pfn_t pfn,
         ((uint32_t *)ctx->x86.pv.p2m)[pfn] = mfn;
 }
 
+/*
+ * Given a set of pfns, obtain memory from Xen to fill the physmap for the
+ * unpopulated subset.  If types is NULL, no page type checking is performed
+ * and all unpopulated pfns are populated.
+ */
+static int x86_pv_populate_pfns(struct xc_sr_context *ctx, unsigned count,
+                                const xen_pfn_t *original_pfns,
+                                const uint32_t *types)
+{
+    xc_interface *xch = ctx->xch;
+    xen_pfn_t *mfns = ctx->restore.pp_mfns,
+        *pfns = ctx->restore.pp_pfns;
+    unsigned int i, nr_pfns = 0;
+    int rc = -1;
+
+    for ( i = 0; i < count; ++i )
+    {
+        if ( (!types ||
+              (types && page_type_has_stream_data(types[i]) == true)) &&
+             !pfn_is_populated(ctx, original_pfns[i]) )
+        {
+            rc = pfn_set_populated(ctx, original_pfns[i]);
+            if ( rc )
+                goto err;
+            pfns[nr_pfns] = mfns[nr_pfns] = original_pfns[i];
+            ++nr_pfns;
+        }
+    }
+
+    if ( nr_pfns )
+    {
+        rc = xc_domain_populate_physmap_exact(
+            xch, ctx->domid, nr_pfns, 0, 0, mfns);
+        if ( rc )
+        {
+            PERROR("Failed to populate physmap");
+            goto err;
+        }
+
+        for ( i = 0; i < nr_pfns; ++i )
+        {
+            if ( mfns[i] == INVALID_MFN )
+            {
+                ERROR("Populate physmap failed for pfn %u", i);
+                rc = -1;
+                goto err;
+            }
+
+            ctx->restore.ops.set_gfn(ctx, pfns[i], mfns[i]);
+        }
+    }
+
+    rc = 0;
+
+ err:
+    return rc;
+}
+
 /*
  * restore_ops function.  Convert pfns back to mfns in pagetables.  Possibly
  * needs to populate new frames if a PTE is found referring to a frame which
@@ -1003,7 +1061,7 @@ static int x86_pv_localise_page(struct xc_sr_context *ctx,
         }
     }
 
-    if ( to_populate && populate_pfns(ctx, to_populate, pfns, NULL) )
+    if ( to_populate && x86_pv_populate_pfns(ctx, to_populate, pfns, NULL) )
         return -1;
 
     for ( i = 0; i < (PAGE_SIZE / sizeof(uint64_t)); ++i )
@@ -1200,6 +1258,7 @@ struct xc_sr_restore_ops restore_ops_x86_pv =
     .set_gfn         = x86_pv_set_gfn,
     .localise_page   = x86_pv_localise_page,
     .setup           = x86_pv_setup,
+    .populate_pfns   = x86_pv_populate_pfns,
     .process_record  = x86_pv_process_record,
     .static_data_complete = x86_static_data_complete,
     .stream_complete = x86_pv_stream_complete,


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:17:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:17:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155695.287457 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MyY-0005wY-W5; Tue, 13 Jul 2021 18:17:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155695.287457; Tue, 13 Jul 2021 18:17:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3MyY-0005wP-SU; Tue, 13 Jul 2021 18:17:46 +0000
Received: by outflank-mailman (input) for mailman id 155695;
 Tue, 13 Jul 2021 18:17:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=W9Py=MF=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3MoR-0002UL-Hr
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 18:07:19 +0000
Received: from mo4-p03-ob.smtp.rzone.de (unknown [85.215.255.101])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 920c1936-b06e-4238-bb74-3dc166dee162;
 Tue, 13 Jul 2021 18:06:30 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6DI6OtBC
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Tue, 13 Jul 2021 20:06:24 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 920c1936-b06e-4238-bb74-3dc166dee162
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626199584;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date:
    From:Subject:Sender;
    bh=QjAnxC7dPLjpKo0oeaxvn6b/YLOTQAxI2SNhM+rtNAo=;
    b=mVKfBMVDjEa8wL52rmtOvPqoWZYC3ggCeGbWsNwZoho6RBC1RutG+D1KJ0eU3unRqy
    kKHKGtgIp29GIDTO29z2ZtWTw3ELjdDX2abecJP44XNH+s/3MoMa2+dn+CdEPBygF5TL
    woxm1gtsLPlrZJQafuW5uvq9t5bqyLawnH0pbcdBg9RMspufeHIPqkA8pwGTMFKezGt5
    h346NtLHjwNpVs+Iri59vSIATU0FhxyOEDRFGKxsiM43uy3Pq40NCoxY+cg0hnX5DY/3
    zt4FRklFB2pouJKyxlOQumW1ddEcqnhWWI6bfLpqsoknMW9aXmj2EJicmFqDt9nBWA3u
    oL+Q==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgthqlagRsstpH9XYEN5v9xf7dypFU9ge5p0Oi0V"
X-RZG-CLASS-ID: mo00
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xenproject.org
Cc: Olaf Hering <olaf@aepfle.de>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH v20210713 30/31] tools: use xg_sr_bitmap for populated_pfns
Date: Tue, 13 Jul 2021 20:06:04 +0200
Message-Id: <20210713180605.12096-31-olaf@aepfle.de>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210713180605.12096-1-olaf@aepfle.de>
References: <20210713180605.12096-1-olaf@aepfle.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 tools/libs/guest/xg_sr_common.h          | 20 ++++++-
 tools/libs/guest/xg_sr_restore.c         | 69 ------------------------
 tools/libs/guest/xg_sr_restore_x86_hvm.c |  9 ++++
 tools/libs/guest/xg_sr_restore_x86_pv.c  |  7 +++
 4 files changed, 34 insertions(+), 71 deletions(-)

diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_common.h
index 686a9614c2..2ae5c74d23 100644
--- a/tools/libs/guest/xg_sr_common.h
+++ b/tools/libs/guest/xg_sr_common.h
@@ -375,8 +375,7 @@ struct xc_sr_context
             uint32_t     xenstore_domid,  console_domid;
 
             /* Bitmap of currently populated PFNs during restore. */
-            unsigned long *populated_pfns;
-            xen_pfn_t max_populated_pfn;
+            struct sr_bitmap populated_pfns;
 
             /* Sender has invoked verify mode on the stream. */
             bool verify;
@@ -632,6 +631,23 @@ static inline bool page_type_has_stream_data(uint32_t type)
     }
 }
 
+static inline bool pfn_is_populated(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    return sr_test_bit(pfn, &ctx->restore.populated_pfns);
+}
+
+static inline int pfn_set_populated(struct xc_sr_context *ctx, xen_pfn_t pfn)
+{
+    xc_interface *xch = ctx->xch;
+
+    if ( sr_set_bit(pfn, &ctx->restore.populated_pfns) == false )
+    {
+        PERROR("Failed to realloc populated_pfns bitmap");
+        errno = ENOMEM;
+        return -1;
+    }
+    return 0;
+}
 #endif
 /*
  * Local variables:
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index d4012bcffd..a897e4bb89 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -71,64 +71,6 @@ static int read_headers(struct xc_sr_context *ctx)
     return 0;
 }
 
-/*
- * Is a pfn populated?
- */
-static bool pfn_is_populated(const struct xc_sr_context *ctx, xen_pfn_t pfn)
-{
-    if ( pfn > ctx->restore.max_populated_pfn )
-        return false;
-    return test_bit(pfn, ctx->restore.populated_pfns);
-}
-
-/*
- * Set a pfn as populated, expanding the tracking structures if needed. To
- * avoid realloc()ing too excessively, the size increased to the nearest power
- * of two large enough to contain the required pfn.
- */
-static int pfn_set_populated(struct xc_sr_context *ctx, xen_pfn_t pfn)
-{
-    xc_interface *xch = ctx->xch;
-
-    if ( pfn > ctx->restore.max_populated_pfn )
-    {
-        xen_pfn_t new_max;
-        size_t old_sz, new_sz;
-        unsigned long *p;
-
-        /* Round up to the nearest power of two larger than pfn, less 1. */
-        new_max = pfn;
-        new_max |= new_max >> 1;
-        new_max |= new_max >> 2;
-        new_max |= new_max >> 4;
-        new_max |= new_max >> 8;
-        new_max |= new_max >> 16;
-#ifdef __x86_64__
-        new_max |= new_max >> 32;
-#endif
-
-        old_sz = bitmap_size(ctx->restore.max_populated_pfn + 1);
-        new_sz = bitmap_size(new_max + 1);
-        p = realloc(ctx->restore.populated_pfns, new_sz);
-        if ( !p )
-        {
-            ERROR("Failed to realloc populated bitmap");
-            errno = ENOMEM;
-            return -1;
-        }
-
-        memset((uint8_t *)p + old_sz, 0x00, new_sz - old_sz);
-
-        ctx->restore.populated_pfns    = p;
-        ctx->restore.max_populated_pfn = new_max;
-    }
-
-    assert(!test_bit(pfn, ctx->restore.populated_pfns));
-    set_bit(pfn, ctx->restore.populated_pfns);
-
-    return 0;
-}
-
 /*
  * Given a set of pfns, obtain memory from Xen to fill the physmap for the
  * unpopulated subset.  If types is NULL, no page type checking is performed
@@ -924,16 +866,6 @@ static int setup(struct xc_sr_context *ctx)
     if ( rc )
         goto err;
 
-    ctx->restore.max_populated_pfn = (32 * 1024 / 4) - 1;
-    ctx->restore.populated_pfns = bitmap_alloc(
-        ctx->restore.max_populated_pfn + 1);
-    if ( !ctx->restore.populated_pfns )
-    {
-        ERROR("Unable to allocate memory for populated_pfns bitmap");
-        rc = -1;
-        goto err;
-    }
-
     ctx->restore.pfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.pfns));
     ctx->restore.types = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.types));
     ctx->restore.mfns = malloc(MAX_BATCH_SIZE * sizeof(*ctx->restore.mfns));
@@ -982,7 +914,6 @@ static void cleanup(struct xc_sr_context *ctx)
             xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->restore.p2m_size)));
 
     free(ctx->restore.buffered_records);
-    free(ctx->restore.populated_pfns);
     free(ctx->restore.pages);
     free(ctx->restore.iov);
     free(ctx->restore.guest_data);
diff --git a/tools/libs/guest/xg_sr_restore_x86_hvm.c b/tools/libs/guest/xg_sr_restore_x86_hvm.c
index d6ea6f3012..ac3a9824bb 100644
--- a/tools/libs/guest/xg_sr_restore_x86_hvm.c
+++ b/tools/libs/guest/xg_sr_restore_x86_hvm.c
@@ -136,6 +136,7 @@ static int x86_hvm_localise_page(struct xc_sr_context *ctx,
 static int x86_hvm_setup(struct xc_sr_context *ctx)
 {
     xc_interface *xch = ctx->xch;
+    unsigned long max_pfn;
 
     if ( ctx->restore.guest_type != DHDR_TYPE_X86_HVM )
     {
@@ -161,6 +162,13 @@ static int x86_hvm_setup(struct xc_sr_context *ctx)
     }
 #endif
 
+    max_pfn = max(ctx->restore.p2m_size, ctx->dominfo.max_memkb >> (PAGE_SHIFT-10));
+    if ( !sr_bitmap_expand(&ctx->restore.populated_pfns, max_pfn) )
+    {
+        PERROR("Unable to allocate memory for populated_pfns bitmap");
+        return -1;
+    }
+
     return 0;
 }
 
@@ -241,6 +249,7 @@ static int x86_hvm_stream_complete(struct xc_sr_context *ctx)
 
 static int x86_hvm_cleanup(struct xc_sr_context *ctx)
 {
+    sr_bitmap_free(&ctx->restore.populated_pfns);
     free(ctx->x86.hvm.restore.context.ptr);
 
     free(ctx->x86.restore.cpuid.ptr);
diff --git a/tools/libs/guest/xg_sr_restore_x86_pv.c b/tools/libs/guest/xg_sr_restore_x86_pv.c
index dc50b0f5a8..477b6329f7 100644
--- a/tools/libs/guest/xg_sr_restore_x86_pv.c
+++ b/tools/libs/guest/xg_sr_restore_x86_pv.c
@@ -1060,6 +1060,12 @@ static int x86_pv_setup(struct xc_sr_context *ctx)
     if ( rc )
         return rc;
 
+    if ( !sr_bitmap_expand(&ctx->restore.populated_pfns, 32 * 1024 / 4) )
+    {
+        PERROR("Unable to allocate memory for populated_pfns bitmap");
+        return -1;
+    }
+
     ctx->x86.pv.restore.nr_vcpus = ctx->dominfo.max_vcpu_id + 1;
     ctx->x86.pv.restore.vcpus = calloc(sizeof(struct xc_sr_x86_pv_restore_vcpu),
                                        ctx->x86.pv.restore.nr_vcpus);
@@ -1153,6 +1159,7 @@ static int x86_pv_stream_complete(struct xc_sr_context *ctx)
  */
 static int x86_pv_cleanup(struct xc_sr_context *ctx)
 {
+    sr_bitmap_free(&ctx->restore.populated_pfns);
     free(ctx->x86.pv.p2m);
     free(ctx->x86.pv.p2m_pfns);
 


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 18:27:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 18:27:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155726.287468 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3N7i-0008My-T5; Tue, 13 Jul 2021 18:27:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155726.287468; Tue, 13 Jul 2021 18:27:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3N7i-0008Mr-Pm; Tue, 13 Jul 2021 18:27:14 +0000
Received: by outflank-mailman (input) for mailman id 155726;
 Tue, 13 Jul 2021 18:27:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3N7h-0008Mf-HA; Tue, 13 Jul 2021 18:27:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3N7h-0003PS-Ag; Tue, 13 Jul 2021 18:27:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3N7g-0006nO-SM; Tue, 13 Jul 2021 18:27:13 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3N7g-0000t7-Rr; Tue, 13 Jul 2021 18:27:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=dfa18kom/AJfG1R8ouqCMG+BsRXzXWgvsQWbDSK01o0=; b=25BBfNnHRtvpvIopMAHSU7vCnM
	46/1uTaSRs8YTSVpAPpkTWQEHKnjLlxh5frbM5H6BFarTdR5swnyaEgm42O6NnBkAWDuQo7lSRJMS
	Wn7xlw+LL8STF14dENtepWJ3j1TXWYqnbHtjcCs+BU6tUM1nEPkYoAe2067VMhZPlnf0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163645-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163645: regressions - FAIL
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-xl-qemuu-debianhvm-amd64:guest-start/debianhvm.repeat:fail:regression
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 18:27:12 +0000

flight 163645 xen-unstable-smoke real [real]
flight 163651 xen-unstable-smoke real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163645/
http://logs.test-lab.xenproject.org/osstest/logs/163651/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 20 guest-start/debianhvm.repeat fail REGR. vs. 163474

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    4 days
Failing since        163480  2021-07-09 16:08:01 Z    4 days   24 attempts
Testing same since   163645  2021-07-13 14:08:57 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-amd64-libvirt                                     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


Not pushing.

(No revision log; it would be 308 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 19:43:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 19:43:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155763.287490 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3OJj-0000JC-MS; Tue, 13 Jul 2021 19:43:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155763.287490; Tue, 13 Jul 2021 19:43:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3OJj-0000J5-JU; Tue, 13 Jul 2021 19:43:43 +0000
Received: by outflank-mailman (input) for mailman id 155763;
 Tue, 13 Jul 2021 19:43:42 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3OJi-0000Iv-Mm; Tue, 13 Jul 2021 19:43:42 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3OJi-0004p8-EN; Tue, 13 Jul 2021 19:43:42 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3OJi-0000oQ-4s; Tue, 13 Jul 2021 19:43:42 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3OJi-0005G0-4O; Tue, 13 Jul 2021 19:43:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=bJQ1ITxarCBcNiijVxu9aEsLH0TBMaKQfVtUlx7GYxM=; b=STnXR+74fytwt2w6aEHKJqfwYd
	mi+P81dR7W+xrjx94Qi+fJGpDcnIjrGk9aUnN6UyKcIHq900XC1hOhLdiNfnOKrDrJ9aW7opMf6As
	ZlUzvKDrTr8Jea+M7231NRbGQGdRuUkoKp9jdvH8fc/Z2taeVk3vJIb5BEYFVWdg+kzU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163646-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163646: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=9bf4aee7340c331a47d3a60388d478461979a45d
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 19:43:42 +0000

flight 163646 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163646/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 9bf4aee7340c331a47d3a60388d478461979a45d
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   39 days
Failing since        162368  2021-06-04 15:42:59 Z   39 days  111 attempts
Testing same since   163638  2021-07-13 09:09:10 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3764 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 20:53:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 20:53:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155785.287529 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3PP3-00087o-07; Tue, 13 Jul 2021 20:53:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155785.287529; Tue, 13 Jul 2021 20:53:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3PP2-00087h-TA; Tue, 13 Jul 2021 20:53:16 +0000
Received: by outflank-mailman (input) for mailman id 155785;
 Tue, 13 Jul 2021 20:53:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3Qsp=MF=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3PP1-00087b-0m
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 20:53:15 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 56a480d3-e41c-11eb-87a8-12813bfff9fa;
 Tue, 13 Jul 2021 20:53:13 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id C707461361;
 Tue, 13 Jul 2021 20:53:12 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 56a480d3-e41c-11eb-87a8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626209593;
	bh=15ztVRw4fL4NoOfnw2UqTKcOMLRZiU9h0eKF8KSinwg=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=IC5ZQAsPlxBwygOKzqiXitl/E1RUiHRzqlic8TuFPXejCcwZJkHbF7qKTV1cZXY6g
	 1V3HOhDK+aqg13JvmkmRCBKaK2rg8ls0VGEKfIWyXiTogdfS9CAXQz+8oFwQPGQRs1
	 TpQTMrGQnhK4cT1ENQkToJSfZNB9eL1/VVWXUchau379BfQItZGurj2iw6+9vB5evG
	 mGMUq7AcXdvJ1xdcx7V4gHY4nokp18BOCiTCa8gtd0hg2zWMnPNlKVbMGs29zLOc2s
	 JAvvSBgXPdRnFMMTzKyr3NkEAb1yPd4DLF1UVivHgC04mNuNACDrh13z+0MjVcalsJ
	 RJLVqG7F5oSpQ==
Date: Tue, 13 Jul 2021 13:53:12 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, Wei.Chen@arm.com, Henry.Wang@arm.com, 
    Penny.Zheng@arm.com, Bertrand.Marquis@arm.com, 
    Julien Grall <jgrall@amazon.com>, 
    Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH RFCv2 02/15] xen/arm: lpae: Use the generic helpers to
 defined the Xen PT helpers
In-Reply-To: <9397d94d-5a22-c026-7c66-400b7397c2fa@xen.org>
Message-ID: <alpine.DEB.2.21.2107131353000.23286@sstabellini-ThinkPad-T480s>
References: <20210425201318.15447-1-julien@xen.org> <20210425201318.15447-3-julien@xen.org> <alpine.DEB.2.21.2105111515470.5018@sstabellini-ThinkPad-T480s> <94e364a7-de40-93ab-6cde-a2f493540439@xen.org> <alpine.DEB.2.21.2105121425500.5018@sstabellini-ThinkPad-T480s>
 <e834b447-46c2-14fe-a39c-209d4d6ca5fe@xen.org> <alpine.DEB.2.21.2105131533070.5018@sstabellini-ThinkPad-T480s> <9397d94d-5a22-c026-7c66-400b7397c2fa@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Sat, 3 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> Sorry for the late answer.
> 
> On 13/05/2021 23:44, Stefano Stabellini wrote:
> > On Wed, 12 May 2021, Julien Grall wrote:
> > > Hi Stefano,
> > > 
> > > On 12/05/2021 22:30, Stefano Stabellini wrote:
> > > > On Wed, 12 May 2021, Julien Grall wrote:
> > > > > > > +#define LPAE_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
> > > > > > > +#define LPAE_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
> > > > > > > +#define LPAE_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
> > > > > > > 
> > > > > > > +#define LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
> > > > > > > +#define LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
> > > > > > > +#define LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
> > > > > > > +#define LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
> > > > > > 
> > > > > > I would avoid adding these 4 macros. It would be OK if they were
> > > > > > just
> > > > > > used within this file but lpae.h is a header: they could end up be
> > > > > > used
> > > > > > anywhere in the xen/ code and they have a very generic name. My
> > > > > > suggestion would be to skip them and just do:
> > > > > 
> > > > > Those macros will be used in follow-up patches. They are pretty useful
> > > > > to
> > > > > avoid introduce static array with the different information for each
> > > > > level.
> > > > > 
> > > > > Would prefix them with XEN_ be better?
> > > > 
> > > > Maybe. The concern I have is that there are multiple page granularities
> > > > (4kb, 16kb, etc) and multiple page sizes (4kb, 2mb, etc). If I just see
> > > > LEVEL_ORDER it is not immediately obvious what granularity and what size
> > > > we are talking about.
> > > 
> > > I am a bit puzzled with your answer. AFAIU, you are happy with the
> > > existing
> > > macros (THIRD_*, SECOND_*) but not with the new macros.
> > > 
> > > In reality, there is no difference because THIRD_* doesn't tell you the
> > > exact
> > > size but only "this is a level 3 mapping".
> > > 
> > > So can you clarify what you are after? IOW is it reworking the current
> > > naming
> > > scheme?
> > 
> > You are right -- there is no real difference between THIRD_*, SECOND_*
> > and LEVEL_*.
> > 
> > The original reason for my comments is that I hadn't read the following
> > patches, and the definition of LEVEL_* macros is simple, they could be
> > open coded. It looked like they were only going to be used to make the
> > definition of THIRD_*, SECOND_* a bit easier. So, at first, I was
> > wondering if they were needed at all.
> > 
> > Secondly, I realized that they were going to be used in *.c files by
> > other patches. That's why they are there. But I started thinking whether
> > we should find a way to make it a bit clearer that they are for Xen
> > pages, currently at 4KB granularity. THIRD_*, SECOND_*, etc. are already
> > generic names which don't convey the granularity or whether they are Xen
> > pages at all. But LEVEL_* seem even more generic.
> > 
> > As I mentioned, I don't have any good suggestions for changes to make
> > here, so unless you can come up with a good idea let's keep it as is.
> 
> I am thinking to use the following naming (diff on top of this patch):
> 
> -#define LPAE_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
> -#define LPAE_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
> -#define LPAE_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
> +#define XEN_PT_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
> +#define XEN_PT_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
> +#define XEN_PT_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
> 
> -#define LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
> -#define LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
> -#define LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
> -#define LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
> +#define XEN_PT_LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
> +#define XEN_PT_LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
> +#define XEN_PT_LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
> +#define XEN_PT_LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
> 
>  /* Convenience aliases */
> -#define THIRD_SHIFT         LEVEL_SHIFT(3)
> -#define THIRD_ORDER         LEVEL_ORDER(3)
> -#define THIRD_SIZE          LEVEL_SIZE(3)
> -#define THIRD_MASK          LEVEL_MASK(3)
> -
> -#define SECOND_SHIFT        LEVEL_SHIFT(2)
> -#define SECOND_ORDER        LEVEL_ORDER(2)
> -#define SECOND_SIZE         LEVEL_SIZE(2)
> -#define SECOND_MASK         LEVEL_MASK(2)
> -
> -#define FIRST_SHIFT         LEVEL_SHIFT(1)
> -#define FIRST_ORDER         LEVEL_ORDER(1)
> -#define FIRST_SIZE          LEVEL_SIZE(1)
> -#define FIRST_MASK          LEVEL_MASK(1)
> -
> -#define ZEROETH_SHIFT       LEVEL_SHIFT(0)
> -#define ZEROETH_ORDER       LEVEL_ORDER(0)
> -#define ZEROETH_SIZE        LEVEL_SIZE(0)
> -#define ZEROETH_MASK        LEVEL_MASK(0)
> +#define THIRD_SHIFT         XEN_PT_LEVEL_SHIFT(3)
> +#define THIRD_ORDER         XEN_PT_LEVEL_ORDER(3)
> +#define THIRD_SIZE          XEN_PT_LEVEL_SIZE(3)
> +#define THIRD_MASK          XEN_PT_LEVEL_MASK(3)
> +
> +#define SECOND_SHIFT        XEN_PT_LEVEL_SHIFT(2)
> +#define SECOND_ORDER        XEN_PT_LEVEL_ORDER(2)
> +#define SECOND_SIZE         XEN_PT_LEVEL_SIZE(2)
> +#define SECOND_MASK         XEN_PT_LEVEL_MASK(2)
> +
> +#define FIRST_SHIFT         XEN_PT_LEVEL_SHIFT(1)
> +#define FIRST_ORDER         XEN_PT_LEVEL_ORDER(1)
> +#define FIRST_SIZE          XEN_PT_LEVEL_SIZE(1)
> +#define FIRST_MASK          XEN_PT_LEVEL_MASK(1)
> +
> +#define ZEROETH_SHIFT       XEN_PT_LEVEL_SHIFT(0)
> +#define ZEROETH_ORDER       XEN_PT_LEVEL_ORDER(0)
> +#define ZEROETH_SIZE        XEN_PT_LEVEL_SIZE(0)
> +#define ZEROETH_MASK        XEN_PT_LEVEL_MASK(0)
> 
> I don't plan to modify the nameing for ZEROETH*, FIRST*, SECOND*, THIRD*.
> 
> Let me know if you prefer it over the currrent naming.

Yes, I think it is better, thanks!


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 22:52:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 22:52:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155802.287549 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3RGD-0003sy-EM; Tue, 13 Jul 2021 22:52:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155802.287549; Tue, 13 Jul 2021 22:52:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3RGD-0003sr-BL; Tue, 13 Jul 2021 22:52:17 +0000
Received: by outflank-mailman (input) for mailman id 155802;
 Tue, 13 Jul 2021 22:52:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3RGB-0003sh-Vw; Tue, 13 Jul 2021 22:52:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3RGB-000812-RT; Tue, 13 Jul 2021 22:52:15 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3RGB-0001CB-KF; Tue, 13 Jul 2021 22:52:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3RGB-0004Y4-Ji; Tue, 13 Jul 2021 22:52:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Z3B4ogPJp5Q/MqoYtvmAVdeeSb2Bacine2f/2t1LICo=; b=fOhg+QT0T5E7YE3YR/hrH+Ok4P
	mj1FnMXLwG/XJeE6pXS8GXJrJk+gYJ9LDG+rOpci8/KOIjZEuJ7tPye40LxtNLFgI04kx4jS+JPpV
	8riYn4RQZenEP0XGe3y5fSTOguYlU+v+lzSGi/LzRblhBwtCTiUxQCG/ZHuLFsj4eS+U=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163656-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163656: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 22:52:15 +0000

flight 163656 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163656/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163474  2021-07-09 12:00:25 Z    4 days
Failing since        163480  2021-07-09 16:08:01 Z    4 days   25 attempts
Testing same since   163645  2021-07-13 14:08:57 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   6de3e5fce5..3a98c1a4ce  3a98c1a4cec1a302beaddf944ded240b61173f87 -> smoke


From xen-devel-bounces@lists.xenproject.org Tue Jul 13 23:21:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 13 Jul 2021 23:21:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155808.287562 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ri8-0007Wu-Nv; Tue, 13 Jul 2021 23:21:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155808.287562; Tue, 13 Jul 2021 23:21:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Ri8-0007Wn-Ky; Tue, 13 Jul 2021 23:21:08 +0000
Received: by outflank-mailman (input) for mailman id 155808;
 Tue, 13 Jul 2021 23:21:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Ri7-0007Wb-H5; Tue, 13 Jul 2021 23:21:07 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Ri7-0008VG-BM; Tue, 13 Jul 2021 23:21:07 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Ri7-0003j1-1C; Tue, 13 Jul 2021 23:21:07 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3Ri7-0007Si-0h; Tue, 13 Jul 2021 23:21:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=mynJq3u5LMW5vA0Q2GzLu1k78OxytH5OtWrKdL7icc8=; b=S8J2AjoFVWFmmHeyjtQTmRk3wE
	0CmSUI2JTNTygCAdXsLNL3Chf4/s95mL6CElJCxNnnRcXH27Og6zUpmPUGsuNnqBOySsnDty33lT+
	aHJupvwqAlYzrZCxctwT1eykHwThRvulGkAUuFqHztBsbTBo/ijHwoSsfGLO6mjut3QI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163642-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163642: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=eca73713358f7abb18f15c026ff4267b51746992
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 13 Jul 2021 23:21:07 +0000

flight 163642 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163642/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                eca73713358f7abb18f15c026ff4267b51746992
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    7 days
Failing since        163327  2021-07-06 12:39:04 Z    7 days   14 attempts
Testing same since   163642  2021-07-13 11:08:53 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Lara Lazier <laramglazier@gmail.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 6106 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:07:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:07:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155814.287577 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3SQD-0004Wy-1Q; Wed, 14 Jul 2021 00:06:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155814.287577; Wed, 14 Jul 2021 00:06:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3SQC-0004Wr-UT; Wed, 14 Jul 2021 00:06:40 +0000
Received: by outflank-mailman (input) for mailman id 155814;
 Wed, 14 Jul 2021 00:06:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=LKO9=MG=gmail.com=konrad.r.wilk@srs-us1.protection.inumbo.net>)
 id 1m3SQB-0004Wl-3P
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:06:39 +0000
Received: from mail-qk1-x736.google.com (unknown [2607:f8b0:4864:20::736])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 420999cd-8692-466f-ab65-8da1f374e858;
 Wed, 14 Jul 2021 00:06:38 +0000 (UTC)
Received: by mail-qk1-x736.google.com with SMTP id s6so20709299qkc.8
 for <xen-devel@lists.xenproject.org>; Tue, 13 Jul 2021 17:06:38 -0700 (PDT)
Received: from fedora ([130.44.160.152])
 by smtp.gmail.com with ESMTPSA id o1sm128098qta.87.2021.07.13.17.06.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 13 Jul 2021 17:06:37 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 420999cd-8692-466f-ab65-8da1f374e858
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:date:from:to:cc:subject:message-id:references:mime-version
         :content-disposition:in-reply-to;
        bh=BRzBORQqhYkIvSSgRD10J8EaiYQ9ItZJaai9Sym40Us=;
        b=teI5WRKub2F/rwFPxCg0ZINCjBfRJc54nJqUFdAMXpGIMiTspU9RrcrUvARcHwoeMd
         CQXv1wJ/Fog/rhWZSvumcNrgcq+BxotT51h+tTiRDV8aZpevQuwsLDR4vyQtZSmmoC6h
         F9IEcsAuWnvI+dAhgG0Eo2jqsi01XmkKdYdzhKwGl4vTdbqsh5/P7DXsca+16o6s1nU2
         2kLICjJFyej3TGeGHMleEoqCSW2m15wa6CXhxq4NskVTucQzPb/x7tap01fpFeI4k0/I
         0oDywPh08J0yunT5JHEEyAcZVTBsHz7FszjRqikpByO6wq8hJu89C/WxnMp4EIv1s5qc
         +urw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:date:from:to:cc:subject:message-id
         :references:mime-version:content-disposition:in-reply-to;
        bh=BRzBORQqhYkIvSSgRD10J8EaiYQ9ItZJaai9Sym40Us=;
        b=e+pf5FBuZ+zx/jYfaWXM7r5PX1FAh1UOV4M5GiRD1mUREqtWzPHD0uUqVmlfsLgHoD
         EnFksW6jvHyMus6NeImjVUOlqaKg9sZDBCxon3NK1eD1P0wOI+/p7w19B0fSy7uvqMBP
         49XfS4A75UpG9p0EF32ckYQHCh7cnhg2nLGzFg6O5A/H9JMKpyeFeEVx28kPTairmtA1
         50wLIb68Zj1T2GfHXZ/0bJmgH2pLCfAVVSgU/F/VQMCUDECGsRPygk/XLwGghtoazI9U
         V6VvINlDH+2iTefyoJASZ5Q2QEsuxOnUOzV1YGbbJWQJmCwEWJBxufySJX4xficCnjBW
         4Keg==
X-Gm-Message-State: AOAM530IkQw3+AYBs48h72T/5qe/SrWuVcDaIhjye16xkbT0xhNsdoCL
	ZE+BmbvcBx+BFgMCSOXYK98=
X-Google-Smtp-Source: ABdhPJwNdfUqk7dW6v+BkJSkD78e6Hf5RHfzRN9m+TvOapNBOx9APu0hdr4kc7VyqpHBok4bqL0fFQ==
X-Received: by 2002:a05:620a:b85:: with SMTP id k5mr282577qkh.219.1626221197830;
        Tue, 13 Jul 2021 17:06:37 -0700 (PDT)
Sender: Konrad Rzeszutek Wilk <konrad.r.wilk@gmail.com>
Date: Tue, 13 Jul 2021 20:06:33 -0400
From: Konrad Rzeszutek Wilk <konrad@darnok.org>
To: Will Deacon <will@kernel.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Christoph Hellwig <hch@lst.de>, Robin Murphy <robin.murphy@arm.com>,
	heikki.krogerus@linux.intel.com, thomas.hellstrom@linux.intel.com,
	peterz@infradead.org, benh@kernel.crashing.org,
	joonas.lahtinen@linux.intel.com, dri-devel@lists.freedesktop.org,
	chris@chris-wilson.co.uk, grant.likely@arm.com, paulus@samba.org,
	Frank Rowand <frowand.list@gmail.com>, mingo@kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Saravana Kannan <saravanak@google.com>, mpe@ellerman.id.au,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>, bskeggs@redhat.com,
	linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
	Thierry Reding <treding@nvidia.com>,
	intel-gfx@lists.freedesktop.org, matthew.auld@intel.com,
	linux-devicetree <devicetree@vger.kernel.org>,
	Jianxiong Gao <jxgao@google.com>, Daniel Vetter <daniel@ffwll.ch>,
	maarten.lankhorst@linux.intel.com, airlied@linux.ie,
	Dan Williams <dan.j.williams@intel.com>,
	linuxppc-dev@lists.ozlabs.org, jani.nikula@linux.intel.com,
	Nathan Chancellor <nathan@kernel.org>,
	Rob Herring <robh+dt@kernel.org>, rodrigo.vivi@intel.com,
	Bjorn Helgaas <bhelgaas@google.com>,
	Claire Chang <tientzu@chromium.org>, boris.ostrovsky@oracle.com,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	jgross@suse.com, Nicolas Boichat <drinkcat@chromium.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Qian Cai <quic_qiancai@quicinc.com>,
	lkml <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS" <iommu@lists.linux-foundation.org>,
	Jim Quinlan <james.quinlan@broadcom.com>, xypron.glpk@gmx.de,
	Tom Lendacky <thomas.lendacky@amd.com>, bauerman@linux.ibm.com
Subject: Re: [PATCH v15 06/12] swiotlb: Use is_swiotlb_force_bounce for
 swiotlb data bouncing
Message-ID: <YO4qifiYjL4BTMv4@fedora>
References: <YN/7xcxt/XGAKceZ@Ryzen-9-3900X.localdomain>
 <20210705190352.GA19461@willie-the-truck>
 <20210706044848.GA13640@lst.de>
 <20210706132422.GA20327@willie-the-truck>
 <a59f771f-3289-62f0-ca50-8f3675d9b166@arm.com>
 <20210706140513.GA26498@lst.de>
 <YORsr0h7u5l9DZwh@char.us.oracle.com>
 <20210706165720.GC20750@willie-the-truck>
 <YOSMDZmtfXEKerpf@char.us.oracle.com>
 <20210712135645.GA28881@willie-the-truck>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210712135645.GA28881@willie-the-truck>

..snip..
> > > I think the main question I have is how would you like to see patches for
> > > 5.15? i.e. as patches on top of devel/for-linus-5.14 or something else?
> > 
> > Yes that would be perfect. If there are any dependencies on the rc1, I
> > can rebase it on top of that.
> 
> Yes, please, rebasing would be very helpful. The broader rework of
> 'io_tlb_default_mem' is going to conflict quite badly otherwise.

There is a devel/for-linus-5.15 (based on v5.14-rc1) now.

Thank you!
> 
> Cheers,
> 
> Will


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:15:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:15:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155820.287588 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3SYc-00060w-0a; Wed, 14 Jul 2021 00:15:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155820.287588; Wed, 14 Jul 2021 00:15:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3SYb-00060p-Tt; Wed, 14 Jul 2021 00:15:21 +0000
Received: by outflank-mailman (input) for mailman id 155820;
 Wed, 14 Jul 2021 00:15:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=juBr=MG=oracle.com=konrad.wilk@srs-us1.protection.inumbo.net>)
 id 1m3SYa-00060j-JV
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:15:20 +0000
Received: from mx0a-00069f02.pphosted.com (unknown [205.220.165.32])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 91f0549c-e438-11eb-87c6-12813bfff9fa;
 Wed, 14 Jul 2021 00:15:18 +0000 (UTC)
Received: from pps.filterd (m0246617.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16E0BBXi025873; Wed, 14 Jul 2021 00:15:15 GMT
Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71])
 by mx0b-00069f02.pphosted.com with ESMTP id 39rqkb3ksh-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Wed, 14 Jul 2021 00:15:14 +0000
Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1])
 by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16E0AwwA015456;
 Wed, 14 Jul 2021 00:15:14 GMT
Received: from nam04-mw2-obe.outbound.protection.outlook.com
 (mail-mw2nam08lp2176.outbound.protection.outlook.com [104.47.73.176])
 by aserp3030.oracle.com with ESMTP id 39qycxnaww-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Wed, 14 Jul 2021 00:15:13 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com (2603:10b6:a03:85::27)
 by BYAPR10MB3733.namprd10.prod.outlook.com (2603:10b6:a03:120::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Wed, 14 Jul
 2021 00:15:11 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d]) by BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::8111:d8f1:c262:808d%6]) with mapi id 15.20.4308.027; Wed, 14 Jul 2021
 00:15:11 +0000
Received: from fedora (130.44.160.152) by
 BL0PR0102CA0032.prod.exchangelabs.com (2603:10b6:207:18::45) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.20 via Frontend Transport; Wed, 14 Jul 2021 00:15:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 91f0549c-e438-11eb-87c6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc
 : subject : message-id : references : content-type : in-reply-to :
 mime-version; s=corp-2020-01-29;
 bh=WQMe8cxBDBjvWlR6Mys1FIL/vDdGCqW8iUhlSVxFSDI=;
 b=OCESkwgql26LCCMuJg8nhywPPQcI5v0CUTn07b4KFiQTmpTkC6HPqhc8cJ+nkI1JCgxi
 gryWtlBIzP5dltxtMTbO3seSCnmxDs09NY64F0XwpsjviMBX8jBXxSSqqA1+PZ7ok+4K
 sPQ6PRV6KI8uS9PKv8B5Ci+qcmpdq5Yd4HmuiqLagTWiY5zeMTcDaaGIcTKoiDP2UiuF
 0144I20mE9JfqUaZr9t3JcR9iDlLiguCsEbuDSM8DnMBqTijbDzEtb771bMo97iACh4P
 Mix+4LKRq6GvJtzdibXWTSLwpZqiCQCX+nofkZO2Dv/fCkOKxpvDwIpkLwuZF0acB+TP Xg== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TVH2p4sFCeLeRcWIv0yo2w0o4M5i1WlFNcG/zgHQLqb9jOaLG2Ewhg5UhZrifPie7kUOPabPeBOXeUbP3YkyxLtUC/98Wlj0sxNWfdT7IdtEiQcuPlCNdqrVFC/pxG7hEf8k/+GvuzyAZLm/f9YUn7UmYjHRPWlxOjZXhxoUfaHGzIawhSts/uV1RH7VOvyjWmOCeljRiJ6bXi4CVXxPQ1c6M/b7hG6HYpE1vnik3NfFtIO+X1m2fUZP/aVUcojgOtCR6ynfcfdU3yNWyHIrXrdRAq/7WuytANzHuA/WWC8CLccMc7f2euEofHecmF5eyxojeynTBDkX7Ld9ZssfvQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WQMe8cxBDBjvWlR6Mys1FIL/vDdGCqW8iUhlSVxFSDI=;
 b=K5MzG7ADifiMtwTKi8lmFzTPrSNxq2Qo9aLSLQVoBiCYgQwkT9V0GFouuzlWBb8AJzltOnsQykNvHaISsVLpABdDtqU61lU9Is2Ni5klZ+iFHPnmLyVZqKOUBAucrcCpoe41pWjNf6yDROfynRV7j8g3yPbOEHouma0jlspFl4or68/9d4/uf1YSliZ3k5Sl4teo49YkUGpnVP3BNi3aw4NX9IEoZ7+f3evRPbztFpOM/8jPQmLlp55+ULow7T53MJJ8teFheY2Yzynjf4Fk36MVjEl/+ci5irrDaI4zKhihdj4Dns7l29ho06iIqiQfeQavcKGbepESi+FbXpu5wA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WQMe8cxBDBjvWlR6Mys1FIL/vDdGCqW8iUhlSVxFSDI=;
 b=LaGwn8Lxl3kjcZ9A0mqh18UpCznj648MCHnVFAcqDWXiuTnK/NxPLQpNyeSDbfI7yw88stDKz6qXXqd1fvzPQ82Afq+PkqtWW2oYZBvDO8ByDZRtua/ogEPBeL9PMvgRWkU66Q5jekq9QGJzhL3oh1/TJd9VBZV22zH6YwQ4pMo=
Authentication-Results: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=oracle.com;
Date: Tue, 13 Jul 2021 20:15:07 -0400
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Roman Skakun <rm.skakun@gmail.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
        Juergen Gross <jgross@suse.com>,
        Stefano Stabellini <sstabellini@kernel.org>,
        xen-devel@lists.xenproject.org, iommu@lists.linux-foundation.org,
        linux-kernel@vger.kernel.org,
        Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
        Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
        Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
        Roman Skakun <roman_skakun@epam.com>,
        Andrii Anisov <andrii_anisov@epam.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
Message-ID: <YO4si0to/XYximwM@fedora>
References: <20210616154436.GA7619@lst.de>
 <20210622133414.132754-1-rm.skakun@gmail.com>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210622133414.132754-1-rm.skakun@gmail.com>
X-ClientProxiedBy: BL0PR0102CA0032.prod.exchangelabs.com
 (2603:10b6:207:18::45) To BYAPR10MB2999.namprd10.prod.outlook.com
 (2603:10b6:a03:85::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b59f7ce4-26e7-4932-510e-08d9465c721d
X-MS-TrafficTypeDiagnostic: BYAPR10MB3733:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<BYAPR10MB373356F4950D36E3F60A71C789139@BYAPR10MB3733.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1417;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	kjnHpK1WThdaq9Sb1h0jSXXe+H8yW5djUSXBOGr3Euap/1gehas6xsx6/9rD2P4sX9/54pqqv2L7jvY8KiJfD42hQ5fzO1BXZy6yHxxuXEMFuy4Qcxvajvy3ZfPNTLVgeG7DD8nxbl5msHiZmBknvePRHW1pAQ+ZArLxy2oqOy0infnuFA+C9aYirEDe5mwHQTkzoxCIWfr3LBSJxydHrnZXfblWJyIyvKVmDuMHzeiW4hJMWlq6t+S15JAQdG4NVuywS0JXfsjM2ilNYWBqfRRQqh5taBZu//CjYznE25gbMJZsPiLjR+hxXJb61afTMPLH/wa7fJ8sXOlE0fneZCDzWmht8qdx05cfPPnMaPoDmrnMxa5+v6hRwKsSXp4zIJAlh6QyMpkj1Q7AHTZ0/IJFkLw7X2FRIlPRsjkGIF09y6DRJqA72z1ywMftZ5QZN/f5hfg79Cf81me9Xjx4xWLmpkysdWp9hhOOMO6uNGVFW/zm+talf/8u28qjVicnJQWwtzjqfaHLxFb1rHyVDzxpmJe03La5WKievCz1Ex+UhLX3xEt5XG5sI9ZToBB3+jSjOQZIgcv2K/R4rIZB5zhEm5eEvL/DCgkrBRCIE7pO6aon+4JUiWTCD2pQ5LAv0qTD24l3YR08xgOBWx7e1C/D4kSZJ8K/aNYCFh8sdHN9ep5XGUy3OAKxdN+bEbGCy8BlDl7YR+29hcA9LiVQAg==
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2999.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(346002)(376002)(396003)(136003)(186003)(316002)(2906002)(8676002)(8936002)(6666004)(66556008)(38100700002)(33716001)(26005)(66476007)(6916009)(66946007)(54906003)(52116002)(4326008)(5660300002)(6496006)(956004)(55016002)(478600001)(86362001)(9576002)(7416002)(83380400001)(9686003)(38350700002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	=?us-ascii?Q?Mk2Z3lWCjur9fjoKdKhkq1037NdTgBJ8bEHfxSZJYOH2JaavmfxMo7sXLqce?=
 =?us-ascii?Q?6UTNCtX5tcpfoP6moupeQecJfm6PO+yOY9DwNH/K0KPO4V6j+oIBC7UkykWj?=
 =?us-ascii?Q?hVVsE4Bmd64PbMtIT2VtJfzxsrDhmvveuJBqBBnCfCgQ957b6czCfdvQeiUI?=
 =?us-ascii?Q?wDqrwsugQSkVdVlk5mXvqySFR0I7HREnw1uDOKEIfmPcRvI9aRNJQUpnKjlA?=
 =?us-ascii?Q?uAnKhtq/hXNhY72sYYOu+GeT5kWzJpImlbaBhTos1qS/k4k78SWXwk7PWVhb?=
 =?us-ascii?Q?vWV5uWgU3GhW0y4ORQJUU06HhBCcqRVJc/CENKf73eKfYvltTmmBksh4H7wa?=
 =?us-ascii?Q?kxB+3S+x+Z4C826fqdzv58h/S3x6qV1mJQihn1EkGHwzRKcjCVY+JDjZbjBW?=
 =?us-ascii?Q?gzSUE64IajGfloHBDa9ROIG4ITjL8QhgArmH+M55GfZEcP3Rg0PKD3rr1ISl?=
 =?us-ascii?Q?h63UrrDTM4LGNac9hTsDSqyv+zKkRqGwg0TZZ9eGkVXJI2IwpIAw/UGukhLS?=
 =?us-ascii?Q?skwLNcj4Ymq7tN8dgUX7jcUHWmstafvoZWOERmLio6Vhq7y2BZ8ZpERS7D2A?=
 =?us-ascii?Q?9uyYYYPbStavXGVfHr9zYLk8QL4jpYInhIqT7zY4Sks4nc89BFiGw2iTmxU0?=
 =?us-ascii?Q?vuh7TLv9D26QVwdYkZuAtmp2MizKRVa2L9FMxXD2y8AJDnClGmmp+tzz745o?=
 =?us-ascii?Q?TxgEh0m+DugvBG8wxpwu4FzAFbaPcS1RG+7rWQS6Snceu2a5//58Mng9Edxh?=
 =?us-ascii?Q?CCmdBF/CkU2ASqoMju/Zx+qU3SPoQsiYIeiwF7SlLdoXQgpxVDGz4txg5BxL?=
 =?us-ascii?Q?GoODGY/c4EGUvOUFfMztp9NyKiS62tPSX+sSRGYNoFq8LZqh5iE3WIrdSP8/?=
 =?us-ascii?Q?lKFI9kR1rF3BOS0VRGV6IIKR6/0hF2uVd1Rm9sc3JZXpWsZkW5fsFlMFB56y?=
 =?us-ascii?Q?NfQipg9medhrclsGMhmsEQkfSU3NoHjUtrMZHYVNnmfjh2PS4XkK7BIQKLFQ?=
 =?us-ascii?Q?jyL8+Ch83Gk7AemKyY4O4u518GljQREYf1igMXR0LT6I2Z5pZFsHBtiv2Xhm?=
 =?us-ascii?Q?qpDoW4pBOFHSOsLVvZ3nyMUo+D8eFChaToqRgEe/jSQDEfpRZDli8+NX2W5G?=
 =?us-ascii?Q?x4tEPcUQyBRvRw1ONZZ2qiXClmmp6tu7AOscvLpFMIsY83S02pB71IRwrUmb?=
 =?us-ascii?Q?XnKc88Z60PkeZcpmw6lb0/BZ+pN1istun9cQS8RE/XKEcoY9+Dy9AULATTY8?=
 =?us-ascii?Q?kxRxbKY6++9uobm8i1SD3ChwvT6gQ846jmnzP8e22+reKHDjcN2ZKReXPf9V?=
 =?us-ascii?Q?xa7HcGgj08FEwcXV2ojiHbir?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b59f7ce4-26e7-4932-510e-08d9465c721d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2999.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 00:15:11.7074
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: V1nfl1b5cnrqXRriiI+l5uq+KvKwuhNKm9BOGzC6lOpN+Z33eNcNEi8u7XwM5sr5Y0Udiy6uCestWYIWcNX9pQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB3733
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10044 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999
 adultscore=0 malwarescore=0 bulkscore=0 mlxscore=0 suspectscore=0
 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2104190000 definitions=main-2107130148
X-Proofpoint-ORIG-GUID: d74-teT1IVuI8AP4KMenCHcngSLjVCvo
X-Proofpoint-GUID: d74-teT1IVuI8AP4KMenCHcngSLjVCvo

On Tue, Jun 22, 2021 at 04:34:14PM +0300, Roman Skakun wrote:
> This commit is dedicated to fix incorrect conversion from
> cpu_addr to page address in cases when we get virtual
> address which allocated in the vmalloc range.
> As the result, virt_to_page() cannot convert this address
> properly and return incorrect page address.
> 
> Need to detect such cases and obtains the page address using
> vmalloc_to_page() instead.
> 
> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> ---
> Hey!
> Thanks for suggestions, Christoph!
> I updated the patch according to your advice.
> But, I'm so surprised because nobody catches this problem
> in the common code before. It looks a bit strange as for me. 

This looks like it wasn't picked up? Should it go in rc1?
> 
> 
>  kernel/dma/ops_helpers.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> index 910ae69cae77..782728d8a393 100644
> --- a/kernel/dma/ops_helpers.c
> +++ b/kernel/dma/ops_helpers.c
> @@ -5,6 +5,14 @@
>   */
>  #include <linux/dma-map-ops.h>
>  
> +static struct page *cpu_addr_to_page(void *cpu_addr)
> +{
> +	if (is_vmalloc_addr(cpu_addr))
> +		return vmalloc_to_page(cpu_addr);
> +	else
> +		return virt_to_page(cpu_addr);
> +}
> +
>  /*
>   * Create scatter-list for the already allocated DMA buffer.
>   */
> @@ -12,7 +20,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
>  		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
>  		 unsigned long attrs)
>  {
> -	struct page *page = virt_to_page(cpu_addr);
> +	struct page *page = cpu_addr_to_page(cpu_addr);
>  	int ret;
>  
>  	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
> @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
>  		return -ENXIO;
>  
>  	return remap_pfn_range(vma, vma->vm_start,
> -			page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff,
> +			page_to_pfn(cpu_addr_to_page(cpu_addr)) + vma->vm_pgoff,
>  			user_count << PAGE_SHIFT, vma->vm_page_prot);
>  #else
>  	return -ENXIO;
> -- 
> 2.25.1
> 


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:39:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:39:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155834.287605 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Svo-0000RA-02; Wed, 14 Jul 2021 00:39:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155834.287605; Wed, 14 Jul 2021 00:39:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Svn-0000R3-SY; Wed, 14 Jul 2021 00:39:19 +0000
Received: by outflank-mailman (input) for mailman id 155834;
 Wed, 14 Jul 2021 00:39:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3Svm-0000Qx-Is
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:39:18 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8a25ec2e-72d9-4b60-9db8-0f3b00d855a8;
 Wed, 14 Jul 2021 00:39:18 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 277F660FED;
 Wed, 14 Jul 2021 00:39:17 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8a25ec2e-72d9-4b60-9db8-0f3b00d855a8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626223157;
	bh=t+dzwqWf5U8EV5UtznliY3kiBjWeOoCHJK1U7NAT7D0=;
	h=Date:From:To:cc:Subject:From;
	b=R5EbyUy1SpZJG7myX+6oZB07QcPQBPhw4xUJlyjyzmi6MBACylqGcEfgqfjaTwPAs
	 LUQJz9ILdxjz6kTLYrP2hzGoqMstYPxHO7gWVwNa/6CUuSiqD+O93ZPrdJ57XXOhy3
	 hqJkSafTduywXgsrNRS5FtDwlWKajLa/O1B4wzjVpMmFOi7dokbLhbYKqVL5d/T/IM
	 4NOCEulALnod13aqobZzuNOamfkn/+htmO+iaRthDwV8IqZmhvMQqnOUNhRHdE+t6p
	 NwQN0QLJBWGhktpwJ2lGxo/hKIaP3hEG/D2YyfwnrsbOuViT7v6f4AecMYBkbCTWlq
	 8W2w6wQ/aTC1A==
Date: Tue, 13 Jul 2021 17:39:16 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: xen-devel@lists.xenproject.org
cc: sstabellini@kernel.org, julien@xen.org, andrew.cooper3@citrix.com, 
    george.dunlap@citrix.com, jbeulich@suse.com, iwj@xenproject.org, 
    wl@xen.org
Subject: [PATCH] SUPPORT.md: add Dom0less as Supported
Message-ID: <alpine.DEB.2.21.2107131734170.23286@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Add Dom0less to SUPPORT.md to clarify its support status. The feature is
mature enough and small enough to make it security supported.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>

diff --git a/SUPPORT.md b/SUPPORT.md
index 317392d8f3..c777f3da72 100644
--- a/SUPPORT.md
+++ b/SUPPORT.md
@@ -832,6 +832,12 @@ OVMF firmware implements the UEFI boot protocol.
 
     Status, qemu-xen: Supported
 
+## Dom0less
+
+Guest creation from the hypervisor at boot without Dom0 intervention.
+
+    Status, ARM: Supported
+
 # Format and definitions
 
 This file contains prose, and machine-readable fragments.


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:40:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:40:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155838.287616 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Swx-0001iV-BS; Wed, 14 Jul 2021 00:40:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155838.287616; Wed, 14 Jul 2021 00:40:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Swx-0001iM-6m; Wed, 14 Jul 2021 00:40:31 +0000
Received: by outflank-mailman (input) for mailman id 155838;
 Wed, 14 Jul 2021 00:40:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3Swv-0001iA-KY
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:40:29 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id abd8bf62-95e4-4102-8322-15b738c90b6b;
 Wed, 14 Jul 2021 00:40:29 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 3C05360FF1;
 Wed, 14 Jul 2021 00:40:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: abd8bf62-95e4-4102-8322-15b738c90b6b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626223228;
	bh=H9O56kVqbiiKTCgS3VPYu2hPUMI6yc0kK6glhidi5iA=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=YIvcXBY+hCH7txv9pc+rNLfhX5DzP9vdzNO4uR+HHbhf+Ij/eSBQ0xCPQOvgzBvVU
	 bO7NSYAUPG7GyKf7ggawCfr47/117BmoBWoLeh8vF/svQhPwYe2DtSjCsHr6Wz4L6r
	 BOKbJSJuc+eplEHik1+p88dO1r1FZUccHfoyt3Fm0XNuVEawaKxipEY0DYZuFpvYlH
	 mX7Lt9EYiM+xXVg9rwCgMSTp/UFhNrqVgK6XS79Fyu2F31ifEOH70vuTdt3COov48k
	 GRukFfYPzcO9BiQVHpctmhWcs6JOXM4mTrkCQe4O8yZJOMKXH0oXY/5urgkHYZyy2I
	 y08/xrGrHcXUQ==
Date: Tue, 13 Jul 2021 17:40:27 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: cardoe@cardoe.com, wl@xen.org, andrew.cooper3@citrix.com
cc: sstabellini@kernel.org, xen-devel@lists.xenproject.org
Subject: Re: [PATCH 0/2] gitlab-ci: add a qemu-based arm32 test
In-Reply-To: <alpine.DEB.2.21.2106251826120.9437@sstabellini-ThinkPad-T480s>
Message-ID: <alpine.DEB.2.21.2107131739360.23286@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2106251826120.9437@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Ping?


On Fri, 25 Jun 2021, Stefano Stabellini wrote:
> Hi all,
> 
> This short series adds a minimal ARM32 test based on QEMU. It just runs
> Xen and Dom0 up to a Busybox prompt.
> 
> Cheers,
> 
> Stefano
> 
> 
> Stefano Stabellini (2):
>       Add qemu-system-arm to the existing tests-artifacts container
>       Add an ARM32 qemu-based smoke test
> 
>  automation/gitlab-ci/build.yaml                    | 14 ++++-
>  automation/gitlab-ci/test.yaml                     | 27 +++++++-
>  automation/scripts/qemu-smoke-arm32.sh             | 72 ++++++++++++++++++++++
>  ...arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} |  5 +-
>  4 files changed, 112 insertions(+), 6 deletions(-)
>  create mode 100755 automation/scripts/qemu-smoke-arm32.sh
>  rename automation/tests-artifacts/qemu-system-aarch64/{5.2.0-arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} (95%)
> 


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:46:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:46:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155845.287627 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T2m-0002bP-01; Wed, 14 Jul 2021 00:46:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155845.287627; Wed, 14 Jul 2021 00:46:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T2l-0002bI-Rj; Wed, 14 Jul 2021 00:46:31 +0000
Received: by outflank-mailman (input) for mailman id 155845;
 Wed, 14 Jul 2021 00:46:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3T2j-0002bC-UL
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:46:29 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ecdc6dce-e43c-11eb-87c6-12813bfff9fa;
 Wed, 14 Jul 2021 00:46:29 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 4EC2961363;
 Wed, 14 Jul 2021 00:46:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ecdc6dce-e43c-11eb-87c6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626223588;
	bh=s9wNpvsFF7UgWwUH54sFBHBaymc4r5uXCwwAmGNFs7Y=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=NtcX2DluZpjCu2lDEFXVDk1r1lDK8gomgL6/+dffHhPNjM4+ujrd46aUs5qCQ7Bic
	 +m70SvWlez7vhffK+hIuY4DQ/1pEiTVht38U7Op4jyhaI+GaDDpYE9mSmo885UN44f
	 McDZkWN+DhryCY99AJs483qCBDt34CqFFgw8alVqohdTUiX9EOEeGeeUrrtUZGjYzw
	 /YSvNDLYUuTLX2cJBJvYNJlhGNrgij0PXIpWAyBMySGG4SlYX7gAepdwoMpTXxCXuA
	 rR+MDBsvBW/gcqoYS7IEFrHofo+ylWAt70MW3COw7w+rWlDl+zXVWsKlt3KmKsPrnm
	 iPfYi+MbjevlQ==
Date: Tue, 13 Jul 2021 17:46:27 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Stefano Stabellini <sstabellini@kernel.org>
cc: cardoe@cardoe.com, wl@xen.org, andrew.cooper3@citrix.com, 
    xen-devel@lists.xenproject.org
Subject: Re: [PATCH 0/2] gitlab-ci: add a qemu-based arm32 test
In-Reply-To: <alpine.DEB.2.21.2107131739360.23286@sstabellini-ThinkPad-T480s>
Message-ID: <alpine.DEB.2.21.2107131746062.23286@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2106251826120.9437@sstabellini-ThinkPad-T480s> <alpine.DEB.2.21.2107131739360.23286@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Ops, I realized this series never made it entirely to xen-devel. Let me
resend it.


On Tue, 13 Jul 2021, Stefano Stabellini wrote:
> Ping?
> 
> 
> On Fri, 25 Jun 2021, Stefano Stabellini wrote:
> > Hi all,
> > 
> > This short series adds a minimal ARM32 test based on QEMU. It just runs
> > Xen and Dom0 up to a Busybox prompt.
> > 
> > Cheers,
> > 
> > Stefano
> > 
> > 
> > Stefano Stabellini (2):
> >       Add qemu-system-arm to the existing tests-artifacts container
> >       Add an ARM32 qemu-based smoke test
> > 
> >  automation/gitlab-ci/build.yaml                    | 14 ++++-
> >  automation/gitlab-ci/test.yaml                     | 27 +++++++-
> >  automation/scripts/qemu-smoke-arm32.sh             | 72 ++++++++++++++++++++++
> >  ...arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} |  5 +-
> >  4 files changed, 112 insertions(+), 6 deletions(-)
> >  create mode 100755 automation/scripts/qemu-smoke-arm32.sh
> >  rename automation/tests-artifacts/qemu-system-aarch64/{5.2.0-arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} (95%)
> > 
> 


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:48:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:48:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155850.287637 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T55-0003F6-BS; Wed, 14 Jul 2021 00:48:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155850.287637; Wed, 14 Jul 2021 00:48:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T55-0003Ez-8c; Wed, 14 Jul 2021 00:48:55 +0000
Received: by outflank-mailman (input) for mailman id 155850;
 Wed, 14 Jul 2021 00:48:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3T53-0003Et-UP
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:48:53 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4280be9d-e43d-11eb-87c6-12813bfff9fa;
 Wed, 14 Jul 2021 00:48:53 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 6CD87611AC;
 Wed, 14 Jul 2021 00:48:52 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4280be9d-e43d-11eb-87c6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626223732;
	bh=PSgjFaicbdDJlSNhJzqCdyS3I93jKywfZ4jbI8KWxI4=;
	h=Date:From:To:cc:Subject:From;
	b=Ta+RcJKlR2AnrpiW/1oUpgdYhIasq3Xk/mpo9wecqPh/2yPuvE57AtgDuK8ozDIl6
	 5o6mkybIZvnYDGCUiecqUTMUz69Z+Vg1dQ3AhSw70j4mBQF9uDBAFLtqbqjvMtDeYh
	 3kfRCDXX7/pDJIEAGYxeuO+zUkdpm2oYcX+d0Yp5wTRUjI6aezznMjr0Bb4bbVo/DU
	 otbKSmTqL22CwF/iHgdv8wXCggPsgcGxRWqrhOmywejpJIZFz2j0I+g8AcL8On5U0o
	 d/hkdp3fzSH9Xjb8W7E00q8ch4Je3n/3aG6Flsqg0cEneq9XMKCmGEiokGyUl1BdSU
	 VLWLVIdLyVw3w==
Date: Tue, 13 Jul 2021 17:48:51 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: cardoe@cardoe.com, wl@xen.org, andrew.cooper3@citrix.com
cc: sstabellini@kernel.org, xen-devel@lists.xenproject.org
Subject: [PATCH RESEND 0/2] gitlab-ci: add a qemu-based arm32 test
Message-ID: <alpine.DEB.2.21.2107131747070.23286@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Hi all,

This short series adds a minimal ARM32 test based on QEMU. It just runs
Xen and Dom0 up to a Busybox prompt.

Cheers,

Stefano


Stefano Stabellini (2):
      Add qemu-system-arm to the existing tests-artifacts container
      Add an ARM32 qemu-based smoke test

 automation/gitlab-ci/build.yaml                    | 14 ++++-
 automation/gitlab-ci/test.yaml                     | 27 +++++++-
 automation/scripts/qemu-smoke-arm32.sh             | 72 ++++++++++++++++++++++
 ...arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} |  5 +-
 4 files changed, 112 insertions(+), 6 deletions(-)
 create mode 100755 automation/scripts/qemu-smoke-arm32.sh
 rename automation/tests-artifacts/qemu-system-aarch64/{5.2.0-arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} (95%)



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:48:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:48:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155851.287649 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T59-0003YX-K0; Wed, 14 Jul 2021 00:48:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155851.287649; Wed, 14 Jul 2021 00:48:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T59-0003YO-GX; Wed, 14 Jul 2021 00:48:59 +0000
Received: by outflank-mailman (input) for mailman id 155851;
 Wed, 14 Jul 2021 00:48:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3T58-0003Et-Sw
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:48:58 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 44c93f4e-e43d-11eb-87c6-12813bfff9fa;
 Wed, 14 Jul 2021 00:48:56 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id D7085611AC;
 Wed, 14 Jul 2021 00:48:55 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44c93f4e-e43d-11eb-87c6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626223736;
	bh=uAe5ce07AyeZidUJgVPIxlpzXYZq94Yro+8L3O62nyc=;
	h=From:To:Cc:Subject:Date:From;
	b=bJt7AcDNXNOe5Xj8JvuliLyBbx09Oh1e5Z2Bpd8sL2KMQEt15baM5GOYF4YpT0/fK
	 gj0vJaBb56xwXiYeWOtfmDvkJTo6D9jgY+VnJydl50Bt+q03HZlP9TS+z+Bi+iK0ud
	 M+xLGd9NLAOEN33wqCLIVGNePGndoPDXAeTMCjvCWG6z1mtEGTNnNnHQzWU1NEpFcQ
	 mL9/NYUXDaP8LrYBy8m7VXcjDUz7moIwiymIH3Xr/seS/3o+3nxbVeQlhqVhlEVlW9
	 wA1SuBcPr14EK1OIEhoB8FpMs1/Ym2TFi39pe07N2Hrrlj3jOBT7OCEu35Ctz5yFTD
	 pbWMkYx1HqAsA==
From: Stefano Stabellini <sstabellini@kernel.org>
To: cardoe@cardoe.com,
	wl@xen.org,
	andrew.cooper3@citrix.com
Cc: sstabellini@kernel.org,
	xen-devel@lists.xenproject.org,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH RESEND 1/2] gitlab-ci: add qemu-system-arm to the existing tests-artifacts container
Date: Tue, 13 Jul 2021 17:48:53 -0700
Message-Id: <20210714004854.31135-1-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1

Add qemu-system-arm to the existing test-artifacts qemu container (which
doesn't get build for every iteration but only updated once in a while.)

With qemu-system-arm available, we'll be able to run ARM32 tests.

This patch also bumps the QEMU version to v6.0.0 for both arm32 and
arm64 (the test-artifacts container is one, shared for both).

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
 automation/gitlab-ci/build.yaml                    | 14 ++++++++++++--
 automation/gitlab-ci/test.yaml                     |  4 ++--
 ...arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} |  5 +++--
 3 files changed, 17 insertions(+), 6 deletions(-)
 rename automation/tests-artifacts/qemu-system-aarch64/{5.2.0-arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} (95%)

diff --git a/automation/gitlab-ci/build.yaml b/automation/gitlab-ci/build.yaml
index d177da1710..75a3830a14 100644
--- a/automation/gitlab-ci/build.yaml
+++ b/automation/gitlab-ci/build.yaml
@@ -585,9 +585,9 @@ kernel-5.9.9-arm64-export:
   tags:
     - arm64
 
-qemu-system-aarch64-5.2.0-arm64-export:
+qemu-system-aarch64-6.0.0-arm64-export:
   stage: build
-  image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:5.2.0-arm64v8
+  image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:6.0.0-arm64v8
   script:
     - mkdir binaries && cp /qemu-system-aarch64 binaries/qemu-system-aarch64
   artifacts:
@@ -596,3 +596,13 @@ qemu-system-aarch64-5.2.0-arm64-export:
   tags:
     - arm64
 
+qemu-system-aarch64-6.0.0-arm32-export:
+  stage: build
+  image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:6.0.0-arm64v8
+  script:
+    - mkdir binaries && cp /qemu-system-arm binaries/qemu-system-arm
+  artifacts:
+    paths:
+      - binaries/qemu-system-arm
+  tags:
+    - arm64
diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
index 91a10febbf..d3b670b156 100644
--- a/automation/gitlab-ci/test.yaml
+++ b/automation/gitlab-ci/test.yaml
@@ -33,7 +33,7 @@ qemu-alpine-arm64-gcc:
     - alpine-3.12-gcc-arm64
     - alpine-3.12-arm64-rootfs-export
     - kernel-5.9.9-arm64-export
-    - qemu-system-aarch64-5.2.0-arm64-export
+    - qemu-system-aarch64-6.0.0-arm64-export
   artifacts:
     paths:
       - smoke.serial
@@ -57,7 +57,7 @@ qemu-smoke-arm64-gcc:
   dependencies:
     - debian-unstable-gcc-arm64
     - kernel-5.9.9-arm64-export
-    - qemu-system-aarch64-5.2.0-arm64-export
+    - qemu-system-aarch64-6.0.0-arm64-export
   artifacts:
     paths:
       - smoke.serial
diff --git a/automation/tests-artifacts/qemu-system-aarch64/5.2.0-arm64v8.dockerfile b/automation/tests-artifacts/qemu-system-aarch64/6.0.0-arm64v8.dockerfile
similarity index 95%
rename from automation/tests-artifacts/qemu-system-aarch64/5.2.0-arm64v8.dockerfile
rename to automation/tests-artifacts/qemu-system-aarch64/6.0.0-arm64v8.dockerfile
index e105a1c636..793432d40b 100644
--- a/automation/tests-artifacts/qemu-system-aarch64/5.2.0-arm64v8.dockerfile
+++ b/automation/tests-artifacts/qemu-system-aarch64/6.0.0-arm64v8.dockerfile
@@ -3,7 +3,7 @@ LABEL maintainer.name="The Xen Project" \
       maintainer.email="xen-devel@lists.xenproject.org"
 
 ENV DEBIAN_FRONTEND=noninteractive
-ENV QEMU_VERSION=5.2.0
+ENV QEMU_VERSION=6.0.0
 ENV USER root
 
 RUN mkdir /build
@@ -25,7 +25,7 @@ RUN apt-get update && \
     tar xvJf qemu-"$QEMU_VERSION".tar.xz && \
     cd qemu-"$QEMU_VERSION" && \
     ./configure                \
-        --target-list=aarch64-softmmu \
+        --target-list=arm-softmmu,aarch64-softmmu \
         --enable-system        \
         --disable-blobs        \
         --disable-bsd-user     \
@@ -68,6 +68,7 @@ RUN apt-get update && \
     && \
     make -j$(nproc) && \
     cp ./build/qemu-system-aarch64 / && \
+    cp ./build/qemu-system-arm / && \
     cd /build && \
     rm -rf qemu-"$QEMU_VERSION"* && \
     apt-get autoremove -y && \
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 00:49:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 00:49:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155852.287660 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T5F-0003ux-11; Wed, 14 Jul 2021 00:49:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155852.287660; Wed, 14 Jul 2021 00:49:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3T5E-0003ul-U8; Wed, 14 Jul 2021 00:49:04 +0000
Received: by outflank-mailman (input) for mailman id 155852;
 Wed, 14 Jul 2021 00:49:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3T5D-0003Et-TC
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 00:49:03 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 45039b26-e43d-11eb-87c6-12813bfff9fa;
 Wed, 14 Jul 2021 00:48:57 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 3A6A661380;
 Wed, 14 Jul 2021 00:48:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 45039b26-e43d-11eb-87c6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626223736;
	bh=7AX9tgnNt8re/IodO17wrafcLnYuaI+FKt9FzKcLJ4I=;
	h=From:To:Cc:Subject:Date:From;
	b=Sn6Vx0SrAG34k5/aaDjSPnBbaAlZUzWS1UsQQ74lsHhbXDjgX8LNhuCUTEgigZn1w
	 4CLTDOP6IauOCrAncLJrZbrwkC5XXgvEQDWXjIuEvvmujuli0y6uQx9EgxxOckOHPt
	 CezUvzAzMAWBtd0Ee55JFunpPFo+ttSJS3cwea9iyHdNjfilMAAFX7HLu7deCM4xHa
	 aucx9MmRGfRdO30Hnvr0blR0irNd04FiibqxULxDyPlMZwphMu+IWRHQ3u9v9qbywd
	 3/u4MfWw9qk9SpGULzeJnTJcjEtc8Qm8gbM8Jo31jEvBEM/CR5NKpKdNTxpT8iYfgL
	 YgefmYQR8f7Vw==
From: Stefano Stabellini <sstabellini@kernel.org>
To: cardoe@cardoe.com,
	wl@xen.org,
	andrew.cooper3@citrix.com
Cc: sstabellini@kernel.org,
	xen-devel@lists.xenproject.org,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH RESEND 2/2] gitlab-ci: add an ARM32 qemu-based smoke test
Date: Tue, 13 Jul 2021 17:48:54 -0700
Message-Id: <20210714004854.31135-2-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1

Add a minimal ARM32 smoke test based on qemu-system-arm, as provided by
the test-artifacts qemu container. The minimal test simply boots Xen
(built from previous build stages) and Dom0. The test is fetching the
Dom0 kernel and initrd from Debian Jessie: they work just fine and this
way we don't have to maintain a build for them too.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
 automation/gitlab-ci/test.yaml         | 23 ++++++++
 automation/scripts/qemu-smoke-arm32.sh | 72 ++++++++++++++++++++++++++
 2 files changed, 95 insertions(+)
 create mode 100755 automation/scripts/qemu-smoke-arm32.sh

diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
index d3b670b156..7f942dd64b 100644
--- a/automation/gitlab-ci/test.yaml
+++ b/automation/gitlab-ci/test.yaml
@@ -71,6 +71,29 @@ qemu-smoke-arm64-gcc:
     - /^coverity-tested\/.*/
     - /^stable-.*/
 
+qemu-smoke-arm32-gcc:
+  stage: test
+  image: registry.gitlab.com/xen-project/xen/${CONTAINER}
+  variables:
+    CONTAINER: debian:unstable-arm64v8
+  script:
+    - ./automation/scripts/qemu-smoke-arm32.sh 2>&1 | tee qemu-smoke-arm32.log
+  dependencies:
+    - debian-unstable-gcc-arm32
+    - qemu-system-aarch64-6.0.0-arm32-export
+  artifacts:
+    paths:
+      - smoke.serial
+      - '*.log'
+    when: always
+  tags:
+    - arm64
+  except:
+    - master
+    - smoke
+    - /^coverity-tested\/.*/
+    - /^stable-.*/
+
 qemu-smoke-x86-64-gcc:
   stage: test
   image: registry.gitlab.com/xen-project/xen/${CONTAINER}
diff --git a/automation/scripts/qemu-smoke-arm32.sh b/automation/scripts/qemu-smoke-arm32.sh
new file mode 100755
index 0000000000..4126be2042
--- /dev/null
+++ b/automation/scripts/qemu-smoke-arm32.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+set -ex
+
+# Install QEMU
+export DEBIAN_FRONTENT=noninteractive
+apt-get -qy update
+apt-get -qy install --no-install-recommends device-tree-compiler \
+                                            curl
+
+cd binaries
+curl -fsSLO http://http.us.debian.org/debian/dists/jessie/main/installer-armhf/current/images/netboot/vmlinuz
+curl -fsSLO http://http.us.debian.org/debian/dists/jessie/main/installer-armhf/current/images/netboot/initrd.gz
+
+kernel=`stat -L --printf="%s" vmlinuz`
+initrd=`stat -L --printf="%s" initrd.gz`
+
+# XXX QEMU looks for "efi-virtio.rom" even if it is unneeded
+curl -fsSLO https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom
+./qemu-system-arm \
+   -machine virt-6.0 \
+   -machine virtualization=true \
+   -smp 4 \
+   -m 2048 \
+   -serial stdio \
+   -monitor none \
+   -display none \
+   -machine dumpdtb=virt.dtb
+
+dtc -I dtb -O dts virt.dtb > virt.dts
+
+cat >> virt.dts << EOF
+/ {
+	chosen {
+		#address-cells = <0x2>;
+		#size-cells = <0x2>;
+		stdout-path = "/pl011@9000000";
+        xen,xen-bootargs = "console=dtuart dtuart=/pl011@9000000 dom0_mem=1G dom0_max_vcpus=1 bootscrub=0";
+		xen,dom0-bootargs = "console=tty0 console=hvc0 earlyprintk clk_ignore_unused root=/dev/ram0 rdinit=/bin/sh init=/bin/sh";
+		dom0 {
+			compatible = "xen,linux-zimage", "xen,multiboot-module";
+			reg = <0x0 0x1000000 0x0 $kernel>;
+		};
+        dom0-ramdisk {
+			compatible = "xen,linux-initrd", "xen,multiboot-module";
+			reg = <0x0 0x3200000 0x0 $initrd>;
+		};
+	};
+};
+EOF
+dtc -I dts -O dtb virt.dts > virt.dtb
+
+rm -f smoke.serial
+set +e
+timeout -k 1 240 \
+./qemu-system-arm \
+   -machine virt-6.0 \
+   -machine virtualization=true \
+   -smp 4 \
+   -m 2048 \
+   -serial stdio \
+   -monitor none \
+   -display none \
+   -dtb virt.dtb \
+   -no-reboot \
+   -kernel ./xen \
+   -device loader,file=./vmlinuz,addr=0x1000000 \
+   -device loader,file=./initrd.gz,addr=0x3200000 |& tee smoke.serial
+
+set -e
+(grep -q "^BusyBox" smoke.serial) || exit 1
+exit 0
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 01:16:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 01:16:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155868.287670 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3TVK-0006QI-6g; Wed, 14 Jul 2021 01:16:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155868.287670; Wed, 14 Jul 2021 01:16:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3TVK-0006QB-3b; Wed, 14 Jul 2021 01:16:02 +0000
Received: by outflank-mailman (input) for mailman id 155868;
 Wed, 14 Jul 2021 01:16:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3TVI-0006Q5-SU
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 01:16:00 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0b787121-e441-11eb-87c8-12813bfff9fa;
 Wed, 14 Jul 2021 01:15:59 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 9149361370;
 Wed, 14 Jul 2021 01:15:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0b787121-e441-11eb-87c8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626225359;
	bh=aUjeoun5m9ngK6wvUZWenH7niUowpGF+oPTUdVLL4Dk=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=pr5oQCndxOY2Bp4gkvICV8YJQ7xd8nUZyY+pJ+F+2P+mtKQZwiV93xQJwn/yebD/e
	 dASy80nnf8bsbBSEQT98uCVpAsK8vQZ9mfkXFLSMuBaop10j8CUxVQQyrgiGy5xW25
	 /FehCKoMHS4EOI8Gmp6erxiCCDAZOaZY2fKdA3XfqeJ5V596+4xTsg5VLft8SrTiT8
	 osfpolR3d7bQ6GgNp1K3C+s3awYwCxpFYap4uLksT04bi5MEV0BceCWhIANp0YdB/n
	 fF61kWLTVX5E4VsK9mTjQv1rIjfb+auSxmybcO/wKWSbxW+DhOXtWR9Fll1egQN2Qc
	 Nj70iqDSG+b3Q==
Date: Tue, 13 Jul 2021 18:15:56 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Michal Orzel <michal.orzel@arm.com>
cc: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org, 
    Julien Grall <julien.grall@arm.com>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH v5 3/4] xen: arm: Remove mfn_to_gfn() macro
In-Reply-To: <2e955bd5-efe7-f154-c220-77989b921ca8@arm.com>
Message-ID: <alpine.DEB.2.21.2107131815350.23286@sstabellini-ThinkPad-T480s>
References: <20210703171152.15874-1-julien@xen.org> <20210703171152.15874-4-julien@xen.org> <2e955bd5-efe7-f154-c220-77989b921ca8@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Tue, 6 Jul 2021, Michal Orzel wrote:
> On 03.07.2021 19:11, Julien Grall wrote:
> > From: Julien Grall <julien.grall@arm.com>
> > 
> > The current implementation of mfn_to_gfn() is completely bogus and
> > there are no plan to implement an M2P on Arm. As there are no more
> > users, drop the helper.
> > 
> s/plan/plans/
> > At the same time rework a comment in Arm code that does not make sense.
> > 
> > Signed-off-by: Julien Grall <julien.grall@arm.com>
> Reviewed-by: Michal Orzel <michal.orzel@arm.com>

Acked-by: Stefano Stabellini <sstabellini@kernel.org>


> > ---
> >     Changes in v5:
> >         - Rebase to the latest Xen
> >         - The patch is now arm only because mfn_to_gmfn() has
> >         been dropped on x86 and the arm helper was renamed to
> >         mfn_to_gfn().
> > 
> >     Changes in v4:
> >         - Remove acks as the patch is old
> > 
> >     Changes in v2:
> >         - Add Jan's and Stefano's acked-by
> > ---
> >  xen/include/asm-arm/mm.h | 3 +--
> >  1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
> > index ded74d29da0c..07c24654a0b6 100644
> > --- a/xen/include/asm-arm/mm.h
> > +++ b/xen/include/asm-arm/mm.h
> > @@ -326,9 +326,8 @@ struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va,
> >  #define SHARED_M2P_ENTRY         (~0UL - 1UL)
> >  #define SHARED_M2P(_e)           ((_e) == SHARED_M2P_ENTRY)
> >  
> > -/* Xen always owns P2M on ARM */
> > +/* We don't have a M2P on Arm */
> >  #define set_gpfn_from_mfn(mfn, pfn) do { (void) (mfn), (void)(pfn); } while (0)
> > -#define mfn_to_gfn(d, mfn) ((void)(d), _gfn(mfn_x(mfn)))
> >  
> >  /* Arch-specific portion of memory_op hypercall. */
> >  long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
> > 
> 


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 01:18:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 01:18:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155873.287682 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3TY7-00073q-Kd; Wed, 14 Jul 2021 01:18:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155873.287682; Wed, 14 Jul 2021 01:18:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3TY7-00073j-Hh; Wed, 14 Jul 2021 01:18:55 +0000
Received: by outflank-mailman (input) for mailman id 155873;
 Wed, 14 Jul 2021 01:18:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3TY6-00073d-P3
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 01:18:54 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 740a1f40-e441-11eb-87c8-12813bfff9fa;
 Wed, 14 Jul 2021 01:18:54 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id E0E0661370;
 Wed, 14 Jul 2021 01:18:52 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 740a1f40-e441-11eb-87c8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626225533;
	bh=7wa2DuMHWoRvaO8YJmb9x6UGOjBbwzMweWdXxg7gtwk=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=HUWKEhybGVulmC9QVJ/pv2QJlnLXkHIli5DBkhRmDMmoZkaZMCUMbVwuLbvpjciAb
	 1GyGlkwbLASEB781C5R28WsH8jrzJ0uhA6gHNuc8uifMCT7tLLGEIiFShHRHF72/Gn
	 9e2PpmOclGAijdFiBwDVhLhU2nUBiTYRpVleqOfIs/BOvwrdpfoOxfls9mS3bocTPW
	 tb7R1CWZ92REPtCkdYKwfUOGBNgcu7B7A8pJc/uCnCwD7pUhd2s1C0rXf4WWMMRakb
	 bkBZQcEusuGHaWcnKmFtyOqjWM5e0BUhgdm3W71wA6H6i+wBz6GpAhsXsxLyujQFl9
	 zWtCF6+Gz6DwQ==
Date: Tue, 13 Jul 2021 18:18:52 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Jan Beulich <jbeulich@suse.com>
cc: Julien Grall <julien@xen.org>, Julien Grall <julien.grall@arm.com>, 
    Andrew Cooper <andrew.cooper3@citrix.com>, 
    =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
    Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>, 
    Ian Jackson <iwj@xenproject.org>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, 
    xen-devel@lists.xenproject.org
Subject: Re: [PATCH v5 4/4] xen/mm: Provide dummy M2P-related helpers when
 the M2P is not supported
In-Reply-To: <3ee1496f-aa3d-8784-3d8c-f152958dbfbc@suse.com>
Message-ID: <alpine.DEB.2.21.2107131818430.23286@sstabellini-ThinkPad-T480s>
References: <20210703171152.15874-1-julien@xen.org> <20210703171152.15874-5-julien@xen.org> <3ee1496f-aa3d-8784-3d8c-f152958dbfbc@suse.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Mon, 5 Jul 2021, Jan Beulich wrote:
> On 03.07.2021 19:11, Julien Grall wrote:
> > From: Julien Grall <julien.grall@arm.com>
> > 
> > At the moment, Arm is providing a dummy implementation for the M2P
> > helpers used in common code. However, they are quite isolated and could
> > be used by other architecture in the future. So move the helpers
> > necessary for compilation in xen/mm.h and gate them with a new config
> > !HAS_M2P. The other M2P related helpers are removed.
> > 
> > Take the opportunity to encode that CONFIG_MEM_SHARING requires
> > the M2P. It is done in the header rather than the Kconfig because
> > the option is not defined in the common Kconfig.
> > 
> > Signed-off-by: Julien Grall <julien.grall@arm.com>
> 
> With the other Kconfig hunk moved here (from the earlier patch)
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Stefano Stabellini <sstabellini@kernel.org>


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 01:24:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 01:24:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155881.287693 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Td2-0008Ra-7m; Wed, 14 Jul 2021 01:24:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155881.287693; Wed, 14 Jul 2021 01:24:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Td2-0008RT-4X; Wed, 14 Jul 2021 01:24:00 +0000
Received: by outflank-mailman (input) for mailman id 155881;
 Wed, 14 Jul 2021 01:23:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3Td1-0008RN-5c
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 01:23:59 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2958372e-e442-11eb-87c8-12813bfff9fa;
 Wed, 14 Jul 2021 01:23:58 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0403361370;
 Wed, 14 Jul 2021 01:23:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2958372e-e442-11eb-87c8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626225837;
	bh=2OW+dl69IwJaUv/Dmdi8sG6wLihedmiyxIbS3TwfP04=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=Q3qZdS2d4flDx1JSLjNZe47joSZ8PBHHE2iEbusngkyxL8Gkm33IKFBE22c9vYib5
	 7JX4HwyUm4Ilyc/irup/kJuTMxx8RnYTSL1uDRk73cJYniNN5+7UvwQEIj7o2pEtvq
	 6MXThixra3HZZ5Xv8tNwihJvoLA7pXLspeRn2Ww6VGGOvVQV5vstLzOUhEZ0TjIIJC
	 XcJigFfxuMArpu1dlgu3ExFnVqoikjLLw61cTnFgCRo4Rju2HX84URuDHviWRNZG9T
	 geGiIPCQs3uWcxJgJGoqlGrRjLqtPNsKvwLiXWyyGvWdHvZOOYcU6sVRM/PifcBpZl
	 AvG51cEPzwg5g==
Date: Tue, 13 Jul 2021 18:23:56 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Roman Skakun <rm.skakun@gmail.com>
cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, 
    Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
    Juergen Gross <jgross@suse.com>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, iommu@lists.linux-foundation.org, 
    linux-kernel@vger.kernel.org, 
    Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
    Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
    Volodymyr Babchuk <volodymyr_babchuk@epam.com>, 
    Roman Skakun <roman_skakun@epam.com>, 
    Andrii Anisov <andrii_anisov@epam.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc
 addresses
In-Reply-To: <20210622133414.132754-1-rm.skakun@gmail.com>
Message-ID: <alpine.DEB.2.21.2107131822040.23286@sstabellini-ThinkPad-T480s>
References: <20210616154436.GA7619@lst.de> <20210622133414.132754-1-rm.skakun@gmail.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Tue, 22 Jun 2021, Roman Skakun wrote:
> This commit is dedicated to fix incorrect conversion from
> cpu_addr to page address in cases when we get virtual
> address which allocated in the vmalloc range.
> As the result, virt_to_page() cannot convert this address
> properly and return incorrect page address.
> 
> Need to detect such cases and obtains the page address using
> vmalloc_to_page() instead.
> 
> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> ---
> Hey!
> Thanks for suggestions, Christoph!
> I updated the patch according to your advice.
> But, I'm so surprised because nobody catches this problem
> in the common code before. It looks a bit strange as for me. 
> 
> 
>  kernel/dma/ops_helpers.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> index 910ae69cae77..782728d8a393 100644
> --- a/kernel/dma/ops_helpers.c
> +++ b/kernel/dma/ops_helpers.c
> @@ -5,6 +5,14 @@
>   */
>  #include <linux/dma-map-ops.h>
>  
> +static struct page *cpu_addr_to_page(void *cpu_addr)
> +{
> +	if (is_vmalloc_addr(cpu_addr))
> +		return vmalloc_to_page(cpu_addr);
> +	else
> +		return virt_to_page(cpu_addr);
> +}

We have the same thing in xen_swiotlb_free_coherent. Can we find a way
to call cpu_addr_to_page() from xen_swiotlb_free_coherent? Maybe we can
make cpu_addr_to_page non-static? No problem if it is too much trouble.


>  /*
>   * Create scatter-list for the already allocated DMA buffer.
>   */
> @@ -12,7 +20,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
>  		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
>  		 unsigned long attrs)
>  {
> -	struct page *page = virt_to_page(cpu_addr);
> +	struct page *page = cpu_addr_to_page(cpu_addr);
>  	int ret;
>  
>  	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
> @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
>  		return -ENXIO;
>  
>  	return remap_pfn_range(vma, vma->vm_start,
> -			page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff,
> +			page_to_pfn(cpu_addr_to_page(cpu_addr)) + vma->vm_pgoff,
>  			user_count << PAGE_SHIFT, vma->vm_page_prot);
>  #else
>  	return -ENXIO;
> -- 
> 2.25.1
> 


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 04:09:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 04:09:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155759.287722 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3WCx-00017P-Os; Wed, 14 Jul 2021 04:09:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155759.287722; Wed, 14 Jul 2021 04:09:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3WCx-00016l-JL; Wed, 14 Jul 2021 04:09:15 +0000
Received: by outflank-mailman (input) for mailman id 155759;
 Tue, 13 Jul 2021 19:37:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/VJd=MF=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m3ODN-0007uq-A6
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 19:37:09 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 65236395-2990-44d5-8e72-cb2293ab099b;
 Tue, 13 Jul 2021 19:37:04 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3OBr-0001Hd-S2; Tue, 13 Jul 2021 21:35:35 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3OBk-0006px-Ji; Tue, 13 Jul 2021 21:35:28 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3OBj-0002f5-Cb; Tue, 13 Jul 2021 21:35:27 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 65236395-2990-44d5-8e72-cb2293ab099b
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hannes Reinecke <hare@suse.de>,
	Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>,
	Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Jaroslav Kysela <perex@perex.cz>,
	Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>,
	Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>,
	Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>,
	Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>,
	Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org,
	dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net,
	kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org,
	linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org,
	linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org,
	linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev,
	linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	netdev@vger.kernel.org,
	nvdimm@lists.linux.dev,
	platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org,
	target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org,
	Johannes Thumshirn <jth@kernel.org>,
	"Rafael J . Wysocki" <rafael@kernel.org>
Subject: [PATCH v4 5/5] bus: Make remove callback return void
Date: Tue, 13 Jul 2021 21:35:22 +0200
Message-Id: <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
In-Reply-To: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
References: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-Patch-Hashes: v=1; h=sha256; i=nwraWdwDJwSCf/PVA+pCJjcxHppjqX/HTinL8xamX9o=; m=ziH5qs3H2jnGskCKzejNXaENxMH8EgSJcO+tV5Q1Ac8=; p=kdJYwoRZCRKNyxlGyoapK+yxaytciBs/cGQdjGSOeUI=; g=4381be49bc13f37b6c5b14275d44d3be31edf21e
X-Patch-Sig: m=pgp; i=uwe@kleine-koenig.org; s=0x0D2511F322BFAB1C1580266BE2DCDD9132669BD6; b=iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmDt6t4ACgkQwfwUeK3K7AlsHwgAijO oHwzFuAFEEZKrqPJFx8mx9ZjwAivcLC87p92gRFS6qR4iUcqbTBxv77UQghsR8xgrgXWbErtQe8ki RD4F9YDFakvuiajjbLM3hSQD6jZHoo5jiTOxuviHGsyDJBin3g8t1Ke0IoNSQ2l69ETHFoej1UUvN YnW4ia052+/c4HVtM+SgusOto8tNftDZMMWtj4O8phZexuiKsNdsaOhZoNJ2BFlg7gCB+vcLu3lCe D3WUn2R+5OHtVtZU3UDeCWct1PbCCxYvKZ11BYcUrwMVxVo1QtkcOuLfsWALZfV4p++x1IU3tA2Ho lQ8bYZWIdckKOfWg9oSien2r3XkeChQ==
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

The driver core ignores the return value of this callback because there
is only little it can do when a device disappears.

This is the final bit of a long lasting cleanup quest where several
buses were converted to also return void from their remove callback.
Additionally some resource leaks were fixed that were caused by drivers
returning an error code in the expectation that the driver won't go
away.

With struct bus_type::remove returning void it's prevented that newly
implemented buses return an ignored error code and so don't anticipate
wrong expectations for driver authors.

Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Amba and related parts)
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Chen-Yu Tsai <wens@csie.org> (for sunxi-rsb)
Acked-by: Pali Rohár <pali@kernel.org>
Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for media)
Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Acked-By: Vinod Koul <vkoul@kernel.org>
Acked-by: Juergen Gross <jgross@suse.com> (For xen)
Acked-by: Lee Jones <lee.jones@linaro.org> (For mfd)
Acked-by: Johannes Thumshirn <jth@kernel.org> (For mcb)
Acked-by: Johan Hovold <johan@kernel.org>
Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For slimbus)
Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For vfio)
Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and typec)
Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> (For ipack)
Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com> (For thunderbolt)
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> (For intel_th)
Acked-by: Dominik Brodowski <linux@dominikbrodowski.net> (For pcmcia)
Reviewed-by: Cornelia Huck <cohuck@redhat.com> (For drivers/s390 and drivers/vfio)
Acked-by: Rafael J. Wysocki <rafael@kernel.org> (For ACPI)
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org> (rpmsg and apr)
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> (For intel-ish-hid)
Acked-by: Dan Williams <dan.j.williams@intel.com> (For CXL, DAX, and NVDIMM)
Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com> (For isa)
Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (For firewire)
Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> (For hid)
Acked-by: Thorsten Scherer <t.scherer@eckelmann.de> (For siox)
Acked-by: Sven Van Asbroeck <TheSven73@gmail.com> (For anybuss)
Acked-by: Ulf Hansson <ulf.hansson@linaro.org> (For MMC)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 arch/sparc/kernel/vio.c                   | 4 +---
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nubus/bus.c                       | 6 ++----
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 4 +---
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 7 ++-----
 drivers/s390/cio/ccwgroup.c               | 4 +---
 drivers/s390/cio/css.c                    | 4 +---
 drivers/s390/cio/device.c                 | 4 +---
 drivers/s390/cio/scm.c                    | 4 +---
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/sh/superhyway/superhyway.c        | 8 ++------
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vlynq/vlynq.c                     | 4 +---
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 drivers/zorro/zorro-driver.c              | 3 +--
 include/linux/device/bus.h                | 2 +-
 sound/ac97/bus.c                          | 6 ++----
 sound/aoa/soundbus/core.c                 | 4 +---
 86 files changed, 93 insertions(+), 243 deletions(-)

diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index e45f4e4e06b6..24d21ba63030 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -834,14 +834,13 @@ static int locomo_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int locomo_bus_remove(struct device *dev)
+static void locomo_bus_remove(struct device *dev)
 {
 	struct locomo_dev *ldev = LOCOMO_DEV(dev);
 	struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(ldev);
-	return 0;
 }
 
 struct bus_type locomo_bus_type = {
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index ff5e0d04cb89..092a2ebc0c28 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -1364,15 +1364,13 @@ static int sa1111_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sa1111_bus_remove(struct device *dev)
+static void sa1111_bus_remove(struct device *dev)
 {
 	struct sa1111_dev *sadev = to_sa1111_device(dev);
 	struct sa1111_driver *drv = SA1111_DRV(dev->driver);
 
 	if (drv->remove)
 		drv->remove(sadev);
-
-	return 0;
 }
 
 struct bus_type sa1111_bus_type = {
diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
index 827b50f1c73e..53813f9464a2 100644
--- a/arch/arm/mach-rpc/ecard.c
+++ b/arch/arm/mach-rpc/ecard.c
@@ -1052,7 +1052,7 @@ static int ecard_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int ecard_drv_remove(struct device *dev)
+static void ecard_drv_remove(struct device *dev)
 {
 	struct expansion_card *ec = ECARD_DEV(dev);
 	struct ecard_driver *drv = ECARD_DRV(dev->driver);
@@ -1067,8 +1067,6 @@ static int ecard_drv_remove(struct device *dev)
 	ec->ops = &ecard_default_ops;
 	barrier();
 	ec->irq_data = NULL;
-
-	return 0;
 }
 
 /*
diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.c
index de0768a49ee8..dfc52f661ad0 100644
--- a/arch/mips/sgi-ip22/ip22-gio.c
+++ b/arch/mips/sgi-ip22/ip22-gio.c
@@ -143,14 +143,13 @@ static int gio_device_probe(struct device *dev)
 	return error;
 }
 
-static int gio_device_remove(struct device *dev)
+static void gio_device_remove(struct device *dev)
 {
 	struct gio_device *gio_dev = to_gio_device(dev);
 	struct gio_driver *drv = to_gio_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(gio_dev);
-	return 0;
 }
 
 static void gio_device_shutdown(struct device *dev)
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
index 80fa0650736b..776d624a7207 100644
--- a/arch/parisc/kernel/drivers.c
+++ b/arch/parisc/kernel/drivers.c
@@ -133,14 +133,13 @@ static int parisc_driver_probe(struct device *dev)
 	return rc;
 }
 
-static int __exit parisc_driver_remove(struct device *dev)
+static void __exit parisc_driver_remove(struct device *dev)
 {
 	struct parisc_device *pa_dev = to_parisc_device(dev);
 	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
+
 	if (pa_drv->remove)
 		pa_drv->remove(pa_dev);
-
-	return 0;
 }
 	
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..cc5774c64fae 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -381,7 +381,7 @@ static int ps3_system_bus_probe(struct device *_dev)
 	return result;
 }
 
-static int ps3_system_bus_remove(struct device *_dev)
+static void ps3_system_bus_remove(struct device *_dev)
 {
 	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
 	struct ps3_system_bus_driver *drv;
@@ -399,7 +399,6 @@ static int ps3_system_bus_remove(struct device *_dev)
 			__func__, __LINE__, drv->core.name);
 
 	pr_debug(" <- %s:%d: %s\n", __func__, __LINE__, dev_name(&dev->core));
-	return 0;
 }
 
 static void ps3_system_bus_shutdown(struct device *_dev)
diff --git a/arch/powerpc/platforms/pseries/ibmebus.c b/arch/powerpc/platforms/pseries/ibmebus.c
index c6c79ef55e13..7ee3ed7d6cc2 100644
--- a/arch/powerpc/platforms/pseries/ibmebus.c
+++ b/arch/powerpc/platforms/pseries/ibmebus.c
@@ -366,14 +366,13 @@ static int ibmebus_bus_device_probe(struct device *dev)
 	return error;
 }
 
-static int ibmebus_bus_device_remove(struct device *dev)
+static void ibmebus_bus_device_remove(struct device *dev)
 {
 	struct platform_device *of_dev = to_platform_device(dev);
 	struct platform_driver *drv = to_platform_driver(dev->driver);
 
 	if (dev->driver && drv->remove)
 		drv->remove(of_dev);
-	return 0;
 }
 
 static void ibmebus_bus_device_shutdown(struct device *dev)
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..58283cecbd52 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -1257,7 +1257,7 @@ static int vio_bus_probe(struct device *dev)
 }
 
 /* convert from struct device to struct vio_dev and pass to driver. */
-static int vio_bus_remove(struct device *dev)
+static void vio_bus_remove(struct device *dev)
 {
 	struct vio_dev *viodev = to_vio_dev(dev);
 	struct vio_driver *viodrv = to_vio_driver(dev->driver);
@@ -1276,7 +1276,6 @@ static int vio_bus_remove(struct device *dev)
 		vio_cmo_bus_remove(viodev);
 
 	put_device(devptr);
-	return 0;
 }
 
 static void vio_bus_shutdown(struct device *dev)
diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c
index 348a88691219..01122a208f94 100644
--- a/arch/sparc/kernel/vio.c
+++ b/arch/sparc/kernel/vio.c
@@ -93,7 +93,7 @@ static int vio_device_probe(struct device *dev)
 	return drv->probe(vdev, id);
 }
 
-static int vio_device_remove(struct device *dev)
+static void vio_device_remove(struct device *dev)
 {
 	struct vio_dev *vdev = to_vio_dev(dev);
 	struct vio_driver *drv = to_vio_driver(dev->driver);
@@ -107,8 +107,6 @@ static int vio_device_remove(struct device *dev)
 
 		drv->remove(vdev);
 	}
-
-	return 0;
 }
 
 static ssize_t devspec_show(struct device *dev,
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index f854bcb8d010..b941555cb5e4 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -1019,7 +1019,7 @@ static int acpi_device_probe(struct device *dev)
 	return 0;
 }
 
-static int acpi_device_remove(struct device *dev)
+static void acpi_device_remove(struct device *dev)
 {
 	struct acpi_device *acpi_dev = to_acpi_device(dev);
 	struct acpi_driver *acpi_drv = acpi_dev->driver;
@@ -1034,7 +1034,6 @@ static int acpi_device_remove(struct device *dev)
 	acpi_dev->driver_data = NULL;
 
 	put_device(dev);
-	return 0;
 }
 
 struct bus_type acpi_bus_type = {
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 939ca220bf78..962041148482 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -219,7 +219,7 @@ static int amba_probe(struct device *dev)
 	return ret;
 }
 
-static int amba_remove(struct device *dev)
+static void amba_remove(struct device *dev)
 {
 	struct amba_device *pcdev = to_amba_device(dev);
 	struct amba_driver *drv = to_amba_driver(dev->driver);
@@ -236,8 +236,6 @@ static int amba_remove(struct device *dev)
 
 	amba_put_disable_pclk(pcdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void amba_shutdown(struct device *dev)
diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
index adc199dfba3c..0c86f5bed9f4 100644
--- a/drivers/base/auxiliary.c
+++ b/drivers/base/auxiliary.c
@@ -79,7 +79,7 @@ static int auxiliary_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int auxiliary_bus_remove(struct device *dev)
+static void auxiliary_bus_remove(struct device *dev)
 {
 	struct auxiliary_driver *auxdrv = to_auxiliary_drv(dev->driver);
 	struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
@@ -87,8 +87,6 @@ static int auxiliary_bus_remove(struct device *dev)
 	if (auxdrv->remove)
 		auxdrv->remove(auxdev);
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void auxiliary_bus_shutdown(struct device *dev)
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
index aa4737667026..55e3ee2da98f 100644
--- a/drivers/base/isa.c
+++ b/drivers/base/isa.c
@@ -46,14 +46,12 @@ static int isa_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int isa_bus_remove(struct device *dev)
+static void isa_bus_remove(struct device *dev)
 {
 	struct isa_driver *isa_driver = dev->platform_data;
 
 	if (isa_driver && isa_driver->remove)
 		isa_driver->remove(dev, to_isa_dev(dev)->id);
-
-	return 0;
 }
 
 static void isa_bus_shutdown(struct device *dev)
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 8640578f45e9..a94b7f454881 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -1438,7 +1438,7 @@ static int platform_probe(struct device *_dev)
 	return ret;
 }
 
-static int platform_remove(struct device *_dev)
+static void platform_remove(struct device *_dev)
 {
 	struct platform_driver *drv = to_platform_driver(_dev->driver);
 	struct platform_device *dev = to_platform_device(_dev);
@@ -1450,8 +1450,6 @@ static int platform_remove(struct device *_dev)
 			dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n");
 	}
 	dev_pm_domain_detach(_dev, true);
-
-	return 0;
 }
 
 static void platform_shutdown(struct device *_dev)
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 6535614a7dc1..e076630d17bd 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -27,7 +27,7 @@ static DEFINE_MUTEX(bcma_buses_mutex);
 
 static int bcma_bus_match(struct device *dev, struct device_driver *drv);
 static int bcma_device_probe(struct device *dev);
-static int bcma_device_remove(struct device *dev);
+static void bcma_device_remove(struct device *dev);
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env);
 
 static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf)
@@ -614,7 +614,7 @@ static int bcma_device_probe(struct device *dev)
 	return err;
 }
 
-static int bcma_device_remove(struct device *dev)
+static void bcma_device_remove(struct device *dev)
 {
 	struct bcma_device *core = container_of(dev, struct bcma_device, dev);
 	struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
@@ -623,8 +623,6 @@ static int bcma_device_remove(struct device *dev)
 	if (adrv->remove)
 		adrv->remove(core);
 	put_device(dev);
-
-	return 0;
 }
 
 static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
index d46db132d085..6f225dddc74f 100644
--- a/drivers/bus/sunxi-rsb.c
+++ b/drivers/bus/sunxi-rsb.c
@@ -169,13 +169,11 @@ static int sunxi_rsb_device_probe(struct device *dev)
 	return drv->probe(rdev);
 }
 
-static int sunxi_rsb_device_remove(struct device *dev)
+static void sunxi_rsb_device_remove(struct device *dev)
 {
 	const struct sunxi_rsb_driver *drv = to_sunxi_rsb_driver(dev->driver);
 
 	drv->remove(to_sunxi_rsb_device(dev));
-
-	return 0;
 }
 
 static struct bus_type sunxi_rsb_bus = {
diff --git a/drivers/cxl/core.c b/drivers/cxl/core.c
index a2e4d54fc7bc..2b90b7c3b9d7 100644
--- a/drivers/cxl/core.c
+++ b/drivers/cxl/core.c
@@ -1034,13 +1034,12 @@ static int cxl_bus_probe(struct device *dev)
 	return to_cxl_drv(dev->driver)->probe(dev);
 }
 
-static int cxl_bus_remove(struct device *dev)
+static void cxl_bus_remove(struct device *dev)
 {
 	struct cxl_driver *cxl_drv = to_cxl_drv(dev->driver);
 
 	if (cxl_drv->remove)
 		cxl_drv->remove(dev);
-	return 0;
 }
 
 struct bus_type cxl_bus_type = {
diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index 5aee26e1bbd6..6cc4da4c713d 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -172,15 +172,13 @@ static int dax_bus_probe(struct device *dev)
 	return 0;
 }
 
-static int dax_bus_remove(struct device *dev)
+static void dax_bus_remove(struct device *dev)
 {
 	struct dax_device_driver *dax_drv = to_dax_drv(dev->driver);
 	struct dev_dax *dev_dax = to_dev_dax(dev);
 
 	if (dax_drv->remove)
 		dax_drv->remove(dev_dax);
-
-	return 0;
 }
 
 static struct bus_type dax_bus_type = {
diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
index 0460d58e3941..5a017c62c752 100644
--- a/drivers/dma/idxd/sysfs.c
+++ b/drivers/dma/idxd/sysfs.c
@@ -260,7 +260,7 @@ static void disable_wq(struct idxd_wq *wq)
 	dev_info(dev, "wq %s disabled\n", dev_name(&wq->conf_dev));
 }
 
-static int idxd_config_bus_remove(struct device *dev)
+static void idxd_config_bus_remove(struct device *dev)
 {
 	int rc;
 
@@ -305,8 +305,6 @@ static int idxd_config_bus_remove(struct device *dev)
 			dev_info(dev, "Device %s disabled\n", dev_name(dev));
 
 	}
-
-	return 0;
 }
 
 static void idxd_config_bus_shutdown(struct device *dev)
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index 68216988391f..90ed8fdaba75 100644
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -187,14 +187,12 @@ static int fw_unit_probe(struct device *dev)
 	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
 }
 
-static int fw_unit_remove(struct device *dev)
+static void fw_unit_remove(struct device *dev)
 {
 	struct fw_driver *driver =
 			container_of(dev->driver, struct fw_driver, driver);
 
 	driver->remove(fw_unit(dev));
-
-	return 0;
 }
 
 static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
index 784cf0027da3..2682c3df651c 100644
--- a/drivers/firmware/arm_scmi/bus.c
+++ b/drivers/firmware/arm_scmi/bus.c
@@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
 	return scmi_drv->probe(scmi_dev);
 }
 
-static int scmi_dev_remove(struct device *dev)
+static void scmi_dev_remove(struct device *dev)
 {
 	struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
 	struct scmi_device *scmi_dev = to_scmi_dev(dev);
 
 	if (scmi_drv->remove)
 		scmi_drv->remove(scmi_dev);
-
-	return 0;
 }
 
 static struct bus_type scmi_bus_type = {
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
index dc83ea118c67..c52bcaa9def6 100644
--- a/drivers/firmware/google/coreboot_table.c
+++ b/drivers/firmware/google/coreboot_table.c
@@ -44,15 +44,13 @@ static int coreboot_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int coreboot_bus_remove(struct device *dev)
+static void coreboot_bus_remove(struct device *dev)
 {
 	struct coreboot_device *device = CB_DEV(dev);
 	struct coreboot_driver *driver = CB_DRV(dev->driver);
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 static struct bus_type coreboot_bus_type = {
diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
index 511b20ff35a3..1ae6779a0dd6 100644
--- a/drivers/fpga/dfl.c
+++ b/drivers/fpga/dfl.c
@@ -284,15 +284,13 @@ static int dfl_bus_probe(struct device *dev)
 	return ddrv->probe(ddev);
 }
 
-static int dfl_bus_remove(struct device *dev)
+static void dfl_bus_remove(struct device *dev)
 {
 	struct dfl_driver *ddrv = to_dfl_drv(dev->driver);
 	struct dfl_device *ddev = to_dfl_dev(dev);
 
 	if (ddrv->remove)
 		ddrv->remove(ddev);
-
-	return 0;
 }
 
 static int dfl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 7db332139f7d..dbed2524fd47 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2302,7 +2302,7 @@ static int hid_device_probe(struct device *dev)
 	return ret;
 }
 
-static int hid_device_remove(struct device *dev)
+static void hid_device_remove(struct device *dev)
 {
 	struct hid_device *hdev = to_hid_device(dev);
 	struct hid_driver *hdrv;
@@ -2322,8 +2322,6 @@ static int hid_device_remove(struct device *dev)
 
 	if (!hdev->io_started)
 		up(&hdev->driver_input_lock);
-
-	return 0;
 }
 
 static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
index f0802b047ed8..8a51bd9cd093 100644
--- a/drivers/hid/intel-ish-hid/ishtp/bus.c
+++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
@@ -255,7 +255,7 @@ static int ishtp_cl_bus_match(struct device *dev, struct device_driver *drv)
  *
  * Return: Return value from driver remove() call.
  */
-static int ishtp_cl_device_remove(struct device *dev)
+static void ishtp_cl_device_remove(struct device *dev)
 {
 	struct ishtp_cl_device *device = to_ishtp_cl_device(dev);
 	struct ishtp_cl_driver *driver = to_ishtp_cl_driver(dev->driver);
@@ -267,8 +267,6 @@ static int ishtp_cl_device_remove(struct device *dev)
 
 	if (driver->remove)
 		driver->remove(device);
-
-	return 0;
 }
 
 /**
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 57bbbaa4e8f7..392c1ac4f819 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -922,7 +922,7 @@ static int vmbus_probe(struct device *child_device)
 /*
  * vmbus_remove - Remove a vmbus device
  */
-static int vmbus_remove(struct device *child_device)
+static void vmbus_remove(struct device *child_device)
 {
 	struct hv_driver *drv;
 	struct hv_device *dev = device_to_hv_device(child_device);
@@ -932,11 +932,8 @@ static int vmbus_remove(struct device *child_device)
 		if (drv->remove)
 			drv->remove(dev);
 	}
-
-	return 0;
 }
 
-
 /*
  * vmbus_shutdown - Shutdown a vmbus device
  */
diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
index 66eed2dff818..7e753a75d23b 100644
--- a/drivers/hwtracing/intel_th/core.c
+++ b/drivers/hwtracing/intel_th/core.c
@@ -95,7 +95,7 @@ static int intel_th_probe(struct device *dev)
 
 static void intel_th_device_remove(struct intel_th_device *thdev);
 
-static int intel_th_remove(struct device *dev)
+static void intel_th_remove(struct device *dev)
 {
 	struct intel_th_driver *thdrv = to_intel_th_driver(dev->driver);
 	struct intel_th_device *thdev = to_intel_th_device(dev);
@@ -164,8 +164,6 @@ static int intel_th_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_active(dev);
 	pm_runtime_enable(dev);
-
-	return 0;
 }
 
 static struct bus_type intel_th_bus = {
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 84f12bf90644..54964fbe3f03 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -601,7 +601,7 @@ static int i2c_device_probe(struct device *dev)
 	return status;
 }
 
-static int i2c_device_remove(struct device *dev)
+static void i2c_device_remove(struct device *dev)
 {
 	struct i2c_client	*client = to_i2c_client(dev);
 	struct i2c_adapter      *adap;
@@ -631,9 +631,6 @@ static int i2c_device_remove(struct device *dev)
 	client->irq = 0;
 	if (client->flags & I2C_CLIENT_HOST_NOTIFY)
 		pm_runtime_put(&client->adapter->dev);
-
-	/* return always 0 because there is WIP to make remove-functions void */
-	return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index e2e12a5585e5..c3b4c677b442 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -322,7 +322,7 @@ static int i3c_device_probe(struct device *dev)
 	return driver->probe(i3cdev);
 }
 
-static int i3c_device_remove(struct device *dev)
+static void i3c_device_remove(struct device *dev)
 {
 	struct i3c_device *i3cdev = dev_to_i3cdev(dev);
 	struct i3c_driver *driver = drv_to_i3cdrv(dev->driver);
@@ -331,8 +331,6 @@ static int i3c_device_remove(struct device *dev)
 		driver->remove(i3cdev);
 
 	i3c_device_free_ibi(i3cdev);
-
-	return 0;
 }
 
 struct bus_type i3c_bus_type = {
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index 61fa7e724172..db58a01b23d3 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -697,13 +697,12 @@ static int gameport_driver_probe(struct device *dev)
 	return gameport->drv ? 0 : -ENODEV;
 }
 
-static int gameport_driver_remove(struct device *dev)
+static void gameport_driver_remove(struct device *dev)
 {
 	struct gameport *gameport = to_gameport_port(dev);
 	struct gameport_driver *drv = to_gameport_driver(dev->driver);
 
 	drv->disconnect(gameport);
-	return 0;
 }
 
 static void gameport_attach_driver(struct gameport_driver *drv)
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 29f491082926..ec117be3d8d8 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -778,12 +778,11 @@ static int serio_driver_probe(struct device *dev)
 	return serio_connect_driver(serio, drv);
 }
 
-static int serio_driver_remove(struct device *dev)
+static void serio_driver_remove(struct device *dev)
 {
 	struct serio *serio = to_serio_port(dev);
 
 	serio_disconnect_driver(serio);
-	return 0;
 }
 
 static void serio_cleanup(struct serio *serio)
diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
index 7de9605cac4f..b1c3198355e7 100644
--- a/drivers/ipack/ipack.c
+++ b/drivers/ipack/ipack.c
@@ -67,15 +67,13 @@ static int ipack_bus_probe(struct device *device)
 	return drv->ops->probe(dev);
 }
 
-static int ipack_bus_remove(struct device *device)
+static void ipack_bus_remove(struct device *device)
 {
 	struct ipack_device *dev = to_ipack_dev(device);
 	struct ipack_driver *drv = to_ipack_driver(device->driver);
 
 	if (drv->ops->remove)
 		drv->ops->remove(dev);
-
-	return 0;
 }
 
 static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c
index 49af60bdac92..c1fdf2896021 100644
--- a/drivers/macintosh/macio_asic.c
+++ b/drivers/macintosh/macio_asic.c
@@ -88,7 +88,7 @@ static int macio_device_probe(struct device *dev)
 	return error;
 }
 
-static int macio_device_remove(struct device *dev)
+static void macio_device_remove(struct device *dev)
 {
 	struct macio_dev * macio_dev = to_macio_device(dev);
 	struct macio_driver * drv = to_macio_driver(dev->driver);
@@ -96,8 +96,6 @@ static int macio_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(macio_dev);
 	macio_dev_put(macio_dev);
-
-	return 0;
 }
 
 static void macio_device_shutdown(struct device *dev)
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index 38fbb3b59873..edf4ee6eff25 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -77,7 +77,7 @@ static int mcb_probe(struct device *dev)
 	return ret;
 }
 
-static int mcb_remove(struct device *dev)
+static void mcb_remove(struct device *dev)
 {
 	struct mcb_driver *mdrv = to_mcb_driver(dev->driver);
 	struct mcb_device *mdev = to_mcb_device(dev);
@@ -89,8 +89,6 @@ static int mcb_remove(struct device *dev)
 	module_put(carrier_mod);
 
 	put_device(&mdev->dev);
-
-	return 0;
 }
 
 static void mcb_shutdown(struct device *dev)
diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
index b730225ca887..a2b18e2bed1b 100644
--- a/drivers/media/pci/bt8xx/bttv-gpio.c
+++ b/drivers/media/pci/bt8xx/bttv-gpio.c
@@ -46,14 +46,13 @@ static int bttv_sub_probe(struct device *dev)
 	return sub->probe ? sub->probe(sdev) : -ENODEV;
 }
 
-static int bttv_sub_remove(struct device *dev)
+static void bttv_sub_remove(struct device *dev)
 {
 	struct bttv_sub_device *sdev = to_bttv_sub_dev(dev);
 	struct bttv_sub_driver *sub = to_bttv_sub_drv(dev->driver);
 
 	if (sub->remove)
 		sub->remove(sdev);
-	return 0;
 }
 
 struct bus_type bttv_sub_bus_type = {
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
index bb1065990aeb..660df7d269fa 100644
--- a/drivers/memstick/core/memstick.c
+++ b/drivers/memstick/core/memstick.c
@@ -91,7 +91,7 @@ static int memstick_device_probe(struct device *dev)
 	return rc;
 }
 
-static int memstick_device_remove(struct device *dev)
+static void memstick_device_remove(struct device *dev)
 {
 	struct memstick_dev *card = container_of(dev, struct memstick_dev,
 						  dev);
@@ -105,7 +105,6 @@ static int memstick_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
index eff9423e90f5..2fa592c37c6f 100644
--- a/drivers/mfd/mcp-core.c
+++ b/drivers/mfd/mcp-core.c
@@ -33,13 +33,12 @@ static int mcp_bus_probe(struct device *dev)
 	return drv->probe(mcp);
 }
 
-static int mcp_bus_remove(struct device *dev)
+static void mcp_bus_remove(struct device *dev)
 {
 	struct mcp *mcp = to_mcp(dev);
 	struct mcp_driver *drv = to_mcp_driver(dev->driver);
 
 	drv->remove(mcp);
-	return 0;
 }
 
 static struct bus_type mcp_bus_type = {
diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
index 935acc6bbf3c..3bf2bb4fd152 100644
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -884,7 +884,7 @@ static int mei_cl_device_probe(struct device *dev)
  *
  * Return:  0 on success; < 0 otherwise
  */
-static int mei_cl_device_remove(struct device *dev)
+static void mei_cl_device_remove(struct device *dev)
 {
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct mei_cl_driver *cldrv = to_mei_cl_driver(dev->driver);
@@ -896,8 +896,6 @@ static int mei_cl_device_remove(struct device *dev)
 
 	mei_cl_bus_module_put(cldev);
 	module_put(THIS_MODULE);
-
-	return 0;
 }
 
 static ssize_t name_show(struct device *dev, struct device_attribute *a,
diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
index 667e574a7df2..52656fc87e99 100644
--- a/drivers/misc/tifm_core.c
+++ b/drivers/misc/tifm_core.c
@@ -87,7 +87,7 @@ static void tifm_dummy_event(struct tifm_dev *sock)
 	return;
 }
 
-static int tifm_device_remove(struct device *dev)
+static void tifm_device_remove(struct device *dev)
 {
 	struct tifm_dev *sock = container_of(dev, struct tifm_dev, dev);
 	struct tifm_driver *drv = container_of(dev->driver, struct tifm_driver,
@@ -101,7 +101,6 @@ static int tifm_device_remove(struct device *dev)
 	}
 
 	put_device(dev);
-	return 0;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index 4383c262b3f5..f6b7a9c5bbff 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -140,14 +140,12 @@ static int mmc_bus_probe(struct device *dev)
 	return drv->probe(card);
 }
 
-static int mmc_bus_remove(struct device *dev)
+static void mmc_bus_remove(struct device *dev)
 {
 	struct mmc_driver *drv = to_mmc_driver(dev->driver);
 	struct mmc_card *card = mmc_dev_to_card(dev);
 
 	drv->remove(card);
-
-	return 0;
 }
 
 static void mmc_bus_shutdown(struct device *dev)
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index 3d709029e07c..fda03b35c14a 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -203,7 +203,7 @@ static int sdio_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int sdio_bus_remove(struct device *dev)
+static void sdio_bus_remove(struct device *dev)
 {
 	struct sdio_driver *drv = to_sdio_driver(dev->driver);
 	struct sdio_func *func = dev_to_sdio_func(dev);
@@ -232,8 +232,6 @@ static int sdio_bus_remove(struct device *dev)
 		pm_runtime_put_sync(dev);
 
 	dev_pm_domain_detach(dev, false);
-
-	return 0;
 }
 
 static const struct dev_pm_ops sdio_bus_pm_ops = {
diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
index ccec29970d5b..14b154929533 100644
--- a/drivers/net/netdevsim/bus.c
+++ b/drivers/net/netdevsim/bus.c
@@ -370,12 +370,11 @@ static int nsim_bus_probe(struct device *dev)
 	return nsim_dev_probe(nsim_bus_dev);
 }
 
-static int nsim_bus_remove(struct device *dev)
+static void nsim_bus_remove(struct device *dev)
 {
 	struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
 
 	nsim_dev_remove(nsim_bus_dev);
-	return 0;
 }
 
 static int nsim_num_vf(struct device *dev)
diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
index f8f75a504a58..27dd93deff6e 100644
--- a/drivers/ntb/core.c
+++ b/drivers/ntb/core.c
@@ -271,7 +271,7 @@ static int ntb_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_remove(struct device *dev)
+static void ntb_remove(struct device *dev)
 {
 	struct ntb_dev *ntb;
 	struct ntb_client *client;
@@ -283,8 +283,6 @@ static int ntb_remove(struct device *dev)
 		client->ops.remove(client, ntb);
 		put_device(dev);
 	}
-
-	return 0;
 }
 
 static void ntb_dev_release(struct device *dev)
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 4a02561cfb96..a9b97ebc71ac 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -304,7 +304,7 @@ static int ntb_transport_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int ntb_transport_bus_remove(struct device *dev)
+static void ntb_transport_bus_remove(struct device *dev)
 {
 	const struct ntb_transport_client *client;
 
@@ -312,8 +312,6 @@ static int ntb_transport_bus_remove(struct device *dev)
 	client->remove(dev);
 
 	put_device(dev);
-
-	return 0;
 }
 
 static struct bus_type ntb_transport_bus = {
diff --git a/drivers/nubus/bus.c b/drivers/nubus/bus.c
index ad3d17c42e23..d9d04f27f89b 100644
--- a/drivers/nubus/bus.c
+++ b/drivers/nubus/bus.c
@@ -29,14 +29,12 @@ static int nubus_device_probe(struct device *dev)
 	return err;
 }
 
-static int nubus_device_remove(struct device *dev)
+static void nubus_device_remove(struct device *dev)
 {
 	struct nubus_driver *ndrv = to_nubus_driver(dev->driver);
-	int err = -ENODEV;
 
 	if (dev->driver && ndrv->remove)
-		err = ndrv->remove(to_nubus_board(dev));
-	return err;
+		ndrv->remove(to_nubus_board(dev));
 }
 
 struct bus_type nubus_bus_type = {
diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
index e6aa87043a95..9dc7f3edd42b 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -108,7 +108,7 @@ static int nvdimm_bus_probe(struct device *dev)
 	return rc;
 }
 
-static int nvdimm_bus_remove(struct device *dev)
+static void nvdimm_bus_remove(struct device *dev)
 {
 	struct nd_device_driver *nd_drv = to_nd_device_driver(dev->driver);
 	struct module *provider = to_bus_provider(dev);
@@ -123,7 +123,6 @@ static int nvdimm_bus_remove(struct device *dev)
 	dev_dbg(&nvdimm_bus->dev, "%s.remove(%s)\n", dev->driver->name,
 			dev_name(dev));
 	module_put(provider);
-	return 0;
 }
 
 static void nvdimm_bus_shutdown(struct device *dev)
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index 4b9ad96bf1b2..502eb79cd551 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -387,7 +387,7 @@ static int pci_epf_device_probe(struct device *dev)
 	return driver->probe(epf);
 }
 
-static int pci_epf_device_remove(struct device *dev)
+static void pci_epf_device_remove(struct device *dev)
 {
 	struct pci_epf *epf = to_pci_epf(dev);
 	struct pci_epf_driver *driver = to_pci_epf_driver(dev->driver);
@@ -395,8 +395,6 @@ static int pci_epf_device_remove(struct device *dev)
 	if (driver->remove)
 		driver->remove(epf);
 	epf->driver = NULL;
-
-	return 0;
 }
 
 static struct bus_type pci_epf_bus_type = {
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3a72352aa5cf..a0615395500a 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -440,7 +440,7 @@ static int pci_device_probe(struct device *dev)
 	return error;
 }
 
-static int pci_device_remove(struct device *dev)
+static void pci_device_remove(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
 	struct pci_driver *drv = pci_dev->driver;
@@ -476,7 +476,6 @@ static int pci_device_remove(struct device *dev)
 	 */
 
 	pci_dev_put(pci_dev);
-	return 0;
 }
 
 static void pci_device_shutdown(struct device *dev)
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index bd81aa64d011..5bd1b80424e7 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -350,7 +350,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
 	return;
 }
 
-static int pcmcia_device_remove(struct device *dev)
+static void pcmcia_device_remove(struct device *dev)
 {
 	struct pcmcia_device *p_dev;
 	struct pcmcia_driver *p_drv;
@@ -389,8 +389,6 @@ static int pcmcia_device_remove(struct device *dev)
 	/* references from pcmcia_device_probe */
 	pcmcia_put_dev(p_dev);
 	module_put(p_drv->owner);
-
-	return 0;
 }
 
 
diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c
index 0169677c243e..0a40dd9c94ed 100644
--- a/drivers/platform/surface/aggregator/bus.c
+++ b/drivers/platform/surface/aggregator/bus.c
@@ -316,14 +316,12 @@ static int ssam_bus_probe(struct device *dev)
 		->probe(to_ssam_device(dev));
 }
 
-static int ssam_bus_remove(struct device *dev)
+static void ssam_bus_remove(struct device *dev)
 {
 	struct ssam_device_driver *sdrv = to_ssam_device_driver(dev->driver);
 
 	if (sdrv->remove)
 		sdrv->remove(to_ssam_device(dev));
-
-	return 0;
 }
 
 struct bus_type ssam_bus_type = {
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 62e0d56a3332..a76313006bdc 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -980,7 +980,7 @@ static int wmi_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int wmi_dev_remove(struct device *dev)
+static void wmi_dev_remove(struct device *dev)
 {
 	struct wmi_block *wblock = dev_to_wblock(dev);
 	struct wmi_driver *wdriver =
@@ -997,8 +997,6 @@ static int wmi_dev_remove(struct device *dev)
 
 	if (ACPI_FAILURE(wmi_method_enable(wblock, 0)))
 		dev_warn(dev, "failed to disable device\n");
-
-	return 0;
 }
 
 static struct class wmi_bus_class = {
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index c29d590c5e4f..cc6757dfa3f1 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -123,7 +123,7 @@ static int pnp_device_probe(struct device *dev)
 	return error;
 }
 
-static int pnp_device_remove(struct device *dev)
+static void pnp_device_remove(struct device *dev)
 {
 	struct pnp_dev *pnp_dev = to_pnp_dev(dev);
 	struct pnp_driver *drv = pnp_dev->driver;
@@ -139,7 +139,6 @@ static int pnp_device_remove(struct device *dev)
 		pnp_disable_dev(pnp_dev);
 
 	pnp_device_detach(pnp_dev);
-	return 0;
 }
 
 static void pnp_device_shutdown(struct device *dev)
diff --git a/drivers/rapidio/rio-driver.c b/drivers/rapidio/rio-driver.c
index 72874153972e..a72bb0a40fcf 100644
--- a/drivers/rapidio/rio-driver.c
+++ b/drivers/rapidio/rio-driver.c
@@ -112,7 +112,7 @@ static int rio_device_probe(struct device *dev)
  * driver, then run the driver remove() method.  Then update
  * the reference count.
  */
-static int rio_device_remove(struct device *dev)
+static void rio_device_remove(struct device *dev)
 {
 	struct rio_dev *rdev = to_rio_dev(dev);
 	struct rio_driver *rdrv = rdev->driver;
@@ -124,8 +124,6 @@ static int rio_device_remove(struct device *dev)
 	}
 
 	rio_dev_put(rdev);
-
-	return 0;
 }
 
 static void rio_device_shutdown(struct device *dev)
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index c1404d3dae2c..9151836190ce 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -530,14 +530,13 @@ static int rpmsg_dev_probe(struct device *dev)
 	return err;
 }
 
-static int rpmsg_dev_remove(struct device *dev)
+static void rpmsg_dev_remove(struct device *dev)
 {
 	struct rpmsg_device *rpdev = to_rpmsg_device(dev);
 	struct rpmsg_driver *rpdrv = to_rpmsg_driver(rpdev->dev.driver);
-	int err = 0;
 
 	if (rpdev->ops->announce_destroy)
-		err = rpdev->ops->announce_destroy(rpdev);
+		rpdev->ops->announce_destroy(rpdev);
 
 	if (rpdrv->remove)
 		rpdrv->remove(rpdev);
@@ -546,8 +545,6 @@ static int rpmsg_dev_remove(struct device *dev)
 
 	if (rpdev->ept)
 		rpmsg_destroy_ept(rpdev->ept);
-
-	return err;
 }
 
 static struct bus_type rpmsg_bus = {
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
index a6aeab1ea0ae..382c5b5f8cd3 100644
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -439,15 +439,13 @@ module_exit(cleanup_ccwgroup);
 
 /************************** driver stuff ******************************/
 
-static int ccwgroup_remove(struct device *dev)
+static void ccwgroup_remove(struct device *dev)
 {
 	struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
 	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(dev->driver);
 
 	if (gdrv->remove)
 		gdrv->remove(gdev);
-
-	return 0;
 }
 
 static void ccwgroup_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 092fd1ea5799..ebc321edba51 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -1371,7 +1371,7 @@ static int css_probe(struct device *dev)
 	return ret;
 }
 
-static int css_remove(struct device *dev)
+static void css_remove(struct device *dev)
 {
 	struct subchannel *sch;
 
@@ -1379,8 +1379,6 @@ static int css_remove(struct device *dev)
 	if (sch->driver->remove)
 		sch->driver->remove(sch);
 	sch->driver = NULL;
-
-	return 0;
 }
 
 static void css_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index cd5d2d4d8e46..adf33b653d87 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -1741,7 +1741,7 @@ ccw_device_probe (struct device *dev)
 	return 0;
 }
 
-static int ccw_device_remove(struct device *dev)
+static void ccw_device_remove(struct device *dev)
 {
 	struct ccw_device *cdev = to_ccwdev(dev);
 	struct ccw_driver *cdrv = cdev->drv;
@@ -1775,8 +1775,6 @@ static int ccw_device_remove(struct device *dev)
 	spin_unlock_irq(cdev->ccwlock);
 	io_subchannel_quiesce(sch);
 	__disable_cmf(cdev);
-
-	return 0;
 }
 
 static void ccw_device_shutdown(struct device *dev)
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index b31711307e5a..b6b4589c70bd 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -28,15 +28,13 @@ static int scmdev_probe(struct device *dev)
 	return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV;
 }
 
-static int scmdev_remove(struct device *dev)
+static void scmdev_remove(struct device *dev)
 {
 	struct scm_device *scmdev = to_scm_dev(dev);
 	struct scm_driver *scmdrv = to_scm_drv(dev->driver);
 
 	if (scmdrv->remove)
 		scmdrv->remove(scmdev);
-
-	return 0;
 }
 
 static int scmdev_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index 8d3a1d84a757..0992edcaf1af 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -901,7 +901,7 @@ static int ap_device_probe(struct device *dev)
 	return rc;
 }
 
-static int ap_device_remove(struct device *dev)
+static void ap_device_remove(struct device *dev)
 {
 	struct ap_device *ap_dev = to_ap_dev(dev);
 	struct ap_driver *ap_drv = ap_dev->drv;
@@ -926,8 +926,6 @@ static int ap_device_remove(struct device *dev)
 	ap_dev->drv = NULL;
 
 	put_device(dev);
-
-	return 0;
 }
 
 struct ap_queue *ap_get_qdev(ap_qid_t qid)
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 5b3a20a140f9..58f69366bdcc 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -7674,7 +7674,7 @@ static int sdebug_driver_probe(struct device *dev)
 	return error;
 }
 
-static int sdebug_driver_remove(struct device *dev)
+static void sdebug_driver_remove(struct device *dev)
 {
 	struct sdebug_host_info *sdbg_host;
 	struct sdebug_dev_info *sdbg_devinfo, *tmp;
@@ -7691,7 +7691,6 @@ static int sdebug_driver_remove(struct device *dev)
 	}
 
 	scsi_host_put(sdbg_host->shost);
-	return 0;
 }
 
 static int pseudo_lld_bus_match(struct device *dev,
diff --git a/drivers/sh/superhyway/superhyway.c b/drivers/sh/superhyway/superhyway.c
index 348836b90605..c0ab904c76ec 100644
--- a/drivers/sh/superhyway/superhyway.c
+++ b/drivers/sh/superhyway/superhyway.c
@@ -150,17 +150,13 @@ static int superhyway_device_probe(struct device *dev)
 	return -ENODEV;
 }
 
-static int superhyway_device_remove(struct device *dev)
+static void superhyway_device_remove(struct device *dev)
 {
 	struct superhyway_device *shyway_dev = to_superhyway_device(dev);
 	struct superhyway_driver *shyway_drv = to_superhyway_driver(dev->driver);
 
-	if (shyway_drv && shyway_drv->remove) {
+	if (shyway_drv && shyway_drv->remove)
 		shyway_drv->remove(shyway_dev);
-		return 0;
-	}
-
-	return -ENODEV;
 }
 
 /**
diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
index 1794ff0106bc..7c4f32d76966 100644
--- a/drivers/siox/siox-core.c
+++ b/drivers/siox/siox-core.c
@@ -520,7 +520,7 @@ static int siox_probe(struct device *dev)
 	return sdriver->probe(sdevice);
 }
 
-static int siox_remove(struct device *dev)
+static void siox_remove(struct device *dev)
 {
 	struct siox_driver *sdriver =
 		container_of(dev->driver, struct siox_driver, driver);
@@ -528,8 +528,6 @@ static int siox_remove(struct device *dev)
 
 	if (sdriver->remove)
 		sdriver->remove(sdevice);
-
-	return 0;
 }
 
 static void siox_shutdown(struct device *dev)
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 1d2bc181da05..78480e332ab8 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -81,7 +81,7 @@ static int slim_device_probe(struct device *dev)
 	return ret;
 }
 
-static int slim_device_remove(struct device *dev)
+static void slim_device_remove(struct device *dev)
 {
 	struct slim_device *sbdev = to_slim_device(dev);
 	struct slim_driver *sbdrv;
@@ -91,8 +91,6 @@ static int slim_device_remove(struct device *dev)
 		if (sbdrv->remove)
 			sbdrv->remove(sbdev);
 	}
-
-	return 0;
 }
 
 static int slim_device_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
index 7abfc8c4fdc7..475a57b435b2 100644
--- a/drivers/soc/qcom/apr.c
+++ b/drivers/soc/qcom/apr.c
@@ -217,7 +217,7 @@ static int apr_device_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int apr_device_remove(struct device *dev)
+static void apr_device_remove(struct device *dev)
 {
 	struct apr_device *adev = to_apr_device(dev);
 	struct apr_driver *adrv;
@@ -231,8 +231,6 @@ static int apr_device_remove(struct device *dev)
 		idr_remove(&apr->svcs_idr, adev->svc_id);
 		spin_unlock(&apr->svcs_lock);
 	}
-
-	return 0;
 }
 
 static int apr_uevent(struct device *dev, struct kobj_uevent_env *env)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index c99181165321..ad2b558dc9cb 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -405,7 +405,7 @@ static int spi_probe(struct device *dev)
 	return ret;
 }
 
-static int spi_remove(struct device *dev)
+static void spi_remove(struct device *dev)
 {
 	const struct spi_driver		*sdrv = to_spi_driver(dev->driver);
 
@@ -420,8 +420,6 @@ static int spi_remove(struct device *dev)
 	}
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static void spi_shutdown(struct device *dev)
diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
index 51f5aeb65b3b..b37ead9e2fad 100644
--- a/drivers/spmi/spmi.c
+++ b/drivers/spmi/spmi.c
@@ -345,7 +345,7 @@ static int spmi_drv_probe(struct device *dev)
 	return err;
 }
 
-static int spmi_drv_remove(struct device *dev)
+static void spmi_drv_remove(struct device *dev)
 {
 	const struct spmi_driver *sdrv = to_spmi_driver(dev->driver);
 
@@ -356,7 +356,6 @@ static int spmi_drv_remove(struct device *dev)
 	pm_runtime_disable(dev);
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
-	return 0;
 }
 
 static void spmi_drv_shutdown(struct device *dev)
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 3a29b5570f9f..8a93c83cb6f8 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -283,7 +283,7 @@ static void ssb_device_shutdown(struct device *dev)
 		ssb_drv->shutdown(ssb_dev);
 }
 
-static int ssb_device_remove(struct device *dev)
+static void ssb_device_remove(struct device *dev)
 {
 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
@@ -291,8 +291,6 @@ static int ssb_device_remove(struct device *dev)
 	if (ssb_drv && ssb_drv->remove)
 		ssb_drv->remove(ssb_dev);
 	ssb_device_put(ssb_dev);
-
-	return 0;
 }
 
 static int ssb_device_probe(struct device *dev)
diff --git a/drivers/staging/fieldbus/anybuss/host.c b/drivers/staging/fieldbus/anybuss/host.c
index 0f730efe9a6d..8a75f6642c78 100644
--- a/drivers/staging/fieldbus/anybuss/host.c
+++ b/drivers/staging/fieldbus/anybuss/host.c
@@ -1186,15 +1186,13 @@ static int anybus_bus_probe(struct device *dev)
 	return adrv->probe(adev);
 }
 
-static int anybus_bus_remove(struct device *dev)
+static void anybus_bus_remove(struct device *dev)
 {
 	struct anybuss_client_driver *adrv =
 		to_anybuss_client_driver(dev->driver);
 
 	if (adrv->remove)
 		adrv->remove(to_anybuss_client(dev));
-
-	return 0;
 }
 
 static struct bus_type anybus_bus = {
diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c
index 13d319860da5..5a5c17a4519b 100644
--- a/drivers/staging/greybus/gbphy.c
+++ b/drivers/staging/greybus/gbphy.c
@@ -169,7 +169,7 @@ static int gbphy_dev_probe(struct device *dev)
 	return ret;
 }
 
-static int gbphy_dev_remove(struct device *dev)
+static void gbphy_dev_remove(struct device *dev)
 {
 	struct gbphy_driver *gbphy_drv = to_gbphy_driver(dev->driver);
 	struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
@@ -180,8 +180,6 @@ static int gbphy_dev_remove(struct device *dev)
 	pm_runtime_set_suspended(dev);
 	pm_runtime_put_noidle(dev);
 	pm_runtime_dont_use_autosuspend(dev);
-
-	return 0;
 }
 
 static struct bus_type gbphy_bus_type = {
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 6d0b0e67e79e..cbb2118fb35e 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -81,7 +81,7 @@ static int tcm_loop_show_info(struct seq_file *m, struct Scsi_Host *host)
 }
 
 static int tcm_loop_driver_probe(struct device *);
-static int tcm_loop_driver_remove(struct device *);
+static void tcm_loop_driver_remove(struct device *);
 
 static int pseudo_lld_bus_match(struct device *dev,
 				struct device_driver *dev_driver)
@@ -363,7 +363,7 @@ static int tcm_loop_driver_probe(struct device *dev)
 	return 0;
 }
 
-static int tcm_loop_driver_remove(struct device *dev)
+static void tcm_loop_driver_remove(struct device *dev)
 {
 	struct tcm_loop_hba *tl_hba;
 	struct Scsi_Host *sh;
@@ -373,7 +373,6 @@ static int tcm_loop_driver_remove(struct device *dev)
 
 	scsi_remove_host(sh);
 	scsi_host_put(sh);
-	return 0;
 }
 
 static void tcm_loop_release_adapter(struct device *dev)
diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
index a062befcb3b2..7018d959f775 100644
--- a/drivers/thunderbolt/domain.c
+++ b/drivers/thunderbolt/domain.c
@@ -86,7 +86,7 @@ static int tb_service_probe(struct device *dev)
 	return driver->probe(svc, id);
 }
 
-static int tb_service_remove(struct device *dev)
+static void tb_service_remove(struct device *dev)
 {
 	struct tb_service *svc = tb_to_service(dev);
 	struct tb_service_driver *driver;
@@ -94,8 +94,6 @@ static int tb_service_remove(struct device *dev)
 	driver = container_of(dev->driver, struct tb_service_driver, driver);
 	if (driver->remove)
 		driver->remove(svc);
-
-	return 0;
 }
 
 static void tb_service_shutdown(struct device *dev)
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 9cdfcfe07e87..92498961fd92 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -421,15 +421,13 @@ static int serdev_drv_probe(struct device *dev)
 	return ret;
 }
 
-static int serdev_drv_remove(struct device *dev)
+static void serdev_drv_remove(struct device *dev)
 {
 	const struct serdev_device_driver *sdrv = to_serdev_device_driver(dev->driver);
 	if (sdrv->remove)
 		sdrv->remove(to_serdev_device(dev));
 
 	dev_pm_domain_detach(dev, true);
-
-	return 0;
 }
 
 static struct bus_type serdev_bus_type = {
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 7e13b74e60e5..4169cf40a03b 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -78,14 +78,12 @@ static int ulpi_probe(struct device *dev)
 	return drv->probe(to_ulpi_dev(dev));
 }
 
-static int ulpi_remove(struct device *dev)
+static void ulpi_remove(struct device *dev)
 {
 	struct ulpi_driver *drv = to_ulpi_driver(dev->driver);
 
 	if (drv->remove)
 		drv->remove(to_ulpi_dev(dev));
-
-	return 0;
 }
 
 static struct bus_type ulpi_bus = {
diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
index 7133818a58b9..9e38142acd38 100644
--- a/drivers/usb/serial/bus.c
+++ b/drivers/usb/serial/bus.c
@@ -74,7 +74,7 @@ static int usb_serial_device_probe(struct device *dev)
 	return retval;
 }
 
-static int usb_serial_device_remove(struct device *dev)
+static void usb_serial_device_remove(struct device *dev)
 {
 	struct usb_serial_port *port = to_usb_serial_port(dev);
 	struct usb_serial_driver *driver;
@@ -101,8 +101,6 @@ static int usb_serial_device_remove(struct device *dev)
 
 	if (!autopm_err)
 		usb_autopm_put_interface(port->serial->interface);
-
-	return 0;
 }
 
 static ssize_t new_id_store(struct device_driver *driver,
diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
index 7f3c9a8e2bf0..78e0e78954f2 100644
--- a/drivers/usb/typec/bus.c
+++ b/drivers/usb/typec/bus.c
@@ -382,7 +382,7 @@ static int typec_probe(struct device *dev)
 	return ret;
 }
 
-static int typec_remove(struct device *dev)
+static void typec_remove(struct device *dev)
 {
 	struct typec_altmode_driver *drv = to_altmode_driver(dev->driver);
 	struct typec_altmode *adev = to_typec_altmode(dev);
@@ -400,8 +400,6 @@ static int typec_remove(struct device *dev)
 
 	adev->desc = NULL;
 	adev->ops = NULL;
-
-	return 0;
 }
 
 struct bus_type typec_bus = {
diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
index bb3f1d1f0422..3fc4525fc05c 100644
--- a/drivers/vdpa/vdpa.c
+++ b/drivers/vdpa/vdpa.c
@@ -34,15 +34,13 @@ static int vdpa_dev_probe(struct device *d)
 	return ret;
 }
 
-static int vdpa_dev_remove(struct device *d)
+static void vdpa_dev_remove(struct device *d)
 {
 	struct vdpa_device *vdev = dev_to_vdpa(d);
 	struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver);
 
 	if (drv && drv->remove)
 		drv->remove(vdev);
-
-	return 0;
 }
 
 static struct bus_type vdpa_bus = {
diff --git a/drivers/vfio/mdev/mdev_driver.c b/drivers/vfio/mdev/mdev_driver.c
index c368ec824e2b..e2cb1ff56f6c 100644
--- a/drivers/vfio/mdev/mdev_driver.c
+++ b/drivers/vfio/mdev/mdev_driver.c
@@ -57,7 +57,7 @@ static int mdev_probe(struct device *dev)
 	return ret;
 }
 
-static int mdev_remove(struct device *dev)
+static void mdev_remove(struct device *dev)
 {
 	struct mdev_driver *drv =
 		container_of(dev->driver, struct mdev_driver, driver);
@@ -67,8 +67,6 @@ static int mdev_remove(struct device *dev)
 		drv->remove(mdev);
 
 	mdev_detach_iommu(mdev);
-
-	return 0;
 }
 
 static int mdev_match(struct device *dev, struct device_driver *drv)
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index 4b15c00c0a0a..2a6055c0d4d3 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -278,7 +278,7 @@ static int virtio_dev_probe(struct device *_d)
 
 }
 
-static int virtio_dev_remove(struct device *_d)
+static void virtio_dev_remove(struct device *_d)
 {
 	struct virtio_device *dev = dev_to_virtio(_d);
 	struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
@@ -292,7 +292,6 @@ static int virtio_dev_remove(struct device *_d)
 
 	/* Acknowledge the device's existence again. */
 	virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
-	return 0;
 }
 
 static struct bus_type virtio_bus = {
diff --git a/drivers/vlynq/vlynq.c b/drivers/vlynq/vlynq.c
index e966981c0215..4af6615808cc 100644
--- a/drivers/vlynq/vlynq.c
+++ b/drivers/vlynq/vlynq.c
@@ -342,14 +342,12 @@ static int vlynq_device_probe(struct device *dev)
 	return result;
 }
 
-static int vlynq_device_remove(struct device *dev)
+static void vlynq_device_remove(struct device *dev)
 {
 	struct vlynq_driver *drv = to_vlynq_driver(dev->driver);
 
 	if (drv->remove)
 		drv->remove(to_vlynq_device(dev));
-
-	return 0;
 }
 
 int __vlynq_register_driver(struct vlynq_driver *driver, struct module *owner)
diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
index 1b15afea28ee..8dba20186be3 100644
--- a/drivers/vme/vme.c
+++ b/drivers/vme/vme.c
@@ -1990,7 +1990,7 @@ static int vme_bus_probe(struct device *dev)
 	return -ENODEV;
 }
 
-static int vme_bus_remove(struct device *dev)
+static void vme_bus_remove(struct device *dev)
 {
 	struct vme_driver *driver;
 	struct vme_dev *vdev = dev_to_vme_dev(dev);
@@ -1998,8 +1998,6 @@ static int vme_bus_remove(struct device *dev)
 	driver = dev->platform_data;
 	if (driver->remove)
 		driver->remove(vdev);
-
-	return 0;
 }
 
 struct bus_type vme_bus_type = {
diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
index 2a93b7c9c159..2754bdfadcb8 100644
--- a/drivers/xen/xenbus/xenbus.h
+++ b/drivers/xen/xenbus/xenbus.h
@@ -106,7 +106,7 @@ void xs_request_exit(struct xb_req_data *req);
 
 int xenbus_match(struct device *_dev, struct device_driver *_drv);
 int xenbus_dev_probe(struct device *_dev);
-int xenbus_dev_remove(struct device *_dev);
+void xenbus_dev_remove(struct device *_dev);
 int xenbus_register_driver_common(struct xenbus_driver *drv,
 				  struct xen_bus_type *bus,
 				  struct module *owner,
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 33d09b3f6211..bd003ca8acbe 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -325,7 +325,7 @@ int xenbus_dev_probe(struct device *_dev)
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_probe);
 
-int xenbus_dev_remove(struct device *_dev)
+void xenbus_dev_remove(struct device *_dev)
 {
 	struct xenbus_device *dev = to_xenbus_device(_dev);
 	struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
@@ -355,8 +355,6 @@ int xenbus_dev_remove(struct device *_dev)
 	if (!drv->allow_rebind ||
 	    xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)
 		xenbus_switch_state(dev, XenbusStateClosed);
-
-	return 0;
 }
 EXPORT_SYMBOL_GPL(xenbus_dev_remove);
 
diff --git a/drivers/zorro/zorro-driver.c b/drivers/zorro/zorro-driver.c
index 0dd7cbcec2b0..c18524bb8b2a 100644
--- a/drivers/zorro/zorro-driver.c
+++ b/drivers/zorro/zorro-driver.c
@@ -62,7 +62,7 @@ static int zorro_device_probe(struct device *dev)
 }
 
 
-static int zorro_device_remove(struct device *dev)
+static void zorro_device_remove(struct device *dev)
 {
 	struct zorro_dev *z = to_zorro_dev(dev);
 	struct zorro_driver *drv = to_zorro_driver(dev->driver);
@@ -72,7 +72,6 @@ static int zorro_device_remove(struct device *dev)
 			drv->remove(z);
 		z->driver = NULL;
 	}
-	return 0;
 }
 
 
diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
index 1ea5e1d1545b..062777a45a74 100644
--- a/include/linux/device/bus.h
+++ b/include/linux/device/bus.h
@@ -91,7 +91,7 @@ struct bus_type {
 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
 	int (*probe)(struct device *dev);
 	void (*sync_state)(struct device *dev);
-	int (*remove)(struct device *dev);
+	void (*remove)(struct device *dev);
 	void (*shutdown)(struct device *dev);
 
 	int (*online)(struct device *dev);
diff --git a/sound/ac97/bus.c b/sound/ac97/bus.c
index 6ddf646cda65..0d31a6d71468 100644
--- a/sound/ac97/bus.c
+++ b/sound/ac97/bus.c
@@ -514,7 +514,7 @@ static int ac97_bus_probe(struct device *dev)
 	return ret;
 }
 
-static int ac97_bus_remove(struct device *dev)
+static void ac97_bus_remove(struct device *dev)
 {
 	struct ac97_codec_device *adev = to_ac97_device(dev);
 	struct ac97_codec_driver *adrv = to_ac97_driver(dev->driver);
@@ -522,7 +522,7 @@ static int ac97_bus_remove(struct device *dev)
 
 	ret = pm_runtime_resume_and_get(dev);
 	if (ret < 0)
-		return ret;
+		return;
 
 	ret = adrv->remove(adev);
 	pm_runtime_put_noidle(dev);
@@ -530,8 +530,6 @@ static int ac97_bus_remove(struct device *dev)
 		ac97_put_disable_clk(adev);
 
 	pm_runtime_disable(dev);
-
-	return ret;
 }
 
 static struct bus_type ac97_bus_type = {
diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
index 002fb5bf220b..c9579d97fbab 100644
--- a/sound/aoa/soundbus/core.c
+++ b/sound/aoa/soundbus/core.c
@@ -104,7 +104,7 @@ static int soundbus_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return retval;
 }
 
-static int soundbus_device_remove(struct device *dev)
+static void soundbus_device_remove(struct device *dev)
 {
 	struct soundbus_dev * soundbus_dev = to_soundbus_device(dev);
 	struct soundbus_driver * drv = to_soundbus_driver(dev->driver);
@@ -112,8 +112,6 @@ static int soundbus_device_remove(struct device *dev)
 	if (dev->driver && drv->remove)
 		drv->remove(soundbus_dev);
 	soundbus_dev_put(soundbus_dev);
-
-	return 0;
 }
 
 static void soundbus_device_shutdown(struct device *dev)
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 04:09:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 04:09:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155757.287716 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3WCx-00013Y-FK; Wed, 14 Jul 2021 04:09:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155757.287716; Wed, 14 Jul 2021 04:09:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3WCx-00013R-AA; Wed, 14 Jul 2021 04:09:15 +0000
Received: by outflank-mailman (input) for mailman id 155757;
 Tue, 13 Jul 2021 19:36:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/VJd=MF=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m3ODB-0007u7-AV
 for xen-devel@lists.xenproject.org; Tue, 13 Jul 2021 19:36:57 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c846082d-cd0c-4761-8973-6034bef4dd5e;
 Tue, 13 Jul 2021 19:36:55 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3OBr-0001GT-RJ; Tue, 13 Jul 2021 21:35:35 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3OBi-0006p7-4I; Tue, 13 Jul 2021 21:35:26 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m3OBh-0002bU-W6; Tue, 13 Jul 2021 21:35:25 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c846082d-cd0c-4761-8973-6034bef4dd5e
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Eric Farman <farman@linux.ibm.com>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Hannes Reinecke <hare@suse.de>,
	Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>,
	Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Jaroslav Kysela <perex@perex.cz>,
	Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>,
	Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	=?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>,
	Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>,
	Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	=?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>,
	Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>,
	Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org,
	dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net,
	kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net,
	linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org,
	linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org,
	linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org,
	linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org,
	linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org,
	linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org,
	linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev,
	linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	netdev@vger.kernel.org,
	nvdimm@lists.linux.dev,
	platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org,
	target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org
Subject: [PATCH v4 0/5] bus: Make remove callback return void
Date: Tue, 13 Jul 2021 21:35:17 +0200
Message-Id: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

Hello,

this is v4 of the final patch set for my effort to make struct
bus_type::remove return void.

The first four patches contain cleanups that make some of these
callbacks (more obviously) always return 0. They are acked by the
respective maintainers. Bjorn Helgaas explicitly asked to include the
pci patch (#1) into this series, so Greg taking this is fine. I assume
the s390 people are fine with Greg taking patches #2 to #4, too, they
didn't explicitly said so though.

The last patch actually changes the prototype and so touches quite some
drivers and has the potential to conflict with future developments, so I
consider it beneficial to put these patches into next soon. I expect
that it will be Greg who takes the complete series, he already confirmed
via irc (for v2) to look into this series.

The only change compared to v3 is in the fourth patch where I modified a
few more drivers to fix build failures. Some of them were found by build
bots (thanks!), some of them I found myself using a regular expression
search. The newly modified files are:

 arch/sparc/kernel/vio.c
 drivers/nubus/bus.c
 drivers/sh/superhyway/superhyway.c
 drivers/vlynq/vlynq.c
 drivers/zorro/zorro-driver.c
 sound/ac97/bus.c

Best regards
Uwe

Uwe Kleine-König (5):
  PCI: endpoint: Make struct pci_epf_driver::remove return void
  s390/cio: Make struct css_driver::remove return void
  s390/ccwgroup: Drop if with an always false condition
  s390/scm: Make struct scm_driver::remove return void
  bus: Make remove callback return void

 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 arch/s390/include/asm/eadm.h              | 2 +-
 arch/sparc/kernel/vio.c                   | 4 +---
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nubus/bus.c                       | 6 ++----
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 7 ++-----
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 7 ++-----
 drivers/s390/block/scm_drv.c              | 4 +---
 drivers/s390/cio/ccwgroup.c               | 6 +-----
 drivers/s390/cio/chsc_sch.c               | 3 +--
 drivers/s390/cio/css.c                    | 7 +++----
 drivers/s390/cio/css.h                    | 2 +-
 drivers/s390/cio/device.c                 | 9 +++------
 drivers/s390/cio/eadm_sch.c               | 4 +---
 drivers/s390/cio/scm.c                    | 5 +++--
 drivers/s390/cio/vfio_ccw_drv.c           | 3 +--
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/sh/superhyway/superhyway.c        | 8 ++------
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vlynq/vlynq.c                     | 4 +---
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 drivers/zorro/zorro-driver.c              | 3 +--
 include/linux/device/bus.h                | 2 +-
 include/linux/pci-epf.h                   | 2 +-
 sound/ac97/bus.c                          | 6 ++----
 sound/aoa/soundbus/core.c                 | 4 +---
 93 files changed, 107 insertions(+), 263 deletions(-)


base-commit: e73f0f0ee7541171d89f2e2491130c7771ba58d3
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 04:16:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 04:16:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155904.287737 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3WJS-0003OE-M3; Wed, 14 Jul 2021 04:15:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155904.287737; Wed, 14 Jul 2021 04:15:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3WJS-0003O7-J5; Wed, 14 Jul 2021 04:15:58 +0000
Received: by outflank-mailman (input) for mailman id 155904;
 Wed, 14 Jul 2021 04:15:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3WJR-0003Nx-HR; Wed, 14 Jul 2021 04:15:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3WJR-00043v-B6; Wed, 14 Jul 2021 04:15:57 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3WJQ-00089f-UY; Wed, 14 Jul 2021 04:15:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3WJQ-0006wo-U4; Wed, 14 Jul 2021 04:15:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Ixq0MiGTNgCuJoBpy+isKtdm+R2L5E/LwtHevJUzYwM=; b=66CUUZvZxO9nsX5d5CoWVFTbp6
	F1M5jnp0zT6Wz1x7SdxErnNOayS+AitH7q6aHyrfJpC7qKZWVYzfF+52zci5zH4c0lkyDBpk340q8
	ITs0a3p5pheik8RifLV4A/E0W+J3dry/O8v/46IEeb17Cvo1McpqDwEpGIxy5gC+ZkCY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163658-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163658: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=9bf4aee7340c331a47d3a60388d478461979a45d
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 04:15:56 +0000

flight 163658 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163658/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 9bf4aee7340c331a47d3a60388d478461979a45d
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   40 days
Failing since        162368  2021-06-04 15:42:59 Z   39 days  112 attempts
Testing same since   163638  2021-07-13 09:09:10 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3764 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 05:25:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 05:25:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155914.287757 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3XOB-0002sV-Im; Wed, 14 Jul 2021 05:24:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155914.287757; Wed, 14 Jul 2021 05:24:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3XOB-0002sO-F7; Wed, 14 Jul 2021 05:24:55 +0000
Received: by outflank-mailman (input) for mailman id 155914;
 Wed, 14 Jul 2021 05:24:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3XO9-0002sE-If; Wed, 14 Jul 2021 05:24:53 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3XO9-0005Td-7s; Wed, 14 Jul 2021 05:24:53 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3XO8-0001oq-Vr; Wed, 14 Jul 2021 05:24:53 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3XO8-00068c-VP; Wed, 14 Jul 2021 05:24:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=B4jz6C21MJnhzE4+W/7cQme6143WlcuJ3S+pA7r2DBc=; b=JcSpljfuGz6bNizIxWLbEi8AL2
	p8T9dEjUNvOVXyt7/rkj4AEkZb3p9D/PT0BTqMoPsBWdhUHE/m4qQLJqRhl6y8vZf7yseVBFSeeYz
	s/d0wkIESoOv31i6Zt+eAeXL9Gul7j0nFxAyN143y/cD6NtV0bWJqgGYw0eKx2RANXys=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163647-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163647: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 05:24:52 +0000

flight 163647 xen-unstable real [real]
flight 163667 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163647/
http://logs.test-lab.xenproject.org/osstest/logs/163667/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    5 days
Testing same since   163478  2021-07-09 15:23:45 Z    4 days    9 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Jan Beulich <jbeulich@suse.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Thu Jul 8 12:52:14 2021 +0100

    cirrus-ci: Fix FreeBSD build following QEMU update
    
    QEMU requires ninja and bash to build now.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Acked-by: Roger Pau Monné <roger.pau@citrix.com>

commit 89d57f291e37b4769ab26db919eba46548f2e13e
Author: Richard Kojedzinszky <richard@kojedz.in>
Date:   Fri Jul 9 10:06:45 2021 +0200

    tools/libxenstat: fix populating vbd.rd_sect
    
    Fixes: 91c3e3dc91d6 ("tools/xentop: Display '-' when stats are not available.")
    Signed-off-by: Richard Kojedzinszky <richard@kojedz.in>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit ab50c903e5d550bf6545a636c9a23144b54d0eb5
Author: Olaf Hering <olaf@aepfle.de>
Date:   Wed Jun 16 15:14:35 2021 +0200

    tools: ipxe: update for fixing build with GCC11
    
    Use a snapshot which includes commit
    f3f568e382a5f19824b3bfc6081cde39eee661e8 ("[crypto] Add
    memory output constraints for big-integer inline assembly"),
    which fixes build with gcc11.
    
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 140931aa2894991d9d6f1b2ba6ca275e1bc56259
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:32:07 2021 +0200

    x86: mark hypercall argument regs clobbering for intended fall-through
    
    The CIDs below are all for the PV side of things, yet while at it take
    care of the HVM side as well.
    
    Coverity-ID: 1485896, 1485901, 1485906, 1485910, 1485911,
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>

commit 10cf9035d29c4b35fbecc02a73c285a4183dfa34
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:31:28 2021 +0200

    x86emul: pad blob-execution "okay" messages
    
    We already do so in the native execution case, and a few descriptions (I
    did notice this with SHA ones) are short enough for the output to look
    slightly odd.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 836314747b0fd1688fc9526f7c73fd9313ba82f3
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:30:35 2021 +0200

    x86/AMD: drop MSR_K7_HWCR
    
    We don't support any K7 (32-bit only) hardware anymore, and the MSR is
    accessible as MSR_K8_HWCR as well. Using the K7 name was particularly
    odd for Hygon as well as in a Fam0F-specific piece of code.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit bfcdaae9c210bd7984d7691285aaf43deb1b0604
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 9 08:28:14 2021 +0200

    x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0
    
    Sufficiently old Linux (3.12-ish) accesses these MSRs (with the
    exception of IORRs) in an unguarded manner. Furthermore these same MSRs,
    at least on Fam11 and older CPUs, are also consulted by modern Linux,
    and their (bogus) built-in zapping of #GP faults from MSR accesses leads
    to it effectively reading zero instead of the intended values, which are
    relevant for PCI BAR placement (which ought to all live in MMIO-type
    space, not in DRAM-type one).
    
    For SYSCFG, only certain bits get exposed. Since MtrrVarDramEn also
    covers the IORRs, expose them as well. Introduce (consistently named)
    constants for the bits we're interested in and use them in pre-existing
    code as well. While there also drop the unused and somewhat questionable
    K8_MTRR_RDMEM_WRMEM_MASK. To complete the set of memory type and DRAM vs
    MMIO controlling MSRs, also expose TSEG_{BASE,MASK} (the former also
    gets read by Linux, dealing with which was already the subject of
    6eef0a99262c ["x86/PV: conditionally avoid raising #GP for early guest
    MSR reads"]).
    
    As a welcome side effect, verbosity on/of debug builds gets (perhaps
    significantly) reduced.
    
    Note that at least as far as those MSR accesses by Linux are concerned,
    there's no similar issue for DomU-s, as the accesses sit behind PCI
    device matching logic. The checked for devices would never be exposed to
    DomU-s in the first place. Nevertheless I think that at least for HVM we
    should return sensible values, not 0 (as svm_msr_read_intercept() does
    right now). The intended values may, however, need to be determined by
    hvmloader, and then get made known to Xen.
    
    Fixes: 322ec7c89f66 ("x86/pv: disallow access to unknown MSRs")
    Reported-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>

commit 0cbed4f0fd94a7fd40662fb0b4b82a58abeca111
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:26:42 2021 +0200

    docs/designs/launch: Hyperlaunch device tree
    
    Adds a design document for Hyperlaunch device tree structure.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>

commit d4f3125f1bb4683a61a47d281ac5effa0740e79b
Author: Daniel P. Smith <dpsmith@apertussolutions.com>
Date:   Fri Jul 9 08:19:47 2021 +0200

    docs/designs/launch: Hyperlaunch design document
    
    Adds a design document for Hyperlaunch, formerly DomB mode of dom0less.
    
    Signed-off-by: Christopher Clark <christopher.clark@starlab.io>
    Signed-off by: Daniel P. Smith <dpsmith@apertussolutions.com>
    Reviewed-by: Rich Persaud <rp@stacktrust.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 06:11:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 06:11:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155925.287777 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Y7I-0000SQ-Fo; Wed, 14 Jul 2021 06:11:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155925.287777; Wed, 14 Jul 2021 06:11:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3Y7I-0000SJ-Cf; Wed, 14 Jul 2021 06:11:32 +0000
Received: by outflank-mailman (input) for mailman id 155925;
 Wed, 14 Jul 2021 06:11:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3Y7H-0000SD-K9
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 06:11:31 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5442884a-e46a-11eb-87d0-12813bfff9fa;
 Wed, 14 Jul 2021 06:11:30 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2107.outbound.protection.outlook.com [104.47.18.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-30-rl0QXp1qM0CrV11szODKmw-3; Wed, 14 Jul 2021 08:11:28 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3535.eurprd04.prod.outlook.com (2603:10a6:803:11::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Wed, 14 Jul
 2021 06:11:25 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 06:11:25 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P192CA0003.EURP192.PROD.OUTLOOK.COM (2603:10a6:102:56::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.21 via Frontend Transport; Wed, 14 Jul 2021 06:11:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5442884a-e46a-11eb-87d0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626243089;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=j4/sYfafgOCTOioVY7nl7Z9UsQerES2BcRUQBRBx8S8=;
	b=mKKtPVCdVSCv4TR9cTuhOk1Cmf+/MOAc6WVI0qDaXYNuv4K+jwjKJKZ7w5Rk+Ak6VITi1D
	60nZW7JGvcDffJObITx2N8UyMx5KAeJ1zk0IGPMPqAJbrKF1L0CL7pyj8IVk5cXNynsixY
	oYYcDeW6iTRktJxqijK275p3t9JkIng=
X-MC-Unique: rl0QXp1qM0CrV11szODKmw-3
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Fi1+rLOgMxa4lXSqoWhrhqPwljhkaLwBSOA0wYVxuGvfnLt6MQLUwh0NUoNekdDH2C9FN6jllch/ecbE3vmWCxv5m8VtJapAxxCpPmUjh0ptYbOvlLRkUm0Xz8P2esL9fA33vs2y+Jak+widwlyAhRa5UAlqphgW3DGz/HobkfwFm7ePZhNAUlnCSAtKJxS2JIkfDXGFKBoCsCz51W9p8oTVXkoyYf/pVBRk4uEbzzlfd42G5DVyPmroL3KxR8BquaZBJMAL8guSRq7jHDllD9+eRYlL28coozAPSA8a7Q5Okuf46mZ7jbuUy/PdibgA2cEyrt+L07hj4Nd7z1wj5g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=j4/sYfafgOCTOioVY7nl7Z9UsQerES2BcRUQBRBx8S8=;
 b=SqPu+sCd+WGEzB6yO1ZekdRffHEj1yLFO/O0OoUbOsJXvTHB1ef9QfGjvAuW14v2yMYnkg85Msc97KGC/N0F12HhtJH1bEKE1ZTr/BDDTI6G2l8g8volMal5wH0YUBNMCSDfFEp34mVtGf75lYc2NedUG7/3MyYJSOk3uy6yUSWgVQl8RVeGEybErYsVTeC/OY6HwJydaATIHpd+00h6JxUCqHoPVwHsspoqHonxgXxHdHuqJiBBbFtBCLz7JQhIG2vCnbqYwLeQWrsO0lQcIRL2Gr3OMnYxUbmvQPDbTMeSEvkaVmF7j3OhFVkTpc5sqcGKvur0/+FQ96EiVHnTHw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Julien Grall <julien@xen.org>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
 <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
 <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
 <c7f47a50-b559-f8ba-5ad2-6868c01b6f52@xen.org>
 <51a62c3f-e3ef-f7ec-748f-75ade81f51cd@suse.com>
 <de797e4f-cab9-a31e-4cf7-5e8996cae5bc@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <06a6b8de-520f-1c62-0f5f-a28eb1d9c7fd@suse.com>
Date: Wed, 14 Jul 2021 08:11:22 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <de797e4f-cab9-a31e-4cf7-5e8996cae5bc@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P192CA0003.EURP192.PROD.OUTLOOK.COM
 (2603:10a6:102:56::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d628c139-df86-4d36-cd8a-08d9468e35ad
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3535:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3535B694A28ECEC2219C5626B3139@VI1PR0402MB3535.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	OgMsOaPwfSbNjiuMIIoidaQZJk/sNFVQnuQRYlngeyjvQPpy4/06adMfHNpB9+UVHX+uDGpLE/6MH+GnTkETJxcCFcRwIif+PWh0YqoludGPsELkJgVeMHzIJfkUUekfSxZb+LeZ5y0iiuvou1IypHt/ZGR0onH8BmdZXMzFVUpEq+Yj6cq+wzxsnYGnij5u1MfoiuIXZBmljvRWEv0TqrGwGxigaFiCvl89paVSI+onF0OQZXE3ty85B7/b0WdTHuvtqco8nPZXQ7GHA9zeAoYb8cdunWyrM6MKZ1ZaByImFhIdif7XDrZrDx3HP3jrlfNfFW1z7G015JnAqDeVr8xynJQ2vEZJGx8qu974BOug9QYbbHha7gcb/FLH5PLNK09ZXALG0eIsGQLRfpB6C1u3kE3jumI5FpTjGncCurF4jZemq9cPiRd1MhIlcpSLOanJWheZRcVcHCrQwgE4dD3y4xK7QBNWVPQBj3vU6g98eyMeRHkSHDgHTHXNPZkvbe5kYRAFAs8y60u4KiEX/KaFAdtNeGqJhv6aECAcMW4vxwWl5D5qLsG59p0ZLO4LOFeqSLLr7JXnmIuBmSAhGCxuT5f30Tc9bM2nBRb38LClbMTUgPyTpicla7j+u1uq16thlthkW4vbcVDCbu5CVSXpAAzpYjHd2LFgNO001IL/zvi1k2CWEYPIhitT7FGeJZWdX/tRPPRFj0Pi71erx5iX7QwFDCLk6bidaN5ICk7HqMH75qlDAgD0csLCW9bP
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(39850400004)(366004)(346002)(396003)(136003)(38100700002)(36756003)(31696002)(8936002)(26005)(186003)(66946007)(956004)(83380400001)(5660300002)(2906002)(66476007)(6916009)(66556008)(4326008)(2616005)(53546011)(107886003)(54906003)(16576012)(316002)(31686004)(86362001)(478600001)(6486002)(8676002)(98903001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?dFFIbzJUaTQySi9naVdQaGFnNGoxSGFpa2g4eFlpU1JYS2ZMUFp6UDZ5S0Zu?=
 =?utf-8?B?bzRJQlVGQVRkNHpwWnYzQldRSG9od0VOaDlqTjUvVXZmc3lzcE4zVzE3bk0v?=
 =?utf-8?B?bU8wbENDU0kvUktGQ2RTcjFuQ1ZEVkpMdENkZGhlYWh6TmplV2hkNFJBWWF0?=
 =?utf-8?B?WWE1NVFhTEpEckE2ZTcyak5yaDlmWFFhclMrL0k2aGZLVTRsTnZQaExXOC94?=
 =?utf-8?B?aEExY1JVR09FSGVUT3dzRmV6R3A3V04xb01Zb2V2bWFWOHMwYmprNHVIWVBt?=
 =?utf-8?B?Y3ZvYVVuU0R3eVJwQ1NSQkFENXYrYzVRSVBtM0RRcDhxT1MwK2VZKzB0dnlt?=
 =?utf-8?B?eUxoMzcrVUEzNmtBTVlnbFFqMUg2UWhOY0NvT2d1aGxSMlNQY1BWZkV5ZUE4?=
 =?utf-8?B?M1BYNFlSSEpRUDVLdU5JRms1N1N6aUx5ZmNjRllUbERiVkVWd1diVnlWamFj?=
 =?utf-8?B?aWQrdDlCVWRjOEtMWXJXbFVQZWZER0pKT1ZLZEhRLzN5Q3VGd2FxWlpYVkhL?=
 =?utf-8?B?dGYwa3ovdkZGVlptWUF4NEFJYVRTR1Z0NWI0TnBybDhKakR2VjdOemVDUWpH?=
 =?utf-8?B?RE1zWGxEd0p5RGFIT1Q0WDBqa2pGOE5uaGk3MjhBS3FsV05rRThqTVI1akdZ?=
 =?utf-8?B?Z3h6MFM1SWdNdWZSMjd3Z3VuWC9oMGJ4dzhxbGZia240KzhCL0ZTNTUzL2Z1?=
 =?utf-8?B?MmdScW45a1FKaTI5bzRzQzJBSFBKbCs1TzRBN2tIbk55WitFVWVUYkYrYkp3?=
 =?utf-8?B?UVdSUWFuMHlERGM0ZGF1dVJXQ1NhbVJ1amxTQlFuelhPNkVIbkYwVWRyUDVK?=
 =?utf-8?B?TUh0VkQ5UjhtVnZ6WDR0STBsQUdZeUt2SU5pTkxrL0hHMGpqUHpiVmlTR1Vk?=
 =?utf-8?B?Q3VwSks2eXozQU0vTmtMYnRkQW1Ca0xDa1VBdFFwa3krekFXREw0TUV6Q1Vs?=
 =?utf-8?B?L2kyR0pJTDFLYll5ZXhRSHlrMFBGOFRuTUFOQWorVGRIalFPWmtkaExiUGNz?=
 =?utf-8?B?YTZ0SVcxaWhVcVNEL20zNXNmR0xObUtPSkhvclkzcGhRTys3Z1ZiV09UN1Fj?=
 =?utf-8?B?SWpWT0pyMmRBcHlCS0RMRzY2dncrSjNuWGVmeFJsYU9WK004Y05yT1h5NEs3?=
 =?utf-8?B?T1ZsdGlEaDZiQ2dTVUdUZFVUZHZMSmZZeHdpdm5YeU5BZGcvYWlYR0FhYStX?=
 =?utf-8?B?NmxFTENNYVBQazFYY2xjbExENkxOUEp4aDZIaTVkNnFMeFhrWG95UkIzdTFq?=
 =?utf-8?B?UncwSUhSeFA4azlWRTNzWHZPRnlRWGVNNTJpQllFTU8yejBBMldWMElMNG84?=
 =?utf-8?B?bEpIbFloL05KejNVQ3UvTzdLOTFhVlRDdWFyVjBkTEJBR25hd2p3QjZIS2l4?=
 =?utf-8?B?L2NHcWhWUFRNcE5sZUtrZ1FmZEQ0dUdOdXlGQjJRMkZiL3JOVEo5cy9VcjdD?=
 =?utf-8?B?aXN3VFFRT3JLMVJNY0RFOEM2RVYyb29VZmx0bk1XQ2gyUzE0K3RMc094bXVI?=
 =?utf-8?B?WGZ1aXlYSE1mOGRGb05HWkIxaVlNdG1MenlDaUxkZ3g0VEZ3K1FKWmpNcHYv?=
 =?utf-8?B?T25CSVhnM2xkaWxKTCtZRHo3ZUFWWmoxZVVMck54WUJkVERqZjI5RFBja1dN?=
 =?utf-8?B?enIzQ2s5T3pERjJBcDQzczVESmJVMytqaXFSM0NMQU5LaWxLVHJpd2tiOExT?=
 =?utf-8?B?bjFlc3VlZGpxSWYrek9XZGp2YzVmT0RRWjlPRi9pUUJNWklHcHR1Y2pDQzRy?=
 =?utf-8?Q?thQrBz9M8a7Lv2I91O17waZFzctT57I3qwbqENl?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d628c139-df86-4d36-cd8a-08d9468e35ad
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 06:11:25.1547
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 3NYJTziu6M1FiGn9qhWlee2S5FRP4gcqdMCSMpkdkez3yXxtQzNt0c+kzF6fr1GaaG4iO7TptT+2o4y42ndyDg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3535

On 13.07.2021 18:33, Julien Grall wrote:
> Hi,
> 
> On 13/07/2021 17:27, Jan Beulich wrote:
>> On 13.07.2021 18:15, Julien Grall wrote:
>>> On 13/07/2021 16:52, Jan Beulich wrote:
>>>> On 13.07.2021 16:33, Julien Grall wrote:
>>>>> On 13/07/2021 15:23, Jan Beulich wrote:
>>>>>> On 13.07.2021 16:19, Julien Grall wrote:
>>>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>>>>>>
>>>>>>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>>>
>>>>>>> Yes, we want to be able to use the same userspace/OS without rebuilding
>>>>>>> to a specific hypervisor page size.
>>>>>>>
>>>>>>>> And thinking
>>>>>>>> even more generally, perhaps there could also be mixed (base) page sizes
>>>>>>>> in use at run time, so it may need to be a bit mask which gets returned.
>>>>>>>
>>>>>>> I am not sure to understand this. Are you saying the hypervisor may use
>>>>>>> at the same time different page size?
>>>>>>
>>>>>> I think so, yes. And I further think the hypervisor could even allow its
>>>>>> guests to do so.
>>>>>
>>>>> This is already the case on Arm. We need to differentiate between the
>>>>> page size used by the guest and the one used by Xen for the stage-2 page
>>>>> table (what you call EPT on x86).
>>>>>
>>>>> In this case, we are talking about the page size used by the hypervisor
>>>>> to configure the stage-2 page table
>>>>>
>>>>>> There would be a distinction between the granularity at
>>>>>> which RAM gets allocated and the granularity at which page mappings (RAM
>>>>>> or other) can be established. Which yields an environment which I'd say
>>>>>> has no clear "system page size".
>>>>>
>>>>> I don't quite understand why you would allocate and etablish the memory
>>>>> with a different page size in the hypervisor. Can you give an example?
>>>>
>>>> Pages may get allocated in 16k chunks, but there may be ways to map
>>>> 4k MMIO regions, 4k grants, etc. Due to the 16k allocation granularity
>>>> you'd e.g. still balloon pages in and out at 16k granularity.
>>> Right, 16KB is a multiple of 4KB, so a guest could say "Please allocate
>>> a contiguous chunk of 4 4KB pages".
>>>
>>>   From my understanding, you are suggesting to tell the guest that we
>>> "support 4KB, 16KB, 64KB...". However, it should be sufficient to say
>>> "we support 4KB and all its multiple".
>>
>> No - in this case it could legitimately expect to be able to balloon
>> out a single 4k page. Yet that's not possible with 16k allocation
>> granularity.
> 
> I am confused... why would you want to put such restriction? IOW, what 
> are you trying to protect against?

Protect? It may simply be that the most efficient page size is 16k.
Hence accounting of pages may be done at 16k granularity. IOW there
then is one struct page_info per 16k page. How would you propose a
guest would alloc/free 4k pages in such a configuration?

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 06:24:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 06:24:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155930.287789 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3YK6-00028x-N2; Wed, 14 Jul 2021 06:24:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155930.287789; Wed, 14 Jul 2021 06:24:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3YK6-00028q-JJ; Wed, 14 Jul 2021 06:24:46 +0000
Received: by outflank-mailman (input) for mailman id 155930;
 Wed, 14 Jul 2021 06:24:45 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3YK5-00028g-0Y; Wed, 14 Jul 2021 06:24:45 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3YK4-0006YX-Pg; Wed, 14 Jul 2021 06:24:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3YK4-0003Tt-FR; Wed, 14 Jul 2021 06:24:44 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3YK4-0000vc-Ey; Wed, 14 Jul 2021 06:24:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=baikea/q/9wFGaOb4lijUVjp8tF4u6lWxQIwrCh+di4=; b=uzbYVeEqB28r4AIlFpPZlMiQUR
	1/Okf8MonGKElSO/vnKXc3zgqZA9tBaKBLGGcxKxtwCYraxVQdkdLEAYN0Zk5b6/kElGM7rhA7yCy
	LI5NKTah+WQ3OOFXyQWcg6qBjk6KuOBPkrYDA/uhgz+hzuj5nvp10vJ2LeiZ6jUyO2q4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163654-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163654: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-seattle:guest-stop:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7fef2edf7cc753b51f7ccc74993971b0a9c81eca
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 06:24:44 +0000

flight 163654 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163654/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-arndale   8 xen-boot         fail in 163640 pass in 163654
 test-arm64-arm64-xl-seattle  17 guest-stop                 fail pass in 163640

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                7fef2edf7cc753b51f7ccc74993971b0a9c81eca
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  347 days
Failing since        152366  2020-08-01 20:49:34 Z  346 days  592 attempts
Testing same since   163620  2021-07-12 23:09:54 Z    1 days    3 attempts

------------------------------------------------------------
6679 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1966348 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 06:31:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 06:31:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155936.287803 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3YPx-0003oj-Gv; Wed, 14 Jul 2021 06:30:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155936.287803; Wed, 14 Jul 2021 06:30:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3YPx-0003oc-Dr; Wed, 14 Jul 2021 06:30:49 +0000
Received: by outflank-mailman (input) for mailman id 155936;
 Wed, 14 Jul 2021 06:30:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3YPv-0003oU-Cs
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 06:30:47 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 052d0fb6-e46d-11eb-87d0-12813bfff9fa;
 Wed, 14 Jul 2021 06:30:46 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2174.outbound.protection.outlook.com [104.47.17.174])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-wi9RKlApPLGS6pGoswfJkA-1; Wed, 14 Jul 2021 08:30:44 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4189.eurprd04.prod.outlook.com (2603:10a6:803:3d::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Wed, 14 Jul
 2021 06:30:42 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 06:30:42 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0185.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1c::29) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.21 via Frontend Transport; Wed, 14 Jul 2021 06:30:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 052d0fb6-e46d-11eb-87d0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626244245;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=PiuDjLX2tINXktLSjRM7OutzrwBcGfmB1V6mt1Y6zhY=;
	b=aCwfqkm1yXKhnHn3SYDdEltReOLLVX3QzCezstIYC25IAEjZib0hvLglvgGjNeRCpZvLbM
	esoykvbNp3vGBcPnhOVGy/UFz3z7037s2RnbXEgiEvIxI6n7ZhYGToepvNBvzTRrA5ruqN
	2K3Ysbh3NebXRNWXyu+FQfNIYuFi18A=
X-MC-Unique: wi9RKlApPLGS6pGoswfJkA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YjnuCqB933axmMkWLI+P7nmaKjqNEuTmxGk6L5t5LO4z6IOBMyXS5Z17cfunMeNqQWW+dtJkq35NGm02TsQy8P8DyzR7R6hZfovEBbAZcx+2e8wc7IEQPBnCjy2CPZCgng2T7WLfHi8jU9LwuSGfSLDPCYQ6vEi1+RY6cyFXGHPtRF/e1rGnAnpa2xkSRxbNBaiGLCLcb0p+A00IKjsO4liL0ZBfqzgdTqyr5vVpdDdSG3nZeA9C418+OV1q1MbOQeKI8sZkhXYlxxSXZfNgy0DCSUBiX2FUyp14K/if1NF5EsEhtQoteYcdvVLATEp1fuXT/PMUUy3iLS1PJFc+uA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PiuDjLX2tINXktLSjRM7OutzrwBcGfmB1V6mt1Y6zhY=;
 b=MJlbCfvftxaJMKX/pxoYVwfia2D0Du9z6i3qey4aJxfUB9RzJmZSUWBOFVZPLmhiX0RKVOIxSJ4yYD3qWPpbN4kNpfb/7wirJ10fkEE4WMNUocH70gVuXYlfv72OxMWdh7zxu4jIop49aPSm3iSxsyzjS2RFPwIsS9avmIhua99PZ6P1cmfIprxZQCbbBQR5EphvVKZe9758O8vAlKHCW7+g8GFjHNSXAnD4eC7yb2agB3kyAYl1jyXIy1og0I39hFvI3aEyaQ0kRbyQFm1sYsUnge6dzvbFsGOczVQm+/zvrvn4UU3/QM+bnwXFlmPkHiL4oM+FEwDiv/5HftUSkg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH][XTF] XSA-286: fix PAE variant of test
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <d6f4bfd1-791f-8191-5cce-6c98977a5175@suse.com>
Message-ID: <ae282966-4e78-e63f-4c47-c32eb5c56720@suse.com>
Date: Wed, 14 Jul 2021 08:30:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d6f4bfd1-791f-8191-5cce-6c98977a5175@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0185.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1c::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 69f17934-3c38-4003-2d19-08d94690e783
X-MS-TrafficTypeDiagnostic: VI1PR04MB4189:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB41896B0412AD4B32AA97A113B3139@VI1PR04MB4189.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	3HKWTtm4Rw84I0vwbkxhYgAhydTXgyoHBvfpDqJV1NCsJQiVO9HR6RsYvlfUlq0vFCplKxZe67caVGEQ6S6AW1pQqi2Rf4dnB5rux8gll+rCielaFr2ps4wvJy/Aywq3gbM/CUqTu15pEC3Kuv+NjMMObE4PI7UYY7r70JdjP6vHEftxKu4D+Qcs8ICu1RKSXeosQX7xX40aLABfA+ylS6MuNbesFBAiEvL7m5RoftoUTTHY0RJ/cbVsSBQlQQXnJu3v2nK85Yc3xxNntWoWl7pn00V9QGpasoeRFajWf8/T7W0Pms5KZrdpXvWXkXOlVDBRQq7dxvy3P4qyTw6Y4PP4l3rWF/zpt9J+EiI4nuFX9t+Ge+NhmY3nY3EO3tKXGFfKVMrgx2exlr5KM9p6uysT3eMm8ixINgggQEbo697OXgqWSmtT+TuH78NAS5Ee7lWy6AhQCudKmGTXClV/xw4Sj4nH7o0oWi3ohLBe2/VwSuyVAZ7F0kXs7ImlfnAh/NER2yhOGUD3utj+PjL++Vzpud4tO0FrWQdqfBiYtS+zOn2CqTfeez3g1PslCxZrH884iTqDToW0BBvRWjMg+rbtoFKl0v0Ra4Nv5OubFn5Eiuj8aQj3od3FHtr5/Scw/KJbVP/UK3k3gi/oCEqJSr+nKyJ2yIcfcP5lApR5pZj/VNu3YGIDgHFHXSpJPjD+K8zH0/+8F7rLvCYjd7bu6oQ7rt3zyaD3iGKpk0i/qSarwJbtdiyU2KIndg3x6i0f2PxsZ64gpGwdLsHGxnNAWw==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(346002)(376002)(39860400002)(366004)(83380400001)(4326008)(186003)(53546011)(5660300002)(6486002)(478600001)(86362001)(6916009)(36756003)(2906002)(66476007)(26005)(2616005)(31686004)(316002)(16576012)(8936002)(38100700002)(66946007)(8676002)(31696002)(66556008)(956004)(45980500001)(43740500002)(357404004);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 69f17934-3c38-4003-2d19-08d94690e783
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 06:30:42.4383
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: J/bygouKb9k9C0LasnfMTVFFlgBAvgwpgjurKTUnP7l+MSMITbEK8ZcfDdZrMuKE/rVBVJ5bws8bWVOQtJbZnA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4189

On 17.05.2021 15:22, Jan Beulich wrote:
> L3 entry updates aren't specified to take immediate effect in PAE mode:
> On bare metal, only the next CR3 load actually loads the PDPTEs, and a
> 32-bit Xen also wouldn't immediately propagate new entries into the
> PDPTEs. Them taking immediate effect (leaving aside the need to flush
> the TLB) on 64-bit Xen is merely to not complicate the hypervisor
> implementation more than necessary. Guests cannot depend on such
> behavior, and hence this test shouldn't either.
> 
> Insert the hypercall equivalent of a CR3 reload into the multicall.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> With this, cb199cc7de98 ('Revert "x86/PV32: avoid TLB flushing after
> mod_l3_entry()" and "x86/PV: restrict TLB flushing after
> mod_l[234]_entry()"') should imo be reverted from the Xen tree. The
> claim was wrong that the test was correct and hypervisor code flawed.

Ping?

I know you've expressed your disagreement with things stated above,
but I'm afraid you're still on the hook to actually prove some of
the claims you've made.

Thanks, Jan

> --- a/tests/xsa-286/main.c
> +++ b/tests/xsa-286/main.c
> @@ -128,9 +128,18 @@ void test_main(void)
>           *
>           * - update_va_mapping(addr, 0, INLVPG)
>           * - mmu_update(&l3t[slot], l2t2)
> +         * - (PAE only) new_baseptr(cr3)
>           * - update_va_mapping(addr, gfn0 | AD|WR|P, INLVPG)
>           */
>          mu[0].val = pte_from_virt(l2t2, PF_SYM(AD, RW, P));
> +#ifdef __i386__
> +        mmuext_op_t mx[] = {
> +            {
> +                .cmd = MMUEXT_NEW_BASEPTR,
> +                .arg1.mfn = read_cr3() >> PAGE_SHIFT,
> +            },
> +        };
> +#endif
>          intpte_t nl1e = pte_from_gfn(pfn_to_mfn(0), PF_SYM(AD, RW, P));
>          multicall_entry_t multi[] = {
>              {
> @@ -153,6 +162,17 @@ void test_main(void)
>                      DOMID_SELF,
>                  },
>              },
> +#ifdef __i386__
> +            {
> +                .op = __HYPERVISOR_mmuext_op,
> +                .args = {
> +                    _u(mx),
> +                    ARRAY_SIZE(mx),
> +                    _u(NULL),
> +                    DOMID_SELF,
> +                },
> +            },
> +#endif
>              {
>                  .op = __HYPERVISOR_update_va_mapping,
>                  .args = {
> 



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 07:31:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 07:31:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155949.287820 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ZMT-0002EQ-5R; Wed, 14 Jul 2021 07:31:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155949.287820; Wed, 14 Jul 2021 07:31:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ZMT-0002EJ-1Y; Wed, 14 Jul 2021 07:31:17 +0000
Received: by outflank-mailman (input) for mailman id 155949;
 Wed, 14 Jul 2021 07:31:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=HMMF=MG=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m3ZMR-0002ED-K6
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 07:31:15 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.218])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 777496f4-e475-11eb-87d3-12813bfff9fa;
 Wed, 14 Jul 2021 07:31:14 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id 30791cx6E7VBukU
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Wed, 14 Jul 2021 09:31:11 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 777496f4-e475-11eb-87d3-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626247871;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=L4OF1GtRnG44rR3Npy9cvRQF1g9wFbAH+PpbLhFHZuU=;
    b=DtPNgZQNtq+fyrDR/DAP76w6z0/j/AUQD0hkruEdqJq/Oly/bcHkIJbUR6G5iLO5BX
    uLCVCHYABlhq8Qcm7MFXT0wT8YX8gdDOIzXzDB3I+13XjSld51kJcc2K2ZeNnwrqjNGm
    5dc78+Z+22aSmNTTdR0DIOX6qSnnddGRGQn8XcuEK7OCO7PkV0PvYMPveu2rs9PK1bF7
    yt/U6g60BFrGxXrQ6TP5UJyKJnyCp0TffGzXz+UezCro1LQRautb/rwF61Zaw5LG3kMQ
    eCnGpH4ezbSeNbskLACIlzBQy3hyRtt1AyFU1S/nvVYfQxDZpHOiQ1Yhke2LfBl1dR6j
    LHVQ==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Uh7RO03shFRdjHl0ahyOVapB5ArPk3G5dZ8E"
X-RZG-CLASS-ID: mo00
Date: Wed, 14 Jul 2021 09:31:04 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <20210714093104.52f25e70.olaf@aepfle.de>
In-Reply-To: <e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
References: <20210708065435.24515-1-olaf@aepfle.de>
	<e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/dtEIcgnuJ1G1de94jE/LWqc";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/dtEIcgnuJ1G1de94jE/LWqc
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Thu, 8 Jul 2021 12:43:41 +0100
schrieb Andrew Cooper <andrew.cooper3@citrix.com>:

> As for testing, get an account on Gitlab.=C2=A0 I'll add you to xen-proje=
ct,
> after which pushes to your local fork of Xen here will use the
> project-wide runner configuration, rather than using the Gitlab's pool
> of public workers (which amongst other things, lack ARM).

Now there is https://gitlab.com/xen-project/people/olafhering
This should have been a "group" I think, so that I could create a xen.git b=
elow.
Now it is an empty repository. Pushing anything to it fails because it lack=
s a default branch.
Undoing the mistake fails as well because the webui lacks a knob to delete =
this repository.


Olaf

--Sig_/dtEIcgnuJ1G1de94jE/LWqc
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDukrgACgkQ86SN7mm1
DoCpcg/7B+Z89jUAfjCduTlf8SEB4ZFFJKFcuyXVvNt5CSmIycKvXs7AXDB3mDuq
kF9dPlPiSyP4ONRCT1tg7l4CBZRxbBdcCo1rh33jA5/VM03LvZcyVf4LJFS0wiiD
G0N2nZdury+T+YY1VbGwbb2QgrZIehAfVxJNtyAJwUfvta2ASMAaqcSNi4NClq3W
8tCVqH+NRXXkPjI0SRk93douor/tkhSwjhgX2iD9+1+vtEc8HhyPtxV3zFEZ9qQH
mpeqzEA8zjTay5MeRE9KI0Vp9gkMI3C6j7h3EzJ89O/xFAGUwMz/ofRvfW8MSGxd
IzsCdKXMR2tfsLAU60gAwMXUCeVVLL+4x+ZzvKURFcN1nQA9xJ1Pex2lQMMK2s+s
zl9gdsK9AXiZJwcZj1umdUp23csdEoxtYTz4KHRpyEaNzYStodxTcicKfWIQd7SL
U6F/zaFs5kn3wH/P1kWEkMRWqnBRAQ5rBILz1OwW+Xk6NLG88PZm/bHhHF/yBYmt
osca83DHnUe+vi/nbiztjfpiLLQ2MVnnLMnBx4erGeWZa+LXurIRjrpjHVaJl7aO
VJe2QsyAIT28JrTwgN92b6wpyb3/oSsiMJO3Dh9g9N0HAm2lcYEG2/ZDc8bqEPUp
k80RY0AOPoHs+u+C6ocmFWzOAF/gL62nMmZhhLcNSTwJ1VRjwMs=
=+W0D
-----END PGP SIGNATURE-----

--Sig_/dtEIcgnuJ1G1de94jE/LWqc--


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 07:45:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 07:45:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155958.287837 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ZZu-0003yY-Es; Wed, 14 Jul 2021 07:45:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155958.287837; Wed, 14 Jul 2021 07:45:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ZZu-0003yR-Be; Wed, 14 Jul 2021 07:45:10 +0000
Received: by outflank-mailman (input) for mailman id 155958;
 Wed, 14 Jul 2021 07:45:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3ZZt-0003yH-D8; Wed, 14 Jul 2021 07:45:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3ZZt-0007tL-7E; Wed, 14 Jul 2021 07:45:09 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3ZZs-0006KL-Sj; Wed, 14 Jul 2021 07:45:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3ZZs-0003QX-SG; Wed, 14 Jul 2021 07:45:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=JW0aPIBGZ+BG98a7QgyxaSFD/YQD73WY2q2J7fvExfA=; b=nByoE9kdoVtrThtVoe68sG3n3l
	an3Q5ucGtXO83liWA51ajJDnGVHK3B0aYWlo6jTl6mWwtZIPG4Vm48NZXx7+UxWQAIIxa4uJXlXXW
	EXeUEgKqHr6xjIwOKv5DgaYlgbNifSx/uFAQrXy5HB99GTW4ee/OhJHW8D7ieLzhZVXE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163668-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163668: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=91f5d3b41043b8a0c8a5ed00e1c88bca4a777067
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 07:45:08 +0000

flight 163668 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163668/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 91f5d3b41043b8a0c8a5ed00e1c88bca4a777067
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   40 days
Failing since        162368  2021-06-04 15:42:59 Z   39 days  113 attempts
Testing same since   163668  2021-07-14 04:16:29 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3811 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 08:45:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 08:45:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155969.287850 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3aVe-0002rT-9a; Wed, 14 Jul 2021 08:44:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155969.287850; Wed, 14 Jul 2021 08:44:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3aVe-0002rM-6O; Wed, 14 Jul 2021 08:44:50 +0000
Received: by outflank-mailman (input) for mailman id 155969;
 Wed, 14 Jul 2021 08:44:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=e6FB=MG=gmail.com=geert.uytterhoeven@srs-us1.protection.inumbo.net>)
 id 1m3aVA-0002qd-2m
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 08:44:20 +0000
Received: from mail-ua1-f41.google.com (unknown [209.85.222.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b90829df-b39b-4581-a59e-c922957c3e85;
 Wed, 14 Jul 2021 08:44:18 +0000 (UTC)
Received: by mail-ua1-f41.google.com with SMTP id e22so342772uaa.8
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 01:44:18 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b90829df-b39b-4581-a59e-c922957c3e85
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=r5k/nzvm++7I0kjlsxJbLPoLxldn2GkCJzAXrc4Q3tE=;
        b=Ms9XNR735UX2b0GpS4llmBWrHnSDZNnph7Kc4d42NFO313Ja4Y5GoNzFmRAikPfIVI
         zwwQBhF+VR9kSfejWQNQ4f8p+cFmmVyq5F/PWWecP+jazjwGO3qG0zGzi5Pg95Oz07cv
         SFZbkVO0+ovsH7XlfDW1x+q6RHQXK047FPlVczi1BH7gJ+aqeeV9knnPmq39bgaDH4um
         rdvBXHk7NIZ8yh95WSU+irVC1uR64eFSW4hINXvRI9aIZ/QqEo9mVJQO0o8BRqMRG69W
         JwQGHUePzjQ7+sPCv5vuPa8qJUSvw80TzkDtUN9edXrAr4c/aLyTP8SS/01I/gmy7ykg
         JCMQ==
X-Gm-Message-State: AOAM532W04ZWA2qFeQrEKblw3r7jo8lynly4eMKPSHctdKH1XN98+kHu
	TrTGuSsZGJMkeAaE3GU3zdqnqZbtsNEDY4B26dg=
X-Google-Smtp-Source: ABdhPJw+Y3tnjfY/zI+Y1qOhR0PNRzn2MQD3PHuwf/AzIRJfXjUIjP825Ll9FtnbmVsf04QAqWLG0Tq2dErAW2+m0rM=
X-Received: by 2002:a9f:3f0d:: with SMTP id h13mr12412958uaj.100.1626252258156;
 Wed, 14 Jul 2021 01:44:18 -0700 (PDT)
MIME-Version: 1.0
References: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de> <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>
In-Reply-To: <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>
From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: Wed, 14 Jul 2021 10:44:06 +0200
Message-ID: <CAMuHMdW8r6u4O5zv2ee-3=jPP6qwnOSHdSzf8pPE_y=jY3Bn5A@mail.gmail.com>
Subject: Re: [PATCH v4 5/5] bus: Make remove callback return void
To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sascha Hauer <kernel@pengutronix.de>, 
	Alexander Shishkin <alexander.shishkin@linux.intel.com>, 
	Alexandre Belloni <alexandre.belloni@bootlin.com>, Alexandre Bounine <alex.bou9@gmail.com>, 
	Alex Dubov <oakad@yahoo.com>, Alex Elder <elder@kernel.org>, 
	Alex Williamson <alex.williamson@redhat.com>, Alison Schofield <alison.schofield@intel.com>, 
	Allen Hubbe <allenbh@gmail.com>, Andreas Noever <andreas.noever@gmail.com>, 
	Andy Gross <agross@kernel.org>, Arnd Bergmann <arnd@arndb.de>, 
	Benjamin Herrenschmidt <benh@kernel.crashing.org>, 
	Benjamin Tissoires <benjamin.tissoires@redhat.com>, Ben Widawsky <ben.widawsky@intel.com>, 
	Bjorn Andersson <bjorn.andersson@linaro.org>, Bjorn Helgaas <bhelgaas@google.com>, 
	Bodo Stroesser <bostroesser@gmail.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Chen-Yu Tsai <wens@csie.org>, Christian Borntraeger <borntraeger@de.ibm.com>, 
	Cornelia Huck <cohuck@redhat.com>, Cristian Marussi <cristian.marussi@arm.com>, 
	Dan Williams <dan.j.williams@intel.com>, Dave Jiang <dave.jiang@intel.com>, 
	"David S. Miller" <davem@davemloft.net>, David Woodhouse <dwmw@amazon.co.uk>, 
	Dexuan Cui <decui@microsoft.com>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, 
	Dominik Brodowski <linux@dominikbrodowski.net>, Finn Thain <fthain@linux-m68k.org>, 
	Florian Fainelli <f.fainelli@gmail.com>, Frank Li <lznuaa@gmail.com>, 
	Geoff Levand <geoff@infradead.org>, Haiyang Zhang <haiyangz@microsoft.com>, 
	Hannes Reinecke <hare@suse.de>, Hans de Goede <hdegoede@redhat.com>, 
	Harald Freudenberger <freude@linux.ibm.com>, Heikki Krogerus <heikki.krogerus@linux.intel.com>, 
	Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>, Ira Weiny <ira.weiny@intel.com>, 
	Jakub Kicinski <kuba@kernel.org>, 
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>, Jaroslav Kysela <perex@perex.cz>, 
	Jason Wang <jasowang@redhat.com>, Jens Taprogge <jens.taprogge@taprogge.org>, 
	Jernej Skrabec <jernej.skrabec@gmail.com>, Jiri Kosina <jikos@kernel.org>, 
	Jiri Slaby <jirislaby@kernel.org>, Joey Pabalan <jpabalanb@gmail.com>, 
	Johan Hovold <johan@kernel.org>, Johannes Berg <johannes@sipsolutions.net>, 
	Johannes Thumshirn <morbidrsa@gmail.com>, Jon Mason <jdmason@kudzu.us>, Juergen Gross <jgross@suse.com>, 
	Julien Grall <jgrall@amazon.com>, Kai-Heng Feng <kai.heng.feng@canonical.com>, 
	Kirti Wankhede <kwankhede@nvidia.com>, Kishon Vijay Abraham I <kishon@ti.com>, 
	=?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= <kw@linux.com>, 
	"K. Y. Srinivasan" <kys@microsoft.com>, Lee Jones <lee.jones@linaro.org>, Len Brown <lenb@kernel.org>, 
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, Manohar Vanga <manohar.vanga@gmail.com>, 
	Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>, Mark Gross <mgross@linux.intel.com>, 
	"Martin K. Petersen" <martin.petersen@oracle.com>, Martyn Welch <martyn@welchs.me.uk>, 
	Mathieu Poirier <mathieu.poirier@linaro.org>, Matt Porter <mporter@kernel.crashing.org>, 
	Mauro Carvalho Chehab <mchehab@kernel.org>, Maxime Ripard <mripard@kernel.org>, 
	Maximilian Luz <luzmaximilian@gmail.com>, Maxim Levitsky <maximlevitsky@gmail.com>, 
	Michael Buesch <m@bues.ch>, Michael Ellerman <mpe@ellerman.id.au>, Michael Jamet <michael.jamet@intel.com>, 
	"Michael S. Tsirkin" <mst@redhat.com>, Mika Westerberg <mika.westerberg@linux.intel.com>, 
	Mike Christie <michael.christie@oracle.com>, Moritz Fischer <mdf@kernel.org>, 
	Ohad Ben-Cohen <ohad@wizery.com>, =?UTF-8?Q?Pali_Roh=C3=A1r?= <pali@kernel.org>, 
	Paul Mackerras <paulus@samba.org>, Peter Oberparleiter <oberpar@linux.ibm.com>, 
	"Rafael J. Wysocki" <rjw@rjwysocki.net>, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>, 
	Rich Felker <dalias@libc.org>, Rikard Falkeborn <rikard.falkeborn@gmail.com>, 
	Rob Herring <robh@kernel.org>, Russell King <linux@armlinux.org.uk>, 
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>, Samuel Holland <samuel@sholland.org>, 
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>, SeongJae Park <sjpark@amazon.de>, 
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, 
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>, 
	Stefano Stabellini <sstabellini@kernel.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>, 
	Stephen Boyd <sboyd@kernel.org>, Stephen Hemminger <sthemmin@microsoft.com>, 
	Sudeep Holla <sudeep.holla@arm.com>, Sven Van Asbroeck <TheSven73@gmail.com>, 
	Takashi Iwai <tiwai@suse.com>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>, 
	Thorsten Scherer <t.scherer@eckelmann.de>, Tomas Winkler <tomas.winkler@intel.com>, 
	Tom Rix <trix@redhat.com>, Tyrel Datwyler <tyreld@linux.ibm.com>, 
	Ulf Hansson <ulf.hansson@linaro.org>, Vasily Gorbik <gor@linux.ibm.com>, 
	Vineeth Vijayan <vneethv@linux.ibm.com>, Vinod Koul <vkoul@kernel.org>, 
	Vishal Verma <vishal.l.verma@intel.com>, Wei Liu <wei.liu@kernel.org>, 
	William Breathitt Gray <vilhelm.gray@gmail.com>, Wolfram Sang <wsa@kernel.org>, Wu Hao <hao.wu@intel.com>, 
	Yehezkel Bernat <YehezkelShB@gmail.com>, Yoshinori Sato <ysato@users.sourceforge.jp>, 
	YueHaibing <yuehaibing@huawei.com>, Yufen Yu <yuyufen@huawei.com>, alsa-devel@alsa-project.org, 
	dmaengine@vger.kernel.org, greybus-dev@lists.linaro.org, 
	industrypack-devel@lists.sourceforge.net, kvm@vger.kernel.org, 
	linux1394-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org, 
	linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, 
	linux-cxl@vger.kernel.org, linux-fpga@vger.kernel.org, 
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org, 
	linux-i3c@lists.infradead.org, linux-input@vger.kernel.org, 
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, 
	linux-media@vger.kernel.org, linux-mips@vger.kernel.org, 
	linux-mmc@vger.kernel.org, linux-ntb@googlegroups.com, 
	linux-parisc@vger.kernel.org, linux-pci@vger.kernel.org, 
	linuxppc-dev@lists.ozlabs.org, linux-remoteproc@vger.kernel.org, 
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org, 
	linux-serial@vger.kernel.org, linux-sh@vger.kernel.org, 
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, 
	linux-sunxi@lists.linux.dev, linux-usb@vger.kernel.org, 
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org, 
	nvdimm@lists.linux.dev, platform-driver-x86@vger.kernel.org, 
	sparclinux@vger.kernel.org, target-devel@vger.kernel.org, 
	virtualization@lists.linux-foundation.org, xen-devel@lists.xenproject.org, 
	Johannes Thumshirn <jth@kernel.org>, "Rafael J . Wysocki" <rafael@kernel.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 13, 2021 at 9:35 PM Uwe Kleine-K=C3=B6nig
<u.kleine-koenig@pengutronix.de> wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.

>  drivers/zorro/zorro-driver.c              | 3 +--

Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>

Gr{oetje,eeting}s,

                        Geert

--=20
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k=
.org

In personal conversations with technical people, I call myself a hacker. Bu=
t
when I'm talking to journalists I just say "programmer" or something like t=
hat.
                                -- Linus Torvalds


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 08:51:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 08:51:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155976.287862 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ac3-0004WP-4f; Wed, 14 Jul 2021 08:51:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155976.287862; Wed, 14 Jul 2021 08:51:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ac3-0004WI-1Y; Wed, 14 Jul 2021 08:51:27 +0000
Received: by outflank-mailman (input) for mailman id 155976;
 Wed, 14 Jul 2021 08:51:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3ac1-0004WC-TG
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 08:51:25 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3aby-00014A-Q7; Wed, 14 Jul 2021 08:51:22 +0000
Received: from home.octic.net ([81.187.162.82]
 helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3aby-0005mr-K0; Wed, 14 Jul 2021 08:51:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=ce0k8nv9M0UiJcx5V0XHMXMmZ8zrHs/4S+tcueUk5SI=; b=hHszIL3N5Vutz9iVNsu11Sr41W
	fu0xFyZ903xGggDgCKtGYLQhBOEZrli6WgM0NSH74w4YSY4WOyCPyaES9zz6n36wFETsV/fP9SkFd
	0pZGSlzHrcxMqKC7SVW20mex0tQgblLmhwrXEhk9aNOX43ghsf/ShJHnt+daK9aUrdl4=;
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <ce9e3ba3-7e1a-b592-7e9a-e35099c8d483@suse.com>
 <b27990f4-ac98-8221-ddb8-fa4699a0d43b@xen.org>
 <6c6afbc3-4444-7c3b-d6ef-2d3a2baa0b53@suse.com>
 <c7f47a50-b559-f8ba-5ad2-6868c01b6f52@xen.org>
 <51a62c3f-e3ef-f7ec-748f-75ade81f51cd@suse.com>
 <de797e4f-cab9-a31e-4cf7-5e8996cae5bc@xen.org>
 <06a6b8de-520f-1c62-0f5f-a28eb1d9c7fd@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <21064d2f-3c6d-15fc-b967-6e5d10459f46@xen.org>
Date: Wed, 14 Jul 2021 09:51:19 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <06a6b8de-520f-1c62-0f5f-a28eb1d9c7fd@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 14/07/2021 07:11, Jan Beulich wrote:
> On 13.07.2021 18:33, Julien Grall wrote:
>> Hi,
>>
>> On 13/07/2021 17:27, Jan Beulich wrote:
>>> On 13.07.2021 18:15, Julien Grall wrote:
>>>> On 13/07/2021 16:52, Jan Beulich wrote:
>>>>> On 13.07.2021 16:33, Julien Grall wrote:
>>>>>> On 13/07/2021 15:23, Jan Beulich wrote:
>>>>>>> On 13.07.2021 16:19, Julien Grall wrote:
>>>>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>>>>> And I don't think it should be named XC_PAGE_*, but rather XEN_PAGE_*.
>>>>>>>>>
>>>>>>>>> Even that doesn't seem right to me, at least in principle. There shouldn't
>>>>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I think a
>>>>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>>>>
>>>>>>>> Yes, we want to be able to use the same userspace/OS without rebuilding
>>>>>>>> to a specific hypervisor page size.
>>>>>>>>
>>>>>>>>> And thinking
>>>>>>>>> even more generally, perhaps there could also be mixed (base) page sizes
>>>>>>>>> in use at run time, so it may need to be a bit mask which gets returned.
>>>>>>>>
>>>>>>>> I am not sure to understand this. Are you saying the hypervisor may use
>>>>>>>> at the same time different page size?
>>>>>>>
>>>>>>> I think so, yes. And I further think the hypervisor could even allow its
>>>>>>> guests to do so.
>>>>>>
>>>>>> This is already the case on Arm. We need to differentiate between the
>>>>>> page size used by the guest and the one used by Xen for the stage-2 page
>>>>>> table (what you call EPT on x86).
>>>>>>
>>>>>> In this case, we are talking about the page size used by the hypervisor
>>>>>> to configure the stage-2 page table
>>>>>>
>>>>>>> There would be a distinction between the granularity at
>>>>>>> which RAM gets allocated and the granularity at which page mappings (RAM
>>>>>>> or other) can be established. Which yields an environment which I'd say
>>>>>>> has no clear "system page size".
>>>>>>
>>>>>> I don't quite understand why you would allocate and etablish the memory
>>>>>> with a different page size in the hypervisor. Can you give an example?
>>>>>
>>>>> Pages may get allocated in 16k chunks, but there may be ways to map
>>>>> 4k MMIO regions, 4k grants, etc. Due to the 16k allocation granularity
>>>>> you'd e.g. still balloon pages in and out at 16k granularity.
>>>> Right, 16KB is a multiple of 4KB, so a guest could say "Please allocate
>>>> a contiguous chunk of 4 4KB pages".
>>>>
>>>>    From my understanding, you are suggesting to tell the guest that we
>>>> "support 4KB, 16KB, 64KB...". However, it should be sufficient to say
>>>> "we support 4KB and all its multiple".
>>>
>>> No - in this case it could legitimately expect to be able to balloon
>>> out a single 4k page. Yet that's not possible with 16k allocation
>>> granularity.
>>
>> I am confused... why would you want to put such restriction? IOW, what
>> are you trying to protect against?
> 
> Protect? It may simply be that the most efficient page size is 16k.
> Hence accounting of pages may be done at 16k granularity.

I am assuming you are speaking about accounting in the hypervisor. So...

> IOW there
> then is one struct page_info per 16k page. How would you propose a
> guest would alloc/free 4k pages in such a configuration?
... the hypercall interface would be using 16KB page granularity as a base.

But IIUC, you are thinking to also allow mapping to be done with 4KB. I 
think from the hypercall interface, this should be considered as a subpage.

I am not entirely convinced the subpage size should be exposed in a 
generic hypercall query because only a subset will support it. If all 
were supporting, the base granularity would be the subpage granularity 
rendering the discussion moot....

Anyway, we can discuss that when there is a formal proposal on the ML.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 08:56:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 08:56:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155983.287873 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3agV-0005NX-NJ; Wed, 14 Jul 2021 08:56:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155983.287873; Wed, 14 Jul 2021 08:56:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3agV-0005NQ-K6; Wed, 14 Jul 2021 08:56:03 +0000
Received: by outflank-mailman (input) for mailman id 155983;
 Wed, 14 Jul 2021 08:56:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3agT-0005NG-V4; Wed, 14 Jul 2021 08:56:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3agT-00018n-NP; Wed, 14 Jul 2021 08:56:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3agT-0002S0-CC; Wed, 14 Jul 2021 08:56:01 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3agT-0000w5-Be; Wed, 14 Jul 2021 08:56:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=45eIm3BzSMNYALR9DspB9R267mX7WSAuaEMI0aal+Xc=; b=b97yiR0uLv1uqEtoGBkJ61u6QP
	K6aq/ntBn6oqfc4mMj4F18DoqssAwiVZeS4iUcVpzZeF7bJwcpCU+JVkuDqEinV2sxjtFz9SKWZQQ
	NqDCCsPbMcDcnGMwU55esa3sH/LZK8E4Sw1wil+rag+5NiRve7PEuH/hVbWfVwFXSMwU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163663-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163663: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=2a54fc454cf0dbf173d5dc95205febe381cfb7cc
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 08:56:01 +0000

flight 163663 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163663/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                2a54fc454cf0dbf173d5dc95205febe381cfb7cc
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    8 days
Failing since        163327  2021-07-06 12:39:04 Z    7 days   15 attempts
Testing same since   163663  2021-07-13 23:38:00 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Lara Lazier <laramglazier@gmail.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 6651 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 09:34:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 09:34:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155994.287892 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bHb-0001YX-UN; Wed, 14 Jul 2021 09:34:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155994.287892; Wed, 14 Jul 2021 09:34:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bHb-0001YQ-RF; Wed, 14 Jul 2021 09:34:23 +0000
Received: by outflank-mailman (input) for mailman id 155994;
 Wed, 14 Jul 2021 09:34:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3bHa-0001YK-Iu
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 09:34:22 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id aa193c7a-e486-11eb-87d9-12813bfff9fa;
 Wed, 14 Jul 2021 09:34:20 +0000 (UTC)
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2058.outbound.protection.outlook.com [104.47.9.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-2-W_oA9AKPP4GZiMo1qaCqhA-1;
 Wed, 14 Jul 2021 11:34:18 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7149.eurprd04.prod.outlook.com (2603:10a6:800:12e::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Wed, 14 Jul
 2021 09:34:16 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 09:34:16 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR2P281CA0019.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.10 via Frontend Transport; Wed, 14 Jul 2021 09:34:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aa193c7a-e486-11eb-87d9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626255259;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=6fLz+ocurCB/Q2SAWCMNn0ifUD8l/iJCo2rhwh0TUnM=;
	b=kY+wuUWAJ8kaOKRcqu5TdtWRrMevp+d4ZiwAQYnY54pz40T3jX85I9xJRHsZMf40/7x0zO
	EdkPfE//hmfqq789AI4aq+hzo2gJYdYZjlw3jE6t1clfXs0li+b8AkARKL42ejVvNo3jSE
	h2PjBxCdLfG43CRZNPMAXYHISOR85OM=
X-MC-Unique: W_oA9AKPP4GZiMo1qaCqhA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hW9AwonlhNDLaeBc2wlU1zD4tgAo1rbJ/R7opt/mF5k39Se+ZlDVUEzwJc8V/24//9HwNx2zh3+OIFNHua9ID5YW50/gv4ZgabU1p+tLCzN7B5uGlLreM7h9cUEZ/kV+aAqhsKhU0WH0+QfKXGRxMd93P826LCXDWobVMiaS0L4swG3pSdvlUvHUFTuD0DUZPlT5KpyR2v0/FJLrQAUsl7MphgK7gpTz21Ek5nqI8FOSqkVcjN1elqWAoKlfSaJebxFOiaAlKPvArc66qjWe1mvP+DddEBfaC8xXpuQLJd4yXx0mJ3kBApq1RG/xZy71a5Ep/1qzw121G7HwDMcrWA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6fLz+ocurCB/Q2SAWCMNn0ifUD8l/iJCo2rhwh0TUnM=;
 b=T/FcVecBFqFjv0eUyWRmeFT37mD8MwKi2ckEfL44Pn9wTYlUKpNhF2ldHJvZZcnFpmzWfUVBQibIDKrv058u+gNSuWmIrNcGPE1NSqpM78Nz9Zh9KGCNtQNsc9nwCYqgovQCraWOzKugIXEZNao3MKkUlMxkF3KTGhe/Gm5sYchHAPjNQiniQYY+YHER3MIfsQsNKXdECVFnnkirll9zeIb9PYwWWFwZF2LS2qOHKDla6JxMApe7IGBWUI+GjIvheaM1K6sDTwhvksA4gIfOMxycpZVV9xB0QU5+YFwHAW/iSfeKzD1P7hTk4G/xK+cxJLNqyiKD1uW+q42LhCtJLA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 1/4] build: use common stubs for debugger_trap_* functions
 if !CONFIG_CRASH_DEBUG
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
 <2fc1a1416d37b5eed0ebfdeff8bb9dd61bc7acc7.1626136452.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <7468d092-42c5-34a1-74ec-7500e1bc7bf1@suse.com>
Date: Wed, 14 Jul 2021 11:34:14 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <2fc1a1416d37b5eed0ebfdeff8bb9dd61bc7acc7.1626136452.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR2P281CA0019.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:14::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ec77dd82-29ee-42bb-1b0e-08d946aa8c89
X-MS-TrafficTypeDiagnostic: VI1PR04MB7149:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71493B93C3C544EC87AA12D7B3139@VI1PR04MB7149.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	JPs4kbljQcjcjpWkb7jQUGAp1TcQsH+VCi8rkIoV0r+gObEAvddu0doFcs7W3GtITVfk2Pf6l1E/QDWAkelcASj1M2IB1RlPy1BzDYOre/FnDjIwlcssHXe2sbVFK0y/vUTRK7OjN9DSdkHwKMz0sM/O/3AYc5kYKzeFixYzeBXvWj0UvcDf0Cux6eJKnq8GTjSYqeynz9lX7fZw1kO24qe+Cw5tGgz6M6r4LOylzfMxpfTceRDKnX5b36jlAkZqYPCJ3R5VflQGMTRnRfx9bxzUAzVxMlx55p4mNVqX7EHwg0lgNmbowHWmTJjZtpDRwaFx+rNm7VJx2oN9MZpmYJddlKEO9uUB2JlDMdTGGtI/8jqvVpvBKAVtUrDB/CW1K4UtipYR0OorUAFIuBIp+SYHXONWb+3InHUyp6VHOglmBByu7m5EMRBQx7SJx9q76VEEMFcBai3t90RxLxMa33kqguruXnkCeeAwQDa+S5x3ogxlLGFJEscJ7MkE2LEcjiUEh1NhwXZh3d5CZfujrcGt+CCBbw7bcif6Ivr1JtcTEeg+QEA85/gH/Mq5bOuptS7E1tiLV7Qb4eM3Pxe30jw9xPBjlJEgTPVL6QOJE2iSsnE5IYjzL0cKDjdffnGXSw3n+M9r/9+RqPTywmS4TSJR1NYXHuxpS3Gh4gkBVZvMHDZ664ptdQeUhKEtsfcTyp00yrHZUjHUYrJExQ/NMF+G2B8Wy05JY2ZjzXnGIhf6tGW6a2ah1CNRhS7p8izGHM7dw5i2DUlx52YRkZ8iREK8zuFTJ4Vnw3jnCCqgdCPhN0s//3ys43gKUUHfwLgU
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(39860400002)(396003)(136003)(376002)(346002)(53546011)(31686004)(2906002)(86362001)(478600001)(66946007)(36756003)(6486002)(7416002)(8676002)(31696002)(316002)(66476007)(8936002)(26005)(5660300002)(54906003)(956004)(4326008)(2616005)(83380400001)(38100700002)(66556008)(16576012)(6916009)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ec77dd82-29ee-42bb-1b0e-08d946aa8c89
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 09:34:16.7265
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yu0kZXL0eg7HfrIVniBO1tR/pAL6Yl4MyLdnalTRG/DYbvI0WoAhA0Hqfql8xybuu9NlVowLd4D3uZSwl9hX/w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7149

On 13.07.2021 03:59, Bobby Eshleman wrote:
> --- a/xen/arch/x86/gdbstub.c
> +++ b/xen/arch/x86/gdbstub.c
> @@ -18,7 +18,9 @@
>   * You should have received a copy of the GNU General Public License
>   * along with this program; If not, see <http://www.gnu.org/licenses/>.
>   */
> -#include <asm/debugger.h>
> +#include <asm/uaccess.h>
> +#include <xen/debugger.h>
> +#include <xen/gdbstub.h>

Here and in at least one more case below: Our usual pattern is to
have xen/ ones before asm/ ones. And (leaving aside existing
screwed code) ...

> --- a/xen/arch/x86/hvm/svm/svm.c
> +++ b/xen/arch/x86/hvm/svm/svm.c
> @@ -58,7 +58,7 @@
>  #include <asm/hvm/trace.h>
>  #include <asm/hap.h>
>  #include <asm/apic.h>
> -#include <asm/debugger.h>
> +#include <xen/debugger.h>
>  #include <asm/hvm/monitor.h>
>  #include <asm/monitor.h>
>  #include <asm/xstate.h>

... we also try to avoid introducing any mixture. Plus ...

> --- a/xen/arch/x86/hvm/vmx/realmode.c
> +++ b/xen/arch/x86/hvm/vmx/realmode.c
> @@ -14,7 +14,7 @@
>  #include <xen/sched.h>
>  #include <xen/paging.h>
>  #include <xen/softirq.h>
> -#include <asm/debugger.h>
> +#include <xen/debugger.h>

... we strive to have new insertions be sorted alphabetically. When
the existing section to insert into isn't suitably sorted yet, what
I normally do is try to find a place where at least the immediately
adjacent neighbors then fit the sorting goal.

Sorry, all just nits, but their scope is about the entire patch.

> --- /dev/null
> +++ b/xen/include/xen/debugger.h
> @@ -0,0 +1,81 @@
> +/******************************************************************************
> + * Generic hooks into arch-dependent Xen.

Now that you move this to be generic, I think it better also would
indeed be. See below.

> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; If not, see <http://www.gnu.org/licenses/>.
> + *
> + *

Nit: No double blank (comment) lines please.

> + * Each debugger should define three functions here:
> + *
> + * 1. debugger_trap_entry():
> + *  Called at start of any synchronous fault or trap, before any other work
> + *  is done. The idea is that if your debugger deliberately caused the trap
> + *  (e.g. to implement breakpoints or data watchpoints) then you can take
> + *  appropriate action and return a non-zero value to cause early exit from
> + *  the trap function.
> + *
> + * 2. debugger_trap_fatal():
> + *  Called when Xen is about to give up and crash. Typically you will use this
> + *  hook to drop into a debug session. It can also be used to hook off
> + *  deliberately caused traps (which you then handle and return non-zero).
> + *
> + * 3. debugger_trap_immediate():
> + *  Called if we want to drop into a debugger now.  This is essentially the
> + *  same as debugger_trap_fatal, except that we use the current register state
> + *  rather than the state which was in effect when we took the trap.
> + *  For example: if we're dying because of an unhandled exception, we call
> + *  debugger_trap_fatal; if we're dying because of a panic() we call
> + *  debugger_trap_immediate().
> + */
> +
> +#ifndef __XEN_DEBUGGER_H__
> +#define __XEN_DEBUGGER_H__
> +
> +/* Dummy value used by ARM stubs. */
> +#ifndef TRAP_invalid_op
> +# define TRAP_invalid_op 6
> +#endif

To avoid the need to introduce this, please flip ordering with the
subsequent patch.

> +#ifdef CONFIG_CRASH_DEBUG
> +
> +#include <asm/debugger.h>
> +
> +#else
> +
> +#include <asm/regs.h>
> +#include <asm/processor.h>
> +
> +static inline void domain_pause_for_debugger(void)
> +{
> +}
> +
> +static inline bool debugger_trap_fatal(
> +    unsigned int vector, const struct cpu_user_regs *regs)

I'm afraid the concept of a vector may not be arch-independent.

> +{
> +    return false;
> +}
> +
> +static inline void debugger_trap_immediate(void)
> +{
> +}
> +
> +static inline bool debugger_trap_entry(
> +    unsigned int vector, const struct cpu_user_regs *regs)
> +{
> +    return false;
> +}
> +
> +#endif /* CONFIG_CRASH_DEBUG */
> +
> +#ifdef CONFIG_GDBSX
> +unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
> +                        unsigned int len, domid_t domid, bool toaddr,
> +                        uint64_t pgd3);
> +#endif /* CONFIG_GDBSX */

I'm afraid this whole construct isn't arch independent, at least as long
as it has the "pgd3" parameter, documented elsewhere to mean "the value of
init_mm.pgd[3] in a PV guest" (whatever this really is in a 64-bit guest,
or in a non-Linux one).

But I don't see why this needs moving to common code in the first place:
It's x86-specific both on the producer and the consumer sides.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 09:52:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 09:52:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.155999.287903 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bZO-0004At-FT; Wed, 14 Jul 2021 09:52:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 155999.287903; Wed, 14 Jul 2021 09:52:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bZO-0004Am-CV; Wed, 14 Jul 2021 09:52:46 +0000
Received: by outflank-mailman (input) for mailman id 155999;
 Wed, 14 Jul 2021 09:52:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3bZN-0004Ag-6O
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 09:52:45 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bfd0ac6e-80b7-4785-9e03-4b8a342f0367;
 Wed, 14 Jul 2021 09:52:43 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2051.outbound.protection.outlook.com [104.47.4.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-17-tntHHT3ZMTeNMNrdGXLClg-1; Wed, 14 Jul 2021 11:52:41 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5168.eurprd04.prod.outlook.com (2603:10a6:803:56::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Wed, 14 Jul
 2021 09:52:40 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 09:52:40 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0021.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::11) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.12 via Frontend Transport; Wed, 14 Jul 2021 09:52:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bfd0ac6e-80b7-4785-9e03-4b8a342f0367
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626256362;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=hdAtoLSIEf2zCB1qHtB+BxP6hO2ntve1Eqxc9+KcE38=;
	b=VTIcqnLqUOfNzenjyV4YEZ0oEdHJxiZZjVajCoRXDA0EAgfUbBX6WYzAVHRzL5hso0zbdL
	/PGhumsuqqeJFd4GE3hX9jLUiNEmlHpoiwY3iwXAnUaigMkXeeHW5MI9ndwq66R98uLinm
	uvhJCHTjOA2yYi62+7y3PjnGB4RFYKc=
X-MC-Unique: tntHHT3ZMTeNMNrdGXLClg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ImRvnlQQCLb+q8HKlsNc/UMdzV85zxtq6Dbrbp7JNN44dusbEA4OXw8XNB0a1Z5RBgOIuJh/182WTW2Wa1rnFxWj1OYRh1BsI4t7LZaGhGp4HbJYYGbYnkvd5QycRQzz4ZBdBgu9J3Les7rXn99NjJOKpAIP3GHz4y1Nsc2AH0oS7wcHNjLpuyr9CnW5hsrzjzjPPF9X9V2KKtTTfXBb6p+2gjyKCtfYDYV2XB8ZSMyGVPBuYOt61aeyD+kyLwZ9GTPIc+z6zMDcBcVfQkW1DO9HGMvFyKx6pcHUJFufMKx6KUslJytN70g2EOFAS+gnhm1FZtKN/X8lginnT2GPcA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hdAtoLSIEf2zCB1qHtB+BxP6hO2ntve1Eqxc9+KcE38=;
 b=FBpONERSYbh7/U0bwa6/Bmdi18oSyO/11azL7MI7MSYHdF9sjpW5aPA+ao3pQO7Pcy1Wrzw+gmoCXATVDOFf5FzEvaTbVfo98FaNrEz+6qnpdMvXWWHSrY59+UtWShPD/kFGK/jcoW+pPNGZ+ZKLb4RB9a29JfKlIiYuRfFHlOg3+W1Wf+jsS/wMvn4aj3eOQY9NFVzqI/lI62S250ovm0ucaQAq0W5x+KK8D5P3wZL54R/czgKncgEYFd+YLmyZXVRG3IYZiNrlwkWl4XNhcBr6H9WsnwTRPPjf3F4D4zlBKLNHU/HK0OT4oh/sh/wNOXQZBvXSL4+/mGFiWiTTgA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 3/4] x86/debug: move debugger_trap_entry into debugger.c
 not inlined
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
 <02355502c796b500a6b7e9e60b903d245d2ece23.1626136452.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <fd256446-a8b0-3431-8962-8df3bc8477e6@suse.com>
Date: Wed, 14 Jul 2021 11:52:38 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <02355502c796b500a6b7e9e60b903d245d2ece23.1626136452.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR3P281CA0021.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1c::11) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6ef7ce17-976a-4871-27d8-08d946ad1e67
X-MS-TrafficTypeDiagnostic: VI1PR04MB5168:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5168E3795D4ED6476AA5417CB3139@VI1PR04MB5168.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	easCDhQi5cI4j5A6UbDCmCwoEzFH6A1daEa+kYrNHSZyZyx3cL5yuUMPDhmXGuVctl9JY6yVdIvSbVkxf6DrPUjvdRW/JTPLLXVcWlvwi0QYL10/jlPKpDYK3m/VLAy93nA/huMZpipIyp7ZcM/Xj+Glp3wUfghCO1nD8Iyxf8LlplXJgQhbuX5ez8Me7uTH5gn5vCJ9D42sIgmDrtCmYMdjjM2RiYKxMYsREt2Yzs5co2CgABRYkELlPRGtobxfIpyMEVOqJyFnvnLDs3rvLHV4su9GrZkhldqz1dlyoNax+u+PBOwNTxUceNExNtdwoDHRW1l9JbdmA7MK8DaWzAyH9oVDy7DcIRbo9t/KYBe5fPYNM/AottYeKGLatnOnjQx+zqcZ9MNchF+UVuzGeJUW50AoQ6QSvMwrYgKRZTpBR51SbZicHxizpIVUZvljatbOozcok4t/XH72N+HSE2poCsEQbpZnEcf8cWPAbtJGQA4NeN8TeZANQkTjLxUsx4JbNqgTycgN+hk9LaD8fSg2CvtvLzjdteZXIqe6vJRC+rmcNVx+x6uPW0Hy/YoV2u5P9UGjEOfNsOuf4QQfrkd1EfeTnOw22vk7oAWPOWku8ewM8KuRSI7uldpkTk4BnDKGyM4Hs4eKQAhW0TqAtzuQm4ouLA/9vkVrUJlQ1l6j7qTIawzrjd5U27tixniZYpNSmksv8XUM5LWP5YWTUKyvqwkc4TeC7RmAN9nNeeVyLhiBGX1v5HJvUbTlFshlYSd6ZASgmL/uaaFwTS74d/J0e7sYHvOXp6rblJYo9IA/3quv8clHmJf/GM+sSxCX
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(39850400004)(396003)(376002)(366004)(38100700002)(8936002)(6916009)(7416002)(5660300002)(2616005)(31686004)(956004)(86362001)(8676002)(4326008)(54906003)(36756003)(66556008)(26005)(66476007)(16576012)(53546011)(2906002)(31696002)(186003)(478600001)(83380400001)(6486002)(316002)(66946007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?alhsK0x1MXV0NFZQK3p0RlUwSHVkK3lJQmVlV0tUY1N1NWdwaUpvYnFTSDZ0?=
 =?utf-8?B?WjZoL1dONjJ1VzBCUmY4bVdSVzhCckJnTW5DMEFmZzM3SnROMnVLMjBabnRk?=
 =?utf-8?B?dWc4Wm45aTRXOXNFcG1wRTRsY0JaMlN5alhERU9aMXpaeWdzeDEzNFAzMVps?=
 =?utf-8?B?T0FoMkRzQmpYcWd4UjV0NS83b1lNRHNSYjVNTEp5akovU2FHRXl4Zm4zR0tj?=
 =?utf-8?B?TzFheGNLNXdXaHRyTXoxdytkL0tSZGUvRE1sWDRxWHh6ZGxnTUdrWFh1M1lI?=
 =?utf-8?B?amxCYWpaRmx3cFM0V3dPYmFNY2FWRlIveXZOVUx2UmlFLzI2SGRJYW1md01y?=
 =?utf-8?B?MDZyTGI2TWZHdm9rTTgxeGdhYk1KbWtoa253NHJKdS9wamw4Q2drUTQxcUk2?=
 =?utf-8?B?L0JaWm1vclpKZlVyc2Y4UFVJWUlSclhpenY1ZFJ3STN6dk84NGdycHAvYmtu?=
 =?utf-8?B?aEhvdko5bUw5U2ZxRVQyQndVMTU2UC82cmVYN2JWbFhyUUJVNUpyL0lrUkJK?=
 =?utf-8?B?OFExYXdxTUVMWUtVMjc1UktzUVgyR1dVVzhNeEd5TDEreDBhbHZxNXg0alRH?=
 =?utf-8?B?VkFOWnlwWXF3R2NVTTZSdjV2NFRnRU1WNm5hVHVyWTBtSTAwS1hFVzBJZ0VQ?=
 =?utf-8?B?dldTZjk4dTAxTnpZOGtFOWN5UmJlR1F5UTdhMmpKSUt6V2Jueno5MUpReElj?=
 =?utf-8?B?QkFYNlJQZWM5dmRuVHgyOEZOTW11R2lJZzZFdGNFRXV2ellURTl2K0IyWUN2?=
 =?utf-8?B?MERUYzVVWThDMnk2TlB5MlpyeDY1SzRpY2ZnRTB1d2dCcGdPNFlGL1B6ZHM3?=
 =?utf-8?B?Zm54T2pHZTlBVkJwQytyU2Ewc2ZFaVpjVm9Oa2diWUJadkpML3F3cm5mSTVu?=
 =?utf-8?B?S1BLN3d1WHN1QU5ISFVHSmYvYW5LTnNFMzZrcXgwTHFNNU1uM1cyS3VPOFpW?=
 =?utf-8?B?VkFycUxDYm1QZHo3dmNLYzlDVmhaWDRuS2FXZERqOTFsaE00aGNNSEF2WkpW?=
 =?utf-8?B?L3p5Z1BNNEhPczhnbll0ZzJ1UTIvd1RpckJiUXVvdHRqaVlCVXZvRTNKZ215?=
 =?utf-8?B?OFI1LzRaYVZvL0hFZGk0aXpKOHBuMW1yQmxOMk9STWM3VjBWMUp0aFRCN1Zq?=
 =?utf-8?B?RXQ2dGVKMzBUVW1Fb1NjT3ZaaEZUODArUi9kSkxzVmVubjhyY3g3bUZiSkFB?=
 =?utf-8?B?dmlMK3hubXBhaHYvK1NaWDkvem85Y2F6eDFoa0wxcWplUFpIcU12alhZWk1U?=
 =?utf-8?B?SC9oMndIQSs2REYrWUVRY0R1YityNkhTQ2RIaVJmM1RackE2dzlESG1DZmZO?=
 =?utf-8?B?MGxlL1BVOUlHbm5iVG1PbVVkN0xRNUhmSlZZSllaVjAzWTViOGY0QzJsajlx?=
 =?utf-8?B?aWEwMC95TExpSmJYelRRaE9oYTVpUEhqUTU2cVBRdkU4bjg1VzJsRDlTTW1J?=
 =?utf-8?B?QTV1Qy91TnRkQ21xWExtYlZvVFhQb2o1Mms3VXNIZ2o0Zy9CMS9UNzJ0UFRn?=
 =?utf-8?B?ZDJUMnM2T3p4TVNabzBnaEhLd2owbHNIUGM3bjlLN2w3N25XVHFlZjVEVWlF?=
 =?utf-8?B?aU5NbVVxcG9oSE8wam12MXMwdlhKdzJrNzV0aGhqVjBmU3ArSTRMMWZ2QlZw?=
 =?utf-8?B?RjBIZE8vc2RWUmtPQWtVcVhYZkFEN1dhb2FFUGV4TGpvaXNvazkwMXJLUHo0?=
 =?utf-8?B?ZGtlT2tqWFA1ekF0dGYycXJIN2gxYUxVc01yV0l0ODNWaktWU2xTMUdBaHhi?=
 =?utf-8?Q?kOpKg7rSt6x2HDKUpWyhBle0SyLTfjCIhHxhnOM?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6ef7ce17-976a-4871-27d8-08d946ad1e67
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 09:52:40.4528
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 8GPrNrzWHaPsLZdsmhmDlAPr/aHowvZ9DamW3JGsAWc27Dzlrn8SVWocDvLlUMKke7g8122e5KXYu2/5Hj/NeQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5168

On 13.07.2021 03:59, Bobby Eshleman wrote:
> The function debugger_trap_entry() is rather large for an inlined
> function.

Well, yes, perhaps.

> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -32,6 +32,7 @@ obj-y += emul-i8254.o
>  obj-y += extable.o
>  obj-y += flushtlb.o
>  obj-$(CONFIG_CRASH_DEBUG) += gdbstub.o
> +obj-$(CONFIG_CRASH_DEBUG) += debugger.o

Please insert at the appropriate location, rather than breaking the
(mostly) alphabetical sorting.

> --- /dev/null
> +++ b/xen/arch/x86/debugger.c
> @@ -0,0 +1,41 @@
> +/******************************************************************************
> + * x86 crash debug hooks
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <asm/debugger.h>
> +#include <xen/domain.h>
> +#include <xen/event.h>
> +#include <xen/sched.h>
> +
> +bool debugger_trap_entry(
> +    unsigned int vector, struct cpu_user_regs *regs)

As you have to touch this anyway, can you please bring it in line
with the stubs introduced in the first patch, by constifying the
2nd parameter?

> +{
> +    /*
> +     * This function is called before any checks are made.  Amongst other
> +     * things, be aware that during early boot, current is not a safe pointer
> +     * to follow.
> +     */
> +    struct vcpu *v = current;

This one can (and hence better would) gain a "const" as well.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 09:55:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 09:55:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156004.287914 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bbk-0004nf-Sq; Wed, 14 Jul 2021 09:55:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156004.287914; Wed, 14 Jul 2021 09:55:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bbk-0004nY-Pr; Wed, 14 Jul 2021 09:55:12 +0000
Received: by outflank-mailman (input) for mailman id 156004;
 Wed, 14 Jul 2021 09:55:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3bbj-0004nS-UW
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 09:55:11 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 57754b66-768a-4607-8a53-924b02ae7ed1;
 Wed, 14 Jul 2021 09:55:11 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2058.outbound.protection.outlook.com [104.47.4.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-DtxubS-9N3CEd8p9VMKlRw-1; Wed, 14 Jul 2021 11:55:08 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5168.eurprd04.prod.outlook.com (2603:10a6:803:56::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Wed, 14 Jul
 2021 09:55:07 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 09:55:07 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FRYP281CA0014.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::24) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.11 via Frontend Transport; Wed, 14 Jul 2021 09:55:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 57754b66-768a-4607-8a53-924b02ae7ed1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626256510;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=fedO57SkFDDXrNnP/dbrn9xGLKzSS01cyqPY+97YwKg=;
	b=XA2KUCM4elCgnpaPycoF8kh3f0oPmiwYL2BLtilOPQfzb7F1Z3l8r97NtqQA6Mbrn1qe3u
	eQGpS7KHIbarOIUCgiSjxMQfG+8KhFCOJXSvoecIMZNaceI9OnOHQfwD/Ic80TWIg/Fu6z
	nd5YLxUAYeHC3KADcvQKblctHFW+f+Y=
X-MC-Unique: DtxubS-9N3CEd8p9VMKlRw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CoUYdxNVnW2+saz9Qy0vxWeaHna8UQrO/YdTnxM001lxuri07/gO710Fywg7bRDrpRcRkhOTiivtIm/a1ELRMbqSDPEtXtoK8jbpjfzfe0UM5n1Jk7RiIRXLTfQgqyFgr30ceyACpZjLthWE2XYKxGRx/ErXR+QWiROHc+l9/+Yg4XNyAZGrNqh6bWO+P0Eddb59jB5JMwyzF5+xowGYPU1V4+AJ3+0rv9bEc816awhIibzTwnKZLdh5T6XIrrRt4c4MOGR1yAXZ9I3Mp64jQis5kIxiKwKwRAoGbjwrgVJfoCS6kcgQDQIwn8lOfkDjwvV8NrDjkT0rWb/65T0mGA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fedO57SkFDDXrNnP/dbrn9xGLKzSS01cyqPY+97YwKg=;
 b=JYaa5J/UpV08kZ9yMsAYUkNGrZXeHmq4O1/ncVpiqaKRy2TJEyid38Y/y3QrdrbjoBteDDCrX01Icd7K/u4PDwYtnDuUu+AFk2jYcvzOoWJp2AJLF7dzyIKwDva0hyzfZsbTw2fZbXcKtrSOE+nLn7qTC2Bw1SRuG/XAw9XCg6/ff42Y7iD3JLFZCqAWVy6WqVDcBFKVYIgIhr+oQPLaagtcrvULb7KLwN+hitqbqwYHZvYS3AgsqhPgtww82b5mtZ2mfW30pNnJSJQxRUqJdz3Xo7k+BGOT1FZFyER+tmlqQkdPz50FbxrVH3XgeypDiSHpeUH75OdgIJpFlpMo9g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 4/4] x86/debug: move domain_pause_for_debugger to
 debugger.c
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
 <b7b3169d191c3ec86a9cf5267e661aac9c17559b.1626136452.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <201ea9f0-e46d-e381-5fb0-15a8a340ce70@suse.com>
Date: Wed, 14 Jul 2021 11:55:05 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <b7b3169d191c3ec86a9cf5267e661aac9c17559b.1626136452.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FRYP281CA0014.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::24)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 10d7dab9-f5a0-418f-abb8-08d946ad762b
X-MS-TrafficTypeDiagnostic: VI1PR04MB5168:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB51683E33E6D87FC9F2996989B3139@VI1PR04MB5168.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:170;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	0txHouAqvJDvMJXr22uDNJo58ggiC3OSCiOKDxr998X+IpJDZhvUH1XClclkjDJZZ1bQrkVdfg67lFHp6fhGNVoQAZslE29d72TriaFS12LbEEOpmm5zlDGbvZbGMF4AUHcozPnq8OQCra6b4u984iCmm2G6o432ZyfsM29u21gOzY7BFAdMqApgvtwy2e0fbUoWnbzqRdUevk8n73KSsHgOlM4r+iaLiUWwgjeDgsJxIK1fU9ttPUuer0OoFFMaDGLbcaOmqka8GUxSwgVRJpeet8z0aeENHq22sqihAxVBYNu26hlChXfbh7+jpfba6dIvbUvXyGynllOXYynM5OhMQp062zhkq/y6Xn0sg3fprmRMbQ5ED4CZCi0+cEUZ+qtlbXCTo/xrUdepbcn2dzXFOklYbAeClq4im+CBbHX/xaAK7OKjL4dfZjIFZaUmnJbUQAgS3/KDVIA/6Zw5uNUeW+QuSPwomPEvRavFUJTe9/kwV1B3yFLpIVUaJr+EDnrQzImy7CV2Sss+16NZ9nSK3qCygfq6FUftdNj+7ynO9g0uKFhJVNrN/jUwDYukdhIAIW2B0HOenqc4NtruUfyv6M8lRLhrW2LwzNpvOudH+XOsIZyzV/FJHgkhrmfxIz2qa9dduLujLfY7BeOpVKSDnHKVKq/aDyGIEiaU4ouXOqcOKb12DKRzeOQ9/dFs0Aow0VN3FOXec7f1da3dD2nqpWp1HeOGQPBATUUZ72w=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(39850400004)(396003)(376002)(366004)(38100700002)(8936002)(6916009)(7416002)(5660300002)(2616005)(31686004)(956004)(86362001)(8676002)(4326008)(54906003)(36756003)(66556008)(26005)(66476007)(16576012)(53546011)(4744005)(2906002)(31696002)(186003)(478600001)(6486002)(316002)(66946007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 10d7dab9-f5a0-418f-abb8-08d946ad762b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 09:55:07.6685
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ozExHOLlAsxvMV7NmETKurW7SV6Flfkdvv2kZ+Ng63L/D1//X1hpVkBvhJWAO+RlzKbeR26hGLlwTZ+8J7gLDA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5168

On 13.07.2021 03:59, Bobby Eshleman wrote:
> The function domain_pause_for_debugger() is conditionally compiled if
> CONFIG_CRASH_DEBUG=y.  Instead of placing an extra #ifdef inside
> domain.c, this commit moves domain_pause_for_debugger() into
> x86/debugger.c which is only built by Kbuild given CONFIG_CRASH_DEBUG=y.
> 
> Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
preferably with ...

> --- a/xen/arch/x86/debugger.c
> +++ b/xen/arch/x86/debugger.c
> @@ -15,6 +15,18 @@
>  #include <xen/event.h>
>  #include <xen/sched.h>
>  
> +void domain_pause_for_debugger(void)
> +{
> +    struct vcpu *curr = current;

... "const" added here while you're moving this anyway.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 10:07:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 10:07:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156010.287925 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bo1-0006o5-57; Wed, 14 Jul 2021 10:07:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156010.287925; Wed, 14 Jul 2021 10:07:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3bo1-0006ny-26; Wed, 14 Jul 2021 10:07:53 +0000
Received: by outflank-mailman (input) for mailman id 156010;
 Wed, 14 Jul 2021 10:07:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3bnz-0006no-25; Wed, 14 Jul 2021 10:07:51 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3bny-0002QJ-RK; Wed, 14 Jul 2021 10:07:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3bny-00051b-Ja; Wed, 14 Jul 2021 10:07:50 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3bny-0005PF-J2; Wed, 14 Jul 2021 10:07:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=in7jPKPNeiVXueRPU0N/OxdohKUNMFXYSbpjM+Cdvdg=; b=x5F2aEMKFY4w1mLYenyKUFPmXV
	R5ShCGvG/S0J5ybpAJ1SJ4wvpnsbYjg6X5TweIJpH2LKpkFqVtg0C9FLuw+2uEN1Zmd2dV2xZYzuT
	wWxZGKR50nm+LrwVEug2K6FZv0AwGBLCYvKIiuxDdit3KM0uLs6edGUvl3YZWOnz2c6A=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163679-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-coverity test] 163679: all pass - PUSHED
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 10:07:50 +0000

flight 163679 xen-unstable-coverity real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163679/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  6de3e5fce5e2a3c5f438e8e214168dd3a474cbbf

Last test of basis   163562  2021-07-11 09:18:28 Z    3 days
Testing same since   163679  2021-07-14 09:18:29 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Tamas K Lengyel <tamas@tklengyel.com>

jobs:
 coverity-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/xen.git
   6de3e5fce5..3a98c1a4ce  3a98c1a4cec1a302beaddf944ded240b61173f87 -> coverity-tested/smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 10:27:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 10:27:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156018.287946 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3c7A-00014d-0q; Wed, 14 Jul 2021 10:27:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156018.287946; Wed, 14 Jul 2021 10:27:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3c79-00014W-T0; Wed, 14 Jul 2021 10:27:39 +0000
Received: by outflank-mailman (input) for mailman id 156018;
 Wed, 14 Jul 2021 10:27:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/+8P=MG=arm.com=sudeep.holla@srs-us1.protection.inumbo.net>)
 id 1m3c6Z-00013Q-3e
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 10:27:03 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id e2d9be36-e026-4d30-a2d8-d63594d36c4e;
 Wed, 14 Jul 2021 10:27:00 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3209A1042;
 Wed, 14 Jul 2021 03:27:00 -0700 (PDT)
Received: from bogus (unknown [10.57.79.213])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2FF633F774;
 Wed, 14 Jul 2021 03:26:27 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e2d9be36-e026-4d30-a2d8-d63594d36c4e
Date: Wed, 14 Jul 2021 11:25:29 +0100
From: Sudeep Holla <sudeep.holla@arm.com>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	Sudeep Holla <sudeep.holla@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hannes Reinecke <hare@suse.de>, Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Jaroslav Kysela <perex@perex.cz>, Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>, Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>, Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>, Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>, Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>, Ohad Ben-Cohen <ohad@wizery.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>, Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>, Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>, Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>, Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org, dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net, kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org, linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org, linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org, linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	nvdimm@lists.linux.dev, platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org, target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org, Johannes Thumshirn <jth@kernel.org>,
	"Rafael J . Wysocki" <rafael@kernel.org>
Subject: Re: [PATCH v4 5/5] bus: Make remove callback return void
Message-ID: <20210714102529.ehwquc2s2qlbccyg@bogus>
References: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
 <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>

On Tue, Jul 13, 2021 at 09:35:22PM +0200, Uwe Kleine-Knig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 

[...]

> diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
> index 784cf0027da3..2682c3df651c 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -116,15 +116,13 @@ static int scmi_dev_probe(struct device *dev)
>  	return scmi_drv->probe(scmi_dev);
>  }
>  
> -static int scmi_dev_remove(struct device *dev)
> +static void scmi_dev_remove(struct device *dev)
>  {
>  	struct scmi_driver *scmi_drv = to_scmi_driver(dev->driver);
>  	struct scmi_device *scmi_dev = to_scmi_dev(dev);
>  
>  	if (scmi_drv->remove)
>  		scmi_drv->remove(scmi_dev);
> -
> -	return 0;
>  }
>  
>  static struct bus_type scmi_bus_type = {

Acked-by: Sudeep Holla <sudeep.holla@arm.com>

--
Regards,
Sudeep


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 10:50:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 10:50:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156038.287965 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3cSr-0004N4-09; Wed, 14 Jul 2021 10:50:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156038.287965; Wed, 14 Jul 2021 10:50:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3cSq-0004MW-Qt; Wed, 14 Jul 2021 10:50:04 +0000
Received: by outflank-mailman (input) for mailman id 156038;
 Wed, 14 Jul 2021 10:50:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3cSp-0004Dm-UC; Wed, 14 Jul 2021 10:50:03 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3cSp-000380-Mu; Wed, 14 Jul 2021 10:50:03 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3cSp-0007uf-Ft; Wed, 14 Jul 2021 10:50:03 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3cSp-0006hz-FM; Wed, 14 Jul 2021 10:50:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jXBT2FQMkSUQPwCWGUxled1FSwN3c5QpT7SqhxLSbr4=; b=WCknSlnHpy7RlihDFeONefDkDO
	6GR5QwkJZOOLMxT2IO8gBLqIUUNwTqFtsEg2byAjz2tOj/zZ1OqUnVqc6SN182v8usmzWYmf6Ja7W
	6+vrva4ms5V2TD7SAvf5g7DMOSNawaV/NM8nyLM3fnZ05Dcc0hlSR3NjdPERFWnqY/nY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163669-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163669: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=772a9875f7dfa636498e281691684799971e3422
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 10:50:03 +0000

flight 163669 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163669/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              772a9875f7dfa636498e281691684799971e3422
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  369 days
Failing since        151818  2020-07-11 04:18:52 Z  368 days  360 attempts
Testing same since   163669  2021-07-14 04:18:48 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64547 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 15:35:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 15:35:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156088.288014 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3gvK-0005Tm-Az; Wed, 14 Jul 2021 15:35:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156088.288014; Wed, 14 Jul 2021 15:35:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3gvK-0005Tf-7y; Wed, 14 Jul 2021 15:35:46 +0000
Received: by outflank-mailman (input) for mailman id 156088;
 Wed, 14 Jul 2021 15:35:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3gvI-0005TW-EA
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 15:35:44 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 085e39dc-c89c-4f5a-88c3-746076012738;
 Wed, 14 Jul 2021 15:35:42 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2055.outbound.protection.outlook.com [104.47.13.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-29-4ru8fW6JO9mBN_MKcg86jQ-1; Wed, 14 Jul 2021 17:35:40 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3536.eurprd04.prod.outlook.com (2603:10a6:803:2::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Wed, 14 Jul
 2021 15:35:38 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 15:35:38 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P250CA0011.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:57::16) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Wed, 14 Jul 2021 15:35:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 085e39dc-c89c-4f5a-88c3-746076012738
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626276941;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=pegp8Irz1OROPOni0AM8BAGfGr9mi2RFlugcUiMNSXg=;
	b=TtZU83HMzcvsXZkRk/u3irtOe1fQYlhr96rYpu2vVAmBHLFefoU9cbqLMCHTh+wM3+YSfb
	Z9kLjFrHCA270c4inUDzVSDm+S8O+U6ruq1ql7UCuOewy4IGF6a454J2tcXrVRLbkMtyA+
	jNstyka4/KJKEoPSL9WpCCTY01yTvvE=
X-MC-Unique: 4ru8fW6JO9mBN_MKcg86jQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kEEXzybuDolW7lVcYe89MxoAJgdNh5OO7XIrdM1qa5OAnXGu+snprY3G9TFoCCwYT4/1SKKV6Zn4RZGblB8bKd6SUKnyOq9Q5QOm6xpEEz0j+Yfgy435cir3ne8iP8YwzfrK+nxmf8/l7ol3hQO2KoXA+IcktMBbCuImplprZMxzCYBU+5IMGkljO3riPH+FAFBsuJt/2nJX1aS1Muud4+1aQEt4VjDKFeAwElhO0jIGXb0v01s3Fa7aJXgvCh+BV9Jk8a43MM+FOSDRobinDTzDlZFwBh6ZQJTTjrn9nJg8X2c5SU0aNt9bJPqgCjhLEL1RWxtaR159Kp3fFxFglg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pegp8Irz1OROPOni0AM8BAGfGr9mi2RFlugcUiMNSXg=;
 b=Lupcv6OIGS0xLctWfCLVe7IrG48bfgUVXwFc1NShTEutcRDoS8jjdsvrVYr/Xzrc+AmUvgU3KgqOxUafxCBCPo+3j0OYm62wdD/dzMAxxm0v1vV01kJYOW8ZuOs28RiT6apeuL0S1VqvgclVwgoDxi8I9c5Z9r/w6+3gnZOrdHiZTpToy5klLLDbcx+ms4AV+uniUYavKaqoGxb5vZ0c/MbEiKiyhAcaj9QCMynV8cPtFqAB/oRUaIFP4En8Ypc/Gv4CTMFORwDCJ1xTp8KIFGsKWzo7dct4XSHCgQNmjNKu/vDZHj+K5dONf3p9Z4LdsHQjHpKu503AsFeLMs+Fzg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: apertussolutions.com; dkim=none (message not signed)
 header.d=none;apertussolutions.com; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 01/10] xen: Implement xen/alternative-call.h for use in
 common code
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-2-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e4b7f476-2c89-2416-5a24-06abaaf1d048@suse.com>
Date: Wed, 14 Jul 2021 17:35:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210712203233.20289-2-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P250CA0011.EURP250.PROD.OUTLOOK.COM
 (2603:10a6:102:57::16) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 69543da8-a2bc-492d-e7ae-08d946dd07f8
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3536:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB35369B1C65B7078A3A64248DB3139@VI1PR0402MB3536.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Ccipuh+O0UP8lotkaJ6S6CWf55OgpijP2KcM6U3d9kUKpiyWRNsz/zmK2ZvG9fIo7iJGA5/gKydh6bd8OqEjQ3MG09chK1tMPr8LGbCxuGErP45WlxfwNl36ktKYjuN+eoPKAljXR5I/BO4ISi7EDXkwoOM67QHZ2/21G3FuCDQPBlc6E2iORoKrjoplcDp5ak+MSMEWtuz1PPLV36E8wiMIHdVj8Fj4o+V2R41ZmoXrmfC3DtL8iktQVtC0NG3VPh1gc6/kz++hVhylanRQkIv3On/fSH5Uak+P8/geaGjIkj+Sn9rD+XS8CEdP7Pp7GP6fjj9KSvfwzl9ZMrDjd2b3uigku4NgvKgx19CWUelRyPzx2eWDYhKzHcspOb4gicpUNpKtXc3sqCJ+eSoGKd0CjYUvzCtsQHTAhyHrZqAK0ABbgEyZ2Ypp9HWjqBl9BDD5zOjywR/CJA1/UgNVij03GESjzT/poIaW1s9VpUAT3DsP2zsv7EuHKGEYWbwx0y6c83vwPVPPprjyjMJ5goFP0vpbO+2LF8F1EmUPNtIm3R5+RlsV8gOq8d3wd9qwc0QCqT/3R0ixjqiSWOZWoIvL/aVgDPLw1J/5+vT9NfMUAGUA9gC/YyuzYd3CodfZFYEjB9AGlK9XhS/8NGCi05Z4vV4N+sWgFPDSQvtw9Ll+RE2xBQAh58gcV4w2VXCm56GcxFLHUAs12KQ3ziKI9BdAG45Ogw3v2+siYQwcaDj8rFM0Du4mCamhEwbcQZDU0t2OePLEeVxbexNW/c3tpw==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39850400004)(376002)(366004)(346002)(396003)(316002)(53546011)(31686004)(2616005)(86362001)(956004)(66476007)(38100700002)(5660300002)(26005)(66946007)(31696002)(16576012)(186003)(66556008)(54906003)(36756003)(6916009)(8676002)(6486002)(478600001)(4326008)(8936002)(2906002)(83380400001)(87944003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?1/MtWchEubrHfDrZb8f3ej3xyEcWOmA8iJtYUl/?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 69543da8-a2bc-492d-e7ae-08d946dd07f8
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 15:35:38.6244
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: VH66AM998FWOPqSWUZ3EMPRr4nufOF6eFcS1CchoBWhn+RNLxC0VgS20+Wba7bE/xp+0aKQZaM3v8QpwEk1TeA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3536

On 12.07.2021 22:32, Daniel P. Smith wrote:
> --- a/xen/arch/x86/Kconfig
> +++ b/xen/arch/x86/Kconfig
> @@ -9,6 +9,7 @@ config X86
>  	select ARCH_SUPPORTS_INT128
>  	select CORE_PARKING
>  	select HAS_ALTERNATIVE
> +	select ALTERNATIVE_CALL
>  	select HAS_COMPAT
>  	select HAS_CPUFREQ
>  	select HAS_EHCI

Please respect the (at least largely) alphabetical ordering here and ...

> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -25,6 +25,9 @@ config GRANT_TABLE
>  config HAS_ALTERNATIVE
>  	bool
>  
> +config ALTERNATIVE_CALL
> +	bool
> +
>  config HAS_COMPAT
>  	bool

... maybe also here.

> --- /dev/null
> +++ b/xen/include/xen/alternative-call.h
> @@ -0,0 +1,65 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef XEN_ALTERNATIVE_CALL
> +#define XEN_ALTERNATIVE_CALL
> +
> +/*
> + * Some subsystems in Xen may have multiple implementions, which can be
> + * resolved to a single implementation at boot time.  By default, this will
> + * result in the use of function pointers.
> + *
> + * Some architectures may have mechanisms for dynamically modifying .text.
> + * Using this mechnaism, function pointers can be converted to direct calls
> + * which are typically more efficient at runtime.
> + *
> + * For architectures to support:
> + *
> + * - Implement alternative_{,v}call() in asm/alternative.h.  Code generation
> + *   requirements are to emit a function pointer call at build time, and stash
> + *   enough metadata to simplify the call at boot once the implementation has
> + *   been resolved.
> + * - Select ALTERNATIVE_CALL in Kconfig.
> + *
> + * To use:
> + *
> + * Consider the following simplified example.
> + *
> + *  1) struct foo_ops __alt_call_maybe_initdata ops;
> + *
> + *  2) struct foo_ops __alt_call_maybe_initconst foo_a_ops = { ... };
> + *     struct foo_ops __alt_call_maybe_initconst foo_b_ops = { ... };
> + *
> + *     void foo_init(void)
> + *     {
> + *         ...
> + *         if ( use_impl_a )
> + *             ops = *foo_a_ops;
> + *         else if ( use_impl_b )
> + *             ops = *foo_b_ops;
> + *         ...
> + *     }
> + *
> + *  3) alternative_call(ops.bar, ...);
> + *
> + * There needs to a single ops object (1) which will eventually contain the
> + * function pointers.  This should be populated in foo's init() function (2)
> + * by one of the available implementations.  To call functions, use
> + * alternative_{,v}call() referencing the main ops object (3).
> + */

May be worth adding a sentence about the section annotations, the
more that (as you did point out in an earlier reply) there are
pre-existing cases differing from the general goal here?

> +#ifdef CONFIG_ALTERNATIVE_CALL
> +
> +#include <asm/alternative.h>
> +
> +#define __alt_call_maybe_initdata  __initdata
> +#define __alt_call_maybe_initconst __initconst

As indicated elsewhere, I think this wants to be __initconstrel,
as the function pointers to place in the structures will
definitely involve relocations. Otoh, given your initial reply,
__alt_call_maybe_initdata may be all that's actually needed.

> +#else
> +
> +#define alternative_call(func, args...)  (func)(args)
> +#define alternative_vcall(func, args...) (func)(args)
> +
> +#define __alt_call_maybe_initdata
> +#define __alt_call_maybe_initconst
> +
> +#endif /* !CONFIG_ALTERNATIVE_CALL */
> +#endif /* XEN_ALTERNATIVE_CALL */

I'm surprised you have no "Local variables:" footer comment here.
Not that I need it for anything, but I thought you and others are
quite interested in it to be there.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 15:54:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 15:54:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156094.288025 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hDW-0000c0-Tt; Wed, 14 Jul 2021 15:54:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156094.288025; Wed, 14 Jul 2021 15:54:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hDW-0000bt-Qe; Wed, 14 Jul 2021 15:54:34 +0000
Received: by outflank-mailman (input) for mailman id 156094;
 Wed, 14 Jul 2021 15:54:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3hDW-0000bj-9M
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 15:54:34 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c764c77e-e4bb-11eb-882d-12813bfff9fa;
 Wed, 14 Jul 2021 15:54:32 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2106.outbound.protection.outlook.com [104.47.17.106])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-19-Ldhk52UTN42QUGLfAC6mhg-1; Wed, 14 Jul 2021 17:54:30 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB2958.eurprd04.prod.outlook.com (2603:10a6:802:a::29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.31; Wed, 14 Jul
 2021 15:54:29 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 15:54:29 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1PR01CA0020.eurprd01.prod.exchangelabs.com (2603:10a6:102::33) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Wed, 14 Jul 2021 15:54:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c764c77e-e4bb-11eb-882d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626278071;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=IFVZgTZ3OroZ/oUWC9+lEa5llWzdCz4hmlnk383hato=;
	b=m+S2H/wj4zia364KaB0xjLr5hu5hm+em3jkEhN2jKGEH2fbSDPG/oIuGSOArVaCqAySq0I
	oNftG2FQ4EreF2tHkv1vQRT8CrKZvyVvVkSAhYAF9JDnk2AYaYjJVxJEe40W0qS60nS5NV
	Bgj6eZmGhyB9zDTmMqGNwQTT8LjSIPc=
X-MC-Unique: Ldhk52UTN42QUGLfAC6mhg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kd4RJnHbwl8C7Nh1Jt9nr0W7ctY+NeEq9uRkDcb5/nZbMfeqNnx4pQfk81WvXgrtZDDNjFanIkJ60HRnVQHnS1FOjqY+X75HiTnTKaEtg+/sIWygaV7wP/dIp9zITKiEAJv4eJcgj9apgcrDcoP0TzzXZ2qgMw03tWV3kTHpWEpz9WFM7X6QKYA5iTgkmD4OatnE80HQkt+3HxP6hYi2ufh7FHen0jKgFFgyb80vZzgjC8gNJeKUaCAvp5RvBOp/dSv0etCi/jkeIEmlyOGuy6qce11Cmdkx9NHLdhVZS9h1WRS+gUuksWbmUmEHKcqwbC+1CVPF5GXViTiMDc6RyA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IFVZgTZ3OroZ/oUWC9+lEa5llWzdCz4hmlnk383hato=;
 b=joUrdrPbhUNc9vR/Z/1akXEZv5zQinkGecqzMfrISgEFvS77uzEMtIohYl2/Fmr7SliaPw1YdVFPLxTmGV28NTNbaLifUCvmNqLScQq4pA963Ovggic+vShpa0T9wCGTiDAkc7pspgN2rccyaK/xCDNaWLHmGcYNgwBXWrm7P50270qdFGn4EhwZD+prGl5rsSoUfXBlCr5aYXIEspqjmX6nKLPtfYEjSGUxYq/nUqR4bLe68F3G4Fc5iYSXVhx2qwTNz3hpOuxVeLofy8k1yKx+tFXoSc9LMPCQIRTJvuTzT215O83NOHhZcUkjiOo/uWLSu7r+7Y5Zv0FMjVRwOw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 02/10] xsm: refactor xsm_ops handling
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-3-dpsmith@apertussolutions.com>
 <1638ecbe-59a2-1ef1-f18e-dc63e1740168@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <386d3846-a4d8-5c40-498b-1b4adae68687@suse.com>
Date: Wed, 14 Jul 2021 17:54:27 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <1638ecbe-59a2-1ef1-f18e-dc63e1740168@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1PR01CA0020.eurprd01.prod.exchangelabs.com
 (2603:10a6:102::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 9dcf639b-4605-4296-b20d-08d946dfa9aa
X-MS-TrafficTypeDiagnostic: VI1PR04MB2958:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB295801AAED207A6BDF21CE0CB3139@VI1PR04MB2958.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	TjBg864nLYLZAMFpqpeS1q0d6KPy6e0l/PZBOfDo/ut+7XYYkYQO7c8LXFbuYRR5sLD19SG+Yqw0IPPm4OzL7Ku6C1w3bqPbvKVJUdXXPCbULfXzrdNzj9G95ns0rTNbuUthvbiUs70+Xq3Degs+xj9nfhMq4WSzat8Nj44EDoBIxm2nl/pcjrEaoBzmQSsN8haAEc01u6S4LMdjK3cEIuOwWD2N3EBeXnMhQy/2gBDCFNXgt/jG1aeY0NibDnwchL/hCReimAin3AHgFVa6K55xAmERsACg6PkrkN9SHsKZY2JQW0dU7sHQRo4ysf88w42qER8tmWW4uhCPWvSV02nUofMr+d8zya8Fma09WDhvNsf/OhNpG9Pe19uCQjqAco/oLYfMr5IhLhDUsHYiWtrCUhJuysJPcPx+EY1eMUOfoV7VhXfDX6hTnjFOOT+4X7JNC+w+bgW6/OTMQxEq2bx6eSRALFTKuXWGi23uM2jk9eEMMFcxgsp7Ym0IVA8h+1S3RCdkiXMbBZvJbwycCr0DRrK/btSWOtS1TSUlHA5RYmYX8XpYAaeV33wgd9OdeT5070RVEWRHjYiaMDIWfOGZXd7LZCLpAHFQYpwvqyMtv/GqRVXN6XMeo6m69hPPGboKkMt5qBXKiI0lrGfhwwOXPlLkrBe4EeX5jxJ4/avq+RP5z6JLZ67RuwOS7vnh85bLYM6fO4HekfIIBScl8w==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(346002)(366004)(376002)(396003)(136003)(16576012)(53546011)(316002)(2616005)(31686004)(186003)(26005)(6486002)(956004)(36756003)(110136005)(8676002)(66556008)(66946007)(8936002)(4326008)(478600001)(38100700002)(83380400001)(31696002)(86362001)(66476007)(2906002)(5660300002)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?Z2FuWit0NndwMTFaUXNRcDZsS0dWQ0tyREUzLzYvVFZEWjdSMk9PRnBvakFy?=
 =?utf-8?B?WDdtTlpXaDM3UXgzam1tQmpEK3dhenJBUjhDTExOYTg1WVVlTC9qMUxSdUJt?=
 =?utf-8?B?Z2RqTGRnYVRTOGJsY1pEUllnbG8xdWdrRU03aGNYMmNTTlhRWmcxK2Z1SXRW?=
 =?utf-8?B?VUNRVXNNeWpkTkVJaVp4YWJra0tvOTJteG9TVy9jMEhUc1ltWkl0V0g4Ymtp?=
 =?utf-8?B?WDhVZ1ZSSHdsNWxxWm1jYjRVd1o0U2Jhc0Q1WDB4OUNjWW0zUWZ1YWRRWjE2?=
 =?utf-8?B?djhzL3Fya0p2NzJYL1gzZ0EwbHpaTkc3MzVTVCsxUUdMbTQwbVZmaUZIMmp0?=
 =?utf-8?B?VnI3d05BMStZMDhkY2tMMTdSUFFoQmM5NHk1aFhLampUbFdWeW15VFF4cW84?=
 =?utf-8?B?M1dRdUxHZWVMOUIrRStYK3BLRXFjR3d5MytlTFZnMDdvNWpvYzNpOW8rOWsy?=
 =?utf-8?B?cjIrZEZTQzFpVzFZWXJIZldHT0xROXFRcjRNRVBqazZ0bytxenhhWFNJSEpr?=
 =?utf-8?B?ZzlTZUpJQTVadVQ4Uys5dUY3aDlLZmgxVUJtWXFZQjRuclZWTHdDU0xVQy9m?=
 =?utf-8?B?NmxOWXFqQ0VIVEJCWlZHRTgwZVR5WnZtNVVmVnQyRm8yWlhrMGIxcXFFM0NY?=
 =?utf-8?B?L3QrSzI5K2R5WTNRM3phV1JiSzE3eUJFRmdvQUtkNHV3a1JMT0Q3dVgyVy9j?=
 =?utf-8?B?VVFXb3pnUVd5VEdiNDlzcm53dHM1YnFaKzdLQzIwaG9WLzA1SkppM1Joa01X?=
 =?utf-8?B?d0FEaDBLdFlqSTg4K3NEU3lCbGNmckdQaThzeDFMcGZnMHl6RkVySDJQSk1T?=
 =?utf-8?B?Z3ViNGJlRmlLZENrSUJLMjNjYTZ4ZmhyZFNzSVN0UXBia2hVVWdZbDFmZTFK?=
 =?utf-8?B?MTJnWjU2RXlGbVRZbERVNHZ5M0xBZ0ZlNGNwUkxCVEhsTFpHM0orQjlaaHpo?=
 =?utf-8?B?N0hiR2ZrWDJKdkRBTkZRTVA3VzRzSm1OSkwxTGx5YXBxTUVOMGJQUDRvUTlF?=
 =?utf-8?B?clVaRk5JMzk5NXROYkFCL1BNWnh1OE1VWmdDNEovK2VKRDZSSzB1QUFUMkx3?=
 =?utf-8?B?aitVU05mYWRzZ1ptcmtmeHQ2TnBjYUpMalJZWEY2WjRwK3dCV0puSjcxeVdH?=
 =?utf-8?B?MG9VK0N4MkZpWk44RDZZODJHWm5nNkw1Y0IwUnBYdURXdUZJenp0N2xNWE14?=
 =?utf-8?B?SUROTGlvYVRWQTJ0ZU5TcUxpbVVqZUtNZ1AyQjNxMnJSbzlEUTdQQ2pOY1Jx?=
 =?utf-8?B?RnNjdCtOaHp6YVBLUlN6YVMvNU9iOU13b0dZSXU4a2Q5RlA1Rlo3azk3N0xj?=
 =?utf-8?B?aTdORDRsdTJTM1dWTHIvcXF4OE51N3RyZENYMDBnS0ZKMmZHRnp6ZUhScDZk?=
 =?utf-8?B?aVR0ZXlDTE93UWlHcHB6bTdsMDBMamZLbkpMU20ySzZVTjRWanRpYlB5eTZH?=
 =?utf-8?B?ZUVRVnZTVnZnd3pQYVIzdS9Gcy8rcjk2b0t5TS9BODZsTzA0OGlvZHA4V2JQ?=
 =?utf-8?B?ckFSWXpaY3JpWXJucWpPdi9OaGhGNmlsYUVHVUxBdWIvZy8zK1ZEUklpK1VG?=
 =?utf-8?B?aVZ5ZWVzUTcwUEhFcU9KY1lZM0FLclZPamFwSU9yd2FTd1QvdU1iZVUzWlFn?=
 =?utf-8?B?Lytaa25OWkdpdUlUcm8xMXJXTWJnMy93c25abUNCVVRpcjNOb1ZyMkRHeFhR?=
 =?utf-8?B?MFBkTjJuY0tJYVBmNCtWWlRDWkoxUXMxTFBXYmhlb1NZdDB4QXRUMytxamZD?=
 =?utf-8?Q?4gjJ3rNWD/viTtRDjuIpD8FocrqeRYGA8lB0l6F?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 9dcf639b-4605-4296-b20d-08d946dfa9aa
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 15:54:29.0142
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: eTAE90l/Qu9xJ2DbLTdrxCJ8+b0WDLPcDSmhlyYmhBWB1NGOmcltKy1GP2AEb4R+oRJ3VGYg94abbO3wGRuHDA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB2958

On 13.07.2021 01:39, Andrew Cooper wrote:
> On 12/07/2021 21:32, Daniel P. Smith wrote:
>> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
>> index ad3cddbf7d..a8805f514b 100644
>> --- a/xen/include/xsm/xsm.h
>> +++ b/xen/include/xsm/xsm.h
>> @@ -747,16 +747,14 @@ extern int xsm_dt_policy_init(void **policy_buffer, size_t *policy_size);
>>  extern bool has_xsm_magic(paddr_t);
>>  #endif
>>  
>> -extern int register_xsm(struct xsm_operations *ops);
>> -
>> -extern struct xsm_operations dummy_xsm_ops;
>>  extern void xsm_fixup_ops(struct xsm_operations *ops);
>>  
>>  #ifdef CONFIG_XSM_FLASK
>> -extern void flask_init(const void *policy_buffer, size_t policy_size);
>> +extern struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size);
>>  #else
>> -static inline void flask_init(const void *policy_buffer, size_t policy_size)
>> +static inline struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size)
>>  {
>> +    return NULL;
>>  }
>>  #endif
> 
> As you touch almost every current user of xsm_operations and introduce
> quite a few more, can I recommend taking the opportunity to shorten the
> name to struct xsm_ops.

+1

>> --- a/xen/xsm/flask/flask_op.c
>> +++ b/xen/xsm/flask/flask_op.c
>> @@ -226,6 +226,7 @@ static int flask_security_sid(struct xen_flask_sid_context *arg)
>>  static int flask_disable(void)
>>  {
>>      static int flask_disabled = 0;
>> +    struct xsm_operations default_ops;
>>  
>>      if ( ss_initialized )
>>      {
>> @@ -244,7 +245,8 @@ static int flask_disable(void)
>>      flask_disabled = 1;
>>  
>>      /* Reset xsm_ops to the original module. */
>> -    xsm_ops = &dummy_xsm_ops;
>> +    xsm_fixup_ops(&default_ops);
>> +    xsm_ops = default_ops;
>>  
>>      return 0;
>>  }
> 
> These two hunks will disappear when patch 3 is reordered with respect to
> this one.
> 
> ... which is good because you've just pointed xsm_ops at a
> soon-to-be-out-of-scope local variable on the stack.

Not really, it's a structure copy now. What I'm concerned about is
the size of that on-stack variable and its lack of an initializer,
undermining the many set_to_dummy_if_null() that xsm_fixup_ops()
uses. Can't xsm_fixup_ops() act on xsm_ops directly, perhaps after
memset()-ing it here first (if nothing else then just to be on the
safe side)?

>> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
>> index f1a1217c98..a3a88aa8ed 100644
>> --- a/xen/xsm/flask/hooks.c
>> +++ b/xen/xsm/flask/hooks.c
>> @@ -1883,7 +1883,8 @@ static struct xsm_operations flask_ops = {
>>  #endif
>>  };
> 
> flask and silo ops should become:
> 
> static const struct xsm_ops __initconst {flask,silo}_ops = {
> 
> as they're neither modified, nor needed after init, following this change.
> 
>>  
>> -void __init flask_init(const void *policy_buffer, size_t policy_size)
>> +struct xsm_operations __init *flask_init(const void *policy_buffer,
>> +					 size_t policy_size)
> 
> struct xsm_ops *__init flask_init(...)
> 
> Otherwise you've got the __init in the middle of the return type, and
> some compilers are more picky than others.

Also, even if {flask,silo}_ops couldn't be const for some reason,
these init functions now want to return a pointer-to-const, as
the caller isn't supposed to modify the struct-s any further.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 15:58:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 15:58:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156100.288038 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hHG-0001cY-Hk; Wed, 14 Jul 2021 15:58:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156100.288038; Wed, 14 Jul 2021 15:58:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hHG-0001cQ-C1; Wed, 14 Jul 2021 15:58:26 +0000
Received: by outflank-mailman (input) for mailman id 156100;
 Wed, 14 Jul 2021 15:58:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wM3W=MG=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3hHE-0001cG-RE
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 15:58:24 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f49a29a5-b00b-4eac-9d5a-3acf2b7db095;
 Wed, 14 Jul 2021 15:58:24 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2108.outbound.protection.outlook.com [104.47.17.108])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-9-PFOX2yvGNhCoOBCZ4r9lwg-1; Wed, 14 Jul 2021 17:58:21 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4352.eurprd04.prod.outlook.com (2603:10a6:803:4a::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Wed, 14 Jul
 2021 15:58:20 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Wed, 14 Jul 2021
 15:58:20 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P251CA0003.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Wed, 14 Jul 2021 15:58:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f49a29a5-b00b-4eac-9d5a-3acf2b7db095
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626278303;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=1m6ND4hpva+SFl8ka49wFiHW505L0CusrABwd3Pz624=;
	b=P4VXwU9t3b2uktd7xjXn6LmXHC5UXo6TlzDPnsGJyUb0/tOQtl6DbaEt170hdON/ULJPev
	hwQhyTTTnZbrlM0m6VMA9LCyiwex1lFO44HYAykMS1FYGpgQKnDHDU4+YmDUfeo/1HTJam
	L5n0GoKyeat0Bu1J7Odz2D/F+1vD/uo=
X-MC-Unique: PFOX2yvGNhCoOBCZ4r9lwg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dwPwQValAjWa7LjCEIUz61IgPUmHrA83KgJC59a497q1LscYW704z+xenRa/uA8T1tsCz5RgKUxITMEzznUsTu4efnvWwjlMstA9muqIVJmwXOV/MYTi3Z8R+KiA6zt8Q01mNketNrHoDiXI5OWtnmPHzG8RlwC6KV6gBMPDNdWlc6HXSHA5pfX3FBJZQk+eguODscROfO5tkGBGzAQGNS8umia8crUW7kjPsNzpreDROru7zlRKxt3C+j6vqQMgLbyxZyrxIqhTU4cYfjWW9uO1HUgZT0nC/oTkZvy94OgKGxs0CW9Zbzq3P/31ARD9XmjId0o9r9tc/g4a0hEC0Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1m6ND4hpva+SFl8ka49wFiHW505L0CusrABwd3Pz624=;
 b=JCRcQ4YM/OmlWJ6AuAST5jrCgUIhYi5i4GGLmILstZsMEDAQ6lPPNJvLiTwGM1k/VPpHHkmmMjPO9B6b/jOK/cj61R1WVgtsJ62yI6vykXr9CiUk+hAq20HX4sMK/LqwYpVPxBUaJha5PQKgOGulER6ygTC1Vp2hCnmFIDqloFZ2NxFoV+R1uW54Rs/QE29VOqp7TZ833k/0fgX2vP7bQify5iNKtOArYpOpHJmDNyvYnOXpwXm5CKzOtf0d5gva//fpUTcKoHjes+6v4x8PvUYDTqgz553RBrWK9pv2OTydSKA3pyinEFwGU/RyeInV2/4phXQWNbvLpQfDcFI6BA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 03/10] xsm: remove the ability to disable flask
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-4-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c938e8fc-e0c7-412b-2285-0ec503f6828c@suse.com>
Date: Wed, 14 Jul 2021 17:58:17 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210712203233.20289-4-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P251CA0003.EURP251.PROD.OUTLOOK.COM
 (2603:10a6:102:b5::6) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 36655de6-ca1c-4dcc-ce4c-08d946e03363
X-MS-TrafficTypeDiagnostic: VI1PR04MB4352:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4352338FA55F5C13CDA226BDB3139@VI1PR04MB4352.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	VJLQpDFFgL9qf5rcm61pLGGzzwt7qSuwkDbnYfmu7pifNF3dJgZ5EylrR3PkZBeclb+8sckphb6ZPJ27GKz9xelppkvIIWrt/Pr1NFL8lr0IGqTQs7mMUzqO1IT6By3f0ZNASvMbZNNpP2CFOBdx+LAHqDjD4zhz3nbek32oIkf+D8ZtuNuC/nTQo3q+UNd9sLmNHpDIjFMminI6QL3eCRCiVUX2+YQpGznTWFNuO0ooQI7ysJVqOjTDb+wcrAn8rYzRd2G9BA6vnr6JWuxqcA+t52deUlUyC2tvcuu4xNKw9nw253czV48WHJ3VRwtvdGP0iikfK3fp8X2BEP3qUKwu6JFUlyPfgARab1lXdCmPdvGxKXmOj6i6zmLw7ZWa+g0y79yQy48oE2ebDT7x6SojJwUqOB2sdy7XYLEWp9wFoNpy7J/YVdst8FDQ+wFCTbsK5SeHrcSRyaq5BCHgvlu+csmu9XpJi5IQHEJG6ndZKncGjNn+lvnYaN2vtPcqmIQUdWavRI7WZYMvi7o6sTfzF0efBEPuIr/aqJTDGeEJSJT1JoOTGRJLaQhjBTk2PFYOA0ZvoTuVaBJA84zsDErJEcBU4qu51NHadrbAtCS4qFVRw7HA4mQx56SJGm/p9fQQhMrfN7PZ7Rrx+P7elrcnoe1g4na7dYXCPVL/qOzCtr0ea1h1v7r2U9/C1TxqGvAmuRsO8OdRLINZ+1R+6VdJJDnwm4c9Uwl8vVBu8Sw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(346002)(396003)(376002)(39860400002)(6916009)(4326008)(31696002)(2616005)(8936002)(86362001)(316002)(66476007)(478600001)(8676002)(956004)(6486002)(31686004)(66556008)(5660300002)(36756003)(4744005)(16576012)(53546011)(66946007)(2906002)(38100700002)(26005)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?cj0uKnCngDK6R3cII/U6QK1oEIl5EZAyXTExY1m?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 36655de6-ca1c-4dcc-ce4c-08d946e03363
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 15:58:20.0252
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: iggwqYb+opnFBRvoV/We7k3GGBc6vuiK63CEC4Z/dtsZjINUtIaphaOwElscptbvVBiMSJ5ZlRZZoXDNxJCLvA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4352

On 12.07.2021 22:32, Daniel P. Smith wrote:
> The flask XSM module provided the ability to switch from flask back to
> the dummy XSM module during runtime. With this removal the only way to
> switch between XSM modules is at boot time.
> 
> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>

Can you please add a statement as to why you/we want this, perhaps
helping clarify why apparently you think no-one is making use of
this?

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 16:23:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 16:23:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156109.288054 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hfl-0006ps-Pm; Wed, 14 Jul 2021 16:23:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156109.288054; Wed, 14 Jul 2021 16:23:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hfl-0006pl-MA; Wed, 14 Jul 2021 16:23:45 +0000
Received: by outflank-mailman (input) for mailman id 156109;
 Wed, 14 Jul 2021 16:23:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=z5uq=MG=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m3hfk-0006pd-8Y
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 16:23:44 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f3de6a9d-c5bd-4392-824d-31e780256793;
 Wed, 14 Jul 2021 16:23:43 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f3de6a9d-c5bd-4392-824d-31e780256793
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626279822;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=+oIamF65xOJYpqm9F/0U7SPwc0rb7tTmwQOWYZ4yTRk=;
  b=ZlaM9TYWNr0pu68A2KapMVLrZBM/TVRy4rhvv9TTYJrZ3y0o+RUwIpBP
   iOXcANF3T4u1ipCd8nsaB4QNAxzEfbYxdQEEV6PkPhemcBQXc+NPByP4W
   yMRzAwUwe0+p0pJC1+6oA1kggX+A7Ct3YiPpjNWFGbYri4bbIsHfc73lm
   8=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: nzDWEIqEia5qkWyJaarIh+nToFrTzhY5WJHPYOawEI5b8udIxJ/IVYjmpnzLxStjoQ80UYv98S
 UlgJKh3EKCqTSktwOaoMFUb4C40uxoDBmIHI+PsQ/4mI3IXe9TTslLDiMREgw3xEXj6gCe21dJ
 4wzyg2mGZyILosnQaZtb77myRNibyZNfpoIvU03WZ54uLnfQSyBP6dPKsoi89hBqkUmc7ynhoY
 5XUY1sK9IArkDSDc4GseAbaS+y3hiVnUgxVX7uhrUJFc+uROQ+pQ2PFhrg4SovdNWI02NBtwse
 Wz0=
X-SBRS: 5.1
X-MesageID: 48656805
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:I4PKu6uVbR7gxmjEVuyCXE507skDetV00zEX/kB9WHVpmszxra
 6TdZMgpHvJYVcqKRcdcL+7WJVoLUmxyXcX2/h1AV7BZniEhILAFugLhuGO/9SJIVyYygc378
 ZdmsZFZ+EYdWIK7/rH3A==
X-IronPort-AV: E=Sophos;i="5.84,239,1620705600"; 
   d="scan'208";a="48656805"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy binary is available
Date: Wed, 14 Jul 2021 17:17:34 +0100
Message-ID: <20210714161734.256246-1-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This will help prevent the CI loop from having build failures when
`checkpolicy` isn't available, when doing "randconfig" jobs.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 Config.mk          | 6 ------
 xen/Makefile       | 2 ++
 xen/common/Kconfig | 7 +++++--
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/Config.mk b/Config.mk
index d08fa8d60dd7..97d3633706b3 100644
--- a/Config.mk
+++ b/Config.mk
@@ -137,12 +137,6 @@ export XEN_HAS_BUILD_ID=y
 build_id_linker := --build-id=sha1
 endif
 
-ifndef XEN_HAS_CHECKPOLICY
-    CHECKPOLICY ?= checkpolicy
-    XEN_HAS_CHECKPOLICY := $(shell $(CHECKPOLICY) -h 2>&1 | grep -q xen && echo y || echo n)
-    export XEN_HAS_CHECKPOLICY
-endif
-
 define buildmakevars2shellvars
     export PREFIX="$(prefix)";                                            \
     export XEN_SCRIPT_DIR="$(XEN_SCRIPT_DIR)";                            \
diff --git a/xen/Makefile b/xen/Makefile
index 8023680ffbf2..a60e49903d0c 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -17,6 +17,8 @@ export XEN_BUILD_HOST	?= $(shell hostname)
 PYTHON_INTERPRETER	:= $(word 1,$(shell which python3 python python2 2>/dev/null) python)
 export PYTHON		?= $(PYTHON_INTERPRETER)
 
+export CHECKPOLICY	?= checkpolicy
+
 export BASEDIR := $(CURDIR)
 export XEN_ROOT := $(BASEDIR)/..
 
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 0ddd18e11af3..13537e460b8f 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -25,6 +25,9 @@ config GRANT_TABLE
 config HAS_ALTERNATIVE
 	bool
 
+config HAS_CHECKPOLICY
+	def_bool $(success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
+
 config HAS_COMPAT
 	bool
 
@@ -235,8 +238,8 @@ config XSM_FLASK_AVC_STATS
 
 config XSM_FLASK_POLICY
 	bool "Compile Xen with a built-in FLASK security policy"
-	default y if "$(XEN_HAS_CHECKPOLICY)" = "y"
-	depends on XSM_FLASK
+	default y
+	depends on XSM_FLASK && HAS_CHECKPOLICY
 	---help---
 	  This includes a default XSM policy in the hypervisor so that the
 	  bootloader does not need to load a policy to get sane behavior from an
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 16:34:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 16:34:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156115.288064 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hpl-0000Vh-OY; Wed, 14 Jul 2021 16:34:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156115.288064; Wed, 14 Jul 2021 16:34:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hpl-0000Va-LU; Wed, 14 Jul 2021 16:34:05 +0000
Received: by outflank-mailman (input) for mailman id 156115;
 Wed, 14 Jul 2021 16:34:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hpl-0000VP-7A; Wed, 14 Jul 2021 16:34:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hpk-0000yh-W6; Wed, 14 Jul 2021 16:34:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hpk-0005jI-O6; Wed, 14 Jul 2021 16:34:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hpk-0005G5-NZ; Wed, 14 Jul 2021 16:34:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=I1b1BwNl5Qt6AJye+Rh6qTICbSHNBPdzaOELxaZl2nw=; b=Qyp5vAc/ABj2+yznMLyjFKTahZ
	12G9P3Rvbx660vPk/aqoaLZcHWKlf6W8+mnJOoArLvfHUmihf2a6Si44GES3E/24/azpldaD2aT/8
	52PTeryEfhZqaknqKvShMolu2jP++a1gjGP5rjZwRNJmT63CkarEimNDGEAgetiNU3Nc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163673-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163673: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=40226a3d96ef8ab8980f032681c8bfd46d63874e
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 16:34:04 +0000

flight 163673 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163673/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                40226a3d96ef8ab8980f032681c8bfd46d63874e
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  347 days
Failing since        152366  2020-08-01 20:49:34 Z  346 days  593 attempts
Testing same since   163673  2021-07-14 06:27:57 Z    0 days    1 attempts

------------------------------------------------------------
6679 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1966770 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 16:43:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 16:43:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156122.288079 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hys-0002Zl-OM; Wed, 14 Jul 2021 16:43:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156122.288079; Wed, 14 Jul 2021 16:43:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3hys-0002Ze-Kf; Wed, 14 Jul 2021 16:43:30 +0000
Received: by outflank-mailman (input) for mailman id 156122;
 Wed, 14 Jul 2021 16:43:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hyr-0002ZU-Jz; Wed, 14 Jul 2021 16:43:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hyr-00018b-EE; Wed, 14 Jul 2021 16:43:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hyr-00063p-5s; Wed, 14 Jul 2021 16:43:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3hyr-0002PL-5W; Wed, 14 Jul 2021 16:43:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=eEZpW6TnaMLkyvrk5TphJdiOJ7HwU0qJC5R7O/Q6aSI=; b=TbDd6WbjkoBgBy2a0BAHJiHaFW
	PH218viFlcjBRoD3c0BNvfZ0x1rHZ0YNh55UKd1TSfBWN/94I8OwYmCN0LBSqSJyTYWEkzmL7mmEj
	Hti3yDvUBZqFAsh9tFKbThvV30YoNzQO4/ZF8GRPEFbugwc9IX5B6aPSw/mSnFjd64u4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-freebsd10-amd64
Message-Id: <E1m3hyr-0002PL-5W@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 16:43:29 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-freebsd10-amd64
testid guest-start

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163687/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-freebsd10-amd64.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-freebsd10-amd64.guest-start --summary-out=tmp/163687.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-freebsd10-amd64 guest-start
Searching for failure / basis pass:
 163663 fail [host=fiano1] / 163321 [host=huxelrebe0] 163311 [host=pinot0] 163303 [host=huxelrebe1] 163299 [host=chardonnay0] 163292 [host=fiano0] 163276 [host=albana1] 163235 [host=huxelrebe1] 163228 [host=elbling1] 163220 [host=albana1] 163213 [host=elbling0] 163204 [host=huxelrebe0] 163194 [host=chardonnay0] 163187 [host=huxelrebe0] 163179 [host=pinot1] 163171 ok.
Failure / basis pass flights: 163663 / 163171
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 687f9f7834e30330fd952f1fe096518509ff8ff7 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#687f9f7834e30330fd952f1fe096518509ff8ff7-2a54fc454cf0dbf173d5dc95205febe381cfb7cc git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#bb11edcec1a953ce590da797b0d005cd60f21e83-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Loaded 20352 nodes in revision graph
Searching for test results:
 163171 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 687f9f7834e30330fd952f1fe096518509ff8ff7 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163179 [host=pinot1]
 163187 [host=huxelrebe0]
 163194 [host=chardonnay0]
 163204 [host=huxelrebe0]
 163213 [host=elbling0]
 163220 [host=albana1]
 163228 [host=elbling1]
 163235 [host=huxelrebe1]
 163276 [host=albana1]
 163292 [host=fiano0]
 163299 [host=chardonnay0]
 163303 [host=huxelrebe1]
 163311 [host=pinot0]
 163321 [host=huxelrebe0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163545 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163577 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163600 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163637 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 687f9f7834e30330fd952f1fe096518509ff8ff7 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163621 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163639 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163643 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163644 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163648 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163649 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163650 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163642 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 eca73713358f7abb18f15c026ff4267b51746992 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163652 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 dd62bf14b756821fa293e3465955a41e9d460deb 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163657 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163660 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 c8f88810db2a25d6aacf65c1c60bc4f5d848a483
 163661 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163662 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8bf27550effb124221100c3c6f5d513dd29ec37d 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163664 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 687f9f7834e30330fd952f1fe096518509ff8ff7 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163665 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 eca73713358f7abb18f15c026ff4267b51746992 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163666 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 3ce2765ac21dbd739e8216694b025aaabf4afff3
 163670 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163672 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163674 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163663 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163675 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163678 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163680 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163681 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163682 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163683 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163686 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163655 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 5d53baf3f5b3e711fd809d9e0b39b29be994ba9c 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163687 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163171 (pass), for basis pass
 Result found: flight 163663 (fail), for basis failure
 Repro found: flight 163664 (pass), for basis pass
 Repro found: flight 163678 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163680 (pass), for last pass
 Result found: flight 163681 (fail), for first failure
 Repro found: flight 163682 (pass), for last pass
 Repro found: flight 163683 (fail), for first failure
 Repro found: flight 163686 (pass), for last pass
 Repro found: flight 163687 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163687/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-freebsd10-amd64.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163687: tolerable ALL FAIL

flight 163687 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163687/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-freebsd10-amd64 13 guest-start          fail baseline untested


jobs:
 test-amd64-i386-freebsd10-amd64                              fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 16:50:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 16:50:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156129.288093 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3i5l-0004Xw-O9; Wed, 14 Jul 2021 16:50:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156129.288093; Wed, 14 Jul 2021 16:50:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3i5l-0004Xp-Kv; Wed, 14 Jul 2021 16:50:37 +0000
Received: by outflank-mailman (input) for mailman id 156129;
 Wed, 14 Jul 2021 16:50:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3i5k-0004Xc-Fv; Wed, 14 Jul 2021 16:50:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3i5k-0001FJ-4W; Wed, 14 Jul 2021 16:50:36 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3i5j-0006G8-Qd; Wed, 14 Jul 2021 16:50:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3i5j-0004Yv-QB; Wed, 14 Jul 2021 16:50:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NCtQlrotQziuYuzNp9gQS5KlSa3s4aMwK7lyUf+6rfg=; b=QC0XChstKqNTPDIurUD7R3MeHi
	KHmi6LHscx6nuVX9g0S7BVS5qcrl09U3Ka8dm2iUFlQL35lD4lgXIe5DoAxQrmkTBJwUbvZOcMzMa
	7wUxkmfHSa1NIT/JXD7rEEji6ZXqg0ZDeNt/h/LBr4xnJo4oD7mcLMK3wKw4zffrqOkI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163676-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163676: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=be282b14938846960cce30825a9fe762e14ca8c9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 16:50:35 +0000

flight 163676 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163676/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 be282b14938846960cce30825a9fe762e14ca8c9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   40 days
Failing since        162368  2021-06-04 15:42:59 Z   40 days  114 attempts
Testing same since   163676  2021-07-14 08:10:10 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3827 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 16:52:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 16:52:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156134.288107 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3i7D-0005CI-3I; Wed, 14 Jul 2021 16:52:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156134.288107; Wed, 14 Jul 2021 16:52:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3i7D-0005CB-07; Wed, 14 Jul 2021 16:52:07 +0000
Received: by outflank-mailman (input) for mailman id 156134;
 Wed, 14 Jul 2021 16:52:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=xzwV=MG=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m3i7C-0005C3-E9
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 16:52:06 +0000
Received: from mail-lj1-x22b.google.com (unknown [2a00:1450:4864:20::22b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d57bec1f-b2e7-40b9-ba74-dbf698365d45;
 Wed, 14 Jul 2021 16:52:05 +0000 (UTC)
Received: by mail-lj1-x22b.google.com with SMTP id h9so4415149ljm.5
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 09:52:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d57bec1f-b2e7-40b9-ba74-dbf698365d45
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=0HntOx9EeqvENKin/Ec695cfEd15UJf/wc3s8WXqsc0=;
        b=QMKTHw85BxxjE2sS6j79s1Vb2g0fibj6I7Ldidrg+bHWpjSpk7HAxyGpjVYTRxL2eX
         wP+qM2jDzRfuK8j1nzGhICgOJ4pV9tjuiGJzu5Sl7U3jv+JebrjD54ywmQtrW/wWm982
         L2xx3ADTDd0iN1kF0Sk32Bnx/x61pPC68DBGj6RFZQE5Ro4ZhGbHHDVXc6VQQJPjl/Pk
         BpGt3vG9xJd4XTLkcHF+k23fS5mhFDMZoU8KE46UXG01W1BvIeSajKY/sz3+QjRH9neF
         PAwZTrpr94EFO0q/frtF540mM8B8sRHeN8T/iE9LMK3iL243rH9y16rArftpmvQRTspx
         quKw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=0HntOx9EeqvENKin/Ec695cfEd15UJf/wc3s8WXqsc0=;
        b=O0e4HJJVRhE46Rl5zRFTpsd20YSQGXVOL6xTQ+HPPr+vdUaclgj0s4dOEIJL7Gb4uw
         q69cnNSG2cJAGPqRn3PnYibCfqIlaU55g8MM+RcUpnJnuQwgkns/1JgraIHx1ulmYMUh
         r8Fm44+yxo9rd8iSEra4YAZvj2fSTQwzCDkqPTz+5IM0u+IRaV83K8NTVbxeaOXoWIQv
         LMYctyO8JUndtwi5GT1BzNo1C3PGUnSQNCVlMxUujn2gXoIvpnZkeBH9py+0+S+1ss6x
         xq0bDY++hQcV20XqJg0qon6EdF2gGl8FG8A8U2z/9WZbWYzZvdnPanLOKwjF2uVlZnvs
         TDXA==
X-Gm-Message-State: AOAM532YoFNuNHntlx0HGfX1oCsUAw/aO7hPoF0I06tpXD6K2papSaAM
	ohfCFh0v7FEddO5hI77/weR+c9Pm5+9kh8e8MyY=
X-Google-Smtp-Source: ABdhPJwSwupfKi7+NG3+7LZv636hOpwwi2luMDF61x3RCMhC01X7FbeMK0gE7oTgBIeMjjV6e8iwg0Ux20H+4U4HO8k=
X-Received: by 2002:a05:651c:178b:: with SMTP id bn11mr5722781ljb.437.1626281524781;
 Wed, 14 Jul 2021 09:52:04 -0700 (PDT)
MIME-Version: 1.0
References: <20210714161734.256246-1-anthony.perard@citrix.com>
In-Reply-To: <20210714161734.256246-1-anthony.perard@citrix.com>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Wed, 14 Jul 2021 12:51:53 -0400
Message-ID: <CAKf6xps8knZPtPwSmJoPsJnK63fD=r0LsBDiEAU=jwgSSuOZyQ@mail.gmail.com>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, 
	Ian Jackson <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>, 
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Content-Type: text/plain; charset="UTF-8"

On Wed, Jul 14, 2021 at 12:23 PM Anthony PERARD
<anthony.perard@citrix.com> wrote:
>
> This will help prevent the CI loop from having build failures when
> `checkpolicy` isn't available, when doing "randconfig" jobs.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jason Andryuk <jandryuk@gmail.com>


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 16:59:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 16:59:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156142.288121 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3iEP-0006Tr-Qz; Wed, 14 Jul 2021 16:59:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156142.288121; Wed, 14 Jul 2021 16:59:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3iEP-0006Tk-Nu; Wed, 14 Jul 2021 16:59:33 +0000
Received: by outflank-mailman (input) for mailman id 156142;
 Wed, 14 Jul 2021 16:59:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3iEP-0006TY-5I; Wed, 14 Jul 2021 16:59:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3iEO-0001On-RP; Wed, 14 Jul 2021 16:59:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3iEO-0006X5-HI; Wed, 14 Jul 2021 16:59:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3iEO-00035q-Gb; Wed, 14 Jul 2021 16:59:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=PMPGRx8BSNhvYGtQ66ZK6TK2ytn/C8YeSPMeOFeCzok=; b=Wt8C0KO5cbkws9oQOYQBjDObbC
	GO8zAeYKE6S81JGynESTOXWjA8tYI3H1JOntRZZwT5qrKTfsuP8gLfwLDONvyduiAkaBCxr3+BWxV
	LWO+iO8YBK35Nd9Sh8O5LVXA0jiduVY2/QhiBrdVKZMytV1q+E2Oti4dMl5Yar29t1KY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163671-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163671: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-xl-credit1:xen-boot:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 16:59:32 +0000

flight 163671 xen-unstable real [real]
flight 163685 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163671/
http://logs.test-lab.xenproject.org/osstest/logs/163685/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-credit1   8 xen-boot            fail pass in 163685-retest

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-credit1 15 migrate-support-check fail in 163685 never pass
 test-armhf-armhf-xl-credit1 16 saverestore-support-check fail in 163685 never pass
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    5 days
Failing since        163478  2021-07-09 15:23:45 Z    5 days   10 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 17:10:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 17:10:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156150.288135 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3iOf-0000yQ-0B; Wed, 14 Jul 2021 17:10:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156150.288135; Wed, 14 Jul 2021 17:10:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3iOe-0000yI-TU; Wed, 14 Jul 2021 17:10:08 +0000
Received: by outflank-mailman (input) for mailman id 156150;
 Wed, 14 Jul 2021 17:10:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=OaxW=MG=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3iOd-0000xz-7I
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 17:10:07 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9212a1fe-ce09-4ffc-b4f3-035eaa5326a0;
 Wed, 14 Jul 2021 17:10:06 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9212a1fe-ce09-4ffc-b4f3-035eaa5326a0
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626282606;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=ceE4sEzDX4wQbrsCMyMM2UaZxQD37releBEe9xOjaWg=;
  b=cp1yRI/yQQcr0BlkwZS84SwLxtQX8tTfFGeMBRHTKitGYAxyPykFq6yG
   uqjlgjE3wwTPWMoC1AoR79TXHnVoDR1ghwe9DTYu8HcqQaAXlEEIMpjaN
   xHFKr54skOrav0deuCxCMvFCDR0z0b2WMb1jF9yKY7X12SwP/+sFrEwGF
   A=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: DSSuIBLjwgcdHVAGfIahrOqSD1+Q7pEz/Iynto93P6C2iZFVkZgax9bA6tOMLDC3DiSqhJV/qe
 RFv7eLgplnhm0lRm080q3dGbu69C52tJimsnPs4iWxrQ7UrhJhpIFi21PD7jXwsAC3jPKd1eVV
 n5iv3OqrL94Qp62xvPy8KYU+aht08R/FuuiW8g/aJrTfXais5mZ2R7h6tFOqTC+q1P+HHZ59Rw
 dUmrhVYNMECVgAYKc7QlJcY+VTzzufNAJJ8avVeMR803gzAFTfd/NMXp11aP20ZWhh+eg+rSWg
 cvI=
X-SBRS: 5.1
X-MesageID: 48338280
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Z588b65FUCHjHZLAIQPXwAzXdLJyesId70hD6qkQc3Fom62j5q
 WTdZEgvyMc5wx/ZJhNo7690cq7MBHhHPxOgbX5VI3KNGXbUQOTR72KhrGSoAEIdReeygZcv5
 0QCZSXCrfLfCVHZRCR2njFLz4iquP3j5xBnY3lvhNQpZkBUdAZ0+9+YDzrdXFedU19KrcSMo
 GT3cZDryrIQwVtUizqbkN1OdQqvrfw5evbXSI=
X-IronPort-AV: E=Sophos;i="5.84,239,1620705600"; 
   d="scan'208";a="48338280"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EJjzoWNxab5XPvF8Ebt8CfZpeaM9x2BQbOVEW7oPB2monCDviwXU8Lf/iTrtOI+KHUcu4BCg81mFZFYHT0Pa0atW+QST7ddHz+vyuuYq6KXnB7k699bpl29ZiOkvyFYZZII0IbckiQM7LvEJGgqo6eVdnJL69bJTCOFj09pi/R7vU0kq3+YN/vJi7KRHm1pIlfPiRiqnvYCHymiKPN0esGL/QnrAXs2awfBOhCrihJRV1xlNkk0WPO8s6Yj2ZDtr9YyaGhYxuTFSidiv+Y7gvlyTGDLDAV74wEWYSrHUGjaSC/Ehjn4eBt3DgO22PW57HlKUFY6wOB0tf2l+X9LODQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ceE4sEzDX4wQbrsCMyMM2UaZxQD37releBEe9xOjaWg=;
 b=hn7TrC0pD48+eGXq+61QPYOo5M266QIi/ZgGIANf1t4yxxx3mAx6PSLyYNprAOdWr1GKgZVTe6Oezeeq2exfx5SQSPepGTAKoiHrZMrl+ybV+8//OmccIGwRzWgFFToKiZMiolfXxEfMUyGTxRcN5I3W0sNjip/yWOcpDmWh4zmfQBtGxGvRfKFzu5DAjBQXJGvVbLfQiZNEYYCMP3c1SdkdS1pgAQfbgZRORV98ZaTaJyXZVfbgi6DgTr30hnXlX5uUu1TfKG1e3uO79RRo9nZdKFyC11xgXxQ+XeppL1ahRW/TqvUUaUqn4QyEOo/eRlWLFSaS18FEj+W2b+hPbA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ceE4sEzDX4wQbrsCMyMM2UaZxQD37releBEe9xOjaWg=;
 b=NZlWTSfTGr7SvEvSBN1ZeFzAGS441j7AAiWDE5g2hqoNF3ld0iXrous03B37xKt+1d3hiVpUWBNvVF2gWUhi7R4qFhh/7itWirE7s4lh/sY/fTR68IjMCGjrX1osMIbfXIJWVznaXopMRuWQr7d5Qw8wXc9pIfDBC3HjY9pgQwg=
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>
CC: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <21ebb9b5-ff19-0c85-25ca-519f39bd1b14@citrix.com>
Date: Wed, 14 Jul 2021 18:09:55 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210714161734.256246-1-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0035.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:61::23) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d93ab008-3fa7-4c14-efc9-08d946ea377d
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5438:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5438452F2C0154D08FD1CF8DBA139@SJ0PR03MB5438.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3513;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: ew3RpTgs9LPT/88/kwwvq7eZy6SwdlWuNcEmGLp7LTXORy5Qvku5TZTGCzVz70H9ZZ9WmRyTKAKzOP0v+0FtmEx0MlLujG3bdX1MvK4hB09mbsCQW/L66GbXb/g+a8sUhZiP4nhAHrgASBDZZHc5wrM7ZLF2LTuHorAE4YvofUow/AFG7o7G93Uldkx0shzplo+MJNnU3ULKjmkw6sRBMwFLHt0bwqABSN5cTQZJyNc+zjhsjf8bT7L7AbMwauHLHP81oEk18P96tNzzJWtskYiiv8/4Fyu/EUfyjP+wMaIlJPo3NPLWXWjlyttkpiOqneiM9b2xHVt5wqR8VcgCD3mvcLMhr7cdsHSqEEzwTa4dg+QRwKiZF6HlzU9HZ7zHBg/bhia+wWDV0cKvPDrDtbJBTsiki3THiJ3W2T0S1JNwUL4/9+xG+r6+wXPaMH2UzZN2ux2imecmbU+JFtFmwRgFvuZRTf7lSNqWBLDBXTDmo8gkhgocb4x70Qu+ZrWaa3MtIho6p+kNpmNjlEZPoxHc+CKCI786WDGNW4DqqQBPqrIZRzeOqaASTM/6To0UnHnh1cbs9rfQ/Hjgzh28uG0DSqotyAUrKaY0wFIMDEdNi9unVymlTZmixUBBtkj5n3d+2FCXX7Blc/3i3R0D3pCkLK/gd7tD2wGHtIsltJ2BiZbjFb9R0GmiClrF+o1UQdZd7OwwumSo4ItFEkc1ToBhFWau476QgIh0WgzMXvI=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(136003)(346002)(366004)(376002)(396003)(53546011)(5660300002)(478600001)(186003)(86362001)(36756003)(31686004)(6486002)(8676002)(4744005)(8936002)(2616005)(956004)(66476007)(4326008)(6666004)(66946007)(31696002)(83380400001)(316002)(16576012)(38100700002)(54906003)(66556008)(2906002)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?jv+k8p+YN2EcWyHMzab+oUcYn/th0Vk/IFqN0+m?=
X-MS-Exchange-CrossTenant-Network-Message-Id: d93ab008-3fa7-4c14-efc9-08d946ea377d
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2021 17:10:01.8246
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: CU3rKuxBCxR5gchpM4MZFbBzpLh/Vx8VQifyp6dCeiOlumn/6rHjHrbb0ABBNDULD1ZixYksDgewhmvAa5Z/EVhSKEHizjY3JnrJ6Y/Gsa4=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5438
X-OriginatorOrg: citrix.com

On 14/07/2021 17:17, Anthony PERARD wrote:
> This will help prevent the CI loop from having build failures when
> `checkpolicy` isn't available, when doing "randconfig" jobs.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Thankyou for doing this.

Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 17:40:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 17:40:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156160.288145 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3isD-00062r-B0; Wed, 14 Jul 2021 17:40:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156160.288145; Wed, 14 Jul 2021 17:40:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3isD-00062k-7y; Wed, 14 Jul 2021 17:40:41 +0000
Received: by outflank-mailman (input) for mailman id 156160;
 Wed, 14 Jul 2021 17:40:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3isB-00062Z-Gi
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 17:40:39 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3is8-00025R-Lt; Wed, 14 Jul 2021 17:40:36 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3is8-0000FT-G1; Wed, 14 Jul 2021 17:40:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=OXQWKYuwJFZ3Td4AESIkvHw8GC4eklYDCQi3pNS1QyA=; b=nLPn+Oo9QTmtAHSs+htuG3PLVu
	99ixn5GM457oo6JRiME1i1A6nl6ZwP7zVL6Yr5Y/EvUzkdBnywnBE2Rae5vhNBfjBFIDakMg0E9Wb
	jtdNghHuwBsgw2WZcp8xYw3jPUroI5CkI7Z2nukzF0zbXLdNGNbgExFMcxgda0DishEA=;
Subject: Re: [PATCH RFCv2 02/15] xen/arm: lpae: Use the generic helpers to
 defined the Xen PT helpers
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, Wei.Chen@arm.com, Henry.Wang@arm.com,
 Penny.Zheng@arm.com, Bertrand.Marquis@arm.com,
 Julien Grall <jgrall@amazon.com>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
References: <20210425201318.15447-1-julien@xen.org>
 <20210425201318.15447-3-julien@xen.org>
 <alpine.DEB.2.21.2105111515470.5018@sstabellini-ThinkPad-T480s>
 <94e364a7-de40-93ab-6cde-a2f493540439@xen.org>
 <alpine.DEB.2.21.2105121425500.5018@sstabellini-ThinkPad-T480s>
 <e834b447-46c2-14fe-a39c-209d4d6ca5fe@xen.org>
 <alpine.DEB.2.21.2105131533070.5018@sstabellini-ThinkPad-T480s>
 <9397d94d-5a22-c026-7c66-400b7397c2fa@xen.org>
 <alpine.DEB.2.21.2107131353000.23286@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <cb92cf2b-5e32-1774-deef-dd573f5eefc3@xen.org>
Date: Wed, 14 Jul 2021 18:40:34 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107131353000.23286@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 13/07/2021 21:53, Stefano Stabellini wrote:
> On Sat, 3 Jul 2021, Julien Grall wrote:
>> Hi Stefano,
>>
>> Sorry for the late answer.
>>
>> On 13/05/2021 23:44, Stefano Stabellini wrote:
>>> On Wed, 12 May 2021, Julien Grall wrote:
>>>> Hi Stefano,
>>>>
>>>> On 12/05/2021 22:30, Stefano Stabellini wrote:
>>>>> On Wed, 12 May 2021, Julien Grall wrote:
>>>>>>>> +#define LPAE_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
>>>>>>>> +#define LPAE_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
>>>>>>>> +#define LPAE_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
>>>>>>>>
>>>>>>>> +#define LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
>>>>>>>> +#define LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
>>>>>>>> +#define LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
>>>>>>>> +#define LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
>>>>>>>
>>>>>>> I would avoid adding these 4 macros. It would be OK if they were
>>>>>>> just
>>>>>>> used within this file but lpae.h is a header: they could end up be
>>>>>>> used
>>>>>>> anywhere in the xen/ code and they have a very generic name. My
>>>>>>> suggestion would be to skip them and just do:
>>>>>>
>>>>>> Those macros will be used in follow-up patches. They are pretty useful
>>>>>> to
>>>>>> avoid introduce static array with the different information for each
>>>>>> level.
>>>>>>
>>>>>> Would prefix them with XEN_ be better?
>>>>>
>>>>> Maybe. The concern I have is that there are multiple page granularities
>>>>> (4kb, 16kb, etc) and multiple page sizes (4kb, 2mb, etc). If I just see
>>>>> LEVEL_ORDER it is not immediately obvious what granularity and what size
>>>>> we are talking about.
>>>>
>>>> I am a bit puzzled with your answer. AFAIU, you are happy with the
>>>> existing
>>>> macros (THIRD_*, SECOND_*) but not with the new macros.
>>>>
>>>> In reality, there is no difference because THIRD_* doesn't tell you the
>>>> exact
>>>> size but only "this is a level 3 mapping".
>>>>
>>>> So can you clarify what you are after? IOW is it reworking the current
>>>> naming
>>>> scheme?
>>>
>>> You are right -- there is no real difference between THIRD_*, SECOND_*
>>> and LEVEL_*.
>>>
>>> The original reason for my comments is that I hadn't read the following
>>> patches, and the definition of LEVEL_* macros is simple, they could be
>>> open coded. It looked like they were only going to be used to make the
>>> definition of THIRD_*, SECOND_* a bit easier. So, at first, I was
>>> wondering if they were needed at all.
>>>
>>> Secondly, I realized that they were going to be used in *.c files by
>>> other patches. That's why they are there. But I started thinking whether
>>> we should find a way to make it a bit clearer that they are for Xen
>>> pages, currently at 4KB granularity. THIRD_*, SECOND_*, etc. are already
>>> generic names which don't convey the granularity or whether they are Xen
>>> pages at all. But LEVEL_* seem even more generic.
>>>
>>> As I mentioned, I don't have any good suggestions for changes to make
>>> here, so unless you can come up with a good idea let's keep it as is.
>>
>> I am thinking to use the following naming (diff on top of this patch):
>>
>> -#define LPAE_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
>> -#define LPAE_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
>> -#define LPAE_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
>> +#define XEN_PT_SHIFT          LPAE_SHIFT_GS(PAGE_SHIFT)
>> +#define XEN_PT_ENTRIES        LPAE_ENTRIES_GS(PAGE_SHIFT)
>> +#define XEN_PT_ENTRY_MASK     LPAE_ENTRY_MASK_GS(PAGE_SHIFT)
>>
>> -#define LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
>> -#define LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
>> -#define LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
>> -#define LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
>> +#define XEN_PT_LEVEL_SHIFT(lvl)    LEVEL_SHIFT_GS(PAGE_SHIFT, lvl)
>> +#define XEN_PT_LEVEL_ORDER(lvl)    LEVEL_ORDER_GS(PAGE_SHIFT, lvl)
>> +#define XEN_PT_LEVEL_SIZE(lvl)     LEVEL_SIZE_GS(PAGE_SHIFT, lvl)
>> +#define XEN_PT_LEVEL_MASK(lvl)     (~(LEVEL_SIZE(lvl) - 1))
>>
>>   /* Convenience aliases */
>> -#define THIRD_SHIFT         LEVEL_SHIFT(3)
>> -#define THIRD_ORDER         LEVEL_ORDER(3)
>> -#define THIRD_SIZE          LEVEL_SIZE(3)
>> -#define THIRD_MASK          LEVEL_MASK(3)
>> -
>> -#define SECOND_SHIFT        LEVEL_SHIFT(2)
>> -#define SECOND_ORDER        LEVEL_ORDER(2)
>> -#define SECOND_SIZE         LEVEL_SIZE(2)
>> -#define SECOND_MASK         LEVEL_MASK(2)
>> -
>> -#define FIRST_SHIFT         LEVEL_SHIFT(1)
>> -#define FIRST_ORDER         LEVEL_ORDER(1)
>> -#define FIRST_SIZE          LEVEL_SIZE(1)
>> -#define FIRST_MASK          LEVEL_MASK(1)
>> -
>> -#define ZEROETH_SHIFT       LEVEL_SHIFT(0)
>> -#define ZEROETH_ORDER       LEVEL_ORDER(0)
>> -#define ZEROETH_SIZE        LEVEL_SIZE(0)
>> -#define ZEROETH_MASK        LEVEL_MASK(0)
>> +#define THIRD_SHIFT         XEN_PT_LEVEL_SHIFT(3)
>> +#define THIRD_ORDER         XEN_PT_LEVEL_ORDER(3)
>> +#define THIRD_SIZE          XEN_PT_LEVEL_SIZE(3)
>> +#define THIRD_MASK          XEN_PT_LEVEL_MASK(3)
>> +
>> +#define SECOND_SHIFT        XEN_PT_LEVEL_SHIFT(2)
>> +#define SECOND_ORDER        XEN_PT_LEVEL_ORDER(2)
>> +#define SECOND_SIZE         XEN_PT_LEVEL_SIZE(2)
>> +#define SECOND_MASK         XEN_PT_LEVEL_MASK(2)
>> +
>> +#define FIRST_SHIFT         XEN_PT_LEVEL_SHIFT(1)
>> +#define FIRST_ORDER         XEN_PT_LEVEL_ORDER(1)
>> +#define FIRST_SIZE          XEN_PT_LEVEL_SIZE(1)
>> +#define FIRST_MASK          XEN_PT_LEVEL_MASK(1)
>> +
>> +#define ZEROETH_SHIFT       XEN_PT_LEVEL_SHIFT(0)
>> +#define ZEROETH_ORDER       XEN_PT_LEVEL_ORDER(0)
>> +#define ZEROETH_SIZE        XEN_PT_LEVEL_SIZE(0)
>> +#define ZEROETH_MASK        XEN_PT_LEVEL_MASK(0)
>>
>> I don't plan to modify the nameing for ZEROETH*, FIRST*, SECOND*, THIRD*.
>>
>> Let me know if you prefer it over the currrent naming.
> 
> Yes, I think it is better, thanks!

Ok. I will try to respin the series soon.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 17:43:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 17:43:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156164.288156 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3iuy-0006pP-PU; Wed, 14 Jul 2021 17:43:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156164.288156; Wed, 14 Jul 2021 17:43:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3iuy-0006pI-Me; Wed, 14 Jul 2021 17:43:32 +0000
Received: by outflank-mailman (input) for mailman id 156164;
 Wed, 14 Jul 2021 17:43:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3iux-0006ou-0L
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 17:43:31 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3ius-000298-6I; Wed, 14 Jul 2021 17:43:26 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3ius-0000Ql-0W; Wed, 14 Jul 2021 17:43:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=/Wy16+YorsKHhbXvrZQZlVtTvl6rC4YImr6ofu1sJfY=; b=oOjw0Dps+67b6zfkHzLccJInSl
	ssSx0dK4BcblBHJonItoRUSEqb8TWFrePx86uAcLlMyZF6wg2x0mHphe18Er+J5LfhnlSKX4PXH72
	irIqKBPmcKVQ+00Cc7W0/ao/ZMsyxIbPnoYD66S7fX3muv2n3IXt7a6yZUs2faBi+k68=;
Subject: Re: [PATCH v2] tools/libxc: use uint32_t for pirq in
 xc_domain_irq_permission
To: Igor Druzhinin <igor.druzhinin@citrix.com>, xen-devel@lists.xenproject.org
Cc: iwj@xenproject.org, wl@xen.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, jbeulich@suse.com, sstabellini@kernel.org,
 jgross@suse.com, christian.lindig@citrix.com, dave@recoil.org
References: <1626139901-9444-1-git-send-email-igor.druzhinin@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <787d05e1-4b85-9a36-6dc1-79d660f19320@xen.org>
Date: Wed, 14 Jul 2021 18:43:23 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <1626139901-9444-1-git-send-email-igor.druzhinin@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Igor,

On 13/07/2021 02:31, Igor Druzhinin wrote:
> Current unit8_t for pirq argument in this interface is too restrictive
> causing failures on modern hardware with lots of GSIs. That extends down to
> XEN_DOMCTL_irq_permission ABI structure where it needs to be fixed up
> as well.
> 
> Internal Xen structures appear to be fine. Existing users of the interface
> in tree (libxl, ocaml and python bindings) are currently using signed int
> for pirq representation which should be wide enough. Converting them to
> uint32_t now is desirable to avoid accidental passing of a negative
> number (probably denoting an error code) by caller as pirq, but left for
> the future clean up.
> 
> Domctl interface version is needed to be bumped with this change but that
> was already done by 918b8842a8 ("arm64: Change type of hsr, cpsr, spsr_el1
> to uint64_t") in this release cycle.
> 
> Additionally, take a change and convert allow_access argument to bool.
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

The reviewed tags are generally added after the signed-off-by.

The reshuffle can be done on commit.

> Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
> Acked-by: Christian Lindig <christian.lindig@citrix.com>

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 18:02:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 18:02:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156171.288170 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3jCk-0001sX-Ar; Wed, 14 Jul 2021 18:01:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156171.288170; Wed, 14 Jul 2021 18:01:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3jCk-0001sQ-7w; Wed, 14 Jul 2021 18:01:54 +0000
Received: by outflank-mailman (input) for mailman id 156171;
 Wed, 14 Jul 2021 18:01:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3jCj-0001sG-2M
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 18:01:53 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3jCg-0002aM-BU; Wed, 14 Jul 2021 18:01:50 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3jCg-0001uB-4s; Wed, 14 Jul 2021 18:01:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=qKBLiSvebRCGBGg8R5rnEb1izOQN/PqWw1SeEaqJpAc=; b=mkYxBohlrOBp+8ru6KvfuWWBA+
	U8I2jRae7ajS8X/bJLPXDhap0Q1tj5qNNaEwM7d4sm/LZu0sd7zZu9BXunKsWiV4E0kEmHaHYU2hR
	Hn0IO6IbSdpO2FejDv4LDGWh1VCGVLDY3gfZ3firkHiHv3VeSXPCkdJPz6+uvnijbiec=;
Subject: Re: [PATCH] SUPPORT.md: add Dom0less as Supported
To: Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org
Cc: andrew.cooper3@citrix.com, george.dunlap@citrix.com, jbeulich@suse.com,
 iwj@xenproject.org, wl@xen.org
References: <alpine.DEB.2.21.2107131734170.23286@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <47749630-ff78-e00f-63c0-8ff71a6a04c9@xen.org>
Date: Wed, 14 Jul 2021 19:01:48 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107131734170.23286@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 14/07/2021 01:39, Stefano Stabellini wrote:
> Add Dom0less to SUPPORT.md to clarify its support status. The feature is
> mature enough and small enough to make it security supported.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> 
> diff --git a/SUPPORT.md b/SUPPORT.md
> index 317392d8f3..c777f3da72 100644
> --- a/SUPPORT.md
> +++ b/SUPPORT.md
> @@ -832,6 +832,12 @@ OVMF firmware implements the UEFI boot protocol.
>   
>       Status, qemu-xen: Supported
>   
> +## Dom0less
> +
> +Guest creation from the hypervisor at boot without Dom0 intervention.
> +
> +    Status, ARM: Supported
> +

After XSA-372, we will not scrubbed memory assigned to dom0less DomU 
when bootscrub=on. Do we want to exclude this combination or mention 
that XSAs will not be issued if the domU can read secret from unscrubbed 
memory?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 18:16:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 18:16:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156178.288184 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3jR8-0004Nb-Jg; Wed, 14 Jul 2021 18:16:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156178.288184; Wed, 14 Jul 2021 18:16:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3jR8-0004NU-Ge; Wed, 14 Jul 2021 18:16:46 +0000
Received: by outflank-mailman (input) for mailman id 156178;
 Wed, 14 Jul 2021 18:16:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3jR7-0004NK-L8
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 18:16:45 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3jR5-0002pw-Rr; Wed, 14 Jul 2021 18:16:43 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3jR5-0002qw-Lg; Wed, 14 Jul 2021 18:16:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=yssYiHJH9BR8drt4JeB5l32n6DVNC1BHpXUJdLWMLeQ=; b=VgKM7zjVxP2PLqa+TtgxsBA1Zr
	/rBYJ2Tb6Nub7juXmgoSY8yDnWB8xWU5xwIZebwt0623pbeiWZQFbNTU0wXL4a3gi6Ta5lErp9U67
	ATW+3gLnAy/9PTthyeY+V/h0wdOf3rYFWTi9LDpJi2a5nQpdI7oOMQJ0lNS/rF/i3tVc=;
Subject: Re: [PATCH v2 13/13] SUPPORT.md: write down restriction of 32-bit
 tool stacks
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <e12989f7-9217-e2b8-a17d-5c252dc89248@xen.org>
Date: Wed, 14 Jul 2021 19:16:41 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 05/07/2021 16:18, Jan Beulich wrote:
> Let's try to avoid giving the impression that 32-bit tool stacks are as
> capable as 64-bit ones.

Would you be able to provide a few examples of the known issues in the 
commit message? This would be helpful for anyone to understand why we 
decided to drop the support.

At least on Arm, we tried to design the hypercall ABI in such a way that 
it should be possible to use a 32-bit toolstack.

That said, I am not aware of anyone using the 32-bit ABI on 64-bit Arm 
hypervisor. So dropping the support should be fine.

Cheers,

> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> v2: Wording adjustments as per review discussion.
> 
> --- a/SUPPORT.md
> +++ b/SUPPORT.md
> @@ -131,6 +131,12 @@ ARM only has one guest type at the momen
>   
>   ## Toolstack
>   
> +While 32-bit builds of the tool stack are generally supported, restrictions
> +apply in particular when running on top of a 64-bit hypervisor.  For example,
> +very large guests aren't expected to be manageable in this case.  This includes
> +guests giving the appearance of being large, by altering their own memory
> +layouts.
> +
>   ### xl
>   
>       Status: Supported
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 19:14:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 19:14:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156185.288201 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3kKc-00054h-4B; Wed, 14 Jul 2021 19:14:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156185.288201; Wed, 14 Jul 2021 19:14:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3kKc-00054a-1F; Wed, 14 Jul 2021 19:14:06 +0000
Received: by outflank-mailman (input) for mailman id 156185;
 Wed, 14 Jul 2021 19:14:04 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3kKa-00054K-Rc; Wed, 14 Jul 2021 19:14:04 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3kKa-0003mV-Fv; Wed, 14 Jul 2021 19:14:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3kKa-0003K0-52; Wed, 14 Jul 2021 19:14:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3kKa-0001Jc-4U; Wed, 14 Jul 2021 19:14:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=6AXxWQbfSx9Q5/aYvlUCbbGFCr9slmVAmKx9A/J8fe0=; b=DuJjtAAG3w9/xKCrY8cGmiqfZn
	jFg9IdmkSTLzVs7i4MSE4/x7HGQC8FX49u0R+eC2jjB2xFSblHs+S16dOWclFHnLl1PYa+L3MSMo/
	QPfTEcalXguL1/FQ+5/2Yxy0iZviHxzu7nHE2upFpZiVEW9HTkFJwPXfv2UlkI37XnXs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163677-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163677: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-credit1:xen-boot:fail:heisenbug
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=2a54fc454cf0dbf173d5dc95205febe381cfb7cc
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 14 Jul 2021 19:14:04 +0000

flight 163677 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163677/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-credit1   8 xen-boot                   fail pass in 163663

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-credit1 15 migrate-support-check fail in 163663 never pass
 test-armhf-armhf-xl-credit1 16 saverestore-support-check fail in 163663 never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                2a54fc454cf0dbf173d5dc95205febe381cfb7cc
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    8 days
Failing since        163327  2021-07-06 12:39:04 Z    8 days   16 attempts
Testing same since   163663  2021-07-13 23:38:00 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Lara Lazier <laramglazier@gmail.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 6651 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 19:28:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 19:28:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156192.288216 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3kYu-0007bM-Gk; Wed, 14 Jul 2021 19:28:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156192.288216; Wed, 14 Jul 2021 19:28:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3kYu-0007bF-Cu; Wed, 14 Jul 2021 19:28:52 +0000
Received: by outflank-mailman (input) for mailman id 156192;
 Wed, 14 Jul 2021 19:28:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3kYt-0007b0-3f
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 19:28:51 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b6ed5708-e4d9-11eb-885e-12813bfff9fa;
 Wed, 14 Jul 2021 19:28:49 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id B5BF5613C8;
 Wed, 14 Jul 2021 19:28:48 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b6ed5708-e4d9-11eb-885e-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626290929;
	bh=rPyqVuSVh2irCvBiyOmpbI6hHm6kiNlNLPwuUCdNTVw=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=HlTWdrVQLBzO51UZkNW7Z28CvLa4FmcIAGGnkQVZAvbGFe90rSdruV1KKCUl1mavr
	 BRqkP5+OA2sNhyNh7IXxr7XjsoQuPNbnQB0AEmI7OFjZm8UTugaLFHy3mWBdZ02HVc
	 q4z5YvG8q+8wfcfxhWBVotuom/pILujvoJ/sqOPeeuVQipkVBMa6vakRjef/kx7p3e
	 aIj9ekyYsmGy/57GkhbhJ+cEIG+33LCjaFtfzFPuyrJcDCROWAiqxteQKTamGob3bD
	 YD/8hR5+BikgGeveT689YDaqQX3E+T7G5TnD22IuhaEjRTp+LVbYYLzm1/sGhI90dG
	 2V70g2JOSwZ7g==
Date: Wed, 14 Jul 2021 12:28:48 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com, 
    george.dunlap@citrix.com, jbeulich@suse.com, iwj@xenproject.org, 
    wl@xen.org
Subject: Re: [PATCH] SUPPORT.md: add Dom0less as Supported
In-Reply-To: <47749630-ff78-e00f-63c0-8ff71a6a04c9@xen.org>
Message-ID: <alpine.DEB.2.21.2107141224550.23286@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107131734170.23286@sstabellini-ThinkPad-T480s> <47749630-ff78-e00f-63c0-8ff71a6a04c9@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Wed, 14 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 14/07/2021 01:39, Stefano Stabellini wrote:
> > Add Dom0less to SUPPORT.md to clarify its support status. The feature is
> > mature enough and small enough to make it security supported.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > 
> > diff --git a/SUPPORT.md b/SUPPORT.md
> > index 317392d8f3..c777f3da72 100644
> > --- a/SUPPORT.md
> > +++ b/SUPPORT.md
> > @@ -832,6 +832,12 @@ OVMF firmware implements the UEFI boot protocol.
> >         Status, qemu-xen: Supported
> >   +## Dom0less
> > +
> > +Guest creation from the hypervisor at boot without Dom0 intervention.
> > +
> > +    Status, ARM: Supported
> > +
> 
> After XSA-372, we will not scrubbed memory assigned to dom0less DomU when
> bootscrub=on.

Do you mean *before* XSA-372, right? I thought the XSA-372 patches take
care of the problem?


> Do we want to exclude this combination or mention that XSAs will
> not be issued if the domU can read secret from unscrubbed memory?

I could say that if bootscrub=off then we won't issue XSAs for domUs reading
secrets from unscrubbed memory. But it is kind of obvious anyway? I am
happy to add it if you think it is good to clarify.


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 19:43:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 19:43:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156198.288227 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3kmo-0002Bg-Q1; Wed, 14 Jul 2021 19:43:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156198.288227; Wed, 14 Jul 2021 19:43:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3kmo-0002BZ-Mq; Wed, 14 Jul 2021 19:43:14 +0000
Received: by outflank-mailman (input) for mailman id 156198;
 Wed, 14 Jul 2021 19:43:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3kmn-0002BR-Nj
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 19:43:13 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3kml-0004G9-3y; Wed, 14 Jul 2021 19:43:11 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3kmk-0003O5-Tx; Wed, 14 Jul 2021 19:43:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=A7sJazuRwFikAxaPX2Thh0UgcHfGngxkrskJnNE3+qE=; b=4w9TCu0e+y4r11rE1qFGePTTtz
	dCkjHntToVExhteCDmOftPitwRpi/g3Pl2VALPxqTAEg1yXzxrxdQkpmB80pNy4M4juYEdylcwpiE
	FzBFM+zLyrsHwYc5XWRdTnBuTMcsTwbq0y8YyMiaEpLtAYCzV5mt6foEK8RZJXtPncH4=;
Subject: Re: [PATCH] SUPPORT.md: add Dom0less as Supported
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, jbeulich@suse.com, iwj@xenproject.org, wl@xen.org
References: <alpine.DEB.2.21.2107131734170.23286@sstabellini-ThinkPad-T480s>
 <47749630-ff78-e00f-63c0-8ff71a6a04c9@xen.org>
 <alpine.DEB.2.21.2107141224550.23286@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <f443ca4f-a942-7765-a8c0-072d2844a0d9@xen.org>
Date: Wed, 14 Jul 2021 20:43:08 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107141224550.23286@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 14/07/2021 20:28, Stefano Stabellini wrote:
> On Wed, 14 Jul 2021, Julien Grall wrote:
>> Hi Stefano,
>>
>> On 14/07/2021 01:39, Stefano Stabellini wrote:
>>> Add Dom0less to SUPPORT.md to clarify its support status. The feature is
>>> mature enough and small enough to make it security supported.
>>>
>>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
>>>
>>> diff --git a/SUPPORT.md b/SUPPORT.md
>>> index 317392d8f3..c777f3da72 100644
>>> --- a/SUPPORT.md
>>> +++ b/SUPPORT.md
>>> @@ -832,6 +832,12 @@ OVMF firmware implements the UEFI boot protocol.
>>>          Status, qemu-xen: Supported
>>>    +## Dom0less
>>> +
>>> +Guest creation from the hypervisor at boot without Dom0 intervention.
>>> +
>>> +    Status, ARM: Supported
>>> +
>>
>> After XSA-372, we will not scrubbed memory assigned to dom0less DomU when
>> bootscrub=on.
> 
> Do you mean *before* XSA-372, right?

No, I really meant *after* XSA-372.

> I thought the XSA-372 patches take
> care of the problem?

It didn't. We have an open question for the bootscrub=on one. From the 
commit message of patch #1:

         2) The memory allocated for a domU will not be scrubbed anymore 
when an
         admin select bootscrub=on. This is not something we advertised, 
but if
         this is a concern we can introduce either force scrub for all 
domUs or
         a per-domain flag in the DT. The behavior for bootscrub=off and
         bootscrub=idle (default) has not changed.

>  >
>> Do we want to exclude this combination or mention that XSAs will
>> not be issued if the domU can read secret from unscrubbed memory?
> 
> I could say that if bootscrub=off then we won't issue XSAs for domUs reading
> secrets from unscrubbed memory. But it is kind of obvious anyway? I am
> happy to add it if you think it is good to clarify.

Right, it is pretty clear that bootscrub=off will not scrub the memory 
and the "problem" would not be specific to dom0less.

The one I asked to clarify is bootscrub=on because one may think the 
memory is scrubbed for dom0less domU for all the cases but bootscrub=off.

IIRC when we discussed about it on security@xen.org, we suggested that 
it would be fine to rely on the bootloader to scrub it. But I think this 
needs to be written down rather waiting for it to be re-discovered.

The other solution is to fix it properly.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 20:38:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 20:38:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156212.288258 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3le9-0000L8-Ht; Wed, 14 Jul 2021 20:38:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156212.288258; Wed, 14 Jul 2021 20:38:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3le9-0000Kv-E9; Wed, 14 Jul 2021 20:38:21 +0000
Received: by outflank-mailman (input) for mailman id 156212;
 Wed, 14 Jul 2021 20:38:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kxbS=MG=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m3le7-0000KG-Pc
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 20:38:19 +0000
Received: from mail-pf1-x431.google.com (unknown [2607:f8b0:4864:20::431])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a66d8a53-11d2-43d1-a186-ab0271001d25;
 Wed, 14 Jul 2021 20:38:19 +0000 (UTC)
Received: by mail-pf1-x431.google.com with SMTP id o201so3101865pfd.1
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 13:38:19 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id b17sm1785084pfm.54.2021.07.14.13.38.13
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 14 Jul 2021 13:38:17 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: a66d8a53-11d2-43d1-a186-ab0271001d25
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=PVjxJO7r4tEQ5KrqJV2fLuS45xkhLqACA4SCEsFghwg=;
        b=LOzr0TSGpoY/uDxpvLTKhA2FZnlCEorEMej+Oifny9CBnjufEhEYllm4eg+dfxST8x
         YM/2ZHAEkYxfSCkAlcGW1AsVxX0tnYzLaFGvS4r8BZCr9iBdNFZlbCMnTs797vu6Kvek
         rG3ThorDLN1LaQvMIRxw/xBV2rRQNmEWsFE/1Y9A+7CbLrjzvc2Rjmmt0jmScjyoDRQp
         B8pVoJ+y0h81ncvpkr5eLx2SdVGn1dHdgjZVh1GUtwLHSKXJMncET/NM2xvg+r+UrZfa
         8FM41IFcwsJEUlXcbo0TiSclE+ySJS0QSMBoCpHg+GY/u3QrhE8Pg5pR4otSJECPJuy4
         YMPw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=PVjxJO7r4tEQ5KrqJV2fLuS45xkhLqACA4SCEsFghwg=;
        b=YCmNE/QE6crt7u+Z32YgyOyJYsVZBSvkSmXuk/DA9FoFYK+03Shyysi2C8g7d01cUE
         MWBmxCbkDWj3GtzlR1vJStNSyfe8FUAoTrRbVtXOpfSBDOnvaiS/bhnarSns8m1S1+6r
         dhAGZ8VLRBXUgV+0wN4GoAkuGdCCaAQfLeQwi6jzWUOiLIwYQfEu9Lam4WoXOA4IP0g+
         VMiZlTPd0lURoH9qKxfDykLlhPp9uk2BzEjA2XACeODRXGhmfpxMjroGjfe8cIC06nKi
         dE5cc5NsfwRKwPCJPX1UKKr93xK1iqwuLYyyNBsbp8zJ7axi7h7V9+9c2LWuOMUszlg9
         sElQ==
X-Gm-Message-State: AOAM533PMwRgEwAkU8ap/fBuoH9nut7/4prM/QkAKgSywiLlhh1Iiw2c
	MtZ6hnXSGxoroJipU0vlsOsAs//Zz9XDyqDA
X-Google-Smtp-Source: ABdhPJwrIpd7894157L04ZpBVIBPvvAbUKvKVDl93xih+9WvPToauUvvW8+k0RdKIk0ByMnQGyf7kA==
X-Received: by 2002:a62:1697:0:b029:326:7ec1:a9e9 with SMTP id 145-20020a6216970000b02903267ec1a9e9mr116882pfw.14.1626295098137;
        Wed, 14 Jul 2021 13:38:18 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH v2 1/4] arm/traps: remove debugger_trap_fatal() calls
Date: Wed, 14 Jul 2021 13:37:44 -0700
Message-Id: <2de1e8493e08722b5444d1293c5af299c76bf891.1626286772.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626286772.git.bobby.eshleman@gmail.com>
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

ARM doesn't actually use debugger_trap_* anything, and is stubbed out.

Simply remove the calls. This also renders TRAP_invalid_op unused in
any common code, so remove that definition too.

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---
 xen/arch/arm/traps.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 4ccb6e7d18..dd09d2a4a9 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -1266,10 +1266,6 @@ int do_bug_frame(const struct cpu_user_regs *regs, vaddr_t pc)
 
     case BUGFRAME_bug:
         printk("Xen BUG at %s%s:%d\n", prefix, filename, lineno);
-
-        if ( debugger_trap_fatal(TRAP_invalid_op, regs) )
-            return 0;
-
         show_execution_state(regs);
         panic("Xen BUG at %s%s:%d\n", prefix, filename, lineno);
 
@@ -1281,8 +1277,6 @@ int do_bug_frame(const struct cpu_user_regs *regs, vaddr_t pc)
 
         printk("Assertion '%s' failed at %s%s:%d\n",
                predicate, prefix, filename, lineno);
-        if ( debugger_trap_fatal(TRAP_invalid_op, regs) )
-            return 0;
         show_execution_state(regs);
         panic("Assertion '%s' failed at %s%s:%d\n",
               predicate, prefix, filename, lineno);
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 20:38:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 20:38:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156211.288247 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ldy-0008RG-8s; Wed, 14 Jul 2021 20:38:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156211.288247; Wed, 14 Jul 2021 20:38:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3ldy-0008R9-5g; Wed, 14 Jul 2021 20:38:10 +0000
Received: by outflank-mailman (input) for mailman id 156211;
 Wed, 14 Jul 2021 20:38:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kxbS=MG=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m3ldw-0008R3-ES
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 20:38:08 +0000
Received: from mail-pj1-x1033.google.com (unknown [2607:f8b0:4864:20::1033])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 575e2b66-9645-42dc-abe3-f8229d8b3b29;
 Wed, 14 Jul 2021 20:38:07 +0000 (UTC)
Received: by mail-pj1-x1033.google.com with SMTP id cu14so2389933pjb.0
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 13:38:07 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id b17sm1785084pfm.54.2021.07.14.13.38.05
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 14 Jul 2021 13:38:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 575e2b66-9645-42dc-abe3-f8229d8b3b29
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=eXcmPYRmIZRKai4yvtuLaU2ooiqorDKfUQfup3P5Zt4=;
        b=Sx4ofn3BsRNqQBpJ2nDg9fTrutZKk0CwtgNd79WCd/1koyMUyoq+HYtahHHYEQQenA
         1imXWXjGuM/vMd4JiSb468D1fB7WoNfPQVStakW3yPMQbwZop5aVbAG/6x3g/VNZmi2h
         JMAZ0e25Xs1VtzBJbJiGqTqxRO5KnTjCbAkb/M4+pZ+xAo8hRBxY0z5B44ywtg0UKbZe
         Nc6fMKwo4KI+ZaN314XXjghIBdTFEB4ZRCNCwmrQlU9t7/5f9YzkAWOHYh4AjYR7aS+b
         Vi64pEUVM0RqTby9if0BAF+vI01zmQj7G8J+4nvIh1QQR91+MfHup4/TWH4lZjcqz8na
         GK/w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :mime-version:content-transfer-encoding;
        bh=eXcmPYRmIZRKai4yvtuLaU2ooiqorDKfUQfup3P5Zt4=;
        b=EmDXFdTZu9Oc/0zBQKyzCvEenwxWnfQLuCo/MndNA3aiE0V8dYRKRZnbJyitKIjUWe
         QWzFMwoDdux7FAsSrji0ld2Rg/OzahbXZ+lVBB77xHXejhykXATXd0AUBxrfgrhgaYuD
         H/xkRzlj0eZYljHQ20DVbizV7Lh4HaLwy0JtnOZTk4IFk1mVaq0fLfaKVLbGxDCwlXV7
         molaxvyyA+oepxMJeUUazeYTu5ShmHuqfskT85MT311BoYdyY5nbGXB2gJlgYmZ8WeMV
         c++UlybEs+PLy8Y/TVb8mOVEgFJfBfr4bI6toggRfzNUin2zXN5VwTpAGYsIxtWUZVbx
         GhVA==
X-Gm-Message-State: AOAM533ZLWJTCS49CQwrCjBqJTPYZA+CnBlG/uU4F8VIiu0CXCrft9AG
	r2TDHCXNrWRNpXvMZeD6Ha/z+cve5UtbsyzK
X-Google-Smtp-Source: ABdhPJwoG2TovbVlMxzfxRY6/Ca8T2EZEP7yktYl5Aj24XP0eW14eOrl/rmJNgSSgzOvHSpVEoq+PA==
X-Received: by 2002:a17:90a:7489:: with SMTP id p9mr5559384pjk.101.1626295086392;
        Wed, 14 Jul 2021 13:38:06 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH v2 0/4] Remove unconditional arch dependency on asm/debugger.h 
Date: Wed, 14 Jul 2021 13:37:43 -0700
Message-Id: <cover.1626286772.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Currently, any architecture wishing to use common/ is likely
to be required to implement the functions found in "asm/debugger.h".
Some architectures, however, do not have an actual use for these
functions and so are forced to implement stubs.  This patch does the
following:

* Supplies common stubs if !CONFIG_CRASH_DEBUG for any architecture,
  removing the need for all new architectures to have "asm/debugger.h".
* Moves parts of the x86 implementation to "arch/x86/debugger.c".
* Removes the ARM calls to its stubs.
* Centralizes non-inlined x86 code conditionally compiled by CONFIG_CRASH_DEBUG
  into arch/x86/debugger.c, which is now conditionally built for
  CONFIG_CRASH_DEBUG via Kbuild (i.e., obj-$(CONFIG_CRASH_DEBUG)).
* Tries to improve the x86 implementation by not inlining large
  functions (but preserving inlining for those that seemed "small").

Bobby Eshleman (4):
  arm/traps: remove debugger_trap_fatal() calls
  build: use common stubs for debugger_trap_* functions if
    !CONFIG_CRASH_DEBUG
  x86/debug: move debugger_trap_entry into debugger.c not inlined
  x86/debug: move domain_pause_for_debugger to debugger.c

 xen/arch/arm/traps.c            |  8 +--
 xen/arch/x86/Makefile           |  1 +
 xen/arch/x86/debug.c            |  2 +-
 xen/arch/x86/debugger.c         | 53 ++++++++++++++++++++
 xen/arch/x86/domain.c           | 15 +-----
 xen/arch/x86/domctl.c           |  2 +-
 xen/arch/x86/gdbstub.c          |  4 +-
 xen/arch/x86/hvm/svm/svm.c      |  2 +-
 xen/arch/x86/hvm/vmx/realmode.c |  2 +-
 xen/arch/x86/hvm/vmx/vmx.c      |  2 +-
 xen/arch/x86/nmi.c              |  2 +-
 xen/arch/x86/traps.c            |  2 +-
 xen/arch/x86/x86_64/gdbstub.c   |  3 +-
 xen/common/domain.c             |  2 +-
 xen/common/gdbstub.c            |  3 +-
 xen/common/keyhandler.c         |  2 +-
 xen/common/shutdown.c           |  2 +-
 xen/drivers/char/console.c      |  2 +-
 xen/include/asm-arm/debugger.h  | 15 ------
 xen/include/asm-x86/debugger.h  | 86 ++++++---------------------------
 xen/include/xen/debugger.h      | 69 ++++++++++++++++++++++++++
 21 files changed, 157 insertions(+), 122 deletions(-)
 create mode 100644 xen/arch/x86/debugger.c
 delete mode 100644 xen/include/asm-arm/debugger.h
 create mode 100644 xen/include/xen/debugger.h

-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 20:38:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 20:38:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156213.288269 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3leC-0000ez-V7; Wed, 14 Jul 2021 20:38:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156213.288269; Wed, 14 Jul 2021 20:38:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3leC-0000eq-Nz; Wed, 14 Jul 2021 20:38:24 +0000
Received: by outflank-mailman (input) for mailman id 156213;
 Wed, 14 Jul 2021 20:38:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kxbS=MG=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m3leC-0000KG-5Z
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 20:38:24 +0000
Received: from mail-pj1-x102d.google.com (unknown [2607:f8b0:4864:20::102d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b8a3144c-427d-4b48-93a9-b509a296a775;
 Wed, 14 Jul 2021 20:38:21 +0000 (UTC)
Received: by mail-pj1-x102d.google.com with SMTP id
 p14-20020a17090ad30eb02901731c776526so4644124pju.4
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 13:38:21 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id b17sm1785084pfm.54.2021.07.14.13.38.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 14 Jul 2021 13:38:20 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: b8a3144c-427d-4b48-93a9-b509a296a775
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=jpxytOQI7mEBkhk32tjmUuolX/Q1Yn907IdDWiELMV8=;
        b=KykIMWqip6LoIXDyfSIq1qKR+Gka1EeLBtyAXfy1PAyEX8IAy2CQqBjYs+iQijhq6E
         oBqqmHG2YYeB3U5oMTWVRcfkb4fL00GONk9XjkW2XRkzrtYfVTBR7zG6+sb1SWWUPo0d
         RLhSFnIRmEu8g/8H2D+D3qiY/UDijfXhagimglVk+VqWzOCVeOuKfLBsUPbbEsN2KMJJ
         KiYBdkJSgZqe+49Pc1s8J2bv0NW8dGkSTnYbOejvZJe042W6lOnLymZPLhzXkIQrshvp
         4cwmheN/i92dLZ/ybShqNLaI+2bKo4fmCKWh0DalRAW+MLXY23gi8R07mQij5NJfHjtJ
         GVpg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=jpxytOQI7mEBkhk32tjmUuolX/Q1Yn907IdDWiELMV8=;
        b=VOvJt6baTOUJyBovXq8/mPrQHDyzgOgxbjw4AhHOEsMH5n+V9dAt/PfzlfySxR4TlO
         /T73+GEP9TZxgC4EcS7sCkutDEzZAFgUT1t+JV5XIzRXpcBi0rpqtGRT5BXAtEgD2FLA
         aslPolNUSyp8RVA41tnhqu7RRnpTWyKCQZouryldwnLYTNalbF1xhUcwD3DyFNFv1wbR
         972iIeNBEi4U+zsNywghHJYqF/Djegsx+PcP+/g0GGh0ZsdPruCnD3XSqPsiOpKvoTy7
         ClvQUrVrp9mGcHnTDC4oN1jtIQletQibqBY9vexoK0TrGwPvF4lOL/wbIQhlDCpaR0h+
         /Xhw==
X-Gm-Message-State: AOAM531w8B9uKqgg9DOkPdicJZ9Z7qkb+cACqiUOQ0UpLpRUdxEsImr+
	6a0I17zHUGxjTF20kKSVHz525V8xwWXgjksC
X-Google-Smtp-Source: ABdhPJz+EAy20EOa/LMJc6vD8Yk4JeBto6hIMQMv4UVrk1D9AH1LmIfGafjTYMw04uoHk67badcmLw==
X-Received: by 2002:a17:90b:fd6:: with SMTP id gd22mr5497865pjb.37.1626295100499;
        Wed, 14 Jul 2021 13:38:20 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH v2 2/4] build: use common stubs for debugger_trap_* functions if !CONFIG_CRASH_DEBUG
Date: Wed, 14 Jul 2021 13:37:45 -0700
Message-Id: <d74af998bfd8d00e57ea82ce6731ccf2afc8e95b.1626286772.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626286772.git.bobby.eshleman@gmail.com>
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Previously Xen required all architectures implement the debugger_trap_*
functions whether or not it actually needs them.

This commit makes debugger_trap* functions resolve to arch-specific
function definitions if CONFIG_CRASH_DEBUG=y, but resolves to a set of
common no-op stubs if !CONFIG_CRASH_DEBUG, which avoids requiring every
arch to carry its own stubs.  This means asm/debugger.h may also be
dropped for architectures that do not need this functionality.

Inside xen/debugger.h:
    * If !CONFIG_CRASH_DEBUG, use stubs.
    * Otherwise, include arch-specific <asm/debugger.h>
---

Changes in v2:
- #include ordering (xen/.h before asm/.h, alphabetical order)
- Other style (no double blanks in comments).
- Removed dummy TRAP_invalid_op for ARM (not needed because
  the patch to remove the calls is now prior to this patch)
- Removed common-izing of dbg_rw_mem

 xen/arch/arm/traps.c            |  2 +-
 xen/arch/x86/debug.c            |  2 +-
 xen/arch/x86/domain.c           |  5 ++-
 xen/arch/x86/domctl.c           |  2 +-
 xen/arch/x86/gdbstub.c          |  4 +-
 xen/arch/x86/hvm/svm/svm.c      |  2 +-
 xen/arch/x86/hvm/vmx/realmode.c |  2 +-
 xen/arch/x86/hvm/vmx/vmx.c      |  2 +-
 xen/arch/x86/nmi.c              |  2 +-
 xen/arch/x86/traps.c            |  2 +-
 xen/arch/x86/x86_64/gdbstub.c   |  3 +-
 xen/common/domain.c             |  2 +-
 xen/common/gdbstub.c            |  3 +-
 xen/common/keyhandler.c         |  2 +-
 xen/common/shutdown.c           |  2 +-
 xen/drivers/char/console.c      |  2 +-
 xen/include/asm-arm/debugger.h  | 15 -------
 xen/include/asm-x86/debugger.h  | 60 ++++++----------------------
 xen/include/xen/debugger.h      | 69 +++++++++++++++++++++++++++++++++
 19 files changed, 103 insertions(+), 80 deletions(-)
 delete mode 100644 xen/include/asm-arm/debugger.h
 create mode 100644 xen/include/xen/debugger.h

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index dd09d2a4a9..10db98e01a 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -16,6 +16,7 @@
  * GNU General Public License for more details.
  */
 
+#include <xen/debugger.h>
 #include <xen/domain_page.h>
 #include <xen/errno.h>
 #include <xen/hypercall.h>
@@ -41,7 +42,6 @@
 #include <asm/acpi.h>
 #include <asm/cpuerrata.h>
 #include <asm/cpufeature.h>
-#include <asm/debugger.h>
 #include <asm/event.h>
 #include <asm/hsr.h>
 #include <asm/mmio.h>
diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/debug.c
index d90dc93056..583a9a042a 100644
--- a/xen/arch/x86/debug.c
+++ b/xen/arch/x86/debug.c
@@ -14,12 +14,12 @@
  * License along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <xen/debugger.h>
 #include <xen/sched.h>
 #include <xen/compile.h>
 #include <xen/mm.h>
 #include <xen/domain_page.h>
 #include <xen/guest_access.h>
-#include <asm/debugger.h>
 #include <asm/p2m.h>
 
 typedef unsigned long dbgva_t;
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index ef1812dc14..5b948ff270 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -15,6 +15,7 @@
 #include <xen/lib.h>
 #include <xen/errno.h>
 #include <xen/sched.h>
+#include <xen/debugger.h>
 #include <xen/domain.h>
 #include <xen/smp.h>
 #include <xen/delay.h>
@@ -2539,9 +2540,9 @@ static int __init init_vcpu_kick_softirq(void)
 }
 __initcall(init_vcpu_kick_softirq);
 
+#ifdef CONFIG_CRASH_DEBUG
 void domain_pause_for_debugger(void)
 {
-#ifdef CONFIG_CRASH_DEBUG
     struct vcpu *curr = current;
     struct domain *d = curr->domain;
 
@@ -2550,8 +2551,8 @@ void domain_pause_for_debugger(void)
     /* if gdbsx active, we just need to pause the domain */
     if ( curr->arch.gdbsx_vcpu_event == 0 )
         send_global_virq(VIRQ_DEBUGGER);
-#endif
 }
+#endif
 
 /*
  * Local variables:
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 26a76d2be9..24bdb86de7 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -12,6 +12,7 @@
 #include <xen/pci.h>
 #include <public/domctl.h>
 #include <xen/sched.h>
+#include <xen/debugger.h>
 #include <xen/domain.h>
 #include <xen/event.h>
 #include <xen/domain_page.h>
@@ -33,7 +34,6 @@
 #include <public/vm_event.h>
 #include <asm/mem_sharing.h>
 #include <asm/xstate.h>
-#include <asm/debugger.h>
 #include <asm/psr.h>
 #include <asm/cpuid.h>
 
diff --git a/xen/arch/x86/gdbstub.c b/xen/arch/x86/gdbstub.c
index 8f4f49fd3b..5e23d27f62 100644
--- a/xen/arch/x86/gdbstub.c
+++ b/xen/arch/x86/gdbstub.c
@@ -18,7 +18,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
-#include <asm/debugger.h>
+#include <xen/debugger.h>
+#include <xen/gdbstub.h>
+#include <asm/uaccess.h>
 
 u16
 gdb_arch_signal_num(struct cpu_user_regs *regs, unsigned long cookie)
diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index 642a64b747..ce1cbe7825 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -24,6 +24,7 @@
 #include <xen/irq.h>
 #include <xen/softirq.h>
 #include <xen/hypercall.h>
+#include <xen/debugger.h>
 #include <xen/domain_page.h>
 #include <xen/xenoprof.h>
 #include <asm/current.h>
@@ -58,7 +59,6 @@
 #include <asm/hvm/trace.h>
 #include <asm/hap.h>
 #include <asm/apic.h>
-#include <asm/debugger.h>
 #include <asm/hvm/monitor.h>
 #include <asm/monitor.h>
 #include <asm/xstate.h>
diff --git a/xen/arch/x86/hvm/vmx/realmode.c b/xen/arch/x86/hvm/vmx/realmode.c
index cc23afa788..57d230c4fe 100644
--- a/xen/arch/x86/hvm/vmx/realmode.c
+++ b/xen/arch/x86/hvm/vmx/realmode.c
@@ -9,12 +9,12 @@
  *    Keir Fraser <keir@xen.org>
  */
 
+#include <xen/debugger.h>
 #include <xen/init.h>
 #include <xen/lib.h>
 #include <xen/sched.h>
 #include <xen/paging.h>
 #include <xen/softirq.h>
-#include <asm/debugger.h>
 #include <asm/event.h>
 #include <asm/hvm/emulate.h>
 #include <asm/hvm/hvm.h>
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index e09b7e3af9..00107e8a3b 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -23,6 +23,7 @@
 #include <xen/sched.h>
 #include <xen/irq.h>
 #include <xen/softirq.h>
+#include <xen/debugger.h>
 #include <xen/domain_page.h>
 #include <xen/hypercall.h>
 #include <xen/perfc.h>
@@ -51,7 +52,6 @@
 #include <asm/hvm/trace.h>
 #include <asm/hvm/monitor.h>
 #include <asm/xenoprof.h>
-#include <asm/debugger.h>
 #include <asm/apic.h>
 #include <asm/hvm/nestedhvm.h>
 #include <asm/altp2m.h>
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index ab94a96c4d..505358b656 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -18,6 +18,7 @@
 #include <xen/mm.h>
 #include <xen/param.h>
 #include <xen/irq.h>
+#include <xen/debugger.h>
 #include <xen/delay.h>
 #include <xen/time.h>
 #include <xen/sched.h>
@@ -30,7 +31,6 @@
 #include <asm/msr.h>
 #include <asm/mpspec.h>
 #include <asm/nmi.h>
-#include <asm/debugger.h>
 #include <asm/div64.h>
 #include <asm/apic.h>
 
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index e60af16ddd..8561ffe3fe 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -27,6 +27,7 @@
 #include <xen/init.h>
 #include <xen/sched.h>
 #include <xen/lib.h>
+#include <xen/debugger.h>
 #include <xen/err.h>
 #include <xen/errno.h>
 #include <xen/mm.h>
@@ -62,7 +63,6 @@
 #include <asm/uaccess.h>
 #include <asm/i387.h>
 #include <asm/xstate.h>
-#include <asm/debugger.h>
 #include <asm/msr.h>
 #include <asm/nmi.h>
 #include <asm/xenoprof.h>
diff --git a/xen/arch/x86/x86_64/gdbstub.c b/xen/arch/x86/x86_64/gdbstub.c
index 2626519c89..126af03f50 100644
--- a/xen/arch/x86/x86_64/gdbstub.c
+++ b/xen/arch/x86/x86_64/gdbstub.c
@@ -17,7 +17,8 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <asm/debugger.h>
+#include <xen/debugger.h>
+#include <xen/gdbstub.h>
 
 #define GDB_REG64(r) gdb_write_to_packet_hex(r, sizeof(u64), ctx)
 #define GDB_REG32(r)  gdb_write_to_packet_hex(r, sizeof(u32), ctx)
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 6b71c6d6a9..a87d814b38 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -11,6 +11,7 @@
 #include <xen/err.h>
 #include <xen/param.h>
 #include <xen/sched.h>
+#include <xen/debugger.h>
 #include <xen/domain.h>
 #include <xen/mm.h>
 #include <xen/event.h>
@@ -33,7 +34,6 @@
 #include <xen/xenoprof.h>
 #include <xen/irq.h>
 #include <xen/argo.h>
-#include <asm/debugger.h>
 #include <asm/p2m.h>
 #include <asm/processor.h>
 #include <public/sched.h>
diff --git a/xen/common/gdbstub.c b/xen/common/gdbstub.c
index 848c1f4327..c233eb2b49 100644
--- a/xen/common/gdbstub.c
+++ b/xen/common/gdbstub.c
@@ -38,12 +38,13 @@
 #include <xen/serial.h>
 #include <xen/irq.h>
 #include <xen/watchdog.h>
-#include <asm/debugger.h>
 #include <xen/init.h>
 #include <xen/param.h>
 #include <xen/smp.h>
 #include <xen/console.h>
 #include <xen/errno.h>
+#include <xen/gdbstub.h>
+#include <xen/debugger.h>
 #include <xen/delay.h>
 #include <asm/byteorder.h>
 
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index 8b9f378371..1eafaef9b2 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -3,6 +3,7 @@
  */
 
 #include <asm/regs.h>
+#include <xen/debugger.h>
 #include <xen/delay.h>
 #include <xen/keyhandler.h>
 #include <xen/param.h>
@@ -20,7 +21,6 @@
 #include <xen/mm.h>
 #include <xen/watchdog.h>
 #include <xen/init.h>
-#include <asm/debugger.h>
 #include <asm/div64.h>
 
 static unsigned char keypress_key;
diff --git a/xen/common/shutdown.c b/xen/common/shutdown.c
index abde48aa4c..f51d44fdc4 100644
--- a/xen/common/shutdown.c
+++ b/xen/common/shutdown.c
@@ -1,3 +1,4 @@
+#include <xen/debugger.h>
 #include <xen/init.h>
 #include <xen/lib.h>
 #include <xen/param.h>
@@ -8,7 +9,6 @@
 #include <xen/shutdown.h>
 #include <xen/console.h>
 #include <xen/kexec.h>
-#include <asm/debugger.h>
 #include <public/sched.h>
 
 /* opt_noreboot: If true, machine will need manual reset on error. */
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 7d0a603d03..3d1cdde821 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -15,6 +15,7 @@
 #include <xen/init.h>
 #include <xen/event.h>
 #include <xen/console.h>
+#include <xen/debugger.h>
 #include <xen/param.h>
 #include <xen/serial.h>
 #include <xen/softirq.h>
@@ -26,7 +27,6 @@
 #include <xen/kexec.h>
 #include <xen/ctype.h>
 #include <xen/warning.h>
-#include <asm/debugger.h>
 #include <asm/div64.h>
 #include <xen/hypercall.h> /* for do_console_io */
 #include <xen/early_printk.h>
diff --git a/xen/include/asm-arm/debugger.h b/xen/include/asm-arm/debugger.h
deleted file mode 100644
index ac776efa78..0000000000
--- a/xen/include/asm-arm/debugger.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef __ARM_DEBUGGER_H__
-#define __ARM_DEBUGGER_H__
-
-#define debugger_trap_fatal(v, r) (0)
-#define debugger_trap_immediate() ((void) 0)
-
-#endif /* __ARM_DEBUGGER_H__ */
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/xen/include/asm-x86/debugger.h b/xen/include/asm-x86/debugger.h
index 99803bfd0c..c856c1b795 100644
--- a/xen/include/asm-x86/debugger.h
+++ b/xen/include/asm-x86/debugger.h
@@ -1,44 +1,26 @@
 /******************************************************************************
- * asm/debugger.h
- * 
- * Generic hooks into arch-dependent Xen.
- * 
- * Each debugger should define two functions here:
- * 
- * 1. debugger_trap_entry(): 
- *  Called at start of any synchronous fault or trap, before any other work
- *  is done. The idea is that if your debugger deliberately caused the trap
- *  (e.g. to implement breakpoints or data watchpoints) then you can take
- *  appropriate action and return a non-zero value to cause early exit from
- *  the trap function.
- * 
- * 2. debugger_trap_fatal():
- *  Called when Xen is about to give up and crash. Typically you will use this
- *  hook to drop into a debug session. It can also be used to hook off
- *  deliberately caused traps (which you then handle and return non-zero).
+ * x86 Debugger Hooks
  *
- * 3. debugger_trap_immediate():
- *  Called if we want to drop into a debugger now.  This is essentially the
- *  same as debugger_trap_fatal, except that we use the current register state
- *  rather than the state which was in effect when we took the trap.
- *  For example: if we're dying because of an unhandled exception, we call
- *  debugger_trap_fatal; if we're dying because of a panic() we call
- *  debugger_trap_immediate().
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
-
 #ifndef __X86_DEBUGGER_H__
 #define __X86_DEBUGGER_H__
 
+#include <xen/domain.h>
+#include <xen/event.h>
+#include <xen/gdbstub.h>
 #include <xen/sched.h>
 #include <asm/regs.h>
 #include <asm/processor.h>
 
 void domain_pause_for_debugger(void);
 
-#ifdef CONFIG_CRASH_DEBUG
-
-#include <xen/gdbstub.h>
-
 static inline bool debugger_trap_fatal(
     unsigned int vector, struct cpu_user_regs *regs)
 {
@@ -74,28 +56,10 @@ static inline bool debugger_trap_entry(
     return false;
 }
 
-#else
-
-static inline bool debugger_trap_fatal(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return false;
-}
-
-#define debugger_trap_immediate() ((void)0)
-
-static inline bool debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return false;
-}
-
-#endif
-
 #ifdef CONFIG_GDBSX
 unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
                         unsigned int len, domid_t domid, bool toaddr,
                         uint64_t pgd3);
-#endif
+#endif /* CONFIG_GDBSX */
 
 #endif /* __X86_DEBUGGER_H__ */
diff --git a/xen/include/xen/debugger.h b/xen/include/xen/debugger.h
new file mode 100644
index 0000000000..64745fbe8f
--- /dev/null
+++ b/xen/include/xen/debugger.h
@@ -0,0 +1,69 @@
+/******************************************************************************
+ * Generic hooks into arch-dependent Xen.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Each debugger should define three functions here:
+ *
+ * 1. debugger_trap_entry():
+ *  Called at start of any synchronous fault or trap, before any other work
+ *  is done. The idea is that if your debugger deliberately caused the trap
+ *  (e.g. to implement breakpoints or data watchpoints) then you can take
+ *  appropriate action and return a non-zero value to cause early exit from
+ *  the trap function.
+ *
+ * 2. debugger_trap_fatal():
+ *  Called when Xen is about to give up and crash. Typically you will use this
+ *  hook to drop into a debug session. It can also be used to hook off
+ *  deliberately caused traps (which you then handle and return non-zero).
+ *
+ * 3. debugger_trap_immediate():
+ *  Called if we want to drop into a debugger now.  This is essentially the
+ *  same as debugger_trap_fatal, except that we use the current register state
+ *  rather than the state which was in effect when we took the trap.
+ *  For example: if we're dying because of an unhandled exception, we call
+ *  debugger_trap_fatal; if we're dying because of a panic() we call
+ *  debugger_trap_immediate().
+ */
+
+#ifndef __XEN_DEBUGGER_H__
+#define __XEN_DEBUGGER_H__
+
+#ifdef CONFIG_CRASH_DEBUG
+
+#include <asm/debugger.h>
+
+#else
+
+#include <asm/regs.h>
+#include <asm/processor.h>
+
+static inline void domain_pause_for_debugger(void)
+{
+}
+
+static inline bool debugger_trap_fatal(
+    unsigned int vector, const struct cpu_user_regs *regs)
+{
+    return false;
+}
+
+static inline void debugger_trap_immediate(void)
+{
+}
+
+static inline bool debugger_trap_entry(
+    unsigned int vector, const struct cpu_user_regs *regs)
+{
+    return false;
+}
+
+#endif /* CONFIG_CRASH_DEBUG */
+
+#endif /* __XEN_DEBUGGER_H__ */
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 20:38:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 20:38:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156214.288280 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3leE-0000xN-BF; Wed, 14 Jul 2021 20:38:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156214.288280; Wed, 14 Jul 2021 20:38:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3leE-0000xE-6T; Wed, 14 Jul 2021 20:38:26 +0000
Received: by outflank-mailman (input) for mailman id 156214;
 Wed, 14 Jul 2021 20:38:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kxbS=MG=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m3leC-0000KG-On
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 20:38:24 +0000
Received: from mail-pl1-x633.google.com (unknown [2607:f8b0:4864:20::633])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 67347e58-726d-41d7-ba9b-936580e7fb8a;
 Wed, 14 Jul 2021 20:38:22 +0000 (UTC)
Received: by mail-pl1-x633.google.com with SMTP id o8so2042539plg.11
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 13:38:22 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id b17sm1785084pfm.54.2021.07.14.13.38.20
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 14 Jul 2021 13:38:21 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 67347e58-726d-41d7-ba9b-936580e7fb8a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=c0nnBaD2pL0VkhpqTi/GSsyBm9vArGbyMPY2G5OiRPc=;
        b=V0YuUm4F5ZL//dA3LzDvyZzAgn0zfz3TOvIZvz8EOy0xECuQfna58kZb7W9q79D8m/
         QQvfTsv5f4oy09CL9OFX/pUbFJbiS0JPyrpDm7ZIeOFc03tHvhjacqFZunxegQvJxVmB
         WQjnhr+AimvtwCNveWncXAvBNLSsKtDkjJ56zwl0vuvSGoYQrCmPm9wuHR1fL+NYEj+k
         OpgaqU9/snWSMnshvmWgeE5ypPSI9jkydw2wwSuMUUznPcgYgj2MoD4ZKhctTpCGP0jk
         p4NIcQufdZw5qXPYg8CR2IgQePeonSEjetU8WVuTMLEv5jcUtVzVpN42Wb0Q9/fjtijA
         G2oA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=c0nnBaD2pL0VkhpqTi/GSsyBm9vArGbyMPY2G5OiRPc=;
        b=ulxZEDi+J2Qsw+fpsb0cZEHB+rTzSpBmoU0wnOq0wmb153sL4S2Aubjpcot6h9u/2x
         XBb+CPPr9giOGeNqZ8P286RdRzDbMHt//kYsAtuMfbocoBCfZCctldIfBda3Qj4xlOsW
         7V+n3j5Aw7d9KA84zSEit5lM26QgVsXv1WzO/XdpGBshW8C3m5zc5B3F0atnx8k4mhKQ
         9r9qLiTgUOXZ1fD9YBqoXpuSbyUNAuvb1A5sqLDiR/g0zEHU3meB2bLTANoD8eBDMKs2
         2LTu3QRUIzpNIQnPuwJghkAsw32Lv3FZJYAtKkVfh5iJ0zMfutW1BeHOHfOtXuYVOxdq
         Hr0A==
X-Gm-Message-State: AOAM533zfnUwsjtxivp/XOB5sP4E9mPe6hnIZyBxueaRLsqZ9iFLqkJv
	9vc5ymaJeeVL22JR/JCWHyriWk9h9SDaIlHU
X-Google-Smtp-Source: ABdhPJxSyAq9fc8Va4SaiyXmdltT4t2CxbaMnDmVNqIFS4vO/qscXSfsjUf2o5jXGqG2XTrLJ49R0A==
X-Received: by 2002:a17:90b:d8f:: with SMTP id bg15mr5377047pjb.152.1626295101821;
        Wed, 14 Jul 2021 13:38:21 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH v2 3/4] x86/debug: move debugger_trap_entry into debugger.c not inlined
Date: Wed, 14 Jul 2021 13:37:46 -0700
Message-Id: <a7af5b3fd6d297b2659433060d6f1e2fc6bfdb86.1626286772.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626286772.git.bobby.eshleman@gmail.com>
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The function debugger_trap_entry() is somewhat large for an inlined
function.  This commit moves debugger_trap_entry() into debugger.c and
makes it not inlined.

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---

Changes in v2:
- Move obj-$(CONFIG_CRASH_DEBUG) += debugger.o to be in alphabetical
  order
- Constify cpu_user_regs *regs and struct vcpu *v in
  debugger_trap_entry()

 xen/arch/x86/Makefile          |  1 +
 xen/arch/x86/debugger.c        | 41 ++++++++++++++++++++++++++++++++++
 xen/include/asm-x86/debugger.h | 26 ++-------------------
 3 files changed, 44 insertions(+), 24 deletions(-)
 create mode 100644 xen/arch/x86/debugger.c

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 2ec883456e..c5c9f37570 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_PV) += compat.o
 obj-$(CONFIG_PV32) += x86_64/compat.o
 obj-$(CONFIG_KEXEC) += crash.o
 obj-$(CONFIG_GDBSX) += debug.o
+obj-$(CONFIG_CRASH_DEBUG) += debugger.o
 obj-y += delay.o
 obj-y += desc.o
 obj-bin-y += dmi_scan.init.o
diff --git a/xen/arch/x86/debugger.c b/xen/arch/x86/debugger.c
new file mode 100644
index 0000000000..985c1275b4
--- /dev/null
+++ b/xen/arch/x86/debugger.c
@@ -0,0 +1,41 @@
+/******************************************************************************
+ * x86 crash debug hooks
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <asm/debugger.h>
+#include <xen/domain.h>
+#include <xen/event.h>
+#include <xen/sched.h>
+
+bool debugger_trap_entry(
+    unsigned int vector, const struct cpu_user_regs *regs)
+{
+    /*
+     * This function is called before any checks are made.  Amongst other
+     * things, be aware that during early boot, current is not a safe pointer
+     * to follow.
+     */
+    const struct vcpu *v = current;
+
+    if ( vector != TRAP_int3 && vector != TRAP_debug )
+        return false;
+
+    if ( guest_mode(regs) && guest_kernel_mode(v, regs) &&
+         v->domain->debugger_attached  )
+    {
+        if ( vector != TRAP_debug ) /* domain pause is good enough */
+            current->arch.gdbsx_vcpu_event = vector;
+        domain_pause_for_debugger();
+        return true;
+    }
+
+    return false;
+}
diff --git a/xen/include/asm-x86/debugger.h b/xen/include/asm-x86/debugger.h
index c856c1b795..75e35c7902 100644
--- a/xen/include/asm-x86/debugger.h
+++ b/xen/include/asm-x86/debugger.h
@@ -31,30 +31,8 @@ static inline bool debugger_trap_fatal(
 /* Int3 is a trivial way to gather cpu_user_regs context. */
 #define debugger_trap_immediate() __asm__ __volatile__ ( "int3" );
 
-static inline bool debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    /*
-     * This function is called before any checks are made.  Amongst other
-     * things, be aware that during early boot, current is not a safe pointer
-     * to follow.
-     */
-    struct vcpu *v = current;
-
-    if ( vector != TRAP_int3 && vector != TRAP_debug )
-        return false;
-
-    if ( guest_mode(regs) && guest_kernel_mode(v, regs) &&
-         v->domain->debugger_attached  )
-    {
-        if ( vector != TRAP_debug ) /* domain pause is good enough */
-            current->arch.gdbsx_vcpu_event = vector;
-        domain_pause_for_debugger();
-        return true;
-    }
-
-    return false;
-}
+bool debugger_trap_entry(
+    unsigned int vector, const struct cpu_user_regs *regs);
 
 #ifdef CONFIG_GDBSX
 unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 20:38:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 20:38:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156216.288291 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3leJ-0001PA-MZ; Wed, 14 Jul 2021 20:38:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156216.288291; Wed, 14 Jul 2021 20:38:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3leJ-0001Ot-IL; Wed, 14 Jul 2021 20:38:31 +0000
Received: by outflank-mailman (input) for mailman id 156216;
 Wed, 14 Jul 2021 20:38:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kxbS=MG=gmail.com=bobby.eshleman@srs-us1.protection.inumbo.net>)
 id 1m3leH-0000KG-P6
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 20:38:29 +0000
Received: from mail-pj1-x102e.google.com (unknown [2607:f8b0:4864:20::102e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b0fc6f99-c991-48af-81dc-bde2f387e0f9;
 Wed, 14 Jul 2021 20:38:23 +0000 (UTC)
Received: by mail-pj1-x102e.google.com with SMTP id
 me13-20020a17090b17cdb0290173bac8b9c9so4648017pjb.3
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 13:38:23 -0700 (PDT)
Received: from localhost.localdomain ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id b17sm1785084pfm.54.2021.07.14.13.38.21
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 14 Jul 2021 13:38:22 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: b0fc6f99-c991-48af-81dc-bde2f387e0f9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=sender:from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=yWceiZFDgebIWTda4wCRP6HVoSGyuXNhbWaAMklJuU4=;
        b=hfEkg6QA9LY0LfkLt5VFa/JybLvpNyp0rnCm5h88rFmYdt+6X+5BP1z76USxtHzlm7
         iF3mACEVxenNV58/ihKM+C47W5M9ENeZQMvx+bGS2W1ZsYeUc754e3FCBR6PB1IIYL4M
         GHHkFw0cWN6rjQsgqzZEJ2N1Ix5qBoRatpjkztMzdNH+v8zycQw2koCriewHEL+GPgzx
         4APKd0Y2KBVJWiyjUcyrhWuOGCpbaThY+kyiWFMgny7PMEaU8BzZ+G6RV0dRkOI7Q5eO
         sXxq69m9/nLzj8yn2PTFv9Xz3eTTaeAZvf9GgefwM74cHsYuMRWwU7XkdYx3z0R6Sx92
         4WSQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:sender:from:to:cc:subject:date:message-id
         :in-reply-to:references:mime-version:content-transfer-encoding;
        bh=yWceiZFDgebIWTda4wCRP6HVoSGyuXNhbWaAMklJuU4=;
        b=AzhjlTHW5/txQUQQsPbN14zK7lZjbWVGiuoTsKqthu4849ivcSGYT5sKfzlLtbwXOi
         qfrmZYFmZXMBZYzEhIZIAe4KzVtBmILeLYlO5BFuR8vwwMDUMkqwa6ERa9pqzPRUoXCk
         3p3gl/gh/kGcxQ8rZYcqd0XjhXnOuwNg2tvDIsvdsO+J5CjTSJg441i0As+6D7xmIleM
         9mZye4UjTzaCHJd+MNMBB0+SorgSgZAJ2LE0zPPPHhjie2VVpgmSsfCq/qmH8syUQ/PS
         6uoumg3vSIMdghs9a0fWVpO560QpRXvW6MfrRGmxrjRbAwet2iPohirTXQi8vFc9rROB
         sVrA==
X-Gm-Message-State: AOAM533Gqrw4J5/DsF9LSJl9MdOyM4YKDFM+X/mmDUKMVs+YP3w0pYMF
	JQ+zxAsemk+ZBncHTi4AduvUzY3/Hqrty/BJ
X-Google-Smtp-Source: ABdhPJxcv28P9SX6dmui/eaRLIuu9pZdMquhwOF+f/Jq46jqsVCHyEjAilVQ4c2cIAyfR5EdnTGWNA==
X-Received: by 2002:a17:90a:2ec1:: with SMTP id h1mr5693893pjs.4.1626295102934;
        Wed, 14 Jul 2021 13:38:22 -0700 (PDT)
Sender: Bobby Eshleman <bobbyeshleman@gmail.com>
From: Bobby Eshleman <bobby.eshleman@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bobby Eshleman <bobby.eshleman@gmail.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>,
	Wei Liu <wl@xen.org>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH v2 4/4] x86/debug: move domain_pause_for_debugger to debugger.c
Date: Wed, 14 Jul 2021 13:37:47 -0700
Message-Id: <d3e88e2cb3c850085e7d1061d6b20f7e0acf3887.1626286772.git.bobby.eshleman@gmail.com>
X-Mailer: git-send-email 2.30.0
In-Reply-To: <cover.1626286772.git.bobby.eshleman@gmail.com>
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

The function domain_pause_for_debugger() is conditionally compiled if
CONFIG_CRASH_DEBUG=y.  Instead of placing an extra #ifdef inside
domain.c, this commit moves domain_pause_for_debugger() into
x86/debugger.c which is only built by Kbuild given CONFIG_CRASH_DEBUG=y.

Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>
---

Changes in v2:
- constify struct vcpu *curr

 xen/arch/x86/debugger.c | 12 ++++++++++++
 xen/arch/x86/domain.c   | 14 --------------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/xen/arch/x86/debugger.c b/xen/arch/x86/debugger.c
index 985c1275b4..54e81b99f4 100644
--- a/xen/arch/x86/debugger.c
+++ b/xen/arch/x86/debugger.c
@@ -15,6 +15,18 @@
 #include <xen/event.h>
 #include <xen/sched.h>
 
+void domain_pause_for_debugger(void)
+{
+    const struct vcpu *curr = current;
+    struct domain *d = curr->domain;
+
+    domain_pause_by_systemcontroller_nosync(d);
+
+    /* if gdbsx active, we just need to pause the domain */
+    if ( curr->arch.gdbsx_vcpu_event == 0 )
+        send_global_virq(VIRQ_DEBUGGER);
+}
+
 bool debugger_trap_entry(
     unsigned int vector, const struct cpu_user_regs *regs)
 {
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 5b948ff270..450b2ca831 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -2540,20 +2540,6 @@ static int __init init_vcpu_kick_softirq(void)
 }
 __initcall(init_vcpu_kick_softirq);
 
-#ifdef CONFIG_CRASH_DEBUG
-void domain_pause_for_debugger(void)
-{
-    struct vcpu *curr = current;
-    struct domain *d = curr->domain;
-
-    domain_pause_by_systemcontroller_nosync(d);
-
-    /* if gdbsx active, we just need to pause the domain */
-    if ( curr->arch.gdbsx_vcpu_event == 0 )
-        send_global_virq(VIRQ_DEBUGGER);
-}
-#endif
-
 /*
  * Local variables:
  * mode: C
-- 
2.30.0



From xen-devel-bounces@lists.xenproject.org Wed Jul 14 21:03:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 21:03:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156244.288305 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3m2M-0005wx-LH; Wed, 14 Jul 2021 21:03:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156244.288305; Wed, 14 Jul 2021 21:03:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3m2M-0005wq-IH; Wed, 14 Jul 2021 21:03:22 +0000
Received: by outflank-mailman (input) for mailman id 156244;
 Wed, 14 Jul 2021 21:03:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+SWe=MG=gmail.com=bobbyeshleman@srs-us1.protection.inumbo.net>)
 id 1m3m2L-0005wk-PK
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 21:03:21 +0000
Received: from mail-pj1-x1034.google.com (unknown [2607:f8b0:4864:20::1034])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d9c6e69d-14e9-4192-8e50-28aba4eb8fdc;
 Wed, 14 Jul 2021 21:03:20 +0000 (UTC)
Received: by mail-pj1-x1034.google.com with SMTP id
 me13-20020a17090b17cdb0290173bac8b9c9so4687376pjb.3
 for <xen-devel@lists.xenproject.org>; Wed, 14 Jul 2021 14:03:20 -0700 (PDT)
Received: from ?IPv6:2601:1c2:4c02:4c00::1? ([2601:1c2:4c02:4c00::1])
 by smtp.gmail.com with ESMTPSA id h14sm3843966pgv.47.2021.07.14.14.03.18
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 14 Jul 2021 14:03:19 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d9c6e69d-14e9-4192-8e50-28aba4eb8fdc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:organization:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=s7BdSsJEg8VF21zupu1h+/GHDXA+/+S9ZJ8X81z9xCk=;
        b=AiKwXZc8q09JFNeNDfyhqPyT5W4wGexFZJqBYYPwML/zcDIbxVdHVTPbuEXP7Cm/sv
         C0hae2kE5BRuerxw/8NQYQKHjZKlweEoSuUVLkeUh2WZcJ8rceEwpYg4pIbSifFBttf1
         QceG8YH3xGDj+vM/Bvcj+yhdQCOjHmvwulY4rh+4U1glHJfEPVInCRj2bhuwkey/EltN
         5dM9T8x/dg7nOHFcJjQYKozxmWGsctNbbTtuvhjJG4s2UXNE6hNfTS5pbAGl+vL1Zihw
         qmvJqimIdE+77ElUWavW0PwvwEZjF46sioeoh3bNWP0IYAbvwmMhmQTgKn7GUZ5m4p8O
         a6Zg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:organization
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=s7BdSsJEg8VF21zupu1h+/GHDXA+/+S9ZJ8X81z9xCk=;
        b=Voh7KYgr6VMm1NslxW04bHrUsx4Vc2M4Lu9fcUQefZQdNSF1x6PGd7DA5L+eDM9KJh
         Y4pjoyK/IXSDQRvYRbKYEPqjbQ8qqDYgxZapg97ROqM/J6iosf0ajuHB/FIC1DFYtcil
         gl8WlYYDUGg/uLqyEIdaJhUovcLXArHHFz4QSsdcnNcc86OPk622qiOJjoWM36QCRqLM
         rODmlhnsYD2beWp/rr3s1RvYyUwKLmOc4dRsHULXpuAeT8Nywo6Hx53XcuYxoVMf9U4R
         XipimOXjBVpIkcyXUh57JsWkyOEQ2wButiugjoO7dplDbTz2NqadGnv8mnQFroBEIkD8
         hw+g==
X-Gm-Message-State: AOAM530bI7XPO1YP6ahpPalZzBF/pePTeKRsgj8lrM665uTTsz63UB+n
	wNKX5DWD6PeYoVxsIU3RYWSYh2QP2lNDviRH
X-Google-Smtp-Source: ABdhPJzC7D6Q8m8J1dhaFZNR81shqyUzFvj0F1LYjV40XLn2LKMAn396arYs8hWDuo2hgWy5KEJrNA==
X-Received: by 2002:a17:903:189:b029:12b:3fd7:d95d with SMTP id z9-20020a1709030189b029012b3fd7d95dmr15653plg.24.1626296599760;
        Wed, 14 Jul 2021 14:03:19 -0700 (PDT)
Subject: Re: [PATCH 1/4] build: use common stubs for debugger_trap_* functions
 if !CONFIG_CRASH_DEBUG
To: Jan Beulich <jbeulich@suse.com>, Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
 <2fc1a1416d37b5eed0ebfdeff8bb9dd61bc7acc7.1626136452.git.bobby.eshleman@gmail.com>
 <7468d092-42c5-34a1-74ec-7500e1bc7bf1@suse.com>
From: Bob Eshleman <bobbyeshleman@gmail.com>
Organization: Vates SAS
Message-ID: <b6124fdd-b8da-b924-bf6f-1df6456f5926@gmail.com>
Date: Wed, 14 Jul 2021 14:03:17 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.6.1
MIME-Version: 1.0
In-Reply-To: <7468d092-42c5-34a1-74ec-7500e1bc7bf1@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/14/21 2:34 AM, Jan Beulich wrote:
> 
> ... we strive to have new insertions be sorted alphabetically. When
> the existing section to insert into isn't suitably sorted yet, what
> I normally do is try to find a place where at least the immediately
> adjacent neighbors then fit the sorting goal.
> 
> Sorry, all just nits, but their scope is about the entire patch.
> 

No worries at all, I welcome the corrections (I need to learn the
proper style somehow).

>> --- /dev/null
>> +++ b/xen/include/xen/debugger.h

...

>> +
>> +static inline bool debugger_trap_fatal(
>> +    unsigned int vector, const struct cpu_user_regs *regs)
> 
> I'm afraid the concept of a vector may not be arch-independent.
>

The only way I can imagine it not being arch-independent
is if it is thought of as a trap number or id, instead of
implying an entry in a vectored trap table.  I don't
really understand this subsystem, so I'm probably missing
context.

Are you suggesting a rename or a different approach entirely?

> 
> Jan
> 

Thanks Jan, everything besides the vector thing are incorporated in
the v2 I've just sent out.

-- 
Bobby Eshleman
SE at Vates SAS


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 23:46:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 23:46:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156261.288328 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3oa9-00067A-A5; Wed, 14 Jul 2021 23:46:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156261.288328; Wed, 14 Jul 2021 23:46:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3oa9-000673-6K; Wed, 14 Jul 2021 23:46:25 +0000
Received: by outflank-mailman (input) for mailman id 156261;
 Wed, 14 Jul 2021 23:46:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3oa7-00066x-V5
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 23:46:24 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 33d69dbe-40f5-4cc6-a70b-05129147c87e;
 Wed, 14 Jul 2021 23:46:23 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 26C796100C;
 Wed, 14 Jul 2021 23:46:22 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 33d69dbe-40f5-4cc6-a70b-05129147c87e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626306382;
	bh=kIem1FVofAMA+RG0r/Ko3GpHLib3akY2KthjwU6/UNk=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=VNpGhCJu0t1h/Gqkxh1xRY7cMmy3FjAvJxOLq57+Vlgt/xGT0y4YZMI+CuBpYGQBw
	 YMP6nJaZC0sFUNRbhBQAu/BV07vo1p9yKBusJKZJ/WPS3wNa47ZWU25A1sEPl5T5P1
	 vhsPJO6DWQc8g8t2ZCQ9594QoggLIL4uaBFM6n/jLdt49+Biu92nSgSn3sVteESlhN
	 7m6SyXJ+Ot9AIhJOx75oqyomyqXfieHmN5ecH7AJuctvQhTT4dUHe716aQwXmQ6oBB
	 q3Ylu5H6hkJ+66ty+T+8YOvTl5Mj7f8RHQm9ADeBlhFp5DEyDGI5gsACzIGl3Cu7jP
	 QcYdDKbL+XDNg==
Date: Wed, 14 Jul 2021 16:46:13 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com, 
    george.dunlap@citrix.com, jbeulich@suse.com, iwj@xenproject.org, 
    wl@xen.org
Subject: Re: [PATCH] SUPPORT.md: add Dom0less as Supported
In-Reply-To: <f443ca4f-a942-7765-a8c0-072d2844a0d9@xen.org>
Message-ID: <alpine.DEB.2.21.2107141645150.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107131734170.23286@sstabellini-ThinkPad-T480s> <47749630-ff78-e00f-63c0-8ff71a6a04c9@xen.org> <alpine.DEB.2.21.2107141224550.23286@sstabellini-ThinkPad-T480s> <f443ca4f-a942-7765-a8c0-072d2844a0d9@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Wed, 14 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 14/07/2021 20:28, Stefano Stabellini wrote:
> > On Wed, 14 Jul 2021, Julien Grall wrote:
> > > Hi Stefano,
> > > 
> > > On 14/07/2021 01:39, Stefano Stabellini wrote:
> > > > Add Dom0less to SUPPORT.md to clarify its support status. The feature is
> > > > mature enough and small enough to make it security supported.
> > > > 
> > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > > > 
> > > > diff --git a/SUPPORT.md b/SUPPORT.md
> > > > index 317392d8f3..c777f3da72 100644
> > > > --- a/SUPPORT.md
> > > > +++ b/SUPPORT.md
> > > > @@ -832,6 +832,12 @@ OVMF firmware implements the UEFI boot protocol.
> > > >          Status, qemu-xen: Supported
> > > >    +## Dom0less
> > > > +
> > > > +Guest creation from the hypervisor at boot without Dom0 intervention.
> > > > +
> > > > +    Status, ARM: Supported
> > > > +
> > > 
> > > After XSA-372, we will not scrubbed memory assigned to dom0less DomU when
> > > bootscrub=on.
> > 
> > Do you mean *before* XSA-372, right?
> 
> No, I really meant *after* XSA-372.
> 
> > I thought the XSA-372 patches take
> > care of the problem?
> 
> It didn't. We have an open question for the bootscrub=on one. From the commit
> message of patch #1:
> 
>         2) The memory allocated for a domU will not be scrubbed anymore when
> an
>         admin select bootscrub=on. This is not something we advertised, but if
>         this is a concern we can introduce either force scrub for all domUs or
>         a per-domain flag in the DT. The behavior for bootscrub=off and
>         bootscrub=idle (default) has not changed.
>
> > > Do we want to exclude this combination or mention that XSAs will
> > > not be issued if the domU can read secret from unscrubbed memory?
> > 
> > I could say that if bootscrub=off then we won't issue XSAs for domUs reading
> > secrets from unscrubbed memory. But it is kind of obvious anyway? I am
> > happy to add it if you think it is good to clarify.
> 
> Right, it is pretty clear that bootscrub=off will not scrub the memory and the
> "problem" would not be specific to dom0less.
> 
> The one I asked to clarify is bootscrub=on because one may think the memory is
> scrubbed for dom0less domU for all the cases but bootscrub=off.
> 
> IIRC when we discussed about it on security@xen.org, we suggested that it
> would be fine to rely on the bootloader to scrub it. But I think this needs to
> be written down rather waiting for it to be re-discovered.

Ah right, I remember what you are talking about. I'll update the patch.


From xen-devel-bounces@lists.xenproject.org Wed Jul 14 23:48:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 14 Jul 2021 23:48:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156266.288339 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3obu-0006iH-Lq; Wed, 14 Jul 2021 23:48:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156266.288339; Wed, 14 Jul 2021 23:48:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3obu-0006iA-HY; Wed, 14 Jul 2021 23:48:14 +0000
Received: by outflank-mailman (input) for mailman id 156266;
 Wed, 14 Jul 2021 23:48:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tvfX=MG=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m3obs-0006hm-TG
 for xen-devel@lists.xenproject.org; Wed, 14 Jul 2021 23:48:12 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d1f70f26-6499-48ea-a5f3-33a449b093f8;
 Wed, 14 Jul 2021 23:48:12 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 61F64613CA;
 Wed, 14 Jul 2021 23:48:11 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d1f70f26-6499-48ea-a5f3-33a449b093f8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626306491;
	bh=1TPh5oSQ15cVkfsD3NYIBVCTL6kfTq7Et6CCc7xciqc=;
	h=From:To:Cc:Subject:Date:From;
	b=fseb3vzsThJcaexEABicHzWYnA/76h2FUDt54t2LQRu7T1HexnPr6Hpd8+AXrk5N3
	 0EUEpbTIa2vZel2AxMHDhIB9wuLWWvDGxkvLiuepDCvUBNLN1axZ6rMRkpwsMjqIvH
	 0kdb6uQsPOmTLKO+U00qEJN6uFeCMKXrs02IdBT9FYog/i+vPQCpxC7Qo5Gm/+S5A6
	 Ukn579TeSboyPbDyWgb2xUiJjM8L0wZh9RZSFXnGydwEuBxlTVjOotILQO5MXOYz2/
	 towFdXv97uZrH7WJduIOf+nj6qHDK3inNjQ4cQTmFc4ZoKScPHf1v/xsR2aPIHyDj0
	 nUoILgmx6Tt4Q==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	andrew.cooper3@citrix.com,
	george.dunlap@citrix.com,
	jbeulich@suse.com,
	iwj@xenproject.org,
	wl@xen.org,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v2] SUPPORT.md: add Dom0less as Supported
Date: Wed, 14 Jul 2021 16:48:09 -0700
Message-Id: <20210714234809.30483-1-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1

Add Dom0less to SUPPORT.md to clarify its support status. The feature is
mature enough and small enough to make it security supported.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
Changes in v2:
- clarify memory scrubbing
---
 SUPPORT.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/SUPPORT.md b/SUPPORT.md
index 317392d8f3..524cab9c8d 100644
--- a/SUPPORT.md
+++ b/SUPPORT.md
@@ -832,6 +832,15 @@ OVMF firmware implements the UEFI boot protocol.
 
     Status, qemu-xen: Supported
 
+## Dom0less
+
+Guest creation from the hypervisor at boot without Dom0 intervention.
+
+    Status, ARM: Supported
+
+Memory of dom0less DomUs is not scrubbed at boot (even with
+bootscrub=on); no XSAs will be issues due to unscrubbed memory.
+
 # Format and definitions
 
 This file contains prose, and machine-readable fragments.
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 01:16:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 01:16:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156275.288356 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3pzF-0006pZ-TZ; Thu, 15 Jul 2021 01:16:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156275.288356; Thu, 15 Jul 2021 01:16:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3pzF-0006pS-QS; Thu, 15 Jul 2021 01:16:25 +0000
Received: by outflank-mailman (input) for mailman id 156275;
 Thu, 15 Jul 2021 01:16:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3pzF-0006pI-41; Thu, 15 Jul 2021 01:16:25 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3pzE-0008Lc-PD; Thu, 15 Jul 2021 01:16:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3pzE-0003nu-HQ; Thu, 15 Jul 2021 01:16:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3pzE-0005BC-Gj; Thu, 15 Jul 2021 01:16:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=85zAyYLF19VaKy2/l+EhtSJvnec81yPFVeMFoAKiwWQ=; b=k7CN9FaUXHVtpLOjgZXUrVAfPW
	xCmdty58LR+SpeRNixqwmzOmXj/8x6isuPx6gFEKhSOQxf6+bDpat/trrTKBtKi1a+2c9tUSdnAVV
	9FptFL3fmQwqvgboJ46EhJWGnjia9ZOXVUQiixNSSFdtfR7d8yqjGDuXY7MX/2Ah19Ho=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163684-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163684: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:guest-localmigrate/x10:fail:heisenbug
    linux-5.4:test-amd64-amd64-libvirt-vhd:guest-start/debian.repeat:fail:heisenbug
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7c76bd6c36ed84c0e613ba0f3a1408a515b9f12d
X-Osstest-Versions-That:
    linux=e8d9b740a5503f5bd2948a51a0c3fa564c82cfe3
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 01:16:24 +0000

flight 163684 linux-5.4 real [real]
flight 163699 linux-5.4 real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163684/
http://logs.test-lab.xenproject.org/osstest/logs/163699/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 18 guest-localmigrate/x10 fail pass in 163699-retest
 test-amd64-amd64-libvirt-vhd 19 guest-start/debian.repeat fail pass in 163699-retest

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163566
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163566
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163566
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163566
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163566
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163566
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163566
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163566
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163566
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163566
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163566
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   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-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                7c76bd6c36ed84c0e613ba0f3a1408a515b9f12d
baseline version:
 linux                e8d9b740a5503f5bd2948a51a0c3fa564c82cfe3

Last test of basis   163566  2021-07-11 11:14:34 Z    3 days
Testing same since   163684  2021-07-14 15:10:27 Z    0 days    1 attempts

------------------------------------------------------------
300 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   e8d9b740a550..7c76bd6c36ed  7c76bd6c36ed84c0e613ba0f3a1408a515b9f12d -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:18:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:18:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156291.288394 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlf-0007nP-Rw; Thu, 15 Jul 2021 05:18:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156291.288394; Thu, 15 Jul 2021 05:18:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlf-0007nH-Ll; Thu, 15 Jul 2021 05:18:39 +0000
Received: by outflank-mailman (input) for mailman id 156291;
 Thu, 15 Jul 2021 05:18:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tle-0007nB-Cq
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:18:38 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.2.67]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1ab1cd12-e52c-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 05:18:36 +0000 (UTC)
Received: from AM6PR10CA0058.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:80::35)
 by AM6PR08MB3093.eurprd08.prod.outlook.com (2603:10a6:209:41::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Thu, 15 Jul
 2021 05:18:33 +0000
Received: from AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:80:cafe::6e) by AM6PR10CA0058.outlook.office365.com
 (2603:10a6:209:80::35) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:33 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT056.mail.protection.outlook.com (10.152.17.224) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:33 +0000
Received: ("Tessian outbound 664b93226e0b:v99");
 Thu, 15 Jul 2021 05:18:33 +0000
Received: from 7893a497e64b.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 9D6A6E59-8336-4936-A03A-AE19FB55A566.1; 
 Thu, 15 Jul 2021 05:18:27 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 7893a497e64b.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:27 +0000
Received: from DB3PR06CA0027.eurprd06.prod.outlook.com (2603:10a6:8:1::40) by
 AM6PR08MB4769.eurprd08.prod.outlook.com (2603:10a6:20b:d0::11) with
 Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.23; Thu, 15 Jul 2021 05:18:25 +0000
Received: from DB5EUR03FT056.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:8:1:cafe::b1) by DB3PR06CA0027.outlook.office365.com
 (2603:10a6:8:1::40) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:25 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT056.mail.protection.outlook.com (10.152.21.124) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:25 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com
 (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:24 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Thu, 15
 Jul 2021 05:18:24 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1ab1cd12-e52c-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Edzc1ERAnnH92n0EA/COjnS7/1YJjgFDhgKYTVRzhVs=;
 b=4VxCkofhMvqepVjCEhsuLWgUnHyBfzGM053R+bQlnpT7bq+9LDkSG+VAG11IUVD7tp4LxPydkcW8ahy/xw7ZaCQOWlon6myngb/IyofehOE8L/pfUdfLjWGh6S+yNdMW/mBjhvkMYa120aVWpvsPL2B0UvPOPOZ9vPnlWCCbv7w=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: ccfeb7cb9973fa3e
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TzQrByR2v6s7jKwYBJHLJvHJMqdu8QATmlg2ainZ6JmzW7RVn3lYO97GMW4QwaPILeNamrV8t3MZMBtNNT8KdCU3ApqShuO9Y1XKhXRHKIeynZj6ZroHi/Lhn55hoYV4WnozXNWvjnYS26qBGgCMj8ddophThOCfxDSj2b/tdODO5x0fSBD1N4MhAfLEgUKqBzAVLq43T7HhcuTu8VFzPQcjf38yvqYRAymB3Zk6OtQqaBARmjY2Hn4QU2T0BsFWnX9XyqxmWEl8RIdrtJvelUdQrrSxkyCn5nZ431XutpC2jQeV7gNzJpAMuNt3vaEfy5GMr4G2DReCr/BYGYwKpw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Edzc1ERAnnH92n0EA/COjnS7/1YJjgFDhgKYTVRzhVs=;
 b=iOogvVG295qq/Mj2jF6F7kaXtWSJRsN9Y5CD189+//iPI4xwJ/kh6NQfFiNtnxo+YCpn2H+PG0tiXXONGbv4nTRt3Bq8lyH0U0PyJGsD7Y9g/UyeVCbwLw5DfEay/MrDZyTpJU5g4Jsifewg32B/ZGucbld7FwPLMUPEo4QDC/1eg3V+CL0j6OfAsEWaLDD0TWO+CM0zjKx+HIWG47OsW5ijM2lzu5tE3jjOhepxXs4MuM/43MREOX7MjF951RHvDkZ//cv+sth81VqEH8DUGluP/DnMesCRA+mt8QK5Rr0PhEBlwgjCaxTfbmVFR2DdGPmUGhftVV9MzMbrvMnOAQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Edzc1ERAnnH92n0EA/COjnS7/1YJjgFDhgKYTVRzhVs=;
 b=4VxCkofhMvqepVjCEhsuLWgUnHyBfzGM053R+bQlnpT7bq+9LDkSG+VAG11IUVD7tp4LxPydkcW8ahy/xw7ZaCQOWlon6myngb/IyofehOE8L/pfUdfLjWGh6S+yNdMW/mBjhvkMYa120aVWpvsPL2B0UvPOPOZ9vPnlWCCbv7w=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 00/10] Domain on Static Allocation
Date: Thu, 15 Jul 2021 05:18:09 +0000
Message-ID: <20210715051819.3073628-1-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 370ad525-409e-4a4a-238c-08d9474ffde6
X-MS-TrafficTypeDiagnostic: AM6PR08MB4769:|AM6PR08MB3093:
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB3093B12B0480083532E1AAA6F7129@AM6PR08MB3093.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 BJjLHTHr8c/duK3bWPa7tJsS/B+Zcp89Iu9Dy/pIE6eKoRjdxjJyHQVcLL0lsk2fPmUwRxqVGVaz+HDBr5Udu+jBndez1JqDRXW7s9fI12P/4Ibd/loUussYgCyCyZ+ZbZJP9s8l6WDZe92s27WJQAtD7Tbd8FZ7cFAEcJOXPUZVLhfHkA3znPShQGBcJ4XtB6gLnV4p4NegqZ2WMrA0CF4qEqHwVmdKWpkqzeOVYXHysfOZYxNDPI+BlxkVq14huM8af4K0g71LTTvPMwLi1mjvbpplkfmJHXjInkM6LnJuqN0PlLo+/3CDKDEeulFg5ADrOQzegbrCGow5/qYfIW6tqvumNwreNQ7SPuTU+AkQcKejEWmJFtY8GPGIqphYGP5fqqvAYobNf2cxu1dCXmBtYXqQEZPuzQXR0mPdsUCIwgIPS71JO0x4aoogz0chuLfqGLNS6HS/IJGWNC80YnSw9BHMfcjxocPvLjrjPTrX6dmLeAeSso/FUlZFDS7UTq7VrAMWE0vpCsoiSI0CRu/mMB6Pt/sl6gLmEwFuX8J5m/UF1zhbwPCzm3Jhlrd3xrtK1tt9jx+UlI5n6/6Ad347Z6QR4L+kUDwbcnl53zvzQ86aGUixhcaAD+a4ary+G/5nylyHAsMhrdlYcj/jtR72TSnsFLgsYIU9PfvPzTBocTk5IZ+JTug77n6KFzQulYJda4GnzdmCLGNr3qXuBopRR50T0r+aHQnCyGXutg9jG+VNAm6U8i5BcbOBFFZDdsJ/J2+SxbhHckAXv0dQKmIzEy/eMyF7TjxW1YWjkHqCVYRMi6kn9qw6BwFgG0Jq
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(346002)(136003)(376002)(39850400004)(396003)(46966006)(36840700001)(478600001)(5660300002)(1076003)(2906002)(47076005)(8936002)(82740400003)(70206006)(2616005)(44832011)(7696005)(36756003)(82310400003)(26005)(186003)(36860700001)(70586007)(966005)(81166007)(316002)(8676002)(6666004)(426003)(54906003)(110136005)(356005)(83380400001)(336012)(86362001)(4326008)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4769
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	76df146a-0728-429f-cf45-08d9474ff8f2
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	8OLs3CQOxRw/BbS1rNxt8AZomqkjxBzkTdm2A7biVeWlYV/C3oyg7t2OWzslZx/2gExSgJK1ciqEeyNcNnDpgbC+H4ZZ6mEiuZy9aa3YE8lMGtcnPNV95H2+BMvnS0KTxOAJMGKq4A+86+kATZkd3UISWNJs5PGvbx5QyBuIYq8zrlRuZkvFWZdiqpFQdfu5n2sye81tHaKtgCY4zBD63+ZuHSaTPvkFGpGBr20FbCKY8TLW3wDujZ14i7mOAQLVd1op+UgfDKMX9GjT5VGpPUrZhKPk4eKAiIp12PJb0TKu6ALYADolhj0KSClvu4xyQ62yLYN5VLl1xhIXa6Hr/cWHbyJ7c/4cEBbySyv4fNyfwZ9pGaBl9lh9Fmp6GY/Zc/9Ur14DW6DWB6r3FnjUK7XJB9Th14tXwnB3zX2a8nu0PouNtuDJbSVT/ENApEsS0HJCIoMD/Ew0QCQTA0gYhtRrK3xA8aZ5rHm7Oz0/TnhjpPtF6kgetD4jWIMR6nQvOdysALD45UjSsQkRYN3ygfntlG/BIWWepla5Q/2enkHyNJS1vx6pmyh/bQ6fKjGThbPeddrXL3JV/1G8f3ziP6lnf2m6eOqUdBAOpJyR7vare+jk6txJRiVaO9a9ns0c4xRYiY+891WBpaoJzs2nI5u48DrZlwwz3PzObvY8vlUH3B71rO9BOfgT0pskc8YNryWs6++A0GJ/89F2X+d1g53PdqccXXFfvJpg4lNpIVBqXe8qgVdMpCu2h8/IbTWSTiU7l31gKLIwqlCJ5WTHeVlos9poQZLmdVT74KPUsOk=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(39850400004)(346002)(136003)(46966006)(36840700001)(54906003)(1076003)(316002)(4326008)(478600001)(86362001)(336012)(44832011)(2616005)(83380400001)(70206006)(70586007)(7696005)(966005)(36860700001)(2906002)(82310400003)(8936002)(36756003)(8676002)(6666004)(82740400003)(5660300002)(26005)(47076005)(186003)(110136005)(426003)(81166007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:33.6792
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 370ad525-409e-4a4a-238c-08d9474ffde6
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3093

Static Allocation refers to system or sub-system(domains) for which memory
areas are pre-defined by configuration using physical address ranges.
Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the
beginning, shall never go to heap allocator or boot allocator for any use.

Domain on Static Allocation is supported through device tree property
`xen,static-mem` specifying reserved RAM banks as this domain's guest RAM.
The size of address-cells/size-cells must be defined in
"#xen,static-mem-address-cells" and "#xen,static-mem-size-cells".

This Patch Serie only talks about Domain on Static Allocation.

Looking into related [design link](
https://lists.xenproject.org/archives/html/xen-devel/2021-05/msg00882.html)
for more details.

The whole design is about Static Allocation and 1:1 direct-map, and this
Patch Serie only covers parts of it, which are Domain on Static Allocation.
Other features will be delievered through different patch series.
---
changes in v3:
- use "xen,static-mem" property to be compatible with System Sevice Tree
in the future
- introduce new helper device_tree_get_meminfo
- extract common codes for dealing with reserved memory stored in
bootinfo
- rename from "free_page" to "mark_page_free"
- remove non-trivial page_to_mfn conversion in "mark_page_free" due to
pdx compression, and let the MFN passed in
- let all switch-cases shared in "mark_page_free"
- change CONFIG_STATIC_ALLOCATION to CONFIG_STATIC_MEMORY
- put init_staticmem_pages in setup_mm
- rename assign_pages_nr to assign_pages
- alter the order of assign_pages parameters to help backporting
- change name from alloc_staticmem_pages/alloc_domstatic_pages to
acquire_staticmem_pages and acquire_domstatic_pages.
- remove hunks' #ifdef-ary by introducing PGC_reserved = 0
- remove DMA restriction
- "memory" property shall be mandatory
- rename allocate_static_bank_memory to append_static_memory_to_bank
- infer the next GFN from the bank information in append_static_memory_to_bank
- simplify the code of double loop in allocate_static_memory

Penny Zheng (10):
  xen/arm: introduce domain on Static Allocation
  xen/arm: introduce new helper device_tree_get_meminfo
  xen/arm: handle static memory in dt_unreserved_regions
  xen: introduce mark_page_free
  xen/arm: static memory initialization
  xen/arm: introduce PGC_reserved
  xen: re-define assign_pages and introduce assign_page
  xen/arm: introduce acquire_staticmem_pages and acquire_domstatic_pages
  xen/arm: check "xen,static-mem" property during domain construction
  xen/arm: introduce allocate_static_memory

 docs/misc/arm/device-tree/booting.txt |  40 +++++
 xen/arch/arm/Kconfig                  |   3 +
 xen/arch/arm/bootfdt.c                |  89 +++++++---
 xen/arch/arm/domain_build.c           | 170 +++++++++++++++++-
 xen/arch/arm/setup.c                  |  73 ++++++--
 xen/arch/x86/pv/dom0_build.c          |   2 +-
 xen/common/grant_table.c              |   2 +-
 xen/common/memory.c                   |   4 +-
 xen/common/page_alloc.c               | 245 ++++++++++++++++++++------
 xen/include/asm-arm/mm.h              |   3 +
 xen/include/asm-arm/setup.h           |   2 +
 xen/include/xen/mm.h                  |  15 ++
 12 files changed, 546 insertions(+), 102 deletions(-)

-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:18:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:18:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156292.288405 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlm-00084F-2S; Thu, 15 Jul 2021 05:18:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156292.288405; Thu, 15 Jul 2021 05:18:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tll-000848-UY; Thu, 15 Jul 2021 05:18:45 +0000
Received: by outflank-mailman (input) for mailman id 156292;
 Thu, 15 Jul 2021 05:18:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tlk-00083i-ND
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:18:44 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.21.63]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1f13d1fc-e52c-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 05:18:43 +0000 (UTC)
Received: from AS8PR04CA0082.eurprd04.prod.outlook.com (2603:10a6:20b:313::27)
 by AM6PR08MB3798.eurprd08.prod.outlook.com (2603:10a6:20b:82::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 05:18:37 +0000
Received: from AM5EUR03FT004.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:313:cafe::21) by AS8PR04CA0082.outlook.office365.com
 (2603:10a6:20b:313::27) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:37 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT004.mail.protection.outlook.com (10.152.16.163) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:36 +0000
Received: ("Tessian outbound b81a99a0393d:v99");
 Thu, 15 Jul 2021 05:18:36 +0000
Received: from 5290271f0273.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 47E4E018-3139-41CF-A2CB-CB8DA517D4A9.1; 
 Thu, 15 Jul 2021 05:18:30 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5290271f0273.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:30 +0000
Received: from DB8PR06CA0066.eurprd06.prod.outlook.com (2603:10a6:10:120::40)
 by AM5PR0802MB2451.eurprd08.prod.outlook.com (2603:10a6:203:9d::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Thu, 15 Jul
 2021 05:18:28 +0000
Received: from DB5EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:120:cafe::f) by DB8PR06CA0066.outlook.office365.com
 (2603:10a6:10:120::40) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:28 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT023.mail.protection.outlook.com (10.152.20.68) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:27 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:26 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1f13d1fc-e52c-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Iful6SKFh5yAFK5a8vc6iLO1PFy2rWyY82gDbNfEiXM=;
 b=K0JIJPdHtmuwaELCHS2rq4MBVeulibfFEJQukUh2GglwO9cvRLDVYo/1v8c/swtdwsZXNbexC8S5jMSbbCC4WaPBV860qQtXxbmk6c8fWvBbtNM2osY8MgMWPSFewSVArSY3MDSS3MxIbZCGo2MJcLeZXwZmXgvzMayIrH299ZM=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 1763cc68dc876658
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FsDnvUay8FYop8XcCtpK6Jyq0Jjr3DbxssatqHICHkjR8aHC3tziohSgvHS9AQMLpVbhQ+kAGoW9oA2EzjXTdojgvG2xau6Wfq6PgXqqU1nfSJCQawLp5wPVhW6fGvxZfNZAL1fbcYXqSgKj5D2KTZ34qjMYZtr4EKMQL8qx1pi/WHtMN/tV2JPX4hEt1f6Z8fSmJZ9eXQG+/ZAZEGCSOZuvuzMAVEVuB+yzkoB3zOOgJQWDjHfb9hqkz8eKCDuzggQWqG3xuJFuNl5/AMdGJ6ZG5+kx5yrWAU1aPgVolteXJ/6yw16clepruZwEqZmn+MTHM9hGPBCxZJgh7dJJXw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Iful6SKFh5yAFK5a8vc6iLO1PFy2rWyY82gDbNfEiXM=;
 b=FEz99fMg+o/ruZLT72I+rn7qJx87+RedUuGNjBA4Uv9XnU/5h2NxFJc1iZvSVnWCa3uP41uaP+69626FyVzHbE8gcJ3fDaLy1oM4eDvaYR9aabpUjwxWDB52uTxghRgq6hnVGl3Z4WtZ3n0EVaYTFhjXtpS9Jr5r2XFDGYFXxGocpv/bMMvg+840OPTR/66vialB/UOOuUGxE891TAOgkmsS3d9ZXlG72ry+tvrTQtDH+gmuc9E0I4zOcGtqSuQzCIeydt9DICA60Cp6nYYg77EWVYf3MGIkkAiD7hL9geQN46g4CxFjKxrZqi6T1uF/xlJjgzq8J9NrDei1E/qpWQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Iful6SKFh5yAFK5a8vc6iLO1PFy2rWyY82gDbNfEiXM=;
 b=K0JIJPdHtmuwaELCHS2rq4MBVeulibfFEJQukUh2GglwO9cvRLDVYo/1v8c/swtdwsZXNbexC8S5jMSbbCC4WaPBV860qQtXxbmk6c8fWvBbtNM2osY8MgMWPSFewSVArSY3MDSS3MxIbZCGo2MJcLeZXwZmXgvzMayIrH299ZM=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 01/10] xen/arm: introduce domain on Static Allocation
Date: Thu, 15 Jul 2021 05:18:10 +0000
Message-ID: <20210715051819.3073628-2-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 53a6a949-714c-4a9a-6aed-08d9474fffbc
X-MS-TrafficTypeDiagnostic: AM5PR0802MB2451:|AM6PR08MB3798:
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB379807729030BBF56E40A37CF7129@AM6PR08MB3798.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 MW2GkbPOErCi9d8aNJPbCFsRjfvCrsNV/AF+Rx2BeVvZBJR60zXuTFMWwcMeTHhAlB9pFL6arF8T071xxsFc9YEWA+CI6Lq9utd805TwaLiLfIGwdldq7HpYbiU8siPLkZLIDeruMx0PVxEXNsc691qt0IfOaxbbnwd7rumguVX4XuY/zlSMUgzApWsPbGF9g9AELfJROrGRpdD69h6Xjs6/JtsQ9KA2wKsZIJal1NJmxk4wWwx0cgdxHzN6r5/lWEtySC5Xh+oSItcHfLudPCtzuFSdOXFh1yi/Bw3S7rtaM1PNWcErTs4o2Leos/X2Tntxjovr4se3NEhjnCLi6vSz2fr5bg7Y6QXvMnsNm7YU17ahhBByhlk5dKr0kZgc+NxIMUOYzPcdI17hBEopxas+BRzLF7wY7JdxYBJvW+PdnChR0fGBYYaN1WdufEVCyghoET61zIIxZwxomi4Y3Rq04j0ePWgtuuR3vQAJ/ASDtm6+zuuZZuXBrj5V7w5ZkvBCjFhkH9Bg1PJcWMIAKcPT40BRjK4ikwjJPdfH1XLNGbnytncOaVAGJr+D/NqSJ6E1r0PCqEQzlPNsqehliQR9ypsCfGYM+T4ABxsTtJodDpjO5TyDOW7tTFacRUZWczMsLQ2I7V/phgm7q15vBXf03Ri1FehakOQ1DAgR8Mwh6EUZ0lHHwkYQWqR1KXO3VlzGRyPveAozBUUvCuO5uU8T85CJzF2wUpCvX4CtVBY=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(81166007)(26005)(7696005)(478600001)(2616005)(5660300002)(6666004)(82310400003)(356005)(4326008)(2906002)(8676002)(86362001)(316002)(54906003)(186003)(1076003)(8936002)(70586007)(70206006)(36756003)(426003)(36860700001)(110136005)(47076005)(44832011)(336012)(83380400001)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2451
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT004.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4b840cf3-293c-4fa1-a81b-08d9474ffa6f
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Ysdv00YuWUpDUQnzYFGngbs/HRb9g5HtUrgpWdnua7CmcQtyfqrI9cx6CqB0xT6hhW7qEwztOt2aR1ltDHAegQp6bdqSWUaoye5GPnYlYpdam6bM7sYGrPcDFLMsXWTvIxZVi1pED2GJvNx71Bcu2ZO5jvqKKXyW7mAYvWhfTCfz1iaqGCiL38aOFFACCgMLSye0ysretIdN16FJFsQaU1EG/GnPVxRcv3qB0vTQLSQ6LvHMPgGT7YkpeljMI/Cp4amj1NAZXuQ9B6JRV6UKqw5HATWQTMHu+PNcJ7N30FuRawrbMyiVQtGNVBZpp+vy2RQa9FqJX1Sta5Y35cSiN3B43FJsLHo9W96WEUXT1tZJIs6qrnEEwG7QBo/lULV4HjXZEVlUerRZXsEAvDezko/FhE37WkH5kjHlrlMmLMxqtkuauBsASRvTDvUBHc+PB4uLwEUJgTxP+BpEUfdKfc7lkiQD+HdEvhaoYlV9cQIFNzL0ESzT5IeWuKjLY/sKAGR7I30AWoClebKCZL2KVNund4cL70ZhF2ibxfmSnJ7ZGI6/DvJQjkyEdAulzxR3keIbL1wTSB7jyRWzVJFYG0e30o+Qo2Le4zL5iri2x8+7egnaEvHIT2yXXRSkc6sMh1qRovpQi0TkL5/pLMHDVQsIdWeYczgvWGr+EVy+rPeLBVnD9h7ig/XxPtdxZCqXloy5gSOfpv1MF18iRPJ8og==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(39850400004)(396003)(346002)(136003)(36840700001)(46966006)(54906003)(36860700001)(82310400003)(478600001)(81166007)(7696005)(4326008)(82740400003)(6666004)(86362001)(8936002)(1076003)(110136005)(5660300002)(336012)(316002)(8676002)(36756003)(186003)(70586007)(426003)(70206006)(47076005)(44832011)(2616005)(83380400001)(2906002)(26005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:36.7583
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 53a6a949-714c-4a9a-6aed-08d9474fffbc
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT004.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3798

Static Allocation refers to system or sub-system(domains) for which memory
areas are pre-defined by configuration using physical address ranges.
Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the
beginning, shall never go to heap allocator or boot allocator for any use.

Domains on Static Allocation is supported through device tree property
`xen,static-mem` specifying reserved RAM banks as this domain's guest RAM.
By default, they shall be mapped to the fixed guest RAM address
`GUEST_RAM0_BASE`, `GUEST_RAM1_BASE`.

This patch introduces this new `xen,static-mem` feature, and also documents
and parses this new attribute at boot time and stores related info in
static_mem for later initialization.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 changes:
- use "xen,static-mem" property to be compatible with System Sevice Tree
in the future
---
 docs/misc/arm/device-tree/booting.txt | 40 +++++++++++++++++++++
 xen/arch/arm/bootfdt.c                | 51 +++++++++++++++++++++++++++
 xen/include/asm-arm/setup.h           |  2 ++
 3 files changed, 93 insertions(+)

diff --git a/docs/misc/arm/device-tree/booting.txt b/docs/misc/arm/device-tree/booting.txt
index 5243bc7fd3..2a1ddca29b 100644
--- a/docs/misc/arm/device-tree/booting.txt
+++ b/docs/misc/arm/device-tree/booting.txt
@@ -268,3 +268,43 @@ The DTB fragment is loaded at 0xc000000 in the example above. It should
 follow the convention explained in docs/misc/arm/passthrough.txt. The
 DTB fragment will be added to the guest device tree, so that the guest
 kernel will be able to discover the device.
+
+
+Static Allocation
+=============
+
+Static Allocation refers to system or sub-system(domains) for which memory
+areas are pre-defined by configuration using physical address ranges.
+Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the
+beginning, shall never go to heap allocator or boot allocator for any use.
+
+Domains on Static Allocation is supported through static memory property,
+defined under according /domUx in the name of "xen,static-mem", which are
+specifying physical RAM as this domain's guest RAM.
+The size of address-cells/size-cells must be defined in
+"#xen,static-mem-address-cells" and "#xen,static-mem-size-cells".
+
+On memory allocation, these pre-defined static memory ranges shall be
+firstly mapped to the fixed guest bank "GUEST_RAM0". Until it exhausts the
+`GUEST_RAM0_SIZE`, then it will seek to `GUEST_RAM1_BASE`, and so on.
+`GUEST_RAM0` may take up several pre-defined physical RAM regions.
+
+The dtb property should look like as follows:
+
+    / {
+        chosen {
+            domU1 {
+                compatible = "xen,domain";
+                #address-cells = <0x2>;
+                #size-cells = <0x2>;
+                cpus = <2>;
+                #xen,static-mem-address-cells = <0x1>;
+                #xen,static-mem-size-cells = <0x1>;
+                xen,static-mem = <0x30000000 0x20000000>;
+                ...
+            };
+        };
+    };
+
+DomU1 will have a static memory of 512MB reserved from the physical address
+0x30000000 to 0x50000000.
diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index 476e32e0f5..d2714446e1 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -193,6 +193,55 @@ static int __init process_reserved_memory_node(const void *fdt, int node,
     return 0;
 }
 
+static int __init process_static_memory(const void *fdt, int node, void *data)
+{
+    int i = 0, banks;
+    const __be32 *cell;
+    paddr_t start, size;
+    u32 address_cells, size_cells, reg_cells;
+    struct meminfo *mem = data;
+    const struct fdt_property *prop;
+
+
+    address_cells = device_tree_get_u32(fdt, node,
+                                        "#xen,static-mem-address-cells", 0);
+    size_cells = device_tree_get_u32(fdt, node,
+                                     "#xen,static-mem-size-cells", 0);
+    if ( (address_cells == 0) || (size_cells == 0) )
+    {
+         printk("Missing \"#xen,static-mem-address-cell\" or "
+                 "\"#xen,static-mem-address-cell\".\n");
+         return -EINVAL;
+    }
+    reg_cells = address_cells + size_cells;
+
+    prop = fdt_get_property(fdt, node, "xen,static-mem", NULL);
+    /*
+     * Static memory shall belong to a specific domain, that is,
+     * its node `domUx` has compatible string "xen,domain".
+     */
+    if ( fdt_node_check_compatible(fdt, node, "xen,domain") != 0 )
+    {
+        printk("xen,static-mem property can only be located under /domUx node.\n");
+        return -EINVAL;
+    }
+
+    cell = (const __be32 *)prop->data;
+    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
+
+    for ( ; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
+    {
+        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
+        mem->bank[mem->nr_banks].start = start;
+        mem->bank[mem->nr_banks].size = size;
+        mem->nr_banks++;
+    }
+
+    if ( i < banks )
+        return -ENOSPC;
+    return 0;
+}
+
 static int __init process_reserved_memory(const void *fdt, int node,
                                           const char *name, int depth,
                                           u32 address_cells, u32 size_cells)
@@ -346,6 +395,8 @@ static int __init early_scan_node(const void *fdt,
         process_multiboot_node(fdt, node, name, address_cells, size_cells);
     else if ( depth == 1 && device_tree_node_matches(fdt, node, "chosen") )
         process_chosen_node(fdt, node, name, address_cells, size_cells);
+    else if ( depth == 2 && fdt_get_property(fdt, node, "xen,static-mem", NULL) )
+        process_static_memory(fdt, node, &bootinfo.static_mem);
 
     if ( rc < 0 )
         printk("fdt: node `%s': parsing failed\n", name);
diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h
index c4b6af6029..e076329fc4 100644
--- a/xen/include/asm-arm/setup.h
+++ b/xen/include/asm-arm/setup.h
@@ -74,6 +74,8 @@ struct bootinfo {
 #ifdef CONFIG_ACPI
     struct meminfo acpi;
 #endif
+    /* Static Memory */
+    struct meminfo static_mem;
 };
 
 extern struct bootinfo bootinfo;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:18:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:18:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156294.288427 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tls-0000El-Mb; Thu, 15 Jul 2021 05:18:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156294.288427; Thu, 15 Jul 2021 05:18:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tls-0000Eb-If; Thu, 15 Jul 2021 05:18:52 +0000
Received: by outflank-mailman (input) for mailman id 156294;
 Thu, 15 Jul 2021 05:18:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tlr-00009P-I6
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:18:51 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.43]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0108b0aa-35d6-4d89-badc-dd42c6fd97e9;
 Thu, 15 Jul 2021 05:18:48 +0000 (UTC)
Received: from AM5PR0201CA0018.eurprd02.prod.outlook.com
 (2603:10a6:203:3d::28) by VE1PR08MB5581.eurprd08.prod.outlook.com
 (2603:10a6:800:1a0::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.27; Thu, 15 Jul
 2021 05:18:45 +0000
Received: from VE1EUR03FT045.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:3d:cafe::49) by AM5PR0201CA0018.outlook.office365.com
 (2603:10a6:203:3d::28) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:45 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT045.mail.protection.outlook.com (10.152.19.51) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:44 +0000
Received: ("Tessian outbound 664b93226e0b:v99");
 Thu, 15 Jul 2021 05:18:44 +0000
Received: from 98af33798e9a.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 148036FD-1276-4BA9-9756-4E3F6E672A3A.1; 
 Thu, 15 Jul 2021 05:18:38 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 98af33798e9a.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:38 +0000
Received: from DB9PR02CA0027.eurprd02.prod.outlook.com (2603:10a6:10:1d9::32)
 by DB6PR0801MB1911.eurprd08.prod.outlook.com (2603:10a6:4:74::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.24; Thu, 15 Jul
 2021 05:18:37 +0000
Received: from DB5EUR03FT012.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:1d9:cafe::17) by DB9PR02CA0027.outlook.office365.com
 (2603:10a6:10:1d9::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:37 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT012.mail.protection.outlook.com (10.152.20.161) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:36 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:35 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0108b0aa-35d6-4d89-badc-dd42c6fd97e9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OT7F8O9ZbaKYoXsj6+GA4KbW+uyHqlgT1xpJ1lW5eYs=;
 b=bRmkCCXHH+twu1TlJOocEkvnItDgMJ9cQ78SKTiQ+BE3nC8xq4pe/tSeTFbOd3dJNgLo/ktxnPP4yit7L8a1MJWV+/fNejm4FqFRy75VTouSWzrsA+XZ2iB9kauiHrUAFVMaiEbsEgCApbZefRzpK/TzC3RrAQrdY5moOqLf7QY=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 7de1e53f76b2142a
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jCz5d00Y4n9N4+Bz1jjEuTLAUceKorvT1Js5N7JbmbSzgXAOQ7VOHODresB5u956IRmWC2T3MtmSzhcZVuyogX1gz9YR/F/OQehLUcmuO327jApkpWavCdE02e8zYhW6mjYO2Y434kC/TAtG2Dy8itIkn+/fw084GpGOa6sfEBk3pk5jrcoOLrk48n51Gq8HNK9CmQjhhPDR2tfokmu9Kt7YUwA3NmT0EMu1nLrPvoOVeuAWrf07yxyfXdQKZ5fAU03CcbvsWrg64v9IPjRozocXG796kKUK3zkNn+/QdDLVmBpM2bteeU6nNr0VCrIOeGudp9JukiLfAKcetAcXDg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OT7F8O9ZbaKYoXsj6+GA4KbW+uyHqlgT1xpJ1lW5eYs=;
 b=TKgMX9m39v2MEak5vqcxpXTZHeR3uGefdxcEKHAjySFDcDkdb3CR3VXEEBeHoQDWoCeIZTR9XiHY9+Im2cQQ+RnAW4mTGjRA9qriJbODVqzvrE8U6C0OojHkxEMpw5vtMc110kUDF+8zELEnoXfAkbgThgsWEhHJ2xP6gaep4LchCeHFs3cJeHfRr8gUX9zE+Ya0qCO989nH1MgQc4sdb5lVV1Zm9qbkU2C9hjOXBuedLrWAGk3WUR3k82DNDBVsIA4IpS6bYQsI6REmqnTSwwnLO51ulGvmD7YaPiWFv0g1A2x1qnig5JhZYRN+XtPpsQJPvfiLeauhPsC3ZQO5bA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OT7F8O9ZbaKYoXsj6+GA4KbW+uyHqlgT1xpJ1lW5eYs=;
 b=bRmkCCXHH+twu1TlJOocEkvnItDgMJ9cQ78SKTiQ+BE3nC8xq4pe/tSeTFbOd3dJNgLo/ktxnPP4yit7L8a1MJWV+/fNejm4FqFRy75VTouSWzrsA+XZ2iB9kauiHrUAFVMaiEbsEgCApbZefRzpK/TzC3RrAQrdY5moOqLf7QY=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 04/10] xen: introduce mark_page_free
Date: Thu, 15 Jul 2021 05:18:13 +0000
Message-ID: <20210715051819.3073628-5-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ea83acbd-ccde-4e55-520a-08d9475004b2
X-MS-TrafficTypeDiagnostic: DB6PR0801MB1911:|VE1PR08MB5581:
X-Microsoft-Antispam-PRVS:
	<VE1PR08MB55818A19C45E28944B7F1EF7F7129@VE1PR08MB5581.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:1051;OLM:1051;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 k/P7MCSDanzelEayVIMbXHgRcpYj00wP37r822vZMjs6cOFpa7f4hP3giuXxlThrFhQpQgUUVh9u4rqJD/L6+2ISXid/bBEZ6p5iznM1kwXu8Kclo7ewAPqZAFWsTr3/Y4FRHpHJhi9cXrNDJz9hlOXevRYpI2FV11rG0+rPyRgawurvkxKl10TeOteRcKkm0K3dDUJf76e/6H1YSzDT3cpNrJ3gqNtCb/MWEFtV609r/pYLbQaGweTpkbsrRKPgYssUEWxsHdr/Hs85w1Ua6Co0BYcyR0YjD4iAMWy1w3xyPetq7q7haEJ+ayZGNYRyPrB1phwazBAJ5RyWa4gY1ctai54Qj7CA3Rxe/Zab7Ba7YIrZ+tffXjG+wuDZ/IebBhoguTR6NJgOCbYAbmZh+ie8eihtYgH+AjCy9mOQV9isU/UQ7vl2IlPAilmN3BoucZsAVM6WIOU8p8l8iffUhiVcYiudll+noqNfgGSUQDTPJMpIBka3zFllzX26wb7bajaNs4YKPyeKlt0pU9JuTw7M2vEmgUOrx30v0mB6rs7Ujgv6FNXKjjQlPxHr8Uu/7iWRJ6Q1nT/DrZNifrLBJQ1xJO/82qtboYW21m+5Dp1q6XBLLD3zMJFS6ihnjnksMVIQPoGpbdL8lMUecLTFx1wunFngNCtx6NyU4rxrNFIULl3yXoCy1FNFPmwpXrxZb4QOQAIILSwZwGXXsMhB7ZTmwtZypp5V2JC/FgpyOmU=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(39850400004)(136003)(346002)(376002)(396003)(46966006)(36840700001)(81166007)(426003)(110136005)(7696005)(26005)(186003)(5660300002)(36860700001)(36756003)(316002)(4326008)(8936002)(82740400003)(336012)(47076005)(2906002)(6666004)(70586007)(478600001)(54906003)(86362001)(70206006)(1076003)(44832011)(8676002)(82310400003)(356005)(83380400001)(2616005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1911
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	67c1f5e6-2f45-442a-f245-08d9474fffc1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	fYfIWsi0P7bdjIyqRboITLJ/Ejdyphh2Cpt+k3wgEYujZDAPDwXhWVKCViCHOr6Q5Tnu/VnTrSigKXhmSvkHmuPazwhI3qSaQHVZ/lPCYcfWTI7/cGaMBqjETe5Tx58zAppLGhVsCATrh1x0WvM4CGcGbvT0FvHVZimW6Q+MDesQtK37x80vTL4c3hP7H8qwJDbyHjEF+/4XRxXFIACe1oxgUZoXXOKdgawnT3bRaDm1ovy2nARuYT/VwE/oCO7U70YNbaw3qEc0fwIymNRkydG6nbZOy9+Dvrvkye17XspkgnZoUow9y304Pitz7okwkc2QvHSlDUtYYeHEmz2oFXN8P1a8dtnYDNQqdH3CANGsLkq9MIaD9AHk5pIxVkbJyU4YI2NAwG4hGWfWaXIFk83mQ2AryuC2CCgpJvfTHHd1fyyMAh5/kjaQUtoDFc2llZ9LVdbhmBiQNp9mVxG6jKtjCicBU7o379M7IEDH/UhhsERRm45taqRSYfzCASErdiDrZDt1vxkL4OzcY4OzS3flXZiJ0NfFvvbyWCtc9NjT+qTqSw/t/yNOPOYbVyRJk7byZCBg88PjIth7qs4E5fPtm+wRzgCF2ndgq9wZgBrjZrtAoKaSV62ScZuLyKRASKzh9ckh0YK6NCdNHcTzZ1xvmvIbwnkjLFH3NTbR4fGvkBVhT5SHFm4SrB3CqH1M6Af6mEaUztwfcVP0m7XTdQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(396003)(39850400004)(376002)(136003)(346002)(46966006)(36840700001)(70206006)(186003)(2616005)(82740400003)(44832011)(7696005)(8676002)(47076005)(8936002)(26005)(36860700001)(82310400003)(2906002)(478600001)(70586007)(336012)(6666004)(86362001)(54906003)(81166007)(110136005)(426003)(83380400001)(316002)(36756003)(4326008)(5660300002)(1076003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:44.9797
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ea83acbd-ccde-4e55-520a-08d9475004b2
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT045.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5581

This commit defines a new helper mark_page_free to extract common code,
like following the same cache/TLB coherency policy, between free_heap_pages
and the new function free_staticmem_pages, which will be introduced later.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 changes:
- rename from "free_page" to "mark_page_free"
- remove non-trivial page_to_mfn conversion due to pdx compression, and
let the MFN passed in
- add an ASSERT() to double check both passed-in pg and MFN match up.
- let all switch-cases shared
---
 xen/common/page_alloc.c | 89 ++++++++++++++++++++++-------------------
 1 file changed, 48 insertions(+), 41 deletions(-)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 958ba0cd92..95d9be169d 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1376,6 +1376,53 @@ bool scrub_free_pages(void)
     return node_to_scrub(false) != NUMA_NO_NODE;
 }
 
+static void mark_page_free(struct page_info *pg, mfn_t mfn)
+{
+    ASSERT(mfn_x(mfn) == mfn_x(page_to_mfn(pg)));
+
+    /*
+     * Cannot assume that count_info == 0, as there are some corner cases
+     * where it isn't the case and yet it isn't a bug:
+     *  1. page_get_owner() is NULL
+     *  2. page_get_owner() is a domain that was never accessible by
+     *     its domid (e.g., failed to fully construct the domain).
+     *  3. page was never addressable by the guest (e.g., it's an
+     *     auto-translate-physmap guest and the page was never included
+     *     in its pseudophysical address space).
+     * In all the above cases there can be no guest mappings of this page.
+     */
+    switch ( pg->count_info & PGC_state )
+    {
+    case PGC_state_inuse:
+        BUG_ON(pg->count_info & PGC_broken);
+        pg->count_info = PGC_state_free;
+        break;
+
+    case PGC_state_offlining:
+        pg->count_info = (pg->count_info & PGC_broken) |
+                           PGC_state_offlined;
+        tainted = 1;
+        break;
+
+    default:
+        printk(XENLOG_ERR
+               "pg MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
+               mfn_x(mfn),
+               pg->count_info, pg->v.free.order,
+               pg->u.free.val, pg->tlbflush_timestamp);
+        BUG();
+    }
+
+    /* If a page has no owner it will need no safety TLB flush. */
+    pg->u.free.need_tlbflush = (page_get_owner(pg) != NULL);
+    if ( pg->u.free.need_tlbflush )
+        page_set_tlbflush_timestamp(pg);
+
+    /* This page is not a guest frame any more. */
+    page_set_owner(pg, NULL); /* set_gpfn_from_mfn snoops pg owner */
+    set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY);
+}
+
 /* Free 2^@order set of pages. */
 static void free_heap_pages(
     struct page_info *pg, unsigned int order, bool need_scrub)
@@ -1392,47 +1439,7 @@ static void free_heap_pages(
 
     for ( i = 0; i < (1 << order); i++ )
     {
-        /*
-         * Cannot assume that count_info == 0, as there are some corner cases
-         * where it isn't the case and yet it isn't a bug:
-         *  1. page_get_owner() is NULL
-         *  2. page_get_owner() is a domain that was never accessible by
-         *     its domid (e.g., failed to fully construct the domain).
-         *  3. page was never addressable by the guest (e.g., it's an
-         *     auto-translate-physmap guest and the page was never included
-         *     in its pseudophysical address space).
-         * In all the above cases there can be no guest mappings of this page.
-         */
-        switch ( pg[i].count_info & PGC_state )
-        {
-        case PGC_state_inuse:
-            BUG_ON(pg[i].count_info & PGC_broken);
-            pg[i].count_info = PGC_state_free;
-            break;
-
-        case PGC_state_offlining:
-            pg[i].count_info = (pg[i].count_info & PGC_broken) |
-                               PGC_state_offlined;
-            tainted = 1;
-            break;
-
-        default:
-            printk(XENLOG_ERR
-                   "pg[%u] MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
-                   i, mfn_x(mfn) + i,
-                   pg[i].count_info, pg[i].v.free.order,
-                   pg[i].u.free.val, pg[i].tlbflush_timestamp);
-            BUG();
-        }
-
-        /* If a page has no owner it will need no safety TLB flush. */
-        pg[i].u.free.need_tlbflush = (page_get_owner(&pg[i]) != NULL);
-        if ( pg[i].u.free.need_tlbflush )
-            page_set_tlbflush_timestamp(&pg[i]);
-
-        /* This page is not a guest frame any more. */
-        page_set_owner(&pg[i], NULL); /* set_gpfn_from_mfn snoops pg owner */
-        set_gpfn_from_mfn(mfn_x(mfn) + i, INVALID_M2P_ENTRY);
+        mark_page_free(&pg[i], mfn_add(mfn, i));
 
         if ( need_scrub )
         {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:18:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:18:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156293.288416 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlq-0008N4-E2; Thu, 15 Jul 2021 05:18:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156293.288416; Thu, 15 Jul 2021 05:18:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlq-0008Mu-AU; Thu, 15 Jul 2021 05:18:50 +0000
Received: by outflank-mailman (input) for mailman id 156293;
 Thu, 15 Jul 2021 05:18:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tlp-00083i-C3
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:18:49 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.45]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 21a0c45e-e52c-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 05:18:47 +0000 (UTC)
Received: from AM6P193CA0110.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::15)
 by DB8PR08MB4026.eurprd08.prod.outlook.com (2603:10a6:10:aa::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul
 2021 05:18:40 +0000
Received: from AM5EUR03FT026.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:85:cafe::c6) by AM6P193CA0110.outlook.office365.com
 (2603:10a6:209:85::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:40 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT026.mail.protection.outlook.com (10.152.16.155) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:39 +0000
Received: ("Tessian outbound ef2da60907d5:v99");
 Thu, 15 Jul 2021 05:18:39 +0000
Received: from 56eed0801f3b.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 3298B7CB-4162-490A-B382-5CD75E83B8DB.1; 
 Thu, 15 Jul 2021 05:18:33 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 56eed0801f3b.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:33 +0000
Received: from DB8PR06CA0038.eurprd06.prod.outlook.com (2603:10a6:10:120::12)
 by AM5PR0801MB1987.eurprd08.prod.outlook.com (2603:10a6:203:47::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.25; Thu, 15 Jul
 2021 05:18:31 +0000
Received: from DB5EUR03FT027.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:120:cafe::93) by DB8PR06CA0038.outlook.office365.com
 (2603:10a6:10:120::12) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:31 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT027.mail.protection.outlook.com (10.152.20.121) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:31 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:29 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 21a0c45e-e52c-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pqU3vVGiI7GLhNQwwAeYPut2BD+FA6nGju3mVA8aiz8=;
 b=sVo1DJ5oxew23bckWudEyHjTZUZag78PDOVGDXP+U21rhEoHYj7g06yTS6kZCBIsHZubuiATMAmbaRFqnd6eclxzZSaIjICDbCriq24loHbo3aiy1rsjBijk7Ye85i/oJFr7kz3/C17ALlal/PqE3HNBR9Q/8ddfRcPt79OiBtM=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 4a954491ebf86a9d
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OtYhI0ms3t5Cpj/E5UC0T3oUQqY/SlvuRRG3uXDpT7g3rYjMAv5FojGnqLvksyw4IU8Mi3LI2vSXPKgJ2z1xCNitPygQpemgJo+qh9qmdodwfUYkNDWLdypNT7hIIjOjyBta3FBzQEkj75quKrxQ+7Ja4N+7HpkpFlphVs9FaAo/ucJC5hL867PQBy4OnmtO0vMl2RGChF9Q+nL2kcDE/jGVmVrWwPxMde70w4NivViAY2YNkdKJJOUX5Qn8J4XTBGWjCMHum9KFqlgtZNt4+O5f/USrm35kYbqULMP5pB80S4sWa92NBxyrjI/mfvmF1hsAoJ005gyQOzqd3mSPVg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pqU3vVGiI7GLhNQwwAeYPut2BD+FA6nGju3mVA8aiz8=;
 b=iiNMZrZFXrcP+8EGTRbWGkHmQ2r3vMhuC0t0PJIlgCWpZNHTRZptiry4Gq9IA94MiUeWJnolouT8yurIwJMOi4BZrEUP6xu7i8PmLVKe7dcHz91vsllzcbkGOT6aPaJvbO7od/6q8uSy7LdIVLGii7XsEEkGKO6q8E70IlYaaMg+1LYUL24bq1hXx3vGdtqJBzoQTGN9h+Wknq3fkmN/GE/SCG/mOYPYWgZdtm7vS7AzJXoXAABGvJ2kRTt8gEdoXOUK481FkkmjTJ5hb7ftJ+uDjw36iw1EbvaSkqR91M0PtWaMXfXGzeKah5m8nCPA8s01VsC/1Ix3yx5OVbLZzQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pqU3vVGiI7GLhNQwwAeYPut2BD+FA6nGju3mVA8aiz8=;
 b=sVo1DJ5oxew23bckWudEyHjTZUZag78PDOVGDXP+U21rhEoHYj7g06yTS6kZCBIsHZubuiATMAmbaRFqnd6eclxzZSaIjICDbCriq24loHbo3aiy1rsjBijk7Ye85i/oJFr7kz3/C17ALlal/PqE3HNBR9Q/8ddfRcPt79OiBtM=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 02/10] xen/arm: introduce new helper device_tree_get_meminfo
Date: Thu, 15 Jul 2021 05:18:11 +0000
Message-ID: <20210715051819.3073628-3-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 183d19f4-f280-48b6-2cad-08d9475001a7
X-MS-TrafficTypeDiagnostic: AM5PR0801MB1987:|DB8PR08MB4026:
X-Microsoft-Antispam-PRVS:
	<DB8PR08MB4026D79633DD3CE4D6D8DFA6F7129@DB8PR08MB4026.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:580;OLM:580;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 fzOrV7tM06yzry1ig/XBIkBojH61BQmHn6rpxVnghWpYw5gZgR945/jeiMBGUlHEwia6O2LEw3TQS5Etcl85aOhZBSVIasa0p6f2m48zMxcojWpjzHGGkXx/qdRnwKJBVBceSdhd2rMPgfa1LkROBCtfjB4c1XNVMHaO2cCYaS0RqSRNqfrUZ8I8+xEOXKn+wc5T0r2L92CUnYsVmctsgnkfECPNjCCdWscTvisRlpWEpOApy9Ak/vs3H5bcsif1n/2iwuxH8zpcoDlJ1CkvmmPbvi0yseoIi0bT+YEVw4NW+QFuktY61dT/f5Yn9hQg2yGDmyzyiMcj47H+NHZEcDYzDm8CwKiucO9EzyhAqpvO9kuDp5zJ1WLFG8FNMCvLTB+eGcdCJhVeATwfH+Hk3dxtEwYj3BOZNqBxzQej1Q/oEhO/MzoThIEombiVq4VkCbmAf5CHpEx/jXsZmZJWWtIhdKfv1fR/iIpt7esUIA/U3i2hyBaPzIQVHWr9seYaKShaTG4BbDq3u8bY3fzU2/AfW02iTgLejE7N4GkA7dGMry201MtV68x9XD2F2JqJkQ3U2oTkdsStXyWXHSRFpYzz1ddEFdpS6n8rf9vZMhkhm9eMoJkw+dbJaBAtG5pCG5LkK1+F55EIONWZMZmV4shrlJ/m1kz+ZimJ7gEgjqP/QGGR0dEstgCLAWPLpdj3Ua3TM+oeVYJFkSPWqHQ3DzPGp960l/sAHqPrI7ufXH0=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(136003)(346002)(396003)(39850400004)(376002)(36840700001)(46966006)(1076003)(82740400003)(70586007)(83380400001)(36756003)(426003)(81166007)(70206006)(5660300002)(86362001)(8676002)(356005)(2906002)(110136005)(54906003)(8936002)(44832011)(47076005)(4326008)(6666004)(186003)(316002)(2616005)(36860700001)(82310400003)(478600001)(26005)(336012)(7696005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1987
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT026.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	39325497-bbea-4953-c2c2-08d9474ffc6a
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	QTBIUY7ODNagrJNlGKaueIlXvXK58lQQhIEylNE6YThS6nxDwQGfirLzlaHZh3b6b7Ef+Ysd218E8253BCkl5f/HlXmFnUm3VGBOpiHQIde+Uo/H5k801LVp50BJunlrNxBCSOVvgnfVca5uMTl85QWD7seipELYCWMS6Tp6/k7jpJRcAf8EJxRsuBYxv/dTdSO7UaZT2Ah1qYM4sFJ5R5bXSU9Z/SmvQBlKgRv79JIFGaG/n7b3Z2p5iR7Hoh2DiOtaPEnsl+3QX1klzQy7wQKKdilwiFU+O7D2HXOLZck0l+zbFA/ocuj0SzBbvDXF+TxTmim21eMK3I34v1FYvBJjOfKTBX1i+56AepMwGxNU5PmP1PZr6Kywr2Y7+OO3mgbrUmueSlh1H3b32QauntZ3DHhH3A7FKp8tWJ7S/kwl5Ez/mJwh+cM5fFkc7eHWQmG2YoIsqJv2+HowT1X38cX0f1Gq3JuNf05owwrZFuYcn562WsYunxdALTqvCxsTItcvRQSs3/wm+7bZm2/TxQKxmAqTqhIvGlHv8WjFHiWNCC6+xPSHcY9MvYbz5LeFKibeDdOrhmNar9M/IXxsZpBJsWXKT5hXrNLD1FBAoBqlT9ejCDK8yPETWjugkEH6WAsHHLsoTDYZJfJRn3PHyk9sIVh63Z+mfPj23q7PDzBdfzBEBUHt+M8BDI1NAkSFytwHV7rI6iWplDkxKmCjdw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(39850400004)(396003)(136003)(346002)(36840700001)(46966006)(82310400003)(26005)(86362001)(70586007)(478600001)(7696005)(4326008)(186003)(36756003)(54906003)(426003)(2616005)(316002)(5660300002)(8676002)(336012)(110136005)(70206006)(1076003)(8936002)(82740400003)(47076005)(44832011)(36860700001)(2906002)(6666004)(81166007)(83380400001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:39.9705
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 183d19f4-f280-48b6-2cad-08d9475001a7
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT026.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4026

A few functions iterate over the device tree property to get memory info,
like "reg" or "xen,static-mem", so this commit creates a new helper
device_tree_get_meminfo to extract the
common codes.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 xen/arch/arm/bootfdt.c | 104 +++++++++++++++++------------------------
 1 file changed, 42 insertions(+), 62 deletions(-)

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index d2714446e1..04210684c9 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -63,6 +63,44 @@ void __init device_tree_get_reg(const __be32 **cell, u32 address_cells,
     *size = dt_next_cell(size_cells, cell);
 }
 
+static int __init device_tree_get_meminfo(const void *fdt, int node,
+                                          const char *prop_name,
+                                          u32 address_cells, u32 size_cells,
+                                          void *data)
+{
+    const struct fdt_property *prop;
+    unsigned int i, banks;
+    const __be32 *cell;
+    u32 reg_cells = address_cells + size_cells;
+    paddr_t start, size;
+    struct meminfo *mem = data;
+
+    prop = fdt_get_property(fdt, node, prop_name, NULL);
+    if ( !prop )
+        return -ENOENT;
+
+    cell = (const __be32 *)prop->data;
+    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
+
+    for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
+    {
+        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
+        /* Some DT may describe empty bank, ignore them */
+        if ( !size )
+            continue;
+        mem->bank[mem->nr_banks].start = start;
+        mem->bank[mem->nr_banks].size = size;
+        mem->nr_banks++;
+    }
+
+    if ( i < banks )
+    {
+        printk("Warning: Max number of supported memory regions reached.\n");
+        return -ENOSPC;
+    }
+    return 0;
+}
+
 u32 __init device_tree_get_u32(const void *fdt, int node,
                                const char *prop_name, u32 dflt)
 {
@@ -139,14 +177,6 @@ static int __init process_memory_node(const void *fdt, int node,
                                       u32 address_cells, u32 size_cells,
                                       void *data)
 {
-    const struct fdt_property *prop;
-    int i;
-    int banks;
-    const __be32 *cell;
-    paddr_t start, size;
-    u32 reg_cells = address_cells + size_cells;
-    struct meminfo *mem = data;
-
     if ( address_cells < 1 || size_cells < 1 )
     {
         printk("fdt: node `%s': invalid #address-cells or #size-cells",
@@ -154,27 +184,7 @@ static int __init process_memory_node(const void *fdt, int node,
         return -EINVAL;
     }
 
-    prop = fdt_get_property(fdt, node, "reg", NULL);
-    if ( !prop )
-        return -ENOENT;
-
-    cell = (const __be32 *)prop->data;
-    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
-
-    for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
-    {
-        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
-        /* Some DT may describe empty bank, ignore them */
-        if ( !size )
-            continue;
-        mem->bank[mem->nr_banks].start = start;
-        mem->bank[mem->nr_banks].size = size;
-        mem->nr_banks++;
-    }
-
-    if ( i < banks )
-        return -ENOSPC;
-    return 0;
+    return device_tree_get_meminfo(fdt, node, "reg", address_cells, size_cells, data);
 }
 
 static int __init process_reserved_memory_node(const void *fdt, int node,
@@ -195,13 +205,7 @@ static int __init process_reserved_memory_node(const void *fdt, int node,
 
 static int __init process_static_memory(const void *fdt, int node, void *data)
 {
-    int i = 0, banks;
-    const __be32 *cell;
-    paddr_t start, size;
-    u32 address_cells, size_cells, reg_cells;
-    struct meminfo *mem = data;
-    const struct fdt_property *prop;
-
+    u32 address_cells, size_cells;
 
     address_cells = device_tree_get_u32(fdt, node,
                                         "#xen,static-mem-address-cells", 0);
@@ -213,33 +217,9 @@ static int __init process_static_memory(const void *fdt, int node, void *data)
                  "\"#xen,static-mem-address-cell\".\n");
          return -EINVAL;
     }
-    reg_cells = address_cells + size_cells;
-
-    prop = fdt_get_property(fdt, node, "xen,static-mem", NULL);
-    /*
-     * Static memory shall belong to a specific domain, that is,
-     * its node `domUx` has compatible string "xen,domain".
-     */
-    if ( fdt_node_check_compatible(fdt, node, "xen,domain") != 0 )
-    {
-        printk("xen,static-mem property can only be located under /domUx node.\n");
-        return -EINVAL;
-    }
-
-    cell = (const __be32 *)prop->data;
-    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
-
-    for ( ; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
-    {
-        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
-        mem->bank[mem->nr_banks].start = start;
-        mem->bank[mem->nr_banks].size = size;
-        mem->nr_banks++;
-    }
 
-    if ( i < banks )
-        return -ENOSPC;
-    return 0;
+    return device_tree_get_meminfo(fdt, node, "xen,static-mem", address_cells,
+                                   size_cells, data);
 }
 
 static int __init process_reserved_memory(const void *fdt, int node,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:18:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:18:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156296.288438 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlx-0000fo-9F; Thu, 15 Jul 2021 05:18:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156296.288438; Thu, 15 Jul 2021 05:18:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tlx-0000fZ-3u; Thu, 15 Jul 2021 05:18:57 +0000
Received: by outflank-mailman (input) for mailman id 156296;
 Thu, 15 Jul 2021 05:18:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tlw-00009P-90
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:18:56 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (unknown
 [40.107.20.43]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 61873ed1-442a-4e6b-928d-016267b87ae2;
 Thu, 15 Jul 2021 05:18:49 +0000 (UTC)
Received: from DB9PR05CA0016.eurprd05.prod.outlook.com (2603:10a6:10:1da::21)
 by AS8PR08MB6613.eurprd08.prod.outlook.com (2603:10a6:20b:339::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul
 2021 05:18:47 +0000
Received: from DB5EUR03FT031.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:1da:cafe::e9) by DB9PR05CA0016.outlook.office365.com
 (2603:10a6:10:1da::21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:47 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT031.mail.protection.outlook.com (10.152.20.142) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:46 +0000
Received: ("Tessian outbound 57330d0f8f60:v99");
 Thu, 15 Jul 2021 05:18:46 +0000
Received: from 24e5e3f15a90.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 5E5D74CA-B84C-410A-80DA-E0EF1E10DE31.1; 
 Thu, 15 Jul 2021 05:18:40 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 24e5e3f15a90.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:40 +0000
Received: from DB6PR0501CA0047.eurprd05.prod.outlook.com (2603:10a6:4:67::33)
 by DBBPR08MB4805.eurprd08.prod.outlook.com (2603:10a6:10:dd::17) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul
 2021 05:18:33 +0000
Received: from DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:67:cafe::36) by DB6PR0501CA0047.outlook.office365.com
 (2603:10a6:4:67::33) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:33 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT003.mail.protection.outlook.com (10.152.20.157) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:33 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:32 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 61873ed1-442a-4e6b-928d-016267b87ae2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=E612QY3hggINdE3fQg6TwWgv5c6iumbjlcSfMIoMkC4=;
 b=oZT7pHoMh65/yFRf0TJAW2neqNipNbQ24tq5BiiSlV9bg+CGSZgrNh+ZNkMWZcuPlFIjGjQ7SUs72ZMnBYzCK38tTbSr0wrO9X0tns2q1AqSXny989Cv9nNVbXeP+dOE+T3gruVbdkP1jiJ50MQQy8f3BxsbXOU0ZkDbhMVkAfY=
X-MS-Exchange-Authentication-Results: spf=temperror (sender IP is
 63.35.35.123) smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass
 (signature was verified) header.d=armh.onmicrosoft.com;lists.xenproject.org;
 dmarc=temperror action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
X-CheckRecipientChecked: true
X-CR-MTA-CID: 4b46a35c717f3afd
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WkztgqiU3niGW2Uyf7qpogMbyZ6nHc4Nv2xxEqKGf7zRRJlOUo0idQOK1vriZtHspDRuY4Rsg58YRMa/mrXz4uaMrCNYQTRLefMRhJf1lhc12rlT6bFSC93FmcjJCL/KTRz+ctb6cahEM04t8itC4+W+jNfI4xW0boxA5z8UMUNvjG7B1CQK6Ypes0OUI8UH/wkKZ72GvRpZrFt/d1CSQIKVQZfeGHedAwSFs9+o3qYdAO6y4V9ePuerstVWBQPwpxv6y7+rdfKgFomiWtXRt+9xCuAK6Apv0VL9Yfy+ezWu7qFYzOa3VI+yAENacUoWJ7fue68VKWm9a0ZpJdAhKA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=E612QY3hggINdE3fQg6TwWgv5c6iumbjlcSfMIoMkC4=;
 b=G2j6PTGTrsR1LiyFtargZxdyX5WS7q3YClr+BZWisvJRO+bywFwoqjNcPJApSzztsvsdgy0qWz3ZCzcvrs60+b7IvLM8b904DqPEDPUIJwFtn4lKee2z15HXEsGvBn5Ywgjk5xgmUXOsftO+2BvCrH+tS48qO+ehzuwutA4PJbPKX0OEWTpU2nyQKDZzIejjCbNBZgfIoNgI4bmabPapQbkg9qjnuEHwN38tJJ6w665O5cS8bZMPtDkMZGNvWHTRPm+USKCj3dOW5flqkOYZofURD4aTqZKfi1A0vj+JIibKEk4tEn1Kc3qj/IBqiskYUds8bgP2UPf9mp0HPGoi/w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=E612QY3hggINdE3fQg6TwWgv5c6iumbjlcSfMIoMkC4=;
 b=oZT7pHoMh65/yFRf0TJAW2neqNipNbQ24tq5BiiSlV9bg+CGSZgrNh+ZNkMWZcuPlFIjGjQ7SUs72ZMnBYzCK38tTbSr0wrO9X0tns2q1AqSXny989Cv9nNVbXeP+dOE+T3gruVbdkP1jiJ50MQQy8f3BxsbXOU0ZkDbhMVkAfY=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 03/10] xen/arm: handle static memory in dt_unreserved_regions
Date: Thu, 15 Jul 2021 05:18:12 +0000
Message-ID: <20210715051819.3073628-4-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d616a1d8-efa2-4168-695c-08d9475005c3
X-MS-TrafficTypeDiagnostic: DBBPR08MB4805:|AS8PR08MB6613:
X-Microsoft-Antispam-PRVS:
	<AS8PR08MB66136897B407AF0AF0795F9DF7129@AS8PR08MB6613.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:1265;OLM:1265;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 yBHaIgTMNvU49IthGd/KQLNA6NVuuIMAe+H/b4cKxluR3b3aKHoZY0Gy5kt1twuEaiNtZVDwTO1nDx+xyAlcIsf+mLyq0BUFHLKRxoAch8XktUhw+Z677Qu3IUEKKR5tdWvatR0R68RyCHaE3DN+ATeYVR0RixPLfVOm/+EI4rOfze1xn7MJhTZQ2ZtJzIu/b/EtArUhncC7ONurxMdbMDWvg4KYaWJjxGEa/XfkLFFzKItUQWsQ8Ww31Oq5RTxIGfOFY1+9IrPF1YgxwCbrMHnOlk6MaSYtCxaj9ifXyeqHZiH8h+4S+xCEtnuBbGuptgo3mYOe1d3Ytl/O50RZtFKdrTyUvIp9tvfJ7nd4o6HLZDROSE5e6uAH0MfH3Rf5HuU1Y4n0r4a4/viB84BQFrPEbyME9/Eq2f2+yavT03c9XXlMM8vhkaeBIA37r+SDtdqV+8ORvKLRmGSxPNXaYTfIXg91+N8wFf8o5agtRWCoAuA1/zfQFaJHzpHSc0Q5F3ebFYV0nUoEeEFmIxhK97LrrMxOqV4XnqCISRRYDDSBMc3lC2geUwGEkBNuj1moXTrIs3VAOcnYkAr4Ag6VLQDXWYfjKgiO4yFOPW5WeCRaPzPN8hZjWcy5eYCJ8+9GFY5cCSexStWKXve4trIhb1yq6/XBqkjV4nq766hQBr1/p2gULFTNT8JHbDPDlVdiMBVGDwRByY5izK55tI5EnUXJNrxraxYKZFA2fhb+cKc=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(39850400004)(136003)(376002)(346002)(46966006)(36840700001)(26005)(44832011)(8936002)(2616005)(1076003)(54906003)(36756003)(82740400003)(6666004)(81166007)(36860700001)(186003)(4326008)(426003)(478600001)(83380400001)(336012)(356005)(86362001)(5660300002)(2906002)(7696005)(70206006)(47076005)(8676002)(316002)(70586007)(82310400003)(110136005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4805
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT031.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4a04a21b-b935-4ee2-03b5-08d9474ffdeb
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	FeYoSQIyYSicjUomUokvHIBQWG0XYWiQa9W2nulOCdjl+4Og59u9/3mTUMRwvmdWa/hkmiaOfPMG+NUJdlv2QHhRT3ALiSGiP18sA8f7g9ZpiUfZKSj07DdVX2FAKkuiaegUHNfUWJBKtzga1ikcAdJ+hLDPPG+3Zeq1vqPFIceSZaXPWpVfOIwk0B68djx2M24C01/72m8AQah5rEnU8KB12K+cZwJjiZakInG/n3J8wgz5zAvGnjgqeQ6xoOCyf0YMGsV/SHmboi4TrTIBJEimkI0UiIg9vH0H0twG9j+n4BQm3kWyVJi0eUBSVQIeYPFR4YQ7Vuv83195yKk711bzz6EAldzg5Q5UOoNdNB53+wXedxQfgueGSVCqkApwjwC3/RlI55c5iGfDlbg01fIID1BpnnOD4+Idb/x2kzocSdDd3Pp43PX+J1jHS61Hut0VjJ4lH2Kya+O28aX0dl7XgpLhsEcjd1lORmpqQAXcCMvD+pJCuo82pQcBG2o3jHiGwl69S/+oK/GoXOApHdvMQ80svVqnJtGN+KKqfTrZtYvDykuXyCc4gLouvyeDAEQj/2eln8W1lIkLyvg4hReLGTnZlLPrS3uMLzhPvSKNHzC/n4LQIaxxE8msAM7qexFkYvUo2Dfs9uBcJjTCxIlTfxvslVLx6heh4yeEHqIAIRA6q/sAcsqMYx+Rg0bpU9pdQftglI5MKk/xs1Hn1w==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(376002)(396003)(346002)(136003)(36840700001)(46966006)(4326008)(26005)(70206006)(63350400001)(83380400001)(110136005)(36756003)(2616005)(8676002)(44832011)(186003)(82740400003)(36860700001)(336012)(316002)(63370400001)(5660300002)(81166007)(7696005)(70586007)(2906002)(426003)(54906003)(6666004)(86362001)(8936002)(82310400003)(478600001)(1076003)(47076005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:46.9214
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: d616a1d8-efa2-4168-695c-08d9475005c3
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT031.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6613

static memory regions overlap with memory nodes. The
overlapping memory is reserved-memory and should be
handled accordingly:
dt_unreserved_regions should skip these regions the
same way they are already skipping mem-reserved regions.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 changes:
- extract common codes for dealing with reserved memory stored in
bootinfo
---
 xen/arch/arm/setup.c | 47 ++++++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 17 deletions(-)

diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 63a908e325..f569134317 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -200,6 +200,13 @@ static void __init dt_unreserved_regions(paddr_t s, paddr_t e,
                                          int first)
 {
     int i, nr = fdt_num_mem_rsv(device_tree_flattened);
+    /*
+     * There are two types of reserved memory stored in bootinfo, one defines
+     * in /reserved-memory node, the other refers to domain on static allocation
+     * through "xen,static-mem" property.
+     */
+    int nr_rsv_type = 2, t = 0, prev_nr;
+    struct meminfo *rsv_type[2] = {&bootinfo.reserved_mem, &bootinfo.static_mem};
 
     for ( i = first; i < nr ; i++ )
     {
@@ -219,26 +226,32 @@ static void __init dt_unreserved_regions(paddr_t s, paddr_t e,
         }
     }
 
-    /*
-     * i is the current bootmodule we are evaluating across all possible
-     * kinds.
-     *
-     * When retrieving the corresponding reserved-memory addresses
-     * below, we need to index the bootinfo.reserved_mem bank starting
-     * from 0, and only counting the reserved-memory modules. Hence,
-     * we need to use i - nr.
-     */
-    for ( ; i - nr < bootinfo.reserved_mem.nr_banks; i++ )
+    prev_nr = nr;
+    while ( t < nr_rsv_type )
     {
-        paddr_t r_s = bootinfo.reserved_mem.bank[i - nr].start;
-        paddr_t r_e = r_s + bootinfo.reserved_mem.bank[i - nr].size;
-
-        if ( s < r_e && r_s < e )
+        /*
+         * i is the current bootmodule we are evaluating across all possible
+         * kinds.
+         *
+         * When retrieving the corresponding reserved-memory addresses
+         * below, we need to index the reserved mem bank starting
+         * from 0, and only counting the reserved-memory modules. Hence,
+         * we need to use i - prev_nr.
+         */
+        i = i - prev_nr;
+        for ( ; i < rsv_type[t]->nr_banks; i++ )
         {
-            dt_unreserved_regions(r_e, e, cb, i + 1);
-            dt_unreserved_regions(s, r_s, cb, i + 1);
-            return;
+            paddr_t r_s = rsv_type[t]->bank[i].start;
+            paddr_t r_e = r_s + rsv_type[t]->bank[i].size;
+
+            if ( s < r_e && r_s < e )
+            {
+                dt_unreserved_regions(r_e, e, cb, i + 1);
+                dt_unreserved_regions(s, r_s, cb, i + 1);
+                return;
+            }
         }
+        prev_nr = rsv_type[t++]->nr_banks;
     }
 
     cb(s, e);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:19:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:19:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156298.288449 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tm2-0001Dm-IN; Thu, 15 Jul 2021 05:19:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156298.288449; Thu, 15 Jul 2021 05:19:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tm2-0001DT-ES; Thu, 15 Jul 2021 05:19:02 +0000
Received: by outflank-mailman (input) for mailman id 156298;
 Thu, 15 Jul 2021 05:19:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tm1-00009P-8x
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:19:01 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.80]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fca2b67a-f9a0-41ef-8658-1a18fe74c998;
 Thu, 15 Jul 2021 05:18:51 +0000 (UTC)
Received: from AM6P193CA0071.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:8e::48)
 by AM6PR08MB5077.eurprd08.prod.outlook.com (2603:10a6:20b:e6::15) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 15 Jul
 2021 05:18:49 +0000
Received: from VE1EUR03FT012.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:8e:cafe::80) by AM6P193CA0071.outlook.office365.com
 (2603:10a6:209:8e::48) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:49 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT012.mail.protection.outlook.com (10.152.18.211) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:48 +0000
Received: ("Tessian outbound 809237f40a36:v99");
 Thu, 15 Jul 2021 05:18:48 +0000
Received: from d6a36b010456.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 4FC92E74-5853-4BB0-8FA9-D4E6438EDF4C.1; 
 Thu, 15 Jul 2021 05:18:42 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d6a36b010456.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:42 +0000
Received: from DB6PR0301CA0057.eurprd03.prod.outlook.com (2603:10a6:4:54::25)
 by VI1PR08MB4591.eurprd08.prod.outlook.com (2603:10a6:803:b5::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul
 2021 05:18:40 +0000
Received: from DB5EUR03FT053.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:54:cafe::52) by DB6PR0301CA0057.outlook.office365.com
 (2603:10a6:4:54::25) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:39 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT053.mail.protection.outlook.com (10.152.21.119) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:39 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:38 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fca2b67a-f9a0-41ef-8658-1a18fe74c998
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6RuQQnLM+Fgaeuh0yD31SI005nmfjCuq9/hVXZqKUE8=;
 b=iGzqmAhc5l3+s1k0ba+/ltjDXvO+/YxBBzKiGApOyN3y5+Fexi+cwPWMNUw9sSfwz0zdltG686d05ljcXLg+z9Eqn7fHEyx7DkCScVUx7dDz0Obn+N40zRu3ahKFY1i6UDGhmAzz0YQpn/wlWOhdxV7uNyVAII0IbK+oK5OSZN8=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: eacd1cd9d0cb26ab
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=evSz65sMci3VGbUy2l06x5tz9tlnwjTYvoihud7uV4IpIIxUPA1026QWCoswY9UmjB2fIvlomCuSEf52SEeOtnzzMSdlAoeSuAHCiMqrVdrjSQNAR9+XfENSSM+EDwOcMp7C35AJ1ZbwOsr+HFqoObD1rWAFAhRq6/sXGjQPCaY+y+uuY4nJfxwJ92rSNP9rMRVDT+sgOocg+O+Sce41kN3cVp4o0rik7i7mRV5zApWRmt/o7NhheStCVJzmoittoMFdqdMwWkS3iqaF5Cc1Eu1hQfbnPlOYMN4YspS+zdttKrEFl7rbAbFKXMYj2ZTOLn94Rz0TJR1iqnGog8a4HQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6RuQQnLM+Fgaeuh0yD31SI005nmfjCuq9/hVXZqKUE8=;
 b=jfUga6eJFZxanhUZ7hvmcwJlmm2oySkZG3zwGvmerrYod7zl6umeYBl/ScaZ0hQiLFg1Dt6tm2CGyFOWjg2FiJ43ANCmC29Q2blcWSgsgKnBTaSDM5A+k32SRLwkPlGT+6UdlYbMOWjZe/RHw4FZG8DxOtDxauJz71AaYHn4a3jlmIwmyuyV9b97vFGHzgOayYj2SSR6BRCTWJAcZ2D/ps3/pt9Hn9eLBsRY0KbY8Ot5YeANx9iSwvIvHJs0qRlVR32EU4hxcIwHY1MLtD2l/90jZlMbWE1ERe1u/YD9BdlabutGhiC4qIhwwxbBTya1vvbh6B9IkQzsmmEzJ23sjA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6RuQQnLM+Fgaeuh0yD31SI005nmfjCuq9/hVXZqKUE8=;
 b=iGzqmAhc5l3+s1k0ba+/ltjDXvO+/YxBBzKiGApOyN3y5+Fexi+cwPWMNUw9sSfwz0zdltG686d05ljcXLg+z9Eqn7fHEyx7DkCScVUx7dDz0Obn+N40zRu3ahKFY1i6UDGhmAzz0YQpn/wlWOhdxV7uNyVAII0IbK+oK5OSZN8=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 05/10] xen/arm: static memory initialization
Date: Thu, 15 Jul 2021 05:18:14 +0000
Message-ID: <20210715051819.3073628-6-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7c920649-f0bd-40a7-a526-08d9475006f3
X-MS-TrafficTypeDiagnostic: VI1PR08MB4591:|AM6PR08MB5077:
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB507729C2E24F044342537B9CF7129@AM6PR08MB5077.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:323;OLM:323;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 UdhAvQBBD3kwuTTjyIiSSHnV/r48SNrk1R/AggH67MGo1PoU+XnbBMvETvZzTBCd7wJFKcu1H2jZuu5USqDH2EmC24P4K3dkgln/jo4CIK3+2oA1tPb2Zxl+nRclF3nfkrxwS5FSLUmkCT76hERJ3t5Xct+5suVOWLhxb4bw28y52hMzyc3F0ieAJbVtWX6pv33OoIEs4b3eyrts23ocUd4ve7wnDLuDiNnafY0gJ2zg0Uye40Rf4+pFsxXq5mxvb7q79nJWPRMuwjWEN+m1zjOP+IkvikmWXqnlXK08P//0lgtkvMjLlJYD+Fdk8DUYDHqpdXCyoAGWcd6iPTdlzY119N4+2JxqXKrNX5clssK3rUCWIVTQCi4PetHwpTnphmwAVhGxIuDtujXLuIR7dhut0/7ULAEcXe7J+oOAo+duGJ+f2KrWRcCFLKMSu0D19LESYNPsTlYut15I4nEQ5dcNwtAfUWd2slorZr3hwmw5YSvFn46+jowQ2p19jYf2EwmsFOQIZ4hz3b2GG1P+8PDXLkkLTY1OpATP4SnnT20up+sCYpQ/XDt3J/1MKwOkh+s9Amhq4FgVM3I7qX8JzisCi2gJSylvRFdZLZRM16HWnLhpKm/U7Gpb+X9j+CIQTFGi8p4y9gmFcqNFRBu3Hl2v9Q3dGZ55lc+ADe9gzbEeMCuZY6To1Qq3FCl4AFY+FQrIdTyR6jMFfjkdLbXoUfNOnSkaJYP9mybqdNjq4rA=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(346002)(376002)(39850400004)(396003)(136003)(36840700001)(46966006)(5660300002)(70206006)(1076003)(2906002)(7696005)(70586007)(186003)(36860700001)(316002)(86362001)(81166007)(8676002)(44832011)(110136005)(82740400003)(36756003)(54906003)(83380400001)(336012)(478600001)(47076005)(82310400003)(6666004)(2616005)(356005)(26005)(426003)(4326008)(8936002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4591
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT012.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	3fbcd178-91a9-41c0-5bc6-08d947500163
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	s2fr5kTgwtuxutEfGRHIh4x31j4Eb5KvHFZSyC0vXpTz9Ya/UoLOpN3dYevZRmwwia16iefgknhp1gaFmiyUGGdzwAwuVFEzMkfd3o2f89K0mxR9qvIW8nruhwI3CPe689w+Kn30rNzoFSR2LMWaN9/3maEajmtHF00BmCmJ4bQbeQlkb99iiB4l9g174eteAt+U3RAi8ubnFsRP7d1NLPQA8GBsWMOi6J52FK542uVEkUM2HrhlMbwip5NGuA5USPkyXHyR22FbKJHE3Gl5C8zPu+91eZaCS5tW2l1Q/xC00heW8X/J/qWFQ+pXQBdyL/3jC3ijEv77YVfyKvEMZmvSj3I1DtK2JaCh65pYVRKN0O1L/hDknJMbe4BXjrsgS9wLRxuef1pJqtqpFn3dlZt9KmxScM/5AsgV+CPkYOtEnM5dqoREax3AQS/SofotN2T7Q6sz8cLSP6Kgyiuviv1+HU5iU7hDrn+5j1BPhM4l/sCc6LcecLKU5kVqbBhxMQBqJMWoWBzPXjC7zITvx6WcoUeWZGasroOWGHQZwLW+Y6FVSe8BX/xII1Rnh+qY7Bm3a62n6kD+IP6G3oGr9CjXurRpks8ji/kPxlypCAvdkNi0cLRh5zFxX58yOZDa2aVdA9pxgXt027RfngTwRi59+99e8PiFoRu8woCqGCF0L7HERfWgVsBQflvwgYY+a0ELl7UhC4nKXRLO3sYgYQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(396003)(39850400004)(376002)(136003)(46966006)(36840700001)(44832011)(81166007)(82310400003)(1076003)(86362001)(6666004)(316002)(186003)(8676002)(82740400003)(8936002)(7696005)(36860700001)(336012)(5660300002)(26005)(426003)(2906002)(110136005)(36756003)(4326008)(54906003)(2616005)(478600001)(70586007)(70206006)(83380400001)(47076005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:48.8063
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 7c920649-f0bd-40a7-a526-08d9475006f3
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT012.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5077

This patch introduces static memory initialization, during system boot up.

The new function init_staticmem_pages is responsible for static memory
initialization.

Helper free_staticmem_pages is the equivalent of free_heap_pages, to free
nr_mfns pages of static memory.

This commit also introduces new CONFIG_STATIC_MEMORY to avoid bringing dead
codes in other archs.

Put asynchronous scrubbing for pages of static memory in TODO list.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 change:
- include addition of CONFIG_STATIC_ALLOCATION in this commit, where it
is firstly used and also change the name to CONFIG_STATIC_MEMORY
- Fix TAB typo in Kconfig
- put init_staticmem_pages in setup_mm
---
 xen/arch/arm/Kconfig    |  3 +++
 xen/arch/arm/setup.c    | 26 ++++++++++++++++++++++++++
 xen/common/page_alloc.c | 20 ++++++++++++++++++++
 xen/include/xen/mm.h    |  6 ++++++
 4 files changed, 55 insertions(+)

diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
index ecfa6822e4..b91e2efc4f 100644
--- a/xen/arch/arm/Kconfig
+++ b/xen/arch/arm/Kconfig
@@ -106,6 +106,9 @@ config TEE
 
 source "arch/arm/tee/Kconfig"
 
+config STATIC_MEMORY
+        def_bool y
+
 endmenu
 
 menu "ARM errata workaround via the alternative framework"
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index f569134317..aec8bc8494 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -622,6 +622,28 @@ static void __init init_pdx(void)
     }
 }
 
+/* Static memory initialization */
+static void __init init_staticmem_pages(void)
+{
+    unsigned int bank;
+
+    /* TODO: Considering NUMA-support scenario. */
+    for ( bank = 0 ; bank < bootinfo.static_mem.nr_banks; bank++ )
+    {
+        paddr_t bank_start = bootinfo.static_mem.bank[bank].start;
+        paddr_t bank_size = bootinfo.static_mem.bank[bank].size;
+        paddr_t bank_end = bank_start + bank_size;
+
+        bank_start = round_pgup(bank_start);
+        bank_end = round_pgdown(bank_end);
+        if ( bank_end <= bank_start )
+            return;
+
+        free_staticmem_pages(maddr_to_page(bank_start),
+                            (bank_end - bank_start) >> PAGE_SHIFT, false);
+    }
+}
+
 #ifdef CONFIG_ARM_32
 static void __init setup_mm(void)
 {
@@ -749,6 +771,8 @@ static void __init setup_mm(void)
     /* Add xenheap memory that was not already added to the boot allocator. */
     init_xenheap_pages(mfn_to_maddr(xenheap_mfn_start),
                        mfn_to_maddr(xenheap_mfn_end));
+
+    init_staticmem_pages();
 }
 #else /* CONFIG_ARM_64 */
 static void __init setup_mm(void)
@@ -802,6 +826,8 @@ static void __init setup_mm(void)
 
     setup_frametable_mappings(ram_start, ram_end);
     max_page = PFN_DOWN(ram_end);
+
+    init_staticmem_pages();
 }
 #endif
 
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 95d9be169d..f394d6627a 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1519,6 +1519,26 @@ static void free_heap_pages(
     spin_unlock(&heap_lock);
 }
 
+#ifdef CONFIG_STATIC_MEMORY
+/* Equivalent of free_heap_pages to free nr_mfns pages of static memory. */
+void __init free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
+                                 bool need_scrub)
+{
+    mfn_t mfn = page_to_mfn(pg);
+    unsigned long i;
+
+    for ( i = 0; i < nr_mfns; i++ )
+    {
+        mark_page_free(&pg[i], mfn_add(mfn, i));
+
+        if ( need_scrub )
+        {
+            /* TODO: asynchronous scrubbing for pages of static memory. */
+            scrub_one_page(pg);
+        }
+    }
+}
+#endif
 
 /*
  * Following rules applied for page offline:
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 667f9dac83..8e8fb5a615 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -85,6 +85,12 @@ bool scrub_free_pages(void);
 } while ( false )
 #define FREE_XENHEAP_PAGE(p) FREE_XENHEAP_PAGES(p, 0)
 
+#ifdef CONFIG_STATIC_MEMORY
+/* These functions are for static memory */
+void free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
+                          bool need_scrub);
+#endif
+
 /* Map machine page range in Xen virtual address space. */
 int map_pages_to_xen(
     unsigned long virt,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:19:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:19:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156306.288459 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmF-0002IW-5D; Thu, 15 Jul 2021 05:19:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156306.288459; Thu, 15 Jul 2021 05:19:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmF-0002IN-1x; Thu, 15 Jul 2021 05:19:15 +0000
Received: by outflank-mailman (input) for mailman id 156306;
 Thu, 15 Jul 2021 05:19:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tmD-0000d1-8P
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:19:13 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.21.67]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2b421506-e52c-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 05:19:03 +0000 (UTC)
Received: from AM5PR0402CA0006.eurprd04.prod.outlook.com
 (2603:10a6:203:90::16) by AM8PR08MB5841.eurprd08.prod.outlook.com
 (2603:10a6:20b:1db::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.24; Thu, 15 Jul
 2021 05:18:57 +0000
Received: from AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:90:cafe::bb) by AM5PR0402CA0006.outlook.office365.com
 (2603:10a6:203:90::16) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:57 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT023.mail.protection.outlook.com (10.152.16.169) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:56 +0000
Received: ("Tessian outbound 664b93226e0b:v99");
 Thu, 15 Jul 2021 05:18:55 +0000
Received: from a1ba4e926fae.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 FD5AF517-0840-4626-A15A-374C238A8F74.1; 
 Thu, 15 Jul 2021 05:18:50 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a1ba4e926fae.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:50 +0000
Received: from DB9PR02CA0029.eurprd02.prod.outlook.com (2603:10a6:10:1d9::34)
 by PAXPR08MB6955.eurprd08.prod.outlook.com (2603:10a6:102:1da::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 15 Jul
 2021 05:18:48 +0000
Received: from DB5EUR03FT051.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:1d9:cafe::cf) by DB9PR02CA0029.outlook.office365.com
 (2603:10a6:10:1d9::34) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:48 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT051.mail.protection.outlook.com (10.152.21.19) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:48 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:47 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2b421506-e52c-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fRL005ZOzyUYob7GB42ihy+z8eRo0qovo722B7cMwsQ=;
 b=kQep5TAN5tC5JTbbHxBLsPQ4jDg/ieqgx0ESNx8M2w4mCVidLIzFJY2Ty9XmliTjT01VyV7WCxnpYxGc481ngPtA+Je48dx2ZJapWgXWcrN7ohzydKjo5ifoCjVfH2ACt+tfo2CbIPW9aYDfnYRolo/erFoBVXrSwu+86MWf0k4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: c255fa28a77e015d
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Fl6u5QvhFhkKhpshCA24zksRd/BW9LrFSkq74S6i9qS+OgE1ARTDUBaa673CEwez21e5CE76jLHGahWH7GJqtxOO/uEvtTD8ezwtJoqQjapVx4dcQgAbUhlCNNxPHPV46I2KYyLg0zXFvb9UAzxo9CjBfxCf8aDn810PEuH9wD+81f7apT3S3fTH8EMSOyyIHaFgCWbHsS7UzYIGes7iuielvAhJF9BsXTSyRSWqkqCiLOdkV4W1r4t1qLl5YNZJPKTRk2mfE6yaAm52fOEv4XImWyoqf6PA+MUvSR2T+wkBDeOFjEGKg9WKO8Tpq7zpYH6AemuDmH5EVtpoB49u4A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fRL005ZOzyUYob7GB42ihy+z8eRo0qovo722B7cMwsQ=;
 b=QeGKdxEPoTxxEpOTp+77EKkua7BWEArxNiTPrtF8L6qgo5SVqQXjIB3SUnZmg8op70mOPu40OsvwXSZYDQnX+PAZKXfTNwVDR0rl+3iHHvLvBihd/tx/WWu2IwIi4f7DBQekyvM2GfFPWa98eJfJ7wDSRiEP4ZTMRy5ri1wuVY/puKxe++K9GM68ErW4Tg4b780pavggjFiSPVw2IKX4qQqZN6oJGWiPAI/XH2QXn8WbgQgApEA+ouHpYFScVSb6Xtbs8gngQcRwE1xyjRad5BD7WHPizSTg5tSoj12tjOhmCEVC02whGcTzDKdlYEM4Ky0nDXUwUouQCeCavi8TMQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fRL005ZOzyUYob7GB42ihy+z8eRo0qovo722B7cMwsQ=;
 b=kQep5TAN5tC5JTbbHxBLsPQ4jDg/ieqgx0ESNx8M2w4mCVidLIzFJY2Ty9XmliTjT01VyV7WCxnpYxGc481ngPtA+Je48dx2ZJapWgXWcrN7ohzydKjo5ifoCjVfH2ACt+tfo2CbIPW9aYDfnYRolo/erFoBVXrSwu+86MWf0k4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and acquire_domstatic_pages
Date: Thu, 15 Jul 2021 05:18:17 +0000
Message-ID: <20210715051819.3073628-9-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 529b03ff-b151-47d0-3ebb-08d947500b83
X-MS-TrafficTypeDiagnostic: PAXPR08MB6955:|AM8PR08MB5841:
X-Microsoft-Antispam-PRVS:
	<AM8PR08MB5841A7331F6EA37398C79E66F7129@AM8PR08MB5841.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:372;OLM:372;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 lw6E0lza0AIft+/iP88Ob9++4lZFOaArxPenzcw96ksOM1b/HhJIK5bx0AKSg6Y4yrzRmFx6VJ8RTX444ubOlRJMFE40KY77TULdTY65zCCfvtTLXSf+RszXMfabtdyDvK/gVPKtjca4xsAnmDYNaZs+Cb2jarEGxSenmgEWhCu1vIoKXwHRu0B86tq4ei+Se1nmpVjOj3b9NWMCft8ARolkUDG1ux9U4wVMuKj5ZhmZPB5F59Zg6iPR10lrz9XD0IMunq+Mqo9KxfLOzoADqSt0WnRsI0TSFQnICHj+jgYilX/nZqO4LyC6nqeKd30rDsjJcndppfyl4G8DE4uUdFt+BCcLZ6JuIxd6ZoXLAd4XeT+GRtkFPgCpDaIjigCrJ/HRewryj0PHVV3JQOkuEZg41b+tnMSk2mmgxxt8rYX5kuCAzIXmmqSDlMLQ3kZYwxA+2FhZjwdiogYjnSuBClB2xPJibDzBfl9YmSSwTuTKG1OGRM+5n7hMwuj3i7E8SU2+gUWNjkZHVxVGaEmBEmBQV9FqpimiziUsnQaTTkryExD9g3DBBe3bhNdmNG6CnzqWeV8rF4hTJ9YobIJpabl1rR7jSzvGiVh9tQg0NoJMQc9Z39YxAuRA0r+jbwSo0GmtTB/ve/mm4jERZVV0ybZLr1z0tm2bWN8zo2EH/PjXQ6Mihm28CsHebtNIYkjr9yE8ldTmoPg11p/YTkwCaxg+zEgOPnNtr6ZGGm15eMk=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(86362001)(110136005)(83380400001)(6666004)(2616005)(70586007)(36860700001)(4326008)(70206006)(82310400003)(336012)(2906002)(426003)(54906003)(44832011)(1076003)(478600001)(81166007)(8936002)(7696005)(5660300002)(36756003)(8676002)(47076005)(316002)(186003)(26005)(356005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6955
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	916338f5-50d2-4b80-bfb5-08d9475006c0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	bJhryEudsBPP4pPAxxvlf2qWF7sVSWGieSwi3zf5f/LpNK+pVKbUMzu6tmmghr6MTEmSDl/VUUwcrRkc8oja/sPaQZVvewphdCK0TCP6bGlvayxtiwsLzOW2pOZSfKNdx5NdWo/WWInnPbJGD+klPfip119wU6ZEGYabt8WhRKZHK0X0go1zBRNiTskU5twkGauLQlJjLTcc1q2JHx6qfH4K+6Wz7tJ1G+aiRreUeekHUCvUMiS9g9q8NRwUz0QU7FDYP0A4rCQn29xsb9lsSl64FjjY86g91dvobnoh2DrMJr7jhwivUy5g6IeBNrfXmo9fkshzsdKwByJnNaln3SqjKnKeELA7ouyKHm9mbP+hMv7BD/H2EEbtcFmqsMpzeFy6/KidZTlod6oKzW2lBHaEoctPpnYs16nYhFHohXA5mL/nIfYGjCPtFfdb2+mPNN5fs8BGnb6OMn7hACvJB+7gH4BT4yAV8zFJVmDnMrWSmKW1ryz5iFgZEOIVOUDMq+Oes4eYLujSdzXyz3whj2kb6Oab3f6xpqrusOph1ErFrpXUivc6a760weCGEdUCzcvtMYaHS2mFkfis+G5j9QUlWP+ejaR8/OD+Z9TokEy6k7Nzt4Dq6gn+IDmsqVFwE709e/ieCm8+J++hKCRhKb14WxlKXY2N2NVSxTW+Ihyh1KZtwZ4FODr/TNE+Q2Z7lHJTZGFn7O1hWWEWOZJ9rQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(376002)(136003)(396003)(39850400004)(46966006)(36840700001)(81166007)(186003)(316002)(426003)(7696005)(5660300002)(110136005)(36756003)(36860700001)(26005)(4326008)(336012)(8676002)(54906003)(2616005)(44832011)(86362001)(6666004)(8936002)(1076003)(478600001)(82740400003)(70586007)(82310400003)(2906002)(83380400001)(47076005)(70206006);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:56.5162
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 529b03ff-b151-47d0-3ebb-08d947500b83
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB5841

acquire_staticmem_pages aims to acquire nr_mfns contiguous pages of
static memory. And it is the equivalent of alloc_heap_pages for static
memory. Here only covers acquiring pre-configured static memory.

For each page, it shall check if the page is reserved(PGC_reserved)
and free. It shall also do a set of necessary initialization, which are
mostly the same ones in alloc_heap_pages, like, following the same
cache-coherency policy and turning page status into PGC_state_inuse, etc.

acquire_domstatic_pages is the equivalent of alloc_domheap_pages for
static memory, and it is to acquire nr_mfns contiguous pages of static memory
and assign them to one specific domain.

It uses acquire_staticmem_pages to acquire nr_mfns pre-configured pages of
static memory, then on success, it will use assign_pages to assign those pages
to one specific domain.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 change:
- Assuming caller knows the static memory range is reserved (and free),
change name from alloc_staticmem_pages/alloc_domstatic_pages to
acquire_staticmem_pages and acquire_domstatic_pages.
- proper locking moved from the next commit to here.
- remove and refine extra verbosity log
- remove hunks' #ifdef-ary by introducing PGC_reserved = 0
- remove DMA restriction
---
 xen/common/page_alloc.c | 112 +++++++++++++++++++++++++++++++++++++++-
 xen/include/xen/mm.h    |   3 ++
 2 files changed, 113 insertions(+), 2 deletions(-)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 3414873679..c9702533f4 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -151,6 +151,10 @@
 #define p2m_pod_offline_or_broken_replace(pg) BUG_ON(pg != NULL)
 #endif
 
+#ifndef CONFIG_STATIC_MEMORY
+#define PGC_reserved 0
+#endif
+
 /*
  * Comma-separated list of hexadecimal page numbers containing bad bytes.
  * e.g. 'badpage=0x3f45,0x8a321'.
@@ -1065,6 +1069,73 @@ static struct page_info *alloc_heap_pages(
     return pg;
 }
 
+#ifdef CONFIG_STATIC_MEMORY
+/*
+ * Acquire nr_mfns contiguous reserved pages, starting at #smfn, of
+ * static memory.
+ */
+static struct page_info *acquire_staticmem_pages(unsigned long nr_mfns,
+                                                 mfn_t smfn,
+                                                 unsigned int memflags)
+{
+    bool need_tlbflush = false;
+    uint32_t tlbflush_timestamp = 0;
+    unsigned long i;
+    struct page_info *pg;
+
+    /* For now, it only supports pre-configured static memory. */
+    if ( !mfn_valid(smfn) || !nr_mfns )
+        return NULL;
+
+    spin_lock(&heap_lock);
+
+    pg = mfn_to_page(smfn);
+
+    for ( i = 0; i < nr_mfns; i++ )
+    {
+        /*
+         * Reference count must continuously be zero for free pages
+         * of static memory(PGC_reserved).
+         */
+        if ( pg[i].count_info != (PGC_state_free | PGC_reserved) )
+        {
+            printk(XENLOG_ERR
+                   "pg[%lu] Static MFN %"PRI_mfn" c=%#lx t=%#x\n",
+                   i, mfn_x(page_to_mfn(pg + i)),
+                   pg[i].count_info, pg[i].tlbflush_timestamp);
+            BUG();
+        }
+
+        if ( !(memflags & MEMF_no_tlbflush) )
+            accumulate_tlbflush(&need_tlbflush, &pg[i],
+                                &tlbflush_timestamp);
+
+        /*
+         * Preserve flag PGC_reserved and change page state
+         * to PGC_state_inuse.
+         */
+        pg[i].count_info = (PGC_reserved | PGC_state_inuse);
+        /* Initialise fields which have other uses for free pages. */
+        pg[i].u.inuse.type_info = 0;
+        page_set_owner(&pg[i], NULL);
+
+        /*
+         * Ensure cache and RAM are consistent for platforms where the
+         * guest can control its own visibility of/through the cache.
+         */
+        flush_page_to_ram(mfn_x(page_to_mfn(&pg[i])),
+                            !(memflags & MEMF_no_icache_flush));
+    }
+
+    if ( need_tlbflush )
+        filtered_flush_tlb_mask(tlbflush_timestamp);
+
+    spin_unlock(&heap_lock);
+
+    return pg;
+}
+#endif
+
 /* Remove any offlined page in the buddy pointed to by head. */
 static int reserve_offlined_page(struct page_info *head)
 {
@@ -2306,7 +2377,7 @@ int assign_pages(
 
         for ( i = 0; i < nr; i++ )
         {
-            ASSERT(!(pg[i].count_info & ~PGC_extra));
+            ASSERT(!(pg[i].count_info & ~(PGC_extra | PGC_reserved)));
             if ( pg[i].count_info & PGC_extra )
                 extra_pages++;
         }
@@ -2345,7 +2416,8 @@ int assign_pages(
         page_set_owner(&pg[i], d);
         smp_wmb(); /* Domain pointer must be visible before updating refcnt. */
         pg[i].count_info =
-            (pg[i].count_info & PGC_extra) | PGC_allocated | 1;
+            (pg[i].count_info & (PGC_extra | PGC_reserved)) | PGC_allocated | 1;
+
         page_list_add_tail(&pg[i], page_to_list(d, &pg[i]));
     }
 
@@ -2411,6 +2483,42 @@ struct page_info *alloc_domheap_pages(
     return pg;
 }
 
+#ifdef CONFIG_STATIC_MEMORY
+/*
+ * Acquire nr_mfns contiguous pages, starting at #smfn, of static memory,
+ * then assign them to one specific domain #d.
+ */
+struct page_info *acquire_domstatic_pages(
+        struct domain *d, unsigned long nr_mfns, mfn_t smfn,
+        unsigned int memflags)
+{
+    struct page_info *pg = NULL;
+
+    ASSERT(!in_irq());
+
+    pg = acquire_staticmem_pages(nr_mfns, smfn, memflags);
+    if ( !pg )
+        return NULL;
+
+    /* Right now, MEMF_no_owner case is meaningless here. */
+    ASSERT(d);
+    if ( memflags & MEMF_no_refcount )
+    {
+        unsigned long i;
+
+        for ( i = 0; i < nr_mfns; i++ )
+            pg[i].count_info |= PGC_extra;
+    }
+    if ( assign_pages(d, nr_mfns, pg, memflags) )
+    {
+        free_staticmem_pages(pg, nr_mfns, memflags & MEMF_no_scrub);
+        return NULL;
+    }
+
+    return pg;
+}
+#endif
+
 void free_domheap_pages(struct page_info *pg, unsigned int order)
 {
     struct domain *d = page_get_owner(pg);
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 65ba1587ad..69e3586d8a 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -89,6 +89,9 @@ bool scrub_free_pages(void);
 /* These functions are for static memory */
 void free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
                           bool need_scrub);
+struct page_info *acquire_domstatic_pages(struct domain *d,
+                                          unsigned long nr_mfns, mfn_t smfn,
+                                          unsigned int memflags);
 #endif
 
 /* Map machine page range in Xen virtual address space. */
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:19:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:19:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156308.288471 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmH-0002hS-Fp; Thu, 15 Jul 2021 05:19:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156308.288471; Thu, 15 Jul 2021 05:19:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmH-0002hJ-CQ; Thu, 15 Jul 2021 05:19:17 +0000
Received: by outflank-mailman (input) for mailman id 156308;
 Thu, 15 Jul 2021 05:19:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tmG-00009P-9Q
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:19:16 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.21.55]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c9bf7b7b-6f8c-4a95-b378-1e7ff86d5afc;
 Thu, 15 Jul 2021 05:18:53 +0000 (UTC)
Received: from DB9PR05CA0012.eurprd05.prod.outlook.com (2603:10a6:10:1da::17)
 by AM0PR08MB3492.eurprd08.prod.outlook.com (2603:10a6:208:da::31)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 05:18:51 +0000
Received: from DB5EUR03FT031.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:1da:cafe::9b) by DB9PR05CA0012.outlook.office365.com
 (2603:10a6:10:1da::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:51 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT031.mail.protection.outlook.com (10.152.20.142) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:51 +0000
Received: ("Tessian outbound 57330d0f8f60:v99");
 Thu, 15 Jul 2021 05:18:51 +0000
Received: from 9b657cef5389.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 F6357AAD-1979-47AD-A6B1-A3BADF2F7401.1; 
 Thu, 15 Jul 2021 05:18:44 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9b657cef5389.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:44 +0000
Received: from DB8PR06CA0058.eurprd06.prod.outlook.com (2603:10a6:10:120::32)
 by DB7PR08MB3436.eurprd08.prod.outlook.com (2603:10a6:10:44::15) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 05:18:42 +0000
Received: from DB5EUR03FT027.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:120:cafe::69) by DB8PR06CA0058.outlook.office365.com
 (2603:10a6:10:120::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:42 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT027.mail.protection.outlook.com (10.152.20.121) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:42 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com
 (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:41 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Thu, 15
 Jul 2021 05:18:41 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c9bf7b7b-6f8c-4a95-b378-1e7ff86d5afc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=FSUaZhIJ132fP5dvjR7UOX33VSmQ3hubM795HYhZnO8=;
 b=KnheMaRuNZ1IRNS2DFGcoqZXaDEOeF8COjEHF/xbeGeXlo2AR65vD0xs+z1zU/4FlJAZJXHzM8IqSURf1b4KXXrnwE7rm2OgQyssJSpaUmTcs8xZLK/raCxG7jKWc9QH3xEuWZ/KQvlCPAgOPz5Mdbqllh6GBmaE8pboceh+GGY=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 483706ace2e951ec
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BFIAIjILSdi41Vv7YqWgpIM4cIm4Pmsl5oLtdjihxh523UeDEPHmgZxNQxhL0I4u+bHmYBfSRF9AFDHurgn0TTlZn1uXnbDFvtVxyy+ItiDKngjqU1dqmbwPUnZZRAQv8e3oM4l7bNWmv5EnnkGVfZM9NEeqjjcIro2HWXcyzUxp/Mzijs3ZfWMeLIT16VAe+TIlu4m6LRuuHFK41EWg6xxGbd+yAW43+UWihXUUA2cAPjgpOEuyDAQs8eo2zCCnZasRHIjh/tW8Y9DmLlNwd4J1Iut5CKgvhk4myFIEMe8KfKRJKcVHoAlaW/f3x+ZTb13uCwV5HY2Ot6QoJn4qrQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=FSUaZhIJ132fP5dvjR7UOX33VSmQ3hubM795HYhZnO8=;
 b=gCZMUUcuOkKxsNd676rEkkjppeD7WpDRNLT//woOK2VHeK+takVp89Ji1GUQU9j0S1OdDJgDSlw9xD7SE8N7M3WUMRrLKuSGFOh2jiatimt5UU6t3XpmQJzTKhcFgEHoixNLr93z+I0dRSLtPjbBOnjRlhl7DXp+Bmt8g1zCg9dvDt5CLLT4EviJ6dUWwrWlbxcRIAfl9YREq89BOyPW4JUcWGZ2PBnXTM0KNObJ2SKmv7+LruTDepeuqtT5vsHB6dSkqVBsPGMk7KJQYmy2xtrimNH9To6B86Tq5uqFaH/ghO2D239DHCuDANeZ3+bt+CmO5mXR5cPD0LDGN/bg9w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=FSUaZhIJ132fP5dvjR7UOX33VSmQ3hubM795HYhZnO8=;
 b=KnheMaRuNZ1IRNS2DFGcoqZXaDEOeF8COjEHF/xbeGeXlo2AR65vD0xs+z1zU/4FlJAZJXHzM8IqSURf1b4KXXrnwE7rm2OgQyssJSpaUmTcs8xZLK/raCxG7jKWc9QH3xEuWZ/KQvlCPAgOPz5Mdbqllh6GBmaE8pboceh+GGY=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 06/10] xen/arm: introduce PGC_reserved
Date: Thu, 15 Jul 2021 05:18:15 +0000
Message-ID: <20210715051819.3073628-7-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 83dcba9c-c79d-4ba3-3ba0-08d947500832
X-MS-TrafficTypeDiagnostic: DB7PR08MB3436:|AM0PR08MB3492:
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB349221F2049DE9DDE8D05131F7129@AM0PR08MB3492.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:2276;OLM:2276;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 bUsFFh+gY+lxoHy2rXVi8sAs1bhAPaYBz8YaRahx3vSjFdEmRGbBuwc7UmcY6LmGEZwmW5xIoncU/8JBGAXCBOzmz8eEB3jTanxXScFlVBZqozbALHe6PCyq3b9zlGGVQ13aWAZSwq60KLpjb8CUSvdKcY50E3AY8SW5IBFbKISLrgv3jb//ks5HNSQpkENorBIZ+5DuQnexLsxgLVA1E7Z4Gc8F4yMzKDYrDbtsWo6ok+Y4TryJ7Dz7IcapPZ4bl4kijJaFhmEyH1WVFb3h6I/sSHjzCChLZ7aZMaRfiJe45tmU6ViHj+V9MULSAHcB/y1Uo/Im8eP5bJmLcm0+y0Ew/xPuTK9VBj4Hd6GTeaxi3es9i/I0QAto+EaVrENjV6y0c2bKXz7pY9O2KQenMyCcBp3trnNbBFmc8y65iJ7X2AR9+HA6+RfuYGSvDrYXK3ucoB1eVZs2aejVn6lDim9pZWMDYw/Ph0XYDvtsGSv561LxTEqAshcrmb0VaYltFJV2ya7+WAPOtsxJiDq7ZTD+jFqIMsfRnFjUxB3bhY9Brb1xBu2MvJzCsjf7kI3VkQzV+ICz6UKsvut/pqpMtb41SvPAGSdhSQEBcEw4VP3uA/pYv6j8KBFZ0/8c8nHP/wuGsNZGV8lfn/nBJ92gH9+xZgrzJznYAk38d+pcNu4ESraPEdbgFftmneASW+KrZIj/reVa3KpHhJG9kltLEUjadaJml5r5PDjlX9qshHI=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(39850400004)(346002)(376002)(136003)(396003)(36840700001)(46966006)(356005)(82740400003)(478600001)(36860700001)(5660300002)(8936002)(4326008)(7696005)(1076003)(54906003)(81166007)(186003)(82310400003)(6666004)(86362001)(110136005)(36756003)(2906002)(26005)(70206006)(70586007)(316002)(44832011)(336012)(426003)(2616005)(83380400001)(47076005)(8676002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3436
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT031.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	9599777b-5b73-4ec6-5548-08d947500365
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	8YBZv2SsJSr1OvLCNsHwiRNacNRSBk4cziLRYKM6EDLyotQzdfmYMhYITnqKrc4SNc/IHbDydnUK3+Z/C8yGTxpktRU0pidyFcYwuJ/O9qhYpGMaaMfwVBHZ97MYmBQxeSg/CE1OxsqAxiy/iamNyYJaxYBOLFtaRkkeRxQTfyjWTLVXklcSqRC5KgeWG2x0BEkfErvkyukuNwCwcdhZQZTftrUS8Z0S1QUABf8KnTGErkzTw9jMh8FKJIiMegs6aHkR3uVDab6UhGUdBNqss9XVOkuJAgZF6M7Yb7vikjGv6SpRMsYo0thPyN8SQAoPDCnU5W2pDgN/VjE/Rii/YBM6v4qbGoM+9pOl0I4qYDGMd4q4KQCM09VY/Xt2LGSBBR+CSXo44NqQ5bGfaiSN50kqeNekgV+NY4rJt20qrqJ9xpWQuwTR3POIXNiOfDmhTU/vr54lq+KOMarCdQW/4irbczkPDGKz9aONiAGJC/01OwsH63eQbrhtwV0w1qAjYGWKoO5DEORsZjfYeWWwFjDv7VJB5JJFwx/3vnbO8mp6wiukevhWU1SU4LqduU5TrRNUCpXo7F8lIUVPjP+Xu2zE3CvxQDA6+MNT9V3wv/9txj1tM+uq0o4lRR1BMnV50OSR9aYDRw/Uqz4ZgQb8nmTSzA2BBOfOO+RCGfU+9k/v1i6OJqrNzkeReSEi0/x9s1zwAes1DtRVLkfoySm6eg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(186003)(316002)(2906002)(8676002)(36860700001)(82310400003)(5660300002)(8936002)(47076005)(6666004)(4326008)(26005)(83380400001)(81166007)(54906003)(110136005)(336012)(426003)(70206006)(2616005)(7696005)(36756003)(1076003)(70586007)(478600001)(44832011)(86362001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:51.0031
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 83dcba9c-c79d-4ba3-3ba0-08d947500832
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT031.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3492

This patch introduces a new page flag PGC_reserved in order to differentiate
pages of static memory from those allocated from heap.

Mark pages of static memory PGC_reserved when initializing them.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 change:
- introduce PGC_reserved when it is firstly used.
---
 xen/common/page_alloc.c  | 3 +++
 xen/include/asm-arm/mm.h | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index f394d6627a..15edaca227 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1536,6 +1536,9 @@ void __init free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
             /* TODO: asynchronous scrubbing for pages of static memory. */
             scrub_one_page(pg);
         }
+
+        /* In case initializing page of static memory, mark it PGC_reserved. */
+        pg[i].count_info |= PGC_reserved;
     }
 }
 #endif
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index ded74d29da..7b5e7b7f69 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -108,6 +108,9 @@ struct page_info
   /* Page is Xen heap? */
 #define _PGC_xen_heap     PG_shift(2)
 #define PGC_xen_heap      PG_mask(1, 2)
+  /* Page is reserved */
+#define _PGC_reserved     PG_shift(3)
+#define PGC_reserved      PG_mask(1, 3)
 /* ... */
 /* Page is broken? */
 #define _PGC_broken       PG_shift(7)
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:19:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:19:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156311.288482 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmM-0003Hv-W8; Thu, 15 Jul 2021 05:19:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156311.288482; Thu, 15 Jul 2021 05:19:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmM-0003He-SP; Thu, 15 Jul 2021 05:19:22 +0000
Received: by outflank-mailman (input) for mailman id 156311;
 Thu, 15 Jul 2021 05:19:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tmL-00009P-9c
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:19:21 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe1e::60c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 36fbf5ad-7c34-4f0d-a611-02f641bdabed;
 Thu, 15 Jul 2021 05:18:59 +0000 (UTC)
Received: from PR1P264CA0008.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19e::13)
 by AM0PR08MB3523.eurprd08.prod.outlook.com (2603:10a6:208:dd::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 05:18:56 +0000
Received: from VE1EUR03FT049.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:102:19e:cafe::28) by PR1P264CA0008.outlook.office365.com
 (2603:10a6:102:19e::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:56 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT049.mail.protection.outlook.com (10.152.19.216) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:56 +0000
Received: ("Tessian outbound 664b93226e0b:v99");
 Thu, 15 Jul 2021 05:18:55 +0000
Received: from 2ed5fc456fa3.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 625275A4-F104-4D74-8FED-976801E8D943.1; 
 Thu, 15 Jul 2021 05:18:49 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2ed5fc456fa3.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:49 +0000
Received: from DB9PR02CA0016.eurprd02.prod.outlook.com (2603:10a6:10:1d9::21)
 by AM5PR0801MB1972.eurprd08.prod.outlook.com (2603:10a6:203:4b::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 05:18:45 +0000
Received: from DB5EUR03FT051.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:1d9:cafe::31) by DB9PR02CA0016.outlook.office365.com
 (2603:10a6:10:1d9::21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:45 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT051.mail.protection.outlook.com (10.152.21.19) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:45 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:44 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 36fbf5ad-7c34-4f0d-a611-02f641bdabed
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Zi+y5UgZCqyilrjAU2VTEHJyZTzOIipfdYPe5SW9Q2o=;
 b=zimSjpmNwalGChGa5H7BKuaMHCay1S0NHFZ0QYx6359sG2vOEJFMMHpgULTcFaMILnWNGQMp2K39Rlz5pivwPGIGT3bcuUwKhTxy7iNy8qcVtwiCRq1sV4WeYclPGpuEbMTpYcyXcoxCxKZHG9ICLluFC8OdlXcYDp2YChh0cQU=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: acccea191def6458
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ScXa3iYXOxg0hGaKjq6m38yeKLEmzxFPPr3ONaT9sDNhKM4hQHmLJk9P49h9RhMjalobWDh1vusY7vPljpwQ3KkXlvWc8x4eq6b/ouOLe1xOcyj5rx3Y7LIQmfZrUqv6+5plkv9IPLEsMjvewOBVFYT//botu3K0V/CHTWYC+eCr2aRRxz4rUxXPck+uRKAJsXYR9zvdz3qTMlNNz2BPuO3K2OuG0RXDtY7wQH6NN5UDg1nziNUtAlJG9mw4izzlN0YjTypwn1KE0MhWzHYsEj277caONOUDEsaDHHKJWvHW1XxVRAPRGAfrFYKoiLh5RhGdoL2ZvjxCQqtC04YHAw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Zi+y5UgZCqyilrjAU2VTEHJyZTzOIipfdYPe5SW9Q2o=;
 b=oBL/fCg7aIrkznfHMkso/kuwp27g6bkbk8dA5JE3rLJvmstY4pm8WwpjquWCzGAMrOAcv3G6bpQMfWpCau46+tCDlKrDycExRuDVq7UY3BIqEvgy1m4ufJoEoa55lm4g1zlPxgcyDXWySu9KyymtPrlY7SJNeBXVEpiSM9Mc8TVUOHW9r8u28FWbkDzHRusdDoicdp0DDa0tVfQCENbWLXZhRYfT3KUvpz4jRhHvI2xAE6UAqHpWjCtJLkooTQm+j9zSeKhzaxlCNwYvCTupd+k4sAN/v+1mqgZ9Ke/Mtsup/hWwj86V+u+6y2FWabMDOhOMOS0E6b3ebAap7fzYZw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Zi+y5UgZCqyilrjAU2VTEHJyZTzOIipfdYPe5SW9Q2o=;
 b=zimSjpmNwalGChGa5H7BKuaMHCay1S0NHFZ0QYx6359sG2vOEJFMMHpgULTcFaMILnWNGQMp2K39Rlz5pivwPGIGT3bcuUwKhTxy7iNy8qcVtwiCRq1sV4WeYclPGpuEbMTpYcyXcoxCxKZHG9ICLluFC8OdlXcYDp2YChh0cQU=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 07/10] xen: re-define assign_pages and introduce assign_page
Date: Thu, 15 Jul 2021 05:18:16 +0000
Message-ID: <20210715051819.3073628-8-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b727ed82-b5cf-4ddc-0ade-08d947500b78
X-MS-TrafficTypeDiagnostic: AM5PR0801MB1972:|AM0PR08MB3523:
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB35237665268CC52F219383F9F7129@AM0PR08MB3523.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 zZEAnNfMirG7xdA4DadQDMICrn+KBLatN2FvBpPrmjp5LepS4FB2VkyqzxGpNJlQnd8f1piGDtUQSId7qpFYrEnAmRthHNPY9SiYOeyvtIT7NIP3uN/TpKHFJf0pbTq3ZAU6O7Z8wj63a9BxXUCAESv42MbWH1zeWFDNy72KC4j7QX8KzFEGJfMEv1mvM/wKF4sr4DO1lubk965ON1pUJ/NbckJewQUWXRLoWXIZun2n6U8Fck0OhFj1zAQO5aWRJWkKGfH8Z3Wughxb9WZGJoguTz5vT37fGDuiBfRO2vXffJ6iM/Q0XjkwkiVBKmyiceGa0xm53eT61kmxDFRTJHt8zKXf/xX5oZBDLxnI6GAUHnK+GIy3fMSMUZV4gA2O5VOemZ+QG5qcbCnBUgN0KrnSMy827F3oUhQfbfIeph2rZw9kgTLJAkmwJxgaJ/A2eQ+Jmm8DEELkD/u1f8vyPJMoxgx/wRVkF/q7PGYxpB5fp4p37JgacVFJze6B+nSmcPmN/Q7iL0mHrI84GU24f/x3WjvyNHp2Tq8G+Tw3AqBYCIHBaJgX3Oijr5IKnlB21iRFAPLvpf1yomcgJE3udwrn9oeRNPw8QjWp/4yCTBGnjM+DTMMrHsZ9q8lwhg89ptT3K0NXIvxr+vuc/XhEVoXuZVcj3Ps4ctKCbJ06a+6X93h+R3UIeDyZSSOPF030ABX3+fqlh4LKzRcXexc2d8voT1jpemtbj8DNl4d/CRU=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(346002)(396003)(39850400004)(136003)(376002)(46966006)(36840700001)(47076005)(2616005)(82740400003)(5660300002)(54906003)(82310400003)(2906002)(83380400001)(36756003)(70586007)(478600001)(7696005)(70206006)(36860700001)(86362001)(336012)(186003)(6666004)(8936002)(110136005)(44832011)(316002)(1076003)(81166007)(26005)(4326008)(8676002)(426003)(356005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1972
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT049.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	95eae9fe-66d5-4e4f-d45b-08d9475004ec
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	nk5XIr/UKudfI42foSjJ2rNTRwhmPkR/+0gqtjbwg7QILbNblvca2OcvI/FrlR6eCPRhmLePUyUU0es9G9OPePHYVrQh0PAa5GVESZ7vZ4P7wTPQrBLjC628Tz2azp3BMdJqKDdztQJS/8456aW8P22dQwJbuo7LNqI4DUDUUFfFIVErOMzw3JdA06uANpWYjeOR5cCXpoHs7QKZVBYN5vo3dkxs4NDRLTxtSppAm4EB0TELYe5s//OB4CF7d/qkbaUMs6kwFA/vZ/rYluMLA1WXk82KiSqLykEnOdAp5X0iG5BR7qZttBhlIZZWiIZea4ZlaNFIUJhR/d4C/yRV+vsMW3JqMpHzqRUiGfkeXBcH/gFpQGllKOiQXykQwCAfXZTsroJsQKH9DI8xQvmXMo2bnnZ55TcIlByNhe4g5CHjmUkViO+DJoKOCYA17jSkiMDlWZzFAhWC63GFUDujF3AznPCMjGk6VgwHa4dkqGj6EECDapj7VASKHSdvxgH79mlKCsj4Q5/p2SqnlrjT/BoEd3HQKyJmMrqqtea3T5biP9qEuUbhkYDhINw12RGlRT9WONBlChPNTQxlLKqAm58GtXAbTKBcCohIPLiCRAY/4p/3bhaKbFSEUcfS7lgWf/HmgO4m79IzMzFMDKfwCuKUrMX10ER9kQd+Um3bJ40ucG85TpM5KzPb3fm8C1qO5RayyKMiv58820MekyyiAA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(396003)(376002)(39850400004)(36840700001)(46966006)(2616005)(82740400003)(2906002)(26005)(316002)(8676002)(82310400003)(8936002)(336012)(110136005)(47076005)(426003)(44832011)(36860700001)(6666004)(70206006)(70586007)(4326008)(186003)(1076003)(86362001)(54906003)(478600001)(7696005)(83380400001)(81166007)(5660300002)(36756003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:18:56.3728
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: b727ed82-b5cf-4ddc-0ade-08d947500b78
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT049.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3523

In order to deal with the trouble of count-to-order conversion when page number
is not in a power-of-two, this commit re-define assign_pages for nr pages and
assign_page for original page with a single order.

Backporting confusion could be helped by altering the order of assign_pages
parameters, such that the compiler would point out that adjustments at call
sites are needed.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 change:
- rename assign_pages_nr to assign_pages
- alter the order of assign_pages parameters
---
 xen/arch/x86/pv/dom0_build.c |  2 +-
 xen/common/grant_table.c     |  2 +-
 xen/common/memory.c          |  4 ++--
 xen/common/page_alloc.c      | 21 +++++++++++++--------
 xen/include/xen/mm.h         |  6 ++++++
 5 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c
index af47615b22..476f8a2012 100644
--- a/xen/arch/x86/pv/dom0_build.c
+++ b/xen/arch/x86/pv/dom0_build.c
@@ -556,7 +556,7 @@ int __init dom0_construct_pv(struct domain *d,
         else
         {
             while ( count-- )
-                if ( assign_pages(d, mfn_to_page(_mfn(mfn++)), 0, 0) )
+                if ( assign_page(d, mfn_to_page(_mfn(mfn++)), 0, 0) )
                     BUG();
         }
         initrd->mod_end = 0;
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index fab77ab9cc..10b23f7e09 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -2342,7 +2342,7 @@ gnttab_transfer(
          * is respected and speculative execution is blocked accordingly
          */
         if ( unlikely(!evaluate_nospec(okay)) ||
-            unlikely(assign_pages(e, page, 0, MEMF_no_refcount)) )
+            unlikely(assign_page(e, page, 0, MEMF_no_refcount)) )
         {
             bool drop_dom_ref;
 
diff --git a/xen/common/memory.c b/xen/common/memory.c
index e07bd9a5ea..8c7c9c8fe4 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -728,7 +728,7 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
         /* Assign each output page to the domain. */
         for ( j = 0; (page = page_list_remove_head(&out_chunk_list)); ++j )
         {
-            if ( assign_pages(d, page, exch.out.extent_order,
+            if ( assign_page(d, page, exch.out.extent_order,
                               MEMF_no_refcount) )
             {
                 unsigned long dec_count;
@@ -797,7 +797,7 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
      * cleared PGC_allocated.
      */
     while ( (page = page_list_remove_head(&in_chunk_list)) )
-        if ( assign_pages(d, page, 0, MEMF_no_refcount) )
+        if ( assign_page(d, page, 0, MEMF_no_refcount) )
         {
             BUG_ON(!d->is_dying);
             free_domheap_page(page);
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 15edaca227..3414873679 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -2283,8 +2283,8 @@ void init_domheap_pages(paddr_t ps, paddr_t pe)
 
 int assign_pages(
     struct domain *d,
+    unsigned long nr,
     struct page_info *pg,
-    unsigned int order,
     unsigned int memflags)
 {
     int rc = 0;
@@ -2304,7 +2304,7 @@ int assign_pages(
     {
         unsigned int extra_pages = 0;
 
-        for ( i = 0; i < (1ul << order); i++ )
+        for ( i = 0; i < nr; i++ )
         {
             ASSERT(!(pg[i].count_info & ~PGC_extra));
             if ( pg[i].count_info & PGC_extra )
@@ -2313,18 +2313,18 @@ int assign_pages(
 
         ASSERT(!extra_pages ||
                ((memflags & MEMF_no_refcount) &&
-                extra_pages == 1u << order));
+                extra_pages == nr));
     }
 #endif
 
     if ( pg[0].count_info & PGC_extra )
     {
-        d->extra_pages += 1u << order;
+        d->extra_pages += nr;
         memflags &= ~MEMF_no_refcount;
     }
     else if ( !(memflags & MEMF_no_refcount) )
     {
-        unsigned int tot_pages = domain_tot_pages(d) + (1 << order);
+        unsigned int tot_pages = domain_tot_pages(d) + nr;
 
         if ( unlikely(tot_pages > d->max_pages) )
         {
@@ -2336,10 +2336,10 @@ int assign_pages(
     }
 
     if ( !(memflags & MEMF_no_refcount) &&
-         unlikely(domain_adjust_tot_pages(d, 1 << order) == (1 << order)) )
+         unlikely(domain_adjust_tot_pages(d, nr) == nr) )
         get_knownalive_domain(d);
 
-    for ( i = 0; i < (1 << order); i++ )
+    for ( i = 0; i < nr; i++ )
     {
         ASSERT(page_get_owner(&pg[i]) == NULL);
         page_set_owner(&pg[i], d);
@@ -2354,6 +2354,11 @@ int assign_pages(
     return rc;
 }
 
+int assign_page(struct domain *d, struct page_info *pg, unsigned int order,
+                unsigned int memflags)
+{
+    return assign_pages(d, (1UL << order), pg, memflags);
+}
 
 struct page_info *alloc_domheap_pages(
     struct domain *d, unsigned int order, unsigned int memflags)
@@ -2396,7 +2401,7 @@ struct page_info *alloc_domheap_pages(
                 pg[i].count_info = PGC_extra;
             }
         }
-        if ( assign_pages(d, pg, order, memflags) )
+        if ( assign_page(d, pg, order, memflags) )
         {
             free_heap_pages(pg, order, memflags & MEMF_no_scrub);
             return NULL;
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 8e8fb5a615..65ba1587ad 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -132,6 +132,12 @@ int query_page_offline(mfn_t mfn, uint32_t *status);
 void heap_init_late(void);
 
 int assign_pages(
+    struct domain *d,
+    unsigned long nr,
+    struct page_info *pg,
+    unsigned int memflags);
+
+int assign_page(
     struct domain *d,
     struct page_info *pg,
     unsigned int order,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:19:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:19:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156313.288493 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmP-0003cz-DH; Thu, 15 Jul 2021 05:19:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156313.288493; Thu, 15 Jul 2021 05:19:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmP-0003ci-8U; Thu, 15 Jul 2021 05:19:25 +0000
Received: by outflank-mailman (input) for mailman id 156313;
 Thu, 15 Jul 2021 05:19:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tmN-0000d1-8t
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:19:23 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.41]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2d671e94-e52c-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 05:19:07 +0000 (UTC)
Received: from AM6P191CA0077.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8a::18)
 by AS8PR08MB6993.eurprd08.prod.outlook.com (2603:10a6:20b:34a::17) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 05:19:05 +0000
Received: from AM5EUR03FT064.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:8a:cafe::97) by AM6P191CA0077.outlook.office365.com
 (2603:10a6:209:8a::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:19:05 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT064.mail.protection.outlook.com (10.152.17.53) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:19:03 +0000
Received: ("Tessian outbound 57330d0f8f60:v99");
 Thu, 15 Jul 2021 05:19:03 +0000
Received: from 19c93b6d551f.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 6BF246E8-9EBA-44D6-8493-4913E318A1C7.1; 
 Thu, 15 Jul 2021 05:18:57 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 19c93b6d551f.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:57 +0000
Received: from DU2PR04CA0026.eurprd04.prod.outlook.com (2603:10a6:10:3b::31)
 by DB7PR08MB3004.eurprd08.prod.outlook.com (2603:10a6:5:1c::30) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.24; Thu, 15 Jul
 2021 05:18:54 +0000
Received: from DB5EUR03FT058.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:3b:cafe::47) by DU2PR04CA0026.outlook.office365.com
 (2603:10a6:10:3b::31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:54 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT058.mail.protection.outlook.com (10.152.20.255) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:54 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:53 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2d671e94-e52c-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=BrIS0ljVOjpyPmWzYJmYIt9oJx/MQiYDNEJHUoVAXFo=;
 b=zmss8hqp5IJYu0gMTpRawntCFAVuN8+R8YC/2Ed0gHj9566zQCYdL7k5xJCrs5yuehoPV/7WpOqTZKoiToHgzUi2UJIisAOJZMrNJzUiL4AN1Aph03xhOIM6yHV6ctt1Vh5P9UOGbGID8CkvWPCBCimNV47rQeW/k7mOpLyIrjs=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: e9756453b971cd8c
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=l38+/XmSn/wzO6ZBgbOLRYUdIKkpwN/p5GinDDJlfXS/immnfkfMWeoJyGfoBVQrDm2MeNE+x+bBEHAL7dfxC4FO+fc8IaF2jwt46eGmz11L6bEjNiljPdgmF4iSosEHOEGWnOyQSsRSsZDQWsqSukrmbDn9/oeyKEpPEp4VqTjTzobnjdHaAnIgwLs2Q9m00SPd8mj1do77sCBm8ncebIvIiyLjiHDB1RYD8IbxSjPvSL6KFlf06u8cAJPlJF+7/9es9RYPyo5BiPTL/+gl8BQFC7rn8cmOBD76rMdAYYQBUEEN79bUuSLrYUqg0n8s+kift/cW+/ei0tRtpVuibA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=BrIS0ljVOjpyPmWzYJmYIt9oJx/MQiYDNEJHUoVAXFo=;
 b=Z/6wK5CsdKlvyEr2fbyHvpWbrJRxXl/QPMfDhZYz8quAxZ2undWaKp9hKA5erkAIG3+jWYcN1iLAxHziaCQwLj6hLbjy7HtiMPUsYv5p9F/OoXR6ugg8leMXpzEAdUwuAIoEN+X0usPp/c00o6UoKwauB4gc2gdUnmO61DiwyoQ+Sd6NLwpNv/COasWuulZcqFzSVjrUODmY5psxQtQzzu+yJkY8SyJQNg5hU1azq23Nu/sGItud85LUQj6k4T9V5MWeOlTFPWUhx0nQgyBSWpZKFAPCKAagW9szHE7476oVOs2oru0V6KjhRhhhRYOQ2422uQz03P5R70hgXmgF9w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=BrIS0ljVOjpyPmWzYJmYIt9oJx/MQiYDNEJHUoVAXFo=;
 b=zmss8hqp5IJYu0gMTpRawntCFAVuN8+R8YC/2Ed0gHj9566zQCYdL7k5xJCrs5yuehoPV/7WpOqTZKoiToHgzUi2UJIisAOJZMrNJzUiL4AN1Aph03xhOIM6yHV6ctt1Vh5P9UOGbGID8CkvWPCBCimNV47rQeW/k7mOpLyIrjs=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
Date: Thu, 15 Jul 2021 05:18:19 +0000
Message-ID: <20210715051819.3073628-11-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4ef8a027-b617-474e-c389-08d947500fc9
X-MS-TrafficTypeDiagnostic: DB7PR08MB3004:|AS8PR08MB6993:
X-Microsoft-Antispam-PRVS:
	<AS8PR08MB6993D116A071FCBA2422FAD3F7129@AS8PR08MB6993.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 LJpQTZ/jBUl/ES2zt6QEDxm0DwFNOuKS8lmnasg6Bl0wanvFHnZ1JvIua/PgL9OjyvPjfGQ8SKI6JnhxTGktjvazT8npqC3mWIAD1AC+xR0E9bH1Sdpbw6PsfmGbSS5Ezhp2X6AsqeiNgQb7xWytRrWmqpScqXO7fZgRgBkorL7LvGDfpeaDDWaeXDJA5d1g6bJkp3MlXJBtVkJd+tiln1IwRFYIWUca1xmeNr6uGc7dAmKYYiTTl557NsM+odgetlCaH/DNkTKZ3hR3I3tuAAiSXucqsIF/GhPrWnYMyTYqGtN/E5Kgb1iCRq9/f1WvtjlMtNkVkuChyKd0z225tTjnPA3iDC8LNFG6Ofejrb408CEnkZ3WTP7rxJL/e08M06opZI63RayIwKx8jKCCSaagTZorI16be9YDs0ExYisZeNrl9UEm4i8hKA8mPekIDwVuTqx7pLwrL6SeM0Zzo4SYa67guzNvmKiFNhOWP/5mJjgEsEypKbXAwN48eSmi2AMrdXZSKwLrkjuM0yD/6mzq+GtlnhntU+95unKtBS3QTHmsNxecUM9Kb2FC8luU3ZFIdl/bkK0cER13HV6oWNxb+vkjuF05PVTT+A3DkyL7uyCjGnuoSF9rMuiT4GPf3WBBz2vy8Jw6zdaAXsVR0NF2JksUixA7/TzJp8ptI+ajbKd+JdGxM0W1U9ze7lL6MrXW8u+L+orXPLElwXfukfayHU/8W957L0+A9uTBNC8=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(39850400004)(346002)(136003)(376002)(46966006)(36840700001)(186003)(54906003)(8676002)(1076003)(7696005)(478600001)(336012)(70206006)(47076005)(70586007)(356005)(36860700001)(36756003)(26005)(81166007)(82740400003)(5660300002)(44832011)(8936002)(6666004)(86362001)(110136005)(426003)(83380400001)(4326008)(82310400003)(2906002)(316002)(2616005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3004
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT064.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	b4ed1b81-d0c2-4aba-0383-08d947500a60
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	vEGtfY6nlEQGn8sxf2PmMlltnr81GVz7VhKn3LXs+D9AmwkTyxXIkMzQDjNEfMquWalEgFcVEjQIQKzaz1FBpZtJvsUPXe+mhkPhL6/5yAPEfo7yF1GHOmRQQD0wYdUyfjo0iKPheHslYXGOpvFRsnfShQSSinbOyMEnvAXnjliK4vPAucbNcyPacGfsu3Lv1d8c3IPEl1oGmfkuvWW3mBIF7+pyDmkCKd4bKN81ZMb7e8inunDxkXFHjKwMdhBE+DzbJWjmneKpcETVL0sVWOXlw6dbdXLMiwfRIpjBktzgoxxnJbWKVwE2tmSRy5JpFoEoPzmnEtkgmtRzarrY+mWNGKpOHhAWI1gMaAUM1nCB8gbu3f+KP/2YE78jonTq8D2jhAjJb4kLDsMv+B9C88Mdh4YxqsSqO652nag34UgJVUrwD9gGcl4KtlkKR9Ol2YuIIUgDPc0vXT6IrObhhWorDWM1+iSvKw+s1PLi1zs614S6I6b6tslMX3rurpaau+BPzhRirZv+X//8Jz75Huw0SIsvxc+qtmuKF4xb+hLESphEP+4vWB08w5+Yk1SKoviTSCK015+4WVYgVrXOn2Uv+o+awksX5VjqacWEqzo8jeGIqQz55/Y/UhxXd1B2GuhBFsPdiRgeXqpMZayVVB6kvu3wo6bz5pKsJPom6IxLelHcot0qXovndtKDQNlcj7OwFll1/KYeXVQ1TKyTFj68Cfdws6V6NeO2dISnDnE=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ErrorRetry;CAT:NONE;SFS:(4636009)(396003)(376002)(136003)(39850400004)(346002)(36840700001)(46966006)(81166007)(36860700001)(86362001)(478600001)(8936002)(36756003)(83380400001)(47076005)(82310400003)(82740400003)(316002)(2906002)(110136005)(6666004)(2616005)(1076003)(426003)(4326008)(26005)(5660300002)(186003)(44832011)(54906003)(7696005)(70586007)(8676002)(70206006)(336012)(36900700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:19:03.6892
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 4ef8a027-b617-474e-c389-08d947500fc9
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT064.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6993

This commit introduces allocate_static_memory to allocate static memory as
guest RAM for Domain on Static Allocation.

It uses acquire_domstatic_pages to acquire pre-configured static memory
for this domain, and uses guest_physmap_add_page to set up P2M table.
These pre-defined static memory banks shall be firstly mapped to the
fixed guest RAM address `GUEST_RAM0_BASE`. And until it exhausts the
`GUEST_RAM0_SIZE`, it will seek to `GUEST_RAM1_BASE`, and so on.
`GUEST_RAM0` may take up several pre-defined physical RAM regions.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 changes:
- parse "xen,static-mem" in way of phandle back to property.
- use unsigned int for index
- rename allocate_static_bank_memory to append_static_memory_to_bank
- infer the next GFN from the bank information
- simplify the code in double loop.
---
 xen/arch/arm/domain_build.c | 137 +++++++++++++++++++++++++++++++++++-
 1 file changed, 135 insertions(+), 2 deletions(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index cdb16f2086..ed290ee31b 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -480,6 +480,139 @@ fail:
           (unsigned long)kinfo->unassigned_mem >> 10);
 }
 
+static bool __init append_static_memory_to_bank(struct domain *d,
+                                                struct membank *bank,
+                                                mfn_t smfn,
+                                                paddr_t size)
+{
+    int res;
+    paddr_t tot_size = size;
+    /* Infer next GFN. */
+    gfn_t sgfn = gaddr_to_gfn(bank->start + bank->size);
+
+    while ( tot_size > 0 )
+    {
+        unsigned int order = get_allocation_size(tot_size);
+
+        res = guest_physmap_add_page(d, sgfn, smfn, order);
+        if ( res )
+        {
+            dprintk(XENLOG_ERR, "Failed map pages to DOMU: %d", res);
+            return false;
+        }
+
+        smfn = mfn_add(smfn, 1UL << order);
+        tot_size -= (1UL << (PAGE_SHIFT + order));
+    }
+
+    bank->size = bank->size + size;
+    return true;
+}
+
+/* Allocate memory from static memory as RAM for one specific domain d. */
+static void __init allocate_static_memory(struct domain *d,
+                                          struct kernel_info *kinfo,
+                                          const struct dt_property *prop,
+                                          u32 addr_cells, u32 size_cells)
+{
+    unsigned int nr_banks, gbank, bank = 0;
+    const uint64_t rambase[] = GUEST_RAM_BANK_BASES;
+    const uint64_t ramsize[] = GUEST_RAM_BANK_SIZES;
+    const __be32 *cell;
+    u32 reg_cells = addr_cells + size_cells;
+    u64 tot_size = 0;
+    paddr_t pbase, psize, gsize;
+    mfn_t smfn;
+
+    /* Start with GUEST_RAM0. */
+    kinfo->mem.nr_banks = 0;
+    gbank = 0;
+    gsize = ramsize[gbank];
+    kinfo->mem.bank[gbank].start = rambase[gbank];
+
+    cell = (const __be32 *)prop->value;
+    nr_banks = (prop->length) / (reg_cells * sizeof (u32));
+    BUG_ON(nr_banks > NR_MEM_BANKS);
+
+    while ( bank < nr_banks )
+    {
+        device_tree_get_reg(&cell, addr_cells, size_cells, &pbase, &psize);
+        tot_size += psize;
+        smfn = maddr_to_mfn(pbase);
+
+        if ( !acquire_domstatic_pages(d, psize >> PAGE_SHIFT, smfn, 0) )
+        {
+            printk(XENLOG_ERR
+                    "%pd: cannot acquire static memory "
+                    "(0x%"PRIpaddr" - 0x%"PRIpaddr").\n",
+                    d, pbase, pbase + psize);
+            goto fail;
+        }
+
+        printk(XENLOG_INFO "%pd: STATIC BANK[%d] %#"PRIpaddr"-%#"PRIpaddr"\n",
+               d, bank, pbase, pbase + psize);
+
+        /*
+         * It shall be mapped to the fixed guest RAM address rambase[i],
+         * And until it exhausts the ramsize[i], it will seek to the next
+         * rambase[i+1].
+         */
+        while ( 1 )
+        {
+            /*
+             * The current physical bank is fully mapped.
+             * Handle the next physical bank.
+             */
+            if ( gsize >= psize )
+            {
+                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank[gbank],
+                                                   smfn, psize) )
+                    goto fail;
+
+                gsize = gsize - psize;
+                bank++;
+                break;
+            }
+            /*
+             * Current guest bank memory is not enough to map.
+             * Check if we have another guest bank available.
+             * gbank refers guest memory bank index.
+             */
+            else if ( (gbank + 2) > GUEST_RAM_BANKS ) {
+                printk("Exhausted the number of guest bank\n");
+                goto fail;
+            }
+            else
+            {
+                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank[gbank],
+                                                   smfn, gsize) )
+                    goto fail;
+
+                psize = psize - gsize;
+                smfn = mfn_add(smfn, gsize >> PAGE_SHIFT);
+                /* Update to the next guest bank. */
+                gbank++;
+                gsize = ramsize[gbank];
+                kinfo->mem.bank[gbank].start = rambase[gbank];
+            }
+        }
+    }
+
+    kinfo->mem.nr_banks = ++gbank;
+    kinfo->unassigned_mem -= tot_size;
+    if ( kinfo->unassigned_mem )
+        printk(XENLOG_ERR
+               "Size of \"memory\" property doesn't match up with the ones "
+               "defined in \"xen,static-mem\".\n");
+
+    return;
+
+fail:
+    panic("Failed to allocate requested static memory for domain %pd."
+          "Fix the VMs configurations.\n",
+          d);
+}
+
 static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
                                    const struct dt_device_node *node)
 {
@@ -2486,8 +2619,8 @@ static int __init construct_domU(struct domain *d,
     if ( !static_mem )
         allocate_memory(d, &kinfo);
     else
-        /* TODO: allocate_static_memory(...). */
-        BUG();
+        allocate_static_memory(d, &kinfo, static_mem_prop,
+                               static_mem_addr_cells, static_mem_size_cells);
 
     rc = prepare_dtb_domU(d, &kinfo);
     if ( rc < 0 )
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:19:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:19:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156314.288497 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmP-0003k5-Tr; Thu, 15 Jul 2021 05:19:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156314.288497; Thu, 15 Jul 2021 05:19:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tmP-0003i6-QQ; Thu, 15 Jul 2021 05:19:25 +0000
Received: by outflank-mailman (input) for mailman id 156314;
 Thu, 15 Jul 2021 05:19:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3tmO-0003be-RM; Thu, 15 Jul 2021 05:19:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3tmO-0004q9-Ik; Thu, 15 Jul 2021 05:19:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3tmO-00063c-9j; Thu, 15 Jul 2021 05:19:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3tmO-00011R-9C; Thu, 15 Jul 2021 05:19:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=WxY6fcvPvi8KQQq8Qq+mApUKiHjZCV8tv6K4RIcL2wY=; b=N+jSG0Z+mrEidWse8bAZVKvlPo
	3vrIQt9enh5Xwg7qGMlEaO9mMEAQmfyHblJT9kpnMcMf6epaWssGpv2VvLJmVWt1YICYqMlDRdzqN
	SJyxA+usK3uImP4jrQPlNccm1S+wR9ItYxTwnpbuKRhVQwFT5fv+/drnX2rszLNUmXzw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163688-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163688: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-libvirt:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit2:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-credit1:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-examine:reboot:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:regression
    linux-linus:test-armhf-armhf-xl-rtds:xen-boot:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=40226a3d96ef8ab8980f032681c8bfd46d63874e
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 05:19:24 +0000

flight 163688 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163688/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-libvirt      8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl           8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit2   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-credit1   8 xen-boot                 fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-examine      8 reboot                   fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale   8 xen-boot                 fail REGR. vs. 152332

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 linux                40226a3d96ef8ab8980f032681c8bfd46d63874e
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  348 days
Failing since        152366  2020-08-01 20:49:34 Z  347 days  594 attempts
Testing same since   163673  2021-07-14 06:27:57 Z    0 days    2 attempts

------------------------------------------------------------
6679 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          fail    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  fail    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     fail    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1966770 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 05:26:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 05:26:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156340.288518 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tsi-0007C1-U4; Thu, 15 Jul 2021 05:25:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156340.288518; Thu, 15 Jul 2021 05:25:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3tsi-0007Bn-Qv; Thu, 15 Jul 2021 05:25:56 +0000
Received: by outflank-mailman (input) for mailman id 156340;
 Thu, 15 Jul 2021 05:25:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6KMV=MH=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m3tmf-00009P-AW
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 05:19:41 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe05::61c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ffe1faf5-1cca-4805-9c45-b9cb706201bc;
 Thu, 15 Jul 2021 05:19:09 +0000 (UTC)
Received: from AM5PR0402CA0008.eurprd04.prod.outlook.com
 (2603:10a6:203:90::18) by AM6PR08MB4327.eurprd08.prod.outlook.com
 (2603:10a6:20b:ba::22) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 05:19:02 +0000
Received: from AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:90:cafe::db) by AM5PR0402CA0008.outlook.office365.com
 (2603:10a6:203:90::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:19:02 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT023.mail.protection.outlook.com (10.152.16.169) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:19:02 +0000
Received: ("Tessian outbound 809237f40a36:v99");
 Thu, 15 Jul 2021 05:19:01 +0000
Received: from e52574fcc35f.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 CA43D9D2-B9F0-4653-8DFD-6424E9771655.1; 
 Thu, 15 Jul 2021 05:18:56 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e52574fcc35f.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 05:18:56 +0000
Received: from DBBPR09CA0037.eurprd09.prod.outlook.com (2603:10a6:10:d4::25)
 by PR3PR08MB5658.eurprd08.prod.outlook.com (2603:10a6:102:88::22) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 05:18:52 +0000
Received: from DB5EUR03FT059.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:d4:cafe::7f) by DBBPR09CA0037.outlook.office365.com
 (2603:10a6:10:d4::25) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:51 +0000
Received: from nebula.arm.com (40.67.248.234) by
 DB5EUR03FT059.mail.protection.outlook.com (10.152.21.175) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 05:18:51 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 15 Jul
 2021 05:18:50 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Thu, 15 Jul 2021 05:18:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ffe1faf5-1cca-4805-9c45-b9cb706201bc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CK13WEPiykjxkYvQEtnQO6uMs6AHKoPn7GF3CJWftbA=;
 b=a5MDWfeo1AQLWgPNoES02n1nb0AJaAyLL7vJ1RR9R+kFUwysSoKogjew+yX4yHDBq/uYZa8eOkrX/Uf/FpJsIuAMvwI7M8l0NAoXG5n8yzZdq/MPSu34tcJb8KJ1xGXu14RRWY09gvkpjrh1DzPDPF2YDce6wxhqep13rRN/gig=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: bb76193209225271
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fC7Uma5fVRKFWms6CLHOyyzsl9IqiGSwEJ4+7Qf5zK8pzxy+g/2oX4YAPmpKgffaGt7sdwBvTMjU4zDhLnvbS6xcjKClr89e6VCFWEea2Dt3BAMVHKJfhgd1In84qJ9fs+Pq/eqJbCQCvorpE5Qzm9YzbjwdyGAx9pL07akwDCrH6wG/Mr8U2JxTeUWc1Lbc2E1sTRft4hERRld69QsoRbz+5KFJX3UpQLqgaFnlVwm1+V32kHE1N1Qf6IwkYnA2ylFAfVGKBQfuelLMgtENTXWvyHQqIsxSocsI1kHQV5792M3v4lFFuqChPvX2PepSwgnCrEo/kat8DlGo5vi1Qg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CK13WEPiykjxkYvQEtnQO6uMs6AHKoPn7GF3CJWftbA=;
 b=F5z5Yth8ptdOpTv7sslxFhTvTiMkIKRZiF5Bab1W1TONYosMLrE2EOj9POHfYjLp0IhyaSca9Uv3bEV4s6znH2CGDAYJGytPnDHQSwzolU9UtUd2dRgP7MICUmQy4N2BDcIgqWBfyrN+O06uQl9ZLPgZcqhEddKKdD08h966KNA3w+Shk+62a43pWk0dZAUCK/k6fIcG7zAzqLXCLnpvv6nG0n/2a8vS4tnM/6WH65Hy6FxCUJ1egggkjrCo++1kYy0O1bI53nCvFVTZ2Ru9Jn/fthMe8oK5fyH03I31nsCTnY/3YJ8LQxf4nZ6mv9cgV6cA8o3hpM/wcLWAHtXvEQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CK13WEPiykjxkYvQEtnQO6uMs6AHKoPn7GF3CJWftbA=;
 b=a5MDWfeo1AQLWgPNoES02n1nb0AJaAyLL7vJ1RR9R+kFUwysSoKogjew+yX4yHDBq/uYZa8eOkrX/Uf/FpJsIuAMvwI7M8l0NAoXG5n8yzZdq/MPSu34tcJb8KJ1xGXu14RRWY09gvkpjrh1DzPDPF2YDce6wxhqep13rRN/gig=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<jbeulich@suse.com>, <nd@arm.com>
Subject: [PATCH V3 09/10] xen/arm: check "xen,static-mem" property during domain construction
Date: Thu, 15 Jul 2021 05:18:18 +0000
Message-ID: <20210715051819.3073628-10-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210715051819.3073628-1-penny.zheng@arm.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0a62aa47-bdd0-42b4-da9a-08d947500f0e
X-MS-TrafficTypeDiagnostic: PR3PR08MB5658:|AM6PR08MB4327:
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB4327FB45FCC70C6E703093DCF7129@AM6PR08MB4327.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:2089;OLM:2089;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 8riS5oYdvVi8mp5n6I7k+m6n0i7pshd6QcHS54ufR/OEnUTQUDj4Y/NCbmMQqecGlU48YY83tAj4JsD38opiLo1w/J7xqt5Hq8qek1ZzwcxKz6IbU9AESUV2YE48WxpXzO4ewvzY+z0MKLTxGmtQPoPbpKXmKWASL2ho9QIUjzAxkPno/qu3+rTZSxOf2CGIUA3r/QQKnM8kdrc2pzFR8vCGAQfUOo+fP/nwOGCxmVQRI6hD0uZQ/C3A96WgrcenaXwsYjcFQNNEPRHBfkwP43nDFgyfpog+0qI6JsyBGzu4VFXLh6Eh5ilX9fddlTQLltnEcxk07R15Hbi8jkxr7ZmLg3CLvXcjs6+IvaSmybCPZq4iSzjNddd0JZBWPWC5S8M7Nbd2pF3HRy8QfXZi7i2zjfKGqOtl+326F3nwF9clu7fx7iIpXN+M7ux+6I/D8ImGm+xj3HM8oJ2aRweJ1ZHZwerxD4m/yv2xGfi/A0QW7OH7sQLvO5zVRsnf9wChiLjFt88QgO9T5E8hwU+yao5qU9yl961L2YaA+rCjeC99I22EycdCMD14gMWHltgMRZ4mcyQdfrwaJlE1HTO1jLbofdT1rTbBY1QBqCywcwbWfvVJCCkA5O5LXjmsMchA5PagYxR8ib+SxJ21V342gFNSwcb6xWdAYE3DW4P4Jv0LOudixCUnSKmK0IIrjL6BFW7ebMZHxMr8khS4NXy1fXylWVcTDWzwDg+wbTRDJkc=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(39850400004)(376002)(136003)(346002)(36840700001)(46966006)(6666004)(54906003)(8676002)(316002)(81166007)(83380400001)(426003)(336012)(86362001)(110136005)(4326008)(356005)(8936002)(82740400003)(26005)(7696005)(186003)(70206006)(82310400003)(2616005)(478600001)(5660300002)(47076005)(2906002)(36860700001)(44832011)(1076003)(70586007)(36756003)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5658
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	9b187076-24ba-47f9-06ff-08d9475008a5
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	VTSLaOTEGLRptKXgi4lKzwswGZoHzG2Be9Weh/+rO/vkMqLqrXXWBH88mxEiIkP2au2C28OYch6qv/OiRpV04B9p0FBZIqNriEuyIbkUBZvxDwoja3lvW2Evb3vlWRendWLbpW71IIgApvWS3CjEbQyc7YbkW+U7kxIE0YUz7c9lvML9BNH45kL6PEEaEnEWf0pkD6vsOgbQLgyzO4EF6S3gM1Gx53EorZNWnkIX7mZoULQN/BR57yBrXnLzEQhwcediUyS/FwHner/it/oHJOFsxz3aPvfzhq30X6g7GEV/qabZjOzD72hMlld2CfZqgKyPWENihjdNYY/DJgoes737NZ57+CTCQj/g8eD3M6kTr+RW+FHGezBMeKbXkYWN7EE+sxCxMgGAFsV3HffRvVrEwXIJDQJJu1vdw28GUoFn6CcFDJFicvoVD/iKQvcheuzJ/ttjmCW8IMqGOpGejafO/H8LTCY55a8zerZMiBr8/rCtxZXokmEP0kP56WAdYdqQk7UijaXO0NoOWyprMaVfgtpf5+V6oAzMpap2kq1eMskqdmcQfYO9ZEKX/lI9rtXntd/rgpDbrvIVvUlxE7Lxndx6RKAgi4dlsBSqdssstxVJY5ckg+CU1ktcBSmDe+lf/9RbNqSeyjU/tyE6y+C+SlDrS1y+/MVezj+fLGovEulyp0SOg7ADSzxrzdM+Mjf7W6ZhJpNxutZJWgxvQg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(376002)(346002)(396003)(136003)(46966006)(36840700001)(82310400003)(7696005)(70206006)(110136005)(36756003)(8676002)(2616005)(316002)(4326008)(426003)(336012)(8936002)(5660300002)(83380400001)(86362001)(2906002)(44832011)(47076005)(1076003)(82740400003)(54906003)(70586007)(36860700001)(478600001)(26005)(6666004)(186003)(81166007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 05:19:02.4703
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 0a62aa47-bdd0-42b4-da9a-08d947500f0e
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4327

This commit checks "xen,static-mem" device tree property in /domUx node,
to determine whether domain is on Static Allocation, when constructing
domain during boot-up.

Right now, the implementation of allocate_static_memory is missing, and
will be introduced later. It just BUG() out at the moment.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v3 change:
- parse "xen,static-mem" in way of phandle back to property
- The return for dt_property_read_u32() shall be checked.
- "memory" property shall be mandatory
---
 xen/arch/arm/domain_build.c | 37 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 6c86d52781..cdb16f2086 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -2425,6 +2425,37 @@ static int __init construct_domU(struct domain *d,
     struct kernel_info kinfo = {};
     int rc;
     u64 mem;
+    const struct dt_property *static_mem_prop;
+    u32 static_mem_addr_cells, static_mem_size_cells;
+    bool static_mem = false;
+
+    /*
+     * Guest RAM could be static memory which will be specified through
+     * "xen,static-mem" property.
+     */
+    static_mem_prop = dt_find_property(node, "xen,static-mem", NULL);
+    if ( static_mem_prop )
+    {
+        static_mem = true;
+
+        if ( !dt_property_read_u32(node, "#xen,static-mem-address-cells",
+                                   &static_mem_addr_cells) )
+        {
+            printk("Error building DomU: cannot read "
+                   "\"#xen,static-mem-address-cells\" property\n");
+            return -EINVAL;
+        }
+
+        if ( !dt_property_read_u32(node, "#xen,static-mem-size-cells",
+                                   &static_mem_size_cells) )
+        {
+            printk("Error building DomU: cannot read "
+                   "\"#xen,static-mem-size-cells\" property\n");
+            return -EINVAL;
+        }
+
+        BUG_ON(static_mem_size_cells > 2 || static_mem_addr_cells > 2);
+    }
 
     rc = dt_property_read_u64(node, "memory", &mem);
     if ( !rc )
@@ -2452,7 +2483,11 @@ static int __init construct_domU(struct domain *d,
     /* type must be set before allocate memory */
     d->arch.type = kinfo.type;
 #endif
-    allocate_memory(d, &kinfo);
+    if ( !static_mem )
+        allocate_memory(d, &kinfo);
+    else
+        /* TODO: allocate_static_memory(...). */
+        BUG();
 
     rc = prepare_dtb_domU(d, &kinfo);
     if ( rc < 0 )
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 06:25:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 06:25:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156383.288535 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3uoV-0005hv-MN; Thu, 15 Jul 2021 06:25:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156383.288535; Thu, 15 Jul 2021 06:25:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3uoV-0005ho-Ii; Thu, 15 Jul 2021 06:25:39 +0000
Received: by outflank-mailman (input) for mailman id 156383;
 Thu, 15 Jul 2021 06:25:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3uoU-0005hi-Oc
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 06:25:38 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 16e3f634-81ec-441d-a040-23501046d133;
 Thu, 15 Jul 2021 06:25:37 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2110.outbound.protection.outlook.com [104.47.17.110])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-99FszrLNOwqS2felOY2h0g-1; Thu, 15 Jul 2021 08:25:35 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7038.eurprd04.prod.outlook.com (2603:10a6:800:12d::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul
 2021 06:25:34 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 06:25:34 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0038.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.10 via Frontend Transport; Thu, 15 Jul 2021 06:25:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 16e3f634-81ec-441d-a040-23501046d133
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626330336;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=O+xJirLfAEYwVb9Jsp6bbLi3/OFI2hsr4mfZ7XiAyxo=;
	b=KTSVlYC5xHi8hIDh/3aL1RTQ2gE0vg0sPKleIBkTjK2uCybxBemASfDym7wxiPtVWAfFax
	kfB2UOP95e9/rxjoEBBqdKoui1gtP73znpiZmeLjZFEOaBh6h9G5nuWV3O/eFCQ2d7FA7h
	MEldg/KN3uA+PpE6G2eh9xRnw1NBYwA=
X-MC-Unique: 99FszrLNOwqS2felOY2h0g-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Yl66lkmxEyEYhB2byNp+O0y6c/faVAdmcJLwDV/cs/9QxWlIviGgvn/bMd93gsLHEPsAfyyyv52d9ASIv0ss8tY9F9CROvDo/8r9TQA5UFql0/bQaRpxqBLpGiBNOa+QWDJBX9lOIY3YRh6NQATcjbG3ijoOfDZezzaQKpD8XiGp7Wpl4WRmOUVEgElWtqLOlqRhelVWLdC2yl1HHLrJAMME9jq65Pnbd9zmRYiQBk9Ahqe/oGVX299QN10zbSCs8GN7/9aM4Qs3mTDd+Gz7jHSnH+um4CMfd5nke2+qrU80ONQHPL13vfpWgWUVdbdFB2Cw2Qf8N9dRI9yI+lYVxg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Z9Mtv6ZSKdFakMelHl5mBwSqwqBhBedpI0ODq3Gc5Yk=;
 b=K5o6frgPSTw74W16RxiJCc+magXbWQks7U0/9ypwdFYUHeZ72MvZeVDfW+hmDkaAPRoIoMnnUFCgiQ71KdpZbn32taDxTTCP2LeAsKBApQGlA8QhBGHHzdbOGx2gj62phBUFE5AI+H0D8VGn7XKAlLeUWR1D+XDtA8AZB2FQIXVa6meMm6LjG0s83ZFKcDYsuvj+Hmpu4BWfblDJWy7B+oxOONayYt76t1Q08kO5A/4knIeEYOH1hZsk6zMC+PGsv4oswdtFbDODxAEIlwwVreaWi7WzMlsfuUy8FYP0bI2hLWa9qRpPH3+pQEtZzYpmrk4Ct7OyhO8CTa44/i7RkA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Anthony PERARD <anthony.perard@citrix.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210714161734.256246-1-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>
Date: Thu, 15 Jul 2021 08:25:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210714161734.256246-1-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: FR3P281CA0038.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5b43aec4-1e94-4b90-12ab-08d947595a15
X-MS-TrafficTypeDiagnostic: VI1PR04MB7038:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7038B5A341693F5ACFE7F3C9B3129@VI1PR04MB7038.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ijAPcAs02n26oGVzDCp4zzCVZ4azsWmdydcxmcqfXvfiRkk8LnRn6vwHx1OdNjuN+p6J6td1VYBUDSw3gQJ+d2sM8lM9FKiRcfRJ33ARWShAC0Ri6Li1JeqyC4GabUkvQ1F3EUNqwToGhiDPfrevr7TECG5Y/8CqJLOlpJ6cXupfWugSZKTF30/MwAS0JQv2f7j2IhGYSCHRHVtj7xZSieTmdyYMUP3ealrAQ7AaTfpbmq15KuJ5EPmTBd25s7dN8i3/PGh1akk6uJBx72CLT3TvFJNlhh74hDLCrqtibZ8Hpwwr7Y4iv0jCKIos/7J3CTuT3vXaqoLtij6P67OtMjufCuzEqCITLWkYUj12iLnDi2X5Fk/+i3A9YNUW9lQX2lNsaZarFRxs/RYZpYPOtbcsT8aYN3p+VF7Lr7scy1ucfsfRoX5i3SrZl5xHYGkEq3QtzQsDxZtbRoOWFTk5gmT/h4FjJzsxFNRJv8Y/o7NE9+BwuXlKyCs+bJXH7te5dcG7BgonVrlKbSxLyOPgas9qgtUIKYihHGCLl+BShgt2Eaz4yanyFDePh7kXxYR7BG2aqFDuLe7uIlCyUcM6YRiYTpOr1reP26ps9kg+AsrbjMGmtiiMcayrOVT+Mzl/ADS/d3MqzN2XSQ0ZNifUvQWAU+XeOVuxSelszxi6iQXWkBZkVXgWz82X61vScsKURFJLMaUHl3Wu1pHDCzam7l4yVNSpTB1OTozxZiC+V2A=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(396003)(39850400004)(346002)(376002)(66574015)(26005)(6486002)(186003)(38100700002)(31686004)(16576012)(66556008)(54906003)(4326008)(31696002)(6916009)(36756003)(5660300002)(956004)(2616005)(2906002)(86362001)(53546011)(316002)(8936002)(66476007)(66946007)(8676002)(478600001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?py2UCMhy/sCJcuOndb8xR3P+F+sDibqXu/DA8W+PnSd+o6PKCF/aZmxK8RrG?=
 =?us-ascii?Q?KSeQ8fbbWlp7hVa7tzYHV1ZKt5tABahMBecKEsxzQInZv+4nZ/RZjFsWZ6+F?=
 =?us-ascii?Q?s2uKqvH4DWfjqA3qEhSuxVYlw0GV2w82LUSvI/iD8KgUqWWUoOHctBRnlIUf?=
 =?us-ascii?Q?ss5Je2+SjQzJubvH6rdnUr9rLaaFc3B9CZJKS9Lb+Ot0uXU2Sw/P3BoTFpKL?=
 =?us-ascii?Q?UHhD8RGfwBqW90yreAn6hYsfpR2QX2aSCHKVEfOu7hNfdClnRv3Kky0b9l1e?=
 =?us-ascii?Q?CRDWyy1XhF0Y5DIAVyaekBjtvTcWAliambPuVyg+zbX7pIEa++YgsqbnzNs2?=
 =?us-ascii?Q?L9UOeYB3EaRBxLKxIVyy/Zp/qjPj0sLiqkHqwIxdvLIZlpiGmrx2EqMT340S?=
 =?us-ascii?Q?dIeDPGaxPtohkJme5TkuNxu1wVcboj1VK7VTkJdbF+VcS79EcdTCV5/qiXnO?=
 =?us-ascii?Q?epApXOPynY9W4zqCr2ODCldq4l1+/F26ZO2t1CYmcz8Eeu6HBn/8qeDzudv8?=
 =?us-ascii?Q?kN9lxJ+LUp6eq4q/842xIj/xijd82r0YJs7hzzIQWpVkYxW+BNWj83ge4ZnR?=
 =?us-ascii?Q?6ZQtEy7/hN5jdAwSqJXHdsBujX5WGeb6wb3A2hJVQ8voHaUiBiXfmbJQIwsM?=
 =?us-ascii?Q?IoEwcXbRGTxdb1zWBhc+UcaYym8Bdft846EQttZgYNGPY4qhOp+eDh5nUXB9?=
 =?us-ascii?Q?KMPh1CLK2n74VhRPyvZGOGDHhYGjWYcU/Ir6i69b0HN2pZWYTbG03Fv/1x4Y?=
 =?us-ascii?Q?UdkEUn3JHIG6u9VCNu009s/yGdHWUSp9eTYxqpmUBUq/mzgGt7nwvTdTfsNS?=
 =?us-ascii?Q?Jjjgb4uy8VRGwBu+45GWwi0SF/2aYZFfXNP8SnhDu1QZahZBlhyS8bxRZf4C?=
 =?us-ascii?Q?X8Hw52dRlyROr5ShxRCUGcyODrqzEuMKewSF64IfDi6zXpKnsYe6clOSCEdZ?=
 =?us-ascii?Q?J94t+fmoaCLvAclaQLuNOrDffDkkcFh5xv7R/ojvz9XnABaK/JMXnnOeODue?=
 =?us-ascii?Q?uoNuft2sRntxdNb3atw/TQyWtM/bL89eJWZgkTvyv81dP1sKYDJAVSz4MXXT?=
 =?us-ascii?Q?9tvNQJUNpsmIA5otNpvL/nYMVL6+xD4rmTCMK/lGVHmx858q8wJoGvh4qIeR?=
 =?us-ascii?Q?sq0Xd9sLobwmCY/OmcL2+nCzHea1eO0GOf+aA1nDR26jzli1eoBCT0mUDJDS?=
 =?us-ascii?Q?piBz8lTcQpJJlvNAtDWwVHpEPbH7BMojQg4qr1znL/HjxWRArVZnj7cFR32s?=
 =?us-ascii?Q?EQZbV+6S9R5KBP4AVxFxbUthQwkNT4Qfhy+BdZXaF1y5hgN4G7Ym2VzDkhLw?=
 =?us-ascii?Q?zdnX12860tMV0VgKj7iTuzfB?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5b43aec4-1e94-4b90-12ab-08d947595a15
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 06:25:33.9727
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: TB8VCvgjxb2OVxr+aZyamZWY7+KfY+LI9l0OW8bvRMmYf37p4KkVcC+WYlJL0YtLYMTkJt5PrX99zDzybxqqXA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7038

On 14.07.2021 18:17, Anthony PERARD wrote:
> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -25,6 +25,9 @@ config GRANT_TABLE
>  config HAS_ALTERNATIVE
>  	bool
> =20
> +config HAS_CHECKPOLICY
> +	def_bool $(success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
> +

This is no different from other aspects of "Kconfig vs tool chain
capabilities" sent out last August to start a discussion about
whether we really want such. Besides J=C3=BCrgen no-one cared to reply
iirc, which to me means no-one really cares one way or the other.
Which I didn't think was the case ... So here we are again, with
all the same questions still open.

I'm not going to nack the patch, because there's an immediate
purpose / need, but I also can't avoid commenting (and I won't
put my name on it in any positive way, i.e. also not as a
committer; if anything then to record my reservations).

Independent of this I'd like to raise the question of whether
the chosen placement is optimal. Other capability checks live
in xen/Kconfig.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 06:31:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 06:31:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156389.288546 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3utz-0007J9-Ad; Thu, 15 Jul 2021 06:31:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156389.288546; Thu, 15 Jul 2021 06:31:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3utz-0007J2-7U; Thu, 15 Jul 2021 06:31:19 +0000
Received: by outflank-mailman (input) for mailman id 156389;
 Thu, 15 Jul 2021 06:31:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3utx-0007Iw-NA
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 06:31:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 418e3c9a-e536-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 06:31:16 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2058.outbound.protection.outlook.com [104.47.0.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-24-xvAPMPRiOMKB3BwkruXsLw-1; Thu, 15 Jul 2021 08:31:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5470.eurprd04.prod.outlook.com (2603:10a6:803:d6::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.26; Thu, 15 Jul
 2021 06:31:12 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 06:31:12 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0254.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::26) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 06:31:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 418e3c9a-e536-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626330675;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=qoixR1h+jjjYyVjXZwT4A4ZYsGCEp9JYS3tWbiwBDyI=;
	b=a6HHTm7tNhO4zubojX6+hQtJPyHwkVjn6eckACKvkH20pWuKcrt2svEQLxdsZ6n2kaaRry
	17rCkcLyhcD+OstXaYqKSiSpKhDggpdaP72+ePa735exSOFQWRIJVfnh4/XeZaFS+P5Hnk
	ZciIObfsulxEXbgillt0R6d/5Ep9IFE=
X-MC-Unique: xvAPMPRiOMKB3BwkruXsLw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VTBBl/VpbV0cQCL1OZi/YM+83OwQ74rlTSyEmeqoxQqdwdOL+yOzcEDyV4UXd7GdMO/5WjVFLY0JyB5XrgxFVBrfG/dQXTA5K3ooxh1gkecqdzviCiLk/Um6hOtPm81qiY+q8hzuxAg2e+KeD1xOInKPHeP+lJbsfHV8tkU9HIdTiAe6waeESv2/L7lIHbm9k3IEDGmfSc6OOa/w93iBm7PJEOhJ74fbWTSD2pDUzeFeov99/VKYCkNUaw+A5AM5R1z6lREFuG9X4wsGYQavFdTnyoTzclazhbrRNnWmq2vg+i0gP4kefdrr87UOM0c/WkPya6qx/h54JtcAgeBAGg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qoixR1h+jjjYyVjXZwT4A4ZYsGCEp9JYS3tWbiwBDyI=;
 b=Xw6AWwXNrot6JozSd/ByePbisVNIFBFcwMsprTrh3gonF3hLuLhKbRsbTrnPzJNRiUW05wRP5Us0sRFnDVWUOLteXrdRI3yAMP6so7/jrlEg8+zR9i1K/iKv9yiwgYUydx1aMoi/OdD2QwqU73c9Vq14Nrckpdoa5bCMpedZSltAXJOfppuZViTOm1lbzyh5MXtD5NU/Pj41qn2103E5vTBuw3SOqUDzLOgTYbqrEFk3DSubunoB86TDHLOM6RwKu47pAPX+CTRM7aJQMvJyExMcm6euiOpqkjZ4Ht+N8sDf+hg4+lOLDY7N+RkYWTwoBjmOjF9x5th7i0tQEJfnFA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 1/4] arm/traps: remove debugger_trap_fatal() calls
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
 <2de1e8493e08722b5444d1293c5af299c76bf891.1626286772.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <556dbb07-4fe8-54c6-e1a7-330d9a2e8b27@suse.com>
Date: Thu, 15 Jul 2021 08:31:09 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <2de1e8493e08722b5444d1293c5af299c76bf891.1626286772.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0254.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::26)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3ea17a30-6a16-427f-c96a-08d9475a2395
X-MS-TrafficTypeDiagnostic: VI1PR04MB5470:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB54703EB27DFC55BB1011D6BFB3129@VI1PR04MB5470.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2cUGRT/H8IvT8ZBeakE9+iSFu8EJ3heYjEr2aJyZBRc96Sxt+8mbqVvqfsYN0hzwoC0jFAa7/YAWoapsF31K3wY5ttMieDoacjtJkLiWbP0I7dU5rTT8Cu/W/018HzTruxayF0DI5uWcKiivVCEdiqJO/jJ0FDU+3bqT9iC+CPgxi/HUH9bAv3g8Sa5G0eHZis+XgOs3teiQhjiaMrMrSAHXZ6UpseqQ/eeSCPOZf1LqzHjChOT4qXjQkQQ9IGprBKlW9BisZrRbbw0u7LuAVzxViTNx8rdgPMGj0O5u5cq9CdveCNuS7gr4OzAixAws+oXGFxvAts+C+WcvBPsgJvLuPltk2IiwmL5mdKrsQd59gp37MXwHamKkCOVnSRui7dBZM8ta45vGb/Yl94P0WaBr8xTj4/v7WO3hCJJIKfqBqTyZ3SL264Wmyo6aILMZL+00DOqZI9gGsUATvI/jwxOKf9LFV1eK0/AmjtM0PY2s6aX9jzAcMSFynPHY3+iPIo129vta9y3fECkV+yIoX950n9qF37Ols780/nKiiFRgQqg+dDfPvrCbymuE8ldNTilyoWQGQsqQqTOg68BHijyvIGurt38s1hCYo0MeLpOjN03AFnCwzieNLulNdLS1hmWBULiiAKSup66n3HBKxxYIxMJLC5Gww7xUPiD6y/AdkTUpGJDrrbZIXkM6eIiLZVuFohz6ZXRIWJHyljxAXt0lPoWq/Cw1l8N6nojQGLE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39850400004)(346002)(396003)(366004)(376002)(38100700002)(31686004)(4326008)(4744005)(478600001)(26005)(7416002)(36756003)(6486002)(53546011)(5660300002)(2616005)(186003)(16576012)(8936002)(54906003)(66946007)(8676002)(956004)(2906002)(6916009)(316002)(86362001)(66476007)(66556008)(31696002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3ea17a30-6a16-427f-c96a-08d9475a2395
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 06:31:12.0532
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: MCIe4GI8sHo/MH1StA6Op5PphR26vP5vxIFj2f4+8UKi/3/8gr0y3qq0X3XNXGsbNZjIPl/dvD124SEzZIg23g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5470

On 14.07.2021 22:37, Bobby Eshleman wrote:
> ARM doesn't actually use debugger_trap_* anything, and is stubbed out.
> 
> Simply remove the calls. This also renders TRAP_invalid_op unused in
> any common code, so remove that definition too.

This part of the description is now stale; I guess if no other need
arises to resubmit the committer could take care of removing this.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 06:38:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 06:38:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156395.288556 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3v12-0008Dv-2e; Thu, 15 Jul 2021 06:38:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156395.288556; Thu, 15 Jul 2021 06:38:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3v11-0008Do-Va; Thu, 15 Jul 2021 06:38:35 +0000
Received: by outflank-mailman (input) for mailman id 156395;
 Thu, 15 Jul 2021 06:38:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3v10-0008Di-Pt
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 06:38:34 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4656ec8c-e537-11eb-8891-12813bfff9fa;
 Thu, 15 Jul 2021 06:38:33 +0000 (UTC)
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2056.outbound.protection.outlook.com [104.47.6.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-29-eDhoEMmKORmp5sAHS3gpxg-2; Thu, 15 Jul 2021 08:38:31 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 06:38:30 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 06:38:30 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0215.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::35) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.23 via Frontend Transport; Thu, 15 Jul 2021 06:38:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4656ec8c-e537-11eb-8891-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626331113;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=n4jDv3GrZh+N1xcY1h2t0YTDogdYBMt0c5lboacvDeY=;
	b=COHtmdiqZQgmmSVwdho3k1o0ndkYbRsLnaiodBoJuu9BGW8PbRcIS78qRqsadtIX+uzUzJ
	0oMyxz3zu9jFpoEiFdP6EjjhWQ4G1F/XRi92wxwcgQFINc12p9kZfSBad6TqY4CZdH13kW
	jqQ+/nGk31OuaGSUBD93slOdjgt85UU=
X-MC-Unique: eDhoEMmKORmp5sAHS3gpxg-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cDktseBpViaRO14P1Yb2NRy86E7M9qevsiAtbhRhj7Dt2SahPR55zEgAANzDtBA0n0uF3gQR/bNBRCJCuwkZ/V9NUgwlndsoUKaRZo0NJIlS+57xBilmgUsE70Z9VoVlgPQbEv9g5g9T5QthN2ZWljtTse0f3Sg4SAVZPLydxO0+QRc+8RXdIvSNYgCraxifTNzfuxQW7dzFVvNHNA3AjjBQ95puEV3M8AEUjaN9OPBriEQ+ztj4cmMEGUsHznn0C4NOhjbpe8+mx3WWKrQ7omhQWS5Q39++BnLdfIfmuqgb7Bz/EtWeHQZX2AajOEuap0m9BFm2RGUKcX0KHfpCAg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=n4jDv3GrZh+N1xcY1h2t0YTDogdYBMt0c5lboacvDeY=;
 b=QQZMLCRWlVzVClX7GG6zfyKk6pGX96EjsUBv404aCCeaHmMbIAy21eo1BtDnwlyi1+oJlwFg2SrBK3oH5OYMr7wXK4w0Ff/uDzGNnkpcVleL0DjUkpyR9j9ixRH9ndckhUcVAv3ASbI7g13iEn14oNQ2lnUePDg1T0tugpDL0IyO1dRNoQERxVEI3GrP7rqB3W63u1xIv9KyFGkFAx01CQVdaAlgZMvFFixT/MNY6cmlJRzUTwgu9qwgzCJvCrI4gV/UOtaVHeFICUvo6jZpXnwoteL0sPk9s4Hu/+6O421/a/UMM96r8x3t9v31IqN73KfgDK/+7Hm7v5BxaVhp7w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 13/13] SUPPORT.md: write down restriction of 32-bit
 tool stacks
To: Julien Grall <julien@xen.org>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
 <e12989f7-9217-e2b8-a17d-5c252dc89248@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <dfc17ae6-2100-cb27-9826-1f6001788707@suse.com>
Date: Thu, 15 Jul 2021 08:38:28 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <e12989f7-9217-e2b8-a17d-5c252dc89248@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0215.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::35) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ddd1bb79-0eb3-4316-748b-08d9475b28fe
X-MS-TrafficTypeDiagnostic: VI1PR04MB5600:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5600340E39B8E93BFAB0A02BB3129@VI1PR04MB5600.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	udrp+Ry12INI2eknZYgamTVIDBNPtE/a7YEBVR8Qki39EP9Ojh9LMjjH4gSNrJN9bEFObaZs1uyO01E3azYPqfpLj04yfNPqF8rMyKLz7iyYEL8NDM7ECN4NShlHUmxQDPXA9t44+2pcgqnWsgD3eroTZFyR56im4VXdcVyXQhPNhs7eNwPTL/zvXfZ+HO6onfAiSpquY2rIaFFaVN/rerSTlF3NLckQEc4KkdPRAJNmmrOG6ryYGCNNTO2bd5o3Qd83MCqTCskLEv4sijFztdoo6VkTcYAzsGTib57wo2Wvd4rODttTx3tbRPQYKEEtoYMlPiMfwBa/BKm4axSu2C+IYu8AI/CftmyuT+o1bDymdCUYBD/Paq8bLRvv3AlWmX9pUyLYljOe7BX32u26fF1gMB4gAE1VXgTTXewXZ5mEK4zyZW8hVFv4R6TGKDAVToB7+AGDKSPBv389KD4pfy4s1/tBfJEhtaTgAZ3sUsXKeKrRpfD82ZnQERY92Bt3MrDhA2cubRTm0SemPCiSBdSiCf5nyjKeMgGjDnmhiP+CYaTwh4J4RcNefefAvALrCpbRqOyHQ5qTf7Lobo7MmJT8jKQ8uB7bHr3n/WqLW0m1kCIipiguBG+KCWm/ZBuL8Cw1OovwasfukLOcQ+nRZn3h3GPZIQaCfKmSg+JtPS949i5rTTuA9q7TWFCwV9wXjbVzQhach6Fpm7bTvGmyCgQAiAq6/NeTnpWWTzBg+m4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(2906002)(54906003)(83380400001)(66476007)(86362001)(66556008)(4326008)(31696002)(53546011)(26005)(316002)(478600001)(186003)(31686004)(8676002)(6486002)(4744005)(8936002)(66946007)(956004)(5660300002)(16576012)(38100700002)(36756003)(6916009)(2616005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ddd1bb79-0eb3-4316-748b-08d9475b28fe
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 06:38:30.6295
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: z6GB1dKJ7KHTTffGwCtp9zw41o8q3N96oIHYx5Z3pDGjcUR5BREPxviccArC45rYhXWwzsAXB5vE5BFpChlXGQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5600

On 14.07.2021 20:16, Julien Grall wrote:
> On 05/07/2021 16:18, Jan Beulich wrote:
>> Let's try to avoid giving the impression that 32-bit tool stacks are as
>> capable as 64-bit ones.
> 
> Would you be able to provide a few examples of the known issues in the 
> commit message? This would be helpful for anyone to understand why we 
> decided to drop the support.

Not sure how useful this is going to be. This would be pointing at the
declarations / definitions of various tool stack internal variables or
structure fields. Which also is why ...

> At least on Arm, we tried to design the hypercall ABI in such a way that 
> it should be possible to use a 32-bit toolstack.

... keeping the ABI tidy in this regard didn't help at all (albeit it
of course was a prereq to writing a tool stack that would be capable).

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 06:45:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 06:45:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156402.288568 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3v81-0001Hb-UV; Thu, 15 Jul 2021 06:45:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156402.288568; Thu, 15 Jul 2021 06:45:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3v81-0001HU-RI; Thu, 15 Jul 2021 06:45:49 +0000
Received: by outflank-mailman (input) for mailman id 156402;
 Thu, 15 Jul 2021 06:45:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3v80-0001G8-M6
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 06:45:48 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6923de91-de02-4084-9929-ef9144ffe0f4;
 Thu, 15 Jul 2021 06:45:47 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2104.outbound.protection.outlook.com [104.47.18.104])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-18-di0ULdwZMjqtOhF6FkJelg-1; Thu, 15 Jul 2021 08:45:45 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB6864.eurprd04.prod.outlook.com (2603:10a6:803:138::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 06:45:43 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 06:45:43 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FRYP281CA0018.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::28) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.8 via Frontend Transport; Thu, 15 Jul 2021 06:45:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6923de91-de02-4084-9929-ef9144ffe0f4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626331546;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=1grGS3Ch3I7ps8Ccjbeaeob8QxHDWCTe9PRQyg1p5zA=;
	b=UP0M/Mp+lDLbzlpL5rbfixs7qKPfidrBwVwBxYtH5C17ameo2Ack+KPSsbiQadlrz6++AU
	TbQfgrdfdVhZgi9JAaosYdfafHPMZIMmaVx1G1G9XQSa/pg6u6Agemp8dk7dnDiVES6PPS
	vUb01C5vL3/4KwS5Bz4v3XYf7OOBd4g=
X-MC-Unique: di0ULdwZMjqtOhF6FkJelg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BT1juY44ShMQeuLvdt+cVmEZkg1vjZRGV2NeNGJJ5cpqdHtpeFqITrhMu/v5mgG+tPGOczPncfqlNTKLGejwQgk1mDGl1dm1fecxJCz+fz/aqvxwYqPNkU3LvQP8Jq9s0PPB7gUnw1atgM/xKO7fgsZYYufh9xEAYfOO/0k0mX8jkFC7BfTQnOoZYgPenmzMHjYV6DgiGOxP+CS1yAA+d3cTyPQ5j8UQXvOY91wX60QHzKkSB4ToHftagiw3mNjxnZaiZPWCF7WiKM0UsawO3yCK/0zjGqOKIvVCCHUk17hMCI/MWYC8Mw6G9BKotCsHsNdN0KS36OVSjtXudRM0XQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1grGS3Ch3I7ps8Ccjbeaeob8QxHDWCTe9PRQyg1p5zA=;
 b=IcBWAeMrVJugCYQr9h6Te00x1mtWEQTOG0pg0L2T7EfutVdwH0LbsHmqLiUDsPBLHXlHQFpa2rcxgXGCZwqX+qCXeKKiOpo69mlZaXPau6UsK3N5p/7qhoa3YG4fE8hDh4EzLZyZRaNzcKcw8s/n6pkeTQcDdtmPYPwWP+0YYe/gfpwLDows5RSz4x8BUDwAduE4tsKpSd6x62A6n/Tq5ThB8ISYG84xICQ4SYQk7v5hfkRyw1VZMmTaJ3CdjGiTHI4kFWwnhsHwyb6pScTuGZ3M4Qib2wM/uiPwveGUQ0Yd6UwK+ekGMc8xluMuRg6bw6ukM6R3mAAjejuAQAQCNA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH 1/4] build: use common stubs for debugger_trap_* functions
 if !CONFIG_CRASH_DEBUG
To: Bob Eshleman <bobbyeshleman@gmail.com>,
 Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626136452.git.bobby.eshleman@gmail.com>
 <2fc1a1416d37b5eed0ebfdeff8bb9dd61bc7acc7.1626136452.git.bobby.eshleman@gmail.com>
 <7468d092-42c5-34a1-74ec-7500e1bc7bf1@suse.com>
 <b6124fdd-b8da-b924-bf6f-1df6456f5926@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e20ff2cd-0f41-a87f-c10e-44e06e2c0d06@suse.com>
Date: Thu, 15 Jul 2021 08:45:41 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <b6124fdd-b8da-b924-bf6f-1df6456f5926@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FRYP281CA0018.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::28)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 22f12569-0645-4b9c-12d9-08d9475c2b0d
X-MS-TrafficTypeDiagnostic: VI1PR04MB6864:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB686464D5232891887B4D7EF2B3129@VI1PR04MB6864.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	tZlbOXjeTntTYueIu+c6tjmObNYDs/dX320/sm2qfFsnEm3U63Gc9W0xG6L4tP3+zEFD6sCihQWyWOKeR/EZsTB/IX7VHWzytOogELL8dsfaOXuVDBsjacNjNauFh578M9Dsk1LS3zckOBkrXe1CzIK/Ll7yIZ6nKJgq0CzkSL62zn+WVUXOJd+7foaasi2DZB+JDGQsZcYL+2GmcTC87w35I5V0q6JxCh9V2zqEkIal8LML6yPraLMe+MVHxa8sJbs0ljo7P+UXle3w3u2Pie3AR/onWRToqeP675E/B6zYxmm57Ncl3fzSNPY3VxmmN3SSPxOYzx/I5w4znAGxxqnPbdEXwMRCVPr9tF2v1Ps7EgWm2QxDbghLfJEB0ZEpShceqyLtQ3pn9EUIgpseNTbJIM/GcPL3mw26rRh/wqYbasalTZq5vMdKbR/BQ6MIEnt2U2TNPp275/p7JYvdMVkLC+99nccsW6lRwMgyzX38JMy0gHCE8hG3g0/m7BTJWQqfUmhUoYdVThwM/nYCsRvaSjyNHkqx8rnIh19lgiZEecFcnuRJnN/3RXt6BDZ2RkyXh9uKbOq8k8m+cfkhm6QNnDCrNfO16wy72EtIr/hyHgm0elqVrsweIgJtDkMQEwfCRVFx6fohfnqnG6k4lq7xmZJd6HJoUpgrUT8xxyXyycx2UOWrVdbAne+jQK64kePQjm4XfzgepWxeRar+i+ZSI1E8W6ZIraVb7b4MLUg=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(31696002)(53546011)(54906003)(86362001)(956004)(4326008)(6486002)(36756003)(2616005)(2906002)(7416002)(26005)(66946007)(31686004)(16576012)(478600001)(8936002)(38100700002)(66556008)(5660300002)(8676002)(316002)(186003)(110136005)(66476007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?SWxtQnFPV2NhbzY5MERFaWNHKzN2L3hMOTVNOFF3OW5GYmp4ME51QWliRk5q?=
 =?utf-8?B?QzdWZElWdEdyOFZPaW54aEQrZWN0WDhGNjF4MVJyVlhOTXZXbnVITEtSeWFB?=
 =?utf-8?B?dkVocUZqSG9qdjhPRFo1NTJSaHNWOWVoTEhZWnVWT1ZpQW80UE1VTDRLbjV1?=
 =?utf-8?B?eXBSVU93L3Y4VFBTNTlzRFVBVnFVVWs4SHhuTVdsRXBlWkRHL3VaR2FXK1Bj?=
 =?utf-8?B?bjFqVU5aT3FjYitmV0hrSkdhd1FUS0IvT3pZVHFvUU8yS2s3NHVpYjhqVDdD?=
 =?utf-8?B?R1Y3L0p5Vml6NVRMNFlMRG5YS0tucVREcWxPbjRHTFQvVXJhQTJzUnZsdkF6?=
 =?utf-8?B?eTROMXZzazdQSzlkaENEdTBMYnhXUFI2N0tNaXgyZG12ZkZKcEZhTksyUWZJ?=
 =?utf-8?B?ODFLQmFGZS9KM3Q5Z0Rtc0QxSklqVHdEcldmUm1LS09HQjVreStFcjhNaHU2?=
 =?utf-8?B?YU12bjQ2L0VpTkpJTkIraUFna1ZaZDV1SHpiZ1lwK050WjF3RmRZR3NKYUwr?=
 =?utf-8?B?ZDRZQmxEK3VxWXlwODBucnNudVNSYmhNbE16Y2hraG1QMlpTdnQzeEhIM2Zi?=
 =?utf-8?B?RU9nOGwzK1ozQ0lGRmdHUmlYTmNzZEd1S285d0FDRGNxTTNEU094SUd5VWd5?=
 =?utf-8?B?aEdEL1dWQmlieVpkN3QwdFQ0eXB0S1RRZStjdFhialVKWFUvbFNyNE1KRHhM?=
 =?utf-8?B?OVM1Qk9tbkdSQ0tDeExLbU94NzFHZVpWYlEySWlYTUVYS0pnazJGcWYwK0N0?=
 =?utf-8?B?QVU4R3BXc2NjOGpsZk5WMjFJUlR3UXlmYUtWdkw5bFRwOHgrWWFCRVhQN0Z4?=
 =?utf-8?B?T3g2SVUzUFZzV3Q0V1RCWmFnUGk4Wk9BVC9lRjNvcGNVTCtSM0QxcXdMb25z?=
 =?utf-8?B?MVJobjFqZkF1N25ZUENCcTMwOVFRMWs4NlNrM3psVkZkOEhpd3JncTQxdFVY?=
 =?utf-8?B?cE5YZkM5SWpSNTJ0YTdQc1g2NGR4U1RZWGtvTWtTVjVYTDVNOU50SWtGWFZJ?=
 =?utf-8?B?blpTQXZQbWJreFRoRVBPYmJ4eUlqMlpQekpWS2N3NTRQc2hyNzVlbWlVMUsw?=
 =?utf-8?B?dXBkN0lrRFRBekovYnpqU0duNmdPWXlVYjBRREhReFhHQUNudWdlZU5kMzgz?=
 =?utf-8?B?L0dMVUlacWEvbEFPa3BBelZKaDA4UmNnOEs5eUMyUEttd0ZxQnRUcSs3THJw?=
 =?utf-8?B?amwxZEpVRTRzYmNpUi9pRkxMM1ZiWldkYkYrbzdEUHRpczFQaDFWcTVSN0pt?=
 =?utf-8?B?ZXQwM2FRb2pPcStqZ2dOYjA3K0VmbVpYdnRUdUdSK3BlSzdnM3FxSFdKeTgy?=
 =?utf-8?B?amcwMnprb3JWZDNTSkhadUhBbks1dHJpVFNublo2cGVZS0xlNmlIbmQ1YUVn?=
 =?utf-8?B?T1NKUjE0NWtndWtrVE1HQnhSZ2dDVFBSaFdydjBqZm9sN1Z4cE93UTQvRXps?=
 =?utf-8?B?Q1lqcnhoMTRZcHNGMlNldTZZUXRocHczQzhGS1RmdlVPR1BhbExCcytVeEJX?=
 =?utf-8?B?dkpyUmswc05xQjd2ZC9JblRQcmlRdkd2cXRFZlhBOHNMQWs3Q09xeEVmYWFz?=
 =?utf-8?B?cWRQYzJDQitaRktGdlQ1SnNiZ3UwaEVtc2pzU3lVRldXanRUU29CcjBGOHNL?=
 =?utf-8?B?Y2l5ZlU3VC9LUDZyMXVaSXJRZk1MZWIvSmxPSXk2Z0RIaXgrZlRIRkpKaUxa?=
 =?utf-8?B?TUIvWFdMMk8xREREYkFrTmM5SFdXK2krUVg0TWpBSnhOQXhZTWhuUy8rMzB3?=
 =?utf-8?Q?PdpXFpoBYpHcT/rXgQYOnSFnhtVx4K5OmaZZ9MC?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 22f12569-0645-4b9c-12d9-08d9475c2b0d
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 06:45:43.5555
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Kl/Ic4t8KEKIMms1WWICuT/XjAnPEXI6k7XSB3nhvSSVJ4ecCc8ES9AVtxKZhHkU59rp2Mnpj1uyTjrubREnIw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6864

On 14.07.2021 23:03, Bob Eshleman wrote:
> On 7/14/21 2:34 AM, Jan Beulich wrote:
>>> +static inline bool debugger_trap_fatal(
>>> +    unsigned int vector, const struct cpu_user_regs *regs)
>>
>> I'm afraid the concept of a vector may not be arch-independent.
>>
> 
> The only way I can imagine it not being arch-independent
> is if it is thought of as a trap number or id, instead of
> implying an entry in a vectored trap table.  I don't
> really understand this subsystem, so I'm probably missing
> context.
> 
> Are you suggesting a rename or a different approach entirely?

I'm suggesting that we shouldn't be claiming something to be an
abstraction when it isn't really. There's exactly one use of
debugger_trap_fatal() outside x86/ after patch 1 of this series:

static void do_debugger_trap_fatal(struct cpu_user_regs *regs)
{
    (void)debugger_trap_fatal(0xf001, regs);
    ...
}

That's very certainly _not_ arch-independent. Hence I'd rather
see some #ifdef-ary added there and the function remaining
x86-specific for the time being, i.e. until such a time when
someone might come forward with a suitable abstraction. Perhaps
(as an alternative to #ifdef-ary) the '%' debug key should be
x86-specific altogether, and perhaps its setup and handling
could be moved into the new debugger.c?

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 07:32:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 07:32:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156410.288585 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3vqY-0007Lu-Ib; Thu, 15 Jul 2021 07:31:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156410.288585; Thu, 15 Jul 2021 07:31:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3vqY-0007Ln-FP; Thu, 15 Jul 2021 07:31:50 +0000
Received: by outflank-mailman (input) for mailman id 156410;
 Thu, 15 Jul 2021 07:31:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ppgx=MH=gmail.com=rm.skakun@srs-us1.protection.inumbo.net>)
 id 1m3vqX-0007Lh-1E
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 07:31:49 +0000
Received: from mail-lj1-x229.google.com (unknown [2a00:1450:4864:20::229])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b37d6901-970a-460e-bb4b-72e3eacbdba1;
 Thu, 15 Jul 2021 07:31:47 +0000 (UTC)
Received: by mail-lj1-x229.google.com with SMTP id a6so7397664ljq.3
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 00:31:47 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b37d6901-970a-460e-bb4b-72e3eacbdba1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=K8osTs2DVP81bWLnJgqBO39HigXBsHyE99jXtdAy7Ck=;
        b=e4thDoip3So+zUGXVuZ3czCNeKnmxTKncBRIpcHknmPV8HmNATF4XWuTZzz9r2P7qj
         2EPDtObBuadoHf5lkQYiQGTjXgj9eU5PKQIwtzUmjGsNEhw2crz3FNvxzGWM36a5WFKL
         r/DC7AAvzNPsFJyaLu+Y1J3d35p96DpuLmFcLkMH4GUBDFLRaddIs+BL6WO7wkFx9wyn
         WSGHhacaCcXD8DaGVpauURNumQe/WfKvCWr7+TwOCCgTSFBzYsKuUuvDVsL39YKcsU3R
         yQIeO3QmLwxQ80Hj3WLoCcuTwEdJT+DIg4fUwqORrKuhRyP5VXsInrcgJrBaCU5wffBl
         1NRA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=K8osTs2DVP81bWLnJgqBO39HigXBsHyE99jXtdAy7Ck=;
        b=tNqoaIpK7SVgn01J9JaR7zc9J9TH3mfRz1bHq2uYcTYlM+PdbpHrXekicUt5WxazMB
         KUGI3yohcvHZfXVcn1+spfIrSZT66ESUU0/oxBY90sfm1MqeboSbdFDGQe3fTPgPnUHy
         ChrABFhzGaspXgiKovb6/drIX1j4h2pg7KeTm3ampBb6s17gACuueMfsSmsguBSi5Eey
         OofmU6ol8JdlQj+Xb1iU+OXN3tmQkM0rdyrLMV0y6iKUBViTSVYIXKmpv7ODABldhrbW
         3g4voelxDNzaPayQVJXrCH+61x7WZQua86qhGQI7vtA1fTdBvEsIpx4UxDtbwp3LcedZ
         OHNg==
X-Gm-Message-State: AOAM533+4vLIADIfLc8QypPNUKmIiZw+yDS3rp4nG23NphKUEfYoDhPs
	drZGLBhjKu0/n1fe46c+0LV0MLpeeUYeHfuF5CE=
X-Google-Smtp-Source: ABdhPJzmxqtsUzwbzYkDtsTr2HSTMIkMdacfOEcefezuZ+ZE8STiIZEEO5Kf66+xThd7iXoX0lnDercSzytDWl7FGJY=
X-Received: by 2002:a05:651c:1587:: with SMTP id h7mr2639334ljq.285.1626334306805;
 Thu, 15 Jul 2021 00:31:46 -0700 (PDT)
MIME-Version: 1.0
References: <20210616154436.GA7619@lst.de> <20210622133414.132754-1-rm.skakun@gmail.com>
 <alpine.DEB.2.21.2107131822040.23286@sstabellini-ThinkPad-T480s>
In-Reply-To: <alpine.DEB.2.21.2107131822040.23286@sstabellini-ThinkPad-T480s>
From: Roman Skakun <rm.skakun@gmail.com>
Date: Thu, 15 Jul 2021 10:31:36 +0300
Message-ID: <CADu_u-MxpRVm92yL_d0mWS06KBv_dv6jJ+OHt8KdjsSup_0j5g@mail.gmail.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org, 
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, 
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>, Roman Skakun <roman_skakun@epam.com>, 
	Andrii Anisov <andrii_anisov@epam.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi, Stefano!

> We have the same thing in xen_swiotlb_free_coherent. Can we find a way
> to call cpu_addr_to_page() from xen_swiotlb_free_coherent?
> Maybe we can make cpu_addr_to_page non-static?

Yes, right, If we want to reuse this helper instead of the same code
block in xen_swiotlb_free_coherent() need to make cpu_addr_to_page() as
global and add a new declaration for this helper in include/linux/dma-map-o=
ps.h.
What do you think?

Cheers!

=D1=81=D1=80, 14 =D0=B8=D1=8E=D0=BB. 2021 =D0=B3. =D0=B2 04:23, Stefano Sta=
bellini <sstabellini@kernel.org>:
>
> On Tue, 22 Jun 2021, Roman Skakun wrote:
> > This commit is dedicated to fix incorrect conversion from
> > cpu_addr to page address in cases when we get virtual
> > address which allocated in the vmalloc range.
> > As the result, virt_to_page() cannot convert this address
> > properly and return incorrect page address.
> >
> > Need to detect such cases and obtains the page address using
> > vmalloc_to_page() instead.
> >
> > Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> > Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> > ---
> > Hey!
> > Thanks for suggestions, Christoph!
> > I updated the patch according to your advice.
> > But, I'm so surprised because nobody catches this problem
> > in the common code before. It looks a bit strange as for me.
> >
> >
> >  kernel/dma/ops_helpers.c | 12 ++++++++++--
> >  1 file changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> > index 910ae69cae77..782728d8a393 100644
> > --- a/kernel/dma/ops_helpers.c
> > +++ b/kernel/dma/ops_helpers.c
> > @@ -5,6 +5,14 @@
> >   */
> >  #include <linux/dma-map-ops.h>
> >
> > +static struct page *cpu_addr_to_page(void *cpu_addr)
> > +{
> > +     if (is_vmalloc_addr(cpu_addr))
> > +             return vmalloc_to_page(cpu_addr);
> > +     else
> > +             return virt_to_page(cpu_addr);
> > +}
>
> We have the same thing in xen_swiotlb_free_coherent. Can we find a way
> to call cpu_addr_to_page() from xen_swiotlb_free_coherent? Maybe we can
> make cpu_addr_to_page non-static? No problem if it is too much trouble.
>
>
> >  /*
> >   * Create scatter-list for the already allocated DMA buffer.
> >   */
> > @@ -12,7 +20,7 @@ int dma_common_get_sgtable(struct device *dev, struct=
 sg_table *sgt,
> >                void *cpu_addr, dma_addr_t dma_addr, size_t size,
> >                unsigned long attrs)
> >  {
> > -     struct page *page =3D virt_to_page(cpu_addr);
> > +     struct page *page =3D cpu_addr_to_page(cpu_addr);
> >       int ret;
> >
> >       ret =3D sg_alloc_table(sgt, 1, GFP_KERNEL);
> > @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_are=
a_struct *vma,
> >               return -ENXIO;
> >
> >       return remap_pfn_range(vma, vma->vm_start,
> > -                     page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgo=
ff,
> > +                     page_to_pfn(cpu_addr_to_page(cpu_addr)) + vma->vm=
_pgoff,
> >                       user_count << PAGE_SHIFT, vma->vm_page_prot);
> >  #else
> >       return -ENXIO;
> > --
> > 2.25.1
> >



--=20
Best Regards, Roman.


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 07:39:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 07:39:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156442.288696 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3vyK-000132-Bq; Thu, 15 Jul 2021 07:39:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156442.288696; Thu, 15 Jul 2021 07:39:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3vyK-00012v-8r; Thu, 15 Jul 2021 07:39:52 +0000
Received: by outflank-mailman (input) for mailman id 156442;
 Thu, 15 Jul 2021 07:39:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ppgx=MH=gmail.com=rm.skakun@srs-us1.protection.inumbo.net>)
 id 1m3vyI-00012p-W9
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 07:39:51 +0000
Received: from mail-lf1-x129.google.com (unknown [2a00:1450:4864:20::129])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b626ffb6-afd2-4847-9d46-bc2f7d0359c9;
 Thu, 15 Jul 2021 07:39:50 +0000 (UTC)
Received: by mail-lf1-x129.google.com with SMTP id t17so8299868lfq.0
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 00:39:50 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b626ffb6-afd2-4847-9d46-bc2f7d0359c9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=RbV1qy6tsLWfKrDuSsvc9bUACKfeR7Oc9sX7ozt1Vx0=;
        b=DLguvjWEMocTkdw1rblF0HMFSj1ky99nS7jKdXxcdsmfL5WNLppbK2a5L62XX7xpsU
         KEAP2P0+N6TYxa8X5G2v/a6subexhIk6QcKhffawY5rVpEeJ/JFyAFDDI/qo7pK6tVoV
         1pzXW3DX6bVdPzr6qJWa1AOHBSgfnGJKsis9mISoD7CMkttMkkBVJNdIYq+fn3JvACyK
         APZY+c579zDSUj7wTOA7ccCGu6iTZ6wi+hRorumUhXfY4IAMGie4l7IPFSyxOhyota72
         +RyQcWGfyszpsRdPe8UksD/iwFTivOa6I8587sKl68G8gmfoBlR3sQQ/bDG1DqBrps2N
         ZCbw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=RbV1qy6tsLWfKrDuSsvc9bUACKfeR7Oc9sX7ozt1Vx0=;
        b=calj+eo5KBJpCvvNwD/uALs5yc+l0ujk9Gasn2TEfQ6OX0gVRIG3N6SCouyJpFTKUu
         KjQak4Gm7TMw4VbN6wnmza6238dbQltFOdbq7+TvpKFNbUaySVT8VMLSNkRN2RNUcpD7
         C85oL65BM8BMxsOXTnG4AJO6j9e7gil5IGBPaF7zRmlHR6k9DnEW91viMCwsnzZlDOo/
         jdmBMx5KyleAirHZ/GlPRZjhnCCYZHypnQX39+OCFver4mnQyhwarFOGdzj0230eOjrL
         mwQc15bw0Q3oex6QGuBSuhiYGyg0x3NCRvPjKmmm8Yaj6T2G8yPaj4vXT4Zwe/ZAX/lK
         XhJA==
X-Gm-Message-State: AOAM53319tlRyCw4IGvcGeIJIk8tPevEJeqBY+AozDlrzHsUI/0HnGK7
	vjjn/C1S7wdiB6TtCvMyVHpVkYqDcG2DqNhdAPg=
X-Google-Smtp-Source: ABdhPJzctcCKvkmJCdAvVZwAE6A94bEK5hPH90lNgU/YTADVTWx+ppiFHflOJl1Ygu8geOZO+p5upB7wdV/pJibMWgA=
X-Received: by 2002:a19:c1d5:: with SMTP id r204mr2381718lff.594.1626334788911;
 Thu, 15 Jul 2021 00:39:48 -0700 (PDT)
MIME-Version: 1.0
References: <20210616154436.GA7619@lst.de> <20210622133414.132754-1-rm.skakun@gmail.com>
 <YO4si0to/XYximwM@fedora>
In-Reply-To: <YO4si0to/XYximwM@fedora>
From: Roman Skakun <rm.skakun@gmail.com>
Date: Thu, 15 Jul 2021 10:39:38 +0300
Message-ID: <CADu_u-OMx6Pj4DQDoOsdh6aNAzYys-+R=o+OzHYtLm=nECgkyQ@mail.gmail.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, 
	Stefano Stabellini <sstabellini@kernel.org>, xen-devel@lists.xenproject.org, 
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, 
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>, Roman Skakun <roman_skakun@epam.com>, 
	Andrii Anisov <andrii_anisov@epam.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

> This looks like it wasn't picked up? Should it go in rc1?

Hi, Konrad!

This looks like an unambiguous bug, and should be in rc1.

Cheers!

=D1=81=D1=80, 14 =D0=B8=D1=8E=D0=BB. 2021 =D0=B3. =D0=B2 03:15, Konrad Rzes=
zutek Wilk <konrad.wilk@oracle.com>:
>
> On Tue, Jun 22, 2021 at 04:34:14PM +0300, Roman Skakun wrote:
> > This commit is dedicated to fix incorrect conversion from
> > cpu_addr to page address in cases when we get virtual
> > address which allocated in the vmalloc range.
> > As the result, virt_to_page() cannot convert this address
> > properly and return incorrect page address.
> >
> > Need to detect such cases and obtains the page address using
> > vmalloc_to_page() instead.
> >
> > Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> > Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> > ---
> > Hey!
> > Thanks for suggestions, Christoph!
> > I updated the patch according to your advice.
> > But, I'm so surprised because nobody catches this problem
> > in the common code before. It looks a bit strange as for me.
>
> This looks like it wasn't picked up? Should it go in rc1?
> >
> >
> >  kernel/dma/ops_helpers.c | 12 ++++++++++--
> >  1 file changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> > index 910ae69cae77..782728d8a393 100644
> > --- a/kernel/dma/ops_helpers.c
> > +++ b/kernel/dma/ops_helpers.c
> > @@ -5,6 +5,14 @@
> >   */
> >  #include <linux/dma-map-ops.h>
> >
> > +static struct page *cpu_addr_to_page(void *cpu_addr)
> > +{
> > +     if (is_vmalloc_addr(cpu_addr))
> > +             return vmalloc_to_page(cpu_addr);
> > +     else
> > +             return virt_to_page(cpu_addr);
> > +}
> > +
> >  /*
> >   * Create scatter-list for the already allocated DMA buffer.
> >   */
> > @@ -12,7 +20,7 @@ int dma_common_get_sgtable(struct device *dev, struct=
 sg_table *sgt,
> >                void *cpu_addr, dma_addr_t dma_addr, size_t size,
> >                unsigned long attrs)
> >  {
> > -     struct page *page =3D virt_to_page(cpu_addr);
> > +     struct page *page =3D cpu_addr_to_page(cpu_addr);
> >       int ret;
> >
> >       ret =3D sg_alloc_table(sgt, 1, GFP_KERNEL);
> > @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_are=
a_struct *vma,
> >               return -ENXIO;
> >
> >       return remap_pfn_range(vma, vma->vm_start,
> > -                     page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgo=
ff,
> > +                     page_to_pfn(cpu_addr_to_page(cpu_addr)) + vma->vm=
_pgoff,
> >                       user_count << PAGE_SHIFT, vma->vm_page_prot);
> >  #else
> >       return -ENXIO;
> > --
> > 2.25.1
> >



--=20
Best Regards, Roman.


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 07:58:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 07:58:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156461.288758 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wGP-0004LW-G7; Thu, 15 Jul 2021 07:58:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156461.288758; Thu, 15 Jul 2021 07:58:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wGP-0004LP-DD; Thu, 15 Jul 2021 07:58:33 +0000
Received: by outflank-mailman (input) for mailman id 156461;
 Thu, 15 Jul 2021 07:58:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3wGO-0004LJ-Ey
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 07:58:32 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 71ac8a7e-e542-11eb-8895-12813bfff9fa;
 Thu, 15 Jul 2021 07:58:31 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2054.outbound.protection.outlook.com [104.47.13.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-JIT_dVIuNcSWssJk5Q7xmQ-1; Thu, 15 Jul 2021 09:58:28 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB6480.eurprd04.prod.outlook.com (2603:10a6:803:11d::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 15 Jul
 2021 07:58:26 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 07:58:26 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3PR09CA0014.eurprd09.prod.outlook.com (2603:10a6:102:b7::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 07:58:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 71ac8a7e-e542-11eb-8895-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626335910;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=Xt1DbyXpm5Nh6OVIsFP89oM9FGOC45n+l3qSTDXc6nk=;
	b=DQGDclzkWjC1NxCremfn9sn5ybZjVQsG0sjXhtieWxgNrYhlgHGnN+Cn2URWc3i4/N7O9u
	hIeGMIuYDQ2KMW4EyahlraHEZ09hSbsyF9bQ0J/yYvfGECsDh4TRH6oj4/xO+bESdi7jLj
	N0XZtO8b5Jn9S+2024atmcz0ZH/MP9M=
X-MC-Unique: JIT_dVIuNcSWssJk5Q7xmQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=goB7iBYvIrIFM2COvy+e8VBF2naT1BDAlZeVGGliw16ylH5cw7gPbPm9oLhVnQ/4YKJ+aSpyTk8HQXZSaDgLPMM28CFEDGPo8cu3aoBJYMUcADAYBM3WVWJO1XZWsh04W33Jyp4g5ffOVvkzH/kHGDfHpswcdIVwf1P9B78zq/50qIZirNoLCiPonEfCkcvqavSa1cURc8kUMYE7DNwTFu2kRgHrdP+mHFS4RWyhct2zqKl1CUTNAC3kz5YzoR80nLOjZg659cWNEDR9hKfnK2ZWAtVu8YHNN5SbwnKPuTuiL0PC61U5HN3OHRhpg8nSC5ShcIsnUzriCqsjSl+8Eg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Xt1DbyXpm5Nh6OVIsFP89oM9FGOC45n+l3qSTDXc6nk=;
 b=HsdY954CjA6tMrxZpkz9Skp8bvy5S0kzO67Q8Wp4owCdx+X8LJ+i3/q7nfxXMWXNEoc2WVbVV4qu2fCmcYSjb8tO8kqStjZC9c4oykYmiJKeIcRBmEM0CInpM9LrhQJf813qKH36PzG4pajqVFwJDJv4Lv3T1SzLVAJ5BB0VtE2cMP/adzmD/i24Q5PJ1aH8QLHB8H4v5fIlsAiW+bwAnup+NcSPUYAZlTLON3Nkg2VQ3yMpiq7t+99PqyOdMAW90yBx2tjDUMxa0fkeMBSdrP5ergZ63xdsUmLWOTjo91CFXThRuLNcJCxanccjiVfENeFoYsdXyWk5wHSn2vHnnQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
From: Jan Beulich <jbeulich@suse.com>
Subject: preparations for 4.15.1 and 4.13.4
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <ian.jackson@citrix.com>
Cc: George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>
Message-ID: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Date: Thu, 15 Jul 2021 09:58:24 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3PR09CA0014.eurprd09.prod.outlook.com
 (2603:10a6:102:b7::19) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 87a3446c-f5d7-416f-7fe2-08d947665378
X-MS-TrafficTypeDiagnostic: VE1PR04MB6480:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB64801284D8B4FA70013D0026B3129@VE1PR04MB6480.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	EjfKnUKp/w0F6sH/YqWyyWpTF0WB+3sw3eTq3YKlic+Zp/HS8w3F909HHtCFZRsKUpUQjAsBKRk5bbM27lfvaIsmnk/o95UiZBZGEvZBHieV4hAsm1rGqdg9vy/Opc1W1FDjhMVuFUO+QjzSJvWwItxWQgDuGrOBEJHHroqDTVlB7gVO/9Q9tXIMvO1mWK5TNd80e+kInb9XTaQ9Yd7LPn4OYemRdpbUOPZhSzufBYeG9kXq8xhx2SOkAibqwyj2cl0iU7b2Rpwup36/SOKBYnM/svSkpB7o+LAH+hsFEgvtUwOZ2HsAuI4Sr1GgkVExMoyw2fjLk+VX2ZR0j+/LtgLHpLFoXgGWFnOwz8IaHzh/mT0B7lauutbvnUzrcZO64xxDhwSRRI36E8uAEnKI9swiDdYRhFSsolDd3KdRPnAvY0bVWC7cdLhwxM2UNYZk8Y5DyO4vWjkpGCa7BITsUplUUcL8l3tWME0Y0xwBUsnP0QfwnqgrmGe28mibLi1Ha7FXYuO7o/kqW3NEvFerWxtUTaKbFDd7gymToqsPWHmHGJNM7jePfC+4ODiQGeD8NeZaKJoCDqVQmYNQEpwfkzRv6OOE/TqTrtCdsaEq22dhNpobBf1C49v4VJ40Et/QtnDNRSf4D7mCeNor/aKVh4vPv8xcbLCDqL2rGSMOP/+eh8j08ABK0eSVgD2sguqwuj/IqUzaZlYYpJ1vybf9nXoSgZdyw2QDGbkwSFrUvAY=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(366004)(136003)(39850400004)(346002)(376002)(186003)(36756003)(110136005)(31696002)(316002)(956004)(31686004)(2616005)(8936002)(86362001)(38100700002)(4326008)(54906003)(16576012)(8676002)(6486002)(2906002)(66556008)(26005)(5660300002)(66946007)(66476007)(478600001)(83380400001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?UmR1RFdZSEVabHlzYmRoOU5KdkxBM3dyOGRUQkpvQzI4WW9ZR1k2QWMxb2xs?=
 =?utf-8?B?Zjg1QTAyNVVlalpabzB0QmlGWnFlVEs0ZmhFN2dMTkpKd2x3aFFnSEhZcXI5?=
 =?utf-8?B?aitpZmZONFFTRkl1cXJVUGdFKzBCeUdrU1hBeHhnQVBMRm8rRFAxanJlRTRU?=
 =?utf-8?B?aEU4cVp5bG5mbFh5eTZjTlhvbGdSa2V2c2htREdjdXFPU0RZblc2QUorVHZY?=
 =?utf-8?B?NjljcGErbUkrNWdaY3EwVFZuWCtjRkhDejh4RDBaUCtsMnVJUkpReU44a0ls?=
 =?utf-8?B?TVJ5Z3BGdHdINGVQZXNXcExKUEtYNExyRWc3UUUxOXpNWk9QZDhrc2IxL1NV?=
 =?utf-8?B?QkZjcGROYnY5MTY0d285S2xGTlErUFAzZlMvRXdIaDhCbjdrWmJFTGFvMytZ?=
 =?utf-8?B?WXlockZ4cSt5Y0h2azUrS1dZb0NzYllocmlQNjVoZ0xQUlYxN0paczdZakVz?=
 =?utf-8?B?TXZ6QXp4R1l6RFNSRnZ6T0ZGVWVxd2pMQW40Znc1SmFWN0ZWYysxa2dXKzd5?=
 =?utf-8?B?Y1cxbU1Kb3RlYkFYc3pYT2k4RDJwMHltbnhPYVBaR25UVFJWZlZMeDNTVU9r?=
 =?utf-8?B?Z2tyWFNMNGU1bW1YZm9JK3UzQ0JKN1c0RXY3Z2o5WG9BRG1EUm1hOHFmWW9u?=
 =?utf-8?B?Z0htTjJmVG5IVGtsWmdyc3A4YlowN01lV0VDQ1k2bE1ZZU5ZWnBndmdUVWJT?=
 =?utf-8?B?b1FsUFVwcU81ZzVpekQrNklzc2lBNittNWttVnFMTHExaXNCTitXVlAxVVZ2?=
 =?utf-8?B?UVNCcE5UQ3lQdkFFSnBSejR2TUxiOEtpeTB4NXJJOHdLQlFPN1hKQkpwanJ3?=
 =?utf-8?B?SkRkQTVETTlNTU1DbVRqM2lINWVkOHFLTDhJdkcwdUR1QmFaSU16a0ppVlpH?=
 =?utf-8?B?dmJxQzNRYzlMS1NYMzRuY1lVeUpEMjZ5MlhrZEtRc1o0SHp5WlpEV1BVUHVi?=
 =?utf-8?B?RUQzcWtqVTRDM2dwU2FFTFhWTjduZDJnWmMxWXJLTXVEL2gwREg1ODlueWRr?=
 =?utf-8?B?NUtrNG5UZ0tuYmVoaE1jOSs2M2hlSVhaM3pDVFVSa0VzcEc5TEtwUUlwV1Uy?=
 =?utf-8?B?STRscVNxZXVPRmJPNGtWY0o5TWczbjlJYkQ1c0xrRENleTRIdm5hTFNaaG82?=
 =?utf-8?B?RnZiMzVab0x1bXd0UTNyTEl1c1BsTCtWRkNiRUFKOVR0aU53TEhuQTVOT253?=
 =?utf-8?B?KytWYUVSd2lqcVVOMWRSK0J1UUZ2YWRVL0M5R3hPQlpwZDhlc0pZbGMrUzF6?=
 =?utf-8?B?bzRJZkZGL3RrK3VZc1NFNHdKa05IUGJPaFhDaFVBT0JmOElna3JFK0dyQlVj?=
 =?utf-8?B?L0FsRjgvVG1jbCt0RVpSMEgvWE1ZeXEzTEo4clR4SXM4N3doVy9ZZlNVV3BZ?=
 =?utf-8?B?ODBYaGM4YVRWVjB5SzBkVHdEUjFqTDg1cGZCdVJCRk42Wk96dG40ZDhoQUUx?=
 =?utf-8?B?ZllOa3lBSlRteHFkM2FJaW9OWDNZV2NlQVB6RFFnYVhKSFFPaGNBV1loN1Bz?=
 =?utf-8?B?QndVeUZ3c2hIdWNoeWFQTzhqd2FCQVNTbnFma1BQV0FsQkFzS1FrY2tEZWgx?=
 =?utf-8?B?clYyM2ZIM2c5U1Zuc3dkQmprTDVTVmlJWEZGdXJsUE03WUpFeVpLUjVmUmFp?=
 =?utf-8?B?RHR4cUQ4Sml5UUY2ZlVxelJDMFEvWml0aEZPUTNCRHEvMnhyTThyN3JxSHhJ?=
 =?utf-8?B?Q21oQWtxVFpUdWU3TXhQZDV6WHpDNmlmZmxSRTFlZ011akF5MVhqS2hsU25z?=
 =?utf-8?Q?A4JxgiMbhd8L4aztDOiQQU5/Wf2YAoINz5kPaX0?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 87a3446c-f5d7-416f-7fe2-08d947665378
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 07:58:26.3567
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ZT372sse8Pt25+4gRiCrVpM9f7z3PPvox4iI3z1skDSA827bSMhTwOZyaOJe4grGIov3SW7vkFo24G32sA4VUg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6480

All,

the releases are due in a couple of weeks time (and 4.14.3 is
supposed to follow another few weeks later). Please point out backports
you find missing from the respective staging branches, but which you
consider relevant.

Please note that 4.13.4 is going to be the last Xen Project
coordinated release from the 4.13 branch; the branch will go into
security-only maintenance mode after this release.

Ian: I did take the liberty to backport Anthony's

5d3e4ebb5c71 libs/foreignmemory: Fix osdep_xenforeignmemory_map prototype

Beyond this I'd like the following to be considered:

6409210a5f51 libxencall: osdep_hypercall() should return long
bef64f2c0019 libxencall: introduce variant of xencall2() returning long
01a2d001dea2 libxencall: Bump SONAME following new functionality
6f02d1ea4a10 libxc: use multicall for memory-op on Linux (and Solaris)

If those are to be taken (which means in particular if the question of
the .so versioning can be properly sorted),

198a2bc6f149 x86/HVM: wire up multicalls

is going to be required as a prereq. I have backports of all of the
above ready (so I could put them in if you tell me to), but for
01a2d001dea2 only in its straightforward but simplistic form, which I'm
not sure is the right thing to do.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 08:02:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 08:02:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156471.288769 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wKQ-0006J9-AQ; Thu, 15 Jul 2021 08:02:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156471.288769; Thu, 15 Jul 2021 08:02:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wKQ-0006J2-7P; Thu, 15 Jul 2021 08:02:42 +0000
Received: by outflank-mailman (input) for mailman id 156471;
 Thu, 15 Jul 2021 08:02:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3wKO-0006Iw-Sw
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 08:02:40 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 31893d66-69ea-436b-832b-87d1add8f71e;
 Thu, 15 Jul 2021 08:02:40 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2113.outbound.protection.outlook.com [104.47.17.113])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-6-Nd2Axy6qOzSdtO3nVyMsyg-1; Thu, 15 Jul 2021 10:02:37 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7150.eurprd04.prod.outlook.com (2603:10a6:800:12a::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 08:02:35 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 08:02:35 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0109.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:19::25) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.23 via Frontend Transport; Thu, 15 Jul 2021 08:02:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 31893d66-69ea-436b-832b-87d1add8f71e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626336159;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=PIdZoi9GqilekvwAudt29NlSU7bcACEvNgcPyJGKMeI=;
	b=Zmgz0fShnKueJ2A1Gch/1zlHXcdTv/OVeixx7CAkNVGFrcBSmuU8xtB91GOSuFu8kObjXq
	/azxTwyIuEYooQ9QVGe55OhYOWECUzKz7rZaUvdd5LSLc5LkEuv5DqFVbtWfgvJfSpQFkW
	rQ8DSwPIat8dYfaRLjeOknEJ5CrT6fU=
X-MC-Unique: Nd2Axy6qOzSdtO3nVyMsyg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OykqASRHClDwGpzcI2DcPKDfATLqP8cf/tgGTiJc8JyrPEbvfYPgfeUsxRWEVs3cCCr9+v7aeU1PQYz0E8IwEQ4Wh1F5jTcOqJ5P4MY2FPRSxbAstBXKfBTS0o+lefPnYRddyDNoYuDvThcECSbSSQjydY4PXzgblOuAXwCh9DEiqjSEWDM0jRHTcnSLm/5zUn3JbI5LKNDSMchh7UMTVer3JQdg2+HQiJ2XhyVUhru8UNHuu2U/nBSwzGAbpT4E6rclYYtX+F8HQKWjcKZhGKLjjs9TVf+6qu6naRTi6jquJ7BcZrabHFNzLVc8PLfxRqWhUymXEmCSXWfV8Fx5cg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PIdZoi9GqilekvwAudt29NlSU7bcACEvNgcPyJGKMeI=;
 b=hTGZKZIiKQvsDAQlm4ADhg5Zzx0RGjkc3jKI4cqRcHk8IMps9c2MV0V4Nsjbkg3cDex6NWObPLh69rb0JDrJJFw3Q0MuIU9yaYZ0F0WbnGfmKTKSETmUEOdMN2pNcP/iuNHBDTHf8JQZHHAGLaVOUrDXQRGbTEHkoHW81TOXdWhUnICVO7GjOMMVWI5ho593sRaGv400fFmZqHdN3UCuliKSNXxMj6uiwYJWqKYHqg3dQlgGL/p2LY8BBPi2p7opsRCpol+i6B12AOinqJRW9ViohInK/Z0SY4ieJUpKbgFlxATc8K4bSQBkA9xz7vOr8R+KwAtBa4fWu2lztUUjvw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: preparations for 4.15.1 and 4.13.4
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>,
 Ian Jackson <ian.jackson@citrix.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Message-ID: <fc0557a8-485a-7650-9c84-bf264b0659ae@suse.com>
Date: Thu, 15 Jul 2021 10:02:33 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0109.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a11cdbcf-6fe5-45b4-6b17-08d94766e7f3
X-MS-TrafficTypeDiagnostic: VI1PR04MB7150:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7150E80DDAEDA4503EF968A9B3129@VI1PR04MB7150.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	HNOVSsZ34HVdyMKHqyttV/AnHjHInCAPxG8DfUA+fcI+LFz6sZhd2297qjelerUsTkJ/bR01MeQEYwdaBMRpONnZsfxJMI+39DhSa+ZoYX8iwBryts45zLV2JHJZ5ZoMG1dCoMaZcEOtYmgJewFdIxwx86LIvJ2EH9IGyl0K+NINWliudenRya1m3vXknYbpg/i2EGcQfndXQpDWLP5q55hJpa8waz4onwf9g6TdRGdy37Lq1zZ+0aLjPq9iPBm4ffEBmIHpiKyw4XOFYWBqXWAEFt7vbZaj9L8llSaf3+wwvh6mHdtVTmJU6BDi4LtNc+7SSxOWYYXJak9AjIaxIYuci3V3wSFjCQTAgRNp7rndS8DFOuDXKYRzWrfrKFLoKtH0YLbOpeQlB0o0OBUqJtJlYaRXwpxllPtK4m6Vhl6oNpuUtXrOibZS6mXDb8gKg/n46QATAF31IAsu0ZejD1bbLZG9ZJwNsFXkjuVuEV5yairzHP5yZbAT95DKKsP3uruQPLvhBhTZgnXSWf84nx8lxB1KanFA0hOQR6Yrf2rAC1ZZqNTgbUeyaT1TtlrOUA0wCoUp7ypSVZR355RnEarHJFp6X9wlc65XLVo/oS9hjQF8u8TLA5odHIoMqhS1DI4iaIdRZ8QbSYm0erKNVHYWKAgFd8HhjiiBddgQ0Y92xpv6MWQfim0Lw8rygUEtOPPC6hllyz53/pEId26pODtfNgNN+p3ska200C8y0e7PG5sSnu4Oya23deRjZCov
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(396003)(136003)(39850400004)(366004)(8676002)(5660300002)(478600001)(31686004)(186003)(54906003)(26005)(4744005)(36756003)(16576012)(31696002)(6486002)(86362001)(38100700002)(316002)(83380400001)(66476007)(66556008)(66946007)(6916009)(2906002)(956004)(2616005)(53546011)(4326008)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?qLn/jUEY7lukAFfT4kcAtS/lryaoVWmmR33zsxJ?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a11cdbcf-6fe5-45b4-6b17-08d94766e7f3
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 08:02:35.4471
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: wZ8IpxsustJwR3KDVCO0axRali5RY/SbVa619GZNGHqZ9m93jhqIfGUOTVunMWhIqqCY6BlUtghmbaqiWLZmAg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7150

Andrew,

On 15.07.2021 09:58, Jan Beulich wrote:
> the releases are due in a couple of weeks time (and 4.14.3 is
> supposed to follow another few weeks later). Please point out backports
> you find missing from the respective staging branches, but which you
> consider relevant.
> 
> Please note that 4.13.4 is going to be the last Xen Project
> coordinated release from the 4.13 branch; the branch will go into
> security-only maintenance mode after this release.

as I don't suppose "x86/cpuid: Fix HLE and RTM handling (again)" is
what you were meaning to be all that's needed to fix my backport of
"x86/cpuid: Rework HLE and RTM handling" on the 4.13 branch, would
you please either submit whatever further fix you deem necessary,
or share enough information for someone else (perhaps me) to create
such a fix?

Thanks, Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 08:12:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 08:12:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156477.288781 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wUB-0007xc-AL; Thu, 15 Jul 2021 08:12:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156477.288781; Thu, 15 Jul 2021 08:12:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wUB-0007xV-7J; Thu, 15 Jul 2021 08:12:47 +0000
Received: by outflank-mailman (input) for mailman id 156477;
 Thu, 15 Jul 2021 08:12:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wUA-0007xL-41; Thu, 15 Jul 2021 08:12:46 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wU9-0008Qc-P6; Thu, 15 Jul 2021 08:12:45 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wU9-0005i7-Hv; Thu, 15 Jul 2021 08:12:45 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wU9-0006Tn-HR; Thu, 15 Jul 2021 08:12:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=mSmo8DBYzD7DL7RY3e4f+biIogbhknxFNAiF2/Tv41U=; b=aABoF9K+mNgDdbaB/kmyfYmrZy
	093pYEiCjXMHoe7I6LD+tJTyT7d7lBTw/F65+zt0c7kMFx/JI1cDc27OwnACcaXq9gmAK+YBh59J9
	73+KLUaJGM1022JUdWsnZFS3CBFNErj/jSvqcULsor9Gf0LTs6pyGhpLdVtD1H1ke+hQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163691-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163691: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=be282b14938846960cce30825a9fe762e14ca8c9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 08:12:45 +0000

flight 163691 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163691/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 be282b14938846960cce30825a9fe762e14ca8c9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   41 days
Failing since        162368  2021-06-04 15:42:59 Z   40 days  115 attempts
Testing same since   163676  2021-07-14 08:10:10 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3827 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 08:39:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 08:39:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156486.288801 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wuB-0002cG-Dn; Thu, 15 Jul 2021 08:39:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156486.288801; Thu, 15 Jul 2021 08:39:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3wuB-0002c9-Ai; Thu, 15 Jul 2021 08:39:39 +0000
Received: by outflank-mailman (input) for mailman id 156486;
 Thu, 15 Jul 2021 08:39:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wu9-0002bz-Ib; Thu, 15 Jul 2021 08:39:37 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wu9-0000UF-Cm; Thu, 15 Jul 2021 08:39:37 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wu9-0006V5-5R; Thu, 15 Jul 2021 08:39:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3wu9-0004oj-4c; Thu, 15 Jul 2021 08:39:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=BdIMwSbpOzVXgtnq954J+dAS3Gk2uUlny9drTAfvFr4=; b=GDmAq641ry6l80ulXOra1pWTeu
	2n8dTPoD3jAtnG8j6b8AMRjLg+u3jy6/krPO/kWCkOABACb3bDwPd+MKr21iCez9WOoHeBU6NHjbo
	i66niXTNQagr0wuEvzhCzQGOz0JpVu1+XGYD1i2jAY8575ia9VWTXLip4cyyXACoWUMA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163690-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163690: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-xl-credit1:xen-boot:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 08:39:37 +0000

flight 163690 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163690/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-credit1   8 xen-boot         fail in 163671 pass in 163690
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat  fail pass in 163671

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    6 days
Failing since        163478  2021-07-09 15:23:45 Z    5 days   11 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 08:48:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 08:48:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156494.288815 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3x2Q-0004Kf-EK; Thu, 15 Jul 2021 08:48:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156494.288815; Thu, 15 Jul 2021 08:48:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3x2Q-0004KY-A9; Thu, 15 Jul 2021 08:48:10 +0000
Received: by outflank-mailman (input) for mailman id 156494;
 Thu, 15 Jul 2021 08:48:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=FYFU=MH=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m3x2P-0004KQ-8m
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 08:48:09 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.49]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fb3736d7-d1b7-47c0-897e-1544dab8908d;
 Thu, 15 Jul 2021 08:48:05 +0000 (UTC)
Received: from AS8PR04CA0103.eurprd04.prod.outlook.com (2603:10a6:20b:31e::18)
 by AM0PR08MB4561.eurprd08.prod.outlook.com (2603:10a6:208:12d::29)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 08:48:00 +0000
Received: from AM5EUR03FT041.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:31e:cafe::32) by AS8PR04CA0103.outlook.office365.com
 (2603:10a6:20b:31e::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Thu, 15 Jul 2021 08:48:00 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT041.mail.protection.outlook.com (10.152.17.186) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 08:47:58 +0000
Received: ("Tessian outbound b269bca6e298:v99");
 Thu, 15 Jul 2021 08:47:57 +0000
Received: from 0d00fb3b9e33.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 8B287BC5-3F19-4738-8F58-9E9DFC541F4D.1; 
 Thu, 15 Jul 2021 08:47:19 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0d00fb3b9e33.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 15 Jul 2021 08:47:19 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PA4PR08MB6128.eurprd08.prod.outlook.com (2603:10a6:102:f2::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 08:47:18 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%8]) with mapi id 15.20.4308.027; Thu, 15 Jul 2021
 08:47:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fb3736d7-d1b7-47c0-897e-1544dab8908d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MGaZbc2V2+MQgkWl+HlsG3dfLdDeP9IrPeXmfHHtr5U=;
 b=lY21i7dXMCQwnAce84D8VjWvAj28NcQMAq4dkvh+Kz/xjB7EVoRtshtNc9H3iNQ772uR/lf6LMywNbp17ONvVzHvMSk26/ZuY50IruzqaWW5qcig+nCzkSii0OcuHROJZbgIU1XEHX/wWUR2FkEbZ5HUBDWHlAuGjFrqtlQMfbc=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: d5649ad6b2abc74b
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gzopu85tpkh7CI0uxW0QV/0vftFZuqj9SBPlBW/7DenX5ei5xHwgVkxgQZeMrhNkRlwyZO5gB8gHlZdQkeOGX0cJX9GQCr0TPRTmjvis0IXPbfsuk1mWkNkyWohS2KNLekND/rk+XYKd7F+PkPGq0af/lZapLTbN5y33GWhqD5/4qK9hH6yQwb4H5wQUCGnU4lt4DEeXp0uj+gtVtb441hmeoPp9F/xG5WFCylugvIoeE6cyQtSvfzaBGtFEHm2iLCus1M9S7Ks5By91x8B1UpYLGflYk8M7wVYMGQMU7wZpnQ1wk/W+R8efe+Dbf4vUq/38CIWX5foe4vXyzwFTXA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MGaZbc2V2+MQgkWl+HlsG3dfLdDeP9IrPeXmfHHtr5U=;
 b=MMaDmlzXV/gLKdRjOIl7hGtLlNvDQJALiR8kd3j2+UVkCikGvu+aUb3c95IJwgXOK97nBZ64eQAV/Hq2hal9MAEn+Bjsq7hPjqBKxGjBEsZ3mQz8Ygp8zdyqUH5ptb/2ceYhcXIz5P89FYThKPvINZTBRuRaUs7DanOOfrRMB5gN3K0ycADyBMxrhgbCSZO3mI1HNa6nFsEuftEsCjT4j7ds9ofgC15XxaoMZiGbe1m0iJay0TD/E5rA+PJYUDUsFkQ2BJoIOLoeWtqTFCmKdTAmREZ3snL9jA11tGin6TThCOS1wVSjcXNuylgZ7SPXBVUlCEOAkeE0/tC8cfA/rg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MGaZbc2V2+MQgkWl+HlsG3dfLdDeP9IrPeXmfHHtr5U=;
 b=lY21i7dXMCQwnAce84D8VjWvAj28NcQMAq4dkvh+Kz/xjB7EVoRtshtNc9H3iNQ772uR/lf6LMywNbp17ONvVzHvMSk26/ZuY50IruzqaWW5qcig+nCzkSii0OcuHROJZbgIU1XEHX/wWUR2FkEbZ5HUBDWHlAuGjFrqtlQMfbc=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, "julien@xen.org"
	<julien@xen.org>, "andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>,
	"george.dunlap@citrix.com" <george.dunlap@citrix.com>, "jbeulich@suse.com"
	<jbeulich@suse.com>, "iwj@xenproject.org" <iwj@xenproject.org>, "wl@xen.org"
	<wl@xen.org>, Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH v2] SUPPORT.md: add Dom0less as Supported
Thread-Topic: [PATCH v2] SUPPORT.md: add Dom0less as Supported
Thread-Index: AQHXeQrE43zpeLksDEud9U+EI8bv5qtDufKA
Date: Thu, 15 Jul 2021 08:47:18 +0000
Message-ID: <98B90F50-C5DB-46EC-A70A-BEB7B1E99EAF@arm.com>
References: <20210714234809.30483-1-sstabellini@kernel.org>
In-Reply-To: <20210714234809.30483-1-sstabellini@kernel.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 2109d2cc-69de-422f-d915-08d9476d3f08
x-ms-traffictypediagnostic: PA4PR08MB6128:|AM0PR08MB4561:
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB4561A16457BE035B9D83760B9D129@AM0PR08MB4561.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:7691;OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 rkhJkRoeKkXPd6WezEV41ZDGRhAPeM+0Vwaq/OJQHBd2UZ8EmBX8QvVxe36V9f3ywk5HDPG+CTtHqiK2bZ+qbKIfeVFxeKG9JPrpdWKSnNKvbkOaSlobj318TEeniG1p6dKYMQ04ykTja4LqIpyCfdaqLZfTMl54jFmAFmy74CbHYp9W+IZuPqqQgq+zATspSbdg8TMFvrtboaPc2t5bdGKZH216srEzSV7WEIUkKMCUPioHytk0gvmdsUlHGiMA5tD7OUBmMZIcfsGMjaK7Puw7hI5+MF50WcuJe55OwzYvLzF0cKSVj+nFcWr3FugpAM0jRBTfYJJrd5nBZuh57llBG19Jit6Jyf+n1DrtrT5kt4e1h2/GdFPHZGmIIScoodMiznTrtHcat+SGqLDtPqUmMVPxtILg6DDj2gTpePr4jT89gjIEI1Qhb4pR8fFSlXa2ZC7zynADJnowpxxNBdR1qfO7otxu5bpUNN1qVUEjoF29ZooqgrmySGC+d6P8QVTiqWQ0Q5VLr6d+4d/ZH1gQT1bA5DTg/6Tb4n5vU4cuH/cmmw0eGgBIRQNNAbFDntYvJkLuU6B9n49NUtmHOglXc51G2QOmDFwCof7JPjUajH6zKrO9iN37qLkvdMSCIxfBUaJQhR+QqJ2jAo8+cqs+3ZsVGAoIZWKApeqtaDorN9gbLGqGw9r6VJUbwXHop4sdRO6yGejx1PNr2tKV/b26+PN8UOHse3kTYSiU+bgDJb7lNGws+at+agNy5h1S5MawFJYMzIbIL8pq22AIqg==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(39850400004)(366004)(396003)(136003)(91956017)(54906003)(86362001)(2616005)(4326008)(76116006)(8936002)(36756003)(8676002)(26005)(6486002)(186003)(122000001)(38100700002)(6916009)(83380400001)(6512007)(478600001)(4744005)(53546011)(64756008)(66446008)(66476007)(66556008)(71200400001)(2906002)(33656002)(5660300002)(66946007)(316002)(6506007)(32563001)(45980500001)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?Iwpv6i3KnQNXh0bwnmliATCpnHgvEcHKNFCI2Lp4OdMZ1PMmnInhTMvxdGWI?=
 =?us-ascii?Q?tIM2IXor0hAl3pHXOIQ8gPaRDF61zQIBKhgmmi1Mf0Yoh0S6XdEjS2TsotVw?=
 =?us-ascii?Q?ov0YBmGno80wXcesmn0PTOXqCj+MixBnPIA7j3Rp1rAvCO55xTUiD0rK063z?=
 =?us-ascii?Q?8k/ihWrqHRSxQFDttprW0tf7MaaBRAl9kElTBFEkQwplw+2YUfOpC0Ycnq6M?=
 =?us-ascii?Q?Q9U7lz1rG53xV7O/wev44EU2usljTzUJRsbgxG2MReVGoOWdtdZWGSDrjzUX?=
 =?us-ascii?Q?Ng3FApDzIm2JcPyIwLdaMpaMO+OZY4D0r8+F3DhsD7qidhKL/wA8y9N3TQI8?=
 =?us-ascii?Q?GOzNkwA5ytjFS0ZPQVFiOtr0PIVS8Iagoccx13GeutoDC424T5WLbMMRcGH4?=
 =?us-ascii?Q?ikaeiJ3gRg+8Qwz6KGaXzUDozRnYE0qJ8fbBIdZp5aPfIlYVtq/mlL525f0H?=
 =?us-ascii?Q?FaAmAyaqyJhvkk3zv3pv2dbar9ibJ/9FVZ49hc7ZDySg/ChwGDN0X/XSzBpS?=
 =?us-ascii?Q?osODmZ9gJzQgHmnlcGDVZQBMFacgz8y+5xVErYw9BYuGf7DRI+PwjcF+e7dY?=
 =?us-ascii?Q?Oos9zZgMt2/JiusroIlEG8YQDU3LlivN2ZNVYWMq7pslQGVUh6k7+dgMXbg0?=
 =?us-ascii?Q?PZerVu05qeiht/WCU7pVDO4H98InHKPpc6Il1ee0kou0fMxFEw9AuN+Yp7Qh?=
 =?us-ascii?Q?Im/cpwCbHLux1dRi4YQ37JwzzoAS+dij/4sz9QmvoFh++8IMBV5fkKipOmtY?=
 =?us-ascii?Q?gI4Rpi3xeeoCkKGAAR+He2Kl0gmrWjqsGfyfuUpxLSaw0rA3nUP+n+6xtv0O?=
 =?us-ascii?Q?zdr1xobEsg1phIWA60k9anLVa+D2ME3zsAyepORwQ7e418AHSCvS6V0AkYR1?=
 =?us-ascii?Q?bVtiMZAomr8q1PCptGc1RObyT2IeTR/T0itgqYj25YupklcQNdnaoOzyOQ/D?=
 =?us-ascii?Q?zUCibLHYC0J7DH61Cth3KckFnd5WwjwloJw6l1YMnRCSAUzL3BOgNCEfqNOE?=
 =?us-ascii?Q?GApahEQo0Hp+BE4JphcHahsRrhOas+w6yWT7/RhbObwOJPNUleWGRmeiSyzb?=
 =?us-ascii?Q?jft0nT6u7KhmK9HPzIPYhhBamw1b1IPKfvjW2BOl8wzfnlLlNrgp88WJp54G?=
 =?us-ascii?Q?pcCwR9ERvlvp358ud2iVDimJs6qsw55Q4UhZD1eqtWE8iu7VUZddUN3iJbvT?=
 =?us-ascii?Q?yOMQtYVjGJ6oCmT6Nj+wyrrl6NxNjy3+Ha7ZDCiVMx4sC9IlI8e2WHYb88RN?=
 =?us-ascii?Q?nNlrp7Fc3IC0MoATnlJyh0YjbUWCExssvzQX+CqTK0XlXI+GxUSznZ27/zua?=
 =?us-ascii?Q?Xc3l6gH8qqkPWIdCOHGfLIFb?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="us-ascii"
Content-ID: <08972FF66B1D9C4C968A9398FDC98A69@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6128
Original-Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT041.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	035a2129-5f70-4c9a-23be-08d9476d2782
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	oKAiLRBpr2z2IXReRXk1mCofPQG+2Ly3h15QcMkxrj+S9jIxps4Zk8si9iY6ns5E4xJ975s8pzRH4Tl2SXAREUURYYWy5dQHF/OQCYExpw73NlW15jCE/sQW7ciNHs7SvDhSdu71jNBy8uu/7AbWtGc1lBHHMwhuL3bpCUlv5WJoj1gHRa+21PHiRBwVQj8vpQY9lbGEzbzsvGE7BrlI/2C0YPWJVF43fZDUnhZ6/ssHiTNQB3j8KNfsRV3SsspslbCqjNQyUmTuHZcuqX7NmO+6gZ3XsZHGeqBhhbf4rzcTQ5CK2QKHfdGSe1gu9Vz9ZnJazMzluLnHZilMQZQdDMl5wbOMsccDswJpHiXWWSPpji35SMUyjEKUaXXWu0gdgKvbXCMjlgwv9UBS72ANvx7lUVOXaRhTzMEAJdlZTq0E4rp6hQhRDt1mnXQINwhVjcfFIiyBDjTs2wIofMru0zAoblrx9vBOFI880rVgj9o9tA2iLrUQYvvMcq5MX/LV0iC9wJAQjTYFGQl71JyRuAM6DfyJJ40Kyc0lZKxVWYJ3Dd8dFAlZ0zg5jVy5TvsuYHBR+FeACwP++UrA/HuKldkxgVxM7cNvu840M87dn0jvxMQhKiH25Wg+zFiLrzf3ui73PzuNpTPQCFRO8o/B3l0jqJhPl5wcbzHjvV37XgdtgTWLGMCmFAHeb0XYfrim8mlJ2rHtjDso/JtkQJg2fKvSJFFfuaiJ+iiZCQm02EI=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(376002)(39850400004)(396003)(346002)(46966006)(36840700001)(2906002)(36860700001)(70206006)(107886003)(186003)(33656002)(356005)(2616005)(70586007)(83380400001)(4326008)(82310400003)(6506007)(86362001)(82740400003)(6862004)(81166007)(47076005)(8936002)(336012)(316002)(478600001)(54906003)(26005)(53546011)(6486002)(36756003)(8676002)(6512007)(5660300002)(32563001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 08:47:58.3537
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 2109d2cc-69de-422f-d915-08d9476d3f08
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT041.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4561

Hi Stefano,


> On 15 Jul 2021, at 00:48, Stefano Stabellini <sstabellini@kernel.org> wro=
te:
>=20
> Add Dom0less to SUPPORT.md to clarify its support status. The feature is
> mature enough and small enough to make it security supported.
>=20
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

Cheers
Bertrand

> ---
> Changes in v2:
> - clarify memory scrubbing
> ---
> SUPPORT.md | 9 +++++++++
> 1 file changed, 9 insertions(+)
>=20
> diff --git a/SUPPORT.md b/SUPPORT.md
> index 317392d8f3..524cab9c8d 100644
> --- a/SUPPORT.md
> +++ b/SUPPORT.md
> @@ -832,6 +832,15 @@ OVMF firmware implements the UEFI boot protocol.
>=20
>     Status, qemu-xen: Supported
>=20
> +## Dom0less
> +
> +Guest creation from the hypervisor at boot without Dom0 intervention.
> +
> +    Status, ARM: Supported
> +
> +Memory of dom0less DomUs is not scrubbed at boot (even with
> +bootscrub=3Don); no XSAs will be issues due to unscrubbed memory.
> +
> # Format and definitions
>=20
> This file contains prose, and machine-readable fragments.
> --=20
> 2.17.1
>=20
>=20



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 08:58:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 08:58:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156500.288826 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xCP-00065a-DN; Thu, 15 Jul 2021 08:58:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156500.288826; Thu, 15 Jul 2021 08:58:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xCP-00065T-AA; Thu, 15 Jul 2021 08:58:29 +0000
Received: by outflank-mailman (input) for mailman id 156500;
 Thu, 15 Jul 2021 08:58:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3xCO-00065K-Az
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 08:58:28 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 203a657e-0e4b-44da-86fc-c67d8efc24ad;
 Thu, 15 Jul 2021 08:58:27 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2058.outbound.protection.outlook.com [104.47.8.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-12-tXVZ4WaKNC2_hfP8-HvVrA-1; Thu, 15 Jul 2021 10:58:25 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 15 Jul
 2021 08:58:24 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 08:58:23 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0023.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::28) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4242.21 via Frontend Transport; Thu, 15 Jul 2021 08:58:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 203a657e-0e4b-44da-86fc-c67d8efc24ad
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626339506;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=hqcna9SWKCnaSj7E4AYJ5gRi+tzyFWaYJmCoWD4nQsM=;
	b=XyXdtEI4wLdi/v2OvXWlBd9Vax9NhC+uquV5VcaHbKa13s3uDwn40uLu5Z89qX6O88t8uh
	WeZ6KLYlyahHeacko0lGZa9SkovtXqzCWZhi0hL9LFwdQe0Xlv7gUaeo3pIWPr5UcVI7TO
	eZZmUN/tUKHFzhZlFhvFZHVJbBVEVTk=
X-MC-Unique: tXVZ4WaKNC2_hfP8-HvVrA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QdjFV7FlYfK4v+JEVhSoBYia7NdtUMhDjo09orxU4u2qfKjtmTo1XNSFI2la8LWa4e4IOi/a6GWKbm8XglAOA25FdKchK37f24+fyZ1ax+Vk+SisG7unjEs7ZyySLODY4BI7ViGaNpza0ixN8y4toiv5jnaKJYD5rzmB5nyPqxKxg3qmZXZFltvpJc+cOqcC0U8UXApZrgXfxCt2ymMKSIyXS8W50cB5xKby9A6Y+nsvrVSpsyDfC9BcIvbTqZj4MpGmXPHoo0dYjSlANq9Tza0R3OxA/laWXZe7KyQMKxX7vZxewwim2xMQpnTeeM7KYPOyTlG3AG/mqHqQTjihpQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hqcna9SWKCnaSj7E4AYJ5gRi+tzyFWaYJmCoWD4nQsM=;
 b=nzShSaCtILwtOhLREh8WOvBQ6Y6BifUikt5N0lkYL6uIVkRiH/2SQ+NJpCVyun7Rp91N8CYT4iz3Oea+AJePZ3PVQ9BAYC60e8K0anUGpn2LaS986SaAmCuaT+d/ncsX5auVs2EAnA3y8JVLPtGE1gS/d5Py7fa78fSti7tVThbiU7i95PiLjLeDiCf0jifWiJ21JiDM+s+Q0DaHgzyZivFntwP6BJ2H5CJt6TDoFlIU9yf6/qMCCZlqO5qSOgapsHRxy+pL1HV40iZsXg5hz6nsnd86LdQv+0RQMhBTPNwtKtYiXlK5eh0UK5Lt3CmSqFVV2eSFhrUKOkJVv3kiSA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH] xen-netback: correct success/error reporting for the
 SKB-with-fraglist case
From: Jan Beulich <jbeulich@suse.com>
To: paul@xen.org, Wei Liu <wl@xen.org>,
 "netdev@vger.kernel.org" <netdev@vger.kernel.org>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <4dd5b8ec-a255-7ab1-6dbf-52705acd6d62@suse.com>
 <67bc0728-761b-c3dd-bdd5-1a850ff79fbb@xen.org>
 <76c94541-21a8-7ae5-c4c4-48552f16c3fd@suse.com>
 <17e50fb5-31f7-60a5-1eec-10d18a40ad9a@xen.org>
 <57580966-3880-9e59-5d82-e1de9006aa0c@suse.com>
 <a26c1ecd-e303-3138-eb7e-96f0203ca888@xen.org>
 <1a522244-4be8-5e33-77c7-4ea5cf130335@suse.com>
Message-ID: <9d27a3eb-1d50-64bb-8785-81de1eef3102@suse.com>
Date: Thu, 15 Jul 2021 10:58:21 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <1a522244-4be8-5e33-77c7-4ea5cf130335@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0023.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:54::28) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8a57244f-81ac-4d80-ec9d-08d9476eb3b3
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26081A2A024EEAC4C093BEC3B3129@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	sfaXrq3B+9p1PwOuMJF0Z72ZSdXfxgxa72mHSrPEVzvNz5r7pFoDiF71VK57JRdBK6nja9yYPyW3Y1pRYMMrKKFWSG9jmJKY7xSgO6UFI6v+KV0H5fS3krwRkltJvT9eParDcDvL56bQQLtkOSOav9X8X8oWLnnvL8eZUjJdNyuoj3JQs70J4L+HeD0kdQhM39MLe4OenrqvTTVNilzXu9bGeFV7McBaVMLr+dK20Gcdy0CkxfXLN7Y3qeEbtMRnBQzV0lkGEwd4EFl2uuws8NYky4aY1o6VSDtQQ4UDWbCeqYVRuTNNAd6E951NGpNi0k4+WKXZkWDZdBM3L5fJfwb0NgUj9LXwO/FM6VM6G/Fao5YJIQ+oO7GMBZ4I0XtydH02R/ZN8tCz3L3b76v/wi3Vz+LC3fD6sQONQe29SfxqLeODntsKpVxws647ChSSKyu7OMktN0H2Iq3ISi82upX+6kdDk8+7Blct4Y3FcOJeI58KeVYers/MLsmH8sVpHLovyDghc4Hjm2gUHo4iwCShZGOTugLSta5oMgKLMqCBduHiCikt4ZldFUkTX0TeWl2pH+fz3JUWr0DNlBMbIIQWiBlE6e/jCrSu9/fN71gdBzIKJB4RE0VEJ/Sp4VMN+Zm1UcNEWS/R8t8vzgqYRL0f4v31GzXLGJbSH/Dn17c11tPzSzAjgReTSJkyW6CBAO03BHEWs5WJZw7LD+MCXNSEO2nw9L2Gop3ClEZCJyc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(4326008)(316002)(8676002)(478600001)(31696002)(16576012)(8936002)(5660300002)(53546011)(110136005)(186003)(38100700002)(6486002)(31686004)(86362001)(26005)(36756003)(2906002)(66946007)(66476007)(66556008)(2616005)(956004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 8a57244f-81ac-4d80-ec9d-08d9476eb3b3
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 08:58:23.8412
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: AB9GG8oRwou5ZfRlk+cBf8C7KxdBSWQDwvmnJ9akGMeC8F71BhG1A14ovuOWhDfUAs6PDdJho+mbfsnRN+F8fw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

On 20.05.2021 13:46, Jan Beulich wrote:
> On 25.02.2021 17:23, Paul Durrant wrote:
>> On 25/02/2021 14:00, Jan Beulich wrote:
>>> On 25.02.2021 13:11, Paul Durrant wrote:
>>>> On 25/02/2021 07:33, Jan Beulich wrote:
>>>>> On 24.02.2021 17:39, Paul Durrant wrote:
>>>>>> On 23/02/2021 16:29, Jan Beulich wrote:
>>>>>>> When re-entering the main loop of xenvif_tx_check_gop() a 2nd time, the
>>>>>>> special considerations for the head of the SKB no longer apply. Don't
>>>>>>> mistakenly report ERROR to the frontend for the first entry in the list,
>>>>>>> even if - from all I can tell - this shouldn't matter much as the overall
>>>>>>> transmit will need to be considered failed anyway.
>>>>>>>
>>>>>>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>>>>>>>
>>>>>>> --- a/drivers/net/xen-netback/netback.c
>>>>>>> +++ b/drivers/net/xen-netback/netback.c
>>>>>>> @@ -499,7 +499,7 @@ check_frags:
>>>>>>>     				 * the header's copy failed, and they are
>>>>>>>     				 * sharing a slot, send an error
>>>>>>>     				 */
>>>>>>> -				if (i == 0 && sharedslot)
>>>>>>> +				if (i == 0 && !first_shinfo && sharedslot)
>>>>>>>     					xenvif_idx_release(queue, pending_idx,
>>>>>>>     							   XEN_NETIF_RSP_ERROR);
>>>>>>>     				else
>>>>>>>
>>>>>>
>>>>>> I think this will DTRT, but to my mind it would make more sense to clear
>>>>>> 'sharedslot' before the 'goto check_frags' at the bottom of the function.
>>>>>
>>>>> That was my initial idea as well, but
>>>>> - I think it is for a reason that the variable is "const".
>>>>> - There is another use of it which would then instead need further
>>>>>     amending (and which I believe is at least part of the reason for
>>>>>     the variable to be "const").
>>>>>
>>>>
>>>> Oh, yes. But now that I look again, don't you want:
>>>>
>>>> if (i == 0 && first_shinfo && sharedslot)
>>>>
>>>> ? (i.e no '!')
>>>>
>>>> The comment states that the error should be indicated when the first
>>>> frag contains the header in the case that the map succeeded but the
>>>> prior copy from the same ref failed. This can only possibly be the case
>>>> if this is the 'first_shinfo'
>>>
>>> I don't think so, no - there's a difference between "first frag"
>>> (at which point first_shinfo is NULL) and first frag list entry
>>> (at which point first_shinfo is non-NULL).
>>
>> Yes, I realise I got it backwards. Confusing name but the comment above 
>> its declaration does explain.
>>
>>>
>>>> (which is why I still think it is safe to unconst 'sharedslot' and
>>>> clear it).
>>>
>>> And "no" here as well - this piece of code
>>>
>>> 		/* First error: if the header haven't shared a slot with the
>>> 		 * first frag, release it as well.
>>> 		 */
>>> 		if (!sharedslot)
>>> 			xenvif_idx_release(queue,
>>> 					   XENVIF_TX_CB(skb)->pending_idx,
>>> 					   XEN_NETIF_RSP_OKAY);
>>>
>>> specifically requires sharedslot to have the value that was
>>> assigned to it at the start of the function (this property
>>> doesn't go away when switching from fragments to frag list).
>>> Note also how it uses XENVIF_TX_CB(skb)->pending_idx, i.e. the
>>> value the local variable pending_idx was set from at the start
>>> of the function.
>>>
>>
>> True, we do have to deal with freeing up the header if the first map 
>> error comes on the frag list.
>>
>> Reviewed-by: Paul Durrant <paul@xen.org>
> 
> Since I've not seen this go into 5.13-rc, may I ask what the disposition
> of this is?

I can't seem to spot this in 5.14-rc either. I have to admit I'm
increasingly puzzled ...

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 09:02:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 09:02:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156506.288836 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xGC-0007UQ-V3; Thu, 15 Jul 2021 09:02:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156506.288836; Thu, 15 Jul 2021 09:02:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xGC-0007UJ-RZ; Thu, 15 Jul 2021 09:02:24 +0000
Received: by outflank-mailman (input) for mailman id 156506;
 Thu, 15 Jul 2021 09:02:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=6+WB=MH=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m3xGB-0007UB-Ce
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 09:02:23 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5d148126-e54b-11eb-8897-12813bfff9fa;
 Thu, 15 Jul 2021 09:02:21 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5d148126-e54b-11eb-8897-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626339741;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=bu1VDy0xFTS1HuIHDok0dJq62JEUq81hAhR736lsJKs=;
  b=bfMugtvFPEONQN4fVDvNCkHPQTXYzsr+KEedR5PKVgIyOLiDUARwYOfI
   7fwpHjXrgUZS20ryEPVNrrN/ihIOl9az+K0IM5DuYPzevXa0YY2hSgMVD
   YScFMTdogzMDjgU1VeaB5hL2FCCAgWqoJ2moOqg4QOXAzE/iSuwdyW/pg
   Q=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Gc/So5KyrEhyb9C1Uc5OiI18XXz3njGXqh5uNiWzl+bhOBrAZVXbKWYykQJIUq3GQ5oSbhT4J3
 +JFF8ihViKqpzk77uGeipWDuaE7IxN61zpS54Cz7p+nLOnsvuOGqUF2d+dk/J3emlxcoz8X3sB
 1gmfYoQSzcOLKYlGCuqaxXxfP0fL4gHmhkXyjBseFBD3pfEC2LG9DUnKx2u9V7vb/KTFlLhD6A
 LbpdGA/bvPX73Id1wEXdDRKoZ5R4GrR3XosZjQuEnG9HkLgTmb57Ht1SYHyYnXZbCOKmVSNGFr
 YRs=
X-SBRS: 5.1
X-MesageID: 48322015
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:YG3PdKjhA2aRQKV9FQid57cWqnBQXuAji2hC6mlwRA09TyX4rb
 HWoB1/737JYVkqOE3I9erwW5VoIkmsk6Kdg7NhWYtKNTOO0ADDQe4N0WKF+UyDJ8SUzJ876U
 4PSdkaNPTASWJzhs6/2gmkH78bsaG6GX+T6dvj8w==
X-IronPort-AV: E=Sophos;i="5.84,240,1620705600"; 
   d="scan'208";a="48322015"
Date: Thu, 15 Jul 2021 10:02:12 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>, Ian Jackson <ian.jackson@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Ian
 Jackson" <ian.jackson@citrix.com>, George Dunlap <george.dunlap@citrix.com>,
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>, "Julien
 Grall" <julien@xen.org>
Subject: Re: preparations for 4.15.1 and 4.13.4
Message-ID: <YO/5lPNSjjY0NQZx@perard>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>

Can we backport support of QEMU 6.0 to Xen 4.15? I'm pretty sure
distributions are going to want to use the latest QEMU and latest Xen,
without needed to build two different QEMU binaries.

[XEN PATCH v2 0/8] Fix libxl with QEMU 6.0 + remove some more deprecated usages.
<20210511092810.13759-1-anthony.perard@citrix.com>
Commits: d5f54009db^..fe6630ddc4

Some more QEMU 6.0 fixes
<20210628100157.5010-1-anthony.perard@citrix.com>
Commits: 217eef30f7  3bc3be978f


Also, Olaf want them to be backported to 4.14, see
    <20210629095952.7b0b94c1.olaf@aepfle.de>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 09:05:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 09:05:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156513.288851 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xJK-0008Es-I3; Thu, 15 Jul 2021 09:05:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156513.288851; Thu, 15 Jul 2021 09:05:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xJK-0008El-F3; Thu, 15 Jul 2021 09:05:38 +0000
Received: by outflank-mailman (input) for mailman id 156513;
 Thu, 15 Jul 2021 09:05:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3xJK-0008Ef-2Z
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 09:05:38 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3xJJ-0000xH-1r; Thu, 15 Jul 2021 09:05:37 +0000
Received: from gw1.octic.net ([81.187.162.82] helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3xJI-0006FG-Sf; Thu, 15 Jul 2021 09:05:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=cAibhIT296tsC4ekydtfglRXOdKiHz4wp52UqkT1R1g=; b=NdbLJcldaaTv4oABonr6cEFQHy
	OPvJ9ab5k/71CQGsn0csBp69hPDcDyfhbopzLFXe3pxGhs2AUEQXNrTtXiWSBJYMQisIFcyf3d3d7
	PcD1qGsGFnPLSQpeCRbNEY/3sL5cnhq7+qpPJHMY+rBuDFqudmCO4xdsPqF2ngjZczUw=;
Subject: Re: [PATCH v2 13/13] SUPPORT.md: write down restriction of 32-bit
 tool stacks
To: Jan Beulich <jbeulich@suse.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
 <e12989f7-9217-e2b8-a17d-5c252dc89248@xen.org>
 <dfc17ae6-2100-cb27-9826-1f6001788707@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <870cae2b-5601-b10b-926b-0995e661ffc1@xen.org>
Date: Thu, 15 Jul 2021 10:05:34 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <dfc17ae6-2100-cb27-9826-1f6001788707@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 15/07/2021 07:38, Jan Beulich wrote:
> On 14.07.2021 20:16, Julien Grall wrote:
>> On 05/07/2021 16:18, Jan Beulich wrote:
>>> Let's try to avoid giving the impression that 32-bit tool stacks are as
>>> capable as 64-bit ones.
>>
>> Would you be able to provide a few examples of the known issues in the
>> commit message? This would be helpful for anyone to understand why we
>> decided to drop the support.
> 
> Not sure how useful this is going to be.

It would at least be useful to me, so I can make an informed decision. I 
suspect it would also be for anyone reading it in the future. This is 
rather frustrating to find commit message with barely any rationale and 
no-one remembering why this was done...

I vaguely recall a discussion about 64-bit hypercall ([1]). I assume the 
decision to drop support is related to it, but I have no way to prove it 
from the commit message.

It is also not clear why adding the restriction is the way to go...

> This would be pointing at the
> declarations / definitions of various tool stack internal variables or
> structure fields. Which also is why ...

... is this because such issues are too widespread in libxc/libxl to fix 
it in long term?

> 
>> At least on Arm, we tried to design the hypercall ABI in such a way that
>> it should be possible to use a 32-bit toolstack.
> 
> ... keeping the ABI tidy in this regard didn't help at all (albeit it
> of course was a prereq to writing a tool stack that would be capable).
> 
> Jan
> 

[1] 
https://lore.kernel.org/xen-devel/71b8a4f1-9c18-36e7-56b1-3f1b1dabddd6@suse.com/

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 09:10:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 09:10:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156520.288862 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xO5-0001SD-5U; Thu, 15 Jul 2021 09:10:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156520.288862; Thu, 15 Jul 2021 09:10:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xO5-0001S6-18; Thu, 15 Jul 2021 09:10:33 +0000
Received: by outflank-mailman (input) for mailman id 156520;
 Thu, 15 Jul 2021 09:10:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m3xO4-0001Ru-1k
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 09:10:32 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3xO0-00012W-M0; Thu, 15 Jul 2021 09:10:28 +0000
Received: from [54.239.6.184] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m3xO0-0006kZ-FU; Thu, 15 Jul 2021 09:10:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=3VpwnA7N1alMfr8qHWgGgPzsnqkGYoQ2phRHSIBRvWA=; b=fr1jAxmMqA6LoKF39iNjTa605P
	x/XLsYl7+PZ5mct9d2iI+zjHcRGzCnc/OlJ60BGImt1FOyvGEyHNi2Ia8wJ1z+LvB1ni+8OJkncpj
	dPZjY8Cj5iWll9OUKwtGXWJOKDCAyYjPB3dGA8XPHWEhhamFHpDMjnDaxsKGAY4FbrDs=;
Subject: Re: [PATCH v2] SUPPORT.md: add Dom0less as Supported
To: Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org
Cc: andrew.cooper3@citrix.com, george.dunlap@citrix.com, jbeulich@suse.com,
 iwj@xenproject.org, wl@xen.org,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
References: <20210714234809.30483-1-sstabellini@kernel.org>
From: Julien Grall <julien@xen.org>
Message-ID: <04d06f53-4489-1a08-e744-fa36679a2287@xen.org>
Date: Thu, 15 Jul 2021 10:10:26 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210714234809.30483-1-sstabellini@kernel.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 15/07/2021 00:48, Stefano Stabellini wrote:
> Add Dom0less to SUPPORT.md to clarify its support status. The feature is
> mature enough and small enough to make it security supported.

I would suggest to explain the restriction in the commit message (and 
give a link to XSA-372 commit).

> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> ---
> Changes in v2:
> - clarify memory scrubbing
> ---
>   SUPPORT.md | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/SUPPORT.md b/SUPPORT.md
> index 317392d8f3..524cab9c8d 100644
> --- a/SUPPORT.md
> +++ b/SUPPORT.md
> @@ -832,6 +832,15 @@ OVMF firmware implements the UEFI boot protocol.
>   
>       Status, qemu-xen: Supported
>   
> +## Dom0less
> +
> +Guest creation from the hypervisor at boot without Dom0 intervention.
> +
> +    Status, ARM: Supported
> +
> +Memory of dom0less DomUs is not scrubbed at boot (even with
> +bootscrub=on); no XSAs will be issues due to unscrubbed memory.

The memory will not be scrubbed for bootscrub=on and bootscrub=off. 
However, it should be scrubbed for bootscrub=idle (the default).

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 09:16:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 09:16:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156527.288876 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xTx-0002NA-St; Thu, 15 Jul 2021 09:16:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156527.288876; Thu, 15 Jul 2021 09:16:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xTx-0002N3-PO; Thu, 15 Jul 2021 09:16:37 +0000
Received: by outflank-mailman (input) for mailman id 156527;
 Thu, 15 Jul 2021 09:16:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=u0p9=MH=redhat.com=vkuznets@srs-us1.protection.inumbo.net>)
 id 1m3xTw-0002Mx-E7
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 09:16:36 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [216.205.24.124])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 6e8784d2-9e60-4d93-9a65-b9728f8f4f4c;
 Thu, 15 Jul 2021 09:16:35 +0000 (UTC)
Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com
 [209.85.218.72]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-521-76S1QWT3Mf6HcuRBsgdy8g-1; Thu, 15 Jul 2021 05:16:33 -0400
Received: by mail-ej1-f72.google.com with SMTP id
 k1-20020a17090666c1b029041c273a883dso1953924ejp.3
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 02:16:33 -0700 (PDT)
Received: from vitty.brq.redhat.com (g-server-2.ign.cz. [91.219.240.2])
 by smtp.gmail.com with ESMTPSA id q9sm1608796ejf.70.2021.07.15.02.16.31
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 15 Jul 2021 02:16:31 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6e8784d2-9e60-4d93-9a65-b9728f8f4f4c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1626340595;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type;
	bh=rQkCwB3PjmSSNkHN1xOfrruRwkpvkiUrPRk/ObYbxmg=;
	b=NbChIgxj507ClMpaN8m9o8aFF/8Nzmcvp0XiW30kGt5RombUdeAV98aTR9uy/MiwBL2SgG
	d9hniWh3xxk8nzLx5UJmAtBIa2YUNUiuBtRyAQHcSYhiu6EKBWeilaIoVoYYb0K1+Y/wp4
	Spor/MGKGJBYm6GGukGYoiBQT61jwrQ=
X-MC-Unique: 76S1QWT3Mf6HcuRBsgdy8g-1
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version;
        bh=rQkCwB3PjmSSNkHN1xOfrruRwkpvkiUrPRk/ObYbxmg=;
        b=JWUIFQGELRSo8hj6XSlEDsCgwwz+wUsuJoFO7QxHTakc4SQE5GhUoM3ZdyiXzHcUNP
         kxdrn/ADR+rzXRYEJc/RTZJ2fVp/sHHkoUdgxssj59b4/4InZhrQii2CCJq1W/zIAnXp
         QQQWZbVgjxy/UvP32SigaLdAZjdqfZ1v4Yksn72ocarjjuHr4wg2mV1vvryRaimy8jfw
         E9tVx8tGlXvkcCDFIbOos7uUnU2StzI+pz0c2WH6Wh8ynqMVD2v/OG6CpbFbd+tyyHZb
         SB66e4v56cKSBNOtP7o2MoGEMgIKMva5XicMuNRf1py0OdnMHxNiHsbuoojO+dz6fKXD
         NJbA==
X-Gm-Message-State: AOAM531HH6rpjzA/kRBW6WMztoR99NFmBr23r6O5yTwcSJnXmC8o01dq
	t9t7w9tVlYYi1TujMgkOB2b87YHcY5Amm48G5p3BnBIxlsbeplBfMBfKlbTA2VG4IC7KOX1gXd+
	W4iWI/UXKOEI+U9DFctT4IjKxHwI=
X-Received: by 2002:a17:907:2d23:: with SMTP id gs35mr4464164ejc.222.1626340592562;
        Thu, 15 Jul 2021 02:16:32 -0700 (PDT)
X-Google-Smtp-Source: ABdhPJzrF1DeIlWLw3NJml16Su+o7SSbmg9PG4wFP14gBmcJwEXfXtkYQ4qqpERXjhYqJbulctjJhg==
X-Received: by 2002:a17:907:2d23:: with SMTP id gs35mr4464141ejc.222.1626340592359;
        Thu, 15 Jul 2021 02:16:32 -0700 (PDT)
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: xen-devel@lists.xenproject.org
Cc: linux-block@vger.kernel.org, Boris Ostrovsky
 <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, Stefano
 Stabellini <sstabellini@kernel.org>, Konrad Rzeszutek Wilk
 <konrad.wilk@oracle.com>, =?utf-8?Q?Roger_Pau_Monn=C3=A9?=
 <roger.pau@citrix.com>,
 Christoph Hellwig <hch@lst.de>
Subject: [BUG report] Deadlock in xen-blkfront upon device hot-unplug
Date: Thu, 15 Jul 2021 11:16:30 +0200
Message-ID: <87pmvk0wep.fsf@vitty.brq.redhat.com>
MIME-Version: 1.0
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=vkuznets@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain

I'm observing a deadlock every time I try to unplug a xen-blkfront
device. With 5.14-rc1+ the deadlock looks like:

[  513.682405] ============================================
[  513.686617] WARNING: possible recursive locking detected
[  513.691020] 5.14.0-rc1+ #370 Not tainted
[  513.694272] --------------------------------------------
[  513.698528] xenwatch/144 is trying to acquire lock:
[  513.702424] ffff96dc4a4c1d28 (&disk->open_mutex){+.+.}-{3:3}, at: del_gendisk+0x53/0x210
[  513.708768] 
               but task is already holding lock:
[  513.713320] ffff96dc4a4c1d28 (&disk->open_mutex){+.+.}-{3:3}, at: blkback_changed+0x118/0xeb9 [xen_blkfront]
[  513.720369] 
               other info that might help us debug this:
[  513.724901]  Possible unsafe locking scenario:

[  513.729241]        CPU0
[  513.731326]        ----
[  513.733404]   lock(&disk->open_mutex);
[  513.736679]   lock(&disk->open_mutex);
[  513.739988] 
                *** DEADLOCK ***

[  513.745524]  May be due to missing lock nesting notation

[  513.751438] 2 locks held by xenwatch/144:
[  513.755344]  #0: ffffffff8c9f3c70 (xenwatch_mutex){+.+.}-{3:3}, at: xenwatch_thread+0xe6/0x190
[  513.762137]  #1: ffff96dc4a4c1d28 (&disk->open_mutex){+.+.}-{3:3}, at: blkback_changed+0x118/0xeb9 [xen_blkfront]
[  513.770381] 
               stack backtrace:
[  513.774785] CPU: 1 PID: 144 Comm: xenwatch Not tainted 5.14.0-rc1+ #370
[  513.780131] Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
[  513.785097] Call Trace:
[  513.787920]  dump_stack_lvl+0x6a/0x9a
[  513.791223]  __lock_acquire.cold+0x14a/0x2ba
[  513.794918]  ? mark_held_locks+0x50/0x80
[  513.798453]  lock_acquire+0xd3/0x2f0
[  513.801819]  ? del_gendisk+0x53/0x210
[  513.805334]  ? kernfs_put.part.0+0xe8/0x1b0
[  513.808905]  ? del_gendisk+0x53/0x210
[  513.812230]  __mutex_lock+0x8d/0x8c0
[  513.815415]  ? del_gendisk+0x53/0x210
[  513.818931]  ? kernfs_put.part.0+0xe8/0x1b0
[  513.822594]  del_gendisk+0x53/0x210
[  513.825782]  xlvbd_release_gendisk+0x6f/0xb0 [xen_blkfront]
[  513.830186]  blkback_changed+0x20e/0xeb9 [xen_blkfront]
[  513.834458]  ? xenbus_read_driver_state+0x39/0x60
[  513.838540]  xenwatch_thread+0x94/0x190
[  513.841936]  ? do_wait_intr_irq+0xb0/0xb0
[  513.845451]  ? xenbus_dev_request_and_reply+0x90/0x90
[  513.849885]  kthread+0x149/0x170
[  513.853039]  ? set_kthread_struct+0x40/0x40
[  513.857027]  ret_from_fork+0x22/0x30

My suspicion is that the problem was introduced by:

commit c76f48eb5c084b1e15c931ae8cc1826cd771d70d
Author: Christoph Hellwig <hch@lst.de>
Date:   Tue Apr 6 08:22:56 2021 +0200

    block: take bd_mutex around delete_partitions in del_gendisk

blkfront_closing() takes '&bdev->bd_disk->open_mutex' around
xlvbd_release_gendisk() call which in its turn calls del_gendisk() which
after the above mentioned commit tries to take the same mutex. I may be
completely wrong though.

If I try to avoid taking the mutex from blkfront_closing(): 

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8d49f8fa98bb..9af6831492d4 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -2145,8 +2145,6 @@ static void blkfront_closing(struct blkfront_info *info)
                return;
        }
 
-       mutex_lock(&bdev->bd_disk->open_mutex);
-
        if (bdev->bd_openers) {
                xenbus_dev_error(xbdev, -EBUSY,
                                 "Device in use; refusing to close");
@@ -2156,7 +2154,6 @@ static void blkfront_closing(struct blkfront_info *info)
                xenbus_frontend_closed(xbdev);
        }
 
-       mutex_unlock(&bdev->bd_disk->open_mutex);
        bdput(bdev);
 }
 
the situation becomes even worse:

[   74.371465] general protection fault, probably for non-canonical address 0xb0fa8ce8ee8a2234: 0000 [#1] SMP PTI
[   74.381294] CPU: 3 PID: 144 Comm: xenwatch Not tainted 5.14.0-rc1+ #370
[   74.386172] Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
[   74.390918] RIP: 0010:del_timer+0x1f/0x80
[   74.394282] Code: 71 af a3 00 eb c1 31 c0 c3 66 90 0f 1f 44 00 00 41 55 41 54 45 31 e4 55 48 83 ec 10 65 48 8b 04 25 28 00 00 00 48 89 44 24 08 <48> 8b 47 08 48 85 c0 74 2d 48 89 e6 48 89 fd e8 dd e8 ff ff 48 89
[   74.407591] RSP: 0018:ffffbab68423bcc8 EFLAGS: 00010082
[   74.411691] RAX: dd931e09aefb8f00 RBX: b0fa8ce8ee8a21dc RCX: 0000000000005e7f
[   74.417041] RDX: 0000000000005e80 RSI: 0000000000000001 RDI: b0fa8ce8ee8a222c
[   74.422425] RBP: ffffbab68423bd20 R08: 0000000000000001 R09: 0000000000000001
[   74.427595] R10: 0000000000000001 R11: 0000000000000002 R12: 0000000000000000
[   74.432886] R13: ffffa0484f3e4000 R14: 0000000000000000 R15: ffffa0484691c000
[   74.438784] FS:  0000000000000000(0000) GS:ffffa083c8e00000(0000) knlGS:0000000000000000
[   74.444592] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   74.448917] CR2: 00007ff618903ff8 CR3: 0000000111e16001 CR4: 00000000001706e0
[   74.454309] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   74.460128] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   74.465872] Call Trace:
[   74.468467]  try_to_grab_pending+0x13f/0x2e0
[   74.472202]  cancel_delayed_work+0x2e/0xd0
[   74.475980]  blk_mq_stop_hw_queues+0x2d/0x50
[   74.479732]  blkfront_remove+0x40/0x210 [xen_blkfront]
[   74.484154]  xenbus_dev_remove+0x6d/0xf0
[   74.487872]  __device_release_driver+0x180/0x240
[   74.491561]  device_release_driver+0x26/0x40
[   74.497134]  bus_remove_device+0xef/0x160
[   74.500180]  device_del+0x18c/0x3e0
[   74.503451]  ? xenbus_probe_devices+0x120/0x120
[   74.506975]  ? klist_iter_exit+0x14/0x20
[   74.511649]  device_unregister+0x13/0x60
[   74.515237]  xenbus_dev_changed+0x174/0x1e0
[   74.518923]  xenwatch_thread+0x94/0x190
[   74.522208]  ? do_wait_intr_irq+0xb0/0xb0
[   74.525690]  ? xenbus_dev_request_and_reply+0x90/0x90
[   74.529973]  kthread+0x149/0x170
[   74.533007]  ? set_kthread_struct+0x40/0x40
[   74.537023]  ret_from_fork+0x22/0x30
[   74.540411] Modules linked in: vfat fat i2c_piix4 xfs libcrc32c crct10dif_pclmul crc32_pclmul crc32c_intel xen_blkfront ghash_clmulni_intel ena
[   74.549144] ---[ end trace 296bd6f709c05e9e ]---

At this point I can only say that something is certainly
wrong. Apologies if this is an already known problem.

-- 
Vitaly



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 09:34:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 09:34:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156533.288887 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xks-0004uK-B6; Thu, 15 Jul 2021 09:34:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156533.288887; Thu, 15 Jul 2021 09:34:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3xks-0004uD-8E; Thu, 15 Jul 2021 09:34:06 +0000
Received: by outflank-mailman (input) for mailman id 156533;
 Thu, 15 Jul 2021 09:34:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3xkr-0004u2-0b; Thu, 15 Jul 2021 09:34:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3xkq-0001QN-RM; Thu, 15 Jul 2021 09:34:04 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m3xkq-00080z-KO; Thu, 15 Jul 2021 09:34:04 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m3xkq-0004sJ-Jq; Thu, 15 Jul 2021 09:34:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=sXvKnjtkoF8hRhbCP4BaRUtAdufZZ5BtsxfjnZmnISw=; b=M+N+HFr7xJz2JM9iTMve9rW6cC
	5q37VJJXZ7khHdzdAjSTbIP47MHxYmf5yR8jlS4sVOVZsh3kv5D99AzvQmcZNn/4PlPXc6itHRHql
	6TZJ4qyF1LudoCrUSLdrlJ+IFVem+Qo93nkMZjQhGm0YqUiG9ANMysQKRldomAuGhojQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163704-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163704: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=3c18bc304ecbf4ce7f02485a9198b849eb06cce7
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 09:34:04 +0000

flight 163704 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163704/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              3c18bc304ecbf4ce7f02485a9198b849eb06cce7
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  370 days
Failing since        151818  2020-07-11 04:18:52 Z  369 days  361 attempts
Testing same since   163704  2021-07-15 04:18:51 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64822 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 10:59:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 10:59:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156544.288909 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3z5D-0006Q1-V5; Thu, 15 Jul 2021 10:59:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156544.288909; Thu, 15 Jul 2021 10:59:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3z5D-0006Pu-S1; Thu, 15 Jul 2021 10:59:11 +0000
Received: by outflank-mailman (input) for mailman id 156544;
 Thu, 15 Jul 2021 10:59:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=PyhT=MH=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m3z5D-0006Po-3M
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 10:59:11 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ae21a840-e55b-11eb-88a9-12813bfff9fa;
 Thu, 15 Jul 2021 10:59:09 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ae21a840-e55b-11eb-88a9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626346749;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Rq5b8wgaqTmcuVHNk1HlBTa9j/k9aF4p+gNzPpA7o8s=;
  b=C9F3HyeBh5iXi+zkhk0ojrb9rT+iZIiqihg3hFVMWmG1WCtX+8ue2/Kv
   MLFYclsqNtoJYMIQjCz0wFQQlyoIr9oZ5hhwAccPvEeFj3XkTx+cuwMdB
   wXMdM3Waaiu0M4ksGFLSv0qOxGgoibnUDLUPkEW+OTg3BYeog5NuQqTXT
   w=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: bA7+qJaJkPQ/IBCdEmGUUaZEVmuqi5CD9UyWR3tvodNoPeJh3yWyzhejBFZWlH1tyvksVVkDlG
 nfuiC3fN9v0RT/ckwShfKMQ2Fs0k5JsRvkB/3cTxHVtKBPSxX74Mw1Oa4R1ZydZDrzr5mlyJ80
 Vd2aYiqpj3TEUSNOTXaD2oyA8gldwPlmPrpoy2tHs9dJE/9DaM4xal21az2RUNnjsP/+gwGRtY
 Vp0MzkfU9I/wypsoEcqUitdeoAeVPqrR3FafJhs7rJ7y6EP8FCV9zo5hbpSG6uiNGlCvzzSH/J
 XdI=
X-SBRS: 5.1
X-MesageID: 48027349
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:jj+L96gzO1JlhOBF7N+EhFB9EnBQXzR13DAbv31ZSRFFG/FwyP
 rBoB1L73DJYWgqNE3I+erhBEGBKUmskqKdkrNhQ4tKOzOWx1dATbsSkbcKpgeAJ8SQzJ8n6U
 4NSdkGNDS0NykGsS+Y2njKLz9D+qj+zEnAv463pB0BPGIaCdAU0+46MHf8LqQffng3OXNTLu
 v42iMonUvFRZ1aVLXAOpFTNNKz1uEj2aiWLiIuNloC0k2jnDmo4Ln1H1yx2QofaSpGxfMH/X
 LemwL0y62/u7XjoyWsllP73tBzop/M29FDDMuDhow8LSjtsB+hYMBEV6eZtD44jemz4BIBkc
 XKoT0nI8NvgkmhMF2dkF/I4U3NwTwu43jtxRuzmn34u/H0Qzo8Fo5omZ9ZWgGx0TtjgPhMlI
 Zwm06JvZteCh3N2A7n4cLTah1snk2o5VI/jO8oiWBFW4d2Us4TkWUmxjIQLH48JlO81Gh+e9
 MeSv00pcwmMW9yVkqp+1WGm7eXLy0O9n7seDlxhiSXuwIm1kyRgXFonPD2Mx87hdsAoqJ/lp
 P525JT5fpzp/8tHNZA7dg6ML2K40z2MF/x2TGpUBja/J9uAQOEl3ew2sRv2N2X
X-IronPort-AV: E=Sophos;i="5.84,240,1620705600"; 
   d="scan'208";a="48027349"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=BqOhKpXbtFxqcN/OjDx+urSyztusDndK/C5w5KhockKWnUfLADtevQ9Gi4c3XRKkbX64iFakH6ZDx0o5usG1k+kp/VnixONes3s1DpXfMNvob+jZiEcF/bG3GlkflEWNM+QEvC/cgBbOLIolQl784ANo39HJiywE5Yj8NHb9jhlU8x3H3i0GGcFF7dFSIZpqlo6TfgvJGQkD+fcnn1+/xalPSjaAqg1H2hC1r4kLk4Rf5iKiP+IYyIw2c8AxQrqMiQstyRkalGDfCFrlNLVeM5Gh3asPXgyNjRrpM5l8PLbsWzFQbCSVSG8fKQ0frMjANZ0lTlZTvQ2QvVML7KlKyA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Rq5b8wgaqTmcuVHNk1HlBTa9j/k9aF4p+gNzPpA7o8s=;
 b=feakfEY0thdf9CCSZECvL1dsOE/Aihd6ZvYpyQa1yldsABgoA+u9OzEHvyUDcmViFgODAFb5imZfU/eme45xmq6Jb9YDre4EXx8Ginl+Gy2Iqs6nY9Hg6ErfCsR/y8T9M3Ld28Iy40VOYo9C31pxeHDlY6IktFGK2og5jQ0GAtrt+6qeC9cIA6k1w4lBcMPnBQMl4C+9xTCDem9RNW9iJzpdWjgYeVrKxk/fgZ2Aiaks0h2Q7LVA4bmOABaefIbxJjr+KEhcAEPUPH20bb5fucJJIFeISht2hwmpWwkoWNzpaVRQNGgtczJF+SSHa1n0KKyRJImy8omwlZEIe5hh3A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Rq5b8wgaqTmcuVHNk1HlBTa9j/k9aF4p+gNzPpA7o8s=;
 b=GqaCel2nRo9nsrKB2T4SLzvDEVomi3HRmGFU6tXix04Jx0kNSl+xoOuVRtLblX6qnvQeqcLz79/vQsdqAolmHxbs2m+bsMspvOlOsbcj8wmskr2YSVIYSQ63SVTpidXjDxcArocP87Pn4d6QMN1LZsZbd8yONYGAPJ4UnXKLY8E=
Subject: Re: preparations for 4.15.1 and 4.13.4
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, Ian Jackson <ian.jackson@citrix.com>
CC: George Dunlap <george.dunlap@citrix.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Wei Liu <wl@xen.org>, Anthony Perard
	<anthony.perard@citrix.com>, Julien Grall <julien@xen.org>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <a37d01a9-69bd-b656-ff8a-b693dbc014b1@citrix.com>
Date: Thu, 15 Jul 2021 11:58:50 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0142.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:193::21) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5b362af5-3845-45ab-6fb3-08d9477f8b3e
X-MS-TrafficTypeDiagnostic: BY5PR03MB5346:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BY5PR03MB5346A4E772EB3B6095FDDF0FBA129@BY5PR03MB5346.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: TSHeYbJ+jHI3zXb4jjcoTKK09s+wdtmrTwh5bGKNkdFFaR6syiXLAJmgVqpxXt8Vv12sHTOHnwNySdD/pYCc1j2VMGxM8AR6JqOJwB0rxuk4dgopABeuX1Qdq3QVK90Rg6TtIDdVct3uScT7ATT6vj7rc886jFs+fpX0JBp3tmiwtGotaDCEjDyICxI8O6boNCtXHt2KZGNmYZFn+Jd8N+s0tklgKiYoPuHvHV28epRUTyM/ZwG1B0wRYcQOdTC3GHAdNTZBlP+oqSO3sauOY8Rw6AVBZMU1a1/k+iJwgS/Mtu1/JCqRLjgk2YbfEACXWqScGeAFyUeLwNiSHqO9nWxcq16MQoeQt/PmBZEmH0FbsySxX8cqoyVPjTZ5Vm3C4Xj6hX3Jw1oRCXhi0NwjopFMjnm29TiKCGUXK8oF7d6KDHRjFdRalJLjQZyPtc+TAsP+tt+gLpgo1oN38u07sXMPwD2QhoGKUVkoB1SE0lLthEZKk2MaVxYehbHDHuoU8AS+bfO+E3oIeloBt4sBa7zP6qXujIXCf/2SpWqQJMkBNVd6kwDhmLbqO/CZe0efQuoyFNtOCfaadyS6HQpMSu6HznJBUb04hfg7SjePXZRYnUHHLWogmIQOyxUcSFl8olvwMyImxP9RTppIZGD5rR6mZ8KnngthTfOiaV9o9ETSDRRD2eE6fCZaLm7kcH/eZ+7kUWGhmF/TRtkKYKWrIGtbwSHPuCk1OGEWgHh8y7M=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(396003)(346002)(376002)(39860400002)(2906002)(31696002)(6486002)(186003)(66946007)(478600001)(66556008)(38100700002)(66476007)(8936002)(8676002)(4744005)(54906003)(4326008)(86362001)(36756003)(956004)(2616005)(6636002)(6666004)(316002)(16576012)(53546011)(5660300002)(26005)(110136005)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 5b362af5-3845-45ab-6fb3-08d9477f8b3e
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 10:58:57.5557
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: sdHsHEav1pOwjdccWb/DZRy2TBFTSp73QSd2FumdQk+0LQDxUdLoNlCUttD11cY2Oh7n2doVSy4CrUpf/25N5nASdn7obtuQTSdr5hQqHzY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5346
X-OriginatorOrg: citrix.com

On 15/07/2021 08:58, Jan Beulich wrote:
> All,
>
> the releases are due in a couple of weeks time (and 4.14.3 is
> supposed to follow another few weeks later). Please point out backports
> you find missing from the respective staging branches, but which you
> consider relevant.

I've got a queue of:

* 429b0a5c62b9 - (HEAD -> staging-4.15) tools/libxenstat: fix populating
vbd.rd_sect <Richard Kojedzinszky>
* 41f0903e1632 - tools/python: fix Python3.4 TypeError in format string
<Olaf Hering>
* 67f798942caf - tools/python: handle libxl__physmap_info.name properly
in convert-legacy-stream (74 seconds ago) <Olaf Hering>
* e9709a83490f - tools: use integer division in
convert-legacy-stream<Olaf Hering>
* 1a6824957d05 - (upstream/staging-4.15, origin/staging-4.15) build:
clean "lib.a" <Anthony PERARD>

which I'd already ok'd with Ian as ok for backport.  I'll sort those out
on all applicable branches right now.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 11:13:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 11:13:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156549.288920 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3zIh-0000Tr-23; Thu, 15 Jul 2021 11:13:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156549.288920; Thu, 15 Jul 2021 11:13:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3zIg-0000Tk-VG; Thu, 15 Jul 2021 11:13:06 +0000
Received: by outflank-mailman (input) for mailman id 156549;
 Thu, 15 Jul 2021 11:13:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3zIf-0000Te-PK
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 11:13:05 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9f4c5002-e55d-11eb-88a9-12813bfff9fa;
 Thu, 15 Jul 2021 11:13:04 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2105.outbound.protection.outlook.com [104.47.18.105])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-1-dee0yNkPPnK3tm2FcIJrjw-1; Thu, 15 Jul 2021 13:13:01 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3390.eurprd04.prod.outlook.com (2603:10a6:803:9::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 11:13:00 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 11:13:00 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3PR09CA0012.eurprd09.prod.outlook.com (2603:10a6:102:b7::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 11:12:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9f4c5002-e55d-11eb-88a9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626347583;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=H24Rhl076w3gp8DB47TIEXFpvq2NqTLzbrvbO2Vcybs=;
	b=VyTr5gzHvuVCWxODXahrK5bAt1/npnNWAaywK2fZKBpPmPjWBoWGIpO9IkWXwqD2avdAA8
	7sEhLGxn0hTv42LE86AxTvgTc3WZifkrGwem1kALhxrQF9cJEgaY95pgNb4EXkUfZL6IGV
	PFDEbHSI5hK8uM88nWhoYOzAI4PBfTk=
X-MC-Unique: dee0yNkPPnK3tm2FcIJrjw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jcaMO3ToQU3CyZ5cUarQ46AaRVpHL6iDWHez/MmkDpMbaVeofybMwBmF8dlxJRPpHaTkx2ZkQGccpwTnCxOLwzwso5zGt/6ziJwhLd0jHoyUU0pRlht58WspmODzQHMXyabpGsFbZ9Bo9lGaRgHj5vkySdO0hGXJPpBt3IxShXMZNs9VviTgvkXahPdXjFXcBxUCK9U0liXL3j8YjhzcizGoblvD5x6tAs5JtE8hsmNCOAFbtIMisd/z9KFuaTCB18hPDhBxupV7OyljgeOXkj/J67mn6F9PFwUIfXQuroP5LpDjLLfR5L//GWKTeSea2YPTd4gcXuqzKtdo3nFivQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=H24Rhl076w3gp8DB47TIEXFpvq2NqTLzbrvbO2Vcybs=;
 b=mhr1O/JrKkue/SEwFoe9RJTTgtTpnVixk7BRjg3vRP+RZdrR0GDPndEtxw66XX+e7dsSq4gvSuR1vXzb6+HQ4g2JuCIwSfybldLetHCc2TTPP5yQK2IVobjLt8LdXDv8Hi4PtTdsaVH9I6Xh9I/qEws8UJ5GZXHE42COORdY871jxvGLeNbzznlElFocsEaDdlG5fKLpZLc0lQSgNxU507rBWTTZRq5xdY1+uTGYCqZabmyWcnhfbpkGjazOt2ZBXoc+jcTm9BRZ/jPP+wlVgVvg9dVN1WhgMhNhVGWOWzvO6YQ3v1CGkVuQUECaT9QuTTdefBptdO4/zJ40+NEaoQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: preparations for 4.15.1 and 4.13.4
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <ian.jackson@citrix.com>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
 <a37d01a9-69bd-b656-ff8a-b693dbc014b1@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <d8cd6349-bbf3-9f50-12b8-a2118bf79a40@suse.com>
Date: Thu, 15 Jul 2021 13:12:57 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <a37d01a9-69bd-b656-ff8a-b693dbc014b1@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3PR09CA0012.eurprd09.prod.outlook.com
 (2603:10a6:102:b7::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1d3f189b-71eb-4ac9-98dd-08d9478181a9
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3390:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3390DE253500223FFE3D4E77B3129@VI1PR0402MB3390.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	IPnY8GmxJi653tF1kbmD9XgQCAW9BsIOmaMMINbImbIDXMGVV42LoXuRQzCz3lGKEGDbIkguJlRg6rvMAhJc5b1s10EUuP9tICDpUK7qPJpnMurdBiy+IudcxiIjooB/Wfz7Jcri1z003cF9Z/GgbyIBj4Ct16T4gV1N6wiDnE1P2XYKHMf+zMwVTzz1kLs2ac0mZgXD8ULr1alX6aTFK+hNqxzfpmJ7egwkVXYYRVpyO50wsFEvxSWdaocZn6UOL6doGwnikyO2VvnDJzJWbwVFyggIPm6YWt8vdETtAHnezSGGnDh2asDnclpa/fM//hgo8sTbbFXM1zk14BZARUlocmecwaSb355sxHuFwJsADLJNx1T4T5bzezuebRSygpqtK64tOEcYjryJc0jTBywKufePRZkp8zR9zyve6kuFcXeJNJi1+WTG6JgosRSMOPoe5qUwfeulgbIwIZ/h1l9I7bnu+dlpNEYUS/j5dd0cBj/M3hZ4VVhl/vjG0GAW5zCRTdekLjZrTZuc4s0rTkVoyHBmWlgXkQRUDU28XPxmHWWoUhBgkm8cajj4mcYPIfEEMxjxhdNrr0rcMAba4u5R8uyIaJSzsDZ6+eJGIENISyVghZA+u1qoDg+WYi5EB01eX8fNYBZvB6TqpP4mf/XdipUeSPB3nW8oMKTIUG/lt4ok15mqgpxcATdYX2DDxBax+/rddZ4WJNixlt+fBmHsbGT2fN5SH+I8bnt8kfs=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(376002)(396003)(366004)(136003)(38100700002)(53546011)(478600001)(4744005)(8936002)(316002)(54906003)(16576012)(31686004)(2906002)(186003)(4326008)(31696002)(6916009)(8676002)(66946007)(66476007)(26005)(2616005)(956004)(6486002)(5660300002)(86362001)(36756003)(83380400001)(66556008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?eG84TFIySHJld0phQVdNclAyT0NTVkVDY2g0QVg1angyQUhVMlNXSFBWZjVX?=
 =?utf-8?B?b1NiZXJOOFJLK3RWK2lBSGV3NWJudWt5T2VLdDFNNnREQU5QMGpEcWtiUEh2?=
 =?utf-8?B?alI2UWxZWURpYURmV3N6YnlNUnplY2EvR1B4YzBLcDdzYms3ZkhXdkdmTlVs?=
 =?utf-8?B?RG9iOUQzODJtY3ZMWUh6Y2RIOGp4SXlNSm1JTVRnOUxja2tCRHYyeGVYaGkz?=
 =?utf-8?B?MnUrMHpWUzV4WkFxRDQrdUFJam16K0ZWN1pYUWo5MTJMTzdYejh5MDNxWWlC?=
 =?utf-8?B?ZXA0dDA4Zi94ZDlkR2kwd2FwbitNZ0NJbGN3L2FzaFlxNFEwenZWbzlaeE9v?=
 =?utf-8?B?WU9XaEpzOERXdGJyTG5saWdhSVRDaUszTXRjbTJJUmdqWHZFM1VCakN1aU9J?=
 =?utf-8?B?ZWZhcWpRQUFyRXJkNUpuRGs2UnpBQTFDd2FmYkQvNWx4VG1mUWRCd1lNMCsz?=
 =?utf-8?B?QnhYVCtWOURxWW51dzJIRXlhSnBGaitGQkxFa0U5b3ZSUHBLRlErT2E0TDFi?=
 =?utf-8?B?N2JodHpETVN4blJnTW9zMy8rQXVhWmljMXlETXh2a0M5czJ6ZGxQbXVWS29B?=
 =?utf-8?B?Q2dpT0puc0xrK0FTcGhrYkpsZncwWkRXc3Z5TFhlYk1IN0pVNjJUL21LZ2Zu?=
 =?utf-8?B?bTJtTXV0MGhsT2RsUWdGUTdLTVVpZ1lqbzdLZmNLaXVOMDFmVFlrN3BuVjB1?=
 =?utf-8?B?eGg2SW1yWXlLNTFzQ1NoUVlpUC80SGZPcjFXdlFsb0VKc0o0VHlxcEdYd0Vj?=
 =?utf-8?B?YlhsWlY5MFUxdzZoMmRKQlpTNDkyeTR6RTRSanh3M2lqVTZGUzFoTHJpYzNt?=
 =?utf-8?B?L280azN1YlBIeEMrdll0RXFvWlVoKzhHenZ3Y2tQZjBNOUNRN21mK0hTd2c0?=
 =?utf-8?B?V3lLQjBEZEk0TG5kdzVKZHpYWmp6Q3VYQUVQZUtFN2RHMS83Q1N1UllEYTAy?=
 =?utf-8?B?YTRKY0E5SXAwZk1MSWZjS2J4d1J1R0VRMk5RWndNdDB2YTBxc25MMGRaakdq?=
 =?utf-8?B?SXR6VmhsajBLTHI4SU5zZ0JJRXd2amNCWkxwTW1QbmhoL3JOelJONDlkR1dB?=
 =?utf-8?B?VVQ4TGN0bGhZUmpZT0ZWT1Z4Z2QxeTNiMnhQZWtQU2t1NDdIdW1leTBaYWUv?=
 =?utf-8?B?d01xT3hEZXdoK0F1MDV1ak9paHFNNVM0TDhQbzBqUEVSLzVDdUhTMkwyMnhE?=
 =?utf-8?B?alUrc3VxeWhLUEpiakVNSVZvaGtYcC91eXdyS0VOTWxXelQrb3JOTStBL3ZC?=
 =?utf-8?B?RFNlNDZDNjlIaDNsakdrekg3bERmaEo1blNEc0VUTC9sQ0NxaEF5dXRONjNy?=
 =?utf-8?B?ZVVLc2VVMkNjbXJRLzBaTFVMUmZyT3kweEVnaXp3Q0tMTzZndkZOMWtrWEE5?=
 =?utf-8?B?MkpFdkJnem0zenZMTjZWQWlqdGN3RXJTUlBrcTRKMksyVGhQclpxR0U4Vjd6?=
 =?utf-8?B?R3g0MllaZjQzYWxtZFNtR3dNWlZjNlJpQnNhSnBTOWp3K2p4M1JGdWVJSkJs?=
 =?utf-8?B?YlhzZW9OWEtLUFpTeVZySnBNeStFTkk3ME93RFpxTDQ2Y2l2SzhpWHpUZXFE?=
 =?utf-8?B?MzJTVlZ3T2Z6cERxWWZHV2VLNyszV0ExN3JQMlk2RHhjWis0TE9SYk5LUVhm?=
 =?utf-8?B?NzU4ajdRbzhSODgyZlVUZXluT3BJeWZ4TkJSVkNBNTJ2QVlLb1Z6RVFZTnky?=
 =?utf-8?B?QWJSSHd3T0tvZUU3bXJjZDhleGRpTEVsY2dNUTUzM29od2ZPSVhqQkJhZDVm?=
 =?utf-8?Q?wrYjVgkPdP2IcbY1jh+KPIQ5Ic3pXAQpt78yo8H?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1d3f189b-71eb-4ac9-98dd-08d9478181a9
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 11:13:00.3073
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: HR1voBwsN7/lv3ePYmV1TzZZ/scwcxemp1T/wAs5Nh8v0NSIfC/dHpumPsY06gkJ9okMD4byYXMafgknSK85FQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3390

On 15.07.2021 12:58, Andrew Cooper wrote:
> On 15/07/2021 08:58, Jan Beulich wrote:
>> All,
>>
>> the releases are due in a couple of weeks time (and 4.14.3 is
>> supposed to follow another few weeks later). Please point out backports
>> you find missing from the respective staging branches, but which you
>> consider relevant.
> 
> I've got a queue of:
> 
> * 429b0a5c62b9 - (HEAD -> staging-4.15) tools/libxenstat: fix populating
> vbd.rd_sect <Richard Kojedzinszky>
> * 41f0903e1632 - tools/python: fix Python3.4 TypeError in format string
> <Olaf Hering>
> * 67f798942caf - tools/python: handle libxl__physmap_info.name properly
> in convert-legacy-stream (74 seconds ago) <Olaf Hering>
> * e9709a83490f - tools: use integer division in
> convert-legacy-stream<Olaf Hering>
> * 1a6824957d05 - (upstream/staging-4.15, origin/staging-4.15) build:
> clean "lib.a" <Anthony PERARD>

You'll notice that this last one is already there.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 11:37:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 11:37:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156565.288968 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3zfq-000433-CD; Thu, 15 Jul 2021 11:37:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156565.288968; Thu, 15 Jul 2021 11:37:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m3zfq-00042w-8Z; Thu, 15 Jul 2021 11:37:02 +0000
Received: by outflank-mailman (input) for mailman id 156565;
 Thu, 15 Jul 2021 11:37:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m3zfo-00042q-OX
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 11:37:00 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f69aca8e-e560-11eb-88ad-12813bfff9fa;
 Thu, 15 Jul 2021 11:36:58 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2173.outbound.protection.outlook.com [104.47.17.173])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-8-eYCf1w8OO6KcaAEq077igA-1; Thu, 15 Jul 2021 13:36:56 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7360.eurprd04.prod.outlook.com (2603:10a6:800:1a3::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 11:36:55 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 11:36:55 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR07CA0072.eurprd07.prod.outlook.com (2603:10a6:207:4::30) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.8 via Frontend Transport; Thu, 15 Jul 2021 11:36:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f69aca8e-e560-11eb-88ad-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626349018;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=SWPl7HL8hsXIMXsxBBXNQAYPCWRWwR1wJwY6vqjfQgE=;
	b=gYoyyqZmVuNQ7GdtISOPhpRjzrzLxFU5HiaLp2Oln5Q8QWKM3u/tekIYBBdEBxLA43YgY5
	MYMd51UlMABjPNh/SAQ0FYrpKDtz1VLXsktEx5nxGk845NUwgC2Ma5F0ZkClawVsWDKAaF
	AMo5qjJYwEwcinCtFj9OjkBn3t/sMTQ=
X-MC-Unique: eYCf1w8OO6KcaAEq077igA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fhAhaqm4hFq1OxH/MfG5K0SPBlPKFo1AAZFYrZoz3boVvyKBA7M0k3zclSDzB2+VNbFlIbLJ01xqZCupy+tks6rOVAkM+EUUpkYq3XvzK4LdVvLmcQCIaO6PkYNSXwJr7hTyDQQMbv7FFre/noOgShO5jT52EiUyUM2iAjPJMPXc1igRbPaDCuwxTekaX8BrDIXeI6NDjusdgWviu7Q6VKnEkM1DHMAFxxAnRoAGg05io4a0cgwqXWIbOW6J3yR3zHVHg3mPYkQA3grHFnjPQVOxkxvuFypZ9ohbKOE7JD2tJ0WP2jPNmF7b6lzclmTaQ8l2hHA58/rkWbnI3SIxWA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=SWPl7HL8hsXIMXsxBBXNQAYPCWRWwR1wJwY6vqjfQgE=;
 b=a5C0MWTxq72/SjSWp6HY5GLl0nNobRAyCb3rhnxmfphnVO/dW4VRXMhbUDLN/4S79yfaLc8rTn4aJr1Hdd/uTC1ttIIDiUpaLewcQLie+VTo5F/YJN272RqZaPp49E+XCH67PCKWTOB3X0C3/kA8/n5kcIr7tJE8vRPdjmpQCTYLnEYaZceMGP7vw9zsucNmy5tYEk15nOcGhOmcgzj3KYGJkuTUfgRy+F4XMipg64drmrPV2oyzgLK9ItyuTmmnZh1Fhfv6xVKcm5bxJA+zNZA+ueRcGPZqX1Q8Lq924Xzny6/PvXCDNb40KdJkb2iD87E7REPGRrpo46kUIN0DmA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 13/13] SUPPORT.md: write down restriction of 32-bit
 tool stacks
To: Julien Grall <julien@xen.org>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
 <e12989f7-9217-e2b8-a17d-5c252dc89248@xen.org>
 <dfc17ae6-2100-cb27-9826-1f6001788707@suse.com>
 <870cae2b-5601-b10b-926b-0995e661ffc1@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <d91b5d10-03a1-14fd-0b92-0de5e4e8d482@suse.com>
Date: Thu, 15 Jul 2021 13:36:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <870cae2b-5601-b10b-926b-0995e661ffc1@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM3PR07CA0072.eurprd07.prod.outlook.com
 (2603:10a6:207:4::30) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 788afb18-8dba-4907-a219-08d94784d90a
X-MS-TrafficTypeDiagnostic: VE1PR04MB7360:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB7360C1143F49969986F4DD27B3129@VE1PR04MB7360.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	AjFkCZhY9fT1CDyOXn8fmhHMYGMZnkxfUZlh7xtSW8C197SnuJ25hp8i8eRC8cwDUwNysFYYUjElet6A+5DUlER88ErS3A4CQwQzBV3SVxESYWtSlU++nAdGsKOlhetnbuI0N4qnir0mAGOvoO3a6QSzRZUX4xMzupeX0reFcLDwPvt8touUyypkeD7X1Q63JbtGb2Suy5vtxRtWvz0qdHgtfB+j/jCHMN641Ys5AQpphB1bOEdjNqflz597TWG9oediAMq3oue7YzqyUUAjkSonjVnkJA27H+KXDLb2eqQ0AVeovMT1+hsI0lZ8mFKUafy0QXfJMtczjY0cr9WqWTjgP+UY1BvPP7vAVU8IH8s/8mPUn9McLYto9N3D5ITrS5DHMNnYHctq98rxkJYqz1jYo7ReQJs/Mfp+jMKFfFEg1vgq5AHN1m5IGE4+qCHar201fOAAaDTUaN14VAxS4NbAWKi65GJU3hYTPWrrox0s7E8fiKnGKMBEZwseecmm66IxXORYrVpnJDvMBYADc51XxwoO2UCgHxTYV1rZilOsStdtDc635lpAMCBahP2L2lgov33vdao0KAwPA8LJOmK7LAsuR5Ws3d+RNVM/3uc3pNUh/AdsKVPANFqP29q0CQRDUUPCLOODf6WewYdJIEFx/DG/dCYC1lRxG9dBWdeEkpVc23DvtMZE46MborTtCyN3WX1Ee+mvIPBEkbR1NlJ8pUHiLSSL0cwKUwEb+YA=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(376002)(136003)(396003)(39860400002)(346002)(6486002)(8676002)(8936002)(31686004)(36756003)(38100700002)(956004)(16576012)(2616005)(6916009)(66946007)(5660300002)(66476007)(66556008)(53546011)(54906003)(2906002)(86362001)(83380400001)(31696002)(316002)(186003)(26005)(4326008)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 788afb18-8dba-4907-a219-08d94784d90a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 11:36:55.3313
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: l1O3PxaQMsKN/gsD93ZFRyhOQxkaR0D4dchrFAK6ocGIQCfnKfEZELAF3s/W+yP665T1+32b8cWovp/mwE5OIQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7360

On 15.07.2021 11:05, Julien Grall wrote:
> On 15/07/2021 07:38, Jan Beulich wrote:
>> On 14.07.2021 20:16, Julien Grall wrote:
>>> On 05/07/2021 16:18, Jan Beulich wrote:
>>>> Let's try to avoid giving the impression that 32-bit tool stacks are as
>>>> capable as 64-bit ones.
>>>
>>> Would you be able to provide a few examples of the known issues in the
>>> commit message? This would be helpful for anyone to understand why we
>>> decided to drop the support.
>>
>> Not sure how useful this is going to be.
> 
> It would at least be useful to me, so I can make an informed decision. I 
> suspect it would also be for anyone reading it in the future. This is 
> rather frustrating to find commit message with barely any rationale and 
> no-one remembering why this was done...

Well, I've added "There are a number of cases there where 32-bit
types are used to hold e.g. frame numbers." Not sure whether you
consider this sufficient.

Problematic code may be primarily in areas Arm doesn't
care about (yet), like PCI pass-through or migration. But see e.g.
- xc_map_foreign_range()'s "mfn" and "size" parameters,
- xc_maximum_ram_page()'s "max_mfn" parameter,
- libxl_dom.c:hvm_build_set_params()'s "store_mfn" and "console_mfn"
  parameters,
- xs_introduce_domain()'s "mfn" parameter,
and quite a few more in particular in libxenguest.

And then there are also subtle oddities like xc_set_mem_access_multi()
having

    xen_mem_access_op_t mao =
    {
        .op       = XENMEM_access_op_set_access_multi,
        .domid    = domain_id,
        .access   = XENMEM_access_default + 1, /* Invalid value */
        .pfn      = ~0UL, /* Invalid GFN */
        .nr       = nr,
    };

Clearly ~0UL won't have the intended effect even for 32-bit guests,
when the field is uint64_t (we get away here because for whatever
reason the hypervisor doesn't check that the field indeed is ~0UL).
But I wouldn't be surprised to find uses where there would be a
difference. One of the main aspects certainly is ...

> I vaguely recall a discussion about 64-bit hypercall ([1]). I assume the 
> decision to drop support is related to it, but I have no way to prove it 
> from the commit message.

... this. Some XENMEM_* may return 64-bit values, yet the hypercall
interface is limited to "long" return types. Not even the multicall
approach taken to work around the restriction to "int" would help
here for x86-32, as struct multicall_entry also uses xen_ulong_t
for its "result" field.

> It is also not clear why adding the restriction is the way to go...
> 
>> This would be pointing at the
>> declarations / definitions of various tool stack internal variables or
>> structure fields. Which also is why ...
> 
> ... is this because such issues are too widespread in libxc/libxl to fix 
> it in long term?

Fixing is an option, but until it gets fixed (if anyone really cared
to do so), spelling out the restriction looks to be an appropriate
step to me (or else I wouldn't have followed the request and created
this patch). Once suitably audited, fixed, and tested, I wouldn't see
a reason not to remove the restriction again.

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 12:45:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 12:45:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156572.288978 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m40jU-0003vQ-FI; Thu, 15 Jul 2021 12:44:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156572.288978; Thu, 15 Jul 2021 12:44:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m40jU-0003vJ-Bu; Thu, 15 Jul 2021 12:44:52 +0000
Received: by outflank-mailman (input) for mailman id 156572;
 Thu, 15 Jul 2021 12:44:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m40jT-0003v9-Sh; Thu, 15 Jul 2021 12:44:51 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m40jT-0004fC-LY; Thu, 15 Jul 2021 12:44:51 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m40jT-00086q-7f; Thu, 15 Jul 2021 12:44:51 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m40jT-0002TE-7A; Thu, 15 Jul 2021 12:44:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=aZ8qcpYSxCFdwe6GTZxXIx+X83jktRna3i61bsiPjqc=; b=oRG3aeuj7ak+JKmqfOpzN4yBxI
	LZ5n43YTLe5CL+LcVIrGhtyKBCm8VJaguzorkrgSdn8QPUEN6aj93HcZn7o8UJARN4ldOlndNmuyC
	O8Wr4aSqRybzp8QNqX6UFEznyOCBRCxnLmX7ATWO6olnWlCU0K2bvnWCCiefj507XpJA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163694-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163694: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=1f966c7c11bbe77f3de5f50911de7c3a74594bfe
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 12:44:51 +0000

flight 163694 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163694/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                1f966c7c11bbe77f3de5f50911de7c3a74594bfe
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z    9 days
Failing since        163327  2021-07-06 12:39:04 Z    9 days   17 attempts
Testing same since   163694  2021-07-14 19:39:10 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 7365 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 12:46:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 12:46:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156578.288995 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m40l1-0004kT-Sf; Thu, 15 Jul 2021 12:46:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156578.288995; Thu, 15 Jul 2021 12:46:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m40l1-0004kM-Pk; Thu, 15 Jul 2021 12:46:27 +0000
Received: by outflank-mailman (input) for mailman id 156578;
 Thu, 15 Jul 2021 12:46:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aGUF=MH=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m40l0-0004kC-FB
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 12:46:26 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a97e9046-e56a-11eb-88ca-12813bfff9fa;
 Thu, 15 Jul 2021 12:46:24 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 539F267373; Thu, 15 Jul 2021 14:46:22 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a97e9046-e56a-11eb-88ca-12813bfff9fa
Date: Thu, 15 Jul 2021 14:46:22 +0200
From: Christoph Hellwig <hch@lst.de>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>,
	Christoph Hellwig <hch@lst.de>
Subject: Re: [BUG report] Deadlock in xen-blkfront upon device hot-unplug
Message-ID: <20210715124622.GA32693@lst.de>
References: <87pmvk0wep.fsf@vitty.brq.redhat.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <87pmvk0wep.fsf@vitty.brq.redhat.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Thu, Jul 15, 2021 at 11:16:30AM +0200, Vitaly Kuznetsov wrote:
> I'm observing a deadlock every time I try to unplug a xen-blkfront
> device. With 5.14-rc1+ the deadlock looks like:

I did actually stumble over this a few days ago just from code
inspection.  Below is what I come up with, can you give it a spin?

---
>From 4fef3b917af51153dd99a958ee9064f0de3a8b6a Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Tue, 29 Jun 2021 13:49:22 +0200
Subject: xen-blkfront: sanitize the removal state machine

xen-blkfront has a weird protocol where close message from the remote
side can be delayed, and where hot removals are treated somewhat
differently from regular removals, all leading to potential NULL
pointer removals.  Fix this by just performing normal hot removals
even when the device is opened like all other Linux block drivers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/block/xen-blkfront.c | 182 +++--------------------------------
 1 file changed, 16 insertions(+), 166 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8d49f8fa98bb..0ba37c97aabd 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -502,34 +502,21 @@ static int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg)
 static int blkif_ioctl(struct block_device *bdev, fmode_t mode,
 		       unsigned command, unsigned long argument)
 {
-	struct blkfront_info *info = bdev->bd_disk->private_data;
 	int i;
 
-	dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n",
-		command, (long)argument);
-
 	switch (command) {
 	case CDROMMULTISESSION:
-		dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n");
 		for (i = 0; i < sizeof(struct cdrom_multisession); i++)
 			if (put_user(0, (char __user *)(argument + i)))
 				return -EFAULT;
 		return 0;
-
-	case CDROM_GET_CAPABILITY: {
-		struct gendisk *gd = info->gd;
-		if (gd->flags & GENHD_FL_CD)
+	case CDROM_GET_CAPABILITY:
+		if (bdev->bd_disk->flags & GENHD_FL_CD)
 			return 0;
 		return -EINVAL;
-	}
-
 	default:
-		/*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n",
-		  command);*/
-		return -EINVAL; /* same return as native Linux */
+		return -EINVAL;
 	}
-
-	return 0;
 }
 
 static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
@@ -1179,11 +1166,8 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
 
 static void xlvbd_release_gendisk(struct blkfront_info *info)
 {
-	unsigned int minor, nr_minors, i;
 	struct blkfront_ring_info *rinfo;
-
-	if (info->rq == NULL)
-		return;
+	unsigned int i;
 
 	/* No more blkif_request(). */
 	blk_mq_stop_hw_queues(info->rq);
@@ -1198,12 +1182,8 @@ static void xlvbd_release_gendisk(struct blkfront_info *info)
 
 	del_gendisk(info->gd);
 
-	minor = info->gd->first_minor;
-	nr_minors = info->gd->minors;
-	xlbd_release_minors(minor, nr_minors);
-
+	xlbd_release_minors(info->gd->first_minor, info->gd->minors);
 	blk_cleanup_disk(info->gd);
-	info->gd = NULL;
 	blk_mq_free_tag_set(&info->tag_set);
 }
 
@@ -2126,38 +2106,16 @@ static int blkfront_resume(struct xenbus_device *dev)
 static void blkfront_closing(struct blkfront_info *info)
 {
 	struct xenbus_device *xbdev = info->xbdev;
-	struct block_device *bdev = NULL;
-
-	mutex_lock(&info->mutex);
-
-	if (xbdev->state == XenbusStateClosing) {
-		mutex_unlock(&info->mutex);
-		return;
-	}
 
-	if (info->gd)
-		bdev = bdgrab(info->gd->part0);
-
-	mutex_unlock(&info->mutex);
-
-	if (!bdev) {
-		xenbus_frontend_closed(xbdev);
+	if (xbdev->state == XenbusStateClosing)
 		return;
-	}
 
-	mutex_lock(&bdev->bd_disk->open_mutex);
-
-	if (bdev->bd_openers) {
-		xenbus_dev_error(xbdev, -EBUSY,
-				 "Device in use; refusing to close");
-		xenbus_switch_state(xbdev, XenbusStateClosing);
-	} else {
+	mutex_lock(&blkfront_mutex);
+	if (info->gd->flags & GENHD_FL_UP)
 		xlvbd_release_gendisk(info);
-		xenbus_frontend_closed(xbdev);
-	}
-
-	mutex_unlock(&bdev->bd_disk->open_mutex);
-	bdput(bdev);
+	mutex_unlock(&blkfront_mutex);
+	
+	xenbus_frontend_closed(xbdev);
 }
 
 static void blkfront_setup_discard(struct blkfront_info *info)
@@ -2472,8 +2430,7 @@ static void blkback_changed(struct xenbus_device *dev,
 			break;
 		fallthrough;
 	case XenbusStateClosing:
-		if (info)
-			blkfront_closing(info);
+		blkfront_closing(info);
 		break;
 	}
 }
@@ -2481,55 +2438,16 @@ static void blkback_changed(struct xenbus_device *dev,
 static int blkfront_remove(struct xenbus_device *xbdev)
 {
 	struct blkfront_info *info = dev_get_drvdata(&xbdev->dev);
-	struct block_device *bdev = NULL;
-	struct gendisk *disk;
 
 	dev_dbg(&xbdev->dev, "%s removed", xbdev->nodename);
 
-	if (!info)
-		return 0;
-
 	blkif_free(info, 0);
 
-	mutex_lock(&info->mutex);
-
-	disk = info->gd;
-	if (disk)
-		bdev = bdgrab(disk->part0);
-
-	info->xbdev = NULL;
-	mutex_unlock(&info->mutex);
-
-	if (!bdev) {
-		mutex_lock(&blkfront_mutex);
-		free_info(info);
-		mutex_unlock(&blkfront_mutex);
-		return 0;
-	}
-
-	/*
-	 * The xbdev was removed before we reached the Closed
-	 * state. See if it's safe to remove the disk. If the bdev
-	 * isn't closed yet, we let release take care of it.
-	 */
-
-	mutex_lock(&disk->open_mutex);
-	info = disk->private_data;
-
-	dev_warn(disk_to_dev(disk),
-		 "%s was hot-unplugged, %d stale handles\n",
-		 xbdev->nodename, bdev->bd_openers);
-
-	if (info && !bdev->bd_openers) {
+	mutex_lock(&blkfront_mutex);
+	if (info->gd->flags & GENHD_FL_UP)
 		xlvbd_release_gendisk(info);
-		disk->private_data = NULL;
-		mutex_lock(&blkfront_mutex);
-		free_info(info);
-		mutex_unlock(&blkfront_mutex);
-	}
-
-	mutex_unlock(&disk->open_mutex);
-	bdput(bdev);
+	free_info(info);
+	mutex_unlock(&blkfront_mutex);
 
 	return 0;
 }
@@ -2541,77 +2459,9 @@ static int blkfront_is_ready(struct xenbus_device *dev)
 	return info->is_ready && info->xbdev;
 }
 
-static int blkif_open(struct block_device *bdev, fmode_t mode)
-{
-	struct gendisk *disk = bdev->bd_disk;
-	struct blkfront_info *info;
-	int err = 0;
-
-	mutex_lock(&blkfront_mutex);
-
-	info = disk->private_data;
-	if (!info) {
-		/* xbdev gone */
-		err = -ERESTARTSYS;
-		goto out;
-	}
-
-	mutex_lock(&info->mutex);
-
-	if (!info->gd)
-		/* xbdev is closed */
-		err = -ERESTARTSYS;
-
-	mutex_unlock(&info->mutex);
-
-out:
-	mutex_unlock(&blkfront_mutex);
-	return err;
-}
-
-static void blkif_release(struct gendisk *disk, fmode_t mode)
-{
-	struct blkfront_info *info = disk->private_data;
-	struct xenbus_device *xbdev;
-
-	mutex_lock(&blkfront_mutex);
-	if (disk->part0->bd_openers)
-		goto out_mutex;
-
-	/*
-	 * Check if we have been instructed to close. We will have
-	 * deferred this request, because the bdev was still open.
-	 */
-
-	mutex_lock(&info->mutex);
-	xbdev = info->xbdev;
-
-	if (xbdev && xbdev->state == XenbusStateClosing) {
-		/* pending switch to state closed */
-		dev_info(disk_to_dev(disk), "releasing disk\n");
-		xlvbd_release_gendisk(info);
-		xenbus_frontend_closed(info->xbdev);
- 	}
-
-	mutex_unlock(&info->mutex);
-
-	if (!xbdev) {
-		/* sudden device removal */
-		dev_info(disk_to_dev(disk), "releasing disk\n");
-		xlvbd_release_gendisk(info);
-		disk->private_data = NULL;
-		free_info(info);
-	}
-
-out_mutex:
-	mutex_unlock(&blkfront_mutex);
-}
-
 static const struct block_device_operations xlvbd_block_fops =
 {
 	.owner = THIS_MODULE,
-	.open = blkif_open,
-	.release = blkif_release,
 	.getgeo = blkif_getgeo,
 	.ioctl = blkif_ioctl,
 	.compat_ioctl = blkdev_compat_ptr_ioctl,
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 13:17:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 13:17:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156624.289030 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m41FJ-0000uc-NF; Thu, 15 Jul 2021 13:17:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156624.289030; Thu, 15 Jul 2021 13:17:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m41FJ-0000uV-JV; Thu, 15 Jul 2021 13:17:45 +0000
Received: by outflank-mailman (input) for mailman id 156624;
 Thu, 15 Jul 2021 13:17:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=u0p9=MH=redhat.com=vkuznets@srs-us1.protection.inumbo.net>)
 id 1m41FH-0000uO-HG
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 13:17:43 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [216.205.24.124])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 08bcafa8-e56f-11eb-88d0-12813bfff9fa;
 Thu, 15 Jul 2021 13:17:41 +0000 (UTC)
Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com
 [209.85.208.71]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-133-SZ3CQVFEMF6xhntSqnFh4Q-1; Thu, 15 Jul 2021 09:17:40 -0400
Received: by mail-ed1-f71.google.com with SMTP id
 eg53-20020a05640228b5b02903ad3cc35040so1721883edb.11
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 06:17:39 -0700 (PDT)
Received: from vitty.brq.redhat.com (g-server-2.ign.cz. [91.219.240.2])
 by smtp.gmail.com with ESMTPSA id kb12sm1867346ejc.35.2021.07.15.06.17.37
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 15 Jul 2021 06:17:38 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08bcafa8-e56f-11eb-88d0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1626355061;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=fEnFR9sLZg9aNWBfSV+Jjv4oijW9gGY7ZZ8SM1EhDyo=;
	b=YHQlsJUpfF3QI/9XcNIXyPa0W7pofD4/CsWhMvspCdwQvqhasFVHUV36oDXt7EqG1fPblS
	pDhsBhtZehOZlBLosTrK7DuBiYwbrJuU1v0XYOWIH6Qx3j1TwqEZqAxtNtIIBU6r5Aabrq
	iudcXqGxdejSA70z474ZJ3/GWjgGSmk=
X-MC-Unique: SZ3CQVFEMF6xhntSqnFh4Q-1
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date
         :message-id:mime-version;
        bh=fEnFR9sLZg9aNWBfSV+Jjv4oijW9gGY7ZZ8SM1EhDyo=;
        b=L9qbRto/77C+T9oRQJAfrwmI38rSNt6ctAcUk9+uQIUrPvrbTFmLHNC1tI0Z4ZSpvg
         Dw6MvlU0rXXmGdb353xk7yh3PD19ffr9oXLwemaTVtG3gO8OuvTY9xzz1BgNm2HI+bmu
         j6ukNTZJdjLYs2rb/tBGO35QpkUgZhuW97uhN/NGRhZixOJ2hZjeF7zXXgqyHuESeWaL
         D4g9v9+dnPZopnsTQkxbeTvQuKEBXOMwcyrDcL36q081Vp2IYEckYNlZQT46rK6drgkK
         tzlImMP7Z8LxxZ4FbZHW/iu0pltHXC3n53u8S69a1zMXkV8UOI7meUW1iPjt79SC7vbR
         imOg==
X-Gm-Message-State: AOAM533NtAdVreZr4nSd6NFivWPFEaU9sALHbAZ2+Hz0syjrwTgmlkMF
	4M4Iwg1oI7oDSWCi0fOPzjrxXgn9gl6oO/tw7xzaFzFxWuVoxrIjeURNdDNIM5p91xHFX6UYuzm
	lwPn9ajwQvaf1SWzmU+2BeeXq5Hc=
X-Received: by 2002:a17:907:7293:: with SMTP id dt19mr5642585ejc.122.1626355058777;
        Thu, 15 Jul 2021 06:17:38 -0700 (PDT)
X-Google-Smtp-Source: ABdhPJy2vEkDU4ywXlhDnjL2xOkQcJAsMfg1xLGoIUohd2Oe+LOaHxUNb/4gntVHBypGHocKBtmQLw==
X-Received: by 2002:a17:907:7293:: with SMTP id dt19mr5642565ejc.122.1626355058533;
        Thu, 15 Jul 2021 06:17:38 -0700 (PDT)
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org, Boris
 Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Konrad Rzeszutek Wilk
 <konrad.wilk@oracle.com>, Roger Pau =?utf-8?Q?Monn=C3=A9?=
 <roger.pau@citrix.com>,
 Christoph Hellwig <hch@lst.de>
Subject: Re: [BUG report] Deadlock in xen-blkfront upon device hot-unplug
In-Reply-To: <20210715124622.GA32693@lst.de>
References: <87pmvk0wep.fsf@vitty.brq.redhat.com>
 <20210715124622.GA32693@lst.de>
Date: Thu, 15 Jul 2021 15:17:37 +0200
Message-ID: <87k0lr1zta.fsf@vitty.brq.redhat.com>
MIME-Version: 1.0
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=vkuznets@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain

Christoph Hellwig <hch@lst.de> writes:

> On Thu, Jul 15, 2021 at 11:16:30AM +0200, Vitaly Kuznetsov wrote:
>> I'm observing a deadlock every time I try to unplug a xen-blkfront
>> device. With 5.14-rc1+ the deadlock looks like:
>
> I did actually stumble over this a few days ago just from code
> inspection.  Below is what I come up with, can you give it a spin?

This eliminates the deadlock, thanks! Unfortunately, this reveals the
same issue I observed when I just dropped taking the mutex from
blkfront_closing():

[   66.455122] general protection fault, probably for non-canonical address 0xf1af5e354e6da159: 0000 [#1] SMP PTI
[   66.462802] CPU: 4 PID: 145 Comm: xenwatch Not tainted 5.14.0-rc1+ #370
[   66.467486] Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
[   66.472817] RIP: 0010:del_timer+0x1f/0x80
[   66.476570] Code: 71 af a3 00 eb c1 31 c0 c3 66 90 0f 1f 44 00 00 41 55 41 54 45 31 e4 55 48 83 ec 10 65 48 8b 04 25 28 00 00 00 48 89 44 24 08 <48> 8b 47 08 48 85 c0 74 2d 48 89 e6 48 89 fd e8 dd e8 ff ff 48 89
[   66.493967] RSP: 0018:ffffb5c10426bcd8 EFLAGS: 00010086
[   66.499416] RAX: a49b3c9544841100 RBX: f1af5e354e6da101 RCX: 0000000000005ebf
[   66.506386] RDX: 0000000000005ec0 RSI: 0000000000000001 RDI: f1af5e354e6da151
[   66.512799] RBP: ffffb5c10426bd30 R08: 0000000000000001 R09: 0000000000000001
[   66.518372] R10: 0000000000000001 R11: 0000000000000002 R12: 0000000000000000
[   66.523681] R13: ffff9aba8df63e40 R14: 0000000000000000 R15: ffff9aba86f40000
[   66.529365] FS:  0000000000000000(0000) GS:ffff9af609200000(0000) knlGS:0000000000000000
[   66.536187] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   66.540806] CR2: 00007ff024600130 CR3: 000000010117a006 CR4: 00000000001706e0
[   66.546345] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   66.552322] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   66.558501] Call Trace:
[   66.561449]  try_to_grab_pending+0x13f/0x2e0
[   66.565658]  cancel_delayed_work+0x2e/0xd0
[   66.570012]  blk_mq_stop_hw_queues+0x2d/0x50
[   66.574110]  blkfront_remove+0x30/0x130 [xen_blkfront]
[   66.579049]  xenbus_dev_remove+0x6d/0xf0
[   66.582473]  __device_release_driver+0x180/0x240
[   66.586963]  device_release_driver+0x26/0x40
[   66.591050]  bus_remove_device+0xef/0x160
[   66.594805]  device_del+0x18c/0x3e0
[   66.598570]  ? xenbus_probe_devices+0x120/0x120
[   66.602987]  ? klist_iter_exit+0x14/0x20
[   66.606915]  device_unregister+0x13/0x60
[   66.611135]  xenbus_dev_changed+0x174/0x1e0
[   66.615104]  xenwatch_thread+0x94/0x190
[   66.619028]  ? do_wait_intr_irq+0xb0/0xb0
[   66.623052]  ? xenbus_dev_request_and_reply+0x90/0x90
[   66.628218]  kthread+0x149/0x170
[   66.631509]  ? set_kthread_struct+0x40/0x40
[   66.635355]  ret_from_fork+0x22/0x30
[   66.639162] Modules linked in: vfat fat i2c_piix4 xfs libcrc32c crct10dif_pclmul crc32_pclmul crc32c_intel xen_blkfront ghash_clmulni_intel ena
[   66.650868] ---[ end trace 7fa9da1e39697767 ]---
[   66.655490] RIP: 0010:del_timer+0x1f/0x80
[   66.659813] Code: 71 af a3 00 eb c1 31 c0 c3 66 90 0f 1f 44 00 00 41 55 41 54 45 31 e4 55 48 83 ec 10 65 48 8b 04 25 28 00 00 00 48 89 44 24 08 <48> 8b 47 08 48 85 c0 74 2d 48 89 e6 48 89 fd e8 dd e8 ff ff 48 89
[   66.681045] RSP: 0018:ffffb5c10426bcd8 EFLAGS: 00010086
[   66.685888] RAX: a49b3c9544841100 RBX: f1af5e354e6da101 RCX: 0000000000005ebf
[   66.692153] RDX: 0000000000005ec0 RSI: 0000000000000001 RDI: f1af5e354e6da151
[   66.698778] RBP: ffffb5c10426bd30 R08: 0000000000000001 R09: 0000000000000001
[   66.705175] R10: 0000000000000001 R11: 0000000000000002 R12: 0000000000000000
[   66.711696] R13: ffff9aba8df63e40 R14: 0000000000000000 R15: ffff9aba86f40000
[   66.718035] FS:  0000000000000000(0000) GS:ffff9af609200000(0000) knlGS:0000000000000000
[   66.725210] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   66.730291] CR2: 00007ff024600130 CR3: 000000010117a006 CR4: 00000000001706e0
[   66.736235] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   66.742373] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   66.749026] BUG: sleeping function called from invalid context at include/linux/percpu-rwsem.h:49
[   66.756118] in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 145, name: xenwatch
[   66.763473] INFO: lockdep is turned off.
[   66.767428] irq event stamp: 24256
[   66.770900] hardirqs last  enabled at (24255): [<ffffffff90c32aeb>] _raw_spin_unlock_irqrestore+0x4b/0x5d
[   66.779620] hardirqs last disabled at (24256): [<ffffffff900fe21c>] try_to_grab_pending+0x15c/0x2e0
[   66.787763] softirqs last  enabled at (24196): [<ffffffff900e0b11>] __irq_exit_rcu+0xe1/0x100
[   66.794519] softirqs last disabled at (24191): [<ffffffff900e0b11>] __irq_exit_rcu+0xe1/0x100
[   66.801953] CPU: 4 PID: 145 Comm: xenwatch Tainted: G      D           5.14.0-rc1+ #370
[   66.809315] Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
[   66.814924] Call Trace:
[   66.817461]  dump_stack_lvl+0x6a/0x9a
[   66.821171]  ___might_sleep.cold+0xb6/0xc6
[   66.825436]  exit_signals+0x1c/0x2d0
[   66.829328]  do_exit+0xc7/0xbb0
[   66.832364]  ? kthread+0x149/0x170
[   66.835039]  rewind_stack_do_exit+0x17/0x20
[   66.838710] RIP: 0000:0x0
[   66.841671] Code: Unable to access opcode bytes at RIP 0xffffffffffffffd6.
[   66.847271] RSP: 0000:0000000000000000 EFLAGS: 00000000 ORIG_RAX: 0000000000000000
[   66.854271] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[   66.860672] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
[   66.866687] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[   66.872966] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
[   66.878410] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000

-- 
Vitaly



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 13:47:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 13:47:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156631.289040 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m41hf-0004rT-1a; Thu, 15 Jul 2021 13:47:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156631.289040; Thu, 15 Jul 2021 13:47:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m41he-0004qx-Uk; Thu, 15 Jul 2021 13:47:02 +0000
Received: by outflank-mailman (input) for mailman id 156631;
 Thu, 15 Jul 2021 13:47:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aGUF=MH=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m41hd-0004m9-Pf
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 13:47:01 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1ffd1226-e573-11eb-88d4-12813bfff9fa;
 Thu, 15 Jul 2021 13:46:59 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id AF04D67373; Thu, 15 Jul 2021 15:46:56 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1ffd1226-e573-11eb-88d4-12813bfff9fa
Date: Thu, 15 Jul 2021 15:46:56 +0200
From: Christoph Hellwig <hch@lst.de>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>, xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>
Subject: Re: [BUG report] Deadlock in xen-blkfront upon device hot-unplug
Message-ID: <20210715134656.GA4167@lst.de>
References: <87pmvk0wep.fsf@vitty.brq.redhat.com> <20210715124622.GA32693@lst.de> <87k0lr1zta.fsf@vitty.brq.redhat.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <87k0lr1zta.fsf@vitty.brq.redhat.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Thu, Jul 15, 2021 at 03:17:37PM +0200, Vitaly Kuznetsov wrote:
> Christoph Hellwig <hch@lst.de> writes:
> 
> > On Thu, Jul 15, 2021 at 11:16:30AM +0200, Vitaly Kuznetsov wrote:
> >> I'm observing a deadlock every time I try to unplug a xen-blkfront
> >> device. With 5.14-rc1+ the deadlock looks like:
> >
> > I did actually stumble over this a few days ago just from code
> > inspection.  Below is what I come up with, can you give it a spin?
> 
> This eliminates the deadlock, thanks! Unfortunately, this reveals the
> same issue I observed when I just dropped taking the mutex from
> blkfront_closing():

Yeah, this still left too much cruft in blkfront_closing.  Can you
try this version instead?

---
>From 4d926a44f15d2051909132182345754df23cc13d Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Tue, 29 Jun 2021 13:49:22 +0200
Subject: xen-blkfront: sanitize the removal state machine

xen-blkfront has a weird protocol where close message from the remote
side can be delayed, and where hot removals are treated somewhat
differently from regular removals, all leading to potential NULL
pointer removals.  Fix this by just performing normal hot removals
even when the device is opened like all other Linux block drivers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/block/xen-blkfront.c | 208 ++++-------------------------------
 1 file changed, 24 insertions(+), 184 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8d49f8fa98bb..09ceb7bd585a 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -502,34 +502,21 @@ static int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg)
 static int blkif_ioctl(struct block_device *bdev, fmode_t mode,
 		       unsigned command, unsigned long argument)
 {
-	struct blkfront_info *info = bdev->bd_disk->private_data;
 	int i;
 
-	dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n",
-		command, (long)argument);
-
 	switch (command) {
 	case CDROMMULTISESSION:
-		dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n");
 		for (i = 0; i < sizeof(struct cdrom_multisession); i++)
 			if (put_user(0, (char __user *)(argument + i)))
 				return -EFAULT;
 		return 0;
-
-	case CDROM_GET_CAPABILITY: {
-		struct gendisk *gd = info->gd;
-		if (gd->flags & GENHD_FL_CD)
+	case CDROM_GET_CAPABILITY:
+		if (bdev->bd_disk->flags & GENHD_FL_CD)
 			return 0;
 		return -EINVAL;
-	}
-
 	default:
-		/*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n",
-		  command);*/
-		return -EINVAL; /* same return as native Linux */
+		return -EINVAL;
 	}
-
-	return 0;
 }
 
 static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
@@ -1177,36 +1164,6 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
 	return err;
 }
 
-static void xlvbd_release_gendisk(struct blkfront_info *info)
-{
-	unsigned int minor, nr_minors, i;
-	struct blkfront_ring_info *rinfo;
-
-	if (info->rq == NULL)
-		return;
-
-	/* No more blkif_request(). */
-	blk_mq_stop_hw_queues(info->rq);
-
-	for_each_rinfo(info, rinfo, i) {
-		/* No more gnttab callback work. */
-		gnttab_cancel_free_callback(&rinfo->callback);
-
-		/* Flush gnttab callback work. Must be done with no locks held. */
-		flush_work(&rinfo->work);
-	}
-
-	del_gendisk(info->gd);
-
-	minor = info->gd->first_minor;
-	nr_minors = info->gd->minors;
-	xlbd_release_minors(minor, nr_minors);
-
-	blk_cleanup_disk(info->gd);
-	info->gd = NULL;
-	blk_mq_free_tag_set(&info->tag_set);
-}
-
 /* Already hold rinfo->ring_lock. */
 static inline void kick_pending_request_queues_locked(struct blkfront_ring_info *rinfo)
 {
@@ -2126,38 +2083,26 @@ static int blkfront_resume(struct xenbus_device *dev)
 static void blkfront_closing(struct blkfront_info *info)
 {
 	struct xenbus_device *xbdev = info->xbdev;
-	struct block_device *bdev = NULL;
-
-	mutex_lock(&info->mutex);
+	struct blkfront_ring_info *rinfo;
+	unsigned int i;
 
-	if (xbdev->state == XenbusStateClosing) {
-		mutex_unlock(&info->mutex);
+	if (xbdev->state == XenbusStateClosing)
 		return;
-	}
-
-	if (info->gd)
-		bdev = bdgrab(info->gd->part0);
 
-	mutex_unlock(&info->mutex);
-
-	if (!bdev) {
-		xenbus_frontend_closed(xbdev);
-		return;
-	}
+	/* No more blkif_request(). */
+	blk_mq_stop_hw_queues(info->rq);
+	blk_set_queue_dying(info->rq);
+	set_capacity(info->gd, 0);
 
-	mutex_lock(&bdev->bd_disk->open_mutex);
+	for_each_rinfo(info, rinfo, i) {
+		/* No more gnttab callback work. */
+		gnttab_cancel_free_callback(&rinfo->callback);
 
-	if (bdev->bd_openers) {
-		xenbus_dev_error(xbdev, -EBUSY,
-				 "Device in use; refusing to close");
-		xenbus_switch_state(xbdev, XenbusStateClosing);
-	} else {
-		xlvbd_release_gendisk(info);
-		xenbus_frontend_closed(xbdev);
+		/* Flush gnttab callback work. Must be done with no locks held. */
+		flush_work(&rinfo->work);
 	}
 
-	mutex_unlock(&bdev->bd_disk->open_mutex);
-	bdput(bdev);
+	xenbus_frontend_closed(xbdev);
 }
 
 static void blkfront_setup_discard(struct blkfront_info *info)
@@ -2472,8 +2417,7 @@ static void blkback_changed(struct xenbus_device *dev,
 			break;
 		fallthrough;
 	case XenbusStateClosing:
-		if (info)
-			blkfront_closing(info);
+		blkfront_closing(info);
 		break;
 	}
 }
@@ -2481,55 +2425,19 @@ static void blkback_changed(struct xenbus_device *dev,
 static int blkfront_remove(struct xenbus_device *xbdev)
 {
 	struct blkfront_info *info = dev_get_drvdata(&xbdev->dev);
-	struct block_device *bdev = NULL;
-	struct gendisk *disk;
 
 	dev_dbg(&xbdev->dev, "%s removed", xbdev->nodename);
 
-	if (!info)
-		return 0;
+	del_gendisk(info->gd);
 
 	blkif_free(info, 0);
+	xlbd_release_minors(info->gd->first_minor, info->gd->minors);
+	blk_cleanup_disk(info->gd);
+	blk_mq_free_tag_set(&info->tag_set);
 
-	mutex_lock(&info->mutex);
-
-	disk = info->gd;
-	if (disk)
-		bdev = bdgrab(disk->part0);
-
-	info->xbdev = NULL;
-	mutex_unlock(&info->mutex);
-
-	if (!bdev) {
-		mutex_lock(&blkfront_mutex);
-		free_info(info);
-		mutex_unlock(&blkfront_mutex);
-		return 0;
-	}
-
-	/*
-	 * The xbdev was removed before we reached the Closed
-	 * state. See if it's safe to remove the disk. If the bdev
-	 * isn't closed yet, we let release take care of it.
-	 */
-
-	mutex_lock(&disk->open_mutex);
-	info = disk->private_data;
-
-	dev_warn(disk_to_dev(disk),
-		 "%s was hot-unplugged, %d stale handles\n",
-		 xbdev->nodename, bdev->bd_openers);
-
-	if (info && !bdev->bd_openers) {
-		xlvbd_release_gendisk(info);
-		disk->private_data = NULL;
-		mutex_lock(&blkfront_mutex);
-		free_info(info);
-		mutex_unlock(&blkfront_mutex);
-	}
-
-	mutex_unlock(&disk->open_mutex);
-	bdput(bdev);
+	mutex_lock(&blkfront_mutex);
+	free_info(info);
+	mutex_unlock(&blkfront_mutex);
 
 	return 0;
 }
@@ -2541,77 +2449,9 @@ static int blkfront_is_ready(struct xenbus_device *dev)
 	return info->is_ready && info->xbdev;
 }
 
-static int blkif_open(struct block_device *bdev, fmode_t mode)
-{
-	struct gendisk *disk = bdev->bd_disk;
-	struct blkfront_info *info;
-	int err = 0;
-
-	mutex_lock(&blkfront_mutex);
-
-	info = disk->private_data;
-	if (!info) {
-		/* xbdev gone */
-		err = -ERESTARTSYS;
-		goto out;
-	}
-
-	mutex_lock(&info->mutex);
-
-	if (!info->gd)
-		/* xbdev is closed */
-		err = -ERESTARTSYS;
-
-	mutex_unlock(&info->mutex);
-
-out:
-	mutex_unlock(&blkfront_mutex);
-	return err;
-}
-
-static void blkif_release(struct gendisk *disk, fmode_t mode)
-{
-	struct blkfront_info *info = disk->private_data;
-	struct xenbus_device *xbdev;
-
-	mutex_lock(&blkfront_mutex);
-	if (disk->part0->bd_openers)
-		goto out_mutex;
-
-	/*
-	 * Check if we have been instructed to close. We will have
-	 * deferred this request, because the bdev was still open.
-	 */
-
-	mutex_lock(&info->mutex);
-	xbdev = info->xbdev;
-
-	if (xbdev && xbdev->state == XenbusStateClosing) {
-		/* pending switch to state closed */
-		dev_info(disk_to_dev(disk), "releasing disk\n");
-		xlvbd_release_gendisk(info);
-		xenbus_frontend_closed(info->xbdev);
- 	}
-
-	mutex_unlock(&info->mutex);
-
-	if (!xbdev) {
-		/* sudden device removal */
-		dev_info(disk_to_dev(disk), "releasing disk\n");
-		xlvbd_release_gendisk(info);
-		disk->private_data = NULL;
-		free_info(info);
-	}
-
-out_mutex:
-	mutex_unlock(&blkfront_mutex);
-}
-
 static const struct block_device_operations xlvbd_block_fops =
 {
 	.owner = THIS_MODULE,
-	.open = blkif_open,
-	.release = blkif_release,
 	.getgeo = blkif_getgeo,
 	.ioctl = blkif_ioctl,
 	.compat_ioctl = blkdev_compat_ptr_ioctl,
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 14:10:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 14:10:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156637.289052 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m423p-0007rF-To; Thu, 15 Jul 2021 14:09:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156637.289052; Thu, 15 Jul 2021 14:09:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m423p-0007r8-Qb; Thu, 15 Jul 2021 14:09:57 +0000
Received: by outflank-mailman (input) for mailman id 156637;
 Thu, 15 Jul 2021 14:09:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=u0p9=MH=redhat.com=vkuznets@srs-us1.protection.inumbo.net>)
 id 1m423p-0007r2-3Z
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 14:09:57 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [216.205.24.124])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id aecea5ce-d0ff-42bb-af0a-7015bb6e4a1a;
 Thu, 15 Jul 2021 14:09:56 +0000 (UTC)
Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com
 [209.85.218.72]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-381-TjYoHJKJPN-PJw60Hx0iVw-1; Thu, 15 Jul 2021 10:09:54 -0400
Received: by mail-ej1-f72.google.com with SMTP id
 k1-20020a17090666c1b029041c273a883dso2263020ejp.3
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 07:09:52 -0700 (PDT)
Received: from vitty.brq.redhat.com (g-server-2.ign.cz. [91.219.240.2])
 by smtp.gmail.com with ESMTPSA id n11sm1941466ejg.43.2021.07.15.07.09.50
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 15 Jul 2021 07:09:51 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aecea5ce-d0ff-42bb-af0a-7015bb6e4a1a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1626358196;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=tFJXZGV7aNAREnh89TW34RE/5AHLlwB5DBQieYCgIYY=;
	b=bikQqXnXiU5CAAP5YwOwgVOTB0gJYSJonfBSJfTPJORC0sVeYA6R7xb5fllN8U8onvFOh9
	0Pc7FJephXBoNeICZfT9ZB9TfvuLzwDTEsTWu1Sjrt4Pc09XWuvv+AS5oxac/LzHI2nK52
	0jLWxQvCmiQ1l1xj37CUCM/87Y+gfTg=
X-MC-Unique: TjYoHJKJPN-PJw60Hx0iVw-1
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date
         :message-id:mime-version;
        bh=tFJXZGV7aNAREnh89TW34RE/5AHLlwB5DBQieYCgIYY=;
        b=jbpDQU8vIVE7RE1XI1fiMJUINR3KkQ3Xr9A5KQaC5L3YWZ5PMMOJTqbR+Fdv1KckDW
         vCF+cNFmweHqC2uUiwB2KApJuys/d0it1xisyMLMAUy+DKk49NljaSotCD2J2b8UTBLs
         n04uG3tw8mTHAnJiFwazosV540zHvmuFe56ZKDN8+QoZI8oilJYbul4/3jiSyTpO3HHb
         sa7cXJQZha8R/Nid6Eoxne+9lKXvsLY4ColHsz37q66/YvEMI4RAaxIQboRMnMSnBN1O
         6fIkLTno3tbAaBPLxABFn2dWt2riA7soxxiPMBqx2Pw8n9Fz08l9ZR1ZydPk9TtDWnH0
         KfDw==
X-Gm-Message-State: AOAM532HnZeHs/sbPwZE7BkKZz0D0bl7RGQ3ESOcbS6lwczloNiatDfA
	hO+dK64Uw8woUbLJCr/pVrIrYBQLd0SYl/KC1ZljI/6Ra5ctokYBqzLj+EcW31rlvGmFuRd+f1T
	VoayFTvSOOFS7d9Ug+D6KG0fSZK8=
X-Received: by 2002:aa7:d991:: with SMTP id u17mr7226993eds.240.1626358191952;
        Thu, 15 Jul 2021 07:09:51 -0700 (PDT)
X-Google-Smtp-Source: ABdhPJw4KCo5yWB3CUiMiCx4bNhZEE9IvvOeUpFd2/S/H0MMsvN7gNqlBpEaA1BuPjpWA2rCZTWo6g==
X-Received: by 2002:aa7:d991:: with SMTP id u17mr7226968eds.240.1626358191806;
        Thu, 15 Jul 2021 07:09:51 -0700 (PDT)
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org, Boris
 Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Konrad Rzeszutek Wilk
 <konrad.wilk@oracle.com>, Roger Pau =?utf-8?Q?Monn=C3=A9?=
 <roger.pau@citrix.com>
Subject: Re: [BUG report] Deadlock in xen-blkfront upon device hot-unplug
In-Reply-To: <20210715134656.GA4167@lst.de>
References: <87pmvk0wep.fsf@vitty.brq.redhat.com>
 <20210715124622.GA32693@lst.de> <87k0lr1zta.fsf@vitty.brq.redhat.com>
 <20210715134656.GA4167@lst.de>
Date: Thu, 15 Jul 2021 16:09:49 +0200
Message-ID: <87eebz1xea.fsf@vitty.brq.redhat.com>
MIME-Version: 1.0
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=vkuznets@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain

Christoph Hellwig <hch@lst.de> writes:

> On Thu, Jul 15, 2021 at 03:17:37PM +0200, Vitaly Kuznetsov wrote:
>> Christoph Hellwig <hch@lst.de> writes:
>> 
>> > On Thu, Jul 15, 2021 at 11:16:30AM +0200, Vitaly Kuznetsov wrote:
>> >> I'm observing a deadlock every time I try to unplug a xen-blkfront
>> >> device. With 5.14-rc1+ the deadlock looks like:
>> >
>> > I did actually stumble over this a few days ago just from code
>> > inspection.  Below is what I come up with, can you give it a spin?
>> 
>> This eliminates the deadlock, thanks! Unfortunately, this reveals the
>> same issue I observed when I just dropped taking the mutex from
>> blkfront_closing():
>
> Yeah, this still left too much cruft in blkfront_closing.  Can you
> try this version instead?
>

This one seems to work fine for me! Feel free to throw

Tested-by: Vitaly Kuznetsov <vkuznets@redhat.com>

in. Thanks a lot!

-- 
Vitaly



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 14:12:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 14:12:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156642.289063 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m426A-0000lx-Ai; Thu, 15 Jul 2021 14:12:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156642.289063; Thu, 15 Jul 2021 14:12:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m426A-0000lq-7A; Thu, 15 Jul 2021 14:12:22 +0000
Received: by outflank-mailman (input) for mailman id 156642;
 Thu, 15 Jul 2021 14:12:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Q7zA=MH=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m4268-0000la-WE
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 14:12:21 +0000
Received: from mo4-p01-ob.smtp.rzone.de (unknown [85.215.255.52])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id aa3042da-e576-11eb-88d8-12813bfff9fa;
 Thu, 15 Jul 2021 14:12:19 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id t06ddcx6FECA5ti
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 15 Jul 2021 16:12:10 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aa3042da-e576-11eb-88d8-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626358330;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=L9rixT/bSU/Nv4AywOSJTW4LEsS2c94gnjAGXkqKPXs=;
    b=IiLDyVulL6e0yXy0z3yz8lZ432ySMwGgTOUennaVXywWDA3s0/HuHYq95ExqFEJ8sR
    sS65d8CwFJ5RyMXgXr6EcGQr4ez0Ug9bXNpMeDPLY4H0fTyiccP2S5C2S5pOXVU6e1XA
    P/JWDta32XIIoniR/+PvBRHD8xKlf352OMUBkK5uUtHRjnjzsfNYRBtThrYj9NARbTZq
    hn2qya75I4Y+9ry2r/gh9hjOwqN5WuZiMkiqpzavKBOEire7Wpm8qiQdIYVO8+O7f2wL
    jymHYYN0nVXXwWOzd2KNDs0sJeGHNbIKzb0rEfHb5JK39j/htfvXshsgg5zSKhmgT3Tk
    QdzA==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF+Uh7RO03shFRdjHl0ahyOVapB5ArPk3G5dZ8E"
X-RZG-CLASS-ID: mo00
Date: Thu, 15 Jul 2021 16:11:57 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Ian
 Jackson <ian.jackson@citrix.com>, George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>, Anthony
 Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>
Subject: Re: preparations for 4.15.1 and 4.13.4
Message-ID: <20210715161157.7e85ed9e.olaf@aepfle.de>
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/uxshyIRnet8XoD2X.eONf9O";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/uxshyIRnet8XoD2X.eONf9O
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Thu, 15 Jul 2021 09:58:24 +0200
schrieb Jan Beulich <jbeulich@suse.com>:

> Please point out backports you find missing from the respective staging b=
ranches, but which you consider relevant.

Depending on how green the CI is supposed to be:

76416c459c libfsimage: fix parentheses in macro parameters
e54c433adf libfsimage: fix clang 10 build

This will likely turn the Leap clang builds at https://gitlab.com/xen-proje=
ct/xen/-/pipelines/337629824 green.

Olaf

--Sig_/uxshyIRnet8XoD2X.eONf9O
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDwQi0ACgkQ86SN7mm1
DoDowQ//YS5eCfJrHUrMYAxQE6UWJyM7M1B5KvcfAu0BKKFWimuZrEWULmEhZEVp
moUHpXNesKxIXsHcdrShlaNLNgzYpHaSevn6R2rV37CMF4XUodzLS9qMruBK25ne
e5r9k9BPgPMWNRB+ldFOZg/tBKPlgzouKdQlqb0csaD9MW8MNXJFZ76yMq4HX71s
XY3UvhCvhyL3dgXB1bgL2kqilzmz9fmpPiNgtrNhvqUBrPaALnqI5tzfq6i273Rf
fjhKEKdF/vbRnlVByyXRJCiq2RpofMbaWSRF5QGQkIuThisexOQIsXfrWvJBOsJS
94AedoKngAm6/J0BbueIGu9J9uGqFmqrpFA7aaO/AsaPxA3RVPjWUFYCyqdqz9Hb
pcq1YrtQopw62wvpJbl9o20ws/Lmb4t6nIkQDUfhKYSvEe1lwCXcZIc0jq+eK43Z
o6Fjhi798hY9Qho66TOV8WAJJan9knmJFE8QIj+oliFMr9F3GL1wBYKMeNyZ7Pi8
VBnNo0cGgqTS3BVmbh1L/yyRfH/lty2EHvoHwImtNWQzkk9/BI0jxPWyGtkXYEPA
3NcxEbe1vwgtb6Bq1N0A7J6Dx8sOxwLec23gKm9M3ALCmMnK4M2zjpMpFra5ve2w
w3u9fXPRImU2JgW01+g4r6C0QehAsSpFHoGcAe/bNEQyFrgp1l0=
=ijev
-----END PGP SIGNATURE-----

--Sig_/uxshyIRnet8XoD2X.eONf9O--


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 14:18:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 14:18:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156650.289074 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m42CP-0001mO-4U; Thu, 15 Jul 2021 14:18:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156650.289074; Thu, 15 Jul 2021 14:18:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m42CP-0001mH-1U; Thu, 15 Jul 2021 14:18:49 +0000
Received: by outflank-mailman (input) for mailman id 156650;
 Thu, 15 Jul 2021 14:18:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=voBD=MH=casper.srs.infradead.org=BATV+3cac5ad57d752804f19d+6535+infradead.org+hch@srs-us1.protection.inumbo.net>)
 id 1m42CN-0001mB-H4
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 14:18:47 +0000
Received: from casper.infradead.org (unknown [2001:8b0:10b:1236::1])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 43279ffc-1b42-4eba-93d9-37bb40a18545;
 Thu, 15 Jul 2021 14:18:43 +0000 (UTC)
Received: from [2001:4bb8:184:8b7c:799f:7892:b8a2:a8] (helo=localhost)
 by casper.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux))
 id 1m42Aq-003QRr-8X; Thu, 15 Jul 2021 14:17:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 43279ffc-1b42-4eba-93d9-37bb40a18545
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version:
	Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:
	Content-Description:In-Reply-To:References;
	bh=VAAPsXJGTYSz80YaP9sj6eBH4VYcoQAKnAyYRshjrDo=; b=jjgHD1mBEs6UaGf8StmO8i350e
	XDjd2RmSfXSPhWdWaOcSlCJKQMTQeFF7DjHUEZH0fW/0ZlNSX4SV1tg5JtYmO2f+6M7Pg7HDVfn//
	S0cFmgz6KcVHkjcNur3VEWSnPQvkHGo/Uh+6tAF/cytGIeGztDxIg5SL7FhUhzQB3FE7SWadvgL37
	gSM/9m0LxRQpXV3odjqmfKYVCx5canS3n1csV5LSopfcXGWKXM+0myoQ9r6zXJpeZ/qkI8kL6nR2e
	NnZ7Sr9XN4mFgxbgUQbbn0dqKiyAIh+YBsMQ4986O5/e9RbT+IPtRxLCvOzIYR2Zr2jPlV9jL9er5
	DElIHYvA==;
From: Christoph Hellwig <hch@lst.de>
To: konrad.wilk@oracle.com,
	roger.pau@citrix.com
Cc: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	Vitaly Kuznetsov <vkuznets@redhat.com>
Subject: [PATCH] xen-blkfront: sanitize the removal state machine
Date: Thu, 15 Jul 2021 16:17:11 +0200
Message-Id: <20210715141711.1257293-1-hch@lst.de>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SRS-Rewrite: SMTP reverse-path rewritten from <hch@infradead.org> by casper.infradead.org. See http://www.infradead.org/rpr.html

xen-blkfront has a weird protocol where close message from the remote
side can be delayed, and where hot removals are treated somewhat
differently from regular removals, all leading to potential NULL
pointer removals, and a del_gendisk from the block device release
method, which will deadlock. Fix this by just performing normal hot
removals even when the device is opened like all other Linux block
drivers.

Fixes: c76f48eb5c08 ("block: take bd_mutex around delete_partitions in del_gendisk")
Reported-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
 drivers/block/xen-blkfront.c | 224 ++++-------------------------------
 1 file changed, 26 insertions(+), 198 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8d49f8fa98bb..d83fee21f6c5 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -502,34 +502,21 @@ static int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg)
 static int blkif_ioctl(struct block_device *bdev, fmode_t mode,
 		       unsigned command, unsigned long argument)
 {
-	struct blkfront_info *info = bdev->bd_disk->private_data;
 	int i;
 
-	dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n",
-		command, (long)argument);
-
 	switch (command) {
 	case CDROMMULTISESSION:
-		dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n");
 		for (i = 0; i < sizeof(struct cdrom_multisession); i++)
 			if (put_user(0, (char __user *)(argument + i)))
 				return -EFAULT;
 		return 0;
-
-	case CDROM_GET_CAPABILITY: {
-		struct gendisk *gd = info->gd;
-		if (gd->flags & GENHD_FL_CD)
+	case CDROM_GET_CAPABILITY:
+		if (bdev->bd_disk->flags & GENHD_FL_CD)
 			return 0;
 		return -EINVAL;
-	}
-
 	default:
-		/*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n",
-		  command);*/
-		return -EINVAL; /* same return as native Linux */
+		return -EINVAL;
 	}
-
-	return 0;
 }
 
 static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
@@ -1177,36 +1164,6 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
 	return err;
 }
 
-static void xlvbd_release_gendisk(struct blkfront_info *info)
-{
-	unsigned int minor, nr_minors, i;
-	struct blkfront_ring_info *rinfo;
-
-	if (info->rq == NULL)
-		return;
-
-	/* No more blkif_request(). */
-	blk_mq_stop_hw_queues(info->rq);
-
-	for_each_rinfo(info, rinfo, i) {
-		/* No more gnttab callback work. */
-		gnttab_cancel_free_callback(&rinfo->callback);
-
-		/* Flush gnttab callback work. Must be done with no locks held. */
-		flush_work(&rinfo->work);
-	}
-
-	del_gendisk(info->gd);
-
-	minor = info->gd->first_minor;
-	nr_minors = info->gd->minors;
-	xlbd_release_minors(minor, nr_minors);
-
-	blk_cleanup_disk(info->gd);
-	info->gd = NULL;
-	blk_mq_free_tag_set(&info->tag_set);
-}
-
 /* Already hold rinfo->ring_lock. */
 static inline void kick_pending_request_queues_locked(struct blkfront_ring_info *rinfo)
 {
@@ -1756,12 +1713,6 @@ static int write_per_ring_nodes(struct xenbus_transaction xbt,
 	return err;
 }
 
-static void free_info(struct blkfront_info *info)
-{
-	list_del(&info->info_list);
-	kfree(info);
-}
-
 /* Common code used when first setting up, and when resuming. */
 static int talk_to_blkback(struct xenbus_device *dev,
 			   struct blkfront_info *info)
@@ -1880,13 +1831,6 @@ static int talk_to_blkback(struct xenbus_device *dev,
 		xenbus_dev_fatal(dev, err, "%s", message);
  destroy_blkring:
 	blkif_free(info, 0);
-
-	mutex_lock(&blkfront_mutex);
-	free_info(info);
-	mutex_unlock(&blkfront_mutex);
-
-	dev_set_drvdata(&dev->dev, NULL);
-
 	return err;
 }
 
@@ -2126,38 +2070,26 @@ static int blkfront_resume(struct xenbus_device *dev)
 static void blkfront_closing(struct blkfront_info *info)
 {
 	struct xenbus_device *xbdev = info->xbdev;
-	struct block_device *bdev = NULL;
-
-	mutex_lock(&info->mutex);
+	struct blkfront_ring_info *rinfo;
+	unsigned int i;
 
-	if (xbdev->state == XenbusStateClosing) {
-		mutex_unlock(&info->mutex);
+	if (xbdev->state == XenbusStateClosing)
 		return;
-	}
 
-	if (info->gd)
-		bdev = bdgrab(info->gd->part0);
-
-	mutex_unlock(&info->mutex);
-
-	if (!bdev) {
-		xenbus_frontend_closed(xbdev);
-		return;
-	}
+	/* No more blkif_request(). */
+	blk_mq_stop_hw_queues(info->rq);
+	blk_set_queue_dying(info->rq);
+	set_capacity(info->gd, 0);
 
-	mutex_lock(&bdev->bd_disk->open_mutex);
+	for_each_rinfo(info, rinfo, i) {
+		/* No more gnttab callback work. */
+		gnttab_cancel_free_callback(&rinfo->callback);
 
-	if (bdev->bd_openers) {
-		xenbus_dev_error(xbdev, -EBUSY,
-				 "Device in use; refusing to close");
-		xenbus_switch_state(xbdev, XenbusStateClosing);
-	} else {
-		xlvbd_release_gendisk(info);
-		xenbus_frontend_closed(xbdev);
+		/* Flush gnttab callback work. Must be done with no locks held. */
+		flush_work(&rinfo->work);
 	}
 
-	mutex_unlock(&bdev->bd_disk->open_mutex);
-	bdput(bdev);
+	xenbus_frontend_closed(xbdev);
 }
 
 static void blkfront_setup_discard(struct blkfront_info *info)
@@ -2472,8 +2404,7 @@ static void blkback_changed(struct xenbus_device *dev,
 			break;
 		fallthrough;
 	case XenbusStateClosing:
-		if (info)
-			blkfront_closing(info);
+		blkfront_closing(info);
 		break;
 	}
 }
@@ -2481,56 +2412,21 @@ static void blkback_changed(struct xenbus_device *dev,
 static int blkfront_remove(struct xenbus_device *xbdev)
 {
 	struct blkfront_info *info = dev_get_drvdata(&xbdev->dev);
-	struct block_device *bdev = NULL;
-	struct gendisk *disk;
 
 	dev_dbg(&xbdev->dev, "%s removed", xbdev->nodename);
 
-	if (!info)
-		return 0;
-
-	blkif_free(info, 0);
-
-	mutex_lock(&info->mutex);
-
-	disk = info->gd;
-	if (disk)
-		bdev = bdgrab(disk->part0);
-
-	info->xbdev = NULL;
-	mutex_unlock(&info->mutex);
-
-	if (!bdev) {
-		mutex_lock(&blkfront_mutex);
-		free_info(info);
-		mutex_unlock(&blkfront_mutex);
-		return 0;
-	}
-
-	/*
-	 * The xbdev was removed before we reached the Closed
-	 * state. See if it's safe to remove the disk. If the bdev
-	 * isn't closed yet, we let release take care of it.
-	 */
-
-	mutex_lock(&disk->open_mutex);
-	info = disk->private_data;
-
-	dev_warn(disk_to_dev(disk),
-		 "%s was hot-unplugged, %d stale handles\n",
-		 xbdev->nodename, bdev->bd_openers);
+	del_gendisk(info->gd);
 
-	if (info && !bdev->bd_openers) {
-		xlvbd_release_gendisk(info);
-		disk->private_data = NULL;
-		mutex_lock(&blkfront_mutex);
-		free_info(info);
-		mutex_unlock(&blkfront_mutex);
-	}
+	mutex_lock(&blkfront_mutex);
+	list_del(&info->info_list);
+	mutex_unlock(&blkfront_mutex);
 
-	mutex_unlock(&disk->open_mutex);
-	bdput(bdev);
+	blkif_free(info, 0);
+	xlbd_release_minors(info->gd->first_minor, info->gd->minors);
+	blk_cleanup_disk(info->gd);
+	blk_mq_free_tag_set(&info->tag_set);
 
+	kfree(info);
 	return 0;
 }
 
@@ -2541,77 +2437,9 @@ static int blkfront_is_ready(struct xenbus_device *dev)
 	return info->is_ready && info->xbdev;
 }
 
-static int blkif_open(struct block_device *bdev, fmode_t mode)
-{
-	struct gendisk *disk = bdev->bd_disk;
-	struct blkfront_info *info;
-	int err = 0;
-
-	mutex_lock(&blkfront_mutex);
-
-	info = disk->private_data;
-	if (!info) {
-		/* xbdev gone */
-		err = -ERESTARTSYS;
-		goto out;
-	}
-
-	mutex_lock(&info->mutex);
-
-	if (!info->gd)
-		/* xbdev is closed */
-		err = -ERESTARTSYS;
-
-	mutex_unlock(&info->mutex);
-
-out:
-	mutex_unlock(&blkfront_mutex);
-	return err;
-}
-
-static void blkif_release(struct gendisk *disk, fmode_t mode)
-{
-	struct blkfront_info *info = disk->private_data;
-	struct xenbus_device *xbdev;
-
-	mutex_lock(&blkfront_mutex);
-	if (disk->part0->bd_openers)
-		goto out_mutex;
-
-	/*
-	 * Check if we have been instructed to close. We will have
-	 * deferred this request, because the bdev was still open.
-	 */
-
-	mutex_lock(&info->mutex);
-	xbdev = info->xbdev;
-
-	if (xbdev && xbdev->state == XenbusStateClosing) {
-		/* pending switch to state closed */
-		dev_info(disk_to_dev(disk), "releasing disk\n");
-		xlvbd_release_gendisk(info);
-		xenbus_frontend_closed(info->xbdev);
- 	}
-
-	mutex_unlock(&info->mutex);
-
-	if (!xbdev) {
-		/* sudden device removal */
-		dev_info(disk_to_dev(disk), "releasing disk\n");
-		xlvbd_release_gendisk(info);
-		disk->private_data = NULL;
-		free_info(info);
-	}
-
-out_mutex:
-	mutex_unlock(&blkfront_mutex);
-}
-
 static const struct block_device_operations xlvbd_block_fops =
 {
 	.owner = THIS_MODULE,
-	.open = blkif_open,
-	.release = blkif_release,
 	.getgeo = blkif_getgeo,
 	.ioctl = blkif_ioctl,
 	.compat_ioctl = blkdev_compat_ptr_ioctl,
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 14:21:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 14:21:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156656.289085 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m42Eq-000370-IW; Thu, 15 Jul 2021 14:21:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156656.289085; Thu, 15 Jul 2021 14:21:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m42Eq-00036t-FV; Thu, 15 Jul 2021 14:21:20 +0000
Received: by outflank-mailman (input) for mailman id 156656;
 Thu, 15 Jul 2021 14:21:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m42Ep-00036n-MB
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 14:21:19 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8b7ee0da-53a3-49d5-ab5a-6fca41f950f8;
 Thu, 15 Jul 2021 14:21:18 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2057.outbound.protection.outlook.com [104.47.4.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-28-isSssNAzM065B5tzN66dvw-1; Thu, 15 Jul 2021 16:21:16 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5470.eurprd04.prod.outlook.com (2603:10a6:803:d6::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.26; Thu, 15 Jul
 2021 14:21:15 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 14:21:15 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0228.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::24) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 14:21:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8b7ee0da-53a3-49d5-ab5a-6fca41f950f8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626358877;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=sonPdwLkJ6VgCPmFCqfPC6h6XGH70ftwkFRw/0yrh0Y=;
	b=Jm0OhQ2X5Mmm7TGy+DS3D+2YXx18M+TXlepj2OFaxx2QaUxrzrdOt31mvsN0/cEJ3a9qc1
	ezHw1XtRlD6LCHmotaBae3DlKj6Bcz51zKzWSnMpQc1RtrBxo6GsXdYIidoRrJl0HxyEo2
	8LbrSs+MdSu4sRYUXge+YlnC9moy1o8=
X-MC-Unique: isSssNAzM065B5tzN66dvw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fhavpiw7LuQj9rqRh6xE9c/29ci0OP/vri9nRADe23LO74ZPy7eT7gxok4fnk7h7fvQFlpXQHS4++GSJBkPrHnJGTJl2yzCHL3LXbIYkz8FZ6VRAhdN09d8PFu1bmTCgFgOW7Ydv3eiwaGDhrl6X+vAo2Fp88Z0+cevhhg0qiAvzL0BPske1auprkb9Q3vfTV1Mz68Lc9r9EQeH9GrqNG7VNzKvfGOUdeqqMpzlo5lJsVGdzJrFYMPRje76iZu7WphLFtXZw6O3YAC3a2FzYwTAh4JP4Ps5c2tXRO1+d7R2db+0HNFl5nYW/FD8M0zkvW/uqVVBfMHHJoCPhi1+viQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=sonPdwLkJ6VgCPmFCqfPC6h6XGH70ftwkFRw/0yrh0Y=;
 b=jzquSSTX7yPioQ3AzVFlVvJb3Ky0L46bGf9JJ+sAP67ykvE0nmUoex3bV9qM7njGQWf/Z/qL/o8/5E4MDQ7bXUEu4zF8MDfh25yvs9CulnhzCprQh7gkfZTNNBr18QYpyy6YsdlkWeFU6uAAr4X3F5OZizHydtSN/9QhWAs3nxTKkcOvlDoCKz0w8yaWXA/zgyIixP7RgPrzgc07UBZGT4F+70yeVhvC9EAo/zJv5+Pydk/9+xaur6tHSrEyqRgHy/kjshIClIzskgIPnJM20FlfieE3ooNVFG2cBiTUd+OD80OxdCRxJ+Ab8ZK4DlJMJfb0LqpILNgYkFKwcAW8Aw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: preparations for 4.15.1 and 4.13.4
To: Olaf Hering <olaf@aepfle.de>, Ian Jackson <ian.jackson@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
 <20210715161157.7e85ed9e.olaf@aepfle.de>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e0c41583-5fc2-b938-fa52-60d3ad72f59d@suse.com>
Date: Thu, 15 Jul 2021 16:21:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210715161157.7e85ed9e.olaf@aepfle.de>
Content-Type: text/plain; charset=windows-1252
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0228.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::24) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e09c4590-b5cc-41b8-1c07-08d9479bce0c
X-MS-TrafficTypeDiagnostic: VI1PR04MB5470:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB547039AE20DFFFD0346C0761B3129@VI1PR04MB5470.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	T42qMRwRsh4y5+9AxyjzDpMFo66oLJDZ+AmFBHJfsQ9NXZhho1TjsOqj6acePl/+w1KaVnjc8iz5Ertf80Z/iS5BtvGGpM+GKP9sUS6oi48Lx2Jis+mtFSvLQtlXYatWMt0iC22YAwZ+zdUt/SYXvrHNZlnQT1CpD5OSUdPodpTvfbymUBOeQopnTrDBKOSV1C7xRhcwmxxyxgg3mekRHxa+eS3E6bAaCvhBSE0CmPo4h+LVm+rfPAMbqTTINT91B471Ze8YL2qBLJx0w732+VAAfEi25o/tKaf/FYrOZtWxVSTRnjNU/fmtZT0uq0QXrVL0nsuJmA6fqN1Vz+zUWP6aDAsSxN6Dxfw8TGHkJ/RDy72vUoCM9H6dt4uZmjWRHbYnYhm97BUsN3NDmCqGbdvJJNz1H4fzDlBHLOjDI2t1ttdCv3vENr5Q3poQ+ohPqYqdwGD80NFAByTJEIgohzr4vscIl6mLXQxXcAsXYKLxYKcyZadfDwh4RNHGWcZlfkebOXvsyMYeZfnHRwA2q4SgeBiEBPYSXjN3TwpQ3JEDnIc8fbhEhSKjXBhptfZHt5E6I4kPZlvYDraNzGZr/k2vSETDVueZ00xhSOajjWB4rfxftb3lzPoxu6ZtWaJ7zIrh7yFSiMi2rsYdVsUOzchcCo8pn1KtY3MVu0p5Id/k+i5cI5ulZuNuhwZ7ZCnnpjg7O6RXucHrmFTC4mifUrYP/XOohNqx33BXGxxCk62MmIHUvo8pwcptyRKHRUaVdEMLjoqwOnPL7dwP7khEU7G0/WYI0xbA8kmFi8ZpX8cQiPi0HDi6JoiezKKgNdNh
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(136003)(346002)(376002)(366004)(31686004)(6486002)(4744005)(38100700002)(26005)(36756003)(4326008)(478600001)(2616005)(5660300002)(966005)(53546011)(186003)(16576012)(8676002)(8936002)(31696002)(54906003)(956004)(66946007)(110136005)(66476007)(316002)(86362001)(2906002)(66556008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?Windows-1252?Q?N0G4BIQ2WZH4QqMyXjM8flExnktXAJfK3D7lU/sFiaBgsZNr66fDlPm3?=
 =?Windows-1252?Q?eBbIYIOrPd/BxEGXrrk468LuBBd4NKEcxC5la7pUAjmWHhOSt3VPEJxn?=
 =?Windows-1252?Q?KoVQ7ADjFEOHYuUKTrpRv3w4Ps5w8o+i6h2wa81eO7RpB23b6LIfjJe2?=
 =?Windows-1252?Q?XByx6rm59K4xAr+u8sAyuVQr4WpgBPobZAikI8UdnSdEn3hKn9o56i2f?=
 =?Windows-1252?Q?hyLhdaXfQjBGdwWEbFyAzD1/6Mtnva9GHwmFidYb0Qd+AusOOgGAH6BI?=
 =?Windows-1252?Q?yLz2AwIgcE5AMsGoc+I5uoqh+93qSSVXIsmJk2FYwF7x4nYmxeuktI5u?=
 =?Windows-1252?Q?gCRDoemtlzM/FAJOLfEz0A9su8ptCAEyLikZeoFrXP1ERMS17A4JQm96?=
 =?Windows-1252?Q?Y5zTXjJmpkWvoCPP98Yxm0+ZxM8IVajy571NNjWY85aKMlM4xpelUcjd?=
 =?Windows-1252?Q?AIf2SwyuyxmNLTesBX1Fzw1yW6hq0UmQLY6db+YU051AAev9xqA/tJbt?=
 =?Windows-1252?Q?JFc1gVjzHdtBXNsRqaphWUyZoST/MLf0aZJqjdll4OBoB9ISvSt298jC?=
 =?Windows-1252?Q?3CSRlf4zNn468Tsi2sU9kcGtglr5N4gfDe94fPXtWzhhVEWMrrnsz/n5?=
 =?Windows-1252?Q?gvdwF7LeXUO0KlXnZthDHgNa/fLk+y1KPmdcOM8433RRFvQKluHO8wjO?=
 =?Windows-1252?Q?RHntQ0Ddi83tstBO72SvcC+4JHa4Swwtm5/UTvEqpIq2bQv0hXa+LCop?=
 =?Windows-1252?Q?iGRcZPZFcpQ+5aBOdH/0aNFHgoHZLg7hfCJjNdpekO6jdvn8rESmxRR7?=
 =?Windows-1252?Q?xDc5NTl3tw5qC603gsFlL7T3wgk778TFPCIcAYKmmHRghUNwM23t7mY9?=
 =?Windows-1252?Q?60E40syag3hKYhs3x5puOiLlT700nSxmFZRxEZk9rUaS9YqRgG3AVF4X?=
 =?Windows-1252?Q?QbQAvbSwavgFncEt2EPIbQ68PgHB4vqsxJweSFSMkv9LfNu6eumVUBYK?=
 =?Windows-1252?Q?SyoY18V1YWL25LQDc71EM+ruLc/zPqo/Ld31I0V938Tjs9HoPdn8u8Dh?=
 =?Windows-1252?Q?VpNTLaTW4W7jPsnMAWHUO7am7HWst4JCkbsZZSgWqAihn6DsAZkxDLix?=
 =?Windows-1252?Q?WyskLWHW60tsXDRupEKUIX5pH9re/wzZ/W5tLc8+QW9Za9HmV34ZY26q?=
 =?Windows-1252?Q?thtVTrhhAybj6Yf5RzskKlwWEhIdiLlXqmlEb/Oo2vgEYZpheLYtE8ZT?=
 =?Windows-1252?Q?jMffzZv9Q0tvBA3H/o9tU9nRzOKrwjvUk4185FOTGWgthJegDWDlmls3?=
 =?Windows-1252?Q?pty8IaMabfk078LZqNQbc/tdKuexMxFCspmPRHVra0RIOIQioMzEjLnG?=
 =?Windows-1252?Q?2BoruuKJwXXpxwWgGPxM5zmYLfpk3T54DyFNxWeGuQPo72IhenQuT/Q8?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e09c4590-b5cc-41b8-1c07-08d9479bce0c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 14:21:15.4327
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 22sCef3q8l1f0aQqC+gX0siMLHR44tWe7V2KIeXVThsuRnh5lsq/FQWO6aWsJ7P55vYm997t6tvqJieppv0VKA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5470

On 15.07.2021 16:11, Olaf Hering wrote:
> Am Thu, 15 Jul 2021 09:58:24 +0200
> schrieb Jan Beulich <jbeulich@suse.com>:
> 
>> Please point out backports you find missing from the respective staging branches, but which you consider relevant.
> 
> Depending on how green the CI is supposed to be:
> 
> 76416c459c libfsimage: fix parentheses in macro parameters
> e54c433adf libfsimage: fix clang 10 build

Ian, that's again something for you to consider.

Thanks, Jan

> This will likely turn the Leap clang builds at https://gitlab.com/xen-project/xen/-/pipelines/337629824 green.
> 
> Olaf
> 



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 14:35:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 14:35:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156662.289099 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m42S6-0004rF-Sv; Thu, 15 Jul 2021 14:35:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156662.289099; Thu, 15 Jul 2021 14:35:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m42S6-0004r8-PV; Thu, 15 Jul 2021 14:35:02 +0000
Received: by outflank-mailman (input) for mailman id 156662;
 Thu, 15 Jul 2021 14:28:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Y0uV=MH=alpha.franken.de=tsbogend@srs-us1.protection.inumbo.net>)
 id 1m42M4-000442-2D
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 14:28:48 +0000
Received: from elvis.franken.de (unknown [193.175.24.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 64b842bb-2d01-4dab-aff4-f2d80f818145;
 Thu, 15 Jul 2021 14:28:45 +0000 (UTC)
Received: from uucp (helo=alpha)
 by elvis.franken.de with local-bsmtp (Exim 3.36 #1)
 id 1m42Ly-0004w9-01; Thu, 15 Jul 2021 16:28:42 +0200
Received: by alpha.franken.de (Postfix, from userid 1000)
 id AC72DC099E; Thu, 15 Jul 2021 15:02:21 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 64b842bb-2d01-4dab-aff4-f2d80f818145
Date: Thu, 15 Jul 2021 15:02:21 +0200
From: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	Cornelia Huck <cohuck@redhat.com>, linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>, Geoff Levand <geoff@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Wu Hao <hao.wu@intel.com>, Tom Rix <trix@redhat.com>,
	Moritz Fischer <mdf@kernel.org>, Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Wolfram Sang <wsa@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Ulf Hansson <ulf.hansson@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Arnd Bergmann <arnd@arndb.de>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Jon Mason <jdmason@kudzu.us>, Allen Hubbe <allenbh@gmail.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Gross <mgross@linux.intel.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Andy Gross <agross@kernel.org>, Mark Brown <broonie@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>, Michael Buesch <m@bues.ch>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>,
	Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Rob Herring <robh@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Marc Zyngier <maz@kernel.org>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Samuel Holland <samuel@sholland.org>,
	Qinglang Miao <miaoqinglang@huawei.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Joey Pabalan <jpabalanb@gmail.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Frank Li <lznuaa@gmail.com>,
	Mike Christie <michael.christie@oracle.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Hannes Reinecke <hare@suse.de>, David Woodhouse <dwmw@amazon.co.uk>,
	SeongJae Park <sjpark@amazon.de>, Julien Grall <jgrall@amazon.com>,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org,
	nvdimm@lists.linux.dev, dmaengine@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org,
	linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org,
	industrypack-devel@lists.sourceforge.net,
	linux-media@vger.kernel.org, linux-mmc@vger.kernel.org,
	netdev@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	greybus-dev@lists.linaro.org, target-devel@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
	virtualization@lists.linux-foundation.org, kvm@vger.kernel.org,
	xen-devel@lists.xenproject.org,
	Russell King <rmk+kernel@armlinux.org.uk>,
	Johannes Thumshirn <jth@kernel.org>
Subject: Re: [PATCH v2 4/4] bus: Make remove callback return void
Message-ID: <20210715130221.GA10298@alpha.franken.de>
References: <20210706154803.1631813-1-u.kleine-koenig@pengutronix.de>
 <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210706154803.1631813-5-u.kleine-koenig@pengutronix.de>
User-Agent: Mutt/1.10.1 (2018-07-13)

On Tue, Jul 06, 2021 at 05:48:03PM +0200, Uwe Kleine-Knig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
> 
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
> 
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
> 
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Amba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for drivers/bus/sunxi-rsb.c)
> Acked-by: Pali Rohr <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for drivers/media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For Xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For drivers/mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For drivers/mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For drivers/slimbus)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For drivers/vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and typec)
> Acked-by: Samuel Iglesias Gonslvez <siglesias@igalia.com> (For ipack)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Signed-off-by: Uwe Kleine-Knig <u.kleine-koenig@pengutronix.de>
> ---
> [...] 
>  arch/mips/sgi-ip22/ip22-gio.c             | 3 +--

Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:12:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:12:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156672.289113 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m431u-0001O5-UC; Thu, 15 Jul 2021 15:12:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156672.289113; Thu, 15 Jul 2021 15:12:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m431u-0001Ny-R7; Thu, 15 Jul 2021 15:12:02 +0000
Received: by outflank-mailman (input) for mailman id 156672;
 Thu, 15 Jul 2021 15:12:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=PyhT=MH=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m431s-0001Ns-W8
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:12:01 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d61e2eeb-1b97-451e-81c4-15fb2a2c0c11;
 Thu, 15 Jul 2021 15:11:59 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d61e2eeb-1b97-451e-81c4-15fb2a2c0c11
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626361919;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=UZjlK9LK1xaqhyMtY1pblmrS8hb2WALur6udawvdLkc=;
  b=hipvE9+lAadfTzWgdV4msPOizmRXKKw1nFtBxgF23wPt//+/dmpakJlr
   AXPq0VVOYDLV7EdvdlejCDL+kfExG8ZcKVTACclCj3hESm/bTtwfbmHZ2
   wyFn5HKT6ERwN39YF2xSTIKBF9oH9eYJZKjfElVkxZ16nUWo6mqTJVPRu
   U=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Ndns/LF2JuS2bPFL7b/KUki6wJM08yF3uv+WUMxnmQ87I1y5P4dQfTHuuDdP6HxuYdj8hweAef
 /vcogz9aCppvN8tX/KjnkaWWsgTEpsPA1tWUdgKfGFAPtoQB8hd/diXAUotmTR/RPQdonhsqOa
 Qrzld9OcmEJlHeyIrqzLrKDeyDIfppad1OnjKCCpVc9KB/uSp+HJWlunMoR1tyWhK9sztaSOdy
 iD0913ItUeQXhTfD09CZBJGJ8nblYXmuoA7yINimITLvYx52z8ISiW8LSNlIODjfvD+9ARCArN
 iRg=
X-SBRS: 5.1
X-MesageID: 50013535
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:e+CDKarOuuX6r5vnWuOB+0UaV5rReYIsimQD101hICG9Evb0qy
 lhppQmPH7P+VIssRQb8+xoV5PufZqxz/BICOoqTNKftWvdyQiVxehZhOOP/9SJIUbDH4VmpM
 VdmsZFaeEZDTJB/LvHCAvTKadd/DFQmprY+ts3zB1WPH9Xg7kL1XYfNu4CeHcGPzWvA/ACZf
 yhz/sCnRWMU1INYP+2A3EUNtKz3eEixPrdEGc77wdM0nj3sQ+V
X-IronPort-AV: E=Sophos;i="5.84,242,1620705600"; 
   d="scan'208";a="50013535"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich <JBeulich@suse.com>
Subject: [PATCH for-4.13] x86/tsx: Fix backport of "x86/cpuid: Rework HLE and RTM handling"
Date: Thu, 15 Jul 2021 16:10:50 +0100
Message-ID: <20210715151050.6514-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain

The backport dropped the hunk deleting the setup_clear_cpu_cap() for HLE/RTM,
but retained the hunk adding setup_force_cpu_cap().

Calling both force and clear on the same feature elicits an error, and clear
takes precedence, which breaks the part of the bufix which makes migration
from older versions of Xen function safely for VMs using TSX.

Fixes: f17d848c4caa ("x86/cpuid: Rework HLE and RTM handling")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
---
 xen/arch/x86/spec_ctrl.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c
index 33343062a7b6..1cfd02d7d7cf 100644
--- a/xen/arch/x86/spec_ctrl.c
+++ b/xen/arch/x86/spec_ctrl.c
@@ -1150,9 +1150,6 @@ void __init init_speculation_mitigations(void)
          ((hw_smt_enabled && opt_smt) ||
           !boot_cpu_has(X86_FEATURE_SC_VERW_IDLE)) )
     {
-        setup_clear_cpu_cap(X86_FEATURE_HLE);
-        setup_clear_cpu_cap(X86_FEATURE_RTM);
-
         opt_tsx = 0;
         tsx_init();
     }
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:18:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:18:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156678.289124 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m438K-0002Kg-M5; Thu, 15 Jul 2021 15:18:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156678.289124; Thu, 15 Jul 2021 15:18:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m438K-0002KZ-IV; Thu, 15 Jul 2021 15:18:40 +0000
Received: by outflank-mailman (input) for mailman id 156678;
 Thu, 15 Jul 2021 15:18:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m438J-0002KA-Eo
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:18:39 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6e8bb556-9ab6-48c2-b7ce-eb20e67a0ecf;
 Thu, 15 Jul 2021 15:18:38 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2107.outbound.protection.outlook.com [104.47.17.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-OWmyLBlXNZqZaDfmP8S0ww-1; Thu, 15 Jul 2021 17:18:36 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2606.eurprd04.prod.outlook.com (2603:10a6:800:51::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 15:18:34 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 15:18:34 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0241.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:18:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6e8bb556-9ab6-48c2-b7ce-eb20e67a0ecf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626362317;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=/KFZCARh7nv5b0rdkkTagm6uaY4gGVGl1BXqbU+V6X0=;
	b=F2sh6tYlVou6HQkegdhT1T6DolsoPI09A3Qk03LB2dOZiyoXiX3EdgkhOlXG8K/Z7z7PHx
	plGGe70ttb6oHzj0vS1+8gjDBxeLYW6miN0f8VR8OrCbdTfAG4zqNl0Oub3MtYDgLuzwQe
	8o/zNKIfm3fJvZCfuigqR68wbkg2Sug=
X-MC-Unique: OWmyLBlXNZqZaDfmP8S0ww-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=cYnJ2Nhpygnc5C0yzt83UKy6cl2aUfNNcJ/A4Kf7Kz6+VbjiCG2ZmU28CHUtOrKusKuuMXlE614supFbrmXnMqsyrU6WY1s/jTuaiHgTvoJH9ESoEW/NqkjhYgSkkULWfrFFgMF0nyzG9AlXjxnPzncyptzK5F80FH5qWEPy8wJ1XojtSvtBfP6Q86+eqdfoHwqcpwCnWTed7wUZeDvLfeUKaoXaPgu/2Yza39mQSY00IlPBEcQW+IUR8hAT79tC2yNAWxIcQ+y3+Ofc9JRPf+rUxcJDTe7Ef5WCiTgjKawbLhtchWCX0kwn8JiYfIydgZsHuSn5/BiHNA8TYrq1uw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/KFZCARh7nv5b0rdkkTagm6uaY4gGVGl1BXqbU+V6X0=;
 b=XTIwvfgw7vWVFK48UT1fXRPUWlE6PTjcqTqKeVJG4AzM9lVrDEUlerLl1fq3/lEmasjAE5BibWuVs4cA3nHCKYYXQngiyNHUyalTCSdTjwdbVhHln+2gZ8kvKRuGMPbyA10GNRQx6twnqOc/jqElBE9FAKIdi7rjKsgqT3qNpBTl9kxLegSx1yxF7xsRN9kXdeMJpt+ZXIG5Fn9EoO14Z/cER5mlWT1FKHxJpHQjjlMbzwJUT49kx0AONcoAzvyzC2FHBHrzcjNYQpl5K1rWLtBCEWB5nQdF9V4aq1RYdpPQvWSDK18adzvrGPm+2g2rONBCFJvM9s7PEic8T4e+Rg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 2/4] build: use common stubs for debugger_trap_*
 functions if !CONFIG_CRASH_DEBUG
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
 <d74af998bfd8d00e57ea82ce6731ccf2afc8e95b.1626286772.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <b1dabca1-17ed-1f20-f95c-5113f09ea2bb@suse.com>
Date: Thu, 15 Jul 2021 17:18:31 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d74af998bfd8d00e57ea82ce6731ccf2afc8e95b.1626286772.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0241.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::13)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 887d5c4b-1cc4-4d2a-e52b-08d947a3cfa9
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2606:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2606C46269EEBCDEB90E35ECB3129@VI1PR0401MB2606.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	l5yZwF15ShlLZXyNry0PAEBTMFt6vcqv6M0GDu4T9EO/74DKZFm04Cqg7YI15qZabYu1UA8FiYthNFcaRwQ1BPLiMXVD5VPEXsg/8Z6PaGPzfuV+SP6eA6VvEIqVLqpS5LCZFx9hR7BP6cpizi82hj0RiYTAiRaQ+4NDOTdh9PqrrHXhbxYlrS2yWwNa9m60PnBb5TVn4Vs5rPoLZIc9kNEL+WE+dxHVPWdXLgQ5vZfLQamnkuwgQ7+PWfxcwZVpiBsFHv0px2OkI4lB5+GFSyvoPASZjNw7h1NP81gi/4DISgOIeF/2fX8/DKVeGUPQFXOjKX7+Wgov1H3Uw4s2s1yQ3QdipiaVBoRr7NLF2f3YoP0snfuIptYWoCZu9hPQsrQr1Sv/3h9J9/bPvjA/wOAR2uq9kF88rGT1ASPSSjjMBw/zAACJonmUlDryC2z3epIAjlhtTcPOyrGtgccFkzfcyyzMeDfdakIU2xnAjG2Ay9Hi5JRc41il3b/QDdddIPxxGZ/FVeOSAAlGa+QClzvXUJm+HVV/BTQsXRHHDegi6lIlceRjQX4XSH1wrB3Qpqo1oj06B+iyyoj+pAwLKcHc0Uud4u/uuj+HgUCJAsHiTABbQAlRToYiEDoHMyXueb0b1589Ilze4tcqsAJtLzwo8FQHkhGwkHV1eLvCP+iwf53mqkivqJxb+tbMHf9s6EWG5w8XE61dwo11DLThfmntz1PVplBz4sXfJ8GouMi3Hrr1fjtEW46dG0OOUm3aTCuG3WvIvHEMs5hhFweKFFaDfvne6iRoprWNCH23Te1pi6BPVPuzkPpr4A8+h78T
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(39850400004)(346002)(136003)(376002)(8936002)(66556008)(66476007)(66946007)(53546011)(956004)(6916009)(2906002)(2616005)(4326008)(5660300002)(26005)(31696002)(186003)(8676002)(478600001)(38100700002)(86362001)(31686004)(54906003)(316002)(6486002)(16576012)(36756003)(7416002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 887d5c4b-1cc4-4d2a-e52b-08d947a3cfa9
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:18:33.9794
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: g7CT/V6S7Oo8xA0Rv+cKUcDCfW8vqdWxP/6nahHXD/KhaD5fEoZdKmiKplIuFjV0aJF/nPe2IDKEd9VYwq4/+w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2606

On 14.07.2021 22:37, Bobby Eshleman wrote:
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -16,6 +16,7 @@
>   * GNU General Public License for more details.
>   */
>  
> +#include <xen/debugger.h>

I don't think this is needed here; instead I think ...

> @@ -41,7 +42,6 @@
>  #include <asm/acpi.h>
>  #include <asm/cpuerrata.h>
>  #include <asm/cpufeature.h>
> -#include <asm/debugger.h>

... this wants to be done in patch 1 already.

> --- a/xen/common/keyhandler.c
> +++ b/xen/common/keyhandler.c
> @@ -3,6 +3,7 @@
>   */
>  
>  #include <asm/regs.h>
> +#include <xen/debugger.h>
>  #include <xen/delay.h>
>  #include <xen/keyhandler.h>
>  #include <xen/param.h>
> @@ -20,7 +21,6 @@
>  #include <xen/mm.h>
>  #include <xen/watchdog.h>
>  #include <xen/init.h>
> -#include <asm/debugger.h>
>  #include <asm/div64.h>

Not sure about this - as indicated maybe the code needing the include
instead wants to move to x86'es new debugger.c.

> --- /dev/null
> +++ b/xen/include/xen/debugger.h
> @@ -0,0 +1,69 @@
> +/******************************************************************************
> + * Generic hooks into arch-dependent Xen.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; If not, see <http://www.gnu.org/licenses/>.
> + *
> + * Each debugger should define three functions here:
> + *
> + * 1. debugger_trap_entry():
> + *  Called at start of any synchronous fault or trap, before any other work
> + *  is done. The idea is that if your debugger deliberately caused the trap
> + *  (e.g. to implement breakpoints or data watchpoints) then you can take
> + *  appropriate action and return a non-zero value to cause early exit from
> + *  the trap function.
> + *
> + * 2. debugger_trap_fatal():
> + *  Called when Xen is about to give up and crash. Typically you will use this
> + *  hook to drop into a debug session. It can also be used to hook off
> + *  deliberately caused traps (which you then handle and return non-zero).
> + *
> + * 3. debugger_trap_immediate():
> + *  Called if we want to drop into a debugger now.  This is essentially the
> + *  same as debugger_trap_fatal, except that we use the current register state
> + *  rather than the state which was in effect when we took the trap.
> + *  For example: if we're dying because of an unhandled exception, we call
> + *  debugger_trap_fatal; if we're dying because of a panic() we call
> + *  debugger_trap_immediate().
> + */
> +
> +#ifndef __XEN_DEBUGGER_H__
> +#define __XEN_DEBUGGER_H__
> +
> +#ifdef CONFIG_CRASH_DEBUG
> +
> +#include <asm/debugger.h>
> +
> +#else
> +
> +#include <asm/regs.h>
> +#include <asm/processor.h>

I don't think you need either of these for the stubs below.

> +static inline void domain_pause_for_debugger(void)
> +{
> +}
> +
> +static inline bool debugger_trap_fatal(
> +    unsigned int vector, const struct cpu_user_regs *regs)
> +{
> +    return false;
> +}
> +
> +static inline void debugger_trap_immediate(void)
> +{
> +}
> +
> +static inline bool debugger_trap_entry(
> +    unsigned int vector, const struct cpu_user_regs *regs)
> +{
> +    return false;
> +}

Of these stubs, after patch 1 only debugger_trap_immediate() is needed
outside of arch/x86/. Perhaps everything else wants to remain in x86'es
per-arch header?

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:21:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:21:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156683.289135 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43B1-0003f9-3f; Thu, 15 Jul 2021 15:21:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156683.289135; Thu, 15 Jul 2021 15:21:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43B1-0003f2-0R; Thu, 15 Jul 2021 15:21:27 +0000
Received: by outflank-mailman (input) for mailman id 156683;
 Thu, 15 Jul 2021 15:21:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m43B0-0003ew-9c
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:21:26 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 512c692a-e580-11eb-88f6-12813bfff9fa;
 Thu, 15 Jul 2021 15:21:25 +0000 (UTC)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2058.outbound.protection.outlook.com [104.47.0.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-33-c0MyQnX1NxyzVT5ulDJGnw-1; Thu, 15 Jul 2021 17:21:23 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4848.eurprd04.prod.outlook.com (2603:10a6:803:55::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul
 2021 15:21:21 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 15:21:21 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0020.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::25) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:21:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 512c692a-e580-11eb-88f6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626362484;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=NJT1eh5cGVaWI4X0SnHBZXFDDu1culqNLOKoK/WU1RA=;
	b=dFi4MfzV2B14172xJzMsAigl9D4yjtFscS3H6D9oDHgx1mSUUiuxIyKnj0noFFjBPzh8M7
	rZY5xPmDPTYsiONFCeDMHQVRaDZFExTlNVNWvL2eVlQwkYbpBoC6Q1okNGyixYbmhWdvaK
	XQHC+vVNlNHBRiMVX+IanxePxEBKFc0=
X-MC-Unique: c0MyQnX1NxyzVT5ulDJGnw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kxfb/vkbKwA79hmmbu+sCvtIT4C1I/VTXwlOXv9DbVD/ylFEIh423R8tmCMDNzdGHgBTdu75scS4MKr5VJM9qjRmQjWk4bLtLUPhwkydCbW/+xNQIjZhxTscwHHVtouKlEXNpr0hksUun8CHlbrzvNymy27BkEvATMZqW7R3tULBKRpSlX1g1gfA7YBfY/qYAowYvFbG9RFvGntxpACvgIuBz8WfkjxswJF4ftMmFAUK6qHnON+89pHEK/4Sw809iR1hU7mZPU5uI15N7jxNpJyQsMGpJheWPorU99cLDsJysFx9yN6HCV9UqlfOa2P30e5bjHf3wwFs3vIjl92S7g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NJT1eh5cGVaWI4X0SnHBZXFDDu1culqNLOKoK/WU1RA=;
 b=dl/qcMMG8YCr+r8U9q3LC6B97DHthBYv08hD3uGB7PAavPvYk3HwImyiGsSddFs+weuKbuuiTOXwlxAyRufdLgGEMLip4UoN/yB0mnkqCndQl0o0ONCmuCLuU8huUQLQhiPkQLotLxEQ+8CwTcHIdtK8loPVkY8yRP2T2/nlFoo1N6yD2kQxjQyK8mTXFSrfRMuRoUEMbnqacD1iL/sDsHgV6csu+aQ8hZjzdNnl4UUhRTuc20bXUloB5zl6lDMJTs9Jn23q51+Ev7XDK5aF+brdLRNDwfgoZbtpr7QMZEY/Pj4rRytFZwulXHXLmGM/Q8SoRyVEyoGpQEFQGkTc9w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 3/4] x86/debug: move debugger_trap_entry into
 debugger.c not inlined
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
 <a7af5b3fd6d297b2659433060d6f1e2fc6bfdb86.1626286772.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <6644a187-8460-8e38-2c67-b5309a9c7ad3@suse.com>
Date: Thu, 15 Jul 2021 17:21:19 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <a7af5b3fd6d297b2659433060d6f1e2fc6bfdb86.1626286772.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0020.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::25) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7af1ee4c-a355-4019-82c2-08d947a43359
X-MS-TrafficTypeDiagnostic: VI1PR04MB4848:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB48487F58A8523106CC6C61E2B3129@VI1PR04MB4848.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:287;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	0tPy11jv8EJJNAlRtB0RbeK/AR7REHD+j1asyyhqjJ9daJ9VC5JHMqNwEqrbE+GAAxOTsB2nRBxOU+tv3UfHh4rnb87fcn8OLXUR+D4NmHzr7RB5ieoC3fyTtbuFMbgL7zHLhe2SWfl1l+RIvCMltos6LfOa2GRTohPv2Acz+Tz4tYg1RiQx2QmcT9msd0AclNQJQQPzRW6xKjdmkkbkv7zTgFubaaOZklXCHjxjIU/RtN5YbrekdLdZdCqgYnJRnNxsR9bGmgoJ6Q7JzUqP7q1PI3cEcAPvAQOZ3RX7VNUuLNxBcKgFbL87mzgFN6lXM48uazTPjOVU3jc5x4ExV/nev0Z8pLcFTkielD7icjMdUB0UVBEpYE3R7GNQEJlCh+KC1hQKitqoVuq6H7HEcDbEK1o9kt546/02x2SMOimr+xOdd/wSJXzjl2WClFlt43TSS1aN0b6yClngALUAMMS0bwbas/6xD3O4MRhMv17gglcRpzdHD2GxVLeTufVWjJA/oADvMRbT3xSXypOnmbQF+Kjsts9bgn5zovnn6XgCPr0KiSfQV78u6qLc2ly8lX3vH6+ZndSY0lV2SV0Nxr5A1sCQNUCqAwd2Bp9qiHiUEBTe7gZvphPM411EtQTJrP83b0Xca3NB1HLxkvY0wDBZAXcaJ3OHO4Xd9yAgSyrlHYCtVpGrr9zNhNb3Y9CmLVuCXVuXvxialXjUgcikKjyIn/+qG/Jx65HU7jS2v0QIlzMLyC3H0RKCkTp+Y7ud
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(376002)(346002)(366004)(39860400002)(5660300002)(8676002)(8936002)(16576012)(66946007)(38100700002)(54906003)(7416002)(66476007)(66556008)(26005)(956004)(4326008)(4744005)(86362001)(6486002)(6916009)(36756003)(186003)(316002)(2906002)(2616005)(478600001)(53546011)(31686004)(31696002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?t0T522/vmSgOyY0Geps4NpEhKBrQCOd6Ysq7Kax?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7af1ee4c-a355-4019-82c2-08d947a43359
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:21:21.2338
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ubWtblLgMwH/pIag6Y+qp36FAUTDDig4IytuWy3E8IdxZ4Dy9aO+4+zC99ILZ6Ff9vYTy+Nx8GSL4mRFjxSqfQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4848

On 14.07.2021 22:37, Bobby Eshleman wrote:
> The function debugger_trap_entry() is somewhat large for an inlined
> function.  This commit moves debugger_trap_entry() into debugger.c and
> makes it not inlined.
> 
> Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:29:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:29:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156690.289145 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43IK-0004cE-TY; Thu, 15 Jul 2021 15:29:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156690.289145; Thu, 15 Jul 2021 15:29:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43IK-0004c7-Qc; Thu, 15 Jul 2021 15:29:00 +0000
Received: by outflank-mailman (input) for mailman id 156690;
 Thu, 15 Jul 2021 15:29:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m43IK-0004c1-6r
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:29:00 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id adfca932-eedf-483c-bc0a-339c73e9bcdf;
 Thu, 15 Jul 2021 15:28:59 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2052.outbound.protection.outlook.com [104.47.12.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-asdUlY5cN4ahn0b4OUuYaA-1; Thu, 15 Jul 2021 17:28:57 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7040.eurprd04.prod.outlook.com (2603:10a6:800:121::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul
 2021 15:28:55 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 15:28:55 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0064.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.9 via Frontend Transport; Thu, 15 Jul 2021 15:28:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: adfca932-eedf-483c-bc0a-339c73e9bcdf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626362938;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=EWA4TxW89p9pM7V2M0xA5sgRpzic3ruIVYqYJ0dLuy8=;
	b=FGcHjrfOCnlUZ+phZp81npe+8b4JQOOQseI6uartNgpHTXjZx4RQheBB8lKBdjjeBAYUSP
	Fv8McsVdt3d/6fQoox4m8K2Bf4Imh2BCrCPogz2ElUOJDvVhDu1SNGGBOjZcy78KGLPk2Y
	allX3YyV+yVbP95kITspw0dYB97QV8Y=
X-MC-Unique: asdUlY5cN4ahn0b4OUuYaA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VGummbR5z+OYimqEhYFPtJH+JJY4/XqjfeG+p9gQ1FpHfuuxeGfFni3+LQwWFgndsuN7nU1TRMI2GHKxHcMlCECjGcbGEwza67/Hiy2pG1pGRgadBh3zBTKUWJnD8+BGZ53lExm5f+TLGxL8qrBPr/lLyH61WUOxZPF9ytmE2JWitQdNM47BXLXFnnEL0/OPOHAlaLKWr7l8PMx5Xi8OKkdMnr7hyZreZ0usx7b2In6QyZ/ZdOsZioeHwVvNuocBcxmZQwyeWLQ+7FtD8yFws/T08aLM7dgDVJoN5aaxq1e4Wg3AnW2hEYMoXEMyaGCGaSz9tiI88fEsuAKiiWzLTA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EWA4TxW89p9pM7V2M0xA5sgRpzic3ruIVYqYJ0dLuy8=;
 b=DSqN7cQex67nbeBQatBwOVaYkFjj5jAs89MYLfDls+ZgW54VGZj0UuZKRsi/kMkuZhobSYtO0p6rgkfiD7zG1NRf5RPcARNPTwYHODjD4nM29HSYwqwKk2vpia7wpXx/K7jnx3w7MnvX7P5MsQ6haN4F52XOvOOmaS4Y6QZBeMT2LctZOFVQSK4pfNOelvZDggu2wZ+aRqmYjwuroA4QzS6uCRC1K5fcXklCgOAVpswk+3XpTdllSHxEDdDFvZ79nqqkM5XH/7pcz5PBcAaM4I3mzJSJrZl7Nifs8cryc0PD1kknAv2xd84ETwltg10DDgLjiXhVkk19QSpcLt4fRA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 4/4] x86/debug: move domain_pause_for_debugger to
 debugger.c
To: Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
 <d3e88e2cb3c850085e7d1061d6b20f7e0acf3887.1626286772.git.bobby.eshleman@gmail.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <fd300599-46f7-5c77-5ee9-9c4a49a18ee1@suse.com>
Date: Thu, 15 Jul 2021 17:28:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <d3e88e2cb3c850085e7d1061d6b20f7e0acf3887.1626286772.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0064.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:49::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 68892f6c-0648-439a-89df-08d947a5422b
X-MS-TrafficTypeDiagnostic: VI1PR04MB7040:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB70401F76069861BF48A62595B3129@VI1PR04MB7040.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1107;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	VKSZxrC++dwJRA72FSeRpWAKHAdEBZVGrrPyRU0tYiJbvVQJgX/YUbeUkVGWpugSQcH5E/u60wgHn2ZhCmbaue+iaVuRwXDTDHL1CZdv++UIfNMf0Xif6BiC9A9XjkrAzqFIXlQZcepOuCAsbXptSOSnHaI9sBAkWuBtx5sRJEaFNWIVbDxnCwNfubWDU1vW5xC+o+Mnhx5zO6cL7SSCp5e20/t0Pa7KqmGuRCkcWJJ/zE06X4UrOUOzqKt7qyGSfanXtawCF3dhB79v+Y9C0chnfjPdsvqfN5d9uvOKrJiW5wGWpR/hf4Z6Y/8nPcpqHywacPV8A6OQW1un3+OVDLEHREKKQihRehi8baTB9PMDcfgiTTqyzA5Q79zVHmsZjOMJeAmULPsMfr0JC5OQgumsPv/IKSR7dbwqWRv6HXhTn4+gCYyooY5fx1Qarg6AC41sA24zqiNBnDDclgB48lp7lmvCKRtU/8z6ELaP4MYS0GGSxDrF7mCzckMMTlGa43WTfwbPNOTNksnRHlNWjJjHaHL0YYUEr0HhrZiqqQIzXX0ZTIb19/zHmlXU8otAbAYA/Tzze3AjKp9+m6o8j05ap3gHvE6xsHtOA6Vf2qKvm6XoAc19a1aCJj/NGKR/EWmAqTQyjCCOM2otItptFjhpGd+tNo8ew5mUcrQ5qGgzK1CE7eInFXNcEPLKuAt/5xOsUtaOUb9/jlCXpEwveT2ZOSpO5CG9eH85jgIi3WI5JTo9qiKbz+kL+MdQxEGr
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(136003)(376002)(346002)(396003)(2906002)(7416002)(6916009)(31696002)(86362001)(4326008)(16576012)(186003)(478600001)(66946007)(26005)(4744005)(2616005)(66476007)(8936002)(36756003)(956004)(31686004)(316002)(6486002)(54906003)(8676002)(5660300002)(53546011)(38100700002)(66556008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?FcCiBalpUPBjzJnnZw/DeJFLvV+89uDik4cHSh7?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 68892f6c-0648-439a-89df-08d947a5422b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:28:55.5780
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: iuRjImKQTKOBYMffYTEn8dsPYxjxUxJ16jqQRor1UTQehUM42UGGVvCoYZTVHitPbeVG0D390hiI9qANNUl2rg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7040

On 14.07.2021 22:37, Bobby Eshleman wrote:
> The function domain_pause_for_debugger() is conditionally compiled if
> CONFIG_CRASH_DEBUG=y.  Instead of placing an extra #ifdef inside
> domain.c, this commit moves domain_pause_for_debugger() into
> x86/debugger.c which is only built by Kbuild given CONFIG_CRASH_DEBUG=y.
> 
> Signed-off-by: Bobby Eshleman <bobby.eshleman@gmail.com>

I already gave

Acked-by: Jan Beulich <jbeulich@suse.com>

on this patch. Please accumulate tags as you send new versions, unless
changes you make require you to drop them (and require them to be re-
offered after re-review).

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:32:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:32:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156695.289157 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43M8-00060w-JQ; Thu, 15 Jul 2021 15:32:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156695.289157; Thu, 15 Jul 2021 15:32:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43M8-00060p-Fj; Thu, 15 Jul 2021 15:32:56 +0000
Received: by outflank-mailman (input) for mailman id 156695;
 Thu, 15 Jul 2021 15:32:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=i0+0=MH=kernel.dk=axboe@srs-us1.protection.inumbo.net>)
 id 1m43M6-00060j-S8
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:32:55 +0000
Received: from mail-oo1-xc33.google.com (unknown [2607:f8b0:4864:20::c33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 59bb3521-48d1-4ff1-803f-35aec814eaf9;
 Thu, 15 Jul 2021 15:32:53 +0000 (UTC)
Received: by mail-oo1-xc33.google.com with SMTP id
 n187-20020a4a40c40000b029025e72bdf5d6so1639066ooa.0
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 08:32:53 -0700 (PDT)
Received: from [192.168.1.30] ([207.135.234.126])
 by smtp.gmail.com with ESMTPSA id d7sm1128969oon.18.2021.07.15.08.32.51
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 15 Jul 2021 08:32:52 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 59bb3521-48d1-4ff1-803f-35aec814eaf9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=kernel-dk.20150623.gappssmtp.com; s=20150623;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=ctPsCQnCwOWC1BXWqxdnW65MNFL9SGWc9DV0HhUmFp8=;
        b=b0Q4rQVW5qzDbmL8dXl4Xl18PnpkfjVwt3adPgkOOLeKrOPcTs7mOV+KmzlE0QlalO
         M76Um9GwwJ6MLrZWrdh5GBZNrlEks/A4ooKQDIEqKBaeq11yk/dm1mJCfKwMvuRvqpZ6
         +LGsjvcpnCrOUhr5cMwsFn6pyoFOP09Sfyqt6fA6sFt2UHVUFrt/XH1KdTlQEelBUmdq
         nVyKl9c7jx+jBhZSNxYTS+bwSligsBTISOBwPBfRyKx0nwyRO/lDn6yO6cGms4tAXtXp
         nQB/zNyAb/tg4H6EtGiWM8DXz7m3GQrQ3LO3QEdQOS9wnDI//+xh2GdnJMWjdbrwsb0A
         lKBw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=ctPsCQnCwOWC1BXWqxdnW65MNFL9SGWc9DV0HhUmFp8=;
        b=F2FoGKzMAM8CoukHPOZCpm05XqHm1nckue/77jpuRE+ntgMJeYU4H/6s5dHv4/Q6Ks
         gJOhM1oWHWwsIIIxHqu83SVBZrxKBiJ+DLGzWZCPv9RsvK48BNomLowA3wPlx7cQRZAs
         0/xURjPQUvSMKtx9m2znHojQvRlYnz+ksAROouhzZbZquc3s3VSiv+/jfNYq9Oq9rN2B
         ezORUImlMl7azGIuFlAhiNfOYjiYZ30MftRYthI0oKW2NXgCWbT9Etcj+JSHSGZNot0w
         Kj8OSuY6rw9WxutPPia4TLQLUXUKrjH4lfDu9i/4OBg+xXZkhZUXWB7i3jWnz8UOwZaN
         JgTQ==
X-Gm-Message-State: AOAM533mTNDyNHvHXe5pa2VpJbx+s+M3rbWPryZO3WO0lC/CZ8koaA13
	rIpZdY0KcqJQ7cgVje0e/LAXNw==
X-Google-Smtp-Source: ABdhPJxKk5KqRByjITyE6sC3mMa6jH/2QpqLo9/XviaZcs14zGBZ5ciDB+yJtGrNf83V/USGE/zOpQ==
X-Received: by 2002:a4a:bf11:: with SMTP id r17mr3859881oop.29.1626363172973;
        Thu, 15 Jul 2021 08:32:52 -0700 (PDT)
Subject: Re: [PATCH] xen-blkfront: sanitize the removal state machine
To: Christoph Hellwig <hch@lst.de>, konrad.wilk@oracle.com,
 roger.pau@citrix.com
Cc: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 Vitaly Kuznetsov <vkuznets@redhat.com>
References: <20210715141711.1257293-1-hch@lst.de>
From: Jens Axboe <axboe@kernel.dk>
Message-ID: <69452380-d55b-4329-73d4-151265351fc5@kernel.dk>
Date: Thu, 15 Jul 2021 09:32:50 -0600
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210715141711.1257293-1-hch@lst.de>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/15/21 8:17 AM, Christoph Hellwig wrote:
> xen-blkfront has a weird protocol where close message from the remote
> side can be delayed, and where hot removals are treated somewhat
> differently from regular removals, all leading to potential NULL
> pointer removals, and a del_gendisk from the block device release
> method, which will deadlock. Fix this by just performing normal hot
> removals even when the device is opened like all other Linux block
> drivers.

Applied, thanks.

-- 
Jens Axboe



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:39:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:39:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156703.289168 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43SB-0006xi-9X; Thu, 15 Jul 2021 15:39:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156703.289168; Thu, 15 Jul 2021 15:39:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43SB-0006xa-6R; Thu, 15 Jul 2021 15:39:11 +0000
Received: by outflank-mailman (input) for mailman id 156703;
 Thu, 15 Jul 2021 15:39:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=U73d=MH=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m43S9-0006xU-Rg
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:39:09 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id eaddd37a-953e-4b79-bd82-c5a79a77805d;
 Thu, 15 Jul 2021 15:39:09 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2056.outbound.protection.outlook.com [104.47.2.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-22-zNDRUxwSNPyNa5OasuVqpA-2; Thu, 15 Jul 2021 17:39:07 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7360.eurprd04.prod.outlook.com (2603:10a6:800:1a3::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 15:39:04 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 15:39:04 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0212.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::32) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:39:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: eaddd37a-953e-4b79-bd82-c5a79a77805d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626363548;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=TQumDl358wnlOJ6NniYm7wz+OqmoJIGghw42t0U/zEo=;
	b=QUHpiClN0i+73FCL2f8GyYi4uPuUbail2IeHDyVD620ITx1+8OleSfIHkZNdd5I0pdSaDW
	ZJSbzPZOPzPXhpInnl8FsVygfQeP1UQYgb60m4usgs7O9+eiyEwYTQTLprS2FMpVdUEOVn
	9rE3Oof8xxBVyS+BaJ3iAS5r5wvZrV0=
X-MC-Unique: zNDRUxwSNPyNa5OasuVqpA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Mrlvd8uUMUC9jbSTcB560LeoHQArMRxJUSabRF8Sx1KQRWoPdt8PSzPOdqxzmeLJ9CXoAU25KEj1SzAtaxYgn2x6n9kNpNp9wp4lZxTFAsKYFIX98dxdrbxiPoBcnkGpQHTwCXJ/ibU0goJoDNa70waZkR9E6BGG99jk/dkFyRvTu0q0ynQmI/jBfRonWHlkNRI2AFWlsCEnNalx5E/0p24yZmxS7LeBasnKEjL4rU0PPG0VMcy+KOQz136ENgQ5Zzlwsm+8HEV+wPPyJFgdiTmMnEnCQ7D1SmARySebhe3L7qeWuHLxauFYRbJ9o96OsM3xl7d75KFSJGw7cWz3iQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=TQumDl358wnlOJ6NniYm7wz+OqmoJIGghw42t0U/zEo=;
 b=BLsfcweAT1B+8RVrJUEpW0hJ6mNliDHS59YLt1w8O3SVeFmMqn0d12yPxUzNAuuNDkzIh22As2jpMdJeYYlfl48J1OAzIzaeLnH1Ol0alzzFqwUVO2TQ1e0abEvhi6JIi8Q7fcW6oZCTBEfQ/puu9KWCfPCSnToNCL8pBi7C2NImCevqdl0inU4Gmoz2uIa0G18Zn+QRBH23bUmAj8h88tbIg/YfR+c7V6H+WRdf5fOxoLDKsM3Y0xXzUaQwyE4xper4LTl7Z1/+MQPoUcVt6Hz753Gh7EHf4etd2lbxVZKHFndzfYPlKfeggFL0nIvfs4x4bBbEH3It4ct5GnYS7g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH for-4.13] x86/tsx: Fix backport of "x86/cpuid: Rework HLE
 and RTM handling"
To: Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210715151050.6514-1-andrew.cooper3@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <a23b942f-44d6-97b6-86b9-7339a24f1a67@suse.com>
Date: Thu, 15 Jul 2021 17:39:01 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210715151050.6514-1-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0212.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::32) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 178a065e-c52d-4289-e24e-08d947a6acf2
X-MS-TrafficTypeDiagnostic: VE1PR04MB7360:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB73603F3D6A22FBFD94BABA14B3129@VE1PR04MB7360.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	3vVM70A59iqDqzCtXEwklWJjX4CJ4XmGnTQgM3n0PSHYRoMqdm2FvvTXF359YjZgnUzE3OCpJuzIRpMmRs5DNN2saOX21VgBTpRGjc4o+3WFgn19KFW3w58zpsVMHj/31J43ZyeYuLzCa+PC5l7yiuVn3mZtJLmN+JNts5uet4mNMQZLGLqifRdAub99u7/68XA/kc4X+SJNWYi674hdzKi8QY7d1Mjn1UQXSjE1NOqbomgDCP4xVXjOXL4N5JTKu+rUiXLqMLI0JccLle71l2OhB5YSSsN4cC4jlnxE15rvh0BEbvM0Xvzrs/mIdKdgJmHI2ZMImYt3txcLYVWuyA6D8N6yrHn7YEuFWu/9sWXnJAII9vl7keo9VClzVPtTOAzD8BZA3Yw0plLbnM6SQT4Kt5QgjXc3TaIBpB79tlrsnnT9CdGgcgsXkrRvLQJlfO4H9/yug5eedZL+4gAEZ1eh+8+DrdyACFDcqRubzgNoqfanAT+Ls0LTpalcIhSo+6IxDJGOhSbCRPJVB+mtkz48ppfni8f1xtUFlug6mkCczZTV2Ue3LLUgCt+ZSv677AnUaF8xujRokZYwwL8PncBg41tW/cSZdmezC/AdhKnGNKhdBkn/rEJ2+UaM/JkDSvwqBvzvh06BGw0yuKV+IGeww0Znl9AL9AGhPE+SrWe5pXGdwTfX1IYzUhOygvpXXzt+NEuXOxVnIlfCFTfhYxy1/IRw24ar8PqCAavvy2g=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(6486002)(8676002)(8936002)(31686004)(4744005)(2616005)(956004)(6916009)(36756003)(38100700002)(16576012)(66946007)(5660300002)(2906002)(66556008)(498600001)(53546011)(86362001)(31696002)(66476007)(186003)(26005)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 178a065e-c52d-4289-e24e-08d947a6acf2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:39:04.2207
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ij9XfhGRgDFXPLvwsn9OwLc/k6CcoeK1j2MvApgDrFy7/O3Shm3iQBCCuWgf56HEUO8oReXvPCj9fQ99GuKiYA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7360

On 15.07.2021 17:10, Andrew Cooper wrote:
> The backport dropped the hunk deleting the setup_clear_cpu_cap() for HLE/RTM,
> but retained the hunk adding setup_force_cpu_cap().
> 
> Calling both force and clear on the same feature elicits an error, and clear
> takes precedence,

Right, I particularly didn't pay attention to this interaction
aspect.

> which breaks the part of the bufix which makes migration
> from older versions of Xen function safely for VMs using TSX.
> 
> Fixes: f17d848c4caa ("x86/cpuid: Rework HLE and RTM handling")
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>

Are you going to put this in, or should I?

Jan



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:54:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:54:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156710.289182 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43gX-00010P-Iu; Thu, 15 Jul 2021 15:54:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156710.289182; Thu, 15 Jul 2021 15:54:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43gX-00010I-Fo; Thu, 15 Jul 2021 15:54:01 +0000
Received: by outflank-mailman (input) for mailman id 156710;
 Thu, 15 Jul 2021 15:53:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m43gV-000108-MT; Thu, 15 Jul 2021 15:53:59 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m43gV-0007sD-Da; Thu, 15 Jul 2021 15:53:59 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m43gU-0006d0-Vj; Thu, 15 Jul 2021 15:53:59 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m43gU-0007vp-VE; Thu, 15 Jul 2021 15:53:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ZSniaTnzewt72ZJKQIh9TJDSIbnadE2WdDqwFZhp/wc=; b=QwjJ+Pdnpq2kZMI7+mc8/MsyQB
	X25+FU5pilL8BlUz7jDwGy0OvXM662zHEw7EvW4KEDkPHfEMCcEka6P8oxS9C/bAuAKsuchrcurdM
	Bq+rD+eTKDazkcLODrNBzw2E8HDxlfQnVTohzcjqvHNzNosWrR2KuPp5eOHLe9tVtGDs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163706-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163706: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8096acd7442e613fad0354fc8dfdb2003cceea0b
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 15:53:58 +0000

flight 163706 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163706/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332

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

version targeted for testing:
 linux                8096acd7442e613fad0354fc8dfdb2003cceea0b
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  348 days
Failing since        152366  2020-08-01 20:49:34 Z  347 days  595 attempts
Testing same since   163706  2021-07-15 05:22:18 Z    0 days    1 attempts

------------------------------------------------------------
6691 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1971161 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 15:56:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 15:56:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156717.289196 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43ip-0001vj-4u; Thu, 15 Jul 2021 15:56:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156717.289196; Thu, 15 Jul 2021 15:56:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m43ip-0001vc-1y; Thu, 15 Jul 2021 15:56:23 +0000
Received: by outflank-mailman (input) for mailman id 156717;
 Thu, 15 Jul 2021 15:56:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=PyhT=MH=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m43in-0001vO-Gd
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 15:56:21 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0016580d-816a-4b52-b69b-eed44b8fcc68;
 Thu, 15 Jul 2021 15:56:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0016580d-816a-4b52-b69b-eed44b8fcc68
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626364580;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=PrDK787t7B1TC3mV8QTu5tx07cSczD8SSlGhA44DLCk=;
  b=UZHqQOAadI4ydE0PRNkZSO9CdBeXBicKMMDpXhnlLhvrRE+kb/p6GxaV
   5EijabexUwuzvzOVxFpfAhYFhxmMYnMPHtkCf2ENW6H5u36m6uNSpM7MZ
   6DQr0VDFKa8UDb4PBFoKEYrjKwd3SsTJQG1znCYHnhJ2k2ZuVki8M12TF
   g=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: H5ByvFTQsttoskjMB9FNVnMmdwKgvjIs/R8RJX812u4QnYnSYzGAiZqllT22xPZ1ux78OUQhF+
 4uwyplWm9lF+Txjq7Kr9IV226naWKVc6Wc+dl4w1yMG2BDbhiyzrPpDV290kbcrhRZIfSHFC7n
 tcFDyMRCKFAxvB8w2lkKPsWrzpyg5IhrKzDQBevbqC8eiyMaGv3SC0kVImf0IQ5wMbLqGf683O
 3LnjB4HUQcTMje9nFIOc1wvZvz5IMZPkzw5WYQDgqfyz2EpD38WFj0DNkXKTNLPEsqKACqH4yB
 2tY=
X-SBRS: 5.1
X-MesageID: 48745653
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:fquY6KvAnXyqK4buF0qVojsK7skC34Mji2hC6mlwRA09TyXGra
 6TdaUguiMc1gx8ZJh5o6H8BEGBKUmskKKdkrNhQYtKPTOW91dAQ7sSlLcKrweQeBEWs9Qtr5
 uIEJIORuEYb2IK9foSiTPQe71LrbjmzEnrv5ak854Ed3AzV0gK1XYcNu/vKDwReOAwP+tfKH
 Pz3LskmxOQPVAsKuirDHgMWObO4/fRkoj9XBIADxk7rCGTkDKB8tfBYlml9yZbdwkK7aYp8G
 DDnQC8zL6kqeuHxhjV0HKWx4hKmeHm1sBICKW3+4gow3TX+0WVjbZaKvi/VQMO0aWSAZER4Z
 7xSiIbToZOArXqDyeISFXWqlDdOX0VmgDfIBej8AXeSIrCNWkH40Yqv/MCTvKR0TtQgPhslK
 1MxG6XrJxREFfJmzn8/cHBU1VwmlOzumdKq59Zs5Vza/pWVFZql/1WwKqVKuZ0IAvqrIQ8VO
 V+BsDV4/hbNVuccnDCp2FqhNihRG46EBuKSlUL/pX96UkaoFlpi08DgMAPlHYJ85wwD5FC+u
 TfK6xt0LVDVNUfY65xDPoIBcG3FmvOSxTRN3/6GyWsKIgXf3bW75Ln6rQ84++nPJQO0ZspgZ
 zEFEhVsGYjEnief/FmHKc7hSwlZV/NEQgF5vsulKSRi4eMMIYDaxfzOGzGu/HQ0ckiPg==
X-IronPort-AV: E=Sophos;i="5.84,242,1620705600"; 
   d="scan'208";a="48745653"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=a543HI7Qs8QZf1F+8Stc5hew4pqKpRPaxUaGhrFEaegWGJ9RDuM3tUldBwOL+czO1T0zfqF2b2p5pwIEwKQCxZdgvmn9VcLhJwfUAphMt2Kl5jeWPhji2wv1Mp7KIHl/uYdStcqbiRD+nzprDQ5K9whc8I9H1krkjRJTwNgTjIr0bABO9KEVnBPbg+l3SXw8EhMzE83QeCQnSabvbqEdFNGtG/yYNzDoGTactilbeSnBtE87Nfbc2bHS+zlD8T+CyzX/7rAqh5c0iUFBEHSjkoy2ZBN0XZqbo+0xjbiUamCWuNdil0STBruJzRYea/Up5KJIReNBNMyWmkFf3YZxgg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PrDK787t7B1TC3mV8QTu5tx07cSczD8SSlGhA44DLCk=;
 b=lvqPLY9bjD1q1QCKLuO/FwCQRozwot/m4Mr7uRBYEGzqz0pT8P04fMLN5F2Ypgz84Z8fWYyeeq+n6/XZjCIrMAACjpA/CKfzOUHBYBGQ441jGOGYnl46U0je1GLXUomGi7GencYFg5OlekzomeqKAUQ45L1g63sC27xgAIHG6U2FcTRiO2HTwSukyQoN1v1zghRYrEMYFxbAXo9LNxr5hRjMIFNd02AR3LFUzsYCASqBSS5I3lbfuS2KV9hWkP13wDGFHHWsTY/ESJEcjg6eWQW4eQviJIrmWALit+9s0qQlnvtsL4DMEgV8Sl8dPYbbw0BH8R3PGSK28cdIn55iNA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PrDK787t7B1TC3mV8QTu5tx07cSczD8SSlGhA44DLCk=;
 b=am/d+pml1+3hwFr0YizCmsYCL966ZqI2vCWzO2sy5xLUIJognLUAmmoCgPBdyqVqBZaw2pKM6UDvmjPH4zMpEiAPjY3qfQxDcMUZZvwE1fUJtLPrsmSRQj68YyLOuQl0pmfIVTegYr7g/TcKuQRAMwZuo0pitkq2VuaIMXPYUtg=
Subject: Re: [PATCH for-4.13] x86/tsx: Fix backport of "x86/cpuid: Rework HLE
 and RTM handling"
To: Jan Beulich <jbeulich@suse.com>
CC: Xen-devel <xen-devel@lists.xenproject.org>
References: <20210715151050.6514-1-andrew.cooper3@citrix.com>
 <a23b942f-44d6-97b6-86b9-7339a24f1a67@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <2ee21223-4ee9-bd1e-7dc6-61185a950529@citrix.com>
Date: Thu, 15 Jul 2021 16:56:05 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <a23b942f-44d6-97b6-86b9-7339a24f1a67@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LNXP123CA0017.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:d2::29) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8fad4d4b-11fd-4d6a-a6e4-08d947a91093
X-MS-TrafficTypeDiagnostic: BYAPR03MB3734:
X-Microsoft-Antispam-PRVS: <BYAPR03MB37349A93CB6D59704DF97F80BA129@BYAPR03MB3734.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: FXcoe5gLZlcFi/f6dY2p+HJz2/qmZk+FJbOvtvvGhUndm2UYZRcfcz2N+TBffQ4ZH4TJomqrxOdN2dPp0fXNGZw82N2XKEEu0E5jmEaTNQkpxDx6R52n6Fvczlvfbzw5STiXhSY/sh6DKN1yN06CYN0pay+Gk5Buzapu/BTXMaB+bW72qjWnVjJVOCCCVTcS5g+eOSIN8mKiNKkW+DRZlnUjLOgCQzceyGPUZBj0SS83/yR/jWhin2ESh3TFeE8b7hwV+84pLDN1Ye3g/YPi3aF5+5nOaRQhgByVioLj29Rw0y5yVgDZjyZ5d3Lok7hZgnIVw7G97xwWH5vGNZH3lmHW0dOK8l5n+7UcwVWuZUZB3g2AKyAMaIFUnGV7XyHIs3gbeZaS61gISP2DqlhQ11TCVuL75cdLiSAgF6DiXoLQKZWhSbxfYLj18vL8e6OvaFyVsbxktz/L9MdpsFH+fHMGgA4tBp0/GbJeh/85gDMbAz82RlQtVVN2b3PexxyppSEmzw9+u+YT3W8JlAfSy11P2flDR6cZNKwQ3mge4L59ZBPZW+493oX6EB+NNkI5I0/SizthpRf39miNpjNbG18978+kR4FyBZmWytq2uh0Ij2eWoB+a3Zvv9lAjsino6j/6kI+0UPlPuQ0bKtFvL2iGoiB5w7Hs9X8Upj4R2RAVzr+fWhqfGx/VnHyhwKb1AM5zBezG2pzhJOFlcnySQy3pyvRkB0gXLLHsZtIGRO0=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(39850400004)(136003)(346002)(366004)(6486002)(66946007)(2616005)(8676002)(31686004)(4744005)(6666004)(956004)(38100700002)(53546011)(66476007)(5660300002)(8936002)(4326008)(316002)(186003)(36756003)(478600001)(16576012)(66556008)(2906002)(31696002)(26005)(6916009)(86362001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 8fad4d4b-11fd-4d6a-a6e4-08d947a91093
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:56:10.4212
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: OcIXKmmEAN1GR1l3xqXi70LhwygdmV5I3nieCSrIctz+hE29WzPmFN2EXQ4osEzk0X6GsyPXvN517+83cGZOO3kEC1SOQLhmksV9zDkWYa0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3734
X-OriginatorOrg: citrix.com

On 15/07/2021 16:39, Jan Beulich wrote:
> On 15.07.2021 17:10, Andrew Cooper wrote:
>> The backport dropped the hunk deleting the setup_clear_cpu_cap() for HLE/RTM,
>> but retained the hunk adding setup_force_cpu_cap().
>>
>> Calling both force and clear on the same feature elicits an error, and clear
>> takes precedence,
> Right, I particularly didn't pay attention to this interaction
> aspect.
>
>> which breaks the part of the bufix which makes migration
>> from older versions of Xen function safely for VMs using TSX.
>>
>> Fixes: f17d848c4caa ("x86/cpuid: Rework HLE and RTM handling")
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Acked-by: Jan Beulich <jbeulich@suse.com>

Thanks.

> Are you going to put this in, or should I?

Feel free to.

~Andrew


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156728.289235 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V9-0000ec-12; Thu, 15 Jul 2021 16:46:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156728.289235; Thu, 15 Jul 2021 16:46:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V8-0000d6-S5; Thu, 15 Jul 2021 16:46:18 +0000
Received: by outflank-mailman (input) for mailman id 156728;
 Thu, 15 Jul 2021 16:46:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44V7-0008SS-Nm
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:17 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 28955aba-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:10 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ur-0001yc-1a; Thu, 15 Jul 2021 10:46:02 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Un-0001n8-N3; Thu, 15 Jul 2021 10:45:57 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 28955aba-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=/ZjAKpP+xtoLSt0xIUNWk06GZCmP1KYNzn5sdNvjMLc=; b=RvAQi9Be5RoUt+b+womRZvqR2/
	zPvtxnnvKbr2GfA6Y1S19lttjjb0+uXmyfr1GZv0QURmadEezyXV/yCfISkuDivKMcMvxfnjRKqWJ
	TWTGeEOsZG2VQJ2CgUk6gjAb5T0Wf3tIYM0CK2spWqT6a6y5Pjcf50YSSCBD25Gtea8xZMwkkFrPs
	omRM7+zAnzWrOykfqCb9Zqerp9GY224r23nr8rD6354qzDaXT67t2AD2Z4WoKhhq2fwquMJ0TyJ4+
	ZzFc0S2GozZb5bdlQ3bP1qXzqY0Gpuxzq1qkKar09J0/k+jdx+qqQj48MyHWczZ4uRn2ehZj3rADJ
	l3rgUqJQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 15 Jul 2021 10:45:29 -0600
Message-Id: <20210715164544.6827-2-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 01/16] dma-mapping: Allow map_sg() ops to return negative error codes
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Allow dma_map_sgtable() to pass errors from the map_sg() ops. This
will be required for returning appropriate error codes when mapping
P2PDMA memory.

Introduce __dma_map_sg_attrs() which will return the raw error code
from the map_sg operation (whether it be negative or zero). Then add a
dma_map_sg_attrs() wrapper to convert any negative errors to zero to
satisfy the existing calling convention.

dma_map_sgtable() will convert a zero error return for old map_sg() ops
into a -EINVAL return and return any negative errors as reported.

This allows map_sg implementations to start returning multiple
negative error codes. Legacy map_sg implementations can continue
to return zero until they are all converted.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 include/linux/dma-map-ops.h |  8 +++-
 include/linux/dma-mapping.h | 35 ++++--------------
 kernel/dma/mapping.c        | 73 +++++++++++++++++++++++++++++++++----
 3 files changed, 78 insertions(+), 38 deletions(-)

diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index 0d53a96a3d64..eaa969be8284 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -41,8 +41,12 @@ struct dma_map_ops {
 			size_t size, enum dma_data_direction dir,
 			unsigned long attrs);
 	/*
-	 * map_sg returns 0 on error and a value > 0 on success.
-	 * It should never return a value < 0.
+	 * map_sg should return a negative error code on error.
+	 * dma_map_sgtable() will return the error code returned and convert
+	 * a zero return (for legacy implementations) into -EINVAL.
+	 *
+	 * dma_map_sg() will always return zero on any negative or zero
+	 * return to satisfy its own calling convention.
 	 */
 	int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents,
 			enum dma_data_direction dir, unsigned long attrs);
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 183e7103a66d..daa1e360f0ee 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -110,6 +110,8 @@ int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
 				      int nents, enum dma_data_direction dir,
 				      unsigned long attrs);
+int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs);
 dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr,
 		size_t size, enum dma_data_direction dir, unsigned long attrs);
 void dma_unmap_resource(struct device *dev, dma_addr_t addr, size_t size,
@@ -174,6 +176,11 @@ static inline void dma_unmap_sg_attrs(struct device *dev,
 		unsigned long attrs)
 {
 }
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	return -EOPNOTSUPP;
+}
 static inline dma_addr_t dma_map_resource(struct device *dev,
 		phys_addr_t phys_addr, size_t size, enum dma_data_direction dir,
 		unsigned long attrs)
@@ -343,34 +350,6 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
-/**
- * dma_map_sgtable - Map the given buffer for DMA
- * @dev:	The device for which to perform the DMA operation
- * @sgt:	The sg_table object describing the buffer
- * @dir:	DMA direction
- * @attrs:	Optional DMA attributes for the map operation
- *
- * Maps a buffer described by a scatterlist stored in the given sg_table
- * object for the @dir DMA operation by the @dev device. After success the
- * ownership for the buffer is transferred to the DMA domain.  One has to
- * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
- * ownership of the buffer back to the CPU domain before touching the
- * buffer by the CPU.
- *
- * Returns 0 on success or -EINVAL on error during mapping the buffer.
- */
-static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
-		enum dma_data_direction dir, unsigned long attrs)
-{
-	int nents;
-
-	nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
-	if (nents <= 0)
-		return -EINVAL;
-	sgt->nents = nents;
-	return 0;
-}
-
 /**
  * dma_unmap_sgtable - Unmap the given buffer for DMA
  * @dev:	The device for which to perform the DMA operation
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 2b06a809d0b9..30f89d244566 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -177,12 +177,8 @@ void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size,
 }
 EXPORT_SYMBOL(dma_unmap_page_attrs);
 
-/*
- * dma_maps_sg_attrs returns 0 on error and > 0 on success.
- * It should never return a value < 0.
- */
-int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
-		enum dma_data_direction dir, unsigned long attrs)
+static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
+	 int nents, enum dma_data_direction dir, unsigned long attrs)
 {
 	const struct dma_map_ops *ops = get_dma_ops(dev);
 	int ents;
@@ -197,13 +193,74 @@ int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
 		ents = dma_direct_map_sg(dev, sg, nents, dir, attrs);
 	else
 		ents = ops->map_sg(dev, sg, nents, dir, attrs);
-	BUG_ON(ents < 0);
-	debug_dma_map_sg(dev, sg, nents, ents, dir);
+
+	if (ents > 0)
+		debug_dma_map_sg(dev, sg, nents, ents, dir);
 
 	return ents;
 }
+
+/**
+ * dma_map_sg_attrs - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sg:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist passed in the sg argument with
+ * nents segments for the @dir DMA operation by the @dev device.
+ *
+ * Returns the number of mapped entries (which can be less than nents)
+ * on success. Zero is returned for any error.
+ *
+ * dma_unmap_sg_attrs() should be used to unmap the buffer with the
+ * original sg and original nents (not the value returned by this funciton).
+ */
+int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
+		    int nents, enum dma_data_direction dir, unsigned long attrs)
+{
+	int ret;
+
+	ret = __dma_map_sg_attrs(dev, sg, nents, dir, attrs);
+	if (ret < 0)
+		ret = 0;
+
+	return ret;
+}
 EXPORT_SYMBOL(dma_map_sg_attrs);
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success, the
+ * ownership for the buffer is transferred to the DMA domain.  One has to
+ * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ *
+ * Returns 0 on success or a negative error code on error
+ */
+int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		    enum dma_data_direction dir, unsigned long attrs)
+{
+	int nents;
+
+	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+	if (nents == 0)
+		return -EINVAL;
+	else if (nents < 0)
+		return nents;
+
+	sgt->nents = nents;
+	return 0;
+}
+EXPORT_SYMBOL(dma_map_sgtable);
+
 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
 				      int nents, enum dma_data_direction dir,
 				      unsigned long attrs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156725.289210 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V4-0008Sk-5n; Thu, 15 Jul 2021 16:46:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156725.289210; Thu, 15 Jul 2021 16:46:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V4-0008Sd-0n; Thu, 15 Jul 2021 16:46:14 +0000
Received: by outflank-mailman (input) for mailman id 156725;
 Thu, 15 Jul 2021 16:46:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44V2-0008SR-Iy
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:12 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5241a7b5-109f-4517-a840-0cc128ac9790;
 Thu, 15 Jul 2021 16:46:10 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ur-0001ye-Fb; Thu, 15 Jul 2021 10:46:02 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Un-0001nE-VU; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5241a7b5-109f-4517-a840-0cc128ac9790
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=/xaVvtLmcUu039UJFO4qpFCPm3zd9EnehJHJPiaD5YM=; b=KzXoc+OtScf0621cHsW4WWgNxm
	fJdT7eA9gu/baq43jxlDEiH+QFgAMcxJbOu3wtSaqm3t75K5msuzsg0yK0lvmMVWdraR40zRMSB87
	0X7dc45GYYR5ZFeJXvD+jkJYz+EvbL4HMMu3vF3m0fT7jINcVjylE6EkjkYl7RL7xjjOd/wuP8lzX
	tuCEZP9WlcW3KD+U3f0nIsWR7LWNV6jVltjf/DNG/ZVMboqq3syyyRqLyfOYUsmrqS4ABA6oxc0oC
	ArmBf9hip05QY900Fjwm2mqUEg9SEROhiC7VtjusI8PWGqZk2iyi/QtTfSfwoFcxm26TSdPTuQAvh
	MAVgQUdw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Joerg Roedel <joro@8bytes.org>,
	Will Deacon <will@kernel.org>
Date: Thu, 15 Jul 2021 10:45:31 -0600
Message-Id: <20210715164544.6827-4-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, joro@8bytes.org, will@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 03/16] iommu: Return full error code from iommu_map_sg[_atomic]()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Convert to ssize_t return code so the return code from __iommu_map()
can be returned all the way down through dma_iommu_map_sg().

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
---
 drivers/iommu/iommu.c | 15 +++++++--------
 include/linux/iommu.h | 22 +++++++++++-----------
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 5419c4b9f27a..bf971b4e34aa 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -2567,9 +2567,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain,
 }
 EXPORT_SYMBOL_GPL(iommu_unmap_fast);
 
-static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-			     struct scatterlist *sg, unsigned int nents, int prot,
-			     gfp_t gfp)
+static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		struct scatterlist *sg, unsigned int nents, int prot,
+		gfp_t gfp)
 {
 	const struct iommu_ops *ops = domain->ops;
 	size_t len = 0, mapped = 0;
@@ -2610,19 +2610,18 @@ static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 	/* undo mappings already done */
 	iommu_unmap(domain, iova, mapped);
 
-	return 0;
-
+	return ret;
 }
 
-size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-		    struct scatterlist *sg, unsigned int nents, int prot)
+ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		     struct scatterlist *sg, unsigned int nents, int prot)
 {
 	might_sleep();
 	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
 }
 EXPORT_SYMBOL_GPL(iommu_map_sg);
 
-size_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
+ssize_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
 		    struct scatterlist *sg, unsigned int nents, int prot)
 {
 	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 32d448050bf7..9369458ba1bd 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -414,11 +414,11 @@ extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
 extern size_t iommu_unmap_fast(struct iommu_domain *domain,
 			       unsigned long iova, size_t size,
 			       struct iommu_iotlb_gather *iotlb_gather);
-extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-			   struct scatterlist *sg,unsigned int nents, int prot);
-extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
-				  unsigned long iova, struct scatterlist *sg,
-				  unsigned int nents, int prot);
+extern ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		struct scatterlist *sg, unsigned int nents, int prot);
+extern ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				   unsigned long iova, struct scatterlist *sg,
+				   unsigned int nents, int prot);
 extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
 extern void iommu_set_fault_handler(struct iommu_domain *domain,
 			iommu_fault_handler_t handler, void *token);
@@ -679,18 +679,18 @@ static inline size_t iommu_unmap_fast(struct iommu_domain *domain,
 	return 0;
 }
 
-static inline size_t iommu_map_sg(struct iommu_domain *domain,
-				  unsigned long iova, struct scatterlist *sg,
-				  unsigned int nents, int prot)
+static inline ssize_t iommu_map_sg(struct iommu_domain *domain,
+				   unsigned long iova, struct scatterlist *sg,
+				   unsigned int nents, int prot)
 {
-	return 0;
+	return -ENODEV;
 }
 
-static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+static inline ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
 				  unsigned long iova, struct scatterlist *sg,
 				  unsigned int nents, int prot)
 {
-	return 0;
+	return -ENODEV;
 }
 
 static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156727.289232 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V8-0000aT-O9; Thu, 15 Jul 2021 16:46:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156727.289232; Thu, 15 Jul 2021 16:46:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V8-0000aM-IQ; Thu, 15 Jul 2021 16:46:18 +0000
Received: by outflank-mailman (input) for mailman id 156727;
 Thu, 15 Jul 2021 16:46:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44V7-0008SR-D1
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:17 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 84f6e59b-d30b-43e7-8ff8-bc6c97f448dd;
 Thu, 15 Jul 2021 16:46:10 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ur-0001yd-1a; Thu, 15 Jul 2021 10:46:01 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Un-0001nB-Re; Thu, 15 Jul 2021 10:45:57 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 84f6e59b-d30b-43e7-8ff8-bc6c97f448dd
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=0So9SX+KFL5UGdS3JALTvYX2o53SL7VRdq+tjhsTXy0=; b=qqMKc5x7fyfRQyjp0HyOD1Z32b
	DzGFv9RbC3msHd0ahDXPw6wy/yg5LcJhCW0PDTt60LcgK0yaxWJRDYUVEm/BNElgrmC778Yy4Khxj
	aGJNkzEKcjYnH6edz8QuY+Tl8ve0CET9q0fadSAO5DDasNAoLugMijemySMaOpn9ulPDTRsV+Y6sH
	ukyJlT3fpoGKBhHlDl8EmUzR85XGF5eaXP1qG0RIxxvD17WUPvJycMMY1U/NB0pUxw6WhGIM2m2HT
	NoOWnt3ovvM0FRkgn+ygXT/NEfD/bqrFzfZTrmI0qK2wUhAUcbPNhILjW59tthQAwZmnqq++rIsqH
	kN3efVfw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 15 Jul 2021 10:45:30 -0600
Message-Id: <20210715164544.6827-3-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 02/16] dma-direct: Return appropriate error code from dma_direct_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Now that the map_sg() op expects error codes instead of return zero on
error, convert dma_direct_map_sg() to return an error code. The
only error to return presently is EINVAL if a page could not
be mapped.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/direct.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index f737e3347059..803ee9321170 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -411,7 +411,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
 
 out_unmap:
 	dma_direct_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
-	return 0;
+	return -EINVAL;
 }
 
 dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156726.289216 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V4-0008WI-Fo; Thu, 15 Jul 2021 16:46:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156726.289216; Thu, 15 Jul 2021 16:46:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44V4-0008Uv-9G; Thu, 15 Jul 2021 16:46:14 +0000
Received: by outflank-mailman (input) for mailman id 156726;
 Thu, 15 Jul 2021 16:46:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44V2-0008SS-Rt
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:12 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2915ebc6-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:11 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ur-0001yg-Fa; Thu, 15 Jul 2021 10:46:04 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nH-2S; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2915ebc6-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=uu4aeN6jLZDDSmgkCHoBLJNdbMQcxeI5DFxw3zZTSL0=; b=gyTcP6BppoSR64QEvT/6KtgUd4
	Cqacpd6zTCyD395IziWLZMvonIdoJpuFag5HZmfxDEthN0GdLzlhj32QyIroM8uAQZdE22g12YATi
	H/jKwIc1CJgKU96vcbzADV+HUKkeUUeUFk+I0FiduEZUx5pgGdOEotFQCunQ0YeFwOqFZM2XWMQhU
	0S8xCAMxaVx0Uzm+K7FrDJH4ongykXe/b91PI7moGdLy+Crm9NdgjqolQDFXGbGxivk1uQzDkzKdX
	a8WiPtvsM8g1Ej+a/P2jxuyWh9XeVk+p/okqS8f0rUiHP3ocghhh/0BeqR8n09yHS2+/br3O+Kb2h
	Jn8Vn66A==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Joerg Roedel <joro@8bytes.org>,
	Will Deacon <will@kernel.org>
Date: Thu, 15 Jul 2021 10:45:32 -0600
Message-Id: <20210715164544.6827-5-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, joro@8bytes.org, will@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v1 04/16] dma-iommu: Return error code from iommu_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Pass through appropriate error codes from iommu_dma_map_sg() now that
the error code will be passed through dma_map_sgtable().

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
---
 drivers/iommu/dma-iommu.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 98ba927aee1a..9d35e9994306 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -972,7 +972,7 @@ static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg,
 
 out_unmap:
 	iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
-	return 0;
+	return -EINVAL;
 }
 
 /*
@@ -993,11 +993,14 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	dma_addr_t iova;
 	size_t iova_len = 0;
 	unsigned long mask = dma_get_seg_boundary(dev);
+	ssize_t ret;
 	int i;
 
-	if (static_branch_unlikely(&iommu_deferred_attach_enabled) &&
-	    iommu_deferred_attach(dev, domain))
-		return 0;
+	if (static_branch_unlikely(&iommu_deferred_attach_enabled)) {
+		ret = iommu_deferred_attach(dev, domain);
+		if (ret)
+			return ret;
+	}
 
 	if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
 		iommu_dma_sync_sg_for_device(dev, sg, nents, dir);
@@ -1045,14 +1048,17 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	}
 
 	iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev);
-	if (!iova)
+	if (!iova) {
+		ret = -ENOMEM;
 		goto out_restore_sg;
+	}
 
 	/*
 	 * We'll leave any physical concatenation to the IOMMU driver's
 	 * implementation - it knows better than we do.
 	 */
-	if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len)
+	ret = iommu_map_sg_atomic(domain, iova, sg, nents, prot);
+	if (ret < iova_len)
 		goto out_free_iova;
 
 	return __finalise_sg(dev, sg, nents, iova);
@@ -1061,7 +1067,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	iommu_dma_free_iova(cookie, iova, iova_len, NULL);
 out_restore_sg:
 	__invalidate_sg(sg, nents);
-	return 0;
+	return ret;
 }
 
 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156729.289253 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VE-0001FZ-Gd; Thu, 15 Jul 2021 16:46:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156729.289253; Thu, 15 Jul 2021 16:46:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VE-0001FQ-Ci; Thu, 15 Jul 2021 16:46:24 +0000
Received: by outflank-mailman (input) for mailman id 156729;
 Thu, 15 Jul 2021 16:46:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VC-0008SR-D0
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:22 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4c61a1b8-9067-4dcd-a960-e62cd7287b1a;
 Thu, 15 Jul 2021 16:46:10 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ur-0001yb-1a; Thu, 15 Jul 2021 10:46:01 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Un-0001n6-Ig; Thu, 15 Jul 2021 10:45:57 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4c61a1b8-9067-4dcd-a960-e62cd7287b1a
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:Message-Id:Date:Cc:To:From
	:references:content-disposition:in-reply-to;
	bh=XXtkehQ2ONU8oCrAkxOjAUpUG3U+0n5Rbx+vQpsbqo0=; b=VsZ9pl6IcXQEaJc+OIOPSTH2s2
	ImpLpkZPiYqR2MqPe8J/TCGrfa8lTDqG4w41mP8plFxEbBU2ba8ajzYIU158IKdhsRSvxpR71yYdi
	lVVs77Hk2Pwh/yOG9jaNYPjpiBTmg03B32Cgaw3UpyR0EHixI4UWL/Pt0GPEJp5VOWqnyGa2Yz0/s
	3C1qrOy1FusMqR+BnvbDOrd/Ep7SkhCwGvaL1a1HrPR88k6xVDa+RE9U5jtSx6AVj/RxyiHhm3et7
	frKUyhYk2p67XlqGrIorntTlVANHFYgzmZDPkv3iqb7xQICE4bdtcuTXqP5XORIq/327zHaHt0vWM
	S5WTyqtw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 15 Jul 2021 10:45:28 -0600
Message-Id: <20210715164544.6827-1-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 00/16] .map_sg() error cleanup
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Hi,

This series is spun out and expanded from my work to add P2PDMA support
to DMA map operations[1].

The P2PDMA work requires distinguishing different error conditions in
a map_sg operation. dma_map_sgtable() already allows for returning an
error code (where as dma_map_sg() is only allowed to return zero)
however, it currently only returns -EINVAL when a .map_sg() call returns
zero.

This series cleans up all .map_sg() implementations to return appropriate
error codes. After the cleanup, dma_map_sg() will still return zero,
however dma_map_sgtable() will pass the error code from the .map_sg()
call. Thanks go to Martn Oliveira for doing a lot of the cleanup of the
obscure implementations.

The patch set is based off of v5.14-rc1 and a git repo can be found
here:

  https://github.com/sbates130272/linux-p2pmem map_sg_err_cleanup_v1

Thanks,

Logan

[1] https://lore.kernel.org/linux-block/20210513223203.5542-1-logang@deltatee.com/

--

Logan Gunthorpe (5):
  dma-mapping: Allow map_sg() ops to return negative error codes
  dma-direct: Return appropriate error code from dma_direct_map_sg()
  iommu: Return full error code from iommu_map_sg[_atomic]()
  dma-iommu: Return error code from iommu_dma_map_sg()
  dma-mapping: Disallow .map_sg operations from returning zero on error

Martin Oliveira (11):
  alpha: return error code from alpha_pci_map_sg()
  ARM/dma-mapping: return error code from .map_sg() ops
  ia64/sba_iommu: return error code from sba_map_sg_attrs()
  MIPS/jazzdma: return error code from jazz_dma_map_sg()
  powerpc/iommu: return error code from .map_sg() ops
  s390/pci: return error code from s390_dma_map_sg()
  sparc/iommu: return error codes from .map_sg() ops
  parisc: return error code from .map_sg() ops
  xen: swiotlb: return error code from xen_swiotlb_map_sg()
  x86/amd_gart: return error code from gart_map_sg()
  dma-mapping: return error code from dma_dummy_map_sg()

 arch/alpha/kernel/pci_iommu.c           | 10 +++-
 arch/arm/mm/dma-mapping.c               | 22 +++++---
 arch/ia64/hp/common/sba_iommu.c         |  9 +--
 arch/mips/jazz/jazzdma.c                |  2 +-
 arch/powerpc/kernel/iommu.c             |  4 +-
 arch/powerpc/platforms/ps3/system-bus.c |  2 +-
 arch/powerpc/platforms/pseries/vio.c    |  5 +-
 arch/s390/pci/pci_dma.c                 | 12 ++--
 arch/sparc/kernel/iommu.c               |  4 +-
 arch/sparc/kernel/pci_sun4v.c           |  4 +-
 arch/sparc/mm/iommu.c                   |  2 +-
 arch/x86/kernel/amd_gart_64.c           | 16 +++---
 drivers/iommu/dma-iommu.c               | 20 ++++---
 drivers/iommu/iommu.c                   | 15 +++--
 drivers/parisc/ccio-dma.c               |  2 +-
 drivers/parisc/sba_iommu.c              |  2 +-
 drivers/xen/swiotlb-xen.c               |  2 +-
 include/linux/dma-map-ops.h             |  6 +-
 include/linux/dma-mapping.h             | 35 +++---------
 include/linux/iommu.h                   | 22 ++++----
 kernel/dma/direct.c                     |  2 +-
 kernel/dma/dummy.c                      |  2 +-
 kernel/dma/mapping.c                    | 73 ++++++++++++++++++++++---
 23 files changed, 165 insertions(+), 108 deletions(-)


base-commit: e73f0f0ee7541171d89f2e2491130c7771ba58d3
--
2.20.1


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156730.289259 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VE-0001JZ-TH; Thu, 15 Jul 2021 16:46:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156730.289259; Thu, 15 Jul 2021 16:46:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VE-0001Ib-N5; Thu, 15 Jul 2021 16:46:24 +0000
Received: by outflank-mailman (input) for mailman id 156730;
 Thu, 15 Jul 2021 16:46:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VC-0008SS-Nr
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:22 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 28955abb-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:12 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uw-0001yc-0C; Thu, 15 Jul 2021 10:46:07 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Up-0001ni-DZ; Thu, 15 Jul 2021 10:45:59 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 28955abb-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=v712SqpSEckB3f7bRn5BvRO69pOYG6tOz5ojT8LD73A=; b=ZaXCnoVebjGK2r9ONanYW8xyoE
	d/aBn+IIZsuZoEFaEqgbPSqT+vKCb9iPs53KbB9p5heckwbq9FJLYYzsPbEZwjA/oSwzmCwNan9H3
	d9wymXNRdMM7Ogi/JqBqg/zX+rqVe5ZWliU1yjk6OjAaFLsf+VzCAITHxjm0E3UUFPmqwThLi5jAB
	+1kSzs8ggjovcct44c4uh2C7M19dmwFVCr4t5dmJeG4ve17QFBYfsX2vNPY2R80TryX7yClClbhiB
	Mm7YL8s8QqWa6kWxFLWxSs34EoLz8X9XKPkRNOdD7KpEJAmkkZzyIplL0KzNfjb9/FjQ6XGMfEGyq
	3OcuabnQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Date: Thu, 15 Jul 2021 10:45:41 -0600
Message-Id: <20210715164544.6827-14-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com, sstabellini@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 13/16] xen: swiotlb: return error code from xen_swiotlb_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

xen_swiotlb_map_sg() may only fail if xen_swiotlb_map_page() fails, but
xen_swiotlb_map_page() only supports returning errors as
DMA_MAPPING_ERROR. So coalesce all errors into EINVAL.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
---
 drivers/xen/swiotlb-xen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 24d11861ac7d..b5707127c9d7 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -509,7 +509,7 @@ xen_swiotlb_map_sg(struct device *dev, struct scatterlist *sgl, int nelems,
 out_unmap:
 	xen_swiotlb_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
 	sg_dma_len(sgl) = 0;
-	return 0;
+	return -EINVAL;
 }
 
 static void
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156731.289276 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VJ-0001z7-4Q; Thu, 15 Jul 2021 16:46:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156731.289276; Thu, 15 Jul 2021 16:46:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VJ-0001yy-0D; Thu, 15 Jul 2021 16:46:29 +0000
Received: by outflank-mailman (input) for mailman id 156731;
 Thu, 15 Jul 2021 16:46:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VH-0008SR-D3
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:27 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 35c9d403-0800-4730-8d26-e6c6feab9909;
 Thu, 15 Jul 2021 16:46:11 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ut-0001yb-T5; Thu, 15 Jul 2021 10:46:04 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Up-0001no-O1; Thu, 15 Jul 2021 10:45:59 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 35c9d403-0800-4730-8d26-e6c6feab9909
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=5q5HrJN5z01eX+XAG2EfKItHnqLG5Bo1fOvwGUnV4O4=; b=oVKqj1qxGhVN9ixr6TLSsC4ZBO
	UTD1MZ1POYG3KI27eIMLMFxYbxzslShIpA6YWVrJkGi8+wWJ/wcVjvI1+Jf302nsbpn08IP0HnrjG
	oh9pK+zmvzVkSIE1LmiCYRQEMg/n7BKDDFN1GhirqNtUZZY85nV7dWg7yr93fsfot42jaRm2mqSn+
	wA3i/zh7pUzR0TP8bgsZsoHOwBQn2dWZ41mvNoesxsAdL31ytt8u53ohsynd3SOTknscoWtbi7kQX
	eUTXIk0RVW11sAtm1oHi0qiO2SdAZ7zV+zvHAQY6D/M0Zv5t6bRmqKI4wJIkqLx4KZbsVyYpCrClV
	/+yGg5Kg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 15 Jul 2021 10:45:43 -0600
Message-Id: <20210715164544.6827-16-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 15/16] dma-mapping: return error code from dma_dummy_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

The only errno to return is -ENODEV in the case when DMA is not
supported.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/dummy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/dma/dummy.c b/kernel/dma/dummy.c
index eacd4c5b10bf..ae9abebed0c4 100644
--- a/kernel/dma/dummy.c
+++ b/kernel/dma/dummy.c
@@ -22,7 +22,7 @@ static int dma_dummy_map_sg(struct device *dev, struct scatterlist *sgl,
 		int nelems, enum dma_data_direction dir,
 		unsigned long attrs)
 {
-	return 0;
+	return -ENODEV;
 }
 
 static int dma_dummy_supported(struct device *hwdev, u64 mask)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156732.289280 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VJ-000234-Mq; Thu, 15 Jul 2021 16:46:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156732.289280; Thu, 15 Jul 2021 16:46:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VJ-000229-Az; Thu, 15 Jul 2021 16:46:29 +0000
Received: by outflank-mailman (input) for mailman id 156732;
 Thu, 15 Jul 2021 16:46:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VH-0008SS-OA
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:27 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 29e21944-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:12 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ux-0001yd-5T; Thu, 15 Jul 2021 10:46:07 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Up-0001nc-2A; Thu, 15 Jul 2021 10:45:59 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 29e21944-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=bP1/zbeT2pa523Na4lBPwCxSPdXLF6EA3VaIa9YAxC8=; b=sJmCUNWZOQ6d70ImKoRR27n6b+
	E39yZfan4G4WzG9wL3lTV+KlnqhMrasNQXRGkyUszUPJHEArPHAPGcY2sWj8PnuG0ob2OZYn24jC7
	YzDiIbJWkFENBGhhXfYDKBWmDzziXvoGGD0YC4LoB3rHM/84eqGdF03tY+VbGdbA+bbu0DCVP2Cxc
	hKSRIDKA15ormrTIGaKN2Qh1cWztWNAY4KnoKZpsuBiMg7vQCgkGb3S96H4k4EX9Lqx5kiNItXR5P
	ezHvRasL53lzmbQQWsT5h7UaFNR4HwdymkezbQ3oQKfE7WBbAYMV2rFas0+V4ja/N2XRd12MEZauy
	2zUp+pNw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"David S. Miller" <davem@davemloft.net>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Thu, 15 Jul 2021 10:45:39 -0600
Message-Id: <20210715164544.6827-12-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, davem@davemloft.net, schnelle@linux.ibm.com, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 11/16] sparc/iommu: return error codes from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Returning an errno from __sbus_iommu_map_sg() results in
sbus_iommu_map_sg_gflush() and sbus_iommu_map_sg_pflush() returning an
errno, as those functions are wrappers around __sbus_iommu_map_sg().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/sparc/kernel/iommu.c     | 4 ++--
 arch/sparc/kernel/pci_sun4v.c | 4 ++--
 arch/sparc/mm/iommu.c         | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index a034f571d869..0589acd34201 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -448,7 +448,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 	iommu = dev->archdata.iommu;
 	strbuf = dev->archdata.stc;
 	if (nelems == 0 || !iommu)
-		return 0;
+		return -EINVAL;
 
 	spin_lock_irqsave(&iommu->lock, flags);
 
@@ -580,7 +580,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 	}
 	spin_unlock_irqrestore(&iommu->lock, flags);
 
-	return 0;
+	return -EINVAL;
 }
 
 /* If contexts are being used, they are the same in all of the mappings
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 9de57e88f7a1..d90e80fa5705 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -486,7 +486,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	iommu = dev->archdata.iommu;
 	if (nelems == 0 || !iommu)
-		return 0;
+		return -EINVAL;
 	atu = iommu->atu;
 
 	prot = HV_PCI_MAP_ATTR_READ;
@@ -619,7 +619,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 	}
 	local_irq_restore(flags);
 
-	return 0;
+	return -EINVAL;
 }
 
 static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist,
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index 0c0342e5b10d..01ffcedd159c 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -256,7 +256,7 @@ static int __sbus_iommu_map_sg(struct device *dev, struct scatterlist *sgl,
 		sg->dma_address =__sbus_iommu_map_page(dev, sg_page(sg),
 				sg->offset, sg->length, per_page_flush);
 		if (sg->dma_address == DMA_MAPPING_ERROR)
-			return 0;
+			return -EINVAL;
 		sg->dma_length = sg->length;
 	}
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156733.289298 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VN-0002sx-Fr; Thu, 15 Jul 2021 16:46:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156733.289298; Thu, 15 Jul 2021 16:46:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VN-0002sY-AE; Thu, 15 Jul 2021 16:46:33 +0000
Received: by outflank-mailman (input) for mailman id 156733;
 Thu, 15 Jul 2021 16:46:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VM-0008SR-DM
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:32 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cb6d9360-c6db-4ff0-971f-a419cd0c309b;
 Thu, 15 Jul 2021 16:46:11 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ut-0001yd-PE; Thu, 15 Jul 2021 10:46:04 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Up-0001nr-Se; Thu, 15 Jul 2021 10:45:59 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cb6d9360-c6db-4ff0-971f-a419cd0c309b
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=wWprxpQbGfLFSl5wy/zhotLOA6ZrkLS6haFDYZBjiv4=; b=Spw0vcPuNWrC1VB/N3ErsY9QsR
	SVOu2pyWJ/FuZ63VRhkHaNrYGNxmmYIXx9PikhM8TCMmdpKyjBuF9RLs0h5USncTLdFqA8ookOx0G
	Uh+6hSZ1LQ/AT/6fkMs7I/sWmgeij/QksGHD/wcgAvLgLFIYupGJcECBNvTIejINc9vzRhnt1gvMp
	d1qv/fQOX1iCowsgU//qvf9zBxNSzcO+QCg8whF/oXVJhQQoSMlgUYlJBgNgtfjNvKiSi4udAIPMg
	kZkbvAnNQf0F0JxQ/F67quZyGQhReNDhJW14fk20qFpoR28wptyOUDAN3gFjO1yJsvCMWx9e+oRs6
	TMj7iEGw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 15 Jul 2021 10:45:44 -0600
Message-Id: <20210715164544.6827-17-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 16/16] dma-mapping: Disallow .map_sg operations from returning zero on error
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Now that all the .map_sg operations have been converted to returning
proper error codes, drop the code to handle a zero return value,
add a warning if a zero is returned and update the comment for the
map_sg operation.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 include/linux/dma-map-ops.h | 8 +++-----
 kernel/dma/mapping.c        | 6 +++---
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index eaa969be8284..f299bc1e317b 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -42,11 +42,9 @@ struct dma_map_ops {
 			unsigned long attrs);
 	/*
 	 * map_sg should return a negative error code on error.
-	 * dma_map_sgtable() will return the error code returned and convert
-	 * a zero return (for legacy implementations) into -EINVAL.
-	 *
-	 * dma_map_sg() will always return zero on any negative or zero
-	 * return to satisfy its own calling convention.
+	 * dma_map_sgtable() will return the error code returned by the
+	 * operation and dma_map_sg() will always convert any error to zero
+	 * to satisfy its own calling convention.
 	 */
 	int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents,
 			enum dma_data_direction dir, unsigned long attrs);
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 30f89d244566..978a6a16aaf7 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -194,6 +194,8 @@ static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
 	else
 		ents = ops->map_sg(dev, sg, nents, dir, attrs);
 
+	WARN_ON_ONCE(ents == 0);
+
 	if (ents > 0)
 		debug_dma_map_sg(dev, sg, nents, ents, dir);
 
@@ -251,9 +253,7 @@ int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
 	int nents;
 
 	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
-	if (nents == 0)
-		return -EINVAL;
-	else if (nents < 0)
+	if (nents < 0)
 		return nents;
 
 	sgt->nents = nents;
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156734.289308 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VO-0003DG-UT; Thu, 15 Jul 2021 16:46:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156734.289308; Thu, 15 Jul 2021 16:46:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VO-0003Cl-OS; Thu, 15 Jul 2021 16:46:34 +0000
Received: by outflank-mailman (input) for mailman id 156734;
 Thu, 15 Jul 2021 16:46:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VM-0008SS-OH
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:32 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2a2f15a0-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:13 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ux-0001yb-0X; Thu, 15 Jul 2021 10:46:08 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nZ-TI; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2a2f15a0-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=Wrns5FFqiizJvY/sNvwDopZHfXFnxfOgrEtwhJFRdNw=; b=Sws5QpZQtGmVowR/5iUlwg8UgC
	Q5huPCa0lRnH7erDaKrhzfZc3JEbtS/rjcSlaa8ceAyHmJK3qWsjN9/c4G6FhbYQ9HlDeJ9jETJXB
	bdq2f8TzBEOEkrjZGT5Co1lxkWTp+AluJjL1bkBj90Yq6ajMWBMKV71yrDPw9lVFWzowjR6HfsXtg
	d+Je/PWPnaLtSYNrKpkvSiyI5DRH5zJ66i9nbDkdeg3NtjmH3nUDa+Kbqhs6Z3Dk8wWp1fVvuoZAb
	ByyrzFq6ya5bW2DjyLNWRxN8NNyR7KERo6lOJpGSIfwCgNHNa6vWbhtarhteipE1N4ZU/tBRoJcGY
	7hO7A1Vg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Date: Thu, 15 Jul 2021 10:45:38 -0600
Message-Id: <20210715164544.6827-11-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, schnelle@linux.ibm.com, gerald.schaefer@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 10/16] s390/pci: return error code from s390_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

So propagate the error from __s390_dma_map_sg() up.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/pci/pci_dma.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index ebc9a49523aa..c78b02012764 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -487,7 +487,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	unsigned int max = dma_get_max_seg_size(dev);
 	unsigned int size = s->offset + s->length;
 	unsigned int offset = s->offset;
-	int count = 0, i;
+	int count = 0, i, ret;
 
 	for (i = 1; i < nr_elements; i++) {
 		s = sg_next(s);
@@ -497,8 +497,9 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 
 		if (s->offset || (size & ~PAGE_MASK) ||
 		    size + s->length > max) {
-			if (__s390_dma_map_sg(dev, start, size,
-					      &dma->dma_address, dir))
+			ret = __s390_dma_map_sg(dev, start, size,
+						&dma->dma_address, dir);
+			if (ret)
 				goto unmap;
 
 			dma->dma_address += offset;
@@ -511,7 +512,8 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 		}
 		size += s->length;
 	}
-	if (__s390_dma_map_sg(dev, start, size, &dma->dma_address, dir))
+	ret = __s390_dma_map_sg(dev, start, size, &dma->dma_address, dir);
+	if (ret)
 		goto unmap;
 
 	dma->dma_address += offset;
@@ -523,7 +525,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 		s390_dma_unmap_pages(dev, sg_dma_address(s), sg_dma_len(s),
 				     dir, attrs);
 
-	return 0;
+	return ret;
 }
 
 static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156735.289320 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VS-0003x3-HM; Thu, 15 Jul 2021 16:46:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156735.289320; Thu, 15 Jul 2021 16:46:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VS-0003vf-9I; Thu, 15 Jul 2021 16:46:38 +0000
Received: by outflank-mailman (input) for mailman id 156735;
 Thu, 15 Jul 2021 16:46:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VR-0008SR-DQ
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:37 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e968ff3e-fc23-49f9-90ee-fa4a62cf3eee;
 Thu, 15 Jul 2021 16:46:13 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ux-0001yg-6K; Thu, 15 Jul 2021 10:46:08 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Up-0001nf-8u; Thu, 15 Jul 2021 10:45:59 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e968ff3e-fc23-49f9-90ee-fa4a62cf3eee
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=Vh7idcp8uIAqCBUcnPlWtiOoHOTF3pKwZ9tjpJkyjBs=; b=JmcSAn2rvRQc5C7MrFSRK9pBrk
	GKVkxj+CKC5t4mYSimezSqrTpkyQiLqjRkiysuOkTo5xv4HNant2pQCww+QjxcAxV5QVqv7kQibHD
	Igtt3UtSYyGJX35W1Sy5JkYpSPmiKIkvOm4QY3kby4ft+qBjcTzrrx+eHWsugiQnsKU99QFdtUWjo
	RGKbXIpbYgM6wfJnEYPQ7nnjxKkVRl/NgOjCCDAKbeBnXVJUhW2sh6RcwENC4KOjVMf/8vOqW2Ffe
	ln4bBhV7KnL2jLL1wwfCDO+4ND4q58CbobKSfyeYQnG+t1VZ+BqxBrACk2rRQb5uSnYDIb7pF4f8K
	8EuQ8rFA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>
Date: Thu, 15 Jul 2021 10:45:40 -0600
Message-Id: <20210715164544.6827-13-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, James.Bottomley@HansenPartnership.com, deller@gmx.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 12/16] parisc: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
---
 drivers/parisc/ccio-dma.c  | 2 +-
 drivers/parisc/sba_iommu.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index b5f9ee81a46c..a3a5cfda3d93 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -918,7 +918,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
 	BUG_ON(!dev);
 	ioc = GET_IOC(dev);
 	if (!ioc)
-		return 0;
+		return -ENODEV;
 	
 	DBG_RUN_SG("%s() START %d entries\n", __func__, nents);
 
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index dce4cdf786cd..9a6671a230ee 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -947,7 +947,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
 
 	ioc = GET_IOC(dev);
 	if (!ioc)
-		return 0;
+		return -ENODEV;
 
 	/* Fast path single entry scatterlists. */
 	if (nents == 1) {
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156737.289329 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VU-0004NE-5b; Thu, 15 Jul 2021 16:46:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156737.289329; Thu, 15 Jul 2021 16:46:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VT-0004Lb-T3; Thu, 15 Jul 2021 16:46:39 +0000
Received: by outflank-mailman (input) for mailman id 156737;
 Thu, 15 Jul 2021 16:46:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VR-0008SS-Oc
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:37 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2915ebc7-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:13 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44Ux-0001ye-4e; Thu, 15 Jul 2021 10:46:08 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Up-0001nl-Il; Thu, 15 Jul 2021 10:45:59 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2915ebc7-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=bxYuYkexdgjCkkzv9UnzPxUCVLmS0/r9pZcrAxTBVsI=; b=Lss1AvtDz5LUXxNmZLvnEi5Xde
	zNsqlgc9Jfm+oTis6ayJermYtPQlSU7FExSZG7YxLDzVUAjV3EZgudpLjdA49a+pQ5IoaupAkmrUj
	MBmKsrcgEudrKKHqygKF9x1/h8OG9HCtnZ6ksLTzwkUmB6vGkrWUyKuQf2SwXUyj9EiP/h+4XMAeI
	5942GhQ+bqkXDDvcsqx0b0E0wzNh4Dd0L/rKgGWHjBE4F1pg1VHlpxUpnp+SnapV7KhBrAH+jRe0k
	I5aj2hsoE9K9+DtJ37q/EQ4CjTJYY8q+bja6l5RiGMwjgqR841ENJ51Mn9zbG5mhOaFhmV7ciE2YO
	VNuGxQPg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Thu, 15 Jul 2021 10:45:42 -0600
Message-Id: <20210715164544.6827-15-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, schnelle@linux.ibm.com, tsbogend@alpha.franken.de, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 14/16] x86/amd_gart: return error code from gart_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

So make __dma_map_cont() return a valid errno (which is then propagated
to gart_map_sg() via dma_map_cont()) and return it in case of failure.

Also, return -EINVAL in case of invalid nents.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/x86/kernel/amd_gart_64.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 9ac696487b13..46aea9a4f26b 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -331,7 +331,7 @@ static int __dma_map_cont(struct device *dev, struct scatterlist *start,
 	int i;
 
 	if (iommu_start == -1)
-		return -1;
+		return -ENOMEM;
 
 	for_each_sg(start, s, nelems, i) {
 		unsigned long pages, addr;
@@ -380,13 +380,13 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		       enum dma_data_direction dir, unsigned long attrs)
 {
 	struct scatterlist *s, *ps, *start_sg, *sgmap;
-	int need = 0, nextneed, i, out, start;
+	int need = 0, nextneed, i, out, start, ret;
 	unsigned long pages = 0;
 	unsigned int seg_size;
 	unsigned int max_seg_size;
 
 	if (nents == 0)
-		return 0;
+		return -EINVAL;
 
 	out		= 0;
 	start		= 0;
@@ -414,8 +414,9 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 			if (!iommu_merge || !nextneed || !need || s->offset ||
 			    (s->length + seg_size > max_seg_size) ||
 			    (ps->offset + ps->length) % PAGE_SIZE) {
-				if (dma_map_cont(dev, start_sg, i - start,
-						 sgmap, pages, need) < 0)
+				ret = dma_map_cont(dev, start_sg, i - start,
+						   sgmap, pages, need);
+				if (ret < 0)
 					goto error;
 				out++;
 
@@ -432,7 +433,8 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		pages += iommu_num_pages(s->offset, s->length, PAGE_SIZE);
 		ps = s;
 	}
-	if (dma_map_cont(dev, start_sg, i - start, sgmap, pages, need) < 0)
+	ret = dma_map_cont(dev, start_sg, i - start, sgmap, pages, need);
+	if (ret < 0)
 		goto error;
 	out++;
 	flush_gart();
@@ -458,7 +460,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 	iommu_full(dev, pages << PAGE_SHIFT, dir);
 	for_each_sg(sg, s, nents, i)
 		s->dma_address = DMA_MAPPING_ERROR;
-	return 0;
+	return ret;
 }
 
 /* allocate and map a coherent mapping */
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156744.289342 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VX-00050j-IV; Thu, 15 Jul 2021 16:46:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156744.289342; Thu, 15 Jul 2021 16:46:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44VX-00050B-BG; Thu, 15 Jul 2021 16:46:43 +0000
Received: by outflank-mailman (input) for mailman id 156744;
 Thu, 15 Jul 2021 16:46:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44VW-0008SS-Ol
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:42 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2a7bfa1e-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:13 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44V0-0001yd-25; Thu, 15 Jul 2021 10:46:10 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nT-JD; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2a7bfa1e-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=9b2AxuIBWP2rX2JFr1XI1eezzTEXnwjOp4q66fJ74+c=; b=VCPgoVUtOm1WHuYxUHm4B1Cez8
	mgKPoApw/BVoyttnimQ9wao0paXUXJOoWTAeKzNKD0b0O+PN9rIuu9MsL7D1WqhjVospH7QSfnqgj
	tTtiY2untOl16Pf7pL3yLEXYv6FxLsiAJ5ZsMsouM+77PPl6NvU9bLajRizBa52UjsZUcwOV8FZ4M
	2S6UZiOc8TCY4kwYOpVtUj9vcMBY8wlOdOt0ijVuZXzMwmGJLwtdBOqLxWpKTNem65sdax/XiI4NB
	43PpGNCFhqXYOTFcO5eqUIoab7HGZEhnpz9t86SRNmXYO4aEoyDeVnz1VOxnsMe9SZs6AtMd7Nu8A
	RQrbtdcw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 15 Jul 2021 10:45:36 -0600
Message-Id: <20210715164544.6827-9-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 08/16] MIPS/jazzdma: return error code from jazz_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

vdma_alloc() may fail for different reasons, but since it only supports
indicating an error via a return of DMA_MAPPING_ERROR, we coalesce the
different reasons into -EINVAL.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/mips/jazz/jazzdma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c
index 461457b28982..3b99743435db 100644
--- a/arch/mips/jazz/jazzdma.c
+++ b/arch/mips/jazz/jazzdma.c
@@ -552,7 +552,7 @@ static int jazz_dma_map_sg(struct device *dev, struct scatterlist *sglist,
 				dir);
 		sg->dma_address = vdma_alloc(sg_phys(sg), sg->length);
 		if (sg->dma_address == DMA_MAPPING_ERROR)
-			return 0;
+			return -EINVAL;
 		sg_dma_len(sg) = sg->length;
 	}

--
2.20.1


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156749.289353 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44Vd-0005ze-68; Thu, 15 Jul 2021 16:46:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156749.289353; Thu, 15 Jul 2021 16:46:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44Vd-0005zS-1c; Thu, 15 Jul 2021 16:46:49 +0000
Received: by outflank-mailman (input) for mailman id 156749;
 Thu, 15 Jul 2021 16:46:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44Vb-0008SS-P2
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:47 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2a7bfa1f-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:14 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44V0-0001yc-48; Thu, 15 Jul 2021 10:46:11 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nW-Ns; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2a7bfa1f-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=j6Pr/OuRQ0FDOA0vFikKAhizbVvYkzaBamOZP0pmeEg=; b=Dkn3q4LV3x6P2TnAQ4dHbiy0gT
	dHrqGIqsYfANtr88cB4SDDmwoDAm+3uMXwwUMCZ5FDoIEaICaRygRCgjZCR1YWHKgaDLwGd7pcIds
	LPRHC56e5Ne+6AJEfCgMVy5UwvTjTaLVsU9csxkrEf4u+SsNzIhl19BpCNJzR+mGxBoNX+XpJZ1Th
	hwJWkb9pyr1rz6+CFF31AEDrthTPJGyTTUWW58QveoemPsYFHnAnEhW+LulIW1Nl3aByuE69itje2
	t2Vw4QfVY/ws9zJK0WYtD95XW1HBnPxc3TFddZSrjQawxAgva8UCldcIeIcd0Pt4xkD5WIL0MUWWt
	wyEWisGw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Geoff Levand <geoff@infradead.org>
Date: Thu, 15 Jul 2021 10:45:37 -0600
Message-Id: <20210715164544.6827-10-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org, geoff@infradead.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 09/16] powerpc/iommu: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Propagate the error up if vio_dma_iommu_map_sg() fails.

ppc_iommu_map_sg() may fail either because of iommu_range_alloc() or
because of tbl->it_ops->set(). The former only supports returning an
error with DMA_MAPPING_ERROR and an examination of the latter indicates
that it may return arch-specific errors (for example,
tce_buildmulti_pSeriesLP()). Hence, coalesce all of those errors into
-EINVAL;

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Geoff Levand <geoff@infradead.org>
---
 arch/powerpc/kernel/iommu.c             | 4 ++--
 arch/powerpc/platforms/ps3/system-bus.c | 2 +-
 arch/powerpc/platforms/pseries/vio.c    | 5 +++--
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 2af89a5e379f..bd0ed618bfa5 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -473,7 +473,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 	BUG_ON(direction == DMA_NONE);
 
 	if ((nelems == 0) || !tbl)
-		return 0;
+		return -EINVAL;
 
 	outs = s = segstart = &sglist[0];
 	outcount = 1;
@@ -599,7 +599,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 		if (s == outs)
 			break;
 	}
-	return 0;
+	return -EINVAL;
 }
 
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..c54eb46f0cfb 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -663,7 +663,7 @@ static int ps3_ioc0_map_sg(struct device *_dev, struct scatterlist *sg,
 			   unsigned long attrs)
 {
 	BUG();
-	return 0;
+	return -EINVAL;
 }
 
 static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg,
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..e31e59c54f30 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -560,7 +560,8 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 	for_each_sg(sglist, sgl, nelems, count)
 		alloc_size += roundup(sgl->length, IOMMU_PAGE_SIZE(tbl));
 
-	if (vio_cmo_alloc(viodev, alloc_size))
+	ret = vio_cmo_alloc(viodev, alloc_size);
+	if (ret)
 		goto out_fail;
 	ret = ppc_iommu_map_sg(dev, tbl, sglist, nelems, dma_get_mask(dev),
 			direction, attrs);
@@ -577,7 +578,7 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 	vio_cmo_dealloc(viodev, alloc_size);
 out_fail:
 	atomic_inc(&viodev->cmo.allocs_failed);
-	return 0;
+	return ret;
 }
 
 static void vio_dma_iommu_unmap_sg(struct device *dev,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156752.289363 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44Vh-0006lk-Ii; Thu, 15 Jul 2021 16:46:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156752.289363; Thu, 15 Jul 2021 16:46:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44Vh-0006lH-EW; Thu, 15 Jul 2021 16:46:53 +0000
Received: by outflank-mailman (input) for mailman id 156752;
 Thu, 15 Jul 2021 16:46:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44Vg-0008SS-P0
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:52 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2a2f15a1-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:14 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44V0-0001ye-IS; Thu, 15 Jul 2021 10:46:11 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nQ-Dh; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2a2f15a1-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=yHZJDyrbtc2DNRkkLnCWk6LyCavHBAROxZPaBwPJV+w=; b=Uk9hmVlOMLTaHT5Tplw3GW15jH
	CeVS5nCeJY2tUo3aAcbZduCSQVDn0jptjFbmtnj3v5G8CraUuCNv7B/bA1lXnwAqLJwQNB2t23QL6
	GCZqhLMOwzqRH34G+Y5BBzb4NQhwdrGK5mOkNWXt9gAGnvdQqFYRscmaU6pWKWcE7qUt7wO4D80pe
	8/PNToWYD9qaWrwbmxJrGUcHjdK3p3BXVy4naPhfKpzb1aURkg8IXCH/NXXzv+OOVY95aZoB5qwfA
	QHHlGEKoZAnVNvL5MsmbOBHtpgrk0NyNnIEds8LB/+w6+0+ZS1RCVbWjm8vff/8qi0kFo6Sr+2pOL
	bwtGjm0w==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 15 Jul 2021 10:45:35 -0600
Message-Id: <20210715164544.6827-8-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, schnelle@linux.ibm.com, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 07/16] ia64/sba_iommu: return error code from sba_map_sg_attrs()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Propagate the return of dma_mapping_error() up, if it is an errno.

sba_coalesce_chunks() may only presently fail if sba_alloc_range()
fails, which in turn only fails if the iommu is out of mapping
resources, hence a -ENOMEM is used in that case.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/ia64/hp/common/sba_iommu.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index 9148ddbf02e5..09dbe07a18c1 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -1431,7 +1431,7 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 			    unsigned long attrs)
 {
 	struct ioc *ioc;
-	int coalesced, filled = 0;
+	int coalesced, filled = 0, ret;
 #ifdef ASSERT_PDIR_SANITY
 	unsigned long flags;
 #endif
@@ -1458,8 +1458,9 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 		sglist->dma_length = sglist->length;
 		sglist->dma_address = sba_map_page(dev, sg_page(sglist),
 				sglist->offset, sglist->length, dir, attrs);
-		if (dma_mapping_error(dev, sglist->dma_address))
-			return 0;
+		ret = dma_mapping_error(dev, sglist->dma_address);
+		if (ret)
+			return ret;
 		return 1;
 	}
 
@@ -1486,7 +1487,7 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 	coalesced = sba_coalesce_chunks(ioc, dev, sglist, nents);
 	if (coalesced < 0) {
 		sba_unmap_sg_attrs(dev, sglist, nents, dir, attrs);
-		return 0;
+		return -ENOMEM;
 	}
 
 	/*
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:46:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:46:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156756.289375 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44Vm-0007ZM-Ul; Thu, 15 Jul 2021 16:46:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156756.289375; Thu, 15 Jul 2021 16:46:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44Vm-0007ZA-Pj; Thu, 15 Jul 2021 16:46:58 +0000
Received: by outflank-mailman (input) for mailman id 156756;
 Thu, 15 Jul 2021 16:46:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44Vl-0008SS-PE
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:46:57 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2b8fd93e-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:15 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44V1-0001yg-Li; Thu, 15 Jul 2021 10:46:12 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nN-8x; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2b8fd93e-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=tVzBPY6/Bgdpsr8bmfZpwFmQV8rVEWLD9Ju+AXRRB/Q=; b=sT6nIphYRpQg2LPmIHPAN9+aTu
	GJh+kG/x4SM7ujeEOwTJw5ilEgyuKzytEd4BRwwLa0nLKahIc7+GQ9qJ4fA5Hu9384ZtjsbuG2b92
	s51DHr3LmCxuscjDOqlyMZ7uwWmozJZCa9HkoIp885CAsrDYo/QLqd7pHbw54nqIDcuExXUrrVRfw
	hZPArbok7AiyAtDvc1e+GRkLRV8zgo/jTjvTVyD1VZI/lSLxAe/izWpR6ucAyWORMvAeNpU6T2dEP
	ToPwTmhEJvkkerb0Tb9hn7uJF1hapwuF3GeNQtxgW4wYN95t0lZGeB9IRWqetmlEjHzeTZ71Uml4S
	1lVZm5YQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 15 Jul 2021 10:45:34 -0600
Message-Id: <20210715164544.6827-7-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, linux@armlinux.org.uk, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 06/16] ARM/dma-mapping: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure,
so propagate any errors that may happen all the way up.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/arm/mm/dma-mapping.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index c4b8df2ad328..8c286e690756 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -980,7 +980,7 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 {
 	const struct dma_map_ops *ops = get_dma_ops(dev);
 	struct scatterlist *s;
-	int i, j;
+	int i, j, ret;
 
 	for_each_sg(sg, s, nents, i) {
 #ifdef CONFIG_NEED_SG_DMA_LENGTH
@@ -988,7 +988,8 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 #endif
 		s->dma_address = ops->map_page(dev, sg_page(s), s->offset,
 						s->length, dir, attrs);
-		if (dma_mapping_error(dev, s->dma_address))
+		ret = dma_mapping_error(dev, s->dma_address);
+		if (ret)
 			goto bad_mapping;
 	}
 	return nents;
@@ -996,7 +997,7 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
  bad_mapping:
 	for_each_sg(sg, s, i, j)
 		ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
-	return 0;
+	return ret;
 }
 
 /**
@@ -1622,7 +1623,7 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		     bool is_coherent)
 {
 	struct scatterlist *s = sg, *dma = sg, *start = sg;
-	int i, count = 0;
+	int i, count = 0, ret;
 	unsigned int offset = s->offset;
 	unsigned int size = s->offset + s->length;
 	unsigned int max = dma_get_max_seg_size(dev);
@@ -1634,8 +1635,10 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
-			if (__map_sg_chunk(dev, start, size, &dma->dma_address,
-			    dir, attrs, is_coherent) < 0)
+			ret = __map_sg_chunk(dev, start, size,
+					     &dma->dma_address, dir, attrs,
+					     is_coherent);
+			if (ret < 0)
 				goto bad_mapping;
 
 			dma->dma_address += offset;
@@ -1648,8 +1651,9 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		}
 		size += s->length;
 	}
-	if (__map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
-		is_coherent) < 0)
+	ret = __map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
+			     is_coherent);
+	if (ret < 0)
 		goto bad_mapping;
 
 	dma->dma_address += offset;
@@ -1660,7 +1664,7 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 bad_mapping:
 	for_each_sg(sg, s, count, i)
 		__iommu_remove_mapping(dev, sg_dma_address(s), sg_dma_len(s));
-	return 0;
+	return ret;
 }
 
 /**
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:53:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:53:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156793.289386 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44c2-0002IU-Kh; Thu, 15 Jul 2021 16:53:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156793.289386; Thu, 15 Jul 2021 16:53:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44c2-0002IN-Gd; Thu, 15 Jul 2021 16:53:26 +0000
Received: by outflank-mailman (input) for mailman id 156793;
 Thu, 15 Jul 2021 16:53:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tkDB=MH=armlinux.org.uk=linux+xen-devel=lists.xenproject.org@srs-us1.protection.inumbo.net>)
 id 1m44c0-0002IH-En
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:53:25 +0000
Received: from pandora.armlinux.org.uk (unknown
 [2001:4d48:ad52:32c8:5054:ff:fe00:142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 319dd089-c00e-46dc-a1ee-e0eb4d0a1950;
 Thu, 15 Jul 2021 16:53:22 +0000 (UTC)
Received: from shell.armlinux.org.uk
 ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:46188)
 by pandora.armlinux.org.uk with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <linux@armlinux.org.uk>)
 id 1m44bq-00015M-DY; Thu, 15 Jul 2021 17:53:14 +0100
Received: from linux by shell.armlinux.org.uk with local (Exim 4.92)
 (envelope-from <linux@shell.armlinux.org.uk>)
 id 1m44bl-0002LK-Cz; Thu, 15 Jul 2021 17:53:09 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
X-Inumbo-ID: 319dd089-c00e-46dc-a1ee-e0eb4d0a1950
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To:Content-Type:
	MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To:
	Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:
	Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:
	List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
	 bh=SHLau5Ake9xcwQGIQtYxnHJNJDrvOEPwwI40kAVcRog=; b=U8UTMSyF6jF6T0gR2j3D29bvs
	eItdcAl8yoYyPm0BOaqxfp0KAqwYLm3tCNGL3UOXkwf2YVG3YLDETqIWI2+TSILpWhKSi+ZfIepQo
	lLen0o6KgjL85hkzakJ1QZk21sjlzGaASbY+nCfE7vBnPME0Mzb+H5RRmAZ+ZNIKuXcRPERLyqXtq
	VdtZCLk1naymemWuZBuS7BxTMY7tagmEv9JEUS6/HzNAPZKSxBYrlmfrzjhaGexuK2It2kZa4r1/A
	CGDiaLgNp8Hmc8kCrs/WvG5KWvG0MHFhzYQbO2P7Gy0lVzLUmA2kl6R0xkg6NYiRgFN4tL0/sUnPU
	SpUuGxGOA==;
Date: Thu, 15 Jul 2021 17:53:09 +0100
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>
Subject: Re: [PATCH v1 00/16] .map_sg() error cleanup
Message-ID: <20210715165309.GO22278@shell.armlinux.org.uk>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
User-Agent: Mutt/1.10.1 (2018-07-13)
Sender: Russell King (Oracle) <linux@armlinux.org.uk>

On Thu, Jul 15, 2021 at 10:45:28AM -0600, Logan Gunthorpe wrote:
> Hi,
> 
> This series is spun out and expanded from my work to add P2PDMA support
> to DMA map operations[1].
> 
> The P2PDMA work requires distinguishing different error conditions in
> a map_sg operation. dma_map_sgtable() already allows for returning an
> error code (where as dma_map_sg() is only allowed to return zero)
> however, it currently only returns -EINVAL when a .map_sg() call returns
> zero.
> 
> This series cleans up all .map_sg() implementations to return appropriate
> error codes. After the cleanup, dma_map_sg() will still return zero,
> however dma_map_sgtable() will pass the error code from the .map_sg()
> call. Thanks go to Martn Oliveira for doing a lot of the cleanup of the
> obscure implementations.
> 
> The patch set is based off of v5.14-rc1 and a git repo can be found
> here:

Have all the callers for dma_map_sg() been updated to check for error
codes? If not, isn't that a pre-requisit to this patch set?

>From what I see in Linus' current tree, we still have cases today
where the return value of dma_map_sg() is compared with zero to
detect failure, so I think that needs fixing before we start changing
the dma_map_sg() implementation to return negative numbers.

I also notice that there are various places that don't check the
return value - and returning a negative number instead of zero may
well cause random other bits to be set in fields.

So, I think there's a fair amount of work to do in all the drivers
before this change can be considered.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:56:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:56:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156812.289397 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44eo-00032o-1i; Thu, 15 Jul 2021 16:56:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156812.289397; Thu, 15 Jul 2021 16:56:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44en-00032Y-Uz; Thu, 15 Jul 2021 16:56:17 +0000
Received: by outflank-mailman (input) for mailman id 156812;
 Thu, 15 Jul 2021 16:56:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=AIv0=MH=deltatee.com=logang@srs-us1.protection.inumbo.net>)
 id 1m44em-00031r-Bv
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:56:16 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9121f54c-e58d-11eb-890b-12813bfff9fa;
 Thu, 15 Jul 2021 16:56:15 +0000 (UTC)
Received: from s0106a84e3fe8c3f3.cg.shawcable.net ([24.64.144.200]
 helo=[192.168.0.10])
 by ale.deltatee.com with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.92) (envelope-from <logang@deltatee.com>)
 id 1m44eg-0002EB-Nd; Thu, 15 Jul 2021 10:56:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9121f54c-e58d-11eb-890b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:In-Reply-To:MIME-Version:Date:
	Message-ID:From:References:Cc:To:content-disposition;
	bh=zhc7pzLmZmjUsLXsFnMXewKeUUfUybMjLBdEKzxTgWI=; b=a4eD7Hw2j62J4jmrqG3qM9ka82
	5k5K5mLQB+hZHZqXGBpC8vAokNP0Ip4On3I09UBGqNxaWIRq2dmyriwR06pgFKl9jIT5xqRBf9vsD
	YwuOCb9uZhKtsGIHsKDWUmojgkYI2/2LwIaMUocRxIEBx7IUQ/6yxeiqqZGnSG4a85UbkDOZqICEa
	lG9jcrA6QbuiJkY03RA7uB1x8xSEwzPTD/kmMZHa3L73KtXI/2a8MW52t16HXK3n1ZJYijnMXJyfP
	O/wyAVK1kdSyrErsaIIRyaT5BgNIbq1xTAmZfgnfhUHzVRbyGsOS/vCEnIuD/1MU7ahfhlv+CI82Y
	BmE/J6uw==;
To: "Russell King (Oracle)" <linux@armlinux.org.uk>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
 linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
 linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
 linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
 iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
 xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
 Marek Szyprowski <m.szyprowski@samsung.com>,
 Robin Murphy <robin.murphy@arm.com>, Stephen Bates <sbates@raithlin.com>,
 Martin Oliveira <martin.oliveira@eideticom.com>
References: <20210715164544.6827-1-logang@deltatee.com>
 <20210715165309.GO22278@shell.armlinux.org.uk>
From: Logan Gunthorpe <logang@deltatee.com>
Message-ID: <aa33d2bf-8324-5647-b800-3a2e3e774e80@deltatee.com>
Date: Thu, 15 Jul 2021 10:56:09 -0600
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210715165309.GO22278@shell.armlinux.org.uk>
Content-Type: text/plain; charset=utf-8
Content-Language: en-CA
Content-Transfer-Encoding: 7bit
X-SA-Exim-Connect-IP: 24.64.144.200
X-SA-Exim-Rcpt-To: martin.oliveira@eideticom.com, sbates@raithlin.com, robin.murphy@arm.com, m.szyprowski@samsung.com, hch@lst.de, xen-devel@lists.xenproject.org, linux-parisc@vger.kernel.org, iommu@lists.linux-foundation.org, sparclinux@vger.kernel.org, linux-s390@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-mips@vger.kernel.org, linux-ia64@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org, linux@armlinux.org.uk
X-SA-Exim-Mail-From: logang@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.9 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	NICE_REPLY_A autolearn=ham autolearn_force=no version=3.4.2
Subject: Re: [PATCH v1 00/16] .map_sg() error cleanup
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)




On 2021-07-15 10:53 a.m., Russell King (Oracle) wrote:
> On Thu, Jul 15, 2021 at 10:45:28AM -0600, Logan Gunthorpe wrote:
>> Hi,
>>
>> This series is spun out and expanded from my work to add P2PDMA support
>> to DMA map operations[1].
>>
>> The P2PDMA work requires distinguishing different error conditions in
>> a map_sg operation. dma_map_sgtable() already allows for returning an
>> error code (where as dma_map_sg() is only allowed to return zero)
>> however, it currently only returns -EINVAL when a .map_sg() call returns
>> zero.
>>
>> This series cleans up all .map_sg() implementations to return appropriate
>> error codes. After the cleanup, dma_map_sg() will still return zero,
>> however dma_map_sgtable() will pass the error code from the .map_sg()
>> call. Thanks go to Martn Oliveira for doing a lot of the cleanup of the
>> obscure implementations.
>>
>> The patch set is based off of v5.14-rc1 and a git repo can be found
>> here:
> 
> Have all the callers for dma_map_sg() been updated to check for error
> codes? If not, isn't that a pre-requisit to this patch set?

No. Perhaps I wasn't clear enough: This series is changing only
impelemntations of .map_sg(). It does *not* change the return code of
dma_map_sg(). dma_map_sg() will continue to return zero on error for the
foreseeable future. The dma_map_sgtable() call already allows returning
error codes and it will pass the new error code through. This is what
will be used in the P2PDMA work.

Logan


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:56:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:56:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156831.289408 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44fT-0003sK-EK; Thu, 15 Jul 2021 16:56:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156831.289408; Thu, 15 Jul 2021 16:56:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44fT-0003s7-BC; Thu, 15 Jul 2021 16:56:59 +0000
Received: by outflank-mailman (input) for mailman id 156831;
 Thu, 15 Jul 2021 16:56:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ycjv=MH=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m44Vq-0008SS-PQ
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:47:02 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2d444544-e58c-11eb-8909-12813bfff9fa;
 Thu, 15 Jul 2021 16:46:18 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m44V4-0001yb-4h; Thu, 15 Jul 2021 10:46:15 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m44Uo-0001nK-5k; Thu, 15 Jul 2021 10:45:58 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2d444544-e58c-11eb-8909-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=vqT1KkJerIfgaTefMotO3Chy3j++S8LdBe9O7PbAuPI=; b=UhCSGYb9Hh594E6gCqsPd8BAVF
	pKFOgXIbxUfdPPVzF/cB5FTH/VcdadsNJpPOA8fb+86FYlUkje813rqTyXqNkfFOXrg4vHIBiEawd
	Ue5POEIn3rBPYfLExsc8Xja8ytUmXiEc8lXyB3lQzMnXCaAVoW1S122sN/Y4PRvsldT9zx4D31hmj
	kyU+tBa+DDzOnhd34ZpsrgCfP0Rr2jhoThfhiK+pV4GXkeLKZpvj2ObNCjHzjvTvru3hoWuWfadGb
	EjJv2OgYrXLxoQt2XfM+U4v/5ffh1bHMKHptxk8xY/3AhuOcIgRNd7QM1pWeQCGZ2tl+ugxArmRZZ
	JObh356A==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>
Date: Thu, 15 Jul 2021 10:45:33 -0600
Message-Id: <20210715164544.6827-6-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210715164544.6827-1-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v1 05/16] alpha: return error code from alpha_pci_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

pci_map_single_1() can fail for different reasons, but since the only
supported type of error return is DMA_MAPPING_ERROR, we coalesce those
errors into EINVAL.

ENOMEM is returned when no page tables can be allocated.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
---
 arch/alpha/kernel/pci_iommu.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index 35d7b3096d6e..72fc2465d13c 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -649,7 +649,9 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 		sg->dma_address
 		  = pci_map_single_1(pdev, SG_ENT_VIRT_ADDRESS(sg),
 				     sg->length, dac_allowed);
-		return sg->dma_address != DMA_MAPPING_ERROR;
+		if (sg->dma_address == DMA_MAPPING_ERROR)
+			return -EINVAL;
+		return 1;
 	}
 
 	start = sg;
@@ -685,8 +687,10 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 	if (out < end)
 		out->dma_length = 0;
 
-	if (out - start == 0)
+	if (out - start == 0) {
 		printk(KERN_WARNING "pci_map_sg failed: no entries?\n");
+		return -ENOMEM;
+	}
 	DBGA("pci_map_sg: %ld entries\n", out - start);
 
 	return out - start;
@@ -699,7 +703,7 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 	   entries.  Unmap them now.  */
 	if (out > start)
 		pci_unmap_sg(pdev, start, out - start, dir);
-	return 0;
+	return -ENOMEM;
 }
 
 /* Unmap a set of streaming mode DMA translations.  Again, cpu read
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 16:59:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 16:59:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156858.289419 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44hc-0004hY-SM; Thu, 15 Jul 2021 16:59:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156858.289419; Thu, 15 Jul 2021 16:59:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44hc-0004hR-Os; Thu, 15 Jul 2021 16:59:12 +0000
Received: by outflank-mailman (input) for mailman id 156858;
 Thu, 15 Jul 2021 16:59:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=sWNF=MH=oracle.com=boris.ostrovsky@srs-us1.protection.inumbo.net>)
 id 1m44hb-0004hL-Gm
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 16:59:11 +0000
Received: from mx0b-00069f02.pphosted.com (unknown [205.220.177.32])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 60e388f7-ea23-442c-ab40-82eccaf4bb81;
 Thu, 15 Jul 2021 16:59:10 +0000 (UTC)
Received: from pps.filterd (m0246632.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16FGudiS002755; Thu, 15 Jul 2021 16:59:06 GMT
Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79])
 by mx0b-00069f02.pphosted.com with ESMTP id 39t2tj2kc9-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Thu, 15 Jul 2021 16:59:06 +0000
Received: from pps.filterd (userp3020.oracle.com [127.0.0.1])
 by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16FGtjEK114458;
 Thu, 15 Jul 2021 16:59:05 GMT
Received: from nam10-mw2-obe.outbound.protection.outlook.com
 (mail-mw2nam10lp2108.outbound.protection.outlook.com [104.47.55.108])
 by userp3020.oracle.com with ESMTP id 39qnb6a5a3-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Thu, 15 Jul 2021 16:59:04 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com (2603:10b6:208:321::10)
 by MN2PR10MB4029.namprd10.prod.outlook.com (2603:10b6:208:186::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul
 2021 16:58:59 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0]) by BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0%8]) with mapi id 15.20.4331.021; Thu, 15 Jul 2021
 16:58:59 +0000
Received: from [10.74.100.129] (138.3.201.1) by
 SN4PR0501CA0033.namprd05.prod.outlook.com (2603:10b6:803:40::46) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.9 via Frontend
 Transport; Thu, 15 Jul 2021 16:58:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 60e388f7-ea23-442c-ab40-82eccaf4bb81
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2021-07-09;
 bh=PlO+aifXXEIa+z9v4xiUSYXOYqpLk/izVPxxiT30tas=;
 b=wr4PMlUADMX+pKNNeLS00LRJxeiFa9wtCCi94xqN1NfbZ/k1hzylUOOvPIncGDn70Ckz
 C3aCIPzsI9yMUUvfd9ZMkwO5ZoXFfhnPWdyHa+V9dAD44Ra8Kq+NIGKnhioX1SKBlf4F
 Raht9AI3sdtTaSWYMk/v91CHr5eJ8GbsMJuwgZ4aBilg96q/HOmavEe1pKKeRsBau07O
 9bRfczTRULdCaZOhsDPvzc8UqdljUpMxepZVYfRaUOj7hWr5WihQgM8Bap06iOMp23d8
 HESJXzYXSZLHo3t6T0tk/hV/Y7ZvkJYPpjC1SYGOZE6eueS8KVr4UJIuEuGBw+ABiIz/ 5g== 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2020-01-29;
 bh=PlO+aifXXEIa+z9v4xiUSYXOYqpLk/izVPxxiT30tas=;
 b=OZmhzVkJ/gp8jM+OSrb7h6PUPCGSGbyZIIQw+mRypFDR8skUkOuKhJ17GDA4Z/dguvhQ
 MtYelAIT5e7jAsOkLW3RxjDKULlpdR8qZtqzO6egFRdZZ+bbbxY0x24h9y7SPsRYTsed
 2T+xK+pYCn55eMwrp1GvLNoq5RNnQXkH93nyPGirvHD17EtxxnrpwgIvoKaXOTUjhauC
 tKtTotLjXuOqE/EiX1iwE/E+/JyFxKfYEq/tGE+ntMW/+h9cj6qFjgPh6QojSsZpqokG
 z/voMPAKRpQDP+McqhDH0TmMGc7SBaUKQ/rJD/kUGj+TBKu3C19g5q10nwL7/nqrn4k6 zA== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gg0RZaa7YGP/UlNzcolDVEdKn38h/DAbEyHS4agSBqEQVG7WoSpAcv+MiXeNJekqtXg+tXD05O8Bmz8xHIpPtIeL9YP+KZS1cJ82fMKcrRFioHlpRkNY5GLfcTS6qAJYAoQZDdk3HxyklsyXWGP0ul7Gzag/iB/Zx0H4aZBy7HBi6Mn7T38Dgtws9bIPE80Gpdq0pVqfckvBpOh5EgNLY8M6bJzBEwK6tXz1S1aNSIfNbvbyhuwMMQswXP1CEu88FAd6hB+P5AOgYEXy59PFz0FTOcU3RQ+HF7Xxg6hhVuB1XYCAWIqz9onuffraUWmXTp4Ed85qizbJs7C8fVaFEQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PlO+aifXXEIa+z9v4xiUSYXOYqpLk/izVPxxiT30tas=;
 b=odx+95pMtGjDELlV0HniQHCmErEKFqSWDua0lQojaRysPRqwdTckJCFteJzc6xX9rX4doa/6hz5o6t787680mwe6o1YDlWBSHFkCi1+lGHP8S6J5BHRiHWIuspLc+B84/iWXQm3lspK5Y0aXNnyfDK+Y866ZIuu0mjFs0YbvFLwYx2BjAQRsCHT8sS00fYsW2YEj237u2ROsWhmVlVIRQinPDIgIc0h/m8prcngBENwVaMAFx2/fFBxysL3otqJSRA3yyaJtsyYBVEpqaAUqsyGR48w10DELKTo7F0f7dNBXw3a9Gn/kwYz7UcLGImrReefS3r7QbIa5HJi3IND0Kw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PlO+aifXXEIa+z9v4xiUSYXOYqpLk/izVPxxiT30tas=;
 b=tf/FwZLwPbrRzNCeZtO2dx6K9wCekqwHUgwgB9x8HWnNPmgUJ49L4b5XBUwWANb3MYEPvLx8y61GLa5rIQorP7Rlk+faQS+GMbEkqKU6MJtr4X3L9Fulotq5GihNdrBbJJd6nXtyofAZCoArSIYpAJjy01MsL4tqCEpoEQKDyNU=
Authentication-Results: lst.de; dkim=none (message not signed)
 header.d=none;lst.de; dmarc=none action=none header.from=oracle.com;
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
To: Roman Skakun <rm.skakun@gmail.com>,
        Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Juergen Gross <jgross@suse.com>,
        Stefano Stabellini <sstabellini@kernel.org>,
        xen-devel@lists.xenproject.org, iommu@lists.linux-foundation.org,
        linux-kernel@vger.kernel.org,
        Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
        Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
        Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
        Roman Skakun <roman_skakun@epam.com>,
        Andrii Anisov
 <andrii_anisov@epam.com>,
        Christoph Hellwig <hch@lst.de>
References: <20210616154436.GA7619@lst.de>
 <20210622133414.132754-1-rm.skakun@gmail.com> <YO4si0to/XYximwM@fedora>
 <CADu_u-OMx6Pj4DQDoOsdh6aNAzYys-+R=o+OzHYtLm=nECgkyQ@mail.gmail.com>
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Message-ID: <fb262a14-a69c-030b-1f39-d924553ddbd2@oracle.com>
Date: Thu, 15 Jul 2021 12:58:53 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
In-Reply-To: <CADu_u-OMx6Pj4DQDoOsdh6aNAzYys-+R=o+OzHYtLm=nECgkyQ@mail.gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-US
X-ClientProxiedBy: SN4PR0501CA0033.namprd05.prod.outlook.com
 (2603:10b6:803:40::46) To BLAPR10MB5009.namprd10.prod.outlook.com
 (2603:10b6:208:321::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e0c6d445-d103-424f-cd70-08d947b1d6cd
X-MS-TrafficTypeDiagnostic: MN2PR10MB4029:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<MN2PR10MB402910554450C444A6F24A6B8A129@MN2PR10MB4029.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:854;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	qdnqgzTkhK55yUP3ToNYVOAxKmtGviRCmGuVPi0OZMqjQ8aLb5hq2RDOEz+gg20erxVl53NPHL61Do3wdxham6bas3MnwRmmXbhE8YG4JL2rvabY1Phsun6kXzvP7MRasfonZ+8W5xB0bUEaPAjrsFaI28Kq6ywLP9/dpU+0uEK1WZS9/5/X/2OYIZNQMvAAenjgIr6pfGxcZzWgtnIvG/ipucrHv6krvI4R3cmbe1dz9u/vukZGglHVrirhEfaoIAs437lhAsoyCo56Rbxjdojo/qx06UQyMXyYl4+ATS1j+Pc/R55P48j6FuPQZiVeyAnm0Fq0UG7bZiy5sD+1H2VjL0jsG3CneadgiuNK76n4kNDuHpiC+RvPce+f0Hm9dzcz56JPLLNFuMvTG5Fzaw78x+OvsNB1nj+5a8wlDS3lxzZvLAfYMuSHeLxBp5pRO/vowW3ul6MqJC4O3A+m4QJrrkFFPLt6/qlUlHbMHt8+BH0vKotwI3CYpR9rUC708gjZy8kZHcmIeS/imXaUz2CmfDFUpMiiXmzubjpmj/k60uJ7V6JVxlCCGgTctzkl4aiG+3R+TQvvYiBDAhXipAmALAeJ1s73UQyeSdDpLj4ZYyfyQhMKKTKgm1GXPvXYcguQCTzZ5z3Z+jAaTXugII5gq+cJN6QXTGlYMTFC1niEqkwWAQ9vM3u1NhTlgSOJtTzl6wM+qqYQ5SL8PbQ5YrB3tZEaeDcIum6KpYfPAyk=
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5009.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(376002)(396003)(39860400002)(136003)(366004)(86362001)(83380400001)(31696002)(4326008)(26005)(53546011)(66556008)(66476007)(478600001)(186003)(5660300002)(110136005)(54906003)(66946007)(31686004)(16576012)(2616005)(956004)(8676002)(316002)(44832011)(38100700002)(7416002)(6636002)(36756003)(2906002)(6666004)(6486002)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	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
 =?utf-8?Q?JsWBKspGTSZPzFgUJ/XDdB9Y4YypmU4chCYu3mf?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e0c6d445-d103-424f-cd70-08d947b1d6cd
X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5009.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:58:59.0082
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: n+/aIE9t+mfQQfHCoaVaQeITm4FACotAsQJkjFakxWUzmLcIEtlQgvY90vf8YXZiX4SxAJDNcY6cW27XtG912DTd8g9h798M01j2fqRQdxE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB4029
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10046 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 malwarescore=0
 spamscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 mlxscore=0
 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000
 definitions=main-2107150116
X-Proofpoint-GUID: bdsWZfvxQy0DFOdpS8eLfimtmJJWt2xt
X-Proofpoint-ORIG-GUID: bdsWZfvxQy0DFOdpS8eLfimtmJJWt2xt


On 7/15/21 3:39 AM, Roman Skakun wrote:
>> This looks like it wasn't picked up? Should it go in rc1?
> Hi, Konrad!
>
> This looks like an unambiguous bug, and should be in rc1.


Looks like you didn't copy Christoph which could be part of the problem. Adding him.


-boris



>
> Cheers!
>
> ср, 14 июл. 2021 г. в 03:15, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>:
>> On Tue, Jun 22, 2021 at 04:34:14PM +0300, Roman Skakun wrote:
>>> This commit is dedicated to fix incorrect conversion from
>>> cpu_addr to page address in cases when we get virtual
>>> address which allocated in the vmalloc range.
>>> As the result, virt_to_page() cannot convert this address
>>> properly and return incorrect page address.
>>>
>>> Need to detect such cases and obtains the page address using
>>> vmalloc_to_page() instead.
>>>
>>> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
>>> Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
>>> ---
>>> Hey!
>>> Thanks for suggestions, Christoph!
>>> I updated the patch according to your advice.
>>> But, I'm so surprised because nobody catches this problem
>>> in the common code before. It looks a bit strange as for me.
>> This looks like it wasn't picked up? Should it go in rc1?
>>>
>>>  kernel/dma/ops_helpers.c | 12 ++++++++++--
>>>  1 file changed, 10 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
>>> index 910ae69cae77..782728d8a393 100644
>>> --- a/kernel/dma/ops_helpers.c
>>> +++ b/kernel/dma/ops_helpers.c
>>> @@ -5,6 +5,14 @@
>>>   */
>>>  #include <linux/dma-map-ops.h>
>>>
>>> +static struct page *cpu_addr_to_page(void *cpu_addr)
>>> +{
>>> +     if (is_vmalloc_addr(cpu_addr))
>>> +             return vmalloc_to_page(cpu_addr);
>>> +     else
>>> +             return virt_to_page(cpu_addr);
>>> +}
>>> +
>>>  /*
>>>   * Create scatter-list for the already allocated DMA buffer.
>>>   */
>>> @@ -12,7 +20,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
>>>                void *cpu_addr, dma_addr_t dma_addr, size_t size,
>>>                unsigned long attrs)
>>>  {
>>> -     struct page *page = virt_to_page(cpu_addr);
>>> +     struct page *page = cpu_addr_to_page(cpu_addr);
>>>       int ret;
>>>
>>>       ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
>>> @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
>>>               return -ENXIO;
>>>
>>>       return remap_pfn_range(vma, vma->vm_start,
>>> -                     page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff,
>>> +                     page_to_pfn(cpu_addr_to_page(cpu_addr)) + vma->vm_pgoff,
>>>                       user_count << PAGE_SHIFT, vma->vm_page_prot);
>>>  #else
>>>       return -ENXIO;
>>> --
>>> 2.25.1
>>>
>
>


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:00:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:00:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156863.289430 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44ig-00061f-6U; Thu, 15 Jul 2021 17:00:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156863.289430; Thu, 15 Jul 2021 17:00:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44ig-00061Y-2s; Thu, 15 Jul 2021 17:00:18 +0000
Received: by outflank-mailman (input) for mailman id 156863;
 Thu, 15 Jul 2021 17:00:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aGUF=MH=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m44ie-00061M-5D
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:00:16 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1f6a7d42-e58e-11eb-890b-12813bfff9fa;
 Thu, 15 Jul 2021 17:00:14 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id D5DD667373; Thu, 15 Jul 2021 19:00:11 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1f6a7d42-e58e-11eb-890b-12813bfff9fa
Date: Thu, 15 Jul 2021 19:00:11 +0200
From: Christoph Hellwig <hch@lst.de>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Roman Skakun <rm.skakun@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org, iommu@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org,
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
	Roman Skakun <roman_skakun@epam.com>,
	Andrii Anisov <andrii_anisov@epam.com>,
	Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc
 addresses
Message-ID: <20210715170011.GA17324@lst.de>
References: <20210616154436.GA7619@lst.de> <20210622133414.132754-1-rm.skakun@gmail.com> <YO4si0to/XYximwM@fedora> <CADu_u-OMx6Pj4DQDoOsdh6aNAzYys-+R=o+OzHYtLm=nECgkyQ@mail.gmail.com> <fb262a14-a69c-030b-1f39-d924553ddbd2@oracle.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <fb262a14-a69c-030b-1f39-d924553ddbd2@oracle.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Thu, Jul 15, 2021 at 12:58:53PM -0400, Boris Ostrovsky wrote:
> 
> On 7/15/21 3:39 AM, Roman Skakun wrote:
> >> This looks like it wasn't picked up? Should it go in rc1?
> > Hi, Konrad!
> >
> > This looks like an unambiguous bug, and should be in rc1.
> 
> 
> Looks like you didn't copy Christoph which could be part of the problem. Adding him.

Can someone just send a clean patch that I can review and hopefully
apply?


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:16:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:16:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156873.289441 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44yQ-0007m6-I9; Thu, 15 Jul 2021 17:16:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156873.289441; Thu, 15 Jul 2021 17:16:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44yQ-0007lz-Ez; Thu, 15 Jul 2021 17:16:34 +0000
Received: by outflank-mailman (input) for mailman id 156873;
 Thu, 15 Jul 2021 17:16:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8Mdo=MH=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m44yO-0007lt-Tq
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:16:33 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6577a54c-e590-11eb-8913-12813bfff9fa;
 Thu, 15 Jul 2021 17:16:31 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626369384586458.80523704808957;
 Thu, 15 Jul 2021 10:16:24 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6577a54c-e590-11eb-8913-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626369388; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=kT1FUQbMAyjBrrRZKDq0VqRB7hidBIc7I5z3fWhzh/pxJPFDJTC8YoFD3gsNPOVj3Kki0FLI8AsJbXxA+TaMUOZ1dKutyMOfkwYpBLJLFKVZjczqpbPEOFrJ9dpDD1AwHjfWeaEUoR3mbDGNreRFeGk8Vc52FiOl3DxzzWsEG8Q=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626369388; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=+CjztJqjaNwdy9Jn/0TlZCNGinSY13yUWllKqGo2Prg=; 
	b=TjZWQgQ7BkEeaHgJDnszWKXAs1Wtj9vuj31FG1g3UhwMH82KQychEPh+uFSqdLijwmUe5zPUe/+HLE1tTvbfhtpQMzeP/RjE32maqTIF8/a6vga3dySv8kMby5g17Df4DhSGNQ4msAEhRQort0r3eda/b74s/WBTQx8B2aDa5PY=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626369388;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=To:Cc:References:From:Subject:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=+CjztJqjaNwdy9Jn/0TlZCNGinSY13yUWllKqGo2Prg=;
	b=bg9RwRdRWGzhV3bGzrG3Ul0Qa3OS+MJFp6nBZE9yKcp8t3ikvXus1X2Xx4ueF/Pn
	BMvU25J/E/vohOLm62N7dclzqOiYpsid2CtiAtuB8iLvCcKutAzNnYM7d8KsBqgmQr4
	AiBMWOqY0uIA5Cc70499KmD8A5X+NtW/yirlxIs8=
To: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, Jan Beulich <JBeulich@suse.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-3-dpsmith@apertussolutions.com>
 <1638ecbe-59a2-1ef1-f18e-dc63e1740168@citrix.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: Re: [PATCH v2 02/10] xsm: refactor xsm_ops handling
Message-ID: <4a156596-40fb-1526-0d65-edb092057ad3@apertussolutions.com>
Date: Thu, 15 Jul 2021 13:16:22 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <1638ecbe-59a2-1ef1-f18e-dc63e1740168@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

On 7/12/21 7:39 PM, Andrew Cooper wrote:
> On 12/07/2021 21:32, Daniel P. Smith wrote:
>> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
>> index ad3cddbf7d..a8805f514b 100644
>> --- a/xen/include/xsm/xsm.h
>> +++ b/xen/include/xsm/xsm.h
>> @@ -747,16 +747,14 @@ extern int xsm_dt_policy_init(void **policy_buffer, size_t *policy_size);
>>  extern bool has_xsm_magic(paddr_t);
>>  #endif
>>  
>> -extern int register_xsm(struct xsm_operations *ops);
>> -
>> -extern struct xsm_operations dummy_xsm_ops;
>>  extern void xsm_fixup_ops(struct xsm_operations *ops);
>>  
>>  #ifdef CONFIG_XSM_FLASK
>> -extern void flask_init(const void *policy_buffer, size_t policy_size);
>> +extern struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size);
>>  #else
>> -static inline void flask_init(const void *policy_buffer, size_t policy_size)
>> +static inline struct xsm_operations *flask_init(const void *policy_buffer, size_t policy_size)
>>  {
>> +    return NULL;
>>  }
>>  #endif
> 
> As you touch almost every current user of xsm_operations and introduce
> quite a few more, can I recommend taking the opportunity to shorten the
> name to struct xsm_ops.

Looks like Jan also agreed, so I will add this to the mix.

>> diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
>> index 01e52138a1..32e079d676 100644
>> --- a/xen/xsm/flask/flask_op.c
>> +++ b/xen/xsm/flask/flask_op.c
>> @@ -226,6 +226,7 @@ static int flask_security_sid(struct xen_flask_sid_context *arg)
>>  static int flask_disable(void)
>>  {
>>      static int flask_disabled = 0;
>> +    struct xsm_operations default_ops;
>>  
>>      if ( ss_initialized )
>>      {
>> @@ -244,7 +245,8 @@ static int flask_disable(void)
>>      flask_disabled = 1;
>>  
>>      /* Reset xsm_ops to the original module. */
>> -    xsm_ops = &dummy_xsm_ops;
>> +    xsm_fixup_ops(&default_ops);
>> +    xsm_ops = default_ops;
>>  
>>      return 0;
>>  }
> 
> These two hunks will disappear when patch 3 is reordered with respect to
> this one.
> 
> ... which is good because you've just pointed xsm_ops at a
> soon-to-be-out-of-scope local variable on the stack.
> 

As Jan has pointed out it is not a ref issue, but it was very bad of me
to leave the stack var uninitialized. Regardless as you pointed out,
this will be irrelevant with moving patch 3 ahead of this.

>> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
>> index f1a1217c98..a3a88aa8ed 100644
>> --- a/xen/xsm/flask/hooks.c
>> +++ b/xen/xsm/flask/hooks.c
>> @@ -1883,7 +1883,8 @@ static struct xsm_operations flask_ops = {
>>  #endif
>>  };
> 
> flask and silo ops should become:
> 
> static const struct xsm_ops __initconst {flask,silo}_ops = {
> 
> as they're neither modified, nor needed after init, following this change.
> 

After this and seeing Jan's comments, I am going to walk through this
again and see if there is more adjustments/cleanups I can do/

>>  
>> -void __init flask_init(const void *policy_buffer, size_t policy_size)
>> +struct xsm_operations __init *flask_init(const void *policy_buffer,
>> +					 size_t policy_size)
> 
> struct xsm_ops *__init flask_init(...)
> 
> Otherwise you've got the __init in the middle of the return type, and
> some compilers are more picky than others.

Ack

>> @@ -1923,6 +1921,9 @@ void __init flask_init(const void *policy_buffer, size_t policy_size)
>>          printk(XENLOG_INFO "Flask:  Starting in enforcing mode.\n");
>>      else
>>          printk(XENLOG_INFO "Flask:  Starting in permissive mode.\n");
>> +
>> +    return &flask_ops;
>> +
> 
> Stray newline.

Ack

>>  }
>>  
>>  /*
>> diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c
>> index fc2ca5cd2d..808350f122 100644
>> --- a/xen/xsm/silo.c
>> +++ b/xen/xsm/silo.c
>> @@ -112,12 +112,11 @@ static struct xsm_operations silo_xsm_ops = {
>>  #endif
>>  };
>>  
>> -void __init silo_init(void)
>> +struct xsm_operations __init *silo_init(void)
> 
> Same here as with flask.

Ack

>> diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
>> index 5eab21e1b1..7265f742e9 100644
>> --- a/xen/xsm/xsm_core.c
>> +++ b/xen/xsm/xsm_core.c
>> @@ -68,17 +76,10 @@ static int __init parse_xsm_param(const char *s)
>>  }
>>  custom_param("xsm", parse_xsm_param);
>>  
>> -static inline int verify(struct xsm_operations *ops)
>> -{
>> -    /* verify the security_operations structure exists */
>> -    if ( !ops )
>> -        return -EINVAL;
>> -    xsm_fixup_ops(ops);
>> -    return 0;
>> -}
>> -
>>  static int __init xsm_core_init(const void *policy_buffer, size_t policy_size)
>>  {
>> +	struct xsm_operations *mod_ops;
>> +
> 
> Hard tabs, and later in this function.  Also, how about just 'ops' for
> the local variable name?

Ack

>> @@ -113,6 +124,17 @@ static int __init xsm_core_init(const void *policy_buffer, size_t policy_size)
>>          break;
>>      }
>>  
>> +    /*
>> +     * This handles three cases,
>> +     *   - dummy policy module was selected
>> +     *   - a policy module  does not provide all handlers
> 
> Stray double space.

Ack

> ~Andrew
> 

v/r,
dps


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:17:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:17:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156878.289451 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44z0-0008Ps-Um; Thu, 15 Jul 2021 17:17:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156878.289451; Thu, 15 Jul 2021 17:17:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44z0-0008Pl-Rt; Thu, 15 Jul 2021 17:17:10 +0000
Received: by outflank-mailman (input) for mailman id 156878;
 Thu, 15 Jul 2021 17:17:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=PyhT=MH=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m44yz-0008Pb-Fv
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:17:09 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7bc28042-e590-11eb-8913-12813bfff9fa;
 Thu, 15 Jul 2021 17:17:08 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7bc28042-e590-11eb-8913-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626369428;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=rIDhdyO8WHsPmGPrZpjM1geJ1MS256ftgMCY4Mj7s/Q=;
  b=QR/aMUcPxz42grsYyvy/vA5/REf5zsqd/Ggzzb+u/3/EO7SEst/6YDh6
   xVIwM5DCYUPmZh/EG/nDtj7LMw/8Y+dUyQAmCBRQMer6T5bpjB7FtFAJZ
   cbLfw8ygw1HZ+RvepdUcItGmX/JkGoX70hvOfdaUsSEjxKmTIrBxqnH4o
   w=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: SyN415TcHg53nFCXJuUGXcyr64xL08XpHO7ZMfMZwFDn9iWcg07QYrvDOREzH5VYp527TQxdAD
 9spvRfAFhAyhEaqF7wRs/n3xQAZpVj+tlgPcvgCJzMfW7rTPlpCWjhLjXPbnhkJLvByUVeOixM
 CoH4VN+2+eNRYMAfHNNDWiSyhAAc43YKvm6qnykAlnNDMzbXtU/S6evZRo4HW1nFHtpiR6Pc+K
 bOB0LiZcEfCjOXtkbR/6Tx6kQs2O66RAMksLxB9N4Us0+1ULeghgSqfa54tGED3Umms78x8p/W
 l5Q=
X-SBRS: 5.1
X-MesageID: 48068661
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:jrAPyKOTUAreFcBcTjujsMiBIKoaSvp037BK7S1MoNJuEvBw9v
 re+MjzsCWftN9/Yh4dcLy7VpVoIkmskKKdg7NhXotKNTOO0AeVxelZhrcKqAeQeREWmNQ96U
 9hGZIOdeEZDzJB/LrHCN/TKade/DGFmprY+9s31x1WPGZXgzkL1XYDNu6ceHcGIjVuNN4CO7
 e3wNFInDakcWR/VLXAOpFUN9Kz3uEijfjdEGY7OyI=
X-IronPort-AV: E=Sophos;i="5.84,242,1620705600"; 
   d="scan'208";a="48068661"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=E04UA+cGTEK6rXdaA934QFSJKGariGokua3lid9EZHJTbSNSH/0KLPtXx250Y72AC3k6B5gKzkS92K6td00EbWU7t4HKRS4zLfpGsq2zUNFMM2izY0up/hicFzEVTHSc1iAu/R9zK3f66kAWdsCX49NiroZzFq7OZOf9DoYDNJq5HW0E1GPCBKvGKz2Qw56jVOHPatkgGFgevHRimBre8j/Ul/Fn+USU7zipihrs0Ae0Ptw+hPf6iq6x0NdLad8FnKUScwl5FPsZZwwGMEIqGSOXbYUCOZrmcNOsP50m5wLSPHV59QhPZGs/PWGrxcDAE0XT/2rZm3zVamnprDmG3w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rIDhdyO8WHsPmGPrZpjM1geJ1MS256ftgMCY4Mj7s/Q=;
 b=CIffT4mrILuwN7/OTos1i/2aKPWYWE2f75TX7awPPNMz5jeGJ/wh+DExLEh8jB2lxBywjentmxd3AOpakBPbxyS8NAa85akhlcOMuEHyrKEJAiaJ5IVsVyLIFyvVD7jI4+3YL3gv/7FCg37iNsY4C3iw4cWEvQBsEt6zt/YKWWQzwHv2Shb5aSZBOXsrRW8NVfU3XoVMYFx9ytDNkxZ18uXu9rGJdtLL2Qd8XNWdElirUu0NJ0W5UMgaN3S+NbSqhwDkZ1yUSHnECe8x3iZuLK1NpAy43tKahOL/FVBI5eAuD/pG1CAMGB3UiEaKc9TM7THgFY+NdugcthmbSgJIXQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rIDhdyO8WHsPmGPrZpjM1geJ1MS256ftgMCY4Mj7s/Q=;
 b=lTJMAkFVeWN2uLdItxh1y+aBKB9x6sEUP4GMfCqR86ViedW9hVRln6aIeZBMORxa2iK6AEWKLAj6+zRrtp8bQ5w/L94PBdDzwHXLfIzHQp4VhYtMkdsTkSGBfkljeZvmiPwDoWhLNQ18EgjWZ2p+s8Bn7Z+7PjqTMg4MMU5xZbo=
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, Ian Jackson <ian.jackson@citrix.com>
CC: George Dunlap <george.dunlap@citrix.com>, Stefano Stabellini
	<sstabellini@kernel.org>, Wei Liu <wl@xen.org>, Anthony Perard
	<anthony.perard@citrix.com>, Julien Grall <julien@xen.org>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: preparations for 4.15.1 and 4.13.4
Message-ID: <8324f959-924b-d196-149d-2fdad95da8fa@citrix.com>
Date: Thu, 15 Jul 2021 18:16:56 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0380.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18f::7) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2df8bdb5-1367-4428-2bc3-08d947b45d10
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5693:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5693934BAE35644362B4CC4EBA129@SJ0PR03MB5693.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 3yW1AcObh1cAUwPo78bUH4aLl1cKTG/lVP5sPfCza8Nq4HEfXswMw/VjXiwwc+evRiokOCcen44rwkQC1Zl08vQF/1QXNBUFI7+vr1VRpED/P4h2eDkwkpobCsin1QFWMqqDt+hiS0mx2EqLxkG7PVoH4h57ZbKuNPksDQu4VEktaIqoTVdmID469KDapD+fdE9s/u9Qa8R6XMRBFwAoGu0kjiqbHtAoDUrXZyYU5RxbW7uDlfYI3iAUOWJ0Jx0qpEdEhREw7DWVs9spcraEmXrEaLQo7yVtHtPoFwDbysxNr2NKUP5cn1jZ3Kr/A9iCt1PVW4cWvxk32cbX9WtyHwvdI4/ejhJwtoVDLaTWxe4D++sXIVl/2Gm4ljGLJJYTNiHOpbSUC61g1XrJ3RbskSdOiu5tZ/S0SmozLQ6vpxVBQVzbNZTmQYNfxAdO5BGeflF0vESsV1LK8hwovQMiCSdWVoLVN3U5hYMXlQRjNvQ6iSp0IhrHDz4j6S2lBINtkd3yl0L75f9fkGofMHKLs0bk8vQ+PGXetPeklnndjrYZ9hQh3ZZJ6loQWGcXEhih9uA+IdRQIstd2G2XB5fN53BkzQ8Zl9oxvtnaj081HrI8esvWg1y4y4wm2xEtnkiYKHkbLqI0YYCdwyz1gq/TrqA4zFPUHZ6OOMkEHErW9HmScefPqwES/Kyic0bRcR28w15VuQw803UWu6RvMzpbetU31p+eCfu17hcaxnH66ng=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(366004)(136003)(396003)(376002)(6486002)(8936002)(5660300002)(38100700002)(8676002)(4326008)(316002)(31696002)(16576012)(110136005)(86362001)(31686004)(54906003)(2616005)(956004)(4744005)(2906002)(186003)(478600001)(83380400001)(6636002)(36756003)(26005)(66946007)(66556008)(66476007)(53546011)(6666004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?iTNXGJlXb7CzUm9ToxnccQp/V9AyLe51qoXRYBx?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 2df8bdb5-1367-4428-2bc3-08d947b45d10
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 17:17:03.3480
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: mpjhRKTXMM8xnkqJOuySFNzwNveuw+6I+0eunXsi5z3Lx8ZVfuPVCdGcfzMJi07eevE4piYmvc4s4yGc5gdGChhA7HvPB4ROQ5Ytj74xIkM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5693
X-OriginatorOrg: citrix.com

On 15/07/2021 08:58, Jan Beulich wrote:
> Beyond this I'd like the following to be considered:
>
> 6409210a5f51 libxencall: osdep_hypercall() should return long
> bef64f2c0019 libxencall: introduce variant of xencall2() returning long
> 01a2d001dea2 libxencall: Bump SONAME following new functionality
> 6f02d1ea4a10 libxc: use multicall for memory-op on Linux (and Solaris)
>
> If those are to be taken (which means in particular if the question of
> the .so versioning can be properly sorted),
>
> 198a2bc6f149 x86/HVM: wire up multicalls

We can backport changes in SONAME safely so long as:

1) We declare VERS_1.2 to be fixed and released.=C2=A0 This means that we
bump to 1.3 for the next change, even if it is ahead of Xen 4.16 being
release, and

2) *All* ABI changes up to VERS_1.2 are backported.


The ABI called VERS_1.2 must be identical on all older branches to avoid
binary problems when rebuilding a package against old-xen+updates, and
then updating to a newer Xen.

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:17:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:17:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156883.289463 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44zP-0000Y8-7l; Thu, 15 Jul 2021 17:17:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156883.289463; Thu, 15 Jul 2021 17:17:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m44zP-0000Y1-3t; Thu, 15 Jul 2021 17:17:35 +0000
Received: by outflank-mailman (input) for mailman id 156883;
 Thu, 15 Jul 2021 17:17:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8Mdo=MH=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m44zN-0000MA-KV
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:17:33 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6f790ba9-5c84-4ce6-ac8c-6ee106c366d0;
 Thu, 15 Jul 2021 17:17:31 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626369448562996.1822807387987;
 Thu, 15 Jul 2021 10:17:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6f790ba9-5c84-4ce6-ac8c-6ee106c366d0
ARC-Seal: i=1; a=rsa-sha256; t=1626369450; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=n6nO8Rm4kgRZf/K6JU/RxWJYs/9T4hA5ikkbT7HrkpdKp7t+LsIM4HlbHI8/4I51JOwKFt4L5PpaupPDPIbQAqmkRLJ1cbgEuD/c4vPIXTYeksMl3LkVG7SuzBriRDMZwQ/pvelURrh3fnsnYsk3gEnuVNss090eYX4t2iJ/p5w=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626369450; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=P00peDQKF1/JWeYwaOiCjhKhOHnaRHQkn2dxMd+fkWI=; 
	b=g3WPRMzY5weDIPsI19rpXkMBVFOW7TS8URed23BpXtsTZOi1oe4kWMeccNVa6njT9ZsaaYDAOhb35VZHXGQMHFsSLjGV6AJHCl560FWH/JP7JsFo4GB05TaetaXCi1E7LUldSXlxnHAIkMSA1tb0OoedWG8gJfg9Z7qoliZN+aI=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626369450;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=Subject:To:Cc:References:From:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=P00peDQKF1/JWeYwaOiCjhKhOHnaRHQkn2dxMd+fkWI=;
	b=jd5mKMs6eBnHbpw4DUfl4bdCDlhHQG+scOfPazSXiPBgoJhtiwx6j7rlFDor/ZV6
	j9wvjpBlIw2mu5x71z3reRtHZbCWNEk3jW9ifSZ8fdlfKO8ofI2DDZ2UqQSTLNm0i1G
	R+qsyYszf5sbwVoRFv7av5/hgt9yeUzmu3VLmGgo=
Subject: Re: [PATCH v2 03/10] xsm: remove the ability to disable flask
To: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-4-dpsmith@apertussolutions.com>
 <d7b3baaf-15b2-d991-a380-9524ad37a118@citrix.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Message-ID: <9b0167fe-39a7-378b-d080-c14c2da0aaa4@apertussolutions.com>
Date: Thu, 15 Jul 2021 13:17:27 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <d7b3baaf-15b2-d991-a380-9524ad37a118@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

On 7/12/21 7:22 PM, Andrew Cooper wrote:
> On 12/07/2021 21:32, Daniel P. Smith wrote:
>> The flask XSM module provided the ability to switch from flask back to
>> the dummy XSM module during runtime. With this removal the only way to
>> switch between XSM modules is at boot time.
>>
>> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
> 
> This patch wants reordering ahead of "xsm: refactor xsm_ops handling"
> which will reduce the churn in that patch.

Ack

> In addition, you want:
> 
> diff --git a/xen/include/public/xsm/flask_op.h
> b/xen/include/public/xsm/flask_op.h
> index 16af7bc22f75..b41dd6dac894 100644
> --- a/xen/include/public/xsm/flask_op.h
> +++ b/xen/include/public/xsm/flask_op.h
> @@ -188,7 +188,7 @@ struct xen_flask_op {
>  #define FLASK_SETBOOL           12
>  #define FLASK_COMMITBOOLS       13
>  #define FLASK_MLS               14
> -#define FLASK_DISABLE           15
> +#define FLASK_DISABLE           15 /* No longer implemented */
>  #define FLASK_GETAVC_THRESHOLD  16
>  #define FLASK_SETAVC_THRESHOLD  17
>  #define FLASK_AVC_HASHSTATS     18
> 
> to match the removal of FLASK_USER in c/s 559f439bfa3bf

Ack



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:19:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:19:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156889.289473 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4516-0001IA-Hl; Thu, 15 Jul 2021 17:19:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156889.289473; Thu, 15 Jul 2021 17:19:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4516-0001I1-Eu; Thu, 15 Jul 2021 17:19:20 +0000
Received: by outflank-mailman (input) for mailman id 156889;
 Thu, 15 Jul 2021 17:19:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8Mdo=MH=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m4514-0001Hn-IB
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:19:18 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c8b6ed52-e590-11eb-8913-12813bfff9fa;
 Thu, 15 Jul 2021 17:19:17 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626369554200223.28140521744217;
 Thu, 15 Jul 2021 10:19:14 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c8b6ed52-e590-11eb-8913-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1626369556; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=N8h6ciZg+sTV5DX3SXHN1Md+XrQsgQ/YBkI2/MEFA6dQQt8/2UYq6uOX2lr7nQ6UI1+AOlaUtZa9PJJndkFZWlAoxxGD0EQ30ExxSm2JAFLFYcV9gegcmdAy9ZADl81fzrsgZi76ypw2uDO4RD3G0KQAF7fA6N60aJ3eGT7O5bk=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626369556; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=fVo1nJ1YvKuJd/IrDlltGXYELoZuSAcfurvGDx+e6Do=; 
	b=mJ4rpb6gOFpDGFqQM8HySzSlTNx5HJQfwi+LdelrnhzTLApJqQyeZ5R1L7QiR044AoMYC+HC0qkkvb+NoSX4JaHCRDSG7c+DbzBTGPv1vR4VkygO0pmHaPXW09/YxubgeAW+MJNCiWda5s9Jmsqj+c8l1VdxiP3dtctsUKDQ4ts=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626369556;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=Subject:To:Cc:References:From:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=fVo1nJ1YvKuJd/IrDlltGXYELoZuSAcfurvGDx+e6Do=;
	b=LP+hbbe7q05VK+79zajOeRpCBlR9/EgfrcjEceIzijGXLDcqsTUuh5rOxWe4M60V
	jFAZLHNnkjoyKh4XO7QUkaktruZaKlzTHlGdXmyMYLWJorZYrH4QOHo2oJTXBP2KO8F
	zlpb5UaJ9heR7DTSEnieCihYtlw1ENud5JImJDQE=
Subject: Re: [PATCH v2 03/10] xsm: remove the ability to disable flask
To: Jan Beulich <jbeulich@suse.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-4-dpsmith@apertussolutions.com>
 <c938e8fc-e0c7-412b-2285-0ec503f6828c@suse.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Message-ID: <ae56c4b4-2f1c-ec9a-b022-30d41f841aee@apertussolutions.com>
Date: Thu, 15 Jul 2021 13:19:13 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <c938e8fc-e0c7-412b-2285-0ec503f6828c@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ZohoMailClient: External

On 7/14/21 11:58 AM, Jan Beulich wrote:
> On 12.07.2021 22:32, Daniel P. Smith wrote:
>> The flask XSM module provided the ability to switch from flask back to
>> the dummy XSM module during runtime. With this removal the only way to
>> switch between XSM modules is at boot time.
>>
>> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
> 
> Can you please add a statement as to why you/we want this, perhaps
> helping clarify why apparently you think no-one is making use of
> this?

Yes, I can expand more on the why.

v/r
dps



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:20:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:20:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156896.289485 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m451x-0002ie-Rn; Thu, 15 Jul 2021 17:20:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156896.289485; Thu, 15 Jul 2021 17:20:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m451x-0002iX-Ob; Thu, 15 Jul 2021 17:20:13 +0000
Received: by outflank-mailman (input) for mailman id 156896;
 Thu, 15 Jul 2021 17:20:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8Mdo=MH=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m451w-0002i6-HU
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:20:12 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 98aee7e1-bb9c-49bf-b60a-1e70c2e353cb;
 Thu, 15 Jul 2021 17:20:11 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626369608504927.7990916487273;
 Thu, 15 Jul 2021 10:20:08 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 98aee7e1-bb9c-49bf-b60a-1e70c2e353cb
ARC-Seal: i=1; a=rsa-sha256; t=1626369610; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=aIbahkPSJsu/3BbAwxBPDQSrCj9Rqtc3Gx4NqLzS1CI3uuxdCWrHW5+bYitsKZUt0DDvFboG/HreGG5Jh20+EaYDHFvxzndWgvrPEkC0BIp/F+X7AVgqXQdBh2Luf70iFry16uv0/aJSJTLTDTIvA7T683Tct9VlnoYx9RyCNyc=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626369610; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=GvfA/TmdesAxG38D5yZx/h99NwUqJPeF51Fjnjvl2Tw=; 
	b=eEtqsdtQ9g4nv3Wto0Csf4qziLx2bd/Siy/gLhcUvGqgIQw94eKiqi1iIpuyPUBFPUsakZ3E3iwr7AR9bli3q9OCr0xdVtAMHQdnPVlD4j4SWAQcQrsBjRFBR3JFxOFgFoKOdaMYiQ33+PP9+p++/H/WVWlc+yiAT40B0Otr638=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626369610;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=Subject:To:Cc:References:From:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=GvfA/TmdesAxG38D5yZx/h99NwUqJPeF51Fjnjvl2Tw=;
	b=WPw5IHwN6DjNQlIkYVcFh142bP+I6fQpYvVa239xQypV8xSvf+ABTR6jilQnEGWV
	ColWBmnyq/GHy4OCbWP2mH9SBCi2H1v89qGly4IpiE45/FUVcjmcS+9TA9+y4p+0Pae
	VhUGHkP2jr/1MRy4DzxuwxqFzhXXwG2Iu90ipni0=
Subject: Re: [PATCH v2 04/10] xsm: convert xsm_ops hook calls to alternative
 call
To: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-5-dpsmith@apertussolutions.com>
 <be7899b7-aa4b-91f5-76ff-416f25f16d68@citrix.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Message-ID: <867c9355-5790-b93f-86eb-16f7997f0179@apertussolutions.com>
Date: Thu, 15 Jul 2021 13:20:06 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <be7899b7-aa4b-91f5-76ff-416f25f16d68@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ZohoMailClient: External

On 7/12/21 7:44 PM, Andrew Cooper wrote:
> On 12/07/2021 21:32, Daniel P. Smith wrote:
>> To reduce retpolines convert all the pointer function calls of the
>> xsm_ops hooks over to the alternative_call infrastructure.
>>
>> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
>> ---
>>  xen/include/xsm/xsm.h | 195 +++++++++++++++++++++---------------------
>>  1 file changed, 99 insertions(+), 96 deletions(-)
>>
>> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
>> index a8805f514b..a39b5dc42f 100644
>> --- a/xen/include/xsm/xsm.h
>> +++ b/xen/include/xsm/xsm.h
>> @@ -15,6 +15,9 @@
>>  #ifndef __XSM_H__
>>  #define __XSM_H__
>>  
>> +#ifdef CONFIG_XSM
>> +#include <xen/alternative-call.h>
>> +#endif
> 
> This guard needs dropping to fix the build on ARM.

Ack

> Otherwise, Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
> 

v/r,
dps


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 17:26:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 17:26:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156904.289495 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m457t-00040A-IC; Thu, 15 Jul 2021 17:26:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156904.289495; Thu, 15 Jul 2021 17:26:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m457t-000403-FA; Thu, 15 Jul 2021 17:26:21 +0000
Received: by outflank-mailman (input) for mailman id 156904;
 Thu, 15 Jul 2021 17:26:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8Mdo=MH=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m457s-0003zx-Mv
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 17:26:20 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 564e3bd6-e9ee-4f81-8780-6921fb77db0a;
 Thu, 15 Jul 2021 17:26:20 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1626369973572796.1080043018195;
 Thu, 15 Jul 2021 10:26:13 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 564e3bd6-e9ee-4f81-8780-6921fb77db0a
ARC-Seal: i=1; a=rsa-sha256; t=1626369975; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=Zn/cGNcOmYvNoo3nvVb6T+2VACJbZzPUVPbEH+ZZqy7aqxr6ivJbvnPw2/MoCJxusbtvefoQA3e6B7dzRk/5LeXhnAr67c2nab5WEP7GlbUVHa5p7M98h9KZ1lnqTU1kqgSy7oPz2VVZ+kQGsr64bm2d9rLMQBDhSpa38tA6z9A=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1626369975; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=JVpGjzj3fyjoadNUUFi41JXu2J8XOWUUt6Uz8ynu66U=; 
	b=KQ4umMyhy3UQWKnkUKCO1Zhd7aAOuhqpVlz6vc79GaLSgxysJklk1SY+ENnuFP60Yw7/Ryw1fUjMVxEgrDOXAWeZzqvXRh6FMZD1OE13EF0abr8KXLFUPJoKTlyDOa4tZ9AIFf6DyNxpjsmHX1T2fXWOPyce4r07tkOXdiGkdTY=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1626369975;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=Subject:To:Cc:References:From:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=JVpGjzj3fyjoadNUUFi41JXu2J8XOWUUt6Uz8ynu66U=;
	b=J/U6AolvhoI5qRDYYSp5eHFU9v2etaU5riC1ceUI+R8YMRXjHc5Q/Piit+YMZvoq
	IKAEbnQNZMkfGVEby+KpkdocI207ZAaLcdtfYV/cjPcTRV4woN6A8SrWHlGUY6LuoNL
	iKyJl35cnGYe4Cey/AjSgh+sDocyuWXP5e18DrYQ=
Subject: Re: [PATCH v2 07/10] xsm: drop generic event channel labeling
To: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xenproject.org
Cc: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
 <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-8-dpsmith@apertussolutions.com>
 <223bef6d-dc64-8353-af8c-357637b88f4b@citrix.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Message-ID: <fa31e916-82b6-f8fa-9410-e48864be760b@apertussolutions.com>
Date: Thu, 15 Jul 2021 13:26:11 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <223bef6d-dc64-8353-af8c-357637b88f4b@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ZohoMailClient: External

On 7/12/21 7:52 PM, Andrew Cooper wrote:
> On 12/07/2021 21:32, Daniel P. Smith wrote:
>> The generic event channel labeling has not been used by any XSM module since
>> its introduction. This commit removes the capability leaving FLASK labeling
>> field always present. In the future if a new XSM module needs to have its own
>> channel label, this or a new form can be introduced.
> 
> You're missing a SoB line.

Apologies, i was originally going to squash this but then decided it
probably served to be kept as a standalone commit. Will get the SoB added.

> Also, this too would benefit from being reordered higher than patch 6,
> to reduce the churn there.

Ack

v/r,
dps


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 18:17:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 18:17:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156912.289513 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m45vL-0001pz-Gv; Thu, 15 Jul 2021 18:17:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156912.289513; Thu, 15 Jul 2021 18:17:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m45vL-0001ps-E0; Thu, 15 Jul 2021 18:17:27 +0000
Received: by outflank-mailman (input) for mailman id 156912;
 Thu, 15 Jul 2021 18:17:26 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m45vK-0001pg-IU; Thu, 15 Jul 2021 18:17:26 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m45vK-0002X6-8X; Thu, 15 Jul 2021 18:17:26 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m45vK-0005kM-2F; Thu, 15 Jul 2021 18:17:26 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m45vK-00062g-1k; Thu, 15 Jul 2021 18:17:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=D0Vya73NTXhjGou83RBAuP8wTDEqNghbFhJ9sMCoAUs=; b=zcKTQJ40AgWssbhb7d1CESVQGl
	F97TB/76w3AK3qVTvbgOXYz0r2lYPmyPtYndNo9vv13x/iHZ3K82mZ2Mz6ut5/et5Sk/euiQ31ytA
	ud1wVZ6Y2Nnd8YHHflHNTXOLhBRy1snS7jEw3drrgL+mjkBQXWwpJqSkm67vlTNUQyDE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-xl-qemuu-ovmf-amd64
Message-Id: <E1m45vK-00062g-1k@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 18:17:26 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-xl-qemuu-ovmf-amd64
testid debian-hvm-install

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163724/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-ovmf-amd64.debian-hvm-install.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-ovmf-amd64.debian-hvm-install --summary-out=tmp/163724.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-xl-qemuu-ovmf-amd64 debian-hvm-install
Searching for failure / basis pass:
 163694 fail [host=chardonnay0] / 163321 [host=huxelrebe1] 163311 [host=fiano0] 163303 [host=huxelrebe0] 163299 [host=albana0] 163292 ok.
Failure / basis pass flights: 163694 / 163292
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1-1f966c7c11bbe77f3de5f50911de7c3a74594bfe git://xenbits.xen.org/osstest/seabios.git#54082c81d96028ba8c76fbe6784085cf1df76b20-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#74d044d51b19bb697eac5c3deafa140f6afafec8-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
>From git://cache:9419/git://git.qemu.org/qemu
   f665574ac5..438951e883  master     -> origin/master
   438951e883..d4127349e3  staging    -> origin/staging
Loaded 34516 nodes in revision graph
Searching for test results:
 163228 [host=elbling1]
 163235 [host=elbling0]
 163276 [host=fiano1]
 163292 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163299 [host=albana0]
 163303 [host=huxelrebe0]
 163311 [host=fiano0]
 163321 [host=huxelrebe1]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163545 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163577 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163600 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163621 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163642 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 eca73713358f7abb18f15c026ff4267b51746992 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163663 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163677 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163689 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163692 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163693 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163695 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 5588ebcfca774477cf823949e5703b0ac48818cc
 163696 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163697 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 5588ebcfca774477cf823949e5703b0ac48818cc
 163698 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163700 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 ad76d87d65e1fd2ec3b08699d6dcfb0d2a9441c1
 163701 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8d6cb100731c4d28535adbf2a3c2d1f29be3fef4 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163702 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163703 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163705 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163707 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163708 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163713 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163716 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163694 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163718 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163721 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163722 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163724 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163720 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
Searching for interesting versions
 Result found: flight 163292 (pass), for basis pass
 Result found: flight 163694 (fail), for basis failure
 Repro found: flight 163720 (pass), for basis pass
 Repro found: flight 163721 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163708 (pass), for last pass
 Result found: flight 163713 (fail), for first failure
 Repro found: flight 163716 (pass), for last pass
 Repro found: flight 163718 (fail), for first failure
 Repro found: flight 163722 (pass), for last pass
 Repro found: flight 163724 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163724/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-ovmf-amd64.debian-hvm-install.{dot,ps,png,html,svg}.
----------------------------------------
163724: tolerable ALL FAIL

flight 163724 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163724/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail baseline untested


jobs:
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 19:33:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 19:33:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156921.289530 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m476x-0002bQ-8K; Thu, 15 Jul 2021 19:33:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156921.289530; Thu, 15 Jul 2021 19:33:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m476x-0002bJ-54; Thu, 15 Jul 2021 19:33:31 +0000
Received: by outflank-mailman (input) for mailman id 156921;
 Thu, 15 Jul 2021 19:33:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=PyhT=MH=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m476v-0002bD-D5
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 19:33:29 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1e57cf80-85dc-4e15-8755-925facf9102d;
 Thu, 15 Jul 2021 19:33:28 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1e57cf80-85dc-4e15-8755-925facf9102d
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626377608;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=9rFNWFlj9QCaAFA4QvcqA9PtUhlyxU/r8Wn33ovdGGg=;
  b=DXouvCWOh10Y48Gw7Yn99nTy7srwWCRfzfkzquMu7Tzl8JiZeb2iyYQ0
   rQ1x4f3nhWZ/pzgVAWmx07wShc0J4D10boWwbXteJZygtwcE3j5if4fwT
   5xyk5zBukUqLu8MzGi4WnJSohJU6MPW9i9PUhDQYrX+b6g96EjEE+uA8S
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: vZn8hqhl/E9QGHRMgNeuP80zw3rvn79xR731YzRmJ3seh0e+RfLPDOPfM6Omhki0fwVd3hCNNc
 /XqpnPyUg9M56ZVX77kWZ4vxWOVbyJDJtaVSRSTnnTamOooL8mdh+exA5OdnsNrt0RmzIlH4iI
 9M7LOffOsXxE/gCV1zXv73bCpsZRD0FyFVukCj0N2QiNQJMKVCft5v+WWSPuYZCyx4bJg5B0E2
 H4P3CRIrtVdn+63yeGrk7c+2xXpCN0WWpHoxwbBSVxaBOaj4eXEy/hrkYW8xilunsB/WRCazAf
 DTo=
X-SBRS: 5.1
X-MesageID: 48440665
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:mkAsDaELqXqoqCcSpLqELMeALOsnbusQ8zAXPiBKJCC9E/bo8v
 xG+c5w6faaslkssR0b9+xoW5PwI080l6QU3WB5B97LMDUO0FHCEGgI1/qA/9SPIUzDHu4279
 YbT0B9YueAcGSTW6zBkXWF+9VL+qj5zEix792uq0uE1WtRGtldBwESMHf9LmRGADNoKLAeD5
 Sm6s9Ot1ObCA8qhpTSPAhiYwDbzee77a7bXQ==
X-IronPort-AV: E=Sophos;i="5.84,243,1620705600"; 
   d="scan'208";a="48440665"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=j21eh2TZpxqOzNF137ZqjS+msuYfDLDSiVCyI0qbBeWXcaUS1YyxPuogsdfUTnRFldG3HbRysJgwevMdtPX7yU+ZDVsqXhT0jseBJsvAsvtZBOZdRYmfCCjXIUmA2IGesyglCdt4vPdZioDj3BEs+OUKzHb0DCE4dGQwInZgRIR716vUVXYqGvTNBF55VVWARs59gYLNdOGCLn3hsZt7fUzZucsEctvcPSgV3HQm71wSa62Gzv5bqdV+ELMuZoqA10DsLUCF3/Q1JT9LkH9CS1NCKtFgsOCyG6pwF4zCTRgs0F+bTquPLhcXf40AG3vU9T0BiALIFg7sQQgRwohtfw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Pw9MWLCvrlHTL+avR4APXUKKGaKcOwj4dGl7QwaOYVI=;
 b=n8M+PXlMJD967tgqYAsprnuloOhE3oelwfWfpq/mLfC0AS3Ov81yE8GpvyYJj73BnMObw22qxOx9BVnoxWj5dLE6xrs/Gbn/Vc/0RCVgPhgyB/qO/rxF60n6Up7UBDigu0wSyLEgLAp5/HscgGhRhHyoYRre/AqRIGlYF4PXlkJo5HgUTvX4GiTgdwIWbPsQEbjBEGfNXuMkAKlmjWoWYjONyzug/5ZTfn0ZmU8sLdo7lvNw85kSnHcny/7D23gx4myWiHcFFrZvffgrrPGoVr1iqjOBtHg5eP0O3dPKO1TNjLmApq8mCpmOmWdsIBPcjV0KTDDkoOpy4rPfVTz5pQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Pw9MWLCvrlHTL+avR4APXUKKGaKcOwj4dGl7QwaOYVI=;
 b=g7kvaYAPLq/8+Wtrr0sFACi1/jluVnLbrUg94fXQlzyugsWSH1cuN33bXKfDNWuvIn8QXtqc58Guc3ELnro2gbWRfCM7lqV3xWOpUOjd6+JTmCGRKCfni4N9xzZYOqVOh6oq26dXaIir1e9nzX2O9nSjmnmS/fzXUKPQch6Q0Gk=
To: Bobby Eshleman <bobby.eshleman@gmail.com>,
	<xen-devel@lists.xenproject.org>
CC: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
	<julien@xen.org>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, "George
 Dunlap" <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, "Jan
 Beulich" <jbeulich@suse.com>, Wei Liu <wl@xen.org>, Elena Ufimtseva
	<elena.ufimtseva@oracle.com>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>, Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian
	<kevin.tian@intel.com>
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v2 0/4] Remove unconditional arch dependency on
 asm/debugger.h
Message-ID: <cda514c2-bc6a-ee18-3de8-706c705bc902@citrix.com>
Date: Thu, 15 Jul 2021 20:33:14 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <cover.1626286772.git.bobby.eshleman@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0479.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1a8::16) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ca88646f-c509-478a-64b4-08d947c76803
X-MS-TrafficTypeDiagnostic: BYAPR03MB4613:
X-LD-Processed: 335836de-42ef-43a2-b145-348c2ee9ca5b,ExtAddr
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB4613855C76F9CDBAE959E697BA129@BYAPR03MB4613.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:151;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: dyd0eEW8JYM40SQFbAhmERxyOcEWcqKgQdRU69S7rWbrAkK85wTt5DJV97JTau2ICs6i8e81FM4+xSecV9zsl+RA1x0CAptdzoMibQjFNQKX1U8hQZw/Kw9MseupAuIaVTNBbCMJvYBYQAVel9Jla5vOQ8hEzxg3UKbWn0qnfHqnFOiYZ7JwkecwKwyFCaoBVBBfbkjxUyzIsP6V5FGD+QE7kcjgKlzp1LVVER3nolKJE4LD99CCSTl6weXsBAZ+hsI75rVQpizBbPjI+/UEoETNbDMNT3DL8yopcIVP8+g2TSYvlYkexZcjs6HZimeBwnOnOZGu6Z+rGQaegQ1FjbJZK9KU40/1/dFTvwbV1tcjUnFjiEM7n/ICZkzcbDymno6qETKJaDWqgj6BSxTZ/17zEeQRbiuffK2ZNm4ZQ8A8Urr/1KwF5p26m9V2NAt29dQtlSYiAC4cfn6EJq6AytmipmrxgHdAnMMefaXdzDJsMqjLUDDil6CSYgLXoSqmot9XTXyhCk+FxJFJV8NKCuxrBpF+xnF8peqLCfHLh2/R+y17hXDwZwbeF3tnxENfF2jrq5u1GM8nPCozeiDQuZYZEFW408lqmGdGKw5Vw0KACmoKKlBKDmDJs3f1+qfH7g4e7IObvDv7glVFDwBfrPKjIkhtV6/wrEAG9o8lOf6QcWj6egBq4yA6x/c60MfkYZ6OjDeSo6/Of2uizMSwvkRCiGacmXtt162MHWnD4zg=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(366004)(39860400002)(396003)(376002)(4326008)(316002)(186003)(8936002)(66946007)(26005)(66476007)(2906002)(16576012)(38100700002)(478600001)(54906003)(66556008)(36756003)(956004)(6486002)(31686004)(2616005)(8676002)(7416002)(31696002)(53546011)(86362001)(5660300002)(6666004)(83380400001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: ca88646f-c509-478a-64b4-08d947c76803
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 19:33:22.0751
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NXP50Sf1EIOTV9C3gZQ4V0bLbBtsWGsyd9nkrJ0OK0ppyYLXiUhcJszWwhw59W818s1YfJuW+gIRZkesZYRbLKb1gKPt4hK9nxHtsBWuzw0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4613
X-OriginatorOrg: citrix.com

On 14/07/2021 21:37, Bobby Eshleman wrote:
> Currently, any architecture wishing to use common/ is likely
> to be required to implement the functions found in "asm/debugger.h".
> Some architectures, however, do not have an actual use for these
> functions and so are forced to implement stubs.  This patch does the
> following:
>
> * Supplies common stubs if !CONFIG_CRASH_DEBUG for any architecture,
>   removing the need for all new architectures to have "asm/debugger.h".
> * Moves parts of the x86 implementation to "arch/x86/debugger.c".
> * Removes the ARM calls to its stubs.
> * Centralizes non-inlined x86 code conditionally compiled by CONFIG_CRASH=
_DEBUG
>   into arch/x86/debugger.c, which is now conditionally built for
>   CONFIG_CRASH_DEBUG via Kbuild (i.e., obj-$(CONFIG_CRASH_DEBUG)).
> * Tries to improve the x86 implementation by not inlining large
>   functions (but preserving inlining for those that seemed "small").

My replies from yesterday appear to have got lost.=C2=A0 Lets try it again.=
=C2=A0
Jan already picked up on the header file and commit change in patch 1.

However, patch 2 actually demonstrates a massive confusion which exists
in the x86 code.=C2=A0 We have two things called debugger, which are
unrelated, but mixed in asm-x86/debugger.h

There is gdbstub itself, which is an implementation of the gdb remote
debugging protocol over serial.=C2=A0 (I've never seen anyone use this in a
decade, and the logic isn't remotely SMP-safe at all, so I'm very
tempted to suggest ripping it out completely, but lets ignore that for now)=
.

Then we have debugger_trap_*() which claims to be arch-neutral wrappers
to a common debugging interface, which is only actually backed by
gdbstub in x86.=C2=A0 Both of these facilities are to do with debugging Xen
itself when Xen crashes.


Then there is gdbsx which is totally unrelated to the above, and is a
daemon in dom0 to translate the gdb remote protocol into a set of
hypercalls to perform on a guest under test.=C2=A0
domain_pause_for_debugger() is gdbsx functionality, and nothing to do
with Xen crashing.

On top of that, debugger_trap_entry() is actually a layering violation
merging the two.

Therefore, I recommend the following, in this order:

1) Patch emptying debugger_trap_entry() and expanding the contents
inline in do_int3/debug().=C2=A0 Both already have an if ( !guest_mode() )
path, so add an else if ( ... ) clause.=C2=A0 This supersedes patch 3.=C2=
=A0
(Also, fix the logic to have "const struct vcpu *curr =3D current" and
avoid the opencoded use of current lower down).

curr->arch.gdbsx_vcpu_event only being set for TRAP_int3 looks totally
bogus (the non-int3 paths cause gdbsx to miss notifications), but is
repeated all across Xen.=C2=A0 Keep the logic unchanged across the move, an=
d
leave fixing gdbsx bugs to some future point.

2) Patch (or patches) renaming arch/x86/debug.c to arch/x86/gdbsx.c, and
add a new include/asm-x86/gdbsx.h.

domain_pause_for_debugger() wants moving (prototype and definition)
which subsumes patch 4, and deletes domain.c's include of debugger.h

domctl.s ifdef'd gdbsx_guest_mem_io() wants moving too, as it has one
caller, and is the sole caller of dbg_rw_mem().=C2=A0 The two functions
likely want merging so we don't just have a wrapper making trivial API
change.=C2=A0 This will also require some header file renames.

With this done, there is now a properly split between the
actually-CONFIG_GDBSX stuff and the actually-CONFIG_DEBUG_CRASH stuff.

3) What is currently patch 1 wants to be next, taking with it the header
file rename from patch 2.

4) Finally, the remanent of patch 2.=C2=A0 The CONFIG_CRASH_DEBUG
implementation is now just the gdbstub call in _fatal(), so I don't
think a new debugger.c file is necessary.


Hopefully this all makes sense.

~Andrew



From xen-devel-bounces@lists.xenproject.org Thu Jul 15 20:49:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 20:49:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156928.289541 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m48IK-0002yX-Vs; Thu, 15 Jul 2021 20:49:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156928.289541; Thu, 15 Jul 2021 20:49:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m48IK-0002yQ-St; Thu, 15 Jul 2021 20:49:20 +0000
Received: by outflank-mailman (input) for mailman id 156928;
 Thu, 15 Jul 2021 20:49:20 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m48IK-0002yG-4L; Thu, 15 Jul 2021 20:49:20 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m48IJ-000584-RT; Thu, 15 Jul 2021 20:49:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m48IJ-0006Ru-FJ; Thu, 15 Jul 2021 20:49:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m48IJ-0000AG-Es; Thu, 15 Jul 2021 20:49:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+CyiwfPKrW2vYir30xs1lCQmUWisON0Mg75+WUQ7kfQ=; b=F0PRaqrBy3B21QcP6SKnb1W3JR
	UlBljF3X1oRABI4RIitZS9O02fTfGd39ryOhfeJBjti6h7EzW9FxEOhePHwgFdLJ8avaaC5jMTHoO
	mjmsWEE9fMQ5P4O88HvV3hWTd3s4zLM3pN7GrH/lt82fD50BphjG4sFPCdYjk7qxeIHw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163709-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.14-testing test] 163709: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.14-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3cfccd70992b3d2b739e3febfceb99fdf6283be0
X-Osstest-Versions-That:
    xen=b6a8c4f72def4d1135ff42660a86276ce2565c8c
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 15 Jul 2021 20:49:19 +0000

flight 163709 xen-4.14-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163709/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  3cfccd70992b3d2b739e3febfceb99fdf6283be0
baseline version:
 xen                  b6a8c4f72def4d1135ff42660a86276ce2565c8c

Last test of basis   162891  2021-06-18 11:05:12 Z   27 days
Testing same since   163709  2021-07-15 07:36:47 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Dario Faggioli <dfaggioli@suse.com>
  George Dunlap <george.dunlap@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   b6a8c4f72d..3cfccd7099  3cfccd70992b3d2b739e3febfceb99fdf6283be0 -> stable-4.14


From xen-devel-bounces@lists.xenproject.org Thu Jul 15 21:23:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 15 Jul 2021 21:23:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156948.289604 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m48pE-0008J9-AN; Thu, 15 Jul 2021 21:23:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156948.289604; Thu, 15 Jul 2021 21:23:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m48pE-0008J2-7L; Thu, 15 Jul 2021 21:23:20 +0000
Received: by outflank-mailman (input) for mailman id 156948;
 Thu, 15 Jul 2021 21:23:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=55eu=MH=bounce.vates.fr=bounce-md_30504962.60f0a744.v1-a4f06ca28cd744a985a1551ff8dd0c63@srs-us1.protection.inumbo.net>)
 id 1m48pC-0008It-HZ
 for xen-devel@lists.xenproject.org; Thu, 15 Jul 2021 21:23:18 +0000
Received: from mail145-24.atl61.mandrillapp.com (unknown [198.2.145.24])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id debaa324-e5b2-11eb-892c-12813bfff9fa;
 Thu, 15 Jul 2021 21:23:16 +0000 (UTC)
Received: from pmta06.mandrill.prod.atl01.rsglab.com (localhost [127.0.0.1])
 by mail145-24.atl61.mandrillapp.com (Mailchimp) with ESMTP id
 4GQnR84CPjzGlsnyd
 for <xen-devel@lists.xenproject.org>; Thu, 15 Jul 2021 21:23:16 +0000 (GMT)
Received: from [185.78.159.90] by mandrillapp.com id
 a4f06ca28cd744a985a1551ff8dd0c63; Thu, 15 Jul 2021 21:23:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: debaa324-e5b2-11eb-892c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.fr;
	s=mandrill; t=1626384196; i=charles.schulz@vates.fr;
	bh=Tp9bH+cYU/zl+a5MhwxZN8iPwjd4N9cfUSPfU8F5kRc=;
	h=From:Subject:To:Cc:Message-Id:Date:MIME-Version:Content-Type;
	b=Ywhvh1oEV616SFcsXDApxGED0M2PqXTA79spyTysK/x4LAtSgwqaBQ10QvCn++P3H
	 zs42kEBvhIWXxcxJuRsgdnlESWGv1OQLirL01TTa3/5YMhqIZP0tfioYVJOVOIvUVo
	 NZSeWsdK23+y2oCOiOmlE5DJs6bQjYJHlCDJ0RgE=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; 
 i=@mandrillapp.com; q=dns/txt; s=mandrill; t=1626384196; h=From : 
 Subject : To : Cc : Message-Id : Date : MIME-Version : Content-Type : 
 From : Subject : Date : X-Mandrill-User : List-Unsubscribe; 
 bh=Tp9bH+cYU/zl+a5MhwxZN8iPwjd4N9cfUSPfU8F5kRc=; 
 b=k0FQfmR2FSaU/PdnYOTlOP2BJqQOOB4F4PYqvIa2iBWljnqS7UZoCit5mAeclLqRl4ccXG
 J2pqr+5btorP8m+UTOTwC5j78BtkOmzjmVKMSZg1WrTYi4k+mTsVy3ZGrSfSFvHVeGAPoEUS
 xzp1Mab9hLAOIo18RnN+VfgahRzgc=
From: "Charles-H. Schulz" <charles.schulz@vates.fr>
Subject: Suggested changes to the admission policy of the vulnerability pre-disclosure list
X-Virus-Scanned: amavisd-new at vates.fr
To: xen-devel@lists.xenproject.org
Cc: 
Message-Id: <87r1fzclw0.fsf@vates.fr>
X-Report-Abuse: Please forward a copy of this message, including all headers, to abuse@mandrill.com
X-Report-Abuse: You can also report abuse here: http://mandrillapp.com/contact/abuse?id=30504962.a4f06ca28cd744a985a1551ff8dd0c63
X-Mandrill-User: md_30504962
Feedback-ID: 30504962:30504962.20210715:md
Date: Thu, 15 Jul 2021 21:23:16 +0000
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="_av-FpYHEP5ClHZ4aaYfD4CIbQ"

--_av-FpYHEP5ClHZ4aaYfD4CIbQ
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Hello,

I /we /Vates would like to suggest some changes to the policy regarding the
enrollment to the pre-disclosure mailing list of the Xen Security Team.

We have had some talks with the French national CERT who has a need to be the
recipient of such a list. This national CERT -and in my experience other
national CERTs such as the NIST for instance- is in constant contact with a
large Xen userbase that is mostly made up of large parts of the public sector
as well as critical infrastructure operators belonging to the private
sector. For confidentiality reasons they cannot disclose who uses Xen and
where it is used nor who may be using it internally or within the related
national cybersecurity authority.

Because of that, their request may not be clear or matching the existing
criteria for inclusion in the mailing list. National CERTs are trusted
actors and have historically been among the very first entities to define,
advocate for and put in practice the very notion of responsible
disclosure. Much of the current practice of Open Source projects in that
regard actually stems from CERTs. As part of their policies and processes
regarding vulnerability disclosure, the notion of confidentiality and
documented, waterfall-like processes of disclosure is play an integral
part of
how they handle informaton and publicity around vulnerability. As a result,
national CERTs (and the French National CERT) do not spread undisclosed
vulnerability without following established and agreed-upon processes. Such
processes include, in our instance, the ones defined and followed by the Xen
Security Team. Compliance with these are the first criteria to earn trust and
respect from the ecosystem and the downstream users. You can see an example
of their work here: https://www.cert.ssi.gouv.fr/

Part of the mission of the French National CERT is to work with
critical infrastructure providers in securing their IT.
This kind of expertise entails the securing of these information
systems before any unforeseen incident as well as after the incident
(incident remediation).
None of the tasks involved imply the communication of zero-day types
of vulnerabilities or vulnerabilities that are unpublished to the
downstream users.

I hope this clarifies the request and I'm looking forward to your feedback.

Best regards,

-- 
Charles-H. Schulz
Chief Strategy Officer - CSO
XCP-ng & Xen Orchestra - Vates solutions


--_av-FpYHEP5ClHZ4aaYfD4CIbQ
Content-Type: application/pgp-signature
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="signature.asc"

LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KCmlRSk1CQUVCQ0FBMkZp
RUVCcE15NjBzdVV4LzhhVjUxZnFKcldiZVl0T01GQW1Ed3B5OFlIR05vWVhK
c1pYTXUKYzJOb2RXeDZRSFpoZEdWekxtWnlBQW9KRUg2aWExbTNtTFRqN0FJ
UC8wQTRYL20yS2ZoYWNZaVVTSllIZlZzVApad3RhRUNjTE9QSW52Y08rWEI2
cWZsQ0d2MHBWSkdlMlJxb1YxSzJGYitYUzBLTTdTNzJDVGwyb0c0RE5PL09m
CndmZkNtSUdlcXdxdHNjSXlyVFBqbnF4Tm5TT2pOVm9Td0NQRjVVTEk4eUNo
ZFZoV3RDTDF6WitRQS9qY1NxZy8KVXhzV2lVMDBaN0xGZVFsdDltTHk1MWxX
UVZjS2lsQ2xJZXhpN1g0SWZDZ205MFVLY0R2U3ZsSWdFWTFyWGFrbwpZcnd3
SHpWdTdveW9zQkw4azhKb2pwVlFpWlhIQXRwU0hPd1Y4S3hrWVEzakVQZkth
Rm9HK0F6TXRQdmt5SzZkCnVwNXRUTUE1M0ovMGxoNDdPRkhqMnV3QjhpSGRM
RWRTZEZoOXg5aGRQQXlibDZVcGlDbzFGVm8wNDBsakc1MTYKNjYvYTRXUU10
TTlBMHQ0bkNCQlIzQnNDSGpRQ09ZQVFab0JudllJaTlWVEdyN2duS0psdXc5
QjBERkd2YTZzYwp3SFp3STNrNW5mMFVhU2pPK1Znbk5qQVg2Y0JrSTVicUtQ
YUt3TlBtMXU5cjl5b0ZjdUdqUUQ2L1RXNGFvbk5WCmhkUDFQOE5wNUdYd2M4
WlBCYlM2RmNnUEQ1MnFtWHF1ZXN3ZDFOMlgrdldPQWJPMWpZQ29Yb3lZMVk0
NVZrZFoKekZxeHdlZ2ZWQW9SQjRsenNWaWF3Vk02MzZMY3B6clB6a2h5WjQy
a3NId0N1NCtIMmhjK1F5ODhEOFJxWmVqQgpUUkoreWNtRWZYd0pyVlhPN09h
R1g4eWlxOGNOZWF1QWxmWFJVaXZNaWVNZTdvWDQyL0wyL0lNTFI3Ull1L1c5
CjlIQWNEYUpSaXFWN1ZQVkN3QmoxCj1EZTE2Ci0tLS0tRU5EIFBHUCBTSUdO
QVRVUkUtLS0tLQo=

--_av-FpYHEP5ClHZ4aaYfD4CIbQ--



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 01:13:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 01:13:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156968.289667 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4CPY-0000Ao-Ie; Fri, 16 Jul 2021 01:13:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156968.289667; Fri, 16 Jul 2021 01:13:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4CPY-0000Ae-Cw; Fri, 16 Jul 2021 01:13:04 +0000
Received: by outflank-mailman (input) for mailman id 156968;
 Fri, 16 Jul 2021 01:13:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4CPX-0000A2-2K; Fri, 16 Jul 2021 01:13:03 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4CPW-0007qV-Px; Fri, 16 Jul 2021 01:13:02 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4CPW-0002OO-FU; Fri, 16 Jul 2021 01:13:02 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4CPW-0001Mr-Em; Fri, 16 Jul 2021 01:13:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=pUM+rkKLYXbeVwDrddoOiONR8GPbDpzHVfMRVl4bqos=; b=yOdWBLIjmxDocD41kSUbieh3t5
	1SsyM5LQMpsTuY5EkhggJcxbnnfQRPnOESc1EdgOwrx1TQ/0WfoaXWMhTVCmti59jfgo83OCFV2W9
	IvM6ZpcUSOLm42xBGuUR5sTAI35/ar0xwId6C38Yxr12AYeBjCbnztj64dltdRf4OQz0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163710-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.15-testing test] 163710: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.15-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=1a6824957d051bb94929a1c74a52c013bc2f388d
X-Osstest-Versions-That:
    xen=ec457ac2a29279e8cd91745c410b0f49d5e8f1ff
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 01:13:02 +0000

flight 163710 xen-4.15-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163710/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  1a6824957d051bb94929a1c74a52c013bc2f388d
baseline version:
 xen                  ec457ac2a29279e8cd91745c410b0f49d5e8f1ff

Last test of basis   162882  2021-06-17 19:07:29 Z   28 days
Testing same since   163710  2021-07-15 07:36:48 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Anthony PERARD <anthony.perard@citrix.com>
  Dario Faggioli <dfaggioli@suse.com>
  George Dunlap <george.dunlap@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Juergen Gross <jgross@suse.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   ec457ac2a2..1a6824957d  1a6824957d051bb94929a1c74a52c013bc2f388d -> stable-4.15


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:04:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:04:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156975.289683 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4GxP-0000Tv-2N; Fri, 16 Jul 2021 06:04:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156975.289683; Fri, 16 Jul 2021 06:04:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4GxO-0000TS-PH; Fri, 16 Jul 2021 06:04:18 +0000
Received: by outflank-mailman (input) for mailman id 156975;
 Fri, 16 Jul 2021 06:04:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4GxN-0000TI-6O; Fri, 16 Jul 2021 06:04:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4GxN-00059a-0P; Fri, 16 Jul 2021 06:04:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4GxM-0002Aj-Ou; Fri, 16 Jul 2021 06:04:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4GxM-00045p-NK; Fri, 16 Jul 2021 06:04:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=hDX4UbFubdRTJvl/OURpAdkfaJTwY3ie+3tUerXxjOk=; b=Abk6aDLIMqDq9g43jqBhWinUH7
	UL7UVZ+a5n7I9VIYMNFJUi0x4WpuZLgS3vyNGutJAf30794Esma33z4ZF2kB0jC5lE/RBpsxLtKuV
	EWCNVS3t6EvAOrl0nxENOYjOAP3sZgy2so/1LITKed0bi+WPKiJBkv6/jbx5V7YRPAQg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163712-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163712: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=be282b14938846960cce30825a9fe762e14ca8c9
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 06:04:16 +0000

flight 163712 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163712/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 be282b14938846960cce30825a9fe762e14ca8c9
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   42 days
Failing since        162368  2021-06-04 15:42:59 Z   41 days  116 attempts
Testing same since   163676  2021-07-14 08:10:10 Z    1 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3827 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:16:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:16:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156983.289698 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4H9T-0002aY-8R; Fri, 16 Jul 2021 06:16:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156983.289698; Fri, 16 Jul 2021 06:16:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4H9T-0002aR-4D; Fri, 16 Jul 2021 06:16:47 +0000
Received: by outflank-mailman (input) for mailman id 156983;
 Fri, 16 Jul 2021 06:16:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4H9R-0002aK-U6
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 06:16:45 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 63eec616-e5fd-11eb-894d-12813bfff9fa;
 Fri, 16 Jul 2021 06:16:44 +0000 (UTC)
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2059.outbound.protection.outlook.com [104.47.6.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-33-756F38GSMUOcE_tjOLaATQ-1; Fri, 16 Jul 2021 08:16:41 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2445.eurprd04.prod.outlook.com (2603:10a6:800:55::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Fri, 16 Jul
 2021 06:16:39 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 06:16:39 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0242.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 06:16:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 63eec616-e5fd-11eb-894d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626416202;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=okRwA0kJrc3+ZvHsGaTbzeIZG24snsS9Jrz4dHUgxN4=;
	b=E0u5DILOi/uTzT8o9X5aQIJVuJJ/7QUYbKP0zDyDgRslq5R8sk2uePX8aks5yFibkXX0Ft
	6qy5ME15xv+2ZK4nV0dPxh1/4RZ01HYZV1vtjDn4Ygxa+iwWPjxdnmJNh4EM0mOT4rFoB2
	rA+eIpWR3HyEGPcRV/4/a9K2dS6ull4=
X-MC-Unique: 756F38GSMUOcE_tjOLaATQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=RRlbv9IbbhlfwLR8RRCAL02DE0j08IYgRVv0UOQkOQstFISGcDVwFoKYD+NU0KYEOkkNw3XcvFf54VTC+ZEL1wDh1fUuJ1ENRtBOMSzJ+bQsovbzZw56BzHeOoVXgFvg523jaNZ3X6TArJ+p5AhWk5gewDkhqP0UYF5+euBSLR+9+qpaCuNDjtAYe9/bizhxnObMVTZIcYzul2jWX9UyzNQSaLVFex/hwOoA6MrUSGPozGN/C+IOmSRdx0siMyQxGvo0jNi8NGabFUN0XHcD/SxVfmZi51CUSKMd0oRyPVm3jq0eVi/z4XUdCUkZQyaQia/I9dqY7ghNWxuOnfYjhQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=UfJpp0K1fMU1G9vcr87o7TTVTssxVrLdUkzsRyMWPRI=;
 b=E3clQHMxQ9bK1oEhWI8AnP5JIq2Xte9SjMac6KEr5wshG36XtEChNVAHYw/QBdewMeUblz7Oboons95sfmzHJPM9kOKkxQtSteLZskYJDmGaIvzomk37Xvkd6bi8rb3u7GHJaRej2ShRg4Zcn29fw3R+8KTlmhH9ReUH5rBycddBoXk7B/fHW4KZ4ffIabLUl7396dDA0rGwPjuilTV3rXKGfjfEYAMdEu0GPeWdZaDFO/nS1YRp427lNubN36mHU1Az5+H8EhnVyRe6AEet0kvL0CXp51OzcMOrWyDYaYPKv0fu0LZdpQh99jfhy3ndEsXGSLA9tVyzUeaZkQWhTA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: preparations for 4.15.1 and 4.13.4
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <ian.jackson@citrix.com>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
 <8324f959-924b-d196-149d-2fdad95da8fa@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <33925d95-163f-e893-8622-27c45ca30c62@suse.com>
Date: Fri, 16 Jul 2021 08:16:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <8324f959-924b-d196-149d-2fdad95da8fa@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: PR0P264CA0242.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::14)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: ff065343-53b8-489d-e739-08d9482145b1
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2445:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2445361551313A3F03D91B7FB3119@VI1PR0401MB2445.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	a+QEP6njXxwyGWr6CAPyIB7JOX1GFU4LkuX4WnJsM/V7//Nxz1qNwH8ChYnpswb2E3/ZOL8Fg2MtHDpbO2TEimNOnoj1m7rE7mCR9FMyg71v8AC5pjOBSeBdLExRC3EwT+20au47O0lW4ZxmBcpJr3Wn8ZCCbrjDtiZZ1LnKXZG6ZCPoPxgYV8F2IW8t9ciegCkjEZ1t1AXHewBLhdyZnjzJgTcs2NfVJmvKhw5AFGWB/Gkrqr9BZMxRis4n2F8DMGrg+H9JfQGVHk/7kQkcNf+p+eL65sfBHcGEbwAU62xbJufLuCJyUXXrC5Llm+NO75Hwzw8PCFhHE50brGbW6ZNidYWzMm2ljOztpPcTbaQj5yoSWxmYTVomECpyJhuVMHqyZ6End0eBZNQ3Y5FMiFWx/62bBZ+1Wg99r7LwTDW/xFsuftfr5tf8PcVGxT+44E+oKYmM1Una4KuIz5Q34ptiBXwQZQ70CwmdxhcpVqqx/pe7wjCjRYevXgpk4/n/0fG/jWUkIOrh6LkltJltVYIjq42E0VIFbHN/ZllZV5K5RA1r2y4dbkIC3HSSVzX2ZZeAclIy5jkAw9nDsmJ/RFAPVz1MLdpvfmNC4DVLOvZPMxRNU60EqN76GBlfv1GJ5ma7WnvCK2XEt2P5+tFPXC+QrxlL62ESxeYR5SVR0Op0dcJs0KZ8Cgm6YM4IHKEhFd4qiZjVt5HH/nEdHhiTQN8DYxMDLbu7Zon9gP2HfgU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(136003)(346002)(396003)(376002)(366004)(478600001)(26005)(8676002)(316002)(6916009)(16576012)(31696002)(54906003)(186003)(8936002)(4326008)(53546011)(83380400001)(86362001)(5660300002)(66946007)(2616005)(956004)(31686004)(66556008)(36756003)(38100700002)(2906002)(6486002)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?8Z7p27c/wI6k8vuc9UzRCL8wjnBPGqDOojoWa+4TCgYp50Fb1A/b1kLovPIf?=
 =?us-ascii?Q?PG+9gKTNqyzSFLW3V1V3ZAg3uUUeJ8CtTDe4wZpQfclEeK9dbsLkevUynJr0?=
 =?us-ascii?Q?TWbGECBeXM2neL7nmtPBwBzaBnzTcFyV/7ca3X8DcbXGeP9CliCzharJEKNA?=
 =?us-ascii?Q?pxuSZq6VO/v6RjXfoCXshvqcwanvgKBuMl/nuucnlxeitSKb84N2BscgzM4I?=
 =?us-ascii?Q?ZQMxvM3l+Ei8/FLStybwkwMgBc9pRvocmjKNZvvSQHl9580vwf27jk+s0Biv?=
 =?us-ascii?Q?eVYhGHFdxN2/eT1uGxttYKoliZfQ9P3YnKgu65BjYJYgug/ZmL7+sSkoBc7P?=
 =?us-ascii?Q?GRX72bXx5WSTzrzs3vnzbHUMf1sInHXVIgtH+T5/yh3Kvdp9D6ArhrHkgHvt?=
 =?us-ascii?Q?6VMoSmN7fkMr/ODLrEtgdSOy0xL6py07qyMh7azdfiwzEp4EewcBfs0RC7y/?=
 =?us-ascii?Q?ihPgOqWrLqYdMA8ajoxY8szI2jwpooG7ZG2UfGcFfEWvA09u1fy0Bc3V8Xm7?=
 =?us-ascii?Q?IlNyw9Pv6clcKnqsfNfVlZx9hQoaGz7SEbiBJUiQq+trV6JrEbgRWbm8MNui?=
 =?us-ascii?Q?gWgT1lNVQlENhJ+whApJq/UFnLRQXwZsCuaqAOdeU2wU0UNs4DmJ3ZbJTF8J?=
 =?us-ascii?Q?YtunwgRQ41jy5MQ+F4XR6MRnNF3uCDmZD2FeWshJdWsqjuPQYgLbE+z7o/Rq?=
 =?us-ascii?Q?oKKCaOTZXCcZ9RznZGSthNCvxdAAHcOm9e50/M04TgR4OlbfUwmNlracHK3Z?=
 =?us-ascii?Q?OGo75DLPIkUGbanc6KV/UiHfpq3FRG74SOgX8L87+oOjIC6iMTHqLbM2emum?=
 =?us-ascii?Q?4aD23lJ77+UvyeUKGG08e7xFyWYFSHFrmHCtPKXu/v1fLWe6gJnaIJh0PZ90?=
 =?us-ascii?Q?YRYhAlmNiRSoJVB/fniKt+8XAO9tfHQtHfLBqdZji1EvLDmZSKc7UZbsiV7Z?=
 =?us-ascii?Q?CCSTFiZ8cSsHIv/0xUezLO09AyCfEpye313R4DavIs2YAzdRxuH9To/c678u?=
 =?us-ascii?Q?baZ1xjxtbTA4L09e5JWoXe/qsRP+9Ngf9+Q1PyeMNFpHP3Gbxt9zLFngAxKx?=
 =?us-ascii?Q?tzzZ/UXiV+9oBuqnAgiFAqjovcb6FfaME8u1hWMMb9czC/Odqd04qCUgqRJ5?=
 =?us-ascii?Q?HdJ2gpRh4yORs21bQ1NIpYtU299DVV9NSZNbNWT6hz4WdJ1oqV9ZVvlyVpjH?=
 =?us-ascii?Q?g/EiPXCg/pT2EcYwgMD9U0squ7LLOiwlg8fyy8Jd/7f0rvXd3u8GFM80Zl+b?=
 =?us-ascii?Q?mpoPmTvnwg9RJLbXE6xXxgylFY93lzaF7aKNeNpw7f15uLi0xDYMuCNtwR/W?=
 =?us-ascii?Q?oXASn8MS1qzZA73XChQGdRHC?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ff065343-53b8-489d-e739-08d9482145b1
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 06:16:39.1342
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: kMgh2uuTvbWEJPvz0wtV2OWrPhWJDtXTyLufnUBXexxlHVI4ruwoH1SR0HJ0Zs11LGIzW4Cs/o0F2bVzvfFo6A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2445

On 15.07.2021 19:16, Andrew Cooper wrote:
> On 15/07/2021 08:58, Jan Beulich wrote:
>> Beyond this I'd like the following to be considered:
>>
>> 6409210a5f51 libxencall: osdep_hypercall() should return long
>> bef64f2c0019 libxencall: introduce variant of xencall2() returning long
>> 01a2d001dea2 libxencall: Bump SONAME following new functionality
>> 6f02d1ea4a10 libxc: use multicall for memory-op on Linux (and Solaris)
>>
>> If those are to be taken (which means in particular if the question of
>> the .so versioning can be properly sorted),
>>
>> 198a2bc6f149 x86/HVM: wire up multicalls
>=20
> We can backport changes in SONAME safely so long as:
>=20
> 1) We declare VERS_1.2 to be fixed and released.=C2=A0 This means that we
> bump to 1.3 for the next change, even if it is ahead of Xen 4.16 being
> release, and

Right. A matter of remembering at the right point (if need be). That's
where I think the risk is. (And of course I understand you meaning
VERS_1.3 and VERS_1.4 respectively for "fixed and released" and "bump
to".)

If we did so, what I can't tell offhand is whether any ABI-checker
data would need updating then.

> 2) *All* ABI changes up to VERS_1.2 are backported.
>=20
>=20
> The ABI called VERS_1.2 must be identical on all older branches to avoid
> binary problems when rebuilding a package against old-xen+updates, and
> then updating to a newer Xen.

I'm afraid I'm less clear about this part: There shouldn't be any ABI
differences in VERS_1.2 in the first place, should there? Or, if the
number is again off by one, the sole new function would be identical
(ABI-wise) everywhere.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:29:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:29:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156989.289709 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HLq-0004Lh-Br; Fri, 16 Jul 2021 06:29:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156989.289709; Fri, 16 Jul 2021 06:29:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HLq-0004La-8x; Fri, 16 Jul 2021 06:29:34 +0000
Received: by outflank-mailman (input) for mailman id 156989;
 Fri, 16 Jul 2021 06:29:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=acOe=MI=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m4HLo-0004LU-Jd
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 06:29:32 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 85ee40c5-4813-486e-89f2-8921695f13ae;
 Fri, 16 Jul 2021 06:29:31 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id DAEDE67373; Fri, 16 Jul 2021 08:29:28 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 85ee40c5-4813-486e-89f2-8921695f13ae
Date: Fri, 16 Jul 2021 08:29:28 +0200
From: Christoph Hellwig <hch@lst.de>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>
Subject: Re: [PATCH v1 01/16] dma-mapping: Allow map_sg() ops to return
 negative error codes
Message-ID: <20210716062928.GA13345@lst.de>
References: <20210715164544.6827-1-logang@deltatee.com> <20210715164544.6827-2-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210715164544.6827-2-logang@deltatee.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Thu, Jul 15, 2021 at 10:45:29AM -0600, Logan Gunthorpe wrote:
> +	 * dma_map_sgtable() will return the error code returned and convert
> +	 * a zero return (for legacy implementations) into -EINVAL.
> +	 *
> +	 * dma_map_sg() will always return zero on any negative or zero
> +	 * return to satisfy its own calling convention.
>  	 */

I don't think this belongs here.

> +EXPORT_SYMBOL(dma_map_sgtable);

EXPORT_SYMBOL_GPL, please.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:31:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:31:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.156994.289722 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HNm-0005em-Ok; Fri, 16 Jul 2021 06:31:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 156994.289722; Fri, 16 Jul 2021 06:31:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HNm-0005ef-Lk; Fri, 16 Jul 2021 06:31:34 +0000
Received: by outflank-mailman (input) for mailman id 156994;
 Fri, 16 Jul 2021 06:31:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=acOe=MI=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m4HNl-0005eT-2T
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 06:31:33 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 74d2996a-e5ff-11eb-894d-12813bfff9fa;
 Fri, 16 Jul 2021 06:31:30 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 3C31267373; Fri, 16 Jul 2021 08:31:28 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 74d2996a-e5ff-11eb-894d-12813bfff9fa
Date: Fri, 16 Jul 2021 08:31:27 +0200
From: Christoph Hellwig <hch@lst.de>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>
Subject: Re: [PATCH v1 04/16] dma-iommu: Return error code from
 iommu_dma_map_sg()
Message-ID: <20210716063127.GB13345@lst.de>
References: <20210715164544.6827-1-logang@deltatee.com> <20210715164544.6827-5-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210715164544.6827-5-logang@deltatee.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

Careful here. What do all these errors from the low-level code mean
here?  I think we need to clearly standardize on what we actually
return from ->map_sg and possibly document what the callers expect and
can do, and enforce that only those error are reported.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:32:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:32:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157000.289733 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HOx-0006Gr-3S; Fri, 16 Jul 2021 06:32:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157000.289733; Fri, 16 Jul 2021 06:32:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HOx-0006Gk-0W; Fri, 16 Jul 2021 06:32:47 +0000
Received: by outflank-mailman (input) for mailman id 157000;
 Fri, 16 Jul 2021 06:32:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=acOe=MI=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m4HOv-0006Ga-3s
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 06:32:45 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a0a2ecca-e5ff-11eb-894d-12813bfff9fa;
 Fri, 16 Jul 2021 06:32:44 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 2BDE767373; Fri, 16 Jul 2021 08:32:42 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a0a2ecca-e5ff-11eb-894d-12813bfff9fa
Date: Fri, 16 Jul 2021 08:32:41 +0200
From: Christoph Hellwig <hch@lst.de>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Michael Ellerman <mpe@ellerman.id.au>
Subject: Re: [PATCH v1 14/16] x86/amd_gart: return error code from
 gart_map_sg()
Message-ID: <20210716063241.GC13345@lst.de>
References: <20210715164544.6827-1-logang@deltatee.com> <20210715164544.6827-15-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210715164544.6827-15-logang@deltatee.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Thu, Jul 15, 2021 at 10:45:42AM -0600, Logan Gunthorpe wrote:
> @@ -458,7 +460,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>  	iommu_full(dev, pages << PAGE_SHIFT, dir);
>  	for_each_sg(sg, s, nents, i)
>  		s->dma_address = DMA_MAPPING_ERROR;
> -	return 0;
> +	return ret;

While we're at it - setting the ->dma_address to DMA_MAPPING_ERROR is
not part of the ->map_sg calling convention.  Might be worth to fix
up while we're at it.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:33:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:33:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157007.289750 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HPk-0006wJ-F5; Fri, 16 Jul 2021 06:33:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157007.289750; Fri, 16 Jul 2021 06:33:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HPk-0006wC-Bf; Fri, 16 Jul 2021 06:33:36 +0000
Received: by outflank-mailman (input) for mailman id 157007;
 Fri, 16 Jul 2021 06:33:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=acOe=MI=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m4HPi-0006w4-To
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 06:33:34 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ba9ad5dc-569d-48e6-ac28-461b60592c0f;
 Fri, 16 Jul 2021 06:33:34 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id C874467373; Fri, 16 Jul 2021 08:33:32 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ba9ad5dc-569d-48e6-ac28-461b60592c0f
Date: Fri, 16 Jul 2021 08:33:32 +0200
From: Christoph Hellwig <hch@lst.de>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>
Subject: Re: [PATCH v1 16/16] dma-mapping: Disallow .map_sg operations from
 returning zero on error
Message-ID: <20210716063332.GD13345@lst.de>
References: <20210715164544.6827-1-logang@deltatee.com> <20210715164544.6827-17-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210715164544.6827-17-logang@deltatee.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Thu, Jul 15, 2021 at 10:45:44AM -0600, Logan Gunthorpe wrote:
> @@ -194,6 +194,8 @@ static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
>  	else
>  		ents = ops->map_sg(dev, sg, nents, dir, attrs);
>  
> +	WARN_ON_ONCE(ents == 0);

Turns this into a negative error code while we're at it, just to keep
the callers sane?


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:40:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:40:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157015.289762 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HWT-0000E4-8h; Fri, 16 Jul 2021 06:40:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157015.289762; Fri, 16 Jul 2021 06:40:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4HWT-0000Dx-3S; Fri, 16 Jul 2021 06:40:33 +0000
Received: by outflank-mailman (input) for mailman id 157015;
 Fri, 16 Jul 2021 06:40:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4HWR-0000Dh-Ju; Fri, 16 Jul 2021 06:40:31 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4HWR-0005rN-AZ; Fri, 16 Jul 2021 06:40:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4HWQ-0003sQ-TN; Fri, 16 Jul 2021 06:40:31 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4HWQ-0008LQ-Sx; Fri, 16 Jul 2021 06:40:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=sfKdchcK4yj/igWEsd3OhBL+mHw09KT2uV18LxJa0CI=; b=WsHC0MIrgrW0wsUQWA1P4pUFQF
	DH9eiTEPpuXSsRt81KSYrNtFXMLSD7IiNT5d32TjX2PtrPbKBJS9xp3SSqy9YV3JjaiNYefgKzJP+
	DXma8oIH/LZRm2/oTVodpug/Pn30vu3zmqa4oROE86Np+qflbGe2Flv2oTUJvt+/4+G8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163711-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.13-testing test] 163711: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.13-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=1540a9a20dd0c049345a00bfed0a3e8ea98d104b
X-Osstest-Versions-That:
    xen=9bd6416528f9080cead0f8c22441f5568dbd0bf3
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 06:40:30 +0000

flight 163711 xen-4.13-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163711/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 162550
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 162550
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 162550
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 162550
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 162550
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 162550
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 162550
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 162550
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 162550
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 162550
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 162550
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 162550
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  1540a9a20dd0c049345a00bfed0a3e8ea98d104b
baseline version:
 xen                  9bd6416528f9080cead0f8c22441f5568dbd0bf3

Last test of basis   162550  2021-06-08 18:37:00 Z   37 days
Testing same since   163711  2021-07-15 08:07:15 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Dario Faggioli <dfaggioli@suse.com>
  George Dunlap <george.dunlap@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   9bd6416528..1540a9a20d  1540a9a20dd0c049345a00bfed0a3e8ea98d104b -> stable-4.13


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 06:48:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 06:48:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157036.289829 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Hdk-0001vY-QG; Fri, 16 Jul 2021 06:48:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157036.289829; Fri, 16 Jul 2021 06:48:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Hdk-0001vR-MW; Fri, 16 Jul 2021 06:48:04 +0000
Received: by outflank-mailman (input) for mailman id 157036;
 Fri, 16 Jul 2021 06:48:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=CyKe=MI=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m4Hdj-0001vL-Ea
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 06:48:03 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e5462847-dac3-497f-ad08-c76478c2cdf4;
 Fri, 16 Jul 2021 06:48:01 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 6A4781FE78;
 Fri, 16 Jul 2021 06:48:00 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 3D9CE13357;
 Fri, 16 Jul 2021 06:48:00 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id nZMuDKAr8WCjRQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 16 Jul 2021 06:48:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e5462847-dac3-497f-ad08-c76478c2cdf4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626418080; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=uuSCFj0HLKiDL6B5nZAmC6sccbjLsD/lms7yNPDhfLI=;
	b=jLVBBd0wkFwVVFAHX+IKb8M1Qz0nvXmaL36tPhi5IUhf/IyjhEIiERwX4+LQ0fEH9rI2OV
	8Dgg2KxrBfq3pNk64RvWhBXeHnxkenZDWM3A2cCmaJHAHWsBIDZDTKN3UmG8lFFxvkeip8
	V6ptpoDBPDwfBIkvIzbrNFhFC2GsAFI=
Subject: Re: [PATCH-4.15] tools/libs/ctrl: fix xc_core_arch_map_p2m() to
 support linear p2m table
To: xen-devel@lists.xenproject.org, Ian Jackson <iwj@xenproject.org>
Cc: Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>
References: <20210702142944.1698-1-jgross@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <b871c368-0e9b-20d4-ad18-55c5d8be881e@suse.com>
Date: Fri, 16 Jul 2021 08:47:59 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210702142944.1698-1-jgross@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="D1QEOYA3CJOVjGDG6SEiaroVJh0aEYbGN"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--D1QEOYA3CJOVjGDG6SEiaroVJh0aEYbGN
Content-Type: multipart/mixed; boundary="ny1gN91qbXXbYYL295902lUUTDGenPpQL";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org, Ian Jackson <iwj@xenproject.org>
Cc: Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>
Message-ID: <b871c368-0e9b-20d4-ad18-55c5d8be881e@suse.com>
Subject: Re: [PATCH-4.15] tools/libs/ctrl: fix xc_core_arch_map_p2m() to
 support linear p2m table
References: <20210702142944.1698-1-jgross@suse.com>
In-Reply-To: <20210702142944.1698-1-jgross@suse.com>

--ny1gN91qbXXbYYL295902lUUTDGenPpQL
Content-Type: multipart/mixed;
 boundary="------------5A87F5F0F20AC31707ECC2F4"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------5A87F5F0F20AC31707ECC2F4
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Ping?

On 02.07.21 16:29, Juergen Gross wrote:
> The core of a pv linux guest produced via "xl dump-core" is not usable
> as since kernel 4.14 only the linear p2m table is kept if Xen indicates=

> it is supporting that. Unfortunately xc_core_arch_map_p2m() is still
> supporting the 3-level p2m tree only.
>=20
> Fix that by copying the functionality of map_p2m() from libxenguest to
> libxenctrl.
>=20
> Additionally the mapped p2m isn't of a fixed length now, so the
> interface to the mapping functions needs to be adapted. In order not to=

> add even more parameters, expand struct domain_info_context and use a
> pointer to that as a parameter.
>=20
> This is a backport of upstream commit bd7a29c3d0b937ab542a.
>=20
> As the original patch includes a modification of a data structure
> passed via pointer to a library function, the related function in the
> library is renamed in order to be able to spot any external users of
> that function. Note that it is extremely unlikely any such users
> outside the Xen git tree are existing, so the risk to break any
> existing programs is very unlikely. In case such a user is existing,
> changing the name of xc_map_domain_meminfo() will at least avoid
> silent breakage.
>=20
> Fixes: dc6d60937121 ("libxc: set flag for support of linear p2m list in=
 domain builder")
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
>   tools/include/xenguest.h      |   2 +
>   tools/libs/ctrl/xc_core.c     |   5 +-
>   tools/libs/ctrl/xc_core.h     |   8 +-
>   tools/libs/ctrl/xc_core_arm.c |  23 +--
>   tools/libs/ctrl/xc_core_x86.c | 256 ++++++++++++++++++++++++++++-----=
-
>   tools/libs/ctrl/xc_private.h  |   1 +
>   tools/libs/guest/xg_domain.c  |  17 +--
>   7 files changed, 234 insertions(+), 78 deletions(-)
>=20
> diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
> index 217022b6e7..36a26deba4 100644
> --- a/tools/include/xenguest.h
> +++ b/tools/include/xenguest.h
> @@ -700,8 +700,10 @@ struct xc_domain_meminfo {
>       xen_pfn_t *pfn_type;
>       xen_pfn_t *p2m_table;
>       unsigned long p2m_size;
> +    unsigned int p2m_frames;
>   };
>  =20
> +#define xc_map_domain_meminfo xc_map_domain_meminfo_mod
>   int xc_map_domain_meminfo(xc_interface *xch, uint32_t domid,
>                             struct xc_domain_meminfo *minfo);
>  =20
> diff --git a/tools/libs/ctrl/xc_core.c b/tools/libs/ctrl/xc_core.c
> index b47ab2f6d8..9576bec5a3 100644
> --- a/tools/libs/ctrl/xc_core.c
> +++ b/tools/libs/ctrl/xc_core.c
> @@ -574,8 +574,7 @@ xc_domain_dumpcore_via_callback(xc_interface *xch,
>               goto out;
>           }
>  =20
> -        sts =3D xc_core_arch_map_p2m(xch, dinfo->guest_width, &info, l=
ive_shinfo,
> -                                   &p2m, &dinfo->p2m_size);
> +        sts =3D xc_core_arch_map_p2m(xch, dinfo, &info, live_shinfo, &=
p2m);
>           if ( sts !=3D 0 )
>               goto out;
>  =20
> @@ -945,7 +944,7 @@ out:
>       if ( memory_map !=3D NULL )
>           free(memory_map);
>       if ( p2m !=3D NULL )
> -        munmap(p2m, PAGE_SIZE * P2M_FL_ENTRIES);
> +        munmap(p2m, PAGE_SIZE * dinfo->p2m_frames);
>       if ( p2m_array !=3D NULL )
>           free(p2m_array);
>       if ( pfn_array !=3D NULL )
> diff --git a/tools/libs/ctrl/xc_core.h b/tools/libs/ctrl/xc_core.h
> index 36fb755da2..8ea1f93a10 100644
> --- a/tools/libs/ctrl/xc_core.h
> +++ b/tools/libs/ctrl/xc_core.h
> @@ -138,14 +138,14 @@ int xc_core_arch_memory_map_get(xc_interface *xch=
,
>                                   xc_dominfo_t *info, shared_info_any_t=
 *live_shinfo,
>                                   xc_core_memory_map_t **mapp,
>                                   unsigned int *nr_entries);
> -int xc_core_arch_map_p2m(xc_interface *xch, unsigned int guest_width,
> +int xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context=
 *dinfo,
>                            xc_dominfo_t *info, shared_info_any_t *live_=
shinfo,
> -                         xen_pfn_t **live_p2m, unsigned long *pfnp);
> +                         xen_pfn_t **live_p2m);
>  =20
> -int xc_core_arch_map_p2m_writable(xc_interface *xch, unsigned int gues=
t_width,
> +int xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_inf=
o_context *dinfo,
>                                     xc_dominfo_t *info,
>                                     shared_info_any_t *live_shinfo,
> -                                  xen_pfn_t **live_p2m, unsigned long =
*pfnp);
> +                                  xen_pfn_t **live_p2m);
>  =20
>   int xc_core_arch_get_scratch_gpfn(xc_interface *xch, uint32_t domid,
>                                     xen_pfn_t *gpfn);
> diff --git a/tools/libs/ctrl/xc_core_arm.c b/tools/libs/ctrl/xc_core_ar=
m.c
> index 7b587b4cc5..93765a565f 100644
> --- a/tools/libs/ctrl/xc_core_arm.c
> +++ b/tools/libs/ctrl/xc_core_arm.c
> @@ -66,33 +66,24 @@ xc_core_arch_memory_map_get(xc_interface *xch, stru=
ct xc_core_arch_context *unus
>  =20
>   static int
>   xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context=
 *dinfo, xc_dominfo_t *info,
> -                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m,
> -                        unsigned long *pfnp, int rw)
> +                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m, int rw)
>   {
>       errno =3D ENOSYS;
>       return -1;
>   }
>  =20
>   int
> -xc_core_arch_map_p2m(xc_interface *xch, unsigned int guest_width, xc_d=
ominfo_t *info,
> -                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m,
> -                        unsigned long *pfnp)
> +xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *di=
nfo, xc_dominfo_t *info,
> +                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m)
>   {
> -    struct domain_info_context _dinfo =3D { .guest_width =3D guest_wid=
th };
> -    struct domain_info_context *dinfo =3D &_dinfo;
> -    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
> -                                   live_shinfo, live_p2m, pfnp, 0);
> +    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live=
_p2m, 0);
>   }
>  =20
>   int
> -xc_core_arch_map_p2m_writable(xc_interface *xch, unsigned int guest_wi=
dth, xc_dominfo_t *info,
> -                              shared_info_any_t *live_shinfo, xen_pfn_=
t **live_p2m,
> -                              unsigned long *pfnp)
> +xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_co=
ntext *dinfo, xc_dominfo_t *info,
> +                              shared_info_any_t *live_shinfo, xen_pfn_=
t **live_p2m)
>   {
> -    struct domain_info_context _dinfo =3D { .guest_width =3D guest_wid=
th };
> -    struct domain_info_context *dinfo =3D &_dinfo;
> -    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
> -                                   live_shinfo, live_p2m, pfnp, 1);
> +    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live=
_p2m, 1);
>   }
>  =20
>   int
> diff --git a/tools/libs/ctrl/xc_core_x86.c b/tools/libs/ctrl/xc_core_x8=
6.c
> index cb76e6207b..c8f71d4b75 100644
> --- a/tools/libs/ctrl/xc_core_x86.c
> +++ b/tools/libs/ctrl/xc_core_x86.c
> @@ -17,6 +17,7 @@
>    *
>    */
>  =20
> +#include <inttypes.h>
>   #include "xc_private.h"
>   #include "xc_core.h"
>   #include <xen/hvm/e820.h>
> @@ -65,34 +66,169 @@ xc_core_arch_memory_map_get(xc_interface *xch, str=
uct xc_core_arch_context *unus
>       return 0;
>   }
>  =20
> -static int
> -xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context =
*dinfo, xc_dominfo_t *info,
> -                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m,
> -                        unsigned long *pfnp, int rw)
> +static inline bool is_canonical_address(uint64_t vaddr)
>   {
> -    /* Double and single indirect references to the live P2M table */
> -    xen_pfn_t *live_p2m_frame_list_list =3D NULL;
> -    xen_pfn_t *live_p2m_frame_list =3D NULL;
> -    /* Copies of the above. */
> -    xen_pfn_t *p2m_frame_list_list =3D NULL;
> -    xen_pfn_t *p2m_frame_list =3D NULL;
> +    return ((int64_t)vaddr >> 47) =3D=3D ((int64_t)vaddr >> 63);
> +}
>  =20
> -    uint32_t dom =3D info->domid;
> -    int ret =3D -1;
> -    int err;
> -    int i;
> +/* Virtual address ranges reserved for hypervisor. */
> +#define HYPERVISOR_VIRT_START_X86_64 0xFFFF800000000000ULL
> +#define HYPERVISOR_VIRT_END_X86_64   0xFFFF87FFFFFFFFFFULL
>  =20
> -    if ( xc_domain_nr_gpfns(xch, info->domid, &dinfo->p2m_size) < 0 )
> +#define HYPERVISOR_VIRT_START_X86_32 0x00000000F5800000ULL
> +#define HYPERVISOR_VIRT_END_X86_32   0x00000000FFFFFFFFULL
> +
> +static xen_pfn_t *
> +xc_core_arch_map_p2m_list_rw(xc_interface *xch, struct domain_info_con=
text *dinfo,
> +                             uint32_t dom, shared_info_any_t *live_shi=
nfo,
> +                             uint64_t p2m_cr3)
> +{
> +    uint64_t p2m_vaddr, p2m_end, mask, off;
> +    xen_pfn_t p2m_mfn, mfn, saved_mfn, max_pfn;
> +    uint64_t *ptes =3D NULL;
> +    xen_pfn_t *mfns =3D NULL;
> +    unsigned int fpp, n_pages, level, n_levels, shift,
> +                 idx_start, idx_end, idx, saved_idx;
> +
> +    p2m_vaddr =3D GET_FIELD(live_shinfo, arch.p2m_vaddr, dinfo->guest_=
width);
> +    fpp =3D PAGE_SIZE / dinfo->guest_width;
> +    dinfo->p2m_frames =3D (dinfo->p2m_size - 1) / fpp + 1;
> +    p2m_end =3D p2m_vaddr + dinfo->p2m_frames * PAGE_SIZE - 1;
> +
> +    if ( dinfo->guest_width =3D=3D 8 )
>       {
> -        ERROR("Could not get maximum GPFN!");
> -        goto out;
> +        mask =3D 0x0000ffffffffffffULL;
> +        n_levels =3D 4;
> +        p2m_mfn =3D p2m_cr3 >> 12;
> +        if ( !is_canonical_address(p2m_vaddr) ||
> +             !is_canonical_address(p2m_end) ||
> +             p2m_end < p2m_vaddr ||
> +             (p2m_vaddr <=3D HYPERVISOR_VIRT_END_X86_64 &&
> +              p2m_end > HYPERVISOR_VIRT_START_X86_64) )
> +        {
> +            ERROR("Bad virtual p2m address range %#" PRIx64 "-%#" PRIx=
64,
> +                  p2m_vaddr, p2m_end);
> +            errno =3D ERANGE;
> +            goto out;
> +        }
> +    }
> +    else
> +    {
> +        mask =3D 0x00000000ffffffffULL;
> +        n_levels =3D 3;
> +        if ( p2m_cr3 & ~mask )
> +            p2m_mfn =3D ~0UL;
> +        else
> +            p2m_mfn =3D (uint32_t)((p2m_cr3 >> 12) | (p2m_cr3 << 20));=

> +        if ( p2m_vaddr > mask || p2m_end > mask || p2m_end < p2m_vaddr=
 ||
> +             (p2m_vaddr <=3D HYPERVISOR_VIRT_END_X86_32 &&
> +              p2m_end > HYPERVISOR_VIRT_START_X86_32) )
> +        {
> +            ERROR("Bad virtual p2m address range %#" PRIx64 "-%#" PRIx=
64,
> +                  p2m_vaddr, p2m_end);
> +            errno =3D ERANGE;
> +            goto out;
> +        }
>       }
>  =20
> -    if ( dinfo->p2m_size < info->nr_pages  )
> +    mfns =3D malloc(sizeof(*mfns));
> +    if ( !mfns )
>       {
> -        ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, in=
fo->nr_pages - 1);
> +        ERROR("Cannot allocate memory for array of %u mfns", 1);
>           goto out;
>       }
> +    mfns[0] =3D p2m_mfn;
> +    off =3D 0;
> +    saved_mfn =3D 0;
> +    idx_start =3D idx_end =3D saved_idx =3D 0;
> +
> +    for ( level =3D n_levels; level > 0; level-- )
> +    {
> +        n_pages =3D idx_end - idx_start + 1;
> +        ptes =3D xc_map_foreign_pages(xch, dom, PROT_READ, mfns, n_pag=
es);
> +        if ( !ptes )
> +        {
> +            PERROR("Failed to map %u page table pages for p2m list", n=
_pages);
> +            goto out;
> +        }
> +        free(mfns);
> +
> +        shift =3D level * 9 + 3;
> +        idx_start =3D ((p2m_vaddr - off) & mask) >> shift;
> +        idx_end =3D ((p2m_end - off) & mask) >> shift;
> +        idx =3D idx_end - idx_start + 1;
> +        mfns =3D malloc(sizeof(*mfns) * idx);
> +        if ( !mfns )
> +        {
> +            ERROR("Cannot allocate memory for array of %u mfns", idx);=

> +            goto out;
> +        }
> +
> +        for ( idx =3D idx_start; idx <=3D idx_end; idx++ )
> +        {
> +            mfn =3D (ptes[idx] & 0x000ffffffffff000ULL) >> PAGE_SHIFT;=

> +            if ( mfn =3D=3D 0 )
> +            {
> +                ERROR("Bad mfn %#lx during page table walk for vaddr %=
#" PRIx64 " at level %d of p2m list",
> +                      mfn, off + ((uint64_t)idx << shift), level);
> +                errno =3D ERANGE;
> +                goto out;
> +            }
> +            mfns[idx - idx_start] =3D mfn;
> +
> +            /* Maximum pfn check at level 2. Same reasoning as for p2m=
 tree. */
> +            if ( level =3D=3D 2 )
> +            {
> +                if ( mfn !=3D saved_mfn )
> +                {
> +                    saved_mfn =3D mfn;
> +                    saved_idx =3D idx - idx_start;
> +                }
> +            }
> +        }
> +
> +        if ( level =3D=3D 2 )
> +        {
> +            if ( saved_idx =3D=3D idx_end )
> +                saved_idx++;
> +            max_pfn =3D ((xen_pfn_t)saved_idx << 9) * fpp;
> +            if ( max_pfn < dinfo->p2m_size )
> +            {
> +                dinfo->p2m_size =3D max_pfn;
> +                dinfo->p2m_frames =3D (dinfo->p2m_size + fpp - 1) / fp=
p;
> +                p2m_end =3D p2m_vaddr + dinfo->p2m_frames * PAGE_SIZE =
- 1;
> +                idx_end =3D idx_start + saved_idx;
> +            }
> +        }
> +
> +        munmap(ptes, n_pages * PAGE_SIZE);
> +        ptes =3D NULL;
> +        off =3D p2m_vaddr & ((mask >> shift) << shift);
> +    }
> +
> +    return mfns;
> +
> + out:
> +    free(mfns);
> +    if ( ptes )
> +        munmap(ptes, n_pages * PAGE_SIZE);
> +
> +    return NULL;
> +}
> +
> +static xen_pfn_t *
> +xc_core_arch_map_p2m_tree_rw(xc_interface *xch, struct domain_info_con=
text *dinfo,
> +                             uint32_t dom, shared_info_any_t *live_shi=
nfo)
> +{
> +    /* Double and single indirect references to the live P2M table */
> +    xen_pfn_t *live_p2m_frame_list_list;
> +    xen_pfn_t *live_p2m_frame_list =3D NULL;
> +    /* Copies of the above. */
> +    xen_pfn_t *p2m_frame_list_list =3D NULL;
> +    xen_pfn_t *p2m_frame_list;
> +
> +    int err;
> +    int i;
>  =20
>       live_p2m_frame_list_list =3D
>           xc_map_foreign_range(xch, dom, PAGE_SIZE, PROT_READ,
> @@ -151,10 +287,60 @@ xc_core_arch_map_p2m_rw(xc_interface *xch, struct=
 domain_info_context *dinfo, xc
>           for ( i =3D P2M_FL_ENTRIES - 1; i >=3D 0; i-- )
>               p2m_frame_list[i] =3D ((uint32_t *)p2m_frame_list)[i];
>  =20
> +    dinfo->p2m_frames =3D P2M_FL_ENTRIES;
> +
> +    return p2m_frame_list;
> +
> + out:
> +    err =3D errno;
> +
> +    if ( live_p2m_frame_list_list )
> +        munmap(live_p2m_frame_list_list, PAGE_SIZE);
> +
> +    if ( live_p2m_frame_list )
> +        munmap(live_p2m_frame_list, P2M_FLL_ENTRIES * PAGE_SIZE);
> +
> +    free(p2m_frame_list_list);
> +
> +    errno =3D err;
> +
> +    return NULL;
> +}
> +
> +static int
> +xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context =
*dinfo, xc_dominfo_t *info,
> +                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m, int rw)
> +{
> +    xen_pfn_t *p2m_frame_list =3D NULL;
> +    uint64_t p2m_cr3;
> +    uint32_t dom =3D info->domid;
> +    int ret =3D -1;
> +    int err;
> +
> +    if ( xc_domain_nr_gpfns(xch, info->domid, &dinfo->p2m_size) < 0 )
> +    {
> +        ERROR("Could not get maximum GPFN!");
> +        goto out;
> +    }
> +
> +    if ( dinfo->p2m_size < info->nr_pages  )
> +    {
> +        ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, in=
fo->nr_pages - 1);
> +        goto out;
> +    }
> +
> +    p2m_cr3 =3D GET_FIELD(live_shinfo, arch.p2m_cr3, dinfo->guest_widt=
h);
> +
> +    p2m_frame_list =3D p2m_cr3 ? xc_core_arch_map_p2m_list_rw(xch, din=
fo, dom, live_shinfo, p2m_cr3)
> +                             : xc_core_arch_map_p2m_tree_rw(xch, dinfo=
, dom, live_shinfo);
> +
> +    if ( !p2m_frame_list )
> +        goto out;
> +
>       *live_p2m =3D xc_map_foreign_pages(xch, dom,
>                                       rw ? (PROT_READ | PROT_WRITE) : P=
ROT_READ,
>                                       p2m_frame_list,
> -                                    P2M_FL_ENTRIES);
> +                                    dinfo->p2m_frames);
>  =20
>       if ( !*live_p2m )
>       {
> @@ -162,21 +348,11 @@ xc_core_arch_map_p2m_rw(xc_interface *xch, struct=
 domain_info_context *dinfo, xc
>           goto out;
>       }
>  =20
> -    *pfnp =3D dinfo->p2m_size;
> -
>       ret =3D 0;
>  =20
>   out:
>       err =3D errno;
>  =20
> -    if ( live_p2m_frame_list_list )
> -        munmap(live_p2m_frame_list_list, PAGE_SIZE);
> -
> -    if ( live_p2m_frame_list )
> -        munmap(live_p2m_frame_list, P2M_FLL_ENTRIES * PAGE_SIZE);
> -
> -    free(p2m_frame_list_list);
> -
>       free(p2m_frame_list);
>  =20
>       errno =3D err;
> @@ -184,25 +360,17 @@ out:
>   }
>  =20
>   int
> -xc_core_arch_map_p2m(xc_interface *xch, unsigned int guest_width, xc_d=
ominfo_t *info,
> -                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m,
> -                        unsigned long *pfnp)
> +xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *di=
nfo, xc_dominfo_t *info,
> +                        shared_info_any_t *live_shinfo, xen_pfn_t **li=
ve_p2m)
>   {
> -    struct domain_info_context _dinfo =3D { .guest_width =3D guest_wid=
th };
> -    struct domain_info_context *dinfo =3D &_dinfo;
> -    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
> -                                   live_shinfo, live_p2m, pfnp, 0);
> +    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live=
_p2m, 0);
>   }
>  =20
>   int
> -xc_core_arch_map_p2m_writable(xc_interface *xch, unsigned int guest_wi=
dth, xc_dominfo_t *info,
> -                              shared_info_any_t *live_shinfo, xen_pfn_=
t **live_p2m,
> -                              unsigned long *pfnp)
> +xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_co=
ntext *dinfo, xc_dominfo_t *info,
> +                              shared_info_any_t *live_shinfo, xen_pfn_=
t **live_p2m)
>   {
> -    struct domain_info_context _dinfo =3D { .guest_width =3D guest_wid=
th };
> -    struct domain_info_context *dinfo =3D &_dinfo;
> -    return xc_core_arch_map_p2m_rw(xch, dinfo, info,
> -                                   live_shinfo, live_p2m, pfnp, 1);
> +    return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live=
_p2m, 1);
>   }
>  =20
>   int
> diff --git a/tools/libs/ctrl/xc_private.h b/tools/libs/ctrl/xc_private.=
h
> index f0b5f83ac8..8ebc0b59da 100644
> --- a/tools/libs/ctrl/xc_private.h
> +++ b/tools/libs/ctrl/xc_private.h
> @@ -79,6 +79,7 @@ struct iovec {
>  =20
>   struct domain_info_context {
>       unsigned int guest_width;
> +    unsigned int p2m_frames;
>       unsigned long p2m_size;
>   };
>  =20
> diff --git a/tools/libs/guest/xg_domain.c b/tools/libs/guest/xg_domain.=
c
> index 5019c84e0e..dd7db2cbd8 100644
> --- a/tools/libs/guest/xg_domain.c
> +++ b/tools/libs/guest/xg_domain.c
> @@ -24,13 +24,9 @@
>  =20
>   int xc_unmap_domain_meminfo(xc_interface *xch, struct xc_domain_memin=
fo *minfo)
>   {
> -    struct domain_info_context _di =3D { .guest_width =3D minfo->guest=
_width,
> -                                       .p2m_size =3D minfo->p2m_size};=

> -    struct domain_info_context *dinfo =3D &_di;
> -
>       free(minfo->pfn_type);
>       if ( minfo->p2m_table )
> -        munmap(minfo->p2m_table, P2M_FL_ENTRIES * PAGE_SIZE);
> +        munmap(minfo->p2m_table, minfo->p2m_frames * PAGE_SIZE);
>       minfo->p2m_table =3D NULL;
>  =20
>       return 0;
> @@ -40,7 +36,6 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32_t=
 domid,
>                             struct xc_domain_meminfo *minfo)
>   {
>       struct domain_info_context _di;
> -    struct domain_info_context *dinfo =3D &_di;
>  =20
>       xc_dominfo_t info;
>       shared_info_any_t *live_shinfo;
> @@ -96,16 +91,16 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32=
_t domid,
>           return -1;
>       }
>  =20
> -    if ( xc_core_arch_map_p2m_writable(xch, minfo->guest_width, &info,=

> -                                       live_shinfo, &minfo->p2m_table,=

> -                                       &minfo->p2m_size) )
> +    if ( xc_core_arch_map_p2m_writable(xch, &_di, &info,
> +                                       live_shinfo, &minfo->p2m_table)=
 )
>       {
>           PERROR("Could not map the P2M table");
>           munmap(live_shinfo, PAGE_SIZE);
>           return -1;
>       }
>       munmap(live_shinfo, PAGE_SIZE);
> -    _di.p2m_size =3D minfo->p2m_size;
> +    minfo->p2m_size =3D _di.p2m_size;
> +    minfo->p2m_frames =3D _di.p2m_frames;
>  =20
>       /* Make space and prepare for getting the PFN types */
>       minfo->pfn_type =3D calloc(sizeof(*minfo->pfn_type), minfo->p2m_s=
ize);
> @@ -141,7 +136,7 @@ failed:
>       }
>       if ( minfo->p2m_table )
>       {
> -        munmap(minfo->p2m_table, P2M_FL_ENTRIES * PAGE_SIZE);
> +        munmap(minfo->p2m_table, minfo->p2m_frames * PAGE_SIZE);
>           minfo->p2m_table =3D NULL;
>       }
>  =20
>=20


--------------5A87F5F0F20AC31707ECC2F4
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------5A87F5F0F20AC31707ECC2F4--

--ny1gN91qbXXbYYL295902lUUTDGenPpQL--

--D1QEOYA3CJOVjGDG6SEiaroVJh0aEYbGN
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDxK58FAwAAAAAACgkQsN6d1ii/Ey//
uwf9HoHHe5824V8rhQUmeAj5ogoXxBQ3QPJMyxVMK45H34Vbvi1mn3uoTVNsvLux8QZnOeAVsu7a
XflY+Ipjehlja6PnHSWmkrlCmQKou1GnLs0XMiaSea2W702Ph/3wk8jmIV86ZhDi6JN4MsZTsLzB
ueO9AO/PFCVvepFGZ2x7xuRTQ+Ek9xDZzDtk2589Xzl0J3eWXslrFF2jj3rmG8RiO8kb3L7vzQfd
aOJ+24nIL4LhbiTY9lEsKDfAnDbz/SsreKI4PIPFWjrKW76VBQV6wP8L6ZtR3LwiBNsUpMTVXEWh
EUx0qcqjwKplvKKYnWdYkodoKwYykNBTk+snQX/pcg==
=ZSej
-----END PGP SIGNATURE-----

--D1QEOYA3CJOVjGDG6SEiaroVJh0aEYbGN--


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:03:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:03:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157042.289841 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Hsw-0004Vt-5V; Fri, 16 Jul 2021 07:03:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157042.289841; Fri, 16 Jul 2021 07:03:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Hsw-0004Vm-2Q; Fri, 16 Jul 2021 07:03:46 +0000
Received: by outflank-mailman (input) for mailman id 157042;
 Fri, 16 Jul 2021 07:03:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4Hsu-0004Vg-Lp
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:03:44 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 304523af-51da-4053-a819-70dc0c28d2d3;
 Fri, 16 Jul 2021 07:03:43 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2107.outbound.protection.outlook.com [104.47.17.107])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-3-3zmO7_nHN-af6hhiGpxdBg-1; Fri, 16 Jul 2021 09:03:41 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4606.eurprd04.prod.outlook.com (2603:10a6:803:70::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.26; Fri, 16 Jul
 2021 07:03:38 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 07:03:38 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR03CA0038.eurprd03.prod.outlook.com (2603:10a6:208::15) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 07:03:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 304523af-51da-4053-a819-70dc0c28d2d3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626419022;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=+eenM6kYJAF/iOgZT54XXqCydbCYs4xSnzxr0nwGPqM=;
	b=CAGc9qftFH4OEKZAvHTdud6QZoIujzi0g02EIlDefEC7HNgSbg8IfsyYh62N1GeKG+6n+G
	+TcG/yJ89cjmEqVB9oXtlWe3v8dhr+VjNeMYnyoApdsXYcBXdawDSZdOWbt+LnusHXggh/
	ARzxv5E/5uOMIWJEedjOnvur3Y7W1JQ=
X-MC-Unique: 3zmO7_nHN-af6hhiGpxdBg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XBn9ulV6IAvtdOvG76EiHZpfvF9sz/BxQwXy9EuPxOyoWnA337FP0X+xnPJe7a48VNZ1NKGLKLv5SmeJU6h85Hv0l1GSiYtPtWaTvFrkcaR1GnH4IlfYFMMrLq7gBDKiLx57qfw4xNZa5SKvX/DK9jaZ+DKVch+m+Ff6Q9BF9W+TIS7iziBsonv93pQHHC2ubObXpXZa2dXOxN4cPMSK3ypdPiO1byutEpo4qY3MnmOAWYFQ1gGeZwiFQIgA+pUqxqUqaPfZsElyphSR20tkltNnmz4HaDFI4QbSVOVF2X1QagQyN4OJk+4BkJgCdIK25lCx7zXfprg8km5qP5JkXQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+eenM6kYJAF/iOgZT54XXqCydbCYs4xSnzxr0nwGPqM=;
 b=cjDaYEAz8QE+SHPj6DQK+508Zx6o97D+VORiWtC14pX/4fPWN06ALDbo0SkHmFXLC7a7d4SS2SEZ2X8mZdwZN/PegGtA31YmIckxHlWv6vomQHVpC+/SddTqarOevMRRSw0ut6yei7A8wcLoMFX2BC+802GJ6jSe25EBw9yNZ2dBAVk4u+qtlLURoH6OrZbuWTks6KC+cWdsmV9ILkMB6pTR/obVdFbaVtdICkHFeKPbMc1a62YWQu4JlBY1k5hhXnV3ZpUaQJDTFooUsqEsoHohN66JgP5CXSm/VS7umxY1VdMeytxP9h2mjlUZvcmk1p72QdVIw5Q6w5wGRZBmOQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 07/10] xsm: drop generic event channel labeling
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-8-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <91c4a46f-83b9-1156-c685-0d8d9916fff7@suse.com>
Date: Fri, 16 Jul 2021 09:03:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210712203233.20289-8-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR03CA0038.eurprd03.prod.outlook.com (2603:10a6:208::15)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 476078fb-6d62-4e0b-ba50-08d94827d633
X-MS-TrafficTypeDiagnostic: VI1PR04MB4606:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB46061FF0CA0A1F77893C2AADB3119@VI1PR04MB4606.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	bMokM5EGSOjTv4Nn+lmGK8sXuJ3GB7wEODiiEZL+jxXNaJHgUWKAyXhUNkGbM6oQtqhTBa6JzcWESeWvGXXfYM2VUrAhifWSoIkaKMhjKbpMOODuMqQS+IS7m5Bs+hwyL77MijRPuknZQQmYwnBscUBShUOgT9g63/N+DazS+8QUGxuT5huuuNzdtaGz5LHs689/zRt5qtHC/Xkiqxrh4n/tO0I8+sHULgbK9/YTa6hlngtz23yf+1kSdJcbb48tLpOI62aioesiWdVLLscxeebWjkQPHLCnp9ytAOkOSW4C6AnkI69ZS6uH9XoGnFmuzJ5p48A39J6/KeFOJ9pdK+R9TY7XVpdfI4M65PpyMscbDRRoGbMWnQ3SZjAymeFNpTyIP1C6NLpyspQrHztGfX20pzYW3YpM+noJnuY0QC95+CBmZnQmhu5m0V1UexKo7rSN7sN41IFmNHEd3iYuSNsuOrFfEZbx1B+QiJssJRbjIz5JyZyQCSuLB1IAFWnJ2FADOhByeHa7ovXM29gFc3v3Lo3eTmXNtY5R5QhgObTzyNTsPLWxY1QB4QKgpzFAvhsH/ccYiQPSIoSIjHljQyp1PZ2A+Z1/O+zaqKexhK445k21oExXqi1GoeskFBiGHvOwDfa1WHlWYdoILcZsHkNEOg/6aeZy9KmIuaAqCb1NMhLD2IvMvEC/6/D6lqKN/0AA3vfED3fSSLr8sEXBft50ddqeI4rR9qkGVzE+ETyL0CMRVO7MRZMjMij0fg9U
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(39860400002)(366004)(376002)(346002)(316002)(8936002)(66476007)(6916009)(66556008)(2616005)(956004)(16576012)(83380400001)(31696002)(4326008)(8676002)(66946007)(86362001)(31686004)(54906003)(36756003)(186003)(26005)(53546011)(2906002)(6486002)(5660300002)(38100700002)(478600001)(41533002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 476078fb-6d62-4e0b-ba50-08d94827d633
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 07:03:38.6053
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: PKCJPJ8lTJpgDWXsJhvRcNdQhTrQUNOmrAtaYTu6GwZ9A18cF/ZAeUUqD7ca6ycXr/hsKuKLRwogPgp7YAWZPA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4606

On 12.07.2021 22:32, Daniel P. Smith wrote:
> The generic event channel labeling has not been used by any XSM module since
> its introduction. This commit removes the capability leaving FLASK labeling
> field always present. In the future if a new XSM module needs to have its own
> channel label, this or a new form can be introduced.

I'm not fully convinced of this removal: Does it get in the way of
anything?

> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -120,15 +120,7 @@ struct evtchn
>      unsigned short notify_vcpu_id; /* VCPU for local delivery notification */
>      uint32_t fifo_lastq;           /* Data for identifying last queue. */
>  
> -#ifdef CONFIG_XSM_EVTCHN_LABELING
>      union {
> -#ifdef XSM_NEED_GENERIC_EVTCHN_SSID
> -        /*
> -         * If an XSM module needs more space for its event channel context,
> -         * this pointer stores the necessary data for the security server.
> -         */
> -        void *generic;
> -#endif
>  #ifdef CONFIG_XSM_FLASK
>          /*
>           * Inlining the contents of the structure for FLASK avoids unneeded

This comment's "with only FLASK" now becomes stale, and hence would
imo better be updated.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:24:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:24:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157051.289859 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4ICe-0007Sz-1D; Fri, 16 Jul 2021 07:24:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157051.289859; Fri, 16 Jul 2021 07:24:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4ICd-0007Ss-U6; Fri, 16 Jul 2021 07:24:07 +0000
Received: by outflank-mailman (input) for mailman id 157051;
 Fri, 16 Jul 2021 07:24:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4ICb-0007Sm-Tv
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:24:05 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cc6a871c-e606-11eb-8950-12813bfff9fa;
 Fri, 16 Jul 2021 07:24:04 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2177.outbound.protection.outlook.com [104.47.17.177])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-34-NVQk8-L4OUSLJCh8aTHBUQ-1; Fri, 16 Jul 2021 09:24:02 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5599.eurprd04.prod.outlook.com (2603:10a6:803:de::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Fri, 16 Jul
 2021 07:23:59 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 07:23:58 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0020.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19f::7) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 07:23:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cc6a871c-e606-11eb-8950-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626420243;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=Z2jCdfmfREg/XBvRgtwrhr25pvXR9ieoT0/twXDdzb0=;
	b=YXcyhJePIa8ZUBdf8832H8HNtFD0YcLjGqrpj42qW/CfeVhmcNqZ7G4OMIDQSI0pH2COzB
	42H+MhPolYDegQ+P0GIDRGMr2fkK/2shHVfFio078Bxt1fyGn7UxUceHE/KSZ5iIWog3pA
	rzFW0vjG6iN97ON39nFvwdZZ4T/EMlE=
X-MC-Unique: NVQk8-L4OUSLJCh8aTHBUQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ApLVNvPlMmLuOyRrwl5moJt/4yYU8lLXHQwSBnoDa/j8H4bBrynSRoquZCxu5vtr4uoiEIMQHilP59lO4G5qOYMRtctcGxuqDXW+k86fnogDpYs3PSJvsOGlRCG3Kn1yKQzfQExEnsZV94YyVi4+nh54rX0tCl4hyi7bYzMfoBhNf3ZdEl+NCYo2UWfkUCZsz14cyYrwbegsIlAILD1agCYpgQRXooAaKSYdIGWPRNLWvK+krqgQlkjP/jNIFG2RKk1nwOFICypoWeQw+Ub3QxT6mUqfAy48ItXf8kOvYDrxzIxgmUR4qCyP+sdv/lWDuNf6Exa+Ncks4dGfUSsmeg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Z2jCdfmfREg/XBvRgtwrhr25pvXR9ieoT0/twXDdzb0=;
 b=D5ZCQLB2XFpvKyxqLYtG8IT6ztmZKUPnQVNG1VWQpU0bxgmknbwBdKA8wZgildSDOuH92WVN0KN26HlwpGHR8qG6Vk3IzeW4LAENBpOJSbmlm7rwbhJPpe/87c4uelp0JO1ryt9FCOpRKmwL3aVF2GVe/BfPs3Ijd7pggtw1Ke4FAMbIlbHlgmQDPmyfjZbXmL2SdUzfim7pt1Mi7/aDdvLGDMzFhEv/6NZi6DNFSXjbSrRvRWmMi6iQBpj4g+4Fyji1Km5nSBHw6gOBI5l0vK7QIQUB1U1qqUdO8ivJr0Um/YQkZMM5WjZMYcgCBamiJg9sekwU9gd9JSeBV1fuBw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2 08/10] xsm: remove xsm_default_t from hook definitions
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Tamas K Lengyel <tamas@tklengyel.com>,
 Juergen Gross <jgross@suse.com>, Dario Faggioli <dfaggioli@suse.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, Paul Durrant <paul@xen.org>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org,
 Tim Deegan <tim@xen.org>, Alexandru Isaila <aisaila@bitdefender.com>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, Wei Liu <wl@xen.org>,
 George Dunlap <george.dunlap@citrix.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-9-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <2f9d2f66-563d-4e7d-4886-e4fabffebc78@suse.com>
Date: Fri, 16 Jul 2021 09:23:55 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210712203233.20289-9-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1P264CA0020.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19f::7) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4f85d795-fe85-4617-1587-08d9482aad8c
X-MS-TrafficTypeDiagnostic: VI1PR04MB5599:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB55992D605B7FD18C7EE46B98B3119@VI1PR04MB5599.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	PlLIZRLiu7Lxvisu0sU9GaoQ3dYpO7jS+oAAAAL/H9SsgD1MEusT2ph4TuMZu8Pe7P8UmwWQSixlS6634xl8BGgfFhhLO+rIE6ZajcsTYl1J8y7FMKDbUkaMCyOgd2B9/hD5FSZczpT9KJVAqWsZMu+TYXPFPLmJZqPs8/r1unXGtZys30E5dBJerb5rsCckDvBAiTqg/QQ+oUsSclR1D/XJ80IWkwblXZNK1C2eQu2iQJsiS2PPsGBr6LWRf20abGLszqKNpoi0QmVpN2ZR9iLBvz6npBI6FXTQKxNnCv6BeT/9fwGQKvdK+wyHGxGQjsTnmz3MN7Y2TFbTOBwKbaRP03rZFbC3Rm5+GCcwbzLw7syFuBQevawClsDshBtlTrOHoLsxYr7xHTHOv1ICA4B+psHCnQWYheS+wJFaJbjbcTD2iZgtR0MAmoyRj6K8I5wFg2K49ueASXFgeGe+H4fdh5bMfP420QFWD5hqILO7ujGRLXM7HdRjuo1Z+BC+/AR3/hBMzFhclCsb5IU/pludhXOGKyPeDjpj48OoiTrFfhY6BltmhOfZy4hdmNZwaGCyvsYHQq26eQxJhVjapB9vrvkL2LbdxRmaR0F52/+oRgtJ7Wpuqd3+qi5KjiwD0a9drPkb9h3xrgL3AvWvm1sWKjh9qpI+N+QkS2uiOHZY7aOv+0D1G+PQhJpumzASK3AVZQM2H0rWI/LqEW4bniqovIiIDinEicuVcqZPPcZ8KuAwxJGTgsGdf7MkBYAZ
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39850400004)(396003)(376002)(366004)(346002)(26005)(478600001)(8676002)(316002)(6916009)(16576012)(31696002)(54906003)(186003)(8936002)(4326008)(53546011)(86362001)(5660300002)(66946007)(2616005)(956004)(31686004)(66556008)(36756003)(38100700002)(7416002)(2906002)(6486002)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4f85d795-fe85-4617-1587-08d9482aad8c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 07:23:58.8240
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: YkR9BT5WmrlHs5OOHsiKcosskkvndFfxqu7ROu41igxqNT+cCGgAppaC/RtOrqtBEPpbctpI9SRlbefqJ+S9lA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5599

On 12.07.2021 22:32, Daniel P. Smith wrote:
> The passing of an xsm_default_t at each of the xsm hook call sites
> served different functions depending on whether XSM was enabled or not.
> When XSM was not enabled it attempted to function as a link-time check
> that declared default action at the call site matched the default
> declared action for that hook in the dummy policy. When XSM was enabled,
> it would just drop the  parameter.
> 
> The removal of these values is two fold. They are a redundancy that
> provides little context, especially when the value is XSM_OTHER.

For XSM_OTHER I may agree, but in general I find the call-site uses
helpful to know at least the rough level of intended restriction.
E.g. ...

> --- a/xen/arch/x86/cpu/mcheck/mce.c
> +++ b/xen/arch/x86/cpu/mcheck/mce.c
> @@ -1376,7 +1376,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
>      struct xen_mc_msrinject *mc_msrinject;
>      struct xen_mc_mceinject *mc_mceinject;
>  
> -    ret = xsm_do_mca(XSM_PRIV);
> +    ret = xsm_do_mca();

... to now understand what this enforces (or not) I have to go to
the actual implementation, even if I only want to know the trivial
dummy incarnation of it. This effectively extends the "provides
little context" from XSM_OTHER to all hooks.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:34:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:34:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157057.289871 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IME-0000mI-VY; Fri, 16 Jul 2021 07:34:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157057.289871; Fri, 16 Jul 2021 07:34:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IME-0000mB-SN; Fri, 16 Jul 2021 07:34:02 +0000
Received: by outflank-mailman (input) for mailman id 157057;
 Fri, 16 Jul 2021 07:34:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m4IMD-0000m5-OD
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:34:01 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m4IM9-0006rO-Pf; Fri, 16 Jul 2021 07:33:57 +0000
Received: from [54.239.6.184] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m4IM9-0004Ua-Ip; Fri, 16 Jul 2021 07:33:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=5xaAwP3IC9yXeEouZ/YfdS2OMY75k8DVB5cIyF7d08o=; b=N+VkwmeJo+5sB92+jHZTqguTI1
	kr3WNzBjdDpozIe9rAVVgVl5UXOuASgXOxY39cHTQvgEuMbF4e2R1GynLXwNRJYOpoidbEAMifbLg
	WkVeQwtZgAwB1FXg6K1M0OOAKNt6qj1/y9hOYEaVtid+nqdCttYzYBOMQKxcfBkt0ps0=;
Subject: Re: [PATCH v2 2/4] build: use common stubs for debugger_trap_*
 functions if !CONFIG_CRASH_DEBUG
To: Jan Beulich <jbeulich@suse.com>, Bobby Eshleman <bobby.eshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Elena Ufimtseva <elena.ufimtseva@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jun Nakajima <jun.nakajima@intel.com>, Kevin Tian <kevin.tian@intel.com>,
 xen-devel@lists.xenproject.org
References: <cover.1626286772.git.bobby.eshleman@gmail.com>
 <d74af998bfd8d00e57ea82ce6731ccf2afc8e95b.1626286772.git.bobby.eshleman@gmail.com>
 <b1dabca1-17ed-1f20-f95c-5113f09ea2bb@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <aee68d31-3eba-4316-d9c8-1a4d68d2c176@xen.org>
Date: Fri, 16 Jul 2021 08:33:54 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <b1dabca1-17ed-1f20-f95c-5113f09ea2bb@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 15/07/2021 16:18, Jan Beulich wrote:
> On 14.07.2021 22:37, Bobby Eshleman wrote:
>> --- a/xen/arch/arm/traps.c
>> +++ b/xen/arch/arm/traps.c
>> @@ -16,6 +16,7 @@
>>    * GNU General Public License for more details.
>>    */
>>   
>> +#include <xen/debugger.h>
> 
> I don't think this is needed here; instead I think ...
> 
>> @@ -41,7 +42,6 @@
>>   #include <asm/acpi.h>
>>   #include <asm/cpuerrata.h>
>>   #include <asm/cpufeature.h>
>> -#include <asm/debugger.h>
> 
> ... this wants to be done in patch 1 already.

+1. I was actually going to ask in patch 1 to drop <asm/debugger.h> as 
there should be no more callers of the debugger helpers.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:35:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:35:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157062.289882 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IN9-0001MD-8s; Fri, 16 Jul 2021 07:34:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157062.289882; Fri, 16 Jul 2021 07:34:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IN9-0001M6-5h; Fri, 16 Jul 2021 07:34:59 +0000
Received: by outflank-mailman (input) for mailman id 157062;
 Fri, 16 Jul 2021 07:34:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4IN7-0001Lw-Ls
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:34:57 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c19d4e2a-2530-4d73-b6e4-df6db13bf2ff;
 Fri, 16 Jul 2021 07:34:56 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2052.outbound.protection.outlook.com [104.47.14.52]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-23-6FcKANHhNT-qe1b2g85KuQ-2; Fri, 16 Jul 2021 09:34:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7150.eurprd04.prod.outlook.com (2603:10a6:800:12a::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Fri, 16 Jul
 2021 07:34:52 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 07:34:52 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0011.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 07:34:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c19d4e2a-2530-4d73-b6e4-df6db13bf2ff
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626420895;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=WeBT2B+0DO4WfpakyKBnw75OOhwBBh/evF99g3h3TOk=;
	b=R+vipjqSj4o0+vZ11stuYtwQLi5r9oCkluACgVddYR+oeTNbOfq8tvNib3ZMzviFk6kHUt
	uO+STuTO0JNHS/yxcYRz1RQTrwUF+3+Ze4KGbBHHqUlvC420yrGEBiI4WMX8adS7bNhR1H
	P2mnTtFARhBNlIQW+ueXJRuUEAGJBaY=
X-MC-Unique: 6FcKANHhNT-qe1b2g85KuQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JICVJB6fgHHskJZTohKpIEeN5mLDCPOP+qfa4ArV2hllybn66/dG11RpwN8xeMZ4/D2fVacciG4Eb/R48m5PwtyVi32LlTO9kqcOchpkH49w3MHgy/Z3aMgeqME9mJS7ylS6id9hy8IVY18ebmy2Ki0xVSAkwj4JDuga7HCDMqxbyqcLaS9z8VN1EUrdB2qkFHVf5TsJkOqIpuqPubDmhx4y00LFBZ5d9QZoTsMi71b9Coge7XvECgPXtWPZEPwzQUrR0hJ/sg9zYAIsxzHsHrUQqpY20ldYmMQ31ZYD1BXjvtzT5ZzZ2n3bUAAT/AHSfWONFk6Jo/cvYfWouxbc8g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WeBT2B+0DO4WfpakyKBnw75OOhwBBh/evF99g3h3TOk=;
 b=AV6C6+lbrDtIlanVRIq1dGNGP5jjeTTjrhOHhkxa56vydtyuW6Elz1k4QP7Oqkak9lInIRonU6ALqO7R7aSZ+UDRFMhViRiKV3551qf3QxAnapKbRvHqYQITXL+aGw7JaLvg3quuMcesw8XlCZluES/V4+Wqe1rZoRLM9KViAuB5cj/gXLEx+G51OzB7i9LhG5lqNpEyrSWT4Eky87M3kqlvkHPqIs5nWJ374R1WOiPu5P0DmrbWu8SDg0uo4dABgl82bKMUULFsfPlJ/vWwQH7kH8bjfnMDlQRHXpr8dkvt6cTBpjygFloQlvVDSAcN7p4N/OQjdkrviBI9v7ldbA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 09/10] xsm: expand the function related macros in
 dummy.h
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-10-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <34c71bc9-18e8-08cd-d55f-9f5f97bde91e@suse.com>
Date: Fri, 16 Jul 2021 09:34:50 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210712203233.20289-10-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR2P264CA0011.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::23)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 7ff24c80-c33a-4204-1211-08d9482c3350
X-MS-TrafficTypeDiagnostic: VI1PR04MB7150:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71502F8A809F448FA235F43DB3119@VI1PR04MB7150.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2276;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	xzeZgqA6lYS9TO5mBa3mMFZBQ8BpHqlrl+lhNPJKTTOicw5iKwAgUTzLUPupi9GRDjXBQhWZT6ubqSoogpKaE/P5OeNScavUjYT1peS9gYr6DJ7AqkNiE1ZXduos3AuNw4DO1TDjytO5j8p0pFgvULDmccaZfmO3n3UZIGxO9tp4YA+w/rTofTMA30n/r8jtoPPaWkn0q54kYPvwoKoEY48QoXCw3b4xWib8jBWDyW6ZgPmFmGLSinSVCwb3AAo7Ll1GpibDWOUkKDd+0rACnM5cZacoCC3pgdnuybLtJRsY4u12d5+OodELjbY6qa1L4Fq1uK2Lw3LtHB44I1REFpVmuvnAELpvpR9BJ0qOCpoSLUi/p6JJ+RvHVHm8DJsfxKvTQuAT367ahKOZQsI3uM/jplFAkMh7/T+p65qYiB33TTFj9UzjNlFODxcgg4Ibzhu/xq0rTpmR888jvq9OWCVG3jxfEM/Qc90ZhAR/3Iu8Mgy8Rn6weRzsNDrqpBK5ZJJ/Cw5gbKEZ4nuQ5y7ChjeVcbojnT4EapmAIXH8uJ33NWYSz5QvhGlADwhNrE8j6TB9jD6efS5nJXga5wxEJtb1tyhZ/5In59b1cpvPx0GGg0w3PGFn5V2XE7Rpc9/69EvtcMhTvpLjhmJbM3bS92mznJXHQ1GL9yi22pVMKZSed9D6QwFk1Hj+zK3qXESM7MPBOtCOPFS5CZpDIvOyX7HHM38nBNdtXGVFVkBVluk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(366004)(136003)(346002)(376002)(2616005)(6486002)(956004)(38100700002)(8936002)(16576012)(316002)(2906002)(8676002)(478600001)(31686004)(36756003)(186003)(86362001)(83380400001)(26005)(66946007)(66476007)(53546011)(66556008)(5660300002)(31696002)(4326008)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?Rho8ihS7mDaTu94zTK+RwHf1I8xt/gJIAI9wBD/?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7ff24c80-c33a-4204-1211-08d9482c3350
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 07:34:52.7841
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 6QeL4fZ5hgkgQBp4Geogu7yAiL1F+U4bjmX/1UvwFFwfOcnawoxr6Ic6bwgZvtr1ikhiAKMUXIUbBJi/k4WqEQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7150

On 12.07.2021 22:32, Daniel P. Smith wrote:
> With the elimination of switching how dummy.h gets included, the function
> declaration macros are no longer necessary. This commit expands them out to the
> only value for which they will ever be set. This results in function
> declaration lengths changing and since some definitions did not even follow the
> 80 column wrapping style, all function definitions were aligned with the
> predominate style found in core hypervisor code.

I'm afraid this last half sentence is quite far from true:

> @@ -82,43 +79,43 @@ static always_inline int xsm_default_action(
>      }
>  }
>  
> -static XSM_INLINE void dummy_security_domaininfo(struct domain *d,
> +static inline void dummy_security_domaininfo(struct domain *d,
>                                      struct xen_domctl_getdomaininfo *info)

Padding wasn't good here before, but you clearly do not change it to
either of the forms we agreed on as being the goal for consistency:

static inline void dummy_security_domaininfo(struct domain *d,
                                             struct xen_domctl_getdomaininfo *info)

or

static inline void dummy_security_domaininfo(
    struct domain *d,
    struct xen_domctl_getdomaininfo *info)

. Further down there are enough other examples.

> -static XSM_INLINE int dummy_domain_create(XSM_DEFAULT_ARG struct domain *d, u32 ssidref)
> +static inline int dummy_domain_create(struct domain *d, u32 ssidref)

When you have to touch lines anyway, may I suggest that you also take
the opportunity and convert u<N> to uint<N>_t, to bring this file
better in line with ./CODING_STYLE?

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:38:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:38:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157069.289895 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IQC-0002Ku-Os; Fri, 16 Jul 2021 07:38:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157069.289895; Fri, 16 Jul 2021 07:38:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IQC-0002Kn-Ke; Fri, 16 Jul 2021 07:38:08 +0000
Received: by outflank-mailman (input) for mailman id 157069;
 Fri, 16 Jul 2021 07:38:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4IQB-0002Kh-23
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:38:07 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c1f8efc4-e608-11eb-8950-12813bfff9fa;
 Fri, 16 Jul 2021 07:38:06 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2056.outbound.protection.outlook.com [104.47.14.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-28-mpya36VCPSChMBwTrf2SfA-1; Fri, 16 Jul 2021 09:38:03 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7150.eurprd04.prod.outlook.com (2603:10a6:800:12a::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Fri, 16 Jul
 2021 07:38:01 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 07:38:01 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0287.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::35) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 07:38:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c1f8efc4-e608-11eb-8950-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626421085;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=c4Lra1NQSNlxKXfen2jIx+E+ykyuj4A1BD+bmvFbKd0=;
	b=C8LiPATp9AIoSVRNoYH6JpQCtOPK7zQa51ed5eRWxfcCvQ/CGg5Rbsps3WqBun4w6BnFbY
	c3CtxSHZAjtQdzSxaQ11hylDqj/J7wjRGfZ9bo/+FhVG9zDCqOchsT1zOQ+7KR1rStvwTy
	Eq/IBZFZdgt0zU8DFFUNSBWSy06R514=
X-MC-Unique: mpya36VCPSChMBwTrf2SfA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XaYnx0pI5gv1R7YMcDWTX8Wfg1UR5qt0ImVW1j5SBwz0pUoZl3D6kifz+lu/wPrB2EIJD5Tt5J49bRqoXTCnej/ZWpaXgGt4TlP77Juer8ysjs/xGCn6N5fe7Rou57Qm+ZK91PPt+FFiTmPI2i/pxm2DcgsM7DsBmr+f7hwoAY0VXg4LyvFfZ5h/70j0yFCLu3ADgekB9k28d4WUuBV84emHF8SpB/wiFdtVUeFBvj7hyGRcDcpe3m27exZExqw1CmjVnaH/8EEV+YjGy8QxqUYuYh4k0WTgZC4rRL4UUzPY6L4gg17vjYmgcb6G70frCwARpRykPkKjl6MHyWD8cw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=c4Lra1NQSNlxKXfen2jIx+E+ykyuj4A1BD+bmvFbKd0=;
 b=QuTi6MFCAfLXHAagseqTaxKnL3EWcshiKF+SfF7o7grfATO20+o2WnmI3GTbfOfE+oGIgaiCbW0LSmCPIES3z76LWRQDOw1v9C6Xda9DE/5JeoFJKvyTMhmFJQKISmDgocSdb2H1uecaNnPqreOLrU9WycWYi0Amn9/SAdLYGytO2EORlLuBI4C5LNYODUFTdzgtmVbRKT0iPGw2v4pAKoXWyW0NinxMABqblGJfakaonUOAJn3NwqRZKluO9UIoUwbgeCqcfWI8SgF8Ew0l8l/5Ya38f0UUFAawvNaOdJAllo+JxJUi8B48rkc3A+zrbz1Ugcrxv4dqe+vEZfMtgQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 08/10] xsm: remove xsm_default_t from hook definitions
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>, Tamas K Lengyel <tamas@tklengyel.com>,
 Juergen Gross <jgross@suse.com>, Dario Faggioli <dfaggioli@suse.com>,
 Paul Durrant <paul@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, Wei Liu <wl@xen.org>,
 George Dunlap <george.dunlap@citrix.com>, Tim Deegan <tim@xen.org>,
 Alexandru Isaila <aisaila@bitdefender.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-9-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e60f1490-436c-8e2f-7c9c-99fa7a1bfc31@suse.com>
Date: Fri, 16 Jul 2021 09:37:58 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <20210712203233.20289-9-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0287.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1::35) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2f8f62a3-4db1-4338-ebfd-08d9482ca3fb
X-MS-TrafficTypeDiagnostic: VI1PR04MB7150:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB715040DF5C33569841BB24A3B3119@VI1PR04MB7150.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:6108;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	U+jDkmXQrFgA2KP1S0cHg6KtebIV0Go8MzjIWGjplYhKc87gFDg1wWVQyLHEjNmy/Elz5r5IWxND49GECGZLoztO2NLmZHN1dconadcgmpL6tpLluzPXjmxGN7cKCv0/A1O/BuBqG9Gp0t7tOcuuXkitFPiq7v6oEj6ev6+RgCWxcHBFchwVU3lxfi+uQDVIAa/VBO4+NSNudIPx3ZJ2eUh4UArRi06yJeluoJ7JjvcU0cnpBVfdp1i8nwI7YYEh3UA6X1e+Dqq8nQuC3WP9n1Z1iiq2qYDBPTiK4ZM6QW7vNJ8UfLnSm4GjlyP3Akf1ldyBv17cT6xBBLOhWIadisMt/08mMklVshmOO4R19Yn9nz41GSJJgrY7O0IrYEqA0fLhTd9jEq7U7HQ4EVGZ6y6ZXGtvfvEVv96obEqktOZArSL9dgVJOKnTiD6Gor6fMRfemaws1+XAPmwSC11nmBV5Gs0Dx/3+SeLs227Gpqn8Gpgl8A2tHKXc8/UhOfe+NmJrx+THXb8KxpJPag2FPqmJy6cshSUy+Bi9SkgFrJvCIVUZyM5eys8cCBzPxwqr7MWphzWl4K5uw0ZU822b+Hp/RLBjYeRaEdUelRTCTInXD3sSNyuS1ZaqwkI/Ar9bjCesrTlhXAGycbF7QN5AaNIyqz7qRFktXu1RmgQun92ELy0/NU5UYg/Q1u182X52a3UumQk69HtFTioZeS2VJxfRc7f7Opu3ikCCWlzo+1I=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(396003)(366004)(136003)(346002)(376002)(2616005)(6486002)(956004)(54906003)(38100700002)(8936002)(16576012)(316002)(2906002)(8676002)(478600001)(31686004)(36756003)(186003)(86362001)(83380400001)(26005)(66946007)(66476007)(53546011)(66556008)(5660300002)(31696002)(4326008)(4744005)(7416002)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?TIS7WiwfwiWuciil8Df9W395bOPMu/QhxRbhkN0?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 2f8f62a3-4db1-4338-ebfd-08d9482ca3fb
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 07:38:01.8191
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yO35ry94z14xkc4C2zpmqTr+NtbbJu6nWV7pqXSsoUScMYtRGEyxmeyCAdSFqmwo96v3wbIRLrLSgKLVSSbmIQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7150

On 12.07.2021 22:32, Daniel P. Smith wrote:
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -30,53 +30,53 @@ static inline void xsm_security_domaininfo (struct domain *d,
>      alternative_vcall(xsm_ops.security_domaininfo, d, info);
>  }
>  
> -static inline int xsm_domain_create (xsm_default_t def, struct domain *d, u32 ssidref)
> +static inline int xsm_domain_create (struct domain *d, u32 ssidref)

When you have to touch such lines anyway, may I suggest that you also
take the opportunity and drop the stray blanks immediately ahead of
the opening parenthesis, to bring this file better in line with
./CODING_STYLE? And as just said for a later patch, converting u<N>
to uint<N>_t at this occasion would also be nice, for the same reason.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:42:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:42:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157076.289907 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4ITz-0003lh-Ch; Fri, 16 Jul 2021 07:42:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157076.289907; Fri, 16 Jul 2021 07:42:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4ITz-0003la-9m; Fri, 16 Jul 2021 07:42:03 +0000
Received: by outflank-mailman (input) for mailman id 157076;
 Fri, 16 Jul 2021 07:42:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m4ITx-0003lU-J0
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:42:01 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m4ITv-0006zh-NT; Fri, 16 Jul 2021 07:41:59 +0000
Received: from [54.239.6.184] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m4ITv-00055x-H9; Fri, 16 Jul 2021 07:41:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=XyJjAV8FbxT1MJk+HgkgjCQuFz4Pia04E60pY1ize5U=; b=Kkud+Z1fi68Fz1p5/fOGNE71Hp
	oPxHJsRMSzNVzbCnf8o6PI/crbQhOyzM8dfdaKOBqMDxdVLZWoQsZpD1gwoDuJR0AhTxUxTMrmpMG
	Rl6ZJVd9q5UtetFUsbrPBZYYacC8CW8x731n7GNhGH/73HUrF95S+9GBYq4+omVh5gYs=;
Subject: Re: preparations for 4.15.1 and 4.13.4
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>
Cc: George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Ian Jackson <iwj@xenproject.org>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <c27ae453-d58f-30ac-e73a-c9eb5bc0090b@xen.org>
Date: Fri, 16 Jul 2021 08:41:57 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 15/07/2021 08:58, Jan Beulich wrote:
> All,

Hi Jan & Stefano,


> the releases are due in a couple of weeks time (and 4.14.3 is
> supposed to follow another few weeks later). Please point out backports
> you find missing from the respective staging branches, but which you
> consider relevant.
> 
> Please note that 4.13.4 is going to be the last Xen Project
> coordinated release from the 4.13 branch; the branch will go into
> security-only maintenance mode after this release.

I would like to request the backports of the following commits:

4473f3601098 xen/arm: bootfdt: Always sort memory banks
b80470c84553 arm: Modify type of actlr to register_t
dfcffb128be4 xen/arm32: SPSR_hyp/SPSR
93031fbe9f4c Arm32: MSR to SPSR needs qualification

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:50:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:50:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157082.289919 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IcH-0005Un-7g; Fri, 16 Jul 2021 07:50:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157082.289919; Fri, 16 Jul 2021 07:50:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IcH-0005Ug-4O; Fri, 16 Jul 2021 07:50:37 +0000
Received: by outflank-mailman (input) for mailman id 157082;
 Fri, 16 Jul 2021 07:50:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m4IcG-0005Ua-J4
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:50:36 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m4IcF-00078l-9x; Fri, 16 Jul 2021 07:50:35 +0000
Received: from [54.239.6.184] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m4IcF-0005kg-3X; Fri, 16 Jul 2021 07:50:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=nuvAn3Osm61b7V5FfBQLaw6p/rQzgD0Flb9xeaxLFKg=; b=cdubYlcH5v0JlbFipYPdCSgDs3
	EL7xEEwkngyJu+4r/IkkRrr6egBeu7J1S9RvYPAWmLR864zMHf+RKGfMFimV36EcAj0inyl4f1Yah
	2rcQVHQ2miHFvD1NJC03TkCjiV2YcMdSSyMpYp6XFbNC0fbNEoAZSwWaSP3s18M4KjxA=;
Subject: Re: [PATCH v2 13/13] SUPPORT.md: write down restriction of 32-bit
 tool stacks
To: Jan Beulich <jbeulich@suse.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <ddff8b28-274d-d7fe-4ba9-0772859b7a72@suse.com>
 <e12989f7-9217-e2b8-a17d-5c252dc89248@xen.org>
 <dfc17ae6-2100-cb27-9826-1f6001788707@suse.com>
 <870cae2b-5601-b10b-926b-0995e661ffc1@xen.org>
 <d91b5d10-03a1-14fd-0b92-0de5e4e8d482@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <efc24648-5858-5b81-e31d-49bf9743e27b@xen.org>
Date: Fri, 16 Jul 2021 08:50:32 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <d91b5d10-03a1-14fd-0b92-0de5e4e8d482@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 15/07/2021 12:36, Jan Beulich wrote:
> On 15.07.2021 11:05, Julien Grall wrote:
>> On 15/07/2021 07:38, Jan Beulich wrote:
>>> On 14.07.2021 20:16, Julien Grall wrote:
>>>> On 05/07/2021 16:18, Jan Beulich wrote:
>>>>> Let's try to avoid giving the impression that 32-bit tool stacks are as
>>>>> capable as 64-bit ones.
>>>>
>>>> Would you be able to provide a few examples of the known issues in the
>>>> commit message? This would be helpful for anyone to understand why we
>>>> decided to drop the support.
>>>
>>> Not sure how useful this is going to be.
>>
>> It would at least be useful to me, so I can make an informed decision. I
>> suspect it would also be for anyone reading it in the future. This is
>> rather frustrating to find commit message with barely any rationale and
>> no-one remembering why this was done...
> 
> Well, I've added "There are a number of cases there where 32-bit
> types are used to hold e.g. frame numbers." Not sure whether you
> consider this sufficient.

That's good enough for me in the commit message.

> 
> Problematic code may be primarily in areas Arm doesn't
> care about (yet), like PCI pass-through or migration. But see e.g.
> - xc_map_foreign_range()'s "mfn" and "size" parameters,
> - xc_maximum_ram_page()'s "max_mfn" parameter,
> - libxl_dom.c:hvm_build_set_params()'s "store_mfn" and "console_mfn"
>    parameters,
> - xs_introduce_domain()'s "mfn" parameter,
> and quite a few more in particular in libxenguest.

That's quite a few :/. Thanks for listing them on the ML, they are 
useful to have them log on the ML.

> 
> And then there are also subtle oddities like xc_set_mem_access_multi()
> having
> 
>      xen_mem_access_op_t mao =
>      {
>          .op       = XENMEM_access_op_set_access_multi,
>          .domid    = domain_id,
>          .access   = XENMEM_access_default + 1, /* Invalid value */
>          .pfn      = ~0UL, /* Invalid GFN */
>          .nr       = nr,
>      };
 >
> Clearly ~0UL won't have the intended effect even for 32-bit guests,
> when the field is uint64_t (we get away here because for whatever
> reason the hypervisor doesn't check that the field indeed is ~0UL).
> But I wouldn't be surprised to find uses where there would be a
> difference. One of the main aspects certainly is ...

Whoops :). One topic that came up on my series to drop the M2P helpers 
on Arm is the lack of a suitable define for invalid GFN.

However, at the first look, it didn't seem to be easy to introduce 
because the GFN is sometime stored in a 64-bit and other time in 
xen_ulong_t.

> 
>> I vaguely recall a discussion about 64-bit hypercall ([1]). I assume the
>> decision to drop support is related to it, but I have no way to prove it
>> from the commit message.
> 
> ... this. Some XENMEM_* may return 64-bit values, yet the hypercall
> interface is limited to "long" return types. Not even the multicall
> approach taken to work around the restriction to "int" would help
> here for x86-32, as struct multicall_entry also uses xen_ulong_t
> for its "result" field.
> 
>> It is also not clear why adding the restriction is the way to go...
>>
>>> This would be pointing at the
>>> declarations / definitions of various tool stack internal variables or
>>> structure fields. Which also is why ...
>>
>> ... is this because such issues are too widespread in libxc/libxl to fix
>> it in long term?
> 
> Fixing is an option, but until it gets fixed (if anyone really cared
> to do so), spelling out the restriction looks to be an appropriate
> step to me (or else I wouldn't have followed the request and created
> this patch). Once suitably audited, fixed, and tested, I wouldn't see
> a reason not to remove the restriction again.

Agreed. I was mostly wondering whether this was a matter of couple 
patches and could be restricted to maybe libxl (IOW toolstack based on 
libxc may not be affected). But from what you wrote, the issue is quite 
widespread.

Anyway, this is enough to convince me that dropping support (until it is 
fixed) for 32-bit toolstack on 64-bit hypervisor.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 07:53:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 07:53:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157087.289931 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IeZ-00066m-L5; Fri, 16 Jul 2021 07:52:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157087.289931; Fri, 16 Jul 2021 07:52:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4IeZ-00066f-I0; Fri, 16 Jul 2021 07:52:59 +0000
Received: by outflank-mailman (input) for mailman id 157087;
 Fri, 16 Jul 2021 07:52:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4IeY-00066Z-Dr
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 07:52:58 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0b70fdda-19c6-416b-8e7f-e9566d28c304;
 Fri, 16 Jul 2021 07:52:57 +0000 (UTC)
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2056.outbound.protection.outlook.com [104.47.9.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-33-Tfa3Eux3PcWRHmotdLQFLA-1; Fri, 16 Jul 2021 09:52:55 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3392.eurprd04.prod.outlook.com (2603:10a6:803:7::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.25; Fri, 16 Jul
 2021 07:52:54 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 07:52:54 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P192CA0024.EURP192.PROD.OUTLOOK.COM (2603:10a6:102:56::29) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.26 via Frontend Transport; Fri, 16 Jul 2021 07:52:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0b70fdda-19c6-416b-8e7f-e9566d28c304
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626421976;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=pMwtzzVfENFIeyVxHbh8rDEGhkNjoKOCi0g9iVF0DMQ=;
	b=U4xPIDwRBNH2G1fReFWqiBC3XPzTJ6BAyr/AZeTs+GNz3bkMqnGqOrJcPRcUSOIpuyxkKs
	YuKH0iFS3dq8nPy+k1fnqLzFdvileSlLsTzlASXHSrvGhgrC+eFnVGc6uWB09wOlTr2yF4
	3cHziLgZbkWvA7cmreo2+vhvsYx17u4=
X-MC-Unique: Tfa3Eux3PcWRHmotdLQFLA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Q/zXJFT2nhe3DH7k1KmN9wyXtlBofjhZdlOwQh4U+xcYxgTjN5P5oA1LdS39hl0yrX4MoOAmqyAzu9W1GxCcd1fe4xnkoJHQu+WEFCOhVpj0B3YNO6M6uM2jHKrh4dB85X0lQM7j3KDrnp2YM7kGwKJ0if5+6BF3HxycnYn7JJNljx6iPUScU6IcwIdgwXRsbfNalqG/vTKgh2av1g+f79v3gpC6erLzxbPku21aH9An397B/Ez9UJqTP+GTWLnxnvnLgJy7xl8o/EpQZBh3GXneODDy3hJKNZpmNLJRhaXYYDisKKIUcZPqlPW27eFbK8pj/uZIMKFG/E9eseQG2w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pMwtzzVfENFIeyVxHbh8rDEGhkNjoKOCi0g9iVF0DMQ=;
 b=oABIC9Sfksk5hcDO0QAUL3Nh6O9k65qm8KtDH/sKDQoszRMmfTQQqI4KgNefoM2+qM23OekaAT/9QRsrmKI3lhz0i/8yF+bWrgxKU/e2BmjSEnPwSQ88cZUR4w9yedfUNG8SbbcD8fV3d0NGk9y/SRIeaRDyOyu396ExEmxWhiKq4PH0RRp0jLXGtyFgbqagHhjKg9lt9k2RTEuDcr1UHW18rugR06PTjoUq0WJtCEJQrV0fx7mb2sEbKFtVbj1HrtJyrHSI1rFVAaBb4CXY0yP7ShmQDJarBBpauaQEZ6MeKyFqJgYu/jatlO8e4w3HN7+1mcw2q2w/SqyDRIvv4w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: Suggested changes to the admission policy of the vulnerability
 pre-disclosure list
To: "Charles-H. Schulz" <charles.schulz@vates.fr>
References: <87r1fzclw0.fsf@vates.fr>
Cc: xen-devel@lists.xenproject.org
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com>
Date: Fri, 16 Jul 2021 09:52:52 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <87r1fzclw0.fsf@vates.fr>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P192CA0024.EURP192.PROD.OUTLOOK.COM
 (2603:10a6:102:56::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b50719e7-a57d-46b4-c7fd-08d9482eb818
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3392:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB339258F72BCEFF6BF84C2307B3119@VI1PR0402MB3392.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	mnN17aWMnFrySTy2CCB0rBJ6b/tfrIaSTRRQY5U7P2R5c3dT4xw6Ya9KUbqzGhZIV5wSgF4YrnIYPNEAUuc0BDyfuQHKv+dEIvMXsOfoxs5esQ0ZjxwsMSDEsmW7SY8/E54ISqKc57mye20YraR9qES3ljeVjt52pb8rWbBx0MoG5nhKjTAxHIjy4zY86alOLig8XZSToRPiFrUW4ZB7HDh1gp6lw1HVVmlezXNzx0jaR4k1aSpWBP+fAIipu5IXCAcqWCFIS4M5B9hRsRpNPf/gp/zKKu07B3MvbWAxLzrlObAt2n5Kn44WcHXYdOEEXVIUsz8kapApbv+cu7/F9ab2YyBx0dF8S3fLGS32gNjah+bhxmVqCKCsuWjKl4CIT+CEbsWEtz3bqVo5K+vNk1C2jH1/Z4G5B7MD3Pk68ACAWiob4Q6E+wZR+3aCjpRW7RUkhgpufUiWCsuRAZwnraRyXPhJyHEawLC2r7sfZBac0enhcZwruy1L1jGb1JD7bX6Cyaqd6jlODYrl7p4MXpazqbGHEeZYMoY3xmXURvT3+M1ydgrIfGu0fJs7/UwY/bFrlVl/Ewl4AbiEOuv6Td/eh7XGx0dhqUB1u2n4U9Es25jnU1PA3SMiqsYGGN/XsICf2KtQGNpieZAUv408kFTUwWvauIzoX5vvPlED7HxWIVDM0r7dr5tnpkGyz/A0xGYQp8BSbhLadhqw6+nNEGGWvI4AAy4WAYNFjoRw1irryWN8j7Sy4nUrovUFhR8LIhsM8LnihO2M+OtNHeH85gQ0p/bw+vOegpx1H3px6GEMC8/LYDoR/Hn775eyAig+
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(16576012)(31696002)(316002)(956004)(26005)(2616005)(8676002)(8936002)(5660300002)(83380400001)(4326008)(186003)(66556008)(6486002)(66946007)(478600001)(6916009)(66476007)(86362001)(53546011)(2906002)(966005)(36756003)(38100700002)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b50719e7-a57d-46b4-c7fd-08d9482eb818
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 07:52:54.5872
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: z+I01GapDBBrBlhwkeNPAQ4OdnNzNQawAbHR3Jn5w18Da9dWnxG+OaFLw5c68eRkRahxXcir8CEB55q0wlpWLw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3392

On 15.07.2021 23:23, Charles-H. Schulz wrote:
> Hello,
> 
> I /we /Vates would like to suggest some changes to the policy regarding the
> enrollment to the pre-disclosure mailing list of the Xen Security Team.
> 
> We have had some talks with the French national CERT who has a need to be the
> recipient of such a list. This national CERT -and in my experience other
> national CERTs such as the NIST for instance- is in constant contact with a
> large Xen userbase that is mostly made up of large parts of the public sector
> as well as critical infrastructure operators belonging to the private
> sector. For confidentiality reasons they cannot disclose who uses Xen and
> where it is used nor who may be using it internally or within the related
> national cybersecurity authority.
> 
> Because of that, their request may not be clear or matching the existing
> criteria for inclusion in the mailing list. National CERTs are trusted
> actors and have historically been among the very first entities to define,
> advocate for and put in practice the very notion of responsible
> disclosure. Much of the current practice of Open Source projects in that
> regard actually stems from CERTs. As part of their policies and processes
> regarding vulnerability disclosure, the notion of confidentiality and
> documented, waterfall-like processes of disclosure is play an integral
> part of
> how they handle informaton and publicity around vulnerability. As a result,
> national CERTs (and the French National CERT) do not spread undisclosed
> vulnerability without following established and agreed-upon processes. Such
> processes include, in our instance, the ones defined and followed by the Xen
> Security Team. Compliance with these are the first criteria to earn trust and
> respect from the ecosystem and the downstream users. You can see an example
> of their work here: https://www.cert.ssi.gouv.fr/
> 
> Part of the mission of the French National CERT is to work with
> critical infrastructure providers in securing their IT.
> This kind of expertise entails the securing of these information
> systems before any unforeseen incident as well as after the incident
> (incident remediation).
> None of the tasks involved imply the communication of zero-day types
> of vulnerabilities or vulnerabilities that are unpublished to the
> downstream users.

Would you mind shedding some light on the benefits of a national CERT
being in the know of unpublished vulnerabilities when they can't share
that knowledge with their downstreams, and hence their downstreams -
as long as they aren't themselves members of our predisclosure list -
would still be zero-dayed at the time of publication of such
vulnerabilities? Shouldn't their advice to their downstreams rather be
to direct them towards applying for pre-disclosure list membership?

As to the actual policy - how would you propose to categorize such
organizations, i.e. how would a new bullet point in the present

"
This includes:

    Public hosting providers;
    Large-scale organisational users of Xen;
    Vendors of Xen-based systems;
    Distributors of operating systems with Xen support.
"

look like in your opinion? This is pretty important imo, as it will
need to be understood who else might then become eligible.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 08:24:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 08:24:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157099.289948 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4J9A-0002NO-Dp; Fri, 16 Jul 2021 08:24:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157099.289948; Fri, 16 Jul 2021 08:24:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4J9A-0002NH-AZ; Fri, 16 Jul 2021 08:24:36 +0000
Received: by outflank-mailman (input) for mailman id 157099;
 Fri, 16 Jul 2021 08:24:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yfzi=MI=linux.ibm.com=schnelle@srs-us1.protection.inumbo.net>)
 id 1m4J98-0002NB-UL
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 08:24:35 +0000
Received: from mx0a-001b2d01.pphosted.com (unknown [148.163.158.5])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7d08a591-1c24-42f5-be5c-1cf02d5273b0;
 Fri, 16 Jul 2021 08:24:34 +0000 (UTC)
Received: from pps.filterd (m0098414.ppops.net [127.0.0.1])
 by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16G82sot034778; Fri, 16 Jul 2021 04:24:15 -0400
Received: from ppma02fra.de.ibm.com (47.49.7a9f.ip4.static.sl-reverse.com
 [159.122.73.71])
 by mx0b-001b2d01.pphosted.com with ESMTP id 39tw3vn83n-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Fri, 16 Jul 2021 04:24:15 -0400
Received: from pps.filterd (ppma02fra.de.ibm.com [127.0.0.1])
 by ppma02fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 16G8EkKq007904;
 Fri, 16 Jul 2021 08:24:13 GMT
Received: from b06cxnps4074.portsmouth.uk.ibm.com
 (d06relay11.portsmouth.uk.ibm.com [9.149.109.196])
 by ppma02fra.de.ibm.com with ESMTP id 39s3p78tv5-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Fri, 16 Jul 2021 08:24:13 +0000
Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com
 [9.149.105.58])
 by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id
 16G8OAou20840890
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Fri, 16 Jul 2021 08:24:10 GMT
Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1])
 by IMSVA (Postfix) with ESMTP id 167C84C04A;
 Fri, 16 Jul 2021 08:24:10 +0000 (GMT)
Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1])
 by IMSVA (Postfix) with ESMTP id 2C04E4C04E;
 Fri, 16 Jul 2021 08:24:09 +0000 (GMT)
Received: from sig-9-145-73-130.uk.ibm.com (unknown [9.145.73.130])
 by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP;
 Fri, 16 Jul 2021 08:24:09 +0000 (GMT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7d08a591-1c24-42f5-be5c-1cf02d5273b0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : subject :
 from : to : cc : date : in-reply-to : references : content-type :
 mime-version : content-transfer-encoding; s=pp1;
 bh=8Of+ionZ0K44S7zzH2G1wGenaNNg9cYQDtiQ0dQz6+E=;
 b=BMc79y1KhhQKUFZbOrAhtcEP61wGvhCcKpBh3YItmYniaHy7RinkekOStAMhwPcVbV8g
 tA8KdxQW6CmdQCUDo7HXnXeBDvsxeO1Bxcn4vmR46+BPBqB7+8Ctzlwih1eoet+d/O4e
 U7lnzCYwkCmnuQ2N7TeXEVQB0tNbOBoSC9rb2wWdVRh2ThxQaLFsKo3f4ZcKX5kegGXy
 lsJ/BZHBXKo8Vpdp79tRxovqbQ5nmEvbTtQHpKKZhzPMbI6YKxeWxAqOAKu0r38O+7Ex
 7l5jIUCj1b6+Lwrw1Hy8lrhsFTfLuxB+ksipWyRyg3640fKq4qgCXYb8/oO8DK9d7iju gA== 
Message-ID: <352f2a35d62399fce1dca0ce1158974ecda3904c.camel@linux.ibm.com>
Subject: Re: [PATCH v1 10/16] s390/pci: return error code from
 s390_dma_map_sg()
From: Niklas Schnelle <schnelle@linux.ibm.com>
To: Logan Gunthorpe <logang@deltatee.com>, linux-kernel@vger.kernel.org,
        linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
        linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org,
        linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org,
        sparclinux@vger.kernel.org, iommu@lists.linux-foundation.org,
        linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
        Marek Szyprowski
 <m.szyprowski@samsung.com>,
        Robin Murphy <robin.murphy@arm.com>,
        Stephen
 Bates <sbates@raithlin.com>,
        Martin Oliveira
 <martin.oliveira@eideticom.com>,
        Gerald Schaefer
 <gerald.schaefer@linux.ibm.com>,
        Heiko Carstens <hca@linux.ibm.com>, Vasily Gorbik <gor@linux.ibm.com>,
        Christian Borntraeger
 <borntraeger@de.ibm.com>
Date: Fri, 16 Jul 2021 10:24:08 +0200
In-Reply-To: <20210715164544.6827-11-logang@deltatee.com>
References: <20210715164544.6827-1-logang@deltatee.com>
	 <20210715164544.6827-11-logang@deltatee.com>
Content-Type: text/plain; charset="UTF-8"
X-Mailer: Evolution 3.28.5 (3.28.5-16.el8) 
Mime-Version: 1.0
Content-Transfer-Encoding: 7bit
X-TM-AS-GCONF: 00
X-Proofpoint-GUID: Au675VXZyfEIxm3kG5FUCjrWY9DzzlcG
X-Proofpoint-ORIG-GUID: Au675VXZyfEIxm3kG5FUCjrWY9DzzlcG
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790
 definitions=2021-07-16_02:2021-07-16,2021-07-16 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0
 lowpriorityscore=0 mlxlogscore=999 suspectscore=0 malwarescore=0
 phishscore=0 bulkscore=0 mlxscore=0 spamscore=0 clxscore=1011 adultscore=0
 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2104190000 definitions=main-2107160048

On Thu, 2021-07-15 at 10:45 -0600, Logan Gunthorpe wrote:
> From: Martin Oliveira <martin.oliveira@eideticom.com>
> 
> The .map_sg() op now expects an error code instead of zero on failure.
> 
> So propagate the error from __s390_dma_map_sg() up.
> 
> Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
> Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
> Cc: Niklas Schnelle <schnelle@linux.ibm.com>
> Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
> Cc: Heiko Carstens <hca@linux.ibm.com>
> Cc: Vasily Gorbik <gor@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
>  arch/s390/pci/pci_dma.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
> index ebc9a49523aa..c78b02012764 100644
> --- a/arch/s390/pci/pci_dma.c
> +++ b/arch/s390/pci/pci_dma.c
> @@ -487,7 +487,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
>  	unsigned int max = dma_get_max_seg_size(dev);
>  	unsigned int size = s->offset + s->length;
>  	unsigned int offset = s->offset;
> -	int count = 0, i;
> +	int count = 0, i, ret;
>  
>  	for (i = 1; i < nr_elements; i++) {
>  		s = sg_next(s);
> @@ -497,8 +497,9 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
>  
>  		if (s->offset || (size & ~PAGE_MASK) ||
>  		    size + s->length > max) {
> -			if (__s390_dma_map_sg(dev, start, size,
> -					      &dma->dma_address, dir))
> +			ret = __s390_dma_map_sg(dev, start, size,
> +						&dma->dma_address, dir);
> +			if (ret)
>  				goto unmap;
>  
>  			dma->dma_address += offset;
> @@ -511,7 +512,8 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
>  		}
>  		size += s->length;
>  	}
> -	if (__s390_dma_map_sg(dev, start, size, &dma->dma_address, dir))
> +	ret = __s390_dma_map_sg(dev, start, size, &dma->dma_address, dir);
> +	if (ret)
>  		goto unmap;
>  
>  	dma->dma_address += offset;
> @@ -523,7 +525,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
>  		s390_dma_unmap_pages(dev, sg_dma_address(s), sg_dma_len(s),
>  				     dir, attrs);
>  
> -	return 0;
> +	return ret;
>  }
>  
>  static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,

So the error codes we return are -ENOMEM if allocating a DMA
translation entry fails and -EINVAL if the DMA translation table hasn't
been initialized or the caller tries to map 0 sized memory. Are these
error codes that you would expect? If yes then this change looks good
to me.

Acked-by: Niklas Schnelle <schnelle@linux.ibm.com>



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 08:39:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 08:39:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157106.289961 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4JNw-0004YE-MQ; Fri, 16 Jul 2021 08:39:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157106.289961; Fri, 16 Jul 2021 08:39:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4JNw-0004Y7-J3; Fri, 16 Jul 2021 08:39:52 +0000
Received: by outflank-mailman (input) for mailman id 157106;
 Fri, 16 Jul 2021 08:39:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=7+J5=MI=gmail.com=rm.skakun@srs-us1.protection.inumbo.net>)
 id 1m4JNv-0004Xk-0S
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 08:39:51 +0000
Received: from mail-ej1-x631.google.com (unknown [2a00:1450:4864:20::631])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 86cf1293-3fed-40bf-837d-bdf562ba8e9a;
 Fri, 16 Jul 2021 08:39:49 +0000 (UTC)
Received: by mail-ej1-x631.google.com with SMTP id gb6so14003964ejc.5
 for <xen-devel@lists.xenproject.org>; Fri, 16 Jul 2021 01:39:49 -0700 (PDT)
Received: from localhost ([185.117.121.76])
 by smtp.gmail.com with ESMTPSA id p18sm3390639edu.8.2021.07.16.01.39.46
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Fri, 16 Jul 2021 01:39:48 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 86cf1293-3fed-40bf-837d-bdf562ba8e9a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=1Aw+MvYuySKaeeZ9hfm0Wk5AJLKyuRLmX4WBjc8rKNo=;
        b=oUyFrqUYKdou9ruiR6KE+JMXnnLCL8dvqhN70gcyzeACf6NUw7EI0ATRz7wTttz15f
         7mOLygE4HmSHan8OZfyp5j8RPsbBrT3a0He5k0WrJB0y+5+L+NOkn9K5yvzS/pYZCO7p
         u7KZO9StVPaxTPF8Gr1jsGLQfWYOI2yH+fArBC1KqFZmKDSGTfAFVbEAaJhaz4AytnK+
         dyb74/h+h4RPLfu4yWREg9BWVCsYAyrrBgnZTYI0oQjZZZAiUpIi/RfegTpwdAhY2A7S
         DsU9Z4zG4GoeFsMnKMjo7DZYbgBHzHPJ/9lwWvF6RbJwmOcAv7hCambLdViiqWQdNc4U
         0rYw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=1Aw+MvYuySKaeeZ9hfm0Wk5AJLKyuRLmX4WBjc8rKNo=;
        b=WnmQqzA+QlrKotrUXZhSCO7RLt/lLxdxSnXp9weEFP8P3FRQ5PUFrcOIeglG+2Af08
         /N1SyvxbkoCVjl1X7HWH0watZIL1ROU3LMbB1Q1zfykTNoyDQoKhD2wPi9CfvYPPQ0Lp
         wopLN2bar27Wxv52TQ60fkIRSctqvi7YT3VOeJAVOn+hJBCzyUzMRhb2U6A4A0iP90HV
         ZHZkNdBBX4y6chEPxwhGd8UBCWMtI8C+7pzxrqUgmubHlYW3iY91kscsOnSh32sAfzqK
         nAm3xVwwe7VC33KMmf/VxlEdkXnDPy8TNHx/8EuTfFIanxrd0piO0MO9vIls3+pRswSp
         TuVg==
X-Gm-Message-State: AOAM531uAuZA5rF96rIqygbK3J5mx6752oG//GtwFOLtKhMSxLLzPZm2
	lBWv/Odu7TabA1cOcIzyLYI=
X-Google-Smtp-Source: ABdhPJwfFSjxOhCm0YSnLeoEw5a02XTjG3qrNAIfyswu4/Xx0Hrjsx5GukzWb4EvgN4GswtGTuomdw==
X-Received: by 2002:a17:906:c9cb:: with SMTP id hk11mr10449398ejb.544.1626424789035;
        Fri, 16 Jul 2021 01:39:49 -0700 (PDT)
From: Roman Skakun <rm.skakun@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org,
	iommu@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org,
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
	Andrii Anisov <andrii_anisov@epam.com>,
	Roman Skakun <rm.skakun@gmail.com>,
	Roman Skakun <Roman_Skakun@epam.com>,
	Roman Skakun <roman_skakun@epam.com>
Subject: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
Date: Fri, 16 Jul 2021 11:39:34 +0300
Message-Id: <20210716083934.154992-1-rm.skakun@gmail.com>
X-Mailer: git-send-email 2.27.0
In-Reply-To: <20210715170011.GA17324@lst.de>
References: <20210715170011.GA17324@lst.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Roman Skakun <Roman_Skakun@epam.com>

This commit is dedicated to fix incorrect conversion from
cpu_addr to page address in cases when we get virtual
address which allocated in the vmalloc range.
As the result, virt_to_page() cannot convert this address
properly and return incorrect page address.

Need to detect such cases and obtains the page address using
vmalloc_to_page() instead.

Signed-off-by: Roman Skakun <roman_skakun@epam.com>
Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
---
Hi, Christoph!
It's updated patch in accordance with your and Stefano 
suggestions. 

 drivers/xen/swiotlb-xen.c   |  7 +------
 include/linux/dma-map-ops.h |  2 ++
 kernel/dma/ops_helpers.c    | 16 ++++++++++++++--
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 92ee6eea30cd..c2f612a10a95 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -337,7 +337,7 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
 	int order = get_order(size);
 	phys_addr_t phys;
 	u64 dma_mask = DMA_BIT_MASK(32);
-	struct page *page;
+	struct page *page = cpu_addr_to_page(vaddr);
 
 	if (hwdev && hwdev->coherent_dma_mask)
 		dma_mask = hwdev->coherent_dma_mask;
@@ -349,11 +349,6 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
 	/* Convert the size to actually allocated. */
 	size = 1UL << (order + XEN_PAGE_SHIFT);
 
-	if (is_vmalloc_addr(vaddr))
-		page = vmalloc_to_page(vaddr);
-	else
-		page = virt_to_page(vaddr);
-
 	if (!WARN_ON((dev_addr + size - 1 > dma_mask) ||
 		     range_straddles_page_boundary(phys, size)) &&
 	    TestClearPageXenRemapped(page))
diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index a5f89fc4d6df..ce0edb0bb603 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -226,6 +226,8 @@ struct page *dma_alloc_from_pool(struct device *dev, size_t size,
 		bool (*phys_addr_ok)(struct device *, phys_addr_t, size_t));
 bool dma_free_from_pool(struct device *dev, void *start, size_t size);
 
+struct page *cpu_addr_to_page(void *cpu_addr);
+
 #ifdef CONFIG_ARCH_HAS_DMA_COHERENCE_H
 #include <asm/dma-coherence.h>
 #elif defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
index 910ae69cae77..472e861750d3 100644
--- a/kernel/dma/ops_helpers.c
+++ b/kernel/dma/ops_helpers.c
@@ -5,6 +5,17 @@
  */
 #include <linux/dma-map-ops.h>
 
+/*
+ * This helper converts virtual address to page address.
+ */
+struct page *cpu_addr_to_page(void *cpu_addr)
+{
+	if (is_vmalloc_addr(cpu_addr))
+		return vmalloc_to_page(cpu_addr);
+	else
+		return virt_to_page(cpu_addr);
+}
+
 /*
  * Create scatter-list for the already allocated DMA buffer.
  */
@@ -12,7 +23,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
 		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
 		 unsigned long attrs)
 {
-	struct page *page = virt_to_page(cpu_addr);
+	struct page *page = cpu_addr_to_page(cpu_addr);
 	int ret;
 
 	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
@@ -32,6 +43,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
 	unsigned long user_count = vma_pages(vma);
 	unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
 	unsigned long off = vma->vm_pgoff;
+	struct page *page = cpu_addr_to_page(cpu_addr);
 	int ret = -ENXIO;
 
 	vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs);
@@ -43,7 +55,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
 		return -ENXIO;
 
 	return remap_pfn_range(vma, vma->vm_start,
-			page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff,
+			page_to_pfn(page) + vma->vm_pgoff,
 			user_count << PAGE_SHIFT, vma->vm_page_prot);
 #else
 	return -ENXIO;
-- 
2.27.0



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 08:54:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 08:54:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157114.289978 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Jbk-00074Q-Vu; Fri, 16 Jul 2021 08:54:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157114.289978; Fri, 16 Jul 2021 08:54:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Jbk-00074J-Sf; Fri, 16 Jul 2021 08:54:08 +0000
Received: by outflank-mailman (input) for mailman id 157114;
 Fri, 16 Jul 2021 08:54:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ZeWR=MI=intel.com=lingshan.zhu@srs-us1.protection.inumbo.net>)
 id 1m4Jbk-00074D-7Y
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 08:54:08 +0000
Received: from mga01.intel.com (unknown [192.55.52.88])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5e91e58f-e613-11eb-8955-12813bfff9fa;
 Fri, 16 Jul 2021 08:54:04 +0000 (UTC)
Received: from fmsmga003.fm.intel.com ([10.253.24.29])
 by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 16 Jul 2021 01:54:02 -0700
Received: from vmm_a4_icx.sh.intel.com (HELO localhost.localdomain)
 ([10.239.53.245])
 by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 16 Jul 2021 01:53:56 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5e91e58f-e613-11eb-8955-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10046"; a="232536672"
X-IronPort-AV: E=Sophos;i="5.84,244,1620716400"; 
   d="scan'208";a="232536672"
X-IronPort-AV: E=Sophos;i="5.84,244,1620716400"; 
   d="scan'208";a="495983865"
From: Zhu Lingshan <lingshan.zhu@intel.com>
To: peterz@infradead.org,
	pbonzini@redhat.com
Cc: bp@alien8.de,
	seanjc@google.com,
	vkuznets@redhat.com,
	wanpengli@tencent.com,
	jmattson@google.com,
	joro@8bytes.org,
	kan.liang@linux.intel.com,
	ak@linux.intel.com,
	wei.w.wang@intel.com,
	eranian@google.com,
	liuxiangdong5@huawei.com,
	linux-kernel@vger.kernel.org,
	x86@kernel.org,
	kvm@vger.kernel.org,
	like.xu.linux@gmail.com,
	boris.ostrvsky@oracle.com,
	Like Xu <like.xu@linux.intel.com>,
	Will Deacon <will@kernel.org>,
	Marc Zyngier <maz@kernel.org>,
	Guo Ren <guoren@kernel.org>,
	Nick Hu <nickhu@andestech.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu,
	linux-csky@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	xen-devel@lists.xenproject.org,
	Zhu Lingshan <lingshan.zhu@intel.com>
Subject: [PATCH V8 01/18] perf/core: Use static_call to optimize perf_guest_info_callbacks
Date: Fri, 16 Jul 2021 16:53:08 +0800
Message-Id: <20210716085325.10300-2-lingshan.zhu@intel.com>
X-Mailer: git-send-email 2.27.0
In-Reply-To: <20210716085325.10300-1-lingshan.zhu@intel.com>
References: <20210716085325.10300-1-lingshan.zhu@intel.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Like Xu <like.xu@linux.intel.com>

For "struct perf_guest_info_callbacks", the two fields "is_in_guest"
and "is_user_mode" are replaced with a new multiplexed member named
"state", and the "get_guest_ip" field will be renamed to "get_ip".

For arm64, xen and kvm/x86, the application of DEFINE_STATIC_CALL_RET0
could make all that perf_guest_cbs stuff suck less. For arm, csky, nds32,
and riscv, just applied some renamed refactoring.

Cc: Will Deacon <will@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Guo Ren <guoren@kernel.org>
Cc: Nick Hu <nickhu@andestech.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: kvmarm@lists.cs.columbia.edu
Cc: linux-csky@vger.kernel.org
Cc: linux-riscv@lists.infradead.org
Cc: xen-devel@lists.xenproject.org
Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Original-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Like Xu <like.xu@linux.intel.com>
Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
Reviewed-by: Boris Ostrovsky <boris.ostrvsky@oracle.com>
---
 arch/arm/kernel/perf_callchain.c   | 16 +++++++-----
 arch/arm64/kernel/perf_callchain.c | 29 +++++++++++++++++-----
 arch/arm64/kvm/perf.c              | 22 ++++++++---------
 arch/csky/kernel/perf_callchain.c  |  4 +--
 arch/nds32/kernel/perf_event_cpu.c | 16 +++++++-----
 arch/riscv/kernel/perf_callchain.c |  4 +--
 arch/x86/events/core.c             | 39 ++++++++++++++++++++++++------
 arch/x86/events/intel/core.c       |  7 +++---
 arch/x86/include/asm/kvm_host.h    |  2 +-
 arch/x86/kvm/pmu.c                 |  2 +-
 arch/x86/kvm/x86.c                 | 37 +++++++++++++++-------------
 arch/x86/xen/pmu.c                 | 32 ++++++++++--------------
 include/linux/perf_event.h         | 12 ++++++---
 kernel/events/core.c               |  9 +++++++
 14 files changed, 144 insertions(+), 87 deletions(-)

diff --git a/arch/arm/kernel/perf_callchain.c b/arch/arm/kernel/perf_callchain.c
index 3b69a76d341e..1ce30f86d6c7 100644
--- a/arch/arm/kernel/perf_callchain.c
+++ b/arch/arm/kernel/perf_callchain.c
@@ -64,7 +64,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs
 {
 	struct frame_tail __user *tail;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -100,7 +100,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 {
 	struct stackframe fr;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -111,8 +111,8 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	if (perf_guest_cbs && perf_guest_cbs->state())
+		return perf_guest_cbs->get_ip();
 
 	return instruction_pointer(regs);
 }
@@ -120,9 +120,13 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
 	int misc = 0;
+	unsigned int state = 0;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (perf_guest_cbs)
+		state = perf_guest_cbs->state();
+
+	if (perf_guest_cbs && state) {
+		if (state & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/arm64/kernel/perf_callchain.c b/arch/arm64/kernel/perf_callchain.c
index 4a72c2727309..1b344e23fd2f 100644
--- a/arch/arm64/kernel/perf_callchain.c
+++ b/arch/arm64/kernel/perf_callchain.c
@@ -5,6 +5,7 @@
  * Copyright (C) 2015 ARM Limited
  */
 #include <linux/perf_event.h>
+#include <linux/static_call.h>
 #include <linux/uaccess.h>
 
 #include <asm/pointer_auth.h>
@@ -99,10 +100,25 @@ compat_user_backtrace(struct compat_frame_tail __user *tail,
 }
 #endif /* CONFIG_COMPAT */
 
+DEFINE_STATIC_CALL_RET0(arm64_guest_state, *(perf_guest_cbs->state));
+DEFINE_STATIC_CALL_RET0(arm64_guest_get_ip, *(perf_guest_cbs->get_ip));
+
+void arch_perf_update_guest_cbs(void)
+{
+	static_call_update(arm64_guest_state, (void *)&__static_call_return0);
+	static_call_update(arm64_guest_get_ip, (void *)&__static_call_return0);
+
+	if (perf_guest_cbs && perf_guest_cbs->state)
+		static_call_update(arm64_guest_state, perf_guest_cbs->state);
+
+	if (perf_guest_cbs && perf_guest_cbs->get_ip)
+		static_call_update(arm64_guest_get_ip, perf_guest_cbs->get_ip);
+}
+
 void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 			 struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(arm64_guest_state)()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -149,7 +165,7 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 {
 	struct stackframe frame;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(arm64_guest_state)()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -160,8 +176,8 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	if (static_call(arm64_guest_state)())
+		return static_call(arm64_guest_get_ip)();
 
 	return instruction_pointer(regs);
 }
@@ -169,9 +185,10 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
 	int misc = 0;
+	unsigned int guest = static_call(arm64_guest_state)();
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (guest) {
+		if (guest & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/arm64/kvm/perf.c b/arch/arm64/kvm/perf.c
index 151c31fb9860..8a3387e58f42 100644
--- a/arch/arm64/kvm/perf.c
+++ b/arch/arm64/kvm/perf.c
@@ -13,21 +13,20 @@
 
 DEFINE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
 
-static int kvm_is_in_guest(void)
-{
-        return kvm_get_running_vcpu() != NULL;
-}
-
-static int kvm_is_user_mode(void)
+static unsigned int kvm_guest_state(void)
 {
 	struct kvm_vcpu *vcpu;
+	unsigned int state = 0;
+
+	if (kvm_get_running_vcpu())
+		state |= PERF_GUEST_ACTIVE;
 
 	vcpu = kvm_get_running_vcpu();
 
-	if (vcpu)
-		return !vcpu_mode_priv(vcpu);
+	if (vcpu && !vcpu_mode_priv(vcpu))
+		state |= PERF_GUEST_USER;
 
-	return 0;
+	return state;
 }
 
 static unsigned long kvm_get_guest_ip(void)
@@ -43,9 +42,8 @@ static unsigned long kvm_get_guest_ip(void)
 }
 
 static struct perf_guest_info_callbacks kvm_guest_cbs = {
-	.is_in_guest	= kvm_is_in_guest,
-	.is_user_mode	= kvm_is_user_mode,
-	.get_guest_ip	= kvm_get_guest_ip,
+	.state		= kvm_guest_state,
+	.get_ip		= kvm_get_guest_ip,
 };
 
 int kvm_perf_init(void)
diff --git a/arch/csky/kernel/perf_callchain.c b/arch/csky/kernel/perf_callchain.c
index ab55e98ee8f6..3e42239dd1b2 100644
--- a/arch/csky/kernel/perf_callchain.c
+++ b/arch/csky/kernel/perf_callchain.c
@@ -89,7 +89,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 	unsigned long fp = 0;
 
 	/* C-SKY does not support virtualization. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
+	if (perf_guest_cbs && perf_guest_cbs->state())
 		return;
 
 	fp = regs->regs[4];
@@ -113,7 +113,7 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 	struct stackframe fr;
 
 	/* C-SKY does not support virtualization. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		pr_warn("C-SKY does not support perf in guest mode!");
 		return;
 	}
diff --git a/arch/nds32/kernel/perf_event_cpu.c b/arch/nds32/kernel/perf_event_cpu.c
index 0ce6f9f307e6..1dc32ba842ce 100644
--- a/arch/nds32/kernel/perf_event_cpu.c
+++ b/arch/nds32/kernel/perf_event_cpu.c
@@ -1371,7 +1371,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 
 	leaf_fp = 0;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -1481,7 +1481,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 {
 	struct stackframe fr;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -1494,8 +1494,8 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
 	/* However, NDS32 does not support virtualization */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	if (perf_guest_cbs && perf_guest_cbs->state())
+		return perf_guest_cbs->get_ip();
 
 	return instruction_pointer(regs);
 }
@@ -1503,10 +1503,14 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
 	int misc = 0;
+	unsigned int state = 0;
+
+	if (perf_guest_cbs)
+		state = perf_guest_cbs->state();
 
 	/* However, NDS32 does not support virtualization */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (perf_guest_cbs && state) {
+		if (state & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_callchain.c
index 0bb1854dce83..ea63f70cae5d 100644
--- a/arch/riscv/kernel/perf_callchain.c
+++ b/arch/riscv/kernel/perf_callchain.c
@@ -59,7 +59,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 	unsigned long fp = 0;
 
 	/* RISC-V does not support perf in guest mode. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
+	if (perf_guest_cbs && perf_guest_cbs->state())
 		return;
 
 	fp = regs->s0;
@@ -79,7 +79,7 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 			   struct pt_regs *regs)
 {
 	/* RISC-V does not support perf in guest mode. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		pr_warn("RISC-V does not support perf in guest mode!");
 		return;
 	}
diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 1eb45139fcc6..9a908631f6cc 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -90,6 +90,28 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
  */
 DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
 
+DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
+DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
+DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
+
+void arch_perf_update_guest_cbs(void)
+{
+	static_call_update(x86_guest_state, (void *)&__static_call_return0);
+	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
+	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
+
+	if (perf_guest_cbs && perf_guest_cbs->state)
+		static_call_update(x86_guest_state, perf_guest_cbs->state);
+
+	if (perf_guest_cbs && perf_guest_cbs->get_ip)
+		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
+
+	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr) {
+		static_call_update(x86_guest_handle_intel_pt_intr,
+				   perf_guest_cbs->handle_intel_pt_intr);
+	}
+}
+
 u64 __read_mostly hw_cache_event_ids
 				[PERF_COUNT_HW_CACHE_MAX]
 				[PERF_COUNT_HW_CACHE_OP_MAX]
@@ -2764,7 +2786,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 	struct unwind_state state;
 	unsigned long addr;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(x86_guest_state)()) {
 		/* TODO: We don't support guest os callchain now */
 		return;
 	}
@@ -2867,7 +2889,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs
 	struct stack_frame frame;
 	const struct stack_frame __user *fp;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(x86_guest_state)()) {
 		/* TODO: We don't support guest os callchain now */
 		return;
 	}
@@ -2944,18 +2966,21 @@ static unsigned long code_segment_base(struct pt_regs *regs)
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	unsigned long ip = static_call(x86_guest_get_ip)();
+
+	if (likely(!ip))
+		ip = regs->ip + code_segment_base(regs);
 
-	return regs->ip + code_segment_base(regs);
+	return ip;
 }
 
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
+	unsigned int guest = static_call(x86_guest_state)();
 	int misc = 0;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (guest) {
+		if (guest & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index fca7a6e2242f..fb1bd7a0e1a6 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -2782,6 +2782,8 @@ static void intel_pmu_reset(void)
 	local_irq_restore(flags);
 }
 
+DECLARE_STATIC_CALL(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
+
 static int handle_pmi_common(struct pt_regs *regs, u64 status)
 {
 	struct perf_sample_data data;
@@ -2852,10 +2854,7 @@ static int handle_pmi_common(struct pt_regs *regs, u64 status)
 	 */
 	if (__test_and_clear_bit(GLOBAL_STATUS_TRACE_TOPAPMI_BIT, (unsigned long *)&status)) {
 		handled++;
-		if (unlikely(perf_guest_cbs && perf_guest_cbs->is_in_guest() &&
-			perf_guest_cbs->handle_intel_pt_intr))
-			perf_guest_cbs->handle_intel_pt_intr();
-		else
+		if (!static_call(x86_guest_handle_intel_pt_intr)())
 			intel_pt_interrupt();
 	}
 
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 974cbfb1eefe..128e2dd9c944 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1884,7 +1884,7 @@ int kvm_skip_emulated_instruction(struct kvm_vcpu *vcpu);
 int kvm_complete_insn_gp(struct kvm_vcpu *vcpu, int err);
 void __kvm_request_immediate_exit(struct kvm_vcpu *vcpu);
 
-int kvm_is_in_guest(void);
+unsigned int kvm_guest_state(void);
 
 void __user *__x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa,
 				     u32 size);
diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
index 827886c12c16..2dcbd1b30004 100644
--- a/arch/x86/kvm/pmu.c
+++ b/arch/x86/kvm/pmu.c
@@ -87,7 +87,7 @@ static void kvm_perf_overflow_intr(struct perf_event *perf_event,
 		 * woken up. So we should wake it, but this is impossible from
 		 * NMI context. Do it from irq work instead.
 		 */
-		if (!kvm_is_in_guest())
+		if (!kvm_guest_state())
 			irq_work_queue(&pmc_to_pmu(pmc)->irq_work);
 		else
 			kvm_make_request(KVM_REQ_PMI, pmc->vcpu);
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index c6dc1b445231..429cb4c22097 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -8259,44 +8259,47 @@ static void kvm_timer_init(void)
 DEFINE_PER_CPU(struct kvm_vcpu *, current_vcpu);
 EXPORT_PER_CPU_SYMBOL_GPL(current_vcpu);
 
-int kvm_is_in_guest(void)
+unsigned int kvm_guest_state(void)
 {
-	return __this_cpu_read(current_vcpu) != NULL;
-}
-
-static int kvm_is_user_mode(void)
-{
-	int user_mode = 3;
+	struct kvm_vcpu *vcpu = __this_cpu_read(current_vcpu);
+	unsigned int state = 0;
 
-	if (__this_cpu_read(current_vcpu))
-		user_mode = static_call(kvm_x86_get_cpl)(__this_cpu_read(current_vcpu));
+	if (vcpu) {
+		state |= PERF_GUEST_ACTIVE;
+		if (static_call(kvm_x86_get_cpl)(vcpu))
+			state |= PERF_GUEST_USER;
+	}
 
-	return user_mode != 0;
+	return state;
 }
 
-static unsigned long kvm_get_guest_ip(void)
+static unsigned long kvm_guest_get_ip(void)
 {
+	struct kvm_vcpu *vcpu = __this_cpu_read(current_vcpu);
 	unsigned long ip = 0;
 
-	if (__this_cpu_read(current_vcpu))
-		ip = kvm_rip_read(__this_cpu_read(current_vcpu));
+	if (vcpu)
+		ip = kvm_rip_read(vcpu);
 
 	return ip;
 }
 
-static void kvm_handle_intel_pt_intr(void)
+static unsigned int kvm_handle_intel_pt_intr(void)
 {
 	struct kvm_vcpu *vcpu = __this_cpu_read(current_vcpu);
 
+	if (!vcpu)
+		return 0;
+
 	kvm_make_request(KVM_REQ_PMI, vcpu);
 	__set_bit(MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT,
 			(unsigned long *)&vcpu->arch.pmu.global_status);
+	return 1;
 }
 
 static struct perf_guest_info_callbacks kvm_guest_cbs = {
-	.is_in_guest		= kvm_is_in_guest,
-	.is_user_mode		= kvm_is_user_mode,
-	.get_guest_ip		= kvm_get_guest_ip,
+	.state			= kvm_guest_state,
+	.get_ip			= kvm_guest_get_ip,
 	.handle_intel_pt_intr	= kvm_handle_intel_pt_intr,
 };
 
diff --git a/arch/x86/xen/pmu.c b/arch/x86/xen/pmu.c
index e13b0b49fcdf..f800e96e8bd0 100644
--- a/arch/x86/xen/pmu.c
+++ b/arch/x86/xen/pmu.c
@@ -413,34 +413,29 @@ int pmu_apic_update(uint32_t val)
 }
 
 /* perf callbacks */
-static int xen_is_in_guest(void)
+static unsigned int xen_guest_state(void)
 {
 	const struct xen_pmu_data *xenpmu_data = get_xenpmu_data();
+	unsigned int state = 0;
 
 	if (!xenpmu_data) {
 		pr_warn_once("%s: pmudata not initialized\n", __func__);
-		return 0;
+		return state;
 	}
 
 	if (!xen_initial_domain() || (xenpmu_data->domain_id >= DOMID_SELF))
-		return 0;
+		return state;
 
-	return 1;
-}
-
-static int xen_is_user_mode(void)
-{
-	const struct xen_pmu_data *xenpmu_data = get_xenpmu_data();
+	state |= PERF_GUEST_ACTIVE;
 
-	if (!xenpmu_data) {
-		pr_warn_once("%s: pmudata not initialized\n", __func__);
-		return 0;
+	if (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_PV) {
+		if (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_USER)
+			state |= PERF_GUEST_USER;
+	} else if (xenpmu_data->pmu.r.regs.cpl & 3)
+			state |= PERF_GUEST_USER;
 	}
 
-	if (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_PV)
-		return (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_USER);
-	else
-		return !!(xenpmu_data->pmu.r.regs.cpl & 3);
+	return state;
 }
 
 static unsigned long xen_get_guest_ip(void)
@@ -456,9 +451,8 @@ static unsigned long xen_get_guest_ip(void)
 }
 
 static struct perf_guest_info_callbacks xen_guest_cbs = {
-	.is_in_guest            = xen_is_in_guest,
-	.is_user_mode           = xen_is_user_mode,
-	.get_guest_ip           = xen_get_guest_ip,
+	.state                  = xen_guest_state,
+	.get_ip			= xen_get_guest_ip,
 };
 
 /* Convert registers from Xen's format to Linux' */
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 2d510ad750ed..e823677a214c 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -26,11 +26,13 @@
 # include <asm/local64.h>
 #endif
 
+#define PERF_GUEST_ACTIVE	0x01
+#define PERF_GUEST_USER	0x02
+
 struct perf_guest_info_callbacks {
-	int				(*is_in_guest)(void);
-	int				(*is_user_mode)(void);
-	unsigned long			(*get_guest_ip)(void);
-	void				(*handle_intel_pt_intr)(void);
+	unsigned int			(*state)(void);
+	unsigned long			(*get_ip)(void);
+	unsigned int			(*handle_intel_pt_intr)(void);
 };
 
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
@@ -1237,6 +1239,8 @@ extern void perf_event_bpf_event(struct bpf_prog *prog,
 				 u16 flags);
 
 extern struct perf_guest_info_callbacks *perf_guest_cbs;
+extern void __weak arch_perf_update_guest_cbs(void);
+
 extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
 extern int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
 
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 464917096e73..e466fc8176e1 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6489,9 +6489,18 @@ static void perf_pending_event(struct irq_work *entry)
  */
 struct perf_guest_info_callbacks *perf_guest_cbs;
 
+/* explicitly use __weak to fix duplicate symbol error */
+void __weak arch_perf_update_guest_cbs(void)
+{
+}
+
 int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
 {
+	if (WARN_ON_ONCE(perf_guest_cbs))
+		return -EBUSY;
+
 	perf_guest_cbs = cbs;
+	arch_perf_update_guest_cbs();
 	return 0;
 }
 EXPORT_SYMBOL_GPL(perf_register_guest_info_callbacks);
-- 
2.27.0



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 09:36:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 09:36:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157123.289997 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4KGE-0004Ed-D6; Fri, 16 Jul 2021 09:35:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157123.289997; Fri, 16 Jul 2021 09:35:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4KGE-0004EW-9i; Fri, 16 Jul 2021 09:35:58 +0000
Received: by outflank-mailman (input) for mailman id 157123;
 Fri, 16 Jul 2021 09:35:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=acOe=MI=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m4KGC-0004EQ-MV
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 09:35:56 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3bbe8157-d630-49de-b71d-1def18dcc65f;
 Fri, 16 Jul 2021 09:35:54 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 2D76067373; Fri, 16 Jul 2021 11:35:52 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3bbe8157-d630-49de-b71d-1def18dcc65f
Date: Fri, 16 Jul 2021 11:35:51 +0200
From: Christoph Hellwig <hch@lst.de>
To: Roman Skakun <rm.skakun@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org, iommu@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org,
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
	Andrii Anisov <andrii_anisov@epam.com>,
	Roman Skakun <Roman_Skakun@epam.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc
 addresses
Message-ID: <20210716093551.GA17981@lst.de>
References: <20210715170011.GA17324@lst.de> <20210716083934.154992-1-rm.skakun@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210716083934.154992-1-rm.skakun@gmail.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

Technically this looks good.  But given that exposing a helper
that does either vmalloc_to_page or virt_to_page is one of the
never ending MM discussions I don't want to get into that discussion
and just keep it local in the DMA code.

Are you fine with me applying this version?

---
>From 40ac971eab89330d6153e7721e88acd2d98833f9 Mon Sep 17 00:00:00 2001
From: Roman Skakun <Roman_Skakun@epam.com>
Date: Fri, 16 Jul 2021 11:39:34 +0300
Subject: dma-mapping: handle vmalloc addresses in
 dma_common_{mmap,get_sgtable}

xen-swiotlb can use vmalloc backed addresses for dma coherent allocations
and uses the common helpers.  Properly handle them to unbreak Xen on
ARM platforms.

Fixes: 1b65c4e5a9af ("swiotlb-xen: use xen_alloc/free_coherent_pages")
Signed-off-by: Roman Skakun <roman_skakun@epam.com>
Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
[hch: split the patch, renamed the helpers]
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 kernel/dma/ops_helpers.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
index 910ae69cae77..af4a6ef48ce0 100644
--- a/kernel/dma/ops_helpers.c
+++ b/kernel/dma/ops_helpers.c
@@ -5,6 +5,13 @@
  */
 #include <linux/dma-map-ops.h>
 
+static struct page *dma_common_vaddr_to_page(void *cpu_addr)
+{
+	if (is_vmalloc_addr(cpu_addr))
+		return vmalloc_to_page(cpu_addr);
+	return virt_to_page(cpu_addr);
+}
+
 /*
  * Create scatter-list for the already allocated DMA buffer.
  */
@@ -12,7 +19,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
 		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
 		 unsigned long attrs)
 {
-	struct page *page = virt_to_page(cpu_addr);
+	struct page *page = dma_common_vaddr_to_page(cpu_addr);
 	int ret;
 
 	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
@@ -32,6 +39,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
 	unsigned long user_count = vma_pages(vma);
 	unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
 	unsigned long off = vma->vm_pgoff;
+	struct page *page = dma_common_vaddr_to_page(cpu_addr);
 	int ret = -ENXIO;
 
 	vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs);
@@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
 		return -ENXIO;
 
 	return remap_pfn_range(vma, vma->vm_start,
-			page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff,
+			page_to_pfn(page) + vma->vm_pgoff,
 			user_count << PAGE_SHIFT, vma->vm_page_prot);
 #else
 	return -ENXIO;
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 11:26:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 11:26:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157136.290027 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Lyv-0000f3-LZ; Fri, 16 Jul 2021 11:26:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157136.290027; Fri, 16 Jul 2021 11:26:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Lyv-0000ew-IZ; Fri, 16 Jul 2021 11:26:13 +0000
Received: by outflank-mailman (input) for mailman id 157136;
 Fri, 16 Jul 2021 11:26:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4Lyu-0000em-FA; Fri, 16 Jul 2021 11:26:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4Lyu-0002ui-8V; Fri, 16 Jul 2021 11:26:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4Lyu-0000OF-0D; Fri, 16 Jul 2021 11:26:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4Lyt-0004sP-Vu; Fri, 16 Jul 2021 11:26:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=15C24kjevYApIA0vlUg69g9j6FR6anYoFgq9Wzhynfo=; b=37tdp7n46tdigsuaYCTbxgyFol
	2xDzieT4PPNMOAhxf2w7/kLZKlZZth3AONfcNeUb0Y+IpEsWnqsJ0Pn/J66SLBJNXKJlpPkqjmUV5
	ZTVDHSs8vyXd9Eg3wshk4BapyZpaiEjEEFAxAe2SXzANbm+CURhitFdsA+SaSMeM7PQc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163714-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163714: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-xl-credit1:xen-boot:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 11:26:11 +0000

flight 163714 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163714/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-credit1   8 xen-boot         fail in 163671 pass in 163714
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat  fail pass in 163671
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163690

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    7 days
Failing since        163478  2021-07-09 15:23:45 Z    6 days   12 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    2 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 12:11:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 12:11:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157146.290048 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Mh1-0006kH-Ci; Fri, 16 Jul 2021 12:11:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157146.290048; Fri, 16 Jul 2021 12:11:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Mh1-0006kA-9X; Fri, 16 Jul 2021 12:11:47 +0000
Received: by outflank-mailman (input) for mailman id 157146;
 Fri, 16 Jul 2021 12:11:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=OMQp=MI=arm.com=robin.murphy@srs-us1.protection.inumbo.net>)
 id 1m4Mgz-0006k4-EA
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 12:11:45 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 50e6fe6d-44fa-4029-8b39-3964e479f03c;
 Fri, 16 Jul 2021 12:11:43 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 03A52D6E;
 Fri, 16 Jul 2021 05:11:43 -0700 (PDT)
Received: from [10.57.36.240] (unknown [10.57.36.240])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C7A2A3F774;
 Fri, 16 Jul 2021 05:11:39 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 50e6fe6d-44fa-4029-8b39-3964e479f03c
Subject: Re: [PATCH v1 14/16] x86/amd_gart: return error code from
 gart_map_sg()
To: Christoph Hellwig <hch@lst.de>, Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
 linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
 linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
 linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
 iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
 xen-devel@lists.xenproject.org, Marek Szyprowski <m.szyprowski@samsung.com>,
 Stephen Bates <sbates@raithlin.com>,
 Martin Oliveira <martin.oliveira@eideticom.com>,
 Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>,
 Borislav Petkov <bp@alien8.de>, "H. Peter Anvin" <hpa@zytor.com>,
 Niklas Schnelle <schnelle@linux.ibm.com>,
 Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
 Michael Ellerman <mpe@ellerman.id.au>
References: <20210715164544.6827-1-logang@deltatee.com>
 <20210715164544.6827-15-logang@deltatee.com> <20210716063241.GC13345@lst.de>
From: Robin Murphy <robin.murphy@arm.com>
Message-ID: <98c09e65-35d0-dde5-75fc-e3d99864d078@arm.com>
Date: Fri, 16 Jul 2021 13:11:33 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210716063241.GC13345@lst.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 2021-07-16 07:32, Christoph Hellwig wrote:
> On Thu, Jul 15, 2021 at 10:45:42AM -0600, Logan Gunthorpe wrote:
>> @@ -458,7 +460,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>>   	iommu_full(dev, pages << PAGE_SHIFT, dir);
>>   	for_each_sg(sg, s, nents, i)
>>   		s->dma_address = DMA_MAPPING_ERROR;
>> -	return 0;
>> +	return ret;
> 
> While we're at it - setting the ->dma_address to DMA_MAPPING_ERROR is
> not part of the ->map_sg calling convention.  Might be worth to fix
> up while we're at it.

Especially since it's not even zeroing dma_length, which at least is a 
documented indicator of validity (even if it's not strictly defined for 
failure cases either).

Robin.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 12:19:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 12:19:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157152.290059 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4MoY-0007lZ-6N; Fri, 16 Jul 2021 12:19:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157152.290059; Fri, 16 Jul 2021 12:19:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4MoY-0007lS-3N; Fri, 16 Jul 2021 12:19:34 +0000
Received: by outflank-mailman (input) for mailman id 157152;
 Fri, 16 Jul 2021 12:19:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=OMQp=MI=arm.com=robin.murphy@srs-us1.protection.inumbo.net>)
 id 1m4MoW-0007lM-Ni
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 12:19:32 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d3373b79-8114-44fe-951f-3b05d3e96735;
 Fri, 16 Jul 2021 12:19:31 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 08358D6E;
 Fri, 16 Jul 2021 05:19:31 -0700 (PDT)
Received: from [10.57.36.240] (unknown [10.57.36.240])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BF0533F774;
 Fri, 16 Jul 2021 05:19:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d3373b79-8114-44fe-951f-3b05d3e96735
Subject: Re: [PATCH v1 16/16] dma-mapping: Disallow .map_sg operations from
 returning zero on error
To: Christoph Hellwig <hch@lst.de>, Logan Gunthorpe <logang@deltatee.com>
Cc: linux-s390@vger.kernel.org, linux-ia64@vger.kernel.org,
 linux-parisc@vger.kernel.org, Martin Oliveira
 <martin.oliveira@eideticom.com>, linux-mips@vger.kernel.org,
 linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org,
 linux-alpha@vger.kernel.org, sparclinux@vger.kernel.org,
 xen-devel@lists.xenproject.org, Stephen Bates <sbates@raithlin.com>,
 linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org
References: <20210715164544.6827-1-logang@deltatee.com>
 <20210715164544.6827-17-logang@deltatee.com> <20210716063332.GD13345@lst.de>
From: Robin Murphy <robin.murphy@arm.com>
Message-ID: <21b7f2f1-ccac-4567-6933-a258dcad7099@arm.com>
Date: Fri, 16 Jul 2021 13:19:23 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210716063332.GD13345@lst.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

On 2021-07-16 07:33, Christoph Hellwig wrote:
> On Thu, Jul 15, 2021 at 10:45:44AM -0600, Logan Gunthorpe wrote:
>> @@ -194,6 +194,8 @@ static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
>>   	else
>>   		ents = ops->map_sg(dev, sg, nents, dir, attrs);
>>   
>> +	WARN_ON_ONCE(ents == 0);
> 
> Turns this into a negative error code while we're at it, just to keep
> the callers sane?

Right, by this point returning the 0 would pass through 
dma_map_sg_attrs() OK, but AFAICS dma_map_sgtable() would now get 
confused and return success but with sgt->nents = 0. Coercing it to an 
error code (which dma_map_sg_attrs() would then just change right back) 
seems sensible for the sake of easy robustness.

Robin.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 12:37:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 12:37:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157158.290072 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4N5U-0002G2-Mc; Fri, 16 Jul 2021 12:37:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157158.290072; Fri, 16 Jul 2021 12:37:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4N5U-0002Fv-Iy; Fri, 16 Jul 2021 12:37:04 +0000
Received: by outflank-mailman (input) for mailman id 157158;
 Fri, 16 Jul 2021 12:37:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4N5T-0002Fo-68
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 12:37:03 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c08a77b8-8ab5-43b4-8792-d5dc012a85b9;
 Fri, 16 Jul 2021 12:37:01 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c08a77b8-8ab5-43b4-8792-d5dc012a85b9
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626439021;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=z+/E6MCLpy5a3yCLkRvyZ0t5Qd4p7eurbh5yAHfm6dA=;
  b=CzGVV3fIwpcsDOvccVffVIJDibyd7ymx7UbxcWD5CUKnFen2UH5z+Juc
   FJJy7XUjBquaT2i/MSASRI2cDFghcsW5TiTJ2hotXTeWi4MBI5Rh6TdZU
   YoR86uu2inl01R8kphIkx5EfyVl4a4kWV/TGbLyUVOl9mEhrjlVP3I/01
   w=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: QwcBnXXBY8wO2zbLFvcaOJFNqoN9N7neiqK3VvEBXQ1WRjK9piskC/0UbO0SouvEDGe1SzqANv
 rcqHti11lryfxAt7lOj6EAfWgMEJOW8hOMQBc0pRP+R4dmJ/iTQ9JUkUg7kkcAW4vBou00q1dr
 ieDP8JpVzTPqKOZJZonJdb76F4KuXJyvA4U55R6uXJ4WeBwmdAgQ0BCTXPdIsWjF0YbE/G5mF+
 rh08MHa+Tp5O29d+bvlOU8sbeZDTj7dyhQVnvr57Bjtj5gzxxTOz0di6NXW3U7Tadhsg8BJGwt
 xd8=
X-SBRS: 5.1
X-MesageID: 48435439
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:3WhGWaFLj1LDTNKOpLqELMeALOsnbusQ8zAXPiBKJCC9E/bo8v
 xG+c5w6faaslkssR0b9+xoW5PwI080l6QU3WB5B97LMDUO0FHCEGgI1/qA/9SPIUzDHu4279
 YbT0B9YueAcGSTW6zBkXWF+9VL+qj5zEix792uq0uE1WtRGtldBwESMHf9LmRGADNoKLAeD5
 Sm6s9Ot1ObCA8qhpTSPAhiYwDbzee77a7bXQ==
X-IronPort-AV: E=Sophos;i="5.84,244,1620705600"; 
   d="scan'208";a="48435439"
Date: Fri, 16 Jul 2021 13:36:57 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <YPF9ab0Ia3U0oFWv@perard>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>

On Thu, Jul 15, 2021 at 08:25:31AM +0200, Jan Beulich wrote:
> On 14.07.2021 18:17, Anthony PERARD wrote:
> > --- a/xen/common/Kconfig
> > +++ b/xen/common/Kconfig
> > @@ -25,6 +25,9 @@ config GRANT_TABLE
> >  config HAS_ALTERNATIVE
> >  	bool
> >  
> > +config HAS_CHECKPOLICY
> > +	def_bool $(success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
> > +
> 
> This is no different from other aspects of "Kconfig vs tool chain
> capabilities" sent out last August to start a discussion about
> whether we really want such. Besides Jrgen no-one cared to reply
> iirc, which to me means no-one really cares one way or the other.
> Which I didn't think was the case ... So here we are again, with
> all the same questions still open.

It's true, I don't really care either way. But with maybe a slight
preference for testing the environment every time `make` is run. But
there weren't really a precedent for testing in Makefile and using the
result in Kconfig (or I don't think there is).

> I'm not going to nack the patch, because there's an immediate
> purpose / need, but I also can't avoid commenting (and I won't
> put my name on it in any positive way, i.e. also not as a
> committer; if anything then to record my reservations).

I've prepared an update which test in Makefile, which I hope you'll like
better.

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 12:38:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 12:38:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157163.290084 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4N6m-0002rn-1B; Fri, 16 Jul 2021 12:38:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157163.290084; Fri, 16 Jul 2021 12:38:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4N6l-0002rg-U4; Fri, 16 Jul 2021 12:38:23 +0000
Received: by outflank-mailman (input) for mailman id 157163;
 Fri, 16 Jul 2021 12:38:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4N6k-0002rY-2v
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 12:38:22 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5a4dfd1a-a215-4e34-a052-ffc33b7e2bc4;
 Fri, 16 Jul 2021 12:38:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5a4dfd1a-a215-4e34-a052-ffc33b7e2bc4
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626439100;
  h=from:to:cc:subject:date:message-id:in-reply-to:
   references:mime-version:content-transfer-encoding;
  bh=azorGvvnspgDnvbmo5EIJBsJCYiGcu1/jeYXmhc3Sao=;
  b=hXpUaArSgUDkUlAvNXXlw4kfGolzVcS468WZp56z3gvbHBksbLZ0OV2w
   y3VLeytPSODJMfVeo3cgN7ZSJe85hDMnaorftKV0PxHv0mnhm+ff3WEOJ
   iMtdM2DJxSrvNyKGCEfEmAiQ46BBVoYOzBdC5nhxIAFFuQK3qQngZBDHA
   M=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: d0i5hlDDdkuS1jW/SZH+dj5FOAGRhLn3YoAu0aAJuiRWqU5YwrWy3NJfcS1wwul7wE/h7aWHRw
 QJLvsNnPNYRU5mp5d8yltE2+KiYoS8QmUq0GyAcT5kiGPRBwPqR7TDP+MU7pkrT+4j6cxAEZxN
 SNfUwN5qmdo1VuxBo1uFK3qkYbVEFyhusfu83tPgyTaNdXErLe9ZbN/bkneFPeFboY10aQ2pI8
 SIqFM/t+2BKAlQ6SpXSMrb+trLlhXhsGX0AAfUT6Tld4wYYmA0VWzE2usJPpHtEk2RNIJJD2B3
 TSM=
X-SBRS: 5.1
X-MesageID: 48125581
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:rBC09qlRUAYYIVjZWXQoZl/ymvLpDfLo3DAbv31ZSRFFG/Fw9/
 rCoB17726QtN91YhsdcL+7V5VoLUmzyXcX2/hyAV7BZmnbUQKTRekP0WKL+Vbd8kbFh41gPM
 lbEpSXCLfLfCJHZcSR2njELz73quP3jJxBho3lvghQpRkBUdAF0+/gYDzranGfQmN9dP0EPa
 vZ3OVrjRy6d08aa8yqb0N1JNQq97Xw5fTbiQdtPW9f1DWz
X-IronPort-AV: E=Sophos;i="5.84,244,1620705600"; 
   d="scan'208";a="48125581"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy binary is available
Date: Fri, 16 Jul 2021 13:38:12 +0100
Message-ID: <20210716123812.494081-1-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
In-Reply-To: <20210714161734.256246-1-anthony.perard@citrix.com>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This will help prevent the CI loop from having build failures when
`checkpolicy` isn't available, when doing "randconfig" jobs.

Also, move the check out of Config.mk and into xen/ build system.
Nothing in tools/ is using that information as it's done by
./configure.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
We might want to have a new Makefile for this kind of check that
Kconfig is going to use, just to keep the main Makefile a bit cleaner.
But maybe another time, if more are comming.

v2:
- move check to Makefile
---
 Config.mk          | 6 ------
 xen/Makefile       | 4 ++++
 xen/common/Kconfig | 4 ++--
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/Config.mk b/Config.mk
index d08fa8d60dd7..97d3633706b3 100644
--- a/Config.mk
+++ b/Config.mk
@@ -137,12 +137,6 @@ export XEN_HAS_BUILD_ID=y
 build_id_linker := --build-id=sha1
 endif
 
-ifndef XEN_HAS_CHECKPOLICY
-    CHECKPOLICY ?= checkpolicy
-    XEN_HAS_CHECKPOLICY := $(shell $(CHECKPOLICY) -h 2>&1 | grep -q xen && echo y || echo n)
-    export XEN_HAS_CHECKPOLICY
-endif
-
 define buildmakevars2shellvars
     export PREFIX="$(prefix)";                                            \
     export XEN_SCRIPT_DIR="$(XEN_SCRIPT_DIR)";                            \
diff --git a/xen/Makefile b/xen/Makefile
index 8023680ffbf2..045ddb18ad68 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -17,6 +17,8 @@ export XEN_BUILD_HOST	?= $(shell hostname)
 PYTHON_INTERPRETER	:= $(word 1,$(shell which python3 python python2 2>/dev/null) python)
 export PYTHON		?= $(PYTHON_INTERPRETER)
 
+export CHECKPOLICY	?= checkpolicy
+
 export BASEDIR := $(CURDIR)
 export XEN_ROOT := $(BASEDIR)/..
 
@@ -156,6 +158,8 @@ CFLAGS += $(CLANG_FLAGS)
 export CLANG_FLAGS
 endif
 
+export HAS_CHECKPOLICY := $(call success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
+
 export root-make-done := y
 endif # root-make-done
 
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 0ddd18e11af3..a5ef3814f531 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -235,8 +235,8 @@ config XSM_FLASK_AVC_STATS
 
 config XSM_FLASK_POLICY
 	bool "Compile Xen with a built-in FLASK security policy"
-	default y if "$(XEN_HAS_CHECKPOLICY)" = "y"
-	depends on XSM_FLASK
+	default y
+	depends on XSM_FLASK && "$(HAS_CHECKPOLICY)"
 	---help---
 	  This includes a default XSM policy in the hypervisor so that the
 	  bootloader does not need to load a policy to get sane behavior from an
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 12:54:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 12:54:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157170.290096 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4NLo-0005UL-BM; Fri, 16 Jul 2021 12:53:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157170.290096; Fri, 16 Jul 2021 12:53:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4NLo-0005UE-8N; Fri, 16 Jul 2021 12:53:56 +0000
Received: by outflank-mailman (input) for mailman id 157170;
 Fri, 16 Jul 2021 12:53:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=7+J5=MI=gmail.com=rm.skakun@srs-us1.protection.inumbo.net>)
 id 1m4NLn-0005U6-2g
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 12:53:55 +0000
Received: from mail-lj1-x236.google.com (unknown [2a00:1450:4864:20::236])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 49ab8c46-6492-4052-b1bc-ee457641bd05;
 Fri, 16 Jul 2021 12:53:54 +0000 (UTC)
Received: by mail-lj1-x236.google.com with SMTP id s17so3244398ljo.12
 for <xen-devel@lists.xenproject.org>; Fri, 16 Jul 2021 05:53:53 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 49ab8c46-6492-4052-b1bc-ee457641bd05
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=qIXbeXJh4xnnEzuHiviZSGnyTwYzRolVv7/vAGelNEs=;
        b=q2rZp/6nSgaheqyIunCgxYXSuuGtsUM9Kxe6YSWEUSVa8m4HR9M550GEna0DbKCld4
         NFPhETlg88j3zKUvUNJDQOTs9OOrvzJ0Yw31Ft7lIDvZh46LIN8B/QDdymrB+R9kngdn
         iSMvIHQIPlRnh7vjcM0rRipTcoWTZJwTCricYH6j1WyYW9QfHw6qR35NAiyKmfiJbU4p
         B+YdqUrrl5oWJQr//Rlq8MFhObpPHhitazQ7PMXwAAYBHlTNyhcDe0mdAwmfbrYyviTv
         +msCwjHytPxKeR4FGfbgaX4epcky1MgE3ET35AyE9x2OEs1ysmWcNyKsAKwWIHDeX0Sl
         9qFg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=qIXbeXJh4xnnEzuHiviZSGnyTwYzRolVv7/vAGelNEs=;
        b=EcJcdoeA6FNUDRt7HYYQ3S8F9hO0HjtrRWt5HjlRwxX7klrgb/yHKrm0L/WgEMPtG0
         abQRwIXEvdr9TfML6ztLY4jZgdWfwQHyW6IpmuzBSzb4lCLpNPrhq3FryhFDAWH5/+77
         WwXdVpBh+iryk64PgKtOXN/8lI/C22xgbQ9gNc6LZmel+BVJPfkJRyFZubZO00bSGvSY
         R8ZsMfquxuUdStch3LSVdu4bVLwRHHVfUHmHk88ZII847/BGf1JcWCbsRLPqf8AV29HK
         opGXGzCUGADyUqpLhN25QHHGkmXUKrTldzqgxFBJEKI9SiFQf0Scl+Hu5/d+XQQXa/2C
         NQUA==
X-Gm-Message-State: AOAM530zkXUrqE69mBoC9zZxwRM6WX8Ec+REmpHa5LYvu68deRw3K+s/
	L1HY8Ghu5d0eRFvDLAfBOZ8Eu8iRxqusA8uRllA=
X-Google-Smtp-Source: ABdhPJz6XvfF9zHYInIIdr4DqTpU+AALXgxYTbgQHJoS1YdKtGx6AiJE1OQvdOZmYfk51pX27uPsiE/B8leffF7w82w=
X-Received: by 2002:a2e:b8cc:: with SMTP id s12mr9033565ljp.66.1626440032739;
 Fri, 16 Jul 2021 05:53:52 -0700 (PDT)
MIME-Version: 1.0
References: <20210715170011.GA17324@lst.de> <20210716083934.154992-1-rm.skakun@gmail.com>
 <20210716093551.GA17981@lst.de>
In-Reply-To: <20210716093551.GA17981@lst.de>
From: Roman Skakun <rm.skakun@gmail.com>
Date: Fri, 16 Jul 2021 15:53:41 +0300
Message-ID: <CADu_u-OYA+Z_y-DBLxyUYGhmLVMtLggmZ_SnRiEtw9EGrO4oGg@mail.gmail.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
To: Christoph Hellwig <hch@lst.de>, Stefano Stabellini <sstabellini@kernel.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org, 
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, 
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>, Andrii Anisov <andrii_anisov@epam.com>, 
	Roman Skakun <Roman_Skakun@epam.com>, Roman Skakun <rm.skakun@gmail.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

> Technically this looks good.  But given that exposing a helper
> that does either vmalloc_to_page or virt_to_page is one of the
> never ending MM discussions I don't want to get into that discussion
> and just keep it local in the DMA code.
>
> Are you fine with me applying this version?

Looks good to me, thanks!
But, Stefano asked me about using created helper in the
xen_swiotlb_free_coherent()
and I created a patch according to this mention.

We can merge this patch and create a new one for
xen_swiotlb_free_coherent() later.

=D0=BF=D1=82, 16 =D0=B8=D1=8E=D0=BB. 2021 =D0=B3. =D0=B2 12:35, Christoph H=
ellwig <hch@lst.de>:
>
> Technically this looks good.  But given that exposing a helper
> that does either vmalloc_to_page or virt_to_page is one of the
> never ending MM discussions I don't want to get into that discussion
> and just keep it local in the DMA code.
>
> Are you fine with me applying this version?
>
> ---
> From 40ac971eab89330d6153e7721e88acd2d98833f9 Mon Sep 17 00:00:00 2001
> From: Roman Skakun <Roman_Skakun@epam.com>
> Date: Fri, 16 Jul 2021 11:39:34 +0300
> Subject: dma-mapping: handle vmalloc addresses in
>  dma_common_{mmap,get_sgtable}
>
> xen-swiotlb can use vmalloc backed addresses for dma coherent allocations
> and uses the common helpers.  Properly handle them to unbreak Xen on
> ARM platforms.
>
> Fixes: 1b65c4e5a9af ("swiotlb-xen: use xen_alloc/free_coherent_pages")
> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> [hch: split the patch, renamed the helpers]
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  kernel/dma/ops_helpers.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> index 910ae69cae77..af4a6ef48ce0 100644
> --- a/kernel/dma/ops_helpers.c
> +++ b/kernel/dma/ops_helpers.c
> @@ -5,6 +5,13 @@
>   */
>  #include <linux/dma-map-ops.h>
>
> +static struct page *dma_common_vaddr_to_page(void *cpu_addr)
> +{
> +       if (is_vmalloc_addr(cpu_addr))
> +               return vmalloc_to_page(cpu_addr);
> +       return virt_to_page(cpu_addr);
> +}
> +
>  /*
>   * Create scatter-list for the already allocated DMA buffer.
>   */
> @@ -12,7 +19,7 @@ int dma_common_get_sgtable(struct device *dev, struct s=
g_table *sgt,
>                  void *cpu_addr, dma_addr_t dma_addr, size_t size,
>                  unsigned long attrs)
>  {
> -       struct page *page =3D virt_to_page(cpu_addr);
> +       struct page *page =3D dma_common_vaddr_to_page(cpu_addr);
>         int ret;
>
>         ret =3D sg_alloc_table(sgt, 1, GFP_KERNEL);
> @@ -32,6 +39,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_=
struct *vma,
>         unsigned long user_count =3D vma_pages(vma);
>         unsigned long count =3D PAGE_ALIGN(size) >> PAGE_SHIFT;
>         unsigned long off =3D vma->vm_pgoff;
> +       struct page *page =3D dma_common_vaddr_to_page(cpu_addr);
>         int ret =3D -ENXIO;
>
>         vma->vm_page_prot =3D dma_pgprot(dev, vma->vm_page_prot, attrs);
> @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_=
struct *vma,
>                 return -ENXIO;
>
>         return remap_pfn_range(vma, vma->vm_start,
> -                       page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgo=
ff,
> +                       page_to_pfn(page) + vma->vm_pgoff,
>                         user_count << PAGE_SHIFT, vma->vm_page_prot);
>  #else
>         return -ENXIO;
> --
> 2.30.2
>


--=20
Best Regards, Roman.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 13:00:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 13:00:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157176.290108 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4NSZ-0007GV-2l; Fri, 16 Jul 2021 13:00:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157176.290108; Fri, 16 Jul 2021 13:00:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4NSY-0007GO-W1; Fri, 16 Jul 2021 13:00:54 +0000
Received: by outflank-mailman (input) for mailman id 157176;
 Fri, 16 Jul 2021 13:00:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3zi8=MI=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m4NSX-0007Fx-JL
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 13:00:53 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d9428618-e635-11eb-8970-12813bfff9fa;
 Fri, 16 Jul 2021 13:00:52 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d9428618-e635-11eb-8970-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626440452;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=ROFaK+/NT3lPoinXoNrQPpO3JwD1OpCd4uSjriz1gHA=;
  b=NrgoonFUygWHHluMz6dznuhoQzfP6eja3LqgRTmvX0zCpV5+0t482jH9
   mwuvnKiBGEp+7I4HyfGorCkYPHsmKDxv8/sjidjCV7y/8MDd/Jqbher7j
   /iGhAPcp4bB6fOo42YEYQPXLEoWxQbkK4adUJ4srFJai0n6QWxDyOAzby
   k=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: lIRwpBe0jU1A4FvOprSSbQKekzoDmCAP8K3z7j5d2rW/npb1dMr4xPb06+ypTgaNiyDweyAzYC
 Qq8FhUTkAo1lkP6LXp1ea9XnsekqjM4gdrEp+f2pDnOOTaqzxYVH58dbwQEZcS5wOv3nuTliIJ
 GxEWjFoZJdFp1TlFDhoTbkNyZZpDGy6yG8FPcN1vM+1gARNhVoA7NPJPM0lHcSE3Vp69nFZ8MK
 I2dwGENq4zIZflAlgC+DRK2zcyrhj/slGJFjAABDx+DumOTmdmijoS5qgqj3ULLsmUzOe5B+Ux
 Xqc=
X-SBRS: 5.1
X-MesageID: 48815107
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:NB2CY6HXbTv1/VbepLqFZpHXdLJyesId70hD6qkvc3Nom52j+/
 xGws536faVslcssHFJo6HkBEDyewKiyXcT2/hsAV7CZniahILMFu9fBOTZskXd8kHFh4lgPO
 JbAtJD4b7LfChHZKTBkXCF+r8bqbHtmsDY5pat854ud3APV0gJ1XYJNu/xKDwReOApP+taKH
 PR3Ls9m9L2Ek5nEPhTS0N1ENTrlpnurtbLcBQGDxko5E2nii6p0qfzF1y90g0FWz1C7L8++S
 yd+jaJp5mLgrWe8FvxxmXT55NZlJ/IzcZCPtWFjowwJi/3ggilSYx9U/mpvSwzosuo9FE2+e
 O87SsIDoBW0Tf8b2u1qRzi103J1ysv0WbrzRuijX7qsaXCNXgHIvsEobgcXgrS6kImst05+r
 lMxXilu51eCg6FtDjh5vDTPisa1HackD4Hq6o+nnZfWYwRZPt6tooE5n5YF58GAWbT9J0nKu
 9zF8vRjcwmMm9yV0qp+lWH/ebcGUjaRny9Mw4/U42uonhrdUlCvg4lLJd1pAZYyHpVIKM0lN
 gtMcxT5fpzp4EtHPpA7Epoe7rANoX3e2O5DIulGyWuKEg2AQO5l3fJ2sRD2AiLQu1E8HJgou
 WMbLtn3VRCMn4GT/f+h6F2zg==
X-IronPort-AV: E=Sophos;i="5.84,244,1620705600"; 
   d="scan'208";a="48815107"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=HlJHUnfG+QPx0TEktSIA2EkkEOt0Tz6AenFtXT8e2MzGs3p498siw2WvdKtzXis0Ud0X9lF896KCjUqY/gRpp1rizjKQFZo2KufT3VhQFMynf57Q6DvUuhLHhpt/7e/N4vU6TFthuE0u/jlhk94antOkLhT4CVmrxkdj/1tCbUQlKcOGDeezyVc2I0OA0EPVUN69900v/I+l4S96zJ9N9UKDymG2Gb01KwngXHi5sUWo7qxEyO3cJ8TXZ/r5XUk/q9scU+p0pPTEut0xOsBgzikxj0ECKy/SXHLouiGBvX5ho//bHVSJLx8oTok+eG4xFhNC59mD6GyadUfHAXeQSg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ROFaK+/NT3lPoinXoNrQPpO3JwD1OpCd4uSjriz1gHA=;
 b=QgXOwrwuk36M1uMkfEQz2VjTTJ8DsbGBkn3j6OdeIms4LDeB16RQkdZO7K2dnceC62R6V9VruqSoPksacpRFYZoCuKhSGr+gyNeVi+D0VdrF8hf5ySwrGc+9sw8Oo+8UhpPWyTxpT3touFvwWl3X/Hc6TOKxL8HlYqJBI5PuUP1zIU5qzqs2X9e6VmRR4cWB5yIdVXU73WkS2lNih2C5j3JQNT8nDdrxBgnwdDqyQDWyVw8cfmv5YHCN5vTUDemNeo0QV5RruYHbcs9Y0GFxU1iaCI2+YBA6nXXv2T7LFGs6ECX4Ra2PXAPXqK4QQ4BYC5Y9kBGv/jcVeCW6+s/qlA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ROFaK+/NT3lPoinXoNrQPpO3JwD1OpCd4uSjriz1gHA=;
 b=Kr2MEa8ePo3tOzZwEQe9BT+hint1X8lnkVUSrn8IXUgBV/N+vDpluYmWltMSzjvW4rpmhP6FhskTLMhpi3EZOfkaOGPnqobdBXsUyqoYHtHgUnXTl7GkQrZn4lts4BvXJZwpbeLTVpAxV1LOttnuCskMc2niNrTlOXfVIWt85lQ=
To: Anthony PERARD <anthony.perard@citrix.com>,
	<xen-devel@lists.xenproject.org>
CC: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <20210716123812.494081-1-anthony.perard@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <7863f794-13cd-e973-a16b-4e2cda3a2144@citrix.com>
Date: Fri, 16 Jul 2021 14:00:37 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210716123812.494081-1-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0268.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:a1::16) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f26f7805-8331-4237-4da9-08d94859b909
X-MS-TrafficTypeDiagnostic: BY5PR03MB4967:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BY5PR03MB49673C2EE6E5A26207A61E1FBA119@BY5PR03MB4967.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Gjym8mytLWkmRFBepkf9UloVsEwc8oLqUoFtP+ypvp0YamQkeE8cRIMuUASkj7QVCpiigX2DtPnPw61viT5x+zXoYxTF3eyMXANtt5daWDOIORv62YR5t2nbTdVF4TMM+MFKkJe2SVgWgcNdJy5JcvyrzkO/g2OGh2ZA/RasBZbJ+PofWihNJpFRkUQ8uHtMTKlsv6PmET5yf0MzSXSzHGvtaICusqiHmzMTGKFq3xT+f349u2qdEgBFGs3PymjRiwCuD46sXDgu4VsdbubelrAw4eUrY1qQANGB5TTa/V6xDH81en2xSdtzCIeB22aEuUmvWHaICcpqR+4l8SQg6b5WlFVGU5XPVV7MG3BYfs+Pt5WsW+LlRRFM2+FqUv5hCo4Jxub24vwSUmTHGBshTMitTO36VOA2ao2LHin2LXuNo4Xqb7nWve6DWQNzWlD9jRt1SGxgO/00b1KzKRYdXdedroLIcw6evP7jg+KXCx9oLuCG4iFyk0H3CsA2sdcjCsmZpgLT61UPVB21s4pE2NpNFAntTmlTPQ+D16rtyvUCU5DUculp9wP6rLIpVsU8//pRzKeuaz8U7XCThFutVcgcwBqezOSdQYfQO0qd/kBF4ZHe4JYNlDxAqXw4WGkoYC9dSyH2ugcJ93darxAKFVXLgpN8ipJ2mN18KlZcRSs0bP7HLb7YMkyu156lww4nDwZEaWkiDH5xjs23l1o0zZUYneQZ+wynpGUUR6YM4H4=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(396003)(366004)(376002)(39860400002)(31686004)(4326008)(2906002)(86362001)(316002)(83380400001)(478600001)(8676002)(16576012)(2616005)(31696002)(66556008)(66946007)(66476007)(53546011)(54906003)(36756003)(8936002)(186003)(6486002)(5660300002)(956004)(4744005)(6666004)(26005)(38100700002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?VpCjfO/pN2gmDp5TSgrEyn1+Z9bejLPiLv7udkl?=
X-MS-Exchange-CrossTenant-Network-Message-Id: f26f7805-8331-4237-4da9-08d94859b909
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 13:00:44.5758
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 5SXjBDJDoJJnLC/k6F+b17/GysXW/w/1hZTjMA44MUA2v+WIriScJh6nBnzFNF9gZd5zjyEZ22MmmZl9R3PP8zfl0bYU14SaumAXFU6gI4Y=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB4967
X-OriginatorOrg: citrix.com

On 16/07/2021 13:38, Anthony PERARD wrote:
> This will help prevent the CI loop from having build failures when
> `checkpolicy` isn't available, when doing "randconfig" jobs.
>
> Also, move the check out of Config.mk and into xen/ build system.
> Nothing in tools/ is using that information as it's done by
> ./configure.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> We might want to have a new Makefile for this kind of check that
> Kconfig is going to use, just to keep the main Makefile a bit cleaner.
> But maybe another time, if more are comming.

I won't nack this patch, but I'm a very firm -2 against it.

v1 is the correct way to go.

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 13:03:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 13:03:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157183.290120 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4NVT-00080f-Kb; Fri, 16 Jul 2021 13:03:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157183.290120; Fri, 16 Jul 2021 13:03:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4NVT-00080Y-HN; Fri, 16 Jul 2021 13:03:55 +0000
Received: by outflank-mailman (input) for mailman id 157183;
 Fri, 16 Jul 2021 13:03:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4NVS-00080B-3C
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 13:03:54 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 44da7963-e636-11eb-8970-12813bfff9fa;
 Fri, 16 Jul 2021 13:03:53 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44da7963-e636-11eb-8970-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626440632;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=paVfQErJEQq2cpAhiw6I0NXZW70DeTfzJcL8T9D58XM=;
  b=V2HEVAa7YqX47sE0GCLeD3Txp/COVXiPT0OpZW/J2tv66FAK54vMIox4
   BeU2FnP7B8XBd1Hip1j6pTEhK/5pclnUdf9zMNIwYXEfb4sTKvMs1y0rB
   I+YE5dH7ond69BWcc5Z7ICRZkS1LU74jllNN9nye67fqJGssoybXZY+Hc
   8=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: K1DqCOEy5/NlMJ9XKUN/sy+j2xrU2L6umDSH7WUAFEN+u4DzPemx7iEjnh32FLYtalDn5uRZGQ
 Ly9LICzu0f1+KC9B1pqhvpoZ3mOKUyRDGir+0bFEOdDqvkjyuC2cd3o/Sjqa0wVbfeiMZFSUkh
 GvChFKg2oFaihzfKMdQq7syVPtC3o3BPh3XEDeVoiLc+gZFiHVhj0XPSX4OgHOHdizDejDPKja
 ++A1Pa9y/ve5K/8fFdS9mgAMtmgWre486IGZ4r+Q/ir3ObD8gNfQdw2L4VibsMpgWl7GiHAtvk
 5Bg=
X-SBRS: 5.1
X-MesageID: 48490403
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ROKLYaC4aPXyfVjlHelW55DYdb4zR+YMi2TDt3oddfWaSKylfq
 GV7ZAmPHrP4gr5N0tOpTntAse9qBDnhPtICOsqTNSftWDd0QPFEGgL1+DfKlbbak/DH4BmtJ
 uJc8JFeaDN5VoRt7eH3OFveexQv+Vu88qT9JnjJ28Gd3AMV0n5hT0JcTpyFCdNNW97LKt8Lr
 WwzOxdqQGtfHwGB/7LfEXsD4D41qT2fIuNW29/OyIa
X-IronPort-AV: E=Sophos;i="5.84,244,1620705600"; 
   d="scan'208";a="48490403"
Date: Fri, 16 Jul 2021 14:03:49 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Andrew
 Cooper" <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>, Roger Pau
 =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>, Juergen Gross
	<jgross@suse.com>, George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>
Subject: Re: [PATCH v2 01/13] libxl/x86: check return value of
 SHADOW_OP_SET_ALLOCATION domctl
Message-ID: <YPGDtXBM+uivyiT8@perard>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
 <4d1e5a4d-05cf-964a-bc4b-9eecf26e58bb@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <4d1e5a4d-05cf-964a-bc4b-9eecf26e58bb@suse.com>

On Mon, Jul 05, 2021 at 05:11:31PM +0200, Jan Beulich wrote:
> The hypervisor may not have enough memory to satisfy the request. While
> there, make the unit of the value clear by renaming the local variable.
> 
> Requested-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> ---
> v2: Rename local variables. Also log requested value. Don't log errno
>     explicitly in LOGED() (nor function return value). Integrate into
>     series.

Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 13:13:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 13:13:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157189.290132 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4New-0001LV-IZ; Fri, 16 Jul 2021 13:13:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157189.290132; Fri, 16 Jul 2021 13:13:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4New-0001LO-FN; Fri, 16 Jul 2021 13:13:42 +0000
Received: by outflank-mailman (input) for mailman id 157189;
 Fri, 16 Jul 2021 13:13:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=5qJX=MI=bounce.vates.fr=bounce-md_30504962.60f18601.v1-914d813d9b524146b308b45b62ef8ec9@srs-us1.protection.inumbo.net>)
 id 1m4Neu-0001LI-3d
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 13:13:40 +0000
Received: from mail179-5.suw41.mandrillapp.com (unknown [198.2.179.5])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6541f363-c34e-48b8-9c65-2a72743919c9;
 Fri, 16 Jul 2021 13:13:38 +0000 (UTC)
Received: from pmta12.mandrill.prod.suw01.rsglab.com (localhost [127.0.0.1])
 by mail179-5.suw41.mandrillapp.com (Mailchimp) with ESMTP id 4GRBWj6g6MzG0CL5M
 for <xen-devel@lists.xenproject.org>; Fri, 16 Jul 2021 13:13:37 +0000 (GMT)
Received: from [185.78.159.90] by mandrillapp.com id
 914d813d9b524146b308b45b62ef8ec9; Fri, 16 Jul 2021 13:13:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6541f363-c34e-48b8-9c65-2a72743919c9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.fr;
	s=mandrill; t=1626441217; i=charles.schulz@vates.fr;
	bh=PBAk5SbiG7zknen9BBl7owZzWyS2O4Z9VMP6zztXP3w=;
	h=From:Subject:References:To:Cc:In-Reply-To:Message-Id:Date:
	 MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=MHNSjHQF5ifVKwSOjyw+oDTTbKQzvtB+AweeB3/VuT5d/BzP6RKojeR8bQtG/qZq3
	 Jzb27g10jhQ76F6xegV6Qao6I/yKOne3bA4yTiGCFhrC2JcKRiXPox+zAbN2F+GVKk
	 S7i11Y3Uthoo+3HrvMif1UL85uwzfX8ES6tq67uc=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; 
 i=@mandrillapp.com; q=dns/txt; s=mandrill; t=1626441217; h=From : 
 Subject : References : To : Cc : In-Reply-To : Message-Id : Date : 
 MIME-Version : Content-Type : Content-Transfer-Encoding : From : 
 Subject : Date : X-Mandrill-User : List-Unsubscribe; 
 bh=PBAk5SbiG7zknen9BBl7owZzWyS2O4Z9VMP6zztXP3w=; 
 b=fIOfwoFPkdV3FyKfTXgSTWS+SVu8xKONnb5+mOTcYWOkhZUsNykmHR7k5WIUWY3e0yMjDP
 q2vdSbqBdx4vgSzkR5hvJjvaxU9zJWAjhBvY/3XUYKXtqC68kqoLqk3nWgQpevRpNgms20s7
 O4tjK9PBpnX4dbxScCgM2eXwzHBss=
From: "Charles-H. Schulz" <charles.schulz@vates.fr>
Subject: Re: Suggested changes to the admission policy of the vulnerability pre-disclosure list
X-Virus-Scanned: amavisd-new at vates.fr
References: <87r1fzclw0.fsf@vates.fr> <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com>
To: Jan Beulich <jbeulich@suse.com>, xen-devel@lists.xenproject.org
Cc: 
In-Reply-To: <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com>
Message-Id: <87k0lqmmf8.fsf@vates.fr>
X-Report-Abuse: Please forward a copy of this message, including all headers, to abuse@mandrill.com
X-Report-Abuse: You can also report abuse here: http://mandrillapp.com/contact/abuse?id=30504962.914d813d9b524146b308b45b62ef8ec9
X-Mandrill-User: md_30504962
Feedback-ID: 30504962:30504962.20210716:md
Date: Fri, 16 Jul 2021 13:13:37 +0000
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Hello,

Jan Beulich @ 2021-07-16 09:52 CEST:

> On 15.07.2021 23:23, Charles-H. Schulz wrote:
>> Hello,
>> 
>> I /we /Vates would like to suggest some changes to the policy regarding the
>> enrollment to the pre-disclosure mailing list of the Xen Security Team.
>> 
>> We have had some talks with the French national CERT who has a need to be the
>> recipient of such a list. This national CERT -and in my experience other
>> national CERTs such as the NIST for instance- is in constant contact with a
>> large Xen userbase that is mostly made up of large parts of the public sector
>> as well as critical infrastructure operators belonging to the private
>> sector. For confidentiality reasons they cannot disclose who uses Xen and
>> where it is used nor who may be using it internally or within the related
>> national cybersecurity authority.
>> 
>> Because of that, their request may not be clear or matching the existing
>> criteria for inclusion in the mailing list. National CERTs are trusted
>> actors and have historically been among the very first entities to define,
>> advocate for and put in practice the very notion of responsible
>> disclosure. Much of the current practice of Open Source projects in that
>> regard actually stems from CERTs. As part of their policies and processes
>> regarding vulnerability disclosure, the notion of confidentiality and
>> documented, waterfall-like processes of disclosure is play an integral
>> part of
>> how they handle informaton and publicity around vulnerability. As a result,
>> national CERTs (and the French National CERT) do not spread undisclosed
>> vulnerability without following established and agreed-upon processes. Such
>> processes include, in our instance, the ones defined and followed by the Xen
>> Security Team. Compliance with these are the first criteria to earn trust and
>> respect from the ecosystem and the downstream users. You can see an example
>> of their work here: https://www.cert.ssi.gouv.fr/
>> 
>> Part of the mission of the French National CERT is to work with
>> critical infrastructure providers in securing their IT.
>> This kind of expertise entails the securing of these information
>> systems before any unforeseen incident as well as after the incident
>> (incident remediation).
>> None of the tasks involved imply the communication of zero-day types
>> of vulnerabilities or vulnerabilities that are unpublished to the
>> downstream users.
>
> Would you mind shedding some light on the benefits of a national CERT
> being in the know of unpublished vulnerabilities when they can't share
> that knowledge with their downstreams, and hence their downstreams -
> as long as they aren't themselves members of our predisclosure list -
> would still be zero-dayed at the time of publication of such
> vulnerabilities? Shouldn't their advice to their downstreams rather be
> to direct them towards applying for pre-disclosure list membership?

In practice, most of the downstream users that the CERTs work with are not
going to subscribe to the Xen pre-disclosure list, nor to any pre-disclosure
lists of vendors or Open Source Software projects. The downstream users will
work with CERTs and various cybersecurity service providers (Security
Operations Centers -SOCs- being a typical example) in order for vulnerability
discovery, disclosure, patching and later integration of fixes or remediatory
measures be managed and applied.

So a national CERT being in the loop of such advanced, upstream vulnerability
pre-disclosures list is pretty much what a CERT does when it's not publishing
security advisories of some kind. There are several benefits for a CERT:
- threat intelligence and analysis: one vulnerability discovered in one
  source may not be an isolated "incident" - it may be connected to a broader
  attack made of the exploitation of several vulnerabilities found across
  different software stacks. This also providers valuable information about the
  threat landscape and relevance. For instance, Xen having several
  vulnerability reports is one thing, but what happens if KVM receives a batch
  of previously unknown vulnerabilities roughly at the same time? For a CERT,
  that level of information can be very important (sometimes "national
  security" important)

- because of a CERT being a nexus of several threat information/intelligence
  by being as upstream as it can on critical software components, it can then
  act -not by disclosing or patching yet unpublished vulnerabilities on its
  own- by setting the effective patching and remediation work on the
  information systems it is in charge of protecting. In the case of a
  national CERT, such as the CERT-FR, that would be the French central
  administration networks and information systems. Essentially it would
  prioritize the response given the specific level and nature  of threats and the
  presence of vulnerabilities on the systems (i.e: first patch MS Office,
  then Apache httpd, then the vulnerability XYZ00123 on Xen as it really
  affects only a small part of our Xen deployments).

- last but not least, CERTs act as central vulnerability reports
  "broadcasters". CERT users/subscribers/clients point to CERTs to receive
  their daily security watch and alerts. 

>
> As to the actual policy - how would you propose to categorize such
> organizations, i.e. how would a new bullet point in the present
>
> "
> This includes:
>
>     Public hosting providers;
>     Large-scale organisational users of Xen;
>     Vendors of Xen-based systems;
>     Distributors of operating systems with Xen support.
> "
>
> look like in your opinion? This is pretty important imo, as it will
> need to be understood who else might then become eligible.

I think it's either a very difficult or a very simple question. If I were to
suggest to simply add a line with "national CERTs" meaning: CERTs that
operate on behalf of governments for the protection and cybersecurity watch
of national administration and critical infrastructures" would that be
accepted? I'm happy with that one. It's really two criteria I'm adding: being
a CERTs acting wth a clear mandate from a national authority to serve as the
national computing emergency response team. Not sure how satisfactory that
is.

All the best,
-- 
Charles-H. Schulz
Chief Strategy Officer - CSO
XCP-ng & Xen Orchestra - Vates solutions


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 13:16:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 13:16:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157194.290144 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Nhq-0002HP-1Q; Fri, 16 Jul 2021 13:16:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157194.290144; Fri, 16 Jul 2021 13:16:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Nhp-0002HI-Ud; Fri, 16 Jul 2021 13:16:41 +0000
Received: by outflank-mailman (input) for mailman id 157194;
 Fri, 16 Jul 2021 13:16:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3zi8=MI=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m4Nhp-0002HC-AN
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 13:16:41 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 39e647d4-02dc-41c8-98e9-b89d5cc80617;
 Fri, 16 Jul 2021 13:16:40 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 39e647d4-02dc-41c8-98e9-b89d5cc80617
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626441400;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=DR6Ai5Xa4WVXv6FHwLHusXxkyyTdFGy34DV1OnhZBgg=;
  b=GV3qa8m28tCL1xQQ3x8dkbr1SiXxNAgcvEORxeVRj3KHN/rCGmEvL48S
   pmuAaSUMmEMLya7H3sPa6pD4hcsyW3Ku/nCslLiwK73wqWmLnT+pIAZY8
   7QJhAemZyQ88HHr6fomgRNozzlO9ESEaUEqve6SsKnB/I7qHKBI8kZkid
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 08LKlQzwTvXen1RDD7+5zFQEhSsPcRbjyReoMiwr+QtBvEHZYxNlmQuFDYwmbT0+I/mP4Ckt3s
 OvFdyp1e0CyZcYTPqy70g2NjBaUSSgjKebr7nBaacqXZjX4wK6nCn4VeJltYf9dTV9TNtpsu8c
 AqLMLHU/eUP+8OKduhwWV8ENCfeNqutkxHI3HdUHefu9PgCqM773q6HPbPSE29+MNdLKLsnf8V
 zYTofPYNn8bVoL+HEw96V9j2Dah7KuYYxKoTdPt/5xLYZJOGPLo16ZgfTxCIOnbkm+lOQ2dRdy
 Eeg=
X-SBRS: 5.1
X-MesageID: 48491563
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Ccuc6aDSAfNgKRzlHeiBsceALOsnbusQ8zAXPh9KJCC9I/bzqy
 nxpp8mPH7P+VAssRQb9exoV5PwJU80maQFg7X5Xo3SPzUO2lHYVb2KhLGKq1KPexEWntQtrZ
 uIGJIOb+EYY2IK6PoS1DPIaOrIjeP3gpyAtKP79TNAXAtqY6Zv40NQDRuaKFR/QE1jCYAiHJ
 SRy8Jbr374EE5nGviTNz0gZazuttfLnJXpbVovAAMm0hCHiXeN5KThGxaV8x8CW3dkwKsk80
 LCjwvlj5/Txs1SnnXntlP73tBzop/M29FDDMuDhow+MTP3kDulY4xnRvmroC01iPvH0idhrP
 D85zMbe+hj4XLYeW+45TH33RP77Too43j+jXeFnHrYp9DjTj5SMbsNuWtgSGqU16MchqA17E
 sL5RPRi3NvN2K3oM0p3amCa/lo/nDE0EbK39RjwEC3arFuFYO5m7Zvgn+9IK1wZh4S17pXbN
 WGLPuslMq+ImnqHEwwgAFUsaORtzIIb2C7fnQ=
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="48491563"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UraiKHV111KcefME0YmpKEGT+6t/Ny6CbS15AzXnuJBbwacp/XSmbeg7fW+a+ur3/U1L6efVpkuP4EyLytu0ed2xf1awmLWIe4kzppcSvWV6bYj4oBiGUXGh/Km9oraK6/1kXBnGLTSjQf8gvwcaekDSpW7TE6kdZhs0HOv1Ju55MCvhg/iZYw5uSpiODLz6TXNB3Ew7eT4y259Uf7kvK1eVyeoPywLvY3P9ZG/vlI5TNqqplRWsnEXPHfhNPbMMK4UyNw2tb3dYVgJzCasVK5fWUEAKgyCGjY3F9NWVB7X/SKVT3INN+WFSbqWVZdnkNqbb4jEM/dm5H7UnY+fpGA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jWQ1w12/rYNjVFUUSN6VOAOsAuUw+vdXrllb8zol+XY=;
 b=RrKLJn2JWtu7oPEUwIOrj33BSLJnZnaFgjOhrWL0Jy9mUorpOWgJBgBEhek5vF04xAHWrX6gBLo0uitf4CTeTTtosTeMgPU5EBH52cjskUBbuAY4Q9EPbTtp4BwztgJ27sREkjYWw25uAxw++Llve0rht1IO77o9qWgZ0U+FfWse3wQcILwDC2f2sC4IOKbP0gEZ04ivneW0qqGteTfB+jdMUL9qTAkqyioxkB92F17Anf63ADuqbWJA1R+GRK4BOQLniTF7+Is4r0B8sT48PhYg/ILuVWRDfzdh7SIdElEn0u6WmbpxgS1bJVdSHnTnviHvUt5rZx5Jncq44H2QWw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=jWQ1w12/rYNjVFUUSN6VOAOsAuUw+vdXrllb8zol+XY=;
 b=NFS7vqfdv39V/9XE9W2OWYrw3AiW8isgbrTYJrdAvqlNBlXdbWurk8ECuQs/YUPlCE2QwZnArkBXpWsLZRWq5q5/Y/qfyQpylGrWkt3ZF9F76Pmw7LeTmT3ruv48MMuNMAZ+upUOm0VxMK8eurkZOnRVXogp5wzxA9hFy/5gBWA=
To: Jan Beulich <jbeulich@suse.com>, Anthony PERARD
	<anthony.perard@citrix.com>
CC: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Julien Grall <julien@xen.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
	<xen-devel@lists.xenproject.org>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <17a250d3-1c1b-f079-c950-5590975e56ae@citrix.com>
Date: Fri, 16 Jul 2021 14:15:28 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0148.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:188::9) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5a58c436-3ace-4666-024b-08d9485bcc3b
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5870:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB587068353772C6BBB56AC6F7BA119@SJ0PR03MB5870.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: b3nx4xfflhnVxZaPguK2kwyZj85DvGtnfc9Y2ejme1e/F89fB9LKO72yGofHl+roaDaX18hsXeyWp1uVqTk4kNYIRz9gmPm/bniioHV+rZ9FjICZULzfNN6QKOTb72NS5futMMty/INCjA/b22GfqYzFj65+i6UxS1Kl/nXhfTKi3Xgt1C1VDw3pvN+elaFsP/znRLadHzkiAThiXOTKduozmlWGUVIgm2X0sifhUjzcvMnBBz8JMNJ3hC4v624Yjy+0QaDm0MV1OJaLVFRUL5Kiereib5y/uGU6d15WnHpF7kXx1MX4FFLM29hXyuPEDZsGS65NFhkdeb/dF2k2RAED/k4rCm+dlR7jE9dZvRmq9vp4lukdWR0y95PS7syFu9hIL3yjrgyenKWI6Tk1W/b/KSytH9wphHSSD/qIN0wf6XNcIV54mZyy09UPOPjNyAgcaYCnk9S8hvrp397dztKLJorQLysmtQFORRCbGuvi+CXDKQuuE9NIm5kwuqcibGjXXXSBz1T4mRaHyrffMl0yhBuo/e9oUpa5S9r3opVQXM189ImzE/q0S52EHMaMzPyyIg+C7SwHXdGO2cctU7dZunD5UmtYpzjQfBLfM70W2genVIWtbaXDqIRqlzYsdJELA1JjSqYSqwnjvwJcI6ytjsMwyeUMK5qTgvFo5x3Rd+vA1FwKO2FM/3mHsI0jEVrGpQ3aGFHatYJN1+u3gjop09huYWHr7AIm64OsNnYPgC3AMgrkll4Z+ymMQqBa
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(396003)(346002)(39860400002)(366004)(66476007)(53546011)(6636002)(31686004)(2906002)(5660300002)(66556008)(110136005)(31696002)(66946007)(54906003)(6486002)(86362001)(36756003)(956004)(38100700002)(316002)(4326008)(16576012)(8936002)(6666004)(66574015)(2616005)(478600001)(186003)(83380400001)(8676002)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 5a58c436-3ace-4666-024b-08d9485bcc3b
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 13:15:35.6468
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NKvm8whv+0wMTbwjv8AB03myvZPlowc0zBxCGdwEprk59CejIw6dV7YsKvpy7+6/gzypAUNIRNCn5sX68KJ2tLytnhyw42pMDps1DyAHOSY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5870
X-OriginatorOrg: citrix.com

On 15/07/2021 07:25, Jan Beulich wrote:
> On 14.07.2021 18:17, Anthony PERARD wrote:
>> --- a/xen/common/Kconfig
>> +++ b/xen/common/Kconfig
>> @@ -25,6 +25,9 @@ config GRANT_TABLE
>>  config HAS_ALTERNATIVE
>>  	bool
>> =20
>> +config HAS_CHECKPOLICY
>> +	def_bool $(success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
>> +
> This is no different from other aspects of "Kconfig vs tool chain
> capabilities" sent out last August to start a discussion about
> whether we really want such. Besides J=C3=BCrgen no-one cared to reply
> iirc, which to me means no-one really cares one way or the other.

You know full well that upgrading Kconfig was specifically to be able to
use this functionality, and you know full well that I firmly support
using this mechanism, because we've had both of these arguments several
times before.

The absence of replies doesn't mean people agree with you, or even that
they don't care.=C2=A0 It either means people didn't read the email, or
didn't have time to reply, or didn't feel like wasting time rehashing
the same arguments yet again with no hope for progress.


If you really insist on refusing to features specifically intended for
the improvement of our build processes, then call a vote so we can be
done with the argument for once and for all.

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 13:41:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 13:41:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157203.290162 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4O5l-0005xx-3W; Fri, 16 Jul 2021 13:41:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157203.290162; Fri, 16 Jul 2021 13:41:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4O5l-0005xq-00; Fri, 16 Jul 2021 13:41:25 +0000
Received: by outflank-mailman (input) for mailman id 157203;
 Fri, 16 Jul 2021 13:41:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4O5k-0005xg-7K; Fri, 16 Jul 2021 13:41:24 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4O5j-00057m-Uq; Fri, 16 Jul 2021 13:41:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4O5j-0006vI-O4; Fri, 16 Jul 2021 13:41:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4O5j-00077H-Nb; Fri, 16 Jul 2021 13:41:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=y5tXUNcbrnUMI8sLlYwaxI4TTuMSrmlb/MJkk5ljYu0=; b=YVAYMClgT5j709nBiTTk9IS2uf
	jf/wdBq9Sux2ahMmHjWaCmuY6EQxHGsHznBbBmFIPJRmAe+ODI8EoB/tQ2h9IqgbX5bG9XLdwrNJM
	Pg+9LSQaclDa4lPMQfp2t4xnzgdl+LwaQBEwII8WrfbjczKIU99mBt8dauZLL+CmKP1Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163719-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163719: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=a9649a719a44894b81f38dc1c5c1888ee684acef
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 13:41:23 +0000

flight 163719 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163719/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                a9649a719a44894b81f38dc1c5c1888ee684acef
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   10 days
Failing since        163327  2021-07-06 12:39:04 Z   10 days   18 attempts
Testing same since   163719  2021-07-15 12:49:05 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bmeng.cn@gmail.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 7888 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 14:16:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 14:16:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157211.290177 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4OdB-00026O-V4; Fri, 16 Jul 2021 14:15:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157211.290177; Fri, 16 Jul 2021 14:15:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4OdB-00026H-Rw; Fri, 16 Jul 2021 14:15:57 +0000
Received: by outflank-mailman (input) for mailman id 157211;
 Fri, 16 Jul 2021 14:15:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3zi8=MI=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m4Od9-00026B-PI
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 14:15:56 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 54ae6786-e640-11eb-8984-12813bfff9fa;
 Fri, 16 Jul 2021 14:15:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 54ae6786-e640-11eb-8984-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626444954;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=PK17LZNXOJT5wutGM9zoc1m++vdWh34pOmGfAOaZ8Zw=;
  b=GENWwFc6YJh0MF8/eSBcXcOybRdHoSAI8dCDTeDirTSxJbovLe61FZV6
   CcJj6KCFLrujDZqkcIIWoq3jkTk/bKTcybLVwTmUxlLSZSkFy43pnadbT
   bEh/FXJSNi2EX3vdRXYTnEfCvLvnWqtfIUgu43Gol8E/BPlvS9SW6SMpa
   w=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: bE6kt66LMfYa/WRigHPcLI17i+G1nT0rX84zHW3hO5TkSomAH7fQgXHwNWC8LWa6A2ePr5hBYJ
 FbaE5t8Hg3cCF4dCrih8Bytg4W7j085MxkMN28eZbwTppvpkGG0ZOSkqUIZUmkblrp27+3HKH5
 W3byEHZlmd66CkM5uxo2glqCKjYDLRyLvDRiBD9XWN1t+U4ze8rAVEinlEfCTA6P1EWuvlJJz3
 J7uDhDmw81hdXyqige4mcdFXgvFBADHVTZrqqpOmKKJqK18MEUB6YBOYDaQ4/gI53Vl3Fy+MyJ
 zxg=
X-SBRS: 5.1
X-MesageID: 50097002
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:8nr0V62Fp6Dyg5I8jbj1sgqjBR5yeYIsimQD101hICG9Lfb0qy
 n+pp4mPEHP4wr5AEtQ4uxpOMG7MBDhHO1OkPMs1NaZLUXbUQ6TQL2KgrGSpAEIdxeeygcZ79
 YZT0EcMqy+MbEZt7ed3ODQKb9Jr7e6GeKT9J7jJhxWPGNXgtRbnmNE43GgYyhLrWd9ZaYRJd
 653I5qtjCgcXMYYoCQHX8eRdXOoNXNidbPfQMGLwRP0njOsRqYrJrBVzSI1BYXVD1ChZ0493
 LergD/7qK/99mm1x7n0XPJ5Zg+oqqg9jIDPr3OtiEmEESotu+aXvUkZ1REhkFznAib0idprD
 ALmWZnAy080QKJQoj/m2qQ5+Cp6kdQ11bSjXuVhmbip8viLQhKdvapw7gpPCcxonBQwu1Uwe
 ZF2XmUuIFQCg6FlCPh58LQXxUvjUasp2E++NRjxEC3fLFuIYO5l7ZvtH+90a1waR7S+cQiCq
 1jHcvc7PFZfReTaG3YpHBmxJipUm4oFhmLT0AesojNugIm0UxR3g8d3ogSj30A/JUyR91N4P
 nFKL1hkPVLQtUNZaxwCe8dSY+8C3DLQxjLLGWOSG6XXp0vKjbIsdr68b817OaldNgBy4Yzgo
 3IVBdCuWs7ayvVeLuzNV1wg2fwqUCGLEbQI+1lluhEU4zHNc7W2He4OSETeuOb0oYiPvE=
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="50097002"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=H0BusTKYztdyGIBDDDUPFVZRd3mepYonPMOykV65shtlyrrjoDs3OJlOHsFPK/z/VnNM3o7TkXyuAOsN05SQNZUT6qUqzkunhe6rNDYop5/lnz4yW7p4j39igeO1zpSgtZKwp92XrPSG+nidf1N0NRfkixKWoFYRLmmkCnOjVOK/UHrmPYCFziAu6van6YANBzyxn3oPzutKg/ZfDJxQgXuGzwRoWpEt61dD07Cq6LK7+1oDtM250nWst6M0IM2AGwlyf+bD6s3npDsWfmfUUseIjdjcnf0clCY/iHTxbbzvHygprncokMWm+YxpUzkRFt543ANkOPgykhxnFCxz9w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OZ+Q5EtAxnV48hN2u9N8RBoeZR0G3nzW8MVs4RnvMKo=;
 b=U6LopQiy5gD+wgKPy0DCiiBeoW32ZXKfL5UN9OZgqz1vTqL6oW0OufVX51gZ3cS6AQ7VllebU78voNNqM3zm7Gce8m9M+IHTNPrN6gc2VaOZeUB10cxHgAZURnpZzqjZjnJ5Mgw3LEDGZCgszYj8tMVNgCCISortbyu4UGEcS82nCmUJ+ZoS7DsGEawgxxuxlLWbryfN9Ni/D9SEnpU7degz/I7O9l/7Up4qKKWe3tZ/ESuoQY2j6aAD94lKLce1lOnEf+W28uezp/y7Vx6envqHTT+Ftjwl0XbuXA6aDWRlCfVWlIB2EpoaYnSSVPJDM5Z6Ap8KPgzk5tI+3aLRYg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OZ+Q5EtAxnV48hN2u9N8RBoeZR0G3nzW8MVs4RnvMKo=;
 b=qkucUSODFfGY6cl/Bj3tc8tL8+QVnxsN+HktO5iEow8FMcZmTprLtwbeNmB73V94IyH0S8zbbCSCYz+KRKJkZlcZ97qe0mitfM6V0MWeV3ZSoJ5mASyVtqsgmq95sqmigNvbpv62w77/tDmCxWdKGDRoMLhGIVgtolPy1mwJDYA=
Subject: Re: [PATCH v2 08/10] xsm: remove xsm_default_t from hook definitions
To: Jan Beulich <jbeulich@suse.com>, "Daniel P. Smith"
	<dpsmith@apertussolutions.com>
CC: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
	<julien@xen.org>, Ian Jackson <iwj@xenproject.org>,
	=?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Tamas K Lengyel
	<tamas@tklengyel.com>, Juergen Gross <jgross@suse.com>, Dario Faggioli
	<dfaggioli@suse.com>, Petre Pircalabu <ppircalabu@bitdefender.com>, "Paul
 Durrant" <paul@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	<xen-devel@lists.xenproject.org>, Tim Deegan <tim@xen.org>, Alexandru Isaila
	<aisaila@bitdefender.com>, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-9-dpsmith@apertussolutions.com>
 <2f9d2f66-563d-4e7d-4886-e4fabffebc78@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <a03ae0eb-7ff9-99ac-2e94-d6af2100fada@citrix.com>
Date: Fri, 16 Jul 2021 15:15:38 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <2f9d2f66-563d-4e7d-4886-e4fabffebc78@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0088.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:76::28) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8ba17243-4f59-4b21-063f-08d9486434e7
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6391:
X-LD-Processed: 335836de-42ef-43a2-b145-348c2ee9ca5b,ExtAddr
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB639147083BE464E152B4D107BA119@SJ0PR03MB6391.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: Abl9rExxkZpz2LPx/Bi6d6o8weXYn4wiuSjr4Oxyy2mYg/e9hDgsMRQiPqYUoB1IPrDAdD1gTzNBsHLcFfUMcOrk0ISkb+Cf8UY+27D6BYiOFJwTi+PVUkG05u2RF4vXZV5M/I3YLmg6z914L7MhAzoiKxxLDEiXnE9xAwv2x5Gq+tF3tba0VA2MjFbvFt6j89OGa/dxnW7fYfCs4Nnr/W6DXZBC2ojOLuBVCQaw4Uajtci9EERlLmm3GHRFHpE1NIqlrzI9C9RlzxSmDXO1IUDCkwN8tavCJjcpKkWLuzr8kr4CACyLK76dspptM8iZGp8O68iKJU6aUwLcSDpBi9ce+7rlTJ4ogFDF6YJk0arz/w2kgAqUJAiCqvDBjVu5573ycVcD4X/E2dXE/S1JcWItLajvI8BnoEJUI0apjAG4M1KdMO/sEx2gDNEIYj1I0/W4AxPVUIIvgz7IA4l2fljDhB8vr8pTkkJP4Urxucp6H9kq+iVXgDirJrgLxl+p9ZscYO317rh/aotUvXvIjK/gSkkFJMU069Bu7CHiYZtFwKUzTTvTz3iC/3SY2xD0LgDWM+3CMaiD7PZ32ABTK+yQf8FAToa5WewhZSU5krCUnitR2eAxqqH980XQ9IbNOqqDT9jR6Z35VXpzl7Z+4CgjUrtgDpgiKhATNV0Ji9eMAvM55sfNmBgBwrO60gm1HAQIiKMPD4+OpGQUl/83ZXeXlYiRYpBrtfHuez/ghG0=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(36756003)(38100700002)(66556008)(66476007)(7416002)(2906002)(8676002)(6486002)(53546011)(107886003)(54906003)(186003)(8936002)(16576012)(110136005)(508600001)(6666004)(26005)(31696002)(956004)(4326008)(316002)(66946007)(2616005)(31686004)(86362001)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 8ba17243-4f59-4b21-063f-08d9486434e7
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 14:15:47.3269
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: uDmkbiiTYQzQ4EU5aljqI8VWImn93HNt3J6mCPcBI1Tlasw2l8ml8x3GQJTnsq5eKJKdjSqbRflLorge+y8TBkngcvqDF7YX4o4UB4Zd5OI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6391
X-OriginatorOrg: citrix.com

On 16/07/2021 08:23, Jan Beulich wrote:
> On 12.07.2021 22:32, Daniel P. Smith wrote:
>> The passing of an xsm_default_t at each of the xsm hook call sites
>> served different functions depending on whether XSM was enabled or not.
>> When XSM was not enabled it attempted to function as a link-time check
>> that declared default action at the call site matched the default
>> declared action for that hook in the dummy policy. When XSM was enabled,
>> it would just drop the  parameter.
>>
>> The removal of these values is two fold. They are a redundancy that
>> provides little context, especially when the value is XSM_OTHER.
> For XSM_OTHER I may agree, but in general I find the call-site uses
> helpful to know at least the rough level of intended restriction.
> E.g. ...
>
>> --- a/xen/arch/x86/cpu/mcheck/mce.c
>> +++ b/xen/arch/x86/cpu/mcheck/mce.c
>> @@ -1376,7 +1376,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
>>      struct xen_mc_msrinject *mc_msrinject;
>>      struct xen_mc_mceinject *mc_mceinject;
>>  
>> -    ret = xsm_do_mca(XSM_PRIV);
>> +    ret = xsm_do_mca();
> ... to now understand what this enforces (or not) I have to go to
> the actual implementation, even if I only want to know the trivial
> dummy incarnation of it. This effectively extends the "provides
> little context" from XSM_OTHER to all hooks.

The old scheme was even worse because it was only a plausible
approximation for the !XSM case while being actively wrong for SILO and
FLASK.

Furthermore, someone reading the code could be forgiven for thinking
that XSM_HOOK was something other than dead code.

~Andrew


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 14:33:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 14:33:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157218.290192 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4OuD-0004gc-Hd; Fri, 16 Jul 2021 14:33:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157218.290192; Fri, 16 Jul 2021 14:33:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4OuD-0004gV-E1; Fri, 16 Jul 2021 14:33:33 +0000
Received: by outflank-mailman (input) for mailman id 157218;
 Fri, 16 Jul 2021 14:33:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4OuC-0004gP-Kx
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 14:33:32 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5cc9ce2c-beae-4c1a-bd8f-adc1e3a42a58;
 Fri, 16 Jul 2021 14:33:31 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5cc9ce2c-beae-4c1a-bd8f-adc1e3a42a58
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626446011;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=IDK2S2YLO7aS11WhBRvScTjaYDyMl91cVkEaZAXeIFg=;
  b=B8GY8fpdVwYEtQKHOKFOypvFbhsfVWikLjRehml7MWxaHQKwtoIYxGpS
   2Yzx51KPD+ocL27YcwSRf2vitZ6J8E4+NsDSsmi8BmCmt832q68nhn9el
   lp0tt+1v8Kz+gWfvjfL8dGse+7MrTnEiZXNbeVDNEmypqpwEd6DpMf1TH
   g=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: xQG7TupR0Mnl/0Xey3krvv6+VvZCd8WXpg5fwfNeR3LoOR7hITfn5u4ju2R81jTHTGegMv2nHt
 m44G/W/OJVOP8Y94xb/Bumy2uq4/Yw5w4KGHZj5aCDa1onl3wLKJpS+/Ryl2NHvkYEkQf0xntW
 r5iLcwQiU5DWWUJuhgaVx3wAvK1wakOEEbPo65VW9aM8tujfnBZaHM/uW38juy1R1RDpjIzsSW
 vfCnCd5FA/h1Xpw5X924SpInOfP6qVEHdIin9icarff4MCR4gyLtqiwY1f3/d9wHlG/3Tw7dRO
 kDc=
X-SBRS: 5.1
X-MesageID: 50098572
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:U4DqMK8qqQvie+/+tX9uk+DgI+orL9Y04lQ7vn2YSXRuE/Bws/
 re+8jzsiWE7gr5OUtQ/exoV5PtfZqxz/FICMwqTM6ftWrdyQ6VxeNZnOjfKlTbckWUnINgPO
 VbAspD4bXLfCBHZK3BgDVQfexP/OW6
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="50098572"
Date: Fri, 16 Jul 2021 15:28:43 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Olaf Hering <olaf@aepfle.de>
CC: Andrew Cooper <andrew.cooper3@citrix.com>,
	<xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <YPGXm9F3OHqLk/ml@perard>
References: <20210708065435.24515-1-olaf@aepfle.de>
 <e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
 <20210714093104.52f25e70.olaf@aepfle.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210714093104.52f25e70.olaf@aepfle.de>

On Wed, Jul 14, 2021 at 09:31:04AM +0200, Olaf Hering wrote:
> Am Thu, 8 Jul 2021 12:43:41 +0100
> schrieb Andrew Cooper <andrew.cooper3@citrix.com>:
> 
> > As for testing, get an account on Gitlab. I'll add you to xen-project,
> > after which pushes to your local fork of Xen here will use the
> > project-wide runner configuration, rather than using the Gitlab's pool
> > of public workers (which amongst other things, lack ARM).
> 
> Now there is https://gitlab.com/xen-project/people/olafhering
> This should have been a "group" I think, so that I could create a xen.git below.
> Now it is an empty repository. Pushing anything to it fails because it lacks a default branch.
> Undoing the mistake fails as well because the webui lacks a knob to delete this repository.

Actually, it's possible to delete the repo.
Navigate to the repo you want to delete ( https://gitlab.com/xen-project/people/olafhering )
then in the sidebar/menu (hopefully on the left) there is "Setting".
Navigate to "Settings/General", in the "Advanced section" there is
"Delete project", read it all, hopefully it says which repo you want to
delete (olafhering).

At this point, you can probably create a new "subgroup". Navigate to
https://gitlab.com/xen-project/people then click on "New subgroup".

Hopefully, you have your own subgroup now, time to fork Xen!
Navigate to the Xen repo ( https://gitlab.com/xen-project/xen ), then
click "Fork". Choose your new subgroup as "namespace" (project url
section).


Hopefully, those instructions are enough to get you were you want to be.
Otherwise, I think I can do all that if needed.

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 14:35:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 14:35:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157223.290204 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Ovd-0005HY-To; Fri, 16 Jul 2021 14:35:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157223.290204; Fri, 16 Jul 2021 14:35:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Ovd-0005HR-Pq; Fri, 16 Jul 2021 14:35:01 +0000
Received: by outflank-mailman (input) for mailman id 157223;
 Fri, 16 Jul 2021 14:35:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4Ovd-0005HL-5M
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 14:35:01 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ff3cca6a-e642-11eb-8985-12813bfff9fa;
 Fri, 16 Jul 2021 14:34:59 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2109.outbound.protection.outlook.com [104.47.17.109])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-7-oEunXThkN5aRGZrkkSxz-Q-1; Fri, 16 Jul 2021 16:34:57 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2702.eurprd04.prod.outlook.com (2603:10a6:800:b4::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.24; Fri, 16 Jul
 2021 14:34:55 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 14:34:55 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM7PR02CA0019.eurprd02.prod.outlook.com (2603:10a6:20b:100::29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Fri, 16 Jul 2021 14:34:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ff3cca6a-e642-11eb-8985-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626446098;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=LSyp7+zkccGYIUgiCDyuWTsLqUdiNyJrgZz5E0Ekvb4=;
	b=hnZrv7JEcqseB6hwUt50lzY4I/obsERhiN176xvKcLAe8NFRxahvp5f9W5S5MGxwLYyvO0
	wi1+xpv94v9o7rG3HAnr3xm8pXySlZm6W3VV0ZjYavQ+5FyJ/XvtVQJibbvkcZH1y2BdZ7
	cijdQQzlFdkJh/UcYfbUnMJ0HPwgzzk=
X-MC-Unique: oEunXThkN5aRGZrkkSxz-Q-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Zao8d8x1kLfbZdc+vWHR0vXNX3exD7s8rdhz1r1w0/GUkianjeKpK+ME843uhi7MibY4xXrZ9AAFanZtGme90Bgp4k9i/OxDk3AZyLpZM7DNlYwc3NntDEgrxwNC2YtVyhZC1g/b3IU0crG7AnQ+NLHCeHdyw4AQEB5s8gM72sUoHU30hUVRtRxEvKsglyQeYOKHU7qPOiYat0nGfe47kn8nZLTvEeYOzxN4uPSLHJmLrELPKcbuYKIx148k3/JV9SgADD83IU3lCp80QtRKta+HO806c3umVjFkeFXoZ+6CW4Vh5zR6c08Cc2gnA9nG58ZLHtMkmkG7L7C85XafRw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PC4/g82qjNa6VHU70QgmGjWcjvrOrEWRA0MIlTH9s10=;
 b=PJcZVYNLDk5dBPQFTcsUcuapPkJPKBiEesCd5RANLM6CdFVR4JdNWa6Bu1KyPi30I70XPIZhgPnEes2X8s+hmLIO2joxxjfBdzyPAhFVRCRquOj1TDd+IenL3eIXNUGL/VQETU5tLL5y6AX4EA+aR2uWp7HRrekB/PBdLXZtzNgFfJp3Lwin17RPr4KweeMeSEMWRGHCeiAyqejpJk6Q/hMSpg/xPhzxHNbjw3676VZge3ydlrXBx74pRMWN/qw5bGW4vFvJMXBjnoWv+vzqAgLBUhEsSKS/F2hDztb8gqQre9MsWHTxyUxVsXCtcmmhobBNptFlfYpX6TksuyBZag==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
 <iwj@xenproject.org>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 xen-devel@lists.xenproject.org, Anthony PERARD <anthony.perard@citrix.com>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>
 <17a250d3-1c1b-f079-c950-5590975e56ae@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <7e49c906-2598-7243-e786-be8b88ea50db@suse.com>
Date: Fri, 16 Jul 2021 16:34:52 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <17a250d3-1c1b-f079-c950-5590975e56ae@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: AM7PR02CA0019.eurprd02.prod.outlook.com
 (2603:10a6:20b:100::29) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d7cd648b-e425-43bc-56d3-08d94866e133
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2702:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2702B92510E9D500892329D0B3119@VI1PR0402MB2702.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	KFtSWJm8dw/ChHYy1o7DEo7rBqzrTfG3ebTE3X4p4ork7yjj0pTOWxcBWsxT1Er1a8Uk6GaKberFcFfCepiIaThD3CWs8ULAwVNxOxSl/Zd6+0MjWVEdrzdzx6TvJ4sb929A0cRatzQf4JjSFi5rd7n43zb8nVl/j4gYhWfKeCFG5K9KmHAXQIzjeClKtAJTlB5/3XIJ5NbXmDG5f3BmUYfkZQ9Aa1llqnH7a/6i1Iuh8G94S4LXQvXPgedM4HdTOmaQBS0w0QSudhGet4kXSDKqZXHdGZJABnWVe81jWPoCcanQdS26IWwUbhWue7O4D5EnAmR1iCBr0dcdyrec3hY7WscgC2EKrnJEVBZwsNh6IyZxfADmindwKrVe1ZtEyoxioFPH4ohjOBefr2bhAhvLz8bNPRr2ji72ZuGTvfQ6fFfRsZr3aE0NdSpYDLfNjnjZl+H74/11Szw9WCwQuTapAvp80opgNXb1qxoK768DWK//161mqb5iWjqTVAZYNPNTMxZKLCsR3Yq6YbTsMzpPpsCDSmysesMz0dgX8YOTB1+kTKPLs9PtnmDgPK+rCPoUd//yFIQeLJ3b567MZf3b/m9cmv9xYfE3rbHjuy19SXCG/n6NYfwZOiiRf5MUrFJ5RbQjrMQofoY7BmXlqargtVxmhDhgf/IpZtw/X0O4kAaKgXTX5pjV+I8Vy2FiMvH5A/DTk9ymBteY1VAfSFDLEDkMJqChHzqQtWm0GNk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(376002)(396003)(39860400002)(136003)(66574015)(66556008)(66476007)(53546011)(66946007)(86362001)(31686004)(6486002)(2906002)(31696002)(26005)(478600001)(54906003)(8676002)(36756003)(16576012)(4326008)(186003)(6916009)(316002)(8936002)(83380400001)(38100700002)(5660300002)(956004)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?sOgPdfwC4Yi+jkLGA7ycyxh13djulJUxCQsAsfayqnQgdFYcSt2P87sTr3Xj?=
 =?us-ascii?Q?hG0wfXPlbxbnyCC9QWPZCItw6nRhIPY/j//cF87xmkXebbNY8w0BQKgUJkKK?=
 =?us-ascii?Q?XMSjQNEGsuX78umSkI3RcDrG+VLCQR+juaxWvCwWflJcX28QHqZZs+RU/VA4?=
 =?us-ascii?Q?oeuo3X8wKWAx2bRlTFArfRRYbS3dOWyP15mTa6war1TRKGRqR6qC9fEsH5BQ?=
 =?us-ascii?Q?F16MzFlcX9Y77eWBowku8ACQlqhgvBCwkYRhDdRRKRgbl5xriaPsMWIRAwAh?=
 =?us-ascii?Q?hcZeiNclPMub75cz0xB79qTC/p5+rL4zol5KGRNNTwYH/pRX9+emSl8EvpYx?=
 =?us-ascii?Q?ry8zTIjoi9q2nIXKv38CdI3bn8MM8PP+S5TqmHWjyIsKZm7QHRIxAp45oy91?=
 =?us-ascii?Q?pGgZvn0DPIqYqLfRG/6FsYZPdVPvly2yO1+adkW6ixIl3q/tZW/3hmqmu7dS?=
 =?us-ascii?Q?Y3BfhcI50QoB54GOcdTFisQmOXusN2egIsJGtmfaV5wleizYXYGolldO4nfx?=
 =?us-ascii?Q?F8DRkfA4yCegjy07lGLjJy5IYV5xrP50BZ4M6BB8l9qQOxgAI8m/b/oIMZI6?=
 =?us-ascii?Q?JCttpfwHeSHbgxZBM88oBtQtHC/BVZO70HMz3kcIRO9RIRmaN/C9hTUNkoWn?=
 =?us-ascii?Q?LgdA3y5as9pdGP/utlnh+AzLkC+RKBkDmdNh7wIA+CwAtXQe/LG8LfNy26bq?=
 =?us-ascii?Q?86UESNZJyH6qSPtPAiVv+gIclslD9T19q+zXF4BjNt0S4uNaiNQ6WCLFH/J3?=
 =?us-ascii?Q?8uHBYORStdxRi1NTFCZclNW05uc5D7ZUBRYUh4YsfRjt3ZgMHnjforTeVRAP?=
 =?us-ascii?Q?FIgFANri+xG7hMLMyd46g7EBq+Z5qouRP+PKrXtTPBNGcZC98/TgMWijH4QH?=
 =?us-ascii?Q?h3zaRa5NLz+Vx0CawJ7q5QmAwsrpyzjuyeC98Wu1RO+zYFnCHoYIfgtK8ND2?=
 =?us-ascii?Q?OJJY3Ofl7u2nK2m02EO/ABSgNw7+0EFgosTQzIFEmGwhoL7OmeDOVKQRHFuK?=
 =?us-ascii?Q?hh+zwAY4gMkENAIZaaSNVFSICoZUyadIxQMgxJq915KViXnDoKxbkqm214iJ?=
 =?us-ascii?Q?mTotJUupxK6dVLvzPh8He/6sInva+YLSWbqTe9c3ZvrcQmni0hRTr+e4Zbjf?=
 =?us-ascii?Q?nljX2AH+m1ZFyvx/fYDgvAViiVebl5ItZxHckKePrbWARXjrwsYlBY+Jofx8?=
 =?us-ascii?Q?vf0bW8iMGRu3Iud7Io6stiRjJ7kYuDzeeMjZuMkbvCvCO7E6IUjfc4SuprTx?=
 =?us-ascii?Q?/Bv4OotVoIP/733mTsiGtywcjx/YcdsaTMyC9Zks3hlqFnpRdSUJQ4UfN4DO?=
 =?us-ascii?Q?WSYAs6YPajEYgwnljKykJstL?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d7cd648b-e425-43bc-56d3-08d94866e133
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 14:34:55.2687
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 5az8Q+QEWmxbIJkHi55zCu07YOcMpj64MU4v6sTMhMhqZUJ+WjLWPQfWRaHUNaamZh6EOxgBUprC8PwNZh697g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2702

On 16.07.2021 15:15, Andrew Cooper wrote:
> On 15/07/2021 07:25, Jan Beulich wrote:
>> On 14.07.2021 18:17, Anthony PERARD wrote:
>>> --- a/xen/common/Kconfig
>>> +++ b/xen/common/Kconfig
>>> @@ -25,6 +25,9 @@ config GRANT_TABLE
>>>  config HAS_ALTERNATIVE
>>>  	bool
>>> =20
>>> +config HAS_CHECKPOLICY
>>> +	def_bool $(success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
>>> +
>> This is no different from other aspects of "Kconfig vs tool chain
>> capabilities" sent out last August to start a discussion about
>> whether we really want such. Besides J=C3=BCrgen no-one cared to reply
>> iirc, which to me means no-one really cares one way or the other.
>=20
> You know full well that upgrading Kconfig was specifically to be able to
> use this functionality, and you know full well that I firmly support
> using this mechanism, because we've had both of these arguments several
> times before.
>=20
> The absence of replies doesn't mean people agree with you, or even that
> they don't care.=C2=A0 It either means people didn't read the email, or
> didn't have time to reply, or didn't feel like wasting time rehashing
> the same arguments yet again with no hope for progress.
>=20
>=20
> If you really insist on refusing to features specifically intended for
> the improvement of our build processes, then call a vote so we can be
> done with the argument for once and for all.

I'm sorry Andrew, but this is not a way to discuss controversial items.
Back at the time you were pointing me at a discussion at a summit that
I didn't recall and hence presumably didn't attend for whatever reason.
Whatever may have been the result of such a discussion imo _has_ to be
under the precondition that no other contrary arguments arise. I do not
recall there having been spelled out up front this specific purpose of
upgrading kconfig, and even if it was spelled out, the ramifications
may not have become clear until the actual first uses were proposed.
It has to be possible to change views at such a point even for people
who did signal agreement earlier on. Not to speak of unaware ones.

Further iirc it was you who told me to start a mail thread about the
issue. Which I did. And now you say "... didn't feel like wasting time
rehashing the same arguments yet again with no hope for progress"? Can
you please point me to a place where those "same arguments" are put
down in writing, including reasons why they were either turned down or
considered of less relevance?

I can't help the feeling that when our opinions don't match you try to
silence me by whatever means you find suitable - ignoring my input,
claiming my earlier agreement, denying me any influence, etc. I'm
afraid I have to say that I don't think this is a way to run a
community project. The only two ways to get past my objections (or
really just reservations here) are to either convince me (which you
don't appear to be willing to) or to outvote me (which you haven't
tried at all so far if I'm not mistaken).

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 14:42:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 14:42:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157231.290219 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4P2S-00071w-NQ; Fri, 16 Jul 2021 14:42:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157231.290219; Fri, 16 Jul 2021 14:42:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4P2S-00071p-J7; Fri, 16 Jul 2021 14:42:04 +0000
Received: by outflank-mailman (input) for mailman id 157231;
 Fri, 16 Jul 2021 14:42:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=FyDT=MI=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m4P2Q-00071i-QE
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 14:42:03 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [81.169.146.216])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 109f40f2-ea09-4a5c-b818-441a1e5104e9;
 Fri, 16 Jul 2021 14:42:00 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id t06ddcx6GEfwAS9
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Fri, 16 Jul 2021 16:41:58 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 109f40f2-ea09-4a5c-b818-441a1e5104e9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626446519;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=7sC3zz5iCDihdl1GXiS57wOxgDdoAK5p7ZU82cK+MkI=;
    b=ECKhIB5bBQXIhCtyUsRx81yX4BCpnincBADRqDzSl3crDJnzgJiA/YvwT5iZcQc1qZ
    rTyjsayVvgjyCEeKx5Llc/lMaNujahbqDrSzPg3YT16crP8uujN/QoE6D8LsL0q6g/u8
    eiFfQ049BhOTRTSTic1cOpRImMR899aP/BfHbPt51Ruy2ucLicU94sAx7JOymihyAPGS
    sIbOqt5RcEtNCcjxUPIYu0It/+0i1JtH58OnON8GAnSt83In1+9FO3lYCXx68jepPdCc
    FNebU6F+pbglyw5UnwfTQNqhplIZkbS4vGa9ifL1VvZQLctMk6Cs442K8IhyTYlWFaIL
    5tWg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisQsURaIaRrslkC/Pt+2SNw62nHl8W9V9xI0n+FLuA=="
X-RZG-CLASS-ID: mo00
Date: Fri, 16 Jul 2021 16:41:57 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <20210716164131.56a7b539.olaf@aepfle.de>
In-Reply-To: <YPGXm9F3OHqLk/ml@perard>
References: <20210708065435.24515-1-olaf@aepfle.de>
	<e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
	<20210714093104.52f25e70.olaf@aepfle.de>
	<YPGXm9F3OHqLk/ml@perard>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/mtixONCx2Z.ROZU0q.IPFuG";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/mtixONCx2Z.ROZU0q.IPFuG
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Fri, 16 Jul 2021 15:28:43 +0100
schrieb Anthony PERARD <anthony.perard@citrix.com>:

> Actually, it's possible to delete the repo.
> Navigate to the repo you want to delete ( https://gitlab.com/xen-project/=
people/olafhering )
> then in the sidebar/menu (hopefully on the left) there is "Setting".

This entry exists elsewhere, but not in this repo.
I guess a project admin has to wipe the repo.

Olaf

--Sig_/mtixONCx2Z.ROZU0q.IPFuG
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmDxmrUACgkQ86SN7mm1
DoBKQBAAoBTW78pbTq7uklFcq5pIADPKMNgg3IfvxX2aEzgkXEPzYcqiQyj0bckD
1IN+ZvEgjrDkUmeAeqg7P35nXIf9QgkCoUj9QlQSE/ptOf13nVWWWhew7/pf7GaL
E/lBUP2U7yIlaGo72RL1W1BcKNkU+lrxwK0E2hvZQEQpZWNYPzoh68X9EfLvHIEH
2xn2DZZsPA3jW84jlix2vDrnKC5CvE/O7ZEUlfjEfZHx1rU+w/dzeWJMsG/VZ1bA
/UBDaZq2LGd/bLrhQ+wWYUFn8NBPOkxObLRhz7hFViQhWzVBtrx65cKhNNE/NvLa
BLb9lTHU1xLZss413uupVkXrj+ndanltoOkgnHt1vCQm8g0VyeeAqBiz8hARVCPt
Da2WHOppn7GcCtwcjaGPS0c71XlokzDV/K/IZ22OTTxQ4iM3oQH1l+z3e7RlM4PH
MVT54OpJKEDhrNMGmSjAeKgKmVx4eclviUCuiH8op94/RijaYtlxQJQyDcw1qPI2
VeLM6ackOlvbqPoP8/hL8kk7gVxBaxTvPZsGBUuzzi3OayjlsbYvF+b0Uqye5yN0
tzk2YFtJd03853vq66fm1xdECOfP6Cx5ceNJvIqo3iCjiQ5Td93lhgXKGGKROm8L
mWCsvgo088w0jb9XChB735t+FLsK69z9lpStiFfOteYiqV92+T8=
=H9X4
-----END PGP SIGNATURE-----

--Sig_/mtixONCx2Z.ROZU0q.IPFuG--


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 14:55:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 14:55:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157449.290231 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4PFS-0000ni-09; Fri, 16 Jul 2021 14:55:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157449.290231; Fri, 16 Jul 2021 14:55:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4PFR-0000nb-TP; Fri, 16 Jul 2021 14:55:29 +0000
Received: by outflank-mailman (input) for mailman id 157449;
 Fri, 16 Jul 2021 14:55:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4PFP-0000nV-Ur
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 14:55:27 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id da6868e0-e645-11eb-898a-12813bfff9fa;
 Fri, 16 Jul 2021 14:55:26 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2059.outbound.protection.outlook.com [104.47.14.59]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-29-ZuaV6h2hPHWVh7QVNXcVVQ-2; Fri, 16 Jul 2021 16:55:24 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2704.eurprd04.prod.outlook.com (2603:10a6:800:b5::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.26; Fri, 16 Jul
 2021 14:55:20 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 14:55:20 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM5PR0701CA0061.eurprd07.prod.outlook.com (2603:10a6:203:2::23) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.10 via Frontend
 Transport; Fri, 16 Jul 2021 14:55:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: da6868e0-e645-11eb-898a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626447325;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=2uojqQarTUpRbJRlnbyxF9rZe/W+19PMnjTxP+/cSEc=;
	b=FDplaD6ms7CxFneITe4ABy/JDzguKU2P9nlR9HVL/ShVguTjBhcfJNNOmGQqo1LB/UHxom
	vNs+LzbGU3/JxQfvqt0WAZC8DdG+vp7/ID8pB7yh5iVokIex+bFROYcu0pd+e8kbsmLJC5
	PAXlR/w5rvmY2loROuNlqtruqwQKytc=
X-MC-Unique: ZuaV6h2hPHWVh7QVNXcVVQ-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=P8YQEyH1UrTykSq3FeTlvIvYzNvFevk/d+a5hGRrLyymo/lBiNkJbTtuVvQBpnHeFA+ClwwWMFCzYJu5rLyBzHJ3GjK3qvzjpu6U+suqa0ufv1IIZCnB+YOnYLy0SBO041jTUuWEucS+W/jouDblum6sPm9ZRAF3qA+9XZSVFFoDidxVaJTywuM5MY4DsF/jd3lzn3L9MKTfPrppKcQPFC4zy2G6zYrOwyf7TLBvgRxJ0vH5pZL/DItGg108m0Fq5rYrbT21Rj/hykX30qVE3yUfFm7zSz8PY7ho/2dXFWAyUp6xcAVW2J1OOJPmqTBAmOM8Ql21bKM3iqT6yZw5vw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2uojqQarTUpRbJRlnbyxF9rZe/W+19PMnjTxP+/cSEc=;
 b=iidjROu/KeOVtUTlrLAwopPHYWOudUY5pNqkHTghFdicZ/jNOrophbMzdx91M8dbIDXCSFaVbte2zBu6vzgZR2259m//wAWpb/P1VZpugyjYjE3zlE7ms9r7uhFaDoV1/A4fC/l+Kt1gOWS68N4PiZYXPfbS9hDveS+nkXsTU0WJ558FYyreH7sX0byz06Xh4JCdHeXX+fHn6wpq9NcIR/PRoKA+dgFiInR8DKzQcbMkWJAEA0RoYs19hMdxe5gqIMbZ4IUos9wCJ2OwQPt1Dn+Yh7vUuhc1PL0+QAj+fXSuMLabibxdbcifoJxAxUst6X1W3GoJeijThLPKyI+AMg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: apertussolutions.com; dkim=none (message not signed)
 header.d=none;apertussolutions.com; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 08/10] xsm: remove xsm_default_t from hook definitions
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Julien Grall
 <julien@xen.org>, Ian Jackson <iwj@xenproject.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Tamas K Lengyel <tamas@tklengyel.com>, Juergen Gross <jgross@suse.com>,
 Dario Faggioli <dfaggioli@suse.com>,
 Petre Pircalabu <ppircalabu@bitdefender.com>, Paul Durrant <paul@xen.org>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org,
 Tim Deegan <tim@xen.org>, Alexandru Isaila <aisaila@bitdefender.com>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, Wei Liu <wl@xen.org>,
 George Dunlap <george.dunlap@citrix.com>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-9-dpsmith@apertussolutions.com>
 <2f9d2f66-563d-4e7d-4886-e4fabffebc78@suse.com>
 <a03ae0eb-7ff9-99ac-2e94-d6af2100fada@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <d646e627-6efe-7090-3961-48366392b24e@suse.com>
Date: Fri, 16 Jul 2021 16:55:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <a03ae0eb-7ff9-99ac-2e94-d6af2100fada@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM5PR0701CA0061.eurprd07.prod.outlook.com
 (2603:10a6:203:2::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 43786506-e6be-4f48-f8a4-08d94869bb1a
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2704:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB270439967DB0197EC0EFEB3CB3119@VI1PR0402MB2704.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	B4uCb3M9jOydb0LH+cPttDkDRfHcl78C/fluZPoTT/738jDMj2GZKQCIypHiSSKd+SgoyfwV3sZU91y+A6PmwqOcuyTPV/12LqHZW6DJQLWVYXKRNvxC+yJU9lFCLKx7oR7nAW6MAgUycT9PH5FXFp0WERfCBaslOax3ofa81/heo7CkzujzJXH6ZfVFNyFivdYswG6ijlL5A2mNflTUODrdzMKxVm/ud9yTTiHs6WyNXLJmLPzylxpaF3xp8cXdKDuMiTUhIVAjYvrCL4zT0ai5x213RpllE6jZxd98H4PcDyesYCbBUSvEqjZ4GeNf542Btg+Zwu0bHiqpW3mQliJPv15YWIZSOWwgIcA0AAT3WnJj+2SDjRE36Tte0EqOImhEz0WCLLEt0QVgDHIYsJxHX6EFeNMK0WaFzdLgmlUvl+wFxtDhc11VGrnuy8eaKBTMCS/we7Ipa39qm6AUwhxOPH1uc0rak9X9wqZlRgYnAtQ66AC1/QBAXXmgYvWIwq/RMtUFhs35v3RdV66jdL4RkylyPKT2o2WMkSN977z11d8gA/nE0bQzBgmdscW8IajntRx9UPL2/ktoqOPWnrmjcmNgLKFFRFwh4oO+SMvpGxkltEZT3AmBMSFWFboz6MBAmlQacXqFGKkRrrKSQSzvLqeBmWIB9kaIDxixc1Xgi/8fD5QSuvntx55jH56cX8gJH6BJLB3g+lznW9XVJYlU5A4Pck42MgcivTiymAcWkTmCrKZ0OLB6Xiqa4vvj
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(396003)(376002)(39860400002)(366004)(2616005)(186003)(31686004)(26005)(83380400001)(86362001)(316002)(7416002)(53546011)(54906003)(31696002)(16576012)(38100700002)(6486002)(4326008)(956004)(8676002)(6916009)(66946007)(5660300002)(66556008)(66476007)(2906002)(478600001)(36756003)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 43786506-e6be-4f48-f8a4-08d94869bb1a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 14:55:19.8997
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: o2xc5HQG2C2ykyiH3cVc6syxMrKDZt2yxZnEGF+kPpc7Y2YA+ehLuHwhMz0TP57++Fbw/RWtBukPsw8+k0sg1A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2704

On 16.07.2021 16:15, Andrew Cooper wrote:
> On 16/07/2021 08:23, Jan Beulich wrote:
>> On 12.07.2021 22:32, Daniel P. Smith wrote:
>>> The passing of an xsm_default_t at each of the xsm hook call sites
>>> served different functions depending on whether XSM was enabled or not.
>>> When XSM was not enabled it attempted to function as a link-time check
>>> that declared default action at the call site matched the default
>>> declared action for that hook in the dummy policy. When XSM was enabled,
>>> it would just drop the  parameter.
>>>
>>> The removal of these values is two fold. They are a redundancy that
>>> provides little context, especially when the value is XSM_OTHER.
>> For XSM_OTHER I may agree, but in general I find the call-site uses
>> helpful to know at least the rough level of intended restriction.
>> E.g. ...
>>
>>> --- a/xen/arch/x86/cpu/mcheck/mce.c
>>> +++ b/xen/arch/x86/cpu/mcheck/mce.c
>>> @@ -1376,7 +1376,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
>>>      struct xen_mc_msrinject *mc_msrinject;
>>>      struct xen_mc_mceinject *mc_mceinject;
>>>  
>>> -    ret = xsm_do_mca(XSM_PRIV);
>>> +    ret = xsm_do_mca();
>> ... to now understand what this enforces (or not) I have to go to
>> the actual implementation, even if I only want to know the trivial
>> dummy incarnation of it. This effectively extends the "provides
>> little context" from XSM_OTHER to all hooks.
> 
> The old scheme was even worse because it was only a plausible
> approximation for the !XSM case while being actively wrong for SILO and
> FLASK.

"Actively wrong" is perhaps going a little far? I don't think SILO
relaxes things anywhere over the !XSM case, and I also wouldn't
expect a Flask policy to commonly relax things. Of course these
simplistic categories can't reflect the full possible range with
an actual policy, but seeing XSM_PRIV in a call used to be a fair
hint that subsequent code isn't expected to be reachable for
unprivileged entities. No such hints would exist anymore following
this change, and its description didn't sound to me like this
aspect was taken into consideration. Yet it is a difference to me
whether such removal of information (no matter how precise it is)
is deliberate or an unintended / unnoticed / unexpected side effect.

> Furthermore, someone reading the code could be forgiven for thinking
> that XSM_HOOK was something other than dead code.

I certainly agree with this part.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 15:21:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 15:21:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157594.290242 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4PeQ-0004LY-1C; Fri, 16 Jul 2021 15:21:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157594.290242; Fri, 16 Jul 2021 15:21:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4PeP-0004LR-UK; Fri, 16 Jul 2021 15:21:17 +0000
Received: by outflank-mailman (input) for mailman id 157594;
 Fri, 16 Jul 2021 15:21:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=aN3H=MI=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m4PeP-0004LL-De
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 15:21:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 159c2f27-24ac-46a2-97f6-840803ea59ee;
 Fri, 16 Jul 2021 15:21:15 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2057.outbound.protection.outlook.com [104.47.4.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-qEVwM3L2MHW9eTZlutirXA-2; Fri, 16 Jul 2021 17:21:13 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB6384.eurprd04.prod.outlook.com (2603:10a6:803:126::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Fri, 16 Jul
 2021 15:21:10 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.021; Fri, 16 Jul 2021
 15:21:10 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR04CA0082.eurprd04.prod.outlook.com (2603:10a6:208:be::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 15:21:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 159c2f27-24ac-46a2-97f6-840803ea59ee
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626448874;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=uRiXdToTcOL1sfRrWt+ZEpu/Vt0QV6AltVwhNAqlnCQ=;
	b=dzH66s/uB1SE/D4ymcvPhimXGRbpknjbjkIoAoxKMe9izfZhp7efNm51K5Nm4f5hDJzaEw
	7VVeg893YID4Cda/13QqnwZ6MrzJCWQGDbpJL0CPuQgsB0Q+X9h0xkkNHwx8wR2vQXlAsn
	VTdcpCd8QBZ2M/iUyypDoFKFVF1s+FY=
X-MC-Unique: qEVwM3L2MHW9eTZlutirXA-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=i9Rd0UjWWMoU/DUWDS1PCSV340ni6Iy+He+izAwmkLFVvv0xsstMSZBIk62FOMi5JXviop9bLtQTRfAPT38IqZMdwE8lJOnjN2+sZtE4qlJc2ad/8QW3kcIe9f7Y3C9MNS0EoiOLM+lW75XkfWdkSjV7nl3nI50sKlFfDDo029kvOcS0mL0rQBCrtp0dWzP7cLhHtonMUfaU2dt8aACOOmgWRtXMbrDGooBPAcbhkPnbPhBW3YSkccZTLwTuvwBZhIRVI24gqjkS5tRYYsbr/3SxbLI0D7vzj0ECRnGyVFJRMMW2Qqsh+VCnuGWpBQpwTPf6RB2sdCDOF6HkKy2Hlw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=uRiXdToTcOL1sfRrWt+ZEpu/Vt0QV6AltVwhNAqlnCQ=;
 b=Fko2NRhEkCgS1poDi1WOsMPFmEdccj7gfq5d8zuR81IvVu9wUreXEP/GRPK7sqtlyoNEZscfwfHP+2gMM3NdY7EzcaZ1pPABQEwJ9hOhZ+X5Q/Q8qj24jam+KDLQyjoaG5D2bk+nua7N0xhtSBLnzOhFOiOdKG+qnK1/Yfd4QIoX03COiPpaAVp+gYkAbpzmBu8tyJaTkqZd2+b1naGm1K0+ifWOG8y/zBzXnwppBGrwD5b506T68k2/H8tKjCdafrEmMCtLxloAKbw94CjvhBu415De4OYlqeoaT23RVzHkev3pxx2zX+UmMmpf+RN4UWRjldHt7v4EVXwaRqp8TQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: Suggested changes to the admission policy of the vulnerability
 pre-disclosure list
To: "Charles-H. Schulz" <charles.schulz@vates.fr>
References: <87r1fzclw0.fsf@vates.fr>
 <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com> <87k0lqmmf8.fsf@vates.fr>
Cc: xen-devel@lists.xenproject.org
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com>
Date: Fri, 16 Jul 2021 17:21:08 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
In-Reply-To: <87k0lqmmf8.fsf@vates.fr>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR04CA0082.eurprd04.prod.outlook.com
 (2603:10a6:208:be::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d538673a-dda2-4a1b-f33d-08d9486d5762
X-MS-TrafficTypeDiagnostic: VE1PR04MB6384:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB6384A66CBE6054CFA4717763B3119@VE1PR04MB6384.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	AZ8gH4ZkNyfwo9L68H0tHwPK1fGQbv8V+GopXVxHAlOwF4vv0Ph/OPUZHByehS8tgesJwpH/EH2CkTW/ErUOsSuowMj8WtoVPjD9rfUYV1wOn9KeqUobxfUE5PIhaG5IiQaRsgkp56VP3x3sXqK5MmfBZKNjbttoBpx3C9HX2STzCBgxprgDOhpK2b8VByBQO5CL/eYTUK9y5cQxSjuly0Jo69JZQloDrDTRMUeXVXhRM0XqMstCxvfDq4oROjJZeWvmLS0nX2YFv5oFEDuteNQDemYY3orvZsvIPwn8D0yd0kM6HjKOV1lmKHdK+9bNAT7yhffvfh1luEQbGdUO9LDAZZv5a2rmLC1C8m6XV8pIe9+8eKJsn9T0MCn6KKtGarf/ruGHcAweLSlvM5g7mx6XBJYMSZ7GlrlejqrWTbzCMEj8gEKG5FZeHfJT+uGZiXzT5k5GSuKejZTzj/4bqFzsW+iNV3VSS6vyNkTNcHpHQa9r7adOYW51M0fbtfWp2aOE1finzKvTnYvYi6+I74fbiB0ZzVSFR48+Io6CUhDyzo8cja4WPLTt+SG/xxZAJoeeZv7N08K9UpnEQO8nOSKUaChc97iuf+jQT7Xku0xaoXNwJzlvBa8ky5OEAn5Dqw4idI4iZpmF+gKrwmV7Hts3mveBW4XiKK17Peek6hlVJTTGu9enWv//dkoUkVnstgy9OyTX8+ivRtPyzUb7zmcOFvY5qOQQG+poPj1zHJRruL+TdA1KVptDxf4roEV4YVSrRr7KdmfHhY2YMFsfzmXSd0BG7RGX7VriBRzSwvKkt9v/Lztbf1nxUs9S15er
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(5660300002)(8936002)(6916009)(4326008)(36756003)(2616005)(956004)(26005)(8676002)(31696002)(31686004)(966005)(186003)(38100700002)(508600001)(86362001)(6486002)(16576012)(2906002)(53546011)(316002)(66556008)(66946007)(83380400001)(66476007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/rbnrT?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d538673a-dda2-4a1b-f33d-08d9486d5762
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 15:21:10.6112
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: rgiA2+8Dkd3sbN2D53NFs35U99l4hI4SmX1jKyCvdCiTMEVdhWEN/wJ5NknDZkHpIznAdUXlBMj5X9RDprTw3A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6384

On 16.07.2021 15:13, Charles-H. Schulz wrote:
> Jan Beulich @ 2021-07-16 09:52 CEST:
>> On 15.07.2021 23:23, Charles-H. Schulz wrote:
>>> Hello,
>>>
>>> I /we /Vates would like to suggest some changes to the policy regarding the
>>> enrollment to the pre-disclosure mailing list of the Xen Security Team.
>>>
>>> We have had some talks with the French national CERT who has a need to be the
>>> recipient of such a list. This national CERT -and in my experience other
>>> national CERTs such as the NIST for instance- is in constant contact with a
>>> large Xen userbase that is mostly made up of large parts of the public sector
>>> as well as critical infrastructure operators belonging to the private
>>> sector. For confidentiality reasons they cannot disclose who uses Xen and
>>> where it is used nor who may be using it internally or within the related
>>> national cybersecurity authority.
>>>
>>> Because of that, their request may not be clear or matching the existing
>>> criteria for inclusion in the mailing list. National CERTs are trusted
>>> actors and have historically been among the very first entities to define,
>>> advocate for and put in practice the very notion of responsible
>>> disclosure. Much of the current practice of Open Source projects in that
>>> regard actually stems from CERTs. As part of their policies and processes
>>> regarding vulnerability disclosure, the notion of confidentiality and
>>> documented, waterfall-like processes of disclosure is play an integral
>>> part of
>>> how they handle informaton and publicity around vulnerability. As a result,
>>> national CERTs (and the French National CERT) do not spread undisclosed
>>> vulnerability without following established and agreed-upon processes. Such
>>> processes include, in our instance, the ones defined and followed by the Xen
>>> Security Team. Compliance with these are the first criteria to earn trust and
>>> respect from the ecosystem and the downstream users. You can see an example
>>> of their work here: https://www.cert.ssi.gouv.fr/
>>>
>>> Part of the mission of the French National CERT is to work with
>>> critical infrastructure providers in securing their IT.
>>> This kind of expertise entails the securing of these information
>>> systems before any unforeseen incident as well as after the incident
>>> (incident remediation).
>>> None of the tasks involved imply the communication of zero-day types
>>> of vulnerabilities or vulnerabilities that are unpublished to the
>>> downstream users.
>>
>> Would you mind shedding some light on the benefits of a national CERT
>> being in the know of unpublished vulnerabilities when they can't share
>> that knowledge with their downstreams, and hence their downstreams -
>> as long as they aren't themselves members of our predisclosure list -
>> would still be zero-dayed at the time of publication of such
>> vulnerabilities? Shouldn't their advice to their downstreams rather be
>> to direct them towards applying for pre-disclosure list membership?
> 
> In practice, most of the downstream users that the CERTs work with are not
> going to subscribe to the Xen pre-disclosure list, nor to any pre-disclosure
> lists of vendors or Open Source Software projects. The downstream users will
> work with CERTs and various cybersecurity service providers (Security
> Operations Centers -SOCs- being a typical example) in order for vulnerability
> discovery, disclosure, patching and later integration of fixes or remediatory
> measures be managed and applied.

It feels to me as if you didn't really answer my question. You restate
what I understood is the current state of things, from your initial mail.
The important aspect "when they can't share that knowledge with their
downstreams" doesn't get discussed at all. All their downstreams would
have to wait not only until public disclosure (instead of patching their
systems - as far as permitted in every individual case - already during
the embargo period), but there'll be an unavoidable further delay,
however small or large. I'm having difficulty seeing how this can be in
everybody's best interest, and hence I can't help suspecting that
information might flow irrespective of this being prohibited except
_among_ members of the predisclosure list.

What I could see is them acting as a proxy for their downstreams, but
this isn't what you've been asking for, and this would also mean much
more of a change to the policy.

> So a national CERT being in the loop of such advanced, upstream vulnerability
> pre-disclosures list is pretty much what a CERT does when it's not publishing
> security advisories of some kind. There are several benefits for a CERT:
> - threat intelligence and analysis: one vulnerability discovered in one
>   source may not be an isolated "incident" - it may be connected to a broader
>   attack made of the exploitation of several vulnerabilities found across
>   different software stacks. This also providers valuable information about the
>   threat landscape and relevance. For instance, Xen having several
>   vulnerability reports is one thing, but what happens if KVM receives a batch
>   of previously unknown vulnerabilities roughly at the same time? For a CERT,
>   that level of information can be very important (sometimes "national
>   security" important)
> 
> - because of a CERT being a nexus of several threat information/intelligence
>   by being as upstream as it can on critical software components, it can then
>   act -not by disclosing or patching yet unpublished vulnerabilities on its
>   own- by setting the effective patching and remediation work on the
>   information systems it is in charge of protecting. In the case of a
>   national CERT, such as the CERT-FR, that would be the French central
>   administration networks and information systems. Essentially it would
>   prioritize the response given the specific level and nature  of threats and the
>   presence of vulnerabilities on the systems (i.e: first patch MS Office,
>   then Apache httpd, then the vulnerability XYZ00123 on Xen as it really
>   affects only a small part of our Xen deployments).
> 
> - last but not least, CERTs act as central vulnerability reports
>   "broadcasters". CERT users/subscribers/clients point to CERTs to receive
>   their daily security watch and alerts. 
> 
>>
>> As to the actual policy - how would you propose to categorize such
>> organizations, i.e. how would a new bullet point in the present
>>
>> "
>> This includes:
>>
>>     Public hosting providers;
>>     Large-scale organisational users of Xen;
>>     Vendors of Xen-based systems;
>>     Distributors of operating systems with Xen support.
>> "
>>
>> look like in your opinion? This is pretty important imo, as it will
>> need to be understood who else might then become eligible.
> 
> I think it's either a very difficult or a very simple question. If I were to
> suggest to simply add a line with "national CERTs" meaning: CERTs that
> operate on behalf of governments for the protection and cybersecurity watch
> of national administration and critical infrastructures" would that be
> accepted? I'm happy with that one. It's really two criteria I'm adding: being
> a CERTs acting wth a clear mandate from a national authority to serve as the
> national computing emergency response team. Not sure how satisfactory that
> is.

So what if some entity acted largely like a "national CERT", but wasn't
called that way? The present items on the list try to use pretty generic
terms, while your suggestion is pretty specific. I'm further afraid that
"a clear mandate from a national authority" may not provide any
justification at all, depending on (often political) view points.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 15:26:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 15:26:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157602.290255 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Pjj-0005AB-Qn; Fri, 16 Jul 2021 15:26:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157602.290255; Fri, 16 Jul 2021 15:26:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Pjj-0005A4-M5; Fri, 16 Jul 2021 15:26:47 +0000
Received: by outflank-mailman (input) for mailman id 157602;
 Fri, 16 Jul 2021 15:26:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=sl2L=MI=citrix.com=George.Dunlap@srs-us1.protection.inumbo.net>)
 id 1m4Pji-00059y-3I
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 15:26:46 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3a599fae-e64a-11eb-898d-12813bfff9fa;
 Fri, 16 Jul 2021 15:26:45 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3a599fae-e64a-11eb-898d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626449205;
  h=from:to:cc:subject:date:message-id:references:
   in-reply-to:content-id:content-transfer-encoding:
   mime-version;
  bh=vR9AZljpdMRupA8hFWDC2Fj58PR9L8gk21t5jCTph9c=;
  b=T3FDF8gviIP/vY7RUajiIqSvskBJ1WtM25CMMRbkOIfD57TBG5HAH4Xc
   ambyMtrTDOAQ5cxEHOBti9x8sa+sPme6Zx2S5QFad1XNBr7Jg2rOFIIHJ
   ids0oiS1FdCEOm1B/FcNUcfVtRKBszOkYWezvhYdoeVTOOUhaHu3rozU8
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: KC0PjbD5DrjgsFihdBHQICN3IdfUOGLOTX1TK/C8kYeBrCcXTnAhNGtrtqpDp8Ypl1AAFI/BWv
 JdrZd6R/3PeYn3uYGqzIRzzvbiQbPvW4ubUJjB8pqC0vpRb0luf7oXwd6SePtrb+q5oN1gcBqC
 ggmJfrRw8ndI8TAJ59fDYfQ8TCrWMV5S0ed5kVeb+20LptYG8PDDtrm9Q60o6VJP0ep7ZkkiZc
 902f/gGWn8ss1IPZg2VAu05C+Vnf8jGgu+luJCtrQCWX3C/Rsnfs2LnQjkt1FOvnpgWROgs6t7
 j0E=
X-SBRS: 5.1
X-MesageID: 48441894
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:PD1X0qhTBgzcD1g1Hsk3gPEIvnBQXh4ji2hC6mlwRA09TyX5ra
 2TdZUgpHrJYVMqMk3I9uruBEDtex3hHP1OkOss1NWZPDUO0VHARO1fBOPZqAEIcBeOldK1u5
 0AT0B/YueAd2STj6zBkXSF+wBL+qj6zEiq792usEuEVWtRGsVdB58SMHfiLqVxLjM2YqYRJd
 6nyedsgSGvQngTZtTTPAh/YwCSz+e78q4PeHQ9dmca1DU=
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="48441894"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=oChI9cD6fdLGaptleoRPagavFc86z+njPKAroBC0u8GlUbZRHAVYg9R/ijJg17YWNv2XGQ070DvKt5SRX66zU5Z6OO4sat2fsn8jHDKunkvxEamnWRjKfaJH3eKzRuW+pEiBn192+YSINKWHwgYgL+k5ruNt2kMvFx6yhe3kOL1O8729MarOHyOUiFj7p03gTS6tU1kNKLJMXZehvlpJDw7Lb2GFsaft8dxkevtgdYBGSbLH/JRT0h6us4VCoPbXO43TKckscLxm7a0MozxRNfbudV2UrPBXp9HryGksbl5uKcMp5SwuNfdEJXYPQNp4kXzxaf5ir2f0BEEu9lFxkA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vR9AZljpdMRupA8hFWDC2Fj58PR9L8gk21t5jCTph9c=;
 b=cXvbikkECcQ5HuCCj59X1KhtfM2k924YPKoU/MoULIi7aebgYwcjaR5fJBQL1CXyPblWZK+zNpOeJGcPA720YCLtlXxqA4wYjt9UpLx/LmAX3xycxQWGF7WwLHwDn9LJ5Zfuec3k3upqhF/1JYucyqfSLrpKcVbVPSGyP8fEWIQi3bO3lut8Z+XBBvYxSbcBklnXoqReXb8iGO/eB5gsBJlWR3MwLf/saMkuk+ouP7E24yU+IDVuWHL62cm2pXZe1MsBsGgMndWiZXgFO3NqBUN+llC0swxd+9EYB5Vne7EuRif2b+sagKSIozV7cNQj9vstWl7lmCyZQ3iaRjIzDw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vR9AZljpdMRupA8hFWDC2Fj58PR9L8gk21t5jCTph9c=;
 b=JuEeD12dHwTooYMJcqAw/RPAH5gRp/ePne4gc8eSFn/nl2dwabL4s2xUqrybPMda++pwqF4pQBB05Q+BjQr6ujKLWoDfbbokbnkWn8m+aTaFlkWlFJKx4aDClMe5/LWuAT5zxLcjNM1QRxdT8n5ZfHeea3+qbm2rMkQKBHGkL1I=
From: George Dunlap <George.Dunlap@citrix.com>
To: Anthony Perard <anthony.perard@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Andrew
 Cooper" <Andrew.Cooper3@citrix.com>, Ian Jackson <iwj@xenproject.org>, "Jan
 Beulich" <jbeulich@suse.com>, Julien Grall <julien@xen.org>, "Stefano
 Stabellini" <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Thread-Topic: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Thread-Index: AQHXeMzvUpPSASSz7E6vsns5WsIEC6tFvFWA
Date: Fri, 16 Jul 2021 15:26:39 +0000
Message-ID: <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
In-Reply-To: <20210714161734.256246-1-anthony.perard@citrix.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.60.0.2.21)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 116b0791-102f-494a-42b5-08d9486e1b4e
x-ms-traffictypediagnostic: PH0PR03MB5927:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PH0PR03MB59270AF6B8BDAB18F5A9F5CF99119@PH0PR03MB5927.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: e/5OyI0bdeA2+uUSwh6BSshneUNsQELTaOTvUR8ODYr/7d19Rc8+k99jEDDYKqC1v+eqf2Etb4/UnJv4NuyveA37cRGWBiW5QW5Z6AAWRwn3QV/+L9hTPM4yCS8ylyGd5eK3Hr5aaplIPzO3ePs8DxK1UP3dyW41R6ChIYmDTiL2/HXKfgx+qgxRBE/XTSYq1QTEtq/wHz70zx/R1KKJq6M4Twz8dofyRZhWlSJLXDlDFuW9WGWuE4MITmd5r28iTUQPT+I4EOQ+OAWq4LY5TQ1aaqmvhv1XZ4WmPwiNXCRUsB22QpYx7Qgx82zBTObsY8vGV299Q85yfbGJ5vtUgsL0HdPTFyMuDtmZFlyO+dPInBoKozgtppe07Lm5prrUhdPCK4ZbI+RWvC/9VwvEpNPYtx5/08gQbRB3ImniKd7m/B//8l+kpH8gG5aobOXgC+w7XOD0rkh22J6fhdiWV2zdPrFodQggNgsREP9Bu3kjR9dYzKp7i2hMnzqN7p08sHhzzxAcF7ppn5vJs765JvsaviJEOBS68XihyXUynUiCHqxDXsh7UFmm4rpVbUeaHySfnzoy+iJTK7IAIpaGIo27wL88+uhYjC3eCFqjjckLvwGG+SJ7GlOt3ZDrohIjcVVQisBDg3V1pXTiSU2a+I/fUld1qqA0nz1hgK99Rw+j+ULgihv/S8/Brvn1Y/kM9vr+UURYnqGi7yRD84yHzDJPVGDuVqwXDdspUUtAIL8=
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR03MB5669.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(376002)(396003)(366004)(136003)(316002)(71200400001)(26005)(4326008)(5660300002)(37006003)(6862004)(54906003)(8676002)(186003)(6636002)(83380400001)(122000001)(86362001)(6506007)(38100700002)(2616005)(6486002)(53546011)(8936002)(6512007)(66476007)(33656002)(36756003)(478600001)(76116006)(91956017)(66556008)(4744005)(2906002)(66946007)(64756008)(66446008)(38070700004)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
Content-Type: text/plain; charset="utf-8"
Content-ID: <8FB93E547262E541A3144AE07B36BFF0@namprd03.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR03MB5669.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 116b0791-102f-494a-42b5-08d9486e1b4e
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jul 2021 15:26:39.0655
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: j2LtE5g1A4OMdkHQNMurg9Lmd9500i8/QljUnNdkZ8lq8M0cqp8BfL0gaM4F9CKtHBycofzrdUjTx4sY8MtxPg808QrDmzinnkVRmJy9ZPI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5927
X-OriginatorOrg: citrix.com

DQoNCj4gT24gSnVsIDE0LCAyMDIxLCBhdCA1OjE3IFBNLCBBbnRob255IFBFUkFSRCA8YW50aG9u
eS5wZXJhcmRAY2l0cml4LmNvbT4gd3JvdGU6DQo+IA0KPiBUaGlzIHdpbGwgaGVscCBwcmV2ZW50
IHRoZSBDSSBsb29wIGZyb20gaGF2aW5nIGJ1aWxkIGZhaWx1cmVzIHdoZW4NCj4gYGNoZWNrcG9s
aWN5YCBpc24ndCBhdmFpbGFibGUsIHdoZW4gZG9pbmcgInJhbmRjb25maWciIGpvYnMuDQoNCkhh
bmcgb24sIGp1c3QgdG8gY2xhcmlmeSB3aGF04oCZcyBnb2luZyBvbiBoZXJlLg0KDQrigJhyYW5k
Y29uZmln4oCZIGlzIHNldHRpbmcgQ09ORklHX1hTTV9GTEFTS19QT0xJQ1kgaW4gdGhlIC5jb25m
aWcgZmlsZTsgYW5kIHRoZW4gd2hlbiB0aGUgYnVpbGQgaGFwcGVucywgd2UgZXJyb3Igb3V0IGJl
Y2F1c2Ugb25lIG9mIHRoZSByZXF1aXJlZCBjb21wb25lbnRzIGlzbuKAmXQgdGhlcmUuDQoNCldo
YXQgdGhpcyBwYXRjaCBkb2VzIGlzIHRvIG1ha2UgaXQgc28gdGhhdCBpZiBzb21lb25lIGV4cGxp
Y2l0bHkgc2V0cyBDT05GSUdfWFNNX0ZMQVNLX1BPTElDWT15LCBidXQgZG9lc27igJl0IGhhdmUg
Y2hlY2twb2xpY3ksIHRoZSBidWlsZCBzeXN0ZW0gd2lsbCBzaWxlbnRseSBkaXNhYmxlIHRoZSBw
b2xpY3kgYmVoaW5kIHRoZWlyIGJhY2tzIHdpdGhvdXQgdGVsbGluZyB0aGVtPw0KDQpPciBkb2Vz
IHRoZSByYW5kY29uZmlnIHRlc3QgcnVuIGtDb25maWcgb25lIG1vcmUgdGltZSwgYXQgd2hpY2gg
cG9pbnQgKnRoZW4qIHRoZSAuY29uZmlnIHdpbGwgYmUgZGlzYWJsZWQ/DQoNClRoZSBmb3JtZXIg
SSB0aGluayBpcyBicm9rZW47IHRoZSBsYXR0ZXIgSSB0aGluayBpcyBmaW5lLg0KDQogLUdlb3Jn
ZQ0KDQo=


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 15:30:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 15:30:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157609.290267 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Pmp-0005pl-7q; Fri, 16 Jul 2021 15:29:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157609.290267; Fri, 16 Jul 2021 15:29:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Pmp-0005pe-3U; Fri, 16 Jul 2021 15:29:59 +0000
Received: by outflank-mailman (input) for mailman id 157609;
 Fri, 16 Jul 2021 15:29:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4Pmn-0005pY-GH
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 15:29:57 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ac7a86ca-e64a-11eb-898d-12813bfff9fa;
 Fri, 16 Jul 2021 15:29:56 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 5133E613E3;
 Fri, 16 Jul 2021 15:29:55 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ac7a86ca-e64a-11eb-898d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626449395;
	bh=gwbpEM2I/t3yULslsQrJ4ImN5wzlSWPQIZoIz0IW+1s=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=f4ofUif5kH18TRPd4Y5z3aE1G7LQpbotUnjc8VuGp2I0yUtnZmdrMkMmoSR88EIa+
	 93kwmtIAUZ+oxmpJDNFFwxMEHn0SbGInIDxf63X8rFRBR/PMU2qW79TzYbsdKUXP6E
	 TUlYwbBlP/kaK9xxZMt+hsAHUqpt7w2RQi8IUzGxo22CMlgSQ1xq/KON5g8oKnjDtG
	 K1m2MpWwWkYQGM59WC2at2zpyln+B+Pz1po9li/5AK7BX73kdWyYxj8uTBAb1OJoMe
	 bW9dDdfbJ+KUVFSQqbzf2kBoLOQu77gYyJ+5VtTHbUVbGYj6U6W33FpA43P3eumjUD
	 88TIOyOE730zQ==
Date: Fri, 16 Jul 2021 08:29:54 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Roman Skakun <rm.skakun@gmail.com>
cc: Christoph Hellwig <hch@lst.de>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, 
    Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org, 
    iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, 
    Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
    Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
    Volodymyr Babchuk <volodymyr_babchuk@epam.com>, 
    Andrii Anisov <andrii_anisov@epam.com>, 
    Roman Skakun <Roman_Skakun@epam.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc
 addresses
In-Reply-To: <CADu_u-OYA+Z_y-DBLxyUYGhmLVMtLggmZ_SnRiEtw9EGrO4oGg@mail.gmail.com>
Message-ID: <alpine.DEB.2.21.2107160828430.3916@sstabellini-ThinkPad-T480s>
References: <20210715170011.GA17324@lst.de> <20210716083934.154992-1-rm.skakun@gmail.com> <20210716093551.GA17981@lst.de> <CADu_u-OYA+Z_y-DBLxyUYGhmLVMtLggmZ_SnRiEtw9EGrO4oGg@mail.gmail.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="8323329-2042327733-1626449395=:3916"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-2042327733-1626449395=:3916
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8BIT

On Fri, 16 Jul 2021, Roman Skakun wrote:
> > Technically this looks good.  But given that exposing a helper
> > that does either vmalloc_to_page or virt_to_page is one of the
> > never ending MM discussions I don't want to get into that discussion
> > and just keep it local in the DMA code.
> >
> > Are you fine with me applying this version?
> 
> Looks good to me, thanks!
> But, Stefano asked me about using created helper in the
> xen_swiotlb_free_coherent()
> and I created a patch according to this mention.
> 
> We can merge this patch and create a new one for
> xen_swiotlb_free_coherent() later.

Yeah, no worries, I didn't know that exposing dma_common_vaddr_to_page
was problematic.

This patch is fine by me.


> пт, 16 июл. 2021 г. в 12:35, Christoph Hellwig <hch@lst.de>:
> >
> > Technically this looks good.  But given that exposing a helper
> > that does either vmalloc_to_page or virt_to_page is one of the
> > never ending MM discussions I don't want to get into that discussion
> > and just keep it local in the DMA code.
> >
> > Are you fine with me applying this version?
> >
> > ---
> > From 40ac971eab89330d6153e7721e88acd2d98833f9 Mon Sep 17 00:00:00 2001
> > From: Roman Skakun <Roman_Skakun@epam.com>
> > Date: Fri, 16 Jul 2021 11:39:34 +0300
> > Subject: dma-mapping: handle vmalloc addresses in
> >  dma_common_{mmap,get_sgtable}
> >
> > xen-swiotlb can use vmalloc backed addresses for dma coherent allocations
> > and uses the common helpers.  Properly handle them to unbreak Xen on
> > ARM platforms.
> >
> > Fixes: 1b65c4e5a9af ("swiotlb-xen: use xen_alloc/free_coherent_pages")
> > Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> > Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> > [hch: split the patch, renamed the helpers]
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
> > ---
> >  kernel/dma/ops_helpers.c | 12 ++++++++++--
> >  1 file changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> > index 910ae69cae77..af4a6ef48ce0 100644
> > --- a/kernel/dma/ops_helpers.c
> > +++ b/kernel/dma/ops_helpers.c
> > @@ -5,6 +5,13 @@
> >   */
> >  #include <linux/dma-map-ops.h>
> >
> > +static struct page *dma_common_vaddr_to_page(void *cpu_addr)
> > +{
> > +       if (is_vmalloc_addr(cpu_addr))
> > +               return vmalloc_to_page(cpu_addr);
> > +       return virt_to_page(cpu_addr);
> > +}
> > +
> >  /*
> >   * Create scatter-list for the already allocated DMA buffer.
> >   */
> > @@ -12,7 +19,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
> >                  void *cpu_addr, dma_addr_t dma_addr, size_t size,
> >                  unsigned long attrs)
> >  {
> > -       struct page *page = virt_to_page(cpu_addr);
> > +       struct page *page = dma_common_vaddr_to_page(cpu_addr);
> >         int ret;
> >
> >         ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
> > @@ -32,6 +39,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
> >         unsigned long user_count = vma_pages(vma);
> >         unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
> >         unsigned long off = vma->vm_pgoff;
> > +       struct page *page = dma_common_vaddr_to_page(cpu_addr);
> >         int ret = -ENXIO;
> >
> >         vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs);
> > @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
> >                 return -ENXIO;
> >
> >         return remap_pfn_range(vma, vma->vm_start,
> > -                       page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff,
> > +                       page_to_pfn(page) + vma->vm_pgoff,
> >                         user_count << PAGE_SHIFT, vma->vm_page_prot);
> >  #else
> >         return -ENXIO;
> > --
> > 2.30.2
> >
> 
> 
> -- 
> Best Regards, Roman.
> 
--8323329-2042327733-1626449395=:3916--


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 15:50:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 15:50:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157618.290285 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Q6P-0000UK-RX; Fri, 16 Jul 2021 15:50:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157618.290285; Fri, 16 Jul 2021 15:50:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Q6P-0000UD-O9; Fri, 16 Jul 2021 15:50:13 +0000
Received: by outflank-mailman (input) for mailman id 157618;
 Fri, 16 Jul 2021 15:50:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=CyKe=MI=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m4Q6N-0000U6-L9
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 15:50:11 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id aadc08a7-a276-44aa-8f31-666913e7e190;
 Fri, 16 Jul 2021 15:50:08 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 5BBB51FEC3;
 Fri, 16 Jul 2021 15:50:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 04E8313AFC;
 Fri, 16 Jul 2021 15:50:06 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id AHS8Oq6q8WBOaAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 16 Jul 2021 15:50:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aadc08a7-a276-44aa-8f31-666913e7e190
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626450607; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=lXy48QuWUvGXK2y0/GrM/08MUhOFaXIssXSLAV6VtMU=;
	b=kncXsew4tVJrxD1lN7K8EqYT0qTl+xQSyx/bxO+88c2fLyHx2lKSyc87C2cbxen/3Z1EeO
	sfxXa0T5BWm0emBJNkOJxWvUah8honhTAiCN9AT1IFG2HSEWGPJsrCVleTAgw3yuzU7x1j
	XwC4XZI/+6vYnpszyJuu3WT8RA08biA=
To: George Dunlap <George.Dunlap@citrix.com>,
 Anthony Perard <anthony.perard@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <Andrew.Cooper3@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
From: Juergen Gross <jgross@suse.com>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <e072846b-5aa3-2403-5e0f-723577fe25e5@suse.com>
Date: Fri, 16 Jul 2021 17:50:06 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="HYYijo62PUGMbkKdaB8ngw2gocOggvaMW"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--HYYijo62PUGMbkKdaB8ngw2gocOggvaMW
Content-Type: multipart/mixed; boundary="uww06YkSnHksOTqt7Z6y4Bj0CFxirMY2u";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: George Dunlap <George.Dunlap@citrix.com>,
 Anthony Perard <anthony.perard@citrix.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrew Cooper <Andrew.Cooper3@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Message-ID: <e072846b-5aa3-2403-5e0f-723577fe25e5@suse.com>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
In-Reply-To: <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>

--uww06YkSnHksOTqt7Z6y4Bj0CFxirMY2u
Content-Type: multipart/mixed;
 boundary="------------CE816C7DA3D8074A6E0AB358"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------CE816C7DA3D8074A6E0AB358
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 16.07.21 17:26, George Dunlap wrote:
>=20
>=20
>> On Jul 14, 2021, at 5:17 PM, Anthony PERARD <anthony.perard@citrix.com=
> wrote:
>>
>> This will help prevent the CI loop from having build failures when
>> `checkpolicy` isn't available, when doing "randconfig" jobs.
>=20
> Hang on, just to clarify what=E2=80=99s going on here.
>=20
> =E2=80=98randconfig=E2=80=99 is setting CONFIG_XSM_FLASK_POLICY in the =
=2Econfig file; and then when the build happens, we error out because one=
 of the required components isn=E2=80=99t there.
>=20
> What this patch does is to make it so that if someone explicitly sets C=
ONFIG_XSM_FLASK_POLICY=3Dy, but doesn=E2=80=99t have checkpolicy, the bui=
ld system will silently disable the policy behind their backs without tel=
ling them?
>=20
> Or does the randconfig test run kConfig one more time, at which point *=
then* the .config will be disabled?
>=20
> The former I think is broken; the latter I think is fine.

I still think that Kconfig should not disable explicit settings due to
tools not being available.

I'd be fine with trimodal settings for such parameters:

- Off
- On
- On if tools available

And the last one could even be the default.

But anyone wanting to test a specific option or to enable an option
should not be catched by surprise because some internal modification is
requesting another tool which happens not to be available.

BTW, the same applies to ./configure options for tools. I really don't
like that some components are silently not built because e.g. a header
file is not available. I'd rather have the possibility to tell
=2E/configure that I want everything built and let the build fail if that=

is not possible.


Juergen

--------------CE816C7DA3D8074A6E0AB358
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------CE816C7DA3D8074A6E0AB358--

--uww06YkSnHksOTqt7Z6y4Bj0CFxirMY2u--

--HYYijo62PUGMbkKdaB8ngw2gocOggvaMW
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmDxqq4FAwAAAAAACgkQsN6d1ii/Ey+N
7wgAj9CUoYE4s4PgwFbRDhwj5XWydiQKJgKJhd6nxD5UvTASmhv3VBFTS7hpfzEq9xZdpYdy2KO6
wfK+9Z8zm4okwyPtBPd9YJ2ATh9uMrfxh70EWfg/3qhTJ4QrxfgGxLZ6AC/U4E6kEQ7Va60Dydj3
kmjNMCphg0ob1WoYHgB4vsOHDfq0T0cuXzlEhrgWkj0rnKqqqAfj2zgQ7ECUJi3ZfIudpYYASf6q
OYii1OzTofZEVLxOevVp7U2TP2zLXNgm3EwA3EhF2Vv2BOM6ed7vNl74tDhR+E/uherlzyCuv3PJ
GegUiaewUOy3DGA557J9DF+YUOt0pV71PsSXSsWqOA==
=aH3r
-----END PGP SIGNATURE-----

--HYYijo62PUGMbkKdaB8ngw2gocOggvaMW--


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 15:56:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 15:56:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157625.290297 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QCO-0001DL-Fa; Fri, 16 Jul 2021 15:56:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157625.290297; Fri, 16 Jul 2021 15:56:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QCO-0001DE-CT; Fri, 16 Jul 2021 15:56:24 +0000
Received: by outflank-mailman (input) for mailman id 157625;
 Fri, 16 Jul 2021 15:56:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4QCN-0001D8-SJ
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 15:56:23 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5de37c66-e64e-11eb-8993-12813bfff9fa;
 Fri, 16 Jul 2021 15:56:22 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5de37c66-e64e-11eb-8993-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626450982;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=OVT3TKsp7587VJh7JP9hbNWyUdtqtuz8NeV2ZLQl4B8=;
  b=EtYMLDlZcd7IGRjvYlvaWvF6hoAUqFVSwvRYZPkElPDorkZ4KoGTdhf0
   yiWu7beSwwNKoyoh3WBTOWutsMBGS2wnGMN/vog6DKDs8V/ma0Fb3Xap4
   j/ZnRk8/8vxQmEc0CGRYg5s/GSzxGdF89qeb7Ce2c/88xTIPw43FRIfr/
   8=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 64+1SX+S6gVK3jLfp5qQLGDPIbWvh7DFFMXXlEQkLeszC0zHQapgIP3u24nYC5Wyoi7IJGc4VK
 zdAATMxfaN13t/5p6u5lyU7RMLYbmhLfOU/cCk6x3HBBx3wFaD/tzvBXebeM3uxlh/chjJY9EP
 3E1WCCcfuUe1OzJbAumPQPAeIxeq8yEsgJFrNuFDTyEh8eDGRLDfY5WZ/xFgV3w7BrUvP9J+MP
 //5h43nZjFLLm9J2Qc7SCclROQtBantsisXWshRabIozYuqM4jLCzubom/rCqKFI2ZWt/auHqk
 1HA=
X-SBRS: 5.1
X-MesageID: 48453275
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:0TxUDqDfco6TIC3lHemU55DYdb4zR+YMi2TC1yhKKCC9Vvbo8P
 xG+85rsyMc6QxhPE3I9urtBEDtexzhHNtOkPAs1NSZLWzbUQmTXeJfBOLZqlWKcUDDH6xmpM
 VdmsBFeaXN5DNB7foSjjPXL+od
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="48453275"
Date: Fri, 16 Jul 2021 16:56:18 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: George Dunlap <George.Dunlap@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Andrew
 Cooper" <Andrew.Cooper3@citrix.com>, Ian Jackson <iwj@xenproject.org>, "Jan
 Beulich" <jbeulich@suse.com>, Julien Grall <julien@xen.org>, "Stefano
 Stabellini" <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <YPGsIuO20fmz+h+Q@perard>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>

On Fri, Jul 16, 2021 at 04:26:39PM +0100, George Dunlap wrote:
> 
> 
> > On Jul 14, 2021, at 5:17 PM, Anthony PERARD <anthony.perard@citrix.com> wrote:
> > 
> > This will help prevent the CI loop from having build failures when
> > `checkpolicy` isn't available, when doing "randconfig" jobs.
> 
> Hang on, just to clarify what’s going on here.
> 
> ‘randconfig’ is setting CONFIG_XSM_FLASK_POLICY in the .config file; and then when the build happens, we error out because one of the required components isn’t there.
> 
> What this patch does is to make it so that if someone explicitly sets CONFIG_XSM_FLASK_POLICY=y, but doesn’t have checkpolicy, the build system will silently disable the policy behind their backs without telling them?
> 
> Or does the randconfig test run kConfig one more time, at which point *then* the .config will be disabled?
> 
> The former I think is broken; the latter I think is fine.

That's right, Xen's build system is broken.

Kconfig doesn't say whether a given .config is correct or not, it
removes non existing CONFIG_* setting as well as those that are missing
dependencies. This isn't new, this is the default, this is how Linux is
using Kconfig.

But there's a way out of that.
There's an option to prevent Kconfig from updating .config, setting
KCONFIG_NOSILENTUPDATE in the environment (see docs/misc/kconfig.rst).
But that won't work as expected with the Xen build system because to
update the config via "syncconfig" doesn't prevent the build system from
building Xen (and probably fail later).
If it were working, build would fail, and user would have to run
"oldconfig" or other *config targets, and check the result (diff
.config.old .config).

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 16:15:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 16:15:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157633.290309 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QUa-0004AG-6c; Fri, 16 Jul 2021 16:15:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157633.290309; Fri, 16 Jul 2021 16:15:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QUa-0004A9-3N; Fri, 16 Jul 2021 16:15:12 +0000
Received: by outflank-mailman (input) for mailman id 157633;
 Fri, 16 Jul 2021 16:15:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3zi8=MI=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m4QUZ-0004A3-1Y
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 16:15:11 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fdaea084-e650-11eb-899f-12813bfff9fa;
 Fri, 16 Jul 2021 16:15:09 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fdaea084-e650-11eb-899f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626452109;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=qi/0MKpUhsMWSdazeCCbRG7PbIrzbJG8w5alOwgNjUk=;
  b=OCXl1wbwYvax62AU0fwAJMNDLky71uCEXDoKtU2TEJvY8aW4Qqr7lG9K
   p2xDlBqT/kyNtYqAfI9W32YsayTcJjHhR69TVpkLfaRM+MYrVwg5FAIXh
   L17KWisBfWDSoe/fXENwKyL6NIUc8vli/FvYIXkx8wd0+Ofe1rhjfS7ew
   4=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: JjUiUbn8XNwQOAKzU+z1OlpTthx/Cr0yCJFA4Y4sVVaC3hNWNqFcqtCIJdFt4NRmrSHG7hs47x
 VdtcPahfNxo6Z3BFv6qgeRrFq68iJtaEAF4pc/Eny57MbmkmAjMCSf4UJ95SFrE9t4SpDNroo2
 UWngoBDhtJsAaaMEUF4fX+KB6RIz27mHl0gA8ML7n8gzJltQbmKGbH5/wj76tRFzmzEwBWl+Ph
 LjGrkO2Aw+GWJDUi3RHWtkacDNkWDBgdIdnTBsOiCpcXGHTvnBCl93M7tqpvqjoMjID/iTltDN
 00U=
X-SBRS: 5.1
X-MesageID: 48446561
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:J63ZyaGbcZaVUV+LpLqEEseALOsnbusQ8zAXPiBKJCC9vPb5qy
 nOpoV+6faQslwssR4b9uxoVJPvfZq+z+8R3WByB8bAYOCOggLBQL2KhbGI/9SKIVydygcy78
 Zdm6gVMqyMMbB55/yKnDVRxbwbsaa6GKPDv5ah8590JzsaDJ2Jd21Ce32m+ksdfnghObMJUK
 Cyy+BgvDSadXEefq2AdwM4t7iqnayzqHr+CyR2fyIa1A==
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="48446561"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JUsxg0h3+JB9+WKq5fcS8VYvu8hN67U30oLKkUu1cVTuzIDyGYn+GTGqIcGrb33i+bRj1/vZ6z9+lvRJQcoI8TtXhtyWxZB4xPiKocg7aP9maNBNH55gjLLPi3DZVpzRTHsyirc9vLZaDN21jIiNArmmPmbJDJOAVmSccJaEY+ib/Xvh/yoRsHvSic9vGZhWIpVKWsy8sVpLgdXVkpoOk/lXE3DXANFpcfgM/XtE7tImhxAGwDr7JEVfG41ZiGdCnL4g9+AwPVt0SmJ+svZTAp3MwwDuW8z8WcMU5t9Hv0Q0MLdjseK3I4Dr/UiCNOXOFzcvkBQfqFk8Q6Qv98n/qw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qi/0MKpUhsMWSdazeCCbRG7PbIrzbJG8w5alOwgNjUk=;
 b=WUDu7VDYl0K/vG9RoK2FJ5DIkijj9Qil4zgQkpiD3mVd+WKvAcuVVyzphoaI8ik0A1r8aPePINKbISCVPAuUSAez6NYQuNpeXb65cp7FZOvG9CpyNcwbqROCn7W9mzdmUJB9vq40zKuu1Ss2kZMzQZ0jJveE1Y17c6DjyiI09fEo5n8xnrGugfbCO/cCLs7cr5lRmCpqBAC7HBF3fxT1gli1e+i1jhsLGL3o1jTUPM8zV580KKBMShtMy57OP3JiJrwWtMPxtGgGmtdEYTaVm7Z4234nWV+SD03y1E8iCDlgdkch0v58VKBRt7PJoUTIGDOySqbJGGIcH7v8vr6ZSQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qi/0MKpUhsMWSdazeCCbRG7PbIrzbJG8w5alOwgNjUk=;
 b=ik5j25u125E5fiEVRzMmGQAzdQm+dJnNw+GyRTbRZYogrLz3SeTgorTxjnQly05NgOYUCwprIsI4tgQKpaD7B6Zaa+ttEebGgrBwx2ozO8K09Dt3pOOBja3AD1cO0syln9HI+xbjvEgmKFYNSB2MgtoRPDywBAwUfGIW7SoKpX0=
To: George Dunlap <George.Dunlap@citrix.com>, Anthony Perard
	<anthony.perard@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <fc2e93b7-020d-1a47-b411-5220e8de74e9@citrix.com>
Date: Fri, 16 Jul 2021 17:14:54 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0504.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1ab::23) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f56cc124-0210-445e-79cd-08d94874dce8
X-MS-TrafficTypeDiagnostic: BYAPR03MB3493:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB349371E049DA8EC0298E5574BA119@BYAPR03MB3493.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: XzIIoSnPg2+fY6SeFW2ei3ATDJ4PqHFGLZKp4w7JkXnygSWNfsk7ZTufcBGtLIs2Xa8wsySHGQg1TuDqJLjhXAb4LNqZjBe7DMirmztFzY0oUQ/mJif7gHgxW73QQd6VU9QXcdFH1DrL7KSEwAjLBWU6EPArkijTo6h9fp5bFWDhOaqNY8T9SOsnmcb9wqgPWk/exbg7tHgE+CYKLbSsOCLzN8twYbDVooN0WnyICON4cxAtPy8uOtzqK03pLhoNkTRgbp6nJB6JpHnaRpiWfja8yhMNG9gaHJz0G5Vx431OqC07MneQXv84jeI55G+aKQXkO+OvjqYfXPzeLCi2T5GpdKjO68WuEFXSFk/4Ln16i4YpT8JCK7rFum7dxicJktPyudKeEG/d2ZzNW1MftLv98Y3O1zTfIqgiei++k5u22fvyFoPtQafTBnZTUHeX5XWIdrSXXku3r8SS2jemfBLpO1NIqqyL71G6FwklxbS54jq2JjtOTkgAWcNWh4S9e2BcCMi8HuwK/jEpRfGrJDj8dEzLnX4cUGm9a8yMWyWqylMh53nJYTRq5T1bTdJr200JP3VMhFjBpvaGXCimRGXRP/z396ld1hUbwYjehKAHze9cVhNk97BTwcxb85OD/ZuWrLRcUhqb2QBWQqLZauKF866zzJIBWHe7N0SltupTjzcCo5DO1fiGMGv5OQKgzyUJn0xy1jHqghERRXWDaknPLIKxArRFVa3428lInhs=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(396003)(136003)(346002)(376002)(39860400002)(6636002)(186003)(110136005)(66946007)(53546011)(38100700002)(83380400001)(26005)(316002)(8676002)(66476007)(66556008)(16576012)(4326008)(31686004)(31696002)(5660300002)(2906002)(2616005)(54906003)(956004)(8936002)(6486002)(478600001)(36756003)(86362001)(6666004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?fQyouGfOog6MrSgf6f/neSjqQeIueCng+VExZM2?=
X-MS-Exchange-CrossTenant-Network-Message-Id: f56cc124-0210-445e-79cd-08d94874dce8
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 16:15:01.0394
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Zneu9q0ndSgzn3eMriL7wHAZq3/lipsU1/gJw9ZcqUDuFzQqsMeW3zWytzLVFOMjjbM4Tu9vOWD1eZGI/K+Tz5Wd3S5l0s7QGw102W2MENY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3493
X-OriginatorOrg: citrix.com

On 16/07/2021 16:26, George Dunlap wrote:
>
>> On Jul 14, 2021, at 5:17 PM, Anthony PERARD <anthony.perard@citrix.com> =
wrote:
>>
>> This will help prevent the CI loop from having build failures when
>> `checkpolicy` isn't available, when doing "randconfig" jobs.
> Hang on, just to clarify what=E2=80=99s going on here.
>
> =E2=80=98randconfig=E2=80=99 is setting CONFIG_XSM_FLASK_POLICY in the .c=
onfig file; and then when the build happens, we error out because one of th=
e required components isn=E2=80=99t there.
>
> What this patch does is to make it so that if someone explicitly sets CON=
FIG_XSM_FLASK_POLICY=3Dy, but doesn=E2=80=99t have checkpolicy, the build s=
ystem will silently disable the policy behind their backs without telling t=
hem?

Yes, but that's how ~everything in the Xen and Linux build works currently.

What this new version will do is produce a config/build combo, with the
config reporting that CONFIG_XSM_FLASK_POLICY was not active.

This is a damnsignt better than the "old" way of doing feature checks in
the makefiles, where there is no trace that the build system disabled a
feature because your compiler was too old.

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 16:18:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 16:18:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157639.290320 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QXR-0004pq-LW; Fri, 16 Jul 2021 16:18:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157639.290320; Fri, 16 Jul 2021 16:18:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QXR-0004pj-Ib; Fri, 16 Jul 2021 16:18:09 +0000
Received: by outflank-mailman (input) for mailman id 157639;
 Fri, 16 Jul 2021 16:18:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=S0q/=MI=deltatee.com=logang@srs-us1.protection.inumbo.net>)
 id 1m4QXQ-0004pb-8g
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 16:18:08 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ff9ffa4d-ba3b-4830-a398-3f12860cce1f;
 Fri, 16 Jul 2021 16:18:07 +0000 (UTC)
Received: from guinness.priv.deltatee.com ([172.16.1.162])
 by ale.deltatee.com with esmtp (Exim 4.92)
 (envelope-from <logang@deltatee.com>)
 id 1m4QXJ-0003ky-3C; Fri, 16 Jul 2021 10:18:01 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ff9ffa4d-ba3b-4830-a398-3f12860cce1f
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:In-Reply-To:MIME-Version:Date:
	Message-ID:From:References:Cc:To:content-disposition;
	bh=BnhY0izzSFVDQcuht2cro6XvHSIBnnpJHK/4w8E4yWs=; b=lHiHBr9UmxsphzyuJXXrFvFkXJ
	nHnU2Aad+t4uXkXpqnoYYQXL8s0VDrTpcUrSa7MBf3lHNc8SwA72FIyA0EFnNsLaMjuY1HyVFc4eY
	86UCMlrgVGkMX16Elm46rVT3dMTeEwZNCX1a+CjIpwSiCKZgO96vmX56LfZWgzS5j7bcdiascYBT7
	QpZUtkyACvD3Bob5Y0jFlifJMDasY0nH1O+2FuN7wP4IsecNoMeLFw+7g7lmwXVQFM8ujekY7qsib
	a39261ZQjmb8njie60hE0kfk/jWrRkVOwj7hryYFQZ5ncmwJY+tyhtISQB4927wPhvb2n8G328kwr
	zFWziVNw==;
To: Christoph Hellwig <hch@lst.de>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
 linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
 linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
 linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
 iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
 xen-devel@lists.xenproject.org, Marek Szyprowski <m.szyprowski@samsung.com>,
 Robin Murphy <robin.murphy@arm.com>, Stephen Bates <sbates@raithlin.com>,
 Martin Oliveira <martin.oliveira@eideticom.com>
References: <20210715164544.6827-1-logang@deltatee.com>
 <20210715164544.6827-17-logang@deltatee.com> <20210716063332.GD13345@lst.de>
From: Logan Gunthorpe <logang@deltatee.com>
Message-ID: <82c0f8d8-9050-dcf7-d68d-93691878a6dd@deltatee.com>
Date: Fri, 16 Jul 2021 10:17:58 -0600
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210716063332.GD13345@lst.de>
Content-Type: text/plain; charset=utf-8
Content-Language: en-CA
Content-Transfer-Encoding: 7bit
X-SA-Exim-Connect-IP: 172.16.1.162
X-SA-Exim-Rcpt-To: martin.oliveira@eideticom.com, sbates@raithlin.com, robin.murphy@arm.com, m.szyprowski@samsung.com, xen-devel@lists.xenproject.org, linux-parisc@vger.kernel.org, iommu@lists.linux-foundation.org, sparclinux@vger.kernel.org, linux-s390@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-mips@vger.kernel.org, linux-ia64@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org, hch@lst.de
X-SA-Exim-Mail-From: logang@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.9 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	NICE_REPLY_A autolearn=ham autolearn_force=no version=3.4.2
Subject: Re: [PATCH v1 16/16] dma-mapping: Disallow .map_sg operations from
 returning zero on error
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)



On 2021-07-16 12:33 a.m., Christoph Hellwig wrote:
> On Thu, Jul 15, 2021 at 10:45:44AM -0600, Logan Gunthorpe wrote:
>> @@ -194,6 +194,8 @@ static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
>>  	else
>>  		ents = ops->map_sg(dev, sg, nents, dir, attrs);
>>  
>> +	WARN_ON_ONCE(ents == 0);
> 
> Turns this into a negative error code while we're at it, just to keep
> the callers sane?
> 

Sure thing. All the feedback makes sense, we'll fix it up and send a v2
in due course.

Thanks,

Logan


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 16:23:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 16:23:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157647.290332 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Qcn-0006FE-8j; Fri, 16 Jul 2021 16:23:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157647.290332; Fri, 16 Jul 2021 16:23:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Qcn-0006F7-5P; Fri, 16 Jul 2021 16:23:41 +0000
Received: by outflank-mailman (input) for mailman id 157647;
 Fri, 16 Jul 2021 16:23:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4Qcl-0006F1-A5
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 16:23:39 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 43c67b32-4551-4bce-a007-7dd082171dd8;
 Fri, 16 Jul 2021 16:23:38 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 43c67b32-4551-4bce-a007-7dd082171dd8
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626452618;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=B3tE4f57NelE1LohuNJ9hG9uHNWiBTNxUFDOpF+Jmms=;
  b=XQ6mez6m58dau3goYbFiHILUqu8O6mcmruDgErEkSL5bY95fM0X4DQsp
   2JuZzWKTSGP6UHhUkT9oo5l53DMug26ovnhr32BnTfvv2IYuhLoqmD35H
   BETbqVMgswQceUdGosrdfgn4aPfXdURoCfyCHJlEWeeD4QQ94B7Xmbx+y
   Y=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: zq2UcFMgoXyXVKIlxFtAFNbALSi2BQIXdlWQ+t6wicQdwSIJMEuigrGPi8fpXC5ZDfWkLaKPeL
 mjt2RGR267CXG7F4zE8kZHrIBIYnMmNGq0bbptxn69UZSMwsOom2ixpO9eJQbN0+d+n/6rSOVa
 elyM6HOVWJWqLyrrt+5qMFy/rH04YHk5WZjKxmQI68IyW4EOMLn4zmMMLlK0tLerJJrUKoL671
 EwebFX6++BTNdgg4OV8GshR7cYZ2WCL5Qga/efsU4O7O43nE+4wLY5WSMdan00egPp+a19Tg4z
 k1I=
X-SBRS: 5.1
X-MesageID: 48145624
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:z1oXmK0j/hYXLB0JHdLMSQqjBIokLtp133Aq2lEZdPRUGvb4qy
 mLpoV96faSskd2ZJhAo6HlBEDuex/hHPJOjrX5eI3SJTUO21HYSb2Kj7GSoAEIcheWnoU2uJ
 uIMZIOauEYZWIK9foSizPZLz9P+re6zJw=
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="48145624"
Date: Fri, 16 Jul 2021 17:23:33 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Jan Beulich <jbeulich@suse.com>, George Dunlap <george.dunlap@citrix.com>,
	Ian Jackson <iwj@xenproject.org>, Julien Grall <julien@xen.org>, "Stefano
 Stabellini" <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
	<xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <YPGyhXE7DjeEGgxT@perard>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <be712d94-7fac-fc34-3f61-61819c5cbc42@suse.com>
 <17a250d3-1c1b-f079-c950-5590975e56ae@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <17a250d3-1c1b-f079-c950-5590975e56ae@citrix.com>

On Fri, Jul 16, 2021 at 02:15:28PM +0100, Andrew Cooper wrote:
> On 15/07/2021 07:25, Jan Beulich wrote:
> > On 14.07.2021 18:17, Anthony PERARD wrote:
> >> --- a/xen/common/Kconfig
> >> +++ b/xen/common/Kconfig
> >> @@ -25,6 +25,9 @@ config GRANT_TABLE
> >>  config HAS_ALTERNATIVE
> >>  	bool
> >>  
> >> +config HAS_CHECKPOLICY
> >> +	def_bool $(success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
> >> +
> > This is no different from other aspects of "Kconfig vs tool chain
> > capabilities" sent out last August to start a discussion about
> > whether we really want such. Besides Jrgen no-one cared to reply
> > iirc, which to me means no-one really cares one way or the other.
> 
> You know full well that upgrading Kconfig was specifically to be able to
> use this functionality, and you know full well that I firmly support

To be honest, I've upgraded Kconfig mostly because I needed to start
somewhere with upgrading our build system to look more like Kbuild. I
may have adding `CC --version` and some other CONFIG_* running shells,
but I don't think anymore that is a necessary things to do, it just look
cleaner.

> using this mechanism, because we've had both of these arguments several
> times before.

I'd like to read about your (or someone else's) arguments in favor of
doing more in Kconfig only, do you have links (or maybe subject,
keyword) to look at?

I think I understand Jan's arguments.

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 16:27:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 16:27:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157654.290345 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QgJ-0006vg-PU; Fri, 16 Jul 2021 16:27:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157654.290345; Fri, 16 Jul 2021 16:27:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4QgJ-0006vZ-Lz; Fri, 16 Jul 2021 16:27:19 +0000
Received: by outflank-mailman (input) for mailman id 157654;
 Fri, 16 Jul 2021 16:27:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KHJG=MI=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m4QgI-0006vT-Q2
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 16:27:19 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1b351fb7-12f3-4be6-aea2-44a3086d366b;
 Fri, 16 Jul 2021 16:27:18 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1b351fb7-12f3-4be6-aea2-44a3086d366b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626452838;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=ih5Sho/HDtkgIBTLXNuUZNykrGDoYybbypvcz7CZA6U=;
  b=eXb25GajTK+vdrvHkeLBTotcdi+Ge++6V15Tph191iwww9bCLeYqjyMu
   KLCxP8C9RsYWJQhuSX5eibTdkedpHiziatKX60X65TJkoMOIfNTLynS9D
   gWYfZ2Z2gwRr7BqIRld/CDt7LY89D+vndOhd2qhUYsfbWWDLGiyfL6N7C
   g=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: edHNbH1WkPWpNT38zJUkfSyUKrpdNHh4gAmX94thIv6UBzjiaByvpDPXJva0UrcTFDPWveceEC
 JY+JgLNwD8Blve8+JW9ahBLsO+Fz5LB7TfnnpHCH+fgeMrL0i+dqYKy/gQ/at0jSrhIF71Oew0
 qZag0w9Dox3arXHAaFIn2sVO8BMdU1dOiuHXC7iedbiSjMN9xBxIPxWEgSXcTWib7Vq4lVVdYb
 VLEGVjg2ACuRca7rAE1eyiepteJzL06ARlog0n7E5tiOgUH7HNpKxvesU/nUHjf5SLUxorKpEE
 3LU=
X-SBRS: 5.1
X-MesageID: 48508684
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:3dMfM65Tw3+5DTUIkAPXwAzXdLJyesId70hD6qkQc3Fom62j5q
 WTdZEgvyMc5wx/ZJhNo7690cq7MBHhHPxOgbX5VI3KNGXbUQOTR72KhrGSoAEIdReeygZcv5
 0QCZSXCrfLfCVHZRCR2njFLz4iquP3j5xBnY3lvhNQpZkBUdAZ0+9+YDzrdXFedU19KrcSMo
 GT3cZDryrIQwVtUizqbkN1OdQqvrfw5evbXSI=
X-IronPort-AV: E=Sophos;i="5.84,245,1620705600"; 
   d="scan'208";a="48508684"
Date: Fri, 16 Jul 2021 17:27:13 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: George Dunlap <George.Dunlap@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, "Andrew
 Cooper" <Andrew.Cooper3@citrix.com>, Ian Jackson <iwj@xenproject.org>, "Jan
 Beulich" <jbeulich@suse.com>, Julien Grall <julien@xen.org>, "Stefano
 Stabellini" <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <YPGzYbDVOV3T7zCd@perard>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>

On Fri, Jul 16, 2021 at 04:26:39PM +0100, George Dunlap wrote:
> What this patch does is to make it so that if someone explicitly sets CONFIG_XSM_FLASK_POLICY=y, but doesn’t have checkpolicy, the build system will silently disable the policy behind their backs without telling them?

FYI, silenty disabling unavailable config options is actually
documented, in "INSTALL", section "Xen Hypervisor". ;-) Well kind of.

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 16:52:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 16:52:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157663.290363 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4R4U-0001eH-Ud; Fri, 16 Jul 2021 16:52:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157663.290363; Fri, 16 Jul 2021 16:52:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4R4U-0001eA-RG; Fri, 16 Jul 2021 16:52:18 +0000
Received: by outflank-mailman (input) for mailman id 157663;
 Fri, 16 Jul 2021 16:52:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4R4T-0001e0-H0; Fri, 16 Jul 2021 16:52:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4R4T-0000Ru-7t; Fri, 16 Jul 2021 16:52:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4R4S-0005pQ-TO; Fri, 16 Jul 2021 16:52:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4R4S-0006vZ-Ss; Fri, 16 Jul 2021 16:52:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=oBxE4BBmIlT7Y/D0bBXpbhRmb4rxXsOht+R7TbnfTvM=; b=0bD+xzX8PRRlFVxWfS8rYqNNaV
	tURs1AaMaDemtEwFq7nGPWNRWRt5yDliE0O+yndDpGrj+GPU/4eAI0T4Ij1I/GYPRFFNu6TipzKTh
	de4O5hqcD0Cd/LGk82ep0CQVf5cwE6qV1oFC+QzHcbb8oOLs97JfFVBu44W3k4DSW8js=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163723-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163723: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:heisenbug
    linux-linus:test-armhf-armhf-libvirt-raw:debian-di-install:fail:heisenbug
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8096acd7442e613fad0354fc8dfdb2003cceea0b
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 16:52:16 +0000

flight 163723 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163723/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail in 163706 pass in 163723
 test-arm64-arm64-libvirt-xsm 14 guest-start                fail pass in 163706
 test-armhf-armhf-libvirt-raw 12 debian-di-install          fail pass in 163706

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

version targeted for testing:
 linux                8096acd7442e613fad0354fc8dfdb2003cceea0b
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  349 days
Failing since        152366  2020-08-01 20:49:34 Z  348 days  596 attempts
Testing same since   163706  2021-07-15 05:22:18 Z    1 days    2 attempts

------------------------------------------------------------
6691 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1971161 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 17:15:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 17:15:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157672.290378 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4RQe-0004B2-2e; Fri, 16 Jul 2021 17:15:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157672.290378; Fri, 16 Jul 2021 17:15:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4RQd-0004Av-VR; Fri, 16 Jul 2021 17:15:11 +0000
Received: by outflank-mailman (input) for mailman id 157672;
 Fri, 16 Jul 2021 17:15:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=cq1l=MI=arm.com=Bertrand.Marquis@srs-us1.protection.inumbo.net>)
 id 1m4RQc-0004Ap-E1
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 17:15:10 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.81]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42de80de-3f70-45ea-a01f-28ef87a54083;
 Fri, 16 Jul 2021 17:15:07 +0000 (UTC)
Received: from AM5P194CA0022.EURP194.PROD.OUTLOOK.COM (2603:10a6:203:8f::32)
 by DB7PR08MB3722.eurprd08.prod.outlook.com (2603:10a6:10:33::14) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Fri, 16 Jul
 2021 17:15:05 +0000
Received: from AM5EUR03FT047.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:8f:cafe::c1) by AM5P194CA0022.outlook.office365.com
 (2603:10a6:203:8f::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Fri, 16 Jul 2021 17:15:05 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT047.mail.protection.outlook.com (10.152.16.197) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Fri, 16 Jul 2021 17:15:05 +0000
Received: ("Tessian outbound b81a99a0393d:v99");
 Fri, 16 Jul 2021 17:15:05 +0000
Received: from 9d7612634450.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 8349C799-3681-4FD6-B9C4-D3EDDD86E163.1; 
 Fri, 16 Jul 2021 17:14:59 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9d7612634450.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 16 Jul 2021 17:14:59 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com (2603:10a6:102:12d::10)
 by PR3PR08MB5657.eurprd08.prod.outlook.com (2603:10a6:102:87::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.25; Fri, 16 Jul
 2021 17:14:58 +0000
Received: from PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d]) by PAXPR08MB6446.eurprd08.prod.outlook.com
 ([fe80::3184:5465:27b6:f27d%8]) with mapi id 15.20.4308.027; Fri, 16 Jul 2021
 17:14:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 42de80de-3f70-45ea-a01f-28ef87a54083
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2RmLbxYMrjGdHwXqqepCVjrYipANuFQ65uYhsQNnKMU=;
 b=T6IGlB1OwRxNwN2T52jWg9rTu0Jgll/li4+6bhqy3qthSxwHnxWVx2y+yOoqk6DA8AhoaIu52XJ8inScS2CQKroEEGUJ344dJT1dz6ljpX+ltCIwWRZt576u74ctQoO6r3xDY233CmXljvj+pdEKrShRjKrcsAgDyngECVu23DQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 7782c4012cf1f22a
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KKZOZ3DFta9ieR4ntYAFQVf/zchjyzbef5JKeiET0cPprL7nkUgIftPkH0IBvN6XYrG2nkBvj+SS1pxdZtmjLGES9Pr0KYfEV1+V4Jndp5Nxvci+3bT6AQcAarT2pt5Z+0fUyTc2CmSKlPKny1DvBbPhjDtt3M+3XLRy1argRZvM5N6m74FXCrJCNqqO1IM69JwNejd80y2xz6lHz3dR4o3lshIQ8xNuiYxYspYWrXEHR1zMfpl1HIDcePgmw0jGsdXytYx6IQjFcRK+Fx3m/qJnOlwUUyfKF5mrh+cTepHq5RtPd195iL631Fn0/+/PvyAGQgs5zpM1q3EDnSSE+g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2RmLbxYMrjGdHwXqqepCVjrYipANuFQ65uYhsQNnKMU=;
 b=bZbSP01G/XaAjBdhYQ/ZcZPJoeJlPJteM2zt1tQV6Khbt50UDi2qMD3cPswC7Zz/2nagmoyPz3nIfaZ4LhUN/QxM/NuRXS94dyApTVwkyNgZvdZek+4PmwTuuSAxC8NStvsr6JWM71J2C7kLKI6YCguwZJ4TS7x8+zunMRr1G7GEAWekgOFwDLBl8X/Qxxl0CqE2ueuxY72Zuvt3Sxrno+lzJ32DcwdN2djR9ZnjpgCVNBsS3WRqlk9bT3Ntmmorp+CKA0C46ld8bN3nNX18NB1Sbca3AIMA+YYkMt+uolY2z1hSEpVy1yEKdbATP3c0NzFFfCc/Gxx8GLnahYKOfA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2RmLbxYMrjGdHwXqqepCVjrYipANuFQ65uYhsQNnKMU=;
 b=T6IGlB1OwRxNwN2T52jWg9rTu0Jgll/li4+6bhqy3qthSxwHnxWVx2y+yOoqk6DA8AhoaIu52XJ8inScS2CQKroEEGUJ344dJT1dz6ljpX+ltCIwWRZt576u74ctQoO6r3xDY233CmXljvj+pdEKrShRjKrcsAgDyngECVu23DQ=
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: Julien Grall <julien@xen.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
Thread-Topic: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
Thread-Index: AQHXbQmqqZ2dUoMblUy//wgHf+AX8qs/M8QAgAa+XIA=
Date: Fri, 16 Jul 2021 17:14:57 +0000
Message-ID: <A8304A17-E59A-4C40-A9FA-6EF49B58AC54@arm.com>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
 <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
In-Reply-To: <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.100.0.2.22)
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: c394a7bc-997f-43b0-5cd4-08d9487d415d
x-ms-traffictypediagnostic: PR3PR08MB5657:|DB7PR08MB3722:
X-Microsoft-Antispam-PRVS:
	<DB7PR08MB3722EE16B2D1D88EC6862E689D119@DB7PR08MB3722.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:901;OLM:901;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 qjEn5OsmgM8ZqpOMiLFpNKBU/HvGEdvlbjv3t0hmX+FJHFlc8YH4J9nEVKOJoNBXHMvGVniH9Swg8lxWczArRdawpO/yrXQ9bc0uRFeZtz7HtW5eaXoEcZH+TRDcc4u/Hf9bIyV7lOX/pI9TBQl0U9Dgeuk7+NiCSi1ufaUkUh+OtBLEYeaUmKFPnFnVzZOm9vZD6prHxRsa1p62/s9Etm3Aj7TQvICYr+D6ZITCvyYzE1k2UGN2BYrCcM6If2MZNoYKzsVWsQr3pWUpzvRDFry7Ja2548kwrjl7L3cNgWUr1lsgx4vpzIb5Y2+vCZMlC5LgnImH3CWmADon4waG8Z36NwEolZk9TPSGBPy5ARgnmLG6Nyap2Nhaq33GJLk7uAFgclj0sILx3oRRfIMC39dWbwVvIlZBbLkWHwsbRSSH/MXLrdUl7ZdtjZYWDjgbL0DGna636S9XJ0vYzdEKPz/sXHp49yZWHj34DRkYyTzu4mf/ls4ryumsDyV5UQlDhWsDzUwqevicfSMKKLtF6IbNoXdwSD9/X2pSj2VSQU+gpFxwT7lhTe6InIqDOLFG5En8Me7Eas20zSYWqJxxUeELF6yKx1Cuc+SAfBrd/+TfOf2wgv5uB59FObAieUd7aZDO8ZGVF8qqUwpzekcYnos6rit2NR3NiqnBK/txQXBiJOKBrrPaxZxU3SKvFRbJv8KiavmlQG28gIU9u6yIvPl/QwHOTH9lEah1hVtIv4XoKl0Hyw4ile9HFwOhNsyA
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6446.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(366004)(376002)(136003)(39850400004)(83380400001)(316002)(2616005)(8676002)(5660300002)(6486002)(71200400001)(4326008)(33656002)(54906003)(8936002)(2906002)(26005)(38100700002)(64756008)(36756003)(66556008)(6916009)(6506007)(6512007)(66446008)(66476007)(66946007)(186003)(86362001)(122000001)(91956017)(478600001)(76116006)(38070700004)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?fR2SEx9/D4N/jz20yOXtER9ClJa/YftYTnbX+QZ?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <18F767D3E742E04EBF26F733FCA1E70F@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5657
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT047.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4d273a3e-4a59-4012-e7cd-08d9487d3cdc
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	blzYvdTin5/zLxoW7MGRtYiPkwRqF3av8DF3NnBtwuUNi12ZxrCzkJvGK6+Tq7dtDLXY4y7Bnb7GZL3sBFRxIsTtUaFB4Tz89cjZyJ7KWZH1MpmbfzspVBh40a6skR/+DRBp7rA/tPx2yslM9Jhz5w1UMeS4o4RUjsTgMFMSoduLH0Ec2w6f+8wZr/9Bcr2SqZJSGh+uW4pCxINXwDQkfzN4s18/+4jx3tlmR7mpgTQoTSz+LSRmRddAqtuhcsuGOMYzXpfA0mX8iUMc2eN0HQrkPTjqTa4AqoyrppeUE7bt1raCwzs0nyklulaeI0tJbK+8kiDhZ2Flv0Knh2i09bwI2QzF4QcjMp8/3KpfwPsi+OT2Nue22TLLnkqZ6QBhpTVBouaW1XQRUn3uy6o4wI4QD6NFh8fgzYtk1OJq4E9es5FV9SZu12Njf0A4K6kT21obsP+gJJqHO0OdEApu+uLiRuiWZXzP2kiAXT7K4MoCgoTLeswTxe0VZU9U2sFEN5a50Xhxvza13BXMcNts50jk3jCUhzzwd0f3FoDa0EfLoMzuV41XmJVE04O1SYf0QjKfUtHj3V4QMhQcLgWRG2tOupjq1LC0U/rjkjK8XLTy9KhR3TqAJJdk3i0e+Ikk8pP62LhfVaDY70voSZLxOtiyWd+Ctn/32Kja8DrcRP39TGXHpAKa62rUBzFgyFmtEmZhQ8P5Jktyh4GNSFP55g==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(396003)(376002)(39850400004)(346002)(36840700001)(46966006)(356005)(86362001)(36860700001)(336012)(70586007)(33656002)(70206006)(6862004)(478600001)(47076005)(316002)(81166007)(54906003)(6512007)(4326008)(2906002)(36756003)(107886003)(82310400003)(8676002)(82740400003)(8936002)(6486002)(6506007)(5660300002)(186003)(83380400001)(2616005)(26005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2021 17:15:05.3655
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: c394a7bc-997f-43b0-5cd4-08d9487d415d
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT047.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3722

SGkgSnVsaWVuDQoNClvigKZdDQo+PiANCj4+ICsNCj4+ICsgICAgaWYgKCBvbGRfcmVnICE9IG5l
d19yZWcgKQ0KPj4gKyAgICAgICAgcHJpbnRrKFhFTkxPR19ERUJVRyAiU0FOSVRZIERJRjogJXMg
MHglIlBSSXg2NCIgLT4gMHglIlBSSXg2NCJcbiIsDQo+PiArICAgICAgICAgICAgICAgcmVnX25h
bWUsIG9sZF9yZWcsIG5ld19yZWcpOw0KPj4gKyAgICBpZiAoIG9sZF9yZWcgIT0gKmN1cl9yZWcg
KQ0KPj4gKyAgICAgICAgcHJpbnRrKFhFTkxPR19ERUJVRyAiU0FOSVRZIEZJWDogJXMgMHglIlBS
SXg2NCIgLT4gMHglIlBSSXg2NCJcbiIsDQo+PiArICAgICAgICAgICAgICAgcmVnX25hbWUsIG9s
ZF9yZWcsICpjdXJfcmVnKTsNCj4+ICsNCj4+ICsgICAgaWYgKCB0YWludCApDQo+PiArICAgIHsN
Cj4+ICsgICAgICAgIHByaW50ayhYRU5MT0dfV0FSTklORyAiU0FOSVRZIENIRUNLOiBVbmV4cGVj
dGVkIHZhcmlhdGlvbiBpbiAlcy5cbiIsDQo+PiArICAgICAgICAgICAgICAgIHJlZ19uYW1lKTsN
Cj4+ICsgICAgICAgIGFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMpOw0KPj4gKyAgICB9
DQo+PiArfQ0KPj4gKw0KPj4gKw0KPj4gKy8qDQo+PiArICogVGhpcyBmdW5jdGlvbiBzaG91bGQg
YmUgY2FsbGVkIG9uIHNlY29uZGFyeSBjb3JlcyB0byBzYW5pdGl6ZSB0aGUgYm9vdCBjcHUNCj4+
ICsgKiBjcHVpbmZvLg0KPiANCj4gQ2FuIHdlIHJlbmFtZWQgYm9vdF9jcHVfZGF0YSB0byBzeXN0
ZW1fY3B1aW5mbyAob3Igc29tZXRoaW5nIHNpbWlsYXIpPyBUaGlzIHdvdWxkIG1ha2UgY2xlYXIg
dGhpcyBpcyBub3Qgb25seSB0aGUgZmVhdHVyZXMgZm9yIHRoZSBib290IENQVT8NCg0KV2hpbGUg
bG9va2luZyBhdCB0aGlzIHJlcXVlc3QsIEkgY2hlY2tlZCBhIGJpdCBob3cgYm9vdF9jcHVfZGF0
YSBhbmQgY3B1X2RhdGEgb3ZlcmFsbCBhcmUgdXNlZDoNCi0gYm9vdF9jcHVfZGF0YSBpcyBvbmx5
IHVzZWQgaW4gc2V0dXAuYywgYnkgYm9vdF9jcHVfZmVhdHVyZXMgbWFjcm9zLCBpbiBzbXBib290
IHRvIHJldHJpZXZlIHRoZSBib290Y3B1IG1pZHIsIGluIHAybSBhbmQgYnkgY3B1ZmVhdHVyZXMN
Ci0gY3B1X2RhdGFbXSBpcyB1c2VkIGluIHNtcGJvb3QsIGluIGVycmF0YSBoYW5kbGluZyB0byB0
ZXN0IGZvciBjc3YyLCBhbmQgaW4gdmNwcmVnIHRvIGFjY2VzcyB0aGUgbWlkcg0KDQpTbyB3ZSBo
YXZlIGEgYnVuY2ggb2YgY3B1aW5mbyBzdHJ1Y3R1cmVzIGFzIGdsb2JhbCB2YXJpYWJsZXMgYnV0
IG1vc3Qgb2YgdGhlbSBhcmUgbm90IHJlYWxseSB1c2VkIG9yIGRpZCBJIG1pc3Mgc29tZXRoaW5n
ID8NCg0KU28gSSBhbSB3b25kZXJpbmcgaWYgd2Ugc2hvdWxkIG5vdCByZWR1Y2UgYSBiaXQgdGhl
IGFtb3VudCBvZiBnbG9iYWwgZGF0YSBhbmQ6DQotIGludHJvZHVjZSBhIGdsb2JhbCBzeXN0ZW1f
Y3B1aW5mbw0KLSByZW1vdmUgY3B1X2RhdGFbXSBhbmQgdXNlIGEgdGVtcCBzdHJ1Y3R1cmUgaW4g
dGhlIHN0YWNrIG9mIHRoZSBjcHUgYm9vdGluZw0KLSByZWFkIG1pZHIgZGlyZWN0bHkgaW4gdmNw
cmVnDQotIHVzZSBib290X2NwdV9kYXRhIGluIGVycmF0YSBmb3IgY3N2Mg0KLSB1c2Ugc3lzdGVt
X2NwdWluZm8gaW4gcDJtDQoNCkl0IGNvdWxkIGV2ZW4gYmUgcG9zc2libGUgdG8gcmVtb3ZlIGJv
b3RfY3B1X2RhdGEgYW5kIHB1dCBpdCBvbiB0aGUgc3RhY2sgb2YgdGhlIGJvb3QgY3B1IGFuZCBv
bmx5IHVzZSBzeXN0ZW1fY3B1aW5mbyBidXQgSSBkaWQgbm90IGludmVzdGlnYXRlIHRoaXMuDQoN
CkNoZWVycw0KQmVydHJhbmQNCg0K


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 18:29:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 18:29:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157681.290396 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4SZz-0002tj-LU; Fri, 16 Jul 2021 18:28:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157681.290396; Fri, 16 Jul 2021 18:28:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4SZz-0002tc-He; Fri, 16 Jul 2021 18:28:55 +0000
Received: by outflank-mailman (input) for mailman id 157681;
 Fri, 16 Jul 2021 18:28:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=YMg2=MI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1m4SZy-0002tW-Ea
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 18:28:54 +0000
Received: from mx.upb.ro (unknown [141.85.13.221])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d17edcb9-a963-436a-a980-07be32fe60ec;
 Fri, 16 Jul 2021 18:28:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id BC65BB5600A4;
 Fri, 16 Jul 2021 21:28:50 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 2VKC7S7Qb5Ep; Fri, 16 Jul 2021 21:28:48 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id 71FBFB5600B2;
 Fri, 16 Jul 2021 21:28:48 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id BSx4MdhDdz8l; Fri, 16 Jul 2021 21:28:48 +0300 (EEST)
Received: from [192.168.1.35] (unknown [82.78.48.31])
 by mx.upb.ro (Postfix) with ESMTPSA id 8F5C6B5600A4;
 Fri, 16 Jul 2021 21:28:47 +0300 (EEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d17edcb9-a963-436a-a980-07be32fe60ec
X-Virus-Scanned: amavisd-new at upb.ro
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Juergen Gross <jgross@suse.com>, Julien Grall <julien@xen.org>,
 Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org,
 Andrew Cooper <andrew.cooper3@citrix.com>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
 <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
 <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
 <7fab704a-6b59-1e9b-663e-a3afdfcc319f@suse.com>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <3a6f1fc6-a9b3-78bc-1b73-b7ad10d20405@cs.pub.ro>
Date: Fri, 16 Jul 2021 21:28:47 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <7fab704a-6b59-1e9b-663e-a3afdfcc319f@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable

On 7/13/21 6:20 PM, Juergen Gross wrote:
> On 13.07.21 17:15, Julien Grall wrote:
>> Hi Juergen,
>>
>> On 13/07/2021 16:09, Juergen Gross wrote:
>>> On 13.07.21 16:38, Julien Grall wrote:
>>>> Hi Juergen,
>>>>
>>>> On 13/07/2021 15:23, Juergen Gross wrote:
>>>>> On 13.07.21 16:19, Julien Grall wrote:
>>>>>> Hi Jan,
>>>>>>
>>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>>> And I don't think it should be named XC_PAGE_*, but rather
>>>>>>>> XEN_PAGE_*.
>>>>>>>
>>>>>>> Even that doesn't seem right to me, at least in principle. There
>>>>>>> shouldn't
>>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I
>>>>>>> think a
>>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>>
>>>>>> Yes, we want to be able to use the same userspace/OS without
>>>>>> rebuilding to a specific hypervisor page size.
>>>>>
>>>>> This define is used for accessing data of other domains. See the
>>>>> define
>>>>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>>>>
>>>>> So it should be a constant (minimal) page size for all hypervisors =
and
>>>>> guests of an architecture.
>>>>
>>>> Do you mean the maximum rather than minimal? If you use the minimal
>>>> (4KB), then you would not be able to map the page in the stage-2 if
>>>> the hypervisor is using 64KB.
>>>
>>> But this would mean that the current solution to use XC_PAGE_SIZE is
>>> wrong, as this is 4k.
>>
>> The existing ABI is implicitely based on using the hypervisor page
>> granularity (currently 4KB).
>>
>> There is really no way we can support existing guest on 64KB
>> hypervisor. But if we were going to break them, then we should
>> consider to do one of the following option:
>> =C2=A0=C2=A0=C2=A0 1) use 64KB page granularity for ABI
>> =C2=A0=C2=A0=C2=A0 2) query the hypervisor page granularity at runtime
>>
>> The ideal is 2) because it is more scalable for the future. We also
>> need to consider to extend the PV protocol so the backend and frontend
>> can agree on the page size.
>=20
> I absolutely agree, but my suggestion was to help finding a proper way
> to cleanup the current interface mess. And this should be done the way
> I suggested IMO.
>=20
> A later interface extension for future guests can still be done on top
> of that.

Alright, let's have a little recap to see if I got it right and to agree
on the next steps. There are 2 proposed solutions, let's say a static
one and a dynamic one.

1) Static solution (proposed by Juergen)
- We define XEN_PAGE_* values in a xen/include/public/arch-*/*.h header.
- Q: Should we define a new header for that? page.h or page_size.h are
ok as new filenames?

Pros:
- We fix the interfaces mess and we can get rid of xenctrl lib
dependency for some of the libs that need only the XEN_PAGE_* definitions=
.
- It's faster to implement, with fewer changes.

Cons:
- Well, it's static, it doesn't allow the hypervisor to provide
different values for different guests.


2) Dynamic solution (proposed by Jan and Julien)
We get the value(s) by calling a hypcall, probably as a query related to
some guest domain.

Pros:
- It's dynamic and scalable. We would support different values for
different guests.

Cons:
- More difficult to implement. It changes the paradigm in the toolstack
libs, every occurrence of XC_PAGE_* would have to be amended. Moreover,
we might want to make the hypcall once and save the value for later
(probably several toolstack structures should be extended for that)


I searched for the occurrences of XC_PAGE_* in the toolstack libs and
it's a *lot* of them. IMHO I think we should pick the static solution
for now, considering that it would be faster to implement. Please let me
know if this is OK or not. Any comments are appreciated.

Cheers,
Costin


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 20:08:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 20:08:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157692.290420 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4U8G-0004Jo-WF; Fri, 16 Jul 2021 20:08:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157692.290420; Fri, 16 Jul 2021 20:08:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4U8G-0004Jh-Sa; Fri, 16 Jul 2021 20:08:24 +0000
Received: by outflank-mailman (input) for mailman id 157692;
 Fri, 16 Jul 2021 20:08:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=S7kP=MI=bounce.vates.fr=bounce-md_30504962.60f1e735.v1-8ee62009a6e34c72819365ee49e5f3db@srs-us1.protection.inumbo.net>)
 id 1m4U8F-0004Jb-9B
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 20:08:23 +0000
Received: from mail145-24.atl61.mandrillapp.com (unknown [198.2.145.24])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 918ff300-e671-11eb-89b2-12813bfff9fa;
 Fri, 16 Jul 2021 20:08:21 +0000 (UTC)
Received: from pmta06.mandrill.prod.atl01.rsglab.com (localhost [127.0.0.1])
 by mail145-24.atl61.mandrillapp.com (Mailchimp) with ESMTP id
 4GRMkF0ShZzGlsp7H
 for <xen-devel@lists.xenproject.org>; Fri, 16 Jul 2021 20:08:21 +0000 (GMT)
Received: from [185.78.159.90] by mandrillapp.com id
 8ee62009a6e34c72819365ee49e5f3db; Fri, 16 Jul 2021 20:08:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 918ff300-e671-11eb-89b2-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.fr;
	s=mandrill; t=1626466101; i=charles.schulz@vates.fr;
	bh=fKS1WnkjGcSl6goYPQK8gZQbD+rWhmlYpMjnrqsxDMI=;
	h=From:Subject:References:To:Cc:In-Reply-To:Message-Id:Date:
	 MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=NxN+ngVRqhOoDtsnlzhX1uNfOp5sF9Uy46W4gwJ0MZo+l0subEhNXqNqMTgj5ZZB4
	 V2OHtq/xshiGzmsgjuvI3Tu3KaS4aPB/u8xCd/97aTi3lBIf50mcI6Sja1gj8QA3fj
	 jS/RN4EukIwRbdh70SnsmBklMAB8btf2JNTjxo5w=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; 
 i=@mandrillapp.com; q=dns/txt; s=mandrill; t=1626466101; h=From : 
 Subject : References : To : Cc : In-Reply-To : Message-Id : Date : 
 MIME-Version : Content-Type : Content-Transfer-Encoding : From : 
 Subject : Date : X-Mandrill-User : List-Unsubscribe; 
 bh=fKS1WnkjGcSl6goYPQK8gZQbD+rWhmlYpMjnrqsxDMI=; 
 b=LJsXpowsk9PHluQ7NJtsoWUfR5/enqAEiCahionzx6fW5e7ej7Z5/MISPKORVPrGBliltg
 9P1AqoZboJGXr8gfBpl3DhRJ4ApqCPhWsJHflPU5ZwhLDdBAJMtMMozBscjU/veJ6S5JSiqj
 0PoBk1FOrbBk0bIsGM7DCfWhD4DCY=
From: "Charles-H. Schulz" <charles.schulz@vates.fr>
Subject: Re: Suggested changes to the admission policy of the vulnerability pre-disclosure list
X-Virus-Scanned: amavisd-new at vates.fr
References: <87r1fzclw0.fsf@vates.fr> <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com> <87k0lqmmf8.fsf@vates.fr> <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com>
To: Jan Beulich <jbeulich@suse.com>, xen-devel@lists.xenproject.org
Cc: 
In-Reply-To: <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com>
Message-Id: <87wnpqm380.fsf@vates.fr>
X-Report-Abuse: Please forward a copy of this message, including all headers, to abuse@mandrill.com
X-Report-Abuse: You can also report abuse here: http://mandrillapp.com/contact/abuse?id=30504962.8ee62009a6e34c72819365ee49e5f3db
X-Mandrill-User: md_30504962
Feedback-ID: 30504962:30504962.20210716:md
Date: Fri, 16 Jul 2021 20:08:21 +0000
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit


Jan Beulich @ 2021-07-16 17:21 CEST:

> On 16.07.2021 15:13, Charles-H. Schulz wrote:
>> Jan Beulich @ 2021-07-16 09:52 CEST:
>>> On 15.07.2021 23:23, Charles-H. Schulz wrote:
>>>> Hello,
>>>>
>>>> I /we /Vates would like to suggest some changes to the policy regarding the
>>>> enrollment to the pre-disclosure mailing list of the Xen Security Team.
>>>>
>>>> We have had some talks with the French national CERT who has a need to be the
>>>> recipient of such a list. This national CERT -and in my experience other
>>>> national CERTs such as the NIST for instance- is in constant contact with a
>>>> large Xen userbase that is mostly made up of large parts of the public sector
>>>> as well as critical infrastructure operators belonging to the private
>>>> sector. For confidentiality reasons they cannot disclose who uses Xen and
>>>> where it is used nor who may be using it internally or within the related
>>>> national cybersecurity authority.
>>>>
>>>> Because of that, their request may not be clear or matching the existing
>>>> criteria for inclusion in the mailing list. National CERTs are trusted
>>>> actors and have historically been among the very first entities to define,
>>>> advocate for and put in practice the very notion of responsible
>>>> disclosure. Much of the current practice of Open Source projects in that
>>>> regard actually stems from CERTs. As part of their policies and processes
>>>> regarding vulnerability disclosure, the notion of confidentiality and
>>>> documented, waterfall-like processes of disclosure is play an integral
>>>> part of
>>>> how they handle informaton and publicity around vulnerability. As a result,
>>>> national CERTs (and the French National CERT) do not spread undisclosed
>>>> vulnerability without following established and agreed-upon processes. Such
>>>> processes include, in our instance, the ones defined and followed by the Xen
>>>> Security Team. Compliance with these are the first criteria to earn trust and
>>>> respect from the ecosystem and the downstream users. You can see an example
>>>> of their work here: https://www.cert.ssi.gouv.fr/
>>>>
>>>> Part of the mission of the French National CERT is to work with
>>>> critical infrastructure providers in securing their IT.
>>>> This kind of expertise entails the securing of these information
>>>> systems before any unforeseen incident as well as after the incident
>>>> (incident remediation).
>>>> None of the tasks involved imply the communication of zero-day types
>>>> of vulnerabilities or vulnerabilities that are unpublished to the
>>>> downstream users.
>>>
>>> Would you mind shedding some light on the benefits of a national CERT
>>> being in the know of unpublished vulnerabilities when they can't share
>>> that knowledge with their downstreams, and hence their downstreams -
>>> as long as they aren't themselves members of our predisclosure list -
>>> would still be zero-dayed at the time of publication of such
>>> vulnerabilities? Shouldn't their advice to their downstreams rather be
>>> to direct them towards applying for pre-disclosure list membership?
>> 
>> In practice, most of the downstream users that the CERTs work with are not
>> going to subscribe to the Xen pre-disclosure list, nor to any pre-disclosure
>> lists of vendors or Open Source Software projects. The downstream users will
>> work with CERTs and various cybersecurity service providers (Security
>> Operations Centers -SOCs- being a typical example) in order for vulnerability
>> discovery, disclosure, patching and later integration of fixes or remediatory
>> measures be managed and applied.
>
> It feels to me as if you didn't really answer my question. You restate
> what I understood is the current state of things, from your initial mail.
> The important aspect "when they can't share that knowledge with their
> downstreams" doesn't get discussed at all. All their downstreams would
> have to wait not only until public disclosure (instead of patching their
> systems - as far as permitted in every individual case - already during
> the embargo period), but there'll be an unavoidable further delay,
> however small or large. I'm having difficulty seeing how this can be in
> everybody's best interest, and hence I can't help suspecting that
> information might flow irrespective of this being prohibited except
> _among_ members of the predisclosure list.

You seem to suspect dishonest or malevolent intent from CERTs.
It's not a proper base for discussion. Therefore I'm not going to hypothesize
on some sharing of information with downstream users which will actually not
happen, because the behaviour you suspect is not an accepted behaviour,
neither from the CERTs themselves nor by professional actors in charge of responsible
disclosure and software security. 

Having said that, you are right indeed that the downstream users will not
patch their systems before some time, usually because CERTs, service
providers or software vendors will notify them or do the work for them. But
that is how things tend to work unfortunately. CERTs act as their source of
information and prompt them to act. One can find it a bit idiotic, and I also
do think that both public and private sector entities should be much more
proactive when it comes to their security. But that's another discussion. 

>
> What I could see is them acting as a proxy for their downstreams, but
> this isn't what you've been asking for, and this would also mean much
> more of a change to the policy.

They act as a resource center for their downstreams, but the information goes
top down, i.e from the software developer to the downstream, not the
opposite. Also how it entails an even bigger change to the list policy is
unclear to me. 

>
>> So a national CERT being in the loop of such advanced, upstream vulnerability
>> pre-disclosures list is pretty much what a CERT does when it's not publishing
>> security advisories of some kind. There are several benefits for a CERT:
>> - threat intelligence and analysis: one vulnerability discovered in one
>>   source may not be an isolated "incident" - it may be connected to a broader
>>   attack made of the exploitation of several vulnerabilities found across
>>   different software stacks. This also providers valuable information about the
>>   threat landscape and relevance. For instance, Xen having several
>>   vulnerability reports is one thing, but what happens if KVM receives a batch
>>   of previously unknown vulnerabilities roughly at the same time? For a CERT,
>>   that level of information can be very important (sometimes "national
>>   security" important)
>> 
>> - because of a CERT being a nexus of several threat information/intelligence
>>   by being as upstream as it can on critical software components, it can then
>>   act -not by disclosing or patching yet unpublished vulnerabilities on its
>>   own- by setting the effective patching and remediation work on the
>>   information systems it is in charge of protecting. In the case of a
>>   national CERT, such as the CERT-FR, that would be the French central
>>   administration networks and information systems. Essentially it would
>>   prioritize the response given the specific level and nature  of threats and the
>>   presence of vulnerabilities on the systems (i.e: first patch MS Office,
>>   then Apache httpd, then the vulnerability XYZ00123 on Xen as it really
>>   affects only a small part of our Xen deployments).
>> 
>> - last but not least, CERTs act as central vulnerability reports
>>   "broadcasters". CERT users/subscribers/clients point to CERTs to receive
>>   their daily security watch and alerts. 
>> 
>>>
>>> As to the actual policy - how would you propose to categorize such
>>> organizations, i.e. how would a new bullet point in the present
>>>
>>> "
>>> This includes:
>>>
>>>     Public hosting providers;
>>>     Large-scale organisational users of Xen;
>>>     Vendors of Xen-based systems;
>>>     Distributors of operating systems with Xen support.
>>> "
>>>
>>> look like in your opinion? This is pretty important imo, as it will
>>> need to be understood who else might then become eligible.
>> 
>> I think it's either a very difficult or a very simple question. If I were to
>> suggest to simply add a line with "national CERTs" meaning: CERTs that
>> operate on behalf of governments for the protection and cybersecurity watch
>> of national administration and critical infrastructures" would that be
>> accepted? I'm happy with that one. It's really two criteria I'm adding: being
>> a CERTs acting wth a clear mandate from a national authority to serve as the
>> national computing emergency response team. Not sure how satisfactory that
>> is.
>
> So what if some entity acted largely like a "national CERT", but wasn't
> called that way?

The what if question is not a valid one, as you are either recognized as a
national CERT (there may sometimes be more than one) or you're not, by
regulatory approval of some sort.  Nobody else can claim they're a national
CERT.
You can be a private CERT, but that's out of the scope of my request. 

> The present items on the list try to use pretty generic
> terms, while your suggestion is pretty specific.

So how is that a problem in our this specific instance?

> I'm further afraid that
> "a clear mandate from a national authority" may not provide any
> justification at all, depending on (often political) view points.
>

That is factually and legally false. A national CERT, just like a national
cybersecurity authority, is appointed by law or decree in a country and it
does not call for any justification not anything political. It is part of the
administration of the country. In France, CERT-FR is part of ANSSI, itself
part of the National Security and Defense Directorate (SGDSN), acting under
the authority of the Prime Minister. In Germany, CERT-DE belongs to the BMI
(Interior Ministry). I believe in the US CERT-US operates within the NIST or
the DHS, etc. 

All the best,

-- 
Charles-H. Schulz
Chief Strategy Officer - CSO
XCP-ng & Xen Orchestra - Vates solutions


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 20:16:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 20:16:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157704.290448 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4UGN-00061D-5f; Fri, 16 Jul 2021 20:16:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157704.290448; Fri, 16 Jul 2021 20:16:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4UGN-000616-0n; Fri, 16 Jul 2021 20:16:47 +0000
Received: by outflank-mailman (input) for mailman id 157704;
 Fri, 16 Jul 2021 20:16:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4UGL-000610-Ee
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 20:16:45 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bd4421dc-e672-11eb-89b2-12813bfff9fa;
 Fri, 16 Jul 2021 20:16:44 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 7F6E7613D0;
 Fri, 16 Jul 2021 20:16:43 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bd4421dc-e672-11eb-89b2-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626466603;
	bh=K5hrA5hm+eVhZcHIJtA1PyJ6H804LwW+hN24O044kBs=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=GV6Uzzqy/DPP3K/O+icxmKILFvFqHvQtWx4ARnuiqDnp5p6HkEGB/6UKsL/LkX6Uy
	 HhMa/cqBvZ3dsZvBFiERvxPXWICpXFZRO8MMpdaB3B1xxPW5hvckKtGKmMlvmu29GF
	 IEfjs5CZMKPMuwrl4bT9a5+Kz2e1yReC+pNUSM9xrEQy4tNROJVkdXlZ3duo4gxHWK
	 dYTOsFh/NEOz4UA04F3PdVGmS/d+wZIUNNgSr9kuCgbOjsTwCwiBJB39LY/vlyoe99
	 gQsC2R9mteaZ9zWT7BBH/9MY5eLb9By/tZAA52k71b926uterX9wCo0vrsB9ugE5wU
	 l1GdOmLTJYL9g==
Date: Fri, 16 Jul 2021 13:16:42 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Jan Beulich <jbeulich@suse.com>, 
    "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    George Dunlap <george.dunlap@citrix.com>, Wei Liu <wl@xen.org>, 
    Anthony Perard <anthony.perard@citrix.com>, 
    Ian Jackson <iwj@xenproject.org>
Subject: Re: preparations for 4.15.1 and 4.13.4
In-Reply-To: <c27ae453-d58f-30ac-e73a-c9eb5bc0090b@xen.org>
Message-ID: <alpine.DEB.2.21.2107161316330.3916@sstabellini-ThinkPad-T480s>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com> <c27ae453-d58f-30ac-e73a-c9eb5bc0090b@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Fri, 16 Jul 2021, Julien Grall wrote:
> On 15/07/2021 08:58, Jan Beulich wrote:
> > All,
> 
> Hi Jan & Stefano,
> 
> 
> > the releases are due in a couple of weeks time (and 4.14.3 is
> > supposed to follow another few weeks later). Please point out backports
> > you find missing from the respective staging branches, but which you
> > consider relevant.
> > 
> > Please note that 4.13.4 is going to be the last Xen Project
> > coordinated release from the 4.13 branch; the branch will go into
> > security-only maintenance mode after this release.
> 
> I would like to request the backports of the following commits:
> 
> 4473f3601098 xen/arm: bootfdt: Always sort memory banks
> b80470c84553 arm: Modify type of actlr to register_t
> dfcffb128be4 xen/arm32: SPSR_hyp/SPSR
> 93031fbe9f4c Arm32: MSR to SPSR needs qualification

Done


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 20:29:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 20:29:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157719.290492 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4USM-0007vy-Kt; Fri, 16 Jul 2021 20:29:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157719.290492; Fri, 16 Jul 2021 20:29:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4USM-0007vr-H9; Fri, 16 Jul 2021 20:29:10 +0000
Received: by outflank-mailman (input) for mailman id 157719;
 Fri, 16 Jul 2021 20:29:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4USK-0007vl-Tg
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 20:29:08 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 78234036-e674-11eb-89b4-12813bfff9fa;
 Fri, 16 Jul 2021 20:29:07 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 713B3613CF;
 Fri, 16 Jul 2021 20:29:06 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 78234036-e674-11eb-89b4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626467346;
	bh=6cmaKe2VBOq4itS1JiccbBfApUMPCucNRbjK2XQsb7k=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=ENCHrpiQsU9YqyaYKbrZzaAbvze14eQkUb9vRec+6DI+1m03/cJH3ULB/by2qDVZe
	 ff+ssEXseFuHlXZkED6UoQREVhwPZTMm8r5RpijU+uizQzohoUoGl1QsPVErMvp99G
	 TIUG8Z8lEtDu3m/EXR0LrWZ0Gwfiok5BuxLSK7pogcJnw1Ls0aBScmzcsCAz+tBaaV
	 ky2TSsxgqgMuSvPugR4zMomt3quNKFdbh/i2KRJe/mQ3rBy3YArFch2pf0LeAPUS55
	 Ney+KmGuxH/rGgV8qifA7gKctH9RMc0cQzt9N70lzWwVPObl2/TFQlnpMEc5egt+cX
	 GR/FSRATo8gPg==
Date: Fri, 16 Jul 2021 13:29:05 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com, 
    george.dunlap@citrix.com, jbeulich@suse.com, iwj@xenproject.org, 
    wl@xen.org, Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH v2] SUPPORT.md: add Dom0less as Supported
In-Reply-To: <04d06f53-4489-1a08-e744-fa36679a2287@xen.org>
Message-ID: <alpine.DEB.2.21.2107161326040.3916@sstabellini-ThinkPad-T480s>
References: <20210714234809.30483-1-sstabellini@kernel.org> <04d06f53-4489-1a08-e744-fa36679a2287@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Thu, 15 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 15/07/2021 00:48, Stefano Stabellini wrote:
> > Add Dom0less to SUPPORT.md to clarify its support status. The feature is
> > mature enough and small enough to make it security supported.
> 
> I would suggest to explain the restriction in the commit message (and give a
> link to XSA-372 commit).
> 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > ---
> > Changes in v2:
> > - clarify memory scrubbing
> > ---
> >   SUPPORT.md | 9 +++++++++
> >   1 file changed, 9 insertions(+)
> > 
> > diff --git a/SUPPORT.md b/SUPPORT.md
> > index 317392d8f3..524cab9c8d 100644
> > --- a/SUPPORT.md
> > +++ b/SUPPORT.md
> > @@ -832,6 +832,15 @@ OVMF firmware implements the UEFI boot protocol.
> >         Status, qemu-xen: Supported
> >   +## Dom0less
> > +
> > +Guest creation from the hypervisor at boot without Dom0 intervention.
> > +
> > +    Status, ARM: Supported
> > +
> > +Memory of dom0less DomUs is not scrubbed at boot (even with
> > +bootscrub=on); no XSAs will be issues due to unscrubbed memory.
> 
> The memory will not be scrubbed for bootscrub=on and bootscrub=off. However,
> it should be scrubbed for bootscrub=idle (the default).

With bootscrub=idle, do you know if it is guaranteed to complete the
scrubbing before dom0less domUs start? I assumed it wasn't guaranteed,
but if it is, then we should rephrase the statement.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 21:05:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 21:05:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157728.290509 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4V1Q-0003c4-GW; Fri, 16 Jul 2021 21:05:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157728.290509; Fri, 16 Jul 2021 21:05:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4V1Q-0003bx-DM; Fri, 16 Jul 2021 21:05:24 +0000
Received: by outflank-mailman (input) for mailman id 157728;
 Fri, 16 Jul 2021 21:05:23 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4V1P-0003bn-02; Fri, 16 Jul 2021 21:05:23 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4V1O-0004pE-QD; Fri, 16 Jul 2021 21:05:22 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4V1O-0001mh-DR; Fri, 16 Jul 2021 21:05:22 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4V1O-0003Fx-Cx; Fri, 16 Jul 2021 21:05:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=KZRsGTyU3YCAaMxrvFHaAksBUOG/o55I2PviICobing=; b=6dZNeG9sGR2wdI+3wrQTTMnT9S
	WMpaLSnrFdwCcGsPVawm0n0lQ+2qlBjLoWXmZLfNWZ0sUd5zXoFlj4eSZbR6gvBiz9p7TqmVTb7ob
	LNqa2vEsXyEA6ypUoBLTCYFp68OqR7RQohBGGo63IuujodN0c1ZGyAv1NgqArRbSXoSI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163726-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.14-testing test] 163726: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.14-testing:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    xen-4.14-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=c3cc6e206ff79c6117b841891d832694597bd5af
X-Osstest-Versions-That:
    xen=3cfccd70992b3d2b739e3febfceb99fdf6283be0
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 21:05:22 +0000

flight 163726 xen-4.14-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163726/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163709

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

version targeted for testing:
 xen                  c3cc6e206ff79c6117b841891d832694597bd5af
baseline version:
 xen                  3cfccd70992b3d2b739e3febfceb99fdf6283be0

Last test of basis   163709  2021-07-15 07:36:47 Z    1 days
Testing same since   163726  2021-07-15 21:07:35 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   3cfccd7099..c3cc6e206f  c3cc6e206ff79c6117b841891d832694597bd5af -> stable-4.14


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 21:28:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 21:28:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157740.290540 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4VNa-0006JF-FJ; Fri, 16 Jul 2021 21:28:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157740.290540; Fri, 16 Jul 2021 21:28:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4VNa-0006J8-C8; Fri, 16 Jul 2021 21:28:18 +0000
Received: by outflank-mailman (input) for mailman id 157740;
 Fri, 16 Jul 2021 21:28:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4VNZ-0006Iy-1t; Fri, 16 Jul 2021 21:28:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4VNY-0005DG-SK; Fri, 16 Jul 2021 21:28:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4VNY-0002r2-Fq; Fri, 16 Jul 2021 21:28:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4VNO-00085B-LM; Fri, 16 Jul 2021 21:28:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rTU7C7Mw6Kfy0DflSijZfwqJ1bxn4OHEzPyY77hQ0kk=; b=QrYqGKNf3yLbz9HhTY8UMmQSSe
	Mj0s0RE6Z3qs0zhGk8bpLp0sOlFGSynQHdf/Pz0gHiwcX+/xgvvuUd8GymDO6nFdh1BpA+R4M8QXi
	RdQ0+3xUQQSG5yesys+oJVgaip0+w0Scc6ffmYPtI53y4XVYAs2Qjx8+vPgiAG2j+Jwc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163728-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163728: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=133d05a15e8926cd0a7bb24dec281effbceddb60
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 16 Jul 2021 21:28:06 +0000

flight 163728 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163728/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              133d05a15e8926cd0a7bb24dec281effbceddb60
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  371 days
Failing since        151818  2020-07-11 04:18:52 Z  370 days  362 attempts
Testing same since   163728  2021-07-16 04:20:08 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64917 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 23:54:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 23:54:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157755.290574 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Xex-0003Ye-Lv; Fri, 16 Jul 2021 23:54:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157755.290574; Fri, 16 Jul 2021 23:54:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Xex-0003YX-Iy; Fri, 16 Jul 2021 23:54:23 +0000
Received: by outflank-mailman (input) for mailman id 157755;
 Fri, 16 Jul 2021 23:54:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4Xew-0003YR-IP
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 23:54:22 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 149208b6-30c4-4a5c-8304-710a91cc5410;
 Fri, 16 Jul 2021 23:54:20 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id CA08A611BE;
 Fri, 16 Jul 2021 23:54:19 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 149208b6-30c4-4a5c-8304-710a91cc5410
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626479660;
	bh=9zfxMxdTIlQMoGpXDXzSOg5EuSbB4zn840jkF/hwqXI=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=iWE1c56aEmrt931qzV4eZ9eaJt6v0zV1ERr/q6BKF9/Swe5vg0043sjYgnse4oqo2
	 J3zPfoRA/aeoMZoL/sVZlizv9mWM2NlAc9nPdvt0sKYdbOd1jf2P6LH5chV6yL/wJG
	 LyQL+jjTmJVSrwsqnHOMaf+JC5LI4ML3y5z/tMLNeBH/rpSV8ObH2VA0TIGylnIJbn
	 tnYk5yWxLKtonvXUQ86UkE8x3bFyuMjyDYQIuqFbCtgCTxM9rbVdj30OpZ9CG59IA8
	 C5juRSW5M1p+1fPMWlgZLjsUmXDfHlYOisumrBGsviYdHdIDDRUlJgRUzyvLbMquEa
	 6J7dDHdcoOJUw==
Date: Fri, 16 Jul 2021 16:54:19 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com, 
    Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH RESEND v3 1/3] arm,smmu: switch to using iommu_fwspec
 functions
In-Reply-To: <c3173a62-55ad-389d-0b49-9641f50351a9@xen.org>
Message-ID: <alpine.DEB.2.21.2107161622280.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2104131055580.4885@sstabellini-ThinkPad-T480s> <20210413175905.15123-1-sstabellini@kernel.org> <c3173a62-55ad-389d-0b49-9641f50351a9@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Wed, 28 Apr 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 13/04/2021 18:59, Stefano Stabellini wrote:
> > From: Brian Woods <brian.woods@xilinx.com>
> > 
> > Modify the smmu driver so that it uses the iommu_fwspec helper
> > functions.  This means both ARM IOMMU drivers will both use the
> > iommu_fwspec helper functions, making enabling generic device tree
> > bindings in the SMMU driver much cleaner.
> > 
> > Signed-off-by: Brian Woods <brian.woods@xilinx.com>
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > Reviewed-by: Rahul Singh <rahul.singh@arm.com> > ---
> >   xen/drivers/passthrough/arm/smmu.c    | 75 ++++++++++++++++++---------
> >   xen/drivers/passthrough/device_tree.c |  7 +++
> >   2 files changed, 58 insertions(+), 24 deletions(-)
> 
> It would be nice to have a changelog. This can help to figure out what changes
> was done in each revision.

I agree with you. I didn't have it because I thought it would be
committed right away as you had already queued the patches before the
release. Unfortunately it clashes with Rahul's changes and that's how we
got here. I'll write a changelog next time.


> > 
> > diff --git a/xen/drivers/passthrough/arm/smmu.c
> > b/xen/drivers/passthrough/arm/smmu.c
> > index 3456daa03f..ac75e23268 100644
> > --- a/xen/drivers/passthrough/arm/smmu.c
> > +++ b/xen/drivers/passthrough/arm/smmu.c
> > @@ -32,6 +32,9 @@
> >    *	- 4k and 64k pages, with contiguous pte hints.
> >    *	- Up to 48-bit addressing (dependent on VA_BITS)
> >    *	- Context fault reporting
> > + *
> > + * Changes compared to Linux driver:
> > + *	- support for fwspec
> >    */
> >     @@ -49,6 +52,7 @@
> >   #include <asm/atomic.h>
> >   #include <asm/device.h>
> >   #include <asm/io.h>
> > +#include <asm/iommu_fwspec.h>
> >   #include <asm/platform.h>
> >     /* Xen: The below defines are redefined within the file. Undef it */
> > @@ -615,13 +619,11 @@ struct arm_smmu_smr {
> >     struct arm_smmu_master_cfg {
> >   	struct arm_smmu_device		*smmu;
> > -	int				num_streamids;
> > -	u16				streamids[MAX_MASTER_STREAMIDS];
> >   	s16				smendx[MAX_MASTER_STREAMIDS];
> >   };
> >   #define INVALID_SMENDX			-1
> > -#define for_each_cfg_sme(cfg, i, idx) \
> > -	for (i = 0; idx = cfg->smendx[i], i < cfg->num_streamids; ++i)
> > +#define for_each_cfg_sme(cfg, i, idx, num) \
> > +	for (i = 0; idx = cfg->smendx[i], i < num; ++i)
> >     struct arm_smmu_master {
> >   	struct device_node		*of_node;
> > @@ -711,6 +713,14 @@ static struct arm_smmu_option_prop arm_smmu_options[] =
> > {
> >   	{ 0, NULL},
> >   };
> >   +static inline struct iommu_fwspec *
> > +arm_smmu_get_fwspec(struct arm_smmu_master_cfg *cfg)
> > +{
> > +	struct arm_smmu_master *master = container_of(cfg,
> > +			                                      struct
> > arm_smmu_master, cfg);
> > +	return dev_iommu_fwspec_get(&master->of_node->dev);
> > +}
> > +
> >   static void parse_driver_options(struct arm_smmu_device *smmu)
> >   {
> >   	int i = 0;
> > @@ -804,8 +814,9 @@ static int register_smmu_master(struct arm_smmu_device
> > *smmu,
> >   				struct device *dev,
> >   				struct of_phandle_args *masterspec)
> >   {
> > -	int i;
> > +	int i, ret = 0;
> >   	struct arm_smmu_master *master;
> > +	struct iommu_fwspec *fwspec;
> >     	master = find_smmu_master(smmu, masterspec->np);
> >   	if (master) {
> > @@ -815,24 +826,29 @@ static int register_smmu_master(struct arm_smmu_device
> > *smmu,
> >   		return -EBUSY;
> >   	}
> >   -	if (masterspec->args_count > MAX_MASTER_STREAMIDS) {
> > -		dev_err(dev,
> > -			"reached maximum number (%d) of stream IDs for master
> > device %s\n",
> > -			MAX_MASTER_STREAMIDS, masterspec->np->name);
> > -		return -ENOSPC;
> > -	}
> > -
> >   	master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
> >   	if (!master)
> >   		return -ENOMEM;
> > +	master->of_node = masterspec->np;
> >   -	master->of_node			= masterspec->np;
> > -	master->cfg.num_streamids	= masterspec->args_count;
> > +	ret = iommu_fwspec_init(&master->of_node->dev, smmu->dev);
> > +	if (ret) {
> > +		kfree(master);
> > +		return ret;
> > +	}
> > +	fwspec = dev_iommu_fwspec_get(dev);
> > +
> > +	/* adding the ids here */
> > +	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
> > +				   masterspec->args,
> > +				   masterspec->args_count);
> > +	if (ret)
> > +		return ret;
> >     	/* Xen: Let Xen know that the device is protected by an SMMU */
> >   	dt_device_set_protected(masterspec->np);
> >   -	for (i = 0; i < master->cfg.num_streamids; ++i) {
> > +	for (i = 0; i < fwspec->num_ids; ++i) {
> >   		u16 streamid = masterspec->args[i];
> >     		if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
> > @@ -842,9 +858,9 @@ static int register_smmu_master(struct arm_smmu_device
> > *smmu,
> >   				masterspec->np->name,
> > smmu->num_mapping_groups);
> >   			return -ERANGE;
> >   		}
> > -		master->cfg.streamids[i] = streamid;
> >   		master->cfg.smendx[i] = INVALID_SMENDX;
> >   	}
> > +
> 
> NIT: Spurious line.

Fixed


> >   	return insert_smmu_master(smmu, master);
> >   }
> >   @@ -1498,22 +1514,23 @@ static int arm_smmu_master_alloc_smes(struct
> > device *dev)
> >   	struct arm_smmu_device *smmu = cfg->smmu;
> >   	struct arm_smmu_smr *smrs = smmu->smrs;
> >   	int i, idx, ret;
> > +	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
> >     	spin_lock(&smmu->stream_map_lock);
> >   	/* Figure out a viable stream map entry allocation */
> > -	for_each_cfg_sme(cfg, i, idx) {
> > +	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
> >   		if (idx != INVALID_SMENDX) {
> >   			ret = -EEXIST;
> >   			goto out_err;
> >   		}
> >   -		ret = arm_smmu_find_sme(smmu, cfg->streamids[i], 0);
> > +		ret = arm_smmu_find_sme(smmu, fwspec->ids[i], 0);
> >   		if (ret < 0)
> >   			goto out_err;
> >     		idx = ret;
> >   		if (smrs && smmu->s2crs[idx].count == 0) {
> > -			smrs[idx].id = cfg->streamids[i];
> > +			smrs[idx].id = fwspec->ids[i];
> >   			smrs[idx].mask = 0; /* We don't currently share SMRs
> > */
> >   			smrs[idx].valid = true;
> >   		}
> > @@ -1522,7 +1539,7 @@ static int arm_smmu_master_alloc_smes(struct device
> > *dev)
> >   	}
> >     	/* It worked! Now, poke the actual hardware */
> > -	for_each_cfg_sme(cfg, i, idx) {
> > +	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
> >   		arm_smmu_write_sme(smmu, idx);
> >   	}
> >   @@ -1542,9 +1559,10 @@ static void arm_smmu_master_free_smes(struct
> > arm_smmu_master_cfg *cfg)
> >   {
> >       struct arm_smmu_device *smmu = cfg->smmu;
> >   	int i, idx;
> > +	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
> >     	spin_lock(&smmu->stream_map_lock);
> > -	for_each_cfg_sme(cfg, i, idx) {
> > +	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
> >   		if (arm_smmu_free_sme(smmu, idx))
> >   			arm_smmu_write_sme(smmu, idx);
> >   		cfg->smendx[i] = INVALID_SMENDX;
> > @@ -1560,8 +1578,9 @@ static int arm_smmu_domain_add_master(struct
> > arm_smmu_domain *smmu_domain,
> >   	enum arm_smmu_s2cr_type type = S2CR_TYPE_TRANS;
> >   	u8 cbndx = smmu_domain->cfg.cbndx;
> >   	int i, idx;
> > +	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
> >   -	for_each_cfg_sme(cfg, i, idx) {
> > +	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
> >   		if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
> >   			continue;
> >   @@ -1960,6 +1979,7 @@ static int arm_smmu_add_device(struct device *dev)
> >   	struct arm_smmu_master_cfg *cfg;
> >   	struct iommu_group *group;
> >   	void (*releasefn)(void *) = NULL;
> > +	int ret;
> >     	smmu = find_smmu_for_device(dev);
> >   	if (!smmu)
> > @@ -1967,19 +1987,26 @@ static int arm_smmu_add_device(struct device *dev)
> >     	if (dev_is_pci(dev)) {
> >   		struct pci_dev *pdev = to_pci_dev(dev);
> > +		struct iommu_fwspec *fwspec;
> >     		cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
> >   		if (!cfg) {
> >   			return -ENOMEM;
> >   		}
> >   -		cfg->num_streamids = 1;
> > +		ret = iommu_fwspec_init(dev, smmu->dev);
> > +		if (ret) {
> > +			kfree(cfg);
> > +			return ret;
> > +		}
> > +		fwspec = dev_iommu_fwspec_get(dev);
> > +
> >   		/*
> >   		 * Assume Stream ID == Requester ID for now.
> >   		 * We need a way to describe the ID mappings in FDT.
> >   		 */
> >   		pci_for_each_dma_alias(pdev, __arm_smmu_get_pci_sid,
> > -				       &cfg->streamids[0]);
> > +				       &fwspec->ids[0]);
> >   		releasefn = __arm_smmu_release_pci_iommudata;
> >   		cfg->smmu = smmu;
> >   	} else {
> > diff --git a/xen/drivers/passthrough/device_tree.c
> > b/xen/drivers/passthrough/device_tree.c
> > index 999b831d90..a51ae3c9c3 100644
> > --- a/xen/drivers/passthrough/device_tree.c
> > +++ b/xen/drivers/passthrough/device_tree.c
> > @@ -140,6 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
> >       if ( !ops )
> >           return -EINVAL;
> >   +	/*
> > +	 * This is needed in case a device has both the iommus property and
> > +	 * also apperars in the mmu-masters list.
> 
> s/apperars/appears/

Fixed


> > +	 */
> > +    if ( dt_device_is_protected(np) )
> > +        return 0;
> We already have a check dt_device_is_protected() below. So why a second one is
> necessary?
> 
> But... as I pointed out in v2, I don't particularly like the idea to keep
> adding hack for the SMMUv{1, 2} in generic code.
> 
> In fact what you describe above is nothing different than someone calling
> twice iommu_add_dt_device() on a device. This can already happen today because
> XEN_DOMCTL_assign_device will try to add the device first and then assign. So
> if your VM reboot, iommu_add_dt_device() would return -EEXIST.
> 
> The code in XEN_DOMCTL_assign_device is already able to deal with -EEXIST. So
> I think the other callers should deal with it. Alternatively, I could be
> convinced to return...
> 
> > +
> >       if ( dev_iommu_fwspec_get(dev) )
> >           return -EEXIST;
> 
> ... 0 here instead.

This is a good suggestion. I'll make this change.


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 23:54:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 23:54:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157756.290586 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Xf6-0003qg-U9; Fri, 16 Jul 2021 23:54:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157756.290586; Fri, 16 Jul 2021 23:54:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Xf6-0003qZ-RC; Fri, 16 Jul 2021 23:54:32 +0000
Received: by outflank-mailman (input) for mailman id 157756;
 Fri, 16 Jul 2021 23:54:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4Xf4-0003pz-W7
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 23:54:31 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 513d4f7f-8184-4cbd-a1e5-98399ff7873a;
 Fri, 16 Jul 2021 23:54:29 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 27037611BE;
 Fri, 16 Jul 2021 23:54:29 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 513d4f7f-8184-4cbd-a1e5-98399ff7873a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626479669;
	bh=ZlF8lEcQuuVd8GbKTDE4p5+l9XEBMFtBkjFOjMli7nM=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=QupsdcVuu4JXn7g0gPNknP9x7V3Lo0x10Bq9V0HQb388JcaRDApLk8tassGvSZGVi
	 kL5Dku0qBhiUzwmmNnc4n+DzcAaSfpJjAyNcdBHaJpxm/UnkPCREMrkxWHWfCa1dEd
	 Gl0A5QsccQWKocjIbREdc/7muOGGXr2lx7irCWoghgHqHiE/so0M91KIHwxWi//Od9
	 Pr/ioaJ2Fe558BwXXJA70HGyDHk4xWnW5MAklZOpnm6F1J8GKU3BBcTbEksRiDA3oC
	 ksZu4624/PnlhLFy4SyPL/XrLVb3cZ/x0fK7aUdbHBYjOj2uEKwXIfBd1kfqiCljx8
	 +mJ+WUEviEbBQ==
Date: Fri, 16 Jul 2021 16:54:28 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com, 
    Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH RESEND v3 3/3] arm,smmu: add support for generic DT
 bindings. Implement add_device and dt_xlate.
In-Reply-To: <a9802e45-9405-5b19-3d21-9c4b56374f23@xen.org>
Message-ID: <alpine.DEB.2.21.2107161627120.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2104131055580.4885@sstabellini-ThinkPad-T480s> <20210413175905.15123-3-sstabellini@kernel.org> <a9802e45-9405-5b19-3d21-9c4b56374f23@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Wed, 28 Apr 2021, Julien Grall wrote:
> On 13/04/2021 18:59, Stefano Stabellini wrote:
> > From: Brian Woods <brian.woods@xilinx.com>
> > 
> > Now that all arm iommu drivers support generic bindings we can remove
> > the workaround from iommu_add_dt_device().
> 
> Well, it was just added in a different place in patch #1. ;) I have commented
> about it in patch #1.

That is a different workaround. This is removing the one introduced by
cf4af9d6d6c (xen/arm: boot with device trees with "mmu-masters" and
"iommus").

I'll add a note to the commit message.

> 
> > Note that if both legacy bindings and generic bindings are present in
> > device tree, the legacy bindings are the ones that are used
> Can you oultine what guarantee that? Also what happen if some of devices are
> using the generic bindings while other are using the legacy one?

If both legacy bindings and generic bindings are present in device tree,
the legacy bindings are the ones that are used because mmu-masters is
parsed by xen/drivers/passthrough/arm/smmu.c:arm_smmu_device_dt_probe
which is called by arm_smmu_dt_init. It happens very early. iommus is
parsed by xen/drivers/passthrough/device_tree.c:iommu_add_dt_device
which is called by xen/arch/arm/domain_build.c:handle_device and happens
afterwards.

I'll add a note to the commit message.


> > 
> > Signed-off-by: Brian Woods <brian.woods@xilinx.com>
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > Reviewed-by: Rahul Singh <rahul.singh@arm.com>
> > ---
> >   xen/drivers/passthrough/arm/smmu.c    | 42 ++++++++++++++++++++++++++-
> >   xen/drivers/passthrough/device_tree.c | 17 +----------
> >   2 files changed, 42 insertions(+), 17 deletions(-)
> > 
> > diff --git a/xen/drivers/passthrough/arm/smmu.c
> > b/xen/drivers/passthrough/arm/smmu.c
> > index f949c110ad..b564851a56 100644
> > --- a/xen/drivers/passthrough/arm/smmu.c
> > +++ b/xen/drivers/passthrough/arm/smmu.c
> > @@ -254,6 +254,8 @@ struct iommu_group
> >   	atomic_t ref;
> >   };
> >   +static struct arm_smmu_device *find_smmu(const struct device *dev);
> > +
> >   static struct iommu_group *iommu_group_alloc(void)
> >   {
> >   	struct iommu_group *group = xzalloc(struct iommu_group);
> > @@ -442,6 +444,8 @@ static struct iommu_group *iommu_group_get(struct device
> > *dev)
> >   #define SMR_VALID			(1U << 31)
> >   #define SMR_MASK_SHIFT			16
> >   #define SMR_ID_SHIFT			0
> > +#define SMR_ID_MASK			0x7fff
> > +#define SMR_MASK_MASK			0x7fff
> >     #define ARM_SMMU_GR0_S2CR(n)		(0xc00 + ((n) << 2))
> >   #define S2CR_CBNDX_SHIFT		0
> > @@ -872,6 +876,40 @@ static int register_smmu_master(struct arm_smmu_device
> > *smmu,
> >   					     fwspec);
> >   }
> >   +static int arm_smmu_dt_add_device_generic(u8 devfn, struct device *dev)
> > +{
> > +	struct arm_smmu_device *smmu;
> > +	struct iommu_fwspec *fwspec;
> > +
> > +	fwspec = dev_iommu_fwspec_get(dev);
> > +	if (fwspec == NULL)
> > +		return -ENXIO;
> > +
> > +	smmu = find_smmu(fwspec->iommu_dev);
> > +	if (smmu == NULL)
> > +		return -ENXIO;
> > +
> > +	return arm_smmu_dt_add_device_legacy(smmu, dev, fwspec);
> 
> Patch #2 seems to imply the code was reworked to have distinct path between
> legacy and generic. But now, you are calling the legacy code from the generic
> helper. This is pretty confusing, can you explain what's going on?

For the legacy path, arm_smmu_dt_add_device_legacy is called by
register_smmu_master scanning mmu-masters (a fwspec entry is also
created.) For the generic path, arm_smmu_dt_add_device_generic gets
called instead. Then, arm_smmu_dt_add_device_generic calls
arm_smmu_dt_add_device_legacy afterwards, shared with the legacy path.
This way most of the low level implementation is shared between the two
paths although the way they are called is distinct.

I'll add a note to the commit message.


> > +}
> > +
> > +static int arm_smmu_dt_xlate_generic(struct device *dev,
> > +				    const struct dt_phandle_args *spec)
> 
> This seems to be a verbatim copy from Linux. It would be good to mention it in
> the commit message. This would make easier to track any change.

Yes, I'll add a note to the commit message.


> > +{
> > +	uint32_t mask, fwid = 0;
> > +
> > +	if (spec->args_count > 0)
> > +		fwid |= (SMR_ID_MASK & spec->args[0]) << SMR_ID_SHIFT;
> > +
> > +	if (spec->args_count > 1)
> > +		fwid |= (SMR_MASK_MASK & spec->args[1]) << SMR_MASK_SHIFT;
> > +	else if (!of_property_read_u32(spec->np, "stream-match-mask", &mask))
> > +		fwid |= (SMR_MASK_MASK & mask) << SMR_MASK_SHIFT;
> > +
> > +	return iommu_fwspec_add_ids(dev,
> > +				    &fwid,
> > +				    1);
> 
> NIT: This feels a bit odd to read. Can't they be defined on the same line?

Fixed


> > +}
> > +
> >   static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
> >   {
> >   	struct arm_smmu_device *smmu;
> > @@ -2836,6 +2874,7 @@ static void arm_smmu_iommu_domain_teardown(struct
> > domain *d)
> >   static const struct iommu_ops arm_smmu_iommu_ops = {
> >       .init = arm_smmu_iommu_domain_init,
> >       .hwdom_init = arm_smmu_iommu_hwdom_init,
> > +    .add_device = arm_smmu_dt_add_device_generic,
> >       .teardown = arm_smmu_iommu_domain_teardown,
> >       .iotlb_flush = arm_smmu_iotlb_flush,
> >       .iotlb_flush_all = arm_smmu_iotlb_flush_all,
> > @@ -2843,9 +2882,10 @@ static const struct iommu_ops arm_smmu_iommu_ops = {
> >       .reassign_device = arm_smmu_reassign_dev,
> >       .map_page = arm_iommu_map_page,
> >       .unmap_page = arm_iommu_unmap_page,
> > +    .dt_xlate = arm_smmu_dt_xlate_generic,
> >   };
> >   -static __init const struct arm_smmu_device *find_smmu(const struct device
> > *dev)
> > +static struct arm_smmu_device *find_smmu(const struct device *dev)
> >   {
> >   	struct arm_smmu_device *smmu;
> >   	bool found = false;
> > diff --git a/xen/drivers/passthrough/device_tree.c
> > b/xen/drivers/passthrough/device_tree.c
> > index a51ae3c9c3..ae07f272e1 100644
> > --- a/xen/drivers/passthrough/device_tree.c
> > +++ b/xen/drivers/passthrough/device_tree.c
> > @@ -162,22 +162,7 @@ int iommu_add_dt_device(struct dt_device_node *np)
> >            * these callback implemented.
> >            */
> >           if ( !ops->add_device || !ops->dt_xlate )
> > -        {
> > -            /*
> > -             * Some Device Trees may expose both legacy SMMU and generic
> > -             * IOMMU bindings together. However, the SMMU driver is only
> > -             * supporting the former and will protect them during the
> > -             * initialization. So we need to skip them and not return
> > -             * error here.
> > -             *
> > -             * XXX: This can be dropped when the SMMU is able to deal
> > -             * with generic bindings.
> > -             */
> > -            if ( dt_device_is_protected(np) )
> > -                return 0;
> > -            else
> > -                return -EINVAL;
> > -        }
> > +            return -EINVAL;
> >             if ( !dt_device_is_available(iommu_spec.np) )
> >               break;



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 23:59:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 23:59:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157769.290598 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XjY-0004vx-Fw; Fri, 16 Jul 2021 23:59:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157769.290598; Fri, 16 Jul 2021 23:59:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XjY-0004vq-Br; Fri, 16 Jul 2021 23:59:08 +0000
Received: by outflank-mailman (input) for mailman id 157769;
 Fri, 16 Jul 2021 23:59:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4XjX-0004vk-1U
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 23:59:07 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 52b822e0-135b-40e2-a27a-66058eb6836f;
 Fri, 16 Jul 2021 23:59:06 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 9DD036128A;
 Fri, 16 Jul 2021 23:59:05 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 52b822e0-135b-40e2-a27a-66058eb6836f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626479945;
	bh=cWboYh9tKqa+rfk5b7l/2mNBPoHKJOk6KCnacxMThk4=;
	h=Date:From:To:cc:Subject:From;
	b=c3CE9SkR8UoFe1KfQuRDVLDHHSUj2aoxvfs6IHMlB/M0taTJ0FVSpJcoH/6CKKq4O
	 uCuIop45E4azIHbLGW++wtZSzPVE1LX6zJiIQ+0foVpR99NaPUWSbNpP6QgIv/0yOG
	 0JR59jp0e6DZMjR1r95Ocf1R2LWpiRQiWO85gbAaFQrTr2wNt/ygTYmkIN/Eywr5P+
	 QIHOxJ0vxeI9xEREjTCR7bo4n+tMLLb2JMzMowODoXGhTR8hasCmQ+xWJgBRok9QUZ
	 G1q/Wlz2x3J0UT7FJ5yKLI1uSam3MAbSqzcWzoqLoKikoYppVXrCQBNtsTVBueK1QU
	 +xlBBifAVEtzQ==
Date: Fri, 16 Jul 2021 16:59:05 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: xen-devel@lists.xenproject.org
cc: sstabellini@kernel.org, julien@xen.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com
Subject: [PATCH v4 0/3] Generic SMMU Bindings
Message-ID: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Hi all,

This series introduces support for the generic SMMU bindings to
xen/drivers/passthrough/arm/smmu.c.

Cheers,

Stefano


Brian Woods (3):
      arm,smmu: switch to using iommu_fwspec functions
      arm,smmu: restructure code in preparation to new bindings support
      arm,smmu: add support for generic DT bindings. Implement add_device and dt_xlate.

 xen/drivers/passthrough/arm/smmu.c    | 141 +++++++++++++++++++++++++---------
 xen/drivers/passthrough/device_tree.c |  23 ++----
 2 files changed, 112 insertions(+), 52 deletions(-)


From xen-devel-bounces@lists.xenproject.org Fri Jul 16 23:59:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 23:59:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157774.290609 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Xk7-0005Uf-NY; Fri, 16 Jul 2021 23:59:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157774.290609; Fri, 16 Jul 2021 23:59:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4Xk7-0005UY-Kb; Fri, 16 Jul 2021 23:59:43 +0000
Received: by outflank-mailman (input) for mailman id 157774;
 Fri, 16 Jul 2021 23:59:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4Xk7-0005UR-9T
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 23:59:43 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e2f1813a-e691-11eb-89d6-12813bfff9fa;
 Fri, 16 Jul 2021 23:59:42 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 30B5F611BE;
 Fri, 16 Jul 2021 23:59:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e2f1813a-e691-11eb-89d6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626479981;
	bh=NVXFwc826W8ZK0AzWf2EJbfB+haRuWSUP9UYkEvEuYg=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=Ozje3Fvcd9kiNvmaMELFurN5SgrTFG/8ywPOnCYbDAx8fUGzuPWDsMcb4v3RVJT5O
	 RFWtyqezJV4kDQyJjVZxqg3na/ucU4moc4QTlwu2/hxpav/MMSrko7LaryOlZnzb8U
	 t1PRYYzjwx8rgxD8jkje6qM7iGn5lJ84IAfODHQbVxzYCpXDANFqmxAz0JKQMVNf/+
	 A4XYZw+YgC2IpKyfXeRVt7kmOtJk1odL7wXKET92A8bExE5Q7SqJmFNQJ4bLMNDsCk
	 RKfu70hW6tQt2lRgwwBtKUKks9ui3zZY4w8WN0N9L1BsAI1zRSmjAxYGIkwJMhx8QN
	 jJnHTR8NuMfyQ==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v4 1/3] arm,smmu: switch to using iommu_fwspec functions
Date: Fri, 16 Jul 2021 16:59:37 -0700
Message-Id: <20210716235939.9585-1-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>

From: Brian Woods <brian.woods@xilinx.com>

Modify the smmu driver so that it uses the iommu_fwspec helper
functions.  This means both ARM IOMMU drivers will both use the
iommu_fwspec helper functions, making enabling generic device tree
bindings in the SMMU driver much cleaner.

Signed-off-by: Brian Woods <brian.woods@xilinx.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
---
Changes in v4:
- fix spurious newline
- fix a word spelling
- reuse existing dev_iommu_fwspec_get check in iommu_add_dt_device
  instead of adding a new one
- get fwspec (dev_iommu_fwspec_get) after calling iommu_fwspec_add_ids,
  at the fwspec pointer might change
---
 xen/drivers/passthrough/arm/smmu.c    | 75 ++++++++++++++++++---------
 xen/drivers/passthrough/device_tree.c |  6 ++-
 2 files changed, 56 insertions(+), 25 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index da2cd457d7..b34f537edd 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -32,6 +32,9 @@
  *	- 4k and 64k pages, with contiguous pte hints.
  *	- Up to 48-bit addressing (dependent on VA_BITS)
  *	- Context fault reporting
+ *
+ * Changes compared to Linux driver:
+ *	- support for fwspec
  */
 
 
@@ -49,6 +52,7 @@
 #include <asm/atomic.h>
 #include <asm/device.h>
 #include <asm/io.h>
+#include <asm/iommu_fwspec.h>
 #include <asm/platform.h>
 
 /* Xen: The below defines are redefined within the file. Undef it */
@@ -616,13 +620,11 @@ struct arm_smmu_smr {
 
 struct arm_smmu_master_cfg {
 	struct arm_smmu_device		*smmu;
-	int				num_streamids;
-	u16				streamids[MAX_MASTER_STREAMIDS];
 	s16				smendx[MAX_MASTER_STREAMIDS];
 };
 #define INVALID_SMENDX			-1
-#define for_each_cfg_sme(cfg, i, idx) \
-	for (i = 0; idx = cfg->smendx[i], i < cfg->num_streamids; ++i)
+#define for_each_cfg_sme(cfg, i, idx, num) \
+	for (i = 0; idx = cfg->smendx[i], i < num; ++i)
 
 struct arm_smmu_master {
 	struct device_node		*of_node;
@@ -712,6 +714,14 @@ static struct arm_smmu_option_prop arm_smmu_options[] = {
 	{ 0, NULL},
 };
 
+static inline struct iommu_fwspec *
+arm_smmu_get_fwspec(struct arm_smmu_master_cfg *cfg)
+{
+	struct arm_smmu_master *master = container_of(cfg,
+			                                      struct arm_smmu_master, cfg);
+	return dev_iommu_fwspec_get(&master->of_node->dev);
+}
+
 static void parse_driver_options(struct arm_smmu_device *smmu)
 {
 	int i = 0;
@@ -805,8 +815,9 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 				struct device *dev,
 				struct of_phandle_args *masterspec)
 {
-	int i;
+	int i, ret = 0;
 	struct arm_smmu_master *master;
+	struct iommu_fwspec *fwspec;
 
 	master = find_smmu_master(smmu, masterspec->np);
 	if (master) {
@@ -816,24 +827,30 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 		return -EBUSY;
 	}
 
-	if (masterspec->args_count > MAX_MASTER_STREAMIDS) {
-		dev_err(dev,
-			"reached maximum number (%d) of stream IDs for master device %s\n",
-			MAX_MASTER_STREAMIDS, masterspec->np->name);
-		return -ENOSPC;
-	}
-
 	master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
 	if (!master)
 		return -ENOMEM;
+	master->of_node = masterspec->np;
 
-	master->of_node			= masterspec->np;
-	master->cfg.num_streamids	= masterspec->args_count;
+	ret = iommu_fwspec_init(&master->of_node->dev, smmu->dev);
+	if (ret) {
+		kfree(master);
+		return ret;
+	}
+
+	/* adding the ids here */
+	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
+				   masterspec->args,
+				   masterspec->args_count);
+	if (ret)
+		return ret;
+
+	fwspec = dev_iommu_fwspec_get(dev);
 
 	/* Xen: Let Xen know that the device is protected by an SMMU */
 	dt_device_set_protected(masterspec->np);
 
-	for (i = 0; i < master->cfg.num_streamids; ++i) {
+	for (i = 0; i < fwspec->num_ids; ++i) {
 		u16 streamid = masterspec->args[i];
 
 		if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
@@ -843,7 +860,6 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 				masterspec->np->name, smmu->num_mapping_groups);
 			return -ERANGE;
 		}
-		master->cfg.streamids[i] = streamid;
 		master->cfg.smendx[i] = INVALID_SMENDX;
 	}
 	return insert_smmu_master(smmu, master);
@@ -1499,22 +1515,23 @@ static int arm_smmu_master_alloc_smes(struct device *dev)
 	struct arm_smmu_device *smmu = cfg->smmu;
 	struct arm_smmu_smr *smrs = smmu->smrs;
 	int i, idx, ret;
+	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
 
 	spin_lock(&smmu->stream_map_lock);
 	/* Figure out a viable stream map entry allocation */
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		if (idx != INVALID_SMENDX) {
 			ret = -EEXIST;
 			goto out_err;
 		}
 
-		ret = arm_smmu_find_sme(smmu, cfg->streamids[i], 0);
+		ret = arm_smmu_find_sme(smmu, fwspec->ids[i], 0);
 		if (ret < 0)
 			goto out_err;
 
 		idx = ret;
 		if (smrs && smmu->s2crs[idx].count == 0) {
-			smrs[idx].id = cfg->streamids[i];
+			smrs[idx].id = fwspec->ids[i];
 			smrs[idx].mask = 0; /* We don't currently share SMRs */
 			smrs[idx].valid = true;
 		}
@@ -1523,7 +1540,7 @@ static int arm_smmu_master_alloc_smes(struct device *dev)
 	}
 
 	/* It worked! Now, poke the actual hardware */
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		arm_smmu_write_sme(smmu, idx);
 	}
 
@@ -1543,9 +1560,10 @@ static void arm_smmu_master_free_smes(struct arm_smmu_master_cfg *cfg)
 {
     struct arm_smmu_device *smmu = cfg->smmu;
 	int i, idx;
+	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
 
 	spin_lock(&smmu->stream_map_lock);
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		if (arm_smmu_free_sme(smmu, idx))
 			arm_smmu_write_sme(smmu, idx);
 		cfg->smendx[i] = INVALID_SMENDX;
@@ -1561,8 +1579,9 @@ static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
 	enum arm_smmu_s2cr_type type = S2CR_TYPE_TRANS;
 	u8 cbndx = smmu_domain->cfg.cbndx;
 	int i, idx;
+	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
 
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
 			continue;
 
@@ -1961,6 +1980,7 @@ static int arm_smmu_add_device(struct device *dev)
 	struct arm_smmu_master_cfg *cfg;
 	struct iommu_group *group;
 	void (*releasefn)(void *) = NULL;
+	int ret;
 
 	smmu = find_smmu_for_device(dev);
 	if (!smmu)
@@ -1968,19 +1988,26 @@ static int arm_smmu_add_device(struct device *dev)
 
 	if (dev_is_pci(dev)) {
 		struct pci_dev *pdev = to_pci_dev(dev);
+		struct iommu_fwspec *fwspec;
 
 		cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
 		if (!cfg) {
 			return -ENOMEM;
 		}
 
-		cfg->num_streamids = 1;
+		ret = iommu_fwspec_init(dev, smmu->dev);
+		if (ret) {
+			kfree(cfg);
+			return ret;
+		}
+		fwspec = dev_iommu_fwspec_get(dev);
+
 		/*
 		 * Assume Stream ID == Requester ID for now.
 		 * We need a way to describe the ID mappings in FDT.
 		 */
 		pci_for_each_dma_alias(pdev, __arm_smmu_get_pci_sid,
-				       &cfg->streamids[0]);
+				       &fwspec->ids[0]);
 		releasefn = __arm_smmu_release_pci_iommudata;
 		cfg->smmu = smmu;
 	} else {
diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
index 999b831d90..911f82a561 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -140,8 +140,12 @@ int iommu_add_dt_device(struct dt_device_node *np)
     if ( !ops )
         return -EINVAL;
 
+    /*
+     * Device already added. It can happen when both iommus and
+     * mmu-masters are present.
+     */
     if ( dev_iommu_fwspec_get(dev) )
-        return -EEXIST;
+        return 0;
 
     /*
      * According to the Documentation/devicetree/bindings/iommu/iommu.txt
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 23:59:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 23:59:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157775.290622 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XkD-0005oE-4V; Fri, 16 Jul 2021 23:59:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157775.290622; Fri, 16 Jul 2021 23:59:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XkD-0005o1-0g; Fri, 16 Jul 2021 23:59:49 +0000
Received: by outflank-mailman (input) for mailman id 157775;
 Fri, 16 Jul 2021 23:59:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4XkC-0005UR-79
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 23:59:48 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e2f1813b-e691-11eb-89d6-12813bfff9fa;
 Fri, 16 Jul 2021 23:59:42 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id A0B38613CF;
 Fri, 16 Jul 2021 23:59:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e2f1813b-e691-11eb-89d6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626479981;
	bh=iFb2HLUbXXrCu1ym6b/VM2NRQI2fEFfRz7BJes86IfY=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=B9Q8ZW6J0WWZ87mEuWZbRuxQOaCJgOPohqhU22kwRh0irWP/HMrUmjAXaDSTnHCu3
	 TrjgmBJ5OCvSQqiWY4Slh7ThP6rFrt3JEhB7YM4KL8vDIB2yRDGy3S6EcOg8B3rjWw
	 6a/mxAL4fap6tfPKLEW+kVRYAU+GSC/ufKKCNe0Kg8oIWVr137SdGV9XtNvvGeo5/P
	 87FEFOZ+umDCEIBGrm1MsMSJ/M9EAtDGT9hJI2AD3p7PlC06E53keubzKvKKVNSv17
	 eLzxyQybj1mX1cT090DokV2PIrmad1KYVkgR+WEGLibWLLDNTMRMMNoJR7ksES7h0g
	 fAAfqAHT36i8A==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH 2/3] arm,smmu: restructure code in preparation to new bindings support
Date: Fri, 16 Jul 2021 16:59:38 -0700
Message-Id: <20210716235939.9585-2-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>

From: Brian Woods <brian.woods@xilinx.com>

Restructure some of the code and add supporting functions for adding
generic device tree (DT) binding support.  This will allow for using
current Linux device trees with just modifying the chosen field to
enable Xen.

Signed-off-by: Brian Woods <brian.woods@xilinx.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Acked-by: Julien Grall <jgrall@amazon.com>
---
 xen/drivers/passthrough/arm/smmu.c | 62 ++++++++++++++++--------------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index b34f537edd..252e8c1680 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -811,53 +811,36 @@ static int insert_smmu_master(struct arm_smmu_device *smmu,
 	return 0;
 }
 
-static int register_smmu_master(struct arm_smmu_device *smmu,
-				struct device *dev,
-				struct of_phandle_args *masterspec)
+static int arm_smmu_dt_add_device_legacy(struct arm_smmu_device *smmu,
+					 struct device *dev,
+					 struct iommu_fwspec *fwspec)
 {
-	int i, ret = 0;
+	int i;
 	struct arm_smmu_master *master;
-	struct iommu_fwspec *fwspec;
+	struct device_node *dev_node = dev_get_dev_node(dev);
 
-	master = find_smmu_master(smmu, masterspec->np);
+	master = find_smmu_master(smmu, dev_node);
 	if (master) {
 		dev_err(dev,
 			"rejecting multiple registrations for master device %s\n",
-			masterspec->np->name);
+			dev_node->name);
 		return -EBUSY;
 	}
 
 	master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
 	if (!master)
 		return -ENOMEM;
-	master->of_node = masterspec->np;
-
-	ret = iommu_fwspec_init(&master->of_node->dev, smmu->dev);
-	if (ret) {
-		kfree(master);
-		return ret;
-	}
-
-	/* adding the ids here */
-	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
-				   masterspec->args,
-				   masterspec->args_count);
-	if (ret)
-		return ret;
-
-	fwspec = dev_iommu_fwspec_get(dev);
+	master->of_node = dev_node;
 
 	/* Xen: Let Xen know that the device is protected by an SMMU */
-	dt_device_set_protected(masterspec->np);
+	dt_device_set_protected(dev_node);
 
 	for (i = 0; i < fwspec->num_ids; ++i) {
-		u16 streamid = masterspec->args[i];
-
 		if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
-		     (streamid >= smmu->num_mapping_groups)) {
+		     (fwspec->ids[i] >= smmu->num_mapping_groups)) {
 			dev_err(dev,
 				"stream ID for master device %s greater than maximum allowed (%d)\n",
-				masterspec->np->name, smmu->num_mapping_groups);
+				dev_node->name, smmu->num_mapping_groups);
 			return -ERANGE;
 		}
 		master->cfg.smendx[i] = INVALID_SMENDX;
@@ -865,6 +848,29 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 	return insert_smmu_master(smmu, master);
 }
 
+static int register_smmu_master(struct arm_smmu_device *smmu,
+				struct device *dev,
+				struct of_phandle_args *masterspec)
+{
+	int ret = 0;
+	struct iommu_fwspec *fwspec;
+
+	ret = iommu_fwspec_init(&masterspec->np->dev, smmu->dev);
+	if (ret)
+		return ret;
+
+	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
+				   masterspec->args,
+				   masterspec->args_count);
+	if (ret)
+		return ret;
+
+	fwspec = dev_iommu_fwspec_get(&masterspec->np->dev);
+	return arm_smmu_dt_add_device_legacy(smmu,
+					     &masterspec->np->dev,
+					     fwspec);
+}
+
 static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
 {
 	struct arm_smmu_device *smmu;
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 16 23:59:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 16 Jul 2021 23:59:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157777.290634 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XkI-0006AU-CT; Fri, 16 Jul 2021 23:59:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157777.290634; Fri, 16 Jul 2021 23:59:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XkI-0006AH-8W; Fri, 16 Jul 2021 23:59:54 +0000
Received: by outflank-mailman (input) for mailman id 157777;
 Fri, 16 Jul 2021 23:59:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Kgq4=MI=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m4XkH-0005UR-7C
 for xen-devel@lists.xenproject.org; Fri, 16 Jul 2021 23:59:53 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e332387f-e691-11eb-89d6-12813bfff9fa;
 Fri, 16 Jul 2021 23:59:43 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 10693613EB;
 Fri, 16 Jul 2021 23:59:42 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e332387f-e691-11eb-89d6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626479982;
	bh=2MBU5ETcjLteRXEbHq+jcdNpdKh1pLz2CWkq2mFGPXc=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=aVMYXakvjDTTuMOKoVKtItVnqBVWkAfWzFfoPNdV4HAI8ZffcqoDSOG5lz+S0SXi/
	 lhWLVYiNXkBKlzMLxDD6gJ9TwKJLA+3LuSYmd77rdiUhYRQJFOoJpT8uAEAXzGrLXg
	 WfRFbLxgM0Fk2vvU4D99hFgGS5WyGDpk8MNgZ+0Lu+ow38y+FZZunXiyPtdg1C9SFy
	 wbzmpw0Kh9ZMzsqqIgbT86xwY1xusvsGR37piMp4Z257RL1AAyfE0ABJb/uYn9WtbE
	 h6Wqlw1mrRE8aBEdqqK02okLKeG7rxD/94DXytYyJCiI0cLgMT3SMvudsI8z0wt+p5
	 wqWzh9HI31BSQ==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v4 3/3] arm,smmu: add support for generic DT bindings. Implement add_device and dt_xlate.
Date: Fri, 16 Jul 2021 16:59:39 -0700
Message-Id: <20210716235939.9585-3-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>

From: Brian Woods <brian.woods@xilinx.com>

For the legacy path, arm_smmu_dt_add_device_legacy is called by
register_smmu_master scanning mmu-masters (a fwspec entry is also
created.) For the generic path, arm_smmu_dt_add_device_generic gets
called instead. Then, arm_smmu_dt_add_device_generic calls
arm_smmu_dt_add_device_legacy afterwards, shared with the legacy path.
This way most of the low level implementation is shared between the two
paths.

If both legacy bindings and generic bindings are present in device tree,
the legacy bindings are the ones that are used. That's because
mmu-masters is parsed by
xen/drivers/passthrough/arm/smmu.c:arm_smmu_device_dt_probe which is
called by arm_smmu_dt_init. It happens very early. iommus is parsed by
xen/drivers/passthrough/device_tree.c:iommu_add_dt_device which is
called by xen/arch/arm/domain_build.c:handle_device and happens
afterwards.

arm_smmu_dt_xlate_generic is a verbatim copy from Linux
(drivers/iommu/arm/arm-smmu/arm-smmu.c:arm_smmu_of_xlate, version
v5.10).

A workaround was introduced by cf4af9d6d6c (xen/arm: boot with device
trees with "mmu-masters" and "iommus") because the SMMU driver only
supported the legacy bindings. Remove it now.

Signed-off-by: Brian Woods <brian.woods@xilinx.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
---
Changes in v4:
- improve indentation
- improve commit message
---
 xen/drivers/passthrough/arm/smmu.c    | 40 ++++++++++++++++++++++++++-
 xen/drivers/passthrough/device_tree.c | 17 +-----------
 2 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index 252e8c1680..a065ba3f4e 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -255,6 +255,8 @@ struct iommu_group
 	atomic_t ref;
 };
 
+static struct arm_smmu_device *find_smmu(const struct device *dev);
+
 static struct iommu_group *iommu_group_alloc(void)
 {
 	struct iommu_group *group = xzalloc(struct iommu_group);
@@ -443,6 +445,8 @@ static struct iommu_group *iommu_group_get(struct device *dev)
 #define SMR_VALID			(1U << 31)
 #define SMR_MASK_SHIFT			16
 #define SMR_ID_SHIFT			0
+#define SMR_ID_MASK			0x7fff
+#define SMR_MASK_MASK			0x7fff
 
 #define ARM_SMMU_GR0_S2CR(n)		(0xc00 + ((n) << 2))
 #define S2CR_CBNDX_SHIFT		0
@@ -871,6 +875,38 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 					     fwspec);
 }
 
+static int arm_smmu_dt_add_device_generic(u8 devfn, struct device *dev)
+{
+	struct arm_smmu_device *smmu;
+	struct iommu_fwspec *fwspec;
+
+	fwspec = dev_iommu_fwspec_get(dev);
+	if (fwspec == NULL)
+		return -ENXIO;
+
+	smmu = find_smmu(fwspec->iommu_dev);
+	if (smmu == NULL)
+		return -ENXIO;
+
+	return arm_smmu_dt_add_device_legacy(smmu, dev, fwspec);
+}
+
+static int arm_smmu_dt_xlate_generic(struct device *dev,
+				    const struct dt_phandle_args *spec)
+{
+	uint32_t mask, fwid = 0;
+
+	if (spec->args_count > 0)
+		fwid |= (SMR_ID_MASK & spec->args[0]) << SMR_ID_SHIFT;
+
+	if (spec->args_count > 1)
+		fwid |= (SMR_MASK_MASK & spec->args[1]) << SMR_MASK_SHIFT;
+	else if (!of_property_read_u32(spec->np, "stream-match-mask", &mask))
+		fwid |= (SMR_MASK_MASK & mask) << SMR_MASK_SHIFT;
+
+	return iommu_fwspec_add_ids(dev, &fwid, 1);
+}
+
 static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
 {
 	struct arm_smmu_device *smmu;
@@ -2835,6 +2871,7 @@ static void arm_smmu_iommu_domain_teardown(struct domain *d)
 static const struct iommu_ops arm_smmu_iommu_ops = {
     .init = arm_smmu_iommu_domain_init,
     .hwdom_init = arm_smmu_iommu_hwdom_init,
+    .add_device = arm_smmu_dt_add_device_generic,
     .teardown = arm_smmu_iommu_domain_teardown,
     .iotlb_flush = arm_smmu_iotlb_flush,
     .iotlb_flush_all = arm_smmu_iotlb_flush_all,
@@ -2842,9 +2879,10 @@ static const struct iommu_ops arm_smmu_iommu_ops = {
     .reassign_device = arm_smmu_reassign_dev,
     .map_page = arm_iommu_map_page,
     .unmap_page = arm_iommu_unmap_page,
+    .dt_xlate = arm_smmu_dt_xlate_generic,
 };
 
-static __init const struct arm_smmu_device *find_smmu(const struct device *dev)
+static struct arm_smmu_device *find_smmu(const struct device *dev)
 {
 	struct arm_smmu_device *smmu;
 	bool found = false;
diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
index 911f82a561..af6c2b2dfe 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -159,22 +159,7 @@ int iommu_add_dt_device(struct dt_device_node *np)
          * these callback implemented.
          */
         if ( !ops->add_device || !ops->dt_xlate )
-        {
-            /*
-             * Some Device Trees may expose both legacy SMMU and generic
-             * IOMMU bindings together. However, the SMMU driver is only
-             * supporting the former and will protect them during the
-             * initialization. So we need to skip them and not return
-             * error here.
-             *
-             * XXX: This can be dropped when the SMMU is able to deal
-             * with generic bindings.
-             */
-            if ( dt_device_is_protected(np) )
-                return 0;
-            else
-                return -EINVAL;
-        }
+            return -EINVAL;
 
         if ( !dt_device_is_available(iommu_spec.np) )
             break;
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Sat Jul 17 00:08:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 00:08:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157798.290646 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XsI-0000UK-99; Sat, 17 Jul 2021 00:08:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157798.290646; Sat, 17 Jul 2021 00:08:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4XsI-0000UD-5h; Sat, 17 Jul 2021 00:08:10 +0000
Received: by outflank-mailman (input) for mailman id 157798;
 Sat, 17 Jul 2021 00:08:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4XsG-0000U3-Lc; Sat, 17 Jul 2021 00:08:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4XsG-0008QO-9I; Sat, 17 Jul 2021 00:08:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4XsG-0003Iq-0x; Sat, 17 Jul 2021 00:08:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4XsG-0000MD-0T; Sat, 17 Jul 2021 00:08:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=Txzxn0AHZy9WVaPr7Vp657Uhi4zUBkE/h991MCYcJmU=; b=V4vbONczQi4g9KxUYD4Xcur791
	L1MUoaeZPdFKayCxHBHILmeqY0tT8jDcO5ZH6hTnH5p+aMP6QAlL0iRVUSCeasYbqL7lTXbqsi62B
	g+JXX+GgQURM0tNy50aOmzxrKdZOuheLu0LpsXPCA9zKe49lLxR3nNAhxoUPQii4emxI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow
Message-Id: <E1m4XsG-0000MD-0T@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 00:08:08 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow
testid debian-hvm-install

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163754/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow.debian-hvm-install.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow.debian-hvm-install --summary-out=tmp/163754.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow debian-hvm-install
Searching for failure / basis pass:
 163719 fail [host=godello1] / 163321 [host=fiano0] 163311 [host=albana1] 163303 [host=albana0] 163299 ok.
Failure / basis pass flights: 163719 / 163299
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a9649a719a44894b81f38dc1c5c1888ee684acef 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#73c8bf4ccff8951d228b8a0d49968c56e32da4de-a9649a719a44894b81f38dc1c5c1888ee684acef git://xenbits.xen.org/osstest/seabios.git#54082c81d96028ba8c76fbe6784085cf1df76b20-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#74d044d51b19bb697eac5c3deafa140f6afafec8-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Loaded 30020 nodes in revision graph
Searching for test results:
 163292 [host=pinot1]
 163299 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163303 [host=albana0]
 163311 [host=albana1]
 163321 [host=fiano0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163545 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163577 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163600 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163621 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163642 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 eca73713358f7abb18f15c026ff4267b51746992 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163663 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163677 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163694 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163725 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163719 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a9649a719a44894b81f38dc1c5c1888ee684acef 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163731 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163732 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163733 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 5588ebcfca774477cf823949e5703b0ac48818cc
 163734 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 436463b84b75fad6ff962e45a2220a7d1d17557e 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163735 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163736 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163737 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 ed3b3f1764b0deecc2d875ab897e5883ef42a615 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163739 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8d6cb100731c4d28535adbf2a3c2d1f29be3fef4 54082c81d96028ba8c76fbe6784085cf1df76b20 5b2a5523d697b6d1a97a18d33dc6bf92a33def32
 163740 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 484910bf41fec2c80d79ed9c5c33831bee7318f0
 163742 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a9649a719a44894b81f38dc1c5c1888ee684acef 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163743 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 904806c69bd4e013491550d05f5c2cbdba9a9b38 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163744 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163746 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163747 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163748 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163749 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163753 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163754 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163299 (pass), for basis pass
 Result found: flight 163719 (fail), for basis failure
 Repro found: flight 163725 (pass), for basis pass
 Repro found: flight 163742 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163746 (pass), for last pass
 Result found: flight 163747 (fail), for first failure
 Repro found: flight 163748 (pass), for last pass
 Repro found: flight 163749 (fail), for first failure
 Repro found: flight 163753 (pass), for last pass
 Repro found: flight 163754 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163754/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow.debian-hvm-install.{dot,ps,png,html,svg}.
----------------------------------------
163754: tolerable ALL FAIL

flight 163754 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163754/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail baseline untested


jobs:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Sat Jul 17 01:40:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 01:40:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157808.290664 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4ZJX-0008MM-EA; Sat, 17 Jul 2021 01:40:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157808.290664; Sat, 17 Jul 2021 01:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4ZJX-0008ME-8f; Sat, 17 Jul 2021 01:40:23 +0000
Received: by outflank-mailman (input) for mailman id 157808;
 Sat, 17 Jul 2021 01:40:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4ZJV-0008M4-AZ; Sat, 17 Jul 2021 01:40:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4ZJV-0007iS-39; Sat, 17 Jul 2021 01:40:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4ZJU-0007fE-Pf; Sat, 17 Jul 2021 01:40:20 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4ZJU-0002dP-P9; Sat, 17 Jul 2021 01:40:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jgG038j2Od57weEb9euw0Sr61Pg0tjNgVVBeWxENsmQ=; b=plr3CrUPjK+S5o9ldPUoQNQiFt
	uRJbZBGyZlYENspc/Ux4Cg8fjH7TWADsa+6bW8R/DcA8F5elwBu0zYpVMDr6kLiKKNtt2mThzNqVV
	3kQfSFlrhU8vIcGFt9l3CSng3zmTqft/FXQxUUHKLT8uJyig18VKmLv3AXoWzSPF2jN4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163729-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163729: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=4bac086e8e007c7143e33f87bb96238326d1d6ba
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 01:40:20 +0000

flight 163729 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163729/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 4bac086e8e007c7143e33f87bb96238326d1d6ba
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   42 days
Failing since        162368  2021-06-04 15:42:59 Z   42 days  117 attempts
Testing same since   163729  2021-07-16 06:06:18 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3858 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 04:10:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 04:10:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157818.290685 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4bes-0006CQ-9i; Sat, 17 Jul 2021 04:10:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157818.290685; Sat, 17 Jul 2021 04:10:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4bes-0006CJ-6V; Sat, 17 Jul 2021 04:10:34 +0000
Received: by outflank-mailman (input) for mailman id 157818;
 Sat, 17 Jul 2021 04:10:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4ber-0006C9-HY; Sat, 17 Jul 2021 04:10:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4ber-0002JI-7k; Sat, 17 Jul 2021 04:10:33 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4beq-0005P0-Se; Sat, 17 Jul 2021 04:10:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4beq-0000O0-S1; Sat, 17 Jul 2021 04:10:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=J8ZVE6KpewUt74vzsHqhva2Vxv71MmBOnQlZ0EdWGac=; b=ag7rp4BBWjqYLe2IUCoCfbRcH0
	PmRkELUbmrBMIJRhfJIZeHcGtD9b1EydvVpWm8/SkVBuD4z7oDn6is7fQBJS88Hl5F+PYOX1dfk0r
	0rvMv8RJTyDGfRuk99xTGjYznd7DeG0IhKjZMoIu0DxL+6QrkTTMVQVQk1nQTyxau87o=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163727-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.15-testing test] 163727: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.15-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:heisenbug
    xen-4.15-testing:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-4.15-testing:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-4.15-testing:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    xen-4.15-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=429b0a5c62b9e9faf96456aefb5a176b6eb02921
X-Osstest-Versions-That:
    xen=1a6824957d051bb94929a1c74a52c013bc2f388d
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 04:10:32 +0000

flight 163727 xen-4.15-testing real [real]
flight 163757 xen-4.15-testing real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163727/
http://logs.test-lab.xenproject.org/osstest/logs/163757/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install fail pass in 163757-retest
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 163757-retest
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 163757-retest

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163710

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail in 163757 like 163710
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163710
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163710
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163710
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163710
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163710
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163710
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163710
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163710
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163710
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163710
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  429b0a5c62b9e9faf96456aefb5a176b6eb02921
baseline version:
 xen                  1a6824957d051bb94929a1c74a52c013bc2f388d

Last test of basis   163710  2021-07-15 07:36:48 Z    1 days
Testing same since   163727  2021-07-16 01:39:21 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   1a6824957d..429b0a5c62  429b0a5c62b9e9faf96456aefb5a176b6eb02921 -> stable-4.15


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 07:54:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 07:54:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157831.290716 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4f9J-0002QW-Hr; Sat, 17 Jul 2021 07:54:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157831.290716; Sat, 17 Jul 2021 07:54:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4f9J-0002QP-Eq; Sat, 17 Jul 2021 07:54:13 +0000
Received: by outflank-mailman (input) for mailman id 157831;
 Sat, 17 Jul 2021 07:54:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4f9I-0002QF-IN; Sat, 17 Jul 2021 07:54:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4f9I-0006P0-CJ; Sat, 17 Jul 2021 07:54:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4f9I-0000lu-34; Sat, 17 Jul 2021 07:54:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4f9H-0006bT-WE; Sat, 17 Jul 2021 07:54:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=q2D7Q9XVYHj0uUC6cWVUTyWwq1QbWv4yj9Su+sQ7i1Y=; b=WHu0Ou8k6fPv8O03CrlRp58PEL
	D23ixXks2dRIiq+1woGe9qvfCMk/MwO3IrhijHXVSy7rzsrzFSjGh1P6zGwkvwY4uZ98XAiXmNnHW
	8+n8HOv5m9bgV1e6mf68177x4pLWMesMamSUAJa0yHWWthTUAnc6xYZW2124zzvkQlCM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163730-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.13-testing test] 163730: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.13-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=1f27fc448bc6898ffd7628b42c0847548b54d2fb
X-Osstest-Versions-That:
    xen=1540a9a20dd0c049345a00bfed0a3e8ea98d104b
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 07:54:11 +0000

flight 163730 xen-4.13-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163730/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  1f27fc448bc6898ffd7628b42c0847548b54d2fb
baseline version:
 xen                  1540a9a20dd0c049345a00bfed0a3e8ea98d104b

Last test of basis   163711  2021-07-15 08:07:15 Z    1 days
Testing same since   163730  2021-07-16 06:43:48 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Richard Kojedzinszky <richard@kojedz.in>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   1540a9a20d..1f27fc448b  1f27fc448bc6898ffd7628b42c0847548b54d2fb -> stable-4.13


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 08:39:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 08:39:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157848.290739 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4frD-0007eO-MV; Sat, 17 Jul 2021 08:39:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157848.290739; Sat, 17 Jul 2021 08:39:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4frD-0007eH-Ii; Sat, 17 Jul 2021 08:39:35 +0000
Received: by outflank-mailman (input) for mailman id 157848;
 Sat, 17 Jul 2021 08:39:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KZD+=MJ=gmail.com=rm.skakun@srs-us1.protection.inumbo.net>)
 id 1m4frC-0007eB-Ux
 for xen-devel@lists.xenproject.org; Sat, 17 Jul 2021 08:39:35 +0000
Received: from mail-lj1-x235.google.com (unknown [2a00:1450:4864:20::235])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e33a37c1-6687-48f5-87e7-9e916a47b639;
 Sat, 17 Jul 2021 08:39:33 +0000 (UTC)
Received: by mail-lj1-x235.google.com with SMTP id s17so6746664ljo.12
 for <xen-devel@lists.xenproject.org>; Sat, 17 Jul 2021 01:39:33 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e33a37c1-6687-48f5-87e7-9e916a47b639
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=L/Ph4KXH21cp1cKWqCha4JghboKhxeBssRdrgGEsZ/g=;
        b=NFuCS2VLQWPpHzhymx9nA39Hfr7bWiXg/IN9dUX+ZiJ4zU2AcVuWqCxkeX430TJ57H
         F1HczOYd4Fqt5nMNvkujGGhZ7a6Yt3BzgJ1mEsDSK4dbswVO6I6ycwiRkB8dzw3WSNJ8
         i1Lde1EJD5oy0SXRCDwtPzqmdw4wC5iqWY4e7hE0pfb0jE8P23WSfRDoh2xfVw+UBYfX
         Q8n8aqRkqMrt3KEqKQ7EqoWuf8IbB/rBR7xbRSZYEZ0sclhldvqqcSUFMybD15jsW8j/
         N5oJ4eBNBJV278RQOPlJ8/CGf/Slr+xDsFLGv1Dg9aP4tg4SZ3aWwWKnci15i8i7VM+u
         rb+w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=L/Ph4KXH21cp1cKWqCha4JghboKhxeBssRdrgGEsZ/g=;
        b=C9nRcduXcpHFD9YoiM4QcY7odw2+Dkx11xyG+xabutIHeF7kK0Mg0tFjIhBXWfBCcD
         2GAkpz+yVeNSFtNNOFYLhKMawYRFu0gQO5RfrLEIz2x06FPT7+5ZZDq9LtICbZPRo0Gv
         vZJrJqlcRcQwSihj8aqcBilhUng9g9aH8sY3AKVxzi8UqqvBWmf0jh8lhWnx+3f0GEIR
         qjuKzw2Qf5NLcvUWazt15/c1aazwfn2zo5REdFVsLJj65n35eBnFereMg37zSBFpYqiP
         qUj6ESQyYmHhsRi0IRXwTXVVkr5rmA6hI6/CU4G9OP/zgL/nIf4hQiadYl7aZqHypL3r
         4XTA==
X-Gm-Message-State: AOAM532inxvmcYq0XMGDCT4uh3y04dn7NU0vYqLVdDCA06bpr2ophA6D
	eQd0wskaWNv0FH7Co6bj/0nebXZCwe4t5iE5pxw=
X-Google-Smtp-Source: ABdhPJyeRjTAQ3mrnLTYgab+MKBgvatMXBQP3Edmgnib1kkC6/oA7N1ZXSWANCX4akcXxJ45BHA43lcfioCMHsjfSIU=
X-Received: by 2002:a2e:700f:: with SMTP id l15mr12600105ljc.149.1626511172469;
 Sat, 17 Jul 2021 01:39:32 -0700 (PDT)
MIME-Version: 1.0
References: <20210715170011.GA17324@lst.de> <20210716083934.154992-1-rm.skakun@gmail.com>
 <20210716093551.GA17981@lst.de> <CADu_u-OYA+Z_y-DBLxyUYGhmLVMtLggmZ_SnRiEtw9EGrO4oGg@mail.gmail.com>
 <alpine.DEB.2.21.2107160828430.3916@sstabellini-ThinkPad-T480s>
In-Reply-To: <alpine.DEB.2.21.2107160828430.3916@sstabellini-ThinkPad-T480s>
From: Roman Skakun <rm.skakun@gmail.com>
Date: Sat, 17 Jul 2021 11:39:21 +0300
Message-ID: <CADu_u-Psn5QpOyZ18_NCPx14DYxmGmSqVod=_RBC3A_A93tGUw@mail.gmail.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
To: Christoph Hellwig <hch@lst.de>, Stefano Stabellini <sstabellini@kernel.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org, 
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, 
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>, Andrii Anisov <andrii_anisov@epam.com>, 
	Roman Skakun <Roman_Skakun@epam.com>, Roman Skakun <rm.skakun@gmail.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

> We can merge this patch and create a new one for
> xen_swiotlb_free_coherent() later.
> Yeah, no worries, I didn't know that exposing dma_common_vaddr_to_page
> was problematic.
>
> This patch is fine by me.

Good. I'm agreed too. Waiting for Christoph.

=D0=BF=D1=82, 16 =D0=B8=D1=8E=D0=BB. 2021 =D0=B3. =D0=B2 18:29, Stefano Sta=
bellini <sstabellini@kernel.org>:
>
> On Fri, 16 Jul 2021, Roman Skakun wrote:
> > > Technically this looks good.  But given that exposing a helper
> > > that does either vmalloc_to_page or virt_to_page is one of the
> > > never ending MM discussions I don't want to get into that discussion
> > > and just keep it local in the DMA code.
> > >
> > > Are you fine with me applying this version?
> >
> > Looks good to me, thanks!
> > But, Stefano asked me about using created helper in the
> > xen_swiotlb_free_coherent()
> > and I created a patch according to this mention.
> >
> > We can merge this patch and create a new one for
> > xen_swiotlb_free_coherent() later.
>
> Yeah, no worries, I didn't know that exposing dma_common_vaddr_to_page
> was problematic.
>
> This patch is fine by me.
>
>
> > =D0=BF=D1=82, 16 =D0=B8=D1=8E=D0=BB. 2021 =D0=B3. =D0=B2 12:35, Christo=
ph Hellwig <hch@lst.de>:
> > >
> > > Technically this looks good.  But given that exposing a helper
> > > that does either vmalloc_to_page or virt_to_page is one of the
> > > never ending MM discussions I don't want to get into that discussion
> > > and just keep it local in the DMA code.
> > >
> > > Are you fine with me applying this version?
> > >
> > > ---
> > > From 40ac971eab89330d6153e7721e88acd2d98833f9 Mon Sep 17 00:00:00 200=
1
> > > From: Roman Skakun <Roman_Skakun@epam.com>
> > > Date: Fri, 16 Jul 2021 11:39:34 +0300
> > > Subject: dma-mapping: handle vmalloc addresses in
> > >  dma_common_{mmap,get_sgtable}
> > >
> > > xen-swiotlb can use vmalloc backed addresses for dma coherent allocat=
ions
> > > and uses the common helpers.  Properly handle them to unbreak Xen on
> > > ARM platforms.
> > >
> > > Fixes: 1b65c4e5a9af ("swiotlb-xen: use xen_alloc/free_coherent_pages"=
)
> > > Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> > > Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
> > > [hch: split the patch, renamed the helpers]
> > > Signed-off-by: Christoph Hellwig <hch@lst.de>
> > > ---
> > >  kernel/dma/ops_helpers.c | 12 ++++++++++--
> > >  1 file changed, 10 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c
> > > index 910ae69cae77..af4a6ef48ce0 100644
> > > --- a/kernel/dma/ops_helpers.c
> > > +++ b/kernel/dma/ops_helpers.c
> > > @@ -5,6 +5,13 @@
> > >   */
> > >  #include <linux/dma-map-ops.h>
> > >
> > > +static struct page *dma_common_vaddr_to_page(void *cpu_addr)
> > > +{
> > > +       if (is_vmalloc_addr(cpu_addr))
> > > +               return vmalloc_to_page(cpu_addr);
> > > +       return virt_to_page(cpu_addr);
> > > +}
> > > +
> > >  /*
> > >   * Create scatter-list for the already allocated DMA buffer.
> > >   */
> > > @@ -12,7 +19,7 @@ int dma_common_get_sgtable(struct device *dev, stru=
ct sg_table *sgt,
> > >                  void *cpu_addr, dma_addr_t dma_addr, size_t size,
> > >                  unsigned long attrs)
> > >  {
> > > -       struct page *page =3D virt_to_page(cpu_addr);
> > > +       struct page *page =3D dma_common_vaddr_to_page(cpu_addr);
> > >         int ret;
> > >
> > >         ret =3D sg_alloc_table(sgt, 1, GFP_KERNEL);
> > > @@ -32,6 +39,7 @@ int dma_common_mmap(struct device *dev, struct vm_a=
rea_struct *vma,
> > >         unsigned long user_count =3D vma_pages(vma);
> > >         unsigned long count =3D PAGE_ALIGN(size) >> PAGE_SHIFT;
> > >         unsigned long off =3D vma->vm_pgoff;
> > > +       struct page *page =3D dma_common_vaddr_to_page(cpu_addr);
> > >         int ret =3D -ENXIO;
> > >
> > >         vma->vm_page_prot =3D dma_pgprot(dev, vma->vm_page_prot, attr=
s);
> > > @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_a=
rea_struct *vma,
> > >                 return -ENXIO;
> > >
> > >         return remap_pfn_range(vma, vma->vm_start,
> > > -                       page_to_pfn(virt_to_page(cpu_addr)) + vma->vm=
_pgoff,
> > > +                       page_to_pfn(page) + vma->vm_pgoff,
> > >                         user_count << PAGE_SHIFT, vma->vm_page_prot);
> > >  #else
> > >         return -ENXIO;
> > > --
> > > 2.30.2
> > >
> >
> >
> > --
> > Best Regards, Roman.
> >



--=20
Best Regards, Roman.


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 13:35:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 13:35:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157859.290757 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4kT2-0002fk-Qa; Sat, 17 Jul 2021 13:34:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157859.290757; Sat, 17 Jul 2021 13:34:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4kT2-0002fd-N5; Sat, 17 Jul 2021 13:34:56 +0000
Received: by outflank-mailman (input) for mailman id 157859;
 Sat, 17 Jul 2021 13:34:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4kT1-0002fT-TB; Sat, 17 Jul 2021 13:34:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4kT1-00046E-Iy; Sat, 17 Jul 2021 13:34:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4kT1-0008Nd-7t; Sat, 17 Jul 2021 13:34:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4kT1-00053W-7S; Sat, 17 Jul 2021 13:34:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=A14DZyO2Fuuxd2PU+5xY2ZiffoMnJ+xrdxo+99Xmn4I=; b=QJLru8VCuaIGOdV1HXxckTxJe8
	y3ACnFepxNMzKcw2Kh4rGzDnCBDLybtfz92G/ZXOvX14AGx83twzDKnOwLGLKnrH0mtxT661gT/In
	1C3sJtlFl7JyADRQiByiybjVwyKGQ/j85m8ZsOtoIocRU+5TitdvnieFaU9KR8nM+mk0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163738-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163738: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-amd64:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 13:34:55 +0000

flight 163738 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163738/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds 18 guest-start/debian.repeat fail in 163690 pass in 163738
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163690
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 20 guest-start/debianhvm.repeat fail pass in 163714

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    8 days
Failing since        163478  2021-07-09 15:23:45 Z    7 days   13 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    3 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 15:25:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 15:25:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157869.290778 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4mBP-000548-Hi; Sat, 17 Jul 2021 15:24:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157869.290778; Sat, 17 Jul 2021 15:24:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4mBP-000540-EN; Sat, 17 Jul 2021 15:24:51 +0000
Received: by outflank-mailman (input) for mailman id 157869;
 Sat, 17 Jul 2021 15:24:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4mBP-00053r-45; Sat, 17 Jul 2021 15:24:51 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4mBO-0005uo-Sc; Sat, 17 Jul 2021 15:24:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4mBO-0005CK-Jz; Sat, 17 Jul 2021 15:24:50 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4mBO-0001PR-JS; Sat, 17 Jul 2021 15:24:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jfCzIBqNHpjklmernZ8tZkyIFn9hQWCAWI/fX6d5PhY=; b=IjLFtFt/ZQTq5V6TKfWpCzHGuP
	RMAyl2TjTAsGbjXDyRB7C8fWvlB1DXptj6CvxzGn7RMVGhvHqlbkilzxeobksUPsi281adKfY6QH5
	E0J04CECFQj09zbnFEzY3kEJNB4ezxqsckKpLaSpAAo3J9niRZpTw7zuPn6QIGhsR4jU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163741-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163741: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-credit1:guest-localmigrate/x10:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=9ad4c7c9b63f89c308fd988d509bed1389953c8b
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 15:24:50 +0000

flight 163741 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163741/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-credit1  20 guest-localmigrate/x10   fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                9ad4c7c9b63f89c308fd988d509bed1389953c8b
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   11 days
Failing since        163327  2021-07-06 12:39:04 Z   11 days   19 attempts
Testing same since   163741  2021-07-16 13:43:20 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  fail    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 9720 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 18:22:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 18:22:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157881.290801 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4oxT-00068N-Uu; Sat, 17 Jul 2021 18:22:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157881.290801; Sat, 17 Jul 2021 18:22:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4oxT-00068G-Rw; Sat, 17 Jul 2021 18:22:39 +0000
Received: by outflank-mailman (input) for mailman id 157881;
 Sat, 17 Jul 2021 18:22:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4oxS-000686-LT; Sat, 17 Jul 2021 18:22:38 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4oxS-0000vZ-CN; Sat, 17 Jul 2021 18:22:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4oxS-0004RM-1Z; Sat, 17 Jul 2021 18:22:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4oxS-0007yP-15; Sat, 17 Jul 2021 18:22:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=IqNE6iAuxMHFio4bEFGZCesIIQTQaR0vD1s1Xy2Cu2g=; b=u5UiSfNZjecLOEflYMj34VOU6z
	3nKb9wTDLhvxYDvDxZI9rjYhO/8nD/BJY5v0bUW2zJCqLV1T9TQpDfJs3gT6cq1ZZ2KT4oT/gpbOj
	G12QY0pmMojlR9txVouBzwZaxN9fg94bNPmUfxydrUb2FaiqTA2xXXxtCzm5kSWU3mCw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163745-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163745: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-amd64-libvirt-vhd:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-dom0pvh-xl-intel:guest-start/debian.repeat:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:guest-start:fail:regression
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=d936eb23874433caa3e3d841cfa16f5434b85dcf
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 18:22:38 +0000

flight 163745 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163745/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-libvirt-vhd 13 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2    13 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-dom0pvh-xl-intel 22 guest-start/debian.repeat fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd      13 guest-start              fail REGR. vs. 152332

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

version targeted for testing:
 linux                d936eb23874433caa3e3d841cfa16f5434b85dcf
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  350 days
Failing since        152366  2020-08-01 20:49:34 Z  349 days  597 attempts
Testing same since   163745  2021-07-16 16:55:08 Z    1 days    1 attempts

------------------------------------------------------------
6694 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            fail    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1973247 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 21:58:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 21:58:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157893.290828 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4sK5-0001As-Cy; Sat, 17 Jul 2021 21:58:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157893.290828; Sat, 17 Jul 2021 21:58:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4sK5-0001Al-A2; Sat, 17 Jul 2021 21:58:13 +0000
Received: by outflank-mailman (input) for mailman id 157893;
 Sat, 17 Jul 2021 21:58:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4sK4-00019p-4O; Sat, 17 Jul 2021 21:58:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4sK3-0004Va-QW; Sat, 17 Jul 2021 21:58:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4sK3-000665-HX; Sat, 17 Jul 2021 21:58:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4sK3-0003HY-Ga; Sat, 17 Jul 2021 21:58:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3SWAZBubhKqF7zeJL3epnH1S3T/SkPt/UIwQw2PkOLg=; b=t5q1fotm32Rz3TPb1BcLLDWfMb
	vShatgRfxUJVXQ+rw0rkFxxdx4I/lwvyabzFj5/Ip/g6mz6kaWILEPxyERdlp05qWrg/4Kn00sswb
	fjyHyqnAzotIHoGq3ijKDJgrWLMHFwWYlXpolrrjKcK/sAacYMWCwM0FtQosDKwZ53Bg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163756-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163756: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=4bac086e8e007c7143e33f87bb96238326d1d6ba
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 21:58:11 +0000

flight 163756 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163756/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 4bac086e8e007c7143e33f87bb96238326d1d6ba
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   43 days
Failing since        162368  2021-06-04 15:42:59 Z   43 days  118 attempts
Testing same since   163729  2021-07-16 06:06:18 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3858 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 22:41:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 22:41:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157901.290843 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4t08-0006Eo-NN; Sat, 17 Jul 2021 22:41:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157901.290843; Sat, 17 Jul 2021 22:41:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4t08-0006Eh-KO; Sat, 17 Jul 2021 22:41:40 +0000
Received: by outflank-mailman (input) for mailman id 157901;
 Sat, 17 Jul 2021 22:41:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t07-0006EX-EV; Sat, 17 Jul 2021 22:41:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t07-0005Bz-63; Sat, 17 Jul 2021 22:41:39 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t06-0007ey-TZ; Sat, 17 Jul 2021 22:41:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t06-0005Ji-T6; Sat, 17 Jul 2021 22:41:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=MBs3qoB8IvesQMKJ6vl8U62Emp28c9ZqyxHcZCTIwpg=; b=QoqO56bgyWaFtks8G/VBMogp+t
	nh1DDytIr3QwGH+Lqv7foIUuJ6jBDMZgBQnZ7+zidwNhO0uNg/GUgIag7PITd1+8QAbM2lBijguJC
	bgFnApbvjkwpFvg5TPwnjAtF2wND35D2E7H79EAWjJ+pivVb4H5JWmQKRiFvQopmCTvw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163750-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.14-testing test] 163750: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.14-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.14-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=49299c4813b7847d29df07bf790f5489060f2a9c
X-Osstest-Versions-That:
    xen=c3cc6e206ff79c6117b841891d832694597bd5af
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 22:41:38 +0000

flight 163750 xen-4.14-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163750/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163726
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163726
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163726
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163726
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163726
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163726
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163726
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163726
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163726
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163726
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163726
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   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-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 xen                  49299c4813b7847d29df07bf790f5489060f2a9c
baseline version:
 xen                  c3cc6e206ff79c6117b841891d832694597bd5af

Last test of basis   163726  2021-07-15 21:07:35 Z    2 days
Testing same since   163750  2021-07-16 21:07:40 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Edgar E. Iglesias <edgar.iglesias@xilinx.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Michal Orzel <michal.orzel@arm.com>
  Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
  Stefano Stabellini <sstabellini@kernel.org>
  Stefano Stabellini <stefano.stabellini@xilinx.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   c3cc6e206f..49299c4813  49299c4813b7847d29df07bf790f5489060f2a9c -> stable-4.14


From xen-devel-bounces@lists.xenproject.org Sat Jul 17 22:50:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 17 Jul 2021 22:50:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157914.290874 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4t8y-00081z-01; Sat, 17 Jul 2021 22:50:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157914.290874; Sat, 17 Jul 2021 22:50:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4t8x-00081s-TL; Sat, 17 Jul 2021 22:50:47 +0000
Received: by outflank-mailman (input) for mailman id 157914;
 Sat, 17 Jul 2021 22:50:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t8x-00081i-7U; Sat, 17 Jul 2021 22:50:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t8x-0005M0-14; Sat, 17 Jul 2021 22:50:47 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t8w-00081I-Q9; Sat, 17 Jul 2021 22:50:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4t8w-00026q-Pj; Sat, 17 Jul 2021 22:50:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=pGQVcKiNXN3BGDjDlMfgwmRqsU9P2omCatPMRpvxvBY=; b=5FbVmbphXwdeo3+/qinx82YuQd
	CX7VQUcpcO91+7W/dAOHk1DzqqsWuYRtvlGPIa8gXDH1KVt4rYuG0ech7GPB8Q5reQa/ImJefPpvk
	7IjiaagqsrS7pB1xsQlRYGv4qj5akfp5fR9iFYn08kGY9Y3PfSyyo4D7Z3V+efA/noWQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163760-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163760: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=16cb11a66adb5ebd1707c31c8f74acf79cd8bd6e
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 17 Jul 2021 22:50:46 +0000

flight 163760 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163760/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              16cb11a66adb5ebd1707c31c8f74acf79cd8bd6e
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  372 days
Failing since        151818  2020-07-11 04:18:52 Z  371 days  363 attempts
Testing same since   163760  2021-07-17 04:18:56 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64949 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 04:21:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 04:21:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157926.290902 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4yId-0004pp-O2; Sun, 18 Jul 2021 04:21:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157926.290902; Sun, 18 Jul 2021 04:21:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m4yId-0004ph-He; Sun, 18 Jul 2021 04:21:07 +0000
Received: by outflank-mailman (input) for mailman id 157926;
 Sun, 18 Jul 2021 04:21:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4yIb-0004pX-Rx; Sun, 18 Jul 2021 04:21:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4yIb-00018o-KZ; Sun, 18 Jul 2021 04:21:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m4yIb-0007rR-AR; Sun, 18 Jul 2021 04:21:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m4yIb-0004Ye-9w; Sun, 18 Jul 2021 04:21:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=4asscOk3WdMuYlOMHCjlVP13Q/QrWRao6v6CIQ5Vy4Y=; b=fO3TdNCercc5ouE30ZfM4mcAqs
	hLFQ6RTVOaTglCz/TaHqgkBWeh66ha+xSa1aUr9T/hobb6IKajKT3BG/dqhta3r61xlb2mqCOTQ1U
	9FXO9VpsRj0WD9plF/BL5qUnKRcRyi4kXZsyc95Y8XeG8J7Yi9iFAScgKDFgdV2NcJ10=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163759-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.15-testing test] 163759: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.15-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.15-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=dba774896f7dd74773c14d537643b7d7477fefcd
X-Osstest-Versions-That:
    xen=429b0a5c62b9e9faf96456aefb5a176b6eb02921
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 04:21:05 +0000

flight 163759 xen-4.15-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163759/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  dba774896f7dd74773c14d537643b7d7477fefcd
baseline version:
 xen                  429b0a5c62b9e9faf96456aefb5a176b6eb02921

Last test of basis   163727  2021-07-16 01:39:21 Z    2 days
Testing same since   163759  2021-07-17 04:12:25 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Edgar E. Iglesias <edgar.iglesias@xilinx.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Michal Orzel <michal.orzel@arm.com>
  Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
  Stefano Stabellini <sstabellini@kernel.org>
  Stefano Stabellini <stefano.stabellini@xilinx.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   429b0a5c62..dba774896f  dba774896f7dd74773c14d537643b7d7477fefcd -> stable-4.15


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 08:43:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 08:43:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157953.290954 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m52Oj-0005pM-9H; Sun, 18 Jul 2021 08:43:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157953.290954; Sun, 18 Jul 2021 08:43:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m52Oj-0005pF-64; Sun, 18 Jul 2021 08:43:41 +0000
Received: by outflank-mailman (input) for mailman id 157953;
 Sun, 18 Jul 2021 08:43:40 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m52Oi-0005p5-MU; Sun, 18 Jul 2021 08:43:40 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m52Oi-0006e6-Da; Sun, 18 Jul 2021 08:43:40 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m52Oi-000445-2A; Sun, 18 Jul 2021 08:43:40 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m52Oi-0006wj-1e; Sun, 18 Jul 2021 08:43:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=5wiuf+70yeqrwVP93XAiOkQ4h1BXfsmiDBOEiGrsSic=; b=toC1BhrxSVpKOBogeDmsHx26qA
	O1oQNYPQQpKK+x7Few48WStUA8TgCramFo4Gphgu+7MjLdLAq9zXzdRlQkMnIc2MDpNhgS4UGtzYe
	In8oo/MpldZOMNfYkzqWXOmpC4MSpHKnjUVSILNEnwG8Rz34sKMgqZemqKjMlKX+ZS38=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163761-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-4.13-testing test] 163761: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-4.13-testing:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-4.13-testing:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=32d580902b959000d79d51dff03a3560653c4fcb
X-Osstest-Versions-That:
    xen=1f27fc448bc6898ffd7628b42c0847548b54d2fb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 08:43:40 +0000

flight 163761 xen-4.13-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163761/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  32d580902b959000d79d51dff03a3560653c4fcb
baseline version:
 xen                  1f27fc448bc6898ffd7628b42c0847548b54d2fb

Last test of basis   163730  2021-07-16 06:43:48 Z    2 days
Testing same since   163761  2021-07-17 07:57:22 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Edgar E. Iglesias <edgar.iglesias@xilinx.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Michal Orzel <michal.orzel@arm.com>
  Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
  Stefano Stabellini <sstabellini@kernel.org>
  Stefano Stabellini <stefano.stabellini@xilinx.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   1f27fc448b..32d580902b  32d580902b959000d79d51dff03a3560653c4fcb -> stable-4.13


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 11:41:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 11:41:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157968.290994 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m55A3-0006iz-El; Sun, 18 Jul 2021 11:40:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157968.290994; Sun, 18 Jul 2021 11:40:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m55A3-0006is-BG; Sun, 18 Jul 2021 11:40:43 +0000
Received: by outflank-mailman (input) for mailman id 157968;
 Sun, 18 Jul 2021 11:40:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m55A1-0006ii-Ej; Sun, 18 Jul 2021 11:40:41 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m55A1-00017h-9R; Sun, 18 Jul 2021 11:40:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m55A0-0004O7-U1; Sun, 18 Jul 2021 11:40:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m55A0-0006UB-Ta; Sun, 18 Jul 2021 11:40:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+Y2lbUYje1Ith3Pb/71TWPjZPJW+TPqpOjBEeaCTkmU=; b=enKDWb/oJQ8HfMWnXvaGPOcAZb
	sHRKigiUdizYlNOUoxtarofQ0KkLEqhb3k8pWrgT7YAh31ZUgyL2Y6xHkRtKElBebtsBZP++Jwh0B
	2+oZYwZklZdgsmCe5eGJNGJhJaZ53VGCvlDespqlRG+vR/CtgY8NhpPNdpVxDEtGgkqc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163773-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163773: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=16cb11a66adb5ebd1707c31c8f74acf79cd8bd6e
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 11:40:40 +0000

flight 163773 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163773/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              16cb11a66adb5ebd1707c31c8f74acf79cd8bd6e
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  373 days
Failing since        151818  2020-07-11 04:18:52 Z  372 days  364 attempts
Testing same since   163760  2021-07-17 04:18:56 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64949 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 13:57:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 13:57:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157979.291015 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m57Hr-0002tq-DO; Sun, 18 Jul 2021 13:56:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157979.291015; Sun, 18 Jul 2021 13:56:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m57Hr-0002tj-9j; Sun, 18 Jul 2021 13:56:55 +0000
Received: by outflank-mailman (input) for mailman id 157979;
 Sun, 18 Jul 2021 13:56:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pnag=MK=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m57Hq-0002td-67
 for xen-devel@lists.xenproject.org; Sun, 18 Jul 2021 13:56:54 +0000
Received: from mail-qt1-x834.google.com (unknown [2607:f8b0:4864:20::834])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0d3f3b1a-32d3-40eb-b63d-3bc8a2cc4509;
 Sun, 18 Jul 2021 13:56:52 +0000 (UTC)
Received: by mail-qt1-x834.google.com with SMTP id c9so11027903qte.6
 for <xen-devel@lists.xenproject.org>; Sun, 18 Jul 2021 06:56:52 -0700 (PDT)
Received: from shine.lan ([2001:470:8:67e:b886:bc1c:3d0e:ab25])
 by smtp.gmail.com with ESMTPSA id c2sm5497073qtw.30.2021.07.18.06.56.51
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 18 Jul 2021 06:56:51 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0d3f3b1a-32d3-40eb-b63d-3bc8a2cc4509
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=N0ciib42lc8SDMc+D3+65PSpJblmgENvpAajq+eW12w=;
        b=Bl6rbdRCyCYWA5sxttA9XKolMN+5cawJtXE9Ggu1+ywdbAuYi6L+v+bLy0S3HlBsuH
         jB01tIP9GtXYiD7hnb1F0EbCC7BG9st3rsE9QmnvHz8sCziRfBKrhEp4jEx+OLLSXFag
         nnIxpetCZtLNHxs67+AyRIDjF6AcN4FTyDwSNkfmxbHDG/tth/GLPfoTzFksASTQ5qq9
         EYW21RJP1elQIM76H9/QxO76CJ+ssQ248pojhM4UXq65GJcNBI8EobCGScUOu751d1u4
         i8c0STJko4UBCxPTN5mhV+KqPSlRLHVIPZlRTdDGiSDfkL4ti5qPpnVoYozS6ubzKK6Z
         fl6g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=N0ciib42lc8SDMc+D3+65PSpJblmgENvpAajq+eW12w=;
        b=QLnYzKxgo0/pErWnu8+0o4dFuS0bwkJo8gKv9sYXT0rSnOU9/PkQhsfo0bZPxO2qOv
         Xxj+yHcw/JMP55nv5a1cT6U9SYkMLH28TB6BZ6xnM2MWqhekY6PSvaJ3H+vtRmaBomBX
         Jnycy9T5P+1exvAhDDb7lxzeU41ME8SG5GnWZNHmI4oMD1558cgezjDyk+ESSsksiqwR
         tmvNVJH+g/8szzyKpyEHmPCQT5Px6EOR68oSggPVXwyG4M23MR1BsoQY7u7CfwgRWVTM
         aqFVemrGcIMpPmjvVDJACIVQyTedBd+cDq46zQQjdpu5qAZ7jQxgbuxlOdoHwM/X9SGO
         6X+g==
X-Gm-Message-State: AOAM533RQBAxcmZKIVyDzaxpxRYzACZHDQteiE/FeUccE6j7bT9J0+OR
	OnaI0RZLIA/uvs1ZUwO3Yh7D5rsP1a4=
X-Google-Smtp-Source: ABdhPJwqjbzV9mGRAXDoGf5PawxbkyDM9sjYxGwpKTXSG1gYeKDSe9nGg7GkuJLtM48UXjC6NuU8xA==
X-Received: by 2002:ac8:5a55:: with SMTP id o21mr18042333qta.0.1626616612165;
        Sun, 18 Jul 2021 06:56:52 -0700 (PDT)
From: Jason Andryuk <jandryuk@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: jgross@suse.com,
	Jason Andryuk <jandryuk@gmail.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH] tests/xs: Check asprintf result
Date: Sun, 18 Jul 2021 09:56:33 -0400
Message-Id: <20210718135633.28675-1-jandryuk@gmail.com>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Compiling xs-test.c on Ubuntu 21.04 fails with:

xs-test.c: In function ‘main’:
xs-test.c:486:5: error: ignoring return value of ‘asprintf’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result]
  486 |     asprintf(&path, "%s/%u", TEST_PATH, getpid());
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Check the asprintf return and exit if it failed.

Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
---
Using exit(2) since it is used for the xs_open failure.
---
 tools/tests/xenstore/xs-test.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/tools/tests/xenstore/xs-test.c b/tools/tests/xenstore/xs-test.c
index c4c99c0661..f42c1cfe66 100644
--- a/tools/tests/xenstore/xs-test.c
+++ b/tools/tests/xenstore/xs-test.c
@@ -483,11 +483,20 @@ int main(int argc, char *argv[])
         return 0;
     }
 
-    asprintf(&path, "%s/%u", TEST_PATH, getpid());
+    ret = asprintf(&path, "%s/%u", TEST_PATH, getpid());
+    if (ret == -1) {
+        perror("asprintf");
+        exit(2);
+    }
+
     for ( t = 0; t < WRITE_BUFFERS_N; t++ )
     {
         memset(write_buffers[t], 'a' + t, WRITE_BUFFERS_SIZE);
-        asprintf(&paths[t], "%s/%c", path, 'a' + t);
+        ret = asprintf(&paths[t], "%s/%c", path, 'a' + t);
+        if (ret == -1) {
+            perror("asprintf");
+            exit(2);
+        }
     }
 
     xsh = xs_open(0);
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Sun Jul 18 15:54:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 15:54:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157988.291033 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m597g-0006Fc-UC; Sun, 18 Jul 2021 15:54:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157988.291033; Sun, 18 Jul 2021 15:54:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m597g-0006FU-Qs; Sun, 18 Jul 2021 15:54:32 +0000
Received: by outflank-mailman (input) for mailman id 157988;
 Sun, 18 Jul 2021 15:54:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m597e-0006FK-Qc; Sun, 18 Jul 2021 15:54:30 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m597e-0005L0-Fw; Sun, 18 Jul 2021 15:54:30 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m597e-000623-6q; Sun, 18 Jul 2021 15:54:30 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m597e-0003KX-6M; Sun, 18 Jul 2021 15:54:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=U7mEObx9gllueaQB1RFz9cZpCiP3OxselQWjorbYOMk=; b=pDdBN5Dq37N85PvwSUzSn1C3xQ
	kyhrACW3dANVULCBcO26vqL6qpFJ79awsxwuSPtjMBL68SeSAE9DseJu3dHmMYBb8Tw+PoIcLcaUR
	0z2aZvP59XG0aKX+8MIK/Bp+/3GY+AOu0NkkeUe91arCLzAYB7HXQUdnQAg947b7+8Mk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163763-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163763: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 15:54:30 +0000

flight 163763 xen-unstable real [real]
flight 163780 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163763/
http://logs.test-lab.xenproject.org/osstest/logs/163780/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z    9 days
Failing since        163478  2021-07-09 15:23:45 Z    9 days   14 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    4 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 16:48:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 16:48:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.157998.291054 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m59y7-0003qb-1j; Sun, 18 Jul 2021 16:48:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 157998.291054; Sun, 18 Jul 2021 16:48:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m59y6-0003qU-V0; Sun, 18 Jul 2021 16:48:42 +0000
Received: by outflank-mailman (input) for mailman id 157998;
 Sun, 18 Jul 2021 16:48:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m59y5-0003qK-U7; Sun, 18 Jul 2021 16:48:41 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m59y5-0006jp-Hu; Sun, 18 Jul 2021 16:48:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m59y5-000873-6p; Sun, 18 Jul 2021 16:48:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m59y5-00024k-6K; Sun, 18 Jul 2021 16:48:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=hcUfv5YvpuenmOtx50KGRmuT/SlcM1QkE4ugcoSDZ/M=; b=VJGaktzsAPmMGVBZUvoyeswyjJ
	az63Z05+H1aXjCvg1vDnUvnHRnwKRxt8LUlWzxbywPq/KwY2IVjXPEc9Kx2komVB7xDPYXVphEo8t
	vYAJNp2X1+DaaDxs9YEufWHv2MdZVxYjH4bG/txssTP9o1YHHOUJ6jun6FSCYhgWZd/0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163765-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163765: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 16:48:41 +0000

flight 163765 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163765/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   12 days
Failing since        163327  2021-07-06 12:39:04 Z   12 days   20 attempts
Testing same since   163765  2021-07-17 15:26:49 Z    1 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 10330 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 18:47:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 18:47:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158008.291072 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Boe-0007SH-Be; Sun, 18 Jul 2021 18:47:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158008.291072; Sun, 18 Jul 2021 18:47:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Boe-0007SA-7N; Sun, 18 Jul 2021 18:47:04 +0000
Received: by outflank-mailman (input) for mailman id 158008;
 Sun, 18 Jul 2021 18:47:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Boc-0007Rz-Rx; Sun, 18 Jul 2021 18:47:02 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Boc-0000H3-Lf; Sun, 18 Jul 2021 18:47:02 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Boc-0004Gt-9z; Sun, 18 Jul 2021 18:47:02 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Boc-0005o5-9R; Sun, 18 Jul 2021 18:47:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=z5ZpNjdYCEpHFl96HDxHHoXk4r2iwLtHP1HuSAtzp5w=; b=hZSCEwLcs4v0FUIEAm4xt/usMq
	a2GVD5+JatAVEvbDzEOpnsP610xpyXgHdsFEY3Vh4hTvSv9yuRg55xRyB1afK/ACvsQ28qmJEvJXI
	eYVNpuJ9HUoCGtgNwlxynAwwizSEPtDl81ckLECdVQHB+E8x0ip+MOhwOZzKm1Moka/4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163770-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163770: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=4bac086e8e007c7143e33f87bb96238326d1d6ba
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 18:47:02 +0000

flight 163770 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163770/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 4bac086e8e007c7143e33f87bb96238326d1d6ba
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   44 days
Failing since        162368  2021-06-04 15:42:59 Z   44 days  119 attempts
Testing same since   163729  2021-07-16 06:06:18 Z    2 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3858 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 18 20:40:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 18 Jul 2021 20:40:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158018.291096 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Da1-0002LD-GZ; Sun, 18 Jul 2021 20:40:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158018.291096; Sun, 18 Jul 2021 20:40:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Da1-0002Ka-Cr; Sun, 18 Jul 2021 20:40:05 +0000
Received: by outflank-mailman (input) for mailman id 158018;
 Sun, 18 Jul 2021 20:40:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5DZz-00021r-JI; Sun, 18 Jul 2021 20:40:03 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5DZz-0002DK-Ak; Sun, 18 Jul 2021 20:40:03 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5DZz-00015r-0z; Sun, 18 Jul 2021 20:40:03 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5DZz-0003RG-0R; Sun, 18 Jul 2021 20:40:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=9Yow/XCFqyDCrD+ph293LiWAFpahOfGzx5o1oRqxOIQ=; b=ow4Xiss6J1k0CNYz2Z/GXeIoxN
	lWcxrTAqPoGWD6jpOezvDWmrdWfe8COoOxbyGRCxds+4avmxBfX5vnrOzZ2mVLrfH9s6lljJlZ4Vz
	8JneH2JeZCE/8SC0Uj47Ssw7LPv+pR7aN1Bi6eCApQoR4QCmvk4zk1LCRDTkia+YGeSo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163767-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163767: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=d980cc0620ae77ab2572235a1300bf22519f2e86
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 18 Jul 2021 20:40:03 +0000

flight 163767 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163767/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332

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

version targeted for testing:
 linux                d980cc0620ae77ab2572235a1300bf22519f2e86
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  352 days
Failing since        152366  2020-08-01 20:49:34 Z  350 days  598 attempts
Testing same since   163767  2021-07-17 18:26:48 Z    1 days    1 attempts

------------------------------------------------------------
6698 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1974947 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 02:38:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 02:38:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158031.291129 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5JAX-0001uw-D4; Mon, 19 Jul 2021 02:38:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158031.291129; Mon, 19 Jul 2021 02:38:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5JAX-0001uo-6m; Mon, 19 Jul 2021 02:38:09 +0000
Received: by outflank-mailman (input) for mailman id 158031;
 Mon, 19 Jul 2021 02:38:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JAW-0001ue-6K; Mon, 19 Jul 2021 02:38:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JAV-0006qV-Vo; Mon, 19 Jul 2021 02:38:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JAV-0000pc-NI; Mon, 19 Jul 2021 02:38:07 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JAV-0000PN-Mk; Mon, 19 Jul 2021 02:38:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Vw7GTFYwg0nqPRP00RHqR2FGvJ/yFcKdo89K/R+Ta3M=; b=vdnKTrqg/eXZ4iNOpynpbnRL9+
	UZ/bbrcdDLn35tSm9mJdc23tv05iMrCvnH3MZRFKMOI9H2ivL5QQR27Xr4baBq94ksPAL7NDp+al7
	BRriWeEaovdJxOtZ9rWC8jWya2IioLOxdCaa7eGitIZRVLi2+YpUCDNIpNXi/S8arCVY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163782-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163782: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 02:38:07 +0000

flight 163782 xen-unstable real [real]
flight 163791 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163782/
http://logs.test-lab.xenproject.org/osstest/logs/163791/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z   10 days
Failing since        163478  2021-07-09 15:23:45 Z    9 days   15 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    4 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 03:02:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 03:02:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158041.291144 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5JY5-0005mb-I3; Mon, 19 Jul 2021 03:02:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158041.291144; Mon, 19 Jul 2021 03:02:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5JY5-0005mT-F2; Mon, 19 Jul 2021 03:02:29 +0000
Received: by outflank-mailman (input) for mailman id 158041;
 Mon, 19 Jul 2021 03:02:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JY5-0005mK-41; Mon, 19 Jul 2021 03:02:29 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JY4-0007lk-Sj; Mon, 19 Jul 2021 03:02:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JY4-0001qX-LE; Mon, 19 Jul 2021 03:02:28 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5JY4-0008L5-Kl; Mon, 19 Jul 2021 03:02:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Y87IIF2RF1kpv8N1dQR1s5r9HHTljXCQheE0OtXHTJQ=; b=4TXZdlUnolezZZjN81mf8/fIS0
	Jb13kV8bsyNR+LEMNHDXau0SHTIoQRjXycEp0F71Pbaj94uU/5LE3Z5wMVrBzBWzknTpAXHvPP8VL
	G3Fp87+OvIIw8fEHaReRBQSHzF6raHRTqZ087del4e5xfEfUI1XDiBfzauw4cPsc6qaE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163786-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163786: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=4bac086e8e007c7143e33f87bb96238326d1d6ba
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 03:02:28 +0000

flight 163786 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163786/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 4bac086e8e007c7143e33f87bb96238326d1d6ba
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   44 days
Failing since        162368  2021-06-04 15:42:59 Z   44 days  120 attempts
Testing same since   163729  2021-07-16 06:06:18 Z    2 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3858 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 04:04:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 04:04:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158048.291165 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5KVs-0003ra-C0; Mon, 19 Jul 2021 04:04:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158048.291165; Mon, 19 Jul 2021 04:04:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5KVs-0003rT-93; Mon, 19 Jul 2021 04:04:16 +0000
Received: by outflank-mailman (input) for mailman id 158048;
 Mon, 19 Jul 2021 03:25:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=40Jp=ML=fudan.edu.cn=xiyuyang19@srs-us1.protection.inumbo.net>)
 id 1m5JuG-0008Qb-Fn
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 03:25:26 +0000
Received: from zg8tmty1ljiyny4xntqumjca.icoremail.net (unknown
 [165.227.154.27]) by us1-amaz-eas2.inumbo.com (Halon) with SMTP
 id f1f7c8dc-e840-11eb-8ae6-12813bfff9fa;
 Mon, 19 Jul 2021 03:25:20 +0000 (UTC)
Received: from localhost.localdomain (unknown [10.162.86.133])
 by app1 (Coremail) with SMTP id XAUFCgDXt2iY8PRgLyaIAA--.722S3;
 Mon, 19 Jul 2021 11:25:12 +0800 (CST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f1f7c8dc-e840-11eb-8ae6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=fudan.edu.cn; s=dkim; h=Received:From:To:Cc:Subject:Date:
	Message-Id; bh=Lcw52HFkeq79mvMCsUXc/S2q9uj7FXlOnZGYD5PeKys=; b=W
	QlLosoW25H2O8B0qQBk7NkSVUV40cyeeEgw8Fg2OFOfLFfJDJCyNy2AH65mSQpTb
	Nt6Mbuqm0zQ7+QpN2h9PYlkD3StJFeW1bD/NCvy5JcFsNEecmAw6Bdq7M0xAuLQV
	GL+w5bakBb46YZpG7oZLA/2vQx1UV3hEYwuka8ZPbc=
From: Xiyu Yang <xiyuyang19@fudan.edu.cn>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>,
	xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: yuanxzhang@fudan.edu.cn,
	Xiyu Yang <xiyuyang19@fudan.edu.cn>,
	Xin Tan <tanxin.ctf@gmail.com>
Subject: [PATCH] xen-blkback: Convert from atomic_t to refcount_t on xen_blkif->refcnt
Date: Mon, 19 Jul 2021 11:25:06 +0800
Message-Id: <1626665106-49298-1-git-send-email-xiyuyang19@fudan.edu.cn>
X-Mailer: git-send-email 2.7.4
X-CM-TRANSID:XAUFCgDXt2iY8PRgLyaIAA--.722S3
X-Coremail-Antispam: 1UD129KBjvJXoW7Wry3tF17ZrWkWr4fGryfZwb_yoW8Zw4rpF
	s8Aa4xJFWUKF1xW3ZrAa1I9a43Ja98JFW5Way7C3s8Zr9xtwn2y3ZYkryagry8ZrZ3Jrn2
	q3ZIgw18A3WxuF7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2
	9KBjDU0xBIdaVrnRJUUUvS14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0
	rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02
	1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U
	JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc
	CE3s1lnxkEFVAIw20F6cxK64vIFxWle2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xv
	F2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r
	4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I
	648v4I1lc2xSY4AK6svPMxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI
	8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AK
	xVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI
	8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v20xvaj40_Gr0_Zr1lIxAIcVC2z280
	aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43
	ZEXa7VUbZmitUUUUU==
X-CM-SenderInfo: irzsiiysuqikmy6i3vldqovvfxof0/

refcount_t type and corresponding API can protect refcounters from
accidental underflow and overflow and further use-after-free situations.

Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
---
 drivers/block/xen-blkback/common.h | 7 ++++---
 drivers/block/xen-blkback/xenbus.c | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index bda5c815e441..d074cf41b4bc 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -27,6 +27,7 @@
 #ifndef __XEN_BLKIF__BACKEND__COMMON_H__
 #define __XEN_BLKIF__BACKEND__COMMON_H__
 
+#include <linux/refcount.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
@@ -306,7 +307,7 @@ struct xen_blkif {
 	struct xen_vbd		vbd;
 	/* Back pointer to the backend_info. */
 	struct backend_info	*be;
-	atomic_t		refcnt;
+	refcount_t		refcnt;
 	/* for barrier (drain) requests */
 	struct completion	drain_complete;
 	atomic_t		drain;
@@ -359,10 +360,10 @@ struct pending_req {
 
 #define vbd_sz(_v)	bdev_nr_sectors((_v)->bdev)
 
-#define xen_blkif_get(_b) (atomic_inc(&(_b)->refcnt))
+#define xen_blkif_get(_b) (refcount_inc(&(_b)->refcnt))
 #define xen_blkif_put(_b)				\
 	do {						\
-		if (atomic_dec_and_test(&(_b)->refcnt))	\
+		if (refcount_dec_and_test(&(_b)->refcnt))	\
 			schedule_work(&(_b)->free_work);\
 	} while (0)
 
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index 125b22205d38..b0bd5faa3865 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -168,7 +168,7 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
 		return ERR_PTR(-ENOMEM);
 
 	blkif->domid = domid;
-	atomic_set(&blkif->refcnt, 1);
+	refcount_set(&blkif->refcnt, 1);
 	init_completion(&blkif->drain_complete);
 
 	/*
-- 
2.7.4



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 05:31:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 05:31:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158060.291183 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Ls8-0004xY-Q5; Mon, 19 Jul 2021 05:31:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158060.291183; Mon, 19 Jul 2021 05:31:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Ls8-0004xR-M7; Mon, 19 Jul 2021 05:31:20 +0000
Received: by outflank-mailman (input) for mailman id 158060;
 Mon, 19 Jul 2021 05:31:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Ls7-0004xH-F5; Mon, 19 Jul 2021 05:31:19 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Ls7-0002IO-9t; Mon, 19 Jul 2021 05:31:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Ls7-0007CK-11; Mon, 19 Jul 2021 05:31:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Ls7-0003c9-0T; Mon, 19 Jul 2021 05:31:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tI5YeWSngwNut+G2TysoJ23h6uCj0Pc7JaZqTA7Y5lI=; b=hx530vyxh+Uta7lzO0wuprBmdX
	mbu2RBwkf7EZk0RfJFNpfGM5F/nEjrG9A9/jBuSLQ1OC0B1ChtvoQTEcLrCEnm3Grlc7TsE9awuQk
	kskSKcWeV2Q5d/zZI35HNXltBkAsu7Yl3E7DzlxJQdfOxcWGHO+ogofTiG9pXhce4/Q8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163784-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163784: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-shadow:debian-fixup:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 05:31:19 +0000

flight 163784 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163784/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-shadow    13 debian-fixup             fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   13 days
Failing since        163327  2021-07-06 12:39:04 Z   12 days   21 attempts
Testing same since   163784  2021-07-18 16:50:39 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 10578 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 06:45:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 06:45:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158069.291200 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5N1B-0003xU-IZ; Mon, 19 Jul 2021 06:44:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158069.291200; Mon, 19 Jul 2021 06:44:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5N1B-0003xN-Fc; Mon, 19 Jul 2021 06:44:45 +0000
Received: by outflank-mailman (input) for mailman id 158069;
 Mon, 19 Jul 2021 06:44:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5N19-0003xH-Tn
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 06:44:43 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 36b35110-3fc0-4f9c-a803-59d83bfe1dd1;
 Mon, 19 Jul 2021 06:44:41 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2108.outbound.protection.outlook.com [104.47.17.108])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-26-T2JOQ0ioP4WHLt_SUKXvbw-1; Mon, 19 Jul 2021 08:44:39 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7150.eurprd04.prod.outlook.com (2603:10a6:800:12a::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 06:44:37 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 06:44:36 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0008.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.22 via Frontend Transport; Mon, 19 Jul 2021 06:44:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 36b35110-3fc0-4f9c-a803-59d83bfe1dd1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626677080;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=JKQ7LFynAitHLMqldOmFq2bwmJP/pDKzRdeQ2CVHO9U=;
	b=iKA2f0LkWjthF6zAnC9sFCDOlIIJAfENhdCa5UMZrhgvownihxWRC55BzL8d86f9fCf5zY
	BqIWC16Geaz8JUIg2yNibffROjkM4MXYsU7jDUFdMPniIlqEN6FFWkA5WXOJvg//uQgsL1
	uWWuiV+8CLC214fInctEPfrInOYe2+g=
X-MC-Unique: T2JOQ0ioP4WHLt_SUKXvbw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=bTynxhsd4PFmSjsVQQ+1RlQJOqWRUD2MsBkiyCgqwkYW7ReNVWPEX1ks43Exe2V2bXbtS3wHg7snyT2yI46ULKU80vkpZagaHNiJo4FC/WDfL9vPkMzYyOEtkvh77Zsiy4t28iR0IoE8kax30bORkUi/9ZldDd3M1PpLkyW5e4UIE/h5O7gsvsaAWtPuyUr7kv1+5RpOqg72HKMBw51OwkVlf5FWasqstx1/ypGA5wxcrFc9lZO56O7pmmXnyXk0H/WSk6OlfRLcEj2GBYC3FXlDY4egyJFNJrZFHnFqUwc27SpYwFxU4vVjWRcRkwpwIPMbcJs0MaWh9PATbb4thQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=JKQ7LFynAitHLMqldOmFq2bwmJP/pDKzRdeQ2CVHO9U=;
 b=kS8R+Jlaf7PbGiqxNtR6DJaxZI83Wg/Er1HOWzq/br7eSG/Ut8I4ArU3qmS/cBfl8aZukITMzY26hiKekrFCueee+X65ePzYZzJ01D7/+6iTodnLlphuGRCvMQmoaCpPokZhSnVl+f3T31cot1muL9FiyLiP4N1kZEYYoPbe79iU4T1r1XJn0jV6VXkR7rAlbMVHZZq3WKDvmh+6kXmg9+6iVtdLgsowGbhl3VsXslPBK1Tz/FHF9raBAdayabfsL6p6AwNknafUsScHDsrsqy4WTzcOxsdvYb5x7h/1tdTzDElDHPHFCNquctHn3o9Icq0FRI2U8XTydrExawvi8g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: Suggested changes to the admission policy of the vulnerability
 pre-disclosure list
To: "Charles-H. Schulz" <charles.schulz@vates.fr>
References: <87r1fzclw0.fsf@vates.fr>
 <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com> <87k0lqmmf8.fsf@vates.fr>
 <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com> <87wnpqm380.fsf@vates.fr>
Cc: xen-devel@lists.xenproject.org
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <14d1b95e-9d3a-8464-010b-d7796a26a8c4@suse.com>
Date: Mon, 19 Jul 2021 08:44:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <87wnpqm380.fsf@vates.fr>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P193CA0008.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d4237c22-a70b-4d1d-aa09-08d94a80aced
X-MS-TrafficTypeDiagnostic: VI1PR04MB7150:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7150AF343A99B1E17AFD15C3B3E19@VI1PR04MB7150.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	5vxcXjyq4PdDLzqsGYvJa9orI3ctqntKmJbi5kkvIqxq9FQ//0VB2owBn+WbSytxSlugFfb1ukSs0CeEZKW5yvZ808jm9KPLuiNx31rACMiFZn16ImKofMwFw/hBbKVsXLIwkS0cLP6P759jyuYHwg06B8kbZajsZowJzTyAfw3PqOoDK8glQYtX8UOrouXAKhGyw9qh4rQHiNPkK24m5roElwddXA19oykew1fcGcB/h4QOQKgvG0ZVfwZaWLTNyjVyAWTZD3x+kQQAqrQqRAQQSDjGWFO3e6C4BTQljMHUbTZJTD1rCWOhAnsf99G1s30Ou+3IzDZhRwVLxhoq2iOt/Vv2QePHTV9wtpV/nvc63ZIjq29nJy25Ui+wWNFygsFDX5Imt6mKWg3HdIefxzC/sgCEiQg5xH6Th+Y2j4eYFA2uH2DychJF64i7hhsINcqM8rwfGiZHNSN5nv87rGXZaoKCAFZmX043PR/MMmvU8Up1m7VVdmp/P6Ftrwg+YLCfrZr88el7NhMcfF3vSwEN26KwrB4gwptCnCjtIxuNnDvkAnaYPikQmi3eHLGoE1Dx33n7sFBR1UQ+GDITOTDbIgcMj1pg7Get5ZQrCOQ/G+EBtg6cWEcfHU4enusCMWHJbw99WAzZh2Ec95HkY2Zt74bPR0iP42/mTWYF//SFa+regMnLbktaJ2eqaHjKxIKbwlWcZhSPdNImB/z5KMDJrHON1KEO12o7lbI/eOSYn36D4Gk8GhnPgrX5s7tEQAalpvsBsFtT7N/HzUxL6uMG0HUwFZ7eBhBfn9vT2OhGYoN5whBBbtVXlL6glJ00
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(376002)(396003)(136003)(366004)(86362001)(66556008)(8936002)(26005)(316002)(36756003)(31696002)(6916009)(2906002)(5660300002)(966005)(16576012)(66476007)(66946007)(38100700002)(478600001)(4326008)(83380400001)(53546011)(31686004)(2616005)(956004)(8676002)(186003)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/A?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d4237c22-a70b-4d1d-aa09-08d94a80aced
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 06:44:36.8381
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: BrznCIXV2A/ZqIzXZ6dG+79I2RLKrEL1i8Daz9p0m08xXtPbR6atW3ilYsnXmmomtoSLFT822m74DrNk32EJ4g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7150

On 16.07.2021 22:08, Charles-H. Schulz wrote:
> Jan Beulich @ 2021-07-16 17:21 CEST:
>> On 16.07.2021 15:13, Charles-H. Schulz wrote:
>>> Jan Beulich @ 2021-07-16 09:52 CEST:
>>>> On 15.07.2021 23:23, Charles-H. Schulz wrote:
>>>>> Hello,
>>>>>
>>>>> I /we /Vates would like to suggest some changes to the policy regarding the
>>>>> enrollment to the pre-disclosure mailing list of the Xen Security Team.
>>>>>
>>>>> We have had some talks with the French national CERT who has a need to be the
>>>>> recipient of such a list. This national CERT -and in my experience other
>>>>> national CERTs such as the NIST for instance- is in constant contact with a
>>>>> large Xen userbase that is mostly made up of large parts of the public sector
>>>>> as well as critical infrastructure operators belonging to the private
>>>>> sector. For confidentiality reasons they cannot disclose who uses Xen and
>>>>> where it is used nor who may be using it internally or within the related
>>>>> national cybersecurity authority.
>>>>>
>>>>> Because of that, their request may not be clear or matching the existing
>>>>> criteria for inclusion in the mailing list. National CERTs are trusted
>>>>> actors and have historically been among the very first entities to define,
>>>>> advocate for and put in practice the very notion of responsible
>>>>> disclosure. Much of the current practice of Open Source projects in that
>>>>> regard actually stems from CERTs. As part of their policies and processes
>>>>> regarding vulnerability disclosure, the notion of confidentiality and
>>>>> documented, waterfall-like processes of disclosure is play an integral
>>>>> part of
>>>>> how they handle informaton and publicity around vulnerability. As a result,
>>>>> national CERTs (and the French National CERT) do not spread undisclosed
>>>>> vulnerability without following established and agreed-upon processes. Such
>>>>> processes include, in our instance, the ones defined and followed by the Xen
>>>>> Security Team. Compliance with these are the first criteria to earn trust and
>>>>> respect from the ecosystem and the downstream users. You can see an example
>>>>> of their work here: https://www.cert.ssi.gouv.fr/
>>>>>
>>>>> Part of the mission of the French National CERT is to work with
>>>>> critical infrastructure providers in securing their IT.
>>>>> This kind of expertise entails the securing of these information
>>>>> systems before any unforeseen incident as well as after the incident
>>>>> (incident remediation).
>>>>> None of the tasks involved imply the communication of zero-day types
>>>>> of vulnerabilities or vulnerabilities that are unpublished to the
>>>>> downstream users.
>>>>
>>>> Would you mind shedding some light on the benefits of a national CERT
>>>> being in the know of unpublished vulnerabilities when they can't share
>>>> that knowledge with their downstreams, and hence their downstreams -
>>>> as long as they aren't themselves members of our predisclosure list -
>>>> would still be zero-dayed at the time of publication of such
>>>> vulnerabilities? Shouldn't their advice to their downstreams rather be
>>>> to direct them towards applying for pre-disclosure list membership?
>>>
>>> In practice, most of the downstream users that the CERTs work with are not
>>> going to subscribe to the Xen pre-disclosure list, nor to any pre-disclosure
>>> lists of vendors or Open Source Software projects. The downstream users will
>>> work with CERTs and various cybersecurity service providers (Security
>>> Operations Centers -SOCs- being a typical example) in order for vulnerability
>>> discovery, disclosure, patching and later integration of fixes or remediatory
>>> measures be managed and applied.
>>
>> It feels to me as if you didn't really answer my question. You restate
>> what I understood is the current state of things, from your initial mail.
>> The important aspect "when they can't share that knowledge with their
>> downstreams" doesn't get discussed at all. All their downstreams would
>> have to wait not only until public disclosure (instead of patching their
>> systems - as far as permitted in every individual case - already during
>> the embargo period), but there'll be an unavoidable further delay,
>> however small or large. I'm having difficulty seeing how this can be in
>> everybody's best interest, and hence I can't help suspecting that
>> information might flow irrespective of this being prohibited except
>> _among_ members of the predisclosure list.
> 
> You seem to suspect dishonest or malevolent intent from CERTs.
> It's not a proper base for discussion. Therefore I'm not going to hypothesize
> on some sharing of information with downstream users which will actually not
> happen, because the behaviour you suspect is not an accepted behaviour,
> neither from the CERTs themselves nor by professional actors in charge of responsible
> disclosure and software security. 
> 
> Having said that, you are right indeed that the downstream users will not
> patch their systems before some time, usually because CERTs, service
> providers or software vendors will notify them or do the work for them. But
> that is how things tend to work unfortunately. CERTs act as their source of
> information and prompt them to act. One can find it a bit idiotic, and I also
> do think that both public and private sector entities should be much more
> proactive when it comes to their security. But that's another discussion. 

Well, if it's really (and intentionally) like this, then my suspicion
above would indeed be wrong.

>> What I could see is them acting as a proxy for their downstreams, but
>> this isn't what you've been asking for, and this would also mean much
>> more of a change to the policy.
> 
> They act as a resource center for their downstreams, but the information goes
> top down, i.e from the software developer to the downstream, not the
> opposite. Also how it entails an even bigger change to the list policy is
> unclear to me. 

For things to make sense (as you seem to agree with as per further up),
if their downstreams aren't to subscribe to our (and perhaps other)
pre-disclosure list themselves, the CERTs would need to act as a proxy,
in that they'd be permitted to relay the information before the embargo
ends. I didn't think there would be much of a difficulty seeing that
this would be more of a change to the policy.

>>>> As to the actual policy - how would you propose to categorize such
>>>> organizations, i.e. how would a new bullet point in the present
>>>>
>>>> "
>>>> This includes:
>>>>
>>>>     Public hosting providers;
>>>>     Large-scale organisational users of Xen;
>>>>     Vendors of Xen-based systems;
>>>>     Distributors of operating systems with Xen support.
>>>> "
>>>>
>>>> look like in your opinion? This is pretty important imo, as it will
>>>> need to be understood who else might then become eligible.
>>>
>>> I think it's either a very difficult or a very simple question. If I were to
>>> suggest to simply add a line with "national CERTs" meaning: CERTs that
>>> operate on behalf of governments for the protection and cybersecurity watch
>>> of national administration and critical infrastructures" would that be
>>> accepted? I'm happy with that one. It's really two criteria I'm adding: being
>>> a CERTs acting wth a clear mandate from a national authority to serve as the
>>> national computing emergency response team. Not sure how satisfactory that
>>> is.
>>
>> So what if some entity acted largely like a "national CERT", but wasn't
>> called that way?
> 
> The what if question is not a valid one, as you are either recognized as a
> national CERT (there may sometimes be more than one) or you're not, by
> regulatory approval of some sort.  Nobody else can claim they're a national
> CERT.
> You can be a private CERT, but that's out of the scope of my request. 
> 
>> The present items on the list try to use pretty generic
>> terms, while your suggestion is pretty specific.
> 
> So how is that a problem in our this specific instance?

Why would we exclude private CERTs? I could easily see there being
countries which have no "national CERT" (for a variety of reasons),
with some private / non-government organization jumping in.

>> I'm further afraid that
>> "a clear mandate from a national authority" may not provide any
>> justification at all, depending on (often political) view points.
>>
> 
> That is factually and legally false. A national CERT, just like a national
> cybersecurity authority, is appointed by law or decree in a country and it
> does not call for any justification not anything political. It is part of the
> administration of the country. In France, CERT-FR is part of ANSSI, itself
> part of the National Security and Defense Directorate (SGDSN), acting under
> the authority of the Prime Minister. In Germany, CERT-DE belongs to the BMI
> (Interior Ministry). I believe in the US CERT-US operates within the NIST or
> the DHS, etc. 

There is very much a political aspect in here, imo: "Appointed by
law or decree in a country" can be against law in another country.
Knowledge of vulnerabilities can be used not only to improve
cybersecurity.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 06:57:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 06:57:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158076.291216 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5NDS-0005fK-Pc; Mon, 19 Jul 2021 06:57:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158076.291216; Mon, 19 Jul 2021 06:57:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5NDS-0005fD-MG; Mon, 19 Jul 2021 06:57:26 +0000
Received: by outflank-mailman (input) for mailman id 158076;
 Mon, 19 Jul 2021 06:57:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5NDS-0005f7-0R
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 06:57:26 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bfb15152-ff48-4bf3-b62c-6f2b49aba3f3;
 Mon, 19 Jul 2021 06:57:24 +0000 (UTC)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2051.outbound.protection.outlook.com [104.47.10.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-40-tpQwcJvZNtmZNvdQmIm_Jw-1; Mon, 19 Jul 2021 08:57:22 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5902.eurprd04.prod.outlook.com (2603:10a6:803:ed::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 06:57:21 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 06:57:21 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR04CA0103.eurprd04.prod.outlook.com (2603:10a6:208:be::44) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Mon, 19 Jul 2021 06:57:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: bfb15152-ff48-4bf3-b62c-6f2b49aba3f3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626677843;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=fsOJPk43X+/SkGFLXa5zYu8a4ypDo/757j3yAEj0ocI=;
	b=MIvE8ig5w2mgmuqqqvoT31iuBH3wo3fcMPpY5DEJVGP3cio4YkFSMKI5YfdhofsoaKvSKo
	gCY6kxf/pymZsmGjzPkzk2XT/waSuix3B6mWlzy5TGpCNZD2thkKlrfW8xBmqcUIB4A+mW
	M+k+u//7Mas7x3K0U8PzRaPHN9AVcqA=
X-MC-Unique: tpQwcJvZNtmZNvdQmIm_Jw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YhIDPtIHK5E4MIq+Hl3ksn34A/bbvcx7BJM5zms4hK7aagINv9YxWD4TRlwoBsvdrM4U+1XEId6ppMT7tspWl++N8RDF7DU9FhRrJ8uRfgvzkbe9JPxIymkj+C4xK0EIZt+09+ne9csJaN9SPtnE/vdODdx27cPdkSVJi/ZITrY3dK6PfR2soQ5TetPwWZQRv34kAGr1BpQH6Fky89WwCH89MlZzXdSWUt31FlZW11lmHQzu2MbVc1uG6evy9fLDE8fEpWH8fxPmIhd4JGsj7BgZ1fGTqe3xy1PaWTbOp+n2Gbu/J0I72XZFhETGpJyvf54I33Qpa3jdqna0kHUg2A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fsOJPk43X+/SkGFLXa5zYu8a4ypDo/757j3yAEj0ocI=;
 b=mqG8URYZVQ4Y1hq+sfRPnEB+5KMTKx/5EIHhLSbt0kGEi9BkjvPSJkVR8Gnmlsg/cAAiHeFtBK3FvYKa6vLL4qhiVTknrtMrJtAwlvrD5xuEqBP6n69yK/wrAgL8L7fOPl07rkFUt03M4LBBnW7DwDB9F2H91GX+A4dQkI7ANvn/6rvn9JNM3hXtXFE/mAAxt1vKOQ9Av1CYzzUCaS8pzwZ5GiHIszOkbwHdI/TkNM86+lNiH25ZaUjdYE4ZISHdiN/wqwr8Q/dIFnXcAlWle5vB3hulIwXnPf02HH4hmLlG437Eb++oLgoKf7azZDEvx4/7YGji943YONeVbgy4pw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v2] SUPPORT.md: add Dom0less as Supported
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com,
 george.dunlap@citrix.com, iwj@xenproject.org, wl@xen.org,
 Stefano Stabellini <stefano.stabellini@xilinx.com>,
 Julien Grall <julien@xen.org>
References: <20210714234809.30483-1-sstabellini@kernel.org>
 <04d06f53-4489-1a08-e744-fa36679a2287@xen.org>
 <alpine.DEB.2.21.2107161326040.3916@sstabellini-ThinkPad-T480s>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <7e511019-e9cf-dbf3-3c76-0391b8e4d2ed@suse.com>
Date: Mon, 19 Jul 2021 08:57:20 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <alpine.DEB.2.21.2107161326040.3916@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR04CA0103.eurprd04.prod.outlook.com
 (2603:10a6:208:be::44) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 89e138b8-0be5-46fb-ebce-08d94a82747b
X-MS-TrafficTypeDiagnostic: VI1PR04MB5902:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5902C07CBF073C58D8A0CB1BB3E19@VI1PR04MB5902.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5797;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	QF3r+bnumkmMUEvo9gUFNOFuaTHC/0QfEgDomkdRqJvV62w32fV6O/GemEjOAxsYCI/NhEPRp/12YXCKkPEwNnKW3eE3LpbSA/kyeukmCN4S5HTC7km6WswZDDUOWgOLHlxPcQmWGO1WAoM1AcOPeTzxxZsx+8O8rbppffW16c3HiXm2xdmOkZwRn8I8t6ioXFh468sy0DkUlpkBdi/Ijnd0ONft0WH8HlRyOF5H4Nd/Qbk395QTn9yeQT3wtmmWB51jYSytwUiIbLm5C4ApJwcM0fmDMwOEZO30To9VR4QlXmii7kr+Y7CWtl0w9KXun7ByGDnx5akfj9EObI9UrYVjs9tqfdnOTK7iBggRGfJU1uOhpM73jZ0VQbENuuyaKxcDaoYoLpF5quYm9EFFHiVak51doJ0lWovWzQMqEhZ3ZGdYrCfwQQ+wiPRW8jKZt2YAnkWMldU2gbvmb59Ojsq+W2IzSyXoggKZUza9EDqQpSifrRPjYL1dnpSqwuSXfTOv/njrfAMD7yhVRBGAdx/+bUebk1HxdJPE7n0Lg15COPXKxKaFZMXGvO7mIa5hpCHdU3c2VzswpiHBZ6hQBBbPaI6vBOiKyeQ7i6WaroLrYrUNLde/MMnAIMtDtUOExT36jx4oFUCY1WYnRJCV5+97e6i00tU3ynln/faThnuO7EXMjdukfOIOoUYbah5pUhkw21XPTjPHZYIY6QmWBKURjkZwThZMX1ezoHx/KyuLiRSp5co+Y9VTJ3mz9I0BgAgSVr0HjZl5DVwP0XVjMA==
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(396003)(39860400002)(346002)(376002)(31686004)(36756003)(86362001)(5660300002)(53546011)(8676002)(316002)(8936002)(66476007)(31696002)(4326008)(83380400001)(66946007)(66556008)(16576012)(6916009)(38100700002)(956004)(54906003)(6486002)(478600001)(186003)(2906002)(26005)(2616005)(32563001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 89e138b8-0be5-46fb-ebce-08d94a82747b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 06:57:21.1587
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: GpwaDzX2C6CQO6/DHBXxcLdm+GNd170XOLNXo/JsjTKz2FzIwc6XiR8CePzRwZBoGWyJByre42Hen2HVpecC5w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5902

On 16.07.2021 22:29, Stefano Stabellini wrote:
> On Thu, 15 Jul 2021, Julien Grall wrote:
>> Hi Stefano,
>>
>> On 15/07/2021 00:48, Stefano Stabellini wrote:
>>> Add Dom0less to SUPPORT.md to clarify its support status. The feature is
>>> mature enough and small enough to make it security supported.
>>
>> I would suggest to explain the restriction in the commit message (and give a
>> link to XSA-372 commit).
>>
>>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
>>> ---
>>> Changes in v2:
>>> - clarify memory scrubbing
>>> ---
>>>   SUPPORT.md | 9 +++++++++
>>>   1 file changed, 9 insertions(+)
>>>
>>> diff --git a/SUPPORT.md b/SUPPORT.md
>>> index 317392d8f3..524cab9c8d 100644
>>> --- a/SUPPORT.md
>>> +++ b/SUPPORT.md
>>> @@ -832,6 +832,15 @@ OVMF firmware implements the UEFI boot protocol.
>>>         Status, qemu-xen: Supported
>>>   +## Dom0less
>>> +
>>> +Guest creation from the hypervisor at boot without Dom0 intervention.
>>> +
>>> +    Status, ARM: Supported
>>> +
>>> +Memory of dom0less DomUs is not scrubbed at boot (even with
>>> +bootscrub=on); no XSAs will be issues due to unscrubbed memory.
>>
>> The memory will not be scrubbed for bootscrub=on and bootscrub=off. However,
>> it should be scrubbed for bootscrub=idle (the default).
> 
> With bootscrub=idle, do you know if it is guaranteed to complete the
> scrubbing before dom0less domUs start? I assumed it wasn't guaranteed,
> but if it is, then we should rephrase the statement.

Idle scrubbing never touches pages already owned by a domain. Hence the
question isn't whether scrubbing happens before these DomU-s start, but
whether they have their memory scrubbed before or while being allocated /
assigned to them. init_heap_pages() has

    if ( system_state < SYS_STATE_active && opt_bootscrub == BOOTSCRUB_IDLE )
        idle_scrub = true;

i.e. all memory given to the page allocator early enough will be _marked_
for scrubbing. If idle scrubbing didn't make it far enough,
alloc_heap_pages() will recognize this and scrub the page(s) synchronously
(of course unless passed MEMF_no_scrub).

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 07:04:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 07:04:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158083.291227 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5NKL-0007CY-L8; Mon, 19 Jul 2021 07:04:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158083.291227; Mon, 19 Jul 2021 07:04:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5NKL-0007CR-IA; Mon, 19 Jul 2021 07:04:33 +0000
Received: by outflank-mailman (input) for mailman id 158083;
 Mon, 19 Jul 2021 07:04:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5NKK-0007CJ-K0
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 07:04:32 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 90458790-e85f-11eb-8aed-12813bfff9fa;
 Mon, 19 Jul 2021 07:04:31 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2050.outbound.protection.outlook.com [104.47.13.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-15-o5pG4AyiMlGbHkfKLubRPw-1; Mon, 19 Jul 2021 09:04:29 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4608.eurprd04.prod.outlook.com (2603:10a6:803:72::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 07:04:27 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 07:04:27 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR05CA0112.eurprd05.prod.outlook.com (2603:10a6:207:2::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Mon, 19 Jul 2021 07:04:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 90458790-e85f-11eb-8aed-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626678270;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=PIuzFfhABiQv9iGsSDKXcKegJsrcfCTLxRL2Ms4iZ8Y=;
	b=kr7MCIBSlSiJUIkOaBnfiTd0BfkXyiSSPKKvyFsHNsDXwtno5vzhlps4REVPQ6GA64QVFX
	hulIJelyoIYHC4ZF+5VXHT4nAozWzTlS6SX+q3eGe7P3ih9Yum1ptrINFZqmdCISIPJPKg
	s3NzX+VpFNDixo3yDWX921RrJYHFObQ=
X-MC-Unique: o5pG4AyiMlGbHkfKLubRPw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=HVPwkArwgDU/3fq33W5LFiD6qllz0g9UKNK3eHS0qwsv0kBpgEjdndaRD546w7lXVdNFqxS026Xq30cjmfdwv0gvn6AK1lTRM1GiW4ZKg9/bs7EonqQ4i/I0hnajf7nDURrWnXLMgNcN/Dwb9PVz9BHg377fst8/VSKLr+lKjbpATOoBap/gty3ub50iefhEEVQSr7mZZq6xYwO7QwP88UAz62rJOvPKGpdxp9NNTiUbaCqQ70/9ebwVgcinsiMJa3gD3HdoZaFdVKoORn6xyyUjDW75AQe+KoVvaslD4ostKSAWXfOj4zoTHl/t+Mnf3M/9tI4R8F3/M8YI8+U0TA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PIuzFfhABiQv9iGsSDKXcKegJsrcfCTLxRL2Ms4iZ8Y=;
 b=m61XLntZHdKY6w+Vyv12Vs+92FsPL2t9YrviX8NecffjSYxziAMhQLsVYQHGfpm996yAKEU1ByVE9Gd0eMHguSbATSRIBb5ny6xlZc78k3veNLh5VRqEb9YcSYi67Wrm/o2pWYHQtrFOsFy7VKYrWOgHI64Gl9updIfkN0rXGKDdyEQFZw1BWlVV7DhVdIKBawBE3x0xOxb6VYb1QS/RpAXqP/DMA7HnyHF7M5/WK9SkCNgQQ6kJOcKPyucuTx+TvyJ0GqfRgmYbKa2jFx16BmVT9scg38B54tTjhtvvI+hchGIUrqkOX47RdGELq/xOjKjNWs4gO4WNQMU4ZKYDiQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [xen-unstable test] 163782: regressions - FAIL
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>
References: <osstest-163782-mainreport@xen.org>
Cc: osstest service owner <osstest-admin@xenproject.org>,
 xen-devel@lists.xenproject.org, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <6f3dfbdf-e5f9-f1fb-4cd9-a42adee73e30@suse.com>
Date: Mon, 19 Jul 2021 09:04:26 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <osstest-163782-mainreport@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM3PR05CA0112.eurprd05.prod.outlook.com
 (2603:10a6:207:2::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 34ed97eb-7512-4024-1ba5-08d94a837269
X-MS-TrafficTypeDiagnostic: VI1PR04MB4608:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4608EDC464C0ED3971F20A84B3E19@VI1PR04MB4608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	r5aC7nJ1968zG7KBwC0T5tZQu5ecskTby1K1G/6X+g6q503xOuLSGKiUoVZn9iXgFoFqrLwSbYF7LCwytu9DKunSWCHw5BhxHXh6sgnAj3J+UzcPA8bG9M/hP9beZVVdYbPNHqR9TOedZWGvPtngGMWo61/RE7JZn1Ir3AJe8tEgiVYNs1I/OyTTfU5dYNYeI0ANrp6jRC1MSFYeG3PNIUj+l5QruepBPV3ViX+lEsrIQDWNUMjOCfMB5/r/tK4nt/4QXU4L5uhZIpoyzmGylh7kPKYs9O7ycTlUDrMeddISvzwQOX5d2U0nwP+LJcks8CroRX2+3MJRZu+zFiOhEEgBZfqmpAk+cZE6cLLwLOQKexBO7wuOqaPsenfbbJbG5zV9TyGGG59lAEg3Hv+UIDKLif2sC6281nHstChhfV07ybq6ceowiGKLSKnLVU+XYAL1okRYVdyjv66Fgf1GOsa1BtNv0csi+aB7OcjYrASZu0v8T9joJQHvt8pgTY7gvy9jukJG9Ej5u40awxWVR4Tdw9eK/YesbiFjfUpzuTQ2OIJGmkmyzvzDcVsDb2mZqI+IDsoQcn5Leq3gTgCmzWkiDOgAov7uiIOw+15AGr9C6rpDxDQ0bo+8tFGPgrNL4np9q+2bEsacOHCfD6H+aT+5z+coWBZBdxjwJOVgM/GL373w9XpXj4pKgf0Eh8WQTFGMfJEX/kHRdGmA73Agn0hbBGi9bcDT6qzUNfJ3/HuukWmx8eDanmlg3VlDGH5CJPRLOZSpauy58mC/y+NDnxOD31WDmDX0ohO0THWn9daMjVGHI4ylqRd4UWcM3MCw/i6N+fBWJ6FksyqR/dXSesCtEocn0kzz1sFwQqntFR8=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(346002)(376002)(366004)(39860400002)(36756003)(31686004)(86362001)(5660300002)(53546011)(8676002)(4744005)(8936002)(316002)(66476007)(31696002)(4326008)(83380400001)(110136005)(66946007)(66556008)(16576012)(956004)(38100700002)(54906003)(6486002)(478600001)(186003)(2906002)(2616005)(966005)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?uo7ZbEmaItRylP/3DBSjzm39xdMkXYgUbdf1WkQ?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 34ed97eb-7512-4024-1ba5-08d94a837269
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 07:04:27.2326
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 295U5c0XXTwzdhEwUNglf4nlqQhGS1A7CQxChh6R8wUXzrLqeUwL9WSHBYUDam4C1ONVRUogwBJ4rqq7Sku/XA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4608

All,

On 19.07.2021 04:38, osstest service owner wrote:
> flight 163782 xen-unstable real [real]
> flight 163791 xen-unstable real-retest [real]
> http://logs.test-lab.xenproject.org/osstest/logs/163782/
> http://logs.test-lab.xenproject.org/osstest/logs/163791/
> 
> Regressions :-(
> 
> Tests which did not succeed and are blocking,
> including tests which could not be run:
>  test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

as Andrew has indicated to me that he cannot predict when he'd be able
to look at "[PATCH] x86/AMD: adjust SYSCFG, TOM, etc exposure to deal
with running nested" [1], which I expect will take care of this test
failure (preventing a push), would anyone of you feel in the position
to review that change?

Thanks, Jan

https://lists.xen.org/archives/html/xen-devel/2021-07/msg00891.html



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 07:10:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 07:10:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158089.291240 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5NQP-0000Jm-DR; Mon, 19 Jul 2021 07:10:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158089.291240; Mon, 19 Jul 2021 07:10:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5NQP-0000Jf-83; Mon, 19 Jul 2021 07:10:49 +0000
Received: by outflank-mailman (input) for mailman id 158089;
 Mon, 19 Jul 2021 07:10:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5NQN-0000JX-MO
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 07:10:47 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6fe16bf9-e860-11eb-8aed-12813bfff9fa;
 Mon, 19 Jul 2021 07:10:46 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2174.outbound.protection.outlook.com [104.47.17.174])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-4-t1BV5ejkOcCmI1G8uWslSw-1; Mon, 19 Jul 2021 09:10:44 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2447.eurprd04.prod.outlook.com (2603:10a6:800:53::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 07:10:43 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 07:10:43 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0063.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::11) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.10 via Frontend Transport; Mon, 19 Jul 2021 07:10:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6fe16bf9-e860-11eb-8aed-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626678645;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=SyQgzOnIUjXdhmxb6wpxYKEHumnjdeu8L4FUM7OVOd4=;
	b=J6ba6pwO6CBfnAoS4QpWwAvTaIHqmSM2hI801Y9+W4mhDwBjVCHy4aF8cofGjonpneW62z
	GHiw040FiN/0ZzhRLswy6PXpLCLY7QtpndQ3fWG4GbBjDzzCbbeLuiVr5gCWBQ+VqkRSe8
	QublXJRTETNK/vITiFcWaSXQlAllOq0=
X-MC-Unique: t1BV5ejkOcCmI1G8uWslSw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Pmo/KAMkpML4PzgJAp3DtczsfbUipto+9Irksis3Bpgm+A2DOL4/LPUpwHTOP70W29O6qmxJOiE+otiz2jMqBx3Eaphn34+7/jS7EngHFRfCqKO/pgr2pO0W+B8f41nc6dnrzUZiNS5kF45rmJtC+/Dc4suOcxZ3Op5V6XutZCmilk5MjZniD5LY/9kVC2wCcXYqDIkhE+23e/8RGQ9w+Ztf5mi78i2938PNg0OpTobsjlcUwfurFkYuyaAzHU8w3N8fq5PkL5saK0Hl6JnyGtxs5ZFNxt/xeovWetC4y2ZnIgjtmJlhhnBKqox2xzgMgcJjSrpO4qzTjEhkZjtYqw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+ZA7WXWbDJuoWjc5G8umeqqz7ySAoacDJDJkAK5Gn+I=;
 b=NG86/B3AqBiP/kfUkwbZ3md1+B6VaAIMfVQt6WCl2H3RO8ey7K0QW6FJRvbeVvkPdCG8NQ1w9yPwtsiPW6KG4YOAs4FGuqPaHEWNFz3ZfqzLvL8L13W8YUcElOmZUgaDXVnXA6xIXDV30uwP97fDhuX3j9l+Kfid0vav9YSM58vg7RbllkayffA/+obKvpQh5m/953MdX0E9VWfGe+fAaVpilVDQhcqTvWlm7WTOa0iyNV+kqE4/PrHC6scZVKB/L7rNoemPSuPae8AaiLsZiscoVRqfosRUDyKf4BXwjLFPSHVhhep96LFMbDpKhgX9hmEFlXafM2duyJqtaqmg+w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
Subject: Re: [XEN PATCH] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Andrew Cooper <andrew.cooper3@citrix.com>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Ian Jackson <iwj@xenproject.org>, Julien Grall <julien@xen.org>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>,
 George Dunlap <George.Dunlap@citrix.com>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <40A28D22-91BC-438D-99C9-46DF6DA90A5E@citrix.com>
 <fc2e93b7-020d-1a47-b411-5220e8de74e9@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e54d031d-dd57-3dee-1aa4-9836854c674b@suse.com>
Date: Mon, 19 Jul 2021 09:10:42 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <fc2e93b7-020d-1a47-b411-5220e8de74e9@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: FR0P281CA0063.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:49::11) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: feb0777d-37be-4069-49e7-08d94a845273
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2447:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB2447AA9220C9D81D965D8B46B3E19@VI1PR0401MB2447.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	RfLINdQmAwMVlEc/ydLqtOEgY99W7HPKm7lfwG6dEIcdG7UKgJ3gdmr9dtLws7s/RodwH9lS2SHHLlu3ENQfVW3WZtTo9Rv1rUv+pxIdwMC7VfQmsRYsoHPrU6mBJuSwPsgOyXojrsIUfVWRKXPZcjlFJ2tEKJuPPzlPxzhWbBzQyomLLMmhUdIJTS1+7HbTjTJpEdzjTqAhW3lUf6v9uCHQ9p3Da6UFkrXiHdlgTNYlhUidVi7s+f0coKI/rO2R3lP/IZq7LuQVAYO62vPtjmsQ6Zn6LzvrJA/3/7h5ccMykmHulWGvtYfBbjJS/zEdrGezyq0JtpZVbOXaQGZ1/j1H7Uk37W1mQaYDobfmGVJqzNjMed1cMI2lGE4hUv/jy1V+rR4TlIhc9efYqkVi6o3j3eOemsaMNzBgiBPhFnYK4zw/MlCaEAloSgBeJwU7vA2i1+vRXQGGwUl81BcZNbDKoOGX6hk/SHi0KqVqGplcNiJVqkoCjyb39G5ao3xbstERkCLYAhVm5TZPWzMowRVSJ8oSVSxafwRhDd3iASpOLU6AfDNSjPqRPUKm2OoxbsZVdt0YZ83HUVyuzdh+QkpqEa/MV4HrZRscVY7T58LXJdrnZsvMQYF9nlwEZbxCLg32tjNV69q/C5sECikizP5bcq/xvm7ap/khzjBvEFMiQUek45gXvacWi7ZEFuKhQxo+mT1zbbkRrhBiFNO336hJJMmm/curepwwePpMUw4=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39860400002)(346002)(376002)(366004)(396003)(26005)(83380400001)(4326008)(66476007)(66946007)(54906003)(6486002)(2616005)(478600001)(66556008)(6916009)(956004)(186003)(36756003)(316002)(5660300002)(53546011)(31696002)(16576012)(38100700002)(8676002)(2906002)(31686004)(8936002)(86362001)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?AxaQHoaObLWj+13qDlPqkZ2XlPUs+WEkoyvrNj17CuE1njXe3kb3XsiF+XPk?=
 =?us-ascii?Q?B9mlaUzjShHOD5gqlanh+jD2AD4aVR2NXB7Jr1x1fT9hbUkN87U8KF7mIPW5?=
 =?us-ascii?Q?oDU/AEpxvb8v3SzkZy17nGdncKa6wRiAQ5ghQqUkND7tSqT3xy39HRe3UHee?=
 =?us-ascii?Q?k69HcFYmUcVtks81/e8yj1OyWSHcR1DAbZz5WpnmF8YEqYiKXCqWEwNJaJWz?=
 =?us-ascii?Q?L1kdTCNdBjunlM+EhrHVP0bVUVqQvSXi9EXzKYy+ouEm2+MWBAEsxApzw0cA?=
 =?us-ascii?Q?zRP7Z5tiik3q7ZCfTuaHnxj7rQl/PYdqCBB3OoWYJNGCE+z1tlJks7m5BPC/?=
 =?us-ascii?Q?DzphrDhrPcKdRhgOSioKLQlVa49iPB4tf4F5zCvgVevhhy2iAxJlsEOTB7t1?=
 =?us-ascii?Q?oz017RenoBrQksZCT6x6sVmU2LXp9HeFTIQ9GPaA7eV5c4XFKgj1vstqmhct?=
 =?us-ascii?Q?c1IqUl+wXqGkxO6lsilR6iGfdwYfruyO4nHEANbwDo0vIbwIm0uA0Kak/sAf?=
 =?us-ascii?Q?5v3+HJB7daP2xr/6VvFxucnSOuLQrjVhB1deIcy0Ie5dwNaXIs1OO0bSU6fS?=
 =?us-ascii?Q?pHsNyz/8d1O9uZu7ObdvwnU1yoEauX2rxEwbEnPnqVvdamUs8idqRy2IjvbT?=
 =?us-ascii?Q?88MdKjT2TU5Z8ON0R5khJ34XHGO7QHtcbzrOTO63Daqh8Z+CLzmCNgoFAz8x?=
 =?us-ascii?Q?f2LBUBi8a/0np8j4yeHX4L9DNMooHCkcWtxrup/s8SkniD4aLnJULCqI8JWG?=
 =?us-ascii?Q?0w1o55A223GCp3yL6gknL8LrWreKTBbSIJ82KXlyl/iu+S4vqibi9U1XdiYg?=
 =?us-ascii?Q?LCV1xFhUDXNpcDzDOZxi3Xlrx2veJlSPoCEKmvAzQULCeJ8Idc0JnuR2oPyL?=
 =?us-ascii?Q?vCOhKZwmcBH+0yKKJfcP4rdeoAsLAcPlnIBdL4VNhvvcb4m9Jc+htu3Opktk?=
 =?us-ascii?Q?CbkWm/VDG14HHjDfGLniMAGl9HrM9eH7PUvJzKD6Hs6bLPhwRZusqLySA6nz?=
 =?us-ascii?Q?8nlNA/ZbF3pyRxZ86uOGe+1uLsoAk2A21UuwOjvg8KpbYyGHP+PGEQ68MP+4?=
 =?us-ascii?Q?o9tNi7rGCJyeJBUisjWxdB3gdAqUz4D7H+8ms/9dhAGuc0zmAovIRau30c9Y?=
 =?us-ascii?Q?ShO7pVKa5bdWxjQKsJPeQ8BsfXcqIaSspJjj5POwGuZSRGWbBk2XmZpJro7e?=
 =?us-ascii?Q?olFlzBkISDVc0k1elYxHtxSWiEQX9+DBaS+wq7mr5pkH1VFQflo/SKOT98lT?=
 =?us-ascii?Q?xU/Jpye+KuTGWPEU/KQwhBAfmZ6RET5hgoitphSlkmb+LWwUkLFB7+H6kety?=
 =?us-ascii?Q?xzyaQnh/ih2YETrwvSlvuEQl?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: feb0777d-37be-4069-49e7-08d94a845273
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 07:10:43.0700
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RrbgzJmXgfiKqzdq1vvXJoo6VfCdul3Q+VcobKyMXl8bQPMMbYMlEDdtbGBTGT0UprDWfjIETJyLIU2uiIHr0A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2447

On 16.07.2021 18:14, Andrew Cooper wrote:
> On 16/07/2021 16:26, George Dunlap wrote:
>>
>>> On Jul 14, 2021, at 5:17 PM, Anthony PERARD <anthony.perard@citrix.com>=
 wrote:
>>>
>>> This will help prevent the CI loop from having build failures when
>>> `checkpolicy` isn't available, when doing "randconfig" jobs.
>> Hang on, just to clarify what=E2=80=99s going on here.
>>
>> =E2=80=98randconfig=E2=80=99 is setting CONFIG_XSM_FLASK_POLICY in the .=
config file; and then when the build happens, we error out because one of t=
he required components isn=E2=80=99t there.
>>
>> What this patch does is to make it so that if someone explicitly sets CO=
NFIG_XSM_FLASK_POLICY=3Dy, but doesn=E2=80=99t have checkpolicy, the build =
system will silently disable the policy behind their backs without telling =
them?
>=20
> Yes, but that's how ~everything in the Xen and Linux build works currentl=
y.
>=20
> What this new version will do is produce a config/build combo, with the
> config reporting that CONFIG_XSM_FLASK_POLICY was not active.
>=20
> This is a damnsignt better than the "old" way of doing feature checks in
> the makefiles, where there is no trace that the build system disabled a
> feature because your compiler was too old.

Disabling features at build time is of course no better than disabling
them at configure time. Instead, if a chose configuration cannot be built,
the build should fail - ideally with an error message clearly telling
people what the reason is and what they can do about it.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 07:37:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 07:37:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158128.291268 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Npx-0003JG-LW; Mon, 19 Jul 2021 07:37:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158128.291268; Mon, 19 Jul 2021 07:37:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Npx-0003J9-IL; Mon, 19 Jul 2021 07:37:13 +0000
Received: by outflank-mailman (input) for mailman id 158128;
 Mon, 19 Jul 2021 07:37:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5Npw-0003J3-Ao
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 07:37:12 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 20327603-e864-11eb-8aed-12813bfff9fa;
 Mon, 19 Jul 2021 07:37:10 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2058.outbound.protection.outlook.com [104.47.2.58]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-14-zJ4lnPopP86Jh281hNh-ow-1; Mon, 19 Jul 2021 09:37:08 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7150.eurprd04.prod.outlook.com (2603:10a6:800:12a::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 07:37:06 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 07:37:06 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P193CA0023.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:50::28) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Mon, 19 Jul 2021 07:37:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 20327603-e864-11eb-8aed-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626680229;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=rd+IwnqkPN9nngruGLx4u91bVvssuKeYnSnodNbnGts=;
	b=BweLN8kn8P1+pcOvOb+wubA7qke3toh6DM/vQBMxUN8d3x7hp6te6yj5VuAjRU+4ntGYWn
	KiPauK4xaVkBBBC+0l1zBHZQcF7ByvXnYASRmG7ENW4iTuU7KXWWM7Nr0PnsJpIrNUvrJm
	ylfEPPfnlRvkKTyl9JQeOwmMOLWSLDc=
X-MC-Unique: zJ4lnPopP86Jh281hNh-ow-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=SAs+SARBxj29DMB8tBk2TSH7UjQs0BmN/+B11p4xqiH9yns6d9Wdqk/U470apDBzzz9qfJg+qoCsKk9gWbOypPuzF3H7mFqhdT9/cIJOrh9b0aNcE54l60A6Z5SkKU6OvZogCaUGQzFkInM9nIQaU0Fy7VQtBreIpqwqgzIIfX5nIgP2XX+xwSdxbSqsVeNC3rCVePLx+W2bL6ZiIeQK1JVacfgKN//Ci4Ve8Zeq9nSO+xo8gBQMdBDg32p/gRA/ARuWfuNnGeh9tRZ1fiHAx7TZfFeXalNS3BTHxQ6c8Lgj19GlKki6y2q7KU/O0a2NOwlqpO/G0ZG2YvfQrM+V+g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6e0nm1lyd2BQOWbe6B7Q1v5Kbuu4y1w05G4kiBgJpqk=;
 b=gxTSlgt96gQY/9CXUGkJbiQRDUbEJ1xnrdbUPbZP+zvE11h9X9NesJdVwk1vAfGmAfMWG/u0v9Qv9g6EsQaCrsoqyqBZcBKWfTFPmW89bc4smlC11Nw1eLC29cjEt+RHzgQdPhNXqJOlzNmpHZA59eUkhJmJFfTKS2Awusiczkh6FKtGcpCRrvMaoRF1/Nw4Z/b9kDa+tjA7kh2+bEwWT5XndB/v3IEv3a5r9aMtQaIud0SUmKsEpNNFH9feZqxsDSmgh8Xhfoz9VrHUrpXHny1h7sDL2Qw8hMaEZIjFESroh5RaLqmr66Y/sFXFsS94HDFfrtndDDjN2TQqhJtnOg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Anthony PERARD <anthony.perard@citrix.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <20210716123812.494081-1-anthony.perard@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <aada0028-ff60-9f59-5d87-a023ecd35d11@suse.com>
Date: Mon, 19 Jul 2021 09:37:06 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210716123812.494081-1-anthony.perard@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable
X-ClientProxiedBy: PR3P193CA0023.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:102:50::28) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b78fb4d3-7d7e-44c3-8230-08d94a88024b
X-MS-TrafficTypeDiagnostic: VI1PR04MB7150:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7150C9F4CB4964328DB930E3B3E19@VI1PR04MB7150.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	c9s8rYtFN4vs9clgomC6doIEerF3ZyKPeDrYFf/W8BF1m4rvnDG7Ta1OX4nQF+J1ite+379FK0Joe+EpcxGJF6B5T3SM0oSegKr2tJDaF/tqzRsoR7ZFziU6zrMPmvfARxQiQcJ/WL6ekzS05Qr9mhrkVh+x0P4Jix7FjRTNE3TOAOltnY4dBfGdLpHr79NP6RZYS9b7MpW17UiwPKoMc8QY8Elw0WHwFMqJ56g76ggeNxcvUvpslfam07LdVJjCbq7ypBrwGUx+aJkt6CeTqygR6Pmu44KUWdJazuvjPNTaKUshaU9sQ52rLf06m/ou92SgV9kYcZDJvfq9+QIrLN7E4CKRtMbf1lrjoTtgZbbYn3cFcrFyyKyDv6g6JHD2V99iDcnOosUALfilHe9LZVa3rIQu6Y4CZo/+Vn2LRY87eNd41ZmRGekOfi1pan8kQ0S3qfZBmap0AqfDxeNMUF8K2PWzeLuqzGpEoUURinNaqLSAVBzdF5lHXOWWCd5rH+3MIuqEDJKPhKoGwr+nXW8OfkHjrIshzYW2/e7JKZi/6qola8K/Nl2UPdk5giPHbykttv9VLsKR43uNxSgsBf4Av4b0nhkxBjBMj/E6tLEhN1O+SNO/EbgKLQ//Gfzu62BWnizSw5/2IPbBUmCC0sxealOXq643nJ3Q5TV1AOeG4RrXdgnZWgOr5RBmjlXt30d3QYB0ytJy0CS386EB2oGaxj9t0vq1z7jahsjzTMU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(396003)(136003)(346002)(376002)(31686004)(4326008)(83380400001)(53546011)(956004)(6486002)(54906003)(8676002)(186003)(2616005)(31696002)(36756003)(8936002)(26005)(316002)(66556008)(86362001)(66476007)(66574015)(478600001)(38100700002)(66946007)(16576012)(6916009)(2906002)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?us-ascii?Q?yhucSkk8+w5qiH0t8vnEukZUGu9UCUHW1jW+W3iCRofxevKVtEMeyXCsoecM?=
 =?us-ascii?Q?Wh6diBifQgQ06+rehGUPsomIyzp7wKMskGvbEGBaymE9oElhL67kg3Vp9cn9?=
 =?us-ascii?Q?vOXCyfEgb//WcnKAz+cnQXDVEhuyBXLkUAkIq4F5kmI25Ko2N/9QJ2OkdGye?=
 =?us-ascii?Q?+HLmKX4T1pCizdW4MIMVQuKZyMPu/r//sj4vBfGrqa4iy88E26w8G4D07tZv?=
 =?us-ascii?Q?L9Wza10Qyx2H0nWkC65LsK8fR78ci3OqffJPkrNseA9GRoWWIsk013hswXVK?=
 =?us-ascii?Q?2dzS4fZI40o2kAzRxgjnlq0tULO18MbBvNS+edTswhDcpKt8nUKhdB9eumDQ?=
 =?us-ascii?Q?LbVsvKFiv0cTTqLDf1sIMZCRy0j1dfI6yM6rpkoTWxZm9XfXFAc+d8ZYmZuw?=
 =?us-ascii?Q?Q07/22ykVuqJ+bIOWwQ0t7Y2JZRf9PF3/XOQuy5V6UXXXFIB26CB6x0M7rQu?=
 =?us-ascii?Q?rLvwRJWUvf3x/TwC/xbUPCMz46T/F2HGKmg7B+vDkwK9+UvgcMTgHv2BXw5V?=
 =?us-ascii?Q?IYZCbUpXHd3dLFhAdr0T098mbk1jBJdl6xAFrsn+/I84rNUtokZ0hivYZuev?=
 =?us-ascii?Q?XM3Jazi0+S8bP5KDyrhHX2i/SVGzCj9gj5BOkzgHER7pjV/hd87RyXQNwBcs?=
 =?us-ascii?Q?uCJQy2mozU0KQCI+u3uwtHfwLb0S3x52vusMltYzYVmthEgS/5NORrAoZTpy?=
 =?us-ascii?Q?xwBHatPJSqsBI5aAaPnzbYsLo8jImYYr95I63WOqw/OnPw5LMJJ/+9TRv/pG?=
 =?us-ascii?Q?RDqS/kUyO6vCetyU+LTDCpHXVTw3akBBn9vY/Tn+vaBAzfl2mDs87DxvXzo7?=
 =?us-ascii?Q?787eBJVAiggT3dgiYXhnly2AGYk0t+XgXAyoINgCNk9CUIc6T33mUgYb45ch?=
 =?us-ascii?Q?w0tyA7nYWqlZI510YBbOFbkD3anuPb7bbrTTg/NUtU2ONcJo26xewellopFG?=
 =?us-ascii?Q?sfV7iQ9seZrreAy/IRhJ1ffeJ0GTZrNa0vAIaiPnHKFgYFcEVCJDW8Ufc6DS?=
 =?us-ascii?Q?ADIgT9VXpGLaOpN4L+s6tT4+HsP5qSqCm+YSV7AxD2p8KsatwSNk4CdJF7nC?=
 =?us-ascii?Q?y3DDTTtiXiQEofoalszYKSHjnHfZQQiP96f4nYOiR5xS+16gPXPs8Vy+3JZ8?=
 =?us-ascii?Q?F/wYzKlfN5xcCjtZ5oP1YEFk2BGfgxgTQIs/wN6Po5hrNzNgWDaCN9v+BZyu?=
 =?us-ascii?Q?xRCOWHWUNbLv4l4EBo8vLMfZFr4SmXxw/ckcaLaSpVSbPpLRNIMNOf7aJRNZ?=
 =?us-ascii?Q?PhJqfrDHK0u36B/kvmIxCgqrvKfscHVYEfb1Ypru6EREXY/Ep+DO6AHQNsB/?=
 =?us-ascii?Q?DmsmVpXjPpDCfJF4o6TnMgD5?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b78fb4d3-7d7e-44c3-8230-08d94a88024b
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 07:37:06.5225
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: p8U8NOATvyddeZVmVGe94FC5B4QTJKQyONmHCiYbeRjoLzRuPlkMYsrp2HTl/L9DjYYwioD0Br5ViwplnBwAzA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7150

On 16.07.2021 14:38, Anthony PERARD wrote:
> This will help prevent the CI loop from having build failures when
> `checkpolicy` isn't available, when doing "randconfig" jobs.
>=20
> Also, move the check out of Config.mk and into xen/ build system.
> Nothing in tools/ is using that information as it's done by
> ./configure.
>=20
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> We might want to have a new Makefile for this kind of check that
> Kconfig is going to use, just to keep the main Makefile a bit cleaner.
> But maybe another time, if more are comming.
>=20
> v2:
> - move check to Makefile

I'm afraid I don't understand:

> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -17,6 +17,8 @@ export XEN_BUILD_HOST	?=3D $(shell hostname)
>  PYTHON_INTERPRETER	:=3D $(word 1,$(shell which python3 python python2 2>=
/dev/null) python)
>  export PYTHON		?=3D $(PYTHON_INTERPRETER)
> =20
> +export CHECKPOLICY	?=3D checkpolicy
> +
>  export BASEDIR :=3D $(CURDIR)
>  export XEN_ROOT :=3D $(BASEDIR)/..
> =20
> @@ -156,6 +158,8 @@ CFLAGS +=3D $(CLANG_FLAGS)
>  export CLANG_FLAGS
>  endif
> =20
> +export HAS_CHECKPOLICY :=3D $(call success,$(CHECKPOLICY) -h 2>&1 | grep=
 -q xen)

While the setting indeed gets obtained in a Makefile now, ...

> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -235,8 +235,8 @@ config XSM_FLASK_AVC_STATS
> =20
>  config XSM_FLASK_POLICY
>  	bool "Compile Xen with a built-in FLASK security policy"
> -	default y if "$(XEN_HAS_CHECKPOLICY)" =3D "y"
> -	depends on XSM_FLASK
> +	default y
> +	depends on XSM_FLASK && "$(HAS_CHECKPOLICY)"

... it's still used as a Kconfig dependency. This in particular
does not address George's concern about a setting silently getting
turned off behind the back of the person having enabled it (and
this could happen at any time, not just during the initial build,
where one might still remember to diff .config against
.config.old). The minimal thing imo is some kind of warning then.
Even better would be if the setting was left unchanged and the
build would fail; a solution for randconfig would then still be
needed of course. If we wanted to go this route, a tristate type
for the values may be unavoidable, along the lines of what J=C3=BCrgen
has suggested. I wouldn't think of a global override though, but
a distinction of the origin of each option's setting. This might
be as simple as y vs Y for "positive" values and "# CONFIG_...
is not set" present (for visible options) or absent (for options
the user can't control) for "negative" ones. But yes, this would
likely be an intrusive change _and_ it would not be clear how to
transform existing .config-s, so is unlikely to be suitable for
the immediate issue at hand.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 07:46:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 07:46:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158154.291279 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Nyh-00052B-Ls; Mon, 19 Jul 2021 07:46:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158154.291279; Mon, 19 Jul 2021 07:46:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Nyh-000524-Io; Mon, 19 Jul 2021 07:46:15 +0000
Received: by outflank-mailman (input) for mailman id 158154;
 Mon, 19 Jul 2021 07:46:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5Nyg-00051y-JU
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 07:46:14 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 63408da2-e865-11eb-8aed-12813bfff9fa;
 Mon, 19 Jul 2021 07:46:12 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2057.outbound.protection.outlook.com [104.47.13.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-5-r5wBzxIPN-Ovx1y1dc3ySw-2;
 Mon, 19 Jul 2021 09:46:10 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2334.eurprd04.prod.outlook.com (2603:10a6:800:29::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.32; Mon, 19 Jul
 2021 07:46:06 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 07:46:06 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0047.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::18) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.13 via Frontend Transport; Mon, 19 Jul 2021 07:46:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 63408da2-e865-11eb-8aed-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626680771;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=6mL306FYP7Ry+mtp7PqTn/55XpmoS+G2PS5W7c5Tbv8=;
	b=ZatpjtCuC0juqtUPiq0XCBZVST1JItNOFlBMWjgXqG5HgeVn5iRB6P2qRzVCGsede4SxOS
	tdvy+A+jN38BSU1WJntakIPRVyTMa5ShasmzCLPeSepQQN4BU0OUC0gHwOKkwIxf0Uk7yI
	1mT/55Lrb8Vc1BhFF/pj9CrIC1jqWjk=
X-MC-Unique: r5wBzxIPN-Ovx1y1dc3ySw-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AL8QMfGref/tpNiMQFODw9bLyJ4uItVw5tPdTg2TTfowjFsjTggagK1tvchXXWFnUseB7zoJlQpSgizZByvigE1Jgr/nIonh9VhbQKsp0APVo43NDh68gx02TL7IYPbqKG/HzIsHh1ShZ00hkkAfDZm3C3ge5lRLbpoFy1Cj+y9n2QfE9ttZjg96/7FSRBeh4988JdaupiPg04kn2HXrPgF24ocF5ZtIZsnTLMqz4MJqhT5VoBPtXpYOUsCARPw0ww2LMNrySRfCG6q3mjEOJZfpIZ7VJB01hJvyoTNessWPMTlzadvGy0mpbT3Jc134rc0Wx0vjrYYlapRrUVTq1A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6mL306FYP7Ry+mtp7PqTn/55XpmoS+G2PS5W7c5Tbv8=;
 b=BpbOWdsTcaDp3CEjjZST6TIcFlNQ8smbmz+hgAefxuyP4KYhy+1oGMWOrKtMCcnJ/0pE/XNdXriu71xyfy43mCeRIF7Jh4w73Xh8xLfWTy7ORvxiaDesL39WBcswMWIlF3yK9ESYSGt5oG0KfZqKM57GrazgeqSiMlli8NYPobJgU7LL1znir48zQmxyAeWnMJo0DT0idaG5ZKQYjv8qJTAa0gBRDy9k3h6T/nJfEnU/o/mp4OLVUY9gTFU/bh+ZbfDV8GnN37DLB172PB3do4IlZZhMnu4BqKDdWGumCCMAi8kJOIhFh1k7oCkth+wkobGDyRcqLxa84ZMELimWug==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Ping: [PATCH v2 00/13] x86: more or less log-dirty related
 improvements
From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Ian Jackson <iwj@xenproject.org>
Cc: Juergen Gross <jgross@suse.com>, George Dunlap
 <george.dunlap@citrix.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Message-ID: <b77e536e-1113-6fc2-55b0-b6b4f7b91b18@suse.com>
Date: Mon, 19 Jul 2021 09:46:05 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <0bebfe8c-6897-dc8b-7fe0-9127d4996eb8@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0047.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:48::18) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0a68b36b-c50e-467a-7880-08d94a89443f
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2334:
X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB233414BFDF5F4F85358E04A9B3E19@VI1PR0401MB2334.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	wyVlmpketnzq1/Gxc9P0xYxysWtN3sQlX0pqg51RfQ++XEVrNVgTeoqYW46XwnKKUpeELU3zxCSWiTpaS+3qWp92Rq3ahu4baA1c7CeVZ6aZiIOiDcLovMK+ry39JW1hlNsJ1AgoPs32+VLBOal1AN0byIqJisnYpfoeBjUInrdjiFGPRbH6lLbwoi62aUmWoJBzjHLYpOY2qhVLKJjBC5pDTP7nW3VGLGuAkQMxcxOzUapIb81pyU740ftmwlvIeHH2FXO/0jcvuGYP9RxlZXbxYoVi4vvbU1xQauGByV1UusQiRt0qjhO1pNkLkCy7ZJCfv4EA0iSOKIpW7bNZoffJeGTUleYXGiFpWQC9dju5zOOxNAOcIkXB6PlhEsjXKlTWiZaeuzDd0Dfk/P/VsMn3bC5udU+50PJ7N49/yBTfzdy+i6100WQmfPvbeym1vY86a/3QWCgoL/pkU/1gietcJXz/L0+LwehsC2hQ5FHwF/dm2PGvO0mTSygwVzs0bFrO+AzwlZ5j+IrEfA2KmV2JjyRsbkLrmVi7tv7HJoJa7O7weo9ppzQurjPeLtLoGOk5gPwR+kedQ4ZpBnxXLqr3kjuG3a45uA6B4YIBCpRyVn2wyz7cRBcbgAk80ypzY8a4UHBvj+Ulxqc6+1J7IS7l/m8H9DGAJqRZNMbyXH8IVnzLWH6kY9moXuXj+HGM2y1U9pwXhKOGSlwM8yko0+3PI9FnimB+RCzA2vs7pedOTAiXC7UsANhmrA2etYBq
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(376002)(136003)(39860400002)(366004)(53546011)(8676002)(16576012)(31686004)(36756003)(54906003)(110136005)(478600001)(316002)(86362001)(26005)(5660300002)(83380400001)(38100700002)(4326008)(8936002)(956004)(2906002)(6486002)(2616005)(66476007)(66556008)(31696002)(186003)(66946007)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?R869kshVAG5SPPKx+esR3ffv/Vwpt5H0bhJNc48?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0a68b36b-c50e-467a-7880-08d94a89443f
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 07:46:06.6890
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: q/Dgpsw2m+IoJApLgUyQKCI8d5632CUSNg4gOj8D4Tr6nfD+xudF0jo1hIsVlOM395DhEDTW2LiwjV2R6voIfw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2334

On 05.07.2021 17:09, Jan Beulich wrote:
> ... or so I hope. This series continues the attempt to deal with
> the ovmf change putting the shared info page at a very high address
> (which is now planned to get reverted there, but the general
> problem doesn't go away by them doing so). There are further issues
> with truncated value, which are being dealt with here. But there
> are also not directly related changes, when I simply spotted things
> that aren't very likely to be right the way they are. And then
> there are also adjustments to the underlying hypervisor
> implementation, with the goal of making the returned data more
> useful to the consumers.
> 
> With these changes in place, a 1Gb guest which has "inflated"
> itself by putting a page right below the 16Tb boundary migrates
> successfully, albeit the process takes from some 20 minutes to over
> half an hour on my test system.
> 
> In v2, besides integrating 2 patches that were previously sent,
> there's one new patch and otherwise review feedback addressed
> (albeit there wasn't any for a number of patches).
> 
> 01: libxl/x86: check return value of SHADOW_OP_SET_ALLOCATION domctl

while I did get an R-b from Anthony on this one, but ...

> 02: libxc: split xc_logdirty_control() from xc_shadow_control()
> 03: libxenguest: deal with log-dirty op stats overflow
> 04: libxenguest: short-circuit "all-dirty" handling
> 05: libxenguest: avoid allocating unused deferred-pages bitmap
> 06: libxenguest: complete loops in xc_map_domain_meminfo()
> 07: libxenguest: guard against overflow from too large p2m when checkpointing
> 08: libxenguest: fix off-by-1 in colo-secondary-bitmap merging
> 09: libxenguest: restrict PV guest size
> 10: libxc: simplify HYPERCALL_BUFFER()
> 11: x86/paging: supply more useful log-dirty page count
> 12: x86/mm: update log-dirty bitmap when manipulating P2M

... all of these are still in needed of suitable acks (patches 8
and 10 have an R-b though, and are independent of earlier parts of
this series). Patches 3 and 5 have objections pending by Andrew,
which I did reply to verbally without it having become clear
whether these replies were addressing the concerns, or what exactly
the misunderstanding on either side is (and hence which, if any,
changes I should make).

Thanks, Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:00:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:00:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158171.291292 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OCH-0007nD-5x; Mon, 19 Jul 2021 08:00:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158171.291292; Mon, 19 Jul 2021 08:00:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OCH-0007n6-20; Mon, 19 Jul 2021 08:00:17 +0000
Received: by outflank-mailman (input) for mailman id 158171;
 Mon, 19 Jul 2021 08:00:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OCF-0007mw-PE; Mon, 19 Jul 2021 08:00:15 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OCF-0005Uw-Iy; Mon, 19 Jul 2021 08:00:15 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OCF-0005fs-9p; Mon, 19 Jul 2021 08:00:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OCF-0007rw-9H; Mon, 19 Jul 2021 08:00:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=lAAwTnK6ciq8VQ7Xkw6lgO8FvFaoo+VcckaUFCf5l+U=; b=MWifp80qVPfCRkYHqefQiF60hR
	Qm2388nXY1ptomNyqtv4Tvmk2rxvFRJAUBfrNGgUtyP5y1koCX8z1Vm5sB7nnMjExlOKHHTqXDivX
	drnnLuIdp2nhsv9LcYtFB7UqLEewFoZcXCuONqxhrTIfNIhuARJGKgJtKgrPAYh4iXRA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163796-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163796: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=16cb11a66adb5ebd1707c31c8f74acf79cd8bd6e
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 08:00:15 +0000

flight 163796 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163796/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              16cb11a66adb5ebd1707c31c8f74acf79cd8bd6e
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  374 days
Failing since        151818  2020-07-11 04:18:52 Z  373 days  365 attempts
Testing same since   163760  2021-07-17 04:18:56 Z    2 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 64949 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:05:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:05:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158178.291307 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OHT-00009g-Qi; Mon, 19 Jul 2021 08:05:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158178.291307; Mon, 19 Jul 2021 08:05:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OHT-00009Z-Nk; Mon, 19 Jul 2021 08:05:39 +0000
Received: by outflank-mailman (input) for mailman id 158178;
 Mon, 19 Jul 2021 08:05:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OHT-00009P-2U; Mon, 19 Jul 2021 08:05:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OHS-0005cI-Pb; Mon, 19 Jul 2021 08:05:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OHS-0005rz-DW; Mon, 19 Jul 2021 08:05:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5OHS-0004Nw-D0; Mon, 19 Jul 2021 08:05:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/oRLBZKoDAd+5BlGICYhKhNwpUvjmeBASuDX8N6BW68=; b=o6u7YybhBsH8lyj9s25s2hVRYR
	9F92U8AhKvkjCtjnxBYSGlp5BpSTcs8s99qBxUF8uTnRaZOfGuzCM/Qij3vfrzuT7Jbaxc901qdFw
	RoscijeA14+v4syQpz58+DfrcT8wTxyB2SCe5RcuUucycC26TPmUxBi1ZbJOD1kG2Ecg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163788-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163788: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-saverestore.2:fail:regression
    linux-linus:test-arm64-arm64-examine:reboot:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8c25c4476496b7136767c4023d1c08990167eaa0
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 08:05:38 +0000

flight 163788 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163788/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 18 guest-saverestore.2     fail REGR. vs. 152332
 test-arm64-arm64-examine      8 reboot                   fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     18 guest-localmigrate       fail REGR. vs. 152332

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

version targeted for testing:
 linux                8c25c4476496b7136767c4023d1c08990167eaa0
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  352 days
Failing since        152366  2020-08-01 20:49:34 Z  351 days  599 attempts
Testing same since   163788  2021-07-18 20:44:21 Z    0 days    1 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     fail    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978194 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:13:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:13:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158191.291322 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OPJ-0001mv-T8; Mon, 19 Jul 2021 08:13:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158191.291322; Mon, 19 Jul 2021 08:13:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OPJ-0001mn-Nr; Mon, 19 Jul 2021 08:13:45 +0000
Received: by outflank-mailman (input) for mailman id 158191;
 Mon, 19 Jul 2021 08:13:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5OPI-0001mh-HA
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 08:13:44 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 3a8ba816-e869-11eb-8af0-12813bfff9fa;
 Mon, 19 Jul 2021 08:13:42 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2109.outbound.protection.outlook.com [104.47.17.109])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-28-sAyLi2yVPs2F1FwM-fzhBg-1; Mon, 19 Jul 2021 10:13:40 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3934.eurprd04.prod.outlook.com (2603:10a6:803:1b::29)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.24; Mon, 19 Jul
 2021 08:13:38 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 08:13:37 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR08CA0010.eurprd08.prod.outlook.com (2603:10a6:208:d2::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Mon, 19 Jul 2021 08:13:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3a8ba816-e869-11eb-8af0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626682421;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=7wlrryVl5oMfC6OIKOxs/bZX6cHhJMtnOvHKqsGhxas=;
	b=i+TPrjOfpkW4cf16qmrXmxRv2WgtdAaJHXjRfbTfLhNWYrJX7jXMp44Pr4xvPrSkojSjyS
	L8+5PTjdMXcgafdRMO7fQBgD5ZgvyV/ADs/yw0/ACDQmA6L23oS79zu/iOMuBp4QsizH9X
	1i+2/LmR5oIeIC0t0r2FXIyepjHuE10=
X-MC-Unique: sAyLi2yVPs2F1FwM-fzhBg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Jlx9H5j7n2J1hQyXllB3mtPc4whUSB2ulBPMHREtHdjAO+SY/sK/a+SA9KD9ltdFTPZ0R/rKqVgk1Juc+wsiwmdQWP4hXA77sdQX/l6TcWxYBZT4+j4XH+xrV4aNDnZTk4PpGyISIkrpZS9iUoC3WIu50L/BVds/Ag4tyWWiiHiTLwGMLXb/bNdp1zuTQ5XU8X+QlCsRm9CkTLjKcADc48EjBi9TGWEvn6qIN1R07ffjcdmBhKhvNeo58WDocakd0e+mrWgG/PcsbVGiGTRwEg4Ri+x4aklKlvKQncY4TO6d3S/GfTrJ15sutl8RIXq3I1A3YnmoNaXNNDt1L1hMFw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7wlrryVl5oMfC6OIKOxs/bZX6cHhJMtnOvHKqsGhxas=;
 b=Ofdv5vZM/8VqscCvDZx3j0qWYhd2k0YJZGa6Z3C0d/MHbnGobn1SgFR76qenyv4Gwbvio/I+BI2hvhn74nt4ihvwhu39wWBCB6df3w15ApZimsnilWhzdjdnZqyw5PHGZYrhoGRZOl7sERAi7qsxcaFI3BH1RrAvfte5nDxnf9alCm0zKywQLteq6i+4PTdDHOci6paC3bFexXt+xulZ1BNWVfp7N097Qe7PB8FiAhdDzTE6NvLg9Bu4BchDagnmVzyGk1ZYLf698fAn3+lXIPFMKPIhC5+2mgWh+YrFgyYsXTRjAjhx3vIQ/mTGpC2weIg2K8leARB2N2gPi6kJOQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH V3 04/10] xen: introduce mark_page_free
To: Penny Zheng <penny.zheng@arm.com>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org, julien@xen.org
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-5-penny.zheng@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <d6962e4d-4121-206a-a60c-00c9074d898f@suse.com>
Date: Mon, 19 Jul 2021 10:13:35 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210715051819.3073628-5-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR08CA0010.eurprd08.prod.outlook.com
 (2603:10a6:208:d2::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 07d72968-420e-43d1-4dac-08d94a8d1c52
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3934:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3934752462C4F1A9A17EEDCEB3E19@VI1PR0402MB3934.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:813;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	D9/nSpyAGBMiJfk7dHErUnKs6Lcq29Xx+5zE1FlTjI0EbNO+cAu7drJIHHi3fVYVVzrX+BZlILW35wF02ylFEVL+n7eCewjPYUXvTvEaam8ILlRPKhkRvAOK4bhZWVOd4+5LdJ3mfqUCHF6MgYlONzoarG6JYSs6cOezTtP6TYrIyhGQvs9a3I3+4jJTQjsc+EEQ8Y6AFAbpHRt66fR6dqWRjwIAbfIPRxHeQYC+vQFuZ4553CDO1tQKy3BUnQKxrQQ+G8OlxlOe5HkEKU+94UBcTsHW5tZwtiwjPGb7cUPLfQDATvcZLRDBCb+wtMiMjFlnzgGzJZdQpkPt2mpM1fLKiVt1ZBu3Z8ndY3oSWmDDtjdAF+nSbmPC6S88hj5ktmFflTMcLTGJYFTOyYV1mNLZhfkQkck5WaJTlZ5T7Y2wVUWAfeLzobzNDdkXQuF4of/gTq9EuL2DZJFFygZfjr1OLqWqMxzv0GivqwIAqw44Xwnjri0z47UiZRVp4N/CPywyaxuWw2Wl/X0DZE6dZPWXS6ZInfi6sgQNJ4KIcKegVPEx+fnGhf72meuoQ1a9HK2ngZknwdVS2PKinFpM8IeEJAEW9OmpGO9JFBu+V8T+DHcj1TuK5SvAXGzG56EBrkIOvWCdivS9FvjD0LXZvtp3LrCT+aXlx9lYGp0HBAWEoHWVCILotNN+eQO2T6PdRSpAgoCsvENu2W5cDI+A+dMe0rVMGvMDfe0V6sOsbzw=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(376002)(366004)(39860400002)(396003)(136003)(66556008)(66476007)(6916009)(2906002)(31686004)(4326008)(38100700002)(5660300002)(53546011)(16576012)(26005)(186003)(66946007)(956004)(2616005)(316002)(36756003)(8936002)(478600001)(86362001)(83380400001)(8676002)(31696002)(6486002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?7I1wwEHeLIJCTejbE6/wLSsuTyARuFXfu1br24w?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 07d72968-420e-43d1-4dac-08d94a8d1c52
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 08:13:37.6725
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: EQn/dR7KudD4EP2F6od9/DvhFguxBs2V4f7dSXfa8yqHJAA4DAd2IrvJFGqirnWM0Y2WOe2ix6ziQc31Bi9CMg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3934

On 15.07.2021 07:18, Penny Zheng wrote:
> This commit defines a new helper mark_page_free to extract common code,
> like following the same cache/TLB coherency policy, between free_heap_pages
> and the new function free_staticmem_pages, which will be introduced later.
> 
> Signed-off-by: Penny Zheng <penny.zheng@arm.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
with ...

> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -1376,6 +1376,53 @@ bool scrub_free_pages(void)
>      return node_to_scrub(false) != NUMA_NO_NODE;
>  }
>  
> +static void mark_page_free(struct page_info *pg, mfn_t mfn)
> +{
> +    ASSERT(mfn_x(mfn) == mfn_x(page_to_mfn(pg)));
> +
> +    /*
> +     * Cannot assume that count_info == 0, as there are some corner cases
> +     * where it isn't the case and yet it isn't a bug:
> +     *  1. page_get_owner() is NULL
> +     *  2. page_get_owner() is a domain that was never accessible by
> +     *     its domid (e.g., failed to fully construct the domain).
> +     *  3. page was never addressable by the guest (e.g., it's an
> +     *     auto-translate-physmap guest and the page was never included
> +     *     in its pseudophysical address space).
> +     * In all the above cases there can be no guest mappings of this page.
> +     */
> +    switch ( pg->count_info & PGC_state )
> +    {
> +    case PGC_state_inuse:
> +        BUG_ON(pg->count_info & PGC_broken);
> +        pg->count_info = PGC_state_free;
> +        break;
> +
> +    case PGC_state_offlining:
> +        pg->count_info = (pg->count_info & PGC_broken) |
> +                           PGC_state_offlined;

... indentation here not screwed up (it was correct originally).

> +        tainted = 1;
> +        break;
> +
> +    default:
> +        printk(XENLOG_ERR
> +               "pg MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
> +               mfn_x(mfn),
> +               pg->count_info, pg->v.free.order,
> +               pg->u.free.val, pg->tlbflush_timestamp);

Just as a remark: Let's hope that the lost piece of information here
(the caller's induction variable) won't cause us trouble later on.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:20:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:20:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158197.291334 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OVf-0003H4-Ha; Mon, 19 Jul 2021 08:20:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158197.291334; Mon, 19 Jul 2021 08:20:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OVf-0003Gx-EK; Mon, 19 Jul 2021 08:20:19 +0000
Received: by outflank-mailman (input) for mailman id 158197;
 Mon, 19 Jul 2021 08:20:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5OVd-0003Gd-SE
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 08:20:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 24d00413-e86a-11eb-8af0-12813bfff9fa;
 Mon, 19 Jul 2021 08:20:16 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2106.outbound.protection.outlook.com [104.47.18.106])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-35-LmqIy_HvOcGLYS9xExP_JQ-1; Mon, 19 Jul 2021 10:20:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB2703.eurprd04.prod.outlook.com (2603:10a6:800:ae::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 08:20:12 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 08:20:12 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P191CA0033.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:55::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4308.24 via Frontend Transport; Mon, 19 Jul 2021 08:20:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 24d00413-e86a-11eb-8af0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626682815;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=+pzUDLabhAU1CElnoW/t1BEgFFiv9swMoUtBn9WmeSA=;
	b=HxWlwkqBXpjOJSvp2gllraM/wIcD0U4zUb6n+ukkpLARp0G3eMg7wkIyadKuW/RReS65Xr
	72d6bgtv45pnekzX44gmYDrqHuFa0VCvetEO41eOvXVj/gp8ni+/4FZcfl9DiX17lnKWI4
	pAHgZ3rpYwJE8uIXQNpVgAVc2k22QUs=
X-MC-Unique: LmqIy_HvOcGLYS9xExP_JQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=DTRmFhm3W4Kd6M2EIjbXgYfGOUv+aGmZzt2b1WXFKgW91sKSYx+1rHu6TE6xy4H/1D9e/qpyZFkzckdJbw9Y01QrBLN3LcfxUVbZOfIdhu7DKr2+dMqhbZA1z6b3colV7rtvJY4lDnf+bYKPo/aAM6TrcvZRHH9jb3/Gb3Cx94xjl8DoYw9DavQSByp5plbrMqAp4iri4ZdbxNjkFON0QnZP8I4bYPyEUMaB3HATG4TRVoKeDR966Id6QcYONb/pwfBKmUocsFJPMkEaCjGQRMHpbF1vICEoIqYF5YpZuaMQ8Bg53ggisOKxJ/RmPQPNiDTlxMOsXdTvwOTyXEHIYA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+pzUDLabhAU1CElnoW/t1BEgFFiv9swMoUtBn9WmeSA=;
 b=gqY4NwVyF9eTfj78U6SzaoJ0WMc2Cg3dr59oF+2j05US4WSox67iOuTMlLAbYkbjJgSwc76cu3r0SSHKZIHnSYuLRx4d9k9rFR9xx5S4D4snZO/WhdJx8ZhHcyV0btUdj1KAqAUzu+UzevNft7iSVNMGyWQuJyRxYH2d5nfC1nGw5iGz1bBpJyorOH/a51LWXylRzsiC7fDVoLeunODdQpctSNWzVda4yNeMVyf8oKPhHARnkkgRC8YcMssnd2Rjnbv6g+u4oVNdec5bP35zyaxRA0YXFo9EIgDLm4g26uVjTRp4dD0Od3oB2Uh+zQdl96HDqsS1Av54JuwIDYNoeA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH V3 05/10] xen/arm: static memory initialization
To: Penny Zheng <penny.zheng@arm.com>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org, julien@xen.org
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-6-penny.zheng@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <295913d9-5727-2ec7-ca20-70b94c53309d@suse.com>
Date: Mon, 19 Jul 2021 10:20:10 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210715051819.3073628-6-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P191CA0033.EURP191.PROD.OUTLOOK.COM
 (2603:10a6:102:55::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 64211b6b-0ff0-4a8e-93a1-08d94a8e0777
X-MS-TrafficTypeDiagnostic: VI1PR0402MB2703:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB2703168E0A928117B2C6E141B3E19@VI1PR0402MB2703.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:345;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	+E0wOlrj6UozndZjLDCgrfFq5AEeZhJeD2nwMbnNbXaRaFXGPclN0PdMRNUsBHynpJrks43CUH2GysTTbfEbce8lbkcyjf0YWUVdESLNbc0w93MVJNx1shyOGP0CRz6B48ygazr1pvCWh3zazERp316Hx5mSCurNDHPWmaODr/+bsdBY7+6tcES151ZgfhizbTf9rXJLy8dh497DXildQ25K7dzpnXuB/9ZMydroIFVKK7JqB1/vZ7bDqkRcAaouAJHYtSwzxTSh0sL7MT3fpHq4p/eUa7qGVC2Sm1roNdIZWb0SyS6wXXLQOvckr08ywSd3ZTHUlG8zfZlbz7z7tykVJt+lI2TXvFNiA05OutEpzNq/mg1Wict9CZbooZduVMFnlSzWQIWKQAyky73PvARUzlUZgTV3aPPSFvZWPUOGtm6CoiOSNu/+VzMMjewk1PK/ZBmtCahywn9jBBpnffdrh4u/cYbBffg3iXRrwoND5BEfRkb0w+5ZSfyH7GeCgGUXLrGg/FNJnpTd/f0aorDJbXd0aXoltW65uSAd2QSLj5nYtN/gzCUJv0cELrxH7sLMbdaesLpvVvzV2pCV3qI8/pBSC5Ht6Tjyo13v/7TLJLymNnpC9qefclATXD6P6vW27k2R2gXDlMAzQgMBVgUptUInDwcJkRu8jXc2NGEguZOGRE9O725ovIke/gEDsftw0T9RuFmpaxnK5j6d7CkVu8IT28TkBtkalX6SNbE=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(39850400004)(396003)(346002)(136003)(366004)(376002)(26005)(53546011)(6916009)(186003)(2906002)(86362001)(66946007)(66476007)(66556008)(316002)(31696002)(8936002)(5660300002)(4326008)(16576012)(83380400001)(478600001)(38100700002)(2616005)(6486002)(956004)(8676002)(36756003)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 64211b6b-0ff0-4a8e-93a1-08d94a8e0777
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 08:20:12.2183
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: yxq1a/xr9napseJ0fjs3wgR+L5TNiQHnWB6U0CyIAP9P5u4Lg2DjsyDP7geufD71gzTWTr+c1j2fgZL/VXH7EA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2703

On 15.07.2021 07:18, Penny Zheng wrote:
> v3 change:
> - include addition of CONFIG_STATIC_ALLOCATION in this commit, where it
> is firstly used and also change the name to CONFIG_STATIC_MEMORY
> - Fix TAB typo in Kconfig

Not sure what this relates to, but ...

> --- a/xen/arch/arm/Kconfig
> +++ b/xen/arch/arm/Kconfig
> @@ -106,6 +106,9 @@ config TEE
>  
>  source "arch/arm/tee/Kconfig"
>  
> +config STATIC_MEMORY
> +        def_bool y

... this is (wrongly) using spaces for indentation.

I also wonder about the placement: Shouldn't the option live in common
code, with Arm "select"ing it?

> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -622,6 +622,28 @@ static void __init init_pdx(void)
>      }
>  }
>  
> +/* Static memory initialization */
> +static void __init init_staticmem_pages(void)
> +{
> +    unsigned int bank;
> +
> +    /* TODO: Considering NUMA-support scenario. */
> +    for ( bank = 0 ; bank < bootinfo.static_mem.nr_banks; bank++ )
> +    {
> +        paddr_t bank_start = bootinfo.static_mem.bank[bank].start;
> +        paddr_t bank_size = bootinfo.static_mem.bank[bank].size;
> +        paddr_t bank_end = bank_start + bank_size;
> +
> +        bank_start = round_pgup(bank_start);
> +        bank_end = round_pgdown(bank_end);
> +        if ( bank_end <= bank_start )
> +            return;
> +
> +        free_staticmem_pages(maddr_to_page(bank_start),
> +                            (bank_end - bank_start) >> PAGE_SHIFT, false);

Indentation (one too few spaces). Perhaps also consider to avoid
open-coding PFN_DOWN() here; in fact it and PFN_UP() could be used
in place of round_pg{down,up}() above.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:25:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:25:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158203.291346 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Oac-0003wG-5e; Mon, 19 Jul 2021 08:25:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158203.291346; Mon, 19 Jul 2021 08:25:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Oac-0003w9-2g; Mon, 19 Jul 2021 08:25:26 +0000
Received: by outflank-mailman (input) for mailman id 158203;
 Mon, 19 Jul 2021 08:25:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5Oab-0003w3-CY
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 08:25:25 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dcfee24c-e86a-11eb-8af0-12813bfff9fa;
 Mon, 19 Jul 2021 08:25:24 +0000 (UTC)
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2051.outbound.protection.outlook.com [104.47.12.51]) (Using
 TLS) by relay.mimecast.com with ESMTP id de-mta-6-Z2oETjxWNUyEo2Vq76rq5g-1;
 Mon, 19 Jul 2021 10:25:22 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3295.eurprd04.prod.outlook.com (2603:10a6:802:f::25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.24; Mon, 19 Jul
 2021 08:25:20 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 08:25:20 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR07CA0083.eurprd07.prod.outlook.com (2603:10a6:207:6::17) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.8 via Frontend Transport; Mon, 19 Jul 2021 08:25:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dcfee24c-e86a-11eb-8af0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626683123;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=6uRbLEDcSIn3pOirweLS+/AVRtzGTsuziAo0nk6+sNE=;
	b=kifTWALFZF66XOIt3eQrwd7DdgErx/uXov7bUZBK8X1zMbiNVqlCq96VZoPc+BQDdQQ4Pn
	9svtvYwUowFRXRAw8tQW9QZF6bK50q6jXgbbPO2x1qCfGzzXZC4Wj8E2VpXERjKNXcp/VZ
	W+1mS/+Da2sXaEDBC8NUmWEgqOFH1zI=
X-MC-Unique: Z2oETjxWNUyEo2Vq76rq5g-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=iLCsYEL9zoTu2k55dGuJenWwiCRMfHaoNpZJhVhVTXDaW4uEMBNziRXVsm/DURBTGFdpUS0YJ1VB2567i4b2N7ZitKBXQHKrsikAboQu0GRWbgCrASFPrZTVUcQvQGX/qa4leXCpZ1IPKZXbZbNn5LOL76RYtayYVvvr5zvzoqckQrQGI7oZFFmrM8ADexbhRoRhpj7OMU7gOJpZTfsjmUvq+qmdbftnDWpBNElbJrknVn1dQc3dtRezk/7ELxk2+e3pLv/A7OjKk7UY6LKLEDPwa4HUCs+SiSl/0+g+oAxEJRh1S6sUzsHal9s/wlU5UkmLFuc0rnz7ip5wlQO3jw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6uRbLEDcSIn3pOirweLS+/AVRtzGTsuziAo0nk6+sNE=;
 b=SeDVFG/CZ6cdD5xbLLih8vjUStcRrzUaGVXMHlKV+PUtrZY9aAOEte3nFNwYifFsnot4DjSur6byinaaTzThMKrwqr5xuJTCvWrOcF1l8p37nqp5Q9WA+nRrV8Y7Xgq/CxMkP15Lht+Bu9w9RWn5a8xm9mENOuO/UAL1OLy2N+5MzugwHlJ7EPgnLNfNGnxCspnqJrvq7sTSaW50k/SZQekNgMsCTbSBIbiEGnE1mRMMe8hNJzuUurdoc0MVR0tDqgkxoUVgLdTSXEUVceqkKhr/fgxc6rojgG/KFYF5NdhZu39AenY04X5pPN6pVxOsyBHVva1GbQGhUe28gqbjEg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH V3 05/10] xen/arm: static memory initialization
To: Penny Zheng <penny.zheng@arm.com>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org, julien@xen.org
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-6-penny.zheng@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <b2ef39b8-4bdd-6d50-0c6b-a44fdf0608e3@suse.com>
Date: Mon, 19 Jul 2021 10:25:18 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210715051819.3073628-6-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM3PR07CA0083.eurprd07.prod.outlook.com
 (2603:10a6:207:6::17) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 2bee3157-de32-47ca-6834-08d94a8ebf36
X-MS-TrafficTypeDiagnostic: VI1PR04MB3295:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB3295F225778935C20B94FF70B3E19@VI1PR04MB3295.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5236;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NJZlIGaQwnvN3ztyDbRRG5frtVT8MEHPqW4U28iNJiFQXj19qXv1fK+chZNtAGN4ivODVqTBNmLHQRsMbsAPqU6lDo2n6vlOee0senuZ3Wr4DtMvDg8uW4Q/Db36f0pC3RYhdZPckJkyI+vH8oEFBVPXjjMtPz7UPk6dlJMca9rfCca1wDZfEhk6GY8wzwRA/0/ny2leVMUdw9wB393Q/0MyTgxQVbd401AND3qQ/nuOojmY4K/VCvEnMcqA4pLpgDzmF0HSfXju6Sn97B10K7BwMXvAA7Ja57u06hYPKYtADt6B47hG4g4IpeawtkzEsfLoKuRoSOtU/iAa8KvMqH94FMFJ6L1R6ulwbnYrupW7PvAkzX2YO7PSSfAAcruWnxdcuZ6XGrbOdJd45As3a1me8uVhAkbzwkavNo7wRW+9qWESeSnfsIBvSDUruM1R4nyowp+qlTqNixxIRIiMfoMmTZtZ01NpSgVATptQDZYj7cWSRqI38rzNSYWyZ9hff3p4vqgMAjXlDIHpaZPCTYRADphhWqOgD2cE31UO5EkTAesgdp8QzFa5QggcDzsNdttQM56j1IL9EIFWy8nLTyvhd6X2wiHl+RwE8dpExc6CVe2S2SFwakm+dbQX+kRNeliNtYisFDdJT/P8+0h7WlcjZKOukYxFdsXHoGPy4LSsoZ5jJs2d7nyQizb46U606cCCpdnr3dvNoc/9zKfcJoBPfVFyWYQSAHwnIHCswZk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(366004)(396003)(39860400002)(376002)(136003)(31686004)(8676002)(31696002)(53546011)(16576012)(8936002)(5660300002)(316002)(86362001)(4744005)(2906002)(36756003)(6916009)(6486002)(478600001)(83380400001)(186003)(26005)(66946007)(66476007)(4326008)(38100700002)(956004)(2616005)(66556008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?PCs7o+iajv/C31ZMXmJHt0/ZbIKa3xRyNfUSvjA?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 2bee3157-de32-47ca-6834-08d94a8ebf36
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 08:25:20.4510
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 22Q89ZULItrDt9Bi3qGlEdRBovhtU5AMNitXTB2FPE9dNKWXGR/uwXwHQqhsjdogDqCzblJoGwAhZDmN/PtV3g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3295

On 15.07.2021 07:18, Penny Zheng wrote:
> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -1519,6 +1519,26 @@ static void free_heap_pages(
>      spin_unlock(&heap_lock);
>  }
>  
> +#ifdef CONFIG_STATIC_MEMORY
> +/* Equivalent of free_heap_pages to free nr_mfns pages of static memory. */
> +void __init free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
> +                                 bool need_scrub)
> +{
> +    mfn_t mfn = page_to_mfn(pg);
> +    unsigned long i;
> +
> +    for ( i = 0; i < nr_mfns; i++ )
> +    {
> +        mark_page_free(&pg[i], mfn_add(mfn, i));
> +
> +        if ( need_scrub )
> +        {
> +            /* TODO: asynchronous scrubbing for pages of static memory. */
> +            scrub_one_page(pg);
> +        }
> +    }
> +}
> +#endif

Btw, I think the lack of locking warrants extending the comment above
the function, to spell out what the implications are (in particular:
calls here need to happen early enough).

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:41:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:41:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158210.291358 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OqI-0006RE-Ls; Mon, 19 Jul 2021 08:41:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158210.291358; Mon, 19 Jul 2021 08:41:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5OqI-0006R7-I4; Mon, 19 Jul 2021 08:41:38 +0000
Received: by outflank-mailman (input) for mailman id 158210;
 Mon, 19 Jul 2021 08:41:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5OqG-0006Qz-TT
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 08:41:36 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1fce0114-e86d-11eb-8af1-12813bfff9fa;
 Mon, 19 Jul 2021 08:41:35 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2112.outbound.protection.outlook.com [104.47.18.112])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-39-1YW5ktqZMvCco4VXeK6vJw-1; Mon, 19 Jul 2021 10:41:33 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7038.eurprd04.prod.outlook.com (2603:10a6:800:12d::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.25; Mon, 19 Jul
 2021 08:41:31 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 08:41:31 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR10CA0002.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:17c::12) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend
 Transport; Mon, 19 Jul 2021 08:41:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1fce0114-e86d-11eb-8af1-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626684094;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=4Y275R2fWmI3oRSMRO9W7BLYHf1eDW1xwtRUm+FDLsk=;
	b=F5V7S+qLJ5Ug2jbXv+PJQuyTzx4QweQxRDmXNYbi2zUWuAfyRbJiLM5Zq0V05W8IlITf84
	oZarcMdArVPAIYoYlj3Ub3kg6kGNMm4I9Idst5fF9x5ttlR94Aez+fL4Z9qAbEMuaWROG8
	v11k1+6cbgolwPv95boXmA6g5MLD3VQ=
X-MC-Unique: 1YW5ktqZMvCco4VXeK6vJw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UYHlHz01rv8Ly10XfrQUB83o/Q4mybDj1ja9fKvUin+qDqMx3wFOpzeNsTaedh1xjPWD9JcDkyqXzQGtaa4y4xnRko5wd5/OyHkNSJRytXE6SZcF8HEX0zmbInhCdXmCOY4dDbMinN9WXTZSil322YFCGJ1arAIJ5XPWQpkEz97nkhD4eOeutm4Yo243gKrUEgOUBEurHHkKCfUeWbcMrLlKlZ+t4fKNJyZfjkoBotE9zMd9Ibp91vWvIrvI0U1QDJ2BQXChv1duawp48uKDGevb2JDVV+4EhnBQbqNtn1d2ptMy9Jvo6QiEjhOhimLhx6pSK766ZGOze1uM2eiyLg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4Y275R2fWmI3oRSMRO9W7BLYHf1eDW1xwtRUm+FDLsk=;
 b=SnYM7gUrvGb078ecQyBb1IQNCHXmKVH0xdx5iILtNmLI7fE4pmYR28R65r+2jHyLTL8sUMZP0t5mx5yskN/YXGkdYSPeZaTj/YdnVsjkjBm7HdD5RyjTWvEKcHhDR02IQZp5RB5j3UXpOpelHAKcrZMgQgpHYstZigOiTP+QGxjM6fu6IH7Um0F20TcYyUtHPNcTcuYhyUY/zi7h+dBXQtIyaZpMIs7cQlrdftvIyUtJwaH8gXjaps1kfPBQJ2BpCSXwxel92zDW9tgIIskc7/dlTkfwBGA437dm6qkLXT3OtlXluLhFw3IXV9Ia32A/hdfbydto678D/zc55u0SqQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH V3 07/10] xen: re-define assign_pages and introduce
 assign_page
To: Penny Zheng <penny.zheng@arm.com>, julien@xen.org
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-8-penny.zheng@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <b2ece197-a9fe-71bc-2480-ea1db83acaee@suse.com>
Date: Mon, 19 Jul 2021 10:41:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210715051819.3073628-8-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR10CA0002.EURPRD10.PROD.OUTLOOK.COM
 (2603:10a6:208:17c::12) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a4e4abba-9c6e-47e9-1449-08d94a910219
X-MS-TrafficTypeDiagnostic: VI1PR04MB7038:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB7038A17D0767ABF107939167B3E19@VI1PR04MB7038.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ndyB+vVCFNq8f6z7aZ/2IyTY+LrI5ijZcPkKXgvS27u+I20qL03sX8Unog4onqCzyOjWhipgiDLx6WHzPftPb4k61Zm715ifHa6KxxHMWHK1gR0SQk+cjr9yuMSmBaG5eKTeb+wFXpfUM+kujBLJs5DXtiPGVjzH0BeX6strOhcEnmqspCO6EMeHZQUkQjPxACGvSy1ahbtJyz6F8Z8/YzczNxZVoBHTVA6maChKVe+hIppecI6fuj7zMmMVkBM57TYUx4eYkOHOptskDg51xvS5vPZnzKnNT3Y6IV8xdbPUsBwJKgZ2lwPoIji8kDOlPudM6Bdriflr+lgN+DLH9iWP2p/yE8I3cEzJIcpwXKB+h+IBqal+3tITWULHN088hxe2/ruSuPlfFZpCAcuEclCxfsq9J9GHHWRo26WNl8G+5DI6MU8/uOZgg1MeMRjLlZQIkfru6yCO4LGFrZE+dqDMBHQh3kIply6QTiT0ZVDvPnVR+RHLIzc/hSp/BiHHdyzjxKpuIjcfH2jFF6vXIVIT+StFMBw8pPXB7va/8dfhsyAwMNtOZhvZubZuWqctpdmDV7M647d5S1I+ZXOxegJe55nQBnmEqMWoJ5Q7dBdVVuFuYeR2nVK2DJXhh22ycLtthBO0Wc+fyRpxqTOWz9+XQzBEqm4Y9rMN8FUg89CjEDuoHjQzwH5D0ody9a4XLQ+CYMp+Ut1tuEIc/MGArtCTnDAP8B1GlekfYQgyISs=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(376002)(39840400004)(396003)(366004)(2906002)(478600001)(83380400001)(8936002)(31696002)(6486002)(66946007)(66476007)(66556008)(86362001)(31686004)(4326008)(186003)(956004)(16576012)(26005)(36756003)(53546011)(38100700002)(2616005)(8676002)(316002)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?/XEyNZh1pcd/F8lgXtd7JC2xxVa+d0vksIQ/Y2M?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a4e4abba-9c6e-47e9-1449-08d94a910219
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 08:41:31.6756
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: bCs8rln0nlP8AgAJ4/pl3pZHxEBzKoRXP2usROSLXpg0CzPRJyrRWO40Xag1b0OUH2IqorvX40Tr77Xhj9CeoA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7038

On 15.07.2021 07:18, Penny Zheng wrote:
> In order to deal with the trouble of count-to-order conversion when page number
> is not in a power-of-two, this commit re-define assign_pages for nr pages and
> assign_page for original page with a single order.
> 
> Backporting confusion could be helped by altering the order of assign_pages
> parameters, such that the compiler would point out that adjustments at call
> sites are needed.

Back on the initial form of this patch Julien said:

"However, I think I would prefer if we introduce a new interface (maybe 
 assign_pages_nr()) rather than change the meaning of the field. This is 
 for two reasons:
    1) We limit the risk to make mistake when backporting a patch touch 
 assign_pages().
    2) Adding (1UL << order) for pretty much all the caller is not nice."

1) is taken care of here anyway (albeit see the remark below), and of the
callers only some would really need "1UL <<" added (others could simply
convert their literal 0 to literal 1). Julien - do you still think 2) is
pretty important to avoid at the, overall, 2 places that would be left?

> --- a/xen/arch/x86/pv/dom0_build.c
> +++ b/xen/arch/x86/pv/dom0_build.c
> @@ -556,7 +556,7 @@ int __init dom0_construct_pv(struct domain *d,
>          else
>          {
>              while ( count-- )
> -                if ( assign_pages(d, mfn_to_page(_mfn(mfn++)), 0, 0) )
> +                if ( assign_page(d, mfn_to_page(_mfn(mfn++)), 0, 0) )

I think in all cases where order-0 pages get passed, you'd rather want
to call assign_pages() directly (if, as per above, we'll keep both
functions in the first place).

> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -2283,8 +2283,8 @@ void init_domheap_pages(paddr_t ps, paddr_t pe)
>  
>  int assign_pages(
>      struct domain *d,
> +    unsigned long nr,
>      struct page_info *pg,
> -    unsigned int order,
>      unsigned int memflags)
>  {

I'm afraid I consider putting "nr" ahead of "pg" unusual (considering
the rest of our code base). How about

int assign_pages(
    struct page_info *pg,
    unsigned long nr,
    struct domain *d,
    unsigned int memflags)
{

?

> @@ -2354,6 +2354,11 @@ int assign_pages(
>      return rc;
>  }
>  
> +int assign_page(struct domain *d, struct page_info *pg, unsigned int order,
> +                unsigned int memflags)
> +{
> +    return assign_pages(d, (1UL << order), pg, memflags);

May I ask that you omit the unnecessary parentheses?

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:49:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:49:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158216.291370 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Oxt-0007G0-EU; Mon, 19 Jul 2021 08:49:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158216.291370; Mon, 19 Jul 2021 08:49:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Oxt-0007Ft-AQ; Mon, 19 Jul 2021 08:49:29 +0000
Received: by outflank-mailman (input) for mailman id 158216;
 Mon, 19 Jul 2021 08:49:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+lm8=ML=bounce.vates.fr=bounce-md_30504962.60f53c94.v1-75dba24ea1a2454d9d5f9b20718192af@srs-us1.protection.inumbo.net>)
 id 1m5Oxr-0007Fn-61
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 08:49:27 +0000
Received: from mail179-5.suw41.mandrillapp.com (unknown [198.2.179.5])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e60403d3-26c9-40e3-a8f8-0f1fbf08d077;
 Mon, 19 Jul 2021 08:49:25 +0000 (UTC)
Received: from pmta12.mandrill.prod.suw01.rsglab.com (localhost [127.0.0.1])
 by mail179-5.suw41.mandrillapp.com (Mailchimp) with ESMTP id 4GSwWT08VgzG0CL4t
 for <xen-devel@lists.xenproject.org>; Mon, 19 Jul 2021 08:49:25 +0000 (GMT)
Received: from [185.78.159.90] by mandrillapp.com id
 75dba24ea1a2454d9d5f9b20718192af; Mon, 19 Jul 2021 08:49:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e60403d3-26c9-40e3-a8f8-0f1fbf08d077
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.fr;
	s=mandrill; t=1626684565; i=charles.schulz@vates.fr;
	bh=oUlxRh+eC5/WZw+QbhycRSODn986MN+o1py8nDXJIIA=;
	h=From:Subject:References:To:Cc:In-Reply-To:Message-Id:Date:
	 MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=j1sAx4G7EcSVSvWNh1S1O/QR5wP7Dh+kUh/GVwqoqraFVMRV4TtLS4cgrzQ5Rf7WV
	 zidcyTURFn0u0FM8Q29Fd0s6d1723HaByjIWQg7BZzgarOX22pEyHCo2jFB0KKCFo9
	 uhvagKBQY1nhWPv7kTHvPCo2ZcxYFq+Iwcxw9r1w=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; 
 i=@mandrillapp.com; q=dns/txt; s=mandrill; t=1626684564; h=From : 
 Subject : References : To : Cc : In-Reply-To : Message-Id : Date : 
 MIME-Version : Content-Type : Content-Transfer-Encoding : From : 
 Subject : Date : X-Mandrill-User : List-Unsubscribe; 
 bh=oUlxRh+eC5/WZw+QbhycRSODn986MN+o1py8nDXJIIA=; 
 b=nk0zRR7V2so40mxzOn1yUMzbrmX4D1hmnWmpr90eZI6lNdgGSmhzR09RJ9CmJXeA91wOIx
 OcGdYF41HVvADORx2uehCcuCEN+Vamtr/X9wLqbRKANhFC5sjbzdEbSc6DqBv5yHN30rkNUa
 dF+HAnuZBHTKJaXzGNSEtFDh9eKSg=
From: "Charles-H. Schulz" <charles.schulz@vates.fr>
Subject: Re: Suggested changes to the admission policy of the vulnerability pre-disclosure list
X-Virus-Scanned: amavisd-new at vates.fr
References: <87r1fzclw0.fsf@vates.fr> <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com> <87k0lqmmf8.fsf@vates.fr> <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com> <87wnpqm380.fsf@vates.fr> <14d1b95e-9d3a-8464-010b-d7796a26a8c4@suse.com>
To: Jan Beulich <jbeulich@suse.com>, xen-devel@lists.xenproject.org
Cc: 
In-Reply-To: <14d1b95e-9d3a-8464-010b-d7796a26a8c4@suse.com>
Message-Id: <87tukqy9gw.fsf@vates.fr>
X-Report-Abuse: Please forward a copy of this message, including all headers, to abuse@mandrill.com
X-Report-Abuse: You can also report abuse here: http://mandrillapp.com/contact/abuse?id=30504962.75dba24ea1a2454d9d5f9b20718192af
X-Mandrill-User: md_30504962
Feedback-ID: 30504962:30504962.20210719:md
Date: Mon, 19 Jul 2021 08:49:24 +0000
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit


Jan Beulich @ 2021-07-19 08:44 CEST:

> On 16.07.2021 22:08, Charles-H. Schulz wrote:
>> Jan Beulich @ 2021-07-16 17:21 CEST:
>>> On 16.07.2021 15:13, Charles-H. Schulz wrote:
>>>> Jan Beulich @ 2021-07-16 09:52 CEST:
>>>>> On 15.07.2021 23:23, Charles-H. Schulz wrote:
>>>>>> Hello,
>>>>>>
>>>>>> I /we /Vates would like to suggest some changes to the policy regarding the
>>>>>> enrollment to the pre-disclosure mailing list of the Xen Security Team.
>>>>>>
>>>>>> We have had some talks with the French national CERT who has a need to be the
>>>>>> recipient of such a list. This national CERT -and in my experience other
>>>>>> national CERTs such as the NIST for instance- is in constant contact with a
>>>>>> large Xen userbase that is mostly made up of large parts of the public sector
>>>>>> as well as critical infrastructure operators belonging to the private
>>>>>> sector. For confidentiality reasons they cannot disclose who uses Xen and
>>>>>> where it is used nor who may be using it internally or within the related
>>>>>> national cybersecurity authority.
>>>>>>
>>>>>> Because of that, their request may not be clear or matching the existing
>>>>>> criteria for inclusion in the mailing list. National CERTs are trusted
>>>>>> actors and have historically been among the very first entities to define,
>>>>>> advocate for and put in practice the very notion of responsible
>>>>>> disclosure. Much of the current practice of Open Source projects in that
>>>>>> regard actually stems from CERTs. As part of their policies and processes
>>>>>> regarding vulnerability disclosure, the notion of confidentiality and
>>>>>> documented, waterfall-like processes of disclosure is play an integral
>>>>>> part of
>>>>>> how they handle informaton and publicity around vulnerability. As a result,
>>>>>> national CERTs (and the French National CERT) do not spread undisclosed
>>>>>> vulnerability without following established and agreed-upon processes. Such
>>>>>> processes include, in our instance, the ones defined and followed by the Xen
>>>>>> Security Team. Compliance with these are the first criteria to earn trust and
>>>>>> respect from the ecosystem and the downstream users. You can see an example
>>>>>> of their work here: https://www.cert.ssi.gouv.fr/
>>>>>>
>>>>>> Part of the mission of the French National CERT is to work with
>>>>>> critical infrastructure providers in securing their IT.
>>>>>> This kind of expertise entails the securing of these information
>>>>>> systems before any unforeseen incident as well as after the incident
>>>>>> (incident remediation).
>>>>>> None of the tasks involved imply the communication of zero-day types
>>>>>> of vulnerabilities or vulnerabilities that are unpublished to the
>>>>>> downstream users.
>>>>>
>>>>> Would you mind shedding some light on the benefits of a national CERT
>>>>> being in the know of unpublished vulnerabilities when they can't share
>>>>> that knowledge with their downstreams, and hence their downstreams -
>>>>> as long as they aren't themselves members of our predisclosure list -
>>>>> would still be zero-dayed at the time of publication of such
>>>>> vulnerabilities? Shouldn't their advice to their downstreams rather be
>>>>> to direct them towards applying for pre-disclosure list membership?
>>>>
>>>> In practice, most of the downstream users that the CERTs work with are not
>>>> going to subscribe to the Xen pre-disclosure list, nor to any pre-disclosure
>>>> lists of vendors or Open Source Software projects. The downstream users will
>>>> work with CERTs and various cybersecurity service providers (Security
>>>> Operations Centers -SOCs- being a typical example) in order for vulnerability
>>>> discovery, disclosure, patching and later integration of fixes or remediatory
>>>> measures be managed and applied.
>>>
>>> It feels to me as if you didn't really answer my question. You restate
>>> what I understood is the current state of things, from your initial mail.
>>> The important aspect "when they can't share that knowledge with their
>>> downstreams" doesn't get discussed at all. All their downstreams would
>>> have to wait not only until public disclosure (instead of patching their
>>> systems - as far as permitted in every individual case - already during
>>> the embargo period), but there'll be an unavoidable further delay,
>>> however small or large. I'm having difficulty seeing how this can be in
>>> everybody's best interest, and hence I can't help suspecting that
>>> information might flow irrespective of this being prohibited except
>>> _among_ members of the predisclosure list.
>> 
>> You seem to suspect dishonest or malevolent intent from CERTs.
>> It's not a proper base for discussion. Therefore I'm not going to hypothesize
>> on some sharing of information with downstream users which will actually not
>> happen, because the behaviour you suspect is not an accepted behaviour,
>> neither from the CERTs themselves nor by professional actors in charge of responsible
>> disclosure and software security. 
>> 
>> Having said that, you are right indeed that the downstream users will not
>> patch their systems before some time, usually because CERTs, service
>> providers or software vendors will notify them or do the work for them. But
>> that is how things tend to work unfortunately. CERTs act as their source of
>> information and prompt them to act. One can find it a bit idiotic, and I also
>> do think that both public and private sector entities should be much more
>> proactive when it comes to their security. But that's another discussion. 
>
> Well, if it's really (and intentionally) like this, then my suspicion
> above would indeed be wrong.
>
>>> What I could see is them acting as a proxy for their downstreams, but
>>> this isn't what you've been asking for, and this would also mean much
>>> more of a change to the policy.
>> 
>> They act as a resource center for their downstreams, but the information goes
>> top down, i.e from the software developer to the downstream, not the
>> opposite. Also how it entails an even bigger change to the list policy is
>> unclear to me. 
>
> For things to make sense (as you seem to agree with as per further up),
> if their downstreams aren't to subscribe to our (and perhaps other)
> pre-disclosure list themselves, the CERTs would need to act as a proxy,
> in that they'd be permitted to relay the information before the embargo
> ends. I didn't think there would be much of a difficulty seeing that
> this would be more of a change to the policy.

Indeed, because you assume that CERTs will communicate information before
they are public. But they don't work that way in that they act as the legal
and actual hub for the public information and listing of vulnerabilities
reports (CVEs etc.) What they do before the end of the embargo date I already
explained, and that specifically does not entail sharing the information with
downstream users. So to me there is no big change of policy - this is the
highway patrol sharing the license plate numbers of criminals or suspects
with the city police. 

>
>>>>> As to the actual policy - how would you propose to categorize such
>>>>> organizations, i.e. how would a new bullet point in the present
>>>>>
>>>>> "
>>>>> This includes:
>>>>>
>>>>>     Public hosting providers;
>>>>>     Large-scale organisational users of Xen;
>>>>>     Vendors of Xen-based systems;
>>>>>     Distributors of operating systems with Xen support.
>>>>> "
>>>>>
>>>>> look like in your opinion? This is pretty important imo, as it will
>>>>> need to be understood who else might then become eligible.
>>>>
>>>> I think it's either a very difficult or a very simple question. If I were to
>>>> suggest to simply add a line with "national CERTs" meaning: CERTs that
>>>> operate on behalf of governments for the protection and cybersecurity watch
>>>> of national administration and critical infrastructures" would that be
>>>> accepted? I'm happy with that one. It's really two criteria I'm adding: being
>>>> a CERTs acting wth a clear mandate from a national authority to serve as the
>>>> national computing emergency response team. Not sure how satisfactory that
>>>> is.
>>>
>>> So what if some entity acted largely like a "national CERT", but wasn't
>>> called that way?
>> 
>> The what if question is not a valid one, as you are either recognized as a
>> national CERT (there may sometimes be more than one) or you're not, by
>> regulatory approval of some sort.  Nobody else can claim they're a national
>> CERT.
>> You can be a private CERT, but that's out of the scope of my request. 
>> 
>>> The present items on the list try to use pretty generic
>>> terms, while your suggestion is pretty specific.
>> 
>> So how is that a problem in our this specific instance?
>
> Why would we exclude private CERTs? I could easily see there being
> countries which have no "national CERT" (for a variety of reasons),
> with some private / non-government organization jumping in.
>

This is a good point I'm not making :)
My request is solely about national CERTs, I do not feel that I have enough
standing here requesting that private CERTs be added to the list, although
I'm sure there's a point to be made here as well.

>>> I'm further afraid that
>>> "a clear mandate from a national authority" may not provide any
>>> justification at all, depending on (often political) view points.
>>>
>> 
>> That is factually and legally false. A national CERT, just like a national
>> cybersecurity authority, is appointed by law or decree in a country and it
>> does not call for any justification not anything political. It is part of the
>> administration of the country. In France, CERT-FR is part of ANSSI, itself
>> part of the National Security and Defense Directorate (SGDSN), acting under
>> the authority of the Prime Minister. In Germany, CERT-DE belongs to the BMI
>> (Interior Ministry). I believe in the US CERT-US operates within the NIST or
>> the DHS, etc. 
>
> There is very much a political aspect in here, imo: "Appointed by
> law or decree in a country" can be against law in another country.
> Knowledge of vulnerabilities can be used not only to improve
> cybersecurity.
>

The fact that one national law is contrary to another national law has no
bearing on the Xen Security Team I think. My point was that there is nothing
political in understanding that national CERTs are established, chartered,
regular actors whose primary function is establishing trust and improving
cybersecurity. 

What you're alluding to are behaviours we are all well aware of, but in
practice you will not find those in national CERTs, which are public entities
with a public service mission acting in public in routine and emergency
contexts. Any director of a national CERT can stand up in front of the
Parliament of his/her coutry and clearly explain what they do. It's not
necessarily the case for the other actors you mention, who will have a large
part of their activities classified. So I would say this is a case for
comparing the CIA and the NYC Fire Department. 

All the best,
-- 
Charles-H. Schulz
Chief Strategy Officer - CSO
XCP-ng & Xen Orchestra - Vates solutions


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 08:58:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 08:58:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158222.291381 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5P6v-0000N2-Ac; Mon, 19 Jul 2021 08:58:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158222.291381; Mon, 19 Jul 2021 08:58:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5P6v-0000Mu-7a; Mon, 19 Jul 2021 08:58:49 +0000
Received: by outflank-mailman (input) for mailman id 158222;
 Mon, 19 Jul 2021 08:58:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m5P6t-0000Mo-Ou
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 08:58:47 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5P6t-0006XG-AJ; Mon, 19 Jul 2021 08:58:47 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5P6t-0001hA-4Y; Mon, 19 Jul 2021 08:58:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=uYwMIhcemQ8YSAnT/nwxo9V3kBvpQI6Uln00t/y5rx8=; b=BbevgEoL3guYTG7fSJYKlBSLeN
	ZCUhNNZl/cD2Jlf0MNo8pkAWNSHCDd3kYgXd8rlQL3YlUNALVMQq1E57u8evB6W5h0quAp8X82R3M
	rBHaIrjZOwWTD9/+iP1CozvWXhiowNZnIrYRENcf5WhigTLoxldF7RkAw35oOqENvhsE=;
Subject: Re: [RFC PATCH 3/4] xen/arm: Sanitize cpuinfo ID registers fields
To: Bertrand Marquis <Bertrand.Marquis@arm.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
 Stefano Stabellini <sstabellini@kernel.org>
References: <cover.1624974370.git.bertrand.marquis@arm.com>
 <b9c86a28df2bddca095ae02511ced09585dce164.1624974370.git.bertrand.marquis@arm.com>
 <4014ca20-b3b6-cd39-9b26-d1dd8e9b568c@xen.org>
 <A8304A17-E59A-4C40-A9FA-6EF49B58AC54@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <144614cf-575c-9580-065e-31792e350359@xen.org>
Date: Mon, 19 Jul 2021 09:58:45 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <A8304A17-E59A-4C40-A9FA-6EF49B58AC54@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 16/07/2021 18:14, Bertrand Marquis wrote:
> Hi Julien

Hi Bertrand,

> […]
>>>
>>> +
>>> +    if ( old_reg != new_reg )
>>> +        printk(XENLOG_DEBUG "SANITY DIF: %s 0x%"PRIx64" -> 0x%"PRIx64"\n",
>>> +               reg_name, old_reg, new_reg);
>>> +    if ( old_reg != *cur_reg )
>>> +        printk(XENLOG_DEBUG "SANITY FIX: %s 0x%"PRIx64" -> 0x%"PRIx64"\n",
>>> +               reg_name, old_reg, *cur_reg);
>>> +
>>> +    if ( taint )
>>> +    {
>>> +        printk(XENLOG_WARNING "SANITY CHECK: Unexpected variation in %s.\n",
>>> +                reg_name);
>>> +        add_taint(TAINT_CPU_OUT_OF_SPEC);
>>> +    }
>>> +}
>>> +
>>> +
>>> +/*
>>> + * This function should be called on secondary cores to sanitize the boot cpu
>>> + * cpuinfo.
>>
>> Can we renamed boot_cpu_data to system_cpuinfo (or something similar)? This would make clear this is not only the features for the boot CPU?
> 
> While looking at this request, I checked a bit how boot_cpu_data and cpu_data overall are used:
> - boot_cpu_data is only used in setup.c, by boot_cpu_features macros, in smpboot to retrieve the bootcpu midr, in p2m and by cpufeatures
> - cpu_data[] is used in smpboot, in errata handling to test for csv2, and in vcpreg to access the midr
> 
> So we have a bunch of cpuinfo structures as global variables but most of them are not really used or did I miss something ?

While I agree this is not useful today, the idea is we can find easily 
what features each processor supports. This could be useful if we wanted 
to expose big.LITTLE to the guest.

For instance, imagine you have a system where some processor may support 
32-bit EL1 only on some processor. With a global approach, we would say 
"32-bit EL1 is not supported". That would prevent a user to use the 
system to its full advantage.

Note that I am not asking to implement such things today... This is more 
to show that we will likely want to keep the per-CPU info around.

The system_cpuinfo could be used for system wide decision in Xen (e.g. 
P2M size, cacheline size....) while the per-CPU could be used to enable 
features only used by a couple of CPUs.

> 
> So I am wondering if we should not reduce a bit the amount of global data and:

How much are we talking?

> - introduce a global system_cpuinfo
> - remove cpu_data[] and use a temp structure in the stack of the cpu booting
> - read midr directly in vcpreg
> - use boot_cpu_data in errata for csv2

This would not be quite the same. You may have a system where not all 
processors have ID_AA64PFR0_EL1.CSV2 is set, yet we want to avoid 
setting the hardening vector on process with the bit set to reduce the 
overhead.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 09:19:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 09:19:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158231.291399 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PQK-0002yH-4w; Mon, 19 Jul 2021 09:18:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158231.291399; Mon, 19 Jul 2021 09:18:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PQK-0002yA-21; Mon, 19 Jul 2021 09:18:52 +0000
Received: by outflank-mailman (input) for mailman id 158231;
 Mon, 19 Jul 2021 09:18:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m5PQJ-0002y4-Cz
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 09:18:51 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5PQI-0006ua-5A; Mon, 19 Jul 2021 09:18:50 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5PQH-0002ze-VJ; Mon, 19 Jul 2021 09:18:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=3rsXbZ71fwPB4fGCjdg7939zo6eyvoIIGbintUM4EQA=; b=vz7kXLyI88zOL2bJH2pxYl5/kC
	o2PBIKKhqfDcel0pF+Y7N81Cf1XuBRlDLpmRIlLzbhZKQUKu5+3CDX9tlSWimjcdWifb7FZ5kHXbT
	4uyLcEpjSmxQdWBTpg6qwsBQbM+2TDwlK/o98c8noOqmhwuTszUFryXFXZDATKtEfUxM=;
Subject: Re: [PATCH] x86/AMD: adjust SYSCFG, TOM, etc exposure to deal with
 running nested
To: Jan Beulich <jbeulich@suse.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
References: <cd23fd18-66f9-55c7-4a1c-a50d66628d69@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <d8913811-2e90-255b-98c6-44e262e113d3@xen.org>
Date: Mon, 19 Jul 2021 10:18:48 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <cd23fd18-66f9-55c7-4a1c-a50d66628d69@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 13/07/2021 08:22, Jan Beulich wrote:
> In the original change I neglected to consider the case of us running as
> L1 under another Xen. In this case we're not Dom0, so the underlying Xen
> wouldn't permit us access to these MSRs. As an immediate workaround use
> rdmsr_safe(); I don't view this as the final solution though, as the
> original problem the earlier change tried to address also applies when
> running nested. Yet it is then unclear to me how to properly address the
> issue: We shouldn't generally expose the MSR values, but handing back
> zero (or effectively any other static value) doesn't look appropriate
> either.

IIUC, the unsolved problem is a Linux 3.12 dom0 running on top of the L1 
Xen. The kernel is quite old (and looks to be unsupported), so are we 
expecting anyone to build a new stack with a newer Xen and such dom0?

If the answer is unlikely, then I think it would be fair to keep the 
limitation until someone comes up with such setup.

> 
> Fixes: bfcdaae9c210 ("x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0")
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 09:20:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 09:20:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158236.291412 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PS7-0004HD-H1; Mon, 19 Jul 2021 09:20:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158236.291412; Mon, 19 Jul 2021 09:20:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PS7-0004H6-D8; Mon, 19 Jul 2021 09:20:43 +0000
Received: by outflank-mailman (input) for mailman id 158236;
 Mon, 19 Jul 2021 09:20:42 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m5PS5-0004Gz-W2
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 09:20:41 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5PS4-0006w3-VT; Mon, 19 Jul 2021 09:20:40 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5PS4-00033w-PS; Mon, 19 Jul 2021 09:20:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=EkFWSLO+49FC0vj71lDD+IMDn4IAy9X6kP3i5CkJE80=; b=fyWDgBEpWuC7JiiG5DP2/n7lvc
	fvAsZdBlLuM5IvfqbpwpJTZeXdYOZKVmA27eVWYK7KmYR2oo6rQfvrzQ4nxSufQpjHgCNxp0XHtBC
	qBxPvvmNwQ1hRWFwpLPNTWWciOV8Dff/bobfFpObIgDULOHUw/EK4avz+aNlhOQNrApQ=;
Subject: Re: [xen-unstable test] 163782: regressions - FAIL
To: Jan Beulich <jbeulich@suse.com>, Andrew Cooper
 <andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>,
 Ian Jackson <iwj@xenproject.org>, Stefano Stabellini
 <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Cc: osstest service owner <osstest-admin@xenproject.org>,
 xen-devel@lists.xenproject.org, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
 <roger.pau@citrix.com>
References: <osstest-163782-mainreport@xen.org>
 <6f3dfbdf-e5f9-f1fb-4cd9-a42adee73e30@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <34190a82-98a3-44b6-fac5-6ddfef6a3738@xen.org>
Date: Mon, 19 Jul 2021 10:20:38 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <6f3dfbdf-e5f9-f1fb-4cd9-a42adee73e30@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 19/07/2021 08:04, Jan Beulich wrote:
> All,

Hi Jan,

> On 19.07.2021 04:38, osstest service owner wrote:
>> flight 163782 xen-unstable real [real]
>> flight 163791 xen-unstable real-retest [real]
>> http://logs.test-lab.xenproject.org/osstest/logs/163782/
>> http://logs.test-lab.xenproject.org/osstest/logs/163791/
>>
>> Regressions :-(
>>
>> Tests which did not succeed and are blocking,
>> including tests which could not be run:
>>   test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458
> 
> as Andrew has indicated to me that he cannot predict when he'd be able
> to look at "[PATCH] x86/AMD: adjust SYSCFG, TOM, etc exposure to deal
> with running nested" [1], which I expect will take care of this test
> failure (preventing a push), would anyone of you feel in the position
> to review that change?
I agree that it should solve the issue caught by OSSTest. The patch 
looks fine to me, so I gave my reviewed-by.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 09:22:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 09:22:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158242.291424 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PU1-0004ts-UV; Mon, 19 Jul 2021 09:22:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158242.291424; Mon, 19 Jul 2021 09:22:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PU1-0004tl-Pf; Mon, 19 Jul 2021 09:22:41 +0000
Received: by outflank-mailman (input) for mailman id 158242;
 Mon, 19 Jul 2021 09:22:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=hDlA=ML=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m5PU0-0004tN-0g
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 09:22:40 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2591b7ea-1cdd-4593-87b5-9c117b49d171;
 Mon, 19 Jul 2021 09:22:38 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 11E6C67373; Mon, 19 Jul 2021 11:22:36 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2591b7ea-1cdd-4593-87b5-9c117b49d171
Date: Mon, 19 Jul 2021 11:22:35 +0200
From: Christoph Hellwig <hch@lst.de>
To: Roman Skakun <rm.skakun@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
	Andrii Anisov <andrii_anisov@epam.com>,
	Roman Skakun <Roman_Skakun@epam.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc
 addresses
Message-ID: <20210719092235.GA31566@lst.de>
References: <20210715170011.GA17324@lst.de> <20210716083934.154992-1-rm.skakun@gmail.com> <20210716093551.GA17981@lst.de> <CADu_u-OYA+Z_y-DBLxyUYGhmLVMtLggmZ_SnRiEtw9EGrO4oGg@mail.gmail.com> <alpine.DEB.2.21.2107160828430.3916@sstabellini-ThinkPad-T480s> <CADu_u-Psn5QpOyZ18_NCPx14DYxmGmSqVod=_RBC3A_A93tGUw@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <CADu_u-Psn5QpOyZ18_NCPx14DYxmGmSqVod=_RBC3A_A93tGUw@mail.gmail.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Sat, Jul 17, 2021 at 11:39:21AM +0300, Roman Skakun wrote:
> > We can merge this patch and create a new one for
> > xen_swiotlb_free_coherent() later.
> > Yeah, no worries, I didn't know that exposing dma_common_vaddr_to_page
> > was problematic.
> >
> > This patch is fine by me.
> 
> Good. I'm agreed too. Waiting for Christoph.

Fine with.  I've queued up the modified patch.


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 09:26:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 09:26:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158249.291436 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PXS-0005hg-Do; Mon, 19 Jul 2021 09:26:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158249.291436; Mon, 19 Jul 2021 09:26:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5PXS-0005hZ-9f; Mon, 19 Jul 2021 09:26:14 +0000
Received: by outflank-mailman (input) for mailman id 158249;
 Mon, 19 Jul 2021 09:26:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5PXQ-0005hT-II
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 09:26:12 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5a6edc21-e873-11eb-8af5-12813bfff9fa;
 Mon, 19 Jul 2021 09:26:10 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2177.outbound.protection.outlook.com [104.47.17.177])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-21-45yaosxyNrCCNEj7fpB6fg-1; Mon, 19 Jul 2021 11:26:08 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5597.eurprd04.prod.outlook.com (2603:10a6:803:dd::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 09:26:06 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 09:26:06 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR07CA0138.eurprd07.prod.outlook.com (2603:10a6:207:8::24) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.10 via Frontend Transport; Mon, 19 Jul 2021 09:26:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5a6edc21-e873-11eb-8af5-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626686769;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=TpvKOl/SIqEGF6Rn34hhDb+f33JgWt/bwbMjt7i3T/k=;
	b=hq43ZForrEUL6mdBQZNBn0fpuePPvMAHYZqqwL6sgjCOqf6JI9FF2k+mNI8ja0/FEAkHvs
	ysYu7nAqFGn/t7tbYRZEBM3RZi6fr2zxlybOwV4h1jKMKt43YeX8K5wKH+8mI9hV7MO1cC
	LcUYhkzFggZ4lwLLYTyALh0TYR1Ib3k=
X-MC-Unique: 45yaosxyNrCCNEj7fpB6fg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=H8xyUfVNq/tqBitXQNV1yiKxwP+oqlWIj1MG9hdG/PwjRLnh75bqIDtSamYRt1z5CLG8rilgCdEYn3S+tXS0S3clnbLiXm8keIfE6zeJHZX6cLHasnA3tUroXhS0zVggsxC4b5nOd3qzCZFvEBQoyiAnXZ3Ai/D5h1jvyaNmmiwzP6inEU6watEmgc5nuVBT6OZEgYsllx41+7KQQmk76nu1DfQbMA+p/uFlkEjWAaWaE5UClPnA8xVYV0hPyXGUUleQvq7Ca+gwg+y9UPUiHr+nMsI7Tq/OGSJX/alfhSqX50yV85+KnKwgEuj+4leR6gEWOjZroN5JGpb4aEY0fg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=TpvKOl/SIqEGF6Rn34hhDb+f33JgWt/bwbMjt7i3T/k=;
 b=g3fEiLqPcez2ZnM3vjgc1rxUZj80V/w7IPaNttmTomZ3vjv77Ly6Gycv6yeLvSHHuFQ3OxIRe6pXxo9P+FVyTGbV/72gKRrJHFUIJtFVVfa0kXaBKtTHNmJLejOLaz7FC4PdddM00+LHoiukrj2gVLIWnap3LWv31Ham1XfJU6MxeBtsQts2lDMCpNYuzRMv5GUH0BbKusXtiMXOGzqc5HUabIRG+aGL7MoX9uakXXxeK9AtY5YT9LBBZqK8dFjyFssiBXxPOIVnybZSG68BlUXxjiD+dlqn0Jbb/3UtpL4vWnkY0d921yhaTrdTcR3fCbi3hoP25EzdbWVshJGshw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and
 acquire_domstatic_pages
To: Penny Zheng <penny.zheng@arm.com>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org, julien@xen.org
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-9-penny.zheng@arm.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <48c59068-296e-7060-1352-f07338833378@suse.com>
Date: Mon, 19 Jul 2021 11:26:04 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210715051819.3073628-9-penny.zheng@arm.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM3PR07CA0138.eurprd07.prod.outlook.com
 (2603:10a6:207:8::24) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a761e972-7464-402f-b277-08d94a973c7f
X-MS-TrafficTypeDiagnostic: VI1PR04MB5597:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5597EB872F9607C7516922BCB3E19@VI1PR04MB5597.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2512;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	MLjFXq1JClv13mtDXWnw9z69h05pYcATrZfQoymXHm65GZQNbI3inB9BFxQlYLOw/QwTZwwF7rAXpYZ9RH0C7rKDHCq1obRMIJ1Ql24H8FqvTXDFPa2/zULs36ro8UXGln1tU7nVnKU1wMB3TiBrwbXwJz08VZclp7cNYXfNw0MuC+srJZuV4ScKJLGup2eLmG5rvkW/gCytfo6r4SSxcVKwmJ4T3ITUlmSTlMbxYoNJ+cRGuJO5PI37qqOQF/GoJ9Xbqvq3JNYmBsvcWU8VqG9KfAqnulSV7xwJxt0Csil/rNjsl3e4TilxF5yFJq1nhXUxuJ8OaNDdXxjBDbfgHaI2Fi83vFzEWWX+GKIoM71eHheydcINWkFBXDsSE1m2lw8Wen6eUbDR6rG14f9+eqFGo8II4LkOdKlICu2a+tFTxR4mwO2AMh9frXXVz5l5lg/afkR0WVmxWCsRg2AS1WH4ybudks+tFnYSUkTJqQVPMsK+x2v7Dnci89uExLFlxigfGZfAJUGrTEOvoG1Ep1LfFfkph6xU7rMRkyagB8MpyxxdgAtkUsJw9GZoe2mxZrPA/j57wkZWa9KWRFvwb0ECOt3045inDvhYNLe06VnMYh8MBUBXaYNpzLYgFpg3B6TVd+w5zG80UIXGnCADIQjo6vCTY50RnkwQB92mFxMUhjqP0742c80iNfHZduRo4XkkTlfm/m/f7rQTLO45YBWKwDHZRdnYEcWW7yKB5lA=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(39850400004)(376002)(346002)(136003)(396003)(26005)(6916009)(2906002)(53546011)(316002)(956004)(2616005)(16576012)(83380400001)(36756003)(8936002)(186003)(4326008)(8676002)(31686004)(31696002)(6486002)(478600001)(5660300002)(66556008)(66946007)(38100700002)(86362001)(66476007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?SU9VWWEvNXNqNCtXaENDRVI5OThSdm8zckZ3NThYL3ZiWU9SbjY4MS8wZzZo?=
 =?utf-8?B?ZWNlZzFQeW82L29OVkI3WjdzMVhDWXBycVM2RlRYaVF6c1JRQ2wzdDhvRE9S?=
 =?utf-8?B?dVUzV1QwREpUTk5rREsvY3ZhNHlQeWdCU0NmY2xkRnNrbUNzTlhxN0drVVEx?=
 =?utf-8?B?Vmcxb2NqV3dEemhISXVCZURIcS9IbVBpN0Fpanp0V0twVklNeG1ZaExKNERU?=
 =?utf-8?B?V3NaNUNzd1JaTEQwblUySWxqekFZYWN2QWltNXV6NVlLd3BnNnBpUlJZdGgr?=
 =?utf-8?B?OC9aWHBxZ0swdG9nNGhydnVlR2g2R2hTT21zZjdETU1DUE1vYXlRNDlpQXRH?=
 =?utf-8?B?YmhocHJMT0E2ZGp6MWhSM1Z2dUVGN3V3L3h0S0ZDL1ErQWFPMTN4amRsS0Z6?=
 =?utf-8?B?V05KUHAyM3RxekNXeWhtaGkxQW5POWpjdlZvSkhaYXQrRHVIeS9JVEVqOFNY?=
 =?utf-8?B?d2R2Y2VGRmVLN0N3WjRjdGdBMUJqQnBqLzBHV3QyNERsNUhSbU9VVGJLOFlx?=
 =?utf-8?B?ak50aUpPQWpnVVVpYnVjMVI2MHJETy8yb3MrSGx3dzZvNnFRbkdiOEVhU2Nx?=
 =?utf-8?B?ZENuMUJ3Qm5OZ0NyTGswZG1ack5KT2NlTUk1a1htdThVUVdnWUlUT0JNYStj?=
 =?utf-8?B?dE10Q0xhWHlkcURBMFlGN0dCRzNVUGdUUVdiUGR5TzVHMmVWajZHSi9uSlZ2?=
 =?utf-8?B?WE8zdzg3VmZBdTZqWGhsTEwxd1FIOThOQlVLSXpsWjREdnFHS1RWay9tQTA2?=
 =?utf-8?B?QUtzZ0gwZUM2V3lnTW9ZcjM1VVgrSXhBdjBVdEN4cVlTdW9rcXJFQ3RHcnlm?=
 =?utf-8?B?a3cyeTI3RTIybnV0MitSTlZnYUlUSEJWOW14WnpoWlVidlM2ZnBmRnFLS05l?=
 =?utf-8?B?bVQ5UFFwaU43d3JaK3loMEdQaENIa2t4aC9tNk8ra3g2dWpOM1B0aXB0ZzM5?=
 =?utf-8?B?WGN0MjdOQjNXTlZjOTZkenczMjUxdW11WlNJYmVzekRyb0tjOE9hWkVYSkJm?=
 =?utf-8?B?SENMOVJYL0VJTFVCcks4TlA4VkJsZFRQZTlUWm5DWFUwdm5SUlcrZ1NmWG1I?=
 =?utf-8?B?MTY5UHJFajFsOVU0ekVVRnNPK0Q2N0lLd3FDS3lvTzJEMTk3TnFCc1NscWFT?=
 =?utf-8?B?clZnN0dNVUl3clNETFNRdnp2cDkxU29LVG9mOUZmRzlCUk1DY3Jtd2dJbWV4?=
 =?utf-8?B?MkxUVGJOU3pnS0d6eXNwQnJEWS9oZWxQYXB3RWdvenptNTBsRUdxN3U3QVZY?=
 =?utf-8?B?MVhPSkluajJTVGYrYmk4VGZSUFZNaUl5Vi9rY3hWTm51eDFwYWRXSVVPNXJ1?=
 =?utf-8?B?QTdnSVlxZVI3dzZlRjZOYUw3a1pYc2h5RlN5QVU3UHl5V0dOQ1JQOVp4YzdP?=
 =?utf-8?B?YkMzTm4weDBYRmh4bU9tSXorR0JIR3l3bmcxU3VIRkpnRTZzb2JOY2cyNElE?=
 =?utf-8?B?Q2dFeFRNeHFBOVpTY2ZoUVBKNW5NS1NvSjZ5T2xxSHlUZXpZbUxsZmNqWHF6?=
 =?utf-8?B?WEpGVlAxRitzT281bkF3N1RMcHVXbE01UU9aelhNVGdtZjhHSEtoVmNnM3hu?=
 =?utf-8?B?Y0RSc2E3WlpGZERneHY0eWEyVVJ5N3ArNlk2bVBlNmpsaExaei9PQVdNL2RZ?=
 =?utf-8?B?bVFVYUNwZUFYcE9ESnFnSHRXbmEyczN0NUI1SE9CeFdoNG0xdzNqOElmOGhB?=
 =?utf-8?B?a2NYRFBZNUJ0ZmFsL3dYMWNsa3pWS0hIcUszQlVrRDZPQVNKeFlodjFnWXB2?=
 =?utf-8?Q?GpHDKulIb7yEUOMEMOjDpIDt/zHOJ90NT1HHJQL?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a761e972-7464-402f-b277-08d94a973c7f
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 09:26:06.5894
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 0D42IcL1eLroV7Nafd7iGuafmREHmrWxhLaUySbBIsT1+6CdgjICVQ2tCWmKw1abDNN2pqqIL15WlXEP17n7lw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5597

On 15.07.2021 07:18, Penny Zheng wrote:
> @@ -1065,6 +1069,73 @@ static struct page_info *alloc_heap_pages(
>      return pg;
>  }
>  
> +#ifdef CONFIG_STATIC_MEMORY
> +/*
> + * Acquire nr_mfns contiguous reserved pages, starting at #smfn, of
> + * static memory.
> + */
> +static struct page_info *acquire_staticmem_pages(unsigned long nr_mfns,
> +                                                 mfn_t smfn,
> +                                                 unsigned int memflags)

This and the other function not being __init, and there neither being
any caller nor any freeing, a question is whether __init wants adding;
patch 10 suggests so. The lack of freeing in particular means that
domains created using static memory won't be restartable, requiring a
host reboot instead.

> +{
> +    bool need_tlbflush = false;
> +    uint32_t tlbflush_timestamp = 0;
> +    unsigned long i;
> +    struct page_info *pg;
> +
> +    /* For now, it only supports pre-configured static memory. */
> +    if ( !mfn_valid(smfn) || !nr_mfns )
> +        return NULL;
> +
> +    spin_lock(&heap_lock);
> +
> +    pg = mfn_to_page(smfn);
> +
> +    for ( i = 0; i < nr_mfns; i++ )
> +    {
> +        /*
> +         * Reference count must continuously be zero for free pages
> +         * of static memory(PGC_reserved).
> +         */
> +        if ( pg[i].count_info != (PGC_state_free | PGC_reserved) )
> +        {
> +            printk(XENLOG_ERR
> +                   "pg[%lu] Static MFN %"PRI_mfn" c=%#lx t=%#x\n",
> +                   i, mfn_x(page_to_mfn(pg + i)),
> +                   pg[i].count_info, pg[i].tlbflush_timestamp);
> +            BUG();
> +        }
> +
> +        if ( !(memflags & MEMF_no_tlbflush) )
> +            accumulate_tlbflush(&need_tlbflush, &pg[i],
> +                                &tlbflush_timestamp);
> +
> +        /*
> +         * Preserve flag PGC_reserved and change page state
> +         * to PGC_state_inuse.
> +         */
> +        pg[i].count_info = (PGC_reserved | PGC_state_inuse);
> +        /* Initialise fields which have other uses for free pages. */
> +        pg[i].u.inuse.type_info = 0;
> +        page_set_owner(&pg[i], NULL);
> +
> +        /*
> +         * Ensure cache and RAM are consistent for platforms where the
> +         * guest can control its own visibility of/through the cache.
> +         */
> +        flush_page_to_ram(mfn_x(page_to_mfn(&pg[i])),
> +                            !(memflags & MEMF_no_icache_flush));

Indentation.

> +    }
> +
> +    if ( need_tlbflush )
> +        filtered_flush_tlb_mask(tlbflush_timestamp);
> +
> +    spin_unlock(&heap_lock);

I'm pretty sure I did comment before on the flush_page_to_ram() being
inside the locked region here. While XSA-364 doesn't apply here because
you don't defer scrubbing (yet), the flushing may still take too long
to happen inside the locked region. Of course there's a dependency here
on when exactly the call(s) to this code will happen. In particular if
other DomU-s can already be running at that point, this may not be
tolerable by some of them. Yet if this is intentional and deemed not a
problem, then I'd have kind of expected the description to mention this
difference from alloc_heap_pages(), which you say this is an equivalent
of.

> @@ -2411,6 +2483,42 @@ struct page_info *alloc_domheap_pages(
>      return pg;
>  }
>  
> +#ifdef CONFIG_STATIC_MEMORY
> +/*
> + * Acquire nr_mfns contiguous pages, starting at #smfn, of static memory,
> + * then assign them to one specific domain #d.
> + */
> +struct page_info *acquire_domstatic_pages(
> +        struct domain *d, unsigned long nr_mfns, mfn_t smfn,
> +        unsigned int memflags)
> +{
> +    struct page_info *pg = NULL;
> +
> +    ASSERT(!in_irq());
> +
> +    pg = acquire_staticmem_pages(nr_mfns, smfn, memflags);
> +    if ( !pg )
> +        return NULL;
> +
> +    /* Right now, MEMF_no_owner case is meaningless here. */
> +    ASSERT(d);
> +    if ( memflags & MEMF_no_refcount )
> +    {
> +        unsigned long i;
> +
> +        for ( i = 0; i < nr_mfns; i++ )
> +            pg[i].count_info |= PGC_extra;
> +    }

With MEMF_no_owner now called out as meaningless here, what about
MEMF_no_refcount?

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 09:31:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 09:31:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158255.291447 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Pc4-00074d-Uk; Mon, 19 Jul 2021 09:31:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158255.291447; Mon, 19 Jul 2021 09:31:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Pc4-00074W-Rv; Mon, 19 Jul 2021 09:31:00 +0000
Received: by outflank-mailman (input) for mailman id 158255;
 Mon, 19 Jul 2021 09:31:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5Pc3-00074Q-Ui
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 09:30:59 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0634365e-e874-11eb-8af5-12813bfff9fa;
 Mon, 19 Jul 2021 09:30:59 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2055.outbound.protection.outlook.com [104.47.13.55]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-36-yJMkv-vLPFGsuI4Cvo8vjA-1; Mon, 19 Jul 2021 11:30:57 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5469.eurprd04.prod.outlook.com (2603:10a6:803:cf::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Mon, 19 Jul
 2021 09:30:55 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 09:30:55 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR3P281CA0052.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::23) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.8 via Frontend Transport; Mon, 19 Jul 2021 09:30:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0634365e-e874-11eb-8af5-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626687058;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=lP3PAa9ImJi4V7NcEa9ZEhbjp/V50ejF5y5yP63kPJM=;
	b=TlWRu37bldpm/iEbAe2D88MbUZO+meLBPr7UN+yNfnN3EFS5DRcGt7C02IUyyGkq0kTdSj
	9k+Yen0FdoVoGgyabnjZtTBkQzFN/gPz1gtiN/uUtya8B6LK9797DviApWPD53F4ik5v7t
	kKuC37Qe+SkhaX5icL/Yh+blgTMgQqo=
X-MC-Unique: yJMkv-vLPFGsuI4Cvo8vjA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UFjQ89eApk4l/1dVxqNdEaVrpuzyJehiRR0MJnDcnRE9cmDF7dzAN+CKDSVKsZAvbGMC7f81LODTSDf4dZ1qO+L3/0KLc1F6r//S/5ENHSOtHRV02J57XKg3RzUJDZwSwTS39EfDtfGoGeIQkbtbrJmqj2op9h4y/xFwh+XxNAcAeGr0TqzXuZmMOHdHJ9h+wdBK56qps+4+jGCQabJ9H5Kj4d7TXQGVCD1X1RrOV5r2OOqvRF0GVBHNJvXITPQr7Zd7w9vV4nvTdagdF/hRPImPjg1vVsuSBWrqND7s9HuTEIxO3y0myyvYtPk6dwFirMErgKI/yyK3lzC85g9G7w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lP3PAa9ImJi4V7NcEa9ZEhbjp/V50ejF5y5yP63kPJM=;
 b=De/4q1CXpCNBG7ADh6TuLl0W685INxTNR9eSzaBZ2RHDy+D3IUpr+RrbxoPnkTLijrCc4sc/ApzywEM7yYppO8OqRXawJQgdEtW6ODGtTZhBjA8T/qyXnine6fMAt2O4XtKhWHRtAMkC/0YhLOUwBd8GfIbRs6Y0bvjODy7Jj/IAz3o9qD5nyXxf2M9kJ8lzpJVHjEc9q5LD6QPI4kIFqUORQJllaN0yhStMGwqLZrzsL/IPPYpvL811NKveSsaqZJ1Y0aBJP/k3cucjhuCn7i4glDMm8GMdE2+T6ZJXBLanLybgGHl4ruG3lovnyqFz0Yt8XkQBpcsOyWdlODBjkg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] x86/AMD: adjust SYSCFG, TOM, etc exposure to deal with
 running nested
To: Julien Grall <julien@xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <cd23fd18-66f9-55c7-4a1c-a50d66628d69@suse.com>
 <d8913811-2e90-255b-98c6-44e262e113d3@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <7786c4b6-15db-e026-45ee-01f851691cd6@suse.com>
Date: Mon, 19 Jul 2021 11:30:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <d8913811-2e90-255b-98c6-44e262e113d3@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR3P281CA0052.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:4a::23) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 67a79533-1d79-4e61-079e-08d94a97e85d
X-MS-TrafficTypeDiagnostic: VI1PR04MB5469:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5469D773460816F0DC9FE00FB3E19@VI1PR04MB5469.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	GJ5f4lgAgSYRLkXJMuLiICbHcrLpKa4NiZlYNV0WVEHvbOO3Tk+SB8b5eQnyRwvOlEq//9Xq7ZNAomT0LGbVftPaGNpnge9BdOX1D8iWSqaFGQLhEnTKrI4PWq/1jHe/7CI1UNpSLuAhwTH+n0yXs6akxuZ+3vIL+4/SV7WHpvnbwWbtIp9yh29HtXthTdZCpGWRLFNdLwbJC5y7uZ08wjWTJfo0k2BLAPhl1cfAF2NQR2G9jqniC7ojjPumuEoFaN3JkpGDkAQ+TB8gRv+Yfl6HSAn0+ON7WMe6h0y6u2FmWLZ6lyo1h9VnCppbRxRyaXK/EcxzHyM1GLr0E1jS+dukV46JIhwe5p/OLU0qyuALDhObGXZXAxokAb9vJgUVb0HaJ+/ZYfz/l9TP57Nso/M+MAAnrCsX2rh3RF0UhlVlc8kezJ+LIsAfn3XirZ3JI4w/NARqyd1E7LsdZTcbtGa7jdEg/YpqURzwaHt7dhgKIiaMPLQVhzVT0L1vIERxvoZc9ka8HqmP74/iRJ4Eae9bjMasQd+lPOjva/+y6BdtcYMnEU9QZsWS+r3NGSRDyW+TYDrsj2bmefCF9rEACTJs81lrBeb6T7JvWArk3DdbFR9BAfZMYCfVZ2EnvEet4wg13G7lwa5d7SjTdIDb7EcDVdM9vOKnqNlaMyBL3wXvohnTvceA0Ar9gfnmr+nNIln0NTfBACLTpxczaKTtCjokrYMhW5PVfBm+scBVewk=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(136003)(366004)(376002)(39850400004)(396003)(186003)(83380400001)(53546011)(5660300002)(26005)(86362001)(6916009)(16576012)(8676002)(31686004)(38100700002)(66946007)(316002)(31696002)(2616005)(956004)(54906003)(66476007)(66556008)(6486002)(4326008)(36756003)(478600001)(2906002)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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/g1Qr?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 67a79533-1d79-4e61-079e-08d94a97e85d
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 09:30:54.9503
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Syk5adQD6oyzYN0F9IzzCZ2Cr5CC0zkCJip5W550pQKkCnqkflLxpvvZu8RGDlN9VgwmpLaFEgZjFyBKgxscng==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5469

On 19.07.2021 11:18, Julien Grall wrote:
> On 13/07/2021 08:22, Jan Beulich wrote:
>> In the original change I neglected to consider the case of us running as
>> L1 under another Xen. In this case we're not Dom0, so the underlying Xen
>> wouldn't permit us access to these MSRs. As an immediate workaround use
>> rdmsr_safe(); I don't view this as the final solution though, as the
>> original problem the earlier change tried to address also applies when
>> running nested. Yet it is then unclear to me how to properly address the
>> issue: We shouldn't generally expose the MSR values, but handing back
>> zero (or effectively any other static value) doesn't look appropriate
>> either.
> 
> IIUC, the unsolved problem is a Linux 3.12 dom0 running on top of the L1 
> Xen. The kernel is quite old (and looks to be unsupported), so are we 
> expecting anyone to build a new stack with a newer Xen and such dom0?
> 
> If the answer is unlikely, then I think it would be fair to keep the 
> limitation until someone comes up with such setup.

I might want to put it differently: If you want to run nested, you
shouldn't be using this old a kernel for your Dom0. You saying "looks
to be unsupported" is, aiui, a statement from upstream perspective,
which distros may have a different view on.

>> Fixes: bfcdaae9c210 ("x86/AMD: expose SYSCFG, TOM, TOM2, and IORRs to Dom0")
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 
> Reviewed-by: Julien Grall <jgrall@amazon.com>

Thanks.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 10:00:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 10:00:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158263.291460 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Q4L-0002NQ-Ed; Mon, 19 Jul 2021 10:00:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158263.291460; Mon, 19 Jul 2021 10:00:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Q4L-0002NJ-Bi; Mon, 19 Jul 2021 10:00:13 +0000
Received: by outflank-mailman (input) for mailman id 158263;
 Mon, 19 Jul 2021 10:00:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m5Q4K-0002ND-IJ
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 10:00:12 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5Q4K-0007gX-B8; Mon, 19 Jul 2021 10:00:12 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m5Q4K-0005z7-57; Mon, 19 Jul 2021 10:00:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=o8eYTXXx7kiLl/FcNJLbtG9BRtFJUEAFwN79yDm6kl0=; b=NSOqaVJrH4oGfCqfvn9vwe9Q1m
	FZfR7BUrhiHBmD6AUkmAWmsmHQAHqvEHq3/OBgY7ZwnVv7nJTAaeIlwZ6KOlV2vKL3g1whZi9+Yjf
	Pgyi8mxtbwfY/fBNhddBPHr5aCwPEW80WWAUAuXgpG7o3lekN6+4DAt8xpE0+xBt9hQw=;
Subject: Re: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and
 acquire_domstatic_pages
To: Jan Beulich <jbeulich@suse.com>, Penny Zheng <penny.zheng@arm.com>
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com,
 xen-devel@lists.xenproject.org, sstabellini@kernel.org
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-9-penny.zheng@arm.com>
 <48c59068-296e-7060-1352-f07338833378@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <7753fe1f-7a5c-6205-a184-25190ad43286@xen.org>
Date: Mon, 19 Jul 2021 11:00:10 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <48c59068-296e-7060-1352-f07338833378@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 19/07/2021 10:26, Jan Beulich wrote:
> On 15.07.2021 07:18, Penny Zheng wrote:
>> @@ -1065,6 +1069,73 @@ static struct page_info *alloc_heap_pages(
>>       return pg;
>>   }
>>   
>> +#ifdef CONFIG_STATIC_MEMORY
>> +/*
>> + * Acquire nr_mfns contiguous reserved pages, starting at #smfn, of
>> + * static memory.
>> + */
>> +static struct page_info *acquire_staticmem_pages(unsigned long nr_mfns,
>> +                                                 mfn_t smfn,
>> +                                                 unsigned int memflags)
> 
> This and the other function not being __init, and there neither being
> any caller nor any freeing, a question is whether __init wants adding;
> patch 10 suggests so. The lack of freeing in particular means that
> domains created using static memory won't be restartable, requiring a
> host reboot instead.

I am open to request an host reboot in case of an issue. Although, it 
would be good to have code in place for that.

Regardless the reboot part, I would still expect the domain to balloon 
in/out memory. This is pretty broken today because Xen would end up to 
give the memory to the heap allocator and the next allocation would be 
through the heap allocate.

For runtime "free/allocate", we may want to follow the same behavior as 
direct-mapped domain (i.e. GFN == MFN): the page will not be given back 
to any allocator and we only check if the page belongs to the domain on 
allocation.

So adding __init for acquire_staticmem_pages() is probably fine.

On a side node, on v2, I have requested to keep track of the list of 
missing pieces. @Penny, where can I find the list?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 10:25:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 10:25:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158292.291483 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5QSQ-0005Ak-Jx; Mon, 19 Jul 2021 10:25:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158292.291483; Mon, 19 Jul 2021 10:25:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5QSQ-0005Ad-Gc; Mon, 19 Jul 2021 10:25:06 +0000
Received: by outflank-mailman (input) for mailman id 158292;
 Mon, 19 Jul 2021 10:25:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5QSO-0005AX-H9
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 10:25:04 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b586be02-3678-45c4-bf6e-829aecba0a72;
 Mon, 19 Jul 2021 10:25:03 +0000 (UTC)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2053.outbound.protection.outlook.com [104.47.13.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-15-MNDqJgpeNYWbLXDEobEF5w-1; Mon, 19 Jul 2021 12:25:00 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5902.eurprd04.prod.outlook.com (2603:10a6:803:ed::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul
 2021 10:24:58 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 10:24:58 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0004.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::9) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.10 via Frontend Transport; Mon, 19 Jul 2021 10:24:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b586be02-3678-45c4-bf6e-829aecba0a72
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626690302;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=POn8hIB2H4ihf9wSYMF//Q2JeeVDaGgoYKaiTYjrByc=;
	b=edS43cB5PYBVuDz+k6JCEFyen+odxsVY03lBbj56F6VrR3Ku4LheNBODfm0nTEl3qKJ5NF
	PqDclhYyngC8DnNROl4b0IRYLKhYtlBpRz7cTfF/CstmPK9wJBzy5GNLnJeUAyb3Gj38mj
	jxhU1ygJ83aJkfhD6uAruJpbILsWINM=
X-MC-Unique: MNDqJgpeNYWbLXDEobEF5w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ImwkhIYAcMtE3YK4BYHcupWUMhBesd3UzPJo68DZ4FM0yhA8LeocaXzFaQFMK707Ff6PCi/lGbQdNKTBUcJ/ULiDzxSNJ8AuwivDNGS9mx3Jqblh28gafLF3MgaKCGG80Q/wEkE8RBJ4MeNl41rDWFlO2WVZgdzdTM3w59GFPlNcfKDgnzNNoALXw8157D/tGamGhDppPwNCJvlo97xUYbfKFR6GBd3B0nWVXUnmthJ/ypGnWS4GkaIOrMVFxghHuyEzNeD+gpOcGGpfC7z5CyQ5Z/5haig/CuyKricyXkeshIBpWoK3WiwS8Q4hctpwHD0R/MyaxXe2pGLRdO7zrg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=POn8hIB2H4ihf9wSYMF//Q2JeeVDaGgoYKaiTYjrByc=;
 b=Nm3TwVtfMJJ3yq8v5z6UfJHzQYEpXxStGceXuxEy2g52oV8rCyLQWQ6B2aRcCo09rxjb5nGasnZBWtUn1G61qkNk5vMB50t2YFz0oci+MLFkLR3aEYhyjhWbI6c2yG8/u2jbaOhThiE+H36EmZW8GpI6Yx+J9XUvFADjFNpT9kOh4LHXdEF9gN3QwGgpRdKX14KusrJbsWtFd5n8j/4mL1YSP40uHVsFXEP2/vz2hOEbERDtseLc1hAWFdlGmSXqhQOp4t7NKd55/ThQmYJMwlYYh6rx3OMtLhXRN4bIRtI5kf3jQtG11Oe4blu1CvAicRgqpzcI1tA+WRrfX43TXA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v2 06/10] xsm: enable xsm to always be included
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-7-dpsmith@apertussolutions.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e4aea947-ae36-7791-dd95-94ce0e60a62a@suse.com>
Date: Mon, 19 Jul 2021 12:24:56 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210712203233.20289-7-dpsmith@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0004.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:15::9) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b2175454-c25f-4437-f5cf-08d94a9f756d
X-MS-TrafficTypeDiagnostic: VI1PR04MB5902:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB59021F9367C5E6BC6BD4DFE1B3E19@VI1PR04MB5902.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	RdCUeKldJH8XJ7hCRXxu+BKN9TnaXkSiKdfHAOLcv1nSnlqsZIIWPEcyeGB+ikkstD3Tjrn0en7sh734nLu9MvMUN6WPo9cEmlHHiiDRGhLjmq5M4+mtZnQIgB3RklJaeN+dzTaSgV3tKqkJq+0aEe/gFtV2OZL/dy2c6fuyyqAmy2BO4eh+SQQtiSafgVgijkn3q32t8y2j3gtOc5T0lBK8lBXJF61TCaltD54eIlZD/n9DYU9fQD9AIQeoWTd2QXBMRgvivaR5vsxhHWyWgWjSkm1dFuHisB6TVAwjicUE7PTO98I/kvhfmc45Zvw9humabsJp78hcgL0g3XaflWtRlde7irxsKRPVR7cYwHiroEokVGgNROVK0FTPewbLumF7cSYHOQCrUMQqB1zkM4cjOPE8cMGqWCwlvZw7LiQZ8ojkcG4uSL1MxYkXguEHXeZSBWQPIPfW4ilzjxc9sdSdmx6AQmUaksKnYYo5Omm8eEeiE36gCb88zbE80XYRQaxIdCleFrYcE3g0KM9k6PItV/JtXFuvWaoqHx+vokhymBvQDjBGk7fSx7/hgM2pztZsopD6H96F7bWtrSpiphzQ3Z74K5PeyFn334WW56g9dhIlXl6ZVQGfZBqPfMIDoDE5jBRCAFPMPYnwwTrmus86aaoESHnHPKtCrmVFbvSAKy7Imc9deyN3Jing2jJF2h9uCm7X+ht8qh51NiijD3VKp1O8CCn9+b2QeOEW2U0=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(39850400004)(396003)(376002)(346002)(31686004)(36756003)(86362001)(8936002)(5660300002)(53546011)(8676002)(316002)(66476007)(31696002)(4326008)(66556008)(83380400001)(66946007)(16576012)(6916009)(38100700002)(956004)(54906003)(6486002)(478600001)(186003)(2906002)(26005)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b2175454-c25f-4437-f5cf-08d94a9f756d
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 10:24:58.0941
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Ww3JKSOhypuIZOtDghyVlYCr7l1uLBSPqFAB+XTZLqnSe+Yu+LYBbG2EyDzDjI/DYiBiVpGdsY79EkwU9JUekw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5902

On 12.07.2021 22:32, Daniel P. Smith wrote:
> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -200,23 +200,20 @@ config XENOPROF
>  
>  	  If unsure, say Y.
>  
> -config XSM
> -	bool "Xen Security Modules support"
> -	default ARM
> -	---help---
> -	  Enables the security framework known as Xen Security Modules which
> -	  allows administrators fine-grained control over a Xen domain and
> -	  its capabilities by defining permissible interactions between domains,
> -	  the hypervisor itself, and related resources such as memory and
> -	  devices.
> +menu "Xen Security Modules"

I remain unconvinced of the removal of this top level option. I don't
view my concern on code size / performance as "unreasonable" (as Andrew
did call it) when comparing with the current !XSM configuration, and I
also remain to be convinced of people who had to simply answer 'n' to
the XSM kconfig prompt being happy to make an informed decision for all
the (previously sub-)options that they will now be prompted for. As
said before - it is one thing to re-work what exactly !XSM means
internally (and the conversion away from inline functions may very well
be a win; we simply don't know without you showing e.g. bloat-o-meter
like data). It is another to require in-depth knowledge to configure
Xen that previously wasn't required.

Keeping the top-level option would then also make it unnecessary to
alter some of the (prior sub-)options' defaults.

As to Andrew previously having said

"There is no such thing as !XSM even in staging right now.

 All over Xen, we have calls to xsm_*() functions which, even in the !XSM
 case, contain a non-trivial security policy."

Yes, this is one possible viewpoint, which I simply do not share. I view
the xsm_*() calls in the !XSM case as simple surrogates, not anything that
deserves the name "module". This is actually supported by the help text
of the XSM Kconfig option saying "which allows administrators fine-grained
control": There's nothing fine-grained with what currently is !XSM.

> -	  If unsure, say N.
> +config XSM_EVTCHN_LABELING
> +	bool "Enables security labeling of event channels"

Does this really need to have a prompt, instead of simply being
selected by the module(s) needing it? IOW what do users gain when they
answer y here but n for XSM_FLASK?

Furthermore, if the prompt is to remain, then I'll have to again
raise the question of ordering of options: This way, via e.g. the
"syncconfig" or "oldconfig" targets, I'd be asked for the setting here
when, if I'd then also set XSM_FLASK=y, the question was in vein - the
option will be set to y anyway.

> +	default n

May I ask to omit "default n" lines. I'm unaware of anything good they
do.

> @@ -265,24 +262,26 @@ config XSM_SILO
>  	  If unsure, say Y.
>  
>  choice
> -	prompt "Default XSM implementation"
> -	depends on XSM
> +	prompt "Default XSM module"
>  	default XSM_SILO_DEFAULT if XSM_SILO && ARM
>  	default XSM_FLASK_DEFAULT if XSM_FLASK
>  	default XSM_SILO_DEFAULT if XSM_SILO
>  	default XSM_DUMMY_DEFAULT
>  	config XSM_DUMMY_DEFAULT
> -		bool "Match non-XSM behavior"
> +		bool "Classic Dom0 behavior"
>  	config XSM_FLASK_DEFAULT
>  		bool "FLux Advanced Security Kernel" if XSM_FLASK
>  	config XSM_SILO_DEFAULT
>  		bool "SILO" if XSM_SILO
> +
>  endchoice

Nit: I see only two consistent formatting options here: Either there is
a blank line ahead of "endchoice" and after "choice", or there are none
in both places. I don't mind which one it is, but I do mind
inconsistencies getting introduced.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 10:32:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 10:32:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158298.291495 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5QZz-0006hN-C2; Mon, 19 Jul 2021 10:32:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158298.291495; Mon, 19 Jul 2021 10:32:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5QZz-0006hG-8z; Mon, 19 Jul 2021 10:32:55 +0000
Received: by outflank-mailman (input) for mailman id 158298;
 Mon, 19 Jul 2021 10:32:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5QZx-0006hA-AI
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 10:32:53 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8bee903f-1036-4729-a81b-e019b5ae9ae1;
 Mon, 19 Jul 2021 10:32:52 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2050.outbound.protection.outlook.com [104.47.14.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-22-9EuQThn-OBe_Wvm3wHeTLA-1; Mon, 19 Jul 2021 12:32:50 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5168.eurprd04.prod.outlook.com (2603:10a6:803:56::33)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Mon, 19 Jul
 2021 10:32:48 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 10:32:48 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR2P264CA0007.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Mon, 19 Jul 2021 10:32:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8bee903f-1036-4729-a81b-e019b5ae9ae1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626690771;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=+sI4hlX+E6U5otfUjBvU/8tmDZUTo8mfolZXvGicamc=;
	b=iSqCs1ymVaZaJjTNs85vromiYctS2AhGwapfnlvAOb5vdqRp+1/JcQ+nbJf7NnvBl8ErWL
	6QnonMewvQy9doP4/64xqirGIinvPa9+JdseueN2EQoH5dHBiBhku73SaCQus2cpf0KAYq
	jCRcicZ6XQ5LqQ4tvxL2hLIEFuyGSOM=
X-MC-Unique: 9EuQThn-OBe_Wvm3wHeTLA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=m7Cu93cALr8HFByyxIKcW3UMCFL5vgCeoybhCamIjK6jOU9SR69CyhUYZaT9Z3rqpZU6dY6SNjyynKAlFObMxFYzWayhA1OdGMcTzR+FxKmWx7NcnLOwOKEj2+jFPxBgcvt2e37rPpwbbMiWhpSY8oJY/93YQC9Y52i4DN0+JzNz/ei5BVzJhKyofzJZu7pJoJqdDsoyc4sqTovZzsLAN/iXimaDP2VIyJK95u7a3tAXB4WABrmoBV6zmimYDF5kq9UvgdfazcceGTgLdaCORqq8sP9Adxe1E05KUVPeXFaWmo6+XJyGOEHrYkbJUIdAexyBwzAOwtzhMFUtrL1jvg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+sI4hlX+E6U5otfUjBvU/8tmDZUTo8mfolZXvGicamc=;
 b=MiE7p/r4A9r0E9zuoaZve10bLk3+qcNKAI2nTl1RWHlGkWzyx/mYDU3KaYycYd4X6nca7L2aqWqoXqwutiBDqFiznaUo8ljCqrCYeL76hK6uZyk/vC9GrGkZb7tV3RAriKz3D9vfVez3zLYRH6jmS6M4leUDdW99rV3yAQWm/61asANTF6J7+QVGoGx38wA+2A66zIU4Qw+vS7IBc2mP1SlN5+Tfkm/b4MeAtwBdDrFVvIYU9cN5n3XRJ5MEqjva/cHy6S0ATFMaEsV8ww4ovhGyp3es/HHYJfqFhfn9agKmiKCNx+updiVFdWbDCB7YUcEXylkLEJbFaJKJZlhNxQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: preparations for 4.15.1 and 4.13.4
From: Jan Beulich <jbeulich@suse.com>
To: Ian Jackson <ian.jackson@citrix.com>
Cc: George Dunlap <george.dunlap@citrix.com>,
 Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
 Anthony Perard <anthony.perard@citrix.com>, Julien Grall <julien@xen.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Message-ID: <51ef91e4-24bd-dc95-98fd-124007634978@suse.com>
Date: Mon, 19 Jul 2021 12:32:46 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <48cc22b9-6d0a-2cfc-ce34-6aabeb84b160@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR2P264CA0007.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::19)
 To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8db23d77-6cfe-47ea-20a0-08d94aa08db6
X-MS-TrafficTypeDiagnostic: VI1PR04MB5168:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5168281B1D435174F8949BFBB3E19@VI1PR04MB5168.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	aC0/LUsln46yUinZx8gBd4hZPbnFVHvnBCpAs0biHrb9snI3KSkpvG2Tji6GtPqMNlArZQT5c+z733fkg3Koz3nU4Y/itfl64B9Wt+gQU0pgDvoC8HREc4SMV37A09yPbGb4uBt68nd3VnR3L1mce6BbqIN56AnZC6hmDQ7JujGA07yQNVGfAno0i69xv12K9XzoeJBk5NrnbpTDaZUlHXhgP1o6PQ0tAxmChanqdwmbeu+fIqOpSMoJkpqCl6lOvTgyXmZx747O4BNr40i67QytvZ4PyxFJhpbulSMEZbQZaTRu9cfWvPeWsByO59awgx3dCwTh76msCCRTyl2LXVCqkV6kPLEOvGHCUWChQqKczjg825ssKQXMVButLRCq0GnyREmIOYJ+1L9IzFETMWME/n42k6Cfto6USCSYuNQ+BxKiCvsFRml6bobCY3331OM1cuC4n49H/4TsEPn+KUrDDLXzcekHJ3gaRd8SOdBjmBilHrSRXrCnmAlvtb3FaVhjF1w1qYAoXJ52XrErBBEzZiVaazCEk5Iv9lVyGXRJlUxHY6f977jIPc+NKPOikhjd51h4oysoDZjf/bpcGsRc5N5H1RloAVhhhfKn1PMZD47TswZ6o0eK9uYVCwV9wCmL588fyrWT0FwCS30lDG44hHxzpb1NVsNnf7S7RtV0bFa8yEQiuBSzN+jSB+baHeGTbNAUFrxW0EnYvZ0f7i7b67YOdiQoFntub6EfjEaKu8OBRztB/iNVdgOEsM4j
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(376002)(366004)(39850400004)(346002)(136003)(53546011)(6916009)(4326008)(5660300002)(2906002)(54906003)(6486002)(66946007)(478600001)(31686004)(8676002)(186003)(38100700002)(8936002)(36756003)(316002)(16576012)(66476007)(66556008)(86362001)(2616005)(31696002)(26005)(956004)(4744005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?eVFHeTlnbzBLbW5tYXRLMXRlcENiR1RJQ0l5U0IrNHBjTWNWZkxIckNDL1FY?=
 =?utf-8?B?aVd0amNrQXZERGlZQXorVVFlNUFMRHplZXVQQVA1QkRrb29VbkhqSFQ4TVRw?=
 =?utf-8?B?Q3lJUTloZitmdm90TFN2cmpiR0syV3lSTFVuNFFSRjRuMEQxZVZpdk9IM0VX?=
 =?utf-8?B?WEdFUGFGYXlnQnhUQWd2cWJyU2F4OVlBYTZZS0ZYQldzQ09FVkNsSWZadWpq?=
 =?utf-8?B?MnpEbUkxWE1LdldTS3NTckNyWUVlekN1ZWFXYkxsNFozVHRpTHM5Qk5VZVFT?=
 =?utf-8?B?aC95UzJNT0Q5dU1sNEl0T3RpcFd1MmhSTGJIaERaS1pCeWpXTW43a0xnR3B6?=
 =?utf-8?B?bm1qZDg4NVNwcUxEUXI3UTM0R1NLaVhJQVBGMzNJa0pZV3NBNjZxZjlJeEtS?=
 =?utf-8?B?NE5FMTBSQ3NuVU5FV3k0U3FmQ2NzRUlVY1M2bCt6b05PaWpXeTRHQi8vaDFD?=
 =?utf-8?B?WDMzbUJLWTJjWi9UeG1QN2FINzdDQWZoWGpjVG1KYy9JdzZBZkdhcWh0REs4?=
 =?utf-8?B?ZUgyRGNLZUFudld2N2JPNzB5TW5oL2hndnZrMGxwM09uQm9oSWlpb1VQZ21O?=
 =?utf-8?B?SUtGbStQME8wMnhCZjFUSHJlOVllS09kMCs5eVNwaitaU255TkNKeTBUL3VK?=
 =?utf-8?B?YVZ0UUJhcnNvc3R2dDFUc3NrUHpwSDkvdHFZV0d6Wkk2dnFneVRDcmg4ZFYx?=
 =?utf-8?B?V2s1UU1TTzJBOEovQm13MHcxcW55bjhvZGdpWXRPUnJoM0dsLzVWVyt1b1Nj?=
 =?utf-8?B?a1AwcEZiNno0bFpqVU5ZblZ4eGUxWU9GRXM1SFRxVWl4VnFON1ZLdXVod3Na?=
 =?utf-8?B?cnB0bE8wSHRRaWJnT2RsMFlCY0gvV0hEb0g1Rm5UK1VnakZZcmJOMFE4OU4r?=
 =?utf-8?B?azJxbU01OFlRUW12emtYdXJZeTljYVZKTTRHYjlidXNiYXUzU3N3MXovRHRV?=
 =?utf-8?B?a2svTitScDA3b3ZGNXA4cnBBOG1MT29BZmh5Z01MdzQ1NCtGaU1mOVBqN1gz?=
 =?utf-8?B?UHZwdzBPb1llNEVvSGVsaUdGc3RXU1JGa0Y5NEFvb3BZd2dYQjZPT3Z4Z2Jz?=
 =?utf-8?B?Z0d4MmhQbm9heUx0a3dWQXp6VVhXUGVzVG5BTjd3dHJRdGRDQ3dLU3FyeENI?=
 =?utf-8?B?S3FQeHdCZ3YxZXgrQ3NmaU1BZFR5YkhKUHlOdGIrdXJVYUJjK1JiWXhQRDVs?=
 =?utf-8?B?cHZXV2R1ck9YdXhMK2lSeE1xbjdabjcwbGxabUdqMlNXRXJkRklUTmpoR2Fs?=
 =?utf-8?B?Q0pzOExCeFZ5MUQ1eU1FeDh1c0RpRVpQSVBpUnh5eDZkYjF3Zk5mQ09MRHJL?=
 =?utf-8?B?Zzh4amhLVktJdWRNbk1TZXpWMElYUU1JR0NRNlNkd214RmNKZnRwbmhxZ1JS?=
 =?utf-8?B?TXozRkI2N2EyTXFoYzk4aDMvejhJZW9ZemxDT2FPMlpoVnhwVHVNZDFGMnpq?=
 =?utf-8?B?Ni9MZ0tIMW9hWlpLaENrQWcrcitsYXBOUVdWamxMTlNkUFgza2xmczJ2aWZv?=
 =?utf-8?B?YkZleTJMdkVWOWV5L01lRGRtNEtGQXdwOGVNNEpFOFRpTGpXTW04a2c2UUNo?=
 =?utf-8?B?MEJSRTAyOGluQWFGK281YzhBMitYRHRRY3RoNXpUa01ZWnFkeTRYN0FiSnIz?=
 =?utf-8?B?MzRLUFppS3FRY3JtSWZqMmwrQTZDSlEycUpZenJrYWc1ME5SWE5rLzh2aDFm?=
 =?utf-8?B?K1JrRi85OWFmMGZIOHQwL2Z0WWlDN3Q0WHFzak9wNDZ6L2FQeDF0QmYvQ0xj?=
 =?utf-8?Q?qXsenLC0vuQENCUHHg+qiqQfHfFvbASGV2fuGML?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 8db23d77-6cfe-47ea-20a0-08d94aa08db6
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 10:32:48.4270
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: Pg0UUw5ftm4QbQ4EqS/phkPQn/fOWy/iV2X7nr1HTRKsTmeoxTc9CtKti6CAg/5lt/W4JfwNBoLgSXiq5f62fA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5168

Ian,

On 15.07.2021 09:58, Jan Beulich wrote:
> Beyond this I'd like the following to be considered:
> 
> 6409210a5f51 libxencall: osdep_hypercall() should return long
> bef64f2c0019 libxencall: introduce variant of xencall2() returning long
> 01a2d001dea2 libxencall: Bump SONAME following new functionality
> 6f02d1ea4a10 libxc: use multicall for memory-op on Linux (and Solaris)

in addition I'd like to ask you to consider

0be5a00af590 libxl/x86: check return value of SHADOW_OP_SET_ALLOCATION domctl

as well, now that it has gone in.

Thanks, Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 10:47:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 10:47:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158306.291516 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Qnl-00004r-Ns; Mon, 19 Jul 2021 10:47:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158306.291516; Mon, 19 Jul 2021 10:47:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Qnl-0008WQ-KB; Mon, 19 Jul 2021 10:47:09 +0000
Received: by outflank-mailman (input) for mailman id 158306;
 Mon, 19 Jul 2021 10:47:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=f5c2=ML=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m5Qnk-0008WK-4J
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 10:47:08 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1a428b62-a365-417d-afb0-094e33c6195d;
 Mon, 19 Jul 2021 10:47:07 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1a428b62-a365-417d-afb0-094e33c6195d
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626691626;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=nW5Eakjigrup7MIKKykkXAdH5RJYTrC7KTBeqfX1idc=;
  b=KgqVIjM+IYcVqnuf+64qMM8788cHuI6iMUnO7Nj31glanvrdw1qf53lc
   +cZaN96en0GIRaGrAMEJ/+Bj6kvE54OfTlYbUIWm70HvfAoL58ZYdKtfS
   S3URmLFz0hOL/gessl6UvFJn1aGFfLtMJXHyNZpMleLSwg0tHybO1RuhZ
   I=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: Nh3d0PwYnPJ/IoxcbBcl0hsP4P/Grmng47bky05K5cTS9U2jPjRwsqFaS3WxT5vwNA/PTBAJsf
 UgVeKCMb5vxgd7yrcWF62Wbkjoq2DjLyhbNKH8e7YSEQ8Px0YmatP5/kmiMKq1WMd30M+YNSSD
 msD6wRVzrLWiGyIlBM+yj1Z9k+Hqg13o/S1l/+LBDVAE14Dk3mh47PJiyrjsE7jnQD3quiM8cP
 fMUc1kiNCbUC8epW7vH4go/N/bksM7YujlfFIOMirGbDbmi/K3TSeRLyBoxffniJc2R3QZ+vBQ
 WtNkIhyFYvDtOGvKR4vXeqrs
X-SBRS: 5.1
X-MesageID: 48555527
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:+nmE6ajHXfTh7TgTfFR/vHJ3pnBQXh4ji2hC6mlwRA09TyX5ra
 2TdZUgpHrJYVMqMk3I9uruBEDtex3hHP1OkOss1NWZPDUO0VHARO1fBOPZqAEIcBeOldK1u5
 0AT0B/YueAd2STj6zBkXSF+wBL+qj6zEiq792usEuEVWtRGsVdB58SMHfiLqVxLjM2YqYRJd
 6nyedsgSGvQngTZtTTPAh/YwCSz+e78q4PeHQ9dmca1DU=
X-IronPort-AV: E=Sophos;i="5.84,252,1620705600"; 
   d="scan'208";a="48555527"
Date: Mon, 19 Jul 2021 11:47:02 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, <xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Message-ID: <YPVYJqKBEmlAwnME@perard>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <20210716123812.494081-1-anthony.perard@citrix.com>
 <aada0028-ff60-9f59-5d87-a023ecd35d11@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <aada0028-ff60-9f59-5d87-a023ecd35d11@suse.com>

On Mon, Jul 19, 2021 at 09:37:06AM +0200, Jan Beulich wrote:
> On 16.07.2021 14:38, Anthony PERARD wrote:
> > +export HAS_CHECKPOLICY := $(call success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
> 
> While the setting indeed gets obtained in a Makefile now, ...
> 
> > --- a/xen/common/Kconfig
> > +++ b/xen/common/Kconfig
> > @@ -235,8 +235,8 @@ config XSM_FLASK_AVC_STATS
> >  
> >  config XSM_FLASK_POLICY
> >  	bool "Compile Xen with a built-in FLASK security policy"
> > -	default y if "$(XEN_HAS_CHECKPOLICY)" = "y"
> > -	depends on XSM_FLASK
> > +	default y
> > +	depends on XSM_FLASK && "$(HAS_CHECKPOLICY)"
> 
> ... it's still used as a Kconfig dependency. This in particular
> does not address George's concern about a setting silently getting
> turned off behind the back of the person having enabled it (and

This patch v2 wasn't meant to address George's concern which didn't
exist at the time this v2 was sent... I was trying to address yours.

But it seems that "George's concern" is part of your issues with
Kconfig too, which I missed when trying to right this v2.

Anyway, those two patches are the only way I'm going to try to fix the
random build failure in the GitLab CI, I'm not going to try to fix
issues with the use of Kconfig for now. In the mean time either v1 or v2
is committed, or will just keep getting random build failure in the
GitLab CI.

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 11:05:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 11:05:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158343.291544 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5R51-0002qb-Ji; Mon, 19 Jul 2021 11:04:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158343.291544; Mon, 19 Jul 2021 11:04:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5R51-0002qU-Gg; Mon, 19 Jul 2021 11:04:59 +0000
Received: by outflank-mailman (input) for mailman id 158343;
 Mon, 19 Jul 2021 11:04:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5R50-0002qO-Af
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 11:04:58 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2627061e-e881-11eb-8afc-12813bfff9fa;
 Mon, 19 Jul 2021 11:04:56 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2057.outbound.protection.outlook.com [104.47.4.57]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-27-_NOFgIg4MZCxKH_EZkU8IQ-1; Mon, 19 Jul 2021 13:04:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VE1PR04MB7375.eurprd04.prod.outlook.com (2603:10a6:800:1a8::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.26; Mon, 19 Jul
 2021 11:04:52 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 11:04:52 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR0P281CA0087.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1e::12) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.8 via Frontend Transport; Mon, 19 Jul 2021 11:04:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2627061e-e881-11eb-8afc-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626692695;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=X3QRHyTLIPbbl9/ex5tYKBenjeuZAkm67gjqeX8SRCc=;
	b=M5JGwyET/Ta8pODq3WdSANTyVot/Jo0ZyYJ34unW/l/zyuOvCBiGp3YkoX5Wq3aHfkcIER
	wK7fpUBS21TnZQc0DoHZ9QaqUkw+zD980Vfakt+EokYdXGacgOYf8PeBcDA1C4tmLhb3/0
	ivdK5/fKZ1OtTScUD9ED0xxxzk2F438=
X-MC-Unique: _NOFgIg4MZCxKH_EZkU8IQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Y3WvNTio2+w8f5Vi8vhxDVnICuEwTqU+Ij/ut/Y9S8+Yxzz/1df5paRU0btbq+npfILSTKRRaksn32fE1/orXxoR13vegbGfmj9JR7pl1pAstCHcHaYpz8TJVxaZQvARxwV5EFuC76KQ4TTPzhOQ+LnEIwaZvE5efp8WtAHa6mVryqpJ8Szw13iemUt67r28jckv5Omw75ZqOF029BlKvtGbdoAvJ88hKyvFvFQL6QN46EXGHE1KTNAlKU+cVS3jkjemBjPfBld04illn4JxnTxDrMwjVPErCuUBr4N+4RSKeAZDoIRy+kQr2j6r1FaunxoMt4ue2bTymLwgC1wmjw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=X3QRHyTLIPbbl9/ex5tYKBenjeuZAkm67gjqeX8SRCc=;
 b=RysW2yUd4PZ/zKp8NvCdtt4noQiPim5wFkN6hag2r8bVeT14aW7XCXDhCTAvE/R5BSldKABsRwnTN3v8A0+wnzGMdZ4tNBD93h+BfGdU/ty9F2zaiFFTA1EbLMAFLzaBK0LxKAZMACYnJulj01vtCR7l2OZIxkTlmUZhQCIalQnZsFr7naa4AY+HMK0esR/Ms7Bau3eJCkqRjBE7J7FC81cdq/axw/JUY2PZS1KOmS/qBxZ4bSRHdwHxhjvgdoGQP46moIQe+EX024AlNITjAQA8gjnLjgQ8YtJAYsM2KKWXvQSI4g2jkAu+qLbLTtAZFin71EJCXIsLAcZcUDHkJQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <20210716123812.494081-1-anthony.perard@citrix.com>
 <aada0028-ff60-9f59-5d87-a023ecd35d11@suse.com> <YPVYJqKBEmlAwnME@perard>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <97e99661-2b03-22fb-018b-a40c48b86a0c@suse.com>
Date: Mon, 19 Jul 2021 13:04:50 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <YPVYJqKBEmlAwnME@perard>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR0P281CA0087.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:1e::12) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 68dd58e8-2d37-4960-8e1d-08d94aa5089c
X-MS-TrafficTypeDiagnostic: VE1PR04MB7375:
X-Microsoft-Antispam-PRVS:
	<VE1PR04MB73750BFA5CEEFF1BBCF925D4B3E19@VE1PR04MB7375.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	ltLuuA1os9xxYg3Zqz02wfiwor8a2hOgdcoOXEiF8bK6GW95ZFmJILBZT7I2ic68It8r+YANZiqFH/gv7RMbrrBybnUoG4DfMk3pLq0SrEkmwFoo/aR1YV2s1HF25z651PYypG0I+EhDrjE1MrdrlJynB1OoSWZgbS5BAmZ1rbQZ05H0BfNvtIGbcnkEKGGGgAAYg198H6pmND+d7hs5BksSLFK7tVHvnx5QNzZ3J52tiqz2kEMxd7KjeqW/UGwgMTrKT9p9j5QNGTEEjmnBvjtBP46h+BvbDnkXVXzdsjSo4s+IQknwy6lugABwHkSVibzXk4osptb1vuHMM38IqMAz9R50gaJAdRUG88PXq4qEInhuzhyq0jhzSyfSXAD7VsvQ6KPnlynWs+96GY6LLsFpYfKecyi/gRkk6NT1ZSD0Y+A+0l8tznFWIcWAgTbn515+ezbRvo0H7uv1ZZCXapLLishPKzEF8zOjkj3EPI2nA+hLYYjHNwODEiABNqBbCbgu6vCn1Dww4Vi6x01ejBfqtxBs4Fa1Doih1oEJaMR5S3Lao2kZ/ET/qYBBS+R2clN8nGT1ndrUvjf8A8GqTqF1eHB5jWze+8sMTQL8klMSN7IJ6qZ6Ldt9xcs0Se07i9rW6vvulXClffRC8aWJ7S4t7r49yhqhEEBCPb5FXk8calj4IQMCjLIxwDfkCsJNM3zurcRcBMMHF+U1JF3GMriGWj24Xip2Q4efPGZIkTo=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(366004)(376002)(136003)(39850400004)(8936002)(6486002)(5660300002)(4326008)(478600001)(86362001)(26005)(36756003)(38100700002)(54906003)(31686004)(8676002)(83380400001)(2906002)(53546011)(316002)(956004)(66476007)(66556008)(2616005)(186003)(6916009)(66946007)(16576012)(31696002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 68dd58e8-2d37-4960-8e1d-08d94aa5089c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 11:04:52.5412
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: rvTlg2/s8HOI11PJZc8/lGWGFTJwGULfSiyqSR6H2c1Jkw91fU5jYHBUnXzTMR8uYWCXUnde8x+yNd98nGSOtQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7375

On 19.07.2021 12:47, Anthony PERARD wrote:
> On Mon, Jul 19, 2021 at 09:37:06AM +0200, Jan Beulich wrote:
>> On 16.07.2021 14:38, Anthony PERARD wrote:
>>> +export HAS_CHECKPOLICY := $(call success,$(CHECKPOLICY) -h 2>&1 | grep -q xen)
>>
>> While the setting indeed gets obtained in a Makefile now, ...
>>
>>> --- a/xen/common/Kconfig
>>> +++ b/xen/common/Kconfig
>>> @@ -235,8 +235,8 @@ config XSM_FLASK_AVC_STATS
>>>  
>>>  config XSM_FLASK_POLICY
>>>  	bool "Compile Xen with a built-in FLASK security policy"
>>> -	default y if "$(XEN_HAS_CHECKPOLICY)" = "y"
>>> -	depends on XSM_FLASK
>>> +	default y
>>> +	depends on XSM_FLASK && "$(HAS_CHECKPOLICY)"
>>
>> ... it's still used as a Kconfig dependency. This in particular
>> does not address George's concern about a setting silently getting
>> turned off behind the back of the person having enabled it (and
> 
> This patch v2 wasn't meant to address George's concern which didn't
> exist at the time this v2 was sent... I was trying to address yours.
> 
> But it seems that "George's concern" is part of your issues with
> Kconfig too, which I missed when trying to right this v2.
> 
> Anyway, those two patches are the only way I'm going to try to fix the
> random build failure in the GitLab CI, I'm not going to try to fix
> issues with the use of Kconfig for now. In the mean time either v1 or v2
> is committed, or will just keep getting random build failure in the
> GitLab CI.

Fair enough. I actually think that randconfig shouldn't act quite as
randomly as it does. But what's sensible as behavior there really
depends heavily on the future intentions with .config. If we follow
Linux'es model (which Andrew advocates for), its randomness would be
limited by options which could get randomly set getting further
altered by environmental conditions. Hence that would limit what can
actually be tested, but it would avoid failures resulting from the
environment not matching the chose settings.

Otoh with our current model (largely, leaving aside the few
environment checks we've already got) what is being asked for is
what is going to get built. But failure from environmental
constraints shouldn't be treated the same as failure from bad
interaction of options; it's (aiui) the latter which randconfig is
supposed to point out.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 11:15:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 11:15:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158356.291559 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5REj-0004TX-K9; Mon, 19 Jul 2021 11:15:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158356.291559; Mon, 19 Jul 2021 11:15:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5REj-0004TQ-HA; Mon, 19 Jul 2021 11:15:01 +0000
Received: by outflank-mailman (input) for mailman id 158356;
 Mon, 19 Jul 2021 11:15:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=MZur=ML=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m5REi-0004TK-1x
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 11:15:00 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4da9183d-1fb9-41e9-be5f-269a387ba37f;
 Mon, 19 Jul 2021 11:14:58 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4da9183d-1fb9-41e9-be5f-269a387ba37f
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626693298;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=vOax3+NH7v5YogFbZz9PxP5opgpSyJwGRAqiR/4lTDM=;
  b=J0J2FHQAHkDLZp+4AIzX0NYhq13kj55a+9Czvh2e8N9OnDDCuR7sRrFL
   fKJ3UN7h92mLMxRqANlreHa4sG0XQPIwSiaa8vpWUG0brczgYhy/H5rCc
   IoD4eqt6Gg71/HqGGUkRjc7pZppkOXeWC56vrY7/HUUaqOo+dOyWDro9s
   E=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: dT0JMVsJCMbXIwje6y29gsCetd4Sq95HhqSLYkttjKlY8Wapf5Kr83ekJHCCMqpctTorRKf13g
 oMKJHQPXUGTseu9MDmpanTk8WugParkPzOOU3vSgNkJc46a5fteGEuAsQ+1d/uoKyp4a3F18Gv
 0KWhf+33A7CKOfa3OGwLg3u1Qs9fPtUNIr1u5bMkgCYTFqAziSd455+HRFGeSZ3eDwIYI3gYv2
 9CrLpZsSWey08kjQlifaGEpU9C85gzfqSPcVaXok5aziiwIX+XQHONvhSF11N7yy4J2Q1sXlDR
 rs9JlRHSorQcgvkRe2W7JUq1
X-SBRS: 5.1
X-MesageID: 48242883
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:BtZIm60jOjDB6HHXLmh0GwqjBLwkLtp133Aq2lEZdPRUGvb4qy
 nIpoV86faUskd3ZJhOo6HiBEDtexzhHP1OkO0s1NWZLWvbUQKTRekIh+aP/9SJIVyGygc378
 ddmsZFZuEYdWIK6PrH3A==
X-IronPort-AV: E=Sophos;i="5.84,252,1620705600"; 
   d="scan'208";a="48242883"
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, Jan Beulich
	<JBeulich@suse.com>, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?=
	<roger.pau@citrix.com>, Wei Liu <wl@xen.org>, Igor Druzhinin
	<igor.druzhinin@citrix.com>
Subject: [PATCH] x86/hvm: Propagate real error information up through hvm_load()
Date: Mon, 19 Jul 2021 12:14:49 +0100
Message-ID: <20210719111449.21337-1-andrew.cooper3@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

hvm_load() is currently a mix of -errno and -1 style error handling, which
aliases -EPERM.  This leads to the following confusing diagnostics:

>From userspace:
  xc: info: Restoring domain
  xc: error: Unable to restore HVM context (1 = Operation not permitted): Internal error
  xc: error: Restore failed (1 = Operation not permitted): Internal error
  xc_domain_restore: [1] Restore failed (1 = Operation not permitted)

>From Xen:
  (XEN) HVM10.0 restore: inconsistent xsave state (feat=0x2ff accum=0x21f xcr0=0x7 bv=0x3 err=-22)
  (XEN) HVM10 restore: failed to load entry 16/0

The actual error was a bad backport, but the -EINVAL got converted to -EPERM
on the way out of the hypercall.

The overwhelming majority of *_load() handlers already use -errno consistenty.
Fix up the rest to be consistent, and fix a few other errors noticed along the
way.

 * Failures of hvm_load_entry() indicate a truncated record or other bad data
   size.  Use -ENODATA.
 * Don't use {g,}dprintk().  Omitting diagnostics in release builds is rude,
   and almost everything uses unconditional printk()'s.
 * Switch some errors for more appropriate ones.

Reported-by: Igor Druzhinin <igor.druzhinin@citrix.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Wei Liu <wl@xen.org>
CC: Igor Druzhinin <igor.druzhinin@citrix.com>
---
 xen/arch/x86/cpu/mcheck/vmce.c |  6 +++---
 xen/arch/x86/emul-i8254.c      |  9 +++++----
 xen/arch/x86/hvm/irq.c         |  6 +++---
 xen/arch/x86/hvm/save.c        | 25 ++++++++++++++-----------
 xen/arch/x86/hvm/vioapic.c     |  5 ++++-
 xen/arch/x86/hvm/vpic.c        |  2 +-
 6 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/xen/arch/x86/cpu/mcheck/vmce.c b/xen/arch/x86/cpu/mcheck/vmce.c
index b1df9e9efd66..eb6434a3ba20 100644
--- a/xen/arch/x86/cpu/mcheck/vmce.c
+++ b/xen/arch/x86/cpu/mcheck/vmce.c
@@ -82,11 +82,11 @@ int vmce_restore_vcpu(struct vcpu *v, const struct hvm_vmce_vcpu *ctxt)
 
     if ( ctxt->caps & ~guest_mcg_cap & ~MCG_CAP_COUNT & ~MCG_CTL_P )
     {
-        dprintk(XENLOG_G_ERR, "%s restore: unsupported MCA capabilities"
-                " %#" PRIx64 " for %pv (supported: %#Lx)\n",
+        printk(XENLOG_G_ERR
+               "%s restore: unsupported MCA capabilities %#"PRIx64" for %pv (supported: %#Lx)\n",
                 is_hvm_vcpu(v) ? "HVM" : "PV", ctxt->caps,
                 v, guest_mcg_cap & ~MCG_CAP_COUNT);
-        return -EPERM;
+        return -EINVAL;
     }
 
     v->arch.vmce.mcg_cap = ctxt->caps;
diff --git a/xen/arch/x86/emul-i8254.c b/xen/arch/x86/emul-i8254.c
index 73be4188ad41..83d7156799c8 100644
--- a/xen/arch/x86/emul-i8254.c
+++ b/xen/arch/x86/emul-i8254.c
@@ -412,7 +412,7 @@ static int pit_save(struct vcpu *v, hvm_domain_context_t *h)
 static int pit_load(struct domain *d, hvm_domain_context_t *h)
 {
     PITState *pit = domain_vpit(d);
-    int i;
+    int i, rc = 0;
 
     if ( !has_vpit(d) )
         return -ENODEV;
@@ -421,8 +421,8 @@ static int pit_load(struct domain *d, hvm_domain_context_t *h)
 
     if ( hvm_load_entry(PIT, h, &pit->hw) )
     {
-        spin_unlock(&pit->lock);
-        return 1;
+        rc = -ENODEV;
+        goto out;
     }
     
     /*
@@ -434,9 +434,10 @@ static int pit_load(struct domain *d, hvm_domain_context_t *h)
     for ( i = 0; i < 3; i++ )
         pit_load_count(pit, i, pit->hw.channels[i].count);
 
+ out:
     spin_unlock(&pit->lock);
 
-    return 0;
+    return rc;
 }
 
 HVM_REGISTER_SAVE_RESTORE(PIT, pit_save, pit_load, 1, HVMSR_PER_DOM);
diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c
index 38ac5fb6c7c2..52aae4565f0c 100644
--- a/xen/arch/x86/hvm/irq.c
+++ b/xen/arch/x86/hvm/irq.c
@@ -773,9 +773,9 @@ static int irq_load_link(struct domain *d, hvm_domain_context_t *h)
     for ( link = 0; link < 4; link++ )
         if ( hvm_irq->pci_link.route[link] > 15 )
         {
-            gdprintk(XENLOG_ERR, 
-                     "HVM restore: PCI-ISA link %u out of range (%u)\n",
-                     link, hvm_irq->pci_link.route[link]);
+            printk(XENLOG_G_ERR
+                   "HVM restore: PCI-ISA link %u out of range (%u)\n",
+                   link, hvm_irq->pci_link.route[link]);
             return -EINVAL;
         }
 
diff --git a/xen/arch/x86/hvm/save.c b/xen/arch/x86/hvm/save.c
index 584620985bf5..86c82cbd7456 100644
--- a/xen/arch/x86/hvm/save.c
+++ b/xen/arch/x86/hvm/save.c
@@ -51,14 +51,14 @@ int arch_hvm_load(struct domain *d, struct hvm_save_header *hdr)
     {
         printk(XENLOG_G_ERR "HVM%d restore: bad magic number %#"PRIx32"\n",
                d->domain_id, hdr->magic);
-        return -1;
+        return -EINVAL;
     }
 
     if ( hdr->version != HVM_FILE_VERSION )
     {
         printk(XENLOG_G_ERR "HVM%d restore: unsupported version %u\n",
                d->domain_id, hdr->version);
-        return -1;
+        return -EINVAL;
     }
 
     cpuid(1, &eax, &ebx, &ecx, &edx);
@@ -294,16 +294,18 @@ int hvm_load(struct domain *d, hvm_domain_context_t *h)
     struct hvm_save_descriptor *desc;
     hvm_load_handler handler;
     struct vcpu *v;
+    int rc;
 
     if ( d->is_dying )
         return -EINVAL;
 
     /* Read the save header, which must be first */
     if ( hvm_load_entry(HEADER, h, &hdr) != 0 )
-        return -1;
+        return -ENODATA;
 
-    if ( arch_hvm_load(d, &hdr) )
-        return -1;
+    rc = arch_hvm_load(d, &hdr);
+    if ( rc )
+        return rc;
 
     /* Down all the vcpus: we only re-enable the ones that had state saved. */
     for_each_vcpu(d, v)
@@ -318,7 +320,7 @@ int hvm_load(struct domain *d, hvm_domain_context_t *h)
             printk(XENLOG_G_ERR
                    "HVM%d restore: save did not end with a null entry\n",
                    d->domain_id);
-            return -1;
+            return -ENODATA;
         }
 
         /* Read the typecode of the next entry  and check for the end-marker */
@@ -332,17 +334,18 @@ int hvm_load(struct domain *d, hvm_domain_context_t *h)
         {
             printk(XENLOG_G_ERR "HVM%d restore: unknown entry typecode %u\n",
                    d->domain_id, desc->typecode);
-            return -1;
+            return -EINVAL;
         }
 
         /* Load the entry */
         printk(XENLOG_G_INFO "HVM%d restore: %s %"PRIu16"\n", d->domain_id,
                hvm_sr_handlers[desc->typecode].name, desc->instance);
-        if ( handler(d, h) != 0 )
+        rc = handler(d, h);
+        if ( rc )
         {
-            printk(XENLOG_G_ERR "HVM%d restore: failed to load entry %u/%u\n",
-                   d->domain_id, desc->typecode, desc->instance);
-            return -1;
+            printk(XENLOG_G_ERR "HVM%d restore: failed to load entry %u/%u rc %d\n",
+                   d->domain_id, desc->typecode, desc->instance, rc);
+            return rc;
         }
         process_pending_softirqs();
     }
diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c
index 87370dd4172b..553c0f76eff8 100644
--- a/xen/arch/x86/hvm/vioapic.c
+++ b/xen/arch/x86/hvm/vioapic.c
@@ -620,7 +620,10 @@ static int ioapic_load(struct domain *d, hvm_domain_context_t *h)
          d->arch.hvm.nr_vioapics != 1 )
         return -EOPNOTSUPP;
 
-    return hvm_load_entry(IOAPIC, h, &s->domU);
+    if ( hvm_load_entry(IOAPIC, h, &s->domU) )
+        return -ENODATA;
+
+    return 0;
 }
 
 HVM_REGISTER_SAVE_RESTORE(IOAPIC, ioapic_save, ioapic_load, 1, HVMSR_PER_DOM);
diff --git a/xen/arch/x86/hvm/vpic.c b/xen/arch/x86/hvm/vpic.c
index f465b7f9979a..af988a868c8a 100644
--- a/xen/arch/x86/hvm/vpic.c
+++ b/xen/arch/x86/hvm/vpic.c
@@ -430,7 +430,7 @@ static int vpic_load(struct domain *d, hvm_domain_context_t *h)
 
     /* Which PIC is this? */
     if ( inst > 1 )
-        return -EINVAL;
+        return -ENOENT;
     s = &d->arch.hvm.vpic[inst];
 
     /* Load the state */
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 12:28:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 12:28:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158383.291581 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5SNU-0003gi-AA; Mon, 19 Jul 2021 12:28:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158383.291581; Mon, 19 Jul 2021 12:28:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5SNU-0003gb-7L; Mon, 19 Jul 2021 12:28:08 +0000
Received: by outflank-mailman (input) for mailman id 158383;
 Mon, 19 Jul 2021 12:28:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5SNT-0003gR-7i; Mon, 19 Jul 2021 12:28:07 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5SNT-0001hP-1U; Mon, 19 Jul 2021 12:28:07 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5SNS-0000mp-Ok; Mon, 19 Jul 2021 12:28:06 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5SNS-0006xV-OI; Mon, 19 Jul 2021 12:28:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xHoH6pE5W5cYOih41y5iVUVxrbZK8/f50bm2QjFkE7g=; b=m7QaYw7kfQ8ebWbmGfsUS6/6Kt
	kiHXP/JJ2hqM5MTUJEiSZA8Up8VEF6/c4Ck4nCkxoAAPPsEEoofHqg+vwrB7Sku3QL9CW3HP0bxfn
	gJ0UpcLjRMXEyNXo9yRqPemhh2OQkzfOQIzRwvy/KnMxIUyoPH0yDu7++exWO5t2UZ20=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163794-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163794: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=4bac086e8e007c7143e33f87bb96238326d1d6ba
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 12:28:06 +0000

flight 163794 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163794/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 4bac086e8e007c7143e33f87bb96238326d1d6ba
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   45 days
Failing since        162368  2021-06-04 15:42:59 Z   44 days  121 attempts
Testing same since   163729  2021-07-16 06:06:18 Z    3 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3858 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 12:47:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 12:47:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158390.291597 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Sfn-0006D2-Ru; Mon, 19 Jul 2021 12:47:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158390.291597; Mon, 19 Jul 2021 12:47:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Sfn-0006Cv-Op; Mon, 19 Jul 2021 12:47:03 +0000
Received: by outflank-mailman (input) for mailman id 158390;
 Mon, 19 Jul 2021 12:47:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=jTRW=ML=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m5Sfm-0006Co-LG
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 12:47:02 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 68decaf6-e88f-11eb-8b09-12813bfff9fa;
 Mon, 19 Jul 2021 12:47:01 +0000 (UTC)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2053.outbound.protection.outlook.com [104.47.8.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-38-NU59TSSzOmy5f81apEmkrw-1; Mon, 19 Jul 2021 14:46:58 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB4845.eurprd04.prod.outlook.com (2603:10a6:803:51::30)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.25; Mon, 19 Jul
 2021 12:46:57 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021
 12:46:56 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR05CA0076.eurprd05.prod.outlook.com (2603:10a6:208:136::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend
 Transport; Mon, 19 Jul 2021 12:46:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 68decaf6-e88f-11eb-8b09-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626698820;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=yejCnSlCvMuRZqL24NmBaM2ZtEnrJ3V7NRIpXFIVvFM=;
	b=PRtAdTM5VQQl+5KA1RBLja3Fr2LtNZsWlEDQZrMpCjeIW8Dqc041hVffrQtaUkrSwlTfXl
	RE5PrNrNKLGbOtAd2L3FPkvOqwdnc6wY6daerbAruM0rZJfmsrmzFmFIgt1hlXGM9y3hOJ
	SlPBInPxw2YnyKfu3heBRqYAURafBUM=
X-MC-Unique: NU59TSSzOmy5f81apEmkrw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Rcj9tPcXcuBDJ8bu1uvXvN58t76haV64wjqicereqgugfpHWZf+LfMg80eWaZ1cWFpyFPMcqv014jqXQ6401DtAsmZCEiopRt5A7td9Ubo5iTnIM6qvIgHQrWhI9MrczF7s0Ye1divLXAMZhtvXuT7XTsE87z1z5UdR+NXwf1zaeTrjUie6a4o3nNYkJraTc6wWAkT02TBaMx8epdVYJZujw59JHg5q/U8tCXNHjxli4uAqrOwdOv6wKNHZ9X50Gh0jIj3Rv/e1VMwJf1Phrwh3Eq1FnWfU4q5VXW+9Tshsy/aLyKMvJAbuFymV5ZPJO87/JPChPmdkoenQaiyTdOg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yejCnSlCvMuRZqL24NmBaM2ZtEnrJ3V7NRIpXFIVvFM=;
 b=e4TTIOVAtPmw2WE0ocs6r8OmNuqSTFkrN7eDJZF53215bXcyCkBw8gAW/Q050OVAQ/GyIq4NyaRNNTeLez7p0+CB54RP7TDgl+ngX1Qg0VSlMxoRf2hmsJMPJxJ8wkl82I/QvMNscTbTffF398r3qvtpi1Khqauw3NWwUFXWzyuhasvIxhc/yItjSctivSYe4Mj4eVBMCJsbnRXwTcrzbY9nVmsXohnLfITvQ8nxgj0l9O8iXnHDk8nF2nUBUs+R0d3WRgCYKdsqA8V2PQ366qB9QCxxNr5Dvnw8lwrYF5MRZ+OexUJ8ZxdsjcSiV3alx6l6n++Kc8F23r/oEVxSqw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH] x86/hvm: Propagate real error information up through
 hvm_load()
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Wei Liu <wl@xen.org>, Igor Druzhinin <igor.druzhinin@citrix.com>,
 Xen-devel <xen-devel@lists.xenproject.org>
References: <20210719111449.21337-1-andrew.cooper3@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <2b12abb9-4fde-f21a-e763-38de14847e3b@suse.com>
Date: Mon, 19 Jul 2021 14:46:54 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210719111449.21337-1-andrew.cooper3@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR05CA0076.eurprd05.prod.outlook.com
 (2603:10a6:208:136::16) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: da82c196-8a05-4a49-7ace-08d94ab34af9
X-MS-TrafficTypeDiagnostic: VI1PR04MB4845:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB4845E1B0765D94FB9BE3D838B3E19@VI1PR04MB4845.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	zt7tGXkxDS+SAC08U+khyp9orb9WmVXhbqN5dS8YezQF6kcVEakvZJx7ykF9jUrMPwrGTh8zd9GLdlvOv6NcOPsJdF/j+nmDlCL0foPdCPNycJRO4eIQmMxv2lPKiuiijEH2aghLCUPmDnvuC9hjk8JvCxtJeVdvsvT4OGZMDwWQnmCssAya2kHetVtrFbcAhMiXq2nuMKya/V8p6Yr/dgvVIZEZhWv98gMRR0BOWE3iqCB+rQrclOYAzWv62bBR8QCMJ5uQSdBqV5gUbDxvUJre1WjzW2VVydKo9caScjlyWKgBv8vT4jlqWRYMZORiBlu9hLTNSqMf3eqAbXafd0DRrx06rwVV8/BvrkhJAzfhAvmoDS9FfjsSzg56s420JQHpAGoxeaFGn1vNPHW0B2wdAX1ILMiTienR1S1wgJ9IiPfZq0qTRYEvFq1bu2tUzoAokLt1IGHzAiZG+Q1ox+OOmDvwQCQh42qL/aDeQFCXjQu61kSDnpBWnmgKrwtlKMRwgM+8DMTEVjitTxbctW0ROZmn7w1B/x28hZfbfTlMDiGsNAgaQD24VqJcgxa7UTIYGFhiOXRUtg1bMsePR2xQmizcl4TABlFiNi0IwizyNokM96pXqacJpnTAYaxy9f+BLe772sV0o5dNxvxt6T+I5jRpE5TvFT429wm/0vAEuWuzdlprNOhVgUd2j9hodb9vYBTN5zKyWGFoo3qWu85eDgXaDCE0IZc/DNNkFxc=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(86362001)(66946007)(316002)(66476007)(8676002)(956004)(8936002)(16576012)(6916009)(83380400001)(31696002)(36756003)(186003)(38100700002)(26005)(2616005)(66556008)(53546011)(508600001)(5660300002)(4326008)(2906002)(31686004)(6486002)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: da82c196-8a05-4a49-7ace-08d94ab34af9
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 12:46:56.8590
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 9eJK4pIHxBZSt4CKxk5zVN1bBkWXIAPQpec6Lb64LI8kEpoX6Ss2WdaygKzuhKdpGbBF2fNBrkz6lGYesO7vjg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4845

On 19.07.2021 13:14, Andrew Cooper wrote:
> hvm_load() is currently a mix of -errno and -1 style error handling, which
> aliases -EPERM.  This leads to the following confusing diagnostics:
> 
> From userspace:
>   xc: info: Restoring domain
>   xc: error: Unable to restore HVM context (1 = Operation not permitted): Internal error
>   xc: error: Restore failed (1 = Operation not permitted): Internal error
>   xc_domain_restore: [1] Restore failed (1 = Operation not permitted)
> 
> From Xen:
>   (XEN) HVM10.0 restore: inconsistent xsave state (feat=0x2ff accum=0x21f xcr0=0x7 bv=0x3 err=-22)
>   (XEN) HVM10 restore: failed to load entry 16/0
> 
> The actual error was a bad backport, but the -EINVAL got converted to -EPERM
> on the way out of the hypercall.
> 
> The overwhelming majority of *_load() handlers already use -errno consistenty.
> Fix up the rest to be consistent, and fix a few other errors noticed along the
> way.
> 
>  * Failures of hvm_load_entry() indicate a truncated record or other bad data
>    size.  Use -ENODATA.

But then ...

> @@ -421,8 +421,8 @@ static int pit_load(struct domain *d, hvm_domain_context_t *h)
>  
>      if ( hvm_load_entry(PIT, h, &pit->hw) )
>      {
> -        spin_unlock(&pit->lock);
> -        return 1;
> +        rc = -ENODEV;
> +        goto out;
>      }

... use -ENODATA here as well? Preferably with the adjustment
Reviewed-by: Jan Beulich <jbeulich@suse.com>

I'll pick this up for backporting once I see it in the tree.

Jan



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 12:56:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 12:56:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158396.291609 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Sp3-0007lQ-Qj; Mon, 19 Jul 2021 12:56:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158396.291609; Mon, 19 Jul 2021 12:56:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Sp3-0007lJ-Nc; Mon, 19 Jul 2021 12:56:37 +0000
Received: by outflank-mailman (input) for mailman id 158396;
 Mon, 19 Jul 2021 12:56:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Sp2-0007l9-00; Mon, 19 Jul 2021 12:56:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Sp1-0002Bn-Lz; Mon, 19 Jul 2021 12:56:35 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Sp1-0001Yf-Ei; Mon, 19 Jul 2021 12:56:35 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Sp1-0005mM-EF; Mon, 19 Jul 2021 12:56:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=0GxUV+hFbomI5nUAUNSIeC6arLzM8n8ZMl3OWYuYGmc=; b=PBx/mID/5ohaZPQY+xun7RBGwr
	rcMdy0gy7lFqoxJwesZGSSHTRn8nal14wpqf3XUaRG7tyXr8oaWRms7nzteHMG2VGFWXTFSCpbjq1
	gLhbCYxa6HRn5v29wu/PzRkPOz1AZhEq/m5wyNo92ur+Im0C7D1N8XuCgywP8rxYSl0Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-libvirt-xsm
Message-Id: <E1m5Sp1-0005mM-EF@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 12:56:35 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-libvirt-xsm
testid guest-start

Tree: libvirt git://xenbits.xen.org/libvirt.git
Tree: libvirt_keycodemapdb https://gitlab.com/keycodemap/keycodemapdb.git
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163804/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-libvirt-xsm.guest-start.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-libvirt-xsm.guest-start --summary-out=tmp/163804.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-libvirt-xsm guest-start
Searching for failure / basis pass:
 163784 fail [host=elbling1] / 163321 [host=fiano1] 163311 [host=chardonnay0] 163303 [host=elbling0] 163299 [host=albana1] 163292 [host=pinot1] 163276 [host=albana0] 163235 [host=huxelrebe0] 163228 [host=fiano0] 163220 [host=huxelrebe1] 163213 [host=elbling0] 163204 [host=fiano1] 163194 [host=chardonnay0] 163187 [host=albana1] 163179 [host=huxelrebe0] 163171 [host=albana0] 163163 [host=huxelrebe1] 163156 [host=pinot0] 163142 [host=chardonnay0] 163128 [host=albana1] 163110 ok.
Failure / basis pass flights: 163784 / 163110
(tree with no url: minios)
Tree: libvirt git://xenbits.xen.org/libvirt.git
Tree: libvirt_keycodemapdb https://gitlab.com/keycodemap/keycodemapdb.git
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/libvirt.git#2c846fa6bcc11929c9fb857a22430fb9945654ad-2c846fa6bcc11929c9fb857a22430fb9945654ad https://gitlab.com/keycodemap/keycodemapdb.git#27acf0ef828bf719b2053ba398b195829413dbdd-27acf0ef828bf719b2053ba398b195829413dbdd git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0\
 dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c7437ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#e3955ae93f5151ad2e982440b7c8d3776a9afee2-fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c8\
 1d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Loaded 43048 nodes in revision graph
Searching for test results:
 163066 [host=albana0]
 163110 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
 163128 [host=albana1]
 163142 [host=chardonnay0]
 163156 [host=pinot0]
 163163 [host=huxelrebe1]
 163171 [host=albana0]
 163179 [host=huxelrebe0]
 163187 [host=albana1]
 163194 [host=chardonnay0]
 163204 [host=fiano1]
 163213 [host=elbling0]
 163220 [host=huxelrebe1]
 163228 [host=fiano0]
 163235 [host=huxelrebe0]
 163276 [host=albana0]
 163292 [host=pinot1]
 163299 [host=albana1]
 163303 [host=elbling0]
 163311 [host=chardonnay0]
 163321 [host=fiano1]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163545 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163577 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163600 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163621 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163642 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 eca73713358f7abb18f15c026ff4267b51746992 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163663 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163677 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163694 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163719 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a9649a719a44894b81f38dc1c5c1888ee684acef 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163755 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
 163741 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9ad4c7c9b63f89c308fd988d509bed1389953c8b 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163762 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a9649a719a44894b81f38dc1c5c1888ee684acef 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163764 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163766 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9ad4c7c9b63f89c308fd988d509bed1389953c8b 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163768 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163769 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163771 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163772 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 dd62bf14b756821fa293e3465955a41e9d460deb 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163774 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 300491f988f649fced2ffd5c46c1bc911fee0e60 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163775 blocked 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163776 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 33e48312cf28f6fb78c03b14514fa7718de97ef5
 163777 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163778 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 63fdea768d175e96443a53b95a6441f520743e2e
 163781 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163779 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163765 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163783 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163785 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 e87d8f60fa9b6eaa6a2357545a96e4fff05dbef0
 163787 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163789 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163790 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163792 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163795 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163784 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163797 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163799 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163802 pass 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163804 fail 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163110 (pass), for basis pass
 Result found: flight 163784 (fail), for basis failure
 Repro found: flight 163785 (pass), for basis pass
 Repro found: flight 163799 (fail), for basis failure
 0 revisions at 2c846fa6bcc11929c9fb857a22430fb9945654ad 27acf0ef828bf719b2053ba398b195829413dbdd c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163790 (pass), for last pass
 Result found: flight 163792 (fail), for first failure
 Repro found: flight 163795 (pass), for last pass
 Repro found: flight 163797 (fail), for first failure
 Repro found: flight 163802 (pass), for last pass
 Repro found: flight 163804 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163804/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-libvirt-xsm.guest-start.{dot,ps,png,html,svg}.
----------------------------------------
163804: tolerable FAIL

flight 163804 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163804/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-libvirt-xsm  14 guest-start             fail baseline untested


jobs:
 build-i386-libvirt                                           pass    
 test-amd64-i386-libvirt-xsm                                  fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 13:22:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 13:22:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158433.291653 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5TEG-00042e-LF; Mon, 19 Jul 2021 13:22:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158433.291653; Mon, 19 Jul 2021 13:22:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5TEG-00042X-Gt; Mon, 19 Jul 2021 13:22:40 +0000
Received: by outflank-mailman (input) for mailman id 158433;
 Mon, 19 Jul 2021 13:22:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=MZur=ML=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m5TEE-00042P-Og
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 13:22:38 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6365e5ef-62f0-4a3a-b33f-3cae6f0b0890;
 Mon, 19 Jul 2021 13:22:37 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6365e5ef-62f0-4a3a-b33f-3cae6f0b0890
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626700957;
  h=from:subject:to:cc:references:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=Ur1ch8104mNgcxHmhQ/BwTuaEUIV/QgFAHygXvrKcVM=;
  b=gav4wJ3tsl7TK9Q5nUHhOJip35flmE2i9cw2eY4tVRaFhsuP2BoA8zlx
   hLjc2MSu9g38dSxgO22LuuQqTP7BOajFfB6cuaWoLjYTJ+sqrZ3MYEWS+
   Ui48u39BGqFMeg3zas5UlK2yW1nGzqrbzuo5OLPvpWALvjB9DeoQ3afBR
   Q=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: 9BDeqnaHHdxpkRcLogvMcgRo7u1Pk7tzWJJuDkjf1O5/UqE8MHTbKPReTXinQidn84xOz7SDj0
 SS3jmj1RH3IEqZRfzeDyY9hHU6oW5LCprOze26E6wyQpYWuyOCfUVvP3SW70YYochqbT6y1Bee
 siRkA7uirnV8WawdCy873f5e7002kdR7uJmUcd3myIMPn11AWFWAdvrvAlyhGZApZx6+IVHyzI
 6vyYeiPXvPQQ088k/NLNOQX6w3vrgFraOpx6Ds0yrWMI6CyBWUrkOFvEV+dCDbo+M08mZJtggF
 vrXbpoXo9GI/aYv/DgcH0MNK
X-SBRS: 5.1
X-MesageID: 50222726
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:V2zwiqtxgx4ycxOrCAhHh0ZZ7skC9oMji2hC6mlwRA09TyXGra
 6TdaUguiMc1gx8ZJhBo7C90KnpewK7yXcH2/huAV7EZniYhILIFvAf0WKG+Vzd8kLFh5VgPM
 tbAs1D4ZjLfCVHZKXBkXqF+rQbsaG6GcmT7I+0pRodLnAJGtRdBkVCe3+m+yVNNXl77PECZf
 6hD6R81l2dkDgsH76G7i5vZZmzmzSHruOpXTc2QzocrCWehzKh77D3VzCewxclSjtKhZMv63
 LMnQDV7riq96jT8G6d60bjq7Bt3PfxwNpKA8KBzuATNzXXkw6tIKBsQaeLsjwZqPymrHwqjN
 7PiRE9ONkb0QKRQkiF5T/WnyXw2jcn7HHvjXeenHvYuMT8AAk3DsJQ7LgpPyfx2g4FhpVRwa
 hL12WWu958FhXbhhnw4NDOSlVDile0iWBKq59Xs1VvFa8lLJNBp40W+01YVL0aGjjh1YwhGO
 5ySOnB+fdtd0+AZXyxhBgs/DWVZAV1Iv66eDlFhiTMuAImxUyRjnFoh/D3p01wsK7UEPJ/lr
 z52s0CrsA9cicUBZgNTtvpD/HHUVAk7Hr3QSuvyG/cZdY60kT22tXKCYUOlZWXkaMzve0Pcb
 T6IR9lXD0JCg3T4fPn5uwCzvmKehTmYQjQ
X-IronPort-AV: E=Sophos;i="5.84,252,1620705600"; 
   d="scan'208";a="50222726"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=e6ESgjnmLtPaTX7oXqq8OhyMqd+zO85SdiDYSBtv0MrBh+AxMQvO3R0Pso5dQtqvyfDP0RDXA4rxh9haWp8yl25+XUoTbmFbrQONdiyUk/p4bGEqMa1AuMHNh1gBnXT411bV9sdMQdvcdZhZzrUMP/L1hyo2PMJM4fdeWDlYy8BQqt1Ay73incld6GfC974NrkkIqWrH2qLhIV25YeoNrw1dDLemwtg4JTptEsqEDiXtY12xqePnfJg4jMfU1uaAKZ+2qFRQus5/oMQ/KfCRgLgZxv3Se9ZJtINdFky6UkL9GNHAQWXC9Ezr0RRl0H1XMdWUuMVuYc4Ra2KMlfW4pg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ur1ch8104mNgcxHmhQ/BwTuaEUIV/QgFAHygXvrKcVM=;
 b=Y6tqRR7ZYXxlIAA75eZyPWANzggg40Ib/2FubZXVCUQyHeb8iugQvH9QB9l5+eXkCeiXYUApBu3FeIlqIVRCu43QsR4W1UN9gW/WtLEMDGQPUvFQ4mq8J3ihPSlLxUUsifoHCAfLSSx8r5H/0N87bZGZuliLq4ao5HJ2Sbx3wVlOqVpRiMB6kkLQVVS10V/1mZP11JPoFuvFUbn3pEAHkJpHVUpZnrIKB/Nus3zwOXOoqArl7QGHmmfkEYCVwoDLJmGgXDswfN3e85yBquu/kloODq6Rp6rsQUDHC/7nXZaxoUc2AofVwZblEyYcQH2s9jcXeV/3i4uDg1CYxCsyYQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Ur1ch8104mNgcxHmhQ/BwTuaEUIV/QgFAHygXvrKcVM=;
 b=jzdY9Gmrt46EfNQcqrC93hZ9Uiziyil9SUhW5QiMqYSpA/PNBUPQJ+3Kgi5Hf366xMzQPixHFYc85gZvEJaYnZEy3mkGi8vVGIm/ZUl4RCMuWJ2Bye3h/KRjE8natsxgH4o9O0xqCoCeofwOggFQWpz+Jkrs2EQGJfq//OI9X1U=
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] x86/hvm: Propagate real error information up through
 hvm_load()
To: Jan Beulich <jbeulich@suse.com>
CC: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Wei Liu
	<wl@xen.org>, Igor Druzhinin <igor.druzhinin@citrix.com>, Xen-devel
	<xen-devel@lists.xenproject.org>
References: <20210719111449.21337-1-andrew.cooper3@citrix.com>
 <2b12abb9-4fde-f21a-e763-38de14847e3b@suse.com>
Message-ID: <71070f6b-f13e-f761-57a5-c07852f2d13c@citrix.com>
Date: Mon, 19 Jul 2021 14:22:21 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <2b12abb9-4fde-f21a-e763-38de14847e3b@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0019.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:151::6) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fea5a0ff-5db6-45fc-c419-08d94ab840fd
X-MS-TrafficTypeDiagnostic: BYAPR03MB3944:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB394419306DD46C90392CEC5DBAE19@BYAPR03MB3944.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: vDSHKu107q6Ltp09vAnAD2YXK1hkr3siUu8yJYsLzE1bHSQukz6+zH0e/E59D+jGBCxcgZgqnCe3IAjSsRetoMYG3aSqiejSuPIx86uNsKXIYL+RUgu8MLDjrTosSjv/hJtMaXY8qOIyDaZEcJhhrynf48IeUZum2riwI8mtVPvVVAGH8z5f8UrU7xI/CabLXjgAvie4ajKjGgOkp4U9JqgZCvLz2lQoI6Six1LclnvURoU0HQbzn7Y0/V320L1v1qPrwDG94MCfGYcLDstMg7k0dHua+UnRMfEJLEWuCX3LJHdqhC+fr94rVAb5NQ7+Hcrm5mSExkFy3xVGO3X4HN/WiTFOugReTyeWPYvEIPKYZaLp3L4fOI82fS3D0YwgzbFeVgH2HnZVF8/XtLjMog8Zfgdp4EOz7xGF2uB+wYNOUo7NyGDWp5gv/xuFOsPpqCtvqf8hDdeqY9XR7F1wDqRL/jbHxtisZODFg3bzSnzxfHDRWUNHGRMVhiErnTwyx+fuxa79tZ5RMKIxeE+B01nffHS5pEgMxSsyAjylDG7pVQY+A4qUwPOQryQoSYwj0cW7KeQoBMv821kwp76q98emkirdFWC5i45LJa4LvxIgyyg6Y70LDinlGLTSn4amB5EFH2c3L/tVR68YdQ3iFHjz8pytBXyznzyCvj3GmnNu4kKtVLjpqC9kwxFEY6r5q5qDBhgicphvJCC4X1DGdRoPDm0u6lOv5FkTK4349Cs=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(54906003)(2906002)(53546011)(6666004)(2616005)(26005)(4326008)(186003)(16576012)(316002)(956004)(38100700002)(83380400001)(86362001)(6486002)(31696002)(5660300002)(508600001)(6916009)(8936002)(36756003)(31686004)(66476007)(66556008)(8676002)(66946007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: fea5a0ff-5db6-45fc-c419-08d94ab840fd
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 13:22:27.8104
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 0VMERw+d8ThClGmOgbdDruLj9d5emginQlTboh2WycxreuohRlojhqqY9mQqxXbtbJIr9XEv/tkCARsV3GDNBI4cA/aq63ml7kpvwzYg7NY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3944
X-OriginatorOrg: citrix.com

On 19/07/2021 13:46, Jan Beulich wrote:
> On 19.07.2021 13:14, Andrew Cooper wrote:
>> hvm_load() is currently a mix of -errno and -1 style error handling,
>> which
>> aliases -EPERM. This leads to the following confusing diagnostics:
>>
>> From userspace:
>> xc: info: Restoring domain
>> xc: error: Unable to restore HVM context (1 = Operation not
>> permitted): Internal error
>> xc: error: Restore failed (1 = Operation not permitted): Internal error
>> xc_domain_restore: [1] Restore failed (1 = Operation not permitted)
>>
>> From Xen:
>> (XEN) HVM10.0 restore: inconsistent xsave state (feat=0x2ff
>> accum=0x21f xcr0=0x7 bv=0x3 err=-22)
>> (XEN) HVM10 restore: failed to load entry 16/0
>>
>> The actual error was a bad backport, but the -EINVAL got converted to
>> -EPERM
>> on the way out of the hypercall.
>>
>> The overwhelming majority of *_load() handlers already use -errno
>> consistenty.
>> Fix up the rest to be consistent, and fix a few other errors noticed
>> along the
>> way.
>>
>> * Failures of hvm_load_entry() indicate a truncated record or other
>> bad data
>> size. Use -ENODATA.
> But then ...
>
>> @@ -421,8 +421,8 @@ static int pit_load(struct domain *d,
>> hvm_domain_context_t *h)
>> if ( hvm_load_entry(PIT, h, &pit->hw) )
>> {
>> - spin_unlock(&pit->lock);
>> - return 1;
>> + rc = -ENODEV;
>> + goto out;
>> }
> ... use -ENODATA here as well?

Hmm - that was intended to be ENODATA.  Will fix.

> Preferably with the adjustment
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks,

> I'll pick this up for backporting once I see it in the tree.

I don't know how much the call tree has changed over time.  Every
handler will need a quick check on each release.

~Andrew


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 13:37:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 13:37:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158439.291665 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5TSC-0005rd-T9; Mon, 19 Jul 2021 13:37:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158439.291665; Mon, 19 Jul 2021 13:37:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5TSC-0005rW-Pf; Mon, 19 Jul 2021 13:37:04 +0000
Received: by outflank-mailman (input) for mailman id 158439;
 Mon, 19 Jul 2021 13:37:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5TSA-0005rL-RM; Mon, 19 Jul 2021 13:37:02 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5TSA-0002rt-LB; Mon, 19 Jul 2021 13:37:02 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5TSA-00031U-Ba; Mon, 19 Jul 2021 13:37:02 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5TSA-0005pK-8H; Mon, 19 Jul 2021 13:37:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=W2L0Yx3754bdtmv1wLtRXStusGoRTTG51LkoksoZ2ws=; b=oQPdyWccoQP7L0VxtVPnFimOVt
	Dgvy7Blvmh73czS2yQxWIk990UZ7VM1pnwkPqEQ29REBUG/ugXrZI+44HrgNP2D5osdz/6xdVM2Pi
	njb03JCR3QU1bUJvQwcXr37Y9IpeTc9yMZKLWA6FKAmf6vThRLKuiDFELvR3XZSqZDIQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163793-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163793: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 13:37:02 +0000

flight 163793 xen-unstable real [real]
flight 163805 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163793/
http://logs.test-lab.xenproject.org/osstest/logs/163805/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z   10 days
Failing since        163478  2021-07-09 15:23:45 Z    9 days   16 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    5 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 13:49:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 13:49:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158450.291690 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Tdh-0007cR-9s; Mon, 19 Jul 2021 13:48:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158450.291690; Mon, 19 Jul 2021 13:48:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Tdh-0007cK-75; Mon, 19 Jul 2021 13:48:57 +0000
Received: by outflank-mailman (input) for mailman id 158450;
 Mon, 19 Jul 2021 13:48:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=f5c2=ML=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m5Tdf-0007cE-Oa
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 13:48:55 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f6396e1b-3040-4cd6-89cb-d0f3fd5f4ded;
 Mon, 19 Jul 2021 13:48:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6396e1b-3040-4cd6-89cb-d0f3fd5f4ded
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626702534;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=2ILi7f2cMhEw88TFDhsdBbDM/yhwLtdvxJpavSdVB34=;
  b=Ocer3iSIIQjhwmzmUK7QYqvSYVCYMUNtCOMM2XgfdVAW/+MpPjsKOGQW
   CEamXS30HA9WRHSe6maX2x+7aYG4OKR8CQ+eNEWDLgk6inrPbo435ku4C
   agxNeF9nkg2xDo55RV6e9OYzsRz6eK/bkCnRjlRKoJJeLuj5y7ofHEeCN
   U=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 5YxjKIIjwEH4Fl14jFegKNIk1DCXPUBiYzXznmFUPfyEFUhvZ4PvnvvBK8Hk9S4fH5sCylRLUf
 3exRDCZECKDQnVn4j7lefjgA1YnLMmWVPgRXQE8AZIHw0AsLvZH9TpuyEBW0SSb0MBeK4Pm3kx
 INNsLQFBPdreZohM0eKlWGkqD8wbMNoC9x/ot7s8E5c1DxEHGsg+i2v8uc1DGZSrpWNEHPIq9R
 /fHdyJ/9RdV3LwbJsNgpw9jeoe2rm2vN6bFnJf5tMKrSrW7CBvI6BURLFOmfeIfzhNk01mz0l4
 7ZnWRb7IqdXBeFsgwNphckkM
X-SBRS: 5.1
X-MesageID: 50225147
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:CSNKu6MtJ/39D8BcTs2jsMiBIKoaSvp037Eqv3oedfUzSL39qy
 nOpoV86faaslYssR0b9exoW5PwJE80l6QFgrX5VI3KNGKN1VdARLsSircKqAeAJ8SRzIFgPN
 9bAspDNOE=
X-IronPort-AV: E=Sophos;i="5.84,252,1620705600"; 
   d="scan'208";a="50225147"
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Anthony PERARD <anthony.perard@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [XEN PATCH] tools/firmware/ovmf: Use OvmfXen platform file if exist and update OVMF
Date: Mon, 19 Jul 2021 14:48:45 +0100
Message-ID: <20210719134845.681725-1-anthony.perard@citrix.com>
X-Mailer: git-send-email 2.32.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

A platform introduced in EDK II named OvmfXen is now the one to use for
Xen instead of OvmfX64. It comes with PVH support.

Also, the Xen support in OvmfX64 is deprecated,
    "deprecation notice: *dynamic* multi-VMM (QEMU vs. Xen) support in OvmfPkg"
    https://edk2.groups.io/g/devel/message/75498
and has been removed upstream.

We need to also update to a newer version of OVMF as OvmfXen in the
release "edk2-stable202105" doesn't work well with Xen, so we need the
fix b37cfdd28071 ("OvmfPkg/XenPlatformPei: Relocate shared_info page
mapping").

Also, don't set anymore the number of thread for parallel build when
building the newer platform, OvmfPkg/build.sh is now doing parallel
build by default.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
https://xenbits.xen.org/git-http/ovmf.git master branch as been
update.

I've runned a flight on osstest with this change:
    http://logs.test-lab.xenproject.org/osstest/logs/163715/
---
 Config.mk                    |  2 +-
 tools/firmware/ovmf-makefile | 10 ++++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/Config.mk b/Config.mk
index f9dce4549b7c..4d723eec1d0d 100644
--- a/Config.mk
+++ b/Config.mk
@@ -244,7 +244,7 @@ QEMU_TRADITIONAL_URL ?= git://xenbits.xen.org/qemu-xen-traditional.git
 SEABIOS_UPSTREAM_URL ?= git://xenbits.xen.org/seabios.git
 MINIOS_UPSTREAM_URL ?= git://xenbits.xen.org/mini-os.git
 endif
-OVMF_UPSTREAM_REVISION ?= e1999b264f1f9d7230edf2448f757c73da567832
+OVMF_UPSTREAM_REVISION ?= b37cfdd2807181aed2fee1e17bd7ec1190db266a
 QEMU_UPSTREAM_REVISION ?= master
 MINIOS_UPSTREAM_REVISION ?= 051b87bb9c19609976fb038f386920e1ce5454c5
 
diff --git a/tools/firmware/ovmf-makefile b/tools/firmware/ovmf-makefile
index 55f999214545..1f619a518993 100644
--- a/tools/firmware/ovmf-makefile
+++ b/tools/firmware/ovmf-makefile
@@ -17,8 +17,14 @@ all: build
 .PHONY: build
 build:
 	if test -e .git ; then $(GIT) submodule update --init --recursive ; fi
-	OvmfPkg/build.sh -a X64 -b $(TARGET) -n 4
-	cp Build/OvmfX64/$(TARGET)_GCC*/FV/OVMF.fd ovmf.bin
+	set -ex; \
+	if test -e OvmfPkg/OvmfXen.dsc; then \
+	  OvmfPkg/build.sh -a X64 -b $(TARGET) -p OvmfPkg/OvmfXen.dsc; \
+	  cp Build/OvmfXen/$(TARGET)_GCC*/FV/OVMF.fd ovmf.bin; \
+	else \
+	  OvmfPkg/build.sh -a X64 -b $(TARGET) -n 4; \
+	  cp Build/OvmfX64/$(TARGET)_GCC*/FV/OVMF.fd ovmf.bin; \
+	fi
 
 .PHONY: clean
 clean:
-- 
Anthony PERARD



From xen-devel-bounces@lists.xenproject.org Mon Jul 19 14:33:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 14:33:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158457.291702 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5UKc-0004TA-MF; Mon, 19 Jul 2021 14:33:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158457.291702; Mon, 19 Jul 2021 14:33:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5UKc-0004T3-IB; Mon, 19 Jul 2021 14:33:18 +0000
Received: by outflank-mailman (input) for mailman id 158457;
 Mon, 19 Jul 2021 14:33:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/9BO=ML=citrix.com=George.Dunlap@srs-us1.protection.inumbo.net>)
 id 1m5UKb-0004Sx-FA
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 14:33:17 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 241b0b8a-2622-4d92-8562-b2eb678533a7;
 Mon, 19 Jul 2021 14:33:15 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 241b0b8a-2622-4d92-8562-b2eb678533a7
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626705195;
  h=from:to:cc:subject:date:message-id:references:
   in-reply-to:mime-version;
  bh=PwfhRq6Q7A8bPn0ceDbsHhKD9+jbdK1swWXsSjpd16U=;
  b=UBEIswMPfihnF6CB0StveHym62wFe8BKxl+IAohY6+LlYbiuQ5+uG75J
   7+BwvxSrbnzb5RYXqVKxQVnFjOXg3voGJH5gUUFOxk0bXZRkj41K9Xe9u
   pn4nUbACc1hOAn0UoO2aZlGE0HuvPhYy/9VUuy7hH52XBpgcnn5cr/ebp
   E=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: SSpEXkjkqDLmZYXkxHWsXbGJHyVds+JN2cEfI1XHJ7cJmkczMx+Sap/j4Vytb/kKIEilGoPAZg
 4yl+1nQjcTGdgP2P+7ilsXDQU6DIZffOUoPoe/oYfromULIVh4h8xThoKkyqMviMFrDQi4Kv1G
 MVao61Ql7/XdyLSb4N/aalrsqPVq3Llt+EB666dpilzcMyjBOobm482GjDpcHTfJkwKr2KaEXr
 frG4e42nMNiu51v4pai26ARb3V4SBl+H1nh0IOSpE/vPR+yaXu4M38nz0SALyXheryxBC9RQ7V
 IWwLIy6eiIP8o/kuTk+Xj+/c
X-SBRS: 5.1
X-MesageID: 48567176
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ovyuJqFFdUSvl2uMpLqEHseALOsnbusQ8zAXPiBKJCC9vPb5qy
 nOpoV86faQslwssR4b9uxoVJPvfZqYz+8W3WBzB8bEYOCFghrKEGgK1+KLrwEIWReOk9K1vZ
 0KT0EUMqyVMbEVt6fHCAnTKade/DGEmprY+9s3GR1WPHBXg6IL1XYINu6CeHcGPTWvnfACZe
 ehDswsnUvZRV0nKv6VK1MiROb5q9jChPvdEGI7705O0nj0sduwgoSKaSSl4g==
X-IronPort-AV: E=Sophos;i="5.84,252,1620705600"; 
   d="scan'208,217";a="48567176"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=As7sXRFKxvqhVJYp+bYt037SCzz65UsNZBbeclx6t3MKPR3vJpuOEdT8eR+XolkKaB2a9ChE8FyZr0VJ7LYZhT0x1ODympSqt3HABuST186WWT9i+Ditx0TC1kJNnFI4u1ubZJ5C+v8ndEYwR0auLNyuFGJTx036CbP4E4UPu0NPI5aVs4bQ6Q/4sBi+/YSENAGzcJl2TH2kMDDMXhr7iq8iwjvWylMMbSXT6JeaqpCo8HKSrcz4lj9th764NAqEM5u9uG1Fp90xotqH7z5lW0CywR1kfmg0Zecb6nigXeN03+0V6046wjC+PUlq/escLZ3qVtQcSFrYI1MiUjP6LQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PwfhRq6Q7A8bPn0ceDbsHhKD9+jbdK1swWXsSjpd16U=;
 b=JtbXUF6BognArB4fB99STtAoIfhPO+hOBfrXGjqf+wRCmudHehiFtAlU9/xOip4QPq8MJEtV8y3qXhfhMQ3+CazhHVFJej/5y+B3Gfh8AN3EVvOUkE55AFp8SnWsaxUvaHERqpRqTu8rBA3u2CCkC6HdoEg47xjI4wuDGnSxujj0Y8oaH64bfoma2kzm9nSP+HxJhVLNK4YGdSBt0IVAwB9gryheCXoV31irlleXli6j6ScafEpyaSxm2S5hljTpjscXnhsohNEUfIwYqX4yaPifglgLK2I5T0W6G/mfMg56UmKsYFv/CvEBuAn08n+0WJ7OQs6VvM/JYiPfMxtWLQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PwfhRq6Q7A8bPn0ceDbsHhKD9+jbdK1swWXsSjpd16U=;
 b=nv/GjnbH2dQzsog3I+qZrkApK2XIkNoKKUzjjTUdwaPT66xju3fgJazPcZHAa4oNEryzSG/+rbTCUf/TTwwZayczdqdahnXopzz+rzZBQgulqUhiLurkE/IsiuFqcasoImzQvJuvSEWO7a3sM4li3ZHUPPUsmC75T19WuLTW7FM=
From: George Dunlap <George.Dunlap@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Anthony Perard <anthony.perard@citrix.com>, Andrew Cooper
	<Andrew.Cooper3@citrix.com>, Ian Jackson <iwj@xenproject.org>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
Subject: Re: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Thread-Topic: [XEN PATCH v2] xen: allow XSM_FLASK_POLICY only if checkpolicy
 binary is available
Thread-Index: AQHXej93TtKmWup1Y0m/GZbcx8POPatJ7UAAgAA1EQCAAAT5AIAAOjKA
Date: Mon, 19 Jul 2021 14:33:09 +0000
Message-ID: <BD4133B7-2979-403B-B33A-8E7D6D4B6148@citrix.com>
References: <20210714161734.256246-1-anthony.perard@citrix.com>
 <20210716123812.494081-1-anthony.perard@citrix.com>
 <aada0028-ff60-9f59-5d87-a023ecd35d11@suse.com> <YPVYJqKBEmlAwnME@perard>
 <97e99661-2b03-22fb-018b-a40c48b86a0c@suse.com>
In-Reply-To: <97e99661-2b03-22fb-018b-a40c48b86a0c@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.3654.80.0.2.43)
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 1c21a3b0-b01d-4861-59be-08d94ac22159
x-ms-traffictypediagnostic: PH0PR03MB5894:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PH0PR03MB5894C8A00026D952BF77692C99E19@PH0PR03MB5894.namprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: dpb82OD5/dQ3/nJBDvnhu3fS8Y8raXOiFhC6FlFWre5nkDgsxnHrU3DhFkRbUXDmQAnh6iDOcXaplKD6BM+JbdwdwsekbBMujweBOB22utWM35KSCiDiEPhznrlBAEHxd6lCO6urC/EwsMICJerNN2hYZlMZBzi2A7LuFUY0PAefiOeYdaVVQSouWNBfeG4mqTlC+G9NscXrE+hd6mpvYlNFC5x/D7hNIWjcH5SCE/389FgVWyhDAZAtdzXp3q+4i0ZsZ0Qgw17UUVVqLJLuwDMdG9AzFar6kZdCiRFVYJ24sV76Us+gdMklH+4GTsxb7DQbgLxA3AfnokVNVngB//k3cDhTrBD1gDk8Zh2u1oMrMYeoflx2v0a1hTqlV04onD9st+tAvdj5+Ncya1RUSNuWEkH37o8Pyk7KQnwSkcgIeaAN1IvyGS8haGl6a3yEUriRgwSKvMnYrnUPQPoNdO/QmPaJ/alzhvwjQlMA44P9tX/4xIHTpMK8kveRCX6/QN8gi2iCnwlmoZHbF76V6FNIUUxHJgx3k1tfSfuD7U/iQs9PTAZNm0voF3OvDvr6M1UuV0QFpzKoyIHsxiRMWgISDYKQsbA/MKf779fp4+BUmWdfdmY+P9dmwo92R0HXzRGQ4K6kyIcL5UXK0+muygctA0mttPyINVBK0jKfog3/c1yXT+wRjwVUPNwQw1JQW4ZvjrN+3yXxEWK1NDJxQCYlSzXMC0YIm2dMACSyA4Fk8yMRcmgudA8BVU7PjhKc
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR03MB5669.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(5660300002)(8676002)(2906002)(508600001)(36756003)(8936002)(54906003)(83380400001)(71200400001)(6512007)(6506007)(86362001)(6486002)(186003)(33656002)(53546011)(316002)(76116006)(38100700002)(91956017)(66946007)(2616005)(6916009)(66476007)(66556008)(66446008)(4326008)(64756008)(122000001)(26005)(38070700004)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 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
Content-Type: multipart/alternative;
	boundary="_000_BD4133B72979403BB33A8E7D6D4B6148citrixcom_"
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PH0PR03MB5669.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1c21a3b0-b01d-4861-59be-08d94ac22159
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2021 14:33:09.2155
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 7yDa+FWz4WwAE8brUYqtzh6cMZmwYvOBgJtK/d2cMF3sD04LV7JVVUzvpXoUYuDnQ0Cm1AJ9mcgxgLi1Wjn6IAWhlMXxwokPf2owOZm21dA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5894
X-OriginatorOrg: citrix.com

--_000_BD4133B72979403BB33A8E7D6D4B6148citrixcom_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

DQoNCk9uIDE5IEp1bCAyMDIxLCBhdCAxMjowNCwgSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2Uu
Y29tPG1haWx0bzpqYmV1bGljaEBzdXNlLmNvbT4+IHdyb3RlOg0KDQpPbiAxOS4wNy4yMDIxIDEy
OjQ3LCBBbnRob255IFBFUkFSRCB3cm90ZToNCk9uIE1vbiwgSnVsIDE5LCAyMDIxIGF0IDA5OjM3
OjA2QU0gKzAyMDAsIEphbiBCZXVsaWNoIHdyb3RlOg0KT24gMTYuMDcuMjAyMSAxNDozOCwgQW50
aG9ueSBQRVJBUkQgd3JvdGU6DQorZXhwb3J0IEhBU19DSEVDS1BPTElDWSA6PSAkKGNhbGwgc3Vj
Y2VzcywkKENIRUNLUE9MSUNZKSAtaCAyPiYxIHwgZ3JlcCAtcSB4ZW4pDQoNCldoaWxlIHRoZSBz
ZXR0aW5nIGluZGVlZCBnZXRzIG9idGFpbmVkIGluIGEgTWFrZWZpbGUgbm93LCAuLi4NCg0KLS0t
IGEveGVuL2NvbW1vbi9LY29uZmlnDQorKysgYi94ZW4vY29tbW9uL0tjb25maWcNCkBAIC0yMzUs
OCArMjM1LDggQEAgY29uZmlnIFhTTV9GTEFTS19BVkNfU1RBVFMNCg0KY29uZmlnIFhTTV9GTEFT
S19QT0xJQ1kNCmJvb2wgIkNvbXBpbGUgWGVuIHdpdGggYSBidWlsdC1pbiBGTEFTSyBzZWN1cml0
eSBwb2xpY3kiDQotIGRlZmF1bHQgeSBpZiAiJChYRU5fSEFTX0NIRUNLUE9MSUNZKSIgPSAieSIN
Ci0gZGVwZW5kcyBvbiBYU01fRkxBU0sNCisgZGVmYXVsdCB5DQorIGRlcGVuZHMgb24gWFNNX0ZM
QVNLICYmICIkKEhBU19DSEVDS1BPTElDWSkiDQoNCi4uLiBpdCdzIHN0aWxsIHVzZWQgYXMgYSBL
Y29uZmlnIGRlcGVuZGVuY3kuIFRoaXMgaW4gcGFydGljdWxhcg0KZG9lcyBub3QgYWRkcmVzcyBH
ZW9yZ2UncyBjb25jZXJuIGFib3V0IGEgc2V0dGluZyBzaWxlbnRseSBnZXR0aW5nDQp0dXJuZWQg
b2ZmIGJlaGluZCB0aGUgYmFjayBvZiB0aGUgcGVyc29uIGhhdmluZyBlbmFibGVkIGl0IChhbmQN
Cg0KVGhpcyBwYXRjaCB2MiB3YXNuJ3QgbWVhbnQgdG8gYWRkcmVzcyBHZW9yZ2UncyBjb25jZXJu
IHdoaWNoIGRpZG4ndA0KZXhpc3QgYXQgdGhlIHRpbWUgdGhpcyB2MiB3YXMgc2VudC4uLiBJIHdh
cyB0cnlpbmcgdG8gYWRkcmVzcyB5b3Vycy4NCg0KQnV0IGl0IHNlZW1zIHRoYXQgIkdlb3JnZSdz
IGNvbmNlcm4iIGlzIHBhcnQgb2YgeW91ciBpc3N1ZXMgd2l0aA0KS2NvbmZpZyB0b28sIHdoaWNo
IEkgbWlzc2VkIHdoZW4gdHJ5aW5nIHRvIHJpZ2h0IHRoaXMgdjIuDQoNCkFueXdheSwgdGhvc2Ug
dHdvIHBhdGNoZXMgYXJlIHRoZSBvbmx5IHdheSBJJ20gZ29pbmcgdG8gdHJ5IHRvIGZpeCB0aGUN
CnJhbmRvbSBidWlsZCBmYWlsdXJlIGluIHRoZSBHaXRMYWIgQ0ksIEknbSBub3QgZ29pbmcgdG8g
dHJ5IHRvIGZpeA0KaXNzdWVzIHdpdGggdGhlIHVzZSBvZiBLY29uZmlnIGZvciBub3cuIEluIHRo
ZSBtZWFuIHRpbWUgZWl0aGVyIHYxIG9yIHYyDQppcyBjb21taXR0ZWQsIG9yIHdpbGwganVzdCBr
ZWVwIGdldHRpbmcgcmFuZG9tIGJ1aWxkIGZhaWx1cmUgaW4gdGhlDQpHaXRMYWIgQ0kuDQoNCkZh
aXIgZW5vdWdoLiBJIGFjdHVhbGx5IHRoaW5rIHRoYXQgcmFuZGNvbmZpZyBzaG91bGRuJ3QgYWN0
IHF1aXRlIGFzDQpyYW5kb21seSBhcyBpdCBkb2VzLg0KDQpJdCBzb3VuZHMgbGlrZSByYW5kY29u
ZmlnIGN1cnJlbnRseSB3b3JrcyBhcHByb3ByaWF0ZWx5IGZvciBob3cgS0NvbmZpZyBpcyBtZWFu
dCB0byB3b3JrLiAgVGhhdCBpcywgZm9yIGdvb2Qgb3IgZm9yIGlsbCwgS0NvbmZpZyBzZWVtcyBk
ZXNpZ25lZCB0byBzaWxlbnRseSBkaXNjYXJkIG9wdGlvbnMgd2l0aCBtaXNzaW5nIGRlcGVuZGVu
Y2llcyAoZWl0aGVyIGludGVybmFsIG9yIGV4dGVybmFsKTsgc28gZ2VuZXJhdGluZyBhIGNvbmZp
ZyB3aXRoIG1pc3NpbmcgZGVwZW5kZW5jaWVzIHRvIGhhbmQgdG8gaXQgaXMg4oCcc2Vuc2libGXi
gJ0uDQoNCg0KQnV0IHdoYXQncyBzZW5zaWJsZSBhcyBiZWhhdmlvciB0aGVyZSByZWFsbHkNCmRl
cGVuZHMgaGVhdmlseSBvbiB0aGUgZnV0dXJlIGludGVudGlvbnMgd2l0aCAuY29uZmlnLiBJZiB3
ZSBmb2xsb3cNCkxpbnV4J2VzIG1vZGVsICh3aGljaCBBbmRyZXcgYWR2b2NhdGVzIGZvciksIGl0
cyByYW5kb21uZXNzIHdvdWxkIGJlDQpsaW1pdGVkIGJ5IG9wdGlvbnMgd2hpY2ggY291bGQgZ2V0
IHJhbmRvbWx5IHNldCBnZXR0aW5nIGZ1cnRoZXINCmFsdGVyZWQgYnkgZW52aXJvbm1lbnRhbCBj
b25kaXRpb25zLiBIZW5jZSB0aGF0IHdvdWxkIGxpbWl0IHdoYXQgY2FuDQphY3R1YWxseSBiZSB0
ZXN0ZWQsIGJ1dCBpdCB3b3VsZCBhdm9pZCBmYWlsdXJlcyByZXN1bHRpbmcgZnJvbSB0aGUNCmVu
dmlyb25tZW50IG5vdCBtYXRjaGluZyB0aGUgY2hvc2Ugc2V0dGluZ3MuDQoNCk90b2ggd2l0aCBv
dXIgY3VycmVudCBtb2RlbCAobGFyZ2VseSwgbGVhdmluZyBhc2lkZSB0aGUgZmV3DQplbnZpcm9u
bWVudCBjaGVja3Mgd2UndmUgYWxyZWFkeSBnb3QpIHdoYXQgaXMgYmVpbmcgYXNrZWQgZm9yIGlz
DQp3aGF0IGlzIGdvaW5nIHRvIGdldCBidWlsdC4gQnV0IGZhaWx1cmUgZnJvbSBlbnZpcm9ubWVu
dGFsDQpjb25zdHJhaW50cyBzaG91bGRuJ3QgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBmYWlsdXJl
IGZyb20gYmFkDQppbnRlcmFjdGlvbiBvZiBvcHRpb25zOyBpdCdzIChhaXVpKSB0aGUgbGF0dGVy
IHdoaWNoIHJhbmRjb25maWcgaXMNCnN1cHBvc2VkIHRvIHBvaW50IG91dC4NCg0KUmlnaHQ7IHNv
IGFub3RoZXIgc29sdXRpb24gdG8gdGhlIOKAmHJhbmRjb25maWcgQ0kgbG9vcOKAmSBpc3N1ZSB3
b3VsZCBiZSB0byBoYXZlIHRoZSBwaXBlbGluZSBwYXNzIChvciBzb21lIG5vbi1wYXNzIG5vbi1m
YWlsIHN0YXRlIGlmIHBvc3NpYmxlKSB3aGVuIHRoZW4gYnVpbGQgZmFpbGVkIGJlY2F1c2UgdGhl
cmUgd2VyZSBtaXNzaW5nIGRlcGVuZGVuY2llcy4gIE1heWJlIG9uZSB3YXkgb2YgZG9pbmcgdGhh
dCB3b3VsZCBiZSB0byBoYXZlIGEg4oCcbWFrZSBjaGVjay1kZXBlbmRlbmNpZXPigJ0gdGFyZ2V0
IHRoYXQgd291bGQgcnVuIGZpcnN0Lg0KDQpUaGF0IHNhaWQsIHNpbmNlIGl04oCZcyBiYXNpY2Fs
bHkga25vd24gdGhhdCDigJxzaWxlbnRseSBkaXNhYmxpbmcgdGhpbmdzIGl0IGNhbuKAmXQgYnVp
bGQiIGlzIGEgcXVpcmsgb2YgS2NvbmZpZywgSeKAmW0gbGVzcyBpbmNsaW5lZCB0byBvYmplY3Qg
dG8gdjEgb2YgdGhlIHBhdGNoLg0KDQogLUdlb3JnZQ0K

--_000_BD4133B72979403BB33A8E7D6D4B6148citrixcom_
Content-Type: text/html; charset="utf-8"
Content-ID: <3C5BD98E687F6B49833AE13E4F69B952@namprd03.prod.outlook.com>
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3b3JkLXdy
YXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgbGluZS1icmVhazogYWZ0
ZXItd2hpdGUtc3BhY2U7IiBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCjxkaXY+PGJyIGNsYXNz
PSIiPg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPk9u
IDE5IEp1bCAyMDIxLCBhdCAxMjowNCwgSmFuIEJldWxpY2ggJmx0OzxhIGhyZWY9Im1haWx0bzpq
YmV1bGljaEBzdXNlLmNvbSIgY2xhc3M9IiI+amJldWxpY2hAc3VzZS5jb208L2E+Jmd0OyB3cm90
ZTo8L2Rpdj4NCjxiciBjbGFzcz0iQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+DQo8ZGl2IGNs
YXNzPSIiPjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWls
eTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12
YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6
IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNm
b3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtp
dC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZsb2F0OiBu
b25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNzPSIiPk9uDQogMTkuMDcuMjAy
MSAxMjo0NywgQW50aG9ueSBQRVJBUkQgd3JvdGU6PC9zcGFuPjxiciBzdHlsZT0iY2FyZXQtY29s
b3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgZm9udC1zaXplOiAxMnB4
OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7IGZvbnQtd2Vp
Z2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0
ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1h
bDsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6IDBweDsgdGV4
dC1kZWNvcmF0aW9uOiBub25lOyIgY2xhc3M9IiI+DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBz
dHlsZT0iZm9udC1mYW1pbHk6IEhlbHZldGljYTsgZm9udC1zaXplOiAxMnB4OyBmb250LXN0eWxl
OiBub3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7
IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IG9ycGhhbnM6IGF1dG87IHRleHQtYWxpZ246IHN0YXJ0
OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5v
cm1hbDsgd2lkb3dzOiBhdXRvOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXNpemUt
YWRqdXN0OiBhdXRvOyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3Jh
dGlvbjogbm9uZTsiIGNsYXNzPSIiPg0KT24gTW9uLCBKdWwgMTksIDIwMjEgYXQgMDk6Mzc6MDZB
TSArMDIwMCwgSmFuIEJldWxpY2ggd3JvdGU6PGJyIGNsYXNzPSIiPg0KPGJsb2NrcXVvdGUgdHlw
ZT0iY2l0ZSIgY2xhc3M9IiI+T24gMTYuMDcuMjAyMSAxNDozOCwgQW50aG9ueSBQRVJBUkQgd3Jv
dGU6PGJyIGNsYXNzPSIiPg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+K2V4cG9y
dCBIQVNfQ0hFQ0tQT0xJQ1kgOj0gJChjYWxsIHN1Y2Nlc3MsJChDSEVDS1BPTElDWSkgLWggMiZn
dDsmYW1wOzEgfCBncmVwIC1xIHhlbik8YnIgY2xhc3M9IiI+DQo8L2Jsb2NrcXVvdGU+DQo8YnIg
Y2xhc3M9IiI+DQpXaGlsZSB0aGUgc2V0dGluZyBpbmRlZWQgZ2V0cyBvYnRhaW5lZCBpbiBhIE1h
a2VmaWxlIG5vdywgLi4uPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0KPGJsb2NrcXVvdGUg
dHlwZT0iY2l0ZSIgY2xhc3M9IiI+LS0tIGEveGVuL2NvbW1vbi9LY29uZmlnPGJyIGNsYXNzPSIi
Pg0KKysrIGIveGVuL2NvbW1vbi9LY29uZmlnPGJyIGNsYXNzPSIiPg0KQEAgLTIzNSw4ICsyMzUs
OCBAQCBjb25maWcgWFNNX0ZMQVNLX0FWQ19TVEFUUzxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0i
Ij4NCmNvbmZpZyBYU01fRkxBU0tfUE9MSUNZPGJyIGNsYXNzPSIiPg0KPHNwYW4gY2xhc3M9IkFw
cGxlLXRhYi1zcGFuIiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZTsiPjwvc3Bhbj5ib29sICZxdW90
O0NvbXBpbGUgWGVuIHdpdGggYSBidWlsdC1pbiBGTEFTSyBzZWN1cml0eSBwb2xpY3kmcXVvdDs8
YnIgY2xhc3M9IiI+DQotPHNwYW4gY2xhc3M9IkFwcGxlLXRhYi1zcGFuIiBzdHlsZT0id2hpdGUt
c3BhY2U6IHByZTsiPiA8L3NwYW4+ZGVmYXVsdCB5IGlmICZxdW90OyQoWEVOX0hBU19DSEVDS1BP
TElDWSkmcXVvdDsgPSAmcXVvdDt5JnF1b3Q7PGJyIGNsYXNzPSIiPg0KLTxzcGFuIGNsYXNzPSJB
cHBsZS10YWItc3BhbiIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmU7Ij4gPC9zcGFuPmRlcGVuZHMg
b24gWFNNX0ZMQVNLPGJyIGNsYXNzPSIiPg0KKzxzcGFuIGNsYXNzPSJBcHBsZS10YWItc3BhbiIg
c3R5bGU9IndoaXRlLXNwYWNlOiBwcmU7Ij4gPC9zcGFuPmRlZmF1bHQgeTxiciBjbGFzcz0iIj4N
Cis8c3BhbiBjbGFzcz0iQXBwbGUtdGFiLXNwYW4iIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlOyI+
IDwvc3Bhbj5kZXBlbmRzIG9uIFhTTV9GTEFTSyAmYW1wOyZhbXA7ICZxdW90OyQoSEFTX0NIRUNL
UE9MSUNZKSZxdW90OzxiciBjbGFzcz0iIj4NCjwvYmxvY2txdW90ZT4NCjxiciBjbGFzcz0iIj4N
Ci4uLiBpdCdzIHN0aWxsIHVzZWQgYXMgYSBLY29uZmlnIGRlcGVuZGVuY3kuIFRoaXMgaW4gcGFy
dGljdWxhcjxiciBjbGFzcz0iIj4NCmRvZXMgbm90IGFkZHJlc3MgR2VvcmdlJ3MgY29uY2VybiBh
Ym91dCBhIHNldHRpbmcgc2lsZW50bHkgZ2V0dGluZzxiciBjbGFzcz0iIj4NCnR1cm5lZCBvZmYg
YmVoaW5kIHRoZSBiYWNrIG9mIHRoZSBwZXJzb24gaGF2aW5nIGVuYWJsZWQgaXQgKGFuZDxiciBj
bGFzcz0iIj4NCjwvYmxvY2txdW90ZT4NCjxiciBjbGFzcz0iIj4NClRoaXMgcGF0Y2ggdjIgd2Fz
bid0IG1lYW50IHRvIGFkZHJlc3MgR2VvcmdlJ3MgY29uY2VybiB3aGljaCBkaWRuJ3Q8YnIgY2xh
c3M9IiI+DQpleGlzdCBhdCB0aGUgdGltZSB0aGlzIHYyIHdhcyBzZW50Li4uIEkgd2FzIHRyeWlu
ZyB0byBhZGRyZXNzIHlvdXJzLjxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCkJ1dCBpdCBz
ZWVtcyB0aGF0ICZxdW90O0dlb3JnZSdzIGNvbmNlcm4mcXVvdDsgaXMgcGFydCBvZiB5b3VyIGlz
c3VlcyB3aXRoPGJyIGNsYXNzPSIiPg0KS2NvbmZpZyB0b28sIHdoaWNoIEkgbWlzc2VkIHdoZW4g
dHJ5aW5nIHRvIHJpZ2h0IHRoaXMgdjIuPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0KQW55
d2F5LCB0aG9zZSB0d28gcGF0Y2hlcyBhcmUgdGhlIG9ubHkgd2F5IEknbSBnb2luZyB0byB0cnkg
dG8gZml4IHRoZTxiciBjbGFzcz0iIj4NCnJhbmRvbSBidWlsZCBmYWlsdXJlIGluIHRoZSBHaXRM
YWIgQ0ksIEknbSBub3QgZ29pbmcgdG8gdHJ5IHRvIGZpeDxiciBjbGFzcz0iIj4NCmlzc3VlcyB3
aXRoIHRoZSB1c2Ugb2YgS2NvbmZpZyBmb3Igbm93LiBJbiB0aGUgbWVhbiB0aW1lIGVpdGhlciB2
MSBvciB2MjxiciBjbGFzcz0iIj4NCmlzIGNvbW1pdHRlZCwgb3Igd2lsbCBqdXN0IGtlZXAgZ2V0
dGluZyByYW5kb20gYnVpbGQgZmFpbHVyZSBpbiB0aGU8YnIgY2xhc3M9IiI+DQpHaXRMYWIgQ0ku
PGJyIGNsYXNzPSIiPg0KPC9ibG9ja3F1b3RlPg0KPGJyIHN0eWxlPSJjYXJldC1jb2xvcjogcmdi
KDAsIDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQt
c3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5v
cm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5k
ZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3Jk
LXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29y
YXRpb246IG5vbmU7IiBjbGFzcz0iIj4NCjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAs
IDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5
bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1h
bDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50
OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNw
YWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRp
b246IG5vbmU7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNz
PSIiPkZhaXINCiBlbm91Z2guIEkgYWN0dWFsbHkgdGhpbmsgdGhhdCByYW5kY29uZmlnIHNob3Vs
ZG4ndCBhY3QgcXVpdGUgYXM8L3NwYW4+PGJyIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAs
IDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6
IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsg
bGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAw
cHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNp
bmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246
IG5vbmU7IiBjbGFzcz0iIj4NCjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDAp
OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5v
cm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0
dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7
IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6
IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5v
bmU7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNzPSIiPnJh
bmRvbWx5DQogYXMgaXQgZG9lcy4gPC9zcGFuPjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj48
YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXY+SXQgc291bmRzIGxpa2UgcmFuZGNvbmZpZyBjdXJy
ZW50bHkgd29ya3MgYXBwcm9wcmlhdGVseSBmb3IgaG93IEtDb25maWcgaXMgbWVhbnQgdG8gd29y
ay4gJm5ic3A7VGhhdCBpcywgZm9yIGdvb2Qgb3IgZm9yIGlsbCwgS0NvbmZpZyBzZWVtcyBkZXNp
Z25lZCB0byBzaWxlbnRseSBkaXNjYXJkIG9wdGlvbnMgd2l0aCBtaXNzaW5nIGRlcGVuZGVuY2ll
cyAoZWl0aGVyIGludGVybmFsIG9yIGV4dGVybmFsKTsgc28gZ2VuZXJhdGluZyBhIGNvbmZpZw0K
IHdpdGggbWlzc2luZyBkZXBlbmRlbmNpZXMgdG8gaGFuZCB0byBpdCBpcyDigJxzZW5zaWJsZeKA
nS48L2Rpdj4NCjxkaXY+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2PjxiciBjbGFzcz0iIj4N
CjwvZGl2Pg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIi
PjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogSGVs
dmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50
LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1h
bDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBu
b25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0
LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZsb2F0OiBub25lOyBk
aXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNzPSIiPkJ1dA0KIHdoYXQncyBzZW5zaWJs
ZSBhcyBiZWhhdmlvciB0aGVyZSByZWFsbHk8L3NwYW4+PGJyIHN0eWxlPSJjYXJldC1jb2xvcjog
cmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZv
bnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6
IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQt
aW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3
b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7IiBjbGFzcz0iIj4NCjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdi
KDAsIDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQt
c3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5v
cm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5k
ZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3Jk
LXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29y
YXRpb246IG5vbmU7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNs
YXNzPSIiPmRlcGVuZHMNCiBoZWF2aWx5IG9uIHRoZSBmdXR1cmUgaW50ZW50aW9ucyB3aXRoIC5j
b25maWcuIElmIHdlIGZvbGxvdzwvc3Bhbj48YnIgc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwg
MCwgMCk7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHls
ZTogbm9ybWFsOyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFs
OyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6
IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3Bh
Y2luZzogMHB4OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlv
bjogbm9uZTsiIGNsYXNzPSIiPg0KPHNwYW4gc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwg
MCk7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTog
bm9ybWFsOyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBs
ZXR0ZXItc3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBw
eDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2lu
ZzogMHB4OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjog
bm9uZTsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyIgY2xhc3M9IiI+
TGludXgnZXMNCiBtb2RlbCAod2hpY2ggQW5kcmV3IGFkdm9jYXRlcyBmb3IpLCBpdHMgcmFuZG9t
bmVzcyB3b3VsZCBiZTwvc3Bhbj48YnIgc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7
IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9y
bWFsOyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0
ZXItc3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsg
dGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzog
MHB4OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9u
ZTsiIGNsYXNzPSIiPg0KPHNwYW4gc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZv
bnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFs
OyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXIt
c3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4
dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4
OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsg
ZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyIgY2xhc3M9IiI+bGltaXRl
ZA0KIGJ5IG9wdGlvbnMgd2hpY2ggY291bGQgZ2V0IHJhbmRvbWx5IHNldCBnZXR0aW5nIGZ1cnRo
ZXI8L3NwYW4+PGJyIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWls
eTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12
YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6
IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNm
b3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtp
dC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IiBjbGFzcz0i
Ij4NCjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTog
SGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJp
YW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5v
cm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3Jt
OiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10
ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZsb2F0OiBub25l
OyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNzPSIiPmFsdGVyZWQNCiBieSBlbnZp
cm9ubWVudGFsIGNvbmRpdGlvbnMuIEhlbmNlIHRoYXQgd291bGQgbGltaXQgd2hhdCBjYW48L3Nw
YW4+PGJyIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogSGVs
dmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50
LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1h
bDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBu
b25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0
LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IiBjbGFzcz0iIj4NCjxz
cGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0
aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNh
cHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsg
dGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25l
OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0
cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZsb2F0OiBub25lOyBkaXNw
bGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNzPSIiPmFjdHVhbGx5DQogYmUgdGVzdGVkLCBi
dXQgaXQgd291bGQgYXZvaWQgZmFpbHVyZXMgcmVzdWx0aW5nIGZyb20gdGhlPC9zcGFuPjxiciBz
dHlsZT0iY2FyZXQtY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsg
Zm9udC1zaXplOiAxMnB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBu
b3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IHRleHQt
YWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hp
dGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Ut
d2lkdGg6IDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyIgY2xhc3M9IiI+DQo8c3BhbiBzdHls
ZT0iY2FyZXQtY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgZm9u
dC1zaXplOiAxMnB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBub3Jt
YWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IHRleHQtYWxp
Z246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUt
c3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lk
dGg6IDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5s
aW5lICFpbXBvcnRhbnQ7IiBjbGFzcz0iIj5lbnZpcm9ubWVudA0KIG5vdCBtYXRjaGluZyB0aGUg
Y2hvc2Ugc2V0dGluZ3MuPC9zcGFuPjxiciBzdHlsZT0iY2FyZXQtY29sb3I6IHJnYigwLCAwLCAw
KTsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgZm9udC1zaXplOiAxMnB4OyBmb250LXN0eWxlOiBu
b3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxl
dHRlci1zcGFjaW5nOiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4
OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5n
OiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6IDBweDsgdGV4dC1kZWNvcmF0aW9uOiBu
b25lOyIgY2xhc3M9IiI+DQo8YnIgc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZv
bnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFs
OyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXIt
c3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4
dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4
OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsi
IGNsYXNzPSIiPg0KPHNwYW4gc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQt
ZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFsOyBm
b250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3Bh
Y2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10
cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyAt
d2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZmxv
YXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyIgY2xhc3M9IiI+T3RvaA0KIHdp
dGggb3VyIGN1cnJlbnQgbW9kZWwgKGxhcmdlbHksIGxlYXZpbmcgYXNpZGUgdGhlIGZldzwvc3Bh
bj48YnIgc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBIZWx2
ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQt
Y2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFs
OyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5v
bmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyAtd2Via2l0LXRleHQt
c3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsiIGNsYXNzPSIiPg0KPHNw
YW4gc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBIZWx2ZXRp
Y2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQtY2Fw
czogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyB0
ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7
IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyAtd2Via2l0LXRleHQtc3Ry
b2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZmxvYXQ6IG5vbmU7IGRpc3Bs
YXk6IGlubGluZSAhaW1wb3J0YW50OyIgY2xhc3M9IiI+ZW52aXJvbm1lbnQNCiBjaGVja3Mgd2Un
dmUgYWxyZWFkeSBnb3QpIHdoYXQgaXMgYmVpbmcgYXNrZWQgZm9yIGlzPC9zcGFuPjxiciBzdHls
ZT0iY2FyZXQtY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgZm9u
dC1zaXplOiAxMnB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBub3Jt
YWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IHRleHQtYWxp
Z246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUt
c3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lk
dGg6IDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyIgY2xhc3M9IiI+DQo8c3BhbiBzdHlsZT0i
Y2FyZXQtY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgZm9udC1z
aXplOiAxMnB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7
IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IHRleHQtYWxpZ246
IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3Bh
Y2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6
IDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5l
ICFpbXBvcnRhbnQ7IiBjbGFzcz0iIj53aGF0DQogaXMgZ29pbmcgdG8gZ2V0IGJ1aWx0LiBCdXQg
ZmFpbHVyZSBmcm9tIGVudmlyb25tZW50YWw8L3NwYW4+PGJyIHN0eWxlPSJjYXJldC1jb2xvcjog
cmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZv
bnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6
IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQt
aW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3
b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7IiBjbGFzcz0iIj4NCjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdi
KDAsIDAsIDApOyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQt
c3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5v
cm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5k
ZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3Jk
LXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29y
YXRpb246IG5vbmU7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNs
YXNzPSIiPmNvbnN0cmFpbnRzDQogc2hvdWxkbid0IGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgZmFp
bHVyZSBmcm9tIGJhZDwvc3Bhbj48YnIgc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7
IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9y
bWFsOyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0
ZXItc3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsg
dGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzog
MHB4OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9u
ZTsiIGNsYXNzPSIiPg0KPHNwYW4gc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZv
bnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFs
OyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXIt
c3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4
dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4
OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsg
ZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyIgY2xhc3M9IiI+aW50ZXJh
Y3Rpb24NCiBvZiBvcHRpb25zOyBpdCdzIChhaXVpKSB0aGUgbGF0dGVyIHdoaWNoIHJhbmRjb25m
aWcgaXM8L3NwYW4+PGJyIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZh
bWlseTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9u
dC12YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNp
bmc6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJh
bnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdl
YmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IiBjbGFz
cz0iIj4NCjxzcGFuIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWls
eTogSGVsdmV0aWNhOyBmb250LXNpemU6IDEycHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12
YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6
IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNm
b3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtp
dC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZsb2F0OiBu
b25lOyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsiIGNsYXNzPSIiPnN1cHBvc2VkDQogdG8g
cG9pbnQgb3V0Ljwvc3Bhbj48YnIgc3R5bGU9ImNhcmV0LWNvbG9yOiByZ2IoMCwgMCwgMCk7IGZv
bnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1zdHlsZTogbm9ybWFs
OyBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXIt
c3BhY2luZzogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4
dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4
OyAtd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsi
IGNsYXNzPSIiPg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2PjxiciBjbGFzcz0iIj4NCjwv
ZGl2Pg0KPC9kaXY+DQpSaWdodDsgc28gYW5vdGhlciBzb2x1dGlvbiB0byB0aGUg4oCYcmFuZGNv
bmZpZyBDSSBsb29w4oCZIGlzc3VlIHdvdWxkIGJlIHRvIGhhdmUgdGhlIHBpcGVsaW5lIHBhc3Mg
KG9yIHNvbWUgbm9uLXBhc3Mgbm9uLWZhaWwgc3RhdGUgaWYgcG9zc2libGUpIHdoZW4gdGhlbiBi
dWlsZCBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3ZXJlIG1pc3NpbmcgZGVwZW5kZW5jaWVzLiAmbmJz
cDtNYXliZSBvbmUgd2F5IG9mIGRvaW5nIHRoYXQgd291bGQgYmUgdG8gaGF2ZSBhIOKAnG1ha2UN
CiBjaGVjay1kZXBlbmRlbmNpZXPigJ0gdGFyZ2V0IHRoYXQgd291bGQgcnVuIGZpcnN0Lg0KPGRp
diBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+VGhhdCBzYWlk
LCBzaW5jZSBpdOKAmXMgYmFzaWNhbGx5IGtub3duIHRoYXQg4oCcc2lsZW50bHkgZGlzYWJsaW5n
IHRoaW5ncyBpdCBjYW7igJl0IGJ1aWxkJnF1b3Q7IGlzIGEgcXVpcmsgb2YgS2NvbmZpZywgSeKA
mW0gbGVzcyBpbmNsaW5lZCB0byBvYmplY3QgdG8gdjEgb2YgdGhlIHBhdGNoLjwvZGl2Pg0KPGRp
diBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7LUdl
b3JnZTwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K

--_000_BD4133B72979403BB33A8E7D6D4B6148citrixcom_--


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 15:05:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 15:05:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158471.291718 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Upc-0008A6-AG; Mon, 19 Jul 2021 15:05:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158471.291718; Mon, 19 Jul 2021 15:05:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Upc-00089z-7O; Mon, 19 Jul 2021 15:05:20 +0000
Received: by outflank-mailman (input) for mailman id 158471;
 Mon, 19 Jul 2021 15:05:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Upa-00089p-Kz; Mon, 19 Jul 2021 15:05:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Upa-0004PI-FG; Mon, 19 Jul 2021 15:05:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Upa-00078V-5n; Mon, 19 Jul 2021 15:05:18 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5Upa-0004hJ-5M; Mon, 19 Jul 2021 15:05:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rLCAr7Ml64J3svUeAoeVbNqpDHVvbAyLszApms1K4HU=; b=52VDheu5P+0qLng9kP2eeA/8uG
	/AC/Y04IPyGL+KatEFFnkESpPXH5ALIriKXOUL5P6lmePouIjuO0YzimuwAIxUVoxL3BxV9A78XOO
	HpCDoPj8HQUNq8XrUxuexRCt2DK6jnDebG4e1HDzDNiJ4Yq1VptQpjmwAPVYIuTCwwHU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163803-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163803: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=471383ddd1843700fdd7d74242ba0e5f314dc678
X-Osstest-Versions-That:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 15:05:18 +0000

flight 163803 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163803/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  471383ddd1843700fdd7d74242ba0e5f314dc678
baseline version:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87

Last test of basis   163656  2021-07-13 19:03:02 Z    5 days
Testing same since   163803  2021-07-19 11:01:35 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Jan Beulich <jbeulich@suse.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   3a98c1a4ce..471383ddd1  471383ddd1843700fdd7d74242ba0e5f314dc678 -> smoke


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 15:35:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 15:35:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158480.291739 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5VID-0003G2-RX; Mon, 19 Jul 2021 15:34:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158480.291739; Mon, 19 Jul 2021 15:34:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5VID-0003Fv-OM; Mon, 19 Jul 2021 15:34:53 +0000
Received: by outflank-mailman (input) for mailman id 158480;
 Mon, 19 Jul 2021 15:34:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5VID-0003Fl-00; Mon, 19 Jul 2021 15:34:53 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5VIC-0004so-OD; Mon, 19 Jul 2021 15:34:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5VIC-0000E3-Dy; Mon, 19 Jul 2021 15:34:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5VIC-0003I1-DS; Mon, 19 Jul 2021 15:34:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Ep1tufEKiPz4qDpFs0we2CSY2TAt0vB2Zx4BIFR09Uo=; b=CzIbIHocC6Z+8u2ym6Fck+Ym/m
	yXA2B05RsJd4mNPlxkZPFpklPI/+6wm0MLmjCLFtbGRvKXSgV6ZCKtdbYEwk2AcA9dNjPp/Wwq7TQ
	KOSDMsg682ZCft9GssBV8uYjXsC3UZzvJDsrzqfh+V/kDZnafB6AySsTrddfIOeuD8Vs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163798-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163798: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 15:34:52 +0000

flight 163798 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163798/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   13 days
Failing since        163327  2021-07-06 12:39:04 Z   13 days   22 attempts
Testing same since   163784  2021-07-18 16:50:39 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 10578 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 20:22:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 20:22:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158541.291782 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Zmh-0007pA-5s; Mon, 19 Jul 2021 20:22:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158541.291782; Mon, 19 Jul 2021 20:22:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5Zmh-0007p3-2e; Mon, 19 Jul 2021 20:22:39 +0000
Received: by outflank-mailman (input) for mailman id 158541;
 Mon, 19 Jul 2021 20:22:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=K3vX=ML=oracle.com=boris.ostrovsky@srs-us1.protection.inumbo.net>)
 id 1m5Zmf-0007ox-5r
 for xen-devel@lists.xenproject.org; Mon, 19 Jul 2021 20:22:37 +0000
Received: from mx0b-00069f02.pphosted.com (unknown [205.220.177.32])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6c82a3d6-2c3b-4703-8d15-6a4ad358961e;
 Mon, 19 Jul 2021 20:22:36 +0000 (UTC)
Received: from pps.filterd (m0246631.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16JKBCDb013444; Mon, 19 Jul 2021 20:22:15 GMT
Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70])
 by mx0b-00069f02.pphosted.com with ESMTP id 39w83cs5eu-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Mon, 19 Jul 2021 20:22:15 +0000
Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1])
 by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16JKF3i7160410;
 Mon, 19 Jul 2021 20:22:14 GMT
Received: from nam02-dm3-obe.outbound.protection.outlook.com
 (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40])
 by aserp3020.oracle.com with ESMTP id 39uq15cccq-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Mon, 19 Jul 2021 20:22:14 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com (2603:10b6:208:321::10)
 by BLAPR10MB5329.namprd10.prod.outlook.com (2603:10b6:208:307::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22; Mon, 19 Jul
 2021 20:22:11 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0]) by BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0%8]) with mapi id 15.20.4331.033; Mon, 19 Jul 2021
 20:22:11 +0000
Received: from [10.74.102.166] (160.34.88.166) by
 SA9PR13CA0017.namprd13.prod.outlook.com (2603:10b6:806:21::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.9 via Frontend Transport; Mon, 19 Jul 2021 20:22:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6c82a3d6-2c3b-4703-8d15-6a4ad358961e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2021-07-09;
 bh=BNsCGg2QiqJt2o1wi4MUZO169T4Ki1eHlXiKgwijNKc=;
 b=J9p544sL474mofe+xTQoq8YsvbFrw64oRD5IzTopdPOc91RntHYiswdp+l0iBRxeKsc+
 LcbktqEYtgbIj618AUH+mwgxSMvNsZNUfmN5q0R4CqG4hanO3nDhSowI1eoszHWzWRwR
 4CTXr5nPlUhfI3A53N/MhA8T1pcmM9h5IOwEtui66Ny8pqW9rOmitzNSRdTLMNLrjSCF
 b7BTflkgSt4xkLqJiSaD1JsInPlQnXw4sEV8jRW5VOcm2mhDN6hHGvGb3cFLOD4JnBRJ
 ZbtIt8y0gtUaXpe/YLXPcV3r2J1dr2XHNnTNty3cujYk7RporaQh8GCy1b0AKWgPm6j4 lQ== 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2020-01-29;
 bh=BNsCGg2QiqJt2o1wi4MUZO169T4Ki1eHlXiKgwijNKc=;
 b=vAfFDN0FVWtFDBxChUpMGJe1jHbRAEf/DAYpK7h724vkUPKNPOp2KtwljQa40crfQb1D
 SP/dBs0HPDzbDyts5CUSy/0ajs62rF2NwRnogKxFF36HN5se6O1/GIF4bqM2QYFOpmyH
 5p/EBPKSLDR5LUgwkXwM9NGmmpPHxhkbJQ3fTQL0AMbQ9tLNcLmI5CrZZDC80iypBKQ/
 zNLH1fM+VmcD0+S8i21ETVE/gQW76CFIj7IoywDqJWGxxIUlA9HdwxMLF5lM7AgAK1uZ
 Rn9HkvFK5T+Wvcpz8lUQvGMOLR2g3UoQSNwsLLHTMeQgrVXMAMLLLlIBUfd1ZbH9s5fz Fg== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=i3fmxg4rVjpzHE5ssuXZZ0AIWBw6zeVhp3RyGArLeO579plKxIvOwEJlZP4MamhGsmXTyqIu/sPLgUnt8QxSqnNapwF4qB266MqchoU1M35EWTh/FyEw4g0AJFp87X7iE2z63sEmCEy3Boe61XDwufM8HiFhXw5czYFOiF0Ygp4ZH7P+7wjymMq8UCm8yMNRVHJpEXsmvKu85OXpVux/PZFz6n1UCWRTd3RaT0fxPQSI8fJ7CJxvMq2OhcF0Rga4ZsHMNDTeeO3MkNPP2x8fns56fsVS0JXDQeqGe/YVSfQ3Dhu/lP916Qr3QIiPwy6cDtkyDWSjAb02aKdEalcSTg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=BNsCGg2QiqJt2o1wi4MUZO169T4Ki1eHlXiKgwijNKc=;
 b=gNIVZDyCz2CmtpUJOew51Q8jOtkNPWNqUcy+Fg+BZjIaYd3TyenpHF22dnFbN8f+cHTttks2SHYvuMoGD1bPsVsuMBSqZAh4l+qabFuMFD591ka9UwVgCYAB/v5XQRTJhTY65gKqH1XsbV0MrCnKsCEaqz3hN68Abr+92LfCvi8KbQoqzsc6Aj8a5DNSmhgsPtU4xCYxI79YEPqsFlO6yW/OGBGWz1vUKljPBKcpgVC1fT6HI9U61CSBpCV2YHq6LJvyXJU6HTAwM8AE36VJdO5qB8mXEZhQ9sHItms8+48DEpRjYqPY+err1zXarcYowtIpifucQG5V8jw2l+z88A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=BNsCGg2QiqJt2o1wi4MUZO169T4Ki1eHlXiKgwijNKc=;
 b=Z0bNny2Hn8+wx5EDqRhz5h639ftRumqbgaiVVQ4vUM2dMQ5J1J+75SbZT8ZCLv/vFqMEoFpgbe/5F/Rglo8hGwHz0n+L2lYm//xvCOn+IuFRlm6MuvY+Tib/9SWiWCVEd5BYNtXKHsCQ0GahVlCLStRq0vGBG6VgpsDsIlgyeBM=
Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=oracle.com;
Subject: Re: [PATCH v1 13/16] xen: swiotlb: return error code from
 xen_swiotlb_map_sg()
To: Logan Gunthorpe <logang@deltatee.com>, linux-kernel@vger.kernel.org,
        linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
        linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org,
        linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org,
        sparclinux@vger.kernel.org, iommu@lists.linux-foundation.org,
        linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
        Marek Szyprowski <m.szyprowski@samsung.com>,
        Robin Murphy <robin.murphy@arm.com>,
        Stephen Bates <sbates@raithlin.com>,
        Martin Oliveira <martin.oliveira@eideticom.com>,
        Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
        Juergen Gross <jgross@suse.com>,
        Stefano Stabellini <sstabellini@kernel.org>
References: <20210715164544.6827-1-logang@deltatee.com>
 <20210715164544.6827-14-logang@deltatee.com>
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Message-ID: <8cccf120-0b4b-4d66-0b96-4114af27a3d1@oracle.com>
Date: Mon, 19 Jul 2021 16:22:04 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.11.0
In-Reply-To: <20210715164544.6827-14-logang@deltatee.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-US
X-ClientProxiedBy: SA9PR13CA0017.namprd13.prod.outlook.com
 (2603:10b6:806:21::22) To BLAPR10MB5009.namprd10.prod.outlook.com
 (2603:10b6:208:321::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a216d6ca-9dee-431e-753d-08d94af2e391
X-MS-TrafficTypeDiagnostic: BLAPR10MB5329:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<BLAPR10MB53295EB44276FE6AEA15CAD38AE19@BLAPR10MB5329.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	AiyY7elKT7NtOhGt2GzFvXpn9LtSNnhX9ehTyI8sETfsQV+K4tgFyeXf5D2NpKP+r1F56ND/56FfKOLi/Ad5IPWKQsc0rbn1QslGBFT3wa/lRS+5jz6C91ofQdVVAfwC+1CbW0HmfP9qy8mpnlYbmhuBwgdDJMtXfPLxUBBFw4TQN0InvGLT0mRLCxCWeaDJVVv/wcVjG0m2r5ndwoIyvfMUkOGSXsSn0ZCiARkK5J2XSA/h2bu4sMIcdFYJGpKcIwQOCrORrARr8h7xXgkJ6Oa3tHLTHXSOKDSSsIgnc7kjRjemqx8+S95PW6X/IGH9gI8F1WreDtlIwFEy5TZdtkpzj9v5MHuZT2uFfzdmpp38RTruOgxK8ZRTs8HLyrNsCnx02eKywjm+qDps2t+hHn0FuDDP3I/9JdpCme5w5qtCu5reQeb6c7wMEQz519mTSlnhprMYpj/POulMN+9hJc3tVNaz4rKlFrdPiqMrZI9cy6lbRyI69O9WBPutx2dCP+fG+1T2ke2rWoK3PDIuT4XQpAWbXgZrp7N9Ee2XkQ7PQKJFjDsuCGFO+R7r6HqpXbwQx0pEVuCR0DIIsNwYHJilc4lDrBlgGsG3/zfKTyoyv1C2f7MdDnGaDLsqj0pkm4gcWHrJ0BoY6R5dSzc5mWqawOOk7z0EOELuN+//Q+a9NYDxn3wazpPjCmriKcLBt2ZDBcYAWno+UgeetbJ6CoTmHS1kfZl3T8gE8s8/fgJ/L+AMlja7YDDdlVUL9GZW
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5009.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(396003)(366004)(346002)(376002)(136003)(6666004)(31696002)(31686004)(66476007)(66946007)(83380400001)(921005)(8676002)(86362001)(4744005)(5660300002)(38100700002)(6486002)(186003)(478600001)(53546011)(2906002)(54906003)(16576012)(36756003)(44832011)(316002)(8936002)(26005)(7416002)(956004)(4326008)(66556008)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	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
 =?utf-8?Q?DBIJwv/jd/HznDJYxfZnFinYCAnKo9LlcvWSUWl?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a216d6ca-9dee-431e-753d-08d94af2e391
X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5009.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 20:22:11.2965
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: K97vCe0npmkTp49QrAX4OWSxMu8DMopmlOiZzs9AQfGU1HVg1GS2LPNO7DOigqdxTluTquQ3cHxA7t8V0LFM5v3x2McQALVFOkBMOo5GQpA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5329
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10050 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0
 mlxlogscore=999 suspectscore=0 bulkscore=0 spamscore=0 phishscore=0
 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2104190000 definitions=main-2107190115
X-Proofpoint-GUID: PucKbcTaJehG5tuAIXx5icmYiBHWHK4A
X-Proofpoint-ORIG-GUID: PucKbcTaJehG5tuAIXx5icmYiBHWHK4A


On 7/15/21 12:45 PM, Logan Gunthorpe wrote:
> From: Martin Oliveira <martin.oliveira@eideticom.com>
>
> The .map_sg() op now expects an error code instead of zero on failure.
>
> xen_swiotlb_map_sg() may only fail if xen_swiotlb_map_page() fails, but
> xen_swiotlb_map_page() only supports returning errors as
> DMA_MAPPING_ERROR. So coalesce all errors into EINVAL.


Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>





From xen-devel-bounces@lists.xenproject.org Mon Jul 19 21:50:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 21:50:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158562.291800 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5b9Y-0000NS-CG; Mon, 19 Jul 2021 21:50:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158562.291800; Mon, 19 Jul 2021 21:50:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5b9Y-0000NL-8k; Mon, 19 Jul 2021 21:50:20 +0000
Received: by outflank-mailman (input) for mailman id 158562;
 Mon, 19 Jul 2021 21:50:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5b9W-0000NB-VN; Mon, 19 Jul 2021 21:50:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5b9W-0003E1-BH; Mon, 19 Jul 2021 21:50:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5b9W-0000hu-0W; Mon, 19 Jul 2021 21:50:18 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5b9W-0007kh-03; Mon, 19 Jul 2021 21:50:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=y4umldk5NthfnobE7YDM3uVGNGOw/BEHMRjjhKpTaT0=; b=wopupfsc4/o44Fp8dm7GULBn5z
	iJ671vhq6GF/AWDWGGn5Wh1K9eGAUy2aRkyEi6Mr+R2DxHHtHrOUlYdhGq//dX5RU/FyyjFpiAtZ/
	Zno3ED50tI2M34yxP/ApT/jr7zptzwZGz7IzNFAq979XjdGDSuZAYxxlqrqzNp4zW07M=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163813-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163813: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=96e5ad4c476e70688295b3cfb537847a3351d6fd
X-Osstest-Versions-That:
    xen=471383ddd1843700fdd7d74242ba0e5f314dc678
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 21:50:18 +0000

flight 163813 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163813/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  96e5ad4c476e70688295b3cfb537847a3351d6fd
baseline version:
 xen                  471383ddd1843700fdd7d74242ba0e5f314dc678

Last test of basis   163803  2021-07-19 11:01:35 Z    0 days
Testing same since   163813  2021-07-19 16:05:16 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   471383ddd1..96e5ad4c47  96e5ad4c476e70688295b3cfb537847a3351d6fd -> smoke


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 22:05:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 22:05:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158569.291815 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5bOO-00022w-Nr; Mon, 19 Jul 2021 22:05:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158569.291815; Mon, 19 Jul 2021 22:05:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5bOO-00022p-Km; Mon, 19 Jul 2021 22:05:40 +0000
Received: by outflank-mailman (input) for mailman id 158569;
 Mon, 19 Jul 2021 22:05:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5bON-00022f-Ew; Mon, 19 Jul 2021 22:05:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5bON-0003UN-2V; Mon, 19 Jul 2021 22:05:39 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5bOM-0001i4-QI; Mon, 19 Jul 2021 22:05:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5bOM-0001gS-Pn; Mon, 19 Jul 2021 22:05:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+1hQ5nLL//8bhSWgy+ZuFNcxJJXZfxkXMi4oztO5WG0=; b=PoxGf4FPYx6PC5hXBd4r9nQhrc
	Kfd6DqhpPRqr4n9Bow2NIzPkqS2ORGX93TTpGEInTTdFqbQySEdI5z9L+gSZinCiss/A6RzzQ5f+M
	3BipO3aHdvtYx0oSuAzzZvWT4htKhAgw1mgZnQ8yBhW+rAPzlLeKquAp4v8ATPsu5FU4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163806-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163806: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fddb8d24eccdcf467a8c777a9a22f4a1e54bf7dd
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 22:05:38 +0000

flight 163806 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163806/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fddb8d24eccdcf467a8c777a9a22f4a1e54bf7dd
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   45 days
Failing since        162368  2021-06-04 15:42:59 Z   45 days  122 attempts
Testing same since   163806  2021-07-19 12:41:16 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3880 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 19 22:52:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 19 Jul 2021 22:52:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158579.291835 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5c7e-0007d2-Di; Mon, 19 Jul 2021 22:52:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158579.291835; Mon, 19 Jul 2021 22:52:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5c7e-0007cv-Ai; Mon, 19 Jul 2021 22:52:26 +0000
Received: by outflank-mailman (input) for mailman id 158579;
 Mon, 19 Jul 2021 22:52:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5c7d-0007cl-Am; Mon, 19 Jul 2021 22:52:25 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5c7d-0004FR-4S; Mon, 19 Jul 2021 22:52:25 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5c7c-0003sd-Pk; Mon, 19 Jul 2021 22:52:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5c7c-000666-PD; Mon, 19 Jul 2021 22:52:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LH0j57vCnnYCTOmfmSpYFG6VN8tH3iRb5OkH3E+WeMU=; b=H0TeWHmmj4FuBCwAp5joIqruKi
	d83ORlmeFUieHlNJ+a925skT9/GICNPASQUqsv4BaiaffnlJynV9RpD+KpokLMTcFx29L6z62728Q
	Qx2oZqSP0icEF9nhgu2/NG841sSBJTYIclPR5iMi6OTZXK+Nj9dLInjaCdrqopzKn7IQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163800-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163800: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=795e84798fa7f6c753ded1a95037b4cf08db85d4
X-Osstest-Versions-That:
    linux=7c76bd6c36ed84c0e613ba0f3a1408a515b9f12d
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 22:52:24 +0000

flight 163800 linux-5.4 real [real]
flight 163818 linux-5.4 real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/163800/
http://logs.test-lab.xenproject.org/osstest/logs/163818/

Failures :-/ but no regressions.

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

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163684
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163684
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163684
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163684
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163684
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163684
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163684
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163684
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163684
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163684
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163684
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   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-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                795e84798fa7f6c753ded1a95037b4cf08db85d4
baseline version:
 linux                7c76bd6c36ed84c0e613ba0f3a1408a515b9f12d

Last test of basis   163684  2021-07-14 15:10:27 Z    5 days
Testing same since   163800  2021-07-19 07:11:17 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Adrian Hunter <adrian.hunter@intel.com>
  Al Cooper <alcooperx@gmail.com>
  Alex Deucher <alexander.deucher@amd.com>
  Alexei Starovoitov <ast@kernel.org>
  Alexey Klimov <aklimov@redhat.com>
  Andrey Grodzovsky <andrey.grodzovsky@amd.com>
  Andrii Nakryiko <andrii@kernel.org>
  Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  Arnaldo Carvalho de Melo <acme@redhat.com>
  Arnd Bergmann <arnd@arndb.de>
  Arturo Giusti <koredump@protonmail.com>
  Benjamin Drung <bdrung@posteo.de>
  Bibo Mao <maobibo@loongson.cn>
  Bjorn Helgaas <bhelgaas@google.com>
  Casey Schaufler <casey@schaufler-ca.com>
  Chanwoo Choi <cw00.choi@samsung.com>
  Christian König <christian.koenig@amd.com>
  Christian Loehle <cloehle@hyperstone.com>
  Christian Löhle <CLoehle@hyperstone.com>
  Christophe JAILLET <christophe.jaillet@wanadoo.fr>
  Christophe Leroy <christophe.leroy@csgroup.eu>
  Chun-Kuang Hu <chunkuang.hu@kernel.org>
  Corey Minyard <cminyard@mvista.com>
  Dan Carpenter <dan.carpenter@oracle.com>
  Daniel Borkmann <daniel@iogearbox.net>
  Daniel Lezcano <daniel.lezcano@linaro.org>
  Daniel Vetter <daniel.vetter@ffwll.ch>
  Daniel Vetter <daniel.vetter@intel.com>
  Daniel Wheeler <daniel.wheeler@amd.com>
  Dave Kleikamp <dave.kleikamp@oracle.com>
  Dave Switzer <david.switzer@intel.com>
  David S. Miller <davem@davemloft.net>
  Dmitry Osipenko <digetx@gmail.com>
  Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
  Eric Biggers <ebiggers@google.com>
  Eric Biggers <ebiggers@kernel.org>
  Felix Fietkau <nbd@nbd.name>
  Ferry Toth <ftoth@exalondelft.nl>
  Flavio Suligoi <f.suligoi@asem.it>
  Florian Fainelli <f.fainelli@gmail.com>
  Gao Xiang <hsiangkao@linux.alibaba.com>
  Geert Uytterhoeven <geert+renesas@glider.be>
  Gerd Hoffmann <kraxel@redhat.com>
  Gerd Rausch <gerd.rausch@oracle.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guchun Chen <guchun.chen@amd.com>
  Guenter Roeck <linux@roeck-us.net>
  Gustavo A. R. Silva <gustavoars@kernel.org>
  Hans Verkuil <hverkuil-cisco@xs4all.nl>
  Harry Wentland <harry.wentland@amd.com>
  Heiko Stuebner <heiko@sntech.de>
  Heiner Kallweit <hkallweit1@gmail.com>
  Herbert Xu <herbert@gondor.apana.org.au>
  Hou Tao <houtao1@huawei.com>
  Huang Pei <huangpei@loongson.cn>
  Hulk Robot <hulkrobot@huawei.com>
  Ian Rogers <irogers@google.com>
  Jack Zhang <Jack.Zhang1@amd.com>
  Jakub Kicinski <kuba@kernel.org>
  Jan Kara <jack@suse.cz>
  Jason Gunthorpe <jgg@nvidia.com>
  Jens Axboe <axboe@kernel.dk>
  Jesse Brandeburg <jesse.brandeburg@intel.com>
  Jian Shen <shenjian15@huawei.com>
  Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
  Jing Xiangfeng <jingxiangfeng@huawei.com>
  Jiri Olsa <jolsa@redhat.com>
  Joe Thornber <ejt@redhat.com>
  Joerg Roedel <jroedel@suse.de>
  Johan Hovold <johan@kernel.org>
  Johannes Berg <johannes.berg@intel.com>
  Jon Hunter <jonathanh@nvidia.com>
  Joseph Greathouse <Joseph.Greathouse@amd.com>
  Kai-Heng Feng <kai.heng.feng@canonical.com>
  Kalle Valo <kvalo@codeaurora.org>
  Kees Cook <keescook@chromium.org>
  Koba Ko <koba.ko@canonical.com>
  Konstantin Kharlamov <Hi-Angel@yandex.ru>
  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
  Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  Lee Gibson <leegib@gmail.com>
  Linus Walleij <linus.walleij@linaro.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Liviu Dudau <liviu.dudau@arm.com>
  Liwei Song <liwei.song@windriver.com>
  lixianming <lixianming5@huawei.com>
  Longpeng(Mike) <longpeng2@huawei.com>
  Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
  Luca Coelho <luciano.coelho@intel.com>
  Lv Yunlong <lyl2019@mail.ustc.edu.cn>
  Marcel Holtmann <marcel@holtmann.org>
  Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
  Mark Brown <broonie@kernel.org>
  Mark Yacoub <markyacoub@chromium.org>
  mark-yw.chen <mark-yw.chen@mediatek.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  Maxime Ripard <maxime@cerno.tech>
  Maximilian Luz <luzmaximilian@gmail.com>
  Michael Ellerman <mpe@ellerman.id.au>
  Mike Snitzer <snitzer@redhat.com>
  Minchan Kim <minchan@kernel.org>
  Moritz Fischer <mdf@kernel.org>
  Nathan Chancellor <nathan@kernel.org>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Desaulniers <ndesaulniers@google.com>
  Nirmoy Das <nirmoy.das@amd.com>
  Pali Rohár <pali@kernel.org>
  Pascal Terjan <pterjan@google.com>
  Paul Burton <paulburton@google.com>
  Paul Moore <paul@paul-moore.com>
  Pavel Skripkin <paskripkin@gmail.com>
  Pekka Paalanen <pekka.paalanen@collabora.com>
  Petr Pavlu <petr.pavlu@suse.com>
  Radim Pavlik <radim.pavlik@tbs-biometrics.com>
  Richard Weinberger <richard@nod.at>
  Robert Foss <robert.foss@linaro.org>
  Roman Li <roman.li@amd.com>
  Russ Weight <russell.h.weight@intel.com>
  Sachi King <nakato@nakato.io>
  Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
  Samuel Holland <samuel@sholland.org>
  Samuel Iglesias Gonsalvez <siglesias@igalia.com>
  Sasha Levin <sashal@kernel.org>
  Sean Young <sean@mess.org>
  Sebastian Andrzej Siewior <bigeasy@linutronix.de>
  Sebastian Reichel <sebastian.reichel@collabora.com>
  Sedat Dilek <sedat.dilek@gmail.com>
  Shuah Khan <skhan@linuxfoundation.org>
  Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
  Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
  Stefan Agner <stefan@agner.ch>
  Steffen Klassert <steffen.klassert@secunet.com>
  Steven Rostedt (VMware) <rostedt@goodmis.org>
  Stylon Wang <stylon.wang@amd.com>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Suzuki K Poulose <suzuki.poulose@arm.com>
  syzbot+bed360704c521841c85d@syzkaller.appspotmail.com
  Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
  Thierry Reding <treding@nvidia.com>
  Thomas Bogendoerfer <tsbogend@alpha.franken.de>
  Thomas Gleixner <tglx@linutronix.de>
  Thomas Hebb <tommyhebb@gmail.com>
  Thomas Zimmermann <tzimmermann@suse.de>
  Tim Jiang <tjiang@codeaurora.org>
  Timo Sigurdsson <public_timo.s@silentcreek.de>
  Tom Lendacky <thomas.lendacky@amd.com>
  Tony Brelinski <tonyx.brelinski@intel.com>
  Tony Lindgren <tony@atomide.com>
  Tony Nguyen <anthony.l.nguyen@intel.com>
  Ulf Hansson <ulf.hansson@linaro.org>
  Vladimir Stempen <vladimir.stempen@amd.com>
  Wang Li <wangli74@huawei.com>
  Wesley Chalmers <Wesley.Chalmers@amd.com>
  Willy Tarreau <w@1wt.eu>
  Wolfram Sang <wsa+renesas@sang-engineering.com>
  Xianting Tian <xianting.tian@linux.alibaba.com>
  Xiao Yang <yangx.jy@fujitsu.com>
  Xie Yongji <xieyongji@bytedance.com>
  xinhui pan <xinhui.pan@amd.com>
  Yang Yingliang <yangyingliang@huawei.com>
  Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
  Yu Liu <yudiliu@google.com>
  Yun Zhou <yun.zhou@windriver.com>
  Zhang Rui <rui.zhang@intel.com>
  zhanglianjie <zhanglianjie@uniontech.com>
  Zheyu Ma <zheyuma97@gmail.com>
  Zhihao Cheng <chengzhihao1@huawei.com>
  Zou Wei <zou_wei@huawei.com>
  Íñigo Huguet <ihuguet@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   7c76bd6c36ed..795e84798fa7  795e84798fa7f6c753ded1a95037b4cf08db85d4 -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 00:00:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 00:00:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158593.291869 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5dAp-00066A-VO; Mon, 19 Jul 2021 23:59:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158593.291869; Mon, 19 Jul 2021 23:59:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5dAp-000663-SQ; Mon, 19 Jul 2021 23:59:47 +0000
Received: by outflank-mailman (input) for mailman id 158593;
 Mon, 19 Jul 2021 23:59:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5dAp-00065t-FE; Mon, 19 Jul 2021 23:59:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5dAp-0005L5-6P; Mon, 19 Jul 2021 23:59:47 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5dAo-0007T6-Ux; Mon, 19 Jul 2021 23:59:47 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5dAo-0000uU-UT; Mon, 19 Jul 2021 23:59:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=56ul/xvvPSEA9uqfhqG7yxdMbSTsvHn4Y59IS6htUbk=; b=hdiHWo97/8DaJm4fSC+Ci9x7oY
	G9v8ZnTAUF7BaIxaC0bPTaap/rBbQjnrihes27Hs4Jak0odD5LoMQA5K2Fj4tLwmYrdFtSAU2rpxs
	uqLi4jFwuOU01rlGhrgtkYoq9JgiDiF6tI070l0y/ZIUUEG6kPCR5BUaCycv3AZcrtRw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163801-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163801: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start/debian.repeat:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=2734d6c1b1a089fb593ef6a23d4b70903526fe0c
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 19 Jul 2021 23:59:46 +0000

flight 163801 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163801/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-amd64-amd64-xl-qcow2   21 guest-start/debian.repeat fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                2734d6c1b1a089fb593ef6a23d4b70903526fe0c
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  353 days
Failing since        152366  2020-08-01 20:49:34 Z  352 days  600 attempts
Testing same since   163801  2021-07-19 08:10:02 Z    0 days    1 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978200 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 05:28:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 05:28:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158635.291924 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5iIU-0005A0-Ty; Tue, 20 Jul 2021 05:28:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158635.291924; Tue, 20 Jul 2021 05:28:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5iIU-00059s-PA; Tue, 20 Jul 2021 05:28:02 +0000
Received: by outflank-mailman (input) for mailman id 158635;
 Tue, 20 Jul 2021 05:28:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5iIT-00059i-Qr; Tue, 20 Jul 2021 05:28:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5iIT-0001bo-IZ; Tue, 20 Jul 2021 05:28:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5iIT-0003r3-A8; Tue, 20 Jul 2021 05:28:01 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5iIT-0002Ms-9Z; Tue, 20 Jul 2021 05:28:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=iqasjiMCuOncgEG2RiJxBPSuMq20KnZjMYnhteJT34g=; b=ifKgJ5gEWonG61FQTr8tK/vAia
	XaWHMypAQKRAtMxRjIX+TnjUtw2/92FLOjMocONUprmp6irugMSGrFsmU9gK2VZBmyLQwbBxr1GW3
	8wYMVkKyDw/fBw1DtWi50EYKpjBp4ONP88/vsQkao2Bfz/D5Xm/M6nXiknMGvBto5EXU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163809-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163809: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:xen-boot/l1:fail:regression
    xen-unstable:test-armhf-armhf-xl-rtds:guest-stop:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 05:28:01 +0000

flight 163809 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163809/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-qemuu-nested-amd 16 xen-boot/l1         fail REGR. vs. 163458

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds     17 guest-stop                 fail pass in 163793

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163458
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163458
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163458
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163458
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163458
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163458
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163458
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163458
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z   11 days
Failing since        163478  2021-07-09 15:23:45 Z   10 days   17 attempts
Testing same since   163671  2021-07-14 05:26:47 Z    5 days    8 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 442 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 06:16:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 06:16:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158645.291945 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5j3i-0002Xp-PY; Tue, 20 Jul 2021 06:16:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158645.291945; Tue, 20 Jul 2021 06:16:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5j3i-0002Xh-MI; Tue, 20 Jul 2021 06:16:50 +0000
Received: by outflank-mailman (input) for mailman id 158645;
 Tue, 20 Jul 2021 06:16:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5j3i-0002XY-B1; Tue, 20 Jul 2021 06:16:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5j3i-0002VA-1g; Tue, 20 Jul 2021 06:16:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5j3h-0005bq-NU; Tue, 20 Jul 2021 06:16:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5j3h-0007tn-N2; Tue, 20 Jul 2021 06:16:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=zwDO7ft0tdyDJGT298HOEmVHhwTWsPYwGMmO063whNo=; b=sIvPvbT70LcJmE+gdK3sEY9Kev
	5EmkjuHBcbH9fUTwJUQwnjp5mRyagyhqE0UKfDpVXNBeBLhO1b12jDLS5pXBc/Hqh2qhQeRkxgSq6
	IbnH9t/Phkom8ibpUl5q7HmLw0IaHuyV/EScsuuBhpBbncdKQ2ClWodlKR67TOf5I0AA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163811-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163811: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-multivcpu:xen-boot:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=7457b407edd6e8555e4b46488aab2f13959fccf8
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 06:16:49 +0000

flight 163811 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163811/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-multivcpu  8 xen-boot                fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                7457b407edd6e8555e4b46488aab2f13959fccf8
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   14 days
Failing since        163327  2021-07-06 12:39:04 Z   13 days   23 attempts
Testing same since   163811  2021-07-19 15:38:23 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 10730 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 06:55:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 06:55:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158666.291960 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5jeo-00073A-SU; Tue, 20 Jul 2021 06:55:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158666.291960; Tue, 20 Jul 2021 06:55:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5jeo-000733-Od; Tue, 20 Jul 2021 06:55:10 +0000
Received: by outflank-mailman (input) for mailman id 158666;
 Tue, 20 Jul 2021 06:55:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5jen-00072t-RL; Tue, 20 Jul 2021 06:55:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5jen-0003A5-F3; Tue, 20 Jul 2021 06:55:09 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5jen-0006zE-6T; Tue, 20 Jul 2021 06:55:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5jen-0002oO-5y; Tue, 20 Jul 2021 06:55:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=yS9r/GPwCLZN17vL8f58QyqU361ITq2CFqXOk6ADdqM=; b=03pF4TLckw2ayG3qsw2mLGFZ3l
	OJJ2pGEFvXE7VlJi+HSRdmPYOSW9cSIdw94nXl/C5GpNlcZwk+y/EfwfHAaACzFmAJJIPnArZlev6
	evTNrnrl79nhv3xaHmeB9Kte/iWqi5oVW1AJ1VsV7qs8IrxAqg8WmDZ2x4TeNF6oHPEM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163819-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163819: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=fddb8d24eccdcf467a8c777a9a22f4a1e54bf7dd
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 06:55:09 +0000

flight 163819 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163819/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 fddb8d24eccdcf467a8c777a9a22f4a1e54bf7dd
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   46 days
Failing since        162368  2021-06-04 15:42:59 Z   45 days  123 attempts
Testing same since   163806  2021-07-19 12:41:16 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3880 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 10:42:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 10:42:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158698.292011 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5nCL-0006eB-AH; Tue, 20 Jul 2021 10:42:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158698.292011; Tue, 20 Jul 2021 10:42:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5nCL-0006e4-5v; Tue, 20 Jul 2021 10:42:01 +0000
Received: by outflank-mailman (input) for mailman id 158698;
 Tue, 20 Jul 2021 10:41:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5nCJ-0006du-Pg; Tue, 20 Jul 2021 10:41:59 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5nCJ-0007Vj-64; Tue, 20 Jul 2021 10:41:59 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5nCI-0000e7-Q6; Tue, 20 Jul 2021 10:41:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5nCI-0002eB-Pc; Tue, 20 Jul 2021 10:41:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=wo1evT1BICU3xTSCvpq5HqokXvl36yY/05F/4jmbgXU=; b=IDPhHhjkiloANg65UjSLls+ap0
	+h6ueuVTU64k04AXSrYjkyoFJNJWSsgLhoC34pyoSfFx3VBfcQ4lzseGU/G5kDK065g2kQzxVfpH4
	Y+eFHi7ilmFCoDdcXwWnPkja7rftiDedTDFlwO1bAgBHHTiPdxTnjdwB8oBvq+BpYr9k=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163829-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163829: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=8ad2882cb6ca6697e1970001bd843a78e87f1dad
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 10:41:58 +0000

flight 163829 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163829/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              8ad2882cb6ca6697e1970001bd843a78e87f1dad
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  375 days
Failing since        151818  2020-07-11 04:18:52 Z  374 days  366 attempts
Testing same since   163829  2021-07-20 04:18:53 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 65300 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 10:42:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 10:42:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158701.292026 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5nCj-00075h-Jo; Tue, 20 Jul 2021 10:42:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158701.292026; Tue, 20 Jul 2021 10:42:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5nCj-00075Z-Fk; Tue, 20 Jul 2021 10:42:25 +0000
Received: by outflank-mailman (input) for mailman id 158701;
 Tue, 20 Jul 2021 10:42:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=w++L=MM=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m5nCi-00075F-Pf
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 10:42:24 +0000
Received: from mail-pf1-x432.google.com (unknown [2607:f8b0:4864:20::432])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3649347a-6a61-49a5-b3aa-f80536902d46;
 Tue, 20 Jul 2021 10:42:23 +0000 (UTC)
Received: by mail-pf1-x432.google.com with SMTP id p36so19166775pfw.11
 for <xen-devel@lists.xenproject.org>; Tue, 20 Jul 2021 03:42:23 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 l7sm12306158pfd.164.2021.07.20.03.42.06
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 20 Jul 2021 03:42:22 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3649347a-6a61-49a5-b3aa-f80536902d46
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:from:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=hN0BJVADnvKHZpmglD2eKB/Oi8YO8cdOkcC3e6NpTFs=;
        b=PtvV2WdAHw0a9gtThXugYgZYNkGi69NxYFla0iPvnMUgN/8Nv9perCmGq4jxJw37ib
         3MhoX+N+iRac768RuhZbsXcb4V1ENyXc+Hp8iRQyCUNcy+5QR+RKo2o26bggnYSk30kH
         mQxsKNHlCnqJPTxwZVnptbVwJhnVU+mHY9jBAycftY9VbYhWSDmUG7hStX90bUsA6uxS
         7Oz6vK5p4PMH2f9/xjqPDeu4Ty+uzFFjZBSbZEJebDMgTxpzgX8G7rLI/g44WRfizdQb
         a2peD0pz1Dw5uZOSwcf82DQ2qp9Wx7YakpDys0wD9IO5p3xs3GsUHv1PL5iZ+c5vfsbB
         Iatw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:from:to:cc:references:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=hN0BJVADnvKHZpmglD2eKB/Oi8YO8cdOkcC3e6NpTFs=;
        b=RJYYmi0ifBeLOn3dZcvgokL3umfL/x7A3jLgE9gHjcScGnZYMQDhIndZim5kASh2nX
         OddXY2gP5XFWGa0D5z4eXVmV2GnQWcyMgcNKv0MmsN4uK7lQ3NLQMLLgNjoDlvm3f08T
         rVXAFnWkmkYqaV4+092C5CFAxqpObJlpVmhzrgm8B7pRp3fEG132lQjZeWVu4kaauwA5
         H/mbu9j5uD4TJd+aFsttQfkza4n4crtujKD2UrOjMLzberIUPF8FE1jXBRWiaqMPWkGc
         tQfQu5NhCSXdg+rOaGURW38g+2aeBFzCARfgqrHIFMzxSP/YVPs19OyY7lot7RGiIsx8
         dj2w==
X-Gm-Message-State: AOAM533IixR/mWtNBCX8RcPsg21Cemzz8Z5FdZOoyyMkbo9HVUHE3iW2
	vGv6S4SbkbspGpw6sD3vVqs=
X-Google-Smtp-Source: ABdhPJxAN3/Y39S4YepNwf0hPaXmPa8/5yYo6wcbAAtrFHZ5ouGpoRMB+XEQ+o4lvobmWM28Sv+lHA==
X-Received: by 2002:a63:471b:: with SMTP id u27mr30565031pga.301.1626777742735;
        Tue, 20 Jul 2021 03:42:22 -0700 (PDT)
Subject: Re: [Resend RFC PATCH V4 09/13] x86/Swiotlb/HV: Add Swiotlb bounce
 buffer remap function for HV IVM
From: Tianyu Lan <ltykernel@gmail.com>
To: Christoph Hellwig <hch@lst.de>, konrad.wilk@oracle.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 brijesh.singh@amd.com, anparri@microsoft.com, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, boris.ostrovsky@oracle.com, jgross@suse.com,
 sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, m.szyprowski@samsung.com,
 robin.murphy@arm.com, kirill.shutemov@linux.intel.com,
 akpm@linux-foundation.org, rppt@kernel.org, Tianyu.Lan@microsoft.com,
 thomas.lendacky@amd.com, ardb@kernel.org, robh@kernel.org,
 nramas@linux.microsoft.com, pgonda@google.com, martin.b.radev@gmail.com,
 david@redhat.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, keescook@chromium.org, rientjes@google.com,
 hannes@cmpxchg.org, michael.h.kelley@microsoft.com
References: <20210707154629.3977369-1-ltykernel@gmail.com>
 <20210707154629.3977369-10-ltykernel@gmail.com>
Message-ID: <ef897f12-5a71-d982-4287-eeb7e0392e6d@gmail.com>
Date: Tue, 20 Jul 2021 18:42:04 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210707154629.3977369-10-ltykernel@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit


Hi Christoph & Konrad:
     Could you review this patch and make sure this is right way to 
resolve the memory remap request from AMD SEV-SNP vTOM case?

Thanks.

On 7/7/2021 11:46 PM, Tianyu Lan wrote:
> From: Tianyu Lan <Tianyu.Lan@microsoft.com>
> 
> In Isolation VM with AMD SEV, bounce buffer needs to be accessed via
> extra address space which is above shared_gpa_boundary
> (E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
> The access physical address will be original physical address +
> shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
> spec is called virtual top of memory(vTOM). Memory addresses below
> vTOM are automatically treated as private while memory above
> vTOM is treated as shared.
> 
> Introduce set_memory_decrypted_map() function to decrypt memory and
> remap memory with platform callback. Use set_memory_decrypted_
> map() in the swiotlb code, store remap address returned by the new
> API and use the remap address to copy data from/to swiotlb bounce buffer.
> 
> Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
> ---
>   arch/x86/hyperv/ivm.c             | 30 ++++++++++++++++++++++++++++++
>   arch/x86/include/asm/mshyperv.h   |  2 ++
>   arch/x86/include/asm/set_memory.h |  2 ++
>   arch/x86/mm/pat/set_memory.c      | 28 ++++++++++++++++++++++++++++
>   include/linux/swiotlb.h           |  4 ++++
>   kernel/dma/swiotlb.c              | 11 ++++++++---
>   6 files changed, 74 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
> index 8a6f4e9e3d6c..ea33935e0c17 100644
> --- a/arch/x86/hyperv/ivm.c
> +++ b/arch/x86/hyperv/ivm.c
> @@ -267,3 +267,33 @@ int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
>   			enc ? VMBUS_PAGE_NOT_VISIBLE
>   			: VMBUS_PAGE_VISIBLE_READ_WRITE);
>   }
> +
> +/*
> + * hv_map_memory - map memory to extra space in the AMD SEV-SNP Isolation VM.
> + */
> +unsigned long hv_map_memory(unsigned long addr, unsigned long size)
> +{
> +	unsigned long *pfns = kcalloc(size / HV_HYP_PAGE_SIZE,
> +				      sizeof(unsigned long),
> +		       GFP_KERNEL);
> +	unsigned long vaddr;
> +	int i;
> +
> +	if (!pfns)
> +		return (unsigned long)NULL;
> +
> +	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
> +		pfns[i] = virt_to_hvpfn((void *)addr + i * HV_HYP_PAGE_SIZE) +
> +			(ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
> +
> +	vaddr = (unsigned long)vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE,
> +					PAGE_KERNEL_IO);
> +	kfree(pfns);
> +
> +	return vaddr;
> +}
> +
> +void hv_unmap_memory(unsigned long addr)
> +{
> +	vunmap((void *)addr);
> +}
> diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
> index fe03e3e833ac..ba3cb9e32fdb 100644
> --- a/arch/x86/include/asm/mshyperv.h
> +++ b/arch/x86/include/asm/mshyperv.h
> @@ -253,6 +253,8 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
>   int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
>   int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
>   int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
> +unsigned long hv_map_memory(unsigned long addr, unsigned long size);
> +void hv_unmap_memory(unsigned long addr);
>   void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
>   void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
>   void hv_signal_eom_ghcb(void);
> diff --git a/arch/x86/include/asm/set_memory.h b/arch/x86/include/asm/set_memory.h
> index 43fa081a1adb..7a2117931830 100644
> --- a/arch/x86/include/asm/set_memory.h
> +++ b/arch/x86/include/asm/set_memory.h
> @@ -49,6 +49,8 @@ int set_memory_decrypted(unsigned long addr, int numpages);
>   int set_memory_np_noalias(unsigned long addr, int numpages);
>   int set_memory_nonglobal(unsigned long addr, int numpages);
>   int set_memory_global(unsigned long addr, int numpages);
> +unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size);
> +int set_memory_encrypted_unmap(unsigned long addr, unsigned long size);
>   
>   int set_pages_array_uc(struct page **pages, int addrinarray);
>   int set_pages_array_wc(struct page **pages, int addrinarray);
> diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
> index 6cc83c57383d..5d4d3963f4a2 100644
> --- a/arch/x86/mm/pat/set_memory.c
> +++ b/arch/x86/mm/pat/set_memory.c
> @@ -2039,6 +2039,34 @@ int set_memory_decrypted(unsigned long addr, int numpages)
>   }
>   EXPORT_SYMBOL_GPL(set_memory_decrypted);
>   
> +static unsigned long __map_memory(unsigned long addr, unsigned long size)
> +{
> +	if (hv_is_isolation_supported())
> +		return hv_map_memory(addr, size);
> +
> +	return addr;
> +}
> +
> +static void __unmap_memory(unsigned long addr)
> +{
> +	if (hv_is_isolation_supported())
> +		hv_unmap_memory(addr);
> +}
> +
> +unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size)
> +{
> +	if (__set_memory_enc_dec(addr, size / PAGE_SIZE, false))
> +		return (unsigned long)NULL;
> +
> +	return __map_memory(addr, size);
> +}
> +
> +int set_memory_encrypted_unmap(unsigned long addr, unsigned long size)
> +{
> +	__unmap_memory(addr);
> +	return __set_memory_enc_dec(addr, size / PAGE_SIZE, true);
> +}
> +
>   int set_pages_uc(struct page *page, int numpages)
>   {
>   	unsigned long addr = (unsigned long)page_address(page);
> diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> index f507e3eacbea..5c6f6c7380ef 100644
> --- a/include/linux/swiotlb.h
> +++ b/include/linux/swiotlb.h
> @@ -72,6 +72,9 @@ extern enum swiotlb_force swiotlb_force;
>    * @end:	The end address of the swiotlb memory pool. Used to do a quick
>    *		range check to see if the memory was in fact allocated by this
>    *		API.
> + * @vstart:	The virtual start address of the swiotlb memory pool. The swiotlb
> + *		memory pool may be remapped in the memory encrypted case and store
> + *		virtual address for bounce buffer operation.
>    * @nslabs:	The number of IO TLB blocks (in groups of 64) between @start and
>    *		@end. For default swiotlb, this is command line adjustable via
>    *		setup_io_tlb_npages.
> @@ -89,6 +92,7 @@ extern enum swiotlb_force swiotlb_force;
>   struct io_tlb_mem {
>   	phys_addr_t start;
>   	phys_addr_t end;
> +	void *vstart;
>   	unsigned long nslabs;
>   	unsigned long used;
>   	unsigned int index;
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index d3fa4669229b..9911817250a8 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -194,8 +194,13 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
>   		mem->slots[i].alloc_size = 0;
>   	}
>   
> -	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
> -	memset(vaddr, 0, bytes);
> +	mem->vstart = (void *)set_memory_decrypted_map((unsigned long)vaddr, bytes);
> +	if (!mem->vstart) {
> +		pr_err("Failed to decrypt memory.\n");
> +		return;
> +	}
> +
> +	memset(mem->vstart, 0, bytes);
>   }
>   
>   int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
> @@ -352,7 +357,7 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
>   	phys_addr_t orig_addr = mem->slots[index].orig_addr;
>   	size_t alloc_size = mem->slots[index].alloc_size;
>   	unsigned long pfn = PFN_DOWN(orig_addr);
> -	unsigned char *vaddr = phys_to_virt(tlb_addr);
> +	unsigned char *vaddr = mem->vstart + tlb_addr - mem->start;
>   
>   	if (orig_addr == INVALID_PHYS_ADDR)
>   		return;
> 


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 12:37:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 12:37:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158724.292050 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5ozZ-00028U-Ir; Tue, 20 Jul 2021 12:36:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158724.292050; Tue, 20 Jul 2021 12:36:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5ozZ-00028N-Fi; Tue, 20 Jul 2021 12:36:57 +0000
Received: by outflank-mailman (input) for mailman id 158724;
 Tue, 20 Jul 2021 12:36:56 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5ozY-00028D-06; Tue, 20 Jul 2021 12:36:56 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5ozX-00011I-Rv; Tue, 20 Jul 2021 12:36:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5ozX-0007K9-Hu; Tue, 20 Jul 2021 12:36:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5ozX-0003yA-HN; Tue, 20 Jul 2021 12:36:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=44oljdy76n1hbHryxroipm8arwDHfALICF7cdS8sJTU=; b=h82wQm9k4heeglMtUoWmeM/7kx
	E+dWEKDVMejU+Edy1JH9cqY002fR6ue/wGU2vuAfjPSKiRUEMaVQ45XA/iW1ew31HX0v5LpVr6Lz9
	N6c7Xr4A1eDwiOaT09IksbQsp+uymr6x6L2jyLDV2FANDHvxiO/ny5k3GCTTe5P2VYY4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163824-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163824: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-qcow2:guest-start/debian.repeat:fail:heisenbug
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=2734d6c1b1a089fb593ef6a23d4b70903526fe0c
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 12:36:55 +0000

flight 163824 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163824/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start    fail in 163801 REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 14 guest-start    fail in 163801 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qcow2 21 guest-start/debian.repeat fail in 163801 pass in 163824
 test-arm64-arm64-libvirt-xsm 13 debian-fixup               fail pass in 163801
 test-arm64-arm64-xl-thunderx 13 debian-fixup               fail pass in 163801
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163801

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-rtds 18 guest-start/debian.repeat fail in 163801 like 152332
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                2734d6c1b1a089fb593ef6a23d4b70903526fe0c
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  353 days
Failing since        152366  2020-08-01 20:49:34 Z  352 days  601 attempts
Testing same since   163801  2021-07-19 08:10:02 Z    1 days    2 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978200 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 13:40:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 13:40:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158772.292094 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5pyx-0001WW-Nt; Tue, 20 Jul 2021 13:40:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158772.292094; Tue, 20 Jul 2021 13:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5pyx-0001WP-KB; Tue, 20 Jul 2021 13:40:23 +0000
Received: by outflank-mailman (input) for mailman id 158772;
 Tue, 20 Jul 2021 13:40:22 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5pyw-0001WF-HL; Tue, 20 Jul 2021 13:40:22 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5pyw-00027c-0f; Tue, 20 Jul 2021 13:40:22 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5pyv-0002BT-Om; Tue, 20 Jul 2021 13:40:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5pyv-0000i7-OI; Tue, 20 Jul 2021 13:40:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=tOGytqWG4EgkGvixNpiH8omag4Lsigu0psM6XfcYJno=; b=LWbPkhcnLjMc0pn33l041qsr6e
	2uBjj5AAi4aIx4ktZPzcMq4vQqdbDdoHqfdCzCOEWzeZvbztNqwKbM29jstvwpKxpRKwCkfm4sTMr
	GTehkt1GkaIZ65QdTl4osxXHx0b5NtT7h1bB1V6LUfhp8/q4zzmF7oRHXEEAEgEOa6X8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-amd64-xl-qemuu-debianhvm-amd64
Message-Id: <E1m5pyv-0000i7-OI@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 13:40:21 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-xl-qemuu-debianhvm-amd64
testid debian-hvm-install

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163842/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-amd64-xl-qemuu-debianhvm-amd64.debian-hvm-install.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-amd64-xl-qemuu-debianhvm-amd64.debian-hvm-install --summary-out=tmp/163842.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-amd64-xl-qemuu-debianhvm-amd64 debian-hvm-install
Searching for failure / basis pass:
 163811 fail [host=godello1] / 163321 [host=fiano0] 163311 [host=albana1] 163303 [host=godello0] 163299 [host=fiano1] 163292 [host=pinot1] 163276 [host=huxelrebe0] 163235 [host=elbling1] 163228 [host=huxelrebe1] 163220 [host=chardonnay0] 163213 [host=pinot0] 163204 [host=godello0] 163194 [host=elbling0] 163187 [host=fiano1] 163179 [host=godello0] 163171 [host=albana1] 163163 [host=fiano0] 163156 [host=huxelrebe1] 163142 ok.
Failure / basis pass flights: 163811 / 163142
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7457b407edd6e8555e4b46488aab2f13959fccf8 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#e3955ae93f5151ad2e982440b7c8d3776a9afee2-7457b407edd6e8555e4b46488aab2f13959fccf8 git://xenbits.xen.org/osstest/seabios.git#e3c30795823672eec9bde75187e184f23ed98d70-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#bb11edcec1a953ce590da797b0d005cd60f21e83-0f435e2b58543f5baae96e17a10ae20d3dbc28fa
Loaded 52131 nodes in revision graph
Searching for test results:
 163110 [host=albana0]
 163128 [host=huxelrebe0]
 163142 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163156 [host=huxelrebe1]
 163163 [host=fiano0]
 163171 [host=albana1]
 163179 [host=godello0]
 163187 [host=fiano1]
 163194 [host=elbling0]
 163204 [host=godello0]
 163213 [host=pinot0]
 163220 [host=chardonnay0]
 163228 [host=huxelrebe1]
 163235 [host=elbling1]
 163276 [host=huxelrebe0]
 163292 [host=pinot1]
 163299 [host=fiano1]
 163303 [host=godello0]
 163311 [host=albana1]
 163321 [host=fiano0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163516 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163545 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163563 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 42e1d798a6a01817bdcf722ac27eea01531e21cd 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163577 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9516034d05a8c71ef157a59f525e4c4f7ed79827 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163600 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 86108e23d798bcd3fce35ad271b198f8a8611746 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163621 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163642 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 eca73713358f7abb18f15c026ff4267b51746992 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163663 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163677 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 2a54fc454cf0dbf173d5dc95205febe381cfb7cc 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163694 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1f966c7c11bbe77f3de5f50911de7c3a74594bfe 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163719 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a9649a719a44894b81f38dc1c5c1888ee684acef 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163741 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9ad4c7c9b63f89c308fd988d509bed1389953c8b 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163765 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163784 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163798 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163807 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163808 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fd79f89c76c8e2f409dd9db5d7a367b1f64b6dc6 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163810 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163812 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163814 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163815 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 73c8bf4ccff8951d228b8a0d49968c56e32da4de 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163816 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 dd62bf14b756821fa293e3465955a41e9d460deb 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163817 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 1ca82a8db03ea3c352d581753b22e8dac4ea8047 54082c81d96028ba8c76fbe6784085cf1df76b20 67a50e393a59367ba2ad475e141a6739e17260f9
 163820 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163821 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 918b8842a852e0e7446286f546724b1c63c56c66
 163822 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163823 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 232a4d2c25c3a83e148116a15f992f728c3579e6 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163825 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 3ce2765ac21dbd739e8216694b025aaabf4afff3
 163826 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163827 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163828 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163830 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163831 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163811 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7457b407edd6e8555e4b46488aab2f13959fccf8 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163833 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163836 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e3955ae93f5151ad2e982440b7c8d3776a9afee2 e3c30795823672eec9bde75187e184f23ed98d70 bb11edcec1a953ce590da797b0d005cd60f21e83
 163837 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7457b407edd6e8555e4b46488aab2f13959fccf8 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163838 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163839 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163840 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163842 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163142 (pass), for basis pass
 Result found: flight 163811 (fail), for basis failure
 Repro found: flight 163836 (pass), for basis pass
 Repro found: flight 163837 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163831 (pass), for last pass
 Result found: flight 163833 (fail), for first failure
 Repro found: flight 163838 (pass), for last pass
 Repro found: flight 163839 (fail), for first failure
 Repro found: flight 163840 (pass), for last pass
 Repro found: flight 163842 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163842/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-amd64-xl-qemuu-debianhvm-amd64.debian-hvm-install.{dot,ps,png,html,svg}.
----------------------------------------
163842: tolerable ALL FAIL

flight 163842 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163842/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail baseline untested


jobs:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Tue Jul 20 13:54:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 13:54:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158781.292112 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5qCs-0003Eq-AH; Tue, 20 Jul 2021 13:54:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158781.292112; Tue, 20 Jul 2021 13:54:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5qCs-0003Ej-6e; Tue, 20 Jul 2021 13:54:46 +0000
Received: by outflank-mailman (input) for mailman id 158781;
 Tue, 20 Jul 2021 13:54:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=CKIv=MM=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m5qCr-0003Ed-1P
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 13:54:45 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08742c82-e962-11eb-8b7e-12813bfff9fa;
 Tue, 20 Jul 2021 13:54:42 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id C76616736F; Tue, 20 Jul 2021 15:54:37 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 08742c82-e962-11eb-8b7e-12813bfff9fa
Date: Tue, 20 Jul 2021 15:54:37 +0200
From: Christoph Hellwig <hch@lst.de>
To: Tianyu Lan <ltykernel@gmail.com>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
	wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
	mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
	dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
	konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com,
	sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
	davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
	martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
	m.szyprowski@samsung.com, robin.murphy@arm.com,
	kirill.shutemov@linux.intel.com, akpm@linux-foundation.org,
	rppt@kernel.org, Tianyu.Lan@microsoft.com, thomas.lendacky@amd.com,
	ardb@kernel.org, robh@kernel.org, nramas@linux.microsoft.com,
	pgonda@google.com, martin.b.radev@gmail.com, david@redhat.com,
	krish.sadhukhan@oracle.com, saravanand@fb.com,
	xen-devel@lists.xenproject.org, keescook@chromium.org,
	rientjes@google.com, hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com, iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org, vkuznets@redhat.com, brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: Re: [Resend RFC PATCH V4 09/13] x86/Swiotlb/HV: Add Swiotlb bounce
 buffer remap function for HV IVM
Message-ID: <20210720135437.GA13554@lst.de>
References: <20210707154629.3977369-1-ltykernel@gmail.com> <20210707154629.3977369-10-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210707154629.3977369-10-ltykernel@gmail.com>
User-Agent: Mutt/1.5.17 (2007-11-01)


Please split the swiotlb changes into a separate patch from the
consumer.

>  }
> +
> +/*
> + * hv_map_memory - map memory to extra space in the AMD SEV-SNP Isolation VM.
> + */
> +unsigned long hv_map_memory(unsigned long addr, unsigned long size)
> +{
> +	unsigned long *pfns = kcalloc(size / HV_HYP_PAGE_SIZE,
> +				      sizeof(unsigned long),
> +		       GFP_KERNEL);
> +	unsigned long vaddr;
> +	int i;
> +
> +	if (!pfns)
> +		return (unsigned long)NULL;
> +
> +	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
> +		pfns[i] = virt_to_hvpfn((void *)addr + i * HV_HYP_PAGE_SIZE) +
> +			(ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
> +
> +	vaddr = (unsigned long)vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE,
> +					PAGE_KERNEL_IO);
> +	kfree(pfns);
> +
> +	return vaddr;

This seems to miss a 'select VMAP_PFN'.  But more importantly I don't
think this actually works.  Various DMA APIs do expect a struct page
backing, so how is this going to work with say dma_mmap_attrs or
dma_get_sgtable_attrs?

> +static unsigned long __map_memory(unsigned long addr, unsigned long size)
> +{
> +	if (hv_is_isolation_supported())
> +		return hv_map_memory(addr, size);
> +
> +	return addr;
> +}
> +
> +static void __unmap_memory(unsigned long addr)
> +{
> +	if (hv_is_isolation_supported())
> +		hv_unmap_memory(addr);
> +}
> +
> +unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size)
> +{
> +	if (__set_memory_enc_dec(addr, size / PAGE_SIZE, false))
> +		return (unsigned long)NULL;
> +
> +	return __map_memory(addr, size);
> +}
> +
> +int set_memory_encrypted_unmap(unsigned long addr, unsigned long size)
> +{
> +	__unmap_memory(addr);
> +	return __set_memory_enc_dec(addr, size / PAGE_SIZE, true);
> +}

Why this obsfucation into all kinds of strange helpers?  Also I think
we want an ops vectors (or alternative calls) instead of the random
if checks here.

> + * @vstart:	The virtual start address of the swiotlb memory pool. The swiotlb
> + *		memory pool may be remapped in the memory encrypted case and store

Normall we'd call this vaddr or cpu_addr.

> -	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
> -	memset(vaddr, 0, bytes);
> +	mem->vstart = (void *)set_memory_decrypted_map((unsigned long)vaddr, bytes);

Please always pass kernel virtual addresses as pointers.

And I think these APIs might need better names, e.g.

arch_dma_map_decrypted and arch_dma_unmap_decrypted.

Also these will need fallback versions for non-x86 architectures that
currently use memory encryption.


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 14:31:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 14:31:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158787.292124 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5qmC-0007p2-4C; Tue, 20 Jul 2021 14:31:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158787.292124; Tue, 20 Jul 2021 14:31:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5qmC-0007ov-0x; Tue, 20 Jul 2021 14:31:16 +0000
Received: by outflank-mailman (input) for mailman id 158787;
 Tue, 20 Jul 2021 14:31:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m5qmB-0007op-52
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 14:31:15 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m5qmB-00031A-0v
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 14:31:15 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m5qmA-0004Yv-WE
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 14:31:15 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m5qm7-0006tc-Fd; Tue, 20 Jul 2021 15:31:11 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=itsl3tw4c0k8e4bYlqKlUq4Q9TFznUbGFGE2t0XieAQ=; b=5AeDjmIs6KctYWosOFjHx9SSZT
	p60WmDpPoL8aePK0GoqdrBFxGEfajhPUest+Ng9G48AtEYsY8hLnbuNcUO3Z/eBJaZQTiIc2Nmo05
	+J4/TPN6H53KJlHMoCuj0sU6mNirbemzCQQXYrUBV4jZmyG14h5hdjoEj89Klz5Yp3XY=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24822.56879.260780.652184@mariner.uk.xensource.com>
Date: Tue, 20 Jul 2021 15:31:11 +0100
To: Jason Andryuk <jandryuk@gmail.com>
Cc: xen-devel@lists.xenproject.org,
    jgross@suse.com,
    Ian Jackson <iwj@xenproject.org>,
    Wei Liu <wl@xen.org>,
    Jan Beulich <jbeulich@suse.com>,
    Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] tests/xs: Check asprintf result
In-Reply-To: <20210718135633.28675-1-jandryuk@gmail.com>
References: <20210718135633.28675-1-jandryuk@gmail.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Jason Andryuk writes ("[PATCH] tests/xs: Check asprintf result"):
> Compiling xs-test.c on Ubuntu 21.04 fails with:

Thanks.  However, your patch doesn't apply to staging; the files have
been reorganised AFAICT.  Also, I think

  93c9edbef51b31056f93a37a778326c90a83158c
  tests/xenstore: Rework Makefile

fixed this (with slightly different style, and despite not mentioning
this change in the commit message)

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 14:42:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 14:42:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158793.292136 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5qwo-0000yt-4u; Tue, 20 Jul 2021 14:42:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158793.292136; Tue, 20 Jul 2021 14:42:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5qwo-0000ym-1M; Tue, 20 Jul 2021 14:42:14 +0000
Received: by outflank-mailman (input) for mailman id 158793;
 Tue, 20 Jul 2021 14:42:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hl5X=MM=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m5qwn-0000yg-Eh
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 14:42:13 +0000
Received: from mail-lj1-x22e.google.com (unknown [2a00:1450:4864:20::22e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 31c981fc-29e7-4e38-9c74-615f2a3dbc46;
 Tue, 20 Jul 2021 14:42:12 +0000 (UTC)
Received: by mail-lj1-x22e.google.com with SMTP id u14so31433646ljh.0
 for <xen-devel@lists.xenproject.org>; Tue, 20 Jul 2021 07:42:12 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 31c981fc-29e7-4e38-9c74-615f2a3dbc46
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=juy2lbl74Rn6ykOaEQtIkw1UiXMHnx+MEYlt1GWRrFA=;
        b=fF6SHJISCxmXamw8fLOddMax9LXscXIdEFLgz4d0y/sa1drbLRNfut7sSmI2MOxJ84
         YI1mB6c31S2rzHi+SGFAdvKFODoV1iB2pbfhoBZo6r5W6AMbzID0R0t+JYW0maRoTQrs
         fConoGBqxN+uHKyh0gwbV+jeylvEqRX7Nzyy5/rkKnlIJgS1O9vpdi3WdL9CG6ju5VE0
         lbsOSLhb3VhAy+qXccTtGznu3QvWMWmfU0nUipFVbfJbPJtDwUuzQXas3TOZs3iOZt7E
         H3oFRFi5XmoqRUKymoStMhWi3ec831i8GBhC6LjP8N9Xlzhqky5KfNe9VcJFx+vLj+yn
         OpBA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=juy2lbl74Rn6ykOaEQtIkw1UiXMHnx+MEYlt1GWRrFA=;
        b=PJV/IS13X7JrUmrEz+/bMip9RNC4pfNaLqzPl/n0OSAggxTWKPE1xImc8laSgONyQ+
         0YSNVRSqESSXPwKaXhJkZ7WnauTNsEZ4nVDfIZDoOrA5fYVpgGEhGrkokdKls8pfeSwZ
         0n2JS9mNaRZrdTUyQ19EsnNYacrspXZFgFQUXCtHLCqiLqdVWudhsTt0RBOx4MGh/LPQ
         E//yslJSgg/+RvnH4/W4lsd3Nc91ajCEnnUlQqx5rUw7RRAUQPxEx/QHIGAlfjvoqu03
         AWT18Ris2Du8xX1SQ0tisBrxzzkjy6bRvxSssboI291MK52z1KHWHqxj6YY0Mhh+dB1t
         Ct2w==
X-Gm-Message-State: AOAM5326akBxgS4qISEg8JpHKkjpPp3q3z6Fnp5Lw3xHT4x8BRJVX68T
	9AfNbPFsjs+skqX4hSdvkXECAtDDh1E9BxO+5Xo=
X-Google-Smtp-Source: ABdhPJxSqqLO+4bzVyOTTUHqwonzoN89YZhtVWFa8r3CZO9Kk+UfK6ZdcRn2+aZFoqP86CdQ7Ar23WOhZX4bSSHcswc=
X-Received: by 2002:a2e:a5c6:: with SMTP id n6mr26659931ljp.204.1626792131304;
 Tue, 20 Jul 2021 07:42:11 -0700 (PDT)
MIME-Version: 1.0
References: <20210718135633.28675-1-jandryuk@gmail.com> <24822.56879.260780.652184@mariner.uk.xensource.com>
In-Reply-To: <24822.56879.260780.652184@mariner.uk.xensource.com>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Tue, 20 Jul 2021 10:41:59 -0400
Message-ID: <CAKf6xpsA80d+1zk1qQiTz_bRJ7Ke+2BZazQ4ghcYocDztfmzwg@mail.gmail.com>
Subject: Re: [PATCH] tests/xs: Check asprintf result
To: Ian Jackson <iwj@xenproject.org>
Cc: xen-devel <xen-devel@lists.xenproject.org>, Juergen Gross <jgross@suse.com>, 
	Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>, 
	Andrew Cooper <andrew.cooper3@citrix.com>
Content-Type: text/plain; charset="UTF-8"

On Tue, Jul 20, 2021 at 10:31 AM Ian Jackson <iwj@xenproject.org> wrote:
>
> Jason Andryuk writes ("[PATCH] tests/xs: Check asprintf result"):
> > Compiling xs-test.c on Ubuntu 21.04 fails with:
>
> Thanks.  However, your patch doesn't apply to staging; the files have
> been reorganised AFAICT.  Also, I think
>
>   93c9edbef51b31056f93a37a778326c90a83158c
>   tests/xenstore: Rework Makefile
>
> fixed this (with slightly different style, and despite not mentioning
> this change in the commit message)

Yes, that looks like it fixed it.

Sorry, I was working off a stale branch, so I didn't realize this was fixed.

Regards,
Jason


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 14:48:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 14:48:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158799.292148 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5r2Z-0001nz-Rm; Tue, 20 Jul 2021 14:48:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158799.292148; Tue, 20 Jul 2021 14:48:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5r2Z-0001ns-Nb; Tue, 20 Jul 2021 14:48:11 +0000
Received: by outflank-mailman (input) for mailman id 158799;
 Tue, 20 Jul 2021 14:48:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=nm8y=MM=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m5r2X-0001nm-Tx
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 14:48:10 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ffc9e165-abfd-4066-b938-fd8ee80951a4;
 Tue, 20 Jul 2021 14:48:08 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ffc9e165-abfd-4066-b938-fd8ee80951a4
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626792488;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=HDBfrtPbftgfNXOy5gQSAx952JBZXpimI+76vEiwm9o=;
  b=G5DCQxN4CnxG5TQU3xALvq5QQmesxwHUiWLThNK8Ubn+8Tws9vhtGdo8
   LM1KaOKLVPsreCLidgtIOZO5cJwXKnTuFl/mwqGLL3qsXnTFe9Rv7EAjk
   NliwP4c0Dogyp65zrgXdHFgJ79alZRanFkqTyGttOEv0BeWiQPTOS8VD4
   g=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: Bfnqmtyzjrs7Z/2J6HdqBso8JYnmcqv1yIuBmc+YyiDw6UY7fLGinNNMp0Emw993Eg0sG6k4PG
 BMKEZo6CJY9jqwHy+BcFdaetlr3GZApUlb6mzP5EqzwUB0+Kcg3rN+Eqbx460Jmg9k+iYCkLU1
 TvIUXmchR/maSnKhBW+fcB0AT8QW2U4/KAnk55X1AtegLLdRP1uWXCKIXCkOFOY7tw78jp8F4O
 2AHS4cUaclAgx9LHdkXNOPsTpGN8Ax17miIO9DudTCnAtUhyJK16SaRgBrlc0xFT9QoQ5asnOx
 z5bKTPCt3L6nh4uOJpR20lA0
X-SBRS: 5.1
X-MesageID: 48717618
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Kg2Z4qysbBU631mKmGNTKrPxrOskLtp133Aq2lEZdPULSKKlfp
 GV88jziyWZtN9wYhEdcdDpAtjmfZquz+8K3WB3B8bcYOCGghrVEGgG1+rfKlLbalbDH4JmpN
 5dmu1FeaDN5DtB/LXHCWuDYq4dKbC8mcjC74qurAYOPHRXguNbnmFE426gYz1LrWJ9dP8E/f
 Snl656TnabCA4qhpPRPAh1YwGPnayEqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD69jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbUz11rhOkWO5Tf90Qjp1zgjr1fk1F+jmHPm5ff0QTorYvAxyL5xQ1/80Q4Nrdt82K
 VE0yayrJxMFy7Nmyz7+pzhSwxqvlDcmwtmrccjy1hkFacOYr5YqoISuGlPFo0bIS784Ic7VM
 FzEcDn4upMe1/yVQGagoBW+q3qYp0PJGbBfqBb0fbligS+3UoJjHfw/fZv2kvpr/kGOsF5D4
 2uCNUbqFlMJvVmJ56VSt1xGvdepwT2MFvx2VmpUCPa/Zc8SjnwQq7MkcEIDd6RCeo1JbsJ6d
 j8uQBjxCEPk3yHM7zH4HQMyGGWfFmA
X-IronPort-AV: E=Sophos;i="5.84,255,1620705600"; 
   d="scan'208";a="48717618"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=M+CdO/L8cSytjH4qFGmo4+LStJxpj4yx5YYKhEhKHcHs37q0Xx9H5Kk0F2pNCch+t+qj7thZaHWOhfumKtdt8EwZtVz7laxRzQyWqhz8Ix31L2vkyTPLueY64NLayJ2N4P0LJYbLt9QzClsSzj6nLolGA31Gp27JO4YedErQEakedykKbGMEtl+Uq9n3rmKnLn/NF9mpGMAd4Yu0GJ7gYS/ZeyE93nZeSydaAukWcuwAlkG5D09Ojl3U8h97Bc8v+cascMmNP4l4rvwgItXKRlc/RSpRFOqTG+Wky7VD8l17ZuBGIVYx8oGzRmRZM3BXJ5e5U5EBNqB2W91GnqF2rA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5TQcZZGfdxXFd9mUeIoVz1FJtc3s6ePMUdIdij2JFNI=;
 b=A7C642ey9FSsabWQz8OAQdSdcJ1cmJC2njljiyHIizds90so6bkna8Tr0v79rqo9qqn19U1r/SMuXAXQbYVgUCojc1oSTcCW0FZhwD7bjnbK1978MbykbYomo/Tkw4ivsNPsjdtuJjCNdyyfhn5VKVwcsdzWvbbYsCCP3ofDzSdkZHPqD/i0xCf0pbpDyxI326B9fmWmRvj0zGVDLD6CVYA4vwO72WoV8JKuOWJ9POSoJT1x+0H8g3rRm9k0B9aygr3AEm43RXvzcWjvZC3NRH92b77vDz0D7u1D1v+UwaV36WeusFKjFqdr7ETo7jev2XHKE0sfCSBjEl9QzbM8UQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5TQcZZGfdxXFd9mUeIoVz1FJtc3s6ePMUdIdij2JFNI=;
 b=p+D2Vjm7r2TN1k8stU/+TltgY7UJDAt7chet/WmOFNH9KsatqwQ700uFZbx7dTlZ+8aKvRwPrSbqB14ekk36BI7zCFmAOEUYS+AeNYrquAykhMjaplF/HkgDZVPHcwwpf6e5XFz/E1drZhDCfdomlO+DFM52USTwLplTjw0Blkc=
Subject: Re: [PATCH] x86/hvm: Propagate real error information up through
 hvm_load()
To: Jan Beulich <jbeulich@suse.com>
CC: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>, Wei Liu
	<wl@xen.org>, Igor Druzhinin <igor.druzhinin@citrix.com>, Xen-devel
	<xen-devel@lists.xenproject.org>
References: <20210719111449.21337-1-andrew.cooper3@citrix.com>
 <2b12abb9-4fde-f21a-e763-38de14847e3b@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <2d0d1736-e4e4-58e8-7a01-4937c75885d2@citrix.com>
Date: Mon, 19 Jul 2021 13:56:16 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <2b12abb9-4fde-f21a-e763-38de14847e3b@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0456.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1aa::11) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e5f534f8-11f0-40af-950e-08d94ab49c67
X-MS-TrafficTypeDiagnostic: SJ0PR03MB6272:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB6272C98BA34D639F97838EC1BAE19@SJ0PR03MB6272.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: aSl66Kis/z79O9zeLllOaDDWo4+y/oL9IrQvMAbuA4vJc4/huwgBwLgsCgmhYiGqSlq9t9n3a3IDI2tgwa/hxKQaDXzEs4rmlJUMVpzGYraiVG9I98/gETOU4R9sCYhiQ/+U/7pMn1zdZgnPe1oGzIL2BHq4j3KFsmvkd8UKq2iU8/58q7rp7mdZsw5Ia9JvWTMEm0EhZqG+178UxmJvcsmeMBxX4bMyvL5S2QQ9liRT3kXYc88I6Wv+tNngTmQB3I5SEYPEEy56vbKnwpnIC/iB1CAFXXOrV9smMURiwSKyAJd7flvmb0A77LuoxoRt7a0nKkoSFh6Plw1Poru0nzMdWn8UOXjIWp22fO9fNijqdIhYbjxQg0+D9ErdtTWKDmi35QYHLAao4E+aLofTbFZdRMHZsUZd+TLZTWUEGrEzErD5iv1et6Z+8drFmuUv5RFEUOIDeTSvyFwxAKmmH/rFPGlpQaICWvZkPKaVgz/eMGE5NPiP17JtPhaKPGRJkmjdId0CkkEgKcS+UiF1qGdZOYwc3O+hG97Exp+Px/XXGXtRjpNqcNft0byGt/ocVqsCYfKd+tBBahp7Sx7WeYLxfA7VJB6vC2sjATV4/3Vw+F9Re1tfYSpKKQGEeF5WusBGkRhH1uLu/Sh1dbVMRavhtms/wsBFZ2PwqdzrjvWZ0BxtBi9SPhgN9gxgboXdrI/2x5SK4YwC57T6dw7NPGj2jFjy6OYiMOsY7Go6awo=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(396003)(346002)(39860400002)(366004)(136003)(316002)(86362001)(186003)(36756003)(83380400001)(53546011)(5660300002)(54906003)(6916009)(8676002)(6486002)(2906002)(6666004)(16576012)(478600001)(956004)(66946007)(31696002)(31686004)(26005)(2616005)(8936002)(4326008)(38100700002)(66476007)(66556008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: e5f534f8-11f0-40af-950e-08d94ab49c67
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 12:56:23.0207
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: YoZXx2Olta/3iw50DxLtne7qPGprD/uZf2/acL2kU+3AYaHa0iq/46bkyBskY0lkKPMhPSk027iKHrG2t9Tc+bepRO4TsMmUwO3Tb1Z5zrA=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6272
X-OriginatorOrg: citrix.com

On 19/07/2021 13:46, Jan Beulich wrote:
> On 19.07.2021 13:14, Andrew Cooper wrote:
>> hvm_load() is currently a mix of -errno and -1 style error handling, which
>> aliases -EPERM.  This leads to the following confusing diagnostics:
>>
>> From userspace:
>>   xc: info: Restoring domain
>>   xc: error: Unable to restore HVM context (1 = Operation not permitted): Internal error
>>   xc: error: Restore failed (1 = Operation not permitted): Internal error
>>   xc_domain_restore: [1] Restore failed (1 = Operation not permitted)
>>
>> From Xen:
>>   (XEN) HVM10.0 restore: inconsistent xsave state (feat=0x2ff accum=0x21f xcr0=0x7 bv=0x3 err=-22)
>>   (XEN) HVM10 restore: failed to load entry 16/0
>>
>> The actual error was a bad backport, but the -EINVAL got converted to -EPERM
>> on the way out of the hypercall.
>>
>> The overwhelming majority of *_load() handlers already use -errno consistenty.
>> Fix up the rest to be consistent, and fix a few other errors noticed along the
>> way.
>>
>>  * Failures of hvm_load_entry() indicate a truncated record or other bad data
>>    size.  Use -ENODATA.
> But then ...
>
>> @@ -421,8 +421,8 @@ static int pit_load(struct domain *d, hvm_domain_context_t *h)
>>  
>>      if ( hvm_load_entry(PIT, h, &pit->hw) )
>>      {
>> -        spin_unlock(&pit->lock);
>> -        return 1;
>> +        rc = -ENODEV;
>> +        goto out;
>>      }
> ... use -ENODATA here as well?

Hmm - that was intended to be ENODATA.  Will fix.

>  Preferably with the adjustment
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks,

> I'll pick this up for backporting once I see it in the tree.

I don't know how much the call tree has changed over time.  Every
handler will need a quick check on each release.

~Andrew


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 15:40:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 15:40:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158840.292206 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5rrP-0001lt-Op; Tue, 20 Jul 2021 15:40:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158840.292206; Tue, 20 Jul 2021 15:40:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5rrP-0001lm-LJ; Tue, 20 Jul 2021 15:40:43 +0000
Received: by outflank-mailman (input) for mailman id 158840;
 Tue, 20 Jul 2021 15:40:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=nm8y=MM=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m5rrN-0001lc-Ri
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 15:40:42 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e7a281b0-42d8-42c8-947d-ccc34569c951;
 Tue, 20 Jul 2021 15:40:40 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e7a281b0-42d8-42c8-947d-ccc34569c951
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626795640;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=FsBBTa/IoMoNu5HUqhkzXajnOn/O154oRmc4pUPlDRo=;
  b=E7oVRmW77dhjZcoLwfIC9p8EXzGfyyFgY5QHjd1HCZtN1DUihbT5bCNF
   vH6TBjLGyQ+JCrAnJp3PW4Qg/yhk59xtBNAlkGYjt5MYnektxOE39dquR
   0s/1aowlBbIgN5x1WzNUmqGIVwIx9OO0uKtCIM7uPO5ivkymULg26TK3z
   o=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: wSoA3MQC3szFOW3qOcyQnSxBUJ1mP206hzm5xxMwEhb6Tv9I8ihqvI93ukiBsCkkA5qZIel+Yr
 p5pBQeqdC4Pvx3GHfEP9y/iGlku//b2IArCfm3xyN+XPkRyQnDeGWvOekK5Jdrp7awQH810mm2
 3H9yfPGuBBvnPTOqRQ6lLl1XT7+oxxx01NAMuOxgJXNVRHbxOjO2l1zwWgjs1Ipbi8AaOnMsLy
 Uu6WNQhvShiTf53BmbvaiTVkWdaHTjii1dOQ1BO3a6CntE6s2um5NCkTMHgRj1wjVLiOO9lJxy
 t+oiDmspxeojzf4YWvQduNaW
X-SBRS: 5.1
X-MesageID: 48671119
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:ox4+161Kv7RSpddLBDSYNAqjBLwkLtp133Aq2lEZdPU1SKClfq
 WV98jzuiWatN98Yh8dcLK7WJVoMEm8yXcd2+B4V9qftWLdyQiVxe9ZnO7f6gylNyri9vNMkY
 dMGpIObOEY1GIK7/rH3A==
X-IronPort-AV: E=Sophos;i="5.84,255,1620705600"; 
   d="scan'208";a="48671119"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KRwmQC1k4NYC4vn/24hZVMV9sqCMwH0/HjvHXGE4JFVgEfCFkUaL+bAwSoxkdxiqgWEU/39XQ7lSLjO9mhDrpmDsveEU5j/eCKyF0lM8PKTChlkhO8bzpMh6IvXCkYyVWUQ1EAHoXh3S2rWUb/IFD1Q1JcU3wfNVXKRyNVIca+3C4m19d8bJEdaba8vAj+Q93PVwfwYU2NAL5dUQOs0GvBa7hwFQxlRE17zib1LMYXqELNcOKLqjaXKzGd8EBMHUnxRLEHtcdbPZjEwJXHTXK4SUxfaA24dueXdJo5WxuTCUyTUbO7Sh5ZWeSHqJutwfWY04zaQZC6zrgHRyH701XQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oPRUOrGC73CTyyVSxkw3nqp+mvPSi+T5s+Jws99J4/s=;
 b=FQ9My3D1qZ12efKw+nAl7L2Tl6KbV2GTR3kGpnrN44c2whVaJXwqG5a7uxv/AfyjnKdiDzhRk8RG4Dkw8XgB6ZngkZ2d4AqSSlyHjlf9/Rxy7CiztcAlkrVwSxkQFXfaWkAqdlDUKWqirnZ44nYl2oPALrJ2S0azRfxRRLDFTXxOyyHZiAITweawMu7II1OfbQHFj1XakzHqEmjv/ciLQkTDa+AmcEeQwkO68M4tmS/4r4QBC1CT2J59NE3rXSnrMf5FiueKRxUK3UGhM4ibwrQ1e1pNI1pZf5sJBkgVftW8AuR0ovEXSh23HjagXDPqMTUsgxPKSoJa+urEuNH36g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oPRUOrGC73CTyyVSxkw3nqp+mvPSi+T5s+Jws99J4/s=;
 b=uR+cVNkOWavX0CMEGYZPxIA9UWRUolUWeBN3TM2Njz0htH8W8Ma9kXlf99fRLoXPDUvkV7vDTnSUKmyHntMT4ijHlT44kPD+clu0LMF/gUPcwm1aBiS2619LrRCYf0g2mARuUt6YbSHTFH6ODadbPHdfTKfwOPMag0cYgDR+478=
To: Ian Jackson <iwj@xenproject.org>, Jason Andryuk <jandryuk@gmail.com>
CC: <xen-devel@lists.xenproject.org>, <jgross@suse.com>, Wei Liu <wl@xen.org>,
	Jan Beulich <jbeulich@suse.com>
References: <20210718135633.28675-1-jandryuk@gmail.com>
 <24822.56879.260780.652184@mariner.uk.xensource.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] tests/xs: Check asprintf result
Message-ID: <048868ab-3291-70d9-791d-325fc79caccd@citrix.com>
Date: Tue, 20 Jul 2021 16:40:19 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <24822.56879.260780.652184@mariner.uk.xensource.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0496.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:1ab::15) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b9cea517-5773-4264-2df3-08d94b94b272
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5440:
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5440BC2E0A253A3804BE1497BAE29@SJ0PR03MB5440.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1417;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: qlVkRXl4RV2a82LVWAMfZNwAQUqgjYWZdfThcGC9yGAdDEE8fXto3TymP3K+5Y44CpccysD5ItVbsP38IrHtzUWoVBlj0D2kRWVn6hZuaGjI+N8wCcB8GuzWVHyuxXmLTAYdcau2J5DcyeMdqWY6i1ACLI4r/4UJufNM112IOUY1P3z0gOG6nMuQhnSwj3mVDAjzmqSxhBkU+KlzmSHv1zIzjPLpvla2ZJMH8zBmUS9cYeYrE7THc0jr89odVjiOS2X262vi4W8jp9M+tfhGwdzPCugK7eMRsdi14jDrhSZKqFgOCj7izO8cibafTry/k/9Zhr1bHvMwn2tKVXAorPd6Z/nLn/B3QaUe3vfUZn+Cdw4OCLGDzoXuKDDdSpy0aDJMajAz4KZKzQdlKW8bbujeZ6azElTzwwiskScNjaUdRqlu92qtZOFzKdwOi2eIb5A5EdrOZqhyUOvERMGpg17feasUN8owMqQ/LFLYrrIo3v+ga4a31eK8EoMFza9iw+kJodK7jY91gG4FtGxAQ1TBX6hEXtAPUuBcj5PL8nECSTwRL5gqHxxEobIWdnV1ZG6vloQ/PW5Pb5xEYuOE5rf09+9xaENqVhMkrJUFYUKPCmOPZhJRhfuxYiOMKQU1OigZZRWeOVRGGQym/Wf6jRY3FVSOkbiJVVeWPMZ0iM/aeeUmfWFL5dVYaziywcuzyuB0YONniTEPqw+FOQxh7VjKvX5oiaOXH/kFnh7zx48=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(136003)(396003)(346002)(39860400002)(86362001)(16576012)(478600001)(186003)(8676002)(316002)(38100700002)(83380400001)(26005)(53546011)(956004)(2906002)(8936002)(6666004)(66946007)(110136005)(5660300002)(6486002)(4744005)(2616005)(31696002)(66476007)(66556008)(54906003)(31686004)(36756003)(4326008)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: b9cea517-5773-4264-2df3-08d94b94b272
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2021 15:40:27.2105
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: CirhdKUApNv03JY6fz9G0QCbTK9r0jWG6J6m0ogsaOnAowJw9svf9nboLnUydiwlSquuGRXXnCx0aVDUS3JoKXpTC6ltY+8ABh0QK9bOqBE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5440
X-OriginatorOrg: citrix.com

On 20/07/2021 15:31, Ian Jackson wrote:
> Jason Andryuk writes ("[PATCH] tests/xs: Check asprintf result"):
>> Compiling xs-test.c on Ubuntu 21.04 fails with:
> Thanks.  However, your patch doesn't apply to staging; the files have
> been reorganised AFAICT.  Also, I think
>
>   93c9edbef51b31056f93a37a778326c90a83158c
>   tests/xenstore: Rework Makefile
>
> fixed this (with slightly different style, and despite not mentioning
> this change in the commit message)

?=C2=A0 Literally half of the commit message pertains to this failure.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 20 15:41:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 15:41:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158849.292218 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5rsL-0002Qz-6u; Tue, 20 Jul 2021 15:41:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158849.292218; Tue, 20 Jul 2021 15:41:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5rsL-0002Qs-2u; Tue, 20 Jul 2021 15:41:41 +0000
Received: by outflank-mailman (input) for mailman id 158849;
 Tue, 20 Jul 2021 15:41:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=su81=MM=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m5rsJ-0002Qg-PF
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 15:41:39 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3e68aab4-7972-412c-a41f-4513ccb1b09c;
 Tue, 20 Jul 2021 15:41:39 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3e68aab4-7972-412c-a41f-4513ccb1b09c
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626795698;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=XRT8r4zIYDP4Cdz86GDAqjwFGkVAuVQ4Jckz7oNbJ+c=;
  b=WI9wFHO8/HZegzSfrsPTsmhQdAi4bQV6ohIXN67sRM0RJFrumbnwlhIO
   9dIhzzFKvD0EWq7eNjCqzB3uRvVOTGzS+lBUzwU40kZ2SLmXGPYLp/0bB
   wHu9Pa8LW1EL+pjr/2VkLbNIYkXhWJOoj6czP6H5N8/wu1sxvmgfT4PM5
   A=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 5TU6b+HNnVI51NCtTXPjrARvpAUD3Fv7dwsxjSLqC7lLhqwUeXpWaZHrwQ+NrBkQZtW6q6b+6E
 NmsjZ3RMVj2M5KL+SsMRsDQdY7H4h0wHQptM8IAjqFe68JWGS4mZ349D6Sksz3PddcAf9EyQQ5
 faBvEyabSx9nu7bG73BLqEjt54QC3JcQHCsPZyFkWwosYjy43YDscvI9J/ylx97ps6gzNOzN1Q
 sHmj3YC+7qK2+inzQDvtH8SSeg4yYJmU06ikpILjlBuZKwh7VcQ/6pXxaga/uoyRHQ829pzkk6
 Xv4LxmFCcTRjfnd16qCP03N8
X-SBRS: 5.1
X-MesageID: 48365403
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:DitpcKh/0z+/2xqd/h7hmZxjWnBQXtgji2hC6mlwRA09TySZ//
 rOoB0+726StN9xYgBFpTnuAsW9qB/nmqKdpLNhW4tKPzOW3VdATrsSjrcKqgeIc0aVm9K1l5
 0QEZSWYOeAdGSS5vyb3ODXKbgd/OU=
X-IronPort-AV: E=Sophos;i="5.84,255,1620705600"; 
   d="scan'208";a="48365403"
Date: Tue, 20 Jul 2021 16:41:23 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Olaf Hering <olaf@aepfle.de>
CC: Andrew Cooper <andrew.cooper3@citrix.com>,
	<xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <YPbuo/JfpPNGjq2p@perard>
References: <20210708065435.24515-1-olaf@aepfle.de>
 <e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
 <20210714093104.52f25e70.olaf@aepfle.de> <YPGXm9F3OHqLk/ml@perard>
 <20210716164131.56a7b539.olaf@aepfle.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210716164131.56a7b539.olaf@aepfle.de>

On Fri, Jul 16, 2021 at 04:41:57PM +0200, Olaf Hering wrote:
> Am Fri, 16 Jul 2021 15:28:43 +0100
> schrieb Anthony PERARD <anthony.perard@citrix.com>:
> 
> > Actually, it's possible to delete the repo.
> > Navigate to the repo you want to delete ( https://gitlab.com/xen-project/people/olafhering )
> > then in the sidebar/menu (hopefully on the left) there is "Setting".
> 
> This entry exists elsewhere, but not in this repo.
> I guess a project admin has to wipe the repo.

BTW, I did that 4 days ago, but an MTA never managed to send the
email and told me only now ...

Anyway Olaf, I've deleted the repo, feel free to try again, or let me
now if you want me to set things up.

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 15:43:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 15:43:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158854.292230 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5rtu-00035q-K0; Tue, 20 Jul 2021 15:43:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158854.292230; Tue, 20 Jul 2021 15:43:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5rtu-00035j-Ev; Tue, 20 Jul 2021 15:43:18 +0000
Received: by outflank-mailman (input) for mailman id 158854;
 Tue, 20 Jul 2021 15:43:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5rtt-00035Z-RS; Tue, 20 Jul 2021 15:43:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5rtt-0004IS-Ki; Tue, 20 Jul 2021 15:43:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5rtt-0006Ge-9P; Tue, 20 Jul 2021 15:43:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5rtt-0008Un-8y; Tue, 20 Jul 2021 15:43:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=hKWY7tPNZ4ZBF8PSbBrhEwGcwpX7Q1LT+Mbu5Xkg/QA=; b=tF7R4FrqkVpyefqPfRzMWecA/Z
	OizahwjixyRSbjcHj3Np2RASUKGsH5Agac3KRnrtlu8Ikx19vy09BEiH7AxCn/YrIFjiaKx/iUYFt
	ZJRGnK7qNbzs4LxexbLM4+suknRtldoQZNPimuwdpdSgEy7bYcNwruEddC4ttYlN39Ig=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163832-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163832: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=96e5ad4c476e70688295b3cfb537847a3351d6fd
X-Osstest-Versions-That:
    xen=0f435e2b58543f5baae96e17a10ae20d3dbc28fa
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 15:43:17 +0000

flight 163832 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163832/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  96e5ad4c476e70688295b3cfb537847a3351d6fd
baseline version:
 xen                  0f435e2b58543f5baae96e17a10ae20d3dbc28fa

Last test of basis   163458  2021-07-08 23:09:08 Z   11 days
Failing since        163478  2021-07-09 15:23:45 Z   11 days   18 attempts
Testing same since   163832  2021-07-20 05:29:54 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andew.cooper3@citrix.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Christopher Clark <christopher.clark@starlab.io>
  Costin Lupu <costin.lupu@cs.pub.ro>
  Daniel P. Smith <dpsmith@apertussolutions.com>
  Dario Faggioli <dfaggioli@suse.com>
  Ian Jackson <iwj@xenproject.org>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Olaf Hering <olaf@aepfle.de>
  Richard Kojedzinszky <richard@kojedz.in>
  Roger Pau Monné <roger.pau@citrix.com>
  Tamas K Lengyel <tamas@tklengyel.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   0f435e2b58..96e5ad4c47  96e5ad4c476e70688295b3cfb537847a3351d6fd -> master


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 15:59:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 15:59:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158909.292386 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5s9w-0007VS-TY; Tue, 20 Jul 2021 15:59:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158909.292386; Tue, 20 Jul 2021 15:59:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5s9w-0007VL-Qa; Tue, 20 Jul 2021 15:59:52 +0000
Received: by outflank-mailman (input) for mailman id 158909;
 Tue, 20 Jul 2021 15:59:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m5s9v-0007VF-HI
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 15:59:51 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m5s9v-0004e2-Es
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 15:59:51 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m5s9v-0002Lv-EG
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 15:59:51 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m5s9q-00076G-GN; Tue, 20 Jul 2021 16:59:46 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=m6lXHNp84L4qxVdcfu8S6UdlOLXsxk8kwJskYOfOCpI=; b=2bpv9z9PsSjdaFoqb24MW2BJ4Z
	QDxfuQLARhxHuhWCgi4rmj/DKvpeCEklpDFQ46dJTS3on2Rrehy7Q3eWg2y5PDVxCQyC+2wpyKcvi
	ynW0j5iNeN6wHoO0spUHWdLAiixW+z8ryE/4L2G10D4WA0g6eZHDiv5r92kv6rT4CFGE=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <24822.62194.343959.454998@mariner.uk.xensource.com>
Date: Tue, 20 Jul 2021 16:59:46 +0100
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Jason Andryuk <jandryuk@gmail.com>,
    <xen-devel@lists.xenproject.org>,
    <jgross@suse.com>,
    Wei Liu <wl@xen.org>,
    Jan Beulich <jbeulich@suse.com>
Subject: Re: [PATCH] tests/xs: Check asprintf result
In-Reply-To: <048868ab-3291-70d9-791d-325fc79caccd@citrix.com>
References: <20210718135633.28675-1-jandryuk@gmail.com>
	<24822.56879.260780.652184@mariner.uk.xensource.com>
	<048868ab-3291-70d9-791d-325fc79caccd@citrix.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Andrew Cooper writes ("Re: [PATCH] tests/xs: Check asprintf result"):
> On 20/07/2021 15:31, Ian Jackson wrote:
> > fixed this (with slightly different style, and despite not mentioning
> > this change in the commit message)
> 
> ? Literally half of the commit message pertains to this failure.

Sorry, I meant the title, which talks only about Makefile stuff.

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 17:52:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 17:52:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158927.292413 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5tuJ-0003ir-4i; Tue, 20 Jul 2021 17:51:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158927.292413; Tue, 20 Jul 2021 17:51:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5tuJ-0003ik-1m; Tue, 20 Jul 2021 17:51:51 +0000
Received: by outflank-mailman (input) for mailman id 158927;
 Tue, 20 Jul 2021 17:51:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5tuI-0003ia-7g; Tue, 20 Jul 2021 17:51:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5tuI-00071d-0j; Tue, 20 Jul 2021 17:51:50 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5tuH-00040u-MN; Tue, 20 Jul 2021 17:51:49 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5tuH-0004en-Lw; Tue, 20 Jul 2021 17:51:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=t2TwdHeimlQ+4RwM73dF9vV3xuY+pW0fOoGU//z7grg=; b=WHDOQzd0yHKvS0DyRZAqs4Ik5b
	qWZ4qGEn7zq+xwcClZ+RRA8c8y0jIvALkQ0yIwzbMyQCiY4vhwOw9B0VG4TZ8lgpcLF6eF0HQmWsO
	f9wFhT/MscfZg0pQ9sJlguZoxJ516j6bDOgRTfM7Bsj6qzCDVz3/4F5844qxyqloxpeE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163834-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163834: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=7457b407edd6e8555e4b46488aab2f13959fccf8
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 17:51:49 +0000

flight 163834 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163834/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                7457b407edd6e8555e4b46488aab2f13959fccf8
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   14 days
Failing since        163327  2021-07-06 12:39:04 Z   14 days   24 attempts
Testing same since   163811  2021-07-19 15:38:23 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 10730 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 17:56:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 17:56:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158935.292428 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5tyy-0004Wc-So; Tue, 20 Jul 2021 17:56:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158935.292428; Tue, 20 Jul 2021 17:56:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5tyy-0004WV-Pm; Tue, 20 Jul 2021 17:56:40 +0000
Received: by outflank-mailman (input) for mailman id 158935;
 Tue, 20 Jul 2021 17:56:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=IpfO=MM=gmail.com=scottwd@srs-us1.protection.inumbo.net>)
 id 1m5tyx-0004WP-Uv
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 17:56:40 +0000
Received: from mail-qt1-x82c.google.com (unknown [2607:f8b0:4864:20::82c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a2ee84e7-2eb2-4d00-b63e-c21ab1d2dd4e;
 Tue, 20 Jul 2021 17:56:38 +0000 (UTC)
Received: by mail-qt1-x82c.google.com with SMTP id w26so134933qto.9
 for <xen-devel@lists.xenproject.org>; Tue, 20 Jul 2021 10:56:38 -0700 (PDT)
Received: from lagunitas.localdomain
 (96-95-26-25-static.hfc.comcastbusiness.net. [96.95.26.25])
 by smtp.gmail.com with ESMTPSA id 6sm9902073qkv.115.2021.07.20.10.56.37
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 20 Jul 2021 10:56:37 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a2ee84e7-2eb2-4d00-b63e-c21ab1d2dd4e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=tjBCl0fIf7THtbsUHhCs+2J6Sd74Inird2KIJc+MoDo=;
        b=k9OIfm71PW208nZEBSrdF+NVOM7XCT7MaAbUW+Q+k5TFFXhoi9L310Tq2IgplTms7P
         u6iDHaUoZxf0w7Qy9z7vHTGbqpclsb3EKEEYafIj01flHx90Y77QOxBy8jOA3eEAaeJX
         9zWaid1IGmUqYBL2Do8I+5B1JlY0LdkRIW+wdNYK2n3hv+7U53dSjU5qDQkHlvzxFI1P
         RR6pr27ZGHrtURzdTPdUbOV2V7K9lBP8WEgVVh10gc9B1GPO6yjskNTdIiz4T76tcHBx
         klKqW8hnuZtTfc3D6qISEbD7emPvI0acYF681UntJmFFIXGv5wqXdH3Gvc7E4CULViQO
         G2qw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=tjBCl0fIf7THtbsUHhCs+2J6Sd74Inird2KIJc+MoDo=;
        b=kBnwwpCMJbAYIV2uA9FEKsol7L4teDoMBc4dbifGPDbavSk4nNzzDiSP9tA2UvcL58
         XcQWpuGNnrcuv5XQNVZzVKtG5uJyYeKFvyR9asctMCKP8hTmCxx7gxr5ejy1e/iCdtvS
         Q7rIIjRWxgQQE+PjqUsj7StFZlc/9CMThvztddB3NHADIwuwsVshD+8jjOGX+FI+Pjkn
         l5xUF0k1OhPdFQiIpnnCaXFUUrQy7wNfNSPCew1WqXSOqv/Q3G5cExx2w81+xH4t7Y2u
         Kn5leqbeulTSAJSMjPGs31EpOoYjczAp2wwUmhr1AW4aO1gTWgeMfLnyGMFPpyyRURNr
         Ln1Q==
X-Gm-Message-State: AOAM533NWMZ7DEoDkDPQd0prwYRZNg74SJKSoS95fQsiBkloPBThzhdX
	JF826SRqB7yidUSw0IbZw9+k4NJhRN3OeIeJ
X-Google-Smtp-Source: ABdhPJyTbp5aRPOsiQY0HrJXeJ4cA06vf9siBIQAlBJAGj8d+rZ4WnK3nsAgLuwOCdwpF/zAmO0SQQ==
X-Received: by 2002:aed:30cd:: with SMTP id 71mr27247384qtf.31.1626803798282;
        Tue, 20 Jul 2021 10:56:38 -0700 (PDT)
From: Scott Davis <scottwd@gmail.com>
X-Google-Original-From: Scott Davis <scott.davis@starlab.io>
To: xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
Date: Tue, 20 Jul 2021 13:56:34 -0400
Message-Id: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This adds an option to the xl domain configuration file syntax for specifying
a kernel command line for device-model stubdomains. It is intended for use with
Linux-based stubdomains.

Signed-off-by: Scott Davis <scott.davis@starlab.io>
---
 docs/man/xl.cfg.5.pod.in             | 4 ++++
 tools/golang/xenlight/helpers.gen.go | 3 +++
 tools/golang/xenlight/types.gen.go   | 1 +
 tools/libs/light/libxl_dm.c          | 1 +
 tools/libs/light/libxl_types.idl     | 1 +
 tools/xl/xl_parse.c                  | 2 ++
 6 files changed, 12 insertions(+)

diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
index 56370a37db..6c777cad5c 100644
--- a/docs/man/xl.cfg.5.pod.in
+++ b/docs/man/xl.cfg.5.pod.in
@@ -2742,6 +2742,10 @@ In case of B<qemu-xen-traditional> it is expected to be MiniOS-based stubdomain
 image, in case of B<qemu-xen> it is expected to be Linux-based stubdomain
 kernel.
 
+=item B<stubdomain_cmdline="STRING">
+
+Append B<STRING> to the device-model stubdomain kernel command line.
+
 =item B<stubdomain_ramdisk="PATH">
 
 Override the path to the ramdisk image used as device-model stubdomain.
diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
index db82537b42..bfc1e7f312 100644
--- a/tools/golang/xenlight/helpers.gen.go
+++ b/tools/golang/xenlight/helpers.gen.go
@@ -1018,6 +1018,7 @@ return fmt.Errorf("converting field DeviceModelStubdomain: %v", err)
 }
 x.StubdomainMemkb = uint64(xc.stubdomain_memkb)
 x.StubdomainKernel = C.GoString(xc.stubdomain_kernel)
+x.StubdomainCmdline = C.GoString(xc.stubdomain_cmdline)
 x.StubdomainRamdisk = C.GoString(xc.stubdomain_ramdisk)
 x.DeviceModel = C.GoString(xc.device_model)
 x.DeviceModelSsidref = uint32(xc.device_model_ssidref)
@@ -1344,6 +1345,8 @@ return fmt.Errorf("converting field DeviceModelStubdomain: %v", err)
 xc.stubdomain_memkb = C.uint64_t(x.StubdomainMemkb)
 if x.StubdomainKernel != "" {
 xc.stubdomain_kernel = C.CString(x.StubdomainKernel)}
+if x.StubdomainCmdline != "" {
+xc.stubdomain_cmdline = C.CString(x.StubdomainCmdline)}
 if x.StubdomainRamdisk != "" {
 xc.stubdomain_ramdisk = C.CString(x.StubdomainRamdisk)}
 if x.DeviceModel != "" {
diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
index a214dd9df6..09a3bb67e2 100644
--- a/tools/golang/xenlight/types.gen.go
+++ b/tools/golang/xenlight/types.gen.go
@@ -483,6 +483,7 @@ DeviceModelVersion DeviceModelVersion
 DeviceModelStubdomain Defbool
 StubdomainMemkb uint64
 StubdomainKernel string
+StubdomainCmdline string
 StubdomainRamdisk string
 DeviceModel string
 DeviceModelSsidref uint32
diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index dbd3c7f278..2d54596834 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -2373,6 +2373,7 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
     }
 
     stubdom_state->pv_kernel.path = guest_config->b_info.stubdomain_kernel;
+    stubdom_state->pv_cmdline = guest_config->b_info.stubdomain_cmdline;
     stubdom_state->pv_ramdisk.path = guest_config->b_info.stubdomain_ramdisk;
 
     /* fixme: this function can leak the stubdom if it fails */
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index f45adddab0..e782e15cf2 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -523,6 +523,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
     ("device_model_stubdomain", libxl_defbool),
     ("stubdomain_memkb",   MemKB),
     ("stubdomain_kernel",  string),
+    ("stubdomain_cmdline", string),
     ("stubdomain_ramdisk", string),
     # if you set device_model you must set device_model_version too
     ("device_model",     string),
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 9fb0791429..17dddb4cd5 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -2533,6 +2533,8 @@ skip_usbdev:
 
     xlu_cfg_replace_string (config, "stubdomain_kernel",
                             &b_info->stubdomain_kernel, 0);
+    xlu_cfg_replace_string (config, "stubdomain_cmdline",
+                            &b_info->stubdomain_cmdline, 0);
     xlu_cfg_replace_string (config, "stubdomain_ramdisk",
                             &b_info->stubdomain_ramdisk, 0);
     if (!xlu_cfg_get_long (config, "stubdomain_memory", &l, 0))
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Tue Jul 20 18:40:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 18:40:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158945.292446 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5uf9-0001iE-AE; Tue, 20 Jul 2021 18:40:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158945.292446; Tue, 20 Jul 2021 18:40:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5uf9-0001i7-77; Tue, 20 Jul 2021 18:40:15 +0000
Received: by outflank-mailman (input) for mailman id 158945;
 Tue, 20 Jul 2021 18:40:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5uf8-0001hx-4A; Tue, 20 Jul 2021 18:40:14 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5uf7-0007wt-Ss; Tue, 20 Jul 2021 18:40:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5uf7-0005aC-HF; Tue, 20 Jul 2021 18:40:13 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5uf7-0008GJ-Gl; Tue, 20 Jul 2021 18:40:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=lXaA9969IzBQJm1fq8mjjVNmkjCKXrn8KsdpL703di4=; b=Jng0bIHRlteiSY6BpvQq4HFwaE
	rizHDAs7ImI+bnOmvlxBXn8G/LMZUgiadl2Uls7lxpygdve9mmlyfo4nrYMSaQirQN7xhcBg8mGZj
	nd11dJDsSXY7MXWx9WvP70FcNUyePRRMx33on0+G2aTwmKUF6mROTOPcOhQEyIJ/VVrs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163835-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163835: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=885efcd3f990fe7bf58713f9a76d633f102a8f03
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 18:40:13 +0000

flight 163835 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163835/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 885efcd3f990fe7bf58713f9a76d633f102a8f03
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   46 days
Failing since        162368  2021-06-04 15:42:59 Z   46 days  124 attempts
Testing same since   163835  2021-07-20 06:58:16 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3898 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 19:49:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 19:49:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158954.292468 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5vjT-0000CC-DY; Tue, 20 Jul 2021 19:48:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158954.292468; Tue, 20 Jul 2021 19:48:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5vjT-0000C5-AI; Tue, 20 Jul 2021 19:48:47 +0000
Received: by outflank-mailman (input) for mailman id 158954;
 Tue, 20 Jul 2021 19:48:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Sr4l=MM=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m5vjS-0000By-2r
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 19:48:46 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7f569d6e-fea7-4dcd-ae07-d999b6523dd4;
 Tue, 20 Jul 2021 19:48:45 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 408E56100C;
 Tue, 20 Jul 2021 19:48:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7f569d6e-fea7-4dcd-ae07-d999b6523dd4
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626810524;
	bh=nRnRDOzj2U5UbVreQhBy7At5zCIxFheC04IbuYdv4cc=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=b44FeWRONm0+4GMcUp6XPLZ6f6s+FnGTftedBBVm4XH1lMXU3Mhzw6Ae1kgHo7V+P
	 viozUewhIgr4aTC7tBYkeEIe89u7V57ctn76WN5fhJIlADMXRB/NBXtXfenQNtnWU+
	 a1hhf9hgZiC+yOzhNtpDDPNOFI8AjQeR9n8P41WoGiuIlk5xLazGHXjUWaz4iokIUX
	 N1NXe8HP/D/M8aQgh7ftn5WJPHYRVz8t4gbRrS9GhEFYmrZk0hodtOk+g0B66qY6yK
	 LOPlcfYoeegGx51NEV9Omdt0XrAUoxzWrrjPYYXu+TOzAfxujNc1W4I3cDpTaw6VFb
	 5JVjpuIizEV5g==
Date: Tue, 20 Jul 2021 12:48:43 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Stefano Stabellini <sstabellini@kernel.org>
cc: cardoe@cardoe.com, wl@xen.org, andrew.cooper3@citrix.com, 
    xen-devel@lists.xenproject.org
Subject: Re: [PATCH RESEND 0/2] gitlab-ci: add a qemu-based arm32 test
In-Reply-To: <alpine.DEB.2.21.2107131747070.23286@sstabellini-ThinkPad-T480s>
Message-ID: <alpine.DEB.2.21.2107201248360.3916@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107131747070.23286@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Re-ping?


On Tue, 13 Jul 2021, Stefano Stabellini wrote:
> Hi all,
> 
> This short series adds a minimal ARM32 test based on QEMU. It just runs
> Xen and Dom0 up to a Busybox prompt.
> 
> Cheers,
> 
> Stefano
> 
> 
> Stefano Stabellini (2):
>       Add qemu-system-arm to the existing tests-artifacts container
>       Add an ARM32 qemu-based smoke test
> 
>  automation/gitlab-ci/build.yaml                    | 14 ++++-
>  automation/gitlab-ci/test.yaml                     | 27 +++++++-
>  automation/scripts/qemu-smoke-arm32.sh             | 72 ++++++++++++++++++++++
>  ...arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} |  5 +-
>  4 files changed, 112 insertions(+), 6 deletions(-)
>  create mode 100755 automation/scripts/qemu-smoke-arm32.sh
>  rename automation/tests-artifacts/qemu-system-aarch64/{5.2.0-arm64v8.dockerfile => 6.0.0-arm64v8.dockerfile} (95%)
> 


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 20:00:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 20:00:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158960.292480 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5vuV-0002bs-FF; Tue, 20 Jul 2021 20:00:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158960.292480; Tue, 20 Jul 2021 20:00:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5vuV-0002bl-BY; Tue, 20 Jul 2021 20:00:11 +0000
Received: by outflank-mailman (input) for mailman id 158960;
 Tue, 20 Jul 2021 20:00:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Sr4l=MM=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m5vuU-0002bf-Cx
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 20:00:10 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 377ee854-89d5-4d3c-96b7-35c34055799f;
 Tue, 20 Jul 2021 20:00:09 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id B7D566100C;
 Tue, 20 Jul 2021 20:00:08 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 377ee854-89d5-4d3c-96b7-35c34055799f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626811209;
	bh=d00NCUUryhuhmoyZU2VJmu7RuhImHk00M6zHo2ogGYk=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=is7FKOE97MNxjpwKurr7ssRBh9MJcJFbtDsXz2rDIEjzrhP++qmIcoLY9m/jXArNA
	 4qMygikqxYW6/2yTj1YAoD+SXAkgcf548EyjIQ/00r7dz2leCr+TszBTmkDP5HC/WX
	 ND7IHsDQfN/MUca8oyEGoWtm/zLP4cjkGG1KDcEIfxy12lVaqxNo4oNTDVaAuCwOyw
	 TamycrQBSWAkRK4HUhe2e0zTHbdBZGngUigV5QFht7v8qqd51vOOjLn6omtu6LY+RR
	 cR1mjasS83k/0uVpQbRQDd6lAjm8+2Fgecq/FCyi/rKgmO7PxHxa7klQ/dGA7p+U+v
	 Fd9xGrPrBNprw==
Date: Tue, 20 Jul 2021 13:00:08 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Michal Orzel <michal.orzel@arm.com>
cc: xen-devel@lists.xenproject.org, 
    Stefano Stabellini <sstabellini@kernel.org>, Julien Grall <julien@xen.org>, 
    Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
Subject: Re: [PATCH v3] xen/arm64: Remove READ/WRITE_SYSREG32 helper macros
In-Reply-To: <20210712085329.16613-1-michal.orzel@arm.com>
Message-ID: <alpine.DEB.2.21.2107201259300.3916@sstabellini-ThinkPad-T480s>
References: <20210712085329.16613-1-michal.orzel@arm.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Mon, 12 Jul 2021, Michal Orzel wrote:
> AArch64 system registers are 64bit whereas AArch32 ones
> are 32bit or 64bit. MSR/MRS are expecting 64bit values thus
> we should get rid of helpers READ/WRITE_SYSREG32
> in favour of using READ/WRITE_SYSREG.
> 
> The last place in code making use of READ/WRITE_SYSREG32
> on arm64 is in TVM_REG macro defining functions vreg_emulate_<register>.
> Implement a macro WRITE_SYSREG_SZ which expands as follows:
> -on arm64: WRITE_SYSREG
> -on arm32: WRITE_SYSREG{32/64}
> 
> As there are no other places in the code using these helpers
> on arm64 - remove them.
> 
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

The patch looks OK to me and you addressed Julien's concerns from v2. So
I am going to commit it.

Thanks!

Cheers,

Stefano

> ---
> Changes since v2:
> -add uint##sz##_t casting
> Changes since v1:
> -implement WRITE_SYSREG_SZ instead of duplicating the TVM_REG
> ---
>  xen/arch/arm/vcpreg.c               | 12 +++++++++++-
>  xen/include/asm-arm/arm64/sysregs.h |  4 ----
>  2 files changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
> index f0cdcc8a54..e3ce56d875 100644
> --- a/xen/arch/arm/vcpreg.c
> +++ b/xen/arch/arm/vcpreg.c
> @@ -47,6 +47,16 @@
>   *
>   */
>  
> +#ifdef CONFIG_ARM_64
> +#define WRITE_SYSREG_SZ(sz, val, sysreg) WRITE_SYSREG((uint##sz##_t)val, sysreg)
> +#else
> +/*
> + * WRITE_SYSREG{32/64} on arm32 is defined as variadic macro which imposes
> + * on the below macro to be defined like that as well.
> + */
> +#define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
> +#endif
> +
>  /* The name is passed from the upper macro to workaround macro expansion. */
>  #define TVM_REG(sz, func, reg...)                                           \
>  static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
> @@ -55,7 +65,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>      bool cache_enabled = vcpu_has_cache_enabled(v);                         \
>                                                                              \
>      GUEST_BUG_ON(read);                                                     \
> -    WRITE_SYSREG##sz(*r, reg);                                              \
> +    WRITE_SYSREG_SZ(sz, *r, reg);                                           \
>                                                                              \
>      p2m_toggle_cache(v, cache_enabled);                                     \
>                                                                              \
> diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/include/asm-arm/arm64/sysregs.h
> index 077fd95fb7..795901e1ba 100644
> --- a/xen/include/asm-arm/arm64/sysregs.h
> +++ b/xen/include/asm-arm/arm64/sysregs.h
> @@ -87,10 +87,6 @@
>  
>  /* Access to system registers */
>  
> -#define READ_SYSREG32(name) ((uint32_t)READ_SYSREG64(name))
> -
> -#define WRITE_SYSREG32(v, name) WRITE_SYSREG64((uint64_t)v, name)
> -
>  #define WRITE_SYSREG64(v, name) do {                    \
>      uint64_t _r = v;                                    \
>      asm volatile("msr "__stringify(name)", %0" : : "r" (_r));       \
> -- 
> 2.29.0
> 


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 21:39:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 21:39:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159020.292544 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5xSP-0006JU-IM; Tue, 20 Jul 2021 21:39:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159020.292544; Tue, 20 Jul 2021 21:39:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5xSP-0006JN-Er; Tue, 20 Jul 2021 21:39:17 +0000
Received: by outflank-mailman (input) for mailman id 159020;
 Tue, 20 Jul 2021 21:39:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5xSO-0006JD-Bj; Tue, 20 Jul 2021 21:39:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5xSO-0002cP-4J; Tue, 20 Jul 2021 21:39:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m5xSN-0004FW-Ps; Tue, 20 Jul 2021 21:39:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m5xSN-00040F-PL; Tue, 20 Jul 2021 21:39:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rFVzFid4xtdCf55wI8ADOmQ9baO+AhAJVtnIrkRQi8k=; b=SnDu93LCCeRh+1x9wweYtLzH6J
	x/qbhpB9Ol2imqG31Xw2k6FtDAbq3soi9pVG0dBTH4GlLlYsCdogjFzE5CR6gqQyu9uz1AIhKqDX7
	2cBrdm1BWY/1qPOBArrQ73tM5qYhCBcy5BWXO3pzlenrwhZc2yy9AmEnywB9OTygHaXA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163841-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163841: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:guest-start:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 20 Jul 2021 21:39:15 +0000

flight 163841 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163841/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332

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

version targeted for testing:
 linux                8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  354 days
Failing since        152366  2020-08-01 20:49:34 Z  353 days  602 attempts
Testing same since   163841  2021-07-20 12:41:35 Z    0 days    1 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978216 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 20 22:32:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 20 Jul 2021 22:32:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159043.292583 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5yI9-0005Os-46; Tue, 20 Jul 2021 22:32:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159043.292583; Tue, 20 Jul 2021 22:32:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m5yI9-0005Ol-0r; Tue, 20 Jul 2021 22:32:45 +0000
Received: by outflank-mailman (input) for mailman id 159043;
 Tue, 20 Jul 2021 22:32:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=V9Cx=MM=strugglers.net=andy@srs-us1.protection.inumbo.net>)
 id 1m5yI6-0005Of-Rd
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 22:32:43 +0000
Received: from mail.bitfolk.com (unknown [2001:ba8:1f1:f019::25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2b763996-cb2f-4a58-9ccf-57d080d63f38;
 Tue, 20 Jul 2021 22:32:41 +0000 (UTC)
Received: from andy by mail.bitfolk.com with local (Exim 4.89)
 (envelope-from <andy@strugglers.net>) id 1m5yI4-000612-3a
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 22:32:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2b763996-cb2f-4a58-9ccf-57d080d63f38
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=bitfolk.com
	; s=alpha; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID:
	Subject:To:From:Date:Sender:Reply-To:Cc:Content-ID:Content-Description:
	Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
	In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
	List-Post:List-Owner:List-Archive;
	bh=xZjCvomNRV+S69mtg3aozbfw59iofkFy/0X8SHEF85A=; b=rT6bmVpH774UWzoJIswDLdNwNN
	X2/ls2Dm0muMEXNkmiYVpSgMUpgLiptz+7luiu0USJgpOCHA9y3DPpUGU/L6fwm9DLotYBhsnQII3
	qis3UQVnJOPApvlEhS3DH5SCJInD6D8FcbVPt3F6TbimV4lzsSDU3p0zxwo2qxDV2M8nUC7UTQXON
	3FQ4sJtgbcQK4F/rJnoljG18I2d7C2D+n0ca9zH/1/7dJf2YWcGNHp/PZPR4R7nv5QwnMAEzCLdrZ
	CIT5/OYp2DbFIsNLKASBKX59yzupNYhYcwvdPefSt4iqgjehvklVq090m+ifXuvLqVSdNG2kc5sga
	9oeQBZ1g==;
Date: Tue, 20 Jul 2021 22:32:39 +0000
From: Andy Smith <andy@strugglers.net>
To: xen-devel@lists.xenproject.org
Subject: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072 nents:13
Message-ID: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
OpenPGP: id=BF15490B; url=http://strugglers.net/~andy/pubkey.asc
X-URL: http://strugglers.net/wiki/User:Andy
User-Agent: NeoMutt/20170113 (1.7.2)
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: andy@strugglers.net
X-SA-Exim-Scanned: No (on mail.bitfolk.com); SAEximRunCond expanded to false

Hi,

I have a Debian 10 (buster/stable) dom0 running hypervisor 4.14.2.
For almost 2 years it's been using the packaged Debian stable kernel
which is 4.19.x.

Last night I upgraded the kernel to the buster-backports package
which is based on 5.10.40 and about 4 hours later got this:

Jul 20 02:17:54 lamb kernel: [21061.388607] sg[0] phys_addr:0x00000015eb803=
000 offset:0 length:4096 dma_address:0x000000209e7b7000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.389775] sg[1] phys_addr:0x00000015eb7bc=
000 offset:0 length:4096 dma_address:0x000000209e7b8000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.390874] sg[2] phys_addr:0x00000015eb809=
000 offset:0 length:4096 dma_address:0x000000209e7b9000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.391974] sg[3] phys_addr:0x00000015eb766=
000 offset:0 length:4096 dma_address:0x000000209e7ba000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.393042] sg[4] phys_addr:0x00000015eb7a3=
000 offset:0 length:4096 dma_address:0x000000209e7bb000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.394086] sg[5] phys_addr:0x00000015eb7c6=
000 offset:0 length:4096 dma_address:0x000000209e7bc000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.395078] sg[6] phys_addr:0x00000015eb7c2=
000 offset:0 length:4096 dma_address:0x000000209e7bd000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.396042] sg[7] phys_addr:0x00000015eb7a9=
000 offset:0 length:4096 dma_address:0x000000209e7be000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.397004] sg[8] phys_addr:0x00000015eb775=
000 offset:0 length:4096 dma_address:0x000000209e7bf000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.397971] sg[9] phys_addr:0x00000015eb7c7=
000 offset:0 length:4096 dma_address:0x00000020ff520000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.398889] sg[10] phys_addr:0x00000015eb7c=
b000 offset:0 length:4096 dma_address:0x00000020ff521000 dma_length:4096
Jul 20 02:17:54 lamb kernel: [21061.399814] sg[11] phys_addr:0x00000015eb7e=
3000 offset:0 length:61952 dma_address:0x00000020ff522000 dma_length:61952
Jul 20 02:17:54 lamb kernel: [21061.400754] sg[12] phys_addr:0x00000015eb7f=
2200 offset:512 length:24064 dma_address:0x00000020ff531200 dma_length:24064
Jul 20 02:17:54 lamb kernel: [21061.401781] ------------[ cut here ]-------=
-----
Jul 20 02:17:54 lamb kernel: [21061.402738] Invalid SGL for payload:131072 =
nents:13
Jul 20 02:17:54 lamb kernel: [21061.403724] WARNING: CPU: 1 PID: 12669 at d=
rivers/nvme/host/pci.c:716 nvme_map_data+0x7e0/0x820 [nvme]
Jul 20 02:17:54 lamb kernel: [21061.404728] Modules linked in: binfmt_misc =
ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpmss nf_log_ipv6 =
nf_log_ipv4 nf_log_common xt_LOG xt_limit nfnetlink_log nfnetlink xt_NFLOG =
xt_multiport xt_tcpudp ip6table_filter ip6_tables iptable_filter bonding bt=
rfs blake2b_generic dm_snapshot dm_bufio intel_rapl_msr intel_rapl_common s=
kx_edac nfit libnvdimm intel_powerclamp crc32_pclmul ghash_clmulni_intel ip=
mi_ssif aesni_intel libaes crypto_simd cryptd glue_helper snd_hda_intel snd=
_intel_dspcfg mei_wdt soundwire_intel soundwire_generic_allocation nvme wda=
t_wdt snd_soc_core ast snd_compress watchdog drm_vram_helper drm_ttm_helper=
 soundwire_cadence pcspkr nvme_core ttm snd_hda_codec drm_kms_helper snd_hd=
a_core i2c_i801 snd_hwdep i2c_smbus cec soundwire_bus snd_pcm drm snd_timer=
 snd soundcore igb ptp pps_core i2c_algo_bit joydev mei_me sg mei intel_lps=
s_pci intel_lpss idma64 acpi_ipmi ipmi_si ipmi_devintf ioatdma dca wmi ipmi=
_msghandler button dm_mod xenfs xen_acpi_processor
Jul 20 02:17:54 lamb kernel: [21061.404831]  xen_privcmd xen_pciback xen_ne=
tback xen_blkback xen_gntalloc xen_gntdev xen_evtchn ip_tables x_tables aut=
ofs4 ext4 crc16 mbcache jbd2 raid456 libcrc32c crc32c_generic async_raid6_r=
ecov async_memcpy async_pq async_xor xor async_tx evdev hid_generic usbhid =
hid raid6_pq raid0 multipath linear raid10 raid1 md_mod sd_mod t10_pi crc_t=
10dif crct10dif_generic crct10dif_pclmul crct10dif_common xhci_pci ahci lib=
ahci crc32c_intel xhci_hcd libata usbcore scsi_mod usb_common
Jul 20 02:17:54 lamb kernel: [21061.417998] CPU: 1 PID: 12669 Comm: 62.xvda=
-0 Not tainted 5.10.0-0.bpo.7-amd64 #1 Debian 5.10.40-1~bpo10+1
Jul 20 02:17:54 lamb kernel: [21061.418459] Hardware name: Supermicro Super=
 Server/X11SRM-VF, BIOS 1.2a 02/18/2019
Jul 20 02:17:54 lamb kernel: [21061.418922] RIP: e030:nvme_map_data+0x7e0/0=
x820 [nvme]
Jul 20 02:17:54 lamb kernel: [21061.419354] Code: d0 7b c0 48 c7 c7 40 d6 7=
b c0 e8 5b 44 c9 c0 8b 93 4c 01 00 00 f6 43 1e 04 75 36 8b 73 28 48 c7 c7 2=
0 9c 7b c0 e8 8b 71 09 c1 <0f> 0b 41 bd 0a 00 00 00 e9 f7 fe ff ff 48 8d bd=
 68 02 00 00 48 89
Jul 20 02:17:54 lamb kernel: [21061.420271] RSP: e02b:ffffc90044797930 EFLA=
GS: 00010286
Jul 20 02:17:54 lamb kernel: [21061.420727] RAX: 0000000000000000 RBX: ffff=
888157db4200 RCX: 0000000000000027
Jul 20 02:17:54 lamb kernel: [21061.421186] RDX: 0000000000000027 RSI: ffff=
888292858a00 RDI: ffff888292858a08
Jul 20 02:17:54 lamb kernel: [21061.421639] RBP: ffff888103243000 R08: 0000=
000000000000 R09: c00000010000118b
Jul 20 02:17:54 lamb kernel: [21061.422090] R10: 0000000000165920 R11: ffff=
c90044797738 R12: ffffffffc07b9bd0
Jul 20 02:17:54 lamb kernel: [21061.422583] R13: 000000000000000d R14: 0000=
000000000000 R15: 000000000000000d
Jul 20 02:17:54 lamb kernel: [21061.423052] FS:  0000000000000000(0000) GS:=
ffff888292840000(0000) knlGS:0000000000000000
Jul 20 02:17:54 lamb kernel: [21061.423518] CS:  e030 DS: 0000 ES: 0000 CR0=
: 0000000080050033
Jul 20 02:17:54 lamb kernel: [21061.423986] CR2: 00007f909a037c30 CR3: 0000=
00010d2dc000 CR4: 0000000000050660
Jul 20 02:17:54 lamb kernel: [21061.424472] Call Trace:
Jul 20 02:17:54 lamb kernel: [21061.424943]  nvme_queue_rq+0x98/0x190 [nvme]
Jul 20 02:17:54 lamb kernel: [21061.425425]  blk_mq_dispatch_rq_list+0x123/=
0x7d0
Jul 20 02:17:54 lamb kernel: [21061.425904]  ? sbitmap_get+0x66/0x140
Jul 20 02:17:54 lamb kernel: [21061.426385]  ? elv_rb_del+0x1f/0x30
Jul 20 02:17:54 lamb kernel: [21061.426909]  ? deadline_remove_request+0x55=
/0xc0
Jul 20 02:17:54 lamb kernel: [21061.427373]  __blk_mq_do_dispatch_sched+0x1=
64/0x2d0
Jul 20 02:17:54 lamb kernel: [21061.427843]  __blk_mq_sched_dispatch_reques=
ts+0x135/0x170
Jul 20 02:17:54 lamb kernel: [21061.428310]  blk_mq_sched_dispatch_requests=
+0x30/0x60
Jul 20 02:17:54 lamb kernel: [21061.428795]  __blk_mq_run_hw_queue+0x51/0xd0
Jul 20 02:17:54 lamb kernel: [21061.429269]  __blk_mq_delay_run_hw_queue+0x=
141/0x160
Jul 20 02:17:54 lamb kernel: [21061.429752]  blk_mq_sched_insert_requests+0=
x6a/0xf0
Jul 20 02:17:54 lamb kernel: [21061.430233]  blk_mq_flush_plug_list+0x119/0=
x1b0
Jul 20 02:17:54 lamb kernel: [21061.430756]  blk_flush_plug_list+0xd7/0x100
Jul 20 02:17:54 lamb kernel: [21061.431241]  blk_finish_plug+0x21/0x30
Jul 20 02:17:54 lamb kernel: [21061.431734]  dispatch_rw_block_io+0x6a5/0x9=
a0 [xen_blkback]
Jul 20 02:17:54 lamb kernel: [21061.432220]  __do_block_io_op+0x31d/0x620 [=
xen_blkback]
Jul 20 02:17:54 lamb kernel: [21061.432714]  ? _raw_spin_unlock_irqrestore+=
0x14/0x20
Jul 20 02:17:54 lamb kernel: [21061.433193]  ? try_to_del_timer_sync+0x4d/0=
x80
Jul 20 02:17:54 lamb kernel: [21061.433680]  xen_blkif_schedule+0xda/0x670 =
[xen_blkback]
Jul 20 02:17:54 lamb kernel: [21061.434160]  ? __schedule+0x2c6/0x770
Jul 20 02:17:54 lamb kernel: [21061.434679]  ? finish_wait+0x80/0x80
Jul 20 02:17:54 lamb kernel: [21061.435129]  ? xen_blkif_be_int+0x30/0x30 [=
xen_blkback]
Jul 20 02:17:54 lamb kernel: [21061.435571]  kthread+0x116/0x130
Jul 20 02:17:54 lamb kernel: [21061.436002]  ? kthread_park+0x80/0x80
Jul 20 02:17:54 lamb kernel: [21061.436422]  ret_from_fork+0x22/0x30
Jul 20 02:17:54 lamb kernel: [21061.436846] ---[ end trace 1d90be7aea2d9148=
 ]---
Jul 20 02:17:54 lamb kernel: [21061.437250] blk_update_request: I/O error, =
dev nvme0n1, sector 912000815 op 0x1:(WRITE) flags 0x800 phys_seg 13 prio c=
lass 0
Jul 20 02:17:54 lamb kernel: [21061.446344] md/raid1:md4: Disk failure on n=
vme0n1, disabling device.
Jul 20 02:17:54 lamb kernel: [21061.446344] md/raid1:md4: Operation continu=
ing on 1 devices.

I was able to fail and then re-add nvme0n1 to the MD array, which
resynced successfullyi, so no reboot needed. But then later:

Jul 20 20:43:23 lamb kernel: [87388.876154] blk_update_request: I/O error, =
dev nvme0n1, sector 916064223 op 0x1:(WRITE) flags 0x800 phys_seg 28 prio c=
lass 0
Jul 20 20:43:23 lamb kernel: [87388.877750] md/raid1:md4: Disk failure on n=
vme0n1, disabling device.
Jul 20 20:43:23 lamb kernel: [87388.877750] md/raid1:md4: Operation continu=
ing on 1 devices.

So had to do a re-add again. No call trace this time because this
code path seems to be a WARN(DO_ONCE()).

I do not suspect NVMe device failure because of how this happened so
quickly after changing the kernel. I am wondering if there is some
bug that was fixed and backported by Debian for 4.19.x but not for
the buster-backports kernel?

I've reported this to linux-nvme as well, but I did find this thread
=66rom 2017 with a similar warning:

    http://lists.infradead.org/pipermail/linux-nvme/2017-July/012055.html

In it Christoph Hellwig says, "Given that this is a Xen system I
wonder if swiotlb-xen is involved here, which does some odd chunking
of DMA translations?" so I thought I'd ask here as well in case
anyone is aware of something like this. Unfortunately that thread
ends without confirmed resolution.

If you are aware of any such issue+fix I will check if it got into
Debian's 4.19.x.

I haven't yet just tested latest mainline kernel because this is a
production machine and I'll need to schedule downtime, which I'd
rather not do unless there is a known issue and fix.

If you need any additional info or have any other ideas please do
let me know.

Thanks!
Andy


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 01:14:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 01:14:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159073.292625 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m60o2-0005fG-Bs; Wed, 21 Jul 2021 01:13:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159073.292625; Wed, 21 Jul 2021 01:13:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m60o2-0005f9-7t; Wed, 21 Jul 2021 01:13:50 +0000
Received: by outflank-mailman (input) for mailman id 159073;
 Wed, 21 Jul 2021 01:13:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m60o0-0005ez-VV; Wed, 21 Jul 2021 01:13:48 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m60o0-0004X1-LM; Wed, 21 Jul 2021 01:13:48 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m60o0-0006Sn-EI; Wed, 21 Jul 2021 01:13:48 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m60o0-0004oD-Dn; Wed, 21 Jul 2021 01:13:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=imWIvkSXk9hlkW1tTtwwiKtqE4vFDQbS76payvpS1TQ=; b=MplNL1Xultrn/U/xE94pAXrcJJ
	q5OMwTIdS9m9pGWu00yHNTJ49UwYG7larPfC2tm8syw+dOGXhAA/H1U1AYFN6597FfVUEOOlp/NJd
	roALtWJ9yFZX4aug/ApXtBJTVC7ntJ66fLhbEWGkY2d6kBzur9zEQuY21QjPkMfz3imA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163853-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163853: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=96e5ad4c476e70688295b3cfb537847a3351d6fd
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 01:13:48 +0000

flight 163853 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163853/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  96e5ad4c476e70688295b3cfb537847a3351d6fd

Last test of basis   163813  2021-07-19 16:05:16 Z    1 days
Testing same since   163853  2021-07-20 21:01:45 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Michal Orzel <michal.orzel@arm.com>
  Stefano Stabellini <sstabellini@kernel.org>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   96e5ad4c47..57e761b60d  57e761b60dc92e210caf3429b8956d908ba04ae9 -> smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 02:18:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 02:18:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159083.292646 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m61oK-0004Uc-Bt; Wed, 21 Jul 2021 02:18:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159083.292646; Wed, 21 Jul 2021 02:18:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m61oK-0004UU-3x; Wed, 21 Jul 2021 02:18:12 +0000
Received: by outflank-mailman (input) for mailman id 159083;
 Wed, 21 Jul 2021 02:18:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m61oI-0004TZ-JX; Wed, 21 Jul 2021 02:18:10 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m61oI-00061b-Bd; Wed, 21 Jul 2021 02:18:10 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m61oH-00008F-Qz; Wed, 21 Jul 2021 02:18:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m61oH-0005Hs-QQ; Wed, 21 Jul 2021 02:18:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Z5Z+AUu8xEKadlrTDZuPXfxO4bGVP8GBpQ6I/ancnjo=; b=Ka+tVPGLZkPpgRlSsnEwJzduyp
	NrWac2B/d8swRqB50FTECww+QLu87TVr4BiEo1knSqlk8p+gfoBFuq1ecVvjiwzY+z9533EC9/XZz
	QTFUwxMRX0CQcPwHerVh1SOqNiTRY/UaQ0p5XXmWmXRdZScw1k96HC3Gsu9kh25qYsbc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163844-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163844: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=9afc0c209685bc239e45b6ca1ea07186b78c7437
X-Osstest-Versions-That:
    linux=795e84798fa7f6c753ded1a95037b4cf08db85d4
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 02:18:09 +0000

flight 163844 linux-5.4 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163844/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163800

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163800
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163800
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163800
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163800
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163800
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163800
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163800
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163800
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163800
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163800
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163800
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   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-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                9afc0c209685bc239e45b6ca1ea07186b78c7437
baseline version:
 linux                795e84798fa7f6c753ded1a95037b4cf08db85d4

Last test of basis   163800  2021-07-19 07:11:17 Z    1 days
Testing same since   163844  2021-07-20 14:40:23 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alexander Shishkin <alexander.shishkin@linux.intel.com>
  Alexandre Belloni <alexandre.belloni@bootlin.com>
  Andrew Morton <akpm@linux-foundation.org>
  anton.ivanov@cambridgegreys.com
  Arnd Bergmann <arnd@arndb.de>
  Aswath Govindraju <a-govindraju@ti.com>
  Athira Rajeev <atrajeev@linux.vnet.ibm.com>
  Bartosz Golaszewski <bgolaszewski@baylibre.com>
  Benjamin Herrenschmidt <benh@kernel.crashing.org>
  Bixuan Cui <cuibixuan@huawei.com>
  Bjorn Helgaas <bhelgaas@google.com>
  Borislav Petkov <bp@suse.de>
  Brian Cain <bcain@codeaurora.org>
  Chandrakanth Patil <chandrakanth.patil@broadcom.com>
  Chang S. Bae <chang.seok.bae@intel.com>
  Chao Yu <yuchao0@huawei.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Christian Brauner <christian.brauner@ubuntu.com>
  Christoph Hellwig <hch@lst.de>
  Christoph Niedermaier <cniedermaier@dh-electronics.com>
  Christophe JAILLET <christophe.jaillet@wanadoo.fr>
  Corentin Labbe <clabbe@baylibre.com>
  Cristian Marussi <cristian.marussi@arm.com>
  Dan Carpenter <dan.carpenter@oracle.com>
  Daniel Lezcano <daniel.lezcano@linaro.org>
  Daniel Mack <daniel@zonque.org>
  Daniel Vetter <daniel.vetter@ffwll.ch>
  Dave Kleikamp <dave.kleikamp@oracle.com>
  David S. Miller <davem@davemloft.net>
  Dimitri John Ledkov <dimitri.ledkov@canonical.com>
  Dmitry Torokhov <dmitry.torokhov@gmail.com>
  Eric Sandeen <sandeen@redhat.com>
  Fabio Aiuto <fabioaiuto83@gmail.com>
  Florian Fainelli <f.fainelli@gmail.com>
  Frederic Weisbecker <frederic@kernel.org>
  Gao Xiang <hsiangkao@linux.alibaba.com>
  Geert Uytterhoeven <geert+renesas@glider.be>
  Geoff Levand <geoff@infradead.org>
  Geoffrey D. Bennett <g@b4.vu>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Gregory CLEMENT <gregory.clement@bootlin.com>
  Guenter Roeck <linux@roeck-us.net>
  Hannes Reinecke <hare@suse.de>
  Hans de Goede <hdegoede@redhat.com>
  Heiko Carstens <hca@linux.ibm.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jaegeuk Kim <jaegeuk@kernel.org>
  James Smart <jsmart2021@gmail.com>
  Jan Kiszka <jan.kiszka@siemens.com>
  Jason Wang <jasowang@redhat.com>
  Jeff Layton <jlayton@kernel.org>
  Jiajun Cao <jjcao20@fudan.edu.cn>
  Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
  John Garry <john.garry@huawei.com>
  Jon Hunter <jonathanh@nvidia.com>
  Jonathan Cameron <Jonathan.Cameron@huawei.com>
  Justin Tee <justin.tee@broadcom.com>
  Kashyap Desai <kashyap.desai@broadcom.com>
  Kefeng Wang <wangkefeng.wang@huawei.com>
  Krzysztof Kozlowski <krzk@kernel.org>
  Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  Krzysztof Wilczyński <kw@linux.com>
  Lai Jiangshan <laijs@linux.alibaba.com>
  Lee Jones <lee.jones@linaro.org>
  Liguang Zhang <zhangliguang@linux.alibaba.com>
  Linus Torvalds <torvalds@linux-foundation.org>
  Linus Walleij <linus.walleij@linaro.org>
  Logan Gunthorpe <logang@deltatee.com>
  Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
  Luiz Sampaio <sampaio.ime@gmail.com>
  Lv Yunlong <lyl2019@mail.ustc.edu.cn>
  Marc Zyngier <maz@kernel.org>
  Marek Behún <kabel@kernel.org>
  Mark Brown <broonie@kernel.org>
  Martin Fäcknitz <faecknitz@hotsplots.de>
  Martin K. Petersen <martin.petersen@oracle.com>
  Maurizio Lombardi <mlombard@redhat.com>
  Michael Ellerman <mpe@ellerman.id.au>
  Michael S. Tsirkin <mst@redhat.com>
  Mike Christie <michael.christie@oracle.com>
  Mike Marshall <hubcap@omnibond.com>
  Nageswara R Sastry <rnsastry@linux.ibm.com <mailto:rnsastry@linux.ibm.com>>
  Namhyung Kim <namhyung@kernel.org>
  Nathan Chancellor <nathan@kernel.org>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Desaulniers <ndesaulniers@google.com>
  Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
  Pali Rohár <pali@kernel.org>
  Paolo Bonzini <pbonzini@redhat.com>
  Paul E. McKenney <paulmck@kernel.org>
  Paul Mackerras <paulus@ozlabs.org>
  Peter Robinson <pbrobinson@gmail.com>
  Philipp Zabel <p.zabel@pengutronix.de>
  Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
  Po-Hsu Lin <po-hsu.lin@canonical.com>
  Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  Rafał Miłecki <rafal@milecki.pl>
  Randy Dunlap <rdunlap@infradead.org>
  Ray Jui <ray.jui@broadcom.com>
  Richard Weinberger <richard@nod.at>
  Robin Gong <yibin.gong@nxp.com>
  Ruslan Bilovol <ruslan.bilovol@gmail.com>
  Russell King <rmk+kernel@armlinux.org.uk>
  Sandor Bodo-Merle <sbodomerle@gmail.com>
  Sasha Levin <sashal@kernel.org>
  Sean Christopherson <seanjc@google.com>
  Sebastian Reichel <sebastian.reichel@collabora.com>
  Sergey Shtylyov <s.shtylyov@omp.ru>
  Shawn Guo <shawnguo@kernel.org>
  Sherry Sun <sherry.sun@nxp.com>
  Shuah Khan <skhan@linuxfoundation.org>
  Srinivas Neeli <srinivas.neeli@xilinx.com>
  Stefan Eichenberger <eichest@gmail.com>
  Stephan Gerhold <stephan@gerhold.net>
  Stephen Boyd <swboyd@chromium.org>
  Steven Rostedt (VMware) <rostedt@goodmis.org>
  Sudeep Holla <sudeep.holla@arm.com>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Sumit Saxena <sumit.saxena@broadcom.com>
  Takashi Iwai <tiwai@suse.de>
  Takashi Sakamoto <o-takashi@sakamocchi.jp>
  Tao Ren <rentao.bupt@gmail.com>
  Thierry Reding <thierry.reding@gmail.com>
  Thierry Reding <treding@nvidia.com>
  Thomas Bogendoerfer <tsbogend@alpha.franken.de>
  Thomas Gleixner <tglx@linutronix.de>
  Tom Zanussi <zanussi@kernel.org>
  Tong Zhang <ztong0001@gmail.com>
  Tony Lindgren <tony@atomide.com>
  Trond Myklebust <trond.myklebust@hammerspace.com>
  Tyrel Datwyler <tyreld@linux.ibm.com>
  Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
  Valentin Vidic <vvidic@valentin-vidic.from.hr>
  Valentine Barshak <valentine.barshak@cogentembedded.com>
  Vasily Gorbik <gor@linux.ibm.com>
  Vinod Koul <vkoul@kernel.org>
  Vladimir Zapolskiy <vz@mleia.com>
  Will Deacon <will@kernel.org>
  Wim Van Sebroeck <wim@linux-watchdog.org>
  Wolfram Sang <wsa@kernel.org>
  Xie Yongji <xieyongji@bytedance.com>
  Xin Tan <tanxin.ctf@gmail.com>
  Xiyu Yang <xiyuyang19@fudan.edu.cn>
  Yang Yingliang <yangyingliang@huawei.com>
  Yizhuo <yzhai003@ucr.edu>
  Yizhuo Zhai <yzhai003@ucr.edu>
  Yufen Yu <yuyufen@huawei.com>
  Zhen Lei <thunder.leizhen@huawei.com>
  Zhihao Cheng <chengzhihao1@huawei.com>
  Zou Wei <zou_wei@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   795e84798fa7..9afc0c209685  9afc0c209685bc239e45b6ca1ea07186b78c7437 -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 03:07:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 03:07:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159090.292661 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m62aI-0001bD-64; Wed, 21 Jul 2021 03:07:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159090.292661; Wed, 21 Jul 2021 03:07:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m62aI-0001b6-2z; Wed, 21 Jul 2021 03:07:46 +0000
Received: by outflank-mailman (input) for mailman id 159090;
 Wed, 21 Jul 2021 03:07:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KCq8=MN=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m62aG-0001b0-4c
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 03:07:44 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.13.72]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42334e26-89c8-405f-8a0b-c25d03c68101;
 Wed, 21 Jul 2021 03:07:41 +0000 (UTC)
Received: from AM5PR0601CA0034.eurprd06.prod.outlook.com
 (2603:10a6:203:68::20) by AM0PR08MB4082.eurprd08.prod.outlook.com
 (2603:10a6:208:12e::27) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.29; Wed, 21 Jul
 2021 03:07:37 +0000
Received: from AM5EUR03FT020.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:68:cafe::27) by AM5PR0601CA0034.outlook.office365.com
 (2603:10a6:203:68::20) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Wed, 21 Jul 2021 03:07:37 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT020.mail.protection.outlook.com (10.152.16.116) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 21 Jul 2021 03:07:37 +0000
Received: ("Tessian outbound 809237f40a36:v99");
 Wed, 21 Jul 2021 03:07:36 +0000
Received: from 17dd34495fa5.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 BA448684-2EEE-437C-8760-FFA6C456FCFC.1; 
 Wed, 21 Jul 2021 03:07:25 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 17dd34495fa5.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 21 Jul 2021 03:07:25 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB3728.eurprd08.prod.outlook.com (2603:10a6:803:bf::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.24; Wed, 21 Jul
 2021 03:07:23 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 03:07:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 42334e26-89c8-405f-8a0b-c25d03c68101
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hY6lHsML2Rr/1O9BW5xaXM59VzTJ6otPAHbmYXQNjqw=;
 b=5E8sdZXMPOOphuKGJtXXM56KMnq+q0StPhSQRYH5rHnyeCFzV+fqRGZjxp4fMK1nuoMSj/MGhi6iETDCnnlStTPT4i90VgwkqGh03RotkZnJ7omydtFpW6xMHE/6LtzN4AvP20+prMdKxjJ/KM/oqVTTyx+Vgo/vitx5sk6CgsY=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Q3WWs6kL+osF9QTWtgrXMe4IAfe5YJ7lSHU3Fet91WRoAYtebOXY3tn8VS+vXvbpDS8z2quZkCcELRdgRw5q/48Gpl7n3yhB92M32rFltVxQzdxdGvN/jqyXKOhahI28SgKuiiLHV0brAHW3Gatl4tbspgI8lA/o7Lmm6wqEANLe7UKo4n+zWRrE4BBkA9tzli2g8JIinIxOQjI+/Pkc6gfx8M6mLeZPSlfKnaIe/WXM3VT3b8yncZEhEjCeDb9mMUZ6q5q7VYcRIXhBUy77cwowQjx+i0iL/X5xQ9YFz5P/vSUIJWeDgx3NPujOlqd3pOJQFgrVJoTANy2H+2LoVQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hY6lHsML2Rr/1O9BW5xaXM59VzTJ6otPAHbmYXQNjqw=;
 b=YbcEa89xhdQ4QN8SllTV8JlBXAU0vcGx7YRTYfcrcT2I/7QLyZ4lU8pZMjwbZ/5H93QlYiMIQ1+YHNzG8Ri3A6R0saPhI/RHkjk/emeFWLZa1AUrDWkPSyzV6D8kI9SWChB/fySp4VSbpAbU1+emqz08beuQNV3Da9ZSdUogWUhbgafCYBnHPv0lcHUv12MQ2hTlj/hYx6VqBjVcmaW5aLoTFVoU4CUfkRjFPxR6bAHxH2nMVTn57DY/WZt+5ety9hR5Bv8ER+deE+s8AYuuSe4koJp4MLnwnZ1x1ZKqcRzUGXNuXuMro93HenSnhp1THTfCJAaqbrQvRM99vLLAew==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hY6lHsML2Rr/1O9BW5xaXM59VzTJ6otPAHbmYXQNjqw=;
 b=5E8sdZXMPOOphuKGJtXXM56KMnq+q0StPhSQRYH5rHnyeCFzV+fqRGZjxp4fMK1nuoMSj/MGhi6iETDCnnlStTPT4i90VgwkqGh03RotkZnJ7omydtFpW6xMHE/6LtzN4AvP20+prMdKxjJ/KM/oqVTTyx+Vgo/vitx5sk6CgsY=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	nd <nd@arm.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "julien@xen.org" <julien@xen.org>
Subject: RE: [PATCH V3 05/10] xen/arm: static memory initialization
Thread-Topic: [PATCH V3 05/10] xen/arm: static memory initialization
Thread-Index: AQHXeTjh4qg0299wLkKAahDScdsA96tJ+1UAgALJChA=
Date: Wed, 21 Jul 2021 03:07:23 +0000
Message-ID:
 <VE1PR08MB52156DCB9D06B07718ACF9D4F7E39@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-6-penny.zheng@arm.com>
 <295913d9-5727-2ec7-ca20-70b94c53309d@suse.com>
In-Reply-To: <295913d9-5727-2ec7-ca20-70b94c53309d@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 731F13F59FB5B04BB996FC8388A73E7F.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: c3b266ef-4c0e-4265-735c-08d94bf4b177
x-ms-traffictypediagnostic: VI1PR08MB3728:|AM0PR08MB4082:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB4082A5D5A321BA341011B46DF7E39@AM0PR08MB4082.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:449;OLM:449;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 ErD5vEzPujsWIbF6x254PBaSqwc4Eta60+Ib+kEXWdk95ZRXsJ3IdbdGpYJZdJyywBVLJ6hB8Um0U0KOMZ4THVqrOoT4Gay5YQiXd5PKImLba+JEVPYgRzFLfOqFXvDgYGbuctsx7YR4toLhjTY9eAt5WyLM2jNox3Kjj1l+fwhvANTKIPvzYHTTuPNwSp5S14sj4LMnqd0LF4Tmg8f0UCeIJfvCk0BQvd+zsFPTFMmMQCkY9FzHBVuMnUvFf6nk+ETs/WcxwYw9OnJfU1fnWoJs5mFdE0nMSfWpbUrncqMgbDsjdJ5MBzfsDMGZbC71pLwJbZnyq8WTU52zv6+f0ZZKfP57p948hMP8ViS1jE6OrVRn0+BKkwX6Wt5M/zM222yDkv5fIas11SHaXjueX5ZhDb4v75NyEBijQ/P1AC07BC+3m6JhA6UZgh6+6YEqL3YwQ+3T/DKGxM6MM4DS0LA3nR+ZxyXhWwGjPkaVzApUs/iznmINUEHRDUMFxYkS8b91tlFOdoT4JDlYwlUEDQN9kYtdEQQkq4nPPJDS1U2xN0AYrMwv5x6GypnRdHBddo6LZeAXmdK/yaZB2FOFMYbrouBOJXqklOV1lvxEax8PVX8cGZx5nyMrvRiKLGSxkk8UBq/CUEl3XBlp4KAB9FoGCZd8OIYfnWarUP28i6f6gqeWdr0i72y8ImuE/y+3Y2yMIzH7k4brOCkmJBLgpQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(366004)(39850400004)(346002)(376002)(66446008)(71200400001)(8936002)(2906002)(4326008)(5660300002)(7696005)(26005)(122000001)(64756008)(66556008)(6916009)(66476007)(186003)(66946007)(478600001)(33656002)(316002)(86362001)(76116006)(54906003)(8676002)(53546011)(52536014)(6506007)(55016002)(38100700002)(83380400001)(9686003)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?mFKZXjPxmJEO6I4tDU=3D?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3728
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT020.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	625c8c9e-7cc2-4156-75d9-08d94bf4a937
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	dqHxwTD/4H7tby551PJUBrIWJL7oCJgwxcPJr8c/9ZoQ4NTgJ57/ep5L3jAomH0U87ykyJfqbcMRJspacqAN1epL3d7jxlM4wmuHobuqkILihNVBEC5ALnrvcRxYWvlS3oCylLXH1sAlp4eDV394ypDTOA8U7+HrtM48sc0pqiPTn7MzZqKS/Jp9HLGrh6uNVQz6bvx+qw/XSmv3tPPNCn6RzluafC8G9lMW2Si2Ai8jVmAT/qQSM1T/i1VuF1MKDGlyQT3dR4lwh/3FMsKhHOuo6KMxvK2n1zM2R4w9l8kY67kIMtE7wmLNATcz8pTlBxBVk4mOMIimtJtBooKMX3L1eQMR6XkODdzBYJB9xnNOKrScnzZSiPcgUig8CEmYFGLT5ZcTMIcV6AudL/fxdpzvvO4DOYCYRXVH6T/p4E8wDEBjrWSHKedAl1L75tdmMccyCS+hAws35Nvy5OXsRHudoN/O8rM4LZ4RFqwwcH+0D1v/sr/e3U9iFHIPhMO9Dd0mx9rfRHqHrTWcwYG9HJ9f4epOUhaHXOoP9cIwum8DK+x+94dWgjjiKMLpvILn0xO0/Rn+pny2Kdoe3Dc+JcthlV/A3yJ1JqfWkx8VgZg2Hi5MFPE4CwOPZISIeu6yUzpRZuWxz8B6EHL2w7AGMYvIU8+FANeVRBUw9otKjyJlJZurXdNGBKysx9lO4r/4121SMbKsSZ0msUkZuD/rAQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(39850400004)(396003)(136003)(376002)(36840700001)(46966006)(356005)(8676002)(81166007)(7696005)(5660300002)(8936002)(47076005)(82310400003)(336012)(83380400001)(2906002)(86362001)(55016002)(478600001)(9686003)(36860700001)(70206006)(186003)(316002)(26005)(4326008)(6862004)(70586007)(6506007)(82740400003)(53546011)(52536014)(33656002)(54906003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 03:07:37.0485
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: c3b266ef-4c0e-4265-735c-08d94bf4b177
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT020.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4082

SGkgSmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBNb25kYXksIEp1bHkgMTksIDIwMjEgNDoy
MCBQTQ0KPiBUbzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+DQo+IENjOiBCZXJ0
cmFuZCBNYXJxdWlzIDxCZXJ0cmFuZC5NYXJxdWlzQGFybS5jb20+OyBXZWkgQ2hlbg0KPiA8V2Vp
LkNoZW5AYXJtLmNvbT47IG5kIDxuZEBhcm0uY29tPjsgeGVuLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnOw0KPiBzc3RhYmVsbGluaUBrZXJuZWwub3JnOyBqdWxpZW5AeGVuLm9yZw0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIFYzIDA1LzEwXSB4ZW4vYXJtOiBzdGF0aWMgbWVtb3J5IGluaXRpYWxp
emF0aW9uDQo+IA0KPiBPbiAxNS4wNy4yMDIxIDA3OjE4LCBQZW5ueSBaaGVuZyB3cm90ZToNCj4g
PiB2MyBjaGFuZ2U6DQo+ID4gLSBpbmNsdWRlIGFkZGl0aW9uIG9mIENPTkZJR19TVEFUSUNfQUxM
T0NBVElPTiBpbiB0aGlzIGNvbW1pdCwgd2hlcmUNCj4gPiBpdCBpcyBmaXJzdGx5IHVzZWQgYW5k
IGFsc28gY2hhbmdlIHRoZSBuYW1lIHRvIENPTkZJR19TVEFUSUNfTUVNT1JZDQo+ID4gLSBGaXgg
VEFCIHR5cG8gaW4gS2NvbmZpZw0KPiANCj4gTm90IHN1cmUgd2hhdCB0aGlzIHJlbGF0ZXMgdG8s
IGJ1dCAuLi4NCj4gDQoNCkJlZm9yZSBJIHdhcyB3cm9uZ2x5IHVzaW5nICIgc2V0IHRhYnN0b3A9
NCAiIGZvciBLY29uZmlnIGZpbGUsIHNvLi4uDQoNCj4gPiAtLS0gYS94ZW4vYXJjaC9hcm0vS2Nv
bmZpZw0KPiA+ICsrKyBiL3hlbi9hcmNoL2FybS9LY29uZmlnDQo+ID4gQEAgLTEwNiw2ICsxMDYs
OSBAQCBjb25maWcgVEVFDQo+ID4NCj4gPiAgc291cmNlICJhcmNoL2FybS90ZWUvS2NvbmZpZyIN
Cj4gPg0KPiA+ICtjb25maWcgU1RBVElDX01FTU9SWQ0KPiA+ICsgICAgICAgIGRlZl9ib29sIHkN
Cj4gDQo+IC4uLiB0aGlzIGlzICh3cm9uZ2x5KSB1c2luZyBzcGFjZXMgZm9yIGluZGVudGF0aW9u
Lg0KPiANCj4gSSBhbHNvIHdvbmRlciBhYm91dCB0aGUgcGxhY2VtZW50OiBTaG91bGRuJ3QgdGhl
IG9wdGlvbiBsaXZlIGluIGNvbW1vbiBjb2RlLA0KPiB3aXRoIEFybSAic2VsZWN0ImluZyBpdD8N
Cj4gDQoNClN1cmUsIEkgd2lsbCBwbGFjZSBpdCBpbiB4ZW4vY29tbW9uL0tjb25maWcsIGFuZCBh
ZGQgImRlcGVuZHMgb24gQVJNIi4NCg0KPiA+IC0tLSBhL3hlbi9hcmNoL2FybS9zZXR1cC5jDQo+
ID4gKysrIGIveGVuL2FyY2gvYXJtL3NldHVwLmMNCj4gPiBAQCAtNjIyLDYgKzYyMiwyOCBAQCBz
dGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wZHgodm9pZCkNCj4gPiAgICAgIH0NCj4gPiAgfQ0KPiA+
DQo+ID4gKy8qIFN0YXRpYyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi8NCj4gPiArc3RhdGljIHZv
aWQgX19pbml0IGluaXRfc3RhdGljbWVtX3BhZ2VzKHZvaWQpIHsNCj4gPiArICAgIHVuc2lnbmVk
IGludCBiYW5rOw0KPiA+ICsNCj4gPiArICAgIC8qIFRPRE86IENvbnNpZGVyaW5nIE5VTUEtc3Vw
cG9ydCBzY2VuYXJpby4gKi8NCj4gPiArICAgIGZvciAoIGJhbmsgPSAwIDsgYmFuayA8IGJvb3Rp
bmZvLnN0YXRpY19tZW0ubnJfYmFua3M7IGJhbmsrKyApDQo+ID4gKyAgICB7DQo+ID4gKyAgICAg
ICAgcGFkZHJfdCBiYW5rX3N0YXJ0ID0gYm9vdGluZm8uc3RhdGljX21lbS5iYW5rW2JhbmtdLnN0
YXJ0Ow0KPiA+ICsgICAgICAgIHBhZGRyX3QgYmFua19zaXplID0gYm9vdGluZm8uc3RhdGljX21l
bS5iYW5rW2JhbmtdLnNpemU7DQo+ID4gKyAgICAgICAgcGFkZHJfdCBiYW5rX2VuZCA9IGJhbmtf
c3RhcnQgKyBiYW5rX3NpemU7DQo+ID4gKw0KPiA+ICsgICAgICAgIGJhbmtfc3RhcnQgPSByb3Vu
ZF9wZ3VwKGJhbmtfc3RhcnQpOw0KPiA+ICsgICAgICAgIGJhbmtfZW5kID0gcm91bmRfcGdkb3du
KGJhbmtfZW5kKTsNCj4gPiArICAgICAgICBpZiAoIGJhbmtfZW5kIDw9IGJhbmtfc3RhcnQgKQ0K
PiA+ICsgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgICAgIGZyZWVfc3RhdGlj
bWVtX3BhZ2VzKG1hZGRyX3RvX3BhZ2UoYmFua19zdGFydCksDQo+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoYmFua19lbmQgLSBiYW5rX3N0YXJ0KSA+PiBQQUdFX1NISUZULA0KPiA+
ICsgZmFsc2UpOw0KPiANCj4gSW5kZW50YXRpb24gKG9uZSB0b28gZmV3IHNwYWNlcykuIFBlcmhh
cHMgYWxzbyBjb25zaWRlciB0byBhdm9pZCBvcGVuLWNvZGluZw0KPiBQRk5fRE9XTigpIGhlcmU7
IGluIGZhY3QgaXQgYW5kIFBGTl9VUCgpIGNvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YNCj4gcm91
bmRfcGd7ZG93bix1cH0oKSBhYm92ZS4NCj4gDQoNClN1cmUuIEkgd2lsbCByZXBsYWNlIHJvdW5k
X3Bne2Rvd24sdXB9KCkgd2l0aCBQRk5fRE9XTigpL1BGTl9VUCgpLg0KDQo+IEphbg0KDQpDaGVl
cnMNCg0KUGVubnkgWmhlbmcNCg==


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 04:07:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 04:07:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.158985.292679 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m63W6-0008Rd-MT; Wed, 21 Jul 2021 04:07:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 158985.292679; Wed, 21 Jul 2021 04:07:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m63W6-0008RW-JT; Wed, 21 Jul 2021 04:07:30 +0000
Received: by outflank-mailman (input) for mailman id 158985;
 Tue, 20 Jul 2021 20:25:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Bb4w=MM=kernel.org=wsa@srs-us1.protection.inumbo.net>)
 id 1m5wJP-0006MH-LS
 for xen-devel@lists.xenproject.org; Tue, 20 Jul 2021 20:25:55 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9848f908-4bb5-4c83-9835-a7802cf914ff;
 Tue, 20 Jul 2021 20:25:54 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 56E9760BBB;
 Tue, 20 Jul 2021 20:25:51 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9848f908-4bb5-4c83-9835-a7802cf914ff
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626812753;
	bh=l5xDkWzCR3urdpTjqmcMUpN6o09NewdpR8Jc68Liw0U=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=VBe4HBaGXZMGD0ZdODVsdKbrJ8SORqt3SuXaX37yK3AHshxYDbXGRQXluA6mx7jW3
	 pTBW48mt4sopqYvfTU+bZO/p3bIz4jENtO9uPBTi0SuDufiC+I7vrG7Ce/qo8tgdbL
	 Vv6L36N+yjTOuiDCZaFxIklqrdMuw+BZDERVBNSuKxTccmMm+0DpHaq2hVxlihY0dP
	 QgyoMfzVLFJnhH8igTsTFxC4OBQeb5IzLYxfferXAP0fHcTPB3F6Yr+8KbAgAJLPf2
	 a0unVf6CWv1kUs6z+N9Cr2G8gL44dgqsGt8dlJjFYXR6m7PEcLW13zfgVQ2ipy0CDg
	 OpoYDDMZUiahA==
Date: Tue, 20 Jul 2021 22:25:42 +0200
From: Wolfram Sang <wsa@kernel.org>
To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hannes Reinecke <hare@suse.de>, Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jaroslav Kysela <perex@perex.cz>, Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>, Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>, Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>, Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>, Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>, Ohad Ben-Cohen <ohad@wizery.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>, Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>, Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wu Hao <hao.wu@intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>, Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org, dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net, kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org, linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org, linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org, linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	nvdimm@lists.linux.dev, platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org, target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org, Johannes Thumshirn <jth@kernel.org>,
	"Rafael J . Wysocki" <rafael@kernel.org>
Subject: Re: [PATCH v4 5/5] bus: Make remove callback return void
Message-ID: <YPcxRgfZymtjJ4ih@kunai>
Mail-Followup-To: Wolfram Sang <wsa@kernel.org>,
	Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hannes Reinecke <hare@suse.de>, Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jaroslav Kysela <perex@perex.cz>, Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>, Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>, Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>, Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>, Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>, Ohad Ben-Cohen <ohad@wizery.com>,
	Pali =?utf-8?B?Um9ow6Fy?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>, Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>, Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wu Hao <hao.wu@intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>, Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org, dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net, kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org, linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org, linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org, linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	nvdimm@lists.linux.dev, platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org, target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org, Johannes Thumshirn <jth@kernel.org>,
	"Rafael J . Wysocki" <rafael@kernel.org>
References: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
 <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="o9Bjd73EPYzHYRI8"
Content-Disposition: inline
In-Reply-To: <20210713193522.1770306-6-u.kleine-koenig@pengutronix.de>


--o9Bjd73EPYzHYRI8
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 13, 2021 at 09:35:22PM +0200, Uwe Kleine-K=C3=B6nig wrote:
> The driver core ignores the return value of this callback because there
> is only little it can do when a device disappears.
>=20
> This is the final bit of a long lasting cleanup quest where several
> buses were converted to also return void from their remove callback.
> Additionally some resource leaks were fixed that were caused by drivers
> returning an error code in the expectation that the driver won't go
> away.
>=20
> With struct bus_type::remove returning void it's prevented that newly
> implemented buses return an ignored error code and so don't anticipate
> wrong expectations for driver authors.
>=20
> Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> (For ARM, Am=
ba and related parts)
> Acked-by: Mark Brown <broonie@kernel.org>
> Acked-by: Chen-Yu Tsai <wens@csie.org> (for sunxi-rsb)
> Acked-by: Pali Roh=C3=A1r <pali@kernel.org>
> Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org> (for media)
> Acked-by: Hans de Goede <hdegoede@redhat.com> (For drivers/platform)
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Acked-By: Vinod Koul <vkoul@kernel.org>
> Acked-by: Juergen Gross <jgross@suse.com> (For xen)
> Acked-by: Lee Jones <lee.jones@linaro.org> (For mfd)
> Acked-by: Johannes Thumshirn <jth@kernel.org> (For mcb)
> Acked-by: Johan Hovold <johan@kernel.org>
> Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> (For slimb=
us)
> Acked-by: Kirti Wankhede <kwankhede@nvidia.com> (For vfio)
> Acked-by: Maximilian Luz <luzmaximilian@gmail.com>
> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> (For ulpi and=
 typec)
> Acked-by: Samuel Iglesias Gons=C3=A1lvez <siglesias@igalia.com> (For ipac=
k)
> Reviewed-by: Tom Rix <trix@redhat.com> (For fpga)
> Acked-by: Geoff Levand <geoff@infradead.org> (For ps3)
> Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com> (For thunderbolt)
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> (For in=
tel_th)
> Acked-by: Dominik Brodowski <linux@dominikbrodowski.net> (For pcmcia)
> Reviewed-by: Cornelia Huck <cohuck@redhat.com> (For drivers/s390 and driv=
ers/vfio)
> Acked-by: Rafael J. Wysocki <rafael@kernel.org> (For ACPI)
> Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org> (rpmsg and apr)
> Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> (For =
intel-ish-hid)
> Acked-by: Dan Williams <dan.j.williams@intel.com> (For CXL, DAX, and NVDI=
MM)
> Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com> (For isa)
> Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (For firewire)
> Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> (For hid)
> Acked-by: Thorsten Scherer <t.scherer@eckelmann.de> (For siox)
> Acked-by: Sven Van Asbroeck <TheSven73@gmail.com> (For anybuss)
> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> (For MMC)
> Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@pengutronix.de>

Acked-by: Wolfram Sang <wsa@kernel.org> # for I2C

Thanks, Uwe!


--o9Bjd73EPYzHYRI8
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEOZGx6rniZ1Gk92RdFA3kzBSgKbYFAmD3MUIACgkQFA3kzBSg
KbYzoQ//fHsReQ7gV79Uj6MfHENOZAAxSFMd8yIWNeX0Ug8crVQ2fzQgvlotUS1y
62KPO9MFbi37+nfCWwl5uNEiDPwYjpB+jM/jfqJ849ngfiIQyUqCK7qr5b1FIWkp
TuEV1Rx/wlpmxMEjKFAuo+/5OkXVwvpxQGiqBemOeTmOKjqITCpXEBkYqDqqI/MY
lnzwpE8R30sf8IH/aThtb9dZBz+8y2mry6nVtSbMMmZ0VAYgwEPmuPLfa9CIhaCJ
Oqe6Uf+sJs/emp0nfyZ5IDXvO8vE5kgPoy0l/smHEtejHLUkHBKf4MusKOzDdbax
Uk48fnhKgbhxbVN0guT7IzWvRG+80hU4Ns9YPjmHYNXr4Wg03//hoAv4otMAAqXU
Tjk9sEMBGHasqHZ0e1j3xTRhxQOwTJjzwVNhkrTX4HIZ/k0gXQK0ojBXxGvWeds2
yQ7FUakyf1LQBmrLwssWSXbyp+W6tVodIUmnebSK1IpVd7YK4NZPf796yD44Ckzd
XM4O5xTksxr5X+cEsNNLxhXFMohR/BOpLCj4R1+vpRNyMTHLIqfsI7GL+TJh+Mri
+kuq0TQgbTRlrIw/jfTcenYmXhQte4oeFQa3uVwGY2b+5kB/zRMTKThU0e2Vpd+8
Kifz6u9a8LEGAMrLNXVd1B/uHQSOMYeeIzsuZ+BHqVxDsyNvJds=
=zPVh
-----END PGP SIGNATURE-----

--o9Bjd73EPYzHYRI8--


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 04:12:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 04:12:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159103.292691 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m63ae-0001Sy-Ee; Wed, 21 Jul 2021 04:12:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159103.292691; Wed, 21 Jul 2021 04:12:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m63ae-0001Sr-BD; Wed, 21 Jul 2021 04:12:12 +0000
Received: by outflank-mailman (input) for mailman id 159103;
 Wed, 21 Jul 2021 04:09:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=O+O/=MN=comcast.net=xentrigued@srs-us1.protection.inumbo.net>)
 id 1m63Y5-0000hM-Vx
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 04:09:34 +0000
Received: from resqmta-po-08v.sys.comcast.net (unknown
 [2001:558:fe16:19:96:114:154:167])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0fb8b5df-eead-439c-ad14-738ac96f49b6;
 Wed, 21 Jul 2021 04:09:33 +0000 (UTC)
Received: from resomta-po-13v.sys.comcast.net ([96.114.154.237])
 by resqmta-po-08v.sys.comcast.net with ESMTP
 id 63WTmyBXPArcZ63Y4mzu1w; Wed, 21 Jul 2021 04:09:32 +0000
Received: from ASUSN550JK ([IPv6:2601:80:4203:a8a1:28b5:a97c:4bea:4aff])
 by resomta-po-13v.sys.comcast.net with ESMTPSA
 id 63Y2maxUCW1PG63Y3mfr1y; Wed, 21 Jul 2021 04:09:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0fb8b5df-eead-439c-ad14-738ac96f49b6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcast.net;
	s=20190202a; t=1626840572;
	bh=WJt6Gde1jl2zwCm9tTT+kg48dDhf+GDp/R3VtJ9PGZg=;
	h=Received:Received:From:To:Subject:Date:Message-ID:MIME-Version:
	 Content-Type;
	b=euRMcERPDAMn3+6GSuGUfw0sxB/0Ewr3tF/HTj9A7KxG96/x6T2Z0D73lmV3/iG1Z
	 zcfaWWkwQhfpXBnUzB9OGMFVHDlCybXepCbJXcJ3g2QUyKVdN4MtpMOyhmktygu6r0
	 eIHXGwvOvBOk4F8f3dZ8IQo/GcQyZsFFPCgTbSpQCe6sEdSIgm8lWGGKgr9tOuoB6m
	 XHRI/vi/41wrwBBgr0JAjcumb74Gob4Jyaxc7yC6JeQMe9uFte0VbHItCnin4qhfeN
	 tk4uj3i7KkEClN+IXx8p1m9Bx4LaA3LZytWsmdj70oJvYlQW5pblpvcbzY/BwXhYH2
	 4vR7V3DUFEalg==
X-Xfinity-VMeta: sc=0.00;st=legit
From: "Xentrigued" <xentrigued@comcast.net>
To: <xen-devel@lists.xenproject.org>
Subject: Nested Virtualization of Hyper-V on Xen Not Working
Date: Wed, 21 Jul 2021 00:09:30 -0400
Message-ID: <001401d77de6$34ff5de0$9efe19a0$@comcast.net>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit
X-Mailer: Microsoft Outlook 16.0
Thread-Index: Add95Ay+sEH/JKKzR5yp5H78o7x4jg==
Content-Language: en-us

RATIONALE: Features in recent versions of Windows now REQUIRE Hyper-V
support to work.  In particular, Windows Containers, Sandbox, Docker Desktop
and the Windows Subsystem for Linux version 2 (WSL2).  Running Windows in a
VM as a development and test platform is currently a common requirement for
various user segments and will likely become necessary for production in the
future.  Nested virtualization of Hyper-V currently works on VMware ESXi,
Microsoft Hyper-V and KVM-based hypervisors.  This puts Xen and its
derivatives at a disadvantage when choosing a hypervisor.

WHAT IS NOT WORKING?  Provided the requirements set forth in:
https://wiki.xenproject.org/wiki/Nested_Virtualization_in_Xen have been met,
an hvm guest running Windows 10 PRO Version 21H1 x64 shows that all four
requirements for running Hyper-V are available using the msinfo32.exe or
systeminfo.exe commands.  More granular knowledge of the CPU capabilities
exposed to the guest can be observed using the Sysinternals Coreinfo64.exe
command.  CPUID flags present appear to mirror those on other working nested
hypervisor configurations.

Enabling Windows Features for Hyper-V, Virtual Machine Platform, etc. all
appear to work without error.  However, after the finishing reboot, Hyper-V
is simply not active.  This--despite the fact that vmcompute.exe (Hyper-V
host compute service) is running and there are no errors in the logs.  In
addition, all four Hyper-V prerequisites continue to show as available.

By contrast, after the finishing reboot of an analogous Windows VM running
on ESXi, the four prerequisites are reversed:  hypervisor is now active;
vmx, ept and urg (unrestricted guest) are all off as viewed with the
Coreinfo64.exe -v command.  Furthermore, all functions requiring Hyper-V are
now active and working as expected.

This deficiency has been observed in two test setups running Xen 4.15 from
source and XCP-ng 8.2, both running on Intel with all of the latest,
generally available patches.  We presume that the same behavior is present
on Citrix Hypervisor 8.2 as well.
    
SUMMATION:
Clearly, much effort has already been expended to support the Viridian
enlightenments that optimize running Windows on Xen.  It also looks like a
significant amount of effort has been put forth to advance nested
virtualization in general.

Therefore, if it would be helpful, I am willing to perform testing and
provide feedback and logs as appropriate in order to help get this working.

While my day job is managing a heterogeneous collection of systems running
on various hypervisors, I have learned the rudiments of integrating patches
and rebuilding Xen from source so could no doubt be useful in assisting you
with this worthwhile endeavor.




From xen-devel-bounces@lists.xenproject.org Wed Jul 21 05:19:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 05:19:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159119.292709 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m64dH-000315-CF; Wed, 21 Jul 2021 05:18:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159119.292709; Wed, 21 Jul 2021 05:18:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m64dH-00030y-8f; Wed, 21 Jul 2021 05:18:59 +0000
Received: by outflank-mailman (input) for mailman id 159119;
 Wed, 21 Jul 2021 05:18:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m64dF-00030o-LG; Wed, 21 Jul 2021 05:18:57 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m64dF-0003QN-Ev; Wed, 21 Jul 2021 05:18:57 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m64dF-0007hQ-7r; Wed, 21 Jul 2021 05:18:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m64dF-00046M-7P; Wed, 21 Jul 2021 05:18:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=l2qoyg286eJiE465jl1F/HIGTDKdnuy+DO24ESJPJ20=; b=vtBifjAo3nqaHxK0UVrq0uxRbZ
	RA3vt573KP7Zed6beOZeYX7lDJhd3vtCEY41Uejr2yKfEyuGNfX2rlFH9F3ekJE+rrzbUdiV005Jg
	8y8oakXKSXEsA+/oA+w9l9h1chcG6vO4T7tzo6kdtV4ODx3N2rkUSGhtjizqeiH//A0s=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163851-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163851: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=885efcd3f990fe7bf58713f9a76d633f102a8f03
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 05:18:57 +0000

flight 163851 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163851/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 885efcd3f990fe7bf58713f9a76d633f102a8f03
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   47 days
Failing since        162368  2021-06-04 15:42:59 Z   46 days  125 attempts
Testing same since   163835  2021-07-20 06:58:16 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3898 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 05:30:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 05:30:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159126.292724 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m64o4-0005ND-Dl; Wed, 21 Jul 2021 05:30:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159126.292724; Wed, 21 Jul 2021 05:30:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m64o4-0005N6-Ae; Wed, 21 Jul 2021 05:30:08 +0000
Received: by outflank-mailman (input) for mailman id 159126;
 Wed, 21 Jul 2021 05:30:06 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m64o2-0005HH-Ne; Wed, 21 Jul 2021 05:30:06 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m64o2-0003as-AC; Wed, 21 Jul 2021 05:30:06 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m64o1-00081d-Vo; Wed, 21 Jul 2021 05:30:06 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m64o1-0003nc-VB; Wed, 21 Jul 2021 05:30:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=XcnKU+uKApMzquEu19K/sjS/UZgsBVWtNAx4kT2AqB8=; b=uR7CZkExGV55Qz4TKEU9n86Gzq
	nfR7ZCnGRpKRn2f1iD3KBjGR615SfSFwAeEe51kiEvSTK9pc5hKGRAhynSfQKKS83qqL+YpWtNVwl
	VAAUNSQYPtdaMBg4CAf4MoKymwQ5KduGlzG3RBvXohR0twFu2Ygge/oadqkDOnS3lc6U=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163849-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163849: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:xen-boot:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=143c2e0432859826c9e8d5b2baa307355f1a5332
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 05:30:05 +0000

flight 163849 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163849/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw  8 xen-boot                 fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                143c2e0432859826c9e8d5b2baa307355f1a5332
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   15 days
Failing since        163327  2021-07-06 12:39:04 Z   14 days   25 attempts
Testing same since   163849  2021-07-20 18:10:52 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 10869 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 05:53:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 05:53:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159136.292745 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m65Ay-00085W-OE; Wed, 21 Jul 2021 05:53:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159136.292745; Wed, 21 Jul 2021 05:53:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m65Ay-00085P-LB; Wed, 21 Jul 2021 05:53:48 +0000
Received: by outflank-mailman (input) for mailman id 159136;
 Wed, 21 Jul 2021 05:53:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KCq8=MN=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m65Aw-00085J-Um
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 05:53:47 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe0e::60b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 511f6bca-b20b-4612-9959-f31a7cbd5c6a;
 Wed, 21 Jul 2021 05:53:43 +0000 (UTC)
Received: from AM6PR04CA0060.eurprd04.prod.outlook.com (2603:10a6:20b:f0::37)
 by AM6PR08MB4312.eurprd08.prod.outlook.com (2603:10a6:20b:72::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.28; Wed, 21 Jul
 2021 05:53:41 +0000
Received: from AM5EUR03FT018.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:f0:cafe::4f) by AM6PR04CA0060.outlook.office365.com
 (2603:10a6:20b:f0::37) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Wed, 21 Jul 2021 05:53:41 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT018.mail.protection.outlook.com (10.152.16.114) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 21 Jul 2021 05:53:40 +0000
Received: ("Tessian outbound bbfc4df8f27e:v99");
 Wed, 21 Jul 2021 05:53:40 +0000
Received: from 24603811279c.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 7CBD3BB7-0372-4DB5-959C-6BF47FF88579.1; 
 Wed, 21 Jul 2021 05:53:30 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 24603811279c.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 21 Jul 2021 05:53:30 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB3424.eurprd08.prod.outlook.com (2603:10a6:803:88::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.29; Wed, 21 Jul
 2021 05:53:27 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 05:53:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 511f6bca-b20b-4612-9959-f31a7cbd5c6a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yKjrWnnq0+FT8D3CJXFMEELjQLo2C9Kprahat8OVowI=;
 b=poECFF2aMuBI2xavmvOWo1W0oXeEkxhPaXTTd05Jxi9hkybw2AaGl9ktHoUaTZqq4L0rI6vD6ND2m4I4pHKQJoWeMoR46Ep8fxN9uIcXeBtgXVEqE+Y5sE5gwaehD/uwInf0DPEgHAxp89KvU/FiidFzC/39q4i9nj7hsBs2Ldo=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Hy+YnjjxAwH54kBqFmIfJX07GVS9RelTFFvgUgjRucDIqti4n1PjjUK7q9T2SwUk85w+dlp2xZEblOGu/9TyOqqAbaiAtwvsDzZW3CCY1p2Q0VoU0p7BcxTQdXstUrom2vhMy2h1SWFgjRVHxP7arNMFEt8XMBHfP7pKsrSr1BCHwM33acYVqqPux/Isbdsfcib2C4kmjDWz21D48+s/vUTa1vxuzzqW30P13CSl+78RZY9vHczFRnZRcl2K00XjfoNHONmFrA1MwetGvtvJ3JM3Lj6RPQrcPqYtPh/ucn3P7U7l5Taw8l6PoicifZlcLk6TbAK21sfaYiVHS+VNXQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yKjrWnnq0+FT8D3CJXFMEELjQLo2C9Kprahat8OVowI=;
 b=PnyU/u/16s0wB4tqm+wnQwMnjxKRppFvmD/sOPf/poloskcEGLvRPHSwWnvNnPF3+H1VlvUyEcE63ibIYCOQemHpex32C8nAst3lclmXIutlRlWV9ZoDuINJF/D/s+ApdGAIcQxNrhh35evJV29C0yyK39i2gCzSZ9XN9zYyg8qhlp02ipyrVmWRMavual/KytTg7mz5iHVUvMyYLac4bW5+kxk2Vl2n4dcR+46ihrymw90sz35UDrWYvyZ5vTJRxE0RSYIT7v1CbHKivP4KTNKbpP54ldYmxgRjIs+98AK8QiwjKa/qy1pfGAjBia6PlMihgfYyljV9Y/KjTGw8Tw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yKjrWnnq0+FT8D3CJXFMEELjQLo2C9Kprahat8OVowI=;
 b=poECFF2aMuBI2xavmvOWo1W0oXeEkxhPaXTTd05Jxi9hkybw2AaGl9ktHoUaTZqq4L0rI6vD6ND2m4I4pHKQJoWeMoR46Ep8fxN9uIcXeBtgXVEqE+Y5sE5gwaehD/uwInf0DPEgHAxp89KvU/FiidFzC/39q4i9nj7hsBs2Ldo=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>, "julien@xen.org" <julien@xen.org>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	nd <nd@arm.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>
Subject: RE: [PATCH V3 07/10] xen: re-define assign_pages and introduce
 assign_page
Thread-Topic: [PATCH V3 07/10] xen: re-define assign_pages and introduce
 assign_page
Thread-Index: AQHXeTjssWFc0WhZV0Sk9HnWQhMRratKAUqAgALtfsA=
Date: Wed, 21 Jul 2021 05:53:26 +0000
Message-ID:
 <VE1PR08MB5215A9CC9C882353FAB0C717F7E39@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-8-penny.zheng@arm.com>
 <b2ece197-a9fe-71bc-2480-ea1db83acaee@suse.com>
In-Reply-To: <b2ece197-a9fe-71bc-2480-ea1db83acaee@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: FF3AFEA485DA6C47BA43913485913E0E.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 51a0fb8c-061b-47f9-194b-08d94c0be441
x-ms-traffictypediagnostic: VI1PR08MB3424:|AM6PR08MB4312:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB43121EE4D16FFD1F237EC4FEF7E39@AM6PR08MB4312.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 4nqrVTZsY2Mvx9W4xI8GU2oU4DP+y16JJJ1/BvKkXiBEjJRIsMt3ri1TTchZSU/Yw70ZiFKAvqaTXRSyDtfxfWPk5p3gNFtFKZgn9ou6Jws/4A4+NUMCF8Vs3qf51lG06MB52zb2cHpcu03BYSQcRDT8y9PvFE06wRz70xpyR9W+gRk0vKquKRcsnnkUIbqX/7x6kKbDT/B2Jcir/elS131oIbGn4jv8zX6hgzMfxGaEvFKr7p/L5w+6qQeXTzqtBZT/T1u78qb8Kd+KvKbEwQr2bX1i5ByHuPFz+y2scIfYE/RUhMwuQjcM3bW+yrbP4m+ZnYTMpmwhhHoWIxjKl/Fjv/4Qsn8MFKD+9AX1e2aIGLqQ0XKwZjgl4GFoLIK2n0x92FfJT+zhUymWycRYkhuecwxLiRnBo8Sy1WpiX1uX55QpDFFa91+LT+UB5YHQpVTyXF7Q9l0G101m5J5Cm1TlNmLD4xSedS9I6opUwjmBWAPTckAm9G6d8cbqw8OxHEcqSPZzH+RZlOzdiwiPg4ARFcoYaejr4sOxKS3y0R0xPqZ9a3tLmH7J6aiO6hQ6YjQn5i0Ld1imkUBUfM9hHPXSUyFoHPviSC782RGab25SJ7n+vcbVqc+lDA/mqv/Ffog93kaWFwPi6bXnmES7ya7wswRxud5uxPoTZV13DCUqRfcFfpPRzsvBs+HgrK8ql3j9v6uzYOHn7YblIwKg0Q==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39850400004)(396003)(376002)(136003)(366004)(346002)(86362001)(55016002)(6506007)(7696005)(122000001)(38100700002)(316002)(5660300002)(53546011)(9686003)(4326008)(33656002)(110136005)(478600001)(54906003)(64756008)(66476007)(66556008)(186003)(8936002)(26005)(66946007)(76116006)(83380400001)(8676002)(66446008)(52536014)(2906002)(71200400001)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3424
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT018.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	42b2c246-d845-457b-7835-08d94c0bdc1d
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	JwxE9m9Qgn5Q/Og/2GXfZf4bJ0Ckg9ZcV5Clw9xter7MgVRhXKJFZHwN+dlb2lM0G5e0U67RBOonsQH/vh2LUG4CaW/uLUnJKRkk/fSq0TfMz/XtalasrYWanYEoEBVyJHRy36Jz+xTbY8LP1YONYZO8XfS8bMekr1nNK8w7p7JvCLuKWZEkjckHxyi8etJzpX+LErtNN9657IcEDhKTgp2Ec+TYZMGQg4g2RMytTkpIB3YdeETbFPEMYpJ1NqvOBrjJ7vukTnekkTBEd0CPEumDeKentgFBKyZHxoZAtREd3cNEitYFRAJGAnmP+xbR4gTTis3cZpY4xvtBVEUWqRiJ1EzfijlKaSClRNvQjvqG4RYBV5JfXtfz5A6zFFcepe44hGAnf/01tld+0WlsRq+iVE3evSWix3Cc+lAruEba7bFSTjYkMc4a8Y7XAanklt6M8+/x65BCF2dB3ZQ5zWWeH0mYN1fLLHbW90dDNQ4K0eGprnfdAdZqzfykOv6uhC2WvHR7KcL8pKMUSjjJFsv+50dbQgvPLW559JU7TaVMDxeudbGlji7mrmkBO9NKvqXH/VmOA7/jyD7qdWT431snUDsjrEEJwFIynHsvHKM6y7sJ6PmahdA/1f4OMuORtio2ZoriZu/1XJqgYHRqCjLtrBcV9603QPNLQ46qGo0fjBJqC8s5CvrCksqub92zkAdF4vMtpzCIfwLkka2OaQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(396003)(39850400004)(346002)(376002)(36840700001)(46966006)(81166007)(8676002)(82740400003)(53546011)(26005)(107886003)(5660300002)(36860700001)(4326008)(356005)(70206006)(9686003)(86362001)(55016002)(47076005)(336012)(6506007)(70586007)(82310400003)(316002)(2906002)(83380400001)(110136005)(33656002)(54906003)(478600001)(186003)(52536014)(7696005)(8936002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 05:53:40.6884
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 51a0fb8c-061b-47f9-194b-08d94c0be441
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT018.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4312

SGkgSmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBNb25kYXksIEp1bHkgMTksIDIwMjEgNDo0
MSBQTQ0KPiBUbzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+OyBqdWxpZW5AeGVu
Lm9yZw0KPiBDYzogQmVydHJhbmQgTWFycXVpcyA8QmVydHJhbmQuTWFycXVpc0Bhcm0uY29tPjsg
V2VpIENoZW4NCj4gPFdlaS5DaGVuQGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT47IHhlbi1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gc3N0YWJlbGxpbmlAa2VybmVsLm9yZw0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIFYzIDA3LzEwXSB4ZW46IHJlLWRlZmluZSBhc3NpZ25fcGFnZXMgYW5k
IGludHJvZHVjZQ0KPiBhc3NpZ25fcGFnZQ0KPiANCj4gT24gMTUuMDcuMjAyMSAwNzoxOCwgUGVu
bnkgWmhlbmcgd3JvdGU6DQo+ID4gSW4gb3JkZXIgdG8gZGVhbCB3aXRoIHRoZSB0cm91YmxlIG9m
IGNvdW50LXRvLW9yZGVyIGNvbnZlcnNpb24gd2hlbg0KPiA+IHBhZ2UgbnVtYmVyIGlzIG5vdCBp
biBhIHBvd2VyLW9mLXR3bywgdGhpcyBjb21taXQgcmUtZGVmaW5lDQo+ID4gYXNzaWduX3BhZ2Vz
IGZvciBuciBwYWdlcyBhbmQgYXNzaWduX3BhZ2UgZm9yIG9yaWdpbmFsIHBhZ2Ugd2l0aCBhIHNp
bmdsZQ0KPiBvcmRlci4NCj4gPg0KPiA+IEJhY2twb3J0aW5nIGNvbmZ1c2lvbiBjb3VsZCBiZSBo
ZWxwZWQgYnkgYWx0ZXJpbmcgdGhlIG9yZGVyIG9mDQo+ID4gYXNzaWduX3BhZ2VzIHBhcmFtZXRl
cnMsIHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgd291bGQgcG9pbnQgb3V0IHRoYXQNCj4gPiBhZGp1
c3RtZW50cyBhdCBjYWxsIHNpdGVzIGFyZSBuZWVkZWQuDQo+IA0KPiBCYWNrIG9uIHRoZSBpbml0
aWFsIGZvcm0gb2YgdGhpcyBwYXRjaCBKdWxpZW4gc2FpZDoNCj4gDQo+ICJIb3dldmVyLCBJIHRo
aW5rIEkgd291bGQgcHJlZmVyIGlmIHdlIGludHJvZHVjZSBhIG5ldyBpbnRlcmZhY2UgKG1heWJl
DQo+ICBhc3NpZ25fcGFnZXNfbnIoKSkgcmF0aGVyIHRoYW4gY2hhbmdlIHRoZSBtZWFuaW5nIG9m
IHRoZSBmaWVsZC4gVGhpcyBpcyAgZm9yIHR3bw0KPiByZWFzb25zOg0KPiAgICAgMSkgV2UgbGlt
aXQgdGhlIHJpc2sgdG8gbWFrZSBtaXN0YWtlIHdoZW4gYmFja3BvcnRpbmcgYSBwYXRjaCB0b3Vj
aA0KPiBhc3NpZ25fcGFnZXMoKS4NCj4gICAgIDIpIEFkZGluZyAoMVVMIDw8IG9yZGVyKSBmb3Ig
cHJldHR5IG11Y2ggYWxsIHRoZSBjYWxsZXIgaXMgbm90IG5pY2UuIg0KPiANCj4gMSkgaXMgdGFr
ZW4gY2FyZSBvZiBoZXJlIGFueXdheSAoYWxiZWl0IHNlZSB0aGUgcmVtYXJrIGJlbG93KSwgYW5k
IG9mIHRoZQ0KPiBjYWxsZXJzIG9ubHkgc29tZSB3b3VsZCByZWFsbHkgbmVlZCAiMVVMIDw8IiBh
ZGRlZCAob3RoZXJzIGNvdWxkIHNpbXBseQ0KPiBjb252ZXJ0IHRoZWlyIGxpdGVyYWwgMCB0byBs
aXRlcmFsIDEpLiBKdWxpZW4gLSBkbyB5b3Ugc3RpbGwgdGhpbmsgMikgaXMgcHJldHR5DQo+IGlt
cG9ydGFudCB0byBhdm9pZCBhdCB0aGUsIG92ZXJhbGwsIDIgcGxhY2VzIHRoYXQgd291bGQgYmUg
bGVmdD8NCj4gDQo+ID4gLS0tIGEveGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYw0KPiA+ICsr
KyBiL3hlbi9hcmNoL3g4Ni9wdi9kb20wX2J1aWxkLmMNCj4gPiBAQCAtNTU2LDcgKzU1Niw3IEBA
IGludCBfX2luaXQgZG9tMF9jb25zdHJ1Y3RfcHYoc3RydWN0IGRvbWFpbiAqZCwNCj4gPiAgICAg
ICAgICBlbHNlDQo+ID4gICAgICAgICAgew0KPiA+ICAgICAgICAgICAgICB3aGlsZSAoIGNvdW50
LS0gKQ0KPiA+IC0gICAgICAgICAgICAgICAgaWYgKCBhc3NpZ25fcGFnZXMoZCwgbWZuX3RvX3Bh
Z2UoX21mbihtZm4rKykpLCAwLCAwKSApDQo+ID4gKyAgICAgICAgICAgICAgICBpZiAoIGFzc2ln
bl9wYWdlKGQsIG1mbl90b19wYWdlKF9tZm4obWZuKyspKSwgMCwgMCkgKQ0KPiANCj4gSSB0aGlu
ayBpbiBhbGwgY2FzZXMgd2hlcmUgb3JkZXItMCBwYWdlcyBnZXQgcGFzc2VkLCB5b3UnZCByYXRo
ZXIgd2FudCB0byBjYWxsDQo+IGFzc2lnbl9wYWdlcygpIGRpcmVjdGx5IChpZiwgYXMgcGVyIGFi
b3ZlLCB3ZSdsbCBrZWVwIGJvdGggZnVuY3Rpb25zIGluIHRoZSBmaXJzdA0KPiBwbGFjZSkuDQo+
IA0KDQpTdXJlLiAgSSdsbCB1c2UgbGl0ZXJhbCAxLCBpdCdzIG1vcmUgcmVhc29uYWJsZSB0byBt
ZSBhbHNvLg0KDQo+ID4gLS0tIGEveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMNCj4gPiArKysgYi94
ZW4vY29tbW9uL3BhZ2VfYWxsb2MuYw0KPiA+IEBAIC0yMjgzLDggKzIyODMsOCBAQCB2b2lkIGlu
aXRfZG9taGVhcF9wYWdlcyhwYWRkcl90IHBzLCBwYWRkcl90IHBlKQ0KPiA+DQo+ID4gIGludCBh
c3NpZ25fcGFnZXMoDQo+ID4gICAgICBzdHJ1Y3QgZG9tYWluICpkLA0KPiA+ICsgICAgdW5zaWdu
ZWQgbG9uZyBuciwNCj4gPiAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnLA0KPiA+IC0gICAgdW5z
aWduZWQgaW50IG9yZGVyLA0KPiA+ICAgICAgdW5zaWduZWQgaW50IG1lbWZsYWdzKQ0KPiA+ICB7
DQo+IA0KPiBJJ20gYWZyYWlkIEkgY29uc2lkZXIgcHV0dGluZyAibnIiIGFoZWFkIG9mICJwZyIg
dW51c3VhbCAoY29uc2lkZXJpbmcgdGhlIHJlc3Qgb2YNCj4gb3VyIGNvZGUgYmFzZSkuIEhvdyBh
Ym91dA0KPiANCg0KPiBpbnQgYXNzaWduX3BhZ2VzKA0KPiAgICAgc3RydWN0IHBhZ2VfaW5mbyAq
cGcsDQo+ICAgICB1bnNpZ25lZCBsb25nIG5yLA0KPiAgICAgc3RydWN0IGRvbWFpbiAqZCwNCj4g
ICAgIHVuc2lnbmVkIGludCBtZW1mbGFncykNCj4gew0KPiANCj4gPw0KPiANCg0KU3VyZS4gVGh4
IGZvciByZWNvbnN0cnVjdGluZy4NCg0KPiA+IEBAIC0yMzU0LDYgKzIzNTQsMTEgQEAgaW50IGFz
c2lnbl9wYWdlcygNCj4gPiAgICAgIHJldHVybiByYzsNCj4gPiAgfQ0KPiA+DQo+ID4gK2ludCBh
c3NpZ25fcGFnZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGFnZV9pbmZvICpwZywgdW5zaWdu
ZWQgaW50IG9yZGVyLA0KPiA+ICsgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lbWZsYWdz
KSB7DQo+ID4gKyAgICByZXR1cm4gYXNzaWduX3BhZ2VzKGQsICgxVUwgPDwgb3JkZXIpLCBwZywg
bWVtZmxhZ3MpOw0KPiANCj4gTWF5IEkgYXNrIHRoYXQgeW91IG9taXQgdGhlIHVubmVjZXNzYXJ5
IHBhcmVudGhlc2VzPw0KPiANCg0KT2gsIHNvcnJ5LiBJJ2xsIHJlbW92ZSBpdCwgbG9vcHkgaGVh
ZCBzb21ldGltZXMuLi4NCg0KPiBKYW4NCg0KQ2hlZXJzDQpQZW5ueQ0KDQo=


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 07:37:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 07:37:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159145.292763 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m66nQ-00028c-HF; Wed, 21 Jul 2021 07:37:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159145.292763; Wed, 21 Jul 2021 07:37:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m66nQ-00028V-DE; Wed, 21 Jul 2021 07:37:36 +0000
Received: by outflank-mailman (input) for mailman id 159145;
 Wed, 21 Jul 2021 07:37:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KCq8=MN=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m66nO-00028P-2z
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 07:37:34 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.54]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 81cbd398-e9f6-11eb-8c09-12813bfff9fa;
 Wed, 21 Jul 2021 07:37:31 +0000 (UTC)
Received: from AS8PR04CA0188.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::13)
 by HE1PR0802MB2393.eurprd08.prod.outlook.com (2603:10a6:3:de::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.26; Wed, 21 Jul
 2021 07:37:25 +0000
Received: from AM5EUR03FT021.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:2f3:cafe::a) by AS8PR04CA0188.outlook.office365.com
 (2603:10a6:20b:2f3::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Wed, 21 Jul 2021 07:37:25 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT021.mail.protection.outlook.com (10.152.16.105) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 21 Jul 2021 07:37:24 +0000
Received: ("Tessian outbound 664b93226e0b:v99");
 Wed, 21 Jul 2021 07:37:24 +0000
Received: from 558697d06e3c.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 F4223BC7-12CA-4CEC-9F0D-AF87965C8C8C.1; 
 Wed, 21 Jul 2021 07:37:13 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 558697d06e3c.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 21 Jul 2021 07:37:13 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB4512.eurprd08.prod.outlook.com (2603:10a6:803:f4::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Wed, 21 Jul
 2021 07:37:11 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 07:37:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 81cbd398-e9f6-11eb-8c09-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=D0o6LQ/OB/7EFiQjCrKXlXZmbZvDPHc8Hf+xn7JjKnc=;
 b=DKIVjlrOCuaMU4gke+jjEF/ufVmkazDnPF6Gv6vdHOcMI8a5CbJm3qjFsvkYJAILefClc778S77Ok58hq2XFMTGDcRdFDnjrmVhynMEsrs+oTJdde6QwKEJRFDEUW5tU+enFrSYJHbBAgqB4LYJ+K1JYMnDkIszjWVAI1UTcyx4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OUL3K1xD0NdI47Alzk1xBrvl1j/ghEElh2hBv/8cqEhns0ksx4iujci44CZ/HaKgq9e4KIcC1KBVGcBGpBSZz+kY6xTq3S4+ZOiK6Zre/bdOoArwIPCYcHRVmdXhcp/nc/Kijg54E7qEFV1UEZ9YyO2we3deabHBIT00IQ7p6w8NL6Ar1GH2q5IuqBF3hk+FWSx6lWEmHl1U5/x9UXDYyx9THXJXaApIxbvTso5z4wpnP+x9hMszq8DzS7RnCAZooUi7WQby17SR/bpFjnWyaDisaPRj1DP+N4BHvDY+WuyM4+K0flUpTxTecH/GSK6vA73Yc+oFRsVk5fIFuG6DdQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=D0o6LQ/OB/7EFiQjCrKXlXZmbZvDPHc8Hf+xn7JjKnc=;
 b=KKH0k+loy4yu5Yj8FdeiOy+rmLS4XewWkpplRuVDjj+BnrkAvlHvNEcigcg4Ek9Ngl+7iF2BmV1R/vMXqFWjwhzpyoqeGkFLiR5xLfJUt5WnB+fYH+vvHkqIS6HmyutWtA3MvbSIO9LoGtyKlM5545OQ4zsFzmVWNoYqpu07j9yAGllzmWKEOG5lBo+wdsoOpTkkVW4odNY8wm+kCEhPNoeoBkswHcAAZSAaols1RHDdSh3Bb3cx3Ob9ziWI/a2IfOE9u1n5ZwzGlsn/n7ulIYqKuCF/JMZ5oU8knLgdXqPeYk0Byt2vL2Da3CnWfNPMvSKD6VKXTht2E1xyd6BRlA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=D0o6LQ/OB/7EFiQjCrKXlXZmbZvDPHc8Hf+xn7JjKnc=;
 b=DKIVjlrOCuaMU4gke+jjEF/ufVmkazDnPF6Gv6vdHOcMI8a5CbJm3qjFsvkYJAILefClc778S77Ok58hq2XFMTGDcRdFDnjrmVhynMEsrs+oTJdde6QwKEJRFDEUW5tU+enFrSYJHbBAgqB4LYJ+K1JYMnDkIszjWVAI1UTcyx4=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Jan Beulich <jbeulich@suse.com>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	nd <nd@arm.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, "julien@xen.org" <julien@xen.org>
Subject: RE: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and
 acquire_domstatic_pages
Thread-Topic: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and
 acquire_domstatic_pages
Thread-Index: AQHXeTjq+y3FueirQkOYkBcn9nCNvqtKDb8AgAMBuBA=
Date: Wed, 21 Jul 2021 07:37:11 +0000
Message-ID:
 <VE1PR08MB5215344641EB2E350FAE1D8AF7E39@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-9-penny.zheng@arm.com>
 <48c59068-296e-7060-1352-f07338833378@suse.com>
In-Reply-To: <48c59068-296e-7060-1352-f07338833378@suse.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 4E962547B3411A438EA6295E02656FC0.0
x-checkrecipientchecked: true
Authentication-Results-Original: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 5b1616a0-1208-468b-ac44-08d94c1a6202
x-ms-traffictypediagnostic: VI1PR08MB4512:|HE1PR0802MB2393:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<HE1PR0802MB239365EE3B3212588D49C243F7E39@HE1PR0802MB2393.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:2150;OLM:2150;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 ZbYBRZyoI1B+VOM9k2WmKc4SVikrWrWFcxf0WyGfL8rejvOsLuUpzn9AsgIhErWnVJ/3/1+rXn//GlaaK9+hbbv45e3+ZKfBc5f4G8wSF2Fd0YCWENxllOZpaVXI6h+M+0Ji6I7WkiY/mbCPpDVS4Hz4M8QVfVEZLlt34C0+pqeCw57uM9Mp+z6FrpqwnTWMbSL1/qOHPi752SKmSrT2GfzwnRmJHBm+cqDB1DNczfbYsz6UMOodG9k59UX/1VoyOW1kq7O43Qg1YbGgAH7L92XXqy7Mf1SqivNCUzBZkaZ0ZXiwqvHLhAgkIjEEpWd4CAGLPb5MHM51K64TswpvfV1AqePKTuYxI/c2FR9cq/gt/HJl7YVq22NATjhALxOjH8gcOo029niKHjrXP6rO2vyEcQeh/Sm9OXXET7PJr6TCD+/tZHRi1cvmYCpx+DoNk0PGWFyn1aw7MdkKqq+2DXe7MjxK2TvDD4UnJXtRdBuXWAFPRLlZNDCT2wq/xQkkP1+7j25mxG9wr1sTLAwVhe3Quu/fbvASUiXRoxuYQEOLpZdRIwF+BQtk+GqdQc7cczzgQQV79QViY+RqGbjSQhIsR2pDsFM9MYj0l7iTbiPerdvtQYJOrVkc0LrzmKIQZt3DB0PzAIcw0qHh+Jj5UahBxXs0YmxejIMArIhOJWiMRRnUc/EBwj2NpxJPM+1c0EuH64haQY0TKpH69z2Pjg==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(136003)(346002)(39850400004)(396003)(122000001)(26005)(316002)(64756008)(7696005)(66446008)(186003)(83380400001)(6506007)(478600001)(38100700002)(76116006)(33656002)(52536014)(71200400001)(53546011)(86362001)(4326008)(6916009)(2906002)(55016002)(66476007)(66946007)(8936002)(8676002)(5660300002)(54906003)(66556008)(9686003)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
 =?utf-8?Q?N+01xA90Jd4/tp89Rkz9rE0v1+MkKyC4NEfTfmU?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4512
Original-Authentication-Results: suse.com; dkim=none (message not signed)
 header.d=none;suse.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT021.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	20b55d95-9ce0-491e-68b8-08d94c1a5a6b
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	0oBT75GqlvFK7bLQ/7OX2MnAvH6JM+eSuG/zGb2F11IeoXVLBBAtENoznAeYdL9X0Tebq6Goy3CfV9m4fWTojMt40g3A084RO15pDSvOK9IK9isn2fVb/RW6SdJkQxSpU4e/je9GNwhd7BPk8Luz/xbgQKBVKhnPBzvr3kVj6ducmkyUhGRKndoKYrTxs8cV51bFcqTq7q7As0JMmbdW3ru5wpkN5fScGS95AwjRmzXn8x2OEo8biRcu82r1by3Jqhffm3+j56l4OO0xlDA7OjH4iEnVcJg1zPvL8ADLm9CUyJLJHAAgUDTIRr4LeYNEZer6PaORYtBruSuuAUHi3cWc0KvtkudkMRxQ4byw9JIofA8pSGf9x1by6z6SkTqgxM3hlnkHSUzp9na/MzwB9NLhkPrGJkLvLXMPuR5/dVnGTZsdVbdV4FPkx3qBxXdxCgG+WtN7DWfYNLCwcQXxQlibZ4Bevn0awLYnvGjFfVBaKHqmpuu77JeYLpkX7ZZMWoLVPUORa/1phxr25Kb47lr3jlPbzBf0NS/trUiFZj84o4iGl6taR1DDavB9DycZhsQnBbrJDFUc0YD+OFDf9YF9IPhRnyWDy3lAAfTHgSXzx+JWm0/ClyLIcR1Un7/E5Qk2pkH7HCf2EN1/ogOAqdDWyxqRG9HYVfu91NSSNe8ZzgxVLc6eZpMubR3BQnleBgTrpCbiUi84/fCshWn6Zg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(8936002)(55016002)(33656002)(70206006)(4326008)(26005)(83380400001)(81166007)(2906002)(9686003)(36860700001)(336012)(186003)(508600001)(5660300002)(8676002)(53546011)(82310400003)(86362001)(54906003)(316002)(7696005)(6862004)(52536014)(47076005)(356005)(6506007)(70586007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 07:37:24.6139
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 5b1616a0-1208-468b-ac44-08d94c1a6202
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT021.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2393

SGkgSmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmFuIEJldWxp
Y2ggPGpiZXVsaWNoQHN1c2UuY29tPg0KPiBTZW50OiBNb25kYXksIEp1bHkgMTksIDIwMjEgNToy
NiBQTQ0KPiBUbzogUGVubnkgWmhlbmcgPFBlbm55LlpoZW5nQGFybS5jb20+DQo+IENjOiBCZXJ0
cmFuZCBNYXJxdWlzIDxCZXJ0cmFuZC5NYXJxdWlzQGFybS5jb20+OyBXZWkgQ2hlbg0KPiA8V2Vp
LkNoZW5AYXJtLmNvbT47IG5kIDxuZEBhcm0uY29tPjsgeGVuLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnOw0KPiBzc3RhYmVsbGluaUBrZXJuZWwub3JnOyBqdWxpZW5AeGVuLm9yZw0KPiBTdWJq
ZWN0OiBSZTogW1BBVENIIFYzIDA4LzEwXSB4ZW4vYXJtOiBpbnRyb2R1Y2UgYWNxdWlyZV9zdGF0
aWNtZW1fcGFnZXMNCj4gYW5kIGFjcXVpcmVfZG9tc3RhdGljX3BhZ2VzDQo+IA0KPiBPbiAxNS4w
Ny4yMDIxIDA3OjE4LCBQZW5ueSBaaGVuZyB3cm90ZToNCj4gPiBAQCAtMTA2NSw2ICsxMDY5LDcz
IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZV9pbmZvICphbGxvY19oZWFwX3BhZ2VzKA0KPiA+ICAgICAg
cmV0dXJuIHBnOw0KPiA+ICB9DQo+ID4NCj4gPiArI2lmZGVmIENPTkZJR19TVEFUSUNfTUVNT1JZ
DQo+ID4gKy8qDQo+ID4gKyAqIEFjcXVpcmUgbnJfbWZucyBjb250aWd1b3VzIHJlc2VydmVkIHBh
Z2VzLCBzdGFydGluZyBhdCAjc21mbiwgb2YNCj4gPiArICogc3RhdGljIG1lbW9yeS4NCj4gPiAr
ICovDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGFnZV9pbmZvICphY3F1aXJlX3N0YXRpY21lbV9wYWdl
cyh1bnNpZ25lZCBsb25nIG5yX21mbnMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZm5fdCBzbWZuLA0KPiA+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50DQo+ID4gK21lbWZs
YWdzKQ0KPiANCj4gVGhpcyBhbmQgdGhlIG90aGVyIGZ1bmN0aW9uIG5vdCBiZWluZyBfX2luaXQs
IGFuZCB0aGVyZSBuZWl0aGVyIGJlaW5nIGFueSBjYWxsZXINCj4gbm9yIGFueSBmcmVlaW5nLCBh
IHF1ZXN0aW9uIGlzIHdoZXRoZXIgX19pbml0IHdhbnRzIGFkZGluZzsgcGF0Y2ggMTAgc3VnZ2Vz
dHMNCj4gc28uIFRoZSBsYWNrIG9mIGZyZWVpbmcgaW4gcGFydGljdWxhciBtZWFucyB0aGF0IGRv
bWFpbnMgY3JlYXRlZCB1c2luZyBzdGF0aWMNCj4gbWVtb3J5IHdvbid0IGJlIHJlc3RhcnRhYmxl
LCByZXF1aXJpbmcgYSBob3N0IHJlYm9vdCBpbnN0ZWFkLg0KPiANCg0KUmlnaHQgbm93LCBhbGwg
ZG9tYWluIG9uIHN0YXRpYyBhbGxvY2F0aW9uIGdldCBjb25zdHJ1Y3RlZCB0aHJvdWdoIGRldmlj
ZSB0cmVlLCBpbg0KYm9vdC11cCB0aW1lLiAgIl9faW5pdCIgaXMgcHJlZmVycmVkLg0KDQo+ID4g
K3sNCj4gPiArICAgIGJvb2wgbmVlZF90bGJmbHVzaCA9IGZhbHNlOw0KPiA+ICsgICAgdWludDMy
X3QgdGxiZmx1c2hfdGltZXN0YW1wID0gMDsNCj4gPiArICAgIHVuc2lnbmVkIGxvbmcgaTsNCj4g
PiArICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnOw0KPiA+ICsNCj4gPiArICAgIC8qIEZvciBub3cs
IGl0IG9ubHkgc3VwcG9ydHMgcHJlLWNvbmZpZ3VyZWQgc3RhdGljIG1lbW9yeS4gKi8NCj4gPiAr
ICAgIGlmICggIW1mbl92YWxpZChzbWZuKSB8fCAhbnJfbWZucyApDQo+ID4gKyAgICAgICAgcmV0
dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgc3Bpbl9sb2NrKCZoZWFwX2xvY2spOw0KPiA+ICsN
Cj4gPiArICAgIHBnID0gbWZuX3RvX3BhZ2Uoc21mbik7DQo+ID4gKw0KPiA+ICsgICAgZm9yICgg
aSA9IDA7IGkgPCBucl9tZm5zOyBpKysgKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICAgIC8qDQo+
ID4gKyAgICAgICAgICogUmVmZXJlbmNlIGNvdW50IG11c3QgY29udGludW91c2x5IGJlIHplcm8g
Zm9yIGZyZWUgcGFnZXMNCj4gPiArICAgICAgICAgKiBvZiBzdGF0aWMgbWVtb3J5KFBHQ19yZXNl
cnZlZCkuDQo+ID4gKyAgICAgICAgICovDQo+ID4gKyAgICAgICAgaWYgKCBwZ1tpXS5jb3VudF9p
bmZvICE9IChQR0Nfc3RhdGVfZnJlZSB8IFBHQ19yZXNlcnZlZCkgKQ0KPiA+ICsgICAgICAgIHsN
Cj4gPiArICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19FUlINCj4gPiArICAgICAgICAgICAgICAg
ICAgICJwZ1slbHVdIFN0YXRpYyBNRk4gJSJQUklfbWZuIiBjPSUjbHggdD0lI3hcbiIsDQo+ID4g
KyAgICAgICAgICAgICAgICAgICBpLCBtZm5feChwYWdlX3RvX21mbihwZyArIGkpKSwNCj4gPiAr
ICAgICAgICAgICAgICAgICAgIHBnW2ldLmNvdW50X2luZm8sIHBnW2ldLnRsYmZsdXNoX3RpbWVz
dGFtcCk7DQo+ID4gKyAgICAgICAgICAgIEJVRygpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+
ID4gKyAgICAgICAgaWYgKCAhKG1lbWZsYWdzICYgTUVNRl9ub190bGJmbHVzaCkgKQ0KPiA+ICsg
ICAgICAgICAgICBhY2N1bXVsYXRlX3RsYmZsdXNoKCZuZWVkX3RsYmZsdXNoLCAmcGdbaV0sDQo+
ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRsYmZsdXNoX3RpbWVzdGFtcCk7
DQo+ID4gKw0KPiA+ICsgICAgICAgIC8qDQo+ID4gKyAgICAgICAgICogUHJlc2VydmUgZmxhZyBQ
R0NfcmVzZXJ2ZWQgYW5kIGNoYW5nZSBwYWdlIHN0YXRlDQo+ID4gKyAgICAgICAgICogdG8gUEdD
X3N0YXRlX2ludXNlLg0KPiA+ICsgICAgICAgICAqLw0KPiA+ICsgICAgICAgIHBnW2ldLmNvdW50
X2luZm8gPSAoUEdDX3Jlc2VydmVkIHwgUEdDX3N0YXRlX2ludXNlKTsNCj4gPiArICAgICAgICAv
KiBJbml0aWFsaXNlIGZpZWxkcyB3aGljaCBoYXZlIG90aGVyIHVzZXMgZm9yIGZyZWUgcGFnZXMu
ICovDQo+ID4gKyAgICAgICAgcGdbaV0udS5pbnVzZS50eXBlX2luZm8gPSAwOw0KPiA+ICsgICAg
ICAgIHBhZ2Vfc2V0X293bmVyKCZwZ1tpXSwgTlVMTCk7DQo+ID4gKw0KPiA+ICsgICAgICAgIC8q
DQo+ID4gKyAgICAgICAgICogRW5zdXJlIGNhY2hlIGFuZCBSQU0gYXJlIGNvbnNpc3RlbnQgZm9y
IHBsYXRmb3JtcyB3aGVyZSB0aGUNCj4gPiArICAgICAgICAgKiBndWVzdCBjYW4gY29udHJvbCBp
dHMgb3duIHZpc2liaWxpdHkgb2YvdGhyb3VnaCB0aGUgY2FjaGUuDQo+ID4gKyAgICAgICAgICov
DQo+ID4gKyAgICAgICAgZmx1c2hfcGFnZV90b19yYW0obWZuX3gocGFnZV90b19tZm4oJnBnW2ld
KSksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKG1lbWZsYWdzICYgTUVNRl9u
b19pY2FjaGVfZmx1c2gpKTsNCj4gDQo+IEluZGVudGF0aW9uLg0KPiANCj4gPiArICAgIH0NCj4g
PiArDQo+ID4gKyAgICBpZiAoIG5lZWRfdGxiZmx1c2ggKQ0KPiA+ICsgICAgICAgIGZpbHRlcmVk
X2ZsdXNoX3RsYl9tYXNrKHRsYmZsdXNoX3RpbWVzdGFtcCk7DQo+ID4gKw0KPiA+ICsgICAgc3Bp
bl91bmxvY2soJmhlYXBfbG9jayk7DQo+IA0KPiBJJ20gcHJldHR5IHN1cmUgSSBkaWQgY29tbWVu
dCBiZWZvcmUgb24gdGhlIGZsdXNoX3BhZ2VfdG9fcmFtKCkgYmVpbmcgaW5zaWRlDQo+IHRoZSBs
b2NrZWQgcmVnaW9uIGhlcmUuIFdoaWxlIFhTQS0zNjQgZG9lc24ndCBhcHBseSBoZXJlIGJlY2F1
c2UgeW91IGRvbid0DQo+IGRlZmVyIHNjcnViYmluZyAoeWV0KSwgdGhlIGZsdXNoaW5nIG1heSBz
dGlsbCB0YWtlIHRvbyBsb25nIHRvIGhhcHBlbiBpbnNpZGUgdGhlDQo+IGxvY2tlZCByZWdpb24u
IE9mIGNvdXJzZSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBoZXJlIG9uIHdoZW4gZXhhY3RseSB0aGUg
Y2FsbChzKQ0KPiB0byB0aGlzIGNvZGUgd2lsbCBoYXBwZW4uIEluIHBhcnRpY3VsYXIgaWYgb3Ro
ZXIgRG9tVS1zIGNhbiBhbHJlYWR5IGJlIHJ1bm5pbmcNCj4gYXQgdGhhdCBwb2ludCwgdGhpcyBt
YXkgbm90IGJlIHRvbGVyYWJsZSBieSBzb21lIG9mIHRoZW0uIFlldCBpZiB0aGlzIGlzDQo+IGlu
dGVudGlvbmFsIGFuZCBkZWVtZWQgbm90IGEgcHJvYmxlbSwgdGhlbiBJJ2QgaGF2ZSBraW5kIG9m
IGV4cGVjdGVkIHRoZQ0KPiBkZXNjcmlwdGlvbiB0byBtZW50aW9uIHRoaXMgZGlmZmVyZW5jZSBm
cm9tIGFsbG9jX2hlYXBfcGFnZXMoKSwgd2hpY2ggeW91IHNheQ0KPiB0aGlzIGlzIGFuIGVxdWl2
YWxlbnQgb2YuDQo+IA0KDQpTb3JyeSBmb3IgbWlzc2luZyB0aGUgY29tbWVudHMgb24gdGhlIGZs
dXNoX3BhZ2VfdG9fcmFtKCkgYmVpbmcgaW5zaWRlIHRoZQ0KbG9ja2VkIHJlZ2lvbi4NCg0KVGFr
aW5nIGEgd2hpbGUgcmVhZGluZyB0aGUgWFNBLTM2NCwgeW91J3JlIHJpZ2h0LCBlc3BlY2lhbGx5
IHdpdGggYXN5bmNocm9ub3VzDQpzY3J1YmJpbmcgaW4gdGhlIHRvLWRvIGxpc3QsIHB1dHRpbmcg
Y2xlYW5pbmcgY2FjaGUgb3V0c2lkZSBvZiB0aGUgbG9ja2VkIHJlZ2lvbg0KaXMgbmVjZXNzYXJ5
IGhlcmUuDQoNCj4gPiBAQCAtMjQxMSw2ICsyNDgzLDQyIEBAIHN0cnVjdCBwYWdlX2luZm8gKmFs
bG9jX2RvbWhlYXBfcGFnZXMoDQo+ID4gICAgICByZXR1cm4gcGc7DQo+ID4gIH0NCj4gPg0KPiA+
ICsjaWZkZWYgQ09ORklHX1NUQVRJQ19NRU1PUlkNCj4gPiArLyoNCj4gPiArICogQWNxdWlyZSBu
cl9tZm5zIGNvbnRpZ3VvdXMgcGFnZXMsIHN0YXJ0aW5nIGF0ICNzbWZuLCBvZiBzdGF0aWMNCj4g
PiArbWVtb3J5LA0KPiA+ICsgKiB0aGVuIGFzc2lnbiB0aGVtIHRvIG9uZSBzcGVjaWZpYyBkb21h
aW4gI2QuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcGFnZV9pbmZvICphY3F1aXJlX2RvbXN0YXRp
Y19wYWdlcygNCj4gPiArICAgICAgICBzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG5y
X21mbnMsIG1mbl90IHNtZm4sDQo+ID4gKyAgICAgICAgdW5zaWduZWQgaW50IG1lbWZsYWdzKQ0K
PiA+ICt7DQo+ID4gKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZyA9IE5VTEw7DQo+ID4gKw0KPiA+
ICsgICAgQVNTRVJUKCFpbl9pcnEoKSk7DQo+ID4gKw0KPiA+ICsgICAgcGcgPSBhY3F1aXJlX3N0
YXRpY21lbV9wYWdlcyhucl9tZm5zLCBzbWZuLCBtZW1mbGFncyk7DQo+ID4gKyAgICBpZiAoICFw
ZyApDQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgLyogUmlnaHQg
bm93LCBNRU1GX25vX293bmVyIGNhc2UgaXMgbWVhbmluZ2xlc3MgaGVyZS4gKi8NCj4gPiArICAg
IEFTU0VSVChkKTsNCj4gPiArICAgIGlmICggbWVtZmxhZ3MgJiBNRU1GX25vX3JlZmNvdW50ICkN
Cj4gPiArICAgIHsNCj4gPiArICAgICAgICB1bnNpZ25lZCBsb25nIGk7DQo+ID4gKw0KPiA+ICsg
ICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfbWZuczsgaSsrICkNCj4gPiArICAgICAgICAgICAg
cGdbaV0uY291bnRfaW5mbyB8PSBQR0NfZXh0cmE7DQo+ID4gKyAgICB9DQo+IA0KPiBXaXRoIE1F
TUZfbm9fb3duZXIgbm93IGNhbGxlZCBvdXQgYXMgbWVhbmluZ2xlc3MgaGVyZSwgd2hhdCBhYm91
dA0KPiBNRU1GX25vX3JlZmNvdW50Pw0KPiANCg0KSSBjb3VsZCBub3QgdGhpbmsgb2YgYSBjYXNl
IHdoZXJlICJtZW1mbGFncyAmIE1FTUZfbm9fcmVmY291bnQiIGlzIG5lZWRlZCByaWdodCBub3cu
DQoNCkFsbCBhY3F1aXJlZCBwYWdlcyBhcmUgZm9yIGd1ZXN0IFJBTSByaWdodCBub3csIGV4dHJh
IHBhZ2VzIGxpa2UgZ3JhbnQgdGFibGUsIGV0YywgYXJlIG5vdCBzdXBwb3J0ZWQNCm9uIGRvbWFp
biBvbiBzdGF0aWMgYWxsb2NhdGlvbiwgZXZlbiBtb3JlLCBhbnkgZG9tMC1sZXNzIGRvbWFpbi4N
Cg0KSSdsbCByZW1vdmUgdGhpcyBwYXJ0IGFuZCBwdXQgYSBmZXcgY29tbWVudHMgb24gaXQuDQoN
Cj4gSmFuDQoNCkNoZWVycw0KUGVubnkNCg0K


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 07:38:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 07:38:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159152.292775 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m66oZ-0002r1-0M; Wed, 21 Jul 2021 07:38:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159152.292775; Wed, 21 Jul 2021 07:38:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m66oY-0002qu-TW; Wed, 21 Jul 2021 07:38:46 +0000
Received: by outflank-mailman (input) for mailman id 159152;
 Wed, 21 Jul 2021 07:38:45 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m66oX-0002lc-Bf; Wed, 21 Jul 2021 07:38:45 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m66oX-0005aQ-5y; Wed, 21 Jul 2021 07:38:45 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m66oW-0004yR-RE; Wed, 21 Jul 2021 07:38:44 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m66oW-0002ar-Qg; Wed, 21 Jul 2021 07:38:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=c5RzuTKdeobepAJRROfGdfFOw3D6XXWoe8SYRiJtdv8=; b=d29mddkYWWEaOKpzYRkUKComlQ
	yF2Eb5PF57CuAKXcOiAHW+gepbj1/dK6uDpeulZHx8gkYpwylONZyYMiQEUdqBpLg0Is+4Is67dtm
	1Ftr63UdYds49ZhjdQQV52QWkcdZrmLAOqaa/iTqAvpR0zE0McmqaQ9BpG5qQY2I5+JU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163856-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163856: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 07:38:44 +0000

flight 163856 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163856/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  14 guest-start    fail in 163841 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-arm64-arm64-xl-thunderx 13 debian-fixup     fail in 163841 pass in 163856
 test-arm64-arm64-xl          13 debian-fixup     fail in 163841 pass in 163856
 test-arm64-arm64-xl-credit2  13 debian-fixup               fail pass in 163841

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

version targeted for testing:
 linux                8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  354 days
Failing since        152366  2020-08-01 20:49:34 Z  353 days  603 attempts
Testing same since   163841  2021-07-20 12:41:35 Z    0 days    2 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978216 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 07:52:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 07:52:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159161.292793 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6727-0005HB-Ck; Wed, 21 Jul 2021 07:52:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159161.292793; Wed, 21 Jul 2021 07:52:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6727-0005H4-9j; Wed, 21 Jul 2021 07:52:47 +0000
Received: by outflank-mailman (input) for mailman id 159161;
 Wed, 21 Jul 2021 07:52:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=KCq8=MN=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m6726-0005Gy-3t
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 07:52:46 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.13.80]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d949b922-752a-4cbc-bdd8-09e96a58ac4c;
 Wed, 21 Jul 2021 07:52:43 +0000 (UTC)
Received: from PR0P264CA0265.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::13) by
 DB9PR08MB7039.eurprd08.prod.outlook.com (2603:10a6:10:2cf::5) with
 Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.31; Wed, 21 Jul 2021 07:52:40 +0000
Received: from VE1EUR03FT003.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:100:1:cafe::bb) by PR0P264CA0265.outlook.office365.com
 (2603:10a6:100:1::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend
 Transport; Wed, 21 Jul 2021 07:52:40 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT003.mail.protection.outlook.com (10.152.18.108) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 21 Jul 2021 07:52:40 +0000
Received: ("Tessian outbound b81a99a0393d:v99");
 Wed, 21 Jul 2021 07:52:39 +0000
Received: from 12315cd80173.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 C1CD8C61-09AD-4C33-9C33-4957257200B6.1; 
 Wed, 21 Jul 2021 07:52:30 +0000
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 12315cd80173.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 21 Jul 2021 07:52:30 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VE1PR08MB4672.eurprd08.prod.outlook.com (2603:10a6:802:a3::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Wed, 21 Jul
 2021 07:52:28 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::2807:2ff9:e371:2918%7]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 07:52:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d949b922-752a-4cbc-bdd8-09e96a58ac4c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iY7ZxzNpNzB8rIsM7J11jX6/cP1VaupkN8hcmc02UxM=;
 b=lFyR7g80FfU+ukMBgSw+8+orn4wGQ0trQbQr7zr62L1SJwqGmB8hTN08IGCr95oifIUHHa4QTZl6G7IXh890mOtGcMNP/HUHNC825okgID3t2ali27Pu+KG1Ntp2DhuW+miAj6PN7BsdgLGm4MgRt/WjOhLPLsK+O67rSfPna4g=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dslnP5mN0uOcePF0+C81KhV1CXsG8WKTAuaCvJdVar9s4OsTxjApeEQSXqTd3OLGxVctpeOD/QSmvAATHmvA7BjTMw0mxKgX8OShlaYbShk2BfRoPSMq3BKisJyetQotYVJW3Iu99s8w6T/Q9Lji62bFeE5nRq/PqJYC0Vhsil3UskABTj7bYQv9M8hAX6LQPoXIvUYhSyK2M39g5rHMwqm2mnh+DYVVjviM0FoXeaNDKfxGLBkpxijMYt8tqf4Gi/MBbG7oBMy3whdae4+uUFhK3RK88mGxK8xKwa1UiSpPRTflvuGry9Oe/j4UQv97D08V8eIfq9wRYq/C2ec1ZA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iY7ZxzNpNzB8rIsM7J11jX6/cP1VaupkN8hcmc02UxM=;
 b=j1pojPEVVvr8ublDUWEuXHfgRFcrKkrZZGtVInXBq1I57aFcLceYNoUUzAT3wbF8oGUQjUad+Hzp0TQUu3LcfmdE70IWKlPWJc2KMuQcrsqj2nCZjM8Yx5Q73rqgIytSBGDyXqkCH90DCZ3tjjtmaCX0gxdr93Wyz5HPDDwCimi5xaJZTsxwiuIzToj74cnYdGWsksSyrgHTqw183GrOh4zxAR27Tmwoux0MxUKTRD/ggVSQA6PnuGh4qqJCfBTUiXtMxlur5UahsGTsn/3yz48By2XlmH0RskV4xK6QHbpkSzaRXOBLluffvCfq3SG4VD2aiEfLHus5tq9+h+jhaQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=iY7ZxzNpNzB8rIsM7J11jX6/cP1VaupkN8hcmc02UxM=;
 b=lFyR7g80FfU+ukMBgSw+8+orn4wGQ0trQbQr7zr62L1SJwqGmB8hTN08IGCr95oifIUHHa4QTZl6G7IXh890mOtGcMNP/HUHNC825okgID3t2ali27Pu+KG1Ntp2DhuW+miAj6PN7BsdgLGm4MgRt/WjOhLPLsK+O67rSfPna4g=
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	nd <nd@arm.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>, Jan Beulich <jbeulich@suse.com>
Subject: RE: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and
 acquire_domstatic_pages
Thread-Topic: [PATCH V3 08/10] xen/arm: introduce acquire_staticmem_pages and
 acquire_domstatic_pages
Thread-Index: AQHXeTjq+y3FueirQkOYkBcn9nCNvqtKDb8AgAAJhwCAAvzIwA==
Date: Wed, 21 Jul 2021 07:52:27 +0000
Message-ID:
 <VE1PR08MB5215B20345ED4C5C915A337EF7E39@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-9-penny.zheng@arm.com>
 <48c59068-296e-7060-1352-f07338833378@suse.com>
 <7753fe1f-7a5c-6205-a184-25190ad43286@xen.org>
In-Reply-To: <7753fe1f-7a5c-6205-a184-25190ad43286@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 380849101CB4524B8B72DFE12CD8A749.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: aae5517f-7f82-40ab-21e4-08d94c1c83d2
x-ms-traffictypediagnostic: VE1PR08MB4672:|DB9PR08MB7039:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB9PR08MB703950D6DFDEA7EC597311B7F7E39@DB9PR08MB7039.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 Qyf0L8o/eKZhj4rR8cDLyERB/JWXwXQ4ebLZoAqfiqCXaaLIzc+smhmnxP9aVHd9v7Fu38qVWssNjTel6yXyMHHBD3rRQXXs7nxdJjqHSpwhgpkVW54Quql9jHufLsXK/HjmvqyClG4PE9qFW13HQJ0xJcfjZ5bapXEukbr118jQSqlvVfrpPSHjjMw+e2VFuy0WlzgWcr8SYwYOt9Et3J5KkzwKEPUYQh0FxC+AiAdNqbNizCgUGm52+oSPJzs8Vu1Nr9JkN8YPk3GG9UAQ/7J67TqD0bWEe3tNXcunGi/2ZB4YrgSVpByDKI970TTHbYJClnvz/N4lmfLMSWwN4Ss7O5t8i5p1DNTnB8CofpmHw0fNsR7Yjhd4k83mjoyyA7ZrWaSjMRAmNR/l+XJ2ayZ7j8FYhKtRg/bsxt9IXpLjWTlR+yj4CAQ9xFF66xy6+xlZ7j3f8qqoRrKWZL8y9q3YgWopieuop0SC2uHDDrL+TeVbpIQ/vXd6KyY5B1MGmOuYGL4hH3GjG0T+d1mdVaZFlX50cN6wXfUP+225jAV/hYDBKJg+Ai05ufx7qxIqVru6JMuE+/1d4o8qF5Q1JCrgaxJZ7oQQixzW8eKEGpM5o0VJDpeb7/3cH5xzY/l0wdOyQtx4eW62SkjBJKRXUxEqGYHSI/Vzsc+jc8h+6pBy4/5MvS/BYnqx/wb7yGGf/dpw5RlH2e4YkP2MRNLRhQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(346002)(366004)(39850400004)(136003)(9686003)(66556008)(76116006)(66476007)(71200400001)(55016002)(122000001)(8676002)(5660300002)(316002)(83380400001)(38100700002)(86362001)(8936002)(2906002)(66446008)(64756008)(186003)(26005)(7696005)(54906003)(6916009)(53546011)(478600001)(66946007)(33656002)(6506007)(52536014)(4326008)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4672
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT003.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	d772a9a8-bd4e-4e6e-b7d8-08d94c1c7c78
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	P2EQl2yAzdW76VTx5aCGiwD3oaReNfmN5CZMRJN+Hbu0bETodcM+GJo77zWf19C2jc6XhKpoAqeyMlSkxa9jMP9CLGIGeidFKRefYC3h/ZRPRyHMolHNZF5qKPbx/aVyU+GuSeslPaYv6UNE+QZddcCDj13T3kHnTYGsGa9lmcqHsMv+6NTUp8AQW3VTjHDSXmvP1TUY1MM6aRbQNh1rkc1xMMchAZ24na1BbvipZMy5mbmIzk37/DdYb5ikqzyRGmYf0SVWPelJVKJFOz2E4+jqScnPXVesifWqPkos9Azviq1MwCca0U2ywPZBZQ8nlU9RL9g44N3LPI+ei3CugIkclvtgJifDQsk3ZfJavt+rOM/nEuS+I5CJhy5ZEWnWvKiKa6AUKxfGFFGAVsQ1L0ihp7eK+FxFQ6OxtY18+TH+qvOmhy+UlDg36tzFRmuP70Y36F1D0/qrXVobspyFwRjmKNE25jdTsgXKPNCeubAjWDMnQVt1vlC64NeyyAlyB75ogIsne5TmL8GTJa6sUtIxd/7vbBR0kszc2pbX536bdNdAkzJRHNxM94NErCyO4RbvtcDxZK1u2QVWhMjYsOvNJBkm3yEBcYpaK2ZJ03DNU5brhuBV5tr2z2Fhd+UgZngCt6fYr8iDR2Bhgvx00mB/VAPMI7KHxTACepONQ43USEGFzcDRWXRQizSJcTTQ8Zaooop7ZbQRqQx1fznAVw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(376002)(39850400004)(396003)(36840700001)(46966006)(478600001)(8936002)(36860700001)(8676002)(4326008)(316002)(336012)(54906003)(2906002)(83380400001)(107886003)(6862004)(9686003)(70206006)(82740400003)(86362001)(33656002)(52536014)(5660300002)(53546011)(26005)(55016002)(7696005)(186003)(70586007)(82310400003)(356005)(81166007)(47076005)(6506007);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 07:52:40.2828
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: aae5517f-7f82-40ab-21e4-08d94c1c83d2
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT003.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7039

SGkgSnVsaWVuIA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEp1bGll
biBHcmFsbCA8anVsaWVuQHhlbi5vcmc+DQo+IFNlbnQ6IE1vbmRheSwgSnVseSAxOSwgMjAyMSA2
OjAwIFBNDQo+IFRvOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+OyBQZW5ueSBaaGVu
ZyA8UGVubnkuWmhlbmdAYXJtLmNvbT4NCj4gQ2M6IEJlcnRyYW5kIE1hcnF1aXMgPEJlcnRyYW5k
Lk1hcnF1aXNAYXJtLmNvbT47IFdlaSBDaGVuDQo+IDxXZWkuQ2hlbkBhcm0uY29tPjsgbmQgPG5k
QGFybS5jb20+OyB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7DQo+IHNzdGFiZWxsaW5p
QGtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCBWMyAwOC8xMF0geGVuL2FybTogaW50
cm9kdWNlIGFjcXVpcmVfc3RhdGljbWVtX3BhZ2VzDQo+IGFuZCBhY3F1aXJlX2RvbXN0YXRpY19w
YWdlcw0KPiANCj4gSGkgSmFuLA0KPiANCj4gT24gMTkvMDcvMjAyMSAxMDoyNiwgSmFuIEJldWxp
Y2ggd3JvdGU6DQo+ID4gT24gMTUuMDcuMjAyMSAwNzoxOCwgUGVubnkgWmhlbmcgd3JvdGU6DQo+
ID4+IEBAIC0xMDY1LDYgKzEwNjksNzMgQEAgc3RhdGljIHN0cnVjdCBwYWdlX2luZm8gKmFsbG9j
X2hlYXBfcGFnZXMoDQo+ID4+ICAgICAgIHJldHVybiBwZzsNCj4gPj4gICB9DQo+ID4+DQo+ID4+
ICsjaWZkZWYgQ09ORklHX1NUQVRJQ19NRU1PUlkNCj4gPj4gKy8qDQo+ID4+ICsgKiBBY3F1aXJl
IG5yX21mbnMgY29udGlndW91cyByZXNlcnZlZCBwYWdlcywgc3RhcnRpbmcgYXQgI3NtZm4sIG9m
DQo+ID4+ICsgKiBzdGF0aWMgbWVtb3J5Lg0KPiA+PiArICovDQo+ID4+ICtzdGF0aWMgc3RydWN0
IHBhZ2VfaW5mbyAqYWNxdWlyZV9zdGF0aWNtZW1fcGFnZXModW5zaWduZWQgbG9uZyBucl9tZm5z
LA0KPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1mbl90IHNtZm4sDQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50DQo+ID4+ICttZW1mbGFncykNCj4gPg0KPiA+IFRoaXMg
YW5kIHRoZSBvdGhlciBmdW5jdGlvbiBub3QgYmVpbmcgX19pbml0LCBhbmQgdGhlcmUgbmVpdGhl
ciBiZWluZw0KPiA+IGFueSBjYWxsZXIgbm9yIGFueSBmcmVlaW5nLCBhIHF1ZXN0aW9uIGlzIHdo
ZXRoZXIgX19pbml0IHdhbnRzIGFkZGluZzsNCj4gPiBwYXRjaCAxMCBzdWdnZXN0cyBzby4gVGhl
IGxhY2sgb2YgZnJlZWluZyBpbiBwYXJ0aWN1bGFyIG1lYW5zIHRoYXQNCj4gPiBkb21haW5zIGNy
ZWF0ZWQgdXNpbmcgc3RhdGljIG1lbW9yeSB3b24ndCBiZSByZXN0YXJ0YWJsZSwgcmVxdWlyaW5n
IGENCj4gPiBob3N0IHJlYm9vdCBpbnN0ZWFkLg0KPiANCj4gSSBhbSBvcGVuIHRvIHJlcXVlc3Qg
YW4gaG9zdCByZWJvb3QgaW4gY2FzZSBvZiBhbiBpc3N1ZS4gQWx0aG91Z2gsIGl0IHdvdWxkIGJl
DQo+IGdvb2QgdG8gaGF2ZSBjb2RlIGluIHBsYWNlIGZvciB0aGF0Lg0KPiANCj4gUmVnYXJkbGVz
cyB0aGUgcmVib290IHBhcnQsIEkgd291bGQgc3RpbGwgZXhwZWN0IHRoZSBkb21haW4gdG8gYmFs
bG9vbiBpbi9vdXQNCj4gbWVtb3J5LiBUaGlzIGlzIHByZXR0eSBicm9rZW4gdG9kYXkgYmVjYXVz
ZSBYZW4gd291bGQgZW5kIHVwIHRvIGdpdmUgdGhlDQo+IG1lbW9yeSB0byB0aGUgaGVhcCBhbGxv
Y2F0b3IgYW5kIHRoZSBuZXh0IGFsbG9jYXRpb24gd291bGQgYmUgdGhyb3VnaCB0aGUNCj4gaGVh
cCBhbGxvY2F0ZS4NCj4gDQo+IEZvciBydW50aW1lICJmcmVlL2FsbG9jYXRlIiwgd2UgbWF5IHdh
bnQgdG8gZm9sbG93IHRoZSBzYW1lIGJlaGF2aW9yIGFzDQo+IGRpcmVjdC1tYXBwZWQgZG9tYWlu
IChpLmUuIEdGTiA9PSBNRk4pOiB0aGUgcGFnZSB3aWxsIG5vdCBiZSBnaXZlbiBiYWNrIHRvDQo+
IGFueSBhbGxvY2F0b3IgYW5kIHdlIG9ubHkgY2hlY2sgaWYgdGhlIHBhZ2UgYmVsb25ncyB0byB0
aGUgZG9tYWluIG9uDQo+IGFsbG9jYXRpb24uDQo+IA0KPiBTbyBhZGRpbmcgX19pbml0IGZvciBh
Y3F1aXJlX3N0YXRpY21lbV9wYWdlcygpIGlzIHByb2JhYmx5IGZpbmUuDQo+IA0KPiBPbiBhIHNp
ZGUgbm9kZSwgb24gdjIsIEkgaGF2ZSByZXF1ZXN0ZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbGlz
dCBvZiBtaXNzaW5nDQo+IHBpZWNlcy4gQFBlbm55LCB3aGVyZSBjYW4gSSBmaW5kIHRoZSBsaXN0
Pw0KPiANCg0KT2gsIHNvcnJ5Li4uIA0KDQpJIHRob3VnaHQgeW91IHdlcmUgcmVxdWVzdGluZyBh
IG5ldyBtYWlsIGxpc3QgaXNzdWUgdG8gdHJhY2sgYWxsIG1pc3NpbmcgcGllY2VzIGluIEFSTS4u
Lg0KQW5kIGEgc2Vjb25kIHRob3VnaCBoZXJlLCB5b3Ugc2hhbGwgb25seSBtZWFuIHRoZSBtaXNz
aW5nIHBpZWNlcyBmb3IgdGhpcyBwYXRjaCBzZXJpZS4NCg0KSSdsbCBkbyBhIHF1aWNrIHN1bS11
cCBoZXJlIGFuZCBwdXQgaW4gdGhlIFBhdGNoIHY0IGNvdmVyIGxldHRlcjoNCg0KVE9ETzoNCi0g
cmVib290IGRvbWFpbiBvbiBzdGF0aWMgYWxsb2NhdGlvbi4NCi0gQWxsIG1lbW9yeS1vcHMoaHlw
ZXJjYWxscykgcmVnYXJkaW5nIGRvbWFpbiBvbiBzdGF0aWMgYWxsb2NhdGlvbiB0byBiYWxsb29u
IGluL291dCBtZW1vcnkNCi0gYXN5bmNocm9ub3VzbHkgc2NydWJiaW5nIFBHQ19yZXNlcnZlZCBw
YWdlcw0KLSBjb25zaWRlciBkb21haW4gb24gc3RhdGljIGFsbG9jYXRpb24gb24gTlVNQS1zdXBw
b3J0IHNjZW5hcmlvDQoNCj4gQ2hlZXJzLA0KPiANCj4gLS0NCj4gSnVsaWVuIEdyYWxsDQoNCkNo
ZWVycywNCg0KLS0NClBlbm55IFpoZW5nDQo=


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 08:10:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 08:10:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159178.292807 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67JB-0008Vg-A4; Wed, 21 Jul 2021 08:10:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159178.292807; Wed, 21 Jul 2021 08:10:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67JB-0008VZ-79; Wed, 21 Jul 2021 08:10:25 +0000
Received: by outflank-mailman (input) for mailman id 159178;
 Wed, 21 Jul 2021 08:10:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=NGKG=MN=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m67J9-0008VT-Rc
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 08:10:23 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 178fbab2-e9fb-11eb-8c09-12813bfff9fa;
 Wed, 21 Jul 2021 08:10:21 +0000 (UTC)
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2050.outbound.protection.outlook.com [104.47.4.50]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-24-gElLqH_KMNeIB8VfQjF-6w-1; Wed, 21 Jul 2021 10:10:19 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5326.eurprd04.prod.outlook.com (2603:10a6:803:57::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Wed, 21 Jul
 2021 08:10:15 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 08:10:15 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0163.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1b::31) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 21 Jul 2021 08:10:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 178fbab2-e9fb-11eb-8c09-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626855020;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=kocI4D2dJiS81cLtvgQrxWrlWLMgPZKDLgcY+/Zijo0=;
	b=LgRPe9bbMIkBleDWbgr1hA3j8vev4IkiGQLInXsAbg3YG/PAwXZuiHv5fBQV3llSXhjP1n
	l3Y86X8GsOPzuwlVjsmsbde5uohQxX577P6MSI5my7IaWlUK/YCipo4PxP9G9hgNRjPa57
	YOJ3QsF3+8QXXMoKITOte9o041K9WJM=
X-MC-Unique: gElLqH_KMNeIB8VfQjF-6w-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TuU4XGq62SNIQWLvpOZkgHvLc4chpzr5dh60Ruf7C2SkI2p3YSnWdgNX633ozEjoNM+r2drFRsMVqPw8lbrGmba53h1NIdpROR30qqOvy45b1ugQeKDoDn8jpJ6H1+nbvkYl3oWqE3tbtBpAX07MQQSfPymrJamVzUzJXr1bDO3iJzy864XIGvx5yqNqHKFuI72syQrNcR0UYBw5rKVssXMbPaMDtEfav7OASZZ7qw5Nj+ZTVteq5F7Xj3hvkehK6bia67WfXsTw1gpGTm1mRLcP8NrHZnHKceG6xe+NokmTFAwKnHCDJqCcyAYBBKcvSbzZQw9nFd+sFHNihqOjmw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kocI4D2dJiS81cLtvgQrxWrlWLMgPZKDLgcY+/Zijo0=;
 b=llQmi2doLTpmz6lt4npkz3FRDJSKjF1DQyNYAmA3EsCWfnzQQYKO6kQWr5dnojB8m7MO6qd5xaYiBca3j+NP/crxS5ef2MBtjLKE2NbU3QUqeM+n53wduE0BPOfKnAZjLUQWSPl0kaNapZjWNTX0C2poqfwe1HfRvNNeGjsRkuqT5oYYWjzjPKFyMTyobCjJWVM92ZknLjmpUKlNsR4d9dRtWjG/jbKU+w3/CWTe/6sKGRkHZe0yqRQp67frsdhEuoksKSVm4teNNTU8g3XGuPj7e2P8EKEqYJ7XKjuaT4dknMNRuvU+5vESIAcM1wR8uuLu+0WYhbu02PyTGYJwWg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072
 nents:13
To: Andy Smith <andy@strugglers.net>
References: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
Cc: xen-devel@lists.xenproject.org
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c3d7f7c7-0231-dba2-344f-e2e3588e0cab@suse.com>
Date: Wed, 21 Jul 2021 10:10:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0163.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1b::31) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 08b65597-7155-4225-3c06-08d94c1ef89a
X-MS-TrafficTypeDiagnostic: VI1PR04MB5326:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB53268B967E73F01FDAF81A26B3E39@VI1PR04MB5326.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7219;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	6EpScpnw4ts7RpKObKqemIP99Hp11JmqTjfs+ttEwooqvAD0eJ+8evHry73y+Fzg5BvT57NBzmZ8mv7T+LKPY40+E2Fy+0zz40wqHDV/5HD2lXOyPva0caqmi5uJQjTrsPaj7nW0yoSykk7aPMXP00tjzIClNuXS5R5tegXNPabMULyb4JMyzKcgB04RpFmeAqh+Vn9QFSj9ugi4o0VKPWGYkxghUMAokjID5QR3klsKec1lFMreB9Hate0IgNfnskRO3yTRVKz8ZNelCAMVr4RANseSIrRig+D98+Plfs/gboFfLJo+mHZBa7xbq9rAyk5OqaV6otVxK1enIc7gBXnJw5TQc87AThcPeBfvB8CWOuVvMSYsi72kQB2GxYx4LUuM+SCEMisIbbHsOMvXnwLWZ3WMzmvf4nG360WgGIPrO5elp6Qj66aA9eXWleluYNntTwvlDPzT+NZqHa2dKVeR9AiJ8E11fiH+Ngbdn4G3C3FSghaAGLVxbebiAcQEqDO2QaXRBaCupyKDU23sTq8d6V8OBuYmR8x1a2qHkMT9vknZpgWPm1T0d0wNSmYTpE/TJLX0iQSDfgHmyA87GxWGvxONGmFDg+tXzKsTsrvWJ0kB34AXVLPc1BeObIVq1obEsRePtC6ixNg3O1ywl0Q8HTf9TTm5gsdI7U1xc/7f42Eo/1WMR38Bx99ms0QfEPvZIC9oi1eN54E0V55g+cdxMAjtOZ7hTzCCZnQn3B/AvPxdM1rvxzjdfnYcFhLeVXrgeYGkO+hmkpc/8woVznz23zcYeCbTFOEEiC5e2Iy51w5vBTDqYqTXxKpy4+Lt
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(376002)(366004)(39850400004)(346002)(36756003)(5660300002)(2616005)(6916009)(6486002)(956004)(66556008)(31686004)(4326008)(16576012)(316002)(66476007)(38100700002)(31696002)(66946007)(26005)(8936002)(2906002)(966005)(86362001)(53546011)(83380400001)(478600001)(8676002)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 08b65597-7155-4225-3c06-08d94c1ef89a
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 08:10:15.5371
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: spxkD3t44VorMHH8n2ZYEkr/OaZMH0yqOPfuVAvfzy8yCsHhK+FC0tQUXzPBDtooRh5R0CZjGqYwZVpmh0XfWA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5326

On 21.07.2021 00:32, Andy Smith wrote:
> I have a Debian 10 (buster/stable) dom0 running hypervisor 4.14.2.
> For almost 2 years it's been using the packaged Debian stable kernel
> which is 4.19.x.
> 
> Last night I upgraded the kernel to the buster-backports package
> which is based on 5.10.40 and about 4 hours later got this:
> 
> Jul 20 02:17:54 lamb kernel: [21061.388607] sg[0] phys_addr:0x00000015eb803000 offset:0 length:4096 dma_address:0x000000209e7b7000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.389775] sg[1] phys_addr:0x00000015eb7bc000 offset:0 length:4096 dma_address:0x000000209e7b8000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.390874] sg[2] phys_addr:0x00000015eb809000 offset:0 length:4096 dma_address:0x000000209e7b9000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.391974] sg[3] phys_addr:0x00000015eb766000 offset:0 length:4096 dma_address:0x000000209e7ba000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.393042] sg[4] phys_addr:0x00000015eb7a3000 offset:0 length:4096 dma_address:0x000000209e7bb000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.394086] sg[5] phys_addr:0x00000015eb7c6000 offset:0 length:4096 dma_address:0x000000209e7bc000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.395078] sg[6] phys_addr:0x00000015eb7c2000 offset:0 length:4096 dma_address:0x000000209e7bd000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.396042] sg[7] phys_addr:0x00000015eb7a9000 offset:0 length:4096 dma_address:0x000000209e7be000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.397004] sg[8] phys_addr:0x00000015eb775000 offset:0 length:4096 dma_address:0x000000209e7bf000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.397971] sg[9] phys_addr:0x00000015eb7c7000 offset:0 length:4096 dma_address:0x00000020ff520000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.398889] sg[10] phys_addr:0x00000015eb7cb000 offset:0 length:4096 dma_address:0x00000020ff521000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.399814] sg[11] phys_addr:0x00000015eb7e3000 offset:0 length:61952 dma_address:0x00000020ff522000 dma_length:61952
> Jul 20 02:17:54 lamb kernel: [21061.400754] sg[12] phys_addr:0x00000015eb7f2200 offset:512 length:24064 dma_address:0x00000020ff531200 dma_length:24064

The nvme driver, by calling blk_queue_virt_boundary(), announces that
it wants sg elements split at 4k boundaries. The last two segments,
while contiguous in both physical and DMA space, have been split at
a boundary that's not in line with this driver restriction. (Element
11 is [perhaps not just by coincidence] 11*11 sectors long. Adding
another request of 11 sectors would bump total size of the element
past 64k, which iirc the block layer uses as an upper cap on sg
element size. Hence I expect the series of requests submitted to have
remained split at that position, rather than the bio-s sg[12] is
comprised of to have got merged into sg[11].)

Since xen-blkback only talks in terms of bio-s, I don't think it is
the party responsible for honoring such driver restrictions. Instead
I'd expect the block layer's bio merging to be where this needs to be
observed. Perhaps it simply doesn't expect to be passed requests in
multiples of 11 sectors together with the capping at 64k (as said -
iirc) and driver restrictions on where splits may occur? And as to
earlier Linux versions working - perhaps the merging logic was less
aggressive back then?

> I've reported this to linux-nvme as well, but I did find this thread
> from 2017 with a similar warning:
> 
>     http://lists.infradead.org/pipermail/linux-nvme/2017-July/012055.html
> 
> In it Christoph Hellwig says, "Given that this is a Xen system I
> wonder if swiotlb-xen is involved here, which does some odd chunking
> of DMA translations?" so I thought I'd ask here as well in case
> anyone is aware of something like this. Unfortunately that thread
> ends without confirmed resolution.

I don't think swiotlb has screwed this up: From the dump of the sg
list we can see that up to element 11 all elements are suitably 4k
aligned. It wouldn't alter the element sizes of an sg list it gets
handed. Yet if the size of a non-final list element isn't a multiple
of the boundary restriction the driver has put in place, then - no
matter whether offset-into-page values got changed - the requirement
is necessarily violated.

(As an aside, seeing the DMA addresses in the dumped sg list, it is
quite clear that this isn't a very efficient way to express the
request to hardware. There would really only 2 elements be needed,
one covering elements 0-8 and the other covering elements 9-12. All
that matters to hardware is contiguity in DMA space.)

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 08:16:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 08:16:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159184.292820 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67OY-0000rM-W2; Wed, 21 Jul 2021 08:15:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159184.292820; Wed, 21 Jul 2021 08:15:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67OY-0000rF-Sw; Wed, 21 Jul 2021 08:15:58 +0000
Received: by outflank-mailman (input) for mailman id 159184;
 Wed, 21 Jul 2021 08:15:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=NGKG=MN=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m67OX-0000r9-O8
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 08:15:57 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id df4b350e-e9fb-11eb-8c09-12813bfff9fa;
 Wed, 21 Jul 2021 08:15:56 +0000 (UTC)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 (mail-db8eur05lp2104.outbound.protection.outlook.com [104.47.17.104])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-4-nlY4GrJCO16meuu7LcpgtQ-1; Wed, 21 Jul 2021 10:15:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7039.eurprd04.prod.outlook.com (2603:10a6:800:12b::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Wed, 21 Jul
 2021 08:15:52 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 08:15:52 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR1P264CA0009.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:19e::14) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.23 via Frontend Transport; Wed, 21 Jul 2021 08:15:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: df4b350e-e9fb-11eb-8c09-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626855355;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=1lnsFLGkSVQQ0HozFsqDtFwkQakqigH6bvo8zeWXz5k=;
	b=VFGLcX2qePBgcqg8Qf+ZTUAFqlCBCOsBx0RXO4uJ7rdcYuHHmOahOIFGQHTwsFW0OiPVga
	wontnIjPx0+9onuWEPVZNRzIBsuyGEXwjiq8gaOrejn3sPPsFZnZejdc78Wd43ConT3Ohq
	58i4AsT2Z1M3NrTshXCzyzWbE/0ARVA=
X-MC-Unique: nlY4GrJCO16meuu7LcpgtQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jIi4uy9u5DXmMeW2eabbiMMeD6P35VpxF7UPfmMkxvuKljyWB1ADrE3oFqaaEzsJnvNcGz9LsWRwLaSPxAYin0zobfBaCVE9/ZU6UjBlDU+khRMA3oe2hCbZVkF5LrFGSDZ4rlyWLbl5jTEICvApmxfitrpFvNnYVb36ZEBiIVXhjkXbrTUiV5cRg/rMNB184+Otd7P9CrsNiW6Kwoyn93ZNAFT5u5aS/ax6CuG6uc8Kic9GPHnhHBboTSfnMaSAc2jFOQ+eJLGZVEJhceJljNJgWID4VzsL8PilLjhYEqWOcyX2m9//wxQyX6e9klanusXLoFur5fySpHjY4hwqmw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1lnsFLGkSVQQ0HozFsqDtFwkQakqigH6bvo8zeWXz5k=;
 b=ZsItb/7GGGCB058BgKsFXgyj7Fny5REFaW1Oxi/zTl7zXDWLTwQKTzPpeim9YwjDBUS80tcR6c3/kuLvrOtz2vuzq+eC+atf0i7WqE10yn+lNH91Y020MNwRo5TgRYE3IVTm7keEIs8VNz1GKdKK3oEAE8GY8vs2iG1upoNhkhCsJAqVXrNZ8b3duHmuCi42oMQeGUNnIIgos672LlyLkQDCq/W4DYHQcqjsJAUcDjzmxsK2ZDaMd2rdN7cRsIIS1wj+ORvlTatNnqu9coTqo9JX4nlWRgfJx/wcJhAZT5KpuRwjGAhhgtsbLX1/GWKS0NsiVbp+oe9SKvvB1rhKuw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH V3 05/10] xen/arm: static memory initialization
To: Penny Zheng <Penny.Zheng@arm.com>
Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
 nd <nd@arm.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "sstabellini@kernel.org" <sstabellini@kernel.org>,
 "julien@xen.org" <julien@xen.org>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-6-penny.zheng@arm.com>
 <295913d9-5727-2ec7-ca20-70b94c53309d@suse.com>
 <VE1PR08MB52156DCB9D06B07718ACF9D4F7E39@VE1PR08MB5215.eurprd08.prod.outlook.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <3b1685ea-ce3a-0ecb-8058-9c02e6f5cf7a@suse.com>
Date: Wed, 21 Jul 2021 10:15:50 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <VE1PR08MB52156DCB9D06B07718ACF9D4F7E39@VE1PR08MB5215.eurprd08.prod.outlook.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR1P264CA0009.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:19e::14) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 369058da-e536-48fc-61e8-08d94c1fc17c
X-MS-TrafficTypeDiagnostic: VI1PR04MB7039:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB70396B49E5E4C59D15CA2C55B3E39@VI1PR04MB7039.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	uEShUdPpG7v6flsAiNtcZ6ri5+Cw6yRk5QRSLeeDyOpTF9QrqIvSZJIM2pnHjN5UByGmYXDXvm7aMDhVnLBZQHeOlYuOF4B582ocA7AuwBRVHVKDYtpwVqvF7YxDvx+9Pfw5m31OJekcfJy9fkcSC9QXrWR2zjQztTkdUzFSHW3aXff+keHRf4cZinnPqF9WGv8kRuKccn5Fuk1spsEL590fgFe5KFvMfUuW7qv6iJgGNkNaTLl93T2917rdvAV5+3Q0DMgD9KZUi3/LIWUzA4uSxYANYGX+AsoNBLm3b912Ux6OZ4B+FjjYg9kZF5Z+6N4dXe/f4rg/cCdSMBwMC7rRKtNj+6/D/VwsFSe9deHXc3NWb/wTDDvIpCwiFDXor99gKE/6ArROvVe5exdBwLaAQbpB9Ek4cTCAB+bHBhuYyBUkLn1EA2/NOhwVmo42aMqD8jK6OL54gg9tCWbhn2Oj7jSE/7YSEbaZx/yPUNEFAnEUhM9fpVgwUd+QxcoUF/dG1OhV0blSG2kjVvtK9gbxBT2B+9M8uR0v6y8YUSXgohMtlqnj/NbUuZAt077FKLTTio5re74E5qMknmxQOBCJpwuFxc2x5be6VjpTrL1gRPwkHbzcoyXjLJ7otySYlsyjVQeM2kbzXAUqvDd+nn4DvLBCA2DhFL+Ic2DokwpDX2lDVhOmHHohu6xHLfXz6dZbMklrFL4eyfK9nf7UCmFrNiTsjDmiIKTFoVUg3SU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39850400004)(376002)(366004)(136003)(396003)(86362001)(31696002)(2906002)(66556008)(8676002)(956004)(186003)(26005)(478600001)(6916009)(83380400001)(36756003)(31686004)(316002)(66476007)(16576012)(2616005)(5660300002)(8936002)(38100700002)(54906003)(6486002)(53546011)(66946007)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?RxUp0a7NCc+M1FdadIg/iXUZ5eec6Ddj9JTMe4j?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 369058da-e536-48fc-61e8-08d94c1fc17c
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 08:15:52.4806
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: PAxX2zrIRKAGrOs6wbZRc/BcFrulKT1opWG+4tIGNR68O7eU0xzLTgDb17K+K1B1G8xIdm3EMqBC4jg+6evwZw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7039

On 21.07.2021 05:07, Penny Zheng wrote:
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@suse.com>
>> Sent: Monday, July 19, 2021 4:20 PM
>> To: Penny Zheng <Penny.Zheng@arm.com>
>> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
>> <Wei.Chen@arm.com>; nd <nd@arm.com>; xen-devel@lists.xenproject.org;
>> sstabellini@kernel.org; julien@xen.org
>> Subject: Re: [PATCH V3 05/10] xen/arm: static memory initialization
>>
>> On 15.07.2021 07:18, Penny Zheng wrote:
>>> v3 change:
>>> - include addition of CONFIG_STATIC_ALLOCATION in this commit, where
>>> it is firstly used and also change the name to CONFIG_STATIC_MEMORY
>>> - Fix TAB typo in Kconfig
>>
>> Not sure what this relates to, but ...
>>
> 
> Before I was wrongly using " set tabstop=4 " for Kconfig file, so...
> 
>>> --- a/xen/arch/arm/Kconfig
>>> +++ b/xen/arch/arm/Kconfig
>>> @@ -106,6 +106,9 @@ config TEE
>>>
>>>  source "arch/arm/tee/Kconfig"
>>>
>>> +config STATIC_MEMORY
>>> +        def_bool y
>>
>> ... this is (wrongly) using spaces for indentation.
>>
>> I also wonder about the placement: Shouldn't the option live in common code,
>> with Arm "select"ing it?
>>
> 
> Sure, I will place it in xen/common/Kconfig, and add "depends on ARM".

But I didn't say to use "depends on", but "select". "depends on"
would be appropriate to use if the option had a prompt (i.e. if
one could also disable it on Arm).

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 08:18:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 08:18:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159189.292832 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67RJ-0001Z7-FC; Wed, 21 Jul 2021 08:18:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159189.292832; Wed, 21 Jul 2021 08:18:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67RJ-0001Z0-C8; Wed, 21 Jul 2021 08:18:49 +0000
Received: by outflank-mailman (input) for mailman id 159189;
 Wed, 21 Jul 2021 08:18:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m67RH-0001Yq-Ia; Wed, 21 Jul 2021 08:18:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m67RH-0006iJ-DH; Wed, 21 Jul 2021 08:18:47 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m67RH-0006mH-3s; Wed, 21 Jul 2021 08:18:47 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m67RH-0002bP-3N; Wed, 21 Jul 2021 08:18:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=4wG8XIAtRi0zgRcFCdJ3kkGc+Kg1zfnvLJNsb0wm7Yk=; b=6JNz+wcxsdPtZjcbdakKTMmlub
	wQw7Xxos+lNUwHwARlm7VKrUP0R9GTf3EPiZ71MMuns/mSCNZDv5MR1t5SmSG2iAUZsOSfSafaGRr
	1pSVa1YlPoW+tNOCFy/SgL1lXRUfQmkAeo6viKQMDKa40Ar9Ro+T4QLVxb5bojpzMIVk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163862-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163862: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=429312d686f0c0b2c953639d298d942dcea531b9
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 08:18:47 +0000

flight 163862 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163862/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              429312d686f0c0b2c953639d298d942dcea531b9
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  376 days
Failing since        151818  2020-07-11 04:18:52 Z  375 days  367 attempts
Testing same since   163862  2021-07-21 04:18:56 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 65386 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 08:21:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 08:21:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159197.292847 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67UB-0002yc-4G; Wed, 21 Jul 2021 08:21:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159197.292847; Wed, 21 Jul 2021 08:21:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m67UB-0002yV-1G; Wed, 21 Jul 2021 08:21:47 +0000
Received: by outflank-mailman (input) for mailman id 159197;
 Wed, 21 Jul 2021 08:21:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m67UA-0002yP-0y
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 08:21:46 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m67U6-0006l0-FX; Wed, 21 Jul 2021 08:21:42 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m67U6-0000gi-91; Wed, 21 Jul 2021 08:21:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=qEouP/ccFNLfZH4tgENX/8+4RbNodN0ejUTtAt/CWVU=; b=agwVisZksSDq+Ix1a/WMPr6JHp
	DWJLzXiiCY+WQbkIBx7gfa+fbVPchqXEBdQyWFz17DfNFyjkrOJzcw3YihswY/5TPxMrqQFc6Ae2O
	XGNefwzhpt1hZvWxkWB6OcEByZekFFLeK8uAwQfCKACh7RY+djnbny6R+ZMe1HEYZJP4=;
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
To: Scott Davis <scottwd@gmail.com>, xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Nick Rosbrook <rosbrookn@ainfosec.com>,
 Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
From: Julien Grall <julien@xen.org>
Message-ID: <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
Date: Wed, 21 Jul 2021 09:21:39 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Scott,

On 20/07/2021 18:56, Scott Davis wrote:
> This adds an option to the xl domain configuration file syntax for specifying
> a kernel command line for device-model stubdomains. It is intended for use with
> Linux-based stubdomains.

May I ask why embedding the command line in the kernel would not be a 
solution? Do you expect it to change from stubdom to stubdom?

> Signed-off-by: Scott Davis <scott.davis@starlab.io>
> ---
>   docs/man/xl.cfg.5.pod.in             | 4 ++++
>   tools/golang/xenlight/helpers.gen.go | 3 +++
>   tools/golang/xenlight/types.gen.go   | 1 +
>   tools/libs/light/libxl_dm.c          | 1 +
>   tools/libs/light/libxl_types.idl     | 1 +
>   tools/xl/xl_parse.c                  | 2 ++
>   6 files changed, 12 insertions(+)
> 
> diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
> index 56370a37db..6c777cad5c 100644
> --- a/docs/man/xl.cfg.5.pod.in
> +++ b/docs/man/xl.cfg.5.pod.in
> @@ -2742,6 +2742,10 @@ In case of B<qemu-xen-traditional> it is expected to be MiniOS-based stubdomain
>   image, in case of B<qemu-xen> it is expected to be Linux-based stubdomain
>   kernel.
>   
> +=item B<stubdomain_cmdline="STRING">
> +
> +Append B<STRING> to the device-model stubdomain kernel command line.
> +
>   =item B<stubdomain_ramdisk="PATH">
>   
>   Override the path to the ramdisk image used as device-model stubdomain.
> diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
> index db82537b42..bfc1e7f312 100644
> --- a/tools/golang/xenlight/helpers.gen.go
> +++ b/tools/golang/xenlight/helpers.gen.go
> @@ -1018,6 +1018,7 @@ return fmt.Errorf("converting field DeviceModelStubdomain: %v", err)
>   }
>   x.StubdomainMemkb = uint64(xc.stubdomain_memkb)
>   x.StubdomainKernel = C.GoString(xc.stubdomain_kernel)
> +x.StubdomainCmdline = C.GoString(xc.stubdomain_cmdline)
>   x.StubdomainRamdisk = C.GoString(xc.stubdomain_ramdisk)
>   x.DeviceModel = C.GoString(xc.device_model)
>   x.DeviceModelSsidref = uint32(xc.device_model_ssidref)
> @@ -1344,6 +1345,8 @@ return fmt.Errorf("converting field DeviceModelStubdomain: %v", err)
>   xc.stubdomain_memkb = C.uint64_t(x.StubdomainMemkb)
>   if x.StubdomainKernel != "" {
>   xc.stubdomain_kernel = C.CString(x.StubdomainKernel)}
> +if x.StubdomainCmdline != "" {
> +xc.stubdomain_cmdline = C.CString(x.StubdomainCmdline)}
>   if x.StubdomainRamdisk != "" {
>   xc.stubdomain_ramdisk = C.CString(x.StubdomainRamdisk)}
>   if x.DeviceModel != "" {
> diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
> index a214dd9df6..09a3bb67e2 100644
> --- a/tools/golang/xenlight/types.gen.go
> +++ b/tools/golang/xenlight/types.gen.go
> @@ -483,6 +483,7 @@ DeviceModelVersion DeviceModelVersion
>   DeviceModelStubdomain Defbool
>   StubdomainMemkb uint64
>   StubdomainKernel string
> +StubdomainCmdline string
>   StubdomainRamdisk string
>   DeviceModel string
>   DeviceModelSsidref uint32
> diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
> index dbd3c7f278..2d54596834 100644
> --- a/tools/libs/light/libxl_dm.c
> +++ b/tools/libs/light/libxl_dm.c
> @@ -2373,6 +2373,7 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
>       }
>   
>       stubdom_state->pv_kernel.path = guest_config->b_info.stubdomain_kernel;
> +    stubdom_state->pv_cmdline = guest_config->b_info.stubdomain_cmdline;
>       stubdom_state->pv_ramdisk.path = guest_config->b_info.stubdomain_ramdisk;
>   
>       /* fixme: this function can leak the stubdom if it fails */
> diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
> index f45adddab0..e782e15cf2 100644
> --- a/tools/libs/light/libxl_types.idl
> +++ b/tools/libs/light/libxl_types.idl
> @@ -523,6 +523,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>       ("device_model_stubdomain", libxl_defbool),
>       ("stubdomain_memkb",   MemKB),
>       ("stubdomain_kernel",  string),
> +    ("stubdomain_cmdline", string),

Please add a LIBXL_HAVE_... in include/libxl.h. This is used by external 
toolstack (e.g. libvirt) to know whether a given version of libxl 
provide the field.

>       ("stubdomain_ramdisk", string),
>       # if you set device_model you must set device_model_version too
>       ("device_model",     string),
> diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
> index 9fb0791429..17dddb4cd5 100644
> --- a/tools/xl/xl_parse.c
> +++ b/tools/xl/xl_parse.c
> @@ -2533,6 +2533,8 @@ skip_usbdev:
>   
>       xlu_cfg_replace_string (config, "stubdomain_kernel",
>                               &b_info->stubdomain_kernel, 0);
> +    xlu_cfg_replace_string (config, "stubdomain_cmdline",
> +                            &b_info->stubdomain_cmdline, 0);
>       xlu_cfg_replace_string (config, "stubdomain_ramdisk",
>                               &b_info->stubdomain_ramdisk, 0);
>       if (!xlu_cfg_get_long (config, "stubdomain_memory", &l, 0))
> 

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 09:01:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 09:01:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159220.292877 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m685t-0000EF-FV; Wed, 21 Jul 2021 09:00:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159220.292877; Wed, 21 Jul 2021 09:00:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m685t-0000E8-CV; Wed, 21 Jul 2021 09:00:45 +0000
Received: by outflank-mailman (input) for mailman id 159220;
 Wed, 21 Jul 2021 09:00:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=YvKo=MN=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m685s-0000E2-4T
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:00:44 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a3b55c6d-730e-4012-970a-1f9bdb022585;
 Wed, 21 Jul 2021 09:00:43 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 48F571FE7F;
 Wed, 21 Jul 2021 09:00:42 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 0F18113BC9;
 Wed, 21 Jul 2021 09:00:42 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id G19NAjri92D1LwAAGKfGzw
 (envelope-from <jgross@suse.com>); Wed, 21 Jul 2021 09:00:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a3b55c6d-730e-4012-970a-1f9bdb022585
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626858042; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=WmJIKEi9R96EL9pGiTvCdTC73PkgKtbbHabaBuDCijc=;
	b=Y68F8EliSqcI9ZfaXzsbkr4gQeD1Is+YGifpGKxvaB+ZXqwnF6m39gjdHpKORsTSJ8FfPW
	ROMAmWKDfA24uJWXq+sHIxJxTDgv+kC8aDEVN2XcUAJndZHDTIHOCShymW+6J8MwZNd3Pp
	Q+4+czfs6Ql+eP28IbQaQ9qeHcKphFw=
To: Julien Grall <julien@xen.org>, Scott Davis <scottwd@gmail.com>,
 xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Nick Rosbrook <rosbrookn@ainfosec.com>,
 Anthony PERARD <anthony.perard@citrix.com>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
 <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
From: Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
Message-ID: <072959aa-8e48-c31c-79bd-e1a2134237d0@suse.com>
Date: Wed, 21 Jul 2021 11:00:41 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="EylzDW1JQ6lXW3G1etdfalFg1C77PUpGX"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--EylzDW1JQ6lXW3G1etdfalFg1C77PUpGX
Content-Type: multipart/mixed; boundary="ILkmb6OXEN3RmteVcFjqBHGxONuLlYjjr";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, Scott Davis <scottwd@gmail.com>,
 xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Nick Rosbrook <rosbrookn@ainfosec.com>,
 Anthony PERARD <anthony.perard@citrix.com>
Message-ID: <072959aa-8e48-c31c-79bd-e1a2134237d0@suse.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
 <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
In-Reply-To: <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>

--ILkmb6OXEN3RmteVcFjqBHGxONuLlYjjr
Content-Type: multipart/mixed;
 boundary="------------82A878945F7B7987862AFF50"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------82A878945F7B7987862AFF50
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 21.07.21 10:21, Julien Grall wrote:
> Hi Scott,
>=20
> On 20/07/2021 18:56, Scott Davis wrote:
>> This adds an option to the xl domain configuration file syntax for=20
>> specifying
>> a kernel command line for device-model stubdomains. It is intended for=
=20
>> use with
>> Linux-based stubdomains.
>=20
> May I ask why embedding the command line in the kernel would not be a=20
> solution? Do you expect it to change from stubdom to stubdom?

This would preclude the possibility to use a standard distro kernel.


Juergen

--------------82A878945F7B7987862AFF50
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------82A878945F7B7987862AFF50--

--ILkmb6OXEN3RmteVcFjqBHGxONuLlYjjr--

--EylzDW1JQ6lXW3G1etdfalFg1C77PUpGX
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmD34jkFAwAAAAAACgkQsN6d1ii/Ey/6
bgf7BdtIvoT//PcYcbC1LTmfuV4/cxRHgvDuchh4SbfS8IEA2c6JS1uCOXAg2N+7e9zM6hqQyMdD
gRlabWVR7ThYcrLJ+hw1Za6LjRt8kGkr0jiVHHf5gFzlukx0GfrHz1FU86786w622KjXG7riYjlY
TfRDs7B41tF8IHGyiktpJ+arY7kOcDKmL0DoiyJSeMzYMyrEdWoNltYuRCcNXf4p6uZmhk1dzkdo
Zl6+UANeEOFjE+mKhkOZlexQ82o2/RU7DzNGnQ/RCeKA00Ioe458sNgEueC07623k5J1BARhdAbz
jgsg2kU83G9JTdMU0oa7jHB3vYu+bU/QT86DZZw05Q==
=YASA
-----END PGP SIGNATURE-----

--EylzDW1JQ6lXW3G1etdfalFg1C77PUpGX--


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 09:06:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 09:06:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159226.292889 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68BU-0000yj-58; Wed, 21 Jul 2021 09:06:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159226.292889; Wed, 21 Jul 2021 09:06:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68BU-0000yc-1p; Wed, 21 Jul 2021 09:06:32 +0000
Received: by outflank-mailman (input) for mailman id 159226;
 Wed, 21 Jul 2021 09:06:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=7UN6=MN=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m68BS-0000yW-CG
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:06:30 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id eefe7374-ea02-11eb-8c09-12813bfff9fa;
 Wed, 21 Jul 2021 09:06:29 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: eefe7374-ea02-11eb-8c09-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626858388;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=uh5PJfiRc7Ja7Loaxr4P52vXB2d0IaOEL6WCp0fZM2M=;
  b=ZxqXF/L1kZY7KREV+xZCdvl00XcGcktPqeoSlFYym9RJ4569W6K69/rK
   lgXCSzHD/V7EOd4EHq3REdG78DTUKkoVFF0tdM7TsPL91UrGJHw9HGyif
   2wnns9Cxm7hJKqWE9UEjpAxbtChTjMHjF8rGyL5KRPp+CeNLYrB5CjnJz
   0=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: aPPgSyaDGzD/917tQDdE7c0CQ0jR69lG2uxNfYs8OImL04LtK74wq0cQ4bdE0b7K97oTlUJ8rM
 cJwdun5w6uTIGsXBdRc9N/prnO2vyjnvcct7s4u9HWrIsCnkVk1jMf6Y2NVdil+zZFe8Oc5L7Y
 YDsR8mPzpjHqX642GJaVvYi4mkS0ytQKmbmu/0vlUABZ2w/lFxlDXuZ/jEEOBp+/Uf4gbsLnGh
 OlO9KXJVei1kWJk5y77Ixhm12phw/+Nf+s3ttuujALysQQz605GpPJXFp4LjBJGVGpdwIQNgGM
 OumFP3zO0AAJRNxN3I4xM24P
X-SBRS: 5.1
X-MesageID: 49119864
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Zw1Vda6jVvpTx/l0dQPXwD7XdLJyesId70hD6qkQc3FomwKj9/
 xG/c5rsyMc7Qx6ZJhOo7+90cW7L080sKQFg7X5Xo3SOzUO2lHYT72KhLGKq1Hd8m/Fh4tgPM
 9bGJSWY+eAaWSS4/ya3OG5eexQv+Vu8sqT9JnjJ6EGd3AaV0lihT0JejpyCidNNXB77QJSLu
 vg2iJAzQDQAUg/X4CAKVQuefPMnNHPnIKOW297O/Z2gDP+9g9B8dTBYmKl4is=
X-IronPort-AV: E=Sophos;i="5.84,257,1620705600"; 
   d="scan'208";a="49119864"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hSHYDqQoMh/2jtVxRLAhcP9KSgsy1HqTNWt9w8xjI2I8JGtKKQvpXsBLvJqm+PaUeHUmbEyuiSHWiagvSmj+OAQvDnV9DKBWDWorhRquoBKaan9mGMhbt/8IfkpSbL5O5vvrW4RaU4IkvK2DaUae6Uu8td42uviNcoJBIDOjkB+lvl3AMZe7RTlzj/oax+cS/+LCuIRmRQ4S6ZFtSrjsSEz2WFTmwC0Qf/f/JhFqdEVeC+4QfD/A1Ie09piMvoalYoPI4cRR7/zq6UzZ3Rn32x2R6cczgH20BIksnmMccTs/RySRxaFki506Omkx1AS4JpPFg581i90w9r4MvecTsQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=uh5PJfiRc7Ja7Loaxr4P52vXB2d0IaOEL6WCp0fZM2M=;
 b=gv8RpwbaqxmCvcXEhWfIGUJKxrifeaVtpi+YjFsPkKxJbzb0PNAUCKSQMWIXOl10pqtX7ARHCNkeISEvNTGmAAIma2FhopkVDQZZybVTSo3PGgoLylTPj64jVkrXxxnMd3giA3hdxwTFfyhTvcjNB85UmKCT7ZKzA9etYZQ3Q88msl/XoGyvmzJuzR4mJYiXa0yOLDJPKjf1o3WLMaTKOdGHoliDlUQVfsYpTlbkv84O3mZXP8wkBGKWcpXOCUAgjKftXJD2hVq4ww6WnbhTyfE9pBbvqZ0PzHJW1hwQCz0lJ9g1kyTr4oZyLRlIElkDEYTeGgk5jqTHRfpZCcl81g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=uh5PJfiRc7Ja7Loaxr4P52vXB2d0IaOEL6WCp0fZM2M=;
 b=YDq3WIH6GnzZNCSpAYwLkhFuXfXdA1JEp+9RpH8idcm9u/W6wYHbnzpW8pOHr4JprPh2SCw3SCMaQWV0qdDGZGxu0ZIs6SjWweKETp5M8HFgHtJSNhV1Fa93jzKHlDOMDIXWzIFKNFdgczAN0U5vj0sAl8IRW4t/b7NmRYEO12Y=
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
To: Julien Grall <julien@xen.org>, Scott Davis <scottwd@gmail.com>,
	<xen-devel@lists.xenproject.org>
CC: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>, Nick Rosbrook
	<rosbrookn@ainfosec.com>, Anthony PERARD <anthony.perard@citrix.com>,
	"Juergen Gross" <jgross@suse.com>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
 <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <56f86674-7a6c-3f3a-40e9-dcb35cddbb88@citrix.com>
Date: Wed, 21 Jul 2021 10:06:10 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0138.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:9f::30) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a432fd0b-a658-44f8-b1e5-08d94c26ccb6
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5744:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5744021996C363CC8257E8E9BAE39@SJ0PR03MB5744.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: wjK+YZp7wksSVlNr5k6kYRtjnFaeMvsn6uGhKbFhz+xLsIqWEoU+xZ+v+htFk4KT8QmHRoHIJB2TLmwy3rFLfGpkD/BfpSQUnI3o3iuKZO1mZmHv7CmGfHI2YByD3MCCxawdUTkDzkLpg47Le5M/DRBZaUjw4DkzOk11c7DF67gaXHyZxNas1hXkz8V61qYS8+sZbFbVjcYdauaB5mZzcDQr6EnSJKUYI9Yj3fQHmUNPikJjsmAKoHlkH+VCpPt8PlaWpRgoiZX5Kk8gwwEfYh0JCyTrmXxpYkmbUaU52eAybPv/2XJcbL7N+nPVdGj/PRI46UDDW/bQ22xuBcvNgNvo7FXLB6MdzUZLxh6VuS8Kv2ADPHsXZbGfjEQEf/uACms2Raxh+Swh8vN+JvNWayLbG479WvWwxsTo+r48mZAGw7j6FOev44ORfRT1VuC1NRfN/JiJnb1KnylHM7z8vn77HFruPRGtF7C9/+qzVBD5aCJoUSD9k5/KxtiptHWIGEPNIQl4Ke9WpBp4awcl60TfUnvi8pVEQaj8LVT/SwV96cOsj0L0OQAIZ79rtSFsP6s6rr8gOof0wO0hWXsjeLjNFuZrxUF9V3aQAc6/GkF88KAfnzYpNkn1Gr1RK0/8xzsQtDFaSp5H6P6pdrb8OLo/dL1IOOQplnRuHttHPjMzTXWKlC6t93b2GUFmhS+1fXQuAof08Xlh7kT1tPBZqpmsbFKlUkhE8LI5cWXvvJA=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(6666004)(2616005)(86362001)(16576012)(4326008)(5660300002)(53546011)(316002)(31686004)(31696002)(26005)(66476007)(8936002)(66556008)(38100700002)(956004)(186003)(66946007)(110136005)(36756003)(6486002)(4744005)(508600001)(8676002)(54906003)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: a432fd0b-a658-44f8-b1e5-08d94c26ccb6
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 09:06:18.0087
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: W4J27SutgLQKwAXCwc0xo2l06+EaAlEJ+us9oCsF23vLf3ssCzAmZFOnolGKE3RM1AGvoIiBhvWfSDSYODh+FuKJT300jg2rTYDHaJzb5K0=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5744
X-OriginatorOrg: citrix.com

On 21/07/2021 09:21, Julien Grall wrote:
> Hi Scott,
>
> On 20/07/2021 18:56, Scott Davis wrote:
>> This adds an option to the xl domain configuration file syntax for
>> specifying
>> a kernel command line for device-model stubdomains. It is intended
>> for use with
>> Linux-based stubdomains.
>
> May I ask why embedding the command line in the kernel would not be a
> solution? Do you expect it to change from stubdom to stubdom?

Why should users of stubdoms be forced to embed command line options? 
Especially when its not the normal way of working?

They shouldn't, and this alone is enough justification for the change.

~Andrew


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 09:12:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 09:12:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159232.292901 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68Go-0002T5-PI; Wed, 21 Jul 2021 09:12:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159232.292901; Wed, 21 Jul 2021 09:12:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68Go-0002Sy-MA; Wed, 21 Jul 2021 09:12:02 +0000
Received: by outflank-mailman (input) for mailman id 159232;
 Wed, 21 Jul 2021 09:12:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m68Go-0002Ss-2N
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:12:02 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m68Gk-0007Tl-Dc; Wed, 21 Jul 2021 09:11:58 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m68Gk-0004DX-79; Wed, 21 Jul 2021 09:11:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=vkWKLKUrYQQn/lHzOoY7AE1Dp2iTX3JLPP9niQD5V2w=; b=SsC5XLveVcFHS7gqBa0aAxg95Q
	O/q31d5wU+KtsSEk6tmQARzB0djdWi5HKTfwvdKi/TeMEBrBs1IswwQ1z1StvfTClOazjtMFjxMiv
	Y71add/k4JiDMA3g8QVlzLfDNHTtXbTgaz1c2E6fpKXdyuLWryc+Mc/NU4R+qBBG7/Ac=;
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
To: Andrew Cooper <andrew.cooper3@citrix.com>, Scott Davis
 <scottwd@gmail.com>, xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Nick Rosbrook <rosbrookn@ainfosec.com>,
 Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
 <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
 <56f86674-7a6c-3f3a-40e9-dcb35cddbb88@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <c4d5cb39-420b-a9e3-0b9c-bee7e5d41a78@xen.org>
Date: Wed, 21 Jul 2021 10:11:55 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <56f86674-7a6c-3f3a-40e9-dcb35cddbb88@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 21/07/2021 10:06, Andrew Cooper wrote:
> On 21/07/2021 09:21, Julien Grall wrote:
>> Hi Scott,
>>
>> On 20/07/2021 18:56, Scott Davis wrote:
>>> This adds an option to the xl domain configuration file syntax for
>>> specifying
>>> a kernel command line for device-model stubdomains. It is intended
>>> for use with
>>> Linux-based stubdomains.
>>
>> May I ask why embedding the command line in the kernel would not be a
>> solution? Do you expect it to change from stubdom to stubdom?
> 
> Why should users of stubdoms be forced to embed command line options?
> Especially when its not the normal way of working?

I didn't suggest they should be forced. I was more interested to know 
the setup because I was expecting stubdomain to use a very tailored kernel.

> 
> They shouldn't, and this alone is enough justification for the change.

Everyone has a different perspective. I don't see the problem of asking 
the question... Maybe I should have add "OOI" to make clear with wasn't 
a complain.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 09:30:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 09:30:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159240.292916 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68YG-0004tV-GO; Wed, 21 Jul 2021 09:30:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159240.292916; Wed, 21 Jul 2021 09:30:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68YG-0004sr-BQ; Wed, 21 Jul 2021 09:30:04 +0000
Received: by outflank-mailman (input) for mailman id 159240;
 Wed, 21 Jul 2021 09:30:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=McEs=MN=dingwall.me.uk=james@srs-us1.protection.inumbo.net>)
 id 1m68YE-0004k6-To
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:30:02 +0000
Received: from smarthost01a.ixn.mail.zen.net.uk (unknown [212.23.1.20])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 37aecb8f-ea06-11eb-8c09-12813bfff9fa;
 Wed, 21 Jul 2021 09:30:00 +0000 (UTC)
Received: from [217.155.64.189] (helo=mail0.xen.dingwall.me.uk)
 by smarthost01a.ixn.mail.zen.net.uk with esmtpsa
 (TLS1.0:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1)
 (envelope-from <james@dingwall.me.uk>) id 1m68YB-00058k-6f
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:29:59 +0000
Received: from localhost (localhost [IPv6:::1])
 by mail0.xen.dingwall.me.uk (Postfix) with ESMTP id 74341E969E
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 10:29:58 +0100 (BST)
Received: from mail0.xen.dingwall.me.uk ([IPv6:::1])
 by localhost (mail0.xen.dingwall.me.uk [IPv6:::1]) (amavisd-new, port 10024)
 with ESMTP id zDzPP1zI7-1m for <xen-devel@lists.xenproject.org>;
 Wed, 21 Jul 2021 10:29:58 +0100 (BST)
Received: from ghoul.dingwall.me.uk (ghoul.dingwall.me.uk
 [IPv6:2a02:8010:698e:302::c0a8:1c8])
 by dingwall.me.uk (Postfix) with ESMTP id 47A95E969B
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 10:29:58 +0100 (BST)
Received: by ghoul.dingwall.me.uk (Postfix, from userid 1000)
 id 3374CA06; Wed, 21 Jul 2021 10:29:58 +0100 (BST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 37aecb8f-ea06-11eb-8c09-12813bfff9fa
X-Virus-Scanned: Debian amavisd-new at dingwall.me.uk
Date: Wed, 21 Jul 2021 10:29:58 +0100
From: James Dingwall <james-xen@dingwall.me.uk>
To: xen-devel@lists.xenproject.org
Subject: xen 4.11.4 incorrect (~3x) cpu frequency reported
Message-ID: <20210721092958.GA2502468@dingwall.me.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
X-Originating-smarthost01a-IP: [217.155.64.189]
Feedback-ID: 217.155.64.189

Hi,

We have a system which intermittently starts up and reports an incorrect cpu frequency:

# grep -i mhz /var/log/kern.log 
Jul 14 17:47:47 dom0 kernel: [    0.000475] tsc: Detected 2194.846 MHz processor
Jul 14 22:03:37 dom0 kernel: [    0.000476] tsc: Detected 2194.878 MHz processor
Jul 14 23:05:13 dom0 kernel: [    0.000478] tsc: Detected 2194.848 MHz processor
Jul 14 23:20:47 dom0 kernel: [    0.000474] tsc: Detected 2194.856 MHz processor
Jul 14 23:57:39 dom0 kernel: [    0.000476] tsc: Detected 2194.906 MHz processor
Jul 15 01:04:09 dom0 kernel: [    0.000476] tsc: Detected 2194.858 MHz processor
Jul 15 01:27:15 dom0 kernel: [    0.000482] tsc: Detected 2194.870 MHz processor
Jul 15 02:00:13 dom0 kernel: [    0.000481] tsc: Detected 2194.924 MHz processor
Jul 15 03:09:23 dom0 kernel: [    0.000475] tsc: Detected 2194.892 MHz processor
Jul 15 03:32:50 dom0 kernel: [    0.000482] tsc: Detected 2194.856 MHz processor
Jul 15 04:05:27 dom0 kernel: [    0.000480] tsc: Detected 2194.886 MHz processor
Jul 15 05:00:38 dom0 kernel: [    0.000473] tsc: Detected 2194.914 MHz processor
Jul 15 05:59:33 dom0 kernel: [    0.000480] tsc: Detected 2194.924 MHz processor
Jul 15 06:22:31 dom0 kernel: [    0.000474] tsc: Detected 2194.910 MHz processor
Jul 15 17:52:57 dom0 kernel: [    0.000474] tsc: Detected 2194.854 MHz processor
Jul 15 18:51:36 dom0 kernel: [    0.000474] tsc: Detected 2194.900 MHz processor
Jul 15 19:07:26 dom0 kernel: [    0.000478] tsc: Detected 2194.902 MHz processor
Jul 15 19:43:56 dom0 kernel: [    0.000154] tsc: Detected 6895.384 MHz processor

The xen 's' debug output:

(XEN) TSC marked as reliable, warp = 0 (count=4)
(XEN) dom1: mode=0,ofs=0x1d1ac8bf8e,khz=6895385,inc=1
(XEN) dom2: mode=0,ofs=0x28bc24c746,khz=6895385,inc=1
(XEN) dom3: mode=0,ofs=0x345696b138,khz=6895385,inc=1
(XEN) dom4: mode=0,ofs=0x34f2635f31,khz=6895385,inc=1
(XEN) dom5: mode=0,ofs=0x3581618a7d,khz=6895385,inc=1
(XEN) dom6: mode=0,ofs=0x3627ca68b2,khz=6895385,inc=1
(XEN) dom7: mode=0,ofs=0x36dd491860,khz=6895385,inc=1
(XEN) dom8: mode=0,ofs=0x377a57ea1a,khz=6895385,inc=1
(XEN) dom9: mode=0,ofs=0x381eb175ce,khz=6895385,inc=1
(XEN) dom10: mode=0,ofs=0x38cab2e260,khz=6895385,inc=1
(XEN) dom11: mode=0,ofs=0x397fc47387,khz=6895385,inc=1
(XEN) dom12: mode=0,ofs=0x3a552762a0,khz=6895385,inc=1

A processor from /proc/cpuinfo in dom0:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) D-2123IT CPU @ 2.20GHz
stepping        : 4
microcode       : 0x2000065
cpu MHz         : 6895.384
cache size      : 8448 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu de tsc msr pae mce cx8 apic sep mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl nonstop_tsc cpuid pni pclmulqdq monitor est ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch intel_ppin ssbd ibrs ibpb stibp fsgsbase bmi1 hle avx2 bmi2 erms rtm avx512f avx512dq rdseed adx clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 md_clear
bugs            : null_seg cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips        : 13790.76
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

Xen has been built at 310ab79875cb705cc2c7daddff412b5a4899f8c9 from the stable-4.12 branch.  The system is a supermicro server, model X11SDV-4C-TP8F.  I'm not sure if the incorrect value has been read from hardware or Xen has miscalculated the frequency so any pointers on things to examine would be welcome.

Thanks,
James


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 09:51:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 09:51:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159247.292931 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68tC-0007wz-AQ; Wed, 21 Jul 2021 09:51:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159247.292931; Wed, 21 Jul 2021 09:51:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68tC-0007ws-7I; Wed, 21 Jul 2021 09:51:42 +0000
Received: by outflank-mailman (input) for mailman id 159247;
 Wed, 21 Jul 2021 09:51:40 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m68tA-0007wi-Jm; Wed, 21 Jul 2021 09:51:40 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m68tA-00082j-Co; Wed, 21 Jul 2021 09:51:40 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m68tA-0002or-4g; Wed, 21 Jul 2021 09:51:40 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m68tA-0007bw-4B; Wed, 21 Jul 2021 09:51:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=55q9KzJudBNzQsqNKzOvrwX/wao2ZDyrNyFcAWP9/XE=; b=bF/ach9ZBiFXuIEFCsgjdOOImm
	lxnQEVZcHHbpmnIDTvGFL0W4rdF6HQvwqv58GNwH2Vus6p7CmbmIeLXS6MNX0Sr34R60TFRUhZryb
	rVOMBx8qCq45gMMZhEeNp9iiP1X7y9AP3I+HL7t9gDbvu6n7TroxB+wuybclE6apyh9c=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163870-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-coverity test] 163870: all pass - PUSHED
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=3a98c1a4cec1a302beaddf944ded240b61173f87
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 09:51:40 +0000

flight 163870 xen-unstable-coverity real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163870/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  3a98c1a4cec1a302beaddf944ded240b61173f87

Last test of basis   163679  2021-07-14 09:18:29 Z    7 days
Testing same since   163870  2021-07-21 09:19:34 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Michal Orzel <michal.orzel@arm.com>
  Stefano Stabellini <sstabellini@kernel.org>

jobs:
 coverity-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/xen.git
   3a98c1a4ce..57e761b60d  57e761b60dc92e210caf3429b8956d908ba04ae9 -> coverity-tested/smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 09:58:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 09:58:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159254.292946 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68zK-0000Ot-11; Wed, 21 Jul 2021 09:58:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159254.292946; Wed, 21 Jul 2021 09:58:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m68zJ-0000Om-UG; Wed, 21 Jul 2021 09:58:01 +0000
Received: by outflank-mailman (input) for mailman id 159254;
 Wed, 21 Jul 2021 09:58:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m68zI-0000Og-4v
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:58:00 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m68zI-00088N-13
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:58:00 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m68zI-0007IJ-08
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 09:58:00 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m68zB-0000uj-R0; Wed, 21 Jul 2021 10:57:53 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=YZaXrz0Ot4cfTtbc8IeqYb3sXz7bemkQKscEAedT8e8=; b=Axyvy4eX50GziJsBIEb2fCsVdx
	ZRo+H0E46uveA2mVOEsfrutjz7X6v30CeZnaqHvoVxe7Ig25iaTSqax0upmpK4mCMhDTnpgiZnKFx
	m9KdJta29xomflAOXlpwJ+HoZaBvIXegmqz81W+1dvVB9xNei+q4kP63OLxT2ORJsiP4=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24823.61345.641428.907592@mariner.uk.xensource.com>
Date: Wed, 21 Jul 2021 10:57:53 +0100
To: Scott Davis  <scottwd@gmail.com>,
    Julien Grall <julien@xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
    xen-devel@lists.xenproject.org,
    Scott Davis <scott.davis@starlab.io>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Nick Rosbrook <rosbrookn@ainfosec.com>,
    Anthony PERARD <anthony.perard@citrix.com>,
    Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
In-Reply-To: <c4d5cb39-420b-a9e3-0b9c-bee7e5d41a78@xen.org>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
	<c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
	<56f86674-7a6c-3f3a-40e9-dcb35cddbb88@citrix.com>
	<c4d5cb39-420b-a9e3-0b9c-bee7e5d41a78@xen.org>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Julien Grall writes ("Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg"):
> Everyone has a different perspective. I don't see the problem of asking 
> the question... Maybe I should have add "OOI" to make clear with wasn't 
> a complain.

Yes, I think asking questions is fine, but we need to be conscious of
our status as maintainers and therefore gatekeepers.  When someone in
a gatekeeper position asks a question, the possibility of it being a
blocker is always present.  Indeed, I think it is even usual.

Adding "OOI" helps but it can help to be even more explicit.

Particularly, if someone proposes to add a feature, and a maintainer
asks "why can't you do X instead", there is a strong sense that the
maintainer thinks the feature is not (or may not be) necessary and
wants a stronger justification.  That can be quite discouraging.

If that disccouragement is not what's intended, then it can help for
the maintaier to be more explicit.  For example:

  "I don't oppose this feature.  But I am curious:..."

As for the original patch, I am in support of it and have reviewed it.
I have have only one question:

> +    stubdom_state->pv_cmdline = guest_config->b_info.stubdomain_cmdline;

It's been a while since I looked at this code.  I think that this is
the effective line, which takes the end result of the plumbing in the
rest of the patch and delivers it to this field of stubdom_state,
which is otherwise always null ?

Ian.


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 10:11:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 10:11:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159260.292957 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m69Bu-0002r2-9v; Wed, 21 Jul 2021 10:11:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159260.292957; Wed, 21 Jul 2021 10:11:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m69Bu-0002qv-72; Wed, 21 Jul 2021 10:11:02 +0000
Received: by outflank-mailman (input) for mailman id 159260;
 Wed, 21 Jul 2021 10:09:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=B9/7=MN=linuxfoundation.org=gregkh@srs-us1.protection.inumbo.net>)
 id 1m69Ag-00025T-Ul
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 10:09:47 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 13d3a32d-c754-49bd-877e-37ddd4865f96;
 Wed, 21 Jul 2021 10:09:46 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 0BAC960FE7;
 Wed, 21 Jul 2021 10:09:43 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 13d3a32d-c754-49bd-877e-37ddd4865f96
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org;
	s=korg; t=1626862185;
	bh=AkCAzoeKK4dm3J0IYr3eqKdLUog3VqnY+aXSEhth1R0=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=c1tD+1+8N7ya+U+R4FoCk5r1AY0+njsEQDtKrpnu5fKg2Nsyw8ad0RAbDRa8LMlYN
	 kIGK/SB0S4EC/Bt9LoElGD8+QX12QgKfoR1683w3NYrmezl45haNH7nWDa/e7NVumf
	 ZIzS+wQ0FwO2WzFS4jJEXOjj+Re557OYzd+zf9Xc=
Date: Wed, 21 Jul 2021 12:09:41 +0200
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Eric Farman <farman@linux.ibm.com>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Halil Pasic <pasic@linux.ibm.com>, Hannes Reinecke <hare@suse.de>,
	Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jaroslav Kysela <perex@perex.cz>, Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>, Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>, Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>, Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>, Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>, Ohad Ben-Cohen <ohad@wizery.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>, Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>, Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>, Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>, Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org, dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net, kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org, linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org, linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org, linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	nvdimm@lists.linux.dev, platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org, target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v4 0/5] bus: Make remove callback return void
Message-ID: <YPfyZen4Y0uDKqDT@kroah.com>
References: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>

On Tue, Jul 13, 2021 at 09:35:17PM +0200, Uwe Kleine-Knig wrote:
> Hello,
> 
> this is v4 of the final patch set for my effort to make struct
> bus_type::remove return void.
> 
> The first four patches contain cleanups that make some of these
> callbacks (more obviously) always return 0. They are acked by the
> respective maintainers. Bjorn Helgaas explicitly asked to include the
> pci patch (#1) into this series, so Greg taking this is fine. I assume
> the s390 people are fine with Greg taking patches #2 to #4, too, they
> didn't explicitly said so though.
> 
> The last patch actually changes the prototype and so touches quite some
> drivers and has the potential to conflict with future developments, so I
> consider it beneficial to put these patches into next soon. I expect
> that it will be Greg who takes the complete series, he already confirmed
> via irc (for v2) to look into this series.
> 
> The only change compared to v3 is in the fourth patch where I modified a
> few more drivers to fix build failures. Some of them were found by build
> bots (thanks!), some of them I found myself using a regular expression
> search. The newly modified files are:
> 
>  arch/sparc/kernel/vio.c
>  drivers/nubus/bus.c
>  drivers/sh/superhyway/superhyway.c
>  drivers/vlynq/vlynq.c
>  drivers/zorro/zorro-driver.c
>  sound/ac97/bus.c
> 
> Best regards
> Uwe

Now queued up.  I can go make a git tag that people can pull from after
0-day is finished testing this to verify all is good, if others need it.

thanks,

greg k-h


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 10:29:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 10:29:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159282.292994 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m69TR-0005qL-Ay; Wed, 21 Jul 2021 10:29:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159282.292994; Wed, 21 Jul 2021 10:29:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m69TR-0005qE-64; Wed, 21 Jul 2021 10:29:09 +0000
Received: by outflank-mailman (input) for mailman id 159282;
 Wed, 21 Jul 2021 10:29:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=TcFV=MN=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m69TP-0005q8-6t
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 10:29:07 +0000
Received: from mail-pg1-x52f.google.com (unknown [2607:f8b0:4864:20::52f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 531d8cd9-66d2-4071-b856-72f36a8b86a7;
 Wed, 21 Jul 2021 10:29:06 +0000 (UTC)
Received: by mail-pg1-x52f.google.com with SMTP id k20so1438370pgg.7
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 03:29:06 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:18:efec::4b1])
 by smtp.gmail.com with ESMTPSA id
 t37sm26803912pfg.14.2021.07.21.03.28.50
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 21 Jul 2021 03:29:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 531d8cd9-66d2-4071-b856-72f36a8b86a7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=crPkDkWQEoNERdMjzIoNvDVdZYJX2jUbiteH/e0Of1o=;
        b=dpQF0qK/cZ1PBWjC1lNEtBNPQIY0ndTZOqudg/5nG+laJtg1EvtFbUy2df++wHmiLi
         c6BCC2uROfhvdYwDWYWD1jecOacp6hyTQ93iH+xQCYDh0nO8befGldO1/+g9lnr74Jsv
         CmOUB7aNlqIYBSVTdBy1KAz3fTJhPWw+/jwvvEOOadVZwZ+pWi0tv3SIK/XfCdM4Yw0C
         CMWaIHisnetIQUkh+1i2GqoZdEdpLDithfUWVY4II/1DHvEJRJ2d7y6Gld4xfxrZsKbY
         6Msig5LVrt5yFu08e+wuLM0X3juclFNnUEU2LztUJ2yenbExU+zvtkxD1pUa0R4LM97z
         RFOw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:subject:to:cc:references:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=crPkDkWQEoNERdMjzIoNvDVdZYJX2jUbiteH/e0Of1o=;
        b=ebf1esxNEYbl4KxDmbeM5mCiFSsxBXzed3CNbn99PF4zQ8E18lHv9IW6FwMF1/IaIW
         Po4JlbT6QoY+C8BkamK7Y8fxhptOLSpztFKqKZz/a8W/3af2R6c9tnSzEYqjjsqu9y0c
         5NyBkDpXyrfnQQEznzfo6Im8sPBVGnx3hY2kg9jNyRpjIX5b6p796KGXnYmyxlRJAdpR
         a2jGWZ9HjwveVD1bAxDSZKx9YeywaMbc0lm9J7YD0Hz3NiMdbQT7xfMgUYyB1ZUDWM7Z
         x3ZgMQbzA9llUoL7TZR/6Nk+EJsnRV2AbJatC0NihVqWD3DtfOgFH0MPdPcN3hg0PG2y
         P/sA==
X-Gm-Message-State: AOAM531VWvQoQa95arluc3/mYtMbgY9hSz8N6Lii5MoWKTs7OLNuWSBZ
	hUczzBsWFZImfYv48M4C9W0=
X-Google-Smtp-Source: ABdhPJwGK1w7GFZui+UX4nxgbHVeI56Iu2D5hjeSldD82+ip3NkTL1jWcNoRnxoO7LnJTjwfoGvugw==
X-Received: by 2002:a65:6187:: with SMTP id c7mr35068030pgv.349.1626863345481;
        Wed, 21 Jul 2021 03:29:05 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
Subject: Re: [Resend RFC PATCH V4 09/13] x86/Swiotlb/HV: Add Swiotlb bounce
 buffer remap function for HV IVM
To: Christoph Hellwig <hch@lst.de>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
 wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
 mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
 dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
 konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com,
 sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, m.szyprowski@samsung.com,
 robin.murphy@arm.com, kirill.shutemov@linux.intel.com,
 akpm@linux-foundation.org, rppt@kernel.org, Tianyu.Lan@microsoft.com,
 thomas.lendacky@amd.com, ardb@kernel.org, robh@kernel.org,
 nramas@linux.microsoft.com, pgonda@google.com, martin.b.radev@gmail.com,
 david@redhat.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, keescook@chromium.org, rientjes@google.com,
 hannes@cmpxchg.org, michael.h.kelley@microsoft.com,
 iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 brijesh.singh@amd.com, anparri@microsoft.com
References: <20210707154629.3977369-1-ltykernel@gmail.com>
 <20210707154629.3977369-10-ltykernel@gmail.com>
 <20210720135437.GA13554@lst.de>
Message-ID: <8f1a285d-4b67-8041-d326-af565b2756c0@gmail.com>
Date: Wed, 21 Jul 2021 18:28:48 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210720135437.GA13554@lst.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Thanks for review.

On 7/20/2021 9:54 PM, Christoph Hellwig wrote:
> 
> Please split the swiotlb changes into a separate patch from the
> consumer.

OK. Will update.

> 
>>   }
>> +
>> +/*
>> + * hv_map_memory - map memory to extra space in the AMD SEV-SNP Isolation VM.
>> + */
>> +unsigned long hv_map_memory(unsigned long addr, unsigned long size)
>> +{
>> +	unsigned long *pfns = kcalloc(size / HV_HYP_PAGE_SIZE,
>> +				      sizeof(unsigned long),
>> +		       GFP_KERNEL);
>> +	unsigned long vaddr;
>> +	int i;
>> +
>> +	if (!pfns)
>> +		return (unsigned long)NULL;
>> +
>> +	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
>> +		pfns[i] = virt_to_hvpfn((void *)addr + i * HV_HYP_PAGE_SIZE) +
>> +			(ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
>> +
>> +	vaddr = (unsigned long)vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE,
>> +					PAGE_KERNEL_IO);
>> +	kfree(pfns);
>> +
>> +	return vaddr;
> 
> This seems to miss a 'select VMAP_PFN'. 

VMAP_PFN has been selected in the previous patch "RFC PATCH V4 08/13]
HV/Vmbus: Initialize VMbus ring buffer for Isolation VM"

> But more importantly I don't
> think this actually works.  Various DMA APIs do expect a struct page
> backing, so how is this going to work with say dma_mmap_attrs or
> dma_get_sgtable_attrs?

dma_mmap_attrs() and dma_get_sgtable_attrs() get input virtual address
belonging to backing memory with struct page and returns bounce buffer
dma physical address which is below shared_gpa_boundary(vTOM) and passed
to Hyper-V via vmbus protocol.

The new map virtual address is only to access bounce buffer in swiotlb
code and will not be used other places. It's stored in the mem->vstart.
So the new API set_memory_decrypted_map() in this series is only called
in the swiotlb code. Other platforms may replace set_memory_decrypted()
with set_memory_decrypted_map() as requested.

> 
>> +static unsigned long __map_memory(unsigned long addr, unsigned long size)
>> +{
>> +	if (hv_is_isolation_supported())
>> +		return hv_map_memory(addr, size);
>> +
>> +	return addr;
>> +}
>> +
>> +static void __unmap_memory(unsigned long addr)
>> +{
>> +	if (hv_is_isolation_supported())
>> +		hv_unmap_memory(addr);
>> +}
>> +
>> +unsigned long set_memory_decrypted_map(unsigned long addr, unsigned long size)
>> +{
>> +	if (__set_memory_enc_dec(addr, size / PAGE_SIZE, false))
>> +		return (unsigned long)NULL;
>> +
>> +	return __map_memory(addr, size);
>> +}
>> +
>> +int set_memory_encrypted_unmap(unsigned long addr, unsigned long size)
>> +{
>> +	__unmap_memory(addr);
>> +	return __set_memory_enc_dec(addr, size / PAGE_SIZE, true);
>> +}
> 
> Why this obsfucation into all kinds of strange helpers?  Also I think
> we want an ops vectors (or alternative calls) instead of the random
> if checks here.

Yes, agree and will add ops for different platforms to map/unmap memory.

> 
>> + * @vstart:	The virtual start address of the swiotlb memory pool. The swiotlb
>> + *		memory pool may be remapped in the memory encrypted case and store
> 
> Normall we'd call this vaddr or cpu_addr.

OK. Will update.

> 
>> -	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
>> -	memset(vaddr, 0, bytes);
>> +	mem->vstart = (void *)set_memory_decrypted_map((unsigned long)vaddr, bytes);
> 
> Please always pass kernel virtual addresses as pointers.
> 
> And I think these APIs might need better names, e.g.
> 
> arch_dma_map_decrypted and arch_dma_unmap_decrypted.
> 
> Also these will need fallback versions for non-x86 architectures that
> currently use memory encryption.

Sure. Will update in the next version.



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 10:59:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 10:59:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159289.293006 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m69wc-0001DM-Rf; Wed, 21 Jul 2021 10:59:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159289.293006; Wed, 21 Jul 2021 10:59:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m69wc-0001DF-Ok; Wed, 21 Jul 2021 10:59:18 +0000
Received: by outflank-mailman (input) for mailman id 159289;
 Wed, 21 Jul 2021 10:59:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=NGKG=MN=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m69wb-0001D9-Dk
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 10:59:17 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 15dc2d3c-f7c4-49f8-b70e-d8ef9e6936bf;
 Wed, 21 Jul 2021 10:59:16 +0000 (UTC)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2053.outbound.protection.outlook.com [104.47.2.53]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-36-Do36xDM4PoOlDYB_VSui4g-2; Wed, 21 Jul 2021 12:59:14 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5325.eurprd04.prod.outlook.com (2603:10a6:803:60::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Wed, 21 Jul
 2021 10:59:13 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 10:59:13 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR07CA0066.eurprd07.prod.outlook.com (2603:10a6:207:4::24) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.10 via Frontend Transport; Wed, 21 Jul 2021 10:59:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 15dc2d3c-f7c4-49f8-b70e-d8ef9e6936bf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626865155;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=qZcS6qNTmj+1KFX+YXV+uvS1LceQ36s3bsqn1RaEGSc=;
	b=jKU4ebGCOY28i8WbluWsfgL3zCZ/xRZslv4UvRmyXM1PzFzrdg+Hi4+lKMNDaThrfJwGV8
	I8I6EmTGy9rGVnXyyeegHfejharNUYwzV15zjDNPsMDmOc7qpWWHxk50tIj2thULciVMJG
	miWqWtVkfU8bqMBn6jJo5XmTkQ4C56w=
X-MC-Unique: Do36xDM4PoOlDYB_VSui4g-2
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=SwEuX/hvTNQTEoW7io1neYJWAI2c1tZP6rSgNUM4yKwJqh+tqjAi3Px0LKZtRSswAqrFQdKhTmMWUm1uAk01W7XtrirRxnl+iVH1Tr4ws1wWdPoVQ59qpfwFc54iiFY3gG59MKsaTBYGp0QbHgWkZiAU+0+Bjm1HOrBRUFcn44LQd665/T+lqc0O9xjStRSZXg6Pnc/Zu56kkz56wjIyOq0SpJIhiEKcpbhBIYX251osmWziaRw2he2YjYQR3nhp7ANr6dLj5fVtP0+PK6aKveZ4/ckFRP7sWguHHndBzSOWT7TbyCKw6/SJl+0DdWgaxhqlJACPsEoTVF0JqYaDNg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qZcS6qNTmj+1KFX+YXV+uvS1LceQ36s3bsqn1RaEGSc=;
 b=adlbtrkwfIWSTHJEc2eYlsOxr4d10AXe97bRU4VcU/DIvWrj3p6lk4RSDm/PpNc+wJKzp9rpazMYkT4W5M/rRv8kFR6Nb2mk48UCNxamtUV7JsuQstSka8grDf6t+oZQLkqRt5x0LMW8e4bvfmHuOQOtEEnb02vCUwSYu4RW+U39vT2VmMD3pyzHQgJc/UvhbpijcC1+TUUZrA9UJs4Ln2r6uaOZ9uepdnQtx8+SbDMKkFhYnQ7Gf9itrIy3Mnr4Ktsb6jEGxV9rER7IKy4WGCYhrCk0rLZGBnjeM1uT3IP9TZb+gxiSx7z8SqM+chLDnxO1QDZ+UF9XjeXKhwULdQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: xen 4.11.4 incorrect (~3x) cpu frequency reported
To: James Dingwall <james-xen@dingwall.me.uk>
References: <20210721092958.GA2502468@dingwall.me.uk>
Cc: xen-devel@lists.xenproject.org
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <c9c6778d-9823-4b07-fb48-604acef1f3de@suse.com>
Date: Wed, 21 Jul 2021 12:59:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210721092958.GA2502468@dingwall.me.uk>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM3PR07CA0066.eurprd07.prod.outlook.com
 (2603:10a6:207:4::24) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5464e0fd-82ce-41ef-ca60-08d94c369330
X-MS-TrafficTypeDiagnostic: VI1PR04MB5325:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB532563CDE4CAC52075E39C7CB3E39@VI1PR04MB5325.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	LKv82UoyHvEGugzyj330FuTXjJFnGZ2SxCxjKkMNIyKEce4wNyiP9BhpLgJ065WM784mkFbUUshPGAy0/DQbJsPOz1CicT9PIGmxaIPLuZR+7cW3UtBfvo/GpoO+nez6UKCTvwXCcoPoNBYYZ/PRtOsNAQrH90/9vNUOuRRNE3e/F8C/sP4IHCNKyAuWswy9NpSzz3SUsPUKb16JLuQxd6irrjXcb0vgvLrMPZgOAoUY89MMLcGA5CDH4ysxtC2r/kjxM7W5/dd9sWe0Y2Up8ELfFnZ1UjqQwmZyG4BWFXjmsxylCiGu6MIf9MqEcGZY1JU+5QgvqQYzM1t1aN8pxNzHap1rgBqmuAbRz6UIrVAy7Ol5vKvgg+1nBIOsFozUCURjwvzKPUOa3iPgIQlUqF+bBW60563lXYlby5bDwrYsYZDY0T+Eze27UZ53M3WvJwhOw62kYocHv16zQHoGuZx/WfXmIVPwpowqvsRpRDMhGoLWYyJ1lkClQ/oiHZKPBkuvzGZrPQgipwk6IKXLw0V0Q16DKiPIvARaTKMUpFkDVJpZ3LdX0aKE9YfMLrLgj/vt0MTIqeYoPYUZvyp9tP684vbnTz2Ur1hHPpI29s6/oc7MYhre4NzSMq0wG1yMHidJ+mN9q95LHj+4raVh0cfC78kuR2m7xgobqKV2teyEFCdA8goSAYFJ7W+iblBQlsFV0awkhAXX/PtAH3YP1kntvIZNx2uVvtgN7oSqupU=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39860400002)(396003)(346002)(376002)(366004)(4326008)(8676002)(8936002)(5660300002)(31686004)(26005)(186003)(53546011)(956004)(2616005)(478600001)(36756003)(6486002)(31696002)(66946007)(66476007)(66556008)(6916009)(86362001)(83380400001)(16576012)(316002)(2906002)(38100700002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5464e0fd-82ce-41ef-ca60-08d94c369330
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 10:59:13.2388
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: dEf0LQWsYHQzzQqzt+AIs2RGUevIiRox+fs5ZuvqvZ4vS08v3jGQR2aJSAvnavSIjJfkO+2sRXltYNdjtWO/xQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5325

On 21.07.2021 11:29, James Dingwall wrote:
> We have a system which intermittently starts up and reports an incorrect cpu frequency:
> 
> # grep -i mhz /var/log/kern.log 
> Jul 14 17:47:47 dom0 kernel: [    0.000475] tsc: Detected 2194.846 MHz processor
> Jul 14 22:03:37 dom0 kernel: [    0.000476] tsc: Detected 2194.878 MHz processor
> Jul 14 23:05:13 dom0 kernel: [    0.000478] tsc: Detected 2194.848 MHz processor
> Jul 14 23:20:47 dom0 kernel: [    0.000474] tsc: Detected 2194.856 MHz processor
> Jul 14 23:57:39 dom0 kernel: [    0.000476] tsc: Detected 2194.906 MHz processor
> Jul 15 01:04:09 dom0 kernel: [    0.000476] tsc: Detected 2194.858 MHz processor
> Jul 15 01:27:15 dom0 kernel: [    0.000482] tsc: Detected 2194.870 MHz processor
> Jul 15 02:00:13 dom0 kernel: [    0.000481] tsc: Detected 2194.924 MHz processor
> Jul 15 03:09:23 dom0 kernel: [    0.000475] tsc: Detected 2194.892 MHz processor
> Jul 15 03:32:50 dom0 kernel: [    0.000482] tsc: Detected 2194.856 MHz processor
> Jul 15 04:05:27 dom0 kernel: [    0.000480] tsc: Detected 2194.886 MHz processor
> Jul 15 05:00:38 dom0 kernel: [    0.000473] tsc: Detected 2194.914 MHz processor
> Jul 15 05:59:33 dom0 kernel: [    0.000480] tsc: Detected 2194.924 MHz processor
> Jul 15 06:22:31 dom0 kernel: [    0.000474] tsc: Detected 2194.910 MHz processor
> Jul 15 17:52:57 dom0 kernel: [    0.000474] tsc: Detected 2194.854 MHz processor
> Jul 15 18:51:36 dom0 kernel: [    0.000474] tsc: Detected 2194.900 MHz processor
> Jul 15 19:07:26 dom0 kernel: [    0.000478] tsc: Detected 2194.902 MHz processor
> Jul 15 19:43:56 dom0 kernel: [    0.000154] tsc: Detected 6895.384 MHz processor

Well, this is output from Dom0. What we'd need to see (in addition)
is the corresponding hypervisor log at maximum verbosity (loglvl=all).

> The xen 's' debug output:
> 
> (XEN) TSC marked as reliable, warp = 0 (count=4)
> (XEN) dom1: mode=0,ofs=0x1d1ac8bf8e,khz=6895385,inc=1
> (XEN) dom2: mode=0,ofs=0x28bc24c746,khz=6895385,inc=1
> (XEN) dom3: mode=0,ofs=0x345696b138,khz=6895385,inc=1
> (XEN) dom4: mode=0,ofs=0x34f2635f31,khz=6895385,inc=1
> (XEN) dom5: mode=0,ofs=0x3581618a7d,khz=6895385,inc=1
> (XEN) dom6: mode=0,ofs=0x3627ca68b2,khz=6895385,inc=1
> (XEN) dom7: mode=0,ofs=0x36dd491860,khz=6895385,inc=1
> (XEN) dom8: mode=0,ofs=0x377a57ea1a,khz=6895385,inc=1
> (XEN) dom9: mode=0,ofs=0x381eb175ce,khz=6895385,inc=1
> (XEN) dom10: mode=0,ofs=0x38cab2e260,khz=6895385,inc=1
> (XEN) dom11: mode=0,ofs=0x397fc47387,khz=6895385,inc=1
> (XEN) dom12: mode=0,ofs=0x3a552762a0,khz=6895385,inc=1
> 
> A processor from /proc/cpuinfo in dom0:
> 
> processor       : 3
> vendor_id       : GenuineIntel
> cpu family      : 6
> model           : 85
> model name      : Intel(R) Xeon(R) D-2123IT CPU @ 2.20GHz
> stepping        : 4
> microcode       : 0x2000065
> cpu MHz         : 6895.384
> [...]
> 
> Xen has been built at 310ab79875cb705cc2c7daddff412b5a4899f8c9 from the stable-4.12 branch.

While this contradicts the title, both 4.11 and 4.12 are out of general
support. Hence it would be more helpful if you could obtain respective
logs with a more modern version of Xen - ideally from the master branch,
or else the most recent stable one (4.15). Provided of course the issue
continues to exist there in the first place.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 11:40:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 11:40:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159295.293017 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6AaO-0006n0-2O; Wed, 21 Jul 2021 11:40:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159295.293017; Wed, 21 Jul 2021 11:40:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6AaN-0006mt-VZ; Wed, 21 Jul 2021 11:40:23 +0000
Received: by outflank-mailman (input) for mailman id 159295;
 Wed, 21 Jul 2021 11:40:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=psIF=MN=canonical.com=colin.king@srs-us1.protection.inumbo.net>)
 id 1m6AaM-0006mn-UV
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 11:40:23 +0000
Received: from smtp-relay-canonical-1.canonical.com (unknown [185.125.188.121])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5aa31fe6-98bc-49fe-9a99-2cc309645dcf;
 Wed, 21 Jul 2021 11:40:21 +0000 (UTC)
Received: from localhost (1.general.cking.uk.vpn [10.172.193.212])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest
 SHA256) (No client certificate requested)
 by smtp-relay-canonical-1.canonical.com (Postfix) with ESMTPSA id E15553F231; 
 Wed, 21 Jul 2021 11:40:10 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5aa31fe6-98bc-49fe-9a99-2cc309645dcf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com;
	s=20210705; t=1626867620;
	bh=EI6lWYDMKnKmAeOVCPHsH4FVwm1n7Ms3nflLoux8RE4=;
	h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type;
	b=Z9FGv0WSXpYmC2VTCH5El7pEp8Epr8RtEE+EReQlznQ91+QGw7ai0wUNzAlLY1psu
	 uZzXyVkVVgFucpQ5ogILqQjdKZYos++nm8exzVvqPmS/aoUYYAtxpThK5Y4tNJWqk/
	 L9F2k2kgN5PO33Xp4qHdNdddd6JdiYWT1wwvWm39P9MFZefK541n8Y/3SxzMV5Oael
	 UaOQZkZDZhQhU5v1a/iFfYLxF4jhLCgwrPbQ1CK1tN7yPZOszTJn1XSLcq2ua04VS+
	 MrvSpzS2+k1g0YKCTL0+/lhMkOT9ojfXaIybvs88b38F6caTTlglt3ndBsqKGu33p+
	 ksh9axhikNL/A==
From: Colin King <colin.king@canonical.com>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org
Cc: kernel-janitors@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH] xen/events: remove redundant initialization of variable irq
Date: Wed, 21 Jul 2021 12:40:10 +0100
Message-Id: <20210721114010.108648-1-colin.king@canonical.com>
X-Mailer: git-send-email 2.31.1
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

From: Colin Ian King <colin.king@canonical.com>

The variable irq is being initialized with a value that is never
read, it is being updated later on. The assignment is redundant and
can be removed.

Addresses-Coverity: ("Unused value")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/xen/events/events_base.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index d7e361fb0548..154daddbdcb4 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -1009,7 +1009,7 @@ static void __unbind_from_irq(unsigned int irq)
 int xen_bind_pirq_gsi_to_irq(unsigned gsi,
 			     unsigned pirq, int shareable, char *name)
 {
-	int irq = -1;
+	int irq;
 	struct physdev_irq irq_op;
 	int ret;
 
-- 
2.31.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 12:03:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 12:03:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159300.293036 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Awe-0001Mu-IE; Wed, 21 Jul 2021 12:03:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159300.293036; Wed, 21 Jul 2021 12:03:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Awe-0001Mn-E7; Wed, 21 Jul 2021 12:03:24 +0000
Received: by outflank-mailman (input) for mailman id 159300;
 Wed, 21 Jul 2021 11:44:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hVq+=MN=epam.com=prvs=7836cd435a=oleksii_moisieiev@srs-us1.protection.inumbo.net>)
 id 1m6Ae2-0007QZ-Fp
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 11:44:10 +0000
Received: from mx0a-0039f301.pphosted.com (unknown [148.163.133.242])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f52d6d34-ea18-11eb-8c10-12813bfff9fa;
 Wed, 21 Jul 2021 11:44:08 +0000 (UTC)
Received: from pps.filterd (m0174677.ppops.net [127.0.0.1])
 by mx0a-0039f301.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16LBhNav015584
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 11:44:07 GMT
Received: from eur04-vi1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2050.outbound.protection.outlook.com [104.47.14.50])
 by mx0a-0039f301.pphosted.com with ESMTP id 39xgk68gqn-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT)
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 11:44:04 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com (2603:10a6:102:ea::23)
 by PR3PR03MB6682.eurprd03.prod.outlook.com (2603:10a6:102:7d::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.26; Wed, 21 Jul
 2021 11:44:01 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c]) by PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c%8]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 11:44:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f52d6d34-ea18-11eb-8c10-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=lZR/wFzPSt7c+OlkjsGneZmDiAFMZpMCTJe/NdE8F0u6/4+kkbdbpGPRtQMV2+WmG32oc6EQjLHo5pDQKcZEFqNv9C/3WuDOFDLQLAkXDVKaBn5HVRhoc0NeLjLDUODtgYaPHxLXY+qizLR8m1aV14lr2auPKvc3EjACqHSiyOB0R9CjvaHavMaO1NATd8Bho+BKjJW5UOndDeKX44sGfKha+AJESW7/tkugl75U+h+wnMZV79HMeX+80Tv+RDWXJ/ht7XNbLRYcdz0yakxb8eT0PL4BPDJHdH76LrQjBZzadwqxaug8gdzh/ZKBhCDBKHGPnNzV27LFvBkUUwNuhg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Q51IfaDlea0HypE//IMEeOOIS1qKOOLLt5a+cHlxTco=;
 b=c7/pVp+0V4W8LC8rLdswdSD36CyonCS1wSIDkvPuHpgl06smOR07rxpINHJGuGDSCeF2473iDiThOeXWVckbofKRosYJqkXY9Uqc3WIN7aPOt+kCAHVeuQpNHSBij0gHx1/GdD8JmHQ2P3Eqe9fRVxqFRY9oFeyjrcgP+mgo80JvnoEWl6e7YDqLXI0P1v6W9as60YWeHnCGaUTx6+aKOO3V/OPme2wbp7T5lyfjd15lxDXp7xCN6PsrYtOwcdW4VJBmrdvausKPkYLOXgNE7DGrey4zHnJGrsH9AkrUa4Zw9/YrPx4/Q6Ize5BUkAlel9IK3zMnXIjQz4SO4fxWhw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com;
 dkim=pass header.d=epam.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Q51IfaDlea0HypE//IMEeOOIS1qKOOLLt5a+cHlxTco=;
 b=1LD7hNxLOHG09JnNHHe9vSX2zO5cjcjho1adZz194huABD/DoovmddoED/eZQzSl92atB7Ce6SPMV3xA4wfmb09V78Z9MrXZfY9i+ZL03L+DDy7Knf+PNtIaKCXuWEq2ccr7MOGtWbcZLzrrQrFEwrmZGAeFFgdKA/BTv68Zg+hL3emzC4yWnBqxeasHF5USaJvqibUXkWpwd6qGw8rb2WWHA1JKHqY9w0zfy5CC3KP46bTjCZY7NZhWrLeHqUzjGw0BXO5TkvgYgLUPkNUbDczC3e5c4740x/r74tIv/Ne0c3pzRV5Krwb8MZtObPRbJwH7dwL4XKDm2a+L9CuCoA==
From: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
CC: Andrii Anisov <Andrii_Anisov@epam.com>
Subject: Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in kernel
 config
Thread-Topic: Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in
 kernel config
Thread-Index: AQHXfga6kF2DIDySdk2Twa4+MGYJE6tNKWWUgAAlvH4=
Date: Wed, 21 Jul 2021 11:44:00 +0000
Message-ID: 
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
References: 
 <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>,<PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
In-Reply-To: 
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
authentication-results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=epam.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: f0f7f154-b199-4270-88ba-08d94c3cd542
x-ms-traffictypediagnostic: PR3PR03MB6682:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: 
 <PR3PR03MB6682AF9E668FDE2C720EB65FE3E39@PR3PR03MB6682.eurprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:820;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 
 qKRn2SHwVhvmVAMUCR/N4PM/Pm6OF5w8qx/bd6UH/VPKzUfA5myT2Z1XhdZaIakAirgXend+DsE9iue2WLmB1pusvFf8OgoMc4oZcyij6ZH4k3erRs3Qdsw1StUgqN/eAPbeM1qyR6RkHWazoTai2iS5nf/sCXSyjuaAqvGLMyON9HapxYaqXp5JgV+53b9MQXLIjvco+VMCaQzmYqwa6CDSUASb1mpl7MeXbmioyAad1wCYIJ5NDZPx1BQiUvJDwyp8Team8M/g5jmR3t/R/70chw6uWhOkpbHyVP9bqcSIv6yho1TImlSnKJE6wZ1qL2KxfAyINaQVqj4mTLUGwSljHzU/kg7LJVMg3IfUBmXcf//GQQsN5J41f3ScGyxjSjEbcFq1APvxgZrvrbqb3ieeUztjd9FOAfRuQRx8FpIRPRhDPO6cB+lntCnk5cofUjEbpMlfN7Ws8E3Djk9PvSBPcvT0ZvfdEycIz1xDCz6Ox0PJb6cluqPjr8JzRAZCc6lXwkf5hN60AgyEO1web+ryyltdmeENzoBshR0rN88XYBqMt3FIQBZD5cyb2oP9QmvJEFYlCxU6np87ZWV4uYjCvShWxxUdf0TYxxGe0UqNvEcIPygCfYDq01QLwbLSML86lHirrGolkEHZErVd7sqJ2DNELA4PUIb+tKZs5RfqFhmTjYeOQ9Vv23glILlhebtHaDsMKCdmBxJL7E5er0B/hTcM6JH9KZ9LvwMd2lmOWO01E7/FYzqGKRq2bu+HhmDWPOD8lSdtAUZqu5ugjU98Mg/iXLGUNs7MZIMPtqDAdbhwg/7pB9DTeRSOnQwl8h9kbtK1pH03HI2+OwX3zA==
x-forefront-antispam-report: 
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR03MB7136.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(366004)(346002)(39860400002)(376002)(136003)(316002)(83380400001)(5660300002)(45080400002)(52536014)(966005)(99936003)(4326008)(166002)(186003)(66446008)(26005)(76116006)(55016002)(9686003)(7696005)(478600001)(122000001)(8936002)(2906002)(2940100002)(86362001)(107886003)(19627405001)(71200400001)(66476007)(6916009)(66556008)(33656002)(38100700002)(6506007)(8676002)(66576008)(64756008)(66946007)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 
 =?iso-8859-1?Q?Hpq4Auaq22AkzIgHCSYJp7arfOs1K0Vj1uZqhOKhfhUZVmrCi++0W7LluC?=
 =?iso-8859-1?Q?ErLVxAJCnKrsq1EKtsW46IgwNOzbcXJfGwpscCVXpzEwYANb4FiYIUk4M0?=
 =?iso-8859-1?Q?cQR/SdhoqBjhN7YV3RkUr2z/AL388x6CRRfdor13vsQKCmWjUKfhLIggW6?=
 =?iso-8859-1?Q?TBxQlN0qiGmtfp13KjGSrHlnALHrGukXXGAuGqTZgrZL5aggmskDeSlzHd?=
 =?iso-8859-1?Q?WOAzU+7BH2C3s4eRDDsFD5kSnhSxzapwnrYm5JrbcSqKI/oq5viBCvn9rM?=
 =?iso-8859-1?Q?9Q9e5idPJcevYqHnpLwAoxvlZpFQSE/g5aaVsPXVaiFZ4VxI+PGUeNAx8A?=
 =?iso-8859-1?Q?Wh3X38Ho8ELyIBfdJitE5AtoH4H3QymoVOhAzHrlueXwpGss8uEud4OmHG?=
 =?iso-8859-1?Q?hvB73SjkeDI+CZNZvME+CVk+9RanvXJ0GBZEAWTB0TbP1NY6v6cuT4DceH?=
 =?iso-8859-1?Q?qEkf3r/uZ8Cy5dh2mIe6AC/AiK1OO+6O910L6NfOr+ZO1FxK8b1k4QDHjn?=
 =?iso-8859-1?Q?TuRUDIQb4ouVR+uNjFe/SzXFV/ZF+9uTsiUkOHK0vs3FPqxvn8igl89a8T?=
 =?iso-8859-1?Q?+8kkynEFCf7DPCcpGJE4oiztLHsUXFvqMnRhUu4ZdyzEOq4c7m4NftMd5V?=
 =?iso-8859-1?Q?HjpQ5snevv3lz7jq5E9HFGTgBsJVvN5ypMO2Ya3PvoRorsRzFFaXKl2jRE?=
 =?iso-8859-1?Q?Z/wbqg+4Y28zSB1raH8L15ehPkwcJO7TyJdkRFeOsbhjhWqBmjhcMofUCw?=
 =?iso-8859-1?Q?Z+imfO0jlfQRJaF+HLFqL6mu7KCcyvhmwcKbgdtxRsDWTgyTFgiUoD+NI6?=
 =?iso-8859-1?Q?Xrdt+jMvJhYqEX9iFsRRM+H3hq84Z7WX9u8uv4OxGlYNKLjLq3Q13Zv8GH?=
 =?iso-8859-1?Q?mf4rBNV5Ps0H9ef7BB6WjtKL4Wmq5Lv4hC3F1OoEWuYr6pwXE3mJ6wR1H0?=
 =?iso-8859-1?Q?4C2O8HRnNlsajVIr+/ILN6CIcI/qneZfDKerZrf1O4uTtj72m+QCyOpZmZ?=
 =?iso-8859-1?Q?A9Tsq8vy1UufpTwRWWZdXOopQ1XyZyS5bE6iGGvz1Mj/fSgUadtKCXPjII?=
 =?iso-8859-1?Q?mm5omq/34FScgqLuWGucdd/IkEHpqHkRl3beEB5QMmnp1qUvqSqTPghDQH?=
 =?iso-8859-1?Q?/SvmWaj/+ztF+37muTOmx/hcy4L/vD9Ft9KfZY5TEd+2IittNNXmDHSLT8?=
 =?iso-8859-1?Q?letKO5h0Ku3tyv3CNzcEyJpuCdfmJ9eFCf9+x+xRyFwj+78SSptlaJQbJT?=
 =?iso-8859-1?Q?HOcLzZvs8WCnlAyLQHZnUsQsJzOoZ9RQdWNSFlWRPSnaQti641nXsxfGiz?=
 =?iso-8859-1?Q?DduID50qqXnl/xmO3io+ucgZW7ZagpaUCQP9xAZzBU5jpGg=3D?=
Content-Type: multipart/mixed;
	boundary="_005_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_"
MIME-Version: 1.0
X-OriginatorOrg: epam.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PA4PR03MB7136.eurprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f0f7f154-b199-4270-88ba-08d94c3cd542
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jul 2021 11:44:00.8595
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: JOglJ0nkA5KVo3KBm2/ANUPui0X9RoegA2cl0fOekwGpbyNBoeSiaOiPCS6OISYGdTwxakxJlCTrv4YGEV37ciU1tfqTPuze4FIrqdJyIPo=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR03MB6682
X-Proofpoint-ORIG-GUID: 2u4PwDjMCMBAUmIP2Z3T6ymCxUGHcVaX
X-Proofpoint-GUID: 2u4PwDjMCMBAUmIP2Z3T6ymCxUGHcVaX
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790
 definitions=2021-07-21_08:2021-07-21,2021-07-21 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501
 bulkscore=0 adultscore=0 phishscore=0 mlxlogscore=999 malwarescore=0
 suspectscore=0 mlxscore=0 clxscore=1011 lowpriorityscore=0 spamscore=0
 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2104190000 definitions=main-2107210065

--_005_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_
Content-Type: multipart/alternative;
	boundary="_000_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_"

--_000_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hello,

I've got a problem that Dom0 hangs without any output from kernel once I en=
able CONFIG_KPROBE_EVENTS and/or CONFIG_UPROBE_EVENTS in dom0 kernel.
Everything works fine when kprobe/uprobe events are disabled.

My setup:
Board: H3ULCB Kinfisher board
Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15) https:=
//github.com/xen-project/xen.git;
Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576 (v5.10-rc4)

https://github.com/torvalds/linux.git;

kernel config: see attached;

dtb: see attached;


If kprobe/uprobe events are enabled - I see no output after xen switched in=
put to Dom0, if disabled - system boots up successfully.

Both configs work fine when I boot without xen.


Dom0 information from Xen console shows that only one CPU works, and PC sta=
ys in "__arch_counter_get_cntvct" function on read_sysreg call.

I did further investigation and found that kernel 5.4 doesn't have such kin=
d of issues.
After bisecting kernel,between 5.10 and 5.4, I found that output disappeare=
d on commit:

76085aff29f585139a37a10ea0a7daa63f70872c

Another issue, which was revealed after I got kernel output was kernel oops=
 with message that CPU is in inconsistent state.

[    0.415612] EFI services will not be available.

[    0.420267] smp: Bringing up secondary CPUs ...

[    0.425185] Detected PIPT I-cache on CPU1

[    0.425267] Xen: initializing cpu1

[    0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411fd073]

[    0.425815] Detected PIPT I-cache on CPU2

[    0.425879] Xen: initializing cpu2

[    0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411fd073]

[    0.426362] Detected PIPT I-cache on CPU3

[    0.426425] Xen: initializing cpu3

[    0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411fd073]

[    0.426537] smp: Brought up 1 node, 4 CPUs

[    0.472807] SMP: Total of 4 processors activated.

[    0.477551] CPU features: detected: 32-bit EL0 Support

[    0.482745] CPU features: detected: CRC32 instructions

[    0.499470] ------------[ cut here ]------------

[    0.504034] CPU: CPUs started in inconsistent modes

[    0.504106] Internal error: aarch64 BRK: f2000800 [#1] PREEMPT SMP

[    0.515149] Modules linked in:

[    0.518256] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-rc3-yocto-st=
andard+ #32

[    0.525942] Hardware name: Renesas H3ULCB Kingfisher board based on r8a7=
795 ES3.0+ with 8GiB (4 x 2 GiB), running XEN hypervisor (DT)

[    0.537953] pstate: 60000005 (nZCv daif -PAN -UAO)

[    0.542801] pc : smp_cpus_done+0x6c/0x98

[    0.546766] lr : smp_cpus_done+0x6c/0x98

[    0.550738] sp : ffff8000120dbe10

[    0.554108] x29: ffff8000120dbe10 x28: 0000000000000000

[    0.559465] x27: 0000000000000000 x26: 0000000000000000

[    0.564826] x25: 0000000000000000 x24: 0000000000000000

[    0.570178] x23: 0000000000000000 x22: ffff800012030000

[    0.575540] x21: ffff800011806100 x20: ffff8000118a04c4

[    0.580892] x19: ffff800011d92000 x18: 0000000000000010

[    0.586249] x17: 00000000b8ee278a x16: 0000000000000012

[    0.591605] x15: ffff00006f4b0470 x14: ffffffffffffffff

[    0.596962] x13: 00000000000001c9 x12: 0000000000000001

[    0.602319] x11: ffff8000120dbe10 x10: ffff8000120dbe10

[    0.607676] x9 : ffff8000120dbe10 x8 : 0000000000000000

[    0.613033] x7 : 6574726174732073 x6 : ffff80001203c8f7

[    0.618390] x5 : 0000000000000000 x4 : 0000000000000000

[    0.623747] x3 : 00000000ffffffff x2 : ffff80005e4d2000

[    0.629103] x1 : 0000000000000000 x0 : 0000000000000000

[    0.634460] Call trace:

[    0.636969]  smp_cpus_done+0x6c/0x98

[    0.640599]  smp_init+0x7c/0x8c

[    0.643795]  kernel_init_freeable+0xfc/0x25c

[    0.648118]  kernel_init+0x14/0x108

[    0.651660]  ret_from_fork+0x10/0x18

[    0.655294] Code: 540000c0 f0ffebc0 91032000 97a50120 (d4210000)

This problem appears on commit:

f365ab31efacb70bed1e821f7435626e0b2528a6


Both this commits seems to have to direct relation to the problem.


Has anybody met this issue before? Any suggestions will be appreciated.


Please let me know if you need additional information


Best regards,

Oleksii



--_000_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica,=
 sans-serif; font-size: 12pt;">Hello,</span><br>
</div>
<div>
<div dir=3D"ltr">
<div>
<div dir=3D"ltr">
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
I've got a problem that Dom0 hangs without any output from kernel once I en=
able CONFIG_KPROBE_EVENTS and/or CONFIG_UPROBE_EVENTS in dom0 kernel.</div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
Everything works fine when kprobe/uprobe events are disabled.&nbsp;</div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
My setup:</div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
Board: H3ULCB Kinfisher board</div>
<div><font face=3D"Calibri, Arial, Helvetica, sans-serif" size=3D"3">Xen: r=
</font><font face=3D"Calibri, Arial, Helvetica, sans-serif" size=3D"3" styl=
e=3D"color:inherit; font-style:inherit; font-variant-caps:inherit">evision&=
nbsp;</font><font face=3D"inherit" style=3D"color:inherit; font-family:inhe=
rit; font-size:inherit; font-style:inherit; font-variant-caps:inherit">dba7=
74896f7dd74773c14d537643b7d7477fefcd
 (stable-4.15)&nbsp;</font><span style=3D"font-family:Calibri,Arial,Helveti=
ca,sans-serif; font-size:12pt; color:rgb(0,0,0)"><a href=3D"https://github.=
com/xen-project/xen.git" id=3D"LPlnk540076">https://github.com/xen-project/=
xen.git</a>;</span></div>
<div><span style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-si=
ze:12pt; color:rgb(0,0,0)">Kernel: revision&nbsp;</span><span style=3D"colo=
r:rgb(0,0,0); font-size:12pt; font-variant-ligatures:no-common-ligatures; f=
ont-family:Calibri,Arial,Helvetica,sans-serif">09162bc32c880a791c6c0668ce07=
45cf7958f576</span><span style=3D"color:rgb(0,0,0); font-size:12pt; font-va=
riant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibri,Ari=
al,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">&nbsp;(v5.10-rc4=
)</span></span></div>
<div><span style=3D"font-variant-ligatures:no-common-ligatures">
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><a href=
=3D"https://github.com/torvalds/linux.git" id=3D"LPlnk885399">https://githu=
b.com/torvalds/linux.git</a>;</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">kernel co=
nfig: see attached;</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">dtb: see =
attached;</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
<br>
</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
If kprobe/uprobe events are enabled - I see no output after xen switched in=
put to Dom0, if disabled - system boots up successfully.&nbsp;</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
Both configs work fine when I boot without xen.</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px; font-stretch:normal; line-height:normal">
<br>
</p>
Dom0 information from Xen console shows that only one CPU works, and PC sta=
ys in &quot;__arch_counter_get_cntvct&quot; function on read_sysreg call.&n=
bsp;<i></i></span></div>
<div><br>
</div>
<div>I did further investigation and found that kernel 5.4 doesn't have suc=
h kind of issues.</div>
<div><span style=3D"font-variant-ligatures:no-common-ligatures">After bisec=
ting kernel,between 5.10 and 5.4, I found that output disappeared on commit=
:</span></div>
<div><span style=3D"font-variant-ligatures:no-common-ligatures">
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">76085aff2=
9f585139a37a10ea0a7daa63f70872c</span><span style=3D"font-variant-ligatures=
:no-common-ligatures"><span style=3D"font-family:Calibri,Arial,Helvetica,sa=
ns-serif; font-size:12pt; color:rgb(0,0,0)">&nbsp;
 &nbsp;</span></span></p>
<br>
</span></div>
<div><span style=3D"font-variant-ligatures:no-common-ligatures">Another iss=
ue, which was revealed after I got kernel output was kernel oops with messa=
ge that CPU is in inconsistent state.</span></div>
<div><span style=3D"font-variant-ligatures:no-common-ligatures">
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px; font-stretch:no=
rmal; line-height:normal">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><s=
pan style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"fon=
t-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0=
)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.415612] EFI services will not be available.</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.420267] smp: Bringing up secondary CPUs ...</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.425185] Detected PIPT I-cache on CPU1</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.425267] Xen: initializing cpu1</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411f=
d073]</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.425815] Detected PIPT I-cache on CPU2</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.425879] Xen: initializing cpu2</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411f=
d073]</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.426362] Detected PIPT I-cache on CPU3</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.426425] Xen: initializing cpu3</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411f=
d073]</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.426537] smp: Brought up 1 node, 4 CPUs</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.472807] SMP: Total of 4 processors activated.</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.477551] CPU features: detected: 32-bit EL0 Support</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.482745] CPU features: detected: CRC32 instructions</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.499470] ------------[ cut here ]------------</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.504034] CPU: CPUs started in inconsistent modes</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.504106] Internal error: aarch64 BRK: f2000800 [#1] PREEMPT SM=
P</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.515149] Modules linked in:</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.518256] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-rc3-y=
octo-standard+ #32</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.525942] Hardware name: Renesas H3ULCB Kingfisher board based =
on r8a7795 ES3.0+ with 8GiB (4 x 2 GiB),
 running XEN hypervisor (DT)</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.537953] pstate: 60000005 (nZCv daif -PAN -UAO)</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.542801] pc : smp_cpus_done+0x6c/0x98</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.546766] lr : smp_cpus_done+0x6c/0x98</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.550738] sp : ffff8000120dbe10</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.554108] x29: ffff8000120dbe10 x28: 0000000000000000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.559465] x27: 0000000000000000 x26: 0000000000000000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.564826] x25: 0000000000000000 x24: 0000000000000000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.570178] x23: 0000000000000000 x22: ffff800012030000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.575540] x21: ffff800011806100 x20: ffff8000118a04c4</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.580892] x19: ffff800011d92000 x18: 0000000000000010</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.586249] x17: 00000000b8ee278a x16: 0000000000000012</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.591605] x15: ffff00006f4b0470 x14: ffffffffffffffff</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.596962] x13: 00000000000001c9 x12: 0000000000000001</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.602319] x11: ffff8000120dbe10 x10: ffff8000120dbe10</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.607676] x9 : ffff8000120dbe10 x8 : 0000000000000000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.613033] x7 : 6574726174732073 x6 : ffff80001203c8f7</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.618390] x5 : 0000000000000000 x4 : 0000000000000000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.623747] x3 : 00000000ffffffff x2 : ffff80005e4d2000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.629103] x1 : 0000000000000000 x0 : 0000000000000000</span><sp=
an style=3D"font-variant-ligatures:no-common-ligatures"><span style=3D"font=
-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)=
">&nbsp;</span></span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.634460] Call trace:</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.636969]</span><span style=3D"font-variant-ligatures:no-common=
-ligatures"><span style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; =
font-size:9pt; color:rgb(0,0,0)">&nbsp;
</span></span><span style=3D"font-variant-ligatures:no-common-ligatures; fo=
nt-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,=
0)">smp_cpus_done+0x6c/0x98</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.640599]</span><span style=3D"font-variant-ligatures:no-common=
-ligatures"><span style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; =
font-size:9pt; color:rgb(0,0,0)">&nbsp;
</span></span><span style=3D"font-variant-ligatures:no-common-ligatures; fo=
nt-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,=
0)">smp_init+0x7c/0x8c</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.643795]</span><span style=3D"font-variant-ligatures:no-common=
-ligatures"><span style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; =
font-size:9pt; color:rgb(0,0,0)">&nbsp;
</span></span><span style=3D"font-variant-ligatures:no-common-ligatures; fo=
nt-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,=
0)">kernel_init_freeable+0xfc/0x25c</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.648118]</span><span style=3D"font-variant-ligatures:no-common=
-ligatures"><span style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; =
font-size:9pt; color:rgb(0,0,0)">&nbsp;
</span></span><span style=3D"font-variant-ligatures:no-common-ligatures; fo=
nt-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,=
0)">kernel_init+0x14/0x108</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.651660]</span><span style=3D"font-variant-ligatures:no-common=
-ligatures"><span style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; =
font-size:9pt; color:rgb(0,0,0)">&nbsp;
</span></span><span style=3D"font-variant-ligatures:no-common-ligatures; fo=
nt-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,=
0)">ret_from_fork+0x10/0x18</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin:0px"><span style=3D"=
font-variant-ligatures:no-common-ligatures; font-family:Calibri,Arial,Helve=
tica,sans-serif; font-size:9pt; color:rgb(0,0,0)">[</span><span style=3D"fo=
nt-variant-ligatures:no-common-ligatures"><span style=3D"font-family:Calibr=
i,Arial,Helvetica,sans-serif; font-size:9pt; color:rgb(0,0,0)">&nbsp;
 &nbsp; </span></span><span style=3D"font-variant-ligatures:no-common-ligat=
ures; font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:=
rgb(0,0,0)">0.655294] Code: 540000c0 f0ffebc0 91032000 97a50120 (d4210000)<=
/span><span style=3D"font-variant-ligatures:no-common-ligatures"><span styl=
e=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:9pt; color:r=
gb(0,0,0)">&nbsp;</span></span></p>
<br>
</span></div>
<div>This problem appears on commit:</div>
<div><span style=3D"font-variant-ligatures:no-common-ligatures">
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">f365ab31e=
facb70bed1e821f7435626e0b2528a6</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><br>
</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">Both this=
 commits seems to have to direct relation to the problem.</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<span style=3D"font-variant-ligatures:no-common-ligatures; font-family:Cali=
bri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)"><br>
</span></p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
Has anybody met this issue before? Any suggestions will be appreciated.</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<br>
</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
Please let me know if you need additional information</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<br>
</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
Best regards,&nbsp;</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
Oleksii</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<br>
</p>
<p style=3D"margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bott=
om:0px; margin:0px">
<br>
</p>
</span></div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_--

--_005_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_
Content-Type: application/octet-stream; name="r8a77951-ulcb-kf-xen.dtb"
Content-Description: r8a77951-ulcb-kf-xen.dtb
Content-Disposition: attachment; filename="r8a77951-ulcb-kf-xen.dtb";
	size=96446; creation-date="Wed, 21 Jul 2021 08:57:14 GMT";
	modification-date="Wed, 21 Jul 2021 09:59:40 GMT"
Content-Transfer-Encoding: base64

0A3+7QABeL4AAAA4AAFsHAAAACgAAAARAAAAEAAAAAAAAAyiAAFr5AAAAAAAAAAAAAAAAAAAAAAA
AAABAAAAAAAAAAMAAAA0AAAAAHNoaW1hZnVqaSxraW5nZmlzaGVyAHJlbmVzYXMsaDN1bGNiAHJl
bmVzYXMscjhhNzc5NQAAAAADAAAABAAAAAsAAAACAAAAAwAAAAQAAAAaAAAAAgAAAAMAAABmAAAA
JlJlbmVzYXMgSDNVTENCIEtpbmdmaXNoZXIgYm9hcmQgYmFzZWQgb24gcjhhNzc5NSBFUzMuMCsg
d2l0aCA4R2lCICg0IHggMiBHaUIpLCBydW5uaW5nIFhFTiBoeXBlcnZpc29yAAAAAAAAAWFsaWFz
ZXMAAAAAAwAAABIAAAAsL3NvYy9pMmNAZTY1MDAwMDAAAAAAAAADAAAAEgAAADEvc29jL2kyY0Bl
NjUwODAwMAAAAAAAAAMAAAASAAAANi9zb2MvaTJjQGU2NTEwMDAwAAAAAAAAAwAAABIAAAA7L3Nv
Yy9pMmNAZTY2ZDAwMDAAAAAAAAADAAAAEgAAAEAvc29jL2kyY0BlNjZkODAwMAAAAAAAAAMAAAAS
AAAARS9zb2MvaTJjQGU2NmUwMDAwAAAAAAAAAwAAABIAAABKL3NvYy9pMmNAZTY2ZTgwMDAAAAAA
AAADAAAAEgAAAE8vc29jL2kyY0BlNjBiMDAwMAAAAAAAAAMAAAASAAAAVC9zb2Mvc3BpQGU2ZTkw
MDAwAAAAAAAAAwAAABIAAABZL3NvYy9zcGlAZTZlYTAwMDAAAAAAAAADAAAAEgAAAF4vc29jL3Nw
aUBlNmMwMDAwMAAAAAAAAAMAAAASAAAAYy9zb2Mvc3BpQGU2YzEwMDAwAAAAAAAAAwAAABUAAABo
L3NvYy9zZXJpYWxAZTZlODgwMDAAAAAAAAAAAwAAABcAAABwL3NvYy9ldGhlcm5ldEBlNjgwMDAw
MAAAAAAAAwAAABIAAAB6L3NvYy9tbWNAZWUxNDAwMDAAAAAAAAADAAAAEgAAAH8vc29jL21tY0Bl
ZTEwMDAwMAAAAAAAAAMAAAAVAAAAhC9zb2Mvc2VyaWFsQGU2NTQwMDAwAAAAAAAAAAMAAAAVAAAA
jC9zb2Mvc2VyaWFsQGU2ZTY4MDAwAAAAAAAAAAMAAAAVAAAAlC9zb2Mvc2VyaWFsQGU2NTUwMDAw
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
ZTEAAAAAAAMAAAAUAAAAAG9wZXJhdGluZy1wb2ludHMtdjIAAAAAAwAAAAQAAAC+AAAApQAAAAFv
cHAtMjAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAAAvrwgAAAAADAAAABAAAANgADIMgAAAAAgAA
AAFvcHAtMzAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAABHhowAAAAADAAAABAAAANgADIMgAAAA
AgAAAAFvcHAtNDAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAABfXhAAAAAADAAAABAAAANgADIMg
AAAAAgAAAAFvcHAtNjAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAACPDRgAAAAADAAAABAAAANgA
DIMgAAAAAgAAAAIAAAABZ3N4X29wcF90YWJsZTIAAAAAAAMAAAAUAAAAAG9wZXJhdGluZy1wb2lu
dHMtdjIAAAAAAwAAAAQAAAC+AAAApgAAAAFvcHAtMjAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAA
AAvrwgAAAAADAAAABAAAANgADFwQAAAAAgAAAAFvcHAtMzAwMDAwMDAwAAAAAAAAAwAAAAgAAADR
AAAAABHhowAAAAADAAAABAAAANgADFwQAAAAAgAAAAFvcHAtNDAwMDAwMDAwAAAAAAAAAwAAAAgA
AADRAAAAABfXhAAAAAADAAAABAAAANgADFwQAAAAAgAAAAFvcHAtNjAwMDAwMDAwAAAAAAAAAwAA
AAgAAADRAAAAACPDRgAAAAADAAAABAAAANgADFwQAAAAAgAAAAIAAAABZ3N4X29wcF90YWJsZTMA
AAAAAAMAAAAUAAAAAG9wZXJhdGluZy1wb2ludHMtdjIAAAAAAwAAAAQAAAC+AAAApwAAAAFvcHAt
MjAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAAAvrwgAAAAADAAAABAAAANgADDUAAAAAAgAAAAFv
cHAtMzAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAABHhowAAAAADAAAABAAAANgADDUAAAAAAgAA
AAFvcHAtNDAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAABfXhAAAAAADAAAABAAAANgADDUAAAAA
AgAAAAFvcHAtNjAwMDAwMDAwAAAAAAAAAwAAAAgAAADRAAAAACPDRgAAAAADAAAABAAAANgADDUA
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
AAAADAAAAZ0AAAAMAAAAAQAAA4wAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwA
AAOMAAAAAW1vc3RfcnN0AAAAAAAAAAMAAAAAAAADHwAAAAMAAAAIAAADKAAAAA4AAAAAAAAAAwAA
AAAAAAMuAAAAAwAAAAkAAAM6TU9TVCBSU1QAAAAAAAAAAgAAAAIAAAABZ3Bpb0BlNjA1NTAwMAAA
AAAAAAMAAAAsAAAAAHJlbmVzYXMsZ3Bpby1yOGE3Nzk1AHJlbmVzYXMscmNhci1nZW4zLWdwaW8A
AAAAAwAAABAAAAESAAAAAOYFUAAAAAAAAAAAUAAAAAMAAAAMAAACkwAAAAAAAAAJAAAABAAAAAMA
AAAEAAAC0QAAAAIAAAADAAAAAAAAAt0AAAADAAAAEAAAAu0AAAAaAAAAAAAAAKAAAAAaAAAAAwAA
AAQAAAL5AAAAAgAAAAMAAAAAAAADCgAAAAMAAAAMAAABnQAAAAwAAAABAAADiwAAAAMAAAAIAAAB
IgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAA4sAAAADAAAABAAAAL4AAAAnAAAAAgAAAAFncGlv
QGU2MDU1NDAwAAAAAAAAAwAAACwAAAAAcmVuZXNhcyxncGlvLXI4YTc3OTUAcmVuZXNhcyxyY2Fy
LWdlbjMtZ3BpbwAAAAADAAAAEAAAARIAAAAA5gVUAAAAAAAAAABQAAAAAwAAAAwAAAKTAAAAAAAA
AAoAAAAEAAAAAwAAAAQAAALRAAAAAgAAAAMAAAAAAAAC3QAAAAMAAAAQAAAC7QAAABoAAAAAAAAA
wAAAACAAAAADAAAABAAAAvkAAAACAAAAAwAAAAAAAAMKAAAAAwAAAAwAAAGdAAAADAAAAAEAAAOK
AAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAADigAAAAMAAAAEAAAAvgAAACwA
AAABYXVkaW9fc3cAAAAAAAAAAwAAAAAAAAMfAAAAAwAAAAgAAAMoAAAAFQAAAAAAAAADAAAAAAAA
Ay4AAAADAAAAEgAAAzpPbmJvYXJkIE1DaCBBdWRpbwAAAAAAAAIAAAACAAAAAWdwaW9AZTYwNTU4
MDAAAAAAAAADAAAALAAAAAByZW5lc2FzLGdwaW8tcjhhNzc5NQByZW5lc2FzLHJjYXItZ2VuMy1n
cGlvAAAAAAMAAAAQAAABEgAAAADmBVgAAAAAAAAAAFAAAAADAAAADAAAApMAAAAAAAAACwAAAAQA
AAADAAAABAAAAtEAAAACAAAAAwAAAAAAAALdAAAAAwAAABAAAALtAAAAGgAAAAAAAADgAAAABAAA
AAMAAAAEAAAC+QAAAAIAAAADAAAAAAAAAwoAAAADAAAADAAAAZ0AAAAMAAAAAQAAA4kAAAADAAAA
CAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAOJAAAAAwAAAAQAAAC+AAAAQQAAAAIAAAAB
cGluY3RybEBlNjA2MDAwMAAAAAAAAAADAAAAFAAAAAByZW5lc2FzLHBmYy1yOGE3Nzk1AAAAAAMA
AAAQAAABEgAAAADmBgAAAAAAAAAABQwAAAADAAAABAAAA0QAAAAbAAAAAwAAAAgAAANOZGVmYXVs
dAAAAAADAAAABAAAAL4AAAAaAAAAAWF2YgAAAAADAAAABAAAAL4AAABTAAAAAW11eAAAAAADAAAA
GgAAA1xhdmJfbGluawBhdmJfbWRpbwBhdmJfbWlpAAAAAAAAAwAAAAQAAANjYXZiAAAAAAIAAAAB
cGluc19tZGlvAAAAAAAAAwAAAAkAAANcYXZiX21kaW8AAAAAAAAAAwAAAAQAAANsAAAAGAAAAAIA
AAABcGluc19taWlfdHgAAAAAAwAAAEsAAAN7UElOX0FWQl9UWF9DVEwAUElOX0FWQl9UWEMAUElO
X0FWQl9URDAAUElOX0FWQl9URDEAUElOX0FWQl9URDIAUElOX0FWQl9URDMAAAAAAAMAAAAEAAAD
bAAAAAwAAAACAAAAAgAAAAFpMmMyAAAAAAAAAAMAAAAHAAADXGkyYzJfYQAAAAAAAwAAAAUAAANj
aTJjMgAAAAAAAAADAAAABAAAAL4AAAAhAAAAAgAAAAFpcnEwAAAAAAAAAAMAAAANAAADXGludGNf
ZXhfaXJxMAAAAAAAAAADAAAACAAAA2NpbnRjX2V4AAAAAAMAAAAEAAAAvgAAAEIAAAACAAAAAXNj
aWYyAAAAAAAAAwAAAA0AAANcc2NpZjJfZGF0YV9hAAAAAAAAAAMAAAAGAAADY3NjaWYyAAAAAAAA
AwAAAAQAAAC+AAAAXAAAAAIAAAABc2NpZl9jbGsAAAAAAAAAAwAAAAsAAANcc2NpZl9jbGtfYQAA
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
ci1nZW4zLWNtdDAAAAAAAwAAABAAAAESAAAAAOYPAAAAAAAAAAAQBAAAAAMAAAAYAAACkwAAAAAA
AACOAAAABAAAAAAAAACPAAAABAAAAAMAAAAMAAABnQAAAAwAAAABAAABLwAAAAMAAAAEAAADjWZj
awAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAEvAAAAAwAAAAkAAAJmZGlz
YWJsZWQAAAAAAAAAAgAAAAF0aW1lckBlNjEzMDAwMAAAAAAAAwAAACwAAAAAcmVuZXNhcyxyOGE3
Nzk1LWNtdDEAcmVuZXNhcyxyY2FyLWdlbjMtY210MQAAAAADAAAAEAAAARIAAAAA5hMAAAAAAAAA
ABAEAAAAAwAAAGAAAAKTAAAAAAAAAHgAAAAEAAAAAAAAAHkAAAAEAAAAAAAAAHoAAAAEAAAAAAAA
AHsAAAAEAAAAAAAAAHwAAAAEAAAAAAAAAH0AAAAEAAAAAAAAAH4AAAAEAAAAAAAAAH8AAAAEAAAA
AwAAAAwAAAGdAAAADAAAAAEAAAEuAAAAAwAAAAQAAAONZmNrAAAAAAMAAAAIAAABIgAAAAkAAAAg
AAAAAwAAAAgAAAK+AAAADAAAAS4AAAADAAAACQAAAmZkaXNhYmxlZAAAAAAAAAACAAAAAXRpbWVy
QGU2MTQwMDAwAAAAAAADAAAALAAAAAByZW5lc2FzLHI4YTc3OTUtY210MQByZW5lc2FzLHJjYXIt
Z2VuMy1jbXQxAAAAAAMAAAAQAAABEgAAAADmFAAAAAAAAAAAEAQAAAADAAAAYAAAApMAAAAAAAAB
jgAAAAQAAAAAAAABjwAAAAQAAAAAAAABkAAAAAQAAAAAAAABkQAAAAQAAAAAAAABkgAAAAQAAAAA
AAABkwAAAAQAAAAAAAABlAAAAAQAAAAAAAABlQAAAAQAAAADAAAADAAAAZ0AAAAMAAAAAQAAAS0A
AAADAAAABAAAA41mY2sAAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAABLQAA
AAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIAAAABdGltZXJAZTYxNDgwMDAAAAAAAAMAAAAsAAAA
AHJlbmVzYXMscjhhNzc5NS1jbXQxAHJlbmVzYXMscmNhci1nZW4zLWNtdDEAAAAAAwAAABAAAAES
AAAAAOYUgAAAAAAAAAAQBAAAAAMAAABgAAACkwAAAAAAAAHWAAAABAAAAAAAAAHXAAAABAAAAAAA
AAHYAAAABAAAAAAAAAHZAAAABAAAAAAAAAHaAAAABAAAAAAAAAHbAAAABAAAAAAAAAHcAAAABAAA
AAAAAAHdAAAABAAAAAMAAAAMAAABnQAAAAwAAAABAAABLAAAAAMAAAAEAAADjWZjawAAAAADAAAA
CAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAEsAAAAAwAAAAkAAAJmZGlzYWJsZWQAAAAA
AAAAAgAAAAFhdnNAZTYwYTAxM2MAAAAAAAAAAwAAACsAAAAAcmVuZXNhcyxyOGE3Nzk1MS1hdnMA
cmVuZXNhcyxyY2FyLWdlbjMtYXZzAAAAAAADAAAAEAAAARIAAAAA5goBPAAAAAAAAAAEAAAAAwAA
AAwAAAGdAAAADAAAAAEAAAOdAAAAAwAAAAgAAAK+AAAADAAAA50AAAADAAAAFAAAA5kAAAABAAAA
AgAAAAMAAAAEAAAAHAAAAAIAAAABY2xvY2stY29udHJvbGxlckBlNjE1MDAwMAAAAAAAAAMAAAAZ
AAAAAHJlbmVzYXMscjhhNzc5NS1jcGctbXNzcgAAAAAAAAADAAAAEAAAARIAAAAA5hUAAAAAAAAA
ABAAAAAAAwAAAAgAAAGdAAAAHQAAAB4AAAADAAAADQAAA41leHRhbABleHRhbHIAAAAAAAAAAwAA
AAQAAAChAAAAAgAAAAMAAAAEAAADqAAAAAAAAAADAAAABAAAA7wAAAABAAAAAwAAAAQAAAC+AAAA
DAAAAAIAAAABcmVzZXQtY29udHJvbGxlckBlNjE2MDAwMAAAAAAAAAMAAAAUAAAAAHJlbmVzYXMs
cjhhNzc5NS1yc3QAAAAAAwAAABAAAAESAAAAAOYWAAAAAAAAAAACAAAAAAIAAAABc3lzdGVtLWNv
bnRyb2xsZXJAZTYxODAwMDAAAAAAAAMAAAAVAAAAAHJlbmVzYXMscjhhNzc5NS1zeXNjAAAAAAAA
AAMAAAAQAAABEgAAAADmGAAAAAAAAAAABAAAAAADAAAABAAAA6gAAAABAAAAAwAAAAQAAAC+AAAA
CQAAAAIAAAABdGhlcm1hbEBlNjE5ODAwMAAAAAAAAAADAAAAGAAAAAByZW5lc2FzLHI4YTc3OTUt
dGhlcm1hbAAAAAADAAAAMAAAARIAAAAA5hmAAAAAAAAAAAEAAAAAAOYaAAAAAAAAAAABAAAAAADm
GoAAAAAAAAAAAQAAAAADAAAAJAAAApMAAAAAAAAAQwAAAAQAAAAAAAAARAAAAAQAAAAAAAAARQAA
AAQAAAADAAAADAAAAZ0AAAAMAAAAAQAAAgoAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAAC
vgAAAAwAAAIKAAAAAwAAAAQAAAPJAAAAAQAAAAIAAAABaW50ZXJydXB0LWNvbnRyb2xsZXJAZTYx
YzAwMDAAAAAAAAADAAAAJQAAAAByZW5lc2FzLGludGMtZXgtcjhhNzc5NQByZW5lc2FzLGlycWMA
AAAAAAAAAwAAAAQAAAL5AAAAAgAAAAMAAAAAAAADCgAAAAMAAAAQAAABEgAAAADmHAAAAAAAAAAA
AgAAAAADAAAASAAAApMAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAQAAAAAAAAAAgAAAAQAAAAAAAAA
AwAAAAQAAAAAAAAAEgAAAAQAAAAAAAAAoQAAAAQAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAE
AAAAvgAAAEMAAAACAAAAAWkyY0BlNjUwMDAwMAAAAAAAAAADAAAABAAAAAsAAAABAAAAAwAAAAQA
AAAaAAAAAAAAAAMAAAAqAAAAAHJlbmVzYXMsaTJjLXI4YTc3OTUAcmVuZXNhcyxyY2FyLWdlbjMt
aTJjAAAAAAAAAwAAABAAAAESAAAAAOZQAAAAAAAAAAAAQAAAAAMAAAAMAAACkwAAAAAAAAEfAAAA
BAAAAAMAAAAMAAABnQAAAAwAAAABAAADowAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+
AAAADAAAA6MAAAADAAAAIAAAA98AAAAfAAAAkQAAAB8AAACQAAAAIAAAAJEAAAAgAAAAkAAAAAMA
AAAMAAAD5HR4AHJ4AHR4AHJ4AAAAAAMAAAAEAAAD7gAAAG4AAAADAAAACQAAAmZkaXNhYmxlZAAA
AAAAAAACAAAAAWkyY0BlNjUwODAwMAAAAAAAAAADAAAABAAAAAsAAAABAAAAAwAAAAQAAAAaAAAA
AAAAAAMAAAAqAAAAAHJlbmVzYXMsaTJjLXI4YTc3OTUAcmVuZXNhcyxyY2FyLWdlbjMtaTJjAAAA
AAAAAwAAABAAAAESAAAAAOZQgAAAAAAAAAAAQAAAAAMAAAAMAAACkwAAAAAAAAEgAAAABAAAAAMA
AAAMAAABnQAAAAwAAAABAAADogAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAA
A6IAAAADAAAAIAAAA98AAAAfAAAAkwAAAB8AAACSAAAAIAAAAJMAAAAgAAAAkgAAAAMAAAAMAAAD
5HR4AHJ4AHR4AHJ4AAAAAAMAAAAEAAAD7gAAAAYAAAADAAAACQAAAmZkaXNhYmxlZAAAAAAAAAAC
AAAAAWkyY0BlNjUxMDAwMAAAAAAAAAADAAAABAAAAAsAAAABAAAAAwAAAAQAAAAaAAAAAAAAAAMA
AAAqAAAAAHJlbmVzYXMsaTJjLXI4YTc3OTUAcmVuZXNhcyxyY2FyLWdlbjMtaTJjAAAAAAAAAwAA
ABAAAAESAAAAAOZRAAAAAAAAAAAAQAAAAAMAAAAMAAACkwAAAAAAAAEeAAAABAAAAAMAAAAMAAAB
nQAAAAwAAAABAAADoQAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAA6EAAAAD
AAAAIAAAA98AAAAfAAAAlQAAAB8AAACUAAAAIAAAAJUAAAAgAAAAlAAAAAMAAAAMAAAD5HR4AHJ4
AHR4AHJ4AAAAAAMAAAAEAAAD7gAAAAYAAAADAAAABQAAAmZva2F5AAAAAAAAAAMAAAAEAAADRAAA
ACEAAAADAAAACAAAA05kZWZhdWx0AAAAAAMAAAAEAAAArgABhqAAAAADAAAAAAAABAgAAAABY29k
ZWNAMTAAAAAAAAAAAwAAABMAAAAAYXNhaGkta2FzZWksYWs0NjEzAAAAAAADAAAABAAABBgAAAAA
AAAAAwAAAAQAAAESAAAAEAAAAAMAAAAIAAABnQAAACIAAAADAAAAAwAAAAAAAAQpAAAAAwAAAAAA
AAREAAAAAwAAAAAAAARfAAAAAwAAAAAAAAR7AAAAAwAAAAAAAASXAAAAAwAAAAAAAASzAAAAAwAA
AAAAAATPAAAAAwAAAAAAAATrAAAAAXBvcnQAAAAAAAAAAWVuZHBvaW50AAAAAAAAAAMAAAAEAAAF
BwAAACMAAAADAAAABAAAAL4AAACAAAAAAgAAAAIAAAACAAAAAWNsay1tdWx0aXBsaWVyQDRmAAAA
AAAAAwAAAAQAAAChAAAAAAAAAAMAAAARAAAAAGNpcnJ1cyxjczIwMDAtY3AAAAAAAAAAAwAAAAQA
AAESAAAATwAAAAMAAAAIAAABnQAAACQAAAAlAAAAAwAAAA8AAAONY2xrX2luAHJlZl9jbGsAAAAA
AAMAAAAEAAAFFwAAACYAAAADAAAABAAABScBdwAAAAAAAwAAAAQAAAC+AAAAJgAAAAIAAAABaTJj
LXN3aXRjaEA3MQAAAAAAAAMAAAAMAAAAAG54cCxwY2E5NTQ4AAAAAAMAAAAEAAAACwAAAAEAAAAD
AAAABAAAABoAAAAAAAAAAwAAAAQAAAESAAAAcQAAAAMAAAAMAAAFPAAAACcAAAADAAAAAQAAAAMA
AAAAAAAFSAAAAAFpMmNAMAAAAAAAAAMAAAAEAAAACwAAAAEAAAADAAAABAAAABoAAAAAAAAAAwAA
AAQAAAESAAAAAAAAAAIAAAABaTJjQDEAAAAAAAADAAAABAAAAAsAAAABAAAAAwAAAAQAAAAaAAAA
AAAAAAMAAAAEAAABEgAAAAEAAAACAAAAAWkyY0AyAAAAAAAAAwAAAAQAAAALAAAAAQAAAAMAAAAE
AAAAGgAAAAAAAAADAAAABAAAARIAAAACAAAAAgAAAAFpMmNAMwAAAAAAAAMAAAAEAAAACwAAAAEA
AAADAAAABAAAABoAAAAAAAAAAwAAAAQAAAESAAAAAwAAAAIAAAABaTJjQDQAAAAAAAADAAAABAAA
AAsAAAABAAAAAwAAAAQAAAAaAAAAAAAAAAMAAAAEAAABEgAAAAQAAAACAAAAAWkyY0A1AAAAAAAA
AwAAAAQAAAALAAAAAQAAAAMAAAAEAAAAGgAAAAAAAAADAAAABAAAARIAAAAFAAAAAgAAAAFpMmNA
NgAAAAAAAAMAAAAEAAAACwAAAAEAAAADAAAABAAAABoAAAAAAAAAAwAAAAQAAAESAAAABgAAAAFl
ZHQtZnQ1eDA2QDM4AAAAAAAAAwAAAA8AAAAAZWR0LGVkdC1mdDV4MDYAAAAAAAMAAAAEAAABEgAA
ADgAAAADAAAABAAAAm0AAAAnAAAAAwAAAAgAAAKTAAAABgAAAAIAAAACAAAAAgAAAAFpMmNANwAA
AAAAAAMAAAAEAAAACwAAAAEAAAADAAAABAAAABoAAAAAAAAAAwAAAAQAAAESAAAABwAAAAFhdWRp
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
b2ludAAAAAAAAAADAAAABAAABQcAAAA1AAAAAwAAAAQAAAC+AAAAOgAAAAIAAAACAAAAAXBvcnRA
MQAAAAAAAwAAAAQAAAESAAAAAQAAAAFlbmRwb2ludAAAAAAAAAADAAAABAAABQcAAAA2AAAAAwAA
AAQAAAC+AAAAOwAAAAIAAAACAAAAAXBvcnRAMgAAAAAAAwAAAAQAAAESAAAAAgAAAAFlbmRwb2lu
dAAAAAAAAAADAAAABAAABQcAAAA3AAAAAwAAAAQAAAC+AAAAPAAAAAIAAAACAAAAAXBvcnRAMwAA
AAAAAwAAAAQAAAESAAAAAwAAAAFlbmRwb2ludAAAAAAAAAADAAAABAAABQcAAAA4AAAAAwAAAAQA
AAC+AAAAPQAAAAIAAAACAAAAAXBvcnRANAAAAAAAAwAAAAQAAAESAAAABAAAAAFlbmRwb2ludAAA
AAAAAAADAAAABAAABg0AAAAAAAAAAwAAABAAAAYZAAAAAQAAAAIAAAADAAAABAAAAAMAAAAEAAAF
BwAAADkAAAADAAAABAAAAL4AAADBAAAAAgAAAAIAAAACAAAAAWkyY0AwAAAAAAAAAwAAAAQAAAAL
AAAAAQAAAAMAAAAEAAAAGgAAAAAAAAADAAAABAAAARIAAAAAAAAAAWNhbWVyYUA2MAAAAAAAAAMA
AABsAAAAAG9ubm4sYXAwMTAxAG9ubm4sYXAwMjAxAG92dGksb3YxMDYzNQBvdnRpLG92MjMxMQBv
dnRpLG92NDkwAG92dGksb3Y0OTUAc29ueSxpc3gwMTYAc29ueSxpc3gwMTkAZHVtbXksY2FtZXJh
AAAAAAMAAAAIAAABEgAAAGAAAAAMAAAAAXBvcnQAAAAAAAAAAWVuZHBvaW50AAAAAAAAAAMAAAAE
AAAFBwAAADoAAAADAAAABAAAAL4AAAA1AAAAAgAAAAIAAAACAAAAAgAAAAFpMmNAMQAAAAAAAAMA
AAAEAAAACwAAAAEAAAADAAAABAAAABoAAAAAAAAAAwAAAAQAAAESAAAAAQAAAAFjYW1lcmFANjEA
AAAAAAADAAAAbAAAAABvbm5uLGFwMDEwMQBvbm5uLGFwMDIwMQBvdnRpLG92MTA2MzUAb3Z0aSxv
djIzMTEAb3Z0aSxvdjQ5MABvdnRpLG92NDk1AHNvbnksaXN4MDE2AHNvbnksaXN4MDE5AGR1bW15
LGNhbWVyYQAAAAADAAAACAAAARIAAABhAAAADQAAAAFwb3J0AAAAAAAAAAFlbmRwb2ludAAAAAAA
AAADAAAABAAABQcAAAA7AAAAAwAAAAQAAAC+AAAANgAAAAIAAAACAAAAAgAAAAIAAAABaTJjQDIA
AAAAAAADAAAABAAAAAsAAAABAAAAAwAAAAQAAAAaAAAAAAAAAAMAAAAEAAABEgAAAAIAAAABY2Ft
ZXJhQDYyAAAAAAAAAwAAAGwAAAAAb25ubixhcDAxMDEAb25ubixhcDAyMDEAb3Z0aSxvdjEwNjM1
AG92dGksb3YyMzExAG92dGksb3Y0OTAAb3Z0aSxvdjQ5NQBzb255LGlzeDAxNgBzb255LGlzeDAx
OQBkdW1teSxjYW1lcmEAAAAAAwAAAAgAAAESAAAAYgAAAA4AAAABcG9ydAAAAAAAAAABZW5kcG9p
bnQAAAAAAAAAAwAAAAQAAAUHAAAAPAAAAAMAAAAEAAAAvgAAADcAAAACAAAAAgAAAAIAAAACAAAA
AWkyY0AzAAAAAAAAAwAAAAQAAAALAAAAAQAAAAMAAAAEAAAAGgAAAAAAAAADAAAABAAAARIAAAAD
AAAAAWNhbWVyYUA2MwAAAAAAAAMAAABsAAAAAG9ubm4sYXAwMTAxAG9ubm4sYXAwMjAxAG92dGks
b3YxMDYzNQBvdnRpLG92MjMxMQBvdnRpLG92NDkwAG92dGksb3Y0OTUAc29ueSxpc3gwMTYAc29u
eSxpc3gwMTkAZHVtbXksY2FtZXJhAAAAAAMAAAAIAAABEgAAAGMAAAAPAAAAAXBvcnQAAAAAAAAA
AWVuZHBvaW50AAAAAAAAAAMAAAAEAAAFBwAAAD0AAAADAAAABAAAAL4AAAA4AAAAAgAAAAIAAAAC
AAAAAgAAAAIAAAACAAAAAWkyY0AzAAAAAAAAAwAAAAQAAAALAAAAAQAAAAMAAAAEAAAAGgAAAAAA
AAADAAAABAAAARIAAAADAAAAAgAAAAFpMmNANAAAAAAAAAMAAAAEAAAACwAAAAEAAAADAAAABAAA
ABoAAAAAAAAAAwAAAAQAAAESAAAABAAAAAFvdjU2NDdAMzYAAAAAAAADAAAADAAAAABvdnRpLG92
NTY0NwAAAAADAAAABAAAARIAAAA2AAAAAwAAAAQAAAGdAAAAPgAAAAFwb3J0QDAAAAAAAAFlbmRw
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
AAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAIHAAAAAwAAAAUAAAJmb2theQAAAAAA
AAADAAAABAAAA0QAAABGAAAAAwAAAAgAAANOZGVmYXVsdAAAAAADAAAAAAAABAgAAAACAAAAAXNl
cmlhbEBlNjU2MDAwMAAAAAADAAAAPAAAAAByZW5lc2FzLGhzY2lmLXI4YTc3OTUAcmVuZXNhcyxy
Y2FyLWdlbjMtaHNjaWYAcmVuZXNhcyxoc2NpZgAAAAADAAAAEAAAARIAAAAA5lYAAAAAAAAAAABg
AAAAAwAAAAwAAAKTAAAAAAAAAJAAAAAEAAAAAwAAABwAAAGdAAAADAAAAAEAAAIGAAAADAAAAAAA
AAAQAAAARAAAAAMAAAAVAAADjWZjawBicmdfaW50AHNjaWZfY2xrAAAAAAAAAAMAAAAgAAAD3wAA
AB8AAAA1AAAAHwAAADQAAAAgAAAANQAAACAAAAA0AAAAAwAAAAwAAAPkdHgAcngAdHgAcngAAAAA
AwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAACBgAAAAMAAAAJAAACZmRpc2FibGVk
AAAAAAAAAAIAAAABc2VyaWFsQGU2NmEwMDAwAAAAAAMAAAA8AAAAAHJlbmVzYXMsaHNjaWYtcjhh
Nzc5NQByZW5lc2FzLHJjYXItZ2VuMy1oc2NpZgByZW5lc2FzLGhzY2lmAAAAAAMAAAAQAAABEgAA
AADmagAAAAAAAAAAAGAAAAADAAAADAAAApMAAAAAAAAAkQAAAAQAAAADAAAAHAAAAZ0AAAAMAAAA
AQAAAgUAAAAMAAAAAAAAABAAAABEAAAAAwAAABUAAAONZmNrAGJyZ19pbnQAc2NpZl9jbGsAAAAA
AAAAAwAAABAAAAPfAAAALQAAADcAAAAtAAAANgAAAAMAAAAGAAAD5HR4AHJ4AAAAAAAAAwAAAAgA
AAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAACBQAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAA
AAIAAAABc2VyaWFsQGU2NmIwMDAwAAAAAAMAAAA8AAAAAHJlbmVzYXMsaHNjaWYtcjhhNzc5NQBy
ZW5lc2FzLHJjYXItZ2VuMy1oc2NpZgByZW5lc2FzLGhzY2lmAAAAAAMAAAAQAAABEgAAAADmawAA
AAAAAAAAAGAAAAADAAAADAAAApMAAAAAAAAAkgAAAAQAAAADAAAAHAAAAZ0AAAAMAAAAAQAAAgQA
AAAMAAAAAAAAABAAAABEAAAAAwAAABUAAAONZmNrAGJyZ19pbnQAc2NpZl9jbGsAAAAAAAAAAwAA
ABAAAAPfAAAALQAAADkAAAAtAAAAOAAAAAMAAAAGAAAD5HR4AHJ4AAAAAAAAAwAAAAgAAAEiAAAA
CQAAACAAAAADAAAACAAAAr4AAAAMAAACBAAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIAAAAB
dXNiQGU2NTkwMDAwAAAAAAAAAAMAAAAuAAAAAHJlbmVzYXMsdXNiaHMtcjhhNzc5NQByZW5lc2Fz
LHJjYXItZ2VuMy11c2JocwAAAAAAAAMAAAAQAAABEgAAAADmWQAAAAAAAAAAAgAAAAADAAAADAAA
ApMAAAAAAAAAawAAAAQAAAADAAAAGAAAAZ0AAAAMAAAAAQAAAsAAAAAMAAAAAQAAAr8AAAADAAAA
IAAAA98AAABHAAAAAAAAAEcAAAABAAAASAAAAAAAAABIAAAAAQAAAAMAAAAQAAAD5GNoMABjaDEA
Y2gyAGNoMwAAAAADAAAABAAABskAAAALAAAAAwAAAAgAAAbZAAAASQAAAAMAAAADAAAABAAABt51
c2IAAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAAEAAAAr4AAAAMAAACwAAAAAwAAAK/AAAAAwAA
AAUAAAJmb2theQAAAAAAAAADAAAABAAABuhvdGcAAAAAAwAAAAAAAAQIAAAAAgAAAAF1c2JAZTY1
OWMwMDAAAAAAAAAAAwAAAC4AAAAAcmVuZXNhcyx1c2Jocy1yOGE3Nzk1AHJlbmVzYXMscmNhci1n
ZW4zLXVzYmhzAAAAAAAAAwAAABAAAAESAAAAAOZZwAAAAAAAAAACAAAAAAMAAAAMAAACkwAAAAAA
AAAlAAAABAAAAAMAAAAYAAABnQAAAAwAAAABAAACwQAAAAwAAAABAAACvAAAAAMAAAAgAAAD3wAA
AEoAAAAAAAAASgAAAAEAAABLAAAAAAAAAEsAAAABAAAAAwAAABAAAAPkY2gwAGNoMQBjaDIAY2gz
AAAAAAMAAAAEAAAGyQAAAAsAAAADAAAACAAABtkAAABMAAAAAwAAAAMAAAAEAAAG3nVzYgAAAAAD
AAAACAAAASIAAAAJAAAAIAAAAAMAAAAQAAACvgAAAAwAAALBAAAADAAAArwAAAADAAAACQAAAmZk
aXNhYmxlZAAAAAAAAAACAAAAAWRtYS1jb250cm9sbGVyQGU2NWEwMDAwAAAAAAMAAAAqAAAAAHJl
bmVzYXMscjhhNzc5NS11c2ItZG1hYwByZW5lc2FzLHVzYi1kbWFjAAAAAAAAAwAAABAAAAESAAAA
AOZaAAAAAAAAAAABAAAAAAMAAAAYAAACkwAAAAAAAABtAAAABAAAAAAAAABtAAAABAAAAAMAAAAI
AAACnmNoMABjaDEAAAAAAwAAAAwAAAGdAAAADAAAAAEAAAFKAAAAAwAAAAgAAAEiAAAACQAAACAA
AAADAAAACAAAAr4AAAAMAAABSgAAAAMAAAAEAAAG8AAAAAEAAAADAAAABAAABvsAAAACAAAAAwAA
AAgAAAcIAAAATQAAAAkAAAADAAAAAAAABAgAAAADAAAABAAAAL4AAABHAAAAAgAAAAFkbWEtY29u
dHJvbGxlckBlNjViMDAwMAAAAAADAAAAKgAAAAByZW5lc2FzLHI4YTc3OTUtdXNiLWRtYWMAcmVu
ZXNhcyx1c2ItZG1hYwAAAAAAAAMAAAAQAAABEgAAAADmWwAAAAAAAAAAAQAAAAADAAAAGAAAApMA
AAAAAAAAbgAAAAQAAAAAAAAAbgAAAAQAAAADAAAACAAAAp5jaDAAY2gxAAAAAAMAAAAMAAABnQAA
AAwAAAABAAABSwAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAAUsAAAADAAAA
BAAABvAAAAABAAAAAwAAAAQAAAb7AAAAAgAAAAMAAAAIAAAHCAAAAE0AAAAKAAAAAwAAAAAAAAQI
AAAAAwAAAAQAAAC+AAAASAAAAAIAAAABZG1hLWNvbnRyb2xsZXJAZTY0NjAwMDAAAAAAAwAAACoA
AAAAcmVuZXNhcyxyOGE3Nzk1LXVzYi1kbWFjAHJlbmVzYXMsdXNiLWRtYWMAAAAAAAADAAAAEAAA
ARIAAAAA5kYAAAAAAAAAAAEAAAAAAwAAABgAAAKTAAAAAAAAACIAAAAEAAAAAAAAACIAAAAEAAAA
AwAAAAgAAAKeY2gwAGNoMQAAAAADAAAADAAAAZ0AAAAMAAAAAQAAAUYAAAADAAAACAAAASIAAAAJ
AAAAIAAAAAMAAAAIAAACvgAAAAwAAAFGAAAAAwAAAAQAAAbwAAAAAQAAAAMAAAAEAAAG+wAAAAIA
AAADAAAACAAABwgAAABNAAAADgAAAAMAAAAAAAAECAAAAAMAAAAEAAAAvgAAAEoAAAACAAAAAWRt
YS1jb250cm9sbGVyQGU2NDcwMDAwAAAAAAMAAAAqAAAAAHJlbmVzYXMscjhhNzc5NS11c2ItZG1h
YwByZW5lc2FzLHVzYi1kbWFjAAAAAAAAAwAAABAAAAESAAAAAOZHAAAAAAAAAAABAAAAAAMAAAAY
AAACkwAAAAAAAAAjAAAABAAAAAAAAAAjAAAABAAAAAMAAAAIAAACnmNoMABjaDEAAAAAAwAAAAwA
AAGdAAAADAAAAAEAAAFJAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAABSQAA
AAMAAAAEAAAG8AAAAAEAAAADAAAABAAABvsAAAACAAAAAwAAAAgAAAcIAAAATQAAAA8AAAADAAAA
AAAABAgAAAADAAAABAAAAL4AAABLAAAAAgAAAAF1c2ItcGh5QGU2NWVlMDAwAAAAAAAAAAMAAAA0
AAAAAHJlbmVzYXMscjhhNzc5NS11c2IzLXBoeQByZW5lc2FzLHJjYXItZ2VuMy11c2IzLXBoeQAA
AAADAAAAEAAAARIAAAAA5l7gAAAAAAAAAACQAAAAAwAAABQAAAGdAAAADAAAAAEAAAFIAAAATgAA
AE8AAAADAAAAHAAAA411c2IzLWlmAHVzYjNzX2NsawB1c2JfZXh0YWwAAAAAAwAAAAgAAAEiAAAA
CQAAACAAAAADAAAACAAAAr4AAAAMAAABSAAAAAMAAAAEAAAHDwAAAAAAAAADAAAACQAAAmZkaXNh
YmxlZAAAAAAAAAACAAAAAWNyeXB0b0BlNjYwMTAwMAAAAAADAAAAGAAAAABhcm0sY3J5cHRvY2Vs
bC02MzBwLXJlZQAAAAADAAAADAAAApMAAAAAAAAARwAAAAQAAAADAAAAEAAAARIAAAAA5mAQAAAA
AAAAABAAAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAAAAAABAgAAAACAAAAAWRtYS1jb250cm9s
bGVyQGU2NzAwMDAwAAAAAAMAAAAnAAAAAHJlbmVzYXMsZG1hYy1yOGE3Nzk1AHJlbmVzYXMscmNh
ci1kbWFjAAAAAAADAAAAEAAAARIAAAAA5nAAAAAAAAAAAQAAAAAAAwAAAMwAAAKTAAAAAAAAAMcA
AAAEAAAAAAAAAMgAAAAEAAAAAAAAAMkAAAAEAAAAAAAAAMoAAAAEAAAAAAAAAMsAAAAEAAAAAAAA
AMwAAAAEAAAAAAAAAM0AAAAEAAAAAAAAAM4AAAAEAAAAAAAAAM8AAAAEAAAAAAAAANAAAAAEAAAA
AAAAANEAAAAEAAAAAAAAANIAAAAEAAAAAAAAANMAAAAEAAAAAAAAANQAAAAEAAAAAAAAANUAAAAE
AAAAAAAAANYAAAAEAAAAAAAAANcAAAAEAAAAAwAAAEwAAAKeZXJyb3IAY2gwAGNoMQBjaDIAY2gz
AGNoNABjaDUAY2g2AGNoNwBjaDgAY2g5AGNoMTAAY2gxMQBjaDEyAGNoMTMAY2gxNABjaDE1AAAA
AAMAAAAMAAABnQAAAAwAAAABAAAA2wAAAAMAAAAEAAADjWZjawAAAAADAAAACAAAASIAAAAJAAAA
IAAAAAMAAAAIAAACvgAAAAwAAADbAAAAAwAAAAQAAAbwAAAAAQAAAAMAAAAEAAAG+wAAABAAAAAD
AAAAgAAABwgAAABQAAAAAAAAAFAAAAABAAAAUAAAAAIAAABQAAAAAwAAAFAAAAAEAAAAUAAAAAUA
AABQAAAABgAAAFAAAAAHAAAAUAAAAAgAAABQAAAACQAAAFAAAAAKAAAAUAAAAAsAAABQAAAADAAA
AFAAAAANAAAAUAAAAA4AAABQAAAADwAAAAMAAAAAAAAECAAAAAMAAAAEAAAAvgAAAC0AAAACAAAA
AWRtYS1jb250cm9sbGVyQGU3MzAwMDAwAAAAAAMAAAAnAAAAAHJlbmVzYXMsZG1hYy1yOGE3Nzk1
AHJlbmVzYXMscmNhci1kbWFjAAAAAAADAAAAEAAAARIAAAAA5zAAAAAAAAAAAQAAAAAAAwAAAMwA
AAKTAAAAAAAAANwAAAAEAAAAAAAAANgAAAAEAAAAAAAAANkAAAAEAAAAAAAAANoAAAAEAAAAAAAA
ANsAAAAEAAAAAAAAATQAAAAEAAAAAAAAATUAAAAEAAAAAAAAATYAAAAEAAAAAAAAATcAAAAEAAAA
AAAAATgAAAAEAAAAAAAAATkAAAAEAAAAAAAAAToAAAAEAAAAAAAAATsAAAAEAAAAAAAAATwAAAAE
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
AAAAVwAAAAMAAAAIAAADTmRlZmF1bHQAAAAAAwAAAAAAAAQIAAAAAgAAAAFjYW5AZTZjMzgwMDAA
AAAAAAAAAwAAACoAAAAAcmVuZXNhcyxjYW4tcjhhNzc5NQByZW5lc2FzLHJjYXItZ2VuMy1jYW4A
AAAAAAADAAAAEAAAARIAAAAA5sOAAAAAAAAAABAAAAAAAwAAAAwAAAKTAAAAAAAAALsAAAAEAAAA
AwAAABwAAAGdAAAADAAAAAEAAAOTAAAADAAAAAAAAAAnAAAAVgAAAAMAAAAUAAADjWNsa3AxAGNs
a3AyAGNhbl9jbGsAAAAAAwAAAAwAAAUXAAAADAAAAAAAAAAnAAAAAwAAAAQAAAUnAmJaAAAAAAMA
AAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAA5MAAAADAAAABQAAAmZva2F5AAAAAAAA
AAMAAAAEAAADRAAAAFgAAAADAAAACAAAA05kZWZhdWx0AAAAAAMAAAAAAAAECAAAAAIAAAABY2Fu
QGU2NmMwMDAwAAAAAAAAAAMAAAAuAAAAAHJlbmVzYXMscjhhNzc5NS1jYW5mZAByZW5lc2FzLHJj
YXItZ2VuMy1jYW5mZAAAAAAAAAMAAAAQAAABEgAAAADmbAAAAAAAAAAAgAAAAAADAAAAGAAAApMA
AAAAAAAAHQAAAAQAAAAAAAAAHgAAAAQAAAADAAAAHAAAAZ0AAAAMAAAAAQAAA5IAAAAMAAAAAAAA
ACcAAABWAAAAAwAAABIAAAONZmNrAGNhbmZkAGNhbl9jbGsAAAAAAAADAAAADAAABRcAAAAMAAAA
AAAAACcAAAADAAAABAAABScCYloAAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAM
AAADkgAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAMAAAAIAAADRAAAAFkAAABaAAAAAwAAAAgA
AANOZGVmYXVsdAAAAAABY2hhbm5lbDAAAAAAAAAAAwAAAAUAAAJmb2theQAAAAAAAAACAAAAAWNo
YW5uZWwxAAAAAAAAAAMAAAAFAAACZm9rYXkAAAAAAAAAAgAAAAIAAAABcHdtQGU2ZTMwMDAwAAAA
AAAAAAMAAAAlAAAAAHJlbmVzYXMscHdtLXI4YTc3OTUAcmVuZXNhcyxwd20tcmNhcgAAAAAAAAAD
AAAAEAAAARIAAAAA5uMAAAAAAAAAAAAIAAAAAwAAAAwAAAGdAAAADAAAAAEAAAILAAAAAwAAAAgA
AAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAACCwAAAAMAAAAEAAAHWgAAAAIAAAADAAAACQAA
AmZkaXNhYmxlZAAAAAAAAAACAAAAAXB3bUBlNmUzMTAwMAAAAAAAAAADAAAAJQAAAAByZW5lc2Fz
LHB3bS1yOGE3Nzk1AHJlbmVzYXMscHdtLXJjYXIAAAAAAAAAAwAAABAAAAESAAAAAObjEAAAAAAA
AAAACAAAAAMAAAAMAAABnQAAAAwAAAABAAACCwAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgA
AAK+AAAADAAAAgsAAAADAAAABAAAB1oAAAACAAAAAwAAAAkAAAJmZGlzYWJsZWQAAAAAAAAAAgAA
AAFwd21AZTZlMzIwMDAAAAAAAAAAAwAAACUAAAAAcmVuZXNhcyxwd20tcjhhNzc5NQByZW5lc2Fz
LHB3bS1yY2FyAAAAAAAAAAMAAAAQAAABEgAAAADm4yAAAAAAAAAAAAgAAAADAAAADAAAAZ0AAAAM
AAAAAQAAAgsAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAILAAAAAwAAAAQA
AAdaAAAAAgAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIAAAABcHdtQGU2ZTMzMDAwAAAAAAAA
AAMAAAAlAAAAAHJlbmVzYXMscHdtLXI4YTc3OTUAcmVuZXNhcyxwd20tcmNhcgAAAAAAAAADAAAA
EAAAARIAAAAA5uMwAAAAAAAAAAAIAAAAAwAAAAwAAAGdAAAADAAAAAEAAAILAAAAAwAAAAgAAAEi
AAAACQAAACAAAAADAAAACAAAAr4AAAAMAAACCwAAAAMAAAAEAAAHWgAAAAIAAAADAAAACQAAAmZk
aXNhYmxlZAAAAAAAAAACAAAAAXB3bUBlNmUzNDAwMAAAAAAAAAADAAAAJQAAAAByZW5lc2FzLHB3
bS1yOGE3Nzk1AHJlbmVzYXMscHdtLXJjYXIAAAAAAAAAAwAAABAAAAESAAAAAObjQAAAAAAAAAAA
CAAAAAMAAAAMAAABnQAAAAwAAAABAAACCwAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+
AAAADAAAAgsAAAADAAAABAAAB1oAAAACAAAAAwAAAAkAAAJmZGlzYWJsZWQAAAAAAAAAAgAAAAFw
d21AZTZlMzUwMDAAAAAAAAAAAwAAACUAAAAAcmVuZXNhcyxwd20tcjhhNzc5NQByZW5lc2FzLHB3
bS1yY2FyAAAAAAAAAAMAAAAQAAABEgAAAADm41AAAAAAAAAAAAgAAAADAAAADAAAAZ0AAAAMAAAA
AQAAAgsAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAILAAAAAwAAAAQAAAda
AAAAAgAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIAAAABcHdtQGU2ZTM2MDAwAAAAAAAAAAMA
AAAlAAAAAHJlbmVzYXMscHdtLXI4YTc3OTUAcmVuZXNhcyxwd20tcmNhcgAAAAAAAAADAAAAEAAA
ARIAAAAA5uNgAAAAAAAAAAAIAAAAAwAAAAwAAAGdAAAADAAAAAEAAAILAAAAAwAAAAgAAAEiAAAA
CQAAACAAAAADAAAACAAAAr4AAAAMAAACCwAAAAMAAAAEAAAHWgAAAAIAAAADAAAACQAAAmZkaXNh
YmxlZAAAAAAAAAACAAAAAXNlcmlhbEBlNmU2MDAwMAAAAAADAAAAOQAAAAByZW5lc2FzLHNjaWYt
cjhhNzc5NQByZW5lc2FzLHJjYXItZ2VuMy1zY2lmAHJlbmVzYXMsc2NpZgAAAAAAAAADAAAAEAAA
ARIAAAAA5uYAAAAAAAAAAABAAAAAAwAAAAwAAAKTAAAAAAAAAJgAAAAEAAAAAwAAABwAAAGdAAAA
DAAAAAEAAADPAAAADAAAAAAAAAAQAAAARAAAAAMAAAAVAAADjWZjawBicmdfaW50AHNjaWZfY2xr
AAAAAAAAAAMAAAAgAAAD3wAAAB8AAABRAAAAHwAAAFAAAAAgAAAAUQAAACAAAABQAAAAAwAAAAwA
AAPkdHgAcngAdHgAcngAAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAAAzwAA
AAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIAAAABc2VyaWFsQGU2ZTY4MDAwAAAAAAMAAAA5AAAA
AHJlbmVzYXMsc2NpZi1yOGE3Nzk1AHJlbmVzYXMscmNhci1nZW4zLXNjaWYAcmVuZXNhcyxzY2lm
AAAAAAAAAAMAAAAQAAABEgAAAADm5oAAAAAAAAAAAEAAAAADAAAADAAAApMAAAAAAAAAmQAAAAQA
AAADAAAAHAAAAZ0AAAAMAAAAAQAAAM4AAAAMAAAAAAAAABAAAABEAAAAAwAAABUAAAONZmNrAGJy
Z19pbnQAc2NpZl9jbGsAAAAAAAAAAwAAACAAAAPfAAAAHwAAAFMAAAAfAAAAUgAAACAAAABTAAAA
IAAAAFIAAAADAAAADAAAA+R0eAByeAB0eAByeAAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAI
AAACvgAAAAwAAADOAAAAAwAAAAUAAAJmb2theQAAAAAAAAADAAAABAAAA0QAAABbAAAAAwAAAAgA
AANOZGVmYXVsdAAAAAADAAAAAAAABAgAAAACAAAAAXNlcmlhbEBlNmU4ODAwMAAAAAADAAAAOQAA
AAByZW5lc2FzLHNjaWYtcjhhNzc5NQByZW5lc2FzLHJjYXItZ2VuMy1zY2lmAHJlbmVzYXMsc2Np
ZgAAAAAAAAADAAAAEAAAARIAAAAA5uiAAAAAAAAAAABAAAAAAwAAAAwAAAKTAAAAAAAAAKQAAAAE
AAAAAwAAABwAAAGdAAAADAAAAAEAAAE2AAAADAAAAAAAAAAQAAAARAAAAAMAAAAVAAADjWZjawBi
cmdfaW50AHNjaWZfY2xrAAAAAAAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAA
ATYAAAADAAAABQAAAmZva2F5AAAAAAAAAAMAAAAEAAADRAAAAFwAAAADAAAACAAAA05kZWZhdWx0
AAAAAAIAAAABc2VyaWFsQGU2YzUwMDAwAAAAAAMAAAA5AAAAAHJlbmVzYXMsc2NpZi1yOGE3Nzk1
AHJlbmVzYXMscmNhci1nZW4zLXNjaWYAcmVuZXNhcyxzY2lmAAAAAAAAAAMAAAAQAAABEgAAAADm
xQAAAAAAAAAAAEAAAAADAAAADAAAApMAAAAAAAAAFwAAAAQAAAADAAAAHAAAAZ0AAAAMAAAAAQAA
AMwAAAAMAAAAAAAAABAAAABEAAAAAwAAABUAAAONZmNrAGJyZ19pbnQAc2NpZl9jbGsAAAAAAAAA
AwAAABAAAAPfAAAALQAAAFcAAAAtAAAAVgAAAAMAAAAGAAAD5HR4AHJ4AAAAAAAAAwAAAAgAAAEi
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
cmVuZXNhcyxyOGE3Nzk1LWRyaWYAcmVuZXNhcyxyY2FyLWdlbjMtZHJpZgAAAAADAAAAEAAAARIA
AAAA5vYAAAAAAAAAAABkAAAAAwAAAAwAAAKTAAAAAAAAAA4AAAAEAAAAAwAAAAwAAAGdAAAADAAA
AAEAAAIBAAAAAwAAAAQAAAONZmNrAAAAAAMAAAAQAAAD3wAAAB8AAAAkAAAAIAAAACQAAAADAAAA
BgAAA+RyeAByeAAAAAAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAAgEAAAAD
AAAABAAAB7EAAAB1AAAAAwAAAAkAAAJmZGlzYWJsZWQAAAAAAAAAAwAAAAQAAAC+AAAAdgAAAAIA
AAABcmlmQGU2ZjcwMDAwAAAAAAAAAAMAAAAsAAAAAHJlbmVzYXMscjhhNzc5NS1kcmlmAHJlbmVz
YXMscmNhci1nZW4zLWRyaWYAAAAAAwAAABAAAAESAAAAAOb3AAAAAAAAAAAAZAAAAAMAAAAMAAAC
kwAAAAAAAAAPAAAABAAAAAMAAAAMAAABnQAAAAwAAAABAAACAAAAAAMAAAAEAAADjWZjawAAAAAD
AAAAEAAAA98AAAAfAAAAJgAAACAAAAAmAAAAAwAAAAYAAAPkcngAcngAAAAAAAADAAAACAAAASIA
AAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAIAAAAAAwAAAAQAAAexAAAAdgAAAAMAAAAJAAACZmRp
c2FibGVkAAAAAAAAAAMAAAAEAAAAvgAAAHUAAAACAAAAAXJpZkBlNmY4MDAwMAAAAAAAAAADAAAA
LAAAAAByZW5lc2FzLHI4YTc3OTUtZHJpZgByZW5lc2FzLHJjYXItZ2VuMy1kcmlmAAAAAAMAAAAQ
AAABEgAAAADm+AAAAAAAAAAAAGQAAAADAAAADAAAApMAAAAAAAAAGAAAAAQAAAADAAAADAAAAZ0A
AAAMAAAAAQAAAf8AAAADAAAABAAAA41mY2sAAAAAAwAAABAAAAPfAAAAHwAAACgAAAAgAAAAKAAA
AAMAAAAGAAAD5HJ4AHJ4AAAAAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAAB
/wAAAAMAAAAEAAAHsQAAAHcAAAADAAAACQAAAmZkaXNhYmxlZAAAAAAAAAADAAAABAAAAL4AAAB4
AAAAAgAAAAFyaWZAZTZmOTAwMDAAAAAAAAAAAwAAACwAAAAAcmVuZXNhcyxyOGE3Nzk1LWRyaWYA
cmVuZXNhcyxyY2FyLWdlbjMtZHJpZgAAAAADAAAAEAAAARIAAAAA5vkAAAAAAAAAAABkAAAAAwAA
AAwAAAKTAAAAAAAAABkAAAAEAAAAAwAAAAwAAAGdAAAADAAAAAEAAAH+AAAAAwAAAAQAAAONZmNr
AAAAAAMAAAAQAAAD3wAAAB8AAAAqAAAAIAAAACoAAAADAAAABgAAA+RyeAByeAAAAAAAAAMAAAAI
AAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAAf4AAAADAAAABAAAB7EAAAB4AAAAAwAAAAkA
AAJmZGlzYWJsZWQAAAAAAAAAAwAAAAQAAAC+AAAAdwAAAAIAAAABcmlmQGU2ZmEwMDAwAAAAAAAA
AAMAAAAsAAAAAHJlbmVzYXMscjhhNzc5NS1kcmlmAHJlbmVzYXMscmNhci1nZW4zLWRyaWYAAAAA
AwAAABAAAAESAAAAAOb6AAAAAAAAAAAAZAAAAAMAAAAMAAACkwAAAAAAAAAaAAAABAAAAAMAAAAM
AAABnQAAAAwAAAABAAAB/QAAAAMAAAAEAAADjWZjawAAAAADAAAAEAAAA98AAAAfAAAALAAAACAA
AAAsAAAAAwAAAAYAAAPkcngAcngAAAAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAA
AAwAAAH9AAAAAwAAAAQAAAexAAAAeQAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAMAAAAEAAAA
vgAAAHoAAAACAAAAAXJpZkBlNmZiMDAwMAAAAAAAAAADAAAALAAAAAByZW5lc2FzLHI4YTc3OTUt
ZHJpZgByZW5lc2FzLHJjYXItZ2VuMy1kcmlmAAAAAAMAAAAQAAABEgAAAADm+wAAAAAAAAAAAGQA
AAADAAAADAAAApMAAAAAAAAAGwAAAAQAAAADAAAADAAAAZ0AAAAMAAAAAQAAAfwAAAADAAAABAAA
A41mY2sAAAAAAwAAABAAAAPfAAAAHwAAAC4AAAAgAAAALgAAAAMAAAAGAAAD5HJ4AHJ4AAAAAAAA
AwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAMAAAB/AAAAAMAAAAEAAAHsQAAAHoAAAAD
AAAACQAAAmZkaXNhYmxlZAAAAAAAAAADAAAABAAAAL4AAAB5AAAAAgAAAAFzb3VuZEBlYzUwMDAw
MAAAAAAAAwAAABcAAAAAeGVuLXRyb29wcyxwYXNzdGhyb3VnaAAAAAAAAwAAAIAAAAESAAAAAOxQ
AAAAAAAAAAAQAAAAAADsWgAAAAAAAAAAAQAAAAAA7FQAAAAAAAAAABAAAAAAAOxUEAAAAAAAAAAC
gAAAAADsdgAAAAAAAAAAAgAAAAAA7AAAAAAAAAAAABAAAAAAAOwAgAAAAAAAAAAQAAAAAADsEAAA
AAAAAAAQAAAAAAADAAAAGQAABb9zY3UAYWRnAHNzaXUAc3NpAGF1ZG1hcHAAAAAAAAAAAwAAAVAA
AAGdAAAADAAAAAEAAAPtAAAADAAAAAEAAAPuAAAADAAAAAEAAAPvAAAADAAAAAEAAAPwAAAADAAA
AAEAAAPxAAAADAAAAAEAAAPyAAAADAAAAAEAAAPzAAAADAAAAAEAAAP0AAAADAAAAAEAAAP1AAAA
DAAAAAEAAAP2AAAADAAAAAEAAAP3AAAADAAAAAEAAAP+AAAADAAAAAEAAAP/AAAADAAAAAEAAAQA
AAAADAAAAAEAAAQBAAAADAAAAAEAAAQCAAAADAAAAAEAAAQDAAAADAAAAAEAAAQEAAAADAAAAAEA
AAQFAAAADAAAAAEAAAQGAAAADAAAAAEAAAQHAAAADAAAAAEAAAP8AAAADAAAAAEAAAP9AAAADAAA
AAEAAAP8AAAADAAAAAEAAAP9AAAADAAAAAEAAAP7AAAADAAAAAEAAAP6AAAADAAAAAAAAAAJAAAA
AwAAALwAAAONc3NpLWFsbABzc2kuOQBzc2kuOABzc2kuNwBzc2kuNgBzc2kuNQBzc2kuNABzc2ku
MwBzc2kuMgBzc2kuMQBzc2kuMABzcmMuOQBzcmMuOABzcmMuNwBzcmMuNgBzcmMuNQBzcmMuNABz
cmMuMwBzcmMuMgBzcmMuMQBzcmMuMABtaXguMQBtaXguMABjdHUuMQBjdHUuMABkdmMuMABkdmMu
MQBjbGtfYQBjbGtfYgBjbGtfYwBjbGtfaQAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAABYAAAC
vgAAAAwAAAPtAAAADAAAA+4AAAAMAAAD7wAAAAwAAAPwAAAADAAAA/EAAAAMAAAD8gAAAAwAAAPz
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
AAAAvwAAA41hZHNwAHNzaS1hbGwAc3NpLjkAc3NpLjgAc3NpLjcAc3NpLjYAc3NpLjUAc3NpLjQA
c3NpLjMAc3NpLjIAc3NpLjEAc3NpLjAAc3JjLjkAc3JjLjgAc3JjLjcAc3JjLjYAc3JjLjUAc3Jj
LjQAc3JjLjMAc3JjLjIAc3JjLjEAc3JjLjAAbWl4LjEAbWl4LjAAY3R1LjEAY3R1LjAAZHZjLjAA
ZHZjLjEAYXVkbWFjLjEAYXVkbWFjLjAAYWRnAAAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAB4
AAACvgAAAAwAAAH6AAAADAAAA+0AAAAMAAAD7gAAAAwAAAPvAAAADAAAA/AAAAAMAAAD8QAAAAwA
AAPyAAAADAAAA/MAAAAMAAAD9AAAAAwAAAP1AAAADAAAA/YAAAAMAAAD9wAAAAwAAAH1AAAADAAA
AfYAAAAMAAADmgAAAAMAAABfAAAHwWFkc3AAc3NpLWFsbABzc2kuOQBzc2kuOABzc2kuNwBzc2ku
NgBzc2kuNQBzc2kuNABzc2kuMwBzc2kuMgBzc2kuMQBzc2kuMABhdWRtYWMuMQBhdWRtYWMuMABh
ZGcAAAAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIAAAABdXNiQGVlMDAwMDAwAAAAAAAAAAMA
AAAsAAAAAHJlbmVzYXMseGhjaS1yOGE3Nzk1AHJlbmVzYXMscmNhci1nZW4zLXhoY2kAAAAAAwAA
ABAAAAESAAAAAO4AAAAAAAAAAAAMAAAAAAMAAAAMAAACkwAAAAAAAABmAAAABAAAAAMAAAAMAAAB
nQAAAAwAAAABAAABSAAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAAUgAAAAD
AAAABQAAAmZva2F5AAAAAAAAAAMAAAAIAAAHCAAAAE0AAAAMAAAAAwAAAAAAAAQIAAAAAgAAAAF1
c2JAZWUwMjAwMDAAAAAAAAAAAwAAADYAAAAAcmVuZXNhcyxyOGE3Nzk1LXVzYjMtcGVyaQByZW5l
c2FzLHJjYXItZ2VuMy11c2IzLXBlcmkAAAAAAAADAAAAEAAAARIAAAAA7gIAAAAAAAAAAAQAAAAA
AwAAAAwAAAKTAAAAAAAAAGgAAAAEAAAAAwAAAAwAAAGdAAAADAAAAAEAAAFIAAAAAwAAAAgAAAEi
AAAACQAAACAAAAADAAAACAAAAr4AAAAMAAABSAAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAIA
AAABdXNiQGVlMDgwMDAwAAAAAAAAAAMAAAANAAAAAGdlbmVyaWMtb2hjaQAAAAAAAAADAAAAEAAA
ARIAAAAA7ggAAAAAAAAAAAEAAAAAAwAAAAwAAAKTAAAAAAAAAGwAAAAEAAAAAwAAABgAAAGdAAAA
DAAAAAEAAAK/AAAADAAAAAEAAALAAAAAAwAAAAgAAAbZAAAASQAAAAEAAAADAAAABAAABt51c2IA
AAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAAEAAAAr4AAAAMAAACvwAAAAwAAALAAAAAAwAAAAUA
AAJmb2theQAAAAAAAAADAAAABAAABuhvdGcAAAAAAwAAAAgAAAcIAAAATQAAAAQAAAADAAAAAAAA
BAgAAAADAAAABAAAAL4AAACUAAAAAgAAAAF1c2JAZWUwYTAwMDAAAAAAAAAAAwAAAA0AAAAAZ2Vu
ZXJpYy1vaGNpAAAAAAAAAAMAAAAQAAABEgAAAADuCgAAAAAAAAAAAQAAAAADAAAADAAAApMAAAAA
AAAAcAAAAAQAAAADAAAADAAAAZ0AAAAMAAAAAQAAAr4AAAADAAAACAAABtkAAACSAAAAAQAAAAMA
AAAEAAAG3nVzYgAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAK+AAAAAwAA
AAUAAAJmb2theQAAAAAAAAADAAAACAAABwgAAABNAAAABQAAAAMAAAAAAAAECAAAAAMAAAAEAAAA
vgAAAJUAAAACAAAAAXVzYkBlZTBjMDAwMAAAAAAAAAADAAAADQAAAABnZW5lcmljLW9oY2kAAAAA
AAAAAwAAABAAAAESAAAAAO4MAAAAAAAAAAABAAAAAAMAAAAMAAACkwAAAAAAAABxAAAABAAAAAMA
AAAMAAABnQAAAAwAAAABAAACvQAAAAMAAAAIAAAG2QAAAJMAAAABAAAAAwAAAAQAAAbedXNiAAAA
AAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAAr0AAAADAAAACQAAAmZkaXNhYmxl
ZAAAAAAAAAADAAAABAAAAL4AAACWAAAAAgAAAAF1c2JAZWUwZTAwMDAAAAAAAAAAAwAAAA0AAAAA
Z2VuZXJpYy1vaGNpAAAAAAAAAAMAAAAQAAABEgAAAADuDgAAAAAAAAAAAQAAAAADAAAADAAAApMA
AAAAAAAAJAAAAAQAAAADAAAAGAAAAZ0AAAAMAAAAAQAAArwAAAAMAAAAAQAAAsEAAAADAAAACAAA
BtkAAABMAAAAAQAAAAMAAAAEAAAG3nVzYgAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAQAAAC
vgAAAAwAAAK8AAAADAAAAsEAAAADAAAACQAAAmZkaXNhYmxlZAAAAAAAAAADAAAABAAAAL4AAACX
AAAAAgAAAAF1c2JAZWUwODAxMDAAAAAAAAAAAwAAAA0AAAAAZ2VuZXJpYy1laGNpAAAAAAAAAAMA
AAAQAAABEgAAAADuCAEAAAAAAAAAAQAAAAADAAAADAAAApMAAAAAAAAAbAAAAAQAAAADAAAAGAAA
AZ0AAAAMAAAAAQAAAr8AAAAMAAAAAQAAAsAAAAADAAAACAAABtkAAABJAAAAAgAAAAMAAAAEAAAG
3nVzYgAAAAADAAAABAAACE4AAACUAAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAAEAAAAr4AAAAM
AAACvwAAAAwAAALAAAAAAwAAAAUAAAJmb2theQAAAAAAAAADAAAABAAABuhvdGcAAAAAAwAAAAgA
AAcIAAAATQAAAAQAAAADAAAAAAAABAgAAAACAAAAAXVzYkBlZTBhMDEwMAAAAAAAAAADAAAADQAA
AABnZW5lcmljLWVoY2kAAAAAAAAAAwAAABAAAAESAAAAAO4KAQAAAAAAAAABAAAAAAMAAAAMAAAC
kwAAAAAAAABwAAAABAAAAAMAAAAMAAABnQAAAAwAAAABAAACvgAAAAMAAAAIAAAG2QAAAJIAAAAC
AAAAAwAAAAQAAAbedXNiAAAAAAMAAAAEAAAITgAAAJUAAAADAAAACAAAASIAAAAJAAAAIAAAAAMA
AAAIAAACvgAAAAwAAAK+AAAAAwAAAAUAAAJmb2theQAAAAAAAAADAAAACAAABwgAAABNAAAABQAA
AAMAAAAAAAAECAAAAAIAAAABdXNiQGVlMGMwMTAwAAAAAAAAAAMAAAANAAAAAGdlbmVyaWMtZWhj
aQAAAAAAAAADAAAAEAAAARIAAAAA7gwBAAAAAAAAAAEAAAAAAwAAAAwAAAKTAAAAAAAAAHEAAAAE
AAAAAwAAAAwAAAGdAAAADAAAAAEAAAK9AAAAAwAAAAgAAAbZAAAAkwAAAAIAAAADAAAABAAABt51
c2IAAAAAAwAAAAQAAAhOAAAAlgAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAA
Ar0AAAADAAAACQAAAmZkaXNhYmxlZAAAAAAAAAACAAAAAXVzYkBlZTBlMDEwMAAAAAAAAAADAAAA
DQAAAABnZW5lcmljLWVoY2kAAAAAAAAAAwAAABAAAAESAAAAAO4OAQAAAAAAAAABAAAAAAMAAAAM
AAACkwAAAAAAAAAkAAAABAAAAAMAAAAYAAABnQAAAAwAAAABAAACvAAAAAwAAAABAAACwQAAAAMA
AAAIAAAG2QAAAEwAAAACAAAAAwAAAAQAAAbedXNiAAAAAAMAAAAEAAAITgAAAJcAAAADAAAACAAA
ASIAAAAJAAAAIAAAAAMAAAAQAAACvgAAAAwAAAK8AAAADAAAAsEAAAADAAAACQAAAmZkaXNhYmxl
ZAAAAAAAAAACAAAAAXVzYi1waHlAZWUwODAyMDAAAAAAAAAAAwAAADQAAAAAcmVuZXNhcyx1c2Iy
LXBoeS1yOGE3Nzk1AHJlbmVzYXMscmNhci1nZW4zLXVzYjItcGh5AAAAAAMAAAAQAAABEgAAAADu
CAIAAAAAAAAABwAAAAADAAAADAAAApMAAAAAAAAAbAAAAAQAAAADAAAAGAAAAZ0AAAAMAAAAAQAA
Ar8AAAAMAAAAAQAAAsAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAQAAACvgAAAAwAAAK/AAAA
DAAAAsAAAAADAAAABAAABw8AAAABAAAAAwAAAAUAAAJmb2theQAAAAAAAAADAAAABAAAA0QAAACY
AAAAAwAAAAgAAANOZGVmYXVsdAAAAAADAAAAAAAABAgAAAADAAAABAAAAL4AAABJAAAAAgAAAAF1
c2ItcGh5QGVlMGEwMjAwAAAAAAAAAAMAAAA0AAAAAHJlbmVzYXMsdXNiMi1waHktcjhhNzc5NQBy
ZW5lc2FzLHJjYXItZ2VuMy11c2IyLXBoeQAAAAADAAAAEAAAARIAAAAA7goCAAAAAAAAAAcAAAAA
AwAAAAwAAAGdAAAADAAAAAEAAAK+AAAAAwAAAAgAAAEiAAAACQAAACAAAAADAAAACAAAAr4AAAAM
AAACvgAAAAMAAAAEAAAHDwAAAAEAAAADAAAABQAAAmZva2F5AAAAAAAAAAMAAAAEAAADRAAAAJkA
AAADAAAACAAAA05kZWZhdWx0AAAAAAMAAAAAAAAECAAAAAMAAAAEAAAAvgAAAJIAAAACAAAAAXVz
Yi1waHlAZWUwYzAyMDAAAAAAAAAAAwAAADQAAAAAcmVuZXNhcyx1c2IyLXBoeS1yOGE3Nzk1AHJl
bmVzYXMscmNhci1nZW4zLXVzYjItcGh5AAAAAAMAAAAQAAABEgAAAADuDAIAAAAAAAAABwAAAAAD
AAAADAAAAZ0AAAAMAAAAAQAAAr0AAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwA
AAK9AAAAAwAAAAQAAAcPAAAAAQAAAAMAAAAJAAACZmRpc2FibGVkAAAAAAAAAAMAAAAEAAAAvgAA
AJMAAAACAAAAAXVzYi1waHlAZWUwZTAyMDAAAAAAAAAAAwAAADQAAAAAcmVuZXNhcyx1c2IyLXBo
eS1yOGE3Nzk1AHJlbmVzYXMscmNhci1nZW4zLXVzYjItcGh5AAAAAAMAAAAQAAABEgAAAADuDgIA
AAAAAAAABwAAAAADAAAADAAAApMAAAAAAAAAJAAAAAQAAAADAAAAGAAAAZ0AAAAMAAAAAQAAArwA
AAAMAAAAAQAAAsEAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAQAAACvgAAAAwAAAK8AAAADAAA
AsEAAAADAAAABAAABw8AAAABAAAAAwAAAAkAAAJmZGlzYWJsZWQAAAAAAAAAAwAAAAQAAAC+AAAA
TAAAAAIAAAABbW1jQGVlMTAwMDAwAAAAAAAAAAMAAAAsAAAAAHJlbmVzYXMsc2RoaS1yOGE3Nzk1
AHJlbmVzYXMscmNhci1nZW4zLXNkaGkAAAAAAwAAABAAAAESAAAAAO4QAAAAAAAAAAAgAAAAAAMA
AAAMAAACkwAAAAAAAAClAAAABAAAAAMAAAAMAAABnQAAAAwAAAABAAABOgAAAAMAAAAEAAAIWAvr
wgAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAE6AAAAAwAAAAgAAAcIAAAA
UQAAACAAAAADAAAABQAAAmZva2F5AAAAAAAAAAMAAAAEAAADRAAAAJoAAAADAAAABAAACGYAAACb
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
AAACZgAAAAMAAAAIAAADjWZkcABmY3AAAAAAAwAAAAgAAAEiAAAACQAAAAkAAAADAAAAEAAAAr4A
AAAMAAAAdgAAAAwAAAJmAAAAAwAAAAgAAAfBZmRwAGZjcAAAAAADAAAABAAACXkAAAABAAAAAwAA
AAgAAAcIAAAAsAAAAAEAAAADAAAAAAAABAgAAAACAAAAAWZjcEBmZWEyNzAwMAAAAAAAAAADAAAA
DQAAAAByZW5lc2FzLGZjcHYAAAAAAAAAAwAAABAAAAESAAAAAP6icAAAAAAAAAACAAAAAAMAAAAM
AAABnQAAAAwAAAABAAACWwAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+AAAADAAAAlsA
AAADAAAACAAABwgAAABfAAAACAAAAAMAAAAEAAAAvgAAALEAAAACAAAAAWZjcEBmZWEyZjAwMAAA
AAAAAAADAAAADQAAAAByZW5lc2FzLGZjcHYAAAAAAAAAAwAAABAAAAESAAAAAP6i8AAAAAAAAAAC
AAAAAAMAAAAMAAABnQAAAAwAAAABAAACWgAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAgAAAK+
AAAADAAAAloAAAADAAAACAAABwgAAABfAAAACQAAAAMAAAAEAAAAvgAAALIAAAACAAAAAWZjcEBm
ZWEzNzAwMAAAAAAAAAADAAAADQAAAAByZW5lc2FzLGZjcHYAAAAAAAAAAwAAABAAAAESAAAAAP6j
cAAAAAAAAAACAAAAAAMAAAAMAAABnQAAAAwAAAABAAACWQAAAAMAAAAIAAABIgAAAAkAAAAgAAAA
AwAAAAgAAAK+AAAADAAAAlkAAAADAAAACAAABwgAAABoAAAACgAAAAMAAAAEAAAAvgAAALMAAAAC
AAAAAXZzcEBmZTkyMDAwMAAAAAAAAAADAAAAEgAAAAByZW5lc2FzLHZzcG0tdnNwMgAAAAAAAAMA
AAAQAAABEgAAAAD+kgAAAAAAAAAAgAAAAAADAAAAAAAACZUAAAADAAAAAAAACaUAAAADAAAAAAAA
CbUAAAADAAAAAAAACcUAAAADAAAABAAACdUAAAAFAAAAAwAAAAQAAAniAAAAAAAAAAMAAAAEAAAJ
7wAAAAEAAAACAAAAAXZzcG1AZmU5MjAwMDAAAAAAAAADAAAADQAAAAByZW5lc2FzLHZzcG0AAAAA
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
AAAAAAAACrMAAAADAAAAAAAACsMAAAADAAAAAAAACcUAAAADAAAAAAAACoMAAAADAAAAAAAACtMA
AAADAAAABAAACh8AAAACAAAAAwAAAAQAAAo5AAAAAgAAAAMAAAAIAAABIgAAAAkAAAAJAAAAAwAA
ABAAAAK+AAAADAAAAnYAAAAMAAACYgAAAAMAAAAIAAAHwXZzcABmY3AAAAAAAwAAAAUAAAJmb2th
eQAAAAAAAAADAAAACAAABwgAAACwAAAACQAAAAMAAAAAAAAECAAAAAIAAAABY21tQGZlYTQwMDAw
AAAAAAAAAAMAAAAqAAAAAHJlbmVzYXMscjhhNzc5NS1jbW0AcmVuZXNhcyxyY2FyLWdlbjMtY21t
AAAAAAAAAwAAABAAAAESAAAAAP6kAAAAAAAAAAAQAAAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAA
AAwAAAGdAAAADAAAAAEAAALHAAAAAwAAAAgAAAK+AAAADAAAAscAAAADAAAABAAAAL4AAADMAAAA
AgAAAAFjbW1AZmVhNTAwMDAAAAAAAAAAAwAAACoAAAAAcmVuZXNhcyxyOGE3Nzk1LWNtbQByZW5l
c2FzLHJjYXItZ2VuMy1jbW0AAAAAAAADAAAAEAAAARIAAAAA/qUAAAAAAAAAABAAAAAAAwAAAAgA
AAEiAAAACQAAACAAAAADAAAADAAAAZ0AAAAMAAAAAQAAAsYAAAADAAAACAAAAr4AAAAMAAACxgAA
AAMAAAAEAAAAvgAAAM0AAAACAAAAAWNtbUBmZWE2MDAwMAAAAAAAAAADAAAAKgAAAAByZW5lc2Fz
LHI4YTc3OTUtY21tAHJlbmVzYXMscmNhci1nZW4zLWNtbQAAAAAAAAMAAAAQAAABEgAAAAD+pgAA
AAAAAAAAEAAAAAADAAAACAAAASIAAAAJAAAAIAAAAAMAAAAMAAABnQAAAAwAAAABAAACxQAAAAMA
AAAIAAACvgAAAAwAAALFAAAAAwAAAAQAAAC+AAAAzgAAAAIAAAABY21tQGZlYTcwMDAwAAAAAAAA
AAMAAAAqAAAAAHJlbmVzYXMscjhhNzc5NS1jbW0AcmVuZXNhcyxyY2FyLWdlbjMtY21tAAAAAAAA
AwAAABAAAAESAAAAAP6nAAAAAAAAAAAQAAAAAAMAAAAIAAABIgAAAAkAAAAgAAAAAwAAAAwAAAGd
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
AAAAAWRtYS1jb250cm9sbGVyQGZmYzEwMDAwAAAAAAMAAAAnAAAAAHJlbmVzYXMsZG1hYy1yOGE3
Nzk1AHJlbmVzYXMscmNhci1kbWFjAAAAAAADAAAAEAAAARIAAAAA/8EAAAAAAAAAAQAAAAAAAwAA
AGwAAAKTAAAAAAAAAcAAAAAEAAAAAAAAAcEAAAAEAAAAAAAAAcIAAAAEAAAAAAAAAcMAAAAEAAAA
AAAAAcQAAAAEAAAAAAAAAcUAAAAEAAAAAAAAAcYAAAAEAAAAAAAAAccAAAAEAAAAAAAAAcgAAAAE
AAAAAwAAACYAAAKeZXJyb3IAY2gwAGNoMQBjaDIAY2gzAGNoNABjaDUAY2g2AGNoNwAAAAAAAAMA
AAAMAAABnQAAAAwAAAABAAAAFQAAAAMAAAAEAAADjWZjawAAAAADAAAACAAAASIAAAAJAAAAIAAA
AAMAAAAIAAACvgAAAAwAAAAVAAAAAwAAAAQAAAbwAAAAAQAAAAMAAAAEAAAG+wAAAAgAAAADAAAA
AAAABAgAAAACAAAAAWRtYS1jb250cm9sbGVyQGZmYzIwMDAwAAAAAAMAAAAnAAAAAHJlbmVzYXMs
ZG1hYy1yOGE3Nzk1AHJlbmVzYXMscmNhci1kbWFjAAAAAAADAAAAEAAAARIAAAAA/8IAAAAAAAAA
AQAAAAAAAwAAAGwAAAKTAAAAAAAAAdUAAAAEAAAAAAAAAckAAAAEAAAAAAAAAcoAAAAEAAAAAAAA
AcsAAAAEAAAAAAAAAcwAAAAEAAAAAAAAAc0AAAAEAAAAAAAAAc4AAAAEAAAAAAAAAc8AAAAEAAAA
AAAAAdAAAAAEAAAAAwAAACYAAAKeZXJyb3IAY2gwAGNoMQBjaDIAY2gzAGNoNABjaDUAY2g2AGNo
NwAAAAAAAAMAAAAMAAABnQAAAAwAAAABAAAAEAAAAAMAAAAEAAADjWZjawAAAAADAAAACAAAASIA
AAAJAAAAIAAAAAMAAAAIAAACvgAAAAwAAAAQAAAAAwAAAAQAAAbwAAAAAQAAAAMAAAAEAAAG+wAA
AAgAAAADAAAAAAAABAgAAAACAAAAAWNoaXBpZEBmZmYwMDA0NAAAAAADAAAADAAAAAByZW5lc2Fz
LHBycgAAAAADAAAAEAAAARIAAAAA//AARAAAAAAAAAAEAAAAAgAAAAFpbXBkZXMwAAAAAAMAAAAa
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
AAAAAQAAAIMAAAAMAAAAAQAAAmsAAAAMAAAAAQAAAnAAAAAMAAAAAQAAAl4AAAAMAAAAAQAAAnIA
AAAMAAAAAQAAAl8AAAAMAAAAAQAAAncAAAAMAAAAAQAAAmMAAAAMAAAAAQAAAnYAAAAMAAAAAQAA
AmIAAAAMAAAAAQAAAHcAAAAMAAAAAQAAAmcAAAAMAAAAAQAAAHYAAAAMAAAAAQAAAmYAAAAMAAAA
AQAAAywAAAACAAAAAgAAAAljb21wYXRpYmxlACNhZGRyZXNzLWNlbGxzACNzaXplLWNlbGxzAG1v
ZGVsAGkyYzAAaTJjMQBpMmMyAGkyYzMAaTJjNABpMmM1AGkyYzYAaTJjNwBzcGkwAHNwaTEAc3Bp
MgBzcGkzAHNlcmlhbDAAZXRoZXJuZXQwAG1tYzAAbW1jMQBzZXJpYWwxAHNlcmlhbDIAc2VyaWFs
MwBtbWMyACNjbG9jay1jZWxscwBjbG9jay1mcmVxdWVuY3kAcGhhbmRsZQBvcHAtc2hhcmVkAG9w
cC1oegBvcHAtbWljcm92b2x0AGNsb2NrLWxhdGVuY3ktbnMAb3BwLXN1c3BlbmQAdHVyYm8tbW9k
ZQBjcHUAcmVnAGRldmljZV90eXBlAHBvd2VyLWRvbWFpbnMAbmV4dC1sZXZlbC1jYWNoZQBlbmFi
bGUtbWV0aG9kAGNwdS1pZGxlLXN0YXRlcwBkeW5hbWljLXBvd2VyLWNvZWZmaWNpZW50AGNvb2xp
bmctbWluLWxldmVsAGNvb2xpbmctbWF4LWxldmVsAGNsb2NrcwBvcGVyYXRpbmctcG9pbnRzLXYy
AGNhcGFjaXR5LWRtaXBzLW1oegAjY29vbGluZy1jZWxscwBjcHUtc3VwcGx5AGNhY2hlLXVuaWZp
ZWQAY2FjaGUtbGV2ZWwAZW50cnktbWV0aG9kAGFybSxwc2NpLXN1c3BlbmQtcGFyYW0AbG9jYWwt
dGltZXItc3RvcABlbnRyeS1sYXRlbmN5LXVzAGV4aXQtbGF0ZW5jeS11cwBtaW4tcmVzaWRlbmN5
LXVzAHN0YXR1cwBpbnRlcnJ1cHQtcGFyZW50AHJhbmdlcwAjaHdsb2NrLWNlbGxzAGludGVycnVw
dHMAaW50ZXJydXB0LW5hbWVzAHJlbmVzYXMsbWZpcy1jaAByZXNldHMAdGltZW91dC1zZWMAI2dw
aW8tY2VsbHMAZ3Bpby1jb250cm9sbGVyAGdwaW8tcmFuZ2VzACNpbnRlcnJ1cHQtY2VsbHMAaW50
ZXJydXB0LWNvbnRyb2xsZXIAZ3Bpby1ob2cAZ3Bpb3MAb3V0cHV0LWhpZ2gAbGluZS1uYW1lAHBp
bmN0cmwtMABwaW5jdHJsLW5hbWVzAGdyb3VwcwBmdW5jdGlvbgBkcml2ZS1zdHJlbmd0aABwaW5z
AHBvd2VyLXNvdXJjZQBjbG9jay1uYW1lcwB0YXJnZXRfZGV2aWNlcwAjcG93ZXItZG9tYWluLWNl
bGxzACNyZXNldC1jZWxscwAjdGhlcm1hbC1zZW5zb3ItY2VsbHMAZG1hcwBkbWEtbmFtZXMAaTJj
LXNjbC1pbnRlcm5hbC1kZWxheS1ucwB4ZW4scGFzc3Rocm91Z2gAI3NvdW5kLWRhaS1jZWxscwBh
c2FoaS1rYXNlaSxpbjEtc2luZ2xlLWVuZABhc2FoaS1rYXNlaSxpbjItc2luZ2xlLWVuZABhc2Fo
aS1rYXNlaSxvdXQxLXNpbmdsZS1lbmQAYXNhaGkta2FzZWksb3V0Mi1zaW5nbGUtZW5kAGFzYWhp
LWthc2VpLG91dDMtc2luZ2xlLWVuZABhc2FoaS1rYXNlaSxvdXQ0LXNpbmdsZS1lbmQAYXNhaGkt
a2FzZWksb3V0NS1zaW5nbGUtZW5kAGFzYWhpLWthc2VpLG91dDYtc2luZ2xlLWVuZAByZW1vdGUt
ZW5kcG9pbnQAYXNzaWduZWQtY2xvY2tzAGFzc2lnbmVkLWNsb2NrLXJhdGVzAHJlc2V0LWdwaW9z
AGkyYy1tdXgtaWRsZS1kaXNjb25uZWN0AHRkbQBWREQxLXN1cHBseQBWREQyLXN1cHBseQBWQ0NB
RDEtc3VwcGx5AFZDQ0FEMi1zdXBwbHkAVkNDREExLXN1cHBseQBWQ0NEQTItc3VwcGx5AG91dHB1
dC1sb3cAcmVnLW5hbWVzAHJlZ3MAc2h1dGRvd24tZ3Bpb3MAcG9jMC1zdXBwbHkAcG9jMS1zdXBw
bHkAcG9jMi1zdXBwbHkAcG9jMy1zdXBwbHkAY2xvY2stbGFuZXMAZGF0YS1sYW5lcwBpbnB1dABy
b2htLGRkci1iYWNrdXAtcG93ZXIAcm9obSxyc3RibW9kZS1wdWxzZQByZWd1bGF0b3ItbmFtZQBy
ZWd1bGF0b3ItbWluLW1pY3Jvdm9sdAByZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdAByZWd1bGF0b3It
Ym9vdC1vbgByZWd1bGF0b3ItYWx3YXlzLW9uAHVhcnQtaGFzLXJ0c2N0cwByZW5lc2FzLGJ1c3dh
aXQAcGh5cwBwaHktbmFtZXMAZHJfbW9kZQAjZG1hLWNlbGxzAGRtYS1jaGFubmVscwBpb21tdXMA
I3BoeS1jZWxscwAjaW9tbXUtY2VsbHMAcmVuZXNhcyxpcG1tdS1tYWluAHBoeS1tb2RlAHBoeS1o
YW5kbGUAcnhjLXNrZXctcHMAI3B3bS1jZWxscwByZWFkLW9ubHkAcmVuZXNhcyxpZABidXMtd2lk
dGgAdnN5bmMtYWN0aXZlAGhzeW5jLWFjdGl2ZQBkYXRhLWVuYWJsZS1hY3RpdmUAcmVuZXNhcyxi
b25kaW5nAHJlc2V0LW5hbWVzAHNoYXJlZC1waW4AZGFpLWZvcm1hdABiaXRjbG9jay1tYXN0ZXIA
ZnJhbWUtbWFzdGVyAHBsYXliYWNrAGNhcHR1cmUAZGFpLXRkbS1zbG90LW51bQBkYWktdGRtLXNs
b3Qtd2lkdGgAc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0AGNvbXBhbmlvbgBtYXgtZnJlcXVlbmN5
AHBpbmN0cmwtMQB2bW1jLXN1cHBseQB2cW1tYy1zdXBwbHkAY2QtZ3Bpb3MAc2QtdWhzLXNkcjUw
AHNkLXVocy1zZHIxMDQAbW1jLWhzMjAwLTFfOHYAbW1jLWhzNDAwLTFfOHYAbm9uLXJlbW92YWJs
ZQBmdWxsLXB3ci1jeWNsZS1pbi1zdXNwZW5kAG5vLTEtOC12AGNhcC1wb3dlci1vZmYtY2FyZABr
ZWVwLXBvd2VyLWluLXN1c3BlbmQAYnVzLXJhbmdlAGRtYS1yYW5nZXMAaW50ZXJydXB0LW1hcC1t
YXNrAGludGVycnVwdC1tYXAAcGNpZTN2My1zdXBwbHkAcGNpZTF2OC1zdXBwbHkAcmVuZXNhcywj
Y2gAcmVuZXNhcywjZmNwX2NoAHJlbmVzYXMsaGFzLWJydQByZW5lc2FzLGhhcy1sdXQAcmVuZXNh
cyxoYXMtY2x1AHJlbmVzYXMsaGFzLWhnbwByZW5lc2FzLCNycGYAcmVuZXNhcywjdWRzAHJlbmVz
YXMsI3dwZgByZW5lc2FzLCNycGZfY2x1dAByZW5lc2FzLCN3cGZfcm90AHJlbmVzYXMsI3JlYWRf
b3V0c3RhbmRpbmcAcmVuZXNhcywjc3RhcnRfcmVzZXJ2YXRpb24AcmVuZXNhcywjYnVyc3RfYWNj
ZXNzAHJlbmVzYXMsI2JycwByZW5lc2FzLGZjcAByZW5lc2FzLGhhcy1oZ3QAcmVuZXNhcyxoYXMt
c3J1AHJlbmVzYXMsaGFzLXVkcwByZW5lc2FzLGhhcy1oc3QAcmVuZXNhcyxoYXMtaHNpAHJlbmVz
YXMsaGFzLXNocAByZW5lc2FzLGNtbXMAcmVuZXNhcyx2c3BzAGludGVycnVwdHMtZXh0ZW5kZWQA
Ym9vdGFyZ3MAc3Rkb3V0LXBhdGgAeGVuLHhlbi1ib290YXJncwB4ZW4sZG9tMC1ib290YXJncwBy
ZWctbmFtZQBsaW51eCxjb2RlAGxhYmVsAHdha2V1cC1zb3VyY2UAZGVib3VuY2UtaW50ZXJ2YWwA
Z3BpbwBlbmFibGUtYWN0aXZlLWhpZ2gAZ3Bpb3Mtc3RhdGVzAG5vLW1hcABzZWxlY3QtZ3Bpb3MA
c3RhcnR1cC1kZWxheS11cwBlbmFibGUtYWN0aXZlLWxvdwBkZXZfbmFtZQBmbG93X2NudHJsAGJh
dWRfcmF0ZQBkYWlzAHdpZHRoLW1tAGhlaWdodC1tbQBkYXRhLW1hcHBpbmcAaGFjdGl2ZQB2YWN0
aXZlAGhzeW5jLWxlbgBoZnJvbnQtcG9yY2gAaGJhY2stcG9yY2gAdmZyb250LXBvcmNoAHZiYWNr
LXBvcmNoAHZzeW5jLWxlbgBzeXN0ZW0tY2xvY2stZnJlcXVlbmN5AGNsb2NrLW91dHB1dC1uYW1l
cwA=

--_005_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_
Content-Type: application/octet-stream; name="krn_config"
Content-Description: krn_config
Content-Disposition: attachment; filename="krn_config"; size=241118;
	creation-date="Wed, 21 Jul 2021 08:58:29 GMT";
	modification-date="Wed, 21 Jul 2021 09:59:40 GMT"
Content-Transfer-Encoding: base64

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4L2Fy
bTY0IDUuMTAuMC1yYzQgS2VybmVsIENvbmZpZ3VyYXRpb24KIwpDT05GSUdfQ0NfVkVSU0lPTl9U
RVhUPSJhYXJjaDY0LWxpbnV4LWdudS1nY2MgKFVidW50dSA5LjMuMC0xN3VidW50dTF+MjAuMDQp
IDkuMy4wIgpDT05GSUdfQ0NfSVNfR0NDPXkKQ09ORklHX0dDQ19WRVJTSU9OPTkwMzAwCkNPTkZJ
R19MRF9WRVJTSU9OPTIzNDAwMDAwMApDT05GSUdfQ0xBTkdfVkVSU0lPTj0wCkNPTkZJR19DQ19D
QU5fTElOSz15CkNPTkZJR19DQ19DQU5fTElOS19TVEFUSUM9eQpDT05GSUdfQ0NfSEFTX0FTTV9H
T1RPPXkKQ09ORklHX0NDX0hBU19BU01fSU5MSU5FPXkKQ09ORklHX0lSUV9XT1JLPXkKQ09ORklH
X0JVSUxEVElNRV9UQUJMRV9TT1JUPXkKQ09ORklHX1RIUkVBRF9JTkZPX0lOX1RBU0s9eQoKIwoj
IEdlbmVyYWwgc2V0dXAKIwpDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiMgQ09ORklHX0NP
TVBJTEVfVEVTVCBpcyBub3Qgc2V0CkNPTkZJR19MT0NBTFZFUlNJT049Ii15b2N0by1zdGFuZGFy
ZCIKIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldApDT05GSUdfQlVJTERfU0FM
VD0iIgpDT05GSUdfREVGQVVMVF9JTklUPSIiCkNPTkZJR19ERUZBVUxUX0hPU1ROQU1FPSIobm9u
ZSkiCkNPTkZJR19TV0FQPXkKQ09ORklHX1NZU1ZJUEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9
eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQojIENP
TkZJR19XQVRDSF9RVUVVRSBpcyBub3Qgc2V0CkNPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIPXkK
IyBDT05GSUdfVVNFTElCIGlzIG5vdCBzZXQKQ09ORklHX0FVRElUPXkKQ09ORklHX0hBVkVfQVJD
SF9BVURJVFNZU0NBTEw9eQpDT05GSUdfQVVESVRTWVNDQUxMPXkKCiMKIyBJUlEgc3Vic3lzdGVt
CiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09ORklHX0dFTkVSSUNfSVJRX1NIT1c9eQpD
T05GSUdfR0VORVJJQ19JUlFfU0hPV19MRVZFTD15CkNPTkZJR19HRU5FUklDX0lSUV9FRkZFQ1RJ
VkVfQUZGX01BU0s9eQpDT05GSUdfR0VORVJJQ19JUlFfTUlHUkFUSU9OPXkKQ09ORklHX0hBUkRJ
UlFTX1NXX1JFU0VORD15CkNPTkZJR19HRU5FUklDX0lSUV9DSElQPXkKQ09ORklHX0lSUV9ET01B
SU49eQpDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFk9eQpDT05GSUdfSVJRX0ZBU1RFT0lfSElF
UkFSQ0hZX0hBTkRMRVJTPXkKQ09ORklHX0dFTkVSSUNfSVJRX0lQST15CkNPTkZJR19HRU5FUklD
X01TSV9JUlE9eQpDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTj15CkNPTkZJR19JUlFfTVNJ
X0lPTU1VPXkKQ09ORklHX0hBTkRMRV9ET01BSU5fSVJRPXkKQ09ORklHX0lSUV9GT1JDRURfVEhS
RUFESU5HPXkKQ09ORklHX1NQQVJTRV9JUlE9eQojIENPTkZJR19HRU5FUklDX0lSUV9ERUJVR0ZT
IGlzIG5vdCBzZXQKIyBlbmQgb2YgSVJRIHN1YnN5c3RlbQoKQ09ORklHX0dFTkVSSUNfSVJRX01V
TFRJX0hBTkRMRVI9eQpDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKQ09ORklHX0dFTkVS
SUNfQ0xPQ0tFVkVOVFM9eQpDT05GSUdfQVJDSF9IQVNfVElDS19CUk9BRENBU1Q9eQpDT05GSUdf
R0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1Q9eQoKIwojIFRpbWVycyBzdWJzeXN0ZW0KIwpD
T05GSUdfVElDS19PTkVTSE9UPXkKQ09ORklHX05PX0haX0NPTU1PTj15CiMgQ09ORklHX0haX1BF
UklPRElDIGlzIG5vdCBzZXQKQ09ORklHX05PX0haX0lETEU9eQojIENPTkZJR19OT19IWl9GVUxM
IGlzIG5vdCBzZXQKIyBDT05GSUdfTk9fSFogaXMgbm90IHNldApDT05GSUdfSElHSF9SRVNfVElN
RVJTPXkKIyBlbmQgb2YgVGltZXJzIHN1YnN5c3RlbQoKIyBDT05GSUdfUFJFRU1QVF9OT05FIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldApDT05GSUdfUFJF
RU1QVD15CkNPTkZJR19QUkVFTVBUX0NPVU5UPXkKQ09ORklHX1BSRUVNUFRJT049eQoKIwojIENQ
VS9UYXNrIHRpbWUgYW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVElDS19DUFVfQUNDT1VO
VElORz15CiMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlzIG5vdCBzZXQKQ09ORklH
X0lSUV9USU1FX0FDQ09VTlRJTkc9eQpDT05GSUdfSEFWRV9TQ0hFRF9BVkdfSVJRPXkKQ09ORklH
X1NDSEVEX1RIRVJNQUxfUFJFU1NVUkU9eQpDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CkNPTkZJ
R19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKQ09ORklHX1RBU0tTVEFUUz15CkNPTkZJR19UQVNLX0RF
TEFZX0FDQ1Q9eQpDT05GSUdfVEFTS19YQUNDVD15CkNPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9
eQojIENPTkZJR19QU0kgaXMgbm90IHNldAojIGVuZCBvZiBDUFUvVGFzayB0aW1lIGFuZCBzdGF0
cyBhY2NvdW50aW5nCgpDT05GSUdfQ1BVX0lTT0xBVElPTj15CgojCiMgUkNVIFN1YnN5c3RlbQoj
CkNPTkZJR19UUkVFX1JDVT15CkNPTkZJR19QUkVFTVBUX1JDVT15CiMgQ09ORklHX1JDVV9FWFBF
UlQgaXMgbm90IHNldApDT05GSUdfU1JDVT15CkNPTkZJR19UUkVFX1NSQ1U9eQpDT05GSUdfVEFT
S1NfUkNVX0dFTkVSSUM9eQpDT05GSUdfVEFTS1NfUkNVPXkKQ09ORklHX1JDVV9TVEFMTF9DT01N
T049eQpDT05GSUdfUkNVX05FRURfU0VHQ0JMSVNUPXkKIyBlbmQgb2YgUkNVIFN1YnN5c3RlbQoK
Q09ORklHX0lLQ09ORklHPXkKQ09ORklHX0lLQ09ORklHX1BST0M9eQojIENPTkZJR19JS0hFQURF
UlMgaXMgbm90IHNldApDT05GSUdfTE9HX0JVRl9TSElGVD0xNwpDT05GSUdfTE9HX0NQVV9NQVhf
QlVGX1NISUZUPTEyCkNPTkZJR19QUklOVEtfU0FGRV9MT0dfQlVGX1NISUZUPTEzCkNPTkZJR19H
RU5FUklDX1NDSEVEX0NMT0NLPXkKCiMKIyBTY2hlZHVsZXIgZmVhdHVyZXMKIwojIENPTkZJR19V
Q0xBTVBfVEFTSyBpcyBub3Qgc2V0CiMgZW5kIG9mIFNjaGVkdWxlciBmZWF0dXJlcwoKQ09ORklH
X0FSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkc9eQpDT05GSUdfQ0NfSEFTX0lOVDEyOD15CkNP
TkZJR19BUkNIX1NVUFBPUlRTX0lOVDEyOD15CkNPTkZJR19OVU1BX0JBTEFOQ0lORz15CkNPTkZJ
R19OVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRUQ9eQpDT05GSUdfQ0dST1VQUz15CkNPTkZJ
R19QQUdFX0NPVU5URVI9eQpDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfU1dBUD15CkNPTkZJ
R19NRU1DR19LTUVNPXkKQ09ORklHX0JMS19DR1JPVVA9eQpDT05GSUdfQ0dST1VQX1dSSVRFQkFD
Sz15CkNPTkZJR19DR1JPVVBfU0NIRUQ9eQpDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CiMgQ09O
RklHX0NGU19CQU5EV0lEVEggaXMgbm90IHNldAojIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBu
b3Qgc2V0CkNPTkZJR19DR1JPVVBfUElEUz15CiMgQ09ORklHX0NHUk9VUF9SRE1BIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ0dST1VQX0ZSRUVaRVIgaXMgbm90IHNldApDT05GSUdfQ0dST1VQX0hVR0VU
TEI9eQpDT05GSUdfQ1BVU0VUUz15CkNPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQpDT05GSUdfQ0dS
T1VQX0RFVklDRT15CkNPTkZJR19DR1JPVVBfQ1BVQUNDVD15CkNPTkZJR19DR1JPVVBfUEVSRj15
CiMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19OQU1FU1BBQ0VTPXkKQ09O
RklHX1VUU19OUz15CkNPTkZJR19USU1FX05TPXkKQ09ORklHX0lQQ19OUz15CkNPTkZJR19VU0VS
X05TPXkKQ09ORklHX1BJRF9OUz15CkNPTkZJR19ORVRfTlM9eQojIENPTkZJR19DSEVDS1BPSU5U
X1JFU1RPUkUgaXMgbm90IHNldApDT05GSUdfU0NIRURfQVVUT0dST1VQPXkKIyBDT05GSUdfU1lT
RlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQ09ORklH
X0JMS19ERVZfSU5JVFJEPXkKQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKQ09ORklHX1JEX0da
SVA9eQpDT05GSUdfUkRfQlpJUDI9eQpDT05GSUdfUkRfTFpNQT15CkNPTkZJR19SRF9YWj15CkNP
TkZJR19SRF9MWk89eQpDT05GSUdfUkRfTFo0PXkKQ09ORklHX1JEX1pTVEQ9eQojIENPTkZJR19C
T09UX0NPTkZJRyBpcyBub3Qgc2V0CkNPTkZJR19DQ19PUFRJTUlaRV9GT1JfUEVSRk9STUFOQ0U9
eQojIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkNPTkZJR19TWVNDVEw9
eQpDT05GSUdfSEFWRV9VSUQxNj15CkNPTkZJR19TWVNDVExfRVhDRVBUSU9OX1RSQUNFPXkKQ09O
RklHX0JQRj15CiMgQ09ORklHX0VYUEVSVCBpcyBub3Qgc2V0CkNPTkZJR19VSUQxNj15CkNPTkZJ
R19NVUxUSVVTRVI9eQpDT05GSUdfU1lTRlNfU1lTQ0FMTD15CkNPTkZJR19GSEFORExFPXkKQ09O
RklHX1BPU0lYX1RJTUVSUz15CkNPTkZJR19QUklOVEs9eQpDT05GSUdfUFJJTlRLX05NST15CkNP
TkZJR19CVUc9eQpDT05GSUdfRUxGX0NPUkU9eQpDT05GSUdfQkFTRV9GVUxMPXkKQ09ORklHX0ZV
VEVYPXkKQ09ORklHX0ZVVEVYX1BJPXkKQ09ORklHX0hBVkVfRlVURVhfQ01QWENIRz15CkNPTkZJ
R19FUE9MTD15CkNPTkZJR19TSUdOQUxGRD15CkNPTkZJR19USU1FUkZEPXkKQ09ORklHX0VWRU5U
RkQ9eQpDT05GSUdfU0hNRU09eQpDT05GSUdfQUlPPXkKQ09ORklHX0lPX1VSSU5HPXkKQ09ORklH
X0FEVklTRV9TWVNDQUxMUz15CkNPTkZJR19NRU1CQVJSSUVSPXkKQ09ORklHX0tBTExTWU1TPXkK
Q09ORklHX0tBTExTWU1TX0FMTD15CkNPTkZJR19LQUxMU1lNU19CQVNFX1JFTEFUSVZFPXkKIyBD
T05GSUdfQlBGX1NZU0NBTEwgaXMgbm90IHNldApDT05GSUdfQVJDSF9XQU5UX0RFRkFVTFRfQlBG
X0pJVD15CkNPTkZJR19CUEZfSklUX0RFRkFVTFRfT049eQojIENPTkZJR19VU0VSRkFVTFRGRCBp
cyBub3Qgc2V0CkNPTkZJR19BUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRT15CkNPTkZJR19S
U0VRPXkKIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldApDT05GSUdfSEFWRV9QRVJGX0VWRU5U
Uz15CgojCiMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05GSUdf
UEVSRl9FVkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQK
IyBlbmQgb2YgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKCkNPTkZJR19W
TV9FVkVOVF9DT1VOVEVSUz15CkNPTkZJR19TTFVCX0RFQlVHPXkKIyBDT05GSUdfQ09NUEFUX0JS
SyBpcyBub3Qgc2V0CiMgQ09ORklHX1NMQUIgaXMgbm90IHNldApDT05GSUdfU0xVQj15CkNPTkZJ
R19TTEFCX01FUkdFX0RFRkFVTFQ9eQojIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORUQgaXMgbm90IHNldAojIENPTkZJ
R19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SIGlzIG5vdCBzZXQKQ09ORklHX1NMVUJfQ1BVX1BBUlRJ
QUw9eQpDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OPXkKQ09ORklHX1BST0ZJTElORz15
CkNPTkZJR19UUkFDRVBPSU5UUz15CiMgZW5kIG9mIEdlbmVyYWwgc2V0dXAKCkNPTkZJR19BUk02
ND15CkNPTkZJR182NEJJVD15CkNPTkZJR19NTVU9eQpDT05GSUdfQVJNNjRfUEFHRV9TSElGVD0x
MgpDT05GSUdfQVJNNjRfQ09OVF9QVEVfU0hJRlQ9NApDT05GSUdfQVJNNjRfQ09OVF9QTURfU0hJ
RlQ9NApDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRTX01JTj0xOApDT05GSUdfQVJDSF9NTUFQX1JO
RF9CSVRTX01BWD0zMwpDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRfQklUU19NSU49MTEKQ09O
RklHX0FSQ0hfTU1BUF9STkRfQ09NUEFUX0JJVFNfTUFYPTE2CkNPTkZJR19TVEFDS1RSQUNFX1NV
UFBPUlQ9eQpDT05GSUdfSUxMRUdBTF9QT0lOVEVSX1ZBTFVFPTB4ZGVhZDAwMDAwMDAwMDAwMApD
T05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQpD
T05GSUdfR0VORVJJQ19CVUc9eQpDT05GSUdfR0VORVJJQ19CVUdfUkVMQVRJVkVfUE9JTlRFUlM9
eQpDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKQ09ORklHX0dFTkVSSUNfQ1NVTT15CkNPTkZJR19H
RU5FUklDX0NBTElCUkFURV9ERUxBWT15CkNPTkZJR19aT05FX0RNQT15CkNPTkZJR19aT05FX0RN
QTMyPXkKQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX0FSQ0hfRU5B
QkxFX01FTU9SWV9IT1RSRU1PVkU9eQpDT05GSUdfU01QPXkKQ09ORklHX0tFUk5FTF9NT0RFX05F
T049eQpDT05GSUdfRklYX0VBUkxZQ09OX01FTT15CkNPTkZJR19QR1RBQkxFX0xFVkVMUz00CkNP
TkZJR19BUkNIX1NVUFBPUlRTX1VQUk9CRVM9eQpDT05GSUdfQVJDSF9QUk9DX0tDT1JFX1RFWFQ9
eQoKIwojIFBsYXRmb3JtIHNlbGVjdGlvbgojCkNPTkZJR19BUkNIX0FDVElPTlM9eQpDT05GSUdf
QVJDSF9BR0lMRVg9eQpDT05GSUdfQVJDSF9TVU5YST15CkNPTkZJR19BUkNIX0FMUElORT15CkNP
TkZJR19BUkNIX0JDTTI4MzU9eQpDT05GSUdfQVJDSF9CQ01fSVBST0M9eQpDT05GSUdfQVJDSF9C
RVJMSU49eQojIENPTkZJR19BUkNIX0JJVE1BSU4gaXMgbm90IHNldApDT05GSUdfQVJDSF9CUkNN
U1RCPXkKQ09ORklHX0FSQ0hfRVhZTk9TPXkKIyBDT05GSUdfQVJDSF9TUEFSWDUgaXMgbm90IHNl
dApDT05GSUdfQVJDSF9LMz15CkNPTkZJR19BUkNIX0xBWUVSU0NBUEU9eQpDT05GSUdfQVJDSF9M
RzFLPXkKQ09ORklHX0FSQ0hfSElTST15CiMgQ09ORklHX0FSQ0hfS0VFTUJBWSBpcyBub3Qgc2V0
CkNPTkZJR19BUkNIX01FRElBVEVLPXkKQ09ORklHX0FSQ0hfTUVTT049eQpDT05GSUdfQVJDSF9N
VkVCVT15CkNPTkZJR19BUkNIX01YQz15CkNPTkZJR19BUkNIX1FDT009eQojIENPTkZJR19BUkNI
X1JFQUxURUsgaXMgbm90IHNldApDT05GSUdfQVJDSF9SRU5FU0FTPXkKQ09ORklHX0FSQ0hfUk9D
S0NISVA9eQojIENPTkZJR19BUkNIX1MzMiBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1NFQVRUTEU9
eQpDT05GSUdfQVJDSF9TVFJBVElYMTA9eQpDT05GSUdfQVJDSF9TWU5RVUFDRVI9eQpDT05GSUdf
QVJDSF9URUdSQT15CkNPTkZJR19BUkNIX1NQUkQ9eQpDT05GSUdfQVJDSF9USFVOREVSPXkKQ09O
RklHX0FSQ0hfVEhVTkRFUjI9eQpDT05GSUdfQVJDSF9VTklQSElFUj15CkNPTkZJR19BUkNIX1ZF
WFBSRVNTPXkKIyBDT05GSUdfQVJDSF9WSVNDT05USSBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1hH
RU5FPXkKQ09ORklHX0FSQ0hfWlg9eQpDT05GSUdfQVJDSF9aWU5RTVA9eQojIGVuZCBvZiBQbGF0
Zm9ybSBzZWxlY3Rpb24KCiMKIyBLZXJuZWwgRmVhdHVyZXMKIwoKIwojIEFSTSBlcnJhdGEgd29y
a2Fyb3VuZHMgdmlhIHRoZSBhbHRlcm5hdGl2ZXMgZnJhbWV3b3JrCiMKQ09ORklHX0FSTTY0X1dP
UktBUk9VTkRfQ0xFQU5fQ0FDSEU9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV84MjYzMTk9eQpDT05G
SUdfQVJNNjRfRVJSQVRVTV84MjczMTk9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV84MjQwNjk9eQpD
T05GSUdfQVJNNjRfRVJSQVRVTV84MTk0NzI9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV84MzIwNzU9
eQpDT05GSUdfQVJNNjRfRVJSQVRVTV84MzQyMjA9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV84NDU3
MTk9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV84NDM0MTk9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV8x
MDI0NzE4PXkKQ09ORklHX0FSTTY0X0VSUkFUVU1fMTQxODA0MD15CkNPTkZJR19BUk02NF9XT1JL
QVJPVU5EX1NQRUNVTEFUSVZFX0FUPXkKQ09ORklHX0FSTTY0X0VSUkFUVU1fMTE2NTUyMj15CkNP
TkZJR19BUk02NF9FUlJBVFVNXzEzMTkzNjc9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV8xNTMwOTIz
PXkKQ09ORklHX0FSTTY0X1dPUktBUk9VTkRfUkVQRUFUX1RMQkk9eQpDT05GSUdfQVJNNjRfRVJS
QVRVTV8xMjg2ODA3PXkKQ09ORklHX0FSTTY0X0VSUkFUVU1fMTQ2MzIyNT15CkNPTkZJR19BUk02
NF9FUlJBVFVNXzE1NDI0MTk9eQpDT05GSUdfQVJNNjRfRVJSQVRVTV8xNTA4NDEyPXkKQ09ORklH
X0NBVklVTV9FUlJBVFVNXzIyMzc1PXkKQ09ORklHX0NBVklVTV9FUlJBVFVNXzIzMTQ0PXkKQ09O
RklHX0NBVklVTV9FUlJBVFVNXzIzMTU0PXkKQ09ORklHX0NBVklVTV9FUlJBVFVNXzI3NDU2PXkK
Q09ORklHX0NBVklVTV9FUlJBVFVNXzMwMTE1PXkKQ09ORklHX0NBVklVTV9UWDJfRVJSQVRVTV8y
MTk9eQpDT05GSUdfRlVKSVRTVV9FUlJBVFVNXzAxMDAwMT15CkNPTkZJR19ISVNJTElDT05fRVJS
QVRVTV8xNjE2MDA4MDI9eQpDT05GSUdfUUNPTV9GQUxLT1JfRVJSQVRVTV8xMDAzPXkKQ09ORklH
X1FDT01fRkFMS09SX0VSUkFUVU1fMTAwOT15CkNPTkZJR19RQ09NX1FERjI0MDBfRVJSQVRVTV8w
MDY1PXkKQ09ORklHX1FDT01fRkFMS09SX0VSUkFUVU1fRTEwNDE9eQpDT05GSUdfU09DSU9ORVhU
X1NZTlFVQUNFUl9QUkVJVFM9eQojIGVuZCBvZiBBUk0gZXJyYXRhIHdvcmthcm91bmRzIHZpYSB0
aGUgYWx0ZXJuYXRpdmVzIGZyYW1ld29yawoKQ09ORklHX0FSTTY0XzRLX1BBR0VTPXkKIyBDT05G
SUdfQVJNNjRfMTZLX1BBR0VTIGlzIG5vdCBzZXQKIyBDT05GSUdfQVJNNjRfNjRLX1BBR0VTIGlz
IG5vdCBzZXQKIyBDT05GSUdfQVJNNjRfVkFfQklUU18zOSBpcyBub3Qgc2V0CkNPTkZJR19BUk02
NF9WQV9CSVRTXzQ4PXkKQ09ORklHX0FSTTY0X1ZBX0JJVFM9NDgKQ09ORklHX0FSTTY0X1BBX0JJ
VFNfNDg9eQpDT05GSUdfQVJNNjRfUEFfQklUUz00OAojIENPTkZJR19DUFVfQklHX0VORElBTiBp
cyBub3Qgc2V0CkNPTkZJR19DUFVfTElUVExFX0VORElBTj15CkNPTkZJR19TQ0hFRF9NQz15CkNP
TkZJR19TQ0hFRF9TTVQ9eQpDT05GSUdfTlJfQ1BVUz0yNTYKQ09ORklHX0hPVFBMVUdfQ1BVPXkK
Q09ORklHX05VTUE9eQpDT05GSUdfTk9ERVNfU0hJRlQ9NApDT05GSUdfVVNFX1BFUkNQVV9OVU1B
X05PREVfSUQ9eQpDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQpDT05GSUdfTkVFRF9Q
RVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKQ09ORklHX0hPTEVTX0lOX1pPTkU9eQojIENPTkZJ
R19IWl8xMDAgaXMgbm90IHNldApDT05GSUdfSFpfMjUwPXkKIyBDT05GSUdfSFpfMzAwIGlzIG5v
dCBzZXQKIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CkNPTkZJR19IWj0yNTAKQ09ORklHX1ND
SEVEX0hSVElDSz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CkNPTkZJ
R19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15
CkNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpDT05GSUdfSEFWRV9BUkNIX1BGTl9W
QUxJRD15CkNPTkZJR19IV19QRVJGX0VWRU5UUz15CkNPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRM
QkZTPXkKQ09ORklHX0FSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRT15CkNPTkZJR19BUkNIX0hBU19D
QUNIRV9MSU5FX1NJWkU9eQpDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNP
TkZJR19QQVJBVklSVD15CiMgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORyBpcyBub3Qg
c2V0CkNPTkZJR19LRVhFQz15CkNPTkZJR19LRVhFQ19GSUxFPXkKIyBDT05GSUdfS0VYRUNfU0lH
IGlzIG5vdCBzZXQKQ09ORklHX0NSQVNIX0RVTVA9eQpDT05GSUdfWEVOX0RPTTA9eQpDT05GSUdf
WEVOPXkKQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKQ09ORklHX1VOTUFQX0tFUk5FTF9B
VF9FTDA9eQpDT05GSUdfUk9EQVRBX0ZVTExfREVGQVVMVF9FTkFCTEVEPXkKIyBDT05GSUdfQVJN
NjRfU1dfVFRCUjBfUEFOIGlzIG5vdCBzZXQKQ09ORklHX0FSTTY0X1RBR0dFRF9BRERSX0FCST15
CkNPTkZJR19DT01QQVQ9eQpDT05GSUdfS1VTRVJfSEVMUEVSUz15CiMgQ09ORklHX0FSTVY4X0RF
UFJFQ0FURUQgaXMgbm90IHNldAoKIwojIEFSTXY4LjEgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcwoj
CkNPTkZJR19BUk02NF9IV19BRkRCTT15CkNPTkZJR19BUk02NF9QQU49eQpDT05GSUdfQVJNNjRf
TFNFX0FUT01JQ1M9eQpDT05GSUdfQVJNNjRfVVNFX0xTRV9BVE9NSUNTPXkKQ09ORklHX0FSTTY0
X1ZIRT15CiMgZW5kIG9mIEFSTXY4LjEgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcwoKIwojIEFSTXY4
LjIgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcwojCkNPTkZJR19BUk02NF9VQU89eQojIENPTkZJR19B
Uk02NF9QTUVNIGlzIG5vdCBzZXQKQ09ORklHX0FSTTY0X1JBU19FWFROPXkKQ09ORklHX0FSTTY0
X0NOUD15CiMgZW5kIG9mIEFSTXY4LjIgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcwoKIwojIEFSTXY4
LjMgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcwojCkNPTkZJR19BUk02NF9QVFJfQVVUSD15CkNPTkZJ
R19DQ19IQVNfQlJBTkNIX1BST1RfUEFDX1JFVD15CkNPTkZJR19DQ19IQVNfU0lHTl9SRVRVUk5f
QUREUkVTUz15CkNPTkZJR19BU19IQVNfUEFDPXkKQ09ORklHX0FTX0hBU19DRklfTkVHQVRFX1JB
X1NUQVRFPXkKIyBlbmQgb2YgQVJNdjguMyBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzCgojCiMgQVJN
djguNCBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzCiMKQ09ORklHX0FSTTY0X0FNVV9FWFROPXkKQ09O
RklHX0FTX0hBU19BUk1WOF80PXkKQ09ORklHX0FSTTY0X1RMQl9SQU5HRT15CiMgZW5kIG9mIEFS
TXY4LjQgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcwoKIwojIEFSTXY4LjUgYXJjaGl0ZWN0dXJhbCBm
ZWF0dXJlcwojCkNPTkZJR19BUk02NF9CVEk9eQpDT05GSUdfQ0NfSEFTX0JSQU5DSF9QUk9UX1BB
Q19SRVRfQlRJPXkKQ09ORklHX0FSTTY0X0UwUEQ9eQpDT05GSUdfQVJDSF9SQU5ET009eQpDT05G
SUdfQVJNNjRfQVNfSEFTX01URT15CkNPTkZJR19BUk02NF9NVEU9eQojIGVuZCBvZiBBUk12OC41
IGFyY2hpdGVjdHVyYWwgZmVhdHVyZXMKCkNPTkZJR19BUk02NF9TVkU9eQpDT05GSUdfQVJNNjRf
TU9EVUxFX1BMVFM9eQojIENPTkZJR19BUk02NF9QU0VVRE9fTk1JIGlzIG5vdCBzZXQKQ09ORklH
X1JFTE9DQVRBQkxFPXkKQ09ORklHX1JBTkRPTUlaRV9CQVNFPXkKQ09ORklHX1JBTkRPTUlaRV9N
T0RVTEVfUkVHSU9OX0ZVTEw9eQpDT05GSUdfQ0NfSEFWRV9TVEFDS1BST1RFQ1RPUl9TWVNSRUc9
eQpDT05GSUdfU1RBQ0tQUk9URUNUT1JfUEVSX1RBU0s9eQojIGVuZCBvZiBLZXJuZWwgRmVhdHVy
ZXMKCiMKIyBCb290IG9wdGlvbnMKIwojIENPTkZJR19BUk02NF9BQ1BJX1BBUktJTkdfUFJPVE9D
T0wgaXMgbm90IHNldApDT05GSUdfQ01ETElORT0iIgpDT05GSUdfRUZJX1NUVUI9eQpDT05GSUdf
RUZJPXkKQ09ORklHX0RNST15CiMgZW5kIG9mIEJvb3Qgb3B0aW9ucwoKQ09ORklHX1NZU1ZJUENf
Q09NUEFUPXkKQ09ORklHX0FSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTj15CkNPTkZJR19B
UkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OPXkKCiMKIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMK
IwpDT05GSUdfU1VTUEVORD15CkNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQpDT05GSUdfSElCRVJO
QVRFX0NBTExCQUNLUz15CkNPTkZJR19ISUJFUk5BVElPTj15CkNPTkZJR19ISUJFUk5BVElPTl9T
TkFQU0hPVF9ERVY9eQpDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgpDT05GSUdfUE1fU0xFRVA9
eQpDT05GSUdfUE1fU0xFRVBfU01QPXkKIyBDT05GSUdfUE1fQVVUT1NMRUVQIGlzIG5vdCBzZXQK
IyBDT05GSUdfUE1fV0FLRUxPQ0tTIGlzIG5vdCBzZXQKQ09ORklHX1BNPXkKIyBDT05GSUdfUE1f
REVCVUcgaXMgbm90IHNldApDT05GSUdfUE1fQ0xLPXkKQ09ORklHX1BNX0dFTkVSSUNfRE9NQUlO
Uz15CkNPTkZJR19XUV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVD15CkNPTkZJR19QTV9HRU5FUklD
X0RPTUFJTlNfU0xFRVA9eQpDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TX09GPXkKQ09ORklHX0NQ
VV9QTT15CkNPTkZJR19FTkVSR1lfTU9ERUw9eQpDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NT
SUJMRT15CkNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX0hFQURFUj15CkNPTkZJR19BUkNIX1NVU1BF
TkRfUE9TU0lCTEU9eQojIGVuZCBvZiBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKCiMKIyBDUFUg
UG93ZXIgTWFuYWdlbWVudAojCgojCiMgQ1BVIElkbGUKIwpDT05GSUdfQ1BVX0lETEU9eQpDT05G
SUdfQ1BVX0lETEVfTVVMVElQTEVfRFJJVkVSUz15CiMgQ09ORklHX0NQVV9JRExFX0dPVl9MQURE
RVIgaXMgbm90IHNldApDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQojIENPTkZJR19DUFVfSURM
RV9HT1ZfVEVPIGlzIG5vdCBzZXQKQ09ORklHX0RUX0lETEVfU1RBVEVTPXkKCiMKIyBBUk0gQ1BV
IElkbGUgRHJpdmVycwojCkNPTkZJR19BUk1fQ1BVSURMRT15CkNPTkZJR19BUk1fUFNDSV9DUFVJ
RExFPXkKQ09ORklHX0FSTV9QU0NJX0NQVUlETEVfRE9NQUlOPXkKIyBlbmQgb2YgQVJNIENQVSBJ
ZGxlIERyaXZlcnMKIyBlbmQgb2YgQ1BVIElkbGUKCiMKIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcK
IwpDT05GSUdfQ1BVX0ZSRVE9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX0FUVFJfU0VUPXkKQ09ORklH
X0NQVV9GUkVRX0dPVl9DT01NT049eQpDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CiMgQ09ORklHX0NQ
VV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0ZS
RVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0ZSRVFfREVG
QVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9H
T1ZfT05ERU1BTkQgaXMgbm90IHNldAojIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05T
RVJWQVRJVkUgaXMgbm90IHNldApDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfU0NIRURVVElM
PXkKQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CkNPTkZJR19DUFVfRlJFUV9HT1Zf
UE9XRVJTQVZFPXkKQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQpDT05GSUdfQ1BVX0ZS
RVFfR09WX09OREVNQU5EPXkKQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9eQpDT05G
SUdfQ1BVX0ZSRVFfR09WX1NDSEVEVVRJTD15CgojCiMgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nIGRy
aXZlcnMKIwpDT05GSUdfQ1BVRlJFUV9EVD15CkNPTkZJR19DUFVGUkVRX0RUX1BMQVRERVY9eQpD
T05GSUdfQUNQSV9DUFBDX0NQVUZSRVE9bQpDT05GSUdfQVJNX0FMTFdJTk5FUl9TVU41MElfQ1BV
RlJFUV9OVk1FTT1tCkNPTkZJR19BUk1fQVJNQURBXzM3WFhfQ1BVRlJFUT15CiMgQ09ORklHX0FS
TV9BUk1BREFfOEtfQ1BVRlJFUSBpcyBub3Qgc2V0CkNPTkZJR19BUk1fU0NQSV9DUFVGUkVRPXkK
Q09ORklHX0FSTV9CUkNNU1RCX0FWU19DUFVGUkVRPXkKQ09ORklHX0FSTV9JTVhfQ1BVRlJFUV9E
VD1tCiMgQ09ORklHX0FSTV9NRURJQVRFS19DUFVGUkVRIGlzIG5vdCBzZXQKQ09ORklHX0FSTV9R
Q09NX0NQVUZSRVFfTlZNRU09eQpDT05GSUdfQVJNX1FDT01fQ1BVRlJFUV9IVz15CkNPTkZJR19B
Uk1fUkFTUEJFUlJZUElfQ1BVRlJFUT1tCkNPTkZJR19BUk1fVEVHUkEyMF9DUFVGUkVRPXkKQ09O
RklHX0FSTV9URUdSQTEyNF9DUFVGUkVRPXkKQ09ORklHX0FSTV9URUdSQTE4Nl9DUFVGUkVRPXkK
Q09ORklHX0FSTV9URUdSQTE5NF9DUFVGUkVRPXkKQ09ORklHX1FPUklRX0NQVUZSRVE9eQojIGVu
ZCBvZiBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKIyBlbmQgb2YgQ1BVIFBvd2VyIE1hbmFnZW1lbnQK
CiMKIyBGaXJtd2FyZSBEcml2ZXJzCiMKIyBDT05GSUdfQVJNX1NDTUlfUFJPVE9DT0wgaXMgbm90
IHNldApDT05GSUdfQVJNX1NDUElfUFJPVE9DT0w9eQpDT05GSUdfQVJNX1NDUElfUE9XRVJfRE9N
QUlOPXkKIyBDT05GSUdfQVJNX1NERV9JTlRFUkZBQ0UgaXMgbm90IHNldApDT05GSUdfRE1JSUQ9
eQojIENPTkZJR19ETUlfU1lTRlMgaXMgbm90IHNldAojIENPTkZJR19JU0NTSV9JQkZUIGlzIG5v
dCBzZXQKQ09ORklHX1JBU1BCRVJSWVBJX0ZJUk1XQVJFPXkKIyBDT05GSUdfRldfQ0ZHX1NZU0ZT
IGlzIG5vdCBzZXQKQ09ORklHX0lOVEVMX1NUUkFUSVgxMF9TRVJWSUNFPXkKQ09ORklHX0lOVEVM
X1NUUkFUSVgxMF9SU1U9bQpDT05GSUdfUUNPTV9TQ009eQojIENPTkZJR19RQ09NX1NDTV9ET1dO
TE9BRF9NT0RFX0RFRkFVTFQgaXMgbm90IHNldApDT05GSUdfVElfU0NJX1BST1RPQ09MPXkKIyBD
T05GSUdfVFVSUklTX01PWF9SV1RNIGlzIG5vdCBzZXQKQ09ORklHX1RFRV9CTlhUX0ZXPXkKIyBD
T05GSUdfR09PR0xFX0ZJUk1XQVJFIGlzIG5vdCBzZXQKCiMKIyBFRkkgKEV4dGVuc2libGUgRmly
bXdhcmUgSW50ZXJmYWNlKSBTdXBwb3J0CiMKQ09ORklHX0VGSV9FU1JUPXkKQ09ORklHX0VGSV9W
QVJTX1BTVE9SRT15CiMgQ09ORklHX0VGSV9WQVJTX1BTVE9SRV9ERUZBVUxUX0RJU0FCTEUgaXMg
bm90IHNldApDT05GSUdfRUZJX1BBUkFNU19GUk9NX0ZEVD15CkNPTkZJR19FRklfUlVOVElNRV9X
UkFQUEVSUz15CkNPTkZJR19FRklfR0VORVJJQ19TVFVCPXkKQ09ORklHX0VGSV9BUk1TVFVCX0RU
Ql9MT0FERVI9eQpDT05GSUdfRUZJX0dFTkVSSUNfU1RVQl9JTklUUkRfQ01ETElORV9MT0FERVI9
eQojIENPTkZJR19FRklfQk9PVExPQURFUl9DT05UUk9MIGlzIG5vdCBzZXQKQ09ORklHX0VGSV9D
QVBTVUxFX0xPQURFUj15CiMgQ09ORklHX0VGSV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVT
RVRfQVRUQUNLX01JVElHQVRJT04gaXMgbm90IHNldAojIENPTkZJR19FRklfRElTQUJMRV9QQ0lf
RE1BIGlzIG5vdCBzZXQKIyBlbmQgb2YgRUZJIChFeHRlbnNpYmxlIEZpcm13YXJlIEludGVyZmFj
ZSkgU3VwcG9ydAoKQ09ORklHX1VFRklfQ1BFUj15CkNPTkZJR19VRUZJX0NQRVJfQVJNPXkKQ09O
RklHX0VGSV9FQVJMWUNPTj15CkNPTkZJR19FRklfQ1VTVE9NX1NTRFRfT1ZFUkxBWVM9eQojIENP
TkZJR19JTVhfRFNQIGlzIG5vdCBzZXQKQ09ORklHX0lNWF9TQ1U9eQpDT05GSUdfSU1YX1NDVV9Q
RD15CkNPTkZJR19NRVNPTl9TTT15CkNPTkZJR19BUk1fUFNDSV9GVz15CiMgQ09ORklHX0FSTV9Q
U0NJX0NIRUNLRVIgaXMgbm90IHNldApDT05GSUdfSEFWRV9BUk1fU01DQ0M9eQpDT05GSUdfSEFW
RV9BUk1fU01DQ0NfRElTQ09WRVJZPXkKQ09ORklHX0FSTV9TTUNDQ19TT0NfSUQ9eQoKIwojIFRl
Z3JhIGZpcm13YXJlIGRyaXZlcgojCkNPTkZJR19URUdSQV9JVkM9eQpDT05GSUdfVEVHUkFfQlBN
UD15CiMgZW5kIG9mIFRlZ3JhIGZpcm13YXJlIGRyaXZlcgoKIwojIFp5bnEgTVBTb0MgRmlybXdh
cmUgRHJpdmVycwojCkNPTkZJR19aWU5RTVBfRklSTVdBUkU9eQojIENPTkZJR19aWU5RTVBfRklS
TVdBUkVfREVCVUcgaXMgbm90IHNldAojIGVuZCBvZiBaeW5xIE1QU29DIEZpcm13YXJlIERyaXZl
cnMKIyBlbmQgb2YgRmlybXdhcmUgRHJpdmVycwoKQ09ORklHX0FSQ0hfU1VQUE9SVFNfQUNQST15
CkNPTkZJR19BQ1BJPXkKQ09ORklHX0FDUElfR0VORVJJQ19HU0k9eQpDT05GSUdfQUNQSV9DQ0Ff
UkVRVUlSRUQ9eQojIENPTkZJR19BQ1BJX0RFQlVHR0VSIGlzIG5vdCBzZXQKQ09ORklHX0FDUElf
U1BDUl9UQUJMRT15CiMgQ09ORklHX0FDUElfRUNfREVCVUdGUyBpcyBub3Qgc2V0CkNPTkZJR19B
Q1BJX0FDPXkKQ09ORklHX0FDUElfQkFUVEVSWT15CkNPTkZJR19BQ1BJX0JVVFRPTj15CkNPTkZJ
R19BQ1BJX0ZBTj15CiMgQ09ORklHX0FDUElfVEFEIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNQSV9E
T0NLIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfUFJPQ0VTU09SX0lETEU9eQpDT05GSUdfQUNQSV9N
Q0ZHPXkKQ09ORklHX0FDUElfQ1BQQ19MSUI9eQpDT05GSUdfQUNQSV9QUk9DRVNTT1I9eQojIENP
TkZJR19BQ1BJX0lQTUkgaXMgbm90IHNldApDT05GSUdfQUNQSV9IT1RQTFVHX0NQVT15CkNPTkZJ
R19BQ1BJX1RIRVJNQUw9eQpDT05GSUdfQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFPXkKQ09O
RklHX0FDUElfVEFCTEVfVVBHUkFERT15CiMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19BQ1BJX1BDSV9TTE9UIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfQ09OVEFJTkVSPXkK
Q09ORklHX0FDUElfSEVEPXkKIyBDT05GSUdfQUNQSV9DVVNUT01fTUVUSE9EIGlzIG5vdCBzZXQK
IyBDT05GSUdfQUNQSV9CR1JUIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfUkVEVUNFRF9IQVJEV0FS
RV9PTkxZPXkKQ09ORklHX0FDUElfTlVNQT15CiMgQ09ORklHX0FDUElfSE1BVCBpcyBub3Qgc2V0
CkNPTkZJR19IQVZFX0FDUElfQVBFST15CkNPTkZJR19BQ1BJX0FQRUk9eQpDT05GSUdfQUNQSV9B
UEVJX0dIRVM9eQpDT05GSUdfQUNQSV9BUEVJX1NFQT15CkNPTkZJR19BQ1BJX0FQRUlfTUVNT1JZ
X0ZBSUxVUkU9eQpDT05GSUdfQUNQSV9BUEVJX0VJTko9eQojIENPTkZJR19BQ1BJX0FQRUlfRVJT
VF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfQ09ORklHRlMgaXMgbm90IHNldApDT05G
SUdfQUNQSV9JT1JUPXkKQ09ORklHX0FDUElfR1REVD15CkNPTkZJR19BQ1BJX1BQVFQ9eQojIENP
TkZJR19QTUlDX09QUkVHSU9OIGlzIG5vdCBzZXQKQ09ORklHX0lSUV9CWVBBU1NfTUFOQUdFUj15
CkNPTkZJR19WSVJUVUFMSVpBVElPTj15CkNPTkZJR19LVk09eQpDT05GSUdfSEFWRV9LVk1fSVJR
Q0hJUD15CkNPTkZJR19IQVZFX0tWTV9JUlFGRD15CkNPTkZJR19IQVZFX0tWTV9JUlFfUk9VVElO
Rz15CkNPTkZJR19IQVZFX0tWTV9FVkVOVEZEPXkKQ09ORklHX0tWTV9NTUlPPXkKQ09ORklHX0hB
VkVfS1ZNX01TST15CkNPTkZJR19IQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUPXkKQ09ORklH
X0tWTV9WRklPPXkKQ09ORklHX0hBVkVfS1ZNX0FSQ0hfVExCX0ZMVVNIX0FMTD15CkNPTkZJR19L
Vk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1Q9eQpDT05GSUdfSEFWRV9LVk1fSVJRX0JZ
UEFTUz15CkNPTkZJR19IQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFPXkKQ09ORklHX0tWTV9B
Uk1fUE1VPXkKQ09ORklHX0FSTTY0X0NSWVBUTz15CkNPTkZJR19DUllQVE9fU0hBMjU2X0FSTTY0
PXkKQ09ORklHX0NSWVBUT19TSEE1MTJfQVJNNjQ9bQpDT05GSUdfQ1JZUFRPX1NIQTFfQVJNNjRf
Q0U9eQpDT05GSUdfQ1JZUFRPX1NIQTJfQVJNNjRfQ0U9eQpDT05GSUdfQ1JZUFRPX1NIQTUxMl9B
Uk02NF9DRT1tCkNPTkZJR19DUllQVE9fU0hBM19BUk02ND1tCkNPTkZJR19DUllQVE9fU00zX0FS
TTY0X0NFPW0KIyBDT05GSUdfQ1JZUFRPX1NNNF9BUk02NF9DRSBpcyBub3Qgc2V0CkNPTkZJR19D
UllQVE9fR0hBU0hfQVJNNjRfQ0U9eQpDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRl9BUk02NF9DRT1t
CkNPTkZJR19DUllQVE9fQUVTX0FSTTY0PXkKQ09ORklHX0NSWVBUT19BRVNfQVJNNjRfQ0U9eQpD
T05GSUdfQ1JZUFRPX0FFU19BUk02NF9DRV9DQ009eQpDT05GSUdfQ1JZUFRPX0FFU19BUk02NF9D
RV9CTEs9eQpDT05GSUdfQ1JZUFRPX0FFU19BUk02NF9ORU9OX0JMSz1tCkNPTkZJR19DUllQVE9f
Q0hBQ0hBMjBfTkVPTj1tCiMgQ09ORklHX0NSWVBUT19QT0xZMTMwNV9ORU9OIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX05IUE9MWTEzMDVfTkVPTiBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9f
QUVTX0FSTTY0X0JTPW0KCiMKIyBHZW5lcmFsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgb3B0aW9u
cwojCkNPTkZJR19DUkFTSF9DT1JFPXkKQ09ORklHX0tFWEVDX0NPUkU9eQpDT05GSUdfU0VUX0ZT
PXkKQ09ORklHX0tQUk9CRVM9eQpDT05GSUdfSlVNUF9MQUJFTD15CiMgQ09ORklHX1NUQVRJQ19L
RVlTX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX1VQUk9CRVM9eQpDT05GSUdfSEFWRV9FRkZJ
Q0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkNPTkZJR19LUkVUUFJPQkVTPXkKQ09ORklHX0hBVkVf
S1BST0JFUz15CkNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQpDT05GSUdfSEFWRV9GVU5DVElPTl9F
UlJPUl9JTkpFQ1RJT049eQpDT05GSUdfSEFWRV9OTUk9eQpDT05GSUdfSEFWRV9BUkNIX1RSQUNF
SE9PSz15CkNPTkZJR19IQVZFX0RNQV9DT05USUdVT1VTPXkKQ09ORklHX0dFTkVSSUNfU01QX0lE
TEVfVEhSRUFEPXkKQ09ORklHX0dFTkVSSUNfSURMRV9QT0xMX1NFVFVQPXkKQ09ORklHX0FSQ0hf
SEFTX0ZPUlRJRllfU09VUkNFPXkKQ09ORklHX0FSQ0hfSEFTX0tFRVBJTklUUkQ9eQpDT05GSUdf
QVJDSF9IQVNfU0VUX01FTU9SWT15CkNPTkZJR19BUkNIX0hBU19TRVRfRElSRUNUX01BUD15CkNP
TkZJR19IQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1Q9eQpDT05GSUdfSEFWRV9BU01f
TU9EVkVSU0lPTlM9eQpDT05GSUdfSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJPXkKQ09O
RklHX0hBVkVfUlNFUT15CkNPTkZJR19IQVZFX0ZVTkNUSU9OX0FSR19BQ0NFU1NfQVBJPXkKQ09O
RklHX0hBVkVfSFdfQlJFQUtQT0lOVD15CkNPTkZJR19IQVZFX1BFUkZfUkVHUz15CkNPTkZJR19I
QVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QPXkKQ09ORklHX0hBVkVfQVJDSF9KVU1QX0xBQkVMPXkK
Q09ORklHX0hBVkVfQVJDSF9KVU1QX0xBQkVMX1JFTEFUSVZFPXkKQ09ORklHX01NVV9HQVRIRVJf
VEFCTEVfRlJFRT15CkNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFPXkKQ09ORklHX0FS
Q0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHPXkKQ09ORklHX0hBVkVfQUxJR05FRF9TVFJVQ1RfUEFH
RT15CkNPTkZJR19IQVZFX0NNUFhDSEdfTE9DQUw9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0RPVUJM
RT15CkNPTkZJR19BUkNIX1dBTlRfQ09NUEFUX0lQQ19QQVJTRV9WRVJTSU9OPXkKQ09ORklHX0hB
VkVfQVJDSF9TRUNDT01QPXkKQ09ORklHX0hBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUj15CkNPTkZJ
R19TRUNDT01QPXkKQ09ORklHX1NFQ0NPTVBfRklMVEVSPXkKQ09ORklHX0hBVkVfQVJDSF9TVEFD
S0xFQUs9eQpDT05GSUdfSEFWRV9TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19TVEFDS1BST1RFQ1RP
Uj15CkNPTkZJR19TVEFDS1BST1RFQ1RPUl9TVFJPTkc9eQpDT05GSUdfSEFWRV9DT05URVhUX1RS
QUNLSU5HPXkKQ09ORklHX0hBVkVfVklSVF9DUFVfQUNDT1VOVElOR19HRU49eQpDT05GSUdfSEFW
RV9JUlFfVElNRV9BQ0NPVU5USU5HPXkKQ09ORklHX0hBVkVfTU9WRV9QTUQ9eQpDT05GSUdfSEFW
RV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVA9
eQpDT05GSUdfSEFWRV9NT0RfQVJDSF9TUEVDSUZJQz15CkNPTkZJR19NT0RVTEVTX1VTRV9FTEZf
UkVMQT15CkNPTkZJR19BUkNIX0hBU19FTEZfUkFORE9NSVpFPXkKQ09ORklHX0hBVkVfQVJDSF9N
TUFQX1JORF9CSVRTPXkKQ09ORklHX0FSQ0hfTU1BUF9STkRfQklUUz0xOApDT05GSUdfSEFWRV9B
UkNIX01NQVBfUk5EX0NPTVBBVF9CSVRTPXkKQ09ORklHX0FSQ0hfTU1BUF9STkRfQ09NUEFUX0JJ
VFM9MTEKQ09ORklHX0FSQ0hfV0FOVF9ERUZBVUxUX1RPUERPV05fTU1BUF9MQVlPVVQ9eQpDT05G
SUdfQ0xPTkVfQkFDS1dBUkRTPXkKQ09ORklHX09MRF9TSUdTVVNQRU5EMz15CkNPTkZJR19DT01Q
QVRfT0xEX1NJR0FDVElPTj15CkNPTkZJR19DT01QQVRfMzJCSVRfVElNRT15CkNPTkZJR19IQVZF
X0FSQ0hfVk1BUF9TVEFDSz15CkNPTkZJR19WTUFQX1NUQUNLPXkKQ09ORklHX0FSQ0hfSEFTX1NU
UklDVF9LRVJORUxfUldYPXkKQ09ORklHX1NUUklDVF9LRVJORUxfUldYPXkKQ09ORklHX0FSQ0hf
SEFTX1NUUklDVF9NT0RVTEVfUldYPXkKQ09ORklHX1NUUklDVF9NT0RVTEVfUldYPXkKQ09ORklH
X0hBVkVfQVJDSF9DT01QSUxFUl9IPXkKQ09ORklHX0hBVkVfQVJDSF9QUkVMMzJfUkVMT0NBVElP
TlM9eQpDT05GSUdfQVJDSF9VU0VfTUVNUkVNQVBfUFJPVD15CiMgQ09ORklHX0xPQ0tfRVZFTlRf
Q09VTlRTIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFTX1JFTFI9eQoKIwojIEdDT1YtYmFzZWQg
a2VybmVsIHByb2ZpbGluZwojCiMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKQ09ORklH
X0FSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTEw9eQojIGVuZCBvZiBHQ09WLWJhc2VkIGtlcm5lbCBw
cm9maWxpbmcKCkNPTkZJR19IQVZFX0dDQ19QTFVHSU5TPXkKIyBlbmQgb2YgR2VuZXJhbCBhcmNo
aXRlY3R1cmUtZGVwZW5kZW50IG9wdGlvbnMKCkNPTkZJR19SVF9NVVRFWEVTPXkKQ09ORklHX0JB
U0VfU01BTEw9MApDT05GSUdfTU9EVUxFUz15CiMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlz
IG5vdCBzZXQKQ09ORklHX01PRFVMRV9VTkxPQUQ9eQojIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5M
T0FEIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAojIENPTkZJR19N
T0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfU0lHIGlzIG5v
dCBzZXQKIyBDT05GSUdfTU9EVUxFX0NPTVBSRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9EVUxF
X0FMTE9XX01JU1NJTkdfTkFNRVNQQUNFX0lNUE9SVFMgaXMgbm90IHNldAojIENPTkZJR19VTlVT
RURfU1lNQk9MUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSSU1fVU5VU0VEX0tTWU1TIGlzIG5vdCBz
ZXQKQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVA9eQpDT05GSUdfQkxPQ0s9eQpDT05GSUdfQkxL
X1NDU0lfUkVRVUVTVD15CkNPTkZJR19CTEtfREVWX0JTRz15CkNPTkZJR19CTEtfREVWX0JTR0xJ
Qj15CkNPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CkNPTkZJR19CTEtfREVWX0lOVEVHUklUWV9U
MTA9eQojIENPTkZJR19CTEtfREVWX1pPTkVEIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9U
SFJPVFRMSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0NNRExJTkVfUEFSU0VSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQkxLX1dCVCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19DR1JPVVBfSU9MQVRF
TkNZIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QgaXMgbm90IHNldApDT05G
SUdfQkxLX0RFQlVHX0ZTPXkKIyBDT05GSUdfQkxLX1NFRF9PUEFMIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkxLX0lOTElORV9FTkNSWVBUSU9OIGlzIG5vdCBzZXQKCiMKIyBQYXJ0aXRpb24gVHlwZXMK
IwojIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldApDT05GSUdfTVNET1NfUEFS
VElUSU9OPXkKQ09ORklHX0VGSV9QQVJUSVRJT049eQojIGVuZCBvZiBQYXJ0aXRpb24gVHlwZXMK
CkNPTkZJR19CTE9DS19DT01QQVQ9eQpDT05GSUdfQkxLX01RX1BDST15CkNPTkZJR19CTEtfTVFf
VklSVElPPXkKQ09ORklHX0JMS19QTT15CgojCiMgSU8gU2NoZWR1bGVycwojCkNPTkZJR19NUV9J
T1NDSEVEX0RFQURMSU5FPXkKQ09ORklHX01RX0lPU0NIRURfS1lCRVI9eQojIENPTkZJR19JT1ND
SEVEX0JGUSBpcyBub3Qgc2V0CiMgZW5kIG9mIElPIFNjaGVkdWxlcnMKCkNPTkZJR19QUkVFTVBU
X05PVElGSUVSUz15CkNPTkZJR19BU04xPXkKQ09ORklHX1VOSU5MSU5FX1NQSU5fVU5MT0NLPXkK
Q09ORklHX0FSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNVz15CkNPTkZJR19NVVRFWF9TUElOX09OX09X
TkVSPXkKQ09ORklHX1JXU0VNX1NQSU5fT05fT1dORVI9eQpDT05GSUdfTE9DS19TUElOX09OX09X
TkVSPXkKQ09ORklHX0FSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1M9eQpDT05GSUdfUVVFVUVEX1NQ
SU5MT0NLUz15CkNPTkZJR19BUkNIX1VTRV9RVUVVRURfUldMT0NLUz15CkNPTkZJR19RVUVVRURf
UldMT0NLUz15CkNPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRT15
CkNPTkZJR19BUkNIX0hBU19TWVNDQUxMX1dSQVBQRVI9eQpDT05GSUdfRlJFRVpFUj15CgojCiMg
RXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKIwpDT05GSUdfQklORk1UX0VMRj15CkNPTkZJR19DT01Q
QVRfQklORk1UX0VMRj15CkNPTkZJR19BUkNIX0JJTkZNVF9FTEZfU1RBVEU9eQpDT05GSUdfQVJD
SF9IQVZFX0VMRl9QUk9UPXkKQ09ORklHX0FSQ0hfVVNFX0dOVV9QUk9QRVJUWT15CkNPTkZJR19F
TEZDT1JFPXkKIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNl
dApDT05GSUdfQklORk1UX1NDUklQVD15CiMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQK
Q09ORklHX0NPUkVEVU1QPXkKIyBlbmQgb2YgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKCiMKIyBN
ZW1vcnkgTWFuYWdlbWVudCBvcHRpb25zCiMKQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpD
T05GSUdfU1BBUlNFTUVNX01BTlVBTD15CkNPTkZJR19TUEFSU0VNRU09eQpDT05GSUdfTkVFRF9N
VUxUSVBMRV9OT0RFUz15CkNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CkNPTkZJR19TUEFSU0VN
RU1fVk1FTU1BUF9FTkFCTEU9eQpDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVA9eQpDT05GSUdfSEFW
RV9GQVNUX0dVUD15CkNPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0s9eQpDT05GSUdfTUVNT1JZX0lT
T0xBVElPTj15CiMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKQ09ORklHX1NQTElU
X1BUTE9DS19DUFVTPTQKQ09ORklHX01FTU9SWV9CQUxMT09OPXkKQ09ORklHX0JBTExPT05fQ09N
UEFDVElPTj15CkNPTkZJR19DT01QQUNUSU9OPXkKQ09ORklHX1BBR0VfUkVQT1JUSU5HPXkKQ09O
RklHX01JR1JBVElPTj15CkNPTkZJR19DT05USUdfQUxMT0M9eQpDT05GSUdfUEhZU19BRERSX1Rf
NjRCSVQ9eQpDT05GSUdfQk9VTkNFPXkKQ09ORklHX01NVV9OT1RJRklFUj15CkNPTkZJR19LU009
eQpDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKQ09ORklHX0FSQ0hfU1VQUE9SVFNf
TUVNT1JZX0ZBSUxVUkU9eQpDT05GSUdfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19IV1BPSVNP
Tl9JTkpFQ1QgaXMgbm90IHNldApDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9eQpDT05GSUdf
VFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTPXkKIyBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBB
R0VfTUFEVklTRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NMRUFOQ0FDSEUgaXMgbm90IHNldAojIENP
TkZJR19GUk9OVFNXQVAgaXMgbm90IHNldApDT05GSUdfQ01BPXkKIyBDT05GSUdfQ01BX0RFQlVH
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ01BX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdfQ01BX0FS
RUFTPTE5CiMgQ09ORklHX1pQT09MIGlzIG5vdCBzZXQKIyBDT05GSUdfWkJVRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1pTTUFMTE9DIGlzIG5vdCBzZXQKQ09ORklHX0dFTkVSSUNfRUFSTFlfSU9SRU1B
UD15CiMgQ09ORklHX0RFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVQgaXMgbm90IHNldAojIENPTkZJ
R19JRExFX1BBR0VfVFJBQ0tJTkcgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfUFRFX0RFVk1B
UD15CkNPTkZJR19GUkFNRV9WRUNUT1I9eQpDT05GSUdfQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdT
PXkKIyBDT05GSUdfUEVSQ1BVX1NUQVRTIGlzIG5vdCBzZXQKIyBDT05GSUdfR1VQX0JFTkNITUFS
SyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFQURfT05MWV9USFBfRk9SX0ZTIGlzIG5vdCBzZXQKQ09O
RklHX0FSQ0hfSEFTX1BURV9TUEVDSUFMPXkKIyBlbmQgb2YgTWVtb3J5IE1hbmFnZW1lbnQgb3B0
aW9ucwoKQ09ORklHX05FVD15CkNPTkZJR19ORVRfSU5HUkVTUz15CkNPTkZJR19ORVRfRUdSRVNT
PXkKCiMKIyBOZXR3b3JraW5nIG9wdGlvbnMKIwpDT05GSUdfUEFDS0VUPXkKIyBDT05GSUdfUEFD
S0VUX0RJQUcgaXMgbm90IHNldApDT05GSUdfVU5JWD15CkNPTkZJR19VTklYX1NDTT15CiMgQ09O
RklHX1VOSVhfRElBRyBpcyBub3Qgc2V0CiMgQ09ORklHX1RMUyBpcyBub3Qgc2V0CiMgQ09ORklH
X1hGUk1fVVNFUiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldApDT05GSUdf
SU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQojIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIg
aXMgbm90IHNldApDT05GSUdfSVBfUE5QPXkKQ09ORklHX0lQX1BOUF9ESENQPXkKQ09ORklHX0lQ
X1BOUF9CT09UUD15CiMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVU
X0lQSVAgaXMgbm90IHNldAojIENPTkZJR19ORVRfSVBHUkVfREVNVVggaXMgbm90IHNldApDT05G
SUdfTkVUX0lQX1RVTk5FTD1tCiMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0lQVlRJIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVUX0ZPVSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAojIENPTkZJR19JTkVUX0VTUCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKQ09ORklHX0lORVRfVFVOTkVM
PW0KQ09ORklHX0lORVRfRElBRz15CkNPTkZJR19JTkVUX1RDUF9ESUFHPXkKIyBDT05GSUdfSU5F
VF9VRFBfRElBRyBpcyBub3Qgc2V0CiMgQ09ORklHX0lORVRfUkFXX0RJQUcgaXMgbm90IHNldAoj
IENPTkZJR19JTkVUX0RJQUdfREVTVFJPWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUF9DT05HX0FE
VkFOQ0VEIGlzIG5vdCBzZXQKQ09ORklHX1RDUF9DT05HX0NVQklDPXkKQ09ORklHX0RFRkFVTFRf
VENQX0NPTkc9ImN1YmljIgojIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKQ09ORklHX0lQ
VjY9bQojIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9P
UFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKIyBD
T05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9JTEEgaXMgbm90
IHNldAojIENPTkZJR19JUFY2X1ZUSSBpcyBub3Qgc2V0CkNPTkZJR19JUFY2X1NJVD1tCiMgQ09O
RklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CkNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkK
IyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAojIENPTkZJR19JUFY2X01VTFRJUExFX1RB
QkxFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKIyBDT05GSUdf
SVBWNl9TRUc2X0xXVFVOTkVMIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBWNl9TRUc2X0hNQUMgaXMg
bm90IHNldAojIENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCBpcyBub3Qgc2V0CiMgQ09ORklHX05F
VExBQkVMIGlzIG5vdCBzZXQKIyBDT05GSUdfTVBUQ1AgaXMgbm90IHNldAojIENPTkZJR19ORVRX
T1JLX1NFQ01BUksgaXMgbm90IHNldApDT05GSUdfTkVUX1BUUF9DTEFTU0lGWT15CiMgQ09ORklH
X05FVFdPUktfUEhZX1RJTUVTVEFNUElORyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVI9eQpD
T05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBu
b3Qgc2V0CgojCiMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgojCkNPTkZJR19ORVRGSUxU
RVJfSU5HUkVTUz15CiMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0FDQ1QgaXMgbm90IHNldAoj
IENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJ
TFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX09T
RiBpcyBub3Qgc2V0CkNPTkZJR19ORl9DT05OVFJBQ0s9bQpDT05GSUdfTkZfTE9HX0NPTU1PTj1t
CiMgQ09ORklHX05GX0xPR19ORVRERVYgaXMgbm90IHNldAojIENPTkZJR19ORl9DT05OVFJBQ0tf
TUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUyBpcyBub3Qgc2V0CkNP
TkZJR19ORl9DT05OVFJBQ0tfUFJPQ0ZTPXkKQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQoj
IENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVCBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0NPTk5U
UkFDS19USU1FU1RBTVAgaXMgbm90IHNldAojIENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTIGlz
IG5vdCBzZXQKQ09ORklHX05GX0NUX1BST1RPX0RDQ1A9eQpDT05GSUdfTkZfQ1RfUFJPVE9fU0NU
UD15CkNPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPXkKIyBDT05GSUdfTkZfQ09OTlRSQUNLX0FN
QU5EQSBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0NPTk5UUkFDS19GVFAgaXMgbm90IHNldAojIENP
TkZJR19ORl9DT05OVFJBQ0tfSDMyMyBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0NPTk5UUkFDS19J
UkMgaXMgbm90IHNldAojIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0
CiMgQ09ORklHX05GX0NPTk5UUkFDS19TTk1QIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZfQ09OTlRS
QUNLX1BQVFAgaXMgbm90IHNldAojIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0
CiMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAojIENPTkZJR19ORl9DT05OVFJB
Q0tfVEZUUCBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0NUX05FVExJTksgaXMgbm90IHNldApDT05G
SUdfTkZfTkFUPW0KQ09ORklHX05GX05BVF9NQVNRVUVSQURFPXkKIyBDT05GSUdfTkZfVEFCTEVT
IGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KCiMKIyBYdGFibGVzIGNvbWJp
bmVkIG1vZHVsZXMKIwojIENPTkZJR19ORVRGSUxURVJfWFRfTUFSSyBpcyBub3Qgc2V0CiMgQ09O
RklHX05FVEZJTFRFUl9YVF9DT05OTUFSSyBpcyBub3Qgc2V0CgojCiMgWHRhYmxlcyB0YXJnZXRz
CiMKIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVCBpcyBub3Qgc2V0CkNPTkZJR19O
RVRGSUxURVJfWFRfVEFSR0VUX0NIRUNLU1VNPW0KIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdF
VF9DTEFTU0lGWSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1B
UksgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNl
dAojIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVU
RklMVEVSX1hUX1RBUkdFVF9ITUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9U
QVJHRVRfSURMRVRJTUVSIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9M
RUQgaXMgbm90IHNldApDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bQojIENPTkZJR19O
RVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldApDT05GSUdfTkVURklMVEVSX1hUX05B
VD1tCiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRF
Ul9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJH
RVRfUkFURUVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkVESVJF
Q1QgaXMgbm90IHNldApDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVNRVUVSQURFPW0KIyBD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9URUUgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxU
RVJfWFRfVEFSR0VUX1RQUk9YWSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJH
RVRfVENQTVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRT
VFJJUCBpcyBub3Qgc2V0CgojCiMgWHRhYmxlcyBtYXRjaGVzCiMKQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9BRERSVFlQRT1tCiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEYgaXMgbm90
IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0dST1VQIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxU
RVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRD
SF9DT05OQllURVMgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxB
QkVMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSyBpcyBub3Qgc2V0CkNP
TkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIyBDT05GSUdfTkVURklMVEVSX1hU
X01BVENIX0NQVSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RFVkdST1VQIGlzIG5vdCBzZXQK
IyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAojIENPTkZJR19ORVRG
SUxURVJfWFRfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X0VTUCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMg
bm90IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX0lQQ09NUCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9J
UFJBTkdFIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0wyVFAgaXMgbm90
IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX01BQyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJL
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ORkFDQ1QgaXMgbm90IHNldAojIENPTkZJ
R19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hU
X01BVENIX09XTkVSIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZ
UEUgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNl
dAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NU
UCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQgaXMgbm90IHNl
dAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAojIENPTkZJR19O
RVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9U
Q1BNU1MgaXMgbm90IHNldAojIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAojIGVuZCBvZiBD
b3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCgojIENPTkZJR19JUF9TRVQgaXMgbm90IHNldAoj
IENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CgojCiMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9u
CiMKQ09ORklHX05GX0RFRlJBR19JUFY0PW0KIyBDT05GSUdfTkZfU09DS0VUX0lQVjQgaXMgbm90
IHNldAojIENPTkZJR19ORl9UUFJPWFlfSVBWNCBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0RVUF9J
UFY0IGlzIG5vdCBzZXQKIyBDT05GSUdfTkZfTE9HX0FSUCBpcyBub3Qgc2V0CkNPTkZJR19ORl9M
T0dfSVBWND1tCkNPTkZJR19ORl9SRUpFQ1RfSVBWND1tCkNPTkZJR19JUF9ORl9JUFRBQkxFUz1t
CiMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBfTkZfTUFUQ0hf
RUNOIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBfTkZfTUFUQ0hfUlBGSUxURVIgaXMgbm90IHNldAoj
IENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldApDT05GSUdfSVBfTkZfRklMVEVSPW0K
Q09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQojIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJP
WFkgaXMgbm90IHNldApDT05GSUdfSVBfTkZfTkFUPW0KQ09ORklHX0lQX05GX1RBUkdFVF9NQVNR
VUVSQURFPW0KIyBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUCBpcyBub3Qgc2V0CiMgQ09ORklH
X0lQX05GX1RBUkdFVF9SRURJUkVDVCBpcyBub3Qgc2V0CkNPTkZJR19JUF9ORl9NQU5HTEU9bQoj
IENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBfTkZf
VEFSR0VUX0VDTiBpcyBub3Qgc2V0CiMgQ09ORklHX0lQX05GX1RBUkdFVF9UVEwgaXMgbm90IHNl
dAojIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAojIENPTkZJR19JUF9ORl9TRUNVUklUWSBp
cyBub3Qgc2V0CiMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiMgZW5kIG9mIElQ
OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgoKIwojIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0
aW9uCiMKIyBDT05GSUdfTkZfU09DS0VUX0lQVjYgaXMgbm90IHNldAojIENPTkZJR19ORl9UUFJP
WFlfSVBWNiBpcyBub3Qgc2V0CiMgQ09ORklHX05GX0RVUF9JUFY2IGlzIG5vdCBzZXQKQ09ORklH
X05GX1JFSkVDVF9JUFY2PW0KQ09ORklHX05GX0xPR19JUFY2PW0KQ09ORklHX0lQNl9ORl9JUFRB
QkxFUz1tCiMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lQNl9O
Rl9NQVRDSF9FVUk2NCBpcyBub3Qgc2V0CiMgQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVA2X05GX01BVENIX09QVFMgaXMgbm90IHNldAojIENPTkZJR19JUDZf
TkZfTUFUQ0hfSEwgaXMgbm90IHNldAojIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lQ
Nl9ORl9NQVRDSF9SUEZJTFRFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lQNl9ORl9NQVRDSF9SVCBp
cyBub3Qgc2V0CiMgQ09ORklHX0lQNl9ORl9NQVRDSF9TUkggaXMgbm90IHNldAojIENPTkZJR19J
UDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKQ09ORklHX0lQNl9ORl9GSUxURVI9bQpDT05GSUdf
SVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQojIENPTkZJR19JUDZfTkZfVEFSR0VUX1NZTlBST1hZIGlz
IG5vdCBzZXQKQ09ORklHX0lQNl9ORl9NQU5HTEU9bQojIENPTkZJR19JUDZfTkZfUkFXIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKQ09ORklHX0lQNl9ORl9O
QVQ9bQpDT05GSUdfSVA2X05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIyBDT05GSUdfSVA2X05GX1RB
UkdFVF9OUFQgaXMgbm90IHNldAojIGVuZCBvZiBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlv
bgoKQ09ORklHX05GX0RFRlJBR19JUFY2PW0KIyBDT05GSUdfTkZfQ09OTlRSQUNLX0JSSURHRSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CiMgQ09ORklH
X0JQRklMVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiMgQ09ORklH
X0lQX1NDVFAgaXMgbm90IHNldAojIENPTkZJR19SRFMgaXMgbm90IHNldAojIENPTkZJR19USVBD
IGlzIG5vdCBzZXQKIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIyBDT05GSUdfTDJUUCBpcyBub3Qg
c2V0CkNPTkZJR19TVFA9bQpDT05GSUdfR0FSUD1tCkNPTkZJR19NUlA9bQpDT05GSUdfQlJJREdF
PW0KQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRF
UklORz15CiMgQ09ORklHX0JSSURHRV9NUlAgaXMgbm90IHNldApDT05GSUdfSEFWRV9ORVRfRFNB
PXkKQ09ORklHX05FVF9EU0E9bQojIENPTkZJR19ORVRfRFNBX1RBR19BUjkzMzEgaXMgbm90IHNl
dAojIENPTkZJR19ORVRfRFNBX1RBR19CUkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9U
QUdfQlJDTV9QUkVQRU5EIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9UQUdfR1NXSVAgaXMg
bm90IHNldAojIENPTkZJR19ORVRfRFNBX1RBR19EU0EgaXMgbm90IHNldAojIENPTkZJR19ORVRf
RFNBX1RBR19FRFNBIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9UQUdfTVRLIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkVUX0RTQV9UQUdfS1NaIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9U
QUdfUlRMNF9BIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9UQUdfT0NFTE9UIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkVUX0RTQV9UQUdfUUNBIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9U
QUdfTEFOOTMwMyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9EU0FfVEFHX1NKQTExMDUgaXMgbm90
IHNldAojIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSIGlzIG5vdCBzZXQKQ09ORklHX1ZMQU5f
ODAyMVE9bQpDT05GSUdfVkxBTl84MDIxUV9HVlJQPXkKQ09ORklHX1ZMQU5fODAyMVFfTVZSUD15
CiMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CkNPTkZJR19MTEM9bQojIENPTkZJR19MTEMyIGlz
IG5vdCBzZXQKIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAojIENPTkZJR19YMjUgaXMgbm90IHNl
dAojIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIyBD
T05GSUdfNkxPV1BBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldApD
T05GSUdfTkVUX1NDSEVEPXkKCiMKIyBRdWV1ZWluZy9TY2hlZHVsaW5nCiMKIyBDT05GSUdfTkVU
X1NDSF9DQlEgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CiMgQ09O
RklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9S
RUQgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX1NGQiBpcyBub3Qgc2V0CiMgQ09ORklHX05F
VF9TQ0hfU0ZRIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9URVFMIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVUX1NDSF9UQkYgaXMgbm90IHNldApDT05GSUdfTkVUX1NDSF9DQlM9bQpDT05GSUdf
TkVUX1NDSF9FVEY9bQpDT05GSUdfTkVUX1NDSF9UQVBSSU89bQojIENPTkZJR19ORVRfU0NIX0dS
RUQgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX0RTTUFSSyBpcyBub3Qgc2V0CiMgQ09ORklH
X05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX0RSUiBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfU0NIX01RUFJJTz1tCiMgQ09ORklHX05FVF9TQ0hfU0tCUFJJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9TQ0hfQ0hPS0UgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX1FG
USBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfQ09ERUwgaXMgbm90IHNldAojIENPTkZJR19O
RVRfU0NIX0ZRX0NPREVMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9DQUtFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkVUX1NDSF9GUSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9TQ0hfSEhGIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkVUX1NDSF9QSUUgaXMgbm90IHNldApDT05GSUdfTkVUX1NDSF9J
TkdSRVNTPW0KIyBDT05GSUdfTkVUX1NDSF9QTFVHIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ND
SF9FVFMgaXMgbm90IHNldAojIENPTkZJR19ORVRfU0NIX0RFRkFVTFQgaXMgbm90IHNldAoKIwoj
IENsYXNzaWZpY2F0aW9uCiMKQ09ORklHX05FVF9DTFM9eQpDT05GSUdfTkVUX0NMU19CQVNJQz1t
CiMgQ09ORklHX05FVF9DTFNfVENJTkRFWCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9DTFNfUk9V
VEU0IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NMU19GVyBpcyBub3Qgc2V0CiMgQ09ORklHX05F
VF9DTFNfVTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVUX0NMU19SU1ZQNiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBu
b3Qgc2V0CiMgQ09ORklHX05FVF9DTFNfQ0dST1VQIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0NM
U19CUEYgaXMgbm90IHNldApDT05GSUdfTkVUX0NMU19GTE9XRVI9bQojIENPTkZJR19ORVRfQ0xT
X01BVENIQUxMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfQ0xTX0FDVD15CiMgQ09ORklHX05FVF9BQ1RfUE9MSUNFIGlzIG5vdCBzZXQKQ09ORklH
X05FVF9BQ1RfR0FDVD1tCiMgQ09ORklHX0dBQ1RfUFJPQiBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
QUNUX01JUlJFRD1tCiMgQ09ORklHX05FVF9BQ1RfU0FNUExFIGlzIG5vdCBzZXQKIyBDT05GSUdf
TkVUX0FDVF9JUFQgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX05BVCBpcyBub3Qgc2V0CiMg
Q09ORklHX05FVF9BQ1RfUEVESVQgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX1NJTVAgaXMg
bm90IHNldAojIENPTkZJR19ORVRfQUNUX1NLQkVESVQgaXMgbm90IHNldAojIENPTkZJR19ORVRf
QUNUX0NTVU0gaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX01QTFMgaXMgbm90IHNldAojIENP
TkZJR19ORVRfQUNUX1ZMQU4gaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX0JQRiBpcyBub3Qg
c2V0CiMgQ09ORklHX05FVF9BQ1RfU0tCTU9EIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0FDVF9J
RkUgaXMgbm90IHNldAojIENPTkZJR19ORVRfQUNUX1RVTk5FTF9LRVkgaXMgbm90IHNldAojIENP
TkZJR19ORVRfQUNUX0dBVEUgaXMgbm90IHNldAojIENPTkZJR19ORVRfVENfU0tCX0VYVCBpcyBu
b3Qgc2V0CkNPTkZJR19ORVRfU0NIX0ZJRk89eQojIENPTkZJR19EQ0IgaXMgbm90IHNldApDT05G
SUdfRE5TX1JFU09MVkVSPXkKIyBDT05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0CiMgQ09ORklH
X09QRU5WU1dJVENIIGlzIG5vdCBzZXQKIyBDT05GSUdfVlNPQ0tFVFMgaXMgbm90IHNldAojIENP
TkZJR19ORVRMSU5LX0RJQUcgaXMgbm90IHNldAojIENPTkZJR19NUExTIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkVUX05TSCBpcyBub3Qgc2V0CiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0CkNPTkZJR19O
RVRfU1dJVENIREVWPXkKIyBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVYgaXMgbm90IHNldApDT05G
SUdfUVJUUj1tCkNPTkZJR19RUlRSX1NNRD1tCkNPTkZJR19RUlRSX1RVTj1tCiMgQ09ORklHX05F
VF9OQ1NJIGlzIG5vdCBzZXQKQ09ORklHX1JQUz15CkNPTkZJR19SRlNfQUNDRUw9eQpDT05GSUdf
WFBTPXkKIyBDT05GSUdfQ0dST1VQX05FVF9QUklPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0dST1VQ
X05FVF9DTEFTU0lEIGlzIG5vdCBzZXQKQ09ORklHX05FVF9SWF9CVVNZX1BPTEw9eQpDT05GSUdf
QlFMPXkKQ09ORklHX0JQRl9KSVQ9eQpDT05GSUdfTkVUX0ZMT1dfTElNSVQ9eQoKIwojIE5ldHdv
cmsgdGVzdGluZwojCiMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAojIENPTkZJR19ORVRf
RFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKIyBlbmQgb2YgTmV0d29yayB0ZXN0aW5nCiMgZW5kIG9m
IE5ldHdvcmtpbmcgb3B0aW9ucwoKIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldApDT05GSUdf
Q0FOPW0KQ09ORklHX0NBTl9SQVc9bQpDT05GSUdfQ0FOX0JDTT1tCkNPTkZJR19DQU5fR1c9bQoj
IENPTkZJR19DQU5fSjE5MzkgaXMgbm90IHNldAojIENPTkZJR19DQU5fSVNPVFAgaXMgbm90IHNl
dAoKIwojIENBTiBEZXZpY2UgRHJpdmVycwojCiMgQ09ORklHX0NBTl9WQ0FOIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0FOX1ZYQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX1NMQ0FOIGlzIG5vdCBz
ZXQKQ09ORklHX0NBTl9ERVY9bQpDT05GSUdfQ0FOX0NBTENfQklUVElNSU5HPXkKQ09ORklHX0NB
Tl9GTEVYQ0FOPW0KIyBDT05GSUdfQ0FOX0dSQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX0tW
QVNFUl9QQ0lFRkQgaXMgbm90IHNldAojIENPTkZJR19DQU5fWElMSU5YQ0FOIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0FOX0NfQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX0NDNzcwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ0FOX0lGSV9DQU5GRCBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9NX0NBTiBp
cyBub3Qgc2V0CiMgQ09ORklHX0NBTl9QRUFLX1BDSUVGRCBpcyBub3Qgc2V0CkNPTkZJR19DQU5f
UkNBUj1tCkNPTkZJR19DQU5fUkNBUl9DQU5GRD1tCiMgQ09ORklHX0NBTl9TSkExMDAwIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FOX1NPRlRJTkcgaXMgbm90IHNldAoKIwojIENBTiBTUEkgaW50ZXJm
YWNlcwojCiMgQ09ORklHX0NBTl9ISTMxMVggaXMgbm90IHNldAojIENPTkZJR19DQU5fTUNQMjUx
WCBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9NQ1AyNTFYRkQgaXMgbm90IHNldAojIGVuZCBvZiBD
QU4gU1BJIGludGVyZmFjZXMKCiMKIyBDQU4gVVNCIGludGVyZmFjZXMKIwojIENPTkZJR19DQU5f
OERFVl9VU0IgaXMgbm90IHNldAojIENPTkZJR19DQU5fRU1TX1VTQiBpcyBub3Qgc2V0CiMgQ09O
RklHX0NBTl9FU0RfVVNCMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9HU19VU0IgaXMgbm90IHNl
dAojIENPTkZJR19DQU5fS1ZBU0VSX1VTQiBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9NQ0JBX1VT
QiBpcyBub3Qgc2V0CiMgQ09ORklHX0NBTl9QRUFLX1VTQiBpcyBub3Qgc2V0CiMgQ09ORklHX0NB
Tl9VQ0FOIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ0FOIFVTQiBpbnRlcmZhY2VzCgojIENPTkZJR19D
QU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CiMgZW5kIG9mIENBTiBEZXZpY2UgRHJpdmVycwoK
Q09ORklHX0JUPW0KQ09ORklHX0JUX0JSRURSPXkKIyBDT05GSUdfQlRfUkZDT01NIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQlRfQk5FUCBpcyBub3Qgc2V0CkNPTkZJR19CVF9ISURQPW0KIyBDT05GSUdf
QlRfSFMgaXMgbm90IHNldAojIENPTkZJR19CVF9MRSBpcyBub3Qgc2V0CkNPTkZJR19CVF9MRURT
PXkKIyBDT05GSUdfQlRfTVNGVEVYVCBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX0RFQlVHRlMgaXMg
bm90IHNldAojIENPTkZJR19CVF9TRUxGVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX0ZFQVRV
UkVfREVCVUcgaXMgbm90IHNldAoKIwojIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwojCkNPTkZJ
R19CVF9JTlRFTD1tCkNPTkZJR19CVF9CQ009bQpDT05GSUdfQlRfUlRMPW0KQ09ORklHX0JUX1FD
QT1tCkNPTkZJR19CVF9IQ0lCVFVTQj1tCiMgQ09ORklHX0JUX0hDSUJUVVNCX0FVVE9TVVNQRU5E
IGlzIG5vdCBzZXQKQ09ORklHX0JUX0hDSUJUVVNCX0JDTT15CiMgQ09ORklHX0JUX0hDSUJUVVNC
X01USyBpcyBub3Qgc2V0CkNPTkZJR19CVF9IQ0lCVFVTQl9SVEw9eQojIENPTkZJR19CVF9IQ0lC
VFNESU8gaXMgbm90IHNldApDT05GSUdfQlRfSENJVUFSVD1tCkNPTkZJR19CVF9IQ0lVQVJUX1NF
UkRFVj15CkNPTkZJR19CVF9IQ0lVQVJUX0g0PXkKIyBDT05GSUdfQlRfSENJVUFSVF9OT0tJQSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JUX0hDSVVBUlRfQkNTUCBpcyBub3Qgc2V0CiMgQ09ORklHX0JU
X0hDSVVBUlRfQVRIM0sgaXMgbm90IHNldApDT05GSUdfQlRfSENJVUFSVF9MTD15CiMgQ09ORklH
X0JUX0hDSVVBUlRfM1dJUkUgaXMgbm90IHNldAojIENPTkZJR19CVF9IQ0lVQVJUX0lOVEVMIGlz
IG5vdCBzZXQKQ09ORklHX0JUX0hDSVVBUlRfQkNNPXkKIyBDT05GSUdfQlRfSENJVUFSVF9SVEwg
aXMgbm90IHNldApDT05GSUdfQlRfSENJVUFSVF9RQ0E9eQojIENPTkZJR19CVF9IQ0lVQVJUX0FH
NlhYIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfSENJVUFSVF9NUlZMIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CiMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qg
c2V0CiMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRfSENJVkhDSSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAojIENPTkZJR19CVF9BVEgzSyBp
cyBub3Qgc2V0CiMgQ09ORklHX0JUX01US1NESU8gaXMgbm90IHNldAojIENPTkZJR19CVF9NVEtV
QVJUIGlzIG5vdCBzZXQKIyBlbmQgb2YgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCgojIENPTkZJ
R19BRl9SWFJQQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FGX0tDTSBpcyBub3Qgc2V0CkNPTkZJR19X
SVJFTEVTUz15CkNPTkZJR19DRkc4MDIxMT1tCiMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMg
bm90IHNldAojIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldApD
T05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREI9eQpDT05GSUdfQ0ZHODAyMTFfVVNF
X0tFUk5FTF9SRUdEQl9LRVlTPXkKQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQojIENPTkZJ
R19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9S
VD15CiMgQ09ORklHX0NGRzgwMjExX1dFWFQgaXMgbm90IHNldApDT05GSUdfTUFDODAyMTE9bQpD
T05GSUdfTUFDODAyMTFfSEFTX1JDPXkKQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKQ09O
RklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQpDT05GSUdfTUFDODAyMTFfUkNfREVG
QVVMVD0ibWluc3RyZWxfaHQiCiMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldApDT05G
SUdfTUFDODAyMTFfTEVEUz15CiMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAoj
IENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkcgaXMgbm90IHNldAojIENPTkZJR19NQUM4
MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExX1NUQV9IQVNIX01BWF9T
SVpFPTAKIyBDT05GSUdfV0lNQVggaXMgbm90IHNldApDT05GSUdfUkZLSUxMPW0KQ09ORklHX1JG
S0lMTF9MRURTPXkKQ09ORklHX1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JGS0lMTF9HUElPIGlz
IG5vdCBzZXQKQ09ORklHX05FVF85UD15CkNPTkZJR19ORVRfOVBfVklSVElPPXkKIyBDT05GSUdf
TkVUXzlQX1hFTiBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF85UF9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX0NBSUYgaXMgbm90IHNldAojIENPTkZJR19DRVBIX0xJQiBpcyBub3Qgc2V0CkNPTkZJ
R19ORkM9bQojIENPTkZJR19ORkNfRElHSVRBTCBpcyBub3Qgc2V0CkNPTkZJR19ORkNfTkNJPW0K
IyBDT05GSUdfTkZDX05DSV9TUEkgaXMgbm90IHNldAojIENPTkZJR19ORkNfTkNJX1VBUlQgaXMg
bm90IHNldAojIENPTkZJR19ORkNfSENJIGlzIG5vdCBzZXQKCiMKIyBOZWFyIEZpZWxkIENvbW11
bmljYXRpb24gKE5GQykgZGV2aWNlcwojCiMgQ09ORklHX05GQ19GRFAgaXMgbm90IHNldAojIENP
TkZJR19ORkNfUE41MzNfVVNCIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX1BONTMzX0kyQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX05GQ19QTjUzMl9VQVJUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX01S
VkxfVVNCIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZDX1NUX05DSV9JMkMgaXMgbm90IHNldAojIENP
TkZJR19ORkNfU1RfTkNJX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX05GQ19OWFBfTkNJIGlzIG5v
dCBzZXQKQ09ORklHX05GQ19TM0ZXUk41PW0KQ09ORklHX05GQ19TM0ZXUk41X0kyQz1tCiMgZW5k
IG9mIE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzCgojIENPTkZJR19QU0FN
UExFIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0lGRSBpcyBub3Qgc2V0CiMgQ09ORklHX0xXVFVO
TkVMIGlzIG5vdCBzZXQKQ09ORklHX0RTVF9DQUNIRT15CkNPTkZJR19HUk9fQ0VMTFM9eQpDT05G
SUdfTkVUX0RFVkxJTks9eQpDT05GSUdfUEFHRV9QT09MPXkKQ09ORklHX0ZBSUxPVkVSPXkKQ09O
RklHX0VUSFRPT0xfTkVUTElOSz15CkNPTkZJR19IQVZFX0VCUEZfSklUPXkKCiMKIyBEZXZpY2Ug
RHJpdmVycwojCkNPTkZJR19BUk1fQU1CQT15CkNPTkZJR19URUdSQV9BSEI9eQpDT05GSUdfSEFW
RV9QQ0k9eQpDT05GSUdfUENJPXkKQ09ORklHX1BDSV9ET01BSU5TPXkKQ09ORklHX1BDSV9ET01B
SU5TX0dFTkVSSUM9eQpDT05GSUdfUENJX1NZU0NBTEw9eQpDT05GSUdfUENJRVBPUlRCVVM9eQoj
IENPTkZJR19IT1RQTFVHX1BDSV9QQ0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFFUiBpcyBu
b3Qgc2V0CkNPTkZJR19QQ0lFQVNQTT15CkNPTkZJR19QQ0lFQVNQTV9ERUZBVUxUPXkKIyBDT05G
SUdfUENJRUFTUE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJf
U1VQRVJTQVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90
IHNldApDT05GSUdfUENJRV9QTUU9eQojIENPTkZJR19QQ0lFX1BUTSBpcyBub3Qgc2V0CiMgQ09O
RklHX1BDSUVfQlcgaXMgbm90IHNldApDT05GSUdfUENJX01TST15CkNPTkZJR19QQ0lfTVNJX0lS
UV9ET01BSU49eQpDT05GSUdfUENJX01TSV9BUkNIX0ZBTExCQUNLUz15CkNPTkZJR19QQ0lfUVVJ
UktTPXkKIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJX1JFQUxMT0Nf
RU5BQkxFX0FVVE8gaXMgbm90IHNldAojIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiMgQ09O
RklHX1BDSV9QRl9TVFVCIGlzIG5vdCBzZXQKQ09ORklHX1BDSV9BVFM9eQpDT05GSUdfUENJX0VD
QU09eQpDT05GSUdfUENJX0JSSURHRV9FTVVMPXkKQ09ORklHX1BDSV9JT1Y9eQojIENPTkZJR19Q
Q0lfUFJJIGlzIG5vdCBzZXQKQ09ORklHX1BDSV9QQVNJRD15CkNPTkZJR19QQ0lfTEFCRUw9eQpD
T05GSUdfSE9UUExVR19QQ0k9eQpDT05GSUdfSE9UUExVR19QQ0lfQUNQST15CiMgQ09ORklHX0hP
VFBMVUdfUENJX0FDUElfSUJNIGlzIG5vdCBzZXQKIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBp
cyBub3Qgc2V0CiMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAoKIwojIFBDSSBj
b250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfUENJX0FBUkRWQVJLPXkKIyBDT05GSUdfUENJRV9Y
SUxJTlhfTldMIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJX0ZUUENJMTAwIGlzIG5vdCBzZXQKQ09O
RklHX1BDSV9URUdSQT15CiMgQ09ORklHX1BDSUVfUkNBUiBpcyBub3Qgc2V0CiMgQ09ORklHX1BD
SUVfUkNBUl9IT1NUIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9SQ0FSX0VQIGlzIG5vdCBzZXQK
Q09ORklHX1BDSV9IT1NUX0NPTU1PTj15CkNPTkZJR19QQ0lfSE9TVF9HRU5FUklDPXkKIyBDT05G
SUdfUENJRV9YSUxJTlggaXMgbm90IHNldAojIENPTkZJR19QQ0lFX1hJTElOWF9DUE0gaXMgbm90
IHNldApDT05GSUdfUENJX1hHRU5FPXkKQ09ORklHX1BDSV9YR0VORV9NU0k9eQpDT05GSUdfUENJ
RV9JUFJPQz15CkNPTkZJR19QQ0lFX0lQUk9DX1BMQVRGT1JNPXkKQ09ORklHX1BDSUVfSVBST0Nf
TVNJPXkKQ09ORklHX1BDSUVfQUxURVJBPXkKQ09ORklHX1BDSUVfQUxURVJBX01TST15CkNPTkZJ
R19QQ0lfSE9TVF9USFVOREVSX1BFTT15CkNPTkZJR19QQ0lfSE9TVF9USFVOREVSX0VDQU09eQpD
T05GSUdfUENJRV9ST0NLQ0hJUD15CkNPTkZJR19QQ0lFX1JPQ0tDSElQX0hPU1Q9bQojIENPTkZJ
R19QQ0lFX1JPQ0tDSElQX0VQIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9NRURJQVRFSyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1BDSUVfQlJDTVNUQiBpcyBub3Qgc2V0CiMgQ09ORklHX1BDSUVfSElT
SV9FUlIgaXMgbm90IHNldAoKIwojIERlc2lnbldhcmUgUENJIENvcmUgU3VwcG9ydAojCkNPTkZJ
R19QQ0lFX0RXPXkKQ09ORklHX1BDSUVfRFdfSE9TVD15CiMgQ09ORklHX1BDSUVfRFdfUExBVF9I
T1NUIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9EV19QTEFUX0VQIGlzIG5vdCBzZXQKIyBDT05G
SUdfUENJX0lNWDYgaXMgbm90IHNldAojIENPTkZJR19QQ0lfS0VZU1RPTkVfSE9TVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1BDSV9LRVlTVE9ORV9FUCBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfTEFZRVJT
Q0FQRT15CiMgQ09ORklHX1BDSV9MQVlFUlNDQVBFX0VQIGlzIG5vdCBzZXQKQ09ORklHX1BDSV9I
SVNJPXkKQ09ORklHX1BDSUVfUUNPTT15CkNPTkZJR19QQ0lFX0FSTUFEQV84Sz15CkNPTkZJR19Q
Q0lFX0tJUklOPXkKQ09ORklHX1BDSUVfSElTSV9TVEI9eQojIENPTkZJR19QQ0lfTUVTT04gaXMg
bm90IHNldAojIENPTkZJR19QQ0lFX1RFR1JBMTk0X0hPU1QgaXMgbm90IHNldAojIENPTkZJR19Q
Q0lFX1RFR1JBMTk0X0VQIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJRV9VTklQSElFUiBpcyBub3Qg
c2V0CiMgQ09ORklHX1BDSUVfVU5JUEhJRVJfRVAgaXMgbm90IHNldAojIENPTkZJR19QQ0lFX0FM
IGlzIG5vdCBzZXQKIyBlbmQgb2YgRGVzaWduV2FyZSBQQ0kgQ29yZSBTdXBwb3J0CgojCiMgTW9i
aXZlaWwgUENJZSBDb3JlIFN1cHBvcnQKIwojIENPTkZJR19QQ0lFX01PQklWRUlMX1BMQVQgaXMg
bm90IHNldAojIENPTkZJR19QQ0lFX0xBWUVSU0NBUEVfR0VONCBpcyBub3Qgc2V0CiMgZW5kIG9m
IE1vYml2ZWlsIFBDSWUgQ29yZSBTdXBwb3J0CgojCiMgQ2FkZW5jZSBQQ0llIGNvbnRyb2xsZXJz
IHN1cHBvcnQKIwojIENPTkZJR19QQ0lFX0NBREVOQ0VfUExBVF9IT1NUIGlzIG5vdCBzZXQKIyBD
T05GSUdfUENJRV9DQURFTkNFX1BMQVRfRVAgaXMgbm90IHNldAojIENPTkZJR19QQ0lfSjcyMUVf
SE9TVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BDSV9KNzIxRV9FUCBpcyBub3Qgc2V0CiMgZW5kIG9m
IENhZGVuY2UgUENJZSBjb250cm9sbGVycyBzdXBwb3J0CiMgZW5kIG9mIFBDSSBjb250cm9sbGVy
IGRyaXZlcnMKCiMKIyBQQ0kgRW5kcG9pbnQKIwpDT05GSUdfUENJX0VORFBPSU5UPXkKQ09ORklH
X1BDSV9FTkRQT0lOVF9DT05GSUdGUz15CkNPTkZJR19QQ0lfRVBGX1RFU1Q9bQojIGVuZCBvZiBQ
Q0kgRW5kcG9pbnQKCiMKIyBQQ0kgc3dpdGNoIGNvbnRyb2xsZXIgZHJpdmVycwojCiMgQ09ORklH
X1BDSV9TV19TV0lUQ0hURUMgaXMgbm90IHNldAojIGVuZCBvZiBQQ0kgc3dpdGNoIGNvbnRyb2xs
ZXIgZHJpdmVycwoKIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFQSURJTyBp
cyBub3Qgc2V0CgojCiMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwojCiMgQ09ORklHX1VFVkVOVF9I
RUxQRVIgaXMgbm90IHNldApDT05GSUdfREVWVE1QRlM9eQpDT05GSUdfREVWVE1QRlNfTU9VTlQ9
eQpDT05GSUdfU1RBTkRBTE9ORT15CkNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKCiMK
IyBGaXJtd2FyZSBsb2FkZXIKIwpDT05GSUdfRldfTE9BREVSPXkKQ09ORklHX0VYVFJBX0ZJUk1X
QVJFPSIiCiMgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUiBpcyBub3Qgc2V0CiMgQ09ORklH
X0ZXX0xPQURFUl9DT01QUkVTUyBpcyBub3Qgc2V0CkNPTkZJR19GV19DQUNIRT15CiMgZW5kIG9m
IEZpcm13YXJlIGxvYWRlcgoKQ09ORklHX1dBTlRfREVWX0NPUkVEVU1QPXkKQ09ORklHX0FMTE9X
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19ERVZfQ09SRURVTVA9eQojIENPTkZJR19ERUJVR19EUklW
RVIgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAojIENPTkZJR19E
RUJVR19URVNUX0RSSVZFUl9SRU1PVkUgaXMgbm90IHNldAojIENPTkZJR19URVNUX0FTWU5DX0RS
SVZFUl9QUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19TWVNfSFlQRVJWSVNPUj15CkNPTkZJR19HRU5F
UklDX0NQVV9BVVRPUFJPQkU9eQpDT05GSUdfR0VORVJJQ19DUFVfVlVMTkVSQUJJTElUSUVTPXkK
Q09ORklHX1NPQ19CVVM9eQpDT05GSUdfUkVHTUFQPXkKQ09ORklHX1JFR01BUF9JMkM9eQpDT05G
SUdfUkVHTUFQX1NQST15CkNPTkZJR19SRUdNQVBfU1BNST15CkNPTkZJR19SRUdNQVBfTU1JTz15
CkNPTkZJR19SRUdNQVBfSVJRPXkKQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSPXkKIyBDT05GSUdf
RE1BX0ZFTkNFX1RSQUNFIGlzIG5vdCBzZXQKQ09ORklHX0dFTkVSSUNfQVJDSF9UT1BPTE9HWT15
CiMgZW5kIG9mIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKCiMKIyBCdXMgZGV2aWNlcwojCkNPTkZJ
R19CUkNNU1RCX0dJU0JfQVJCPXkKIyBDT05GSUdfTU9YVEVUIGlzIG5vdCBzZXQKQ09ORklHX0hJ
U0lMSUNPTl9MUEM9eQojIENPTkZJR19JTVhfV0VJTSBpcyBub3Qgc2V0CkNPTkZJR19RQ09NX0VC
STI9eQpDT05GSUdfU0lNUExFX1BNX0JVUz15CkNPTkZJR19TVU41MElfREUyX0JVUz15CkNPTkZJ
R19TVU5YSV9SU0I9eQpDT05GSUdfVEVHUkFfQUNPTk5FQ1Q9bQojIENPTkZJR19URUdSQV9HTUkg
aXMgbm90IHNldApDT05GSUdfVU5JUEhJRVJfU1lTVEVNX0JVUz15CkNPTkZJR19WRVhQUkVTU19D
T05GSUc9eQpDT05GSUdfRlNMX01DX0JVUz15CiMgQ09ORklHX01ISV9CVVMgaXMgbm90IHNldAoj
IGVuZCBvZiBCdXMgZGV2aWNlcwoKIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIyBDT05G
SUdfR05TUyBpcyBub3Qgc2V0CkNPTkZJR19NVEQ9eQojIENPTkZJR19NVERfVEVTVFMgaXMgbm90
IHNldAoKIwojIFBhcnRpdGlvbiBwYXJzZXJzCiMKIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKQ09ORklHX01URF9P
Rl9QQVJUUz15CiMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAojIENPTkZJR19NVERf
UkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiMgZW5kIG9mIFBhcnRpdGlvbiBwYXJzZXJzCgojCiMg
VXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKIwpDT05GSUdfTVREX0JMS0RFVlM9
eQpDT05GSUdfTVREX0JMT0NLPXkKIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKIyBDT05GSUdfTkZU
TCBpcyBub3Qgc2V0CiMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKIyBDT05GSUdfUkZEX0ZUTCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIyBDT05GSUdfU01fRlRMIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAojIENPTkZJR19NVERfU1dBUCBpcyBu
b3Qgc2V0CiMgQ09ORklHX01URF9QQVJUSVRJT05FRF9NQVNURVIgaXMgbm90IHNldAoKIwojIFJB
TS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCiMKQ09ORklHX01URF9DRkk9eQojIENPTkZJR19NVERf
SkVERUNQUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19NVERfR0VOX1BST0JFPXkKQ09ORklHX01URF9D
RklfQURWX09QVElPTlM9eQpDT05GSUdfTVREX0NGSV9OT1NXQVA9eQojIENPTkZJR19NVERfQ0ZJ
X0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlz
IG5vdCBzZXQKIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CkNPTkZJR19NVERf
TUFQX0JBTktfV0lEVEhfMT15CkNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CkNPTkZJR19N
VERfTUFQX0JBTktfV0lEVEhfND15CkNPTkZJR19NVERfQ0ZJX0kxPXkKQ09ORklHX01URF9DRklf
STI9eQojIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKQ09ORklHX01URF9DRklfSU5URUxFWFQ9
eQpDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpDT05GSUdfTVREX0NGSV9TVEFBPXkKQ09ORklHX01U
RF9DRklfVVRJTD15CiMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAojIENPTkZJR19NVERfUk9N
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CiMgZW5kIG9mIFJBTS9S
T00vRmxhc2ggY2hpcCBkcml2ZXJzCgojCiMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2Vz
cwojCiMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKQ09ORklHX01URF9Q
SFlTTUFQPXkKIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKQ09ORklHX01U
RF9QSFlTTUFQX09GPXkKIyBDT05GSUdfTVREX1BIWVNNQVBfVkVSU0FUSUxFIGlzIG5vdCBzZXQK
IyBDT05GSUdfTVREX1BIWVNNQVBfR0VNSU5JIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0lOVEVM
X1ZSX05PUiBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIyBlbmQg
b2YgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwoKIwojIFNlbGYtY29udGFpbmVkIE1U
RCBkZXZpY2UgZHJpdmVycwojCiMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldApDT05GSUdf
TVREX0RBVEFGTEFTSD15CiMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX0RBVEFGTEFTSF9PVFAgaXMgbm90IHNldAojIENPTkZJR19NVERf
TUNIUDIzSzI1NiBpcyBub3Qgc2V0CkNPTkZJR19NVERfU1NUMjVMPXkKIyBDT05GSUdfTVREX1NM
UkFNIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKIyBDT05GSUdfTVRE
X01URFJBTSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAoKIwoj
IERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwojCiMgQ09ORklHX01URF9ET0NHMyBpcyBub3Qg
c2V0CiMgZW5kIG9mIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwoKIwojIE5BTkQK
IwpDT05GSUdfTVREX05BTkRfQ09SRT15CiMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQK
Q09ORklHX01URF9OQU5EX0VDQ19TV19IQU1NSU5HPXkKIyBDT05GSUdfTVREX05BTkRfRUNDX1NX
X0hBTU1JTkdfU01DIGlzIG5vdCBzZXQKQ09ORklHX01URF9SQVdfTkFORD15CiMgQ09ORklHX01U
RF9OQU5EX0VDQ19TV19CQ0ggaXMgbm90IHNldAoKIwojIFJhdy9wYXJhbGxlbCBOQU5EIGZsYXNo
IGNvbnRyb2xsZXJzCiMKQ09ORklHX01URF9OQU5EX0RFTkFMST15CiMgQ09ORklHX01URF9OQU5E
X0RFTkFMSV9QQ0kgaXMgbm90IHNldApDT05GSUdfTVREX05BTkRfREVOQUxJX0RUPXkKIyBDT05G
SUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CkNPTkZJR19NVERfTkFORF9NQVJWRUxMPXkKIyBD
T05GSUdfTVREX05BTkRfQlJDTU5BTkQgaXMgbm90IHNldApDT05GSUdfTVREX05BTkRfRlNMX0lG
Qz15CiMgQ09ORklHX01URF9OQU5EX01YQyBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX1NV
TlhJIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfSElTSTUwNCBpcyBub3Qgc2V0CkNPTkZJ
R19NVERfTkFORF9RQ09NPXkKIyBDT05GSUdfTVREX05BTkRfTVRLIGlzIG5vdCBzZXQKIyBDT05G
SUdfTVREX05BTkRfTVhJQyBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX1RFR1JBIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX05BTkRfTUVTT04gaXMgbm90IHNldAojIENPTkZJR19NVERfTkFO
RF9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAoj
IENPTkZJR19NVERfTkFORF9DQURFTkNFIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfQVJB
U0FOIGlzIG5vdCBzZXQKCiMKIyBNaXNjCiMKIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX1JJQ09IIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05B
TkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9TUElfTkFORCBpcyBub3Qgc2V0
CgojCiMgRUNDIGVuZ2luZSBzdXBwb3J0CiMKQ09ORklHX01URF9OQU5EX0VDQz15CiMgZW5kIG9m
IEVDQyBlbmdpbmUgc3VwcG9ydAojIGVuZCBvZiBOQU5ECgojCiMgTFBERFIgJiBMUEREUjIgUENN
IG1lbW9yeSBkcml2ZXJzCiMKIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKIyBlbmQgb2Yg
TFBERFIgJiBMUEREUjIgUENNIG1lbW9yeSBkcml2ZXJzCgpDT05GSUdfTVREX1NQSV9OT1I9eQpD
T05GSUdfTVREX1NQSV9OT1JfVVNFXzRLX1NFQ1RPUlM9eQojIENPTkZJR19TUElfSElTSV9TRkMg
aXMgbm90IHNldAojIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0hZUEVS
QlVTIGlzIG5vdCBzZXQKQ09ORklHX0RUQz15CkNPTkZJR19PRj15CiMgQ09ORklHX09GX1VOSVRU
RVNUIGlzIG5vdCBzZXQKQ09ORklHX09GX0ZMQVRUUkVFPXkKQ09ORklHX09GX0VBUkxZX0ZMQVRU
UkVFPXkKQ09ORklHX09GX0tPQko9eQpDT05GSUdfT0ZfRFlOQU1JQz15CkNPTkZJR19PRl9BRERS
RVNTPXkKQ09ORklHX09GX0lSUT15CkNPTkZJR19PRl9ORVQ9eQpDT05GSUdfT0ZfUkVTRVJWRURf
TUVNPXkKQ09ORklHX09GX1JFU09MVkU9eQpDT05GSUdfT0ZfT1ZFUkxBWT15CkNPTkZJR19PRl9O
VU1BPXkKIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CkNPTkZJR19QTlA9eQpDT05GSUdfUE5Q
X0RFQlVHX01FU1NBR0VTPXkKCiMKIyBQcm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJ
R19CTEtfREVWPXkKIyBDT05GSUdfQkxLX0RFVl9OVUxMX0JMSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0JMS19ERVZfUENJRVNTRF9NVElQMzJYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfVU1F
TSBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0xPT1A9eQpDT05GSUdfQkxLX0RFVl9MT09QX01J
Tl9DT1VOVD04CiMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiMgQ09ORklH
X0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX05CRD1tCiMgQ09ORklHX0JM
S19ERVZfU0tEIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAojIENP
TkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90
IHNldAojIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApDT05GSUdfWEVOX0JMS0RFVl9G
Uk9OVEVORD15CkNPTkZJR19YRU5fQkxLREVWX0JBQ0tFTkQ9eQpDT05GSUdfVklSVElPX0JMSz15
CiMgQ09ORklHX0JMS19ERVZfUkJEIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9SU1hYIGlz
IG5vdCBzZXQKCiMKIyBOVk1FIFN1cHBvcnQKIwpDT05GSUdfTlZNRV9DT1JFPW0KQ09ORklHX0JM
S19ERVZfTlZNRT1tCiMgQ09ORklHX05WTUVfTVVMVElQQVRIIGlzIG5vdCBzZXQKIyBDT05GSUdf
TlZNRV9IV01PTiBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVfRkMgaXMgbm90IHNldAojIENPTkZJ
R19OVk1FX1RDUCBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVfVEFSR0VUIGlzIG5vdCBzZXQKIyBl
bmQgb2YgTlZNRSBTdXBwb3J0CgojCiMgTWlzYyBkZXZpY2VzCiMKIyBDT05GSUdfQUQ1MjVYX0RQ
T1QgaXMgbm90IHNldAojIENPTkZJR19EVU1NWV9JUlEgaXMgbm90IHNldAojIENPTkZJR19QSEFO
VE9NIGlzIG5vdCBzZXQKIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfSUNT
OTMyUzQwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiMgQ09ORklHX1FDT01fQ09JTkNFTEwgaXMgbm90
IHNldAojIENPTkZJR19RQ09NX0ZBU1RSUEMgaXMgbm90IHNldAojIENPTkZJR19BUERTOTgwMkFM
UyBpcyBub3Qgc2V0CiMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKIyBDT05GSUdfSVNMMjkw
MjAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0JIMTc3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQVBEUzk5MFggaXMg
bm90IHNldAojIENPTkZJR19ITUM2MzUyIGlzIG5vdCBzZXQKIyBDT05GSUdfRFMxNjgyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEFUVElDRV9FQ1AzX0NPTkZJRyBpcyBub3Qgc2V0CkNPTkZJR19TUkFN
PXkKQ09ORklHX1BDSV9FTkRQT0lOVF9URVNUPW0KIyBDT05GSUdfWElMSU5YX1NERkVDIGlzIG5v
dCBzZXQKIyBDT05GSUdfUFZQQU5JQyBpcyBub3Qgc2V0CiMgQ09ORklHX0hJU0lfSElLRVlfVVNC
IGlzIG5vdCBzZXQKIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKCiMKIyBFRVBST00gc3VwcG9y
dAojCkNPTkZJR19FRVBST01fQVQyND1tCkNPTkZJR19FRVBST01fQVQyNT1tCiMgQ09ORklHX0VF
UFJPTV9MRUdBQ1kgaXMgbm90IHNldAojIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0
CiMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiMgQ09ORklHX0VFUFJPTV85M1hYNDYg
aXMgbm90IHNldAojIENPTkZJR19FRVBST01fSURUXzg5SFBFU1ggaXMgbm90IHNldAojIENPTkZJ
R19FRVBST01fRUUxMDA0IGlzIG5vdCBzZXQKIyBlbmQgb2YgRUVQUk9NIHN1cHBvcnQKCiMgQ09O
RklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAoKIwojIFRleGFzIEluc3RydW1lbnRzIHNoYXJlZCB0
cmFuc3BvcnQgbGluZSBkaXNjaXBsaW5lCiMKIyBDT05GSUdfVElfU1QgaXMgbm90IHNldAojIGVu
ZCBvZiBUZXhhcyBJbnN0cnVtZW50cyBzaGFyZWQgdHJhbnNwb3J0IGxpbmUgZGlzY2lwbGluZQoK
IyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FMVEVSQV9TVEFQ
TCBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTldRRSBpcyBub3Qgc2V0CiMgQ09ORklHX0VDSE8gaXMg
bm90IHNldAojIENPTkZJR19NSVNDX0FMQ09SX1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX01JU0Nf
UlRTWF9QQ0kgaXMgbm90IHNldAojIENPTkZJR19NSVNDX1JUU1hfVVNCIGlzIG5vdCBzZXQKIyBD
T05GSUdfSEFCQU5BX0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfVUFDQ0UgaXMgbm90IHNldAojIGVu
ZCBvZiBNaXNjIGRldmljZXMKCiMKIyBTQ1NJIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX1NDU0lf
TU9EPXkKQ09ORklHX1JBSURfQVRUUlM9bQpDT05GSUdfU0NTST15CkNPTkZJR19TQ1NJX0RNQT15
CiMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CgojCiMgU0NTSSBzdXBwb3J0IHR5cGUg
KGRpc2ssIHRhcGUsIENELVJPTSkKIwpDT05GSUdfQkxLX0RFVl9TRD15CiMgQ09ORklHX0NIUl9E
RVZfU1QgaXMgbm90IHNldAojIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q0hSX0RFVl9TRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMg
bm90IHNldAojIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAoKIwojIFNDU0kgVHJh
bnNwb3J0cwojCiMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NT
SV9GQ19BVFRSUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNl
dApDT05GSUdfU0NTSV9TQVNfQVRUUlM9eQpDT05GSUdfU0NTSV9TQVNfTElCU0FTPXkKQ09ORklH
X1NDU0lfU0FTX0FUQT15CkNPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CiMgQ09ORklHX1NDU0lf
U1JQX0FUVFJTIGlzIG5vdCBzZXQKIyBlbmQgb2YgU0NTSSBUcmFuc3BvcnRzCgpDT05GSUdfU0NT
SV9MT1dMRVZFTD15CiMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiMgQ09ORklHX0lTQ1NJ
X0JPT1RfU1lTRlMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9DWEdCNF9JU0NTSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQk5Y
Ml9JU0NTSSBpcyBub3Qgc2V0CiMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKIyBDT05GSUdf
QkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAojIENPTkZJR19TQ1NJXzNXX1NB
UyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAojIENPTkZJR19TQ1NJ
X0FBQ1JBSUQgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAojIENP
TkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90
IHNldApDT05GSUdfU0NTSV9ISVNJX1NBUz15CkNPTkZJR19TQ1NJX0hJU0lfU0FTX1BDST15CiMg
Q09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01WVU1JIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQVJDTVNS
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9FU0FTMlIgaXMgbm90IHNldAojIENPTkZJR19NRUdB
UkFJRF9ORVdHRU4gaXMgbm90IHNldAojIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNl
dApDT05GSUdfTUVHQVJBSURfU0FTPXkKQ09ORklHX1NDU0lfTVBUM1NBUz1tCkNPTkZJR19TQ1NJ
X01QVDJTQVNfTUFYX1NHRT0xMjgKQ09ORklHX1NDU0lfTVBUM1NBU19NQVhfU0dFPTEyOAojIENP
TkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX1NNQVJUUFFJIGlzIG5v
dCBzZXQKQ09ORklHX1NDU0lfVUZTSENEPXkKIyBDT05GSUdfU0NTSV9VRlNIQ0RfUENJIGlzIG5v
dCBzZXQKQ09ORklHX1NDU0lfVUZTSENEX1BMQVRGT1JNPXkKIyBDT05GSUdfU0NTSV9VRlNfQ0RO
U19QTEFURk9STSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfVUZTX0RXQ19UQ19QTEFURk9STSBp
cyBub3Qgc2V0CkNPTkZJR19TQ1NJX1VGU19RQ09NPW0KIyBDT05GSUdfU0NTSV9VRlNfTUVESUFU
RUsgaXMgbm90IHNldApDT05GSUdfU0NTSV9VRlNfSElTST15CiMgQ09ORklHX1NDU0lfVUZTX1RJ
X0o3MjFFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9VRlNfQlNHIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0NTSV9VRlNfRVhZTk9TIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX01ZUkIgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX01ZUlMgaXMg
bm90IHNldAojIENPTkZJR19YRU5fU0NTSV9GUk9OVEVORCBpcyBub3Qgc2V0CiMgQ09ORklHX1ND
U0lfU05JQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAojIENP
TkZJR19TQ1NJX0ZET01BSU5fUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0lOSVRJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lf
U1RFWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAojIENP
TkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfREMz
OTV4IGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BTTUzQzk3NCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfV0Q3MTlYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9WSVJUSU8gaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0RIIGlz
IG5vdCBzZXQKIyBlbmQgb2YgU0NTSSBkZXZpY2Ugc3VwcG9ydAoKQ09ORklHX0hBVkVfUEFUQV9Q
TEFURk9STT15CkNPTkZJR19BVEE9eQpDT05GSUdfU0FUQV9IT1NUPXkKQ09ORklHX1BBVEFfVElN
SU5HUz15CkNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CkNPTkZJR19BVEFfRk9SQ0U9eQpDT05G
SUdfQVRBX0FDUEk9eQojIENPTkZJR19TQVRBX1pQT0REIGlzIG5vdCBzZXQKQ09ORklHX1NBVEFf
UE1QPXkKCiMKIyBDb250cm9sbGVycyB3aXRoIG5vbi1TRkYgbmF0aXZlIGludGVyZmFjZQojCkNP
TkZJR19TQVRBX0FIQ0k9eQpDT05GSUdfU0FUQV9NT0JJTEVfTFBNX1BPTElDWT0wCkNPTkZJR19T
QVRBX0FIQ0lfUExBVEZPUk09eQojIENPTkZJR19BSENJX0JSQ00gaXMgbm90IHNldAojIENPTkZJ
R19BSENJX0lNWCBpcyBub3Qgc2V0CkNPTkZJR19BSENJX0NFVkE9eQojIENPTkZJR19BSENJX01U
SyBpcyBub3Qgc2V0CkNPTkZJR19BSENJX01WRUJVPXkKIyBDT05GSUdfQUhDSV9TVU5YSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FIQ0lfVEVHUkEgaXMgbm90IHNldApDT05GSUdfQUhDSV9YR0VORT15
CkNPTkZJR19BSENJX1FPUklRPXkKIyBDT05GSUdfU0FUQV9BSENJX1NFQVRUTEUgaXMgbm90IHNl
dAojIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0FUQV9BQ0FSRF9B
SENJIGlzIG5vdCBzZXQKQ09ORklHX1NBVEFfU0lMMjQ9eQpDT05GSUdfQVRBX1NGRj15CgojCiMg
U0ZGIGNvbnRyb2xsZXJzIHdpdGggY3VzdG9tIERNQSBpbnRlcmZhY2UKIwojIENPTkZJR19QRENf
QURNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAojIENPTkZJR19T
QVRBX1NYNCBpcyBub3Qgc2V0CkNPTkZJR19BVEFfQk1ETUE9eQoKIwojIFNBVEEgU0ZGIGNvbnRy
b2xsZXJzIHdpdGggQk1ETUEKIwojIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NBVEFfRFdDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CiMgQ09ORklH
X1NBVEFfTlYgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldApDT05G
SUdfU0FUQV9SQ0FSPXkKIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAojIENPTkZJR19TQVRB
X1NJUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKIyBDT05GSUdfU0FU
QV9VTEkgaXMgbm90IHNldAojIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NB
VEFfVklURVNTRSBpcyBub3Qgc2V0CgojCiMgUEFUQSBTRkYgY29udHJvbGxlcnMgd2l0aCBCTURN
QQojCiMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90
IHNldAojIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9BVElJWFAg
aXMgbm90IHNldAojIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAojIENPTkZJR19QQVRB
X0NNRDY0WCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQK
IyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAojIENPTkZJR19QQVRBX0hQVDNYMk4gaXMg
bm90IHNldAojIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSU1Y
IGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAojIENPTkZJR19QQVRB
X0lUODIxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CiMgQ09O
RklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qg
c2V0CiMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfTlM4NzQx
NSBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BB
VEFfT1BUSURNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAoj
IENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAojIENPTkZJR19QQVRBX1JBRElTWVMgaXMg
bm90IHNldAojIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfU0NIIGlz
IG5vdCBzZXQKIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CiMgQ09ORklHX1BB
VEFfU0lMNjgwIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAojIENPTkZJ
R19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAojIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNl
dAojIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBu
b3Qgc2V0CgojCiMgUElPLW9ubHkgU0ZGIGNvbnRyb2xsZXJzCiMKIyBDT05GSUdfUEFUQV9DTUQ2
NDBfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CkNP
TkZJR19QQVRBX1BMQVRGT1JNPXkKQ09ORklHX1BBVEFfT0ZfUExBVEZPUk09eQojIENPTkZJR19Q
QVRBX1JaMTAwMCBpcyBub3Qgc2V0CgojCiMgR2VuZXJpYyBmYWxsYmFjayAvIGxlZ2FjeSBkcml2
ZXJzCiMKIyBDT05GSUdfUEFUQV9BQ1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRBX0dFTkVSSUMg
aXMgbm90IHNldAojIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0CkNPTkZJR19NRD15CkNP
TkZJR19CTEtfREVWX01EPW0KIyBDT05GSUdfTURfTElORUFSIGlzIG5vdCBzZXQKIyBDT05GSUdf
TURfUkFJRDAgaXMgbm90IHNldAojIENPTkZJR19NRF9SQUlEMSBpcyBub3Qgc2V0CiMgQ09ORklH
X01EX1JBSUQxMCBpcyBub3Qgc2V0CiMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAojIENP
TkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAojIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNl
dAojIENPTkZJR19CQ0FDSEUgaXMgbm90IHNldApDT05GSUdfQkxLX0RFVl9ETV9CVUlMVElOPXkK
Q09ORklHX0JMS19ERVZfRE09bQojIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklH
X0RNX1VOU1RSSVBFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NSWVBUIGlzIG5vdCBzZXQKIyBD
T05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAojIENPTkZJR19ETV9USElOX1BST1ZJU0lPTklO
RyBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NBQ0hFIGlzIG5vdCBzZXQKIyBDT05GSUdfRE1fV1JJ
VEVDQUNIRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0VCUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RN
X0VSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0NMT05FIGlzIG5vdCBzZXQKQ09ORklHX0RNX01J
UlJPUj1tCiMgQ09ORklHX0RNX0xPR19VU0VSU1BBQ0UgaXMgbm90IHNldAojIENPTkZJR19ETV9S
QUlEIGlzIG5vdCBzZXQKQ09ORklHX0RNX1pFUk89bQojIENPTkZJR19ETV9NVUxUSVBBVEggaXMg
bm90IHNldAojIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RVU1QgaXMg
bm90IHNldAojIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAojIENPTkZJR19ETV9GTEFLRVkg
aXMgbm90IHNldAojIENPTkZJR19ETV9WRVJJVFkgaXMgbm90IHNldAojIENPTkZJR19ETV9TV0lU
Q0ggaXMgbm90IHNldAojIENPTkZJR19ETV9MT0dfV1JJVEVTIGlzIG5vdCBzZXQKIyBDT05GSUdf
RE1fSU5URUdSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfVEFSR0VUX0NPUkUgaXMgbm90IHNldAoj
IENPTkZJR19GVVNJT04gaXMgbm90IHNldAoKIwojIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBv
cnQKIwojIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZJUkVXSVJFX05PU1kg
aXMgbm90IHNldAojIGVuZCBvZiBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CgpDT05GSUdf
TkVUREVWSUNFUz15CkNPTkZJR19NSUk9eQpDT05GSUdfTkVUX0NPUkU9eQojIENPTkZJR19CT05E
SU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAojIENPTkZJR19XSVJFR1VB
UkQgaXMgbm90IHNldAojIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAojIENPTkZJR19ORVRf
RkMgaXMgbm90IHNldAojIENPTkZJR19JRkIgaXMgbm90IHNldAojIENPTkZJR19ORVRfVEVBTSBp
cyBub3Qgc2V0CkNPTkZJR19NQUNWTEFOPW0KQ09ORklHX01BQ1ZUQVA9bQojIENPTkZJR19JUFZM
QU4gaXMgbm90IHNldAojIENPTkZJR19WWExBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVWRSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBUkVVRFAgaXMgbm90IHNldAojIENPTkZJR19HVFAgaXMgbm90
IHNldAojIENPTkZJR19NQUNTRUMgaXMgbm90IHNldAojIENPTkZJR19ORVRDT05TT0xFIGlzIG5v
dCBzZXQKQ09ORklHX1RVTj15CkNPTkZJR19UQVA9bQojIENPTkZJR19UVU5fVk5FVF9DUk9TU19M
RSBpcyBub3Qgc2V0CkNPTkZJR19WRVRIPW0KQ09ORklHX1ZJUlRJT19ORVQ9eQojIENPTkZJR19O
TE1PTiBpcyBub3Qgc2V0CiMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CgojCiMgRGlzdHJpYnV0
ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSBkcml2ZXJzCiMKIyBDT05GSUdfQjUzIGlzIG5vdCBzZXQK
IyBDT05GSUdfTkVUX0RTQV9CQ01fU0YyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9MT09Q
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9MQU5USVFfR1NXSVAgaXMgbm90IHNldAojIENP
TkZJR19ORVRfRFNBX01UNzUzMCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9EU0FfTVY4OEU2MDYw
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3NyBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjg3OTUgaXMgbm90IHNldAojIENPTkZJR19O
RVRfRFNBX01WODhFNlhYWCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9EU0FfTVNDQ19GRUxJWCBp
cyBub3Qgc2V0CiMgQ09ORklHX05FVF9EU0FfTVNDQ19TRVZJTExFIGlzIG5vdCBzZXQKIyBDT05G
SUdfTkVUX0RTQV9BUjkzMzEgaXMgbm90IHNldAojIENPTkZJR19ORVRfRFNBX1NKQTExMDUgaXMg
bm90IHNldAojIENPTkZJR19ORVRfRFNBX1FDQThLIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RT
QV9SRUFMVEVLX1NNSSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX0ky
QyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8gaXMgbm90IHNl
dAojIENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkgaXMgbm90IHNldAojIENPTkZJ
R19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSBpcyBub3Qgc2V0CiMgZW5kIG9mIERp
c3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVycwoKQ09ORklHX0VUSEVSTkVUPXkK
Q09ORklHX01ESU89bQpDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKIyBDT05GSUdfVk9SVEVYIGlz
IG5vdCBzZXQKIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FE
QVBURUM9eQojIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKQ09ORklHX05FVF9W
RU5ET1JfQUdFUkU9eQojIENPTkZJR19FVDEzMVggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRP
Ul9BTEFDUklURUNIPXkKIyBDT05GSUdfU0xJQ09TUyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX0FMTFdJTk5FUj15CiMgQ09ORklHX1NVTjRJX0VNQUMgaXMgbm90IHNldApDT05GSUdfTkVU
X1ZFTkRPUl9BTFRFT049eQojIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAojIENPTkZJR19BTFRF
UkFfVFNFIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQU1BWk9OPXkKIyBDT05GSUdfRU5B
X0VUSEVSTkVUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQU1EPXkKIyBDT05GSUdfQU1E
ODExMV9FVEggaXMgbm90IHNldAojIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKQ09ORklHX0FN
RF9YR0JFPXkKQ09ORklHX05FVF9YR0VORT15CiMgQ09ORklHX05FVF9YR0VORV9WMiBpcyBub3Qg
c2V0CkNPTkZJR19ORVRfVkVORE9SX0FRVUFOVElBPXkKIyBDT05GSUdfQVFUSU9OIGlzIG5vdCBz
ZXQKQ09ORklHX05FVF9WRU5ET1JfQVJDPXkKIyBDT05GSUdfRU1BQ19ST0NLQ0hJUCBpcyBub3Qg
c2V0CkNPTkZJR19ORVRfVkVORE9SX0FUSEVST1M9eQojIENPTkZJR19BVEwyIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQ09ORklH
X0FUTDFDPW0KIyBDT05GSUdfQUxYIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQVVST1JB
PXkKIyBDT05GSUdfQVVST1JBX05CODgwMCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0JS
T0FEQ09NPXkKIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKQ09ORklHX0JDTUdFTkVUPW0KIyBDT05G
SUdfQk5YMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NOSUMgaXMgbm90IHNldAojIENPTkZJR19USUdP
TjMgaXMgbm90IHNldApDT05GSUdfQk5YMlg9bQpDT05GSUdfQk5YMlhfU1JJT1Y9eQpDT05GSUdf
QkdNQUM9eQpDT05GSUdfQkdNQUNfUExBVEZPUk09eQojIENPTkZJR19TWVNURU1QT1JUIGlzIG5v
dCBzZXQKIyBDT05GSUdfQk5YVCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0JST0NBREU9
eQojIENPTkZJR19CTkEgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9DQURFTkNFPXkKQ09O
RklHX01BQ0I9eQpDT05GSUdfTUFDQl9VU0VfSFdTVEFNUD15CiMgQ09ORklHX01BQ0JfUENJIGlz
IG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQ0FWSVVNPXkKQ09ORklHX1RIVU5ERVJfTklDX1BG
PXkKIyBDT05GSUdfVEhVTkRFUl9OSUNfVkYgaXMgbm90IHNldApDT05GSUdfVEhVTkRFUl9OSUNf
QkdYPXkKQ09ORklHX1RIVU5ERVJfTklDX1JHWD15CiMgQ09ORklHX0NBVklVTV9QVFAgaXMgbm90
IHNldAojIENPTkZJR19MSVFVSURJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0xJUVVJRElPX1ZGIGlz
IG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfQ0hFTFNJTz15CiMgQ09ORklHX0NIRUxTSU9fVDEg
aXMgbm90IHNldAojIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hFTFNJ
T19UNCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIRUxTSU9fVDRWRiBpcyBub3Qgc2V0CkNPTkZJR19O
RVRfVkVORE9SX0NJU0NPPXkKIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX0NPUlRJTkE9eQojIENPTkZJR19HRU1JTklfRVRIRVJORVQgaXMgbm90IHNldAojIENPTkZJ
R19ETkVUIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfREVDPXkKIyBDT05GSUdfTkVUX1RV
TElQIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRExJTks9eQojIENPTkZJR19ETDJLIGlz
IG5vdCBzZXQKIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9F
TVVMRVg9eQojIENPTkZJR19CRTJORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9FWkNI
SVA9eQojIENPTkZJR19FWkNISVBfTlBTX01BTkFHRU1FTlRfRU5FVCBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfVkVORE9SX0ZSRUVTQ0FMRT15CkNPTkZJR19GRUM9eQpDT05GSUdfRlNMX0ZNQU49eQpD
T05GSUdfRFBBQV9FUlJBVFVNX0EwNTAzODU9eQojIENPTkZJR19GU0xfUFFfTURJTyBpcyBub3Qg
c2V0CkNPTkZJR19GU0xfWEdNQUNfTURJTz15CiMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldApD
T05GSUdfRlNMX0RQQUFfRVRIPXkKQ09ORklHX0ZTTF9EUEFBMl9FVEg9eQpDT05GSUdfRlNMX0RQ
QUEyX1BUUF9DTE9DSz15CkNPTkZJR19GU0xfRU5FVEM9eQpDT05GSUdfRlNMX0VORVRDX1ZGPXkK
Q09ORklHX0ZTTF9FTkVUQ19NRElPPXkKQ09ORklHX0ZTTF9FTkVUQ19QVFBfQ0xPQ0s9eQojIENP
TkZJR19GU0xfRU5FVENfUU9TIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfR09PR0xFPXkK
IyBDT05GSUdfR1ZFIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfSElTSUxJQ09OPXkKQ09O
RklHX0hJWDVIRDJfR01BQz15CiMgQ09ORklHX0hJU0lfRkVNQUMgaXMgbm90IHNldAojIENPTkZJ
R19ISVAwNF9FVEggaXMgbm90IHNldApDT05GSUdfSE5TX01ESU89eQpDT05GSUdfSE5TPXkKQ09O
RklHX0hOU19EU0FGPXkKQ09ORklHX0hOU19FTkVUPXkKQ09ORklHX0hOUzM9eQpDT05GSUdfSE5T
M19IQ0xHRT15CiMgQ09ORklHX0hOUzNfSENMR0VWRiBpcyBub3Qgc2V0CkNPTkZJR19ITlMzX0VO
RVQ9eQpDT05GSUdfTkVUX1ZFTkRPUl9IVUFXRUk9eQojIENPTkZJR19ISU5JQyBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX0k4MjVYWD15CkNPTkZJR19ORVRfVkVORE9SX0lOVEVMPXkKIyBD
T05GSUdfRTEwMCBpcyBub3Qgc2V0CkNPTkZJR19FMTAwMD15CkNPTkZJR19FMTAwMEU9eQpDT05G
SUdfSUdCPXkKQ09ORklHX0lHQl9IV01PTj15CkNPTkZJR19JR0JWRj15CiMgQ09ORklHX0lYR0Ig
aXMgbm90IHNldAojIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiMgQ09ORklHX0lYR0JFVkYgaXMg
bm90IHNldAojIENPTkZJR19JNDBFIGlzIG5vdCBzZXQKIyBDT05GSUdfSTQwRVZGIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldAojIENP
TkZJR19JR0MgaXMgbm90IHNldAojIENPTkZJR19KTUUgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9NQVJWRUxMPXkKQ09ORklHX01WTURJTz15CkNPTkZJR19NVk5FVEE9eQpDT05GSUdfTVZQ
UDI9eQojIENPTkZJR19QWEExNjhfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfU0tHRSBpcyBub3Qg
c2V0CkNPTkZJR19TS1kyPXkKIyBDT05GSUdfU0tZMl9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklH
X09DVEVPTlRYMl9BRiBpcyBub3Qgc2V0CiMgQ09ORklHX09DVEVPTlRYMl9QRiBpcyBub3Qgc2V0
CiMgQ09ORklHX1BSRVNURVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ZFTkRPUl9NRURJQVRF
SyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01FTExBTk9YPXkKQ09ORklHX01MWDRfRU49
bQpDT05GSUdfTUxYNF9DT1JFPW0KQ09ORklHX01MWDRfREVCVUc9eQpDT05GSUdfTUxYNF9DT1JF
X0dFTjI9eQpDT05GSUdfTUxYNV9DT1JFPW0KIyBDT05GSUdfTUxYNV9GUEdBIGlzIG5vdCBzZXQK
Q09ORklHX01MWDVfQ09SRV9FTj15CkNPTkZJR19NTFg1X0VOX0FSRlM9eQpDT05GSUdfTUxYNV9F
Tl9SWE5GQz15CkNPTkZJR19NTFg1X01QRlM9eQpDT05GSUdfTUxYNV9FU1dJVENIPXkKQ09ORklH
X01MWDVfQ0xTX0FDVD15CiMgQ09ORklHX01MWDVfQ09SRV9JUE9JQiBpcyBub3Qgc2V0CkNPTkZJ
R19NTFg1X1NXX1NURUVSSU5HPXkKIyBDT05GSUdfTUxYU1dfQ09SRSBpcyBub3Qgc2V0CiMgQ09O
RklHX01MWEZXIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMPXkKIyBDT05GSUdf
S1M4ODQyIGlzIG5vdCBzZXQKIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKIyBDT05GSUdfS1M4
ODUxX01MTCBpcyBub3Qgc2V0CiMgQ09ORklHX0tTWjg4NFhfUENJIGlzIG5vdCBzZXQKQ09ORklH
X05FVF9WRU5ET1JfTUlDUk9DSElQPXkKIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAojIENP
TkZJR19FTkNYMjRKNjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfTEFONzQzWCBpcyBub3Qgc2V0CkNP
TkZJR19ORVRfVkVORE9SX01JQ1JPU0VNST15CiMgQ09ORklHX01TQ0NfT0NFTE9UX1NXSVRDSCBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01ZUkk9eQojIENPTkZJR19NWVJJMTBHRSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX05BVFNF
TUk9eQojIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qg
c2V0CkNPTkZJR19ORVRfVkVORE9SX05FVEVSSU9OPXkKIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZYR0UgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9ORVRST05PTUU9eQoj
IENPTkZJR19ORlAgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9OST15CiMgQ09ORklHX05J
X1hHRV9NQU5BR0VNRU5UX0VORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl84MzkwPXkK
IyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9OVklESUE9eQoj
IENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9PS0k9eQojIENP
TkZJR19FVEhPQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1BBQ0tFVF9FTkdJTkVTPXkK
IyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0
CkNPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPPXkKIyBDT05GSUdfSU9OSUMgaXMgbm90IHNldApD
T05GSUdfTkVUX1ZFTkRPUl9RTE9HSUM9eQojIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIyBD
T05GSUdfUUxDTklDIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1FFRCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1FVQUxDT01NPXkKIyBDT05G
SUdfUUNBNzAwMF9TUEkgaXMgbm90IHNldAojIENPTkZJR19RQ0E3MDAwX1VBUlQgaXMgbm90IHNl
dApDT05GSUdfUUNPTV9FTUFDPW0KQ09ORklHX1JNTkVUPW0KQ09ORklHX05FVF9WRU5ET1JfUkRD
PXkKIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9SRUFMVEVLPXkK
IyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CiMg
Q09ORklHX1I4MTY5IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfUkVORVNBUz15CkNPTkZJ
R19TSF9FVEg9eQpDT05GSUdfUkFWQj15CkNPTkZJR19ORVRfVkVORE9SX1JPQ0tFUj15CiMgQ09O
RklHX1JPQ0tFUiBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1NBTVNVTkc9eQojIENPTkZJ
R19TWEdCRV9FVEggaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9TRUVRPXkKQ09ORklHX05F
VF9WRU5ET1JfU09MQVJGTEFSRT15CiMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NG
Q19GQUxDT04gaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9TSUxBTj15CiMgQ09ORklHX1ND
OTIwMzEgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9TSVM9eQojIENPTkZJR19TSVM5MDAg
aXMgbm90IHNldAojIENPTkZJR19TSVMxOTAgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9T
TVNDPXkKQ09ORklHX1NNQzkxWD15CiMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldApDT05GSUdf
U01TQzkxMVg9eQojIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9S
X1NPQ0lPTkVYVD15CkNPTkZJR19TTklfQVZFPXkKQ09ORklHX1NOSV9ORVRTRUM9eQpDT05GSUdf
TkVUX1ZFTkRPUl9TVE1JQ1JPPXkKQ09ORklHX1NUTU1BQ19FVEg9bQojIENPTkZJR19TVE1NQUNf
U0VMRlRFU1RTIGlzIG5vdCBzZXQKQ09ORklHX1NUTU1BQ19QTEFURk9STT1tCiMgQ09ORklHX0RX
TUFDX0RXQ19RT1NfRVRIIGlzIG5vdCBzZXQKQ09ORklHX0RXTUFDX0dFTkVSSUM9bQpDT05GSUdf
RFdNQUNfSVBRODA2WD1tCiMgQ09ORklHX0RXTUFDX01FRElBVEVLIGlzIG5vdCBzZXQKQ09ORklH
X0RXTUFDX01FU09OPW0KQ09ORklHX0RXTUFDX1FDT01fRVRIUU9TPW0KQ09ORklHX0RXTUFDX1JP
Q0tDSElQPW0KQ09ORklHX0RXTUFDX1NPQ0ZQR0E9bQpDT05GSUdfRFdNQUNfU1VOWEk9bQpDT05G
SUdfRFdNQUNfU1VOOEk9bQpDT05GSUdfRFdNQUNfSU1YOD1tCiMgQ09ORklHX0RXTUFDX0lOVEVM
X1BMQVQgaXMgbm90IHNldAojIENPTkZJR19TVE1NQUNfUENJIGlzIG5vdCBzZXQKQ09ORklHX05F
VF9WRU5ET1JfU1VOPXkKIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfU1VO
R0VNIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiMgQ09ORklHX05JVSBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTPXkKIyBDT05GSUdfRFdDX1hMR01B
QyBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1RFSFVUST15CiMgQ09ORklHX1RFSFVUSSBp
cyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1RJPXkKIyBDT05GSUdfVElfREFWSU5DSV9NRElP
IGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQ1BTV19QSFlfU0VMIGlzIG5vdCBzZXQKIyBDT05GSUdf
VElfSzNfQU02NV9DUFRTIGlzIG5vdCBzZXQKIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfVkVORE9SX1ZJQT15CiMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX1dJWk5FVD15CiMgQ09O
RklHX1dJWk5FVF9XNTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1dJWk5FVF9XNTMwMCBpcyBub3Qg
c2V0CkNPTkZJR19ORVRfVkVORE9SX1hJTElOWD15CiMgQ09ORklHX1hJTElOWF9BWElfRU1BQyBp
cyBub3Qgc2V0CiMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZE
REkgaXMgbm90IHNldAojIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1FDT01fSVBB
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0CkNPTkZJR19QSFlMSU5L
PXkKQ09ORklHX1BIWUxJQj15CkNPTkZJR19TV1BIWT15CiMgQ09ORklHX0xFRF9UUklHR0VSX1BI
WSBpcyBub3Qgc2V0CkNPTkZJR19GSVhFRF9QSFk9eQojIENPTkZJR19TRlAgaXMgbm90IHNldAoK
IwojIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKIwojIENPTkZJR19BTURfUEhZIGlzIG5vdCBzZXQK
Q09ORklHX01FU09OX0dYTF9QSFk9bQojIENPTkZJR19BRElOX1BIWSBpcyBub3Qgc2V0CkNPTkZJ
R19BUVVBTlRJQV9QSFk9eQojIENPTkZJR19BWDg4Nzk2Ql9QSFkgaXMgbm90IHNldApDT05GSUdf
QlJPQURDT01fUEhZPW0KIyBDT05GSUdfQkNNNTQxNDBfUEhZIGlzIG5vdCBzZXQKQ09ORklHX0JD
TTdYWFhfUEhZPW0KIyBDT05GSUdfQkNNODQ4ODFfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNN
ODdYWF9QSFkgaXMgbm90IHNldAojIENPTkZJR19CQ01fQ1lHTlVTX1BIWSBpcyBub3Qgc2V0CkNP
TkZJR19CQ01fTkVUX1BIWUxJQj1tCiMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAojIENP
TkZJR19DT1JUSU5BX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0xYVF9QSFkgaXMgbm90
IHNldAojIENPTkZJR19JTlRFTF9YV0FZX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0xTSV9FVDEw
MTFDX1BIWSBpcyBub3Qgc2V0CkNPTkZJR19NQVJWRUxMX1BIWT1tCkNPTkZJR19NQVJWRUxMXzEw
R19QSFk9bQpDT05GSUdfTUlDUkVMX1BIWT15CkNPTkZJR19NSUNST0NISVBfUEhZPW0KIyBDT05G
SUdfTUlDUk9DSElQX1QxX1BIWSBpcyBub3Qgc2V0CkNPTkZJR19NSUNST1NFTUlfUEhZPXkKIyBD
T05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTlhQX1RKQTExWFhfUEhZIGlz
IG5vdCBzZXQKQ09ORklHX0FUODAzWF9QSFk9eQojIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNl
dApDT05GSUdfUkVBTFRFS19QSFk9bQojIENPTkZJR19SRU5FU0FTX1BIWSBpcyBub3Qgc2V0CkNP
TkZJR19ST0NLQ0hJUF9QSFk9eQpDT05GSUdfU01TQ19QSFk9bQojIENPTkZJR19TVEUxMFhQIGlz
IG5vdCBzZXQKIyBDT05GSUdfVEVSQU5FVElDU19QSFkgaXMgbm90IHNldAojIENPTkZJR19EUDgz
ODIyX1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RQODNUQzgxMV9QSFkgaXMgbm90IHNldAojIENP
TkZJR19EUDgzODQ4X1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RQODM4NjdfUEhZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRFA4Mzg2OV9QSFkgaXMgbm90IHNldApDT05GSUdfVklURVNTRV9QSFk9eQoj
IENPTkZJR19YSUxJTlhfR01JSTJSR01JSSBpcyBub3Qgc2V0CiMgQ09ORklHX01JQ1JFTF9LUzg5
OTVNQSBpcyBub3Qgc2V0CkNPTkZJR19NRElPX0RFVklDRT15CkNPTkZJR19NRElPX0JVUz15CkNP
TkZJR19PRl9NRElPPXkKQ09ORklHX01ESU9fREVWUkVTPXkKIyBDT05GSUdfTURJT19TVU40SSBp
cyBub3Qgc2V0CkNPTkZJR19NRElPX1hHRU5FPXkKQ09ORklHX01ESU9fQklUQkFORz15CkNPTkZJ
R19NRElPX0JDTV9JUFJPQz15CkNPTkZJR19NRElPX0JDTV9VTklNQUM9bQpDT05GSUdfTURJT19D
QVZJVU09eQojIENPTkZJR19NRElPX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NRElPX0hJU0lf
RkVNQUMgaXMgbm90IHNldAojIENPTkZJR19NRElPX01WVVNCIGlzIG5vdCBzZXQKIyBDT05GSUdf
TURJT19NU0NDX01JSU0gaXMgbm90IHNldAojIENPTkZJR19NRElPX09DVEVPTiBpcyBub3Qgc2V0
CiMgQ09ORklHX01ESU9fSVBRNDAxOSBpcyBub3Qgc2V0CiMgQ09ORklHX01ESU9fSVBRODA2NCBp
cyBub3Qgc2V0CkNPTkZJR19NRElPX1RIVU5ERVI9eQoKIwojIE1ESU8gTXVsdGlwbGV4ZXJzCiMK
Q09ORklHX01ESU9fQlVTX01VWD15CkNPTkZJR19NRElPX0JVU19NVVhfTUVTT05fRzEyQT1tCkNP
TkZJR19NRElPX0JVU19NVVhfQkNNX0lQUk9DPXkKIyBDT05GSUdfTURJT19CVVNfTVVYX0dQSU8g
aXMgbm90IHNldApDT05GSUdfTURJT19CVVNfTVVYX01VTFRJUExFWEVSPXkKQ09ORklHX01ESU9f
QlVTX01VWF9NTUlPUkVHPXkKCiMKIyBQQ1MgZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdfUENTX1hQ
Q1M9bQpDT05GSUdfUENTX0xZTlg9eQojIGVuZCBvZiBQQ1MgZGV2aWNlIGRyaXZlcnMKCiMgQ09O
RklHX1BQUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NMSVAgaXMgbm90IHNldApDT05GSUdfVVNCX05F
VF9EUklWRVJTPXkKIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAojIENPTkZJR19VU0JfS0FX
RVRIIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9QRUdBU1VTPW0KQ09ORklHX1VTQl9SVEw4MTUwPW0K
Q09ORklHX1VTQl9SVEw4MTUyPW0KQ09ORklHX1VTQl9MQU43OFhYPW0KQ09ORklHX1VTQl9VU0JO
RVQ9bQpDT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhB
PW0KQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQojIENPTkZJR19VU0JfTkVUX0NEQ19FRU0gaXMg
bm90IHNldApDT05GSUdfVVNCX05FVF9DRENfTkNNPW0KIyBDT05GSUdfVVNCX05FVF9IVUFXRUlf
Q0RDX05DTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9ORVRfQ0RDX01CSU0gaXMgbm90IHNldApD
T05GSUdfVVNCX05FVF9ETTk2MDE9bQojIENPTkZJR19VU0JfTkVUX1NSOTcwMCBpcyBub3Qgc2V0
CkNPTkZJR19VU0JfTkVUX1NSOTgwMD1tCkNPTkZJR19VU0JfTkVUX1NNU0M3NVhYPW0KQ09ORklH
X1VTQl9ORVRfU01TQzk1WFg9bQojIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CkNP
TkZJR19VU0JfTkVUX05FVDEwODA9bQpDT05GSUdfVVNCX05FVF9QTFVTQj1tCkNPTkZJR19VU0Jf
TkVUX01DUzc4MzA9bQojIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldApDT05G
SUdfVVNCX05FVF9DRENfU1VCU0VUX0VOQUJMRT1tCkNPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9
bQojIENPTkZJR19VU0JfQUxJX001NjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0FOMjcyMCBp
cyBub3Qgc2V0CkNPTkZJR19VU0JfQkVMS0lOPXkKQ09ORklHX1VTQl9BUk1MSU5VWD15CiMgQ09O
RklHX1VTQl9FUFNPTjI4ODggaXMgbm90IHNldAojIENPTkZJR19VU0JfS0MyMTkwIGlzIG5vdCBz
ZXQKQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KIyBDT05GSUdfVVNCX05FVF9DWDgyMzEwX0VUSCBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9ORVRfS0FMTUlBIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X05FVF9RTUlfV1dBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAojIENP
TkZJR19VU0JfTkVUX0lOVDUxWDEgaXMgbm90IHNldAojIENPTkZJR19VU0JfSVBIRVRIIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1NJRVJSQV9ORVQgaXMgbm90IHNldAojIENPTkZJR19VU0JfVkw2
MDAgaXMgbm90IHNldAojIENPTkZJR19VU0JfTkVUX0NIOTIwMCBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9ORVRfQVFDMTExIGlzIG5vdCBzZXQKQ09ORklHX1dMQU49eQpDT05GSUdfV0xBTl9WRU5E
T1JfQURNVEVLPXkKIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0CkNPTkZJR19BVEhfQ09NTU9O
PW0KQ09ORklHX1dMQU5fVkVORE9SX0FUSD15CiMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINUtfUENJIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRIOUsgaXMgbm90IHNldAojIENPTkZJR19BVEg5S19IVEMgaXMgbm90IHNldAoj
IENPTkZJR19DQVJMOTE3MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDZLTCBpcyBub3Qgc2V0CiMg
Q09ORklHX0FSNTUyMyBpcyBub3Qgc2V0CiMgQ09ORklHX1dJTDYyMTAgaXMgbm90IHNldApDT05G
SUdfQVRIMTBLPW0KQ09ORklHX0FUSDEwS19DRT15CkNPTkZJR19BVEgxMEtfUENJPW0KIyBDT05G
SUdfQVRIMTBLX0FIQiBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDEwS19TRElPIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRIMTBLX1VTQiBpcyBub3Qgc2V0CkNPTkZJR19BVEgxMEtfU05PQz1tCiMgQ09O
RklHX0FUSDEwS19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDEwS19ERUJVR0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfQVRIMTBLX1RSQUNJTkcgaXMgbm90IHNldAojIENPTkZJR19XQ04zNlhY
IGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX0FUTUVMPXkKIyBDT05GSUdfQVRNRUwgaXMg
bm90IHNldAojIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldApDT05GSUdfV0xBTl9WRU5E
T1JfQlJPQURDT009eQojIENPTkZJR19CNDMgaXMgbm90IHNldAojIENPTkZJR19CNDNMRUdBQ1kg
aXMgbm90IHNldApDT05GSUdfQlJDTVVUSUw9bQojIENPTkZJR19CUkNNU01BQyBpcyBub3Qgc2V0
CkNPTkZJR19CUkNNRk1BQz1tCkNPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDPXkKQ09ORklHX0JS
Q01GTUFDX1NESU89eQojIENPTkZJR19CUkNNRk1BQ19VU0IgaXMgbm90IHNldAojIENPTkZJR19C
UkNNRk1BQ19QQ0lFIGlzIG5vdCBzZXQKIyBDT05GSUdfQlJDTV9UUkFDSU5HIGlzIG5vdCBzZXQK
IyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9DSVNDTz15CkNP
TkZJR19XTEFOX1ZFTkRPUl9JTlRFTD15CiMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAojIENP
TkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMNDk2NSBpcyBub3Qgc2V0CiMgQ09O
RklHX0lXTDM5NDUgaXMgbm90IHNldAojIENPTkZJR19JV0xXSUZJIGlzIG5vdCBzZXQKQ09ORklH
X1dMQU5fVkVORE9SX0lOVEVSU0lMPXkKIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIyBDT05G
SUdfSEVSTUVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiMgQ09O
RklHX1BSSVNNNTQgaXMgbm90IHNldApDT05GSUdfV0xBTl9WRU5ET1JfTUFSVkVMTD15CiMgQ09O
RklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90
IHNldApDT05GSUdfTVdJRklFWD1tCiMgQ09ORklHX01XSUZJRVhfU0RJTyBpcyBub3Qgc2V0CkNP
TkZJR19NV0lGSUVYX1BDSUU9bQojIENPTkZJR19NV0lGSUVYX1VTQiBpcyBub3Qgc2V0CiMgQ09O
RklHX01XTDhLIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX01FRElBVEVLPXkKIyBDT05G
SUdfTVQ3NjAxVSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzZ4MFUgaXMgbm90IHNldAojIENPTkZJ
R19NVDc2eDBFIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3NngyRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01UNzZ4MlUgaXMgbm90IHNldAojIENPTkZJR19NVDc2MDNFIGlzIG5vdCBzZXQKIyBDT05GSUdf
TVQ3NjE1RSBpcyBub3Qgc2V0CiMgQ09ORklHX01UNzY2M1UgaXMgbm90IHNldAojIENPTkZJR19N
VDc2NjNTIGlzIG5vdCBzZXQKIyBDT05GSUdfTVQ3OTE1RSBpcyBub3Qgc2V0CkNPTkZJR19XTEFO
X1ZFTkRPUl9NSUNST0NISVA9eQojIENPTkZJR19XSUxDMTAwMF9TRElPIGlzIG5vdCBzZXQKIyBD
T05GSUdfV0lMQzEwMDBfU1BJIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVORE9SX1JBTElOSz15
CiMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CkNPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLPXkK
IyBDT05GSUdfUlRMODE4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldApD
T05GSUdfUlRMX0NBUkRTPW0KIyBDT05GSUdfUlRMODE5MkNFIGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRMODE5MlNFIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRMODE5MkRFIGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRMODcyM0FFIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRMODcyM0JFIGlzIG5vdCBzZXQKIyBD
T05GSUdfUlRMODE4OEVFIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRMODE5MkVFIGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRMODgyMUFFIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRMODE5MkNVIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRMOFhYWFUgaXMgbm90IHNldAojIENPTkZJR19SVFc4OCBpcyBub3Qgc2V0
CkNPTkZJR19XTEFOX1ZFTkRPUl9SU0k9eQojIENPTkZJR19SU0lfOTFYIGlzIG5vdCBzZXQKQ09O
RklHX1dMQU5fVkVORE9SX1NUPXkKIyBDT05GSUdfQ1cxMjAwIGlzIG5vdCBzZXQKQ09ORklHX1dM
QU5fVkVORE9SX1RJPXkKIyBDT05GSUdfV0wxMjUxIGlzIG5vdCBzZXQKIyBDT05GSUdfV0wxMlhY
IGlzIG5vdCBzZXQKQ09ORklHX1dMMThYWD1tCkNPTkZJR19XTENPUkU9bQojIENPTkZJR19XTENP
UkVfU1BJIGlzIG5vdCBzZXQKQ09ORklHX1dMQ09SRV9TRElPPW0KQ09ORklHX1dJTElOS19QTEFU
Rk9STV9EQVRBPXkKQ09ORklHX1dMQU5fVkVORE9SX1pZREFTPXkKIyBDT05GSUdfVVNCX1pEMTIw
MSBpcyBub3Qgc2V0CiMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKQ09ORklHX1dMQU5fVkVO
RE9SX1FVQU5URU5OQT15CiMgQ09ORklHX1FUTkZNQUNfUENJRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlz
IG5vdCBzZXQKIyBDT05GSUdfVklSVF9XSUZJIGlzIG5vdCBzZXQKCiMKIyBFbmFibGUgV2lNQVgg
KE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiMKIyBDT05GSUdf
V0FOIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9ORVRERVZfRlJPTlRFTkQ9eQpDT05GSUdfWEVOX05F
VERFVl9CQUNLRU5EPXkKIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZVSklU
U1VfRVMgaXMgbm90IHNldAojIENPTkZJR19ORVRERVZTSU0gaXMgbm90IHNldApDT05GSUdfTkVU
X0ZBSUxPVkVSPXkKIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiMgQ09ORklHX05WTSBpcyBub3Qg
c2V0CgojCiMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKIwpDT05GSUdfSU5QVVQ9eQpDT05GSUdfSU5Q
VVRfTEVEUz15CkNPTkZJR19JTlBVVF9GRl9NRU1MRVNTPXkKQ09ORklHX0lOUFVUX1BPTExERVY9
bQojIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX01BVFJJ
WEtNQVA9eQoKIwojIFVzZXJsYW5kIGludGVyZmFjZXMKIwojIENPTkZJR19JTlBVVF9NT1VTRURF
ViBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CkNPTkZJR19JTlBV
VF9FVkRFVj15CiMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKCiMKIyBJbnB1dCBEZXZp
Y2UgRHJpdmVycwojCkNPTkZJR19JTlBVVF9LRVlCT0FSRD15CkNPTkZJR19LRVlCT0FSRF9BREM9
bQojIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRf
QURQNTU4OSBpcyBub3Qgc2V0CkNPTkZJR19LRVlCT0FSRF9BVEtCRD15CiMgQ09ORklHX0tFWUJP
QVJEX1FUMTA1MCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1FUMTA3MCBpcyBub3Qgc2V0
CiMgQ09ORklHX0tFWUJPQVJEX1FUMjE2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0RM
SU5LX0RJUjY4NSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQK
Q09ORklHX0tFWUJPQVJEX0dQSU89eQojIENPTkZJR19LRVlCT0FSRF9HUElPX1BPTExFRCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1RDQTY0MTYgaXMgbm90IHNldAojIENPTkZJR19LRVlC
T0FSRF9UQ0E4NDE4IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRf
TE04MzMzIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiMg
Q09ORklHX0tFWUJPQVJEX01DUyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX01QUjEyMSBp
cyBub3Qgc2V0CkNPTkZJR19LRVlCT0FSRF9TTlZTX1BXUktFWT1tCiMgQ09ORklHX0tFWUJPQVJE
X0lNWCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0lNWF9TQ19LRVkgaXMgbm90IHNldAoj
IENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9URUdS
QSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiMgQ09O
RklHX0tFWUJPQVJEX1NBTVNVTkcgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9TVE9XQVdB
WSBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiMgQ09ORklH
X0tFWUJPQVJEX1NVTjRJX0xSQURDIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfT01BUDQg
aXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9UTTJfVE9VQ0hLRVkgaXMgbm90IHNldAojIENP
TkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkNPTkZJR19LRVlCT0FSRF9DUk9TX0VDPXkK
IyBDT05GSUdfS0VZQk9BUkRfQ0FQMTFYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0JD
TSBpcyBub3Qgc2V0CkNPTkZJR19JTlBVVF9NT1VTRT15CkNPTkZJR19NT1VTRV9QUzI9eQpDT05G
SUdfTU9VU0VfUFMyX0FMUFM9eQpDT05GSUdfTU9VU0VfUFMyX0JZRD15CkNPTkZJR19NT1VTRV9Q
UzJfTE9HSVBTMlBQPXkKQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQpDT05GSUdfTU9VU0Vf
UFMyX1NZTkFQVElDU19TTUJVUz15CkNPTkZJR19NT1VTRV9QUzJfQ1lQUkVTUz15CkNPTkZJR19N
T1VTRV9QUzJfVFJBQ0tQT0lOVD15CiMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qg
c2V0CiMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNF
X1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9QUzJfRk9DQUxURUNIPXkKQ09O
RklHX01PVVNFX1BTMl9TTUJVUz15CiMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiMg
Q09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAojIENPTkZJR19NT1VTRV9CQ001OTc0
IGlzIG5vdCBzZXQKIyBDT05GSUdfTU9VU0VfQ1lBUEEgaXMgbm90IHNldAojIENPTkZJR19NT1VT
RV9FTEFOX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAoj
IENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0ky
QyBpcyBub3Qgc2V0CiMgQ09ORklHX01PVVNFX1NZTkFQVElDU19VU0IgaXMgbm90IHNldAojIENP
TkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBu
b3Qgc2V0CkNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CkNPTkZJR19UT1VDSFNDUkVFTl9QUk9Q
RVJUSUVTPXkKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiMgQ09ORklH
X1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3
OSBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1RPVUNIU0NSRUVOX0FSMTAyMV9JMkMgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fQVRN
RUxfTVhUPW0KIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfTVhUX1QzNyBpcyBub3Qgc2V0CiMg
Q09ORklHX1RPVUNIU0NSRUVOX0FVT19QSVhDSVIgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFND
UkVFTl9CVTIxMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQlUyMTAyOSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0NISVBPTkVfSUNOODMxOCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RPVUNIU0NSRUVOX0NISVBPTkVfSUNOODUwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0NZOENUTUExNDAgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DWThD
VE1HMTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQX0NPUkUgaXMgbm90
IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9DWVRUU1A0X0NPUkUgaXMgbm90IHNldAojIENPTkZJ
R19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSEFN
UFNISVJFIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CiMg
Q09ORklHX1RPVUNIU0NSRUVOX0VHQUxBWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVO
X0VHQUxBWF9TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9FWEMzMDAwIGlz
IG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiMgQ09ORklH
X1RPVUNIU0NSRUVOX0dPT0RJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0hJREVF
UCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0lMSTIxMFggaXMgbm90IHNldAojIENP
TkZJR19UT1VDSFNDUkVFTl9JUFJPQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1M2
U1k3NjEgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiMg
Q09ORklHX1RPVUNIU0NSRUVOX0VLVEYyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JF
RU5fRUxBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CiMg
Q09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hT
Q1JFRU5fV0FDT01fSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUFYMTE4MDEg
aXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fTU1TMTE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUVM
RkFTX01JUDQgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNl
dAojIENPTkZJR19UT1VDSFNDUkVFTl9JTVg2VUxfVFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9V
Q0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMg
bm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CiMgQ09ORklH
X1RPVUNIU0NSRUVOX0VEVF9GVDVYMDYgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9S
QVNQQkVSUllQSV9GVyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQg
aXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiMgQ09O
RklHX1RPVUNIU0NSRUVOX1BJWENJUiBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1dE
VDg3WFhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBp
cyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAojIENP
TkZJR19UT1VDSFNDUkVFTl9UU0NfU0VSSU8gaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVF
Tl9UU0MyMDA0IGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNSBpcyBub3Qg
c2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAojIENPTkZJR19UT1VD
SFNDUkVFTl9STV9UUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1NJTEVBRCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX1NJU19JMkMgaXMgbm90IHNldAojIENPTkZJR19U
T1VDSFNDUkVFTl9TVDEyMzIgaXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9TVE1GVFMg
aXMgbm90IHNldAojIENPTkZJR19UT1VDSFNDUkVFTl9TVU40SSBpcyBub3Qgc2V0CiMgQ09ORklH
X1RPVUNIU0NSRUVOX1NVUjQwIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSRkFD
RTNfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1g4NjU0IGlzIG5vdCBzZXQK
IyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFBTNjUwN1ggaXMgbm90IHNldAojIENPTkZJR19UT1VDSFND
UkVFTl9aRVQ2MjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fWkZPUkNFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUk9ITV9CVTIxMDIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfVE9VQ0hTQ1JFRU5fSVFTNVhYIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fWklO
SVRJWCBpcyBub3Qgc2V0CkNPTkZJR19JTlBVVF9NSVNDPXkKIyBDT05GSUdfSU5QVVRfQUQ3MTRY
IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQVRNRUxfQ0FQVE9VQ0ggaXMgbm90IHNldAojIENP
TkZJR19JTlBVVF9CTUExNTAgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9FM1gwX0JVVFRPTiBp
cyBub3Qgc2V0CkNPTkZJR19JTlBVVF9QTTg5NDFfUFdSS0VZPXkKQ09ORklHX0lOUFVUX1BNOFhY
WF9WSUJSQVRPUj1tCiMgQ09ORklHX0lOUFVUX01NQTg0NTAgaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9HUElPX0JFRVBFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fREVDT0RFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVklCUkEgaXMgbm90IHNldAojIENPTkZJR19J
TlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RF
IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfS1hUSjkgaXMgbm90IHNldAojIENPTkZJR19JTlBV
VF9QT1dFUk1BVEUgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQK
IyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9SRUdVTEFUT1Jf
SEFQVElDIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQVhQMjBYX1BFSyBpcyBub3Qgc2V0CiMg
Q09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX1BDRjg1NzQgaXMg
bm90IHNldAojIENPTkZJR19JTlBVVF9QV01fQkVFUEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5Q
VVRfUFdNX1ZJQlJBIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfUks4MDVfUFdSS0VZIGlzIG5v
dCBzZXQKIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9JTVNfUENVIGlzIG5v
dCBzZXQKIyBDT05GSUdfSU5QVVRfSVFTMjY5QSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0NN
QTMwMDAgaXMgbm90IHNldApDT05GSUdfSU5QVVRfWEVOX0tCRERFVl9GUk9OVEVORD15CiMgQ09O
RklHX0lOUFVUX1NPQ19CVVRUT05fQVJSQVkgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9EUlYy
NjBYX0hBUFRJQ1MgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9EUlYyNjY1X0hBUFRJQ1MgaXMg
bm90IHNldAojIENPTkZJR19JTlBVVF9EUlYyNjY3X0hBUFRJQ1MgaXMgbm90IHNldApDT05GSUdf
SU5QVVRfSElTSV9QT1dFUktFWT15CiMgQ09ORklHX1JNSTRfQ09SRSBpcyBub3Qgc2V0CgojCiMg
SGFyZHdhcmUgSS9PIHBvcnRzCiMKQ09ORklHX1NFUklPPXkKIyBDT05GSUdfU0VSSU9fU0VSUE9S
VCBpcyBub3Qgc2V0CkNPTkZJR19TRVJJT19BTUJBS01JPXkKIyBDT05GSUdfU0VSSU9fUENJUFMy
IGlzIG5vdCBzZXQKQ09ORklHX1NFUklPX0xJQlBTMj15CiMgQ09ORklHX1NFUklPX1JBVyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAojIENPTkZJR19TRVJJ
T19QUzJNVUxUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSU9fQVJDX1BTMiBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFUklPX0FQQlBTMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX1NVTjRJX1BTMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0dQSU9fUFMyIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNF
UklPIGlzIG5vdCBzZXQKIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAojIGVuZCBvZiBIYXJk
d2FyZSBJL08gcG9ydHMKIyBlbmQgb2YgSW5wdXQgZGV2aWNlIHN1cHBvcnQKCiMKIyBDaGFyYWN0
ZXIgZGV2aWNlcwojCkNPTkZJR19UVFk9eQpDT05GSUdfVlQ9eQpDT05GSUdfQ09OU09MRV9UUkFO
U0xBVElPTlM9eQpDT05GSUdfVlRfQ09OU09MRT15CkNPTkZJR19WVF9DT05TT0xFX1NMRUVQPXkK
Q09ORklHX0hXX0NPTlNPTEU9eQpDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKQ09ORklH
X1VOSVg5OF9QVFlTPXkKQ09ORklHX0xFR0FDWV9QVFlTPXkKQ09ORklHX0xFR0FDWV9QVFlfQ09V
TlQ9MTYKQ09ORklHX0xESVNDX0FVVE9MT0FEPXkKCiMKIyBTZXJpYWwgZHJpdmVycwojCkNPTkZJ
R19TRVJJQUxfRUFSTFlDT049eQpDT05GSUdfU0VSSUFMXzgyNTA9eQpDT05GSUdfU0VSSUFMXzgy
NTBfREVQUkVDQVRFRF9PUFRJT05TPXkKQ09ORklHX1NFUklBTF84MjUwX1BOUD15CiMgQ09ORklH
X1NFUklBTF84MjUwXzE2NTUwQV9WQVJJQU5UUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF84
MjUwX0ZJTlRFSyBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQ09ORklH
X1NFUklBTF84MjUwX0RNQT15CkNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFM
XzgyNTBfRVhBUj15CkNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CkNPTkZJR19TRVJJQUxf
ODI1MF9SVU5USU1FX1VBUlRTPTQKQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIyBDT05G
SUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF84MjUw
X0FTUEVFRF9WVUFSVCBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQoj
IENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFM
XzgyNTBfUlNBIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF84MjUwX0RXTElCPXkKQ09ORklHX1NF
UklBTF84MjUwX0JDTTI4MzVBVVg9eQpDT05GSUdfU0VSSUFMXzgyNTBfRlNMPXkKQ09ORklHX1NF
UklBTF84MjUwX0RXPXkKIyBDT05GSUdfU0VSSUFMXzgyNTBfUlQyODhYIGlzIG5vdCBzZXQKQ09O
RklHX1NFUklBTF84MjUwX09NQVA9eQpDT05GSUdfU0VSSUFMXzgyNTBfT01BUF9UVFlPX0ZJWFVQ
PXkKQ09ORklHX1NFUklBTF84MjUwX01UNjU3Nz15CkNPTkZJR19TRVJJQUxfODI1MF9VTklQSElF
Uj15CkNPTkZJR19TRVJJQUxfODI1MF9URUdSQT15CkNPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09
eQoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwojIENPTkZJR19TRVJJQUxfQU1C
QV9QTDAxMCBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CkNPTkZJR19TRVJJ
QUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKIyBDT05GSUdfU0VSSUFMX0VBUkxZQ09OX0FSTV9TRU1J
SE9TVCBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfTUVTT049eQpDT05GSUdfU0VSSUFMX01FU09O
X0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQpDT05GSUdfU0VSSUFMX1NBTVNVTkdf
VUFSVFNfND15CkNPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUz00CkNPTkZJR19TRVJJQUxfU0FN
U1VOR19DT05TT0xFPXkKQ09ORklHX1NFUklBTF9URUdSQT15CkNPTkZJR19TRVJJQUxfVEVHUkFf
VENVPXkKQ09ORklHX1NFUklBTF9URUdSQV9UQ1VfQ09OU09MRT15CiMgQ09ORklHX1NFUklBTF9N
QVgzMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX01BWDMxMFggaXMgbm90IHNldApDT05G
SUdfU0VSSUFMX0lNWD15CkNPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEU9eQpDT05GSUdfU0VSSUFM
X0lNWF9FQVJMWUNPTj15CiMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CkNPTkZJ
R19TRVJJQUxfU0hfU0NJPXkKQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MTgKQ09ORklH
X1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CkNPTkZJR19TRVJJQUxfU0hfU0NJX0VBUkxZQ09OPXkK
Q09ORklHX1NFUklBTF9TSF9TQ0lfRE1BPXkKQ09ORklHX1NFUklBTF9DT1JFPXkKQ09ORklHX1NF
UklBTF9DT1JFX0NPTlNPTEU9eQojIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF9NU009eQpDT05GSUdfU0VSSUFMX01TTV9DT05TT0xFPXkKQ09ORklHX1NFUklBTF9R
Q09NX0dFTkk9eQpDT05GSUdfU0VSSUFMX1FDT01fR0VOSV9DT05TT0xFPXkKIyBDT05GSUdfU0VS
SUFMX1NJRklWRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9TQ0NOWFAgaXMgbm90IHNldAoj
IENPTkZJR19TRVJJQUxfU0MxNklTN1hYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX0FMVEVS
QV9KVEFHVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFUklBTF9JRlg2WDYwIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9YSUxJ
TlhfUFNfVUFSVD15CkNPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlRfQ09OU09MRT15CiMgQ09O
RklHX1NFUklBTF9BUkMgaXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfUlAyIGlzIG5vdCBzZXQK
Q09ORklHX1NFUklBTF9GU0xfTFBVQVJUPXkKQ09ORklHX1NFUklBTF9GU0xfTFBVQVJUX0NPTlNP
TEU9eQpDT05GSUdfU0VSSUFMX0ZTTF9MSU5GTEVYVUFSVD15CkNPTkZJR19TRVJJQUxfRlNMX0xJ
TkZMRVhVQVJUX0NPTlNPTEU9eQojIENPTkZJR19TRVJJQUxfQ09ORVhBTlRfRElHSUNPTE9SIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VSSUFMX1NQUkQgaXMgbm90IHNldApDT05GSUdfU0VSSUFMX01W
RUJVX1VBUlQ9eQpDT05GSUdfU0VSSUFMX01WRUJVX0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX09X
TD15CkNPTkZJR19TRVJJQUxfT1dMX0NPTlNPTEU9eQojIGVuZCBvZiBTZXJpYWwgZHJpdmVycwoK
Q09ORklHX1NFUklBTF9NQ1RSTF9HUElPPXkKIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlz
IG5vdCBzZXQKIyBDT05GSUdfTl9HU00gaXMgbm90IHNldAojIENPTkZJR19OT1pPTUkgaXMgbm90
IHNldAojIENPTkZJR19OVUxMX1RUWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RSQUNFX1NJTksgaXMg
bm90IHNldApDT05GSUdfSFZDX0RSSVZFUj15CkNPTkZJR19IVkNfSVJRPXkKQ09ORklHX0hWQ19Y
RU49eQpDT05GSUdfSFZDX1hFTl9GUk9OVEVORD15CiMgQ09ORklHX0hWQ19EQ0MgaXMgbm90IHNl
dApDT05GSUdfU0VSSUFMX0RFVl9CVVM9eQpDT05GSUdfU0VSSUFMX0RFVl9DVFJMX1RUWVBPUlQ9
eQpDT05GSUdfVklSVElPX0NPTlNPTEU9eQpDT05GSUdfSVBNSV9IQU5ETEVSPW0KQ09ORklHX0lQ
TUlfRE1JX0RFQ09ERT15CkNPTkZJR19JUE1JX1BMQVRfREFUQT15CiMgQ09ORklHX0lQTUlfUEFO
SUNfRVZFTlQgaXMgbm90IHNldApDT05GSUdfSVBNSV9ERVZJQ0VfSU5URVJGQUNFPW0KQ09ORklH
X0lQTUlfU0k9bQojIENPTkZJR19JUE1JX1NTSUYgaXMgbm90IHNldAojIENPTkZJR19JUE1JX1dB
VENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBNSV9QT1dFUk9GRiBpcyBub3Qgc2V0CiMgQ09O
RklHX0lQTUJfREVWSUNFX0lOVEVSRkFDRSBpcyBub3Qgc2V0CkNPTkZJR19IV19SQU5ET009bQoj
IENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiMgQ09ORklHX0hXX1JBTkRP
TV9CQTQzMSBpcyBub3Qgc2V0CkNPTkZJR19IV19SQU5ET01fQkNNMjgzNT1tCkNPTkZJR19IV19S
QU5ET01fSVBST0NfUk5HMjAwPW0KQ09ORklHX0hXX1JBTkRPTV9PTUFQPW0KIyBDT05GSUdfSFdf
UkFORE9NX1ZJUlRJTyBpcyBub3Qgc2V0CkNPTkZJR19IV19SQU5ET01fSElTST1tCkNPTkZJR19I
V19SQU5ET01fSElTSV9WMj1tCkNPTkZJR19IV19SQU5ET01fWEdFTkU9bQpDT05GSUdfSFdfUkFO
RE9NX01FU09OPW0KQ09ORklHX0hXX1JBTkRPTV9DQVZJVU09bQpDT05GSUdfSFdfUkFORE9NX01U
Sz1tCkNPTkZJR19IV19SQU5ET01fRVhZTk9TPW0KQ09ORklHX0hXX1JBTkRPTV9PUFRFRT1tCiMg
Q09ORklHX0hXX1JBTkRPTV9DQ1RSTkcgaXMgbm90IHNldAojIENPTkZJR19IV19SQU5ET01fWElQ
SEVSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQ09ORklHX0RFVk1F
TT15CiMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApDT05GSUdfREVWUE9SVD15CkNPTkZJ
R19UQ0dfVFBNPXkKIyBDT05GSUdfVENHX1RJUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RDR19USVNf
U1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX1RJU19TWU5RVUFDRVIgaXMgbm90IHNldAojIENP
TkZJR19UQ0dfVElTX0kyQ19BVE1FTCBpcyBub3Qgc2V0CkNPTkZJR19UQ0dfVElTX0kyQ19JTkZJ
TkVPTj15CiMgQ09ORklHX1RDR19USVNfSTJDX05VVk9UT04gaXMgbm90IHNldAojIENPTkZJR19U
Q0dfQVRNRUwgaXMgbm90IHNldAojIENPTkZJR19UQ0dfSU5GSU5FT04gaXMgbm90IHNldAojIENP
TkZJR19UQ0dfWEVOIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX0NSQiBpcyBub3Qgc2V0CiMgQ09O
RklHX1RDR19WVFBNX1BST1hZIGlzIG5vdCBzZXQKIyBDT05GSUdfVENHX0ZUUE1fVEVFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVENHX1RJU19TVDMzWlAyNF9JMkMgaXMgbm90IHNldAojIENPTkZJR19U
Q0dfVElTX1NUMzNaUDI0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1hJTExZQlVTIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgQ2hhcmFjdGVyIGRldmljZXMKCiMgQ09ORklHX1JBTkRPTV9UUlVTVF9DUFUg
aXMgbm90IHNldAojIENPTkZJR19SQU5ET01fVFJVU1RfQk9PVExPQURFUiBpcyBub3Qgc2V0Cgoj
CiMgSTJDIHN1cHBvcnQKIwpDT05GSUdfSTJDPXkKQ09ORklHX0FDUElfSTJDX09QUkVHSU9OPXkK
Q09ORklHX0kyQ19CT0FSRElORk89eQpDT05GSUdfSTJDX0NPTVBBVD15CkNPTkZJR19JMkNfQ0hB
UkRFVj15CkNPTkZJR19JMkNfTVVYPXkKCiMKIyBNdWx0aXBsZXhlciBJMkMgQ2hpcCBzdXBwb3J0
CiMKIyBDT05GSUdfSTJDX0FSQl9HUElPX0NIQUxMRU5HRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ky
Q19NVVhfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19NVVhfR1BNVVggaXMgbm90IHNldAoj
IENPTkZJR19JMkNfTVVYX0xUQzQzMDYgaXMgbm90IHNldAojIENPTkZJR19JMkNfTVVYX1BDQTk1
NDEgaXMgbm90IHNldApDT05GSUdfSTJDX01VWF9QQ0E5NTR4PXkKIyBDT05GSUdfSTJDX01VWF9Q
SU5DVFJMIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9SRUcgaXMgbm90IHNldAojIENPTkZJ
R19JMkNfREVNVVhfUElOQ1RSTCBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19NVVhfTUxYQ1BMRCBp
cyBub3Qgc2V0CiMgZW5kIG9mIE11bHRpcGxleGVyIEkyQyBDaGlwIHN1cHBvcnQKCkNPTkZJR19J
MkNfSEVMUEVSX0FVVE89eQpDT05GSUdfSTJDX1NNQlVTPXkKQ09ORklHX0kyQ19BTEdPQklUPXkK
CiMKIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKIwoKIwojIFBDIFNNQnVzIGhvc3QgY29udHJv
bGxlciBkcml2ZXJzCiMKIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAojIENPTkZJR19J
MkNfQUxJMTU2MyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSTJDX0FNRF9NUDIgaXMgbm90IHNldAojIENPTkZJR19JMkNfSElYNUhEMiBp
cyBub3Qgc2V0CiMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0lTQ0gg
aXMgbm90IHNldAojIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAojIENPTkZJR19JMkNfTkZP
UkNFMiBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19OVklESUFfR1BVIGlzIG5vdCBzZXQKIyBDT05G
SUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAojIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQK
IyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNl
dAojIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKCiMKIyBBQ1BJIGRyaXZlcnMKIwojIENP
TkZJR19JMkNfU0NNSSBpcyBub3Qgc2V0CgojCiMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9z
dGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiMKQ09ORklHX0kyQ19CQ00yODM1PW0KQ09O
RklHX0kyQ19CQ01fSVBST0M9eQpDT05GSUdfSTJDX0JSQ01TVEI9eQojIENPTkZJR19JMkNfQ0FE
RU5DRSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19DQlVTX0dQSU8gaXMgbm90IHNldApDT05GSUdf
STJDX0RFU0lHTldBUkVfQ09SRT15CiMgQ09ORklHX0kyQ19ERVNJR05XQVJFX1NMQVZFIGlzIG5v
dCBzZXQKQ09ORklHX0kyQ19ERVNJR05XQVJFX1BMQVRGT1JNPXkKIyBDT05GSUdfSTJDX0RFU0lH
TldBUkVfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0VNRVYyIGlzIG5vdCBzZXQKQ09ORklH
X0kyQ19FWFlOT1M1PXkKQ09ORklHX0kyQ19HUElPPW0KIyBDT05GSUdfSTJDX0dQSU9fRkFVTFRf
SU5KRUNUT1IgaXMgbm90IHNldApDT05GSUdfSTJDX0lNWD15CkNPTkZJR19JMkNfSU1YX0xQSTJD
PXkKQ09ORklHX0kyQ19NRVNPTj15CiMgQ09ORklHX0kyQ19NVDY1WFggaXMgbm90IHNldApDT05G
SUdfSTJDX01WNjRYWFg9eQojIENPTkZJR19JMkNfTk9NQURJSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0kyQ19PQ09SRVMgaXMgbm90IHNldAojIENPTkZJR19JMkNfT01BUCBpcyBub3Qgc2V0CkNPTkZJ
R19JMkNfT1dMPXkKIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkNPTkZJR19J
MkNfUFhBPXkKIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19R
Q09NX0NDSSBpcyBub3Qgc2V0CkNPTkZJR19JMkNfUUNPTV9HRU5JPW0KQ09ORklHX0kyQ19RVVA9
eQojIENPTkZJR19JMkNfUklJQyBpcyBub3Qgc2V0CkNPTkZJR19JMkNfUkszWD15CkNPTkZJR19J
MkNfU0hfTU9CSUxFPXkKIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ky
Q19TUFJEIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1NZTlFVQUNFUiBpcyBub3Qgc2V0CkNPTkZJ
R19JMkNfVEVHUkE9eQpDT05GSUdfSTJDX1RFR1JBX0JQTVA9eQojIENPTkZJR19JMkNfVU5JUEhJ
RVIgaXMgbm90IHNldApDT05GSUdfSTJDX1VOSVBISUVSX0Y9eQojIENPTkZJR19JMkNfVkVSU0FU
SUxFIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1RIVU5ERVJYIGlzIG5vdCBzZXQKIyBDT05GSUdf
STJDX1hJTElOWCBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19YTFA5WFggaXMgbm90IHNldApDT05G
SUdfSTJDX1JDQVI9eQoKIwojIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKIwoj
IENPTkZJR19JMkNfRElPTEFOX1UyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19ST0JPVEZVWlpf
T1NJRiBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiMgQ09ORklH
X0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CgojCiMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJz
CiMKQ09ORklHX0kyQ19DUk9TX0VDX1RVTk5FTD15CiMgQ09ORklHX0kyQ19YR0VORV9TTElNUFJP
IGlzIG5vdCBzZXQKQ09ORklHX0kyQ19aWDI5Njc9eQojIGVuZCBvZiBJMkMgSGFyZHdhcmUgQnVz
IHN1cHBvcnQKCiMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKQ09ORklHX0kyQ19TTEFWRT15
CiMgQ09ORklHX0kyQ19TTEFWRV9FRVBST00gaXMgbm90IHNldAojIENPTkZJR19JMkNfU0xBVkVf
VEVTVFVOSVQgaXMgbm90IHNldAojIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiMg
Q09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBp
cyBub3Qgc2V0CiMgZW5kIG9mIEkyQyBzdXBwb3J0CgojIENPTkZJR19JM0MgaXMgbm90IHNldApD
T05GSUdfU1BJPXkKIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9NQVNU
RVI9eQpDT05GSUdfU1BJX01FTT15CgojCiMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMK
IwojIENPTkZJR19TUElfQUxURVJBIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9BUk1BREFfMzcwMD15
CiMgQ09ORklHX1NQSV9BWElfU1BJX0VOR0lORSBpcyBub3Qgc2V0CkNPTkZJR19TUElfQkNNMjgz
NT1tCkNPTkZJR19TUElfQkNNMjgzNUFVWD1tCkNPTkZJR19TUElfQkNNX1FTUEk9eQpDT05GSUdf
U1BJX0JJVEJBTkc9bQojIENPTkZJR19TUElfQ0FERU5DRSBpcyBub3Qgc2V0CkNPTkZJR19TUElf
Q0FERU5DRV9RVUFEU1BJPXkKIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldApDT05G
SUdfU1BJX0ZTTF9MUFNQST15CkNPTkZJR19TUElfRlNMX1FVQURTUEk9eQojIENPTkZJR19TUElf
SElTSV9TRkNfVjNYWCBpcyBub3Qgc2V0CkNPTkZJR19TUElfTlhQX0ZMRVhTUEk9eQojIENPTkZJ
R19TUElfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19TUElfSU1YPW0KIyBDT05GSUdfU1BJX0ZTTF9T
UEkgaXMgbm90IHNldApDT05GSUdfU1BJX0ZTTF9EU1BJPXkKQ09ORklHX1NQSV9NRVNPTl9TUElD
Qz1tCkNPTkZJR19TUElfTUVTT05fU1BJRkM9bQojIENPTkZJR19TUElfTVQ2NVhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1BJX01US19OT1IgaXMgbm90IHNldAojIENPTkZJR19TUElfT0NfVElOWSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NQSV9PTUFQMjRYWCBpcyBub3Qgc2V0CkNPTkZJR19TUElfT1JJ
T049eQpDT05GSUdfU1BJX1BMMDIyPXkKIyBDT05GSUdfU1BJX1BYQTJYWCBpcyBub3Qgc2V0CkNP
TkZJR19TUElfUk9DS0NISVA9eQojIENPTkZJR19TUElfUlNQSSBpcyBub3Qgc2V0CkNPTkZJR19T
UElfUUNPTV9RU1BJPW0KQ09ORklHX1NQSV9RVVA9eQpDT05GSUdfU1BJX1FDT01fR0VOST1tCkNP
TkZJR19TUElfUzNDNjRYWD15CiMgQ09ORklHX1NQSV9TQzE4SVM2MDIgaXMgbm90IHNldApDT05G
SUdfU1BJX1NIX01TSU9GPW0KIyBDT05GSUdfU1BJX1NIX0hTUEkgaXMgbm90IHNldAojIENPTkZJ
R19TUElfU0lGSVZFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1NQUkQgaXMgbm90IHNldAojIENP
TkZJR19TUElfU1BSRF9BREkgaXMgbm90IHNldAojIENPTkZJR19TUElfU1VONEkgaXMgbm90IHNl
dApDT05GSUdfU1BJX1NVTjZJPXkKIyBDT05GSUdfU1BJX1NZTlFVQUNFUiBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9NWElDIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1RFR1JBMTE0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1BJX1RFR1JBMjBfU0ZMQVNIIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1RF
R1JBMjBfU0xJTksgaXMgbm90IHNldAojIENPTkZJR19TUElfVEhVTkRFUlggaXMgbm90IHNldAoj
IENPTkZJR19TUElfVU5JUEhJRVIgaXMgbm90IHNldAojIENPTkZJR19TUElfWENPTU0gaXMgbm90
IHNldAojIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1hMUCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9aWU5RTVBfR1FTUEkgaXMgbm90IHNldAojIENPTkZJR19TUElf
QU1EIGlzIG5vdCBzZXQKCiMKIyBTUEkgTXVsdGlwbGV4ZXIgc3VwcG9ydAojCiMgQ09ORklHX1NQ
SV9NVVggaXMgbm90IHNldAoKIwojIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiMKQ09ORklHX1NQSV9T
UElERVY9bQojIENPTkZJR19TUElfTE9PUEJBQ0tfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NQ
SV9UTEU2MlgwIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1NMQVZFIGlzIG5vdCBzZXQKQ09ORklH
X1NQSV9EWU5BTUlDPXkKQ09ORklHX1NQTUk9eQpDT05GSUdfU1BNSV9NU01fUE1JQ19BUkI9eQoj
IENPTkZJR19IU0kgaXMgbm90IHNldApDT05GSUdfUFBTPXkKIyBDT05GSUdfUFBTX0RFQlVHIGlz
IG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBDT05GSUdfUFBTX0NMSUVOVF9L
VElNRVIgaXMgbm90IHNldAojIENPTkZJR19QUFNfQ0xJRU5UX0xESVNDIGlzIG5vdCBzZXQKIyBD
T05GSUdfUFBTX0NMSUVOVF9HUElPIGlzIG5vdCBzZXQKCiMKIyBQUFMgZ2VuZXJhdG9ycyBzdXBw
b3J0CiMKCiMKIyBQVFAgY2xvY2sgc3VwcG9ydAojCkNPTkZJR19QVFBfMTU4OF9DTE9DSz15CkNP
TkZJR19QVFBfMTU4OF9DTE9DS19EVEU9eQpDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfUU9SSVE9eQoK
IwojIEVuYWJsZSBQSFlMSUIgYW5kIE5FVFdPUktfUEhZX1RJTUVTVEFNUElORyB0byBzZWUgdGhl
IGFkZGl0aW9uYWwgY2xvY2tzLgojCiMgQ09ORklHX1BUUF8xNTg4X0NMT0NLX0lEVDgyUDMzIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfSURUQ00gaXMgbm90IHNldAojIGVuZCBv
ZiBQVFAgY2xvY2sgc3VwcG9ydAoKQ09ORklHX1BJTkNUUkw9eQpDT05GSUdfR0VORVJJQ19QSU5D
VFJMX0dST1VQUz15CkNPTkZJR19QSU5NVVg9eQpDT05GSUdfR0VORVJJQ19QSU5NVVhfRlVOQ1RJ
T05TPXkKQ09ORklHX1BJTkNPTkY9eQpDT05GSUdfR0VORVJJQ19QSU5DT05GPXkKIyBDT05GSUdf
REVCVUdfUElOQ1RSTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfQVhQMjA5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfUElOQ1RSTF9BTUQgaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJMX01DUDIz
UzA4IGlzIG5vdCBzZXQKQ09ORklHX1BJTkNUUkxfUk9DS0NISVA9eQpDT05GSUdfUElOQ1RSTF9T
SU5HTEU9eQojIENPTkZJR19QSU5DVFJMX1NYMTUwWCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNU
UkxfU1RNRlggaXMgbm90IHNldApDT05GSUdfUElOQ1RSTF9NQVg3NzYyMD15CiMgQ09ORklHX1BJ
TkNUUkxfUks4MDUgaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJMX09DRUxPVCBpcyBub3Qgc2V0
CkNPTkZJR19QSU5DVFJMX09XTD15CiMgQ09ORklHX1BJTkNUUkxfUzUwMCBpcyBub3Qgc2V0CkNP
TkZJR19QSU5DVFJMX1M3MDA9eQpDT05GSUdfUElOQ1RSTF9TOTAwPXkKQ09ORklHX1BJTkNUUkxf
QkNNMjgzNT15CkNPTkZJR19QSU5DVFJMX0lQUk9DX0dQSU89eQpDT05GSUdfUElOQ1RSTF9OUzJf
TVVYPXkKIyBDT05GSUdfUElOQ1RSTF9BUzM3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxf
QkVSTElOX0JHNENUIGlzIG5vdCBzZXQKQ09ORklHX1BJTkNUUkxfSU1YPXkKQ09ORklHX1BJTkNU
UkxfSU1YX1NDVT15CkNPTkZJR19QSU5DVFJMX0lNWDhNTT15CkNPTkZJR19QSU5DVFJMX0lNWDhN
Tj15CiMgQ09ORklHX1BJTkNUUkxfSU1YOE1QIGlzIG5vdCBzZXQKQ09ORklHX1BJTkNUUkxfSU1Y
OE1RPXkKIyBDT05GSUdfUElOQ1RSTF9JTVg4UU0gaXMgbm90IHNldApDT05GSUdfUElOQ1RSTF9J
TVg4UVhQPXkKIyBDT05GSUdfUElOQ1RSTF9JTVg4RFhMIGlzIG5vdCBzZXQKQ09ORklHX1BJTkNU
UkxfTVZFQlU9eQpDT05GSUdfUElOQ1RSTF9BUk1BREFfQVA4MDY9eQpDT05GSUdfUElOQ1RSTF9B
Uk1BREFfQ1AxMTA9eQpDT05GSUdfUElOQ1RSTF9BUk1BREFfMzdYWD15CkNPTkZJR19QSU5DVFJM
X01TTT15CiMgQ09ORklHX1BJTkNUUkxfQVBRODA2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNU
UkxfQVBRODA4NCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfSVBRNDAxOSBpcyBub3Qgc2V0
CiMgQ09ORklHX1BJTkNUUkxfSVBRODA2NCBpcyBub3Qgc2V0CkNPTkZJR19QSU5DVFJMX0lQUTgw
NzQ9eQojIENPTkZJR19QSU5DVFJMX0lQUTYwMTggaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJM
X01TTTgyMjYgaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJMX01TTTg2NjAgaXMgbm90IHNldAoj
IENPTkZJR19QSU5DVFJMX01TTTg5NjAgaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJMX01ETTk2
MTUgaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJMX01TTThYNzQgaXMgbm90IHNldApDT05GSUdf
UElOQ1RSTF9NU004OTE2PXkKIyBDT05GSUdfUElOQ1RSTF9NU004OTc2IGlzIG5vdCBzZXQKQ09O
RklHX1BJTkNUUkxfTVNNODk5ND15CkNPTkZJR19QSU5DVFJMX01TTTg5OTY9eQpDT05GSUdfUElO
Q1RSTF9NU004OTk4PXkKQ09ORklHX1BJTkNUUkxfUUNTNDA0PXkKQ09ORklHX1BJTkNUUkxfUURG
MlhYWD15CkNPTkZJR19QSU5DVFJMX1FDT01fU1BNSV9QTUlDPXkKIyBDT05GSUdfUElOQ1RSTF9R
Q09NX1NTQklfUE1JQyBpcyBub3Qgc2V0CkNPTkZJR19QSU5DVFJMX1NDNzE4MD15CiMgQ09ORklH
X1BJTkNUUkxfU0RNNjYwIGlzIG5vdCBzZXQKQ09ORklHX1BJTkNUUkxfU0RNODQ1PXkKQ09ORklH
X1BJTkNUUkxfU004MTUwPXkKIyBDT05GSUdfUElOQ1RSTF9TTTgyNTAgaXMgbm90IHNldAoKIwoj
IFJlbmVzYXMgcGluY3RybCBkcml2ZXJzCiMKQ09ORklHX1BJTkNUUkxfUkVORVNBUz15CkNPTkZJ
R19QSU5DVFJMX1NIX1BGQz15CkNPTkZJR19QSU5DVFJMX1BGQ19SOEE3Nzk5NT15CkNPTkZJR19Q
SU5DVFJMX1BGQ19SOEE3Nzk5MD15CkNPTkZJR19QSU5DVFJMX1BGQ19SOEE3Nzk2NT15CkNPTkZJ
R19QSU5DVFJMX1BGQ19SOEE3Nzk4MD15CkNPTkZJR19QSU5DVFJMX1BGQ19SOEE3Nzk3MD15CkNP
TkZJR19QSU5DVFJMX1BGQ19SOEE3NzRDMD15CkNPTkZJR19QSU5DVFJMX1BGQ19SOEE3NzRBMT15
CiMgZW5kIG9mIFJlbmVzYXMgcGluY3RybCBkcml2ZXJzCgpDT05GSUdfUElOQ1RSTF9TQU1TVU5H
PXkKQ09ORklHX1BJTkNUUkxfRVhZTk9TPXkKQ09ORklHX1BJTkNUUkxfRVhZTk9TX0FSTTY0PXkK
IyBDT05GSUdfUElOQ1RSTF9TUFJEX1NDOTg2MCBpcyBub3Qgc2V0CkNPTkZJR19QSU5DVFJMX1NV
TlhJPXkKIyBDT05GSUdfUElOQ1RSTF9TVU40SV9BMTAgaXMgbm90IHNldAojIENPTkZJR19QSU5D
VFJMX1NVTjVJIGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9TVU42SV9BMzEgaXMgbm90IHNl
dAojIENPTkZJR19QSU5DVFJMX1NVTjZJX0EzMV9SIGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RS
TF9TVU44SV9BMjMgaXMgbm90IHNldAojIENPTkZJR19QSU5DVFJMX1NVTjhJX0EzMyBpcyBub3Qg
c2V0CiMgQ09ORklHX1BJTkNUUkxfU1VOOElfQTgzVCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNU
UkxfU1VOOElfQTgzVF9SIGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9TVU44SV9BMjNfUiBp
cyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfU1VOOElfSDMgaXMgbm90IHNldApDT05GSUdfUElO
Q1RSTF9TVU44SV9IM19SPXkKIyBDT05GSUdfUElOQ1RSTF9TVU44SV9WM1MgaXMgbm90IHNldAoj
IENPTkZJR19QSU5DVFJMX1NVTjlJX0E4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfU1VO
OUlfQTgwX1IgaXMgbm90IHNldApDT05GSUdfUElOQ1RSTF9TVU41MElfQTY0PXkKQ09ORklHX1BJ
TkNUUkxfU1VONTBJX0E2NF9SPXkKQ09ORklHX1BJTkNUUkxfU1VONTBJX0ExMDA9eQpDT05GSUdf
UElOQ1RSTF9TVU41MElfQTEwMF9SPXkKQ09ORklHX1BJTkNUUkxfU1VONTBJX0g1PXkKQ09ORklH
X1BJTkNUUkxfU1VONTBJX0g2PXkKQ09ORklHX1BJTkNUUkxfU1VONTBJX0g2X1I9eQpDT05GSUdf
UElOQ1RSTF9URUdSQT15CkNPTkZJR19QSU5DVFJMX1RFR1JBMTI0PXkKQ09ORklHX1BJTkNUUkxf
VEVHUkEyMTA9eQpDT05GSUdfUElOQ1RSTF9URUdSQTE5ND15CkNPTkZJR19QSU5DVFJMX1RFR1JB
X1hVU0I9eQpDT05GSUdfUElOQ1RSTF9VTklQSElFUj15CiMgQ09ORklHX1BJTkNUUkxfVU5JUEhJ
RVJfTEQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9VTklQSElFUl9QUk80IGlzIG5vdCBz
ZXQKIyBDT05GSUdfUElOQ1RSTF9VTklQSElFUl9TTEQ4IGlzIG5vdCBzZXQKIyBDT05GSUdfUElO
Q1RSTF9VTklQSElFUl9QUk81IGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9VTklQSElFUl9Q
WFMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9VTklQSElFUl9MRDZCIGlzIG5vdCBzZXQK
Q09ORklHX1BJTkNUUkxfVU5JUEhJRVJfTEQxMT15CkNPTkZJR19QSU5DVFJMX1VOSVBISUVSX0xE
MjA9eQpDT05GSUdfUElOQ1RSTF9VTklQSElFUl9QWFMzPXkKCiMKIyBNZWRpYVRlayBwaW5jdHJs
IGRyaXZlcnMKIwpDT05GSUdfRUlOVF9NVEs9eQpDT05GSUdfUElOQ1RSTF9NVEs9eQpDT05GSUdf
UElOQ1RSTF9NVEtfVjI9eQpDT05GSUdfUElOQ1RSTF9NVEtfTU9PUkU9eQpDT05GSUdfUElOQ1RS
TF9NVEtfUEFSSVM9eQpDT05GSUdfUElOQ1RSTF9NVDI3MTI9eQpDT05GSUdfUElOQ1RSTF9NVDY3
NjU9eQpDT05GSUdfUElOQ1RSTF9NVDY3Nzk9eQpDT05GSUdfUElOQ1RSTF9NVDY3OTc9eQpDT05G
SUdfUElOQ1RSTF9NVDc2MjI9eQpDT05GSUdfUElOQ1RSTF9NVDgxNjc9eQpDT05GSUdfUElOQ1RS
TF9NVDgxNzM9eQpDT05GSUdfUElOQ1RSTF9NVDgxODM9eQpDT05GSUdfUElOQ1RSTF9NVDgxOTI9
eQpDT05GSUdfUElOQ1RSTF9NVDg1MTY9eQojIGVuZCBvZiBNZWRpYVRlayBwaW5jdHJsIGRyaXZl
cnMKCiMgQ09ORklHX1BJTkNUUkxfWlgyOTY3MTggaXMgbm90IHNldApDT05GSUdfUElOQ1RSTF9N
RVNPTj15CkNPTkZJR19QSU5DVFJMX01FU09OX0dYQkI9eQpDT05GSUdfUElOQ1RSTF9NRVNPTl9H
WEw9eQpDT05GSUdfUElOQ1RSTF9NRVNPTjhfUE1YPXkKQ09ORklHX1BJTkNUUkxfTUVTT05fQVhH
PXkKQ09ORklHX1BJTkNUUkxfTUVTT05fQVhHX1BNWD15CkNPTkZJR19QSU5DVFJMX01FU09OX0cx
MkE9eQpDT05GSUdfUElOQ1RSTF9NRVNPTl9BMT15CkNPTkZJR19HUElPTElCPXkKQ09ORklHX0dQ
SU9MSUJfRkFTVFBBVEhfTElNSVQ9NTEyCkNPTkZJR19PRl9HUElPPXkKQ09ORklHX0dQSU9fQUNQ
ST15CkNPTkZJR19HUElPTElCX0lSUUNISVA9eQojIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CkNPTkZJR19HUElPX0NERVY9eQpDT05G
SUdfR1BJT19DREVWX1YxPXkKQ09ORklHX0dQSU9fR0VORVJJQz15CgojCiMgTWVtb3J5IG1hcHBl
ZCBHUElPIGRyaXZlcnMKIwojIENPTkZJR19HUElPXzc0WFhfTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19HUElPX0FMVEVSQT1tCiMgQ09ORklHX0dQSU9fQU1EUFQgaXMgbm90IHNldApDT05GSUdfR1BJ
T19SQVNQQkVSUllQSV9FWFA9eQpDT05GSUdfR1BJT19CQ01fWEdTX0lQUk9DPXkKQ09ORklHX0dQ
SU9fQlJDTVNUQj15CiMgQ09ORklHX0dQSU9fQ0FERU5DRSBpcyBub3Qgc2V0CiMgQ09ORklHX0dQ
SU9fREFWSU5DSSBpcyBub3Qgc2V0CkNPTkZJR19HUElPX0RXQVBCPXkKIyBDT05GSUdfR1BJT19F
SUNfU1BSRCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fRVhBUiBpcyBub3Qgc2V0CiMgQ09ORklH
X0dQSU9fRlRHUElPMDEwIGlzIG5vdCBzZXQKQ09ORklHX0dQSU9fR0VORVJJQ19QTEFURk9STT15
CiMgQ09ORklHX0dQSU9fR1JHUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19ITFdEIGlzIG5v
dCBzZXQKIyBDT05GSUdfR1BJT19MT0dJQ1ZDIGlzIG5vdCBzZXQKQ09ORklHX0dQSU9fTUI4NlM3
WD15CkNPTkZJR19HUElPX01QQzhYWFg9eQpDT05GSUdfR1BJT19NVkVCVT15CkNPTkZJR19HUElP
X01YQz15CkNPTkZJR19HUElPX1BMMDYxPXkKQ09ORklHX0dQSU9fUkNBUj15CiMgQ09ORklHX0dQ
SU9fU0FNQTVEMl9QSU9CVSBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0lGSVZFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19TUFJEIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19TWVNDT04gaXMg
bm90IHNldApDT05GSUdfR1BJT19URUdSQT15CkNPTkZJR19HUElPX1RFR1JBMTg2PXkKIyBDT05G
SUdfR1BJT19USFVOREVSWCBpcyBub3Qgc2V0CkNPTkZJR19HUElPX1VOSVBISUVSPXkKQ09ORklH
X0dQSU9fWEdFTkU9eQpDT05GSUdfR1BJT19YR0VORV9TQj15CiMgQ09ORklHX0dQSU9fWElMSU5Y
IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19YTFAgaXMgbm90IHNldAojIENPTkZJR19HUElPX1pZ
TlEgaXMgbm90IHNldAojIENPTkZJR19HUElPX1pYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19B
TURfRkNIIGlzIG5vdCBzZXQKIyBlbmQgb2YgTWVtb3J5IG1hcHBlZCBHUElPIGRyaXZlcnMKCiMK
IyBJMkMgR1BJTyBleHBhbmRlcnMKIwojIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAoj
IENPTkZJR19HUElPX0FETlAgaXMgbm90IHNldAojIENPTkZJR19HUElPX0dXX1BMRCBpcyBub3Qg
c2V0CiMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0CkNPTkZJR19HUElPX01BWDczMlg9
eQojIENPTkZJR19HUElPX01BWDczMlhfSVJRIGlzIG5vdCBzZXQKQ09ORklHX0dQSU9fUENBOTUz
WD15CkNPTkZJR19HUElPX1BDQTk1M1hfSVJRPXkKIyBDT05GSUdfR1BJT19QQ0E5NTcwIGlzIG5v
dCBzZXQKIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19UUElD
MjgxMCBpcyBub3Qgc2V0CiMgZW5kIG9mIEkyQyBHUElPIGV4cGFuZGVycwoKIwojIE1GRCBHUElP
IGV4cGFuZGVycwojCkNPTkZJR19HUElPX0JEOTU3MU1XVj1tCkNPTkZJR19HUElPX01BWDc3NjIw
PXkKIyBlbmQgb2YgTUZEIEdQSU8gZXhwYW5kZXJzCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMK
IyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fUENJX0lESU9fMTYg
aXMgbm90IHNldAojIENPTkZJR19HUElPX1BDSUVfSURJT18yNCBpcyBub3Qgc2V0CiMgQ09ORklH
X0dQSU9fUkRDMzIxWCBpcyBub3Qgc2V0CiMgZW5kIG9mIFBDSSBHUElPIGV4cGFuZGVycwoKIwoj
IFNQSSBHUElPIGV4cGFuZGVycwojCiMgQ09ORklHX0dQSU9fNzRYMTY0IGlzIG5vdCBzZXQKIyBD
T05GSUdfR1BJT19NQVgzMTkxWCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fUElT
T1NSIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19YUkExNDAzIGlzIG5vdCBzZXQKIyBlbmQgb2Yg
U1BJIEdQSU8gZXhwYW5kZXJzCgojCiMgVVNCIEdQSU8gZXhwYW5kZXJzCiMKIyBlbmQgb2YgVVNC
IEdQSU8gZXhwYW5kZXJzCgojIENPTkZJR19HUElPX0FHR1JFR0FUT1IgaXMgbm90IHNldAojIENP
TkZJR19HUElPX01PQ0tVUCBpcyBub3Qgc2V0CiMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQ09ORklH
X1BPV0VSX1JFU0VUPXkKQ09ORklHX1BPV0VSX1JFU0VUX0JSQ01TVEI9eQojIENPTkZJR19QT1dF
Ul9SRVNFVF9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVRfR1BJT19SRVNUQVJU
IGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVRfSElTSSBpcyBub3Qgc2V0CiMgQ09ORklH
X1BPV0VSX1JFU0VUX0xJTktTVEFUSU9OIGlzIG5vdCBzZXQKQ09ORklHX1BPV0VSX1JFU0VUX01T
TT15CiMgQ09ORklHX1BPV0VSX1JFU0VUX1FDT01fUE9OIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9X
RVJfUkVTRVRfTFRDMjk1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1BPV0VSX1JFU0VUX1JFU1RBUlQg
aXMgbm90IHNldApDT05GSUdfUE9XRVJfUkVTRVRfVkVYUFJFU1M9eQpDT05GSUdfUE9XRVJfUkVT
RVRfWEdFTkU9eQpDT05GSUdfUE9XRVJfUkVTRVRfU1lTQ09OPXkKIyBDT05GSUdfUE9XRVJfUkVT
RVRfU1lTQ09OX1BPV0VST0ZGIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVRfWlggaXMg
bm90IHNldApDT05GSUdfUkVCT09UX01PREU9eQpDT05GSUdfU1lTQ09OX1JFQk9PVF9NT0RFPXkK
IyBDT05GSUdfTlZNRU1fUkVCT09UX01PREUgaXMgbm90IHNldApDT05GSUdfUE9XRVJfU1VQUExZ
PXkKIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1BPV0VSX1NV
UFBMWV9IV01PTj15CiMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVS
SUNfQURDX0JBVFRFUlkgaXMgbm90IHNldAojIENPTkZJR19URVNUX1BPV0VSIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ0hBUkdFUl9BRFA1MDYxIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9DVzIw
MTUgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MCBpcyBub3Qgc2V0CiMgQ09ORklH
X0JBVFRFUllfRFMyNzgxIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90
IHNldApDT05GSUdfQkFUVEVSWV9TQlM9bQojIENPTkZJR19DSEFSR0VSX1NCUyBpcyBub3Qgc2V0
CiMgQ09ORklHX01BTkFHRVJfU0JTIGlzIG5vdCBzZXQKQ09ORklHX0JBVFRFUllfQlEyN1hYWD15
CkNPTkZJR19CQVRURVJZX0JRMjdYWFhfSTJDPXkKIyBDT05GSUdfQkFUVEVSWV9CUTI3WFhYX0RU
X1VQREFURVNfTlZNIGlzIG5vdCBzZXQKIyBDT05GSUdfQVhQMjBYX1BPV0VSIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVhQMjg4X0ZVRUxfR0FVR0UgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX01B
WDE3MDQwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NIQVJHRVJfSVNQMTcwNCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfTUFYODkw
MyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfTFA4NzI3IGlzIG5vdCBzZXQKIyBDT05GSUdf
Q0hBUkdFUl9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9NQU5BR0VSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ0hBUkdFUl9MVDM2NTEgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX0RF
VEVDVE9SX01BWDE0NjU2IGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9RQ09NX1NNQkIgaXMg
bm90IHNldAojIENPTkZJR19DSEFSR0VSX0JRMjQxNVggaXMgbm90IHNldAojIENPTkZJR19DSEFS
R0VSX0JRMjQxOTAgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX0JRMjQyNTcgaXMgbm90IHNl
dAojIENPTkZJR19DSEFSR0VSX0JRMjQ3MzUgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX0JR
MjUxNVggaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX0JRMjU4OTAgaXMgbm90IHNldAojIENP
TkZJR19DSEFSR0VSX0JRMjU5ODAgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX1NNQjM0NyBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfR0FVR0VfTFRDMjk0MSBpcyBub3Qgc2V0CiMgQ09O
RklHX0NIQVJHRVJfUlQ5NDU1IGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9DUk9TX1VTQlBE
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ0hBUkdFUl9VQ1MxMDAyIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q0hBUkdFUl9CRDk5OTU0IGlzIG5vdCBzZXQKQ09ORklHX0hXTU9OPXkKIyBDT05GSUdfSFdNT05f
REVCVUdfQ0hJUCBpcyBub3Qgc2V0CgojCiMgTmF0aXZlIGRyaXZlcnMKIwojIENPTkZJR19TRU5T
T1JTX0FENzMxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEw
MjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0FETTExNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FE
VDc0MTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0NzAg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0FTMzcwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VOU09SU19BWElfRkFOX0NPTlRST0wgaXMgbm90IHNldApDT05GSUdfU0VO
U09SU19BUk1fU0NQST15CiMgQ09ORklHX1NFTlNPUlNfQVNQRUVEIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfQ09SU0FJUl9DUFJP
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19EUklWRVRFTVAgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0RTNjIwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0Y3MTgwNUYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19GVFNU
RVVUQVRFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfRzc2MEEg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0c3NjIgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0dQSU9fRkFOIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19ISUg2MTMwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VOU09SU19JQk1BRU0gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lC
TVBFWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfSUlPX0hXTU9OIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19KQzQyIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19QT1dSMTIyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfTElORUFHRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTFRDMjk0NSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NFTlNPUlNfTFRDMjk0N19JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0xUQzI5NDdfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MVEMyOTkwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VOU09SU19MVEM0MTUxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19M
VEM0MjE1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MVEM0MjIyIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MVEM0MjYw
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MVEM0MjYxIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQVgxNjA2NSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNP
UlNfTUFYMTY2OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFYMTk3IGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19NQVgzMTcyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTUFY
MzE3MzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2MjEgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX01BWDY2MzkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2NDIg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX01BWDY2OTcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDMxNzkwIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19NQ1AzMDIxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09S
U19UQzY1NCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTVI3NTIwMyBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNjMgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0xNNzMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNODMg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0xNODcgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19MTTkwPW0KIyBDT05GSUdfU0VOU09S
U19MTTkyIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VOU09SU19MTTk1MjM0IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19MTTk1MjQ1IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VO
U09SU19QQzg3MzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VOU09SU19OVENfVEhFUk1JU1RPUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NF
TlNPUlNfTkNUNjY4MyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTkNUNjc3NSBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfTkNUNzgwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNf
TkNUNzkwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfTlBDTTdYWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfT0NDX1A4X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfUENG
ODU5MSBpcyBub3Qgc2V0CiMgQ09ORklHX1BNQlVTIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNf
UFdNX0ZBTj1tCkNPTkZJR19TRU5TT1JTX1JBU1BCRVJSWVBJX0hXTU9OPW0KIyBDT05GSUdfU0VO
U09SU19TSFQxNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfU0hUMjEgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX1NIVDN4IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19TSFRDMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiMgQ09ORklHX1NF
TlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfRU1DMTQwMyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfRU1DMjEwMyBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNf
RU1DNlcyMDEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19T
TVNDNDdCMzk3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19TQ0g1NjI3IGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19TQ0g1NjM2IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19TVFRT
NzUxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19TTU02NjUgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEUzc4Mjgg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEUzc4NzEgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lOQTIwOSBpcyBub3Qg
c2V0CkNPTkZJR19TRU5TT1JTX0lOQTJYWD1tCkNPTkZJR19TRU5TT1JTX0lOQTMyMjE9bQojIENP
TkZJR19TRU5TT1JTX1RDNzQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVE1QMTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09S
U19UTVAxMDMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1RNUDEwOCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19UTVA0MjEg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1RNUDUxMyBpcyBub3Qgc2V0CiMgQ09ORklHX1NF
TlNPUlNfVkVYUFJFU1MgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90
IHNldAojIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNf
VlQ4MjMxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19XODM3NzNHIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19XODM3OTFE
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19XODM3OTMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4Mzc5NSBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09S
U19XODNMNzg2TkcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X1hHRU5FIGlzIG5vdCBzZXQKCiMKIyBBQ1BJIGRyaXZlcnMKIwojIENPTkZJR19TRU5TT1JTX0FD
UElfUE9XRVIgaXMgbm90IHNldApDT05GSUdfVEhFUk1BTD15CiMgQ09ORklHX1RIRVJNQUxfTkVU
TElOSyBpcyBub3Qgc2V0CiMgQ09ORklHX1RIRVJNQUxfU1RBVElTVElDUyBpcyBub3Qgc2V0CkNP
TkZJR19USEVSTUFMX0VNRVJHRU5DWV9QT1dFUk9GRl9ERUxBWV9NUz0wCkNPTkZJR19USEVSTUFM
X0hXTU9OPXkKQ09ORklHX1RIRVJNQUxfT0Y9eQojIENPTkZJR19USEVSTUFMX1dSSVRBQkxFX1RS
SVBTIGlzIG5vdCBzZXQKIyBDT05GSUdfVEhFUk1BTF9ERUZBVUxUX0dPVl9TVEVQX1dJU0UgaXMg
bm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJfU0hBUkUgaXMgbm90IHNl
dAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BBQ0UgaXMgbm90IHNldApDT05G
SUdfVEhFUk1BTF9ERUZBVUxUX0dPVl9QT1dFUl9BTExPQ0FUT1I9eQojIENPTkZJR19USEVSTUFM
X0dPVl9GQUlSX1NIQVJFIGlzIG5vdCBzZXQKIyBDT05GSUdfVEhFUk1BTF9HT1ZfU1RFUF9XSVNF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEhFUk1BTF9HT1ZfVVNFUl9TUEFDRSBpcyBub3Qgc2V0CkNPTkZJR19USEVSTUFMX0dP
Vl9QT1dFUl9BTExPQ0FUT1I9eQpDT05GSUdfQ1BVX1RIRVJNQUw9eQpDT05GSUdfQ1BVX0ZSRVFf
VEhFUk1BTD15CiMgQ09ORklHX0RFVkZSRVFfVEhFUk1BTCBpcyBub3Qgc2V0CkNPTkZJR19USEVS
TUFMX0VNVUxBVElPTj15CiMgQ09ORklHX1RIRVJNQUxfTU1JTyBpcyBub3Qgc2V0CkNPTkZJR19I
SVNJX1RIRVJNQUw9eQojIENPTkZJR19JTVhfVEhFUk1BTCBpcyBub3Qgc2V0CiMgQ09ORklHX0lN
WF9TQ19USEVSTUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfSU1YOE1NX1RIRVJNQUwgaXMgbm90IHNl
dAojIENPTkZJR19LM19USEVSTUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYNzc2MjBfVEhFUk1B
TCBpcyBub3Qgc2V0CkNPTkZJR19RT1JJUV9USEVSTUFMPW0KIyBDT05GSUdfU1VOOElfVEhFUk1B
TCBpcyBub3Qgc2V0CkNPTkZJR19ST0NLQ0hJUF9USEVSTUFMPW0KQ09ORklHX1JDQVJfVEhFUk1B
TD15CkNPTkZJR19SQ0FSX0dFTjNfVEhFUk1BTD15CkNPTkZJR19BUk1BREFfVEhFUk1BTD15CkNP
TkZJR19NVEtfVEhFUk1BTD15CkNPTkZJR19BTUxPR0lDX1RIRVJNQUw9eQoKIwojIEJyb2FkY29t
IHRoZXJtYWwgZHJpdmVycwojCiMgQ09ORklHX0JDTTI3MTFfVEhFUk1BTCBpcyBub3Qgc2V0CkNP
TkZJR19CQ00yODM1X1RIRVJNQUw9bQpDT05GSUdfQlJDTVNUQl9USEVSTUFMPW0KQ09ORklHX0JD
TV9OU19USEVSTUFMPXkKQ09ORklHX0JDTV9TUl9USEVSTUFMPXkKIyBlbmQgb2YgQnJvYWRjb20g
dGhlcm1hbCBkcml2ZXJzCgojCiMgU2Ftc3VuZyB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfRVhZ
Tk9TX1RIRVJNQUw9eQojIGVuZCBvZiBTYW1zdW5nIHRoZXJtYWwgZHJpdmVycwoKIwojIE5WSURJ
QSBUZWdyYSB0aGVybWFsIGRyaXZlcnMKIwojIENPTkZJR19URUdSQV9TT0NUSEVSTSBpcyBub3Qg
c2V0CkNPTkZJR19URUdSQV9CUE1QX1RIRVJNQUw9bQojIGVuZCBvZiBOVklESUEgVGVncmEgdGhl
cm1hbCBkcml2ZXJzCgojIENPTkZJR19HRU5FUklDX0FEQ19USEVSTUFMIGlzIG5vdCBzZXQKCiMK
IyBRdWFsY29tbSB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfUUNPTV9UU0VOUz15CkNPTkZJR19R
Q09NX1NQTUlfVEVNUF9BTEFSTT1tCiMgZW5kIG9mIFF1YWxjb21tIHRoZXJtYWwgZHJpdmVycwoK
IyBDT05GSUdfWlgyOTY3X1RIRVJNQUwgaXMgbm90IHNldApDT05GSUdfVU5JUEhJRVJfVEhFUk1B
TD15CiMgQ09ORklHX1NQUkRfVEhFUk1BTCBpcyBub3Qgc2V0CkNPTkZJR19XQVRDSERPRz15CkNP
TkZJR19XQVRDSERPR19DT1JFPXkKIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNl
dApDT05GSUdfV0FUQ0hET0dfSEFORExFX0JPT1RfRU5BQkxFRD15CkNPTkZJR19XQVRDSERPR19P
UEVOX1RJTUVPVVQ9MAojIENPTkZJR19XQVRDSERPR19TWVNGUyBpcyBub3Qgc2V0CgojCiMgV2F0
Y2hkb2cgUHJldGltZW91dCBHb3Zlcm5vcnMKIwojIENPTkZJR19XQVRDSERPR19QUkVUSU1FT1VU
X0dPViBpcyBub3Qgc2V0CgojCiMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKIwojIENPTkZJR19T
T0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19XQVRDSERPRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1dEQVRfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX1dBVENIRE9HIGlz
IG5vdCBzZXQKIyBDT05GSUdfWklJUkFWRV9XQVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19BUk1f
U1A4MDVfV0FUQ0hET0c9eQpDT05GSUdfQVJNX1NCU0FfV0FUQ0hET0c9eQojIENPTkZJR19BUk1B
REFfMzdYWF9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBREVOQ0VfV0FUQ0hET0cgaXMg
bm90IHNldApDT05GSUdfUzNDMjQxMF9XQVRDSERPRz15CkNPTkZJR19EV19XQVRDSERPRz15CiMg
Q09ORklHX0szX1JUSV9XQVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19TVU5YSV9XQVRDSERPRz1t
CiMgQ09ORklHX01BWDYzWFhfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19NQVg3NzYyMF9X
QVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19JTVgyX1dEVD15CkNPTkZJR19JTVhfU0NfV0RUPW0K
IyBDT05GSUdfSU1YN1VMUF9XRFQgaXMgbm90IHNldAojIENPTkZJR19URUdSQV9XQVRDSERPRyBp
cyBub3Qgc2V0CkNPTkZJR19RQ09NX1dEVD1tCkNPTkZJR19NRVNPTl9HWEJCX1dBVENIRE9HPW0K
Q09ORklHX01FU09OX1dBVENIRE9HPW0KIyBDT05GSUdfTUVESUFURUtfV0FUQ0hET0cgaXMgbm90
IHNldAojIENPTkZJR19BUk1fU01DX1dBVENIRE9HIGlzIG5vdCBzZXQKQ09ORklHX1JFTkVTQVNf
V0RUPXkKIyBDT05GSUdfUkVORVNBU19SWkFXRFQgaXMgbm90IHNldAojIENPTkZJR19aWDI5Njdf
V0FUQ0hET0cgaXMgbm90IHNldApDT05GSUdfVU5JUEhJRVJfV0FUQ0hET0c9eQojIENPTkZJR19T
UFJEX1dBVENIRE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfUE04OTE2X1dBVENIRE9HIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKIyBDT05GSUdfSTYzMDBFU0JfV0RU
IGlzIG5vdCBzZXQKQ09ORklHX0JDTTI4MzVfV0RUPXkKIyBDT05GSUdfQkNNNzAzOF9XRFQgaXMg
bm90IHNldAojIENPTkZJR19NRU5fQTIxX1dEVCBpcyBub3Qgc2V0CiMgQ09ORklHX1hFTl9XRFQg
aXMgbm90IHNldAoKIwojIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwojCiMgQ09ORklHX1BDSVBD
V0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAoKIwojIFVTQi1i
YXNlZCBXYXRjaGRvZyBDYXJkcwojCiMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldApD
T05GSUdfU1NCX1BPU1NJQkxFPXkKIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKQ09ORklHX0JDTUFf
UE9TU0lCTEU9eQojIENPTkZJR19CQ01BIGlzIG5vdCBzZXQKCiMKIyBNdWx0aWZ1bmN0aW9uIGRl
dmljZSBkcml2ZXJzCiMKQ09ORklHX01GRF9DT1JFPXkKQ09ORklHX01GRF9BTFRFUkFfU1lTTUdS
PXkKIyBDT05GSUdfTUZEX0FDVDg5NDVBIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NVTjRJX0dQ
QURDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0FTMzcxMSBpcyBub3Qgc2V0CiMgQ09ORklHX01G
RF9BUzM3MjIgaXMgbm90IHNldAojIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAojIENP
TkZJR19NRkRfQUFUMjg3MF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0FUTUVMX0ZMRVhD
T00gaXMgbm90IHNldAojIENPTkZJR19NRkRfQVRNRUxfSExDREMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfQkNNNTkwWFggaXMgbm90IHNldApDT05GSUdfTUZEX0JEOTU3MU1XVj15CiMgQ09ORklH
X01GRF9BQzEwMCBpcyBub3Qgc2V0CkNPTkZJR19NRkRfQVhQMjBYPXkKQ09ORklHX01GRF9BWFAy
MFhfSTJDPXkKQ09ORklHX01GRF9BWFAyMFhfUlNCPXkKQ09ORklHX01GRF9DUk9TX0VDX0RFVj15
CiMgQ09ORklHX01GRF9NQURFUkEgaXMgbm90IHNldAojIENPTkZJR19QTUlDX0RBOTAzWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTJfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RB
OTA1Ml9JMkMgaXMgbm90IHNldAojIENPTkZJR19NRkRfREE5MDU1IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX0RBOTA2MiBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNjMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfREE5MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RMTjIgaXMgbm90IHNl
dApDT05GSUdfTUZEX0VYWU5PU19MUEFTUz1tCiMgQ09ORklHX01GRF9HQVRFV09SS1NfR1NDIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX01DMTNYWFhfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X01DMTNYWFhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX01QMjYyOSBpcyBub3Qgc2V0CkNP
TkZJR19NRkRfSEk2NDIxX1BNSUM9eQpDT05GSUdfTUZEX0hJNjU1WF9QTUlDPXkKIyBDT05GSUdf
SFRDX1BBU0lDMyBpcyBub3Qgc2V0CiMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAojIENP
TkZJR19MUENfSUNIIGlzIG5vdCBzZXQKIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0CiMgQ09O
RklHX01GRF9JUVM2MlggaXMgbm90IHNldAojIENPTkZJR19NRkRfSkFOWl9DTU9ESU8gaXMgbm90
IHNldAojIENPTkZJR19NRkRfS0VNUExEIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEXzg4UE04MDAg
aXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTgwNSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF84
OFBNODYwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVgxNDU3NyBpcyBub3Qgc2V0CkNPTkZJ
R19NRkRfTUFYNzc2MjA9eQojIENPTkZJR19NRkRfTUFYNzc2NTAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfTUFYNzc2ODYgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYNzc2OTMgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUFYNzc4NDMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODkwNyBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX01B
WDg5OTcgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5OCBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9NVDYzNjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfTVQ2Mzk3IGlzIG5vdCBzZXQKIyBD
T05GSUdfTUZEX01FTkYyMUJNQyBpcyBub3Qgc2V0CiMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0NQQ0FQIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1ZJUEVSQk9BUkQg
aXMgbm90IHNldAojIENPTkZJR19NRkRfUkVUVSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQ0Y1
MDYzMyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9RQ09NX1JQTSBpcyBub3Qgc2V0CkNPTkZJR19N
RkRfU1BNSV9QTUlDPXkKIyBDT05GSUdfTUZEX1JEQzMyMVggaXMgbm90IHNldAojIENPTkZJR19N
RkRfUlQ1MDMzIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldApDT05G
SUdfTUZEX1JLODA4PXkKIyBDT05GSUdfTUZEX1JONVQ2MTggaXMgbm90IHNldApDT05GSUdfTUZE
X1NFQ19DT1JFPXkKIyBDT05GSUdfTUZEX1NJNDc2WF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdf
TUZEX1NMMjhDUExEIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUZEX1NLWTgxNDUyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1NDMjdYWF9QTUlDIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUJYNTAwX0NPUkUgaXMgbm90IHNldAojIENPTkZJR19NRkRfU1RN
UEUgaXMgbm90IHNldApDT05GSUdfTUZEX1NVTjZJX1BSQ009eQpDT05GSUdfTUZEX1NZU0NPTj15
CiMgQ09ORklHX01GRF9USV9BTTMzNVhfVFNDQURDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0xQ
Mzk0MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9MUDg3ODggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVElfTE1VIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1BBTE1BUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1RQUzYxMDVYIGlzIG5vdCBzZXQKIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAojIENP
TkZJR19UUFM2NTA3WCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2NTA4NiBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9UUFM2NTA5MCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2NTIxNyBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2ODQ3MCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9U
SV9MUDg3M1ggaXMgbm90IHNldAojIENPTkZJR19NRkRfVElfTFA4NzU2NSBpcyBub3Qgc2V0CiMg
Q09ORklHX01GRF9UUFM2NTIxOCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2NTg2WCBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2NTkxMCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9UUFM2
NTkxMl9JMkMgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTJfU1BJIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUZEX1RQUzgwMDMxIGlzIG5vdCBzZXQKIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlz
IG5vdCBzZXQKIyBDT05GSUdfVFdMNjA0MF9DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dM
MTI3M19DT1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0xNMzUzMyBpcyBub3Qgc2V0CiMgQ09O
RklHX01GRF9UQzM1ODlYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RRTVg4NiBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9WWDg1NSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9MT0NITkFHQVIgaXMg
bm90IHNldAojIENPTkZJR19NRkRfQVJJWk9OQV9JMkMgaXMgbm90IHNldAojIENPTkZJR19NRkRf
QVJJWk9OQV9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUZEX1dNODMxWF9JMkMgaXMgbm90IHNldAojIENPTkZJR19NRkRfV004MzFYX1NQSSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X1dNODk5NCBpcyBub3Qgc2V0CkNPTkZJR19NRkRfUk9ITV9CRDcxOFhYPXkKIyBDT05GSUdfTUZE
X1JPSE1fQkQ3MDUyOCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9ST0hNX0JENzE4MjggaXMgbm90
IHNldAojIENPTkZJR19NRkRfU1RQTUlDMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TVE1GWCBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9XQ0Q5MzRYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0tI
QURBU19NQ1UgaXMgbm90IHNldApDT05GSUdfTUZEX1ZFWFBSRVNTX1NZU1JFRz15CiMgQ09ORklH
X1JBVkVfU1BfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9JTlRFTF9NMTBfQk1DIGlzIG5v
dCBzZXQKIyBlbmQgb2YgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwoKQ09ORklHX1JFR1VM
QVRPUj15CiMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SRUdVTEFU
T1JfRklYRURfVk9MVEFHRT15CiMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0
CiMgQ09ORklHX1JFR1VMQVRPUl84OFBHODZYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9S
X0FDVDg4NjUgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfQUQ1Mzk4IGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVHVUxBVE9SX0FOQVRPUCBpcyBub3Qgc2V0CkNPTkZJR19SRUdVTEFUT1JfQVhQ
MjBYPXkKQ09ORklHX1JFR1VMQVRPUl9CRDcxOFhYPXkKQ09ORklHX1JFR1VMQVRPUl9CRDk1NzFN
V1Y9eQojIENPTkZJR19SRUdVTEFUT1JfQ1JPU19FQyBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VM
QVRPUl9EQTkyMTAgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfREE5MjExIGlzIG5vdCBz
ZXQKQ09ORklHX1JFR1VMQVRPUl9GQU41MzU1NT15CiMgQ09ORklHX1JFR1VMQVRPUl9GQU41Mzg4
MCBpcyBub3Qgc2V0CkNPTkZJR19SRUdVTEFUT1JfR1BJTz15CiMgQ09ORklHX1JFR1VMQVRPUl9I
STY0MjEgaXMgbm90IHNldApDT05GSUdfUkVHVUxBVE9SX0hJNjQyMVY1MzA9eQpDT05GSUdfUkVH
VUxBVE9SX0hJNjU1WD15CiMgQ09ORklHX1JFR1VMQVRPUl9JU0w5MzA1IGlzIG5vdCBzZXQKIyBD
T05GSUdfUkVHVUxBVE9SX0lTTDYyNzFBIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX0xQ
Mzk3MSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzIgaXMgbm90IHNldAojIENP
TkZJR19SRUdVTEFUT1JfTFA4NzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX0xQODc1
NSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9MVEMzNTg5IGlzIG5vdCBzZXQKIyBDT05G
SUdfUkVHVUxBVE9SX0xUQzM2NzYgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4
NiBpcyBub3Qgc2V0CkNPTkZJR19SRUdVTEFUT1JfTUFYNzc2MjA9eQojIENPTkZJR19SRUdVTEFU
T1JfTUFYODY0OSBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkVHVUxBVE9SX01BWDg5NTIgaXMgbm90IHNldApDT05GSUdfUkVHVUxBVE9S
X01BWDg5NzM9eQojIENPTkZJR19SRUdVTEFUT1JfTUFYNzc4MjYgaXMgbm90IHNldAojIENPTkZJ
R19SRUdVTEFUT1JfTUNQMTY1MDIgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfTVA1NDE2
IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX01QODg1OSBpcyBub3Qgc2V0CiMgQ09ORklH
X1JFR1VMQVRPUl9NUDg4NlggaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfTVBRNzkyMCBp
cyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9NVDYzMTEgaXMgbm90IHNldAojIENPTkZJR19S
RUdVTEFUT1JfUENBOTQ1MCBpcyBub3Qgc2V0CkNPTkZJR19SRUdVTEFUT1JfUEZVWkUxMDA9eQoj
IENPTkZJR19SRUdVTEFUT1JfUFY4ODA2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9Q
Vjg4MDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1BWODgwOTAgaXMgbm90IHNldApD
T05GSUdfUkVHVUxBVE9SX1BXTT15CkNPTkZJR19SRUdVTEFUT1JfUUNPTV9SUE1IPXkKQ09ORklH
X1JFR1VMQVRPUl9RQ09NX1NNRF9SUE09eQpDT05GSUdfUkVHVUxBVE9SX1FDT01fU1BNST15CiMg
Q09ORklHX1JFR1VMQVRPUl9RQ09NX1VTQl9WQlVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxB
VE9SX1JBU1BCRVJSWVBJX1RPVUNIU0NSRUVOX0FUVElOWSBpcyBub3Qgc2V0CkNPTkZJR19SRUdV
TEFUT1JfUks4MDg9eQpDT05GSUdfUkVHVUxBVE9SX1JPSE09eQojIENPTkZJR19SRUdVTEFUT1Jf
UlQ0ODAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SX1JUTVYyMCBpcyBub3Qgc2V0CiMg
Q09ORklHX1JFR1VMQVRPUl9TMk1QQTAxIGlzIG5vdCBzZXQKQ09ORklHX1JFR1VMQVRPUl9TMk1Q
UzExPXkKIyBDT05GSUdfUkVHVUxBVE9SX1M1TTg3NjcgaXMgbm90IHNldAojIENPTkZJR19SRUdV
TEFUT1JfU0xHNTEwMDAgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfU1k4MTA2QSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9TWTg4MjRYIGlzIG5vdCBzZXQKIyBDT05GSUdfUkVH
VUxBVE9SX1NZODgyN04gaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfVFBTNTE2MzIgaXMg
bm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfVFBTNjIzNjAgaXMgbm90IHNldAojIENPTkZJR19S
RUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1gg
aXMgbm90IHNldAojIENPTkZJR19SRUdVTEFUT1JfVFBTNjUxMzIgaXMgbm90IHNldAojIENPTkZJ
R19SRUdVTEFUT1JfVFBTNjUyNFggaXMgbm90IHNldApDT05GSUdfUkVHVUxBVE9SX1VOSVBISUVS
PXkKQ09ORklHX1JFR1VMQVRPUl9WQ1RSTD1tCiMgQ09ORklHX1JFR1VMQVRPUl9WRVhQUkVTUyBp
cyBub3Qgc2V0CiMgQ09ORklHX1JFR1VMQVRPUl9WUU1NQ19JUFE0MDE5IGlzIG5vdCBzZXQKIyBD
T05GSUdfUkVHVUxBVE9SX1FDT01fTEFCSUJCIGlzIG5vdCBzZXQKQ09ORklHX1JDX0NPUkU9bQpD
T05GSUdfUkNfTUFQPW0KIyBDT05GSUdfTElSQyBpcyBub3Qgc2V0CkNPTkZJR19SQ19ERUNPREVS
Uz15CiMgQ09ORklHX0lSX05FQ19ERUNPREVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJfUkM1X0RF
Q09ERVIgaXMgbm90IHNldAojIENPTkZJR19JUl9SQzZfREVDT0RFUiBpcyBub3Qgc2V0CiMgQ09O
RklHX0lSX0pWQ19ERUNPREVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJfU09OWV9ERUNPREVSIGlz
IG5vdCBzZXQKIyBDT05GSUdfSVJfU0FOWU9fREVDT0RFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lS
X1NIQVJQX0RFQ09ERVIgaXMgbm90IHNldAojIENPTkZJR19JUl9NQ0VfS0JEX0RFQ09ERVIgaXMg
bm90IHNldAojIENPTkZJR19JUl9YTVBfREVDT0RFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX0lN
T05fREVDT0RFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX1JDTU1fREVDT0RFUiBpcyBub3Qgc2V0
CkNPTkZJR19SQ19ERVZJQ0VTPXkKIyBDT05GSUdfUkNfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiMg
Q09ORklHX0lSX0VORSBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX0hJWDVIRDIgaXMgbm90IHNldAoj
IENPTkZJR19JUl9JTU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJfSU1PTl9SQVcgaXMgbm90IHNl
dAojIENPTkZJR19JUl9NQ0VVU0IgaXMgbm90IHNldAojIENPTkZJR19JUl9JVEVfQ0lSIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJfRklOVEVLIGlzIG5vdCBzZXQKQ09ORklHX0lSX01FU09OPW0KIyBD
T05GSUdfSVJfTVRLIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJfTlVWT1RPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0lSX1JFRFJBVDMgaXMgbm90IHNldAojIENPTkZJR19JUl9TVFJFQU1aQVAgaXMgbm90
IHNldAojIENPTkZJR19JUl9JR09SUExVR1VTQiBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX0lHVUFO
QSBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX1RUVVNCSVIgaXMgbm90IHNldAojIENPTkZJR19SQ19M
T09QQkFDSyBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX0dQSU9fQ0lSIGlzIG5vdCBzZXQKQ09ORklH
X0lSX1NVTlhJPW0KIyBDT05GSUdfSVJfU0VSSUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJfU0lS
IGlzIG5vdCBzZXQKIyBDT05GSUdfUkNfWEJPWF9EVkQgaXMgbm90IHNldAojIENPTkZJR19JUl9a
WCBpcyBub3Qgc2V0CiMgQ09ORklHX0lSX1RPWSBpcyBub3Qgc2V0CkNPTkZJR19DRUNfQ09SRT15
CkNPTkZJR19DRUNfTk9USUZJRVI9eQojIENPTkZJR19NRURJQV9DRUNfU1VQUE9SVCBpcyBub3Qg
c2V0CkNPTkZJR19NRURJQV9TVVBQT1JUPXkKQ09ORklHX01FRElBX1NVUFBPUlRfRklMVEVSPXkK
IyBDT05GSUdfTUVESUFfU1VCRFJWX0FVVE9TRUxFQ1QgaXMgbm90IHNldAoKIwojIE1lZGlhIGRl
dmljZSB0eXBlcwojCkNPTkZJR19NRURJQV9DQU1FUkFfU1VQUE9SVD15CkNPTkZJR19NRURJQV9B
TkFMT0dfVFZfU1VQUE9SVD15CkNPTkZJR19NRURJQV9ESUdJVEFMX1RWX1NVUFBPUlQ9eQojIENP
TkZJR19NRURJQV9SQURJT19TVVBQT1JUIGlzIG5vdCBzZXQKQ09ORklHX01FRElBX1NEUl9TVVBQ
T1JUPXkKIyBDT05GSUdfTUVESUFfUExBVEZPUk1fU1VQUE9SVCBpcyBub3Qgc2V0CiMgQ09ORklH
X01FRElBX1RFU1RfU1VQUE9SVCBpcyBub3Qgc2V0CiMgZW5kIG9mIE1lZGlhIGRldmljZSB0eXBl
cwoKQ09ORklHX1ZJREVPX0RFVj15CkNPTkZJR19NRURJQV9DT05UUk9MTEVSPXkKQ09ORklHX0RW
Ql9DT1JFPXkKCiMKIyBWaWRlbzRMaW51eCBvcHRpb25zCiMKQ09ORklHX1ZJREVPX1Y0TDI9eQpD
T05GSUdfVklERU9fVjRMMl9JMkM9eQpDT05GSUdfVklERU9fVjRMMl9TVUJERVZfQVBJPXkKIyBD
T05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fRklYRURfTUlO
T1JfUkFOR0VTIGlzIG5vdCBzZXQKQ09ORklHX1Y0TDJfRldOT0RFPXkKIyBlbmQgb2YgVmlkZW80
TGludXggb3B0aW9ucwoKIwojIE1lZGlhIGNvbnRyb2xsZXIgb3B0aW9ucwojCiMgQ09ORklHX01F
RElBX0NPTlRST0xMRVJfRFZCIGlzIG5vdCBzZXQKIyBlbmQgb2YgTWVkaWEgY29udHJvbGxlciBv
cHRpb25zCgojCiMgRGlnaXRhbCBUViBvcHRpb25zCiMKIyBDT05GSUdfRFZCX01NQVAgaXMgbm90
IHNldAojIENPTkZJR19EVkJfTkVUIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9NQVhfQURBUFRFUlM9
MTYKQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUz15CiMgQ09ORklHX0RWQl9ERU1VWF9TRUNUSU9O
X0xPU1NfTE9HIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZCX1VMRV9ERUJVRyBpcyBub3Qgc2V0CiMg
ZW5kIG9mIERpZ2l0YWwgVFYgb3B0aW9ucwoKIwojIE1lZGlhIGRyaXZlcnMKIwoKIwojIERyaXZl
cnMgZmlsdGVyZWQgYXMgc2VsZWN0ZWQgYXQgJ0ZpbHRlciBtZWRpYSBkcml2ZXJzJwojCkNPTkZJ
R19NRURJQV9VU0JfU1VQUE9SVD15CgojCiMgV2ViY2FtIGRldmljZXMKIwpDT05GSUdfVVNCX1ZJ
REVPX0NMQVNTPW0KQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15CkNPTkZJR19V
U0JfR1NQQ0E9bQojIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1RW
MDZYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1VT
Ql9HU1BDQV9CRU5RIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX0NPTkVYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0dTUENBX0NQSUExIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENB
X0RUQ1MwMzMgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAoj
IENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9K
RUlMSU5KIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX0pMMjAwNUJDRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9HU1BDQV9LSU5FQ1QgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0Ff
S09OSUNBIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAojIENP
TkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfTlc4
MFggaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzRfOSBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAojIENPTkZJR19V
U0JfR1NQQ0FfUEFDNzMwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1NFNDAxIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0dTUENBX1NOOUMyMDI4IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMg
bm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0dTUENBX1NPTklYSiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDEgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
R1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDggaXMgbm90IHNldAojIENPTkZJR19VU0Jf
R1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9TUENBMTUyOCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9H
U1BDQV9TUTkwNUMgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfU1E5MzBYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0dTUENBX1NUSzAxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BD
QV9TVEsxMTM1IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1NUVjA2ODAgaXMgbm90IHNl
dAojIENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BD
QV9UNjEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1RPUFJPIGlzIG5vdCBzZXQKIyBD
T05GSUdfVVNCX0dTUENBX1RPVVBURUsgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1NQQ0FfVFY4
NTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0CiMgQ09O
RklHX1VTQl9HU1BDQV9WSUNBTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9YSVJMSU5L
X0NJVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CiMgQ09O
RklHX1VTQl9QV0MgaXMgbm90IHNldAojIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1VTQlRW
IGlzIG5vdCBzZXQKCiMKIyBBbmFsb2cgVFYgVVNCIGRldmljZXMKIwojIENPTkZJR19WSURFT19Q
VlJVU0IyIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAojIENPTkZJ
R19WSURFT19TVEsxMTYwX0NPTU1PTiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0dPNzAwNyBp
cyBub3Qgc2V0CgojCiMgQW5hbG9nL2RpZ2l0YWwgVFYgVVNCIGRldmljZXMKIwojIENPTkZJR19W
SURFT19BVTA4MjggaXMgbm90IHNldAojIENPTkZJR19WSURFT19DWDIzMVhYIGlzIG5vdCBzZXQK
IyBDT05GSUdfVklERU9fVE02MDAwIGlzIG5vdCBzZXQKCiMKIyBEaWdpdGFsIFRWIFVTQiBkZXZp
Y2VzCiMKIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9VU0JfVjIgaXMg
bm90IHNldAojIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKIyBDT05GSUdfRFZC
X1RUVVNCX0RFQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NNU19VU0JfRFJWIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFZCX0IyQzJfRkxFWENPUF9VU0IgaXMgbm90IHNldAojIENPTkZJR19EVkJfQVMxMDIg
aXMgbm90IHNldAoKIwojIFdlYmNhbSwgVFYgKGFuYWxvZy9kaWdpdGFsKSBVU0IgZGV2aWNlcwoj
CiMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CgojCiMgU29mdHdhcmUgZGVmaW5lZCBy
YWRpbyBVU0IgZGV2aWNlcwojCiMgQ09ORklHX1VTQl9BSVJTUFkgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfSEFDS1JGIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01TSTI1MDAgaXMgbm90IHNldAoj
IENPTkZJR19NRURJQV9QQ0lfU1VQUE9SVCBpcyBub3Qgc2V0CkNPTkZJR19WSURFT0JVRjJfQ09S
RT1tCkNPTkZJR19WSURFT0JVRjJfVjRMMj1tCkNPTkZJR19WSURFT0JVRjJfTUVNT1BTPW0KQ09O
RklHX1ZJREVPQlVGMl9WTUFMTE9DPW0KIyBlbmQgb2YgTWVkaWEgZHJpdmVycwoKIwojIE1lZGlh
IGFuY2lsbGFyeSBkcml2ZXJzCiMKQ09ORklHX01FRElBX0FUVEFDSD15CkNPTkZJR19WSURFT19J
Ul9JMkM9bQoKIwojIEF1ZGlvIGRlY29kZXJzLCBwcm9jZXNzb3JzIGFuZCBtaXhlcnMKIwojIENP
TkZJR19WSURFT19UVkFVRElPIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVERBNzQzMiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19U
REExOTk3WCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKIyBD
T05GSUdfVklERU9fVEVBNjQyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMg
bm90IHNldAojIENPTkZJR19WSURFT19DUzMzMDggaXMgbm90IHNldAojIENPTkZJR19WSURFT19D
UzUzNDUgaXMgbm90IHNldAojIENPTkZJR19WSURFT19DUzUzTDMyQSBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1VEQTEzNDIg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAojIENPTkZJR19WSURF
T19XTTg3MzkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1NPTllfQlRGX01QWCBpcyBub3Qgc2V0CiMgZW5kIG9mIEF1ZGlvIGRlY29k
ZXJzLCBwcm9jZXNzb3JzIGFuZCBtaXhlcnMKCiMKIyBSRFMgZGVjb2RlcnMKIwojIENPTkZJR19W
SURFT19TQUE2NTg4IGlzIG5vdCBzZXQKIyBlbmQgb2YgUkRTIGRlY29kZXJzCgojCiMgVmlkZW8g
ZGVjb2RlcnMKIwpDT05GSUdfVklERU9fQURWNzE4MD15CiMgQ09ORklHX1ZJREVPX0FEVjcxODMg
aXMgbm90IHNldApDT05GSUdfVklERU9fQURWNzQ4WD15CkNPTkZJR19WSURFT19BRFY3NjA0PXkK
Q09ORklHX1ZJREVPX0FEVjc2MDRfQ0VDPXkKIyBDT05GSUdfVklERU9fQURWNzg0MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJREVPX0JUODE5IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQlQ4NTYg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19CVDg2NiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVP
X0tTMDEyNyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX01MODZWNzY2NyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1NBQTcxMTAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TQUE3MTFYIGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fVEMzNTg3NDMgaXMgbm90IHNldAojIENPTkZJR19WSURF
T19UVlA1MTRYIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX1RWUDcwMDIgaXMgbm90IHNldAojIENPTkZJR19WSURFT19UVzI4MDQgaXMg
bm90IHNldAojIENPTkZJR19WSURFT19UVzk5MDMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19U
Vzk5MDYgaXMgbm90IHNldAojIENPTkZJR19WSURFT19UVzk5MTAgaXMgbm90IHNldAojIENPTkZJ
R19WSURFT19WUFgzMjIwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fTUFYOTI4NiBpcyBub3Qg
c2V0CgojCiMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCiMKIyBDT05GSUdfVklERU9fU0FBNzE3
WCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0NYMjU4NDAgaXMgbm90IHNldAojIGVuZCBvZiBW
aWRlbyBkZWNvZGVycwoKIwojIFZpZGVvIGVuY29kZXJzCiMKIyBDT05GSUdfVklERU9fU0FBNzEy
NyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NBQTcxODUgaXMgbm90IHNldAojIENPTkZJR19W
SURFT19BRFY3MTcwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURWNzE3NSBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19BRFY3Mzkz
IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQUQ5Mzg5QiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJ
REVPX0FLODgxWCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1RIUzgyMDAgaXMgbm90IHNldAoj
IGVuZCBvZiBWaWRlbyBlbmNvZGVycwoKIwojIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCiMKIyBD
T05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVVBENjQwODMg
aXMgbm90IHNldAojIGVuZCBvZiBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcwoKIwojIEF1ZGlvL1Zp
ZGVvIGNvbXByZXNzaW9uIGNoaXBzCiMKIyBDT05GSUdfVklERU9fU0FBNjc1MkhTIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgQXVkaW8vVmlkZW8gY29tcHJlc3Npb24gY2hpcHMKCiMKIyBTRFIgdHVuZXIg
Y2hpcHMKIwojIENPTkZJR19TRFJfTUFYMjE3NSBpcyBub3Qgc2V0CiMgZW5kIG9mIFNEUiB0dW5l
ciBjaGlwcwoKIwojIE1pc2NlbGxhbmVvdXMgaGVscGVyIGNoaXBzCiMKIyBDT05GSUdfVklERU9f
VEhTNzMwMyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NUX01JUElEMDIgaXMgbm90
IHNldAojIGVuZCBvZiBNaXNjZWxsYW5lb3VzIGhlbHBlciBjaGlwcwoKIwojIENhbWVyYSBzZW5z
b3IgZGV2aWNlcwojCiMgQ09ORklHX1ZJREVPX0hJNTU2IGlzIG5vdCBzZXQKIyBDT05GSUdfVklE
RU9fSU1YMjE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSU1YMjE5IGlzIG5vdCBzZXQKIyBD
T05GSUdfVklERU9fSU1YMjU4IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSU1YMjc0IGlzIG5v
dCBzZXQKIyBDT05GSUdfVklERU9fSU1YMjkwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSU1Y
MzE5IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fSU1YMzU1IGlzIG5vdCBzZXQKIyBDT05GSUdf
VklERU9fT1YyNjQwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fT1YyNjU5IGlzIG5vdCBzZXQK
IyBDT05GSUdfVklERU9fT1YyNjgwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fT1YyNjg1IGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fT1YyNzQwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9f
T1Y1NjQwIGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX09WNTY0NT1tCiMgQ09ORklHX1ZJREVPX09W
NTY0NyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WNjY1MCBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJREVPX09WNTY3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WNTY3NSBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZJREVPX09WNTY5NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WNzI1MSBp
cyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WNzcyWCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVP
X09WNzY0MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1ZJREVPX09WNzc0MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WODg1NiBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJREVPX09WOTY0MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WOTY1
MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX09WMTM4NTggaXMgbm90IHNldAojIENPTkZJR19W
SURFT19WUzY2MjQgaXMgbm90IHNldAojIENPTkZJR19WSURFT19NVDlNMDAxIGlzIG5vdCBzZXQK
IyBDT05GSUdfVklERU9fTVQ5TTAzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX01UOU0xMTEg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19NVDlQMDMxIGlzIG5vdCBzZXQKIyBDT05GSUdfVklE
RU9fTVQ5VDAwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX01UOVQxMTIgaXMgbm90IHNldAoj
IENPTkZJR19WSURFT19NVDlWMDExIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fTVQ5VjAzMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX01UOVYxMTEgaXMgbm90IHNldAojIENPTkZJR19WSURF
T19TUjAzMFBDMzAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19OT09OMDEwUEMzMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJREVPX001TU9MUyBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1JEQUNN
MjAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19SSjU0TjEgaXMgbm90IHNldAojIENPTkZJR19W
SURFT19TNUs2QUEgaXMgbm90IHNldAojIENPTkZJR19WSURFT19TNUs2QTMgaXMgbm90IHNldAoj
IENPTkZJR19WSURFT19TNUs0RUNHWCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1M1SzVCQUYg
aXMgbm90IHNldAojIENPTkZJR19WSURFT19TTUlBUFAgaXMgbm90IHNldAojIENPTkZJR19WSURF
T19FVDhFSzggaXMgbm90IHNldAojIENPTkZJR19WSURFT19TNUM3M00zIGlzIG5vdCBzZXQKIyBl
bmQgb2YgQ2FtZXJhIHNlbnNvciBkZXZpY2VzCgojCiMgTGVucyBkcml2ZXJzCiMKIyBDT05GSUdf
VklERU9fQUQ1ODIwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQUs3Mzc1IGlzIG5vdCBzZXQK
IyBDT05GSUdfVklERU9fRFc5NzE0IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fRFc5NzY4IGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fRFc5ODA3X1ZDTSBpcyBub3Qgc2V0CiMgZW5kIG9mIExl
bnMgZHJpdmVycwoKIwojIEZsYXNoIGRldmljZXMKIwojIENPTkZJR19WSURFT19BRFAxNjUzIGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fTE0zNTYwIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9f
TE0zNjQ2IGlzIG5vdCBzZXQKIyBlbmQgb2YgRmxhc2ggZGV2aWNlcwoKIwojIFNQSSBoZWxwZXIg
Y2hpcHMKIwojIENPTkZJR19WSURFT19HUzE2NjIgaXMgbm90IHNldAojIGVuZCBvZiBTUEkgaGVs
cGVyIGNoaXBzCgojCiMgTWVkaWEgU1BJIEFkYXB0ZXJzCiMKQ09ORklHX0NYRDI4ODBfU1BJX0RS
Vj1tCiMgZW5kIG9mIE1lZGlhIFNQSSBBZGFwdGVycwoKQ09ORklHX01FRElBX1RVTkVSPXkKCiMK
IyBDdXN0b21pemUgVFYgdHVuZXJzCiMKQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCkNPTkZJ
R19NRURJQV9UVU5FUl9UREExODI1MD1tCkNPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KQ09O
RklHX01FRElBX1RVTkVSX1REQTgyN1g9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzE9bQpD
T05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCkNPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0K
Q09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQpDT05GSUdfTUVESUFfVFVORVJfTVNJMDAxPW0K
Q09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCkNPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQpD
T05GSUdfTUVESUFfVFVORVJfTVQyMDYzPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCkNP
TkZJR19NRURJQV9UVU5FUl9NVDIxMzE9bQpDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KQ09O
RklHX01FRElBX1RVTkVSX1hDMjAyOD1tCkNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQpDT05G
SUdfTUVESUFfVFVORVJfWEM0MDAwPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KQ09O
RklHX01FRElBX1RVTkVSX01YTDUwMDdUPW0KQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0K
Q09ORklHX01FRElBX1RVTkVSX01BWDIxNjU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTg9
bQpDT05GSUdfTUVESUFfVFVORVJfRkMwMDExPW0KQ09ORklHX01FRElBX1RVTkVSX0ZDMDAxMj1t
CkNPTkZJR19NRURJQV9UVU5FUl9GQzAwMTM9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTI9
bQpDT05GSUdfTUVESUFfVFVORVJfRTQwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfRkMyNTgwPW0K
Q09ORklHX01FRElBX1RVTkVSX004OFJTNjAwMFQ9bQpDT05GSUdfTUVESUFfVFVORVJfVFVBOTAw
MT1tCkNPTkZJR19NRURJQV9UVU5FUl9TSTIxNTc9bQpDT05GSUdfTUVESUFfVFVORVJfSVQ5MTNY
PW0KQ09ORklHX01FRElBX1RVTkVSX1I4MjBUPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDMwMVJG
PW0KQ09ORklHX01FRElBX1RVTkVSX1FNMUQxQzAwNDI9bQpDT05GSUdfTUVESUFfVFVORVJfUU0x
RDFCMDAwND1tCiMgZW5kIG9mIEN1c3RvbWl6ZSBUViB0dW5lcnMKCiMKIyBDdXN0b21pc2UgRFZC
IEZyb250ZW5kcwojCgojCiMgTXVsdGlzdGFuZGFyZCAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKIwpD
T05GSUdfRFZCX1NUQjA4OTk9bQpDT05GSUdfRFZCX1NUQjYxMDA9bQpDT05GSUdfRFZCX1NUVjA5
MHg9bQpDT05GSUdfRFZCX1NUVjA5MTA9bQpDT05GSUdfRFZCX1NUVjYxMTB4PW0KQ09ORklHX0RW
Ql9TVFY2MTExPW0KQ09ORklHX0RWQl9NWEw1WFg9bQpDT05GSUdfRFZCX004OERTMzEwMz1tCgoj
CiMgTXVsdGlzdGFuZGFyZCAoY2FibGUgKyB0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklH
X0RWQl9EUlhLPW0KQ09ORklHX0RWQl9UREExODI3MUMyREQ9bQpDT05GSUdfRFZCX1NJMjE2NT1t
CkNPTkZJR19EVkJfTU44ODQ3Mj1tCkNPTkZJR19EVkJfTU44ODQ3Mz1tCgojCiMgRFZCLVMgKHNh
dGVsbGl0ZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9DWDI0MTEwPW0KQ09ORklHX0RWQl9DWDI0
MTIzPW0KQ09ORklHX0RWQl9NVDMxMj1tCkNPTkZJR19EVkJfWkwxMDAzNj1tCkNPTkZJR19EVkJf
WkwxMDAzOT1tCkNPTkZJR19EVkJfUzVIMTQyMD1tCkNPTkZJR19EVkJfU1RWMDI4OD1tCkNPTkZJ
R19EVkJfU1RCNjAwMD1tCkNPTkZJR19EVkJfU1RWMDI5OT1tCkNPTkZJR19EVkJfU1RWNjExMD1t
CkNPTkZJR19EVkJfU1RWMDkwMD1tCkNPTkZJR19EVkJfVERBODA4Mz1tCkNPTkZJR19EVkJfVERB
MTAwODY9bQpDT05GSUdfRFZCX1REQTgyNjE9bQpDT05GSUdfRFZCX1ZFUzFYOTM9bQpDT05GSUdf
RFZCX1RVTkVSX0lURDEwMDA9bQpDT05GSUdfRFZCX1RVTkVSX0NYMjQxMTM9bQpDT05GSUdfRFZC
X1REQTgyNlg9bQpDT05GSUdfRFZCX1RVQTYxMDA9bQpDT05GSUdfRFZCX0NYMjQxMTY9bQpDT05G
SUdfRFZCX0NYMjQxMTc9bQpDT05GSUdfRFZCX0NYMjQxMjA9bQpDT05GSUdfRFZCX1NJMjFYWD1t
CkNPTkZJR19EVkJfVFMyMDIwPW0KQ09ORklHX0RWQl9EUzMwMDA9bQpDT05GSUdfRFZCX01CODZB
MTY9bQpDT05GSUdfRFZCX1REQTEwMDcxPW0KCiMKIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250
ZW5kcwojCkNPTkZJR19EVkJfU1A4ODcwPW0KQ09ORklHX0RWQl9TUDg4N1g9bQpDT05GSUdfRFZC
X0NYMjI3MDA9bQpDT05GSUdfRFZCX0NYMjI3MDI9bQpDT05GSUdfRFZCX1M1SDE0MzI9bQpDT05G
SUdfRFZCX0RSWEQ9bQpDT05GSUdfRFZCX0w2NDc4MT1tCkNPTkZJR19EVkJfVERBMTAwNFg9bQpD
T05GSUdfRFZCX05YVDYwMDA9bQpDT05GSUdfRFZCX01UMzUyPW0KQ09ORklHX0RWQl9aTDEwMzUz
PW0KQ09ORklHX0RWQl9ESUIzMDAwTUI9bQpDT05GSUdfRFZCX0RJQjMwMDBNQz1tCkNPTkZJR19E
VkJfRElCNzAwME09bQpDT05GSUdfRFZCX0RJQjcwMDBQPW0KQ09ORklHX0RWQl9ESUI5MDAwPW0K
Q09ORklHX0RWQl9UREExMDA0OD1tCkNPTkZJR19EVkJfQUY5MDEzPW0KQ09ORklHX0RWQl9FQzEw
MD1tCkNPTkZJR19EVkJfU1RWMDM2Nz1tCkNPTkZJR19EVkJfQ1hEMjgyMFI9bQpDT05GSUdfRFZC
X0NYRDI4NDFFUj1tCkNPTkZJR19EVkJfUlRMMjgzMD1tCkNPTkZJR19EVkJfUlRMMjgzMj1tCkNP
TkZJR19EVkJfUlRMMjgzMl9TRFI9bQpDT05GSUdfRFZCX1NJMjE2OD1tCkNPTkZJR19EVkJfWkQx
MzAxX0RFTU9EPW0KQ09ORklHX0RWQl9DWEQyODgwPW0KCiMKIyBEVkItQyAoY2FibGUpIGZyb250
ZW5kcwojCkNPTkZJR19EVkJfVkVTMTgyMD1tCkNPTkZJR19EVkJfVERBMTAwMjE9bQpDT05GSUdf
RFZCX1REQTEwMDIzPW0KQ09ORklHX0RWQl9TVFYwMjk3PW0KCiMKIyBBVFNDIChOb3J0aCBBbWVy
aWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKIwpDT05GSUdfRFZC
X05YVDIwMFg9bQpDT05GSUdfRFZCX09SNTEyMTE9bQpDT05GSUdfRFZCX09SNTExMzI9bQpDT05G
SUdfRFZCX0JDTTM1MTA9bQpDT05GSUdfRFZCX0xHRFQzMzBYPW0KQ09ORklHX0RWQl9MR0RUMzMw
NT1tCkNPTkZJR19EVkJfTEdEVDMzMDZBPW0KQ09ORklHX0RWQl9MRzIxNjA9bQpDT05GSUdfRFZC
X1M1SDE0MDk9bQpDT05GSUdfRFZCX0FVODUyMj1tCkNPTkZJR19EVkJfQVU4NTIyX0RUVj1tCkNP
TkZJR19EVkJfQVU4NTIyX1Y0TD1tCkNPTkZJR19EVkJfUzVIMTQxMT1tCgojCiMgSVNEQi1UICh0
ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TOTIxPW0KQ09ORklHX0RWQl9ESUI4
MDAwPW0KQ09ORklHX0RWQl9NQjg2QTIwUz1tCgojCiMgSVNEQi1TIChzYXRlbGxpdGUpICYgSVNE
Qi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9UQzkwNTIyPW0KQ09ORklH
X0RWQl9NTjg4NDQzWD1tCgojCiMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwK
IwpDT05GSUdfRFZCX1BMTD1tCkNPTkZJR19EVkJfVFVORVJfRElCMDA3MD1tCkNPTkZJR19EVkJf
VFVORVJfRElCMDA5MD1tCgojCiMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKIwpDT05G
SUdfRFZCX0RSWDM5WFlKPW0KQ09ORklHX0RWQl9MTkJIMjU9bQpDT05GSUdfRFZCX0xOQkgyOT1t
CkNPTkZJR19EVkJfTE5CUDIxPW0KQ09ORklHX0RWQl9MTkJQMjI9bQpDT05GSUdfRFZCX0lTTDY0
MDU9bQpDT05GSUdfRFZCX0lTTDY0MjE9bQpDT05GSUdfRFZCX0lTTDY0MjM9bQpDT05GSUdfRFZC
X0E4MjkzPW0KQ09ORklHX0RWQl9MR1M4R0w1PW0KQ09ORklHX0RWQl9MR1M4R1hYPW0KQ09ORklH
X0RWQl9BVEJNODgzMD1tCkNPTkZJR19EVkJfVERBNjY1eD1tCkNPTkZJR19EVkJfSVgyNTA1Vj1t
CkNPTkZJR19EVkJfTTg4UlMyMDAwPW0KQ09ORklHX0RWQl9BRjkwMzM9bQpDT05GSUdfRFZCX0hP
UlVTM0E9bQpDT05GSUdfRFZCX0FTQ09UMkU9bQpDT05GSUdfRFZCX0hFTEVORT1tCgojCiMgQ29t
bW9uIEludGVyZmFjZSAoRU41MDIyMSkgY29udHJvbGxlciBkcml2ZXJzCiMKQ09ORklHX0RWQl9D
WEQyMDk5PW0KQ09ORklHX0RWQl9TUDI9bQojIGVuZCBvZiBDdXN0b21pc2UgRFZCIEZyb250ZW5k
cwojIGVuZCBvZiBNZWRpYSBhbmNpbGxhcnkgZHJpdmVycwoKIwojIEdyYXBoaWNzIHN1cHBvcnQK
IwpDT05GSUdfVkdBX0FSQj15CkNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2CkNPTkZJR19URUdS
QV9IT1NUMVg9bQpDT05GSUdfVEVHUkFfSE9TVDFYX0ZJUkVXQUxMPXkKQ09ORklHX0RSTT15CkNP
TkZJR19EUk1fTUlQSV9EU0k9eQojIENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVYgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fREVCVUdfTU0gaXMgbm90IHNldAojIENPTkZJR19EUk1fREVCVUdfU0VM
RlRFU1QgaXMgbm90IHNldApDT05GSUdfRFJNX0tNU19IRUxQRVI9eQpDT05GSUdfRFJNX0tNU19G
Ql9IRUxQRVI9eQpDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTj15CkNPTkZJR19EUk1fRkJERVZf
T1ZFUkFMTE9DPTEwMAojIENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFIGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX0RQX0NFQyBpcyBub3Qgc2V0CkNPTkZJR19EUk1fVFRNPW0KQ09ORklHX0RS
TV9UVE1fRE1BX1BBR0VfUE9PTD15CkNPTkZJR19EUk1fVlJBTV9IRUxQRVI9bQpDT05GSUdfRFJN
X1RUTV9IRUxQRVI9bQpDT05GSUdfRFJNX0dFTV9DTUFfSEVMUEVSPXkKQ09ORklHX0RSTV9LTVNf
Q01BX0hFTFBFUj15CkNPTkZJR19EUk1fR0VNX1NITUVNX0hFTFBFUj15CkNPTkZJR19EUk1fVk09
eQpDT05GSUdfRFJNX1NDSEVEPW0KCiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwpD
T05GSUdfRFJNX0kyQ19DSDcwMDY9bQpDT05GSUdfRFJNX0kyQ19TSUwxNjQ9bQpDT05GSUdfRFJN
X0kyQ19OWFBfVERBOTk4WD1tCiMgQ09ORklHX0RSTV9JMkNfTlhQX1REQTk5NTAgaXMgbm90IHNl
dAojIGVuZCBvZiBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKCiMKIyBBUk0gZGV2aWNlcwoj
CiMgQ09ORklHX0RSTV9IRExDRCBpcyBub3Qgc2V0CkNPTkZJR19EUk1fTUFMSV9ESVNQTEFZPW0K
IyBDT05GSUdfRFJNX0tPTUVEQSBpcyBub3Qgc2V0CiMgZW5kIG9mIEFSTSBkZXZpY2VzCgojIENP
TkZJR19EUk1fUkFERU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0FNREdQVSBpcyBub3Qgc2V0
CkNPTkZJR19EUk1fTk9VVkVBVT1tCkNPTkZJR19OT1VWRUFVX0xFR0FDWV9DVFhfU1VQUE9SVD15
CkNPTkZJR19OT1VWRUFVX1BMQVRGT1JNX0RSSVZFUj15CkNPTkZJR19OT1VWRUFVX0RFQlVHPTUK
Q09ORklHX05PVVZFQVVfREVCVUdfREVGQVVMVD0zCiMgQ09ORklHX05PVVZFQVVfREVCVUdfTU1V
IGlzIG5vdCBzZXQKIyBDT05GSUdfTk9VVkVBVV9ERUJVR19QVVNIIGlzIG5vdCBzZXQKQ09ORklH
X0RSTV9OT1VWRUFVX0JBQ0tMSUdIVD15CiMgQ09ORklHX0RSTV9WR0VNIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFJNX1ZLTVMgaXMgbm90IHNldApDT05GSUdfRFJNX0VYWU5PUz1tCgojCiMgQ1JUQ3MK
IwojIENPTkZJR19EUk1fRVhZTk9TX0ZJTUQgaXMgbm90IHNldApDT05GSUdfRFJNX0VYWU5PUzU0
MzNfREVDT049eQpDT05GSUdfRFJNX0VYWU5PUzdfREVDT049eQojIENPTkZJR19EUk1fRVhZTk9T
X01JWEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0VYWU5PU19WSURJIGlzIG5vdCBzZXQKCiMK
IyBFbmNvZGVycyBhbmQgQnJpZGdlcwojCkNPTkZJR19EUk1fRVhZTk9TX0RTST15CiMgQ09ORklH
X0RSTV9FWFlOT1NfRFAgaXMgbm90IHNldApDT05GSUdfRFJNX0VYWU5PU19IRE1JPXkKQ09ORklH
X0RSTV9FWFlOT1NfTUlDPXkKCiMKIyBTdWItZHJpdmVycwojCiMgQ09ORklHX0RSTV9FWFlOT1Nf
RzJEIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0VYWU5PU19GSU1DIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFJNX0VYWU5PU19ST1RBVE9SIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0VYWU5PU19TQ0FM
RVIgaXMgbm90IHNldAojIENPTkZJR19EUk1fRVhZTk9TX0dTQyBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fUk9DS0NISVA9bQpDT05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFA9eQpDT05GSUdfUk9DS0NI
SVBfQ0ROX0RQPXkKQ09ORklHX1JPQ0tDSElQX0RXX0hETUk9eQpDT05GSUdfUk9DS0NISVBfRFdf
TUlQSV9EU0k9eQpDT05GSUdfUk9DS0NISVBfSU5OT19IRE1JPXkKIyBDT05GSUdfUk9DS0NISVBf
TFZEUyBpcyBub3Qgc2V0CiMgQ09ORklHX1JPQ0tDSElQX1JHQiBpcyBub3Qgc2V0CiMgQ09ORklH
X1JPQ0tDSElQX1JLMzA2Nl9IRE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1VETCBpcyBub3Qg
c2V0CiMgQ09ORklHX0RSTV9BU1QgaXMgbm90IHNldAojIENPTkZJR19EUk1fTUdBRzIwMCBpcyBu
b3Qgc2V0CkNPTkZJR19EUk1fUkNBUl9EVT15CkNPTkZJR19EUk1fUkNBUl9DTU09eQpDT05GSUdf
RFJNX1JDQVJfRFdfSERNST15CkNPTkZJR19EUk1fUkNBUl9MVkRTPXkKQ09ORklHX0RSTV9SQ0FS
X1dSSVRFQkFDSz15CkNPTkZJR19EUk1fU1VONEk9bQpDT05GSUdfRFJNX1NVTjRJX0hETUk9bQoj
IENPTkZJR19EUk1fU1VONElfSERNSV9DRUMgaXMgbm90IHNldApDT05GSUdfRFJNX1NVTjRJX0JB
Q0tFTkQ9bQpDT05GSUdfRFJNX1NVTjZJX0RTST1tCkNPTkZJR19EUk1fU1VOOElfRFdfSERNST1t
CkNPTkZJR19EUk1fU1VOOElfTUlYRVI9bQpDT05GSUdfRFJNX1NVTjhJX1RDT05fVE9QPW0KIyBD
T05GSUdfRFJNX1FYTCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9CT0NIUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0RSTV9WSVJUSU9fR1BVIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9NU009bQpDT05GSUdf
RFJNX01TTV9HUFVfU1RBVEU9eQojIENPTkZJR19EUk1fTVNNX1JFR0lTVEVSX0xPR0dJTkcgaXMg
bm90IHNldApDT05GSUdfRFJNX01TTV9IRE1JX0hEQ1A9eQpDT05GSUdfRFJNX01TTV9EUD15CkNP
TkZJR19EUk1fTVNNX0RTST15CkNPTkZJR19EUk1fTVNNX0RTSV9QTEw9eQpDT05GSUdfRFJNX01T
TV9EU0lfMjhOTV9QSFk9eQpDT05GSUdfRFJNX01TTV9EU0lfMjBOTV9QSFk9eQpDT05GSUdfRFJN
X01TTV9EU0lfMjhOTV84OTYwX1BIWT15CkNPTkZJR19EUk1fTVNNX0RTSV8xNE5NX1BIWT15CkNP
TkZJR19EUk1fTVNNX0RTSV8xME5NX1BIWT15CkNPTkZJR19EUk1fTVNNX0RTSV83Tk1fUEhZPXkK
Q09ORklHX0RSTV9URUdSQT1tCiMgQ09ORklHX0RSTV9URUdSQV9ERUJVRyBpcyBub3Qgc2V0CkNP
TkZJR19EUk1fUEFORUw9eQoKIwojIERpc3BsYXkgUGFuZWxzCiMKIyBDT05GSUdfRFJNX1BBTkVM
X0FSTV9WRVJTQVRJTEUgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfQVNVU19aMDBUX1RN
NVA1X05UMzU1OTYgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfQk9FX0hJTUFYODI3OUQg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfQk9FX1RWMTAxV1VNX05MNiBpcyBub3Qgc2V0
CkNPTkZJR19EUk1fUEFORUxfTFZEUz15CkNPTkZJR19EUk1fUEFORUxfU0lNUExFPW0KIyBDT05G
SUdfRFJNX1BBTkVMX0VMSURBX0tEMzVUMTMzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVM
X0ZFSVhJTl9LMTAxX0lNMkJBMDIgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfRkVJWUFO
R19GWTA3MDI0REkyNkEzMEQgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lM
OTMyMiBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9JTElURUtfSUxJOTg4MUMgaXMgbm90
IHNldAojIENPTkZJR19EUk1fUEFORUxfSU5OT0xVWF9QMDc5WkNBIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFJNX1BBTkVMX0pESV9MVDA3ME1FMDUwMDAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFO
RUxfS0lOR0RJU1BMQVlfS0QwOTdEMDQgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTEVB
RFRFS19MVEswNTBIMzE0NlcgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTEVBRFRFS19M
VEs1MDBIRDE4MjkgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19MRDkwNDAg
aXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfTEdfTEIwMzVRMDIgaXMgbm90IHNldAojIENP
TkZJR19EUk1fUEFORUxfTEdfTEc0NTczIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX05F
Q19OTDgwNDhITDExIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX05PVkFURUtfTlQzNTUx
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9OT1ZBVEVLX05UMzkwMTYgaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfTUFOVElYX01MQUYwNTdXRTUxIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFJNX1BBTkVMX09MSU1FWF9MQ0RfT0xJTlVYSU5PIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJN
X1BBTkVMX09SSVNFVEVDSF9PVE04MDA5QSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9P
U0RfT1NEMTAxVDI1ODdfNTNUUyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9QQU5BU09O
SUNfVlZYMTBGMDM0TjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1JBU1BCRVJSWVBJ
X1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9QQU5FTF9SQVlESVVNX1JNNjcxOTE9
bQojIENPTkZJR19EUk1fUEFORUxfUkFZRElVTV9STTY4MjAwIGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX1BBTkVMX1JPTkJPX1JCMDcwRDMwIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NB
TVNVTkdfUzZEMTZEMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RTNI
QTIgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU2M0owWDAzIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFNjNNMCBpcyBub3Qgc2V0CiMgQ09O
RklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RTg4QTBfQU1TNDUyRUYwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RThBQTAgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFO
RUxfU0VJS09fNDNXVkYxRyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEw
MVIxU1gwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSBpcyBub3Qgc2V0
CiMgQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3MDEgaXMgbm90IHNldAojIENPTkZJR19E
Uk1fUEFORUxfU0lUUk9OSVhfU1Q3NzAzIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX1BBTkVMX1NJ
VFJPTklYX1NUNzc4OVYgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU09OWV9BQ1g0MjRB
S1AgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfU09OWV9BQ1g1NjVBS00gaXMgbm90IHNl
dAojIENPTkZJR19EUk1fUEFORUxfVFBPX1REMDI4VFRFQzEgaXMgbm90IHNldAojIENPTkZJR19E
Uk1fUEFORUxfVFBPX1REMDQzTVRFQTEgaXMgbm90IHNldAojIENPTkZJR19EUk1fUEFORUxfVFBP
X1RQRzExMCBpcyBub3Qgc2V0CkNPTkZJR19EUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQT1t
CiMgQ09ORklHX0RSTV9QQU5FTF9WSVNJT05PWF9STTY5Mjk5IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX1BBTkVMX1hJTlBFTkdfWFBQMDU1QzI3MiBpcyBub3Qgc2V0CiMgZW5kIG9mIERpc3BsYXkg
UGFuZWxzCgpDT05GSUdfRFJNX0JSSURHRT15CkNPTkZJR19EUk1fUEFORUxfQlJJREdFPXkKCiMK
IyBEaXNwbGF5IEludGVyZmFjZSBCcmlkZ2VzCiMKIyBDT05GSUdfRFJNX0NETlNfRFNJIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX0NIUk9OVEVMX0NINzAzMyBpcyBub3Qgc2V0CiMgQ09ORklHX0RS
TV9ESVNQTEFZX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9MT05USVVNX0xUOTYx
MSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9MVkRTX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdf
RFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9CODUwVjNfRlcgaXMgbm90IHNldAojIENPTkZJR19E
Uk1fTldMX01JUElfRFNJIGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX05YUF9QVE4zNDYwIGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1BBUkFERV9QUzg2MjIgaXMgbm90IHNldAojIENPTkZJR19EUk1f
UEFSQURFX1BTODY0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9TSUxfU0lJODYyMCBpcyBub3Qg
c2V0CkNPTkZJR19EUk1fU0lJOTAyWD1tCiMgQ09ORklHX0RSTV9TSUk5MjM0IGlzIG5vdCBzZXQK
IyBDT05GSUdfRFJNX1NJTVBMRV9CUklER0UgaXMgbm90IHNldApDT05GSUdfRFJNX1RISU5FX1RI
QzYzTFZEMTAyND15CiMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzYyIGlzIG5vdCBzZXQKIyBD
T05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3NjQgaXMgbm90IHNldAojIENPTkZJR19EUk1fVE9TSElC
QV9UQzM1ODc2NyBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY4IGlzIG5v
dCBzZXQKIyBDT05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3NzUgaXMgbm90IHNldAojIENPTkZJR19E
Uk1fVElfVEZQNDEwIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9USV9TTjY1RFNJODY9eQojIENPTkZJ
R19EUk1fVElfVFBEMTJTMDE1IGlzIG5vdCBzZXQKIyBDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDYz
NDUgaXMgbm90IHNldAojIENPTkZJR19EUk1fQU5BTE9HSVhfQU5YNzhYWCBpcyBub3Qgc2V0CkNP
TkZJR19EUk1fQU5BTE9HSVhfRFA9bQpDT05GSUdfRFJNX0kyQ19BRFY3NTExPXkKQ09ORklHX0RS
TV9JMkNfQURWNzUxMV9BVURJTz15CkNPTkZJR19EUk1fSTJDX0FEVjc1MTFfQ0VDPXkKIyBDT05G
SUdfRFJNX0NETlNfTUhEUDg1NDYgaXMgbm90IHNldApDT05GSUdfRFJNX0RXX0hETUk9eQpDT05G
SUdfRFJNX0RXX0hETUlfQUhCX0FVRElPPW0KQ09ORklHX0RSTV9EV19IRE1JX0kyU19BVURJTz15
CkNPTkZJR19EUk1fRFdfSERNSV9DRUM9bQpDT05GSUdfRFJNX0RXX01JUElfRFNJPW0KIyBlbmQg
b2YgRGlzcGxheSBJbnRlcmZhY2UgQnJpZGdlcwoKIyBDT05GSUdfRFJNX0lNWF9EQ1NTIGlzIG5v
dCBzZXQKQ09ORklHX0RSTV9WQzQ9bQojIENPTkZJR19EUk1fVkM0X0hETUlfQ0VDIGlzIG5vdCBz
ZXQKQ09ORklHX0RSTV9FVE5BVklWPW0KQ09ORklHX0RSTV9FVE5BVklWX1RIRVJNQUw9eQojIENP
TkZJR19EUk1fQVJDUEdVIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9ISVNJX0hJQk1DPW0KQ09ORklH
X0RSTV9ISVNJX0tJUklOPW0KIyBDT05GSUdfRFJNX01FRElBVEVLIGlzIG5vdCBzZXQKIyBDT05G
SUdfRFJNX1pURSBpcyBub3Qgc2V0CkNPTkZJR19EUk1fTVhTPXkKQ09ORklHX0RSTV9NWFNGQj1t
CkNPTkZJR19EUk1fTUVTT049bQpDT05GSUdfRFJNX01FU09OX0RXX0hETUk9bQojIENPTkZJR19E
Uk1fQ0lSUlVTX1FFTVUgaXMgbm90IHNldAojIENPTkZJR19EUk1fR00xMlUzMjAgaXMgbm90IHNl
dAojIENPTkZJR19USU5ZRFJNX0hYODM1N0QgaXMgbm90IHNldAojIENPTkZJR19USU5ZRFJNX0lM
STkyMjUgaXMgbm90IHNldAojIENPTkZJR19USU5ZRFJNX0lMSTkzNDEgaXMgbm90IHNldAojIENP
TkZJR19USU5ZRFJNX0lMSTk0ODYgaXMgbm90IHNldAojIENPTkZJR19USU5ZRFJNX01JMDI4M1FU
IGlzIG5vdCBzZXQKIyBDT05GSUdfVElOWURSTV9SRVBBUEVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
VElOWURSTV9TVDc1ODYgaXMgbm90IHNldAojIENPTkZJR19USU5ZRFJNX1NUNzczNVIgaXMgbm90
IHNldApDT05GSUdfRFJNX1BMMTExPW0KIyBDT05GSUdfRFJNX1hFTiBpcyBub3Qgc2V0CkNPTkZJ
R19EUk1fTElNQT1tCkNPTkZJR19EUk1fUEFORlJPU1Q9bQojIENPTkZJR19EUk1fVElEU1MgaXMg
bm90IHNldAojIENPTkZJR19EUk1fWllOUU1QX0RQU1VCIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9M
RUdBQ1k9eQojIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9SMTI4IGlz
IG5vdCBzZXQKIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0CiMgQ09ORklHX0RSTV9WSUEgaXMg
bm90IHNldAojIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKQ09ORklHX0RSTV9QQU5FTF9P
UklFTlRBVElPTl9RVUlSS1M9eQoKIwojIEZyYW1lIGJ1ZmZlciBEZXZpY2VzCiMKQ09ORklHX0ZC
X0NNRExJTkU9eQpDT05GSUdfRkJfTk9USUZZPXkKQ09ORklHX0ZCPXkKIyBDT05GSUdfRklSTVdB
UkVfRURJRCBpcyBub3Qgc2V0CkNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQpDT05GSUdfRkJfQ0ZC
X0NPUFlBUkVBPXkKQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpDT05GSUdfRkJfU1lTX0ZJTExS
RUNUPXkKQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15CkNPTkZJR19GQl9TWVNfSU1BR0VCTElUPXkK
IyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldApDT05GSUdfRkJfU1lTX0ZPUFM9
eQpDT05GSUdfRkJfREVGRVJSRURfSU89eQpDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIyBDT05G
SUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKCiMKIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUg
ZHJpdmVycwojCiMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1BNMiBp
cyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FSTUNMQ0QgaXMgbm90IHNldAojIENPTkZJR19GQl9JTVgg
aXMgbm90IHNldAojIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAojIENPTkZJR19GQl9B
U0lMSUFOVCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKQ09ORklHX0ZC
X0VGST15CiMgQ09ORklHX0ZCX09QRU5DT1JFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1MxRDEz
WFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJf
UklWQSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0k3NDAgaXMgbm90IHNldAojIENPTkZJR19GQl9N
QVRST1ggaXMgbm90IHNldAojIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAojIENPTkZJR19G
Ql9BVFkxMjggaXMgbm90IHNldAojIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAojIENPTkZJR19G
Ql9TMyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZC
X1NJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKIyBDT05GSUdf
RkJfS1lSTyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAojIENPTkZJR19G
Ql9WT09ET08xIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiMgQ09O
RklHX0ZCX1BNMyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAojIENP
TkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1NNU0NVRlggaXMg
bm90IHNldAojIENPTkZJR19GQl9VREwgaXMgbm90IHNldAojIENPTkZJR19GQl9JQk1fR1hUNDUw
MCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1hJTElOWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1ZJ
UlRVQUwgaXMgbm90IHNldApDT05GSUdfWEVOX0ZCREVWX0ZST05URU5EPXkKIyBDT05GSUdfRkJf
TUVUUk9OT01FIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CkNPTkZJ
R19GQl9NWDM9eQojIENPTkZJR19GQl9TSU1QTEUgaXMgbm90IHNldAojIENPTkZJR19GQl9TU0Qx
MzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU003MTIgaXMgbm90IHNldAojIGVuZCBvZiBGcmFt
ZSBidWZmZXIgRGV2aWNlcwoKIwojIEJhY2tsaWdodCAmIExDRCBkZXZpY2Ugc3VwcG9ydAojCiMg
Q09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldApDT05GSUdfQkFDS0xJR0hUX0NMQVNT
X0RFVklDRT15CiMgQ09ORklHX0JBQ0tMSUdIVF9LVEQyNTMgaXMgbm90IHNldApDT05GSUdfQkFD
S0xJR0hUX1BXTT1tCiMgQ09ORklHX0JBQ0tMSUdIVF9RQ09NX1dMRUQgaXMgbm90IHNldAojIENP
TkZJR19CQUNLTElHSFRfQURQODg2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4
ODcwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFDS0xJR0hUX0xNMzYzMEEgaXMgbm90IHNldAojIENP
TkZJR19CQUNLTElHSFRfTE0zNjM5IGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9MUDg1NVg9
bQojIENPTkZJR19CQUNLTElHSFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9M
VjUyMDdMUCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldAoj
IENPTkZJR19CQUNLTElHSFRfQVJDWENOTiBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9M
RUQgaXMgbm90IHNldAojIGVuZCBvZiBCYWNrbGlnaHQgJiBMQ0QgZGV2aWNlIHN1cHBvcnQKCkNP
TkZJR19WSURFT01PREVfSEVMUEVSUz15CkNPTkZJR19IRE1JPXkKCiMKIyBDb25zb2xlIGRpc3Bs
YXkgZHJpdmVyIHN1cHBvcnQKIwpDT05GSUdfRFVNTVlfQ09OU09MRT15CkNPTkZJR19EVU1NWV9D
T05TT0xFX0NPTFVNTlM9ODAKQ09ORklHX0RVTU1ZX0NPTlNPTEVfUk9XUz0yNQpDT05GSUdfRlJB
TUVCVUZGRVJfQ09OU09MRT15CkNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklN
QVJZPXkKIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVIgaXMgbm90IHNldAoj
IGVuZCBvZiBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKCkNPTkZJR19MT0dPPXkKIyBD
T05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9HT19MSU5VWF9WR0Ex
NiBpcyBub3Qgc2V0CkNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQojIGVuZCBvZiBHcmFwaGlj
cyBzdXBwb3J0CgpDT05GSUdfU09VTkQ9eQpDT05GSUdfU05EPXkKQ09ORklHX1NORF9USU1FUj15
CkNPTkZJR19TTkRfUENNPXkKQ09ORklHX1NORF9QQ01fRUxEPXkKQ09ORklHX1NORF9QQ01fSUVD
OTU4PXkKQ09ORklHX1NORF9ETUFFTkdJTkVfUENNPXkKQ09ORklHX1NORF9DT01QUkVTU19PRkZM
T0FEPXkKQ09ORklHX1NORF9KQUNLPXkKQ09ORklHX1NORF9KQUNLX0lOUFVUX0RFVj15CiMgQ09O
RklHX1NORF9PU1NFTVVMIGlzIG5vdCBzZXQKQ09ORklHX1NORF9QQ01fVElNRVI9eQojIENPTkZJ
R19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CkNPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQpDT05G
SUdfU05EX01BWF9DQVJEUz0zMgpDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CkNPTkZJR19T
TkRfUFJPQ19GUz15CkNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQojIENPTkZJR19TTkRfVkVS
Qk9TRV9QUklOVEsgaXMgbm90IHNldAojIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU05EX1ZNQVNURVI9eQojIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKQ09ORklH
X1NORF9EUklWRVJTPXkKIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X0FMT09QIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAojIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBz
ZXQKQ09ORklHX1NORF9QQ0k9eQojIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0g
aXMgbm90IHNldAojIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FV
ODgyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAojIENPTkZJR19T
TkRfQVcyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfQlQ4N1ggaXMgbm90IHNldAojIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNl
dAojIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0NTNDZYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9EQVJMQTIw
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9M
QVlMQTIwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9JTkRJR09E
SiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAojIENPTkZJR19T
TkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAojIENPTkZJR19TTkRfRU5TMTM3MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VTMTkz
OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAojIENPTkZJR19TTkRf
Rk04MDEgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9IRFNQTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAojIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0tPUkcxMjEy
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0xPTEEgaXMgbm90IHNldAojIENPTkZJR19TTkRfTFg2
NDY0RVMgaXMgbm90IHNldAojIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAojIENPTkZJR19TTkRfUk1FOTYgaXMgbm90
IHNldAojIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TRTZYIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAojIENPTkZJR19TTkRf
VFJJREVOVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAojIENPTkZJR19TTkRfVklSVFVPU08gaXMg
bm90IHNldAojIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAojIENPTkZJR19TTkRfWU1GUENJ
IGlzIG5vdCBzZXQKCiMKIyBIRC1BdWRpbwojCkNPTkZJR19TTkRfSERBPW0KIyBDT05GSUdfU05E
X0hEQV9JTlRFTCBpcyBub3Qgc2V0CkNPTkZJR19TTkRfSERBX1RFR1JBPW0KIyBDT05GSUdfU05E
X0hEQV9IV0RFUCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfUkVDT05GSUcgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERB
X1BBVENIX0xPQURFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSyBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfQU5BTE9HIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX0hEQV9DT0RFQ19TSUdNQVRFTCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09E
RUNfVklBIGlzIG5vdCBzZXQKQ09ORklHX1NORF9IREFfQ09ERUNfSERNST1tCiMgQ09ORklHX1NO
RF9IREFfQ09ERUNfQ0lSUlVTIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9DT0RFQ19DT05F
WEFOVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfQ0EwMTEwIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX0hEQV9DT0RFQ19DQTAxMzIgaXMgbm90IHNldAojIENPTkZJR19TTkRfSERB
X0NPREVDX0NNRURJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9IREFfQ09ERUNfU0kzMDU0IGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX0hEQV9HRU5FUklDIGlzIG5vdCBzZXQKQ09ORklHX1NORF9I
REFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKIyBlbmQgb2YgSEQtQXVkaW8KCkNPTkZJR19TTkRfSERB
X0NPUkU9bQpDT05GSUdfU05EX0hEQV9BTElHTkVEX01NSU89eQpDT05GSUdfU05EX0hEQV9DT01Q
T05FTlQ9eQpDT05GSUdfU05EX0hEQV9QUkVBTExPQ19TSVpFPTY0CkNPTkZJR19TTkRfU1BJPXkK
Q09ORklHX1NORF9VU0I9eQojIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90
IHNldAojIENPTkZJR19TTkRfVVNCXzZGSVJFIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1VTQl9I
SUZBQ0UgaXMgbm90IHNldAojIENPTkZJR19TTkRfQkNEMjAwMCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9VU0JfUE9EIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1VTQl9QT0RIRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9VU0JfVE9ORVBPUlQgaXMgbm90IHNldAojIENPTkZJR19TTkRfVVNCX1ZB
UklBWCBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DPXkKQ09ORklHX1NORF9TT0NfR0VORVJJQ19E
TUFFTkdJTkVfUENNPXkKQ09ORklHX1NORF9TT0NfQ09NUFJFU1M9eQojIENPTkZJR19TTkRfU09D
X0FNRF9BQ1AgaXMgbm90IHNldAojIENPTkZJR19TTkRfQVRNRUxfU09DIGlzIG5vdCBzZXQKQ09O
RklHX1NORF9CQ00yODM1X1NPQ19JMlM9bQojIENPTkZJR19TTkRfQkNNNjNYWF9JMlNfV0hJU1RM
RVIgaXMgbm90IHNldAojIENPTkZJR19TTkRfREVTSUdOV0FSRV9JMlMgaXMgbm90IHNldAoKIwoj
IFNvQyBBdWRpbyBmb3IgRnJlZXNjYWxlIENQVXMKIwoKIwojIENvbW1vbiBTb0MgQXVkaW8gb3B0
aW9ucyBmb3IgRnJlZXNjYWxlIENQVXM6CiMKIyBDT05GSUdfU05EX1NPQ19GU0xfQVNSQyBpcyBu
b3Qgc2V0CkNPTkZJR19TTkRfU09DX0ZTTF9TQUk9bQojIENPTkZJR19TTkRfU09DX0ZTTF9NUVMg
aXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0ZTTF9BVURNSVggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX0ZTTF9TU0kgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0ZTTF9TUERJRiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfRlNMX0VTQUkgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX0ZTTF9NSUNGSUwgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0lNWF9BVURNVVgg
aXMgbm90IHNldAojIENPTkZJR19TTkRfSU1YX1NPQyBpcyBub3Qgc2V0CiMgZW5kIG9mIFNvQyBB
dWRpbyBmb3IgRnJlZXNjYWxlIENQVXMKCiMgQ09ORklHX1NORF9JMlNfSEk2MjEwX0kyUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9LSVJLV09PRF9TT0MgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX0lNRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfS0VFTUJBWSBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfTVQyNzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19N
VDY3OTcgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX01UODE3MyBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9TT0NfTVQ4MTgzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19NVEtfQlRDVlNE
IGlzIG5vdCBzZXQKCiMKIyBBU29DIHN1cHBvcnQgZm9yIEFtbG9naWMgcGxhdGZvcm1zCiMKIyBD
T05GSUdfU05EX01FU09OX0FJVSBpcyBub3Qgc2V0CkNPTkZJR19TTkRfTUVTT05fQVhHX0ZJRk89
bQpDT05GSUdfU05EX01FU09OX0FYR19GUkREUj1tCkNPTkZJR19TTkRfTUVTT05fQVhHX1RPRERS
PW0KQ09ORklHX1NORF9NRVNPTl9BWEdfVERNX0ZPUk1BVFRFUj1tCkNPTkZJR19TTkRfTUVTT05f
QVhHX1RETV9JTlRFUkZBQ0U9bQpDT05GSUdfU05EX01FU09OX0FYR19URE1JTj1tCkNPTkZJR19T
TkRfTUVTT05fQVhHX1RETU9VVD1tCkNPTkZJR19TTkRfTUVTT05fQVhHX1NPVU5EX0NBUkQ9bQpD
T05GSUdfU05EX01FU09OX0FYR19TUERJRk9VVD1tCkNPTkZJR19TTkRfTUVTT05fQVhHX1NQRElG
SU49bQpDT05GSUdfU05EX01FU09OX0FYR19QRE09bQpDT05GSUdfU05EX01FU09OX0NBUkRfVVRJ
TFM9bQpDT05GSUdfU05EX01FU09OX0NPREVDX0dMVUU9bQojIENPTkZJR19TTkRfTUVTT05fR1hf
U09VTkRfQ0FSRCBpcyBub3Qgc2V0CkNPTkZJR19TTkRfTUVTT05fRzEyQV9UT0FDT0RFQz1tCkNP
TkZJR19TTkRfTUVTT05fRzEyQV9UT0hETUlUWD1tCkNPTkZJR19TTkRfU09DX01FU09OX1Q5MDE1
PW0KIyBlbmQgb2YgQVNvQyBzdXBwb3J0IGZvciBBbWxvZ2ljIHBsYXRmb3JtcwoKQ09ORklHX1NO
RF9TT0NfUUNPTT1tCkNPTkZJR19TTkRfU09DX0xQQVNTX0NQVT1tCkNPTkZJR19TTkRfU09DX0xQ
QVNTX1BMQVRGT1JNPW0KQ09ORklHX1NORF9TT0NfTFBBU1NfQVBRODAxNj1tCiMgQ09ORklHX1NO
RF9TT0NfU1RPUk0gaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19BUFE4MDE2X1NCQz1tCkNPTkZJ
R19TTkRfU09DX1FDT01fQ09NTU9OPW0KQ09ORklHX1NORF9TT0NfUURTUDZfQ09NTU9OPW0KQ09O
RklHX1NORF9TT0NfUURTUDZfQ09SRT1tCkNPTkZJR19TTkRfU09DX1FEU1A2X0FGRT1tCkNPTkZJ
R19TTkRfU09DX1FEU1A2X0FGRV9EQUk9bQpDT05GSUdfU05EX1NPQ19RRFNQNl9BRkVfQ0xPQ0tT
PW0KQ09ORklHX1NORF9TT0NfUURTUDZfQURNPW0KQ09ORklHX1NORF9TT0NfUURTUDZfUk9VVElO
Rz1tCkNPTkZJR19TTkRfU09DX1FEU1A2X0FTTT1tCkNPTkZJR19TTkRfU09DX1FEU1A2X0FTTV9E
QUk9bQpDT05GSUdfU05EX1NPQ19RRFNQNj1tCkNPTkZJR19TTkRfU09DX01TTTg5OTY9bQpDT05G
SUdfU05EX1NPQ19TRE04NDU9bQpDT05GSUdfU05EX1NPQ19ST0NLQ0hJUD1tCkNPTkZJR19TTkRf
U09DX1JPQ0tDSElQX0kyUz1tCiMgQ09ORklHX1NORF9TT0NfUk9DS0NISVBfUERNIGlzIG5vdCBz
ZXQKQ09ORklHX1NORF9TT0NfUk9DS0NISVBfU1BESUY9bQojIENPTkZJR19TTkRfU09DX1JPQ0tD
SElQX01BWDk4MDkwIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfUk9DS0NISVBfUlQ1NjQ1PW0K
IyBDT05GSUdfU05EX1NPQ19SSzMyODhfSERNSV9BTkFMT0cgaXMgbm90IHNldApDT05GSUdfU05E
X1NPQ19SSzMzOTlfR1JVX1NPVU5EPW0KQ09ORklHX1NORF9TT0NfU0FNU1VORz15CiMgQ09ORklH
X1NORF9TQU1TVU5HX1BDTSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TQU1TVU5HX1NQRElGIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NBTVNVTkdfSTJTIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19TQU1TVU5HX1NNREtfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TQU1T
VU5HX1NNREtfU1BESUYgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1NNREtfV004OTk0X1BD
TSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfU05PVyBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfT0RST0lEIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19BUk5EQUxFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU05EX1NPQ19TQU1TVU5HX01JREFTX1dNMTgxMSBpcyBub3Qgc2V0CgojCiMg
U29DIEF1ZGlvIHN1cHBvcnQgZm9yIFJlbmVzYXMgU29DcwojCiMgQ09ORklHX1NORF9TT0NfU0g0
X0ZTSSBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JDQVI9eQojIGVuZCBvZiBTb0MgQXVkaW8g
c3VwcG9ydCBmb3IgUmVuZXNhcyBTb0NzCgojIENPTkZJR19TTkRfU09DX1NPRl9UT1BMRVZFTCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfU1BSRCBpcyBub3Qgc2V0CgojCiMgU1RNaWNyb2Vs
ZWN0cm9uaWNzIFNUTTMyIFNPQyBhdWRpbyBzdXBwb3J0CiMKIyBlbmQgb2YgU1RNaWNyb2VsZWN0
cm9uaWNzIFNUTTMyIFNPQyBhdWRpbyBzdXBwb3J0CgojCiMgQWxsd2lubmVyIFNvQyBBdWRpbyBz
dXBwb3J0CiMKIyBDT05GSUdfU05EX1NVTjRJX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NVTjhJX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NVTjhJX0NPREVDX0FOQUxPRyBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TVU41MElfQ09ERUNfQU5BTE9HIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NVTjRJX0kyUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU1VONElfU1BESUY9bQoj
IGVuZCBvZiBBbGx3aW5uZXIgU29DIEF1ZGlvIHN1cHBvcnQKCkNPTkZJR19TTkRfU09DX1RFR1JB
PW0KIyBDT05GSUdfU05EX1NPQ19URUdSQTIwX0FDOTcgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1RFR1JBMjBfREFTIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19URUdSQTIwX0kyUyBp
cyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1RFR1JBMjBfU1BESUY9bQojIENPTkZJR19TTkRfU09D
X1RFR1JBMzBfQUhVQiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEVHUkEzMF9JMlMgaXMg
bm90IHNldAojIENPTkZJR19TTkRfU09DX1RFR1JBMjEwX0FIVUIgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1RFR1JBMjEwX0RNSUMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1RFR1JB
MjEwX0kyUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEVHUkExODZfRFNQSyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfVEVHUkEyMTBfQURNQUlGIGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19URUdSQV9SVDU2NDAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1RFR1JBX1dN
ODc1MyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEVHUkFfV004OTAzIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19URUdSQV9XTTk3MTIgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09D
X1RFR1JBX1RSSU1TTElDRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEVHUkFfQUxDNTYz
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEVHUkFfTUFYOTgwOTAgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfU09DX1RFR1JBX1JUNTY3NyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0Nf
VEVHUkFfU0dUTDUwMDAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1VOSVBISUVSIGlzIG5v
dCBzZXQKIyBDT05GSUdfU05EX1NPQ19YSUxJTlhfSTJTIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19YSUxJTlhfQVVESU9fRk9STUFUVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19Y
SUxJTlhfU1BESUYgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1hURlBHQV9JMlMgaXMgbm90
IHNldAojIENPTkZJR19aWF9TUERJRiBpcyBub3Qgc2V0CiMgQ09ORklHX1pYX0kyUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1pYX1RETSBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJ
PXkKCiMKIyBDT0RFQyBkcml2ZXJzCiMKIyBDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDIGlzIG5v
dCBzZXQKIyBDT05GSUdfU05EX1NPQ19BREFVMTcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9T
T0NfQURBVTE3NjFfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19BREFVMTc2MV9TUEkg
aXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0FEQVU3MDAyIGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19BREFVNzExOF9IVyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQURBVTcxMThf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19BSzQxMDQgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX0FLNDExOCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs0NDU4IGlzIG5v
dCBzZXQKIyBDT05GSUdfU05EX1NPQ19BSzQ1NTQgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19B
SzQ2MTM9eQojIENPTkZJR19TTkRfU09DX0FLNDY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9T
T0NfQUs1Mzg2IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19BSzU1NTggaXMgbm90IHNldAoj
IENPTkZJR19TTkRfU09DX0FMQzU2MjMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0JEMjg2
MjMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0JUX1NDTyBpcyBub3Qgc2V0CkNPTkZJR19T
TkRfU09DX0NST1NfRUNfQ09ERUM9bQojIENPTkZJR19TTkRfU09DX0NTMzVMMzIgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfU09DX0NTMzVMMzMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NT
MzVMMzQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTMzVMMzUgaXMgbm90IHNldAojIENP
TkZJR19TTkRfU09DX0NTMzVMMzYgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDJMNDIg
aXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDJMNTFfSTJDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19DUzQyTDUyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyTDU2IGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyTDczIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19DUzQyMzQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDI2NSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0MjcwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQy
NzFfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyNzFfU1BJIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19DUzQyWFg4X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0Nf
Q1M0MzEzMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQ1M0MzQxIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19DUzQzNDkgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNTNMMzAg
aXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NYMjA3MlggaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX0RBNzIxMyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX0RBNzIxOT1tCkNPTkZJR19T
TkRfU09DX0RNSUM9bQpDT05GSUdfU05EX1NPQ19IRE1JX0NPREVDPXkKQ09ORklHX1NORF9TT0Nf
RVM3MTM0PW0KQ09ORklHX1NORF9TT0NfRVM3MjQxPW0KIyBDT05GSUdfU05EX1NPQ19FUzgzMTYg
aXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0VTODMyOF9JMkMgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX0VTODMyOF9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0dUTTYwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5OT19SSzMwMzYgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX01BWDk4MDg4IGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfTUFYOTgzNTdBPW0K
IyBDT05GSUdfU05EX1NPQ19NQVg5ODUwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTUFY
OTg2NyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX01BWDk4OTI3PW0KIyBDT05GSUdfU05EX1NP
Q19NQVg5ODM3M19JMkMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX01BWDk4MzczX1NEVyBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTUFYOTgzOTAgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX01BWDk4NjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX01TTTg5MTZfV0NEX0FO
QUxPRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTVNNODkxNl9XQ0RfRElHSVRBTCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfUENNMTY4MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9T
T0NfUENNMTc4OV9JMkMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1BDTTE3OVhfSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ00xNzlYX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9TT0NfUENNMTg2WF9JMkMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1BDTTE4Nlhf
U1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ00zMDYwX0kyQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9TT0NfUENNMzA2MF9TUEkgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19QQ00z
MTY4QT1tCkNPTkZJR19TTkRfU09DX1BDTTMxNjhBX0kyQz1tCiMgQ09ORklHX1NORF9TT0NfUENN
MzE2OEFfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ001MTJ4X0kyQyBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfUENNNTEyeF9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1JLMzMyOCBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JMNjIzMT1tCiMgQ09ORklHX1NO
RF9TT0NfUlQxMzA4X1NEVyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JUNTUxND1tCkNPTkZJ
R19TTkRfU09DX1JUNTUxNF9TUEk9bQojIENPTkZJR19TTkRfU09DX1JUNTYxNiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfUlQ1NjMxIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfUlQ1NjQ1
PW0KQ09ORklHX1NORF9TT0NfUlQ1NjYzPW0KIyBDT05GSUdfU05EX1NPQ19SVDU2ODJfU0RXIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19SVDcwMF9TRFcgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1JUNzExX1NEVyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfUlQ3MTVfU0RXIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TR1RMNTAwMCBpcyBub3Qgc2V0CkNPTkZJR19TTkRf
U09DX1NJTVBMRV9BTVBMSUZJRVI9bQojIENPTkZJR19TTkRfU09DX1NJUkZfQVVESU9fQ09ERUMg
aXMgbm90IHNldApDT05GSUdfU05EX1NPQ19TUERJRj1tCiMgQ09ORklHX1NORF9TT0NfU1NNMjMw
NSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEkgaXMgbm90IHNldAojIENP
TkZJR19TTkRfU09DX1NTTTI2MDJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TU000
NTY3IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TVEEzMlggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1NUQTM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfU1RJX1NBUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTMjU1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9T
T0NfVEFTMjU2MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTMjc2NCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfVEFTMjc3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFT
NTA4NiBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1RBUzU3MVg9bQojIENPTkZJR19TTkRfU09D
X1RBUzU3MjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1RBUzY0MjQgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfU09DX1REQTc0MTkgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1RGQTk4
NzkgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzIzX0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjNfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19UTFYzMjBBSUMzMVhYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMz
Mlg0X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMzJYNF9TUEkgaXMg
bm90IHNldAojIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzNYIGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19UTFYzMjBBRENYMTQwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UUzNBMjI3
RSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVFNDUzQyWFggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1RTQ1M0NTQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1VEQTEzMzQgaXMg
bm90IHNldAojIENPTkZJR19TTkRfU09DX1dDRDkzMzUgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1dNODUxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NTIzIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19XTTg1MjQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODU4
MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzExIGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19XTTg3MjggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODczMSBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfV004NzM3IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19X
TTg3NDEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc1MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9TT0NfV004NzUzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19XTTg3NzAgaXMg
bm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc3NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9T
T0NfV004NzgyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19XTTg4MDRfSTJDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU05EX1NPQ19XTTg4MDRfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NP
Q19XTTg5MDMgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19XTTg5MDQ9bQojIENPTkZJR19TTkRf
U09DX1dNODk2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004OTYyIGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19XTTg5NzQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODk3
OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004OTg1IGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19XU0E4ODFYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19aTDM4MDYwIGlzIG5v
dCBzZXQKIyBDT05GSUdfU05EX1NPQ19aWF9BVUQ5NlAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfTUFYOTc1OSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTVQ2MzUxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU05EX1NPQ19NVDYzNTggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX01U
NjY2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTkFVODU0MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9TT0NfTkFVODgxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTkFVODgyMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfTkFVODgyNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfVFBBNjEzMEEyIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ09ERUMgZHJpdmVycwoKQ09ORklH
X1NORF9TSU1QTEVfQ0FSRF9VVElMUz15CkNPTkZJR19TTkRfU0lNUExFX0NBUkQ9eQpDT05GSUdf
U05EX0FVRElPX0dSQVBIX0NBUkQ9eQojIENPTkZJR19TTkRfWEVOX0ZST05URU5EIGlzIG5vdCBz
ZXQKCiMKIyBISUQgc3VwcG9ydAojCkNPTkZJR19ISUQ9eQojIENPTkZJR19ISURfQkFUVEVSWV9T
VFJFTkdUSCBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiMgQ09ORklHX1VI
SUQgaXMgbm90IHNldApDT05GSUdfSElEX0dFTkVSSUM9eQoKIwojIFNwZWNpYWwgSElEIGRyaXZl
cnMKIwpDT05GSUdfSElEX0E0VEVDSD15CiMgQ09ORklHX0hJRF9BQ0NVVE9VQ0ggaXMgbm90IHNl
dAojIENPTkZJR19ISURfQUNSVVggaXMgbm90IHNldApDT05GSUdfSElEX0FQUExFPXkKIyBDT05G
SUdfSElEX0FQUExFSVIgaXMgbm90IHNldAojIENPTkZJR19ISURfQVNVUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0hJRF9BVVJFQUwgaXMgbm90IHNldApDT05GSUdfSElEX0JFTEtJTj15CiMgQ09ORklH
X0hJRF9CRVRPUF9GRiBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9CSUdCRU5fRkYgaXMgbm90IHNl
dApDT05GSUdfSElEX0NIRVJSWT15CkNPTkZJR19ISURfQ0hJQ09OWT15CiMgQ09ORklHX0hJRF9D
T1JTQUlSIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0NPVUdBUiBpcyBub3Qgc2V0CiMgQ09ORklH
X0hJRF9NQUNBTExZIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1BST0RJS0VZUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0hJRF9DTUVESUEgaXMgbm90IHNldAojIENPTkZJR19ISURfQ1JFQVRJVkVfU0Iw
NTQwIGlzIG5vdCBzZXQKQ09ORklHX0hJRF9DWVBSRVNTPXkKIyBDT05GSUdfSElEX0RSQUdPTlJJ
U0UgaXMgbm90IHNldAojIENPTkZJR19ISURfRU1TX0ZGIGlzIG5vdCBzZXQKIyBDT05GSUdfSElE
X0VMQU4gaXMgbm90IHNldAojIENPTkZJR19ISURfRUxFQ09NIGlzIG5vdCBzZXQKIyBDT05GSUdf
SElEX0VMTyBpcyBub3Qgc2V0CkNPTkZJR19ISURfRVpLRVk9eQojIENPTkZJR19ISURfR0VNQklS
RCBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9HRlJNIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0dM
T1JJT1VTIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0hPTFRFSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0hJRF9HT09HTEVfSEFNTUVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1ZJVkFMREkgaXMgbm90
IHNldAojIENPTkZJR19ISURfR1Q2ODNSIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0tFWVRPVUNI
IGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9VQ0xP
R0lDIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1dBTFRPUCBpcyBub3Qgc2V0CiMgQ09ORklHX0hJ
RF9WSUVXU09OSUMgaXMgbm90IHNldAojIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAoj
IENPTkZJR19ISURfSUNBREUgaXMgbm90IHNldApDT05GSUdfSElEX0lURT15CiMgQ09ORklHX0hJ
RF9KQUJSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKQ09ORklH
X0hJRF9LRU5TSU5HVE9OPXkKIyBDT05GSUdfSElEX0xDUE9XRVIgaXMgbm90IHNldAojIENPTkZJ
R19ISURfTEVEIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0xFTk9WTyBpcyBub3Qgc2V0CkNPTkZJ
R19ISURfTE9HSVRFQ0g9eQojIENPTkZJR19ISURfTE9HSVRFQ0hfSElEUFAgaXMgbm90IHNldAoj
IENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZG
IGlzIG5vdCBzZXQKIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAojIENPTkZJR19MT0dJ
V0hFRUxTX0ZGIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX01BR0lDTU9VU0UgaXMgbm90IHNldAoj
IENPTkZJR19ISURfTUFMVFJPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9NQVlGTEFTSCBpcyBu
b3Qgc2V0CkNPTkZJR19ISURfUkVEUkFHT049eQpDT05GSUdfSElEX01JQ1JPU09GVD15CkNPTkZJ
R19ISURfTU9OVEVSRVk9eQpDT05GSUdfSElEX01VTFRJVE9VQ0g9eQojIENPTkZJR19ISURfTlRJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX09S
VEVLIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKIyBDT05G
SUdfSElEX1BFTk1PVU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSElEX1BJQ09MQ0QgaXMgbm90IHNldAojIENPTkZJR19ISURfUExBTlRST05J
Q1MgaXMgbm90IHNldAojIENPTkZJR19ISURfUFJJTUFYIGlzIG5vdCBzZXQKIyBDT05GSUdfSElE
X1JFVFJPREUgaXMgbm90IHNldAojIENPTkZJR19ISURfUk9DQ0FUIGlzIG5vdCBzZXQKIyBDT05G
SUdfSElEX1NBSVRFSyBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQK
IyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAojIENPTkZJR19ISURfU1BFRURMSU5LIGlzIG5v
dCBzZXQKIyBDT05GSUdfSElEX1NURUFNIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1NURUVMU0VS
SUVTIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAojIENPTkZJR19I
SURfUk1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CiMgQ09O
RklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAojIENPTkZJR19ISURfVElWTyBpcyBub3Qg
c2V0CiMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1RISU5HTSBp
cyBub3Qgc2V0CiMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAojIENPTkZJR19I
SURfVURSQVdfUFMzIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX1UyRlpFUk8gaXMgbm90IHNldAoj
IENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAojIENPTkZJR19ISURfV0lJTU9URSBpcyBub3Qg
c2V0CiMgQ09ORklHX0hJRF9YSU5NTyBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9aRVJPUExVUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0hJRF9aWURBQ1JPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0hJRF9T
RU5TT1JfSFVCIGlzIG5vdCBzZXQKIyBDT05GSUdfSElEX0FMUFMgaXMgbm90IHNldAojIENPTkZJ
R19ISURfTUNQMjIyMSBpcyBub3Qgc2V0CiMgZW5kIG9mIFNwZWNpYWwgSElEIGRyaXZlcnMKCiMK
IyBVU0IgSElEIHN1cHBvcnQKIwpDT05GSUdfVVNCX0hJRD15CiMgQ09ORklHX0hJRF9QSUQgaXMg
bm90IHNldAojIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKIyBlbmQgb2YgVVNCIEhJRCBz
dXBwb3J0CgojCiMgSTJDIEhJRCBzdXBwb3J0CiMKQ09ORklHX0kyQ19ISUQ9bQojIGVuZCBvZiBJ
MkMgSElEIHN1cHBvcnQKIyBlbmQgb2YgSElEIHN1cHBvcnQKCkNPTkZJR19VU0JfT0hDSV9MSVRU
TEVfRU5ESUFOPXkKQ09ORklHX1VTQl9TVVBQT1JUPXkKQ09ORklHX1VTQl9DT01NT049eQojIENP
TkZJR19VU0JfTEVEX1RSSUcgaXMgbm90IHNldApDT05GSUdfVVNCX1VMUElfQlVTPXkKQ09ORklH
X1VTQl9DT05OX0dQSU89eQpDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkNPTkZJR19VU0I9eQpD
T05GSUdfVVNCX1BDST15CiMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qg
c2V0CgojCiMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwojCkNPTkZJR19VU0JfREVGQVVMVF9Q
RVJTSVNUPXkKIyBDT05GSUdfVVNCX0ZFV19JTklUX1JFVFJJRVMgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldApDT05GSUdfVVNCX09URz15CiMgQ09ORklH
X1VTQl9PVEdfUFJPRFVDVExJU1QgaXMgbm90IHNldAojIENPTkZJR19VU0JfT1RHX0RJU0FCTEVf
RVhURVJOQUxfSFVCIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX09UR19GU00gaXMgbm90IHNldAoj
IENPTkZJR19VU0JfTEVEU19UUklHR0VSX1VTQlBPUlQgaXMgbm90IHNldApDT05GSUdfVVNCX0FV
VE9TVVNQRU5EX0RFTEFZPTIKIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CgojCiMgVVNCIEhv
c3QgQ29udHJvbGxlciBEcml2ZXJzCiMKIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNl
dApDT05GSUdfVVNCX1hIQ0lfSENEPXkKIyBDT05GSUdfVVNCX1hIQ0lfREJHQ0FQIGlzIG5vdCBz
ZXQKQ09ORklHX1VTQl9YSENJX1BDST15CiMgQ09ORklHX1VTQl9YSENJX1BDSV9SRU5FU0FTIGlz
IG5vdCBzZXQKQ09ORklHX1VTQl9YSENJX1BMQVRGT1JNPXkKIyBDT05GSUdfVVNCX1hIQ0lfSElT
VEIgaXMgbm90IHNldAojIENPTkZJR19VU0JfWEhDSV9NVEsgaXMgbm90IHNldAojIENPTkZJR19V
U0JfWEhDSV9NVkVCVSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfWEhDSV9SQ0FSPXkKQ09ORklHX1VT
Ql9YSENJX1RFR1JBPXkKIyBDT05GSUdfVVNCX0JSQ01TVEIgaXMgbm90IHNldApDT05GSUdfVVNC
X0VIQ0lfSENEPXkKQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKQ09ORklHX1VTQl9FSENJ
X1RUX05FV1NDSEVEPXkKQ09ORklHX1VTQl9FSENJX1BDST15CiMgQ09ORklHX1VTQl9FSENJX0ZT
TCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9FSENJX01YQyBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
RUhDSV9IQ0RfT1JJT049eQojIENPTkZJR19VU0JfRUhDSV9URUdSQSBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfRUhDSV9FWFlOT1M9eQpDT05GSUdfVVNCX0VIQ0lfSENEX1BMQVRGT1JNPXkKIyBDT05G
SUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9GT1RHMjEwX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VT
Ql9NQVgzNDIxX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfT0hDSV9IQ0Q9eQpDT05GSUdfVVNC
X09IQ0lfSENEX1BDST15CkNPTkZJR19VU0JfT0hDSV9FWFlOT1M9eQpDT05GSUdfVVNCX09IQ0lf
SENEX1BMQVRGT1JNPXkKIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdf
VVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90
IHNldApDT05GSUdfVVNCX1JFTkVTQVNfVVNCSFNfSENEPW0KIyBDT05GSUdfVVNCX0hDRF9URVNU
X01PREUgaXMgbm90IHNldApDT05GSUdfVVNCX1JFTkVTQVNfVVNCSFM9eQoKIwojIFVTQiBEZXZp
Y2UgQ2xhc3MgZHJpdmVycwojCkNPTkZJR19VU0JfQUNNPW0KIyBDT05GSUdfVVNCX1BSSU5URVIg
aXMgbm90IHNldAojIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1RNQyBp
cyBub3Qgc2V0CgojCiMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtf
REVWX1NEIG1heQojCgojCiMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZv
ciBtb3JlIGluZm8KIwpDT05GSUdfVVNCX1NUT1JBR0U9eQojIENPTkZJR19VU0JfU1RPUkFHRV9E
RUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TVE9SQUdFX1JFQUxURUsgaXMgbm90IHNldAoj
IENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NUT1JB
R0VfRlJFRUNPTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NU
T1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAojIENPTkZJR19V
U0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VD
SCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TVE9S
QUdFX0VORV9VQjYyNTAgaXMgbm90IHNldAojIENPTkZJR19VU0JfVUFTIGlzIG5vdCBzZXQKCiMK
IyBVU0IgSW1hZ2luZyBkZXZpY2VzCiMKIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQklQX0NPUkUgaXMgbm90
IHNldAojIENPTkZJR19VU0JfQ0ROUzMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTVRVMyBpcyBu
b3Qgc2V0CkNPTkZJR19VU0JfTVVTQl9IRFJDPXkKIyBDT05GSUdfVVNCX01VU0JfSE9TVCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9NVVNCX0dBREdFVCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTVVT
Ql9EVUFMX1JPTEU9eQoKIwojIFBsYXRmb3JtIEdsdWUgTGF5ZXIKIwpDT05GSUdfVVNCX01VU0Jf
U1VOWEk9eQojIENPTkZJR19VU0JfTVVTQl9NRURJQVRFSyBpcyBub3Qgc2V0CgojCiMgTVVTQiBE
TUEgbW9kZQojCiMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldApDT05GSUdfVVNCX0RX
QzM9eQojIENPTkZJR19VU0JfRFdDM19VTFBJIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzNf
SE9TVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MzX0dBREdFVCBpcyBub3Qgc2V0CkNPTkZJ
R19VU0JfRFdDM19EVUFMX1JPTEU9eQoKIwojIFBsYXRmb3JtIEdsdWUgRHJpdmVyIFN1cHBvcnQK
IwpDT05GSUdfVVNCX0RXQzNfRVhZTk9TPXkKQ09ORklHX1VTQl9EV0MzX1BDST15CkNPTkZJR19V
U0JfRFdDM19IQVBTPXkKQ09ORklHX1VTQl9EV0MzX0tFWVNUT05FPXkKQ09ORklHX1VTQl9EV0Mz
X01FU09OX0cxMkE9eQpDT05GSUdfVVNCX0RXQzNfT0ZfU0lNUExFPXkKQ09ORklHX1VTQl9EV0Mz
X1FDT009eQpDT05GSUdfVVNCX0RXQzI9eQojIENPTkZJR19VU0JfRFdDMl9IT1NUIGlzIG5vdCBz
ZXQKCiMKIyBHYWRnZXQvRHVhbC1yb2xlIG1vZGUgcmVxdWlyZXMgVVNCIEdhZGdldCBzdXBwb3J0
IHRvIGJlIGVuYWJsZWQKIwojIENPTkZJR19VU0JfRFdDMl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQK
Q09ORklHX1VTQl9EV0MyX0RVQUxfUk9MRT15CiMgQ09ORklHX1VTQl9EV0MyX1BDSSBpcyBub3Qg
c2V0CiMgQ09ORklHX1VTQl9EV0MyX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzJf
VFJBQ0tfTUlTU0VEX1NPRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0NISVBJREVBPXkKQ09ORklH
X1VTQl9DSElQSURFQV9VREM9eQpDT05GSUdfVVNCX0NISVBJREVBX0hPU1Q9eQpDT05GSUdfVVNC
X0NISVBJREVBX1BDST15CkNPTkZJR19VU0JfQ0hJUElERUFfTVNNPXkKQ09ORklHX1VTQl9DSElQ
SURFQV9JTVg9eQpDT05GSUdfVVNCX0NISVBJREVBX0dFTkVSSUM9eQpDT05GSUdfVVNCX0NISVBJ
REVBX1RFR1JBPXkKQ09ORklHX1VTQl9JU1AxNzYwPXkKQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15
CkNPTkZJR19VU0JfSVNQMTc2MV9VREM9eQojIENPTkZJR19VU0JfSVNQMTc2MF9IT1NUX1JPTEUg
aXMgbm90IHNldAojIENPTkZJR19VU0JfSVNQMTc2MF9HQURHRVRfUk9MRSBpcyBub3Qgc2V0CkNP
TkZJR19VU0JfSVNQMTc2MF9EVUFMX1JPTEU9eQoKIwojIFVTQiBwb3J0IGRyaXZlcnMKIwpDT05G
SUdfVVNCX1NFUklBTD1tCiMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9TRVJJQUxfU0lNUExFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklBTF9B
SVJDQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklB
TF9DSDM0MSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfU0VSSUFMX0NQMjEwWCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVT
U19NOCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldApDT05G
SUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCiMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90
IHNldAojIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VS
SUFMX0lSIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
U0VSSUFMX0Y4MTIzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfRjgxNTNYIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAojIENPTkZJR19VU0Jf
U0VSSUFMX0lQVyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9T
RVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qg
c2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfTUVUUk8gaXMg
bm90IHNldAojIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAojIENPTkZJR19V
U0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VSSUFMX01YVVBPUlQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4
WDUgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklB
TF9TWU1CT0wgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKIyBD
T05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VSSUFM
X1hJUkNPTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklB
TF9PUFRJQ09OIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1NFUklBTF9YU0VOU19NVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfV0lTSEJPTkUgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
U0VSSUFMX1NTVTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TRVJJQUxfUVQyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX1NFUklBTF9VUEQ3OEYwNzMwIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CgojCiMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwoj
CiMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qg
c2V0CiMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAojIENPTkZJR19VU0JfU0VWU0VHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9M
Q0QgaXMgbm90IHNldAojIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAojIENP
TkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9BUFBMRURJ
U1BMQVkgaXMgbm90IHNldAojIENPTkZJR19BUFBMRV9NRklfRkFTVENIQVJHRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAojIENPTkZJR19VU0JfTEQgaXMgbm90
IHNldAojIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
SU9XQVJSSU9SIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfRUhTRVRfVEVTVF9GSVhUVVJFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0lTSUdIVEZX
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1lVUkVYIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0Va
VVNCX0ZYMiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9IVUJfVVNCMjUxWEIgaXMgbm90IHNldApD
T05GSUdfVVNCX0hTSUNfVVNCMzUwMz15CiMgQ09ORklHX1VTQl9IU0lDX1VTQjQ2MDQgaXMgbm90
IHNldAojIENPTkZJR19VU0JfTElOS19MQVlFUl9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X0NIQU9TS0VZIGlzIG5vdCBzZXQKCiMKIyBVU0IgUGh5c2ljYWwgTGF5ZXIgZHJpdmVycwojCkNP
TkZJR19VU0JfUEhZPXkKQ09ORklHX05PUF9VU0JfWENFSVY9eQojIENPTkZJR19VU0JfR1BJT19W
QlVTIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0lTUDEzMDEgaXMgbm90IHNldAojIENPTkZJR19V
U0JfTVhTX1BIWSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfVEVHUkFfUEhZPXkKQ09ORklHX1VTQl9V
TFBJPXkKQ09ORklHX1VTQl9VTFBJX1ZJRVdQT1JUPXkKIyBlbmQgb2YgVVNCIFBoeXNpY2FsIExh
eWVyIGRyaXZlcnMKCkNPTkZJR19VU0JfR0FER0VUPXkKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJV
RyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAoj
IENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9HQURHRVRf
VkJVU19EUkFXPTIKQ09ORklHX1VTQl9HQURHRVRfU1RPUkFHRV9OVU1fQlVGRkVSUz0yCiMgQ09O
RklHX1VfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAoKIwojIFVTQiBQZXJpcGhlcmFsIENvbnRy
b2xsZXIKIwojIENPTkZJR19VU0JfRlNMX1VTQjIgaXMgbm90IHNldAojIENPTkZJR19VU0JfRk9U
RzIxMF9VREMgaXMgbm90IHNldAojIENPTkZJR19VU0JfR1JfVURDIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX1I4QTY2NTk3IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9SRU5FU0FTX1VTQkhTX1VEQz15
CkNPTkZJR19VU0JfUkVORVNBU19VU0IzPW0KIyBDT05GSUdfVVNCX1BYQTI3WCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9NVl9VREMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTVZfVTNEIGlzIG5v
dCBzZXQKQ09ORklHX1VTQl9TTlBfQ09SRT15CkNPTkZJR19VU0JfU05QX1VEQ19QTEFUPXkKIyBD
T05GSUdfVVNCX002NjU5MiBpcyBub3Qgc2V0CkNPTkZJR19VU0JfQkRDX1VEQz15CgojCiMgUGxh
dGZvcm0gU3VwcG9ydAojCkNPTkZJR19VU0JfQkRDX1BDST15CiMgQ09ORklHX1VTQl9BTUQ1NTM2
VURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX05FVDIyNzIgaXMgbm90IHNldAojIENPTkZJR19V
U0JfTkVUMjI4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HT0tVIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0VHMjBUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9YSUxJTlggaXMgbm90
IHNldAojIENPTkZJR19VU0JfTUFYMzQyMF9VREMgaXMgbm90IHNldAojIENPTkZJR19VU0JfVEVH
UkFfWFVEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9EVU1NWV9IQ0QgaXMgbm90IHNldAojIGVu
ZCBvZiBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyCgpDT05GSUdfVVNCX0xJQkNPTVBPU0lURT1t
CkNPTkZJR19VU0JfRl9BQ009bQpDT05GSUdfVVNCX1VfU0VSSUFMPW0KQ09ORklHX1VTQl9VX0VU
SEVSPW0KQ09ORklHX1VTQl9GX1NFUklBTD1tCkNPTkZJR19VU0JfRl9PQkVYPW0KQ09ORklHX1VT
Ql9GX05DTT1tCkNPTkZJR19VU0JfRl9FQ009bQpDT05GSUdfVVNCX0ZfRUVNPW0KQ09ORklHX1VT
Ql9GX1NVQlNFVD1tCkNPTkZJR19VU0JfRl9STkRJUz1tCkNPTkZJR19VU0JfRl9NQVNTX1NUT1JB
R0U9bQpDT05GSUdfVVNCX0ZfRlM9bQpDT05GSUdfVVNCX0NPTkZJR0ZTPW0KQ09ORklHX1VTQl9D
T05GSUdGU19TRVJJQUw9eQpDT05GSUdfVVNCX0NPTkZJR0ZTX0FDTT15CkNPTkZJR19VU0JfQ09O
RklHRlNfT0JFWD15CkNPTkZJR19VU0JfQ09ORklHRlNfTkNNPXkKQ09ORklHX1VTQl9DT05GSUdG
U19FQ009eQpDT05GSUdfVVNCX0NPTkZJR0ZTX0VDTV9TVUJTRVQ9eQpDT05GSUdfVVNCX0NPTkZJ
R0ZTX1JORElTPXkKQ09ORklHX1VTQl9DT05GSUdGU19FRU09eQpDT05GSUdfVVNCX0NPTkZJR0ZT
X01BU1NfU1RPUkFHRT15CiMgQ09ORklHX1VTQl9DT05GSUdGU19GX0xCX1NTIGlzIG5vdCBzZXQK
Q09ORklHX1VTQl9DT05GSUdGU19GX0ZTPXkKIyBDT05GSUdfVVNCX0NPTkZJR0ZTX0ZfVUFDMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9DT05GSUdGU19GX1VBQzFfTEVHQUNZIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX0NPTkZJR0ZTX0ZfVUFDMiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9DT05G
SUdGU19GX01JREkgaXMgbm90IHNldAojIENPTkZJR19VU0JfQ09ORklHRlNfRl9ISUQgaXMgbm90
IHNldAojIENPTkZJR19VU0JfQ09ORklHRlNfRl9VVkMgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
Q09ORklHRlNfRl9QUklOVEVSIGlzIG5vdCBzZXQKCiMKIyBVU0IgR2FkZ2V0IHByZWNvbXBvc2Vk
IGNvbmZpZ3VyYXRpb25zCiMKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENPTkZJR19V
U0JfQVVESU8gaXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdf
VVNCX0dfTkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIyBD
T05GSUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19TVE9SQUdF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNC
X01JRElfR0FER0VUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfQUNN
X01TIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAojIENPTkZJR19V
U0JfR19ISUQgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19EQkdQIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dfV0VCQ0FNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1JBV19HQURHRVQgaXMgbm90
IHNldAojIGVuZCBvZiBVU0IgR2FkZ2V0IHByZWNvbXBvc2VkIGNvbmZpZ3VyYXRpb25zCgpDT05G
SUdfVFlQRUM9bQpDT05GSUdfVFlQRUNfVENQTT1tCiMgQ09ORklHX1RZUEVDX1RDUENJIGlzIG5v
dCBzZXQKQ09ORklHX1RZUEVDX0ZVU0IzMDI9bQojIENPTkZJR19UWVBFQ19VQ1NJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVFlQRUNfSEQzU1MzMjIwIGlzIG5vdCBzZXQKIyBDT05GSUdfVFlQRUNfVFBT
NjU5OFggaXMgbm90IHNldAojIENPTkZJR19UWVBFQ19TVFVTQjE2MFggaXMgbm90IHNldAojIENP
TkZJR19UWVBFQ19RQ09NX1BNSUMgaXMgbm90IHNldAoKIwojIFVTQiBUeXBlLUMgTXVsdGlwbGV4
ZXIvRGVNdWx0aXBsZXhlciBTd2l0Y2ggc3VwcG9ydAojCiMgQ09ORklHX1RZUEVDX01VWF9QSTNV
U0IzMDUzMiBpcyBub3Qgc2V0CiMgZW5kIG9mIFVTQiBUeXBlLUMgTXVsdGlwbGV4ZXIvRGVNdWx0
aXBsZXhlciBTd2l0Y2ggc3VwcG9ydAoKIwojIFVTQiBUeXBlLUMgQWx0ZXJuYXRlIE1vZGUgZHJp
dmVycwojCiMgQ09ORklHX1RZUEVDX0RQX0FMVE1PREUgaXMgbm90IHNldAojIGVuZCBvZiBVU0Ig
VHlwZS1DIEFsdGVybmF0ZSBNb2RlIGRyaXZlcnMKCkNPTkZJR19VU0JfUk9MRV9TV0lUQ0g9eQpD
T05GSUdfTU1DPXkKQ09ORklHX1BXUlNFUV9FTU1DPXkKIyBDT05GSUdfUFdSU0VRX1NEODc4NyBp
cyBub3Qgc2V0CkNPTkZJR19QV1JTRVFfU0lNUExFPXkKQ09ORklHX01NQ19CTE9DSz15CkNPTkZJ
R19NTUNfQkxPQ0tfTUlOT1JTPTMyCiMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CiMgQ09O
RklHX01NQ19URVNUIGlzIG5vdCBzZXQKCiMKIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIg
RHJpdmVycwojCiMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19NTUNfQVJNTU1D
ST15CkNPTkZJR19NTUNfUUNPTV9ETUw9eQpDT05GSUdfTU1DX1NUTTMyX1NETU1DPXkKQ09ORklH
X01NQ19TREhDST15CkNPTkZJR19NTUNfU0RIQ0lfSU9fQUNDRVNTT1JTPXkKIyBDT05GSUdfTU1D
X1NESENJX1BDSSBpcyBub3Qgc2V0CkNPTkZJR19NTUNfU0RIQ0lfQUNQST15CkNPTkZJR19NTUNf
U0RIQ0lfUExURk09eQpDT05GSUdfTU1DX1NESENJX09GX0FSQVNBTj15CiMgQ09ORklHX01NQ19T
REhDSV9PRl9BU1BFRUQgaXMgbm90IHNldAojIENPTkZJR19NTUNfU0RIQ0lfT0ZfQVQ5MSBpcyBu
b3Qgc2V0CkNPTkZJR19NTUNfU0RIQ0lfT0ZfRVNESEM9eQojIENPTkZJR19NTUNfU0RIQ0lfT0Zf
RFdDTVNIQyBpcyBub3Qgc2V0CkNPTkZJR19NTUNfU0RIQ0lfQ0FERU5DRT15CkNPTkZJR19NTUNf
U0RIQ0lfRVNESENfSU1YPXkKQ09ORklHX01NQ19TREhDSV9URUdSQT15CiMgQ09ORklHX01NQ19T
REhDSV9TM0MgaXMgbm90IHNldAojIENPTkZJR19NTUNfU0RIQ0lfUFhBVjMgaXMgbm90IHNldApD
T05GSUdfTU1DX1NESENJX0ZfU0RIMzA9eQojIENPTkZJR19NTUNfU0RIQ0lfTUlMQkVBVVQgaXMg
bm90IHNldApDT05GSUdfTU1DX1NESENJX0lQUk9DPXkKQ09ORklHX01NQ19NRVNPTl9HWD15CiMg
Q09ORklHX01NQ19NRVNPTl9NWF9TRElPIGlzIG5vdCBzZXQKQ09ORklHX01NQ19TREhDSV9NU009
eQojIENPTkZJR19NTUNfTVhDIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90
IHNldApDT05GSUdfTU1DX1NQST15CiMgQ09ORklHX01NQ19TREhDSV9TUFJEIGlzIG5vdCBzZXQK
Q09ORklHX01NQ19UTUlPX0NPUkU9eQpDT05GSUdfTU1DX1NESEk9eQojIENPTkZJR19NTUNfU0RI
SV9TWVNfRE1BQyBpcyBub3Qgc2V0CkNPTkZJR19NTUNfU0RISV9JTlRFUk5BTF9ETUFDPXkKQ09O
RklHX01NQ19VTklQSElFUj15CiMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CiMgQ09ORklH
X01NQ19WSUFfU0RNTUMgaXMgbm90IHNldApDT05GSUdfTU1DX0RXPXkKQ09ORklHX01NQ19EV19Q
TFRGTT15CiMgQ09ORklHX01NQ19EV19CTFVFRklFTEQgaXMgbm90IHNldApDT05GSUdfTU1DX0RX
X0VYWU5PUz15CkNPTkZJR19NTUNfRFdfSEkzNzk4Q1YyMDA9eQpDT05GSUdfTU1DX0RXX0szPXkK
IyBDT05GSUdfTU1DX0RXX1BDSSBpcyBub3Qgc2V0CkNPTkZJR19NTUNfRFdfUk9DS0NISVA9eQoj
IENPTkZJR19NTUNfRFdfWlggaXMgbm90IHNldAojIENPTkZJR19NTUNfU0hfTU1DSUYgaXMgbm90
IHNldAojIENPTkZJR19NTUNfVlVCMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DX1VTSEMgaXMg
bm90IHNldAojIENPTkZJR19NTUNfVVNESEk2Uk9MMCBpcyBub3Qgc2V0CkNPTkZJR19NTUNfU1VO
WEk9eQpDT05GSUdfTU1DX0NRSENJPXkKIyBDT05GSUdfTU1DX0hTUSBpcyBub3Qgc2V0CiMgQ09O
RklHX01NQ19UT1NISUJBX1BDSSBpcyBub3Qgc2V0CkNPTkZJR19NTUNfQkNNMjgzNT15CiMgQ09O
RklHX01NQ19NVEsgaXMgbm90IHNldApDT05GSUdfTU1DX1NESENJX0JSQ01TVEI9eQpDT05GSUdf
TU1DX1NESENJX1hFTk9OPXkKIyBDT05GSUdfTU1DX1NESENJX09NQVAgaXMgbm90IHNldApDT05G
SUdfTU1DX1NESENJX0FNNjU0PXkKIyBDT05GSUdfTU1DX09XTCBpcyBub3Qgc2V0CiMgQ09ORklH
X01FTVNUSUNLIGlzIG5vdCBzZXQKQ09ORklHX05FV19MRURTPXkKQ09ORklHX0xFRFNfQ0xBU1M9
eQojIENPTkZJR19MRURTX0NMQVNTX0ZMQVNIIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19DTEFT
U19NVUxUSUNPTE9SIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19CUklHSFRORVNTX0hXX0NIQU5H
RUQgaXMgbm90IHNldAoKIwojIExFRCBkcml2ZXJzCiMKIyBDT05GSUdfTEVEU19BTjMwMjU5QSBp
cyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfQVcyMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19C
Q002MzI4IGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19CQ002MzU4IGlzIG5vdCBzZXQKIyBDT05G
SUdfTEVEU19DUjAwMTQxMTQgaXMgbm90IHNldAojIENPTkZJR19MRURTX0VMMTUyMDMwMDAgaXMg
bm90IHNldAojIENPTkZJR19MRURTX0xNMzUzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0z
NTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MTTM2NDIgaXMgbm90IHNldAojIENPTkZJR19M
RURTX0xNMzY5MlggaXMgbm90IHNldAojIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldApD
T05GSUdfTEVEU19HUElPPXkKIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAojIENPTkZJ
R19MRURTX0xQMzk1MiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1MFhYIGlzIG5vdCBzZXQK
IyBDT05GSUdfTEVEU19MUDU1WFhfQ09NTU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MUDg4
NjAgaXMgbm90IHNldAojIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAojIENPTkZJR19M
RURTX1BDQTk2M1ggaXMgbm90IHNldAojIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNl
dApDT05GSUdfTEVEU19QV009eQojIENPTkZJR19MRURTX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiMg
Q09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90
IHNldAojIENPTkZJR19MRURTX1RDQTY1MDcgaXMgbm90IHNldAojIENPTkZJR19MRURTX1RMQzU5
MVhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19MTTM1NXggaXMgbm90IHNldAojIENPTkZJR19M
RURTX0lTMzFGTDMxOVggaXMgbm90IHNldAojIENPTkZJR19MRURTX0lTMzFGTDMyWFggaXMgbm90
IHNldAoKIwojIExFRCBkcml2ZXIgZm9yIGJsaW5rKDEpIFVTQiBSR0IgTEVEIGlzIHVuZGVyIFNw
ZWNpYWwgSElEIGRyaXZlcnMgKEhJRF9USElOR00pCiMKIyBDT05GSUdfTEVEU19CTElOS00gaXMg
bm90IHNldApDT05GSUdfTEVEU19TWVNDT049eQojIENPTkZJR19MRURTX01MWFJFRyBpcyBub3Qg
c2V0CiMgQ09ORklHX0xFRFNfVVNFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfU1BJX0JZVEUg
aXMgbm90IHNldAojIENPTkZJR19MRURTX1RJX0xNVV9DT01NT04gaXMgbm90IHNldAoKIwojIExF
RCBUcmlnZ2VycwojCkNPTkZJR19MRURTX1RSSUdHRVJTPXkKQ09ORklHX0xFRFNfVFJJR0dFUl9U
SU1FUj15CiMgQ09ORklHX0xFRFNfVFJJR0dFUl9PTkVTSE9UIGlzIG5vdCBzZXQKQ09ORklHX0xF
RFNfVFJJR0dFUl9ESVNLPXkKIyBDT05GSUdfTEVEU19UUklHR0VSX01URCBpcyBub3Qgc2V0CkNP
TkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tM
SUdIVCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX1RSSUdHRVJfQ1BVPXkKIyBDT05GSUdfTEVEU19U
UklHR0VSX0FDVElWSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMg
bm90IHNldApDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQoKIwojIGlwdGFibGVzIHRy
aWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKIwojIENPTkZJR19M
RURTX1RSSUdHRVJfVFJBTlNJRU5UIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX0NB
TUVSQSBpcyBub3Qgc2V0CkNPTkZJR19MRURTX1RSSUdHRVJfUEFOSUM9eQojIENPTkZJR19MRURT
X1RSSUdHRVJfTkVUREVWIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19UUklHR0VSX1BBVFRFUk4g
aXMgbm90IHNldAojIENPTkZJR19MRURTX1RSSUdHRVJfQVVESU8gaXMgbm90IHNldAojIENPTkZJ
R19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0
CkNPTkZJR19FREFDX1NVUFBPUlQ9eQpDT05GSUdfRURBQz15CkNPTkZJR19FREFDX0xFR0FDWV9T
WVNGUz15CiMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRURBQ19HSEVTPXkK
IyBDT05GSUdfRURBQ19BTF9NQyBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfTEFZRVJTQ0FQRSBp
cyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfVEhVTkRFUlggaXMgbm90IHNldAojIENPTkZJR19FREFD
X0FMVEVSQSBpcyBub3Qgc2V0CiMgQ09ORklHX0VEQUNfU1lOT1BTWVMgaXMgbm90IHNldAojIENP
TkZJR19FREFDX1hHRU5FIGlzIG5vdCBzZXQKIyBDT05GSUdfRURBQ19ETUM1MjAgaXMgbm90IHNl
dApDT05GSUdfUlRDX0xJQj15CkNPTkZJR19SVENfQ0xBU1M9eQpDT05GSUdfUlRDX0hDVE9TWVM9
eQpDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgpDT05GSUdfUlRDX1NZU1RPSEM9eQpD
T05GSUdfUlRDX1NZU1RPSENfREVWSUNFPSJydGMwIgojIENPTkZJR19SVENfREVCVUcgaXMgbm90
IHNldApDT05GSUdfUlRDX05WTUVNPXkKCiMKIyBSVEMgaW50ZXJmYWNlcwojCkNPTkZJR19SVENf
SU5URl9TWVNGUz15CkNPTkZJR19SVENfSU5URl9QUk9DPXkKQ09ORklHX1JUQ19JTlRGX0RFVj15
CiMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19E
UlZfVEVTVCBpcyBub3Qgc2V0CgojCiMgSTJDIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdfUlRDX0RS
Vl9BQkI1WkVTMyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfQUJFT1o5IGlzIG5vdCBzZXQK
IyBDT05GSUdfUlRDX0RSVl9BQlg4MFggaXMgbm90IHNldApDT05GSUdfUlRDX0RSVl9CUkNNU1RC
PXkKQ09ORklHX1JUQ19EUlZfRFMxMzA3PW0KIyBDT05GSUdfUlRDX0RSVl9EUzEzMDdfQ0VOVFVS
WSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0hZTTg1NjMgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldApDT05GSUdfUlRDX0RSVl9N
QVg3NzY4Nj15CkNPTkZJR19SVENfRFJWX1JLODA4PW0KIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcy
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwMjYgaXMg
bm90IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0Y4NTIzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTA2MyBpcyBub3Qgc2V0
CkNPTkZJR19SVENfRFJWX1BDRjg1MzYzPW0KIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9NNDFUODAgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKIyBD
T05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAg
aXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAxMCBpcyBub3Qgc2V0CkNPTkZJR19SVENf
RFJWX1JYODU4MT1tCiMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9FTTMwMjcgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JWMzAyOCBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlYzMDMyIGlzIG5vdCBzZXQKQ09ORklHX1JUQ19EUlZfUlY4
ODAzPW0KQ09ORklHX1JUQ19EUlZfUzVNPXkKIyBDT05GSUdfUlRDX0RSVl9TRDMwNzggaXMgbm90
IHNldAoKIwojIFNQSSBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JUQ19EUlZfTTQxVDkzIGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJW
X0RTMTMwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBD
T05GSUdfUlRDX0RSVl9EUzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBp
cyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9NQVg2OTE2IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfUlg0NTgxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SWDYx
MTAgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAojIENPTkZJ
R19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMg
bm90IHNldAojIENPTkZJR19SVENfRFJWX01DUDc5NSBpcyBub3Qgc2V0CkNPTkZJR19SVENfSTJD
X0FORF9TUEk9eQoKIwojIFNQSSBhbmQgSTJDIFJUQyBkcml2ZXJzCiMKQ09ORklHX1JUQ19EUlZf
RFMzMjMyPXkKQ09ORklHX1JUQ19EUlZfRFMzMjMyX0hXTU9OPXkKQ09ORklHX1JUQ19EUlZfUENG
MjEyNz1tCiMgQ09ORklHX1JUQ19EUlZfUlYzMDI5QzIgaXMgbm90IHNldAoKIwojIFBsYXRmb3Jt
IFJUQyBkcml2ZXJzCiMKIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAojIENPTkZJ
R19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE2ODVfRkFNSUxZIGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMjQwNCBpcyBub3Qg
c2V0CkNPTkZJR19SVENfRFJWX0VGST15CiMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZf
TTQ4VDM1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAojIENP
TkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0JRNDgwMiBp
cyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9WMzAyMCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfWllOUU1QIGlzIG5vdCBzZXQK
Q09ORklHX1JUQ19EUlZfQ1JPU19FQz15CgojCiMgb24tQ1BVIFJUQyBkcml2ZXJzCiMKIyBDT05G
SUdfUlRDX0RSVl9JTVhESSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRlNMX0ZUTV9BTEFS
TSBpcyBub3Qgc2V0CkNPTkZJR19SVENfRFJWX01FU09OX1ZSVEM9bQpDT05GSUdfSEFWRV9TM0Nf
UlRDPXkKQ09ORklHX1JUQ19EUlZfUzNDPXkKIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfUEwwMzAgaXMgbm90IHNldApDT05GSUdfUlRDX0RSVl9QTDAzMT15
CkNPTkZJR19SVENfRFJWX1NVTjZJPXkKIyBDT05GSUdfUlRDX0RSVl9NViBpcyBub3Qgc2V0CkNP
TkZJR19SVENfRFJWX0FSTUFEQTM4WD15CiMgQ09ORklHX1JUQ19EUlZfQ0FERU5DRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRlRSVEMwMTAgaXMgbm90IHNldApDT05GSUdfUlRDX0RSVl9Q
TThYWFg9bQpDT05GSUdfUlRDX0RSVl9URUdSQT15CiMgQ09ORklHX1JUQ19EUlZfTVhDIGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NWENfVjIgaXMgbm90IHNldApDT05GSUdfUlRDX0RSVl9T
TlZTPW0KQ09ORklHX1JUQ19EUlZfSU1YX1NDPW0KIyBDT05GSUdfUlRDX0RSVl9NVDI3MTIgaXMg
bm90IHNldAojIENPTkZJR19SVENfRFJWX01UNzYyMiBpcyBub3Qgc2V0CkNPTkZJR19SVENfRFJW
X1hHRU5FPXkKIyBDT05GSUdfUlRDX0RSVl9SNzMwMSBpcyBub3Qgc2V0CgojCiMgSElEIFNlbnNv
ciBSVEMgZHJpdmVycwojCkNPTkZJR19ETUFERVZJQ0VTPXkKIyBDT05GSUdfRE1BREVWSUNFU19E
RUJVRyBpcyBub3Qgc2V0CgojCiMgRE1BIERldmljZXMKIwpDT05GSUdfQVNZTkNfVFhfRU5BQkxF
X0NIQU5ORUxfU1dJVENIPXkKQ09ORklHX0RNQV9FTkdJTkU9eQpDT05GSUdfRE1BX1ZJUlRVQUxf
Q0hBTk5FTFM9eQpDT05GSUdfRE1BX0FDUEk9eQpDT05GSUdfRE1BX09GPXkKIyBDT05GSUdfQUxU
RVJBX01TR0RNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0FNQkFfUEwwOFggaXMgbm90IHNldAojIENP
TkZJR19BWElfRE1BQyBpcyBub3Qgc2V0CkNPTkZJR19CQ01fU0JBX1JBSUQ9bQpDT05GSUdfRE1B
X0JDTTI4MzU9eQpDT05GSUdfRE1BX1NVTjZJPW0KIyBDT05GSUdfRFdfQVhJX0RNQUMgaXMgbm90
IHNldApDT05GSUdfRlNMX0VETUE9eQojIENPTkZJR19GU0xfUURNQSBpcyBub3Qgc2V0CiMgQ09O
RklHX0hJU0lfRE1BIGlzIG5vdCBzZXQKIyBDT05GSUdfSU1YX0RNQSBpcyBub3Qgc2V0CkNPTkZJ
R19JTVhfU0RNQT15CiMgQ09ORklHX0lOVEVMX0lETUE2NCBpcyBub3Qgc2V0CkNPTkZJR19LM19E
TUE9eQpDT05GSUdfTVZfWE9SPXkKQ09ORklHX01WX1hPUl9WMj15CiMgQ09ORklHX01YU19ETUEg
aXMgbm90IHNldApDT05GSUdfTVgzX0lQVT15CkNPTkZJR19NWDNfSVBVX0lSUVM9NApDT05GSUdf
T1dMX0RNQT15CkNPTkZJR19QTDMzMF9ETUE9eQojIENPTkZJR19QTFhfRE1BIGlzIG5vdCBzZXQK
IyBDT05GSUdfU1BSRF9ETUEgaXMgbm90IHNldApDT05GSUdfVEVHUkEyMF9BUEJfRE1BPXkKQ09O
RklHX1RFR1JBMjEwX0FETUE9bQojIENPTkZJR19VTklQSElFUl9NRE1BQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VOSVBISUVSX1hETUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfWEdFTkVfRE1BIGlzIG5v
dCBzZXQKIyBDT05GSUdfWElMSU5YX0RNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1hJTElOWF9aWU5R
TVBfRE1BIGlzIG5vdCBzZXQKIyBDT05GSUdfWElMSU5YX1pZTlFNUF9EUERNQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1pYX0RNQSBpcyBub3Qgc2V0CiMgQ09ORklHX01US19IU0RNQSBpcyBub3Qgc2V0
CiMgQ09ORklHX01US19DUURNQSBpcyBub3Qgc2V0CiMgQ09ORklHX01US19VQVJUX0FQRE1BIGlz
IG5vdCBzZXQKQ09ORklHX1FDT01fQkFNX0RNQT15CkNPTkZJR19RQ09NX0hJRE1BX01HTVQ9eQpD
T05GSUdfUUNPTV9ISURNQT15CiMgQ09ORklHX0RXX0RNQUMgaXMgbm90IHNldAojIENPTkZJR19E
V19ETUFDX1BDSSBpcyBub3Qgc2V0CiMgQ09ORklHX0RXX0VETUEgaXMgbm90IHNldAojIENPTkZJ
R19EV19FRE1BX1BDSUUgaXMgbm90IHNldAojIENPTkZJR19TRl9QRE1BIGlzIG5vdCBzZXQKQ09O
RklHX1JFTkVTQVNfRE1BPXkKQ09ORklHX1JDQVJfRE1BQz15CkNPTkZJR19SRU5FU0FTX1VTQl9E
TUFDPXkKIyBDT05GSUdfVElfSzNfVURNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTTF9EUEFBMl9R
RE1BIGlzIG5vdCBzZXQKCiMKIyBETUEgQ2xpZW50cwojCiMgQ09ORklHX0FTWU5DX1RYX0RNQSBp
cyBub3Qgc2V0CiMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldApDT05GSUdfRE1BX0VOR0lORV9S
QUlEPXkKCiMKIyBETUFCVUYgb3B0aW9ucwojCkNPTkZJR19TWU5DX0ZJTEU9eQojIENPTkZJR19T
V19TWU5DIGlzIG5vdCBzZXQKIyBDT05GSUdfVURNQUJVRiBpcyBub3Qgc2V0CiMgQ09ORklHX0RN
QUJVRl9NT1ZFX05PVElGWSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNQUJVRl9TRUxGVEVTVFMgaXMg
bm90IHNldAojIENPTkZJR19ETUFCVUZfSEVBUFMgaXMgbm90IHNldAojIGVuZCBvZiBETUFCVUYg
b3B0aW9ucwoKIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CkNPTkZJR19VSU89eQojIENP
TkZJR19VSU9fQ0lGIGlzIG5vdCBzZXQKQ09ORklHX1VJT19QRFJWX0dFTklSUT1tCiMgQ09ORklH
X1VJT19ETUVNX0dFTklSUSBpcyBub3Qgc2V0CiMgQ09ORklHX1VJT19BRUMgaXMgbm90IHNldAoj
IENPTkZJR19VSU9fU0VSQ09TMyBpcyBub3Qgc2V0CiMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBp
cyBub3Qgc2V0CiMgQ09ORklHX1VJT19ORVRYIGlzIG5vdCBzZXQKIyBDT05GSUdfVUlPX1BSVVNT
IGlzIG5vdCBzZXQKIyBDT05GSUdfVUlPX01GNjI0IGlzIG5vdCBzZXQKQ09ORklHX1ZGSU9fSU9N
TVVfVFlQRTE9eQpDT05GSUdfVkZJT19WSVJRRkQ9eQpDT05GSUdfVkZJTz15CiMgQ09ORklHX1ZG
SU9fTk9JT01NVSBpcyBub3Qgc2V0CkNPTkZJR19WRklPX1BDST15CkNPTkZJR19WRklPX1BDSV9N
TUFQPXkKQ09ORklHX1ZGSU9fUENJX0lOVFg9eQojIENPTkZJR19WRklPX1BMQVRGT1JNIGlzIG5v
dCBzZXQKIyBDT05GSUdfVkZJT19NREVWIGlzIG5vdCBzZXQKIyBDT05GSUdfVkZJT19GU0xfTUMg
aXMgbm90IHNldAojIENPTkZJR19WSVJUX0RSSVZFUlMgaXMgbm90IHNldApDT05GSUdfVklSVElP
PXkKQ09ORklHX1ZJUlRJT19NRU5VPXkKQ09ORklHX1ZJUlRJT19QQ0k9eQpDT05GSUdfVklSVElP
X1BDSV9MRUdBQ1k9eQpDT05GSUdfVklSVElPX0JBTExPT049eQojIENPTkZJR19WSVJUSU9fSU5Q
VVQgaXMgbm90IHNldApDT05GSUdfVklSVElPX01NSU89eQojIENPTkZJR19WSVJUSU9fTU1JT19D
TURMSU5FX0RFVklDRVMgaXMgbm90IHNldAojIENPTkZJR19WRFBBIGlzIG5vdCBzZXQKQ09ORklH
X1ZIT1NUX01FTlU9eQojIENPTkZJR19WSE9TVF9ORVQgaXMgbm90IHNldAojIENPTkZJR19WSE9T
VF9DUk9TU19FTkRJQU5fTEVHQUNZIGlzIG5vdCBzZXQKCiMKIyBNaWNyb3NvZnQgSHlwZXItViBn
dWVzdCBzdXBwb3J0CiMKIyBlbmQgb2YgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydAoK
IwojIFhlbiBkcml2ZXIgc3VwcG9ydAojCkNPTkZJR19YRU5fQkFMTE9PTj15CkNPTkZJR19YRU5f
U0NSVUJfUEFHRVNfREVGQVVMVD15CkNPTkZJR19YRU5fREVWX0VWVENITj15CkNPTkZJR19YRU5f
QkFDS0VORD15CkNPTkZJR19YRU5GUz15CkNPTkZJR19YRU5fQ09NUEFUX1hFTkZTPXkKQ09ORklH
X1hFTl9TWVNfSFlQRVJWSVNPUj15CkNPTkZJR19YRU5fWEVOQlVTX0ZST05URU5EPXkKQ09ORklH
X1hFTl9HTlRERVY9eQpDT05GSUdfWEVOX0dSQU5UX0RFVl9BTExPQz15CiMgQ09ORklHX1hFTl9H
UkFOVF9ETUFfQUxMT0MgaXMgbm90IHNldApDT05GSUdfU1dJT1RMQl9YRU49eQojIENPTkZJR19Y
RU5fUFZDQUxMU19GUk9OVEVORCBpcyBub3Qgc2V0CiMgQ09ORklHX1hFTl9QVkNBTExTX0JBQ0tF
TkQgaXMgbm90IHNldApDT05GSUdfWEVOX1BSSVZDTUQ9eQpDT05GSUdfWEVOX0VGST15CkNPTkZJ
R19YRU5fQVVUT19YTEFURT15CiMgZW5kIG9mIFhlbiBkcml2ZXIgc3VwcG9ydAoKIyBDT05GSUdf
R1JFWUJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAojIENPTkZJR19H
T0xERklTSCBpcyBub3Qgc2V0CkNPTkZJR19DSFJPTUVfUExBVEZPUk1TPXkKIyBDT05GSUdfQ0hS
T01FT1NfVEJNQyBpcyBub3Qgc2V0CkNPTkZJR19DUk9TX0VDPXkKQ09ORklHX0NST1NfRUNfSTJD
PXkKIyBDT05GSUdfQ1JPU19FQ19SUE1TRyBpcyBub3Qgc2V0CkNPTkZJR19DUk9TX0VDX1NQST15
CkNPTkZJR19DUk9TX0VDX1BST1RPPXkKIyBDT05GSUdfQ1JPU19LQkRfTEVEX0JBQ0tMSUdIVCBp
cyBub3Qgc2V0CkNPTkZJR19DUk9TX0VDX0NIQVJERVY9bQpDT05GSUdfQ1JPU19FQ19MSUdIVEJB
Uj15CkNPTkZJR19DUk9TX0VDX1ZCQz15CkNPTkZJR19DUk9TX0VDX0RFQlVHRlM9eQpDT05GSUdf
Q1JPU19FQ19TRU5TT1JIVUI9eQpDT05GSUdfQ1JPU19FQ19TWVNGUz15CkNPTkZJR19DUk9TX0VD
X1RZUEVDPW0KQ09ORklHX0NST1NfVVNCUERfTk9USUZZPXkKIyBDT05GSUdfTUVMTEFOT1hfUExB
VEZPUk0gaXMgbm90IHNldApDT05GSUdfSEFWRV9DTEs9eQpDT05GSUdfQ0xLREVWX0xPT0tVUD15
CkNPTkZJR19IQVZFX0NMS19QUkVQQVJFPXkKQ09ORklHX0NPTU1PTl9DTEs9eQoKIwojIENsb2Nr
IGRyaXZlciBmb3IgQVJNIFJlZmVyZW5jZSBkZXNpZ25zCiMKIyBDT05GSUdfSUNTVCBpcyBub3Qg
c2V0CiMgQ09ORklHX0NMS19TUDgxMCBpcyBub3Qgc2V0CkNPTkZJR19DTEtfVkVYUFJFU1NfT1ND
PXkKIyBlbmQgb2YgQ2xvY2sgZHJpdmVyIGZvciBBUk0gUmVmZXJlbmNlIGRlc2lnbnMKCiMgQ09O
RklHX0NPTU1PTl9DTEtfTUFYNzc2ODYgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01B
WDk0ODUgaXMgbm90IHNldApDT05GSUdfQ09NTU9OX0NMS19SSzgwOD15CkNPTkZJR19DT01NT05f
Q0xLX0hJNjU1WD15CkNPTkZJR19DT01NT05fQ0xLX1NDUEk9eQojIENPTkZJR19DT01NT05fQ0xL
X1NJNTM0MSBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfU0k1MzUxIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ09NTU9OX0NMS19TSTUxNCBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtf
U0k1NDQgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX1NJNTcwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ09NTU9OX0NMS19DRENFNzA2IGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19D
RENFOTI1IGlzIG5vdCBzZXQKQ09ORklHX0NPTU1PTl9DTEtfQ1MyMDAwX0NQPXkKIyBDT05GSUdf
Q09NTU9OX0NMS19GU0xfU0FJIGlzIG5vdCBzZXQKQ09ORklHX0NPTU1PTl9DTEtfUzJNUFMxMT15
CkNPTkZJR19DTEtfUU9SSVE9eQpDT05GSUdfQ0xLX0xTMTAyOEFfUExMRElHPXkKQ09ORklHX0NP
TU1PTl9DTEtfWEdFTkU9eQpDT05GSUdfQ09NTU9OX0NMS19QV009eQpDT05GSUdfQ09NTU9OX0NM
S19WQzU9eQpDT05GSUdfQ09NTU9OX0NMS19CRDcxOFhYPW0KIyBDT05GSUdfQ09NTU9OX0NMS19G
SVhFRF9NTUlPIGlzIG5vdCBzZXQKQ09ORklHX0NMS19BQ1RJT05TPXkKQ09ORklHX0NMS19PV0xf
UzUwMD15CkNPTkZJR19DTEtfT1dMX1M3MDA9eQpDT05GSUdfQ0xLX09XTF9TOTAwPXkKQ09ORklH
X0NMS19CQ00yNzExX0RWUD15CkNPTkZJR19DTEtfQkNNMjgzNT15CkNPTkZJR19DT01NT05fQ0xL
X0lQUk9DPXkKQ09ORklHX0NMS19CQ01fTlMyPXkKQ09ORklHX0NMS19CQ01fU1I9eQpDT05GSUdf
Q0xLX1JBU1BCRVJSWVBJPW0KQ09ORklHX0NPTU1PTl9DTEtfSEkzNTE2Q1YzMDA9eQpDT05GSUdf
Q09NTU9OX0NMS19ISTM1MTk9eQpDT05GSUdfQ09NTU9OX0NMS19ISTM2NjA9eQpDT05GSUdfQ09N
TU9OX0NMS19ISTM2NzA9eQpDT05GSUdfQ09NTU9OX0NMS19ISTM3OThDVjIwMD15CkNPTkZJR19D
T01NT05fQ0xLX0hJNjIyMD15CkNPTkZJR19SRVNFVF9ISVNJPXkKQ09ORklHX1NUVUJfQ0xLX0hJ
NjIyMD15CkNPTkZJR19TVFVCX0NMS19ISTM2NjA9eQpDT05GSUdfTVhDX0NMSz15CkNPTkZJR19N
WENfQ0xLX1NDVT15CkNPTkZJR19DTEtfSU1YOE1NPXkKQ09ORklHX0NMS19JTVg4TU49eQojIENP
TkZJR19DTEtfSU1YOE1QIGlzIG5vdCBzZXQKQ09ORklHX0NMS19JTVg4TVE9eQpDT05GSUdfQ0xL
X0lNWDhRWFA9eQpDT05GSUdfVElfU0NJX0NMSz15CiMgQ09ORklHX1RJX1NDSV9DTEtfUFJPQkVf
RlJPTV9GVyBpcyBub3Qgc2V0CkNPTkZJR19USV9TWVNDT05fQ0xLPXkKCiMKIyBDbG9jayBkcml2
ZXIgZm9yIE1lZGlhVGVrIFNvQwojCkNPTkZJR19DT01NT05fQ0xLX01FRElBVEVLPXkKQ09ORklH
X0NPTU1PTl9DTEtfTVQyNzEyPXkKIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3MTJfQkRQU1lTIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3MTJfSU1HU1lTIGlzIG5vdCBzZXQKIyBD
T05GSUdfQ09NTU9OX0NMS19NVDI3MTJfSlBHREVDU1lTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09N
TU9OX0NMS19NVDI3MTJfTUZHQ0ZHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3
MTJfTU1TWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UMjcxMl9WREVDU1lTIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3MTJfVkVOQ1NZUyBpcyBub3Qgc2V0CkNP
TkZJR19DT01NT05fQ0xLX01UNjc2NT15CiMgQ09ORklHX0NPTU1PTl9DTEtfTVQ2NzY1X0FVRElP
U1lTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3NjVfQ0FNU1lTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3NjVfR0NFU1lTIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q09NTU9OX0NMS19NVDY3NjVfTU1TWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01U
Njc2NV9JTUdTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc2NV9WQ09ERUNT
WVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc2NV9NRkdTWVMgaXMgbm90IHNl
dAojIENPTkZJR19DT01NT05fQ0xLX01UNjc2NV9NSVBJMEFTWVMgaXMgbm90IHNldAojIENPTkZJ
R19DT01NT05fQ0xLX01UNjc2NV9NSVBJMEJTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05f
Q0xLX01UNjc2NV9NSVBJMUFTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc2
NV9NSVBJMUJTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc2NV9NSVBJMkFT
WVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc2NV9NSVBJMkJTWVMgaXMgbm90
IHNldApDT05GSUdfQ09NTU9OX0NMS19NVDY3Nzk9eQojIENPTkZJR19DT01NT05fQ0xLX01UNjc3
OV9NTVNZUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfTVQ2Nzc5X0lNR1NZUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfTVQ2Nzc5X0lQRVNZUyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NPTU1PTl9DTEtfTVQ2Nzc5X0NBTVNZUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9D
TEtfTVQ2Nzc5X1ZERUNTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc3OV9W
RU5DU1lTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3NzlfTUZHQ0ZHIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3NzlfQVVEU1lTIGlzIG5vdCBzZXQKQ09ORklH
X0NPTU1PTl9DTEtfTVQ2Nzk3PXkKIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3OTdfTU1TWVMgaXMg
bm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UNjc5N19JTUdTWVMgaXMgbm90IHNldAojIENP
TkZJR19DT01NT05fQ0xLX01UNjc5N19WREVDU1lTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9O
X0NMS19NVDY3OTdfVkVOQ1NZUyBpcyBub3Qgc2V0CkNPTkZJR19DT01NT05fQ0xLX01UNzYyMj15
CiMgQ09ORklHX0NPTU1PTl9DTEtfTVQ3NjIyX0VUSFNZUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NP
TU1PTl9DTEtfTVQ3NjIyX0hJRlNZUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtfTVQ3
NjIyX0FVRFNZUyBpcyBub3Qgc2V0CkNPTkZJR19DT01NT05fQ0xLX01UODE2Nz15CkNPTkZJR19D
T01NT05fQ0xLX01UODE2N19BVURTWVM9eQpDT05GSUdfQ09NTU9OX0NMS19NVDgxNjdfSU1HU1lT
PXkKQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTY3X01GR0NGRz15CkNPTkZJR19DT01NT05fQ0xLX01U
ODE2N19NTVNZUz15CkNPTkZJR19DT01NT05fQ0xLX01UODE2N19WREVDU1lTPXkKQ09ORklHX0NP
TU1PTl9DTEtfTVQ4MTczPXkKQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTczX01NU1lTPXkKQ09ORklH
X0NPTU1PTl9DTEtfTVQ4MTgzPXkKIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxODNfQVVESU9TWVMg
aXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UODE4M19DQU1TWVMgaXMgbm90IHNldAoj
IENPTkZJR19DT01NT05fQ0xLX01UODE4M19JTUdTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01N
T05fQ0xLX01UODE4M19JUFVfQ09SRTAgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01U
ODE4M19JUFVfQ09SRTEgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UODE4M19JUFVf
QURMIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxODNfSVBVX0NPTk4gaXMgbm90
IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UODE4M19NRkdDRkcgaXMgbm90IHNldAojIENPTkZJ
R19DT01NT05fQ0xLX01UODE4M19NTVNZUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPTU1PTl9DTEtf
TVQ4MTgzX1ZERUNTWVMgaXMgbm90IHNldAojIENPTkZJR19DT01NT05fQ0xLX01UODE4M19WRU5D
U1lTIGlzIG5vdCBzZXQKQ09ORklHX0NPTU1PTl9DTEtfTVQ4NTE2PXkKIyBDT05GSUdfQ09NTU9O
X0NMS19NVDg1MTZfQVVEU1lTIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ2xvY2sgZHJpdmVyIGZvciBN
ZWRpYVRlayBTb0MKCiMKIyBDbG9jayBzdXBwb3J0IGZvciBBbWxvZ2ljIHBsYXRmb3JtcwojCkNP
TkZJR19DT01NT05fQ0xLX01FU09OX1JFR01BUD15CkNPTkZJR19DT01NT05fQ0xLX01FU09OX0RV
QUxESVY9eQpDT05GSUdfQ09NTU9OX0NMS19NRVNPTl9NUExMPXkKQ09ORklHX0NPTU1PTl9DTEtf
TUVTT05fUEhBU0U9bQpDT05GSUdfQ09NTU9OX0NMS19NRVNPTl9QTEw9eQpDT05GSUdfQ09NTU9O
X0NMS19NRVNPTl9TQ0xLX0RJVj1tCkNPTkZJR19DT01NT05fQ0xLX01FU09OX1ZJRF9QTExfRElW
PXkKQ09ORklHX0NPTU1PTl9DTEtfTUVTT05fQU9fQ0xLQz15CkNPTkZJR19DT01NT05fQ0xLX01F
U09OX0VFX0NMS0M9eQpDT05GSUdfQ09NTU9OX0NMS19NRVNPTl9DUFVfRFlORElWPXkKQ09ORklH
X0NPTU1PTl9DTEtfR1hCQj15CkNPTkZJR19DT01NT05fQ0xLX0FYRz15CkNPTkZJR19DT01NT05f
Q0xLX0FYR19BVURJTz1tCkNPTkZJR19DT01NT05fQ0xLX0cxMkE9eQojIGVuZCBvZiBDbG9jayBz
dXBwb3J0IGZvciBBbWxvZ2ljIHBsYXRmb3JtcwoKQ09ORklHX0FSTUFEQV9BUF9DUF9IRUxQRVI9
eQpDT05GSUdfQVJNQURBXzM3WFhfQ0xLPXkKQ09ORklHX0FSTUFEQV9BUDgwNl9TWVNDT049eQpD
T05GSUdfQVJNQURBX0NQMTEwX1NZU0NPTj15CkNPTkZJR19RQ09NX0dEU0M9eQpDT05GSUdfUUNP
TV9SUE1DQz15CkNPTkZJR19DT01NT05fQ0xLX1FDT009eQpDT05GSUdfUUNPTV9BNTNQTEw9eQpD
T05GSUdfUUNPTV9DTEtfQVBDU19NU004OTE2PXkKIyBDT05GSUdfUUNPTV9DTEtfQVBDQ19NU004
OTk2IGlzIG5vdCBzZXQKQ09ORklHX1FDT01fQ0xLX1NNRF9SUE09eQpDT05GSUdfUUNPTV9DTEtf
UlBNSD15CiMgQ09ORklHX0FQUV9HQ0NfODA4NCBpcyBub3Qgc2V0CiMgQ09ORklHX0FQUV9NTUND
XzgwODQgaXMgbm90IHNldAojIENPTkZJR19JUFFfQVBTU19QTEwgaXMgbm90IHNldAojIENPTkZJ
R19JUFFfQVBTU182MDE4IGlzIG5vdCBzZXQKIyBDT05GSUdfSVBRX0dDQ180MDE5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfSVBRX0dDQ182MDE4IGlzIG5vdCBzZXQKIyBDT05GSUdfSVBRX0dDQ184MDZY
IGlzIG5vdCBzZXQKIyBDT05GSUdfSVBRX0xDQ184MDZYIGlzIG5vdCBzZXQKQ09ORklHX0lQUV9H
Q0NfODA3ND15CiMgQ09ORklHX01TTV9HQ0NfODY2MCBpcyBub3Qgc2V0CkNPTkZJR19NU01fR0ND
Xzg5MTY9eQojIENPTkZJR19NU01fR0NDXzg5MzkgaXMgbm90IHNldAojIENPTkZJR19NU01fR0ND
Xzg5NjAgaXMgbm90IHNldAojIENPTkZJR19NU01fTENDXzg5NjAgaXMgbm90IHNldAojIENPTkZJ
R19NRE1fR0NDXzk2MTUgaXMgbm90IHNldAojIENPTkZJR19NRE1fTENDXzk2MTUgaXMgbm90IHNl
dAojIENPTkZJR19NU01fTU1DQ184OTYwIGlzIG5vdCBzZXQKIyBDT05GSUdfTVNNX0dDQ184OTc0
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVNNX01NQ0NfODk3NCBpcyBub3Qgc2V0CkNPTkZJR19NU01f
R0NDXzg5OTQ9eQpDT05GSUdfTVNNX0dDQ184OTk2PXkKQ09ORklHX01TTV9NTUNDXzg5OTY9eQpD
T05GSUdfTVNNX0dDQ184OTk4PXkKIyBDT05GSUdfTVNNX0dQVUNDXzg5OTggaXMgbm90IHNldAoj
IENPTkZJR19NU01fTU1DQ184OTk4IGlzIG5vdCBzZXQKQ09ORklHX1FDU19HQ0NfNDA0PXkKIyBD
T05GSUdfU0NfRElTUENDXzcxODAgaXMgbm90IHNldAojIENPTkZJR19TQ19HQ0NfNzE4MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NDX0xQQVNTX0NPUkVDQ183MTgwIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0NfR1BVQ0NfNzE4MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDX01TU183MTgwIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0NfVklERU9DQ183MTgwIGlzIG5vdCBzZXQKQ09ORklHX1NETV9DQU1DQ184NDU9
bQojIENPTkZJR19TRE1fR0NDXzY2MCBpcyBub3Qgc2V0CiMgQ09ORklHX1FDU19UVVJJTkdfNDA0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUUNTX1E2U1NUT1BfNDA0IGlzIG5vdCBzZXQKQ09ORklHX1NE
TV9HQ0NfODQ1PXkKQ09ORklHX1NETV9HUFVDQ184NDU9eQpDT05GSUdfU0RNX1ZJREVPQ0NfODQ1
PXkKQ09ORklHX1NETV9ESVNQQ0NfODQ1PXkKIyBDT05GSUdfU0RNX0xQQVNTQ0NfODQ1IGlzIG5v
dCBzZXQKIyBDT05GSUdfU01fRElTUENDXzgyNTAgaXMgbm90IHNldApDT05GSUdfU01fR0NDXzgx
NTA9eQojIENPTkZJR19TTV9HQ0NfODI1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NNX0dQVUNDXzgx
NTAgaXMgbm90IHNldAojIENPTkZJR19TTV9HUFVDQ184MjUwIGlzIG5vdCBzZXQKIyBDT05GSUdf
U01fVklERU9DQ184MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfU01fVklERU9DQ184MjUwIGlzIG5v
dCBzZXQKIyBDT05GSUdfU1BNSV9QTUlDX0NMS0RJViBpcyBub3Qgc2V0CkNPTkZJR19RQ09NX0hG
UExMPXkKIyBDT05GSUdfS1BTU19YQ0MgaXMgbm90IHNldApDT05GSUdfQ0xLX1JFTkVTQVM9eQpD
T05GSUdfQ0xLX1I4QTc3NEExPXkKQ09ORklHX0NMS19SOEE3NzRDMD15CkNPTkZJR19DTEtfUjhB
Nzc5NjU9eQpDT05GSUdfQ0xLX1I4QTc3OTcwPXkKQ09ORklHX0NMS19SOEE3Nzk4MD15CkNPTkZJ
R19DTEtfUjhBNzc5OTA9eQpDT05GSUdfQ0xLX1I4QTc3OTk1PXkKIyBDT05GSUdfQ0xLX1I5QTA2
RzAzMiBpcyBub3Qgc2V0CkNPTkZJR19DTEtfUkNBUl9HRU4zX0NQRz15CiMgQ09ORklHX0NMS19S
Q0FSX1VTQjJfQ0xPQ0tfU0VMIGlzIG5vdCBzZXQKQ09ORklHX0NMS19SRU5FU0FTX0NQR19NU1NS
PXkKQ09ORklHX0NMS19SRU5FU0FTX0RJVjY9eQpDT05GSUdfQ09NTU9OX0NMS19ST0NLQ0hJUD15
CkNPTkZJR19DTEtfUFgzMD15CkNPTkZJR19DTEtfUlYxMTBYPXkKQ09ORklHX0NMS19SSzMwMzY9
eQpDT05GSUdfQ0xLX1JLMzEyWD15CkNPTkZJR19DTEtfUkszMTg4PXkKQ09ORklHX0NMS19SSzMy
Mlg9eQpDT05GSUdfQ0xLX1JLMzMwOD15CkNPTkZJR19DTEtfUkszMzI4PXkKQ09ORklHX0NMS19S
SzMzNjg9eQpDT05GSUdfQ0xLX1JLMzM5OT15CkNPTkZJR19DT01NT05fQ0xLX1NBTVNVTkc9eQpD
T05GSUdfRVhZTk9TX0FSTTY0X0NPTU1PTl9DTEs9eQpDT05GSUdfRVhZTk9TX0FVRFNTX0NMS19D
T049eQpDT05GSUdfU1BSRF9DT01NT05fQ0xLPXkKQ09ORklHX1NQUkRfU0M5ODYwX0NMSz15CkNP
TkZJR19TUFJEX1NDOTg2M0FfQ0xLPXkKQ09ORklHX0NMS19TVU5YST15CkNPTkZJR19DTEtfU1VO
WElfQ0xPQ0tTPXkKQ09ORklHX0NMS19TVU5YSV9QUkNNX1NVTjZJPXkKQ09ORklHX0NMS19TVU5Y
SV9QUkNNX1NVTjhJPXkKQ09ORklHX0NMS19TVU5YSV9QUkNNX1NVTjlJPXkKQ09ORklHX1NVTlhJ
X0NDVT15CkNPTkZJR19TVU41MElfQTY0X0NDVT15CkNPTkZJR19TVU41MElfQTEwMF9DQ1U9eQpD
T05GSUdfU1VONTBJX0ExMDBfUl9DQ1U9eQpDT05GSUdfU1VONTBJX0g2X0NDVT15CkNPTkZJR19T
VU41MElfSDZfUl9DQ1U9eQojIENPTkZJR19TVU44SV9BODNUX0NDVSBpcyBub3Qgc2V0CkNPTkZJ
R19TVU44SV9IM19DQ1U9eQpDT05GSUdfU1VOOElfREUyX0NDVT15CkNPTkZJR19TVU44SV9SX0ND
VT15CkNPTkZJR19DTEtfVEVHUkFfQlBNUD15CkNPTkZJR19URUdSQV9DTEtfREZMTD15CkNPTkZJ
R19DTEtfVU5JUEhJRVI9eQojIENPTkZJR19DT01NT05fQ0xLX1pZTlFNUCBpcyBub3Qgc2V0CkNP
TkZJR19IV1NQSU5MT0NLPXkKIyBDT05GSUdfSFdTUElOTE9DS19PTUFQIGlzIG5vdCBzZXQKQ09O
RklHX0hXU1BJTkxPQ0tfUUNPTT15CiMgQ09ORklHX0hXU1BJTkxPQ0tfU1BSRCBpcyBub3Qgc2V0
CgojCiMgQ2xvY2sgU291cmNlIGRyaXZlcnMKIwpDT05GSUdfVElNRVJfT0Y9eQpDT05GSUdfVElN
RVJfQUNQST15CkNPTkZJR19USU1FUl9QUk9CRT15CkNPTkZJR19DTEtTUkNfTU1JTz15CkNPTkZJ
R19EV19BUEJfVElNRVI9eQpDT05GSUdfRFdfQVBCX1RJTUVSX09GPXkKQ09ORklHX1JPQ0tDSElQ
X1RJTUVSPXkKQ09ORklHX09XTF9USU1FUj15CkNPTkZJR19URUdSQV9USU1FUj15CkNPTkZJR19B
Uk1fQVJDSF9USU1FUj15CkNPTkZJR19BUk1fQVJDSF9USU1FUl9FVlRTVFJFQU09eQpDT05GSUdf
QVJNX0FSQ0hfVElNRVJfT09MX1dPUktBUk9VTkQ9eQpDT05GSUdfRlNMX0VSUkFUVU1fQTAwODU4
NT15CkNPTkZJR19ISVNJTElDT05fRVJSQVRVTV8xNjEwMTAxMDE9eQpDT05GSUdfQVJNNjRfRVJS
QVRVTV84NTg5MjE9eQpDT05GSUdfU1VONTBJX0VSUkFUVU1fVU5LTk9XTjE9eQpDT05GSUdfQVJN
X1RJTUVSX1NQODA0PXkKQ09ORklHX1NZU19TVVBQT1JUU19TSF9DTVQ9eQpDT05GSUdfTVRLX1RJ
TUVSPXkKQ09ORklHX1NQUkRfVElNRVI9eQpDT05GSUdfU1lTX1NVUFBPUlRTX1NIX1RNVT15CkNP
TkZJR19TSF9USU1FUl9DTVQ9eQpDT05GSUdfU0hfVElNRVJfVE1VPXkKQ09ORklHX1RJTUVSX0lN
WF9TWVNfQ1RSPXkKIyBDT05GSUdfTUlDUk9DSElQX1BJVDY0QiBpcyBub3Qgc2V0CiMgZW5kIG9m
IENsb2NrIFNvdXJjZSBkcml2ZXJzCgpDT05GSUdfTUFJTEJPWD15CkNPTkZJR19BUk1fTUhVPXkK
Q09ORklHX0lNWF9NQk9YPXkKQ09ORklHX1BMQVRGT1JNX01IVT15CiMgQ09ORklHX1BMMzIwX01C
T1ggaXMgbm90IHNldAojIENPTkZJR19BUk1BREFfMzdYWF9SV1RNX01CT1ggaXMgbm90IHNldAoj
IENPTkZJR19PTUFQMlBMVVNfTUJPWCBpcyBub3Qgc2V0CiMgQ09ORklHX1JPQ0tDSElQX01CT1gg
aXMgbm90IHNldApDT05GSUdfUENDPXkKIyBDT05GSUdfQUxURVJBX01CT1ggaXMgbm90IHNldApD
T05GSUdfQkNNMjgzNV9NQk9YPXkKQ09ORklHX1RJX01FU1NBR0VfTUFOQUdFUj15CkNPTkZJR19I
STM2NjBfTUJPWD15CkNPTkZJR19ISTYyMjBfTUJPWD15CiMgQ09ORklHX01BSUxCT1hfVEVTVCBp
cyBub3Qgc2V0CkNPTkZJR19RQ09NX0FQQ1NfSVBDPXkKQ09ORklHX1RFR1JBX0hTUF9NQk9YPXkK
IyBDT05GSUdfWEdFTkVfU0xJTVBST19NQk9YIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNX1BEQ19N
Qk9YIGlzIG5vdCBzZXQKQ09ORklHX0JDTV9GTEVYUk1fTUJPWD1tCiMgQ09ORklHX01US19DTURR
X01CT1ggaXMgbm90IHNldApDT05GSUdfWllOUU1QX0lQSV9NQk9YPXkKQ09ORklHX1NVTjZJX01T
R0JPWD15CiMgQ09ORklHX1NQUkRfTUJPWCBpcyBub3Qgc2V0CiMgQ09ORklHX1FDT01fSVBDQyBp
cyBub3Qgc2V0CkNPTkZJR19JT01NVV9JT1ZBPXkKQ09ORklHX0lPTU1VX0FQST15CkNPTkZJR19J
T01NVV9TVVBQT1JUPXkKCiMKIyBHZW5lcmljIElPTU1VIFBhZ2V0YWJsZSBTdXBwb3J0CiMKQ09O
RklHX0lPTU1VX0lPX1BHVEFCTEU9eQpDT05GSUdfSU9NTVVfSU9fUEdUQUJMRV9MUEFFPXkKIyBD
T05GSUdfSU9NTVVfSU9fUEdUQUJMRV9MUEFFX1NFTEZURVNUIGlzIG5vdCBzZXQKIyBDT05GSUdf
SU9NTVVfSU9fUEdUQUJMRV9BUk1WN1MgaXMgbm90IHNldAojIGVuZCBvZiBHZW5lcmljIElPTU1V
IFBhZ2V0YWJsZSBTdXBwb3J0CgojIENPTkZJR19JT01NVV9ERUJVR0ZTIGlzIG5vdCBzZXQKIyBD
T05GSUdfSU9NTVVfREVGQVVMVF9QQVNTVEhST1VHSCBpcyBub3Qgc2V0CkNPTkZJR19PRl9JT01N
VT15CkNPTkZJR19JT01NVV9ETUE9eQpDT05GSUdfUk9DS0NISVBfSU9NTVU9eQojIENPTkZJR19T
VU41MElfSU9NTVUgaXMgbm90IHNldApDT05GSUdfVEVHUkFfSU9NTVVfU01NVT15CiMgQ09ORklH
X0VYWU5PU19JT01NVSBpcyBub3Qgc2V0CkNPTkZJR19JUE1NVV9WTVNBPXkKQ09ORklHX0FSTV9T
TU1VPXkKIyBDT05GSUdfQVJNX1NNTVVfTEVHQUNZX0RUX0JJTkRJTkdTIGlzIG5vdCBzZXQKQ09O
RklHX0FSTV9TTU1VX0RJU0FCTEVfQllQQVNTX0JZX0RFRkFVTFQ9eQpDT05GSUdfQVJNX1NNTVVf
VjM9eQojIENPTkZJR19BUk1fU01NVV9WM19TVkEgaXMgbm90IHNldAojIENPTkZJR19NVEtfSU9N
TVUgaXMgbm90IHNldApDT05GSUdfUUNPTV9JT01NVT15CiMgQ09ORklHX1ZJUlRJT19JT01NVSBp
cyBub3Qgc2V0CgojCiMgUmVtb3RlcHJvYyBkcml2ZXJzCiMKQ09ORklHX1JFTU9URVBST0M9eQoj
IENPTkZJR19SRU1PVEVQUk9DX0NERVYgaXMgbm90IHNldAojIENPTkZJR19JTVhfUkVNT1RFUFJP
QyBpcyBub3Qgc2V0CiMgQ09ORklHX01US19TQ1AgaXMgbm90IHNldApDT05GSUdfUUNPTV9QSUxf
SU5GTz1tCkNPTkZJR19RQ09NX1JQUk9DX0NPTU1PTj1tCkNPTkZJR19RQ09NX1E2VjVfQ09NTU9O
PW0KIyBDT05GSUdfUUNPTV9RNlY1X0FEU1AgaXMgbm90IHNldApDT05GSUdfUUNPTV9RNlY1X01T
Uz1tCkNPTkZJR19RQ09NX1E2VjVfUEFTPW0KIyBDT05GSUdfUUNPTV9RNlY1X1dDU1MgaXMgbm90
IHNldApDT05GSUdfUUNPTV9TWVNNT049bQojIENPTkZJR19RQ09NX1dDTlNTX1BJTCBpcyBub3Qg
c2V0CiMgQ09ORklHX1RJX0szX0RTUF9SRU1PVEVQUk9DIGlzIG5vdCBzZXQKIyBDT05GSUdfVElf
SzNfUjVfUkVNT1RFUFJPQyBpcyBub3Qgc2V0CiMgZW5kIG9mIFJlbW90ZXByb2MgZHJpdmVycwoK
IwojIFJwbXNnIGRyaXZlcnMKIwpDT05GSUdfUlBNU0c9eQojIENPTkZJR19SUE1TR19DSEFSIGlz
IG5vdCBzZXQKQ09ORklHX1JQTVNHX1FDT01fR0xJTks9eQpDT05GSUdfUlBNU0dfUUNPTV9HTElO
S19SUE09eQpDT05GSUdfUlBNU0dfUUNPTV9HTElOS19TTUVNPW0KQ09ORklHX1JQTVNHX1FDT01f
U01EPXkKIyBDT05GSUdfUlBNU0dfVklSVElPIGlzIG5vdCBzZXQKIyBlbmQgb2YgUnBtc2cgZHJp
dmVycwoKQ09ORklHX1NPVU5EV0lSRT1tCgojCiMgU291bmRXaXJlIERldmljZXMKIwojIENPTkZJ
R19TT1VORFdJUkVfSU5URUwgaXMgbm90IHNldAojIENPTkZJR19TT1VORFdJUkVfUUNPTSBpcyBu
b3Qgc2V0CgojCiMgU09DIChTeXN0ZW0gT24gQ2hpcCkgc3BlY2lmaWMgRHJpdmVycwojCkNPTkZJ
R19PV0xfUE1fRE9NQUlOU19IRUxQRVI9eQpDT05GSUdfT1dMX1BNX0RPTUFJTlM9eQoKIwojIEFt
bG9naWMgU29DIGRyaXZlcnMKIwpDT05GSUdfTUVTT05fQ0FOVkFTPW0KQ09ORklHX01FU09OX0NM
S19NRUFTVVJFPXkKQ09ORklHX01FU09OX0dYX1NPQ0lORk89eQpDT05GSUdfTUVTT05fR1hfUE1f
RE9NQUlOUz15CkNPTkZJR19NRVNPTl9FRV9QTV9ET01BSU5TPXkKQ09ORklHX01FU09OX1NFQ1VS
RV9QTV9ET01BSU5TPXkKQ09ORklHX01FU09OX01YX1NPQ0lORk89eQojIGVuZCBvZiBBbWxvZ2lj
IFNvQyBkcml2ZXJzCgojCiMgQXNwZWVkIFNvQyBkcml2ZXJzCiMKIyBlbmQgb2YgQXNwZWVkIFNv
QyBkcml2ZXJzCgojCiMgQnJvYWRjb20gU29DIGRyaXZlcnMKIwpDT05GSUdfQkNNMjgzNV9QT1dF
Uj15CkNPTkZJR19SQVNQQkVSUllQSV9QT1dFUj15CkNPTkZJR19TT0NfQlJDTVNUQj15CkNPTkZJ
R19CUkNNU1RCX1BNPXkKIyBlbmQgb2YgQnJvYWRjb20gU29DIGRyaXZlcnMKCiMKIyBOWFAvRnJl
ZXNjYWxlIFFvcklRIFNvQyBkcml2ZXJzCiMKQ09ORklHX0ZTTF9EUEFBPXkKIyBDT05GSUdfRlNM
X0RQQUFfQ0hFQ0tJTkcgaXMgbm90IHNldAojIENPTkZJR19GU0xfQk1BTl9URVNUIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRlNMX1FNQU5fVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1FVSUNDX0VOR0lO
RSBpcyBub3Qgc2V0CkNPTkZJR19GU0xfR1VUUz15CkNPTkZJR19GU0xfTUNfRFBJTz15CkNPTkZJ
R19EUEFBMl9DT05TT0xFPXkKIyBDT05GSUdfRlNMX1JDUE0gaXMgbm90IHNldAojIGVuZCBvZiBO
WFAvRnJlZXNjYWxlIFFvcklRIFNvQyBkcml2ZXJzCgojCiMgaS5NWCBTb0MgZHJpdmVycwojCkNP
TkZJR19JTVhfR1BDVjJfUE1fRE9NQUlOUz15CkNPTkZJR19TT0NfSU1YOE09eQojIGVuZCBvZiBp
Lk1YIFNvQyBkcml2ZXJzCgojCiMgTWVkaWFUZWsgU29DIGRyaXZlcnMKIwojIENPTkZJR19NVEtf
Q01EUSBpcyBub3Qgc2V0CkNPTkZJR19NVEtfSU5GUkFDRkc9eQojIENPTkZJR19NVEtfUE1JQ19X
UkFQIGlzIG5vdCBzZXQKQ09ORklHX01US19TQ1BTWVM9eQpDT05GSUdfTVRLX01NU1lTPXkKIyBl
bmQgb2YgTWVkaWFUZWsgU29DIGRyaXZlcnMKCiMKIyBRdWFsY29tbSBTb0MgZHJpdmVycwojCkNP
TkZJR19RQ09NX0FPU1NfUU1QPXkKQ09ORklHX1FDT01fQ09NTUFORF9EQj15CiMgQ09ORklHX1FD
T01fQ1BSIGlzIG5vdCBzZXQKQ09ORklHX1FDT01fR0VOSV9TRT15CiMgQ09ORklHX1FDT01fR1NC
SSBpcyBub3Qgc2V0CiMgQ09ORklHX1FDT01fTExDQyBpcyBub3Qgc2V0CkNPTkZJR19RQ09NX0tS
WU9fTDJfQUNDRVNTT1JTPXkKQ09ORklHX1FDT01fTURUX0xPQURFUj1tCiMgQ09ORklHX1FDT01f
T0NNRU0gaXMgbm90IHNldApDT05GSUdfUUNPTV9QRFJfSEVMUEVSUz1tCkNPTkZJR19RQ09NX1FN
SV9IRUxQRVJTPW0KQ09ORklHX1FDT01fUk1URlNfTUVNPW0KQ09ORklHX1FDT01fUlBNSD15CkNP
TkZJR19RQ09NX1JQTUhQRD15CkNPTkZJR19RQ09NX1JQTVBEPXkKQ09ORklHX1FDT01fU01FTT15
CkNPTkZJR19RQ09NX1NNRF9SUE09eQpDT05GSUdfUUNPTV9TTUVNX1NUQVRFPXkKQ09ORklHX1FD
T01fU01QMlA9eQpDT05GSUdfUUNPTV9TTVNNPXkKQ09ORklHX1FDT01fU09DSU5GTz1tCiMgQ09O
RklHX1FDT01fV0NOU1NfQ1RSTCBpcyBub3Qgc2V0CkNPTkZJR19RQ09NX0FQUj1tCiMgZW5kIG9m
IFF1YWxjb21tIFNvQyBkcml2ZXJzCgpDT05GSUdfU09DX1JFTkVTQVM9eQpDT05GSUdfQVJDSF9S
Q0FSX0dFTjM9eQpDT05GSUdfQVJDSF9SOEE3Nzk5NT15CkNPTkZJR19BUkNIX1I4QTc3OTkwPXkK
IyBDT05GSUdfQVJDSF9SOEE3Nzk1MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FSQ0hfUjhBNzc5NTEg
aXMgbm90IHNldApDT05GSUdfQVJDSF9SOEE3Nzk2NT15CiMgQ09ORklHX0FSQ0hfUjhBNzc5NjAg
aXMgbm90IHNldAojIENPTkZJR19BUkNIX1I4QTc3OTYxIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hf
UjhBNzc5ODA9eQpDT05GSUdfQVJDSF9SOEE3Nzk3MD15CiMgQ09ORklHX0FSQ0hfUjhBNzc5QTAg
aXMgbm90IHNldApDT05GSUdfQVJDSF9SOEE3NzRDMD15CiMgQ09ORklHX0FSQ0hfUjhBNzc0RTEg
aXMgbm90IHNldApDT05GSUdfQVJDSF9SOEE3NzRBMT15CiMgQ09ORklHX0FSQ0hfUjhBNzc0QjEg
aXMgbm90IHNldApDT05GSUdfUlNUX1JDQVI9eQpDT05GSUdfU1lTQ19SQ0FSPXkKQ09ORklHX1NZ
U0NfUjhBNzc5OTU9eQpDT05GSUdfU1lTQ19SOEE3Nzk5MD15CkNPTkZJR19TWVNDX1I4QTc3OTY1
PXkKQ09ORklHX1NZU0NfUjhBNzc5ODA9eQpDT05GSUdfU1lTQ19SOEE3Nzk3MD15CkNPTkZJR19T
WVNDX1I4QTc3NEMwPXkKQ09ORklHX1NZU0NfUjhBNzc0QTE9eQpDT05GSUdfUk9DS0NISVBfR1JG
PXkKIyBDT05GSUdfUk9DS0NISVBfSU9ET01BSU4gaXMgbm90IHNldApDT05GSUdfUk9DS0NISVBf
UE1fRE9NQUlOUz15CkNPTkZJR19TT0NfU0FNU1VORz15CkNPTkZJR19FWFlOT1NfQ0hJUElEPXkK
Q09ORklHX0VYWU5PU19QTVU9eQpDT05GSUdfRVhZTk9TX1BNX0RPTUFJTlM9eQpDT05GSUdfU1VO
WElfU1JBTT15CkNPTkZJR19BUkNIX1RFR1JBXzEzMl9TT0M9eQpDT05GSUdfQVJDSF9URUdSQV8y
MTBfU09DPXkKQ09ORklHX0FSQ0hfVEVHUkFfMTg2X1NPQz15CkNPTkZJR19BUkNIX1RFR1JBXzE5
NF9TT0M9eQojIENPTkZJR19BUkNIX1RFR1JBXzIzNF9TT0MgaXMgbm90IHNldApDT05GSUdfU09D
X1RFR1JBX0ZVU0U9eQpDT05GSUdfU09DX1RFR1JBX0ZMT1dDVFJMPXkKQ09ORklHX1NPQ19URUdS
QV9QTUM9eQpDT05GSUdfU09DX1RFR1JBX1BPV0VSR0FURV9CUE1QPXkKQ09ORklHX0FSQ0hfSzNf
QU02X1NPQz15CkNPTkZJR19BUkNIX0szX0o3MjFFX1NPQz15CkNPTkZJR19TT0NfVEk9eQpDT05G
SUdfVElfU0NJX1BNX0RPTUFJTlM9eQojIENPTkZJR19USV9LM19SSU5HQUNDIGlzIG5vdCBzZXQK
Q09ORklHX1RJX0szX1NPQ0lORk89eQojIENPTkZJR19USV9QUlVTUyBpcyBub3Qgc2V0CkNPTkZJ
R19USV9TQ0lfSU5UQV9NU0lfRE9NQUlOPXkKCiMKIyBYaWxpbnggU29DIGRyaXZlcnMKIwojIENP
TkZJR19YSUxJTlhfVkNVIGlzIG5vdCBzZXQKQ09ORklHX1pZTlFNUF9QT1dFUj15CkNPTkZJR19a
WU5RTVBfUE1fRE9NQUlOUz15CiMgZW5kIG9mIFhpbGlueCBTb0MgZHJpdmVycwoKIyBDT05GSUdf
U09DX1pURSBpcyBub3Qgc2V0CiMgZW5kIG9mIFNPQyAoU3lzdGVtIE9uIENoaXApIHNwZWNpZmlj
IERyaXZlcnMKCkNPTkZJR19QTV9ERVZGUkVRPXkKCiMKIyBERVZGUkVRIEdvdmVybm9ycwojCkNP
TkZJR19ERVZGUkVRX0dPVl9TSU1QTEVfT05ERU1BTkQ9eQpDT05GSUdfREVWRlJFUV9HT1ZfUEVS
Rk9STUFOQ0U9eQpDT05GSUdfREVWRlJFUV9HT1ZfUE9XRVJTQVZFPXkKQ09ORklHX0RFVkZSRVFf
R09WX1VTRVJTUEFDRT15CkNPTkZJR19ERVZGUkVRX0dPVl9QQVNTSVZFPXkKCiMKIyBERVZGUkVR
IERyaXZlcnMKIwojIENPTkZJR19BUk1fRVhZTk9TX0JVU19ERVZGUkVRIGlzIG5vdCBzZXQKIyBD
T05GSUdfQVJNX0lNWF9CVVNfREVWRlJFUSBpcyBub3Qgc2V0CiMgQ09ORklHX0FSTV9JTVg4TV9E
RFJDX0RFVkZSRVEgaXMgbm90IHNldAojIENPTkZJR19BUk1fVEVHUkFfREVWRlJFUSBpcyBub3Qg
c2V0CiMgQ09ORklHX0FSTV9SSzMzOTlfRE1DX0RFVkZSRVEgaXMgbm90IHNldAojIENPTkZJR19Q
TV9ERVZGUkVRX0VWRU5UIGlzIG5vdCBzZXQKQ09ORklHX0VYVENPTj15CgojCiMgRXh0Y29uIERl
dmljZSBEcml2ZXJzCiMKIyBDT05GSUdfRVhUQ09OX0FEQ19KQUNLIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUQ09OX0ZTQTk0ODAgaXMgbm90IHNldAojIENPTkZJR19FWFRDT05fR1BJTyBpcyBub3Qg
c2V0CiMgQ09ORklHX0VYVENPTl9NQVgzMzU1IGlzIG5vdCBzZXQKQ09ORklHX0VYVENPTl9QVE41
MTUwPW0KIyBDT05GSUdfRVhUQ09OX1FDT01fU1BNSV9NSVNDIGlzIG5vdCBzZXQKIyBDT05GSUdf
RVhUQ09OX1JUODk3M0EgaXMgbm90IHNldAojIENPTkZJR19FWFRDT05fU001NTAyIGlzIG5vdCBz
ZXQKQ09ORklHX0VYVENPTl9VU0JfR1BJTz15CkNPTkZJR19FWFRDT05fVVNCQ19DUk9TX0VDPXkK
Q09ORklHX01FTU9SWT15CiMgQ09ORklHX0FSTV9QTDE3Ml9NUE1DIGlzIG5vdCBzZXQKQ09ORklH
X0JSQ01TVEJfRFBGRT15CkNPTkZJR19GU0xfSUZDPXkKIyBDT05GSUdfUkVORVNBU19SUENJRiBp
cyBub3Qgc2V0CkNPTkZJR19URUdSQV9NQz15CiMgQ09ORklHX1RFR1JBMjEwX0VNQyBpcyBub3Qg
c2V0CkNPTkZJR19JSU89eQpDT05GSUdfSUlPX0JVRkZFUj15CiMgQ09ORklHX0lJT19CVUZGRVJf
Q0IgaXMgbm90IHNldAojIENPTkZJR19JSU9fQlVGRkVSX0RNQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lJT19CVUZGRVJfRE1BRU5HSU5FIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX0JVRkZFUl9IV19D
T05TVU1FUiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPW0KQ09ORklHX0lJT19UUklH
R0VSRURfQlVGRkVSPW0KIyBDT05GSUdfSUlPX0NPTkZJR0ZTIGlzIG5vdCBzZXQKQ09ORklHX0lJ
T19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVI9MgojIENPTkZJR19J
SU9fU1dfREVWSUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfSUlPX1NXX1RSSUdHRVIgaXMgbm90IHNl
dAojIENPTkZJR19JSU9fVFJJR0dFUkVEX0VWRU5UIGlzIG5vdCBzZXQKCiMKIyBBY2NlbGVyb21l
dGVycwojCiMgQ09ORklHX0FESVMxNjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwOSBp
cyBub3Qgc2V0CiMgQ09ORklHX0FEWEwzNDVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfQURYTDM0
NV9TUEkgaXMgbm90IHNldAojIENPTkZJR19BRFhMMzcyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X0FEWEwzNzJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1BMTgwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQk1BMjIwIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1BNDAwIGlzIG5vdCBzZXQKIyBDT05GSUdf
Qk1DMTUwX0FDQ0VMIGlzIG5vdCBzZXQKIyBDT05GSUdfREEyODAgaXMgbm90IHNldAojIENPTkZJ
R19EQTMxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0RNQVJEMDYgaXMgbm90IHNldAojIENPTkZJR19E
TUFSRDA5IGlzIG5vdCBzZXQKIyBDT05GSUdfRE1BUkQxMCBpcyBub3Qgc2V0CiMgQ09ORklHX0lJ
T19DUk9TX0VDX0FDQ0VMX0xFR0FDWSBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TVF9BQ0NFTF8z
QVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0tYU0Q5IGlzIG5vdCBzZXQKIyBDT05GSUdfS1hDSksx
MDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfTUMzMjMwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1BNzQ1
NV9JMkMgaXMgbm90IHNldAojIENPTkZJR19NTUE3NDU1X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X01NQTc2NjAgaXMgbm90IHNldAojIENPTkZJR19NTUE4NDUyIGlzIG5vdCBzZXQKIyBDT05GSUdf
TU1BOTU1MSBpcyBub3Qgc2V0CiMgQ09ORklHX01NQTk1NTMgaXMgbm90IHNldAojIENPTkZJR19N
WEM0MDA1IGlzIG5vdCBzZXQKIyBDT05GSUdfTVhDNjI1NSBpcyBub3Qgc2V0CiMgQ09ORklHX1ND
QTMwMDAgaXMgbm90IHNldAojIENPTkZJR19TVEs4MzEyIGlzIG5vdCBzZXQKIyBDT05GSUdfU1RL
OEJBNTAgaXMgbm90IHNldAojIGVuZCBvZiBBY2NlbGVyb21ldGVycwoKIwojIEFuYWxvZyB0byBk
aWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19BRDcwOTFSNSBpcyBub3Qgc2V0CiMgQ09ORklH
X0FENzEyNCBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzE5MiBpcyBub3Qgc2V0CiMgQ09ORklHX0FE
NzI2NiBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzI5MSBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzI5
MiBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzI5OCBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzQ3NiBp
cyBub3Qgc2V0CiMgQ09ORklHX0FENzYwNl9JRkFDRV9QQVJBTExFTCBpcyBub3Qgc2V0CiMgQ09O
RklHX0FENzYwNl9JRkFDRV9TUEkgaXMgbm90IHNldAojIENPTkZJR19BRDc3NjYgaXMgbm90IHNl
dAojIENPTkZJR19BRDc3NjhfMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzc4MCBpcyBub3Qgc2V0
CiMgQ09ORklHX0FENzc5MSBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzc5MyBpcyBub3Qgc2V0CiMg
Q09ORklHX0FENzg4NyBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzkyMyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FENzk0OSBpcyBub3Qgc2V0CiMgQ09ORklHX0FENzk5WCBpcyBub3Qgc2V0CiMgQ09ORklH
X0FEOTQ2NyBpcyBub3Qgc2V0CiMgQ09ORklHX0FESV9BWElfQURDIGlzIG5vdCBzZXQKIyBDT05G
SUdfQVhQMjBYX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FYUDI4OF9BREMgaXMgbm90IHNldAoj
IENPTkZJR19CQ01fSVBST0NfQURDIGlzIG5vdCBzZXQKIyBDT05GSUdfQkVSTElOMl9BREMgaXMg
bm90IHNldAojIENPTkZJR19DQzEwMDAxX0FEQyBpcyBub3Qgc2V0CiMgQ09ORklHX0VOVkVMT1BF
X0RFVEVDVE9SIGlzIG5vdCBzZXQKQ09ORklHX0VYWU5PU19BREM9eQojIENPTkZJR19ISTg0MzUg
aXMgbm90IHNldAojIENPTkZJR19IWDcxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lOQTJYWF9BREMg
aXMgbm90IHNldAojIENPTkZJR19JTVg3RF9BREMgaXMgbm90IHNldAojIENPTkZJR19MVEMyNDcx
IGlzIG5vdCBzZXQKIyBDT05GSUdfTFRDMjQ4NSBpcyBub3Qgc2V0CiMgQ09ORklHX0xUQzI0OTYg
aXMgbm90IHNldAojIENPTkZJR19MVEMyNDk3IGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMTAyNyBp
cyBub3Qgc2V0CiMgQ09ORklHX01BWDExMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMTExOCBp
cyBub3Qgc2V0CiMgQ09ORklHX01BWDEyNDEgaXMgbm90IHNldAojIENPTkZJR19NQVgxMzYzIGlz
IG5vdCBzZXQKQ09ORklHX01BWDk2MTE9bQojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUNQMzQyMiBpcyBub3Qgc2V0CiMgQ09ORklHX01DUDM5MTEgaXMgbm90IHNldAojIENP
TkZJR19NRURJQVRFS19NVDY1NzdfQVVYQURDIGlzIG5vdCBzZXQKQ09ORklHX01FU09OX1NBUkFE
Qz15CiMgQ09ORklHX05BVTc4MDIgaXMgbm90IHNldApDT05GSUdfUUNPTV9WQURDX0NPTU1PTj1t
CiMgQ09ORklHX1FDT01fU1BNSV9JQURDIGlzIG5vdCBzZXQKIyBDT05GSUdfUUNPTV9TUE1JX1ZB
REMgaXMgbm90IHNldApDT05GSUdfUUNPTV9TUE1JX0FEQzU9bQpDT05GSUdfUk9DS0NISVBfU0FS
QURDPW0KIyBDT05GSUdfU0RfQURDX01PRFVMQVRPUiBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FE
QzA4MUMgaXMgbm90IHNldAojIENPTkZJR19USV9BREMwODMyIGlzIG5vdCBzZXQKIyBDT05GSUdf
VElfQURDMDg0UzAyMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEQzEyMTM4IGlzIG5vdCBzZXQK
IyBDT05GSUdfVElfQURDMTA4UzEwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEQzEyOFMwNTIg
aXMgbm90IHNldAojIENPTkZJR19USV9BREMxNjFTNjI2IGlzIG5vdCBzZXQKIyBDT05GSUdfVElf
QURTMTAxNSBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0FEUzc5NTAgaXMgbm90IHNldAojIENPTkZJ
R19USV9BRFM4MzQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURTODY4OCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RJX0FEUzEyNFMwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX1RMQzQ1NDEgaXMgbm90
IHNldAojIENPTkZJR19WRjYxMF9BREMgaXMgbm90IHNldAojIENPTkZJR19YSUxJTlhfWEFEQyBp
cyBub3Qgc2V0CiMgZW5kIG9mIEFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKCiMKIyBBbmFs
b2cgRnJvbnQgRW5kcwojCiMgQ09ORklHX0lJT19SRVNDQUxFIGlzIG5vdCBzZXQKIyBlbmQgb2Yg
QW5hbG9nIEZyb250IEVuZHMKCiMKIyBBbXBsaWZpZXJzCiMKIyBDT05GSUdfQUQ4MzY2IGlzIG5v
dCBzZXQKIyBDT05GSUdfSE1DNDI1IGlzIG5vdCBzZXQKIyBlbmQgb2YgQW1wbGlmaWVycwoKIwoj
IENoZW1pY2FsIFNlbnNvcnMKIwojIENPTkZJR19BVExBU19QSF9TRU5TT1IgaXMgbm90IHNldAoj
IENPTkZJR19BVExBU19FWk9fU0VOU09SIGlzIG5vdCBzZXQKIyBDT05GSUdfQk1FNjgwIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0NTODExIGlzIG5vdCBzZXQKIyBDT05GSUdfSUFRQ09SRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1BNUzcwMDMgaXMgbm90IHNldAojIENPTkZJR19TQ0QzMF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU0lSSU9OX1NHUDMwIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BTMzAg
aXMgbm90IHNldAojIENPTkZJR19WWjg5WCBpcyBub3Qgc2V0CiMgZW5kIG9mIENoZW1pY2FsIFNl
bnNvcnMKCkNPTkZJR19JSU9fQ1JPU19FQ19TRU5TT1JTX0NPUkU9bQpDT05GSUdfSUlPX0NST1Nf
RUNfU0VOU09SUz1tCiMgQ09ORklHX0lJT19DUk9TX0VDX1NFTlNPUlNfTElEX0FOR0xFIGlzIG5v
dCBzZXQKCiMKIyBIaWQgU2Vuc29yIElJTyBDb21tb24KIwojIGVuZCBvZiBIaWQgU2Vuc29yIElJ
TyBDb21tb24KCiMKIyBTU1AgU2Vuc29yIENvbW1vbgojCiMgQ09ORklHX0lJT19TU1BfU0VOU09S
SFVCIGlzIG5vdCBzZXQKIyBlbmQgb2YgU1NQIFNlbnNvciBDb21tb24KCiMKIyBEaWdpdGFsIHRv
IGFuYWxvZyBjb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdf
QUQ1MzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1
NDIxIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NTkyUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTU5M1Ig
aXMgbm90IHNldAojIENPTkZJR19BRDU1MDQgaXMgbm90IHNldAojIENPTkZJR19BRDU2MjRSX1NQ
SSBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTY4Nl9TUEkgaXMgbm90IHNldAojIENPTkZJR19BRDU2
OTZfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NzU1IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1
NzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NzYxIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NzY0
IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NzcwUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FENTc5MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0FENzMwMyBpcyBub3Qgc2V0CiMgQ09ORklHX0FEODgwMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RQT1RfREFDIGlzIG5vdCBzZXQKIyBDT05GSUdfRFM0NDI0IGlzIG5v
dCBzZXQKIyBDT05GSUdfTFRDMTY2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0xUQzI2MzIgaXMgbm90
IHNldAojIENPTkZJR19NNjIzMzIgaXMgbm90IHNldAojIENPTkZJR19NQVg1MTcgaXMgbm90IHNl
dAojIENPTkZJR19NQVg1ODIxIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDcyNSBpcyBub3Qgc2V0
CiMgQ09ORklHX01DUDQ5MjIgaXMgbm90IHNldAojIENPTkZJR19USV9EQUMwODJTMDg1IGlzIG5v
dCBzZXQKIyBDT05GSUdfVElfREFDNTU3MSBpcyBub3Qgc2V0CiMgQ09ORklHX1RJX0RBQzczMTEg
aXMgbm90IHNldAojIENPTkZJR19USV9EQUM3NjEyIGlzIG5vdCBzZXQKIyBDT05GSUdfVkY2MTBf
REFDIGlzIG5vdCBzZXQKIyBlbmQgb2YgRGlnaXRhbCB0byBhbmFsb2cgY29udmVydGVycwoKIwoj
IElJTyBkdW1teSBkcml2ZXIKIwojIGVuZCBvZiBJSU8gZHVtbXkgZHJpdmVyCgojCiMgRnJlcXVl
bmN5IFN5bnRoZXNpemVycyBERFMvUExMCiMKCiMKIyBDbG9jayBHZW5lcmF0b3IvRGlzdHJpYnV0
aW9uCiMKIyBDT05GSUdfQUQ5NTIzIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ2xvY2sgR2VuZXJhdG9y
L0Rpc3RyaWJ1dGlvbgoKIwojIFBoYXNlLUxvY2tlZCBMb29wIChQTEwpIGZyZXF1ZW5jeSBzeW50
aGVzaXplcnMKIwojIENPTkZJR19BREY0MzUwIGlzIG5vdCBzZXQKIyBDT05GSUdfQURGNDM3MSBp
cyBub3Qgc2V0CiMgZW5kIG9mIFBoYXNlLUxvY2tlZCBMb29wIChQTEwpIGZyZXF1ZW5jeSBzeW50
aGVzaXplcnMKIyBlbmQgb2YgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCgojCiMgRGln
aXRhbCBneXJvc2NvcGUgc2Vuc29ycwojCiMgQ09ORklHX0FESVMxNjA4MCBpcyBub3Qgc2V0CiMg
Q09ORklHX0FESVMxNjEzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjEzNiBpcyBub3Qgc2V0
CiMgQ09ORklHX0FESVMxNjI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWFJTMjkwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQURYUlM0NTAgaXMgbm90IHNldAojIENPTkZJR19CTUcxNjAgaXMgbm90IHNl
dAojIENPTkZJR19GWEFTMjEwMDJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTVBVMzA1MF9JMkMgaXMg
bm90IHNldAojIENPTkZJR19JSU9fU1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lU
RzMyMDAgaXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIGd5cm9zY29wZSBzZW5zb3JzCgojCiMg
SGVhbHRoIFNlbnNvcnMKIwoKIwojIEhlYXJ0IFJhdGUgTW9uaXRvcnMKIwojIENPTkZJR19BRkU0
NDAzIGlzIG5vdCBzZXQKIyBDT05GSUdfQUZFNDQwNCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDMw
MTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMzAxMDIgaXMgbm90IHNldAojIGVuZCBvZiBIZWFy
dCBSYXRlIE1vbml0b3JzCiMgZW5kIG9mIEhlYWx0aCBTZW5zb3JzCgojCiMgSHVtaWRpdHkgc2Vu
c29ycwojCiMgQ09ORklHX0FNMjMxNSBpcyBub3Qgc2V0CiMgQ09ORklHX0RIVDExIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSERDMTAwWCBpcyBub3Qgc2V0CiMgQ09ORklHX0hEQzIwMTAgaXMgbm90IHNl
dAojIENPTkZJR19IVFMyMjEgaXMgbm90IHNldAojIENPTkZJR19IVFUyMSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CiMgZW5k
IG9mIEh1bWlkaXR5IHNlbnNvcnMKCiMKIyBJbmVydGlhbCBtZWFzdXJlbWVudCB1bml0cwojCiMg
Q09ORklHX0FESVMxNjQwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjQ2MCBpcyBub3Qgc2V0
CiMgQ09ORklHX0FESVMxNjQ3NSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjQ4MCBpcyBub3Qg
c2V0CiMgQ09ORklHX0JNSTE2MF9JMkMgaXMgbm90IHNldAojIENPTkZJR19CTUkxNjBfU1BJIGlz
IG5vdCBzZXQKIyBDT05GSUdfRlhPUzg3MDBfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfRlhPUzg3
MDBfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfS01YNjEgaXMgbm90IHNldAojIENPTkZJR19JTlZf
SUNNNDI2MDBfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5WX0lDTTQyNjAwX1NQSSBpcyBub3Qg
c2V0CiMgQ09ORklHX0lOVl9NUFU2MDUwX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVl9NUFU2
MDUwX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TVF9MU002RFNYIGlzIG5vdCBzZXQKIyBl
bmQgb2YgSW5lcnRpYWwgbWVhc3VyZW1lbnQgdW5pdHMKCiMKIyBMaWdodCBzZW5zb3JzCiMKIyBD
T05GSUdfQUNQSV9BTFMgaXMgbm90IHNldAojIENPTkZJR19BREpEX1MzMTEgaXMgbm90IHNldAoj
IENPTkZJR19BRFVYMTAyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FMMzAxMCBpcyBub3Qgc2V0CiMg
Q09ORklHX0FMMzMyMEEgaXMgbm90IHNldAojIENPTkZJR19BUERTOTMwMCBpcyBub3Qgc2V0CiMg
Q09ORklHX0FQRFM5OTYwIGlzIG5vdCBzZXQKIyBDT05GSUdfQVM3MzIxMSBpcyBub3Qgc2V0CiMg
Q09ORklHX0JIMTc1MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JIMTc4MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzIxODEgaXMgbm90IHNldAojIENPTkZJR19DTTMyMzIgaXMgbm90IHNldAojIENPTkZJ
R19DTTMzMjMgaXMgbm90IHNldAojIENPTkZJR19DTTM2MDUgaXMgbm90IHNldAojIENPTkZJR19D
TTM2NjUxIGlzIG5vdCBzZXQKQ09ORklHX0lJT19DUk9TX0VDX0xJR0hUX1BST1g9bQojIENPTkZJ
R19HUDJBUDAwMiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQMkFQMDIwQTAwRiBpcyBub3Qgc2V0CkNP
TkZJR19TRU5TT1JTX0lTTDI5MDE4PW0KIyBDT05GSUdfU0VOU09SU19JU0wyOTAyOCBpcyBub3Qg
c2V0CiMgQ09ORklHX0lTTDI5MTI1IGlzIG5vdCBzZXQKIyBDT05GSUdfSlNBMTIxMiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JQUjA1MjEgaXMgbm90IHNldAojIENPTkZJR19MVFI1MDEgaXMgbm90IHNl
dAojIENPTkZJR19MVjAxMDRDUyBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDQ0MDAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUFYNDQwMDkgaXMgbm90IHNldAojIENPTkZJR19OT0ExMzA1IGlzIG5vdCBz
ZXQKIyBDT05GSUdfT1BUMzAwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1BBMTIyMDMwMDEgaXMgbm90
IHNldAojIENPTkZJR19TSTExMzMgaXMgbm90IHNldAojIENPTkZJR19TSTExNDUgaXMgbm90IHNl
dAojIENPTkZJR19TVEszMzEwIGlzIG5vdCBzZXQKIyBDT05GSUdfU1RfVVZJUzI1IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVENTMzQxNCBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUzM0NzIgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX1RTTDI1NjMgaXMgbm90IHNldAojIENPTkZJR19UU0wyNTgzIGlz
IG5vdCBzZXQKIyBDT05GSUdfVFNMMjc3MiBpcyBub3Qgc2V0CiMgQ09ORklHX1RTTDQ1MzEgaXMg
bm90IHNldAojIENPTkZJR19VUzUxODJEIGlzIG5vdCBzZXQKIyBDT05GSUdfVkNOTDQwMDAgaXMg
bm90IHNldAojIENPTkZJR19WQ05MNDAzNSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZFTUw2MDMwIGlz
IG5vdCBzZXQKIyBDT05GSUdfVkVNTDYwNzAgaXMgbm90IHNldAojIENPTkZJR19WTDYxODAgaXMg
bm90IHNldAojIENPTkZJR19aT1BUMjIwMSBpcyBub3Qgc2V0CiMgZW5kIG9mIExpZ2h0IHNlbnNv
cnMKCiMKIyBNYWduZXRvbWV0ZXIgc2Vuc29ycwojCiMgQ09ORklHX0FLODk3NCBpcyBub3Qgc2V0
CiMgQ09ORklHX0FLODk3NSBpcyBub3Qgc2V0CiMgQ09ORklHX0FLMDk5MTEgaXMgbm90IHNldAoj
IENPTkZJR19CTUMxNTBfTUFHTl9JMkMgaXMgbm90IHNldAojIENPTkZJR19CTUMxNTBfTUFHTl9T
UEkgaXMgbm90IHNldAojIENPTkZJR19NQUczMTEwIGlzIG5vdCBzZXQKIyBDT05GSUdfTU1DMzUy
NDAgaXMgbm90IHNldAojIENPTkZJR19JSU9fU1RfTUFHTl8zQVhJUyBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfSE1DNTg0M19JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0hNQzU4
NDNfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19STTMxMDBfSTJDIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19STTMxMDBfU1BJIGlzIG5vdCBzZXQKIyBlbmQgb2YgTWFnbmV0b21l
dGVyIHNlbnNvcnMKCiMKIyBNdWx0aXBsZXhlcnMKIwojIENPTkZJR19JSU9fTVVYIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgTXVsdGlwbGV4ZXJzCgojCiMgSW5jbGlub21ldGVyIHNlbnNvcnMKIwojIGVu
ZCBvZiBJbmNsaW5vbWV0ZXIgc2Vuc29ycwoKIwojIFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMg
Q09ORklHX0lJT19JTlRFUlJVUFRfVFJJR0dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TWVNG
U19UUklHR0VSIGlzIG5vdCBzZXQKIyBlbmQgb2YgVHJpZ2dlcnMgLSBzdGFuZGFsb25lCgojCiMg
TGluZWFyIGFuZCBhbmd1bGFyIHBvc2l0aW9uIHNlbnNvcnMKIwojIGVuZCBvZiBMaW5lYXIgYW5k
IGFuZ3VsYXIgcG9zaXRpb24gc2Vuc29ycwoKIwojIERpZ2l0YWwgcG90ZW50aW9tZXRlcnMKIwoj
IENPTkZJR19BRDUyNzIgaXMgbm90IHNldAojIENPTkZJR19EUzE4MDMgaXMgbm90IHNldAojIENP
TkZJR19NQVg1NDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYNTQ4MSBpcyBub3Qgc2V0CiMgQ09O
RklHX01BWDU0ODcgaXMgbm90IHNldAojIENPTkZJR19NQ1A0MDE4IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUNQNDEzMSBpcyBub3Qgc2V0CiMgQ09ORklHX01DUDQ1MzEgaXMgbm90IHNldAojIENPTkZJ
R19NQ1A0MTAxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RQTDAxMDIgaXMgbm90IHNldAojIGVuZCBv
ZiBEaWdpdGFsIHBvdGVudGlvbWV0ZXJzCgojCiMgRGlnaXRhbCBwb3RlbnRpb3N0YXRzCiMKIyBD
T05GSUdfTE1QOTEwMDAgaXMgbm90IHNldAojIGVuZCBvZiBEaWdpdGFsIHBvdGVudGlvc3RhdHMK
CiMKIyBQcmVzc3VyZSBzZW5zb3JzCiMKIyBDT05GSUdfQUJQMDYwTUcgaXMgbm90IHNldAojIENP
TkZJR19CTVAyODAgaXMgbm90IHNldApDT05GSUdfSUlPX0NST1NfRUNfQkFSTz1tCiMgQ09ORklH
X0RMSEw2MEQgaXMgbm90IHNldAojIENPTkZJR19EUFMzMTAgaXMgbm90IHNldAojIENPTkZJR19I
UDAzIGlzIG5vdCBzZXQKIyBDT05GSUdfSUNQMTAxMDAgaXMgbm90IHNldAojIENPTkZJR19NUEwx
MTVfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMTE1X1NQSSBpcyBub3Qgc2V0CkNPTkZJR19N
UEwzMTE1PW0KIyBDT05GSUdfTVM1NjExIGlzIG5vdCBzZXQKIyBDT05GSUdfTVM1NjM3IGlzIG5v
dCBzZXQKIyBDT05GSUdfSUlPX1NUX1BSRVNTIGlzIG5vdCBzZXQKIyBDT05GSUdfVDU0MDMgaXMg
bm90IHNldAojIENPTkZJR19IUDIwNkMgaXMgbm90IHNldAojIENPTkZJR19aUEEyMzI2IGlzIG5v
dCBzZXQKIyBlbmQgb2YgUHJlc3N1cmUgc2Vuc29ycwoKIwojIExpZ2h0bmluZyBzZW5zb3JzCiMK
IyBDT05GSUdfQVMzOTM1IGlzIG5vdCBzZXQKIyBlbmQgb2YgTGlnaHRuaW5nIHNlbnNvcnMKCiMK
IyBQcm94aW1pdHkgYW5kIGRpc3RhbmNlIHNlbnNvcnMKIwojIENPTkZJR19JU0wyOTUwMSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0xJREFSX0xJVEVfVjIgaXMgbm90IHNldAojIENPTkZJR19NQjEyMzIg
aXMgbm90IHNldAojIENPTkZJR19QSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfUkZENzc0MDIgaXMg
bm90IHNldAojIENPTkZJR19TUkYwNCBpcyBub3Qgc2V0CiMgQ09ORklHX1NYOTMxMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NYOTUwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NSRjA4IGlzIG5vdCBzZXQK
IyBDT05GSUdfVkNOTDMwMjAgaXMgbm90IHNldAojIENPTkZJR19WTDUzTDBYX0kyQyBpcyBub3Qg
c2V0CiMgZW5kIG9mIFByb3hpbWl0eSBhbmQgZGlzdGFuY2Ugc2Vuc29ycwoKIwojIFJlc29sdmVy
IHRvIGRpZ2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09O
RklHX0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBlbmQgb2YgUmVzb2x2ZXIgdG8gZGlnaXRhbCBjb252
ZXJ0ZXJzCgojCiMgVGVtcGVyYXR1cmUgc2Vuc29ycwojCiMgQ09ORklHX0xUQzI5ODMgaXMgbm90
IHNldAojIENPTkZJR19NQVhJTV9USEVSTU9DT1VQTEUgaXMgbm90IHNldAojIENPTkZJR19NTFg5
MDYxNCBpcyBub3Qgc2V0CiMgQ09ORklHX01MWDkwNjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfVE1Q
MDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVE1QMDA3IGlzIG5vdCBzZXQKIyBDT05GSUdfVFNZUzAx
IGlzIG5vdCBzZXQKIyBDT05GSUdfVFNZUzAyRCBpcyBub3Qgc2V0CiMgQ09ORklHX01BWDMxODU2
IGlzIG5vdCBzZXQKIyBlbmQgb2YgVGVtcGVyYXR1cmUgc2Vuc29ycwoKIyBDT05GSUdfTlRCIGlz
IG5vdCBzZXQKIyBDT05GSUdfVk1FX0JVUyBpcyBub3Qgc2V0CkNPTkZJR19QV009eQpDT05GSUdf
UFdNX1NZU0ZTPXkKIyBDT05GSUdfUFdNX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1BXTV9CQ01f
SVBST0M9eQpDT05GSUdfUFdNX0JDTTI4MzU9bQojIENPTkZJR19QV01fQkVSTElOIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUFdNX0JSQ01TVEIgaXMgbm90IHNldApDT05GSUdfUFdNX0NST1NfRUM9bQoj
IENPTkZJR19QV01fRlNMX0ZUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1BXTV9ISUJWVCBpcyBub3Qg
c2V0CiMgQ09ORklHX1BXTV9JTVgxIGlzIG5vdCBzZXQKIyBDT05GSUdfUFdNX0lNWDI3IGlzIG5v
dCBzZXQKIyBDT05GSUdfUFdNX0lNWF9UUE0gaXMgbm90IHNldApDT05GSUdfUFdNX01FU09OPW0K
IyBDT05GSUdfUFdNX01US19ESVNQIGlzIG5vdCBzZXQKIyBDT05GSUdfUFdNX01FRElBVEVLIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFdNX1BDQTk2ODUgaXMgbm90IHNldApDT05GSUdfUFdNX1JDQVI9
eQpDT05GSUdfUFdNX1JFTkVTQVNfVFBVPXkKQ09ORklHX1BXTV9ST0NLQ0hJUD15CkNPTkZJR19Q
V01fU0FNU1VORz15CiMgQ09ORklHX1BXTV9TUFJEIGlzIG5vdCBzZXQKQ09ORklHX1BXTV9TVU40
ST1tCkNPTkZJR19QV01fVEVHUkE9bQojIENPTkZJR19QV01fVElFQ0FQIGlzIG5vdCBzZXQKIyBD
T05GSUdfUFdNX1RJRUhSUFdNIGlzIG5vdCBzZXQKIyBDT05GSUdfUFdNX1pYIGlzIG5vdCBzZXQK
CiMKIyBJUlEgY2hpcCBzdXBwb3J0CiMKQ09ORklHX0lSUUNISVA9eQpDT05GSUdfQVJNX0dJQz15
CkNPTkZJR19BUk1fR0lDX1BNPXkKQ09ORklHX0FSTV9HSUNfTUFYX05SPTEKQ09ORklHX0FSTV9H
SUNfVjJNPXkKQ09ORklHX0FSTV9HSUNfVjM9eQpDT05GSUdfQVJNX0dJQ19WM19JVFM9eQpDT05G
SUdfQVJNX0dJQ19WM19JVFNfUENJPXkKQ09ORklHX0FSTV9HSUNfVjNfSVRTX0ZTTF9NQz15CkNP
TkZJR19BTFBJTkVfTVNJPXkKIyBDT05GSUdfQUxfRklDIGlzIG5vdCBzZXQKQ09ORklHX0JDTTcw
MzhfTDFfSVJRPXkKQ09ORklHX0JSQ01TVEJfTDJfSVJRPXkKQ09ORklHX0RXX0FQQl9JQ1RMPXkK
Q09ORklHX0hJU0lMSUNPTl9JUlFfTUJJR0VOPXkKQ09ORklHX1JFTkVTQVNfSVJRQz15CkNPTkZJ
R19JTVhfR1BDVjI9eQpDT05GSUdfTVZFQlVfR0lDUD15CkNPTkZJR19NVkVCVV9JQ1U9eQpDT05G
SUdfTVZFQlVfT0RNST15CkNPTkZJR19NVkVCVV9QSUM9eQpDT05GSUdfTVZFQlVfU0VJPXkKQ09O
RklHX0xTX0VYVElSUT15CkNPTkZJR19MU19TQ0ZHX01TST15CkNPTkZJR19QQVJUSVRJT05fUEVS
Q1BVPXkKQ09ORklHX1FDT01fSVJRX0NPTUJJTkVSPXkKQ09ORklHX0lSUV9VTklQSElFUl9BSURF
VD15CkNPTkZJR19NRVNPTl9JUlFfR1BJTz15CkNPTkZJR19RQ09NX1BEQz15CkNPTkZJR19JTVhf
SVJRU1RFRVI9eQpDT05GSUdfSU1YX0lOVE1VWD15CkNPTkZJR19USV9TQ0lfSU5UUl9JUlFDSElQ
PXkKQ09ORklHX1RJX1NDSV9JTlRBX0lSUUNISVA9eQojIENPTkZJR19USV9QUlVTU19JTlRDIGlz
IG5vdCBzZXQKQ09ORklHX01TVF9JUlE9eQojIGVuZCBvZiBJUlEgY2hpcCBzdXBwb3J0CgojIENP
TkZJR19JUEFDS19CVVMgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfUkVTRVRfQ09OVFJPTExF
Uj15CkNPTkZJR19SRVNFVF9DT05UUk9MTEVSPXkKQ09ORklHX1JFU0VUX0JFUkxJTj15CkNPTkZJ
R19SRVNFVF9CUkNNU1RCPXkKQ09ORklHX1JFU0VUX0JSQ01TVEJfUkVTQ0FMPXkKQ09ORklHX1JF
U0VUX0lNWDc9eQojIENPTkZJR19SRVNFVF9JTlRFTF9HVyBpcyBub3Qgc2V0CkNPTkZJR19SRVNF
VF9NRVNPTj15CkNPTkZJR19SRVNFVF9NRVNPTl9BVURJT19BUkI9bQpDT05GSUdfUkVTRVRfUUNP
TV9BT1NTPXkKQ09ORklHX1JFU0VUX1FDT01fUERDPW0KQ09ORklHX1JFU0VUX1JBU1BCRVJSWVBJ
PXkKQ09ORklHX1JFU0VUX1NJTVBMRT15CkNPTkZJR19SRVNFVF9TVU5YST15CkNPTkZJR19SRVNF
VF9USV9TQ0k9eQojIENPTkZJR19SRVNFVF9USV9TWVNDT04gaXMgbm90IHNldApDT05GSUdfUkVT
RVRfVU5JUEhJRVI9eQpDT05GSUdfUkVTRVRfVU5JUEhJRVJfR0xVRT15CkNPTkZJR19DT01NT05f
UkVTRVRfSEkzNjYwPXkKQ09ORklHX0NPTU1PTl9SRVNFVF9ISTYyMjA9eQpDT05GSUdfUkVTRVRf
VEVHUkFfQlBNUD15CgojCiMgUEhZIFN1YnN5c3RlbQojCkNPTkZJR19HRU5FUklDX1BIWT15CkNP
TkZJR19HRU5FUklDX1BIWV9NSVBJX0RQSFk9eQpDT05GSUdfUEhZX1hHRU5FPXkKIyBDT05GSUdf
VVNCX0xHTV9QSFkgaXMgbm90IHNldApDT05GSUdfUEhZX1NVTjRJX1VTQj15CkNPTkZJR19QSFlf
U1VONklfTUlQSV9EUEhZPW0KIyBDT05GSUdfUEhZX1NVTjlJX1VTQiBpcyBub3Qgc2V0CiMgQ09O
RklHX1BIWV9TVU41MElfVVNCMyBpcyBub3Qgc2V0CkNPTkZJR19QSFlfTUVTT044Ql9VU0IyPXkK
Q09ORklHX1BIWV9NRVNPTl9HWExfVVNCMj15CkNPTkZJR19QSFlfTUVTT05fRzEyQV9VU0IyPXkK
Q09ORklHX1BIWV9NRVNPTl9HMTJBX1VTQjNfUENJRT15CkNPTkZJR19QSFlfTUVTT05fQVhHX1BD
SUU9eQpDT05GSUdfUEhZX01FU09OX0FYR19NSVBJX1BDSUVfQU5BTE9HPXkKQ09ORklHX1BIWV9C
Q01fU1JfVVNCPXkKIyBDT05GSUdfQkNNX0tPTkFfVVNCMl9QSFkgaXMgbm90IHNldAojIENPTkZJ
R19QSFlfQkNNX05TX1VTQjIgaXMgbm90IHNldAojIENPTkZJR19QSFlfQkNNX05TX1VTQjMgaXMg
bm90IHNldApDT05GSUdfUEhZX05TMl9QQ0lFPXkKQ09ORklHX1BIWV9OUzJfVVNCX0RSRD15CkNP
TkZJR19QSFlfQlJDTV9TQVRBPXkKQ09ORklHX1BIWV9CUkNNX1VTQj15CkNPTkZJR19QSFlfQkNN
X1NSX1BDSUU9eQojIENPTkZJR19QSFlfQ0FERU5DRV9UT1JSRU5UIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEhZX0NBREVOQ0VfRFBIWSBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9DQURFTkNFX1NJRVJS
QSBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9DQURFTkNFX1NBTFZPIGlzIG5vdCBzZXQKQ09ORklH
X1BIWV9GU0xfSU1YOE1RX1VTQj15CkNPTkZJR19QSFlfTUlYRUxfTUlQSV9EUEhZPW0KQ09ORklH
X1BIWV9ISTYyMjBfVVNCPXkKIyBDT05GSUdfUEhZX0hJMzY2MF9VU0IgaXMgbm90IHNldApDT05G
SUdfUEhZX0hJU1RCX0NPTUJQSFk9eQpDT05GSUdfUEhZX0hJU0lfSU5OT19VU0IyPXkKIyBDT05G
SUdfUEhZX0JFUkxJTl9TQVRBIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX0JFUkxJTl9VU0IgaXMg
bm90IHNldApDT05GSUdfUEhZX01WRUJVX0EzNzAwX0NPTVBIWT15CkNPTkZJR19QSFlfTVZFQlVf
QTM3MDBfVVRNST15CiMgQ09ORklHX1BIWV9NVkVCVV9BMzhYX0NPTVBIWSBpcyBub3Qgc2V0CkNP
TkZJR19QSFlfTVZFQlVfQ1AxMTBfQ09NUEhZPXkKIyBDT05GSUdfUEhZX1BYQV8yOE5NX0hTSUMg
aXMgbm90IHNldAojIENPTkZJR19QSFlfUFhBXzI4Tk1fVVNCMiBpcyBub3Qgc2V0CiMgQ09ORklH
X1BIWV9NVEtfVFBIWSBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9NVEtfVUZTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUEhZX01US19YU1BIWSBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9NVEtfSERNSSBp
cyBub3Qgc2V0CiMgQ09ORklHX1BIWV9DUENBUF9VU0IgaXMgbm90IHNldAojIENPTkZJR19QSFlf
TUFQUEhPTkVfTURNNjYwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9PQ0VMT1RfU0VSREVTIGlz
IG5vdCBzZXQKIyBDT05GSUdfUEhZX1FDT01fQVBRODA2NF9TQVRBIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEhZX1FDT01fSVBRNDAxOV9VU0IgaXMgbm90IHNldAojIENPTkZJR19QSFlfUUNPTV9JUFE4
MDZYX1NBVEEgaXMgbm90IHNldAojIENPTkZJR19QSFlfUUNPTV9QQ0lFMiBpcyBub3Qgc2V0CkNP
TkZJR19QSFlfUUNPTV9RTVA9bQpDT05GSUdfUEhZX1FDT01fUVVTQjI9bQpDT05GSUdfUEhZX1FD
T01fVVNCX0hTPXkKIyBDT05GSUdfUEhZX1FDT01fVVNCX1NOUFNfRkVNVE9fVjIgaXMgbm90IHNl
dAojIENPTkZJR19QSFlfUUNPTV9VU0JfSFNJQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9RQ09N
X1VTQl9IU18yOE5NIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX1FDT01fVVNCX1NTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUEhZX1FDT01fSVBRODA2WF9VU0IgaXMgbm90IHNldAojIENPTkZJR19QSFlf
UkNBUl9HRU4yIGlzIG5vdCBzZXQKQ09ORklHX1BIWV9SQ0FSX0dFTjNfUENJRT15CkNPTkZJR19Q
SFlfUkNBUl9HRU4zX1VTQjI9eQpDT05GSUdfUEhZX1JDQVJfR0VOM19VU0IzPXkKIyBDT05GSUdf
UEhZX1JPQ0tDSElQX0RQIGlzIG5vdCBzZXQKIyBDT05GSUdfUEhZX1JPQ0tDSElQX0RQSFlfUlgw
IGlzIG5vdCBzZXQKQ09ORklHX1BIWV9ST0NLQ0hJUF9FTU1DPXkKQ09ORklHX1BIWV9ST0NLQ0hJ
UF9JTk5PX0hETUk9bQpDT05GSUdfUEhZX1JPQ0tDSElQX0lOTk9fVVNCMj15CiMgQ09ORklHX1BI
WV9ST0NLQ0hJUF9JTk5PX0RTSURQSFkgaXMgbm90IHNldApDT05GSUdfUEhZX1JPQ0tDSElQX1BD
SUU9bQpDT05GSUdfUEhZX1JPQ0tDSElQX1RZUEVDPXkKIyBDT05GSUdfUEhZX1JPQ0tDSElQX1VT
QiBpcyBub3Qgc2V0CkNPTkZJR19QSFlfRVhZTk9TX0RQX1ZJREVPPXkKQ09ORklHX1BIWV9FWFlO
T1NfTUlQSV9WSURFTz15CiMgQ09ORklHX1BIWV9FWFlOT1NfUENJRSBpcyBub3Qgc2V0CiMgQ09O
RklHX1BIWV9TQU1TVU5HX1VGUyBpcyBub3Qgc2V0CkNPTkZJR19QSFlfU0FNU1VOR19VU0IyPXkK
Q09ORklHX1BIWV9FWFlOT1M1X1VTQkRSRD15CkNPTkZJR19QSFlfVU5JUEhJRVJfVVNCMj15CkNP
TkZJR19QSFlfVU5JUEhJRVJfVVNCMz15CiMgQ09ORklHX1BIWV9VTklQSElFUl9QQ0lFIGlzIG5v
dCBzZXQKQ09ORklHX1BIWV9VTklQSElFUl9BSENJPXkKQ09ORklHX1BIWV9URUdSQV9YVVNCPXkK
Q09ORklHX1BIWV9URUdSQTE5NF9QMlU9bQojIENPTkZJR19QSFlfQU02NTRfU0VSREVTIGlzIG5v
dCBzZXQKIyBDT05GSUdfUEhZX0o3MjFFX1dJWiBpcyBub3Qgc2V0CiMgQ09ORklHX09NQVBfVVNC
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1BIWV9UVVNCMTIxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1BI
WV9JTlRFTF9LRUVNQkFZX0VNTUMgaXMgbm90IHNldAojIENPTkZJR19QSFlfWElMSU5YX1pZTlFN
UCBpcyBub3Qgc2V0CiMgZW5kIG9mIFBIWSBTdWJzeXN0ZW0KCiMgQ09ORklHX1BPV0VSQ0FQIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUNCIGlzIG5vdCBzZXQKCiMKIyBQZXJmb3JtYW5jZSBtb25pdG9y
IHN1cHBvcnQKIwojIENPTkZJR19BUk1fQ0NJX1BNVSBpcyBub3Qgc2V0CiMgQ09ORklHX0FSTV9D
Q04gaXMgbm90IHNldAojIENPTkZJR19BUk1fQ01OIGlzIG5vdCBzZXQKQ09ORklHX0FSTV9QTVU9
eQpDT05GSUdfQVJNX1BNVV9BQ1BJPXkKQ09ORklHX0FSTV9TTU1VX1YzX1BNVT1tCiMgQ09ORklH
X0FSTV9EU1VfUE1VIGlzIG5vdCBzZXQKQ09ORklHX0ZTTF9JTVg4X0REUl9QTVU9bQpDT05GSUdf
UUNPTV9MMl9QTVU9eQpDT05GSUdfUUNPTV9MM19QTVU9eQpDT05GSUdfVEhVTkRFUlgyX1BNVT1t
CiMgQ09ORklHX1hHRU5FX1BNVSBpcyBub3Qgc2V0CiMgQ09ORklHX0FSTV9TUEVfUE1VIGlzIG5v
dCBzZXQKQ09ORklHX0hJU0lfUE1VPXkKIyBlbmQgb2YgUGVyZm9ybWFuY2UgbW9uaXRvciBzdXBw
b3J0CgpDT05GSUdfUkFTPXkKIyBDT05GSUdfVVNCNCBpcyBub3Qgc2V0CgojCiMgQW5kcm9pZAoj
CiMgQ09ORklHX0FORFJPSUQgaXMgbm90IHNldAojIGVuZCBvZiBBbmRyb2lkCgojIENPTkZJR19M
SUJOVkRJTU0gaXMgbm90IHNldAojIENPTkZJR19EQVggaXMgbm90IHNldApDT05GSUdfTlZNRU09
eQpDT05GSUdfTlZNRU1fU1lTRlM9eQojIENPTkZJR19OVk1FTV9JTVhfSUlNIGlzIG5vdCBzZXQK
Q09ORklHX05WTUVNX0lNWF9PQ09UUD15CkNPTkZJR19OVk1FTV9JTVhfT0NPVFBfU0NVPXkKIyBD
T05GSUdfTVRLX0VGVVNFIGlzIG5vdCBzZXQKQ09ORklHX1FDT01fUUZQUk9NPXkKIyBDT05GSUdf
TlZNRU1fU1BNSV9TREFNIGlzIG5vdCBzZXQKQ09ORklHX1JPQ0tDSElQX0VGVVNFPXkKIyBDT05G
SUdfUk9DS0NISVBfT1RQIGlzIG5vdCBzZXQKQ09ORklHX05WTUVNX0JDTV9PQ09UUD15CkNPTkZJ
R19OVk1FTV9TVU5YSV9TSUQ9eQpDT05GSUdfVU5JUEhJRVJfRUZVU0U9eQpDT05GSUdfTUVTT05f
RUZVU0U9bQojIENPTkZJR19NRVNPTl9NWF9FRlVTRSBpcyBub3Qgc2V0CiMgQ09ORklHX05WTUVN
X1NOVlNfTFBHUFIgaXMgbm90IHNldAojIENPTkZJR19OVk1FTV9aWU5RTVAgaXMgbm90IHNldAoj
IENPTkZJR19TUFJEX0VGVVNFIGlzIG5vdCBzZXQKCiMKIyBIVyB0cmFjaW5nIHN1cHBvcnQKIwoj
IENPTkZJR19TVE0gaXMgbm90IHNldAojIENPTkZJR19JTlRFTF9USCBpcyBub3Qgc2V0CiMgZW5k
IG9mIEhXIHRyYWNpbmcgc3VwcG9ydAoKQ09ORklHX0ZQR0E9eQojIENPTkZJR19BTFRFUkFfUFJf
SVBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZQR0FfTUdSX0FMVEVSQV9QU19TUEkgaXMgbm90
IHNldAojIENPTkZJR19GUEdBX01HUl9BTFRFUkFfQ1ZQIGlzIG5vdCBzZXQKQ09ORklHX0ZQR0Ff
TUdSX1NUUkFUSVgxMF9TT0M9bQojIENPTkZJR19GUEdBX01HUl9YSUxJTlhfU1BJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRlBHQV9NR1JfSUNFNDBfU1BJIGlzIG5vdCBzZXQKIyBDT05GSUdfRlBHQV9N
R1JfTUFDSFhPMl9TUEkgaXMgbm90IHNldApDT05GSUdfRlBHQV9CUklER0U9bQpDT05GSUdfQUxU
RVJBX0ZSRUVaRV9CUklER0U9bQojIENPTkZJR19YSUxJTlhfUFJfREVDT1VQTEVSIGlzIG5vdCBz
ZXQKQ09ORklHX0ZQR0FfUkVHSU9OPW0KQ09ORklHX09GX0ZQR0FfUkVHSU9OPW0KIyBDT05GSUdf
RlBHQV9ERkwgaXMgbm90IHNldAojIENPTkZJR19GUEdBX01HUl9aWU5RTVBfRlBHQSBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZTSSBpcyBub3Qgc2V0CkNPTkZJR19URUU9eQoKIwojIFRFRSBkcml2ZXJz
CiMKQ09ORklHX09QVEVFPXkKQ09ORklHX09QVEVFX1NITV9OVU1fUFJJVl9QQUdFUz0xCiMgZW5k
IG9mIFRFRSBkcml2ZXJzCgpDT05GSUdfTVVMVElQTEVYRVI9eQoKIwojIE11bHRpcGxleGVyIGRy
aXZlcnMKIwojIENPTkZJR19NVVhfQURHNzkyQSBpcyBub3Qgc2V0CiMgQ09ORklHX01VWF9BREdT
MTQwOCBpcyBub3Qgc2V0CiMgQ09ORklHX01VWF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX01VWF9N
TUlPPXkKIyBlbmQgb2YgTXVsdGlwbGV4ZXIgZHJpdmVycwoKQ09ORklHX1BNX09QUD15CiMgQ09O
RklHX1NJT1ggaXMgbm90IHNldApDT05GSUdfU0xJTUJVUz1tCkNPTkZJR19TTElNX1FDT01fQ1RS
TD1tCkNPTkZJR19TTElNX1FDT01fTkdEX0NUUkw9bQpDT05GSUdfSU5URVJDT05ORUNUPXkKIyBD
T05GSUdfSU5URVJDT05ORUNUX0lNWCBpcyBub3Qgc2V0CkNPTkZJR19JTlRFUkNPTk5FQ1RfUUNP
TT15CkNPTkZJR19JTlRFUkNPTk5FQ1RfUUNPTV9CQ01fVk9URVI9bQojIENPTkZJR19JTlRFUkNP
Tk5FQ1RfUUNPTV9NU004OTE2IGlzIG5vdCBzZXQKIyBDT05GSUdfSU5URVJDT05ORUNUX1FDT01f
TVNNODk3NCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSQ09OTkVDVF9RQ09NX09TTV9MMyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOVEVSQ09OTkVDVF9RQ09NX1FDUzQwNCBpcyBub3Qgc2V0CkNPTkZJ
R19JTlRFUkNPTk5FQ1RfUUNPTV9SUE1IPW0KIyBDT05GSUdfSU5URVJDT05ORUNUX1FDT01fU0M3
MTgwIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVSQ09OTkVDVF9RQ09NX1NETTg0NT1tCiMgQ09ORklH
X0lOVEVSQ09OTkVDVF9RQ09NX1NNODE1MCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSQ09OTkVD
VF9RQ09NX1NNODI1MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NPVU5URVIgaXMgbm90IHNldAojIENP
TkZJR19NT1NUIGlzIG5vdCBzZXQKIyBlbmQgb2YgRGV2aWNlIERyaXZlcnMKCiMKIyBGaWxlIHN5
c3RlbXMKIwpDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTPXkKIyBDT05GSUdfVkFMSURBVEVfRlNf
UEFSU0VSIGlzIG5vdCBzZXQKQ09ORklHX0ZTX0lPTUFQPXkKQ09ORklHX0VYVDJfRlM9eQojIENP
TkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKQ09ORklHX0VYVDNfRlM9eQojIENPTkZJR19F
WFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMg
bm90IHNldApDT05GSUdfRVhUNF9GUz15CkNPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CiMgQ09O
RklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAojIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5v
dCBzZXQKQ09ORklHX0pCRDI9eQojIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X0ZTX01CQ0FDSEU9eQojIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0pG
U19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0dGUzJf
RlMgaXMgbm90IHNldAojIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CkNPTkZJR19CVFJGU19G
Uz1tCkNPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQojIENPTkZJR19CVFJGU19GU19DSEVDS19J
TlRFR1JJVFkgaXMgbm90IHNldAojIENPTkZJR19CVFJGU19GU19SVU5fU0FOSVRZX1RFU1RTIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlRSRlNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19CVFJGU19B
U1NFUlQgaXMgbm90IHNldAojIENPTkZJR19CVFJGU19GU19SRUZfVkVSSUZZIGlzIG5vdCBzZXQK
IyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRjJGU19GUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0ZTX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19GU19QT1NJWF9BQ0w9eQpDT05GSUdf
RVhQT1JURlM9eQojIENPTkZJR19FWFBPUlRGU19CTE9DS19PUFMgaXMgbm90IHNldApDT05GSUdf
RklMRV9MT0NLSU5HPXkKQ09ORklHX01BTkRBVE9SWV9GSUxFX0xPQ0tJTkc9eQojIENPTkZJR19G
U19FTkNSWVBUSU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRlNfVkVSSVRZIGlzIG5vdCBzZXQKQ09O
RklHX0ZTTk9USUZZPXkKQ09ORklHX0ROT1RJRlk9eQpDT05GSUdfSU5PVElGWV9VU0VSPXkKQ09O
RklHX0ZBTk9USUZZPXkKQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUz15CkNPTkZJ
R19RVU9UQT15CiMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKQ09O
RklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQojIENPTkZJR19RVU9UQV9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAojIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQK
Q09ORklHX1FVT1RBQ1RMPXkKQ09ORklHX0FVVE9GUzRfRlM9eQpDT05GSUdfQVVUT0ZTX0ZTPXkK
Q09ORklHX0ZVU0VfRlM9bQpDT05GSUdfQ1VTRT1tCiMgQ09ORklHX1ZJUlRJT19GUyBpcyBub3Qg
c2V0CkNPTkZJR19PVkVSTEFZX0ZTPW0KIyBDT05GSUdfT1ZFUkxBWV9GU19SRURJUkVDVF9ESVIg
aXMgbm90IHNldApDT05GSUdfT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XPXkKIyBD
T05GSUdfT1ZFUkxBWV9GU19JTkRFWCBpcyBub3Qgc2V0CiMgQ09ORklHX09WRVJMQVlfRlNfWElO
T19BVVRPIGlzIG5vdCBzZXQKIyBDT05GSUdfT1ZFUkxBWV9GU19NRVRBQ09QWSBpcyBub3Qgc2V0
CgojCiMgQ2FjaGVzCiMKIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiMgZW5kIG9mIENhY2hl
cwoKIwojIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKIwojIENPTkZJR19JU085NjYwX0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ0QtUk9NL0RWRCBGaWxl
c3lzdGVtcwoKIwojIERPUy9GQVQvRVhGQVQvTlQgRmlsZXN5c3RlbXMKIwpDT05GSUdfRkFUX0ZT
PXkKIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldApDT05GSUdfVkZBVF9GUz15CkNPTkZJR19G
QVRfREVGQVVMVF9DT0RFUEFHRT00MzcKQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNv
ODg1OS0xIgojIENPTkZJR19GQVRfREVGQVVMVF9VVEY4IGlzIG5vdCBzZXQKIyBDT05GSUdfRVhG
QVRfRlMgaXMgbm90IHNldAojIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIyBlbmQgb2YgRE9T
L0ZBVC9FWEZBVC9OVCBGaWxlc3lzdGVtcwoKIwojIFBzZXVkbyBmaWxlc3lzdGVtcwojCkNPTkZJ
R19QUk9DX0ZTPXkKIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CkNPTkZJR19QUk9DX1ZN
Q09SRT15CiMgQ09ORklHX1BST0NfVk1DT1JFX0RFVklDRV9EVU1QIGlzIG5vdCBzZXQKQ09ORklH
X1BST0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIyBDT05GSUdfUFJPQ19D
SElMRFJFTiBpcyBub3Qgc2V0CkNPTkZJR19LRVJORlM9eQpDT05GSUdfU1lTRlM9eQpDT05GSUdf
VE1QRlM9eQojIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAojIENPTkZJR19UTVBG
U19YQVRUUiBpcyBub3Qgc2V0CiMgQ09ORklHX1RNUEZTX0lOT0RFNjQgaXMgbm90IHNldApDT05G
SUdfSFVHRVRMQkZTPXkKQ09ORklHX0hVR0VUTEJfUEFHRT15CkNPTkZJR19NRU1GRF9DUkVBVEU9
eQpDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRT15CkNPTkZJR19DT05GSUdGU19GUz15CkNP
TkZJR19FRklWQVJfRlM9eQojIGVuZCBvZiBQc2V1ZG8gZmlsZXN5c3RlbXMKCkNPTkZJR19NSVND
X0ZJTEVTWVNURU1TPXkKIyBDT05GSUdfT1JBTkdFRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19B
REZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VD
UllQVF9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0hG
U1BMVVNfRlMgaXMgbm90IHNldAojIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdf
QkZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfSkZG
UzJfRlMgaXMgbm90IHNldAojIENPTkZJR19DUkFNRlMgaXMgbm90IHNldApDT05GSUdfU1FVQVNI
RlM9eQpDT05GSUdfU1FVQVNIRlNfRklMRV9DQUNIRT15CiMgQ09ORklHX1NRVUFTSEZTX0ZJTEVf
RElSRUNUIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9TSU5HTEU9eQojIENPTkZJ
R19TUVVBU0hGU19ERUNPTVBfTVVMVEkgaXMgbm90IHNldAojIENPTkZJR19TUVVBU0hGU19ERUNP
TVBfTVVMVElfUEVSQ1BVIGlzIG5vdCBzZXQKIyBDT05GSUdfU1FVQVNIRlNfWEFUVFIgaXMgbm90
IHNldApDT05GSUdfU1FVQVNIRlNfWkxJQj15CiMgQ09ORklHX1NRVUFTSEZTX0xaNCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NRVUFTSEZTX0xaTyBpcyBub3Qgc2V0CiMgQ09ORklHX1NRVUFTSEZTX1ha
IGlzIG5vdCBzZXQKIyBDT05GSUdfU1FVQVNIRlNfWlNURCBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTXzRLX0RFVkJMS19TSVpFIGlzIG5vdCBzZXQKIyBDT05GSUdfU1FVQVNIRlNfRU1CRURE
RUQgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiMgQ09O
RklHX1ZYRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiMgQ09O
RklHX09NRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfUU5YNkZTX0ZTIGlzIG5vdCBzZXQKIyBD
T05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApDT05GSUdfUFNUT1JFPXkKQ09ORklHX1BTVE9SRV9E
RUZMQVRFX0NPTVBSRVNTPXkKIyBDT05GSUdfUFNUT1JFX0xaT19DT01QUkVTUyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BTVE9SRV9MWjRfQ09NUFJFU1MgaXMgbm90IHNldAojIENPTkZJR19QU1RPUkVf
TFo0SENfQ09NUFJFU1MgaXMgbm90IHNldAojIENPTkZJR19QU1RPUkVfODQyX0NPTVBSRVNTIGlz
IG5vdCBzZXQKIyBDT05GSUdfUFNUT1JFX1pTVERfQ09NUFJFU1MgaXMgbm90IHNldApDT05GSUdf
UFNUT1JFX0NPTVBSRVNTPXkKQ09ORklHX1BTVE9SRV9ERUZMQVRFX0NPTVBSRVNTX0RFRkFVTFQ9
eQpDT05GSUdfUFNUT1JFX0NPTVBSRVNTX0RFRkFVTFQ9ImRlZmxhdGUiCiMgQ09ORklHX1BTVE9S
RV9DT05TT0xFIGlzIG5vdCBzZXQKIyBDT05GSUdfUFNUT1JFX1BNU0cgaXMgbm90IHNldAojIENP
TkZJR19QU1RPUkVfUkFNIGlzIG5vdCBzZXQKIyBDT05GSUdfUFNUT1JFX0JMSyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAojIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAoj
IENPTkZJR19FUk9GU19GUyBpcyBub3Qgc2V0CkNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkK
Q09ORklHX05GU19GUz15CkNPTkZJR19ORlNfVjI9eQpDT05GSUdfTkZTX1YzPXkKIyBDT05GSUdf
TkZTX1YzX0FDTCBpcyBub3Qgc2V0CkNPTkZJR19ORlNfVjQ9eQojIENPTkZJR19ORlNfU1dBUCBp
cyBub3Qgc2V0CkNPTkZJR19ORlNfVjRfMT15CkNPTkZJR19ORlNfVjRfMj15CkNPTkZJR19QTkZT
X0ZJTEVfTEFZT1VUPXkKQ09ORklHX1BORlNfQkxPQ0s9bQpDT05GSUdfUE5GU19GTEVYRklMRV9M
QVlPVVQ9bQpDT05GSUdfTkZTX1Y0XzFfSU1QTEVNRU5UQVRJT05fSURfRE9NQUlOPSJrZXJuZWwu
b3JnIgojIENPTkZJR19ORlNfVjRfMV9NSUdSQVRJT04gaXMgbm90IHNldApDT05GSUdfTkZTX1Y0
X1NFQ1VSSVRZX0xBQkVMPXkKQ09ORklHX1JPT1RfTkZTPXkKIyBDT05GSUdfTkZTX1VTRV9MRUdB
Q1lfRE5TIGlzIG5vdCBzZXQKQ09ORklHX05GU19VU0VfS0VSTkVMX0ROUz15CkNPTkZJR19ORlNf
RElTQUJMRV9VRFBfU1VQUE9SVD15CiMgQ09ORklHX05GU0QgaXMgbm90IHNldApDT05GSUdfR1JB
Q0VfUEVSSU9EPXkKQ09ORklHX0xPQ0tEPXkKQ09ORklHX0xPQ0tEX1Y0PXkKQ09ORklHX05GU19D
T01NT049eQpDT05GSUdfU1VOUlBDPXkKQ09ORklHX1NVTlJQQ19HU1M9eQpDT05GSUdfU1VOUlBD
X0JBQ0tDSEFOTkVMPXkKIyBDT05GSUdfU1VOUlBDX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdf
Q0VQSF9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NJRlMgaXMgbm90IHNldAojIENPTkZJR19DT0RB
X0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQ09ORklHXzlQX0ZTPXkK
IyBDT05GSUdfOVBfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIyBDT05GSUdfOVBfRlNfU0VDVVJJ
VFkgaXMgbm90IHNldApDT05GSUdfTkxTPXkKQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEi
CkNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBu
b3Qgc2V0CiMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAojIENPTkZJR19OTFNf
Q09ERVBBR0VfODUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qg
c2V0CiMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09E
RVBBR0VfODU3IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0
CiMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBB
R0VfODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CiMg
Q09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0Vf
ODY1IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CiMgQ09O
RklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CiMgQ09ORklH
X05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlz
IG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CiMgQ09ORklHX05M
U19JU084ODU5XzggaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qg
c2V0CiMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0FT
Q0lJIGlzIG5vdCBzZXQKQ09ORklHX05MU19JU084ODU5XzE9eQojIENPTkZJR19OTFNfSVNPODg1
OV8yIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiMgQ09ORklH
X05MU19JU084ODU5XzQgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19JU084ODU5
XzcgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKIyBDT05GSUdf
TkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qg
c2V0CiMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0tPSThf
UiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAojIENPTkZJR19OTFNf
TUFDX1JPTUFOIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19DRUxUSUMgaXMgbm90IHNldAoj
IENPTkZJR19OTFNfTUFDX0NFTlRFVVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19DUk9B
VElBTiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19NQUNfQ1lSSUxMSUMgaXMgbm90IHNldAojIENP
TkZJR19OTFNfTUFDX0dBRUxJQyBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19NQUNfR1JFRUsgaXMg
bm90IHNldAojIENPTkZJR19OTFNfTUFDX0lDRUxBTkQgaXMgbm90IHNldAojIENPTkZJR19OTFNf
TUFDX0lOVUlUIGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX01BQ19ST01BTklBTiBpcyBub3Qgc2V0
CiMgQ09ORklHX05MU19NQUNfVFVSS0lTSCBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19VVEY4IGlz
IG5vdCBzZXQKIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIyBDT05GSUdfVU5JQ09ERSBpcyBub3Qg
c2V0CkNPTkZJR19JT19XUT15CiMgZW5kIG9mIEZpbGUgc3lzdGVtcwoKIwojIFNlY3VyaXR5IG9w
dGlvbnMKIwpDT05GSUdfS0VZUz15CiMgQ09ORklHX0tFWVNfUkVRVUVTVF9DQUNIRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1BFUlNJU1RFTlRfS0VZUklOR1MgaXMgbm90IHNldAojIENPTkZJR19UUlVT
VEVEX0tFWVMgaXMgbm90IHNldAojIENPTkZJR19FTkNSWVBURURfS0VZUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0tFWV9ESF9PUEVSQVRJT05TIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfRE1F
U0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFk9eQpDT05GSUdfU0VDVVJJVFlG
Uz15CiMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAojIENPTkZJR19TRUNVUklU
WV9QQVRIIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfSEFSREVORURfVVNFUkNPUFlfQUxMT0NBVE9S
PXkKIyBDT05GSUdfSEFSREVORURfVVNFUkNPUFkgaXMgbm90IHNldAojIENPTkZJR19GT1JUSUZZ
X1NPVVJDRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NUQVRJQ19VU0VSTU9ERUhFTFBFUiBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlf
VE9NT1lPIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IgaXMgbm90IHNldAoj
IENPTkZJR19TRUNVUklUWV9MT0FEUElOIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfWUFN
QSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NBRkVTRVRJRCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFQ1VSSVRZX0xPQ0tET1dOX0xTTSBpcyBub3Qgc2V0CkNPTkZJR19JTlRFR1JJVFk9eQoj
IENPTkZJR19JTlRFR1JJVFlfU0lHTkFUVVJFIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVHUklUWV9B
VURJVD15CiMgQ09ORklHX0lNQSBpcyBub3Qgc2V0CiMgQ09ORklHX0VWTSBpcyBub3Qgc2V0CkNP
TkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CkNPTkZJR19MU009ImxvY2tkb3duLHlhbWEsbG9h
ZHBpbixzYWZlc2V0aWQsaW50ZWdyaXR5LGJwZiIKCiMKIyBLZXJuZWwgaGFyZGVuaW5nIG9wdGlv
bnMKIwoKIwojIE1lbW9yeSBpbml0aWFsaXphdGlvbgojCkNPTkZJR19JTklUX1NUQUNLX05PTkU9
eQojIENPTkZJR19JTklUX09OX0FMTE9DX0RFRkFVTFRfT04gaXMgbm90IHNldAojIENPTkZJR19J
TklUX09OX0ZSRUVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiMgZW5kIG9mIE1lbW9yeSBpbml0aWFs
aXphdGlvbgojIGVuZCBvZiBLZXJuZWwgaGFyZGVuaW5nIG9wdGlvbnMKIyBlbmQgb2YgU2VjdXJp
dHkgb3B0aW9ucwoKQ09ORklHX1hPUl9CTE9DS1M9bQpDT05GSUdfQVNZTkNfVFhfRElTQUJMRV9Q
UV9WQUxfRE1BPXkKQ09ORklHX0FTWU5DX1RYX0RJU0FCTEVfWE9SX1ZBTF9ETUE9eQpDT05GSUdf
Q1JZUFRPPXkKCiMKIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKIwpDT05GSUdfQ1JZUFRPX0FMR0FQ
ST15CkNPTkZJR19DUllQVE9fQUxHQVBJMj15CkNPTkZJR19DUllQVE9fQUVBRD15CkNPTkZJR19D
UllQVE9fQUVBRDI9eQpDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSPXkKQ09ORklHX0NSWVBUT19TS0NJ
UEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdfQ1JZUFRPX0hBU0gyPXkKQ09ORklH
X0NSWVBUT19STkc9eQpDT05GSUdfQ1JZUFRPX1JORzI9eQpDT05GSUdfQ1JZUFRPX1JOR19ERUZB
VUxUPXkKQ09ORklHX0NSWVBUT19BS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0FLQ0lQSEVSPXkK
Q09ORklHX0NSWVBUT19LUFAyPXkKQ09ORklHX0NSWVBUT19LUFA9bQpDT05GSUdfQ1JZUFRPX0FD
T01QMj15CkNPTkZJR19DUllQVE9fTUFOQUdFUj15CkNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQoj
IENPTkZJR19DUllQVE9fVVNFUiBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNB
QkxFX1RFU1RTPXkKQ09ORklHX0NSWVBUT19HRjEyOE1VTD15CkNPTkZJR19DUllQVE9fTlVMTD15
CkNPTkZJR19DUllQVE9fTlVMTDI9eQojIENPTkZJR19DUllQVE9fUENSWVBUIGlzIG5vdCBzZXQK
Q09ORklHX0NSWVBUT19DUllQVEQ9eQpDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQojIENPTkZJR19D
UllQVE9fVEVTVCBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fU0lNRD15CkNPTkZJR19DUllQVE9f
RU5HSU5FPXkKCiMKIyBQdWJsaWMta2V5IGNyeXB0b2dyYXBoeQojCkNPTkZJR19DUllQVE9fUlNB
PXkKQ09ORklHX0NSWVBUT19ESD1tCkNPTkZJR19DUllQVE9fRUNDPW0KQ09ORklHX0NSWVBUT19F
Q0RIPW0KIyBDT05GSUdfQ1JZUFRPX0VDUkRTQSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19T
TTIgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fQ1VSVkUyNTUxOSBpcyBub3Qgc2V0CgojCiMg
QXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCiMKQ09ORklHX0NS
WVBUT19DQ009bQpDT05GSUdfQ1JZUFRPX0dDTT1tCiMgQ09ORklHX0NSWVBUT19DSEFDSEEyMFBP
TFkxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0FFR0lTMTI4IGlzIG5vdCBzZXQKQ09O
RklHX0NSWVBUT19TRVFJVj1tCkNPTkZJR19DUllQVE9fRUNIQUlOSVY9eQoKIwojIEJsb2NrIG1v
ZGVzCiMKQ09ORklHX0NSWVBUT19DQkM9eQojIENPTkZJR19DUllQVE9fQ0ZCIGlzIG5vdCBzZXQK
Q09ORklHX0NSWVBUT19DVFI9bQojIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKQ09ORklH
X0NSWVBUT19FQ0I9eQojIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX09GQiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKQ09ORklH
X0NSWVBUT19YVFM9bQojIENPTkZJR19DUllQVE9fS0VZV1JBUCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSWVBUT19BRElBTlRVTSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19FU1NJViBpcyBub3Qg
c2V0CgojCiMgSGFzaCBtb2RlcwojCkNPTkZJR19DUllQVE9fQ01BQz1tCkNPTkZJR19DUllQVE9f
SE1BQz15CiMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1ZN
QUMgaXMgbm90IHNldAoKIwojIERpZ2VzdAojCkNPTkZJR19DUllQVE9fQ1JDMzJDPXkKIyBDT05G
SUdfQ1JZUFRPX0NSQzMyIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19YWEhBU0g9bQpDT05GSUdf
Q1JZUFRPX0JMQUtFMkI9bQojIENPTkZJR19DUllQVE9fQkxBS0UyUyBpcyBub3Qgc2V0CkNPTkZJ
R19DUllQVE9fQ1JDVDEwRElGPXkKQ09ORklHX0NSWVBUT19HSEFTSD1tCiMgQ09ORklHX0NSWVBU
T19QT0xZMTMwNSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldApDT05G
SUdfQ1JZUFRPX01ENT1tCiMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiMg
Q09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fUk1EMTYwIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBU
T19STUQzMjAgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX1NIQTE9eQpDT05GSUdfQ1JZUFRPX1NI
QTI1Nj15CkNPTkZJR19DUllQVE9fU0hBNTEyPW0KQ09ORklHX0NSWVBUT19TSEEzPW0KQ09ORklH
X0NSWVBUT19TTTM9bQojIENPTkZJR19DUllQVE9fU1RSRUVCT0cgaXMgbm90IHNldAojIENPTkZJ
R19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBz
ZXQKCiMKIyBDaXBoZXJzCiMKQ09ORklHX0NSWVBUT19BRVM9eQojIENPTkZJR19DUllQVE9fQUVT
X1RJIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0NB
U1Q1IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKQ09ORklHX0NS
WVBUT19ERVM9bQojIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0tIQVpBRCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQK
Q09ORklHX0NSWVBUT19DSEFDSEEyMD1tCiMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX1NNND1tCiMg
Q09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBu
b3Qgc2V0CgojCiMgQ29tcHJlc3Npb24KIwpDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQojIENPTkZJ
R19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPXzg0MiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NSWVBUT19MWjQgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTFo0SEMgaXMgbm90
IHNldAojIENPTkZJR19DUllQVE9fWlNURCBpcyBub3Qgc2V0CgojCiMgUmFuZG9tIE51bWJlciBH
ZW5lcmF0aW9uCiMKQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPXkKQ09ORklHX0NSWVBUT19EUkJH
X01FTlU9eQpDT05GSUdfQ1JZUFRPX0RSQkdfSE1BQz15CiMgQ09ORklHX0NSWVBUT19EUkJHX0hB
U0ggaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fRFJCR19DVFIgaXMgbm90IHNldApDT05GSUdf
Q1JZUFRPX0RSQkc9eQpDT05GSUdfQ1JZUFRPX0pJVFRFUkVOVFJPUFk9eQpDT05GSUdfQ1JZUFRP
X1VTRVJfQVBJPW0KIyBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0ggaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVIgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX1VT
RVJfQVBJX1JORz1tCiMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9STkdfQ0FWUCBpcyBub3Qgc2V0
CiMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9BRUFEIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19V
U0VSX0FQSV9FTkFCTEVfT0JTT0xFVEU9eQpDT05GSUdfQ1JZUFRPX0hBU0hfSU5GTz15CgojCiMg
Q3J5cHRvIGxpYnJhcnkgcm91dGluZXMKIwpDT05GSUdfQ1JZUFRPX0xJQl9BRVM9eQpDT05GSUdf
Q1JZUFRPX0xJQl9BUkM0PW0KIyBDT05GSUdfQ1JZUFRPX0xJQl9CTEFLRTJTIGlzIG5vdCBzZXQK
Q09ORklHX0NSWVBUT19BUkNIX0hBVkVfTElCX0NIQUNIQT1tCkNPTkZJR19DUllQVE9fTElCX0NI
QUNIQV9HRU5FUklDPW0KIyBDT05GSUdfQ1JZUFRPX0xJQl9DSEFDSEEgaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fTElCX0NVUlZFMjU1MTkgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0xJQl9E
RVM9bQpDT05GSUdfQ1JZUFRPX0xJQl9QT0xZMTMwNV9SU0laRT05CiMgQ09ORklHX0NSWVBUT19M
SUJfUE9MWTEzMDUgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTElCX0NIQUNIQTIwUE9MWTEz
MDUgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0xJQl9TSEEyNTY9eQpDT05GSUdfQ1JZUFRPX0hX
PXkKQ09ORklHX0NSWVBUT19ERVZfQUxMV0lOTkVSPXkKIyBDT05GSUdfQ1JZUFRPX0RFVl9TVU40
SV9TUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfU1VOOElfQ0UgaXMgbm90IHNldAoj
IENPTkZJR19DUllQVE9fREVWX1NVTjhJX1NTIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19ERVZf
RlNMX0NBQU1fQ09NTU9OPW0KQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fQ1JZUFRPX0FQSV9E
RVNDPW0KQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fQUhBU0hfQVBJX0RFU0M9bQpDT05GSUdf
Q1JZUFRPX0RFVl9GU0xfQ0FBTT1tCiMgQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fREVCVUcg
aXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTV9KUj1tCkNPTkZJR19DUllQVE9f
REVWX0ZTTF9DQUFNX1JJTkdTSVpFPTkKIyBDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTV9JTlRD
IGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fQ1JZUFRPX0FQST15CkNPTkZJ
R19DUllQVE9fREVWX0ZTTF9DQUFNX0NSWVBUT19BUElfUUk9eQpDT05GSUdfQ1JZUFRPX0RFVl9G
U0xfQ0FBTV9BSEFTSF9BUEk9eQpDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTV9QS0NfQVBJPXkK
Q09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fUk5HX0FQST15CkNPTkZJR19DUllQVE9fREVWX0ZT
TF9EUEFBMl9DQUFNPW0KIyBDT05GSUdfQ1JZUFRPX0RFVl9TQUhBUkEgaXMgbm90IHNldAojIENP
TkZJR19DUllQVE9fREVWX0VYWU5PU19STkcgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVW
X1M1UCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfRUNDIGlzIG5vdCBzZXQK
IyBDT05GSUdfQ1JZUFRPX0RFVl9BVE1FTF9TSEEyMDRBIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0RFVl9DQ1AgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVWX01YU19EQ1AgaXMgbm90
IHNldAojIENPTkZJR19DQVZJVU1fQ1BUIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RFVl9O
SVRST1hfQ05ONTVYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfTUFSVkVMTF9DRVNB
IGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RFVl9PQ1RFT05UWF9DUFQgaXMgbm90IHNldAoj
IENPTkZJR19DUllQVE9fREVWX0NBVklVTV9aSVAgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9f
REVWX1FDRSBpcyBub3Qgc2V0CkNPTkZJR19DUllQVE9fREVWX1FDT01fUk5HPW0KIyBDT05GSUdf
Q1JZUFRPX0RFVl9ST0NLQ0hJUCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfWllOUU1Q
X0FFUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19ERVZfVklSVElPIGlzIG5vdCBzZXQKQ09O
RklHX0NSWVBUT19ERVZfQkNNX1NQVT1tCiMgQ09ORklHX0NSWVBUT19ERVZfU0FGRVhDRUwgaXMg
bm90IHNldApDT05GSUdfQ1JZUFRPX0RFVl9DQ1JFRT1tCiMgQ09ORklHX0NSWVBUT19ERVZfSElT
SV9TRUMgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fREVWX0hJU0lfU0VDMiBpcyBub3Qgc2V0
CkNPTkZJR19DUllQVE9fREVWX0hJU0lfUU09bQpDT05GSUdfQ1JZUFRPX0RFVl9ISVNJX1pJUD1t
CiMgQ09ORklHX0NSWVBUT19ERVZfSElTSV9IUFJFIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19E
RVZfQU1MT0dJQ19HWEw9eQojIENPTkZJR19DUllQVE9fREVWX0FNTE9HSUNfR1hMX0RFQlVHIGlz
IG5vdCBzZXQKIyBDT05GSUdfQ1JZUFRPX0RFVl9TQTJVTCBpcyBub3Qgc2V0CkNPTkZJR19BU1lN
TUVUUklDX0tFWV9UWVBFPXkKQ09ORklHX0FTWU1NRVRSSUNfUFVCTElDX0tFWV9TVUJUWVBFPXkK
Q09ORklHX1g1MDlfQ0VSVElGSUNBVEVfUEFSU0VSPXkKIyBDT05GSUdfUEtDUzhfUFJJVkFURV9L
RVlfUEFSU0VSIGlzIG5vdCBzZXQKQ09ORklHX1BLQ1M3X01FU1NBR0VfUEFSU0VSPXkKIyBDT05G
SUdfUEtDUzdfVEVTVF9LRVkgaXMgbm90IHNldAojIENPTkZJR19TSUdORURfUEVfRklMRV9WRVJJ
RklDQVRJT04gaXMgbm90IHNldAoKIwojIENlcnRpZmljYXRlcyBmb3Igc2lnbmF0dXJlIGNoZWNr
aW5nCiMKQ09ORklHX1NZU1RFTV9UUlVTVEVEX0tFWVJJTkc9eQpDT05GSUdfU1lTVEVNX1RSVVNU
RURfS0VZUz0iIgojIENPTkZJR19TWVNURU1fRVhUUkFfQ0VSVElGSUNBVEUgaXMgbm90IHNldAoj
IENPTkZJR19TRUNPTkRBUllfVFJVU1RFRF9LRVlSSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfU1lT
VEVNX0JMQUNLTElTVF9LRVlSSU5HIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ2VydGlmaWNhdGVzIGZv
ciBzaWduYXR1cmUgY2hlY2tpbmcKCkNPTkZJR19CSU5BUllfUFJJTlRGPXkKCiMKIyBMaWJyYXJ5
IHJvdXRpbmVzCiMKQ09ORklHX1JBSUQ2X1BRPW0KQ09ORklHX1JBSUQ2X1BRX0JFTkNITUFSSz15
CkNPTkZJR19MSU5FQVJfUkFOR0VTPXkKQ09ORklHX1BBQ0tJTkc9eQpDT05GSUdfQklUUkVWRVJT
RT15CkNPTkZJR19IQVZFX0FSQ0hfQklUUkVWRVJTRT15CkNPTkZJR19HRU5FUklDX1NUUk5DUFlf
RlJPTV9VU0VSPXkKQ09ORklHX0dFTkVSSUNfU1RSTkxFTl9VU0VSPXkKQ09ORklHX0dFTkVSSUNf
TkVUX1VUSUxTPXkKIyBDT05GSUdfQ09SRElDIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJJTUVfTlVN
QkVSUyBpcyBub3Qgc2V0CkNPTkZJR19SQVRJT05BTD15CkNPTkZJR19HRU5FUklDX1BDSV9JT01B
UD15CkNPTkZJR19BUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUY9eQpDT05GSUdfQVJDSF9IQVNfRkFT
VF9NVUxUSVBMSUVSPXkKQ09ORklHX0FSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OUz15CkNPTkZJR19J
TkRJUkVDVF9QSU89eQpDT05GSUdfQ1JDX0NDSVRUPW0KQ09ORklHX0NSQzE2PXkKQ09ORklHX0NS
Q19UMTBESUY9eQpDT05GSUdfQ1JDX0lUVV9UPXkKQ09ORklHX0NSQzMyPXkKIyBDT05GSUdfQ1JD
MzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdfQ1JDMzJfU0xJQ0VCWTg9eQojIENPTkZJR19D
UkMzMl9TTElDRUJZNCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzMyX1NBUldBVEUgaXMgbm90IHNl
dAojIENPTkZJR19DUkMzMl9CSVQgaXMgbm90IHNldAojIENPTkZJR19DUkM2NCBpcyBub3Qgc2V0
CiMgQ09ORklHX0NSQzQgaXMgbm90IHNldApDT05GSUdfQ1JDNz15CkNPTkZJR19MSUJDUkMzMkM9
bQojIENPTkZJR19DUkM4IGlzIG5vdCBzZXQKQ09ORklHX1hYSEFTSD15CkNPTkZJR19BVURJVF9H
RU5FUklDPXkKQ09ORklHX0FVRElUX0FSQ0hfQ09NUEFUX0dFTkVSSUM9eQpDT05GSUdfQVVESVRf
Q09NUEFUX0dFTkVSSUM9eQojIENPTkZJR19SQU5ET00zMl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNP
TkZJR19aTElCX0lORkxBVEU9eQpDT05GSUdfWkxJQl9ERUZMQVRFPXkKQ09ORklHX0xaT19DT01Q
UkVTUz15CkNPTkZJR19MWk9fREVDT01QUkVTUz15CkNPTkZJR19MWjRfREVDT01QUkVTUz15CkNP
TkZJR19aU1REX0NPTVBSRVNTPW0KQ09ORklHX1pTVERfREVDT01QUkVTUz15CkNPTkZJR19YWl9E
RUM9eQpDT05GSUdfWFpfREVDX1g4Nj15CkNPTkZJR19YWl9ERUNfUE9XRVJQQz15CkNPTkZJR19Y
Wl9ERUNfSUE2ND15CkNPTkZJR19YWl9ERUNfQVJNPXkKQ09ORklHX1haX0RFQ19BUk1USFVNQj15
CkNPTkZJR19YWl9ERUNfU1BBUkM9eQpDT05GSUdfWFpfREVDX0JDSj15CiMgQ09ORklHX1haX0RF
Q19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CkNPTkZJR19ERUNPTVBS
RVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNPTkZJR19ERUNPTVBSRVNTX1ha
PXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RFQ09NUFJFU1NfTFo0PXkKQ09ORklH
X0RFQ09NUFJFU1NfWlNURD15CkNPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CkNPTkZJR19JTlRF
UlZBTF9UUkVFPXkKQ09ORklHX1hBUlJBWV9NVUxUST15CkNPTkZJR19BU1NPQ0lBVElWRV9BUlJB
WT15CkNPTkZJR19IQVNfSU9NRU09eQpDT05GSUdfSEFTX0lPUE9SVF9NQVA9eQpDT05GSUdfSEFT
X0RNQT15CkNPTkZJR19ETUFfT1BTPXkKQ09ORklHX05FRURfU0dfRE1BX0xFTkdUSD15CkNPTkZJ
R19ORUVEX0RNQV9NQVBfU1RBVEU9eQpDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUPXkKQ09O
RklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UPXkKQ09ORklHX0FSQ0hfSEFTX1NFVFVQX0RNQV9PUFM9
eQpDT05GSUdfQVJDSF9IQVNfVEVBUkRPV05fRE1BX09QUz15CkNPTkZJR19BUkNIX0hBU19TWU5D
X0RNQV9GT1JfREVWSUNFPXkKQ09ORklHX0FSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFU9eQpDT05G
SUdfQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlQ9eQpDT05GSUdfU1dJT1RMQj15CkNPTkZJR19E
TUFfTk9OQ09IRVJFTlRfTU1BUD15CkNPTkZJR19ETUFfQ09IRVJFTlRfUE9PTD15CkNPTkZJR19E
TUFfUkVNQVA9eQpDT05GSUdfRE1BX0RJUkVDVF9SRU1BUD15CkNPTkZJR19ETUFfQ01BPXkKQ09O
RklHX0RNQV9QRVJOVU1BX0NNQT15CgojCiMgRGVmYXVsdCBjb250aWd1b3VzIG1lbW9yeSBhcmVh
IHNpemU6CiMKQ09ORklHX0NNQV9TSVpFX01CWVRFUz0zMgpDT05GSUdfQ01BX1NJWkVfU0VMX01C
WVRFUz15CiMgQ09ORklHX0NNQV9TSVpFX1NFTF9QRVJDRU5UQUdFIGlzIG5vdCBzZXQKIyBDT05G
SUdfQ01BX1NJWkVfU0VMX01JTiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNQV9TSVpFX1NFTF9NQVgg
aXMgbm90IHNldApDT05GSUdfQ01BX0FMSUdOTUVOVD04CiMgQ09ORklHX0RNQV9BUElfREVCVUcg
aXMgbm90IHNldApDT05GSUdfU0dMX0FMTE9DPXkKQ09ORklHX0NQVV9STUFQPXkKQ09ORklHX0RR
TD15CkNPTkZJR19HTE9CPXkKIyBDT05GSUdfR0xPQl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNPTkZJ
R19OTEFUVFI9eQpDT05GSUdfQ0xaX1RBQj15CkNPTkZJR19JUlFfUE9MTD15CkNPTkZJR19NUElM
SUI9eQpDT05GSUdfRElNTElCPXkKQ09ORklHX0xJQkZEVD15CkNPTkZJR19PSURfUkVHSVNUUlk9
eQpDT05GSUdfVUNTMl9TVFJJTkc9eQpDT05GSUdfSEFWRV9HRU5FUklDX1ZEU089eQpDT05GSUdf
R0VORVJJQ19HRVRUSU1FT0ZEQVk9eQpDT05GSUdfR0VORVJJQ19WRFNPX1RJTUVfTlM9eQpDT05G
SUdfRk9OVF9TVVBQT1JUPXkKIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldApDT05GSUdfRk9OVF84
eDg9eQpDT05GSUdfRk9OVF84eDE2PXkKQ09ORklHX1NHX1BPT0w9eQpDT05GSUdfQVJDSF9TVEFD
S1dBTEs9eQpDT05GSUdfU0JJVE1BUD15CiMgQ09ORklHX1NUUklOR19TRUxGVEVTVCBpcyBub3Qg
c2V0CiMgZW5kIG9mIExpYnJhcnkgcm91dGluZXMKCiMKIyBLZXJuZWwgaGFja2luZwojCgojCiMg
cHJpbnRrIGFuZCBkbWVzZyBvcHRpb25zCiMKQ09ORklHX1BSSU5US19USU1FPXkKIyBDT05GSUdf
UFJJTlRLX0NBTExFUiBpcyBub3Qgc2V0CkNPTkZJR19DT05TT0xFX0xPR0xFVkVMX0RFRkFVTFQ9
NwpDT05GSUdfQ09OU09MRV9MT0dMRVZFTF9RVUlFVD00CkNPTkZJR19NRVNTQUdFX0xPR0xFVkVM
X0RFRkFVTFQ9NAojIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklH
X0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19EWU5BTUlDX0RFQlVHX0NPUkUgaXMg
bm90IHNldApDT05GSUdfU1lNQk9MSUNfRVJSTkFNRT15CkNPTkZJR19ERUJVR19CVUdWRVJCT1NF
PXkKIyBlbmQgb2YgcHJpbnRrIGFuZCBkbWVzZyBvcHRpb25zCgojCiMgQ29tcGlsZS10aW1lIGNo
ZWNrcyBhbmQgY29tcGlsZXIgb3B0aW9ucwojCkNPTkZJR19ERUJVR19JTkZPPXkKIyBDT05GSUdf
REVCVUdfSU5GT19SRURVQ0VEIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfSU5GT19DT01QUkVT
U0VEIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfSU5GT19TUExJVCBpcyBub3Qgc2V0CiMgQ09O
RklHX0RFQlVHX0lORk9fRFdBUkY0IGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfSU5GT19CVEYg
aXMgbm90IHNldAojIENPTkZJR19HREJfU0NSSVBUUyBpcyBub3Qgc2V0CkNPTkZJR19FTkFCTEVf
TVVTVF9DSEVDSz15CkNPTkZJR19GUkFNRV9XQVJOPTIwNDgKIyBDT05GSUdfU1RSSVBfQVNNX1NZ
TVMgaXMgbm90IHNldAojIENPTkZJR19SRUFEQUJMRV9BU00gaXMgbm90IHNldAojIENPTkZJR19I
RUFERVJTX0lOU1RBTEwgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TRUNUSU9OX01JU01BVENI
IGlzIG5vdCBzZXQKQ09ORklHX1NFQ1RJT05fTUlTTUFUQ0hfV0FSTl9PTkxZPXkKQ09ORklHX0FS
Q0hfV0FOVF9GUkFNRV9QT0lOVEVSUz15CkNPTkZJR19GUkFNRV9QT0lOVEVSPXkKIyBDT05GSUdf
REVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKIyBlbmQgb2YgQ29tcGlsZS10aW1l
IGNoZWNrcyBhbmQgY29tcGlsZXIgb3B0aW9ucwoKIwojIEdlbmVyaWMgS2VybmVsIERlYnVnZ2lu
ZyBJbnN0cnVtZW50cwojCkNPTkZJR19NQUdJQ19TWVNSUT15CkNPTkZJR19NQUdJQ19TWVNSUV9E
RUZBVUxUX0VOQUJMRT0weDEKQ09ORklHX01BR0lDX1NZU1JRX1NFUklBTD15CkNPTkZJR19NQUdJ
Q19TWVNSUV9TRVJJQUxfU0VRVUVOQ0U9IiIKQ09ORklHX0RFQlVHX0ZTPXkKQ09ORklHX0RFQlVH
X0ZTX0FMTE9XX0FMTD15CiMgQ09ORklHX0RFQlVHX0ZTX0RJU0FMTE9XX01PVU5UIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfRlNfQUxMT1dfTk9ORSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0FS
Q0hfS0dEQj15CiMgQ09ORklHX0tHREIgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfVUJTQU5f
U0FOSVRJWkVfQUxMPXkKIyBDT05GSUdfVUJTQU4gaXMgbm90IHNldAojIGVuZCBvZiBHZW5lcmlj
IEtlcm5lbCBEZWJ1Z2dpbmcgSW5zdHJ1bWVudHMKCkNPTkZJR19ERUJVR19LRVJORUw9eQpDT05G
SUdfREVCVUdfTUlTQz15CgojCiMgTWVtb3J5IERlYnVnZ2luZwojCiMgQ09ORklHX1BBR0VfRVhU
RU5TSU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIyBD
T05GSUdfUEFHRV9PV05FUiBpcyBub3Qgc2V0CiMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5v
dCBzZXQKIyBDT05GSUdfREVCVUdfUEFHRV9SRUYgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19S
T0RBVEFfVEVTVCBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX0hBU19ERUJVR19XWD15CiMgQ09ORklH
X0RFQlVHX1dYIGlzIG5vdCBzZXQKQ09ORklHX0dFTkVSSUNfUFREVU1QPXkKIyBDT05GSUdfUFRE
VU1QX0RFQlVHRlMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiMgQ09ORklHX1NMVUJfU1RBVFMgaXMg
bm90IHNldApDT05GSUdfSEFWRV9ERUJVR19LTUVNTEVBSz15CiMgQ09ORklHX0RFQlVHX0tNRU1M
RUFLIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAojIENP
TkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0sgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVC
VUdfVk1fUEdUQUJMRT15CiMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIyBDT05GSUdfREVC
VUdfVk1fUEdUQUJMRSBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX0hBU19ERUJVR19WSVJUVUFMPXkK
IyBDT05GSUdfREVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19NRU1PUllfSU5J
VD15CiMgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0FS
Q0hfS0FTQU49eQpDT05GSUdfSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1M9eQpDT05GSUdfQ0NfSEFT
X0tBU0FOX0dFTkVSSUM9eQpDT05GSUdfQ0NfSEFTX1dPUktJTkdfTk9TQU5JVElaRV9BRERSRVNT
PXkKIyBDT05GSUdfS0FTQU4gaXMgbm90IHNldAojIGVuZCBvZiBNZW1vcnkgRGVidWdnaW5nCgoj
IENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CgojCiMgRGVidWcgT29wcywgTG9ja3VwcyBh
bmQgSGFuZ3MKIwojIENPTkZJR19QQU5JQ19PTl9PT1BTIGlzIG5vdCBzZXQKQ09ORklHX1BBTklD
X09OX09PUFNfVkFMVUU9MApDT05GSUdfUEFOSUNfVElNRU9VVD0wCiMgQ09ORklHX1NPRlRMT0NL
VVBfREVURUNUT1IgaXMgbm90IHNldAojIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBz
ZXQKIyBDT05GSUdfV1FfV0FUQ0hET0cgaXMgbm90IHNldAojIENPTkZJR19URVNUX0xPQ0tVUCBp
cyBub3Qgc2V0CiMgZW5kIG9mIERlYnVnIE9vcHMsIExvY2t1cHMgYW5kIEhhbmdzCgojCiMgU2No
ZWR1bGVyIERlYnVnZ2luZwojCkNPTkZJR19TQ0hFRF9ERUJVRz15CkNPTkZJR19TQ0hFRF9JTkZP
PXkKIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiMgZW5kIG9mIFNjaGVkdWxlciBEZWJ1
Z2dpbmcKCiMgQ09ORklHX0RFQlVHX1RJTUVLRUVQSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfREVC
VUdfUFJFRU1QVCBpcyBub3Qgc2V0CgojCiMgTG9jayBEZWJ1Z2dpbmcgKHNwaW5sb2NrcywgbXV0
ZXhlcywgZXRjLi4uKQojCkNPTkZJR19MT0NLX0RFQlVHR0lOR19TVVBQT1JUPXkKIyBDT05GSUdf
UFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CiMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TUElOTE9D
SyBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAojIENPTkZJR19E
RUJVR19XV19NVVRFWF9TTE9XUEFUSCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1JXU0VNUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAojIENPTkZJR19E
RUJVR19BVE9NSUNfU0xFRVAgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9T
RUxGVEVTVFMgaXMgbm90IHNldAojIENPTkZJR19MT0NLX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1dXX01VVEVYX1NFTEZURVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NGX1RPUlRV
UkVfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0NTRF9MT0NLX1dBSVRfREVCVUcgaXMgbm90IHNl
dAojIGVuZCBvZiBMb2NrIERlYnVnZ2luZyAoc3BpbmxvY2tzLCBtdXRleGVzLCBldGMuLi4pCgpD
T05GSUdfU1RBQ0tUUkFDRT15CiMgQ09ORklHX1dBUk5fQUxMX1VOU0VFREVEX1JBTkRPTSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApDT05GSUdfSEFWRV9ERUJV
R19CVUdWRVJCT1NFPXkKCiMKIyBEZWJ1ZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzCiMKIyBDT05G
SUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1BMSVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMg
bm90IHNldAojIENPTkZJR19CVUdfT05fREFUQV9DT1JSVVBUSU9OIGlzIG5vdCBzZXQKIyBlbmQg
b2YgRGVidWcga2VybmVsIGRhdGEgc3RydWN0dXJlcwoKIyBDT05GSUdfREVCVUdfQ1JFREVOVElB
TFMgaXMgbm90IHNldAoKIwojIFJDVSBEZWJ1Z2dpbmcKIwojIENPTkZJR19SQ1VfU0NBTEVfVEVT
VCBpcyBub3Qgc2V0CiMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAojIENPTkZJ
R19SQ1VfUkVGX1NDQUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1F
T1VUPTIxCkNPTkZJR19SQ1VfVFJBQ0U9eQojIENPTkZJR19SQ1VfRVFTX0RFQlVHIGlzIG5vdCBz
ZXQKIyBlbmQgb2YgUkNVIERlYnVnZ2luZwoKIyBDT05GSUdfREVCVUdfV1FfRk9SQ0VfUlJfQ1BV
IGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAojIENP
TkZJR19DUFVfSE9UUExVR19TVEFURV9DT05UUk9MIGlzIG5vdCBzZXQKIyBDT05GSUdfTEFURU5D
WVRPUCBpcyBub3Qgc2V0CkNPTkZJR19OT1BfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05f
VFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQ09ORklHX0hBVkVf
RFlOQU1JQ19GVFJBQ0U9eQpDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1M9eQpD
T05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkNPTkZJR19IQVZFX1NZU0NBTExfVFJB
Q0VQT0lOVFM9eQpDT05GSUdfSEFWRV9DX1JFQ09SRE1DT1VOVD15CkNPTkZJR19UUkFDRV9DTE9D
Sz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNPTkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklHX0NP
TlRFWFRfU1dJVENIX1RSQUNFUj15CkNPTkZJR19UUkFDSU5HPXkKQ09ORklHX1RSQUNJTkdfU1VQ
UE9SVD15CkNPTkZJR19GVFJBQ0U9eQojIENPTkZJR19CT09UVElNRV9UUkFDSU5HIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfU1RBQ0tfVFJB
Q0VSIGlzIG5vdCBzZXQKIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJ
R19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qg
c2V0CiMgQ09ORklHX0hXTEFUX1RSQUNFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0VOQUJMRV9ERUZB
VUxUX1RSQUNFUlMgaXMgbm90IHNldAojIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNl
dAojIENPTkZJR19UUkFDRVJfU05BUFNIT1QgaXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BST0ZJ
TEVfTk9ORT15CiMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAojIENPTkZJR19CTEtfREVW
X0lPX1RSQUNFIGlzIG5vdCBzZXQKQ09ORklHX0tQUk9CRV9FVkVOVFM9eQpDT05GSUdfVVBST0JF
X0VWRU5UUz15CkNPTkZJR19EWU5BTUlDX0VWRU5UUz15CkNPTkZJR19QUk9CRV9FVkVOVFM9eQoj
IENPTkZJR19TWU5USF9FVkVOVFMgaXMgbm90IHNldAojIENPTkZJR19ISVNUX1RSSUdHRVJTIGlz
IG5vdCBzZXQKIyBDT05GSUdfVFJBQ0VfRVZFTlRfSU5KRUNUIGlzIG5vdCBzZXQKIyBDT05GSUdf
VFJBQ0VQT0lOVF9CRU5DSE1BUksgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9CRU5D
SE1BUksgaXMgbm90IHNldAojIENPTkZJR19UUkFDRV9FVkFMX01BUF9GSUxFIGlzIG5vdCBzZXQK
IyBDT05GSUdfUklOR19CVUZGRVJfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJF
RU1QVElSUV9ERUxBWV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfS1BST0JFX0VWRU5UX0dFTl9U
RVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX0hB
U19ERVZNRU1fSVNfQUxMT1dFRD15CkNPTkZJR19TVFJJQ1RfREVWTUVNPXkKIyBDT05GSUdfSU9f
U1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CgojCiMgYXJtNjQgRGVidWdnaW5nCiMKIyBDT05GSUdf
UElEX0lOX0NPTlRFWFRJRFIgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19FRkkgaXMgbm90IHNl
dAojIENPTkZJR19BUk02NF9SRUxPQ19URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09SRVNJR0hU
IGlzIG5vdCBzZXQKIyBlbmQgb2YgYXJtNjQgRGVidWdnaW5nCgojCiMgS2VybmVsIFRlc3Rpbmcg
YW5kIENvdmVyYWdlCiMKIyBDT05GSUdfS1VOSVQgaXMgbm90IHNldAojIENPTkZJR19OT1RJRklF
Ul9FUlJPUl9JTkpFQ1RJT04gaXMgbm90IHNldApDT05GSUdfRlVOQ1RJT05fRVJST1JfSU5KRUNU
SU9OPXkKIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFT
X0tDT1Y9eQpDT05GSUdfQ0NfSEFTX1NBTkNPVl9UUkFDRV9QQz15CiMgQ09ORklHX0tDT1YgaXMg
bm90IHNldApDT05GSUdfUlVOVElNRV9URVNUSU5HX01FTlU9eQojIENPTkZJR19MS0RUTSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1RFU1RfTElTVF9TT1JUIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9N
SU5fSEVBUCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfU09SVCBpcyBub3Qgc2V0CiMgQ09ORklH
X0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9U
RVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfUkJUUkVFX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19S
RUVEX1NPTE9NT05fVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCBp
cyBub3Qgc2V0CiMgQ09ORklHX1BFUkNQVV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRPTUlD
NjRfU0VMRlRFU1QgaXMgbm90IHNldAojIENPTkZJR19URVNUX0hFWERVTVAgaXMgbm90IHNldAoj
IENPTkZJR19URVNUX1NUUklOR19IRUxQRVJTIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9TVFJT
Q1BZIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9LU1RSVE9YIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEVTVF9QUklOVEYgaXMgbm90IHNldAojIENPTkZJR19URVNUX0JJVE1BUCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfVVVJRCBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfWEFSUkFZIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVEVTVF9PVkVSRkxPVyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfUkhBU0hU
QUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfSEFTSCBpcyBub3Qgc2V0CiMgQ09ORklHX1RF
U1RfSURBIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9MS00gaXMgbm90IHNldAojIENPTkZJR19U
RVNUX0JJVE9QUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVk1BTExPQyBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfVVNFUl9DT1BZIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9CUEYgaXMgbm90
IHNldAojIENPTkZJR19URVNUX0JMQUNLSE9MRV9ERVYgaXMgbm90IHNldAojIENPTkZJR19GSU5E
X0JJVF9CRU5DSE1BUksgaXMgbm90IHNldAojIENPTkZJR19URVNUX0ZJUk1XQVJFIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVEVTVF9TWVNDVEwgaXMgbm90IHNldAojIENPTkZJR19URVNUX1VERUxBWSBp
cyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfU1RBVElDX0tFWVMgaXMgbm90IHNldAojIENPTkZJR19U
RVNUX0tNT0QgaXMgbm90IHNldAojIENPTkZJR19URVNUX01FTUNBVF9QIGlzIG5vdCBzZXQKIyBD
T05GSUdfVEVTVF9TVEFDS0lOSVQgaXMgbm90IHNldAojIENPTkZJR19URVNUX01FTUlOSVQgaXMg
bm90IHNldAojIENPTkZJR19URVNUX0ZSRUVfUEFHRVMgaXMgbm90IHNldApDT05GSUdfTUVNVEVT
VD15CiMgZW5kIG9mIEtlcm5lbCBUZXN0aW5nIGFuZCBDb3ZlcmFnZQojIGVuZCBvZiBLZXJuZWwg
aGFja2luZwo=

--_005_PA4PR03MB71367B7662A1D3E4E234F6C0E3E39PA4PR03MB7136eurp_--


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 12:04:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 12:04:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159304.293048 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Axk-0001zT-6Q; Wed, 21 Jul 2021 12:04:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159304.293048; Wed, 21 Jul 2021 12:04:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Axk-0001zM-25; Wed, 21 Jul 2021 12:04:32 +0000
Received: by outflank-mailman (input) for mailman id 159304;
 Wed, 21 Jul 2021 11:57:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pDhP=MN=gmail.com=like.xu.linux@srs-us1.protection.inumbo.net>)
 id 1m6Aqg-0000IT-R5
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 11:57:14 +0000
Received: from mail-pg1-x533.google.com (unknown [2607:f8b0:4864:20::533])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 67bca1c4-b042-44be-b724-fbbfaf60ecdc;
 Wed, 21 Jul 2021 11:57:14 +0000 (UTC)
Received: by mail-pg1-x533.google.com with SMTP id k20so1635168pgg.7
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 04:57:14 -0700 (PDT)
Received: from Likes-MacBook-Pro.local ([103.7.29.32])
 by smtp.gmail.com with ESMTPSA id j12sm25930570pfj.208.2021.07.21.04.57.06
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 21 Jul 2021 04:57:12 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 67bca1c4-b042-44be-b724-fbbfaf60ecdc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=to:cc:references:from:subject:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=1aayxhP7LR5pbpYNWPExB3m6iym6gHf5XQMlRKlxp94=;
        b=Gb3sYMtxc/kWDCMnCmYUN5o70Tvt9W/hvjABaQVw6GepiW6AF7jJcANbzNBRV1gq0H
         KVgsqId2MY+RXzDpDGY6dPw0M9zOWZUAQNGPy7PM2rys/HzrGgdYJ1JWxUE1QI9btZVV
         O6Nge5AQbsqTmzXcQomJIje10kgbOVDLOw6CAEgavNSXA2gO45gvZInn+kY7JYMZv+qO
         7oKYPWFeZHS6IplBXQIb7MGoEHkzU7p7v5SEAUS6Qb0XpyY5ciKG5wbqqw5mBV2thXmN
         kc5wkdciG83RddYCL0ig7AXvXY6vLlAn6fNTtakKWWWjb2B/kLBoNRRLEWJHhmSw7M5h
         laRg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:to:cc:references:from:subject:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=1aayxhP7LR5pbpYNWPExB3m6iym6gHf5XQMlRKlxp94=;
        b=eIsJdVRGLzbNXJz8Y3YA3a9e7edZw2oo9tYTc9/rodlymXm9gD2wbJiq6OUF36Bsa0
         jwgUyprjFJN/5Z9JyBXsQK4uIMnntvVUM0Uojn7FHG/3SRNr2jUC5jLvv6Nptb4jxpGY
         b9TlnBTbNShbG9ruBMgjlfmkGd0grBXSEnFwRpWPvEKoPG0rywzZPQgInniI+3OKpB6I
         RJ1/G8f/2xMyOxpA4q/4BeA3xZZ/uAE5/n+ZxVyr4scWkrSC6m+bE3IYxVg35wI5AyqX
         /eCeXyWpR9QgLkSgrHUJb/tcAdwhbnSbHf2TDLIWCENeuQJa2KRIVYQsNE1+2Rd1NKDB
         tkCw==
X-Gm-Message-State: AOAM530HI+Avex9EUSmf0PBYY+xmFyxWBhKFw42Aa68O4tmKZzTKxqi0
	3+2Xj845MDvyWm6XJTSlIFA=
X-Google-Smtp-Source: ABdhPJx8Jc6D+8J2xe+jplPG6WjflufBXyqLNydLZmg9K2ukmxfm1tClEJcFPfqxf5GDpWMtdTO8gQ==
X-Received: by 2002:a63:a01:: with SMTP id 1mr35267098pgk.360.1626868633306;
        Wed, 21 Jul 2021 04:57:13 -0700 (PDT)
To: Zhu Lingshan <lingshan.zhu@intel.com>
Cc: bp@alien8.de, seanjc@google.com, vkuznets@redhat.com,
 wanpengli@tencent.com, jmattson@google.com, joro@8bytes.org,
 kan.liang@linux.intel.com, ak@linux.intel.com, wei.w.wang@intel.com,
 eranian@google.com, liuxiangdong5@huawei.com, linux-kernel@vger.kernel.org,
 x86@kernel.org, kvm@vger.kernel.org, boris.ostrvsky@oracle.com,
 Like Xu <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>,
 Marc Zyngier <maz@kernel.org>, Guo Ren <guoren@kernel.org>,
 Nick Hu <nickhu@andestech.com>, Paul Walmsley <paul.walmsley@sifive.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu,
 linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org,
 xen-devel@lists.xenproject.org, Peter Zijlstra <peterz@infradead.org>,
 Paolo Bonzini <pbonzini@redhat.com>
References: <20210716085325.10300-1-lingshan.zhu@intel.com>
 <20210716085325.10300-2-lingshan.zhu@intel.com>
From: Like Xu <like.xu.linux@gmail.com>
Subject: Re: [PATCH V8 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
Message-ID: <fd117e37-8063-63a4-43cd-7cb555e5bab5@gmail.com>
Date: Wed, 21 Jul 2021 19:57:01 +0800
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210716085325.10300-2-lingshan.zhu@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 16/7/2021 4:53 pm, Zhu Lingshan wrote:
> +	} else if (xenpmu_data->pmu.r.regs.cpl & 3)

Lingshan, serious for this version ?

arch/x86/xen/pmu.c:438:9: error: expected identifier or ‘(’ before ‘return’
   438 |         return state;
       |         ^~~~~~
arch/x86/xen/pmu.c:439:1: error: expected identifier or ‘(’ before ‘}’ token
   439 | }
       | ^
arch/x86/xen/pmu.c: In function ‘xen_guest_state’:
arch/x86/xen/pmu.c:436:9: error: control reaches end of non-void 
function [-Werror=return-type]
   436 |         }
       |         ^
cc1: some warnings being treated as errors

> +			state |= PERF_GUEST_USER;
>   	}


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 12:42:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 12:42:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159325.293060 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BYb-0006lu-6z; Wed, 21 Jul 2021 12:42:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159325.293060; Wed, 21 Jul 2021 12:42:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BYb-0006ln-3s; Wed, 21 Jul 2021 12:42:37 +0000
Received: by outflank-mailman (input) for mailman id 159325;
 Wed, 21 Jul 2021 12:42:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tag6=MN=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m6BYZ-0006lh-3Z
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 12:42:35 +0000
Received: from mail-lj1-x22d.google.com (unknown [2a00:1450:4864:20::22d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7409b751-8688-4bf0-8dd2-2cb61298e9b1;
 Wed, 21 Jul 2021 12:42:34 +0000 (UTC)
Received: by mail-lj1-x22d.google.com with SMTP id b16so1589796ljq.9
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 05:42:34 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7409b751-8688-4bf0-8dd2-2cb61298e9b1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=EvXJROZuF2EAdblB+X9vzbezoxTpCfdIfWe+jWRmLJ8=;
        b=XUI5JoO20GvayvnkcLMOai1SmW8xYkg0JLJb4/dzgcZ6s49SIS0k+JnpgEBOThfb1C
         1VvVPRw8vCkMSGMH8H6gcr9+nC4m7vH8HZ/cA5ZGpEDnkPGXf7gdSR2CnorIeS1YKCM9
         J8ZLiFTmYeinSfDmU3u/M8xpzZaH7Zl77BRX61yvw1Ei3sxaOzK3Zlo/RlhKTdmCd3tE
         1MCIg1CssQeJyiN/rnGAlnAFfHrG+STRGpBejWQ45X0gN6ezdsh9LjQ2aJfcX3HZ4DBx
         ZPY1x4kWPf7qoMAJn9PcgYXUEzkn5fIgoQhSU4Rf1gG3I4wW67+Te4cCcKOmSvPOYSAx
         TLew==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=EvXJROZuF2EAdblB+X9vzbezoxTpCfdIfWe+jWRmLJ8=;
        b=jJ5VjbtsaG4uDvABPWGqrDiIjICe0W9aDfw2lIEyuLzOvbTD4J1XOeAn2XYEoPzZHe
         YmFRl81ytc3liyLnEQfkEL5W2alEr6DiuBVL8M15dtcKdrYJK9GTDGcFCehusHThMkKl
         vDRX36XQskFM/cmPKeuQKYgeVpOhGHgw5oQuZooFGI+q+sFRq6nyJVPIsJj1Fmn4JESO
         hlbBBWFrM7g/qDP9nG0CqAnGlYF402yLMDy3aEH8uxbUhmkpb+V0pG2EZhJlDBn2HJF/
         r7qp/CQTuVhbzGH/thopwMRedL8BbnKu9QaR6V/39FGy9WVSbiGxOJ5UgyVYi6Vgu1P5
         IG8Q==
X-Gm-Message-State: AOAM533V/LEkMyGty2OBTJ74B+GQs1YtAEWXagmBQ5PjViS2ecJAmQZp
	gAeoUlkq5zx7oXdEx0vfM5d0jQaxZUh3qEoP7cQ=
X-Google-Smtp-Source: ABdhPJzMRlgZiVugjiGxgJODWTmheD6B91jU3qaRDfAQIR2mdXbfjfkEfBpDXFGq4DKH4cK8NcWGn85g2itTHSLWc3o=
X-Received: by 2002:a2e:7f0c:: with SMTP id a12mr31386164ljd.378.1626871353073;
 Wed, 21 Jul 2021 05:42:33 -0700 (PDT)
MIME-Version: 1.0
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
In-Reply-To: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Wed, 21 Jul 2021 08:42:21 -0400
Message-ID: <CAKf6xpucqRp5Db6z0J7PLbTVxBZThn7j2Mjvjn9z7nJ5Lf5F_g@mail.gmail.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
To: Scott Davis <scottwd@gmail.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>, Scott Davis <scott.davis@starlab.io>, 
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, 
	George Dunlap <george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, 
	Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>
Content-Type: text/plain; charset="UTF-8"

On Tue, Jul 20, 2021 at 1:57 PM Scott Davis <scottwd@gmail.com> wrote:
>
> This adds an option to the xl domain configuration file syntax for specifying
> a kernel command line for device-model stubdomains. It is intended for use with
> Linux-based stubdomains.
>
> Signed-off-by: Scott Davis <scott.davis@starlab.io>
> ---
>  docs/man/xl.cfg.5.pod.in             | 4 ++++
>  tools/golang/xenlight/helpers.gen.go | 3 +++
>  tools/golang/xenlight/types.gen.go   | 1 +
>  tools/libs/light/libxl_dm.c          | 1 +
>  tools/libs/light/libxl_types.idl     | 1 +
>  tools/xl/xl_parse.c                  | 2 ++
>  6 files changed, 12 insertions(+)
>
> diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
> index 56370a37db..6c777cad5c 100644
> --- a/docs/man/xl.cfg.5.pod.in
> +++ b/docs/man/xl.cfg.5.pod.in
> @@ -2742,6 +2742,10 @@ In case of B<qemu-xen-traditional> it is expected to be MiniOS-based stubdomain
>  image, in case of B<qemu-xen> it is expected to be Linux-based stubdomain
>  kernel.
>
> +=item B<stubdomain_cmdline="STRING">
> +
> +Append B<STRING> to the device-model stubdomain kernel command line.

I think this option actually sets the string, so you want "Set
B<STRING> as the device-model stubdomain kernel command line." or
something equivalent?

With a suitable change,
Reviewed-by: Jason Andryuk <jandryuk@gmail.com>


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 12:43:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 12:43:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159330.293071 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BZI-0007KR-G0; Wed, 21 Jul 2021 12:43:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159330.293071; Wed, 21 Jul 2021 12:43:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BZI-0007KK-DD; Wed, 21 Jul 2021 12:43:20 +0000
Received: by outflank-mailman (input) for mailman id 159330;
 Wed, 21 Jul 2021 12:43:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BZH-0007K3-1u; Wed, 21 Jul 2021 12:43:19 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BZF-0002BZ-Vr; Wed, 21 Jul 2021 12:43:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BZF-0001ug-OP; Wed, 21 Jul 2021 12:43:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BZF-0005KP-Nv; Wed, 21 Jul 2021 12:43:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Cav/UCXfzWZAjvHXrXj29yVn1s1F+eR7yyeLDWneVKI=; b=kEW0gMFmts8XD/uw900f93LJ3r
	cUJlnL+nMv5zRRBSqoqqKeaDhPNRgc2UnN322sJQ3WfTG3TV3mzl3Wl3b3rQOvzqkj9hoMWDLAHfw
	84ZLlSC/J1vmMUbpb/GKSHd/7/g0Z6JhMQ9mDZGukPg0MYk2Eow07EozUw+Ng2VTFXkw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163864-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163864: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=c32c5911c41fa691a5333e7567003cc124e7ab5f
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 12:43:17 +0000

flight 163864 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163864/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 c32c5911c41fa691a5333e7567003cc124e7ab5f
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   47 days
Failing since        162368  2021-06-04 15:42:59 Z   46 days  126 attempts
Testing same since   163864  2021-07-21 05:21:35 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3938 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 12:50:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 12:50:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159338.293086 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BgY-0000bD-8G; Wed, 21 Jul 2021 12:50:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159338.293086; Wed, 21 Jul 2021 12:50:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BgY-0000b6-4t; Wed, 21 Jul 2021 12:50:50 +0000
Received: by outflank-mailman (input) for mailman id 159338;
 Wed, 21 Jul 2021 12:50:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m6BgX-0000b0-5j
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 12:50:49 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m6BgX-0002Ho-2m
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 12:50:49 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m6BgX-0002Zw-1m
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 12:50:49 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m6BgS-0001J3-39; Wed, 21 Jul 2021 13:50:44 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=2PRoXlklWCUXoCMJf7wBeu1acByFMbn0aa/jiM/oiew=; b=2j0ZWZ7DMCc16EBndnjQ8bQ1Qj
	OeIvnSbFFkHz7dl2hqlPkPUtJ8ct+K+faoPzaGDwoTt9kuJnoNsNgk1k2xLpsq54BsA6w6LwfMcDy
	2wC1EOggUyuEJ9IwM19bYLBGC0YkH89pbUVAFj6NgUi1dd7rY4hKFu34Z41pFkDOeBMg=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24824.6179.909691.713305@mariner.uk.xensource.com>
Date: Wed, 21 Jul 2021 13:50:43 +0100
To: Jason Andryuk <jandryuk@gmail.com>
Cc: Scott Davis <scottwd@gmail.com>,
    xen-devel <xen-devel@lists.xenproject.org>,
    Scott Davis <scott.davis@starlab.io>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Nick Rosbrook <rosbrookn@ainfosec.com>,
    Anthony PERARD <anthony.perard@citrix.com>,
    Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
In-Reply-To: <CAKf6xpucqRp5Db6z0J7PLbTVxBZThn7j2Mjvjn9z7nJ5Lf5F_g@mail.gmail.com>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
	<CAKf6xpucqRp5Db6z0J7PLbTVxBZThn7j2Mjvjn9z7nJ5Lf5F_g@mail.gmail.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Jason Andryuk writes ("Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg"):
> I think this option actually sets the string, so you want "Set
> B<STRING> as the device-model stubdomain kernel command line." or
> something equivalent?
> 
> With a suitable change,
> Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

Does it then override an existing commandline calculated by libxl ?

Often people want to just add an option, so a config setting to append
things is useful (but one to override it completely is useful too).

Ian.


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 12:59:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 12:59:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159344.293098 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BpF-0001Wu-40; Wed, 21 Jul 2021 12:59:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159344.293098; Wed, 21 Jul 2021 12:59:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6BpF-0001Wn-1D; Wed, 21 Jul 2021 12:59:49 +0000
Received: by outflank-mailman (input) for mailman id 159344;
 Wed, 21 Jul 2021 12:59:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BpD-0001Wd-71; Wed, 21 Jul 2021 12:59:47 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BpC-0002QH-UD; Wed, 21 Jul 2021 12:59:46 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BpC-0002PA-Nk; Wed, 21 Jul 2021 12:59:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6BpC-000549-NH; Wed, 21 Jul 2021 12:59:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=9Ll21gUlX4uUynNf4CnsJbM4xsIH/j34t3m5labVfxw=; b=VWXneqDugArjlno5dmHK707qo8
	zyIXXzkwaQkZqmSgEzHu8PFnVjnjXpfdN3Zm3yX5k7pNfA96JPsfDzMdvag5eaXHgr0WwpBlGoYoC
	yhTjhA4ejs3eiweiUxFz/RlpXfnh7ZtmlA7L/io6IiaoISYMBZxRu/rBvlSi+va5CjJA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-xl-qemuu-debianhvm-amd64
Message-Id: <E1m6BpC-000549-NH@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 12:59:46 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-xl-qemuu-debianhvm-amd64
testid debian-hvm-install

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163873/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-debianhvm-amd64.debian-hvm-install.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-debianhvm-amd64.debian-hvm-install --summary-out=tmp/163873.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-xl-qemuu-debianhvm-amd64 debian-hvm-install
Searching for failure / basis pass:
 163849 fail [host=huxelrebe1] / 163321 [host=albana0] 163311 [host=fiano1] 163303 ok.
Failure / basis pass flights: 163849 / 163303
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 143c2e0432859826c9e8d5b2baa307355f1a5332 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 711c0418c8c1ce3a24346f058b001c4c5a2f0f81 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#711c0418c8c1ce3a24346f058b001c4c5a2f0f81-143c2e0432859826c9e8d5b2baa307355f1a5332 git://xenbits.xen.org/osstest/seabios.git#54082c81d96028ba8c76fbe6784085cf1df76b20-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#74d044d51b19bb697eac5c3deafa140f6afafec8-96e5ad4c476e70688295b3cfb537847a3351d6fd
Loaded 20171 nodes in revision graph
Searching for test results:
 163299 [host=elbling0]
 163303 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 711c0418c8c1ce3a24346f058b001c4c5a2f0f81 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163311 [host=fiano1]
 163321 [host=albana0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail irrelevant
 163516 fail irrelevant
 163545 fail irrelevant
 163563 fail irrelevant
 163577 fail irrelevant
 163600 fail irrelevant
 163621 fail irrelevant
 163642 fail irrelevant
 163663 fail irrelevant
 163677 fail irrelevant
 163694 fail irrelevant
 163719 fail irrelevant
 163741 fail irrelevant
 163765 fail irrelevant
 163784 fail irrelevant
 163798 fail irrelevant
 163811 fail irrelevant
 163843 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 711c0418c8c1ce3a24346f058b001c4c5a2f0f81 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163834 fail irrelevant
 163845 fail irrelevant
 163846 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163847 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 9e59d9f8ee3808acde9833192211da25f66d8cc2
 163848 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163850 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163852 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 69d8de7a2d7c3512f6f7762abd8c1c1b9b4044e4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163854 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 ad76d87d65e1fd2ec3b08699d6dcfb0d2a9441c1
 163855 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163857 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 8d6cb100731c4d28535adbf2a3c2d1f29be3fef4 54082c81d96028ba8c76fbe6784085cf1df76b20 5b2a5523d697b6d1a97a18d33dc6bf92a33def32
 163858 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 4473f3601098a2c3cf5ab89d5a29504772985e3a
 163860 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 33e48312cf28f6fb78c03b14514fa7718de97ef5
 163861 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 904806c69bd4e013491550d05f5c2cbdba9a9b38 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163849 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 143c2e0432859826c9e8d5b2baa307355f1a5332 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
 163863 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163866 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 711c0418c8c1ce3a24346f058b001c4c5a2f0f81 54082c81d96028ba8c76fbe6784085cf1df76b20 74d044d51b19bb697eac5c3deafa140f6afafec8
 163867 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 143c2e0432859826c9e8d5b2baa307355f1a5332 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
 163869 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163871 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163872 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163873 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163303 (pass), for basis pass
 Result found: flight 163849 (fail), for basis failure
 Repro found: flight 163866 (pass), for basis pass
 Repro found: flight 163867 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163855 (pass), for last pass
 Result found: flight 163863 (fail), for first failure
 Repro found: flight 163869 (pass), for last pass
 Repro found: flight 163871 (fail), for first failure
 Repro found: flight 163872 (pass), for last pass
 Repro found: flight 163873 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163873/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-debianhvm-amd64.debian-hvm-install.{dot,ps,png,html,svg}.
----------------------------------------
163873: tolerable ALL FAIL

flight 163873 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163873/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail baseline untested


jobs:
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 13:09:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 13:09:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159353.293117 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Byy-0003I6-DD; Wed, 21 Jul 2021 13:09:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159353.293117; Wed, 21 Jul 2021 13:09:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Byy-0003Hz-9S; Wed, 21 Jul 2021 13:09:52 +0000
Received: by outflank-mailman (input) for mailman id 159353;
 Wed, 21 Jul 2021 13:09:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6Byx-0003Ht-2h
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 13:09:51 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6Byw-0002e3-Tb; Wed, 21 Jul 2021 13:09:50 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6Byw-0003th-NQ; Wed, 21 Jul 2021 13:09:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=rNEIm3sgxU+WDbSwF6wJUQCgBvsOAV3APpA1UNHzY+8=; b=B2RXD6toiNmkNzhW5glVwNTAYL
	I7gO1szaOxo45egtzmcZF4poJVVFwgvrEIP7JXFsaCx+c2ihn5dT2HJa4P60XkT2OQPfh+sd5AXs6
	hdG+Il/nG3Fp1Q78zTmlf4dbnja/u1OQKtPxM0GLAV7+2rpuKXSxf889cESQwP6TuMjU=;
Subject: Re: Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in
 kernel config
To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrii Anisov <Andrii_Anisov@epam.com>,
 Stefano Stabellini <sstabellini@kernel.org>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
From: Julien Grall <julien@xen.org>
Message-ID: <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
Date: Wed, 21 Jul 2021 14:09:48 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

(+ Stefano)

On 21/07/2021 12:44, Oleksii Moisieiev wrote:
> Hello,

Hi,

Thanks for the report.

I nearly miss this e-mail because the title doesn't suggest this is an 
Arm and I wasn't CCed. In future, would you be able to CC the Arm 
maintainers (you can find them in MAINTAINERS) and mention arm in the title?

> I've got a problem that Dom0 hangs without any output from kernel once I 
> enable CONFIG_KPROBE_EVENTS and/or CONFIG_UPROBE_EVENTS in dom0 kernel.
> Everything works fine when kprobe/uprobe events are disabled.

By disabled, do you mean compile out?

> 
> My setup:
> Board: H3ULCB Kinfisher board
> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15) 
> https://github.com/xen-project/xen.git 
> <https://github.com/xen-project/xen.git>;
> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576(v5.10-rc4)

Hmmm... 5.10 was released a few months ago and there are probably a few 
stable release for the version. Can you try the latest 5.10 stable?

> 
> https://github.com/torvalds/linux.git 
> <https://github.com/torvalds/linux.git>;
> 
> kernel config: see attached;
> 
> dtb: see attached;

Please avoid large attachment as they will be duplicated on every 
mailbox. Instead, in the future, please upload them somewhere (your own 
webserve, pastebin...) and provide a link in the e-mail.
> 
> 
> If kprobe/uprobe events are enabled - I see no output after xen switched 
> input to Dom0, if disabled - system boots up successfully.
The console subsystem tends to be enabled quite late in the boot 
process. So this may mean a panic during early boot.

If you haven't done yet, I would suggest to add earlycon=xenboot on the 
dom0 command line. This will print some messages during early boot.
ing.

> 
> Both configs work fine when I boot without xen.
> 
> 
> Dom0 information from Xen console shows that only one CPU works, and PC 
> stays in "__arch_counter_get_cntvct" function on read_sysreg call. //
> 
> I did further investigation and found that kernel 5.4 doesn't have such 
> kind of issues.
> After bisecting kernel,between 5.10 and 5.4, I found that output 
> disappeared on commit:
> 
> 76085aff29f585139a37a10ea0a7daa63f70872c

 From the information you provided so far, I am a bit confused how this 
could be the source of the problem. But given this is not the latest 
5.10, I will wait for you to confirm the bug is still present before 
providing more input.

> 
> 
> Another issue, which was revealed after I got kernel output was kernel 
> oops with message that CPU is in inconsistent state.
> 
> [0.415612] EFI services will not be available.
> 
> [0.420267] smp: Bringing up secondary CPUs ...
> 
> [0.425185] Detected PIPT I-cache on CPU1
> 
> [0.425267] Xen: initializing cpu1
> 
> [0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411fd073]
> 
> [0.425815] Detected PIPT I-cache on CPU2
> 
> [0.425879] Xen: initializing cpu2
> 
> [0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411fd073]
> 
> [0.426362] Detected PIPT I-cache on CPU3
> 
> [0.426425] Xen: initializing cpu3
> 
> [0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411fd073]
> 
> [0.426537] smp: Brought up 1 node, 4 CPUs
> 
> [0.472807] SMP: Total of 4 processors activated.
> 
> [0.477551] CPU features: detected: 32-bit EL0 Support
> 
> [0.482745] CPU features: detected: CRC32 instructions
> 
> [0.499470] ------------[ cut here ]------------
> 
> [0.504034] CPU: CPUs started in inconsistent modes

Looking at Linux 5.7 code, this is printed when not all the CPUs are 
booted in the same mode (i.e. EL1 or EL2).

This is quite odd. So let me ask a question first, did you see this 
error during the bisection or on the latest 5.7?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 13:27:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 13:27:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159359.293129 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6CFS-0005vD-TJ; Wed, 21 Jul 2021 13:26:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159359.293129; Wed, 21 Jul 2021 13:26:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6CFS-0005v6-PV; Wed, 21 Jul 2021 13:26:54 +0000
Received: by outflank-mailman (input) for mailman id 159359;
 Wed, 21 Jul 2021 13:26:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tag6=MN=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m6CFR-0005v0-Pc
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 13:26:53 +0000
Received: from mail-lf1-x12e.google.com (unknown [2a00:1450:4864:20::12e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d1c9dbf6-5c2b-4faf-96a7-9cf267334348;
 Wed, 21 Jul 2021 13:26:53 +0000 (UTC)
Received: by mail-lf1-x12e.google.com with SMTP id b26so3164118lfo.4
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 06:26:52 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d1c9dbf6-5c2b-4faf-96a7-9cf267334348
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=XLEV1G1OHX8N30wx04oggOiCX4wJRTaEhY/fKjMOoR4=;
        b=Tp0YavYGw5mYJpIzt1vHwMqoGOaH6qUXPQ5c6k0Cuyc46PKZ9NDcdUjkezlrGzPL6X
         VW+0TBCxLO9+8rlQGVt09tHbPx7YymBotMBhIZvCVKJxBccC0P6x16IFtHFb+Z7mSxd+
         5q4ni88DZA0/yvRsSCHwblDVkyZd+RaLtYg/g7suhAzIWdzbeFiTzjqKBZMUeQZ8D8SH
         j/bZJ3m0NarHGqD2haf2j5Ed89xiNxezxGt+t6NblD0AK/lSS2woar4nh9huqbzZsWfQ
         dg7B9BomKZdGLSZ/9x6OCo19212a8RAJPRFUT6Xp/thLXHiTsSk61kYOq41k0GxRW4d4
         fMaA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=XLEV1G1OHX8N30wx04oggOiCX4wJRTaEhY/fKjMOoR4=;
        b=jK0kv3m92959g+IvOiE3MKCKxC+YvlJTBFYf9EXVUd8EHxWWsH/MRsNEndxRlIv7q9
         JmV5G6mRzeA2H5M8MWukHKS0LAORyTMkpGHG4hH/40u9EBrcTqpSUXpuyMG9WlTqM1gv
         PE6CffDc0wbre4e7RCQp2sxCBXWAvznU2K/2QOuH53noV1oXMTqY6W7btQIZEncQS6+1
         alv8bFxl5lULs4iYl3BBO7bNDKAqHCuA5VBfbAeAdYbC3DGZrpVTSb0FRtsYc0910ytK
         Q4ORakyZS2gGYwDvKtyh2VmpSix9HeIRAVY4PpX/wFxsSRFptvvxWktbohOh7DrehZ1r
         bG0g==
X-Gm-Message-State: AOAM532W9yLFTcBTL7XdV2ruOK1ovkGGCY+xdiG57P6KhBvGtHGntQaF
	7N1CGfpDXI0n8zeuvnl1ZYGHcKMY+4ko7GfbiPM=
X-Google-Smtp-Source: ABdhPJwkObpYVWD8S8Nwb0DG8GuWS3z19ETDKvSyH4lr8Zw8pMAo4qfoYXyb2hcLdMhcvsnpe14W27eb5FOcqCHjPpg=
X-Received: by 2002:a05:6512:3d28:: with SMTP id d40mr25248573lfv.562.1626874012004;
 Wed, 21 Jul 2021 06:26:52 -0700 (PDT)
MIME-Version: 1.0
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
 <CAKf6xpucqRp5Db6z0J7PLbTVxBZThn7j2Mjvjn9z7nJ5Lf5F_g@mail.gmail.com> <24824.6179.909691.713305@mariner.uk.xensource.com>
In-Reply-To: <24824.6179.909691.713305@mariner.uk.xensource.com>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Wed, 21 Jul 2021 09:26:40 -0400
Message-ID: <CAKf6xptO4mrZHxwr9mFPx-x=o5g_DbHLrEKMgwCpSDqHAUEgqw@mail.gmail.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
To: Ian Jackson <iwj@xenproject.org>
Cc: Scott Davis <scottwd@gmail.com>, xen-devel <xen-devel@lists.xenproject.org>, 
	Scott Davis <scott.davis@starlab.io>, Wei Liu <wl@xen.org>, 
	George Dunlap <george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, 
	Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>
Content-Type: text/plain; charset="UTF-8"

On Wed, Jul 21, 2021 at 8:50 AM Ian Jackson <iwj@xenproject.org> wrote:
>
> Jason Andryuk writes ("Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg"):
> > I think this option actually sets the string, so you want "Set
> > B<STRING> as the device-model stubdomain kernel command line." or
> > something equivalent?
> >
> > With a suitable change,
> > Reviewed-by: Jason Andryuk <jandryuk@gmail.com>
>
> Does it then override an existing commandline calculated by libxl ?

Today, libxl doesn't handle a command line string for the stubdom
kernel, so it defaults to an empty string.

> Often people want to just add an option, so a config setting to append
> things is useful (but one to override it completely is useful too).

Yes, they can both be useful.  Append is sufficient until you want to
override or remove an option that is already included.  Set can be
tedious since you have to copy the existing options before appending
your new one.

Anyway, I just wanted the documentation to match the implementation.
Looks like xl.cfg.5.pod.in says Append for cmdline/root/extra, so
Scott was repeating that.  Looking around, aside from concatenating
root and extra in xl_parse.c:parse_cmdline(), libxl doesn't seem to
calculate command lines.  If libxl is reserving the right to calculate
cmdline in the future, then keeping Append is fine by me.

Regards,
Jason


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:03:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:03:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159366.293141 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Coq-00029q-MU; Wed, 21 Jul 2021 14:03:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159366.293141; Wed, 21 Jul 2021 14:03:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Coq-00029j-JJ; Wed, 21 Jul 2021 14:03:28 +0000
Received: by outflank-mailman (input) for mailman id 159366;
 Wed, 21 Jul 2021 14:03:26 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m6Coo-00029d-Tv
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:03:26 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m6Coo-0003XB-F4
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:03:26 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m6Coo-0007Wk-EC
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:03:26 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m6Coj-0001Ui-HQ; Wed, 21 Jul 2021 15:03:21 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=CW7zwAK/qcfVNqJmdIur31yUxgPn6nf6WmEcYPDzBzo=; b=UDMskzl51QBMD0wc798QltGcG+
	1GbWUYhXla+fOOz3fW6KUdZ+aVepKaKVW3j8iJr0H97bIJJG8G816TIA4S2FhKkLSn4jIwgkH1heq
	5L3uXzUH4SVBknMNkcuu8YfeLqgRbXB0Wh3gkS44aIpbFu0H2Pp/63su8OgPcAbOhOK4=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24824.10537.336687.898547@mariner.uk.xensource.com>
Date: Wed, 21 Jul 2021 15:03:21 +0100
To: Jason Andryuk <jandryuk@gmail.com>
Cc: Scott Davis <scottwd@gmail.com>,
    xen-devel <xen-devel@lists.xenproject.org>,
    Scott Davis <scott.davis@starlab.io>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Nick Rosbrook <rosbrookn@ainfosec.com>,
    Anthony PERARD <anthony.perard@citrix.com>,
    Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
In-Reply-To: <CAKf6xptO4mrZHxwr9mFPx-x=o5g_DbHLrEKMgwCpSDqHAUEgqw@mail.gmail.com>
References: <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
	<CAKf6xpucqRp5Db6z0J7PLbTVxBZThn7j2Mjvjn9z7nJ5Lf5F_g@mail.gmail.com>
	<24824.6179.909691.713305@mariner.uk.xensource.com>
	<CAKf6xptO4mrZHxwr9mFPx-x=o5g_DbHLrEKMgwCpSDqHAUEgqw@mail.gmail.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Jason Andryuk writes ("Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg"):
> Yes, they can both be useful.  Append is sufficient until you want to
> override or remove an option that is already included.  Set can be
> tedious since you have to copy the existing options before appending
> your new one.
> 
> Anyway, I just wanted the documentation to match the implementation.

Yes.  I am happy with either approach.  Given the name I think
override is probably better; then we can do append with _extra later
if we like.

So in summary I agree with your suggested change to this patch.

> Looks like xl.cfg.5.pod.in says Append for cmdline/root/extra, so
> Scott was repeating that.  Looking around, aside from concatenating
> root and extra in xl_parse.c:parse_cmdline(), libxl doesn't seem to
> calculate command lines.  If libxl is reserving the right to calculate
> cmdline in the future, then keeping Append is fine by me.

Thanks for the investigation.

Ian.


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:09:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:09:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159372.293153 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6CuU-00033y-B9; Wed, 21 Jul 2021 14:09:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159372.293153; Wed, 21 Jul 2021 14:09:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6CuU-00033r-7y; Wed, 21 Jul 2021 14:09:18 +0000
Received: by outflank-mailman (input) for mailman id 159372;
 Wed, 21 Jul 2021 14:09:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=JMML=MN=gmail.com=neilsikka@srs-us1.protection.inumbo.net>)
 id 1m6CuS-00033V-Uc
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:09:17 +0000
Received: from mail-qk1-x730.google.com (unknown [2607:f8b0:4864:20::730])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fff51233-af47-4075-83fd-70097ea44725;
 Wed, 21 Jul 2021 14:09:16 +0000 (UTC)
Received: by mail-qk1-x730.google.com with SMTP id bm6so2200583qkb.1
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 07:09:16 -0700 (PDT)
Received: from [192.168.50.139] ([70.21.11.5])
 by smtp.gmail.com with ESMTPSA id h2sm11814761qkf.106.2021.07.21.07.09.13
 for <xen-devel@lists.xenproject.org>
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 21 Jul 2021 07:09:14 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fff51233-af47-4075-83fd-70097ea44725
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=user-agent:mime-version:content-transfer-encoding:subject:from:date
         :to:message-id;
        bh=6lU79icndgYGTdF0HrcQYMNalGRF8Sb6TQ21ogp432I=;
        b=fGBbJxbijuJIBl87y1J8xVn0m4NvzvvKmShuxB8PVLcD6slpbPHg1wLmabK++RfZ1w
         uQMhTzHReKSAL5xd2ZrvvI6SI/7+XLmUUjne7mInsX/OeF39ijN2b+sDEUO1ATjpfrAb
         5uh8kJFlXLxbQKZrJ/29JlOeD4ZQJE3UxHvPk3dq2+3FXXL7M58NmmKUeuEH4R0y6hF0
         aADd+GMfJn+XPXvuGPiUQozu9nRuBEIS8AHBCnhsgrRsYsadY8IJV2PPLZFKCegFyRx/
         BTZIdK8ink95KpuvhOUrXmF8xKvoNXGUemqgRFo0CTonHK4E7W6GkuYGOGCcbhtEcxXY
         Igsg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:user-agent:mime-version
         :content-transfer-encoding:subject:from:date:to:message-id;
        bh=6lU79icndgYGTdF0HrcQYMNalGRF8Sb6TQ21ogp432I=;
        b=jhEMpfHGFv25oxWa9CWSn9bY9Bd4zEpmGac6p8ltP1b1k+KRdAjM+IHYTApm1W4loI
         s90WwDWt/ouyE68UJGcQ+daiVO5MdU8AsXefcVXBG+AYnL1HbD5XKjcufZQ+vc5uc4tb
         qbT82UEQX6UZMd+LtOPfeqskohAJTs7kqlO40oxREK3XwyrAuz7Nmy6d6hqOKJXKKZkq
         afwAVEH3l3pyQOoEw3oOTvZe/AGeTcJDwzKuKo6LNSN3XVpAC2VkUiqAqiP5iTbUh17b
         q19Uv+UPBcban7nxF5HSgsonoxgTZm2PzDBrlGyteSG3rShtfvaj11ctAFARMivg9xBl
         zSrA==
X-Gm-Message-State: AOAM530tIGZA4ZKB4IhBhdDhgHV1VVGLNh9QiS3m1UPbcKudDrXi73FD
	98570LTwGfiUFlS5eG8l6a79ciDCElavnA==
X-Google-Smtp-Source: ABdhPJz86IkFCc0Pr1TWzOGzAbvKbzom6PP70Dp7RZAg4nf25Yq12obLppksCaEdnGce8vJTtWpASQ==
X-Received: by 2002:a05:620a:13f8:: with SMTP id h24mr26328233qkl.350.1626876555454;
        Wed, 21 Jul 2021 07:09:15 -0700 (PDT)
User-Agent: Android
X-Is-Generated-Message-Id: true
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----NGT4NTL0PVI3F2P6H7UPG5E6D4HOOH"
Content-Transfer-Encoding: 7bit
X-Local-Message-Id: <01743e5a-56bc-463d-a788-c74e94557aa5@gmail.com>
Subject: Xen DomUs with empty state
From: Neil Sikka <neilsikka@gmail.com>
Date: Wed, 21 Jul 2021 10:09:11 -0400
To: Xen-devel <xen-devel@lists.xenproject.org>
Message-ID: <01743e5a-56bc-463d-a788-c74e94557aa5@gmail.com>

------NGT4NTL0PVI3F2P6H7UPG5E6D4HOOH
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
 charset=UTF-8

Hello,
I am running xen 4=2E13=2E0 hosting many DomUs started in a short am=
ount of time, but not all of them are accounted for by xentop:

183 domains=
: 2 running, 0 blocked, 92 paused, 0 crashed, 0 dying, 0 shutdown

Only 94 =
of the 183 VMs are accounted for, and the STATE column for many of the VMs =
shows "------"=2E I have 56 physical CPUs=2E Why am I seeing this discrepan=
cy and empty status columns?

Thanks,
Neil
------NGT4NTL0PVI3F2P6H7UPG5E6D4HOOH
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Hello,<br></div>
<div dir=3D"auto">I am running xen 4=2E1=
3=2E0 hosting many DomUs started in a short amount of time, but not all of =
them are accounted for by xentop:<br><br></div>
<div dir=3D"auto">183 domai=
ns: 2 running, 0 blocked, 92 paused, 0 crashed, 0 dying, 0 shutdown<br><br>=
</div>
<div dir=3D"auto">Only 94 of the 183 VMs are accounted for, and the =
STATE column for many of the VMs shows "------"=2E I have 56 physical CPUs=
=2E Why am I seeing this discrepancy and empty status columns?<br><br></div=
>
<div dir=3D"auto">Thanks,<br></div>
<div dir=3D"auto">Neil</div>

------NGT4NTL0PVI3F2P6H7UPG5E6D4HOOH--



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:19:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:19:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159378.293165 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6D4c-0004jN-AO; Wed, 21 Jul 2021 14:19:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159378.293165; Wed, 21 Jul 2021 14:19:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6D4c-0004jG-7J; Wed, 21 Jul 2021 14:19:46 +0000
Received: by outflank-mailman (input) for mailman id 159378;
 Wed, 21 Jul 2021 14:19:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1Uf5=MN=strugglers.net=andy@srs-us1.protection.inumbo.net>)
 id 1m6D4b-0004jA-G9
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:19:45 +0000
Received: from mail.bitfolk.com (unknown [2001:ba8:1f1:f019::25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 35f14a70-b6ce-468a-a47b-e3d81f220c75;
 Wed, 21 Jul 2021 14:19:44 +0000 (UTC)
Received: from andy by mail.bitfolk.com with local (Exim 4.89)
 (envelope-from <andy@strugglers.net>)
 id 1m6D4Z-0005YK-3j; Wed, 21 Jul 2021 14:19:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 35f14a70-b6ce-468a-a47b-e3d81f220c75
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=bitfolk.com
	; s=alpha; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:
	Subject:Cc:To:From:Date:Sender:Reply-To:Content-Transfer-Encoding:Content-ID:
	Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
	:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
	List-Post:List-Owner:List-Archive;
	bh=Rf9zduaIJ23HwenHJIIXrhNUQoIysN+Wblq9vzkt/78=; b=rqC8JvNMZK4tMu/KfppJ/sTo/8
	I6PR/dWFAujk4htkzaGRC6qUdCaiFt7hB9hZvOQe7RkaEQpMnSGS/mFh3ceSMBX/oVCadZojGUMJB
	Fr7g7/ZzoQeZlWGEyQl8lQPyIASB4tqlddeaWIqFvtFvlUT9rd/tKGOvxpJa36u4X9KJw27Wbgm46
	up93NxG5OmShNZSW79fW78S+vj00dcSspoRQ/r9Y1g8fUiXJCHvQvyOjM8Fz3smRBFDkYAdUw1snu
	paPP4t2HkiN7A8x6CTs2pe//2GT+WfvnDCQRjLm4qXgj6T/t7nKJ7pItfxh237vICw2d4Pl3zAb+H
	GWXqqO6A==;
Date: Wed, 21 Jul 2021 14:19:42 +0000
From: Andy Smith <andy@strugglers.net>
To: Jan Beulich <jbeulich@suse.com>
Cc: xen-devel@lists.xenproject.org
Subject: Re: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072
 nents:13
Message-ID: <20210721141942.tnxyfpt7qttzjooo@bitfolk.com>
References: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
 <c3d7f7c7-0231-dba2-344f-e2e3588e0cab@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <c3d7f7c7-0231-dba2-344f-e2e3588e0cab@suse.com>
OpenPGP: id=BF15490B; url=http://strugglers.net/~andy/pubkey.asc
X-URL: http://strugglers.net/wiki/User:Andy
User-Agent: NeoMutt/20170113 (1.7.2)
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: andy@strugglers.net
X-SA-Exim-Scanned: No (on mail.bitfolk.com); SAEximRunCond expanded to false

Hi Jan,

On Wed, Jul 21, 2021 at 10:10:13AM +0200, Jan Beulich wrote:
> Since xen-blkback only talks in terms of bio-s, I don't think it is
> the party responsible for honoring such driver restrictions. Instead
> I'd expect the block layer's bio merging to be where this needs to be
> observed. Perhaps it simply doesn't expect to be passed requests in
> multiples of 11 sectors together with the capping at 64k (as said -
> iirc) and driver restrictions on where splits may occur? And as to
> earlier Linux versions working - perhaps the merging logic was less
> aggressive back then?

I later realised that there was another change in my setup besides
the kernel version going from 4.19 to 5.10: I gave the dom0 8GiB of
memory instead of the 3GiB it had before.

I understand that below 4GiB memory use of swiotlb is disabled so
all the time previously this was not used, and now is. Perhaps the
bug is in there?

I was told that the only simple way on a Xen dom0 to disable use of
swiotlb would be to set the memory below 4GiB again, so I might try
that.

I was also pointed to this patch as a maybe fix for my issue:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=5f89468e2f060031cd89fd4287298e0eaf246bf6

Thanks,
Andy


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:32:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:32:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159385.293180 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DGv-00077x-HO; Wed, 21 Jul 2021 14:32:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159385.293180; Wed, 21 Jul 2021 14:32:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DGv-00077q-E3; Wed, 21 Jul 2021 14:32:29 +0000
Received: by outflank-mailman (input) for mailman id 159385;
 Wed, 21 Jul 2021 14:32:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6DGt-00077g-Vu; Wed, 21 Jul 2021 14:32:27 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6DGt-0003xP-Rg; Wed, 21 Jul 2021 14:32:27 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6DGt-0006PP-ID; Wed, 21 Jul 2021 14:32:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6DGt-0001WZ-Hk; Wed, 21 Jul 2021 14:32:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=IHc71ZOvEOj+2d0x7S1TEuS7axE3Vn5QsQ1ew5BmGes=; b=I7vdNVcJmeTU6eStF6Bqzc6PjS
	wcEj/e/p+Ywak5qLEKo4tEwJgpZr/xK6ACWPZmIQcsbaUq1JrIfVqINQbcM4O9pxEYhGtEcB0Ii88
	t+Ujz8L5FLu4t+RBEF3oRusYxfoX44E2g4HTDMff4frY+7gme5/cte+llkfPhGSzo+YY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163859-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163859: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=96e5ad4c476e70688295b3cfb537847a3351d6fd
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 14:32:27 +0000

flight 163859 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163859/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  96e5ad4c476e70688295b3cfb537847a3351d6fd

Last test of basis   163832  2021-07-20 05:29:54 Z    1 days
Testing same since   163859  2021-07-21 01:36:55 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Michal Orzel <michal.orzel@arm.com>
  Stefano Stabellini <sstabellini@kernel.org>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   96e5ad4c47..57e761b60d  57e761b60dc92e210caf3429b8956d908ba04ae9 -> master


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:34:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:34:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159392.293199 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DIR-0007rG-4W; Wed, 21 Jul 2021 14:34:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159392.293199; Wed, 21 Jul 2021 14:34:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DIR-0007r9-0P; Wed, 21 Jul 2021 14:34:03 +0000
Received: by outflank-mailman (input) for mailman id 159392;
 Wed, 21 Jul 2021 14:34:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=fegI=MN=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m6DIP-0007r0-MQ
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:34:01 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id afe88b88-ea30-11eb-8c5c-12813bfff9fa;
 Wed, 21 Jul 2021 14:34:00 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 089B867373; Wed, 21 Jul 2021 16:33:56 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: afe88b88-ea30-11eb-8c5c-12813bfff9fa
Date: Wed, 21 Jul 2021 16:33:55 +0200
From: Christoph Hellwig <hch@lst.de>
To: Tianyu Lan <ltykernel@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>, kys@microsoft.com,
	haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
	decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com,
	bp@alien8.de, x86@kernel.org, hpa@zytor.com,
	dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
	konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com,
	sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
	davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
	martin.petersen@oracle.com, arnd@arndb.de, m.szyprowski@samsung.com,
	robin.murphy@arm.com, kirill.shutemov@linux.intel.com,
	akpm@linux-foundation.org, rppt@kernel.org,
	Tianyu.Lan@microsoft.com, thomas.lendacky@amd.com, ardb@kernel.org,
	robh@kernel.org, nramas@linux.microsoft.com, pgonda@google.com,
	martin.b.radev@gmail.com, david@redhat.com,
	krish.sadhukhan@oracle.com, saravanand@fb.com,
	xen-devel@lists.xenproject.org, keescook@chromium.org,
	rientjes@google.com, hannes@cmpxchg.org,
	michael.h.kelley@microsoft.com, iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org, vkuznets@redhat.com, brijesh.singh@amd.com,
	anparri@microsoft.com
Subject: Re: [Resend RFC PATCH V4 09/13] x86/Swiotlb/HV: Add Swiotlb bounce
 buffer remap function for HV IVM
Message-ID: <20210721143355.GA10848@lst.de>
References: <20210707154629.3977369-1-ltykernel@gmail.com> <20210707154629.3977369-10-ltykernel@gmail.com> <20210720135437.GA13554@lst.de> <8f1a285d-4b67-8041-d326-af565b2756c0@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <8f1a285d-4b67-8041-d326-af565b2756c0@gmail.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

On Wed, Jul 21, 2021 at 06:28:48PM +0800, Tianyu Lan wrote:
> dma_mmap_attrs() and dma_get_sgtable_attrs() get input virtual address
> belonging to backing memory with struct page and returns bounce buffer
> dma physical address which is below shared_gpa_boundary(vTOM) and passed
> to Hyper-V via vmbus protocol.
>
> The new map virtual address is only to access bounce buffer in swiotlb
> code and will not be used other places. It's stored in the mem->vstart.
> So the new API set_memory_decrypted_map() in this series is only called
> in the swiotlb code. Other platforms may replace set_memory_decrypted()
> with set_memory_decrypted_map() as requested.

It seems like you are indeed not using these new helpers in
dma_direct_alloc.  How is dma_alloc_attrs/dma_alloc_coherent going to
work on these systems?


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:40:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:40:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159401.293213 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DOr-00016F-Qp; Wed, 21 Jul 2021 14:40:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159401.293213; Wed, 21 Jul 2021 14:40:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DOr-000168-NV; Wed, 21 Jul 2021 14:40:41 +0000
Received: by outflank-mailman (input) for mailman id 159401;
 Wed, 21 Jul 2021 14:40:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hVq+=MN=epam.com=prvs=7836cd435a=oleksii_moisieiev@srs-us1.protection.inumbo.net>)
 id 1m6DOp-000161-MX
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:40:39 +0000
Received: from mx0a-0039f301.pphosted.com (unknown [148.163.133.242])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 28164da9-51de-4019-8145-c39e5a7e4d01;
 Wed, 21 Jul 2021 14:40:37 +0000 (UTC)
Received: from pps.filterd (m0174676.ppops.net [127.0.0.1])
 by mx0a-0039f301.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16LEVjii024686; Wed, 21 Jul 2021 14:40:36 GMT
Received: from eur01-ve1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2059.outbound.protection.outlook.com [104.47.1.59])
 by mx0a-0039f301.pphosted.com with ESMTP id 39xnbb81yu-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Wed, 21 Jul 2021 14:40:33 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com (2603:10a6:102:ea::23)
 by PA4PR03MB6942.eurprd03.prod.outlook.com (2603:10a6:102:e3::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Wed, 21 Jul
 2021 14:40:30 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c]) by PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c%8]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 14:40:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 28164da9-51de-4019-8145-c39e5a7e4d01
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=oP796EEy9T/9JbIESt31MHWR19ftTD/AOyFXsA3xAMkRruuUONNsS0dCZ5119Yjq0lsThpoGf99Dd0PFjSEIkqB+fSjg2Wjr0fU8m8x131PYc5s3Vs4hhrLyG3HIavh9tu8+ZCtXRFXfxaq38Gcb86nx3O7LxurlozTHufb46t66JAAucp6g8EL3qB81z2gGxausjEFF8wWYDSmCRmJPSdjTywJ5BISeYTTes4/mWEEz7AtKaXXVZGqCaqAnwhwPoriYzXrpvV4SoPIBn8iTMi820IgXQd28jQzCKyV2Z/JbFjwAXsKKrJLwmcgRugTDm9pE9neIUCf8Ci/Yt9DSEA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ysKhj7G1Qffb8zJBTxVn9L+4oC1dxhsRi9f5Q0kfAP8=;
 b=XIkvOBEYe6FAOc5DiEZAiWY9kBNNx8hEdd29oi4nLU+IzRNys1vW1d7xVkCj9Px+OVxleD57CV3Bfs+C7JIVULxapJ0/j6gwjLLjSkPWSVpZ5erZDHXhIsxxw9FzDgr4F8siqxQNbl3j1LBIm8d6ajcnp8aB/K6M5TItMqi4+sAlfGvm2bEocOJsQn56Iym0Jq9mpMGsiJtAXErq5wY+S0IuuerPOn2S1MhgNHWm97r9k5Sx7pktrdgjFrSyXmFYMgrpbtTynbJGBdh/TONYXkRK67TJrYXfcUFSY/3MX5eHZTA+fhlwlxv76RD1Csoy5/lfw/afWyLCTjW+G18k4Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com;
 dkim=pass header.d=epam.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ysKhj7G1Qffb8zJBTxVn9L+4oC1dxhsRi9f5Q0kfAP8=;
 b=6VGIAA5lZtAB71YOK3E5c8MaBM5rV98ztwTkL2vuebzmIN/HpG0KyG6t8E1TQ15Jm30pRNHDPht7C/i0pxdMVJpXPKA41yCEsXg7khM8qvjJqMrTNGz6PmVUXt19doPfzOcgdm2JxTup7C6ihdizYPR8sAW8+fFY0J/54cKQj9uad8BAxQ04CNJPhWbBPBCTIudSwxMAZyetmdHqzOfSriIP+Ig1CJ7vU+X/it36ECbwjsiBjSrwbx4CIgPGoOYLRBBbqHi+Ryf1v0TeIN2TpZCnOzUN44HfTZ0feP8L4+19rjQJAo97GWHLJZ17zRwzcODqLj5+ESwgnb1HFSCzBA==
From: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>
To: Julien Grall <julien@xen.org>,
        "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: Andrii Anisov <Andrii_Anisov@epam.com>,
        Stefano Stabellini
	<sstabellini@kernel.org>
Subject: Re:[arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in
 kernel config
Thread-Topic: Re:[arm] Dom0 hangs after enable KROBE_EVENTS and/or
 UPROBE_EVENTS in kernel config
Thread-Index: AQHXfga6kF2DIDySdk2Twa4+MGYJE6tNKWWUgAAlvH6AABguAIAAAJXm
Date: Wed, 21 Jul 2021 14:40:30 +0000
Message-ID: 
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
References: 
 <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>,<a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
In-Reply-To: <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=epam.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 71575808-1af5-4844-8c03-08d94c557ce7
x-ms-traffictypediagnostic: PA4PR03MB6942:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: 
 <PA4PR03MB6942638B59392F2C1A69DFA3E3E39@PA4PR03MB6942.eurprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 
 +s2Sado8EB7IUeAxDCPLzNZWz9YFFTV9ngNdQEj+HKE0TTDkQ2qs0CwCwzkaBxCEYXs2jc7ZCFXaOHaBWZ8QREOmvh9w3jlS2B5l2CUqWQr/PvjquDzWWAcfRNqvgE49XollUuMjfkwfJDnMnrBsxfDH/M/8nIVojnm3cqUbg4/HG4zhvkwKWDYsHsjetlye1BZrF9s6Gvdl2xuzvWSO1mhpdujUF9piuZWg66jGA348Ev8aKyrHOc42LW0xIGAUbzQvwCi2aXK43tmHM4n29kJX02nLXateannds/CzYjJDThmxu/h5AwetqYsrX8cO3fQPfURLw3JKVeDO1PKI4n9KH4AwpktafL3QOpq8GPL1ATdR86dH4Oud1kX2HsSUClXM+5tQQhS925aN4wqwz78VKFqZtfkuj0wOMoNmQa7fhSiZL8uBKDbYgV7s6G9/6TPPuQysexCgIqcCvyBGWKYjhbPLviOTP8cRFIQqql3aAXQnveXFyKE+6G/m1MlAkU264RnWnWBj451n5uDx1ZKaXOGL21eXEJqdDuX6O1Em5EAMKnZWNbzTpn+ufSXlzOisPl4oPeJWYA9amxbRSS/7FDXUfJUH7aeU8NVQLlyFqBi1vYG9xCcRYQLMfaSEVff4s4Ju1vNZcb4TjIPPoiynNOBvrijd+z07pTasDxm0oNdLOckni+Jq/CMvupkAeRLOwYcipUtke3lfTdKjgvuxgFfxqZ7XQB4Hon0yV3ZsHVDEjHnsrANVxU0BfdgFfhUKcq9R7oFmbamdSP9QFk0gV/fYPizLkdFLp7U57mf7TECtVFCYaoov2EyMoP2/7PnoLlS0OEWr/BOdILSg2JkiCq8LfWEgQzZIfD7DXp8=
x-forefront-antispam-report: 
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR03MB7136.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(346002)(39850400004)(366004)(396003)(4326008)(2906002)(86362001)(8676002)(19627405001)(33656002)(966005)(71200400001)(66476007)(66946007)(26005)(64756008)(83380400001)(76116006)(8936002)(166002)(52536014)(5660300002)(186003)(66556008)(66446008)(316002)(55016002)(18265965003)(478600001)(9686003)(6506007)(55236004)(7696005)(122000001)(38100700002)(54906003)(110136005)(53546011)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 
 =?iso-8859-1?Q?R7ESAKGY0TMdhfoe6AM8dZ20SaSCJ4byxC3u7C0nshZ/mx/V1yeB0dFr8S?=
 =?iso-8859-1?Q?LZrEIXT89RaWNVulkYjjcRjgCGdzKAoTpDE7fW9O0aeKrryko3bgoN5Q6m?=
 =?iso-8859-1?Q?uJoSWE18QuoTYtR1RHp3sv8nouu55WqiA8qLmhjSOxsb908sefbLCoWCar?=
 =?iso-8859-1?Q?2HDXXooRe3JHpKDv/0YFdTCXKJe5s85ITIDW9zOUbZBiFQzpyC7GdZVhSH?=
 =?iso-8859-1?Q?4+bnsjQVTh42iamAfu2C/AC+Ux8IQGjzzj+K4zApJ9KvxpYbRXkkSJ3Sju?=
 =?iso-8859-1?Q?loBJoxvZjgXnX3W3cXfjm54k68bhl9m2oEwcn/PpYljHaiWhP5HbZAx0K8?=
 =?iso-8859-1?Q?V9uaiJ92cZVnwL9WF/6+GRyNtzhcfLIj/YBTW6IoPtITBIetkTTuXO0GUi?=
 =?iso-8859-1?Q?39Mjo9DCtj5m1ZzuvoboVFtDCqdsJSWkqi6xB/z3SLlCTskSp1/kUJ7jxN?=
 =?iso-8859-1?Q?hoJTLQT1yRa4VDznpKeu10KEGrxBjQkvfaqZBZAeZqjFM0D0Kb0YF+UmCC?=
 =?iso-8859-1?Q?+fd7tvkbs+BeYARew3aM246tWq9CNwvS/9/uBOkvE7h6MczN5NEsEqbrwW?=
 =?iso-8859-1?Q?YC/cEewnJvmr2cC0PyusdXUxcqtj1egajrpC/csJudDxQoearKWtqRDzHF?=
 =?iso-8859-1?Q?4Ndr4VL+mgaxFL6Yyi7oL58OS5HSw3Ae6P/h2uAADI9qJA8QLwkCkA83xD?=
 =?iso-8859-1?Q?+8BxCgWkvsjA7hIxzlqhj3pfAirpfBnO3vt4tKBCKu13gnh6xaOHht36vr?=
 =?iso-8859-1?Q?HklZ0oSQdd7Zxrmg9R0fyEX7UdxYDqByp1u5JOt1gmmHr91pJSiefuOu3+?=
 =?iso-8859-1?Q?1woZKIPQ/jFWZdLoDy77xySvnQ5LdjpVmFBTMAMrVobL+7AUDYRoU3TKIN?=
 =?iso-8859-1?Q?c/pd/To7e8Sai8lrrvRH09IwPtcLg++LbfAcgTt1OZA2nDi6mebXm7MUF/?=
 =?iso-8859-1?Q?IFnH3uAo0BJsd1WTm14xia4W+zuWftXmZoKss5oEr9so5SxLQ2U15oxetb?=
 =?iso-8859-1?Q?9/wqWygMf+oASqTQW2VTrGMY86uIuepw/jIgtpuw4YYwUR6iHflMYQNB0O?=
 =?iso-8859-1?Q?/qrckcsLELkksEUznMuqngw81p9PeEWCJxxnEeK6tmJ2B8jePDrMPKn7EH?=
 =?iso-8859-1?Q?111PBGuhK+If5RUGTNMtYgM++7Jylp19Y1PmSYAAzQcpC1qbAvlOQtIFjU?=
 =?iso-8859-1?Q?sWS2GVPb9S6tVrbbJ5rGIXFrLhrZDCTiVC2tEvnaDH1hP6iFPWzSKw+f7M?=
 =?iso-8859-1?Q?Tn4JtvihK53xSgwu21gI7zFfQxqF8I5Fd34MtFzaDNlSu6WyqP5iZPrD84?=
 =?iso-8859-1?Q?K5tBuydVNMB4VV2PSVgUOvV7OkVIaSgv6glHTw3RJ9s8pSA=3D?=
Content-Type: multipart/alternative;
	boundary="_000_PA4PR03MB7136452DF9961BC283718F4BE3E39PA4PR03MB7136eurp_"
MIME-Version: 1.0
X-OriginatorOrg: epam.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PA4PR03MB7136.eurprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 71575808-1af5-4844-8c03-08d94c557ce7
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jul 2021 14:40:30.0568
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 4YyBCPmac3GhIGG03qKLQTN5BdiL7JxxrZ1rrj/4cWOz8ER1U3nPMx4rMH+CL/cw8TJgNvz1KvDDbMlP4k57e/1zKNeLKTNTifxHsAK3QGs=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR03MB6942
X-Proofpoint-GUID: VpECZKQxRgHZg4LTktGltPEF2u46ohdN
X-Proofpoint-ORIG-GUID: VpECZKQxRgHZg4LTktGltPEF2u46ohdN
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790
 definitions=2021-07-21_09:2021-07-21,2021-07-21 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0
 malwarescore=0 phishscore=0 adultscore=0 spamscore=0 mlxscore=0
 priorityscore=1501 mlxlogscore=999 suspectscore=0 bulkscore=0
 impostorscore=0 clxscore=1011 classifier=spam adjust=0 reason=mlx
 scancount=1 engine=8.12.0-2104190000 definitions=main-2107210084

--_000_PA4PR03MB7136452DF9961BC283718F4BE3E39PA4PR03MB7136eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hello Julien,

Thank you for the quick response.
Please answers below.

________________________________
From: Julien Grall <julien@xen.org>
Sent: Wednesday, July 21, 2021 4:09 PM
To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>; xen-devel@lists.xenproj=
ect.org <xen-devel@lists.xenproject.org>
Cc: Andrii Anisov <Andrii_Anisov@epam.com>; Stefano Stabellini <sstabellini=
@kernel.org>
Subject: Re: Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in k=
ernel config

>(+ Stefano)

>On 21/07/2021 12:44, Oleksii Moisieiev wrote:
>> Hello,

>Hi,

>Thanks for the report.

>I nearly miss this e-mail because the title doesn't suggest this is an
>Arm and I wasn't CCed. In future, would you be able to CC the Arm
>maintainers (you can find them in MAINTAINERS) and mention arm in the titl=
e?

I'm sorry for inconvenience, fixed topic and added arm maintainers to CC.

>> I've got a problem that Dom0 hangs without any output from kernel once I
>> enable CONFIG_KPROBE_EVENTS and/or CONFIG_UPROBE_EVENTS in dom0 kernel.
>> Everything works fine when kprobe/uprobe events are disabled.

>By disabled, do you mean compile out?

Yes. Just changed .config lines:
CONFIG_KPROBE_EVENTS=3Dy
CONFIG_UPROBE_EVENTS=3Dy
to
#CONFIG_KPROBE_EVENTS is not set
#CONFIG_UPROBE_EVENTS is not set
and recompiled kernel.

>>
>> My setup:
>> Board: H3ULCB Kinfisher board
>> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15)
>> https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!G=
F_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks=
6cbo7Ri$ [github[.]com]
>> <https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!=
GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIak=
s6cbo7Ri$ [github[.]com]>;
>> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576 (v5.10-rc4)

>Hmmm... 5.10 was released a few months ago and there are probably a few
>stable release for the version. Can you try the latest 5.10 stable?

Switched to tag v5.10 rev: 2c85ebc57b3e of https://github.com/torvalds/linu=
x.git
and got the same problem, that I see no output from kernel. All tests were =
done with earlycon parameter set in the kernel cmdline.

>>
>> https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF=
_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks2=
9w69MC$ [github[.]com]
>> <https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!G=
F_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks=
29w69MC$ [github[.]com]>;
>>
>> kernel config: see attached;
>>
>> dtb: see attached;

>Please avoid large attachment as they will be duplicated on every
>mailbox. Instead, in the future, please upload them somewhere (your own
>webserve, pastebin...) and provide a link in the e-mail.

I'm sorry for that.

>>
>>
>> If kprobe/uprobe events are enabled - I see no output after xen switched
>> input to Dom0, if disabled - system boots up successfully.
>The console subsystem tends to be enabled quite late in the boot
>process. So this may mean a panic during early boot.

>If you haven't done yet, I would suggest to add earlycon=3Dxenboot on the
>dom0 command line. This will print some messages during early boot.
>ing.

All tests were done with earlycon parameter set in the kernel command line =
(xen, dom0-bootargs).

>>
>> Both configs work fine when I boot without xen.
>>
>>
>> Dom0 information from Xen console shows that only one CPU works, and PC
>> stays in "__arch_counter_get_cntvct" function on read_sysreg call. //
>>
>> I did further investigation and found that kernel 5.4 doesn't have such
>> kind of issues.
>> After bisecting kernel,between 5.10 and 5.4, I found that output
>> disappeared on commit:
>>
>> 76085aff29f585139a37a10ea0a7daa63f70872c

> From the information you provided so far, I am a bit confused how this
>could be the source of the problem. But given this is not the latest
>5.10, I will wait for you to confirm the bug is still present before
>providing more input.

I was confused with this commit either. As I mentioned above, I've checked =
with the latest stable 5.10 kernel and still got the same problem.

>>
>>
>> Another issue, which was revealed after I got kernel output was kernel
>> oops with message that CPU is in inconsistent state.
>>
>> [0.415612] EFI services will not be available.
>>
>> [0.420267] smp: Bringing up secondary CPUs ...
>>
>> [0.425185] Detected PIPT I-cache on CPU1
>>
>> [0.425267] Xen: initializing cpu1
>>
>> [0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411fd073]
>>
>> [0.425815] Detected PIPT I-cache on CPU2
>>
>> [0.425879] Xen: initializing cpu2
>>
>> [0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411fd073]
>>
>> [0.426362] Detected PIPT I-cache on CPU3
>>
>> [0.426425] Xen: initializing cpu3
>>
>> [0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411fd073]
>>
>> [0.426537] smp: Brought up 1 node, 4 CPUs
>>
>> [0.472807] SMP: Total of 4 processors activated.
>>
>> [0.477551] CPU features: detected: 32-bit EL0 Support
>>
>> [0.482745] CPU features: detected: CRC32 instructions
>>
>> [0.499470] ------------[ cut here ]------------
>>
>> [0.504034] CPU: CPUs started in inconsistent modes

>Looking at Linux 5.7 code, this is printed when not all the CPUs are
>booted in the same mode (i.e. EL1 or EL2).

>This is quite odd. So let me ask a question first, did you see this
>error during the bisection or on the latest 5.7?

Switched to kernel v5.7 tag, rev:3d77e6a8804.
On 5.7 kernel I can see printk output, but getting CPUs started in inconsis=
tent modes error.
Also, I tried with hmp-unsafe=3Dfalse ( in xen cmdline, so only 0-3 CPU wer=
e enabled. And still got the same issue.


>Cheers,

>--
>Julien Grall

--_000_PA4PR03MB7136452DF9961BC283718F4BE3E39PA4PR03MB7136eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
Hello&nbsp;Julien,</div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
Thank you for the quick&nbsp;response.</div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
Please answers&nbsp;below.</div>
<div id=3D"appendonsend"></div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font face=3D"Calibri, sans-serif" co=
lor=3D"#000000" style=3D"font-size:11pt"><b>From:</b> Julien Grall &lt;juli=
en@xen.org&gt;<br>
<b>Sent:</b> Wednesday, July 21, 2021 4:09 PM<br>
<b>To:</b> Oleksii Moisieiev &lt;Oleksii_Moisieiev@epam.com&gt;; xen-devel@=
lists.xenproject.org &lt;xen-devel@lists.xenproject.org&gt;<br>
<b>Cc:</b> Andrii Anisov &lt;Andrii_Anisov@epam.com&gt;; Stefano Stabellini=
 &lt;sstabellini@kernel.org&gt;<br>
<b>Subject:</b> Re: Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVEN=
TS in kernel config</font>
<div>&nbsp;</div>
</div>
<div><font size=3D"2">
<div class=3D"PlainText" style=3D"font-size: 11pt;">&gt;(+ Stefano)<br>
<br>
&gt;On 21/07/2021 12:44, Oleksii Moisieiev wrote:<br>
&gt;&gt; Hello,<br>
<br>
&gt;Hi,<br>
<br>
&gt;Thanks for the report.<br>
<br>
&gt;I nearly miss this e-mail because the title doesn't suggest this is an =
<br>
&gt;Arm and I wasn't CCed. In future, would you be able to CC the Arm <br>
&gt;maintainers (you can find them in MAINTAINERS) and mention arm in the t=
itle?<br>
<br>
I'm sorry for inconvenience, fixed topic and added arm maintainers to CC.<b=
r>
<br>
&gt;&gt; I've got a problem that Dom0 hangs without any output from kernel =
once I <br>
&gt;&gt; enable CONFIG_KPROBE_EVENTS and/or CONFIG_UPROBE_EVENTS in dom0 ke=
rnel.<br>
&gt;&gt; Everything works fine when kprobe/uprobe events are disabled.<br>
<br>
&gt;By disabled, do you mean compile out?<br>
<br>
Yes. Just changed .config lines:</div>
<div class=3D"PlainText" style=3D"font-size: 11pt;">CONFIG_KPROBE_EVENTS=3D=
y</div>
<div class=3D"PlainText" style=3D"font-size: 11pt;">CONFIG_UPROBE_EVENTS=3D=
y</div>
<div class=3D"PlainText" style=3D"font-size: 11pt;">to</div>
<div class=3D"PlainText" style=3D"font-size: 11pt;"><span class=3D"PlainTex=
t" style=3D"margin:0px;caret-color:rgb(0, 0, 0)">#CONFIG_KPROBE_EVENTS is n=
ot set</span><br>
<span class=3D"PlainText" style=3D"margin:0px;caret-color:rgb(0, 0, 0)">#CO=
NFIG_UPROBE_EVENTS is not set</span></div>
<div class=3D"PlainText" style=3D"font-size: 11pt;">and recompiled kernel.<=
/div>
</font>
<div><font size=3D"2"><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; My setup:</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; Board: H3ULCB Kinfisher board</sp=
an><br>
<span style=3D"font-size: 11pt;">&gt;&gt; Xen: revision dba774896f7dd74773c=
14d537643b7d7477fefcd (stable-4.15)
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><a href=3D"https://urldefe=
nse.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NH=
C2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$" style=3D=
"font-size: 11pt;">https://urldefense.com/v3/__https://github.com/xen-proje=
ct/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8=
E8JBp8Qri3haIaks6cbo7Ri$</a><span style=3D"font-size: 11pt;">
 [github[.]com] </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; &lt;<a href=3D""></a>https://urld=
efense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m=
4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$ [githu=
b[.]com]&gt;;</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; Kernel: revision 09162bc32c880a79=
1c6c0668ce0745cf7958f576&nbsp;(v5.10-rc4)</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt;Hmmm... 5.10 was released a few months=
 ago and there are probably a few
</span><br>
<span style=3D"font-size: 11pt;">&gt;stable release for the version. Can yo=
u try the latest 5.10 stable?</span><br>
<br>
<span style=3D"font-size: 11pt;">Switched to tag v5.10 rev:&nbsp;</span></f=
ont><font face=3D"Calibri, Arial, Helvetica, sans-serif" size=3D"3">2c85ebc=
57b3e of&nbsp;</font><span style=3D"color: rgb(0, 0, 0); font-family: Calib=
ri, Arial, Helvetica, sans-serif; font-size: 12pt;">https://github.com/torv=
alds/linux.git</span><font face=3D"Calibri, Arial, Helvetica, sans-serif" s=
ize=3D"3"><br>
</font><font size=3D"2"><span style=3D"">and got the same problem, that I s=
ee no output from kernel. All tests were done with earlycon parameter set i=
n the kernel cmdline.</span></font><br>
<font size=3D"2"><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><a href=3D"https://urldefe=
nse.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC=
2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$" style=3D"=
font-size: 11pt;">https://urldefense.com/v3/__https://github.com/torvalds/l=
inux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8=
JBp8Qri3haIaks29w69MC$</a><span style=3D"font-size: 11pt;">
 [github[.]com] </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; &lt;<a href=3D""></a>https://urld=
efense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4=
NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$ [github=
[.]com]&gt;;</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; kernel config: see attached;</spa=
n><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; dtb: see attached;</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt;Please avoid large attachment as they =
will be duplicated on every
</span><br>
<span style=3D"font-size: 11pt;">&gt;mailbox. Instead, in the future, pleas=
e upload them somewhere (your own
</span><br>
<span style=3D"font-size: 11pt;">&gt;webserve, pastebin...) and provide a l=
ink in the e-mail.</span></font></div>
<div><span style=3D"font-size: 14.666666984558105px;"><br>
</span></div>
<div><span style=3D"font-size: 14.666666984558105px;">I'm sorry for that.</=
span></div>
<div><span style=3D"font-size: 14.666666984558105px;"><br>
</span><span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; If kprobe/uprobe events are enabl=
ed - I see no output after xen switched
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; input to Dom0, if disabled - syst=
em boots up successfully.</span><br>
<span style=3D"font-size: 11pt;">&gt;The console subsystem tends to be enab=
led quite late in the boot
</span><br>
<span style=3D"font-size: 11pt;">&gt;process. So this may mean a panic duri=
ng early boot.</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt;If you haven't done yet, I would sugge=
st to add earlycon=3Dxenboot on the
</span><br>
<span style=3D"font-size: 11pt;">&gt;dom0 command line. This will print som=
e messages during early boot.</span><br>
<span style=3D"font-size: 11pt;">&gt;ing.</span><br>
<br>
All tests were done with earlycon parameter set in the kernel command line =
(xen, dom0-bootargs).</div>
<div><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; Both configs work fine when I boo=
t without xen.</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; Dom0 information from Xen console=
 shows that only one CPU works, and PC
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; stays in &quot;__arch_counter_get=
_cntvct&quot; function on read_sysreg call. //</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; I did further investigation and f=
ound that kernel 5.4 doesn't have such
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; kind of issues.</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; After bisecting kernel,between 5.=
10 and 5.4, I found that output
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; disappeared on commit:</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; 76085aff29f585139a37a10ea0a7daa63=
f70872c</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt; From the information you provided so =
far, I am a bit confused how this
</span><br>
<span style=3D"font-size: 11pt;">&gt;could be the source of the problem. Bu=
t given this is not the latest
</span><br>
<span style=3D"font-size: 11pt;">&gt;5.10, I will wait for you to confirm t=
he bug is still present before
</span><br>
<span style=3D"font-size: 11pt;">&gt;providing more input.</span><br>
<br>
I was confused with this commit either. As I mentioned above, I've checked =
with the latest stable 5.10 kernel and still got the same problem.<br>
<br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; Another issue, which was revealed=
 after I got kernel output was kernel
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; oops with message that CPU is in =
inconsistent state.</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.415612] EFI services will not =
be available.</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.420267] smp: Bringing up secon=
dary CPUs ...</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.425185] Detected PIPT I-cache =
on CPU1</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.425267] Xen: initializing cpu1=
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.425292] CPU1: Booted secondary=
 processor 0x0000000001 [0x411fd073]</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.425815] Detected PIPT I-cache =
on CPU2</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.425879] Xen: initializing cpu2=
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.425899] CPU2: Booted secondary=
 processor 0x0000000002 [0x411fd073]</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.426362] Detected PIPT I-cache =
on CPU3</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.426425] Xen: initializing cpu3=
</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.426444] CPU3: Booted secondary=
 processor 0x0000000003 [0x411fd073]</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.426537] smp: Brought up 1 node=
, 4 CPUs</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.472807] SMP: Total of 4 proces=
sors activated.</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.477551] CPU features: detected=
: 32-bit EL0 Support</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.482745] CPU features: detected=
: CRC32 instructions</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.499470] ------------[ cut here=
 ]------------</span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; </span><br>
<span style=3D"font-size: 11pt;">&gt;&gt; [0.504034] CPU: CPUs started in i=
nconsistent modes</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt;Looking at Linux 5.7 code, this is pri=
nted when not all the CPUs are
</span><br>
<span style=3D"font-size: 11pt;">&gt;booted in the same mode (i.e. EL1 or E=
L2).</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt;This is quite odd. So let me ask a que=
stion first, did you see this
</span><br>
<span style=3D"font-size: 11pt;">&gt;error during the bisection or on the l=
atest 5.7?</span><br>
<span style=3D"caret-color:rgb(0, 0, 0);font-family:Calibri, Arial, Helveti=
ca, sans-serif;background-color:rgb(255, 255, 255);display:inline !importan=
t"><br>
</span></div>
<div><span style=3D"caret-color:rgb(0, 0, 0);font-family:Calibri, Arial, He=
lvetica, sans-serif;background-color:rgb(255, 255, 255);display:inline !imp=
ortant">Switched to kernel v5.7 tag, rev:3d77e6a8804.</span></div>
<div><font face=3D"Calibri, Arial, Helvetica, sans-serif">On 5.7 kernel I c=
an see printk output, but getting&nbsp;<span style=3D"caret-color:rgb(0, 0,=
 0);font-family:&quot;Segoe UI&quot;, &quot;Segoe UI Web (West European)&qu=
ot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSystemFont, Roboto, &quot=
;Helvetica Neue&quot;, sans-serif;font-size:14.666666984558105px;background=
-color:rgb(255, 255, 255);display:inline !important">CPUs
 started in inconsistent modes error.</span></font></div>
<div><span style=3D"font-size: 14.666666984558105px;">Also, I tried with hm=
p-unsafe=3Dfalse ( in xen cmdline, so only 0-3 CPU were enabled. And still =
got the same issue.</span></div>
<div><span style=3D"font-size: 14.666666984558105px;"><br>
</span></div>
<div><span style=3D"font-size: 14.666666984558105px;"><br>
</span><span style=3D"font-size: 11pt;">&gt;Cheers,</span><br>
<br>
<span style=3D"font-size: 11pt;">&gt;-- </span><br>
<span style=3D"font-size: 11pt;">&gt;Julien Grall</span><br>
</div>
</div>
</body>
</html>

--_000_PA4PR03MB7136452DF9961BC283718F4BE3E39PA4PR03MB7136eurp_--


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:47:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:47:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159408.293226 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DV1-0001vQ-NQ; Wed, 21 Jul 2021 14:47:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159408.293226; Wed, 21 Jul 2021 14:47:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DV1-0001vJ-JF; Wed, 21 Jul 2021 14:47:03 +0000
Received: by outflank-mailman (input) for mailman id 159408;
 Wed, 21 Jul 2021 14:47:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6DV0-0001vC-VT
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:47:02 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6DUy-0004AY-Ep; Wed, 21 Jul 2021 14:47:00 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6DUy-0002Am-8d; Wed, 21 Jul 2021 14:47:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=mIhEhIM1OV7Gb+ZMrTaJMWMEIGHVNONpqYbwxI8BjqM=; b=o7tSCWmuOh0CYxzj8KFpwiCmmV
	3fliNIuEDZZQnVDPnyVTn15LFoIJID/MZ4yk/mK2/DnK5d5xQ8seVqYVRgBP1hGDYNfEGZN6ofntZ
	8wXJ8v4imHfrEHK/jxbVuwUy6YB2eXBbFMS1Ki9V9ZNnDD/9HXENtfxQ8Uc8ezocFa0M=;
Subject: Re: [PATCH RESEND 2/2] gitlab-ci: add an ARM32 qemu-based smoke test
To: Stefano Stabellini <sstabellini@kernel.org>, cardoe@cardoe.com,
 wl@xen.org, andrew.cooper3@citrix.com
Cc: xen-devel@lists.xenproject.org,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
References: <20210714004854.31135-2-sstabellini@kernel.org>
From: Julien Grall <julien@xen.org>
Message-ID: <2aaddfc5-0502-fd0a-6393-63a17c7f6778@xen.org>
Date: Wed, 21 Jul 2021 15:46:58 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210714004854.31135-2-sstabellini@kernel.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 14/07/2021 01:48, Stefano Stabellini wrote:
> Add a minimal ARM32 smoke test based on qemu-system-arm, as provided by
> the test-artifacts qemu container. The minimal test simply boots Xen
> (built from previous build stages) and Dom0. The test is fetching the
> Dom0 kernel and initrd from Debian Jessie: they work just fine and this
> way we don't have to maintain a build for them too.

Debian Jessie is not in LTS anymore. I am entirely sure how long this 
will still be available (older release seems to have disappeared). I 
would suggest to use Bullseye or at least Buster.

> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> ---
>   automation/gitlab-ci/test.yaml         | 23 ++++++++
>   automation/scripts/qemu-smoke-arm32.sh | 72 ++++++++++++++++++++++++++
>   2 files changed, 95 insertions(+)
>   create mode 100755 automation/scripts/qemu-smoke-arm32.sh
> 
> diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
> index d3b670b156..7f942dd64b 100644
> --- a/automation/gitlab-ci/test.yaml
> +++ b/automation/gitlab-ci/test.yaml
> @@ -71,6 +71,29 @@ qemu-smoke-arm64-gcc:
>       - /^coverity-tested\/.*/
>       - /^stable-.*/
>   
> +qemu-smoke-arm32-gcc:
> +  stage: test
> +  image: registry.gitlab.com/xen-project/xen/${CONTAINER}
> +  variables:
> +    CONTAINER: debian:unstable-arm64v8
> +  script:
> +    - ./automation/scripts/qemu-smoke-arm32.sh 2>&1 | tee qemu-smoke-arm32.log
> +  dependencies:
> +    - debian-unstable-gcc-arm32
> +    - qemu-system-aarch64-6.0.0-arm32-export
> +  artifacts:
> +    paths:
> +      - smoke.serial
> +      - '*.log'
> +    when: always
> +  tags:
> +    - arm64
> +  except:
> +    - master
> +    - smoke
> +    - /^coverity-tested\/.*/
> +    - /^stable-.*/
> +
>   qemu-smoke-x86-64-gcc:
>     stage: test
>     image: registry.gitlab.com/xen-project/xen/${CONTAINER}
> diff --git a/automation/scripts/qemu-smoke-arm32.sh b/automation/scripts/qemu-smoke-arm32.sh
> new file mode 100755
> index 0000000000..4126be2042
> --- /dev/null
> +++ b/automation/scripts/qemu-smoke-arm32.sh
> @@ -0,0 +1,72 @@
> +#!/bin/bash
> +
> +set -ex
> +
> +# Install QEMU

The bits below doesn't seem to install QEMU. Do you mean "prepare the 
image"?

> +export DEBIAN_FRONTENT=noninteractive
> +apt-get -qy update
> +apt-get -qy install --no-install-recommends device-tree-compiler \
> +                                            curl
> +
> +cd binaries
> +curl -fsSLO http://http.us.debian.org/debian/dists/jessie/main/installer-armhf/current/images/netboot/vmlinuz
> +curl -fsSLO http://http.us.debian.org/debian/dists/jessie/main/installer-armhf/current/images/netboot/initrd.gz

OOI, does this mean all our instances are running in the US?


> +
> +kernel=`stat -L --printf="%s" vmlinuz`
> +initrd=`stat -L --printf="%s" initrd.gz`
> +

NIT: I would suggest to add a comment similar to:

# For Xen, we need a couple of more node. Dump the DT from QEMU and add them

> +# XXX QEMU looks for "efi-virtio.rom" even if it is unneeded

Is this a problem with the package?

> +curl -fsSLO https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom
> +./qemu-system-arm \
> +   -machine virt-6.0 \
> +   -machine virtualization=true \
> +   -smp 4 \
> +   -m 2048 \
> +   -serial stdio \
> +   -monitor none \
> +   -display none \
> +   -machine dumpdtb=virt.dtb
> +
> +dtc -I dtb -O dts virt.dtb > virt.dts

IIRC, Alex was working on add multiboot support in QEMU. Do you know 
what's the state?

> +
> +cat >> virt.dts << EOF
> +/ {
> +	chosen {
> +		#address-cells = <0x2>;
> +		#size-cells = <0x2>;
> +		stdout-path = "/pl011@9000000";
> +        xen,xen-bootargs = "console=dtuart dtuart=/pl011@9000000 dom0_mem=1G dom0_max_vcpus=1 bootscrub=0";

Given that QEMU will expose 4 CPUs, any reason to limit dom0 to 1?

> +		xen,dom0-bootargs = "console=tty0 console=hvc0 earlyprintk clk_ignore_unused root=/dev/ram0 rdinit=/bin/sh init=/bin/sh";
> +		dom0 {
> +			compatible = "xen,linux-zimage", "xen,multiboot-module";
> +			reg = <0x0 0x1000000 0x0 $kernel>;
> +		};
> +        dom0-ramdisk {
> +			compatible = "xen,linux-initrd", "xen,multiboot-module";
> +			reg = <0x0 0x3200000 0x0 $initrd>;
> +		};
> +	};
> +};
> +EOF
> +dtc -I dts -O dtb virt.dts > virt.dtb
> +
> +rm -f smoke.serial
> +set +e
> +timeout -k 1 240 \
> +./qemu-system-arm \
> +   -machine virt-6.0 \
> +   -machine virtualization=true \
> +   -smp 4 \
> +   -m 2048 \

Given seem to be a bit wasteful (and will definitely slow down Xen 
boot). As this is a smoke, can we consider to drop to 512?

> +   -serial stdio \
> +   -monitor none \
> +   -display none \
> +   -dtb virt.dtb \
> +   -no-reboot \
> +   -kernel ./xen \
> +   -device loader,file=./vmlinuz,addr=0x1000000 \
> +   -device loader,file=./initrd.gz,addr=0x3200000 |& tee smoke.serial
> +
> +set -e
> +(grep -q "^BusyBox" smoke.serial) || exit 1

So this look for "BusyBox" anywhere in the log. What if there is a crash 
just after "BusyBox"? Is there something different we can grep?

> +exit 0 >

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:49:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:49:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159413.293238 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DXT-0002gZ-4J; Wed, 21 Jul 2021 14:49:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159413.293238; Wed, 21 Jul 2021 14:49:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6DXT-0002gS-1E; Wed, 21 Jul 2021 14:49:35 +0000
Received: by outflank-mailman (input) for mailman id 159413;
 Wed, 21 Jul 2021 14:49:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=NGKG=MN=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m6DXS-0002gM-3Z
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:49:34 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 37294502-cbcd-4a31-9b48-f2c10a7b7a65;
 Wed, 21 Jul 2021 14:49:32 +0000 (UTC)
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur05lp2169.outbound.protection.outlook.com [104.47.17.169])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-6-SeuUDoSkPm-at2V8P_006g-1; Wed, 21 Jul 2021 16:49:30 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Wed, 21 Jul
 2021 14:49:29 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 14:49:29 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 FR2P281CA0012.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.13 via Frontend Transport; Wed, 21 Jul 2021 14:49:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 37294502-cbcd-4a31-9b48-f2c10a7b7a65
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626878971;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=oMwdR2HUqYEVibwbAEUWwZ4aC+hMXmOtWp0nAWRqgeE=;
	b=moFsriBTcQzl7vsrtD78TWnQ8+ABuRRtWdcjdTh3K3d/jIlxsyGrkcfDUpGxFUKt8sBIsA
	pJX2qPTT/YJjCTtlQ78ZNx/RSS8HJoT5Md9fsG0iNrgmtcPgLLyWIUe3TQG8BLO57zVYdY
	Qck5UCdX7+pvv7033P7KeO4CaeAQwa0=
X-MC-Unique: SeuUDoSkPm-at2V8P_006g-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TaFY9whsouvz6hI1vXk12Cy0Q0L7B7Bldve8uTEHX/cVfD/k+BfpVgXJuKRlhT/hsXCwG0XtjEaMGD7Ci74VMIhGc0YDDHGvGDMPmj1D6KZg0Lr1d/x0wKG2za3h7uH2AmAC2FG/CbYOatyCd0KokIM4y8iR7Aqhf5ol88wNXH9VCCHDDvLqy7oMZOksQpQ88/52fLgwF5wyq1aUAKjdFfN/Z3fX8hQDa+EvkyA9kIgDquHeJiIb2bsr7KX9hSdRnLs9WpLToE12xARbrYNZ23z6E6gbOg8kNPyOaaJ9z3zzypBdZlypvosRa2qmpZoYRP6mVIHCEKMCpUosZh7WDw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oMwdR2HUqYEVibwbAEUWwZ4aC+hMXmOtWp0nAWRqgeE=;
 b=d7BEWwHKW4yM9LKFXAUbEfnF/GFV3rD/AW9LL20iaN4DPhRrV32QRqNCHUZnI1tuleBexTloeIgyAxOoooF51ot8uM3eKTQbeiUl6+v6wUG5tfpp7JhvGVZ/ChM3r3IVPUv7OmZqhOnkvIYW1usQE7+3kzr8cVxi9AES/gOWIHPdhG0m1vp0jAQekEGO7X5SF8Wn79nZ4m2bAoRKvFGzZoMgkH/gn6sftzL8smHTzBEubCtktWu7x0HSvlAxcRt/HD1sChu8YRpaZcU2E1S2oiUOz2Fr+pYKdmRH/0n/DM8owSIiWyrxUAFu0kN/ZpVhkaCixAZHjgipctS1uACENw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072
 nents:13
To: Andy Smith <andy@strugglers.net>
Cc: xen-devel@lists.xenproject.org
References: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
 <c3d7f7c7-0231-dba2-344f-e2e3588e0cab@suse.com>
 <20210721141942.tnxyfpt7qttzjooo@bitfolk.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <acc3c000-3d62-d91d-3ad7-0e0b460f4b0f@suse.com>
Date: Wed, 21 Jul 2021 16:49:26 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210721141942.tnxyfpt7qttzjooo@bitfolk.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR2P281CA0012.DEUP281.PROD.OUTLOOK.COM
 (2603:10a6:d10:a::22) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0fe50552-b2f3-4fdd-03a9-08d94c56be13
X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5165FA5BF9ED59D81ECF4C41B3E39@VI1PR04MB5165.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	TnBOjGcybj1B1wZJjg3pFt8kZOXb8pmEu6caRJiBenoL24IgZii+2xMmmAYd5+L/IVX7HP0KItV5B5l6BnZmREQkfhsNJqOxmjFq5aEKmxwIS/ISiFI4+QQXhVFq5W+6JU/3npm5YfZk9K7n9zruThhR+KDIn3AnJfRFaWiz8jYDRJEfjzapGRsG+/e48UIl8XjDc0t/gDa3i/lWy3+UYQhZzh5Oa3MHICuXNHYVY5IZlCLQ0NpDTyt1u9ZlR7gIPjYDLvIygnBlaBS36NjY/GGoRIW01vo3rqI1+N4Oy0ZkQlCgE9eEZHY+UhHITUiWxjckTE+QN2tWCITAGj4DtzTZ8QvGvta6RzuYzMSxETwXVMOTU7/prB18XbwFYttQNbIO2TXRFJW5/DxHulzV1tWsfDShL/fu3mdib4+td5fVmuXj8LBK3A0i8WRWlu22jKfgC+13XuYyvlICLyZrJAsYmsNstUk+fZhpEbxBKGuPQyy9WAm71ULtTuD2y6DXsb7Rsx+z0nX2xxbzunA0TTHkzTVk1zVvy1K7KPmpkV0pCnxvYNApexsuuExrqx4woahkySM9Y0YLy8Mk64bQOu5seQ4QJMsbQM5C7QGbxzcUi+8TyXDKx0Rp5b6fw0yjnOe4CSrgcNM9VZu6+Q1gqVE891A7RIV6mIy4GaXrWdzBJ1lxK/UL7G0Rau7izUihX3coV9HBEDoEF9Jh4WB8lS5FJbVFrUn2eEl8wMb+zdKYSAI20JMMG0N9bdpdG8U2gkXm+TpPAGymWcwNqvN92fO0RNaEkTfUVRSHdjqgQZDTTJdnz6xMVCQB8yTutIyD
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(376002)(366004)(346002)(39860400002)(396003)(186003)(16576012)(478600001)(316002)(4326008)(6916009)(83380400001)(2906002)(8936002)(6486002)(31686004)(36756003)(38100700002)(8676002)(966005)(66476007)(31696002)(66556008)(86362001)(66946007)(53546011)(26005)(2616005)(5660300002)(956004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	=?utf-8?B?QnB3NEhqcFdrR0hUQ1FIV0lVV3ErdmhOdXFXYW9KNGt6YW9sNVJnM2JUdTVu?=
 =?utf-8?B?TnJCTktlUUxBdWN6dTZZVmVWdExsVmFLaHdIazQwTmI5ZkV1M3NMSWRDUHB5?=
 =?utf-8?B?UjgvYWZTSkZsb01JUU5rbVFhR1NLSTJLZlY2WGxwYUhkY3g5akJCQk53b3F2?=
 =?utf-8?B?UW55MnRsTWNOSUdYaU5zYm53Y25tWlFKWmlYWVNvZjRUbDd3cFhmZVZvb3Y5?=
 =?utf-8?B?Wi9xT3hVU2UxdWt1OGR2Mzd2emd2UVJqKzdmZklpYnNnYVEzMStQNkhEb2U5?=
 =?utf-8?B?OEJxLzlyTGZpamZUQnM5N21pdkk2eXUxVUdvSHcxOHZ4T2RkbHdhNEJiQ29u?=
 =?utf-8?B?djlJcjB3TFFaVytTVkc2TURRUGxjUkRTd1BXejh5V3A3RjRRcld2cmYyMGlF?=
 =?utf-8?B?SU54dk1hMEFoYkRCOHpVekpHRkFkd1hOMUJXSkNhaEZmVHd2WXFGeit3MUVM?=
 =?utf-8?B?RWtSRW1IZSsvTTZIaklNa2tiV3ZnQVpDRXByWlNUa1Q4WngxRGlkdFNCNFhW?=
 =?utf-8?B?ek9NdXZodTUrQW96dWt4S0tjWWZnbVlISHlaK1Foa2RxRm9OVDROTjBZbUVX?=
 =?utf-8?B?RHhRWVNKcUI3akc3d0VCdlBZeEVndmYvN09DU3YvTWZITE5SMU5JeEJpN2RI?=
 =?utf-8?B?KzFGYlA5SHZBYTAydStjRytXZlZFbHR5bC9nKzVOVmtJK2tIcStpZXgzaVdn?=
 =?utf-8?B?ODF1U3hDRllIcW1RSGFPY29hRllDSG84M3VEcnFSK0dBSjlUUTdtcjJmYVlL?=
 =?utf-8?B?eGhPWWNhYWpMMUJGSERZR1l2TjUraDQ2VTFPc1BsKzJnd0N2akdxTHlDaUdn?=
 =?utf-8?B?K092Q2E3QUdqaVNLMnhZMkY4czlVL2xXc3huajZhaWpQbU9mWVZCeDg3RzVQ?=
 =?utf-8?B?QXo3MGk0QzRYY1EyUHEzcFdiaGhrbFErRWdXODJvblc1aDlRZ3p3cnAxQ0Vh?=
 =?utf-8?B?TlVydkJZdzJWVjZxbnZza25NNm5GNndXVFNOWWJycXB1SUVBM0dlWDZXQW4z?=
 =?utf-8?B?Mi94eWFxYkZpTFllRElIVTl4bTF5OXU4NkNBWFVlNWxidEJXRU9wU1l0WjZq?=
 =?utf-8?B?THQya0R2ZUVqd1dpb0x4RXRYa01McGtFaVB6T2k4eWQ3QjVadWVQTnR6TjBL?=
 =?utf-8?B?eXd0ZXRUaFUrME4zd29odENWZWNxTHVybWlBUG9ZV3FZQXNBcStPa3pmTW9j?=
 =?utf-8?B?RFI1dWQ5cTJpV2FFOWxzRzI5T3ozYVNCOG1KS1ZUOXZVRjFKNHlhSzVhaHZy?=
 =?utf-8?B?RlJpSjh5cTk4ekM1YjBBVHlHYzczaWFWYisyUmNwZGQ4RUp0S2NJRE1aN2hP?=
 =?utf-8?B?MGd2cG9xK25POUFtazlWWDNVM2IzeGsyb3g3QkpSNE9MUEwvdG9PMEFOUmc1?=
 =?utf-8?B?RlRta25mSWxCU3lOTVk5ekpyM3g4S1YraG1NN0QzYS9sREJGMW9TUGhNbzhq?=
 =?utf-8?B?cXNuSHo5Z3pNQ0h5Y05jdzNOcGF0bjhTZ0lCTjBsSzNLaGdLUXdzZURlZnc4?=
 =?utf-8?B?Y0VpbUdadGhCd2xKVUVLZnRMS2FIWUdvbHRQODlYOFZkdnB1R0Q0Q0NYQVRR?=
 =?utf-8?B?WVgxejBxM0pnOGdpNDlzdklvc25wcjliNm9GYTJtU0FEMzJwZ29mYXdOTmw3?=
 =?utf-8?B?cWxHMjhHbUZmMktHeTBROVMzR0RZOWxwVm1WSkcxU1VabmpKVkRIWkwyWVJk?=
 =?utf-8?B?MzdPdTRobzhrdFBsdll1ZjRZVzY1Wk9jMDI5eGRweVU2THhQU1BCNlZjbUVp?=
 =?utf-8?Q?yskTfoIqSXremwPpVcx0q9KytL72Cwbq1FNdGDs?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0fe50552-b2f3-4fdd-03a9-08d94c56be13
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 14:49:29.0470
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: TjBI8rVy/CEzG27sg03IFwTJIFJC0kNSR9mdT9NGJRIHwXo2ASeiQzerPRS+OKA7QFATDdu5YK92IFtiXnMkIA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165

On 21.07.2021 16:19, Andy Smith wrote:
> On Wed, Jul 21, 2021 at 10:10:13AM +0200, Jan Beulich wrote:
>> Since xen-blkback only talks in terms of bio-s, I don't think it is
>> the party responsible for honoring such driver restrictions. Instead
>> I'd expect the block layer's bio merging to be where this needs to be
>> observed. Perhaps it simply doesn't expect to be passed requests in
>> multiples of 11 sectors together with the capping at 64k (as said -
>> iirc) and driver restrictions on where splits may occur? And as to
>> earlier Linux versions working - perhaps the merging logic was less
>> aggressive back then?
> 
> I later realised that there was another change in my setup besides
> the kernel version going from 4.19 to 5.10: I gave the dom0 8GiB of
> memory instead of the 3GiB it had before.
> 
> I understand that below 4GiB memory use of swiotlb is disabled so
> all the time previously this was not used, and now is. Perhaps the
> bug is in there?
> 
> I was told that the only simple way on a Xen dom0 to disable use of
> swiotlb would be to set the memory below 4GiB again, so I might try
> that.

I have no idea where you take this 4GiB aspect from. What the kernel
considers "below 4GiB" in its view of the world may be at a much
higher address in system address space. And the mere amount of
memory doesn't matter here at all.

> I was also pointed to this patch as a maybe fix for my issue:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=5f89468e2f060031cd89fd4287298e0eaf246bf6

Yes, this looks possibly related.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 14:52:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 14:52:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159421.293249 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Da8-00045E-IM; Wed, 21 Jul 2021 14:52:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159421.293249; Wed, 21 Jul 2021 14:52:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Da8-000457-Ev; Wed, 21 Jul 2021 14:52:20 +0000
Received: by outflank-mailman (input) for mailman id 159421;
 Wed, 21 Jul 2021 14:52:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6Da7-00044z-3v
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 14:52:19 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6Da6-0004Fr-So; Wed, 21 Jul 2021 14:52:18 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6Da6-0002MD-My; Wed, 21 Jul 2021 14:52:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=AznePrvq1wt9psdqNXzZagun1f44uMbzKeaE/aLPVm0=; b=2ZD3+z1b3C/3gtn5sQj3sRktwq
	KLcdg02zm8r2/QOBxduaKux9NbOoVqN1nT13nFuUNwdy0nF/MNoKrafUnVMDAYh97Cc3H5vYAr9jx
	AfiAhiRe80UfHklr4TiYxlmdHWNkU6QN+oKpzA2pw593L9v1zLWCtzqD20txNjkUR9f8=;
Subject: Re: [PATCH RESEND 0/2] gitlab-ci: add a qemu-based arm32 test
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: cardoe@cardoe.com, wl@xen.org, andrew.cooper3@citrix.com,
 xen-devel@lists.xenproject.org
References: <alpine.DEB.2.21.2107131747070.23286@sstabellini-ThinkPad-T480s>
 <alpine.DEB.2.21.2107201248360.3916@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <64aa4aa6-0c6e-76c9-5d9b-5e2c81cc4120@xen.org>
Date: Wed, 21 Jul 2021 15:52:17 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107201248360.3916@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 20/07/2021 20:48, Stefano Stabellini wrote:
> Re-ping?

Interestingly the patches were not threaded (in-reply-to seems to be 
missing in the headers), so I had to look them up by subject to find them.

Anyway, I have looked at patch #2 and provided some feebdack. The first 
patch #1 looks fine.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 15:11:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 15:11:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159429.293267 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Dsv-0006vQ-8T; Wed, 21 Jul 2021 15:11:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159429.293267; Wed, 21 Jul 2021 15:11:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Dsv-0006vJ-5W; Wed, 21 Jul 2021 15:11:45 +0000
Received: by outflank-mailman (input) for mailman id 159429;
 Wed, 21 Jul 2021 15:11:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=TcFV=MN=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m6Dsu-0006vD-36
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 15:11:44 +0000
Received: from mail-pl1-x62b.google.com (unknown [2607:f8b0:4864:20::62b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 92d7610d-58fd-441c-ac4c-3f7402d3799d;
 Wed, 21 Jul 2021 15:11:43 +0000 (UTC)
Received: by mail-pl1-x62b.google.com with SMTP id u3so1103279plf.5
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 08:11:42 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 j6sm23210086pji.23.2021.07.21.08.11.27
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 21 Jul 2021 08:11:41 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 92d7610d-58fd-441c-ac4c-3f7402d3799d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=D1h2d+g+iMU4/jGzVM3W4ntrau1j74+yLE1tV8PoAic=;
        b=JudKBwJXYhQRbS+X/S9haoQpA4vJDhCumYWHOc7uZasKxl1Q15/54S3UgtA5DU2MnM
         lzw3uMGa0951XioyMj3JRFDtKLLdbQZHKtkmzd142ej6G99ZpSQbf4pbYKJMHmvy2Mvg
         n+IsgH/Gi14qKpxeEr/tuJjCd3FpmXh2SNA8p3U4jEKfIwjxFSccYMGg+ONArMU/Wu6E
         XfXZg/05bIatm0Sic/3vAKBQLh3YqfKOOK2+BKsvSUdJLbF0e9ivPdg52QOQvmKU+WWe
         jjv9l41sek6SngfQtz7UvvRRFhkx72h8LHByGOFdzs8RI71z4WB014t9ZJNaOfnnb+nh
         5peg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=D1h2d+g+iMU4/jGzVM3W4ntrau1j74+yLE1tV8PoAic=;
        b=XPmFnmVz+738vWqc9T8qfE+RE42tIrM8jGD3jJsm24fWzud8afRQWgcob5aoVCkecn
         4HKaYk+IYbd3fZG6lUY2rpCD8TtJQXWOAmyDmEe+ZsKlrwQXIjeEY3vlZQmXikrbp59i
         g1Jk5NDu/lWznnepnt/YLm2TT9X5lKXvJcwX2Yxw1+O2kRtSQX/Aj2f+6Y9K9OY39lal
         98sBKik+Zs6OeFfTDu3+tiQzaFifOOOPPKNA6XlOaHa+0PH3Fkkoug32gqzxK29PyT0c
         gULUGS+eQl/Bonnb9S6iPc/sUWHUYpwtv33/YhLeLfBRNK1UPAnpSvLaHlLm2CAzN46e
         Z2mA==
X-Gm-Message-State: AOAM530jQ5XNy7FQ8vnasxGO6BLPYTUQdBEtkBldnJCLRX5A/agBNkPz
	RyRmYi5GTVaFu6+BACjTmqc=
X-Google-Smtp-Source: ABdhPJx35AxUVV6O398anppLcbEKI32dfRaLuLVMxOpRJ+rodbbxxyqhUxP+qwoyGdOJ7uanWVT8yQ==
X-Received: by 2002:a17:902:db11:b029:12b:4a2e:7ec4 with SMTP id m17-20020a170902db11b029012b4a2e7ec4mr28239454plx.71.1626880302118;
        Wed, 21 Jul 2021 08:11:42 -0700 (PDT)
Subject: Re: [Resend RFC PATCH V4 09/13] x86/Swiotlb/HV: Add Swiotlb bounce
 buffer remap function for HV IVM
To: Christoph Hellwig <hch@lst.de>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
 wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
 mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
 dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
 konrad.wilk@oracle.com, boris.ostrovsky@oracle.com, jgross@suse.com,
 sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, m.szyprowski@samsung.com,
 robin.murphy@arm.com, kirill.shutemov@linux.intel.com,
 akpm@linux-foundation.org, rppt@kernel.org, Tianyu.Lan@microsoft.com,
 thomas.lendacky@amd.com, ardb@kernel.org, robh@kernel.org,
 nramas@linux.microsoft.com, pgonda@google.com, martin.b.radev@gmail.com,
 david@redhat.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, keescook@chromium.org, rientjes@google.com,
 hannes@cmpxchg.org, michael.h.kelley@microsoft.com,
 iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 brijesh.singh@amd.com, anparri@microsoft.com
References: <20210707154629.3977369-1-ltykernel@gmail.com>
 <20210707154629.3977369-10-ltykernel@gmail.com>
 <20210720135437.GA13554@lst.de>
 <8f1a285d-4b67-8041-d326-af565b2756c0@gmail.com>
 <20210721143355.GA10848@lst.de>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <0e2ca0e2-201d-68d4-5dc0-7341f8e9106a@gmail.com>
Date: Wed, 21 Jul 2021 23:11:26 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210721143355.GA10848@lst.de>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit



On 7/21/2021 10:33 PM, Christoph Hellwig wrote:
> On Wed, Jul 21, 2021 at 06:28:48PM +0800, Tianyu Lan wrote:
>> dma_mmap_attrs() and dma_get_sgtable_attrs() get input virtual address
>> belonging to backing memory with struct page and returns bounce buffer
>> dma physical address which is below shared_gpa_boundary(vTOM) and passed
>> to Hyper-V via vmbus protocol.
>>
>> The new map virtual address is only to access bounce buffer in swiotlb
>> code and will not be used other places. It's stored in the mem->vstart.
>> So the new API set_memory_decrypted_map() in this series is only called
>> in the swiotlb code. Other platforms may replace set_memory_decrypted()
>> with set_memory_decrypted_map() as requested.
> 
> It seems like you are indeed not using these new helpers in
> dma_direct_alloc.  How is dma_alloc_attrs/dma_alloc_coherent going to
> work on these systems?
> 

Current vmbus device drivers don't use dma_alloc_attrs/dma_alloc
_coherent() because vmbus driver allocates ring buffer for all devices. 
Ring buffer has been marked decrypted and remapped in vmbus driver. 
Netvsc and storvsc drivers just need to use  dma_map_single/dma_map_page().





From xen-devel-bounces@lists.xenproject.org Wed Jul 21 15:36:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 15:36:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159436.293280 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6EGS-0001WI-AT; Wed, 21 Jul 2021 15:36:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159436.293280; Wed, 21 Jul 2021 15:36:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6EGS-0001WB-60; Wed, 21 Jul 2021 15:36:04 +0000
Received: by outflank-mailman (input) for mailman id 159436;
 Wed, 21 Jul 2021 15:36:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=YvKo=MN=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m6EGQ-0001W3-Qt
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 15:36:02 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1702c6df-7558-41a2-ac5d-15b471a7db76;
 Wed, 21 Jul 2021 15:36:02 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 3CE3122460;
 Wed, 21 Jul 2021 15:36:01 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 11D2B13C02;
 Wed, 21 Jul 2021 15:36:01 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id gE4gA+E++GDiNgAAGKfGzw
 (envelope-from <jgross@suse.com>); Wed, 21 Jul 2021 15:36:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1702c6df-7558-41a2-ac5d-15b471a7db76
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1626881761; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=9paZxVKmlnrGyH3BZS1g02F/MKDX+Zs2JXAWYxmUbMU=;
	b=rXcyRF6DaEwOudL2odmgq6YLcIwkaT7kNn48uek7LcgGM40qqvy4/DyDG0C6cACBn3uOTV
	PhEKdWKJccazhmoKff9FhFcBIms1TWmQmeUwT/xEkMXN+lRyqoF8A6tqtmDoHqt/wGjsag
	uDWGjgHf1BmKEWQXimc8jaNcV+otcVs=
Subject: Re: [PATCH] xen/events: remove redundant initialization of variable
 irq
To: Colin King <colin.king@canonical.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, xen-devel@lists.xenproject.org
Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org
References: <20210721114010.108648-1-colin.king@canonical.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <b8efb888-6307-ef26-a4ae-666a965b79d2@suse.com>
Date: Wed, 21 Jul 2021 17:36:00 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210721114010.108648-1-colin.king@canonical.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="TwP4P4bBnCJdQ1LiYRgMlQM3ILh6GJVzz"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--TwP4P4bBnCJdQ1LiYRgMlQM3ILh6GJVzz
Content-Type: multipart/mixed; boundary="crVZNEQBD7obEX4izqKXbU7wshd2Q55mK";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Colin King <colin.king@canonical.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>, xen-devel@lists.xenproject.org
Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org
Message-ID: <b8efb888-6307-ef26-a4ae-666a965b79d2@suse.com>
Subject: Re: [PATCH] xen/events: remove redundant initialization of variable
 irq
References: <20210721114010.108648-1-colin.king@canonical.com>
In-Reply-To: <20210721114010.108648-1-colin.king@canonical.com>

--crVZNEQBD7obEX4izqKXbU7wshd2Q55mK
Content-Type: multipart/mixed;
 boundary="------------11DEC1EB2920679203CA73DD"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------11DEC1EB2920679203CA73DD
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 21.07.21 13:40, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>=20
> The variable irq is being initialized with a value that is never
> read, it is being updated later on. The assignment is redundant and
> can be removed.
>=20
> Addresses-Coverity: ("Unused value")
> Signed-off-by: Colin Ian King <colin.king@canonical.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

--------------11DEC1EB2920679203CA73DD
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------11DEC1EB2920679203CA73DD--

--crVZNEQBD7obEX4izqKXbU7wshd2Q55mK--

--TwP4P4bBnCJdQ1LiYRgMlQM3ILh6GJVzz
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmD4PuAFAwAAAAAACgkQsN6d1ii/Ey9k
1Qf/bQxoK25f57csMLkItMOO46yMlUwEHEj2mjgvlwnFCd/E3kQQVDUtUF4yjwu+2Vp58lK7SzIE
g5bCPoQWGE64PlwQnKvHZ8N5phekEPGPfLItjXB9i838Xs3F1yBP+tBLToka/6yM3m60l1D4eBxU
X90dhYuhfCAWafaDAyIlGK1+pHMmNUJavUt29HJC3SECP4qB9TA5Kj6ZzpYI3X1ve+4ge+lu1PWM
7TBClWSKcLybGDx9sra+Il1aXBpQ/Zt/mXFj/RQ39lWDrtV5DHOZopYQQpenUf/ceXD25W7GEHMH
xigdD8NckUa7+KridAV4jH/rpMflqlWJk/0fU87U8Q==
=w9/s
-----END PGP SIGNATURE-----

--TwP4P4bBnCJdQ1LiYRgMlQM3ILh6GJVzz--


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 15:58:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 15:58:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159443.293292 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6EcN-0004ak-3x; Wed, 21 Jul 2021 15:58:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159443.293292; Wed, 21 Jul 2021 15:58:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6EcN-0004ad-0I; Wed, 21 Jul 2021 15:58:43 +0000
Received: by outflank-mailman (input) for mailman id 159443;
 Wed, 21 Jul 2021 15:58:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=NGKG=MN=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m6EcL-0004aX-Hn
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 15:58:41 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 239e4f09-a5fe-4d5f-bdb7-22460d58c87b;
 Wed, 21 Jul 2021 15:58:40 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2106.outbound.protection.outlook.com [104.47.18.106])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-33-spnDpO2sNp6TXeoEIqgPWg-1; Wed, 21 Jul 2021 17:58:38 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB7149.eurprd04.prod.outlook.com (2603:10a6:800:12e::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Wed, 21 Jul
 2021 15:58:37 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 15:58:37 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PAZP264CA0083.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:1fa::10) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Wed, 21 Jul 2021 15:58:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 239e4f09-a5fe-4d5f-bdb7-22460d58c87b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626883119;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=5FOiuvQ1lHPaZMdImszYY/nt3sbsFeU2u+zkCtu7vEw=;
	b=ctm3CcJO8TMqGMXTv7BqMBHX7FoIfToMYuiVjyZUszIV9zmgtAETR31MohwCE0VKZhoYXe
	AIIqIFVztxuK8m6rb3MmGAjsiF62/6pKyYeC9JKvJFvHPSC3t5FpQ+Tb/GlPe1b0fN8T7d
	4osuVhr6jtwQxJO4GchJT9Pzgbp/TnM=
X-MC-Unique: spnDpO2sNp6TXeoEIqgPWg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=g1aeiy2Ob7n49rpxPvZW0zwAmsH5T6IptLI4pI1g2jSZJc9w6t9K4AyxEaLdqc6ZqGFKu0yDR1tMo4G83MpyYWWqRMOMD+CDB4ofBBYAatGNmDSEIDR72JbPFcBTt9/ov6PhXLHE4+VQMHcsFekSLgBg/n16czNGChumKqfqOsUt+nAeAEDHKxMViaJmxWgVDo/HCZacCVx3pel1pbnnKDuwc7tcPkglddIlY/xLSSeHaxKkkHTiNNM06ZZ6b68oI389tZUWAGDSyp4rlb+a1YEXbDQQgb1x7OqDzTijGJuCqM4ZQgpacH9NhrlSjyHvxVc2vm0b7vjRUsRfvYFSOQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5FOiuvQ1lHPaZMdImszYY/nt3sbsFeU2u+zkCtu7vEw=;
 b=W7UVNB310jI6qMZw+pJSzOMo1rPfKekpOUfWM8n3H4AeEwbfrj7FtPUBT94kBU7Cgj7YW6WUO3/WOPbeJ6uaTkIpnPVM9llAWorE2o9q7V2m23tjqf7O+7+2OMc9KFDCJmWgH4rwwRXjOfav0pPiIyv7/amVC+cnhQERrmwrdReCn4ZnvrNL0KXRK7VilabZDT4c+xQY9csUEM+UkcG8jjUY2MxI2AuFx6Dzu51eBbtsQKHnDYFuyQQknybn4FxSW0ehxUvXiLhAiQszDwboqSDvmQcIZ+nv7nejgLBUOeFvlwqe+tMcMjStUEz+KEJN4/eysD9Po83gj1YR/k+iVg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
To: Paul Durrant <paul@xen.org>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
From: Jan Beulich <jbeulich@suse.com>
Subject: your change "iommu: make map and unmap take a page count, similar to
 flush"
Message-ID: <185f185b-443b-bea4-5068-b9ed763a4c2f@suse.com>
Date: Wed, 21 Jul 2021 17:58:35 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PAZP264CA0083.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:102:1fa::10) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 621d41d7-1fed-41f2-7eff-08d94c6066d3
X-MS-TrafficTypeDiagnostic: VI1PR04MB7149:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB71493B70F54FAF3EAE5A9C27B3E39@VI1PR04MB7149.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NQZPUXvC8GlvK1Gqp4AgV/ICbbOC2qpM9ZCU/PgcqVe3zbGESOiQKOxGdlSfeoTPrBIR13Z+xKGK16eY7PPMxqbUTxP5vzjUdzNT6Lggs+vMygP+9mbxA2xuHTg53cRCuLW2RWzVGYsy9VBQFYrys3J1UK3KDSul0KTKE0J81oYaH2vntZyi6J+yfdkkz4Z2qazp83taF4kthcp4kqIfzrnnsvcOLVAhP4EfAahAaklaGMYNnxkiTKYDdgBSS6QIcw+suDGER9ZlpAuLYCxUH8LsqdzeWnNvNZj96G7R+HVwNjgQBYxG7L2He3suFNV/cJChRDHQlNpYjp4ghJ2PgNda5Q1gnAyQNvDDZGgmOawvkbIBjX2/zsnc7gy8qKgbshODFMc5JA6sQzSQ8GwAPGmjw9J31FV3MR5EBt/C/21m1qZ+eN1uVrY90kZ6CsjxlNQHG+ij4pGKFw0DAFBhkI/GCj6Lg3ZuJTqFNHzwHj9sB9fb8OC8WATUoXRknxJZv8h2RsFQJn2TB+KpcnGeOEVBUaJ9CEL1kA76OJjZT0wT8o2xKI8/lQXW4F4Sfy4MglNdMY1SG0Que99iLmBaMLTEEFa9xh1Qbo2geFbZwosFdlsE6yBVZrrLiq/SujCGUi7aJ3DwkXLPEpWd/lCr1rggOwl877Jjewgw541VOVhfPJZKNEJwesFoqo6YxLh3EL6Rp+PGnVDJjKWRgMzaf35H3K+J2nPqolwJNKUI/dY=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(186003)(4326008)(2906002)(38100700002)(8936002)(16576012)(6916009)(36756003)(6486002)(31686004)(508600001)(86362001)(956004)(5660300002)(26005)(83380400001)(66946007)(66476007)(316002)(66556008)(8676002)(2616005)(31696002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 621d41d7-1fed-41f2-7eff-08d94c6066d3
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 15:58:37.6593
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: vFOnoUlQ3UCkqA4FDGYVcsHhVbGzqfT9qAI/j7qoSsOIx0Y4FYadNKO/ct57hpbJh4x496XXWyuKsWMlfFwnOA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7149

Paul,

the description of this says

"At the moment iommu_map() and iommu_unmap() take a page order rather than a
 count, whereas iommu_iotlb_flush() takes a page count rather than an order.
 This patch makes them consistent with each other, opting for a page count since
 CPU page orders are not necessarily the same as those of an IOMMU."

I don't understand the latter sentence at all, now that I read it again.
What may differ is the base page size, but that affects counts of pages
and page order all the same.

I'm intending to make an attempt to cut through the page order (or
count) to the actual vendor functions, in order to then be able to
establish large page mappings where possible. In all cases (perhaps
most noticable on Arm) handing them a page order would seem easier, so
I was considering to have iommu_{,un}map() do that step of abstraction
(or transformation). But since you did explicitly convert from order to
count, I was wondering whether me following this plan would cause
problems with any of your further intentions back then.

If we really wanted to cater for base page size varying between CPU and
IOMMU, besides the IOMMU vendor code needing to announce their value, I
guess we'd have to do quite a bit more abstracting work, as it would
matter to outer layers in particular if the IOMMU base page size was
larger than the CPU's. Supporting just smaller IOMMU base page sizes,
otoh, would seem entirely feasible to deal with inside the rework of
iommu_{,un}map() as mentioned above.

Jan



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 16:39:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 16:39:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159450.293307 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6FFQ-0001aM-4b; Wed, 21 Jul 2021 16:39:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159450.293307; Wed, 21 Jul 2021 16:39:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6FFQ-0001aF-1L; Wed, 21 Jul 2021 16:39:04 +0000
Received: by outflank-mailman (input) for mailman id 159450;
 Wed, 21 Jul 2021 16:39:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6FFO-0001a9-L3
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 16:39:02 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6FFO-0006NL-FL; Wed, 21 Jul 2021 16:39:02 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6FFO-0001yD-9T; Wed, 21 Jul 2021 16:39:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=s3SbzWK+A0UW273YxVTYYpF0xwhfIWTMl/dPktTnDOg=; b=j94uMonIT5hJFRTVDlL94+Fkk1
	ALNZdQmrrT3RBdgkwi0ZltdEP0wDCvuvzE/GIxQHG+xgMvh/zY7YYsUAeO38XcZPZkVRqcLzOdipz
	A/gSLcPhF/SeNHM9sBdfabyzvCDY9LvkHJVUrCTm4wQk+ENH66/jTe/1lBqjW2tfzMxw=;
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrii Anisov <Andrii_Anisov@epam.com>,
 Stefano Stabellini <sstabellini@kernel.org>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
From: Julien Grall <julien@xen.org>
Message-ID: <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
Date: Wed, 21 Jul 2021 17:39:00 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 21/07/2021 15:40, Oleksii Moisieiev wrote:
> HelloJulien,

Hello,

>>> 
>>> My setup:
>>> Board: H3ULCB Kinfisher board
>>> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15)
>>> https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$ 
> <https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$>[github[.]com] 
> 
>>> <https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$ 
> [github[.]com]>;
>>> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576(v5.10-rc4)
> 
>>Hmmm... 5.10 was released a few months ago and there are probably a few
>>stable release for the version. Can you try the latest 5.10 stable?
> 
> Switched to tag v5.10 rev: 2c85ebc57b3e of 
> https://github.com/torvalds/linux.git
> and got the same problem, that I see no output from kernel. All tests 
> were done with earlycon parameter set in the kernel cmdline.
The tag v5.10 is the first official release. What I meant is using the 
stable branch from 
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git (branch 
linux-5.10.y).

> 
>>> 
>>> https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$ 
> <https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$>[github[.]com] 
> 
>>> <https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$ 
> [github[.]com]>;
>>> 
>>> kernel config: see attached;
>>> 
>>> dtb: see attached;
> 
>>Please avoid large attachment as they will be duplicated on every
>>mailbox. Instead, in the future, please upload them somewhere (your own
>>webserve, pastebin...) and provide a link in the e-mail.
> 
> I'm sorry for that.
> 
>>> 
>>> 
>>> If kprobe/uprobe events are enabled - I see no output after xen switched
>>> input to Dom0, if disabled - system boots up successfully.
>>The console subsystem tends to be enabled quite late in the boot
>>process. So this may mean a panic during early boot.
> 
>>If you haven't done yet, I would suggest to add earlycon=xenboot on the
>>dom0 command line. This will print some messages during early boot.
>>ing.
> 
> All tests were done with earlycon parameter set in the kernel command 
> line (xen, dom0-bootargs).
> 
>>> 
>>> Both configs work fine when I boot without xen.
>>> 
>>> 
>>> Dom0 information from Xen console shows that only one CPU works, and PC
>>> stays in "__arch_counter_get_cntvct" function on read_sysreg call. //
>>> 
>>> I did further investigation and found that kernel 5.4 doesn't have such
>>> kind of issues.
>>> After bisecting kernel,between 5.10 and 5.4, I found that output
>>> disappeared on commit:
>>> 
>>> 76085aff29f585139a37a10ea0a7daa63f70872c
> 
>> From the information you provided so far, I am a bit confused how this
>>could be the source of the problem. But given this is not the latest
>>5.10, I will wait for you to confirm the bug is still present before
>>providing more input.
> 
> I was confused with this commit either. As I mentioned above, I've 
> checked with the latest stable 5.10 kernel and still got the same problem.

Thanks for the testing. I am not quite too sure where this may fail. 
Maybe Stefano has an idea?

If you have an external debugger, can you use it to get a stack trace?
Otherwise, I would suggest to add some xen_raw_printk() in the code to 
figure out where it may fail.

> 
>>> 
>>> 
>>> Another issue, which was revealed after I got kernel output was kernel
>>> oops with message that CPU is in inconsistent state.
>>> 
>>> [0.415612] EFI services will not be available.
>>> 
>>> [0.420267] smp: Bringing up secondary CPUs ...
>>> 
>>> [0.425185] Detected PIPT I-cache on CPU1
>>> 
>>> [0.425267] Xen: initializing cpu1
>>> 
>>> [0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411fd073]
>>> 
>>> [0.425815] Detected PIPT I-cache on CPU2
>>> 
>>> [0.425879] Xen: initializing cpu2
>>> 
>>> [0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411fd073]
>>> 
>>> [0.426362] Detected PIPT I-cache on CPU3
>>> 
>>> [0.426425] Xen: initializing cpu3
>>> 
>>> [0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411fd073]
>>> 
>>> [0.426537] smp: Brought up 1 node, 4 CPUs
>>> 
>>> [0.472807] SMP: Total of 4 processors activated.
>>> 
>>> [0.477551] CPU features: detected: 32-bit EL0 Support
>>> 
>>> [0.482745] CPU features: detected: CRC32 instructions
>>> 
>>> [0.499470] ------------[ cut here ]------------
>>> 
>>> [0.504034] CPU: CPUs started in inconsistent modes
> 
>>Looking at Linux 5.7 code, this is printed when not all the CPUs are
>>booted in the same mode (i.e. EL1 or EL2).
> 
>>This is quite odd. So let me ask a question first, did you see this
>>error during the bisection or on the latest 5.7?
> 
> Switched to kernel v5.7 tag, rev:3d77e6a8804.

Similar to 5.10, the lastest stable in the linux-stable repo 
linux-5.7.y. If this still doesn't help...

> On 5.7 kernel I can see printk output, but getting CPUs started in 
> inconsistent modes error.
> Also, I tried with hmp-unsafe=false ( in xen cmdline, so only 0-3 CPU 
> were enabled. And still got the same issue.
... can you print __boot_cpu_mode[0] and __boot_cpu_mode[1]?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 16:53:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 16:53:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159457.293321 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6FTc-00045d-Ec; Wed, 21 Jul 2021 16:53:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159457.293321; Wed, 21 Jul 2021 16:53:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6FTc-00045W-Bj; Wed, 21 Jul 2021 16:53:44 +0000
Received: by outflank-mailman (input) for mailman id 159457;
 Wed, 21 Jul 2021 16:53:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UdBc=MN=gmail.com=xadimgnik@srs-us1.protection.inumbo.net>)
 id 1m6FTa-00045Q-S9
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 16:53:42 +0000
Received: from mail-wr1-x434.google.com (unknown [2a00:1450:4864:20::434])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c8c90d1a-a5ee-4915-b11f-58a8c6330ebc;
 Wed, 21 Jul 2021 16:53:41 +0000 (UTC)
Received: by mail-wr1-x434.google.com with SMTP id d2so2964778wrn.0
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 09:53:41 -0700 (PDT)
Received: from ?IPv6:2a00:23c5:5785:9a01:d056:9219:797d:dc70?
 ([2a00:23c5:5785:9a01:d056:9219:797d:dc70])
 by smtp.gmail.com with ESMTPSA id y3sm27703954wrh.16.2021.07.21.09.53.40
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 21 Jul 2021 09:53:40 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c8c90d1a-a5ee-4915-b11f-58a8c6330ebc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:reply-to:subject:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=n7t3GhqlutTbX8xfbSEoGEk87Bn0XqLJSiPGh2BUojY=;
        b=EFmJRwQPCf7e8HEUNlwbQo5yc6owicTr8lVAsfRr7DK080j6LP0KxHcd0XkPZSwydh
         CjQAIiIrb6Cpor8rZve6qR2Aoq4oTSMkbU2o0ZswDXhlX+ILqYTuBqThN5SMHUxd7cAx
         RYuii0PQfxg2nZwZVD9Q4QaE4X8/Ufk/l47dldI4TUwGEDMidaTIGDXEkxBYqBRJV0kX
         6RC7iU4opD68jdYhuOjcWv+W1rdE8QoZcOWaFPWlvu1Pzr7E3PwmdJzL+Q4oIHioqpY1
         TH2SBRUDAJI9AgaTo3vnL+rxR00staYXzabopNX1AXJZTsdZF9iWeAqOD/az0rDrbfX4
         8o6g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:reply-to:subject:to:cc:references
         :message-id:date:user-agent:mime-version:in-reply-to
         :content-language:content-transfer-encoding;
        bh=n7t3GhqlutTbX8xfbSEoGEk87Bn0XqLJSiPGh2BUojY=;
        b=IzHE3rdL83cPZgw8LLn95aTNPUV1evRV1Z+fm/mi+8d1pbSDwTrdgn9Iw0RF9WIpIw
         T1NhMNEIROIJqLR8IGyFYzLjGED3dOkOLYaEg5gV7fCQn75+1jAGGNUEog2wpSfYSFEG
         aEI0kXyDxoNqIDq9P+TnSApL+A5htUkLCzbYSCLHeK8Tq8LWv202moqnKGIEvA5NoX5a
         YSwSoCOmN3oTHInCa+u9IXk6uqCitChOUS5wbyJZrU97tKORyuZ/YOc+7/JGYhio8wtL
         rRJjgB4DA0L6i5r/WddkyomXmyXOoTraxJeYYs61hr7YPOPI3HfQWo6681lLPsSQU+OE
         NmFA==
X-Gm-Message-State: AOAM530qQciJBp+mKjstItokIovcheEsATtYt8A7dKT86lw2iu/krpiH
	fs5db9dGpKYj/Hmrnkbnfp23Zohe0SM=
X-Google-Smtp-Source: ABdhPJzxazDRghtRwtQUay1mhnGdHclPiMZmGnRVxAF+yazcO28nMMv5ofKZ1ifqx878+uMFtF9ObQ==
X-Received: by 2002:a5d:5403:: with SMTP id g3mr42928038wrv.403.1626886421120;
        Wed, 21 Jul 2021 09:53:41 -0700 (PDT)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Reply-To: paul@xen.org
Subject: Re: your change "iommu: make map and unmap take a page count, similar
 to flush"
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <185f185b-443b-bea4-5068-b9ed763a4c2f@suse.com>
Message-ID: <0553727e-5dd3-23d1-6698-01b8bcb5dd1f@xen.org>
Date: Wed, 21 Jul 2021 17:53:40 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <185f185b-443b-bea4-5068-b9ed763a4c2f@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 21/07/2021 16:58, Jan Beulich wrote:
> Paul,
> 
> the description of this says
> 
> "At the moment iommu_map() and iommu_unmap() take a page order rather than a
>   count, whereas iommu_iotlb_flush() takes a page count rather than an order.
>   This patch makes them consistent with each other, opting for a page count since
>   CPU page orders are not necessarily the same as those of an IOMMU."
> 
> I don't understand the latter sentence at all, now that I read it again.
> What may differ is the base page size, but that affects counts of pages
> and page order all the same.
> 

Hi Jan,

What it's supposed to mean is that a CPU may e.g. have page orders 0 
(4k) , 9 (2M), etc. but the IOMMU may not use the same orders. And by 
page count it means a count of (CPU) order 0 pages (which I assume all 
IOMMUs will support).

> I'm intending to make an attempt to cut through the page order (or
> count) to the actual vendor functions, in order to then be able to
> establish large page mappings where possible. In all cases (perhaps
> most noticable on Arm) handing them a page order would seem easier, so
> I was considering to have iommu_{,un}map() do that step of abstraction
> (or transformation). But since you did explicitly convert from order to
> count, I was wondering whether me following this plan would cause
> problems with any of your further intentions back then.
> 
> If we really wanted to cater for base page size varying between CPU and
> IOMMU, besides the IOMMU vendor code needing to announce their value, I
> guess we'd have to do quite a bit more abstracting work, as it would
> matter to outer layers in particular if the IOMMU base page size was
> larger than the CPU's.

Yes, if the order 0 page size was different between IOMMU and MMU then 
that would clearly be more tricky to deal with.

> Supporting just smaller IOMMU base page sizes,
> otoh, would seem entirely feasible to deal with inside the rework of
> iommu_{,un}map() as mentioned above.
> 

Yes. The aim of the patch was really only to make the calls consistent. 
Changing all of them to use an order rather than a count would be ok too 
I think.

   Paul

> Jan
> 



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 17:42:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 17:42:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159508.293358 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6GEX-000259-G2; Wed, 21 Jul 2021 17:42:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159508.293358; Wed, 21 Jul 2021 17:42:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6GEX-000252-CO; Wed, 21 Jul 2021 17:42:13 +0000
Received: by outflank-mailman (input) for mailman id 159508;
 Wed, 21 Jul 2021 17:42:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GEV-00024s-Hd; Wed, 21 Jul 2021 17:42:11 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GEV-0007GA-9C; Wed, 21 Jul 2021 17:42:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GEV-0005AA-0x; Wed, 21 Jul 2021 17:42:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GEV-0001bk-0S; Wed, 21 Jul 2021 17:42:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=7FSIlvbIhwY1X6hNZTx2BgXPSQ5RMhMNB4rRY4HSM3c=; b=g7Z3eud5VLxXwOfqVn9s1KNN39
	Sl5U2zI3mmi5QQZwjNdzYRpHAEkOCayyK1bzGZWrw+OU+RuCjMj9VBsdA5z3trpvpRZe16hmDFUyJ
	p67J5aRz4H/dtCVTx1KBucvKc8jKyq5zu/Qvozhnce6NbMrJg0lWItS+CVjT9nZ6OM90=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163865-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163865: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=c04b4d9e6b596ead3cf6046a9243fbfee068ef33
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 17:42:11 +0000

flight 163865 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163865/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                c04b4d9e6b596ead3cf6046a9243fbfee068ef33
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   15 days
Failing since        163327  2021-07-06 12:39:04 Z   15 days   26 attempts
Testing same since   163865  2021-07-21 05:32:07 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 11124 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 17:50:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 17:50:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159516.293373 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6GMn-0003qp-Hj; Wed, 21 Jul 2021 17:50:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159516.293373; Wed, 21 Jul 2021 17:50:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6GMn-0003qi-Dz; Wed, 21 Jul 2021 17:50:45 +0000
Received: by outflank-mailman (input) for mailman id 159516;
 Wed, 21 Jul 2021 17:50:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GMm-0003qY-5p; Wed, 21 Jul 2021 17:50:44 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GMl-0007O4-P2; Wed, 21 Jul 2021 17:50:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GMl-0005Ts-HB; Wed, 21 Jul 2021 17:50:43 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6GMl-0004pl-Gi; Wed, 21 Jul 2021 17:50:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=yCNCIfPvccCJ1ub+bdEsONy8hPdhO4PSBcFPZdfS82Q=; b=tAHvOgI08WW6rSH4fSEoEeIZSE
	CsA1RZgkZMWe3c+LXDzLf03r2hUDPjIt/dKYbBxQ/ux6YOrd28TOSUDga/n+HrBk7LeVeL3rjIg5Y
	oJgcY80X1fkYRy4INDCe4Xw7AhsNkQ1k8GMKf0K7I4YQWixOiq9sIktazBYeP5LRy6rU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163875-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163875: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=097aeeb119538a60f68355f1c3ac47df1834c90a
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 17:50:43 +0000

flight 163875 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163875/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 097aeeb119538a60f68355f1c3ac47df1834c90a
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   47 days
Failing since        162368  2021-06-04 15:42:59 Z   47 days  127 attempts
Testing same since   163875  2021-07-21 13:11:42 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3953 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 18:28:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 18:28:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159535.293398 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6GxC-0008HP-NK; Wed, 21 Jul 2021 18:28:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159535.293398; Wed, 21 Jul 2021 18:28:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6GxC-0008HI-JL; Wed, 21 Jul 2021 18:28:22 +0000
Received: by outflank-mailman (input) for mailman id 159535;
 Wed, 21 Jul 2021 18:28:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=hVq+=MN=epam.com=prvs=7836cd435a=oleksii_moisieiev@srs-us1.protection.inumbo.net>)
 id 1m6GxB-0008H9-0r
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 18:28:21 +0000
Received: from mx0b-0039f301.pphosted.com (unknown [148.163.137.242])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6b8fd4de-ea51-11eb-8d13-12813bfff9fa;
 Wed, 21 Jul 2021 18:28:18 +0000 (UTC)
Received: from pps.filterd (m0174681.ppops.net [127.0.0.1])
 by mx0b-0039f301.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16LIFASW017411; Wed, 21 Jul 2021 18:28:17 GMT
Received: from fra01-mr2-obe.outbound.protection.outlook.com
 (mail-mr2fra01lp0101.outbound.protection.outlook.com [104.47.25.101])
 by mx0b-0039f301.pphosted.com with ESMTP id 39xr2485ex-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Wed, 21 Jul 2021 18:28:16 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com (2603:10a6:102:ea::23)
 by PR2PR03MB5434.eurprd03.prod.outlook.com (2603:10a6:101:1f::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Wed, 21 Jul
 2021 18:28:13 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c]) by PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c%8]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 18:28:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6b8fd4de-ea51-11eb-8d13-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JDZoPNCiohABqBSwOpw5e218iN+CfirvbASzoQSn5O3ZO6qLpr6rtUmNFVLxbjlx55ZRKWgtin5kIi+OKd4O7Za3zLvMKguOwpeK8zQ7qOoNR3p0HNah8FdLrTeD0YsSmyQi5VwyyXS9W0+picpFHOlMFesaDAY83wXo3Gee+LW/uXEgXLQlQ9CT1oQbSpPg4HpuMRJZ1QZ1PiWOtV8F3nxP2XFotKju5TmH91mvKl1UwtGEF2v7zrbH8GIeV8DMVk5D56wh0QqdRQQ2SzgVYTT8acD1sU5yoYIk5dsG4e1mCndvVyKkaBWuDy5cG/LS3mRlxtUYqJEF9H9F/0tBWw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=r6zi+OiVf7DpspvaUjPpllKD/aKjvcY1uyx+URWFnhM=;
 b=Jn+ugNf1GMPClpHsm3aa//H6LXIRhbIyZPMAkviZavM9Jt0B/ik1UGoNd4clZq7LhcVORA3zyGjE5vDEALkUGYhRMewV81hSJD4kSqbGuEyJUvQW6n754zpFE2CGtXnzSGGvhcMNaQ8Zg+Oj2djaieFt5NIMXQ+wMBFep3B1AnqlgjoRb5C2fYEaTI6XmmT2mmSr03m/bgTueGeRb09aA3IPn5zzt30mRDcEGINhoTdBcnjMJfBzhbSoyly+5dAHjRJ4EKHwR0HrUs4gZit6hEjEdPibGu1S0hFZ+a62sXyvgWt7au15vytmgnPhmOXQgdbkblXXc1a1HZcSjst09w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com;
 dkim=pass header.d=epam.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=r6zi+OiVf7DpspvaUjPpllKD/aKjvcY1uyx+URWFnhM=;
 b=ARcmCiyxpCg8gvddAznAtddHKum0SfRu2Kt9LOUlMaCY33wu9s4UJGLcIPYc2hBCrmXJKLFcg8vUA4c7MKhme/HS0bKRZAL5L4dBpSFgCZl3FmAr7KT067cAHyrc0AD/LDDyEMkie69cvANlzBxlLOtt/cwEYjpWOIHKN12TdGvcr+06tkuFQ8AbAsn4hQbUE1OjwEBCMYiflZbcsvyAfgVqDHyh0DKqzR9FY3WObnxmrsOHA0z18fx2oQDWSKzT6D/sUfXOILW+Rkkgv+jscOH03biUnFsUhXyKFcqMbsh0ZEnW/OvAtM2sciu/DYg3c5eK1HLdpKri8J9COaCfvA==
From: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>
To: Julien Grall <julien@xen.org>,
        "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: Andrii Anisov <Andrii_Anisov@epam.com>,
        Stefano Stabellini
	<sstabellini@kernel.org>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
Thread-Topic: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
Thread-Index: AQHXfk7sayRbwafWg0WziHoeeCAd5atNqbDZ
Date: Wed, 21 Jul 2021 18:28:13 +0000
Message-ID: 
 <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
References: 
 <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>,<8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
In-Reply-To: <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=epam.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: a6c391ea-b4e9-43ce-99c6-08d94c754d15
x-ms-traffictypediagnostic: PR2PR03MB5434:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: 
 <PR2PR03MB54347B5ECF50FCCD7BC0D194E3E39@PR2PR03MB5434.eurprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 
 HuL7/Bt8xw+r2yhujHS9Eflly7dG4DAVkIiL3cE6XcqWuZhMAZ2zPgwHMuth+KY61zogJtwWlgArEfAwXUtx/zvWezqfNzGVPG1i83qg/juO5STcBB73nvRmDxe1MF7xjCrgb7I21VYGE1B90es9HsBNEJf2wSOmJ9xW4s70ME8s+rvMHUatQSIcv6uKKCKbOTB7E1aJahsm6iTMOO3XXtj8EAi31GFlnLxW247kRUA7lmJctSa7aQ9krd5tZISmdNHJOj1UVgrVFUEe7/Ppm8ufRpSxLGeRtwMfDkQ7ZQVTob0wDkLT8yMATPfhxlKMnbBJqlgSJkOuYXFklHsXokYReglZgpDBGKdyWgmrVe2/zrsEUw7Z9mW0rnUeCulyhi4eh8iBloX9daJ/wwNelA2Tk+O52nYYR82PAg5WYUpMxOHAnmTP3CXoUZUuQFZxJ5mG0KPpz2HKeBuleQfnohsRImXrOmHuca/10ZPRAS3T3/uvmY6cZYtLyQukC8VrHrYjWqqtHZOGWzVEMWHCzyDRFtKFdTB4JYmkCgmHIlpjPAHOyUySOMb8x1614oEa+7pcmbjP1Mzk4ec88i/yGfkJSSsK90l20Wx9ysszM7k9WFWUzoZp9Zmwm3n92n2t4jbubSB9XrwKeMFjWdIEN5LoHzK8DBW/jnLquforOMv3SQcX+ki57MBqS2lNgHxDZzDz31NK34vt5crvf8rnfxaEepNIh1owbcK9OiVFVXQ/9mTvY2KP1VqCrYXZL9ECt75PyeJ6orhZWofbUStU2Sd3/oTPi5hAdcZgPJm0Tsjo2Q0e0MFxXR9GeRGRQt/FvQcQU9P/JZrwE6OGeGPpk8fZPmFH2D0s+Ljly1OwVsM5IRWVSrsCJrMhI82zIlw1zfhxXJwRaZMeaFnGXrEv0A==
x-forefront-antispam-report: 
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR03MB7136.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(376002)(136003)(346002)(396003)(366004)(7696005)(19627405001)(71200400001)(86362001)(110136005)(4326008)(53546011)(33656002)(5660300002)(966005)(83380400001)(6506007)(9686003)(478600001)(66946007)(316002)(64756008)(76116006)(18265965003)(52536014)(66556008)(8676002)(8936002)(166002)(66476007)(122000001)(26005)(186003)(54906003)(38100700002)(55016002)(66446008)(2906002)(10126625002)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 
 =?iso-8859-1?Q?w/n6ct/kfyiP/48Sy+gCatkUi0meBiR6DlDRZvA/1xWNoVshAdjgtV5hBt?=
 =?iso-8859-1?Q?6NsjjAKEcmqDME7EsyCak6s8OKncNiCCqsemA3A6LDSZOsFAlC12zujamW?=
 =?iso-8859-1?Q?agd1wGltXvhj34cEfuDaAaoaAGJ67izjGPc9hQkX7pCp5z4ndB3GocuG4F?=
 =?iso-8859-1?Q?o6tWVY0t8mJZIsMt/Ouf3GytDZIgQJlm5nHe8gDhEnIwmJOlpecNPRn45t?=
 =?iso-8859-1?Q?kxtSpEI4FeInKzftcz91x36A/kvgbZTt99WIRBM3YIXG9b4qu3eMiAZ24M?=
 =?iso-8859-1?Q?X3HBQCWaYOVT20PPLi6w//bcL/pDFOlxo8v5zWHgyMacq1KEzDMGkAc2kd?=
 =?iso-8859-1?Q?EqfMcFJqGYNtdZzT9nDQPhm+PlaqMWKiiLXJsq0WjQYY8TZiHo8elm5ege?=
 =?iso-8859-1?Q?KWmaU5z/6rDrtCjXJvxstribL/xlfpppcbzJi7Dpeoujnlmx/bCExOIHhT?=
 =?iso-8859-1?Q?LEYCfmn0LpUQVfbkS6VgrQmKmJhVFhWj8owzyp1rFbFuLNKWX+aE6msHFn?=
 =?iso-8859-1?Q?ATsKXzna3YbzW0cYnkeu4C+a2IovWdMc+r4KYu3HaXkjz6SD+bRxAAg8Bc?=
 =?iso-8859-1?Q?xLENQVUfLq0BTrGM81/wIx88PBgNdFv7OCIfZ0GCiMQctRyl5jWu0xba8p?=
 =?iso-8859-1?Q?g+kjYa390smSkA7pO8XpAiIZFt/yxSNyxso7jGiL1u6nTmGV5hZ/Ck2zI/?=
 =?iso-8859-1?Q?aRUr20tffC8bOqb0qCTIbPOV9Su8tX/I/q0spnp9dr6Vll8/ffZqH8RKpA?=
 =?iso-8859-1?Q?CuX/PMl+pge4/2yVnIEXiSaxOgPDqlyktD5dbs0WHiEeTYL39hH5XztJvH?=
 =?iso-8859-1?Q?a0UALCTq7P4SuMCT0PudOZS6IuA/kR9RS8Vf3kgQ32OMWJzDpHq11ISZGK?=
 =?iso-8859-1?Q?72jSSKW4D6drYmFxEIhOKlJY91YjgVvqiz9FyH5tSAJtOI5y12K3QV8P/Z?=
 =?iso-8859-1?Q?mQFDV2JmlyxmTVnkSAwEd/thYlCpGgy39O6JrbBDubB86vqXuMjdOryZeQ?=
 =?iso-8859-1?Q?jeetWdNorHkSJxBOFHXFYVyTbAN3zU4Tx+R+qrUnZ2dvJEjixgaAHtKE2e?=
 =?iso-8859-1?Q?QC5vvUuY+BJdnNAygDWO7eiU431Yb9F3IHmlYZqFqVKtlMFZtaHNWFPIhE?=
 =?iso-8859-1?Q?/aiE5AkdQCHx588+U9HExsYBd9kMX1PleCJAczxDpz6F2m3YiGwlcFODvK?=
 =?iso-8859-1?Q?cV5P+KOqdnNwRIKP7RD4J3aZ8kpDAgEUS1Mb42Va26fA3G2NkhKFSK940n?=
 =?iso-8859-1?Q?HqcjnBNBV4esKjtlB2lKPhFcnOosfYJiV7QjXRjlSR7aRuTgR3isHS6Y2Y?=
 =?iso-8859-1?Q?i9f2J99WSkIjCE1ohmfZr7wt+gC0xvyjBWkhnS7c2qJNnnU=3D?=
Content-Type: multipart/alternative;
	boundary="_000_PA4PR03MB7136D3B811F820FC8A5AFF95E3E39PA4PR03MB7136eurp_"
MIME-Version: 1.0
X-OriginatorOrg: epam.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PA4PR03MB7136.eurprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a6c391ea-b4e9-43ce-99c6-08d94c754d15
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jul 2021 18:28:13.6786
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: LhXIHAN/Xiv1Tk0zUH/dLXnXwTB/6T64xp5hH/xBOKSESRFCKXx/hR/bX3alSlm5qdcqy9N0fErU/cAMkcbdY7NUsTr2Fxqlzc0EMy04A5w=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR2PR03MB5434
X-Proofpoint-GUID: rcYE-AjOl94nWou6Mxge2-zq4QC7Qur-
X-Proofpoint-ORIG-GUID: rcYE-AjOl94nWou6Mxge2-zq4QC7Qur-
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790
 definitions=2021-07-21_10:2021-07-21,2021-07-21 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015
 malwarescore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0
 mlxlogscore=999 spamscore=0 bulkscore=0 adultscore=0 mlxscore=0
 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2104190000 definitions=main-2107210108

--_000_PA4PR03MB7136D3B811F820FC8A5AFF95E3E39PA4PR03MB7136eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Please see my answers below.

________________________________
From: Julien Grall <julien@xen.org>
Sent: Wednesday, July 21, 2021 7:39 PM
To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>; xen-devel@lists.xenproj=
ect.org <xen-devel@lists.xenproject.org>
Cc: Andrii Anisov <Andrii_Anisov@epam.com>; Stefano Stabellini <sstabellini=
@kernel.org>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENT=
S in kernel config

On 21/07/2021 15:40, Oleksii Moisieiev wrote:
> Hello Julien,

Hello,

>>>
>>> My setup:
>>> Board: H3ULCB Kinfisher board
>>> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15)
>>> https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!=
GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIak=
s6cbo7Ri$
> <https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!G=
F_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks=
6cbo7Ri$>[github[.]com]
>
>>> <https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!=
!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIa=
ks6cbo7Ri$
> [github[.]com]>;
>>> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576 (v5.10-rc4)
>
>>Hmmm... 5.10 was released a few months ago and there are probably a few
>>stable release for the version. Can you try the latest 5.10 stable?
>
> Switched to tag v5.10 rev: 2c85ebc57b3e of
> https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_=
29dbcQIUBPA!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyiv-iCGlHhXa=
fbPNc$ [github[.]com]
> and got the same problem, that I see no output from kernel. All tests
> were done with earlycon parameter set in the kernel cmdline.
The tag v5.10 is the first official release. What I meant is using the
stable branch from
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git (branch
linux-5.10.y).
I need some time to download and build mainline kernel. I'll test this scen=
ario and send you results tomorrow.
>
>>>
>>> https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!G=
F_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks=
29w69MC$
> <https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF=
_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks2=
9w69MC$>[github[.]com]
>
>>> <https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!=
GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIak=
s29w69MC$
> [github[.]com]>;
>>>
>>> kernel config: see attached;
>>>
>>> dtb: see attached;
>
>>Please avoid large attachment as they will be duplicated on every
>>mailbox. Instead, in the future, please upload them somewhere (your own
>>webserve, pastebin...) and provide a link in the e-mail.
>
> I'm sorry for that.
>
>>>
>>>
>>> If kprobe/uprobe events are enabled - I see no output after xen switche=
d
>>> input to Dom0, if disabled - system boots up successfully.
>>The console subsystem tends to be enabled quite late in the boot
>>process. So this may mean a panic during early boot.
>
>>If you haven't done yet, I would suggest to add earlycon=3Dxenboot on the
>>dom0 command line. This will print some messages during early boot.
>>ing.
>
> All tests were done with earlycon parameter set in the kernel command
> line (xen, dom0-bootargs).
>
>>>
>>> Both configs work fine when I boot without xen.
>>>
>>>
>>> Dom0 information from Xen console shows that only one CPU works, and PC
>>> stays in "__arch_counter_get_cntvct" function on read_sysreg call. //
>>>
>>> I did further investigation and found that kernel 5.4 doesn't have such
>>> kind of issues.
>>> After bisecting kernel,between 5.10 and 5.4, I found that output
>>> disappeared on commit:
>>>
>>> 76085aff29f585139a37a10ea0a7daa63f70872c
>
>> From the information you provided so far, I am a bit confused how this
>>could be the source of the problem. But given this is not the latest
>>5.10, I will wait for you to confirm the bug is still present before
>>providing more input.
>
> I was confused with this commit either. As I mentioned above, I've
> checked with the latest stable 5.10 kernel and still got the same problem=
.

Thanks for the testing. I am not quite too sure where this may fail.
Maybe Stefano has an idea?

If you have an external debugger, can you use it to get a stack trace?
Otherwise, I would suggest to add some xen_raw_printk() in the code to
figure out where it may fail.
Unfortunately, I don't have an external debugger right now (my testing boar=
d is placed in the different country).
Let me share with you the results of the investigation I've done, before as=
king help from community. I haven't shared it before because I wasn't sure =
it's related.

 I've met error with no printk on linux-bsp kernel taken from the latest re=
nesas yocto release: https://elinux.org/R-Car/Boards/Yocto-Gen3/v5.1.0

My original kernel based on rev 301d2c636929be96f3d87b1b5d287f87ed67a7be of=
 linux-bsp kernel.

I've added HYPERVISOR_console_io calls  to the code and got the following b=
acktrace:
https://pastebin.com/E3X74tyZ
It's a little bit messy, but still readable. I've added extra prints to the=
 dump_stack function to be able to see backtrace. In this case, looks like =
the problem is that system is unable to get free descriptor from printk_rin=
gbuffer.
In file kernel/printk/printk_ringbuffer.c, function desc_reserve, line:

prev_state_val =3D atomic_long_read(&desc->state_var); /* LMM(desc_reserve:=
E) */

we get some 18446744073709551615 while expecting 0.

But the problem seems to lay deeper because when I switched to the mainline=
 kernel, it hangs on read_sysreg call in

 __arch_counter_get_cntvct function.

Then I reverted commit 76085aff29f585139a37a10ea0a7daa63f70872c and this fi=
xed problem with no printk output.
Now, with the commit reverted, I see the kernel output with error CPU is in=
 inconsistent state. Looks like commit 76085aff29f585139a37a10ea0a7daa63f70=
872c is the cause of no output issue.
>
>>>
>>>
>>> Another issue, which was revealed after I got kernel output was kernel
>>> oops with message that CPU is in inconsistent state.
>>>
>>> [0.415612] EFI services will not be available.
>>>
>>> [0.420267] smp: Bringing up secondary CPUs ...
>>>
>>> [0.425185] Detected PIPT I-cache on CPU1
>>>
>>> [0.425267] Xen: initializing cpu1
>>>
>>> [0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411fd073]
>>>
>>> [0.425815] Detected PIPT I-cache on CPU2
>>>
>>> [0.425879] Xen: initializing cpu2
>>>
>>> [0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411fd073]
>>>
>>> [0.426362] Detected PIPT I-cache on CPU3
>>>
>>> [0.426425] Xen: initializing cpu3
>>>
>>> [0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411fd073]
>>>
>>> [0.426537] smp: Brought up 1 node, 4 CPUs
>>>
>>> [0.472807] SMP: Total of 4 processors activated.
>>>
>>> [0.477551] CPU features: detected: 32-bit EL0 Support
>>>
>>> [0.482745] CPU features: detected: CRC32 instructions
>>>
>>> [0.499470] ------------[ cut here ]------------
>>>
>>> [0.504034] CPU: CPUs started in inconsistent modes
>
>>Looking at Linux 5.7 code, this is printed when not all the CPUs are
>>booted in the same mode (i.e. EL1 or EL2).
>
>>This is quite odd. So let me ask a question first, did you see this
>>error during the bisection or on the latest 5.7?
>
> Switched to kernel v5.7 tag, rev:3d77e6a8804.

Similar to 5.10, the lastest stable in the linux-stable repo
linux-5.7.y. If this still doesn't help...

I need some time to download and build mainline kernel. I'll test this scen=
ario and send you results tomorrow.
> On 5.7 kernel I can see printk output, but getting CPUs started in
> inconsistent modes error.
> Also, I tried with hmp-unsafe=3Dfalse ( in xen cmdline, so only 0-3 CPU
> were enabled. And still got the same issue.
... can you print __boot_cpu_mode[0] and __boot_cpu_mode[1]?

Cheers,

--
Julien Grall

--_000_PA4PR03MB7136D3B811F820FC8A5AFF95E3E39PA4PR03MB7136eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
Please see my answers&nbsp;below.</div>
<div id=3D"appendonsend"></div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font face=3D"Calibri, sans-serif" co=
lor=3D"#000000" style=3D"font-size:11pt"><b>From:</b> Julien Grall &lt;juli=
en@xen.org&gt;<br>
<b>Sent:</b> Wednesday, July 21, 2021 7:39 PM<br>
<b>To:</b> Oleksii Moisieiev &lt;Oleksii_Moisieiev@epam.com&gt;; xen-devel@=
lists.xenproject.org &lt;xen-devel@lists.xenproject.org&gt;<br>
<b>Cc:</b> Andrii Anisov &lt;Andrii_Anisov@epam.com&gt;; Stefano Stabellini=
 &lt;sstabellini@kernel.org&gt;<br>
<b>Subject:</b> Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROB=
E_EVENTS in kernel config</font>
<div>&nbsp;</div>
</div>
<div><font size=3D"2">
<blockquote itemscope=3D"" itemtype=3D"https://schemas.microsoft.com/Quoted=
Text" style=3D"font-size: 11pt; border-left-width: 3px; border-left-style: =
solid; border-color: rgb(200, 200, 200); padding-left: 1ex; margin-left: 0.=
8ex; color: rgb(102, 102, 102);">
On 21/07/2021 15:40, Oleksii Moisieiev wrote:<br>
&gt; Hello&nbsp;Julien,<br>
<br>
Hello,<br>
<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; My setup:<br>
&gt;&gt;&gt; Board: H3ULCB Kinfisher board<br>
&gt;&gt;&gt; Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable=
-4.15)<br>
&gt;&gt;&gt; <a href=3D"https://urldefense.com/v3/__https://github.com/xen-=
project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtC=
mpst8E8JBp8Qri3haIaks6cbo7Ri$">
https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_2=
9dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cb=
o7Ri$</a>
<br>
&gt; &lt;<a href=3D"https://urldefense.com/v3/__https://github.com/xen-proj=
ect/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst=
8E8JBp8Qri3haIaks6cbo7Ri$&gt;[github[.]com">https://urldefense.com/v3/__htt=
ps://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1=
ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$&gt;[github[.]com</a>]
<br>
&gt; <br>
&gt;&gt;&gt; &lt;<a href=3D""></a>https://urldefense.com/v3/__https://githu=
b.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0b=
QhZo581jtCmpst8E8JBp8Qri3haIaks6cbo7Ri$
<br>
&gt; [github[.]com]&gt;;<br>
&gt;&gt;&gt; Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576&nbsp=
;(v5.10-rc4)<br>
&gt; <br>
&gt;&gt;Hmmm... 5.10 was released a few months ago and there are probably a=
 few<br>
&gt;&gt;stable release for the version. Can you try the latest 5.10 stable?=
<br>
&gt; <br>
&gt; Switched to tag v5.10 rev: 2c85ebc57b3e of <br>
&gt; <a href=3D"https://urldefense.com/v3/__https://github.com/torvalds/lin=
ux.git__;!!GF_29dbcQIUBPA!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbpl=
goyiv-iCGlHhXafbPNc$">
https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29=
dbcQIUBPA!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyiv-iCGlHhXafb=
PNc$</a> [github[.]com]<br>
&gt; and got the same problem, that I see no output from kernel. All tests =
<br>
&gt; were done with earlycon parameter set in the kernel cmdline.<br>
The tag v5.10 is the first official release. What I meant is using the <br>
stable branch from <br>
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git (branch <br>
linux-5.10.y).<br>
</blockquote>
<div>I need some time to download and build mainline kernel. I'll test this=
 scenario and send you results tomorrow.</div>
<blockquote itemscope=3D"" itemtype=3D"https://schemas.microsoft.com/Quoted=
Text" style=3D"font-size: 11pt; border-left-width: 3px; border-left-style: =
solid; border-color: rgb(200, 200, 200); padding-left: 1ex; margin-left: 0.=
8ex; color: rgb(102, 102, 102);">
&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; <a href=3D"https://urldefense.com/v3/__https://github.com/torv=
alds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCm=
pst8E8JBp8Qri3haIaks29w69MC$">
https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29=
dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w6=
9MC$</a>
<br>
&gt; &lt;<a href=3D"https://urldefense.com/v3/__https://github.com/torvalds=
/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8=
E8JBp8Qri3haIaks29w69MC$&gt;[github[.]com">https://urldefense.com/v3/__http=
s://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZ=
haET6l0bQhZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$&gt;[github[.]com</a>]
<br>
&gt; <br>
&gt;&gt;&gt; &lt;<a href=3D""></a>https://urldefense.com/v3/__https://githu=
b.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQ=
hZo581jtCmpst8E8JBp8Qri3haIaks29w69MC$
<br>
&gt; [github[.]com]&gt;;<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; kernel config: see attached;<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; dtb: see attached;<br>
&gt; <br>
&gt;&gt;Please avoid large attachment as they will be duplicated on every<b=
r>
&gt;&gt;mailbox. Instead, in the future, please upload them somewhere (your=
 own<br>
&gt;&gt;webserve, pastebin...) and provide a link in the e-mail.<br>
&gt; <br>
&gt; I'm sorry for that.<br>
&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; If kprobe/uprobe events are enabled - I see no output after xe=
n switched<br>
&gt;&gt;&gt; input to Dom0, if disabled - system boots up successfully.<br>
&gt;&gt;The console subsystem tends to be enabled quite late in the boot<br=
>
&gt;&gt;process. So this may mean a panic during early boot.<br>
&gt; <br>
&gt;&gt;If you haven't done yet, I would suggest to add earlycon=3Dxenboot =
on the<br>
&gt;&gt;dom0 command line. This will print some messages during early boot.=
<br>
&gt;&gt;ing.<br>
&gt; <br>
&gt; All tests were done with earlycon parameter set in the kernel command =
<br>
&gt; line (xen, dom0-bootargs).<br>
&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; Both configs work fine when I boot without xen.<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; Dom0 information from Xen console shows that only one CPU work=
s, and PC<br>
&gt;&gt;&gt; stays in &quot;__arch_counter_get_cntvct&quot; function on rea=
d_sysreg call. //<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; I did further investigation and found that kernel 5.4 doesn't =
have such<br>
&gt;&gt;&gt; kind of issues.<br>
&gt;&gt;&gt; After bisecting kernel,between 5.10 and 5.4, I found that outp=
ut<br>
&gt;&gt;&gt; disappeared on commit:<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; 76085aff29f585139a37a10ea0a7daa63f70872c<br>
&gt; <br>
&gt;&gt; From the information you provided so far, I am a bit confused how =
this<br>
&gt;&gt;could be the source of the problem. But given this is not the lates=
t<br>
&gt;&gt;5.10, I will wait for you to confirm the bug is still present befor=
e<br>
&gt;&gt;providing more input.<br>
&gt; <br>
&gt; I was confused with this commit either. As I mentioned above, I've <br=
>
&gt; checked with the latest stable 5.10 kernel and still got the same prob=
lem.<br>
<br>
Thanks for the testing. I am not quite too sure where this may fail. <br>
Maybe Stefano has an idea?<br>
<br>
If you have an external debugger, can you use it to get a stack trace?<br>
Otherwise, I would suggest to add some xen_raw_printk() in the code to <br>
figure out where it may fail.<br>
</blockquote>
<div style=3D"font-size: 11pt;">Unfortunately, I don't have an external deb=
ugger right now (my testing board is placed in the different country).<br>
<span>Let me share with you the results of the investigation I've done, bef=
ore asking help from community. I haven't shared it before because I wasn't=
 sure it's related.</span><br>
</div>
<div style=3D"font-size: 11pt;"><span><br>
</span></div>
<div style=3D"font-size: 11pt;"><span>&nbsp;I've met error with no printk o=
n linux-bsp kernel taken from the latest renesas yocto release:&nbsp;<a hre=
f=3D"https://elinux.org/R-Car/Boards/Yocto-Gen3/v5.1.0" id=3D"LPlnk203591">=
https://elinux.org/R-Car/Boards/Yocto-Gen3/v5.1.0</a></span></div>
<div style=3D"font-size: 11pt;"><br>
</div>
</font>
<div><font size=3D"2"><span style=3D"font-size: 11pt;">My original kernel b=
ased on rev&nbsp;</span></font><font size=3D"2"></font><span style=3D"color=
: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-si=
ze: 12pt;">301d2c636929be96f3d87b1b5d287f87ed67a7be
 of linux-bsp kernel.</span></div>
<div><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helve=
tica, sans-serif; font-size: 12pt;"><br>
</span></div>
<div><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helve=
tica, sans-serif; font-size: 12pt;">I've added HYPERVISOR_console_io calls<=
span style=3D"caret-color:rgb(102, 102, 102);color:rgb(102, 102, 102);font-=
family:&quot;Segoe UI&quot;, &quot;Segoe UI Web (West European)&quot;, &quo=
t;Segoe UI&quot;, -apple-system, BlinkMacSystemFont, Roboto, &quot;Helvetic=
a Neue&quot;, sans-serif;font-size:14.666666984558105px;background-color:rg=
b(255, 255, 255);display:inline !important"><span class=3D"Apple-converted-=
space">&nbsp;
 to the code and got the following backtrace:</span></span></span></div>
<div><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helve=
tica, sans-serif; font-size: 12pt;"><span style=3D"caret-color:rgb(102, 102=
, 102);color:rgb(102, 102, 102);font-family:&quot;Segoe UI&quot;, &quot;Seg=
oe UI Web (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, Blink=
MacSystemFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:14.=
666666984558105px;background-color:rgb(255, 255, 255);display:inline !impor=
tant"><span class=3D"Apple-converted-space"><a href=3D"https://pastebin.com=
/E3X74tyZ" id=3D"LPlnk">https://pastebin.com/E3X74tyZ</a><br>
</span></span></span></div>
<div class=3D"_Entity _EType_OWALinkPreview _EId_OWALinkPreview _EReadonly_=
1"></div>
<div><font color=3D"#666666"><span style=3D"caret-color: rgb(102, 102, 102)=
; font-size: 14.666666984558105px;">It's a little bit messy, but still read=
able. I've added extra prints to the dump_stack function to be able to see =
backtrace. In this case, looks&nbsp;</span></font><span style=3D"caret-colo=
r: rgb(102, 102, 102); font-size: 14.666666984558105px;">like
 the problem is that system is unable to get free descriptor from printk_ri=
ngbuffer.</span></div>
<div><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helve=
tica, sans-serif; font-size: 12pt;">In file kernel/printk/printk_ringbuffer=
.c, function desc_reserve, line:</span></div>
<div><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helve=
tica, sans-serif; font-size: 12pt;"><br>
</span></div>
<div><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helve=
tica, sans-serif; font-size: 12pt;">prev_state_val =3D atomic_long_read(&am=
p;desc-&gt;state_var); /* LMM(desc_reserve:E) */</span><br>
</div>
<div><br>
</div>
<div><font face=3D"Calibri, Arial, Helvetica, sans-serif">we get some&nbsp;=
</font><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Hel=
vetica, sans-serif; font-size: 12pt;">18446744073709551615 while expecting =
0.</span></div>
<div><br>
</div>
<div><span style=3D"display: inline !important;"><span><font color=3D"#6666=
66"><span style=3D"caret-color: rgb(102, 102, 102); font-size: 14.666666984=
558105px; background-color: rgb(255, 255, 255);">But the problem seems to l=
ay deeper because when I switched to the
 mainline kernel, it hangs on read_sysreg call in</span></font>
<p style=3D"margin: 0px; font-stretch: normal; line-height: normal;"><span =
style=3D"font-variant-ligatures: no-common-ligatures;"><span style=3D"font-=
family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(=
0, 0, 0);">&nbsp;</span></span><span style=3D"font-variant-ligatures: no-co=
mmon-ligatures; font-family: Calibri, Arial, Helvetica, sans-serif; font-si=
ze: 12pt; color: rgb(0, 0, 0);">__arch_counter_get_cntvct
 function.</span></p>
</span></span></div>
<div><span style=3D""><span style=3D"caret-color: rgb(102, 102, 102); displ=
ay: inline !important;"><span><br>
</span></span></span></div>
<div><font color=3D"#666666"><span style=3D"font-size: 14.666666984558105px=
;">Then I reverted commit&nbsp;</span></font><font color=3D"#666666"></font=
><span style=3D"color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica=
, sans-serif; font-size: 12pt;">76085aff29f585139a37a10ea0a7daa63f70872c
 and this fixed problem with no printk output.</span></div>
<div><font face=3D"Calibri, Arial, Helvetica, sans-serif">Now, with the com=
mit reverted, I see the kernel output with error&nbsp;<span style=3D"caret-=
color:rgb(102, 102, 102);color:rgb(102, 102, 102);font-family:&quot;Segoe U=
I&quot;, &quot;Segoe UI Web (West European)&quot;, &quot;Segoe UI&quot;, -a=
pple-system, BlinkMacSystemFont, Roboto, &quot;Helvetica Neue&quot;, sans-s=
erif;font-size:14.666666984558105px;background-color:rgb(255, 255, 255);dis=
play:inline !important">CPU
 is in inconsistent state. Looks like commit&nbsp;<span style=3D"caret-colo=
r:rgb(0, 0, 0);color:rgb(0, 0, 0);font-family:Calibri, Arial, Helvetica, sa=
ns-serif;font-size:16px;background-color:rgb(255, 255, 255);display:inline =
!important">76085aff29f585139a37a10ea0a7daa63f70872c<span class=3D"Apple-co=
nverted-space">&nbsp;is
 the cause of no output issue.</span></span></span></font></div>
<font size=3D"2">
<blockquote itemscope=3D"" itemtype=3D"https://schemas.microsoft.com/Quoted=
Text" style=3D"font-size: 11pt; border-left-width: 3px; border-left-style: =
solid; border-color: rgb(200, 200, 200); padding-left: 1ex; margin-left: 0.=
8ex; color: rgb(102, 102, 102);">
&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; Another issue, which was revealed after I got kernel output wa=
s kernel<br>
&gt;&gt;&gt; oops with message that CPU is in inconsistent state.<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.415612] EFI services will not be available.<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.420267] smp: Bringing up secondary CPUs ...<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.425185] Detected PIPT I-cache on CPU1<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.425267] Xen: initializing cpu1<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.425292] CPU1: Booted secondary processor 0x0000000001 [0x41=
1fd073]<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.425815] Detected PIPT I-cache on CPU2<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.425879] Xen: initializing cpu2<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.425899] CPU2: Booted secondary processor 0x0000000002 [0x41=
1fd073]<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.426362] Detected PIPT I-cache on CPU3<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.426425] Xen: initializing cpu3<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.426444] CPU3: Booted secondary processor 0x0000000003 [0x41=
1fd073]<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.426537] smp: Brought up 1 node, 4 CPUs<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.472807] SMP: Total of 4 processors activated.<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.477551] CPU features: detected: 32-bit EL0 Support<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.482745] CPU features: detected: CRC32 instructions<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.499470] ------------[ cut here ]------------<br>
&gt;&gt;&gt; <br>
&gt;&gt;&gt; [0.504034] CPU: CPUs started in inconsistent modes<br>
&gt; <br>
&gt;&gt;Looking at Linux 5.7 code, this is printed when not all the CPUs ar=
e<br>
&gt;&gt;booted in the same mode (i.e. EL1 or EL2).<br>
&gt; <br>
&gt;&gt;This is quite odd. So let me ask a question first, did you see this=
<br>
&gt;&gt;error during the bisection or on the latest 5.7?<br>
&gt; <br>
&gt; Switched to kernel v5.7 tag, rev:3d77e6a8804.<br>
<br>
Similar to 5.10, the lastest stable in the linux-stable repo <br>
<div>linux-5.7.y. If this still doesn't help...<br>
</div>
<blockquote itemscope=3D"" itemtype=3D"https://schemas.microsoft.com/Quoted=
Text" style=3D"font-size: 11pt; border-left-width: 3px; border-left-style: =
solid; border-color: rgb(200, 200, 200); padding-left: 1ex; margin-left: 0.=
8ex; color: rgb(102, 102, 102);">
<br>
</blockquote>
</blockquote>
<div><span style=3D"caret-color:rgb(0, 0, 0);font-size:small;background-col=
or:rgb(255, 255, 255);display:inline !important">I need some time to downlo=
ad and build mainline kernel. I'll test this scenario and send you results =
tomorrow.</span><br>
</div>
<blockquote itemscope=3D"" itemtype=3D"https://schemas.microsoft.com/Quoted=
Text" style=3D"font-size: 11pt; border-left-width: 3px; border-left-style: =
solid; border-color: rgb(200, 200, 200); padding-left: 1ex; margin-left: 0.=
8ex; color: rgb(102, 102, 102);">
&gt; On 5.7 kernel I can see printk output, but getting CPUs started in <br=
>
&gt; inconsistent modes error.<br>
&gt; Also, I tried with hmp-unsafe=3Dfalse ( in xen cmdline, so only 0-3 CP=
U <br>
&gt; were enabled. And still got the same issue.<br>
... can you print __boot_cpu_mode[0] and __boot_cpu_mode[1]?<br>
<br>
Cheers,<br>
<br>
-- <br>
Julien Grall<br>
</blockquote>
</font></div>
</body>
</html>

--_000_PA4PR03MB7136D3B811F820FC8A5AFF95E3E39PA4PR03MB7136eurp_--


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 18:39:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 18:39:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159542.293410 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6H7n-0001dr-Sx; Wed, 21 Jul 2021 18:39:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159542.293410; Wed, 21 Jul 2021 18:39:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6H7n-0001dk-P8; Wed, 21 Jul 2021 18:39:19 +0000
Received: by outflank-mailman (input) for mailman id 159542;
 Wed, 21 Jul 2021 18:39:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=QDAX=MN=gmail.com=rm.skakun@srs-us1.protection.inumbo.net>)
 id 1m6H7m-0001de-1D
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 18:39:18 +0000
Received: from mail-lj1-x231.google.com (unknown [2a00:1450:4864:20::231])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f078ee54-2b1d-4a68-be91-7fe2046525cd;
 Wed, 21 Jul 2021 18:39:17 +0000 (UTC)
Received: by mail-lj1-x231.google.com with SMTP id h9so4230194ljm.5
 for <xen-devel@lists.xenproject.org>; Wed, 21 Jul 2021 11:39:17 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f078ee54-2b1d-4a68-be91-7fe2046525cd
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=XVG+jbRDBSu+eXxXtQp1KBYPh+7m/khOUuuf9tJsJlQ=;
        b=o0knBKRqF+/V/tbZpHxFHljIbk4FsvpfHxd1B4gIGEd6eXlgdOM3oy0vhGXit4qYj3
         Eau+h3HBB/pRHR7jWtV+eRigTywh20vgTGPLE+kHjvhHEv1ehZ01GA/4VF8wU23W+Ykv
         EAJaX4O9jgr3FMsTBKsz07UN/lmzQ6HdWBm6TBVUW892tdubZjbTaGBZjMx8ZAQYJ7cO
         SIVhMpC2buXAwwPSCIZ6N/RAcaDc5RF3LZMUFdeqUaD0NYg0nDfSDZZ7xZPyjVy6dWbV
         rhw5saUHGPTXtEGx/ZJc07ntkyzEClVwkS6wR2VacLMcAJDIjYQMxoqoQLbUfqU+ZYCH
         QWZA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=XVG+jbRDBSu+eXxXtQp1KBYPh+7m/khOUuuf9tJsJlQ=;
        b=Ona1sji0HfuqtkAssl6Fwj209yovta+2DTcBBGT7wKrdZdgq9nMlpsbfmxJXjPTDVb
         xas9NHGNJMLGj0uxfkjjkP9POydyBXgdcBjMLqnLn/Lzzb7HFD5v/OlxJ5AKqG6fEa21
         t8SX9vwAS3hMmPHWIXXaB68qXZkVMppwwBgAVmxgcMfAMmaNMZAiJI67wDFWBopmEa3m
         1bvzJJpWmDieFLgBUkujP7Gx6WXCxfibvTU2qIe3b/kusmvRqU3rSWIRHCt4K5Ca9rIH
         6s10GF/8l2/lk0SF4yBBx9gNHrCR6stOkI/zyY3Zzy09HhJfddrmDTbhWZa6C4kiSCbI
         4Siw==
X-Gm-Message-State: AOAM530lYBUZWtwZ1mPNvT99C/Ibw83K9s2q7vMRyAXB1OaaAhxkBNWH
	rwi+qzDSONXztz7MryQJzzNAvbE7TR5fjhvhinw=
X-Google-Smtp-Source: ABdhPJwoLGwmM+TS2dyBgKCbp5Ry4yu+pA8iXsy3Lf/VOi5eurQ/S0y3MgQ+JBpzeMSSwEoknDX2czlo24N5L0fkqf8=
X-Received: by 2002:a2e:890f:: with SMTP id d15mr31953878lji.37.1626892756146;
 Wed, 21 Jul 2021 11:39:16 -0700 (PDT)
MIME-Version: 1.0
References: <20210715170011.GA17324@lst.de> <20210716083934.154992-1-rm.skakun@gmail.com>
 <20210716093551.GA17981@lst.de> <CADu_u-OYA+Z_y-DBLxyUYGhmLVMtLggmZ_SnRiEtw9EGrO4oGg@mail.gmail.com>
 <alpine.DEB.2.21.2107160828430.3916@sstabellini-ThinkPad-T480s>
 <CADu_u-Psn5QpOyZ18_NCPx14DYxmGmSqVod=_RBC3A_A93tGUw@mail.gmail.com> <20210719092235.GA31566@lst.de>
In-Reply-To: <20210719092235.GA31566@lst.de>
From: Roman Skakun <rm.skakun@gmail.com>
Date: Wed, 21 Jul 2021 21:39:05 +0300
Message-ID: <CADu_u-OVTGFpDw9cP+VHMAW8fdG3mtMZDCG3Tu92fF286zVFDA@mail.gmail.com>
Subject: Re: [PATCH v2] dma-mapping: use vmalloc_to_page for vmalloc addresses
To: Christoph Hellwig <hch@lst.de>
Cc: Stefano Stabellini <sstabellini@kernel.org>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, 
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org, 
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, 
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
	Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, 
	Volodymyr Babchuk <volodymyr_babchuk@epam.com>, Andrii Anisov <andrii_anisov@epam.com>, 
	Roman Skakun <Roman_Skakun@epam.com>, Roman Skakun <rm.skakun@gmail.com>
Content-Type: text/plain; charset="UTF-8"

> Fine with.  I've queued up the modified patch.

Good. Thanks!

>
> On Sat, Jul 17, 2021 at 11:39:21AM +0300, Roman Skakun wrote:
> > > We can merge this patch and create a new one for
> > > xen_swiotlb_free_coherent() later.
> > > Yeah, no worries, I didn't know that exposing dma_common_vaddr_to_page
> > > was problematic.
> > >
> > > This patch is fine by me.
> >
> > Good. I'm agreed too. Waiting for Christoph.
>
> Fine with.  I've queued up the modified patch.



--
Best Regards, Roman.


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 19:15:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 19:15:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159549.293421 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6HgM-0006JD-M8; Wed, 21 Jul 2021 19:15:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159549.293421; Wed, 21 Jul 2021 19:15:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6HgM-0006J6-J5; Wed, 21 Jul 2021 19:15:02 +0000
Received: by outflank-mailman (input) for mailman id 159549;
 Wed, 21 Jul 2021 19:15:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6HgL-0006Iv-Sv; Wed, 21 Jul 2021 19:15:01 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6HgL-0000Ea-K1; Wed, 21 Jul 2021 19:15:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6HgL-0000Ul-E9; Wed, 21 Jul 2021 19:15:01 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6HgL-0007Xm-Dg; Wed, 21 Jul 2021 19:15:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=s93JYmvq7/r7EEIxL4GwPmVWIOhBhyCLPxm8pjLKM+E=; b=RevP6zqd8sWuUsIMkIbCkh9ILd
	hKuodKkpDwqulS8FESg6EH0SD2359bfM7K1Y8uzoXTwsxK8hMwUfXyYI4PCQQTrnHSRUoV6exdvjU
	rKtV+KoTbJEYmB0TEpSVdFpf3A/z7uEN9Ao4v/ZxVu6jWsiUHeMJ5iMlG2kDSxB58Pic=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163868-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163868: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 21 Jul 2021 19:15:01 +0000

flight 163868 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163868/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  14 guest-start    fail in 163841 REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start    fail in 163856 REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start    fail in 163856 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-arm64-arm64-xl-credit2  13 debian-fixup               fail pass in 163841
 test-arm64-arm64-xl-thunderx 13 debian-fixup               fail pass in 163856
 test-arm64-arm64-xl          13 debian-fixup               fail pass in 163856

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

version targeted for testing:
 linux                8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  354 days
Failing since        152366  2020-08-01 20:49:34 Z  353 days  604 attempts
Testing same since   163841  2021-07-20 12:41:35 Z    1 days    3 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978216 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 21 19:23:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 19:23:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159556.293437 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Hop-00080Y-Jj; Wed, 21 Jul 2021 19:23:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159556.293437; Wed, 21 Jul 2021 19:23:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Hop-00080R-GT; Wed, 21 Jul 2021 19:23:47 +0000
Received: by outflank-mailman (input) for mailman id 159556;
 Wed, 21 Jul 2021 19:23:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=VdoL=MN=oracle.com=boris.ostrovsky@srs-us1.protection.inumbo.net>)
 id 1m6Hoo-00080L-9L
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 19:23:46 +0000
Received: from mx0b-00069f02.pphosted.com (unknown [205.220.177.32])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2a35a6dc-ea59-11eb-8d37-12813bfff9fa;
 Wed, 21 Jul 2021 19:23:44 +0000 (UTC)
Received: from pps.filterd (m0246632.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16LJBCsu021044; Wed, 21 Jul 2021 19:23:42 GMT
Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79])
 by mx0b-00069f02.pphosted.com with ESMTP id 39xc6bsw38-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Wed, 21 Jul 2021 19:23:41 +0000
Received: from pps.filterd (userp3020.oracle.com [127.0.0.1])
 by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16LJAQdJ020323;
 Wed, 21 Jul 2021 19:23:41 GMT
Received: from nam11-co1-obe.outbound.protection.outlook.com
 (mail-co1nam11lp2170.outbound.protection.outlook.com [104.47.56.170])
 by userp3020.oracle.com with ESMTP id 39v8yy288d-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Wed, 21 Jul 2021 19:23:40 +0000
Received: from CH0PR10MB5020.namprd10.prod.outlook.com (2603:10b6:610:c0::22)
 by CH0PR10MB4827.namprd10.prod.outlook.com (2603:10b6:610:df::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.32; Wed, 21 Jul
 2021 19:23:38 +0000
Received: from CH0PR10MB5020.namprd10.prod.outlook.com
 ([fe80::85d:29fe:4f5e:eae1]) by CH0PR10MB5020.namprd10.prod.outlook.com
 ([fe80::85d:29fe:4f5e:eae1%5]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 19:23:38 +0000
Received: from [10.74.101.202] (160.34.89.202) by
 BN9PR03CA0225.namprd03.prod.outlook.com (2603:10b6:408:f8::20) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 21 Jul 2021 19:23:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2a35a6dc-ea59-11eb-8d37-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2021-07-09;
 bh=dbE5AaXFjKwxOEq/ghfe4pTyn0yB32cJoCoFloJHJqQ=;
 b=sbWRPoqUodluPbvVkBkIsY/eyAurYyHzYQSrZyZNmtBCm50VmQC5qlkBqI9/+bFpNpBM
 xLHeGNp+VrRPgr/qwMBBwpKEvTePKGo8ofiDrRpNXgIxH58Ide786kk+WYdGxR0ghl2a
 4PCPTbKYnWQkXv340zGJT0BEVvzvCS4tuRCKC0c7XAh78RbqyMhm64qMtLlucu2R0+pr
 J42jOubHFkbmuTgB4px/B5SvwjQZR47l4E08aXeYh3QQQBlfZKWHfaMUwweGECvQSE5j
 kn8kG0URTmr/DA1fZ6CxJJUkDtSRqRh0zNt68dTFwbzxoivw2KRw8inQsR2gnZAmyu3L oQ== 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2020-01-29;
 bh=dbE5AaXFjKwxOEq/ghfe4pTyn0yB32cJoCoFloJHJqQ=;
 b=Tpajh79DhNGdeK/UdaF/vJzFeRPMyRUwlQcLF81Vj9jySxULSRu93IMUTaYDLVCz+oOF
 T4GZ7D4cNbU3UuQqkgZM7KZnZ4Ar4Iv2S1rYzYj38L7obFIE0ntSXJWaUjzOmtnfi/Jf
 V8VHG4VZ6ZdltpGN355+0MRP4VkFdonl5jEbnM1vbFc2IcVbOQ+P1YbHY1akwW22fAlb
 Kb404kaBAtHfjut4tHMtjN395naFwYYR00tA87T+nWOdnfy4/JMjvA/3FDVnnF9ALOaJ
 QyxkmFQV5fJ2tJRYvKKKj/5cF2G3t7YtjbGt3B3I42lu7e4a+CbBM69JZO71erag3/m9 VA== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jOSuXHgDeWmcwI8XyU1Z5T56tQgpr8QI5ruIlMcmFyNZFL4l37pFN2ngVAUskFNQ73RPknhyn234OxmspEfZnJkj6kU5AAtOLVn9xhUisq7AvNZeAPeJm6nW/Uyyd29xi1i1ze7hkHD7mbIDZvNSv5ljaF+fvKoH1xb9ZDGogPPwFF8Dqc26XdstEslH/Dw9vkGB1UJa/KJffPv1M/y0mPhdV/KcE0v4sVoJINojNO8E18NYEQfqixJBDd7my72ug55pCI4vhRUo0qtRCjJ37Otj5JqpuS9FyILje+nWU0VV72HjibUDvkEdBSSwaLd6GIxrKqfuj5oborICLs690Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dbE5AaXFjKwxOEq/ghfe4pTyn0yB32cJoCoFloJHJqQ=;
 b=QVtUW1VY5XESHnbYcjMiBRiuHsJD7koBtL2TH10xKvayTKrVAdrisy0jUq1+J3kDXuyjX4nEoh9GiECwoRfpdcMbfMlGcwLBgDcvSJarTTxSgPEGMpwoLUExVega9EcYCsJdQBUlu97rrXypLnkDD11PJ8TXUhmcPLTKYOn6+h4UuVfVLins6cBvPI3jIscN8JmSU1zhM4BMHkgC9Ctff+O7yk8wVV94yUEjzGchprOcuX0p8zB0diP2AAD4B26UP7bIexV2rqH4EYJRePy3TNZ3AyWQEXDwr6yLRTbAxSUtdUuMkIoPx+wA9cFVf+ukdztmGvKnWPMTGs05Uj1rAw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=dbE5AaXFjKwxOEq/ghfe4pTyn0yB32cJoCoFloJHJqQ=;
 b=Q8/xcdU5EPtqm+0e3CDgmi+KlFXu6MWbj6ud1TheUDjAVkt79gS0g599PXUlpHNE+iDLDwMSUZzfZK4qsit/r+fKaubQ4oP7ZBYYLonTP28LpTdLuqWrgohhmVYUijB0O9pPfn+0vVrHJYqdae0a0CKDrmxBjEjieIDUgxsYIJk=
Authentication-Results: vger.kernel.org; dkim=none (message not signed)
 header.d=none;vger.kernel.org; dmarc=none action=none header.from=oracle.com;
Subject: Re: [PATCH] xen/events: remove redundant initialization of variable
 irq
To: Juergen Gross <jgross@suse.com>, Colin King <colin.king@canonical.com>,
        Stefano Stabellini <sstabellini@kernel.org>,
        xen-devel@lists.xenproject.org
Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org
References: <20210721114010.108648-1-colin.king@canonical.com>
 <b8efb888-6307-ef26-a4ae-666a965b79d2@suse.com>
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Message-ID: <90f59449-469f-218c-d4b3-51f99eaac70f@oracle.com>
Date: Wed, 21 Jul 2021 15:23:34 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
In-Reply-To: <b8efb888-6307-ef26-a4ae-666a965b79d2@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-US
X-ClientProxiedBy: BN9PR03CA0225.namprd03.prod.outlook.com
 (2603:10b6:408:f8::20) To CH0PR10MB5020.namprd10.prod.outlook.com
 (2603:10b6:610:c0::22)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a9849c31-1d49-4df0-9a89-08d94c7d0aa1
X-MS-TrafficTypeDiagnostic: CH0PR10MB4827:
X-Microsoft-Antispam-PRVS: 
	<CH0PR10MB48273F4FE083B24E64246BF98AE39@CH0PR10MB4827.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1388;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	QWbTyZFLgNFl3xH8P93oiz+k9YIXkgxFR85cghyBNFw7XjJtjucN+h0F1333llHcXkdblZ2QIArd6GRW5kYOljmFZ2L67rGJmmEEO0q8txEbDiDGCKVK8gsYfkTo8pfB0PeJ5ZTd80X1SYOAtYXz6d43+eNWzpfe2Ea6KJKDRzS/0N/hew0GlucYexZqVjvE7mkpvYkx3DaMPg4sbRIguszmfytv+Rwmw2tC5UTEAZOJfFZfgRv9O6VcwH3lr4BBo88zdSvxLFa0Yyv6TMq8JCOoNUVxzn6U7puMTVxTaPi9CVjBqHOY1oJms7BiwUwWF/nsmv/T7odnVIZBhbwIo9xZm7bf/JnW4fOAQbOHYMKpCbk3P9JXA8idWY0XPpNXDSh23jkcVwRBlVsYYyy1p25wiJeXXibuCZspfj7YOeh4V6B/+A28AiHOFcH1j6xtHaI1QFqr9Tql7yz1GEN49nEqjU0ZQtz1gH3Vh7de+8BCNeTT0Yy6mr2WcSnN2MYbzk9BZzkmPWLiQSYZPefUvqkIL3heQLUvnA49fRzNSYTGZdDGG0fQIZ0whmeUjIKssDsIpo6lP/VhQkZRHoMl7TM7FbEdAFIxNJe8/RBQ6KbbXU5D34Jms2mo7XSb1U1rM+oS3cNIDkmUa3qt6hh0J9XOMI+ZOxO8b+RzXbKsj5Hst24AOcNIEkcZJ8CzP6uFy719XdEUqYRliUlK1/3jgnXWDE2S7XX782kNNsb/OGs=
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR10MB5020.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(376002)(39860400002)(366004)(136003)(110136005)(31686004)(66556008)(8936002)(6486002)(66476007)(4744005)(83380400001)(8676002)(53546011)(956004)(86362001)(186003)(66946007)(38100700002)(478600001)(6666004)(31696002)(4326008)(2616005)(16576012)(36756003)(44832011)(5660300002)(316002)(26005)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	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
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a9849c31-1d49-4df0-9a89-08d94c7d0aa1
X-MS-Exchange-CrossTenant-AuthSource: CH0PR10MB5020.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 19:23:38.5340
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 1zydmprdui0y09CX6xopn83RCNFYa+lYlxzTGVzHmPanRPcxvxvHZJZfKYhtEuIJCTK8Y6Yyt3rCwsWQg6UEAwjyURPWwiIOk1TE9ZE+9Jk=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB4827
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10052 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxscore=0 malwarescore=0
 adultscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0
 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000
 definitions=main-2107210114
X-Proofpoint-GUID: RURw4P2naOchWUDgnS8PJbgbDwwFyJhB
X-Proofpoint-ORIG-GUID: RURw4P2naOchWUDgnS8PJbgbDwwFyJhB


On 7/21/21 11:36 AM, Juergen Gross wrote:
> On 21.07.21 13:40, Colin King wrote:
>> From: Colin Ian King <colin.king@canonical.com>
>>
>> The variable irq is being initialized with a value that is never
>> read, it is being updated later on. The assignment is redundant and
>> can be removed.
>>
>> Addresses-Coverity: ("Unused value")
>> Signed-off-by: Colin Ian King <colin.king@canonical.com>
>
> Reviewed-by: Juergen Gross <jgross@suse.com>



Applied to for-linus-5.14


-boris



From xen-devel-bounces@lists.xenproject.org Wed Jul 21 22:30:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 21 Jul 2021 22:30:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159568.293460 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6KjZ-0004Gb-SC; Wed, 21 Jul 2021 22:30:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159568.293460; Wed, 21 Jul 2021 22:30:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6KjZ-0004GU-On; Wed, 21 Jul 2021 22:30:33 +0000
Received: by outflank-mailman (input) for mailman id 159568;
 Wed, 21 Jul 2021 22:30:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=IfpH=MN=starlab.io=scott.davis@srs-us1.protection.inumbo.net>)
 id 1m6KjY-0004GI-Jr
 for xen-devel@lists.xenproject.org; Wed, 21 Jul 2021 22:30:32 +0000
Received: from GCC02-DM3-obe.outbound.protection.outlook.com (unknown
 [40.107.91.124]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f4d8ee44-f3bc-44f3-8c17-07319508af3d;
 Wed, 21 Jul 2021 22:30:29 +0000 (UTC)
Received: from MN2PR09MB5258.namprd09.prod.outlook.com (2603:10b6:208:220::11)
 by MN2PR09MB5212.namprd09.prod.outlook.com (2603:10b6:208:217::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Wed, 21 Jul
 2021 22:30:25 +0000
Received: from MN2PR09MB5258.namprd09.prod.outlook.com
 ([fe80::191d:a0d3:24d:989f]) by MN2PR09MB5258.namprd09.prod.outlook.com
 ([fe80::191d:a0d3:24d:989f%6]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021
 22:30:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f4d8ee44-f3bc-44f3-8c17-07319508af3d
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Q/XmaAM1JS1O2TG/3yATnk7FEtRjtXj1bqhlikAlFNzzWAsVeCIvMgjWxeciIJRbq8P8kNE6UhQcjLyGywQ3bAa9NPHHGjHTohyA8gfbigptYceYjT3Y71v1dooT4yHH4VD5K4XA4DavcEXPrXoNyOttp0ZltZMhmwn5f2s7GjFOd6wHKGnVphJulnK6BnuvT8eFhpiVf3waWW6VmFoALIajJ5qjurY4qekkdjWmtZhsqj6OS9Ny2kS6EkDhl7k5NPQF0ivzMEZ7V1rzkaPi1KXF2iCrAtesnf/WMYrLSEZ86tWTbr/MHdfsfiC1Q0pU3Tka22vGC1gk5wLkLVF05w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NNOLrlnNGUcqK4MGZRZFcF7QTzCrlvG8mVdIQd2HIYw=;
 b=Mco6XDkxJG9Yb5xgmksLk5WfnAc5tzi+tOTD84BxmosGzdmWj4DVDz1iDPRJNRQ+yWRmKrbm5Ns7YK94eLJtcu2pchxyqbZbrefJ8Qvcwse//fQqiQTSZH43NCHFj4z+Fw8Kue37Bbbqv8Q412EAe+6GIAg/XiBCvFpp1Nx9AWKM2kCXtHM7u9e9Od9N8AotAjzBDPMurMfSvkWm4VWuTnk/DpeZtzAyXtcWpgeyJ2I+ewC53rcGynPMgE+ZowP8MIvhTf+4GCHcHQ3TnNPO5P9zVaFHRxn6DPtvmOkkJdo61Yz0lLQnEFJBpaCdPojvhGvKf1t1WgHRF7JPE1uqNA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=starlab.io; dmarc=pass action=none header.from=starlab.io;
 dkim=pass header.d=starlab.io; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlab.io;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NNOLrlnNGUcqK4MGZRZFcF7QTzCrlvG8mVdIQd2HIYw=;
 b=mZwFgpJwCvj9H1Yqb5lI2heax8W+tbQc69Xs34Sg8az8cJ3pIxQUJ2v2s0EnRno+N/gDjnPb+wOHmoSUhxWeDpsj60bYdBCmbfv74rjXwoiN6GvKPewAkK/Bl7KqdxXcL801jlS9cGHrnwwN9YIculnWOqjw89n/vXZDKQ2Ajro=
From: Scott Davis <scott.davis@starlab.io>
To: Julien Grall <julien@xen.org>, Jason Andryuk <jandryuk@gmail.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
CC: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, George Dunlap
	<george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, Anthony
 PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
Thread-Topic: [PATCH] tools/xl: Add stubdomain_cmdline option to xl.cfg
Thread-Index: AQHXfZDNgVrtHzLC8keYeUzq7QcR26tNF7mAgACqFQA=
Date: Wed, 21 Jul 2021 22:30:24 +0000
Message-ID: <DF05B6D6-A0B1-4951-9F3B-2B647B1E41BF@starlab.io>
References:
 <6562806d7430431dc154af2c6e4a5232725fc136.1626800539.git.scott.davis@starlab.io>
 <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
In-Reply-To: <c8a1120b-0a4e-60ef-66c0-5c33ab988a54@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=starlab.io;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 0a6e5ca0-8d73-49e0-23d6-08d94c97225c
x-ms-traffictypediagnostic: MN2PR09MB5212:
x-microsoft-antispam-prvs:
 <MN2PR09MB5212A19F3700A1AC5B9A4C2691E39@MN2PR09MB5212.namprd09.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:8882;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 2JnEBLSRduxlFN1EH/eIwTvrCuZMtwgfVO8EM8TuDfVyOiHiAtSix57b9qq39Dsj+NWXrnnKtnlkhcIaYMPybuNOb7EIXw0vtm8QZ2yaFl/AzKTpxm7fsEpzUwSsmnDJLAp7QeMd13gWjJM2N/ttF1QisKfxYntWTqKap5VMwhDguldKeSxMMnu53As8MYBe2I/8KP1mQzaTSvwUIrLAM6I4YF1dGIuQbORkkHIk1kGV+75Q+2exvy62+tMTtVDSGAYqpO9e+HBOa/kt0TtMUELdiDBFdpt3SDqAYH+HFmRclK2gkyD4PmvAYYTQh3S+Bp8h6la05GbvWnpx5YAWajsGTI3bqZOzfUeU0pTRexvw4iuHYaHEoD8g1Dp1ZnhcVJKNC5YvvW0L5YyXM6kMMSh3meDzfvr5RE8Cd/tq1cDhCf+iQAj2hZvUuyqWxmbqZoSfCtQBgL1Re/q5wfz5ZPFwb1KKyi/JdNu+31IPxeazDErMn3tA7ptfeqsI4ij2YwM5Jxa8t9TAQ/87jum8Cg2Jkn+/t3o6ZzpDVY7ZW787LEaRiU+pHZf05MpXHnlryPgKzj+yYH6eWPCDKvAWhkC2zVTnsALCX7elpCt7XEIqP+PxfI7jGIC8uZeptKpFvD69hrhC6lMCKlK8TOY5rTvaD7oHM6ePSTdlgCj4eKnqGUIgsjjmGi9suExw2X5pUy4VVDFuDnJP2t5X29o1yGyuEcY1pPx5mPjvDr3osWo=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR09MB5258.namprd09.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(366004)(376002)(39830400003)(346002)(6486002)(26005)(38100700002)(8936002)(6512007)(2906002)(54906003)(53546011)(36756003)(6506007)(316002)(122000001)(186003)(8676002)(110136005)(5660300002)(4326008)(66946007)(64756008)(66556008)(66446008)(66476007)(33656002)(2616005)(71200400001)(44832011)(86362001)(478600001)(76116006)(45980500001)(38070700004);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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/eqAaCBu8?=
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <317A1053D392A0439A29DCF6DB9FD51E@namprd09.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: starlab.io
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MN2PR09MB5258.namprd09.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0a6e5ca0-8d73-49e0-23d6-08d94c97225c
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jul 2021 22:30:24.9135
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 5e611933-986f-4838-a403-4acb432ce224
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR09MB5212

VGhhbmtzIGZvciB0aGUgZmVlZGJhY2ssIGFsbC4NCg0KT24gNy8yMS8yMSwgNDoyMSBBTSwgSnVs
aWVuIEdyYWxsIHdyb3RlOg0KPiBNYXkgSSBhc2sgd2h5IGVtYmVkZGluZyB0aGUgY29tbWFuZCBs
aW5lIGluIHRoZSBrZXJuZWwgd291bGQgbm90IGJlIGENCj4gc29sdXRpb24/IERvIHlvdSBleHBl
Y3QgaXQgdG8gY2hhbmdlIGZyb20gc3R1YmRvbSB0byBzdHViZG9tPw0KDQpPZiBjb3Vyc2UuIEZv
ciBDcnVjaWJsZSwgd2UncmUgdXNpbmcgYSBjb21tb24ga2VybmVsIGFuZCBpbml0cmFtZnMgZm9y
IA0Kc3R1YmRvbWFpbnMgYW5kIGRyaXZlciBkb21haW5zLiBUaGUgY29tbWFuZCBsaW5lIGxldHMg
dXMgdGVsbCBlYWNoIGRvbWFpbiANCnR5cGUgaG93IHRvIGNvbmZpZ3VyZSBpdHNlbGYgb24gYm9v
dCB2aWEgdGhlIHRvb2wgc3RhY2suDQoNCj4gUGxlYXNlIGFkZCBhIExJQlhMX0hBVkVfLi4uIGlu
IGluY2x1ZGUvbGlieGwuaC4gVGhpcyBpcyB1c2VkIGJ5IGV4dGVybmFsDQo+IHRvb2xzdGFjayAo
ZS5nLiBsaWJ2aXJ0KSB0byBrbm93IHdoZXRoZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIGxpYnhsDQo+
IHByb3ZpZGUgdGhlIGZpZWxkLg0KDQpBY2suIEl0IGFwcGVhcnMgdGhlcmUgd2FzIG5vdCBhbiBl
bnRyeSBhZGRlZCB0aGVyZSBmb3IgdGhlIG90aGVyIA0KTGludXgtYmFzZWQgInN0dWJkb21haW5f
KiIgZmllbGRzIHdoZW4gdGhleSB3ZXJlIGluc2VydGVkIGxhc3QgeWVhciwgc28gSSANCndpbGwg
YWRkIGEgc2luZ2xlIGVudHJ5IGluIHYyIHRvIGNvdmVyIHRob3NlIHRocmVlIChtZW1rYiwga2Vy
bmVsLCBhbmQgDQpyYW1kaXNrKSBwbHVzIGNtZGxpbmUsIHVubGVzcyB0aGVyZSBpcyBhbiBvYmpl
Y3Rpb24uDQoNCk9uIDcvMjEvMjEsIDg6NDIgQU0sIEphc29uIEFuZHJ5dWsgd3JvdGU6DQo+IEkg
dGhpbmsgdGhpcyBvcHRpb24gYWN0dWFsbHkgc2V0cyB0aGUgc3RyaW5nLCBzbyB5b3Ugd2FudCAi
U2V0DQo+IEI8U1RSSU5HPiBhcyB0aGUgZGV2aWNlLW1vZGVsIHN0dWJkb21haW4ga2VybmVsIGNv
bW1hbmQgbGluZS4iIG9yDQo+IHNvbWV0aGluZyBlcXVpdmFsZW50Pw0KDQpBY2suIEFzIHlvdSBs
YXRlciBub3RlZCwgSSBjb3BpZWQgdGhlICJBcHBlbmQiIHdvcmRpbmcgZnJvbSB0aGUgY21kbGlu
ZSANCm9wdGlvbiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHhsIHdhcyBsZWF2aW5nIHJvb20gZm9y
IGl0c2VsZiB0byBhZGQgb3RoZXIgDQppdGVtcyB0byB0aGUgY29tbWFuZCBsaW5lIGluIHRoZSBm
dXR1cmUuIFdpbGwgdXNlICJTZXQiIGluIHYyIGZvciBjbGFyaXR5LCANCnRob3VnaC4NCg0KR29v
ZCBkYXksDQoNCi1TY290dCBEYXZpcyANCg0K


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 00:32:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 00:32:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159579.293479 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6MdD-0001mI-Lq; Thu, 22 Jul 2021 00:32:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159579.293479; Thu, 22 Jul 2021 00:32:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6MdD-0001mB-IT; Thu, 22 Jul 2021 00:32:07 +0000
Received: by outflank-mailman (input) for mailman id 159579;
 Thu, 22 Jul 2021 00:32:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6MdB-0001m1-KD; Thu, 22 Jul 2021 00:32:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6MdB-0005LK-Bp; Thu, 22 Jul 2021 00:32:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6MdB-0006zs-0F; Thu, 22 Jul 2021 00:32:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6MdA-0007MN-Vy; Thu, 22 Jul 2021 00:32:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=vWVTDubrGrtnzpDPau+3kUD0crZYTDt7plDRRS+tGgU=; b=ELFAHsHomMzQX1+ho57u95ds2L
	AfHXqLVMY+cew9uNRvKiEvb79dmGlZRDcuRDwxXns2BPWYjLSzQwPB3gPjfScpLeUncUcKsbMx0tX
	73neVutH9zi5vtuFSrs91Ksfse2Kc1SnjZLpS1S3LhXPuk/LDsBRIFbJDiqdzZdoWw38=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163877-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163877: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 00:32:04 +0000

flight 163877 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163877/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10     fail pass in 163859

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

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163877  2021-07-21 14:39:59 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 02:13:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 02:13:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159589.293500 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6OCq-0003an-AO; Thu, 22 Jul 2021 02:13:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159589.293500; Thu, 22 Jul 2021 02:13:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6OCq-0003af-4K; Thu, 22 Jul 2021 02:13:00 +0000
Received: by outflank-mailman (input) for mailman id 159589;
 Thu, 22 Jul 2021 02:12:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6OCo-0003aZ-OA
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 02:12:58 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 545f72a6-ea92-11eb-8e26-12813bfff9fa;
 Thu, 22 Jul 2021 02:12:57 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 256F561279;
 Thu, 22 Jul 2021 02:12:56 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 545f72a6-ea92-11eb-8e26-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626919976;
	bh=F6gfvGv+ySp5ERII/hFeIhaU18h+cBpDd/Db+0kjQiw=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=EtwaX7wsgyf4X0K+G1S52kRS2eD3IZt+ufvT/bCAcw6f8Eaf7nLSszuQHUJZ1RaGp
	 s6sQzP3NuKlg3O/6241XzBrIDUENTKVb1kHTWwRXleGI1vkKZu8ivlatIRsZ6TGEVN
	 65w7j8QcnNv3E1M+JdDIoU+Oy4P0r/L41hVDQADFnrN8dS7eS1dLjyOzGcVS+6G/oa
	 AsvN1x+cDYPQAxyjKw36sOXZWuh3yoq9JnEwJBshX70vFl/ciDpZdIpXJwNO//wLz/
	 f/hg+o5NMqy4bsOUQLySSqEncpFfxCtwCVgUpsObcO/NhlXDrvuDL8FceQdkJLHKs1
	 Lz9sPAkZrIXpw==
Date: Wed, 21 Jul 2021 19:12:47 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>
cc: Julien Grall <julien@xen.org>, 
    "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
    Andrii Anisov <Andrii_Anisov@epam.com>, 
    Stefano Stabellini <sstabellini@kernel.org>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
In-Reply-To: <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
Message-ID: <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org> <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>,<8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org> <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; BOUNDARY="8323329-2045330416-1626919039=:14204"
Content-ID: <alpine.DEB.2.21.2107211858210.14204@sstabellini-ThinkPad-T480s>

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-2045330416-1626919039=:14204
Content-Type: text/plain; CHARSET=UTF-8
Content-Transfer-Encoding: 8BIT
Content-ID: <alpine.DEB.2.21.2107211858211.14204@sstabellini-ThinkPad-T480s>

On Wed, 21 Jul 2021, Oleksii Moisieiev wrote:
> Please see my answers below.
> 
> ___________________________________________________________________________________________________________________________________________
> From: Julien Grall <julien@xen.org>
> Sent: Wednesday, July 21, 2021 7:39 PM
> To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>; xen-devel@lists.xenproject.org <xen-devel@lists.xenproject.org>
> Cc: Andrii Anisov <Andrii_Anisov@epam.com>; Stefano Stabellini <sstabellini@kernel.org>
> Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in kernel config  
>       On 21/07/2021 15:40, Oleksii Moisieiev wrote:
>       > Hello Julien,
> 
>       Hello,
> 
>       >>>
>       >>> My setup:
>       >>> Board: H3ULCB Kinfisher board
>       >>> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15)
>       >>>https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>       ri3haIaks6cbo7Ri$
>       ><https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8
>       Qri3haIaks6cbo7Ri$>[github[.]com]
>       >
>       >>><https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8
>       Qri3haIaks6cbo7Ri$
>       > [github[.]com]>;
>       >>> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576 (v5.10-rc4)
>       >
>       >>Hmmm... 5.10 was released a few months ago and there are probably a few
>       >>stable release for the version. Can you try the latest 5.10 stable?
>       >
>       > Switched to tag v5.10 rev: 2c85ebc57b3e of
>       >https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyi
>       v-iCGlHhXafbPNc$ [github[.]com]
>       > and got the same problem, that I see no output from kernel. All tests
>       > were done with earlycon parameter set in the kernel cmdline.
>       The tag v5.10 is the first official release. What I meant is using the
>       stable branch from
>       git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git (branch
>       linux-5.10.y).
> 
> I need some time to download and build mainline kernel. I'll test this scenario and send you results tomorrow.

I tried 5.10 with:

CONFIG_KPROBE_EVENTS=y
CONFIG_UPROBE_EVENTS=y

and I could boot without issues on Xilinx ZynqMP.



>       >>>
>       >>>https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qr
>       i3haIaks29w69MC$
>       ><https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>       ri3haIaks29w69MC$>[github[.]com]
>       >
>       >>><https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>       ri3haIaks29w69MC$
>       > [github[.]com]>;
>       >>>
>       >>> kernel config: see attached;
>       >>>
>       >>> dtb: see attached;
>       >
>       >>Please avoid large attachment as they will be duplicated on every
>       >>mailbox. Instead, in the future, please upload them somewhere (your own
>       >>webserve, pastebin...) and provide a link in the e-mail.
>       >
>       > I'm sorry for that.
>       >
>       >>>
>       >>>
>       >>> If kprobe/uprobe events are enabled - I see no output after xen switched
>       >>> input to Dom0, if disabled - system boots up successfully.
>       >>The console subsystem tends to be enabled quite late in the boot
>       >>process. So this may mean a panic during early boot.
>       >
>       >>If you haven't done yet, I would suggest to add earlycon=xenboot on the
>       >>dom0 command line. This will print some messages during early boot.
>       >>ing.
>       >
>       > All tests were done with earlycon parameter set in the kernel command
>       > line (xen, dom0-bootargs).
>       >
>       >>>
>       >>> Both configs work fine when I boot without xen.
>       >>>
>       >>>
>       >>> Dom0 information from Xen console shows that only one CPU works, and PC
>       >>> stays in "__arch_counter_get_cntvct" function on read_sysreg call. //
>       >>>
>       >>> I did further investigation and found that kernel 5.4 doesn't have such
>       >>> kind of issues.
>       >>> After bisecting kernel,between 5.10 and 5.4, I found that output
>       >>> disappeared on commit:
>       >>>
>       >>> 76085aff29f585139a37a10ea0a7daa63f70872c
>       >
>       >> From the information you provided so far, I am a bit confused how this
>       >>could be the source of the problem. But given this is not the latest
>       >>5.10, I will wait for you to confirm the bug is still present before
>       >>providing more input.
>       >
>       > I was confused with this commit either. As I mentioned above, I've
>       > checked with the latest stable 5.10 kernel and still got the same problem.
> 
>       Thanks for the testing. I am not quite too sure where this may fail.
>       Maybe Stefano has an idea?

Are you booting with bootefi? (I cannot see any issues with or without
bootefi.)

In any case, the fact that you need to revert
76085aff29f585139a37a10ea0a7daa63f70872c to see the printk output is
very odd. It might point to an alignment problem or another memory
issue. It is possible that the weirdness you are seeing below (e.g. "we
get some 18446744073709551615 while expecting 0") is due to a memory
corruption.

Given that 76085aff29f585139a37a10ea0a7daa63f70872c is changing some
section alignment from 4K to 64K, it increases the memory used to load
the kernel. Is it possible that the size increase is causing you to go
beyond the address range supposed to be used? E.g. U-Boot loading the
kernel at invalid addresses.

Things like CONFIG_KPROBE_EVENTS=y and CONFIG_UPROBE_EVENTS=y are
relevant because they increase the size of the kernel, possibly pushing
it to an invalid memory range?

You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
work the same.

Looking at the boot logs on pastebin I noticed that Xen is not loaded at
a 2MB aligned address. I recommend you change Xen loading address to
0x500200000. And the kernel loading address to 0x500400000.



>       If you have an external debugger, can you use it to get a stack trace?
>       Otherwise, I would suggest to add some xen_raw_printk() in the code to
>       figure out where it may fail.
> 
> Unfortunately, I don't have an external debugger right now (my testing board is placed in the different country).
> Let me share with you the results of the investigation I've done, before asking help from community. I haven't shared it before because I
> wasn't sure it's related.
> 
>  I've met error with no printk on linux-bsp kernel taken from the latest renesas yocto
> release: https://elinux.org/R-Car/Boards/Yocto-Gen3/v5.1.0
> 
> My original kernel based on rev 301d2c636929be96f3d87b1b5d287f87ed67a7be of linux-bsp kernel.
> 
> I've added HYPERVISOR_console_io calls  to the code and got the following backtrace:
> https://pastebin.com/E3X74tyZ
> It's a little bit messy, but still readable. I've added extra prints to the dump_stack function to be able to see backtrace. In this case,
> looks like the problem is that system is unable to get free descriptor from printk_ringbuffer.
> In file kernel/printk/printk_ringbuffer.c, function desc_reserve, line:
> 
> prev_state_val = atomic_long_read(&desc->state_var); /* LMM(desc_reserve:E) */
> 
> we get some 18446744073709551615 while expecting 0.
> 
> But the problem seems to lay deeper because when I switched to the mainline kernel, it hangs on read_sysreg call in
> 
>  __arch_counter_get_cntvct function.
> 
> 
> Then I reverted commit 76085aff29f585139a37a10ea0a7daa63f70872c and this fixed problem with no printk output.
> Now, with the commit reverted, I see the kernel output with error CPU is in inconsistent state. Looks like
> commit 76085aff29f585139a37a10ea0a7daa63f70872c is the cause of no output issue.
>       >
>       >>>
>       >>>
>       >>> Another issue, which was revealed after I got kernel output was kernel
>       >>> oops with message that CPU is in inconsistent state.
>       >>>
>       >>> [0.415612] EFI services will not be available.
>       >>>
>       >>> [0.420267] smp: Bringing up secondary CPUs ...
>       >>>
>       >>> [0.425185] Detected PIPT I-cache on CPU1
>       >>>
>       >>> [0.425267] Xen: initializing cpu1
>       >>>
>       >>> [0.425292] CPU1: Booted secondary processor 0x0000000001 [0x411fd073]
>       >>>
>       >>> [0.425815] Detected PIPT I-cache on CPU2
>       >>>
>       >>> [0.425879] Xen: initializing cpu2
>       >>>
>       >>> [0.425899] CPU2: Booted secondary processor 0x0000000002 [0x411fd073]
>       >>>
>       >>> [0.426362] Detected PIPT I-cache on CPU3
>       >>>
>       >>> [0.426425] Xen: initializing cpu3
>       >>>
>       >>> [0.426444] CPU3: Booted secondary processor 0x0000000003 [0x411fd073]
>       >>>
>       >>> [0.426537] smp: Brought up 1 node, 4 CPUs
>       >>>
>       >>> [0.472807] SMP: Total of 4 processors activated.
>       >>>
>       >>> [0.477551] CPU features: detected: 32-bit EL0 Support
>       >>>
>       >>> [0.482745] CPU features: detected: CRC32 instructions
>       >>>
>       >>> [0.499470] ------------[ cut here ]------------
>       >>>
>       >>> [0.504034] CPU: CPUs started in inconsistent modes
>       >
>       >>Looking at Linux 5.7 code, this is printed when not all the CPUs are
>       >>booted in the same mode (i.e. EL1 or EL2).
>       >
>       >>This is quite odd. So let me ask a question first, did you see this
>       >>error during the bisection or on the latest 5.7?
>       >
>       > Switched to kernel v5.7 tag, rev:3d77e6a8804.
> 
>       Similar to 5.10, the lastest stable in the linux-stable repo
>       linux-5.7.y. If this still doesn't help...
> 
> I need some time to download and build mainline kernel. I'll test this scenario and send you results tomorrow.
>       > On 5.7 kernel I can see printk output, but getting CPUs started in
>       > inconsistent modes error.
>       > Also, I tried with hmp-unsafe=false ( in xen cmdline, so only 0-3 CPU
>       > were enabled. And still got the same issue.
>       ... can you print __boot_cpu_mode[0] and __boot_cpu_mode[1]?
> 
>       Cheers,
> 
>       --
>       Julien Grall
> 
> 
> 
--8323329-2045330416-1626919039=:14204--


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 02:20:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 02:20:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159595.293512 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6OJo-0005Ga-0D; Thu, 22 Jul 2021 02:20:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159595.293512; Thu, 22 Jul 2021 02:20:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6OJn-0005GT-TJ; Thu, 22 Jul 2021 02:20:11 +0000
Received: by outflank-mailman (input) for mailman id 159595;
 Thu, 22 Jul 2021 02:20:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OJm-0005GJ-H0; Thu, 22 Jul 2021 02:20:10 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OJm-0005At-7o; Thu, 22 Jul 2021 02:20:10 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OJl-0002XY-TC; Thu, 22 Jul 2021 02:20:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OJl-0000uL-SE; Thu, 22 Jul 2021 02:20:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=C4DIzO07cc9cdR4kXfJWwEvqPfFXwhZMac8Iyr/dijg=; b=Gkbiwo80YLT33+QznJEs4Bc8Mf
	dFWKz+zsDfen5PrKteNQKKdF2gZZfbivFvhhICNlxBQOxHnSFuzXb8fipOxPRUMjOl4EVo6Clv8rV
	YuFrkRN6+5ko2aqLvS9vK5UBiMDTVrIp5F9sW+r5lHz6ZsYs8kLBEseq9vC1+EH0sk4o=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163882-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163882: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=097aeeb119538a60f68355f1c3ac47df1834c90a
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 02:20:09 +0000

flight 163882 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163882/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 097aeeb119538a60f68355f1c3ac47df1834c90a
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   47 days
Failing since        162368  2021-06-04 15:42:59 Z   47 days  128 attempts
Testing same since   163875  2021-07-21 13:11:42 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3953 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 02:29:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 02:29:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159602.293527 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6OSX-0006GD-Rz; Thu, 22 Jul 2021 02:29:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159602.293527; Thu, 22 Jul 2021 02:29:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6OSX-0006G6-O5; Thu, 22 Jul 2021 02:29:13 +0000
Received: by outflank-mailman (input) for mailman id 159602;
 Thu, 22 Jul 2021 02:29:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OSW-0006Fw-8p; Thu, 22 Jul 2021 02:29:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OSV-0005Il-VB; Thu, 22 Jul 2021 02:29:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OSV-0002x6-Kv; Thu, 22 Jul 2021 02:29:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6OSV-0007Qk-KT; Thu, 22 Jul 2021 02:29:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=2W/WTXVp5YX7HlqUV8O242sdv5BD1Yo36LasrSesBRU=; b=mXes1xncVGmaslZfEpmd/ZNqs6
	insfNOPCTohwYIioGx3DXJKcW53LlVL+yLyjMf9LiGmY+oBJsDdgpIzkt0QhFQWyPhQZvx3Xa24P5
	7teJVIZ24keV0XCpg2PbLE8Lz8aBJYguzTUwUwOBIDTwVL6+tR1y4AwqzhgP/+2woTJs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163880-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163880: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=e77c8b8b8e933414ef07dbed04e02973fccffeb0
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 02:29:11 +0000

flight 163880 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163880/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                e77c8b8b8e933414ef07dbed04e02973fccffeb0
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   16 days
Failing since        163327  2021-07-06 12:39:04 Z   15 days   27 attempts
Testing same since   163880  2021-07-21 18:08:23 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Snow <jsnow@redhat.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  Yang Zhong <yang.zhong@intel.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 11842 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 02:38:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 02:38:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159611.293545 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ObJ-00083P-17; Thu, 22 Jul 2021 02:38:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159611.293545; Thu, 22 Jul 2021 02:38:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ObI-00083I-Tv; Thu, 22 Jul 2021 02:38:16 +0000
Received: by outflank-mailman (input) for mailman id 159611;
 Thu, 22 Jul 2021 02:38:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=q664=MO=intel.com=lingshan.zhu@srs-us1.protection.inumbo.net>)
 id 1m6ObI-00083C-Ad
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 02:38:16 +0000
Received: from mga04.intel.com (unknown [192.55.52.120])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6f0fd50f-14b8-40d4-a7c6-a32910c1c8d7;
 Thu, 22 Jul 2021 02:38:10 +0000 (UTC)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 21 Jul 2021 19:38:09 -0700
Received: from lingshan-mobl5.ccr.corp.intel.com (HELO [10.255.29.38])
 ([10.255.29.38])
 by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 21 Jul 2021 19:38:02 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6f0fd50f-14b8-40d4-a7c6-a32910c1c8d7
X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="209653908"
X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; 
   d="scan'208";a="209653908"
X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; 
   d="scan'208";a="512014134"
Subject: Re: [PATCH V8 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
To: Like Xu <like.xu.linux@gmail.com>
Cc: bp@alien8.de, seanjc@google.com, vkuznets@redhat.com,
 wanpengli@tencent.com, jmattson@google.com, joro@8bytes.org,
 kan.liang@linux.intel.com, ak@linux.intel.com, wei.w.wang@intel.com,
 eranian@google.com, liuxiangdong5@huawei.com, linux-kernel@vger.kernel.org,
 x86@kernel.org, kvm@vger.kernel.org, boris.ostrvsky@oracle.com,
 Like Xu <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>,
 Marc Zyngier <maz@kernel.org>, Guo Ren <guoren@kernel.org>,
 Nick Hu <nickhu@andestech.com>, Paul Walmsley <paul.walmsley@sifive.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu,
 linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org,
 xen-devel@lists.xenproject.org, Peter Zijlstra <peterz@infradead.org>,
 Paolo Bonzini <pbonzini@redhat.com>
References: <20210716085325.10300-1-lingshan.zhu@intel.com>
 <20210716085325.10300-2-lingshan.zhu@intel.com>
 <fd117e37-8063-63a4-43cd-7cb555e5bab5@gmail.com>
From: "Zhu, Lingshan" <lingshan.zhu@intel.com>
Message-ID: <c5fad2b5-2c2f-9b06-6f45-629776a690fa@intel.com>
Date: Thu, 22 Jul 2021 10:38:00 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Firefox/78.0 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <fd117e37-8063-63a4-43cd-7cb555e5bab5@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US



On 7/21/2021 7:57 PM, Like Xu wrote:
> On 16/7/2021 4:53 pm, Zhu Lingshan wrote:
>> +    } else if (xenpmu_data->pmu.r.regs.cpl & 3)
oh, my typo, will fix in V9

Thanks
>
> Lingshan, serious for this version ?
>
> arch/x86/xen/pmu.c:438:9: error: expected identifier or ‘(’ before 
> ‘return’
>   438 |         return state;
>       |         ^~~~~~
> arch/x86/xen/pmu.c:439:1: error: expected identifier or ‘(’ before ‘}’ 
> token
>   439 | }
>       | ^
> arch/x86/xen/pmu.c: In function ‘xen_guest_state’:
> arch/x86/xen/pmu.c:436:9: error: control reaches end of non-void 
> function [-Werror=return-type]
>   436 |         }
>       |         ^
> cc1: some warnings being treated as errors
>
>> +            state |= PERF_GUEST_USER;
>>       }



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 03:04:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 03:04:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159618.293560 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6P0E-0003FG-Vf; Thu, 22 Jul 2021 03:04:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159618.293560; Thu, 22 Jul 2021 03:04:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6P0E-0003F9-SO; Thu, 22 Jul 2021 03:04:02 +0000
Received: by outflank-mailman (input) for mailman id 159618;
 Thu, 22 Jul 2021 03:04:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=q664=MO=intel.com=lingshan.zhu@srs-us1.protection.inumbo.net>)
 id 1m6P0D-0003F3-R0
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 03:04:01 +0000
Received: from mga18.intel.com (unknown [134.134.136.126])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ec130193-8a15-4215-98f6-464897621f39;
 Thu, 22 Jul 2021 03:03:57 +0000 (UTC)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 21 Jul 2021 20:03:54 -0700
Received: from lingshan-mobl5.ccr.corp.intel.com (HELO [10.255.29.38])
 ([10.255.29.38])
 by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 21 Jul 2021 20:03:46 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec130193-8a15-4215-98f6-464897621f39
X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="198827128"
X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; 
   d="scan'208";a="198827128"
X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; 
   d="scan'208";a="512019825"
Subject: Re: [PATCH V8 01/18] perf/core: Use static_call to optimize
 perf_guest_info_callbacks
To: Like Xu <like.xu.linux@gmail.com>
Cc: bp@alien8.de, seanjc@google.com, vkuznets@redhat.com,
 wanpengli@tencent.com, jmattson@google.com, joro@8bytes.org,
 kan.liang@linux.intel.com, ak@linux.intel.com, wei.w.wang@intel.com,
 eranian@google.com, liuxiangdong5@huawei.com, linux-kernel@vger.kernel.org,
 x86@kernel.org, kvm@vger.kernel.org, boris.ostrvsky@oracle.com,
 Like Xu <like.xu@linux.intel.com>, Will Deacon <will@kernel.org>,
 Marc Zyngier <maz@kernel.org>, Guo Ren <guoren@kernel.org>,
 Nick Hu <nickhu@andestech.com>, Paul Walmsley <paul.walmsley@sifive.com>,
 Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu,
 linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org,
 xen-devel@lists.xenproject.org, Peter Zijlstra <peterz@infradead.org>,
 Paolo Bonzini <pbonzini@redhat.com>
References: <20210716085325.10300-1-lingshan.zhu@intel.com>
 <20210716085325.10300-2-lingshan.zhu@intel.com>
 <fd117e37-8063-63a4-43cd-7cb555e5bab5@gmail.com>
From: "Zhu, Lingshan" <lingshan.zhu@intel.com>
Message-ID: <e8a7de91-fe48-c570-3cea-a296278a7c8a@intel.com>
Date: Thu, 22 Jul 2021 11:03:44 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Firefox/78.0 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <fd117e37-8063-63a4-43cd-7cb555e5bab5@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US



On 7/21/2021 7:57 PM, Like Xu wrote:
> On 16/7/2021 4:53 pm, Zhu Lingshan wrote:
>> +    } else if (xenpmu_data->pmu.r.regs.cpl & 3)
>
> Lingshan, serious for this version ?
>
> arch/x86/xen/pmu.c:438:9: error: expected identifier or ‘(’ before 
> ‘return’
>   438 |         return state;
>       |         ^~~~~~
> arch/x86/xen/pmu.c:439:1: error: expected identifier or ‘(’ before ‘}’ 
> token
>   439 | }
>       | ^
> arch/x86/xen/pmu.c: In function ‘xen_guest_state’:
> arch/x86/xen/pmu.c:436:9: error: control reaches end of non-void 
> function [-Werror=return-type]
>   436 |         }
>       |         ^
> cc1: some warnings being treated as errors
>
>> +            state |= PERF_GUEST_USER;
>>       }
forgot to enable XEN build in .config, V9 fixes this will come soon


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 05:42:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 05:42:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159629.293583 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6RTe-0005Aa-9c; Thu, 22 Jul 2021 05:42:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159629.293583; Thu, 22 Jul 2021 05:42:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6RTe-0005AT-6G; Thu, 22 Jul 2021 05:42:34 +0000
Received: by outflank-mailman (input) for mailman id 159629;
 Thu, 22 Jul 2021 05:42:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=q664=MO=intel.com=lingshan.zhu@srs-us1.protection.inumbo.net>)
 id 1m6RTd-0005AN-6u
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 05:42:33 +0000
Received: from mga04.intel.com (unknown [192.55.52.120])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 98ec7afb-eaaf-11eb-8e95-12813bfff9fa;
 Thu, 22 Jul 2021 05:42:29 +0000 (UTC)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 21 Jul 2021 22:42:28 -0700
Received: from vmm_a4_icx.sh.intel.com (HELO localhost.localdomain)
 ([10.239.53.245])
 by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 21 Jul 2021 22:42:21 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 98ec7afb-eaaf-11eb-8e95-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="209672605"
X-IronPort-AV: E=Sophos;i="5.84,260,1620716400"; 
   d="scan'208";a="209672605"
X-IronPort-AV: E=Sophos;i="5.84,260,1620716400"; 
   d="scan'208";a="512372293"
From: Zhu Lingshan <lingshan.zhu@intel.com>
To: peterz@infradead.org,
	pbonzini@redhat.com
Cc: bp@alien8.de,
	seanjc@google.com,
	vkuznets@redhat.com,
	wanpengli@tencent.com,
	jmattson@google.com,
	joro@8bytes.org,
	kan.liang@linux.intel.com,
	ak@linux.intel.com,
	wei.w.wang@intel.com,
	eranian@google.com,
	liuxiangdong5@huawei.com,
	linux-kernel@vger.kernel.org,
	x86@kernel.org,
	kvm@vger.kernel.org,
	like.xu.linux@gmail.com,
	boris.ostrvsky@oracle.com,
	Like Xu <like.xu@linux.intel.com>,
	Will Deacon <will@kernel.org>,
	Marc Zyngier <maz@kernel.org>,
	Guo Ren <guoren@kernel.org>,
	Nick Hu <nickhu@andestech.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu,
	linux-csky@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	xen-devel@lists.xenproject.org,
	Zhu Lingshan <lingshan.zhu@intel.com>
Subject: [PATCH V9 01/18] perf/core: Use static_call to optimize perf_guest_info_callbacks
Date: Thu, 22 Jul 2021 13:41:42 +0800
Message-Id: <20210722054159.4459-2-lingshan.zhu@intel.com>
X-Mailer: git-send-email 2.27.0
In-Reply-To: <20210722054159.4459-1-lingshan.zhu@intel.com>
References: <20210722054159.4459-1-lingshan.zhu@intel.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Like Xu <like.xu@linux.intel.com>

For "struct perf_guest_info_callbacks", the two fields "is_in_guest"
and "is_user_mode" are replaced with a new multiplexed member named
"state", and the "get_guest_ip" field will be renamed to "get_ip".

For arm64, xen and kvm/x86, the application of DEFINE_STATIC_CALL_RET0
could make all that perf_guest_cbs stuff suck less. For arm, csky, nds32,
and riscv, just applied some renamed refactoring.

Cc: Will Deacon <will@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Guo Ren <guoren@kernel.org>
Cc: Nick Hu <nickhu@andestech.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: kvmarm@lists.cs.columbia.edu
Cc: linux-csky@vger.kernel.org
Cc: linux-riscv@lists.infradead.org
Cc: xen-devel@lists.xenproject.org
Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Original-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Like Xu <like.xu@linux.intel.com>
Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
Reviewed-by: Boris Ostrovsky <boris.ostrvsky@oracle.com>
---
 arch/arm/kernel/perf_callchain.c   | 16 +++++++-----
 arch/arm64/kernel/perf_callchain.c | 29 +++++++++++++++++-----
 arch/arm64/kvm/perf.c              | 22 ++++++++---------
 arch/csky/kernel/perf_callchain.c  |  4 +--
 arch/nds32/kernel/perf_event_cpu.c | 16 +++++++-----
 arch/riscv/kernel/perf_callchain.c |  4 +--
 arch/x86/events/core.c             | 39 ++++++++++++++++++++++++------
 arch/x86/events/intel/core.c       |  7 +++---
 arch/x86/include/asm/kvm_host.h    |  2 +-
 arch/x86/kvm/pmu.c                 |  2 +-
 arch/x86/kvm/x86.c                 | 37 +++++++++++++++-------------
 arch/x86/xen/pmu.c                 | 33 ++++++++++---------------
 include/linux/perf_event.h         | 12 ++++++---
 kernel/events/core.c               |  9 +++++++
 14 files changed, 144 insertions(+), 88 deletions(-)

diff --git a/arch/arm/kernel/perf_callchain.c b/arch/arm/kernel/perf_callchain.c
index 3b69a76d341e..1ce30f86d6c7 100644
--- a/arch/arm/kernel/perf_callchain.c
+++ b/arch/arm/kernel/perf_callchain.c
@@ -64,7 +64,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs
 {
 	struct frame_tail __user *tail;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -100,7 +100,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 {
 	struct stackframe fr;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -111,8 +111,8 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	if (perf_guest_cbs && perf_guest_cbs->state())
+		return perf_guest_cbs->get_ip();
 
 	return instruction_pointer(regs);
 }
@@ -120,9 +120,13 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
 	int misc = 0;
+	unsigned int state = 0;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (perf_guest_cbs)
+		state = perf_guest_cbs->state();
+
+	if (perf_guest_cbs && state) {
+		if (state & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/arm64/kernel/perf_callchain.c b/arch/arm64/kernel/perf_callchain.c
index 4a72c2727309..1b344e23fd2f 100644
--- a/arch/arm64/kernel/perf_callchain.c
+++ b/arch/arm64/kernel/perf_callchain.c
@@ -5,6 +5,7 @@
  * Copyright (C) 2015 ARM Limited
  */
 #include <linux/perf_event.h>
+#include <linux/static_call.h>
 #include <linux/uaccess.h>
 
 #include <asm/pointer_auth.h>
@@ -99,10 +100,25 @@ compat_user_backtrace(struct compat_frame_tail __user *tail,
 }
 #endif /* CONFIG_COMPAT */
 
+DEFINE_STATIC_CALL_RET0(arm64_guest_state, *(perf_guest_cbs->state));
+DEFINE_STATIC_CALL_RET0(arm64_guest_get_ip, *(perf_guest_cbs->get_ip));
+
+void arch_perf_update_guest_cbs(void)
+{
+	static_call_update(arm64_guest_state, (void *)&__static_call_return0);
+	static_call_update(arm64_guest_get_ip, (void *)&__static_call_return0);
+
+	if (perf_guest_cbs && perf_guest_cbs->state)
+		static_call_update(arm64_guest_state, perf_guest_cbs->state);
+
+	if (perf_guest_cbs && perf_guest_cbs->get_ip)
+		static_call_update(arm64_guest_get_ip, perf_guest_cbs->get_ip);
+}
+
 void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 			 struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(arm64_guest_state)()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -149,7 +165,7 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 {
 	struct stackframe frame;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(arm64_guest_state)()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -160,8 +176,8 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	if (static_call(arm64_guest_state)())
+		return static_call(arm64_guest_get_ip)();
 
 	return instruction_pointer(regs);
 }
@@ -169,9 +185,10 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
 	int misc = 0;
+	unsigned int guest = static_call(arm64_guest_state)();
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (guest) {
+		if (guest & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/arm64/kvm/perf.c b/arch/arm64/kvm/perf.c
index 151c31fb9860..8a3387e58f42 100644
--- a/arch/arm64/kvm/perf.c
+++ b/arch/arm64/kvm/perf.c
@@ -13,21 +13,20 @@
 
 DEFINE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
 
-static int kvm_is_in_guest(void)
-{
-        return kvm_get_running_vcpu() != NULL;
-}
-
-static int kvm_is_user_mode(void)
+static unsigned int kvm_guest_state(void)
 {
 	struct kvm_vcpu *vcpu;
+	unsigned int state = 0;
+
+	if (kvm_get_running_vcpu())
+		state |= PERF_GUEST_ACTIVE;
 
 	vcpu = kvm_get_running_vcpu();
 
-	if (vcpu)
-		return !vcpu_mode_priv(vcpu);
+	if (vcpu && !vcpu_mode_priv(vcpu))
+		state |= PERF_GUEST_USER;
 
-	return 0;
+	return state;
 }
 
 static unsigned long kvm_get_guest_ip(void)
@@ -43,9 +42,8 @@ static unsigned long kvm_get_guest_ip(void)
 }
 
 static struct perf_guest_info_callbacks kvm_guest_cbs = {
-	.is_in_guest	= kvm_is_in_guest,
-	.is_user_mode	= kvm_is_user_mode,
-	.get_guest_ip	= kvm_get_guest_ip,
+	.state		= kvm_guest_state,
+	.get_ip		= kvm_get_guest_ip,
 };
 
 int kvm_perf_init(void)
diff --git a/arch/csky/kernel/perf_callchain.c b/arch/csky/kernel/perf_callchain.c
index ab55e98ee8f6..3e42239dd1b2 100644
--- a/arch/csky/kernel/perf_callchain.c
+++ b/arch/csky/kernel/perf_callchain.c
@@ -89,7 +89,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 	unsigned long fp = 0;
 
 	/* C-SKY does not support virtualization. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
+	if (perf_guest_cbs && perf_guest_cbs->state())
 		return;
 
 	fp = regs->regs[4];
@@ -113,7 +113,7 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 	struct stackframe fr;
 
 	/* C-SKY does not support virtualization. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		pr_warn("C-SKY does not support perf in guest mode!");
 		return;
 	}
diff --git a/arch/nds32/kernel/perf_event_cpu.c b/arch/nds32/kernel/perf_event_cpu.c
index 0ce6f9f307e6..1dc32ba842ce 100644
--- a/arch/nds32/kernel/perf_event_cpu.c
+++ b/arch/nds32/kernel/perf_event_cpu.c
@@ -1371,7 +1371,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 
 	leaf_fp = 0;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -1481,7 +1481,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 {
 	struct stackframe fr;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		/* We don't support guest os callchain now */
 		return;
 	}
@@ -1494,8 +1494,8 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
 	/* However, NDS32 does not support virtualization */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	if (perf_guest_cbs && perf_guest_cbs->state())
+		return perf_guest_cbs->get_ip();
 
 	return instruction_pointer(regs);
 }
@@ -1503,10 +1503,14 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs)
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
 	int misc = 0;
+	unsigned int state = 0;
+
+	if (perf_guest_cbs)
+		state = perf_guest_cbs->state();
 
 	/* However, NDS32 does not support virtualization */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (perf_guest_cbs && state) {
+		if (state & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_callchain.c
index 0bb1854dce83..ea63f70cae5d 100644
--- a/arch/riscv/kernel/perf_callchain.c
+++ b/arch/riscv/kernel/perf_callchain.c
@@ -59,7 +59,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
 	unsigned long fp = 0;
 
 	/* RISC-V does not support perf in guest mode. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
+	if (perf_guest_cbs && perf_guest_cbs->state())
 		return;
 
 	fp = regs->s0;
@@ -79,7 +79,7 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
 			   struct pt_regs *regs)
 {
 	/* RISC-V does not support perf in guest mode. */
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (perf_guest_cbs && perf_guest_cbs->state()) {
 		pr_warn("RISC-V does not support perf in guest mode!");
 		return;
 	}
diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 1eb45139fcc6..9a908631f6cc 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -90,6 +90,28 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases);
  */
 DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs);
 
+DEFINE_STATIC_CALL_RET0(x86_guest_state, *(perf_guest_cbs->state));
+DEFINE_STATIC_CALL_RET0(x86_guest_get_ip, *(perf_guest_cbs->get_ip));
+DEFINE_STATIC_CALL_RET0(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
+
+void arch_perf_update_guest_cbs(void)
+{
+	static_call_update(x86_guest_state, (void *)&__static_call_return0);
+	static_call_update(x86_guest_get_ip, (void *)&__static_call_return0);
+	static_call_update(x86_guest_handle_intel_pt_intr, (void *)&__static_call_return0);
+
+	if (perf_guest_cbs && perf_guest_cbs->state)
+		static_call_update(x86_guest_state, perf_guest_cbs->state);
+
+	if (perf_guest_cbs && perf_guest_cbs->get_ip)
+		static_call_update(x86_guest_get_ip, perf_guest_cbs->get_ip);
+
+	if (perf_guest_cbs && perf_guest_cbs->handle_intel_pt_intr) {
+		static_call_update(x86_guest_handle_intel_pt_intr,
+				   perf_guest_cbs->handle_intel_pt_intr);
+	}
+}
+
 u64 __read_mostly hw_cache_event_ids
 				[PERF_COUNT_HW_CACHE_MAX]
 				[PERF_COUNT_HW_CACHE_OP_MAX]
@@ -2764,7 +2786,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
 	struct unwind_state state;
 	unsigned long addr;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(x86_guest_state)()) {
 		/* TODO: We don't support guest os callchain now */
 		return;
 	}
@@ -2867,7 +2889,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs
 	struct stack_frame frame;
 	const struct stack_frame __user *fp;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
+	if (static_call(x86_guest_state)()) {
 		/* TODO: We don't support guest os callchain now */
 		return;
 	}
@@ -2944,18 +2966,21 @@ static unsigned long code_segment_base(struct pt_regs *regs)
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
-		return perf_guest_cbs->get_guest_ip();
+	unsigned long ip = static_call(x86_guest_get_ip)();
+
+	if (likely(!ip))
+		ip = regs->ip + code_segment_base(regs);
 
-	return regs->ip + code_segment_base(regs);
+	return ip;
 }
 
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
+	unsigned int guest = static_call(x86_guest_state)();
 	int misc = 0;
 
-	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
-		if (perf_guest_cbs->is_user_mode())
+	if (guest) {
+		if (guest & PERF_GUEST_USER)
 			misc |= PERF_RECORD_MISC_GUEST_USER;
 		else
 			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index fca7a6e2242f..fb1bd7a0e1a6 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -2782,6 +2782,8 @@ static void intel_pmu_reset(void)
 	local_irq_restore(flags);
 }
 
+DECLARE_STATIC_CALL(x86_guest_handle_intel_pt_intr, *(perf_guest_cbs->handle_intel_pt_intr));
+
 static int handle_pmi_common(struct pt_regs *regs, u64 status)
 {
 	struct perf_sample_data data;
@@ -2852,10 +2854,7 @@ static int handle_pmi_common(struct pt_regs *regs, u64 status)
 	 */
 	if (__test_and_clear_bit(GLOBAL_STATUS_TRACE_TOPAPMI_BIT, (unsigned long *)&status)) {
 		handled++;
-		if (unlikely(perf_guest_cbs && perf_guest_cbs->is_in_guest() &&
-			perf_guest_cbs->handle_intel_pt_intr))
-			perf_guest_cbs->handle_intel_pt_intr();
-		else
+		if (!static_call(x86_guest_handle_intel_pt_intr)())
 			intel_pt_interrupt();
 	}
 
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 974cbfb1eefe..128e2dd9c944 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1884,7 +1884,7 @@ int kvm_skip_emulated_instruction(struct kvm_vcpu *vcpu);
 int kvm_complete_insn_gp(struct kvm_vcpu *vcpu, int err);
 void __kvm_request_immediate_exit(struct kvm_vcpu *vcpu);
 
-int kvm_is_in_guest(void);
+unsigned int kvm_guest_state(void);
 
 void __user *__x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa,
 				     u32 size);
diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
index 827886c12c16..2dcbd1b30004 100644
--- a/arch/x86/kvm/pmu.c
+++ b/arch/x86/kvm/pmu.c
@@ -87,7 +87,7 @@ static void kvm_perf_overflow_intr(struct perf_event *perf_event,
 		 * woken up. So we should wake it, but this is impossible from
 		 * NMI context. Do it from irq work instead.
 		 */
-		if (!kvm_is_in_guest())
+		if (!kvm_guest_state())
 			irq_work_queue(&pmc_to_pmu(pmc)->irq_work);
 		else
 			kvm_make_request(KVM_REQ_PMI, pmc->vcpu);
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index c6dc1b445231..429cb4c22097 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -8259,44 +8259,47 @@ static void kvm_timer_init(void)
 DEFINE_PER_CPU(struct kvm_vcpu *, current_vcpu);
 EXPORT_PER_CPU_SYMBOL_GPL(current_vcpu);
 
-int kvm_is_in_guest(void)
+unsigned int kvm_guest_state(void)
 {
-	return __this_cpu_read(current_vcpu) != NULL;
-}
-
-static int kvm_is_user_mode(void)
-{
-	int user_mode = 3;
+	struct kvm_vcpu *vcpu = __this_cpu_read(current_vcpu);
+	unsigned int state = 0;
 
-	if (__this_cpu_read(current_vcpu))
-		user_mode = static_call(kvm_x86_get_cpl)(__this_cpu_read(current_vcpu));
+	if (vcpu) {
+		state |= PERF_GUEST_ACTIVE;
+		if (static_call(kvm_x86_get_cpl)(vcpu))
+			state |= PERF_GUEST_USER;
+	}
 
-	return user_mode != 0;
+	return state;
 }
 
-static unsigned long kvm_get_guest_ip(void)
+static unsigned long kvm_guest_get_ip(void)
 {
+	struct kvm_vcpu *vcpu = __this_cpu_read(current_vcpu);
 	unsigned long ip = 0;
 
-	if (__this_cpu_read(current_vcpu))
-		ip = kvm_rip_read(__this_cpu_read(current_vcpu));
+	if (vcpu)
+		ip = kvm_rip_read(vcpu);
 
 	return ip;
 }
 
-static void kvm_handle_intel_pt_intr(void)
+static unsigned int kvm_handle_intel_pt_intr(void)
 {
 	struct kvm_vcpu *vcpu = __this_cpu_read(current_vcpu);
 
+	if (!vcpu)
+		return 0;
+
 	kvm_make_request(KVM_REQ_PMI, vcpu);
 	__set_bit(MSR_CORE_PERF_GLOBAL_OVF_CTRL_TRACE_TOPA_PMI_BIT,
 			(unsigned long *)&vcpu->arch.pmu.global_status);
+	return 1;
 }
 
 static struct perf_guest_info_callbacks kvm_guest_cbs = {
-	.is_in_guest		= kvm_is_in_guest,
-	.is_user_mode		= kvm_is_user_mode,
-	.get_guest_ip		= kvm_get_guest_ip,
+	.state			= kvm_guest_state,
+	.get_ip			= kvm_guest_get_ip,
 	.handle_intel_pt_intr	= kvm_handle_intel_pt_intr,
 };
 
diff --git a/arch/x86/xen/pmu.c b/arch/x86/xen/pmu.c
index e13b0b49fcdf..85c6e6f6f422 100644
--- a/arch/x86/xen/pmu.c
+++ b/arch/x86/xen/pmu.c
@@ -413,34 +413,28 @@ int pmu_apic_update(uint32_t val)
 }
 
 /* perf callbacks */
-static int xen_is_in_guest(void)
+static unsigned int xen_guest_state(void)
 {
 	const struct xen_pmu_data *xenpmu_data = get_xenpmu_data();
+	unsigned int state = 0;
 
 	if (!xenpmu_data) {
 		pr_warn_once("%s: pmudata not initialized\n", __func__);
-		return 0;
+		return state;
 	}
 
 	if (!xen_initial_domain() || (xenpmu_data->domain_id >= DOMID_SELF))
-		return 0;
+		return state;
 
-	return 1;
-}
+	state |= PERF_GUEST_ACTIVE;
 
-static int xen_is_user_mode(void)
-{
-	const struct xen_pmu_data *xenpmu_data = get_xenpmu_data();
+	if (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_PV) {
+		if (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_USER)
+			state |= PERF_GUEST_USER;
+	} else if (xenpmu_data->pmu.r.regs.cpl & 3)
+			state |= PERF_GUEST_USER;
 
-	if (!xenpmu_data) {
-		pr_warn_once("%s: pmudata not initialized\n", __func__);
-		return 0;
-	}
-
-	if (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_PV)
-		return (xenpmu_data->pmu.pmu_flags & PMU_SAMPLE_USER);
-	else
-		return !!(xenpmu_data->pmu.r.regs.cpl & 3);
+	return state;
 }
 
 static unsigned long xen_get_guest_ip(void)
@@ -456,9 +450,8 @@ static unsigned long xen_get_guest_ip(void)
 }
 
 static struct perf_guest_info_callbacks xen_guest_cbs = {
-	.is_in_guest            = xen_is_in_guest,
-	.is_user_mode           = xen_is_user_mode,
-	.get_guest_ip           = xen_get_guest_ip,
+	.state                  = xen_guest_state,
+	.get_ip			= xen_get_guest_ip,
 };
 
 /* Convert registers from Xen's format to Linux' */
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 2d510ad750ed..e823677a214c 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -26,11 +26,13 @@
 # include <asm/local64.h>
 #endif
 
+#define PERF_GUEST_ACTIVE	0x01
+#define PERF_GUEST_USER	0x02
+
 struct perf_guest_info_callbacks {
-	int				(*is_in_guest)(void);
-	int				(*is_user_mode)(void);
-	unsigned long			(*get_guest_ip)(void);
-	void				(*handle_intel_pt_intr)(void);
+	unsigned int			(*state)(void);
+	unsigned long			(*get_ip)(void);
+	unsigned int			(*handle_intel_pt_intr)(void);
 };
 
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
@@ -1237,6 +1239,8 @@ extern void perf_event_bpf_event(struct bpf_prog *prog,
 				 u16 flags);
 
 extern struct perf_guest_info_callbacks *perf_guest_cbs;
+extern void __weak arch_perf_update_guest_cbs(void);
+
 extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
 extern int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
 
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 464917096e73..e466fc8176e1 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6489,9 +6489,18 @@ static void perf_pending_event(struct irq_work *entry)
  */
 struct perf_guest_info_callbacks *perf_guest_cbs;
 
+/* explicitly use __weak to fix duplicate symbol error */
+void __weak arch_perf_update_guest_cbs(void)
+{
+}
+
 int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
 {
+	if (WARN_ON_ONCE(perf_guest_cbs))
+		return -EBUSY;
+
 	perf_guest_cbs = cbs;
+	arch_perf_update_guest_cbs();
 	return 0;
 }
 EXPORT_SYMBOL_GPL(perf_register_guest_info_callbacks);
-- 
2.27.0



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 06:25:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 06:25:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159638.293602 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6S9I-0001zr-Rh; Thu, 22 Jul 2021 06:25:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159638.293602; Thu, 22 Jul 2021 06:25:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6S9I-0001zk-OU; Thu, 22 Jul 2021 06:25:36 +0000
Received: by outflank-mailman (input) for mailman id 159638;
 Thu, 22 Jul 2021 06:25:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6S9G-0001zW-Nc; Thu, 22 Jul 2021 06:25:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6S9G-0000ja-FT; Thu, 22 Jul 2021 06:25:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6S9G-00054o-3Q; Thu, 22 Jul 2021 06:25:34 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6S9G-000074-2u; Thu, 22 Jul 2021 06:25:34 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xF72Fm/5E0neTxr1VB0ZufVjyF6p7Kt9DLIOPDS13Cw=; b=lju0c8z/fyN30qmRh9JgK+RO4Z
	iNUimfszAzse+7vfsjA/Z2SY/aAczy5FJRAnaiF1Zh5I4H5S6A0hvadH3G9tPwGtXQnYXdvFZgK+Y
	XE7yISgoFUd+2VTK6VmwLrGykFPxBCbeSAL0sx1XWUAcjI6ocgkmOogOTLE33JTG10PU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163884-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163884: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-rtds:guest-start:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-arndale:xen-boot:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 06:25:34 +0000

flight 163884 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163884/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  14 guest-start    fail in 163841 REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start    fail in 163856 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-arm64-arm64-xl          13 debian-fixup     fail in 163841 pass in 163884
 test-arm64-arm64-xl-credit2  13 debian-fixup               fail pass in 163841
 test-arm64-arm64-xl-thunderx 13 debian-fixup               fail pass in 163856
 test-amd64-amd64-examine      4 memdisk-try-append         fail pass in 163868
 test-armhf-armhf-xl-rtds     14 guest-start                fail pass in 163868
 test-armhf-armhf-xl-arndale   8 xen-boot                   fail pass in 163868

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

version targeted for testing:
 linux                8cae8cd89f05f6de223d63e6d15e31c8ba9cf53b
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  355 days
Failing since        152366  2020-08-01 20:49:34 Z  354 days  605 attempts
Testing same since   163841  2021-07-20 12:41:35 Z    1 days    4 attempts

------------------------------------------------------------
6700 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978216 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 08:53:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 08:53:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159655.293635 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6USQ-00036C-BX; Thu, 22 Jul 2021 08:53:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159655.293635; Thu, 22 Jul 2021 08:53:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6USQ-00035q-8E; Thu, 22 Jul 2021 08:53:30 +0000
Received: by outflank-mailman (input) for mailman id 159655;
 Thu, 22 Jul 2021 08:46:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=L6mE=MO=linuxfoundation.org=gregkh@srs-us1.protection.inumbo.net>)
 id 1m6ULC-0002Ib-RW
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 08:46:02 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1ef83388-0f0c-49ac-ac4a-106c3e5fefe0;
 Thu, 22 Jul 2021 08:46:01 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id A43AE6128C;
 Thu, 22 Jul 2021 08:45:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1ef83388-0f0c-49ac-ac4a-106c3e5fefe0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org;
	s=korg; t=1626943559;
	bh=iHEKpKP05yPtSDo0WVw13tR4OsPIw3x7iurEQu7Pc7Q=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=d2l4V14jYNVya/romP2w2ezg4x2LnX47K9dLSJmCxQOKyIqkdonEoIsuSyzycFfD4
	 aHamBXJweC7B8K4Qi3lPBaud6oc7vHctb7fViEzj6oXWZWpeL9VSuOZpThr23TyNei
	 Kh7xAATxCTMeB2NBX21iFqK668swZChaCi9FSwpo=
Date: Thu, 22 Jul 2021 10:45:55 +0200
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: kernel@pengutronix.de,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Alexandre Bounine <alex.bou9@gmail.com>,
	Alex Dubov <oakad@yahoo.com>, Alex Elder <elder@kernel.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Alison Schofield <alison.schofield@intel.com>,
	Allen Hubbe <allenbh@gmail.com>,
	Andreas Noever <andreas.noever@gmail.com>,
	Andy Gross <agross@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	Ben Widawsky <ben.widawsky@intel.com>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bodo Stroesser <bostroesser@gmail.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Dexuan Cui <decui@microsoft.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Eric Farman <farman@linux.ibm.com>,
	Finn Thain <fthain@linux-m68k.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Frank Li <lznuaa@gmail.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Geoff Levand <geoff@infradead.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Halil Pasic <pasic@linux.ibm.com>, Hannes Reinecke <hare@suse.de>,
	Hans de Goede <hdegoede@redhat.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
	Ira Weiny <ira.weiny@intel.com>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jaroslav Kysela <perex@perex.cz>, Jason Wang <jasowang@redhat.com>,
	Jens Taprogge <jens.taprogge@taprogge.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jiri Kosina <jikos@kernel.org>, Jiri Slaby <jirislaby@kernel.org>,
	Joey Pabalan <jpabalanb@gmail.com>, Johan Hovold <johan@kernel.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Johannes Thumshirn <morbidrsa@gmail.com>,
	Jon Mason <jdmason@kudzu.us>, Juergen Gross <jgross@suse.com>,
	Julien Grall <jgrall@amazon.com>,
	Kai-Heng Feng <kai.heng.feng@canonical.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Kishon Vijay Abraham I <kishon@ti.com>,
	Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= <kw@linux.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Lee Jones <lee.jones@linaro.org>, Len Brown <lenb@kernel.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Manohar Vanga <manohar.vanga@gmail.com>,
	Marc Zyngier <maz@kernel.org>, Mark Brown <broonie@kernel.org>,
	Mark Gross <mgross@linux.intel.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Martyn Welch <martyn@welchs.me.uk>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Maximilian Luz <luzmaximilian@gmail.com>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Michael Buesch <m@bues.ch>, Michael Ellerman <mpe@ellerman.id.au>,
	Michael Jamet <michael.jamet@intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Mike Christie <michael.christie@oracle.com>,
	Moritz Fischer <mdf@kernel.org>, Ohad Ben-Cohen <ohad@wizery.com>,
	Pali =?iso-8859-1?Q?Roh=E1r?= <pali@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Rob Herring <robh@kernel.org>, Russell King <linux@armlinux.org.uk>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Samuel Holland <samuel@sholland.org>,
	Samuel Iglesias Gonsalvez <siglesias@igalia.com>,
	SeongJae Park <sjpark@amazon.de>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Stephen Boyd <sboyd@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	Takashi Iwai <tiwai@suse.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Thorsten Scherer <t.scherer@eckelmann.de>,
	Tomas Winkler <tomas.winkler@intel.com>, Tom Rix <trix@redhat.com>,
	Tyrel Datwyler <tyreld@linux.ibm.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Vinod Koul <vkoul@kernel.org>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Wolfram Sang <wsa@kernel.org>, Wu Hao <hao.wu@intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	YueHaibing <yuehaibing@huawei.com>, Yufen Yu <yuyufen@huawei.com>,
	alsa-devel@alsa-project.org, dmaengine@vger.kernel.org,
	greybus-dev@lists.linaro.org,
	industrypack-devel@lists.sourceforge.net, kvm@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux-acpi@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org,
	linux-cxl@vger.kernel.org, linux-fpga@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-i3c@lists.infradead.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-media@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-mmc@vger.kernel.org, linux-ntb@googlegroups.com,
	linux-parisc@vger.kernel.org, linux-pci@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-remoteproc@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-serial@vger.kernel.org, linux-sh@vger.kernel.org,
	linux-spi@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-sunxi@lists.linux.dev, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	nvdimm@lists.linux.dev, platform-driver-x86@vger.kernel.org,
	sparclinux@vger.kernel.org, target-devel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v4 0/5] bus: Make remove callback return void
Message-ID: <YPkwQwf0dUKnGA7L@kroah.com>
References: <20210713193522.1770306-1-u.kleine-koenig@pengutronix.de>
 <YPfyZen4Y0uDKqDT@kroah.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <YPfyZen4Y0uDKqDT@kroah.com>

On Wed, Jul 21, 2021 at 12:09:41PM +0200, Greg Kroah-Hartman wrote:
> On Tue, Jul 13, 2021 at 09:35:17PM +0200, Uwe Kleine-Knig wrote:
> > Hello,
> > 
> > this is v4 of the final patch set for my effort to make struct
> > bus_type::remove return void.
> > 
> > The first four patches contain cleanups that make some of these
> > callbacks (more obviously) always return 0. They are acked by the
> > respective maintainers. Bjorn Helgaas explicitly asked to include the
> > pci patch (#1) into this series, so Greg taking this is fine. I assume
> > the s390 people are fine with Greg taking patches #2 to #4, too, they
> > didn't explicitly said so though.
> > 
> > The last patch actually changes the prototype and so touches quite some
> > drivers and has the potential to conflict with future developments, so I
> > consider it beneficial to put these patches into next soon. I expect
> > that it will be Greg who takes the complete series, he already confirmed
> > via irc (for v2) to look into this series.
> > 
> > The only change compared to v3 is in the fourth patch where I modified a
> > few more drivers to fix build failures. Some of them were found by build
> > bots (thanks!), some of them I found myself using a regular expression
> > search. The newly modified files are:
> > 
> >  arch/sparc/kernel/vio.c
> >  drivers/nubus/bus.c
> >  drivers/sh/superhyway/superhyway.c
> >  drivers/vlynq/vlynq.c
> >  drivers/zorro/zorro-driver.c
> >  sound/ac97/bus.c
> > 
> > Best regards
> > Uwe
> 
> Now queued up.  I can go make a git tag that people can pull from after
> 0-day is finished testing this to verify all is good, if others need it.

Ok, here's a tag that any other subsystem can pull from if they want
these changes in their tree before 5.15-rc1 is out.  I might pull it
into my char-misc-next tree as well just to keep that tree sane as it
seems to pick up new busses on a regular basis...

thanks,

greg k-h

-----------------------------------


The following changes since commit 2734d6c1b1a089fb593ef6a23d4b70903526fe0c:

  Linux 5.14-rc2 (2021-07-18 14:13:49 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git tags/bus_remove_return_void-5.15

for you to fetch changes up to fc7a6209d5710618eb4f72a77cd81b8d694ecf89:

  bus: Make remove callback return void (2021-07-21 11:53:42 +0200)

----------------------------------------------------------------
Bus: Make remove callback return void tag

Tag for other trees/branches to pull from in order to have a stable
place to build off of if they want to add new busses for 5.15.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

----------------------------------------------------------------
Uwe Kleine-Knig (5):
      PCI: endpoint: Make struct pci_epf_driver::remove return void
      s390/cio: Make struct css_driver::remove return void
      s390/ccwgroup: Drop if with an always false condition
      s390/scm: Make struct scm_driver::remove return void
      bus: Make remove callback return void

 arch/arm/common/locomo.c                  | 3 +--
 arch/arm/common/sa1111.c                  | 4 +---
 arch/arm/mach-rpc/ecard.c                 | 4 +---
 arch/mips/sgi-ip22/ip22-gio.c             | 3 +--
 arch/parisc/kernel/drivers.c              | 5 ++---
 arch/powerpc/platforms/ps3/system-bus.c   | 3 +--
 arch/powerpc/platforms/pseries/ibmebus.c  | 3 +--
 arch/powerpc/platforms/pseries/vio.c      | 3 +--
 arch/s390/include/asm/eadm.h              | 2 +-
 arch/sparc/kernel/vio.c                   | 4 +---
 drivers/acpi/bus.c                        | 3 +--
 drivers/amba/bus.c                        | 4 +---
 drivers/base/auxiliary.c                  | 4 +---
 drivers/base/isa.c                        | 4 +---
 drivers/base/platform.c                   | 4 +---
 drivers/bcma/main.c                       | 6 ++----
 drivers/bus/sunxi-rsb.c                   | 4 +---
 drivers/cxl/core.c                        | 3 +--
 drivers/dax/bus.c                         | 4 +---
 drivers/dma/idxd/sysfs.c                  | 4 +---
 drivers/firewire/core-device.c            | 4 +---
 drivers/firmware/arm_scmi/bus.c           | 4 +---
 drivers/firmware/google/coreboot_table.c  | 4 +---
 drivers/fpga/dfl.c                        | 4 +---
 drivers/hid/hid-core.c                    | 4 +---
 drivers/hid/intel-ish-hid/ishtp/bus.c     | 4 +---
 drivers/hv/vmbus_drv.c                    | 5 +----
 drivers/hwtracing/intel_th/core.c         | 4 +---
 drivers/i2c/i2c-core-base.c               | 5 +----
 drivers/i3c/master.c                      | 4 +---
 drivers/input/gameport/gameport.c         | 3 +--
 drivers/input/serio/serio.c               | 3 +--
 drivers/ipack/ipack.c                     | 4 +---
 drivers/macintosh/macio_asic.c            | 4 +---
 drivers/mcb/mcb-core.c                    | 4 +---
 drivers/media/pci/bt8xx/bttv-gpio.c       | 3 +--
 drivers/memstick/core/memstick.c          | 3 +--
 drivers/mfd/mcp-core.c                    | 3 +--
 drivers/misc/mei/bus.c                    | 4 +---
 drivers/misc/tifm_core.c                  | 3 +--
 drivers/mmc/core/bus.c                    | 4 +---
 drivers/mmc/core/sdio_bus.c               | 4 +---
 drivers/net/netdevsim/bus.c               | 3 +--
 drivers/ntb/core.c                        | 4 +---
 drivers/ntb/ntb_transport.c               | 4 +---
 drivers/nubus/bus.c                       | 6 ++----
 drivers/nvdimm/bus.c                      | 3 +--
 drivers/pci/endpoint/pci-epf-core.c       | 7 ++-----
 drivers/pci/pci-driver.c                  | 3 +--
 drivers/pcmcia/ds.c                       | 4 +---
 drivers/platform/surface/aggregator/bus.c | 4 +---
 drivers/platform/x86/wmi.c                | 4 +---
 drivers/pnp/driver.c                      | 3 +--
 drivers/rapidio/rio-driver.c              | 4 +---
 drivers/rpmsg/rpmsg_core.c                | 7 ++-----
 drivers/s390/block/scm_drv.c              | 4 +---
 drivers/s390/cio/ccwgroup.c               | 6 +-----
 drivers/s390/cio/chsc_sch.c               | 3 +--
 drivers/s390/cio/css.c                    | 7 +++----
 drivers/s390/cio/css.h                    | 2 +-
 drivers/s390/cio/device.c                 | 9 +++------
 drivers/s390/cio/eadm_sch.c               | 4 +---
 drivers/s390/cio/scm.c                    | 5 +++--
 drivers/s390/cio/vfio_ccw_drv.c           | 3 +--
 drivers/s390/crypto/ap_bus.c              | 4 +---
 drivers/scsi/scsi_debug.c                 | 3 +--
 drivers/sh/superhyway/superhyway.c        | 8 ++------
 drivers/siox/siox-core.c                  | 4 +---
 drivers/slimbus/core.c                    | 4 +---
 drivers/soc/qcom/apr.c                    | 4 +---
 drivers/spi/spi.c                         | 4 +---
 drivers/spmi/spmi.c                       | 3 +--
 drivers/ssb/main.c                        | 4 +---
 drivers/staging/fieldbus/anybuss/host.c   | 4 +---
 drivers/staging/greybus/gbphy.c           | 4 +---
 drivers/target/loopback/tcm_loop.c        | 5 ++---
 drivers/thunderbolt/domain.c              | 4 +---
 drivers/tty/serdev/core.c                 | 4 +---
 drivers/usb/common/ulpi.c                 | 4 +---
 drivers/usb/serial/bus.c                  | 4 +---
 drivers/usb/typec/bus.c                   | 4 +---
 drivers/vdpa/vdpa.c                       | 4 +---
 drivers/vfio/mdev/mdev_driver.c           | 4 +---
 drivers/virtio/virtio.c                   | 3 +--
 drivers/vlynq/vlynq.c                     | 4 +---
 drivers/vme/vme.c                         | 4 +---
 drivers/xen/xenbus/xenbus.h               | 2 +-
 drivers/xen/xenbus/xenbus_probe.c         | 4 +---
 drivers/zorro/zorro-driver.c              | 3 +--
 include/linux/device/bus.h                | 2 +-
 include/linux/pci-epf.h                   | 2 +-
 sound/ac97/bus.c                          | 6 ++----
 sound/aoa/soundbus/core.c                 | 4 +---
 93 files changed, 107 insertions(+), 263 deletions(-)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 09:20:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 09:20:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159665.293653 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Uso-00076s-Or; Thu, 22 Jul 2021 09:20:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159665.293653; Thu, 22 Jul 2021 09:20:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Uso-00076l-LA; Thu, 22 Jul 2021 09:20:46 +0000
Received: by outflank-mailman (input) for mailman id 159665;
 Thu, 22 Jul 2021 09:20:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=0jmz=MO=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m6Usn-00076f-BP
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 09:20:45 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b6c7e21e-81ef-489c-8432-d384adf3282b;
 Thu, 22 Jul 2021 09:20:44 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2056.outbound.protection.outlook.com [104.47.14.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-25-uepIUy3fOwu-f9Ba-KN0gw-1; Thu, 22 Jul 2021 11:20:41 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0401MB2608.eurprd04.prod.outlook.com (2603:10a6:800:4f::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.25; Thu, 22 Jul
 2021 09:20:41 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4352.025; Thu, 22 Jul 2021
 09:20:41 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR3P189CA0088.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::33) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4331.21 via Frontend Transport; Thu, 22 Jul 2021 09:20:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b6c7e21e-81ef-489c-8432-d384adf3282b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1626945643;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=xy9KziwkBTqPBmE/2n9qVyAw/l4nb41AiNBoPr8h9Mo=;
	b=EvlYkNMd8hWhgTYgvMd5Qfq/v3a5AbXlFUT9N+jeeOqnxceUfOH21vpg9NNNFZhSZ7yXzA
	0+gb0r1ZrT7/io+/W3yZhmQAdrRC+27bhaOvXIEVkx0mMASCNm21Uu93ZgG9UGK4eJQgly
	+RyIm6rsqt/kXA6eiCylpA9NH/hL/8c=
X-MC-Unique: uepIUy3fOwu-f9Ba-KN0gw-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=eUwyRhRj1NVrUsWgB/CaE7bT5brRE0sL/4DQMtB99N7B70i6DDchSLLGmtn0SXQwrYinGl68LF0XU02iBo1aBUVwlvxJwOeVYHh2lt06NEcVC53pdf4CNnQgO6CrpLUwjdRxVNaXZ98FrReMJzzu62N0Z6azIPAfmVBPXUrTIJmXiW5Wp2nXA4x1cE6ZFJZGtZJEGj5xwsNqu1VwlmaxH6DjCRJj0ZWZRS33gaGNkKc8XLtFW96+N6UnZky81/xqp4NP5b9thdRHG7CB29NUTWV0OpiJgEcYX2ILGJgPE0VQ7kgCTPcjrnoDqPASrOVUeigX9NYYUl0Nn3yO0Ly1hw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=xy9KziwkBTqPBmE/2n9qVyAw/l4nb41AiNBoPr8h9Mo=;
 b=ksj54kNA8Ov7kyaFxrsq6kZcGxNDIdp8s08y3Ymhx9G2VkjCzhaOpQjN73wN0+Hb4c/5n2CJS4R99mpzO4hzU79Rki5xLDj0iy/LHA4Kuz/umYsz03tF5rM8RNZqJWeIDFDIPYsAkVtBQHVMxwYgpgm6NImU0O7cfyey5tDDh6H4+7i2yIc/YkqCpC4jMXg3aECYJMTQr/OtzQahEdans71uAzSYMVTI1mxxGd6PeOEozaQTVH90YzLzr82q0oSf19TznE6kbwig5tGbff6ypiboB90LkGFTUh8s3900iondLR98DKtH7ndjSRH/yQLJouxrmUA1TA0Yj27dIRnM0Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Subject: [PATCH] x86: work around build issue with GNU ld 2.37
Message-ID: <2e0beb7e-022f-efb3-3adc-4877c60bfeba@suse.com>
Date: Thu, 22 Jul 2021 11:20:38 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR3P189CA0088.EURP189.PROD.OUTLOOK.COM
 (2603:10a6:102:b4::33) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e1c383e6-3453-4ce7-c340-08d94cf1f9bf
X-MS-TrafficTypeDiagnostic: VI1PR0401MB2608:
X-Microsoft-Antispam-PRVS:
	<VI1PR0401MB26086306304E43D55A967006B3E49@VI1PR0401MB2608.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:392;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	tIn7cak5emdaClE3IDGYMaTk9rNUIBgr7vLRJuHTzAZtlY2vWmriuVMAeoufYnwcKr/5JHw3Wr654QcirNBYn1MhdmdAhckK9EdLlAhNEuGRyc5xGzt/oyHnLhRwqYZxtOueqh8rgfelVm7Bnes1qUHfGIsjTpBw6PgT2Toap9cgD64iiTU293yRTYP/1GrHlxwGpt2rxq01szXapnl55NI6v+RiG8v4Z1ohX6KhztkhSF0eue4yc91PJBJ9I48MW/G3TDD/TPWO3ptP0W4YbMGWwzQhynwM18kf8c46iCDmIuhlc/jscp1066dkfHPIsFk/9MWVP7exJvrrTscqsGXmpgIVqyIymzlN70DqHDsr+4yt27WfiHIqhNbhoJox8uMwP/RmuJOLhy6sWQFnsbQdzPK83rZXyZddqRKjQU1QILpKKJbnMKGNgk3qKI1Z1nL6xgskmJZyX/YbX869xSWWB1UKvpsotBJLkedrHtvUVgaKQ5XV/t0OYFW4zJrayaOKMwaMc3X6EGaGllqqGdTz28zmrz+jD0CtSjw1PNejTSn/89eFYUsxR4+GFDNiJ5qFDoLp9S+Ym46Sv7/JRAoB35gbbGGovCh5S2RFHUU1mSKK3Dzccsmfn2UmKJ63d59PqHQtBfB8gTvpkqk2tGsQP3mzi1mSa2NLKzAGvsNCeS5EiDtVoPEYVMsLq/1ffnegxfGUV+UZIpC+OgQNqEzlwnWobNe20uplx7BRriI=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8676002)(956004)(2906002)(8936002)(4744005)(508600001)(26005)(2616005)(5660300002)(31696002)(38100700002)(86362001)(36756003)(31686004)(6486002)(186003)(54906003)(316002)(66946007)(16576012)(6916009)(66556008)(4326008)(66476007)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?cH4n2cg2eTT4ZQp/KxnZR+VvhJAHZLS4ZVQMOXL?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e1c383e6-3453-4ce7-c340-08d94cf1f9bf
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2021 09:20:41.1278
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: MYMmCa65MtUbNfoEFLyDiQ7xBj3PaHQW71vIZ3UOfYOtWIqwKnzpfr8BADjKy6TE2Rb7VMuIjB9QhL1nHXBjog==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2608

I suspect it is commit 40726f16a8d7 ("ld script expression parsing")
which broke the hypervisor build, by no longer accepting section names
with a dash in them inside ADDR() (and perhaps other script directives
expecting just a section name, not an expression): .note.gnu.build-id
is such a section.

Quoting all section names passed to ADDR() via DECL_SECTION() works
around the regression.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -18,7 +18,7 @@ ENTRY(efi_start)
 #else /* !EFI */
 
 #define FORMAT "elf64-x86-64"
-#define DECL_SECTION(x) x : AT(ADDR(x) - __XEN_VIRT_START)
+#define DECL_SECTION(x) x : AT(ADDR(#x) - __XEN_VIRT_START)
 
 ENTRY(start_pa)
 



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 09:29:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 09:29:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159671.293664 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6V1f-0008Hz-Jv; Thu, 22 Jul 2021 09:29:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159671.293664; Thu, 22 Jul 2021 09:29:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6V1f-0008Hs-H3; Thu, 22 Jul 2021 09:29:55 +0000
Received: by outflank-mailman (input) for mailman id 159671;
 Thu, 22 Jul 2021 09:29:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6V1e-0008Hm-GU
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 09:29:54 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6V1e-0004Vv-8L; Thu, 22 Jul 2021 09:29:54 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6V1e-0001s5-2I; Thu, 22 Jul 2021 09:29:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Y7jtwbxZ9gJjsVPMEdrdb0eruTMaxHZh3db39p+R0Go=; b=FMZZfou5YcP3aMicQx7x3BSEyp
	EXHUAGo+cxCZw8BXz9NhocP2tdcnW25DUQJaaIZ/Pcvi70nbqj5y5pVPl6J+K2B5YDs2ogvaRF4Av
	s2pW1r+LQvxA4rd/UMpJVdjLk1k9qTB5y6fElP0Y7tNEOrVzsR1g5/ihCJjMRj3UcuFY=;
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
To: Stefano Stabellini <sstabellini@kernel.org>,
 Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrii Anisov <Andrii_Anisov@epam.com>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
 <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
Date: Thu, 22 Jul 2021 10:29:52 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Stefano and Oleksii,


On 22/07/2021 03:12, Stefano Stabellini wrote:
> On Wed, 21 Jul 2021, Oleksii Moisieiev wrote:
>> Please see my answers below.
>>
>> ___________________________________________________________________________________________________________________________________________
>> From: Julien Grall <julien@xen.org>
>> Sent: Wednesday, July 21, 2021 7:39 PM
>> To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>; xen-devel@lists.xenproject.org <xen-devel@lists.xenproject.org>
>> Cc: Andrii Anisov <Andrii_Anisov@epam.com>; Stefano Stabellini <sstabellini@kernel.org>
>> Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS in kernel config
>>        On 21/07/2021 15:40, Oleksii Moisieiev wrote:
>>        > Hello Julien,
>>
>>        Hello,
>>
>>        >>>
>>        >>> My setup:
>>        >>> Board: H3ULCB Kinfisher board
>>        >>> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15)
>>        >>>https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>>        ri3haIaks6cbo7Ri$
>>        ><https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8
>>        Qri3haIaks6cbo7Ri$>[github[.]com]
>>        >
>>        >>><https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8
>>        Qri3haIaks6cbo7Ri$
>>        > [github[.]com]>;
>>        >>> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576 (v5.10-rc4)
>>        >
>>        >>Hmmm... 5.10 was released a few months ago and there are probably a few
>>        >>stable release for the version. Can you try the latest 5.10 stable?
>>        >
>>        > Switched to tag v5.10 rev: 2c85ebc57b3e of
>>        >https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyi
>>        v-iCGlHhXafbPNc$ [github[.]com]
>>        > and got the same problem, that I see no output from kernel. All tests
>>        > were done with earlycon parameter set in the kernel cmdline.
>>        The tag v5.10 is the first official release. What I meant is using the
>>        stable branch from
>>        git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git (branch
>>        linux-5.10.y).
>>
>> I need some time to download and build mainline kernel. I'll test this scenario and send you results tomorrow.
> 
> I tried 5.10 with:
> 
> CONFIG_KPROBE_EVENTS=y
> CONFIG_UPROBE_EVENTS=y
> 
> and I could boot without issues on Xilinx ZynqMP.
> 
> 
> 
>>        >>>
>>        >>>https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qr
>>        i3haIaks29w69MC$
>>        ><https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>>        ri3haIaks29w69MC$>[github[.]com]
>>        >
>>        >>><https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>>        ri3haIaks29w69MC$
>>        > [github[.]com]>;
>>        >>>
>>        >>> kernel config: see attached;
>>        >>>
>>        >>> dtb: see attached;
>>        >
>>        >>Please avoid large attachment as they will be duplicated on every
>>        >>mailbox. Instead, in the future, please upload them somewhere (your own
>>        >>webserve, pastebin...) and provide a link in the e-mail.
>>        >
>>        > I'm sorry for that.
>>        >
>>        >>>
>>        >>>
>>        >>> If kprobe/uprobe events are enabled - I see no output after xen switched
>>        >>> input to Dom0, if disabled - system boots up successfully.
>>        >>The console subsystem tends to be enabled quite late in the boot
>>        >>process. So this may mean a panic during early boot.
>>        >
>>        >>If you haven't done yet, I would suggest to add earlycon=xenboot on the
>>        >>dom0 command line. This will print some messages during early boot.
>>        >>ing.
>>        >
>>        > All tests were done with earlycon parameter set in the kernel command
>>        > line (xen, dom0-bootargs).
>>        >
>>        >>>
>>        >>> Both configs work fine when I boot without xen.
>>        >>>
>>        >>>
>>        >>> Dom0 information from Xen console shows that only one CPU works, and PC
>>        >>> stays in "__arch_counter_get_cntvct" function on read_sysreg call. //
>>        >>>
>>        >>> I did further investigation and found that kernel 5.4 doesn't have such
>>        >>> kind of issues.
>>        >>> After bisecting kernel,between 5.10 and 5.4, I found that output
>>        >>> disappeared on commit:
>>        >>>
>>        >>> 76085aff29f585139a37a10ea0a7daa63f70872c
>>        >
>>        >> From the information you provided so far, I am a bit confused how this
>>        >>could be the source of the problem. But given this is not the latest
>>        >>5.10, I will wait for you to confirm the bug is still present before
>>        >>providing more input.
>>        >
>>        > I was confused with this commit either. As I mentioned above, I've
>>        > checked with the latest stable 5.10 kernel and still got the same problem.
>>
>>        Thanks for the testing. I am not quite too sure where this may fail.
>>        Maybe Stefano has an idea?
> 
> Are you booting with bootefi? (I cannot see any issues with or without
> bootefi.)
> 
> In any case, the fact that you need to revert
> 76085aff29f585139a37a10ea0a7daa63f70872c to see the printk output is
> very odd. It might point to an alignment problem or another memory
> issue. It is possible that the weirdness you are seeing below (e.g. "we
> get some 18446744073709551615 while expecting 0") is due to a memory
> corruption.
> 
> Given that 76085aff29f585139a37a10ea0a7daa63f70872c is changing some
> section alignment from 4K to 64K, it increases the memory used to load
> the kernel. Is it possible that the size increase is causing you to go
> beyond the address range supposed to be used? E.g. U-Boot loading the
> kernel at invalid addresses.
> 
> Things like CONFIG_KPROBE_EVENTS=y and CONFIG_UPROBE_EVENTS=y are
> relevant because they increase the size of the kernel, possibly pushing
> it to an invalid memory range?

This is actually a good point. There are two other possible issues:
    1) The kernel and the hypervisor may overlaps each other.
    2) The size of the kernel is not correctly provided.

I remember hitting such issues in the past and they will lead to weird 
issues.

In fact looking at the device-tree provided in the first e-mail, I see:

                 module@0 {
                         compatible = "xen,linux-zimage", 
"xen,multiboot-module";
                         reg = <0x5 0x1000000 0x0 0x2000000>;
                 };

However from the pastebin, U-boot will report for the kernel:

Bytes transferred = 37124608 (2367a00 hex)

So, if I am not mistaken, the region in the DT is smaller than the 
kernel itself. The Image header doesn't provide the binary size, so Xen 
can't do any sanity check.

In this case, we would copy a truncated kernel. Can you change in the 
size in the DT and give another try?


If you haven't one yet, I would highly recommend to have script (either 
a U-boot one or outside) that will generate the correct DT for a given 
kernel, xen, initramfs. We have some example scripts on the wiki for 
either solution.

> 
> You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
> from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
> work the same.
> 
> Looking at the boot logs on pastebin I noticed that Xen is not loaded at
> a 2MB aligned address. I recommend you change Xen loading address to
> 0x500200000. And the kernel loading address to 0x500400000.

I am curious to know why you recommend to load at 2MB aligned address. 
The Image protocol doesn't require to load a 2MB aligned address. In 
fact, we add issue on Juno because the bootloader would load Xen at a 
4KB address. UEFI will also load at a 4KB align address.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 09:54:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 09:54:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159679.293683 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6VPF-0003UT-Ie; Thu, 22 Jul 2021 09:54:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159679.293683; Thu, 22 Jul 2021 09:54:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6VPF-0003UL-F1; Thu, 22 Jul 2021 09:54:17 +0000
Received: by outflank-mailman (input) for mailman id 159679;
 Thu, 22 Jul 2021 09:54:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6VPE-0003UB-6J; Thu, 22 Jul 2021 09:54:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6VPE-0004rR-2B; Thu, 22 Jul 2021 09:54:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6VPD-0005DU-PF; Thu, 22 Jul 2021 09:54:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6VPD-00065d-On; Thu, 22 Jul 2021 09:54:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=KS3nxvwLN3uSl9ap5SBOJPcq/o9cptYOghAyeDdaOdM=; b=f7Bl4G6ghqyAe55EyuEUtfdzJz
	3Qbvd9qvt4uzHLMsh93iCxOVUzPppZv9hTqBtv/Mglw+3tWXsWHD/7T5UCOhpNa/cOrp/lElBHwk6
	oPfjSSB/wLgR/eYjqFQUDa4fXaZuGERTqvUviEOd3zf2J8D/0i94v9GIvuTdjKlZWQDg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163893-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163893: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=bcad39457d753b0fcad1e186c2223e91fe95150e
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 09:54:15 +0000

flight 163893 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163893/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              bcad39457d753b0fcad1e186c2223e91fe95150e
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  377 days
Failing since        151818  2020-07-11 04:18:52 Z  376 days  368 attempts
Testing same since   163893  2021-07-22 04:20:57 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 65574 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 13:14:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 13:14:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159743.293745 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6YX9-0002Fo-SK; Thu, 22 Jul 2021 13:14:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159743.293745; Thu, 22 Jul 2021 13:14:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6YX9-0002Fh-PT; Thu, 22 Jul 2021 13:14:39 +0000
Received: by outflank-mailman (input) for mailman id 159743;
 Thu, 22 Jul 2021 13:14:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6YX7-0002FX-St; Thu, 22 Jul 2021 13:14:37 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6YX7-0007n2-Ek; Thu, 22 Jul 2021 13:14:37 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6YX7-0007Aw-6d; Thu, 22 Jul 2021 13:14:37 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6YX7-0002vO-6A; Thu, 22 Jul 2021 13:14:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=j2xZnyZgknTh+uu84JU5v8yaR2O6b4YenAVypvH6hHA=; b=yr8fb7F4r+1V4xAQgZ/niWu+TA
	RUj55krte5v9Pl5vFkaqt6e77hziN+g3TI6CDep7+FKwrxCr9zqhbfZ0A3+bXGjipD9VhDIY6DsGV
	Iue8CDXZvae54S4H7tS68q1sxAS23fbPxZPOuHyUOKBSFX7DbKcNbtM+PUa4qRyBL2uQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163889-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163889: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=097aeeb119538a60f68355f1c3ac47df1834c90a
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 13:14:37 +0000

flight 163889 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163889/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 097aeeb119538a60f68355f1c3ac47df1834c90a
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   48 days
Failing since        162368  2021-06-04 15:42:59 Z   47 days  129 attempts
Testing same since   163875  2021-07-21 13:11:42 Z    1 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 3953 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 13:49:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 13:49:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159752.293767 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Z56-0006bh-Hi; Thu, 22 Jul 2021 13:49:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159752.293767; Thu, 22 Jul 2021 13:49:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Z56-0006ba-ES; Thu, 22 Jul 2021 13:49:44 +0000
Received: by outflank-mailman (input) for mailman id 159752;
 Thu, 22 Jul 2021 13:49:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=4XTk=MO=epam.com=prvs=7837d5b24f=oleksii_moisieiev@srs-us1.protection.inumbo.net>)
 id 1m6Z54-0006bU-Tj
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 13:49:43 +0000
Received: from mx0b-0039f301.pphosted.com (unknown [148.163.137.242])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a9549046-eaf3-11eb-8fe9-12813bfff9fa;
 Thu, 22 Jul 2021 13:49:40 +0000 (UTC)
Received: from pps.filterd (m0174681.ppops.net [127.0.0.1])
 by mx0b-0039f301.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16MDlM4Y002280; Thu, 22 Jul 2021 13:49:39 GMT
Received: from fra01-mr2-obe.outbound.protection.outlook.com
 (mail-mr2fra01lp0106.outbound.protection.outlook.com [104.47.25.106])
 by mx0b-0039f301.pphosted.com with ESMTP id 39y9v6r0f9-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Thu, 22 Jul 2021 13:49:38 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com (2603:10a6:102:ea::23)
 by PR2PR03MB5449.eurprd03.prod.outlook.com (2603:10a6:101:18::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Thu, 22 Jul
 2021 13:49:35 +0000
Received: from PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c]) by PA4PR03MB7136.eurprd03.prod.outlook.com
 ([fe80::1c8:a432:8446:ee8c%8]) with mapi id 15.20.4331.034; Thu, 22 Jul 2021
 13:49:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a9549046-eaf3-11eb-8fe9-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OijlUTdITYx2pxPu6CInatp2I6um/B5Q7VJ07ReAbNCbHBBVytkI6Bz2xlk0jRRO1T2FoXy2yP/YGM6WuFxVXHWoDbPfPv6pSkajN+YIfDwGQSyxhfAfHSb/LBze1bD/Mf156CKVB7/khX2fJnUwqewNZG1toXrv/HgQos//y9WEAuDblY8Ac8jIVS5veNplY0zvXfC9Nj2/UAnn12n+WKB7MAOB6J5VXSS3MW/pEQayxW4rjp6S4DXJh5ZJYD7MNjhyXOUYyH5icB2NR+n4gsEwPtAR2AISaX905dTL9JItF+EIbDyXpDfCvzi+4//7VsFm29iviGfQx55FAuUPDg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=k+agHEIlwZbHm70PGXM7ln7UnNK/AIUx+d5IuIsJP9w=;
 b=VxViozB5TRlo8SYAbS8mKou2p8mT/LjaSrUt5mhueLPmsaTwOrq8B2xCBkoFY1OsmeME4BCzFcCb2oxud62s9SMAVwP2NsN92tKFQtGuY8dyztdOU+1rTC7Q8FSgkWNUlpBjUawwrIfm3SDQ91UXcUc6kp5P/hnmtaUWGWe7J52EBPwRBovfKl+NH53DXhcuoYdamoDjj67gm720GzYP1YQsiHbkysfSzmn2ipeguUhrpajVFLHG2uLA4jprWYV01zfpiThx6OJ+I61n7H/KH7/MGuJzS21v4w29eflTXM3LzQy7VvF3SXL+ZSkbiv6zXa58C01lITmF3YRLv8rlNw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com;
 dkim=pass header.d=epam.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=k+agHEIlwZbHm70PGXM7ln7UnNK/AIUx+d5IuIsJP9w=;
 b=6iqK1jFMWfgyNdFdbfmKtJ4QB00tEFuaKrNm5gGGsaaB1X6GVrogAMzecR67BqaqO3ouF3BnpdTXh7d9QMaObp+buSYgB1T/+BikW13+51Z+9JBNeI5Gp+GHSAMn+k/03rWDoWW94n/mUJhfcE8N6Cflrrp2c+f9WDbS8dNKdrbclK1kr4iiBE0hOqIvAr4HMObdx3Hrj8aYvd4I5LZmTIoqPalgcPmMSObYiPdTeEK5CJFFcoE83mqidSPRhLgpttCdnXpFmjuXEQcVssb4HZRJOrcI+x8gzGkBLGN60GCJurjPsn11wmbAZAJoQM9B2hx7STfpeFVv1kqIReX5dQ==
From: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>
To: Julien Grall <julien@xen.org>,
        "sstabellini@kernel.org"
	<sstabellini@kernel.org>
CC: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
        Andrii
 Anisov <Andrii_Anisov@epam.com>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
Thread-Topic: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
Thread-Index: AQHXfk7sayRbwafWg0WziHoeeCAd5atNqbDZgACX0oCAAHofAIAAQ83G
Date: Thu, 22 Jul 2021 13:49:34 +0000
Message-ID: 
 <PA4PR03MB713676499C1F10655C0ACF4AE3E49@PA4PR03MB7136.eurprd03.prod.outlook.com>
References: 
 <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
 <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>,<7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
In-Reply-To: <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=epam.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 9120ba3c-a790-4dfb-e2b3-08d94d178a54
x-ms-traffictypediagnostic: PR2PR03MB5449:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: 
 <PR2PR03MB5449A7D48FC164F17B39C3C0E3E49@PR2PR03MB5449.eurprd03.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 
 IEN0o5cuWDcxgcv/gjp661sQgQVquwkMzLf+hucTENWxMcY2qRNSYXszvwCriDnwt7YpNiskmJLXxsaYwRdlrNL+Ln39luspBbqKW2VffrflEjngZJSLApWvz2cPwY3tMZfFoUGnVq9LSuA9IA33RKiJZyNnCMMikRNxObVew1TSuCo9zqGU00reNhb1yNtWXqjwTCGJCTxSD5I5gqzDgPMAmZ2ykhGTvUwGdQGZkFfyM0FiRGheqQU5VKwxRVkj4VGN5VSCdle593H4zOKR7ocBt2Mn3bWDybdv+yWBZvnFttmEEbMwYnqzutvB6JdxX9cuqcuSslsiCUx6vQVArAwJhnwUVd+HVlySAGKkwvFX6EDHD9jM07pL2YOSWFEwH5Ga2b5YVe72elkvZ1wDbJTlitANXgdEdBTCMML2ZcLD8muAGIW7sN72MYXxXI/djzsQQ9FRJicjg5NWVOOzCr4JDFClDRk64Osxy4KGEGhUqh3Xkemiw+PUjnAKOfdylG+FCpOaxkEsfEtk26oLCnW+dwsP8EDpWUGCWu1oOAxwcgCCvHVdCe4IiE9NOi59meULQITjPUU+4eMvNR35SjE4HRqVf4xaHoColpa5r6CS2UfcPIFfsIF8ulXN/n7Ba/RvORFJ9awuX89aa23ZPjkZ3o+t4vYfitz2/sxRqpH6R5wJOZ7nMAa3Rqav5lxhMqWWEXIxJ2HrktYO86hnBGa81e6grSI/QWUvbqzI1MP7NjENo6zV+FKl4FWIymTuyIqhNSEQkoSl4NW1TtYZWCcSJOJyKWS1Xr/9613ZDEsXTcoWCrUTz4jnNGzVMoQSmpHwk6uC9aoKiV7Wcn5NgWBL9K+U3A89occr3sd9WkA=
x-forefront-antispam-report: 
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR03MB7136.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(39860400002)(396003)(376002)(136003)(366004)(33656002)(76116006)(316002)(186003)(54906003)(5660300002)(26005)(38100700002)(64756008)(66446008)(66476007)(8936002)(71200400001)(4326008)(86362001)(66556008)(52536014)(110136005)(55016002)(66946007)(2906002)(107886003)(19627405001)(83380400001)(18265965003)(8676002)(7696005)(6506007)(9686003)(53546011)(166002)(478600001)(122000001)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 
 =?iso-8859-1?Q?c7J3TUEeBAUnm+cWeQup1vXnzLuvsRPpcabOiSNE0bs3+2XTLJhwfBVuRY?=
 =?iso-8859-1?Q?uSFqWzCFvQ01E5/D1YkPMUw9BSEioPHiwzI7OdrXLyh7sG3HOY/X48rbyz?=
 =?iso-8859-1?Q?XDE8VeZFdB0nhVobdZIObDKOPCCE1kaNakj3tME9QiTaLe6/VnAcC2dHL4?=
 =?iso-8859-1?Q?Ro0M8vjUHuS9LNqztFlKKN/Sx0HkRirdDnT3X7uPR3NQ+Z7G6jXbbIPYxI?=
 =?iso-8859-1?Q?3+JRAeWtRoo9xy8RtHfGIyDTEBHMaBbKoVUELYFhPp5m+6QP5XbLVXkPk4?=
 =?iso-8859-1?Q?IEeRUS+l8UP6iYMK4Bg0pUcHx2k4h+hUaSRJwko9CSTa9LWjiucKOQ9xac?=
 =?iso-8859-1?Q?yjj/7M2PLxobL0z03hpQAiYcEb96hLXlKxy3drNXcN5lCLO8jgeRpzkuSJ?=
 =?iso-8859-1?Q?hwemW+nzDzSylFGoaExrXqkoV3Iy9irMdUXWJHcYqN8Q+9I5EVqHFqTXKn?=
 =?iso-8859-1?Q?w42CZH3s/X9bmn5iUxW9v4uNj/QxygKpvZYx0Lxdm3iW28++Hhdn6aqmqq?=
 =?iso-8859-1?Q?QK5UOg0JDMdI/jlvHrcZphNur5EqUC9xx2gyfclw4Iy+wWt5j56bqnDqkX?=
 =?iso-8859-1?Q?qsyw4k0V+lVm9UpcviJSDJkVsPG5oTLEkj5Ib0RLYoAS67w3DuaNbfHCDc?=
 =?iso-8859-1?Q?Iz6biYFMth8ItjzUITiBwgGOTLfGFcL9EMeMAXnwUSRCPFP488VT0k5rSS?=
 =?iso-8859-1?Q?s8veDuJNZwV+KCKBRDTfPdlvMbhDZdQOxEaquFBpKiy+FqsbG22xMr3Fus?=
 =?iso-8859-1?Q?dJeoK+v8GSvYmmLBYVRGyMsBtjby3l4sIaNJHhcJ+GAWdBfL55b/mCrH6X?=
 =?iso-8859-1?Q?Ie2BoK9JvLeLc/enwMXTo1Na2s3qPLCbp3P34d1OZ0UmM1hXurKuv/S/fg?=
 =?iso-8859-1?Q?ziouGNuxc3XqSNqvChw7LirbO/W162A6rKE5QqiF4Rqx46bz7IpBxrczSC?=
 =?iso-8859-1?Q?VFI3wAiWs/tnTzZ6l159rV7lWh8QOwnX6RdjGwTzvu0jwudoVvFGnym2+U?=
 =?iso-8859-1?Q?LpUsSsVA3SrCh5+Du4+enBtc8p5g57lgXfsozszPtHOayPXrvkcSahUNvy?=
 =?iso-8859-1?Q?YRHd1p4hDbx3mf1xDe5AE5tYyvltoxPPw3qEninViBPe+4H4jSFpZU2gJl?=
 =?iso-8859-1?Q?wpliaWWtMfIOUz6PZGvZFhnB7YRHItY2T1XKHFS5sCjcOmLmG/01qr7TS3?=
 =?iso-8859-1?Q?EmXc9RDITJhfQPJxb/h1rCjfKQQHyF0U2JXyEghe1lcmY4ih/P6Jh45y7t?=
 =?iso-8859-1?Q?+HV+ZyYTWM6dFbSak4SqHIC50jfc4MRgl12MTzzcQAVGaLkgR5lFpxbco0?=
 =?iso-8859-1?Q?pb0TtutDKGNrEUvrbLCje+zOMnbF5FM47LJm4nHdZCMuR7s=3D?=
Content-Type: multipart/alternative;
	boundary="_000_PA4PR03MB713676499C1F10655C0ACF4AE3E49PA4PR03MB7136eurp_"
MIME-Version: 1.0
X-OriginatorOrg: epam.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: PA4PR03MB7136.eurprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 9120ba3c-a790-4dfb-e2b3-08d94d178a54
X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jul 2021 13:49:34.8776
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 7Z4dXfPRs+uRyqJ/5B/yhNaHEFwy7HJZfpcB0zOOlxQ9IMB6yR8UXk7vmWttZ3RjwvrrN85RHlT++UroTMv661okU7lfAw8MDwiDzfcqdnU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR2PR03MB5449
X-Proofpoint-GUID: BeQI249M7mCAcp05ncAXfh_jJJIm6Dh2
X-Proofpoint-ORIG-GUID: BeQI249M7mCAcp05ncAXfh_jJJIm6Dh2
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790
 definitions=2021-07-22_07:2021-07-22,2021-07-22 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0
 mlxscore=0 malwarescore=0 suspectscore=0 adultscore=0 priorityscore=1501
 spamscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999
 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000
 definitions=main-2107220092

--_000_PA4PR03MB713676499C1F10655C0ACF4AE3E49PA4PR03MB7136eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hello Julien and Stefano,

This is actually a good point. There are two other possible issues:
    1) The kernel and the hypervisor may overlaps each other.
    2) The size of the kernel is not correctly provided.

I remember hitting such issues in the past and they will lead to weird
issues.

In fact looking at the device-tree provided in the first e-mail, I see:

                 module@0 {
                         compatible =3D "xen,linux-zimage",
"xen,multiboot-module";
                         reg =3D <0x5 0x1000000 0x0 0x2000000>;
                 };

However from the pastebin, U-boot will report for the kernel:

Bytes transferred =3D 37124608 (2367a00 hex)

So, if I am not mistaken, the region in the DT is smaller than the
kernel itself. The Image header doesn't provide the binary size, so Xen
can't do any sanity check.

In this case, we would copy a truncated kernel. Can you change in the
size in the DT and give another try?


If you haven't one yet, I would highly recommend to have script (either
a U-boot one or outside) that will generate the correct DT for a given
kernel, xen, initramfs. We have some example scripts on the wiki for
either solution.
Thank you very much for the suggestion. It appears to be the cause of the i=
ssue. Issue was fixed once I increased region in DT. I should have checked =
this at the very beginning.
The most interesting thing that kernel size is the same, regardless of krob=
e/uprobe events are on or off. But error appears only if kprobe/uprobe even=
ts are on.
In any case, thank you very much for your help.

Best regards,
Oleksii

________________________________
From: Julien Grall <julien@xen.org>
Sent: Thursday, July 22, 2021 12:29 PM
To: Stefano Stabellini <sstabellini@kernel.org>; Oleksii Moisieiev <Oleksii=
_Moisieiev@epam.com>
Cc: xen-devel@lists.xenproject.org <xen-devel@lists.xenproject.org>; Andrii=
 Anisov <Andrii_Anisov@epam.com>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENT=
S in kernel config

Hi Stefano and Oleksii,


On 22/07/2021 03:12, Stefano Stabellini wrote:
> On Wed, 21 Jul 2021, Oleksii Moisieiev wrote:
>> Please see my answers below.
>>
>> ________________________________________________________________________=
___________________________________________________________________
>> From: Julien Grall <julien@xen.org>
>> Sent: Wednesday, July 21, 2021 7:39 PM
>> To: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>; xen-devel@lists.xenp=
roject.org <xen-devel@lists.xenproject.org>
>> Cc: Andrii Anisov <Andrii_Anisov@epam.com>; Stefano Stabellini <sstabell=
ini@kernel.org>
>> Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EV=
ENTS in kernel config
>>        On 21/07/2021 15:40, Oleksii Moisieiev wrote:
>>        > Hello Julien,
>>
>>        Hello,
>>
>>        >>>
>>        >>> My setup:
>>        >>> Board: H3ULCB Kinfisher board
>>        >>> Xen: revision dba774896f7dd74773c14d537643b7d7477fefcd (stabl=
e-4.15)
>>        >>>https://urldefense.com/v3/__https://github.com/xen-project/xen=
.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8=
Q
>>        ri3haIaks6cbo7Ri$
>>        ><https://urldefense.com/v3/__https://github.com/xen-project/xen.=
git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8
>>        Qri3haIaks6cbo7Ri$>[github[.]com]
>>        >
>>        >>><https://urldefense.com/v3/__https://github.com/xen-project/xe=
n.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp=
8
>>        Qri3haIaks6cbo7Ri$
>>        > [github[.]com]>;
>>        >>> Kernel: revision 09162bc32c880a791c6c0668ce0745cf7958f576 (v5=
.10-rc4)
>>        >
>>        >>Hmmm... 5.10 was released a few months ago and there are probab=
ly a few
>>        >>stable release for the version. Can you try the latest 5.10 sta=
ble?
>>        >
>>        > Switched to tag v5.10 rev: 2c85ebc57b3e of
>>        >https://urldefense.com/v3/__https://github.com/torvalds/linux.gi=
t__;!!GF_29dbcQIUBPA!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyi
>>        v-iCGlHhXafbPNc$ [github[.]com]
>>        > and got the same problem, that I see no output from kernel. All=
 tests
>>        > were done with earlycon parameter set in the kernel cmdline.
>>        The tag v5.10 is the first official release. What I meant is usin=
g the
>>        stable branch from
>>        git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git (b=
ranch
>>        linux-5.10.y).
>>
>> I need some time to download and build mainline kernel. I'll test this s=
cenario and send you results tomorrow.
>
> I tried 5.10 with:
>
> CONFIG_KPROBE_EVENTS=3Dy
> CONFIG_UPROBE_EVENTS=3Dy
>
> and I could boot without issues on Xilinx ZynqMP.
>
>
>
>>        >>>
>>        >>>https://urldefense.com/v3/__https://github.com/torvalds/linux.=
git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q=
r
>>        i3haIaks29w69MC$
>>        ><https://urldefense.com/v3/__https://github.com/torvalds/linux.g=
it__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q
>>        ri3haIaks29w69MC$>[github[.]com]
>>        >
>>        >>><https://urldefense.com/v3/__https://github.com/torvalds/linux=
.git__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8=
Q
>>        ri3haIaks29w69MC$
>>        > [github[.]com]>;
>>        >>>
>>        >>> kernel config: see attached;
>>        >>>
>>        >>> dtb: see attached;
>>        >
>>        >>Please avoid large attachment as they will be duplicated on eve=
ry
>>        >>mailbox. Instead, in the future, please upload them somewhere (=
your own
>>        >>webserve, pastebin...) and provide a link in the e-mail.
>>        >
>>        > I'm sorry for that.
>>        >
>>        >>>
>>        >>>
>>        >>> If kprobe/uprobe events are enabled - I see no output after x=
en switched
>>        >>> input to Dom0, if disabled - system boots up successfully.
>>        >>The console subsystem tends to be enabled quite late in the boo=
t
>>        >>process. So this may mean a panic during early boot.
>>        >
>>        >>If you haven't done yet, I would suggest to add earlycon=3Dxenb=
oot on the
>>        >>dom0 command line. This will print some messages during early b=
oot.
>>        >>ing.
>>        >
>>        > All tests were done with earlycon parameter set in the kernel c=
ommand
>>        > line (xen, dom0-bootargs).
>>        >
>>        >>>
>>        >>> Both configs work fine when I boot without xen.
>>        >>>
>>        >>>
>>        >>> Dom0 information from Xen console shows that only one CPU wor=
ks, and PC
>>        >>> stays in "__arch_counter_get_cntvct" function on read_sysreg =
call. //
>>        >>>
>>        >>> I did further investigation and found that kernel 5.4 doesn't=
 have such
>>        >>> kind of issues.
>>        >>> After bisecting kernel,between 5.10 and 5.4, I found that out=
put
>>        >>> disappeared on commit:
>>        >>>
>>        >>> 76085aff29f585139a37a10ea0a7daa63f70872c
>>        >
>>        >> From the information you provided so far, I am a bit confused =
how this
>>        >>could be the source of the problem. But given this is not the l=
atest
>>        >>5.10, I will wait for you to confirm the bug is still present b=
efore
>>        >>providing more input.
>>        >
>>        > I was confused with this commit either. As I mentioned above, I=
've
>>        > checked with the latest stable 5.10 kernel and still got the sa=
me problem.
>>
>>        Thanks for the testing. I am not quite too sure where this may fa=
il.
>>        Maybe Stefano has an idea?
>
> Are you booting with bootefi? (I cannot see any issues with or without
> bootefi.)
>
> In any case, the fact that you need to revert
> 76085aff29f585139a37a10ea0a7daa63f70872c to see the printk output is
> very odd. It might point to an alignment problem or another memory
> issue. It is possible that the weirdness you are seeing below (e.g. "we
> get some 18446744073709551615 while expecting 0") is due to a memory
> corruption.
>
> Given that 76085aff29f585139a37a10ea0a7daa63f70872c is changing some
> section alignment from 4K to 64K, it increases the memory used to load
> the kernel. Is it possible that the size increase is causing you to go
> beyond the address range supposed to be used? E.g. U-Boot loading the
> kernel at invalid addresses.
>
> Things like CONFIG_KPROBE_EVENTS=3Dy and CONFIG_UPROBE_EVENTS=3Dy are
> relevant because they increase the size of the kernel, possibly pushing
> it to an invalid memory range?

This is actually a good point. There are two other possible issues:
    1) The kernel and the hypervisor may overlaps each other.
    2) The size of the kernel is not correctly provided.

I remember hitting such issues in the past and they will lead to weird
issues.

In fact looking at the device-tree provided in the first e-mail, I see:

                 module@0 {
                         compatible =3D "xen,linux-zimage",
"xen,multiboot-module";
                         reg =3D <0x5 0x1000000 0x0 0x2000000>;
                 };

However from the pastebin, U-boot will report for the kernel:

Bytes transferred =3D 37124608 (2367a00 hex)

So, if I am not mistaken, the region in the DT is smaller than the
kernel itself. The Image header doesn't provide the binary size, so Xen
can't do any sanity check.

In this case, we would copy a truncated kernel. Can you change in the
size in the DT and give another try?


If you haven't one yet, I would highly recommend to have script (either
a U-boot one or outside) that will generate the correct DT for a given
kernel, xen, initramfs. We have some example scripts on the wiki for
either solution.

>
> You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
> from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
> work the same.
>
> Looking at the boot logs on pastebin I noticed that Xen is not loaded at
> a 2MB aligned address. I recommend you change Xen loading address to
> 0x500200000. And the kernel loading address to 0x500400000.

I am curious to know why you recommend to load at 2MB aligned address.
The Image protocol doesn't require to load a 2MB aligned address. In
fact, we add issue on Juno because the bootloader would load Xen at a
4KB address. UEFI will also load at a 4KB align address.

Cheers,

--
Julien Grall

--_000_PA4PR03MB713676499C1F10655C0ACF4AE3E49PA4PR03MB7136eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<span style=3D"margin:0px;font-size:12pt;color:black">Hello Julien&nbsp;and=
 Stefano,</span></div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<blockquote style=3D"font-family:&quot;Segoe UI&quot;, &quot;Segoe UI Web (=
West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSystemFo=
nt, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;color:rgb=
(102, 102, 102);margin-left:0.8ex;padding-left:1ex;border-color:rgb(200, 20=
0, 200);border-left-width:3px;border-left-style:solid">
<div style=3D"margin:0px"><font size=3D"2">
<div style=3D"margin:0px"><br>
</div>
<span style=3D"margin:0px;font-size:11pt">
<div style=3D"margin:0px">This is actually a good point. There are two othe=
r possible issues:<br>
&nbsp;&nbsp;&nbsp; 1) The kernel and the hypervisor may overlaps each other=
.<br>
&nbsp;&nbsp;&nbsp; 2) The size of the kernel is not correctly provided.<br>
<br>
I remember hitting such issues in the past and they will lead to weird<span=
 class=3D"Apple-converted-space">&nbsp;</span><br>
issues.<br>
<br>
In fact looking at the device-tree provided in the first e-mail, I see:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; module@0 {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compa=
tible =3D &quot;xen,linux-zimage&quot;,<span class=3D"Apple-converted-space=
">&nbsp;</span><br>
&quot;xen,multiboot-module&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg =
=3D &lt;0x5 0x1000000 0x0 0x2000000&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; };<br>
<br>
However from the pastebin, U-boot will report for the kernel:<br>
<br>
Bytes transferred =3D 37124608 (2367a00 hex)<br>
<br>
So, if I am not mistaken, the region in the DT is smaller than the<span cla=
ss=3D"Apple-converted-space">&nbsp;</span><br>
kernel itself. The Image header doesn't provide the binary size, so Xen<spa=
n class=3D"Apple-converted-space">&nbsp;</span><br>
can't do any sanity check.<br>
<br>
In this case, we would copy a truncated kernel. Can you change in the<span =
class=3D"Apple-converted-space">&nbsp;</span><br>
size in the DT and give another try?<br>
<br>
<br>
If you haven't one yet, I would highly recommend to have script (either<spa=
n class=3D"Apple-converted-space">&nbsp;</span><br>
a U-boot one or outside) that will generate the correct DT for a given<span=
 class=3D"Apple-converted-space">&nbsp;</span><br>
kernel, xen, initramfs. We have some example scripts on the wiki for<span c=
lass=3D"Apple-converted-space">&nbsp;</span><br>
either solution.<br>
</div>
</span></font></div>
</blockquote>
<div style=3D"margin:0px;font-family:&quot;Segoe UI&quot;, &quot;Segoe UI W=
eb (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSyst=
emFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;color=
:rgb(32, 31, 30);caret-color:rgb(32, 31, 30)">
Thank you very much for the suggestion. It appears to be the cause of the i=
ssue. Issue was fixed once I increased region in DT. I should have checked =
this at the very beginning.&nbsp;</div>
<div style=3D"margin:0px;font-family:&quot;Segoe UI&quot;, &quot;Segoe UI W=
eb (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSyst=
emFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;color=
:rgb(32, 31, 30);caret-color:rgb(32, 31, 30)">
The most interesting thing that kernel size is the same, regardless of krob=
e/uprobe events are on or off. But error appears only if kprobe/uprobe even=
ts are on.&nbsp;</div>
<span style=3D"margin:0px;font-family:&quot;Segoe UI&quot;, &quot;Segoe UI =
Web (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSys=
temFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;colo=
r:rgb(32, 31, 30);caret-color:rgb(32, 31, 30)">In any case, thank you very
 much for your help.</span><br>
</div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<span style=3D"margin:0px;font-family:&quot;Segoe UI&quot;, &quot;Segoe UI =
Web (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSys=
temFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;colo=
r:rgb(32, 31, 30);caret-color:rgb(32, 31, 30)"><br>
</span></div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<span style=3D"margin:0px;font-family:&quot;Segoe UI&quot;, &quot;Segoe UI =
Web (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSys=
temFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;colo=
r:rgb(32, 31, 30);caret-color:rgb(32, 31, 30)">Best regards,</span></div>
<div style=3D"font-family: Calibri, Arial, Helvetica, sans-serif; font-size=
: 12pt; color: rgb(0, 0, 0);">
<span style=3D"margin:0px;font-family:&quot;Segoe UI&quot;, &quot;Segoe UI =
Web (West European)&quot;, &quot;Segoe UI&quot;, -apple-system, BlinkMacSys=
temFont, Roboto, &quot;Helvetica Neue&quot;, sans-serif;font-size:15px;colo=
r:rgb(32, 31, 30);caret-color:rgb(32, 31, 30)">Oleksii</span></div>
<div id=3D"appendonsend"></div>
<div style=3D"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12p=
t; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font face=3D"Calibri, sans-serif" co=
lor=3D"#000000" style=3D"font-size:11pt"><b>From:</b> Julien Grall &lt;juli=
en@xen.org&gt;<br>
<b>Sent:</b> Thursday, July 22, 2021 12:29 PM<br>
<b>To:</b> Stefano Stabellini &lt;sstabellini@kernel.org&gt;; Oleksii Moisi=
eiev &lt;Oleksii_Moisieiev@epam.com&gt;<br>
<b>Cc:</b> xen-devel@lists.xenproject.org &lt;xen-devel@lists.xenproject.or=
g&gt;; Andrii Anisov &lt;Andrii_Anisov@epam.com&gt;<br>
<b>Subject:</b> Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROB=
E_EVENTS in kernel config</font>
<div>&nbsp;</div>
</div>
<div class=3D"BodyFragment"><font size=3D"2"><span style=3D"font-size:11pt"=
>
<div class=3D"PlainText">Hi Stefano and Oleksii,<br>
<br>
<br>
On 22/07/2021 03:12, Stefano Stabellini wrote:<br>
&gt; On Wed, 21 Jul 2021, Oleksii Moisieiev wrote:<br>
&gt;&gt; Please see my answers&nbsp;below.<br>
&gt;&gt;<br>
&gt;&gt; __________________________________________________________________=
_________________________________________________________________________<b=
r>
&gt;&gt; From: Julien Grall &lt;julien@xen.org&gt;<br>
&gt;&gt; Sent: Wednesday, July 21, 2021 7:39 PM<br>
&gt;&gt; To: Oleksii Moisieiev &lt;Oleksii_Moisieiev@epam.com&gt;; xen-deve=
l@lists.xenproject.org &lt;xen-devel@lists.xenproject.org&gt;<br>
&gt;&gt; Cc: Andrii Anisov &lt;Andrii_Anisov@epam.com&gt;; Stefano Stabelli=
ni &lt;sstabellini@kernel.org&gt;<br>
&gt;&gt; Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPR=
OBE_EVENTS in kernel config<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On 21/07/2021 15:40, Ole=
ksii Moisieiev wrote:<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Hello&nbsp;Julien,<=
br>
&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hello,<br>
&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; My setup:<b=
r>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; Board: H3UL=
CB Kinfisher board<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; Xen: revisi=
on dba774896f7dd74773c14d537643b7d7477fefcd (stable-4.15)<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<a href=3D"h=
ttps://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29=
dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q">https://url=
defense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_29dbcQIUBPA!=
m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q</a><br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ri3haIaks6cbo7Ri$<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&lt;<a href=3D""></a=
>https://urldefense.com/v3/__https://github.com/xen-project/xen.git__;!!GF_=
29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Qri3haIaks6cbo7Ri$&gt;[g=
ithub[.]com]<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;&lt;<a href=
=3D""></a>https://urldefense.com/v3/__https://github.com/xen-project/xen.gi=
t__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8<br=
>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Qri3haIaks6cbo7Ri$<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; [github[.]com]&gt;;=
<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; Kernel: rev=
ision 09162bc32c880a791c6c0668ce0745cf7958f576&nbsp;(v5.10-rc4)<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Hmmm... 5.10 was=
 released a few months ago and there are probably a few<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;stable release f=
or the version. Can you try the latest 5.10 stable?<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Switched to tag v5.=
10 rev: 2c85ebc57b3e of<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<a href=3D"https://u=
rldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA=
!hJARiSsCASVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyi">https://urldefense.=
com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!hJARiSsCA=
SVNpAQxrnN-7sFsVHHTS39sjRraLqBkD6AoaCbplgoyi</a><br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v-iCGlHhXafbPNc$ [github=
[.]com]<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; and got the same pr=
oblem, that I see no output from kernel. All tests<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; were done with earl=
ycon parameter set in the kernel cmdline.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The tag v5.10 is the fir=
st official release. What I meant is using the<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stable branch from<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; git://git.kernel.org/pub=
/scm/linux/kernel/git/stable/linux.git (branch<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; linux-5.10.y).<br>
&gt;&gt;<br>
&gt;&gt; I need some time to download and build mainline kernel. I'll test =
this scenario and send you results tomorrow.<br>
&gt; <br>
&gt; I tried 5.10 with:<br>
&gt; <br>
&gt; CONFIG_KPROBE_EVENTS=3Dy<br>
&gt; CONFIG_UPROBE_EVENTS=3Dy<br>
&gt; <br>
&gt; and I could boot without issues on Xilinx ZynqMP.<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<a href=3D"h=
ttps://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29d=
bcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qr">https://url=
defense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_29dbcQIUBPA!m=
4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Qr</a><br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i3haIaks29w69MC$<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&lt;<a href=3D""></a=
>https://urldefense.com/v3/__https://github.com/torvalds/linux.git__;!!GF_2=
9dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ri3haIaks29w69MC$&gt;[gi=
thub[.]com]<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;&lt;<a href=
=3D""></a>https://urldefense.com/v3/__https://github.com/torvalds/linux.git=
__;!!GF_29dbcQIUBPA!m4NHC2XbbSHWWZjQ7CX1ZZhaET6l0bQhZo581jtCmpst8E8JBp8Q<br=
>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ri3haIaks29w69MC$<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; [github[.]com]&gt;;=
<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; kernel conf=
ig: see attached;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; dtb: see at=
tached;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;Please avoid lar=
ge attachment as they will be duplicated on every<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;mailbox. Instead=
, in the future, please upload them somewhere (your own<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;webserve, pasteb=
in...) and provide a link in the e-mail.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; I'm sorry for that.=
<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; If kprobe/u=
probe events are enabled - I see no output after xen switched<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; input to Do=
m0, if disabled - system boots up successfully.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;The console subs=
ystem tends to be enabled quite late in the boot<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;process. So this=
 may mean a panic during early boot.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;If you haven't d=
one yet, I would suggest to add earlycon=3Dxenboot on the<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;dom0 command lin=
e. This will print some messages during early boot.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;ing.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; All tests were done=
 with earlycon parameter set in the kernel command<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; line (xen, dom0-boo=
targs).<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; Both config=
s work fine when I boot without xen.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; Dom0 inform=
ation from Xen console shows that only one CPU works, and PC<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; stays in &q=
uot;__arch_counter_get_cntvct&quot; function on read_sysreg call. //<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; I did furth=
er investigation and found that kernel 5.4 doesn't have such<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; kind of iss=
ues.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; After bisec=
ting kernel,between 5.10 and 5.4, I found that output<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; disappeared=
 on commit:<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; 76085aff29f=
585139a37a10ea0a7daa63f70872c<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt; From the inform=
ation you provided so far, I am a bit confused how this<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;could be the sou=
rce of the problem. But given this is not the latest<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;5.10, I will wai=
t for you to confirm the bug is still present before<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;providing more i=
nput.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; I was confused with=
 this commit either. As I mentioned above, I've<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; checked with the la=
test stable 5.10 kernel and still got the same problem.<br>
&gt;&gt;<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thanks for the testing. =
I am not quite too sure where this may fail.<br>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maybe Stefano has an ide=
a?<br>
&gt; <br>
&gt; Are you booting with bootefi? (I cannot see any issues with or without=
<br>
&gt; bootefi.)<br>
&gt; <br>
&gt; In any case, the fact that you need to revert<br>
&gt; 76085aff29f585139a37a10ea0a7daa63f70872c to see the printk output is<b=
r>
&gt; very odd. It might point to an alignment problem or another memory<br>
&gt; issue. It is possible that the weirdness you are seeing below (e.g. &q=
uot;we<br>
&gt; get some&nbsp;18446744073709551615 while expecting 0&quot;) is due to =
a memory<br>
&gt; corruption.<br>
&gt; <br>
&gt; Given that 76085aff29f585139a37a10ea0a7daa63f70872c is changing some<b=
r>
&gt; section alignment from 4K to 64K, it increases the memory used to load=
<br>
&gt; the kernel. Is it possible that the size increase is causing you to go=
<br>
&gt; beyond the address range supposed to be used? E.g. U-Boot loading the<=
br>
&gt; kernel at invalid addresses.<br>
&gt; <br>
&gt; Things like CONFIG_KPROBE_EVENTS=3Dy and CONFIG_UPROBE_EVENTS=3Dy are<=
br>
&gt; relevant because they increase the size of the kernel, possibly pushin=
g<br>
&gt; it to an invalid memory range?<br>
<br>
This is actually a good point. There are two other possible issues:<br>
&nbsp;&nbsp;&nbsp; 1) The kernel and the hypervisor may overlaps each other=
.<br>
&nbsp;&nbsp;&nbsp; 2) The size of the kernel is not correctly provided.<br>
<br>
I remember hitting such issues in the past and they will lead to weird <br>
issues.<br>
<br>
In fact looking at the device-tree provided in the first e-mail, I see:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; module@0 {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compa=
tible =3D &quot;xen,linux-zimage&quot;, <br>
&quot;xen,multiboot-module&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg =
=3D &lt;0x5 0x1000000 0x0 0x2000000&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; };<br>
<br>
However from the pastebin, U-boot will report for the kernel:<br>
<br>
Bytes transferred =3D 37124608 (2367a00 hex)<br>
<br>
So, if I am not mistaken, the region in the DT is smaller than the <br>
kernel itself. The Image header doesn't provide the binary size, so Xen <br=
>
can't do any sanity check.<br>
<br>
In this case, we would copy a truncated kernel. Can you change in the <br>
size in the DT and give another try?<br>
<br>
<br>
If you haven't one yet, I would highly recommend to have script (either <br=
>
a U-boot one or outside) that will generate the correct DT for a given <br>
kernel, xen, initramfs. We have some example scripts on the wiki for <br>
either solution.<br>
<br>
&gt; <br>
&gt; You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change=
<br>
&gt; from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all=
<br>
&gt; work the same.<br>
&gt; <br>
&gt; Looking at the boot logs on pastebin I noticed that Xen is not loaded =
at<br>
&gt; a 2MB aligned address. I recommend you change Xen loading address to<b=
r>
&gt; 0x500200000. And the kernel loading address to 0x500400000.<br>
<br>
I am curious to know why you recommend to load at 2MB aligned address. <br>
The Image protocol doesn't require to load a 2MB aligned address. In <br>
fact, we add issue on Juno because the bootloader would load Xen at a <br>
4KB address. UEFI will also load at a 4KB align address.<br>
<br>
Cheers,<br>
<br>
-- <br>
Julien Grall<br>
</div>
</span></font></div>
</body>
</html>

--_000_PA4PR03MB713676499C1F10655C0ACF4AE3E49PA4PR03MB7136eurp_--


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 13:56:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 13:56:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159758.293779 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ZBb-0008Lm-Dj; Thu, 22 Jul 2021 13:56:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159758.293779; Thu, 22 Jul 2021 13:56:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ZBb-0008Lf-Ah; Thu, 22 Jul 2021 13:56:27 +0000
Received: by outflank-mailman (input) for mailman id 159758;
 Thu, 22 Jul 2021 13:56:26 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6ZBa-0008GP-8i
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 13:56:26 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6ZBV-0008M6-D8; Thu, 22 Jul 2021 13:56:21 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6ZBV-0003Ni-6s; Thu, 22 Jul 2021 13:56:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=q/d5xyMhvQ+IJFO4x3/BmEipbNSLjCuyrL8bc42tePA=; b=WJTazslFfkXjuHXB9+orQvXf14
	I5i3c8PVrUxvhjHaQFp2rYIvTlH6SaiZ5q+9ikxWXIJULukqb/kYgyuwz3RsBehd2ozguGHL59zmi
	Fquj/kFNw49v2TJlc5Adglql0upmQkJSDMpJtUEGAtPWX+WeqjTHq/cwUEZm3PtaVBQI=;
Subject: Re: [PATCH v4 1/3] arm,smmu: switch to using iommu_fwspec functions
To: Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org
Cc: Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
References: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>
 <20210716235939.9585-1-sstabellini@kernel.org>
From: Julien Grall <julien@xen.org>
Message-ID: <267ed58b-a63c-3ef4-b244-bab9e2e7f95e@xen.org>
Date: Thu, 22 Jul 2021 14:56:18 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210716235939.9585-1-sstabellini@kernel.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 17/07/2021 00:59, Stefano Stabellini wrote:
> diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
> index 999b831d90..911f82a561 100644
> --- a/xen/drivers/passthrough/device_tree.c
> +++ b/xen/drivers/passthrough/device_tree.c
> @@ -140,8 +140,12 @@ int iommu_add_dt_device(struct dt_device_node *np)
>       if ( !ops )
>           return -EINVAL;
>   
> +    /*
> +     * Device already added. It can happen when both iommus and
> +     * mmu-masters are present.
> +     */

This is common code. So I would suggest to write a generic comment to 
avoid any misunderstanding. The one added just after the call in 
iommu_do_domctl() would seem more suitable.

>       if ( dev_iommu_fwspec_get(dev) )
> -        return -EEXIST;
> +        return 0;
There are a few things to mention here:

  1) The change is not explained in the commit message
  2) One of the caller was checking -EEXIST. As you dropped the only 
place where -EEXIST should be returned, can you drop the check in the 
caller?

Ideally this should be in a separate patch because this change is not 
entirely related to this patch.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 13:59:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 13:59:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159764.293791 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ZEb-0000a1-UI; Thu, 22 Jul 2021 13:59:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159764.293791; Thu, 22 Jul 2021 13:59:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ZEb-0000Zm-QJ; Thu, 22 Jul 2021 13:59:33 +0000
Received: by outflank-mailman (input) for mailman id 159764;
 Thu, 22 Jul 2021 13:59:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6ZEa-0000ZQ-Gc
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 13:59:32 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6ZEZ-0008Pe-46; Thu, 22 Jul 2021 13:59:31 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6ZEY-0003Vw-Uc; Thu, 22 Jul 2021 13:59:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=cKqQtA8qiY2P02JIQvdO9Q9CSjFiZ09trP7WWjxzzLw=; b=GR4y1E5P8Yxad/m4atBiXqf5n1
	O4YDiD+DSbNqodOW+/Ppa//3IXVj62WGmP+pevXFw2CFaJhYuJgnw3jmUM3pw3FxnzMdckD+I90cZ
	8wVSisbHCdj/+N3ydFSaiz1aCvgkAa638XHephY2/9YX2eCVRqFW4FXAQ+iA0RuW6A1E=;
Subject: Re: [PATCH v4 3/3] arm,smmu: add support for generic DT bindings.
 Implement add_device and dt_xlate.
To: Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org
Cc: Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
References: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s>
 <20210716235939.9585-3-sstabellini@kernel.org>
From: Julien Grall <julien@xen.org>
Message-ID: <ffdb7819-ac55-2438-e561-4208e81740d4@xen.org>
Date: Thu, 22 Jul 2021 14:59:29 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210716235939.9585-3-sstabellini@kernel.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 17/07/2021 00:59, Stefano Stabellini wrote:
> From: Brian Woods <brian.woods@xilinx.com>
> 
> For the legacy path, arm_smmu_dt_add_device_legacy is called by
> register_smmu_master scanning mmu-masters (a fwspec entry is also
> created.) For the generic path, arm_smmu_dt_add_device_generic gets
> called instead. Then, arm_smmu_dt_add_device_generic calls
> arm_smmu_dt_add_device_legacy afterwards, shared with the legacy path.
> This way most of the low level implementation is shared between the two
> paths.
> 
> If both legacy bindings and generic bindings are present in device tree,
> the legacy bindings are the ones that are used. That's because
> mmu-masters is parsed by
> xen/drivers/passthrough/arm/smmu.c:arm_smmu_device_dt_probe which is
> called by arm_smmu_dt_init. It happens very early. iommus is parsed by
> xen/drivers/passthrough/device_tree.c:iommu_add_dt_device which is
> called by xen/arch/arm/domain_build.c:handle_device and happens
> afterwards.
> 
> arm_smmu_dt_xlate_generic is a verbatim copy from Linux
> (drivers/iommu/arm/arm-smmu/arm-smmu.c:arm_smmu_of_xlate, version
> v5.10).
> 
> A workaround was introduced by cf4af9d6d6c (xen/arm: boot with device
> trees with "mmu-masters" and "iommus") because the SMMU driver only
> supported the legacy bindings. Remove it now.
> 
> Signed-off-by: Brian Woods <brian.woods@xilinx.com>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> Reviewed-by: Rahul Singh <rahul.singh@arm.com>

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

> ---
> Changes in v4:
> - improve indentation
> - improve commit message
> ---
>   xen/drivers/passthrough/arm/smmu.c    | 40 ++++++++++++++++++++++++++-
>   xen/drivers/passthrough/device_tree.c | 17 +-----------
>   2 files changed, 40 insertions(+), 17 deletions(-)
> 
> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
> index 252e8c1680..a065ba3f4e 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -255,6 +255,8 @@ struct iommu_group
>   	atomic_t ref;
>   };
>   
> +static struct arm_smmu_device *find_smmu(const struct device *dev);
> +
>   static struct iommu_group *iommu_group_alloc(void)
>   {
>   	struct iommu_group *group = xzalloc(struct iommu_group);
> @@ -443,6 +445,8 @@ static struct iommu_group *iommu_group_get(struct device *dev)
>   #define SMR_VALID			(1U << 31)
>   #define SMR_MASK_SHIFT			16
>   #define SMR_ID_SHIFT			0
> +#define SMR_ID_MASK			0x7fff
> +#define SMR_MASK_MASK			0x7fff
>   
>   #define ARM_SMMU_GR0_S2CR(n)		(0xc00 + ((n) << 2))
>   #define S2CR_CBNDX_SHIFT		0
> @@ -871,6 +875,38 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
>   					     fwspec);
>   }
>   
> +static int arm_smmu_dt_add_device_generic(u8 devfn, struct device *dev)
> +{
> +	struct arm_smmu_device *smmu;
> +	struct iommu_fwspec *fwspec;
> +
> +	fwspec = dev_iommu_fwspec_get(dev);
> +	if (fwspec == NULL)
> +		return -ENXIO;
> +
> +	smmu = find_smmu(fwspec->iommu_dev);
> +	if (smmu == NULL)
> +		return -ENXIO;
> +
> +	return arm_smmu_dt_add_device_legacy(smmu, dev, fwspec);
> +}
> +
> +static int arm_smmu_dt_xlate_generic(struct device *dev,
> +				    const struct dt_phandle_args *spec)
> +{
> +	uint32_t mask, fwid = 0;
> +
> +	if (spec->args_count > 0)
> +		fwid |= (SMR_ID_MASK & spec->args[0]) << SMR_ID_SHIFT;
> +
> +	if (spec->args_count > 1)
> +		fwid |= (SMR_MASK_MASK & spec->args[1]) << SMR_MASK_SHIFT;
> +	else if (!of_property_read_u32(spec->np, "stream-match-mask", &mask))
> +		fwid |= (SMR_MASK_MASK & mask) << SMR_MASK_SHIFT;
> +
> +	return iommu_fwspec_add_ids(dev, &fwid, 1);
> +}
> +
>   static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
>   {
>   	struct arm_smmu_device *smmu;
> @@ -2835,6 +2871,7 @@ static void arm_smmu_iommu_domain_teardown(struct domain *d)
>   static const struct iommu_ops arm_smmu_iommu_ops = {
>       .init = arm_smmu_iommu_domain_init,
>       .hwdom_init = arm_smmu_iommu_hwdom_init,
> +    .add_device = arm_smmu_dt_add_device_generic,
>       .teardown = arm_smmu_iommu_domain_teardown,
>       .iotlb_flush = arm_smmu_iotlb_flush,
>       .iotlb_flush_all = arm_smmu_iotlb_flush_all,
> @@ -2842,9 +2879,10 @@ static const struct iommu_ops arm_smmu_iommu_ops = {
>       .reassign_device = arm_smmu_reassign_dev,
>       .map_page = arm_iommu_map_page,
>       .unmap_page = arm_iommu_unmap_page,
> +    .dt_xlate = arm_smmu_dt_xlate_generic,
>   };
>   
> -static __init const struct arm_smmu_device *find_smmu(const struct device *dev)
> +static struct arm_smmu_device *find_smmu(const struct device *dev)
>   {
>   	struct arm_smmu_device *smmu;
>   	bool found = false;
> diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
> index 911f82a561..af6c2b2dfe 100644
> --- a/xen/drivers/passthrough/device_tree.c
> +++ b/xen/drivers/passthrough/device_tree.c
> @@ -159,22 +159,7 @@ int iommu_add_dt_device(struct dt_device_node *np)
>            * these callback implemented.
>            */
>           if ( !ops->add_device || !ops->dt_xlate )
> -        {
> -            /*
> -             * Some Device Trees may expose both legacy SMMU and generic
> -             * IOMMU bindings together. However, the SMMU driver is only
> -             * supporting the former and will protect them during the
> -             * initialization. So we need to skip them and not return
> -             * error here.
> -             *
> -             * XXX: This can be dropped when the SMMU is able to deal
> -             * with generic bindings.
> -             */
> -            if ( dt_device_is_protected(np) )
> -                return 0;
> -            else
> -                return -EINVAL;
> -        }
> +            return -EINVAL;
>   
>           if ( !dt_device_is_available(iommu_spec.np) )
>               break;
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 14:12:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 14:12:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159771.293803 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ZRI-00039c-3M; Thu, 22 Jul 2021 14:12:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159771.293803; Thu, 22 Jul 2021 14:12:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ZRI-00039V-0H; Thu, 22 Jul 2021 14:12:40 +0000
Received: by outflank-mailman (input) for mailman id 159771;
 Thu, 22 Jul 2021 14:12:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=8bcJ=MO=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m6ZRG-00039P-9X
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 14:12:38 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 854f3583-b2ef-4923-a9de-b0f28f81a661;
 Thu, 22 Jul 2021 14:12:36 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 854f3583-b2ef-4923-a9de-b0f28f81a661
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1626963156;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=8i7/RhkbG8i8iGp6/KXzouNQ7fz0VX8u4ti+O4wZlS4=;
  b=THRKi+5vh0YPAZO0uqKFZUdGYLcLmQGdqHdfjmC4cR6bvHxhE3q1r4Ee
   aElzz4qNxoyeNXxzZzCYACrYJnu6cJ+nHIti7wcrulRJlo2E0BvHAbVcP
   4dD4ml5hk7eckG8LaV9SZgyDtC+8omwkVGyM9SSy/oZ+wfWIlbeZm0Sd/
   M=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: qHqLuLlUgp0+8rWtYRb4/O0NLQm2IPo3X3SUfZZywG69bIXv8WdNxCyEk6tgIB/9pHIaAGDwLW
 BjL0W8/QVRWq3CpS8VJDOs3K+pGFwe7um29+eatlsO+awU2AMxZgco8vnjGEqUyKrsA29Hb+41
 YNe68X8paXCR3K/iiGHvmGCtBzY2iSXM91c/lAO8vbg1cy4qbiJPZ7micr2U/YuOc7D9snlMy1
 d0KiFnSYrldzzB37pi7BUNPE8fJNpcTevGxQ5QB+g9bvtKTkwXcE3rVmE+ZlGSyUjJjLUqy//0
 pygq9I83akLGFBZ2tdw00U+A
X-SBRS: 5.1
X-MesageID: 48909183
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:at/y260s0v0WudClQp2tKwqjBLAkLtp133Aq2lEZdPRUGvb4qy
 mLpoV96faUskd0ZJhOo7y90cW7Lk80sKQFh7X5Xo3SOTUO2lHYT72KhLGKq1aLdhEWtNQtt5
 uIG5IOceEYZmIbsS+V2meFL+o=
X-IronPort-AV: E=Sophos;i="5.84,261,1620705600"; 
   d="scan'208";a="48909183"
Date: Thu, 22 Jul 2021 15:12:33 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Jason Andryuk <jandryuk@gmail.com>
CC: <pbonzini@redhat.com>, <qemu-devel@nongnu.org>,
	<xen-devel@lists.xenproject.org>
Subject: Re: [PATCH] vl: Parse legacy default_machine_opts
Message-ID: <YPl80YnsDpLI8gtN@perard>
References: <CAKf6xps07sbk7MnehPTKes52sst0UyaHiHjjSdEX0bFjT+E_ag@mail.gmail.com>
 <20210713021552.19110-1-jandryuk@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210713021552.19110-1-jandryuk@gmail.com>

On Mon, Jul 12, 2021 at 10:15:52PM -0400, Jason Andryuk wrote:
> qemu can't start a xen vm after commit d8fb7d0969d5
> "vl: switch -M parsing to keyval" with:
> 
> $ ./qemu-system-i386 -M xenfv
> Unexpected error in object_property_find_err() at ../qom/object.c:1298:
> qemu-system-i386: Property 'xenfv-3.1-machine.accel' not found
> Aborted (core dumped)
> 
> The default_machine_opts handling doesn't process the legacy machine
> options like "accel".  Call qemu_apply_legacy_machine_options to provide
> the legacy handling.
> 
> Signed-off-by: Jason Andryuk <jandryuk@gmail.com>

Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>

I can't find a different way to set a default "accelerator" to a
machine, so this patch seems necessary.

Thanks,

> ---
>  softmmu/vl.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 4df1496101..f4d8630fc6 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -2126,6 +2126,7 @@ static void qemu_create_machine(QDict *qdict)
>          QDict *default_opts =
>              keyval_parse(machine_class->default_machine_opts, NULL, NULL,
>                           &error_abort);
> +        qemu_apply_legacy_machine_options(default_opts);
>          object_set_properties_from_keyval(OBJECT(current_machine), default_opts,
>                                            false, &error_abort);
>          qobject_unref(default_opts);

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 14:40:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 14:40:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159777.293815 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Zrh-0006Rt-A1; Thu, 22 Jul 2021 14:39:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159777.293815; Thu, 22 Jul 2021 14:39:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6Zrh-0006Rm-6h; Thu, 22 Jul 2021 14:39:57 +0000
Received: by outflank-mailman (input) for mailman id 159777;
 Thu, 22 Jul 2021 14:39:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=o0YX=MO=redhat.com=pbonzini@srs-us1.protection.inumbo.net>)
 id 1m6Zrg-0006Rg-Ie
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 14:39:56 +0000
Received: from us-smtp-delivery-124.mimecast.com (unknown [170.10.133.124])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id db36ad5d-1cfe-4223-b02a-708d7846a59d;
 Thu, 22 Jul 2021 14:39:55 +0000 (UTC)
Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com
 [209.85.208.72]) (Using TLS) by relay.mimecast.com with ESMTP id
 us-mta-258-VzxSYzibOVqmhsRiWiqfQQ-1; Thu, 22 Jul 2021 10:39:54 -0400
Received: by mail-ed1-f72.google.com with SMTP id
 ee46-20020a056402292eb02903a1187e547cso2892343edb.0
 for <xen-devel@lists.xenproject.org>; Thu, 22 Jul 2021 07:39:54 -0700 (PDT)
Received: from ?IPv6:2001:b07:6468:f312:c8dd:75d4:99ab:290a?
 ([2001:b07:6468:f312:c8dd:75d4:99ab:290a])
 by smtp.gmail.com with ESMTPSA id y11sm9574659ejr.14.2021.07.22.07.39.51
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 22 Jul 2021 07:39:52 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: db36ad5d-1cfe-4223-b02a-708d7846a59d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1626964795;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=cqQ6xN3WrK5HyDDkUWHeq6CnrRxEF9ZrWlGfcVc0UGs=;
	b=Uyf4RRjSUzDEsRLJ2Iu1EEr7aNoeiu7kyOi7KDB2ifwVwBeyRqrmeNLCG4pf9sKVCcrK8D
	LMdBwCKn4UMDzQAwhkOQyPIsPuXWqOS18SDTuJR+JmauCQd45gmQ+z4Fh3RDR0BgNPp7wu
	SL42jRKxsNwFGSQhhw3CpOLs669k7/8=
X-MC-Unique: VzxSYzibOVqmhsRiWiqfQQ-1
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=cqQ6xN3WrK5HyDDkUWHeq6CnrRxEF9ZrWlGfcVc0UGs=;
        b=pBaRjF4dPyDrmq+zaDbSKOM/wCPP2N3XdVno1BhX2F3qxKEyQNE+GygxDPNd/Os42G
         fP6+wN1S+YNtXSnDb7XDXHWRyGaguXPGEdy4PqM13xT9bAlAm5mizQ3IIYcSfgBEBsTI
         50bp1/1+DcdtxYuU8vPwSSbgQZ9qxO/WPtF8Xt+J/X6JO45R/uPflcgLJm4J29eg0A5W
         qSSNHrfhN3Eorx3AFT9TOHTrVhgpr2MTOpSx/RL7pYPlFjWrQSuSe2Ian8MrYr5gAqvA
         XxJ3UF7DAsY7Dqo1QBlAY7th7f019vKZ2OPSfjnp9RdO0kbjYyLgxKOHPLf5JWBiHUTQ
         lMLw==
X-Gm-Message-State: AOAM530Ct6yHDOaaWDFCQL0xuxIwx4pa4CxCxuPYyyhSZMQ0FpbY6Zj0
	4xv9SU/2O0a12HM96vJunfyPSu3YZwXdLK0+8VCpYNWUYZJwIc8ThD0td80I6Chh+dRS3YvAnTN
	QKZ8jkIyZVWLg+sJGiUfG2iUtLsUp3KzAjRSuIzTbJk77WLpkIB+OA3Zyza2o66YEBUCNvdCmRP
	rb/GA=
X-Received: by 2002:a17:906:63ca:: with SMTP id u10mr194557ejk.411.1626964792870;
        Thu, 22 Jul 2021 07:39:52 -0700 (PDT)
X-Google-Smtp-Source: ABdhPJyv1FDFnJyJh3QY4FeAo6zw+kkyVNlrl6aHdi1VelxkTVLPGdsZcVwrfhNr8p3jw/nEkSjnKA==
X-Received: by 2002:a17:906:63ca:: with SMTP id u10mr194541ejk.411.1626964792691;
        Thu, 22 Jul 2021 07:39:52 -0700 (PDT)
Subject: Re: [PATCH] vl: Parse legacy default_machine_opts
To: Anthony PERARD <anthony.perard@citrix.com>,
 Jason Andryuk <jandryuk@gmail.com>
Cc: qemu-devel@nongnu.org, xen-devel@lists.xenproject.org
References: <CAKf6xps07sbk7MnehPTKes52sst0UyaHiHjjSdEX0bFjT+E_ag@mail.gmail.com>
 <20210713021552.19110-1-jandryuk@gmail.com> <YPl80YnsDpLI8gtN@perard>
From: Paolo Bonzini <pbonzini@redhat.com>
Message-ID: <2f532fad-9c74-04b5-58c7-5f9d5464340e@redhat.com>
Date: Thu, 22 Jul 2021 16:39:51 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <YPl80YnsDpLI8gtN@perard>
Authentication-Results: relay.mimecast.com;
	auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pbonzini@redhat.com
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 22/07/21 16:12, Anthony PERARD via wrote:
> Reviewed-by: Anthony PERARD<anthony.perard@citrix.com>
> 
> I can't find a different way to set a default "accelerator" to a
> machine, so this patch seems necessary.

I agree, and I'll be sending a pull request shortly.

Paolo



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 14:52:54 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 14:52:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159783.293826 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6a43-0000W3-Eh; Thu, 22 Jul 2021 14:52:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159783.293826; Thu, 22 Jul 2021 14:52:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6a43-0000Vw-Bk; Thu, 22 Jul 2021 14:52:43 +0000
Received: by outflank-mailman (input) for mailman id 159783;
 Thu, 22 Jul 2021 14:52:42 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6a42-0000Vm-MK; Thu, 22 Jul 2021 14:52:42 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6a42-0000nX-FQ; Thu, 22 Jul 2021 14:52:42 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6a42-0001xk-4x; Thu, 22 Jul 2021 14:52:42 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6a42-0008Si-4T; Thu, 22 Jul 2021 14:52:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=t0JGV6yDbYSG8wM2IUUZ4eZ3xUlTXiGYKJ9oJk+ou2k=; b=7B5e2MQsR1R1FvSr0EfQ9pM61A
	/jTs/IhhRfU+SlvEyKD7Z4nG1Hrvm/XHzTd0GHEZnqsslzZfW2H1GnN8yRV7E2w/3x7ImxjxX7Eae
	FP+pO8Jl1IJiHadgytQoUGF1DYcZlYiAQwe3FRiB6nnXF5Wzdm/ttmXrvq3MlCf1hPgY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163888-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163888: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:heisenbug
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start.2:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 14:52:42 +0000

flight 163888 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163888/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-rtds 20 guest-localmigrate/x10 fail in 163877 pass in 163888
 test-amd64-amd64-examine      4 memdisk-try-append         fail pass in 163877
 test-armhf-armhf-xl-rtds     19 guest-start.2              fail pass in 163877

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

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163888  2021-07-22 01:51:44 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 16:15:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 16:15:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159797.293856 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6bLb-0002RB-Oj; Thu, 22 Jul 2021 16:14:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159797.293856; Thu, 22 Jul 2021 16:14:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6bLb-0002R4-Lm; Thu, 22 Jul 2021 16:14:55 +0000
Received: by outflank-mailman (input) for mailman id 159797;
 Thu, 22 Jul 2021 16:14:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=BaDu=MO=aepfle.de=olaf@srs-us1.protection.inumbo.net>)
 id 1m6bLa-0002Qy-J4
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 16:14:55 +0000
Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.23])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5675333b-ecf3-43c9-85fc-148ef6d04799;
 Thu, 22 Jul 2021 16:14:52 +0000 (UTC)
Received: from sender by smtp.strato.de (RZmta 47.28.1 AUTH)
 with ESMTPSA id t06ddcx6MGEoY3Y
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))
 (Client did not present a certificate);
 Thu, 22 Jul 2021 18:14:50 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5675333b-ecf3-43c9-85fc-148ef6d04799
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1626970490;
    s=strato-dkim-0002; d=aepfle.de;
    h=References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Cc:Date:
    From:Subject:Sender;
    bh=T8dYJbteQPNpDGLd8a/nQ3UzPtcOM6/ECCoHc+vSoAM=;
    b=iRIbEh5Hmnif3dcoeV7u3l6gCxIRG+wthQw44J3h0H1NEvcPcFOBEoF7ZXfVtcq/XF
    et7/X3y/dXXk0JIkhXTCMBxMBopwIja0R/I5CDqklnEQpAUGV0udmFgGebigRO2DKe7k
    jDvgf+nBuj+0MY3zSWpXnX7zS4PhxKmjOP83b48oUw1yZ1j5cC4n+ZuIjHU8cdAWEGy7
    8zNV9BiCdUSHt7fpVkoSub76Di/+gvWdI1mpKcL1KDeAFI1hFapeef8WMRfcbUZzyZe2
    1gw3ABgjAtlPYxR1IIEitWWwNOTJXaLZflr0dlDCduEvXrBq3WGnzEF60T1cZZUPt7cc
    y0bg==
Authentication-Results: strato.com;
    dkim=none
X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QLpd5ylWvMDX3y/OuD5rXVisF9UB6Hb03sYAkI/fzmsP3Z1g5sbWs9qexZScQL"
X-RZG-CLASS-ID: mo00
Date: Thu, 22 Jul 2021 18:14:33 +0200
From: Olaf Hering <olaf@aepfle.de>
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 <xen-devel@lists.xenproject.org>, Doug Goldstein <cardoe@cardoe.com>
Subject: Re: [PATCH v1] automation: collect log files in subdirectories
Message-ID: <20210722181433.2a1477e1.olaf@aepfle.de>
In-Reply-To: <YPbuo/JfpPNGjq2p@perard>
References: <20210708065435.24515-1-olaf@aepfle.de>
	<e84e3fd4-5439-4e15-e363-35c70fa8cad9@citrix.com>
	<20210714093104.52f25e70.olaf@aepfle.de>
	<YPGXm9F3OHqLk/ml@perard>
	<20210716164131.56a7b539.olaf@aepfle.de>
	<YPbuo/JfpPNGjq2p@perard>
X-Mailer: Claws Mail 2021.07.08 (GTK+ 2.24.32; x86_64-suse-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="Sig_/hVQxrZfRruDhjgINKbG8rZ_";
 protocol="application/pgp-signature"; micalg=pgp-sha256

--Sig_/hVQxrZfRruDhjgINKbG8rZ_
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

Am Tue, 20 Jul 2021 16:41:23 +0100
schrieb Anthony PERARD <anthony.perard@citrix.com>:

> Anyway Olaf, I've deleted the repo, feel free to try again, or let me
> now if you want me to set things up.

I'm sure if I create a fresh repo 'xen.git' in a "group" 'olafhering', I wi=
ll be unable to push there because it is empty.
Not sure if I can force-push in case I choose to populate it with just a RE=
ADME and or License file, just to get some initial branch.

But I can try once more and see if I can let gitlab populate it from an exi=
sting repo, such as the main xen.git.


Olaf

--Sig_/hVQxrZfRruDhjgINKbG8rZ_
Content-Type: application/pgp-signature
Content-Description: Digitale Signatur von OpenPGP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE97o7Um30LT3B+5b/86SN7mm1DoAFAmD5mWkACgkQ86SN7mm1
DoCF9A/+MLIylQpks1TaC6hUDY1bOfSiuukBjFchMypk4B3nsoaPscCX8ok4FQ9m
IoV7dykO6qc4RrQz+MC8ANPlQ1LPa5KB3Z4eu75gAHlvmmlSHGIMoJKLgZpR9a/l
0PO0DBiKaux9OFcA///ew9kHnFQbMLJY2fcibjdbus1HHbZ7CVhw6xaXHaeoxqJ4
iip8ExlDX4LdDyTiBQBvESyCNU1qmPng2yr+ZOfhWTYDz+4mM5HO5Q9G8e5czknm
UTTRDkxVGeM0KfxH+3xngT0HWoEewQyUtcBvx4wLagK3rYEEkQQRmp3kfx6s/QkM
6zNZJb1n/Q+yFPizG12qyuCtS7TDThbeiJQa8HeNG6r+bYrKByzGWqoBc5CYeJAL
YAV4dRkJkAtHjbUB3OQ/PLfWhYypQSis+hZZKMHhAydxIKcGpZQ6D/nraVpNHiDN
ryBCLmvkC1ukN+bEcXBGoAOXohUFQMiiWGgQchQZQSl+2Th/ItKJ8ldin8Y1Gqy6
De08GKQKLsVA4QOhrA8jJNNskVIcjpY/B3vXR3u9P3GnTAbpfNwqh9zQONve27a+
mD3rch1tz5mnQ2HMfgs5qZ1Il53uGTJaMQtc5MEGruIphE96bXM8M+MlhkbiR1W1
Wc9P9fKYECfxBg+C+dD+u+4b2Y4D13emu3F7ZySGK5EnPrzTfWE=
=CMTQ
-----END PGP SIGNATURE-----

--Sig_/hVQxrZfRruDhjgINKbG8rZ_--


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 16:37:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 16:37:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159804.293872 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6bgr-0005eP-G7; Thu, 22 Jul 2021 16:36:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159804.293872; Thu, 22 Jul 2021 16:36:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6bgr-0005eI-CX; Thu, 22 Jul 2021 16:36:53 +0000
Received: by outflank-mailman (input) for mailman id 159804;
 Thu, 22 Jul 2021 16:36:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6bgq-0005e8-Pb; Thu, 22 Jul 2021 16:36:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6bgq-0002oc-HV; Thu, 22 Jul 2021 16:36:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6bgq-0004Xu-78; Thu, 22 Jul 2021 16:36:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6bgq-0003PY-6b; Thu, 22 Jul 2021 16:36:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tH7cWJRRQeJ3GaENazL0YTDaSqumOZd9MFCN9uW7oFk=; b=K9U4a29gmRPC1CPTM7b2lfgZ80
	QMYABWheHrKIDISmjI/FWDoE5U3tT4z1+uRTApb/sLeCpMFHa7u2yiAwXaNcOjFQLY/BKAoUM0u1c
	C9JI3HpCbhEe/IQ+KLsCyRIcpjrkI4SWjng6slN7wz72rTyJ/8Xj1zNgwEO/ur5KD8k4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163890-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163890: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=e77c8b8b8e933414ef07dbed04e02973fccffeb0
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 16:36:52 +0000

flight 163890 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163890/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                e77c8b8b8e933414ef07dbed04e02973fccffeb0
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   16 days
Failing since        163327  2021-07-06 12:39:04 Z   16 days   28 attempts
Testing same since   163880  2021-07-21 18:08:23 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Snow <jsnow@redhat.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  Yang Zhong <yang.zhong@intel.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 11842 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 16:55:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 16:55:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159811.293887 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6byR-0008Ey-3z; Thu, 22 Jul 2021 16:55:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159811.293887; Thu, 22 Jul 2021 16:55:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6byQ-0008Er-W1; Thu, 22 Jul 2021 16:55:02 +0000
Received: by outflank-mailman (input) for mailman id 159811;
 Thu, 22 Jul 2021 16:55:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=Mx4v=MO=gmail.com=scottwd@srs-us1.protection.inumbo.net>)
 id 1m6byP-0008Ek-G8
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 16:55:01 +0000
Received: from mail-qk1-x736.google.com (unknown [2607:f8b0:4864:20::736])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ecf09604-334f-4aa6-8f22-cabbf0ae051d;
 Thu, 22 Jul 2021 16:55:00 +0000 (UTC)
Received: by mail-qk1-x736.google.com with SMTP id q190so6049371qkd.2
 for <xen-devel@lists.xenproject.org>; Thu, 22 Jul 2021 09:55:00 -0700 (PDT)
Received: from lagunitas.localdomain
 (96-95-26-25-static.hfc.comcastbusiness.net. [96.95.26.25])
 by smtp.gmail.com with ESMTPSA id m17sm9516628qtu.34.2021.07.22.09.54.58
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 22 Jul 2021 09:54:58 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ecf09604-334f-4aa6-8f22-cabbf0ae051d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=+qtGke1okL2AN40/XGbkf4rzyvqwtoLs9lmPunYPJOw=;
        b=j6j5S1fb8jIJKJayLyHo0v1bQID9Ns883Mqrsb9L/aN5FM6NrtTxwkDP+Y//GHBYpI
         jgsbgFA/y8uSy0W7uWlLzQraRz+3SPZwVhkYdssE6Ie7jpwaqzH7g+MUESbQmjBRHP5S
         IglyEsSKFCgZrUvYfyuYeD7iEMH5+2tKxnrPS8joW+v8WQDcozO7EDb7KRd6ni9H9ydD
         c3HR7TsqNNQXT//qC4Y3cHokSNrOfEj5QzzWqyZ/5CYMbtfBJGc6cvy3C1rDNHErLktQ
         xJKQUZb0FQwPAslOAtBM1LGz1Qy16lW/jKmrRM/I+bUXK89HsbyOh3IyEXHql8PPzvGF
         VQwg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=+qtGke1okL2AN40/XGbkf4rzyvqwtoLs9lmPunYPJOw=;
        b=ClDTFIpceqInrw24zI2KsOpY/1rN0/AISnOF+lKeohtXHaneju1+Lf6M5IY8jYStRR
         5/rL8xG7nXBk8434Nb6qu1vRHhixJX3fqEAmbCM60brRdAzO4w1Ov5XRYHd2RPq2Lei2
         Uf4Qx2poal6r2D5lq8GmUyeY5wa7V6JXh1x3+XmyeArOcteQTmKo7pdC08OTI7UDrfOy
         zj0D/H78xnzm5drshvUoAZX8u5cGT/EqnOoAl5WxgP1Sj7PYHP6bi4GgTNgr+LFD0hdY
         hNj1IsUxAKo+MPgVU5z+g9zxIlFZg2/Yoln7VNh0CsbUAx+y4r5EwBdy1MaokGXHGGBq
         GJtg==
X-Gm-Message-State: AOAM531a2WwszBb/PMdKypizKr8+3sfY+nspwqOFl1E0/XyWeGnnhcXI
	aola7ndfBVBHvF6L7HdXjp4UBpPhb+nOWk3G
X-Google-Smtp-Source: ABdhPJxrnDIadPzesUIiXOaz71PDimOKJSD62kS4TL3XcEjfT4ri277Wg19Bxwl+c1rPhS8GziUdJQ==
X-Received: by 2002:a37:641:: with SMTP id 62mr602952qkg.149.1626972899550;
        Thu, 22 Jul 2021 09:54:59 -0700 (PDT)
From: Scott Davis <scottwd@gmail.com>
X-Google-Original-From: Scott Davis <scott.davis@starlab.io>
To: xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	Jason Andryuk <jandryuk@gmail.com>
Subject: [XEN PATCH v2] tools/xl: Add stubdomain_cmdline option to xl.cfg
Date: Thu, 22 Jul 2021 12:54:30 -0400
Message-Id: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This adds an option to the xl domain configuration file syntax for specifying
a kernel command line for device-model stubdomains. It is intended for use with
Linux-based stubdomains.

Signed-off-by: Scott Davis <scott.davis@starlab.io>
Reviewed-by: Jason Andryuk <jandryuk@gmail.com>
---
Changes in v2:
- add #define LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN
- correct wording in xl.cfg documentation from "Append" to "Set"
---
 docs/man/xl.cfg.5.pod.in             |  4 ++++
 tools/golang/xenlight/helpers.gen.go |  3 +++
 tools/golang/xenlight/types.gen.go   |  1 +
 tools/include/libxl.h                | 12 ++++++++++++
 tools/libs/light/libxl_dm.c          |  1 +
 tools/libs/light/libxl_types.idl     |  1 +
 tools/xl/xl_parse.c                  |  2 ++
 7 files changed, 24 insertions(+)

diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
index 56370a37db..d6f96e5310 100644
--- a/docs/man/xl.cfg.5.pod.in
+++ b/docs/man/xl.cfg.5.pod.in
@@ -2742,6 +2742,10 @@ In case of B<qemu-xen-traditional> it is expected to be MiniOS-based stubdomain
 image, in case of B<qemu-xen> it is expected to be Linux-based stubdomain
 kernel.
 
+=item B<stubdomain_cmdline="STRING">
+
+Set the device-model stubdomain kernel command line to B<STRING>.
+
 =item B<stubdomain_ramdisk="PATH">
 
 Override the path to the ramdisk image used as device-model stubdomain.
diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
index db82537b42..bfc1e7f312 100644
--- a/tools/golang/xenlight/helpers.gen.go
+++ b/tools/golang/xenlight/helpers.gen.go
@@ -1018,6 +1018,7 @@ return fmt.Errorf("converting field DeviceModelStubdomain: %v", err)
 }
 x.StubdomainMemkb = uint64(xc.stubdomain_memkb)
 x.StubdomainKernel = C.GoString(xc.stubdomain_kernel)
+x.StubdomainCmdline = C.GoString(xc.stubdomain_cmdline)
 x.StubdomainRamdisk = C.GoString(xc.stubdomain_ramdisk)
 x.DeviceModel = C.GoString(xc.device_model)
 x.DeviceModelSsidref = uint32(xc.device_model_ssidref)
@@ -1344,6 +1345,8 @@ return fmt.Errorf("converting field DeviceModelStubdomain: %v", err)
 xc.stubdomain_memkb = C.uint64_t(x.StubdomainMemkb)
 if x.StubdomainKernel != "" {
 xc.stubdomain_kernel = C.CString(x.StubdomainKernel)}
+if x.StubdomainCmdline != "" {
+xc.stubdomain_cmdline = C.CString(x.StubdomainCmdline)}
 if x.StubdomainRamdisk != "" {
 xc.stubdomain_ramdisk = C.CString(x.StubdomainRamdisk)}
 if x.DeviceModel != "" {
diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
index a214dd9df6..09a3bb67e2 100644
--- a/tools/golang/xenlight/types.gen.go
+++ b/tools/golang/xenlight/types.gen.go
@@ -483,6 +483,7 @@ DeviceModelVersion DeviceModelVersion
 DeviceModelStubdomain Defbool
 StubdomainMemkb uint64
 StubdomainKernel string
+StubdomainCmdline string
 StubdomainRamdisk string
 DeviceModel string
 DeviceModelSsidref uint32
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index ae7fe27c1f..b9ba16d698 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1030,6 +1030,18 @@ typedef struct libxl__ctx libxl_ctx;
  */
 #define LIBXL_HAVE_BUILDINFO_KERNEL 1
 
+/*
+ * LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN
+ *
+ * If this is defined, then the libxl_domain_build_info structure will contain
+ * the following fields that specify options for device model stubdomains:
+ *  - stubdomain_memkb:   integer indicating stubdomain RAM size
+ *  - stubdomain_kernel:  string indicating stubdomain kernel image location
+ *  - stubdomain_cmdline: string of parameters to pass to the stubdomain kernel
+ *  - stubdomain_ramdisk: string indicating stubdomain ramdisk location
+ */
+#define LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN 1
+
 /*
  * LIBXL_HAVE_DEVICE_CHANNEL
  *
diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index dbd3c7f278..2d54596834 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -2373,6 +2373,7 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
     }
 
     stubdom_state->pv_kernel.path = guest_config->b_info.stubdomain_kernel;
+    stubdom_state->pv_cmdline = guest_config->b_info.stubdomain_cmdline;
     stubdom_state->pv_ramdisk.path = guest_config->b_info.stubdomain_ramdisk;
 
     /* fixme: this function can leak the stubdom if it fails */
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index f45adddab0..e782e15cf2 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -523,6 +523,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
     ("device_model_stubdomain", libxl_defbool),
     ("stubdomain_memkb",   MemKB),
     ("stubdomain_kernel",  string),
+    ("stubdomain_cmdline", string),
     ("stubdomain_ramdisk", string),
     # if you set device_model you must set device_model_version too
     ("device_model",     string),
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 9fb0791429..17dddb4cd5 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -2533,6 +2533,8 @@ skip_usbdev:
 
     xlu_cfg_replace_string (config, "stubdomain_kernel",
                             &b_info->stubdomain_kernel, 0);
+    xlu_cfg_replace_string (config, "stubdomain_cmdline",
+                            &b_info->stubdomain_cmdline, 0);
     xlu_cfg_replace_string (config, "stubdomain_ramdisk",
                             &b_info->stubdomain_ramdisk, 0);
     if (!xlu_cfg_get_long (config, "stubdomain_memory", &l, 0))
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 19:08:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 19:08:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159836.293921 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6e3M-0007SF-PR; Thu, 22 Jul 2021 19:08:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159836.293921; Thu, 22 Jul 2021 19:08:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6e3M-0007S8-MP; Thu, 22 Jul 2021 19:08:16 +0000
Received: by outflank-mailman (input) for mailman id 159836;
 Thu, 22 Jul 2021 19:08:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6e3L-0007Ry-Ln; Thu, 22 Jul 2021 19:08:15 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6e3L-00054A-Eb; Thu, 22 Jul 2021 19:08:15 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6e3L-0008H2-2X; Thu, 22 Jul 2021 19:08:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6e3L-00054t-22; Thu, 22 Jul 2021 19:08:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=vjg/zyCH3jYieU0gDZAdditdJG15OfJbjLHbYRMa3Z0=; b=BEpIiYUjjFo2BjhCEfWge7YBft
	TErOfacdnywN7P9JUORnRWBM8FenwqaZ1JcQw/0STvJSWFDn3gRXLIpWfYtxO6e6XWj8GpsCKiSEf
	puYqNWt/pnF06GBJOEuMPoR89SHq5zGuehbYN1jgIZrloAuRnfNLGZIp5p/BWIQ36gbs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163896-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163896: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=3d5895cd351757f69c9a66fb5fc8cf19f454d773
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 19:08:15 +0000

flight 163896 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163896/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                3d5895cd351757f69c9a66fb5fc8cf19f454d773
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  355 days
Failing since        152366  2020-08-01 20:49:34 Z  354 days  606 attempts
Testing same since   163896  2021-07-22 06:29:05 Z    0 days    1 attempts

------------------------------------------------------------
6703 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1978980 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 20:13:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 20:13:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159845.293942 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6f4i-0007It-IE; Thu, 22 Jul 2021 20:13:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159845.293942; Thu, 22 Jul 2021 20:13:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6f4i-0007Im-Ed; Thu, 22 Jul 2021 20:13:44 +0000
Received: by outflank-mailman (input) for mailman id 159845;
 Thu, 22 Jul 2021 20:13:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6f4h-0007Ic-7N; Thu, 22 Jul 2021 20:13:43 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6f4h-00063F-2j; Thu, 22 Jul 2021 20:13:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6f4g-0001lJ-R6; Thu, 22 Jul 2021 20:13:42 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6f4g-0002wy-Qc; Thu, 22 Jul 2021 20:13:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=hGKGdsucL4CRsGKPYcB2uG3UuG+Lvq0ItAt3NaHhPq0=; b=G1UP0EmyoPoXd7pSwumoJ8Z9vm
	QvCDYCgiHA5B/nzehfx11VU8LGwAQQEqYbIN49STU9G7LjgqHGt16NJdoXxxe94MTljRSX7ybAtdu
	Yb/jtc5AvhOcw/w9t+aWSfUcvMF47+4+XmJi820sqcqc81yigqITnjp4rIuYfk6CLp9A=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163907-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163907: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=2f5ad3f451031749f6dabf53960ab5ec18e3e843
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 20:13:42 +0000

flight 163907 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163907/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 2f5ad3f451031749f6dabf53960ab5ec18e3e843
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   48 days
Failing since        162368  2021-06-04 15:42:59 Z   48 days  130 attempts
Testing same since   163907  2021-07-22 13:41:32 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4011 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 20:41:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 20:41:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159852.293956 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6fVp-0002rZ-Sc; Thu, 22 Jul 2021 20:41:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159852.293956; Thu, 22 Jul 2021 20:41:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6fVp-0002rS-Ph; Thu, 22 Jul 2021 20:41:45 +0000
Received: by outflank-mailman (input) for mailman id 159852;
 Thu, 22 Jul 2021 20:41:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=g1y4=MO=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m6fVo-0002rM-D3
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 20:41:44 +0000
Received: from mail-wr1-x430.google.com (unknown [2a00:1450:4864:20::430])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5e1e93fe-7ecc-4349-a4d9-09621703a430;
 Thu, 22 Jul 2021 20:41:43 +0000 (UTC)
Received: by mail-wr1-x430.google.com with SMTP id b7so56590wri.8
 for <xen-devel@lists.xenproject.org>; Thu, 22 Jul 2021 13:41:43 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5e1e93fe-7ecc-4349-a4d9-09621703a430
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=qzeWYgK/bTug4MWFhTuraMf59NL9niT6kHUl2vAAQII=;
        b=SjcYr7LXPYJ4bT5t37XFmETds+YoEmq97wyeHa2aknfBr2/lOgnncRXiJYw5NQ05D3
         1P0YSC4HRevEilfPKXxccApUW57jaad6xDDR+tZTgFmZzFTNhXXfZhpMOZ/JIJp05031
         R+5+pKbgCkNY4XwHwR+s11ayX4yqmSetkOWYda51unu/Qt7y2J6zURkdbT4YhBshjI+0
         dXUQzvLS52E8P2kZbOptqoZ0Blzz5Cb5sTElD+07xcjVynzLb6sRWjmGtnDfr/cR5N4e
         /w9ThLP8RYMDa4LDa1pKCeI5rY5W/WMpfo/psNKnv07w8XdBWlPB+jfCE7F2MN2gYOt8
         yIXg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=qzeWYgK/bTug4MWFhTuraMf59NL9niT6kHUl2vAAQII=;
        b=bQ9g27Z0EeK8bzOPt33NNHod/LMGftxzVb0wk8EtGGe8SVbRw5SpbExroGBDePQjdR
         AEDvBE/YM/h36fm9k5VLL/06sAOHy9Qip0wRejKWg8S64gfqdZdwf6xjbpdwjpv7uoHW
         Kj83ID5EQUUaSvhA76xKvSjzZBfg0Pu50fGmsduRQy0b/Yvpn06uO1FaELFrGX85ZvnL
         R72dO5gp949F5zWl8og2wxfxsoZe7FeZ8UggG3CC/ccbO8Y1f9qiTpO4TjbEcKupUduV
         fTVyWeeRSrwQURwgOLue5Ttuq7j1DPGaun4P7XNWZ8Fl++RiUiJrMQOe86xTd3ruwFO6
         4+2g==
X-Gm-Message-State: AOAM532L3rBZpJf8H32ceFqA5OpOg/kcSh2P4gPDuzvTSm6aQHHr9fdE
	XZS9bcJSo1gapBkChma4nFoaRgQdBLCPp8QdsDo=
X-Google-Smtp-Source: ABdhPJz6Ph/+Nk9VCtxsOLPkFpcc/4CQXYaoMmP4bp6XN6jk/Yh3pyLO+NAGRhoHuEcbMT0fnOL/FnrbTOEcWuDhbQc=
X-Received: by 2002:adf:a1c4:: with SMTP id v4mr1727797wrv.217.1626986502671;
 Thu, 22 Jul 2021 13:41:42 -0700 (PDT)
MIME-Version: 1.0
References: <YIptpndhk6MOJFod@Air-de-Roger> <YItwHirnih6iUtRS@mattapan.m5p.com>
 <YIu80FNQHKS3+jVN@Air-de-Roger> <YJDcDjjgCsQUdsZ7@mattapan.m5p.com>
 <YJURGaqAVBSYnMRf@Air-de-Roger> <YJYem5CW/97k/e5A@mattapan.m5p.com>
 <YJs/YAgB8molh7e5@mattapan.m5p.com> <54427968-9b13-36e6-0001-27fb49f85635@xen.org>
 <YJ3jlGSxs60Io+dp@mattapan.m5p.com> <93936406-574f-7fd0-53bf-3bafaa4b1947@xen.org>
 <YJ8hTE/JbJygtVAL@mattapan.m5p.com> <f7360dac-5d83-733b-7ec5-c73d4dc0350d@xen.org>
 <alpine.DEB.2.21.2105191611540.14426@sstabellini-ThinkPad-T480s>
 <b6fe6e06-517c-ee4c-5b71-a1bee4d4df13@xen.org> <alpine.DEB.2.21.2105200919100.14426@sstabellini-ThinkPad-T480s>
 <2d18f588-5e76-e3da-e7df-5c754516f8d6@gmail.com> <b9247885-8fc0-3a74-8f86-740997b4453e@xen.org>
In-Reply-To: <b9247885-8fc0-3a74-8f86-740997b4453e@xen.org>
From: Oleksandr Tyshchenko <olekstysh@gmail.com>
Date: Thu, 22 Jul 2021 23:41:31 +0300
Message-ID: <CAPD2p-=KdztPCa1z=7oLFYxDroWvkVqo3XsV2f4dA0kO4SuwTA@mail.gmail.com>
Subject: Re: Uses of /hypervisor memory range (was: FreeBSD/Xen/ARM issues)
To: Julien Grall <julien@xen.org>
Cc: Oleksandr Andrushchenko <andr2000@gmail.com>, Stefano Stabellini <sstabellini@kernel.org>, 
	Elliott Mitchell <ehem+xen@m5p.com>, xen-devel <xen-devel@lists.xenproject.org>, 
	"Roger Pau Monn??" <royger@freebsd.org>, Mitchell Horne <mhorne@freebsd.org>, 
	Andrew Cooper <andrew.cooper3@citrix.com>, Artem Mygaiev <Artem_Mygaiev@epam.com>, 
	Anastasiia Lukianenko <Anastasiia_Lukianenko@epam.com>
Content-Type: multipart/alternative; boundary="0000000000008bd23e05c7bc50e0"

--0000000000008bd23e05c7bc50e0
Content-Type: text/plain; charset="UTF-8"

On Sat, Jul 3, 2021 at 8:18 PM Julien Grall <julien@xen.org> wrote:

>
>
> On 18/06/2021 13:19, Oleksandr Andrushchenko wrote:
> > Hi, all!
>
> Hi,
>

Hello Julien, all.
[sorry for the possible format issues]

I am sorry to jump into the conversation too late.



>
> Sorry for the late reply.
>
> > What do we need in order to move on on this?
>
> The next steps would be
>   1) Write a PoC to confirm the approach is feasible
>   2) Write a design document
>
> Unfortunately, I will not have time to work on it any time soon. Is it
> something you plan to work on?
>

I am working on this PoC on Xen on Arm right now taking into the account
the details that we initially discussed on the IRC, unfortunately, I had to
postpone this activity several times due to the limited bandwidth,
but this time, I hope, I will be able to finish this PoC without
interruption) I will try to share Xen+Linux changes in a week, so we will
able to discuss them.


>
> Cheers,
>
> --
> Julien Grall
>
>

-- 
Regards,

Oleksandr Tyshchenko

--0000000000008bd23e05c7bc50e0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Sat, Jul 3, 2021 at 8:18 PM Julien=
 Grall &lt;<a href=3D"mailto:julien@xen.org">julien@xen.org</a>&gt; wrote:<=
br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
On 18/06/2021 13:19, Oleksandr Andrushchenko wrote:<br>
&gt; Hi, all!<br>
<br>
Hi,<br></blockquote><div><br></div><div>Hello Julien, all.</div><div>[sorry=
 for the possible format issues]</div><div><br></div><div>I am sorry to jum=
p into the conversation too late.</div><div><br></div><div>=C2=A0</div><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Sorry for the late reply.<br>
<br>
&gt; What do we need in order to move on on this?<br>
<br>
The next steps would be<br>
=C2=A0 1) Write a PoC to confirm the approach is feasible<br>
=C2=A0 2) Write a design document<br>
<br>
Unfortunately, I will not have time to work on it any time soon. Is it <br>
something you plan to work on?<br></blockquote><div><br></div><div>I am wor=
king on this PoC on Xen on Arm right now taking into the account the detail=
s that we initially discussed on the IRC, unfortunately,=C2=A0I had to post=
pone this activity several times due to the limited bandwidth,</div><div>bu=
t this time, I hope, I will be able to finish this PoC without interruption=
) I will try to share Xen+Linux changes in a week, so we will able to discu=
ss them.=C2=A0=C2=A0</div><div>=C2=A0</div><blockquote class=3D"gmail_quote=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex">
<br>
Cheers,<br>
<br>
-- <br>
Julien Grall<br>
<br>
</blockquote></div><br clear=3D"all"><div><br></div>-- <br><div dir=3D"ltr"=
 class=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=3D"ltr"><div><div=
 dir=3D"ltr"><span style=3D"background-color:rgb(255,255,255)"><font size=
=3D"2"><span style=3D"color:rgb(51,51,51);font-family:Arial,sans-serif">Reg=
ards,</span></font></span></div><div dir=3D"ltr"><br></div><div dir=3D"ltr"=
><div><span style=3D"background-color:rgb(255,255,255)"><font size=3D"2">Ol=
eksandr Tyshchenko</font></span></div></div></div></div></div></div></div><=
/div>

--0000000000008bd23e05c7bc50e0--


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 21:40:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 21:40:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159864.293981 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6gQA-0001Hv-KI; Thu, 22 Jul 2021 21:39:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159864.293981; Thu, 22 Jul 2021 21:39:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6gQA-0001Ho-G4; Thu, 22 Jul 2021 21:39:58 +0000
Received: by outflank-mailman (input) for mailman id 159864;
 Thu, 22 Jul 2021 21:39:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6gQ9-0001Hi-8o
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 21:39:57 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5ad3c224-eb35-11eb-9122-12813bfff9fa;
 Thu, 22 Jul 2021 21:39:56 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id E5DAD60EBB;
 Thu, 22 Jul 2021 21:39:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5ad3c224-eb35-11eb-9122-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626989995;
	bh=nCI/Aer+Ybf73Ymjpej/kcp8lz/wqAqsRR+CvgcdM9A=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=uZYDJuWuVAkBdI2ohadoR8SoPgHVpke9q/3t9xiX+uqXVoToH/vzZGjJ1oImS7b6T
	 e1MKxABNVuMejDNMshdgaIagn056E0pk7gplHdHyhKqb4j45u1us+P801qJZHnGuxc
	 5afCt0flpHMxBxZsXGFalBGBQsafNff2C9eMaG/LwCYpI2flO2zEKtvQ7tj2raD3Nz
	 +HN39SsmeAuns9uFYFeWmw+YEqiHUBf75sDrFEynIYQzEotjf++B51U5cm9XmS75Qd
	 pS6l5iRKr6z4b64PoHey+Vx4brWdgTehnQWCawWyvtiP/6DFUebWU12zeEQXY4lf8/
	 o4fTtRXlR3EyQ==
Date: Thu, 22 Jul 2021 14:39:54 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>, 
    "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
    Andrii Anisov <Andrii_Anisov@epam.com>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
In-Reply-To: <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
Message-ID: <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org> <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org> <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s> <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Thu, 22 Jul 2021, Julien Grall wrote:
> > You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
> > from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
> > work the same.
> > 
> > Looking at the boot logs on pastebin I noticed that Xen is not loaded at
> > a 2MB aligned address. I recommend you change Xen loading address to
> > 0x500200000. And the kernel loading address to 0x500400000.
> 
> I am curious to know why you recommend to load at 2MB aligned address. The
> Image protocol doesn't require to load a 2MB aligned address. In fact, we add
> issue on Juno because the bootloader would load Xen at a 4KB address. UEFI
> will also load at a 4KB align address.

It is from empirical evidence :-)

I cannot tell you the exact reason but I saw "strange" problems in the
past that went away after choosing a 2MB alignment. So we settled for
using 2MB in ImageBuilder and we haven't seen any more issues.

However, it could have been anything: a bug in U-Boot not relevant
anymore, a bug in Linux, etc. I don't know for sure.


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 22:45:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 22:45:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159872.293998 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6hR4-00016E-Jn; Thu, 22 Jul 2021 22:44:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159872.293998; Thu, 22 Jul 2021 22:44:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6hR4-000167-Gs; Thu, 22 Jul 2021 22:44:58 +0000
Received: by outflank-mailman (input) for mailman id 159872;
 Thu, 22 Jul 2021 22:44:57 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hR2-00015x-Tx; Thu, 22 Jul 2021 22:44:56 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hR2-00089O-Il; Thu, 22 Jul 2021 22:44:56 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hR2-0008Qm-BM; Thu, 22 Jul 2021 22:44:56 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hR2-0008W7-As; Thu, 22 Jul 2021 22:44:56 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Message-Id:Subject:To;
	bh=fHUGSpYgKuENBdBfB0h13GWeeJ89/lYXZcDa7zwsgGs=; b=GrU7EEw8Tejlo2sB5Fa6be15vj
	OqVSxJTNBcXxfYM73aG/M/qXXyVkjsZGKZyQUwC+T3PEVhlFHJuSqBHJuedg2/VYEHK32A0LqftMt
	IQ0vZVtJOfUqMMVS8q4v1C1ciS7do8Ifqf8xHWHklQFOwdRm3xGK349UVenOjP3ZeLOI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Subject: [qemu-mainline bisection] complete test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict
Message-Id: <E1m6hR2-0008W7-As@osstest.test-lab.xenproject.org>
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 22:44:56 +0000

branch xen-unstable
xenbranch xen-unstable
job test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict
testid debian-hvm-install

Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163920/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


For bisection revision-tuple graph see:
   http://logs.test-lab.xenproject.org/osstest/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict.debian-hvm-install.html
Revision IDs in each graph node refer, respectively, to the Trees above.

----------------------------------------
Running cs-bisection-step --graph-out=/home/logs/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict.debian-hvm-install --summary-out=tmp/163920.bisection-summary --basis-template=163321 --blessings=real,real-bisect,real-retry qemu-mainline test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict debian-hvm-install
Searching for failure / basis pass:
 163890 fail [host=huxelrebe1] / 163321 [host=elbling0] 163311 [host=chardonnay0] 163303 [host=fiano1] 163299 [host=elbling1] 163292 [host=albana1] 163276 ok.
Failure / basis pass flights: 163890 / 163276
(tree with no url: minios)
Tree: linux git://xenbits.xen.org/linux-pvops.git
Tree: linuxfirmware git://xenbits.xen.org/osstest/linux-firmware.git
Tree: ovmf git://xenbits.xen.org/osstest/ovmf.git
Tree: qemu git://xenbits.xen.org/qemu-xen-traditional.git
Tree: qemuu git://git.qemu.org/qemu.git
Tree: seabios git://xenbits.xen.org/osstest/seabios.git
Tree: xen git://xenbits.xen.org/xen.git
Latest c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e77c8b8b8e933414ef07dbed04e02973fccffeb0 54082c81d96028ba8c76fbe6784085cf1df76b20 57e761b60dc92e210caf3429b8956d908ba04ae9
Basis pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
Generating revisions with ./adhoc-revtuple-generator  git://xenbits.xen.org/linux-pvops.git#c3038e718a19fc596f7b1baba0f83d5146dc7784-c3038e718a19fc596f7b1baba0f83d5146dc7784 git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860 git://xenbits.xen.org/osstest/ovmf.git#c410ad4da4b7785170d3d42a3ba190c2caac6feb-c410ad4da4b7785170d3d42a3ba190c2caac6feb git://xenbits.xen.org/qemu-xen-traditional.git#3d273dd05e51e5a1ffba3d98c74\
 37ee84e8f8764-3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 git://git.qemu.org/qemu.git#9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1-e77c8b8b8e933414ef07dbed04e02973fccffeb0 git://xenbits.xen.org/osstest/seabios.git#54082c81d96028ba8c76fbe6784085cf1df76b20-54082c81d96028ba8c76fbe6784085cf1df76b20 git://xenbits.xen.org/xen.git#f95b7b37cfc6d4613721df9357090d14712013c0-57e761b60dc92e210caf3429b8956d908ba04ae9
Loaded 20177 nodes in revision graph
Searching for test results:
 163228 [host=fiano0]
 163235 [host=huxelrebe0]
 163276 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163292 [host=albana1]
 163299 [host=elbling1]
 163303 [host=fiano1]
 163311 [host=chardonnay0]
 163321 [host=elbling0]
 163327 fail irrelevant
 163369 fail irrelevant
 163420 fail irrelevant
 163444 fail irrelevant
 163464 fail irrelevant
 163486 fail irrelevant
 163516 fail irrelevant
 163545 fail irrelevant
 163563 fail irrelevant
 163577 fail irrelevant
 163600 fail irrelevant
 163621 fail irrelevant
 163642 fail irrelevant
 163663 fail irrelevant
 163677 fail irrelevant
 163694 fail irrelevant
 163719 fail irrelevant
 163741 fail irrelevant
 163765 fail irrelevant
 163784 fail irrelevant
 163798 fail irrelevant
 163811 fail irrelevant
 163834 fail irrelevant
 163849 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 143c2e0432859826c9e8d5b2baa307355f1a5332 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
 163874 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163876 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 143c2e0432859826c9e8d5b2baa307355f1a5332 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
 163878 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9405d87be25db6dff4d7b5ab48a81bbf6d083e47 54082c81d96028ba8c76fbe6784085cf1df76b20 471383ddd1843700fdd7d74242ba0e5f314dc678
 163865 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c04b4d9e6b596ead3cf6046a9243fbfee068ef33 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
 163879 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3f65df38e8a5e75ccfd5a641d252ad8882c9e68c 54082c81d96028ba8c76fbe6784085cf1df76b20 3a98c1a4cec1a302beaddf944ded240b61173f87
 163881 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c04b4d9e6b596ead3cf6046a9243fbfee068ef33 54082c81d96028ba8c76fbe6784085cf1df76b20 96e5ad4c476e70688295b3cfb537847a3351d6fd
 163883 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 65388f404492daac86e02980d10ae84c694870b3 54082c81d96028ba8c76fbe6784085cf1df76b20 3a98c1a4cec1a302beaddf944ded240b61173f87
 163880 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e77c8b8b8e933414ef07dbed04e02973fccffeb0 54082c81d96028ba8c76fbe6784085cf1df76b20 57e761b60dc92e210caf3429b8956d908ba04ae9
 163885 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 f665574ac5b08284e5292f013235bef2e9d4e73d 54082c81d96028ba8c76fbe6784085cf1df76b20 3a98c1a4cec1a302beaddf944ded240b61173f87
 163886 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 4598b0735025042c62e85a52e4c91fc0d50ec157 54082c81d96028ba8c76fbe6784085cf1df76b20 3a98c1a4cec1a302beaddf944ded240b61173f87
 163887 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 5e05c40ced78ed9a3c25a82ec1f144bb7baffe3f 54082c81d96028ba8c76fbe6784085cf1df76b20 3a98c1a4cec1a302beaddf944ded240b61173f87
 163891 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9c2647f75004c4f7d64c9c0ec55f8c6f0739a8b1 54082c81d96028ba8c76fbe6784085cf1df76b20 f95b7b37cfc6d4613721df9357090d14712013c0
 163892 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e77c8b8b8e933414ef07dbed04e02973fccffeb0 54082c81d96028ba8c76fbe6784085cf1df76b20 57e761b60dc92e210caf3429b8956d908ba04ae9
 163894 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 57e28d34c0cb04abf7683ac6a12c87ede447c320 54082c81d96028ba8c76fbe6784085cf1df76b20 93c9edbef51b31056f93a37a778326c90a83158c
 163895 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d1987c8114921eb30859854de664f879b5626da7 54082c81d96028ba8c76fbe6784085cf1df76b20 93c9edbef51b31056f93a37a778326c90a83158c
 163897 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 fc32b91a88cc9cd560da5488bdca4d69f2bac620 54082c81d96028ba8c76fbe6784085cf1df76b20 93c9edbef51b31056f93a37a778326c90a83158c
 163898 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05449abb1d4c5f0c69ceb3d8d03cbc75de39b646 54082c81d96028ba8c76fbe6784085cf1df76b20 93c9edbef51b31056f93a37a778326c90a83158c
 163899 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 05de778b5b8ab0b402996769117b88c7ea5c7c61 54082c81d96028ba8c76fbe6784085cf1df76b20 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
 163900 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c632ea1dd90313bc360b9de9d5014c2167f4d038 54082c81d96028ba8c76fbe6784085cf1df76b20 0f435e2b58543f5baae96e17a10ae20d3dbc28fa
 163901 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 7ca6f2ad375d32e81844788dbc2b05a04cc391b5 54082c81d96028ba8c76fbe6784085cf1df76b20 f17a73b3c0264c62dd6b5dae01ed621c051c3038
 163902 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 715167a36c2b152f6511cff690180c1254ae039f 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163903 blocked c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9 54082c81d96028ba8c76fbe6784085cf1df76b20 c8f88810db2a25d6aacf65c1c60bc4f5d848a483
 163904 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 6d7c7c2d1d95cc6cdb56706bfa0446ad68e2b952 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163905 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9aef0954195cc592e86846dbbe7f3c2c5603690a 54082c81d96028ba8c76fbe6784085cf1df76b20 3ce2765ac21dbd739e8216694b025aaabf4afff3
 163906 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 110243750dc4389fe8715c1db87a6ce6c2b9e645 54082c81d96028ba8c76fbe6784085cf1df76b20 383b41974d5543b62f3181d216070fe3691fb130
 163908 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163909 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e1fbd2c4ed8e61a3e0749f592a6d3423ec67980b 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163890 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 e77c8b8b8e933414ef07dbed04e02973fccffeb0 54082c81d96028ba8c76fbe6784085cf1df76b20 57e761b60dc92e210caf3429b8956d908ba04ae9
 163910 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 3bb6944585aa6f28b21265c88d86264e8e9f7e53 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163911 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 9176e800dbcb2636a2f24411eafc3c800e3455bd 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163913 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163914 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163915 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163918 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163919 pass c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
 163920 fail c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
Searching for interesting versions
 Result found: flight 163276 (pass), for basis pass
 Result found: flight 163880 (fail), for basis failure (at ancestor ~1)
 Repro found: flight 163891 (pass), for basis pass
 Repro found: flight 163892 (fail), for basis failure
 0 revisions at c3038e718a19fc596f7b1baba0f83d5146dc7784 c530a75c1e6a472b0eb9558310b518f0dfcd8860 c410ad4da4b7785170d3d42a3ba190c2caac6feb 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764 c445909e1f3d5722ed26f067bbffed71cbefd711 54082c81d96028ba8c76fbe6784085cf1df76b20 44e8904ebfbc57ba0950c40b9d3a28507b553e4e
No revisions left to test, checking graph state.
 Result found: flight 163913 (pass), for last pass
 Result found: flight 163914 (fail), for first failure
 Repro found: flight 163915 (pass), for last pass
 Repro found: flight 163918 (fail), for first failure
 Repro found: flight 163919 (pass), for last pass
 Repro found: flight 163920 (fail), for first failure

*** Found and reproduced problem changeset ***

  Bug is in tree:  qemuu git://git.qemu.org/qemu.git
  Bug introduced:  d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Bug not present: c445909e1f3d5722ed26f067bbffed71cbefd711
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/163920/


  commit d8fb7d0969d5c32b3d1b9e20b63ec6c0abe80be4
  Author: Paolo Bonzini <pbonzini@redhat.com>
  Date:   Thu May 13 11:28:34 2021 -0400
  
      vl: switch -M parsing to keyval
      
      Switch from QemuOpts to keyval.  This enables the introduction
      of non-scalar machine properties, and JSON syntax in the future.
      
      For JSON syntax to be supported right now, we would have to
      consider what would happen if string-based dictionaries (produced by
      -M key=val) were to be merged with strongly-typed dictionaries
      (produced by -M {'key': 123}).
      
      The simplest way out is to never enter the situation, and only allow one
      -M option when JSON syntax is in use.  However, we want options such as
      -smp to become syntactic sugar for -M, and this is a problem; as soon
      as -smp becomes a shortcut for -M, QEMU would forbid using -M '{....}'
      together with -smp.  Therefore, allowing JSON syntax right now for -M
      would be a forward-compatibility nightmare and it would be impossible
      anyway to introduce -M incrementally in tools.
      
      Instead, support for JSON syntax is delayed until after the main
      options are converted to QOM compound properties.  These include -boot,
      -acpitable, -smbios, -m, -semihosting-config, -rtc and -fw_cfg.  Once JSON
      syntax is introduced, these options will _also_ be forbidden together
      with -M '{...}'.
      
      Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Revision graph left in /home/logs/results/bisect/qemu-mainline/test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict.debian-hvm-install.{dot,ps,png,html,svg}.
----------------------------------------
163920: tolerable ALL FAIL

flight 163920 qemu-mainline real-bisect [real]
http://logs.test-lab.xenproject.org/osstest/logs/163920/

Failures :-/ but no regressions.

Tests which did not succeed,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail baseline untested


jobs:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    


------------------------------------------------------------
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



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:06:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:06:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159880.294017 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6hlR-0004NK-EK; Thu, 22 Jul 2021 23:06:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159880.294017; Thu, 22 Jul 2021 23:06:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6hlR-0004ND-AZ; Thu, 22 Jul 2021 23:06:01 +0000
Received: by outflank-mailman (input) for mailman id 159880;
 Thu, 22 Jul 2021 23:06:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hlQ-0004N3-C6; Thu, 22 Jul 2021 23:06:00 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hlQ-0008T2-5G; Thu, 22 Jul 2021 23:06:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hlP-0000es-R8; Thu, 22 Jul 2021 23:05:59 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6hlP-0003g6-Qd; Thu, 22 Jul 2021 23:05:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=UTp/OQXcY/kncKITWGoas07J65I8ouXnJO31YCSeOxw=; b=5Q5Zj9eGf47jp7nP7lJ1v1IV4b
	enrI47NLHpNx+L7vgStIf41KkNszmYN19087nVBvHQ4Ov9JIPGsT5fdHpNhN9naGnWgxvQojTDa62
	ZZZPnaECORXNGjNf/ZgPafPH+rYU0OdicUF3uHm1wzj/frCU1Yi77MAcsFYrTTJ9ZRUo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163912-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163912: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=beb191385882a2a283ce777d76b1a77e71813d14
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 22 Jul 2021 23:05:59 +0000

flight 163912 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163912/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                beb191385882a2a283ce777d76b1a77e71813d14
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   16 days
Failing since        163327  2021-07-06 12:39:04 Z   16 days   29 attempts
Testing same since   163912  2021-07-22 17:07:03 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Cole Robinson <crobinso@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Snow <jsnow@redhat.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  Yang Zhong <yang.zhong@intel.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 12376 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:33:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:33:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159888.294032 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iBU-00087L-Of; Thu, 22 Jul 2021 23:32:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159888.294032; Thu, 22 Jul 2021 23:32:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iBU-00087E-LS; Thu, 22 Jul 2021 23:32:56 +0000
Received: by outflank-mailman (input) for mailman id 159888;
 Thu, 22 Jul 2021 23:32:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6iBT-000878-O9
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 23:32:55 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 232d7166-eb45-11eb-915b-12813bfff9fa;
 Thu, 22 Jul 2021 23:32:54 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 672F560EB2;
 Thu, 22 Jul 2021 23:32:53 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 232d7166-eb45-11eb-915b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626996773;
	bh=HbH3bLjCo5cGJISokqxaORxnMxdNJO6b51G1CARPNks=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=gR7cEN3IXG/ovwHxhW4/hdT+BBMaxtI/n5CE+Yh1WfX7dvXOK0RUY1dCR1a+4lbcc
	 cuRi0mk2rZLvqyXeIHmReSZc7FrsI1DRDnrASrCSL29YoV/2LZ0tXh9/l4wOHZTvcy
	 zRFxQY0t+EeM8/ysm/IOkxtAZ0WVdS0wsykEpJmCZXYK2oA+5GmCwDmctf0el96XIG
	 IqvnsJczD3XsAprvP43YvT9Ulkz7BlmdDREWKuIWrCrFxPW+Vjvc8OQ1oOmOWhiLzb
	 N+47MAFd0+QllRDu8MAqr9p+OG/lVw5mbuxrBkVfNMyV1B2T2TKOrARYEKdKySLdbu
	 i/J5jtDoHt/wA==
Date: Thu, 22 Jul 2021 16:32:52 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com, 
    Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH v4 1/3] arm,smmu: switch to using iommu_fwspec
 functions
In-Reply-To: <267ed58b-a63c-3ef4-b244-bab9e2e7f95e@xen.org>
Message-ID: <alpine.DEB.2.21.2107221610270.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107161657300.3916@sstabellini-ThinkPad-T480s> <20210716235939.9585-1-sstabellini@kernel.org> <267ed58b-a63c-3ef4-b244-bab9e2e7f95e@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Thu, 22 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 17/07/2021 00:59, Stefano Stabellini wrote:
> > diff --git a/xen/drivers/passthrough/device_tree.c
> > b/xen/drivers/passthrough/device_tree.c
> > index 999b831d90..911f82a561 100644
> > --- a/xen/drivers/passthrough/device_tree.c
> > +++ b/xen/drivers/passthrough/device_tree.c
> > @@ -140,8 +140,12 @@ int iommu_add_dt_device(struct dt_device_node *np)
> >       if ( !ops )
> >           return -EINVAL;
> >   +    /*
> > +     * Device already added. It can happen when both iommus and
> > +     * mmu-masters are present.
> > +     */
> 
> This is common code. So I would suggest to write a generic comment to avoid
> any misunderstanding. The one added just after the call in iommu_do_domctl()
> would seem more suitable.

OK, I went with this:

            * Some Device Trees may expose both legacy SMMU and generic
            * IOMMU bindings together. If both are present, the device
            * can be already added.



> >       if ( dev_iommu_fwspec_get(dev) )
> > -        return -EEXIST;
> > +        return 0;
> There are a few things to mention here:
> 
>  1) The change is not explained in the commit message

I will add


>  2) One of the caller was checking -EEXIST. As you dropped the only place
> where -EEXIST should be returned, can you drop the check in the caller?

Good point, yes I think it can be dropped.


> Ideally this should be in a separate patch because this change is not entirely
> related to this patch.

I can do that, I'll send out v5 shortly.


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:35:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:35:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159895.294044 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iEM-0000fO-8Z; Thu, 22 Jul 2021 23:35:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159895.294044; Thu, 22 Jul 2021 23:35:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iEM-0000fH-4j; Thu, 22 Jul 2021 23:35:54 +0000
Received: by outflank-mailman (input) for mailman id 159895;
 Thu, 22 Jul 2021 23:35:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6iEK-0000f9-Ob
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 23:35:52 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8d0e6356-eb45-11eb-915d-12813bfff9fa;
 Thu, 22 Jul 2021 23:35:52 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id B1C6960E9B;
 Thu, 22 Jul 2021 23:35:50 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8d0e6356-eb45-11eb-915d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626996951;
	bh=uRaLjw6VB1c05J5Qt/N9VfYDhHaUGrCYIOKQcLJuqKM=;
	h=Date:From:To:cc:Subject:From;
	b=QF3zKzBnO8oQjE2PYl2dyyeZNDx18x+FtaafOXk9s+Y92M+8PJvMkXhaav2Rnux7A
	 bMvwTzzXXtg0e40jarLN6fB5/cvPrav0trHHdZNTLrhoRrdDRT+ThHJ67oZe7JBUI4
	 9gdd2L1p1Nec/CTddG6jMzAIrNhCMeSkYBpayWhsItenaroX4LAxcB9oP7wRyyJUEp
	 kfCHDoc/XHqhIx0Pb48nznxZXxYQa8gidfsEnHKY+BNcFdqBri5OL42wXrh+xC+Xh3
	 g6hhPqh4ZWZolhI6vb3ABoZWrxCF1hhtqcqn6WNMQPwmcFfSbE+PqRY99PHWZdyD+6
	 wFKbljiIpDoPg==
Date: Thu, 22 Jul 2021 16:35:50 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: xen-devel@lists.xenproject.org
cc: sstabellini@kernel.org, julien@xen.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com
Subject: [PATCH v5 0/4] Generic SMMU Bindings
Message-ID: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

Hi all,

This series introduces support for the generic SMMU bindings to
xen/drivers/passthrough/arm/smmu.c.

Cheers,

Stefano

Brian Woods (3):
      arm,smmu: switch to using iommu_fwspec functions
      arm,smmu: restructure code in preparation to new bindings support
      arm,smmu: add support for generic DT bindings. Implement add_device and dt_xlate.

Stefano Stabellini (1):
      xen: do not return -EEXIST if iommu_add_dt_device is called twice

 xen/drivers/passthrough/arm/smmu.c    | 141 +++++++++++++++++++++++++---------
 xen/drivers/passthrough/device_tree.c |  26 ++-----
 2 files changed, 114 insertions(+), 53 deletions(-)


From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:36:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:36:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159900.294056 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFD-0001G5-Ik; Thu, 22 Jul 2021 23:36:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159900.294056; Thu, 22 Jul 2021 23:36:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFD-0001Fv-EP; Thu, 22 Jul 2021 23:36:47 +0000
Received: by outflank-mailman (input) for mailman id 159900;
 Thu, 22 Jul 2021 23:36:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6iFC-0001Fh-0X
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 23:36:46 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 192036cd-fad2-4aaa-be31-14f1077d63c2;
 Thu, 22 Jul 2021 23:36:44 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 126EE60EB2;
 Thu, 22 Jul 2021 23:36:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 192036cd-fad2-4aaa-be31-14f1077d63c2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626997004;
	bh=Nq3WENT04Jv2WVQpnaz0jZGl+pYE7uv2I5GgVFteS7M=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=A3CuBlXsOn5mkFfOKnRVSzr9Qo8oPddtNybZPb/1TA9LIPpZlhupvJBtQZuOhlqeQ
	 mJxu/pyeizSVnYIVRHS9ChLdPr0TF+Jrfto6WiL/L1V9hr6k6558GT1rdOEkxEyN8i
	 mp4l9d9vDjnwp5wvyXu1m3OOZwsT4J02RL8r6kfJoEoyJgOv2cb35jieUzlpKLZ2Df
	 7msYsBgtWQnGnEOIbnNNUPyPYg44bB9RL2wigAGQKfErkCRrxZK8PaGLYdLNmZYgEP
	 mAegT9vCdN+BBq0nuku/DhGovxZeQbEFMD2iqY+Vrooy5nJXmbA9x34vU7WeDSJCyB
	 UztlmbgNnOvfw==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v5 1/4] arm,smmu: switch to using iommu_fwspec functions
Date: Thu, 22 Jul 2021 16:36:39 -0700
Message-Id: <20210722233642.22515-1-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>

From: Brian Woods <brian.woods@xilinx.com>

Modify the smmu driver so that it uses the iommu_fwspec helper
functions.  This means both ARM IOMMU drivers will both use the
iommu_fwspec helper functions, making enabling generic device tree
bindings in the SMMU driver much cleaner.

Signed-off-by: Brian Woods <brian.woods@xilinx.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
---
Changes in v5:
- moved iommu_add_dt_device change to a separate patch
---
 xen/drivers/passthrough/arm/smmu.c | 75 ++++++++++++++++++++----------
 1 file changed, 51 insertions(+), 24 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index 658c40433c..09773702c3 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -32,6 +32,9 @@
  *	- 4k and 64k pages, with contiguous pte hints.
  *	- Up to 48-bit addressing (dependent on VA_BITS)
  *	- Context fault reporting
+ *
+ * Changes compared to Linux driver:
+ *	- support for fwspec
  */
 
 
@@ -49,6 +52,7 @@
 #include <asm/atomic.h>
 #include <asm/device.h>
 #include <asm/io.h>
+#include <asm/iommu_fwspec.h>
 #include <asm/platform.h>
 
 /* Xen: The below defines are redefined within the file. Undef it */
@@ -617,13 +621,11 @@ struct arm_smmu_smr {
 
 struct arm_smmu_master_cfg {
 	struct arm_smmu_device		*smmu;
-	int				num_streamids;
-	u16				streamids[MAX_MASTER_STREAMIDS];
 	s16				smendx[MAX_MASTER_STREAMIDS];
 };
 #define INVALID_SMENDX			-1
-#define for_each_cfg_sme(cfg, i, idx) \
-	for (i = 0; idx = cfg->smendx[i], i < cfg->num_streamids; ++i)
+#define for_each_cfg_sme(cfg, i, idx, num) \
+	for (i = 0; idx = cfg->smendx[i], i < num; ++i)
 
 struct arm_smmu_master {
 	struct device_node		*of_node;
@@ -713,6 +715,14 @@ static struct arm_smmu_option_prop arm_smmu_options[] = {
 	{ 0, NULL},
 };
 
+static inline struct iommu_fwspec *
+arm_smmu_get_fwspec(struct arm_smmu_master_cfg *cfg)
+{
+	struct arm_smmu_master *master = container_of(cfg,
+			                                      struct arm_smmu_master, cfg);
+	return dev_iommu_fwspec_get(&master->of_node->dev);
+}
+
 static void parse_driver_options(struct arm_smmu_device *smmu)
 {
 	int i = 0;
@@ -806,8 +816,9 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 				struct device *dev,
 				struct of_phandle_args *masterspec)
 {
-	int i;
+	int i, ret = 0;
 	struct arm_smmu_master *master;
+	struct iommu_fwspec *fwspec;
 
 	master = find_smmu_master(smmu, masterspec->np);
 	if (master) {
@@ -817,24 +828,30 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 		return -EBUSY;
 	}
 
-	if (masterspec->args_count > MAX_MASTER_STREAMIDS) {
-		dev_err(dev,
-			"reached maximum number (%d) of stream IDs for master device %s\n",
-			MAX_MASTER_STREAMIDS, masterspec->np->name);
-		return -ENOSPC;
-	}
-
 	master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
 	if (!master)
 		return -ENOMEM;
+	master->of_node = masterspec->np;
 
-	master->of_node			= masterspec->np;
-	master->cfg.num_streamids	= masterspec->args_count;
+	ret = iommu_fwspec_init(&master->of_node->dev, smmu->dev);
+	if (ret) {
+		kfree(master);
+		return ret;
+	}
+
+	/* adding the ids here */
+	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
+				   masterspec->args,
+				   masterspec->args_count);
+	if (ret)
+		return ret;
+
+	fwspec = dev_iommu_fwspec_get(dev);
 
 	/* Xen: Let Xen know that the device is protected by an SMMU */
 	dt_device_set_protected(masterspec->np);
 
-	for (i = 0; i < master->cfg.num_streamids; ++i) {
+	for (i = 0; i < fwspec->num_ids; ++i) {
 		u16 streamid = masterspec->args[i];
 
 		if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
@@ -844,7 +861,6 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 				masterspec->np->name, smmu->num_mapping_groups);
 			return -ERANGE;
 		}
-		master->cfg.streamids[i] = streamid;
 		master->cfg.smendx[i] = INVALID_SMENDX;
 	}
 	return insert_smmu_master(smmu, master);
@@ -1500,22 +1516,23 @@ static int arm_smmu_master_alloc_smes(struct device *dev)
 	struct arm_smmu_device *smmu = cfg->smmu;
 	struct arm_smmu_smr *smrs = smmu->smrs;
 	int i, idx, ret;
+	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
 
 	spin_lock(&smmu->stream_map_lock);
 	/* Figure out a viable stream map entry allocation */
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		if (idx != INVALID_SMENDX) {
 			ret = -EEXIST;
 			goto out_err;
 		}
 
-		ret = arm_smmu_find_sme(smmu, cfg->streamids[i], 0);
+		ret = arm_smmu_find_sme(smmu, fwspec->ids[i], 0);
 		if (ret < 0)
 			goto out_err;
 
 		idx = ret;
 		if (smrs && smmu->s2crs[idx].count == 0) {
-			smrs[idx].id = cfg->streamids[i];
+			smrs[idx].id = fwspec->ids[i];
 			smrs[idx].mask = 0; /* We don't currently share SMRs */
 			smrs[idx].valid = true;
 		}
@@ -1524,7 +1541,7 @@ static int arm_smmu_master_alloc_smes(struct device *dev)
 	}
 
 	/* It worked! Now, poke the actual hardware */
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		arm_smmu_write_sme(smmu, idx);
 	}
 
@@ -1544,9 +1561,10 @@ static void arm_smmu_master_free_smes(struct arm_smmu_master_cfg *cfg)
 {
     struct arm_smmu_device *smmu = cfg->smmu;
 	int i, idx;
+	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
 
 	spin_lock(&smmu->stream_map_lock);
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		if (arm_smmu_free_sme(smmu, idx))
 			arm_smmu_write_sme(smmu, idx);
 		cfg->smendx[i] = INVALID_SMENDX;
@@ -1562,8 +1580,9 @@ static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
 	enum arm_smmu_s2cr_type type = S2CR_TYPE_TRANS;
 	u8 cbndx = smmu_domain->cfg.cbndx;
 	int i, idx;
+	struct iommu_fwspec *fwspec = arm_smmu_get_fwspec(cfg);
 
-	for_each_cfg_sme(cfg, i, idx) {
+	for_each_cfg_sme(cfg, i, idx, fwspec->num_ids) {
 		if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
 			continue;
 
@@ -1962,6 +1981,7 @@ static int arm_smmu_add_device(struct device *dev)
 	struct arm_smmu_master_cfg *cfg;
 	struct iommu_group *group;
 	void (*releasefn)(void *) = NULL;
+	int ret;
 
 	smmu = find_smmu_for_device(dev);
 	if (!smmu)
@@ -1969,19 +1989,26 @@ static int arm_smmu_add_device(struct device *dev)
 
 	if (dev_is_pci(dev)) {
 		struct pci_dev *pdev = to_pci_dev(dev);
+		struct iommu_fwspec *fwspec;
 
 		cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
 		if (!cfg) {
 			return -ENOMEM;
 		}
 
-		cfg->num_streamids = 1;
+		ret = iommu_fwspec_init(dev, smmu->dev);
+		if (ret) {
+			kfree(cfg);
+			return ret;
+		}
+		fwspec = dev_iommu_fwspec_get(dev);
+
 		/*
 		 * Assume Stream ID == Requester ID for now.
 		 * We need a way to describe the ID mappings in FDT.
 		 */
 		pci_for_each_dma_alias(pdev, __arm_smmu_get_pci_sid,
-				       &cfg->streamids[0]);
+				       &fwspec->ids[0]);
 		releasefn = __arm_smmu_release_pci_iommudata;
 		cfg->smmu = smmu;
 	} else {
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:36:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:36:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159901.294061 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFD-0001He-SV; Thu, 22 Jul 2021 23:36:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159901.294061; Thu, 22 Jul 2021 23:36:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFD-0001H5-Lu; Thu, 22 Jul 2021 23:36:47 +0000
Received: by outflank-mailman (input) for mailman id 159901;
 Thu, 22 Jul 2021 23:36:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6iFC-0001Fn-E2
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 23:36:46 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id aca6a57b-eb45-11eb-915d-12813bfff9fa;
 Thu, 22 Jul 2021 23:36:45 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 84BE860EB6;
 Thu, 22 Jul 2021 23:36:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: aca6a57b-eb45-11eb-915d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626997004;
	bh=ZwhD+RQJEWZ4Vg/B7gh7aqOpMG1wvIPubUsh0/bpBug=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=aA6eG87iyF3vJlkrAzMd+S+3lAzUzLFxW4AAU8u37PKD9jd9k1SAJ7RYFi/zhhoIG
	 rvlTAADZoczTuoS6quoB6Kz6gWJdBEX5+lZAigvbdE7UGptHe3xst2NC3hkZBchLjO
	 P5jo9dE+sxQKqpZiMVHwA8UC/nrYdyVqMZ1UbKP0zLa5BQ/cFzfMBkPl/Bltxzoacf
	 FHMan59kkNfEYrg2GMkp7qfaTJh2dZh/vYgcPq095TnT44GkPmS4tz7LgEr8mLEH5R
	 nVIpldqAL4VgKzC7QfBs+Dj7y7foQ9h6uSDwxOAY6wyYGOLiu2mBi5NVc6IpPlA+Hu
	 /cyFEA6Bq+1RQ==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device is called twice
Date: Thu, 22 Jul 2021 16:36:40 -0700
Message-Id: <20210722233642.22515-2-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>

If both legacy IOMMU bindings and generic bindings are present,
iommu_add_dt_device can be called twice. Do not return error in that
case, that way there is no need to check for -EEXIST at the call sites.
Remove the one existing -EEXIT check, now unneeded.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
---
Changes in v5:
- new patch
---
 xen/drivers/passthrough/device_tree.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
index 999b831d90..32526ecabb 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
     if ( !ops )
         return -EINVAL;
 
+    /*
+     * Some Device Trees may expose both legacy SMMU and generic
+     * IOMMU bindings together. If both are present, the device
+     * can be already added.
+     */
     if ( dev_iommu_fwspec_get(dev) )
-        return -EEXIST;
+        return 0;
 
     /*
      * According to the Documentation/devicetree/bindings/iommu/iommu.txt
@@ -254,7 +259,7 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct domain *d,
          * already added to the IOMMU (positive result). Such happens after
          * re-creating guest domain.
          */
-        if ( ret < 0 && ret != -EEXIST )
+        if ( ret < 0 )
         {
             printk(XENLOG_G_ERR "Failed to add %s to the IOMMU\n",
                    dt_node_full_name(dev));
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:36:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:36:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159903.294080 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFI-0001rG-1T; Thu, 22 Jul 2021 23:36:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159903.294080; Thu, 22 Jul 2021 23:36:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFH-0001r3-US; Thu, 22 Jul 2021 23:36:51 +0000
Received: by outflank-mailman (input) for mailman id 159903;
 Thu, 22 Jul 2021 23:36:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6iFG-0001Fh-Vh
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 23:36:51 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 06c6b96e-1b8f-4cf9-9dd9-a7ae0394e6bd;
 Thu, 22 Jul 2021 23:36:46 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 6961660EB3;
 Thu, 22 Jul 2021 23:36:45 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 06c6b96e-1b8f-4cf9-9dd9-a7ae0394e6bd
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626997005;
	bh=QjllWcLvUx9mzoMKNB1Xu/UYm+2+6PHACe7S/EWzwgI=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=fYZljsNLjOauZxrDLmQYvWLyur51QAqM8oYNdlTO73wlExLH0Vp9+qb/VQHOkaBkl
	 wUo/8lwK+CLmc4P8RX97YLSArBn1jNt8oXZEaIq1PXG79LWUoSYKk7kr6yq3XFoBV+
	 fvvbIxmv/8OO9mN8oLUwPA92f7uTXCf9+OF759OMlYJIHqS2pVHfSMWwOb17Al6q0Y
	 gjPm1kjF4qFS3IytbA3KMewJmPBq5daXWXPfzM0cUd4Yg2xA62OhWWNVqRkm9V6gKV
	 nVDLi1uFvVzFAnbq5m/DOWsGhHWP8sJQ/yIJyroboPtDsf5IXM+nHpmthMgBkr9sHh
	 VCU6kG6xrUi2Q==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v5 4/4] arm,smmu: add support for generic DT bindings. Implement add_device and dt_xlate.
Date: Thu, 22 Jul 2021 16:36:42 -0700
Message-Id: <20210722233642.22515-4-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>

From: Brian Woods <brian.woods@xilinx.com>

For the legacy path, arm_smmu_dt_add_device_legacy is called by
register_smmu_master scanning mmu-masters (a fwspec entry is also
created.) For the generic path, arm_smmu_dt_add_device_generic gets
called instead. Then, arm_smmu_dt_add_device_generic calls
arm_smmu_dt_add_device_legacy afterwards, shared with the legacy path.
This way most of the low level implementation is shared between the two
paths.

If both legacy bindings and generic bindings are present in device tree,
the legacy bindings are the ones that are used. That's because
mmu-masters is parsed by
xen/drivers/passthrough/arm/smmu.c:arm_smmu_device_dt_probe which is
called by arm_smmu_dt_init. It happens very early. iommus is parsed by
xen/drivers/passthrough/device_tree.c:iommu_add_dt_device which is
called by xen/arch/arm/domain_build.c:handle_device and happens
afterwards.

arm_smmu_dt_xlate_generic is a verbatim copy from Linux
(drivers/iommu/arm/arm-smmu/arm-smmu.c:arm_smmu_of_xlate, version
v5.10).

A workaround was introduced by cf4af9d6d6c (xen/arm: boot with device
trees with "mmu-masters" and "iommus") because the SMMU driver only
supported the legacy bindings. Remove it now.

Signed-off-by: Brian Woods <brian.woods@xilinx.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Acked-by: Julien Grall <jgrall@amazon.com>
---
Changes in v5:
- add Acked-by
---
 xen/drivers/passthrough/arm/smmu.c    | 40 ++++++++++++++++++++++++++-
 xen/drivers/passthrough/device_tree.c | 17 +-----------
 2 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index 4aa3ecec57..c234ad9c7f 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -256,6 +256,8 @@ struct iommu_group
 	atomic_t ref;
 };
 
+static struct arm_smmu_device *find_smmu(const struct device *dev);
+
 static struct iommu_group *iommu_group_alloc(void)
 {
 	struct iommu_group *group = xzalloc(struct iommu_group);
@@ -444,6 +446,8 @@ static struct iommu_group *iommu_group_get(struct device *dev)
 #define SMR_VALID			(1U << 31)
 #define SMR_MASK_SHIFT			16
 #define SMR_ID_SHIFT			0
+#define SMR_ID_MASK			0x7fff
+#define SMR_MASK_MASK			0x7fff
 
 #define ARM_SMMU_GR0_S2CR(n)		(0xc00 + ((n) << 2))
 #define S2CR_CBNDX_SHIFT		0
@@ -872,6 +876,38 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 					     fwspec);
 }
 
+static int arm_smmu_dt_add_device_generic(u8 devfn, struct device *dev)
+{
+	struct arm_smmu_device *smmu;
+	struct iommu_fwspec *fwspec;
+
+	fwspec = dev_iommu_fwspec_get(dev);
+	if (fwspec == NULL)
+		return -ENXIO;
+
+	smmu = find_smmu(fwspec->iommu_dev);
+	if (smmu == NULL)
+		return -ENXIO;
+
+	return arm_smmu_dt_add_device_legacy(smmu, dev, fwspec);
+}
+
+static int arm_smmu_dt_xlate_generic(struct device *dev,
+				    const struct dt_phandle_args *spec)
+{
+	uint32_t mask, fwid = 0;
+
+	if (spec->args_count > 0)
+		fwid |= (SMR_ID_MASK & spec->args[0]) << SMR_ID_SHIFT;
+
+	if (spec->args_count > 1)
+		fwid |= (SMR_MASK_MASK & spec->args[1]) << SMR_MASK_SHIFT;
+	else if (!of_property_read_u32(spec->np, "stream-match-mask", &mask))
+		fwid |= (SMR_MASK_MASK & mask) << SMR_MASK_SHIFT;
+
+	return iommu_fwspec_add_ids(dev, &fwid, 1);
+}
+
 static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
 {
 	struct arm_smmu_device *smmu;
@@ -2837,6 +2873,7 @@ static void arm_smmu_iommu_domain_teardown(struct domain *d)
 static const struct iommu_ops arm_smmu_iommu_ops = {
     .init = arm_smmu_iommu_domain_init,
     .hwdom_init = arm_smmu_iommu_hwdom_init,
+    .add_device = arm_smmu_dt_add_device_generic,
     .teardown = arm_smmu_iommu_domain_teardown,
     .iotlb_flush = arm_smmu_iotlb_flush,
     .iotlb_flush_all = arm_smmu_iotlb_flush_all,
@@ -2844,9 +2881,10 @@ static const struct iommu_ops arm_smmu_iommu_ops = {
     .reassign_device = arm_smmu_reassign_dev,
     .map_page = arm_iommu_map_page,
     .unmap_page = arm_iommu_unmap_page,
+    .dt_xlate = arm_smmu_dt_xlate_generic,
 };
 
-static __init const struct arm_smmu_device *find_smmu(const struct device *dev)
+static struct arm_smmu_device *find_smmu(const struct device *dev)
 {
 	struct arm_smmu_device *smmu;
 	bool found = false;
diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
index 32526ecabb..46ce726521 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -160,22 +160,7 @@ int iommu_add_dt_device(struct dt_device_node *np)
          * these callback implemented.
          */
         if ( !ops->add_device || !ops->dt_xlate )
-        {
-            /*
-             * Some Device Trees may expose both legacy SMMU and generic
-             * IOMMU bindings together. However, the SMMU driver is only
-             * supporting the former and will protect them during the
-             * initialization. So we need to skip them and not return
-             * error here.
-             *
-             * XXX: This can be dropped when the SMMU is able to deal
-             * with generic bindings.
-             */
-            if ( dt_device_is_protected(np) )
-                return 0;
-            else
-                return -EINVAL;
-        }
+            return -EINVAL;
 
         if ( !dt_device_is_available(iommu_spec.np) )
             break;
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 22 23:36:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 22 Jul 2021 23:36:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159904.294092 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFJ-00029R-C5; Thu, 22 Jul 2021 23:36:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159904.294092; Thu, 22 Jul 2021 23:36:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6iFJ-00029I-8S; Thu, 22 Jul 2021 23:36:53 +0000
Received: by outflank-mailman (input) for mailman id 159904;
 Thu, 22 Jul 2021 23:36:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ltuv=MO=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6iFH-0001Fn-Cg
 for xen-devel@lists.xenproject.org; Thu, 22 Jul 2021 23:36:51 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ad21ea5a-eb45-11eb-915d-12813bfff9fa;
 Thu, 22 Jul 2021 23:36:45 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id E7F2960EB9;
 Thu, 22 Jul 2021 23:36:44 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ad21ea5a-eb45-11eb-915d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1626997005;
	bh=6TReV4Pdjfx3WD5lh4CLVkGlPCvVlrwBPMhSYNdvOVM=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=lYd1xnzV0XCaves7HoNXnS/51OFkEUGhQNQpW03IZ1wp4dWpCpTvl4zRdCH2Fb3V7
	 0jt4o/EI0KhbBIFX7YYfX6xqF5bknn60kmzBTduspXEGonyUXr94Jrf+YbU+yqADOM
	 ZsMY/JaseJrRHDGMQkeTKjzi5D5bb4RuiZvBwnYUkYNTIanEfttj1dSuU9ZKyi3hAQ
	 oJ4OJJWcKBXarAMawwoKUcquuBXb3D95gYeksrP4NS+O4DCLmf6nbkZ0Vr0kQeubcn
	 gP+1qxnXoToT621XZbVzdQ4VOl9aHXlwu+kUU5oOctTXJk2sMXlC9nALkOFLE8VwiD
	 l5R/NsAHX1ozA==
From: Stefano Stabellini <sstabellini@kernel.org>
To: xen-devel@lists.xenproject.org
Cc: sstabellini@kernel.org,
	julien@xen.org,
	Bertrand.Marquis@arm.com,
	Volodymyr_Babchuk@epam.com,
	rahul.singh@arm.com,
	brian.woods@xilinx.com,
	Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: [PATCH v5 3/4] arm,smmu: restructure code in preparation to new bindings support
Date: Thu, 22 Jul 2021 16:36:41 -0700
Message-Id: <20210722233642.22515-3-sstabellini@kernel.org>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>

From: Brian Woods <brian.woods@xilinx.com>

Restructure some of the code and add supporting functions for adding
generic device tree (DT) binding support.  This will allow for using
current Linux device trees with just modifying the chosen field to
enable Xen.

Signed-off-by: Brian Woods <brian.woods@xilinx.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Acked-by: Julien Grall <jgrall@amazon.com>
---
 xen/drivers/passthrough/arm/smmu.c | 62 ++++++++++++++++--------------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
index 09773702c3..4aa3ecec57 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -812,53 +812,36 @@ static int insert_smmu_master(struct arm_smmu_device *smmu,
 	return 0;
 }
 
-static int register_smmu_master(struct arm_smmu_device *smmu,
-				struct device *dev,
-				struct of_phandle_args *masterspec)
+static int arm_smmu_dt_add_device_legacy(struct arm_smmu_device *smmu,
+					 struct device *dev,
+					 struct iommu_fwspec *fwspec)
 {
-	int i, ret = 0;
+	int i;
 	struct arm_smmu_master *master;
-	struct iommu_fwspec *fwspec;
+	struct device_node *dev_node = dev_get_dev_node(dev);
 
-	master = find_smmu_master(smmu, masterspec->np);
+	master = find_smmu_master(smmu, dev_node);
 	if (master) {
 		dev_err(dev,
 			"rejecting multiple registrations for master device %s\n",
-			masterspec->np->name);
+			dev_node->name);
 		return -EBUSY;
 	}
 
 	master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
 	if (!master)
 		return -ENOMEM;
-	master->of_node = masterspec->np;
-
-	ret = iommu_fwspec_init(&master->of_node->dev, smmu->dev);
-	if (ret) {
-		kfree(master);
-		return ret;
-	}
-
-	/* adding the ids here */
-	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
-				   masterspec->args,
-				   masterspec->args_count);
-	if (ret)
-		return ret;
-
-	fwspec = dev_iommu_fwspec_get(dev);
+	master->of_node = dev_node;
 
 	/* Xen: Let Xen know that the device is protected by an SMMU */
-	dt_device_set_protected(masterspec->np);
+	dt_device_set_protected(dev_node);
 
 	for (i = 0; i < fwspec->num_ids; ++i) {
-		u16 streamid = masterspec->args[i];
-
 		if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
-		     (streamid >= smmu->num_mapping_groups)) {
+		     (fwspec->ids[i] >= smmu->num_mapping_groups)) {
 			dev_err(dev,
 				"stream ID for master device %s greater than maximum allowed (%d)\n",
-				masterspec->np->name, smmu->num_mapping_groups);
+				dev_node->name, smmu->num_mapping_groups);
 			return -ERANGE;
 		}
 		master->cfg.smendx[i] = INVALID_SMENDX;
@@ -866,6 +849,29 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
 	return insert_smmu_master(smmu, master);
 }
 
+static int register_smmu_master(struct arm_smmu_device *smmu,
+				struct device *dev,
+				struct of_phandle_args *masterspec)
+{
+	int ret = 0;
+	struct iommu_fwspec *fwspec;
+
+	ret = iommu_fwspec_init(&masterspec->np->dev, smmu->dev);
+	if (ret)
+		return ret;
+
+	ret = iommu_fwspec_add_ids(&masterspec->np->dev,
+				   masterspec->args,
+				   masterspec->args_count);
+	if (ret)
+		return ret;
+
+	fwspec = dev_iommu_fwspec_get(&masterspec->np->dev);
+	return arm_smmu_dt_add_device_legacy(smmu,
+					     &masterspec->np->dev,
+					     fwspec);
+}
+
 static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
 {
 	struct arm_smmu_device *smmu;
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 02:26:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 02:26:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159931.294116 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ktO-00064m-Ct; Fri, 23 Jul 2021 02:26:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159931.294116; Fri, 23 Jul 2021 02:26:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6ktO-00064e-7a; Fri, 23 Jul 2021 02:26:26 +0000
Received: by outflank-mailman (input) for mailman id 159931;
 Fri, 23 Jul 2021 02:26:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6ktN-00064U-PI; Fri, 23 Jul 2021 02:26:25 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6ktN-0001r8-ED; Fri, 23 Jul 2021 02:26:25 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6ktN-00073t-4W; Fri, 23 Jul 2021 02:26:25 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6ktN-0006Nf-40; Fri, 23 Jul 2021 02:26:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=+Yd4XZ/KwBbn/cbRqT2sc5FWi9PO2N3kjDHDfDLA8bg=; b=n5N82z2BK/24UIKGrhmf28zOpj
	V9NgFpghbrbYZEBoxaSPcFjas0zAFTiG/AxyTX8LRv7khNypt8Hkc4McCoP7Iv+6paG1Y8TWnbwbO
	nLjPArRIRTXDIHDCQn+wcYW6qGvqi35xF+1oKMokx3nHV9v4aW+ispqDx7OKN9xjSzPY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163916-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163916: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl-vhd:xen-boot:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=9f42f674a89200d4f465a7db6070e079f3c6145f
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 02:26:25 +0000

flight 163916 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163916/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl-vhd       8 xen-boot                 fail REGR. vs. 152332
 test-amd64-amd64-examine      4 memdisk-try-append       fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                9f42f674a89200d4f465a7db6070e079f3c6145f
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  356 days
Failing since        152366  2020-08-01 20:49:34 Z  355 days  607 attempts
Testing same since   163916  2021-07-22 19:41:30 Z    0 days    1 attempts

------------------------------------------------------------
6711 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 1981573 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 02:27:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 02:27:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159936.294131 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6kuH-0006dE-Lz; Fri, 23 Jul 2021 02:27:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159936.294131; Fri, 23 Jul 2021 02:27:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6kuH-0006d7-It; Fri, 23 Jul 2021 02:27:21 +0000
Received: by outflank-mailman (input) for mailman id 159936;
 Fri, 23 Jul 2021 02:27:20 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6kuG-0006cv-2v; Fri, 23 Jul 2021 02:27:20 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6kuF-0001ro-Rf; Fri, 23 Jul 2021 02:27:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6kuE-00075m-TV; Fri, 23 Jul 2021 02:27:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6kuE-0007jy-St; Fri, 23 Jul 2021 02:27:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=xk6dDE+Ky6fj+oGbo+sW66x6bahkK8xC3O/46W6X9c0=; b=Riq7GMAgbxBhEwaXqxsS4+NBkB
	AR7EgVOFmN5WJZWCZvIA9pfwUYQQj2LxyLwolJQ2O1v4WngCFkjfrvoMWvb+c1I/sebRBQS+/MDDx
	z17FRh9LtrkY/XWnIjX+qYLzRUFgeE4AtzEqDFGJkeBpFLPnmCxgKtobuTqvpEnRtjbY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163917-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163917: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 02:27:18 +0000

flight 163917 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163917/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   48 days
Failing since        162368  2021-06-04 15:42:59 Z   48 days  131 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 04:47:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 04:47:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159956.294170 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6n68-00072L-5S; Fri, 23 Jul 2021 04:47:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159956.294170; Fri, 23 Jul 2021 04:47:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6n68-00072E-1M; Fri, 23 Jul 2021 04:47:44 +0000
Received: by outflank-mailman (input) for mailman id 159956;
 Fri, 23 Jul 2021 04:47:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=+AEX=MP=gmail.com=scottwd@srs-us1.protection.inumbo.net>)
 id 1m6n66-00071s-Pl
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 04:47:42 +0000
Received: from mail-qt1-x82e.google.com (unknown [2607:f8b0:4864:20::82e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b09c96c1-7e35-4ba0-bc42-0e723b92cc1c;
 Fri, 23 Jul 2021 04:47:40 +0000 (UTC)
Received: by mail-qt1-x82e.google.com with SMTP id t18so881972qta.8
 for <xen-devel@lists.xenproject.org>; Thu, 22 Jul 2021 21:47:40 -0700 (PDT)
Received: from lagunitas.localdomain
 (96-95-26-25-static.hfc.comcastbusiness.net. [96.95.26.25])
 by smtp.gmail.com with ESMTPSA id m80sm10944305qke.98.2021.07.22.21.47.38
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 22 Jul 2021 21:47:39 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b09c96c1-7e35-4ba0-bc42-0e723b92cc1c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=4Xr145TI2CgrKyzYfPGBN4fzjFjCjp40PVLz07IZctU=;
        b=AJY9BaKhn6LyJy4sMLYVkBz8z4XeJ9rGWTlVupGmznEqi87Q1KYFCwIQc9Z1STsc/h
         LF/QfDs2msFaYq0ONX3RMIV030HP0ksquNhzZZd/8VS+ANTJKsm2IOJmyk2zLw1rzVx1
         NpawiBtdiFh+iydzMDd79Lby5+IePzQAn4gPwom0fd0IQ9c2dGZmXnp0QM9NGztk3AHi
         +fesrYURTnBk+AjDQy/5qHSKGwu9D3GCGgz8jT/2XC6YPc/EV9ob3Ky3wFsemdhrlWZZ
         C3IoOY4Y7+sQXIlCrB05kb86G+Ou0duHm4206J5oxRiSJYBy3BnFQs/1ecJ4djt3l5BJ
         K/2g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=4Xr145TI2CgrKyzYfPGBN4fzjFjCjp40PVLz07IZctU=;
        b=tmlwcNZQmGrxQdo0FEqcsJ/K/zliw7z0+EhJ1X+eMzZi5hM+zO9BuewWUvHlhajtVR
         cCV4gc1bNaS8XILKNlPw2TGaN50LaQALjPRZWu6RLthAh6bS5TDFwjR4YKBysfpUadH/
         A6su9Jmk5X5fIJg6Mce6XXB+WDxIQDEGnIyWEJ7/qVNcrhGhrHZTQ7tHH/dlF2TPMUlt
         HoWJLTeGWoORJx8Lp2MYkIiHy0saqWzlEWEXxTlxjpRwBkZGwFniXmzRf13HhkvlCsM7
         YGIeRrclVhojTTPp7Fxt/R0+mEgCVVYkuS++Cyl1o3DSD1PWcsECwtc0+xdtdm7wKQn8
         bYxQ==
X-Gm-Message-State: AOAM530PKqFgdbvor+HmSdG5al1/dJ8CxKY3S7X+VVFrAS7RHsisEcOi
	rMzjPOMqctTRqAzd6iK/YRXJbG6VCnE66ELT
X-Google-Smtp-Source: ABdhPJzaKp9KvQaPQndY2rsSv/A28qX6xb34YArCSGZ3epgpQXyp9CwARt67GUwQHip0PloQHgLoTQ==
X-Received: by 2002:a05:622a:1987:: with SMTP id u7mr2506309qtc.45.1627015660104;
        Thu, 22 Jul 2021 21:47:40 -0700 (PDT)
From: Scott Davis <scottwd@gmail.com>
X-Google-Original-From: Scott Davis <scott.davis@starlab.io>
To: xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	"Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel option to xl.cfg
Date: Fri, 23 Jul 2021 00:47:31 -0400
Message-Id: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This adds an option to the xl domain configuration syntax for specifying
a build-time XSM security label for device-model stubdomains separate from
the run-time label specified by 'device_model_stubdomain_seclabel'. Fields
are also added to the 'libxl_domain_build_info' struct to contain the new
information, and a new call to 'xc_flask_relabel_domain' inserted to
affect the change at the appropriate time.

The implementation mirrors that of the 'seclabel' and 'init_seclabel'
options for user domains. When all used in concert, this enables the
creation of security policies that minimize run-time privileges between
the toolstack domain, device-model stubdomains, and user domains.

Signed-off-by: Scott Davis <scott.davis@starlab.io>
---
 docs/man/xl.cfg.5.pod.in             | 10 ++++++++++
 tools/golang/xenlight/helpers.gen.go |  5 +++++
 tools/golang/xenlight/types.gen.go   |  2 ++
 tools/include/libxl.h                | 10 ++++++++++
 tools/libs/light/libxl_create.c      | 28 ++++++++++++++++++++++++++--
 tools/libs/light/libxl_dm.c          | 14 +++++++++-----
 tools/libs/light/libxl_types.idl     |  2 ++
 tools/xl/xl_parse.c                  | 12 +++++++++++-
 8 files changed, 75 insertions(+), 8 deletions(-)

diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
index 56370a37db..3458d357fc 100644
--- a/docs/man/xl.cfg.5.pod.in
+++ b/docs/man/xl.cfg.5.pod.in
@@ -2762,6 +2762,16 @@ you have selected.
 
 Assign an XSM security label to the device-model stubdomain.
 
+=item B<device_model_stubdomain_init_seclabel="LABEL">
+
+Specify a temporary XSM security label for the device-model stubdomain used
+during creation of it and its associated guest. The stubdomain's XSM label will
+then be changed to the execution seclabel (as specified by
+B<device_model_stubdomain_seclabel>) once creation is complete, prior to
+unpausing the stubdomain's guest. With proper (re)labeling, a security policy
+can be constructed that minimizes run-time privileges between the toolstack
+domain, device-model stubdomains, and user domains.
+
 =item B<device_model_args=[ "ARG", "ARG", ...]>
 
 Pass additional arbitrary options on the device-model command
diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
index db82537b42..e961cb5f75 100644
--- a/tools/golang/xenlight/helpers.gen.go
+++ b/tools/golang/xenlight/helpers.gen.go
@@ -1022,6 +1022,8 @@ x.StubdomainRamdisk = C.GoString(xc.stubdomain_ramdisk)
 x.DeviceModel = C.GoString(xc.device_model)
 x.DeviceModelSsidref = uint32(xc.device_model_ssidref)
 x.DeviceModelSsidLabel = C.GoString(xc.device_model_ssid_label)
+x.DeviceModelExecSsidref = uint32(xc.device_model_exec_ssidref)
+x.DeviceModelExecSsidLabel = C.GoString(xc.device_model_exec_ssid_label)
 x.DeviceModelUser = C.GoString(xc.device_model_user)
 if err := x.Extra.fromC(&xc.extra);err != nil {
 return fmt.Errorf("converting field Extra: %v", err)
@@ -1351,6 +1353,9 @@ xc.device_model = C.CString(x.DeviceModel)}
 xc.device_model_ssidref = C.uint32_t(x.DeviceModelSsidref)
 if x.DeviceModelSsidLabel != "" {
 xc.device_model_ssid_label = C.CString(x.DeviceModelSsidLabel)}
+xc.device_model_exec_ssidref = C.uint32_t(x.DeviceModelExecSsidref)
+if x.DeviceModelExecSsidLabel != "" {
+xc.device_model_exec_ssid_label = C.CString(x.DeviceModelExecSsidLabel)}
 if x.DeviceModelUser != "" {
 xc.device_model_user = C.CString(x.DeviceModelUser)}
 if err := x.Extra.toC(&xc.extra); err != nil {
diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
index a214dd9df6..45061d1afa 100644
--- a/tools/golang/xenlight/types.gen.go
+++ b/tools/golang/xenlight/types.gen.go
@@ -487,6 +487,8 @@ StubdomainRamdisk string
 DeviceModel string
 DeviceModelSsidref uint32
 DeviceModelSsidLabel string
+DeviceModelExecSsidref uint32
+DeviceModelExecSsidLabel string
 DeviceModelUser string
 Extra StringList
 ExtraPv StringList
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index ae7fe27c1f..62b69222f6 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1069,6 +1069,16 @@ typedef struct libxl__ctx libxl_ctx;
  */
 #define LIBXL_HAVE_SSID_LABEL 1
 
+/*
+ * LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN_EXEC_SSID
+ *
+ * If this is defined, then the libxl_domain_build_info structure will
+ * contain 'device_model_exec_ssidref' and 'device_model_exec_ssid_label' for
+ * specifying a run-time XSM security label separate from the build-time label
+ * specified in 'device_model_ssidref' and 'device_model_ssid_label'.
+ */
+#define LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN_EXEC_SSID 1
+
 /*
  * LIBXL_HAVE_CPUPOOL_NAME
  *
diff --git a/tools/libs/light/libxl_create.c b/tools/libs/light/libxl_create.c
index e356b2106d..a12da5531d 100644
--- a/tools/libs/light/libxl_create.c
+++ b/tools/libs/light/libxl_create.c
@@ -1060,13 +1060,31 @@ int libxl__domain_config_setdefault(libxl__gc *gc,
         char *s = d_config->b_info.device_model_ssid_label;
         ret = libxl_flask_context_to_sid(ctx, s, strlen(s),
                                          &d_config->b_info.device_model_ssidref);
+        if (ret) {
+            if (errno == ENOSYS) {
+                LOGD(WARN, domid,
+                     "XSM Disabled: device_model_stubdomain_init_seclabel not supported");
+                ret = 0;
+            } else {
+                LOGD(ERROR, domid,
+                     "Invalid device_model_stubdomain_init_seclabel: %s", s);
+                goto error_out;
+            }
+        }
+    }
+
+    if (d_config->b_info.device_model_exec_ssid_label) {
+        char *s = d_config->b_info.device_model_exec_ssid_label;
+        ret = libxl_flask_context_to_sid(ctx, s, strlen(s),
+                                         &d_config->b_info.device_model_exec_ssidref);
         if (ret) {
             if (errno == ENOSYS) {
                 LOGD(WARN, domid,
                      "XSM Disabled: device_model_stubdomain_seclabel not supported");
                 ret = 0;
             } else {
-                LOGD(ERROR, domid, "Invalid device_model_stubdomain_seclabel: %s", s);
+                LOGD(ERROR, domid,
+                     "Invalid device_model_stubdomain_seclabel: %s", s);
                 goto error_out;
             }
         }
@@ -1935,7 +1953,13 @@ static void domcreate_complete(libxl__egc *egc,
     libxl__domain_build_state_dispose(&dcs->build_state);
 
     if (!rc && d_config->b_info.exec_ssidref)
-        rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid, d_config->b_info.exec_ssidref);
+        rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid,
+                                     d_config->b_info.exec_ssidref);
+
+    if (!rc && dcs->sdss.pvqemu.guest_domid != INVALID_DOMID &&
+        d_config->b_info.device_model_exec_ssidref)
+        rc = xc_flask_relabel_domain(CTX->xch, dcs->sdss.pvqemu.guest_domid,
+                                     d_config->b_info.device_model_exec_ssidref);
 
     bool retain_domain = !rc || rc == ERROR_ABORTED;
 
diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index dbd3c7f278..2b69b207c4 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -2300,20 +2300,24 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
     sdss->pvqemu.guest_domid = INVALID_DOMID;
 
     libxl_domain_create_info_init(&dm_config->c_info);
+    libxl_domain_build_info_init(&dm_config->b_info);
+    libxl_domain_build_info_init_type(&dm_config->b_info, LIBXL_DOMAIN_TYPE_PV);
+
     dm_config->c_info.type = LIBXL_DOMAIN_TYPE_PV;
     dm_config->c_info.name = libxl__stub_dm_name(gc,
                                     libxl__domid_to_name(gc, guest_domid));
-    /* When we are here to launch stubdom, ssidref is a valid value
-     * already, no need to parse it again.
+
+    /* When we are here to launch stubdom, ssidrefs are valid values already,
+     * no need to parse them again.
      */
     dm_config->c_info.ssidref = guest_config->b_info.device_model_ssidref;
     dm_config->c_info.ssid_label = NULL;
+    dm_config->b_info.exec_ssidref =
+        guest_config->b_info.device_model_exec_ssidref;
+    dm_config->b_info.exec_ssid_label = NULL;
 
     libxl_uuid_generate(&dm_config->c_info.uuid);
 
-    libxl_domain_build_info_init(&dm_config->b_info);
-    libxl_domain_build_info_init_type(&dm_config->b_info, LIBXL_DOMAIN_TYPE_PV);
-
     dm_config->b_info.shadow_memkb = 0;
     dm_config->b_info.max_vcpus = 1;
     dm_config->b_info.max_memkb = guest_config->b_info.stubdomain_memkb;
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index f45adddab0..b483729b9c 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -528,6 +528,8 @@ libxl_domain_build_info = Struct("domain_build_info",[
     ("device_model",     string),
     ("device_model_ssidref", uint32),
     ("device_model_ssid_label", string),
+    ("device_model_exec_ssidref",    uint32),
+    ("device_model_exec_ssid_label", string),
     ("device_model_user", string),
 
     # extra parameters pass directly to qemu, NULL terminated
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 9fb0791429..236f8b2fc0 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -2523,10 +2523,20 @@ skip_usbdev:
     xlu_cfg_get_defbool (config, "device_model_stubdomain_override",
                          &b_info->device_model_stubdomain, 0);
 
-    if (!xlu_cfg_get_string (config, "device_model_stubdomain_seclabel",
+    if (!xlu_cfg_get_string (config, "device_model_stubdomain_init_seclabel",
                              &buf, 0))
+        xlu_cfg_replace_string(config, "device_model_stubdomain_init_seclabel",
+                               &b_info->device_model_ssid_label, 0);
+
+    if (!xlu_cfg_get_string (config, "device_model_stubdomain_seclabel",
+                             &buf, 0)) {
+        if (b_info->device_model_ssid_label)
+            xlu_cfg_replace_string(config, "device_model_stubdomain_seclabel",
+                                   &b_info->device_model_exec_ssid_label, 0);
+        else
             xlu_cfg_replace_string(config, "device_model_stubdomain_seclabel",
                                    &b_info->device_model_ssid_label, 0);
+    }
 
     xlu_cfg_replace_string(config, "device_model_user",
                            &b_info->device_model_user, 0);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 05:08:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 05:08:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159964.294181 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6nPs-0001yK-1C; Fri, 23 Jul 2021 05:08:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159964.294181; Fri, 23 Jul 2021 05:08:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6nPr-0001yD-UX; Fri, 23 Jul 2021 05:08:07 +0000
Received: by outflank-mailman (input) for mailman id 159964;
 Fri, 23 Jul 2021 05:08:06 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6nPq-0001y3-HF; Fri, 23 Jul 2021 05:08:06 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6nPq-0004hj-9w; Fri, 23 Jul 2021 05:08:06 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6nPp-00045X-Ub; Fri, 23 Jul 2021 05:08:06 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6nPp-0007xX-U8; Fri, 23 Jul 2021 05:08:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=S+eKmY5ffi4f25S+ojc1CJf6LjawFbyNI3zVmwPMnHE=; b=n06ddv8NAlsehtmXsfvyFw4gz9
	h2IFtZ0lBXRLvDPfcxTDsOhfsfXLMBNl8J6p5y3TFTGXj8SWh0FTzHgneUU/rtpruu7MyV4FB4Xp6
	qiVrzyRFkgxBKTWzhkUl2fuvwBPcmfbXrATlejMW18qpCEDnQsTOIinVhItYhmpO4oyw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163922-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163922: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=beb191385882a2a283ce777d76b1a77e71813d14
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 05:08:05 +0000

flight 163922 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163922/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                beb191385882a2a283ce777d76b1a77e71813d14
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   17 days
Failing since        163327  2021-07-06 12:39:04 Z   16 days   30 attempts
Testing same since   163912  2021-07-22 17:07:03 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Cole Robinson <crobinso@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Snow <jsnow@redhat.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  Yang Zhong <yang.zhong@intel.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 12376 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 06:25:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 06:25:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159976.294209 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6oby-0003AN-Oa; Fri, 23 Jul 2021 06:24:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159976.294209; Fri, 23 Jul 2021 06:24:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6oby-0003AG-LJ; Fri, 23 Jul 2021 06:24:42 +0000
Received: by outflank-mailman (input) for mailman id 159976;
 Fri, 23 Jul 2021 06:24:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=WrFY=MP=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m6obx-0003AA-S4
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 06:24:41 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a8b426e8-eb7e-11eb-9277-12813bfff9fa;
 Fri, 23 Jul 2021 06:24:40 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2056.outbound.protection.outlook.com [104.47.14.56]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-27-9E6quH_oMDOpTfkDhw5yUA-1; Fri, 23 Jul 2021 08:24:37 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR0402MB3934.eurprd04.prod.outlook.com (2603:10a6:803:1b::29)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Fri, 23 Jul
 2021 06:24:36 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4352.025; Fri, 23 Jul 2021
 06:24:36 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 PR0P264CA0217.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Fri, 23 Jul 2021 06:24:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a8b426e8-eb7e-11eb-9277-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1627021479;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=zmeApPHhlgFHu91apKk0n7x5cvV6anvVNM0ZknI1MXU=;
	b=bdfeEr0afPC8LYpSr2jJBHZ1TDvcK4J1z9ifU/RMu5HqkJkuUqD1n3DrtXETArl2cCZS0A
	L7T85r3BI7TZf3Kap2RDn/gbus3u3PVzzl7cmFiuwaE9LYHk7AYSHcWfT70us1mXrTMaeA
	cTQ1kXPpnBIzcyMMNq2Big8Vf/+Joiw=
X-MC-Unique: 9E6quH_oMDOpTfkDhw5yUA-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JOvgyH5MIvtrciEU+xVPrfTrE04V15cTDAnobGJwDsclbS/pki0vlXHHnOJVJ01kFIDFRAR9fyDbq9riAmzF8C1H65f91Ga6iNsKC/6sctbvKFJjjnG/ARQYl3Lx66ESTRV8yNGvyUlU1swr3NV7J1+zY2728/iWBLJoiUtPxIFkAnMeJNvRjVb+br4pXbj3H9fBuFU6b30x/0uYmS2cBOEIjw3sdtIRbavspNBKIOuy/FJIDJXnnOuVyI1Ke9P/5O3dEHZ9EeLlXRzB3mXjd25QQhNntTCtIIJjUnBlYHliPbWzzAWQZJWv+orpKN8PpXTEtTm8QRlUKOV8j3BHlA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zmeApPHhlgFHu91apKk0n7x5cvV6anvVNM0ZknI1MXU=;
 b=YuM/VxK2dKPnwR3jPJasGcvbcvnggPCpnSMzxlMSpK3WApZbaTCatq4fYI+hDeuR5oMYs1Oquhy3I9J+s2wJN3dodP6Et1b0NANE4b3iTZyDJ2hltgjyK6Y/fP/d0vdClAiE8GYAQOFoFUQriP3DyE851ILzcO2hE3OORZdSfOXweazpe+Pwpm9sYb8zX/kvtKPfNLwpmIqdbA0Ie6oQkEjrPZcMh3R3TojtckAaK4r8SaTxHIKQADxw+QE076lVF3h34ZWwnMvMNrHVRnSfcTUg1TUwfS2v1Bzg15jjp82TOvFkjZ/WH+6wppvGUvezcZFXdTB6ejeSTqkhG4Nxtw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: your change "iommu: make map and unmap take a page count, similar
 to flush"
To: paul@xen.org
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
References: <185f185b-443b-bea4-5068-b9ed763a4c2f@suse.com>
 <0553727e-5dd3-23d1-6698-01b8bcb5dd1f@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <d002358b-3b8a-6911-2ba2-c93c4aff38f7@suse.com>
Date: Fri, 23 Jul 2021 08:24:33 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <0553727e-5dd3-23d1-6698-01b8bcb5dd1f@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: PR0P264CA0217.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::13) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b7b7311b-d204-48c2-a1d4-08d94da28ad2
X-MS-TrafficTypeDiagnostic: VI1PR0402MB3934:
X-Microsoft-Antispam-PRVS:
	<VI1PR0402MB3934174898F64B272CCC1A98B3E59@VI1PR0402MB3934.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	vETFtWLuUcryKlGVvtEq8wLStQRHw/hATeDGpOnubaFPsgVGHDjAZ/xrBBKVRDZ1MjET+Q1pUXjATywMsHR6cGfm8z0XyN70v3onwy3df7wsX/VVRdfNzxiYYF7nVo4xPv5ms8YsHkq+Zt0M8CsyLHjwSIJi1mn8PaT7aIiSQLJpESNmjK/0SF9+APP+N26I6fhxtftnt47EkaOAB96l4rFn+UzhNHQGsiy7urWMXzyvNr2dBGXlNwklP0QHiMxbqROQ5g4yx6m6qQkDqj+ORSsXnu4UbJcfmW+3Ca51BCLG0m2hqzcnCWFbZicHElEAP/xyUj1A5cCe6PVYCScBKM+5FRPuwCvjjUfqcQydrR2LaremhDoUK6KTOBh3kb3mQK9ydWLQIbP1grFg1o5VLH6E163Mdy36b69I9vpZmIF6HS4Lqzei0ZwQzfVXUi5TkEYIyndEp+q1ATwwhy1opneUz6mXCpuGVag1uRbBbdRp05QADZDckL/9Kd5oInCbCG1LO4uIVdyjQwnss4HLzqCIKaCx0cDnw2AyXwH9SunlShPBxT3STRfIc/5UCsFiCeO/iDuxQ+KIvjz8/mdEQkxVsUppdA3V126P0dRDF9r87WlXCdoX/Sf8dzD3pOomIkjGWbZyyz4U4EsFVs8t+jB/yctXQDwxm1Rj1prOukd+AlYNjdNeHMOw9fWjgKF2levV3BNpl/ZOwJ1Irch8lcYygK3n3+zetlwWTsYLHwI=
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(39860400002)(376002)(396003)(346002)(4326008)(83380400001)(316002)(66946007)(6486002)(8676002)(16576012)(26005)(478600001)(31686004)(31696002)(38100700002)(86362001)(2906002)(186003)(36756003)(2616005)(956004)(66476007)(66556008)(6916009)(8936002)(5660300002)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?UpABWAMv+r5mpJ37n63UPpecto/Zh/K9OpbmF0s?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b7b7311b-d204-48c2-a1d4-08d94da28ad2
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2021 06:24:35.9665
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 3IaDUBk+Qvd9X1VOjU/d0B27eXsrHSrnJKHQvgJcSzyRi+BqoHjWCHUDud17OVuj+PYsACxG0mS9JhAcpxQ5bg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3934

On 21.07.2021 18:53, Paul Durrant wrote:
> On 21/07/2021 16:58, Jan Beulich wrote:
>> Paul,
>>
>> the description of this says
>>
>> "At the moment iommu_map() and iommu_unmap() take a page order rather than a
>>   count, whereas iommu_iotlb_flush() takes a page count rather than an order.
>>   This patch makes them consistent with each other, opting for a page count since
>>   CPU page orders are not necessarily the same as those of an IOMMU."
>>
>> I don't understand the latter sentence at all, now that I read it again.
>> What may differ is the base page size, but that affects counts of pages
>> and page order all the same.
> 
> What it's supposed to mean is that a CPU may e.g. have page orders 0 
> (4k) , 9 (2M), etc. but the IOMMU may not use the same orders. And by 
> page count it means a count of (CPU) order 0 pages (which I assume all 
> IOMMUs will support).

Oh, that's still somewhat odd. Which particular (higher) orders an IOMMU
variant supports should be of no interest in what the generic layer
passes down. For example in reality the AMD IOMMUs support all page
orders, by allowing "non-default page size" through a leaf level setting
of 7. I'd therefore expect the generic layer to pass down arbitrary
order values, with the vendor code needing to split the request if
necessary.

The only thing that the generic layer needs to know is the base page
size, because it can't request mappings that are finer grained than
that. But perhaps for the immediate purpose we can continue to assume
a common base page size of 4k.

>> I'm intending to make an attempt to cut through the page order (or
>> count) to the actual vendor functions, in order to then be able to
>> establish large page mappings where possible. In all cases (perhaps
>> most noticable on Arm) handing them a page order would seem easier, so
>> I was considering to have iommu_{,un}map() do that step of abstraction
>> (or transformation). But since you did explicitly convert from order to
>> count, I was wondering whether me following this plan would cause
>> problems with any of your further intentions back then.
>>
>> If we really wanted to cater for base page size varying between CPU and
>> IOMMU, besides the IOMMU vendor code needing to announce their value, I
>> guess we'd have to do quite a bit more abstracting work, as it would
>> matter to outer layers in particular if the IOMMU base page size was
>> larger than the CPU's.
> 
> Yes, if the order 0 page size was different between IOMMU and MMU then 
> that would clearly be more tricky to deal with.
> 
>> Supporting just smaller IOMMU base page sizes,
>> otoh, would seem entirely feasible to deal with inside the rework of
>> iommu_{,un}map() as mentioned above.
>>
> 
> Yes. The aim of the patch was really only to make the calls consistent. 
> Changing all of them to use an order rather than a count would be ok too 
> I think.

I'll go check whether all the flush operations would convert cleanly,
and if so I may indeed move things back and beyond.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 06:32:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 06:32:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159983.294221 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6oj1-0004yE-M6; Fri, 23 Jul 2021 06:31:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159983.294221; Fri, 23 Jul 2021 06:31:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6oj1-0004y7-J7; Fri, 23 Jul 2021 06:31:59 +0000
Received: by outflank-mailman (input) for mailman id 159983;
 Fri, 23 Jul 2021 06:31:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=WrFY=MP=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m6oiz-0004y1-QR
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 06:31:57 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1e596dc6-efe7-4ff0-9e1c-469cabc879d2;
 Fri, 23 Jul 2021 06:31:56 +0000 (UTC)
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 (mail-am6eur05lp2113.outbound.protection.outlook.com [104.47.18.113])
 (Using TLS) by relay.mimecast.com with ESMTP id
 de-mta-4-Kdp5ZQ2LO0qCCNlYN_KBeg-1; Fri, 23 Jul 2021 08:31:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB5325.eurprd04.prod.outlook.com (2603:10a6:803:60::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Fri, 23 Jul
 2021 06:31:53 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4352.025; Fri, 23 Jul 2021
 06:31:53 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM0PR02CA0171.eurprd02.prod.outlook.com (2603:10a6:20b:28e::8) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.25 via Frontend Transport; Fri, 23 Jul 2021 06:31:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1e596dc6-efe7-4ff0-9e1c-469cabc879d2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1627021915;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=aGhPHyAOH4xHo0Etys8GzaCa69y9fc8GbAxJTiPSapc=;
	b=Tn8fM6tahP5e0R94X6h6Nav5FmvkoWmkjwRzXsuzGRpU1gyKxjM/tJQKvKIi+DrJRLEViU
	tFQY27Ox87gz1QXri0hm3dIvc2tf5gMdA1oYeBpf1kh9ev7FYHGynn6HNHX6upvT7ovHUz
	a7oJDmV+pood65j6ANy7XY+Qjz05Cro=
X-MC-Unique: Kdp5ZQ2LO0qCCNlYN_KBeg-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WcXLYPr9IzLG7HOtuCZq84aFOMdMGw6JWb+N5wT5UndDO/uWN+/mbgv0w7bY/+c/wciwdJ5wKDh+bRMDvWSNShNGZMniFa2N0OBZEig+As0egSXQ+bn3++Sy6YNzrcCcMdlq/wRcpelBzuCny6Q1Xi9TKvbnHSxoI5tdRdd3p1/CX/uDr5+cxV/gMtcItU92lTz4NtWIk07jw/Oh3TXdYD5xudWW+qsH0MphNJonR/n7WwauwUkeAsXMUrV4Dndeq+HeYAclLpiZyEy6FaaXapq2ITY/YD/MICwJlts0TBVH00cYbpk0zZA2esErf1hqZZMErnDi/6nw3AEWcjxGEg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=aGhPHyAOH4xHo0Etys8GzaCa69y9fc8GbAxJTiPSapc=;
 b=CMt2T0Kc5GlyV4orQeu2hxk00RJ6ccs8wzH1wqVvb1AVnw+NuKetpip3FrNlLhwjJz1/8OAyt53fzUY4tMed13rq1aXjt1Oxt+FMcKpb5puQXbEv+7lJlqZY7Yg31hSd4u8lqZqe01c0j4STB5PejbbLF88GeUIDmM6xo7JXecJRnPFGV/d/I1n8RfuwPHkq3Iug9e+Rijqgez9O7CBVSvgV68xhHFGJDEQR+Pz+iCkt71SBYkWgtlYD6vnuiCjQk0PYGUocKadFRW8baLzCGCVhvrjQSDG3IodYc8EVlUwnPmCjdynOZtEgefhstM5N578SNc8JWhmCDAy1s6jOng==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=none action=none
 header.from=suse.com;
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: julien@xen.org, Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>,
 xen-devel@lists.xenproject.org
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
 <20210722233642.22515-2-sstabellini@kernel.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <97f0713b-f6bb-72cd-f364-f0d42c868171@suse.com>
Date: Fri, 23 Jul 2021 08:31:50 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210722233642.22515-2-sstabellini@kernel.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM0PR02CA0171.eurprd02.prod.outlook.com
 (2603:10a6:20b:28e::8) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d919531a-e5a8-4fc5-7a5a-08d94da38f60
X-MS-TrafficTypeDiagnostic: VI1PR04MB5325:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB5325DBDD18DE96308C68D6F1B3E59@VI1PR04MB5325.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	R4zS/iVaWqzbeH9rsghLNLDluWDJCkusG2cxhAr48zgO00KoJXinSx5RnI1+XbB6DxH3o0ep2+PuLW9xVJjzsGvdqNzm9PLHmqz6Gc55Bv6GP5rSGDDeYnzRoie2wVP7YV8Jn92dYJbNxRljvkNxqQVfOIN0tpJriIgT2CdX1CYjsQRcdxNMrk6cS8gOEkVy0YjE6jiYbFSkErfLhTlf5RcVFhsqIvYl8th2jEAzq7PHNN8tpvtLBVVKP71vvIAgpjudCQG51sivLNl8/EE1tUVRZ91YyFJ84PyDWUkQK8c/lX8luoR9Jd4Lt8PVvUWOdq/NKTRuaa1c4zoAvBXCcYp+uYc1bU+p8nALfsraZRThHL9avcfFtQj05aIWhr7vpV1my2tRVTxCZyvuaC112jM/d6UCYWsFRz9z5yXvhCmNM82WmxmXw1YaaixNviQlJjbuYXOTTGSoB3iuh1BsTkL4R5z1IquiImmQSiGhQ2+mL/1eR0hHwIswnnqftAE7EZh/hgGT5l3TrzsVmqsSSkomNqh2SnjJBVQjd2+TakRzbjff+XyxqC3eK/UXeaVWShX/CjyuDJvHlvxNw4qZVgNvpL5f4/JjQCbxhjinbLIwEQPCRJIjkjZscy041z0ZHhAurMjjNWs5EiaBO4i3abboSE/ZPzVdR3zhHE2l+8mrmA0T4Fl3cp3yBbZ/2Y+To3ihFlL/8hFTy/xUlM/M3w7QllYsT9ZckzWQSYa0vJQqDloWZYSuSazhUW87im2F
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(376002)(396003)(39860400002)(366004)(136003)(31686004)(83380400001)(6916009)(53546011)(36756003)(2906002)(186003)(26005)(316002)(66556008)(956004)(86362001)(2616005)(4326008)(8936002)(66476007)(478600001)(5660300002)(8676002)(31696002)(16576012)(66946007)(6486002)(38100700002)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
 =?utf-8?Q?Pf/XAkd3b5klGfbTZ6G/qL4/+rFQ10bcbypsZBu?=
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d919531a-e5a8-4fc5-7a5a-08d94da38f60
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2021 06:31:53.1137
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: vwYyDFnYFbZmdRY/8aDz+1rOMSsgeIgCxX56KW/zPL6xlmH/UrX5GDsfcIQ9wJA/g83/VhZn7Xgd5KSTVl6XJw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5325

On 23.07.2021 01:36, Stefano Stabellini wrote:
> --- a/xen/drivers/passthrough/device_tree.c
> +++ b/xen/drivers/passthrough/device_tree.c
> @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
>      if ( !ops )
>          return -EINVAL;
>  
> +    /*
> +     * Some Device Trees may expose both legacy SMMU and generic
> +     * IOMMU bindings together. If both are present, the device
> +     * can be already added.
> +     */
>      if ( dev_iommu_fwspec_get(dev) )
> -        return -EEXIST;
> +        return 0;

Since the xen: prefix in the subject made me go look (I wouldn't have
if it had been e.g. dt: ), I may as well ask: Since previously there
was concern about bogus duplicate entries, does this concern go away
no altogether? It's one thing for there to be a legacy and a generic
binding, but another if you found two legacy or two generic ones, I
would think.

And what if legacy and generic representation differ in some way?
Shouldn't you limit processing to just one of the two categories,
such that no legitimate "already present" case could be encountered
here in the first place?

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 07:01:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 07:01:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.159993.294238 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6pBg-0000kV-1V; Fri, 23 Jul 2021 07:01:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 159993.294238; Fri, 23 Jul 2021 07:01:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6pBf-0000kO-Um; Fri, 23 Jul 2021 07:01:35 +0000
Received: by outflank-mailman (input) for mailman id 159993;
 Fri, 23 Jul 2021 07:01:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6pBe-0000kE-EJ; Fri, 23 Jul 2021 07:01:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6pBe-0006QA-7W; Fri, 23 Jul 2021 07:01:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6pBd-0002Ut-VI; Fri, 23 Jul 2021 07:01:34 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6pBd-0002kE-Us; Fri, 23 Jul 2021 07:01:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=qQpFfvO0TqoDMIKjwbGFzfXVFhmatL7CeVY0hyRHRLU=; b=Nc6YFrOxkWIN5Fw6d7LvgY0rKr
	uXVVEGof8HOOx8Mt9JGBlHAH09MQxGectKdjtkI3r6Yqq+zihRt8evA8m+K1u8fc5H07slL4sSwun
	tqVYzVZshsn/L7xH/BXx+k87n+zyJ3MT6pDtfIpMFo4MRldkRXTDz4+Hy/xACZzUPzP4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163933-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163933: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=19b088cfb95daab724da8a45df229708192e6250
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 07:01:33 +0000

flight 163933 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163933/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              19b088cfb95daab724da8a45df229708192e6250
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  378 days
Failing since        151818  2020-07-11 04:18:52 Z  377 days  369 attempts
Testing same since   163933  2021-07-23 04:18:56 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 65676 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 08:32:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 08:32:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160018.294271 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6qbH-0004Bi-2L; Fri, 23 Jul 2021 08:32:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160018.294271; Fri, 23 Jul 2021 08:32:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6qbG-0004Bb-Vb; Fri, 23 Jul 2021 08:32:06 +0000
Received: by outflank-mailman (input) for mailman id 160018;
 Fri, 23 Jul 2021 08:32:06 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6qbG-0004BV-3m
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 08:32:06 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6qbF-0008Cg-Us; Fri, 23 Jul 2021 08:32:05 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6qbF-0005pS-PK; Fri, 23 Jul 2021 08:32:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=S5RH9tTfPA8QoMYgwOYYW1aPor0eM3oQWmjOWkUNJAI=; b=dzZBADE0dPPE+NB6z7jG3VFTRK
	P5LxukSsfslnq/pHl7oPJI8IFBcQZ6BLVPzCeu4qhDsCGtdJY/c8eY52rBulnj/wWkyLVaOuvASc+
	vroV5Un0mHz+1b6TyK+NpvZ6lR1UmutWsW8uK54GZrwCZMqVCo1e2dXl0dG08qKn4j+M=;
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrii Anisov <Andrii_Anisov@epam.com>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
 <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>
 <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
 <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <88c43f6c-9d76-1cab-93f5-ddecc76b487f@xen.org>
Date: Fri, 23 Jul 2021 09:32:04 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi,

On 22/07/2021 22:39, Stefano Stabellini wrote:
> On Thu, 22 Jul 2021, Julien Grall wrote:
>>> You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
>>> from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
>>> work the same.
>>>
>>> Looking at the boot logs on pastebin I noticed that Xen is not loaded at
>>> a 2MB aligned address. I recommend you change Xen loading address to
>>> 0x500200000. And the kernel loading address to 0x500400000.
>>
>> I am curious to know why you recommend to load at 2MB aligned address. The
>> Image protocol doesn't require to load a 2MB aligned address. In fact, we add
>> issue on Juno because the bootloader would load Xen at a 4KB address. UEFI
>> will also load at a 4KB align address.
> 
> It is from empirical evidence :-)

Right...

> I cannot tell you the exact reason but I saw "strange" problems in the
> past that went away after choosing a 2MB alignment. So we settled for
> using 2MB in ImageBuilder and we haven't seen any more issues.

It would have been good to report such issue back then so it could have 
been analyzed and possibly fixed.

> However, it could have been anything: a bug in U-Boot not relevant
> anymore, a bug in Linux, etc. I don't know for sure.

This is the worrying part. We have a potential bug that no one knows why 
it happened. Can this be reproduced?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 09:13:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 09:13:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160032.294296 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6rFA-00017A-Bu; Fri, 23 Jul 2021 09:13:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160032.294296; Fri, 23 Jul 2021 09:13:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6rFA-000173-8z; Fri, 23 Jul 2021 09:13:20 +0000
Received: by outflank-mailman (input) for mailman id 160032;
 Fri, 23 Jul 2021 09:13:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6rF8-00016t-Pz
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 09:13:18 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6rF5-0000NL-ET; Fri, 23 Jul 2021 09:13:15 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6rF5-0000v0-7z; Fri, 23 Jul 2021 09:13:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=2UcrJwB7dwQ4U9xjgEKZhNPgE8WvL8B8u3P1Bq+n6xM=; b=WM1sixrJOKT21qtEwLDpmw/Ehi
	Zz5mlqCJJuZwuMmZSA2MwSx0lpnTy+2Dls7nTUEn4ZAzW4coUtIvNTjQ59r0GxfdxMf+ggtWCDkt9
	zuylF2O1rJSZExMTsvoVtNd8OLLNgSn+orh7u5C0qciiogwKBQsS/C4nFkG3U9P2skvg=;
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
To: Stefano Stabellini <sstabellini@kernel.org>,
 xen-devel@lists.xenproject.org
Cc: Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
 <20210722233642.22515-2-sstabellini@kernel.org>
From: Julien Grall <julien@xen.org>
Message-ID: <acd7e7b6-7c2b-24d5-da80-042396aee5e8@xen.org>
Date: Fri, 23 Jul 2021 10:13:13 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210722233642.22515-2-sstabellini@kernel.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 23/07/2021 00:36, Stefano Stabellini wrote:
> If both legacy IOMMU bindings and generic bindings are present,
> iommu_add_dt_device can be called twice. Do not return error in that
> case, that way there is no need to check for -EEXIST at the call sites.
> Remove the one existing -EEXIT check, now unneeded.

The commit message implies that we already support both legacy and 
generic bindings. However, this is not yet implemented.

So how about:

"
iommu_add_dt_device() will returns -EEXIST if the device was already 
registered.

At the moment, this can only happen if the device was already assigned 
to a domain (either dom0 at boot or via XEN_DOMCTL_assign_device).

In a follow-up patch, we will convert the SMMU driver to use the FW 
spec. When the legacy bindings are used, all the devices will be 
registered at probe. Therefore, iommu_add_dt_device() will always 
returns -EEXIST.

Currently, one caller (XEN_DOMCTL_assign_device) will check the return 
and ignore -EEXIST. All the other will fail because it was technically a 
programming error.

However, there is no harm to call iommu_add_dt_device() twice, so we can 
simply return 0.

With that in place the caller doesn't need to check -EEXIST anymore, so 
remove the check.
"

> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> ---
> Changes in v5:
> - new patch
> ---
>   xen/drivers/passthrough/device_tree.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
> index 999b831d90..32526ecabb 100644
> --- a/xen/drivers/passthrough/device_tree.c
> +++ b/xen/drivers/passthrough/device_tree.c
> @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
>       if ( !ops )
>           return -EINVAL;
>   
> +    /*
> +     * Some Device Trees may expose both legacy SMMU and generic
> +     * IOMMU bindings together. If both are present, the device
> +     * can be already added.

Wouldn't this also happen when there is just generic bindings? If so, 
shouldn't this patch be first in the series to avoid breaking bisection?

> +     */

My point on the previous version is this is not the only reasons why 
dev_iommu_fwspec_get(). So either we want to write all the reasons 
(AFAICT, there is only two) or we want to write a generic message.

>       if ( dev_iommu_fwspec_get(dev) )
> -        return -EEXIST;
> +        return 0;
>   
>       /*
>        * According to the Documentation/devicetree/bindings/iommu/iommu.txt
> @@ -254,7 +259,7 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct domain *d,
>            * already added to the IOMMU (positive result). Such happens after
>            * re-creating guest domain.
>            */

This comment on top is now stale.

> -        if ( ret < 0 && ret != -EEXIST )
> +        if ( ret < 0 )
>           {
>               printk(XENLOG_G_ERR "Failed to add %s to the IOMMU\n",
>                      dt_node_full_name(dev));
> 

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 09:29:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 09:29:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160042.294308 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6rUN-0003MK-RR; Fri, 23 Jul 2021 09:29:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160042.294308; Fri, 23 Jul 2021 09:29:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6rUN-0003MD-O1; Fri, 23 Jul 2021 09:29:03 +0000
Received: by outflank-mailman (input) for mailman id 160042;
 Fri, 23 Jul 2021 09:29:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6rUM-0003M7-Ht
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 09:29:02 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6rUL-0000dW-WC; Fri, 23 Jul 2021 09:29:02 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6rUL-0001hY-Px; Fri, 23 Jul 2021 09:29:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=XdtI2ne33/KWrPsVUAI0PwK09HhzPkiAyoVrcYB9uoQ=; b=br9NIKDzB6JLNweaHsiEUcLgXs
	kTfbiyiC9ZdbblbYCxEJr8B+uNSQaDQYDUoACNx/To7uiXvwaQmbpedOI7sJ95Mz0pt7/8/t8jWur
	US4oegxqs4E50ElmnXn3Vw4+3KKqDn4AFumz3xeUA1V/H80kWRuQcqo09bRAi56zulfk=;
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
To: Jan Beulich <jbeulich@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>
Cc: Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>,
 xen-devel@lists.xenproject.org
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
 <20210722233642.22515-2-sstabellini@kernel.org>
 <97f0713b-f6bb-72cd-f364-f0d42c868171@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <1df74545-d2fa-2d80-5246-a0b0158550b4@xen.org>
Date: Fri, 23 Jul 2021 10:28:59 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <97f0713b-f6bb-72cd-f364-f0d42c868171@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 23/07/2021 07:31, Jan Beulich wrote:
> On 23.07.2021 01:36, Stefano Stabellini wrote:
>> --- a/xen/drivers/passthrough/device_tree.c
>> +++ b/xen/drivers/passthrough/device_tree.c
>> @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
>>       if ( !ops )
>>           return -EINVAL;
>>   
>> +    /*
>> +     * Some Device Trees may expose both legacy SMMU and generic
>> +     * IOMMU bindings together. If both are present, the device
>> +     * can be already added.
>> +     */
>>       if ( dev_iommu_fwspec_get(dev) )
>> -        return -EEXIST;
>> +        return 0;
> 
> Since the xen: prefix in the subject made me go look (I wouldn't have
> if it had been e.g. dt: ), I may as well ask: Since previously there
> was concern about bogus duplicate entries, does this concern go away
> no altogether?

The check wasn't originally added because of legacy vs generic binding.

It was added because in some circumstances iommu_add_dt_device() could 
genuinely be called twice (for instance if the device is re-assigned). 
This was returning -EEXIST rather than 0 so the caller can decide 
whether it is normal that the device is already added.

Calling iommu_add_dt_device() twice doesn't hurt but after patch #1 
(this patch should really be first), dev_iommu_fwspec_get() will return 
a non-NULL pointer as the legacy devices are added when the IOMMU is probed.

> It's one thing for there to be a legacy and a generic
> binding, but another if you found two legacy or two generic ones, I
> would think.

I am not quite too sure what you mean by "two legacy" and "two generic". 
Can you clarify it?

> 
> And what if legacy and generic representation differ in some way?

That would be a firmware table issue. It is not Xen business to check 
whether the two representation agree.

> Shouldn't you limit processing to just one of the two categories,
> such that no legitimate "already present" case could be encountered
> here in the first place?
There are legitimate "already present" case. This can happen when a 
device is re-assigned. Arguably the caller could check if the device was 
already added, however it would involve more code in each caller. So it 
is much easier to add in iommu_add_dt_device().

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 10:24:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 10:24:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160053.294325 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6sLh-0002Cv-4D; Fri, 23 Jul 2021 10:24:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160053.294325; Fri, 23 Jul 2021 10:24:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6sLh-0002Co-0g; Fri, 23 Jul 2021 10:24:09 +0000
Received: by outflank-mailman (input) for mailman id 160053;
 Fri, 23 Jul 2021 10:24:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uTCe=MP=fujitsu.com=Alan.Robinson@srs-us1.protection.inumbo.net>)
 id 1m6sLf-0002Ci-Fr
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 10:24:08 +0000
Received: from mail1.bemta26.messagelabs.com (unknown [85.158.142.2])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1a7f3ce2-eba0-11eb-932a-12813bfff9fa;
 Fri, 23 Jul 2021 10:24:04 +0000 (UTC)
Received: from [100.113.0.182] (using TLSv1.2 with cipher
 DHE-RSA-AES256-GCM-SHA384 (256 bits))
 by server-2.bemta.az-a.eu-central-1.aws.symcld.net id 6F/1F-07685-2C89AF06;
 Fri, 23 Jul 2021 10:24:02 +0000
Received: (qmail 26753 invoked from network); 23 Jul 2021 10:24:01 -0000
Received: from unknown (HELO mailhost3.uk.fujitsu.com) (62.60.8.84)
 by server-4.tower-226.messagelabs.com with ECDHE-RSA-AES256-GCM-SHA384
 encrypted SMTP; 23 Jul 2021 10:24:01 -0000
Received: from nera12.osd.abg.fsc.net ([172.17.20.104])
 by mailhost3.uk.fujitsu.com (8.14.5/8.14.5) with SMTP id 16NANaxE008069;
 Fri, 23 Jul 2021 11:23:36 +0100
Received: by nera12.osd.abg.fsc.net (Postfix, from userid 5004)
 id DF091440C20; Fri, 23 Jul 2021 12:23:25 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1a7f3ce2-eba0-11eb-932a-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.com;
	s=170520fj; t=1627035843; i=@fujitsu.com;
	bh=3D7uuxiEIDbobr4GSN4apP+qTsHazYZF2I6FjlBzOUg=;
	h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:
	 Content-Transfer-Encoding;
	b=K483yfyHfDd76MmZD5GssmtTTzOSFCUSpSO1YjVSDBFpLIhOcWvXhWxcd6yXqTn1b
	 m+l9Uuu4OuW/aFGAwbxc7mmjF8gtQ/6Jam4YcKQME/r1kmzcoK0aCoWjPPEli86Dol
	 gc4PyJJZ/k1iLfCt7UGA1oSFG8p/KcTzg4p0VvfHjerREmA/Mh+zY61IfRXGmvoyD7
	 hOplHK5diCynEuireCsV5kKQK5lHqSN5sP9y6WQGhgA/M0wXMeauhrCvmSvIULw72Q
	 TIWz1WDpIzoVSCuNXF7mDPkZPYqjPWoY9F9OyTqTFDOkmsLYC8BYzdx0zUzLXJrk7i
	 YpNo9ExcGY8bw==
Authentication-Results: mx.messagelabs.com; spf=pass 
  (server-4.tower-226.messagelabs.com: domain of fujitsu.com designates 
  85.158.142.101 as permitted sender) smtp.mailfrom=fujitsu.com; dkim=none 
  (message not signed); dmarc=pass (p=none sp=none adkim=r aspf=r) 
  header.from=fujitsu.com
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrNIsWRWlGSWpSXmKPExsViZ8MRontwxq8
  Eg1sTbSxOnOhhsri7+CK7xYvNORZzbhpZfFwjbvF9y2QmBzaP15MnMHpsaHrD5nH4wxUWj/Vb
  rrJ4nL41i81j2sdtLAFsUayZeUn5FQmsGd/+TmUp+Mhd8f3TVvYGxi/sXYxcHEICixglVm3dz
  NbFyAnklEu8272MHcRmE9CXeHjtHCuILSKgJHFv1WQmkAZmgVOMEhtaNrGAJIQFrCT23LkGVs
  QioCrx4doboDgHB6+ArcTnjdwgYQkBeYn25dvB5vMKCEqcnPkErJVZQFti2cLXzBMYuWchSc1
  CklrAyLSK0TKpKDM9oyQ3MTNH19DAQNfQ0FgXSJoa6iVW6SbqpZbqJqfmlRQlAmX1EsuL9Yor
  c5NzUvTyUks2MQLDMaWQYfoOxjVvPugdYpTkYFIS5WXq/5UgxJeUn1KZkVicEV9UmpNafIhRh
  oNDSYJ36jSgnGBRanpqRVpmDjA2YNISHDxKIrzxU4HSvMUFibnFmekQqVOMuhxNH5YsYhZiyc
  vPS5US5/WbDlQkAFKUUZoHNwIWp5cYZaWEeRkZGBiEeApSi3IzS1DlXzGKczAqCfMmgUzhycw
  rgdv0CugIJqAjTnX9BDmiJBEhJdXAtG7trkON2Q94A+VZ9Y9fmKnIkSFXObn5zPF9tV78b7MT
  FkucYjkcUfyWp1T2RJZKmKh86ayOkDf3n6od87Kvidl6dNPqQ3/OJizwDquaLBPtMaU+qzjn1
  Upfg/sr5qq5vH/2zbCSeaKv09d2h1+MT+yPSX+6GV7VIrFmq0ZxrETYwWmdvgrx1guPfrB9pL
  VwyoEtRguKNYvYqxI1Y6Ryf7PwbLmglt92NUD/56KJeeHHJtdxx9xemWhaWbRlpiLPe0sTQ8f
  ANJ7STRrXp6e42yxsmZnJv8WinGvjkvy038cZjgQ2Vc7M1Li4wzFFqSWQd3+IQdOXyxNnP3mX
  OclQ5OqFudGJ829EWmul13IrsRRnJBpqMRcVJwIASzYSDU4DAAA=
X-Env-Sender: Alan.Robinson@fujitsu.com
X-Msg-Ref: server-4.tower-226.messagelabs.com!1627035841!77980!1
X-Originating-IP: [62.60.8.84]
X-SYMC-ESS-Client-Auth: outbound-route-from=pass
X-StarScan-Received:
X-StarScan-Version: 9.81.3; banners=-,-,-
X-VirusChecked: Checked
From: Alan Robinson <Alan.Robinson@fujitsu.com>
To: xen-devel@lists.xenproject.org
Cc: Alan Robinson <alan.robinson@fujitsu.com>,
        Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
        Anthony PERARD <anthony.perard@citrix.com>,
        Juergen Gross <jgross@suse.com>
Subject: [PATCH] tools/libxl: add missing blank in message
Date: Fri, 23 Jul 2021 12:23:08 +0200
Message-Id: <20210723102308.5332-1-Alan.Robinson@fujitsu.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

From: Alan Robinson <alan.robinson@fujitsu.com>

Add trailing blank to first part of concatenated string giving
"an emulated" instead of "anemulated".

Signed-off-by: Alan Robinson <alan.robinson@fujitsu.com>
---
 tools/libs/light/libxl_dm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index dbd3c7f278..755641604a 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -1893,7 +1893,7 @@ static int libxl__build_device_model_args_new(libxl=
__gc *gc,
                 if (format =3D=3D NULL) {
                     LOGD(WARN, guest_domid,
                          "Unable to determine disk image format: %s\n"
-                         "Disk will be available via PV drivers but not =
as an"
+                         "Disk will be available via PV drivers but not =
as an "
                          "emulated disk.",
                          disks[i].vdev);
                     continue;
@@ -1905,7 +1905,7 @@ static int libxl__build_device_model_args_new(libxl=
__gc *gc,
=20
                 if (!target_path) {
                     LOGD(WARN, guest_domid, "No way to get local access =
disk to image: %s\n"
-                         "Disk will be available via PV drivers but not =
as an"
+                         "Disk will be available via PV drivers but not =
as an "
                          "emulated disk.",
                          disks[i].vdev);
                     continue;
--=20
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 10:36:48 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 10:36:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160061.294337 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6sXr-0004LO-8T; Fri, 23 Jul 2021 10:36:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160061.294337; Fri, 23 Jul 2021 10:36:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6sXr-0004LH-55; Fri, 23 Jul 2021 10:36:43 +0000
Received: by outflank-mailman (input) for mailman id 160061;
 Fri, 23 Jul 2021 10:36:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6sXp-0004L7-F0; Fri, 23 Jul 2021 10:36:41 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6sXp-0001ez-8j; Fri, 23 Jul 2021 10:36:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6sXp-0004TI-0P; Fri, 23 Jul 2021 10:36:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6sXo-0008DK-WB; Fri, 23 Jul 2021 10:36:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=M5Wwv5Y+HXIAu1Hp046gTDp+1rEpVD96Rf2GV+Di4/0=; b=hSERx4VQbQkhPgZmu743Cg8LJx
	sba6E1c0E9kZMlTfPslZFlcxOz8HmQTepyIoNZF+46ZpwneGjMChuE2t89A5DGx6c3giIQlpQl+yn
	QOUfQ8g2nxPRyNQ61HczitZMmKKU4XdKoUKcWBe0PgCflz2Xuav/YUFGs3Jhq7oxnesE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163929-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163929: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 10:36:40 +0000

flight 163929 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163929/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   49 days
Failing since        162368  2021-06-04 15:42:59 Z   48 days  132 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 11:27:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 11:27:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160082.294369 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6tKa-0002cS-AA; Fri, 23 Jul 2021 11:27:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160082.294369; Fri, 23 Jul 2021 11:27:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6tKa-0002cL-6C; Fri, 23 Jul 2021 11:27:04 +0000
Received: by outflank-mailman (input) for mailman id 160082;
 Fri, 23 Jul 2021 11:27:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6tKZ-0002cB-MD; Fri, 23 Jul 2021 11:27:03 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6tKZ-0002MX-Dk; Fri, 23 Jul 2021 11:27:03 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6tKZ-0006VI-3g; Fri, 23 Jul 2021 11:27:03 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6tKZ-0008Gr-39; Fri, 23 Jul 2021 11:27:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=er6g7sOBK2ql/z8Parjv6QGJm7i7Q9DDHBMycwW2AOQ=; b=eLbzlzChrHKsxUNZUcSTc42ft0
	GRi0YsIIuE7jXRJOugMa7EauDXU45WJOMFdRBycDj9bKXng6pacc4VB6UC8/NuApgDFmpUP2hVwge
	QXJ5FCGIDgl6UXaCbereRblniNqhBoT/+2KEBYmzdtT7wK5EDDhnkJ05r67ZYuTULPHM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163925-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163925: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start.2:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 11:27:03 +0000

flight 163925 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163925/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds     19 guest-start.2    fail in 163888 pass in 163925
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 20 guest-start/debianhvm.repeat fail pass in 163888

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163888
 test-amd64-amd64-examine      4 memdisk-try-append           fail  like 163888
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163888
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163888
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163888
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163888
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163888
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163888
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163888
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163888
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163888
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163888
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163925  2021-07-23 01:51:39 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 13:03:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 13:03:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160101.294387 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6upP-0006FH-Lg; Fri, 23 Jul 2021 13:02:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160101.294387; Fri, 23 Jul 2021 13:02:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6upP-0006FA-Ia; Fri, 23 Jul 2021 13:02:59 +0000
Received: by outflank-mailman (input) for mailman id 160101;
 Fri, 23 Jul 2021 13:02:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=WrFY=MP=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1m6upO-0006F4-Hf
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 13:02:58 +0000
Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4c3159e4-ebb6-11eb-938d-12813bfff9fa;
 Fri, 23 Jul 2021 13:02:56 +0000 (UTC)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2054.outbound.protection.outlook.com [104.47.14.54]) (Using
 TLS) by relay.mimecast.com with ESMTP id
 de-mta-23-pK-NueA5MuqA5fMRG7UQDQ-1; Fri, 23 Jul 2021 15:02:54 +0200
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16)
 by VI1PR04MB3120.eurprd04.prod.outlook.com (2603:10a6:802:e::11) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Fri, 23 Jul
 2021 13:02:53 +0000
Received: from VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea]) by VI1PR04MB5600.eurprd04.prod.outlook.com
 ([fe80::99d3:99cd:8adf:3eea%5]) with mapi id 15.20.4352.025; Fri, 23 Jul 2021
 13:02:52 +0000
Received: from [10.156.60.236] (37.24.206.209) by
 AM3PR05CA0124.eurprd05.prod.outlook.com (2603:10a6:207:2::26) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.26 via Frontend Transport; Fri, 23 Jul 2021 13:02:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4c3159e4-ebb6-11eb-938d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619;
	t=1627045375;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=RLDeg85buIAlpXcnKlA0k0lH5eIqObzBLDKPFK6dyYE=;
	b=ag0RRPqmN5m79qxgnlOzDQ+kq8tx29EnNC8+CJ2st4sPbiUv/ZkbJe/3zLZw+wZOvlMoy+
	jl/LqW/1nk2D2bCRgNpPELZqKD/wAxDaDgFjG3d0h7MqnXOk6Yc0SZ7OuuMDwMmeouGSOz
	ZXZV3cR4bqyc3EGtLwm+e8M9zxbODrw=
X-MC-Unique: pK-NueA5MuqA5fMRG7UQDQ-1
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FZ0NmJPPc/6QC861I78WvTH/cW716XWAOb8XWLGOXLHc4XLUetZ+QvAn5jnEa64ZhsKe7tqgwqXu2F42Oavfy5mvZiCU9uUvcH7Q4z7NE+jH+IchfYzMjk53Kk5HgcdyAw+3A65agSKkCdUgmtmWIx22/po6OzTpAY/qlIb1+6+u7smHs2X6jV06eCSXGkVJONQ2PljavNdp7t2zjHOGIWITsJdhv8OXxLWkN4m5hBOsqusQcLh4EZDf0EV0SbjLoAOwCO1jR7nj9U/DvXwdd4bR7f4zDZ3ZJ4U82wLXayZWnEdDtFFfp3YOxLaQk1H1WNscjFt6/CQfFd28mOr19w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=RLDeg85buIAlpXcnKlA0k0lH5eIqObzBLDKPFK6dyYE=;
 b=KsxWAJS5fNjAdjDFnOGw+d1O+ai79FOdcxjiAHRO8maZLnk5BIdvKwNRj5Fd7+GSx1ehxZPOkJwtXTh0TaUk4vcd77jF6sc1ZdCKUtYU65lWJtgqmcEnMnvYaPiM1f2ZsFdll9TqCrqHZ7HtP7rc9HP5eH5HAYLDYvcOcPWS1hSVn+Qb/JLvCsIEzo2EoJ1fSha0UamoTKkPojbTAeH6tlAOY6DbpPl8VTv3dPjjzvjjx6GIlUNY/ekj2psQaEpelrqtE3hnCQ/TiKk4nxX4dpWguwFUDPn+Xnfz98goqg6ljk+YoVo1qJs4+po1WWRAYDIDhAqxl3AS5dzZaainAA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com;
 dkim=pass header.d=suse.com; arc=none
Authentication-Results: kernel.org; dkim=none (message not signed)
 header.d=none;kernel.org; dmarc=none action=none header.from=suse.com;
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
To: Julien Grall <julien@xen.org>
Cc: Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>,
 xen-devel@lists.xenproject.org, Stefano Stabellini <sstabellini@kernel.org>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
 <20210722233642.22515-2-sstabellini@kernel.org>
 <97f0713b-f6bb-72cd-f364-f0d42c868171@suse.com>
 <1df74545-d2fa-2d80-5246-a0b0158550b4@xen.org>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <e262a28a-ced3-3097-4748-fe2b9efe08f5@suse.com>
Date: Fri, 23 Jul 2021 15:02:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <1df74545-d2fa-2d80-5246-a0b0158550b4@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: AM3PR05CA0124.eurprd05.prod.outlook.com
 (2603:10a6:207:2::26) To VI1PR04MB5600.eurprd04.prod.outlook.com
 (2603:10a6:803:e7::16)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: dc4d375b-b052-4fd7-2b8b-08d94dda2e83
X-MS-TrafficTypeDiagnostic: VI1PR04MB3120:
X-Microsoft-Antispam-PRVS:
	<VI1PR04MB31206EBE22CB183972385B69B3E59@VI1PR04MB3120.eurprd04.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Tj7HNv0aFtj7p4+p1wbultsQyqKWxIen9FSyTkKlVWc4XYRNfm6XSXkO73ZhssleKqtoAIa4ePB1DoKA9yIQL2mTCbYn+o4hrNpHtIkQrL000P7lZPk7sM07rCCDhAnKVs+v81xjFutVvsltxuXtIO7Hc8w6Hnq2hM5UnoYDEgMTBfjGjb1Ar/0hFJ9+UgAvA5U5HUOdEtwd6x4DALMm7BHOw+oX8WOmb7/x/X5C4+KLDUgE/tw9s+v0IyIvbkxzk/5+azFkYiwIHhfJzkQRedbnV9o53ejf51CoM22j4C75H3KRUX8U3vK5lSsbDpc+Lv9uQ9nx8sKVAB+38IqpAPE+kUE+FuOAlJymodeMj/J1V6bBbH2IZhOwxzaeFUim1mrez6y+kbKErrkwyLuDnIqQk64Oe9PhBXrZbsOgpZHLJb6TgN7OZcjSAkaxOhriw6i+qpx/1gOwPiWLBLR4C3rjSkJ6w2hi4dZxDX4ZPLLR+1JRmEl9X1SpbukQ4OcrwwBBRFVoY3Au5DKPJIwNjNptxxW4r4POUWAB296IXE5g9xXqysqz0/+oGqpG7yhrWeSqV5r1WhGf3iWJRYkQnvejWMerT86JGqEg/mddRrT0lDTRsZoHVzjAlQiKhwHuQyNyieur6qFcDUGTS9H8d72ju+5OUjj1MorSg8IlodYyiPQRmVgcZs8TGoDOE0KiQgjG4SGv6RFAZ46/FjmLBpn6mogz9qJzCiUaJ9eN7a/sIjjq3iAF41I4bDasxaD6
X-Forefront-Antispam-Report:
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39850400004)(366004)(136003)(346002)(376002)(8676002)(956004)(86362001)(478600001)(66476007)(31696002)(2616005)(6666004)(5660300002)(8936002)(38100700002)(2906002)(316002)(16576012)(54906003)(4326008)(31686004)(26005)(36756003)(6486002)(186003)(66556008)(66946007)(6916009)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
	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
X-OriginatorOrg: suse.com
X-MS-Exchange-CrossTenant-Network-Message-Id: dc4d375b-b052-4fd7-2b8b-08d94dda2e83
X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2021 13:02:52.8992
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: gOjLFPfvlpEta53Atl10RqI3RRYOC/VitOB8hwuXnQPq5ZCRe6FvLfOPiKBoLiPJBLBIVxUq+7xuJQ+8iGb1/g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3120

On 23.07.2021 11:28, Julien Grall wrote:
> Hi Jan,
> 
> On 23/07/2021 07:31, Jan Beulich wrote:
>> On 23.07.2021 01:36, Stefano Stabellini wrote:
>>> --- a/xen/drivers/passthrough/device_tree.c
>>> +++ b/xen/drivers/passthrough/device_tree.c
>>> @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
>>>       if ( !ops )
>>>           return -EINVAL;
>>>   
>>> +    /*
>>> +     * Some Device Trees may expose both legacy SMMU and generic
>>> +     * IOMMU bindings together. If both are present, the device
>>> +     * can be already added.
>>> +     */
>>>       if ( dev_iommu_fwspec_get(dev) )
>>> -        return -EEXIST;
>>> +        return 0;
>>
>> Since the xen: prefix in the subject made me go look (I wouldn't have
>> if it had been e.g. dt: ), I may as well ask: Since previously there
>> was concern about bogus duplicate entries, does this concern go away
>> no altogether?
> 
> The check wasn't originally added because of legacy vs generic binding.
> 
> It was added because in some circumstances iommu_add_dt_device() could 
> genuinely be called twice (for instance if the device is re-assigned). 
> This was returning -EEXIST rather than 0 so the caller can decide 
> whether it is normal that the device is already added.

Okay. If that distinction is of no interest anymore, then I can see
this wanting dropping.

> Calling iommu_add_dt_device() twice doesn't hurt but after patch #1 
> (this patch should really be first), dev_iommu_fwspec_get() will return 
> a non-NULL pointer as the legacy devices are added when the IOMMU is probed.
> 
>> It's one thing for there to be a legacy and a generic
>> binding, but another if you found two legacy or two generic ones, I
>> would think.
> 
> I am not quite too sure what you mean by "two legacy" and "two generic". 
> Can you clarify it?

Well, I'm having trouble describing it in different terms. I mean
two entries of the same kind (both legacy or both generic) referring
to the same device, thus leading to the function recognizing the 2nd
time round that the device is already there.

Jan



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 13:09:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 13:09:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160109.294402 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6uvw-0007It-D8; Fri, 23 Jul 2021 13:09:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160109.294402; Fri, 23 Jul 2021 13:09:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6uvw-0007Im-AJ; Fri, 23 Jul 2021 13:09:44 +0000
Received: by outflank-mailman (input) for mailman id 160109;
 Fri, 23 Jul 2021 13:09:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=46gW=MP=gmail.com=dunlapg@srs-us1.protection.inumbo.net>)
 id 1m6uvu-0007Ig-4m
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 13:09:42 +0000
Received: from mail-ed1-x531.google.com (unknown [2a00:1450:4864:20::531])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3c0c4be2-3c5e-4cd5-b1ac-07e5fbee84bc;
 Fri, 23 Jul 2021 13:09:40 +0000 (UTC)
Received: by mail-ed1-x531.google.com with SMTP id k15so1640468edq.13
 for <xen-devel@lists.xenproject.org>; Fri, 23 Jul 2021 06:09:40 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3c0c4be2-3c5e-4cd5-b1ac-07e5fbee84bc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=umich.edu; s=google-2016-06-03;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=rRCzeO219V/p2TwkNxchXI7lnEXVmeMIUIGjhcs9Cmc=;
        b=Gve9eT3FTWtBeRJta891nIb8UUgzP17toaBL/RargwdNQBGJOa3CixohERx3eWJo6R
         RsJZPwPVjoowy/K8N5ntIA9fXqf8h1X/EntqBd0k917FERdLzZqb5Lp4OCTKS98F4NuR
         xWPGCFrzeStcAlqJPtNN66keuNU1rfQPKK6gphVDq96CPCNp4QW/Xmtpl3N2Ld1yte8h
         d0Lv4wPfGAINObFcQLbhsTFU4lu3obDL610xZoCXQV7uPI0N+RNsExRGt2yhLzS5QZFG
         BskV5NnfEeupwErZLFSGMEMbbSdVMUovcdds/3bzlQanXizKVygi9113iLoAWZlP/Dgf
         pAAw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=rRCzeO219V/p2TwkNxchXI7lnEXVmeMIUIGjhcs9Cmc=;
        b=YMKV/8AyQlH05yOeguaZ25YgvQUX65UUd7imeG3neviW+V+ItPlkfeNMWxzQIh/g+O
         eRedMIh3biBXg4d+E+EIT5+kfOsuQ/SXpo6wRi93E4WqYAuh3sSgRqJUxnMGMXb0++af
         qOXLgE6Yxl48xaagkkB8/Yl9T4XGZsGuk7bj2y0DRDZOzlEPV2QYGS2whB4KxQd2c1fB
         MYFDKS7so3TeFrE3ZyjjlpHekTDA5d2WE4fDHBv9huQM5e9g7gmw+L+u2VC/2VwHtOUA
         gc5wFg+tpnhvmurdyZdvrVTKV4ijyYSlXhferXAC8YcQ3nODO1pte2+/YayIgL8io/Dt
         kOjA==
X-Gm-Message-State: AOAM532nYyTji//IdHUucDeNIJmaNspPfwZ3A7VIHgYfNqaGvCPj/3F/
	Ouvck9gbh8WAEAFo9CsxafjsRAVVOaSGjPEMEh0=
X-Google-Smtp-Source: ABdhPJx+jSbNzbaJnnWuUzAsdb5uut9qOiEPl7V6+jaybztx+I60jl3/lqVoy389jbonlvhjNKVp4klPRmdK6RfjBio=
X-Received: by 2002:a05:6402:2206:: with SMTP id cq6mr5499274edb.209.1627045779797;
 Fri, 23 Jul 2021 06:09:39 -0700 (PDT)
MIME-Version: 1.0
References: <87r1fzclw0.fsf@vates.fr> <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com>
 <87k0lqmmf8.fsf@vates.fr> <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com>
 <87wnpqm380.fsf@vates.fr> <14d1b95e-9d3a-8464-010b-d7796a26a8c4@suse.com> <87tukqy9gw.fsf@vates.fr>
In-Reply-To: <87tukqy9gw.fsf@vates.fr>
From: George Dunlap <dunlapg@umich.edu>
Date: Fri, 23 Jul 2021 14:09:28 +0100
Message-ID: <CAFLBxZaURZgLYPbKjxBv_btNPzX9D5w3gFCsVrTH0Xw=RfgPug@mail.gmail.com>
Subject: Re: Suggested changes to the admission policy of the vulnerability
 pre-disclosure list
To: "Charles-H. Schulz" <charles.schulz@vates.fr>
Cc: Jan Beulich <jbeulich@suse.com>, xen-devel <xen-devel@lists.xenproject.org>, 
	George Dunlap <george.dunlap@citrix.com>
Content-Type: multipart/alternative; boundary="000000000000bcf98105c7ca1dee"

--000000000000bcf98105c7ca1dee
Content-Type: text/plain; charset="UTF-8"

On Mon, Jul 19, 2021 at 9:49 AM Charles-H. Schulz <charles.schulz@vates.fr>
wrote:

>
> Jan Beulich @ 2021-07-19 08:44 CEST:
>
> >>
> >> They act as a resource center for their downstreams, but the
> information goes
> >> top down, i.e from the software developer to the downstream, not the
> >> opposite. Also how it entails an even bigger change to the list policy
> is
> >> unclear to me.
> >
> > For things to make sense (as you seem to agree with as per further up),
> > if their downstreams aren't to subscribe to our (and perhaps other)
> > pre-disclosure list themselves, the CERTs would need to act as a proxy,
> > in that they'd be permitted to relay the information before the embargo
> > ends. I didn't think there would be much of a difficulty seeing that
> > this would be more of a change to the policy.
>
> Indeed, because you assume that CERTs will communicate information before
> they are public. But they don't work that way in that they act as the legal
> and actual hub for the public information and listing of vulnerabilities
> reports (CVEs etc.) What they do before the end of the embargo date I
> already
> explained, and that specifically does not entail sharing the information
> with
> downstream users. So to me there is no big change of policy - this is the
> highway patrol sharing the license plate numbers of criminals or suspects
> with the city police.
>

Nonetheless, you still haven't made a clear case why being informed of the
vulnerabilities *under embargo* is necessary.  Anyone can sign up to the
xen-announce mailing list and receive notifications of XSAs at the moment
the embargo lifts.  We advertise *that new advisories are coming out* on
the main XSA webpage [1] and in a machine-readable JSON file [2] as soon as
the predisclosure happens.  (There are also libraries [3] to consume the
JSON file, and an example program [4] which could be run in a cron job to
alert someone to upcoming public XSA disclosures.) The delta between the
predisclosure and the public disclosure is typically two weeks.

Someone could argue that all of the activities you describe -- looking for
larger patterns of vulnerabilities, acting as a clearinghouse /
notification channel / advisory system for downstreams, etc -- could be
done by observing the public disclosures, particularly if suitable people
were alerted to upcoming public disclosures (and thus ready to process them
as soon as they come out).  What is needed is to make the case that this is
insufficient -- that having the extra two weeks to process things before
the public disclosure will be of material benefit in those activities.

(Hopefully it should be clear that I'm inviting you to make such a case.)

[1] https://xenbits.xenproject.org/xsa/
[2] https://xenbits.xenproject.org/xsa/xsa.json
[3]
https://gitlab.com/xen-project/people/gdunlap/go-xenlib/-/tree/master/xsalib
[4]
https://gitlab.com/xen-project/people/gdunlap/go-xenlib/-/tree/master/scripts/xsa-alert


> >> The what if question is not a valid one, as you are either recognized
> as a
> >> national CERT (there may sometimes be more than one) or you're not, by
> >> regulatory approval of some sort.  Nobody else can claim they're a
> national
> >> CERT.
> >> You can be a private CERT, but that's out of the scope of my request.
> >>
> >>> The present items on the list try to use pretty generic
> >>> terms, while your suggestion is pretty specific.
> >>
> >> So how is that a problem in our this specific instance?
> >
> > Why would we exclude private CERTs? I could easily see there being
> > countries which have no "national CERT" (for a variety of reasons),
> > with some private / non-government organization jumping in.
> >
>
> This is a good point I'm not making :)
> My request is solely about national CERTs, I do not feel that I have enough
> standing here requesting that private CERTs be added to the list, although
> I'm sure there's a point to be made here as well.
>

Jan, I think if you think it's better to include "private CERTs" (do such
things exist?), then it should be up to you (or someone else in favor of
such a thing) to craft the criteria for inclusion.  I personally think
limiting ourselves to national CERTs to begin with is fine.

In any case, what's needed to move things forward (absent further
discussion) is:

1. Specific proposed changes to the security policy to be hammered out

2. Someone to hold a project-wide vote, in accordance with the XenProject
Governance Document.

Normally #2 would be me, but today is my last day until January.

 -George

--000000000000bcf98105c7ca1dee
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Mon, Jul 19, 2021 at 9:49 AM Charl=
es-H. Schulz &lt;<a href=3D"mailto:charles.schulz@vates.fr">charles.schulz@=
vates.fr</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D=
"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-le=
ft:1ex"><br>
Jan Beulich @ 2021-07-19 08:44 CEST:<br>
<br>
&gt;&gt; <br>
&gt;&gt; They act as a resource center for their downstreams, but the infor=
mation goes<br>
&gt;&gt; top down, i.e from the software developer to the downstream, not t=
he<br>
&gt;&gt; opposite. Also how it entails an even bigger change to the list po=
licy is<br>
&gt;&gt; unclear to me. <br>
&gt;<br>
&gt; For things to make sense (as you seem to agree with as per further up)=
,<br>
&gt; if their downstreams aren&#39;t to subscribe to our (and perhaps other=
)<br>
&gt; pre-disclosure list themselves, the CERTs would need to act as a proxy=
,<br>
&gt; in that they&#39;d be permitted to relay the information before the em=
bargo<br>
&gt; ends. I didn&#39;t think there would be much of a difficulty seeing th=
at<br>
&gt; this would be more of a change to the policy.<br>
<br>
Indeed, because you assume that CERTs will communicate information before<b=
r>
they are public. But they don&#39;t work that way in that they act as the l=
egal<br>
and actual hub for the public information and listing of vulnerabilities<br=
>
reports (CVEs etc.) What they do before the end of the embargo date I alrea=
dy<br>
explained, and that specifically does not entail sharing the information wi=
th<br>
downstream users. So to me there is no big change of policy - this is the<b=
r>
highway patrol sharing the license plate numbers of criminals or suspects<b=
r>
with the city police. <br></blockquote><div><br></div><div>Nonetheless, you=
 still haven&#39;t made a clear case why being informed of the vulnerabilit=
ies *under embargo* is necessary.=C2=A0 Anyone can sign up to the xen-annou=
nce mailing list and receive notifications of XSAs at the moment the embarg=
o lifts.=C2=A0 We advertise *that new advisories are coming out* on the mai=
n XSA webpage [1] and in a machine-readable JSON file [2] as soon as the pr=
edisclosure happens.=C2=A0 (There are also libraries [3] to consume the JSO=
N file, and an example program [4] which could be run in a cron job to aler=
t someone to upcoming public XSA disclosures.) The delta between the predis=
closure and the public disclosure is typically two weeks.<br><div><br></div=
><div>Someone could argue that all of the activities you describe -- lookin=
g for larger patterns of vulnerabilities, acting as a clearinghouse / notif=
ication channel / advisory system for downstreams, etc -- could be done by =
observing the public disclosures, particularly if suitable people were aler=
ted to upcoming public disclosures (and thus ready to process them as soon =
as they come out).=C2=A0 What is needed is to make the case that this is in=
sufficient -- that having the extra two weeks to process things before the =
public disclosure will be of material benefit in those activities.</div><di=
v><br></div><div>(Hopefully it should be clear that I&#39;m inviting you to=
 make such a case.)<br></div></div><br><div>[1] <a href=3D"https://xenbits.=
xenproject.org/xsa/">https://xenbits.xenproject.org/xsa/</a></div><div>[2] =
<a href=3D"https://xenbits.xenproject.org/xsa/xsa.json">https://xenbits.xen=
project.org/xsa/xsa.json</a></div><div>[3] <a href=3D"https://gitlab.com/xe=
n-project/people/gdunlap/go-xenlib/-/tree/master/xsalib">https://gitlab.com=
/xen-project/people/gdunlap/go-xenlib/-/tree/master/xsalib</a></div><div>[4=
] <a href=3D"https://gitlab.com/xen-project/people/gdunlap/go-xenlib/-/tree=
/master/scripts/xsa-alert">https://gitlab.com/xen-project/people/gdunlap/go=
-xenlib/-/tree/master/scripts/xsa-alert</a></div><div>=C2=A0<br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex">
&gt;&gt; The what if question is not a valid one, as you are either recogni=
zed as a<br>
&gt;&gt; national CERT (there may sometimes be more than one) or you&#39;re=
 not, by<br>
&gt;&gt; regulatory approval of some sort.=C2=A0 Nobody else can claim they=
&#39;re a national<br>
&gt;&gt; CERT.<br>
&gt;&gt; You can be a private CERT, but that&#39;s out of the scope of my r=
equest. <br>
&gt;&gt; <br>
&gt;&gt;&gt; The present items on the list try to use pretty generic<br>
&gt;&gt;&gt; terms, while your suggestion is pretty specific.<br>
&gt;&gt; <br>
&gt;&gt; So how is that a problem in our this specific instance?<br>
&gt;<br>
&gt; Why would we exclude private CERTs? I could easily see there being<br>
&gt; countries which have no &quot;national CERT&quot; (for a variety of re=
asons),<br>
&gt; with some private / non-government organization jumping in.<br>
&gt;<br>
<br>
This is a good point I&#39;m not making :)<br>
My request is solely about national CERTs, I do not feel that I have enough=
<br>
standing here requesting that private CERTs be added to the list, although<=
br>
I&#39;m sure there&#39;s a point to be made here as well.<br></blockquote><=
div><br></div><div>Jan, I think if you think it&#39;s better to include &qu=
ot;private CERTs&quot; (do such things exist?), then it should be up to you=
 (or someone else in favor of such a thing) to craft the criteria for inclu=
sion.=C2=A0 I personally think limiting ourselves to national CERTs to begi=
n with is fine.</div><div><br></div>In any case, what&#39;s needed to move =
things forward (absent further discussion) is:</div><div class=3D"gmail_quo=
te"><br></div><div class=3D"gmail_quote">1. Specific proposed changes to th=
e security policy to be hammered out<br></div><div class=3D"gmail_quote"><b=
r></div><div class=3D"gmail_quote">2. Someone to hold a project-wide vote, =
in accordance with the XenProject Governance Document.</div><div class=3D"g=
mail_quote"><br></div><div class=3D"gmail_quote">Normally #2 would be me, b=
ut today is my last day until January.</div><div class=3D"gmail_quote"><br>=
</div><div class=3D"gmail_quote">=C2=A0-George<br></div></div>

--000000000000bcf98105c7ca1dee--


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 13:57:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 13:57:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160125.294424 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6vfd-0005IH-6n; Fri, 23 Jul 2021 13:56:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160125.294424; Fri, 23 Jul 2021 13:56:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6vfd-0005IA-3o; Fri, 23 Jul 2021 13:56:57 +0000
Received: by outflank-mailman (input) for mailman id 160125;
 Fri, 23 Jul 2021 13:56:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6vfb-0005I0-Ed; Fri, 23 Jul 2021 13:56:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6vfb-0004Uu-6m; Fri, 23 Jul 2021 13:56:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6vfa-0002l4-UG; Fri, 23 Jul 2021 13:56:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6vfa-0006T6-Tk; Fri, 23 Jul 2021 13:56:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=w05xDj+U3IzbZqmCMWugqiAU8WMqJbxI7w0oWNrVh0g=; b=HwzD/OMbWlhSr/9op2q/6qZkGo
	90GLxHpoPzGcU0LxJ0KPTNbibaO+3tTWa9f2/hwukojBc7TN7iPFZKo6/gqkR5gAX5phe4QOx1Zi1
	6v/qUC1XjzXELhCqAJLsB/xEStNABMBs730XHvl+BfzoWU/xPYde66zTaMvXd4M0BrsY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163926-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163926: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-localmigrate/x10:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-amd64-amd64-qemuu-freebsd12-amd64:guest-localmigrate/x10:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-armhf-armhf-xl-multivcpu:guest-start:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=9bead1b58c4c4a85319d0fc8a5c83e7374977d28
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 13:56:54 +0000

flight 163926 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163926/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 19 guest-localmigrate/x10  fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-qemuu-freebsd12-amd64 19 guest-localmigrate/x10 fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-armhf-armhf-xl-multivcpu 14 guest-start             fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                9bead1b58c4c4a85319d0fc8a5c83e7374977d28
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  356 days
Failing since        152366  2020-08-01 20:49:34 Z  355 days  608 attempts
Testing same since   163926  2021-07-23 02:30:46 Z    0 days    1 attempts

------------------------------------------------------------
6711 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                fail    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1981628 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 16:08:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 16:08:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160154.294458 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6xis-00056J-Qo; Fri, 23 Jul 2021 16:08:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160154.294458; Fri, 23 Jul 2021 16:08:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6xis-00056C-Np; Fri, 23 Jul 2021 16:08:26 +0000
Received: by outflank-mailman (input) for mailman id 160154;
 Fri, 23 Jul 2021 16:08:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BIeu=MP=bounce.vates.fr=bounce-md_30504962.60fae976.v1-7cdb1def0caa4857ac7531b18568edfc@srs-us1.protection.inumbo.net>)
 id 1m6xiq-000566-RC
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 16:08:25 +0000
Received: from mail179-27.suw41.mandrillapp.com (unknown [198.2.179.27])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 342405a0-ebd0-11eb-9430-12813bfff9fa;
 Fri, 23 Jul 2021 16:08:22 +0000 (UTC)
Received: from pmta12.mandrill.prod.suw01.rsglab.com (localhost [127.0.0.1])
 by mail179-27.suw41.mandrillapp.com (Mailchimp) with ESMTP id
 4GWZ463gycz6CQ3pH
 for <xen-devel@lists.xenproject.org>; Fri, 23 Jul 2021 16:08:22 +0000 (GMT)
Received: from [185.78.159.90] by mandrillapp.com id
 7cdb1def0caa4857ac7531b18568edfc; Fri, 23 Jul 2021 16:08:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 342405a0-ebd0-11eb-9430-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.fr;
	s=mandrill; t=1627056502; i=charles.schulz@vates.fr;
	bh=g6105xxJnlxIF25iosmsfZnR1NOcnemEtu1xC39+Mqk=;
	h=From:Subject:Message-Id:To:Cc:In-Reply-To:References:Date:
	 MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=RnM2PaL5N5Ng3mQsQWk6bzeE0YXwAeZFc47HINNKXLfaWcGDxxx2BTDP/g9hqZFCw
	 V6uibD+IilZ6zUSSqbaHnwhEd9N14XlSmn4v0usQLUxgmfCRsEgwiyJzk7voPQzGN2
	 B7Rk8Mksilta2b3Gcau6MF3whjVMnkRpvEcNsxzc=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; 
 i=@mandrillapp.com; q=dns/txt; s=mandrill; t=1627056502; h=From : 
 Subject : Message-Id : To : Cc : In-Reply-To : References : Date : 
 MIME-Version : Content-Type : Content-Transfer-Encoding : From : 
 Subject : Date : X-Mandrill-User : List-Unsubscribe; 
 bh=g6105xxJnlxIF25iosmsfZnR1NOcnemEtu1xC39+Mqk=; 
 b=AbbFjpJNweQ2yG/qm60k/WvvhPEuATaPMGzXRKSKAFJHMyR0XffllmN0r9QxZkT6yRyvEo
 ybUgLVRLuv4S096panmxz1dpL+AByfBP+/q2KFBvd6wgQIvXMHCldE/Yq4IqwumAQwuPAa0s
 0OmBJkvjNL2btSswXsiFsUeATYcJE=
From: "Charles-H. Schulz" <charles.schulz@vates.fr>
Subject: Re: Suggested changes to the admission policy of the vulnerability pre-disclosure list
X-Virus-Scanned: amavisd-new at vates.fr
Message-Id: <233d10c1a5ea82af845266740c28155cfc95ca63.camel@vates.fr>
To: George Dunlap <dunlapg@umich.edu>
Cc: Jan Beulich <jbeulich@suse.com>, xen-devel <xen-devel@lists.xenproject.org>, George Dunlap <george.dunlap@citrix.com>
In-Reply-To: <CAFLBxZaURZgLYPbKjxBv_btNPzX9D5w3gFCsVrTH0Xw=RfgPug@mail.gmail.com>
References: <87r1fzclw0.fsf@vates.fr> <6da30009-d817-f48e-11b4-ba9c92cde93d@suse.com> <87k0lqmmf8.fsf@vates.fr> <ea129173-c1fa-76f3-4964-8491b6728ca0@suse.com> <87wnpqm380.fsf@vates.fr> <14d1b95e-9d3a-8464-010b-d7796a26a8c4@suse.com> <87tukqy9gw.fsf@vates.fr> <CAFLBxZaURZgLYPbKjxBv_btNPzX9D5w3gFCsVrTH0Xw=RfgPug@mail.gmail.com>
X-Report-Abuse: Please forward a copy of this message, including all headers, to abuse@mandrill.com
X-Report-Abuse: You can also report abuse here: http://mandrillapp.com/contact/abuse?id=30504962.7cdb1def0caa4857ac7531b18568edfc
X-Mandrill-User: md_30504962
Feedback-ID: 30504962:30504962.20210723:md
Date: Fri, 23 Jul 2021 16:08:22 +0000
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello Georges,

Le vendredi 23 juillet 2021 =C3=A0 14:09 +0100, George Dunlap a =C3=A9crit=
=C2=A0:
> 
> 
> On Mon, Jul 19, 2021 at 9:49 AM Charles-H. Schulz
> <charles.schulz@vates.fr> wrote:
> > 
> > Jan Beulich @ 2021-07-19 08:44 CEST:
> > 
> > > > 
> > > > They act as a resource center for their downstreams, but the
> > information goes
> > > > top down, i.e from the software developer to the downstream, not
> > the
> > > > opposite. Also how it entails an even bigger change to the list
> > policy is
> > > > unclear to me. 
> > > 
> > > For things to make sense (as you seem to agree with as per further
> > up),
> > > if their downstreams aren't to subscribe to our (and perhaps other)
> > > pre-disclosure list themselves, the CERTs would need to act as a
> > proxy,
> > > in that they'd be permitted to relay the information before the
> > embargo
> > > ends. I didn't think there would be much of a difficulty seeing
> > that
> > > this would be more of a change to the policy.
> > 
> > Indeed, because you assume that CERTs will communicate information
> > before
> > they are public. But they don't work that way in that they act as the
> > legal
> > and actual hub for the public information and listing of
> > vulnerabilities
> > reports (CVEs etc.) What they do before the end of the embargo date I
> > already
> > explained, and that specifically does not entail sharing the
> > information with
> > downstream users. So to me there is no big change of policy - this is
> > the
> > highway patrol sharing the license plate numbers of criminals or
> > suspects
> > with the city police. 
> > 
> 
> 
> Nonetheless, you still haven't made a clear case why being informed of
> the vulnerabilities *under embargo* is necessary.=C2=A0 Anyone can sign u=
p
> to the xen-announce mailing list and receive notifications of XSAs at
> the moment the embargo lifts.=C2=A0 We advertise *that new advisories are
> coming out* on the main XSA webpage [1] and in a machine-readable JSON
> file [2] as soon as the predisclosure happens.=C2=A0 (There are also
> libraries [3] to consume the JSON file, and an example program [4]
> which could be run in a cron job to alert someone to upcoming public
> XSA disclosures.) The delta between the predisclosure and the public
> disclosure is typically two weeks.
> 
> Someone could argue that all of the activities you describe -- looking
> for larger patterns of vulnerabilities, acting as a clearinghouse /
> notification channel / advisory system for downstreams, etc -- could be
> done by observing the public disclosures, particularly if suitable
> people were alerted to upcoming public disclosures (and thus ready to
> process them as soon as they come out).=C2=A0 What is needed is to make t=
he
> case that this is insufficient -- that having the extra two weeks to
> process things before the public disclosure will be of material benefit
> in those activities.
> 
> (Hopefully it should be clear that I'm inviting you to make such a
> case.)


I had highlighted two reasons. Quoting myself: 

"So a national CERT being in the loop of such advanced, upstream
vulnerability pre-disclosures list is pretty much what a CERT does when
it's not publishing security advisories of some kind. There are several
benefits for a CERT:
- threat intelligence and analysis: one vulnerability discovered in one
  source may not be an isolated "incident" - it may be connected to a
broader attack made of the exploitation of several vulnerabilities
found across
  different software stacks. This also providers valuable information
about the
  threat landscape and relevance. For instance, Xen having several
  vulnerability reports is one thing, but what happens if KVM receives
a batch
  of previously unknown vulnerabilities roughly at the same time? For a
CERT,
  that level of information can be very important (sometimes "national
  security" important)

- because of a CERT being a nexus of several threat
information/intelligence
  by being as upstream as it can on critical software components, it
can then
  act -not by disclosing or patching yet unpublished vulnerabilities on
its
  own- by setting the effective patching and remediation work on the
  information systems it is in charge of protecting. In the case of a
  national CERT, such as the CERT-FR, that would be the French central
  administration networks and information systems. Essentially it would
  prioritize the response given the specific level and nature  of
threats and the
  presence of vulnerabilities on the systems (i.e: first patch MS
Office,
  then Apache httpd, then the vulnerability XYZ00123 on Xen as it
really
  affects only a small part of our Xen deployments)."

To this, I add a third, very specific one: CERT-FR is ultimately in
charge of protecting a set of governmental secure systems relying on
Xen.

I hope this is clearer now. 



> 
> [1] https://xenbits.xenproject.org/xsa/
> [2] https://xenbits.xenproject.org/xsa/xsa.json
> [3]
> https://gitlab.com/xen-project/people/gdunlap/go-xenlib/-/tree/master/xsa=
lib
> [4]
> https://gitlab.com/xen-project/people/gdunlap/go-xenlib/-/tree/master/scr=
ipts/xsa-alert
> =C2=A0
> > > > The what if question is not a valid one, as you are either
> > recognized as a
> > > > national CERT (there may sometimes be more than one) or you're
> > not, by
> > > > regulatory approval of some sort.=C2=A0 Nobody else can claim
> > > > they're a
> > national
> > > > CERT.
> > > > You can be a private CERT, but that's out of the scope of my
> > request. 
> > > > 
> > > > > The present items on the list try to use pretty generic
> > > > > terms, while your suggestion is pretty specific.
> > > > 
> > > > So how is that a problem in our this specific instance?
> > > 
> > > Why would we exclude private CERTs? I could easily see there
> > > being
> > > countries which have no "national CERT" (for a variety of
> > > reasons),
> > > with some private / non-government organization jumping in.
> > > 
> > 
> > This is a good point I'm not making :)
> > My request is solely about national CERTs, I do not feel that I
> > have
> > enough
> > standing here requesting that private CERTs be added to the list,
> > although
> > I'm sure there's a point to be made here as well.
> > 
> 
> 
> Jan, I think if you think it's better to include "private CERTs" (do
> such things exist?), then it should be up to you (or someone else in
> favor of such a thing) to craft the criteria for inclusion.=C2=A0 I
> personally think limiting ourselves to national CERTs to begin with
> is fine.
> 
> In any case, what's needed to move things forward (absent further
> discussion) is:
> 
> 1. Specific proposed changes to the security policy to be hammered
> out
> 
> 2. Someone to hold a project-wide vote, in accordance with the
> XenProject Governance Document.
> 
> Normally #2 would be me, but today is my last day until January.

Thank you. I don't think we're in a rush but if we can do this before
January it's perhaps better. 


Best regards,

-- 
Charles-H. Schulz
Chief Strategy Officer- CSO
XCP-ng & Xen Orchestra - Vates solutions



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 16:10:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 16:10:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160158.294471 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6xkv-0006OY-7R; Fri, 23 Jul 2021 16:10:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160158.294471; Fri, 23 Jul 2021 16:10:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6xkv-0006OR-3N; Fri, 23 Jul 2021 16:10:33 +0000
Received: by outflank-mailman (input) for mailman id 160158;
 Fri, 23 Jul 2021 16:10:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xku-0006O9-Hn; Fri, 23 Jul 2021 16:10:32 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xku-0006yq-AA; Fri, 23 Jul 2021 16:10:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xku-0007pE-2u; Fri, 23 Jul 2021 16:10:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xku-0006x3-2P; Fri, 23 Jul 2021 16:10:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=sbprkEdy5gsrORUvM4lkg/K6KUuMb9mKu+Wz0QTlrPg=; b=WAtPwsCasJc6q/0kOUf2jZqEaR
	Dx9iPSmOjWeNwdF8lLQz5dmPuylxNe+wn5Gc9f3DYZqXSVNhT893FpvVYnmZiT3LROdHTc2nsJLqE
	34Hss9G/kidA/MgmNptj/013HuXCYSHgosmhLO5dYXOZzWRh4RQpaid9MU/TGyk3Bgn0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163945-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163945: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 16:10:32 +0000

flight 163945 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163945/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   49 days
Failing since        162368  2021-06-04 15:42:59 Z   49 days  133 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 16:19:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 16:19:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160167.294485 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6xtK-0007Vk-2z; Fri, 23 Jul 2021 16:19:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160167.294485; Fri, 23 Jul 2021 16:19:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6xtJ-0007Vd-WA; Fri, 23 Jul 2021 16:19:13 +0000
Received: by outflank-mailman (input) for mailman id 160167;
 Fri, 23 Jul 2021 16:19:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xtJ-0007VT-6H; Fri, 23 Jul 2021 16:19:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xtI-000776-TY; Fri, 23 Jul 2021 16:19:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xtI-000831-JZ; Fri, 23 Jul 2021 16:19:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m6xtI-0002DV-J4; Fri, 23 Jul 2021 16:19:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=fFp+bmFsu/aYLxagyYQnf/WDuO6XL0YFfHTOE1to7AQ=; b=CVhesDFvlqy5dCJZOfM/uErDnu
	tbxhLhqfXjC8b0Lu1M5JDt05Kln+v6Gf+wED5oiPOSm/aL+LnbmnC+jiasDJSkF38bR/uP/LCPS0s
	1e2rE2d3uh4yt5XpsIUemeNQjWSMrSP4k8L3Fff5pKKZWh/G63jcEmaWKxLFDc/uUxNg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163936-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163936: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qcow2:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-debianhvm-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-intel:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-intel:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd11-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-qemuu-freebsd12-amd64:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-amd64-i386-qemuu-rhel6hvm-amd:redhat-install:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:windows-install:fail:regression
    qemu-mainline:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:debian-hvm-install:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-i386:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-freebsd10-amd64:guest-start:fail:regression
    qemu-mainline:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-amd64-amd64-libvirt-pair:guest-start/debian:fail:regression
    qemu-mainline:test-armhf-armhf-xl-vhd:debian-di-install:fail:regression
    qemu-mainline:test-amd64-i386-libvirt:guest-start:fail:regression
    qemu-mainline:test-amd64-i386-libvirt-xsm:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt:guest-start:fail:regression
    qemu-mainline:test-armhf-armhf-libvirt-raw:debian-di-install:fail:regression
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=beb191385882a2a283ce777d76b1a77e71813d14
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 16:19:12 +0000

flight 163936 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163936/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-amd64-xl-qcow2    12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-intel 12 redhat-install   fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-win7-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-amd64-libvirt     14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-intel 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd11-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-amd64-qemuu-nested-amd 12 debian-hvm-install  fail REGR. vs. 163321
 test-amd64-amd64-libvirt-vhd 12 debian-di-install        fail REGR. vs. 163321
 test-amd64-amd64-qemuu-freebsd12-amd64 13 guest-start    fail REGR. vs. 163321
 test-amd64-i386-libvirt-pair 25 guest-start/debian       fail REGR. vs. 163321
 test-amd64-i386-qemuu-rhel6hvm-amd 12 redhat-install     fail REGR. vs. 163321
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 12 windows-install   fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 12 windows-install  fail REGR. vs. 163321
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 12 debian-hvm-install fail REGR. vs. 163321
 test-amd64-i386-freebsd10-i386 13 guest-start            fail REGR. vs. 163321
 test-amd64-i386-freebsd10-amd64 13 guest-start           fail REGR. vs. 163321
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 163321
 test-amd64-amd64-libvirt-pair 25 guest-start/debian      fail REGR. vs. 163321
 test-armhf-armhf-xl-vhd      12 debian-di-install        fail REGR. vs. 163321
 test-amd64-i386-libvirt      14 guest-start              fail REGR. vs. 163321
 test-amd64-i386-libvirt-xsm  14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt     14 guest-start              fail REGR. vs. 163321
 test-armhf-armhf-libvirt-raw 12 debian-di-install        fail REGR. vs. 163321

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                beb191385882a2a283ce777d76b1a77e71813d14
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   17 days
Failing since        163327  2021-07-06 12:39:04 Z   17 days   31 attempts
Testing same since   163912  2021-07-22 17:07:03 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Cole Robinson <crobinso@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Snow <jsnow@redhat.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  Yang Zhong <yang.zhong@intel.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           fail    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       fail    
 test-amd64-amd64-qemuu-freebsd12-amd64                       fail    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        fail    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     fail    
 test-armhf-armhf-libvirt                                     fail    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                fail    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    fail    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 12376 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 16:42:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 16:42:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160178.294507 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6yG4-0002r5-CO; Fri, 23 Jul 2021 16:42:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160178.294507; Fri, 23 Jul 2021 16:42:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6yG4-0002qy-96; Fri, 23 Jul 2021 16:42:44 +0000
Received: by outflank-mailman (input) for mailman id 160178;
 Fri, 23 Jul 2021 16:42:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=gvTO=MP=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m6yG3-0002qs-I8
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 16:42:43 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ffc919e2-ebd4-11eb-944c-12813bfff9fa;
 Fri, 23 Jul 2021 16:42:42 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id A895660E78;
 Fri, 23 Jul 2021 16:42:41 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ffc919e2-ebd4-11eb-944c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1627058561;
	bh=FTtuzLjdnKJ4jksYbV/tiwauRxeq6647XH+dU1SV8ss=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=QjK5N98oCByX2zBbA3Gj+skaAngUn6G1QhZeh1p678oejIjqKLg8lXxMkOJxdp0Zh
	 xAk+D6Ao4OqvUFzx+o5b/Rgixj0uecamfUYxuIrfWaBtSQusdBQAEN8ZlUiXgIuzqM
	 +wIqRd/Ck41Y4sn5ktzn4fu/i3ya6KWJ/9cJrQ7mSenDu9CHWsFu6yvztxYGnkFyIV
	 W2mvQAEZNiaOM2W3dviyp3VCUNts66i1bSzXVc8fMBGsdi+wAyqBPawy8/t1NyNL0c
	 WYioaFp5AEcpKuOoIJ95wjJgmMhY+8ixDBGh4/Y4xgq/2P16Vve7SstDpS82obNbzY
	 MQ9D6QSrgFWkg==
Date: Fri, 23 Jul 2021 09:42:41 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>, 
    "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
    Andrii Anisov <Andrii_Anisov@epam.com>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
In-Reply-To: <88c43f6c-9d76-1cab-93f5-ddecc76b487f@xen.org>
Message-ID: <alpine.DEB.2.21.2107230928460.10122@sstabellini-ThinkPad-T480s>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org> <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org> <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s> <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org> <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s> <88c43f6c-9d76-1cab-93f5-ddecc76b487f@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Fri, 23 Jul 2021, Julien Grall wrote:
> On 22/07/2021 22:39, Stefano Stabellini wrote:
> > On Thu, 22 Jul 2021, Julien Grall wrote:
> > > > You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
> > > > from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
> > > > work the same.
> > > > 
> > > > Looking at the boot logs on pastebin I noticed that Xen is not loaded at
> > > > a 2MB aligned address. I recommend you change Xen loading address to
> > > > 0x500200000. And the kernel loading address to 0x500400000.
> > > 
> > > I am curious to know why you recommend to load at 2MB aligned address. The
> > > Image protocol doesn't require to load a 2MB aligned address. In fact, we
> > > add
> > > issue on Juno because the bootloader would load Xen at a 4KB address. UEFI
> > > will also load at a 4KB align address.
> > 
> > It is from empirical evidence :-)
> 
> Right...
> 
> > I cannot tell you the exact reason but I saw "strange" problems in the
> > past that went away after choosing a 2MB alignment. So we settled for
> > using 2MB in ImageBuilder and we haven't seen any more issues.
> 
> It would have been good to report such issue back then so it could have been
> analyzed and possibly fixed.
> 
> > However, it could have been anything: a bug in U-Boot not relevant
> > anymore, a bug in Linux, etc. I don't know for sure.
> 
> This is the worrying part. We have a potential bug that no one knows why it
> happened. Can this be reproduced?

I managed to reproduce the problem. I switched ImageBuilder to use 4K
alignment (just by changing the variable "offset" at the top of
scripts/uboot-script-gen). It generated a boot.source file like this:

tftpb 0xC01000 2021.1/xen
tftpb 0xCEA000 2021.1/xen-Image-5.10
tftpb 0x18D1000 2021.1/initrd.cpio
tftpb 0x1A55000 2021.1/xen.dtb
[trimmed because the rest is not too relevant]


These are the sizes:

12479370 Jul  21 19:02 xen-Image-5.10
40577    Jul  21 18:25 xen.dtb
950280   Jul  19 16:58 xen
1586176  Jun  4  17:14 initrd.cpio


I did the calculations by hand and there are no overlaps. This is the
output from u-boot and boot log failure: https://pastebin.com/rbTBPn5g

Using 2MB works. I tried 1MB for curiosity and got a different
error: https://pastebin.com/UHFUHyxN

Do you think it is worth investigating further?

- Stefano


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160200.294528 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJY-0003Lv-MM; Fri, 23 Jul 2021 17:50:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160200.294528; Fri, 23 Jul 2021 17:50:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJY-0003L6-HD; Fri, 23 Jul 2021 17:50:24 +0000
Received: by outflank-mailman (input) for mailman id 160200;
 Fri, 23 Jul 2021 17:50:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJX-0003JD-Fs
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:23 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7315d1a2-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:21 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJQ-0005Li-JV; Fri, 23 Jul 2021 11:50:17 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005rW-Is; Fri, 23 Jul 2021 11:50:13 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7315d1a2-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=HKCVUstwA/z3wuW2EGad6Fa2PQLjmM0RyJDS41E8gEg=; b=ceE3xNa5zKwrpv+KSzmE7LfjqN
	0q/StfTaFLC89OIPsL5+enoCQ8wyl6/6i4jsEFiR43MEKekW1TRVGs6gbFQAw05b52z+Gg/B/HERs
	9OhcoIjeIB26sAHv5+uTd3D/NbWNNXUPnOUr95+mHUB34EmPY7Fko/92+5UiQVxjDeY5a2hCXho37
	WUkvAUx9LUDaBn28taATIaM4Whds0u2lS0PSsUSwfkqXp0M+8yje3Gmj75OuBqwto3/1QVzP9VFof
	dxz4o8gHrETaFZyTg9X6dGaLxMEevxwctrUYwYEcmWkRnf+9VN8ernNXHxdpFxwYPEua/aErYGkeC
	VaCk22FA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Fri, 23 Jul 2021 11:50:08 -0600
Message-Id: <20210723175008.22410-22-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 21/21] dma-mapping: Disallow .map_sg operations from returning zero on error
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Now that all the .map_sg operations have been converted to returning
proper error codes, drop the code to handle a zero return value,
add a warning if a zero is returned and update the comment for the
map_sg operation.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/mapping.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index b8dc8b1cb402..86a8a421344a 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -194,6 +194,9 @@ static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
 	else
 		ents = ops->map_sg(dev, sg, nents, dir, attrs);
 
+	if (WARN_ON_ONCE(ents == 0))
+		return -EIO;
+
 	if (ents > 0)
 		debug_dma_map_sg(dev, sg, nents, ents, dir);
 
@@ -259,9 +262,7 @@ int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
 	int nents;
 
 	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
-	if (nents == 0)
-		return -EIO;
-	else if (nents < 0) {
+	if (nents < 0) {
 		if (WARN_ON_ONCE(nents != -EINVAL && nents != -ENOMEM &&
 				 nents != -EIO))
 			return -EIO;
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160199.294523 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJY-0003JR-Cg; Fri, 23 Jul 2021 17:50:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160199.294523; Fri, 23 Jul 2021 17:50:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJY-0003JK-9Z; Fri, 23 Jul 2021 17:50:24 +0000
Received: by outflank-mailman (input) for mailman id 160199;
 Fri, 23 Jul 2021 17:50:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJW-0003J8-W6
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:23 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f6a8706e-c5a4-4fa6-86ba-1775219e69ef;
 Fri, 23 Jul 2021 17:50:21 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJQ-0005Lg-RK; Fri, 23 Jul 2021 11:50:17 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005rT-EK; Fri, 23 Jul 2021 11:50:13 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f6a8706e-c5a4-4fa6-86ba-1775219e69ef
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=x3KSnhFQmhq0kDAcj69QIXa3ZhZHzFN2nEhizdLNjiI=; b=M3qmRbqsKCC+FKzgIYDrT251SH
	Nzml0wv2K48qt2sJXjzM1DxP/eDRfrPjJ9bdzaj0HtsiKgS7pahyju0brznWg3AUJX+JatcVTcM4g
	0wsnuMo5aYzvw314Ri5RUkrtzSp9HF/aXGG5ksmYAYRZ5BAnS1pC0gSFfSU2XiRUXllDLfF/3xgcP
	YUj9pjNTYWDHh8iHeimXsNZzv//XPnvhiWZXPpnRGhPZv18QuImLyc5EfuRCj99XGEoFia3P4JxFW
	zRK7JfICPO6TzZ/eLMEo6IcVqpEkBhDIJpDj5PqWbAxQ3M83go6+8pynIzl/aD4Jy3LIvtXsBIgDO
	p3nGybYg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Fri, 23 Jul 2021 11:50:07 -0600
Message-Id: <20210723175008.22410-21-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 20/21] dma-mapping: return error code from dma_dummy_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

The only errno to return is -EINVAL in the case when DMA is not
supported.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/dummy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/dma/dummy.c b/kernel/dma/dummy.c
index eacd4c5b10bf..b492d59ac77e 100644
--- a/kernel/dma/dummy.c
+++ b/kernel/dma/dummy.c
@@ -22,7 +22,7 @@ static int dma_dummy_map_sg(struct device *dev, struct scatterlist *sgl,
 		int nelems, enum dma_data_direction dir,
 		unsigned long attrs)
 {
-	return 0;
+	return -EINVAL;
 }
 
 static int dma_dummy_supported(struct device *hwdev, u64 mask)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160202.294551 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJe-0003vt-BA; Fri, 23 Jul 2021 17:50:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160202.294551; Fri, 23 Jul 2021 17:50:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJe-0003uc-6R; Fri, 23 Jul 2021 17:50:30 +0000
Received: by outflank-mailman (input) for mailman id 160202;
 Fri, 23 Jul 2021 17:50:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJc-0003JD-BK
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:28 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 73139cb7-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:21 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005Li-Sn; Fri, 23 Jul 2021 11:50:14 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJK-0005qb-OJ; Fri, 23 Jul 2021 11:50:10 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 73139cb7-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=BqE/2wCCjH4FvfGKjQ09Cv01+9Px9vk9cMsrkFQoCn0=; b=I0NqDGyFiHeU4vQIrAHeYz9/OX
	RnbsqrIWWArueD4reUWEXhXjdCxttxJixLpASD8WyFe9J/cv5ALJGHTdtEm6rCwvD6eoT0PfxJzsr
	pcY28iGg92alpdU6jVLWb/XcJgUHIs3QrSGvqLxCQlTa9o9xJY06Nj7nHY8vPpcwinKgjHdFtNIq2
	FA2Za3AhlhPpxgT0kGWLvtBXvp55hycTfrI6RyTL4xPeplXhvfYGbCzgbF54Qc25rW+h9eSFC7wgi
	mF4zGD5pQcmZnzHMpGu/QiTAdDpsHWqS6g1Zw2GAPcveTb8Yqm0bB4pmSZdV192zGGh9aaF0WUgVz
	tsjKiQ7g==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Fri, 23 Jul 2021 11:49:49 -0600
Message-Id: <20210723175008.22410-3-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 02/21] dma-direct: Return appropriate error code from dma_direct_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Now that the map_sg() op expects error codes instead of return zero on
error, convert dma_direct_map_sg() to return an error code. Per the
documentation for dma_map_sgtable(), -EIO is returned due to an
DMA_MAPPING_ERROR with unknown cause.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/direct.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index f737e3347059..f33ceb68aef2 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -411,7 +411,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
 
 out_unmap:
 	dma_direct_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
-	return 0;
+	return -EIO;
 }
 
 dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160203.294571 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJi-0004WO-MQ; Fri, 23 Jul 2021 17:50:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160203.294571; Fri, 23 Jul 2021 17:50:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJi-0004W9-HS; Fri, 23 Jul 2021 17:50:34 +0000
Received: by outflank-mailman (input) for mailman id 160203;
 Fri, 23 Jul 2021 17:50:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJg-0003J8-Sm
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:32 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 67f8c4e8-df47-4574-b03d-9651906e6ab5;
 Fri, 23 Jul 2021 17:50:24 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJU-0005Li-Af; Fri, 23 Jul 2021 11:50:21 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005rN-4i; Fri, 23 Jul 2021 11:50:13 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 67f8c4e8-df47-4574-b03d-9651906e6ab5
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=bxYuYkexdgjCkkzv9UnzPxUCVLmS0/r9pZcrAxTBVsI=; b=tU4RGTXputVtGqHoSX1hnwO6vq
	EjlpGIj5k+GghlZ7jikEiPIT8qkgX60V5/or7/Cy6I2MiCFEcYbQlZ2TOf6GsPCGRd7YGvg3pL9pv
	Q4ipjd9t6Z2880WyeStUvUbi+V3OBorxPgG7ZTdjSgHc9imUxASFJTZ5xOXWqB1UHC4Ricck7IV1n
	8BRiVBsxku33wBiGbzLNbgllz3J+3LALeLkPreaFk2qRuRTVfIx4RMU57mLsLS1oPtTpXFlmWHI4k
	CmFBSb173r8jKtju9kVtybiTh0dyGGcWpvXnUdHLUvxRNxukM75x6B7+fp2YIGz8Mwqlkqw8nHl7C
	1fL1Du7Q==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Fri, 23 Jul 2021 11:50:05 -0600
Message-Id: <20210723175008.22410-19-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, schnelle@linux.ibm.com, tsbogend@alpha.franken.de, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 18/21] x86/amd_gart: return error code from gart_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

So make __dma_map_cont() return a valid errno (which is then propagated
to gart_map_sg() via dma_map_cont()) and return it in case of failure.

Also, return -EINVAL in case of invalid nents.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/x86/kernel/amd_gart_64.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 9ac696487b13..46aea9a4f26b 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -331,7 +331,7 @@ static int __dma_map_cont(struct device *dev, struct scatterlist *start,
 	int i;
 
 	if (iommu_start == -1)
-		return -1;
+		return -ENOMEM;
 
 	for_each_sg(start, s, nelems, i) {
 		unsigned long pages, addr;
@@ -380,13 +380,13 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		       enum dma_data_direction dir, unsigned long attrs)
 {
 	struct scatterlist *s, *ps, *start_sg, *sgmap;
-	int need = 0, nextneed, i, out, start;
+	int need = 0, nextneed, i, out, start, ret;
 	unsigned long pages = 0;
 	unsigned int seg_size;
 	unsigned int max_seg_size;
 
 	if (nents == 0)
-		return 0;
+		return -EINVAL;
 
 	out		= 0;
 	start		= 0;
@@ -414,8 +414,9 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 			if (!iommu_merge || !nextneed || !need || s->offset ||
 			    (s->length + seg_size > max_seg_size) ||
 			    (ps->offset + ps->length) % PAGE_SIZE) {
-				if (dma_map_cont(dev, start_sg, i - start,
-						 sgmap, pages, need) < 0)
+				ret = dma_map_cont(dev, start_sg, i - start,
+						   sgmap, pages, need);
+				if (ret < 0)
 					goto error;
 				out++;
 
@@ -432,7 +433,8 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		pages += iommu_num_pages(s->offset, s->length, PAGE_SIZE);
 		ps = s;
 	}
-	if (dma_map_cont(dev, start_sg, i - start, sgmap, pages, need) < 0)
+	ret = dma_map_cont(dev, start_sg, i - start, sgmap, pages, need);
+	if (ret < 0)
 		goto error;
 	out++;
 	flush_gart();
@@ -458,7 +460,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 	iommu_full(dev, pages << PAGE_SHIFT, dir);
 	for_each_sg(sg, s, nents, i)
 		s->dma_address = DMA_MAPPING_ERROR;
-	return 0;
+	return ret;
 }
 
 /* allocate and map a coherent mapping */
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160201.294547 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJd-0003ro-Uz; Fri, 23 Jul 2021 17:50:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160201.294547; Fri, 23 Jul 2021 17:50:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJd-0003rh-RN; Fri, 23 Jul 2021 17:50:29 +0000
Received: by outflank-mailman (input) for mailman id 160201;
 Fri, 23 Jul 2021 17:50:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJb-0003J8-Sd
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:27 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id dc33f868-1202-48c2-83da-44e06fd78f8b;
 Fri, 23 Jul 2021 17:50:21 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005Lg-Sm; Fri, 23 Jul 2021 11:50:14 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJK-0005qW-Eh; Fri, 23 Jul 2021 11:50:10 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: dc33f868-1202-48c2-83da-44e06fd78f8b
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:Message-Id:Date:Cc:To:From
	:references:content-disposition:in-reply-to;
	bh=LQAXJCFOAL4wucMr1J1VtJo8YmjL7Kj+0Z4w4rvIHlA=; b=TaYSXIwq9R6P6E55tx/ubbtnmS
	Ix5S11dwF37+JjGSmV0s6xjYEbeV6HdQPY8L4ceTMQxqpBLWTmndOS7kQPDkYi2krgtZOLSSVrbb9
	c0wyfIKZ/WK/9ISrP+H4LcIuYdyOl+C/RV6yOHboEG5zPmMsNfK3aO2OoJum1Yw5QAO6ceknbIXSK
	YJ19q++0q3iOK/z8UWCCZbVtohsVag7m/aVg7sT15ZTzk7ir/QgR0nCButA7tc9Ka/8+8ms4RDMBa
	ZTvS5QgWu1CMefIqiLZqWI4h41+KbLiC3sS/uG0C6Qqc+uqKCjukEFJp4LCqKNzSSEPRjV4K5xyIk
	redVVngg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Fri, 23 Jul 2021 11:49:47 -0600
Message-Id: <20210723175008.22410-1-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 00/21] .map_sg() error cleanup
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Hi,

This v2 of the series is spun out and expanded from my work to add
P2PDMA support to DMA map operations[1]. v1 is at [2]. The main changes
in v1 are to more carefully define the meaning of the error codes for
dma_map_sgtable().

The P2PDMA work requires distinguishing different error conditions in
a map_sg operation. dma_map_sgtable() already allows for returning an
error code (where as dma_map_sg() is only allowed to return zero)
however, it currently only returns -EINVAL when a .map_sg() call returns
zero.

This series cleans up all .map_sg() implementations to return appropriate
error codes. After the cleanup, dma_map_sg() will still return zero,
however dma_map_sgtable() will pass the error code from the .map_sg()
call. Thanks go to Martn Oliveira for doing a lot of the cleanup of the
obscure implementations.

The patch set is based off of v5.14-rc2 and a git repo can be found
here:

  https://github.com/sbates130272/linux-p2pmem map_sg_err_cleanup_v2

Thanks,

Logan

[1] https://lore.kernel.org/linux-block/20210513223203.5542-1-logang@deltatee.com/
[2] https://lore.kernel.org/linux-mips/20210715164544.6827-1-logang@deltatee.com/

--

Changes in v2:
  - Attempt to define the meanings of the errors returned by
    dma_map_sgtable() and restrict the valid return codes of
    .map_sg implementations. (Per Christoph)
  - Change dma_map_sgtable() to EXPORT_SYMBOL_GPL() (Per Christoph)
  - Add patches to remove the erroneous setting of sg->dma_address
    to DMA_MAP_ERROR in a few .map_sg(0 implementations. (Per
    Christoph).

--

Logan Gunthorpe (10):
  dma-mapping: Allow map_sg() ops to return negative error codes
  dma-direct: Return appropriate error code from dma_direct_map_sg()
  iommu: Return full error code from iommu_map_sg[_atomic]()
  dma-iommu: Return error code from iommu_dma_map_sg()
  ARM/dma-mapping: don't set failed sg dma_address to DMA_MAPPING_ERROR
  powerpc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
  s390/pci: don't set failed sg dma_address to DMA_MAPPING_ERROR
  sparc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
  x86/amd_gart: don't set failed sg dma_address to DMA_MAPPING_ERROR
  dma-mapping: Disallow .map_sg operations from returning zero on error

Martin Oliveira (11):
  alpha: return error code from alpha_pci_map_sg()
  ARM/dma-mapping: return error code from .map_sg() ops
  ia64/sba_iommu: return error code from sba_map_sg_attrs()
  MIPS/jazzdma: return error code from jazz_dma_map_sg()
  powerpc/iommu: return error code from .map_sg() ops
  s390/pci: return error code from s390_dma_map_sg()
  sparc/iommu: return error codes from .map_sg() ops
  parisc: return error code from .map_sg() ops
  xen: swiotlb: return error code from xen_swiotlb_map_sg()
  x86/amd_gart: return error code from gart_map_sg()
  dma-mapping: return error code from dma_dummy_map_sg()

 arch/alpha/kernel/pci_iommu.c           | 10 ++-
 arch/arm/mm/dma-mapping.c               | 26 +++++---
 arch/ia64/hp/common/sba_iommu.c         |  6 +-
 arch/mips/jazz/jazzdma.c                |  2 +-
 arch/powerpc/kernel/iommu.c             |  6 +-
 arch/powerpc/platforms/ps3/system-bus.c |  2 +-
 arch/powerpc/platforms/pseries/vio.c    |  5 +-
 arch/s390/pci/pci_dma.c                 | 13 ++--
 arch/sparc/kernel/iommu.c               |  6 +-
 arch/sparc/kernel/pci_sun4v.c           |  6 +-
 arch/sparc/mm/iommu.c                   |  2 +-
 arch/x86/kernel/amd_gart_64.c           | 18 +++---
 drivers/iommu/dma-iommu.c               | 23 +++++--
 drivers/iommu/iommu.c                   | 15 ++---
 drivers/parisc/ccio-dma.c               |  2 +-
 drivers/parisc/sba_iommu.c              |  2 +-
 drivers/xen/swiotlb-xen.c               |  2 +-
 include/linux/dma-map-ops.h             |  5 +-
 include/linux/dma-mapping.h             | 35 ++--------
 include/linux/iommu.h                   | 22 +++----
 kernel/dma/direct.c                     |  2 +-
 kernel/dma/dummy.c                      |  2 +-
 kernel/dma/mapping.c                    | 86 ++++++++++++++++++++++---
 23 files changed, 181 insertions(+), 117 deletions(-)


base-commit: 2734d6c1b1a089fb593ef6a23d4b70903526fe0c
--
2.20.1


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160204.294575 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJj-0004aF-5h; Fri, 23 Jul 2021 17:50:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160204.294575; Fri, 23 Jul 2021 17:50:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJi-0004Zf-UH; Fri, 23 Jul 2021 17:50:34 +0000
Received: by outflank-mailman (input) for mailman id 160204;
 Fri, 23 Jul 2021 17:50:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJh-0003JD-Be
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:33 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 73139cb6-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:21 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005Lh-Sm; Fri, 23 Jul 2021 11:50:15 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJK-0005qY-JE; Fri, 23 Jul 2021 11:50:10 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 73139cb6-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=3dDdw3ixNeKNwcOz2MGNHAL8x40zomtWAxb+xrMDPos=; b=Pe5X2FhCP8WEWFNeo5ont9ytdE
	MS7FdpRR4PN5QRSDgWfkkvTNpLVh+ZUDb5dqumfMyUrn3XUtm/Ryv5Gm91Nutblnuvp/feCHledFV
	cXmOdAlEXogSC6eKb3gDD2vgi0vXlKBvKXLRc7wnk7Qi4ADaj7ysaouoM5wmrx8cHRag5qgW8820L
	6UyAqkfT99tEBiMFgEmOyboD1TuFYavmVPOi8FbbNJFyhSg5nO9ReYQOXFhavVTktEB1pDpgyX17d
	XRc71xw8FSZWuvkg6zfFvrgVCm3LA3vggs+kjkGJQFz9AmLCHgqZb6DhGgEVAW/Lt+virkNJKrBKG
	NMjiC+Hg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Fri, 23 Jul 2021 11:49:48 -0600
Message-Id: <20210723175008.22410-2-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 01/21] dma-mapping: Allow map_sg() ops to return negative error codes
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Allow dma_map_sgtable() to pass errors from the map_sg() ops. This
will be required for returning appropriate error codes when mapping
P2PDMA memory.

Introduce __dma_map_sg_attrs() which will return the raw error code
from the map_sg operation (whether it be negative or zero). Then add a
dma_map_sg_attrs() wrapper to convert any negative errors to zero to
satisfy the existing calling convention.

dma_map_sgtable() defines three error codes that .map_sg implementations
are allowed to return: -EINVAL, -ENOMEM and -EIO. The latter of which
is a generic return for cases that are passing DMA_MAPPING_ERROR
through.

dma_map_sgtable() will convert a zero error return for old map_sg() ops
into a -EIO return and return any negative errors as reported.

This allows map_sg implementations to start returning multiple
negative error codes. Legacy map_sg implementations can continue
to return zero until they are all converted.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 include/linux/dma-map-ops.h |  5 ++-
 include/linux/dma-mapping.h | 35 +++------------
 kernel/dma/mapping.c        | 85 +++++++++++++++++++++++++++++++++----
 3 files changed, 87 insertions(+), 38 deletions(-)

diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index 0d53a96a3d64..2f842498c448 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -41,8 +41,9 @@ struct dma_map_ops {
 			size_t size, enum dma_data_direction dir,
 			unsigned long attrs);
 	/*
-	 * map_sg returns 0 on error and a value > 0 on success.
-	 * It should never return a value < 0.
+	 * map_sg should return a negative error code on error. See
+	 * dma_map_sgtable() for a list of appropriate error codes
+	 * and their meanings.
 	 */
 	int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents,
 			enum dma_data_direction dir, unsigned long attrs);
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 183e7103a66d..daa1e360f0ee 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -110,6 +110,8 @@ int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
 				      int nents, enum dma_data_direction dir,
 				      unsigned long attrs);
+int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs);
 dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr,
 		size_t size, enum dma_data_direction dir, unsigned long attrs);
 void dma_unmap_resource(struct device *dev, dma_addr_t addr, size_t size,
@@ -174,6 +176,11 @@ static inline void dma_unmap_sg_attrs(struct device *dev,
 		unsigned long attrs)
 {
 }
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	return -EOPNOTSUPP;
+}
 static inline dma_addr_t dma_map_resource(struct device *dev,
 		phys_addr_t phys_addr, size_t size, enum dma_data_direction dir,
 		unsigned long attrs)
@@ -343,34 +350,6 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
-/**
- * dma_map_sgtable - Map the given buffer for DMA
- * @dev:	The device for which to perform the DMA operation
- * @sgt:	The sg_table object describing the buffer
- * @dir:	DMA direction
- * @attrs:	Optional DMA attributes for the map operation
- *
- * Maps a buffer described by a scatterlist stored in the given sg_table
- * object for the @dir DMA operation by the @dev device. After success the
- * ownership for the buffer is transferred to the DMA domain.  One has to
- * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
- * ownership of the buffer back to the CPU domain before touching the
- * buffer by the CPU.
- *
- * Returns 0 on success or -EINVAL on error during mapping the buffer.
- */
-static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
-		enum dma_data_direction dir, unsigned long attrs)
-{
-	int nents;
-
-	nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
-	if (nents <= 0)
-		return -EINVAL;
-	sgt->nents = nents;
-	return 0;
-}
-
 /**
  * dma_unmap_sgtable - Unmap the given buffer for DMA
  * @dev:	The device for which to perform the DMA operation
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 2b06a809d0b9..b8dc8b1cb402 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -177,12 +177,8 @@ void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size,
 }
 EXPORT_SYMBOL(dma_unmap_page_attrs);
 
-/*
- * dma_maps_sg_attrs returns 0 on error and > 0 on success.
- * It should never return a value < 0.
- */
-int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
-		enum dma_data_direction dir, unsigned long attrs)
+static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
+	 int nents, enum dma_data_direction dir, unsigned long attrs)
 {
 	const struct dma_map_ops *ops = get_dma_ops(dev);
 	int ents;
@@ -197,13 +193,86 @@ int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
 		ents = dma_direct_map_sg(dev, sg, nents, dir, attrs);
 	else
 		ents = ops->map_sg(dev, sg, nents, dir, attrs);
-	BUG_ON(ents < 0);
-	debug_dma_map_sg(dev, sg, nents, ents, dir);
+
+	if (ents > 0)
+		debug_dma_map_sg(dev, sg, nents, ents, dir);
 
 	return ents;
 }
+
+/**
+ * dma_map_sg_attrs - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sg:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist passed in the sg argument with
+ * nents segments for the @dir DMA operation by the @dev device.
+ *
+ * Returns the number of mapped entries (which can be less than nents)
+ * on success. Zero is returned for any error.
+ *
+ * dma_unmap_sg_attrs() should be used to unmap the buffer with the
+ * original sg and original nents (not the value returned by this funciton).
+ */
+int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
+		    int nents, enum dma_data_direction dir, unsigned long attrs)
+{
+	int ret;
+
+	ret = __dma_map_sg_attrs(dev, sg, nents, dir, attrs);
+	if (ret < 0)
+		ret = 0;
+
+	return ret;
+}
 EXPORT_SYMBOL(dma_map_sg_attrs);
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success, the
+ * ownership for the buffer is transferred to the DMA domain.  One has to
+ * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ *
+ * Returns 0 on success or a negative error code on error. The following
+ * error codes are supported with the given meaning:
+ *
+ *   -EINVAL - An invalid argument, unaligned access or other error
+ *	       in usage. Will not succeed if retried.
+ *   -ENOMEM - Insufficient resources (like memory or IOVA space) to
+ *	       complete the mapping. Should succeed if retried later.
+ *   -EIO    - Legacy error code with an unknown meaning. eg. this is
+ *	       returned if a lower level call returned DMA_MAPPING_ERROR.
+ */
+int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		    enum dma_data_direction dir, unsigned long attrs)
+{
+	int nents;
+
+	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+	if (nents == 0)
+		return -EIO;
+	else if (nents < 0) {
+		if (WARN_ON_ONCE(nents != -EINVAL && nents != -ENOMEM &&
+				 nents != -EIO))
+			return -EIO;
+		return nents;
+	}
+
+	sgt->nents = nents;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(dma_map_sgtable);
+
 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
 				      int nents, enum dma_data_direction dir,
 				      unsigned long attrs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160205.294595 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJm-0005ED-LE; Fri, 23 Jul 2021 17:50:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160205.294595; Fri, 23 Jul 2021 17:50:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJm-0005Dz-FB; Fri, 23 Jul 2021 17:50:38 +0000
Received: by outflank-mailman (input) for mailman id 160205;
 Fri, 23 Jul 2021 17:50:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJl-0003J8-T8
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:37 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b09d1006-09d8-422c-a4bd-0f01d77dabf4;
 Fri, 23 Jul 2021 17:50:29 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJX-0005Lg-Hu; Fri, 23 Jul 2021 11:50:25 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005rH-Po; Fri, 23 Jul 2021 11:50:12 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b09d1006-09d8-422c-a4bd-0f01d77dabf4
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=fB/z94v+Zqx6MpbGppBoixHLzAQycdh8k5f4rRFmrO0=; b=PvIVsf2jJdjk6A970FfEEgio21
	C/GMm/RBk6KYroHH2dZOmLXdmLkBew5HHh4ogJ4P2/jEv02L00NKiJaxWDVBVdI85Fvgv3Vr6zuz1
	cUHgUTOcWG9J5J9uaCEQqP3EHXfbGhr2Ne5j9gcnyqOw4irFL91qML0lTF0/IWJN4kHlrWfjjR3wN
	hQ4+y7+g/5FaYW+hEGmzZqEuoaouyuHCmMgvesyPjw7aA8hV9KjB8TONVSEjVHcTPSuNw8lgf4Z8B
	OAbdFLIqDvFcxElYIiNYLpJtj4l9uUBc/8qDpgwPEhQ1nG1iZt/LOiAHcmHRyh06r9hB2YuqjLowo
	E+cwXFgQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>
Date: Fri, 23 Jul 2021 11:50:03 -0600
Message-Id: <20210723175008.22410-17-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, James.Bottomley@HansenPartnership.com, deller@gmx.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 16/21] parisc: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.
Return -EINVAL if the ioc cannot be obtained.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
---
 drivers/parisc/ccio-dma.c  | 2 +-
 drivers/parisc/sba_iommu.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index b5f9ee81a46c..452e72b7bd01 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -918,7 +918,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
 	BUG_ON(!dev);
 	ioc = GET_IOC(dev);
 	if (!ioc)
-		return 0;
+		return -EINVAL;
 	
 	DBG_RUN_SG("%s() START %d entries\n", __func__, nents);
 
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index dce4cdf786cd..e60690d38d67 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -947,7 +947,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
 
 	ioc = GET_IOC(dev);
 	if (!ioc)
-		return 0;
+		return -EINVAL;
 
 	/* Fast path single entry scatterlists. */
 	if (nents == 1) {
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160206.294606 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJo-0005X3-1K; Fri, 23 Jul 2021 17:50:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160206.294606; Fri, 23 Jul 2021 17:50:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJn-0005Vj-Qf; Fri, 23 Jul 2021 17:50:39 +0000
Received: by outflank-mailman (input) for mailman id 160206;
 Fri, 23 Jul 2021 17:50:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJm-0003JD-Bw
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:38 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 749e7538-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:24 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJU-0005Lg-5M; Fri, 23 Jul 2021 11:50:20 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005rK-US; Fri, 23 Jul 2021 11:50:13 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 749e7538-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=SvEzwpNxmVfyllnMOG86hKyCuFZgCTrDE53Ra6OCzdU=; b=AIGezHoGK3cvhuvpm9LgSCPFw+
	W39PIjEzRmI0X/NioqeEpNuXVb1zCbBKuFA4bT5I06t9NnL2eD+Akf2L/ak9iCisf4dW66hFmhAw6
	ftb1BEa7F5hkipqxWEWZ/Fj6HLGh6gRQ8WtphEiYPX9P7x1I0GEM1Xdd8XzTF6TlxjK7Us4SxGOi8
	tL4vIiFVWCnAvaZPy6kEYVkNAU7BNbN2Hsl/Lgw0seP4DnzQg5uV597ldlCZB5/GL32xRfD5KAyKz
	XBbHKprL3crIvNyGQ3V/IN9t/HbPBhcdFkUPCsJ13Du7CJo08M9AyGdHO5ZOYYNEUHRhNZVa0mEtQ
	zjT4+/FA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Date: Fri, 23 Jul 2021 11:50:04 -0600
Message-Id: <20210723175008.22410-18-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, jgross@suse.com, sstabellini@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 17/21] xen: swiotlb: return error code from xen_swiotlb_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

xen_swiotlb_map_sg() may only fail if xen_swiotlb_map_page() fails, but
xen_swiotlb_map_page() only supports returning errors as
DMA_MAPPING_ERROR. So coalesce all errors into EIO per the documentation
for dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
---
 drivers/xen/swiotlb-xen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 24d11861ac7d..85d58b720a24 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -509,7 +509,7 @@ xen_swiotlb_map_sg(struct device *dev, struct scatterlist *sgl, int nelems,
 out_unmap:
 	xen_swiotlb_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
 	sg_dma_len(sgl) = 0;
-	return 0;
+	return -EIO;
 }
 
 static void
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160207.294619 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJs-0006F7-HJ; Fri, 23 Jul 2021 17:50:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160207.294619; Fri, 23 Jul 2021 17:50:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJs-0006Cp-9W; Fri, 23 Jul 2021 17:50:44 +0000
Received: by outflank-mailman (input) for mailman id 160207;
 Fri, 23 Jul 2021 17:50:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJq-0003J8-TE
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:42 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 650dba0d-3cb7-4f80-bfe4-0d224be2d2f8;
 Fri, 23 Jul 2021 17:50:29 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJY-0005Lh-Dr; Fri, 23 Jul 2021 11:50:25 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005rB-GL; Fri, 23 Jul 2021 11:50:12 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 650dba0d-3cb7-4f80-bfe4-0d224be2d2f8
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=6y6u7mqV1FaPPB3FCU6tc5JcXwZSIOmHMoiIHkmUZvc=; b=fWQRPHdRqghbBBVDLqG6ndBgfn
	eXQwCsO9PsHe+wpOSli6MSM+WzRFexEuJ2MCK07YGw999846MnVy8eAm45aCWjD3gPdpAlgN/kWk7
	L4JGj+Yedypq6NVUlsXQCPzsMftd+KTMuVrF9z1+bgPsqQ9BsTsDe5j3wdOgtmvu5SD6QD0rdLPZ6
	1oZpXRcPy/i04jZYhToxZ6NXmIaaUr2WHP1x/yuXlbp+X0rgGBQSsv/Z2IA1zpNWbp6zpJ1OHPuTZ
	uiDhXtOITiHS84J3/tcitZzPic4qLzjgdSER2zJe5t7U37aWEVov6cV/VuvDeDgSAcpLbrwZbAvrN
	leHGrJ6A==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"David S. Miller" <davem@davemloft.net>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Fri, 23 Jul 2021 11:50:01 -0600
Message-Id: <20210723175008.22410-15-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, davem@davemloft.net, schnelle@linux.ibm.com, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 14/21] sparc/iommu: return error codes from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Returning an errno from __sbus_iommu_map_sg() results in
sbus_iommu_map_sg_gflush() and sbus_iommu_map_sg_pflush() returning an
errno, as those functions are wrappers around __sbus_iommu_map_sg().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/sparc/kernel/iommu.c     | 4 ++--
 arch/sparc/kernel/pci_sun4v.c | 4 ++--
 arch/sparc/mm/iommu.c         | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index a034f571d869..0589acd34201 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -448,7 +448,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 	iommu = dev->archdata.iommu;
 	strbuf = dev->archdata.stc;
 	if (nelems == 0 || !iommu)
-		return 0;
+		return -EINVAL;
 
 	spin_lock_irqsave(&iommu->lock, flags);
 
@@ -580,7 +580,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 	}
 	spin_unlock_irqrestore(&iommu->lock, flags);
 
-	return 0;
+	return -EINVAL;
 }
 
 /* If contexts are being used, they are the same in all of the mappings
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 9de57e88f7a1..d90e80fa5705 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -486,7 +486,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	iommu = dev->archdata.iommu;
 	if (nelems == 0 || !iommu)
-		return 0;
+		return -EINVAL;
 	atu = iommu->atu;
 
 	prot = HV_PCI_MAP_ATTR_READ;
@@ -619,7 +619,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 	}
 	local_irq_restore(flags);
 
-	return 0;
+	return -EINVAL;
 }
 
 static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist,
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index 0c0342e5b10d..9e3f6933ca13 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -256,7 +256,7 @@ static int __sbus_iommu_map_sg(struct device *dev, struct scatterlist *sgl,
 		sg->dma_address =__sbus_iommu_map_page(dev, sg_page(sg),
 				sg->offset, sg->length, per_page_flush);
 		if (sg->dma_address == DMA_MAPPING_ERROR)
-			return 0;
+			return -EIO;
 		sg->dma_length = sg->length;
 	}
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160208.294626 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJt-0006PX-BU; Fri, 23 Jul 2021 17:50:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160208.294626; Fri, 23 Jul 2021 17:50:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJs-0006Nz-Vz; Fri, 23 Jul 2021 17:50:44 +0000
Received: by outflank-mailman (input) for mailman id 160208;
 Fri, 23 Jul 2021 17:50:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJr-0003JD-Bw
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:43 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 74420957-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:25 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJU-0005Lh-Af; Fri, 23 Jul 2021 11:50:21 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJN-0005rQ-A4; Fri, 23 Jul 2021 11:50:13 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 74420957-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=1Ac+kLf3m7NLdDW/VFqzSvvzNcJRkR+YtO34l2sNfsw=; b=gy2yuCy6RXfZFoVI62RBxY2Vdx
	JOS32Sq1Rn0aOy/579utR028nrSjr8QP5FhWiPnIc4vzB9DsPkheJtBaTQv7RRAoql9+ZMDMkojOA
	4OBpxvzzhXM5MA/SfwpfYnRWfq02+2YwozBRi9o1VFzLo8dUbzy12FLifUpIXoimlt7T5mg0+0EbC
	ID4BRGbLM321atRibedyd59NKOzyDyU9a7ONADmpnIukKcxKLyTlkVNRUQ4An24ijNxf2Y0FnRVb5
	cYaUnAFcwqcWC1pkPngo6nqYR3aXGPU8CjlZba8Y+9tuDttzW2OZ9227q1h48RIogHDF7jF1pHFeI
	mT6MDrdg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Fri, 23 Jul 2021 11:50:06 -0600
Message-Id: <20210723175008.22410-20-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, schnelle@linux.ibm.com, tsbogend@alpha.franken.de, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 19/21] x86/amd_gart: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/x86/kernel/amd_gart_64.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 46aea9a4f26b..ed837383de5c 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -458,8 +458,6 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		panic("dma_map_sg: overflow on %lu pages\n", pages);
 
 	iommu_full(dev, pages << PAGE_SHIFT, dir);
-	for_each_sg(sg, s, nents, i)
-		s->dma_address = DMA_MAPPING_ERROR;
 	return ret;
 }
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160212.294643 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJw-0007Bt-Rz; Fri, 23 Jul 2021 17:50:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160212.294643; Fri, 23 Jul 2021 17:50:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zJw-0007Ba-MF; Fri, 23 Jul 2021 17:50:48 +0000
Received: by outflank-mailman (input) for mailman id 160212;
 Fri, 23 Jul 2021 17:50:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zJv-0003J8-TD
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:47 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d35ff699-7b1d-4268-b4fe-e840a5884e82;
 Fri, 23 Jul 2021 17:50:29 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJY-0005Li-Dr; Fri, 23 Jul 2021 11:50:26 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005rE-LC; Fri, 23 Jul 2021 11:50:12 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d35ff699-7b1d-4268-b4fe-e840a5884e82
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=bIO3ta0XzvPdSC9DXOQ0qCnsFUls6Qbnvb3IRvewUpc=; b=NaEPoynxmqm+74+W4WfQKoN6qm
	SNW5RRrTrL/wt6hyzxOW65ZZpHGkxZrXIqCDCUz02YoKsofBfKkpd+lnvjSqxmcOptyoR10whIzm0
	XWr2JhyL1SUUyH4FBuMZqL/X+yarEWhUPsHVkBq/D1qa+0FdVwSupSJnXgLHTpuVhKVvYSSqzED7w
	rLOjLxJD43P3nqIwx3v+p93qHDuUbBpaWRxZ3rfvdFa6Y0rxonPaN8t+H7AiqAk7+x58ScH3xxWyz
	Ex6P89kM7NZdT1QuJKuIQf0fpnMCMgaZdJAGSCvjdfafRIoEEp6q1tBr3HbtT1Aztv6DU5LT2MpvF
	vIKHHARw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"David S. Miller" <davem@davemloft.net>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Fri, 23 Jul 2021 11:50:02 -0600
Message-Id: <20210723175008.22410-16-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, davem@davemloft.net, schnelle@linux.ibm.com, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no
	autolearn_force=no version=3.4.2
Subject: [PATCH v2 15/21] sparc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/sparc/kernel/iommu.c     | 2 --
 arch/sparc/kernel/pci_sun4v.c | 2 --
 2 files changed, 4 deletions(-)

diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index 0589acd34201..da0363692528 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -546,7 +546,6 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	if (outcount < incount) {
 		outs = sg_next(outs);
-		outs->dma_address = DMA_MAPPING_ERROR;
 		outs->dma_length = 0;
 	}
 
@@ -572,7 +571,6 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 			iommu_tbl_range_free(&iommu->tbl, vaddr, npages,
 					     IOMMU_ERROR_CODE);
 
-			s->dma_address = DMA_MAPPING_ERROR;
 			s->dma_length = 0;
 		}
 		if (s == outs)
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index d90e80fa5705..384480971805 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -594,7 +594,6 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	if (outcount < incount) {
 		outs = sg_next(outs);
-		outs->dma_address = DMA_MAPPING_ERROR;
 		outs->dma_length = 0;
 	}
 
@@ -611,7 +610,6 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 			iommu_tbl_range_free(tbl, vaddr, npages,
 					     IOMMU_ERROR_CODE);
 			/* XXX demap? XXX */
-			s->dma_address = DMA_MAPPING_ERROR;
 			s->dma_length = 0;
 		}
 		if (s == outs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160218.294654 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zK3-0008GH-6Z; Fri, 23 Jul 2021 17:50:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160218.294654; Fri, 23 Jul 2021 17:50:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zK3-0008G8-2m; Fri, 23 Jul 2021 17:50:55 +0000
Received: by outflank-mailman (input) for mailman id 160218;
 Fri, 23 Jul 2021 17:50:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zK1-0003JD-CN
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:53 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 78c022ed-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:31 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJb-0005Lg-SA; Fri, 23 Jul 2021 11:50:28 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005r8-BY; Fri, 23 Jul 2021 11:50:12 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 78c022ed-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=L1b4mN92m3Z8Ycv5Au7RT1T/xTKMMtHSrAAz+sZBHZU=; b=ET8ruOrMt3mmCeZ34jiXdc2TdL
	gFJFpX62wDhFZJ9SERcczOaoRys/OxEHMCG+YxY/vdigNN+Bqg8A/qJpFlYbeMDLFpZVJDUwikAzf
	yr9BFCVPd7X9cpY5TCkShv5wTt4zgBUQrOT62bMiG+G1Af0QQZyVO+d273RRMPLYo8UVHCBOTNwf7
	MotCCWFSeBPff/nYUPd/EdwmTSVfczc4BNdfkMRWbxNlqMFoOXvAeTF7z2v7KpBUr5jmp6IuvR+sB
	Aa5GXzh+uyr3Vs8hJxtW+bE2p8twj6yYWiruPrNas2TjMzD6+2Ck7YfPlxTAU7zAEjbP/ZOLOhrLW
	XY/zW0Xw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Date: Fri, 23 Jul 2021 11:50:00 -0600
Message-Id: <20210723175008.22410-14-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, schnelle@linux.ibm.com, gerald.schaefer@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 13/21] s390/pci: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/pci/pci_dma.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index c78b02012764..be48e5b5bfcf 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -492,7 +492,6 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	for (i = 1; i < nr_elements; i++) {
 		s = sg_next(s);
 
-		s->dma_address = DMA_MAPPING_ERROR;
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) ||
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:50:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:50:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160221.294667 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zK7-0000cr-OF; Fri, 23 Jul 2021 17:50:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160221.294667; Fri, 23 Jul 2021 17:50:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zK7-0000bS-HA; Fri, 23 Jul 2021 17:50:59 +0000
Received: by outflank-mailman (input) for mailman id 160221;
 Fri, 23 Jul 2021 17:50:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zK5-0003J8-TU
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:57 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b40c562a-7b9f-47ec-b2e1-732abb71e25b;
 Fri, 23 Jul 2021 17:50:31 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJb-0005Lh-V7; Fri, 23 Jul 2021 11:50:28 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005r5-69; Fri, 23 Jul 2021 11:50:12 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b40c562a-7b9f-47ec-b2e1-732abb71e25b
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=wMwfB+QVxoWPoNbugW7oseZQ2FEaT6sisUumX/+txWI=; b=pfXfAO7YkOcMYhlz3wKSIjwOWJ
	gcxE6m3ltAk47piXpHGv2GRrb5g21F9D+3bWQ8vWi9qG7xdYyEcimyshYKPGP3KMDm9kInzPt6V5C
	U8QoSnjyjjf42kffJsVZpy39L235sFV/Zil2OphUTZJ8IXsxqp9j2BgmTes/2bQqNfGv0x7cf6hO0
	rejKXvPKnCvWltqW8pIXuMF7o0QlXbq2u4cOyUAiJ76OXWRV+3jtaD4tsw7XwEbHVG1u6fkn4ftdg
	8d8RrukAz+smxebL5eapHTLsP77WyjxI6UGg7JrhesQT+y9Rt3L5zg+scZZ3UHDXFlWWuCsc0OMUH
	CyKjeeTA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Date: Fri, 23 Jul 2021 11:49:59 -0600
Message-Id: <20210723175008.22410-13-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, schnelle@linux.ibm.com, gerald.schaefer@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 12/21] s390/pci: return error code from s390_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

So propagate the error from __s390_dma_map_sg() up. __s390_dma_map_sg()
returns either -ENOMEM on allocation failure or -EINVAL which is
the same as what's expected by dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/pci/pci_dma.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index ebc9a49523aa..c78b02012764 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -487,7 +487,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	unsigned int max = dma_get_max_seg_size(dev);
 	unsigned int size = s->offset + s->length;
 	unsigned int offset = s->offset;
-	int count = 0, i;
+	int count = 0, i, ret;
 
 	for (i = 1; i < nr_elements; i++) {
 		s = sg_next(s);
@@ -497,8 +497,9 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 
 		if (s->offset || (size & ~PAGE_MASK) ||
 		    size + s->length > max) {
-			if (__s390_dma_map_sg(dev, start, size,
-					      &dma->dma_address, dir))
+			ret = __s390_dma_map_sg(dev, start, size,
+						&dma->dma_address, dir);
+			if (ret)
 				goto unmap;
 
 			dma->dma_address += offset;
@@ -511,7 +512,8 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 		}
 		size += s->length;
 	}
-	if (__s390_dma_map_sg(dev, start, size, &dma->dma_address, dir))
+	ret = __s390_dma_map_sg(dev, start, size, &dma->dma_address, dir);
+	if (ret)
 		goto unmap;
 
 	dma->dma_address += offset;
@@ -523,7 +525,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 		s390_dma_unmap_pages(dev, sg_dma_address(s), sg_dma_len(s),
 				     dir, attrs);
 
-	return 0;
+	return ret;
 }
 
 static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:51:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:51:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160222.294673 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zK8-0000j8-Hy; Fri, 23 Jul 2021 17:51:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160222.294673; Fri, 23 Jul 2021 17:51:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zK7-0000gf-VN; Fri, 23 Jul 2021 17:50:59 +0000
Received: by outflank-mailman (input) for mailman id 160222;
 Fri, 23 Jul 2021 17:50:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zK6-0003JD-CR
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:50:58 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7a35b93e-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:33 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJO-0005Ll-A4; Fri, 23 Jul 2021 11:50:30 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qh-1o; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7a35b93e-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=/XA9bvLAJiET8xClVyx9hB75GctlP2ewYMlZJlt3uAE=; b=HVJMNHeBGjTuQRAX0PgDaC3zF2
	h4cFnFeAvCNXzd9WB8YAG3qqGAv0WBWLbO2yY4NNajXtkYGAXSYNnPhoG7Lsjp3jXRGUtxG+C5tQn
	AO0Nyq1daI9kQFtb2tSUAzZkClLvu/2QNdTDESutu8/SuROXeaEliD8I20+iQ0Q2iu0v3EYLv9M04
	tvI2zgmfI0S1vEJQafhJJMTcn12/OuRwVgbR0rnxIWvsOK7Ab18O80JLZOjNRvrRT/6OZ8cEUdjVI
	0CnvcX+WKT1/RPsKegdoIVUqcHKgcZAEo1DdIxORDEfwRA67XH368HFyGiw2MOs512nK27QI9tO6q
	7PJ3h2zw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Joerg Roedel <joro@8bytes.org>,
	Will Deacon <will@kernel.org>
Date: Fri, 23 Jul 2021 11:49:51 -0600
Message-Id: <20210723175008.22410-5-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, joro@8bytes.org, will@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no
	autolearn_force=no version=3.4.2
Subject: [PATCH v2 04/21] dma-iommu: Return error code from iommu_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Return appropriate error codes EINVAL or ENOMEM from
iommup_dma_map_sg(). If lower level code returns ENOMEM, then we
return it, other errors are coalesced into EINVAL.

iommu_dma_map_sg_swiotlb() returns -EIO as its an unknown error
from a call that returns DMA_MAPPING_ERROR.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
---
 drivers/iommu/dma-iommu.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 98ba927aee1a..d9aaed080e68 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -972,7 +972,7 @@ static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg,
 
 out_unmap:
 	iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
-	return 0;
+	return -EIO;
 }
 
 /*
@@ -993,11 +993,13 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	dma_addr_t iova;
 	size_t iova_len = 0;
 	unsigned long mask = dma_get_seg_boundary(dev);
+	ssize_t ret;
 	int i;
 
-	if (static_branch_unlikely(&iommu_deferred_attach_enabled) &&
-	    iommu_deferred_attach(dev, domain))
-		return 0;
+	if (static_branch_unlikely(&iommu_deferred_attach_enabled)) {
+		ret = iommu_deferred_attach(dev, domain);
+		goto out;
+	}
 
 	if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
 		iommu_dma_sync_sg_for_device(dev, sg, nents, dir);
@@ -1045,14 +1047,17 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	}
 
 	iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev);
-	if (!iova)
+	if (!iova) {
+		ret = -ENOMEM;
 		goto out_restore_sg;
+	}
 
 	/*
 	 * We'll leave any physical concatenation to the IOMMU driver's
 	 * implementation - it knows better than we do.
 	 */
-	if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len)
+	ret = iommu_map_sg_atomic(domain, iova, sg, nents, prot);
+	if (ret < iova_len)
 		goto out_free_iova;
 
 	return __finalise_sg(dev, sg, nents, iova);
@@ -1061,7 +1066,11 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	iommu_dma_free_iova(cookie, iova, iova_len, NULL);
 out_restore_sg:
 	__invalidate_sg(sg, nents);
-	return 0;
+out:
+	if (ret == -ENOMEM)
+		return ret;
+	else
+		return -EINVAL;
 }
 
 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:51:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:51:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160225.294691 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zKC-0001es-1p; Fri, 23 Jul 2021 17:51:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160225.294691; Fri, 23 Jul 2021 17:51:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zKB-0001ef-Ri; Fri, 23 Jul 2021 17:51:03 +0000
Received: by outflank-mailman (input) for mailman id 160225;
 Fri, 23 Jul 2021 17:51:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKA-0003J8-Tm
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:02 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7777e721-eb4b-438d-8b37-06bca289e5b5;
 Fri, 23 Jul 2021 17:50:33 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJO-0005Lk-A4; Fri, 23 Jul 2021 11:50:30 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJK-0005qe-TD; Fri, 23 Jul 2021 11:50:10 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7777e721-eb4b-438d-8b37-06bca289e5b5
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=/xaVvtLmcUu039UJFO4qpFCPm3zd9EnehJHJPiaD5YM=; b=sybPJSaQFsCaIgIGWMKJqvuMG1
	Oj9t/Xia+bBhK16WpKH82UUhVbiUDf94I/+HBdAKulnsGMpq++iiXL//wvjaUV2otHvEm2yE2XvUg
	So7PG06r4EsT1ZO+r/9Rk726iV5fkzEaTjD8VB5nBZL27wAwtxBot+4oORN3xILvB9jO4cQ2DSZif
	PVr9WTph1jVtJ3T3x6vzpp5d+41RE9xWdJrQ/0SxyMwbbeO5iEc6pNIAXcw8WkDPIyylAa2hV7IY/
	cWYfunZmrX7GO9k65KY8yX1I9Y/mEEAhY5hruZhxFzDmESItV+SFCGIqAhyzBgFwYs1drXpKjd9iw
	Syjzno7Q==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Joerg Roedel <joro@8bytes.org>,
	Will Deacon <will@kernel.org>
Date: Fri, 23 Jul 2021 11:49:50 -0600
Message-Id: <20210723175008.22410-4-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, joro@8bytes.org, will@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 03/21] iommu: Return full error code from iommu_map_sg[_atomic]()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Convert to ssize_t return code so the return code from __iommu_map()
can be returned all the way down through dma_iommu_map_sg().

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
---
 drivers/iommu/iommu.c | 15 +++++++--------
 include/linux/iommu.h | 22 +++++++++++-----------
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 5419c4b9f27a..bf971b4e34aa 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -2567,9 +2567,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain,
 }
 EXPORT_SYMBOL_GPL(iommu_unmap_fast);
 
-static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-			     struct scatterlist *sg, unsigned int nents, int prot,
-			     gfp_t gfp)
+static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		struct scatterlist *sg, unsigned int nents, int prot,
+		gfp_t gfp)
 {
 	const struct iommu_ops *ops = domain->ops;
 	size_t len = 0, mapped = 0;
@@ -2610,19 +2610,18 @@ static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 	/* undo mappings already done */
 	iommu_unmap(domain, iova, mapped);
 
-	return 0;
-
+	return ret;
 }
 
-size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-		    struct scatterlist *sg, unsigned int nents, int prot)
+ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		     struct scatterlist *sg, unsigned int nents, int prot)
 {
 	might_sleep();
 	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
 }
 EXPORT_SYMBOL_GPL(iommu_map_sg);
 
-size_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
+ssize_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
 		    struct scatterlist *sg, unsigned int nents, int prot)
 {
 	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 32d448050bf7..9369458ba1bd 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -414,11 +414,11 @@ extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
 extern size_t iommu_unmap_fast(struct iommu_domain *domain,
 			       unsigned long iova, size_t size,
 			       struct iommu_iotlb_gather *iotlb_gather);
-extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-			   struct scatterlist *sg,unsigned int nents, int prot);
-extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
-				  unsigned long iova, struct scatterlist *sg,
-				  unsigned int nents, int prot);
+extern ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		struct scatterlist *sg, unsigned int nents, int prot);
+extern ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				   unsigned long iova, struct scatterlist *sg,
+				   unsigned int nents, int prot);
 extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
 extern void iommu_set_fault_handler(struct iommu_domain *domain,
 			iommu_fault_handler_t handler, void *token);
@@ -679,18 +679,18 @@ static inline size_t iommu_unmap_fast(struct iommu_domain *domain,
 	return 0;
 }
 
-static inline size_t iommu_map_sg(struct iommu_domain *domain,
-				  unsigned long iova, struct scatterlist *sg,
-				  unsigned int nents, int prot)
+static inline ssize_t iommu_map_sg(struct iommu_domain *domain,
+				   unsigned long iova, struct scatterlist *sg,
+				   unsigned int nents, int prot)
 {
-	return 0;
+	return -ENODEV;
 }
 
-static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+static inline ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
 				  unsigned long iova, struct scatterlist *sg,
 				  unsigned int nents, int prot)
 {
-	return 0;
+	return -ENODEV;
 }
 
 static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:51:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:51:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160226.294696 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zKC-0001jT-Hm; Fri, 23 Jul 2021 17:51:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160226.294696; Fri, 23 Jul 2021 17:51:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zKC-0001i7-9a; Fri, 23 Jul 2021 17:51:04 +0000
Received: by outflank-mailman (input) for mailman id 160226;
 Fri, 23 Jul 2021 17:51:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKB-0003JD-Ch
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:03 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7a61c378-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:34 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJe-0005Lh-Oe; Fri, 23 Jul 2021 11:50:31 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qw-NN; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7a61c378-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=pjSijkDDmu3vPdSgTQKQdclfdyX/CqsmmRRmSWCrGaw=; b=LSuxCbxfYApKFXQ8AgDo9tdTW+
	qACHbjqbafKVLzWCuI3rtcs2e6WgSEYr8PwVrlp4KWjFXepNuEWOInVkpu9RN2yt81EVF6eiy0LTC
	Y2By7V77Ne5yKvu87vQSuV+1CGWO8wJmDlHlSeP+Y4k8K1VgdotJlr1CP7U6N+SlCotgM20SLWMmh
	Ko34yDRUgMm1jFTAIqaRTMTHxxBL0yAUNnVZnq8On76IboN+KPe81sLtRozcb4RdM5wqHxSK++6b2
	sHgmAVy4CwTbO4mNcLgJzF5wa74lzZY3DkOA1MkiIAOKrGrnN5zZOE7SzSoZMpf9tsWKPArLsOFNX
	KjPrt9Zg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Fri, 23 Jul 2021 11:49:56 -0600
Message-Id: <20210723175008.22410-10-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 09/21] MIPS/jazzdma: return error code from jazz_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

vdma_alloc() may fail for different reasons, but since it only supports
indicating an error via a return of DMA_MAPPING_ERROR, we coalesce the
different reasons into -EIO as is documented on dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/mips/jazz/jazzdma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c
index 461457b28982..eabddb89d221 100644
--- a/arch/mips/jazz/jazzdma.c
+++ b/arch/mips/jazz/jazzdma.c
@@ -552,7 +552,7 @@ static int jazz_dma_map_sg(struct device *dev, struct scatterlist *sglist,
 				dir);
 		sg->dma_address = vdma_alloc(sg_phys(sg), sg->length);
 		if (sg->dma_address == DMA_MAPPING_ERROR)
-			return 0;
+			return -EIO;
 		sg_dma_len(sg) = sg->length;
 	}
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:54:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:54:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160251.294715 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zNO-0004mF-7f; Fri, 23 Jul 2021 17:54:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160251.294715; Fri, 23 Jul 2021 17:54:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zNO-0004m8-4G; Fri, 23 Jul 2021 17:54:22 +0000
Received: by outflank-mailman (input) for mailman id 160251;
 Fri, 23 Jul 2021 17:54:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m6zNN-0004m2-4D
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:54:21 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6zNM-0008Sz-RL; Fri, 23 Jul 2021 17:54:20 +0000
Received: from [54.239.6.189] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m6zNM-0003pb-Lc; Fri, 23 Jul 2021 17:54:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Aee0lenOcdkZAtKJP8Lp++0mVarfWjRZJkgL0hS+n5c=; b=eieleU7gn+i8yaNprCNRz122ld
	aOrtRWEPC4x5bDHe/Vrb9bO5oI3r0Q4XZn2vBHnAN9BQWU8O9/c/IZED/jk/Dw5IPW79UPV8r7Rny
	217t6utOWx+qt6WdnulDN3kk5ZU2DUuqfIsI6WXJK/qs9J5oAqqeU+NoS4bxetWLLveo=;
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrii Anisov <Andrii_Anisov@epam.com>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
 <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>
 <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
 <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s>
 <88c43f6c-9d76-1cab-93f5-ddecc76b487f@xen.org>
 <alpine.DEB.2.21.2107230928460.10122@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <206a7bc1-4093-d3f5-a54f-8466be06695c@xen.org>
Date: Fri, 23 Jul 2021 18:54:18 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107230928460.10122@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 23/07/2021 17:42, Stefano Stabellini wrote:
> On Fri, 23 Jul 2021, Julien Grall wrote:
>> On 22/07/2021 22:39, Stefano Stabellini wrote:
>>> On Thu, 22 Jul 2021, Julien Grall wrote:
>>>>> You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to change
>>>>> from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should all
>>>>> work the same.
>>>>>
>>>>> Looking at the boot logs on pastebin I noticed that Xen is not loaded at
>>>>> a 2MB aligned address. I recommend you change Xen loading address to
>>>>> 0x500200000. And the kernel loading address to 0x500400000.
>>>>
>>>> I am curious to know why you recommend to load at 2MB aligned address. The
>>>> Image protocol doesn't require to load a 2MB aligned address. In fact, we
>>>> add
>>>> issue on Juno because the bootloader would load Xen at a 4KB address. UEFI
>>>> will also load at a 4KB align address.
>>>
>>> It is from empirical evidence :-)
>>
>> Right...
>>
>>> I cannot tell you the exact reason but I saw "strange" problems in the
>>> past that went away after choosing a 2MB alignment. So we settled for
>>> using 2MB in ImageBuilder and we haven't seen any more issues.
>>
>> It would have been good to report such issue back then so it could have been
>> analyzed and possibly fixed.
>>
>>> However, it could have been anything: a bug in U-Boot not relevant
>>> anymore, a bug in Linux, etc. I don't know for sure.
>>
>> This is the worrying part. We have a potential bug that no one knows why it
>> happened. Can this be reproduced?
> 
> I managed to reproduce the problem. I switched ImageBuilder to use 4K
> alignment (just by changing the variable "offset" at the top of
> scripts/uboot-script-gen).

Thank you for reproducing it!

> It generated a boot.source file like this:
> 
> tftpb 0xC01000 2021.1/xen
> tftpb 0xCEA000 2021.1/xen-Image-5.10
> tftpb 0x18D1000 2021.1/initrd.cpio
> tftpb 0x1A55000 2021.1/xen.dtb
> [trimmed because the rest is not too relevant]
> 
> 
> These are the sizes:
> 
> 12479370 Jul  21 19:02 xen-Image-5.10
> 40577    Jul  21 18:25 xen.dtb
> 950280   Jul  19 16:58 xen
> 1586176  Jun  4  17:14 initrd.cpio
> 
> 
> I did the calculations by hand and there are no overlaps. This is the
> output from u-boot and boot log failure: https://pastebin.com/rbTBPn5g

FWIW, I just gave a try on the foundation model with bootwrapper. My 
default setup load Xen and the kernel at the following:

(XEN) MODULE[0]: 0000000088200000 - 000000008835a8f8 Xen
(XEN) MODULE[1]: 0000000088000000 - 000000008800167f Device Tree
(XEN) MODULE[2]: 0000000080080000 - 0000000081e7ca00 Kernel
(XEN)  RESVD[0]: 0000000080000000 - 0000000080010000

Xen is 2MB aligned, but the kernel not. I couldn't see any failure.

I have also tried to load Xen at different address (this time not 2MB 
aligned) and still couldn't spot any issue:

(XEN) MODULE[0]: 0000000088201000 - 000000008835b8f8 Xen
(XEN) MODULE[1]: 0000000088000000 - 000000008800167f Device Tree
(XEN) MODULE[2]: 0000000080081000 - 0000000081e7da00 Kernel
(XEN)  RESVD[0]: 0000000080000000 - 0000000080010000

So this looks something specific to your setup. Looking at the log:

 > (XEN) Latest ChangeSet: Tue Apr 13 10:59:05 2021 -0700 git:f44b1a6ede

I couldn't find this commit in the tree. What baseline are you using? 
 From my side, I tested with 3a98c1a4cec1.

 > (XEN) ****************************************
 > (XEN) Panic on CPU 0:
 > (XEN) invalid compressed format (err=1)
 > (XEN) ****************************************

This implies Xen think the kernel module was a GZIP image and Xen is 
trying to decompress it. However, from your e-mail above the name of the 
kernel module is xen-Image-5.10 which implies this is not a compressed 
image.

Can you confirm what is the format of xen-Image-5.10?

> 
> Using 2MB works. I tried 1MB for curiosity and got a different
> error: https://pastebin.com/UHFUHyxN

 > (XEN) pg[0] MFN 00f50 c=0x180000000000000 o=4 v=0x7ffff t=0
 > (XEN) Xen BUG at page_alloc.c:1425

This looks like two ranges has overlapped each other. Above, you 
confirmed there was no overlap, was it for both 4KB and 1MB alignment?

> 
> Do you think it is worth investigating further?

Definitely, I have got a setup where 4KB aligned (but not 2MB aligned) 
works. This is a hint that something odd is happening on your setup and 
I would like to understand what.

I have a Xilinx board at home (I haven't used it recently though), so I 
am happy to help debugging it. Alternatively, do you know if it 
reproduces on the Xilinx QEMU?

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:55:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:55:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160258.294727 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zOs-0005R4-JA; Fri, 23 Jul 2021 17:55:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160258.294727; Fri, 23 Jul 2021 17:55:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zOs-0005Qx-Fl; Fri, 23 Jul 2021 17:55:54 +0000
Received: by outflank-mailman (input) for mailman id 160258;
 Fri, 23 Jul 2021 17:55:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKL-0003JD-Cr
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:13 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7a61c379-ebde-11eb-9468-12813bfff9fa;
 Fri, 23 Jul 2021 17:50:35 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJe-0005Li-5A; Fri, 23 Jul 2021 11:50:31 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJM-0005r2-0e; Fri, 23 Jul 2021 11:50:12 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7a61c379-ebde-11eb-9468-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=OuJXER8TMWR954py7rg3mrCeDrxT4LjuVdKtzQZh6Zs=; b=VZIFNWIUoksYSuIPKO5F+BKDMW
	Dz/a1KEPRyGo26cwuIdeXHT4dKD9VP1PKuhNPdp3I+hm+TlxEfSoQUiJE30/x7kdL6uUd6o3CJsB5
	xPZ+/Lx68xcGKHV5UlYVDyawUrujcwyjqEX0T+qPlsOuC3ErRY/c/7KVW/EICp3gIO/DCrQYr+W0w
	HgdWUyAhbYLn47KaBKMV/m+ymoVBD9FwfVWFZSyO3eOYF9xUquor5DI5Cb/WzUJ0cqEREJl2x8tfY
	3hnmz0IlHu+FbWJbelRPwn+3O8tbkq7FTWZVo1hQD0Bp5XyLUodycAhAggyNro0H4M1lucZqx9/vw
	qXFJPM+g==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Geoff Levand <geoff@infradead.org>
Date: Fri, 23 Jul 2021 11:49:58 -0600
Message-Id: <20210723175008.22410-12-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org, geoff@infradead.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no
	autolearn_force=no version=3.4.2
Subject: [PATCH v2 11/21] powerpc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Geoff Levand <geoff@infradead.org>
---
 arch/powerpc/kernel/iommu.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index a8ec4fe42817..30b7736f0896 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -575,7 +575,6 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 	 */
 	if (outcount < incount) {
 		outs = sg_next(outs);
-		outs->dma_address = DMA_MAPPING_ERROR;
 		outs->dma_length = 0;
 	}
 
@@ -593,7 +592,6 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 			npages = iommu_num_pages(s->dma_address, s->dma_length,
 						 IOMMU_PAGE_SIZE(tbl));
 			__iommu_free(tbl, vaddr, npages);
-			s->dma_address = DMA_MAPPING_ERROR;
 			s->dma_length = 0;
 		}
 		if (s == outs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:56:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:56:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160271.294738 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zPC-00061Z-TH; Fri, 23 Jul 2021 17:56:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160271.294738; Fri, 23 Jul 2021 17:56:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zPC-00061S-Py; Fri, 23 Jul 2021 17:56:14 +0000
Received: by outflank-mailman (input) for mailman id 160271;
 Fri, 23 Jul 2021 17:56:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKZ-0003J8-UT
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:27 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 77549f84-1033-479b-833e-3a0975fefe65;
 Fri, 23 Jul 2021 17:50:39 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJh-0005Ll-OW; Fri, 23 Jul 2021 11:50:36 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qq-DG; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 77549f84-1033-479b-833e-3a0975fefe65
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=vIIfMW9o269S9AHsb2MNe2Vf6XnVZ9UtVyZ/8uq4vWQ=; b=bcT7nhnwKTkOw153bRnRfDqhw8
	GEdhzlf3ZUOauG46mHHDfDiqbDm28+xdNalpW8ZgWemADhBvwUwO0f1NqENJLn3UFqK1nnSR114kh
	SsabhcTcFTEEC2vHkwqBHFFIOqf95eVmCmTsZHOeZgXK6mVJPGejw2jVv5dlbvqztUNYb6DtG6fiE
	KkrHLTq040obmM1yxGT8Rx8BdG/QsQSjFIm1Q4MtwxLehaduH2vJ7SQ7FXeyTwKhHUlT3IN83D2HW
	koMC31otWVVdde3608o3Hvr5hmp34H7SgeFgK8P2/h39MjJKB7RCTNVf5ZzsK90vBiXJPeF8uaJmO
	qBZ3j8hw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Fri, 23 Jul 2021 11:49:54 -0600
Message-Id: <20210723175008.22410-8-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, linux@armlinux.org.uk, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 07/21] ARM/dma-mapping: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of the
->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/arm/mm/dma-mapping.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 113b9cb3701b..4b61541853ea 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1632,7 +1632,6 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 	for (i = 1; i < nents; i++) {
 		s = sg_next(s);
 
-		s->dma_address = DMA_MAPPING_ERROR;
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:56:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:56:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160290.294750 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zPW-0006hF-AC; Fri, 23 Jul 2021 17:56:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160290.294750; Fri, 23 Jul 2021 17:56:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zPW-0006ga-6y; Fri, 23 Jul 2021 17:56:34 +0000
Received: by outflank-mailman (input) for mailman id 160290;
 Fri, 23 Jul 2021 17:56:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKK-0003J8-U8
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:12 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7a34e6f7-4289-4c22-ab2b-5df614dbfd29;
 Fri, 23 Jul 2021 17:50:34 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJe-0005Lg-MM; Fri, 23 Jul 2021 11:50:31 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qz-RW; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7a34e6f7-4289-4c22-ab2b-5df614dbfd29
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=HMmFCnKiUdZs8XdQrQe+q8n2y8J+pVaubqcncKbrGOc=; b=TxLSaXfyIrqdZibn+BQXuDk4R/
	QkjnyO3+7nKEqm6/dBDGqT9B6ehiUwEjYK3p6z170ejG3qzLM7cTIghm+rBdXZtQylTGtZVq/PclA
	W/tzGcPoosyMbkawZFt6ijD+3xj0KCAMjE/J7NDII9fGZO3zJMzjnCUD5cFRAPB6OMusUcsTmC4+9
	R8vDLwVQz5dveEX3lbp3d+dJBFS7utdZyK6HVFyf/72sMOPvIje20PrC/wLI1/0SrI35auk/pob13
	v/FTtTdGeL7zv+mRT/II5A1r8zGvHtaivtA+dsqs3svnUmz2syz2Fr1FHKlWH7Qi77t3YHbS9HKjx
	an0vDIlA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Geoff Levand <geoff@infradead.org>
Date: Fri, 23 Jul 2021 11:49:57 -0600
Message-Id: <20210723175008.22410-11-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org, geoff@infradead.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 10/21] powerpc/iommu: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Propagate the error up if vio_dma_iommu_map_sg() fails.

ppc_iommu_map_sg() may fail either because of iommu_range_alloc() or
because of tbl->it_ops->set(). The former only supports returning an
error with DMA_MAPPING_ERROR and an examination of the latter indicates
that it may return arch-specific errors (for example,
tce_buildmulti_pSeriesLP()). Hence, coalesce all of those errors into
-EIO, per the documentation on dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Geoff Levand <geoff@infradead.org>
---
 arch/powerpc/kernel/iommu.c             | 4 ++--
 arch/powerpc/platforms/ps3/system-bus.c | 2 +-
 arch/powerpc/platforms/pseries/vio.c    | 5 +++--
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 2af89a5e379f..a8ec4fe42817 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -473,7 +473,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 	BUG_ON(direction == DMA_NONE);
 
 	if ((nelems == 0) || !tbl)
-		return 0;
+		return -EINVAL;
 
 	outs = s = segstart = &sglist[0];
 	outcount = 1;
@@ -599,7 +599,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 		if (s == outs)
 			break;
 	}
-	return 0;
+	return -EIO;
 }
 
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..c54eb46f0cfb 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -663,7 +663,7 @@ static int ps3_ioc0_map_sg(struct device *_dev, struct scatterlist *sg,
 			   unsigned long attrs)
 {
 	BUG();
-	return 0;
+	return -EINVAL;
 }
 
 static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg,
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..e31e59c54f30 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -560,7 +560,8 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 	for_each_sg(sglist, sgl, nelems, count)
 		alloc_size += roundup(sgl->length, IOMMU_PAGE_SIZE(tbl));
 
-	if (vio_cmo_alloc(viodev, alloc_size))
+	ret = vio_cmo_alloc(viodev, alloc_size);
+	if (ret)
 		goto out_fail;
 	ret = ppc_iommu_map_sg(dev, tbl, sglist, nelems, dma_get_mask(dev),
 			direction, attrs);
@@ -577,7 +578,7 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 	vio_cmo_dealloc(viodev, alloc_size);
 out_fail:
 	atomic_inc(&viodev->cmo.allocs_failed);
-	return 0;
+	return ret;
 }
 
 static void vio_dma_iommu_unmap_sg(struct device *dev,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:57:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:57:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160311.294762 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zQ1-0007bJ-LM; Fri, 23 Jul 2021 17:57:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160311.294762; Fri, 23 Jul 2021 17:57:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zQ1-0007bC-Hu; Fri, 23 Jul 2021 17:57:05 +0000
Received: by outflank-mailman (input) for mailman id 160311;
 Fri, 23 Jul 2021 17:57:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKP-0003J8-U8
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:17 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 65ac88d9-4fa6-4559-a920-e94140b46b75;
 Fri, 23 Jul 2021 17:50:35 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJg-0005Lk-DJ; Fri, 23 Jul 2021 11:50:33 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qt-IL; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 65ac88d9-4fa6-4559-a920-e94140b46b75
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=GqC6MNUep++aB8fDrjh2DnNmBSYDqSi9PqIeeLTquj0=; b=lZbqhlYojMDTC61acH6COEDa82
	KR35lDGt5LaHTcn+pvR+vpgnA43hQ7AZrRhWdg+la8vReBTvoNH/vEAXWztSraEGY05DkL24ACtme
	Bcz3zbGWOeM1226wPJ3MV/d18qZ29cw5QFUKHYHY6YDD0HR6PyM9cMwymZl4hFCaPse8HwgQHmW9h
	ugiZPCPhQUxiATZCAy3FMKZIkGsEDhllkY+0c7IqVxWupfCbbYjpTb+fftfITgSXMJ2m4HZlVPqDD
	meE1TkV1nr5omqhpdjfX9L8EsUv84pJnShJplThugFTXcMMMygbBGqNrGLazrRcBmCW303z4DtoKV
	5udqRChA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Fri, 23 Jul 2021 11:49:55 -0600
Message-Id: <20210723175008.22410-9-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, schnelle@linux.ibm.com, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v2 08/21] ia64/sba_iommu: return error code from sba_map_sg_attrs()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

In the case of a dma_mapping_error() return -EIO as the actual cause
is opaque here.

sba_coalesce_chunks() may only presently fail if sba_alloc_range()
fails, which in turn only fails if the iommu is out of mapping
resources, hence a -ENOMEM is used in that case.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/ia64/hp/common/sba_iommu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index 9148ddbf02e5..430c166b68cd 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -1458,8 +1458,8 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 		sglist->dma_length = sglist->length;
 		sglist->dma_address = sba_map_page(dev, sg_page(sglist),
 				sglist->offset, sglist->length, dir, attrs);
-		if (dma_mapping_error(dev, sglist->dma_address))
-			return 0;
+		if(dma_mapping_error(dev, sglist->dma_address))
+			return -EIO;
 		return 1;
 	}
 
@@ -1486,7 +1486,7 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 	coalesced = sba_coalesce_chunks(ioc, dev, sglist, nents);
 	if (coalesced < 0) {
 		sba_unmap_sg_attrs(dev, sglist, nents, dir, attrs);
-		return 0;
+		return -ENOMEM;
 	}
 
 	/*
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:57:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:57:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160314.294775 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zQ8-0007zO-Ua; Fri, 23 Jul 2021 17:57:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160314.294775; Fri, 23 Jul 2021 17:57:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zQ8-0007zD-R3; Fri, 23 Jul 2021 17:57:12 +0000
Received: by outflank-mailman (input) for mailman id 160314;
 Fri, 23 Jul 2021 17:57:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKe-0003J8-Uf
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:32 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e6d6b895-7137-4d89-bce2-cf47d2ac9a9b;
 Fri, 23 Jul 2021 17:50:40 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJj-0005Li-J2; Fri, 23 Jul 2021 11:50:36 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qk-5K; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e6d6b895-7137-4d89-bce2-cf47d2ac9a9b
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=3+NKDp2q/0zHzVVwq3INd+w6NURPV4dE2hTg9/0ITMI=; b=p5v2Ta39J/FMFArdqmG9hSG4dJ
	GVRjnEedIhEO1h1r5PxFM08gIBm2nd5NToaIWZ7khZNaAntYnBCZUWT0JxZdoSW9l1fdwLGQfi0X3
	lbubJp9G7o8oDw/JDXbE/idqJCA1fHd/koaMSZyJUWEIAXuMnTNHuyqeQmpH1vtLOBamcAC/zV6XL
	5FI4jeQ2Z+mEOnsWyzTxTyD6b5+Udusu7tJ0clJtv+ZswVDDZVA5y4XKO2x7PSA1AXTf4tKdtp/JU
	4AxOqYl9AObVsclV8wS/PiUkaSSPgigS2efnAtBdAJWeCeYgFhDY5hULZaNiPuGhFkfmEfLJZJnwf
	1AX9mNhw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>
Date: Fri, 23 Jul 2021 11:49:52 -0600
Message-Id: <20210723175008.22410-6-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 05/21] alpha: return error code from alpha_pci_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

pci_map_single_1() can fail for different reasons, but since the only
supported type of error return is DMA_MAPPING_ERROR, we coalesce those
errors into EIO.

ENOMEM is returned when no page tables can be allocated.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
---
 arch/alpha/kernel/pci_iommu.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index 35d7b3096d6e..21f9ac101324 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -649,7 +649,9 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 		sg->dma_address
 		  = pci_map_single_1(pdev, SG_ENT_VIRT_ADDRESS(sg),
 				     sg->length, dac_allowed);
-		return sg->dma_address != DMA_MAPPING_ERROR;
+		if (sg->dma_address == DMA_MAPPING_ERROR)
+			return -EIO;
+		return 1;
 	}
 
 	start = sg;
@@ -685,8 +687,10 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 	if (out < end)
 		out->dma_length = 0;
 
-	if (out - start == 0)
+	if (out - start == 0) {
 		printk(KERN_WARNING "pci_map_sg failed: no entries?\n");
+		return -ENOMEM;
+	}
 	DBGA("pci_map_sg: %ld entries\n", out - start);
 
 	return out - start;
@@ -699,7 +703,7 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 	   entries.  Unmap them now.  */
 	if (out > start)
 		pci_unmap_sg(pdev, start, out - start, dir);
-	return 0;
+	return -ENOMEM;
 }
 
 /* Unmap a set of streaming mode DMA translations.  Again, cpu read
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 17:57:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 17:57:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160319.294787 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zQI-00007z-8i; Fri, 23 Jul 2021 17:57:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160319.294787; Fri, 23 Jul 2021 17:57:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m6zQI-00007r-4e; Fri, 23 Jul 2021 17:57:22 +0000
Received: by outflank-mailman (input) for mailman id 160319;
 Fri, 23 Jul 2021 17:57:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=uLib=MP=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m6zKU-0003J8-UM
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 17:51:22 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d66c684f-40b3-41f4-940d-4289b5416733;
 Fri, 23 Jul 2021 17:50:38 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJh-0005Lh-OW; Fri, 23 Jul 2021 11:50:35 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m6zJL-0005qn-8Z; Fri, 23 Jul 2021 11:50:11 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d66c684f-40b3-41f4-940d-4289b5416733
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=n2R1GNZpiJpIvqPgMoFv818LmwSs1yl8HL/LWwKcvVk=; b=Rv/rTZtj3T1nEGLn1WGczPTaen
	2yIufVhmqXEZZQcWeZrPYXkIZtElB2JS3S+Q2Jjuo2MBlfeXs7yylXfYoMcUAcGExpeIfOU75HSjV
	pf7krDbOQH/tSfJN+fElu+VVJqlRFYdQPNJiF4+WCLcG0tiI0p4KERH+zeiKfztGqnCd+UNf++PoZ
	S8Exa3ad1UXddK3LqWr51Nf2fnLQV9b9+P4kG2ztV24ryTmwUQZ6I3WFEb6dIVLrutgq/2XpovvLE
	NXxAW1CxwmNOHEATVHgyt4MfJmMX9ybHuGwzx/Byb9TN3fvIxw5nslKmWzVyMwIsgD+iRJFYM5syd
	AWnM6Zjg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Fri, 23 Jul 2021 11:49:53 -0600
Message-Id: <20210723175008.22410-7-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210723175008.22410-1-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, linux@armlinux.org.uk, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v2 06/21] ARM/dma-mapping: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.
In the case of a DMA_MAPPING_ERROR, -EIO is returned. Otherwise,
-ENOMEM or -EINVAL is returned depending on the error from
__map_sg_chunk().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/arm/mm/dma-mapping.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index c4b8df2ad328..113b9cb3701b 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -980,7 +980,7 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 {
 	const struct dma_map_ops *ops = get_dma_ops(dev);
 	struct scatterlist *s;
-	int i, j;
+	int i, j, ret;
 
 	for_each_sg(sg, s, nents, i) {
 #ifdef CONFIG_NEED_SG_DMA_LENGTH
@@ -988,15 +988,17 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 #endif
 		s->dma_address = ops->map_page(dev, sg_page(s), s->offset,
 						s->length, dir, attrs);
-		if (dma_mapping_error(dev, s->dma_address))
+		if (dma_mapping_error(dev, s->dma_address)) {
+			ret = -EIO;
 			goto bad_mapping;
+		}
 	}
 	return nents;
 
  bad_mapping:
 	for_each_sg(sg, s, i, j)
 		ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
-	return 0;
+	return ret;
 }
 
 /**
@@ -1622,7 +1624,7 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		     bool is_coherent)
 {
 	struct scatterlist *s = sg, *dma = sg, *start = sg;
-	int i, count = 0;
+	int i, count = 0, ret;
 	unsigned int offset = s->offset;
 	unsigned int size = s->offset + s->length;
 	unsigned int max = dma_get_max_seg_size(dev);
@@ -1634,8 +1636,10 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
-			if (__map_sg_chunk(dev, start, size, &dma->dma_address,
-			    dir, attrs, is_coherent) < 0)
+			ret = __map_sg_chunk(dev, start, size,
+					     &dma->dma_address, dir, attrs,
+					     is_coherent);
+			if (ret < 0)
 				goto bad_mapping;
 
 			dma->dma_address += offset;
@@ -1648,8 +1652,9 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		}
 		size += s->length;
 	}
-	if (__map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
-		is_coherent) < 0)
+	ret = __map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
+			     is_coherent);
+	if (ret < 0)
 		goto bad_mapping;
 
 	dma->dma_address += offset;
@@ -1660,7 +1665,9 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 bad_mapping:
 	for_each_sg(sg, s, count, i)
 		__iommu_remove_mapping(dev, sg_dma_address(s), sg_dma_len(s));
-	return 0;
+	if (ret == -ENOMEM)
+		return ret;
+	return -EINVAL;
 }
 
 /**
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 23 20:10:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 20:10:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160361.294823 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71VA-0001IX-Mq; Fri, 23 Jul 2021 20:10:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160361.294823; Fri, 23 Jul 2021 20:10:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71VA-0001IQ-Jf; Fri, 23 Jul 2021 20:10:32 +0000
Received: by outflank-mailman (input) for mailman id 160361;
 Fri, 23 Jul 2021 20:10:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=aJz+=MP=strugglers.net=andy@srs-us1.protection.inumbo.net>)
 id 1m71V9-0001IK-Eq
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 20:10:31 +0000
Received: from mail.bitfolk.com (unknown [2001:ba8:1f1:f019::25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id db8b56d9-b767-4622-9ac6-d189d159ac17;
 Fri, 23 Jul 2021 20:10:29 +0000 (UTC)
Received: from andy by mail.bitfolk.com with local (Exim 4.89)
 (envelope-from <andy@strugglers.net>)
 id 1m71V6-0007Pg-Ol; Fri, 23 Jul 2021 20:10:28 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: db8b56d9-b767-4622-9ac6-d189d159ac17
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=bitfolk.com
	; s=alpha; h=In-Reply-To:Content-Transfer-Encoding:Content-Type:MIME-Version:
	References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To:Content-ID:
	Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
	:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
	List-Post:List-Owner:List-Archive;
	bh=AYmPYs1e1VdqVi+JuPhqXLKGZO4lkLoNj8vtW6NLVvA=; b=JBqSnnH4Z2n3BA2E2dC0PvwQWb
	ysBKXqqTt8wFzKfjZulEikVvCcqPxlREmtXuGLdPDcOXPC8kkMEknVIMPG4ulh7z/3QtvdwV34Pd5
	YzKcEgwsxSulXGVSA+PyaUU1NdCq9UnBCy6BZao2b21eayKXc4ATIeJVWLPf9DsiLdhSCx+z9KzXR
	pEley/l6kKnYOgC4rFRp/WrSxtEmb0scNew0X+m3uYq3GsCflja1deem5OXYklXovN2eOYokdz5QW
	k/2gQCC8eL2M4GLlD1n0UKWPH3Yjj7m7MKC3EEGcOqd+RsXhcLzHLxaAvHM4/s3B6788HZCEc9e7C
	ie6acA7A==;
Date: Fri, 23 Jul 2021 20:10:28 +0000
From: Andy Smith <andy@strugglers.net>
To: Jan Beulich <jbeulich@suse.com>
Cc: xen-devel@lists.xenproject.org
Subject: Re: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072
 nents:13
Message-ID: <20210723201028.tzmz65biwelruvqb@bitfolk.com>
References: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
 <c3d7f7c7-0231-dba2-344f-e2e3588e0cab@suse.com>
 <20210721141942.tnxyfpt7qttzjooo@bitfolk.com>
 <acc3c000-3d62-d91d-3ad7-0e0b460f4b0f@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <acc3c000-3d62-d91d-3ad7-0e0b460f4b0f@suse.com>
OpenPGP: id=BF15490B; url=http://strugglers.net/~andy/pubkey.asc
X-URL: http://strugglers.net/wiki/User:Andy
User-Agent: NeoMutt/20170113 (1.7.2)
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: andy@strugglers.net
X-SA-Exim-Scanned: No (on mail.bitfolk.com); SAEximRunCond expanded to false

Hi Jan,

On Wed, Jul 21, 2021 at 04:49:26PM +0200, Jan Beulich wrote:
> On 21.07.2021 16:19, Andy Smith wrote:
> > I understand that below 4GiB memory use of swiotlb is disabled so
> > all the time previously this was not used, and now is. Perhaps the
> > bug is in there?
> > 
> > I was told that the only simple way on a Xen dom0 to disable use of
> > swiotlb would be to set the memory below 4GiB again, so I might try
> > that.
> 
> I have no idea where you take this 4GiB aspect from. What the kernel
> considers "below 4GiB" in its view of the world may be at a much
> higher address in system address space. And the mere amount of
> memory doesn't matter here at all.

Ah, I was taking that from:

    https://elixir.bootlin.com/linux/v5.10.40/source/arch/x86/kernel/pci-swiotlb.c#L41

…which I had found while looking around how to disable use of
swiotlb. But I think I'm probably confused - should I only be
looking at arch/x86/xen/pci-swiotlb-xen.c in the case of a PV domain
like dom0?

I have not been able to reproduce the problem by giving a test
system with identical hardware more RAM and getting fio in a guest
to do random reads with a blocksize between 4kiB and 4MiB.

Perhaps it is highly workload dependent then. In some ways it's a
pity that I do not get call traces for the later occurrences as then
I could see if it's always the same 62.xvda-0 process (and thus same
guest) triggering it.

It's happened three more times since my previous email, but these
have been up to 46 hours apart. These were all reads, so MD just
satisfied the read from the other device without kicking the nvme
device out.

Hmm, I have the sector offset in the MD device so maybe I can
convert that into a logical volume to know if a particular guest is
provoking it…

If anyone happens to have any suggestions as to what kind of IO might
provoke this at all so I could maybe get fio to reproduce it, please
do let me know.

Thanks,
Andy


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 20:14:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 20:14:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160368.294834 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71Z5-00020l-Cv; Fri, 23 Jul 2021 20:14:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160368.294834; Fri, 23 Jul 2021 20:14:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71Z5-00020e-A6; Fri, 23 Jul 2021 20:14:35 +0000
Received: by outflank-mailman (input) for mailman id 160368;
 Fri, 23 Jul 2021 20:14:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=gvTO=MP=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m71Z4-00020Y-9F
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 20:14:34 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 553130fe-a579-4411-9367-c24061081922;
 Fri, 23 Jul 2021 20:14:33 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 50ED460E99;
 Fri, 23 Jul 2021 20:14:32 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 553130fe-a579-4411-9367-c24061081922
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1627071272;
	bh=x/j/4P3YYWm6jqvih0Jy191/jlSekWUSAAPEQjpOFyI=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=d2aaj7yZo4tWbOO5yte56+PgIJ16EXR5K8t9L8LYXxfCcsDO9ZT2r4TO9qw8npwXs
	 UPttS7O4fD6ikI6WV7qEs845Wm6K8c10xgnTpL+Y9VLmVeV3xcZyITxC+KcTQx063h
	 qJ/d/1MN2x0HwFNpzCr+2KOEF6hLlVnA3P6YkfPVNRZoyENC6Ro6v1iEf8wD/teRAO
	 UfY7hWRgGOenGG0kB7RR5K4hYXFn6r6kGedUr5AKh1vXp/Hk1gGHIhBegRLzJIuuBT
	 lghKMIn7tP+QwwTO7YAJ2GF1ES28Fzmcz3hK3uKC6v12r/NIw+oWBIvR2SktP1qLkg
	 lmFbc10NXTNQA==
Date: Fri, 23 Jul 2021 13:14:31 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>, 
    "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, 
    Andrii Anisov <Andrii_Anisov@epam.com>
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
In-Reply-To: <206a7bc1-4093-d3f5-a54f-8466be06695c@xen.org>
Message-ID: <alpine.DEB.2.21.2107231113260.10122@sstabellini-ThinkPad-T480s>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org> <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com> <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org> <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s> <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org> <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s> <88c43f6c-9d76-1cab-93f5-ddecc76b487f@xen.org>
 <alpine.DEB.2.21.2107230928460.10122@sstabellini-ThinkPad-T480s> <206a7bc1-4093-d3f5-a54f-8466be06695c@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Fri, 23 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 23/07/2021 17:42, Stefano Stabellini wrote:
> > On Fri, 23 Jul 2021, Julien Grall wrote:
> > > On 22/07/2021 22:39, Stefano Stabellini wrote:
> > > > On Thu, 22 Jul 2021, Julien Grall wrote:
> > > > > > You can go and edit 76085aff29f585139a37a10ea0a7daa63f70872c to
> > > > > > change
> > > > > > from 4K to any multiple of 4K, e.g. 8K, 12K, 16K, 20K. They should
> > > > > > all
> > > > > > work the same.
> > > > > > 
> > > > > > Looking at the boot logs on pastebin I noticed that Xen is not
> > > > > > loaded at
> > > > > > a 2MB aligned address. I recommend you change Xen loading address to
> > > > > > 0x500200000. And the kernel loading address to 0x500400000.
> > > > > 
> > > > > I am curious to know why you recommend to load at 2MB aligned address.
> > > > > The
> > > > > Image protocol doesn't require to load a 2MB aligned address. In fact,
> > > > > we
> > > > > add
> > > > > issue on Juno because the bootloader would load Xen at a 4KB address.
> > > > > UEFI
> > > > > will also load at a 4KB align address.
> > > > 
> > > > It is from empirical evidence :-)
> > > 
> > > Right...
> > > 
> > > > I cannot tell you the exact reason but I saw "strange" problems in the
> > > > past that went away after choosing a 2MB alignment. So we settled for
> > > > using 2MB in ImageBuilder and we haven't seen any more issues.
> > > 
> > > It would have been good to report such issue back then so it could have
> > > been
> > > analyzed and possibly fixed.
> > > 
> > > > However, it could have been anything: a bug in U-Boot not relevant
> > > > anymore, a bug in Linux, etc. I don't know for sure.
> > > 
> > > This is the worrying part. We have a potential bug that no one knows why
> > > it
> > > happened. Can this be reproduced?
> > 
> > I managed to reproduce the problem. I switched ImageBuilder to use 4K
> > alignment (just by changing the variable "offset" at the top of
> > scripts/uboot-script-gen).
> 
> Thank you for reproducing it!
> 
> > It generated a boot.source file like this:
> > 
> > tftpb 0xC01000 2021.1/xen
> > tftpb 0xCEA000 2021.1/xen-Image-5.10
> > tftpb 0x18D1000 2021.1/initrd.cpio
> > tftpb 0x1A55000 2021.1/xen.dtb
> > [trimmed because the rest is not too relevant]
> > 
> > 
> > These are the sizes:
> > 
> > 12479370 Jul  21 19:02 xen-Image-5.10
> > 40577    Jul  21 18:25 xen.dtb
> > 950280   Jul  19 16:58 xen
> > 1586176  Jun  4  17:14 initrd.cpio
> > 
> > 
> > I did the calculations by hand and there are no overlaps. This is the
> > output from u-boot and boot log failure: https://pastebin.com/rbTBPn5g
> 
> FWIW, I just gave a try on the foundation model with bootwrapper. My default
> setup load Xen and the kernel at the following:
> 
> (XEN) MODULE[0]: 0000000088200000 - 000000008835a8f8 Xen
> (XEN) MODULE[1]: 0000000088000000 - 000000008800167f Device Tree
> (XEN) MODULE[2]: 0000000080080000 - 0000000081e7ca00 Kernel
> (XEN)  RESVD[0]: 0000000080000000 - 0000000080010000
> 
> Xen is 2MB aligned, but the kernel not. I couldn't see any failure.
> 
> I have also tried to load Xen at different address (this time not 2MB aligned)
> and still couldn't spot any issue:
> 
> (XEN) MODULE[0]: 0000000088201000 - 000000008835b8f8 Xen
> (XEN) MODULE[1]: 0000000088000000 - 000000008800167f Device Tree
> (XEN) MODULE[2]: 0000000080081000 - 0000000081e7da00 Kernel
> (XEN)  RESVD[0]: 0000000080000000 - 0000000080010000
> 
> So this looks something specific to your setup. Looking at the log:
> 
> > (XEN) Latest ChangeSet: Tue Apr 13 10:59:05 2021 -0700 git:f44b1a6ede
> 
> I couldn't find this commit in the tree. What baseline are you using? From my
> side, I tested with 3a98c1a4cec1.

I was just using 57e761b60 plus my 4 recent smmu patches.


> > (XEN) ****************************************
> > (XEN) Panic on CPU 0:
> > (XEN) invalid compressed format (err=1)
> > (XEN) ****************************************
> 
> This implies Xen think the kernel module was a GZIP image and Xen is trying to
> decompress it. However, from your e-mail above the name of the kernel module
> is xen-Image-5.10 which implies this is not a compressed image.
> 
> Can you confirm what is the format of xen-Image-5.10?

gzip (arch/arm64/boot/Image.gz)


> > Using 2MB works. I tried 1MB for curiosity and got a different
> > error: https://pastebin.com/UHFUHyxN
> 
> > (XEN) pg[0] MFN 00f50 c=0x180000000000000 o=4 v=0x7ffff t=0
> > (XEN) Xen BUG at page_alloc.c:1425
> 
> This looks like two ranges has overlapped each other. Above, you confirmed
> there was no overlap, was it for both 4KB and 1MB alignment?

There don't seem to be any overlaps in the 1MB case also:

tftpb 0xD00000 2021.1/xen
tftpb 0xF00000 2021.1/xen-Image-5.10
tftpb 0x1B00000 2021.1/initrd.cpio
tftpb 0x1D00000 2021.1/xen.dtb


> > Do you think it is worth investigating further?
> 
> Definitely, I have got a setup where 4KB aligned (but not 2MB aligned) works.
> This is a hint that something odd is happening on your setup and I would like
> to understand what.
 
I tried everything 4K aligned except for Linux:

tftpb 0xC01000 2021.1/xen
tftpb 0x2000000 2021.1/xen-Image-5.10
tftpb 0x18F1000 2021.1/initrd.cpio
tftpb 0x1A75000 2021.1/xen.dtb

And I also tried everything 4K aligned except for Xen:

tftpb 0x2000000 2021.1/xen
tftpb 0xD0A000 2021.1/xen-Image-5.10
tftpb 0x18F1000 2021.1/initrd.cpio
tftpb 0x1A75000 2021.1/xen.dtb

For both tests, I just moved one binary higher to 0x2000000. Both tests
worked OK. It is only when everything is 4K that we have a problem.


> I have a Xilinx board at home (I haven't used it recently though), so I am
> happy to help debugging it. Alternatively, do you know if it reproduces on the
> Xilinx QEMU?

Yeah I am using the same Xilinx board that you have.

I also managed to repro the issue on upstream QEMU 2.11 (it might happen
with newer versions but all my scripts and dtbs were already based on
2.11) and upstream U-Boot 2021.04-rc1-00009-gfdcb93e170:


/local/arm-vm/qemu-system-aarch64 \
    -machine virt,gic_version=3 \
    -machine virtualization=true \
    -cpu cortex-a57 -machine type=virt \
    -smp 4 -m 4096 \
    -serial mon:stdio \
    -bios /local/arm-vm/u-boot.bin \
    -device loader,file=/var/lib/tftpboot/2021.1/xen,force-raw=on,addr=0x40C01000 \
    -device loader,file=/var/lib/tftpboot/2021.1/xen-Image-5.10,force-raw=on,addr=0x40D0A000 \
    -device loader,file=/var/lib/tftpboot/2021.1/initrd.cpio,force-raw=on,addr=0x418F1000 \
    -device loader,file=/local/arm-vm/virt-gicv3-2.dtb,force-raw=on,addr=0x41A75000 \
    -device loader,file=/local/arm-vm/boot.scr,force-raw=on,addr=0x40C00000


With the following boot.scr:

fdt addr 0x41A75000
fdt resize 1024
fdt set /chosen \#address-cells <0x2>
fdt set /chosen \#size-cells <0x2>
fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=serial0 dom0_mem=2G dom0_max_vcpus=2 bootscrub=0 vwfi=native sched=null"
fdt mknod /chosen dom0
fdt set /chosen/dom0 compatible "xen,linux-zimage" "xen,multiboot-module" "multiboot,module"
fdt set /chosen/dom0 reg <0x0 0xD0A000 0x0 0xbe6b8a>
fdt set /chosen xen,dom0-bootargs "console=hvc0 earlycon=xen earlyprintk=xen clk_ignore_unused root=/dev/ram0"
fdt mknod /chosen dom0-ramdisk
fdt set /chosen/dom0-ramdisk compatible "xen,linux-initrd" "xen,multiboot-module" "multiboot,module"
fdt set /chosen/dom0-ramdisk reg <0x0 0x18F1000 0x0 0x183400>
setenv fdt_high 0xffffffffffffffff
booti 0x40C01000 - 0x41A75000

I get the error:

(XEN) Panic on CPU 0:
(XEN) invalid compressed format (err=1)


I confirmed that it worked after changing the kernel loading address to
0x42000000.


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 20:16:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 20:16:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160372.294847 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71aV-00031p-PB; Fri, 23 Jul 2021 20:16:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160372.294847; Fri, 23 Jul 2021 20:16:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71aV-00031i-M5; Fri, 23 Jul 2021 20:16:03 +0000
Received: by outflank-mailman (input) for mailman id 160372;
 Fri, 23 Jul 2021 20:16:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=gvTO=MP=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m71aU-00031c-R9
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 20:16:02 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cc830516-ebf2-11eb-94be-12813bfff9fa;
 Fri, 23 Jul 2021 20:16:01 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 886A560200;
 Fri, 23 Jul 2021 20:16:00 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cc830516-ebf2-11eb-94be-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1627071360;
	bh=hX1ooOzu7GnWK2TXwEbiDWFHIfBpJpVsqrksZ5Ef/F8=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=qdTP+bmq2GK8W/+hjGCZrf31GjJwAqchMZf6jn4io0ttMdjGY3xqwzceJRuNx1e/A
	 tr3ARedE37LMNqDo0BVoYQJbRb/SmDkokVGGFtclj+F0jq2hCS3zuBSfErhcTfYmRC
	 vJU2yfXhuer4z4K57QluGxYbtdrgV4xH2AhTPrPw422SbppC0uyCwQbUuGl129FQ+F
	 Dt/7oY+LOFMuIAuAURok9X1T9HZkulBxm0J6VLu/HsSMOkRMYwHRke3mbbsqMuIxC/
	 P/F6y0cj687YD8XVmxU7Cv9H8W0dwi+GGokVeXQPVTIUcXJy63wWUeYHNooUgLD8mD
	 3YI/oEnfJL4ug==
Date: Fri, 23 Jul 2021 13:16:00 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com, 
    Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
In-Reply-To: <acd7e7b6-7c2b-24d5-da80-042396aee5e8@xen.org>
Message-ID: <alpine.DEB.2.21.2107231043230.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s> <20210722233642.22515-2-sstabellini@kernel.org> <acd7e7b6-7c2b-24d5-da80-042396aee5e8@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Fri, 23 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 23/07/2021 00:36, Stefano Stabellini wrote:
> > If both legacy IOMMU bindings and generic bindings are present,
> > iommu_add_dt_device can be called twice. Do not return error in that
> > case, that way there is no need to check for -EEXIST at the call sites.
> > Remove the one existing -EEXIT check, now unneeded.
> 
> The commit message implies that we already support both legacy and generic
> bindings. However, this is not yet implemented.
> 
> So how about:
> 
> "
> iommu_add_dt_device() will returns -EEXIST if the device was already
> registered.
> 
> At the moment, this can only happen if the device was already assigned to a
> domain (either dom0 at boot or via XEN_DOMCTL_assign_device).
> 
> In a follow-up patch, we will convert the SMMU driver to use the FW spec. When
> the legacy bindings are used, all the devices will be registered at probe.
> Therefore, iommu_add_dt_device() will always returns -EEXIST.
> 
> Currently, one caller (XEN_DOMCTL_assign_device) will check the return and
> ignore -EEXIST. All the other will fail because it was technically a
> programming error.
> 
> However, there is no harm to call iommu_add_dt_device() twice, so we can
> simply return 0.
> 
> With that in place the caller doesn't need to check -EEXIST anymore, so remove
> the check.
> "

This is a lot better, thank you!


> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > ---
> > Changes in v5:
> > - new patch
> > ---
> >   xen/drivers/passthrough/device_tree.c | 9 +++++++--
> >   1 file changed, 7 insertions(+), 2 deletions(-)
> > 
> > diff --git a/xen/drivers/passthrough/device_tree.c
> > b/xen/drivers/passthrough/device_tree.c
> > index 999b831d90..32526ecabb 100644
> > --- a/xen/drivers/passthrough/device_tree.c
> > +++ b/xen/drivers/passthrough/device_tree.c
> > @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
> >       if ( !ops )
> >           return -EINVAL;
> >   +    /*
> > +     * Some Device Trees may expose both legacy SMMU and generic
> > +     * IOMMU bindings together. If both are present, the device
> > +     * can be already added.
> 
> Wouldn't this also happen when there is just generic bindings? If so,
> shouldn't this patch be first in the series to avoid breaking bisection?

No, both need to be present; if there is just the generic bindings we
don't need this change. I can still move it to the beginning of the
series anyway if you prefer. 


> > +     */
> 
> My point on the previous version is this is not the only reasons why
> dev_iommu_fwspec_get(). So either we want to write all the reasons (AFAICT,
> there is only two) or we want to write a generic message.

I see. Maybe:

  * In some circumstances iommu_add_dt_device() can genuinly be called
  * twice. As there is no harm in it just return success early.


> >       if ( dev_iommu_fwspec_get(dev) )
> > -        return -EEXIST;
> > +        return 0;
> >         /*
> >        * According to the Documentation/devicetree/bindings/iommu/iommu.txt
> > @@ -254,7 +259,7 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct
> > domain *d,
> >            * already added to the IOMMU (positive result). Such happens
> > after
> >            * re-creating guest domain.
> >            */
> 
> This comment on top is now stale.

I missed it somehow; yes definitely it should be removed. I can do it in
the next version of this patch.


> > -        if ( ret < 0 && ret != -EEXIST )
> > +        if ( ret < 0 )
> >           {
> >               printk(XENLOG_G_ERR "Failed to add %s to the IOMMU\n",
> >                      dt_node_full_name(dev));


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 20:37:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 20:37:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160381.294859 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71vB-000658-IC; Fri, 23 Jul 2021 20:37:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160381.294859; Fri, 23 Jul 2021 20:37:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m71vB-000651-F9; Fri, 23 Jul 2021 20:37:25 +0000
Received: by outflank-mailman (input) for mailman id 160381;
 Fri, 23 Jul 2021 20:37:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=aJz+=MP=strugglers.net=andy@srs-us1.protection.inumbo.net>)
 id 1m71v9-00064v-Um
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 20:37:23 +0000
Received: from mail.bitfolk.com (unknown [2001:ba8:1f1:f019::25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c36c7ce6-6504-47fa-afc0-946112d3be47;
 Fri, 23 Jul 2021 20:37:22 +0000 (UTC)
Received: from andy by mail.bitfolk.com with local (Exim 4.89)
 (envelope-from <andy@strugglers.net>) id 1m71v7-0000yW-RM
 for xen-devel@lists.xenproject.org; Fri, 23 Jul 2021 20:37:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c36c7ce6-6504-47fa-afc0-946112d3be47
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=bitfolk.com
	; s=alpha; h=In-Reply-To:Content-Transfer-Encoding:Content-Type:MIME-Version:
	References:Message-ID:Subject:To:From:Date:Sender:Reply-To:Cc:Content-ID:
	Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
	:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
	List-Post:List-Owner:List-Archive;
	bh=J0e1eLHL1iIzrWjyNmSHHmF22eMycVd3tBkUU/rCj/4=; b=Cn1PGZtNOcm5Z8JxLl8S65jl2+
	ASBKO5LeJT6GM/oGuDx00S1anI/qu0xi2AnPnEq079W0TbS1t0SbeYYSDKdHGYRXnJXOOGXTCfTpP
	EflIdbbPYsGBo3jxlC31L4oqg2vuivR5tC6yRVh5Zsc9HkNchlkGL1ppmg1PL7o18ZnW2abEXC3kc
	cMnFq27IXqvroWWixtJpatpGHRC5ryxFsj+IAMrwCoQytaTf3+v5rvgoFfXpEPOTvZ58OC36NQKNr
	x//Bb6h5Qpak7QcZVGMMmhdgOJ/7s4X3tiASVgXTYknLiJyWYDjp4GiG0y+dH5FPdNNzA19gsxPG2
	Ub7xDqcg==;
Date: Fri, 23 Jul 2021 20:37:21 +0000
From: Andy Smith <andy@strugglers.net>
To: xen-devel@lists.xenproject.org
Subject: Re: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072
 nents:13
Message-ID: <20210723203721.v63zzsmrcbvlr6wg@bitfolk.com>
References: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
 <c3d7f7c7-0231-dba2-344f-e2e3588e0cab@suse.com>
 <20210721141942.tnxyfpt7qttzjooo@bitfolk.com>
 <acc3c000-3d62-d91d-3ad7-0e0b460f4b0f@suse.com>
 <20210723201028.tzmz65biwelruvqb@bitfolk.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210723201028.tzmz65biwelruvqb@bitfolk.com>
OpenPGP: id=BF15490B; url=http://strugglers.net/~andy/pubkey.asc
X-URL: http://strugglers.net/wiki/User:Andy
User-Agent: NeoMutt/20170113 (1.7.2)
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: andy@strugglers.net
X-SA-Exim-Scanned: No (on mail.bitfolk.com); SAEximRunCond expanded to false

On Fri, Jul 23, 2021 at 08:10:28PM +0000, Andy Smith wrote:
> Hmm, I have the sector offset in the MD device so maybe I can
> convert that into a logical volume to know if a particular guest is
> provoking it…

So for anyone who ever wants to do that sort of thing:

# Find out offset that LVM puts LVs from start of its physical
# device
$ sudo pvs --noheadings -o pe_start --units s /dev/md4
    2048S
# Find out the sector size of each LVM extent (PE)
$ sudo pvdisplay --units s /dev/md4 | grep 'PE Size'
  PE Size               8192 Se
# Report PE number for each sector
$ for sect in 912000815 916064223 1934755601 914360207 1936852857; do lv_sect=$((sect-2048)); pe=$((sect / 8192)); printf "%s: sector %s PE %s\n" $sect $lv_sect $pe; done
912000815: sector 911998767 PE 111328
916064223: sector 916062175 PE 111824
1934755601: sector 1934753553 PE 236176
914360207: sector 914358159 PE 111616
1936852857: sector 1936850809 PE 236432

Looking the PE numbers up in the output of "pvdisplay --maps --units
s /dev/md4" I can see it's three hits for one guest and two for
another.

I will see if I can move the 3 time affected guest to test hardware.

Cheers,
Andy


From xen-devel-bounces@lists.xenproject.org Fri Jul 23 21:29:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 23 Jul 2021 21:29:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160391.294883 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m72jb-0004RQ-Jh; Fri, 23 Jul 2021 21:29:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160391.294883; Fri, 23 Jul 2021 21:29:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m72jb-0004RJ-Ge; Fri, 23 Jul 2021 21:29:31 +0000
Received: by outflank-mailman (input) for mailman id 160391;
 Fri, 23 Jul 2021 21:29:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m72ja-0004R9-0S; Fri, 23 Jul 2021 21:29:30 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m72jZ-0003Mr-PK; Fri, 23 Jul 2021 21:29:29 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m72jZ-0004jF-Fq; Fri, 23 Jul 2021 21:29:29 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m72jZ-00020m-FO; Fri, 23 Jul 2021 21:29:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=0O/Npad8aAhGktphOEfI7UUkOYD2Vwfsou7jQ4nut30=; b=XbfEtgiKC2ByIQOvfWSpCh0A7g
	FwanyltY0NJXx5ix+y8pAqD4Xcq+CtpkqdoMKjyxFdkbWINuJ+BbkSdAyFdVNw95R2cTg5mlen9Kg
	/S6IP1UoFNeZGZVn0TfIxDaqdaI+xHroyUUA2RP7aoWz0Yloo8zFVA2b56ROHub5PbU4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163950-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163950: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-localmigrate/x10:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=8baef6386baaefb776bdd09b5c7630cf057c51c6
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 23 Jul 2021 21:29:29 +0000

flight 163950 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163950/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 19 guest-localmigrate/x10   fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                8baef6386baaefb776bdd09b5c7630cf057c51c6
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  357 days
Failing since        152366  2020-08-01 20:49:34 Z  356 days  609 attempts
Testing same since   163950  2021-07-23 14:10:57 Z    0 days    1 attempts

------------------------------------------------------------
6714 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1982517 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 01:52:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 01:52:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160413.294940 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m76pp-0001nS-Af; Sat, 24 Jul 2021 01:52:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160413.294940; Sat, 24 Jul 2021 01:52:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m76pp-0001nL-5c; Sat, 24 Jul 2021 01:52:13 +0000
Received: by outflank-mailman (input) for mailman id 160413;
 Sat, 24 Jul 2021 01:52:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m76po-0001nB-EI; Sat, 24 Jul 2021 01:52:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m76po-0005Rn-73; Sat, 24 Jul 2021 01:52:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m76pn-0006wF-QQ; Sat, 24 Jul 2021 01:52:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m76pn-00063u-Pp; Sat, 24 Jul 2021 01:52:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=F0QnKWo0uRwm6N5muI5ei2Uu0+dHfCEBZbBuFjpVOYo=; b=jd4mRjJ8SAhQsndWS+VOx8qWUN
	aKoc8u3L5oL0rtQv6QB+U8oNnZzWQgmcCVgwn/cUMSkF4RlMqEQ/2oI0Q8efBVpXiNrTwIQVMEfFE
	UYQegUiG9rI+cXbUktmCwWNfaBr0H2YQmQIG0G7zKeNNM6LMOHv2UE8L7UVBTsd7GDog=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163955-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163955: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=a146af86c8247f41b641783428b95ee71eb0e43f
X-Osstest-Versions-That:
    qemuu=9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 01:52:11 +0000

flight 163955 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163955/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163321
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163321

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163321
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163321
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163321
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163321
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163321
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163321
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163321
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                a146af86c8247f41b641783428b95ee71eb0e43f
baseline version:
 qemuu                9bef7ea9d93ee6b6297a5be6cb5a557f7d1764c9

Last test of basis   163321  2021-07-06 00:39:14 Z   18 days
Failing since        163327  2021-07-06 12:39:04 Z   17 days   32 attempts
Testing same since   163955  2021-07-23 16:39:26 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alberto Garcia <berto@igalia.com>
  Alex Bennée <alex.bennee@linaro.org>
  Alex Williamson <alex.williamson@redhat.com>
  Alexandre Iooss <erdnaxe@crans.org>
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alistair Francis <alistair.francis@wdc.com>
  Andreas Schwab <schwab@suse.de>
  Andrew Melnychenko <andrew@daynix.com>
  Arseny Krasnov <arseny.krasnov@kaspersky.com>
  BALATON Zoltan <balaton@eik.bme.hu>
  Bharata B Rao <bharata@linux.ibm.com>
  Bin Meng <bin.meng@windriver.com>
  Bin Meng <bmeng.cn@gmail.com>
  Brad Smith <brad@comstyle.com>
  Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br>
  Cai Huoqing <caihuoqing@baidu.com>
  Cho, Yu-Chen <acho@suse.com>
  Christian Borntraeger <borntraeger@de.ibm.com>
  Claudio Fontana <cfontana@suse.de>
  Cleber Rosa <crosa@redhat.com>
  Cole Robinson <crobinso@redhat.com>
  Connor Kuehl <ckuehl@redhat.com>
  Corey Minyard <cminyard@mvista.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Le Goater <clg@kaod.org>
  Daniel P. Berrangé <berrange@redhat.com>
  David Edmondson <david.edmondson@oracle.com>
  David Gibson <david@gibson.dropbear.id.au>
  David Hildenbrand <david@redhat.com>
  Dmitry Voronetskiy <davoronetskiy@gmail.com>
  Dov Murik <dovmurik@linux.ibm.com>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Eduardo Habkost <ehabkost@redhat.com>
  Eduardo Otubo <otubo@redhat.com>
  Emanuele Giuseppe Esposito <eesposit@redhat.com>
  Eric Auger <eric.auger@redhat.com>
  Eric Blake <eblake@redhat.com>
  Fabiano Rosas <farosas@linux.ibm.com>
  Finn Thain <fthain@linux-m68k.org>
  Gerd Hoffmann <kraxel@redhat.com>
  Greg Kurz <groug@kaod.org>
  Heinrich Schuchardt <xypron.glpk@gmx.de>
  hnick@vmware.com <hnick@vmware.com>
  Hubert Jasudowicz <hubert.jasudowicz@gmail.com>
  Hyman <huangy81@chinatelecom.cn>
  Igor Mammedov <imammedo@redhat.com>
  Ilya Dryomov <idryomov@gmail.com>
  Jason Andryuk <jandryuk@gmail.com>
  Jinhua Cao <caojinhua1@huawei.com>
  John Arbuckle <programmingkidx@gmail.com>
  John Snow <jsnow@redhat.com>
  John Sucaet <john.sucaet@ekinops.com>
  Jose Martins <josemartins90@gmail.com>
  Jose R. Ziviani <jziviani@suse.de>
  Julia Suvorova <jusual@redhat.com>
  Kevin Wolf <kwolf@redhat.com>
  Kito Cheng <kito.cheng@sifive.com>
  Kostiantyn Kostiuk <konstantin@daynix.com>
  Lara Lazier <laramglazier@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Laurent Vivier <laurent@vivier.eu>
  Laurent Vivier <lvivier@redhat.com>
  Li Zhijian <lizhijian@cn.fujitsu.com>
  Liren Wei <lrwei@bupt.edu.cn>
  Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
  Lukas Straub <lukasstraub2@web.de>
  Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Mark Nelson <mdnelson8@gmail.com>
  Markus Armbruster <armbru@redhat.com>
  Mathieu Poirier <mathieu.poirier@linaro.org>
  Max Filippov <jcmvbkbc@gmail.com>
  Max Reitz <mreitz@redhat.com>
  Michael Roth <michael.roth@amd.com>
  Michael S. Tsirkin <mst@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Miroslav Rezanina <mrezanin@redhat.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nick Hudson <hnick@vmware.com>
  Olaf Hering <olaf@aepfle.de>
  Or Ozeri <oro@il.ibm.com>
  Owen Anderson <oanderso@google.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
  Peter Lieven <pl@kamp.de>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Rebecca Cran <rebecca@nuviainc.com>
  Ricardo Koller <ricarkol@google.com>
  Richard Henderson <richard.henderson@linaro.org>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Titus Rwantare <titusr@google.com>
  Ulrich Weigand <ulrich.weigand@de.ibm.com>
  Viktor Ashirov <vashirov@redhat.com>
  Vincent Bernat <vincent@bernat.ch>
  Viresh Kumar <viresh.kumar@linaro.org>
  Vitaly Kuznetsov <vkuznets@redhat.com>
  Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
  Wainer dos Santos Moschetta <wainersm@redhat.com>
  Willian Rampazzo <willianr@redhat.com>
  Xingang Wang <wangxingang5@huawei.com>
  Yang Zhong <yang.zhong@intel.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Ziqiao Kong <ziqiaokong@gmail.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   9bef7ea9d9..a146af86c8  a146af86c8247f41b641783428b95ee71eb0e43f -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 02:08:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 02:08:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160421.294957 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7751-0004Km-H8; Sat, 24 Jul 2021 02:07:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160421.294957; Sat, 24 Jul 2021 02:07:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7751-0004Kf-EA; Sat, 24 Jul 2021 02:07:55 +0000
Received: by outflank-mailman (input) for mailman id 160421;
 Sat, 24 Jul 2021 02:07:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7750-0004KT-0k; Sat, 24 Jul 2021 02:07:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m774z-00069q-Rt; Sat, 24 Jul 2021 02:07:53 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m774z-0007S2-KQ; Sat, 24 Jul 2021 02:07:53 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m774z-0006rp-Js; Sat, 24 Jul 2021 02:07:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=7r7QgpvrifX6eGVEOTT9PAqC8nfGgSab1DDCeHnEY9g=; b=Ix7R/xzsDtospXua6hV09lYAzI
	tuc3N5tkg8kvo5Op1v/G76goQjRJf/mu5MdGgeHKy4PpEEvIdU3IYknAyvmw4g6AFNDIHsWk4e13S
	U6yWoC1uOS/wzV2FM33oOXPK1EcqKcqGAGfkETMZwQC+/c8XWwXdZV5cZeE0CvQyIH7g=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163956-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163956: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 02:07:53 +0000

flight 163956 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163956/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   49 days
Failing since        162368  2021-06-04 15:42:59 Z   49 days  134 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    1 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 05:16:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 05:16:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160428.294972 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7A1b-00018U-2s; Sat, 24 Jul 2021 05:16:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160428.294972; Sat, 24 Jul 2021 05:16:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7A1b-00018N-00; Sat, 24 Jul 2021 05:16:35 +0000
Received: by outflank-mailman (input) for mailman id 160428;
 Sat, 24 Jul 2021 05:16:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7A1a-00018D-DL; Sat, 24 Jul 2021 05:16:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7A1a-0000ou-2v; Sat, 24 Jul 2021 05:16:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7A1Z-0006hr-Pl; Sat, 24 Jul 2021 05:16:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7A1Z-0004BD-PE; Sat, 24 Jul 2021 05:16:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=AQmKEdwym0x6FTL/ODZQp5imlOvZvlsTnvSTn/cP2So=; b=RXM7r3QZvTpMsDcAtzfk2sHeGF
	2MAWplAg/uvYK8rRz6auoW3VFTE1EVVeTFGf1URQy+1zkrtb0p+PKl6zGJ1J502eFuardIcKuxtTz
	QI1ze8yrtV7ZcX3XamyHTkwhgndRMDIEZ/MPvOs2WCVsoMJmA8On0kf28eKDmLMANCl0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163963-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163963: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=704f4cba43d4ed31ef4beb422313f1263d87bc55
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 05:16:33 +0000

flight 163963 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163963/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                704f4cba43d4ed31ef4beb422313f1263d87bc55
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  357 days
Failing since        152366  2020-08-01 20:49:34 Z  356 days  610 attempts
Testing same since   163963  2021-07-23 21:41:08 Z    0 days    1 attempts

------------------------------------------------------------
6723 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1984795 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 07:00:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 07:00:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160436.294988 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7BdY-0004Qx-Iz; Sat, 24 Jul 2021 06:59:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160436.294988; Sat, 24 Jul 2021 06:59:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7BdY-0004Qq-Ex; Sat, 24 Jul 2021 06:59:52 +0000
Received: by outflank-mailman (input) for mailman id 160436;
 Sat, 24 Jul 2021 06:22:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=eVmC=MQ=sf-tec.de=eike-kernel@srs-us1.protection.inumbo.net>)
 id 1m7B3d-0000lo-7D
 for xen-devel@lists.xenproject.org; Sat, 24 Jul 2021 06:22:45 +0000
Received: from mail.sf-mail.de (unknown
 [2a01:4f8:1c17:6fae:616d:6c69:616d:6c69])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9733439d-7b15-4264-ab79-b49cf74a2000;
 Sat, 24 Jul 2021 06:22:42 +0000 (UTC)
Received: (qmail 29130 invoked from network); 24 Jul 2021 06:21:54 -0000
Received: from p548c622d.dip0.t-ipconnect.de ([::ffff:84.140.98.45]:48018 HELO
 daneel.sf-tec.de) (auth=eike@sf-mail.de)
 by mail.sf-mail.de (Qsmtpd 0.38dev) with (TLS_AES_256_GCM_SHA384 encrypted)
 ESMTPSA
 for <linux-kernel@vger.kernel.org>; Sat, 24 Jul 2021 08:21:54 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9733439d-7b15-4264-ab79-b49cf74a2000
From: Rolf Eike Beer <eike-kernel@sf-tec.de>
To: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, Logan Gunthorpe <logang@deltatee.com>
Cc: Christoph Hellwig <hch@lst.de>, Marek Szyprowski <m.szyprowski@samsung.com>, Robin Murphy <robin.murphy@arm.com>, Stephen Bates <sbates@raithlin.com>, Martin Oliveira <martin.oliveira@eideticom.com>, Logan Gunthorpe <logang@deltatee.com>
Subject: Re: [PATCH v2 21/21] dma-mapping: Disallow .map_sg operations from returning zero on error
Date: Sat, 24 Jul 2021 08:22:28 +0200
Message-ID: <2591613.mvXUDI8C0e@daneel.sf-tec.de>
In-Reply-To: <20210723175008.22410-22-logang@deltatee.com>
References: <20210723175008.22410-1-logang@deltatee.com> <20210723175008.22410-22-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="nextPart11795432.O9o76ZdvQC"; micalg="pgp-sha1"; protocol="application/pgp-signature"

--nextPart11795432.O9o76ZdvQC
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="us-ascii"

Am Freitag, 23. Juli 2021, 19:50:08 CEST schrieb Logan Gunthorpe:
> Now that all the .map_sg operations have been converted to returning
> proper error codes, drop the code to handle a zero return value,
> add a warning if a zero is returned and update the comment for the
> map_sg operation.

I see no comment being touched here.

Eike
--nextPart11795432.O9o76ZdvQC
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part.
Content-Transfer-Encoding: 7Bit

-----BEGIN PGP SIGNATURE-----

iF0EABECAB0WIQSaYVDeqwKa3fTXNeNcpIk+abn8TgUCYPuxpAAKCRBcpIk+abn8
TmEXAJ4y9fSVV7pgh2KPWXQ4YaTcwXP08ACgkfbFqKsGtxv2IZPJJiPcxo/F4Bg=
=swGr
-----END PGP SIGNATURE-----

--nextPart11795432.O9o76ZdvQC--





From xen-devel-bounces@lists.xenproject.org Sat Jul 24 07:30:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 07:30:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160443.295000 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7C6d-0008NV-TN; Sat, 24 Jul 2021 07:29:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160443.295000; Sat, 24 Jul 2021 07:29:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7C6d-0008NO-QN; Sat, 24 Jul 2021 07:29:55 +0000
Received: by outflank-mailman (input) for mailman id 160443;
 Sat, 24 Jul 2021 07:29:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7C6c-0008NE-Sx; Sat, 24 Jul 2021 07:29:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7C6c-0002k4-L3; Sat, 24 Jul 2021 07:29:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7C6c-00061u-DQ; Sat, 24 Jul 2021 07:29:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7C6c-00067x-Cw; Sat, 24 Jul 2021 07:29:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=6jY0vFdx9DW5VXEvAwQdHiOMozADcY6NMmIs3auJz1s=; b=DuVc1+aszH22N8SQaOVlehQTSU
	z0mItMQ9dVkQrtR76HlkzaNccsj4oZCJNXysJoCdmfB5QW/bHsKnpGsbT8otM29rPsupTIxR1udCZ
	GDjGDV3paZA4VanS92CXm+9epMQFtyCsit6mcimmxY0vmrMHowCRx5pLvjNLd8FFcvFc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163973-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163973: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=cd72f0cd9f7b0b7d0e2964d5dd38d2a95fa784c4
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 07:29:54 +0000

flight 163973 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163973/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              cd72f0cd9f7b0b7d0e2964d5dd38d2a95fa784c4
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  379 days
Failing since        151818  2020-07-11 04:18:52 Z  378 days  370 attempts
Testing same since   163973  2021-07-24 04:20:09 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 66711 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 09:47:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 09:47:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160453.295014 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7EEx-00082e-4B; Sat, 24 Jul 2021 09:46:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160453.295014; Sat, 24 Jul 2021 09:46:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7EEx-00082X-19; Sat, 24 Jul 2021 09:46:39 +0000
Received: by outflank-mailman (input) for mailman id 160453;
 Sat, 24 Jul 2021 09:46:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7EEv-00082N-8m; Sat, 24 Jul 2021 09:46:37 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7EEv-0005Ai-3P; Sat, 24 Jul 2021 09:46:37 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7EEu-0003ue-QY; Sat, 24 Jul 2021 09:46:36 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7EEu-0007Mu-Q0; Sat, 24 Jul 2021 09:46:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=dZYOxhe7C7UjGTIRjvQgUqboojMz6BYCcKcCA0Yai/Y=; b=FaohtRk3Wj0i5xXNw2nnQE29Gi
	7iBn6Hg+WcGUYdHJCRag/J/26AK5ZVugjRoTbtLhOaEoahOWi5gSFXkwJMIMoPrLLnOb4l5gtRc7v
	6r0L1DoIB4M2Z5PaliC3uBwN8j2V6QQJcUgkOw4edFPn/BNv+ENy5TfsLuTY5nF4OnIc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163972-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163972: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 09:46:36 +0000

flight 163972 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163972/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   50 days
Failing since        162368  2021-06-04 15:42:59 Z   49 days  135 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    1 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 12:09:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 12:09:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160462.295030 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7GSb-0007Xz-JO; Sat, 24 Jul 2021 12:08:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160462.295030; Sat, 24 Jul 2021 12:08:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7GSb-0007Xs-GG; Sat, 24 Jul 2021 12:08:53 +0000
Received: by outflank-mailman (input) for mailman id 160462;
 Sat, 24 Jul 2021 12:08:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7GSa-0007Xi-QK; Sat, 24 Jul 2021 12:08:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7GSa-0007GI-Ji; Sat, 24 Jul 2021 12:08:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7GSa-0000xj-5L; Sat, 24 Jul 2021 12:08:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7GSa-0005EN-4m; Sat, 24 Jul 2021 12:08:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Y2IReGiOiMtwDnaZeD1aJmq/J+gTnYX0qvC3Ge6Yx9k=; b=BS7KTZoNsnDsRGo+M5bo/qhrNQ
	OZkMkexO6ZCUTnmPBEmYboK+IxfoqW6Pwpx6zqO+txzZWvatvYfMg9Foup9ygmzemIjSmw6UBdOQb
	QYHA1/IqyQDF5+6D6mzHx8gAaW05n6xPV9zHhONs/AY+3wYpf5T3LPcUiaisgUsQLqZc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163971-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163971: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 12:08:52 +0000

flight 163971 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163971/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 20 guest-start/debianhvm.repeat fail in 163925 pass in 163971
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 18 guest-start/debianhvm.repeat fail pass in 163925
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat  fail pass in 163925

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-examine      4 memdisk-try-append  fail in 163925 like 163888
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163925
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163925
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163925
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163925
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163925
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163925
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163925
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163925
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163925
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163925
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163925
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163971  2021-07-24 01:53:34 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Sat Jul 24 13:12:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 13:12:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160472.295045 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7HS0-00076y-Aj; Sat, 24 Jul 2021 13:12:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160472.295045; Sat, 24 Jul 2021 13:12:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7HS0-00076r-7U; Sat, 24 Jul 2021 13:12:20 +0000
Received: by outflank-mailman (input) for mailman id 160472;
 Sat, 24 Jul 2021 13:12:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7HRy-00076h-Q4; Sat, 24 Jul 2021 13:12:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7HRy-00088J-E5; Sat, 24 Jul 2021 13:12:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7HRy-0002SE-1M; Sat, 24 Jul 2021 13:12:18 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7HRy-0005rs-0t; Sat, 24 Jul 2021 13:12:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=kKwTH7Hz7mkrxRCWYKpMXzDCVGeR9Ae6E9gmZl3I58E=; b=JWMkZW7UgrCTMNm6m3wj6TUH0z
	A5fBVAouKZS9uUIRh5/TLEUsagRPZFNaJPK650CwyOYtwarOyg6vNUxLLkNGa7lM9wsJ81TVi463V
	IXkj0aWleNjaopaI1jhEItO1kWnJtKUguijrLrBEfH7ulfEhbw5qbLTiuGpHWbkgB3Pw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163974-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163974: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-examine:reboot:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=f0fddcec6b6254b4b3611388786bbafb703ad257
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 13:12:18 +0000

flight 163974 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163974/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-examine      8 reboot                   fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-examine      4 memdisk-try-append       fail REGR. vs. 152332

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                f0fddcec6b6254b4b3611388786bbafb703ad257
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  357 days
Failing since        152366  2020-08-01 20:49:34 Z  356 days  611 attempts
Testing same since   163974  2021-07-24 05:19:36 Z    0 days    1 attempts

------------------------------------------------------------
6723 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     fail    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1985136 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 13:55:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 13:55:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160480.295060 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7I7L-0003oh-U7; Sat, 24 Jul 2021 13:55:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160480.295060; Sat, 24 Jul 2021 13:55:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7I7L-0003oX-Ql; Sat, 24 Jul 2021 13:55:03 +0000
Received: by outflank-mailman (input) for mailman id 160480;
 Sat, 24 Jul 2021 13:55:03 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7I7K-0003oN-UK; Sat, 24 Jul 2021 13:55:02 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7I7K-0000I0-QI; Sat, 24 Jul 2021 13:55:02 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7I7K-0003Or-Gm; Sat, 24 Jul 2021 13:55:02 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7I7K-00071a-GH; Sat, 24 Jul 2021 13:55:02 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=d6tqMmT38MQLUz4TPtBBVN8NDvbeScgKUQJTtxJEu3Q=; b=oCzdQ6HzZOO4dJ5GZrtr5BsdR1
	Dkgw58rOflv30wkvlZ3hitFgEbOUISrIMfD23kF4z8uE0f+Wk9j2wn0MH2Y3eKiAZVntjwvn9TJCN
	mh+I72iwPJiYT/SuWxfOkTDYQR/bgS+0AsCUDI39N155fRVWUnZ5Juzyo0N7WHYG1yYA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163975-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163975: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 13:55:02 +0000

flight 163975 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163975/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   50 days
Failing since        162368  2021-06-04 15:42:59 Z   49 days  136 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    1 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 14:57:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 14:57:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160487.295074 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7J5u-0002zg-KR; Sat, 24 Jul 2021 14:57:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160487.295074; Sat, 24 Jul 2021 14:57:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7J5u-0002zZ-HQ; Sat, 24 Jul 2021 14:57:38 +0000
Received: by outflank-mailman (input) for mailman id 160487;
 Sat, 24 Jul 2021 14:57:37 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m7J5t-0002zT-17
 for xen-devel@lists.xenproject.org; Sat, 24 Jul 2021 14:57:37 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m7J5s-0001DT-RE; Sat, 24 Jul 2021 14:57:36 +0000
Received: from [54.239.6.185] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m7J5s-0000Im-LB; Sat, 24 Jul 2021 14:57:36 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Ic6dSPz1O5l70NW83f68iCZeb8m2ZD+vnU0wDHUKzF0=; b=VoajJAl/ZLZZZJeJATxbsfVfj1
	lvzuEMpp0BSdzux/12VlPNlKUB+ofl6PL8iQY3lFr39BVDWYOEQwjcZtSdX9fCh/ALF2oM0aQZQd5
	s036/naaAk9fpDPBqHRhpdHBjtTre8uud+1Eq2Hb53YYwSlC5wgVQDipFC/q02k8w/Fo=;
Subject: Re: [arm] Dom0 hangs after enable KROBE_EVENTS and/or UPROBE_EVENTS
 in kernel config
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 Andrii Anisov <Andrii_Anisov@epam.com>
References: <PA4PR03MB7136DEB7183936907DFE145AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB713685E6A8004ED13814B05AE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <PA4PR03MB71367B7662A1D3E4E234F6C0E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <a02d4291-e48e-28cc-52da-6b9c998b2d0a@xen.org>
 <PA4PR03MB7136452DF9961BC283718F4BE3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <8ce6f5fe-ccb6-d463-a39e-50fd82816b86@xen.org>
 <PA4PR03MB7136D3B811F820FC8A5AFF95E3E39@PA4PR03MB7136.eurprd03.prod.outlook.com>
 <alpine.DEB.2.21.2107211850540.14204@sstabellini-ThinkPad-T480s>
 <7c3453ed-181f-a166-f16c-43a33bcc529c@xen.org>
 <alpine.DEB.2.21.2107221437120.10122@sstabellini-ThinkPad-T480s>
 <88c43f6c-9d76-1cab-93f5-ddecc76b487f@xen.org>
 <alpine.DEB.2.21.2107230928460.10122@sstabellini-ThinkPad-T480s>
 <206a7bc1-4093-d3f5-a54f-8466be06695c@xen.org>
 <alpine.DEB.2.21.2107231113260.10122@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <26451fa3-56c9-0f21-ce05-e5e91088a173@xen.org>
Date: Sat, 24 Jul 2021 15:57:34 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107231113260.10122@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 23/07/2021 21:14, Stefano Stabellini wrote:
> On Fri, 23 Jul 2021, Julien Grall wrote:
>>> (XEN) ****************************************
>>> (XEN) Panic on CPU 0:
>>> (XEN) invalid compressed format (err=1)
>>> (XEN) ****************************************
>>
>> This implies Xen think the kernel module was a GZIP image and Xen is trying to
>> decompress it. However, from your e-mail above the name of the kernel module
>> is xen-Image-5.10 which implies this is not a compressed image.
>>
>> Can you confirm what is the format of xen-Image-5.10?
> 
> gzip (arch/arm64/boot/Image.gz)

Ok. I tried to use a compressed Image with bootwrapper on the foundation 
model but I saw no issue (see more below).

[...]

>> I have a Xilinx board at home (I haven't used it recently though), so I am
>> happy to help debugging it. Alternatively, do you know if it reproduces on the
>> Xilinx QEMU?
> 
> Yeah I am using the same Xilinx board that you have.
> 
> I also managed to repro the issue on upstream QEMU 2.11 (it might happen
> with newer versions but all my scripts and dtbs were already based on
> 2.11) and upstream U-Boot 2021.04-rc1-00009-gfdcb93e170:
> 
> 
> /local/arm-vm/qemu-system-aarch64 \
>      -machine virt,gic_version=3 \
>      -machine virtualization=true \
>      -cpu cortex-a57 -machine type=virt \
>      -smp 4 -m 4096 \
>      -serial mon:stdio \
>      -bios /local/arm-vm/u-boot.bin \
>      -device loader,file=/var/lib/tftpboot/2021.1/xen,force-raw=on,addr=0x40C01000 \
>      -device loader,file=/var/lib/tftpboot/2021.1/xen-Image-5.10,force-raw=on,addr=0x40D0A000 \
>      -device loader,file=/var/lib/tftpboot/2021.1/initrd.cpio,force-raw=on,addr=0x418F1000 \
>      -device loader,file=/local/arm-vm/virt-gicv3-2.dtb,force-raw=on,addr=0x41A75000 \
>      -device loader,file=/local/arm-vm/boot.scr,force-raw=on,addr=0x40C00000
> 
> 
> With the following boot.scr:
> 
> fdt addr 0x41A75000
> fdt resize 1024
> fdt set /chosen \#address-cells <0x2>
> fdt set /chosen \#size-cells <0x2>
> fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=serial0 dom0_mem=2G dom0_max_vcpus=2 bootscrub=0 vwfi=native sched=null"
> fdt mknod /chosen dom0
> fdt set /chosen/dom0 compatible "xen,linux-zimage" "xen,multiboot-module" "multiboot,module"
> fdt set /chosen/dom0 reg <0x0 0xD0A000 0x0 0xbe6b8a>
> fdt set /chosen xen,dom0-bootargs "console=hvc0 earlycon=xen earlyprintk=xen clk_ignore_unused root=/dev/ram0"
> fdt mknod /chosen dom0-ramdisk
> fdt set /chosen/dom0-ramdisk compatible "xen,linux-initrd" "xen,multiboot-module" "multiboot,module"
> fdt set /chosen/dom0-ramdisk reg <0x0 0x18F1000 0x0 0x183400>
> setenv fdt_high 0xffffffffffffffff
> booti 0x40C01000 - 0x41A75000
> 
> I get the error:
> 
> (XEN) Panic on CPU 0:
> (XEN) invalid compressed format (err=1)

Thanks for the runes. I managed to reproduce it with a recent QEMU. 
Comparing with a working setup on the Foundation model, I noticed that 
some of the byte in memory were different towards the end of the binary.

I have used gdb to watch the memory changed and it stopped in the middle 
of U-boot. In fact the log from U-boot has:

=> booti 0x40C01000 - 0x41A75000
Moving Image from 0x40c01000 to 0x40e00000, end=40f5a8f8
## Flattened Device Tree blob at 41a75000
    Booting using the fdt blob at 0x41a75000
    Using Device Tree in place at 0000000041a75000, end 0000000041a7afff

The second line shows that U-boot relocated Xen in middle of the kernel 
Image.

Looking at the U-boot code, it contains:

	/*
	 * If bit 3 of the flags field is set, the 2MB aligned base of the
	 * kernel image can be anywhere in physical memory, so respect
	 * images->ep.  Otherwise, relocate the image to the base of RAM
	 * since memory below it is not accessible via the linear mapping.
	 */
	if (!force_reloc && (le64_to_cpu(ih->flags) & BIT(3)))
		dst = image - text_offset;
	else
		dst = gd->bd->bi_dram[0].start;

	*relocated_addr = ALIGN(dst, SZ_2M) + text_offset;

This will force the kernel to be at 2MB aligned around the address it 
where loaded (if bit 3 is set) or at the start of the RAM.

Looking again at the Image protocol, they indeed have a requirement to 
be loaded at a 2MB aligned base address. So I was wrong about the 
alignment :/. Apologies, I should have check 
Documentation/arm64/booting.rst rather than relying solely on our changelog.

TBH, I think this is a bit naughty for U-boot to overwrite some modules. 
But I guess it doesn't know them at least when already loaded in the 
memory (not sure for tftp).

Now, I wonder why the following commit introduced the 4KB alignment:

commit ca59618967fe0c3ecc6cb7bd8bd0f5651b4e9dea
Author: Ian Campbell <ian.campbell@citrix.com>
Date:   Mon Jul 21 13:59:56 2014 +0100

     xen: arm: Handle 4K aligned hypervisor load address.

     Currently the boot page tables map Xen at XEN_VIRT_START using a 
2MB section
     mapping. This means that the bootloader must load Xen at a 2MB 
aligned address.
     Unfortunately this is not the case with UEFI on the Juno platform 
where Xen
     fails to boot. Furthermore the Linux boot protocol (which Xen 
claims to adhere
     to) does not have this restriction, therefore this is our bug and 
not the
     bootloader's.

     Fix this by adding third level pagetables to the boot time 
pagetables, allowing
     us to map a Xen which is aligned only to a 4K boundary. This only 
affects the
     boot time page tables since Xen will later relocate itself to a 2MB 
aligned
     address. Strictly speaking the non-boot processors could make use 
of this and
     use a section mapping, but it is simpler if all processors follow 
the same boot
     path.

     Strictly speaking the Linux boot protocol doesn't even require 4K 
alignment
     (and apparently Linux can cope with this), but so far all 
bootloaders appear to
     provide it, so support for this is left for another day.

     In order to use LPAE_ENTRIES in head.S we need to define it in an 
asm friendly
     way.

     Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
     Acked-by: Julien Grall <julien.grall@linaro.org>
     [ ijc -- properly format message "- FOO -\r\n" ]

IIRC, Juno (both r1 and r2) are Armv8 processor (supporting both 32-bit 
and 64-bit). From the commit message it is not entirely clear whether 
the issue was found on 64-bit or 32-bit.

I am tempted to force the 2MB alignment on Arm64 again (AFAICT zImage 
doesn't require a 2MB alignment) because the assembly code should be 
shorter. I would need to check what alignment UEFI requires first.

Anyway, that was a fun issue to debug. For Xen, we may want to consider 
to check overlapping of the modules in very early boot. This would help 
diagnosing such issues.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 20:07:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 20:07:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160497.295087 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7Nvu-0004jC-4O; Sat, 24 Jul 2021 20:07:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160497.295087; Sat, 24 Jul 2021 20:07:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7Nvu-0004j5-1I; Sat, 24 Jul 2021 20:07:38 +0000
Received: by outflank-mailman (input) for mailman id 160497;
 Sat, 24 Jul 2021 20:07:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=AYYX=MQ=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m7Nvs-0004iz-4U
 for xen-devel@lists.xenproject.org; Sat, 24 Jul 2021 20:07:36 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c85cf08c-ecba-11eb-955d-12813bfff9fa;
 Sat, 24 Jul 2021 20:07:34 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1627157248999314.5502574414819;
 Sat, 24 Jul 2021 13:07:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c85cf08c-ecba-11eb-955d-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1627157251; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=A1GPZlPK1lwD0fdf/STb5XdFLWt8KnH18vcp59gXU5L8lpuXZ37P3o+qMXCc5jsiryES84MvwjVkvi8955u+5LIurJnM0J7MZcVDFksiTXjCnPew01aUpzPNI2BW0z1mklFbUgpziGbvuCCFPkSfx6mkj52F7Mm8rjM1Gs0ESfo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1627157251; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=sMyL52ngESrAeHbnk3UHc7t7QxjbnTa7tbz4U17eyBU=; 
	b=PcqyafkprxQnwcyqkILa8dg7kWHs4k5N6O3qnvZnYQJ+ayq/nWIJOuBBkh1p+zLTckeFKsmvnhkPZxTXX6TXC5s4Q4jC+ks69SP0TdOO90X5EahSwq8rIy2bw0aiD7Vl4nLwEGxH/wJVTEDBzljdBqYPnTlZWLl+ImIefHA+0aA=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1627157251;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=To:Cc:References:From:Subject:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=sMyL52ngESrAeHbnk3UHc7t7QxjbnTa7tbz4U17eyBU=;
	b=LodJJ94dzxkzsIu2mMTjpaIbNJkjx+Dyc+l6VnmkmFy1gseg5rBhsiWUxHA7TM4G
	vktJu0VHiAqrT8MH8r2U6/KJc7yqFfg2WVEr6P0fPNYH8Rj0XZve5Rpb/pJPeRKNBdf
	zNAAo/WktF+07riOXTBkYqZ4OXdw1lJFRnSQU9Gs=
To: Jan Beulich <jbeulich@suse.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-10-dpsmith@apertussolutions.com>
 <34c71bc9-18e8-08cd-d55f-9f5f97bde91e@suse.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: Re: [PATCH v2 09/10] xsm: expand the function related macros in
 dummy.h
Message-ID: <0c944d5f-cc79-4df9-9531-cb918aef8fe8@apertussolutions.com>
Date: Sat, 24 Jul 2021 16:07:27 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <34c71bc9-18e8-08cd-d55f-9f5f97bde91e@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

On 7/16/21 3:34 AM, Jan Beulich wrote:
> On 12.07.2021 22:32, Daniel P. Smith wrote:
>> With the elimination of switching how dummy.h gets included, the function
>> declaration macros are no longer necessary. This commit expands them out to the
>> only value for which they will ever be set. This results in function
>> declaration lengths changing and since some definitions did not even follow the
>> 80 column wrapping style, all function definitions were aligned with the
>> predominate style found in core hypervisor code.
> 
> I'm afraid this last half sentence is quite far from true:

I would disagree since I know I went through the frustration of trying
to find a discernible consistency in the files in common/ in the end I
settled on following common/memory.c since it seemed to have the most
uniform, it had only a couple of anomalies, as opposed to other files
where indentation was varied throughout.

>> @@ -82,43 +79,43 @@ static always_inline int xsm_default_action(
>>      }
>>  }
>>  
>> -static XSM_INLINE void dummy_security_domaininfo(struct domain *d,
>> +static inline void dummy_security_domaininfo(struct domain *d,
>>                                      struct xen_domctl_getdomaininfo *info)
> 
> Padding wasn't good here before, but you clearly do not change it to
> either of the forms we agreed on as being the goal for consistency:

Then that agreement should be document as CODING_STYLE only states:


Line Length
-----------

Lines should be less than 80 characters in length.  Long lines should
be split at sensible places and the trailing portions indented.


I found that in common/memory.c the predominate style was to align
parameters with the first parameter when wrapping, which is what I
followed. In this specific case when I wrapped the second parameter to
make the line less than 80 chars (an explicit rule in CODING_STYLE) and
attempted to align with the first paramter resulted in the line
exceeding 80 chars. Since the only hard rule is lines must be less than
80, I decreased the indent by enough characters for the line to be less
than 80 to be in line with CODING_STYLE since it only calls for sensible
splits that are indented.

> static inline void dummy_security_domaininfo(struct domain *d,
>                                              struct xen_domctl_getdomaininfo *info)
> 
> or
> 
> static inline void dummy_security_domaininfo(
>     struct domain *d,
>     struct xen_domctl_getdomaininfo *info)
> 

I will align to the second, even though I find it annoying to switch
alignment styles, since the first would be in violation of CODING_STYLE
sine the second line would exceed 80 chars

>> -static XSM_INLINE int dummy_domain_create(XSM_DEFAULT_ARG struct domain *d, u32 ssidref)
>> +static inline int dummy_domain_create(struct domain *d, u32 ssidref)
> 
> When you have to touch lines anyway, may I suggest that you also take
> the opportunity and convert u<N> to uint<N>_t, to bring this file
> better in line with ./CODING_STYLE?

Sure.

v/r,
dps




From xen-devel-bounces@lists.xenproject.org Sat Jul 24 20:19:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 20:19:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160503.295099 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7O7S-0006Sg-7Q; Sat, 24 Jul 2021 20:19:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160503.295099; Sat, 24 Jul 2021 20:19:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7O7S-0006SZ-3C; Sat, 24 Jul 2021 20:19:34 +0000
Received: by outflank-mailman (input) for mailman id 160503;
 Sat, 24 Jul 2021 20:19:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7O7R-0006SP-4N; Sat, 24 Jul 2021 20:19:33 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7O7Q-0006bM-So; Sat, 24 Jul 2021 20:19:32 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7O7Q-0003M2-G1; Sat, 24 Jul 2021 20:19:32 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7O7Q-0004iz-FF; Sat, 24 Jul 2021 20:19:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=/amdpOzCkr6G3pL7xYmQKqqUCcnpfUMceJaxzaieGfA=; b=sgXWsVQ0ha3E0oZbyWysBYKk6X
	09OcijQZ6nk487zQRXgkmtE0XbVO8T1DHLtqyP5gx9A/GKTjJudS7i7O5dt3PPFMDYIyHcMM7C9Z8
	FUeiyK+GmfkDv/qpLsr793DjeerGS4fQgUzpNkWSx2H+lVWU33dCTUsSVFvB++qRb1EA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163976-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163976: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=a2376507f615495b1d16685449ce0ea78c2caf9d
X-Osstest-Versions-That:
    qemuu=a146af86c8247f41b641783428b95ee71eb0e43f
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 20:19:32 +0000

flight 163976 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163976/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163955
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163955
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163955
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163955
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163955
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163955
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163955
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                a2376507f615495b1d16685449ce0ea78c2caf9d
baseline version:
 qemuu                a146af86c8247f41b641783428b95ee71eb0e43f

Last test of basis   163955  2021-07-23 16:39:26 Z    1 days
Testing same since   163976  2021-07-24 13:39:09 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alexander Bulekov <alxndr@bu.edu>
  Claudio Fontana <cfontana@suse.de>
  Daniel P. Berrangé <berrange@redhat.com>
  David Hildenbrand <david@redhat.com>
  Gerd Hoffmann <kraxel@redhat.com>
  Igor Mammedov <imammedo@redhat.com>
  Lara Lazier <laramglazier@gmail.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   a146af86c8..a2376507f6  a2376507f615495b1d16685449ce0ea78c2caf9d -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Sat Jul 24 20:43:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 20:43:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160513.295114 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7OUJ-0001fB-5S; Sat, 24 Jul 2021 20:43:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160513.295114; Sat, 24 Jul 2021 20:43:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7OUJ-0001f4-2H; Sat, 24 Jul 2021 20:43:11 +0000
Received: by outflank-mailman (input) for mailman id 160513;
 Sat, 24 Jul 2021 20:43:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=AYYX=MQ=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m7OUH-0001ey-NF
 for xen-devel@lists.xenproject.org; Sat, 24 Jul 2021 20:43:09 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2cd413da-57ad-4839-a4bb-227d738d4800;
 Sat, 24 Jul 2021 20:43:08 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1627159385387949.1730538102499;
 Sat, 24 Jul 2021 13:43:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2cd413da-57ad-4839-a4bb-227d738d4800
ARC-Seal: i=1; a=rsa-sha256; t=1627159386; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=Sn3MFxVvSMGzV40V3JczanAvqsAaYMpBM/Mm0SWAIfEc99rOMHew5Y2698SZD25SmzpxlDXpehDA8NuDoYukTJ/GktpkxVIzFAkyLED4e9FCVGVvMD6ktbfVJ6om3rS88WgyzILvRJy+mK8JdTRcYZilomyFFyFiyuO3KUvuy84=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1627159386; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=l0HQ0dv2xeoNzvlSu1aIz5cr2FnCBz+hT2qxMfZWAmE=; 
	b=E6A114aSfHPZBZXxGEyt/UOR5km4iEHpMVse+gRSLW4YHRcByfx5kRJu0LF/K9f2GOq2yjwW8LbcO0/VOMQ4dmQC7Cduk8uS+tYMJxmMS8jObSJuirWlrkimmZoKdr9plqwSOJfXOyxEFe+bzqC097bnNEqbMcmagt7O95A9+fQ=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1627159386;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=Subject:From:To:Cc:References:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=l0HQ0dv2xeoNzvlSu1aIz5cr2FnCBz+hT2qxMfZWAmE=;
	b=RNNWdv3tq+Xv0a5WHk4Ga7t0oVJRHDEpZvac08+yv2wZQ6ZHa3lYWZdSEZZzOIyS
	UGhUG20aslzHii9IeB6mpg2R2m0h1Ts00JAymqu8+l7K470ohpBF18klxVLSKTzSM2p
	89oFaX+sIlW/M0xomf1MlLewj0vL/fuXL1NmnW8E=
Subject: Re: [PATCH v2 09/10] xsm: expand the function related macros in
 dummy.h
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Daniel De Graaf <dgdegra@tycho.nsa.gov>, xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-10-dpsmith@apertussolutions.com>
 <34c71bc9-18e8-08cd-d55f-9f5f97bde91e@suse.com>
 <0c944d5f-cc79-4df9-9531-cb918aef8fe8@apertussolutions.com>
Message-ID: <723a963e-0188-290b-17dc-9e277808a7b0@apertussolutions.com>
Date: Sat, 24 Jul 2021 16:43:04 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <0c944d5f-cc79-4df9-9531-cb918aef8fe8@apertussolutions.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-ZohoMailClient: External

On 7/24/21 4:07 PM, Daniel P. Smith wrote:
> On 7/16/21 3:34 AM, Jan Beulich wrote:
>> On 12.07.2021 22:32, Daniel P. Smith wrote:
>>> With the elimination of switching how dummy.h gets included, the function
>>> declaration macros are no longer necessary. This commit expands them out to the
>>> only value for which they will ever be set. This results in function
>>> declaration lengths changing and since some definitions did not even follow the
>>> 80 column wrapping style, all function definitions were aligned with the
>>> predominate style found in core hypervisor code.
>>
>> I'm afraid this last half sentence is quite far from true:
> 
> I would disagree since I know I went through the frustration of trying
> to find a discernible consistency in the files in common/ in the end I
> settled on following common/memory.c since it seemed to have the most
> uniform, it had only a couple of anomalies, as opposed to other files
> where indentation was varied throughout.
> 

Going back into the patch I found what happened. I am not sure how, but
every parameter line I wrapped had 7 additional spaces. This has been
corrected.

v/r
dps



From xen-devel-bounces@lists.xenproject.org Sat Jul 24 23:53:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 24 Jul 2021 23:53:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160522.295126 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7RRn-0006SG-Dp; Sat, 24 Jul 2021 23:52:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160522.295126; Sat, 24 Jul 2021 23:52:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7RRn-0006S9-Au; Sat, 24 Jul 2021 23:52:47 +0000
Received: by outflank-mailman (input) for mailman id 160522;
 Sat, 24 Jul 2021 23:52:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7RRm-0006Rz-Jp; Sat, 24 Jul 2021 23:52:46 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7RRm-0001By-Eq; Sat, 24 Jul 2021 23:52:46 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7RRm-00013S-2v; Sat, 24 Jul 2021 23:52:46 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7RRm-0006PZ-2P; Sat, 24 Jul 2021 23:52:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tlFPSuPtWPlkJDZQBJMF6Kr4WemAubySbio8pG1R2Io=; b=b1zfCY50oVVCi8dVebsc8xELmm
	hrSh5T/sz5SEN1UePXp51V/51C/oDDSAmH6+it73hXUmDNXwEYGRKOP4M8p5GaISNm2f7UcapmRuv
	qQPKw0TuQKl1MsyNdCT4l8xvPFGG3LST0wWMnai78Cxxso1WYltPrO32igcxTYGyWf5k=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163977-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163977: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=f0fddcec6b6254b4b3611388786bbafb703ad257
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 24 Jul 2021 23:52:46 +0000

flight 163977 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163977/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332

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

version targeted for testing:
 linux                f0fddcec6b6254b4b3611388786bbafb703ad257
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  358 days
Failing since        152366  2020-08-01 20:49:34 Z  357 days  612 attempts
Testing same since   163974  2021-07-24 05:19:36 Z    0 days    2 attempts

------------------------------------------------------------
6723 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1985136 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 00:42:01 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 00:42:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160529.295141 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7SDK-0004n5-D6; Sun, 25 Jul 2021 00:41:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160529.295141; Sun, 25 Jul 2021 00:41:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7SDK-0004my-AD; Sun, 25 Jul 2021 00:41:54 +0000
Received: by outflank-mailman (input) for mailman id 160529;
 Sun, 25 Jul 2021 00:41:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7SDI-0004mn-3k; Sun, 25 Jul 2021 00:41:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7SDH-0002Ux-W0; Sun, 25 Jul 2021 00:41:51 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7SDH-000285-LC; Sun, 25 Jul 2021 00:41:51 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7SDH-0000LK-Kg; Sun, 25 Jul 2021 00:41:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=//z6PyWm9QuLZRRgkGHL4qq2YDzJFCDTK6O5SdfqLqE=; b=LaoI7pZcFdT7AtH08ADl6eLcP4
	uoku+W3HjdiAPuwhDxiM7quI+vRqsuu/q4f1RWvZQ4L171c7VLHzbLA7sJRiLc00xVbBOCXo3suE+
	64Q/wQ9poy45lNEcYSC0gFeX5tKq3bvTwpR3a2913uvQG0GEjUYDIU/q1y2o7/11U2Fs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163978-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163978: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 00:41:51 +0000

flight 163978 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163978/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   50 days
Failing since        162368  2021-06-04 15:42:59 Z   50 days  137 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    2 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 01:33:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 01:33:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160537.295156 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7T0p-0000r4-D9; Sun, 25 Jul 2021 01:33:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160537.295156; Sun, 25 Jul 2021 01:33:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7T0p-0000qx-80; Sun, 25 Jul 2021 01:33:03 +0000
Received: by outflank-mailman (input) for mailman id 160537;
 Sun, 25 Jul 2021 01:33:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=td3s=MR=gmail.com=rob.townley@srs-us1.protection.inumbo.net>)
 id 1m7T0n-0000qr-Sw
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 01:33:01 +0000
Received: from mail-vk1-xa2e.google.com (unknown [2607:f8b0:4864:20::a2e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1ae74886-4437-48d6-9dde-b63172ca3235;
 Sun, 25 Jul 2021 01:33:00 +0000 (UTC)
Received: by mail-vk1-xa2e.google.com with SMTP id x16so1273982vkn.0
 for <xen-devel@lists.xenproject.org>; Sat, 24 Jul 2021 18:33:00 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1ae74886-4437-48d6-9dde-b63172ca3235
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:reply-to:from:date:message-id
         :subject:to:cc;
        bh=i7Zyt8w3tV8oE/uo+YJ3vNPFZtsmV0Pmp2gZ0FSTG0c=;
        b=m6FOWBtyIKGftK1tlyGNazMt+7eaH0E+29II1U3uTBN74lkIh44aEhWlirTSFZfqdl
         iyAXVF5yUmnGo6zS6/uqlRqCI0+yBnflZz3a9YfZrJ5xr+YI34y52lX5Cx3+aZqhj3LZ
         lOKaR79U0ksNLNdTqnGP/fuNIvi1W1Xe2WflHHBCtNXdd81U6LkurRxW2xq1NzLr6Ix1
         9RDrFiuDXFYA284hzXa9v1PgtRaBUOtTN2x4qbCbFjQlk12xJEvKzQxJPVbaYctxB3Pz
         BZVPTBs3v5dKOxRCIl0L6dd9PsNl9Oi79Rx057M3dDnbw0Ky/n/H0AnAeOZRHQu1RprU
         V6+Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:reply-to
         :from:date:message-id:subject:to:cc;
        bh=i7Zyt8w3tV8oE/uo+YJ3vNPFZtsmV0Pmp2gZ0FSTG0c=;
        b=dg+0OVERzDtI9Akh8O0Txn5wMeWxspMv9XQHyGUteXt6dMOs+0hxp7zDMs5HY2Wq+5
         Ay8MxKcw6zi1pbQAvH94FEBocbwGOn/jhxvWyAI74Vq8QJqMURbMYllFyteLQ37T8uaw
         zyAJ9CPCMBSx01Eh+ktFXJgHrfzd3uL5W28H8qpD1pHzFD4APOndYoEPIJmbZ/jXElsp
         DaQTaDPKpqIz4y7D5scUH7awpvWs7i24ljm6DGEM090L1lM0tQMhI8+Fk8nbfljWgMYY
         JG7DfVqod2aWVXrtakiDOjrKhBhy+hRXpB2Z4PWh8cpTNB90ZA7E8eCThFOg2RmLbdmA
         RdKA==
X-Gm-Message-State: AOAM533mtLv0ROKZ4d93HhpaVpfWIRu0tfTY+0mx1GPPxp0drxT8QnqF
	+JsncvR4G2YqtoDIBIRC8Hmd8PKDmdskL+REH+Y=
X-Google-Smtp-Source: ABdhPJwK4hOQEMWUhCLf9JggbPk1LIohNCRAO5JREquYoIdL8HqFduE1AnS+e1cthHva4a8tc03OmyyvC3RxwO2VmVw=
X-Received: by 2002:a05:6122:92a:: with SMTP id j42mr1873389vka.22.1627176779647;
 Sat, 24 Jul 2021 18:32:59 -0700 (PDT)
MIME-Version: 1.0
References: <001401d77de6$34ff5de0$9efe19a0$@comcast.net>
In-Reply-To: <001401d77de6$34ff5de0$9efe19a0$@comcast.net>
Reply-To: Rob.Townley@gmail.com
From: Rob Townley <rob.townley@gmail.com>
Date: Sat, 24 Jul 2021 20:32:48 -0500
Message-ID: <CA+VdTb-_L-7Zz31DoXiQjTycV8w7rjg0Df76MboDCqKC77ZGzg@mail.gmail.com>
Subject: Re: Nested Virtualization of Hyper-V on Xen Not Working
To: Xentrigued <xentrigued@comcast.net>
Cc: xen-devel@lists.xenproject.org
Content-Type: multipart/alternative; boundary="000000000000f0135105c7e89dc4"

--000000000000f0135105c7e89dc4
Content-Type: text/plain; charset="UTF-8"

I encourage you to run the Windows Hardware Lab Kit 11/02/2018
<https://docs.microsoft.com/en-us/windows-hardware/test/hlk/> or HLK or
maybe try the VHLK.  The VHLK
<https://docs.microsoft.com/en-us/windows-hardware/test/hlk/getstarted/getstarted-vhlk>is
a free VHD file download of win2016 that has all the tests necessary
built-in.  So you could manually download the test kit on your existing
Windows VM or attempt the VHD.   "*Default login credentials are
HLKAdminUser with password Testpassword,1"   *

Please post the results.   Citrix 8.1 and 8.2 are listed as validated
<https://www.windowsservercatalog.com/results.aspx?&bCatID=1521&cpID=2185&avc=0&ava=0&avt=0&avq=0&OR=1&PGS=25>
and so would be very interesting to see any differences in test results
running XCP-ng 8.2 and Citrix 8.2.

Why run the hardware lab kit in a virtualized environment and directly on
the underlying hardware?  Because those tests are used to validate for the
SVVP <https://www.windowsservercatalog.com/svvp.aspx?svvppage=svvp.htm>.
Microsoft has something similar to their Hardware Compatibility List, aka
HCL.   SVVP
<https://www.windowsservercatalog.com/svvp.aspx?svvppage=svvp.htm> is
Microsoft's Server Virtualization Validation Program.   SVVP validates that
Windows Operating Systems and APPS run on top of other hypervisors and once
validated will receive technical support.  SVVP has been around for over a
decade but has of course changed over the years.   Recently,  it has been
making news because Win11 / Win2022 requires a TPM 2.0 chip, but XCP-NG XEN
does not yet support that <https://github.com/xcp-ng/xcp/issues/471>.    If
the hypervisor is SVVP certified, then running MS Hyper-V Windows on top of
any validated hypervisor would be much more likely to work and possibly
supported directly by MS and tsanet.org.  Canonical and RedHat are in
tsanet, but would like to see the Linux Foundation or Vates itself.
<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualization/non-microsoft-hardware-virtualization-software>

Microsoft server software and supported virtualization
environments 09/08/2020 6 minutes to read
<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualization/microsoft-server-software-support-policy>
Support partners for non-Microsoft hardware virtualization software
<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualization/non-microsoft-hardware-virtualization-software>
WindowsServerCatalog.com and then click on SVVP in the upper right and then
Products
<https://www.windowsservercatalog.com/results.aspx?&bCatID=1521&cpID=0&avc=0&ava=0&avq=0&OR=1&PGS=25>

<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualization/non-microsoft-hardware-virtualization-software>
Design Session - Alternative vTPM 2.0 Backend to Comply with Upcoming SVVP
Changes <https://www.youtube.com/watch?v=abkRRcoYWCQ>
https://www.youtube.com/watch?v=abkRRcoYWCQ

Enabling UEFI Secure Boot on Xen - Robert Eshleman, Vates SAS
<https://www.youtube.com/watch?v=A_IhKjK7EgA>
https://www.youtube.com/watch?v=A_IhKjK7EgA&t=388s
Support vTPM for guests #471 https://github.com/xcp-ng/xcp/issues/471
<https://github.com/xcp-ng/xcp/issues/471>
https://github.com/xcp-ng/xcp/issues/471
https://docs.microsoft.com/en-us/windows-hardware/test/hlk/

On Tue, Jul 20, 2021 at 11:12 PM Xentrigued <xentrigued@comcast.net> wrote:

> RATIONALE: Features in recent versions of Windows now REQUIRE Hyper-V
> support to work.  In particular, Windows Containers, Sandbox, Docker
> Desktop
> and the Windows Subsystem for Linux version 2 (WSL2).  Running Windows in a
> VM as a development and test platform is currently a common requirement for
> various user segments and will likely become necessary for production in
> the
> future.  Nested virtualization of Hyper-V currently works on VMware ESXi,
> Microsoft Hyper-V and KVM-based hypervisors.  This puts Xen and its
> derivatives at a disadvantage when choosing a hypervisor.
>
> WHAT IS NOT WORKING?  Provided the requirements set forth in:
> https://wiki.xenproject.org/wiki/Nested_Virtualization_in_Xen have been
> met,
> an hvm guest running Windows 10 PRO Version 21H1 x64 shows that all four
> requirements for running Hyper-V are available using the msinfo32.exe or
> systeminfo.exe commands.  More granular knowledge of the CPU capabilities
> exposed to the guest can be observed using the Sysinternals Coreinfo64.exe
> command.  CPUID flags present appear to mirror those on other working
> nested
> hypervisor configurations.
>
> Enabling Windows Features for Hyper-V, Virtual Machine Platform, etc. all
> appear to work without error.  However, after the finishing reboot, Hyper-V
> is simply not active.  This--despite the fact that vmcompute.exe (Hyper-V
> host compute service) is running and there are no errors in the logs.  In
> addition, all four Hyper-V prerequisites continue to show as available.
>
> By contrast, after the finishing reboot of an analogous Windows VM running
> on ESXi, the four prerequisites are reversed:  hypervisor is now active;
> vmx, ept and urg (unrestricted guest) are all off as viewed with the
> Coreinfo64.exe -v command.  Furthermore, all functions requiring Hyper-V
> are
> now active and working as expected.
>
> This deficiency has been observed in two test setups running Xen 4.15 from
> source and XCP-ng 8.2, both running on Intel with all of the latest,
> generally available patches.  We presume that the same behavior is present
> on Citrix Hypervisor 8.2 as well.
>
> SUMMATION:
> Clearly, much effort has already been expended to support the Viridian
> enlightenments that optimize running Windows on Xen.  It also looks like a
> significant amount of effort has been put forth to advance nested
> virtualization in general.
>
> Therefore, if it would be helpful, I am willing to perform testing and
> provide feedback and logs as appropriate in order to help get this working.
>
> While my day job is managing a heterogeneous collection of systems running
> on various hypervisors, I have learned the rudiments of integrating patches
> and rebuilding Xen from source so could no doubt be useful in assisting you
> with this worthwhile endeavor.
>
>
>
>

--000000000000f0135105c7e89dc4
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:times ne=
w roman,serif">I encourage you to run the=C2=A0<a href=3D"https://docs.micr=
osoft.com/en-us/windows-hardware/test/hlk/">Windows Hardware Lab Kit 11/02/=
2018</a> or HLK or maybe try the VHLK.=C2=A0 The <a href=3D"https://docs.mi=
crosoft.com/en-us/windows-hardware/test/hlk/getstarted/getstarted-vhlk">VHL=
K </a>is a free VHD file download of win2016 that has all the tests necessa=
ry built-in.=C2=A0 So you could manually download the test kit on your exis=
ting Windows VM or attempt the VHD.=C2=A0=C2=A0
&quot;<i>Default login credentials are HLKAdminUser with password Testpassw=
ord,1&quot;=C2=A0=C2=A0=C2=A0</i> </div><div class=3D"gmail_default" style=
=3D"font-family:times new roman,serif"><br></div><div class=3D"gmail_defaul=
t" style=3D"font-family:times new roman,serif">Please post the results.=C2=
=A0=C2=A0 <a href=3D"https://www.windowsservercatalog.com/results.aspx?&amp=
;bCatID=3D1521&amp;cpID=3D2185&amp;avc=3D0&amp;ava=3D0&amp;avt=3D0&amp;avq=
=3D0&amp;OR=3D1&amp;PGS=3D25">Citrix 8.1 and 8.2 are listed as validated</a=
> and so would be very interesting to see any differences in test results r=
unning XCP-ng 8.2 and Citrix 8.2. =C2=A0<br></div><div class=3D"gmail_defau=
lt" style=3D"font-family:times new roman,serif"><br></div><div class=3D"gma=
il_default" style=3D"font-family:times new roman,serif">Why run the hardwar=
e lab kit in a virtualized environment and directly on the underlying hardw=
are?=C2=A0 Because those tests are used to validate for the <a href=3D"http=
s://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.htm">SVVP</a>.=
=C2=A0=C2=A0 Microsoft has something similar to their Hardware Compatibilit=
y List, aka HCL. =C2=A0 <a href=3D"https://www.windowsservercatalog.com/svv=
p.aspx?svvppage=3Dsvvp.htm">SVVP</a> is Microsoft&#39;s Server Virtualizati=
on Validation Program. =C2=A0 SVVP validates that Windows Operating Systems=
 and APPS run on top of other hypervisors and once validated will receive t=
echnical support.=C2=A0 SVVP has been around for over a decade but has of c=
ourse changed over the years. =C2=A0 Recently,=C2=A0 it has been making new=
s because <a href=3D"https://github.com/xcp-ng/xcp/issues/471">Win11 / Win2=
022 requires a TPM 2.0 chip, but XCP-NG XEN does not yet support that</a>. =
=C2=A0=C2=A0 If the hypervisor is SVVP certified, then running MS Hyper-V W=
indows on top of any validated hypervisor <font size=3D"2">would be much mo=
re likely to work and possibly supported directly by MS and <a href=3D"http=
://tsanet.org">tsanet.org</a></font><font size=3D"2"><span style=3D"font-fa=
mily:arial,sans-serif">.=C2=A0 Canonical and RedHat are in tsanet, but woul=
d like to see the Linux Foundation or Vates itself.=C2=A0 <br></span></font=
><a href=3D"https://docs.microsoft.com/en-us/troubleshoot/windows-server/vi=
rtualization/non-microsoft-hardware-virtualization-software"><font size=3D"=
2"><span style=3D"font-family:arial,sans-serif"></span></font></a></div><di=
v class=3D"gmail_default"><br></div><div class=3D"gmail_default"><a href=3D=
"https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizatio=
n/microsoft-server-software-support-policy"><font size=3D"2"><span style=3D=
"font-family:arial,sans-serif">Microsoft server software and supported virt=
ualization environments=C2=A009/08/2020=C2=A06 minutes to read</span></font=
></a></div><div class=3D"gmail_default"><h1 id=3D"gmail-support-partners-fo=
r-non-microsoft-hardware-virtualization-software"><a href=3D"https://docs.m=
icrosoft.com/en-us/troubleshoot/windows-server/virtualization/non-microsoft=
-hardware-virtualization-software"><font size=3D"2"><span style=3D"font-fam=
ily:arial,sans-serif"><span style=3D"font-weight:normal">Support partners f=
or non-Microsoft hardware virtualization software</span></span></font></a><=
/h1>

</div><div class=3D"gmail_default"><a href=3D"https://www.windowsservercata=
log.com/results.aspx?&amp;bCatID=3D1521&amp;cpID=3D0&amp;avc=3D0&amp;ava=3D=
0&amp;avq=3D0&amp;OR=3D1&amp;PGS=3D25">WindowsServerCatalog.com and then cl=
ick on SVVP in the upper right and then Products</a></div><div class=3D"gma=
il_default"><a href=3D"https://docs.microsoft.com/en-us/troubleshoot/window=
s-server/virtualization/non-microsoft-hardware-virtualization-software"><fo=
nt size=3D"2"><span style=3D"font-family:arial,sans-serif"><br></span></fon=
t></a></div><div class=3D"gmail_default" style=3D"font-family:times new rom=
an,serif"><a href=3D"https://www.youtube.com/watch?v=3DabkRRcoYWCQ">Design =
Session - Alternative vTPM 2.0 Backend to Comply with Upcoming SVVP Changes=
</a></div><div class=3D"gmail_default" style=3D"font-family:times new roman=
,serif"><a href=3D"https://www.youtube.com/watch?v=3DabkRRcoYWCQ">https://w=
ww.youtube.com/watch?v=3DabkRRcoYWCQ</a><br></div><div class=3D"gmail_defau=
lt" style=3D"font-family:times new roman,serif"><br></div><div class=3D"gma=
il_default" style=3D"font-family:times new roman,serif"><a href=3D"https://=
www.youtube.com/watch?v=3DA_IhKjK7EgA">Enabling UEFI Secure Boot on Xen - R=
obert Eshleman, Vates SAS</a></div><div class=3D"gmail_default" style=3D"fo=
nt-family:times new roman,serif"><a href=3D"https://www.youtube.com/watch?v=
=3DA_IhKjK7EgA&amp;t=3D388s">https://www.youtube.com/watch?v=3DA_IhKjK7EgA&=
amp;t=3D388s</a></div><div class=3D"gmail_default" style=3D"font-family:tim=
es new roman,serif">
<h1 class=3D"gmail-gh-header-title gmail-mb-2 gmail-lh-condensed gmail-f1 g=
mail-mr-0 gmail-flex-auto gmail-break-word"><font size=3D"2"><span style=3D=
"font-family:arial,sans-serif"><span style=3D"font-weight:normal"><a href=
=3D"https://github.com/xcp-ng/xcp/issues/471">Support vTPM for guests      =
      #471       https://github.com/xcp-ng/xcp/issues/471</a></span></span>=
<span style=3D"font-family:arial,sans-serif"><span style=3D"font-weight:nor=
mal"></span></span></font></h1><a href=3D"https://github.com/xcp-ng/xcp/iss=
ues/471">https://github.com/xcp-ng/xcp/issues/471</a><div><a href=3D"https:=
//docs.microsoft.com/en-us/windows-hardware/test/hlk/">https://docs.microso=
ft.com/en-us/windows-hardware/test/hlk/</a></div></div></div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, Jul 20, 2021=
 at 11:12 PM Xentrigued &lt;<a href=3D"mailto:xentrigued@comcast.net">xentr=
igued@comcast.net</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex">RATIONALE: Features in recent versions of Windows now REQU=
IRE Hyper-V<br>
support to work.=C2=A0 In particular, Windows Containers, Sandbox, Docker D=
esktop<br>
and the Windows Subsystem for Linux version 2 (WSL2).=C2=A0 Running Windows=
 in a<br>
VM as a development and test platform is currently a common requirement for=
<br>
various user segments and will likely become necessary for production in th=
e<br>
future.=C2=A0 Nested virtualization of Hyper-V currently works on VMware ES=
Xi,<br>
Microsoft Hyper-V and KVM-based hypervisors.=C2=A0 This puts Xen and its<br=
>
derivatives at a disadvantage when choosing a hypervisor.<br>
<br>
WHAT IS NOT WORKING?=C2=A0 Provided the requirements set forth in:<br>
<a href=3D"https://wiki.xenproject.org/wiki/Nested_Virtualization_in_Xen" r=
el=3D"noreferrer" target=3D"_blank">https://wiki.xenproject.org/wiki/Nested=
_Virtualization_in_Xen</a> have been met,<br>
an hvm guest running Windows 10 PRO Version 21H1 x64 shows that all four<br=
>
requirements for running Hyper-V are available using the msinfo32.exe or<br=
>
systeminfo.exe commands.=C2=A0 More granular knowledge of the CPU capabilit=
ies<br>
exposed to the guest can be observed using the Sysinternals Coreinfo64.exe<=
br>
command.=C2=A0 CPUID flags present appear to mirror those on other working =
nested<br>
hypervisor configurations.<br>
<br>
Enabling Windows Features for Hyper-V, Virtual Machine Platform, etc. all<b=
r>
appear to work without error.=C2=A0 However, after the finishing reboot, Hy=
per-V<br>
is simply not active.=C2=A0 This--despite the fact that vmcompute.exe (Hype=
r-V<br>
host compute service) is running and there are no errors in the logs.=C2=A0=
 In<br>
addition, all four Hyper-V prerequisites continue to show as available.<br>
<br>
By contrast, after the finishing reboot of an analogous Windows VM running<=
br>
on ESXi, the four prerequisites are reversed:=C2=A0 hypervisor is now activ=
e;<br>
vmx, ept and urg (unrestricted guest) are all off as viewed with the<br>
Coreinfo64.exe -v command.=C2=A0 Furthermore, all functions requiring Hyper=
-V are<br>
now active and working as expected.<br>
<br>
This deficiency has been observed in two test setups running Xen 4.15 from<=
br>
source and XCP-ng 8.2, both running on Intel with all of the latest,<br>
generally available patches.=C2=A0 We presume that the same behavior is pre=
sent<br>
on Citrix Hypervisor 8.2 as well.<br>
<br>
SUMMATION:<br>
Clearly, much effort has already been expended to support the Viridian<br>
enlightenments that optimize running Windows on Xen.=C2=A0 It also looks li=
ke a<br>
significant amount of effort has been put forth to advance nested<br>
virtualization in general.<br>
<br>
Therefore, if it would be helpful, I am willing to perform testing and<br>
provide feedback and logs as appropriate in order to help get this working.=
<br>
<br>
While my day job is managing a heterogeneous collection of systems running<=
br>
on various hypervisors, I have learned the rudiments of integrating patches=
<br>
and rebuilding Xen from source so could no doubt be useful in assisting you=
<br>
with this worthwhile endeavor.<br>
<br>
<br>
<br>
</blockquote></div>

--000000000000f0135105c7e89dc4--


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 02:47:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 02:47:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160544.295167 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7UAc-0001Vl-RD; Sun, 25 Jul 2021 02:47:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160544.295167; Sun, 25 Jul 2021 02:47:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7UAc-0001Ve-Nn; Sun, 25 Jul 2021 02:47:14 +0000
Received: by outflank-mailman (input) for mailman id 160544;
 Sun, 25 Jul 2021 02:47:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=qP3f=MR=comcast.net=xentrigued@srs-us1.protection.inumbo.net>)
 id 1m7UAa-0001VY-Ld
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 02:47:12 +0000
Received: from resqmta-po-04v.sys.comcast.net (unknown
 [2001:558:fe16:19:96:114:154:163])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1f3cd1f1-5528-463a-a757-9f820b0f5d31;
 Sun, 25 Jul 2021 02:47:10 +0000 (UTC)
Received: from resomta-po-16v.sys.comcast.net ([96.114.154.240])
 by resqmta-po-04v.sys.comcast.net with ESMTP
 id 7U6Dma5m7bVMM7UAXm6m2b; Sun, 25 Jul 2021 02:47:09 +0000
Received: from ASUSN550JK ([IPv6:2601:80:4203:a8a1:8422:6d3f:11dc:fd93])
 by resomta-po-16v.sys.comcast.net with ESMTPSA
 id 7UAVm9pyeQlkw7UAWmtAcS; Sun, 25 Jul 2021 02:47:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1f3cd1f1-5528-463a-a757-9f820b0f5d31
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcast.net;
	s=20190202a; t=1627181229;
	bh=vIEhIMU8BzmITAhbbJRTKgqnf0JMgEzwjNAy96B/4FQ=;
	h=Received:Received:From:To:Subject:Date:Message-ID:MIME-Version:
	 Content-Type;
	b=kTsPhlsOAjAXhtPd9pHEWqSu/a/LQ9Le3OsfdwCLQjQLW/kSS4SIlkBsVCqRsdv5J
	 3yOvB6p/SGMBuCOotyuHLk06VeRj2w8qkT5piNWkzSEf0CrAja/qkeh8IfCWDHFDsD
	 G2u9OgIqLYOGJ7TO2GCX5xN47Sou3FF6mkKGr6F5/IbCSJSgXo81GKijLGYh4VS+++
	 spCm4/xFLX8MTaLQrx2cKYDwfZP802FGjfkEo+p7t4yI3dDodh7pAmTjZHL2t3YrB8
	 sOEcgbOmmcO4c9bEBIrBpI0zouNYn1U6IlDNkJFTQVYNanzW/hqraT1cxjkhdseJZ2
	 kZMyypUTPJJVQ==
X-Xfinity-VMeta: sc=0.00;st=legit
From: "Xentrigued" <xentrigued@comcast.net>
To: <Rob.Townley@gmail.com>
Cc: <xen-devel@lists.xenproject.org>
References: <001401d77de6$34ff5de0$9efe19a0$@comcast.net> <CA+VdTb-_L-7Zz31DoXiQjTycV8w7rjg0Df76MboDCqKC77ZGzg@mail.gmail.com>
In-Reply-To: <CA+VdTb-_L-7Zz31DoXiQjTycV8w7rjg0Df76MboDCqKC77ZGzg@mail.gmail.com>
Subject: RE: Nested Virtualization of Hyper-V on Xen Not Working
Date: Sat, 24 Jul 2021 22:47:06 -0400
Message-ID: <007a01d780ff$5caff450$160fdcf0$@comcast.net>
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_007B_01D780DD.D5A33650"
X-Mailer: Microsoft Outlook 16.0
Thread-Index: AQL3Fd3+iiQxDo+LxWnbDNTlihC0wQH+TtHMqQPSvJA=
Content-Language: en-us

This is a multipart message in MIME format.

------=_NextPart_000_007B_01D780DD.D5A33650
Content-Type: text/plain;
	charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

First and foremost, many thanks for your thoughtful and thorough =
response and also for providing a multitude of genuinely helpful =
information!

=20

Secondly:  Wow, that=E2=80=99s quite a homework assignment!!

=20

I will absolutely begin to work my way through the resources you cited =
and will report back once some of those tests have been completed.  =
You=E2=80=99ve given me an excellent starting point for further inquiry.

=20

To be very honest, I wasn=E2=80=99t sure where to turn next in the event =
that no member of this august body had anything to say about this.  =
(It=E2=80=99s kind of intimidating and not unlike going before the =
Wizard of Oz.)

=20

So again, thank you so much for all of the good information and also for =
your kindness in reaching out.

=20

From: Rob Townley <rob.townley@gmail.com>=20
Sent: Saturday, July 24, 2021 9:33 PM
To: Xentrigued <xentrigued@comcast.net>
Cc: xen-devel@lists.xenproject.org
Subject: Re: Nested Virtualization of Hyper-V on Xen Not Working

=20

I encourage you to run the Windows Hardware Lab Kit 11/02/2018 =
<https://docs.microsoft.com/en-us/windows-hardware/test/hlk/>  or HLK or =
maybe try the VHLK.  The VHLK  =
<https://docs.microsoft.com/en-us/windows-hardware/test/hlk/getstarted/ge=
tstarted-vhlk> is a free VHD file download of win2016 that has all the =
tests necessary built-in.  So you could manually download the test kit =
on your existing Windows VM or attempt the VHD.   "Default login =
credentials are HLKAdminUser with password Testpassword,1"   =20

=20

Please post the results.   Citrix 8.1 and 8.2 are listed as validated =
<https://www.windowsservercatalog.com/results.aspx?&bCatID=3D1521&cpID=3D=
2185&avc=3D0&ava=3D0&avt=3D0&avq=3D0&OR=3D1&PGS=3D25>  and so would be =
very interesting to see any differences in test results running XCP-ng =
8.2 and Citrix 8.2. =20

=20

Why run the hardware lab kit in a virtualized environment and directly =
on the underlying hardware?  Because those tests are used to validate =
for the SVVP =
<https://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.htm> .   =
Microsoft has something similar to their Hardware Compatibility List, =
aka HCL.   SVVP =
<https://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.htm>  is =
Microsoft's Server Virtualization Validation Program.   SVVP validates =
that Windows Operating Systems and APPS run on top of other hypervisors =
and once validated will receive technical support.  SVVP has been around =
for over a decade but has of course changed over the years.   Recently,  =
it has been making news because Win11 / Win2022 requires a TPM 2.0 chip, =
but XCP-NG XEN does not yet support that =
<https://github.com/xcp-ng/xcp/issues/471> .    If the hypervisor is =
SVVP certified, then running MS Hyper-V Windows on top of any validated =
hypervisor would be much more likely to work and possibly supported =
directly by MS and tsanet.org <http://tsanet.org> .  Canonical and =
RedHat are in tsanet, but would like to see the Linux Foundation or =
Vates itself. =20

=20

 =
<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizat=
ion/microsoft-server-software-support-policy> Microsoft server software =
and supported virtualization environments 09/08/2020 6 minutes to read


 =
<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizat=
ion/non-microsoft-hardware-virtualization-software> Support partners for =
non-Microsoft hardware virtualization software


WindowsServerCatalog.com and then click on SVVP in the upper right and =
then Products =
<https://www.windowsservercatalog.com/results.aspx?&bCatID=3D1521&cpID=3D=
0&avc=3D0&ava=3D0&avq=3D0&OR=3D1&PGS=3D25>=20

 =
<https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizat=
ion/non-microsoft-hardware-virtualization-software>=20


Design Session - Alternative vTPM 2.0 Backend to Comply with Upcoming =
SVVP Changes <https://www.youtube.com/watch?v=3DabkRRcoYWCQ>=20

https://www.youtube.com/watch?v=3DabkRRcoYWCQ

=20

Enabling UEFI Secure Boot on Xen - Robert Eshleman, Vates SAS =
<https://www.youtube.com/watch?v=3DA_IhKjK7EgA>=20

https://www.youtube.com/watch?v=3DA_IhKjK7EgA =
<https://www.youtube.com/watch?v=3DA_IhKjK7EgA&t=3D388s> &t=3D388s


Support vTPM for guests #471 https://github.com/xcp-ng/xcp/issues/471 =
<https://github.com/xcp-ng/xcp/issues/471>=20


https://github.com/xcp-ng/xcp/issues/471

https://docs.microsoft.com/en-us/windows-hardware/test/hlk/

=20

On Tue, Jul 20, 2021 at 11:12 PM Xentrigued <xentrigued@comcast.net =
<mailto:xentrigued@comcast.net> > wrote:

RATIONALE: Features in recent versions of Windows now REQUIRE Hyper-V
support to work.  In particular, Windows Containers, Sandbox, Docker =
Desktop
and the Windows Subsystem for Linux version 2 (WSL2).  Running Windows =
in a
VM as a development and test platform is currently a common requirement =
for
various user segments and will likely become necessary for production in =
the
future.  Nested virtualization of Hyper-V currently works on VMware =
ESXi,
Microsoft Hyper-V and KVM-based hypervisors.  This puts Xen and its
derivatives at a disadvantage when choosing a hypervisor.

WHAT IS NOT WORKING?  Provided the requirements set forth in:
https://wiki.xenproject.org/wiki/Nested_Virtualization_in_Xen have been =
met,
an hvm guest running Windows 10 PRO Version 21H1 x64 shows that all four
requirements for running Hyper-V are available using the msinfo32.exe or
systeminfo.exe commands.  More granular knowledge of the CPU =
capabilities
exposed to the guest can be observed using the Sysinternals =
Coreinfo64.exe
command.  CPUID flags present appear to mirror those on other working =
nested
hypervisor configurations.

Enabling Windows Features for Hyper-V, Virtual Machine Platform, etc. =
all
appear to work without error.  However, after the finishing reboot, =
Hyper-V
is simply not active.  This--despite the fact that vmcompute.exe =
(Hyper-V
host compute service) is running and there are no errors in the logs.  =
In
addition, all four Hyper-V prerequisites continue to show as available.

By contrast, after the finishing reboot of an analogous Windows VM =
running
on ESXi, the four prerequisites are reversed:  hypervisor is now active;
vmx, ept and urg (unrestricted guest) are all off as viewed with the
Coreinfo64.exe -v command.  Furthermore, all functions requiring Hyper-V =
are
now active and working as expected.

This deficiency has been observed in two test setups running Xen 4.15 =
from
source and XCP-ng 8.2, both running on Intel with all of the latest,
generally available patches.  We presume that the same behavior is =
present
on Citrix Hypervisor 8.2 as well.

SUMMATION:
Clearly, much effort has already been expended to support the Viridian
enlightenments that optimize running Windows on Xen.  It also looks like =
a
significant amount of effort has been put forth to advance nested
virtualization in general.

Therefore, if it would be helpful, I am willing to perform testing and
provide feedback and logs as appropriate in order to help get this =
working.

While my day job is managing a heterogeneous collection of systems =
running
on various hypervisors, I have learned the rudiments of integrating =
patches
and rebuilding Xen from source so could no doubt be useful in assisting =
you
with this worthwhile endeavor.





------=_NextPart_000_007B_01D780DD.D5A33650
Content-Type: text/html;
	charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta =
http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8"><meta =
name=3DGenerator content=3D"Microsoft Word 15 (filtered =
medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
h1
	{mso-style-priority:9;
	mso-style-link:"Heading 1 Char";
	mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	font-size:24.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
span.Heading1Char
	{mso-style-name:"Heading 1 Char";
	mso-style-priority:9;
	mso-style-link:"Heading 1";
	font-family:"Calibri Light",sans-serif;
	color:#2F5496;}
span.EmailStyle19
	{mso-style-type:personal-reply;
	font-family:"Courier New";
	color:windowtext;
	font-weight:normal;
	font-style:normal;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri",sans-serif;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue =
vlink=3Dpurple style=3D'word-wrap:break-word'><div =
class=3DWordSection1><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier New"'>First and foremost, =
many thanks for your thoughtful and thorough response and also for =
providing a multitude of genuinely helpful =
information!<o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier New"'>Secondly:=C2=A0 =
Wow, that=E2=80=99s quite a homework =
assignment!!<o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier New"'>I will absolutely =
begin to work my way through the resources you cited and will report =
back once some of those tests have been completed.=C2=A0 You=E2=80=99ve =
given me an excellent starting point for further =
inquiry.<o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier New"'>To be very honest, =
I wasn=E2=80=99t sure where to turn next in the event that no member of =
this august body had anything to say about this.=C2=A0 (It=E2=80=99s =
kind of intimidating and not unlike going before the Wizard of =
Oz.)<o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier New"'>So again, thank you =
so much for all of the good information and also for your kindness in =
reaching out.<o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:12.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p><div =
style=3D'border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in =
0in 0in'><p class=3DMsoNormal><b>From:</b> Rob Townley =
&lt;rob.townley@gmail.com&gt; <br><b>Sent:</b> Saturday, July 24, 2021 =
9:33 PM<br><b>To:</b> Xentrigued =
&lt;xentrigued@comcast.net&gt;<br><b>Cc:</b> =
xen-devel@lists.xenproject.org<br><b>Subject:</b> Re: Nested =
Virtualization of Hyper-V on Xen Not Working<o:p></o:p></p></div><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><div><div><p =
class=3DMsoNormal><span style=3D'font-family:"Times New Roman",serif'>I =
encourage you to run the&nbsp;<a =
href=3D"https://docs.microsoft.com/en-us/windows-hardware/test/hlk/">Wind=
ows Hardware Lab Kit 11/02/2018</a> or HLK or maybe try the VHLK.&nbsp; =
The <a =
href=3D"https://docs.microsoft.com/en-us/windows-hardware/test/hlk/getsta=
rted/getstarted-vhlk">VHLK </a>is a free VHD file download of win2016 =
that has all the tests necessary built-in.&nbsp; So you could manually =
download the test kit on your existing Windows VM or attempt the =
VHD.&nbsp;&nbsp; &quot;<i>Default login credentials are HLKAdminUser =
with password Testpassword,1&quot;&nbsp;&nbsp;&nbsp;</i> =
<o:p></o:p></span></p></div><div><p class=3DMsoNormal><span =
style=3D'font-family:"Times New =
Roman",serif'><o:p>&nbsp;</o:p></span></p></div><div><p =
class=3DMsoNormal><span style=3D'font-family:"Times New =
Roman",serif'>Please post the results.&nbsp;&nbsp; <a =
href=3D"https://www.windowsservercatalog.com/results.aspx?&amp;bCatID=3D1=
521&amp;cpID=3D2185&amp;avc=3D0&amp;ava=3D0&amp;avt=3D0&amp;avq=3D0&amp;O=
R=3D1&amp;PGS=3D25">Citrix 8.1 and 8.2 are listed as validated</a> and =
so would be very interesting to see any differences in test results =
running XCP-ng 8.2 and Citrix 8.2. =
&nbsp;<o:p></o:p></span></p></div><div><p class=3DMsoNormal><span =
style=3D'font-family:"Times New =
Roman",serif'><o:p>&nbsp;</o:p></span></p></div><div><p =
class=3DMsoNormal><span style=3D'font-family:"Times New =
Roman",serif'>Why run the hardware lab kit in a virtualized environment =
and directly on the underlying hardware?&nbsp; Because those tests are =
used to validate for the <a =
href=3D"https://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.ht=
m">SVVP</a>.&nbsp;&nbsp; Microsoft has something similar to their =
Hardware Compatibility List, aka HCL. &nbsp; <a =
href=3D"https://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.ht=
m">SVVP</a> is Microsoft's Server Virtualization Validation Program. =
&nbsp; SVVP validates that Windows Operating Systems and APPS run on top =
of other hypervisors and once validated will receive technical =
support.&nbsp; SVVP has been around for over a decade but has of course =
changed over the years. &nbsp; Recently,&nbsp; it has been making news =
because <a href=3D"https://github.com/xcp-ng/xcp/issues/471">Win11 / =
Win2022 requires a TPM 2.0 chip, but XCP-NG XEN does not yet support =
that</a>. &nbsp;&nbsp; If the hypervisor is SVVP certified, then running =
MS Hyper-V Windows on top of any validated hypervisor </span><span =
style=3D'font-size:10.0pt;font-family:"Times New Roman",serif'>would be =
much more likely to work and possibly supported directly by MS and <a =
href=3D"http://tsanet.org">tsanet.org</a></span><span =
style=3D'font-size:10.0pt;font-family:"Arial",sans-serif'>.&nbsp; =
Canonical and RedHat are in tsanet, but would like to see the Linux =
Foundation or Vates itself.&nbsp; </span><span =
style=3D'font-family:"Times New =
Roman",serif'><o:p></o:p></span></p></div><div><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p></div><div><p =
class=3DMsoNormal><a =
href=3D"https://docs.microsoft.com/en-us/troubleshoot/windows-server/virt=
ualization/microsoft-server-software-support-policy"><span =
style=3D'font-size:10.0pt;font-family:"Arial",sans-serif'>Microsoft =
server software and supported virtualization =
environments&nbsp;09/08/2020&nbsp;6 minutes to =
read</span></a><o:p></o:p></p></div><div><h1 =
id=3Dgmail-support-partners-for-non-microsoft-hardware-virtualization-sof=
tware><a =
href=3D"https://docs.microsoft.com/en-us/troubleshoot/windows-server/virt=
ualization/non-microsoft-hardware-virtualization-software"><span =
style=3D'font-size:10.0pt;font-family:"Arial",sans-serif;font-weight:norm=
al'>Support partners for non-Microsoft hardware virtualization =
software</span></a><o:p></o:p></h1></div><div><p class=3DMsoNormal><a =
href=3D"https://www.windowsservercatalog.com/results.aspx?&amp;bCatID=3D1=
521&amp;cpID=3D0&amp;avc=3D0&amp;ava=3D0&amp;avq=3D0&amp;OR=3D1&amp;PGS=3D=
25">WindowsServerCatalog.com and then click on SVVP in the upper right =
and then Products</a><o:p></o:p></p></div><div><p class=3DMsoNormal><a =
href=3D"https://docs.microsoft.com/en-us/troubleshoot/windows-server/virt=
ualization/non-microsoft-hardware-virtualization-software"><span =
style=3D'font-size:10.0pt;font-family:"Arial",sans-serif'><br></span></a>=
<o:p></o:p></p></div><div><p class=3DMsoNormal><span =
style=3D'font-family:"Times New Roman",serif'><a =
href=3D"https://www.youtube.com/watch?v=3DabkRRcoYWCQ">Design Session - =
Alternative vTPM 2.0 Backend to Comply with Upcoming SVVP =
Changes</a><o:p></o:p></span></p></div><div><p class=3DMsoNormal><span =
style=3D'font-family:"Times New Roman",serif'><a =
href=3D"https://www.youtube.com/watch?v=3DabkRRcoYWCQ">https://www.youtub=
e.com/watch?v=3DabkRRcoYWCQ</a><o:p></o:p></span></p></div><div><p =
class=3DMsoNormal><span style=3D'font-family:"Times New =
Roman",serif'><o:p>&nbsp;</o:p></span></p></div><div><p =
class=3DMsoNormal><span style=3D'font-family:"Times New Roman",serif'><a =
href=3D"https://www.youtube.com/watch?v=3DA_IhKjK7EgA">Enabling UEFI =
Secure Boot on Xen - Robert Eshleman, Vates =
SAS</a><o:p></o:p></span></p></div><div><p class=3DMsoNormal><span =
style=3D'font-family:"Times New Roman",serif'><a =
href=3D"https://www.youtube.com/watch?v=3DA_IhKjK7EgA&amp;t=3D388s">https=
://www.youtube.com/watch?v=3DA_IhKjK7EgA&amp;t=3D388s</a><o:p></o:p></spa=
n></p></div><div><h1><span =
style=3D'font-size:10.0pt;font-family:"Arial",sans-serif;font-weight:norm=
al'><a href=3D"https://github.com/xcp-ng/xcp/issues/471">Support vTPM =
for guests #471 https://github.com/xcp-ng/xcp/issues/471</a></span><span =
style=3D'font-family:"Times New Roman",serif'><o:p></o:p></span></h1><p =
class=3DMsoNormal><span style=3D'font-family:"Times New Roman",serif'><a =
href=3D"https://github.com/xcp-ng/xcp/issues/471">https://github.com/xcp-=
ng/xcp/issues/471</a><o:p></o:p></span></p><div><p =
class=3DMsoNormal><span style=3D'font-family:"Times New Roman",serif'><a =
href=3D"https://docs.microsoft.com/en-us/windows-hardware/test/hlk/">http=
s://docs.microsoft.com/en-us/windows-hardware/test/hlk/</a><o:p></o:p></s=
pan></p></div></div></div><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><div><div><p class=3DMsoNormal>On =
Tue, Jul 20, 2021 at 11:12 PM Xentrigued &lt;<a =
href=3D"mailto:xentrigued@comcast.net">xentrigued@comcast.net</a>&gt; =
wrote:<o:p></o:p></p></div><blockquote =
style=3D'border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in =
6.0pt;margin-left:4.8pt;margin-right:0in'><p class=3DMsoNormal =
style=3D'margin-bottom:12.0pt'>RATIONALE: Features in recent versions of =
Windows now REQUIRE Hyper-V<br>support to work.&nbsp; In particular, =
Windows Containers, Sandbox, Docker Desktop<br>and the Windows Subsystem =
for Linux version 2 (WSL2).&nbsp; Running Windows in a<br>VM as a =
development and test platform is currently a common requirement =
for<br>various user segments and will likely become necessary for =
production in the<br>future.&nbsp; Nested virtualization of Hyper-V =
currently works on VMware ESXi,<br>Microsoft Hyper-V and KVM-based =
hypervisors.&nbsp; This puts Xen and its<br>derivatives at a =
disadvantage when choosing a hypervisor.<br><br>WHAT IS NOT =
WORKING?&nbsp; Provided the requirements set forth in:<br><a =
href=3D"https://wiki.xenproject.org/wiki/Nested_Virtualization_in_Xen" =
target=3D"_blank">https://wiki.xenproject.org/wiki/Nested_Virtualization_=
in_Xen</a> have been met,<br>an hvm guest running Windows 10 PRO Version =
21H1 x64 shows that all four<br>requirements for running Hyper-V are =
available using the msinfo32.exe or<br>systeminfo.exe commands.&nbsp; =
More granular knowledge of the CPU capabilities<br>exposed to the guest =
can be observed using the Sysinternals Coreinfo64.exe<br>command.&nbsp; =
CPUID flags present appear to mirror those on other working =
nested<br>hypervisor configurations.<br><br>Enabling Windows Features =
for Hyper-V, Virtual Machine Platform, etc. all<br>appear to work =
without error.&nbsp; However, after the finishing reboot, Hyper-V<br>is =
simply not active.&nbsp; This--despite the fact that vmcompute.exe =
(Hyper-V<br>host compute service) is running and there are no errors in =
the logs.&nbsp; In<br>addition, all four Hyper-V prerequisites continue =
to show as available.<br><br>By contrast, after the finishing reboot of =
an analogous Windows VM running<br>on ESXi, the four prerequisites are =
reversed:&nbsp; hypervisor is now active;<br>vmx, ept and urg =
(unrestricted guest) are all off as viewed with the<br>Coreinfo64.exe -v =
command.&nbsp; Furthermore, all functions requiring Hyper-V are<br>now =
active and working as expected.<br><br>This deficiency has been observed =
in two test setups running Xen 4.15 from<br>source and XCP-ng 8.2, both =
running on Intel with all of the latest,<br>generally available =
patches.&nbsp; We presume that the same behavior is present<br>on Citrix =
Hypervisor 8.2 as well.<br><br>SUMMATION:<br>Clearly, much effort has =
already been expended to support the Viridian<br>enlightenments that =
optimize running Windows on Xen.&nbsp; It also looks like =
a<br>significant amount of effort has been put forth to advance =
nested<br>virtualization in general.<br><br>Therefore, if it would be =
helpful, I am willing to perform testing and<br>provide feedback and =
logs as appropriate in order to help get this working.<br><br>While my =
day job is managing a heterogeneous collection of systems running<br>on =
various hypervisors, I have learned the rudiments of integrating =
patches<br>and rebuilding Xen from source so could no doubt be useful in =
assisting you<br>with this worthwhile =
endeavor.<br><br><br><o:p></o:p></p></blockquote></div></div></body></htm=
l>
------=_NextPart_000_007B_01D780DD.D5A33650--



From xen-devel-bounces@lists.xenproject.org Sun Jul 25 05:18:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 05:18:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160721.295180 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7WWp-00026n-2N; Sun, 25 Jul 2021 05:18:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160721.295180; Sun, 25 Jul 2021 05:18:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7WWo-00026g-VO; Sun, 25 Jul 2021 05:18:18 +0000
Received: by outflank-mailman (input) for mailman id 160721;
 Sun, 25 Jul 2021 05:18:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7WWn-00026W-Oe; Sun, 25 Jul 2021 05:18:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7WWn-0005A7-FL; Sun, 25 Jul 2021 05:18:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7WWn-0004XT-0p; Sun, 25 Jul 2021 05:18:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7WWm-0006ZA-Vq; Sun, 25 Jul 2021 05:18:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=PCqOfgIu14KWTEf24pG/GlnBZcg4HfyALx2h+rPNrfE=; b=WPQqMgdn4SP7yovRiGMu2siqJy
	ljVc04qL1rMCC01ZO8m9UC3oD7cAV5NnCDiHaDfm9LLJLI6VjMb8Qd218iskwG1yATnSUaguuuc6z
	HGPfG1l8RrDgAzIjalvXSKNn9C+YHxkbJBOpJriHtaSkDqOa5KLefC9HSqXW+CoYMInM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163979-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163979: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:guest-start:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=6498f6151825f1e5aac5543fa9ea4ea218dcbe8c
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 05:18:16 +0000

flight 163979 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163979/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332

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

version targeted for testing:
 linux                6498f6151825f1e5aac5543fa9ea4ea218dcbe8c
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  358 days
Failing since        152366  2020-08-01 20:49:34 Z  357 days  613 attempts
Testing same since   163979  2021-07-25 00:11:50 Z    0 days    1 attempts

------------------------------------------------------------
6729 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1986589 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 05:59:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 05:59:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160729.295194 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7XB1-0006d3-7u; Sun, 25 Jul 2021 05:59:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160729.295194; Sun, 25 Jul 2021 05:59:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7XB1-0006cw-4x; Sun, 25 Jul 2021 05:59:51 +0000
Received: by outflank-mailman (input) for mailman id 160729;
 Sun, 25 Jul 2021 05:59:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7XAz-0006cl-8D; Sun, 25 Jul 2021 05:59:49 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7XAy-0005hr-VA; Sun, 25 Jul 2021 05:59:48 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7XAy-0006Jv-Gw; Sun, 25 Jul 2021 05:59:48 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7XAy-0005in-GR; Sun, 25 Jul 2021 05:59:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NRkZqHFMJlAiz0GhJjyhOIZiRcxQCaEsQeO2ynmYaGs=; b=JtV0RobQtTYL4njUqXMI1/4/gL
	qeI9eGXLmn5/w30TfYm+0Utj+4OTSUmkMrHHfmnsDp3ri9hBSXml2rqIrsYUrnkWE+2uKei/QoL76
	6M39ZdQDzLgZ9vWQP9AkTPZkrPUFkFtm5PMDfeHrYZldO/6SUfvznKINXRYBY2+GO5Gg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163980-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163980: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 05:59:48 +0000

flight 163980 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163980/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   51 days
Failing since        162368  2021-06-04 15:42:59 Z   50 days  138 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    2 days    8 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 06:07:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 06:07:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160737.295210 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7XIo-0008JC-5N; Sun, 25 Jul 2021 06:07:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160737.295210; Sun, 25 Jul 2021 06:07:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7XIo-0008J5-28; Sun, 25 Jul 2021 06:07:54 +0000
Received: by outflank-mailman (input) for mailman id 160737;
 Sun, 25 Jul 2021 06:07:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=wHM9=MR=lst.de=hch@srs-us1.protection.inumbo.net>)
 id 1m7XIm-0008Iz-Ro
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 06:07:52 +0000
Received: from verein.lst.de (unknown [213.95.11.211])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a4266ed8-ed0e-11eb-957d-12813bfff9fa;
 Sun, 25 Jul 2021 06:07:51 +0000 (UTC)
Received: by verein.lst.de (Postfix, from userid 2407)
 id 0DC2267373; Sun, 25 Jul 2021 08:07:48 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a4266ed8-ed0e-11eb-957d-12813bfff9fa
Date: Sun, 25 Jul 2021 08:07:47 +0200
From: Christoph Hellwig <hch@lst.de>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org, Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>
Subject: Re: [PATCH v2 01/21] dma-mapping: Allow map_sg() ops to return
 negative error codes
Message-ID: <20210725060747.GA10852@lst.de>
References: <20210723175008.22410-1-logang@deltatee.com> <20210723175008.22410-2-logang@deltatee.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210723175008.22410-2-logang@deltatee.com>
User-Agent: Mutt/1.5.17 (2007-11-01)

> +int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
> +		    enum dma_data_direction dir, unsigned long attrs)
> +{
> +	int nents;
> +
> +	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
> +	if (nents == 0)
> +		return -EIO;
> +	else if (nents < 0) {
> +		if (WARN_ON_ONCE(nents != -EINVAL && nents != -ENOMEM &&
> +				 nents != -EIO))
> +			return -EIO;

I think this validation of the errnos needs to go into __dma_map_sg_attrs,
so that we catch it for the classic dma_map_sg callers as well.


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 07:56:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 07:56:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160745.295222 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7Z01-0002wq-7p; Sun, 25 Jul 2021 07:56:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160745.295222; Sun, 25 Jul 2021 07:56:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7Z01-0002wj-2Z; Sun, 25 Jul 2021 07:56:37 +0000
Received: by outflank-mailman (input) for mailman id 160745;
 Sun, 25 Jul 2021 07:56:36 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7Z00-0002wZ-HQ; Sun, 25 Jul 2021 07:56:36 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7Z00-0007QY-6H; Sun, 25 Jul 2021 07:56:36 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7Yzz-00054Z-Tw; Sun, 25 Jul 2021 07:56:36 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7Yzz-0004eW-TS; Sun, 25 Jul 2021 07:56:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=gv1L1PG5JHxXd+IwFZ7N1Kar3HV72tdcm7OpZhUCu/Q=; b=IVfRlD6VHSZxss4Vn+GLcwYOll
	0lX11VKyXB5hLDdx/IZK1lBCtO5Ut+FbWpcA1Cpxqkp60wUOrTpDnKzu/u0ouaNEgGdXI9TkDM2kd
	jGvBvTkfIA+el2fQ9uu0wWxFxfExN/3S14XakVswXpeqgt+SjFcroErOvvYKXZFXwLog=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163982-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163982: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=cd72f0cd9f7b0b7d0e2964d5dd38d2a95fa784c4
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 07:56:35 +0000

flight 163982 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163982/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              cd72f0cd9f7b0b7d0e2964d5dd38d2a95fa784c4
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  380 days
Failing since        151818  2020-07-11 04:18:52 Z  379 days  371 attempts
Testing same since   163973  2021-07-24 04:20:09 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 66711 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 12:07:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 12:07:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160767.295237 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7cu5-0003cS-U1; Sun, 25 Jul 2021 12:06:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160767.295237; Sun, 25 Jul 2021 12:06:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7cu5-0003cL-Qu; Sun, 25 Jul 2021 12:06:45 +0000
Received: by outflank-mailman (input) for mailman id 160767;
 Sun, 25 Jul 2021 12:06:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7cu4-0003cB-Cu; Sun, 25 Jul 2021 12:06:44 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7cu4-0003AX-63; Sun, 25 Jul 2021 12:06:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7cu3-0000MP-PP; Sun, 25 Jul 2021 12:06:43 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7cu3-0005IM-Or; Sun, 25 Jul 2021 12:06:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=F6E3QUW9IAGu/Tl34VHoS2vxUZgqyeUHAUdGFw6Oe3w=; b=ApnkbxOXdzRkRzxpQog43Fnecf
	b93dLGdURPKhaCq5SX90TMa4vVfhzFT4XoAEHHfnOxle/db/JCrGx8DFtInAtKbZ76b0QPSx2qHvx
	CoIUIbFKfCCq+/yxrUCFRcrPH5AdidvO/U9NDoj6l3MPe9L5lOPmcQYUF4U5DLqNWjPc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163981-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163981: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start:fail:heisenbug
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 12:06:43 +0000

flight 163981 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163981/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 20 guest-start/debianhvm.repeat fail in 163925 pass in 163981
 test-armhf-armhf-xl-rtds 18 guest-start/debian.repeat fail in 163971 pass in 163925
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 18 guest-start/debianhvm.repeat fail in 163971 pass in 163981
 test-armhf-armhf-xl-rtds     14 guest-start                fail pass in 163971

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-examine      4 memdisk-try-append  fail in 163925 like 163888
 test-armhf-armhf-xl-rtds    15 migrate-support-check fail in 163971 never pass
 test-armhf-armhf-xl-rtds 16 saverestore-support-check fail in 163971 never pass
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163971
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163971
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163971
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163971
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163971
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163971
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163971
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163971
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163971
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163971
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163971
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163981  2021-07-25 01:51:53 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Sun Jul 25 13:23:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 13:23:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160777.295252 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7e61-0003Q8-GJ; Sun, 25 Jul 2021 13:23:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160777.295252; Sun, 25 Jul 2021 13:23:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7e61-0003Q1-Bb; Sun, 25 Jul 2021 13:23:09 +0000
Received: by outflank-mailman (input) for mailman id 160777;
 Sun, 25 Jul 2021 13:23:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7e60-0003Pr-Al; Sun, 25 Jul 2021 13:23:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7e60-0004DH-4L; Sun, 25 Jul 2021 13:23:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7e5z-0002JL-RR; Sun, 25 Jul 2021 13:23:07 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7e5z-0006bU-Qw; Sun, 25 Jul 2021 13:23:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=aBanIxLxjWmBNpR0RYBZxwPrnZ9BhtWKOV6DzxwdxrE=; b=lQ1fjb9DyD9g0yq1BYDBk54K1E
	LPhwl47GV4DPQ2TrQj6fupQk4BS1I+gUNhbO/r+i+aZUJ9WnAQdy9sxVKFZJNBI0YHCzoC8sVAZpv
	kVnuGd55H6S8IxcBPlhvUywrGm3MVYn4JtdOUfPgt8BrPblJvJUExHrFvPobdUUPIrJk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163984-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163984: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 13:23:07 +0000

flight 163984 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163984/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   51 days
Failing since        162368  2021-06-04 15:42:59 Z   50 days  139 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    2 days    9 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 13:56:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 13:56:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160785.295267 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7ebp-00079u-0A; Sun, 25 Jul 2021 13:56:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160785.295267; Sun, 25 Jul 2021 13:56:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7ebo-00079n-T6; Sun, 25 Jul 2021 13:56:00 +0000
Received: by outflank-mailman (input) for mailman id 160785;
 Sun, 25 Jul 2021 13:55:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=WkCe=MR=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m7ebn-00079h-LQ
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 13:55:59 +0000
Received: from wout2-smtp.messagingengine.com (unknown [64.147.123.25])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 09761af4-ed50-11eb-95b7-12813bfff9fa;
 Sun, 25 Jul 2021 13:55:58 +0000 (UTC)
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailout.west.internal (Postfix) with ESMTP id CA4AA32002B6;
 Sun, 25 Jul 2021 09:55:56 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163])
 by compute2.internal (MEProxy); Sun, 25 Jul 2021 09:55:56 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun,
 25 Jul 2021 09:55:55 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 09761af4-ed50-11eb-95b7-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=08rFA/
	d8vo4Nilc3ee66a2YWpeMAhVSiJ9vOIKznIw8=; b=bkZEYJ8GhdOQe+pSLjH8w3
	5M1/IaVYjzGR6lF90Nktvf+9UQxwkKLGh4wvxtANjxC0z/Zpp3aJSVmlwrZkhOvD
	I8xFYNsdLOlPLksK2fctxQim6yKSXdV8Cwa2WgmHN3w48GK4mx4LjDNwnPtz+bTJ
	YJo6TBsQEnFcuhONHyW++ZvhwXby5HEOuRu4/yDseAf0o+Af6737KCiFQezXDByR
	R1F06xQMoajCW3s3NcHw/BX9MSks+hoV5wjhAuM5R8nLrso2IcOS0vSup9PH6oX3
	V4Yh+N7Z29HAKksEMRQzdFitQ2dTPqgZoKa4OkZrdhRy4hmgMOyUtMzNE+4jJ4fg
	==
X-ME-Sender: <xms:bG39YAiXK7WSKWPZZACClLncV1JSUjaczLGuLcLVwB3B0u1C-j33Hg>
    <xme:bG39YJCalsCNkxLoZ1mLa0OyL10kcKsbn2uzBtfqy2jdna1Rx_dabi6GyF__pyHT-
    -gfhKDSmodnYg>
X-ME-Received: <xmr:bG39YIGHHaMZgRO9OnevAs-XjVOsQnILwQhcON0K5xWLu6A279D4eXOjGCrrpWDraX1ioUEKk_8n5spJZ3s6sSXxucPIgi-h>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrgedvgdejtdcutefuodetggdotefrodftvf
    curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
    uegrihhlohhuthemuceftddtnecunecujfgurhepfffhvffukfhfgggtuggjsehgtderre
    dttdejnecuhfhrohhmpeforghrvghkucforghrtgiihihkohifshhkihdqifpkrhgvtghk
    ihcuoehmrghrmhgrrhgvkhesihhnvhhishhisghlvghthhhinhhgshhlrggsrdgtohhmqe
    enucggtffrrghtthgvrhhnpeetveffiefghfekhffggeeffffhgeevieektedthfehveei
    heeiiedtudegfeetffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrih
    hlfhhrohhmpehmrghrmhgrrhgvkhesihhnvhhishhisghlvghthhhinhhgshhlrggsrdgt
    ohhm
X-ME-Proxy: <xmx:bG39YBQEIAk-KOOHV8MlZ64WC26-WO3MJUVqC5tUXAxVuSfHOP1b_g>
    <xmx:bG39YNx4__xmkdmxIG3JForrGNyXlIrHDsYABCpym-1heKaevg1Yyg>
    <xmx:bG39YP65EvNWEYJ5MiAgzjqWqQV-uKOY-xkPm3F8E2ttukfb4GczYg>
    <xmx:bG39YGuP_ZMCBLWJODA0x75cOnK_9YpkMmclY7QL8twpzkeeuUJk0g>
Date: Sun, 25 Jul 2021 15:55:52 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: luja <luja@openhardware.de>
Cc: xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: Xen-Error: Disabling IOMMU on Stepping C2 5520 Host-Bridge
Message-ID: <YP1taH2Xl/jxjNRz@mail-itl>
References: <43-60fd5980-39-6ab37100@54709844>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="lvRJv7tasDQjGW5e"
Content-Disposition: inline
In-Reply-To: <43-60fd5980-39-6ab37100@54709844>


--lvRJv7tasDQjGW5e
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Sun, 25 Jul 2021 15:55:52 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: luja <luja@openhardware.de>
Cc: xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: Xen-Error: Disabling IOMMU on Stepping C2 5520 Host-Bridge

On Sun, Jul 25, 2021 at 02:31:17PM +0200, luja wrote:
> Hi Marek, Hi all,

Hi luja,

First of all, please use appropriate mailing list for such emails, not
email individual developers privately. I'm adding xen-devel here.

>=20
> On a HP Z600 I am trying to run qubes.
> The Xen log says that the Chipset is affected by Intel-Errate #47, #53
>=20
> the code in Xen is this:
>=20
> "
> /* 5500/5520/X58 Chipset Interrupt remapping errata, for stepping B-3.
> * Fixed in stepping C-2. */
> static void __init tylersburg_intremap_quirk(void)
> {
> uint32_t bus, device;
> uint8_t rev;
>=20
> for ( bus =3D 0; bus < 0x100; bus++ )
> {
> /* Match on System Management Registers on Device 20 Function 0 */
> device =3D pci_conf_read32(0, bus, 20, 0, PCI_VENDOR_ID);
> rev =3D pci_conf_read8(0, bus, 20, 0, PCI_REVISION_ID);
>=20
> if ( rev =3D=3D 0x13 && device =3D=3D 0x342e8086 )
> {
> printk(XENLOG_WARNING VTDPREFIX
> "Disabling IOMMU due to Intel 5500/5520/X58 Chipset errata #47, #53\n");
> iommu_enable =3D 0;
> break;
> }
> }
> }
>=20
> "
>=20
> But! rev 0x13 is not suficient to detect the "wrong" host bridge.

According to the spec by Intel (page 11 in the PDF you attached), it is.

> This Z600 is equipped with 0B54h mainboard as can be seen with dmi-decode.
>=20
> The manual states that 0B54h mainboard has the "newer C2 stepping",
> so it is *not* affected by Intel "spec update" (nota bene: Intel updates =
the
> spec, others report erratas) bugs =C2=A0

The code above checks for rev 0x13, and the spec (page 11) clearly says tha=
t rev
0x13 is stepping B-3. Stepping C-2 is rev 0x22. So, if this check
triggers for you, I'm afraid you have the affected chipset.

According to HP doc you attached, you can additionally confirm it via
BIOS:
    To determine if a specific HP Z600 system
    has the C2 revision of the chipset:
    1. Use the BIOS setup menu to access the =E2=80=9CBoot
    Block Date=E2=80=9D from the =E2=80=9CSystem Information Menu.=E2=80=9D
    All B3-based systems will have a =E2=80=9C1/30/09=E2=80=9D
    date and C2-based systems will have a
    =E2=80=9C01/07/10=E2=80=9D date.

> So the way Xen detects the "bug" (pci rev 13) is not sufficient, as my Z6=
00
> shows pci rev13 with lspci but 0xB54h (board rev only on Z600) with dmide=
code
> I would suggest first to have an override xen kernel boot option to disab=
le the disablement in this code section. Or just patch this part out of the=
 Xen code and rebuild xen. If this stuff really crashes, one will see it.

Patching it out is out of the question, this check if there for a
reason.

> So please build a new xen without this stupid disablement or please add a=
n override boot command for it.
>=20
> Please see the attached upgrade manual of Z600 and the errata "spec updat=
e" by Intel.
> You see that the C2 stepping is not affected by the bugs refered to in th=
e xen code,
> so removing that section or adding better detection of the mask revision =
(B3 vs. C2)=C2=A0 of 5520 host bridge would allow=C2=A0 many users to opera=
te Qubes4.

Maybe someone else has an alternative idea?

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--lvRJv7tasDQjGW5e
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmD9bWcACgkQ24/THMrX
1ywhZAf+NTvq4qc4cnnddsLuWr6zil7r0vbEfC3JBuwL3W9YIvhS+ZsTAZzW8pZy
IHPNVfoQszOc59WWIW/VBmgy5UHr3tHFS9a8Aftw67XKDuSpvWcvleGeyzQdYJlL
qKl5QCzE5CBlnYIRVtKZpOuQTr6tosouqNyrfVU+24AnLGAA8qIPAKtO6Ev54Rnd
YRYwV/SiLX8KZl0rOHOvgIXx5bBixJ1zrh0H5xJNZskOwNbhOFuzxdv9Mo2HZ/MT
3LubfOGPsqNYsh1xbaLPOwH/g2AQt86viWcKLPb9Mub8pxylTSM6urwJ+Kpi3pJU
iWbe2ERwVfX9y3G/2D317/y7pnaMuw==
=GNLl
-----END PGP SIGNATURE-----

--lvRJv7tasDQjGW5e--


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 13:57:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 13:57:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160792.295279 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7edi-0007ov-GG; Sun, 25 Jul 2021 13:57:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160792.295279; Sun, 25 Jul 2021 13:57:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7edi-0007oo-Cv; Sun, 25 Jul 2021 13:57:58 +0000
Received: by outflank-mailman (input) for mailman id 160792;
 Sun, 25 Jul 2021 13:57:56 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7edg-0007ob-I5; Sun, 25 Jul 2021 13:57:56 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7edf-0004gV-5M; Sun, 25 Jul 2021 13:57:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7ede-0003KJ-Pi; Sun, 25 Jul 2021 13:57:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7ede-00071E-PH; Sun, 25 Jul 2021 13:57:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3ZSlXLBi3bymyxHp/pNbGFWAkZF0OfrpvINOkglAp0g=; b=RQ6vw1JPGfS8gX8EfqhhmF6xPp
	fPV2BJ8oji6NL3NyrM3zSPPjkgYqhYhlv554kVuVpw8/BD4sXXPRcwC177KS1nG/kuEEciX0NVCrs
	WZaQFIp1HXCrr0GBLg7wKjHpwdaxlnw5QO8S93NfWjEjMf+lPJdIc2VTxmWde8H/L66w=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163983-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163983: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=d8079fac168168b25677dc16c00ffaf9fb7df723
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 13:57:54 +0000

flight 163983 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163983/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332

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

version targeted for testing:
 linux                d8079fac168168b25677dc16c00ffaf9fb7df723
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  358 days
Failing since        152366  2020-08-01 20:49:34 Z  357 days  614 attempts
Testing same since   163983  2021-07-25 05:22:46 Z    0 days    1 attempts

------------------------------------------------------------
6729 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1986694 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 14:06:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 14:06:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160801.295294 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7elk-000166-D0; Sun, 25 Jul 2021 14:06:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160801.295294; Sun, 25 Jul 2021 14:06:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7elk-00015z-9l; Sun, 25 Jul 2021 14:06:16 +0000
Received: by outflank-mailman (input) for mailman id 160801;
 Sun, 25 Jul 2021 14:06:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=fCHE=MR=strugglers.net=andy@srs-us1.protection.inumbo.net>)
 id 1m7elj-00015t-Em
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 14:06:15 +0000
Received: from mail.bitfolk.com (unknown [2001:ba8:1f1:f019::25])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 62bf2b48-f0c5-4a32-84ed-e07be880464b;
 Sun, 25 Jul 2021 14:06:13 +0000 (UTC)
Received: from andy by mail.bitfolk.com with local (Exim 4.89)
 (envelope-from <andy@strugglers.net>) id 1m7elf-0008Up-Mx
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 14:06:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 62bf2b48-f0c5-4a32-84ed-e07be880464b
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=bitfolk.com
	; s=alpha; h=In-Reply-To:Content-Transfer-Encoding:Content-Type:MIME-Version:
	References:Message-ID:Subject:To:From:Date:Sender:Reply-To:Cc:Content-ID:
	Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
	:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:
	List-Post:List-Owner:List-Archive;
	bh=TvQ+33AhUXQhQzeq8xLwUJvXzGmuJ2hIQnhRp09ds6I=; b=0vPcc1H6yFZtPqwNSoXe2MNVcn
	/pikzM1rNZfKUcc58LBwGJsZJSmFe2BMXR9qcsIRohjk2SMdNLVUtjA3Qplg2vnNK+DrVr2avOw9t
	Ek+y5GHd8d+XD6CtS5noKe06BBsVQuhjSSebYbULKdpQDXeXufD+UrHcAvEZVcntVnZ/eDqyGdcLH
	QppT0joR7HY/XRP11zdPPDqF9QEcA2oPGHetkKWB5g6w+oCyboiHfVWViG+2SgZLtftZozNF1TIov
	u9f5Ws7rcVTd5wAUjtig+iLoVzvuEWcRIerrU5zJSd9ZcGN+Fnhw/PSn2anB9/4TnAf4GdY+XV9SD
	CbD8rLwQ==;
Date: Sun, 25 Jul 2021 14:06:11 +0000
From: Andy Smith <andy@strugglers.net>
To: xen-devel@lists.xenproject.org
Subject: Re: 5.10.40 dom0 kernel - nvme: Invalid SGL for payload:131072
 nents:13
Message-ID: <20210725140611.cw4bn7cik5wmg2gc@bitfolk.com>
References: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
In-Reply-To: <20210720223239.fqbwj3escedolaqa@bitfolk.com>
OpenPGP: id=BF15490B; url=http://strugglers.net/~andy/pubkey.asc
X-URL: http://strugglers.net/wiki/User:Andy
User-Agent: NeoMutt/20170113 (1.7.2)
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: andy@strugglers.net
X-SA-Exim-Scanned: No (on mail.bitfolk.com); SAEximRunCond expanded to false

Hello,

On Tue, Jul 20, 2021 at 10:32:39PM +0000, Andy Smith wrote:
> I have a Debian 10 (buster/stable) dom0 running hypervisor 4.14.2.
> For almost 2 years it's been using the packaged Debian stable kernel
> which is 4.19.x.
>=20
> Last night I upgraded the kernel to the buster-backports package
> which is based on 5.10.40 and about 4 hours later got this:
>=20
> Jul 20 02:17:54 lamb kernel: [21061.388607] sg[0] phys_addr:0x00000015eb8=
03000 offset:0 length:4096 dma_address:0x000000209e7b7000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.389775] sg[1] phys_addr:0x00000015eb7=
bc000 offset:0 length:4096 dma_address:0x000000209e7b8000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.390874] sg[2] phys_addr:0x00000015eb8=
09000 offset:0 length:4096 dma_address:0x000000209e7b9000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.391974] sg[3] phys_addr:0x00000015eb7=
66000 offset:0 length:4096 dma_address:0x000000209e7ba000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.393042] sg[4] phys_addr:0x00000015eb7=
a3000 offset:0 length:4096 dma_address:0x000000209e7bb000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.394086] sg[5] phys_addr:0x00000015eb7=
c6000 offset:0 length:4096 dma_address:0x000000209e7bc000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.395078] sg[6] phys_addr:0x00000015eb7=
c2000 offset:0 length:4096 dma_address:0x000000209e7bd000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.396042] sg[7] phys_addr:0x00000015eb7=
a9000 offset:0 length:4096 dma_address:0x000000209e7be000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.397004] sg[8] phys_addr:0x00000015eb7=
75000 offset:0 length:4096 dma_address:0x000000209e7bf000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.397971] sg[9] phys_addr:0x00000015eb7=
c7000 offset:0 length:4096 dma_address:0x00000020ff520000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.398889] sg[10] phys_addr:0x00000015eb=
7cb000 offset:0 length:4096 dma_address:0x00000020ff521000 dma_length:4096
> Jul 20 02:17:54 lamb kernel: [21061.399814] sg[11] phys_addr:0x00000015eb=
7e3000 offset:0 length:61952 dma_address:0x00000020ff522000 dma_length:61952
> Jul 20 02:17:54 lamb kernel: [21061.400754] sg[12] phys_addr:0x00000015eb=
7f2200 offset:512 length:24064 dma_address:0x00000020ff531200 dma_length:24=
064
> Jul 20 02:17:54 lamb kernel: [21061.401781] ------------[ cut here ]-----=
-------
> Jul 20 02:17:54 lamb kernel: [21061.402738] Invalid SGL for payload:13107=
2 nents:13
> Jul 20 02:17:54 lamb kernel: [21061.403724] WARNING: CPU: 1 PID: 12669 at=
 drivers/nvme/host/pci.c:716 nvme_map_data+0x7e0/0x820 [nvme]
> Jul 20 02:17:54 lamb kernel: [21061.404728] Modules linked in: binfmt_mis=
c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpmss nf_log_ipv=
6 nf_log_ipv4 nf_log_common xt_LOG xt_limit nfnetlink_log nfnetlink xt_NFLO=
G xt_multiport xt_tcpudp ip6table_filter ip6_tables iptable_filter bonding =
btrfs blake2b_generic dm_snapshot dm_bufio intel_rapl_msr intel_rapl_common=
 skx_edac nfit libnvdimm intel_powerclamp crc32_pclmul ghash_clmulni_intel =
ipmi_ssif aesni_intel libaes crypto_simd cryptd glue_helper snd_hda_intel s=
nd_intel_dspcfg mei_wdt soundwire_intel soundwire_generic_allocation nvme w=
dat_wdt snd_soc_core ast snd_compress watchdog drm_vram_helper drm_ttm_help=
er soundwire_cadence pcspkr nvme_core ttm snd_hda_codec drm_kms_helper snd_=
hda_core i2c_i801 snd_hwdep i2c_smbus cec soundwire_bus snd_pcm drm snd_tim=
er snd soundcore igb ptp pps_core i2c_algo_bit joydev mei_me sg mei intel_l=
pss_pci intel_lpss idma64 acpi_ipmi ipmi_si ipmi_devintf ioatdma dca wmi ip=
mi_msghandler button dm_mod xenfs xen_acpi_processor
> Jul 20 02:17:54 lamb kernel: [21061.404831]  xen_privcmd xen_pciback xen_=
netback xen_blkback xen_gntalloc xen_gntdev xen_evtchn ip_tables x_tables a=
utofs4 ext4 crc16 mbcache jbd2 raid456 libcrc32c crc32c_generic async_raid6=
_recov async_memcpy async_pq async_xor xor async_tx evdev hid_generic usbhi=
d hid raid6_pq raid0 multipath linear raid10 raid1 md_mod sd_mod t10_pi crc=
_t10dif crct10dif_generic crct10dif_pclmul crct10dif_common xhci_pci ahci l=
ibahci crc32c_intel xhci_hcd libata usbcore scsi_mod usb_common
> Jul 20 02:17:54 lamb kernel: [21061.417998] CPU: 1 PID: 12669 Comm: 62.xv=
da-0 Not tainted 5.10.0-0.bpo.7-amd64 #1 Debian 5.10.40-1~bpo10+1
> Jul 20 02:17:54 lamb kernel: [21061.418459] Hardware name: Supermicro Sup=
er Server/X11SRM-VF, BIOS 1.2a 02/18/2019
> Jul 20 02:17:54 lamb kernel: [21061.418922] RIP: e030:nvme_map_data+0x7e0=
/0x820 [nvme]
> Jul 20 02:17:54 lamb kernel: [21061.419354] Code: d0 7b c0 48 c7 c7 40 d6=
 7b c0 e8 5b 44 c9 c0 8b 93 4c 01 00 00 f6 43 1e 04 75 36 8b 73 28 48 c7 c7=
 20 9c 7b c0 e8 8b 71 09 c1 <0f> 0b 41 bd 0a 00 00 00 e9 f7 fe ff ff 48 8d =
bd 68 02 00 00 48 89
> Jul 20 02:17:54 lamb kernel: [21061.420271] RSP: e02b:ffffc90044797930 EF=
LAGS: 00010286
> Jul 20 02:17:54 lamb kernel: [21061.420727] RAX: 0000000000000000 RBX: ff=
ff888157db4200 RCX: 0000000000000027
> Jul 20 02:17:54 lamb kernel: [21061.421186] RDX: 0000000000000027 RSI: ff=
ff888292858a00 RDI: ffff888292858a08
> Jul 20 02:17:54 lamb kernel: [21061.421639] RBP: ffff888103243000 R08: 00=
00000000000000 R09: c00000010000118b
> Jul 20 02:17:54 lamb kernel: [21061.422090] R10: 0000000000165920 R11: ff=
ffc90044797738 R12: ffffffffc07b9bd0
> Jul 20 02:17:54 lamb kernel: [21061.422583] R13: 000000000000000d R14: 00=
00000000000000 R15: 000000000000000d
> Jul 20 02:17:54 lamb kernel: [21061.423052] FS:  0000000000000000(0000) G=
S:ffff888292840000(0000) knlGS:0000000000000000
> Jul 20 02:17:54 lamb kernel: [21061.423518] CS:  e030 DS: 0000 ES: 0000 C=
R0: 0000000080050033
> Jul 20 02:17:54 lamb kernel: [21061.423986] CR2: 00007f909a037c30 CR3: 00=
0000010d2dc000 CR4: 0000000000050660
> Jul 20 02:17:54 lamb kernel: [21061.424472] Call Trace:
> Jul 20 02:17:54 lamb kernel: [21061.424943]  nvme_queue_rq+0x98/0x190 [nv=
me]
> Jul 20 02:17:54 lamb kernel: [21061.425425]  blk_mq_dispatch_rq_list+0x12=
3/0x7d0
> Jul 20 02:17:54 lamb kernel: [21061.425904]  ? sbitmap_get+0x66/0x140
> Jul 20 02:17:54 lamb kernel: [21061.426385]  ? elv_rb_del+0x1f/0x30
> Jul 20 02:17:54 lamb kernel: [21061.426909]  ? deadline_remove_request+0x=
55/0xc0
> Jul 20 02:17:54 lamb kernel: [21061.427373]  __blk_mq_do_dispatch_sched+0=
x164/0x2d0
> Jul 20 02:17:54 lamb kernel: [21061.427843]  __blk_mq_sched_dispatch_requ=
ests+0x135/0x170
> Jul 20 02:17:54 lamb kernel: [21061.428310]  blk_mq_sched_dispatch_reques=
ts+0x30/0x60
> Jul 20 02:17:54 lamb kernel: [21061.428795]  __blk_mq_run_hw_queue+0x51/0=
xd0
> Jul 20 02:17:54 lamb kernel: [21061.429269]  __blk_mq_delay_run_hw_queue+=
0x141/0x160
> Jul 20 02:17:54 lamb kernel: [21061.429752]  blk_mq_sched_insert_requests=
+0x6a/0xf0
> Jul 20 02:17:54 lamb kernel: [21061.430233]  blk_mq_flush_plug_list+0x119=
/0x1b0
> Jul 20 02:17:54 lamb kernel: [21061.430756]  blk_flush_plug_list+0xd7/0x1=
00
> Jul 20 02:17:54 lamb kernel: [21061.431241]  blk_finish_plug+0x21/0x30
> Jul 20 02:17:54 lamb kernel: [21061.431734]  dispatch_rw_block_io+0x6a5/0=
x9a0 [xen_blkback]
> Jul 20 02:17:54 lamb kernel: [21061.432220]  __do_block_io_op+0x31d/0x620=
 [xen_blkback]
> Jul 20 02:17:54 lamb kernel: [21061.432714]  ? _raw_spin_unlock_irqrestor=
e+0x14/0x20
> Jul 20 02:17:54 lamb kernel: [21061.433193]  ? try_to_del_timer_sync+0x4d=
/0x80
> Jul 20 02:17:54 lamb kernel: [21061.433680]  xen_blkif_schedule+0xda/0x67=
0 [xen_blkback]
> Jul 20 02:17:54 lamb kernel: [21061.434160]  ? __schedule+0x2c6/0x770
> Jul 20 02:17:54 lamb kernel: [21061.434679]  ? finish_wait+0x80/0x80
> Jul 20 02:17:54 lamb kernel: [21061.435129]  ? xen_blkif_be_int+0x30/0x30=
 [xen_blkback]
> Jul 20 02:17:54 lamb kernel: [21061.435571]  kthread+0x116/0x130
> Jul 20 02:17:54 lamb kernel: [21061.436002]  ? kthread_park+0x80/0x80
> Jul 20 02:17:54 lamb kernel: [21061.436422]  ret_from_fork+0x22/0x30
> Jul 20 02:17:54 lamb kernel: [21061.436846] ---[ end trace 1d90be7aea2d91=
48 ]---
> Jul 20 02:17:54 lamb kernel: [21061.437250] blk_update_request: I/O error=
, dev nvme0n1, sector 912000815 op 0x1:(WRITE) flags 0x800 phys_seg 13 prio=
 class 0
> Jul 20 02:17:54 lamb kernel: [21061.446344] md/raid1:md4: Disk failure on=
 nvme0n1, disabling device.
> Jul 20 02:17:54 lamb kernel: [21061.446344] md/raid1:md4: Operation conti=
nuing on 1 devices.

I've tested and can confirm that this issue is fixed by:

    https://lore.kernel.org/patchwork/patch/1442338/

which is in 5.14 already and was also backported to 5.10.50.

Debian buster-backports currently ships with 5.10.40; bullseye is
5.10.46; Salvatore Bonaccorso said on debian-kernel list that they
would backport this fix to all the 5.10 packages.

Thanks,
Andy


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 14:49:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 14:49:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160812.295306 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7fQt-0005eN-Qp; Sun, 25 Jul 2021 14:48:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160812.295306; Sun, 25 Jul 2021 14:48:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7fQt-0005e5-6L; Sun, 25 Jul 2021 14:48:47 +0000
Received: by outflank-mailman (input) for mailman id 160812;
 Sun, 25 Jul 2021 14:45:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ycww=MR=openhardware.de=luja@srs-us1.protection.inumbo.net>)
 id 1m7fO7-0005bH-Ty
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 14:45:56 +0000
Received: from mail.jaffe-engineering.com (unknown [178.254.25.135])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6d4927f6-2bc5-4a2e-b650-2da562bc8c65;
 Sun, 25 Jul 2021 14:45:51 +0000 (UTC)
Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon)
 with ESMTPSA id A1A621E0F87; Sun, 25 Jul 2021 16:38:29 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6d4927f6-2bc5-4a2e-b650-2da562bc8c65
Date: Sun, 25 Jul 2021 16:38:27 +0200
User-Agent: K-9 Mail for Android
In-Reply-To: <659EA336-E36F-4025-9B6A-DC50A31F0FF1@openhardware.de>
References: <43-60fd5980-39-6ab37100@54709844> <YP1taH2Xl/jxjNRz@mail-itl> <659EA336-E36F-4025-9B6A-DC50A31F0FF1@openhardware.de>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----0RL2SH357S7EKHO4KZJ4N5S5M8EHBB"
Content-Transfer-Encoding: 7bit
Subject: Re: Xen-Error: Disabling IOMMU on Stepping C2 5520 Host-Bridge // Laser markings: SLH3P
To: =?ISO-8859-1?Q?Marek_Marczykowski-G=F3recki?= <marmarek@invisiblethingslab.com>
CC: xen-devel <xen-devel@lists.xenproject.org>
From: Ludwig Jaffe <luja@openhardware.de>
Message-ID: <DD9DEF75-8E5C-4692-AB01-2B2F05E6D808@openhardware.de>
X-Last-TLS-Session-Version: TLSv1.3

------0RL2SH357S7EKHO4KZJ4N5S5M8EHBB
Content-Type: multipart/alternative; boundary="----YHTYBSYSXR5OXSINZTGD1880WITC75"
Content-Transfer-Encoding: 7bit

------YHTYBSYSXR5OXSINZTGD1880WITC75
Content-Type: text/plain;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

Just for documentation,
heat sink reassembled using normal grey cpu thermal grease


On July 25, 2021 4:30:39 PM GMT+02:00, Ludwig Jaffe <luja@openhardware=2Ed=
e> wrote:
>Hi Marek, as you are refered as Xen expert I thought you are the only
>one in the qubes project to know about it=2E
>Hi people at Xen, it would be nice to add override options in such code
>for test purposes something like forceiommu=3D1=20
>
>So disassembling the cooler the chip reads=20
>"SLH3P" the errata sheet refers it to C2 stepping and states it
>supports Intel Trusted Execution TXT=2E
>This is on page 11 (3rd line of table) of said intel errata=2E
>
>So things get a bit wired=2E Having an override in the kernel boot flags
>would surely help=20
>to bring the computer up with cubes as it should be supported according
>to yhe laser markings=2E Maybe the pci-revisions are writen into
>registers of the host bridge at the time the bios does pci(e) config
>cycles and a buggy bios could simply write buggy pci revisions (just an
>assumption)=2E Laser markings on the die should be trusted=2E
>
>Regards,
>
>luja
>
>
>On July 25, 2021 3:55:52 PM GMT+02:00, "Marek Marczykowski-G=C3=B3recki"
><marmarek@invisiblethingslab=2Ecom> wrote:
>>On Sun, Jul 25, 2021 at 02:31:17PM +0200, luja wrote:
>>> Hi Marek, Hi all,
>>
>>Hi luja,
>>
>>First of all, please use appropriate mailing list for such emails, not
>>email individual developers privately=2E I'm adding xen-devel here=2E
>>
>>>=20
>>> On a HP Z600 I am trying to run qubes=2E
>>> The Xen log says that the Chipset is affected by Intel-Errate #47,
>>#53
>>>=20
>>> the code in Xen is this:
>>>=20
>>> "
>>> /* 5500/5520/X58 Chipset Interrupt remapping errata, for stepping
>>B-3=2E
>>> * Fixed in stepping C-2=2E */
>>> static void __init tylersburg_intremap_quirk(void)
>>> {
>>> uint32_t bus, device;
>>> uint8_t rev;
>>>=20
>>> for ( bus =3D 0; bus < 0x100; bus++ )
>>> {
>>> /* Match on System Management Registers on Device 20 Function 0 */
>>> device =3D pci_conf_read32(0, bus, 20, 0, PCI_VENDOR_ID);
>>> rev =3D pci_conf_read8(0, bus, 20, 0, PCI_REVISION_ID);
>>>=20
>>> if ( rev =3D=3D 0x13 && device =3D=3D 0x342e8086 )
>>> {
>>> printk(XENLOG_WARNING VTDPREFIX
>>> "Disabling IOMMU due to Intel 5500/5520/X58 Chipset errata #47,
>>#53\n");
>>> iommu_enable =3D 0;
>>> break;
>>> }
>>> }
>>> }
>>>=20
>>> "
>>>=20
>>> But! rev 0x13 is not suficient to detect the "wrong" host bridge=2E
>>
>>According to the spec by Intel (page 11 in the PDF you attached), it
>>is=2E
>>
>>> This Z600 is equipped with 0B54h mainboard as can be seen with
>>dmi-decode=2E
>>>=20
>>> The manual states that 0B54h mainboard has the "newer C2 stepping",
>>> so it is *not* affected by Intel "spec update" (nota bene: Intel
>>updates the
>>> spec, others report erratas) bugs =C2=A0
>>
>>The code above checks for rev 0x13, and the spec (page 11) clearly
>says
>>that rev
>>0x13 is stepping B-3=2E Stepping C-2 is rev 0x22=2E So, if this check
>>triggers for you, I'm afraid you have the affected chipset=2E
>>
>>According to HP doc you attached, you can additionally confirm it via
>>BIOS:
>>    To determine if a specific HP Z600 system
>>    has the C2 revision of the chipset:
>>    1=2E Use the BIOS setup menu to access the =E2=80=9CBoot
>>    Block Date=E2=80=9D from the =E2=80=9CSystem Information Menu=2E=E2=
=80=9D
>>    All B3-based systems will have a =E2=80=9C1/30/09=E2=80=9D
>>    date and C2-based systems will have a
>>    =E2=80=9C01/07/10=E2=80=9D date=2E
>>
>>> So the way Xen detects the "bug" (pci rev 13) is not sufficient, as
>>my Z600
>>> shows pci rev13 with lspci but 0xB54h (board rev only on Z600) with
>>dmidecode
>>> I would suggest first to have an override xen kernel boot option to
>>disable the disablement in this code section=2E Or just patch this part
>>out of the Xen code and rebuild xen=2E If this stuff really crashes, one
>>will see it=2E
>>
>>Patching it out is out of the question, this check if there for a
>>reason=2E
>>
>>> So please build a new xen without this stupid disablement or please
>>add an override boot command for it=2E
>>>=20
>>> Please see the attached upgrade manual of Z600 and the errata "spec
>>update" by Intel=2E
>>> You see that the C2 stepping is not affected by the bugs refered to
>>in the xen code,
>>> so removing that section or adding better detection of the mask
>>revision (B3 vs=2E C2)=C2=A0 of 5520 host bridge would allow=C2=A0 many =
users to
>>operate Qubes4=2E
>>
>>Maybe someone else has an alternative idea?
>>
>>--=20
>>Best Regards,
>>Marek Marczykowski-G=C3=B3recki
>>Invisible Things Lab
>
>--=20
>Sent from my Android device with K-9 Mail=2E Please excuse my brevity=2E

--=20
Sent from my Android device with K-9 Mail=2E Please excuse my brevity=2E
------YHTYBSYSXR5OXSINZTGD1880WITC75
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head></head><body>Just for documentation,<br>heat sink reassembled u=
sing normal grey cpu thermal grease<br><br><br><div class=3D"gmail_quote">O=
n July 25, 2021 4:30:39 PM GMT+02:00, Ludwig Jaffe &lt;luja@openhardware=2E=
de&gt; wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt=
 0=2E8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi Marek, as you are refered as Xen expert I thought you are the only one =
in the qubes project to know about it=2E<br>Hi people at Xen, it would be n=
ice to add override options in such code for test purposes something like f=
orceiommu=3D1 <br><br>So disassembling the cooler the chip reads <br>"SLH3P=
" the errata sheet refers it to C2 stepping and states it supports Intel Tr=
usted Execution TXT=2E<br>This is on page 11 (3rd line of table) of said in=
tel errata=2E<br><br>So things get a bit wired=2E Having an override in the=
 kernel boot flags would surely help <br>to bring the computer up with cube=
s as it should be supported according to yhe laser markings=2E Maybe the pc=
i-revisions are writen into registers of the host bridge at the time the bi=
os does pci(e) config cycles and a buggy bios could simply write buggy pci =
revisions (just an assumption)=2E Laser markings on the die should be trust=
ed=2E<br><br>Regards,<br><br>luja<br><br><br><div class=3D"gmail_quote">On =
July 25, 2021 3:55:52 PM GMT+02:00, "Marek Marczykowski-G=C3=B3recki" &lt;m=
armarek@invisiblethingslab=2Ecom&gt; wrote:<blockquote class=3D"gmail_quote=
" style=3D"margin: 0pt 0pt 0pt 0=2E8ex; border-left: 1px solid rgb(204, 204=
, 204); padding-left: 1ex;">
<pre class=3D"k9mail">On Sun, Jul 25, 2021 at 02:31:17PM +0200, luja wrote=
:<br><blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 1ex 0=2E8ex=
; border-left: 1px solid #729fcf; padding-left: 1ex;">Hi Marek, Hi all,<br>=
</blockquote><br>Hi luja,<br><br>First of all, please use appropriate maili=
ng list for such emails, not<br>email individual developers privately=2E I'=
m adding xen-devel here=2E<br><br><blockquote class=3D"gmail_quote" style=
=3D"margin: 0pt 0pt 1ex 0=2E8ex; border-left: 1px solid #729fcf; padding-le=
ft: 1ex;"><br>On a HP Z600 I am trying to run qubes=2E<br>The Xen log says =
that the Chipset is affected by Intel-Errate #47, #53<br><br>the code in Xe=
n is this:<br><br>"<br>/* 5500/5520/X58 Chipset Interrupt remapping errata,=
 for stepping B-3=2E<br>* Fixed in stepping C-2=2E */<br>static void __init=
 tylersburg_intremap_quirk(void)<br>{<br>uint32_t bus, device;<br>uint8_t r=
ev;<br><br>for ( bus =3D 0; bus &lt; 0x100; bus++ )<br>{<br>/* Match on Sys=
tem Management Registers on Device 20 Function 0 */<br>device =3D pci_conf_=
read32(0, bus, 20, 0, PCI_VENDOR_ID);<br>rev =3D pci_conf_read8(0, bus, 20,=
 0, PCI_REVISION_ID);<br><br>if ( rev =3D=3D 0x13 &amp;&amp; device =3D=3D =
0x342e8086 )<br>{<br>printk(XENLOG_WARNING VTDPREFIX<br>"Disabling IOMMU du=
e to Intel 5500/5520/X58 Chipset errata #47, #53\n");<br>iommu_enable =3D 0=
;<br>break;<br>}<br>}<br>}<br><br>"<br><br>But! rev 0x13 is not suficient t=
o detect the "wrong" host bridge=2E<br></blockquote><br>According to the sp=
ec by Intel (page 11 in the PDF you attached), it is=2E<br><br><blockquote =
class=3D"gmail_quote" style=3D"margin: 0pt 0pt 1ex 0=2E8ex; border-left: 1p=
x solid #729fcf; padding-left: 1ex;">This Z600 is equipped with 0B54h mainb=
oard as can be seen with dmi-decode=2E<br><br>The manual states that 0B54h =
mainboard has the "newer C2 stepping",<br>so it is *not* affected by Intel =
"spec update" (nota bene: Intel updates the<br>spec, others report erratas)=
 bugs &nbsp;<br></blockquote><br>The code above checks for rev 0x13, and th=
e spec (page 11) clearly says that rev<br>0x13 is stepping B-3=2E Stepping =
C-2 is rev 0x22=2E So, if this check<br>triggers for you, I'm afraid you ha=
ve the affected chipset=2E<br><br>According to HP doc you attached, you can=
 additionally confirm it via<br>BIOS:<br>    To determine if a specific HP =
Z600 system<br>    has the C2 revision of the chipset:<br>    1=2E Use the =
BIOS setup menu to access the =E2=80=9CBoot<br>    Block Date=E2=80=9D from=
 the =E2=80=9CSystem Information Menu=2E=E2=80=9D<br>    All B3-based syste=
ms will have a =E2=80=9C1/30/09=E2=80=9D<br>    date and C2-based systems w=
ill have a<br>    =E2=80=9C01/07/10=E2=80=9D date=2E<br><br><blockquote cla=
ss=3D"gmail_quote" style=3D"margin: 0pt 0pt 1ex 0=2E8ex; border-left: 1px s=
olid #729fcf; padding-left: 1ex;">So the way Xen detects the "bug" (pci rev=
 13) is not sufficient, as my Z600<br>shows pci rev13 with lspci but 0xB54h=
 (board rev only on Z600) with dmidecode<br>I would suggest first to have a=
n override xen kernel boot option to disable the disablement in this code s=
ection=2E Or just patch this part out of the Xen code and rebuild xen=2E If=
 this stuff really crashes, one will see it=2E<br></blockquote><br>Patching=
 it out is out of the question, this check if there for a<br>reason=2E<br><=
br><blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 1ex 0=2E8ex; =
border-left: 1px solid #729fcf; padding-left: 1ex;">So please build a new x=
en without this stupid disablement or please add an override boot command f=
or it=2E<br><br>Please see the attached upgrade manual of Z600 and the erra=
ta "spec update" by Intel=2E<br>You see that the C2 stepping is not affecte=
d by the bugs refered to in the xen code,<br>so removing that section or ad=
ding better detection of the mask revision (B3 vs=2E C2)&nbsp; of 5520 host=
 bridge would allow&nbsp; many users to operate Qubes4=2E<br></blockquote><=
br>Maybe someone else has an alternative idea?<br></pre></blockquote></div>=
</blockquote></div><br>-- <br>Sent from my Android device with K-9 Mail=2E =
Please excuse my brevity=2E</body></html>
------YHTYBSYSXR5OXSINZTGD1880WITC75--

------0RL2SH357S7EKHO4KZJ4N5S5M8EHBB
Content-Type: image/jpeg;
 name="IMG_20210725_163710.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="IMG_20210725_163710.jpg";
 size=5979970

/9j/4YIMRXhpZgAATU0AKgAAAAgADAEAAAMAAAABD6AAAAEBAAMAAAABC7gAAAEPAAIAAAAJAAAA
ngEQAAIAAAAPAAAAqAESAAMAAAABAAYAAAEaAAUAAAABAAAAuAEbAAUAAAABAAAAwAEoAAMAAAAB
AAIAAAEyAAIAAAAUAAAAyAITAAMAAAABAAEAAIdpAAQAAAABAAAA3IglAAQAAAABAAAEzAAABaZt
b3Rvcm9sYQAAbW90byBlKDcpIHBsdXMAAAAAAEgAAAABAAAASAAAAAEyMDIxOjA3OjI1IDE2OjM3
OjEwAAAhgpoABQAAAAEAAAJugp0ABQAAAAEAAAJ2iCIAAwAAAAEAAgAAiCcAAwAAAAEAdgAAkAAA
BwAAAAQwMjIwkAMAAgAAABQAAAJ+kAQAAgAAABQAAAKSkQEABwAAAAQBAgMAkgEACgAAAAEAAAKm
kgIABQAAAAEAAAKukgMACgAAAAEAAAK2kgQACgAAAAEAAAK+kgUABQAAAAEAAALGkgcAAwAAAAEA
AgAAkggAAwAAAAEAFQAAkgkAAwAAAAEACQAAkgoABQAAAAEAAALOknwABwAAAbcAAALWkpAAAgAA
AAcAAASOkpEAAgAAAAcAAASWkpIAAgAAAAcAAASeoAAABwAAAAQwMTAwoAEAAwAAAAEAAQAAoAIA
BAAAAAEAAA+goAMABAAAAAEAAAu4oAUABAAAAAEAAASuohcAAwAAAAEAAQAAowEAAQAAAAEBAAAA
pAIAAwAAAAEAAAAApAMAAwAAAAEAAAAApAQABQAAAAEAAASmpAUAAwAAAAEAGwAApAYAAwAAAAEA
AAAAAAAAAAAAAAEAAABkAAAAqgAAAGQyMDIxOjA3OjI1IDE2OjM3OjEwADIwMjE6MDc6MjUgMTY6
Mzc6MTAAAAAZ8wAAA+gAAACZAAAAZAAAASYAAABkAAAAAgAAAAAAAACZAAAAZAAAEmYAAAPoTU9U
AAEBAQEAGVUAAAIAAAAVAAABOlUSAAQAAAABAAAAWlUgAAgAAAABAAUAAFUxAAgAAAABAAQAAFVA
AAEAAAABYQAAAFVQAAEAAAABWgAAAFVhAAgAAAABAAEAAFURAAQAAAABAcnDgFUCAAEAAAABOQAA
AFUDAAEAAAABIgAAAGZeAAIAAAANAAABT2ZfAAkAAAABAAAAAGZgAAkAAAABAAAAAGZhAAkAAAAB
AAAAAGZiAAkAAAABAAAAAGZjAAkAAAABAAAAAGcDAAIAAAAGAAABXGcAAAIAAAAhAAABYmZAAAIA
AAAFAAABg2cBAAIAAAALAAABiFXpAAIAAAAIAAABk2cCAAIAAAARAAABm2cEAAIAAAADTkMAAGcG
AAIAAAADNDkAAGcFAAIAAAALAAABrAAAAABRUFpTMzAuMzAtUTMtMzgtNjktMQBtb3RfczVrZ20x
c3QAT2ZpbG0ANWNhMWM2N2U2Y2U4ZmZmZmZmZmZmZmZmZmZmZmZmZmYAMHgzMgBTQzI4Qzk1Mzg2
AERvbmd3b28AU3VubnkgMzkyOTJBLTQwMAAyMDIwLzEwLzIzAAA4MDA3OTMAADgwMDc5MwAAODAw
NzkzAAAAAABkAAAAZAACAAEAAgAAAARSOTgAAAIABwAAAAQwMTAwAAAAAAAJAAEAAgAAAAJOAAAA
AAIABQAAAAMAAAU+AAMAAgAAAAJFAAAAAAQABQAAAAMAAAVWAAUAAQAAAAEAAAAAAAYABQAAAAEA
AAVuAAcABQAAAAMAAAV2ABsABwAAAAwAAAWOAB0AAgAAAAsAAAWaAAAAAAAAADIAAAABAAAAFgAA
AAEAAKNQAAAnEAAAAAgAAAABAAAALAAAAAEAB7fgAAAnEAADXCoAAAPoAAAADgAAAAEAAAAlAAAA
AQAAAAkAAAABQVNDSUkAAABncHMAMjAyMTowNzoyNQAAAAmgAgAEAAAAAQAAAUCgAwAEAAAAAQAA
APABAwADAAAAAQAGAAABEgADAAAAAQAGAAABGgAFAAAAAQAABhgBGwAFAAAAAQAABiABKAADAAAA
AQACAAACAQAEAAAAAQAABigCAgAEAAAAAQAAe9wAAAAAAAAASAAAAAEAAABIAAAAAf/Y/9sAhAAF
AwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQi
HiQcHh8eAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
Hh4eHh4eHh4eHh4eHh7/wAARCADwAUADASIAAhEBAxEB/8QBogAAAQUBAQEBAQEAAAAAAAAAAAEC
AwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR
8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5
eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj
5OXm5+jp6vHy8/T19vf4+foBAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCxEAAgECBAQDBAcF
BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygp
KjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJma
oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/90A
BAAU/9oADAMBAAIRAxEAPwDxBfFPiO509dNmuWdUJBcssZ4OMFyOe3vXLQ3d2LtZ4izzrJuQkbjw
cjIOQea39ctbSfxlNLfx+XaBlkuPKIX5eM4468gYpdf8ajH2bw5p0WkW/krDIyAebJgAZyB8ucZ4
55OSc0tb2ij05dHNnP6s0zIWkQpnCcoEzj2HB+vfFM0gYt7k+qhf1qjPPNNt82WSTb03MTitLSIn
eykKITlucDOABkmm9EFOzm2trP8AKx0+lpi1iAHbmvX76K5t/DLW1m8EEuFVZfMXkjGcFRg5xjj6
9a8q0mJne2jAJJKgKAeenpXpviKHUZbjTjazNfRfblb7My4xjON0hH4ZNbUI3qI8zFO0TlPi/brZ
ahZWn2y8uGEEZIuGD7CuRhTgHaO1cR4YwL2A4HG9ye/Sug+J9/Jd+KLqeSx+xy733xbw4DBQDggA
YyDWL4TTMzPx8sJ/nSq/FqaUtKZ6J4F1210a1udRuFkeNrgRbIwCxOCenBx75r6Q+H+sTN4Kjngk
lt7WW3uJ2UDleBg/UV83eDYJUgsJTA7wtdyNKwQkINu0E54HXqP6V9G+FhMPhfNqDwtHCunzv5qo
TtOOn6UYiMVRjZHNFt1ZHxV4mcz6hezli3m3TknuctmtTwir/abJBHvD3AyPxrI1AHKtx805OD35
rpfAsKtq+mh3kVfMydv51Edzrnsen38Ml8+nXl751sbTEjWUS5D7W4/HA4rG/aDmWWx00LtXMjNt
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
FiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SF
hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo
6ery8/T19vf4+fr/3QAEAPr/2gAMAwEAAhEDEQA/APvL9uj9gjw98OL3xV4h8LQQ6hYzWk17pPiL
R4LpZLW0ZBstpvMkbBjO4MTyUUNxkgfkHovxG8ZeArzU9B1DV57jSNTsHtrTUr+0ZvIkIwskbHH7
oZ568dK85+FX/BTL4/a14Vi8Hat4r1zXxYXc0N74Y8T6151//Z7HbvWSLaksGGKklSQCK6w+JfCn
xR02NLS3h0HUrS5dr3To1knWDd/qwN2MN1+bOOegIr5jG1Xw1gIYZ141FBJXSstrXfZv8z9CyChx
dU9nPM6fNJWd4tPXdtK+iXb8FsfZP7Lvxe1PRfGep2PijUIdR8PePvDd9aeNtB1lfMjjmjhle0uI
GwAqEliApwd7BhnBHw38Yvh/Fovirxfqngp4LaG3xdz+FoZWnSKykIKSJISe7HjOcY9q+k/2fPjl
4Y+CmteOdB+J+iy3Np4j0tIdG8Sx6XHLHbOuY2jbaDtjYFCWyMYGcgnHyz4qudGuPFWs6h4H1ea9
0uFT9lnsNQAmWzl3KuVViQpwRg9sZrw8PWqPBYyvVXKpqOvRpaJv00P6d8JY/wBn8XKrh706dWDv
ppOUXdtpaX38z6R/ZT+J3wf8I+LPFes3OtXenyx+BBb2ugahIq3s13M6+YIMkAqGiyBnPzdOOPs3
wp8Xv+EsuviD4pNpYyr4T0uOODT7uNMgSZVI5euWZkXnPfFeO3H7IPgTX/2e/D17cyHw94tvNNt9
Z0rxleuFktrhwG+zyuoUmNnJGCSVJ46YPG/CDxr4f+Geh+Ofht8d0Hh7xh40vdPm8O31vZNKmoAO
5Vt65DKh2HdnHJ7g18pha2Cq4F1KUW6j0fn2a+Xo9D2uLaGQ59mNfF4OpJ14NR5Wruyerj1a3811
0PDvjh+zX4z+Hmhv8c/DXhxLLwPquqBtc0K1jM39nCV9quq5Jjj3OB1OPQcAewfADUNc+K/we8Zf
D+zTTrrxr4M1eDW/C9hbRhLq6sH2LcBGOAxXIJB55GOTiv0e+IniiztPh74wtNMitby40jRtNGqa
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

------0RL2SH357S7EKHO4KZJ4N5S5M8EHBB--


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 18:42:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 18:42:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160831.295318 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7j4o-00052T-4F; Sun, 25 Jul 2021 18:42:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160831.295318; Sun, 25 Jul 2021 18:42:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7j4o-00052M-0V; Sun, 25 Jul 2021 18:42:14 +0000
Received: by outflank-mailman (input) for mailman id 160831;
 Sun, 25 Jul 2021 18:42:12 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7j4l-00052C-W9; Sun, 25 Jul 2021 18:42:12 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7j4l-0000uF-SL; Sun, 25 Jul 2021 18:42:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7j4l-00011o-K3; Sun, 25 Jul 2021 18:42:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7j4l-0006Te-Ih; Sun, 25 Jul 2021 18:42:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=D9xt1/b72pppEESeXQGrdaCLq9nJB+KKfXheWW05fYg=; b=Qp1xxmSfm+vj3PiTSTDM6CcD48
	nL99gzk6GGcjpdLZbGxTqt+LO+H8lL7pvT8Eo6PjUSRbqVMAAnHuXrJrdV1twkIWywu9FVceNknz3
	NEzPnYH7EYHhjC/VZ4jyNT/PqFK3qdWdJ08OPpn7R0alzzZQvrgG/SE+I0zMSZiYEZAA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163986-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163986: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 18:42:11 +0000

flight 163986 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163986/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   51 days
Failing since        162368  2021-06-04 15:42:59 Z   51 days  140 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    2 days   10 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 19:44:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 19:44:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160839.295333 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7k2k-0003AZ-Kw; Sun, 25 Jul 2021 19:44:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160839.295333; Sun, 25 Jul 2021 19:44:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7k2k-0003AS-Ho; Sun, 25 Jul 2021 19:44:10 +0000
Received: by outflank-mailman (input) for mailman id 160839;
 Sun, 25 Jul 2021 19:44:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7k2i-0003AI-Qy; Sun, 25 Jul 2021 19:44:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7k2i-0001nE-FI; Sun, 25 Jul 2021 19:44:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7k2i-0004HI-1k; Sun, 25 Jul 2021 19:44:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7k2i-0008UO-1F; Sun, 25 Jul 2021 19:44:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=F0tl7D2EdTOCH7Mr2/WDkgegS0nDLGZzT0ytJfaH2ZM=; b=QF5lbX2J/oYUZGYHVGOtNfh1Fy
	dTP5n4FJLRbEmf5v+rQce6+TW3Tq66oLSINkMpluqzt7m2vh8wzX5FS+VtAQzyIbRSzMbDKGyMJnh
	75ohfveeRnpp9Fuc9WymZgawSpoiewrD5RcZwbvBynhIhOPIPel3/P09+Xm9yAAyGYV8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163985-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 163985: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=0a0beb1f9120cf49a429e12f4ea69ddd74471d68
X-Osstest-Versions-That:
    linux=9afc0c209685bc239e45b6ca1ea07186b78c7437
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 19:44:08 +0000

flight 163985 linux-5.4 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163985/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163844
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163844
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163844
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163844
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 163844
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163844
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163844
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163844
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163844
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163844
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163844
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163844
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 linux                0a0beb1f9120cf49a429e12f4ea69ddd74471d68
baseline version:
 linux                9afc0c209685bc239e45b6ca1ea07186b78c7437

Last test of basis   163844  2021-07-20 14:40:23 Z    5 days
Testing same since   163985  2021-07-25 12:42:25 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alexander Ovechkin <ovov@yandex-team.ru>
  Alexandre Belloni <alexandre.belloni@bootlin.com>
  Alexandre Torgue <alexandre.torgue@foss.st.com>
  Arnaldo Carvalho de Melo <acme@redhat.com>
  Benjamin Gaignard <benjamin.gaignard@collabora.com>
  Bixuan Cui <cuibixuan@huawei.com>
  Christian König <christian.koenig@amd.com>
  Colin Ian King <colin.king@canonical.com>
  Corentin Labbe <clabbe@baylibre.com>
  Daniel Borkmann <daniel@iogearbox.net>
  Daniel Lezcano <daniel.lezcano@linaro.org>
  Daniel Rosenberg <drosen@google.com>
  David S. Miller <davem@davemloft.net>
  Dmitry Yakunin <zeil@yandex-team.ru>
  Elaine Zhang <zhangqing@rock-chips.com>
  Eric Dumazet <edumazet@google.com>
  Ezequiel Garcia <ezequiel@collabora.com>
  Florian Fainelli <f.fainelli@gmail.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Gregory CLEMENT <gregory.clement@bootlin.com>
  Grygorii Strashko <grygorii.strashko@ti.com>
  Gu Shengxian <gushengxian@yulong.com>
  Guenter Roeck <linux@roeck-us.net>
  Hangbin Liu <liuhangbin@gmail.com>
  Heiko Carstens <hca@linux.ibm.com>
  Heiko Stuebner <heiko@sntech.de>
  Hulk Robot <hulkrobot@huawei.com>
  Jaegeuk Kim <jaegeuk@kernel.org>
  Jason Ekstrand <jason@jlekstrand.net>
  Javed Hasan <jhasan@marvell.com>
  Johan Jonker <jbx6244@gmail.com>
  Jon Hunter <jonathanh@nvidia.com>
  Jonathan Neuschäfer <j.neuschaefer@gmx.net>
  Krzysztof Kozlowski <krzk@kernel.org>
  Linus Walleij <linus.walleij@linaro.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Lucas Stach <l.stach@pengutronix.de>
  Marek Behún <kabel@kernel.org>
  Marek Behún <marek.behun@nic.cz>
  Martin K. Petersen <martin.petersen@oracle.com>
  Martin KaFai Lau <kafai@fb.com>
  Masahiro Yamada <masahiroy@kernel.org>
  Matthias Maennich <maennich@google.com>
  Maxime Ripard <maxime@cerno.tech>
  Mian Yousaf Kaukab <ykaukab@suse.de>
  Mike Snitzer <snitzer@redhat.com>
  Mikulas Patocka <mpatocka@redhat.com>
  Nanyong Sun <sunnanyong@huawei.com>
  Nikolay Aleksandrov <nikolay@nvidia.com>
  Odin Ugedal <odin@uged.al>
  Pablo Neira Ayuso <pablo@netfilter.org>
  Pali Rohár <pali@kernel.org>
  Paulo Alcantara (SUSE) <pc@cjr.nz>
  Paulo Alcantara <pc@cjr.nz>
  Pavel Skripkin <paskripkin@gmail.com>
  Peter Chen <peter.chen@kernel.org>
  Peter Zijlstra (Intel) <peterz@infradead.org>
  Philipp Zabel <p.zabel@pengutronix.de>
  Primoz Fiser <primoz.fiser@norik.com>
  Rafał Miłecki <rafal@milecki.pl>
  Riccardo Mancini <rickyman7@gmail.com>
  Sanket Parmar <sparmar@cadence.com>
  Sasha Levin <sashal@kernel.org>
  Shawn Guo <shawnguo@kernel.org>
  Shuah Khan <skhan@linuxfoundation.org>
  Steve French <stfrench@microsoft.com>
  Sudeep Holla <sudeep.holla@arm.com>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Taehee Yoo <ap420073@gmail.com>
  Thierry Reding <treding@nvidia.com>
  Tony Lindgren <tony@atomide.com>
  Vadim Fedorenko <vfedorenko@novek.ru>
  Vasily Averin <vvs@virtuozzo.com>
  Vasily Gorbik <gor@linux.ibm.com>
  wenxu <wenxu@ucloud.cn>
  Wolfgang Bumiller <w.bumiller@proxmox.com>
  Yang Yingliang <yangyingliang@huawei.com>
  Yufen Yu <yuyufen@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   9afc0c209685..0a0beb1f9120  0a0beb1f9120cf49a429e12f4ea69ddd74471d68 -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 20:47:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 20:47:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160848.295347 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7l1u-0001W1-9C; Sun, 25 Jul 2021 20:47:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160848.295347; Sun, 25 Jul 2021 20:47:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7l1u-0001Vu-62; Sun, 25 Jul 2021 20:47:22 +0000
Received: by outflank-mailman (input) for mailman id 160848;
 Sun, 25 Jul 2021 20:47:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Uk94=MR=apertussolutions.com=dpsmith@srs-us1.protection.inumbo.net>)
 id 1m7l1s-0001Vl-V5
 for xen-devel@lists.xenproject.org; Sun, 25 Jul 2021 20:47:21 +0000
Received: from sender4-of-o51.zoho.com (unknown [136.143.188.51])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8061b522-ed89-11eb-95d8-12813bfff9fa;
 Sun, 25 Jul 2021 20:47:19 +0000 (UTC)
Received: from [10.10.1.24] (static-72-81-132-2.bltmmd.fios.verizon.net
 [72.81.132.2]) by mx.zohomail.com
 with SMTPS id 1627246031852574.667026235216;
 Sun, 25 Jul 2021 13:47:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8061b522-ed89-11eb-95d8-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; t=1627246033; cv=none; 
	d=zohomail.com; s=zohoarc; 
	b=F6zz9fTE4sYUzMPwv1UTZhN2/DQbcLGTilYX6soEjmoMkYF30miX8GQtr6czJFDgkm/qjIMjAPmOVSjyDfEY7Efo+y/Md0q4D3Ht6B7ZNMFEgAhq6U6lqWw3MIgGUUhOIt9lQtujYIy5muAYZtjsrUo52JXyxh/fDYT1GOn2MDw=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; 
	t=1627246033; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; 
	bh=CKrBufg6MB5+iFrVnARAdi22f0rXilfH/nP4BlPmyM8=; 
	b=PQ2KEvCu48pHUfoyFXYJYL1H6e7iNOOshTK6TMm9bJ9/0Z8RFue1dXFcs+E9jbYvtqkGzabStlg73vIciDq/lbwLmIJDdYMadBStWAu1sewuMdzmVF7c7BE9KHsCR5mRGfk8fHd2OfSXSFYmeepzibTsBkSqMCXhyiG5HDNKdcc=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass  header.i=apertussolutions.com;
	spf=pass  smtp.mailfrom=dpsmith@apertussolutions.com;
	dmarc=pass header.from=<dpsmith@apertussolutions.com>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1627246033;
	s=zoho; d=apertussolutions.com; i=dpsmith@apertussolutions.com;
	h=To:Cc:References:From:Subject:Message-ID:Date:MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding;
	bh=CKrBufg6MB5+iFrVnARAdi22f0rXilfH/nP4BlPmyM8=;
	b=rTjihLNk7Op9JxvsVoOnGcTYVmA3npoQsiS9kC5ysXo3rkF8vrgxAAKwnITlJlRC
	/XKBtBnEO1YoR94WlXKx0RzE1MXdt+fv7SfuKSbOT7HOdpsC6sI0Gyae8J0r4o3IOMn
	AdwDt44yknqAAnovj91UmOXbfdbyXVsGdgOx+6q0=
To: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Wei Liu <wl@xen.org>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 xen-devel@lists.xenproject.org
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
 <20210712203233.20289-7-dpsmith@apertussolutions.com>
 <e4aea947-ae36-7791-dd95-94ce0e60a62a@suse.com>
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Subject: Re: [PATCH v2 06/10] xsm: enable xsm to always be included
Message-ID: <9be23243-3f1d-fd63-944a-fccfa12fc54d@apertussolutions.com>
Date: Sun, 25 Jul 2021 16:47:10 -0400
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <e4aea947-ae36-7791-dd95-94ce0e60a62a@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-ZohoMailClient: External

On 7/19/21 6:24 AM, Jan Beulich wrote:
> On 12.07.2021 22:32, Daniel P. Smith wrote:
>> --- a/xen/common/Kconfig
>> +++ b/xen/common/Kconfig
>> @@ -200,23 +200,20 @@ config XENOPROF
>>  
>>  	  If unsure, say Y.
>>  
>> -config XSM
>> -	bool "Xen Security Modules support"
>> -	default ARM
>> -	---help---
>> -	  Enables the security framework known as Xen Security Modules which
>> -	  allows administrators fine-grained control over a Xen domain and
>> -	  its capabilities by defining permissible interactions between domains,
>> -	  the hypervisor itself, and related resources such as memory and
>> -	  devices.
>> +menu "Xen Security Modules"
> 
> I remain unconvinced of the removal of this top level option. I don't
> view my concern on code size / performance as "unreasonable" (as Andrew
> did call it) when comparing with the current !XSM configuration, and I
> also remain to be convinced of people who had to simply answer 'n' to
> the XSM kconfig prompt being happy to make an informed decision for all
> the (previously sub-)options that they will now be prompted for. As
> said before - it is one thing to re-work what exactly !XSM means
> internally (and the conversion away from inline functions may very well
> be a win; we simply don't know without you showing e.g. bloat-o-meter
> like data). It is another to require in-depth knowledge to configure
> Xen that previously wasn't required.

For me personally a concern about code size / performance itself is not
"unreasonable" but I would say it is a bit disingenuous to use it to
defend a position that the security framework should be special
conditioned and kept convoluted considering, 1) other subsystems, e.g.
iommu, do not appear to me to have the same subjugation requiring a
special case of one hook set over another, 2) the architecture (Arm)
which IMHO has the greatest concern over code size / performance is also
the architecture with the only security supported configuration that
requires an XSM enabled configuration, 3) this approach effectively
requires the maintaining of two sets of hook handlers which increases
work and risk for vulnerability introduction, and 4) based on the
discussions at the Developers Summit, no one seemed to be aware that the
only logical difference between !XSM and XSM was the invocation
mechanism, inline vs call-site, let alone that XSM_HOOK represented no
control check.

To bring context to the discussion, after applying the clean up patches
(everything up to the patch dropping !XSM) of the patch set, the
bloat-o-meter shows a 0.18% increase going from !XSM to XSM (without
SILO and Flask). IMHO this increase does not justify keeping the
convoluted gyrations being done to swap in an optimized security hook
when no other security module is enabled. In fact we should be working
to make the security framework clear and concise. I am all for
maximizing performance while doing so but the end goal is for it to be
clear and concise so that it can be reasoned about by everybody.

As to your position that this increases configuration complexity, I
would have to strongly disagree. I have worked to ensure no new
configuration steps are necessary. The default config will only have XSM
and the default/dummy policy enabled unless on Arm which will enable
SILO and make it the default policy. Prior to this if XSM was enabled,
the default policy was forced to Flask. While I am an advocate for
Flask, I do not agree this is a reasonable configuration. It now works
such that,
    - if you enable only SILO, it is set as the default
    - if you enable only Flask, it is set as the default
    - if you enable both SILO & Flask, it uses SILO as the default
Which basically works such that if one selects a policy, then it assumes
that policy is desired to be used, and when more than one is selected it
will default to the one that functions most like classic Dom0 model.
IMHO this is much more intuitive. Now one alternative I am thinking
about that might be a bit of a compromise is to move the default policy
selection up to the same level as XSM menu. That would make it so one
could immediately see what the default policy is but must go into the
XSM menu if they want to alter what policy modules are available.

> Keeping the top-level option would then also make it unnecessary to
> alter some of the (prior sub-)options' defaults.

I would beg to differ, it now makes the builder have to explicitly enter
that sub-option if they desire to enable an alternate security model,
e.g. have explicit intent instead of having the potential for accidental
selection.

> As to Andrew previously having said
> 
> "There is no such thing as !XSM even in staging right now.
> 
>  All over Xen, we have calls to xsm_*() functions which, even in the !XSM
>  case, contain a non-trivial security policy."
> 
> Yes, this is one possible viewpoint, which I simply do not share. I view
> the xsm_*() calls in the !XSM case as simple surrogates, not anything that
> deserves the name "module". This is actually supported by the help text
> of the XSM Kconfig option saying "which allows administrators fine-grained
> control": There's nothing fine-grained with what currently is !XSM.

IMHO that is a very unfortunate viewpoint. An xsm_*() call is an access
control check point where a decision needs to be made on whether an
access to a resource should be allowed. In a kernel with a monolithic
access control there would still be an implicit or an explicit access
check necessary at this location. What XSM does is makes all the access
check locations to be explicit checks where the decision can be handled
by different access control frameworks to be plugged in to implement the
security architecture that the implementer requires.

>> -	  If unsure, say N.
>> +config XSM_EVTCHN_LABELING
>> +	bool "Enables security labeling of event channels"
> 
> Does this really need to have a prompt, instead of simply being
> selected by the module(s) needing it? IOW what do users gain when they
> answer y here but n for XSM_FLASK?
> 
> Furthermore, if the prompt is to remain, then I'll have to again
> raise the question of ordering of options: This way, via e.g. the
> "syncconfig" or "oldconfig" targets, I'd be asked for the setting here
> when, if I'd then also set XSM_FLASK=y, the question was in vein - the
> option will be set to y anyway.
> 
>> +	default n
> 
> May I ask to omit "default n" lines. I'm unaware of anything good they
> do.

It has been dropped

>> @@ -265,24 +262,26 @@ config XSM_SILO
>>  	  If unsure, say Y.
>>  
>>  choice
>> -	prompt "Default XSM implementation"
>> -	depends on XSM
>> +	prompt "Default XSM module"
>>  	default XSM_SILO_DEFAULT if XSM_SILO && ARM
>>  	default XSM_FLASK_DEFAULT if XSM_FLASK
>>  	default XSM_SILO_DEFAULT if XSM_SILO
>>  	default XSM_DUMMY_DEFAULT
>>  	config XSM_DUMMY_DEFAULT
>> -		bool "Match non-XSM behavior"
>> +		bool "Classic Dom0 behavior"
>>  	config XSM_FLASK_DEFAULT
>>  		bool "FLux Advanced Security Kernel" if XSM_FLASK
>>  	config XSM_SILO_DEFAULT
>>  		bool "SILO" if XSM_SILO
>> +
>>  endchoice
> 
> Nit: I see only two consistent formatting options here: Either there is
> a blank line ahead of "endchoice" and after "choice", or there are none
> in both places. I don't mind which one it is, but I do mind
> inconsistencies getting introduced.

ack

v/r,
dps



From xen-devel-bounces@lists.xenproject.org Sun Jul 25 22:12:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 22:12:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160858.295360 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7mM1-0002V7-3b; Sun, 25 Jul 2021 22:12:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160858.295360; Sun, 25 Jul 2021 22:12:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7mM1-0002V0-05; Sun, 25 Jul 2021 22:12:13 +0000
Received: by outflank-mailman (input) for mailman id 160858;
 Sun, 25 Jul 2021 22:12:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7mLy-0002Uq-T0; Sun, 25 Jul 2021 22:12:10 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7mLy-0003zR-JN; Sun, 25 Jul 2021 22:12:10 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7mLy-0000G8-9Y; Sun, 25 Jul 2021 22:12:10 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7mLy-0000Sr-93; Sun, 25 Jul 2021 22:12:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NpOULSKWBDiEOrk6zIHJiUvKdpulzUqGQLWYcwS9mXY=; b=6jZIxoROHGvNsq1VjRkzR3+7Rs
	J9vqf1AbowqTh9+r1HyBTw2MNj9Qe0+mHqNA7eaJo+X6qtSN7H/XlFpc3lNPY2q0JVCKs3l9+6gyW
	MjYyufNS/35tugEtg3ZSEw+xtJlV3IWIm/dhjrN1aDqubHf7ll7b4FZeSikCm2UwLqpQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163987-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163987: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:guest-start:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:guest-start:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-libvirt-xsm:guest-start/debian.repeat:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=d8079fac168168b25677dc16c00ffaf9fb7df723
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 22:12:10 +0000

flight 163987 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163987/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start    fail in 163983 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-arm64-arm64-xl-thunderx 13 debian-fixup     fail in 163983 pass in 163987
 test-arm64-arm64-libvirt-xsm 13 debian-fixup     fail in 163983 pass in 163987
 test-arm64-arm64-xl          13 debian-fixup               fail pass in 163983
 test-amd64-amd64-libvirt-xsm 20 guest-start/debian.repeat  fail pass in 163983

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

version targeted for testing:
 linux                d8079fac168168b25677dc16c00ffaf9fb7df723
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  359 days
Failing since        152366  2020-08-01 20:49:34 Z  358 days  615 attempts
Testing same since   163983  2021-07-25 05:22:46 Z    0 days    2 attempts

------------------------------------------------------------
6729 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 fail    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1986694 lines long.)


From xen-devel-bounces@lists.xenproject.org Sun Jul 25 22:45:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sun, 25 Jul 2021 22:45:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160867.295374 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7ms7-00066V-On; Sun, 25 Jul 2021 22:45:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160867.295374; Sun, 25 Jul 2021 22:45:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7ms7-00066O-Lo; Sun, 25 Jul 2021 22:45:23 +0000
Received: by outflank-mailman (input) for mailman id 160867;
 Sun, 25 Jul 2021 22:45:23 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7ms6-00066E-UY; Sun, 25 Jul 2021 22:45:22 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7ms6-0004Rm-59; Sun, 25 Jul 2021 22:45:22 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7ms5-0000zW-Qt; Sun, 25 Jul 2021 22:45:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7ms5-0006ye-QS; Sun, 25 Jul 2021 22:45:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=HX5P/e/XkNQ4CNs+BKAXoKLm4Ag0zrzb+NpfJIIC1hk=; b=0Xf9RPeVh4OETepKpRT2x+bxkW
	vUETuKB1pDcoWTFNP36tWy1EkPgFOXvGd5IsIJUx+4DJuutaAx2vH4TWcLJN0fs76cluS7dRjU7M3
	W9UwOlD0H1z0zdOQbHDIeYyLychvLcfIpp70umNr4e2lhDh/E0Av6JX5s+fZkO/whmRc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163988-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163988: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sun, 25 Jul 2021 22:45:21 +0000

flight 163988 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163988/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   51 days
Failing since        162368  2021-06-04 15:42:59 Z   51 days  141 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    3 days   11 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 03:38:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 03:38:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160876.295390 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7rRM-0001Tr-0N; Mon, 26 Jul 2021 03:38:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160876.295390; Mon, 26 Jul 2021 03:38:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7rRL-0001Tj-Qy; Mon, 26 Jul 2021 03:38:03 +0000
Received: by outflank-mailman (input) for mailman id 160876;
 Mon, 26 Jul 2021 03:38:02 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rRK-0001TZ-Fo; Mon, 26 Jul 2021 03:38:02 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rRJ-00081f-8d; Mon, 26 Jul 2021 03:38:01 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rRJ-0003O5-0c; Mon, 26 Jul 2021 03:38:01 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rRJ-0007i2-08; Mon, 26 Jul 2021 03:38:01 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=jaVxTbeRRTVIX2lBhN+6MiSkA+Zwd+My3aqasXh3amY=; b=ZpYJwfPmgtbISAVnAreaB+wl4g
	8Xx53LgusGT3RRUIMpdksNnuS92jJiA5fiLA2h55FLFErDsa6sN/4cYCMzTqPn2Q3/2bE10mt6iNm
	SF+d6eD8nQU6kvg/wcbmD1gtZCxUrn1FXKvtJcXPYYxnWfHZaW/VtygEnJAc1xon8tZI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163990-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163990: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 03:38:01 +0000

flight 163990 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163990/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   51 days
Failing since        162368  2021-06-04 15:42:59 Z   51 days  142 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    3 days   12 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 03:46:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 03:46:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160884.295405 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7rZb-00038Y-Vk; Mon, 26 Jul 2021 03:46:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160884.295405; Mon, 26 Jul 2021 03:46:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7rZb-00038R-SV; Mon, 26 Jul 2021 03:46:35 +0000
Received: by outflank-mailman (input) for mailman id 160884;
 Mon, 26 Jul 2021 03:46:34 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rZa-00038H-AC; Mon, 26 Jul 2021 03:46:34 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rZa-0008A7-1E; Mon, 26 Jul 2021 03:46:34 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rZZ-0003gR-PT; Mon, 26 Jul 2021 03:46:33 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7rZZ-0006lA-P0; Mon, 26 Jul 2021 03:46:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=GPKUHJ6IxN+ifJRYsleHabM+Y4zmpFWy/DlvWTQUqwQ=; b=mxEvTtVmj3XCnucQ8FiEuuiK4N
	xKU7d3xwWWcI9nsBAOExngtcz2XDahf/7OveN/KKheLXEdTmm74xeeHPOh2mQFbPldq/9fionCUJq
	VjCRY3hHkWWJPCm6lgyoyC5mS/QbD94HnFHCxH+9aJpBIWAv9CJtaMR5eqwFZ+VwXBBQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163989-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163989: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=ff1176468d368232b684f75e82563369208bc371
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 03:46:33 +0000

flight 163989 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163989/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332

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

version targeted for testing:
 linux                ff1176468d368232b684f75e82563369208bc371
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  359 days
Failing since        152366  2020-08-01 20:49:34 Z  358 days  616 attempts
Testing same since   163989  2021-07-25 22:41:50 Z    0 days    1 attempts

------------------------------------------------------------
6730 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987295 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 05:31:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 05:31:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160891.295419 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7tDP-0006iG-Sr; Mon, 26 Jul 2021 05:31:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160891.295419; Mon, 26 Jul 2021 05:31:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7tDP-0006i9-P5; Mon, 26 Jul 2021 05:31:47 +0000
Received: by outflank-mailman (input) for mailman id 160891;
 Mon, 26 Jul 2021 05:31:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=8u5V=MS=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m7tDN-0006i3-Vw
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 05:31:46 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7400be05-ecca-41b6-b704-67e434b41223;
 Mon, 26 Jul 2021 05:31:44 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id B61801FE45;
 Mon, 26 Jul 2021 05:31:43 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 8904F13301;
 Mon, 26 Jul 2021 05:31:43 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id P1SIH79I/mA7ewAAGKfGzw
 (envelope-from <jgross@suse.com>); Mon, 26 Jul 2021 05:31:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7400be05-ecca-41b6-b704-67e434b41223
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627277503; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=vZHvo4Gc5Z8txlrhDrgRR4OfEf8Rw0N0CZYwNsl/lI0=;
	b=esKClEnqb5nZ2IPfNGfB9iYU98RI5LFf42jzoEkTTnXPwSqvaE2c25GrzSFm3XQse+cn31
	h31DHg7ON7l9KCxKw0HYjqIW/XLiN0CgUY7Rusx9HYDWBMTe0jDq+AI6UFqfa1ZstKHAX4
	6J+7Q0l9aNi156HYPnJl2cPiAD6sIuc=
Subject: Re: [PATCH] tools/libxl: add missing blank in message
To: Alan Robinson <Alan.Robinson@fujitsu.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Anthony PERARD <anthony.perard@citrix.com>
References: <20210723102308.5332-1-Alan.Robinson@fujitsu.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <6fd2eaf5-7434-58a3-2d98-47f87e0b9dd1@suse.com>
Date: Mon, 26 Jul 2021 07:31:42 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210723102308.5332-1-Alan.Robinson@fujitsu.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="zicbqteDGMne9nxwBcLRnVtEZcYg3bmd9"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--zicbqteDGMne9nxwBcLRnVtEZcYg3bmd9
Content-Type: multipart/mixed; boundary="nszvXc7XE6jl6RTskRvLX306JNB0N1zqD";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Alan Robinson <Alan.Robinson@fujitsu.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Anthony PERARD <anthony.perard@citrix.com>
Message-ID: <6fd2eaf5-7434-58a3-2d98-47f87e0b9dd1@suse.com>
Subject: Re: [PATCH] tools/libxl: add missing blank in message
References: <20210723102308.5332-1-Alan.Robinson@fujitsu.com>
In-Reply-To: <20210723102308.5332-1-Alan.Robinson@fujitsu.com>

--nszvXc7XE6jl6RTskRvLX306JNB0N1zqD
Content-Type: multipart/mixed;
 boundary="------------CA7B209A717B80D92FACD79B"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------CA7B209A717B80D92FACD79B
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 23.07.21 12:23, Alan Robinson wrote:
> From: Alan Robinson <alan.robinson@fujitsu.com>
>=20
> Add trailing blank to first part of concatenated string giving
> "an emulated" instead of "anemulated".
>=20
> Signed-off-by: Alan Robinson <alan.robinson@fujitsu.com>
> ---
>   tools/libs/light/libxl_dm.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>=20
> diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
> index dbd3c7f278..755641604a 100644
> --- a/tools/libs/light/libxl_dm.c
> +++ b/tools/libs/light/libxl_dm.c
> @@ -1893,7 +1893,7 @@ static int libxl__build_device_model_args_new(lib=
xl__gc *gc,
>                   if (format =3D=3D NULL) {
>                       LOGD(WARN, guest_domid,
>                            "Unable to determine disk image format: %s\n=
"
> -                         "Disk will be available via PV drivers but no=
t as an"
> +                         "Disk will be available via PV drivers but no=
t as an "
>                            "emulated disk.",

I'd rather have a longer line without splitting the message (splitting
after the '\n' is fine, of course). This will make it easier to find the
coding emitting the message when searching for the whole printed line.


Juergen

--------------CA7B209A717B80D92FACD79B
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------CA7B209A717B80D92FACD79B--

--nszvXc7XE6jl6RTskRvLX306JNB0N1zqD--

--zicbqteDGMne9nxwBcLRnVtEZcYg3bmd9
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmD+SL4FAwAAAAAACgkQsN6d1ii/Ey/4
2Qf/SXV6il+tuNztVt3L3jNGMGPvN90e4iOFc+zElbgCUtEjwwHvMgXiz6DeOJsKSs1NvbCsbdWv
b1RpNyG/lY92ArNzqmYensBOPuq5pJoQ81N4ZFX0nZlbISMlpBHtzF4SeQu/Cq+Ton2bxOFVSTo7
RGDoYSDh84J1U7Nr4X10oQRvI/E7d1zOs+iMplUm+kmWB41f/u+4OpG+J+EKWkfqm4LDAGIcKttD
Vqs5NCWp3P+raziN0EihKhc44pRbnDPanVfl5OuSEV6XW6IWU79MgQqgJt3ZjDvNaH+5/4wY5jzU
Gi2CHmaF3EInOoO1dWOZWgEEcKW6azJS1hz7QqMTsA==
=FriQ
-----END PGP SIGNATURE-----

--zicbqteDGMne9nxwBcLRnVtEZcYg3bmd9--


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 09:26:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 09:26:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160902.295432 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7wry-00027a-KB; Mon, 26 Jul 2021 09:25:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160902.295432; Mon, 26 Jul 2021 09:25:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7wry-00027T-GV; Mon, 26 Jul 2021 09:25:54 +0000
Received: by outflank-mailman (input) for mailman id 160902;
 Mon, 26 Jul 2021 09:25:53 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7wrx-00027J-IM; Mon, 26 Jul 2021 09:25:53 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7wrx-0005kJ-4u; Mon, 26 Jul 2021 09:25:53 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7wrw-00055d-QV; Mon, 26 Jul 2021 09:25:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7wrw-0002AR-Pw; Mon, 26 Jul 2021 09:25:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=7xz+B2guGe8rufoIspp88ZBbKogdIA46xLoR2vi/d0k=; b=feZ7CcDQkyMX6QKyYQVVlYKgBC
	qFMdEzGu0kIUopAOLXt4trwNarfSECQOhX5nsTX9nnNpeaLvJOb/g+P7LHZ2a9zTWZ9eNCIXs6/co
	IPNbpia6g5q4eZ8OAsP6K4dQHOVW9J136r4Z0z7WIjPYRvPq3oFm/H+BdpSM1nsklL4g=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163992-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163992: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=332632abf3eb23fe7fcb0601bc715ba829b33e79
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 09:25:52 +0000

flight 163992 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163992/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 332632abf3eb23fe7fcb0601bc715ba829b33e79
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   52 days
Failing since        162368  2021-06-04 15:42:59 Z   51 days  143 attempts
Testing same since   163917  2021-07-22 20:41:16 Z    3 days   13 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4026 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 10:19:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 10:19:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160909.295447 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7xhL-0006zC-Ks; Mon, 26 Jul 2021 10:18:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160909.295447; Mon, 26 Jul 2021 10:18:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7xhL-0006z5-Hm; Mon, 26 Jul 2021 10:18:59 +0000
Received: by outflank-mailman (input) for mailman id 160909;
 Mon, 26 Jul 2021 10:18:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7xhK-0006yv-FK; Mon, 26 Jul 2021 10:18:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7xhK-0006a5-3I; Mon, 26 Jul 2021 10:18:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7xhJ-0007J2-PJ; Mon, 26 Jul 2021 10:18:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7xhJ-00035M-Oq; Mon, 26 Jul 2021 10:18:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=1yLadojxQL0eHtMA2XS2UlEf0I2vZIzZYw0RGMm+c74=; b=GRDDYTxltDtiETbL1oaROM0Vwf
	Ts8JN0TWfh/xTUWOs8B1KgXrdNqh8KHrFGlX9Z+vMiYA16RjCWARjLI3wspcJ/bd21eKMZUmh7vXQ
	9+eq5CYnVzMzgX+QLcX4su4b/mi7G5FvI4kjUR4F2G48Af5oyXIgHIlVniO7trybYfKA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163994-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 163994: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=cd72f0cd9f7b0b7d0e2964d5dd38d2a95fa784c4
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 10:18:57 +0000

flight 163994 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163994/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              cd72f0cd9f7b0b7d0e2964d5dd38d2a95fa784c4
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  381 days
Failing since        151818  2020-07-11 04:18:52 Z  380 days  372 attempts
Testing same since   163973  2021-07-24 04:20:09 Z    2 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 66711 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 11:32:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 11:32:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160917.295461 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7yqD-0005jV-FQ; Mon, 26 Jul 2021 11:32:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160917.295461; Mon, 26 Jul 2021 11:32:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7yqD-0005jO-CD; Mon, 26 Jul 2021 11:32:13 +0000
Received: by outflank-mailman (input) for mailman id 160917;
 Mon, 26 Jul 2021 11:32:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7yqB-0005jE-De; Mon, 26 Jul 2021 11:32:11 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7yqB-0007au-0g; Mon, 26 Jul 2021 11:32:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7yqA-0000tI-Lx; Mon, 26 Jul 2021 11:32:10 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7yqA-0001vE-LS; Mon, 26 Jul 2021 11:32:10 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=w1xmw5gAvWFh+9mGJdHSMTnNhXEXMWjTkJ/GB0dafao=; b=VK6fnRaH3FJHc/jHEdsfJiKFiz
	Koa7+i4ZeB0wBxSpygEEo73C6YhkWVbwUZ08CqOh+EHjIEhZY+dBwP+megy3K/44vL2l60M+Dvn7u
	dBLAhxBZZNRlJZmXc+WqbJCcIWXKCCspHsW0VobWXt1uPLtEh2XOGVDfY706KqAGOuJk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163991-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 163991: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 11:32:10 +0000

flight 163991 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163991/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-rtds     14 guest-start      fail in 163981 pass in 163991
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 163981

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 163971
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163981
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163981
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163981
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163981
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163981
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163981
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163981
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163981
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163981
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163981
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163981
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163991  2021-07-26 01:53:00 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Mon Jul 26 12:33:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 12:33:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160926.295481 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7zmo-00031y-4w; Mon, 26 Jul 2021 12:32:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160926.295481; Mon, 26 Jul 2021 12:32:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7zmo-00031r-1k; Mon, 26 Jul 2021 12:32:46 +0000
Received: by outflank-mailman (input) for mailman id 160926;
 Mon, 26 Jul 2021 12:32:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=c1XZ=MS=gmail.com=rob.townley@srs-us1.protection.inumbo.net>)
 id 1m7zmn-00031l-3B
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 12:32:45 +0000
Received: from mail-ua1-x934.google.com (unknown [2607:f8b0:4864:20::934])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 44c457ff-ba19-4e53-973e-c0e242577d47;
 Mon, 26 Jul 2021 12:32:41 +0000 (UTC)
Received: by mail-ua1-x934.google.com with SMTP id w11so3464579uar.4
 for <xen-devel@lists.xenproject.org>; Mon, 26 Jul 2021 05:32:41 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 44c457ff-ba19-4e53-973e-c0e242577d47
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:reply-to:from:date:message-id
         :subject:to:cc;
        bh=1xdW/DMpA8cOYNesvQjkeu91ogoViPeft0cA7f+6ji0=;
        b=J7UeZpT6SyB/ArzDIdHNydAClAOVDtkw4c/Ha6Wr442331zlo+Jp2u0Hrgd1chZIPs
         RYwDWmK09/51qB/LsXsIhRG8E0i77rF0REvwweTmBSxhWTloRSKSv0a8tmQe2Kz3Xuss
         TOIuhzj5mTqVi3lRiT2mHQ+fOYHpf5F3DK/EhD5pERpw+28gP4ilLsp6YXpWwORXuZ2t
         ap0tk83HP/qCEbxysQ019RQEx3nBXCoCO+p+kZ8NWO/8yPTU1A6a/ZcihhQLOp1fqAM6
         crSncZAqMD2Una0eDLcsGIxSpR5MvTedIF8khoBtgGTUVvLd0HMCT2LmL6GMbWmSIINP
         HwSw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:reply-to
         :from:date:message-id:subject:to:cc;
        bh=1xdW/DMpA8cOYNesvQjkeu91ogoViPeft0cA7f+6ji0=;
        b=ONTpBeT41Vgj3wtpeojoU1l2qFk19x9t+OqWIM7ZOqqqPAqWhFd3ExVA8F/vI7xTyr
         xBiWZp2NjCEQow24ugWT+3GIh8mM9QCJV4ijuNZ44RZZadcm5dLEAhU67qHhx7g+67WY
         bxkaWMaYn0vByprxAJ9HNhtMePEePjMbwyNLq1Dqjqwoh4qF16KlSI1zMzBaKdS0XMGn
         lGghRL8lmrEvNKN1XpX6pNDoV/vS6KaWrUYtug9rL7W1dcKsVZH14lEUChXzXg75gNZQ
         eJLgdgW+IgeTvHdsYyoucHxpT/+zJOBTyLGVzqIy+DAD/EeaESbjIZ9owdkcpDjV6jwg
         fxDA==
X-Gm-Message-State: AOAM531tPJgI2lZFKwYLD9XuAZVoU9zp0y5eE08vJ653rxBywPAfsCPc
	BP6ttBF/6WTsyVn28/hwSpSFTeYT8uMaYrPJSUs=
X-Google-Smtp-Source: ABdhPJxFncG2PwfqosQw4+3hY0dYYKZ7TB63SWPjps3WyfPFAFnTjKm7SYXAfkf5pSnwyQRpvqulPsFf8HN3yfSZEcA=
X-Received: by 2002:ab0:20b0:: with SMTP id y16mr1457816ual.68.1627302761377;
 Mon, 26 Jul 2021 05:32:41 -0700 (PDT)
MIME-Version: 1.0
References: <001401d77de6$34ff5de0$9efe19a0$@comcast.net> <CA+VdTb-_L-7Zz31DoXiQjTycV8w7rjg0Df76MboDCqKC77ZGzg@mail.gmail.com>
 <007a01d780ff$5caff450$160fdcf0$@comcast.net>
In-Reply-To: <007a01d780ff$5caff450$160fdcf0$@comcast.net>
Reply-To: Rob.Townley@gmail.com
From: Rob Townley <rob.townley@gmail.com>
Date: Mon, 26 Jul 2021 07:32:30 -0500
Message-ID: <CA+VdTb8xmKEe6QrZBwCH_4HrRY1EVTEX08H77A4oO_O+Wqrhdw@mail.gmail.com>
Subject: Re: Nested Virtualization of Hyper-V on Xen Not Working
To: Xentrigued <xentrigued@comcast.net>
Cc: xen-devel@lists.xenproject.org
Content-Type: multipart/alternative; boundary="00000000000008b43105c805f37b"

--00000000000008b43105c805f37b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Yes, definitely TooMuchInformation.

  I hope that single hardware test kit VHD download imports into xen, runs,
and gives us a starting point and clear work items.

On Sat, Jul 24, 2021 at 9:47 PM Xentrigued <xentrigued@comcast.net> wrote:

> First and foremost, many thanks for your thoughtful and thorough response
> and also for providing a multitude of genuinely helpful information!
>
>
>
> Secondly:  Wow, that=E2=80=99s quite a homework assignment!!
>
>
>
> I will absolutely begin to work my way through the resources you cited an=
d
> will report back once some of those tests have been completed.  You=E2=80=
=99ve
> given me an excellent starting point for further inquiry.
>
>
>
> To be very honest, I wasn=E2=80=99t sure where to turn next in the event =
that no
> member of this august body had anything to say about this.  (It=E2=80=99s=
 kind of
> intimidating and not unlike going before the Wizard of Oz.)
>
>
>
> So again, thank you so much for all of the good information and also for
> your kindness in reaching out.
>
>
>
> *From:* Rob Townley <rob.townley@gmail.com>
> *Sent:* Saturday, July 24, 2021 9:33 PM
> *To:* Xentrigued <xentrigued@comcast.net>
> *Cc:* xen-devel@lists.xenproject.org
> *Subject:* Re: Nested Virtualization of Hyper-V on Xen Not Working
>
>
>
> I encourage you to run the Windows Hardware Lab Kit 11/02/2018
> <https://docs.microsoft.com/en-us/windows-hardware/test/hlk/> or HLK or
> maybe try the VHLK.  The VHLK
> <https://docs.microsoft.com/en-us/windows-hardware/test/hlk/getstarted/ge=
tstarted-vhlk>is
> a free VHD file download of win2016 that has all the tests necessary
> built-in.  So you could manually download the test kit on your existing
> Windows VM or attempt the VHD.   "*Default login credentials are
> HLKAdminUser with password Testpassword,1"   *
>
>
>
> Please post the results.   Citrix 8.1 and 8.2 are listed as validated
> <https://www.windowsservercatalog.com/results.aspx?&bCatID=3D1521&cpID=3D=
2185&avc=3D0&ava=3D0&avt=3D0&avq=3D0&OR=3D1&PGS=3D25>
> and so would be very interesting to see any differences in test results
> running XCP-ng 8.2 and Citrix 8.2.
>
>
>
> Why run the hardware lab kit in a virtualized environment and directly on
> the underlying hardware?  Because those tests are used to validate for th=
e
> SVVP <https://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.htm>=
.
> Microsoft has something similar to their Hardware Compatibility List, aka
> HCL.   SVVP
> <https://www.windowsservercatalog.com/svvp.aspx?svvppage=3Dsvvp.htm> is
> Microsoft's Server Virtualization Validation Program.   SVVP validates th=
at
> Windows Operating Systems and APPS run on top of other hypervisors and on=
ce
> validated will receive technical support.  SVVP has been around for over =
a
> decade but has of course changed over the years.   Recently,  it has been
> making news because Win11 / Win2022 requires a TPM 2.0 chip, but XCP-NG
> XEN does not yet support that <https://github.com/xcp-ng/xcp/issues/471>.
>    If the hypervisor is SVVP certified, then running MS Hyper-V Windows o=
n
> top of any validated hypervisor would be much more likely to work and
> possibly supported directly by MS and tsanet.org.  Canonical and RedHat
> are in tsanet, but would like to see the Linux Foundation or Vates itself=
.
>
>
>
> Microsoft server software and supported virtualization
> environments 09/08/2020 6 minutes to read
> <https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizat=
ion/microsoft-server-software-support-policy>
> Support partners for non-Microsoft hardware virtualization software
> <https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizat=
ion/non-microsoft-hardware-virtualization-software>
>
> WindowsServerCatalog.com and then click on SVVP in the upper right and
> then Products
> <https://www.windowsservercatalog.com/results.aspx?&bCatID=3D1521&cpID=3D=
0&avc=3D0&ava=3D0&avq=3D0&OR=3D1&PGS=3D25>
>
>
>
> <https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtualizat=
ion/non-microsoft-hardware-virtualization-software>
>
> Design Session - Alternative vTPM 2.0 Backend to Comply with Upcoming SVV=
P
> Changes <https://www.youtube.com/watch?v=3DabkRRcoYWCQ>
>
> https://www.youtube.com/watch?v=3DabkRRcoYWCQ
>
>
>
> Enabling UEFI Secure Boot on Xen - Robert Eshleman, Vates SAS
> <https://www.youtube.com/watch?v=3DA_IhKjK7EgA>
>
> https://www.youtube.com/watch?v=3DA_IhKjK7EgA&t=3D388s
> Support vTPM for guests #471 https://github.com/xcp-ng/xcp/issues/471
> <https://github.com/xcp-ng/xcp/issues/471>
>
> https://github.com/xcp-ng/xcp/issues/471
>
> https://docs.microsoft.com/en-us/windows-hardware/test/hlk/
>
>
>
> On Tue, Jul 20, 2021 at 11:12 PM Xentrigued <xentrigued@comcast.net>
> wrote:
>
> RATIONALE: Features in recent versions of Windows now REQUIRE Hyper-V
> support to work.  In particular, Windows Containers, Sandbox, Docker
> Desktop
> and the Windows Subsystem for Linux version 2 (WSL2).  Running Windows in=
 a
> VM as a development and test platform is currently a common requirement f=
or
> various user segments and will likely become necessary for production in
> the
> future.  Nested virtualization of Hyper-V currently works on VMware ESXi,
> Microsoft Hyper-V and KVM-based hypervisors.  This puts Xen and its
> derivatives at a disadvantage when choosing a hypervisor.
>
> WHAT IS NOT WORKING?  Provided the requirements set forth in:
> https://wiki.xenproject.org/wiki/Nested_Virtualization_in_Xen have been
> met,
> an hvm guest running Windows 10 PRO Version 21H1 x64 shows that all four
> requirements for running Hyper-V are available using the msinfo32.exe or
> systeminfo.exe commands.  More granular knowledge of the CPU capabilities
> exposed to the guest can be observed using the Sysinternals Coreinfo64.ex=
e
> command.  CPUID flags present appear to mirror those on other working
> nested
> hypervisor configurations.
>
> Enabling Windows Features for Hyper-V, Virtual Machine Platform, etc. all
> appear to work without error.  However, after the finishing reboot, Hyper=
-V
> is simply not active.  This--despite the fact that vmcompute.exe (Hyper-V
> host compute service) is running and there are no errors in the logs.  In
> addition, all four Hyper-V prerequisites continue to show as available.
>
> By contrast, after the finishing reboot of an analogous Windows VM runnin=
g
> on ESXi, the four prerequisites are reversed:  hypervisor is now active;
> vmx, ept and urg (unrestricted guest) are all off as viewed with the
> Coreinfo64.exe -v command.  Furthermore, all functions requiring Hyper-V
> are
> now active and working as expected.
>
> This deficiency has been observed in two test setups running Xen 4.15 fro=
m
> source and XCP-ng 8.2, both running on Intel with all of the latest,
> generally available patches.  We presume that the same behavior is presen=
t
> on Citrix Hypervisor 8.2 as well.
>
> SUMMATION:
> Clearly, much effort has already been expended to support the Viridian
> enlightenments that optimize running Windows on Xen.  It also looks like =
a
> significant amount of effort has been put forth to advance nested
> virtualization in general.
>
> Therefore, if it would be helpful, I am willing to perform testing and
> provide feedback and logs as appropriate in order to help get this workin=
g.
>
> While my day job is managing a heterogeneous collection of systems runnin=
g
> on various hypervisors, I have learned the rudiments of integrating patch=
es
> and rebuilding Xen from source so could no doubt be useful in assisting y=
ou
> with this worthwhile endeavor.
>
>
>

--00000000000008b43105c805f37b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Yes, definitely TooMuchInformation.</div><div dir=3D"auto=
"><br></div><div dir=3D"auto">=C2=A0=C2=A0I hope that single hardware test =
kit VHD download imports into xen, runs, and gives us a starting point and =
clear work items. =C2=A0</div><div><br><div class=3D"gmail_quote"><div dir=
=3D"ltr" class=3D"gmail_attr">On Sat, Jul 24, 2021 at 9:47 PM Xentrigued &l=
t;<a href=3D"mailto:xentrigued@comcast.net">xentrigued@comcast.net</a>&gt; =
wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div lang=3D"EN-US" link=3D"=
blue" vlink=3D"purple" style=3D"word-wrap:break-word"><div class=3D"m_49114=
42955352881957WordSection1"><p class=3D"MsoNormal"><span style=3D"font-size=
:12.0pt;font-family:&quot;Courier New&quot;">First and foremost, many thank=
s for your thoughtful and thorough response and also for providing a multit=
ude of genuinely helpful information!<u></u><u></u></span></p><p class=3D"M=
soNormal"><span style=3D"font-size:12.0pt;font-family:&quot;Courier New&quo=
t;"><u></u>=C2=A0<u></u></span></p><p class=3D"MsoNormal"><span style=3D"fo=
nt-size:12.0pt;font-family:&quot;Courier New&quot;">Secondly:=C2=A0 Wow, th=
at=E2=80=99s quite a homework assignment!!<u></u><u></u></span></p><p class=
=3D"MsoNormal"><span style=3D"font-size:12.0pt;font-family:&quot;Courier Ne=
w&quot;"><u></u>=C2=A0<u></u></span></p><p class=3D"MsoNormal"><span style=
=3D"font-size:12.0pt;font-family:&quot;Courier New&quot;">I will absolutely=
 begin to work my way through the resources you cited and will report back =
once some of those tests have been completed.=C2=A0 You=E2=80=99ve given me=
 an excellent starting point for further inquiry.<u></u><u></u></span></p><=
p class=3D"MsoNormal"><span style=3D"font-size:12.0pt;font-family:&quot;Cou=
rier New&quot;"><u></u>=C2=A0<u></u></span></p><p class=3D"MsoNormal"><span=
 style=3D"font-size:12.0pt;font-family:&quot;Courier New&quot;">To be very =
honest, I wasn=E2=80=99t sure where to turn next in the event that no membe=
r of this august body had anything to say about this.=C2=A0 (It=E2=80=99s k=
ind of intimidating and not unlike going before the Wizard of Oz.)<u></u><u=
></u></span></p><p class=3D"MsoNormal"><span style=3D"font-size:12.0pt;font=
-family:&quot;Courier New&quot;"><u></u>=C2=A0<u></u></span></p><p class=3D=
"MsoNormal"><span style=3D"font-size:12.0pt;font-family:&quot;Courier New&q=
uot;">So again, thank you so much for all of the good information and also =
for your kindness in reaching out.<u></u><u></u></span></p></div></div><div=
 lang=3D"EN-US" link=3D"blue" vlink=3D"purple" style=3D"word-wrap:break-wor=
d"><div class=3D"m_4911442955352881957WordSection1"><p class=3D"MsoNormal">=
<span style=3D"font-size:12.0pt;font-family:&quot;Courier New&quot;"><u></u=
>=C2=A0<u></u></span></p><div style=3D"border:none;border-top:solid #e1e1e1=
 1.0pt;padding:3.0pt 0in 0in 0in"><p class=3D"MsoNormal"><b>From:</b> Rob T=
ownley &lt;<a href=3D"mailto:rob.townley@gmail.com" target=3D"_blank">rob.t=
ownley@gmail.com</a>&gt; <br><b>Sent:</b> Saturday, July 24, 2021 9:33 PM<b=
r><b>To:</b> Xentrigued &lt;<a href=3D"mailto:xentrigued@comcast.net" targe=
t=3D"_blank">xentrigued@comcast.net</a>&gt;<br><b>Cc:</b> <a href=3D"mailto=
:xen-devel@lists.xenproject.org" target=3D"_blank">xen-devel@lists.xenproje=
ct.org</a><br><b>Subject:</b> Re: Nested Virtualization of Hyper-V on Xen N=
ot Working<u></u><u></u></p></div><p class=3D"MsoNormal"><u></u>=C2=A0<u></=
u></p><div><div><p class=3D"MsoNormal"><span style=3D"font-family:&quot;Tim=
es New Roman&quot;,serif">I encourage you to run the=C2=A0<a href=3D"https:=
//docs.microsoft.com/en-us/windows-hardware/test/hlk/" target=3D"_blank">Wi=
ndows Hardware Lab Kit 11/02/2018</a> or HLK or maybe try the VHLK.=C2=A0 T=
he <a href=3D"https://docs.microsoft.com/en-us/windows-hardware/test/hlk/ge=
tstarted/getstarted-vhlk" target=3D"_blank">VHLK </a>is a free VHD file dow=
nload of win2016 that has all the tests necessary built-in.=C2=A0 So you co=
uld manually download the test kit on your existing Windows VM or attempt t=
he VHD.=C2=A0=C2=A0 &quot;<i>Default login credentials are HLKAdminUser wit=
h password Testpassword,1&quot;=C2=A0=C2=A0=C2=A0</i> <u></u><u></u></span>=
</p></div><div><p class=3D"MsoNormal"><span style=3D"font-family:&quot;Time=
s New Roman&quot;,serif"><u></u>=C2=A0<u></u></span></p></div><div><p class=
=3D"MsoNormal"><span style=3D"font-family:&quot;Times New Roman&quot;,serif=
">Please post the results.=C2=A0=C2=A0 <a href=3D"https://www.windowsserver=
catalog.com/results.aspx?&amp;bCatID=3D1521&amp;cpID=3D2185&amp;avc=3D0&amp=
;ava=3D0&amp;avt=3D0&amp;avq=3D0&amp;OR=3D1&amp;PGS=3D25" target=3D"_blank"=
>Citrix 8.1 and 8.2 are listed as validated</a> and so would be very intere=
sting to see any differences in test results running XCP-ng 8.2 and Citrix =
8.2. =C2=A0<u></u><u></u></span></p></div><div><p class=3D"MsoNormal"><span=
 style=3D"font-family:&quot;Times New Roman&quot;,serif"><u></u>=C2=A0<u></=
u></span></p></div><div><p class=3D"MsoNormal"><span style=3D"font-family:&=
quot;Times New Roman&quot;,serif">Why run the hardware lab kit in a virtual=
ized environment and directly on the underlying hardware?=C2=A0 Because tho=
se tests are used to validate for the <a href=3D"https://www.windowsserverc=
atalog.com/svvp.aspx?svvppage=3Dsvvp.htm" target=3D"_blank">SVVP</a>.=C2=A0=
=C2=A0 Microsoft has something similar to their Hardware Compatibility List=
, aka HCL. =C2=A0 <a href=3D"https://www.windowsservercatalog.com/svvp.aspx=
?svvppage=3Dsvvp.htm" target=3D"_blank">SVVP</a> is Microsoft&#39;s Server =
Virtualization Validation Program. =C2=A0 SVVP validates that Windows Opera=
ting Systems and APPS run on top of other hypervisors and once validated wi=
ll receive technical support.=C2=A0 SVVP has been around for over a decade =
but has of course changed over the years. =C2=A0 Recently,=C2=A0 it has bee=
n making news because <a href=3D"https://github.com/xcp-ng/xcp/issues/471" =
target=3D"_blank">Win11 / Win2022 requires a TPM 2.0 chip, but XCP-NG XEN d=
oes not yet support that</a>. =C2=A0=C2=A0 If the hypervisor is SVVP certif=
ied, then running MS Hyper-V Windows on top of any validated hypervisor </s=
pan><span style=3D"font-size:10.0pt;font-family:&quot;Times New Roman&quot;=
,serif">would be much more likely to work and possibly supported directly b=
y MS and <a href=3D"http://tsanet.org" target=3D"_blank">tsanet.org</a></sp=
an><span style=3D"font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif=
">.=C2=A0 Canonical and RedHat are in tsanet, but would like to see the Lin=
ux Foundation or Vates itself.=C2=A0 </span><span style=3D"font-family:&quo=
t;Times New Roman&quot;,serif"><u></u><u></u></span></p></div><div><p class=
=3D"MsoNormal"><u></u>=C2=A0<u></u></p></div><div><p class=3D"MsoNormal"><a=
 href=3D"https://docs.microsoft.com/en-us/troubleshoot/windows-server/virtu=
alization/microsoft-server-software-support-policy" target=3D"_blank"><span=
 style=3D"font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Micros=
oft server software and supported virtualization environments=C2=A009/08/20=
20=C2=A06 minutes to read</span></a><u></u><u></u></p></div><div><h1 id=3D"=
m_4911442955352881957gmail-support-partners-for-non-microsoft-hardware-virt=
ualization-software"><a href=3D"https://docs.microsoft.com/en-us/troublesho=
ot/windows-server/virtualization/non-microsoft-hardware-virtualization-soft=
ware" target=3D"_blank"><span style=3D"font-size:10.0pt;font-family:&quot;A=
rial&quot;,sans-serif;font-weight:normal">Support partners for non-Microsof=
t hardware virtualization software</span></a><u></u><u></u></h1></div><div>=
<p class=3D"MsoNormal"><a href=3D"https://www.windowsservercatalog.com/resu=
lts.aspx?&amp;bCatID=3D1521&amp;cpID=3D0&amp;avc=3D0&amp;ava=3D0&amp;avq=3D=
0&amp;OR=3D1&amp;PGS=3D25" target=3D"_blank">WindowsServerCatalog.com and t=
hen click on SVVP in the upper right and then Products</a><u></u><u></u></p=
></div><div><p class=3D"MsoNormal"><a href=3D"https://docs.microsoft.com/en=
-us/troubleshoot/windows-server/virtualization/non-microsoft-hardware-virtu=
alization-software" target=3D"_blank"><span style=3D"font-size:10.0pt;font-=
family:&quot;Arial&quot;,sans-serif"><br></span></a><u></u><u></u></p></div=
><div><p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New Rom=
an&quot;,serif"><a href=3D"https://www.youtube.com/watch?v=3DabkRRcoYWCQ" t=
arget=3D"_blank">Design Session - Alternative vTPM 2.0 Backend to Comply wi=
th Upcoming SVVP Changes</a><u></u><u></u></span></p></div><div><p class=3D=
"MsoNormal"><span style=3D"font-family:&quot;Times New Roman&quot;,serif"><=
a href=3D"https://www.youtube.com/watch?v=3DabkRRcoYWCQ" target=3D"_blank">=
https://www.youtube.com/watch?v=3DabkRRcoYWCQ</a><u></u><u></u></span></p><=
/div><div><p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New=
 Roman&quot;,serif"><u></u>=C2=A0<u></u></span></p></div><div><p class=3D"M=
soNormal"><span style=3D"font-family:&quot;Times New Roman&quot;,serif"><a =
href=3D"https://www.youtube.com/watch?v=3DA_IhKjK7EgA" target=3D"_blank">En=
abling UEFI Secure Boot on Xen - Robert Eshleman, Vates SAS</a><u></u><u></=
u></span></p></div><div><p class=3D"MsoNormal"><span style=3D"font-family:&=
quot;Times New Roman&quot;,serif"><a href=3D"https://www.youtube.com/watch?=
v=3DA_IhKjK7EgA&amp;t=3D388s" target=3D"_blank">https://www.youtube.com/wat=
ch?v=3DA_IhKjK7EgA&amp;t=3D388s</a><u></u><u></u></span></p></div><div><h1>=
<span style=3D"font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif;fo=
nt-weight:normal"><a href=3D"https://github.com/xcp-ng/xcp/issues/471" targ=
et=3D"_blank">Support vTPM for guests #471 https://github.com/xcp-ng/xcp/is=
sues/471</a></span><span style=3D"font-family:&quot;Times New Roman&quot;,s=
erif"><u></u><u></u></span></h1><p class=3D"MsoNormal"><span style=3D"font-=
family:&quot;Times New Roman&quot;,serif"><a href=3D"https://github.com/xcp=
-ng/xcp/issues/471" target=3D"_blank">https://github.com/xcp-ng/xcp/issues/=
471</a><u></u><u></u></span></p><div><p class=3D"MsoNormal"><span style=3D"=
font-family:&quot;Times New Roman&quot;,serif"><a href=3D"https://docs.micr=
osoft.com/en-us/windows-hardware/test/hlk/" target=3D"_blank">https://docs.=
microsoft.com/en-us/windows-hardware/test/hlk/</a><u></u><u></u></span></p>=
</div></div></div><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p><div><div>=
<p class=3D"MsoNormal">On Tue, Jul 20, 2021 at 11:12 PM Xentrigued &lt;<a h=
ref=3D"mailto:xentrigued@comcast.net" target=3D"_blank">xentrigued@comcast.=
net</a>&gt; wrote:<u></u><u></u></p></div><blockquote style=3D"border:none;=
border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt=
;margin-right:0in"><p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt">RA=
TIONALE: Features in recent versions of Windows now REQUIRE Hyper-V<br>supp=
ort to work.=C2=A0 In particular, Windows Containers, Sandbox, Docker Deskt=
op<br>and the Windows Subsystem for Linux version 2 (WSL2).=C2=A0 Running W=
indows in a<br>VM as a development and test platform is currently a common =
requirement for<br>various user segments and will likely become necessary f=
or production in the<br>future.=C2=A0 Nested virtualization of Hyper-V curr=
ently works on VMware ESXi,<br>Microsoft Hyper-V and KVM-based hypervisors.=
=C2=A0 This puts Xen and its<br>derivatives at a disadvantage when choosing=
 a hypervisor.<br><br>WHAT IS NOT WORKING?=C2=A0 Provided the requirements =
set forth in:<br><a href=3D"https://wiki.xenproject.org/wiki/Nested_Virtual=
ization_in_Xen" target=3D"_blank">https://wiki.xenproject.org/wiki/Nested_V=
irtualization_in_Xen</a> have been met,<br>an hvm guest running Windows 10 =
PRO Version 21H1 x64 shows that all four<br>requirements for running Hyper-=
V are available using the msinfo32.exe or<br>systeminfo.exe commands.=C2=A0=
 More granular knowledge of the CPU capabilities<br>exposed to the guest ca=
n be observed using the Sysinternals Coreinfo64.exe<br>command.=C2=A0 CPUID=
 flags present appear to mirror those on other working nested<br>hypervisor=
 configurations.<br><br>Enabling Windows Features for Hyper-V, Virtual Mach=
ine Platform, etc. all<br>appear to work without error.=C2=A0 However, afte=
r the finishing reboot, Hyper-V<br>is simply not active.=C2=A0 This--despit=
e the fact that vmcompute.exe (Hyper-V<br>host compute service) is running =
and there are no errors in the logs.=C2=A0 In<br>addition, all four Hyper-V=
 prerequisites continue to show as available.<br><br>By contrast, after the=
 finishing reboot of an analogous Windows VM running<br>on ESXi, the four p=
rerequisites are reversed:=C2=A0 hypervisor is now active;<br>vmx, ept and =
urg (unrestricted guest) are all off as viewed with the<br>Coreinfo64.exe -=
v command.=C2=A0 Furthermore, all functions requiring Hyper-V are<br>now ac=
tive and working as expected.<br><br>This deficiency has been observed in t=
wo test setups running Xen 4.15 from<br>source and XCP-ng 8.2, both running=
 on Intel with all of the latest,<br>generally available patches.=C2=A0 We =
presume that the same behavior is present<br>on Citrix Hypervisor 8.2 as we=
ll.<br><br>SUMMATION:<br>Clearly, much effort has already been expended to =
support the Viridian<br>enlightenments that optimize running Windows on Xen=
.=C2=A0 It also looks like a<br>significant amount of effort has been put f=
orth to advance nested<br>virtualization in general.<br><br>Therefore, if i=
t would be helpful, I am willing to perform testing and<br>provide feedback=
 and logs as appropriate in order to help get this working.<br><br>While my=
 day job is managing a heterogeneous collection of systems running<br>on va=
rious hypervisors, I have learned the rudiments of integrating patches<br>a=
nd rebuilding Xen from source so could no doubt be useful in assisting you<=
br>with this worthwhile endeavor.<br><br><br><u></u><u></u></p></blockquote=
></div></div></div></blockquote></div></div>

--00000000000008b43105c805f37b--


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 12:33:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 12:33:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160931.295493 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7znd-0003aZ-Gq; Mon, 26 Jul 2021 12:33:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160931.295493; Mon, 26 Jul 2021 12:33:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7znd-0003aS-Bi; Mon, 26 Jul 2021 12:33:37 +0000
Received: by outflank-mailman (input) for mailman id 160931;
 Mon, 26 Jul 2021 12:33:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+3RU=MS=dingwall.me.uk=james@srs-us1.protection.inumbo.net>)
 id 1m7znc-0003aK-B7
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 12:33:36 +0000
Received: from smarthost01a.ixn.mail.zen.net.uk (unknown [212.23.1.20])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f5d59c13-2d04-44ea-9863-0104b8da0fea;
 Mon, 26 Jul 2021 12:33:34 +0000 (UTC)
Received: from [217.155.64.189] (helo=mail0.xen.dingwall.me.uk)
 by smarthost01a.ixn.mail.zen.net.uk with esmtpsa
 (TLS1.0:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1)
 (envelope-from <james@dingwall.me.uk>)
 id 1m7znZ-0001HW-5k; Mon, 26 Jul 2021 12:33:33 +0000
Received: from localhost (localhost [IPv6:::1])
 by mail0.xen.dingwall.me.uk (Postfix) with ESMTP id 5C865F1000;
 Mon, 26 Jul 2021 13:33:32 +0100 (BST)
Received: from mail0.xen.dingwall.me.uk ([127.0.0.1])
 by localhost (mail0.xen.dingwall.me.uk [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id OAngg1ZP-bP1; Mon, 26 Jul 2021 13:33:32 +0100 (BST)
Received: from ghoul.dingwall.me.uk (ghoul.dingwall.me.uk [192.168.1.200])
 by dingwall.me.uk (Postfix) with ESMTP id 41E90F0FFD;
 Mon, 26 Jul 2021 13:33:32 +0100 (BST)
Received: by ghoul.dingwall.me.uk (Postfix, from userid 1000)
 id 36E7E258; Mon, 26 Jul 2021 13:33:32 +0100 (BST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f5d59c13-2d04-44ea-9863-0104b8da0fea
X-Virus-Scanned: Debian amavisd-new at dingwall.me.uk
Date: Mon, 26 Jul 2021 13:33:32 +0100
From: James Dingwall <james@dingwall.me.uk>
To: xen-devel@lists.xenproject.org
Cc: Jan Beulich <jbeulich@suse.com>
Subject: Re: xen 4.11.4 incorrect (~3x) cpu frequency reported
Message-ID: <20210726123332.GA3844057@dingwall.me.uk>
References: <20210721092958.GA2502468@dingwall.me.uk>
 <c9c6778d-9823-4b07-fb48-604acef1f3de@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <c9c6778d-9823-4b07-fb48-604acef1f3de@suse.com>
X-Originating-smarthost01a-IP: [217.155.64.189]
Feedback-ID: 217.155.64.189

Hi Jan,

Thank you for taking the time to reply.

On Wed, Jul 21, 2021 at 12:59:11PM +0200, Jan Beulich wrote:
> On 21.07.2021 11:29, James Dingwall wrote:
> > We have a system which intermittently starts up and reports an incorrect cpu frequency:
> > 
> > # grep -i mhz /var/log/kern.log 
> > Jul 14 17:47:47 dom0 kernel: [    0.000475] tsc: Detected 2194.846 MHz processor
> > Jul 14 22:03:37 dom0 kernel: [    0.000476] tsc: Detected 2194.878 MHz processor
> > Jul 14 23:05:13 dom0 kernel: [    0.000478] tsc: Detected 2194.848 MHz processor
> > Jul 14 23:20:47 dom0 kernel: [    0.000474] tsc: Detected 2194.856 MHz processor
> > Jul 14 23:57:39 dom0 kernel: [    0.000476] tsc: Detected 2194.906 MHz processor
> > Jul 15 01:04:09 dom0 kernel: [    0.000476] tsc: Detected 2194.858 MHz processor
> > Jul 15 01:27:15 dom0 kernel: [    0.000482] tsc: Detected 2194.870 MHz processor
> > Jul 15 02:00:13 dom0 kernel: [    0.000481] tsc: Detected 2194.924 MHz processor
> > Jul 15 03:09:23 dom0 kernel: [    0.000475] tsc: Detected 2194.892 MHz processor
> > Jul 15 03:32:50 dom0 kernel: [    0.000482] tsc: Detected 2194.856 MHz processor
> > Jul 15 04:05:27 dom0 kernel: [    0.000480] tsc: Detected 2194.886 MHz processor
> > Jul 15 05:00:38 dom0 kernel: [    0.000473] tsc: Detected 2194.914 MHz processor
> > Jul 15 05:59:33 dom0 kernel: [    0.000480] tsc: Detected 2194.924 MHz processor
> > Jul 15 06:22:31 dom0 kernel: [    0.000474] tsc: Detected 2194.910 MHz processor
> > Jul 15 17:52:57 dom0 kernel: [    0.000474] tsc: Detected 2194.854 MHz processor
> > Jul 15 18:51:36 dom0 kernel: [    0.000474] tsc: Detected 2194.900 MHz processor
> > Jul 15 19:07:26 dom0 kernel: [    0.000478] tsc: Detected 2194.902 MHz processor
> > Jul 15 19:43:56 dom0 kernel: [    0.000154] tsc: Detected 6895.384 MHz processor
> 
> Well, this is output from Dom0. What we'd need to see (in addition)
> is the corresponding hypervisor log at maximum verbosity (loglvl=all).

This was just to illustrate that the dom0 usually reports the correct speed.  I'll update the xen boot options with loglvl=all and try to collect the boot messages for each case.

> 
> > The xen 's' debug output:
> > 
> > (XEN) TSC marked as reliable, warp = 0 (count=4)
> > (XEN) dom1: mode=0,ofs=0x1d1ac8bf8e,khz=6895385,inc=1
> > (XEN) dom2: mode=0,ofs=0x28bc24c746,khz=6895385,inc=1
> > (XEN) dom3: mode=0,ofs=0x345696b138,khz=6895385,inc=1
> > (XEN) dom4: mode=0,ofs=0x34f2635f31,khz=6895385,inc=1
> > (XEN) dom5: mode=0,ofs=0x3581618a7d,khz=6895385,inc=1
> > (XEN) dom6: mode=0,ofs=0x3627ca68b2,khz=6895385,inc=1
> > (XEN) dom7: mode=0,ofs=0x36dd491860,khz=6895385,inc=1
> > (XEN) dom8: mode=0,ofs=0x377a57ea1a,khz=6895385,inc=1
> > (XEN) dom9: mode=0,ofs=0x381eb175ce,khz=6895385,inc=1
> > (XEN) dom10: mode=0,ofs=0x38cab2e260,khz=6895385,inc=1
> > (XEN) dom11: mode=0,ofs=0x397fc47387,khz=6895385,inc=1
> > (XEN) dom12: mode=0,ofs=0x3a552762a0,khz=6895385,inc=1
> > 
> > A processor from /proc/cpuinfo in dom0:
> > 
> > processor       : 3
> > vendor_id       : GenuineIntel
> > cpu family      : 6
> > model           : 85
> > model name      : Intel(R) Xeon(R) D-2123IT CPU @ 2.20GHz
> > stepping        : 4
> > microcode       : 0x2000065
> > cpu MHz         : 6895.384
> > [...]
> > 
> > Xen has been built at 310ab79875cb705cc2c7daddff412b5a4899f8c9 from the stable-4.12 branch.
> 
> While this contradicts the title, both 4.11 and 4.12 are out of general
> support. Hence it would be more helpful if you could obtain respective
> logs with a more modern version of Xen - ideally from the master branch,
> or else the most recent stable one (4.15). Provided of course the issue
> continues to exist there in the first place.

That was my error, I meant the stable-4.11 branch.  We have a development environment based around 4.14.2 which I can test.  My assumption had been that xen reads or calculates this frequency and provides it to the dom0 since it is reported in the hypervisor log before dom0 is started.

Regards,
James


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 12:39:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 12:39:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160938.295505 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7zt0-0004R0-7O; Mon, 26 Jul 2021 12:39:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160938.295505; Mon, 26 Jul 2021 12:39:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7zt0-0004Qt-47; Mon, 26 Jul 2021 12:39:10 +0000
Received: by outflank-mailman (input) for mailman id 160938;
 Mon, 26 Jul 2021 12:39:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=PJJi=MS=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m7zsy-0004Qn-7H
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 12:39:08 +0000
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 07122a09-fc2d-44a5-9549-a7040130b438;
 Mon, 26 Jul 2021 12:39:07 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 07122a09-fc2d-44a5-9549-a7040130b438
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627303147;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=gTyJRNEeK98z5dPRaascPIibUbsMt8Ordgy4S6rhZuU=;
  b=h/5IWSr4ma4r/TGawGxtBRFmT1hO2oqH/+oEACH0amhlfSjVXjlCOQCH
   Fx90p686TE3WFTcrh44jtU0ougnoFIQz2VPAbEPmociLFHJxTSiIhKJhv
   YNMTxJLeXg04u/2EL0ZB4YurSWhlFvYdWz5rVLsakA+PuFDY39r5YvcHK
   I=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: qWQD+B5RnypOk/sNGzjyrGavw/mGt+t5BUmXloGLWXvOSN3X/1P1Qaw0hXSNcNDYIVoPSpVfUS
 5qBS2y+UMYMGn7ZQ1UDUXCEaMHHzyXBL20ID7yT5QVBszf5HHwJCEbb3ldFNAInB2X6bO0PaFo
 95Y5gOGjrZgZ8mfk7WA6L6KvpoWuKjx8/BqXad96oL0vMj9RjC/nHI8tJhnCdEN9Qb1OmsRx9w
 1uSVe5sXrmKB4Xa0rVNHNIeHN5S4z8b9s8lXJSNaHOE5ajVD+WLoXKXDrizVWo7qoKWPPAo2eH
 0wQK562qrtH0cblE2pXUQSCX
X-SBRS: 5.1
X-MesageID: 49124590
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:E070rqmLuJQoJ3vJNjLAA6F5ONjpDfIs3DAbv31ZSRFFG/Fxl6
 iV8sjz8SWE7Ar5OUtQ/OxoV5PsfZqxz/JICMwqTNCftWrdyQmVxeNZjbcKqgeIc0aVygce79
 YCT0EXMqyXMbEQt6fHCWeDfOod/A==
X-IronPort-AV: E=Sophos;i="5.84,270,1620705600"; 
   d="scan'208";a="49124590"
Date: Mon, 26 Jul 2021 13:39:02 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
CC: Andrew Cooper <andrew.cooper3@citrix.com>, George Dunlap
	<george.dunlap@citrix.com>, Ian Jackson <iwj@xenproject.org>, Jan Beulich
	<jbeulich@suse.com>, Julien Grall <julien@xen.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Subject: Ping: [XEN PATCH] tools/firmware/ovmf: Use OvmfXen platform file if
 exist and update OVMF
Message-ID: <YP6s5q/hAbupbB/S@perard>
References: <20210719134845.681725-1-anthony.perard@citrix.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210719134845.681725-1-anthony.perard@citrix.com>

On Mon, Jul 19, 2021 at 02:48:45PM +0100, Anthony PERARD wrote:
> A platform introduced in EDK II named OvmfXen is now the one to use for
> Xen instead of OvmfX64. It comes with PVH support.
> 
> Also, the Xen support in OvmfX64 is deprecated,
>     "deprecation notice: *dynamic* multi-VMM (QEMU vs. Xen) support in OvmfPkg"
>     https://edk2.groups.io/g/devel/message/75498
> and has been removed upstream.
> 
> We need to also update to a newer version of OVMF as OvmfXen in the
> release "edk2-stable202105" doesn't work well with Xen, so we need the
> fix b37cfdd28071 ("OvmfPkg/XenPlatformPei: Relocate shared_info page
> mapping").
> 
> Also, don't set anymore the number of thread for parallel build when
> building the newer platform, OvmfPkg/build.sh is now doing parallel
> build by default.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Can we commit this soon? Thanks.

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 12:44:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 12:44:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160945.295517 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7zxw-0005nf-RN; Mon, 26 Jul 2021 12:44:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160945.295517; Mon, 26 Jul 2021 12:44:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m7zxw-0005nY-NO; Mon, 26 Jul 2021 12:44:16 +0000
Received: by outflank-mailman (input) for mailman id 160945;
 Mon, 26 Jul 2021 12:44:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7zxv-0005nO-0I; Mon, 26 Jul 2021 12:44:15 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7zxu-0000Cw-Cb; Mon, 26 Jul 2021 12:44:14 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m7zxu-0002fB-1J; Mon, 26 Jul 2021 12:44:14 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m7zxu-0002GN-0q; Mon, 26 Jul 2021 12:44:14 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=JPAO165bs3MKrvMKxDerER6ZzjryxSwEkRJD4ZII/Go=; b=uJp2ZEVxulcWJ+AaBxw1kAWVwe
	ZiyZvhVyeVn0dOhUiOCkesuQ8h7Oub5mf0RR2OH2Awv14MZNSGgOBvQ6LcBrpR4SvW4kf1hYCQ+Ij
	Hf5acEMjPpEj0B/K4kgJJWYzoo/xCri8CYvwG2ejeDwjTOVRDi3P7b6EaN08Y27dDHwY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163993-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163993: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=ff1176468d368232b684f75e82563369208bc371
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 12:44:14 +0000

flight 163993 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163993/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332

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

version targeted for testing:
 linux                ff1176468d368232b684f75e82563369208bc371
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  359 days
Failing since        152366  2020-08-01 20:49:34 Z  358 days  617 attempts
Testing same since   163989  2021-07-25 22:41:50 Z    0 days    2 attempts

------------------------------------------------------------
6730 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987295 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 13:07:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 13:07:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160952.295532 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m80KG-0008AX-Mo; Mon, 26 Jul 2021 13:07:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160952.295532; Mon, 26 Jul 2021 13:07:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m80KG-0008AQ-Hn; Mon, 26 Jul 2021 13:07:20 +0000
Received: by outflank-mailman (input) for mailman id 160952;
 Mon, 26 Jul 2021 13:07:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=DUSJ=MS=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m80KF-0008AK-K3
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 13:07:19 +0000
Received: from mail-lf1-x12f.google.com (unknown [2a00:1450:4864:20::12f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c9364005-ace2-4930-9c40-b5121726098b;
 Mon, 26 Jul 2021 13:07:16 +0000 (UTC)
Received: by mail-lf1-x12f.google.com with SMTP id m13so15275187lfg.13
 for <xen-devel@lists.xenproject.org>; Mon, 26 Jul 2021 06:07:16 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c9364005-ace2-4930-9c40-b5121726098b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
        bh=DVeS+mT5YLCi8K9+YNgz4S4XkXfjuLUKhj5989jmeEE=;
        b=L0P2is/TuLlme7ZfRUNaFzlQP0vXUg8P3VRd6VTfmWUHa2g1k5+d5Yf2+PxMZeMKNI
         NXP8o9owuMLAqwdmz3i6Cg/wqcIJ0eFcz09E0IXc3YvnGFvkmNIGwXMEJV5w1GJcJTtg
         5+hiyyJZf8WmNj0S79tOjEChl7tpCqGi95Xm8TDl7y426vhPFMzJFYxH5/Z2UjwUqh6i
         +7BvpBt6Py0z+3IrnaH355BnopwnU2CwJVAzQO33JY7flIz4bpHkZccrngUsBcpS8VLD
         Mp0rC6pg6A5JScT5po30QeL0vMMyyVR5jywksM4Eej2xSEJa/46dPI0I05ILqw4BG6kA
         pl8w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc;
        bh=DVeS+mT5YLCi8K9+YNgz4S4XkXfjuLUKhj5989jmeEE=;
        b=AB7rFHDq7Igh/oXCVerO+vmzyKvaQZchnbhaTlD4oTRiY82AgY8KfFOfXMsl5rVo43
         30J5D0rqfxk4UmW34M5UqXf8GR5Cf87dFbdNgYogD5vHiKYp81fbEKg95Yu/I5AFl8ci
         JAUV8G9LJk5m5qKWY5SWY1lepIKoDyLlt45ibrVMDBrkJUtG7AXT1Qc69c1JVSw/S4vl
         p5s7jVH+T+eB6eZ/0+qF/gZYYt8FKjikhov0c8mjN73uhVNC76Mc+CRGzEPDlO9y3m3a
         EtPSOrEFQqhuLYwgBe5DuwSar02vsMcgKtz03aCxiApqvb4kd/+BrsL9ncqXwEvVyi8X
         5khA==
X-Gm-Message-State: AOAM531Me3P6WTjal9arSklS/pdNPRqp2MrbwjnZvvzheaHaZ+TM4gye
	WRB/7cW+sZA7jBUKxutPGBuDbQtz3kv6eoyIdsM=
X-Google-Smtp-Source: ABdhPJz55rlmWDgq/LKqQGMm5Qt/Ov4dyav4/5iKVUqLorDhChBfpgvSGFE5Gh5VEtLihRxFTuG63GBsNmcxpmRTcg8=
X-Received: by 2002:ac2:5383:: with SMTP id g3mr12886750lfh.150.1627304834893;
 Mon, 26 Jul 2021 06:07:14 -0700 (PDT)
MIME-Version: 1.0
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
In-Reply-To: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Mon, 26 Jul 2021 09:07:03 -0400
Message-ID: <CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
To: Scott Davis <scottwd@gmail.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>, Scott Davis <scott.davis@starlab.io>, 
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, 
	George Dunlap <george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, 
	Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>, 
	Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P . Smith" <dpsmith@apertussolutions.com>
Content-Type: text/plain; charset="UTF-8"

On Fri, Jul 23, 2021 at 12:47 AM Scott Davis <scottwd@gmail.com> wrote:
>
> This adds an option to the xl domain configuration syntax for specifying
> a build-time XSM security label for device-model stubdomains separate from
> the run-time label specified by 'device_model_stubdomain_seclabel'. Fields
> are also added to the 'libxl_domain_build_info' struct to contain the new
> information, and a new call to 'xc_flask_relabel_domain' inserted to
> affect the change at the appropriate time.
>
> The implementation mirrors that of the 'seclabel' and 'init_seclabel'
> options for user domains. When all used in concert, this enables the
> creation of security policies that minimize run-time privileges between
> the toolstack domain, device-model stubdomains, and user domains.

Cool stuff!

> Signed-off-by: Scott Davis <scott.davis@starlab.io>
> ---

> @@ -1935,7 +1953,13 @@ static void domcreate_complete(libxl__egc *egc,
>      libxl__domain_build_state_dispose(&dcs->build_state);
>
>      if (!rc && d_config->b_info.exec_ssidref)
> -        rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid, d_config->b_info.exec_ssidref);
> +        rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid,
> +                                     d_config->b_info.exec_ssidref);
> +
> +    if (!rc && dcs->sdss.pvqemu.guest_domid != INVALID_DOMID &&
> +        d_config->b_info.device_model_exec_ssidref)
> +        rc = xc_flask_relabel_domain(CTX->xch, dcs->sdss.pvqemu.guest_domid,
> +                                     d_config->b_info.device_model_exec_ssidref);

The build/create logic is complicated, so I'm asking the question in
case you already know.  This looks like domcreate_complete runs once
and relabels both the guest domain and the stubdom.  I thought it
would get called for each of stubdom and guest, so they would be
labeled according to exec_ssidref which you set for the stubdom b_info
below.  I looked around some and it seems like domcreate_complete is
only called for the guest.

Sort of relatedly, is stubdom unpaused before the guest gets
relabeled?  Quickly looking, I think stubdom is unpaused.  I would
think you want them both relabeled before either is unpaused.  If the
stubdom starts with the exec_label, but it sees the guest with the
init_label, it may get an unexpected denial?  On the other hand,
delayed unpausing of stubdom would slow down booting.

With the stubdom getting unpaused before relabel, do you have to give
the stubdom some extra flask policy permissions to handle that case?

>      bool retain_domain = !rc || rc == ERROR_ABORTED;
>
> diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
> index dbd3c7f278..2b69b207c4 100644
> --- a/tools/libs/light/libxl_dm.c
> +++ b/tools/libs/light/libxl_dm.c
> @@ -2300,20 +2300,24 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
>      sdss->pvqemu.guest_domid = INVALID_DOMID;
>
>      libxl_domain_create_info_init(&dm_config->c_info);
> +    libxl_domain_build_info_init(&dm_config->b_info);
> +    libxl_domain_build_info_init_type(&dm_config->b_info, LIBXL_DOMAIN_TYPE_PV);
> +

Is there a particular need for moving these lines here?

>      dm_config->c_info.type = LIBXL_DOMAIN_TYPE_PV;
>      dm_config->c_info.name = libxl__stub_dm_name(gc,
>                                      libxl__domid_to_name(gc, guest_domid));
> -    /* When we are here to launch stubdom, ssidref is a valid value
> -     * already, no need to parse it again.
> +
> +    /* When we are here to launch stubdom, ssidrefs are valid values already,
> +     * no need to parse them again.
>       */
>      dm_config->c_info.ssidref = guest_config->b_info.device_model_ssidref;
>      dm_config->c_info.ssid_label = NULL;
> +    dm_config->b_info.exec_ssidref =
> +        guest_config->b_info.device_model_exec_ssidref;
> +    dm_config->b_info.exec_ssid_label = NULL;

At first glance, it seems only these additions are strictly necessary.
But if only domcreate_complete is doing the relabel, then they are
unused?

Thanks,
Jason


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 13:29:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 13:29:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160959.295544 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m80fN-00026O-KO; Mon, 26 Jul 2021 13:29:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160959.295544; Mon, 26 Jul 2021 13:29:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m80fN-00026H-HR; Mon, 26 Jul 2021 13:29:09 +0000
Received: by outflank-mailman (input) for mailman id 160959;
 Mon, 26 Jul 2021 13:29:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m80fM-000267-Kp; Mon, 26 Jul 2021 13:29:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m80fM-0000sA-45; Mon, 26 Jul 2021 13:29:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m80fL-0003kr-QI; Mon, 26 Jul 2021 13:29:07 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m80fL-000822-Pm; Mon, 26 Jul 2021 13:29:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=BDkgUJFrT9s7T/+jxg8xE3R8uQVXoSB0hqq+VX/jbB0=; b=BkPRIAYEELiIdmIvi/pXRUnD9k
	SwpJPnVA366qKJh4ZqSfBEDAPpIwcVSQnYdfIthwn9cYeQZa2wQeVo405W6XAu/8NYv/LGeA3Y1sp
	PzPfe2RZzFk3E8ldfkAQ/Citfcj0DlCibtXsYQpV+A+aj5s3c4+mWp/YKB2AwD4azn9k=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163995-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163995: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 13:29:07 +0000

flight 163995 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163995/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   52 days
Failing since        162368  2021-06-04 15:42:59 Z   51 days  144 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4087 lines long.)


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 13:55:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 13:55:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160966.295558 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m814p-00058S-QW; Mon, 26 Jul 2021 13:55:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160966.295558; Mon, 26 Jul 2021 13:55:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m814p-00058L-NS; Mon, 26 Jul 2021 13:55:27 +0000
Received: by outflank-mailman (input) for mailman id 160966;
 Mon, 26 Jul 2021 13:55:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UIK7=MS=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m814n-00058F-DT
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 13:55:25 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 126ec0ea-e914-41d0-a72d-06f91855f4eb;
 Mon, 26 Jul 2021 13:55:23 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 126ec0ea-e914-41d0-a72d-06f91855f4eb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627307723;
  h=to:references:from:subject:message-id:date:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=o8HcMuq9VLuT8c95W9rZ92srnw7KM6NzsEK6CCvUPbo=;
  b=F/Kwas4jqUWAdfd1nQuOTna1ekNduxQXOa+WLibsaA45L+7H+7dExUxi
   PyOp8rxUBI3aQcgsPCHH5VpPoSv5mEvPzlc5ZiHSd1LIhEorydmRqeh+w
   YBByA3scDJ8GuRBmm5UdKEHRJCgAbRz0B2zVwU2z4Hz8Uu3uu/tjEspWL
   k=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: m4W1CVQvQCUKk3u7h3Wf1l11wyBcJn/Ixg7hLXgsieQhpcQI2iRNjIGWTsbzvYY5hgR/DB5J4u
 Y+wpUk9FckOP0Hkw6dZZfUtNfI0JnjQLCQzm0hhsfbjG5X22I6cPtRDV3sqeyKEG3vn1QjPxUP
 jOAe1qI+fzWgiDEybSqztToBVYMCN5WSa2ES1PRPRxmLiB0RzDMhtS+LF/bxY8lwqL5y/DJJaZ
 2KxgM+/YyNkB1+zExRkwJpWEGVh2FoSohme+KfFtrLs0PYNodGKv7l4vgExxKtvv7VcZQNIyVV
 St6osZ373G2dWCe5Fbp86o4x
X-SBRS: 5.1
X-MesageID: 48759023
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:EHE5DK82awY+GmAZuXluk+FKdb1zdoMgy1knxilNoENuHPBwxv
 rAoB1E73PJYVYqOE3I6urwR5VoJkmsiaKdgLNhQItKOTOGhILGFvAb0WKP+UyGJ8S6zJ8m6U
 4CSdkPNDSTNykCsS+S2mDReLxMsbr3ktHbuQ6d9QYIcegDUdAQ0+4TMHf8LqQZfngiOXN0Lu
 vm2iIRzADQB0j/I/7LSkUtbqzmnZnmhZjmaRkJC1oO7xSPtyqh7PrfHwKD1hkTfjtTyfN6mF
 K13TDR1+GGibWW2xXc32jc49B/n8bg8MJKAIiphtIOIjvhpw60bMBKWqGEvhoyvOazgWxa3+
 XkklMFBYBe+nnRdma6rV/E3BTh6i8n7zvYxVqRkRLY0IfEbQN/L/AEqZNScxPf5UZllsp7yr
 h302WQsIcSJQ/cnQzmjuK4FC1Cpw6Rmz4PgOQTh3tQXc81c7lKt7ES+0tTDdMpAD/60oY6C+
 NjZfuspMq+SWnqKkwxg1MfhOBFBh8Ib1C7qwk5y42oOgFt7TJEJxBy/r1Yop9on6hNOKWt5I
 z/Q+xVff91P5YrhJlGdZM8qP2MeyXwqCL3QRevyGvcZdY60lL22tTKCeYOlayXkKJh9upFpH
 2GaiIBiVIP
X-IronPort-AV: E=Sophos;i="5.84,270,1620705600"; 
   d="scan'208";a="48759023"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gVaxjROAzUkCCZmgIzsItZeLKUFf7WqPOKsuDggSaywENgd0Z5ZhGJUcMltyZgtkRhAlw3H0Kqc3ezCtIIYlMfp+w8gsaz4Qro7X6wTUxNJoHPqkfj8lzvZ8rjKgVqNxwiGp6XyMQFEERKVSOD0o+hua0W8Z6l78nj8HYK4b7NaVxqhBoyzdkahLBrH9V7JxFhnBV63g2Pd7C7P0jZ9FaMMwAcizWPl0XOEM+pWMTv82bQpO+78MMygnvCkuiRl6mj9NU00uFzqHUcYXOYfWPqjAIJrHZ1IfjJZdUSUvX9KadA6rMbwfpJdq4li5a65ktfkTXAiWB+KJJbfUsrzfmw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nPLanxlGLrFNWn3Yf8ofV/qFHuk2lJWJ9gIzpdPb7Uo=;
 b=OmyouAJ9C7ailBQhxh8ypddi+oDIWIgUskz6LiiYUJoJxhXMqul7MAPbdSIQfh4NgLq2jUAMXVl7Tc5AvIR6MW93oJt3ewSqsdcHU3KJRjVMJJ/NfJgVy9i6Vf+5JqZ7j9l+I5XP5H6vPfDHdouFbRoczj0mFFAho8kYIwEYaOW8bxWjfvrMO2VBFe4ytwjUvHv3oLfJH2ZLYXWDQ1pAy0jCnREVkHMh2t4GMkS54eOYrYekSbBUVS9IaqWwqNc63fpyLof2c+cNarb2+8QZCZRrFtjGdzWgN50KO12UkSPV2rY4XBuAnaHnqLO15L9+sOchIB2fg9Jvwp4NcMvzZQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nPLanxlGLrFNWn3Yf8ofV/qFHuk2lJWJ9gIzpdPb7Uo=;
 b=vXOT3CIrEG9NYluiJSW8Uuq2NGpTuMW/fzPUsrEieveqQMfkygkBAisQcuVryVS5eZz5EBT1cSXJOtaAstvYRxnl8MtJjuzoxYc1/JFY2tlxEWHfBn9UUYbSAgxE//p0w0fVrxR6VfmWwvyqfC182GYlO6oN6x7zBM0PTm/quZw=
To: Xentrigued <xentrigued@comcast.net>, <xen-devel@lists.xenproject.org>
References: <001401d77de6$34ff5de0$9efe19a0$@comcast.net>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: Nested Virtualization of Hyper-V on Xen Not Working
Message-ID: <4c46f245-abeb-c6d7-9651-60eaf36adc1b@citrix.com>
Date: Mon, 26 Jul 2021 14:55:14 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <001401d77de6$34ff5de0$9efe19a0$@comcast.net>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0397.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:f::25) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 27cb7050-3b0b-4761-5106-08d9503d0168
X-MS-TrafficTypeDiagnostic: BYAPR03MB4551:
X-Microsoft-Antispam-PRVS: <BYAPR03MB455181131303F6E4B23AB243BAE89@BYAPR03MB4551.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: iYXrrZS2aeYVOim/GEBQjPpU7IUshVGEVP0PHeeoaAX7Z7qeS6fJHAB99MU/815hg1rzrNnRqyUi/DknLHxGFyzFVW2jo3DRz5zROARvKYEBrkQ8iYDy+VnpxDl8WyAeCPY7Y5ygCZLgTNYipYB8v43Uc/bpcfgpTFg3fdsRTmxIl2VfZiWVoGQIuHiTmfcEvhT4+Cq/seCLF8oAaZ3HZPWLaTaFbpdvZG2t9WnnvqMQmSCSxwEUAu7DBpoaw9FTjq8dr/qiuRWAQUjXPC1A0O7Cu7wbT2D+u8kNkx3kcRH0mRBLEC0vfmFG1RZ+mpwyVpkH+cvmcFHMxEeXmrIaP1jm8Jx1/U07f86nomyTuHBj1+WaRa2EtCojWh5T26qCH1MHVWJSWQDumPiGMFFu2h1w1Bd+hV/FUWl6z7uWtNLyYaIdsX5pV60+uhFE4pykZjxP5r8XwpNUNEsELleB1YMzRoLbnOvxLU7kT8dtUVStIgB6bHNDunF238CWv87vM279AD/vsgVJ+ujrEFKxLOmmaZE4juCzisendejhrK7j+1SIzWszSi92a5YqXn9JKT7FPg+MR+UIOk6vJl8H+j/N4/rc6VNln2hRjAcKrNs83dcDT9KJ6q08W04nE9nYz6iiUX6REdxDY/an88CJ6R2x9AcnrLvJE6g/i8br2qkPoBp6+XJ8c8CkxWMt4CMmqLiujYsuuO8YHS0jIewNbFhBRMrtEfthlUVYK/zFRG8=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(39860400002)(136003)(366004)(346002)(376002)(86362001)(38100700002)(6666004)(83380400001)(31686004)(26005)(53546011)(5660300002)(186003)(2906002)(31696002)(8676002)(66946007)(36756003)(66476007)(478600001)(6486002)(66556008)(2616005)(8936002)(16576012)(316002)(956004)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 27cb7050-3b0b-4761-5106-08d9503d0168
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jul 2021 13:55:19.9265
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: xr4nwVpN84Q40Pt1OOy7Ak+TjC6XxBIkiL49JZ2D6I40DgkiVDgC1hLi3HwnqsfrnDFABhKfSCRjQVVxcNmr9xy8ckodeg3eKSueaIR9oXQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4551
X-OriginatorOrg: citrix.com

On 21/07/2021 05:09, Xentrigued wrote:
> SUMMATION:
> Clearly, much effort has already been expended to support the Viridian
> enlightenments that optimize running Windows on Xen.  It also looks like =
a
> significant amount of effort has been put forth to advance nested
> virtualization in general.
>
> Therefore, if it would be helpful, I am willing to perform testing and
> provide feedback and logs as appropriate in order to help get this workin=
g.
>
> While my day job is managing a heterogeneous collection of systems runnin=
g
> on various hypervisors, I have learned the rudiments of integrating patch=
es
> and rebuilding Xen from source so could no doubt be useful in assisting y=
ou
> with this worthwhile endeavor.

Hello,

Thankyou for your interest and volunteering.

Nested virt under Xen is a disaster.=C2=A0 It has been bitrotting for 5
years, and was introduced in an ill-advised way to begin with.

With my Citrix Hypervisor hat on, getting Windows VBS working is a high
priority, but other security work keeps on taking priority.=C2=A0 The
non-security work I am managing to do is all about CPUID and MSR
handling at the toolstack level (rectifying some 15 years of accumulated
technical debt), which is a prerequisite to being able to support nested
virtualisation on Intel in a sustainable way.

There are two things which I know definitely don't work.
1) NMI Virtualisation isn't advertised (but is available if you ignore
the signs of its absence).=C2=A0 Most hypervisors refuse to function withou=
t it.
2) VMCS-based EFER loading/saving doesn't work on virtual vmentry/exit.

Fixing 1) is a online patch.

diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c
index e9f94daf6493..4c80912368d5 100644
--- a/xen/arch/x86/hvm/vmx/vvmx.c
+++ b/xen/arch/x86/hvm/vmx/vvmx.c
@@ -2237,6 +2237,7 @@ int nvmx_msr_read_intercept(unsigned int msr, u64
*msr_content)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* 1-settings */
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 data =3D PIN_BASED_EXT_INT=
R_MASK |
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 PIN_BASED_NMI_EXITING |
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 PIN_BASED_VIRTUAL_NMIS |
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 PIN_BASED_PREEMPT_TIMER;
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 data =3D gen_vmx_msr(data,=
 VMX_PINBASED_CTLS_DEFAULT1, host_data);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break;


Fixing 2) is more tricky.=C2=A0 I "broke" it when I fixed a more serious bu=
g
in Xen by making use of EFER-loading in the first place.=C2=A0 This patch
ought to revert to the old behaviour.

diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
index f9f9bc18cdbc..e4c353202e2a 100644
--- a/xen/arch/x86/hvm/vmx/vmcs.c
+++ b/xen/arch/x86/hvm/vmx/vmcs.c
@@ -418,7 +418,7 @@ static int vmx_init_vmcs_config(bool bsp)
=C2=A0
=C2=A0=C2=A0=C2=A0=C2=A0 min =3D VM_EXIT_ACK_INTR_ON_EXIT;
=C2=A0=C2=A0=C2=A0=C2=A0 opt =3D (VM_EXIT_SAVE_GUEST_PAT | VM_EXIT_LOAD_HOS=
T_PAT |
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VM_EXIT_LOAD_=
HOST_EFER | VM_EXIT_CLEAR_BNDCFGS);
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VM_EXIT_CLEAR=
_BNDCFGS);
=C2=A0=C2=A0=C2=A0=C2=A0 min |=3D VM_EXIT_IA32E_MODE;
=C2=A0=C2=A0=C2=A0=C2=A0 _vmx_vmexit_control =3D adjust_vmx_controls(
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "VMExit Control", min, opt=
, MSR_IA32_VMX_EXIT_CTLS, &mismatch);
@@ -458,7 +458,7 @@ static int vmx_init_vmcs_config(bool bsp)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 _vmx_secondary_exec_contro=
l &=3D
~SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS;
=C2=A0
=C2=A0=C2=A0=C2=A0=C2=A0 min =3D 0;
-=C2=A0=C2=A0=C2=A0 opt =3D (VM_ENTRY_LOAD_GUEST_PAT | VM_ENTRY_LOAD_GUEST_=
EFER |
+=C2=A0=C2=A0=C2=A0 opt =3D (VM_ENTRY_LOAD_GUEST_PAT |
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VM_ENTRY=
_LOAD_BNDCFGS);
=C2=A0=C2=A0=C2=A0=C2=A0 _vmx_vmentry_control =3D adjust_vmx_controls(
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "VMEntry Control", min, op=
t, MSR_IA32_VMX_ENTRY_CTLS, &mismatch);


For how, the most important thing is to get one other "modern"
hypervisor working under Xen.=C2=A0 Nested-virt is "just an emulation" of
VT-x (Intel) / SVM (AMD), so it doesn't matter very much what hypervisor
you use in the VM if you're trying to debug why Xen's nested virt is broken=
.

Furthermore, you stand a far better chance of getting something working
by picking an old version of Windows/HyperV first, as it will use fewer
"new" features in hardware.=C2=A0 The only way we're going to fix things is
incrementally.

~Andrew



From xen-devel-bounces@lists.xenproject.org Mon Jul 26 15:29:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 15:29:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160972.295570 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m82X9-00052Z-DU; Mon, 26 Jul 2021 15:28:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160972.295570; Mon, 26 Jul 2021 15:28:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m82X9-00052S-AD; Mon, 26 Jul 2021 15:28:47 +0000
Received: by outflank-mailman (input) for mailman id 160972;
 Mon, 26 Jul 2021 15:28:45 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m82X7-00052I-KB; Mon, 26 Jul 2021 15:28:45 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m82X6-0002gy-LL; Mon, 26 Jul 2021 15:28:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m82X6-0000bI-BI; Mon, 26 Jul 2021 15:28:44 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m82X6-00007Y-AZ; Mon, 26 Jul 2021 15:28:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=fXK+8Z0RDMWL8DdSOKw847LCxKCM8XAJQVzExpt7Qp4=; b=SyAUHexkWyfZcI4yEv4kcfMVkX
	H7ut2OAXiYlUGbejchELQKKs55qzGOSYyrakwITNtuS2pGae0GK+jAA5em7TrB9lc78RIWgOG5bI2
	KccsY6YTLUnp8AqE/LB9j2VoxSbExu98TV16aPDReIVFCTJBZDbuk6iuB9tAX3bbO8yk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163996-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 163996: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=73c932d0ea43ddf904db9429811788480c4cb816
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 15:28:44 +0000

flight 163996 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163996/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  73c932d0ea43ddf904db9429811788480c4cb816
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163853  2021-07-20 21:01:45 Z    5 days
Testing same since   163996  2021-07-26 12:02:53 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Christian Lindig <christian.lindig@citrix.com>
  Igor Druzhinin <igor.druzhinin@citrix.com>
  Julien Grall <jgrall@amazon.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   57e761b60d..73c932d0ea  73c932d0ea43ddf904db9429811788480c4cb816 -> smoke


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 15:45:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 15:45:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160979.295585 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m82nB-0007Ec-Qr; Mon, 26 Jul 2021 15:45:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160979.295585; Mon, 26 Jul 2021 15:45:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m82nB-0007EV-NR; Mon, 26 Jul 2021 15:45:21 +0000
Received: by outflank-mailman (input) for mailman id 160979;
 Mon, 26 Jul 2021 15:45:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m82nB-0007EP-1X
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 15:45:21 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m82nA-0002vy-GQ; Mon, 26 Jul 2021 15:45:20 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m82nA-0006IG-9f; Mon, 26 Jul 2021 15:45:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=N/rmrOmsSN+EbtWezsdD3hE/SFVIHp153ix6AX8nJ8Y=; b=PJWESjXn0WHC6Cg3xUDlfwtc+Q
	ByOBOHPJz3B6uAJByTmxkcNF8rh+6Qwdeqw9X8cB5z3NF8+mvikcOjwnWbcBHiNqE3LY3sxfgJyyC
	H9dFxnPfpAVD2dMq/cFf6XNOzT/tG8YYKk68SVaHoduHmVzFfAslhSXFWqFP9ODXM6iM=;
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
To: Jan Beulich <jbeulich@suse.com>
Cc: Bertrand.Marquis@arm.com, Volodymyr_Babchuk@epam.com,
 rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>,
 xen-devel@lists.xenproject.org, Stefano Stabellini <sstabellini@kernel.org>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
 <20210722233642.22515-2-sstabellini@kernel.org>
 <97f0713b-f6bb-72cd-f364-f0d42c868171@suse.com>
 <1df74545-d2fa-2d80-5246-a0b0158550b4@xen.org>
 <e262a28a-ced3-3097-4748-fe2b9efe08f5@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <f4bdbeaf-b432-5bda-28fc-c9358b26ab5a@xen.org>
Date: Mon, 26 Jul 2021 16:45:17 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <e262a28a-ced3-3097-4748-fe2b9efe08f5@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Jan,

On 23/07/2021 14:02, Jan Beulich wrote:
> On 23.07.2021 11:28, Julien Grall wrote:
>> Hi Jan,
>>
>> On 23/07/2021 07:31, Jan Beulich wrote:
>>> On 23.07.2021 01:36, Stefano Stabellini wrote:
>>>> --- a/xen/drivers/passthrough/device_tree.c
>>>> +++ b/xen/drivers/passthrough/device_tree.c
>>>> @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
>>>>        if ( !ops )
>>>>            return -EINVAL;
>>>>    
>>>> +    /*
>>>> +     * Some Device Trees may expose both legacy SMMU and generic
>>>> +     * IOMMU bindings together. If both are present, the device
>>>> +     * can be already added.
>>>> +     */
>>>>        if ( dev_iommu_fwspec_get(dev) )
>>>> -        return -EEXIST;
>>>> +        return 0;
>>>
>>> Since the xen: prefix in the subject made me go look (I wouldn't have
>>> if it had been e.g. dt: ), I may as well ask: Since previously there
>>> was concern about bogus duplicate entries, does this concern go away
>>> no altogether?
>>
>> The check wasn't originally added because of legacy vs generic binding.
>>
>> It was added because in some circumstances iommu_add_dt_device() could
>> genuinely be called twice (for instance if the device is re-assigned).
>> This was returning -EEXIST rather than 0 so the caller can decide
>> whether it is normal that the device is already added.
> 
> Okay. If that distinction is of no interest anymore, then I can see
> this wanting dropping.
> 
>> Calling iommu_add_dt_device() twice doesn't hurt but after patch #1
>> (this patch should really be first), dev_iommu_fwspec_get() will return
>> a non-NULL pointer as the legacy devices are added when the IOMMU is probed.
>>
>>> It's one thing for there to be a legacy and a generic
>>> binding, but another if you found two legacy or two generic ones, I
>>> would think.
>>
>> I am not quite too sure what you mean by "two legacy" and "two generic".
>> Can you clarify it?
> 
> Well, I'm having trouble describing it in different terms. I mean
> two entries of the same kind (both legacy or both generic) referring
> to the same device, thus leading to the function recognizing the 2nd > time round that the device is already there.

I think you are misunderstanding the purpose of this function. It is 
called when we discover a new device rather than discovering a new entry 
in the IOMMU. The function will then sort out what to do for the device.

The legacy binding is somewhat specific because it bypass the function 
as the discovering is done per IOMMU rather than per device.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 15:53:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 15:53:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160986.295598 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m82v8-0000GU-Oo; Mon, 26 Jul 2021 15:53:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160986.295598; Mon, 26 Jul 2021 15:53:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m82v8-0000GN-Lm; Mon, 26 Jul 2021 15:53:34 +0000
Received: by outflank-mailman (input) for mailman id 160986;
 Mon, 26 Jul 2021 15:53:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m82v7-0000GH-2B
 for xen-devel@lists.xenproject.org; Mon, 26 Jul 2021 15:53:33 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m82v5-00033V-K8; Mon, 26 Jul 2021 15:53:31 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m82v5-0006oz-Dg; Mon, 26 Jul 2021 15:53:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=zWtX3QX/nyUJlHcvp7X9Vuay7QV7fOQHgYjGx8dA2fI=; b=dravk+SWP+UuPI5+mxKEiz05L+
	9Zn4RraPdHsljw+dBB58DPBE74RVlhXmBGQB6ZRyGcMolRK6j+gjbPdngB1jN980de+54qUKswv2/
	dOgI9Od2JUlyjMQzm0behIegrZQwkd+atksqX4CCc/mccUGab0EQloTUSa/AjRmPT21Q=;
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, Bertrand.Marquis@arm.com,
 Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s>
 <20210722233642.22515-2-sstabellini@kernel.org>
 <acd7e7b6-7c2b-24d5-da80-042396aee5e8@xen.org>
 <alpine.DEB.2.21.2107231043230.10122@sstabellini-ThinkPad-T480s>
From: Julien Grall <julien@xen.org>
Message-ID: <aa7be3ad-8cbe-a187-3ebc-e1c5d2d11091@xen.org>
Date: Mon, 26 Jul 2021 16:53:29 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <alpine.DEB.2.21.2107231043230.10122@sstabellini-ThinkPad-T480s>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Stefano,

On 23/07/2021 21:16, Stefano Stabellini wrote:
> On Fri, 23 Jul 2021, Julien Grall wrote:
>>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
>>> ---
>>> Changes in v5:
>>> - new patch
>>> ---
>>>    xen/drivers/passthrough/device_tree.c | 9 +++++++--
>>>    1 file changed, 7 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/xen/drivers/passthrough/device_tree.c
>>> b/xen/drivers/passthrough/device_tree.c
>>> index 999b831d90..32526ecabb 100644
>>> --- a/xen/drivers/passthrough/device_tree.c
>>> +++ b/xen/drivers/passthrough/device_tree.c
>>> @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
>>>        if ( !ops )
>>>            return -EINVAL;
>>>    +    /*
>>> +     * Some Device Trees may expose both legacy SMMU and generic
>>> +     * IOMMU bindings together. If both are present, the device
>>> +     * can be already added.
>>
>> Wouldn't this also happen when there is just generic bindings? If so,
>> shouldn't this patch be first in the series to avoid breaking bisection?
> 
> No, both need to be present; if there is just the generic bindings we
> don't need this change. I can still move it to the beginning of the
> series anyway if you prefer.

Sorry but I am having some trouble to understand why this is not a 
problem for just the legacy binding.

If I look at patch #1, the dev->iommu_fspec will be allocated in 
register_smmu_master(). If I am not mistaken, this is called when the 
SMMU is initialized.

So the call to iommu_add_dt_device() in handle_device() should return 
-EEXIST (dev_iommu_fwspec_get() will return a non-NULL pointer).

What did I miss?

> 
> 
>>> +     */
>>
>> My point on the previous version is this is not the only reasons why
>> dev_iommu_fwspec_get(). So either we want to write all the reasons (AFAICT,
>> there is only two) or we want to write a generic message.
> 
> I see. Maybe:
> 
>    * In some circumstances iommu_add_dt_device() can genuinly be called
>    * twice. As there is no harm in it just return success early.

Sound good to me.

> 
> 
>>>        if ( dev_iommu_fwspec_get(dev) )
>>> -        return -EEXIST;
>>> +        return 0;
>>>          /*
>>>         * According to the Documentation/devicetree/bindings/iommu/iommu.txt
>>> @@ -254,7 +259,7 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct
>>> domain *d,
>>>             * already added to the IOMMU (positive result). Such happens
>>> after
>>>             * re-creating guest domain.
>>>             */
>>
>> This comment on top is now stale.
> 
> I missed it somehow; yes definitely it should be removed. I can do it in
> the next version of this patch.
> 
> 
>>> -        if ( ret < 0 && ret != -EEXIST )
>>> +        if ( ret < 0 )
>>>            {
>>>                printk(XENLOG_G_ERR "Failed to add %s to the IOMMU\n",
>>>                       dt_node_full_name(dev));

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 20:37:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 20:37:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.160995.295610 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m87Lj-0007cY-QL; Mon, 26 Jul 2021 20:37:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 160995.295610; Mon, 26 Jul 2021 20:37:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m87Lj-0007cR-ND; Mon, 26 Jul 2021 20:37:19 +0000
Received: by outflank-mailman (input) for mailman id 160995;
 Mon, 26 Jul 2021 20:37:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m87Li-0007cH-2S; Mon, 26 Jul 2021 20:37:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m87Lh-0007sF-UH; Mon, 26 Jul 2021 20:37:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m87Lh-0006KD-J5; Mon, 26 Jul 2021 20:37:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m87Lh-0006rc-Ic; Mon, 26 Jul 2021 20:37:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Xk5/9tI9V0ifs8jnRxhQUD6RdX+guKgZfFadM4/9r6I=; b=MUiL53YQCzUNXYEfIWiFlLou1i
	O9JAjTNJ2aE/MGgT61Y0ORXym10WpOiA3iGhzdlFc9xb8FmY1RujNIuZgfsUN89S0uKu68Rb17I5g
	F+xqvIlz3vKcXnIRKSk0K9sAkv61sHjRxx/8Cz6BZUZ48nlq2Lc2tB+m6sypUib9RiFc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163997-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 163997: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=34fd92ab4142bde5b54adacd16e6682f4ea83da1
X-Osstest-Versions-That:
    qemuu=a2376507f615495b1d16685449ce0ea78c2caf9d
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 20:37:17 +0000

flight 163997 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163997/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 163976

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163976
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163976
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163976
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163976
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163976
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163976
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163976
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass

version targeted for testing:
 qemuu                34fd92ab4142bde5b54adacd16e6682f4ea83da1
baseline version:
 qemuu                a2376507f615495b1d16685449ce0ea78c2caf9d

Last test of basis   163976  2021-07-24 13:39:09 Z    2 days
Testing same since   163997  2021-07-26 13:08:04 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Aaron Lindsay <aaron@os.amperecomputing.com>
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Alex Bennée <alex.bennee@linaro.org>
  Bin Meng <bin.meng@windriver.com>
  Chetan Pant <chetan4windows@gmail.com>
  Corey Minyard <cminyard@mvista.com>
  Klaus Jensen <k.jensen@samsung.com>
  Li Qiang <liq3ea@gmail.com>
  Luis Pires <luis.pires@eldorado.org.br>
  Mahmoud Mandour <ma.mandourr@gmail.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Thomas Huth <thuth@redhat.com>
  Viresh Kumar <viresh.kumar@linaro.org>
  Warner Losh <imp@bsdimp.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   a2376507f6..34fd92ab41  34fd92ab4142bde5b54adacd16e6682f4ea83da1 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Mon Jul 26 21:24:53 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Mon, 26 Jul 2021 21:24:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161002.295625 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m885Z-0003tn-HI; Mon, 26 Jul 2021 21:24:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161002.295625; Mon, 26 Jul 2021 21:24:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m885Z-0003tg-EJ; Mon, 26 Jul 2021 21:24:41 +0000
Received: by outflank-mailman (input) for mailman id 161002;
 Mon, 26 Jul 2021 21:24:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m885X-0003tW-Qa; Mon, 26 Jul 2021 21:24:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m885X-0000Im-Hm; Mon, 26 Jul 2021 21:24:39 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m885X-00080v-AJ; Mon, 26 Jul 2021 21:24:39 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m885X-00083q-9p; Mon, 26 Jul 2021 21:24:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=NeH6xwDTOfw7xjikBe1DqI+4dc8VAtl/JqblpTTqBSA=; b=f/trh3lgEqVOFUWSXYEwLCQb3U
	3U6wFREn67Mvpv8Jf1hME2rFIj7mqDoN4fNfGSomv8qDyfmlRt+kNVeFvRphDV+hU/iIQa2xzbvHr
	Cm2Z8JfWT3BcJr+5+wVUZ24kd81ps/5ETAXxcghnHM9i65NkNAvZxq7onlxp9V61VY2k=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163999-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 163999: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Mon, 26 Jul 2021 21:24:39 +0000

flight 163999 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163999/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   52 days
Failing since        162368  2021-06-04 15:42:59 Z   52 days  145 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    0 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4087 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 01:08:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 01:08:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161025.295658 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8BaK-0005Ym-L8; Tue, 27 Jul 2021 01:08:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161025.295658; Tue, 27 Jul 2021 01:08:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8BaK-0005Yf-HX; Tue, 27 Jul 2021 01:08:40 +0000
Received: by outflank-mailman (input) for mailman id 161025;
 Tue, 27 Jul 2021 01:08:38 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8BaI-0005YV-TJ; Tue, 27 Jul 2021 01:08:38 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8BaI-00020b-Bn; Tue, 27 Jul 2021 01:08:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8BaH-0002a0-Vp; Tue, 27 Jul 2021 01:08:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8BaH-0005aW-VK; Tue, 27 Jul 2021 01:08:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=uCVQwS2BhNFaX8U5xSza7VFroIg/qz3B5V+nxbGMwcg=; b=so3DE4O7H9Y+IPe6XKrPNchCG6
	sdFp6l+9N+WzLf4cCixhnNJP9wMP+svKWw+/n+NjImZn/YMs+Tt2aK74L6JDwHq71q8m/lwHI046X
	Es3Dbo3VYmzL45buGHqK0kdgtHetxDvCTuDM+cjvSLLg89HcA7i6AlhgnRgjC7P2AfbI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-163998-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 163998: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:guest-start:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=ff1176468d368232b684f75e82563369208bc371
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 01:08:37 +0000

flight 163998 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/163998/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  14 guest-start              fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1         fail pass in 163993

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

version targeted for testing:
 linux                ff1176468d368232b684f75e82563369208bc371
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  360 days
Failing since        152366  2020-08-01 20:49:34 Z  359 days  618 attempts
Testing same since   163989  2021-07-25 22:41:50 Z    1 days    3 attempts

------------------------------------------------------------
6730 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          fail    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987295 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 03:45:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 03:45:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161032.295673 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8E1X-0002iN-V0; Tue, 27 Jul 2021 03:44:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161032.295673; Tue, 27 Jul 2021 03:44:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8E1X-0002iG-QC; Tue, 27 Jul 2021 03:44:55 +0000
Received: by outflank-mailman (input) for mailman id 161032;
 Tue, 27 Jul 2021 03:44:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=99OC=MT=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8E1W-0002iA-PC
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 03:44:55 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [40.107.22.67]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ff8e33ee-ee8c-11eb-96d0-12813bfff9fa;
 Tue, 27 Jul 2021 03:44:52 +0000 (UTC)
Received: from AS8P251CA0025.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:2f2::20)
 by HE1PR0802MB2140.eurprd08.prod.outlook.com (2603:10a6:3:c2::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.26; Tue, 27 Jul
 2021 03:44:49 +0000
Received: from AM5EUR03FT027.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:2f2:cafe::ce) by AS8P251CA0025.outlook.office365.com
 (2603:10a6:20b:2f2::20) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.26 via Frontend
 Transport; Tue, 27 Jul 2021 03:44:49 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT027.mail.protection.outlook.com (10.152.16.138) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Tue, 27 Jul 2021 03:44:48 +0000
Received: ("Tessian outbound cee5995f7b16:v100");
 Tue, 27 Jul 2021 03:44:47 +0000
Received: from 3c8f3dc00911.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 202A5B9E-6444-4131-BD2D-B2DDAA33F9F3.1; 
 Tue, 27 Jul 2021 03:44:42 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 3c8f3dc00911.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 27 Jul 2021 03:44:42 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR0802MB2174.eurprd08.prod.outlook.com (2603:10a6:800:9c::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.28; Tue, 27 Jul
 2021 03:44:39 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::adf8:8d6f:2a30:b60c]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::adf8:8d6f:2a30:b60c%5]) with mapi id 15.20.4352.031; Tue, 27 Jul 2021
 03:44:39 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ff8e33ee-ee8c-11eb-96d0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bDs3gsKu1twi7kPgWPq2SdF8u49lwxbAB0z9y9/NQEY=;
 b=yFTFk7l+dDi1Axb5S55UUqy9c+zuAk5IgKYIbIEnhhClN+mo2WH1D0iNJiYCDm/V8tbbEk4MqLbqis3gaupS/tsBPDyXZqy4MtO83gGT+mA2dX9to/FVLhU4Z7X1L1NIMGwAxCeHuGXKZggAmUkaq+bLxIC1qygwq7BrIhAVGqE=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=d+PCtYwIOozcNNXAz4WU6IG/aiSuwytfDrGrueoYjhWwRwKZVeom+sW85arYZXjYZfyQ2rf9ywlAEviwP+3OdmRGoFFimFqL30l5q0cNoY7YwWIK1nYOsiRKKbkkkH83P505GmiEgrrEAKdqFH7vU0y9W2nG491y84GAqmRpIQK31PP3tZ+jTNgD19tvD8S0RtgiVQd62p949X9lPaytMPJaLygcO/8aMD4lw2vhnbQAaCUxXlBxdsInODOYM64PeQHtGvwwtryqJnpukKKFuSo+l334Sp4NUOO/I9OFn5C51/NxAcEXxvXZpdq23P11LVEaFZmqNb5El7dMdyYUAg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bDs3gsKu1twi7kPgWPq2SdF8u49lwxbAB0z9y9/NQEY=;
 b=MVz9IY+4mawEh+pTLrHrvoLsIuFSG7Hnp8P/34eKFddLje1Ah3FB3LNeiGIRo2yLZabhcztYoBLbHnPeEKsGyu/Pk+45Ee/7tLF09Oo5qSLz45vM1DY+vGN+YPh7uKmjydXxf6b0APcu8QAOSKc0WTUUO39gX2i/33nxYPTR10TLzrloh1yOplbjFLF8V7NIgM6HK+Hghj8xx5Cuwshk5VvV1b+4SclI0p3/CDFxWue3FRZwruZVoxxaDNCH1IpM/EEvfj7AUTObEkGuwomSU3+zHt7oFUOz0qTSer2T3OKkiKybI0zsDkh272yP62OZGLi+LGFvOuw2rr81PkWC2g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bDs3gsKu1twi7kPgWPq2SdF8u49lwxbAB0z9y9/NQEY=;
 b=yFTFk7l+dDi1Axb5S55UUqy9c+zuAk5IgKYIbIEnhhClN+mo2WH1D0iNJiYCDm/V8tbbEk4MqLbqis3gaupS/tsBPDyXZqy4MtO83gGT+mA2dX9to/FVLhU4Z7X1L1NIMGwAxCeHuGXKZggAmUkaq+bLxIC1qygwq7BrIhAVGqE=
From: Penny Zheng <Penny.Zheng@arm.com>
To: "julien@xen.org" <julien@xen.org>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"jbeulich@suse.com" <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>
Subject: RE: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
Thread-Topic: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
Thread-Index: AQHXeTjsii93P3Jir0yV0AuWxQR1FqtWPVlQ
Date: Tue, 27 Jul 2021 03:44:39 +0000
Message-ID:
 <VE1PR08MB52153A258DE5E33D11C337CDF7E99@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-11-penny.zheng@arm.com>
In-Reply-To: <20210715051819.3073628-11-penny.zheng@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 4F45553F46B38E45BB803876702A3CCF.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 0be14203-d539-4e16-7587-08d950b0e1e3
x-ms-traffictypediagnostic: VI1PR0802MB2174:|HE1PR0802MB2140:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<HE1PR0802MB21401D5B5F2E26DAE6CBCB9EF7E99@HE1PR0802MB2140.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:5236;OLM:5236;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 p7rki8FWqzbvbeA8W6lYeT2QdRthO7e+cMhGGMMfS6V5ajiBmECzFsQASg3jwOiZjf8ie810SQTNuLqiaSPUzWptDBawvHLbSERtgkSs55HKRoG+OqB4hXquwkf7jw8cm8pMkBlQFnRyI1KSsMUF5AKYqN8uTgO+OH6xt9Zs22OUZUkscnxe8J3FwYQ0+YsBUnvCFYgtsOnufJ3aO7M7DbzNRzctZvnXO/+W9ZV0u5YwnylpxxEpBt6Re87SnYb4ULGKNcalewmPPA+dHOZKWjkLknizsA/a+UWZ7yoDqCwgGrSc45o4mfNqMTtQ4k4BcYhR4fzT5HhSZ1IBPM4PF0eNsH8Yi54W4oZomvASOi0p/k5eLcw5ZMeeZa/XVdaio4c0zeqSGw4mzc5Twroka9vhQK2T6eXxegAh/GPoOXJyACrnlu+YC1B4r2BWNMaRsy4BfRFSPIbMiFoB8NN/uwoBxLWEjwr3xB/L8lAHJH46F0GA4S/DMxl/MJbqiCh8zhcKX2/LdDO3Mtoib1HH+cC3F62Y/6+kHpwcLeAr9S7qMl/+vUmKhn0Ouc2RwaeeOndt6ojsSC3QdhmAc+dtHNKxioaQmQr8Bg5AzXryo/blLOoNfEcEsiIOq4uDgq4HFPRLHFVj+Y2aEsR5wn9zjp7RkmdcfXCsCKMzI+csrKEYO3gblsdQguNMRf/+5i1jvthRmGGz3DhDlkyB9FE2xA==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(136003)(376002)(346002)(39860400002)(366004)(4326008)(83380400001)(55016002)(33656002)(478600001)(6916009)(38100700002)(122000001)(66556008)(2906002)(64756008)(52536014)(71200400001)(7696005)(54906003)(86362001)(53546011)(6506007)(8676002)(9686003)(5660300002)(76116006)(8936002)(66476007)(66946007)(66446008)(186003)(316002)(26005)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?h+Pu7CqWHBPpPCCPFjKr7wqYyVl3FDBinS4qQdHL8oo20L9pEsudvFPgeteo?=
 =?us-ascii?Q?jvVD4H5h+wU453HdAoXbuzD3iVD7MA6KX+PZazQmriqQM7jOv45NB7vnmxQd?=
 =?us-ascii?Q?vwTX5THYgew9y78qdkhbcx2To9SguvRMUrODswfOsbEL+WgW93wDc0mr+3Zd?=
 =?us-ascii?Q?yvTAfnM7k7aD4H/Nz3jvUix5dO39ywYxFJFHBs4Vq75g1BvzyVq56QoB9rNQ?=
 =?us-ascii?Q?S7IC2sYr3IWanKuqNt2rMQwOt/q1t4t47uw5g+fbkDajJETqx+fqIOGWHBTR?=
 =?us-ascii?Q?xOLal20kAG7Q4DQMUHjNqaHzohkfjirEtGGPIh2/N8x3GOhFHL8d6Rtdddaz?=
 =?us-ascii?Q?tstyDCNkWDNpoBRlGjqfNPhLZSXBfWgCHxuLY1qQIgFay6CrQnJL1mbtIEtJ?=
 =?us-ascii?Q?WtHqdwrTEFWjt61LKIeBA1FPBrON58ied5Kz0mfhNbTSyHRKzlg0op55J0EM?=
 =?us-ascii?Q?KXWfkgqXBE9liERbp0ZxJ5yXY5wjJMuVCEuRSny9y2HvzYH96e15c3lvJLm9?=
 =?us-ascii?Q?0cpsjw0D0A49/RcgwFYimSeuIG166YCcmDdpbpoKnwVrJboj6jLEvt0SNBfq?=
 =?us-ascii?Q?e4v0Ol923XpZtmBldixcz6dQy9dp3PGnXhSUZddGjepDJPgLDwuR6YG4rogX?=
 =?us-ascii?Q?ig/1pg4iyH7O1b67IEhgOmLN0q9DYyZsPxiH4+E+T/Aaz5WsWnPQfkdbToCV?=
 =?us-ascii?Q?ERc3xvkXbN0O/Q4jxMx3qLVaHKP6l4Iyd3eL84d6nlJw+heCWiXfxtHPZJt7?=
 =?us-ascii?Q?xv5forJLzgcL3V760jFTytKzrLLVe3ArncyvadAIzW/2x7or0FfL3K5AlPH7?=
 =?us-ascii?Q?VCa/lmnAUudVg89XuMGHD+V0cQpa+Hqw6P54y/ww6kpls1ua35kyKh0KacdX?=
 =?us-ascii?Q?NEoZgMwYKJlTJ2PBStznVVSTfOxIa7uOOArsYbS2XFQQMaugbMHohHkSQLFG?=
 =?us-ascii?Q?MUOw1toiO+zsWWWtkU5SSvqs1H7YNFXoT6YIYI8ofwxsWp+8HkfOobUCKDjl?=
 =?us-ascii?Q?Tnj73L4Om+1EhaFLdhj4ET3sNzrkDDEgxcsn2PcjW1LmWgLrOf5Z6KKoxAdu?=
 =?us-ascii?Q?wR+/libod7ixOOTHZcVTN0BizH13aeow06ePY227/0VXac0g7DpuZA/Wx5cr?=
 =?us-ascii?Q?7zfVxMpgrEtimvLh+8cIaHnZ49XKTTNvxdxDiLk6IfJuyU+fyiO+Bv7sbxto?=
 =?us-ascii?Q?T93LPutTQSJvv7A5Dn41QQw0etC7iDupwg3pLzq7QGVaKeSsC5YjuZhlNtbf?=
 =?us-ascii?Q?yOUQYraT4taM2cDvgc698QWVcw7S4VFyDdZHbUGVmu0bm2ePFo4+0I/23N+v?=
 =?us-ascii?Q?i4k=3D?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2174
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT027.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	187033f4-d8f2-4f77-dc3f-08d950b0dc7e
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	vhgqBOd/MsmHEqh74rnzGRpD19gTvBI2owl5DCtd0yenJUbWCxZd6eqL/iqVqRyEB3PTp+qKKm5hleiJjUXxpfmHjwGMdOBx1MeoHLTJvLbAwXdeMGMWw8TTXuKFmxpPwNxA0CI9Kb/UYGkSvRayXoS37KfnV0zTbMrXOgXMmeGl1YRurOxdwM2blwXb4WgcOQs0UmhZ6v/fLVjpLfWz6j7qsd8PhyyBYe7pCpqmV5phTcSMuSteZm4/+ZWJiGCHe9Qt/TeQ/2ECJbJFV6ZqcEL+8Ope0SUXC0MgHJCL9OCW02xEa0ZZFdxqm+PzW50K88eAwkraV89CikNvp0AWF0yqYiVlcAhjOUlCvZqog+sHASsJsEsVPErg5/0SdlOVcz3gtpJmcXjJalmVqbAUD//0Apwq/xRGejglkfTlx9TDwmdjioozaVlZCXPHvC1XbVOtQ1/0dXP6X0+aG8rbrGKTjPik/RtD0QqKfdyNGPdV1ZaIVJ5jz3xtgZMrkf9JA7rIYPs379+Eum6uT2QMcB2s43r2JqIguf6w97SkJEj++Zb+1/pZ2JwyysVLdbrwBqx5q5Dt0ylrKxSystSAXGcBOelRLcfic8ZrxXLiabGmY7xSuh6Utv6szoje3NA4RoZIma3SnHfafL8svmVpZXMmpfbx9J+5hNbEAcqDFFXOAtTH4v9emoJubHvileaY8BbuCnx9izOIQmIWHEf/+Q==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(316002)(70206006)(70586007)(54906003)(53546011)(7696005)(9686003)(6506007)(8676002)(55016002)(356005)(83380400001)(5660300002)(6862004)(4326008)(26005)(8936002)(47076005)(52536014)(86362001)(82310400003)(336012)(2906002)(508600001)(81166007)(33656002)(186003)(107886003)(36860700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 03:44:48.3122
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 0be14203-d539-4e16-7587-08d950b0e1e3
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT027.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2140

Hi Julien

> -----Original Message-----
> From: Penny Zheng <penny.zheng@arm.com>
> Sent: Thursday, July 15, 2021 1:18 PM
> To: xen-devel@lists.xenproject.org; sstabellini@kernel.org; julien@xen.or=
g
> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Penny Zheng
> <Penny.Zheng@arm.com>; Wei Chen <Wei.Chen@arm.com>;
> jbeulich@suse.com; nd <nd@arm.com>
> Subject: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
>=20
> This commit introduces allocate_static_memory to allocate static memory a=
s
> guest RAM for Domain on Static Allocation.
>=20
> It uses acquire_domstatic_pages to acquire pre-configured static memory f=
or
> this domain, and uses guest_physmap_add_page to set up P2M table.
> These pre-defined static memory banks shall be firstly mapped to the fixe=
d
> guest RAM address `GUEST_RAM0_BASE`. And until it exhausts the
> `GUEST_RAM0_SIZE`, it will seek to `GUEST_RAM1_BASE`, and so on.
> `GUEST_RAM0` may take up several pre-defined physical RAM regions.
>=20
> Signed-off-by: Penny Zheng <penny.zheng@arm.com>
> ---
> v3 changes:
> - parse "xen,static-mem" in way of phandle back to property.
> - use unsigned int for index
> - rename allocate_static_bank_memory to append_static_memory_to_bank
> - infer the next GFN from the bank information
> - simplify the code in double loop.
> ---
>  xen/arch/arm/domain_build.c | 137
> +++++++++++++++++++++++++++++++++++-
>  1 file changed, 135 insertions(+), 2 deletions(-)
>=20
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index cdb16f2086..ed290ee31b 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -480,6 +480,139 @@ fail:
>            (unsigned long)kinfo->unassigned_mem >> 10);  }
>=20
> +static bool __init append_static_memory_to_bank(struct domain *d,
> +                                                struct membank *bank,
> +                                                mfn_t smfn,
> +                                                paddr_t size) {
> +    int res;
> +    paddr_t tot_size =3D size;
> +    /* Infer next GFN. */
> +    gfn_t sgfn =3D gaddr_to_gfn(bank->start + bank->size);
> +
> +    while ( tot_size > 0 )
> +    {
> +        unsigned int order =3D get_allocation_size(tot_size);
> +
> +        res =3D guest_physmap_add_page(d, sgfn, smfn, order);

When constructing Patch v4, and second thought on this commit:

Do you think that here we shall define a new function guest_physmap_add_pag=
es for adding
nr pages p2m mapping, just like what we did for assign_pages(...).

Since right now guest_physmap_add_page is also limited to taking care of pa=
ge with a single order,=20
We had trouble of count-to-order conversion when page number is not in a po=
wer-of-two here too.

> +        if ( res )
> +        {
> +            dprintk(XENLOG_ERR, "Failed map pages to DOMU: %d", res);
> +            return false;
> +        }
> +
> +        smfn =3D mfn_add(smfn, 1UL << order);
> +        tot_size -=3D (1UL << (PAGE_SHIFT + order));
> +    }
> +
> +    bank->size =3D bank->size + size;
> +    return true;
> +}
> +
> +/* Allocate memory from static memory as RAM for one specific domain d.
> +*/ static void __init allocate_static_memory(struct domain *d,
> +                                          struct kernel_info *kinfo,
> +                                          const struct dt_property *prop=
,
> +                                          u32 addr_cells, u32
> +size_cells) {
> +    unsigned int nr_banks, gbank, bank =3D 0;
> +    const uint64_t rambase[] =3D GUEST_RAM_BANK_BASES;
> +    const uint64_t ramsize[] =3D GUEST_RAM_BANK_SIZES;
> +    const __be32 *cell;
> +    u32 reg_cells =3D addr_cells + size_cells;
> +    u64 tot_size =3D 0;
> +    paddr_t pbase, psize, gsize;
> +    mfn_t smfn;
> +
> +    /* Start with GUEST_RAM0. */
> +    kinfo->mem.nr_banks =3D 0;
> +    gbank =3D 0;
> +    gsize =3D ramsize[gbank];
> +    kinfo->mem.bank[gbank].start =3D rambase[gbank];
> +
> +    cell =3D (const __be32 *)prop->value;
> +    nr_banks =3D (prop->length) / (reg_cells * sizeof (u32));
> +    BUG_ON(nr_banks > NR_MEM_BANKS);
> +
> +    while ( bank < nr_banks )
> +    {
> +        device_tree_get_reg(&cell, addr_cells, size_cells, &pbase, &psiz=
e);
> +        tot_size +=3D psize;
> +        smfn =3D maddr_to_mfn(pbase);
> +
> +        if ( !acquire_domstatic_pages(d, psize >> PAGE_SHIFT, smfn, 0) )
> +        {
> +            printk(XENLOG_ERR
> +                    "%pd: cannot acquire static memory "
> +                    "(0x%"PRIpaddr" - 0x%"PRIpaddr").\n",
> +                    d, pbase, pbase + psize);
> +            goto fail;
> +        }
> +
> +        printk(XENLOG_INFO "%pd: STATIC BANK[%d] %#"PRIpaddr"-
> %#"PRIpaddr"\n",
> +               d, bank, pbase, pbase + psize);
> +
> +        /*
> +         * It shall be mapped to the fixed guest RAM address rambase[i],
> +         * And until it exhausts the ramsize[i], it will seek to the nex=
t
> +         * rambase[i+1].
> +         */
> +        while ( 1 )
> +        {
> +            /*
> +             * The current physical bank is fully mapped.
> +             * Handle the next physical bank.
> +             */
> +            if ( gsize >=3D psize )
> +            {
> +                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank[g=
bank],
> +                                                   smfn, psize) )
> +                    goto fail;
> +
> +                gsize =3D gsize - psize;
> +                bank++;
> +                break;
> +            }
> +            /*
> +             * Current guest bank memory is not enough to map.
> +             * Check if we have another guest bank available.
> +             * gbank refers guest memory bank index.
> +             */
> +            else if ( (gbank + 2) > GUEST_RAM_BANKS ) {
> +                printk("Exhausted the number of guest bank\n");
> +                goto fail;
> +            }
> +            else
> +            {
> +                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank[g=
bank],
> +                                                   smfn, gsize) )
> +                    goto fail;
> +
> +                psize =3D psize - gsize;
> +                smfn =3D mfn_add(smfn, gsize >> PAGE_SHIFT);
> +                /* Update to the next guest bank. */
> +                gbank++;
> +                gsize =3D ramsize[gbank];
> +                kinfo->mem.bank[gbank].start =3D rambase[gbank];
> +            }
> +        }
> +    }
> +
> +    kinfo->mem.nr_banks =3D ++gbank;
> +    kinfo->unassigned_mem -=3D tot_size;
> +    if ( kinfo->unassigned_mem )
> +        printk(XENLOG_ERR
> +               "Size of \"memory\" property doesn't match up with the on=
es "
> +               "defined in \"xen,static-mem\".\n");
> +
> +    return;
> +
> +fail:
> +    panic("Failed to allocate requested static memory for domain %pd."
> +          "Fix the VMs configurations.\n",
> +          d);
> +}
> +
>  static int __init write_properties(struct domain *d, struct kernel_info =
*kinfo,
>                                     const struct dt_device_node *node)  {=
 @@ -2486,8 +2619,8
> @@ static int __init construct_domU(struct domain *d,
>      if ( !static_mem )
>          allocate_memory(d, &kinfo);
>      else
> -        /* TODO: allocate_static_memory(...). */
> -        BUG();
> +        allocate_static_memory(d, &kinfo, static_mem_prop,
> +                               static_mem_addr_cells,
> + static_mem_size_cells);
>=20
>      rc =3D prepare_dtb_domU(d, &kinfo);
>      if ( rc < 0 )
> --
> 2.25.1

A lot thanks

Penny



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 05:01:56 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 05:01:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161039.295684 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8FDo-00027e-Ka; Tue, 27 Jul 2021 05:01:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161039.295684; Tue, 27 Jul 2021 05:01:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8FDo-00027X-Hh; Tue, 27 Jul 2021 05:01:40 +0000
Received: by outflank-mailman (input) for mailman id 161039;
 Tue, 27 Jul 2021 05:01:39 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8FDn-00027L-6k; Tue, 27 Jul 2021 05:01:39 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8FDm-0006JR-TN; Tue, 27 Jul 2021 05:01:38 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8FDm-0006Ix-Kv; Tue, 27 Jul 2021 05:01:38 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8FDm-0006ao-KO; Tue, 27 Jul 2021 05:01:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=oEN1uOb8TdgRC0leAIpF7PNg6yFoeRgyb0zr+5uOg1U=; b=3nve7e7f9GLzeG0e/w2dgK7Pn9
	ishVla0fv+0DlkrmjZXlZ8S91dDFiip42ZOTGWiM1od+D70Rg/cUiYxf4uPV+Yob6mJypv2l9BKuk
	INwoOc5xJAgzbnGdcnVIIJUQlAyCaysihDmGONaTdpUSRJV2+zopiEfMrRsQZdYMVAA4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164002-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164002: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 05:01:38 +0000

flight 164002 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164002/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   53 days
Failing since        162368  2021-06-04 15:42:59 Z   52 days  146 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    0 days    3 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4087 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 06:19:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 06:19:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161046.295700 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8GR0-0000C3-Cc; Tue, 27 Jul 2021 06:19:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161046.295700; Tue, 27 Jul 2021 06:19:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8GR0-0000Bw-8c; Tue, 27 Jul 2021 06:19:22 +0000
Received: by outflank-mailman (input) for mailman id 161046;
 Tue, 27 Jul 2021 06:19:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=99OC=MT=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8GQz-0000Bq-Oh
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 06:19:21 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.2.73]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 91e08610-eea2-11eb-96d3-12813bfff9fa;
 Tue, 27 Jul 2021 06:19:17 +0000 (UTC)
Received: from AM6P194CA0030.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::43)
 by DB8PR08MB3962.eurprd08.prod.outlook.com (2603:10a6:10:a9::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.24; Tue, 27 Jul
 2021 06:19:14 +0000
Received: from AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:90:cafe::ec) by AM6P194CA0030.outlook.office365.com
 (2603:10a6:209:90::43) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25 via Frontend
 Transport; Tue, 27 Jul 2021 06:19:14 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT042.mail.protection.outlook.com (10.152.17.168) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Tue, 27 Jul 2021 06:19:13 +0000
Received: ("Tessian outbound 4c02392472aa:v100");
 Tue, 27 Jul 2021 06:19:13 +0000
Received: from a79d77c52026.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 93191F27-BD72-42F6-89B7-FA40ACED4A9D.1; 
 Tue, 27 Jul 2021 06:19:03 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a79d77c52026.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 27 Jul 2021 06:19:03 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com (2603:10a6:803:10a::33)
 by VI1PR08MB3422.eurprd08.prod.outlook.com (2603:10a6:803:7d::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.28; Tue, 27 Jul
 2021 06:18:59 +0000
Received: from VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::adf8:8d6f:2a30:b60c]) by VE1PR08MB5215.eurprd08.prod.outlook.com
 ([fe80::adf8:8d6f:2a30:b60c%5]) with mapi id 15.20.4352.031; Tue, 27 Jul 2021
 06:18:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 91e08610-eea2-11eb-96d3-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8aVk0L9Lc99ISAQL2D8AVYd8QOafm2utpuw65UXPqLA=;
 b=UVaO3bWht2KyixN8gWZ46zQNkFlr8Ww3VgvcyoaerYd3/pQbRzV7iunqVIAdVqs0YFYX3meuFWbxHHqd7wDcty0eFDZCZ7RXmb2AskXBQQPLu3E3SswipIDM/PA8SDraACMaX0L7ErQ+g061H9PaR407rJTC1aTsBttPy8rWoKo=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JJMhaehwztxdTS9I5Up4V3+GckLZKGJa41qGlbbPQo4e3eIEH/rWMsjMdOF78RVRlisDN9+A6Kwkkzme0kCgcb9vPohNzVLPnNyttv1e3rohXyYfftwvbsuMjEt7xzs8JC+XMK8NJ+D2RnZIzU8n51FQ0i+esyszUT/SzCKCuab/Mf2tid18hyR2Easziy2jRY3S/qA+8armyiIlQ6PRT9HHquWGyHpnVBrAc1pHWBUOBTx9DPBmD30G/JYNm9+sDhf1kAUMG/9kulmEIP11wB+RFvEvPpwwDuXW0HaJP/FU+WNsjJDb7xhF53Ef3WO8OH5g37XOmtXBJZ9z6d1KwA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8aVk0L9Lc99ISAQL2D8AVYd8QOafm2utpuw65UXPqLA=;
 b=RGwX+aTeK1RXGZmWH9mJOUx00SoH+iqBtwSoG6eZPn7VRr7j4XDkQorpeErAmQFdr/9W3UbmadbUI0hR80gm8Dr3eJ9klN0i0lnXYNRnouM/ql2x/DuPr/H1M6+i+PgUNic6Qf4OQnKxmyLUhf0Xo1Q1/2JSgiiEzPQuiu0hBITdXzwQDUn9qLEd0R8W1tGeQLOEqzKJJbkwrVJ5weZdeMBF0GSd5PUr6aeShv2IktizfJWmtfPVp4ee5nYmLvTLH2FJnLvcCUhqCqI/c+/+g+pjKSvD4wT7h8/DpplY4QA7J8Lq47h+UV506yS5TOWsTqTCMsciT5Yv5Jy4DmVjIQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8aVk0L9Lc99ISAQL2D8AVYd8QOafm2utpuw65UXPqLA=;
 b=UVaO3bWht2KyixN8gWZ46zQNkFlr8Ww3VgvcyoaerYd3/pQbRzV7iunqVIAdVqs0YFYX3meuFWbxHHqd7wDcty0eFDZCZ7RXmb2AskXBQQPLu3E3SswipIDM/PA8SDraACMaX0L7ErQ+g061H9PaR407rJTC1aTsBttPy8rWoKo=
From: Penny Zheng <Penny.Zheng@arm.com>
To: "julien@xen.org" <julien@xen.org>
CC: Bertrand Marquis <Bertrand.Marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>,
	"jbeulich@suse.com" <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>, "sstabellini@kernel.org"
	<sstabellini@kernel.org>
Subject: RE: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
Thread-Topic: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
Thread-Index: AQHXeTjsii93P3Jir0yV0AuWxQR1FqtWPVlQgAAeEYA=
Date: Tue, 27 Jul 2021 06:18:59 +0000
Message-ID:
 <VE1PR08MB521549D59EE56EFA23DBAB2FF7E99@VE1PR08MB5215.eurprd08.prod.outlook.com>
References: <20210715051819.3073628-1-penny.zheng@arm.com>
 <20210715051819.3073628-11-penny.zheng@arm.com>
 <VE1PR08MB52153A258DE5E33D11C337CDF7E99@VE1PR08MB5215.eurprd08.prod.outlook.com>
In-Reply-To:
 <VE1PR08MB52153A258DE5E33D11C337CDF7E99@VE1PR08MB5215.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ts-tracking-id: 9FC8154142504D47A155487BAA58C24E.0
x-checkrecipientchecked: true
Authentication-Results-Original: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: eaf06644-ef24-456e-cd30-08d950c674aa
x-ms-traffictypediagnostic: VI1PR08MB3422:|DB8PR08MB3962:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DB8PR08MB39629CBD14C9CB3EA28E7678F7E99@DB8PR08MB3962.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:4941;OLM:4941;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 b21KsCj9LA4Bbpps+lSviW32iVgs18VWbyGrqHFW5sxe8TUHubUwdZlSNMFLstPnO5XtS/jx1HYoWb/j5Eex16RqH+fliOwlLEZgXunKiitT5W/kOUgW8R8tVyEZbx0tvSTpSpNYn8obdTTUHoO/+aW6/1IMWbetwsluPMAy0se2S2EApN2Y9LfKL8mumwD8iWutsN7ESmSt5ZI2hjxxdS2NnB5w2DLWPxjTPZGo2stGwPpOweBFRUBLpMEX2uERN4rhBcAkilG/DeAm3Y6ZWnH1efvq3z/ilkARmhrXw8tynfWtheRNzM2EVaVkXe5LEPdW/IC+Q5tYYsOeFK6OM5MsA63O7tSMcDjqoTRPNDZiaYjqQGO2lsIBIPtKZBV4AsNZjeqFDToGQBkMsZGpaLfqJIn5XInqMnv4lxR7+B4+yS+I70D5fI4ko5b5Bnk3EMbyNEGKS1SrDtdcF8Sw9dR56Wzvx/aOyML0BJ6WEuH0iccg0/5nVMePmfg4wSwhT6zwufyFn1ZbDTV9nOxrN0o2m1nB6FfuLETnbjvqj/YhD4gwKWeYifx+PY9jtKrQLt4a8/t1LwrZYNL9FNT9tzEOWY8gQ2V96hr+3kJVze2T8YHwA5SM2ZPbJEEPzxFFcbFlbiLShKOa1e1OovAGwQNhBJS0RJLUY9roF0W34jiJ+bTiqrnJBepGuyjwUeLtEtF2TNM32mAw3DvnPYU+fQ==
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR08MB5215.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(376002)(39850400004)(346002)(366004)(396003)(71200400001)(64756008)(316002)(66476007)(4326008)(86362001)(6506007)(478600001)(8676002)(8936002)(33656002)(9686003)(5660300002)(53546011)(54906003)(83380400001)(26005)(76116006)(2906002)(55016002)(7696005)(66446008)(66946007)(122000001)(6916009)(2940100002)(186003)(52536014)(38100700002)(66556008)(38070700004);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?FQRkCe17uq4F61jzhvF92X+5i6eULVXTpKBWiql7zcggOIY+crC2PnGi0QMB?=
 =?us-ascii?Q?VA8SBCGIQEJQpPbXIyESSHA3Kyyo3QI2ZcCb67jVeNTgK2tBFI7MuhLiW65S?=
 =?us-ascii?Q?BIb/O4xwQIcNxkMYvNfXuMIQZC6NNmik9AGIVLxnLR8HTSC91ZyShQxGVmfk?=
 =?us-ascii?Q?Ew7FbzdB0J3R2ccd4ekiNIMyWnNKMlkC/UO2PIA1NHk/Ogdoth7ZuXY8i44S?=
 =?us-ascii?Q?n1hhKQJNW4Lr1HoOu71Q8LtcIpOy/E0B9COBGPS7wHncyXZwQ5cfEID0j+pl?=
 =?us-ascii?Q?umZ4C9s9UZd/Td02KIB6+XONxkGDAKQPZJKdIMx6Wec/gUMnEZPXd6i76RGQ?=
 =?us-ascii?Q?0MbGcn4e99dX2WE2LlwzvfRpgJ1LRg4wHRO4vRcKObj6H1qMzzeUS5hjy+dd?=
 =?us-ascii?Q?A8ZNv5j62AKqg77PD8aY/9783poZoZSJYyyHRDzefjK0WjB6MKihcUVXuJzZ?=
 =?us-ascii?Q?TEVWQ/54MZRT6eC0ptGB5fUiyvqJnr4nEIIiqj3WtLjtBQFH8HzgDXQv5ZLs?=
 =?us-ascii?Q?1W7r/DjMNhrTXvPdxnXSADLam9+wtrpD4o3gnYnm1HV+S1SYj0IH4nFUnPNL?=
 =?us-ascii?Q?47I2Xzhz/hh4sbNC6ggUM5xYe68WCrhH3tHJ3I4p5+bR09z80QGJFQYby6Dj?=
 =?us-ascii?Q?26Tf4HnGYMeHpTJVF3oZ/xoIBO3QpmiHlhFGf2jR41GmhX8JcHJvvo2qB7a4?=
 =?us-ascii?Q?tOOUB6IwvscGpm09H+ecnE9I4Pfa8qsOOTcyA1t26NfaKyWLTvGAml9U3ec/?=
 =?us-ascii?Q?sZZL/e755MIHz80fE3FkwswZGV9jmhddQ/StIY542D8gXNQWLWMCoKRPu4ix?=
 =?us-ascii?Q?KF7NMRO+mHfOqwAQX8sIL6ZGm9xmM1rNJK5aUq5aaaSklzPSKmZmjB8i7qhV?=
 =?us-ascii?Q?fCt6cG7S37DhTLqNyt3JEPfevbixyr/glb091reCHPHjBafqRE6Yqe2VDhOx?=
 =?us-ascii?Q?yPKy3ABncpYcnkd4d97NqM8LpYlImQifi/t+EcExZitaa32Z7Rebp9WOXdYR?=
 =?us-ascii?Q?20cdIItCrEt4uw7hxxL+mZGcL9hLeqUp2nMyxEIvqkFTWA/2CDfnGGy0Hv3p?=
 =?us-ascii?Q?6k+vsmPA8T8PAg9vZVQZvzWWm4z9Pl1NJDivr/55s6RBaAorhYv57zOVfCck?=
 =?us-ascii?Q?RFfB5NFrounzguXTIiTjzdTXBukYpcxGi3/tFwrODT8kD+5c3UJvfCpQSwKZ?=
 =?us-ascii?Q?PsBHO/uXvV+oNPAo+NjkjbtyMcXvY3v5U+2q4ZNOwDGxh44+axcR/E5zyB6d?=
 =?us-ascii?Q?QiiMCe3B0jDQ3HgviGcDUR/oGlyl69/kSU4Lv1ChM2twbDLSj6Tl0XDNvzhL?=
 =?us-ascii?Q?2vb3U6YnQ51k/xRhQ0rdXtZx?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3422
Original-Authentication-Results: xen.org; dkim=none (message not signed)
 header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	ba2c7988-0888-4c6c-6c3c-08d950c66bf4
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	U73Yntpn9pzs+Oc9hnQWt4LVWmEsrCaCCUhag05lttZ/OqSwZaRWTba10stBtO0xqNPC2Rw9inIRWAn2TYDVtAds5N/Uw/91Dr8GzSTiOO9tsiz59SICCQvWiN1QmiLKlg7mFjG31r4QVDcc8dlSz1Z7JxigvjmwOj6P8LT1E1Syq/rH7yWYFIzZ9tVKUI5ZvwIJzX1GYqqMmnPYcI3TTnYXkuB8BYDKVdN2tToOsAzZbcJbZPRiw5hT/v8eyL140ikXpGc7cYTUyFU5HaCVyT1zZ4D1rwOwI7TtBPHsXk9vpY24+gwg2rmopru4n+LoBGxpu8mH2b9uyRRjd9rDtJoyIfd0WJe3ZdZQR1S9/VORv49WMy6R2Hr/VFue3iEi/XvknScohelJAULrsH6ImkJOhN3bDciwTzkSDByeRGidG4lXqdyfKC14wyoBn6ujrT+ciUhfs/3AlmaRD5cdefq12Toz/+4D2BKXzg764E3obd3h8K3aJTAcFHkGW7hFx1eUSBaIhqGF/7uiu48NxtFw5l4AkR7H0KtReZrfB/OQbZpd+xsSQ1ZABXyzRs1foe8yCCG/B3ew4DX4H3Eu0+J2o3PtpCGQego5S9fKxIyT9/3XaBZOiI0d3ABXvG0JIxkFAjpQVTQBAfepvQDtJmMQsNFabPoXwaIn2hb+PpNHYbErwevT3CaFvWX97BmDsVqrzwEzebq9rK1INCSqY85YKAZrg2LZFTnJHIOuYZU=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ErrorRetry;CAT:NONE;SFS:(4636009)(396003)(39840400004)(136003)(346002)(376002)(36840700001)(46966006)(83380400001)(33656002)(82310400003)(5660300002)(8936002)(8676002)(52536014)(107886003)(70586007)(336012)(6862004)(2906002)(70206006)(4326008)(186003)(53546011)(6506007)(9686003)(478600001)(86362001)(316002)(54906003)(81166007)(55016002)(26005)(356005)(7696005)(36860700001)(47076005)(2940100002)(36900700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 06:19:13.9973
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: eaf06644-ef24-456e-cd30-08d950c674aa
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB3962

Hi Julien=20

> -----Original Message-----
> From: Penny Zheng
> Sent: Tuesday, July 27, 2021 11:45 AM
> To: julien@xen.org
> Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Wei Chen
> <Wei.Chen@arm.com>; jbeulich@suse.com; xen-devel@lists.xenproject.org;
> sstabellini@kernel.org
> Subject: RE: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
>=20
> Hi Julien
>=20
> > -----Original Message-----
> > From: Penny Zheng <penny.zheng@arm.com>
> > Sent: Thursday, July 15, 2021 1:18 PM
> > To: xen-devel@lists.xenproject.org; sstabellini@kernel.org;
> > julien@xen.org
> > Cc: Bertrand Marquis <Bertrand.Marquis@arm.com>; Penny Zheng
> > <Penny.Zheng@arm.com>; Wei Chen <Wei.Chen@arm.com>;
> jbeulich@suse.com;
> > nd <nd@arm.com>
> > Subject: [PATCH V3 10/10] xen/arm: introduce allocate_static_memory
> >
> > This commit introduces allocate_static_memory to allocate static
> > memory as guest RAM for Domain on Static Allocation.
> >
> > It uses acquire_domstatic_pages to acquire pre-configured static
> > memory for this domain, and uses guest_physmap_add_page to set up P2M
> table.
> > These pre-defined static memory banks shall be firstly mapped to the
> > fixed guest RAM address `GUEST_RAM0_BASE`. And until it exhausts the
> > `GUEST_RAM0_SIZE`, it will seek to `GUEST_RAM1_BASE`, and so on.
> > `GUEST_RAM0` may take up several pre-defined physical RAM regions.
> >
> > Signed-off-by: Penny Zheng <penny.zheng@arm.com>
> > ---
> > v3 changes:
> > - parse "xen,static-mem" in way of phandle back to property.
> > - use unsigned int for index
> > - rename allocate_static_bank_memory to append_static_memory_to_bank
> > - infer the next GFN from the bank information
> > - simplify the code in double loop.
> > ---
> >  xen/arch/arm/domain_build.c | 137
> > +++++++++++++++++++++++++++++++++++-
> >  1 file changed, 135 insertions(+), 2 deletions(-)
> >
> > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> > index cdb16f2086..ed290ee31b 100644
> > --- a/xen/arch/arm/domain_build.c
> > +++ b/xen/arch/arm/domain_build.c
> > @@ -480,6 +480,139 @@ fail:
> >            (unsigned long)kinfo->unassigned_mem >> 10);  }
> >
> > +static bool __init append_static_memory_to_bank(struct domain *d,
> > +                                                struct membank *bank,
> > +                                                mfn_t smfn,
> > +                                                paddr_t size) {
> > +    int res;
> > +    paddr_t tot_size =3D size;
> > +    /* Infer next GFN. */
> > +    gfn_t sgfn =3D gaddr_to_gfn(bank->start + bank->size);
> > +
> > +    while ( tot_size > 0 )
> > +    {
> > +        unsigned int order =3D get_allocation_size(tot_size);
> > +
> > +        res =3D guest_physmap_add_page(d, sgfn, smfn, order);
>=20
> When constructing Patch v4, and second thought on this commit:
>=20
> Do you think that here we shall define a new function
> guest_physmap_add_pages for adding nr pages p2m mapping, just like what
> we did for assign_pages(...).
>=20
> Since right now guest_physmap_add_page is also limited to taking care of
> page with a single order, We had trouble of count-to-order conversion whe=
n
> page number is not in a power-of-two here too.

Extra info on second thought:

If doing above changes, draft diff is as follows.=20

Interface of guest_physmap_add_entry is also needing changes, parameter
from "unsigned long page_order " to "unsigned long nr_pages".=20
>From the point view of ARM, page_order is always taken as 1 << page_order, =
so
IMO the transfer is seamless.

However, to be compatible, we shared the same interface "guest_physmap_add_=
entry" with x86,
sharing the same name and parameters but with different implementation.

Even now, we didn't using this interface on any common codes, so we could k=
eep
above changes only on ARM. But it definitely is a hidden trouble in the fut=
ure...

So hmmmm, Wdyt?=20

diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
index d414c4feb9..07c9f73809 100644
--- a/xen/arch/arm/p2m.c
+++ b/xen/arch/arm/p2m.c
@@ -1376,10 +1376,10 @@ int map_dev_mmio_region(struct domain *d,
 int guest_physmap_add_entry(struct domain *d,
                             gfn_t gfn,
                             mfn_t mfn,
-                            unsigned long page_order,
+                            unsigned long nr_pages,
                             p2m_type_t t)
 {
-    return p2m_insert_mapping(d, gfn, (1 << page_order), mfn, t);
+    return p2m_insert_mapping(d, gfn, nr_pages, mfn, t);
 }

 int guest_physmap_remove_page(struct domain *d, gfn_t gfn, mfn_t mfn,

diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
index 4f8b3b0ec7..a869639fb7 100644
--- a/xen/include/asm-arm/p2m.h
+++ b/xen/include/asm-arm/p2m.h
@@ -301,7 +301,7 @@ int map_dev_mmio_region(struct domain *d,
 int guest_physmap_add_entry(struct domain *d,
                             gfn_t gfn,
                             mfn_t mfn,
-                            unsigned long page_order,
+                            unsigned long nr_pages,
                             p2m_type_t t);

 /* Untyped version for RAM only, for compatibility */
@@ -310,7 +310,15 @@ static inline int guest_physmap_add_page(struct domain=
 *d,
                                          mfn_t mfn,
                                          unsigned int page_order)
 {
-    return guest_physmap_add_entry(d, gfn, mfn, page_order, p2m_ram_rw);
+    return guest_physmap_add_entry(d, gfn, mfn, (1UL << page_order), p2m_r=
am_rw);
+}
+
+static inline int guest_physmap_add_pages(struct domain *d,
+                                          gfn_t gfn,
+                                          mfn_t mfn,
+                                          unsigned long nr_pages)
+{
+    return guest_physmap_add_entry(d, gfn, mfn, nr_pages, p2m_ram_rw);
 }

 mfn_t gfn_to_mfn(struct domain *d, gfn_t gfn);


> > +        if ( res )
> > +        {
> > +            dprintk(XENLOG_ERR, "Failed map pages to DOMU: %d", res);
> > +            return false;
> > +        }
> > +
> > +        smfn =3D mfn_add(smfn, 1UL << order);
> > +        tot_size -=3D (1UL << (PAGE_SHIFT + order));
> > +    }
> > +
> > +    bank->size =3D bank->size + size;
> > +    return true;
> > +}
> > +
> > +/* Allocate memory from static memory as RAM for one specific domain d=
.
> > +*/ static void __init allocate_static_memory(struct domain *d,
> > +                                          struct kernel_info *kinfo,
> > +                                          const struct dt_property *pr=
op,
> > +                                          u32 addr_cells, u32
> > +size_cells) {
> > +    unsigned int nr_banks, gbank, bank =3D 0;
> > +    const uint64_t rambase[] =3D GUEST_RAM_BANK_BASES;
> > +    const uint64_t ramsize[] =3D GUEST_RAM_BANK_SIZES;
> > +    const __be32 *cell;
> > +    u32 reg_cells =3D addr_cells + size_cells;
> > +    u64 tot_size =3D 0;
> > +    paddr_t pbase, psize, gsize;
> > +    mfn_t smfn;
> > +
> > +    /* Start with GUEST_RAM0. */
> > +    kinfo->mem.nr_banks =3D 0;
> > +    gbank =3D 0;
> > +    gsize =3D ramsize[gbank];
> > +    kinfo->mem.bank[gbank].start =3D rambase[gbank];
> > +
> > +    cell =3D (const __be32 *)prop->value;
> > +    nr_banks =3D (prop->length) / (reg_cells * sizeof (u32));
> > +    BUG_ON(nr_banks > NR_MEM_BANKS);
> > +
> > +    while ( bank < nr_banks )
> > +    {
> > +        device_tree_get_reg(&cell, addr_cells, size_cells, &pbase, &ps=
ize);
> > +        tot_size +=3D psize;
> > +        smfn =3D maddr_to_mfn(pbase);
> > +
> > +        if ( !acquire_domstatic_pages(d, psize >> PAGE_SHIFT, smfn, 0)=
 )
> > +        {
> > +            printk(XENLOG_ERR
> > +                    "%pd: cannot acquire static memory "
> > +                    "(0x%"PRIpaddr" - 0x%"PRIpaddr").\n",
> > +                    d, pbase, pbase + psize);
> > +            goto fail;
> > +        }
> > +
> > +        printk(XENLOG_INFO "%pd: STATIC BANK[%d] %#"PRIpaddr"-
> > %#"PRIpaddr"\n",
> > +               d, bank, pbase, pbase + psize);
> > +
> > +        /*
> > +         * It shall be mapped to the fixed guest RAM address rambase[i=
],
> > +         * And until it exhausts the ramsize[i], it will seek to the n=
ext
> > +         * rambase[i+1].
> > +         */
> > +        while ( 1 )
> > +        {
> > +            /*
> > +             * The current physical bank is fully mapped.
> > +             * Handle the next physical bank.
> > +             */
> > +            if ( gsize >=3D psize )
> > +            {
> > +                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank=
[gbank],
> > +                                                   smfn, psize) )
> > +                    goto fail;
> > +
> > +                gsize =3D gsize - psize;
> > +                bank++;
> > +                break;
> > +            }
> > +            /*
> > +             * Current guest bank memory is not enough to map.
> > +             * Check if we have another guest bank available.
> > +             * gbank refers guest memory bank index.
> > +             */
> > +            else if ( (gbank + 2) > GUEST_RAM_BANKS ) {
> > +                printk("Exhausted the number of guest bank\n");
> > +                goto fail;
> > +            }
> > +            else
> > +            {
> > +                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank=
[gbank],
> > +                                                   smfn, gsize) )
> > +                    goto fail;
> > +
> > +                psize =3D psize - gsize;
> > +                smfn =3D mfn_add(smfn, gsize >> PAGE_SHIFT);
> > +                /* Update to the next guest bank. */
> > +                gbank++;
> > +                gsize =3D ramsize[gbank];
> > +                kinfo->mem.bank[gbank].start =3D rambase[gbank];
> > +            }
> > +        }
> > +    }
> > +
> > +    kinfo->mem.nr_banks =3D ++gbank;
> > +    kinfo->unassigned_mem -=3D tot_size;
> > +    if ( kinfo->unassigned_mem )
> > +        printk(XENLOG_ERR
> > +               "Size of \"memory\" property doesn't match up with the =
ones "
> > +               "defined in \"xen,static-mem\".\n");
> > +
> > +    return;
> > +
> > +fail:
> > +    panic("Failed to allocate requested static memory for domain %pd."
> > +          "Fix the VMs configurations.\n",
> > +          d);
> > +}
> > +
> >  static int __init write_properties(struct domain *d, struct kernel_inf=
o *kinfo,
> >                                     const struct dt_device_node *node)
> > { @@ -2486,8 +2619,8 @@ static int __init construct_domU(struct domain
> *d,
> >      if ( !static_mem )
> >          allocate_memory(d, &kinfo);
> >      else
> > -        /* TODO: allocate_static_memory(...). */
> > -        BUG();
> > +        allocate_static_memory(d, &kinfo, static_mem_prop,
> > +                               static_mem_addr_cells,
> > + static_mem_size_cells);
> >
> >      rc =3D prepare_dtb_domU(d, &kinfo);
> >      if ( rc < 0 )
> > --
> > 2.25.1
>=20
> A lot thanks
>=20
> Penny



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 06:39:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 06:39:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161053.295711 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8Gkj-0002Wo-6O; Tue, 27 Jul 2021 06:39:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161053.295711; Tue, 27 Jul 2021 06:39:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8Gkj-0002Wh-3K; Tue, 27 Jul 2021 06:39:45 +0000
Received: by outflank-mailman (input) for mailman id 161053;
 Tue, 27 Jul 2021 06:39:43 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Gkh-0002WX-LH; Tue, 27 Jul 2021 06:39:43 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Gkh-0007yS-96; Tue, 27 Jul 2021 06:39:43 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Gkh-0003hD-04; Tue, 27 Jul 2021 06:39:43 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Gkg-0005L3-Vr; Tue, 27 Jul 2021 06:39:42 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ffLMIh0DnjYFFebY3Z8GPt3LKXeiGsZPqLahZlp4eZg=; b=PeCcnSy9qpnYZ0Yyn2KCgYyMyN
	SdOIvp0K5IPCyYjsSoBIvfP9yRiXknoLqWjho3Pgvo/OeL/Gr2jU0k0jCT6FLLFhiuOHeBCxjOUaA
	4NwE4gIIjv7ZeD4ojS6SPZo4PEIvzNQvGR6QRMNPHPa2TpFMlnKX7QXT7fM2KcYRZZeQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164000-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164000: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-libvirt-vhd:guest-start/debian.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=73c932d0ea43ddf904db9429811788480c4cb816
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 06:39:42 +0000

flight 164000 xen-unstable real [real]
flight 164006 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164000/
http://logs.test-lab.xenproject.org/osstest/logs/164006/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-libvirt-vhd 19 guest-start/debian.repeat fail pass in 164006-retest

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163991
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163991
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163991
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 163991
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163991
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163991
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163991
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163991
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163991
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163991
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163991
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163991
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  73c932d0ea43ddf904db9429811788480c4cb816
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163991  2021-07-26 01:53:00 Z    1 days
Testing same since   164000  2021-07-26 15:37:52 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Christian Lindig <christian.lindig@citrix.com>
  Igor Druzhinin <igor.druzhinin@citrix.com>
  Julien Grall <jgrall@amazon.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 fail    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   57e761b60d..73c932d0ea  73c932d0ea43ddf904db9429811788480c4cb816 -> master


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 07:30:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 07:30:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161061.295731 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8HXE-0007RP-55; Tue, 27 Jul 2021 07:29:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161061.295731; Tue, 27 Jul 2021 07:29:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8HXE-0007RI-1O; Tue, 27 Jul 2021 07:29:52 +0000
Received: by outflank-mailman (input) for mailman id 161061;
 Tue, 27 Jul 2021 07:29:50 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8HXC-0007Qo-7i; Tue, 27 Jul 2021 07:29:50 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8HXA-0000F1-B1; Tue, 27 Jul 2021 07:29:48 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8HXA-0005HR-0n; Tue, 27 Jul 2021 07:29:48 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8HXA-00021w-0F; Tue, 27 Jul 2021 07:29:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=bdIHKxyvFUtQhpx2lY8flim6tY/DkqhDAFIYp5eLqjo=; b=qp7wRaloqueypF1e5N+cctX3VC
	CJwFrxzfE7CpLDMBMXYJbWjvTZgjHadRpZQegDmgl7KtK3Br3r2l/njuK1BGt1SYTXdyDhvPo5O0w
	l2qKmEuQxL9ZGxzmxUuEd5WVWE7MZ0oymYM1RC5m4MJNAZDlpv20tGaXH/OOioyP3rzc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164004-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 164004: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=d2ce164ee278dc4f11df4d2148997558dfe8d8c0
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 07:29:48 +0000

flight 164004 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164004/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              d2ce164ee278dc4f11df4d2148997558dfe8d8c0
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  382 days
Failing since        151818  2020-07-11 04:18:52 Z  381 days  373 attempts
Testing same since   164004  2021-07-27 04:20:10 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 66976 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 07:46:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 07:46:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161069.295746 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8HnA-0001Jp-Oc; Tue, 27 Jul 2021 07:46:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161069.295746; Tue, 27 Jul 2021 07:46:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8HnA-0001Ji-Lg; Tue, 27 Jul 2021 07:46:20 +0000
Received: by outflank-mailman (input) for mailman id 161069;
 Tue, 27 Jul 2021 07:46:19 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Hn9-0001JY-B6; Tue, 27 Jul 2021 07:46:19 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Hn8-0000WH-MX; Tue, 27 Jul 2021 07:46:18 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Hn8-0005ke-C9; Tue, 27 Jul 2021 07:46:18 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Hn8-0008Ec-Be; Tue, 27 Jul 2021 07:46:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=86E31S3yW6thesPiCNwkOsZpZLqVjD7byvLytlE8y1s=; b=6RUCJBE/ksCfKBPQYSMV1BMT/w
	paG1WE+yGq2uX21uGrNz6qeMwuqEqOc5OHfUymtPnTw7sJLGR0i2nedIBZDdCspGhV/15EbEECvYi
	aH6uPydC6IlibSkXe+kGdx2nJp0U5/QQ4CZ57vPbtDr3wt/E3pgG/SYHBhTjHmghwRds=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164001-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164001: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=76bf66b9136ce373f006f68b0ef4819abc797054
X-Osstest-Versions-That:
    qemuu=34fd92ab4142bde5b54adacd16e6682f4ea83da1
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 07:46:18 +0000

flight 164001 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164001/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163997

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163997
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163997
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163997
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163997
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163997
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163997
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163997
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                76bf66b9136ce373f006f68b0ef4819abc797054
baseline version:
 qemuu                34fd92ab4142bde5b54adacd16e6682f4ea83da1

Last test of basis   163997  2021-07-26 13:08:04 Z    0 days
Testing same since   164001  2021-07-26 21:09:11 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Stefan Hajnoczi <stefanha@redhat.com>
  Taylor Simpson <tsimpson@quicinc.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   34fd92ab41..76bf66b913  76bf66b9136ce373f006f68b0ef4819abc797054 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 07:48:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 07:48:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161075.295761 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8Hp3-0001wm-60; Tue, 27 Jul 2021 07:48:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161075.295761; Tue, 27 Jul 2021 07:48:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8Hp3-0001wf-35; Tue, 27 Jul 2021 07:48:17 +0000
Received: by outflank-mailman (input) for mailman id 161075;
 Tue, 27 Jul 2021 07:48:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Gco/=MT=fujitsu.com=Alan.Robinson@srs-us1.protection.inumbo.net>)
 id 1m8Hp1-0001wX-GR
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 07:48:15 +0000
Received: from mail1.bemta25.messagelabs.com (unknown [195.245.230.65])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ff1ee7e2-eeae-11eb-96d9-12813bfff9fa;
 Tue, 27 Jul 2021 07:48:14 +0000 (UTC)
Received: from [100.112.198.115] (using TLSv1.2 with cipher
 DHE-RSA-AES256-GCM-SHA384 (256 bits))
 by server-1.bemta.az-b.eu-west-1.aws.symcld.net id A9/8A-03155-C3ABFF06;
 Tue, 27 Jul 2021 07:48:12 +0000
Received: (qmail 1782 invoked from network); 27 Jul 2021 07:48:12 -0000
Received: from unknown (HELO mailhost1.uk.fujitsu.com) (62.60.8.148)
 by server-14.tower-287.messagelabs.com with ECDHE-RSA-AES256-GCM-SHA384
 encrypted SMTP; 27 Jul 2021 07:48:12 -0000
Received: from nera12.osd.abg.fsc.net ([172.17.20.104])
 by mailhost1.uk.fujitsu.com (8.14.5/8.14.5) with SMTP id 16R7m4da019505;
 Tue, 27 Jul 2021 08:48:05 +0100
Received: by nera12.osd.abg.fsc.net (Postfix, from userid 5004)
 id C582A4427B4; Tue, 27 Jul 2021 09:48:01 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ff1ee7e2-eeae-11eb-96d9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.com;
	s=170520fj; t=1627372093; i=@fujitsu.com;
	bh=oxHVKLYi/Dc8DU43SJKSIIV8CAdX4OrcyT8cQHFsVU4=;
	h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:
	 Content-Transfer-Encoding;
	b=S6eiWr76SphR3CgSFd6fHDtwsVh8GdUCqtNTZiIV8cCggkbhxAfEJyzwUufifG/1A
	 K+jVQr7T40nou5vLwVsSU2HFPTGNaTSR1mbBAKckNfGw9boIqQedNWufDFi6Ln+tTr
	 Qycg9zrPVIZl9hlDl+vKjEOMlXoOm9oyIwRr5SpLJV0J+WstIbCoF4UiD+VPSw4aRY
	 DwDXULZ2/tYnpQBf/0D0no/9GiSzzlqaaLwc8W1vZ51yTUqYG6aFfUK4fYRffH155g
	 xCPIvHN4aeeXwaJeXVhGbcUCITSC9WrlJxlj7n7jlg3HomkjKKfwkLfLNFX1O+qidU
	 CLekmtzRUdDOw==
Authentication-Results: mx.messagelabs.com; spf=pass 
  (server-14.tower-287.messagelabs.com: domain of fujitsu.com designates 
  46.226.52.199 as permitted sender) smtp.mailfrom=fujitsu.com; dkim=none 
  (message not signed); dmarc=pass (p=none sp=none adkim=r aspf=r) 
  header.from=fujitsu.com
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrFIsWRWlGSWpSXmKPExsViZ8MxRddm1/8
  Eg5NLeSxOnOhhsri7+CK7xYvNORZzbhpZfFwjbvF9y2QmBzaP15MnMHpsaHrD5nH4wxUWj/Vb
  rrJ4nL41i81j2sdtLAFsUayZeUn5FQmsGVse32YruMRT8e/+LJYGxiUcXYxcHEICixglvl/dw
  dLFyAnklEs0vvkEZrMJ6Es8vHaOFcQWEVCSuLdqMhNIA7PAX0aJUw92AhVxcAgL2Er8m1ILUs
  MioCpxueMVG4jNK2AnseLFCzBbQkBeon35dqi4oMTJmU/A5jMLaEssW/iaeQIj9ywkqVlIUgs
  YmVYxWiQVZaZnlOQmZuboGhoY6BoaGukaWlrqGhmZ6yVW6SbppZbqlqcWl+ga6iWWF+sVV+Ym
  56To5aWWbGIEBmNKwfHHOxhXvPmgd4hRkoNJSZQ3tuB/ghBfUn5KZUZicUZ8UWlOavEhRhkOD
  iUJ3sodQDnBotT01Iq0zBxgZMCkJTh4lER4hbcDpXmLCxJzizPTIVKnGHU5mj4sWcQsxJKXn5
  cqJc5rBjJDAKQoozQPbgQsSi8xykoJ8zIyMDAI8RSkFuVmlqDKv2IU52BUEuZNBJnCk5lXArf
  pFdARTEBHBNf/BTmiJBEhJdXAtNwm4bnspDTfv4wvljsr6S2WcZ1xp0XULTaqQJDjhJbCb9s0
  l/C5/n9Vm700F+6REv+hXLN406cVt3jdLFcxtux/WSXZw3tks3iBzIzYftfv5u91VF86uS5M+
  Nv3glFs9ZWXyRdElat+d7Tk3+2KmrKOl+3Qiv09rqd5lonfyvbcqBC5w4hP5k99xserz7r5dz
  j96+PcJM42o3vq2sBQ++mFAgda9R/WffCMyOm9P5Hn0NJLy3bVG/C+zbqRZiU+cdvqQ8+PtUz
  OC/G9V9Y4d6HDr501i86WS4ovPmxg2yimb5tnzPhrd5XsdtE1gkeuzpA+s2lfms1srmS5Gqu+
  0k2X3nrEbJBV1gnavtVfiaU4I9FQi7moOBEAIKduZU0DAAA=
X-Env-Sender: Alan.Robinson@fujitsu.com
X-Msg-Ref: server-14.tower-287.messagelabs.com!1627372091!132291!1
X-Originating-IP: [62.60.8.148]
X-SYMC-ESS-Client-Auth: outbound-route-from=pass
X-StarScan-Received:
X-StarScan-Version: 9.81.3; banners=-,-,-
X-VirusChecked: Checked
From: Alan Robinson <Alan.Robinson@fujitsu.com>
To: xen-devel@lists.xenproject.org
Cc: Alan Robinson <Alan.Robinson@fujitsu.com>,
        Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
        Anthony PERARD <anthony.perard@citrix.com>,
        Juergen Gross <jgross@suse.com>,
        Alan Robinson <alan.robinson@fujitsu.com>
Subject: [PATCH v2] tools/libxl: add missing blank in message
Date: Tue, 27 Jul 2021 09:47:03 +0200
Message-Id: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Add missing blank giving "an emulation" instead of "anemulation"
while making the text a single source line.

Signed-off-by: Alan Robinson <alan.robinson@fujitsu.com>
---

Changed since v1:
  * text as as single line, requested by Juergen

 tools/libs/light/libxl_dm.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index dbd3c7f278..5cc8ce34c2 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -1893,8 +1893,7 @@ static int libxl__build_device_model_args_new(libxl=
__gc *gc,
                 if (format =3D=3D NULL) {
                     LOGD(WARN, guest_domid,
                          "Unable to determine disk image format: %s\n"
-                         "Disk will be available via PV drivers but not =
as an"
-                         "emulated disk.",
+                         "Disk will be available via PV drivers but not =
as an emulated disk.",
                          disks[i].vdev);
                     continue;
                 }
@@ -1905,8 +1904,7 @@ static int libxl__build_device_model_args_new(libxl=
__gc *gc,
=20
                 if (!target_path) {
                     LOGD(WARN, guest_domid, "No way to get local access =
disk to image: %s\n"
-                         "Disk will be available via PV drivers but not =
as an"
-                         "emulated disk.",
+                         "Disk will be available via PV drivers but not =
as an emulated disk.",
                          disks[i].vdev);
                     continue;
                 }
--=20
2.26.2



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 07:50:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 07:50:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161081.295773 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8HrH-0003HX-Jj; Tue, 27 Jul 2021 07:50:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161081.295773; Tue, 27 Jul 2021 07:50:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8HrH-0003HQ-GR; Tue, 27 Jul 2021 07:50:35 +0000
Received: by outflank-mailman (input) for mailman id 161081;
 Tue, 27 Jul 2021 07:50:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=zxu4=MT=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m8HrG-0003HK-A9
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 07:50:34 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c1e8be35-fd00-4870-96e8-48811156be6c;
 Tue, 27 Jul 2021 07:50:33 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 74AA0220EE;
 Tue, 27 Jul 2021 07:50:31 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 4860C13CDF;
 Tue, 27 Jul 2021 07:50:31 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id Hm3kD8e6/2BPFAAAGKfGzw
 (envelope-from <jgross@suse.com>); Tue, 27 Jul 2021 07:50:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c1e8be35-fd00-4870-96e8-48811156be6c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627372231; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=0mD/d8utZ9tVnBqkINpM73r9qFH8X5aj/kbMnq+VHUs=;
	b=WvvAxafKAKPAR1uW1wiBegcCZCbqSygejlgEpdPnpXy4wXcCJMvCI6erujhbItcMu9Gn8o
	wgrR0GEB54VD9+wv3JxP/rCpR4J+DpNoL0Z7R+DLLnQWOtW85Wuy2d23bjkeAO56rXc5tx
	NnOiBARsakOhpbVg4kdZk0vzbgrzPKI=
Subject: Re: [PATCH v2] tools/libxl: add missing blank in message
To: Alan Robinson <Alan.Robinson@fujitsu.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Anthony PERARD <anthony.perard@citrix.com>
References: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <d4d7650a-0c5c-6bd9-8a9d-716136fc8b6b@suse.com>
Date: Tue, 27 Jul 2021 09:50:30 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="Z3Amv3ChvsjVs2W69l5hAJtnSyCqVF624"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--Z3Amv3ChvsjVs2W69l5hAJtnSyCqVF624
Content-Type: multipart/mixed; boundary="U6RQGM7HPH8ztq33vV7WB6r2mW69lUDq5";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Alan Robinson <Alan.Robinson@fujitsu.com>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Anthony PERARD <anthony.perard@citrix.com>
Message-ID: <d4d7650a-0c5c-6bd9-8a9d-716136fc8b6b@suse.com>
Subject: Re: [PATCH v2] tools/libxl: add missing blank in message
References: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>
In-Reply-To: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>

--U6RQGM7HPH8ztq33vV7WB6r2mW69lUDq5
Content-Type: multipart/mixed;
 boundary="------------6DB47DBE6C79267486B78164"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------6DB47DBE6C79267486B78164
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 27.07.21 09:47, Alan Robinson wrote:
> Add missing blank giving "an emulation" instead of "anemulation"
> while making the text a single source line.
>=20
> Signed-off-by: Alan Robinson <alan.robinson@fujitsu.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

--------------6DB47DBE6C79267486B78164
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------6DB47DBE6C79267486B78164--

--U6RQGM7HPH8ztq33vV7WB6r2mW69lUDq5--

--Z3Amv3ChvsjVs2W69l5hAJtnSyCqVF624
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmD/usYFAwAAAAAACgkQsN6d1ii/Ey9v
uwf/TnA1PwmPgqpcABoni9WUncvf9fOUkdzP+ICu529o0Wno9etdFgwqTju53o97OW+kyasaPLGz
CC3d7mX5fyM9a+x7tXsHy0ezMwiINYvrw/QeJNf2mRLe+0PpdDrei2pQ6HVqL6p7eyb/XRqMjL+x
Huatkb1hUbVS7Ee2rnlDNJOu4PsJwyaWWD510MkpL0rmRd/74wKFKhDNuxkKnwlkV9BiPumPNC3P
SEC86a3FyElKxkoPdkFirv1Le0sYISSRHy+mql7JsVGx2iUwd/+lrCVhTzXi3TrK6Ci3uaJjYKVp
Z3YlQnMSpa4xsosPSN46UXT5eTkizFGF3dWjS0KQ8g==
=lnim
-----END PGP SIGNATURE-----

--Z3Amv3ChvsjVs2W69l5hAJtnSyCqVF624--


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 08:55:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 08:55:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161092.295785 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8IrP-00010q-PK; Tue, 27 Jul 2021 08:54:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161092.295785; Tue, 27 Jul 2021 08:54:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8IrP-00010j-Lf; Tue, 27 Jul 2021 08:54:47 +0000
Received: by outflank-mailman (input) for mailman id 161092;
 Tue, 27 Jul 2021 08:54:47 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m8IrP-00010d-0w
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 08:54:47 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8IrK-00021Q-1Y; Tue, 27 Jul 2021 08:54:42 +0000
Received: from [54.239.6.180] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8IrJ-0005ey-Q9; Tue, 27 Jul 2021 08:54:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=eywEcllzg8j9Hfe3EcYDV2wNQxA1ZsKolNcV6bImFpg=; b=iYF3sQ1jRYZo8BOsHPNtA5C28T
	GEPh69ukTGTWwhGyg4Xz5/jSolmc2XSXK7CFIvGQ30P3JT/9eGP68EoIhVLBrGJaS95mYBHOJsHGp
	mqqm1qcHsLUbqYeXR70fhwEEp6L2oif3RR07NCRdMGYQ85s2iMhv+85pwX3eAiO3kefw=;
Subject: Re: [XEN PATCH v2] tools/xl: Add stubdomain_cmdline option to xl.cfg
To: Scott Davis <scottwd@gmail.com>, xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>,
 Nick Rosbrook <rosbrookn@ainfosec.com>,
 Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>,
 Jason Andryuk <jandryuk@gmail.com>
References: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>
From: Julien Grall <julien@xen.org>
Message-ID: <198774b3-f688-376a-7fed-256662f6adba@xen.org>
Date: Tue, 27 Jul 2021 09:54:39 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Scott,

On 22/07/2021 17:54, Scott Davis wrote:
> This adds an option to the xl domain configuration file syntax for specifying
> a kernel command line for device-model stubdomains. It is intended for use with
> Linux-based stubdomains.
> 
> Signed-off-by: Scott Davis <scott.davis@starlab.io>
> Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

Reviewed-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 09:50:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 09:50:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161098.295797 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8JjE-0006TH-TK; Tue, 27 Jul 2021 09:50:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161098.295797; Tue, 27 Jul 2021 09:50:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8JjE-0006TA-QR; Tue, 27 Jul 2021 09:50:24 +0000
Received: by outflank-mailman (input) for mailman id 161098;
 Tue, 27 Jul 2021 09:50:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=x8Uz=MT=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m8JjE-0006T4-0K
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 09:50:24 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 0f37383a-eec0-11eb-96e0-12813bfff9fa;
 Tue, 27 Jul 2021 09:50:22 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BFC6031B;
 Tue, 27 Jul 2021 02:50:21 -0700 (PDT)
Received: from e123311-lin.arm.com (unknown [10.57.9.152])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 373183F73D;
 Tue, 27 Jul 2021 02:50:20 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0f37383a-eec0-11eb-96e0-12813bfff9fa
From: Michal Orzel <michal.orzel@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	bertrand.marquis@arm.com
Subject: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with vreg_emulate_{sysreg/cp}
Date: Tue, 27 Jul 2021 11:50:10 +0200
Message-Id: <20210727095010.11103-1-michal.orzel@arm.com>
X-Mailer: git-send-email 2.29.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

According to ARMv8A architecture, AArch64 registers
are 64bit wide even though in many cases the upper
32bit is reserved. Therefore there is no need for
function vreg_emulate_sysreg32 on arm64.

Ideally on arm64 there should be only one function
vreg_emulate_sysreg(using register_t) or
vreg_emulate_sysreg64(using uint64_t) but in the Xen code
there is a lot of functions passed both to the
vreg_emulate_cp* and vreg_emulate_sysreg*.
This would require to duplicate them which is not
a good solution.

The easiest/minimal solution to fix this issue is
to replace vreg_emulate_{sysreg/cp}32 with
vreg_emulate_{sysreg/cp}. The modifed functions
are now taking function pointer:
-typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
                              register_t *r, bool read);
instead of:
-typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs,
                                uint32_t *r, bool read);

This change allows to properly use 64bit registers on arm64
and in case of 32bit guest the cast is done by the hardware
due to the 32bit registers being the lower part of 64bit ones.

Signed-off-by: Michal Orzel <michal.orzel@arm.com>
---
The reason for this change is to clean up the mess related to types.
This patch achieves that but it does not reduce the code size.
I'm not sure whether we want such change hence it is pushed as RFC.
---
 xen/arch/arm/vcpreg.c      | 16 +++++++++++-----
 xen/arch/arm/vtimer.c      | 18 +++++++++---------
 xen/include/asm-arm/vreg.h | 14 +++++++-------
 3 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
index e3ce56d875..376a1ceee2 100644
--- a/xen/arch/arm/vcpreg.c
+++ b/xen/arch/arm/vcpreg.c
@@ -57,9 +57,12 @@
 #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
 #endif
 
+#define type32_t register_t
+#define type64_t uint64_t
+
 /* The name is passed from the upper macro to workaround macro expansion. */
 #define TVM_REG(sz, func, reg...)                                           \
-static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
+static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool read)    \
 {                                                                           \
     struct vcpu *v = current;                                               \
     bool cache_enabled = vcpu_has_cache_enabled(v);                         \
@@ -83,7 +86,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
 
 #else /* CONFIG_ARM_64 */
 #define TVM_REG32_COMBINED(lowreg, hireg, xreg)                             \
-static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
+static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, register_t *r,  \
                                 bool read, bool hi)                         \
 {                                                                           \
     struct vcpu *v = current;                                               \
@@ -108,13 +111,13 @@ static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
     return true;                                                            \
 }                                                                           \
                                                                             \
-static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, uint32_t *r,  \
+static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, register_t *r,\
                                   bool read)                                \
 {                                                                           \
     return vreg_emulate_##xreg(regs, r, read, false);                       \
 }                                                                           \
                                                                             \
-static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t *r,   \
+static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, register_t *r, \
                                  bool read)                                 \
 {                                                                           \
     return vreg_emulate_##xreg(regs, r, read, true);                        \
@@ -154,13 +157,16 @@ TVM_REG32_COMBINED(MAIR0, MAIR1, MAIR_EL1)
 TVM_REG32_COMBINED(AMAIR0, AMAIR1, AMAIR_EL1)
 TVM_REG32(CONTEXTIDR, CONTEXTIDR_EL1)
 
+#define VREG_EMULATE_CP32(regs, hsr, fn)  vreg_emulate_cp(regs, hsr, fn)
+#define VREG_EMULATE_CP64(regs, hsr, fn)  vreg_emulate_cp64(regs, hsr, fn)
+
 /* Macro to generate easily case for co-processor emulation. */
 #define GENERATE_CASE(reg, sz)                                      \
     case HSR_CPREG##sz(reg):                                        \
     {                                                               \
         bool res;                                                   \
                                                                     \
-        res = vreg_emulate_cp##sz(regs, hsr, vreg_emulate_##reg);   \
+        res = VREG_EMULATE_CP##sz(regs, hsr, vreg_emulate_##reg);   \
         ASSERT(res);                                                \
         break;                                                      \
     }
diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
index 167fc6127a..17b5649a05 100644
--- a/xen/arch/arm/vtimer.c
+++ b/xen/arch/arm/vtimer.c
@@ -162,7 +162,7 @@ void virt_timer_restore(struct vcpu *v)
     WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
 }
 
-static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
+static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t *r, bool read)
 {
     struct vcpu *v = current;
     s_time_t expires;
@@ -176,7 +176,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
     }
     else
     {
-        uint32_t ctl = *r & ~CNTx_CTL_PENDING;
+        register_t ctl = *r & ~CNTx_CTL_PENDING;
         if ( ctl & CNTx_CTL_ENABLE )
             ctl |= v->arch.phys_timer.ctl & CNTx_CTL_PENDING;
         v->arch.phys_timer.ctl = ctl;
@@ -197,7 +197,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
     return true;
 }
 
-static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
+static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
                              bool read)
 {
     struct vcpu *v = current;
@@ -211,11 +211,11 @@ static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
 
     if ( read )
     {
-        *r = (uint32_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
+        *r = (register_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
     }
     else
     {
-        v->arch.phys_timer.cval = cntpct + (uint64_t)(int32_t)*r;
+        v->arch.phys_timer.cval = cntpct + (uint64_t)(register_t)*r;
         if ( v->arch.phys_timer.ctl & CNTx_CTL_ENABLE )
         {
             v->arch.phys_timer.ctl &= ~CNTx_CTL_PENDING;
@@ -274,10 +274,10 @@ static bool vtimer_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr)
     switch ( hsr.bits & HSR_CP32_REGS_MASK )
     {
     case HSR_CPREG32(CNTP_CTL):
-        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_ctl);
+        return vreg_emulate_cp(regs, hsr, vtimer_cntp_ctl);
 
     case HSR_CPREG32(CNTP_TVAL):
-        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_tval);
+        return vreg_emulate_cp(regs, hsr, vtimer_cntp_tval);
 
     default:
         return false;
@@ -316,9 +316,9 @@ static bool vtimer_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr)
     switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
     {
     case HSR_SYSREG_CNTP_CTL_EL0:
-        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
+        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
     case HSR_SYSREG_CNTP_TVAL_EL0:
-        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
+        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
     case HSR_SYSREG_CNTP_CVAL_EL0:
         return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
 
diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
index 1253753833..cef55aabea 100644
--- a/xen/include/asm-arm/vreg.h
+++ b/xen/include/asm-arm/vreg.h
@@ -4,13 +4,13 @@
 #ifndef __ASM_ARM_VREG__
 #define __ASM_ARM_VREG__
 
-typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
+typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
                                    bool read);
 typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t *r,
                                    bool read);
 
-static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
-                                     vreg_reg32_fn_t fn)
+static inline bool vreg_emulate_cp(struct cpu_user_regs *regs, union hsr hsr,
+                                     vreg_reg_fn_t fn)
 {
     struct hsr_cp32 cp32 = hsr.cp32;
     /*
@@ -18,7 +18,7 @@ static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
      * implementation error in the emulation (such as not correctly
      * setting r).
      */
-    uint32_t r = 0;
+    register_t r = 0;
     bool ret;
 
     if ( !cp32.read )
@@ -64,11 +64,11 @@ static inline bool vreg_emulate_cp64(struct cpu_user_regs *regs, union hsr hsr,
 }
 
 #ifdef CONFIG_ARM_64
-static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, union hsr hsr,
-                                         vreg_reg32_fn_t fn)
+static inline bool vreg_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr,
+                                         vreg_reg_fn_t fn)
 {
     struct hsr_sysreg sysreg = hsr.sysreg;
-    uint32_t r = 0;
+    register_t r = 0;
     bool ret;
 
     if ( !sysreg.read )
-- 
2.29.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 10:18:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 10:18:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161104.295809 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8KA9-0000Rf-33; Tue, 27 Jul 2021 10:18:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161104.295809; Tue, 27 Jul 2021 10:18:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8KA8-0000RY-Va; Tue, 27 Jul 2021 10:18:12 +0000
Received: by outflank-mailman (input) for mailman id 161104;
 Tue, 27 Jul 2021 10:18:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=o+S4=MT=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m8KA7-0000Qa-9I
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 10:18:11 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id efb02432-eec3-11eb-96e0-12813bfff9fa;
 Tue, 27 Jul 2021 10:18:07 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: efb02432-eec3-11eb-96e0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627381087;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=UVJnfAaShrFRUk1Bx1Xy/Im8Ddw3Fq7DeH5JNkApbwo=;
  b=PCNCjYjjY1XbBgfndbPIjh+xldUSqtOxy+dhvpKCqgCeQRnRi3KtPZdJ
   I+MdexBVPpwD78dZ41ATuIJ10rAG6QiPl9akfd75zGO3TGYE/2wxOpuPx
   DRXSaRfy/73C+vJ+o+/donuAuVviFnDpSaeYw3kK1xogDcU3bK1D1TVy3
   M=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: 7D07wCVF/g+gifeQPuBoUFHFA4ixGUtUcxcCPRq82f8b9WO6pSq+Ec/Qbyc8fB1wu7ANuN6p2h
 4b8U9IQ7imKLEvN3qJjSdVY5qml1yGuUapYXUh8KcllMSbR9WGN3I/DdJsiEKignTafWQIMC6+
 cdz68e3MsajoSWEDjd784iUFAAVIAwSDtAUs9bvA3vbFjuBSRjXowdoGg4aFf+fiv+p3IW7BS+
 heIR42rI1C6RAsXPWcnSQ6RINHLJ7Ku3Mgq3gb3z6y6yNquIFV6/x4TBvzUL5LbQCw69+3KrMH
 usayzfugOxG9LfiWYGdJTaqX
X-SBRS: 5.1
X-MesageID: 49166899
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:qQcOm6moePqokcJ0lvg1nkYLwFHpDfNeiWdD5ihNYBxZY6Wkfp
 +V8sjzhCWatN9OYh0dcIi7SdS9qADnhOJICOgqTPmftWzd0gqVxe5ZnPLfKlHbak/DH6tmpN
 1dmstFeZzN5DpB/L7HCWCDer5Krbn3k5xAx92utEuFJjsaD52Imj0JbDpzZXcGIzWua6BJca
 a0145inX6NaH4XZsO0Cj0uRO7YveDGk5rgfFovGwMnwBPmt0Lq1JfKVzyjmjsOWTJGxrkvtU
 LflRbi26mlu/anjjfBym7o6YhMkteJ8KoAOCXMsLlRFtzfsHfuWG1TYczFgNnzmpD31L8eqq
 iJn/7nBbUq15qeRBDvnfKn4Xie7N9n0Q6d9bbfuwqineXJAAsgDcxPnIRYdQacxXYBkbhHof
 929lPcjoFQCxzYmiT7+pzvbDFF0mSJgVdKq59Is5R4ObFuN4O5abZvoH+9Wa1wbB4T5O0cYZ
 hTJdCZ6/BMfVyAaXfF+mFp3dy3R3w2WgyLW04Yp6WuonJrdV1CvgMlLfYk7zw9HVMGOu15zv
 WBNr4tmKBFT8cQY644DOAdQdGvAmiIRR7XKmqdLVnuCalCYhv22tLKyaRw4PvvdI0DzZM0lp
 iEWFREtXQqc0arDcGVxpVE/h3EXW34VzXwzcNV4YR/p9THNffWGDzGTEprn9qrov0ZDMGeU/
 GvOIhOC/umNmfqEZYh5Xy2Z3CTEwhpbCQxgKd1Z7ujmLO4FmTajJ2tTB+IHsufLd8NYBKLPk
 c+
X-IronPort-AV: E=Sophos;i="5.84,273,1620705600"; 
   d="scan'208";a="49166899"
Date: Tue, 27 Jul 2021 11:18:03 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Alan Robinson <Alan.Robinson@fujitsu.com>
CC: <xen-devel@lists.xenproject.org>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>, Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v2] tools/libxl: add missing blank in message
Message-ID: <YP/dW2trNx1camFQ@perard>
References: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>

On Tue, Jul 27, 2021 at 09:47:03AM +0200, Alan Robinson wrote:
> Add missing blank giving "an emulation" instead of "anemulation"
> while making the text a single source line.
> 
> Signed-off-by: Alan Robinson <alan.robinson@fujitsu.com>
> ---
> 
> Changed since v1:
>   * text as as single line, requested by Juergen
> 

Acked-by: Anthony PERARD <anthony.perard@citrix.com>

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 10:37:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 10:37:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161110.295820 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8KSf-0002f3-Hw; Tue, 27 Jul 2021 10:37:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161110.295820; Tue, 27 Jul 2021 10:37:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8KSf-0002ew-Eq; Tue, 27 Jul 2021 10:37:21 +0000
Received: by outflank-mailman (input) for mailman id 161110;
 Tue, 27 Jul 2021 10:37:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=o+S4=MT=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m8KSd-0002eq-MR
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 10:37:19 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9c1f7dba-eec6-11eb-96e1-12813bfff9fa;
 Tue, 27 Jul 2021 10:37:16 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9c1f7dba-eec6-11eb-96e1-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627382235;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:in-reply-to;
  bh=MgmXpbcizeDU4qnGZ5z/IZpuzSteQAPG8N/hxlwq+xk=;
  b=WmFlxxHoK747u5j8uUzybEbjc8VDulk2uHNapz8u7un85EZwiEkCz16h
   gGq/DNBaNJOQrhilWhxMoojJbfKKXebRUMJyqPE2AjskiMMI/Za9j8jzD
   b0bGBf1fxafwliZWc53hWHZJANeyYBejQtlFXOc4ZwVzZvcMCdZLTSwF/
   k=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: trqrXvuzcF2UKepUZfHcvBn7m6xDtU8s8ZPk1oYCy+sQNNYAGXCSxB89Kfa523LvxO6VLpbknH
 AE9BA95EPncGjCKM0rAvoLuVMmyuMCvyChd7Sf3PtPXEnu1Yrg9qRDvZ9Qog42MqHmP4dAyb1u
 +hLrmjpM7irqFygGpzhvP/uYQXvYQfPq0rN8Ls2J2lrLWtQo1EVZokTyGcAbWy1os1aCJRK3aY
 oNXQKB/dSrKnLs+goVL3fnwrEpXB8mIJ1AYLLIB/ujW2TMz3vxK2IjzkePJj2+MvlJHz/rFluI
 B07PRI3Tvc/3YjMwHoCCHnzg
X-SBRS: 5.1
X-MesageID: 49167891
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:lUrvy6HJNidVVkg3pLqE6MeALOsnbusQ8zAXP0AYc3Jom+ij5q
 STdZUgpHrJYVkqNU3I9ertBEDEewK6yXcX2/hyAV7BZmnbUQKTRekIh7cKgQeQeBEWntQts5
 uIGJIeNDSfNzdHsfo=
X-IronPort-AV: E=Sophos;i="5.84,273,1620705600"; 
   d="scan'208";a="49167891"
Date: Tue, 27 Jul 2021 11:37:11 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Scott Davis <scottwd@gmail.com>
CC: <xen-devel@lists.xenproject.org>, Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, George Dunlap
	<george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, "Juergen
 Gross" <jgross@suse.com>, Jason Andryuk <jandryuk@gmail.com>
Subject: Re: [XEN PATCH v2] tools/xl: Add stubdomain_cmdline option to xl.cfg
Message-ID: <YP/h1ySgvfEhArVN@perard>
References: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>

On Thu, Jul 22, 2021 at 12:54:30PM -0400, Scott Davis wrote:
> This adds an option to the xl domain configuration file syntax for specifying
> a kernel command line for device-model stubdomains. It is intended for use with
> Linux-based stubdomains.
> 
> Signed-off-by: Scott Davis <scott.davis@starlab.io>
> Reviewed-by: Jason Andryuk <jandryuk@gmail.com>
> ---
> diff --git a/tools/include/libxl.h b/tools/include/libxl.h
> index ae7fe27c1f..b9ba16d698 100644
> --- a/tools/include/libxl.h
> +++ b/tools/include/libxl.h
> @@ -1030,6 +1030,18 @@ typedef struct libxl__ctx libxl_ctx;
>   */
>  #define LIBXL_HAVE_BUILDINFO_KERNEL 1
>  
> +/*
> + * LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN
> + *
> + * If this is defined, then the libxl_domain_build_info structure will contain
> + * the following fields that specify options for device model stubdomains:
> + *  - stubdomain_memkb:   integer indicating stubdomain RAM size
> + *  - stubdomain_kernel:  string indicating stubdomain kernel image location
> + *  - stubdomain_cmdline: string of parameters to pass to the stubdomain kernel
> + *  - stubdomain_ramdisk: string indicating stubdomain ramdisk location
> + */
> +#define LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN 1

Looks like a LIBXL_HAVE_ macro was missing in the original addition of
all other stubdomain_*, so it's probably fine to add a macro now for all
of them:

Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>

> diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
> index f45adddab0..e782e15cf2 100644
> --- a/tools/libs/light/libxl_types.idl
> +++ b/tools/libs/light/libxl_types.idl
> @@ -523,6 +523,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>      ("device_model_stubdomain", libxl_defbool),
>      ("stubdomain_memkb",   MemKB),
>      ("stubdomain_kernel",  string),
> +    ("stubdomain_cmdline", string),
>      ("stubdomain_ramdisk", string),

Thanks,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 10:40:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 10:40:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161115.295833 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8KVa-000404-1e; Tue, 27 Jul 2021 10:40:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161115.295833; Tue, 27 Jul 2021 10:40:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8KVZ-0003zx-Us; Tue, 27 Jul 2021 10:40:21 +0000
Received: by outflank-mailman (input) for mailman id 161115;
 Tue, 27 Jul 2021 10:40:20 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8KVY-0003zn-3I; Tue, 27 Jul 2021 10:40:20 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8KVX-0003eb-Li; Tue, 27 Jul 2021 10:40:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8KVX-0004Zv-Bs; Tue, 27 Jul 2021 10:40:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8KVX-0000Ry-BN; Tue, 27 Jul 2021 10:40:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=wxffSe9biYnJt9yu8HPTiGQKnlkT+XB1e/fLWtAd3Lo=; b=e1xsxOwviUerCTc6wYSfxoEY2E
	jev6v1hTuReoX6vpZwLh6BduXFo5V4i2DQOJ/AqD1F16zL4QO0IHlLd3S+mlH3TIDzFTIZkMkG+fJ
	CWzxG0pmssVqlqmFjJi9XwJGxMA8fS3/mELeHyEfUYuUjLOkowPyfzXv6+j11VYaJz2A=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164003-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164003: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:guest-start:fail:regression
    linux-linus:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-credit2:host-ping-check-xen:fail:heisenbug
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=ff1176468d368232b684f75e82563369208bc371
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 10:40:19 +0000

flight 164003 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164003/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  14 guest-start    fail in 163998 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1 fail in 163998 pass in 164003
 test-arm64-arm64-xl-credit1  13 debian-fixup               fail pass in 163998
 test-armhf-armhf-xl-credit2  10 host-ping-check-xen        fail pass in 163998

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

version targeted for testing:
 linux                ff1176468d368232b684f75e82563369208bc371
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  360 days
Failing since        152366  2020-08-01 20:49:34 Z  359 days  619 attempts
Testing same since   163989  2021-07-25 22:41:50 Z    1 days    4 attempts

------------------------------------------------------------
6730 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  fail    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987295 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 11:29:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 11:29:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161124.295847 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8LGf-00085w-0S; Tue, 27 Jul 2021 11:29:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161124.295847; Tue, 27 Jul 2021 11:29:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8LGe-00085p-Tr; Tue, 27 Jul 2021 11:29:00 +0000
Received: by outflank-mailman (input) for mailman id 161124;
 Tue, 27 Jul 2021 11:28:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8LGd-00085f-NT; Tue, 27 Jul 2021 11:28:59 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8LGd-0004Ku-5D; Tue, 27 Jul 2021 11:28:59 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8LGc-0008Dd-S3; Tue, 27 Jul 2021 11:28:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8LGc-0000wP-RU; Tue, 27 Jul 2021 11:28:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=PvT4tF0/BMMLT8OHo3OwK8TtH9OIHfUaDzmf6qEDIw8=; b=k3ZRFfnWH8x1KVglTWyHV2VspG
	amCCAOOJMXnoHuCQGiq4plL7MNoqufhqUUNBqEhO+0zk6sv3l3mUjiwBDa6ahV3k4CG6h49o22aKr
	wIIWAFbKFpsDxm3IZ+g1Fp9ZRiUhxyqbdZFBD/bt2KFTfWngXfBh772e3L827WQwTm+I=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164005-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164005: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 11:28:58 +0000

flight 164005 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164005/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   53 days
Failing since        162368  2021-06-04 15:42:59 Z   52 days  147 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    1 days    4 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4087 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 11:45:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 11:45:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161131.295863 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8LWp-0001sQ-Ft; Tue, 27 Jul 2021 11:45:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161131.295863; Tue, 27 Jul 2021 11:45:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8LWp-0001sJ-Ct; Tue, 27 Jul 2021 11:45:43 +0000
Received: by outflank-mailman (input) for mailman id 161131;
 Tue, 27 Jul 2021 11:45:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ggmi=MT=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8LWn-0001sD-F8
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 11:45:41 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 35fa39da-c7ab-4d07-83d9-40aa2a2dd26e;
 Tue, 27 Jul 2021 11:45:39 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 35fa39da-c7ab-4d07-83d9-40aa2a2dd26e
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627386339;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=9XNQWT+1+fdTr5URNJvlMXkkbeBP2ClmameIKCKllqs=;
  b=Vk9+hCzCkLW0TMaH4xROSwwemdCogse5slaS9P4D5kZ5Woxo2DI7/3cs
   hFkinKSVTuevGja4akP92ptBTToWB823sgpm7HMsf1V0YtdY/fileqtUM
   kMGi78Ln6Tr/MBGkP+uUfSSYlQ5GvZWxuR1BBvjuFu2jAJeM6LvkVJtdu
   s=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: MMO3QKG2rNe5HNGm99oN4o5hHF/SpN5GYFYB9UTSDx2gQxTNJ8Lej6CbeVg9PNdjgzKUnvYtnY
 Vu7CCGbmEbQtNF/Wano3U6YAK/rZdB8P7Gr26Avy0BtAYBLDG42gloJMd4NQDpPclcABVeXFbw
 DmDx7rXn95KEtkNL76nKm4oYEyfnyM/I/4ZrMrR2SbQoj1//tNiq766Xyhlqg9pDm+9HKtQnOj
 HMusLG0tDqNAwia6vS7IZXIFao87Iaz1YQjthTIk9Xr0XAkLG9BZI/KGLCJvfRA4wKWsTVsJ/D
 oGx3oQ3VdK0x3ePDTXRIBY5r
X-SBRS: 5.1
X-MesageID: 49172018
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:DjVs+6pqysdn29Gau7b69jwaV5ulL9V00zEX/kB9WHVpm5Oj+P
 xGzc526farslsssREb+OxpOMG7MBbhHO1OkPYs1NCZLXXbUQqTXfxfBO7ZrQEIdBeOjtK1uZ
 0QFJSWTeeAd2SS7vyKkDVQcexQueVvmZrA7Yy1rwYPPHNXguNbnmNE426gYzxLrWJ9dPwE/f
 Snl6h6TnabCA8qhpPRPAh6YwGPnayFqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD79jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbU811rhOkWO5Tf90Qjp1zgjr1fk1F+jmHPm5ff0QTorYvAxz75xQ1/80Q4Nrdt82K
 VE0yayrJxMFy7Nmyz7+pzhSwxqvlDcmwthrccjy1hkFacOYr5YqoISuGlPFo0bIS784Ic7VM
 FzEcDn4upMe1/yVQGbgoBW+q3pYp0PJGbAfqBb0fbllQS+3UoJj3fw/fZv20vpr/kGOsB5D4
 2uCNUaqFlMJvVmJp6VSt1xGfdepwT2MGTx2VmpUCDa/Zc8SjrwQq7MkcAIDd6RCes1JbsJ6d
 n8uQBjxCIPk3yHM7zG4HQMyGGXfFmA
X-IronPort-AV: E=Sophos;i="5.84,273,1620705600"; 
   d="scan'208";a="49172018"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XGpQzwM4KEa7Shzjqg4KEFUujl1zfhgjr3Pyc/2XIKPo5I5eVuDEvIlCP6763KfU0BhJes8saUESUeHWn3EO8gWsxzgcMRSv5+OC54F9vShFt4e5SJWgacQT8vnRpbq4gFAb+1mZOFu9Fbs6sJZVcMSoRSqjiqgKgHRLEBCoNJEyJyGxOrcp4ZYXb9e5+RSraZnRZyDjjXD1Gqi3Rq+GhbfGwdJtcmAl8Kuom0PEFqitmXqV1oFDAQRSQtbXRFIeRygXTisEW//MnmewV76vTCX06c6tuwBLiqqZnYZDRT35yY8s6eS/fXrT7k7xclcZxbNSHoQ7OsnM9TIX7qmzXg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+HcPvatENNCggjaKhyQcvrTaMvXj6YAD0XWzhc5THaA=;
 b=QbachIiJCQFIRArT/i8rkemjJQfbTmKwz3GlNYr2JWxonS0WyJnDGmJ0+lwqEVXjgWLu7Oeoc6KRtS1YgwNsdb6vqJVfJQT87HmyIvd39MM0EwPPqum/JAtVFkroSZScy7Wa2Lhv9XEds49KMct8cT/DWVPPw9hKSLUMVyIcf3Iqd+3juIQ1f3wQmhf7Mc69zxegqcpUI0GsGajGTcXyG8pl/8uVwGrbu2eYyDacktrDs4blh99zlbMFzlwk4DRGZHxoa+jX62DfOb5+RU7sVX5oFX5t0ElDVmt/Ze0FQOCzwLN8s/FATGlWNeEkZ7g5PU+fMI5Jda9WYKJCIArOig==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+HcPvatENNCggjaKhyQcvrTaMvXj6YAD0XWzhc5THaA=;
 b=r9C3Kqyg2lLNv8wX5NEeWwqaQcjSXzwlGhCZ+ioPFiUOHm4SKROpOWfbOO6zwU0gqJBrIGuoYRicnSMIZN+d3gESEQSbxdui/inDgw2D8hm/Xq8VeRGSRA0J2dBC7Futoz+ja2wOd8p3AAHcJLDEXqFFOw5RocO7xVsSM3vfngM=
To: Scott Davis <scottwd@gmail.com>, <xen-devel@lists.xenproject.org>
CC: Scott Davis <scott.davis@starlab.io>, Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>, George Dunlap <george.dunlap@citrix.com>, Nick Rosbrook
	<rosbrookn@ainfosec.com>, Anthony PERARD <anthony.perard@citrix.com>, Juergen
 Gross <jgross@suse.com>, Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P .
 Smith" <dpsmith@apertussolutions.com>
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
Message-ID: <dfc8bc88-ccab-bc6b-704d-c8ef95182311@citrix.com>
Date: Tue, 27 Jul 2021 12:45:28 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0168.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:18a::11) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 47ce139c-e271-4f08-b61f-08d950f40bf5
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5533:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5533450AD39499A187C9D5BABAE99@SJ0PR03MB5533.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1751;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: RAsGRfTfzlZlHPA7JRU6G3+GX8XkoZJPraJ2REVZw2lOKJ86jDfx6ILmMv62htHjsh0QrxXuUbpX25e39xijXk2AXBA1OFG/pbwD6eFmUQKKQwdz/8iwClBHP8eOTeOLeONPNjnd7iLnghY+xyPtRIEYy7mGUvKh2Vpjc5KOhULMrojUJaFe0XKhR6PqLJi/rWZVdaUBqB9lCbO4GTK0izbUi1B4B/hoHNlMytYCDr+cgmzCO6E3T3SJSh9h4ybwbrURsVYOKSLsVq7Yx+9hHvscljeUjl54dEkrxGT00dL36JzqkS006UFMK6WYiVy+AJWqiJFpyl1zgi8abjjhZDCzRu5Fz/KCwJDiU5+I4OwYPcti+yi4jyai5LxgHfuzhRdai7TOZGUHI9346tPvKN/nAOBUiXhReMA/Xu11enTEYkAXtHtoNVQpzDs2f+dD85/E0ye+gd02/pZXvoPr6q0i5ztaEHpKg4zcoJV2vv5ogMxIhdYPz2jR2ZgVWcxfYM53WMYlmOFox0iQBDYorHr/n6z0CVgi0lDpB3vk103RSiFVRSUzJKBnnBYwRsNtuRNzf+r0kee/UciCZ99RSw3yhI35nOW7swwj3OCw3LWXjTVVVIe/9Q1PcVeIH+FFcrUvsSFXhwbkThD/Mig3Lfg6VG11bJtNLyz0rEo/mzO/o70R2MPM9/cblcUdupUrIaPgevRcZocXwoy+fn3inHJS6/KQUijVxYV9vTp6Vh0=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(39860400002)(366004)(396003)(346002)(376002)(54906003)(31686004)(8936002)(86362001)(8676002)(186003)(36756003)(2616005)(956004)(4326008)(316002)(26005)(53546011)(5660300002)(6486002)(16576012)(66556008)(478600001)(2906002)(6666004)(38100700002)(83380400001)(66476007)(66946007)(4744005)(31696002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?c69o2vkxgA/HHapznmfFmy2y2L75RqW2Bg9e2N/?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 47ce139c-e271-4f08-b61f-08d950f40bf5
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 11:45:35.4639
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: lblf6bJkAqYbyzpTClUbt5YE0wm2dv+SAgdvi3FZ9lNLKBIEYv+jYdRg83DVVuegL2dd5ppRV6ITVMJZRpcSyms4TFrlEhjA56AS0fwWvVg=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5533
X-OriginatorOrg: citrix.com

On 23/07/2021 05:47, Scott Davis wrote:
> diff --git a/tools/libs/light/libxl_create.c b/tools/libs/light/libxl_cre=
ate.c
> index e356b2106d..a12da5531d 100644
> --- a/tools/libs/light/libxl_create.c
> +++ b/tools/libs/light/libxl_create.c
> @@ -1060,13 +1060,31 @@ int libxl__domain_config_setdefault(libxl__gc *gc=
,
>          char *s =3D d_config->b_info.device_model_ssid_label;
>          ret =3D libxl_flask_context_to_sid(ctx, s, strlen(s),
>                                           &d_config->b_info.device_model_=
ssidref);
> +        if (ret) {
> +            if (errno =3D=3D ENOSYS) {
> +                LOGD(WARN, domid,
> +                     "XSM Disabled: device_model_stubdomain_init_seclabe=
l not supported");
> +                ret =3D 0;

Surely this wants to be a hard error?

Not specifying a label is one thing, but specifying a label and having
it not take effect because code was compiled out of the hypervisor
sounds like a security hole.

I see this is a pattern copied from elsewhere, but it seems very short
signed.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 12:19:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 12:19:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161142.295875 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8M3P-0005IO-Dh; Tue, 27 Jul 2021 12:19:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161142.295875; Tue, 27 Jul 2021 12:19:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8M3P-0005IH-AV; Tue, 27 Jul 2021 12:19:23 +0000
Received: by outflank-mailman (input) for mailman id 161142;
 Tue, 27 Jul 2021 12:19:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=R9+o=MT=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m8M3O-0005IB-LM
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 12:19:22 +0000
Received: from new3-smtp.messagingengine.com (unknown [66.111.4.229])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 313ea7cb-7f44-489d-9105-92225c954cd9;
 Tue, 27 Jul 2021 12:19:19 +0000 (UTC)
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailnew.nyi.internal (Postfix) with ESMTP id 831C95809B9;
 Tue, 27 Jul 2021 08:19:19 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163])
 by compute2.internal (MEProxy); Tue, 27 Jul 2021 08:19:19 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 27 Jul 2021 08:19:16 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 313ea7cb-7f44-489d-9105-92225c954cd9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=HFQS1c
	g750Dc7AJsr+GwXrprkSp+hJpy1jfr8zXR32I=; b=qwAEjRSWURXEugHBg++/t8
	+ShsWu6P/hLgSMVIObKy1E31CDKwh7E+tAD2mmMsL3M6EAyJqS4Uzrc/mZpF8/x9
	bp0J6Nvca505UdEdsDh6SIjqq6ztECRMUmLs97YG85WXFdBy5TSXDOv2tpCdhKBk
	wtMEIPyinJdbOWHWo9gA/Xwhvk8Q54XJJrPt4vBZaK+E4ad8/xwQ/1NbxUKsusbp
	sdriAzq5eeR+ssztsQqzprRzg8YRX5/XXy2aXUdCiyHdP00crCWJFFHVNHSE7aDG
	gtK4JGmo239HYW0X+NLvgGdV9CBoB5GnHCapDmyh96uCVqwFi8lC4TvCvaN7XyKA
	==
X-ME-Sender: <xms:xvn_YLAqEwb6TsLlO2jeQn6FvsbkGqfRYFop9sxYiE1iN1vetrtIiw>
    <xme:xvn_YBhpuRCRnid3qLZJzdyQTyp85tpKxKHK7xIyMvqmMZxgNs8y-F0FxK8EHXq9k
    B-uvZZm7qLKFg>
X-ME-Received: <xmr:xvn_YGmn3Vz33PzCzUhdlZZZO5JYhAdDgoipJrOkT2fhCSz6RQokMZfMBGaNm8YQ4U0LzfWAl2gED8Lb_LKRpc6iy6-XyPCi>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrgeejgdeggecutefuodetggdotefrodftvf
    curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
    uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
    fjughrpeffhffvuffkfhggtggujgesghdtreertddtjeenucfhrhhomhepofgrrhgvkhcu
    ofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuceomhgrrhhmrghrvghksehinhhvih
    hsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepteevffei
    gffhkefhgfegfeffhfegveeikeettdfhheevieehieeitddugeefteffnecuvehluhhsth
    gvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghksehi
    nhhvihhsihgslhgvthhhihhnghhslhgrsgdrtghomh
X-ME-Proxy: <xmx:xvn_YNwJeFaRyo_Vpnk2UYaw3rcneBpm2gJGYVzaujUMSYBMWwKYCQ>
    <xmx:xvn_YASfC8XhIiwWbnTyC9OywrCweNs54gZzIGML9mP6GpqVQ1ivjA>
    <xmx:xvn_YAbpZufKkT63Eddi5WYs2l-PMNczXO4uYTFNQ87YsaLBvrxNZA>
    <xmx:x_n_YJ9ZU_k92k5uXbr9sTY29oshvRfi1_hvNofhskICTDVg3J-vEg>
Date: Tue, 27 Jul 2021 14:19:11 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Jason Andryuk <jandryuk@gmail.com>
Cc: Scott Davis <scottwd@gmail.com>,
	xen-devel <xen-devel@lists.xenproject.org>,
	Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	"Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
Message-ID: <YP/5wL2p/CGR5g7D@mail-itl>
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
 <CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="6nTE+UInqay0ySTB"
Content-Disposition: inline
In-Reply-To: <CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>


--6nTE+UInqay0ySTB
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Tue, 27 Jul 2021 14:19:11 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Jason Andryuk <jandryuk@gmail.com>
Cc: Scott Davis <scottwd@gmail.com>,
	xen-devel <xen-devel@lists.xenproject.org>,
	Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	"Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg

On Mon, Jul 26, 2021 at 09:07:03AM -0400, Jason Andryuk wrote:
> Sort of relatedly, is stubdom unpaused before the guest gets
> relabeled?  Quickly looking, I think stubdom is unpaused.  I would
> think you want them both relabeled before either is unpaused.  If the
> stubdom starts with the exec_label, but it sees the guest with the
> init_label, it may get an unexpected denial?  On the other hand,
> delayed unpausing of stubdom would slow down booting.

Some parts of the stubdomain setup are done after it's unpaused (but
before the guest is unpaused). Especially, PCI devices are hot-plugged
only when QEMU is already running (not sure why).

> With the stubdom getting unpaused before relabel, do you have to give
> the stubdom some extra flask policy permissions to handle that case?

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--6nTE+UInqay0ySTB
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmD/+cAACgkQ24/THMrX
1yz93gf7BFztLtdJnY9lVdHluWOjOq7Aa82KGdBoAy7+WpNGmlsdwxANpoyw5NEt
p5pFCXkio5RboFNxozlbqwnHpjlBc+t7VrO7P2eyFParhb3W16aKotbXusVRduct
461NFIYnBsnCdxn2ElAifda/Tgn4ty8b1WwLSftkAlUQrvwuf0qfKuaCEdbbr4q3
H1MAtXEqB1MZKNb2ft1QnQUH8hqZGvW6EbSC3F8ouh6wWxJe8Vm1UtDLepvbJenk
X9WGx/bz16p69zjKPRk6iLFAgjE2UDjFhnzYSuSgkxQkaSX7CoDuNiI8NHrC758b
2JARSqtYe7MBsqohDkjVnplydFTWcA==
=f6GZ
-----END PGP SIGNATURE-----

--6nTE+UInqay0ySTB--


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 12:22:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 12:22:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161147.295887 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8M68-0006c1-RT; Tue, 27 Jul 2021 12:22:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161147.295887; Tue, 27 Jul 2021 12:22:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8M68-0006bu-OE; Tue, 27 Jul 2021 12:22:12 +0000
Received: by outflank-mailman (input) for mailman id 161147;
 Tue, 27 Jul 2021 12:22:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ggmi=MT=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8M67-0006bm-W3
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 12:22:12 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 43da8956-eed5-11eb-96e9-12813bfff9fa;
 Tue, 27 Jul 2021 12:22:10 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 43da8956-eed5-11eb-96e9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627388530;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=kxwXzCdeGLxyz8buSNUAS85+Iqaxgsc86WelFEVJz4I=;
  b=Bhoj5C7Bki04hmRThBOdCtcj1fXmkVXh77Gs1EQ568HB4+IEdpcM9kEF
   uglSwE/6ikdHZuGz8Vqa2P5e5B36VS5d60x6JLvLd5hzLTV1zWe3srfRk
   vmvG9Hb5v8CE9C6JK68nNCA8HIN2gzx3CgREMPFlKZUCbmPcIG52YXWaT
   8=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: FuMni91RZuLajulGVyi59JAMd428fUEbhf4cj+ukBdnMIGTT4fwjOrHpkoeR7eiJd8oDK820Bi
 VyiKztwfDO7jY0oeHeei6OehK5Zv0Q7lye0yU1kqg0/85RRD5yIx+2bjqiMUnc4KFtozbODnoI
 hNS0VqrO/DShFh849sCc+KzfUcRHB/LOT6o1mYYmcHlGoE0xcUZJgdXoTGdWN9a9g6Q2rl5pON
 P4SDdKTGUepWR5rc/IxkfgDFwaR7U0A2S06rR00hsHyY2sTJyaDO69hj6womN77l6hV2R8E2Lh
 1njsRjTUUPCPuCDmCbS9pfOv
X-SBRS: 5.1
X-MesageID: 49161802
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:9Tlx3qDY11LFej/lHegPsceALOsnbusQ8zAXPh9KJCC9I/bzqy
 nxpp8mPEfP+U0ssHFJo6HiBEDyewKnyXcV2/hfAV7GZmXbUQSTXeZfBOfZogEIXheOjtK1tp
 0QPZSWaueAa2SS5PySiGbXLz9j+qj/zEnCv5a9854Zd3APV0gW1XYdNu/0KC1LbTgDIaB8OI
 uX58JBqTblU28QdN6HCn4MWPWGj8HXlbr9CCR2RyIP2U2rt3eF+bT6Gx+X0lM1SDVU24ov9m
 DDjkjQ+rijifem0RXRvlWjrKi+2eGRiOerNvb8zvT9GQ+czTpAo74RHYFqiQpF5d1HLmxaye
 Uk7S1QZ/iboEmhAl1d6SGdpDXI4XIL53j+yVmemxLY0LHErXQBeot8bMtiA2rkA0ZMhqAD7I
 tbm22erJZZFhXGgWD04MXJTQhjkg6urWMlivN7tQ0UbWIyUs4YkWUkxjIfLH7AJlOP1Kk3VO
 11SM3M7vdfdl2XK3jfo2l02dSpGnA+BA2PTEQOstGcl2E+pgE082IIgMgE2nsQ/pM0TJdJo+
 zCL6RzjblLCssbd7h0CusNSda+TmbNXRXPOmSPJkmPLtBLB1vd75rspLkl7uCjf5IFiJM0hZ
 TaSVtd8XU/fkr/YPf+laGjMiq9NllVeA6dv/22y6IJyYEUdYCbRhFrEmpe4/dIi89vcPHmZw
 ==
X-IronPort-AV: E=Sophos;i="5.84,273,1620705600"; 
   d="scan'208";a="49161802"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XOG+6gTlpAM1uPBL/pfDJbWlgNEc7N5n6eE4dDqxu+/jCp4kz7561RBnASkSF6/Y3tuEyomuJwywOq58aKxsWqwySSMwoc2XeUO4hfzqD2HTZnJRm/u2ioupGB+rgI69JRNdqk0xQsGg1BESyXvfPulVt8EeTi72duG+jr9k6u9/uVh/9odx0fV6kJp5u/QKTY0p2+By6Qf3DjIfTmkLU694Ggowmft7Bl2G5THh5sgg6Zd1sQs6SAe2tJWJpEchf42gLLzvCF3acMgfb4k9qlzr58vPHIvunbjIOu/SvJfAQzLlIJG073szY3b7Bc67iGVTRLx8PP8nfCABozOl3g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kxwXzCdeGLxyz8buSNUAS85+Iqaxgsc86WelFEVJz4I=;
 b=a49isahVBflV+qtynM5k2kn7Vg9leyLktgO+Dt2fNmr5XAHUe5RTxCk4buYICz7ia4ZTKdOpiFsBYsDHxZzqcHufCE0a5sTMd4LeEyrb7HqNMuXzXKE7E0iqW4fUdk5R/M+5lheD+w68/NoHGA0x7Bxp7lSx1ol0v+EMcZkDur3CxuGkQf/HnlBTeqyND4BiN8FXAsCso3hWLeW3QMjRkltZJMGHSexTzptJy+M3S42sy+L/ua4kQsuGI0bwpbOs5RAdkv2AK1/xbSi4f04ZWBpF9Ix6kF7Z/QISuLQbapf96ozZRy4txs+bFuoWsqRVPTRVoZyzjOLqn7KfL11xCQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kxwXzCdeGLxyz8buSNUAS85+Iqaxgsc86WelFEVJz4I=;
 b=Lare8plaGiHoNDzHga2+xKk8GC9THibM2i835d5rS3uKyJfo/tLPfRVxdScAZKACAJJDaPZUyK4t53XipPlH544PzVsDASRwRc5tLa895p/gcOeLaeGh52+W0JFwE7lBEfVfFVz5tonEGkOqxmfj0ErXvCwFIk27XJDjmpO39Jk=
To: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, luja <luja@openhardware.de>
CC: xen-devel <xen-devel@lists.xenproject.org>
References: <43-60fd5980-39-6ab37100@54709844> <YP1taH2Xl/jxjNRz@mail-itl>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: Xen-Error: Disabling IOMMU on Stepping C2 5520 Host-Bridge
Message-ID: <b5cce847-7304-d80c-66e2-a579763ea7fa@citrix.com>
Date: Tue, 27 Jul 2021 13:21:57 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <YP1taH2Xl/jxjNRz@mail-itl>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P265CA0131.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:9f::23) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b0bd9cba-e07c-480d-9baf-08d950f9243c
X-MS-TrafficTypeDiagnostic: BYAPR03MB4488:
X-Microsoft-Antispam-PRVS: <BYAPR03MB4488AF3332CC8991E7B2C88EBAE99@BYAPR03MB4488.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:7691;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: bSVxMK8Y7n8eJsQ2FkRtPN5tXjCc9fl+UR2SrBxT8CzV3dP0U3EZVrl51x/EqqnjByu/EGKM/XZC8mu0XS6DWdnfHBi8OBuLvzj5/vRU2bUUODbmQbRH71wauOrLTV2ETahGNNh/lBTy0tBqcbAjiD3eD6bbaaMo0ESkEcjXs8ugt/qHbWAucJXri8ttkxi60hAhsB6xbLLOZGyVwSCt5QpSK3lh3syEa+xI8zqN5uMb0AwqQ7GhTrly2xnj850U2VaRN4Sj3weQXHNL+alfTPeNCh0GTnrfzdrJ9EpQZty+jcVf+rDjcaquxzNx86wCjWDj8yAQkIYA9tcWGlgSwVMnPa82WT5WOCk/E53MR8UTlbd/TB9+nvxenfK1POngvXwg36VbrFPQb7szTfyRPOHSaqhJi1v6P37vAOa1suZpLQN488HsmZVKOn9nxWEvU7ZtVWUGtjr+teTOIQNE6Z1qKShjtUECe8yFb4TpPBlCA6NIs/hf3q0msh9aEs5eELpQaYfGJuqHpmnJoZgWGd6wutimrgH1mjg+y5PL79WjdU7RMzWzWUJJSN+yR+i1V1x4i5mWiFCwfdth2O5twkKe0l4qP8CCox4F+4QYaVbdY+IKAj9sc/EvwJ0fKpv6n3tgg2IW/SQnqWhgGZCjht8pzfNoynWz5BBVtk7axx1FPo6yo5SstQwDqv6sc0n+8zfeha9O97TRXyWQoH3rB69tE2YBIUCA6xL6c4eV+rw=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(396003)(376002)(346002)(366004)(39860400002)(36756003)(8676002)(110136005)(186003)(26005)(53546011)(66574015)(8936002)(16576012)(2906002)(38100700002)(316002)(66476007)(66556008)(86362001)(66946007)(31696002)(6666004)(83380400001)(478600001)(6486002)(2616005)(5660300002)(31686004)(4326008)(956004)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: b0bd9cba-e07c-480d-9baf-08d950f9243c
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 12:22:03.7124
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: RaRH1m3J2TWI3zZ9cSxm1e6x4q8aMWHzuZ8UHwpy6raf6L6ctyIXZTFjju4fPBXCuIF1/XWchk7724NPkkyhk7Gpu7a7nrMULAHLFT0nfEs=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4488
X-OriginatorOrg: citrix.com

On 25/07/2021 14:55, Marek Marczykowski-G=C3=B3recki wrote:
> On Sun, Jul 25, 2021 at 02:31:17PM +0200, luja wrote:
>> This Z600 is equipped with 0B54h mainboard as can be seen with dmi-decod=
e.
>>
>> The manual states that 0B54h mainboard has the "newer C2 stepping",
>> so it is *not* affected by Intel "spec update" (nota bene: Intel updates=
 the
>> spec, others report erratas) bugs =C2=A0
> The code above checks for rev 0x13, and the spec (page 11) clearly says t=
hat rev
> 0x13 is stepping B-3. Stepping C-2 is rev 0x22. So, if this check
> triggers for you, I'm afraid you have the affected chipset.

The ID in hardware is the authoritative information.=C2=A0 Sounds like the
Z600 manual is wrong.

>> So the way Xen detects the "bug" (pci rev 13) is not sufficient, as my Z=
600
>> shows pci rev13 with lspci but 0xB54h (board rev only on Z600) with dmid=
ecode
>> I would suggest first to have an override xen kernel boot option to disa=
ble the disablement in this code section. Or just patch this part out of th=
e Xen code and rebuild xen. If this stuff really crashes, one will see it.
> Patching it out is out of the question, this check if there for a
> reason.

Using interrupt remapping on these systems does cause it to cease
functioning.

>> So please build a new xen without this stupid disablement or please add =
an override boot command for it.
>>
>> Please see the attached upgrade manual of Z600 and the errata "spec upda=
te" by Intel.
>> You see that the C2 stepping is not affected by the bugs refered to in t=
he xen code,
>> so removing that section or adding better detection of the mask revision=
 (B3 vs. C2)=C2=A0 of 5520 host bridge would allow=C2=A0 many users to oper=
ate Qubes4.
> Maybe someone else has an alternative idea?

The logic in Xen is broken.=C2=A0 I've tried fixing it before for XenServer=
,
but was objected to, and the patch is still in the patchqueue.

The errata is with the Queued Invalidation, which (in Xen) is tied to
interrupt remapping.=C2=A0 The rest of the IOMMU works fine.

The current status quo is that if Xen boots with an Intel gen1 IOMMU, it
will be happy with DMA remapping but no IRQ remapping.=C2=A0 If Xen boots o=
n
this specific buggy system, it will turn the entire IOMMU off in
protest, which leaves the system less secure than booting on the
previous generation of hardware.

The correct behaviour is to just disable interrupt remapping in this
case, which brings Xen's behaviour in line with adjacent generations of
hardware.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 12:34:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 12:34:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161154.295899 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8MHU-00084K-V0; Tue, 27 Jul 2021 12:33:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161154.295899; Tue, 27 Jul 2021 12:33:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8MHU-00084D-R9; Tue, 27 Jul 2021 12:33:56 +0000
Received: by outflank-mailman (input) for mailman id 161154;
 Tue, 27 Jul 2021 12:33:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ggmi=MT=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8MHT-000847-NZ
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 12:33:55 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e77b4946-eed6-11eb-96ea-12813bfff9fa;
 Tue, 27 Jul 2021 12:33:54 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e77b4946-eed6-11eb-96ea-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627389234;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=3KZD9MndbUOCuhDKE94AcXNHku5zaU6RY8yubJC4w8E=;
  b=Cy55c0J0X8+R54mYTfaNCuUt4rwjoRQ6Yh0grlG53m5DdbW4V/Htyka0
   D9kgXgnBvXC/gs72ID9kxE8z+eW9rjDiD7vSrvLI1Kcbn5w1UwtZ2Y7gF
   /uiGxgZLivZ+VCWvqhgZHNOosi23Xm0zYkkphSchCoy2W59e8pDmbBU4I
   A=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: XKTbVGTCqsThzkdnFQH2VzmuBMFuvt6mdAaYggEQZ4Q1/oWrDBDJXtb8UleZLgQITtX6r1k3tY
 KqNFBB/YxafELaoibjwwd9uUxAn8Y6K8aVV0h4oGJZgqU2eRpfvqQPFEdmIdi48B2eVzTM/8Y3
 py6VqN+Kj4UpBcv+NuJnCbqjKWN48ycuuDaOnGfUo9A1Z9b/SOny7tyPXPJXpN+QnwpVvK+Rvu
 X64F8E5Pfip7AqcB1vI0y0wB5ycq2S1BjsXamUzM9CS+QjImgp/VgHIthg0NeJhOKp/scv3pcX
 8sOk6DE4LSeVYozmQbCvEmIA
X-SBRS: 5.1
X-MesageID: 49550866
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:9oJWxKp/f5KAttw//t3KE0QaV5rReYIsimQD101hICG9Evb0qy
 lhppQmPH7P+VIssRQb8+xoV5PufZqxz/BICOoqTNKftWvdyQiVxehZhOOP/9SJIUbDH4VmpM
 VdmsZFaeEZDTJB/LvHCAvTKadd/DFQmprY+ts3zB1WPH9Xg7kL1XYfNu4CeHcGPzWvA/ACZf
 yhz/sCnRWMU1INYP+2A3EUNtKz3eEixPrdEGc77wdM0nj3sQ+V
X-IronPort-AV: E=Sophos;i="5.84,273,1620705600"; 
   d="scan'208";a="49550866"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dWTCs2xVRRs/4fq6XrR7k6SsWfHPs2EqZYItkBSoYvcR4k7SFp7g8kSppBR9Tgq8CHiYa0c5d8qFOsBje+WYn+rWs62MacnS1L962crHY+/In1/534nvljPi4gCswq3+58lLLaVyrD4py/N5W3nWMK2vaiIWwaUXI+fVHlk6RMLoJ1JyWCNH1gXizzE4Us/kvJgRZf5IizvVCbjLEcR++2Q2vONSpNBUSHkcWdrGJ5/Sl0ipH+QE6NCy5DkH6ksgN9NSThCpaNDEvHMJPOgffvu+SD0DW90357x4fIBnk9R8avEDT7yiLqHgmaw2GXYwujYzBPFAaJSjYSUf0TR3Kw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=s+v8daMtcYCJNQvFoXvV/YLBWeaOEW2XizQZEI/L3sE=;
 b=mFtHgXBTYX9Wp2C13KqeRegz/ZNDmRuHfF0IHdkk0uZiYhG/WS4SyfJ9APIu82MOAeWU+ORULtZhdBTh2955QDINZwWYyzO0xWwQOrcWH12cD0CNwslymU/dZ5iAE/Gbd2vdvaB7jN868l08thec8/xaw41BNfPpnjEhjzAiqHN7ytQajE2HnCOWta8XYu9qtFC9b1FgCouKFgyEEUeiGhl0/Dzm///SQBfgdpbKXKLb9zfJiCTwKYp7QPp/HT8MFXn4PNzCk/5KqvmRbo+JuhwQOB9imtx53DrtiUdza8ShR3AKrbvnBnoQRHtj1x/hJVgHuSXXSke8XIDMQyJi4w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=s+v8daMtcYCJNQvFoXvV/YLBWeaOEW2XizQZEI/L3sE=;
 b=EloGL2RacxojRgFdrHhzz3EEZlX4G/wkE0tgLrclE81p/i/uevnRI7aVDqHKkogm/GhBRgzTNQdT5HLDzQytxyVKXrcyhngmXHc8YFxGgV3Ytw5SxuJtuFd0Ut8e3t+wT/v2k/666u5nc4r2XGOScp3toR180VDPFnnl4Kyw7Fo=
Subject: Re: [PATCH] x86: work around build issue with GNU ld 2.37
To: Jan Beulich <jbeulich@suse.com>, "xen-devel@lists.xenproject.org"
	<xen-devel@lists.xenproject.org>
CC: Wei Liu <wl@xen.org>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>
References: <2e0beb7e-022f-efb3-3adc-4877c60bfeba@suse.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Message-ID: <69a34c1f-0df8-47c2-4c67-2b22abb9fd21@citrix.com>
Date: Tue, 27 Jul 2021 13:33:43 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <2e0beb7e-022f-efb3-3adc-4877c60bfeba@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0018.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:a6::30) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 6e1a78ce-f192-45cb-2730-08d950fac8f0
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5727:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5727616F2881F6F7548CC393BAE99@SJ0PR03MB5727.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:336;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: IcgfNr8dUD21US72pOIzgNr9qRBfwzTMW13K+9C2n5RaHfortPQN7QXjWqF79cO62ahxTiQiY8J7lwl+U8uZAJiAyeayS0uYhG1+gNEkJtfTcJqXvkYqmp5/UL0hzCqEgSZCe7baLEVp/23wpY9IH3mrJcwrFUauud2KitiHs6DQikxRzPLasXa5d47B8DA+eVk+Mhg3vuiF6hL+uzG4aWpRJUtE0rO6LBuPKy46QOsYoMuMWPBgOrL4pIYdc240cNxX6R0vF1EC1h14c4XzQ/6U/tsyfB8ySvE4cupHr9RcUH8Quqe4HYrYSJ2JVh6Ot8WJhL3kziL3kZTxZ9Ds99xdXEr0nnlLpXq2TeCYW7yLl/9H2Fd4CTkBR9NTbp75Gw4/f2uGMyeZSy05std1IWzoExMk53mK4rZ8vl1de1SUxwdYnprXjVr+eBPp4PP9WdT6/J581SPZyhQS8+SK/geMacVjdgJNhri601mZonmYb/zHrPs0HD/6TTTcrkLcepNvb1KLLPfylbf+5KTwgxI+cwo2TSgtvOHd0SLVDy6fuY18AA1CDERcKl6Jsy7hazv2UezwKlKo3V0yFbiQzhpO32OwnZJ1gn/UMY1jHPqOFasaqvDqld+yQMQ8D/rSVVELYv0U2L/fp83nHaKCiETw5gLLIjorin+CryAy2rkLrWgEzih6fsh7X4/ChD/CcW98KSY0bsHERUz8p71JaCzIFwq0+pJNdZGGjRqe7WqvXojT5AQeJFoKepgYHrEm
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(107886003)(2616005)(6486002)(16576012)(2906002)(508600001)(316002)(956004)(8936002)(4326008)(53546011)(6666004)(36756003)(31686004)(38100700002)(5660300002)(8676002)(66946007)(186003)(66476007)(26005)(86362001)(31696002)(54906003)(66556008)(4744005)(110136005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?uWswelX57ucEuFlc6fSI1/hUFc31FaawXO74tbI?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 6e1a78ce-f192-45cb-2730-08d950fac8f0
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 12:33:49.3993
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: pVQ/VJJYDU7vYXuJNjS5zpGjWbkVfC5/jjwosevguQIBK8z7rftRH9zdLJnlzILN7MfdjHClcmbqlt6Ks3nBB35WY0DkFdnbOO8IobIIEl8=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5727
X-OriginatorOrg: citrix.com

On 22/07/2021 10:20, Jan Beulich wrote:
> I suspect it is commit 40726f16a8d7 ("ld script expression parsing")
> which broke the hypervisor build, by no longer accepting section names
> with a dash in them inside ADDR() (and perhaps other script directives
> expecting just a section name, not an expression): .note.gnu.build-id
> is such a section.

Are binutils going to fix their testing to reduce the number of serious
regressions they're releasing?

>
> Quoting all section names passed to ADDR() via DECL_SECTION() works
> around the regression.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

I guess we've got no choice.  Acked-by: Andrew Cooper
<andrew.cooper3@citrix.com>

>
> --- a/xen/arch/x86/xen.lds.S
> +++ b/xen/arch/x86/xen.lds.S
> @@ -18,7 +18,7 @@ ENTRY(efi_start)
>  #else /* !EFI */
>  
>  #define FORMAT "elf64-x86-64"
> -#define DECL_SECTION(x) x : AT(ADDR(x) - __XEN_VIRT_START)
> +#define DECL_SECTION(x) x : AT(ADDR(#x) - __XEN_VIRT_START)
>  
>  ENTRY(start_pa)
>  
>



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 12:40:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 12:40:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161160.295910 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8MNW-00014x-Nb; Tue, 27 Jul 2021 12:40:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161160.295910; Tue, 27 Jul 2021 12:40:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8MNW-00014q-Kf; Tue, 27 Jul 2021 12:40:10 +0000
Received: by outflank-mailman (input) for mailman id 161160;
 Tue, 27 Jul 2021 12:40:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=R9+o=MT=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m8MNU-00014k-PU
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 12:40:08 +0000
Received: from out4-smtp.messagingengine.com (unknown [66.111.4.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c5b0a653-eed7-11eb-96eb-12813bfff9fa;
 Tue, 27 Jul 2021 12:40:06 +0000 (UTC)
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailout.nyi.internal (Postfix) with ESMTP id 640175C00C2;
 Tue, 27 Jul 2021 08:40:06 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163])
 by compute2.internal (MEProxy); Tue, 27 Jul 2021 08:40:06 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 27 Jul 2021 08:40:05 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c5b0a653-eed7-11eb-96eb-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=GeHdCL
	Kd6U7IHr2/i8PQ97U5z5Gb/Y+p+ZiJBa9jqvU=; b=vVQZD33mbQWq2Tu7DSBcLi
	9y8kPlU5X+Je5I/UFy0RmEJV+Ns0I01ClBgiUxXcKFOXpjkWwoAl2bl3qpOkKfX8
	Km7Xxg+vz1UNfG4mKRFOHpLs9dzxp/nOTRz8wsQJ7BOgcCumtXHPyNTZ+GbbXoLG
	7z0/yDLL7pz2sANfi6rT86zBrD21w/BllvIqGJCN5iy9h7/kRxoIdS4zXdMMtnfe
	Mt/aA1wX111QOVOSlpT7tRXp0KambRfyJWS5QHFJUUfpFPcDOWSdt/qKD543WmAE
	NckAvMWf6nT75xmkXaXxiPDpLL3+ZT4habAsBrBblC1IrHtYhb8SHisXjEl6zZEg
	==
X-ME-Sender: <xms:pv7_YKKNorSZ00MALD-H0cBVs01PChgOk6lnkKlHtMQROf7G3yRP6Q>
    <xme:pv7_YCL2w0ljhY6XCFtX3DAYFL4VeeXqBQxOPKvfYg-YPBVhHdGNwnmIdak9zqDqe
    nsFTSaf-zfJtw>
X-ME-Received: <xmr:pv7_YKuwStKC8LHavsxGtRmgwo4cE0lhoXdHVTQ_XA9FR1Y2kaHhh4GrsO8XrY6Gr8CqXR4gPpvhIRJjDnYp1F3E-h35eqFg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrgeejgdeglecutefuodetggdotefrodftvf
    curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
    uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
    fjughrpeffhffvuffkfhggtggujgesghdtreertddtjeenucfhrhhomhepofgrrhgvkhcu
    ofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuceomhgrrhhmrghrvghksehinhhvih
    hsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepteevffei
    gffhkefhgfegfeffhfegveeikeettdfhheevieehieeitddugeefteffnecuvehluhhsth
    gvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghksehi
    nhhvihhsihgslhgvthhhihhnghhslhgrsgdrtghomh
X-ME-Proxy: <xmx:pv7_YPZGDhHHGI3w8iMc-ew3uai02pV6Ns-2TkLraPCDB8nhkEVhPA>
    <xmx:pv7_YBb_4BHLUw6Z14oQYIk1CAr14Pcx6mHndML-KR9W6jkofK0Lag>
    <xmx:pv7_YLD8KH91ft6wfR1lovEGLoyvk6lYomz7xyTvwbh8h7e_TXjlDw>
    <xmx:pv7_YCAYX2VEfCilB7_4ozLiFA48CxKiZe9jXVm9kcB5XoWYT8eIIA>
Date: Tue, 27 Jul 2021 14:40:01 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path
Message-ID: <YP/+oXbFMkUzyHZ2@mail-itl>
References: <20210602033206.720860-1-marmarek@invisiblethingslab.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="xX8hYgWXFLEHe9VQ"
Content-Disposition: inline
In-Reply-To: <20210602033206.720860-1-marmarek@invisiblethingslab.com>


--xX8hYgWXFLEHe9VQ
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Tue, 27 Jul 2021 14:40:01 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path

On Wed, Jun 02, 2021 at 05:32:06AM +0200, Marek Marczykowski-G=C3=B3recki w=
rote:
> Don't strip full path from $PYTHON variable. This is especially
> relevant, if it points outside of $PATH. This is the case
> for RPM build on CentOS 8 (%{python3} macro points at
> /usr/libexec/platform-python).
>=20
> For this reason, adjust also python-config handling - AC_PATH_PROG
> doesn't work on already absolute path, so make it conditional.
>=20
> Signed-off-by: Marek Marczykowski-G=C3=B3recki <marmarek@invisiblethingsl=
ab.com>

Ping?

> ---
>  m4/python_devel.m4 | 6 +++++-
>  tools/configure.ac | 1 -
>  2 files changed, 5 insertions(+), 2 deletions(-)
>=20
> diff --git a/m4/python_devel.m4 b/m4/python_devel.m4
> index bbf1e0354b2b..676489b8e978 100644
> --- a/m4/python_devel.m4
> +++ b/m4/python_devel.m4
> @@ -2,7 +2,11 @@ AC_DEFUN([AX_CHECK_PYTHON_DEVEL], [
>  ac_previous_cppflags=3D$CPPFLAGS
>  ac_previous_ldflags=3D$LDFLAGS
>  ac_previous_libs=3D$LIBS
> -AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> +AS_IF([echo "$PYTHON" | grep -q "^/"], [
> +    pyconfig=3D"$PYTHON-config"
> +], [
> +    AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> +])
>  AS_IF([test x"$pyconfig" =3D x"no"], [
>      dnl For those that don't have python-config
>      CPPFLAGS=3D"$CFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> diff --git a/tools/configure.ac b/tools/configure.ac
> index 6414fcbb445e..ebf1265643b3 100644
> --- a/tools/configure.ac
> +++ b/tools/configure.ac
> @@ -368,7 +368,6 @@ AS_IF([test -z "$PYTHON"], [AC_CHECK_PROGS([PYTHON], =
[python3 python python2], e
>  AS_IF([test "$PYTHON" =3D "err"], [AC_MSG_ERROR([No python interpreter f=
ound])])
>  AS_IF([echo "$PYTHON" | grep -q "^/"], [], [AC_PATH_PROG([PYTHON], [$PYT=
HON])])
>  PYTHONPATH=3D$PYTHON
> -PYTHON=3D`basename $PYTHONPATH`
> =20
>  AX_PATH_PROG_OR_FAIL([PYTHONPATH], [$PYTHON])
>  AX_CHECK_PYTHON_VERSION([2], [6])
> --=20
> 2.26.3
>=20

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--xX8hYgWXFLEHe9VQ
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmD//qIACgkQ24/THMrX
1ywpMgf/WxBNeUiYw0/b/d5/thLz8fojQDG3Z0YhpUHo83M2g66LyDmivXwWvgwK
trxsiZhUoMsvD/rCClXlYNhd/5p/bvR0JPEh1Bb6h9XmlJdfQtKc2CBX+ThsWKUd
qPzaMtkCuU606I5ZXSU77oVsObuuPdACE/sbsFYK+qBOo5lUS4GLP6nPJsySWN0d
Bbf/g3Oduu5+Heip5Sw9vYrg32A216T/G/vK0zDEpIR3cgi53tpQkxnJrcUaKZ+0
LHY6T+6YFCQzdg2hAPvhY7dELKnQGX8GrBzSxIkZtKpW/wVKCtSIJzx9+ZX9/8hb
uxZUZLz/c1XF8iZBfQSOTTwGdsHblA==
=Xqs9
-----END PGP SIGNATURE-----

--xX8hYgWXFLEHe9VQ--


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:22:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:22:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161167.295923 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N2I-00050n-U4; Tue, 27 Jul 2021 13:22:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161167.295923; Tue, 27 Jul 2021 13:22:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N2I-00050g-Pk; Tue, 27 Jul 2021 13:22:18 +0000
Received: by outflank-mailman (input) for mailman id 161167;
 Tue, 27 Jul 2021 13:22:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N2G-00050a-MW
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:22:16 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N2G-0005xv-J7
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:22:16 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N2G-0007Kn-I6
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:22:16 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8N2D-0002Se-6i; Tue, 27 Jul 2021 14:22:13 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=iHS1st1/07QQ/fFswWPnFvtUuVTkxRQYLglOfSq5qYg=; b=13ld505HE8wr9uOOebrLJsS65a
	36LG1DtT07pUciZpaMLAlhrBZuH0VVT4xWP2T/KMITJvyEgbPBT9r444CvQAQFz1nEkdma8P4LbAy
	S5tbFjzS27vdhFVBb3bYszd0Zgb6geMXkpjBcho2x7086ngt3092RJlNHWqYDvlvK3ms=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24832.2180.937351.89575@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:22:12 +0100
To: Scott Davis <scottwd@gmail.com>
Cc: xen-devel@lists.xenproject.org,
    Scott Davis <scott.davis@starlab.io>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Nick Rosbrook <rosbrookn@ainfosec.com>,
    Anthony PERARD <anthony.perard@citrix.com>,
    Juergen Gross <jgross@suse.com>,
    Jason Andryuk <jandryuk@gmail.com>
Subject: Re: [XEN PATCH v2] tools/xl: Add stubdomain_cmdline option to xl.cfg
In-Reply-To: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>
References: <93dd20b91ca75b35c5886e4051659e58bceb080d.1626970707.git.scott.davis@starlab.io>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Scott Davis writes ("[XEN PATCH v2] tools/xl: Add stubdomain_cmdline option to xl.cfg"):
> This adds an option to the xl domain configuration file syntax for specifying
> a kernel command line for device-model stubdomains. It is intended for use with
> Linux-based stubdomains.
> 
> Signed-off-by: Scott Davis <scott.davis@starlab.io>
> Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

Acked-by: Ian Jackson <iwj@xenproject.org>

and queued.

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:24:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:24:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161172.295935 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N4f-0005d3-A3; Tue, 27 Jul 2021 13:24:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161172.295935; Tue, 27 Jul 2021 13:24:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N4f-0005cw-70; Tue, 27 Jul 2021 13:24:45 +0000
Received: by outflank-mailman (input) for mailman id 161172;
 Tue, 27 Jul 2021 13:24:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N4e-0005cq-La
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:24:44 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N4e-00061M-Ki
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:24:44 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N4e-0007Zh-Jv
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:24:44 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8N4Z-0002V0-Vn; Tue, 27 Jul 2021 14:24:40 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=VarRAtG18t58DVXcDYuKoys7rlIDW8VvQ/T4wbJ0jIA=; b=Xpz5x94MXHw9GH3sffZqjY4Umn
	ORS1i2LMlxnl1hn39wZ4gX66C51E/MP+2GYnVkGhXnRem5EPy9fLaum10YYGCHLkmxG5Krl+ayP4e
	mfDYYQv/Mne62is6/r13RVOw/HysFE6AIAxWenxq+ZsoWmvP/XvSwzywt1NsxLOY9H84=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24832.2327.802741.325312@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:24:39 +0100
To: Juergen Gross <jgross@suse.com>
Cc: Alan Robinson <Alan.Robinson@fujitsu.com>,
    xen-devel@lists.xenproject.org,
    Wei Liu <wl@xen.org>,
    Anthony PERARD <anthony.perard@citrix.com>
Subject: Re: [PATCH] tools/libxl: add missing blank in message
In-Reply-To: <6fd2eaf5-7434-58a3-2d98-47f87e0b9dd1@suse.com>
References: <20210723102308.5332-1-Alan.Robinson@fujitsu.com>
	<6fd2eaf5-7434-58a3-2d98-47f87e0b9dd1@suse.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Juergen Gross writes ("Re: [PATCH] tools/libxl: add missing blank in message"):
> On 23.07.21 12:23, Alan Robinson wrote:
> > From: Alan Robinson <alan.robinson@fujitsu.com>
> > 
> > Add trailing blank to first part of concatenated string giving
> > "an emulated" instead of "anemulated".

Alan, thanks:

Acked-by: Ian Jackson <iwj@xenproject.org>

and queued.

> > -                         "Disk will be available via PV drivers but not as an"
> > +                         "Disk will be available via PV drivers but not as an "
> >                            "emulated disk.",
> 
> I'd rather have a longer line without splitting the message (splitting
> after the '\n' is fine, of course). This will make it easier to find the
> coding emitting the message when searching for the whole printed line.

I would be fine with this, and I can see how it is an improvement.
However, Alan's patch is a step in the right direction so should go in
right away.

Ian.



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:26:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:26:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161178.295946 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N67-0006Fk-Kl; Tue, 27 Jul 2021 13:26:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161178.295946; Tue, 27 Jul 2021 13:26:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N67-0006Fd-Hr; Tue, 27 Jul 2021 13:26:15 +0000
Received: by outflank-mailman (input) for mailman id 161178;
 Tue, 27 Jul 2021 13:26:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N66-0006FX-Qx
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:26:14 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N66-00062p-Q8
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:26:14 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N66-0007fL-PV
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:26:14 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8N63-0002WP-L0; Tue, 27 Jul 2021 14:26:11 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=Rdg/ah9/lYobn+NtYvGOxKV1GjMUkPW64HRwDXpHGuI=; b=HX+wAck9eWsVxpsPGGJRRZ8Jv4
	FaOngQHWcHXKkbHO4SRFCKQim6EuxFAH36G/68nO0CM8A3duJxIVaNf7fQxUgdnVZIek0dR8yR6O4
	sSurPxnAvb7k6B0III7nYdbnHmasLWF0pvW0GAtH5mzmThyZ9X/rj4vcuCGH5jYcpR+k=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24832.2419.470241.159863@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:26:11 +0100
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: <xen-devel@lists.xenproject.org>,
    Andrew Cooper <andrew.cooper3@citrix.com>,
    George Dunlap <george.dunlap@citrix.com>,
    Jan Beulich <jbeulich@suse.com>,
    Julien Grall <julien@xen.org>,
    Stefano Stabellini <sstabellini@kernel.org>,
    Wei Liu <wl@xen.org>
Subject: Re: Ping: [XEN PATCH] tools/firmware/ovmf: Use OvmfXen platform file if
 exist and update OVMF
In-Reply-To: <YP6s5q/hAbupbB/S@perard>
References: <20210719134845.681725-1-anthony.perard@citrix.com>
	<YP6s5q/hAbupbB/S@perard>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Anthony PERARD writes ("Ping: [XEN PATCH] tools/firmware/ovmf: Use OvmfXen platform file if exist and update OVMF"):
> On Mon, Jul 19, 2021 at 02:48:45PM +0100, Anthony PERARD wrote:
> > A platform introduced in EDK II named OvmfXen is now the one to use for
> > Xen instead of OvmfX64. It comes with PVH support.
...
> Can we commit this soon? Thanks.

Acked-by: Ian Jackson <iwj@xenproject.org>

and queued.  Sorry for the delay.

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:27:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:27:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161183.295959 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N7O-0006rh-VP; Tue, 27 Jul 2021 13:27:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161183.295959; Tue, 27 Jul 2021 13:27:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N7O-0006ra-SP; Tue, 27 Jul 2021 13:27:34 +0000
Received: by outflank-mailman (input) for mailman id 161183;
 Tue, 27 Jul 2021 13:27:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N7N-0006rQ-NX
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:27:33 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N7N-00064J-4O
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:27:33 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N7N-0007lH-3V
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:27:33 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8N7I-0002YO-GN; Tue, 27 Jul 2021 14:27:28 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=Qh308XA4oQeCTo6wf1iuCob/cAw84HNdX6QGqkAgNAM=; b=XV6YhTTOBLAL48vbZj2n374xEI
	V25ZXIsonhKgQXt0subrqHqLagTvHIE9x6PcsBFJvkCfyEsIrdC+CVsHHWDZcYQ659PGtcsTjS+X8
	UlvfBuzImCX6vWfuavWHtZo3fgDSB6gT3iS8Q910FgCBbuGYBzv4pc1Iq3K5epUYugRs=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24832.2496.323844.216236@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:27:28 +0100
To: Anthony PERARD <anthony.perard@citrix.com>
Cc: Alan Robinson <Alan.Robinson@fujitsu.com>,
    <xen-devel@lists.xenproject.org>,
    "Wei  Liu" <wl@xen.org>,
    Juergen Gross <jgross@suse.com>
Subject: Re: [PATCH v2] tools/libxl: add missing blank in message
In-Reply-To: <YP/dW2trNx1camFQ@perard>
References: <20210727074703.19865-1-Alan.Robinson@fujitsu.com>
	<YP/dW2trNx1camFQ@perard>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Anthony PERARD writes ("Re: [PATCH v2] tools/libxl: add missing blank in message"):
> On Tue, Jul 27, 2021 at 09:47:03AM +0200, Alan Robinson wrote:
> > Add missing blank giving "an emulation" instead of "anemulation"
> > while making the text a single source line.
> > 
> > Signed-off-by: Alan Robinson <alan.robinson@fujitsu.com>
> > ---
> > 
> > Changed since v1:
> >   * text as as single line, requested by Juergen
> > 
> 
> Acked-by: Anthony PERARD <anthony.perard@citrix.com>

Oh, didn't spot this in my earlier reply.  Thanks everyone, I will
dequeue the previous one and queue this instead.

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:30:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:30:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161190.295971 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N9v-0008EG-EG; Tue, 27 Jul 2021 13:30:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161190.295971; Tue, 27 Jul 2021 13:30:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8N9v-0008E9-BF; Tue, 27 Jul 2021 13:30:11 +0000
Received: by outflank-mailman (input) for mailman id 161190;
 Tue, 27 Jul 2021 13:30:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N9u-0008E3-51
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:30:10 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N9u-000682-49
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:30:10 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8N9u-0007xZ-3Q
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:30:10 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8N9p-0002ZW-H4; Tue, 27 Jul 2021 14:30:05 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=d8C0ZlsJ9NWx1TZfi3koiNLXlaW2f/feWGO/stqtA78=; b=P1gsqcF8V5G4mLTCq0MJ0/klwG
	vAMvaDPYLgFq59y+4xjijn0tPX7fIzIKU2Okj6x3xfOUeZRWdKzTGG8xy/W1v8FDvrcSyHKNS7k9Q
	z++5Cv7MyE4YrfKvNTzEUed0x8d0CpBpqPZNNZkXP/DnxeDt144noffQ2kXUHS5/g52g=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24832.2653.349970.515704@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:30:05 +0100
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Scott Davis <scottwd@gmail.com>,
    <xen-devel@lists.xenproject.org>,
    Scott Davis <scott.davis@starlab.io>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Nick Rosbrook <rosbrookn@ainfosec.com>,
    Anthony PERARD <anthony.perard@citrix.com>,
    Juergen  Gross <jgross@suse.com>,
    Daniel De Graaf <dgdegra@tycho.nsa.gov>,
    "Daniel P .  Smith" <dpsmith@apertussolutions.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
In-Reply-To: <dfc8bc88-ccab-bc6b-704d-c8ef95182311@citrix.com>
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
	<dfc8bc88-ccab-bc6b-704d-c8ef95182311@citrix.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Andrew Cooper writes ("Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel option to xl.cfg"):
> On 23/07/2021 05:47, Scott Davis wrote:
...
> >          ret = libxl_flask_context_to_sid(ctx, s, strlen(s),
> >                                           &d_config->b_info.device_model_ssidref);
> > +        if (ret) {
> > +            if (errno == ENOSYS) {
> > +                LOGD(WARN, domid,
> > +                     "XSM Disabled: device_model_stubdomain_init_seclabel not supported");
> > +                ret = 0;
> 
> Surely this wants to be a hard error?
> 
> Not specifying a label is one thing, but specifying a label and having
> it not take effect because code was compiled out of the hypervisor
> sounds like a security hole.
> 
> I see this is a pattern copied from elsewhere, but it seems very short
> signed.

I wonder if this is to try to make it possible to boot a system whose
config specifies XSM labels but with XSM disabled.

Marek, or someone, can you advise ?

My initial thoughts are to agree with Andrew that ignoring this error
seems to me to be a bad plan, but maybe there is a good reason.

If we do want to improve this, maybe we need to update all the
corresponding call sites.

Thanks,
Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:32:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:32:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161196.295983 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NC9-0000QY-Sb; Tue, 27 Jul 2021 13:32:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161196.295983; Tue, 27 Jul 2021 13:32:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NC9-0000QR-PB; Tue, 27 Jul 2021 13:32:29 +0000
Received: by outflank-mailman (input) for mailman id 161196;
 Tue, 27 Jul 2021 13:32:29 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NC8-0000QI-V2
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:32:28 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NC8-0006AY-U6
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:32:28 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NC8-00089e-TL
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:32:28 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8NC2-0002aT-QL; Tue, 27 Jul 2021 14:32:22 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=cppFNk2BUE2neqstmGDRc9YL8VWaW+My8IMxMb/EIJc=; b=DmEFxi97EwT3f9C39JK7CnD3Dd
	kneEPuwiQ0DFnhZNZjbp8fWdmuAZGiT9QZeSDpz0s4QX8DWKPO+vqAGl3SzHGGs/pBKIYtAhwKFLf
	WiMAQ5sAgptuUjJOpeduWuZyafJpVmURKnvQA+Tvl7wbSjItCxpmIdBBxYCNmwWvjuVA=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <24832.2790.631888.595948@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:32:22 +0100
To: Marek =?iso-8859-1?Q?Marczykowski-G=F3recki?= <marmarek@invisiblethingslab.com>
Cc: Jason Andryuk <jandryuk@gmail.com>,
    Scott Davis <scottwd@gmail.com>,
    xen-devel <xen-devel@lists.xenproject.org>,
    Scott Davis <scott.davis@starlab.io>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Nick Rosbrook <rosbrookn@ainfosec.com>,
    Anthony PERARD <anthony.perard@citrix.com>,
    Juergen Gross <jgross@suse.com>,
    Daniel De Graaf <dgdegra@tycho.nsa.gov>,
    "Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
In-Reply-To: <YP/5wL2p/CGR5g7D@mail-itl>
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
	<CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>
	<YP/5wL2p/CGR5g7D@mail-itl>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Marek Marczykowski-Grecki writes ("Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel option to xl.cfg"):
> On Mon, Jul 26, 2021 at 09:07:03AM -0400, Jason Andryuk wrote:
> > Sort of relatedly, is stubdom unpaused before the guest gets
> > relabeled?  Quickly looking, I think stubdom is unpaused.  I would
> > think you want them both relabeled before either is unpaused.  If the
> > stubdom starts with the exec_label, but it sees the guest with the
> > init_label, it may get an unexpected denial?  On the other hand,
> > delayed unpausing of stubdom would slow down booting.
> 
> Some parts of the stubdomain setup are done after it's unpaused (but
> before the guest is unpaused). Especially, PCI devices are hot-plugged
> only when QEMU is already running (not sure why).

I think the PCI hotplug involves interaction with QEMU, and providing
only hotplug simplifies the code in libxl.  Anthony, do I have that
righgt ?

Naively, it seems to me that the security risks are limited because
until the guest is unpaused it doesn't have the ability to do
anything, so cannot yet mount an attack on qemu.  So I'm expecting
that qemu is still trustworthy until the guest is unpaused.

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:36:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:36:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161204.295995 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NFx-00018u-D9; Tue, 27 Jul 2021 13:36:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161204.295995; Tue, 27 Jul 2021 13:36:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NFx-00018n-A2; Tue, 27 Jul 2021 13:36:25 +0000
Received: by outflank-mailman (input) for mailman id 161204;
 Tue, 27 Jul 2021 13:36:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ggmi=MT=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8NFv-00018h-Ha
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:36:23 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a109f17a-eedf-11eb-96f6-12813bfff9fa;
 Tue, 27 Jul 2021 13:36:22 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a109f17a-eedf-11eb-96f6-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627392981;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=wFD60ybjZ/68Z7KQ3tdxlzFgC9WkJZstH9j8ETv7pJM=;
  b=MkgV0X/KGJxHH0sLIMqi+H5+j036AyKDx6oyk5Vo6irFr57vqPgd3JZ/
   ux9gRxTgZUuzzZvMZuXSrsyLvAOj6Q01SbV3GuMlAA/gdj62apDs5yvk2
   OxKBDG/CurEoDaFPsmizm4oOmm2XYlJAaLzlUmvHuQIdtB8wylxrcpvSv
   w=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: ZV/SeQbrKxbNeYzaQpmwHX8LvoDfiLBf7erIXnC2xJcS7lVR1TgcnkOqG0Gnz3w3hc5F+/m5e1
 2JQ5cEFaHdj6Xnnywo3vfnL5RGEjynqXko09J9iKVdJGSfXhYNvEiHQI4yDBsXHAzR4KaW1HmN
 kfuOrQ+YyL2w/CpsTCZ2LFXe/1XP+UswabSAn7xBnTwEecrjq/+ADRvGpQxH5PUmMjn0hLhIMn
 +S/WQW5gKCvCDaGWAqwK8doLpBjk80WQTigZhWPQFHT0Cud8D4nwPA/oyALXA/aS/np4MEemkM
 i7hR90/OH5AfQOGP71/RV5yJ
X-SBRS: 5.1
X-MesageID: 50850982
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:sqqCOamRxZ5dB1wSFz1KOkqw20jpDfOlimdD5ihNYBxZY6Wkfp
 +V8sjzhCWatN9OYh0dcLC7WJVpQRvnhPpICPoqTMmftW7dyRSVxeBZnPffKljbehEWmdQtrp
 uIH5IObuEYSGIK8PoSgzPIYOrIouP3iJxA7N22pxwGIHAIGsMQmjuRSDzrdXGeLDM2dabRf6
 Dsn/avyQDQHEj/Iv7LfEXsCIP41qz2fd/dEFE7Li9izDPLoSKj6bb8HRTd9hACUwlXybNn1W
 TeiQT26oiqrvn+k3bnpi7uxqUTvOGk5spIBcSKhMRQAjLwijywbIAkf7GZpjg6rMym9V5vut
 jRpBULOdh19hrqDy+IiCqo/zOl/Ccl6nfkx1PdqXz/ofbhTDZ/MMZFjZIxSGqS12MQ+PVHlI
 5b1WOQsJRaSTnamj7m2tTOXxZ20mKpvHsLi4co/j5ieLpbTIUUgZ0U/UtTHptFNjn98pobHO
 5nC9yZzOpKcGmdc2vSsgBUsZ+Rt0wIb1O7q3U5y4uoO2A8pgE+86JY/r1eop44zuN5d3EejN
 60a5iB/dp1P70rhaEUPpZLfSL4MB2Uffv2ChPkHb3QLtBOB5v8ke+C3FwL3pDdRHUp9up+pH
 2TaiIViYYNE3ieQPFmmqc7qSzwfA==
X-IronPort-AV: E=Sophos;i="5.84,273,1620705600"; 
   d="scan'208";a="50850982"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=lzCRlgF7oxs6Ot4q/u82ZhQ6QcdwmLa9dN7zSaVClgb69w7VnhHH3lZ0sflfpy/Z5Mb74kCwJuM79knA8+Nxw9u1GvIYNTR0pyEyJIGT4Ow+Rcl4MwOmfDDmbkD5IQQPw9KPFoWRXBVXohaZPzosupPOzm7tUgjkw0mN4x2+80p1fr51CUWmFqII7QowpTVU0XO7OrOz0NIKuKQVq783lmQU4qS3me9gAlHWrnLogbH0xSxf8j7ENupDDEh8My+mqZ80i/o9GpZ2uNVepgGD6EqLxiLZIjcGhUmrTjWc7BPtCW6OGE/7wC8p3LipjlFWtWpukyHOrXb8VaBrSLn8kg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wFD60ybjZ/68Z7KQ3tdxlzFgC9WkJZstH9j8ETv7pJM=;
 b=VAGoBhchjQq2wHK5/izHuQNtdK79lFMhmvyQNtANSuKcwuXKwPOh43K5z1DjN4TYZA07hb219zjxkoaeeAshK2YJKkWvcV8vxeubj2k6B9UcHaqkY2rQ+ZQ2rHjZaZNi++7D08K5/XtC+dWX5TLqb5qCsINqR/hyMfxlIGxdbmHn8m7u+hNPdrxIvbDtP3kQdix/QxepslXx5iEHtEKit+F7VQRZyDAEXqLxVpawW7gu82t995Lf9Z3cBgnRbj5eXPC6rnk70ryIZy9f3MWOUjpU/Z32/iJzRF44u8TVT1MTqa6LpBzkr7cJvwL0n+XYhUdZRt5cLg0h/8iJdt+9CQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wFD60ybjZ/68Z7KQ3tdxlzFgC9WkJZstH9j8ETv7pJM=;
 b=Z3K1XvR2z4QwP5WzVQwLwy7duWouMuPZmb3mj2ZtFx59xQUXE5yBonYCO99IjL7xTjS/SRZ6Vm84660fCCkbTWVyTStdMooSuiNHBj1stv2rFm/7Xn0k5pQCr0pdvMyKWEp+aseB1w8B2kpzVPUrOLNC6GC2m7aUnFHwIKXO7wI=
To: Costin Lupu <costin.lupu@cs.pub.ro>, Juergen Gross <jgross@suse.com>,
	Julien Grall <julien@xen.org>, Jan Beulich <jbeulich@suse.com>
CC: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>, "Wei
 Liu" <wl@xen.org>, <xen-devel@lists.xenproject.org>
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
 <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
 <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
 <7fab704a-6b59-1e9b-663e-a3afdfcc319f@suse.com>
 <3a6f1fc6-a9b3-78bc-1b73-b7ad10d20405@cs.pub.ro>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
Message-ID: <627d776e-575e-c32a-f3f6-87ace982d6da@citrix.com>
Date: Tue, 27 Jul 2021 14:36:10 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <3a6f1fc6-a9b3-78bc-1b73-b7ad10d20405@cs.pub.ro>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0135.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:193::14) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: e8df6381-e680-4f2f-84b1-08d9510382cf
X-MS-TrafficTypeDiagnostic: BY5PR03MB4998:
X-Microsoft-Antispam-PRVS: <BY5PR03MB4998C6E812B6A0423C352CD9BAE99@BY5PR03MB4998.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: R2upOLfqJs5OkYRdhdE1hVdyK5G+6WDnDFQhRcZYJg6txROL0yGEP5GV7NuRR3DYQvI8tUTYOnQfrMseWfhYc/XK8gnYy7kTlVbu5xDakI9KnwbVQV2cZGStbf92dO9OSvrKGx7OP/Kb5baqce6rGcCK9FGfJ+F1ZkkMhMLILvIm7DRr4gRIg/9GnYm3aqY6F4QjtL2RccGw36IpaDFuhDOQQ+TtcgTxwjEkLZRAtXgly1TteMuRG5XeaguJ2n1nSrHXjKaOwvA4DqGHb15kSa37x23GLzpS/TWVrAQEXpEkIZR9SaTtXj4tzV4WwNQ1Quc70BQkIPyFcw/CUJNMcCt5tPRYS9IBe4nKQMyLgaOcb+D3XDv3iXgxoeOBONCAtAZmHrueRg2g+QXseHD3cw1BcoqQUSDfLZiABYCp4hniq8tZRwujwxT8AMt0eJqCHgxjfpG0mhld7lusrv4wPcjsmVXYfm4iIwNA+gXL1BiA23w87OpPYp0eNd+FF+7gRvUKCnBfEJt4PekJLEnGLHjBcdw5bXH06kaDXhj66IEGDvO+3dzl5WPZXy9Pd+w4Z91xWA+lrrFBkZUa2lRW4/4vE3tP5z4yzkAMpBF7aamcA+efQqEKPIoYynuFprs+63OSzNdTPEvykEnT7HsodFcFaqTYW31kggZD4/VOKsAaNE8+o5e+z6NwwE/0zE7l/UdYkRDh7vysxTY41FZiKdK7WMCt2peDQL2Pvi1bxebmUeSRWGSHztlUbAN1E6fq
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(366004)(396003)(376002)(39860400002)(2616005)(31686004)(31696002)(53546011)(5660300002)(478600001)(36756003)(4326008)(38100700002)(8936002)(2906002)(186003)(16576012)(83380400001)(86362001)(6666004)(110136005)(316002)(26005)(956004)(6486002)(66946007)(8676002)(54906003)(66556008)(66476007)(98903001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: e8df6381-e680-4f2f-84b1-08d9510382cf
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 13:36:17.2164
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: IjtqVoaq9rK8Nm9lz0HkpYQe9ung4ajgCB1ydoaRaLxiozQcFd6usJrKyJrNu5oo9GjvbNx0I0vUALEX9rjpHaXWPV9fjvZ/OvN5MqnlZCo=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB4998
X-OriginatorOrg: citrix.com

On 16/07/2021 19:28, Costin Lupu wrote:
> On 7/13/21 6:20 PM, Juergen Gross wrote:
>> On 13.07.21 17:15, Julien Grall wrote:
>>> Hi Juergen,
>>>
>>> On 13/07/2021 16:09, Juergen Gross wrote:
>>>> On 13.07.21 16:38, Julien Grall wrote:
>>>>> Hi Juergen,
>>>>>
>>>>> On 13/07/2021 15:23, Juergen Gross wrote:
>>>>>> On 13.07.21 16:19, Julien Grall wrote:
>>>>>>> Hi Jan,
>>>>>>>
>>>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>>>> And I don't think it should be named XC_PAGE_*, but rather
>>>>>>>>> XEN_PAGE_*.
>>>>>>>> Even that doesn't seem right to me, at least in principle. There
>>>>>>>> shouldn't
>>>>>>>> be a build time setting when it may vary at runtime. IOW on Arm I
>>>>>>>> think a
>>>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>>> Yes, we want to be able to use the same userspace/OS without
>>>>>>> rebuilding to a specific hypervisor page size.
>>>>>> This define is used for accessing data of other domains. See the
>>>>>> define
>>>>>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>>>>>
>>>>>> So it should be a constant (minimal) page size for all hypervisors a=
nd
>>>>>> guests of an architecture.
>>>>> Do you mean the maximum rather than minimal? If you use the minimal
>>>>> (4KB), then you would not be able to map the page in the stage-2 if
>>>>> the hypervisor is using 64KB.
>>>> But this would mean that the current solution to use XC_PAGE_SIZE is
>>>> wrong, as this is 4k.
>>> The existing ABI is implicitely based on using the hypervisor page
>>> granularity (currently 4KB).
>>>
>>> There is really no way we can support existing guest on 64KB
>>> hypervisor. But if we were going to break them, then we should
>>> consider to do one of the following option:
>>> =C2=A0=C2=A0=C2=A0 1) use 64KB page granularity for ABI
>>> =C2=A0=C2=A0=C2=A0 2) query the hypervisor page granularity at runtime
>>>
>>> The ideal is 2) because it is more scalable for the future. We also
>>> need to consider to extend the PV protocol so the backend and frontend
>>> can agree on the page size.
>> I absolutely agree, but my suggestion was to help finding a proper way
>> to cleanup the current interface mess. And this should be done the way
>> I suggested IMO.
>>
>> A later interface extension for future guests can still be done on top
>> of that.
> Alright, let's have a little recap to see if I got it right and to agree
> on the next steps. There are 2 proposed solutions, let's say a static
> one and a dynamic one.
>
> 1) Static solution (proposed by Juergen)
> - We define XEN_PAGE_* values in a xen/include/public/arch-*/*.h header.
> - Q: Should we define a new header for that? page.h or page_size.h are
> ok as new filenames?
>
> Pros:
> - We fix the interfaces mess and we can get rid of xenctrl lib
> dependency for some of the libs that need only the XEN_PAGE_* definitions=
.
> - It's faster to implement, with fewer changes.
>
> Cons:
> - Well, it's static, it doesn't allow the hypervisor to provide
> different values for different guests.
>
>
> 2) Dynamic solution (proposed by Jan and Julien)
> We get the value(s) by calling a hypcall, probably as a query related to
> some guest domain.
>
> Pros:
> - It's dynamic and scalable. We would support different values for
> different guests.
>
> Cons:
> - More difficult to implement. It changes the paradigm in the toolstack
> libs, every occurrence of XC_PAGE_* would have to be amended. Moreover,
> we might want to make the hypcall once and save the value for later
> (probably several toolstack structures should be extended for that)
>
>
> I searched for the occurrences of XC_PAGE_* in the toolstack libs and
> it's a *lot* of them. IMHO I think we should pick the static solution
> for now, considering that it would be faster to implement. Please let me
> know if this is OK or not. Any comments are appreciated.

The immediate problem needing fixing is the stable libraries inclusion
of unstable headers - specifically, the inclusion of <xenctrl.h>.

Juergen's proposal moves the existing constant to a more appropriate
location, and specifically, a location where its value is stable.

It does not change the ABI.=C2=A0 It merely demonstrates that the existing
ABI is broken, and thus is absolutely a step in the right direction.

This is the approach you should take in the short term, and needs
sorting before 4.16 ships.


The dynamic solution, while preferable in the longterm, is far more
complicated than even described thus far, and is not as simple as just
having a hypercall and using that value.

Among other things, it requires coordination with the dom0 kernel as to
its pagetable setup, and with Xen's choice of pagetable size for dom0,
which may not be the same as domU's.=C2=A0 It is a large quantity of work,
very invasive to the existing APIs/ABIs, and stands no chance at all of
being ready for 4.16.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:40:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:40:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161210.296007 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NJQ-0001sK-1D; Tue, 27 Jul 2021 13:40:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161210.296007; Tue, 27 Jul 2021 13:40:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NJP-0001sD-UO; Tue, 27 Jul 2021 13:39:59 +0000
Received: by outflank-mailman (input) for mailman id 161210;
 Tue, 27 Jul 2021 13:39:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NJP-0001s5-24
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:39:59 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NJO-0006Jb-JD
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:39:58 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NJO-0000e7-IM
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:39:58 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8NJC-0002cf-H5; Tue, 27 Jul 2021 14:39:46 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=nt507/J/JBlV+z9dTi+R+qRzORHUlZYPjI3xmvZ88b0=; b=VMQRE6TdrdXMICN3zvM9bRNbsF
	cNbVyObp15Lej2kstYc0iQcuDywmKBL41XNfi0Tz2nDrSfFtd0sbdJs3FwQveNmReQmOhCQHuHkE4
	tP4J0Z6Z1nK1ya81jrmuQusDwpLxhQpn5mFPGIHwSYr7G6txj1NzCe/0lET+pJCjU0Tg=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24832.3234.356168.227371@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:39:46 +0100
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>
Cc: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
    Wei Liu <wl@xen.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Tim Deegan <tim@xen.org>,
    Alexandru Isaila <aisaila@bitdefender.com>,
    Petre Pircalabu <ppircalabu@bitdefender.com>,
    xen-devel@lists.xenproject.org,
    Stefano Stabellini <sstabellini@kernel.org>,
    Julien Grall <julien@xen.org>,
    Andrew Cooper <andrew.cooper3@citrix.com>,
    Ian Jackson <iwj@xenproject.org>,
    Jan Beulich <jbeulich@suse.com>,
    Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger.pau@citrix.com>,
    Tamas K Lengyel <tamas@tklengyel.com>,
    Juergen Gross <jgross@suse.com>,
    Dario Faggioli <dfaggioli@suse.com>,
    Paul Durrant <paul@xen.org>,
    Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: Re: [PATCH v2 08/10] xsm: remove xsm_default_t from hook definitions
In-Reply-To: <20210712203233.20289-9-dpsmith@apertussolutions.com>
References: <20210712203233.20289-1-dpsmith@apertussolutions.com>
	<20210712203233.20289-9-dpsmith@apertussolutions.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

I have read the thread here and it seems that there are some
disagreements which may be blocking progress.

The mailing list thread is a rather tangled way of dealing with this.
I did read it but I feel I am lacking some of the context and/or
having trouble synthesising it.

Daniel, if you agree with me that this seems to be getting hung up on
disagreements, do you think you would be able to summarise the
disagreement(s) including the context and the arguments you can see on
the various sides ?  I'm not expecting such a summary to be neutral
but I think you are in a good position to motivate your changes.

Thanks,
Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:50:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:50:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161216.296019 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NTS-000404-1a; Tue, 27 Jul 2021 13:50:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161216.296019; Tue, 27 Jul 2021 13:50:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NTR-0003zx-V0; Tue, 27 Jul 2021 13:50:21 +0000
Received: by outflank-mailman (input) for mailman id 161216;
 Tue, 27 Jul 2021 13:50:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=t9d+=MT=gmail.com=jandryuk@srs-us1.protection.inumbo.net>)
 id 1m8NTQ-0003zr-7E
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:50:20 +0000
Received: from mail-lj1-x22c.google.com (unknown [2a00:1450:4864:20::22c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9f922cc1-4c39-4156-ba7f-172dee977338;
 Tue, 27 Jul 2021 13:50:19 +0000 (UTC)
Received: by mail-lj1-x22c.google.com with SMTP id b21so15967426ljo.13
 for <xen-devel@lists.xenproject.org>; Tue, 27 Jul 2021 06:50:19 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9f922cc1-4c39-4156-ba7f-172dee977338
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc:content-transfer-encoding;
        bh=dMWmlrGpXXxY/ZVwj1k4LoDE/Lp/cjWBmkGwRkoGYyU=;
        b=GMgACVF9mFlGmT6/mbgVGaH1xl4AqUSBShpqWHM82rmt/sHpxvZ+I9i8EcUtT7RKDx
         iTLppeS9yUuDyGuzcD2gvOPfs0qqDrHE6Y6gwu6WBdC0ZEswxYh6FS3ZicEYfFqiVQiq
         0Hm5D4wuQK9cAhCD9MHZrlirYmfqdFCLbvK+b8v/gJx5elTNEqJU91Pn2zXgtlGG92LP
         ICmSIMZfbqxNSZF99jUKsAXBX3EJI7l6OTUxTV8OHIo7JCRWrCpKAdVC1IjqCSU2HwR9
         T3Wz8nJlJ96cJWIKRuFGBfN0LE8Y2IRLwsvkJ3dEBIihZP8HCo4DcAQ8TQRjgicAfJ3K
         1LQg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:cc:content-transfer-encoding;
        bh=dMWmlrGpXXxY/ZVwj1k4LoDE/Lp/cjWBmkGwRkoGYyU=;
        b=suFiSRbc8xiGA/J8E2SsakStqHEuoQ59JySwzEH51G6SB9IhTzxgOkBz4u5YtCgRRr
         E0b33k5MFfq4j4aCFPixtCzItz9s70FYTYiCYtsgJ2e/X7g+5CUazvvEg39kZoia+SjN
         w5D9+abmv+BfBqyVKBzlHQg4Wf3fNntXEA46v8EnaKJ2oo9GeodHVeuHBA7KTM9x896y
         OxgILBuN0Do8RGOAXOSzz7HA8Jmt+P0SsY+i5wy+L33YBJZZ/xQXOFKSB0St45tuFTiD
         j4tGCASuxuatzlXkAfgHga++Owhxb4BMOPar93ubOYqNhOL1Jm8a0PpbBZo9DZYRtTes
         kbnQ==
X-Gm-Message-State: AOAM532NJN81TMUGPDwKP2N7YGYLDatj0gSoJCynF1kVWXjYrQEZt1RG
	A6BOTtxz0BdWMGM5BTR48oVpOZ7QJ0UkFJJzIQ0=
X-Google-Smtp-Source: ABdhPJxD1J56ghd8iHuH/t2RZF6LyFFDKasKln4c4vucUxN6gfW0d73jYyGeWinGl0MPpX3QygRk2mvvXkoJEjm2eYA=
X-Received: by 2002:a2e:a5c6:: with SMTP id n6mr15785685ljp.204.1627393818167;
 Tue, 27 Jul 2021 06:50:18 -0700 (PDT)
MIME-Version: 1.0
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
 <CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>
 <YP/5wL2p/CGR5g7D@mail-itl> <24832.2790.631888.595948@mariner.uk.xensource.com>
In-Reply-To: <24832.2790.631888.595948@mariner.uk.xensource.com>
From: Jason Andryuk <jandryuk@gmail.com>
Date: Tue, 27 Jul 2021 09:50:06 -0400
Message-ID: <CAKf6xpuKGg-YdSFeLqqh7wtHogXiDmQ30p7Zcc0NEQQ2wwrs8g@mail.gmail.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
To: Ian Jackson <iwj@xenproject.org>
Cc: =?UTF-8?Q?Marek_Marczykowski=2DG=C3=B3recki?= <marmarek@invisiblethingslab.com>, 
	Scott Davis <scottwd@gmail.com>, xen-devel <xen-devel@lists.xenproject.org>, 
	Scott Davis <scott.davis@starlab.io>, Wei Liu <wl@xen.org>, 
	George Dunlap <george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, 
	Anthony PERARD <anthony.perard@citrix.com>, Juergen Gross <jgross@suse.com>, 
	Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P . Smith" <dpsmith@apertussolutions.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jul 27, 2021 at 9:32 AM Ian Jackson <iwj@xenproject.org> wrote:
>
> Marek Marczykowski-G=C3=B3recki writes ("Re: [XEN PATCH] tools/xl: Add de=
vice_model_stubdomain_init_seclabel option to xl.cfg"):
> > On Mon, Jul 26, 2021 at 09:07:03AM -0400, Jason Andryuk wrote:
> > > Sort of relatedly, is stubdom unpaused before the guest gets
> > > relabeled?  Quickly looking, I think stubdom is unpaused.  I would
> > > think you want them both relabeled before either is unpaused.  If the
> > > stubdom starts with the exec_label, but it sees the guest with the
> > > init_label, it may get an unexpected denial?  On the other hand,
> > > delayed unpausing of stubdom would slow down booting.
> >
> > Some parts of the stubdomain setup are done after it's unpaused (but
> > before the guest is unpaused). Especially, PCI devices are hot-plugged
> > only when QEMU is already running (not sure why).

Thanks, Marek.

> I think the PCI hotplug involves interaction with QEMU, and providing
> only hotplug simplifies the code in libxl.  Anthony, do I have that
> righgt ?
>
> Naively, it seems to me that the security risks are limited because
> until the guest is unpaused it doesn't have the ability to do
> anything, so cannot yet mount an attack on qemu.  So I'm expecting
> that qemu is still trustworthy until the guest is unpaused.

I was looking at it from the other direction - protecting and guest
and stubdom from dom0.  The nice thing you can do is prevent dom0 from
mapping the guest's memory after the relabeling.

The relabeling placement in this patch may be okay.  The stubdom
itself is a dom0-supplied kernel & ramdisk.  So a window of time where
it's running before being relabeled isn't that big of a deal.  i.e.
instead of dom0 modifying the stubdom in that window, it could just
supply modified kernel and ramdisk initially.

Relabeling guest & stubdom prior to unpausing the guest ensures they
both have their desired labels before the guest is unpaused.  Like you
said, that seems to be the important part - both domains have their
desired label before the guest starts running.  It's when the guest
starts running that it may have sensitive contents in its memory.

I am curious if the relabeling in this patch requires more flask
permissions since the running init_label stubdom sees the paused
init_label guest.

Regards,
Jason


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 13:56:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 13:56:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161223.296031 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NYz-0004fa-Le; Tue, 27 Jul 2021 13:56:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161223.296031; Tue, 27 Jul 2021 13:56:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8NYz-0004fT-Il; Tue, 27 Jul 2021 13:56:05 +0000
Received: by outflank-mailman (input) for mailman id 161223;
 Tue, 27 Jul 2021 13:56:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NYz-0004fN-2Q
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:56:05 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NYy-0006Y7-VY
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:56:04 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8NYy-0002LA-Ue
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 13:56:04 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8NYv-0002gl-Nj; Tue, 27 Jul 2021 14:56:01 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=eSUbdmjzwOo6l4onKRUqJWrCu4omXNZl/RV6C1flKic=; b=TvjxOifDlkFFVI6ywvrKx/sUEu
	RbsS33V7neWG1LCVo7o80H6M+lFZCydlNBtv/EVnqUlDc+JGWNnZugl4O7ZyJExceXXPkTOnV2YuB
	Sq6m3ShcA+Rm2fSmEUBsR99dwHk68uASn5f+3RprkmJ/S5DoRMNaP0PlGcWS7MXc47OU=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <24832.4209.469293.942341@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 14:56:01 +0100
To: Marek =?iso-8859-1?Q?Marczykowski-G=F3recki?= <marmarek@invisiblethingslab.com>
Cc: xen-devel@lists.xenproject.org,
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path
In-Reply-To: <20210602033206.720860-1-marmarek@invisiblethingslab.com>
References: <20210602033206.720860-1-marmarek@invisiblethingslab.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Marek Marczykowski-Grecki writes ("[PATCH] autoconf: fix handling absolute $PYTHON path"):
> Don't strip full path from $PYTHON variable. This is especially
> relevant, if it points outside of $PATH. This is the case
> for RPM build on CentOS 8 (%{python3} macro points at
> /usr/libexec/platform-python).
> 
> For this reason, adjust also python-config handling - AC_PATH_PROG
> doesn't work on already absolute path, so make it conditional.

Sorry for the delay replying and thanks for trying to improve this
area.

> -AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> +AS_IF([echo "$PYTHON" | grep -q "^/"], [
> +    pyconfig="$PYTHON-config"
> +], [
> +    AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> +])

I'm not sure this logic is right.  I haven't looked at this area in
detail but it seems confusing to me.  I don't quite understand why the
preexisting code calls AC_CHECK_PROG followed by AC_PATH_PROG.

I also don't understand why we ever need an absolute path for
$PYTHON-config.  Why don't we just rely on PATH lookups when in invoke
it ?

> --- a/tools/configure.ac
> +++ b/tools/configure.ac
> @@ -368,7 +368,6 @@ AS_IF([test -z "$PYTHON"], [AC_CHECK_PROGS([PYTHON], [python3 python python2], e
>  AS_IF([test "$PYTHON" = "err"], [AC_MSG_ERROR([No python interpreter found])])
>  AS_IF([echo "$PYTHON" | grep -q "^/"], [], [AC_PATH_PROG([PYTHON], [$PYTHON])])
>  PYTHONPATH=$PYTHON
> -PYTHON=`basename $PYTHONPATH`

I'm not sure this is right.  I think we sometimes try to look at
PTYHON to see if we should be doing python-3-like things or
python-2-like things, and maybe that logic depends on PYTHON just
being the basename.

Contrary to what I said about leaving $PYTHON-config unresolved and
expecting it to be looked up at the time of use, maybe the right fix
is simply to change python_devel.m4 to use $PYTHONPATH-config instead.

Also using echo | grep -q ^/ seems poor style when case is available.
I think we can rely on case.  But I see that's in the old code
already.

As you can tell, trying to write down what I think doesn't seem to
have unconfused me.  Maybe you can explain ?  Or maybe I need more
coffee.

Thanks,
Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 14:37:35 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 14:37:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161236.296059 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8OCv-0000LC-Vw; Tue, 27 Jul 2021 14:37:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161236.296059; Tue, 27 Jul 2021 14:37:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8OCv-0000L5-SA; Tue, 27 Jul 2021 14:37:21 +0000
Received: by outflank-mailman (input) for mailman id 161236;
 Tue, 27 Jul 2021 14:37:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=c+Jp=MT=openhardware.de=luja@srs-us1.protection.inumbo.net>)
 id 1m8OCu-0000Kz-PD
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 14:37:20 +0000
Received: from mail.jaffe-engineering.com (unknown [178.254.25.135])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0da7221a-cd29-4038-955b-3537d28f3c3e;
 Tue, 27 Jul 2021 14:37:18 +0000 (UTC)
Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon)
 with ESMTPA id 054511E0FAD; Tue, 27 Jul 2021 16:36:59 +0200 (CEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0da7221a-cd29-4038-955b-3537d28f3c3e
From: "luja" <luja@openhardware.de>
In-Reply-To: <b5cce847-7304-d80c-66e2-a579763ea7fa@citrix.com>
Content-Type: multipart/alternative; boundary="----=_=-_OpenGroupware_org_NGMime-67-1627396619.108475-62------"
Date: Tue, 27 Jul 2021 16:36:59 +0200
Cc: =?utf-8?q?Marek_Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>, "xen-devel" <xen-devel@lists.xenproject.org>
To: "Andrew Cooper" <andrew.cooper3@citrix.com>
MIME-Version: 1.0
Message-ID: <43-61001a00-75-6ab37100@54781652>
Subject: =?utf-8?q?Re=3A?==?utf-8?q?_Xen-Error=3A?= Disabling IOMMU on Stepping C2 
 5520 Host-Bridge // SLH3P marking on die
User-Agent: SOGoMail 5.1.1
X-Last-TLS-Session-Version: None

------=_=-_OpenGroupware_org_NGMime-67-1627396619.108475-62------
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Length: 5323


Hi all,

No, the correct behavior is to just use the host bridge as it is correc=
t and works!
Just the PCI config space is done wrongly in the board's BIOS?

To get the truth...
I disassembled the cooler, cleaned the "phase change" wax from it,
photographed the laser engraving of the flip chip die and compared
the text with the errata "spec update" by Intel.

According to the laser marking and the errata the chip is a 5520 with C=
2
stepping. As it has an SLH3P marking on its die. I made a photo of it,
which is available on request.
The errata sheet refers it to C2 stepping and states it supports Intel
Trusted Execution TXT. This is on page 11 (3rd line of table) of said i=
ntel errata.
https://www.intel.com/content/dam/www/public/us/en/documents/specificat=
ion-updates/5520-and-5500-chipset-ioh-specification-update.pdf


So both Chipset errata #47, #53 mentioned in the code snippet
disabling the Vt-d feature, are not present in this hardware, so the Ho=
st bridge should=C2=A0
be kosher.

For some wired reason the PCI rev is 13.
I guess, that the ID is written by the bios using
pci config cycles at early boot into registers of the host bridge to
be then displayed using tools like lspci.
Page 11 of the errata:
"3. The Revision Number corresponds to bits 7:0 of the Revision ID Regi=
ster located at offset 08h in the PCI 
function 0 configuration space
"

But in general:
This is not Windows, so I would expect a kernel boot option
to just say "I ignore your warning, and when a black hole forms in my m=
ainboard
it is my fault" so force=5F5520=5FC2=3D1 or something like this should =
be appropriate.
So a small readme would advise the people who are affected by a fleaky =
implementation
of C2 Hostbridge to give it a try! So what should happen?!
Loose all your data on a freshly installed qubes-os?!
Oh, I forgot my hdd password, and forgot to write it under the keyboard=
 ;-) , so
I need to reinstall.
What is the difference. Computers should do what the user wants them to=
 do,
and when they break it is the fault of the user who ordered them to fai=
l.

So please add a kernel boot option to just go against this if-statement=
,
so only a warning is printed into the log but IOMMMU is not disabled:if=
 ( rev =3D=3D 0x13 && device =3D=3D 0x342e8086 ) 
{
if (force=5F5520=5FC2=3D=3D1)
{
printk(XENLOG=5FWARNING VTDPREFIX "NOT Disabling IOMMU as you requested=
 force=5F5520=5FC2=3D1 and ignoring Intel 5500/5520/X58 Chipset errata =
#47, #53\n"); 
}
else
{
printk(XENLOG=5FWARNING VTDPREFIX
"Disabling IOMMU due to Intel 5500/5520/X58 Chipset errata #47, #53\n")=
;
iommu=5Fenable =3D 0;
break; 
}
}

Cheers,

luja


Am Dienstag, Juli 27, 2021 14:21 CEST, schrieb Andrew Cooper <andrew.co=
oper3@citrix.com>:
=C2=A0On 25/07/2021 14:55, Marek Marczykowski-G=C3=B3recki wrote:
> On Sun, Jul 25, 2021 at 02:31:17PM +0200, luja wrote:
>> This Z600 is equipped with 0B54h mainboard as can be seen with dmi-d=
ecode.
>>
>> The manual states that 0B54h mainboard has the "newer C2 stepping",
>> so it is *not* affected by Intel "spec update" (nota bene: Intel upd=
ates the
>> spec, others report erratas) bugs =C2=A0
> The code above checks for rev 0x13, and the spec (page 11) clearly sa=
ys that rev
> 0x13 is stepping B-3. Stepping C-2 is rev 0x22. So, if this check
> triggers for you, I'm afraid you have the affected chipset.

The ID in hardware is the authoritative information.=C2=A0 Sounds like =
the
Z600 manual is wrong.

>> So the way Xen detects the "bug" (pci rev 13) is not sufficient, as =
my Z600
>> shows pci rev13 with lspci but 0xB54h (board rev only on Z600) with =
dmidecode
>> I would suggest first to have an override xen kernel boot option to =
disable the disablement in this code section. Or just patch this part o=
ut of the Xen code and rebuild xen. If this stuff really crashes, one w=
ill see it.
> Patching it out is out of the question, this check if there for a
> reason.

Using interrupt remapping on these systems does cause it to cease
functioning.

>> So please build a new xen without this stupid disablement or please =
add an override boot command for it.
>>
>> Please see the attached upgrade manual of Z600 and the errata "spec =
update" by Intel.
>> You see that the C2 stepping is not affected by the bugs refered to =
in the xen code,
>> so removing that section or adding better detection of the mask revi=
sion (B3 vs. C2)=C2=A0 of 5520 host bridge would allow=C2=A0 many users=
 to operate Qubes4.
> Maybe someone else has an alternative idea?

The logic in Xen is broken.=C2=A0 I've tried fixing it before for XenSe=
rver,
but was objected to, and the patch is still in the patchqueue.

The errata is with the Queued Invalidation, which (in Xen) is tied to
interrupt remapping.=C2=A0 The rest of the IOMMU works fine.

The current status quo is that if Xen boots with an Intel gen1 IOMMU, i=
t
will be happy with DMA remapping but no IRQ remapping.=C2=A0 If Xen boo=
ts on
this specific buggy system, it will turn the entire IOMMU off in
protest, which leaves the system less secure than booting on the
previous generation of hardware.

The correct behaviour is to just disable interrupt remapping in this
case, which brings Xen's behaviour in line with adjacent generations of=

hardware.

~Andrew
=C2=A0


=C2=A0

------=_=-_OpenGroupware_org_NGMime-67-1627396619.108475-62------
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Length: 6887

<html>Hi all,<br /><br />No, the correct behavior is to just use the ho=
st bridge as it is correct and works!<br />Just the PCI config space is=
 done wrongly in the board's BIOS?<br /><br />To get the truth...<br />=
I disassembled the cooler, cleaned the "phase change" wax from it,<br /=
>photographed the laser engraving of the flip chip die and compared<br =
/>the text with the errata "spec update" by Intel.<br /><br />According=
 to the laser marking and the errata the chip is a 5520 with C2<br />st=
epping. As it has an SLH3P marking on its die. I made a photo of it,<br=
 />which is available on request.<br />The errata sheet refers it to C2=
 stepping and states it supports Intel<br />Trusted Execution TXT. This=
 is on page 11 (3rd line of table) of said intel errata.<br />https://w=
ww.intel.com/content/dam/www/public/us/en/documents/specification-updat=
es/5520-and-5500-chipset-ioh-specification-update.pdf<br /><br /><br />=
So both Chipset errata #47, #53 mentioned in the code snippet<br />disa=
bling the Vt-d feature, are not present in this hardware, so the Host b=
ridge should&nbsp;<br />be kosher.<br /><br />For some wired reason the=
 PCI rev is 13.<br />I guess, that the ID is written by the bios using<=
br />pci config cycles at early boot into registers of the host bridge =
to<br />be then displayed using tools like lspci.<br />Page 11 of the e=
rrata:<br />"<span style=3D"left: 241.701px; top: 540.508px; font-size:=
 11.6px; font-family: sans-serif; transform: scaleX(1.05207);" role=3D"=
presentation" dir=3D"ltr">3.</span><span style=3D"left: 253.343px; top:=
 540.508px; font-size: 11.6px; font-family: sans-serif;" role=3D"presen=
tation" dir=3D"ltr"> </span><span style=3D"left: 291.723px; top: 540.50=
8px; font-size: 11.6px; font-family: sans-serif; transform: scaleX(1.00=
527);" role=3D"presentation" dir=3D"ltr">The Revision Number correspond=
s to bits 7:0 of the Revision ID Register located at offset 08h in the =
PCI </span><br role=3D"presentation" /><span style=3D"left: 291.7px; to=
p: 553.908px; font-size: 11.6px; font-family: sans-serif; transform: sc=
aleX(1.00292);" role=3D"presentation" dir=3D"ltr">function 0 configurat=
ion space<br />"</span><br /><br />But in general:<br />This is not Win=
dows, so I would expect a kernel boot option<br />to just say "I ignore=
 your warning, and when a black hole forms in my mainboard<br />it is m=
y fault" so force=5F5520=5FC2=3D1 or something like this should be appr=
opriate.<br />So a small readme would advise the people who are affecte=
d by a fleaky implementation<br />of C2 Hostbridge to give it a try! So=
 what should happen?!<br />Loose all your data on a freshly installed q=
ubes-os?!<br />Oh, I forgot my hdd password, and forgot to write it und=
er the keyboard ;-) , so<br />I need to reinstall.<br />What is the dif=
ference. Computers should do what the user wants them to do,<br />and w=
hen they break it is the fault of the user who ordered them to fail.<br=
 /><br />So please add a kernel boot option to just go against this if-=
statement,<br />so only a warning is printed into the log but IOMMMU is=
 not disabled:<pre class=3D"k9mail">if ( rev =3D=3D 0x13 &amp;&amp; dev=
ice =3D=3D 0x342e8086 ) 
{
if (force=5F5520=5FC2=3D=3D1)
{
printk(XENLOG=5FWARNING VTDPREFIX "NOT Disabling IOMMU as you requested=
 force=5F5520=5FC2=3D1 and ignoring Intel 5500/5520/X58 Chipset errata =
#47, #53\n"); 
}
else
{
printk(XENLOG=5FWARNING VTDPREFIX
"Disabling IOMMU due to Intel 5500/5520/X58 Chipset errata #47, #53\n")=
;
iommu=5Fenable =3D 0;
break; 
}
}</pre><br /><br />Cheers,<br /><br />luja<br /><br /><br />Am Dienstag=
, Juli 27, 2021 14:21 CEST, schrieb Andrew Cooper &lt;andrew.cooper3@ci=
trix.com&gt;:<br />&nbsp;<blockquote type=3D"cite" cite=3D"b5cce847-730=
4-d80c-66e2-a579763ea7fa@citrix.com">On 25/07/2021 14:55, Marek Marczyk=
owski-G=C3=B3recki wrote:<br />&gt; On Sun, Jul 25, 2021 at 02:31:17PM =
+0200, luja wrote:<br />&gt;&gt; This Z600 is equipped with 0B54h mainb=
oard as can be seen with dmi-decode.<br />&gt;&gt;<br />&gt;&gt; The ma=
nual states that 0B54h mainboard has the "newer C2 stepping",<br />&gt;=
&gt; so it is *not* affected by Intel "spec update" (nota bene: Intel u=
pdates the<br />&gt;&gt; spec, others report erratas) bugs &nbsp;<br />=
&gt; The code above checks for rev 0x13, and the spec (page 11) clearly=
 says that rev<br />&gt; 0x13 is stepping B-3. Stepping C-2 is rev 0x22=
. So, if this check<br />&gt; triggers for you, I'm afraid you have the=
 affected chipset.<br /><br />The ID in hardware is the authoritative i=
nformation.&nbsp; Sounds like the<br />Z600 manual is wrong.<br /><br /=
>&gt;&gt; So the way Xen detects the "bug" (pci rev 13) is not sufficie=
nt, as my Z600<br />&gt;&gt; shows pci rev13 with lspci but 0xB54h (boa=
rd rev only on Z600) with dmidecode<br />&gt;&gt; I would suggest first=
 to have an override xen kernel boot option to disable the disablement =
in this code section. Or just patch this part out of the Xen code and r=
ebuild xen. If this stuff really crashes, one will see it.<br />&gt; Pa=
tching it out is out of the question, this check if there for a<br />&g=
t; reason.<br /><br />Using interrupt remapping on these systems does c=
ause it to cease<br />functioning.<br /><br />&gt;&gt; So please build =
a new xen without this stupid disablement or please add an override boo=
t command for it.<br />&gt;&gt;<br />&gt;&gt; Please see the attached u=
pgrade manual of Z600 and the errata "spec update" by Intel.<br />&gt;&=
gt; You see that the C2 stepping is not affected by the bugs refered to=
 in the xen code,<br />&gt;&gt; so removing that section or adding bett=
er detection of the mask revision (B3 vs. C2)&nbsp; of 5520 host bridge=
 would allow&nbsp; many users to operate Qubes4.<br />&gt; Maybe someon=
e else has an alternative idea?<br /><br />The logic in Xen is broken.&=
nbsp; I've tried fixing it before for XenServer,<br />but was objected =
to, and the patch is still in the patchqueue.<br /><br />The errata is =
with the Queued Invalidation, which (in Xen) is tied to<br />interrupt =
remapping.&nbsp; The rest of the IOMMU works fine.<br /><br />The curre=
nt status quo is that if Xen boots with an Intel gen1 IOMMU, it<br />wi=
ll be happy with DMA remapping but no IRQ remapping.&nbsp; If Xen boots=
 on<br />this specific buggy system, it will turn the entire IOMMU off =
in<br />protest, which leaves the system less secure than booting on th=
e<br />previous generation of hardware.<br /><br />The correct behaviou=
r is to just disable interrupt remapping in this<br />case, which bring=
s Xen's behaviour in line with adjacent generations of<br />hardware.<b=
r /><br />~Andrew<br />&nbsp;</blockquote><br /><br /><br />&nbsp;</htm=
l>

------=_=-_OpenGroupware_org_NGMime-67-1627396619.108475-62--------



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 15:29:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 15:29:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161242.296071 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8P1U-00053j-FB; Tue, 27 Jul 2021 15:29:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161242.296071; Tue, 27 Jul 2021 15:29:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8P1U-00053c-C7; Tue, 27 Jul 2021 15:29:36 +0000
Received: by outflank-mailman (input) for mailman id 161242;
 Tue, 27 Jul 2021 15:29:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=R9+o=MT=invisiblethingslab.com=marmarek@srs-us1.protection.inumbo.net>)
 id 1m8P1T-00053W-Jt
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 15:29:35 +0000
Received: from out2-smtp.messagingengine.com (unknown [66.111.4.26])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 706f7ade-eeef-11eb-970d-12813bfff9fa;
 Tue, 27 Jul 2021 15:29:31 +0000 (UTC)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
 by mailout.nyi.internal (Postfix) with ESMTP id 4E34F5C01A0;
 Tue, 27 Jul 2021 11:29:31 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163])
 by compute6.internal (MEProxy); Tue, 27 Jul 2021 11:29:31 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 27 Jul 2021 11:29:30 -0400 (EDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 706f7ade-eeef-11eb-970d-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-type:date:from:in-reply-to
	:message-id:mime-version:references:subject:to:x-me-proxy
	:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=N4gzOZ
	bo8wFoTf8pRZoe2SsD9NWuOiXRnS4UcOVoslU=; b=tYbc3G9IqLJ8lBo6rVx0DE
	mFaaJEChw/vtu2IoiROElLA6Zpr1IKAhNbp1yq2ZiBf2dq/XszZe/RcOXa+x6KWF
	RczKwqmZEKXwtvtf/JifJ65vqfn7ShpmeTSu2nP0ELawN/urPQY9Kt54f9cp0prP
	offQflbFGBVymTHhJER0da4NayofOpTO9ujuILyBN0smDZ/rl2pjS5sEmQN7J84Y
	kjsZ2NW2ERfuSboLo62QTXekrRYZPjhlcBuLwz/yid3xcuhvO7xmv2D5axKn4jEA
	gxx+sKzcBvZ237tZ8pzzmVn1bv35pH9o/xdxpXyfofhkeFyVZH/QKeJwqQdHPtkA
	==
X-ME-Sender: <xms:WiYAYd7SdNx6Al-F7LZD1-iZXUSoiPHF__MzCAY7_y9C7uz7u0gyTQ>
    <xme:WiYAYa5YzwNPAbr6bx9_rC1lTC4uCOCCUxzahlEE4VJpV57jpcm24h4RU3zK7lvPw
    weIz76ATPzZLg>
X-ME-Received: <xmr:WiYAYUduvYQioxtZXqwOf7gx5aNzS50aZbeOfSdVlgeIAsD95nUXy781OCBvkRom9ajop-4E3pEymEQourxAZhbWvRbPhLUc>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrgeejgdekgecutefuodetggdotefrodftvf
    curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
    uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
    fjughrpeffhffvuffkfhggtggujgesghdtreertddtjeenucfhrhhomhepofgrrhgvkhcu
    ofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuceomhgrrhhmrghrvghksehinhhvih
    hsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecuggftrfgrthhtvghrnhepteevffei
    gffhkefhgfegfeffhfegveeikeettdfhheevieehieeitddugeefteffnecuvehluhhsth
    gvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghksehi
    nhhvihhsihgslhgvthhhihhnghhslhgrsgdrtghomh
X-ME-Proxy: <xmx:WiYAYWIqEzYVTiYiUPnfKmR3b1VIbH_cC-0v8gyql6SRNo4PiKlNhA>
    <xmx:WiYAYRLc2IhCzHwOWrpV16SX7D6AQyQ1KSIPF4fqSg7tb6aXR4D9dA>
    <xmx:WiYAYfx7jBcaJsMjXeOKLtuOCQDVQWm7mGuD3bA2uC0uuHZzVIpD0Q>
    <xmx:WyYAYTxtefVKK0oDdjfJRiHKkHjZ0Y8fM9NJmoqDiA-cEDFst5Ajpw>
Date: Tue, 27 Jul 2021 17:29:24 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Ian Jackson <iwj@xenproject.org>
Cc: xen-devel@lists.xenproject.org, Wei Liu <wl@xen.org>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path
Message-ID: <YQAmVs+hOSr22M69@mail-itl>
References: <20210602033206.720860-1-marmarek@invisiblethingslab.com>
 <24832.4209.469293.942341@mariner.uk.xensource.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="XjXH3CRnpRDmd6tX"
Content-Disposition: inline
In-Reply-To: <24832.4209.469293.942341@mariner.uk.xensource.com>


--XjXH3CRnpRDmd6tX
Content-Type: text/plain; protected-headers=v1; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Date: Tue, 27 Jul 2021 17:29:24 +0200
From: Marek =?utf-8?Q?Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>
To: Ian Jackson <iwj@xenproject.org>
Cc: xen-devel@lists.xenproject.org, Wei Liu <wl@xen.org>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path

On Tue, Jul 27, 2021 at 02:56:01PM +0100, Ian Jackson wrote:
> Marek Marczykowski-G=C3=B3recki writes ("[PATCH] autoconf: fix handling a=
bsolute $PYTHON path"):
> > Don't strip full path from $PYTHON variable. This is especially
> > relevant, if it points outside of $PATH. This is the case
> > for RPM build on CentOS 8 (%{python3} macro points at
> > /usr/libexec/platform-python).
> >=20
> > For this reason, adjust also python-config handling - AC_PATH_PROG
> > doesn't work on already absolute path, so make it conditional.
>=20
> Sorry for the delay replying and thanks for trying to improve this
> area.
>=20
> > -AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> > +AS_IF([echo "$PYTHON" | grep -q "^/"], [
> > +    pyconfig=3D"$PYTHON-config"
> > +], [
> > +    AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> > +])
>=20
> I'm not sure this logic is right.  I haven't looked at this area in
> detail but it seems confusing to me.  I don't quite understand why the
> preexisting code calls AC_CHECK_PROG followed by AC_PATH_PROG.

I think it tires to get absolute path into $PYTHON, also in case it was
autodetected (the AC_CHECK_PROGS call). Which I think it another place
that is too magic (see below). I'll try to simplify it further.

> I also don't understand why we ever need an absolute path for
> $PYTHON-config.  Why don't we just rely on PATH lookups when in invoke
> it ?

This is a good question. I tried to preserve AC_PATH_PROG to keep
existence check there, but that's rather misused.

> > --- a/tools/configure.ac
> > +++ b/tools/configure.ac
> > @@ -368,7 +368,6 @@ AS_IF([test -z "$PYTHON"], [AC_CHECK_PROGS([PYTHON]=
, [python3 python python2], e
> >  AS_IF([test "$PYTHON" =3D "err"], [AC_MSG_ERROR([No python interpreter=
 found])])
> >  AS_IF([echo "$PYTHON" | grep -q "^/"], [], [AC_PATH_PROG([PYTHON], [$P=
YTHON])])
> >  PYTHONPATH=3D$PYTHON
> > -PYTHON=3D`basename $PYTHONPATH`
>=20
> I'm not sure this is right.  I think we sometimes try to look at
> PTYHON to see if we should be doing python-3-like things or
> python-2-like things, and maybe that logic depends on PYTHON just
> being the basename.

If that's the case, those should be fixed too. PYTHON variable can
accept way more possibilities than just "python" and "python3". And
furthermore "python", depending on distribution, may point at python2 or
python3.
That said, few test builds work with this change, so it's unlikely
something important relies on PYTHON being just the basename.

BTW, are patches sent to xen-devel automatically built on gitlab-ci now?
How can I find such test build results?

> Contrary to what I said about leaving $PYTHON-config unresolved and
> expecting it to be looked up at the time of use, maybe the right fix
> is simply to change python_devel.m4 to use $PYTHONPATH-config instead.

Actually, the only place that needs full path to python, is filling
shebang. Everything else can rely on $PATH and use whatever is given in
$PYTHON (either absolute or just the basename). Especially, there is no
place that needs absolute python-config path, if $PYTHON points just at
the base name.

> Also using echo | grep -q ^/ seems poor style when case is available.
> I think we can rely on case.  But I see that's in the old code
> already.

Yes, I've copied it from there. autoconf macros are not my strong
side...

--=20
Best Regards,
Marek Marczykowski-G=C3=B3recki
Invisible Things Lab

--XjXH3CRnpRDmd6tX
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEhrpukzGPukRmQqkK24/THMrX1ywFAmEAJlYACgkQ24/THMrX
1yz3Xgf/ftUWzJE9Pd+IsuNYwNryXepClK3QJRj0KQ7NZ6JZCEJcuRrZx3NBZ3Gj
/pslavS3SQxnf8HgjOCweZDsqCx/7r1kqRO+X2XLJ+pb4sD5mco4OZvb5SFpKud1
h8o07Wk0TjA0Ly1GEU/CAR5fMyhW8i/nt283Pq+8ZkesLS9aEE4Op7nHiI3d4Nfs
SYFcR+UBAf2c9U2b4Z3wzRfo0Mlp2dZKZg08te77re7tcmgbX4Ya10oTMzt20LKd
ON46twIG1SV1z889XTMGdsAIdso20lAiQqe3LXGMUG7BIzCpeDjQFHXoWmq50nhp
21RM/ePfsf39CmfnX1D/ERQCxteOpw==
=n/u6
-----END PGP SIGNATURE-----

--XjXH3CRnpRDmd6tX--


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 15:36:38 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 15:36:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161249.296083 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8P8E-0006VV-By; Tue, 27 Jul 2021 15:36:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161249.296083; Tue, 27 Jul 2021 15:36:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8P8E-0006VO-8P; Tue, 27 Jul 2021 15:36:34 +0000
Received: by outflank-mailman (input) for mailman id 161249;
 Tue, 27 Jul 2021 15:36:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ggmi=MT=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8P8C-0006VI-Uk
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 15:36:33 +0000
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 090cf80d-eb63-4c05-9933-5d5d3347bf71;
 Tue, 27 Jul 2021 15:36:31 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 090cf80d-eb63-4c05-9933-5d5d3347bf71
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627400191;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=nFxbkUTa9A71OnUtvE6nFXStqtOsCoTlCU/zMOS9bOw=;
  b=Spa7oxI8UHsXQ1t48yAY90rhn8/WXceb+KsgaXCS6vorqo2HXDTZM1M1
   hr6tmIBrr9OeTRxx90VcFDGvAUo2hR4gaZFcsfRegT6fNAQravxXzggWv
   X0k1+zwTD5kzlNDWVq9b/fwj9vKoMO3I7zZQroe4jKL8r79JlK5jzKlut
   Y=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: f6gDmo4t6EAYk11o5yg2ktuNNAj7P3FkhiJoG3KZI7WIeAIS869NGujej7SQ6/I7oNoJ4ZGuIW
 BCG46qOSG/AGkWwQVF8fwTEKuEfveaqKos3sQcfdVaR0MgGhCpopQ/pIU0zy4Ecvd6mlg/A6K4
 fqk1QrbPGPgYQ8AOze4w6ZBx0I3sZ2/8xI3L81iCgNqIgt4cggVH8GpdmYpf594BbGtNNeFY95
 a/pK68IQ9OGK2xZwRVQJUU3CycslvoHOIPlAPsGZAxVuP9S+rXTh+YCdBH//xdnFrxdA7N1vdA
 TcvMvrTEYFtCr3boXzYVebXz
X-SBRS: 5.1
X-MesageID: 48865990
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:rDKqoqlV6pKfTuAGaVx7bqmeCW7pDfLW3DAbv31ZSRFFG/Fw9/
 rCoB3U73/JYVcqKRUdcLW7UpVoLkmyyXcY2+cs1NSZLWzbUQmTXeJfBOLZqlWNJ8SXzIVgPM
 xbAspD4bPLbGSTjazBkXSF+9RL+qj6zEh/792usEuETmtRGt9dBx8SMHf9LqXvLjM2fqbQEv
 Cnl6x6jgvlQ1s7ROKhCEIIWuDSzue77q4PMXY9dmcaABDlt0LR1ILH
X-IronPort-AV: E=Sophos;i="5.84,274,1620705600"; 
   d="scan'208";a="48865990"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GxiprzpdLw8srKqonGTAkDebSjD7gqs7SzH/Tc8yRZePVJR6RiqEOhjTVkBFLBSzO76c0MM/DWeG1SpQLkjlwf8r8leF+S4Wja6zt3c6c1xw5TAmquBscm2/1SIl9UUOuO2Gw8EtdC4pw4DdBHF2IWg7kwcDRY+FEG7YjpaUB8LvqiwbN+dk4Wo7tw6/XVNvwUoGAqS89zpvi1E3GmqkwXB0OesaTIPJUqe8JsD+aShZK8PrTiPG140RD74H5othprpH6PsC1YxlOdUREA6v8MqAsylLzs/R5LEsVOOhiANgDjlVAvFCxVFenDnygkErBsQvRWng9sZU+2JgzfnE7Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nFxbkUTa9A71OnUtvE6nFXStqtOsCoTlCU/zMOS9bOw=;
 b=dMJ+Pk4rvNq52Veaa8UziPepHKV91BH/DO/dCq8HCmVffTHTRsPiKbayEW6YwaPRmsHtGbXYvCpqb6pK1qUJ/89AAOWMys6x6id0Z+nE8skjQnCQXqPQt9MkrJwlbvsoqlBQgghZZsyVO6o5t/4tknH2Ht8Un5gXraY7lXF8+T1NFYFaL3ofhIfaN4DadaEpuBacd61ivN2t7h6xpxwHH2FRS0qA7cSc4SxOOBkJ02pfHCty2bdAIyetPHxObupOKL3LS3H1hNQiuKOEJs7yhM0tsZ153fmenSKSPXPLZ2p3NrUdBA06V6KRE7A10LtTM1e2ADd8pI+vvQ3qGmPYSw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nFxbkUTa9A71OnUtvE6nFXStqtOsCoTlCU/zMOS9bOw=;
 b=mIBoAprksQPN11dFST7PjX9t56+PQT/V9y+ha1XD7I5H4vFPzJ4qC82ku4AMFBLkwQ4YabE0109PVpZdvv63gvA90jV9+W4N3PPN52IWKsXyvyTMW+JWsvFc4lTAMnOMuQRhJ9rTesFZwj6UkYyalQoNh/rvv0VIZkUCR2+mUgk=
To: luja <luja@openhardware.de>
CC: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, xen-devel <xen-devel@lists.xenproject.org>
References: <43-61001a00-75-6ab37100@54781652>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: Xen-Error: Disabling IOMMU on Stepping C2 5520 Host-Bridge //
 SLH3P marking on die
Message-ID: <a9ee4587-8fbc-495e-98d8-77a07988cec2@citrix.com>
Date: Tue, 27 Jul 2021 16:36:18 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <43-61001a00-75-6ab37100@54781652>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO2P123CA0002.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:a6::14) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 1db6f2a7-ecb2-4f35-ae89-08d951144a8a
X-MS-TrafficTypeDiagnostic: BYAPR03MB3432:
X-Microsoft-Antispam-PRVS: <BYAPR03MB343263965BA248ECEC198AE0BAE99@BYAPR03MB3432.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3968;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: LtTrBo7Tp4DLyC8Jd3h4wuicKFbAmnU42IhU1kmoDdZybgBRQ+RxeSdaa/8awzjWBcMsQyBWUuIGQppbyIc5eycU4rGQBZzHTUK6EZGpjKbng+UFgTE+PPmNa2JvXR7CGjHpnuJOf/nA23dpkzklKIWk9j1gT0UdHIXiWbD2ERqT98a4qo1EzbAduNU4hk/IwgJPZTHyx/+91f7/y5z+wLaQ4mTi3ixkJtnSgyQbPZG+54bFDXeQ8tIiEYncw0Pfwx9lI2LJ7a8zV8aXw0sZFxTqJf93FRYel+nw2cdgy60BhYEX7kGkh74yEMotjjyuz+iyEo95YTNujviyjqMNwZeSpl+FS+he3Gps2cCpV17VPIqMUCCMdkm8QFBuxSiQmrdKoCdnyR+wJiRxX2xywN4F7idFSU3Y/mjAAHf4SOZzLIh7cyAH074I+p6/bHUto5julkMnG893s+jOGEpqX5PUDz6EDCEVPfmiab+lgskmpvGJkSXs3xjrlSdhUyKKnJXTOdEjnLnspuuMzKHGdbxhsziBqo8mieGEjW14uCuMWC3YMO07JRM+hKgCLr/NYh2uEEU0vVXHjCuumdYX+P5P5Rylj9G59je8W/XqO7ixKHYpxhOTa37bnFwraLmI8HPMx2WRcQa7x9oBiWzYnAfEybOreZjoj7LeFz9Hvkdk49VKVClK0pofQM+k5OHHCwanRVKTejWsBW3w04G/AAYuTZ4xwX+wMQygIcSlltpCwgQfpUul7mfb5MVXgay3Gr9WGIJWV2rsMFuN+WenaYxqTsy2W4A8mhZySWTtCoC93TXgi8eB0av6DL7PYMFD6/EyFK7w2VsZNTQV14FdYA==
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(8676002)(6666004)(2906002)(2616005)(5660300002)(8936002)(86362001)(83380400001)(966005)(4326008)(31696002)(316002)(186003)(508600001)(54906003)(956004)(66946007)(16576012)(66476007)(66556008)(31686004)(53546011)(6916009)(38100700002)(6486002)(36756003)(26005)(32563001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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/cZ?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 1db6f2a7-ecb2-4f35-ae89-08d951144a8a
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 15:36:24.6781
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ETcBSs/dCn4s4cJVX1LU47lzkB/KMxG4/7FsIODLi87iKdFIAgwM79FIWv994YxVAgkaDBi//VO4ovkMs9oYn4NTD7saHAlf9+FxI1aX1D8=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB3432
X-OriginatorOrg: citrix.com

On 27/07/2021 15:36, luja wrote:
> Hi all,
>
> No, the correct behavior is to just use the host bridge as it is
> correct and works!

What evidence do you have of this claim?

Have you actually deleted the workaround, and confirmed that Xen works
fully and correctly on this hardware?=C2=A0 If not, that is your next task.

> Just the PCI config space is done wrongly in the board's BIOS?

These details are typically hard wired.

>
> To get the truth...
> I disassembled the cooler, cleaned the "phase change" wax from it,
> photographed the laser engraving of the flip chip die and compared
> the text with the errata "spec update" by Intel.
>
> According to the laser marking and the errata the chip is a 5520 with C2
> stepping. As it has an SLH3P marking on its die. I made a photo of it,
> which is available on request.
> The errata sheet refers it to C2 stepping and states it supports Intel
> Trusted Execution TXT. This is on page 11 (3rd line of table) of said
> intel errata.
> https://www.intel.com/content/dam/www/public/us/en/documents/specificatio=
n-updates/5520-and-5500-chipset-ioh-specification-update.pdf

I'm afraid that this doesn't prove anything.

Topmarking fraud sadly exists.=C2=A0=C2=A0 A famous example is the overcloc=
king
multiplier which used to be an external pin to chips, and no longer is
because the cheaper slower CPUs had their topmarkings forged and sold as
expensive faster ones.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 15:48:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 15:48:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161255.296094 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8PJX-0007wg-Ek; Tue, 27 Jul 2021 15:48:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161255.296094; Tue, 27 Jul 2021 15:48:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8PJX-0007wZ-Bg; Tue, 27 Jul 2021 15:48:15 +0000
Received: by outflank-mailman (input) for mailman id 161255;
 Tue, 27 Jul 2021 15:48:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=Ggmi=MT=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8PJV-0007wT-KR
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 15:48:13 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0c0831aa-eef2-11eb-9716-12813bfff9fa;
 Tue, 27 Jul 2021 15:48:12 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0c0831aa-eef2-11eb-9716-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627400892;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=9AhnYcJcNq6FdM8YaKiNtgmPSs06JTGgeEDhDychnDM=;
  b=NlwzErRhtoCrb5r2PRkmNyD3G74czqsw4Mupauo2Zug3+e55K4kRBWg9
   D52WPawNycCL9V0QvYUzx0dTTmFQIap667hKVuDnkTD1repEmop+4prY0
   sZRWAuHqlTtPFV8cZgXWhJ6bxcERry4jT7mZVgvWWUsf0fWbcIml4QKXu
   w=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: XMP+0AnV5lAxh8h+sgpp10kZCQx9u+kStd066bprAU3yeVS2cMrlk04AYW43arBaJiJAsD6Ubp
 OABO/EQtpC3RgiclMIy9TQov7UoFEsaBxxd+n1vmSwZQM3FOj3Q8THjft2pkIOWUGhw/mc+dHq
 ThjCfhORvYOOtxUyt7xzsX7MxW2I/9xeGOhT08mYu21oyP/XE+pypx+ukCWD/EkBhwgdt6op+b
 arl3o/MOb1Szg8eA6HueZeAQyKotWqiKDnHf7AHl6w+gTTQYRbKNlX8iVJEWWjncMgB4KngD8u
 /BpoUGNjNOUmpm5cT8lHsSTL
X-SBRS: 5.1
X-MesageID: 49202137
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:eFLuqK2X6MGxhTv+xppFaAqjBTtyeYIsimQD101hICG9Lfb3qy
 n+ppsmPEHP5Ar5OEtBpTiBUJPwJU80hqQFn7X5Wo3SIzUO2VHYUL2KiLGC/9SOIVyEygcw79
 YHT0E6MqyMMbEYt7eI3ODbKadZ/DDvysnB7o2yvhQdL3AeV0gj1XYfNu/yKDwHeOAsP+tBKH
 Pz3Lsjm9PtQwVsUiztbUN1LtQr6ue7267OUFojPVoK+QOOhTSn5PrTFAWZ5A4XV3dqza05+W
 bIvgTl7uH72svLiyP05iv21dB7idHhwtxMCIiljdUUECzljkKNaJ56U7OPkTgpqKWE6Uoskv
 PLvxA8Vv4DpU/5TyWQm1/AygPg2DEh5zvLzkKZu2LqpYjDSDczG6N69MhkWyqcz3BlkMB30a
 pN0W7cnYFQFwn8kCP04MWNfw12l2KvyEBS09I7vjh6a88zebVRpYsQ8Ad+C5EbBh/374ghDa
 1HENzc3vBLalmXBkqp/VWH+ObcGkjbIy32BXTr4qeuon5rdTFCvgslLfUk7zI9HMlXcegc2w
 ysWZ4Y5o2nTactHOlA7ak6MJOK41f2MGXx2VSpUBza/ZE8SgbwQqHMkcMIDcGRCdE1JcgJ6d
 j8uG0xjx96R6upM7zU4KF2
X-IronPort-AV: E=Sophos;i="5.84,274,1620705600"; 
   d="scan'208";a="49202137"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kh3Ygx/iydf5b2LoGAY1Fh8OzrvN+B7p3oOsX7NOpVO4vNzRh5EDkWM8gp2ujxC4ZqussBfYhwzZSgmPf5FfDvoTgPoaZBssiMK+uPi6tCbTiL1ZbSTRIjFPNER7D6502ic5bbXWCW1PqM5N3QZN5930ybIJUie6PU0Pn9J1pPFeVthWMxtyvkLhnRO9GZpdLrB3mg6wXOnDtkVHPBd3WJaIR+beMD/WowqTo07V86aJ1D8Jrjadfj9mNt3d6GCDA1NtEDrgTQCmehb29zJHOyoXAyoh40sOcuIUY9g+X0cLoup4ftbVWMj5q9H4+dVMXqc3aw1HcenulbFQuIja3Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9AhnYcJcNq6FdM8YaKiNtgmPSs06JTGgeEDhDychnDM=;
 b=oFiwWIH86Zp7onHpE9d09VYrIlzjoFyrCs4/riqr/5sQpBbFtxQjbBG/WtldH2IEKy0lQO6AA0Uj13LsyckeZG6uCtvX7KUKBTvt8qpnlMhrXaEXQqmApf6RcNajj/MSlPLdonLPFMKsv3d3n/lDS1JWZ3/cAS1LEuXrTlo/+xvs6VluFuyjYTt0qSsZWeKCII9YEt3bsC2lircrGlA1BjCuus12AyhxBxJoLQooExp5U1sgRAssWPFMP05YNc7dp5uf0Jwn8hn0AGUfHKDwBh1MBcCy2SjzPTlcJfMPIXUflhMohflx29ryVKykgXDX2BARFRzMdtSS0ItoNqtaJw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9AhnYcJcNq6FdM8YaKiNtgmPSs06JTGgeEDhDychnDM=;
 b=Lo0YwsRD3hM3gH/vaMEZQjuJasP3io1L9vrrkXgtnF7z/0REZTUP7FbOs3mxMHRUgKEC2umgwLKrQOExZvGNJsncVBuB0vyTL2/G3U3XerXgxU6d8awT+aOx30ZeKlX3mYH1bC8If2rJUCjqVlh+rWDWJLnHAirvjrGymz2YefA=
To: =?UTF-8?Q?Marek_Marczykowski-G=c3=b3recki?=
	<marmarek@invisiblethingslab.com>, Ian Jackson <iwj@xenproject.org>
CC: <xen-devel@lists.xenproject.org>, Wei Liu <wl@xen.org>
References: <20210602033206.720860-1-marmarek@invisiblethingslab.com>
 <24832.4209.469293.942341@mariner.uk.xensource.com>
 <YQAmVs+hOSr22M69@mail-itl>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path
Message-ID: <1fa02ecc-b873-1ad2-9f3f-9da881ac97ba@citrix.com>
Date: Tue, 27 Jul 2021 16:48:00 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <YQAmVs+hOSr22M69@mail-itl>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0322.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:197::21) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bd681c86-671e-4667-e4d1-08d95115ed69
X-MS-TrafficTypeDiagnostic: BY5PR03MB5078:
X-Microsoft-Antispam-PRVS: <BY5PR03MB50781A2370F46E3599357563BAE99@BY5PR03MB5078.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: CGAkvOCLpE11KUZ2eqFCPe/pRPhs076DurnQH2SP2iv7SYABxoAG86i0R4EZ9WlHwrTYp/qiMLCba5DsoP9XfkZrwLzzcsKdhBHwPvPuZddJ0K6i0rpSkivqnW3/QiLz4k7MOWOS1Vjjq60U8/KocUzCBbVkIzXCGxpwKHsEdWwChA5n/IywH2SqQ+8+7USvLH2qPDKq4RanYQGDpMOAQ0MPQJlV5TA4e8vedx4rkcEfFqZyXStlyNlJAGhEA467Z69s4f6S17fyrZ55H1rj/597UL4qn8EDBWrbfyUMiBaI0xktP5Ib4EaRS2hNAxOaxFKpm4gwRiEBmS2co4NxeajNF+dbLJwUDa5UHN6CMScqeX33aH/EBwCfgbaV2QRClr1cvihZqctmdzRjk4ioNbrlaPdtg/OStmMos8nVlRXz6ouvIexP+oWVZuqFxgJ0zoolQBhWwQ1AK8QU02P973x3Djirj+XihH7UuS6KQenQKDUy2vV+ykwI9kX+XLrtPlB1jGA/55LdvXGnaE28+ZGjXZXcdUC1W+PmLv1qvOtM9FLTyGtTfTqKr6erLrvnQh02aC3dSE54oaPe1YApQ6o0ir6zvQgnhAiRib6OV9UIbM3loiMlbpRDQgRY6B1cOEKeY/AdP35J/J6x3GzRxqpZpPeC6NOI5sQHFUBa1pUqDWVM/mPWDCf3jiJOF1c15eV9LlnBYJcWccvLAMpwUYqM4JCroV4slrozwKDMBDh+3k6uUkRUIqMITOOVXPFFWuQQ+Futpb9mpm3TNcLfzTIXiopGiSb6C7gquftRTZTaESlX9Nzx/xrT5h4Q4lA2mdmcYv7Pvjr/SiI5RPsF8QIFBE+L6kj+xSySXlVbG9M=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39860400002)(396003)(346002)(136003)(376002)(66946007)(66556008)(186003)(2616005)(966005)(66476007)(8936002)(53546011)(31686004)(6666004)(5660300002)(38100700002)(8676002)(86362001)(4326008)(16576012)(31696002)(478600001)(4744005)(956004)(316002)(36756003)(110136005)(6486002)(2906002)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: bd681c86-671e-4667-e4d1-08d95115ed69
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2021 15:48:07.1737
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: sMqkPChlAEZ/qpDLV1+zyL/soXCRg45e/JRrtFMaXy2+RWKh8j8vm6gXKGOWyl2BQHHCOfCqXm7GpJCGRMvLoc0eaGM9YA0h1nNHd0XWq2s=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5078
X-OriginatorOrg: citrix.com

On 27/07/2021 16:29, Marek Marczykowski-G=C3=B3recki wrote:
> On Tue, Jul 27, 2021 at 02:56:01PM +0100, Ian Jackson wrote:
>> Marek Marczykowski-G=C3=B3recki writes ("[PATCH] autoconf: fix handling =
absolute $PYTHON path"):
> BTW, are patches sent to xen-devel automatically built on gitlab-ci now?
> How can I find such test build results?

Emails still aren't being sent automatically yet.=C2=A0 CI is *still*
deterministically broken from the PV32 breakage, and intermittently from
an arm32 randconfig issue.

Everything:
https://gitlab.com/xen-project/patchew/xen/-/pipelines

Specific run for this patch:
https://gitlab.com/xen-project/patchew/xen/-/pipelines/313320712

Looks like it got hit by some of the networking errors which happened
around that time.

~Andrew



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 15:54:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 15:54:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161261.296106 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8PPZ-0000t8-4X; Tue, 27 Jul 2021 15:54:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161261.296106; Tue, 27 Jul 2021 15:54:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8PPZ-0000t1-1X; Tue, 27 Jul 2021 15:54:29 +0000
Received: by outflank-mailman (input) for mailman id 161261;
 Tue, 27 Jul 2021 15:54:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8PPX-0000sv-G3
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 15:54:27 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8PPX-0008So-Bq
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 15:54:27 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8PPX-0004Uv-As
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 15:54:27 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8PPU-000317-1Z; Tue, 27 Jul 2021 16:54:24 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=QfXVOGGz8gvxq4NUS2VpngTMTUooxp6LGj1PSobXVS0=; b=1wxHvKo04F92ccJ+v/83ld6Da9
	3L6Q1IygwCcCOJK/QbAU+PAvaC+g+IgsUT4zGbucBg6VHJxBXYuWhJ4c6/B+9d78Nj1Ob+batK3an
	lK0p+YAmC2ouDz5JpBJu24vZWWi3qPboVEPUI4TFslS6GLS+8hM8j2UKRLIHQLW7EZbY=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <24832.11311.830641.31267@mariner.uk.xensource.com>
Date: Tue, 27 Jul 2021 16:54:23 +0100
To: Marek =?iso-8859-1?Q?Marczykowski-G=F3recki?= <marmarek@invisiblethingslab.com>
Cc: xen-devel@lists.xenproject.org,
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH] autoconf: fix handling absolute $PYTHON path
In-Reply-To: <YQAmVs+hOSr22M69@mail-itl>
References: <20210602033206.720860-1-marmarek@invisiblethingslab.com>
	<24832.4209.469293.942341@mariner.uk.xensource.com>
	<YQAmVs+hOSr22M69@mail-itl>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Marek Marczykowski-Grecki writes ("Re: [PATCH] autoconf: fix handling absolute $PYTHON path"):
> On Tue, Jul 27, 2021 at 02:56:01PM +0100, Ian Jackson wrote:
> > I'm not sure this logic is right.  I haven't looked at this area in
> > detail but it seems confusing to me.  I don't quite understand why the
> > preexisting code calls AC_CHECK_PROG followed by AC_PATH_PROG.
> 
> I think it tires to get absolute path into $PYTHON, also in case it was
> autodetected (the AC_CHECK_PROGS call). Which I think it another place
> that is too magic (see below). I'll try to simplify it further.
> 
> > I also don't understand why we ever need an absolute path for
> > $PYTHON-config.  Why don't we just rely on PATH lookups when in invoke
> > it ?
> 
> This is a good question. I tried to preserve AC_PATH_PROG to keep
> existence check there, but that's rather misused.

The existence check is probably helpful to avoid a late failure.

> > > --- a/tools/configure.ac
> > > +++ b/tools/configure.ac
> > > @@ -368,7 +368,6 @@ AS_IF([test -z "$PYTHON"], [AC_CHECK_PROGS([PYTHON], [python3 python python2], e
> > >  AS_IF([test "$PYTHON" = "err"], [AC_MSG_ERROR([No python interpreter found])])
> > >  AS_IF([echo "$PYTHON" | grep -q "^/"], [], [AC_PATH_PROG([PYTHON], [$PYTHON])])
> > >  PYTHONPATH=$PYTHON
> > > -PYTHON=`basename $PYTHONPATH`
> > 
> > I'm not sure this is right.  I think we sometimes try to look at
> > PTYHON to see if we should be doing python-3-like things or
> > python-2-like things, and maybe that logic depends on PYTHON just
> > being the basename.

I remembered what I was thinking of and it isn't in xen.git, it's in a
personal project.  I grepped xen.git for PYTHON and python2 and
python3 and didn't find anything that behaves like I was suggesting.

> If that's the case, those should be fixed too. PYTHON variable can
> accept way more possibilities than just "python" and "python3". And
> furthermore "python", depending on distribution, may point at python2 or
> python3.
> That said, few test builds work with this change, so it's unlikely
> something important relies on PYTHON being just the basename.

I think we do, however, need to rely on it being suitable for having
`-config` appended, to find the dev build runes etc.

The last change to this area was by me in
  9caed751db9110c785fd6b1def89d808baa1d907
  tools/configure: Allow specifying python to be found from path

My previous self doesn't seem to have left any notes about why I felt
it necessary to still split the thing back into a "directory and
executable name".  Also that text is wrong since the directory does
not seem to be extracted at all.  I surmise that I just did that
because the existing code did it, and assumed that womething somewhere
else wanted it.

Perhaps this was some support for build arrangements which predate
python-config ?  Those are surely doomed by now.

> Actually, the only place that needs full path to python, is filling
> shebang. Everything else can rely on $PATH and use whatever is given in
> $PYTHON (either absolute or just the basename). Especially, there is no
> place that needs absolute python-config path, if $PYTHON points just at
> the base name.

Right.

Ian.


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 16:23:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 16:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161269.296118 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8Prv-0004Tn-EU; Tue, 27 Jul 2021 16:23:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161269.296118; Tue, 27 Jul 2021 16:23:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8Prv-0004Tg-BX; Tue, 27 Jul 2021 16:23:47 +0000
Received: by outflank-mailman (input) for mailman id 161269;
 Tue, 27 Jul 2021 16:23:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Prt-0004TW-Ut; Tue, 27 Jul 2021 16:23:45 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Prt-00010R-PI; Tue, 27 Jul 2021 16:23:45 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Prt-0004Ex-Ao; Tue, 27 Jul 2021 16:23:45 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8Prt-0000B7-A4; Tue, 27 Jul 2021 16:23:45 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=b01Ypy/Yywe6KpqdEIsd86RRPEGvySQpCv5pDXq5Iwo=; b=VuwD/YqJ+MyiQomL7DmV+twani
	0yUCefZxB4Lp0hdRm/kcPH0z/URfGo/hk/hzrAZ2Y277cByRGHa3s+4b9gxdxlWuYGxK/aa897PbY
	6oOGRJz0+9/7RNFnseEFJZ9Q9OQ0KH5qOdl2TqLEf7w7bPqv4dW+LUJfuRneggY83oDU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164007-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164007: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=73c932d0ea43ddf904db9429811788480c4cb816
X-Osstest-Versions-That:
    xen=73c932d0ea43ddf904db9429811788480c4cb816
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 16:23:45 +0000

flight 164007 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164007/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  73c932d0ea43ddf904db9429811788480c4cb816
baseline version:
 xen                  73c932d0ea43ddf904db9429811788480c4cb816

Last test of basis   164007  2021-07-27 06:42:49 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 18:48:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 18:48:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161293.296152 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8S7r-0001FA-K8; Tue, 27 Jul 2021 18:48:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161293.296152; Tue, 27 Jul 2021 18:48:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8S7r-0001F3-Gx; Tue, 27 Jul 2021 18:48:23 +0000
Received: by outflank-mailman (input) for mailman id 161293;
 Tue, 27 Jul 2021 18:48:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kulw=MT=citrix.com=Jane.Malalane@srs-us1.protection.inumbo.net>)
 id 1m8S7q-0001Ev-1c
 for xen-devel@lists.xenproject.org; Tue, 27 Jul 2021 18:48:22 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 35d2c630-ef0b-11eb-9735-12813bfff9fa;
 Tue, 27 Jul 2021 18:48:20 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 35d2c630-ef0b-11eb-9735-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627411699;
  h=from:to:cc:subject:date:message-id:mime-version;
  bh=0uULcV+VOG2f3fSXF9nenrrHsPs+JOUBv+40fwCjiTE=;
  b=Enq59gTUPuwdM1XdF35O8o1H2QLOaICvfB0fzSWv5eViuqUXD0d51gsJ
   KDaBW/a/veC/eWGNycPpflb1NP+KBVuj510oPy+pHq878UOF7zo1v2cPg
   Z3yW8+9tDv+oKs5tB3SeFIpMSNPfBsKokSZyF+fMhGPgVxEaKfHQ409px
   U=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: NHnH4aVTJR8qv93f14zQ1itk46UxNChB8DQjwevEBUyf+9C51KenV/yGjquRnHFNpaFq0OqE1R
 XLzA8CAOjQSynDP9D4WMd/5CHI83/ZYcpL7AsjUW1e7EHlmFKqlIDuEaCa5ve+slcv7RyiPrhV
 wg0Wgw108fs+xx5vv5f5YOfj8XREXaGzHoflr1r1fJTCkzRyAMKt4ZXYWlMS+RIJ7cJgd1us1H
 tnQMSNuLSwNdUwpPmkqtQ2Byi5+uPlafF1H9Pzn0BMKVy/bYymk89ClXjxhYLBVLDGI1HMWxe5
 OGOJAya32U20hqEt22F0ZTPf
X-SBRS: 5.1
X-MesageID: 50887287
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:iEMPOq2BGLfljuLkaLaGTAqjBLokLtp133Aq2lEZdPRUGvb4qy
 nOpoV86faaskdzZJhNo7+90cq7MBThHPxOkOss1N6ZNWGM0gbFEGgL1/qH/9SKIU3DH4Bmu5
 uIC5IObeHNMQ==
X-IronPort-AV: E=Sophos;i="5.84,274,1620705600"; 
   d="scan'208";a="50887287"
From: Jane Malalane <jane.malalane@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
CC: Jane Malalane <jane.malalane@citrix.com>, Andrew Cooper
	<andrew.cooper3@citrix.com>, George Dunlap <george.dunlap@citrix.com>, "Ian
 Jackson" <iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
Subject: [PATCH] xen/lib: Fix strcmp() and strncmp()
Date: Tue, 27 Jul 2021 19:47:15 +0100
Message-ID: <20210727184715.17699-1-jane.malalane@citrix.com>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Content-Type: text/plain

The C standard requires that each character be compared as unsigned
char. Xen's current behaviour compares as signed char, which changes
the answer when chars with a value greater than 0x7f are used.

Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Jane Malalane <jane.malalane@citrix.com>
---
CC: Andrew Cooper <andrew.cooper3@citrix.com>
CC: George Dunlap <george.dunlap@citrix.com>
CC: Ian Jackson <iwj@xenproject.org>
CC: Jan Beulich <jbeulich@suse.com>
CC: Julien Grall <julien@xen.org>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Wei Liu <wl@xen.org>
---
 xen/lib/strcmp.c  | 8 +++++---
 xen/lib/strncmp.c | 8 +++++---
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/xen/lib/strcmp.c b/xen/lib/strcmp.c
index 465f1c4191..f85c1e8741 100644
--- a/xen/lib/strcmp.c
+++ b/xen/lib/strcmp.c
@@ -11,14 +11,16 @@
  */
 int (strcmp)(const char *cs, const char *ct)
 {
-	register signed char __res;
+	unsigned char *csu = (unsigned char *)cs;
+	unsigned char *ctu = (unsigned char *)ct;
+	int res;
 
 	while (1) {
-		if ((__res = *cs - *ct++) != 0 || !*cs++)
+		if ((res = *csu - *ctu++) != 0 || !*csu++)
 			break;
 	}
 
-	return __res;
+	return res;
 }
 
 /*
diff --git a/xen/lib/strncmp.c b/xen/lib/strncmp.c
index 9af7fa1c99..1480f58c2e 100644
--- a/xen/lib/strncmp.c
+++ b/xen/lib/strncmp.c
@@ -12,15 +12,17 @@
  */
 int (strncmp)(const char *cs, const char *ct, size_t count)
 {
-	register signed char __res = 0;
+	unsigned char *csu = (unsigned char *)cs;
+	unsigned char *ctu = (unsigned char *)ct;
+	int res = 0;
 
 	while (count) {
-		if ((__res = *cs - *ct++) != 0 || !*cs++)
+		if ((res = *csu - *ctu++) != 0 || !*csu++)
 			break;
 		count--;
 	}
 
-	return __res;
+	return res;
 }
 
 /*
-- 
2.11.0



From xen-devel-bounces@lists.xenproject.org Tue Jul 27 18:57:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 18:57:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161299.296164 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8SGM-0002fC-Fc; Tue, 27 Jul 2021 18:57:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161299.296164; Tue, 27 Jul 2021 18:57:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8SGM-0002f5-CG; Tue, 27 Jul 2021 18:57:10 +0000
Received: by outflank-mailman (input) for mailman id 161299;
 Tue, 27 Jul 2021 18:57:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SGL-0002ev-Qo; Tue, 27 Jul 2021 18:57:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SGL-0003EG-IW; Tue, 27 Jul 2021 18:57:09 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SGL-0005FZ-An; Tue, 27 Jul 2021 18:57:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SGL-0003IU-AJ; Tue, 27 Jul 2021 18:57:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=FM69Hdj0sAfLN5Q+ZCDpFuV12KfVTSfKD2ZXD/F7eME=; b=a5s3e+Oa7D/Mes6M101qvhp3u6
	iajBvW+3zMx0J2XlgFbK5ea1ZsGav8Bz9aiOZY99taBdoX1GzsMHGbs5Vgcwxf7zTeZArgFgwktj6
	g9h39Nc1WRLAyzdbEc9p7i9Yci0ZfMobqhs0+uGzCd2elunwbxp7QmcExw/1ER0pnHZo=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164011-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 164011: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=0cdb4a5802bad51aa89f6b1f10014dd21c37228b
X-Osstest-Versions-That:
    xen=73c932d0ea43ddf904db9429811788480c4cb816
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 18:57:09 +0000

flight 164011 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164011/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  0cdb4a5802bad51aa89f6b1f10014dd21c37228b
baseline version:
 xen                  73c932d0ea43ddf904db9429811788480c4cb816

Last test of basis   163996  2021-07-26 12:02:53 Z    1 days
Testing same since   164011  2021-07-27 14:00:29 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alan Robinson <alan.robinson@fujitsu.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ian Jackson <iwj@xenproject.org>
  Scott Davis <scott.davis@starlab.io>
  Scott Davis <scottwd@gmail.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   73c932d0ea..0cdb4a5802  0cdb4a5802bad51aa89f6b1f10014dd21c37228b -> smoke


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 19:14:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 19:14:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161306.296179 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8SWs-0004vn-SS; Tue, 27 Jul 2021 19:14:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161306.296179; Tue, 27 Jul 2021 19:14:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8SWs-0004vg-PB; Tue, 27 Jul 2021 19:14:14 +0000
Received: by outflank-mailman (input) for mailman id 161306;
 Tue, 27 Jul 2021 19:14:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SWs-0004vW-1Q; Tue, 27 Jul 2021 19:14:14 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SWr-0003Vi-Qi; Tue, 27 Jul 2021 19:14:13 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SWr-00064B-GX; Tue, 27 Jul 2021 19:14:13 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8SWr-0000nm-G3; Tue, 27 Jul 2021 19:14:13 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=FeZ8GYUl2eelZLBp5KErfycSpI1B4UafoP+7x1Ryuj8=; b=1ErAIz6sPBh8khvXK7tnGJZkTL
	NHANu0ObDBnpNcu5/LlBlTaprKNLzoVmsmhPMS2qLVp9X1ztb68J4Q5DpRlb4TZ/GVvCxndExow+e
	yKUdzZPoHvLS1IhdnQHEMr6l9J7SwKkFEynVinUW52Om7IVtYolc0D6JzVlXDPVO4BfU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164008-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164008: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=1f3c9c762e2a4eada649393e9527b19e048f3ba7
X-Osstest-Versions-That:
    qemuu=76bf66b9136ce373f006f68b0ef4819abc797054
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 19:14:13 +0000

flight 164008 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164008/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10       fail  like 164001
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164001
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164001
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164001
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164001
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164001
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164001
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164001
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass

version targeted for testing:
 qemuu                1f3c9c762e2a4eada649393e9527b19e048f3ba7
baseline version:
 qemuu                76bf66b9136ce373f006f68b0ef4819abc797054

Last test of basis   164001  2021-07-26 21:09:11 Z    0 days
Testing same since   164008  2021-07-27 07:49:43 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Akihiko Odaki <akihiko.odaki@gmail.com>
  Dennis Wölfing <denniswoelfing@gmx.de>
  Gerd Hoffmann <kraxel@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Volker Rümelin <vr_qemu@t-online.de>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   76bf66b913..1f3c9c762e  1f3c9c762e2a4eada649393e9527b19e048f3ba7 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 22:07:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 22:07:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161317.296196 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8VED-0002w7-DM; Tue, 27 Jul 2021 22:07:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161317.296196; Tue, 27 Jul 2021 22:07:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8VED-0002w0-AC; Tue, 27 Jul 2021 22:07:09 +0000
Received: by outflank-mailman (input) for mailman id 161317;
 Tue, 27 Jul 2021 22:07:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VEC-0002vq-EX; Tue, 27 Jul 2021 22:07:08 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VEC-00064Y-Az; Tue, 27 Jul 2021 22:07:08 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VEC-0003iM-1f; Tue, 27 Jul 2021 22:07:08 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VEC-00044D-1D; Tue, 27 Jul 2021 22:07:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=nV+sDh1KvXPPZiaHc+da8gVLuQsw4w/klRhxmAmCIjQ=; b=OHnq93XZI3MWpD8VQffQjeubbT
	/ecL9zObZ3qZ9XbYk3OXfYJlyLafVZnqRwhsYtOGC/MXiLR+m7whiWCDBqh3Rm3pabMxslSAtObcO
	yVpmz863lYU16ROSsmlTO5TQwb07Wzec16zY2qnJglfcIGy2qAokjhB7q634oK7u5mlE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164010-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164010: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 22:07:08 +0000

flight 164010 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164010/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   53 days
Failing since        162368  2021-06-04 15:42:59 Z   53 days  148 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    1 days    5 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4087 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 22:20:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 22:20:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161325.296212 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8VQp-0005AN-Lc; Tue, 27 Jul 2021 22:20:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161325.296212; Tue, 27 Jul 2021 22:20:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8VQp-0005AG-Hf; Tue, 27 Jul 2021 22:20:11 +0000
Received: by outflank-mailman (input) for mailman id 161325;
 Tue, 27 Jul 2021 22:20:09 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VQn-0005A6-TR; Tue, 27 Jul 2021 22:20:09 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VQn-0006Fv-IU; Tue, 27 Jul 2021 22:20:09 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VQn-0004NM-9I; Tue, 27 Jul 2021 22:20:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VQn-00055r-8l; Tue, 27 Jul 2021 22:20:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=s0b70eiYsTKINP6UmMlP4Rfpl0TSnE3Wm7rUs+3kTRM=; b=IYClYwgN6h9+8H+orKAJCqJpt0
	SJExBIm3bo/zR2zWhOTBHCDoCbiXwDnctOkXuhuZ3FV94Q7kryMgCnZpsKFDRLi+xB6Regm2gyGN7
	S4cIYukOy8BX/DL4CTJTXfpuPrdM5XUPCnko20eT/bGYQOYIDXFh56MpabPzc8HOK7QE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164009-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164009: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:guest-start:fail:regression
    linux-linus:test-amd64-amd64-qemuu-nested-intel:xen-boot/l1:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=ff1176468d368232b684f75e82563369208bc371
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 22:20:09 +0000

flight 164009 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164009/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  14 guest-start    fail in 163998 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-qemuu-nested-intel 16 xen-boot/l1 fail in 163998 pass in 164009
 test-arm64-arm64-xl-credit1  13 debian-fixup               fail pass in 163998

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

version targeted for testing:
 linux                ff1176468d368232b684f75e82563369208bc371
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  361 days
Failing since        152366  2020-08-01 20:49:34 Z  360 days  620 attempts
Testing same since   163989  2021-07-25 22:41:50 Z    1 days    5 attempts

------------------------------------------------------------
6730 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987295 lines long.)


From xen-devel-bounces@lists.xenproject.org Tue Jul 27 22:34:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Tue, 27 Jul 2021 22:34:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161332.296226 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8VeV-0006dI-T5; Tue, 27 Jul 2021 22:34:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161332.296226; Tue, 27 Jul 2021 22:34:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8VeV-0006dB-Q5; Tue, 27 Jul 2021 22:34:19 +0000
Received: by outflank-mailman (input) for mailman id 161332;
 Tue, 27 Jul 2021 22:34:18 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VeU-0006d1-0q; Tue, 27 Jul 2021 22:34:18 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VeT-0006Sx-QZ; Tue, 27 Jul 2021 22:34:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VeT-0005Co-IY; Tue, 27 Jul 2021 22:34:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8VeT-0006BZ-I1; Tue, 27 Jul 2021 22:34:17 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ULqOB6NUs+2OqUBN4ICTHm/C3uxwJ/nBWK5MCj682DI=; b=Dy3pp6y5e76/t/0ZrLDFkpK8qb
	q3dR1JsjPz4XutVBkxs36pRdKD+V+BM2E0NumYHnkuUpmpG1q7o5BglQu5/NwqFmYlL3RNVuit+RH
	5GuIj54P5m/6T0951/UHN86/y+sl2C5kehMZ4H1GxY0GrcZuaI0UmrdfwAuPxDQVq1r0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164012-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 164012: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
X-Osstest-Versions-That:
    xen=0cdb4a5802bad51aa89f6b1f10014dd21c37228b
From: osstest service owner <osstest-admin@xenproject.org>
Date: Tue, 27 Jul 2021 22:34:17 +0000

flight 164012 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164012/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31
baseline version:
 xen                  0cdb4a5802bad51aa89f6b1f10014dd21c37228b

Last test of basis   164011  2021-07-27 14:00:29 Z    0 days
Testing same since   164012  2021-07-27 19:02:43 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Jan Beulich <jbeulich@suse.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   0cdb4a5802..58ad654ebc  58ad654ebce7ccb272a3f4f3482c03aaad850d31 -> smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 06:12:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 06:12:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161356.296272 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8cnu-0003U2-9a; Wed, 28 Jul 2021 06:12:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161356.296272; Wed, 28 Jul 2021 06:12:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8cnu-0003Tv-5p; Wed, 28 Jul 2021 06:12:30 +0000
Received: by outflank-mailman (input) for mailman id 161356;
 Wed, 28 Jul 2021 06:12:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8cns-0003Tl-CL; Wed, 28 Jul 2021 06:12:28 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8cns-0003sP-5y; Wed, 28 Jul 2021 06:12:28 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8cnr-00032Y-Ph; Wed, 28 Jul 2021 06:12:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8cnr-0007ED-Or; Wed, 28 Jul 2021 06:12:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=VrhdLrGBxFIBRd9/XAHZxgoRPNmPQOZF+NgA34a7kek=; b=NYy0LJOwNX/4S2JKHbRe+C7Qrm
	NV5qi7nQr54G2RCOHt/Ag2HgvB9ukWMiItkGx7JgAnZfjPSnp1l16v/QFFn/3fh1+M2For9Y8W7ym
	lWnh05DvK+ayzm49f6khEwJY64ZhJwUugJDlU58iyKEpE51TXw0rr1+ScwvGvu2ycFP0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164013-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164013: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=0cdb4a5802bad51aa89f6b1f10014dd21c37228b
X-Osstest-Versions-That:
    xen=73c932d0ea43ddf904db9429811788480c4cb816
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 06:12:27 +0000

flight 164013 xen-unstable real [real]
flight 164018 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164013/
http://logs.test-lab.xenproject.org/osstest/logs/164018/

Failures :-/ but no regressions.

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

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

version targeted for testing:
 xen                  0cdb4a5802bad51aa89f6b1f10014dd21c37228b
baseline version:
 xen                  73c932d0ea43ddf904db9429811788480c4cb816

Last test of basis   164007  2021-07-27 06:42:49 Z    0 days
Testing same since   164013  2021-07-27 19:06:49 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alan Robinson <alan.robinson@fujitsu.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ian Jackson <iwj@xenproject.org>
  Scott Davis <scott.davis@starlab.io>
  Scott Davis <scottwd@gmail.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   73c932d0ea..0cdb4a5802  0cdb4a5802bad51aa89f6b1f10014dd21c37228b -> master


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 07:01:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 07:01:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161364.296287 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8dZF-0008Hj-4Y; Wed, 28 Jul 2021 07:01:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161364.296287; Wed, 28 Jul 2021 07:01:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8dZF-0008Hc-1J; Wed, 28 Jul 2021 07:01:25 +0000
Received: by outflank-mailman (input) for mailman id 161364;
 Wed, 28 Jul 2021 07:01:23 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dZD-0008HS-QS; Wed, 28 Jul 2021 07:01:23 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dZD-0004aI-Ig; Wed, 28 Jul 2021 07:01:23 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dZD-0005co-88; Wed, 28 Jul 2021 07:01:23 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dZD-000236-7a; Wed, 28 Jul 2021 07:01:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Og8OWxcAP04WqtJXC5HPQ+JbAV8ewGDtAJO4Lmce6XY=; b=Oo21dQ9fvw+p8uIPGbXm/0QyDz
	D4fAk8Z389Dr6EnEMluzGK8xaKjyOUBYeGtOPBb+TtAXc9LNNZzTXz1cWjU5ZMm8R4PR1cNt00g1D
	RQbQXchIsMxp2BBvEKbTQ4n/2+ee9842lPl7cV+nKs2sbh+W2kh3a14Vi9/EGnwbb9GA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164015-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164015: regressions - FAIL
X-Osstest-Failures:
    ovmf:test-amd64-i386-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    ovmf:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 07:01:23 +0000

flight 164015 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164015/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 162359

version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   54 days
Failing since        162368  2021-06-04 15:42:59 Z   53 days  149 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    1 days    6 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 4087 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 07:08:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 07:08:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161371.296302 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8dgT-0000Yf-UO; Wed, 28 Jul 2021 07:08:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161371.296302; Wed, 28 Jul 2021 07:08:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8dgT-0000YY-Qm; Wed, 28 Jul 2021 07:08:53 +0000
Received: by outflank-mailman (input) for mailman id 161371;
 Wed, 28 Jul 2021 07:08:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dgS-0000YO-EX; Wed, 28 Jul 2021 07:08:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dgS-0004h4-9b; Wed, 28 Jul 2021 07:08:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dgR-0005tf-VF; Wed, 28 Jul 2021 07:08:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8dgR-0002kp-UY; Wed, 28 Jul 2021 07:08:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ez6EkkS/1oN5J15qb033VNHZJm36fyXPCO7I56VIGVo=; b=mwnLwfG4/+W/UoMcx+i10xdXm/
	IG4kuXdp3M8G9lte4TIiRozh1JBW2WqjFbVkDw72zv0+qnItAYcxbc5BUgCFEUh7/LJxoBaU7TDBC
	1bhieg7QNR4kwigs58mUdBvky6b411c8xRK3aacHAiVOWFIezaT6ljQTc6daZw/mx9x4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164014-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164014: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=f2da205cb4142259d9bc6b9d4596ebbe2426fe49
X-Osstest-Versions-That:
    qemuu=1f3c9c762e2a4eada649393e9527b19e048f3ba7
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 07:08:51 +0000

flight 164014 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164014/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10       fail  like 164008
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164008
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164008
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164008
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164008
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164008
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164008
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164008
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                f2da205cb4142259d9bc6b9d4596ebbe2426fe49
baseline version:
 qemuu                1f3c9c762e2a4eada649393e9527b19e048f3ba7

Last test of basis   164008  2021-07-27 07:49:43 Z    0 days
Testing same since   164014  2021-07-27 19:39:08 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Benjamin Herrenschmidt <benh@kernel.crashing.org>
  David Gibson <david@gibson.dropbear.id.au>
  Dr. David Alan Gilbert <dgilbert@redhat.com>
  Gollu Appalanaidu <anaidu.gollu@samsung.com>
  Joe Komlodi <joe.komlodi@xilinx.com>
  Joel Stanley <joel@jms.id.au>
  Klaus Jensen <k.jensen@samsung.com>
  Laurent Vivier <laurent@vivier.eu>
  Mao Zhongyi <maozhongyi@cmss.chinamobile.com>
  Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  Padmakar Kalghatgi <p.kalghatgi@samsung.com>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <f4bug@amsat.org>
  Richard Henderson <richard.henderson@linaro.org>
  Wei Wang <wei.w.wang@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   1f3c9c762e..f2da205cb4  f2da205cb4142259d9bc6b9d4596ebbe2426fe49 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 07:43:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 07:43:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161378.296317 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8eDb-0004LM-Jx; Wed, 28 Jul 2021 07:43:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161378.296317; Wed, 28 Jul 2021 07:43:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8eDb-0004LF-GT; Wed, 28 Jul 2021 07:43:07 +0000
Received: by outflank-mailman (input) for mailman id 161378;
 Wed, 28 Jul 2021 07:43:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=ah7W=MU=arm.com=Rahul.Singh@srs-us1.protection.inumbo.net>)
 id 1m8eDZ-0004L9-Ma
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 07:43:05 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.52]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6ffb618e-ef77-11eb-9777-12813bfff9fa;
 Wed, 28 Jul 2021 07:43:03 +0000 (UTC)
Received: from DU2PR04CA0328.eurprd04.prod.outlook.com (2603:10a6:10:2b5::33)
 by DBBPR08MB6012.eurprd08.prod.outlook.com (2603:10a6:10:205::9) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.26; Wed, 28 Jul
 2021 07:43:00 +0000
Received: from DB5EUR03FT022.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:2b5:cafe::27) by DU2PR04CA0328.outlook.office365.com
 (2603:10a6:10:2b5::33) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 07:43:00 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT022.mail.protection.outlook.com (10.152.20.171) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 07:43:00 +0000
Received: ("Tessian outbound 5f693336bfca:v100");
 Wed, 28 Jul 2021 07:43:00 +0000
Received: from f71b53c1c9dd.2
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 0B4670B4-DF98-4D08-81E1-AC4D0176EB4A.1; 
 Wed, 28 Jul 2021 07:42:49 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f71b53c1c9dd.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 07:42:49 +0000
Received: from AS8PR08MB6919.eurprd08.prod.outlook.com (2603:10a6:20b:39e::10)
 by AM6PR08MB4501.eurprd08.prod.outlook.com (2603:10a6:20b:b5::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.29; Wed, 28 Jul
 2021 07:42:47 +0000
Received: from AS8PR08MB6919.eurprd08.prod.outlook.com
 ([fe80::655a:27ea:a020:248d]) by AS8PR08MB6919.eurprd08.prod.outlook.com
 ([fe80::655a:27ea:a020:248d%9]) with mapi id 15.20.4352.031; Wed, 28 Jul 2021
 07:42:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6ffb618e-ef77-11eb-9777-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=teL6mQevpWT1YoqVqscBADYVdmpjibcYEfn1dYIlU6g=;
 b=tgHEgU6DU4Ly+wvFzmw6FDbZqqlIJ/mnFm0gFgW7I7LdJzqJvAri8BSbSY8OLk+GXhoK7COLLZ0PPx4t0g7V8/SB0GmWE64M235Ur7jyQ1HoiDAlwvZTb9jQ5XStstoK0FOZEiAYKiRGxP0tsI0iMfdzhlsrC/Evc1z/124MMB4=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: a6276463fa4f06bd
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MyOyUubl0LaeTCsSkrF+3kGOGx9zOfcKIQ0GGHY66mC8m+ghysnRicU6leGzDS0CspTiz9TbP9nXxDJLRy5M15ZN/ainxuMBXgkYbbV6wqz5n25mbRrQ5WcrfoLzCa7XTXumMIu9NMMbKJ1ZEvCWe5qjIobtWUhbnGioaAvxTQNeeIHN2kCqAaBpwDwFD1ll8EsGkwyuu277cB6DDrTOS1sYEHoh3CdIeZkTOzoWGLwgzZk28FuJBTULADYm4rXtnIImFOpH6PgK7w3fG/z7/MqIWYqtmBf3egqUO/Qycz08a+xGxyWk8HqU+7nOA0DisSC8BH2+ZsSKIlzwNlMF4A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=teL6mQevpWT1YoqVqscBADYVdmpjibcYEfn1dYIlU6g=;
 b=T1kjgudYWZXR7C61ZnLK8LPUAL9Yb9TcS8RuQ0n04z8YRIuCNMV2ICveBr2XUq82q+G2shQrai7S/aHoaG+IK4hmCJi/iPSpMR1FtD49jElL5WLgB3tLZ6cNQSfoKoIvvSgOkjrioz9MNjff23tLr+/piNuk9FEHLiUXlmDBg3ffM5F4iXXVn7bPQYXvnPKQ7uiopRo1BPQt1AHh3JarH93cFlynNZ+7BqO+aWQgOAERyeOshbVDl9tjqJwpYSCqzEffCj//sgEsT7HxQYN3UElNz1o6M2N8lGVQCGVNpZ8gDa3++ccqkUZ+CXZEP5VkOrIKjRnRCfxlvbK1CsrPwQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=teL6mQevpWT1YoqVqscBADYVdmpjibcYEfn1dYIlU6g=;
 b=tgHEgU6DU4Ly+wvFzmw6FDbZqqlIJ/mnFm0gFgW7I7LdJzqJvAri8BSbSY8OLk+GXhoK7COLLZ0PPx4t0g7V8/SB0GmWE64M235Ur7jyQ1HoiDAlwvZTb9jQ5XStstoK0FOZEiAYKiRGxP0tsI0iMfdzhlsrC/Evc1z/124MMB4=
From: Rahul Singh <Rahul.Singh@arm.com>
To: Michal Orzel <Michal.Orzel@arm.com>
CC: xen-devel <xen-devel@lists.xenproject.org>, Stefano Stabellini
	<sstabellini@kernel.org>, Julien Grall <julien@xen.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, Bertrand Marquis <Bertrand.Marquis@arm.com>
Subject: Re: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with
 vreg_emulate_{sysreg/cp}
Thread-Topic: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with
 vreg_emulate_{sysreg/cp}
Thread-Index: AQHXgsz3bAy5uI+6sUKQYbE7qSsvQ6tYArSA
Date: Wed, 28 Jul 2021 07:42:47 +0000
Message-ID: <C87A9B80-1D7F-489A-BC83-B65F7B3EF091@arm.com>
References: <20210727095010.11103-1-michal.orzel@arm.com>
In-Reply-To: <20210727095010.11103-1-michal.orzel@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Authentication-Results-Original: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 7bc1bcdc-930d-48ba-5df0-08d9519b52ea
x-ms-traffictypediagnostic: AM6PR08MB4501:|DBBPR08MB6012:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS:
	<DBBPR08MB6012E333D43ADF8FC6028E73FCEA9@DBBPR08MB6012.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 tM51H9VfJeJjbke9w+AxcAw9y+dRv+1Dt5kiy27nDt6zqCM+dsUZo3IK1kFWxzne3z9TWnCbtRWsfgNovZDbbjh5GJmYTYeHa9DoVC586x5FuAmJapGufPo8TMzr9b5XrqMT13qAANmnRsr5xE2uRny9yLd1k6JpTsojQ5mY8Q5uTqyQVdpUUgUvsDhwNIJpmU5dxRE0nmFlPeUpPo5PoVyoonIbX4/rn7mIqrWKZ3est31U58tZXvxyVYofiGbPYSBVnyWOdpiQaRmVTkZSgMzfYt1h8nlEKPkfIwX4mOOR3DRkgv5DcTQyEiIOBzsMKZT5E90juGIlJqAyMDV90Wj9HkqDrA0gcQbDUYlMlMsuV39LEgokC1W7bqgUFR2fha41SRyfN4qcj9LtVMz9ROxha6fbV94uKmDmGMcgqueWAjA3GQiMPRNphpU8+TBvsnMx5mK3kVOjyko8hzORFfbsy9M2L7B2lLp9M+CM2TjAF7H0bqaVdpnqPH4bEwR7bA/KjriPo1TFVitkkEfkOSF5Ru2MG84F1ihz+s64rFTCtX9qY6N9g/cfWJ2d/jBzLf82xuI9zAHrzGFaeWSzUP6PZx30tKcCv5tOJmdqkDmic79mcJy6145DGo4fhjBsbzpJb6JpEqUzR+67QwwoOTpuHq9k3elldr+nqgvQXTSTjt6vq3Sm54u2ymfAw0HICscAZUI68knvRa9rBXJC7b+IqY50dVW66yndIW6onVCh/R8baOgMsZUDHsj8D8kM
X-Forefront-Antispam-Report-Untrusted:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6919.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(366004)(346002)(39860400002)(136003)(396003)(38100700002)(4326008)(71200400001)(91956017)(5660300002)(36756003)(66446008)(6636002)(54906003)(37006003)(66556008)(316002)(6506007)(53546011)(76116006)(66476007)(6512007)(33656002)(26005)(66946007)(186003)(8936002)(8676002)(83380400001)(122000001)(86362001)(2906002)(64756008)(6862004)(2616005)(6486002)(38070700005)(478600001)(45980500001);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?iHIHuyL/pDvcciSxxod25iOec7LTK2niEpyhHSWq2Cm0Ns5yNQ1NIG/4fS67?=
 =?us-ascii?Q?tNG50y0LsIQnL1RTkQM/NKY7AEYYmMIDneJfxEU7qa465EynaYY5ZEsabIlN?=
 =?us-ascii?Q?ZfFYIJPu9EHXawp+AI3rwQHYb5OW3m0ZPBX5pIJfasK+K1b8RRKoAFHyP6fE?=
 =?us-ascii?Q?FeJey/6CK00FhjpnG4bjc/Ahb6rar6jgH+IRR+Kxy/lwhjbPcAi36xjORopQ?=
 =?us-ascii?Q?Kxiv2mzaaiGVQyOca2jH2+c8Mp5/kraD1JnMO6vFs03tsaVYzAfFESqoTKwd?=
 =?us-ascii?Q?Uzl1bZNUCeU6P8CAs0hEy7kHPhsxdYQA775tyrtxJmw8ZbyAs5CY3CA9dkm+?=
 =?us-ascii?Q?A6nqU73fEvuwXUSTFJUQ84ImfInuP0wEdKhZPA6viDkSV1rj4ZdI1vwqSjXp?=
 =?us-ascii?Q?W1i172PScxb5L2g9ZZA2pBeEfhsnJhP/LAl2F1/yLsxJ6BpGDFYTypdWsXya?=
 =?us-ascii?Q?Es6lf7OL3qpX2TcsKJhtlV5rKd39xuXzkoG+1FVf8TzQA6BPwqC49wdS5fGI?=
 =?us-ascii?Q?djA+kaT+tr4eMX/7ChtwJv5GQH+ayx8Y13yAqjsVOLJBdHSVTD0Rj+4bjqhz?=
 =?us-ascii?Q?nkXMLi971rlup7iC+oixsBzfLh8VYTGdJdRJ2ZOhUpHUXtdJZxxb/+OQIo1R?=
 =?us-ascii?Q?ZBzBeoTlskM+wiX1gOW52+VCU737klQ8PdqMcmBZeSaZKDM1Eec4j1ia+X8f?=
 =?us-ascii?Q?TQo20MQppszm4lM50qZoeo4hz3zOn+U5rIebC7J7X0sxIOJDFVToYrG7SJJT?=
 =?us-ascii?Q?W8KntUBq7z0S/zQfLrzMvPGYWmn7AmIn9OgE+YBG3Cg9dxk8LxHDXVB5/Q52?=
 =?us-ascii?Q?dk0VqixLqFRGJa1ll75bUG4sqP/5ceFyMiatCOsUGfkAR/ECi5j/fJm2mKP/?=
 =?us-ascii?Q?MZb5p3/Mq2ydKnfJ2SVD1PRqOcafREHuo5v1ShbRu5/xcfU7eFltEMqz7S6z?=
 =?us-ascii?Q?XFLxj3AfLbgbGcrd5xzy1TR1iW/1ZQUxPH5ObRyEVjnoSJj9Abgg/s/Vrg05?=
 =?us-ascii?Q?aXxwF350QY+10k1SD9SqcL0fTD9+G7ww0KLRuL6jJClfqekRMWgR0bRxDR2w?=
 =?us-ascii?Q?Ug4Z5QjXkbAmZbOs3o5cLCjWCj8JoFTbh6pqcI7c8f348njrJXxkfLIUJjkH?=
 =?us-ascii?Q?ZGIqD2qNymI82pnsCmQ2VxFqYxcbhQdLl43QLwwe7sFrzDaPIaDXyiJXs5+L?=
 =?us-ascii?Q?1QNhPsCvYEvOONOH0b8IHxxqB33BXqpKU5iEmGm3c8cD0L0u/AEU2K9gamk3?=
 =?us-ascii?Q?x3I9CG/7j1yclJZXRRPG5GeegJyBmQxJ5e4F7OGSlCAEGJABybokHEr/5pmZ?=
 =?us-ascii?Q?4xDu2t/AtTIb1eNpPM8PGSRZ?=
Content-Type: text/plain; charset="us-ascii"
Content-ID: <C757D47457221749BFF46DEF0B189E1C@eurprd08.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4501
Original-Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT022.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	540af450-0ea7-446d-cf46-08d9519b4b75
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	oHC7GHiLvpZOZY+U5M4AVSPjSYUZAf0A8iAXMmYqREGqb446ivV2+cpKNX0lPT65jl7RYQjTfFrIoat8KCLRgxgXHMElIPG4iIOZIoe+fXVG5vvjfwscqQaozKIn8OxsjqaVvTvmvQOHjoVuLFZAUhjdU+x1KCJPv1vLzPsh0hWP/wiFSZsYvA/sEAGyUj3CTrLUfah+bz7168iTlz+p0IqcFtUqr/wnAYF9WWDuF0KysLzD3e8jX43EkjptkzF1+dSGOPBhoe0cbVVCRrCY1egGQYuOHftik4GbWF3U1GAbN48wn86tjBtVqooRkS2Fkc54gefROTT2sbxxSZo4b3rJiOPa/f5w1Ji1pJImJ0HEKdj+LF/7hugqLnUIeRgKpPHMhRFU23tUeMHKQnXLc4b0vtcNn+uzeD/yorCE74gXWeOBx4hIh0mMwwM7vcC2XUxPp98P82QIHBFwT/ywe4edO+cVq9MfpV/eWtudaPkfK6pdxf14UNm7m07Ys6EoLdrt6KPzS+9YrzrTK4pz7nu2LDpZF+hyoNhvaVd8Efyru71tQf31d8OPGYgn+hlQUA9dCCt5MTHMGboAiZC/qjFpJqUWgxLwAwlbjcbZrLMHMstcdSYwTTWeUH42qqV1qgJuI177kDoOGNNiFYkU9vGR7T6wFqphGu9CCUcVdxCH9+5WHpTtjEqHpQ19AQIKOJIToSpeqsvGa74jKotJfQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39860400002)(136003)(376002)(346002)(396003)(46966006)(36840700001)(6486002)(4326008)(6862004)(8936002)(6636002)(2616005)(316002)(36756003)(82310400003)(70206006)(478600001)(8676002)(37006003)(70586007)(54906003)(6512007)(6506007)(53546011)(2906002)(81166007)(82740400003)(47076005)(86362001)(33656002)(26005)(186003)(5660300002)(356005)(83380400001)(336012)(36860700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 07:43:00.2417
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 7bc1bcdc-930d-48ba-5df0-08d9519b52ea
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT022.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6012

Hi Michal,

> On 27 Jul 2021, at 10:50 am, Michal Orzel <Michal.Orzel@arm.com> wrote:
>=20
> According to ARMv8A architecture, AArch64 registers
> are 64bit wide even though in many cases the upper
> 32bit is reserved. Therefore there is no need for
> function vreg_emulate_sysreg32 on arm64.
>=20
> Ideally on arm64 there should be only one function
> vreg_emulate_sysreg(using register_t) or
> vreg_emulate_sysreg64(using uint64_t) but in the Xen code
> there is a lot of functions passed both to the
> vreg_emulate_cp* and vreg_emulate_sysreg*.
> This would require to duplicate them which is not
> a good solution.
>=20
> The easiest/minimal solution to fix this issue is
> to replace vreg_emulate_{sysreg/cp}32 with
> vreg_emulate_{sysreg/cp}. The modifed functions
> are now taking function pointer:
> -typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>                              register_t *r, bool read);
> instead of:
> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs,
>                                uint32_t *r, bool read);
>=20
> This change allows to properly use 64bit registers on arm64
> and in case of 32bit guest the cast is done by the hardware
> due to the 32bit registers being the lower part of 64bit ones.
>=20
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>

Reviewed-by: Rahul Singh <rahul.singh@arm.com>

Regards,
Rahul
> ---
> The reason for this change is to clean up the mess related to types.
> This patch achieves that but it does not reduce the code size.
> I'm not sure whether we want such change hence it is pushed as RFC.
> ---
> xen/arch/arm/vcpreg.c      | 16 +++++++++++-----
> xen/arch/arm/vtimer.c      | 18 +++++++++---------
> xen/include/asm-arm/vreg.h | 14 +++++++-------
> 3 files changed, 27 insertions(+), 21 deletions(-)
>=20
> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
> index e3ce56d875..376a1ceee2 100644
> --- a/xen/arch/arm/vcpreg.c
> +++ b/xen/arch/arm/vcpreg.c
> @@ -57,9 +57,12 @@
> #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg=
)
> #endif
>=20
> +#define type32_t register_t
> +#define type64_t uint64_t
> +
> /* The name is passed from the upper macro to workaround macro expansion.=
 */
> #define TVM_REG(sz, func, reg...)                                        =
   \
> -static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)=
    \
> +static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool read)=
    \
> {                                                                        =
   \
>     struct vcpu *v =3D current;                                          =
     \
>     bool cache_enabled =3D vcpu_has_cache_enabled(v);                    =
     \
> @@ -83,7 +86,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##=
_t *r, bool read)    \
>=20
> #else /* CONFIG_ARM_64 */
> #define TVM_REG32_COMBINED(lowreg, hireg, xreg)                          =
   \
> -static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,=
    \
> +static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, register_t *=
r,  \
>                                 bool read, bool hi)                      =
   \
> {                                                                        =
   \
>     struct vcpu *v =3D current;                                          =
     \
> @@ -108,13 +111,13 @@ static bool vreg_emulate_##xreg(struct cpu_user_reg=
s *regs, uint32_t *r,    \
>     return true;                                                         =
   \
> }                                                                        =
   \
>                                                                          =
   \
> -static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, uint32_t *=
r,  \
> +static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, register_t=
 *r,\
>                                   bool read)                             =
   \
> {                                                                        =
   \
>     return vreg_emulate_##xreg(regs, r, read, false);                    =
   \
> }                                                                        =
   \
>                                                                          =
   \
> -static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t *r=
,   \
> +static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, register_t =
*r, \
>                                  bool read)                              =
   \
> {                                                                        =
   \
>     return vreg_emulate_##xreg(regs, r, read, true);                     =
   \
> @@ -154,13 +157,16 @@ TVM_REG32_COMBINED(MAIR0, MAIR1, MAIR_EL1)
> TVM_REG32_COMBINED(AMAIR0, AMAIR1, AMAIR_EL1)
> TVM_REG32(CONTEXTIDR, CONTEXTIDR_EL1)
>=20
> +#define VREG_EMULATE_CP32(regs, hsr, fn)  vreg_emulate_cp(regs, hsr, fn)
> +#define VREG_EMULATE_CP64(regs, hsr, fn)  vreg_emulate_cp64(regs, hsr, f=
n)
> +
> /* Macro to generate easily case for co-processor emulation. */
> #define GENERATE_CASE(reg, sz)                                      \
>     case HSR_CPREG##sz(reg):                                        \
>     {                                                               \
>         bool res;                                                   \
>                                                                     \
> -        res =3D vreg_emulate_cp##sz(regs, hsr, vreg_emulate_##reg);   \
> +        res =3D VREG_EMULATE_CP##sz(regs, hsr, vreg_emulate_##reg);   \
>         ASSERT(res);                                                \
>         break;                                                      \
>     }
> diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
> index 167fc6127a..17b5649a05 100644
> --- a/xen/arch/arm/vtimer.c
> +++ b/xen/arch/arm/vtimer.c
> @@ -162,7 +162,7 @@ void virt_timer_restore(struct vcpu *v)
>     WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
> }
>=20
> -static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, boo=
l read)
> +static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t *r, b=
ool read)
> {
>     struct vcpu *v =3D current;
>     s_time_t expires;
> @@ -176,7 +176,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *reg=
s, uint32_t *r, bool read)
>     }
>     else
>     {
> -        uint32_t ctl =3D *r & ~CNTx_CTL_PENDING;
> +        register_t ctl =3D *r & ~CNTx_CTL_PENDING;
>         if ( ctl & CNTx_CTL_ENABLE )
>             ctl |=3D v->arch.phys_timer.ctl & CNTx_CTL_PENDING;
>         v->arch.phys_timer.ctl =3D ctl;
> @@ -197,7 +197,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *reg=
s, uint32_t *r, bool read)
>     return true;
> }
>=20
> -static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
> +static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
>                              bool read)
> {
>     struct vcpu *v =3D current;
> @@ -211,11 +211,11 @@ static bool vtimer_cntp_tval(struct cpu_user_regs *=
regs, uint32_t *r,
>=20
>     if ( read )
>     {
> -        *r =3D (uint32_t)((v->arch.phys_timer.cval - cntpct) & 0xfffffff=
full);
> +        *r =3D (register_t)((v->arch.phys_timer.cval - cntpct) & 0xfffff=
fffull);
>     }
>     else
>     {
> -        v->arch.phys_timer.cval =3D cntpct + (uint64_t)(int32_t)*r;
> +        v->arch.phys_timer.cval =3D cntpct + (uint64_t)(register_t)*r;
>         if ( v->arch.phys_timer.ctl & CNTx_CTL_ENABLE )
>         {
>             v->arch.phys_timer.ctl &=3D ~CNTx_CTL_PENDING;
> @@ -274,10 +274,10 @@ static bool vtimer_emulate_cp32(struct cpu_user_reg=
s *regs, union hsr hsr)
>     switch ( hsr.bits & HSR_CP32_REGS_MASK )
>     {
>     case HSR_CPREG32(CNTP_CTL):
> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_ctl);
> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_ctl);
>=20
>     case HSR_CPREG32(CNTP_TVAL):
> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_tval);
> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_tval);
>=20
>     default:
>         return false;
> @@ -316,9 +316,9 @@ static bool vtimer_emulate_sysreg(struct cpu_user_reg=
s *regs, union hsr hsr)
>     switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
>     {
>     case HSR_SYSREG_CNTP_CTL_EL0:
> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
>     case HSR_SYSREG_CNTP_TVAL_EL0:
> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
>     case HSR_SYSREG_CNTP_CVAL_EL0:
>         return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
>=20
> diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
> index 1253753833..cef55aabea 100644
> --- a/xen/include/asm-arm/vreg.h
> +++ b/xen/include/asm-arm/vreg.h
> @@ -4,13 +4,13 @@
> #ifndef __ASM_ARM_VREG__
> #define __ASM_ARM_VREG__
>=20
> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
> +typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
>                                    bool read);
> typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t *r,
>                                    bool read);
>=20
> -static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union h=
sr hsr,
> -                                     vreg_reg32_fn_t fn)
> +static inline bool vreg_emulate_cp(struct cpu_user_regs *regs, union hsr=
 hsr,
> +                                     vreg_reg_fn_t fn)
> {
>     struct hsr_cp32 cp32 =3D hsr.cp32;
>     /*
> @@ -18,7 +18,7 @@ static inline bool vreg_emulate_cp32(struct cpu_user_re=
gs *regs, union hsr hsr,
>      * implementation error in the emulation (such as not correctly
>      * setting r).
>      */
> -    uint32_t r =3D 0;
> +    register_t r =3D 0;
>     bool ret;
>=20
>     if ( !cp32.read )
> @@ -64,11 +64,11 @@ static inline bool vreg_emulate_cp64(struct cpu_user_=
regs *regs, union hsr hsr,
> }
>=20
> #ifdef CONFIG_ARM_64
> -static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, uni=
on hsr hsr,
> -                                         vreg_reg32_fn_t fn)
> +static inline bool vreg_emulate_sysreg(struct cpu_user_regs *regs, union=
 hsr hsr,
> +                                         vreg_reg_fn_t fn)
> {
>     struct hsr_sysreg sysreg =3D hsr.sysreg;
> -    uint32_t r =3D 0;
> +    register_t r =3D 0;
>     bool ret;
>=20
>     if ( !sysreg.read )
> --=20
> 2.29.0
>=20
>=20



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 07:56:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 07:56:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161392.296333 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8eQ5-0005wp-Tj; Wed, 28 Jul 2021 07:56:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161392.296333; Wed, 28 Jul 2021 07:56:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8eQ5-0005wi-Qd; Wed, 28 Jul 2021 07:56:01 +0000
Received: by outflank-mailman (input) for mailman id 161392;
 Wed, 28 Jul 2021 07:56:00 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8eQ4-0005wY-Gy; Wed, 28 Jul 2021 07:56:00 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8eQ4-0005Ki-A2; Wed, 28 Jul 2021 07:56:00 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8eQ3-0007wK-Vo; Wed, 28 Jul 2021 07:56:00 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8eQ3-0003s2-VJ; Wed, 28 Jul 2021 07:55:59 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3EhhYkf/jD4zAb7iR7KIG+VP/4eBKLIyY3wkiO/0Zf4=; b=a99Ehn56Gh0rc4ydmt9K1ndnf9
	1//7ospQJ9f1xgptOhinP+J4ZYajwoUoBiQ8QOy258rtT2SqfrPokRPqiq0CsUzqTXpRb6vsW6beH
	k3+gnrwnqc2E5wS7juycOfeLP4IEKQ3I37YfJFss+Bm1wA46kD6W7buLtPnYzRTSwmy4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164017-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 164017: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=776cc0e3fec5023b2ff47277a3023d3025626884
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 07:55:59 +0000

flight 164017 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164017/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              776cc0e3fec5023b2ff47277a3023d3025626884
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  383 days
Failing since        151818  2020-07-11 04:18:52 Z  382 days  374 attempts
Testing same since   164017  2021-07-28 04:20:11 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Fei <yangfei85@huawei.com>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 67064 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:03:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:03:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161406.296348 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gPV-000118-51; Wed, 28 Jul 2021 10:03:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161406.296348; Wed, 28 Jul 2021 10:03:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gPV-000111-0i; Wed, 28 Jul 2021 10:03:33 +0000
Received: by outflank-mailman (input) for mailman id 161406;
 Wed, 28 Jul 2021 10:03:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gPT-00010l-CM; Wed, 28 Jul 2021 10:03:31 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gPT-0007jq-6E; Wed, 28 Jul 2021 10:03:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gPS-0004xg-RA; Wed, 28 Jul 2021 10:03:30 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gPS-0003zm-Qa; Wed, 28 Jul 2021 10:03:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=ziXkNmPgOEvWQ7bwFRLPlNqLG0Q7iyq1oscOII5UZoA=; b=wT93ub89uncwXziNHv6lkV9Sxk
	fJ9GmyfwlAQlkiAxg2Bb0pFWjHO/XTrYfHixEGTQxmDIuXMepd0AO3vVFAXHghuse/UUFSVefQt3c
	LnvWOpX/Ne2KZ31JVXStg1HeBWDG09zvVMtWfHFGK003VrttvUhEDsjo5p/9e5MQ/824=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164021-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-coverity test] 164021: all pass - PUSHED
X-Osstest-Versions-This:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
X-Osstest-Versions-That:
    xen=57e761b60dc92e210caf3429b8956d908ba04ae9
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 10:03:30 +0000

flight 164021 xen-unstable-coverity real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164021/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31
baseline version:
 xen                  57e761b60dc92e210caf3429b8956d908ba04ae9

Last test of basis   163870  2021-07-21 09:19:34 Z    7 days
Testing same since   164021  2021-07-28 09:20:54 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alan Robinson <alan.robinson@fujitsu.com>
  Andrew Cooper <andrew.cooper3@citrix.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Christian Lindig <christian.lindig@citrix.com>
  Ian Jackson <iwj@xenproject.org>
  Igor Druzhinin <igor.druzhinin@citrix.com>
  Jan Beulich <jbeulich@suse.com>
  Julien Grall <jgrall@amazon.com>
  Scott Davis <scott.davis@starlab.io>
  Scott Davis <scottwd@gmail.com>

jobs:
 coverity-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/xen.git
   57e761b60d..58ad654ebc  58ad654ebce7ccb272a3f4f3482c03aaad850d31 -> coverity-tested/smoke


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:15:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:15:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161413.296362 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gbH-0002SY-4d; Wed, 28 Jul 2021 10:15:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161413.296362; Wed, 28 Jul 2021 10:15:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gbH-0002SR-1Y; Wed, 28 Jul 2021 10:15:43 +0000
Received: by outflank-mailman (input) for mailman id 161413;
 Wed, 28 Jul 2021 10:15:41 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gbF-0002SH-NC; Wed, 28 Jul 2021 10:15:41 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gbF-0007u7-Cr; Wed, 28 Jul 2021 10:15:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gbE-0005SE-UC; Wed, 28 Jul 2021 10:15:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8gbE-0000G6-Te; Wed, 28 Jul 2021 10:15:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=prLg38K4ylVWvHETeFywTOQI0Cqyrag/j5a+Bq5w8LY=; b=0HkffbMXKEPjiMKOXYlJNxhjci
	ZlFEjjISQbP0rPUTewi8/qrmTMlnZq7PwW48yC/Hbpt9S7OCokvT/engF4gpIOMWhxBRUcT6u2WWs
	CdfGa3Xrn2KJGqBxHL/YZP/tn71DNnHwGoclNtbiob5G38Ip9rtljhVrBszJZi5IMqD0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164016-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164016: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7d549995d4e0d99b68e8a7793a0d23da6fc40fe8
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 10:15:40 +0000

flight 164016 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164016/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 152332

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

version targeted for testing:
 linux                7d549995d4e0d99b68e8a7793a0d23da6fc40fe8
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  361 days
Failing since        152366  2020-08-01 20:49:34 Z  360 days  621 attempts
Testing same since   164016  2021-07-27 22:41:16 Z    0 days    1 attempts

------------------------------------------------------------
6731 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987696 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161421.296378 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gns-00040O-Fb; Wed, 28 Jul 2021 10:28:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161421.296378; Wed, 28 Jul 2021 10:28:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gns-00040H-C8; Wed, 28 Jul 2021 10:28:44 +0000
Received: by outflank-mailman (input) for mailman id 161421;
 Wed, 28 Jul 2021 10:28:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8gnr-00040B-La
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:43 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe0d::60d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f4f6de1c-0ca9-4b60-80a1-89cf8af9dcb7;
 Wed, 28 Jul 2021 10:28:40 +0000 (UTC)
Received: from DB6PR07CA0204.eurprd07.prod.outlook.com (2603:10a6:6:42::34) by
 AM0PR08MB3124.eurprd08.prod.outlook.com (2603:10a6:208:5e::29) with
 Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.28; Wed, 28 Jul 2021 10:28:38 +0000
Received: from DB5EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:6:42:cafe::7d) by DB6PR07CA0204.outlook.office365.com
 (2603:10a6:6:42::34) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.7 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:38 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT013.mail.protection.outlook.com (10.152.20.105) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:38 +0000
Received: ("Tessian outbound 4c02392472aa:v100");
 Wed, 28 Jul 2021 10:28:38 +0000
Received: from 9f4a7ab902a7.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 2A6B651B-C33F-4DDD-9309-D579423E3610.1; 
 Wed, 28 Jul 2021 10:28:31 +0000
Received: from FRA01-MR2-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9f4a7ab902a7.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:31 +0000
Received: from AS8P189CA0029.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:31f::15)
 by PR2PR08MB4667.eurprd08.prod.outlook.com (2603:10a6:101:1a::13)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:29 +0000
Received: from VE1EUR03FT018.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:31f:cafe::6d) by AS8P189CA0029.outlook.office365.com
 (2603:10a6:20b:31f::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:28 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT018.mail.protection.outlook.com (10.152.18.135) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:28 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com
 (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:22 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 28
 Jul 2021 10:28:10 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f4f6de1c-0ca9-4b60-80a1-89cf8af9dcb7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M7/UIJts4MNIYNmIi3gGj53g6WJvY6i2WJS5qMZ0p9g=;
 b=3rR4zvip9g8fhfqGtZsbFjve8RCoDeCi87sTHObQHHsJLzKA+8IeaJg/raGQrVgEjbU84B9ivOQgcB8BYdPpH88+IJ+OV36qeSfCoQ4FBZHeboc0Y+gVhp+KuWMzDhtLKEN1m9UwLNwtuLnoFBzjfDT1hPfrzib0rv+VJ6r+Bas=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: e1629ff1da8368ba
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ajGuH38yy89nLbnOwcqrF8K1yyTvx2jStfwQextFN1mzN3FRVadI/0z0zv8YunK7JPZE/o1N+heyjmh1988nxvrpTS5vzcgSUeRX5UH7rDBKxZq6blOwYFrMZAUuEweYvUxxbbxIa8APmb26plmi64frDbodRTdqa2eLHw9ytj5pr/cXoLL2plbc4cCJkPrt0HFSfba+VIGvPhq8NHA8EEvzmX0jhSU1NON5pUjNZ8siGyiSp01wA3086VE1Z+27ZwgC1UoRXTaD2d+Exlzptayt8hASxYoMlIoxffGxWJPL96rD+udhZLKbawxCWXNiZgTEKz6+pqlIJqiNeQOnTg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M7/UIJts4MNIYNmIi3gGj53g6WJvY6i2WJS5qMZ0p9g=;
 b=RJ4ZfWQ69Gp7yKo+++6qExR+60YJmXLvMCSoPc6gwjPwb3CsRyNVm4XqgNfTTLeTZgMQAI+yiyOdIBYIl6thAiX6pU/nJKWoPWxSDUDztlQHat7qYkIoYlg2f8NXrC6NrMPTPBAH16dSnzEv0u+N6GDynfVgZkmMzoV2AspawGB7LFn9qED89YDw6LCbvmdP0jN4glvLyYlMZPynv7wGzPMd/6OU+4KtT+vCoPEAJGAj1/0QYDRR8T8hbIJ5Ki1dg1wzGHdz3ioKZZG/grtiP30W0UZ66W4ZkI71hM1zfHfGhMnxdm8FwZfykEarXjDD5u0RrriAfEcrvDkEZ39cVw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M7/UIJts4MNIYNmIi3gGj53g6WJvY6i2WJS5qMZ0p9g=;
 b=3rR4zvip9g8fhfqGtZsbFjve8RCoDeCi87sTHObQHHsJLzKA+8IeaJg/raGQrVgEjbU84B9ivOQgcB8BYdPpH88+IJ+OV36qeSfCoQ4FBZHeboc0Y+gVhp+KuWMzDhtLKEN1m9UwLNwtuLnoFBzjfDT1hPfrzib0rv+VJ6r+Bas=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 00/10] Domain on Static Allocation
Date: Wed, 28 Jul 2021 10:27:47 +0000
Message-ID: <20210728102758.3269446-1-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 96a1f9ff-1188-40fb-510b-08d951b2764b
X-MS-TrafficTypeDiagnostic: PR2PR08MB4667:|AM0PR08MB3124:
X-Microsoft-Antispam-PRVS:
	<AM0PR08MB3124CEFC6E55E2636938231AF7EA9@AM0PR08MB3124.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:4303;OLM:4303;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 YWSCEW0QKZ2l1coRw9LM6KrpMkAWNlKoirJcasFzDYlAsb7Ba/j+ty6p76yeMS5dk4AsLXizRGWHJiVQw3Ud3jOOXCfsgFQ8kIhzQi6PMA1kewKt6G8ShViAdnea/m0OcvU3rTGIz6vVeK1tQKL0JSScwY/xoospJdzte6jOsg6IDHftxOSaxS+wQg3yphGWbdrnE4hkSKjvo9KOLo6hwzrawIeCycxq0zhQ+2GUfsAo6LNICpr5ur4M1rifiF1zKBqgNX2+s1fDfsC7I91AZrjbjK/icT+PzHnRrFYvuvUTrFzSgPOKZz7jtjQJCgK+JumvHk3ATW9F8EypunGk/s8Ul1fvJK4wE3n5cN3YaOJ74yUBhvWUu+8hcZUvq3eyM52F/DS9GWammRQHgxI9UpgiXb0+64nQArAo+zNMRbsyUSRMVW4UgY5/fzOpteQX7FREpBZiBB4+tyZZpC3E/kAWJdS9O7GU6/pWOleNgXz46nYi0wYBO1FnzjM+6Z34zBqxGeuv0fIBMKLXtG0TPPF9Leyar4E6NFSMsNgb2vAMZrmwDWsE5apApZt7IJ0VQg/8eQ5JFaNGaLrdMjyCR/MSpbFH5r/jJuMYJYaeDrF7u9o3piICU51ue7o/IKw7mX1QNvcwp0Z/TCMiohLEagVtKTysOzDvt/ZKiy5EWzVEd3yqmWlg4P3po/W0q2OD6xIJaFzKZ2V/e4749nBE/uU691ASnEbvbBZoFX+huFhhjMfARzrJkFnCjKiLUSFmqKcM1inUmZ/POv4CJpv/5c84VGJJuM3sU3YDpdAOC/eYelkE/GZ6nZCPBXZnK2AF
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(2616005)(426003)(47076005)(1076003)(70586007)(83380400001)(8676002)(8936002)(4326008)(54906003)(316002)(70206006)(110136005)(186003)(82310400003)(36756003)(336012)(6666004)(26005)(2906002)(5660300002)(7696005)(86362001)(508600001)(36860700001)(44832011)(966005)(356005)(81166007)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR2PR08MB4667
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	5589e229-c19a-4bfb-2085-08d951b270c0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	NvF3AVGn/IiIZBjB5tF8yPwgRoI1oONS0qobJaElhnNBYFrvdTvZOI/+prJ2F8VIU4P04CGEO8Cl0XGrTjkbE68U4JvT1MeEpvyyPRzHFNVN12qXii1A2IZmo3X81qmK8RW8eUzUgYQc8Svk+YRLErGebag8/raZmE9ZfShD+ad+56T1emnRYozNLJUWP8YLCmTtdMDehy5v3UTBKzel1rrBGXDWJMz6E6QCR5YjtiusNYutcShCdmd1shZXCHNN1/YGeSkhQEbNHOKANa96j+quo5sPdjkprVvHmDm2G3OXcn9+/IrZ5V1tFUy0r6B6cDbDK0v7oNOM9QlZIdKyQs1457gv5dVuC9asJ++HhkNYr+NnLX6hRn90Q/Uu4LM364sApf8M0mBjUKMulsLaalGy+eCpAPlvFlX1h2jAt3rP9Fn3GjVRjV4cGTbVa74JL8n76PBeHLr7IF0UqNtPtOGSQtfURdGc4JRWxim6FNdYrp4rq71JSIj184ydQ+zi0ab9l2Hyrym4RK5MobKS2sDYsSSVLb2d14MoWdHtOJrzdhjqsxLXWKqR6bWbfLE6BIW0euYc0ZUWAjyJmq36iwpSpCLeCqqUHXC8rm6AsgWSnz4xA4UqwqXFKVqiFu697DmMg7KXlMifrWaMpULHeiqWW9QEzUrbSP60TTNeoMJXlo68ONIDeU55t0npGWoUAgBOqkJpImJF2ENXPA3pHtqYSN/eimwSXxLTLVDvsX+wMrDXMPR1ILqdomWcNlA/fG8DyoidbMq+Hfrng1ilrB/T9RYL7m7yeAKJ3q7GEik=
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(346002)(136003)(39860400002)(396003)(376002)(46966006)(36840700001)(8676002)(81166007)(6666004)(2906002)(2616005)(44832011)(5660300002)(82740400003)(86362001)(316002)(8936002)(83380400001)(966005)(4326008)(7696005)(36756003)(82310400003)(186003)(426003)(54906003)(70586007)(70206006)(478600001)(36860700001)(336012)(1076003)(47076005)(110136005)(26005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:38.0231
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 96a1f9ff-1188-40fb-510b-08d951b2764b
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3124

Static Allocation refers to system or sub-system(domains) for which memory
areas are pre-defined by configuration using physical address ranges.
Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the
beginning, shall never go to heap allocator or boot allocator for any use.

Domain on Static Allocation is supported through device tree property
`xen,static-mem` specifying reserved RAM banks as this domain's guest RAM.
The size of address-cells/size-cells must be defined in
"#xen,static-mem-address-cells" and "#xen,static-mem-size-cells".

This Patch Serie only talks about Domain on Static Allocation.

Looking into related [design link](
https://lists.xenproject.org/archives/html/xen-devel/2021-05/msg00882.html)
for more details.

The whole design is about Static Allocation and 1:1 direct-map, and this
Patch Serie only covers parts of it, which are Domain on Static Allocation.
Other features will be delievered through different patch series.

---
changes in v4:
- move the option CONFIG_STATIC_MEMORY to common code, and with Arm
"select"ing it
- replace round_pg{down,up}() with PFN_DOWN()/PFN_UP()
- in all cases where order-0 pages get passed, prefer using new assign_pages
to pass literal 1
- reconstruct the order of assign_pages parameters
- moving tlb/cache flush outside of the locked region, considering XSA-364
and reducing the amount of work happening with the heap_lock held
- remove MEMF_no_refcount case
- make acquire_staticmem_pages/acquire_domstatic_pages being __init

TODO:
- reboot domain on static allocation
- Implement all memory-ops(hypercalls) regarding domain on static allocation
to balloon in/out memory
- asynchronously scrubbing PGC_reserved pages
- consider domain on static allocation on NUMA-support scenario

Penny Zheng (10):
  xen/arm: introduce domain on Static Allocation
  xen/arm: introduce new helper device_tree_get_meminfo
  xen/arm: handle static memory in dt_unreserved_regions
  xen: introduce mark_page_free
  xen/arm: static memory initialization
  xen/arm: introduce PGC_reserved
  xen: re-define assign_pages and introduce assign_page
  xen/arm: introduce acquire_staticmem_pages and acquire_domstatic_pages
  xen/arm: check "xen,static-mem" property during domain construction
  xen/arm: introduce allocate_static_memory

 docs/misc/arm/device-tree/booting.txt |  40 +++++
 xen/arch/arm/Kconfig                  |   1 +
 xen/arch/arm/bootfdt.c                |  89 +++++++---
 xen/arch/arm/domain_build.c           | 170 +++++++++++++++++-
 xen/arch/arm/setup.c                  |  71 ++++++--
 xen/arch/x86/pv/dom0_build.c          |   2 +-
 xen/common/Kconfig                    |   3 +
 xen/common/grant_table.c              |   2 +-
 xen/common/memory.c                   |   4 +-
 xen/common/page_alloc.c               | 243 ++++++++++++++++++++------
 xen/include/asm-arm/mm.h              |   3 +
 xen/include/asm-arm/setup.h           |   2 +
 xen/include/xen/mm.h                  |  15 ++
 13 files changed, 542 insertions(+), 103 deletions(-)

-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:49 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161422.296389 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gnv-0004H6-O7; Wed, 28 Jul 2021 10:28:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161422.296389; Wed, 28 Jul 2021 10:28:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gnv-0004Gx-L1; Wed, 28 Jul 2021 10:28:47 +0000
Received: by outflank-mailman (input) for mailman id 161422;
 Wed, 28 Jul 2021 10:28:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8gnu-0004GY-Hb
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:46 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.71]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9578ea33-ef8e-11eb-9786-12813bfff9fa;
 Wed, 28 Jul 2021 10:28:44 +0000 (UTC)
Received: from AM6P193CA0077.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:88::18)
 by AM8PR08MB5571.eurprd08.prod.outlook.com (2603:10a6:20b:1d0::24) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Wed, 28 Jul
 2021 10:28:42 +0000
Received: from AM5EUR03FT018.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:88:cafe::f2) by AM6P193CA0077.outlook.office365.com
 (2603:10a6:209:88::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.19 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:42 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT018.mail.protection.outlook.com (10.152.16.114) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:42 +0000
Received: ("Tessian outbound 1942ea606101:v100");
 Wed, 28 Jul 2021 10:28:41 +0000
Received: from 96c23839c747.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 46857A04-0CDF-463C-9AFF-8E782B3B840F.1; 
 Wed, 28 Jul 2021 10:28:34 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 96c23839c747.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:34 +0000
Received: from AS8P189CA0029.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:31f::15)
 by AM8PR08MB6628.eurprd08.prod.outlook.com (2603:10a6:20b:362::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.30; Wed, 28 Jul
 2021 10:28:31 +0000
Received: from VE1EUR03FT018.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:31f:cafe::6d) by AS8P189CA0029.outlook.office365.com
 (2603:10a6:20b:31f::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:31 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT018.mail.protection.outlook.com (10.152.18.135) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:31 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com
 (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:27 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 28
 Jul 2021 10:28:27 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9578ea33-ef8e-11eb-9786-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pqU3vVGiI7GLhNQwwAeYPut2BD+FA6nGju3mVA8aiz8=;
 b=v/8y4t/bifSMKGTTPX3Xy/F/Z/TG7fJwPgd0akk/ZqjY5u06yso8na+gjYQTWp7RY3qeuqLmUzXpwDBUDJQpp28LVXeGRHT72kvdQWcFmZ7WZzpSIjXIfSHRDcg1qfNRH2DQ1+jY63CVi+5n5tXzJaZTbbEbBP/AqicoMx4CVh0=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 8ba852145f384422
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c0NYC0C9feuFkWCcfk/PWM2fbFff2FkcNRoiqveR07oXIur81EcdthT1C7FGNSBgMtPJWtkOMhHf7dy/T/mc9X7aW51J5y0C6luSfLbuM8/vWzob3LPLdR91hCQLVvAYX7jAkf9aRHL7d25hyQw2jxhsj/pqDgP5cY4glCvZ7cr5Tgvw6HlScXSZN9+zi2Fr+grm1A57TO+jlhAhJ0222w4zKe5H5V4A9uhUlxF6hC4cjkKdYn/r0egWrUDD5wjj1k0tG9HXnWimWFj/KkvuxtmFMc8BK1GqlaQ/tmtTylFs9AQx/QwC/CHG2eM9aphJzpxP6TfCF5jFHuOUun7YPA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pqU3vVGiI7GLhNQwwAeYPut2BD+FA6nGju3mVA8aiz8=;
 b=FTidgiYjj/A9EQwfUT123JPTUVylAZv2dhjVnOmZMtkdvl2K5wiEQ9X1aWGR9mIV7oZUwSBcSc+rHV3CqeLEjJ9BwFKmU39vOI06KNFaKMGYDfH9akNS5N8s2Sz0Ya2BR+YejLrAJVRl745fjl+6DIZTLUOt+AHEVwQeDn0kE0wiHJ3OPHz8T4OECUe4vWfBHg10rCmqnorQl6r5lUQwVb+Kf1lEeJv4qyb8AKiMT+WWvkg12U4uEZspnhXd42XOIKgMbv3SjCls7630zsyRJYf70zI+j1Pzjt/fiPwtRJ5t+FreV9AiW2G8NfM7UBtOF4AvvUC//ojcCdaHe8XIfQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pqU3vVGiI7GLhNQwwAeYPut2BD+FA6nGju3mVA8aiz8=;
 b=v/8y4t/bifSMKGTTPX3Xy/F/Z/TG7fJwPgd0akk/ZqjY5u06yso8na+gjYQTWp7RY3qeuqLmUzXpwDBUDJQpp28LVXeGRHT72kvdQWcFmZ7WZzpSIjXIfSHRDcg1qfNRH2DQ1+jY63CVi+5n5tXzJaZTbbEbBP/AqicoMx4CVh0=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 02/10] xen/arm: introduce new helper device_tree_get_meminfo
Date: Wed, 28 Jul 2021 10:27:49 +0000
Message-ID: <20210728102758.3269446-3-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: bd0dbc63-ae5b-42ae-d62c-08d951b278cc
X-MS-TrafficTypeDiagnostic: AM8PR08MB6628:|AM8PR08MB5571:
X-Microsoft-Antispam-PRVS:
	<AM8PR08MB55716E6585385341CC7F9842F7EA9@AM8PR08MB5571.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:580;OLM:580;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 OZ9pX8zVLpZSiR/+hh4mwmZ6ZTKhOuW4umm3CNkEPEIuTaD05vhQVlplz2lAA5NdlAHXKR/KitOc7m52KOEEyMARWWx1fY52DMMHS4kSAZlYGHpWQqfBciTF6eNz3nlzeY8/BYrKs1RN7aAMdVSGccgL0+1+7sP8qbnTIR8IoE7wDwpdxBZLhpIo+o/U4DYUOmDpZkodUpGFI7lordYlpFMQVN79U/4zORzKAnAC4+VjSEXXpCkGi1ak6VBhqidIeeTstdhJXK1g+TQ7LT5RwlnbcJjaKr7gaO8JfwZyurfef0OPdyF24RHhda5inDnJwLpIzleVteF6LO7g+exUQ4lAXcVq0HhlaVg1ybUwRHZdtPZTwiq7xCyzRg6lYojjyW/LHhPGRxN99x/mIo3riDQEqB422/nJ+HA7eSFnaL+PuXzgoaAx3qxt6anqijLL7JTzhOpnLI8dM/QWaAXYsa99UbRJ2hnsZ3/3OJ61qQ0mCX5AE3bstCdaDgCmjuEJZJuBES9SxWIf4bJmdnqM4EO+6xgKg0cXW3i01p1nk9oid5p2qaWgFF05p9Ud2seRWIPf+UZagZhEqpiQ44OQvPevPHUbiTtF/VbB468DAL3JyV4uk6MBdjvb7N9vOFqv/hRuCErSOFr0xFAh6R0VnPaf7CgQzBerzGvKkcAHwSDSuEpC8/BV+mMW3EUFOUE0UXawrUBlUznyqZFvWLgJNrFyTi76Mdbg+5UvRy7DawM=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(376002)(346002)(136003)(396003)(39850400004)(46966006)(36840700001)(82740400003)(7696005)(36860700001)(81166007)(54906003)(8676002)(336012)(2906002)(44832011)(110136005)(8936002)(6666004)(36756003)(83380400001)(186003)(1076003)(70206006)(356005)(70586007)(5660300002)(2616005)(478600001)(426003)(4326008)(82310400003)(47076005)(86362001)(26005)(316002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6628
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT018.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	27162d95-eb81-4835-f551-08d951b27276
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	40S0TjdiQ783TqZABys18xPHhdfQY1D0WT9/LpQMoaMPK+zCJG2AKUEaxB1eT9+gZwQWFG/K7tcNbzHlsPgBYxW/4sdAnVZuoJNLEBPnIwtoqvGnb+7GbUXvnzi6+HWQWBohMsbo6zdCy4SwhFOZiKbWP8b/svfR+WntrMVbX0cAxfETxUHDEG7sQthf9DWdCAsXXjylO41EddfnNDLO4lg/FXB0fnWORlmLAeSWFnaKjXsdFPjM5Ta1XurntAIKON1Xr1CS79JXyE3dbiH6F++xfskNWMtaWr+Dyt4vmCHZTWFSz68yK23PJZa1j67HhudJChDnIy6JimmfmSf6P14wQ9kKYfEJ98/Pw7Af34iRdhvACqN7oDSri2h9TDXpJpZ1LZklSb78sMLhKM1xLvGpyB8XCpVVl6b1KbKQ/ywGG7lP9iWxxiVFo3bz3H1D5Cu5dTk6SWE71B/IGYhe7ILy1aLZwBzVqmjCjHezlAScL0chG4U7NbxpGOSbO8LX8Lp7uJZCrno74uy/4FcIEe/vPT3GLp2hqMmO1WFSDtfRKX5Wi/r60saeC6EmAWXhNEjTiJ44HQHvbnu6OdndIglprSnyOmuxZyDHcMx8tb7F3xmlbz5UerzfDlGRDG60++tejulC+kqCBPQmFGj9UFMNxlG89fzor3fjhJlDET25CBG1kFqBpU6b7HiX/P1C/AcoQD8nZrlY4wMHgJHhCQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(346002)(396003)(136003)(376002)(36840700001)(46966006)(6666004)(82740400003)(54906003)(110136005)(426003)(36756003)(70206006)(44832011)(5660300002)(4326008)(83380400001)(336012)(86362001)(2616005)(81166007)(186003)(7696005)(1076003)(70586007)(8936002)(316002)(82310400003)(2906002)(8676002)(36860700001)(26005)(478600001)(47076005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:42.1775
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: bd0dbc63-ae5b-42ae-d62c-08d951b278cc
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT018.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB5571

A few functions iterate over the device tree property to get memory info,
like "reg" or "xen,static-mem", so this commit creates a new helper
device_tree_get_meminfo to extract the
common codes.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 xen/arch/arm/bootfdt.c | 104 +++++++++++++++++------------------------
 1 file changed, 42 insertions(+), 62 deletions(-)

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index d2714446e1..04210684c9 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -63,6 +63,44 @@ void __init device_tree_get_reg(const __be32 **cell, u32 address_cells,
     *size = dt_next_cell(size_cells, cell);
 }
 
+static int __init device_tree_get_meminfo(const void *fdt, int node,
+                                          const char *prop_name,
+                                          u32 address_cells, u32 size_cells,
+                                          void *data)
+{
+    const struct fdt_property *prop;
+    unsigned int i, banks;
+    const __be32 *cell;
+    u32 reg_cells = address_cells + size_cells;
+    paddr_t start, size;
+    struct meminfo *mem = data;
+
+    prop = fdt_get_property(fdt, node, prop_name, NULL);
+    if ( !prop )
+        return -ENOENT;
+
+    cell = (const __be32 *)prop->data;
+    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
+
+    for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
+    {
+        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
+        /* Some DT may describe empty bank, ignore them */
+        if ( !size )
+            continue;
+        mem->bank[mem->nr_banks].start = start;
+        mem->bank[mem->nr_banks].size = size;
+        mem->nr_banks++;
+    }
+
+    if ( i < banks )
+    {
+        printk("Warning: Max number of supported memory regions reached.\n");
+        return -ENOSPC;
+    }
+    return 0;
+}
+
 u32 __init device_tree_get_u32(const void *fdt, int node,
                                const char *prop_name, u32 dflt)
 {
@@ -139,14 +177,6 @@ static int __init process_memory_node(const void *fdt, int node,
                                       u32 address_cells, u32 size_cells,
                                       void *data)
 {
-    const struct fdt_property *prop;
-    int i;
-    int banks;
-    const __be32 *cell;
-    paddr_t start, size;
-    u32 reg_cells = address_cells + size_cells;
-    struct meminfo *mem = data;
-
     if ( address_cells < 1 || size_cells < 1 )
     {
         printk("fdt: node `%s': invalid #address-cells or #size-cells",
@@ -154,27 +184,7 @@ static int __init process_memory_node(const void *fdt, int node,
         return -EINVAL;
     }
 
-    prop = fdt_get_property(fdt, node, "reg", NULL);
-    if ( !prop )
-        return -ENOENT;
-
-    cell = (const __be32 *)prop->data;
-    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
-
-    for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
-    {
-        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
-        /* Some DT may describe empty bank, ignore them */
-        if ( !size )
-            continue;
-        mem->bank[mem->nr_banks].start = start;
-        mem->bank[mem->nr_banks].size = size;
-        mem->nr_banks++;
-    }
-
-    if ( i < banks )
-        return -ENOSPC;
-    return 0;
+    return device_tree_get_meminfo(fdt, node, "reg", address_cells, size_cells, data);
 }
 
 static int __init process_reserved_memory_node(const void *fdt, int node,
@@ -195,13 +205,7 @@ static int __init process_reserved_memory_node(const void *fdt, int node,
 
 static int __init process_static_memory(const void *fdt, int node, void *data)
 {
-    int i = 0, banks;
-    const __be32 *cell;
-    paddr_t start, size;
-    u32 address_cells, size_cells, reg_cells;
-    struct meminfo *mem = data;
-    const struct fdt_property *prop;
-
+    u32 address_cells, size_cells;
 
     address_cells = device_tree_get_u32(fdt, node,
                                         "#xen,static-mem-address-cells", 0);
@@ -213,33 +217,9 @@ static int __init process_static_memory(const void *fdt, int node, void *data)
                  "\"#xen,static-mem-address-cell\".\n");
          return -EINVAL;
     }
-    reg_cells = address_cells + size_cells;
-
-    prop = fdt_get_property(fdt, node, "xen,static-mem", NULL);
-    /*
-     * Static memory shall belong to a specific domain, that is,
-     * its node `domUx` has compatible string "xen,domain".
-     */
-    if ( fdt_node_check_compatible(fdt, node, "xen,domain") != 0 )
-    {
-        printk("xen,static-mem property can only be located under /domUx node.\n");
-        return -EINVAL;
-    }
-
-    cell = (const __be32 *)prop->data;
-    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
-
-    for ( ; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
-    {
-        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
-        mem->bank[mem->nr_banks].start = start;
-        mem->bank[mem->nr_banks].size = size;
-        mem->nr_banks++;
-    }
 
-    if ( i < banks )
-        return -ENOSPC;
-    return 0;
+    return device_tree_get_meminfo(fdt, node, "xen,static-mem", address_cells,
+                                   size_cells, data);
 }
 
 static int __init process_reserved_memory(const void *fdt, int node,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161423.296402 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gny-0004ZS-6P; Wed, 28 Jul 2021 10:28:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161423.296402; Wed, 28 Jul 2021 10:28:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gny-0004ZH-37; Wed, 28 Jul 2021 10:28:50 +0000
Received: by outflank-mailman (input) for mailman id 161423;
 Wed, 28 Jul 2021 10:28:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8gnw-00040B-IT
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:48 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.15.59]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id abc0f5d9-05a3-4f5c-a98b-6c49918dfb7c;
 Wed, 28 Jul 2021 10:28:46 +0000 (UTC)
Received: from AM6PR0502CA0066.eurprd05.prod.outlook.com
 (2603:10a6:20b:56::43) by VE1PR08MB5213.eurprd08.prod.outlook.com
 (2603:10a6:803:10d::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.31; Wed, 28 Jul
 2021 10:28:43 +0000
Received: from AM5EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:56:cafe::43) by AM6PR0502CA0066.outlook.office365.com
 (2603:10a6:20b:56::43) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:43 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT013.mail.protection.outlook.com (10.152.16.140) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:43 +0000
Received: ("Tessian outbound 5f693336bfca:v100");
 Wed, 28 Jul 2021 10:28:43 +0000
Received: from 84c1a0941bfd.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 3284B5BD-9FC9-4E3E-9E3A-AEB518B68198.1; 
 Wed, 28 Jul 2021 10:28:34 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 84c1a0941bfd.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:34 +0000
Received: from AM6P194CA0020.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::33)
 by AM9PR08MB6769.eurprd08.prod.outlook.com (2603:10a6:20b:2fd::22) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:33 +0000
Received: from VE1EUR03FT055.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:90:cafe::16) by AM6P194CA0020.outlook.office365.com
 (2603:10a6:209:90::33) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:33 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT055.mail.protection.outlook.com (10.152.19.158) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:33 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:29 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: abc0f5d9-05a3-4f5c-a98b-6c49918dfb7c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ckLezNToPFFF/X08RBBj0Q+V9x7GEG2pfO9+DHh3puY=;
 b=f/P5Y/wSdpBR5rkK1QGMMf7HeRcTeEx6cnbIYqrFw42EuwGvke2JMuNIHYLOzCAHqzcjTEEGEQufNtc4XVq4MuCJFVezjroMgik0YU5eem27eN2v3bRhXIei2wUSvJTleqXh3F2ZuIzi26BNJ5pQgDkhi8XE0wDIoDkDht+ThNo=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 4e3fb8d2def9c618
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hp1U1SOPp4BNb7yR4ExYxZvZyKhfkEBp2R/jVYTqXLryvZBCn+T6MWrX9VpU2LR4ouWzBxAVyeuzJm1LXGIKH9S3LmzujssyA1JdGGOuagfz1Bs7zLxY3IFoOUUekoYnp8pI0XNOe6OOiSFHlSpc3dlqk7hHD7AqJGtsVmhsaejFw0VzoPqaqMzpGNH8CkWJmFckdKc/NYe5oshgQFxl//Wui1eI+dTDoEh2RLbjZT1wt3RUGo6ZwFmlYQivH2o3K6hUSd/Dzuj7hP5C7GCRv9IRNS6X935wXb15NiJYJyClpxgqPpaZLq/+itSFFkdFB5c9JTnxb1RwsGmdvhkT1g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ckLezNToPFFF/X08RBBj0Q+V9x7GEG2pfO9+DHh3puY=;
 b=ne9Oh78pwtdVmSLofORQJl9GqYsFfUwwb+XMMr12d/3Ae8Ix7OCCBMtZgZLIX//ROjdveHvTyVIeWVBXJvOYP5NQgwHc+6bVMaiogr+pEoBTjfT1zMbKGWXI9q4aY9RJ4xVIpPU4p5HRRmqEa96ve8RQ7Y0x56WibDvCN4zDbaX2QbfIthK8meXBH1KFsT0djNKDr+toCMEI+US7CyiQbHtrs1HOhCPLfb6Wf2vcLgdN7rZHMCEleEOanG1wEWF4iYwbn3f05xFl2NVrQGiVYu7LTrG4iFQod+AaHH8M665TPgosRUHwIjFN4TfTphN5FX+Ih5kaCItFJHKBtodWFw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ckLezNToPFFF/X08RBBj0Q+V9x7GEG2pfO9+DHh3puY=;
 b=f/P5Y/wSdpBR5rkK1QGMMf7HeRcTeEx6cnbIYqrFw42EuwGvke2JMuNIHYLOzCAHqzcjTEEGEQufNtc4XVq4MuCJFVezjroMgik0YU5eem27eN2v3bRhXIei2wUSvJTleqXh3F2ZuIzi26BNJ5pQgDkhi8XE0wDIoDkDht+ThNo=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 03/10] xen/arm: handle static memory in dt_unreserved_regions
Date: Wed, 28 Jul 2021 10:27:50 +0000
Message-ID: <20210728102758.3269446-4-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 452ae837-1d2f-4c92-da77-08d951b279b6
X-MS-TrafficTypeDiagnostic: AM9PR08MB6769:|VE1PR08MB5213:
X-Microsoft-Antispam-PRVS:
	<VE1PR08MB521347198C1FC0FF1BE89BEEF7EA9@VE1PR08MB5213.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:1265;OLM:1265;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 FPD3me3Jq5b0hCuDsyRc9oG+eyFtm6Vmp5vy+WfckePMohCcwCTzYgU9wIavR1Q9JL762UCbJ/WQx1QgH8GmP2WUgD8GYx85TJXi2hx43d2aR8IeP6Jj9mH4pcpuir3DvdlfPikY2eXu547Pk+8A556eFIMQFL1mgHyTlZ3LcWn0oPOvHlcU1jyapMihZV0Y89OdB9qbW/Q6Fkym5uoXRkYtiUgVtXkUrG8fa/SrwkfSYMUq8nyI7SreRY6/LN2n21ZKWciLjA/y9UmVetUSWDhDX6VEs82aj+5hObhutXTT82U2gAh5ok6+TRAOW8IJnSBjKCDL3La4ar75YqfFVsRgWBamjZRApuzDtrwPhdeEO4xyhN9U4e8BEB2V3Kj6hm9Uoki3byRaeq5vcDPxSRmtfD0O5mTxYU5asugLEcLwmx8nMkUt0JGXBj73qt2xTMOht1Jy632LZ2Lnz2yJfjOW498EiuwmVw1TOy7xrIytPMXL9lRSJw0cXM6AM69vdbAXUtw8fGS5tbu0fgWvEKBCprw+2yARN2+YvgBHtz7L3F+PpV+CGXMzP0Fa/tVq7mzJLBtbndyfaWenZbi2NAkU97qJsGnI2aLLD7FqZjELufIC/Sh+WEZPaLvC5LIZpX49KP8PoA4qX+R5wUU2ieNG6DKuw4jnCtSnhgqRnk/wehmjMWIb9RuAtvZc8h+bQoQ/N6HKhB+4fZZfQybF/umEWfz90myN4bU6OqSZz9A=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(36756003)(83380400001)(26005)(508600001)(7696005)(336012)(356005)(70586007)(54906003)(36860700001)(426003)(186003)(5660300002)(70206006)(2616005)(44832011)(110136005)(4326008)(47076005)(316002)(86362001)(2906002)(1076003)(8676002)(8936002)(82310400003)(6666004)(81166007)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6769
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	bbb6e91e-29d4-4524-f2e2-08d951b27374
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	xOdPAkG45Ild5qv3eQZR06/pPefZKTSxxIpPOpqp9ZYvvavjLgZW15lPEIWzsxNA65mTczKJbtmFMUUA8rjIhUQKwPcXKMv1zASbrGuwF2gjpVA7khKdasC9749iiDi+hKN/N9WlAAirXsFxm+O6hg9LgQORFqWaJHCzvVAtuu4OctoW3/mNbQiYB3yxo4Qd9vVRGp2QJy/fdME2PhN6sB/ElFQfVqouQsSsyyttxd0lh5sRyj6u0ppeWZmLrOoJO21a4Gsuxba8vJziiOgGgqA1Ehf96LF5BhC7O6sPCLtjnjoAIwh1v29WQYuywpuhbL9Gg/g/Qj+HJCvwDVb0pdV+aVR4/8TcIWm9ZOdoQICGqbdk2JpFzxykiFkn+Ww9pVbqcMMfkpfG0URrHbVRe2Sz7SLYpaYwvpEHHnkLUHuhun1iESoVmQcey5l7PdisDcq/r4R2j1Es2Yf2v9ycGsFdZcDNDCMOiFlb2VXbpqvUxql1zLMkGxBU6GTbuLgfi+0LR6oerVFRtQKOTUQy5C3Gx1uV58rDvU0jLGF6fB/eFT/YRYWvgr2dXevbmfbxdrE0tEiD22oOAyb53SMMaLjT/b4R5I8K1GdUlQ0PP7Grm6+iG0SHqYtUp8FkfKszucI9cXMUkXLl3eBVp8adZe/ZYSwbPy1gYy0EeZALCnqrgG+zXYii/56MfT7LUCLj3/OugNMtmWPmbm/mbNap8Q==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(39850400004)(346002)(136003)(46966006)(36840700001)(81166007)(110136005)(70206006)(70586007)(186003)(82740400003)(336012)(316002)(82310400003)(83380400001)(54906003)(7696005)(478600001)(426003)(1076003)(47076005)(8936002)(36860700001)(6666004)(26005)(86362001)(2616005)(5660300002)(36756003)(4326008)(2906002)(8676002)(44832011);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:43.7121
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 452ae837-1d2f-4c92-da77-08d951b279b6
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5213

static memory regions overlap with memory nodes. The
overlapping memory is reserved-memory and should be
handled accordingly:
dt_unreserved_regions should skip these regions the
same way they are already skipping mem-reserved regions.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 xen/arch/arm/setup.c | 47 ++++++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 17 deletions(-)

diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 63a908e325..f569134317 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -200,6 +200,13 @@ static void __init dt_unreserved_regions(paddr_t s, paddr_t e,
                                          int first)
 {
     int i, nr = fdt_num_mem_rsv(device_tree_flattened);
+    /*
+     * There are two types of reserved memory stored in bootinfo, one defines
+     * in /reserved-memory node, the other refers to domain on static allocation
+     * through "xen,static-mem" property.
+     */
+    int nr_rsv_type = 2, t = 0, prev_nr;
+    struct meminfo *rsv_type[2] = {&bootinfo.reserved_mem, &bootinfo.static_mem};
 
     for ( i = first; i < nr ; i++ )
     {
@@ -219,26 +226,32 @@ static void __init dt_unreserved_regions(paddr_t s, paddr_t e,
         }
     }
 
-    /*
-     * i is the current bootmodule we are evaluating across all possible
-     * kinds.
-     *
-     * When retrieving the corresponding reserved-memory addresses
-     * below, we need to index the bootinfo.reserved_mem bank starting
-     * from 0, and only counting the reserved-memory modules. Hence,
-     * we need to use i - nr.
-     */
-    for ( ; i - nr < bootinfo.reserved_mem.nr_banks; i++ )
+    prev_nr = nr;
+    while ( t < nr_rsv_type )
     {
-        paddr_t r_s = bootinfo.reserved_mem.bank[i - nr].start;
-        paddr_t r_e = r_s + bootinfo.reserved_mem.bank[i - nr].size;
-
-        if ( s < r_e && r_s < e )
+        /*
+         * i is the current bootmodule we are evaluating across all possible
+         * kinds.
+         *
+         * When retrieving the corresponding reserved-memory addresses
+         * below, we need to index the reserved mem bank starting
+         * from 0, and only counting the reserved-memory modules. Hence,
+         * we need to use i - prev_nr.
+         */
+        i = i - prev_nr;
+        for ( ; i < rsv_type[t]->nr_banks; i++ )
         {
-            dt_unreserved_regions(r_e, e, cb, i + 1);
-            dt_unreserved_regions(s, r_s, cb, i + 1);
-            return;
+            paddr_t r_s = rsv_type[t]->bank[i].start;
+            paddr_t r_e = r_s + rsv_type[t]->bank[i].size;
+
+            if ( s < r_e && r_s < e )
+            {
+                dt_unreserved_regions(r_e, e, cb, i + 1);
+                dt_unreserved_regions(s, r_s, cb, i + 1);
+                return;
+            }
         }
+        prev_nr = rsv_type[t++]->nr_banks;
     }
 
     cb(s, e);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161424.296414 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go0-0004sT-GK; Wed, 28 Jul 2021 10:28:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161424.296414; Wed, 28 Jul 2021 10:28:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go0-0004sI-CF; Wed, 28 Jul 2021 10:28:52 +0000
Received: by outflank-mailman (input) for mailman id 161424;
 Wed, 28 Jul 2021 10:28:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8gnz-0004GY-D1
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:51 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (unknown
 [40.107.20.43]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 97b57ffe-ef8e-11eb-9786-12813bfff9fa;
 Wed, 28 Jul 2021 10:28:47 +0000 (UTC)
Received: from DB6P195CA0019.EURP195.PROD.OUTLOOK.COM (2603:10a6:4:cb::29) by
 VI1PR0801MB2078.eurprd08.prod.outlook.com (2603:10a6:800:83::20) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.30; Wed, 28 Jul
 2021 10:28:46 +0000
Received: from DB5EUR03FT046.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:cb:cafe::a8) by DB6P195CA0019.outlook.office365.com
 (2603:10a6:4:cb::29) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.20 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:46 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT046.mail.protection.outlook.com (10.152.21.230) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:46 +0000
Received: ("Tessian outbound 69e1fde53269:v100");
 Wed, 28 Jul 2021 10:28:45 +0000
Received: from 54344488be41.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 99962709-FABF-43C0-8283-00E9E1CBF429.1; 
 Wed, 28 Jul 2021 10:28:38 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 54344488be41.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:38 +0000
Received: from AM6P194CA0008.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::21)
 by AM6PR08MB4231.eurprd08.prod.outlook.com (2603:10a6:20b:73::23) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.29; Wed, 28 Jul
 2021 10:28:27 +0000
Received: from VE1EUR03FT055.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:90:cafe::30) by AM6P194CA0008.outlook.office365.com
 (2603:10a6:209:90::21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.20 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:27 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT055.mail.protection.outlook.com (10.152.19.158) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:27 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:24 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 97b57ffe-ef8e-11eb-9786-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wYEBoopV1YlRD0XXxn0aEpPvzx8no2mTrWFdMcSB8LE=;
 b=Y9BtjPl/FkA2tS+Dh6Gk4CLfyy/bgKDs5VqNb0sYQOmQhi95ji2coXEMVmphHpwBZHiiBj41VWZS6pxplxZngv8WE5qXFlyDKarFdDx04HzSIrmR7iS4CkL96gM4uoomyqWaYHqR5LTGb1Vl9wvLnqd/eWEKU6oIeNRgmiY7QCE=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 68053127126dae03
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=exhxDZQ4YzvSFENyaGxWjUYJt2siptm9+uZTSFZI8rdum/UZHvMJHzM+WOvJMQWgaxZi/ekVBJFlzhHS8Xjhl9SZnIHgWTRSd33dJrJVTE445XBXxVgi4rOXZt1lymDic/nEaQxnJtqJyEScRB20Q7Hv4aq8o/3ay/iYfIFR3xhezWQrAqc7Ij2VH0nbX7dNBZRE4H/hdNvlORo61owTQSD6jM4f9/RSLjva5RKw2ZNhQQo8de7Rx3yXu1yFH5PeNduDCwqtWLS9p+zhF34aUBuDmO8RP9NRpxy1I8KliloVz8poFRbuc8Lq7dvWA3c0ZtFLCgx+J5hVBSkcogainQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wYEBoopV1YlRD0XXxn0aEpPvzx8no2mTrWFdMcSB8LE=;
 b=dXqqzAkcyS+wzzCARZUhpl5fyeJ1BSD+skf6UbvEQqFgE8Av3x73QLEqedk52WbnZiPCF2o5QUpL17NfqggFwZTVwOr2if/i375pCeAeL8JxHUXLt9mDCPLAQziyP/TMHcoXCPo9dMRWwb8AhM+n5JYOM63uZBflD1z9dpaS81bBQRgJcv4ewrweZSShocJEBQETLwdZpbzri/u0onY3+7ABY31qmU3MT4HSNCdhEjzsZPJOBQVrvmvZ/rfu+KT2osQILeOYl/BbWRX6s0H+uOXkjNBpje7WNXmoZZEyi4tV6YC4FPFvKYwqSC486QjWea02wjMCgRy7nHIw71Ma9w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=wYEBoopV1YlRD0XXxn0aEpPvzx8no2mTrWFdMcSB8LE=;
 b=Y9BtjPl/FkA2tS+Dh6Gk4CLfyy/bgKDs5VqNb0sYQOmQhi95ji2coXEMVmphHpwBZHiiBj41VWZS6pxplxZngv8WE5qXFlyDKarFdDx04HzSIrmR7iS4CkL96gM4uoomyqWaYHqR5LTGb1Vl9wvLnqd/eWEKU6oIeNRgmiY7QCE=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 01/10] xen/arm: introduce domain on Static Allocation
Date: Wed, 28 Jul 2021 10:27:48 +0000
Message-ID: <20210728102758.3269446-2-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a5a95fab-0673-4843-21b4-08d951b27b0d
X-MS-TrafficTypeDiagnostic: AM6PR08MB4231:|VI1PR0801MB2078:
X-Microsoft-Antispam-PRVS:
	<VI1PR0801MB2078F33399F40A513FAC8241F7EA9@VI1PR0801MB2078.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 50P1UrHuS14tDk4UIoBjbptLM5+wdyd3pVd0wbanx6cdMSnUbSd4KemLNH0go7i131U5acFwDFFWoEMiDM4BRAfHOuUMLnRciEG9kJKt+yoi2Q9koks/ynsz7H5sHLWMS1UZ46MHMcQsa1f8HwaTxmgDLjTUAeMyJAxoA+rnFI+7skLpbr0tJYXkh+McXOLIb9hvsDCQdh5oBRwS/SFVA6arnA5NiPvRI5XIM8rysojmQRkWTZjdoInqogSO8ppcknnIYj7UFa7Z/ejilxW13JBSMoc1QtiNcfJmE5N6w9T0fYl9iZgwwDo3MxfF8exIJhLQ0trHqZd3Nqy4iybkftGe1BFgZOKhlTSX9KOo1rT3PIbufEQCtRMLu1ePZFqOwZqzncXsjDpW2P9aWrVMBcoF0o7YrMU4Bq4LQH2U9YU4nyMu9M+IaD8tmMU/eapzcUaij+s126zC5ofep6Fs9021m40D28KSIF2mC0iICf3S2pKaAGv9QwfPWdJaZCGQUS07ipqv6ANMOsdhR6sLMztIAaTOrmELt44IIbHBg5kOeJ4K+FKFw9G8ltV7H3IvVEjbuSSaTUjOvPZHXNGkaxyxFxy89ych3PrmSQj7ZpH2wAoHtL3zR1d/LEdX9IluoaPmMNsBl+7+JrFKdYFYRRqrqt6SX5TdVyxW6DHit8ce6lTBuFwGkMB40jQm0x3BtVRXIArVQ4qHBTnKLZ8KW1NYpvlk6NgKWQt2W8NN98g=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(346002)(376002)(39850400004)(136003)(36840700001)(46966006)(478600001)(4326008)(8676002)(8936002)(54906003)(356005)(82740400003)(81166007)(44832011)(47076005)(426003)(1076003)(26005)(336012)(2906002)(316002)(70586007)(70206006)(2616005)(86362001)(82310400003)(36756003)(186003)(7696005)(110136005)(83380400001)(36860700001)(6666004)(5660300002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4231
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT046.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	c86e4c30-d395-47a6-9915-08d951b27008
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	GEMhiwZ8/cuiRpWH0Yq20IHSH2bL8gh1Cust1bKxzjzjkgiiv12pUetlTSY0ACjyOZ/rqKswclwOfPyG4hePnyavBKBF91C7SIaYdxypv3V2KNzp1gtWo9nGHXtkxg62wjQgWtRl6gjyWNRveMF4eWkVNOlxFuuwqCszEHCmoonXQqpLpj+ZxDHnUycX53EliELRIUf+RbiToARhGgNxv1Nrq4uVtPH+sQPT/oRCJVq1JvAhJ+CYWZfc8ug3DohUQQ7tQqXgtnLc1JASZw6AJMFgeoiQAy3aGmyy4iL/y8dJsIgyHT90bGdh6dDJVnHNTrGUyHCXFBTU0rVvEVyOXbClyBIQNprDVxT6Wnvfbn1ZtnJyOUstWm/mT4yUU9j+kT9a2yrgEQiAzyR8lPBwBEcrM22IDyXI7Ag1b6A7FTCYoxQH7v+68Jb/hrSrUqTLRTzBq2hBQwf4qizX3nrA2OF1Fz5Sr9mZ7BwmYJk/vHxWjYxAfsoTkFlW7pIjI/SnAEayhThxO2Yf3ZXi2CFEC/6aQBZ3DEi2C6XmYJWVWcL3GU3nt9RX9hgUGraL/ZvJb9dNgFgz3oNkkUOfz4wsSuk4Cq4FSugn3liKwzjD820jAjg0EByYM3uuRPN4Qeqjqj9axDeJtdih2qssHJnUz0ZCOHBn0rFgzUr63Mzilt8AlltJriitw9qJ0+JgGngWVJc/TMbur6irudTQLd26wg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(136003)(396003)(346002)(39850400004)(46966006)(36840700001)(82740400003)(70586007)(83380400001)(70206006)(82310400003)(186003)(7696005)(110136005)(86362001)(54906003)(426003)(2616005)(26005)(44832011)(5660300002)(316002)(8676002)(8936002)(336012)(2906002)(81166007)(4326008)(6666004)(36860700001)(47076005)(1076003)(478600001)(36756003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:46.0042
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: a5a95fab-0673-4843-21b4-08d951b27b0d
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT046.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB2078

Static Allocation refers to system or sub-system(domains) for which memory
areas are pre-defined by configuration using physical address ranges.
Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the
beginning, shall never go to heap allocator or boot allocator for any use.

Domains on Static Allocation is supported through device tree property
`xen,static-mem` specifying reserved RAM banks as this domain's guest RAM.
By default, they shall be mapped to the fixed guest RAM address
`GUEST_RAM0_BASE`, `GUEST_RAM1_BASE`.

This patch introduces this new `xen,static-mem` feature, and also documents
and parses this new attribute at boot time and stores related info in
static_mem for later initialization.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 docs/misc/arm/device-tree/booting.txt | 40 +++++++++++++++++++++
 xen/arch/arm/bootfdt.c                | 51 +++++++++++++++++++++++++++
 xen/include/asm-arm/setup.h           |  2 ++
 3 files changed, 93 insertions(+)

diff --git a/docs/misc/arm/device-tree/booting.txt b/docs/misc/arm/device-tree/booting.txt
index 5243bc7fd3..2a1ddca29b 100644
--- a/docs/misc/arm/device-tree/booting.txt
+++ b/docs/misc/arm/device-tree/booting.txt
@@ -268,3 +268,43 @@ The DTB fragment is loaded at 0xc000000 in the example above. It should
 follow the convention explained in docs/misc/arm/passthrough.txt. The
 DTB fragment will be added to the guest device tree, so that the guest
 kernel will be able to discover the device.
+
+
+Static Allocation
+=============
+
+Static Allocation refers to system or sub-system(domains) for which memory
+areas are pre-defined by configuration using physical address ranges.
+Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the
+beginning, shall never go to heap allocator or boot allocator for any use.
+
+Domains on Static Allocation is supported through static memory property,
+defined under according /domUx in the name of "xen,static-mem", which are
+specifying physical RAM as this domain's guest RAM.
+The size of address-cells/size-cells must be defined in
+"#xen,static-mem-address-cells" and "#xen,static-mem-size-cells".
+
+On memory allocation, these pre-defined static memory ranges shall be
+firstly mapped to the fixed guest bank "GUEST_RAM0". Until it exhausts the
+`GUEST_RAM0_SIZE`, then it will seek to `GUEST_RAM1_BASE`, and so on.
+`GUEST_RAM0` may take up several pre-defined physical RAM regions.
+
+The dtb property should look like as follows:
+
+    / {
+        chosen {
+            domU1 {
+                compatible = "xen,domain";
+                #address-cells = <0x2>;
+                #size-cells = <0x2>;
+                cpus = <2>;
+                #xen,static-mem-address-cells = <0x1>;
+                #xen,static-mem-size-cells = <0x1>;
+                xen,static-mem = <0x30000000 0x20000000>;
+                ...
+            };
+        };
+    };
+
+DomU1 will have a static memory of 512MB reserved from the physical address
+0x30000000 to 0x50000000.
diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index 476e32e0f5..d2714446e1 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -193,6 +193,55 @@ static int __init process_reserved_memory_node(const void *fdt, int node,
     return 0;
 }
 
+static int __init process_static_memory(const void *fdt, int node, void *data)
+{
+    int i = 0, banks;
+    const __be32 *cell;
+    paddr_t start, size;
+    u32 address_cells, size_cells, reg_cells;
+    struct meminfo *mem = data;
+    const struct fdt_property *prop;
+
+
+    address_cells = device_tree_get_u32(fdt, node,
+                                        "#xen,static-mem-address-cells", 0);
+    size_cells = device_tree_get_u32(fdt, node,
+                                     "#xen,static-mem-size-cells", 0);
+    if ( (address_cells == 0) || (size_cells == 0) )
+    {
+         printk("Missing \"#xen,static-mem-address-cell\" or "
+                 "\"#xen,static-mem-address-cell\".\n");
+         return -EINVAL;
+    }
+    reg_cells = address_cells + size_cells;
+
+    prop = fdt_get_property(fdt, node, "xen,static-mem", NULL);
+    /*
+     * Static memory shall belong to a specific domain, that is,
+     * its node `domUx` has compatible string "xen,domain".
+     */
+    if ( fdt_node_check_compatible(fdt, node, "xen,domain") != 0 )
+    {
+        printk("xen,static-mem property can only be located under /domUx node.\n");
+        return -EINVAL;
+    }
+
+    cell = (const __be32 *)prop->data;
+    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
+
+    for ( ; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
+    {
+        device_tree_get_reg(&cell, address_cells, size_cells, &start, &size);
+        mem->bank[mem->nr_banks].start = start;
+        mem->bank[mem->nr_banks].size = size;
+        mem->nr_banks++;
+    }
+
+    if ( i < banks )
+        return -ENOSPC;
+    return 0;
+}
+
 static int __init process_reserved_memory(const void *fdt, int node,
                                           const char *name, int depth,
                                           u32 address_cells, u32 size_cells)
@@ -346,6 +395,8 @@ static int __init early_scan_node(const void *fdt,
         process_multiboot_node(fdt, node, name, address_cells, size_cells);
     else if ( depth == 1 && device_tree_node_matches(fdt, node, "chosen") )
         process_chosen_node(fdt, node, name, address_cells, size_cells);
+    else if ( depth == 2 && fdt_get_property(fdt, node, "xen,static-mem", NULL) )
+        process_static_memory(fdt, node, &bootinfo.static_mem);
 
     if ( rc < 0 )
         printk("fdt: node `%s': parsing failed\n", name);
diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h
index c4b6af6029..e076329fc4 100644
--- a/xen/include/asm-arm/setup.h
+++ b/xen/include/asm-arm/setup.h
@@ -74,6 +74,8 @@ struct bootinfo {
 #ifdef CONFIG_ACPI
     struct meminfo acpi;
 #endif
+    /* Static Memory */
+    struct meminfo static_mem;
 };
 
 extern struct bootinfo bootinfo;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:55 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161425.296426 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go3-0005Cv-2U; Wed, 28 Jul 2021 10:28:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161425.296426; Wed, 28 Jul 2021 10:28:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go2-0005Cg-TS; Wed, 28 Jul 2021 10:28:54 +0000
Received: by outflank-mailman (input) for mailman id 161425;
 Wed, 28 Jul 2021 10:28:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8go1-00040B-Ie
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:53 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe0d::628])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7a0e5ef1-843b-4116-aa70-f155df538fc3;
 Wed, 28 Jul 2021 10:28:49 +0000 (UTC)
Received: from DB6PR0501CA0044.eurprd05.prod.outlook.com (2603:10a6:4:67::30)
 by VE1PR08MB4974.eurprd08.prod.outlook.com (2603:10a6:803:111::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Wed, 28 Jul
 2021 10:28:47 +0000
Received: from DB5EUR03FT026.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:67:cafe::16) by DB6PR0501CA0044.outlook.office365.com
 (2603:10a6:4:67::30) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.19 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:47 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT026.mail.protection.outlook.com (10.152.20.159) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:47 +0000
Received: ("Tessian outbound 1942ea606101:v100");
 Wed, 28 Jul 2021 10:28:47 +0000
Received: from 824baf3abbc7.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 18516FEE-9590-4434-9503-CB263F55DF89.1; 
 Wed, 28 Jul 2021 10:28:41 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 824baf3abbc7.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:41 +0000
Received: from AM3PR07CA0090.eurprd07.prod.outlook.com (2603:10a6:207:6::24)
 by AM0PR08MB4580.eurprd08.prod.outlook.com (2603:10a6:208:10c::21) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:40 +0000
Received: from VE1EUR03FT017.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:207:6:cafe::73) by AM3PR07CA0090.outlook.office365.com
 (2603:10a6:207:6::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.7 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:40 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT017.mail.protection.outlook.com (10.152.18.90) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:40 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:37 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:35 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7a0e5ef1-843b-4116-aa70-f155df538fc3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=aq/CVp/Ccy89yXBl4+lKWxTcJAN2riHCxWA4scIZ/gk=;
 b=y89XdKUP6fMzJgqTnuICOwWs1J4FA21prd8h4m64CE0HmvURKkM633vRr57CoLwynTl8n9fUpqHvBsiUfJEcgvC6Nu2pWuPNCHhZjekaSH8LVgwPaCcTr2/ntCzWA1w7ms+RF7hALbx8btGKP33U5C+uUt9Qg8EgNxElEkvcsrw=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 87a4df21130eecb1
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UyawuLUc0VdWsIVBAc4Ffaqr0TTx+O64R7m0SGgXVlRmJ2YFDg/OfJrKVwOHAKWwnEZ0cnxkARmWqtYoQnxLqLcHpn13fzQxhvspME/eRdrXXaPshO7YrFfKkfj662/ti9FKIou81tW2BNGrrOVWZ4iMPHI0aL1Ijown/+bLK6gyY8nfTZ73UeLQZHrH539BdWj8a0ffvI2vrB6+eTZ+YgegDz4oxgrZVO0SWC+kJ3s/ulzKW/6Zep6KozgWS0/9TivgxHpIDGKl9EM74TKSkdoZ6d66+9/vXifc69/eAOpwDIhAuufu6kQn7Px1hVmb5ac6j5LrrN6ucMuJiN1SmA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=aq/CVp/Ccy89yXBl4+lKWxTcJAN2riHCxWA4scIZ/gk=;
 b=An0ALzUDtTqXGssePqPdmijk+t8AGpKGRuMaLwpnozE5Ekfc0PXfBhkKqvTbytJeco1wEXehnCjGq3I5DnHc0JLRBG9VU79VsHeWvyO0WiJqABcisr9KZkTe7BYmSN1xdvdk+3iAHcGROm+EBUehd8oSsLa/Ah56IOznp16awo8BWVEMCQFYEfikQB8w9XO16SkODYTVVlfTeNdzKfzseVKfpvC4MNv4G4HIyuG4R5wP680fiKIt7GViqx2AtDDg8Ys+CEF4Mo4PsCJKola4M7TnTRCsaCfJMoLChzuG7J2tTuSjyGuz1WHxxMv2uvo2W1Cr1J6Jv6XePP3nXjnrbg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=aq/CVp/Ccy89yXBl4+lKWxTcJAN2riHCxWA4scIZ/gk=;
 b=y89XdKUP6fMzJgqTnuICOwWs1J4FA21prd8h4m64CE0HmvURKkM633vRr57CoLwynTl8n9fUpqHvBsiUfJEcgvC6Nu2pWuPNCHhZjekaSH8LVgwPaCcTr2/ntCzWA1w7ms+RF7hALbx8btGKP33U5C+uUt9Qg8EgNxElEkvcsrw=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 06/10] xen/arm: introduce PGC_reserved
Date: Wed, 28 Jul 2021 10:27:53 +0000
Message-ID: <20210728102758.3269446-7-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 10c93beb-31dc-4980-060b-08d951b27c05
X-MS-TrafficTypeDiagnostic: AM0PR08MB4580:|VE1PR08MB4974:
X-Microsoft-Antispam-PRVS:
	<VE1PR08MB4974289D30AD656B0C64461CF7EA9@VE1PR08MB4974.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:2276;OLM:2276;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 /zSPlKVUKfFkwodmYumipm35csRyivtLk04Z3AFbmpNoI+6cC3XlBhK3a8D3g3nsiU8Sk3NUyStJBuOnKgVwNB7UyFhble0djf8CUfcwWAIbLORMY3VV+iQy4LnhkLGN1/BUGfJD75WUkw8Nb6eeZ2+WzotyarGaGo5oxD2AFpx8nxozDPiSAr8Nfx1QfaIY5J7j1mDJ01ILxsV89FwmQ9cb55fyEwNIdmgRqab5iSF9c9O4fqkgLv/yJiCkbCTY9fCKacSjlpqbRndcWvcBP0X54k06xKJWq6OfH6FrPqmhdXtas0BQuGLFdc2cq/RZYJtEFIRCAwhOVjRuM0VUYzPYzb2zJVbNT8MO0kjbe0VUN4Vt7hAKdNCupTHWZcpNXS3qv0xSzPobKmgx64JHlMkfSOj3SUQEGUeiQs3GU/0mPQHEsYfbWd2NePgfaM/RLZ71QPQpJeBVfc2mmhZ40Yn8VKaIB7pZnVAWhUDZX28jqvGVDZOG+2253TP+mwPgs6MKMMPLtIXPKNJJ9kocbi4BygwW0VxCKK2hUdt5RnCPM2vv/HsFfc7jUb9yvEId+90LO5WLVWbZT3ubGPVB20ljjoFNJl/6C3kPNVPXjh1qodL+8cIfo1j7SgGLm9JWXcuWKYnqIPMYAz9B1Mdhs+cTnqKPsXgval9bWmv4jkPxM9x7xBnbZ28/d09NT96ZTqsW85Xnt1YUgxFSHICUYxhuZRGPUuXgz3p4qEVx77M=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(39860400002)(136003)(346002)(376002)(46966006)(36840700001)(336012)(478600001)(2906002)(26005)(6666004)(186003)(82310400003)(36756003)(7696005)(86362001)(356005)(5660300002)(44832011)(81166007)(36860700001)(70586007)(83380400001)(2616005)(426003)(1076003)(47076005)(54906003)(70206006)(110136005)(316002)(82740400003)(4326008)(8936002)(8676002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4580
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT026.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	4e8eb35b-a2c9-4526-a0fe-08d951b2778b
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	2sbfYgLwNPMwhJyhR+ZdaOQj8o7X0Fx/YlcmJC//i0CKFdt7SPgVo2Z1iZyp41EE1wSQcuz+QbdRe/TrkoQS/AZYfr7Sm+9RacEJ7PYwUw32oKR/lw/9aV+oUqVYFvQdrsbACqUiBLQaGkVBJAu//QQACvmFTFhPj/Bp8fXMGKe0A0jHmYUMyCryrvgvK+re3KaStXNf6bHymYb5f2tfHwomr12wkU+TWA/USqN8zLLvqQBv9cotED1JzXX3B2aCRLQi7usHdxFT7nY+E9Bf99hLAFd8yZvKJ3jVFK36WUuWM2TYYBF6Zy4wTnYXZKmYkER3vylOSbppmbal5dVCLCgXoH+1xtRaEzEEQfGTZhf4uqYiHyUBsbfrYmFGqmDpLq94oZxF2S9m9WFf3NO14nvJ+LaKtDtnQKbgnRWwTiasRQZlKNDAN9PuioOaPCHHVwfY+aZSGH6L9p1Guk5FW2egFYRisE/XZEWcdvIYjjaITSW85IOod2JFRJoBle+SmPZN6EuwsKDXQ+u92JEXhuIu/U39/9J8Y5B4dpKFRE/RQr/urw5eTBVeWSwcFjr/JUItoAKd6ciD5ILYS00/i6oKt7a505jMlSZ9zKNuPKVMX6MsunT0/ufvfX5yKCSmkEnWjza27KXerBZ7rTejPfspA7XRV7wDSFAfriQDG3DLSjCxwM+FnzPT9kyJ8uXefllVe1TNC+PHo6lgdrA3sA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(136003)(39850400004)(396003)(346002)(376002)(36840700001)(46966006)(6666004)(54906003)(110136005)(426003)(82740400003)(4326008)(36756003)(83380400001)(5660300002)(44832011)(70206006)(2616005)(336012)(86362001)(36860700001)(316002)(47076005)(8936002)(81166007)(186003)(7696005)(1076003)(70586007)(2906002)(82310400003)(8676002)(478600001)(26005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:47.6308
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 10c93beb-31dc-4980-060b-08d951b27c05
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT026.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4974

This patch introduces a new page flag PGC_reserved in order to differentiate
pages of static memory from those allocated from heap.

Mark pages of static memory PGC_reserved when initializing them.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 xen/common/page_alloc.c  | 3 +++
 xen/include/asm-arm/mm.h | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 2acb73e323..f51e406401 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1536,6 +1536,9 @@ void __init free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
             /* TODO: asynchronous scrubbing for pages of static memory. */
             scrub_one_page(pg);
         }
+
+        /* In case initializing page of static memory, mark it PGC_reserved. */
+        pg[i].count_info |= PGC_reserved;
     }
 }
 #endif
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index ded74d29da..7b5e7b7f69 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -108,6 +108,9 @@ struct page_info
   /* Page is Xen heap? */
 #define _PGC_xen_heap     PG_shift(2)
 #define PGC_xen_heap      PG_mask(1, 2)
+  /* Page is reserved */
+#define _PGC_reserved     PG_shift(3)
+#define PGC_reserved      PG_mask(1, 3)
 /* ... */
 /* Page is broken? */
 #define _PGC_broken       PG_shift(7)
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161426.296438 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go6-0005ae-BY; Wed, 28 Jul 2021 10:28:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161426.296438; Wed, 28 Jul 2021 10:28:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go6-0005aM-7y; Wed, 28 Jul 2021 10:28:58 +0000
Received: by outflank-mailman (input) for mailman id 161426;
 Wed, 28 Jul 2021 10:28:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8go4-0004GY-D6
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:56 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.82]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 97bca0a4-ef8e-11eb-9786-12813bfff9fa;
 Wed, 28 Jul 2021 10:28:48 +0000 (UTC)
Received: from AM7PR04CA0005.eurprd04.prod.outlook.com (2603:10a6:20b:110::15)
 by DB7PR08MB4619.eurprd08.prod.outlook.com (2603:10a6:10:7d::31) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.28; Wed, 28 Jul
 2021 10:28:46 +0000
Received: from AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:110:cafe::28) by AM7PR04CA0005.outlook.office365.com
 (2603:10a6:20b:110::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:45 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT056.mail.protection.outlook.com (10.152.17.224) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:45 +0000
Received: ("Tessian outbound 69e1fde53269:v100");
 Wed, 28 Jul 2021 10:28:44 +0000
Received: from 039df29cc42c.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 B89B1D88-8B61-4AC3-BA55-DD72599D427F.1; 
 Wed, 28 Jul 2021 10:28:38 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 039df29cc42c.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:38 +0000
Received: from AM6P194CA0025.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::38)
 by AM0PR08MB5106.eurprd08.prod.outlook.com (2603:10a6:208:160::23) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.31; Wed, 28 Jul
 2021 10:28:36 +0000
Received: from VE1EUR03FT055.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:90:cafe::1f) by AM6P194CA0025.outlook.office365.com
 (2603:10a6:209:90::38) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:36 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT055.mail.protection.outlook.com (10.152.19.158) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:36 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:32 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 97bca0a4-ef8e-11eb-9786-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HF/qyGehAhKUdJPQWT1CPjsg2X/NGFj5Lk0x43C30TM=;
 b=cdPPUcV+1e8SXkIsZs1gg9C7NiEkbe9aVZY8iutpj+rMIt4VtYMaItEmsIo7HyoljpgVuOEa/pXxoHyrRrPDQGqv68uMv041RChQRUvN7oUHHXCd7bVmlXlfJsRTWazSP7sZAv7VA2+QTQS2UMjgJSZYISZ+AKO++IImP6j/Wiw=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: bb1446495a968a1b
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=U2IrLBCRJtYs2MOOM6mD3+8Eym8tzTSVtAYbT/RT/4tHrDxhKoGsV5D8vl07fe7UJRdHoY8AqseEMrouuW6giR+S70its4G+ComJPXWNN+wGNsiZjIpsLzmypXepftJlGZ9xzfe9/mw1lbD7QGb3YTTnXWsq5pY1Xlty/MioTu6BK8kSG/W0k3wKt7qsLN9gyYUoW/q2ECLRSel2zuxN0J/5ZM5usIjOp4WAdDRigmDidU2rNFbct/kp42KAesmB6OeQ0NP2w2unr89wjsBk6tlhhfxkDjkZtBzuKWDNojiztqDXQSLHWtGB8sua6FxYvWo9O0HaJCpOW2tjVecANQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HF/qyGehAhKUdJPQWT1CPjsg2X/NGFj5Lk0x43C30TM=;
 b=Df/IECZkkgsiOalG3lSABQTk3SKhBcw9GJ6AnxsmSSvftIg6Vg0UeE6zp+uBgNMqMjIthk9px3K1ozTMP6XEKVLjXJYDE0RKN4RuwPM1WQyWjbxAk9ogXY8n030FoE+8kOH6gnhT57334hajIOqEJPSj2fZQYCAWYXBOSP5u1G/SrL4Y9blPalrbAJ22N7qui3jf8LYRVBxml6sFWFPVmn1UWrK5ysM7Dm4ZIZFtwnGa0P2UDfbOnvfN1XmRzRNsTReZRthfvk6ShNW9aS3cJa4aUgKwp6MYPZsu0mW85ShfO4XvYb4z2gQRKd4xK/aaUQcbu7fg9OJu05gj/hKhOw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HF/qyGehAhKUdJPQWT1CPjsg2X/NGFj5Lk0x43C30TM=;
 b=cdPPUcV+1e8SXkIsZs1gg9C7NiEkbe9aVZY8iutpj+rMIt4VtYMaItEmsIo7HyoljpgVuOEa/pXxoHyrRrPDQGqv68uMv041RChQRUvN7oUHHXCd7bVmlXlfJsRTWazSP7sZAv7VA2+QTQS2UMjgJSZYISZ+AKO++IImP6j/Wiw=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 04/10] xen: introduce mark_page_free
Date: Wed, 28 Jul 2021 10:27:51 +0000
Message-ID: <20210728102758.3269446-5-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 73fa1d9c-c6b5-4bc3-ccba-08d951b27ab6
X-MS-TrafficTypeDiagnostic: AM0PR08MB5106:|DB7PR08MB4619:
X-Microsoft-Antispam-PRVS:
	<DB7PR08MB4619790E22FE8FF13B0A8C44F7EA9@DB7PR08MB4619.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:1051;OLM:1051;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 hoAf5LoGX1TrVUiv7AtQIpFQ3fMluhc4gwdTlADnvKOk4+IITz4jMJREhO5DzKhNeEQDiQy4tT7BmVWZxNZrN3BQ/Kq2kUfBgoGFnWRuS41WftR6rr+ngHEjTlR2U8EBXmZx/uDT6kt7QoETpo1C0pU+k/VuY18FRoHkjDPRUk5WshcBL9wZfQ8uai+OMzirmxmUroFoWwlBsl/tI16423KOivnMhjCxuLLXK164QW2TjfSKIPc9jasASnsldZi/bpKq+ubVsi8rWHhrWK/d0vkbouJlV9ktPSq2fFRv9j/puWTBiUA0PhonUJ6fL5HATUTvwKWkpfUaYkzwXy1gsIyqah7K5zNLEMjOwuOEiR4KhY52FcnJ/ZndhP6MBVhVpV4DRw/rhILq40xvwgS5/GjCYT9kHU3DZZ6fYqe0Eiv3vuD+hIblcjfktVVP7li8LN90dQxLkq+cM8rZUL0XEWCQkA+KGb3tBxLjTXrh4Ax+c8ofWPAXKgWP9xe9EZ5sC0EUClW0qy3JVd22aZrf12yK4S+GSNhNHrO66XqxC/JjsSW3JZAWJAjNBL0y7kiUaQX5coqSgWyuyztQiN/63W9UhuVUA5wJm0ynFRBoLzZohvMnI7IJdM0dPRoQToHNXPSGz3QmaFtR6ErvWsyL/QtVvIff48k96srBcIE/S6RO6yYoZwiMy40TAtAZI8nJmMdzqWcvBCBPQYDcuJYO3kEVcy1F+WHAZurnxqn41eQ=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(136003)(39850400004)(396003)(346002)(376002)(36840700001)(46966006)(186003)(36756003)(426003)(44832011)(5660300002)(47076005)(336012)(356005)(81166007)(70206006)(8676002)(86362001)(26005)(2616005)(82740400003)(36860700001)(2906002)(8936002)(6666004)(70586007)(478600001)(1076003)(4326008)(82310400003)(316002)(83380400001)(54906003)(110136005)(7696005)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5106
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	dc91a438-3771-4822-d54f-08d951b2753a
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	E63TuJlGhhLEKfnysFnxKaHnXtvt1D8KchN/YiDaHyIBZPyT6IWKnWC0FIUFwXAavBeaX1aJ7uCncjz7Tl1Xqrw0cfZxsSdQZ/I1dAYXkmKxuFIgp+lrTTGKgP8oEU8DZhcr6QTY98ZC8uat5n9BATXZV99DZRydgN4ItW5oabAQ8q+Zwb9Fo/lqJ1ZzrjP55Z6mCx93mQQy4VUzXX86ump5mLOR8UnfjYLEB/p1XGBMHQ8GZV7F3V9q+JW+sSDgTKCVZtTkpAq702Yu/3YaPL1xgl9Byz+NxrlHagWTY6X91CAmtYZ1lcG40oLjAZMKhuM2zfGOfHBS6TVxATVHhcXCpFTaY25+JMPtxbtG6pCISVaVspXgUXpDL7lA/YmF9FXU0MODbenkSRDW8BfjyUbqPOwP0kk4QMWwlSxMH+Y6QXBEZ1Rfbyv/5+GR4KnsTTAFlfgrv2wUTurf3ES4GKZ4GTDgHvQTrGGy0Kd8gcWse5ZNX01LkPZPxjRYzzhRb7Z6t3a8EFnR8Ot4z3xMRlYbCJwSZipikirMDOSiTOAbPqvIpiRN9/+7ha3kPcWfJxJeURQ/G6PigkM/+JdbIHYKiLVHDFflU+AdolfxhdW5Xu+vtENnmDmVLm8Kx/6+AFIutXjS3UUMMAf0vAOjOzeLmb7JRlJTInm0fRUgqyISskYgIbCAJUrMD9EQjxxGbHN0t4dwVA+DxWHehKQHqw==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(376002)(346002)(396003)(136003)(46966006)(36840700001)(8676002)(82740400003)(36756003)(110136005)(5660300002)(8936002)(316002)(336012)(26005)(86362001)(186003)(82310400003)(44832011)(6666004)(70586007)(83380400001)(81166007)(47076005)(4326008)(7696005)(2906002)(36860700001)(2616005)(426003)(478600001)(70206006)(1076003)(54906003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:45.3934
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 73fa1d9c-c6b5-4bc3-ccba-08d951b27ab6
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	AM5EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB4619

This commit defines a new helper mark_page_free to extract common code,
like following the same cache/TLB coherency policy, between free_heap_pages
and the new function free_staticmem_pages, which will be introduced later.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
 xen/common/page_alloc.c | 89 ++++++++++++++++++++++-------------------
 1 file changed, 48 insertions(+), 41 deletions(-)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 958ba0cd92..a3ee5eca9e 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1376,6 +1376,53 @@ bool scrub_free_pages(void)
     return node_to_scrub(false) != NUMA_NO_NODE;
 }
 
+static void mark_page_free(struct page_info *pg, mfn_t mfn)
+{
+    ASSERT(mfn_x(mfn) == mfn_x(page_to_mfn(pg)));
+
+    /*
+     * Cannot assume that count_info == 0, as there are some corner cases
+     * where it isn't the case and yet it isn't a bug:
+     *  1. page_get_owner() is NULL
+     *  2. page_get_owner() is a domain that was never accessible by
+     *     its domid (e.g., failed to fully construct the domain).
+     *  3. page was never addressable by the guest (e.g., it's an
+     *     auto-translate-physmap guest and the page was never included
+     *     in its pseudophysical address space).
+     * In all the above cases there can be no guest mappings of this page.
+     */
+    switch ( pg->count_info & PGC_state )
+    {
+    case PGC_state_inuse:
+        BUG_ON(pg->count_info & PGC_broken);
+        pg->count_info = PGC_state_free;
+        break;
+
+    case PGC_state_offlining:
+        pg->count_info = (pg->count_info & PGC_broken) |
+                         PGC_state_offlined;
+        tainted = 1;
+        break;
+
+    default:
+        printk(XENLOG_ERR
+               "pg MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
+               mfn_x(mfn),
+               pg->count_info, pg->v.free.order,
+               pg->u.free.val, pg->tlbflush_timestamp);
+        BUG();
+    }
+
+    /* If a page has no owner it will need no safety TLB flush. */
+    pg->u.free.need_tlbflush = (page_get_owner(pg) != NULL);
+    if ( pg->u.free.need_tlbflush )
+        page_set_tlbflush_timestamp(pg);
+
+    /* This page is not a guest frame any more. */
+    page_set_owner(pg, NULL); /* set_gpfn_from_mfn snoops pg owner */
+    set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY);
+}
+
 /* Free 2^@order set of pages. */
 static void free_heap_pages(
     struct page_info *pg, unsigned int order, bool need_scrub)
@@ -1392,47 +1439,7 @@ static void free_heap_pages(
 
     for ( i = 0; i < (1 << order); i++ )
     {
-        /*
-         * Cannot assume that count_info == 0, as there are some corner cases
-         * where it isn't the case and yet it isn't a bug:
-         *  1. page_get_owner() is NULL
-         *  2. page_get_owner() is a domain that was never accessible by
-         *     its domid (e.g., failed to fully construct the domain).
-         *  3. page was never addressable by the guest (e.g., it's an
-         *     auto-translate-physmap guest and the page was never included
-         *     in its pseudophysical address space).
-         * In all the above cases there can be no guest mappings of this page.
-         */
-        switch ( pg[i].count_info & PGC_state )
-        {
-        case PGC_state_inuse:
-            BUG_ON(pg[i].count_info & PGC_broken);
-            pg[i].count_info = PGC_state_free;
-            break;
-
-        case PGC_state_offlining:
-            pg[i].count_info = (pg[i].count_info & PGC_broken) |
-                               PGC_state_offlined;
-            tainted = 1;
-            break;
-
-        default:
-            printk(XENLOG_ERR
-                   "pg[%u] MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
-                   i, mfn_x(mfn) + i,
-                   pg[i].count_info, pg[i].v.free.order,
-                   pg[i].u.free.val, pg[i].tlbflush_timestamp);
-            BUG();
-        }
-
-        /* If a page has no owner it will need no safety TLB flush. */
-        pg[i].u.free.need_tlbflush = (page_get_owner(&pg[i]) != NULL);
-        if ( pg[i].u.free.need_tlbflush )
-            page_set_tlbflush_timestamp(&pg[i]);
-
-        /* This page is not a guest frame any more. */
-        page_set_owner(&pg[i], NULL); /* set_gpfn_from_mfn snoops pg owner */
-        set_gpfn_from_mfn(mfn_x(mfn) + i, INVALID_M2P_ENTRY);
+        mark_page_free(&pg[i], mfn_add(mfn, i));
 
         if ( need_scrub )
         {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:28:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:28:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161427.296449 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go7-0005tc-P9; Wed, 28 Jul 2021 10:28:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161427.296449; Wed, 28 Jul 2021 10:28:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8go7-0005sT-Jy; Wed, 28 Jul 2021 10:28:59 +0000
Received: by outflank-mailman (input) for mailman id 161427;
 Wed, 28 Jul 2021 10:28:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8go6-00040B-Im
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:28:58 +0000
Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:7e1b::623])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 35944c1c-e9ef-422a-b0fa-98c4a03e87c6;
 Wed, 28 Jul 2021 10:28:50 +0000 (UTC)
Received: from DB9PR02CA0009.eurprd02.prod.outlook.com (2603:10a6:10:1d9::14)
 by AM9PR08MB5905.eurprd08.prod.outlook.com (2603:10a6:20b:282::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:48 +0000
Received: from DB5EUR03FT009.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:10:1d9:cafe::e2) by DB9PR02CA0009.outlook.office365.com
 (2603:10a6:10:1d9::14) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:48 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT009.mail.protection.outlook.com (10.152.20.117) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:48 +0000
Received: ("Tessian outbound 31e6e3649d31:v100");
 Wed, 28 Jul 2021 10:28:48 +0000
Received: from e816462a8ab3.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 12E6E4CB-4FCE-4035-A7CA-30C622ABA7B7.1; 
 Wed, 28 Jul 2021 10:28:41 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e816462a8ab3.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:41 +0000
Received: from AM6P194CA0036.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::49)
 by PAXPR08MB6783.eurprd08.prod.outlook.com (2603:10a6:102:131::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17; Wed, 28 Jul
 2021 10:28:38 +0000
Received: from VE1EUR03FT055.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:90:cafe::37) by AM6P194CA0036.outlook.office365.com
 (2603:10a6:209:90::49) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:38 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT055.mail.protection.outlook.com (10.152.19.158) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:38 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:35 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 28
 Jul 2021 10:28:35 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 35944c1c-e9ef-422a-b0fa-98c4a03e87c6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=039yhm0OXE63ZaHtdlaK4YptpkTMc2iTaBz36ataqqk=;
 b=p/JMgktVy1rZtUIcyO6VvlvmcGEr+elBd4eLcAejfdMYZ9oOLeGAY2OqYtdI354/PqArhTN2EhLV7XhJGSF0UBPvk42EmnSXyI2o4ME6us/K2404ENNf3uMhKVKO7bK0nLsLy/V1VdYo+pS2loVx1aEweA5uv3zYXF0HWD9TFX0=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: f09a9c1e3d445cc8
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZafKQqpqRQ6bw/cQVGwJhOLQJWYSrE6GZLAaB2D3y2RWIfaun1ypntdIBScKWVmKYnFZKTqhtSl/E6X9iYHOAY+Y5CrkO31XNkcxPbFpED2WfmHEFFIoz0ONtDJXfneimWvsF8PyijpUciTiAPTyYm41FfB3W+d7/KytrBmw+u+OTh67v0LiHCjqGeMxLfq7APPgPK3O3sVhIFgWkh8PGOnNjxE5vZFEvW+nwilniC53U9gOYFaObmK4GcfPU4ONZodi5mwjyohl7rOfdj3drOagRpT6bckiP5hyUIhvVUdTn4mb7NMRLku1aIQZ9TTIxNNPVMm1rcnJcZ/lqjqtdw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=039yhm0OXE63ZaHtdlaK4YptpkTMc2iTaBz36ataqqk=;
 b=Vnjs7FlECBTvoa0B2PZrnD+OoTcf7PJCQlJiPlf7tDEZpK9Yi3Cket2WAcG+JxysaijVHpyZOVUfpR5mhm+UmsNkiNInsL2SoVIqUm/OmMuYvq27I3hrkdA3XPlOzmPteW3ONCCTpBj5GR+NVKc2k0ZRBnkkfSbKq+BgTKLcAEDIkldfiCqY076gX341kMOdVeMfU2Fs+TBjY+l1wSjrAx7VnLzozro8jJRQdXnSEEtN9uvpKID/x7W1NSLu3KvpnC4vjBD9tom1Lw75T4D6e3U6FcsJxm9fBfcvxjxAnjsKoqCARlRCwMn4G0kdFyWOKnhjG5zh60LhoKz8bb9APQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=039yhm0OXE63ZaHtdlaK4YptpkTMc2iTaBz36ataqqk=;
 b=p/JMgktVy1rZtUIcyO6VvlvmcGEr+elBd4eLcAejfdMYZ9oOLeGAY2OqYtdI354/PqArhTN2EhLV7XhJGSF0UBPvk42EmnSXyI2o4ME6us/K2404ENNf3uMhKVKO7bK0nLsLy/V1VdYo+pS2loVx1aEweA5uv3zYXF0HWD9TFX0=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 05/10] xen/arm: static memory initialization
Date: Wed, 28 Jul 2021 10:27:52 +0000
Message-ID: <20210728102758.3269446-6-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f0fead5a-c03d-4fb3-7960-08d951b27c47
X-MS-TrafficTypeDiagnostic: PAXPR08MB6783:|AM9PR08MB5905:
X-Microsoft-Antispam-PRVS:
	<AM9PR08MB590596C1B2A3D16735CAFFDCF7EA9@AM9PR08MB5905.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:159;OLM:159;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 79RzpEsb0lWGRVzdlwxRnTDECqQg3azhHdaYN6F5J++AcO0FwG/NYLRKZRYIdoJJHn44Xt+rGkw145pUVPgdlr8H3OG+CXnHezppwzalhm/Gc0gejVuP26uU3Wzy0+wtWBoG14x2XcGBnBmnZOXh7qNoGaN6B6p+cvpvzwujDbDragXmwBdYjM05nCmNiUWM4IChZKL+QTML+DD8fee14qRcpsFjadZEYvG0DYfnenN78LHwafCniKHEzWPGsxCaezQL40jGswxjY6TM4FtBTUzIOtpsGvtdfnmhNPZD49IdzH1TJkzV5W83AAyV8SvwutO3aFd1pGdivRcaVPZNINH8JeVljhU2qz9rxKomycEsKhDu+9c7x/8duxKIN0i/rEEQnkHnOPfR1rQlD8/xKPAn91/84NzUr1HOKHWYV1EK2O1xMlzNyuXBkhyp4cqacK8c6Y4zm6yceBAWbtF2bx9fjNxdjAm5TfVkjQNlIiStriU3Rm9XhodoaVoYdSWgWxsNkXh1utp9WzkWPFztgdjWsqgXUoC6RA6/a3tKdzZ7quzyMY1DwfFwJLJ2r2opvkHAlyqqdilL0PZJGfgpUB0YGzj1gV7u4EQtW0HwomKG9UAdpq/PMd49X2z78T1U1vY9WP9SO49nW+ubGYLK4rDSD89bZ+78KOmLZpOA11p9t+iDuGM3iWDpnCXkmrmUq68+yD7TbmV9f3hj/PUwWil5dDU1DwewJsRffi2KE9E=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(508600001)(82310400003)(7696005)(2906002)(36860700001)(81166007)(44832011)(47076005)(186003)(356005)(8936002)(1076003)(6666004)(26005)(336012)(2616005)(36756003)(426003)(4326008)(83380400001)(70586007)(5660300002)(54906003)(86362001)(316002)(110136005)(70206006)(8676002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6783
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT009.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	ef8c5ae4-cf28-40cc-e237-08d951b27657
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	jeT0fkzksuiQjcfDR6AOkn8w6jdUuHnLRoHpLI1ROUNkc0c5v+4Fq3wLbN9/ym1ZTTjb3I5lfYJTYQNJrHe7o+LmFGODsyPKSS49kohzftOZnLC/HcfEQAI7Mhgs5/higk3koXFra7FTaP4xTELLGYvs3hzohZF6nGDArkJwP+ny8IgYie6TJQPB1bol0ssFKt2RzWV7QHrQ2xMt+WbH8dBbKXKN8HvvY21K5anLauwM1Tr21m8nQ9YG4rbOrAchBwwbztI79TTQcmEodPcqAuHOFVUHKjrB0YpKdsT38YsZmt/UpQVazNaXml6NTSIJuAurM41nGtQIRaUrXWFxap4q21yGnegLGqQ4J+bmgpILrDjt1kY+8R7FelAeQFQKT6wfPYclzajdfU612jGYckAF3Azk3gLdbGQierj3jryeROQG/vB4rz/jIRfLHUraNWNuNb27lnxNYO57DGnaCPbVsoU2M1AS+QZWMfrf83+qaN1eMZLMkJtJ4CMmQqIm4UpY+9XlmhlsL3GG+n2pI/Q6kJUNL9mG/f8Z+dez/ZDxILD8Vf9EEqAuuoFVvxKVoH7DTB9zq9eS9cenlas4/i5LKFZ7qU4k9RoCu9s6GIpiOxOZxV/1iXMl7u/ITfn4mdD4VniDL+E/JXLUxPiH4cZrxrbIqSSmtyQadFvx28HNj0rnlLGshQREuvtGy2vIKbxzvQalTrcyygxM5tlZvA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(39850400004)(346002)(396003)(136003)(376002)(46966006)(36840700001)(86362001)(8936002)(26005)(5660300002)(6666004)(54906003)(44832011)(82310400003)(8676002)(70586007)(82740400003)(83380400001)(36860700001)(47076005)(316002)(1076003)(81166007)(7696005)(186003)(2616005)(426003)(36756003)(70206006)(478600001)(110136005)(2906002)(4326008)(336012);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:48.0643
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: f0fead5a-c03d-4fb3-7960-08d951b27c47
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT009.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB5905

This patch introduces static memory initialization, during system boot up.

The new function init_staticmem_pages is responsible for static memory
initialization.

Helper free_staticmem_pages is the equivalent of free_heap_pages, to free
nr_mfns pages of static memory.

This commit also introduces new CONFIG_STATIC_MEMORY to avoid bringing dead
codes in other archs.

Put asynchronous scrubbing for pages of static memory in TODO list.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v4 change:
- move the option CONFIG_STATIC_MEMORY to common code, and with Arm
"select"ing it
- replace round_pg{down,up}() with PFN_DOWN()/PFN_UP()
---
 xen/arch/arm/Kconfig    |  1 +
 xen/arch/arm/setup.c    | 24 ++++++++++++++++++++++++
 xen/common/Kconfig      |  3 +++
 xen/common/page_alloc.c | 20 ++++++++++++++++++++
 xen/include/xen/mm.h    |  6 ++++++
 5 files changed, 54 insertions(+)

diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
index ecfa6822e4..cc7a943d27 100644
--- a/xen/arch/arm/Kconfig
+++ b/xen/arch/arm/Kconfig
@@ -15,6 +15,7 @@ config ARM
 	select HAS_PASSTHROUGH
 	select HAS_PDX
 	select IOMMU_FORCE_PT_SHARE
+	select STATIC_MEMORY
 
 config ARCH_DEFCONFIG
 	string
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index f569134317..369f6631ee 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -622,6 +622,26 @@ static void __init init_pdx(void)
     }
 }
 
+/* Static memory initialization */
+static void __init init_staticmem_pages(void)
+{
+    unsigned int bank;
+
+    /* TODO: Considering NUMA-support scenario. */
+    for ( bank = 0 ; bank < bootinfo.static_mem.nr_banks; bank++ )
+    {
+        unsigned long bank_start = PFN_UP(bootinfo.static_mem.bank[bank].start);
+        unsigned long bank_size = PFN_DOWN(bootinfo.static_mem.bank[bank].size);
+        unsigned long bank_end = bank_start + bank_size;
+
+        if ( bank_end <= bank_start )
+            return;
+
+        free_staticmem_pages(mfn_to_page(_mfn(bank_start)),
+                             bank_size, false);
+    }
+}
+
 #ifdef CONFIG_ARM_32
 static void __init setup_mm(void)
 {
@@ -749,6 +769,8 @@ static void __init setup_mm(void)
     /* Add xenheap memory that was not already added to the boot allocator. */
     init_xenheap_pages(mfn_to_maddr(xenheap_mfn_start),
                        mfn_to_maddr(xenheap_mfn_end));
+
+    init_staticmem_pages();
 }
 #else /* CONFIG_ARM_64 */
 static void __init setup_mm(void)
@@ -802,6 +824,8 @@ static void __init setup_mm(void)
 
     setup_frametable_mappings(ram_start, ram_end);
     max_page = PFN_DOWN(ram_end);
+
+    init_staticmem_pages();
 }
 #endif
 
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index 0ddd18e11a..8f736eea82 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -67,6 +67,9 @@ config MEM_ACCESS
 config NEEDS_LIBELF
 	bool
 
+config STATIC_MEMORY
+	bool
+
 menu "Speculative hardening"
 
 config SPECULATIVE_HARDEN_ARRAY
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index a3ee5eca9e..2acb73e323 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1519,6 +1519,26 @@ static void free_heap_pages(
     spin_unlock(&heap_lock);
 }
 
+#ifdef CONFIG_STATIC_MEMORY
+/* Equivalent of free_heap_pages to free nr_mfns pages of static memory. */
+void __init free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
+                                 bool need_scrub)
+{
+    mfn_t mfn = page_to_mfn(pg);
+    unsigned long i;
+
+    for ( i = 0; i < nr_mfns; i++ )
+    {
+        mark_page_free(&pg[i], mfn_add(mfn, i));
+
+        if ( need_scrub )
+        {
+            /* TODO: asynchronous scrubbing for pages of static memory. */
+            scrub_one_page(pg);
+        }
+    }
+}
+#endif
 
 /*
  * Following rules applied for page offline:
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 667f9dac83..8e8fb5a615 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -85,6 +85,12 @@ bool scrub_free_pages(void);
 } while ( false )
 #define FREE_XENHEAP_PAGE(p) FREE_XENHEAP_PAGES(p, 0)
 
+#ifdef CONFIG_STATIC_MEMORY
+/* These functions are for static memory */
+void free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
+                          bool need_scrub);
+#endif
+
 /* Map machine page range in Xen virtual address space. */
 int map_pages_to_xen(
     unsigned long virt,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:29:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:29:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161428.296462 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8goA-0006No-O8; Wed, 28 Jul 2021 10:29:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161428.296462; Wed, 28 Jul 2021 10:29:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8goA-0006N2-Hl; Wed, 28 Jul 2021 10:29:02 +0000
Received: by outflank-mailman (input) for mailman id 161428;
 Wed, 28 Jul 2021 10:29:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8go9-0004GY-Dn
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:29:01 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.48]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9c22ffc6-ef8e-11eb-9786-12813bfff9fa;
 Wed, 28 Jul 2021 10:28:55 +0000 (UTC)
Received: from AM6PR05CA0017.eurprd05.prod.outlook.com (2603:10a6:20b:2e::30)
 by AM6PR08MB3365.eurprd08.prod.outlook.com (2603:10a6:20b:42::24)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:53 +0000
Received: from VE1EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:20b:2e:cafe::3e) by AM6PR05CA0017.outlook.office365.com
 (2603:10a6:20b:2e::30) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:53 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT023.mail.protection.outlook.com (10.152.18.133) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:52 +0000
Received: ("Tessian outbound 1e4fcc40c873:v100");
 Wed, 28 Jul 2021 10:28:52 +0000
Received: from 106622ec1638.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 FEFFF744-99BD-4604-B864-1AB4B7C2BCCE.1; 
 Wed, 28 Jul 2021 10:28:45 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 106622ec1638.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:45 +0000
Received: from AM5PR1001CA0011.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::24)
 by AS8PR08MB6758.eurprd08.prod.outlook.com (2603:10a6:20b:39a::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:44 +0000
Received: from VE1EUR03FT049.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:2:cafe::2d) by AM5PR1001CA0011.outlook.office365.com
 (2603:10a6:206:2::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:44 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT049.mail.protection.outlook.com (10.152.19.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:44 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com
 (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:41 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 28
 Jul 2021 10:28:41 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:38 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9c22ffc6-ef8e-11eb-9786-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hCUWQDaTiidx+E9zuPE9oXjMot3xhLFaC2iMm+uCkok=;
 b=reTN5WzrHSYeAo0SgqenD0XrQEax8sYwFoRT8Xf61jUagAbkxtRbGIe69b4KjzZ4gRhCOTBpQwPcieINRgs3/FErixaagYAt+wMHUX+ZkYWlMa+LP2tQMuqOpjb7jYnOC+VmCkPVcRFMlKPnCA0I/prDM/PtokhQHDnSQC6ZuOs=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: daf66f73026ec041
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GhG7Xq4+PSnffvBofkvzVwXKkwEv7KdLeinscSL74kJPmC+2MX0A0/NKVESPzs4UOa7H8uVUWJuUmv33HUdht8IPsV2jnTGwp3O+uK6OvfXYVJgm55pDQ+GQr6epcPFZZrsxJAXOt9+/ntPzEpTO+aoa3sXk271RugYAi+iCkZxkwAxt1GEsAvNb+y5LQCg+rmO0tHtHUFJsjuszPqTv12v7ZuVRVxUTWtwFfWraZIBKt6+Fjbup8/iHX9mKBKQUsoBy8OPR1dxOspdKd1moqEXVLfF5hmg/tRJMlHlzD4TdrC8+LyAj4WjsRyvoj8Wsx7QW1l8iFUJCbHBebIMCLw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hCUWQDaTiidx+E9zuPE9oXjMot3xhLFaC2iMm+uCkok=;
 b=ajI9bdMFtDJt+SxC4Y+BDq8Rvfag5iGl6yJ8g3hPDPThTjsw9D/kUA0AMC426SLhz55Fq/FbHVOLNs3Dm+7MgRKEQh9bKYVOXq0mx0TIkBdb4fPK1HJlI+BPBLYfn2Hn9k/j14XRaz1JvoyOzF7lYvwoPUIEcva5nggKiAOLQgGkJWpO3hZo7L2WrqqlFYfUfbQmQ/fiG2sa08/SiGa/xPpLdq4iCeavaXmj6nepr9xk1/lQyYy9Kz4RxYX2QOadEVoIfozmtmHjxsFIeUTEh2v9N0Vow0lSNAM1OaPf8CnYl4GI1Gky+/A5X2bcvORy13zWg7odvMs35R79NojPAA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=hCUWQDaTiidx+E9zuPE9oXjMot3xhLFaC2iMm+uCkok=;
 b=reTN5WzrHSYeAo0SgqenD0XrQEax8sYwFoRT8Xf61jUagAbkxtRbGIe69b4KjzZ4gRhCOTBpQwPcieINRgs3/FErixaagYAt+wMHUX+ZkYWlMa+LP2tQMuqOpjb7jYnOC+VmCkPVcRFMlKPnCA0I/prDM/PtokhQHDnSQC6ZuOs=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 07/10] xen: re-define assign_pages and introduce assign_page
Date: Wed, 28 Jul 2021 10:27:54 +0000
Message-ID: <20210728102758.3269446-8-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 3f0b5b4d-9f6c-4e40-f0cd-08d951b27f39
X-MS-TrafficTypeDiagnostic: AS8PR08MB6758:|AM6PR08MB3365:
X-Microsoft-Antispam-PRVS:
	<AM6PR08MB336568AC2A52CEF72D60B56FF7EA9@AM6PR08MB3365.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:6430;OLM:6430;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 kbPVJo2aJjs+NXnUlOVKVwygUx2Ri4syXxnkASXC+LHwepNYl8Ei83oePqP+ge2WhoEIm1F8cxcHMd1uN8FKeI8Puu/f3zkXzOZVCAfc/vTn251wx3WUU1KCc665BvWv6DhlR1hPKAWowkC0694sS+9bklQZ5I35ZgbeLTUbKxokcRevxYfxrw82kX7+O6/xOpiZDoPeXqu1qSQSbiIsMkxfZ48qUqaZQso1YgpMOTFiFACdgzIjOFYsqDgmdBU7pj3w7wWzmX7idCgFBcuHzPCSuOB1pCalRmSBFqLI9vuiaMiACNsxJQaPq+FR+FlgekHUoioUjsaFK9xY7o9iiM0cq0+TzBmJkqQ5tt1A4d+YDWiOv05m4YuiHzuANo4pzNAO+PPvVCdb+LC49ztwh3QEN618GsMPKLgi2N0mwIf2h6Eb6aqDCrktj/yZmINvJKqOfXXZGMzRP7/RhdOa6GJS/ikpKSQFSTSc+XweIylaU1gbxaAam7TVzNG2dMASmV1PCniO2qv2DTmwYi3Or5tXwrb/WURUBN5qQnQ+1vTVmpQiXcI5ERrvfsSL4OFF3MobLjgwATUa3m5Z3Jfz7Dsqn7CIaT1EJToN17j872PoIB1u9cl1ZVF23LE5tNsIU7awJXc9WJXHkI5Wy9sdg4vPxkGD7Mb7DSh102wGJY1/mni6ooyGibaSsXj8xRpNw+iLK6fOzDcHL9Kf+Et7zCPbK0LVPz/LIHAGOs1u938=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(136003)(346002)(376002)(39850400004)(36840700001)(46966006)(7696005)(6666004)(1076003)(2616005)(86362001)(5660300002)(82310400003)(4326008)(36756003)(426003)(47076005)(2906002)(8676002)(54906003)(186003)(110136005)(8936002)(83380400001)(478600001)(356005)(26005)(82740400003)(36860700001)(44832011)(70586007)(316002)(70206006)(81166007)(336012)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6758
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	98f7b237-2d45-41f4-ed3b-08d951b27a1c
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	pgvc8UBrjeWvBBptn4E/1rpTTvaeIS7w6LpuKYpdVbzEE4LvdJ3oCxlJDfzBFGdMD6Snfa+CR4GMInwFnl57ArKKCK1AY8sbBDwkSLQ5+XQL6uE9LCw5bNzYAJqd5ioDg3mRJiG+g8cj1DCnSVzeM957l+wt9viGRmDJTSxGppSryY/W4sMHZHiuR1mUuw0ZMgdOef5tTI+99E0mqSi33HgzDDovrqqqUmyTOdkrf11TXrBFu4ZOiL9FCF1+LyamTsMc4J/gQQYQ1q9wtBOaS0BY0cP9bs08ZVri1j7oOdWNrvoObLPn7gqTdVPSrdxpOIwgpnbRgWW+xhIWrzQn716TTMdSGPg6FmpMZwIkU1QgSs6VjTdge4nCG9NBqN+sk8cpv3kIaymF520a6TTDhKzz3pB0mLwS4aUeaAqcbA6NXwvYKwfpwCcAwEnHcLa2GUKAdusC5brmnkXLqhX8DmlXllEZcr1RbbAcX+EQ0/D3JKPoVNLBGmZYwTzYfzv5PsYKBOX/eG+UHwrwfPEnX5+YrSrC2WFqzysTDpq2wWm8v35+ZV2Gnb8SFR5KMQKuryIJgYQHvib5feokV4Fr5heJKrOi+l4dzSlVXD9ER/dQCYoIRPkjixNxAHbJm+kR93KXZnmFLkTjZVMBQc6LwkhVc/GOvG+yeemXyfIWFkDXM6WGGK68PI1Mq7VNtTXNdMJtCmjN1kWd6hhkJ/T9/Q==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(70206006)(81166007)(54906003)(6666004)(186003)(316002)(36756003)(47076005)(5660300002)(70586007)(82310400003)(26005)(426003)(110136005)(1076003)(2616005)(44832011)(2906002)(83380400001)(508600001)(8676002)(4326008)(7696005)(336012)(8936002)(86362001)(36860700001);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:52.9018
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 3f0b5b4d-9f6c-4e40-f0cd-08d951b27f39
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3365

In order to deal with the trouble of count-to-order conversion when page number
is not in a power-of-two, this commit re-define assign_pages for nr pages and
assign_page for original page with a single order.

Backporting confusion could be helped by altering the order of assign_page
parameters, such that the compiler would point out that adjustments at call
sites are needed.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v4 change:
- in all cases where order-0 pages get passed, prefer using assign_pages
to pass literal 1
- reconstruct the order of assign_pages parameters
- remove the unnecessary parentheses
---
 xen/arch/x86/pv/dom0_build.c |  2 +-
 xen/common/grant_table.c     |  2 +-
 xen/common/memory.c          |  4 ++--
 xen/common/page_alloc.c      | 23 ++++++++++++++---------
 xen/include/xen/mm.h         |  6 ++++++
 5 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c
index af47615b22..9142f359da 100644
--- a/xen/arch/x86/pv/dom0_build.c
+++ b/xen/arch/x86/pv/dom0_build.c
@@ -556,7 +556,7 @@ int __init dom0_construct_pv(struct domain *d,
         else
         {
             while ( count-- )
-                if ( assign_pages(d, mfn_to_page(_mfn(mfn++)), 0, 0) )
+                if ( assign_pages(mfn_to_page(_mfn(mfn++)), 1, d, 0) )
                     BUG();
         }
         initrd->mod_end = 0;
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index fab77ab9cc..1f6b89bff4 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -2342,7 +2342,7 @@ gnttab_transfer(
          * is respected and speculative execution is blocked accordingly
          */
         if ( unlikely(!evaluate_nospec(okay)) ||
-            unlikely(assign_pages(e, page, 0, MEMF_no_refcount)) )
+            unlikely(assign_pages(page, 1, e, MEMF_no_refcount)) )
         {
             bool drop_dom_ref;
 
diff --git a/xen/common/memory.c b/xen/common/memory.c
index e07bd9a5ea..083e14b84f 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -728,7 +728,7 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
         /* Assign each output page to the domain. */
         for ( j = 0; (page = page_list_remove_head(&out_chunk_list)); ++j )
         {
-            if ( assign_pages(d, page, exch.out.extent_order,
+            if ( assign_page(d, page, exch.out.extent_order,
                               MEMF_no_refcount) )
             {
                 unsigned long dec_count;
@@ -797,7 +797,7 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
      * cleared PGC_allocated.
      */
     while ( (page = page_list_remove_head(&in_chunk_list)) )
-        if ( assign_pages(d, page, 0, MEMF_no_refcount) )
+        if ( assign_pages(page, 1, d, MEMF_no_refcount) )
         {
             BUG_ON(!d->is_dying);
             free_domheap_page(page);
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index f51e406401..e279c6f713 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -2282,9 +2282,9 @@ void init_domheap_pages(paddr_t ps, paddr_t pe)
 
 
 int assign_pages(
-    struct domain *d,
     struct page_info *pg,
-    unsigned int order,
+    unsigned long nr,
+    struct domain *d,
     unsigned int memflags)
 {
     int rc = 0;
@@ -2304,7 +2304,7 @@ int assign_pages(
     {
         unsigned int extra_pages = 0;
 
-        for ( i = 0; i < (1ul << order); i++ )
+        for ( i = 0; i < nr; i++ )
         {
             ASSERT(!(pg[i].count_info & ~PGC_extra));
             if ( pg[i].count_info & PGC_extra )
@@ -2313,18 +2313,18 @@ int assign_pages(
 
         ASSERT(!extra_pages ||
                ((memflags & MEMF_no_refcount) &&
-                extra_pages == 1u << order));
+                extra_pages == nr));
     }
 #endif
 
     if ( pg[0].count_info & PGC_extra )
     {
-        d->extra_pages += 1u << order;
+        d->extra_pages += nr;
         memflags &= ~MEMF_no_refcount;
     }
     else if ( !(memflags & MEMF_no_refcount) )
     {
-        unsigned int tot_pages = domain_tot_pages(d) + (1 << order);
+        unsigned int tot_pages = domain_tot_pages(d) + nr;
 
         if ( unlikely(tot_pages > d->max_pages) )
         {
@@ -2336,10 +2336,10 @@ int assign_pages(
     }
 
     if ( !(memflags & MEMF_no_refcount) &&
-         unlikely(domain_adjust_tot_pages(d, 1 << order) == (1 << order)) )
+         unlikely(domain_adjust_tot_pages(d, nr) == nr) )
         get_knownalive_domain(d);
 
-    for ( i = 0; i < (1 << order); i++ )
+    for ( i = 0; i < nr; i++ )
     {
         ASSERT(page_get_owner(&pg[i]) == NULL);
         page_set_owner(&pg[i], d);
@@ -2354,6 +2354,11 @@ int assign_pages(
     return rc;
 }
 
+int assign_page(struct domain *d, struct page_info *pg, unsigned int order,
+                unsigned int memflags)
+{
+    return assign_pages(pg, 1UL << order, d, memflags);
+}
 
 struct page_info *alloc_domheap_pages(
     struct domain *d, unsigned int order, unsigned int memflags)
@@ -2396,7 +2401,7 @@ struct page_info *alloc_domheap_pages(
                 pg[i].count_info = PGC_extra;
             }
         }
-        if ( assign_pages(d, pg, order, memflags) )
+        if ( assign_page(d, pg, order, memflags) )
         {
             free_heap_pages(pg, order, memflags & MEMF_no_scrub);
             return NULL;
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 8e8fb5a615..2e75cdcbb7 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -132,6 +132,12 @@ int query_page_offline(mfn_t mfn, uint32_t *status);
 void heap_init_late(void);
 
 int assign_pages(
+    struct page_info *pg,
+    unsigned long nr,
+    struct domain *d,
+    unsigned int memflags);
+
+int assign_page(
     struct domain *d,
     struct page_info *pg,
     unsigned int order,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:29:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:29:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161431.296474 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8goG-000797-56; Wed, 28 Jul 2021 10:29:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161431.296474; Wed, 28 Jul 2021 10:29:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8goF-00078o-W9; Wed, 28 Jul 2021 10:29:08 +0000
Received: by outflank-mailman (input) for mailman id 161431;
 Wed, 28 Jul 2021 10:29:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8goE-0004GY-Db
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:29:06 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.13.45]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9f30213a-ef8e-11eb-9786-12813bfff9fa;
 Wed, 28 Jul 2021 10:29:00 +0000 (UTC)
Received: from DB6PR0501CA0032.eurprd05.prod.outlook.com (2603:10a6:4:67::18)
 by DBBPR08MB4664.eurprd08.prod.outlook.com (2603:10a6:10:f1::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.28; Wed, 28 Jul
 2021 10:28:58 +0000
Received: from DB5EUR03FT055.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:67:cafe::dc) by DB6PR0501CA0032.outlook.office365.com
 (2603:10a6:4:67::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:58 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT055.mail.protection.outlook.com (10.152.21.30) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:58 +0000
Received: ("Tessian outbound 4c02392472aa:v100");
 Wed, 28 Jul 2021 10:28:58 +0000
Received: from 0a90fa88718a.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 DF3CE0E7-471F-436F-A75B-44B4148534DC.1; 
 Wed, 28 Jul 2021 10:28:52 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0a90fa88718a.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:52 +0000
Received: from AM5P194CA0014.EURP194.PROD.OUTLOOK.COM (2603:10a6:203:8f::24)
 by DBBPR08MB4396.eurprd08.prod.outlook.com (2603:10a6:10:ca::20) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.29; Wed, 28 Jul
 2021 10:28:49 +0000
Received: from VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:8f:cafe::2c) by AM5P194CA0014.outlook.office365.com
 (2603:10a6:203:8f::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:49 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT013.mail.protection.outlook.com (10.152.19.37) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:48 +0000
Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com
 (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:46 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com
 (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 28
 Jul 2021 10:28:46 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9f30213a-ef8e-11eb-9786-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NY6M4tUyN/50lC3m48HvlUq9t50qEgCk7Ith9fpSm7s=;
 b=nWfaews+3X11Kbpn1UT3p7oatmDZKFyHS7eJnr9NDci4Xn3QOUULzS7d6JLOkxGNyhsrEigEhkxbSBmf0ZtJDHblFkweB8oIPdizfXLQJQ/GanemQo2p/TsziVqPd/Ou/Nn8DFVR6fkZAmR5+76wlobB19/2WclNxNOVh2MGeBc=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: e7c45a9ccae45962
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=RWKe90ax3Y/8iTcUHsN5DJHjyJ17nsuWnv98DKaqoo6oUvHwc/sNkfSKB94QJByWRfJFsjjY/aW/TSDejSfDLA4s/PvSoBWkKP190u9YxBOpGJyD40A1zoc+B25H2An+sGOHQBM3JF8ruCnkc/m5unoJNkeYC29Z/bXwBBJc2UceT4k3juhE1GofVQjuZUZ2buL8On+SH79GSC1xOC7vyI0AAzM2Ch+IuWoiAsaY95PA2jAX0ZU3OCucaPjcbgOdyPvlyHXQhL6iPPxdpGya+jL9JY9VcGfL4V76kawfCJ7rYK9MQiv2pwhRj+uS0qiw8cIuF8BcjDFxD8R9bm5NRg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NY6M4tUyN/50lC3m48HvlUq9t50qEgCk7Ith9fpSm7s=;
 b=mQP7zKs8FSuMjUkj9TN2gNf2IqhdiuvVW4ImmD702S7s19eVdWBSf3H7/vQZbqi0sZl+PKm0MfX8mq3ymDYlH1SZqgGsjbnIP0xS9V/ek1AjDHU9f5jMDCEQd+PmgBqZ8OtagvZqcO1d2gilYoVvxcTVoHkEso4ZJI02tghKM21GSM9XdDD7LdqBWOV8VyqkGTkqdLMw7FuVcJrw7NPxC+vMNIRFXWE/ECXxyBHM360/u0csF0sEoXZioDBZkKUlZLEV1JsNrxUdzKLEx9em64OW9IkRh5/e4geVv2z7Qk+u8NC+GNGLObHXMLxfJOQYnsvndQxwosQvFLuPy+YWKg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NY6M4tUyN/50lC3m48HvlUq9t50qEgCk7Ith9fpSm7s=;
 b=nWfaews+3X11Kbpn1UT3p7oatmDZKFyHS7eJnr9NDci4Xn3QOUULzS7d6JLOkxGNyhsrEigEhkxbSBmf0ZtJDHblFkweB8oIPdizfXLQJQ/GanemQo2p/TsziVqPd/Ou/Nn8DFVR6fkZAmR5+76wlobB19/2WclNxNOVh2MGeBc=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 09/10] xen/arm: check "xen,static-mem" property during domain construction
Date: Wed, 28 Jul 2021 10:27:56 +0000
Message-ID: <20210728102758.3269446-10-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: b83d1186-d625-47b0-dd4e-08d951b28293
X-MS-TrafficTypeDiagnostic: DBBPR08MB4396:|DBBPR08MB4664:
X-Microsoft-Antispam-PRVS:
	<DBBPR08MB4664AA086166B12B6A30730AF7EA9@DBBPR08MB4664.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:1247;OLM:1247;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 RjoxI3ZCuF1F94ievRPklFyIrC+PLMIVq8iOrRmBwO8bcA7/fEKkwKRCDYUx1haTe+8yXnMZoQe79g2IejrwkF8yF1Rt0dOY8nhanS3bXpzI3NNmFn1VUN2cNzwejwy9WZnFb3QfpYpfCf25/1Nw5yFvIwcLpIHJfJkd6d8q0uRt7ewVVx1UDz/7UP0wA7PZCDVPGuDYpmAnvzSX4p7DH68xNThZIVY2/Cvn6GlSPzDSKBeeCpfSO4EbAy3/TX+XorTCkRT6SOt+Ko1148ZxonBJ0pm2T5oZ004QZyb++1ad8/BahhF0IZvvyhniqLwmPbdhGq9vRzXOedw8b/CBWfRieDnVB4ZC8hZpYg3laT6zvJPuyVnpRDptKy+3AkOOlLKsrUHbZEDf7qAbAL6hmmWGgmMT27ifLwXTcsle1lUVzs1F+EAGTbuvwEMMq9Eoz+aefi344ONCCg5aGa96LRYpuHcNS8VUWFgn/ajVhZ0n+PedCOhhzeh9NHxpxnDtAdvYfbbJbwhYfbj8eySn7CFaAnwBLiXeZ7jKi4XU5ytBm821Dn5y33eZJ5/BjD275aBdRZa0FkGKkMf5A9dmsGKV/Nmsvng0v9639Ojx8SpLqoRPIDnCEfJOdCqzvSNQCnZGsdjrgYa2dGZqWBsFFYssHJKlYb+ogk1mkX+xRZ4I3EpL5MxMLjwe6Uj5iSgJ15lEHfysINwNFOlUCp4I9SkrohK1E+HL8XyY/lybLbA=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(39860400002)(396003)(376002)(346002)(136003)(36840700001)(46966006)(1076003)(82740400003)(110136005)(8676002)(47076005)(86362001)(316002)(2906002)(336012)(36756003)(426003)(4326008)(44832011)(70586007)(70206006)(83380400001)(6666004)(26005)(7696005)(8936002)(36860700001)(478600001)(186003)(5660300002)(356005)(2616005)(82310400003)(54906003)(81166007)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4396
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT055.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	5fcf034b-7de1-4f83-356f-08d951b27ccc
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	Xu78GFPTx02XKBUA0PYOQaBVH8fnAFmiodZ2GAJ4cHAebPDw0lUz2bsLBeq2qfcpewGue2DZRUUZ4QX/UoX+rz86b5kfCY0hNywJws3O3kjVHqaZWt/1B/uN6bWeSrr1IvT/u8RS+X8oZmj2vDJFFzGyNlbrQUKGforiXPU1NDoenBaud3KkX4nsoVVPRTu/7HRTKxTT2YYEpH6OuYeYYQQ8ygKx5iMbQJK7RYLlDHsur4o4esZ8avwV244XWfsX8D9/xyLawNuSZMDSidyuipjiBSDMAEFOLaeB4UF8L70ONx07IsYwLTkScvwprJwFLMEfkRWG6zixYQuwe+2K5H/LtTXaZNdomuVj3/gudUF5wYEcoGaBOrXbylzGwVmkWiXRGdh4JAArIxN6fYcmZVFcIRortoQepHX69YAHgRbQj8sWumVXp5bampgm8cyj7IIuACcVlK+vekwQhIXOZp3Mp3jWnCGvoKvOszQgSok0SUw2ozbt1TAtJb9ghnE6xD5i9ChUMLWOCtl+1z9QcFJqOksDsYTGeWtrA04x/Ysl1SYIM0nDACV/oELysxRpv5g+C4UpgZUcOpw5Jg7KjJlYGSHWFzQ+/VgchggoZkwbapRNNsA4x3i9YmyW2SS+64uAe3ta6QqKxjbiLeOVtdPdwMiY1iT/2u/E6ZUML6H8KE358WHFkxGGa19DsLVO496S3ZS7gTUpmP9TJf2CpQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(376002)(396003)(346002)(39860400002)(136003)(46966006)(36840700001)(44832011)(7696005)(81166007)(36756003)(70206006)(2906002)(6666004)(70586007)(336012)(36860700001)(26005)(82740400003)(426003)(2616005)(186003)(1076003)(110136005)(86362001)(82310400003)(47076005)(316002)(478600001)(8936002)(8676002)(83380400001)(4326008)(54906003)(5660300002);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:58.6312
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: b83d1186-d625-47b0-dd4e-08d951b28293
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT055.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4664

This commit checks "xen,static-mem" device tree property in /domUx node,
to determine whether domain is on Static Allocation, when constructing
domain during boot-up.

Right now, the implementation of allocate_static_memory is missing, and
will be introduced later. It just BUG() out at the moment.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 xen/arch/arm/domain_build.c | 37 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 6c86d52781..cdb16f2086 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -2425,6 +2425,37 @@ static int __init construct_domU(struct domain *d,
     struct kernel_info kinfo = {};
     int rc;
     u64 mem;
+    const struct dt_property *static_mem_prop;
+    u32 static_mem_addr_cells, static_mem_size_cells;
+    bool static_mem = false;
+
+    /*
+     * Guest RAM could be static memory which will be specified through
+     * "xen,static-mem" property.
+     */
+    static_mem_prop = dt_find_property(node, "xen,static-mem", NULL);
+    if ( static_mem_prop )
+    {
+        static_mem = true;
+
+        if ( !dt_property_read_u32(node, "#xen,static-mem-address-cells",
+                                   &static_mem_addr_cells) )
+        {
+            printk("Error building DomU: cannot read "
+                   "\"#xen,static-mem-address-cells\" property\n");
+            return -EINVAL;
+        }
+
+        if ( !dt_property_read_u32(node, "#xen,static-mem-size-cells",
+                                   &static_mem_size_cells) )
+        {
+            printk("Error building DomU: cannot read "
+                   "\"#xen,static-mem-size-cells\" property\n");
+            return -EINVAL;
+        }
+
+        BUG_ON(static_mem_size_cells > 2 || static_mem_addr_cells > 2);
+    }
 
     rc = dt_property_read_u64(node, "memory", &mem);
     if ( !rc )
@@ -2452,7 +2483,11 @@ static int __init construct_domU(struct domain *d,
     /* type must be set before allocate memory */
     d->arch.type = kinfo.type;
 #endif
-    allocate_memory(d, &kinfo);
+    if ( !static_mem )
+        allocate_memory(d, &kinfo);
+    else
+        /* TODO: allocate_static_memory(...). */
+        BUG();
 
     rc = prepare_dtb_domU(d, &kinfo);
     if ( rc < 0 )
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:29:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:29:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161434.296484 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8goI-0007bI-1R; Wed, 28 Jul 2021 10:29:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161434.296484; Wed, 28 Jul 2021 10:29:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8goH-0007Zy-SW; Wed, 28 Jul 2021 10:29:09 +0000
Received: by outflank-mailman (input) for mailman id 161434;
 Wed, 28 Jul 2021 10:29:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8goG-00040B-JK
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:29:08 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.75]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id eca45ce1-add8-4c99-9567-2b44813c8b0b;
 Wed, 28 Jul 2021 10:28:57 +0000 (UTC)
Received: from DB6PR0802CA0030.eurprd08.prod.outlook.com (2603:10a6:4:a3::16)
 by DBBPR08MB4377.eurprd08.prod.outlook.com (2603:10a6:10:c6::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17; Wed, 28 Jul
 2021 10:28:55 +0000
Received: from DB5EUR03FT016.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:4:a3:cafe::83) by DB6PR0802CA0030.outlook.office365.com
 (2603:10a6:4:a3::16) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:55 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT016.mail.protection.outlook.com (10.152.20.141) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:55 +0000
Received: ("Tessian outbound 31e6e3649d31:v100");
 Wed, 28 Jul 2021 10:28:55 +0000
Received: from 71695685e734.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A24285DF-53B7-4A19-A218-EB80FFDF70EF.1; 
 Wed, 28 Jul 2021 10:28:49 +0000
Received: from EUR05-VI1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 71695685e734.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:49 +0000
Received: from AM5PR1001CA0026.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::39)
 by DB7PR08MB3659.eurprd08.prod.outlook.com (2603:10a6:10:4a::25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.29; Wed, 28 Jul
 2021 10:28:46 +0000
Received: from VE1EUR03FT049.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:2:cafe::20) by AM5PR1001CA0026.outlook.office365.com
 (2603:10a6:206:2::39) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:46 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT049.mail.protection.outlook.com (10.152.19.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:45 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:43 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: eca45ce1-add8-4c99-9567-2b44813c8b0b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Eq4yUqDpYRGNFdQptknzn+SqgvCNRsk87GkopXgdUKw=;
 b=NltAFF4fPgdIEz+KPQ7DWmiOPTyuHpWsfQ7BE5ERbM80p/3TwL9NT/qXa3jh+7VwJuY0HnobWnXIGtaBm5Iqiqffn51bD0Qp30O5bRHTTy7zfjDDRbDvVrVnO6P6+BkRoVEZVb123uevzXsLGTFv5Ynz6EZb9JQC/NuQPEEsSGg=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: d025559729ff1416
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=DpPwcjSR74pzVBGK+qvAOm2OMxFWiH6N5Mfd5IzDjtFirJ5jTSK61mbjRoeyTT4P/o8xC0Iq0PR5Kxz9GFHMLXP0+oBpxrGGsDGjzPXu3LAsb3r7uLfIEqKiU1COpmZ2GCO6x/ZpzC1SPoWsoKsNhWR5PN+0PpTwnKjUFTSekfvJ1dBWQO6X5K9Kdr00DbEhOOBS4vRtfIRtN94Z3/kS6a1XpTs6aL/U9GHuVmdRXdrv6z1DeH+tiVrigA8jo1koV7MggkyNi6GdNzczMWDqauMnShS7h0P1SsrYrmJNFlG23bWcu5Xo7EYxErw3Kf2NXk8Wkh0UEtdQFmowZQNQAw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Eq4yUqDpYRGNFdQptknzn+SqgvCNRsk87GkopXgdUKw=;
 b=EgtLKCN2KA1Y04itZ7g709n0od9VYv4bqYCvYduU6z+r09LelWzHrYs9eKwVXqpGKaUZ2aHsQvQlnldfP56hrjEFJQa13Iv4ZyfiJDTVslX1YX/7xdMMFRvtJFYjSRWhth/OEbI1z6vzHwIovwzlkkBioJ/SUPKpiXMQDx0e20pp39Vq0+E/eGK8hye5r2iHZjjfGxdRleFtafAWwMkWMtMmulNvUIhmZcKnBwY/50WdaEzEbJhxkMzrFZKyAoCn09cE9KGObGiSwnsXxrhVZMZiIKgmMErVRXWCQrv36Q0UWrWwzOI7uuLIXN8sxmAmUxuNsZ9Q6NmAuxcB2xgL5w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Eq4yUqDpYRGNFdQptknzn+SqgvCNRsk87GkopXgdUKw=;
 b=NltAFF4fPgdIEz+KPQ7DWmiOPTyuHpWsfQ7BE5ERbM80p/3TwL9NT/qXa3jh+7VwJuY0HnobWnXIGtaBm5Iqiqffn51bD0Qp30O5bRHTTy7zfjDDRbDvVrVnO6P6+BkRoVEZVb123uevzXsLGTFv5Ynz6EZb9JQC/NuQPEEsSGg=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 08/10] xen/arm: introduce acquire_staticmem_pages and acquire_domstatic_pages
Date: Wed, 28 Jul 2021 10:27:55 +0000
Message-ID: <20210728102758.3269446-9-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 4df38fb4-1115-4a00-c0a5-08d951b28082
X-MS-TrafficTypeDiagnostic: DB7PR08MB3659:|DBBPR08MB4377:
X-Microsoft-Antispam-PRVS:
	<DBBPR08MB43776620CDB51A43B8714808F7EA9@DBBPR08MB4377.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:3631;OLM:3631;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 h6K3KJjJmkLE7TSBa8B9M+1EqF9gcNyP0mYwqHz//S6KKtjEeutcMdprVWWXRZD/NU9eFDeTZbWnRzKnHsUDth8Ub2hNDrhFtrhiDUc9hSqjUaDoXg4LSf2+xDJyia1h/6e4pdDQ/7q9+C0dXIPTuXDIdtiGSIdxDioXJBAtfKkcnr5t39WUUn96QixpNX7OYX7XE+7vmvCA/4CYqB20rxE3IJX1JRC9JEQiePR1mxM7O2nbidnL1vVZg7yM3ytmy5zoWvn7Wc1pnAMqS2hq35JplNJTBKt55mpzyceE/4bZL7SKfTNVM0fam/ktv/6b7K6ZwIxn0rcmyTs9ryVdP2YRVsbi0jvXEOPNyO1j1xFHkcQLPobc9QX6fIMH8dD7QNnprSNTMVTAaS1pPWSv3YNNNPzJ6wSOp3bzcN+8HBm02d35nW9miLcArXphibqrEjm8x/+lig4SDKvDteh64Ui+qRT1WVHYJhTaPPlKTqThgm/t1NH4U8vyfxNPOEpxuMErlNZxNz82zQGtI4J+vrfW/JLGHcu2czAia7ZPULJXVl/cbcL31YNVFrefyyyXZDOCMr9MNVTSMqZphFABzDuZZ2pyDV8bN2GM8E9juCG4ATmYIrKsrVp+/CwU2wl8lcrOihQabPshxxTBnSdq/82SMYlrwb6n7zmfJahbxc3+hEjV2mrWv7EjuXYhNuNIOhdnUwjL4Y4gm4zEsrmeJSxOREs2cPKApvAYbWgcpn0=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(396003)(346002)(376002)(136003)(39860400002)(46966006)(36840700001)(8676002)(8936002)(2906002)(26005)(44832011)(86362001)(186003)(36756003)(7696005)(2616005)(47076005)(478600001)(1076003)(36860700001)(6666004)(82310400003)(336012)(5660300002)(356005)(83380400001)(70586007)(82740400003)(4326008)(70206006)(316002)(54906003)(110136005)(426003)(81166007)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3659
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT016.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	b2b40b37-53a0-40e1-de1c-08d951b27b08
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	rT+62bpNfyTFQqpmavFHkGCDkY4ZoDHdizmowgzeWnMlWcO7jzHvzacknOekB0NHniZLd5giBUFBWpzsVfO5+75+L+W35JqYZqhqv+vNXaDH++jRm5UUwbjldaFskERR/ip1uPl0mZpvHVJBJXvvyw/P8gyRT+FkL/HMyiRkS8vAixAWlCk0r+pIEWjauVo0fNrRnkaYPYvxN8EiyIcYVMqCoh8Jg/WQHIPL/u2yIsSv0KRv4fJkZuKHqORzXjy7D0N/C+w88gSZcWOaYgYvijqPoDEnZopDj+2vzx0HI46DtDj8gn9aw8oqysc/egJntLIbl4rHUvRHnvwKqP8eNTPmbRFKPxfzn0BN8G7594rBATNt4yb2ODGXpE7ZHJ4vyB3EAhHWsLDz4xWi15toUy+INJm3k85qSEMffWZeT3hCgW/onqT2iMQMdHjajEa+KTLNR3MC1qgr5AuE9UgqOFG6cGu8TphbzMofH6DTHDS6OuszRUlc155FPGTZALHGIJDMUdsg5UQJ8eXZrab+TI6Ax0pVMmxGFgk3oyYb87EBZo/shSn3pt/UwmMoe9sIA3YH/qL0iliVhQhvhSL06QjtQS+p0kx22dFeZSdW6nLtfIPIOBgpnhG6knOHb7nuFekViW53ugifsjTrLCGzpX4GVynBxPsJ2lO5nJyYR797J39DY5Jlo+qXgosF/OXicy11JR79zXY6MsRw8NtNxQ==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(5660300002)(70586007)(83380400001)(36756003)(54906003)(426003)(110136005)(316002)(86362001)(4326008)(8676002)(2616005)(70206006)(2906002)(44832011)(7696005)(82310400003)(508600001)(1076003)(6666004)(26005)(81166007)(36860700001)(186003)(8936002)(336012)(47076005);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:28:55.1647
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 4df38fb4-1115-4a00-c0a5-08d951b28082
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT016.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4377

alloc_staticmem_pages aims to acquire nr_mfns contiguous pages of
static memory. And it is the equivalent of alloc_heap_pages for static
memory. Here only covers acquiring pre-configured static memory.

For each page, it shall check if the page is reserved(PGC_reserved)
and free. It shall also do a set of necessary initialization, which are
mostly the same ones in alloc_heap_pages, like, following the same
cache-coherency policy and turning page status into PGC_state_inuse, etc.

acquire_domstatic_pages is the equivalent of alloc_domheap_pages for
static memory, and it is to acquire nr_mfns contiguous pages of static memory
and assign them to one specific domain.

It uses acquire_staticmem_pages to acquire nr_mfns pre-configured pages of
static memory, then on success, it will use assign_pages to assign those pages
to one specific domain.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
v4 change:
- moving tlb/cache flush outside of the locked region, considering XSA-364
and reducing the amount of work happening with the heap_lock held
- remove MEMF_no_refcount case
- make acquire_staticmem_pages/acquire_domstatic_pages being __init
---
 xen/common/page_alloc.c | 108 +++++++++++++++++++++++++++++++++++++++-
 xen/include/xen/mm.h    |   3 ++
 2 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index e279c6f713..b0edaf12b3 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -151,6 +151,10 @@
 #define p2m_pod_offline_or_broken_replace(pg) BUG_ON(pg != NULL)
 #endif
 
+#ifndef CONFIG_STATIC_MEMORY
+#define PGC_reserved 0
+#endif
+
 /*
  * Comma-separated list of hexadecimal page numbers containing bad bytes.
  * e.g. 'badpage=0x3f45,0x8a321'.
@@ -1065,6 +1069,73 @@ static struct page_info *alloc_heap_pages(
     return pg;
 }
 
+#ifdef CONFIG_STATIC_MEMORY
+/*
+ * Acquire nr_mfns contiguous reserved pages, starting at #smfn, of
+ * static memory.
+ */
+static struct page_info * __init acquire_staticmem_pages(unsigned long nr_mfns,
+                                                         mfn_t smfn,
+                                                         unsigned int memflags)
+{
+    bool need_tlbflush = false;
+    uint32_t tlbflush_timestamp = 0;
+    unsigned long i;
+    struct page_info *pg;
+
+    /* For now, it only supports pre-configured static memory. */
+    if ( !mfn_valid(smfn) || !nr_mfns )
+        return NULL;
+
+    spin_lock(&heap_lock);
+
+    pg = mfn_to_page(smfn);
+
+    for ( i = 0; i < nr_mfns; i++ )
+    {
+        /*
+         * Reference count must continuously be zero for free pages
+         * of static memory(PGC_reserved).
+         */
+        if ( pg[i].count_info != (PGC_state_free | PGC_reserved) )
+        {
+            printk(XENLOG_ERR
+                   "pg[%lu] Static MFN %"PRI_mfn" c=%#lx t=%#x\n",
+                   i, mfn_x(page_to_mfn(pg + i)),
+                   pg[i].count_info, pg[i].tlbflush_timestamp);
+            BUG();
+        }
+
+        if ( !(memflags & MEMF_no_tlbflush) )
+            accumulate_tlbflush(&need_tlbflush, &pg[i],
+                                &tlbflush_timestamp);
+
+        /*
+         * Preserve flag PGC_reserved and change page state
+         * to PGC_state_inuse.
+         */
+        pg[i].count_info = (PGC_reserved | PGC_state_inuse);
+        /* Initialise fields which have other uses for free pages. */
+        pg[i].u.inuse.type_info = 0;
+        page_set_owner(&pg[i], NULL);
+    }
+
+    spin_unlock(&heap_lock);
+
+    if ( need_tlbflush )
+        filtered_flush_tlb_mask(tlbflush_timestamp);
+
+    /*
+     * Ensure cache and RAM are consistent for platforms where the guest
+     * can control its own visibility of/through the cache.
+     */
+    for ( i = 0; i < nr_mfns; i++ )
+        flush_page_to_ram(mfn_x(smfn) + i, !(memflags & MEMF_no_icache_flush));
+
+    return pg;
+}
+#endif
+
 /* Remove any offlined page in the buddy pointed to by head. */
 static int reserve_offlined_page(struct page_info *head)
 {
@@ -2306,7 +2377,7 @@ int assign_pages(
 
         for ( i = 0; i < nr; i++ )
         {
-            ASSERT(!(pg[i].count_info & ~PGC_extra));
+            ASSERT(!(pg[i].count_info & ~(PGC_extra | PGC_reserved)));
             if ( pg[i].count_info & PGC_extra )
                 extra_pages++;
         }
@@ -2345,7 +2416,8 @@ int assign_pages(
         page_set_owner(&pg[i], d);
         smp_wmb(); /* Domain pointer must be visible before updating refcnt. */
         pg[i].count_info =
-            (pg[i].count_info & PGC_extra) | PGC_allocated | 1;
+            (pg[i].count_info & (PGC_extra | PGC_reserved)) | PGC_allocated | 1;
+
         page_list_add_tail(&pg[i], page_to_list(d, &pg[i]));
     }
 
@@ -2411,6 +2483,38 @@ struct page_info *alloc_domheap_pages(
     return pg;
 }
 
+#ifdef CONFIG_STATIC_MEMORY
+/*
+ * Acquire nr_mfns contiguous pages, starting at #smfn, of static memory,
+ * then assign them to one specific domain #d.
+ */
+struct page_info * __init acquire_domstatic_pages(struct domain *d,
+                                                  unsigned long nr_mfns,
+                                                  mfn_t smfn, unsigned int memflags)
+{
+    struct page_info *pg = NULL;
+
+    ASSERT(!in_irq());
+
+    pg = acquire_staticmem_pages(nr_mfns, smfn, memflags);
+    if ( !pg )
+        return NULL;
+
+    /*
+     * MEMF_no_owner/MEMF_no_refcount cases are missing here because
+     * right now, acquired static memory is only for guest RAM.
+     */
+    ASSERT(d);
+    if ( assign_pages(pg, nr_mfns, d, memflags) )
+    {
+        free_staticmem_pages(pg, nr_mfns, memflags & MEMF_no_scrub);
+        return NULL;
+    }
+
+    return pg;
+}
+#endif
+
 void free_domheap_pages(struct page_info *pg, unsigned int order)
 {
     struct domain *d = page_get_owner(pg);
diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
index 2e75cdcbb7..62e8e2ad61 100644
--- a/xen/include/xen/mm.h
+++ b/xen/include/xen/mm.h
@@ -89,6 +89,9 @@ bool scrub_free_pages(void);
 /* These functions are for static memory */
 void free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
                           bool need_scrub);
+struct page_info *acquire_domstatic_pages(struct domain *d,
+                                          unsigned long nr_mfns, mfn_t smfn,
+                                          unsigned int memflags);
 #endif
 
 /* Map machine page range in Xen virtual address space. */
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:36:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:36:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161487.296498 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gvB-0002jW-VW; Wed, 28 Jul 2021 10:36:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161487.296498; Wed, 28 Jul 2021 10:36:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gvB-0002jP-RJ; Wed, 28 Jul 2021 10:36:17 +0000
Received: by outflank-mailman (input) for mailman id 161487;
 Wed, 28 Jul 2021 10:36:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8gpE-00040B-LL
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:30:08 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.84]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 131e452d-64c3-4b00-827f-6313ab349ef9;
 Wed, 28 Jul 2021 10:29:18 +0000 (UTC)
Received: from AM5P194CA0004.EURP194.PROD.OUTLOOK.COM (2603:10a6:203:8f::14)
 by PAXPR08MB6640.eurprd08.prod.outlook.com (2603:10a6:102:dd::5) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.31; Wed, 28 Jul
 2021 10:29:16 +0000
Received: from VE1EUR03FT034.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:203:8f:cafe::f1) by AM5P194CA0004.outlook.office365.com
 (2603:10a6:203:8f::14) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:29:16 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT034.mail.protection.outlook.com (10.152.18.85) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:29:16 +0000
Received: ("Tessian outbound 5f693336bfca:v100");
 Wed, 28 Jul 2021 10:29:16 +0000
Received: from 2138220fbbc3.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 7991EE38-FE34-4992-8030-BC24FB0D102F.1; 
 Wed, 28 Jul 2021 10:29:00 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2138220fbbc3.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:29:00 +0000
Received: from AM0PR01CA0174.eurprd01.prod.exchangelabs.com
 (2603:10a6:208:aa::43) by DBBPR08MB4680.eurprd08.prod.outlook.com
 (2603:10a6:10:f2::11) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Wed, 28 Jul
 2021 10:28:55 +0000
Received: from VE1EUR03FT021.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:208:aa:cafe::e) by AM0PR01CA0174.outlook.office365.com
 (2603:10a6:208:aa::43) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:55 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT021.mail.protection.outlook.com (10.152.18.117) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:55 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:48 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:46 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 131e452d-64c3-4b00-827f-6313ab349ef9
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zmfA8FI6NfA6jk+mUsEPar1jSj8DwHYRvwaxcZozXR0=;
 b=Ov+IgAkkiymNH2HrNKEbqK0CKTFXs1/zywa/uPQx2mOBXnu8098MrCMPp7kHGGBP/eYXuEtuc37JWGckZsaU6DS2+RrszWpQHmof8jpbCqOu16WtKe5SS0ZmUh3Wa3Q/YJI2Jd9OI7DUOBKt1LcsNvryoifHB+EAkglslTEEQGQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: ede5a8212e535404
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hqOFJFFScCBjg13P7XZo4I8zLATBuyXPHiR0hdanesT8r/IK68eyGJ6rf6W/12lADPpALsr+1mrG/Nn+JO6VrK0eymMBtBAbxQoevxWi5y2BB+txxbjf1Xdm+llmdJR7XLJ9LTkfWZqW7lq0CP9u+7yhIFjmf2iG0PJjTeFtEN2Nhx1lBW1DaMif8ZM/mjiZxRk1xJdGZvJXs1HdPGmGTxpGocvZS2x2JGkVXkQ81g/6k+CIkGgrExLIndeYE1MSTseCvllImBzzYk1P5WyEg6EeSPJ4X+RdUUIIxqFiJrxxv0STdT1KFABdPqfT60638MLjtvpEJ6VlCuu3pOZjgQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zmfA8FI6NfA6jk+mUsEPar1jSj8DwHYRvwaxcZozXR0=;
 b=CICbhL3wwLtJY9wHff7uycFCWz7K94KX/sphI0N3xRpcLqPmGbNdPR9VaLNTWUUobPpFYAbFXBuevMd+KLFWaef6X33TZdZCF6AO+cfkyZGsDjnRzTfelK7FmkbRMuh9lRqVAFOzV0coNaeySsihOdWji3wXB8poEcYeOqi8b63mUssH00TI9Nx6YAggcoPvgGbiaE4CgabBtQNoN1B632JpMeqQlKn/GYSwI5gfbaJT7qEH6vF4bxv0GNeigsEgkhLSm2+siI94gdtnn6Lito3iM+dwiYRlXiGVp0+SCvvYnxXBik3qRO6JIl9JzzHhMXtCkrPXnFFa1X0o1NBpdA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=zmfA8FI6NfA6jk+mUsEPar1jSj8DwHYRvwaxcZozXR0=;
 b=Ov+IgAkkiymNH2HrNKEbqK0CKTFXs1/zywa/uPQx2mOBXnu8098MrCMPp7kHGGBP/eYXuEtuc37JWGckZsaU6DS2+RrszWpQHmof8jpbCqOu16WtKe5SS0ZmUh3Wa3Q/YJI2Jd9OI7DUOBKt1LcsNvryoifHB+EAkglslTEEQGQ=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 10/10] xen/arm: introduce allocate_static_memory
Date: Wed, 28 Jul 2021 10:27:57 +0000
Message-ID: <20210728102758.3269446-11-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 69e4e19d-d314-416c-40fa-08d951b28d4d
X-MS-TrafficTypeDiagnostic: DBBPR08MB4680:|PAXPR08MB6640:
X-Microsoft-Antispam-PRVS:
	<PAXPR08MB6640C291B1CA4D2C82EA0F99F7EA9@PAXPR08MB6640.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:5236;OLM:5236;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 qy+SqIJMljWZq4WXRnsLjlmyzWsvPw1aTOeahNw0ww2wFLT5zLlkhaP7YTJ0ytKFBWnsS0LuoyHvg6okeF120hq/uRTbVZ9goMfmSkmiMEMvVulWoGesgSvOCGko/J3wbbHbteH9nWB9IX/IhJejPZcMpioCyl6W3w11s3y2oi4n337QFzEGzoOJ2ifGvJN1mQQIId3e613W74dTmaac++9RWHLvS2qq2Cta7ktFT6JiGX0sh2VJqrR7V616s1aTHKzKw66rQimblHwUGMnMhrJ85/yn/XUdd9xtIWAAJrsjFqGmlJSQCdSzaVFBReIWCZzkXUpn1zc+brO4I8Z1JJCLRUVgVK4M6lS69Re2MHB7AzOpA4FMm01d2fCoAN6nmKhzNcFOPmDY8+kmaBJ6Yr5bnKPCubdav7Tk9LgaSx7/OT9lUgiu67VVQSLtICt2PpirIJ3yj46Wsv3tx9Cd+MajnuyBpOfavFqmZg40QP29kf9/MUXjhqhRc0BjRO+k+00gHCB5MAGiCkSmk5vonIC26puX6cS1+uCM+TXYN/s0h00jzmYWEuNjRA97eCE6eX540MF8XL94PUY1hTnyLiV+nu3d2tk9pQj0ezt5dUWvTerYorXRpvGsJxIGZ9H4f23DucmA5Zac+Hzkt/pEMlIol5wddD8BXGYYFfw79bhYoVxQ7//QZn2H/N9F1Or/6OkDJArdKWs5xsV7FUVNV8KOrZ8silfGZhkPTtwEWRo=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(136003)(39850400004)(346002)(396003)(376002)(46966006)(36840700001)(86362001)(70586007)(8676002)(82310400003)(478600001)(356005)(36860700001)(4326008)(83380400001)(2616005)(316002)(54906003)(2906002)(70206006)(47076005)(7696005)(36756003)(81166007)(5660300002)(82740400003)(26005)(44832011)(110136005)(426003)(336012)(8936002)(6666004)(186003)(1076003)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4680
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 VE1EUR03FT034.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	9a2909e2-a171-4ab7-7b85-08d951b280c4
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	d+8GA8hk7+6jn/onCm/zeWtFVTxVjySQs8C8MNy+NCtRtafJlDOJFOaJhrnem3MqOAD1rJYtYW7jEgsIUlXhtPEpXaDe/Ju7Jcfjp53DikDhWVJikUDgbXSC8BJ+4ZKlQPG9Bd8B/9haKEpm/jHeKXR/S/gazRY1LmOt8ailGglsUWZzlFMIhKQZwfevHHvCkLwikrJmNVsliRfbaurqr/I3Vk+tgAe1DUNrPddFGhLqMTWPPRr0FjiS0Ii7PMWSnYnwwpZWVyLxSK8huuC2j5PK9yK0IFsCbFwulYMrhbBb55A90n8u/KuWUw52yfgyQEJ5TE35YbdtmasUW8DZKy/NXePHg9AYxWq9mwUgxOUgkFV77bz2n3VEL4xiv3uAjI666CaWSNTQeC9/LoreSQZgFgQ70VqnA2dZvJ+hTn6/QME3tEqDLUctnXMe8vQZnP5D/rLcXTNnZvlyYbc838wk0rc7snLU1I6MpHZWmp7XtSveZPuYl5g2oB4YSc31orqmbWgTpe6xUiM4ToSwLUneuJK3gCEPzQulxogGVu99prTx4CLCtoXja4s93g49l6iFcJfpZ5fL2w1aSh41k+UccNCmU9J7jVMNasgCOhozMg8fe6j6PLRbWLoEh7cXceZlYp/lOzF2n7agVTFYiOjGFZezwoIrF88urNd44pBEEHvStmPIgDblEAbeqBX2ciB9P9T8JRISGXLqUEOdGg==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(2906002)(82310400003)(54906003)(186003)(83380400001)(36756003)(44832011)(8676002)(86362001)(81166007)(70206006)(26005)(7696005)(2616005)(4326008)(6666004)(336012)(70586007)(36860700001)(508600001)(8936002)(1076003)(47076005)(5660300002)(316002)(110136005)(426003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:29:16.5058
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 69e4e19d-d314-416c-40fa-08d951b28d4d
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	VE1EUR03FT034.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6640

This commit introduces allocate_static_memory to allocate static memory as
guest RAM for Domain on Static Allocation.

It uses acquire_domstatic_pages to acquire pre-configured static memory
for this domain, and uses guest_physmap_add_page to set up P2M table.
These pre-defined static memory banks shall be firstly mapped to the
fixed guest RAM address `GUEST_RAM0_BASE`. And until it exhausts the
`GUEST_RAM0_SIZE`, it will seek to `GUEST_RAM1_BASE`, and so on.
`GUEST_RAM0` may take up several pre-defined physical RAM regions.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
---
 xen/arch/arm/domain_build.c | 137 +++++++++++++++++++++++++++++++++++-
 1 file changed, 135 insertions(+), 2 deletions(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index cdb16f2086..ed290ee31b 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -480,6 +480,139 @@ fail:
           (unsigned long)kinfo->unassigned_mem >> 10);
 }
 
+static bool __init append_static_memory_to_bank(struct domain *d,
+                                                struct membank *bank,
+                                                mfn_t smfn,
+                                                paddr_t size)
+{
+    int res;
+    paddr_t tot_size = size;
+    /* Infer next GFN. */
+    gfn_t sgfn = gaddr_to_gfn(bank->start + bank->size);
+
+    while ( tot_size > 0 )
+    {
+        unsigned int order = get_allocation_size(tot_size);
+
+        res = guest_physmap_add_page(d, sgfn, smfn, order);
+        if ( res )
+        {
+            dprintk(XENLOG_ERR, "Failed map pages to DOMU: %d", res);
+            return false;
+        }
+
+        smfn = mfn_add(smfn, 1UL << order);
+        tot_size -= (1UL << (PAGE_SHIFT + order));
+    }
+
+    bank->size = bank->size + size;
+    return true;
+}
+
+/* Allocate memory from static memory as RAM for one specific domain d. */
+static void __init allocate_static_memory(struct domain *d,
+                                          struct kernel_info *kinfo,
+                                          const struct dt_property *prop,
+                                          u32 addr_cells, u32 size_cells)
+{
+    unsigned int nr_banks, gbank, bank = 0;
+    const uint64_t rambase[] = GUEST_RAM_BANK_BASES;
+    const uint64_t ramsize[] = GUEST_RAM_BANK_SIZES;
+    const __be32 *cell;
+    u32 reg_cells = addr_cells + size_cells;
+    u64 tot_size = 0;
+    paddr_t pbase, psize, gsize;
+    mfn_t smfn;
+
+    /* Start with GUEST_RAM0. */
+    kinfo->mem.nr_banks = 0;
+    gbank = 0;
+    gsize = ramsize[gbank];
+    kinfo->mem.bank[gbank].start = rambase[gbank];
+
+    cell = (const __be32 *)prop->value;
+    nr_banks = (prop->length) / (reg_cells * sizeof (u32));
+    BUG_ON(nr_banks > NR_MEM_BANKS);
+
+    while ( bank < nr_banks )
+    {
+        device_tree_get_reg(&cell, addr_cells, size_cells, &pbase, &psize);
+        tot_size += psize;
+        smfn = maddr_to_mfn(pbase);
+
+        if ( !acquire_domstatic_pages(d, psize >> PAGE_SHIFT, smfn, 0) )
+        {
+            printk(XENLOG_ERR
+                    "%pd: cannot acquire static memory "
+                    "(0x%"PRIpaddr" - 0x%"PRIpaddr").\n",
+                    d, pbase, pbase + psize);
+            goto fail;
+        }
+
+        printk(XENLOG_INFO "%pd: STATIC BANK[%d] %#"PRIpaddr"-%#"PRIpaddr"\n",
+               d, bank, pbase, pbase + psize);
+
+        /*
+         * It shall be mapped to the fixed guest RAM address rambase[i],
+         * And until it exhausts the ramsize[i], it will seek to the next
+         * rambase[i+1].
+         */
+        while ( 1 )
+        {
+            /*
+             * The current physical bank is fully mapped.
+             * Handle the next physical bank.
+             */
+            if ( gsize >= psize )
+            {
+                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank[gbank],
+                                                   smfn, psize) )
+                    goto fail;
+
+                gsize = gsize - psize;
+                bank++;
+                break;
+            }
+            /*
+             * Current guest bank memory is not enough to map.
+             * Check if we have another guest bank available.
+             * gbank refers guest memory bank index.
+             */
+            else if ( (gbank + 2) > GUEST_RAM_BANKS ) {
+                printk("Exhausted the number of guest bank\n");
+                goto fail;
+            }
+            else
+            {
+                if ( !append_static_memory_to_bank(d, &kinfo->mem.bank[gbank],
+                                                   smfn, gsize) )
+                    goto fail;
+
+                psize = psize - gsize;
+                smfn = mfn_add(smfn, gsize >> PAGE_SHIFT);
+                /* Update to the next guest bank. */
+                gbank++;
+                gsize = ramsize[gbank];
+                kinfo->mem.bank[gbank].start = rambase[gbank];
+            }
+        }
+    }
+
+    kinfo->mem.nr_banks = ++gbank;
+    kinfo->unassigned_mem -= tot_size;
+    if ( kinfo->unassigned_mem )
+        printk(XENLOG_ERR
+               "Size of \"memory\" property doesn't match up with the ones "
+               "defined in \"xen,static-mem\".\n");
+
+    return;
+
+fail:
+    panic("Failed to allocate requested static memory for domain %pd."
+          "Fix the VMs configurations.\n",
+          d);
+}
+
 static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
                                    const struct dt_device_node *node)
 {
@@ -2486,8 +2619,8 @@ static int __init construct_domU(struct domain *d,
     if ( !static_mem )
         allocate_memory(d, &kinfo);
     else
-        /* TODO: allocate_static_memory(...). */
-        BUG();
+        allocate_static_memory(d, &kinfo, static_mem_prop,
+                               static_mem_addr_cells, static_mem_size_cells);
 
     rc = prepare_dtb_domU(d, &kinfo);
     if ( rc < 0 )
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:36:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:36:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161489.296503 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gvC-0002n2-8g; Wed, 28 Jul 2021 10:36:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161489.296503; Wed, 28 Jul 2021 10:36:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8gvC-0002mp-45; Wed, 28 Jul 2021 10:36:18 +0000
Received: by outflank-mailman (input) for mailman id 161489;
 Wed, 28 Jul 2021 10:36:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UQNy=MU=arm.com=Penny.Zheng@srs-us1.protection.inumbo.net>)
 id 1m8goz-00040B-Kj
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:29:53 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.89]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d07ba7fc-98c5-4ffb-8abb-c0bd5a418f9c;
 Wed, 28 Jul 2021 10:29:17 +0000 (UTC)
Received: from DB6PR07CA0170.eurprd07.prod.outlook.com (2603:10a6:6:43::24) by
 VI1PR0802MB2239.eurprd08.prod.outlook.com (2603:10a6:800:a4::10) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:29:13 +0000
Received: from DB5EUR03FT030.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:6:43:cafe::f3) by DB6PR07CA0170.outlook.office365.com
 (2603:10a6:6:43::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.11 via Frontend
 Transport; Wed, 28 Jul 2021 10:29:13 +0000
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT030.mail.protection.outlook.com (10.152.20.144) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:29:13 +0000
Received: ("Tessian outbound 5f693336bfca:v100");
 Wed, 28 Jul 2021 10:29:13 +0000
Received: from a755207bef08.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 81D406B7-94AE-4C7B-BBEC-DD5DBBE047D8.1; 
 Wed, 28 Jul 2021 10:28:59 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a755207bef08.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Wed, 28 Jul 2021 10:28:59 +0000
Received: from AM0PR01CA0167.eurprd01.prod.exchangelabs.com
 (2603:10a6:208:aa::36) by AM9PR08MB6225.eurprd08.prod.outlook.com
 (2603:10a6:20b:2de::6) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18; Wed, 28 Jul
 2021 10:28:58 +0000
Received: from VE1EUR03FT021.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:208:aa:cafe::14) by AM0PR01CA0167.outlook.office365.com
 (2603:10a6:208:aa::36) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:58 +0000
Received: from nebula.arm.com (40.67.248.234) by
 VE1EUR03FT021.mail.protection.outlook.com (10.152.18.117) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.20.4352.24 via Frontend Transport; Wed, 28 Jul 2021 10:28:58 +0000
Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com
 (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 28 Jul
 2021 10:28:51 +0000
Received: from penny.shanghai.arm.com (10.169.190.66) by mail.arm.com
 (10.251.24.32) with Microsoft SMTP Server id 15.1.2176.14 via Frontend
 Transport; Wed, 28 Jul 2021 10:28:49 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d07ba7fc-98c5-4ffb-8abb-c0bd5a418f9c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HF/qyGehAhKUdJPQWT1CPjsg2X/NGFj5Lk0x43C30TM=;
 b=ZC1NG7cD/onzZyPeJXRA9C4OX7lvVdU3GFsB/s1ihM3v1WIAwgdR2qSp9Biis2lTIiD7YoxbbWqN98eg5qePZ9ZrW6G2c40e1RlSdSVyZUs65Vab3YjpOetMh4hfn5ISZXvPoIpiLUpS8pNPoOy7ES1lv/DVkcUisyVqFWISbQo=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=pass
 action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
X-CheckRecipientChecked: true
X-CR-MTA-CID: 9ca811b0cc911400
X-CR-MTA-TID: 64aa7808
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=eHFcIAmYBxBGuikbwN2ZHEOhBGYnAy2Q4lq72bmKPmpIA/Q5ZG2fpcxK//YMInO6/5VTK3v6RUBv2JvxblyZto5rEsDMkSwfIVVozeL+hVWppHfzdOOLNuRlpTfsFZAbO4yOkTd0HgZaJdCYIjcrA+sWmGh9Lhf0cbiiMmNwsKeTmMwVb9/O0ncVJ3+qOVYtcIa+3sREHSKUldYvUf58Np/CyDgbm6nc3dqgKFAeMvUJL4OhTYK4umO0SdS6sF5u/fZjVhg/HuFUbrU7UCalW7aIovJrBQIXkBoKgb3lWFpmoAUVoY47qwLya13upDOY5sluCCK0fKcjTKu/5LWCqw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HF/qyGehAhKUdJPQWT1CPjsg2X/NGFj5Lk0x43C30TM=;
 b=AmJilmMvAMT18MPxqNFTmAossKTkaCoK43Wg2IWDHDMPmSjlHU/LyrvY3snA4mSG5vClFXITufW2jAKTtY5DXKb1U7y2/IrJJxucjJLjl7ts56hmdFonpKu6ANm+IOuE9c864ffwikFyuf4oS39VRzRf4B7PHNyM0wO5hl1dQrULI4C+9UBdpheDU8hXBs93OKRTE9Nt4rbLQ1n3k2U3SOpd8GvAg/0d3PyQIAnnY+9mxcwJsg9RXzXlXgQlu8rQKeDAWY4a50WcQnBCSNbtnOgUN0lTwxjv0mDECITsVcJWS+OgxOC3zS2tfQdm4tOJ5WpNAaEiHGJlLLvDy3AGEw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com;
 dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HF/qyGehAhKUdJPQWT1CPjsg2X/NGFj5Lk0x43C30TM=;
 b=ZC1NG7cD/onzZyPeJXRA9C4OX7lvVdU3GFsB/s1ihM3v1WIAwgdR2qSp9Biis2lTIiD7YoxbbWqN98eg5qePZ9ZrW6G2c40e1RlSdSVyZUs65Vab3YjpOetMh4hfn5ISZXvPoIpiLUpS8pNPoOy7ES1lv/DVkcUisyVqFWISbQo=
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=none (message not signed)
 header.d=none;lists.xenproject.org; dmarc=pass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 40.67.248.234 as permitted sender) receiver=protection.outlook.com;
 client-ip=40.67.248.234; helo=nebula.arm.com;
From: Penny Zheng <penny.zheng@arm.com>
To: <xen-devel@lists.xenproject.org>, <sstabellini@kernel.org>,
	<julien@xen.org>
CC: <Bertrand.Marquis@arm.com>, <Penny.Zheng@arm.com>, <Wei.Chen@arm.com>,
	<nd@arm.com>
Subject: [PATCH V4 04/10] xen: introduce mark_page_free
Date: Wed, 28 Jul 2021 10:27:58 +0000
Message-ID: <20210728102758.3269446-12-penny.zheng@arm.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728102758.3269446-1-penny.zheng@arm.com>
References: <20210728102758.3269446-1-penny.zheng@arm.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-EOPAttributedMessage: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 91950616-1321-4258-41c7-08d951b28b59
X-MS-TrafficTypeDiagnostic: AM9PR08MB6225:|VI1PR0802MB2239:
X-Microsoft-Antispam-PRVS:
	<VI1PR0802MB2239538BF47F1062F5CA9559F7EA9@VI1PR0802MB2239.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
NoDisclaimer: true
X-MS-Oob-TLC-OOBClassifiers: OLM:1051;OLM:1051;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original:
 bVm9h5GgGH2Yji/QeBgZ0vwk0JhvGWM//Jv0Fm/9VsnMNxR6adC28fdEOrWE0oBrPJkH3obhI8sTF+9RLp5HzlmxUqHrmqgNE26PRAlH38j3acpBTat7Ywc40YCWzMKQ4Nr/LBm8lxHtThm/vROGFmrjWyOUA4SPCTpV31CUHCe3eL9LqU6vTZ00spJ5mF+XuhN9KV6sfbvvwWXt16PwUXGiCtXZWgn7lDfCHUS5xF9otldP18066QKn9gNy1SS1m8yH8uMxkYlLRIVRV7N3IBDi6QXyb7q2eFYaw9B4JEW6kNC7yXh/Ub1vw03kp5SjycDzv1OlaU4qGHlLm6XMaZXxAWFUnBLRj/mXKFzHhsabapI29AZByKBfNhXed3cS8+t0WuwqNxbiZW+HyThYNoriTqlZteB2Vqz/eVdhGr/f1o8EsScCGor1nPAx9ei5143LvF10ncy3flzVSQaF6B22YMdRhSsvJFn+xTHWM5ShiniW9e8rEp5BQTh6OWqsGDiq+ZJb9BKIB6B9LMMoAIG/U2iGwA6JX15Ndsh3YPIGaNXmCcLFGfq9A0EKpDk+BPpCcbJfAU3v6KAIw+CiUa9kbWxurHF5rSlnWRiQfX9QnkJ1/opmsGXbblyJXb0Y0+p5S/5hBwSayyVGARRCWT0IjaqYFWKHk/LoB1q4AgRPjpFUcDPnKOTz3qeYOe7/P+JC8lGI7h2IFNCuaH8t/95byrY3holw1nG1IKnG9PQ=
X-Forefront-Antispam-Report-Untrusted:
 CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(376002)(346002)(39850400004)(136003)(396003)(46966006)(36840700001)(54906003)(316002)(70206006)(5660300002)(47076005)(7696005)(8936002)(478600001)(44832011)(6666004)(110136005)(356005)(26005)(186003)(83380400001)(70586007)(2906002)(82310400003)(86362001)(426003)(2616005)(1076003)(81166007)(4326008)(36860700001)(336012)(36756003)(82740400003)(8676002)(36900700001);DIR:OUT;SFP:1101;
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6225
X-MS-Exchange-Transport-CrossTenantHeadersStripped:
 DB5EUR03FT030.eop-EUR03.prod.protection.outlook.com
X-MS-Office365-Filtering-Correlation-Id-Prvs:
	d9e5f88a-3d3d-40c0-4ead-08d951b28290
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info:
	CfkCNrm9jBeFzsAgZlmNFrc+BQRnZ69gfyjeXYTq636Qo0IzuP64n4h79o7i6mwCk6ihZmdW0dqR9r0df1JNw/jfaKBFBPwowyPmK7EWC0aWG3Wme4mMHuP4LjcAaPtv6AC7ZWvREej4QymiSw0d9TELXqRaNh25Gwv0r85D3o+KiMkn/8pCd8zEQGNo78LWULC2Pk6AX3GzS+4pCRE4PZo58vzMhCGewxdbzDgjJhA0ZjDz2xiTR7RsowMym2vqSI21svGItuoXE+EN3cvyLvxdt9fBJUwSJFaysKl5S3RTvz2t+/UEZu+iGiI8p6jByvNbLfcNLNnYdVKvUfhA1DQ3yuUrxjJQXHut5Zh4xU+mVhGfgY8qlx2vlO0MeUIwkZG9/HJkWB5EU1eUe+yMcKNR3hfjD089jI3EWDYgjmoD+dNap0g1l6KZZx2qaMy4w3U6rwYfYbu/PWSYHNdIkgwJAU8p7GUDepI5XaUvRHGc7GOJqSYHiXLKClPMDYQEafusk8QcORlPrJwhJRd/P40+GIFjQt7XEJJCZpxfbWxlNAJsP+W3dX7s+ExhXX0ylLQXu3cmymq4VAemvhbEBD94qvd1Zb9ftZ8KiOZU5ekCyHRrr0vp5rz/3hBI6OWeWwz+Lh8YkkNYJWmmb7IteUp0IblG5SF6lB435bbEKiO9URqkzgaD5Ues4rpfXju74YyQgBWLvboMlJuzC3ARiA==
X-Forefront-Antispam-Report:
	CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(426003)(36756003)(2906002)(36860700001)(86362001)(186003)(82310400003)(81166007)(2616005)(1076003)(4326008)(26005)(7696005)(336012)(6666004)(44832011)(47076005)(83380400001)(8936002)(8676002)(110136005)(5660300002)(316002)(70586007)(508600001)(70206006)(54906003);DIR:OUT;SFP:1101;
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 10:29:13.3486
 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 91950616-1321-4258-41c7-08d951b28b59
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource:
	DB5EUR03FT030.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2239

This commit defines a new helper mark_page_free to extract common code,
like following the same cache/TLB coherency policy, between free_heap_pages
and the new function free_staticmem_pages, which will be introduced later.

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
 xen/common/page_alloc.c | 89 ++++++++++++++++++++++-------------------
 1 file changed, 48 insertions(+), 41 deletions(-)

diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 958ba0cd92..a3ee5eca9e 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -1376,6 +1376,53 @@ bool scrub_free_pages(void)
     return node_to_scrub(false) != NUMA_NO_NODE;
 }
 
+static void mark_page_free(struct page_info *pg, mfn_t mfn)
+{
+    ASSERT(mfn_x(mfn) == mfn_x(page_to_mfn(pg)));
+
+    /*
+     * Cannot assume that count_info == 0, as there are some corner cases
+     * where it isn't the case and yet it isn't a bug:
+     *  1. page_get_owner() is NULL
+     *  2. page_get_owner() is a domain that was never accessible by
+     *     its domid (e.g., failed to fully construct the domain).
+     *  3. page was never addressable by the guest (e.g., it's an
+     *     auto-translate-physmap guest and the page was never included
+     *     in its pseudophysical address space).
+     * In all the above cases there can be no guest mappings of this page.
+     */
+    switch ( pg->count_info & PGC_state )
+    {
+    case PGC_state_inuse:
+        BUG_ON(pg->count_info & PGC_broken);
+        pg->count_info = PGC_state_free;
+        break;
+
+    case PGC_state_offlining:
+        pg->count_info = (pg->count_info & PGC_broken) |
+                         PGC_state_offlined;
+        tainted = 1;
+        break;
+
+    default:
+        printk(XENLOG_ERR
+               "pg MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
+               mfn_x(mfn),
+               pg->count_info, pg->v.free.order,
+               pg->u.free.val, pg->tlbflush_timestamp);
+        BUG();
+    }
+
+    /* If a page has no owner it will need no safety TLB flush. */
+    pg->u.free.need_tlbflush = (page_get_owner(pg) != NULL);
+    if ( pg->u.free.need_tlbflush )
+        page_set_tlbflush_timestamp(pg);
+
+    /* This page is not a guest frame any more. */
+    page_set_owner(pg, NULL); /* set_gpfn_from_mfn snoops pg owner */
+    set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY);
+}
+
 /* Free 2^@order set of pages. */
 static void free_heap_pages(
     struct page_info *pg, unsigned int order, bool need_scrub)
@@ -1392,47 +1439,7 @@ static void free_heap_pages(
 
     for ( i = 0; i < (1 << order); i++ )
     {
-        /*
-         * Cannot assume that count_info == 0, as there are some corner cases
-         * where it isn't the case and yet it isn't a bug:
-         *  1. page_get_owner() is NULL
-         *  2. page_get_owner() is a domain that was never accessible by
-         *     its domid (e.g., failed to fully construct the domain).
-         *  3. page was never addressable by the guest (e.g., it's an
-         *     auto-translate-physmap guest and the page was never included
-         *     in its pseudophysical address space).
-         * In all the above cases there can be no guest mappings of this page.
-         */
-        switch ( pg[i].count_info & PGC_state )
-        {
-        case PGC_state_inuse:
-            BUG_ON(pg[i].count_info & PGC_broken);
-            pg[i].count_info = PGC_state_free;
-            break;
-
-        case PGC_state_offlining:
-            pg[i].count_info = (pg[i].count_info & PGC_broken) |
-                               PGC_state_offlined;
-            tainted = 1;
-            break;
-
-        default:
-            printk(XENLOG_ERR
-                   "pg[%u] MFN %"PRI_mfn" c=%#lx o=%u v=%#lx t=%#x\n",
-                   i, mfn_x(mfn) + i,
-                   pg[i].count_info, pg[i].v.free.order,
-                   pg[i].u.free.val, pg[i].tlbflush_timestamp);
-            BUG();
-        }
-
-        /* If a page has no owner it will need no safety TLB flush. */
-        pg[i].u.free.need_tlbflush = (page_get_owner(&pg[i]) != NULL);
-        if ( pg[i].u.free.need_tlbflush )
-            page_set_tlbflush_timestamp(&pg[i]);
-
-        /* This page is not a guest frame any more. */
-        page_set_owner(&pg[i], NULL); /* set_gpfn_from_mfn snoops pg owner */
-        set_gpfn_from_mfn(mfn_x(mfn) + i, INVALID_M2P_ENTRY);
+        mark_page_free(&pg[i], mfn_add(mfn, i));
 
         if ( need_scrub )
         {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 10:43:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 10:43:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161507.296521 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8h1i-0004mw-2v; Wed, 28 Jul 2021 10:43:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161507.296521; Wed, 28 Jul 2021 10:43:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8h1h-0004mp-WF; Wed, 28 Jul 2021 10:43:02 +0000
Received: by outflank-mailman (input) for mailman id 161507;
 Wed, 28 Jul 2021 10:43:01 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8h1h-0004mj-0w
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:43:01 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8h1g-0008Lu-UC
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:43:00 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m8h1g-0000kz-Su
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 10:43:00 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m8h1d-00060s-I4; Wed, 28 Jul 2021 11:42:57 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=gnsfgb//20yXhP5KyFqyykVOKHq+hCMyGBhK5k7G94A=; b=NWVYN3ajSfsIYidDE2FhbQiKuj
	i4XldZwYSnauplSH01lgo6xp2BhkUFuPLccynUWqyTPkyTS0lhPvfzYExeFn5mimIB3u6YAuyTzpC
	Z73NHZ3Z34AgiNh1ZsmTt6ZewoUMG8RIgtC88PN6qNrxA8NWVOyJ6RZew6kkhquBC5XE=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24833.13489.362056.292831@mariner.uk.xensource.com>
Date: Wed, 28 Jul 2021 11:42:57 +0100
To: Jane Malalane <jane.malalane@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
    Andrew Cooper <andrew.cooper3@citrix.com>,
    George Dunlap <george.dunlap@citrix.com>,
    "Ian  Jackson" <iwj@xenproject.org>,
    Jan Beulich <jbeulich@suse.com>,
    Julien Grall <julien@xen.org>,
    Stefano Stabellini <sstabellini@kernel.org>,
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH] xen/lib: Fix strcmp() and strncmp()
In-Reply-To: <20210727184715.17699-1-jane.malalane@citrix.com>
References: <20210727184715.17699-1-jane.malalane@citrix.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Jane Malalane writes ("[PATCH] xen/lib: Fix strcmp() and strncmp()"):
> The C standard requires that each character be compared as unsigned
> char. Xen's current behaviour compares as signed char, which changes
> the answer when chars with a value greater than 0x7f are used.
> 
> Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Jane Malalane <jane.malalane@citrix.com>

Thanks for this.

What are the practical effects of this bug ?  AFAICT in the hypervisor
code all the call sites simply test for zero/nonzero.

Of course we should fix this because

> -		if ((__res = *cs - *ct++) != 0 || !*cs++)

this substraction is UB if it overflows.  So in theory the compiler
could miscompile it - although in practice I can't see how the
assumption that this doesn't overflow would "help" the compiler.

Ian.


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 12:19:21 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 12:19:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161524.296533 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8iWh-0004p8-MZ; Wed, 28 Jul 2021 12:19:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161524.296533; Wed, 28 Jul 2021 12:19:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8iWh-0004p1-Jd; Wed, 28 Jul 2021 12:19:07 +0000
Received: by outflank-mailman (input) for mailman id 161524;
 Wed, 28 Jul 2021 12:19:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=knVX=MU=citrix.com=anthony.perard@srs-us1.protection.inumbo.net>)
 id 1m8iWg-0004ov-U0
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 12:19:07 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 00300d43-ef9e-11eb-979b-12813bfff9fa;
 Wed, 28 Jul 2021 12:19:05 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 00300d43-ef9e-11eb-979b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627474745;
  h=date:from:to:cc:subject:message-id:references:
   mime-version:content-transfer-encoding:in-reply-to;
  bh=/vDRPclXAYcjJh9cj8K0LIDey8arVHXBOnNNst61jEU=;
  b=aLSlRzBQR/YV0k3UA18Z2dAGQfKBe38/nWhj8xyfn12xOTAloIukLtSK
   +8L2KsX+AosyV2ETIwVH2vuQDEOofcgA+NFYYLJgaE379x+S0gITvJJHM
   StB3RAn3prvVafXQXibpXosq35kkaCNuids+h+b25X7oic5hNEq9gahSZ
   A=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
IronPort-SDR: +1BSTEMfOJOh84y3okYcLvjUO7ZiLqed2gpZtIzK1djXYE/glqva69hYvdnjjxzs8N/yKUw2OR
 2zAm1OnyayJX7DPRMG3vFf2zuNRIOIRFqofpgeRe3gRsUPz1UILNmNO/aTROdBSfSfMNBUUYC7
 yP264vibYucyE7qHZHZXTQ3GmHLc+U3gZ/uCFXYn4A5Is9HHZA7a2T7elxNj9ItF+Dxf8wJiKJ
 mZmCIwDf4fWNgPP+FLk2LE/G5HodbIu41303fxLGe8FgSzmLSqc87/7MRsNAMaMdOMLTsUC5la
 uhwXjBgcgNaNQMeB0KT8pQUu
X-SBRS: 5.1
X-MesageID: 49647694
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:sBxFU6hNRWQOzwfM6Rg9xyrZ3XBQXuIji2hC6mlwRA09TySZ//
 rOoB0+726StN93YgBHpTngAtjlfZqyz/JICOUqUotKGTOWwVdAT7sSiLcKoQeQeBEWn9Q1vc
 wLHpSWSueAb2SS5fyKmDVQeOxB/DDoys6Vuds=
X-IronPort-AV: E=Sophos;i="5.84,276,1620705600"; 
   d="scan'208";a="49647694"
Date: Wed, 28 Jul 2021 13:19:00 +0100
From: Anthony PERARD <anthony.perard@citrix.com>
To: Ian Jackson <iwj@xenproject.org>
CC: Marek =?iso-8859-1?Q?Marczykowski-G=F3recki?=
	<marmarek@invisiblethingslab.com>, Jason Andryuk <jandryuk@gmail.com>, "Scott
 Davis" <scottwd@gmail.com>, xen-devel <xen-devel@lists.xenproject.org>,
	"Scott Davis" <scott.davis@starlab.io>, Wei Liu <wl@xen.org>, George Dunlap
	<george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>, "Juergen
 Gross" <jgross@suse.com>, Daniel De Graaf <dgdegra@tycho.nsa.gov>, "Daniel P
 . Smith" <dpsmith@apertussolutions.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
Message-ID: <YQFLND63SJH85Zeo@perard>
References: <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
 <CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>
 <YP/5wL2p/CGR5g7D@mail-itl>
 <24832.2790.631888.595948@mariner.uk.xensource.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <24832.2790.631888.595948@mariner.uk.xensource.com>

On Tue, Jul 27, 2021 at 02:32:22PM +0100, Ian Jackson wrote:
> Marek Marczykowski-Grecki writes ("Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel option to xl.cfg"):
> > On Mon, Jul 26, 2021 at 09:07:03AM -0400, Jason Andryuk wrote:
> > > Sort of relatedly, is stubdom unpaused before the guest gets
> > > relabeled?  Quickly looking, I think stubdom is unpaused.  I would
> > > think you want them both relabeled before either is unpaused.  If the
> > > stubdom starts with the exec_label, but it sees the guest with the
> > > init_label, it may get an unexpected denial?  On the other hand,
> > > delayed unpausing of stubdom would slow down booting.
> > 
> > Some parts of the stubdomain setup are done after it's unpaused (but
> > before the guest is unpaused). Especially, PCI devices are hot-plugged
> > only when QEMU is already running (not sure why).
> 
> I think the PCI hotplug involves interaction with QEMU, and providing
> only hotplug simplifies the code in libxl.  Anthony, do I have that
> righgt ?

I think interaction with QEMU is needed to find out the new address of
the PCI device in cases none were asked for. And have a single
implementation in libxl is certainly better.
But even if QEMU is running, I think we can still call it cold-plugged,
when it's done before emulation is supposed to have started.

Cheers,

-- 
Anthony PERARD


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161582.296574 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvk-0002WD-4f; Wed, 28 Jul 2021 14:53:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161582.296574; Wed, 28 Jul 2021 14:53:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvk-0002W6-0j; Wed, 28 Jul 2021 14:53:08 +0000
Received: by outflank-mailman (input) for mailman id 161582;
 Wed, 28 Jul 2021 14:53:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kvh-0002W0-Un
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:06 +0000
Received: from mail-pj1-x102b.google.com (unknown [2607:f8b0:4864:20::102b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0f995a1b-686a-4ead-afdc-1b88bd9879ba;
 Wed, 28 Jul 2021 14:53:04 +0000 (UTC)
Received: by mail-pj1-x102b.google.com with SMTP id m1so5540766pjv.2
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:04 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.02
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:03 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0f995a1b-686a-4ead-afdc-1b88bd9879ba
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=Dw5WYuI9KVHFCJFCuZejwMnhkTgwwA05j2VLkdgyjhM=;
        b=p8qM8rC90F/SM+apT/EKASeB6fk585n2JEbifixZyOxlq6Ktg1+eiu4rOMbpMYscY4
         JDfzCVUj9P+r/SbSk8+43y67Xs+hltMLq0r8e1vxWdiJYA32QLDKYaF7utDPLO8dLfdF
         l4v8OvMGbDTrSVvXSTCaVk15GCPLEQmwD09MewR60DSKGnLNjv+/+EnweU32/41Fs86F
         0L1ZWMlpQppSV+tmLg7d76sQrzEVzXrxEo4o6XYH2JXSmSe4szqvA/msBGK3U2Gnbyyg
         uh7t8h18JFBAPOUiE8jKhEBQHww4hFERe9e7SJLCaJq3eu3vAeflxbBbkXxSHBhPLqqJ
         zymQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=Dw5WYuI9KVHFCJFCuZejwMnhkTgwwA05j2VLkdgyjhM=;
        b=JflEA4dUuIIm/7VQrbNJzzUsHWH5grLnl9sho9cLJpqtmbR7zyy/lDtUJmb/W4ecUd
         0EKINDerIgvnADX3Buw827SJpWco1+zL/z138IKe7OZitJohHtFeLxtk/UJx66dUrCde
         AoguXa/pq7ocUWQ98tJSQJKmHnuLrlbcYNldnAw6Cwk7+7CDe3h/RkDmBj4kflc6esOo
         y/AWmR2pPDSFAgOtZfqD34iUt2yu7XrxNDBdWINYYve1TMoBT+Rck7UPWKzzlJI88E0N
         BXyjUM9E+/2JZM/D1oroROoUsRpyX0WWAjz0KiRmYcy6nXVpFXS79fw1RwHJnHuTfS4l
         htLA==
X-Gm-Message-State: AOAM5322XVrJf90S8bgWpkTwDYq9watNn6V0lFLa0qeWt04SO8AtdALO
	/hKCfMxNxYWMWmBuZdN6J8o=
X-Google-Smtp-Source: ABdhPJyvKNqJV0d7lhBz81EV8gx+LUMnHngVQwyGZ1LUs86TzJ1AZOB/8lE8YF+OwPlhBwTvVwzTSQ==
X-Received: by 2002:a62:798e:0:b029:327:6d4a:c4db with SMTP id u136-20020a62798e0000b02903276d4ac4dbmr203576pfc.50.1627483984118;
        Wed, 28 Jul 2021 07:53:04 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 00/13] x86/Hyper-V: Add Hyper-V Isolation VM support
Date: Wed, 28 Jul 2021 10:52:15 -0400
Message-Id: <20210728145232.285861-1-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>


Hyper-V provides two kinds of Isolation VMs. VBS(Virtualization-based
security) and AMD SEV-SNP unenlightened Isolation VMs. This patchset
is to add support for these Isolation VM support in Linux.

The memory of these vms are encrypted and host can't access guest
memory directly. Hyper-V provides new host visibility hvcall and
the guest needs to call new hvcall to mark memory visible to host
before sharing memory with host. For security, all network/storage
stack memory should not be shared with host and so there is bounce
buffer requests.

Vmbus channel ring buffer already plays bounce buffer role because
all data from/to host needs to copy from/to between the ring buffer
and IO stack memory. So mark vmbus channel ring buffer visible.

There are two exceptions - packets sent by vmbus_sendpacket_
pagebuffer() and vmbus_sendpacket_mpb_desc(). These packets
contains IO stack memory address and host will access these memory.
So add allocation bounce buffer support in vmbus for these packets.

For SNP isolation VM, guest needs to access the shared memory via
extra address space which is specified by Hyper-V CPUID HYPERV_CPUID_
ISOLATION_CONFIG. The access physical address of the shared memory
should be bounce buffer memory GPA plus with shared_gpa_boundary
reported by CPUID.

Change sicne RFC V4:
       - Introduce dma map decrypted function to remap bounce buffer
       	 and provide dma map decrypted ops for platform to hook callback.	 
       - Split swiotlb and dma map decrypted change into two patches
       - Replace vstart with vaddr in swiotlb changes.

Change since RFC v3:
       - Add interface set_memory_decrypted_map() to decrypt memory and
         map bounce buffer in extra address space 
       - Remove swiotlb remap function and store the remap address
         returned by set_memory_decrypted_map() in swiotlb mem data structure.
       - Introduce hv_set_mem_enc() to make code more readable in the __set_memory_enc_dec().

Change since RFC v2:
       - Remove not UIO driver in Isolation VM patch
       - Use vmap_pfn() to replace ioremap_page_range function in
       order to avoid exposing symbol ioremap_page_range() and
       ioremap_page_range()
       - Call hv set mem host visibility hvcall in set_memory_encrypted/decrypted()
       - Enable swiotlb force mode instead of adding Hyper-V dma map/unmap hook
       - Fix code style


Tianyu Lan (13):
  x86/HV: Initialize GHCB page in Isolation VM
  x86/HV: Initialize shared memory boundary in the Isolation VM.
  x86/HV: Add new hvcall guest address host visibility support
  HV: Mark vmbus ring buffer visible to host in Isolation VM
  HV: Add Write/Read MSR registers via ghcb page
  HV: Add ghcb hvcall support for SNP VM
  HV/Vmbus: Add SNP support for VMbus channel initiate message
  HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
  DMA: Add dma_map_decrypted/dma_unmap_encrypted() function
  x86/Swiotlb: Add Swiotlb bounce buffer remap function for HV IVM
  HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
  HV/Netvsc: Add Isolation VM support for netvsc driver
  HV/Storvsc: Add Isolation VM support for storvsc driver

 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/hv_init.c          |  87 +++++++--
 arch/x86/hyperv/ivm.c              | 296 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 ++
 arch/x86/include/asm/mshyperv.h    |  86 ++++++++-
 arch/x86/include/asm/sev.h         |   4 +
 arch/x86/kernel/cpu/mshyperv.c     |   5 +
 arch/x86/kernel/sev-shared.c       |  21 +-
 arch/x86/mm/pat/set_memory.c       |   6 +-
 arch/x86/xen/pci-swiotlb-xen.c     |   3 +-
 drivers/hv/Kconfig                 |   1 +
 drivers/hv/channel.c               |  48 ++++-
 drivers/hv/connection.c            |  71 ++++++-
 drivers/hv/hv.c                    | 129 +++++++++----
 drivers/hv/hyperv_vmbus.h          |   3 +
 drivers/hv/ring_buffer.c           |  84 ++++++--
 drivers/hv/vmbus_drv.c             |   3 +
 drivers/iommu/hyperv-iommu.c       |  65 +++++++
 drivers/net/hyperv/hyperv_net.h    |   6 +
 drivers/net/hyperv/netvsc.c        | 144 +++++++++++++-
 drivers/net/hyperv/rndis_filter.c  |   2 +
 drivers/scsi/storvsc_drv.c         |  68 ++++++-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 include/asm-generic/mshyperv.h     |  53 +++++-
 include/linux/dma-map-ops.h        |   9 +
 include/linux/hyperv.h             |  16 ++
 include/linux/swiotlb.h            |   4 +
 kernel/dma/mapping.c               |  22 +++
 kernel/dma/swiotlb.c               |  11 +-
 29 files changed, 1166 insertions(+), 102 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161584.296598 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvs-000370-Mu; Wed, 28 Jul 2021 14:53:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161584.296598; Wed, 28 Jul 2021 14:53:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvs-00036r-JY; Wed, 28 Jul 2021 14:53:16 +0000
Received: by outflank-mailman (input) for mailman id 161584;
 Wed, 28 Jul 2021 14:53:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kvr-0002W0-Ov
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:15 +0000
Received: from mail-pj1-x1035.google.com (unknown [2607:f8b0:4864:20::1035])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7f5c277f-66a6-4317-8763-05643c208ad8;
 Wed, 28 Jul 2021 14:53:12 +0000 (UTC)
Received: by mail-pj1-x1035.google.com with SMTP id
 ds11-20020a17090b08cbb0290172f971883bso10454369pjb.1
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:12 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.10
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:11 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7f5c277f-66a6-4317-8763-05643c208ad8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=4UOe5b2fx3Fh6u6Lqilgce/bFIZGpTYCRKnCgcNYEYs=;
        b=WDKkQI+4pFS1qUeyUk57PY1MjkBYohzBWIb2Shmz+3ikDL79tSqwvQaiBZIwR19VSV
         dtuCv7UwmkIiIpSVydgmRXsq4SXT58K1jkHIDA+Ja2eNYeQ+JfYhBSLGJgIqMWT+bc9u
         jn9DFsvsJFVEm/mT3Qd5QMUaScTC2c6I0EcwfuMOiA09m8OnLuDcKGustBEmOhByCNCb
         UdKibxAfAhQ0GVglWURs6ArttH3DtZw4RGMYEuyymQ5OdshzupJ3JETzCcjFbONxafd0
         wu37AbNCS4KyX/8swZ0UP0x5U0PV56Djw2JcQAFar7BoDTk/eaysFTu3H9fIm7n1xXs5
         FvuA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=4UOe5b2fx3Fh6u6Lqilgce/bFIZGpTYCRKnCgcNYEYs=;
        b=mSBp0J3XGj/vLfDjnXNAVCOfGzGwl547PgIm0nAyRAIH4+6+/PfIoJO3Yt2hl3xQ2i
         4RfUjfb5345SFHkKKbsMzLo72m/Zfuccgp6o0yrw9oboCKsd0+GuwUjKlwZVJ8M6jrDl
         NK8/8Ik9Z21LXW+bndSH5fRqcXoYBjQGmIN0TgCp3BrsbEd/CsKLV7djFG4A/EFkhJnm
         Cei24hDcuya4t8/kK1M5uKEsIH+Ty9QO1QmB//Te96LXMaQrgpVbUi+E524nTVSlBkHl
         wGAqR37BN9FVY/52/5lX97+h92CQm3q46l6LvbfYUknMqFy8JA5xoq6Ou9IDXmCi8+1I
         spmg==
X-Gm-Message-State: AOAM5338Tjj4o0kG6M60EC2bF48XcfzWklVOF3jm+MfSUGcVLPXcFFuh
	/fvty/kHySRpCE2/j6OIRSM=
X-Google-Smtp-Source: ABdhPJyc8/U4Ariizb4QvY5nGICIcZLhQ4VEvgrpEwjxD9fWyR7o9OBbxbMiUCjC06cPGD3+3H7lLQ==
X-Received: by 2002:a65:610c:: with SMTP id z12mr151324pgu.453.1627483991403;
        Wed, 28 Jul 2021 07:53:11 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 02/13] x86/HV: Initialize shared memory boundary in the Isolation VM.
Date: Wed, 28 Jul 2021 10:52:17 -0400
Message-Id: <20210728145232.285861-3-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V exposes shared memory boundary via cpuid
HYPERV_CPUID_ISOLATION_CONFIG and store it in the
shared_gpa_boundary of ms_hyperv struct. This prepares
to share memory with host for SNP guest.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/kernel/cpu/mshyperv.c |  2 ++
 include/asm-generic/mshyperv.h | 12 +++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index dcfbd2770d7f..773e84e134b3 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -327,6 +327,8 @@ static void __init ms_hyperv_init_platform(void)
 	if (ms_hyperv.priv_high & HV_ISOLATION) {
 		ms_hyperv.isolation_config_a = cpuid_eax(HYPERV_CPUID_ISOLATION_CONFIG);
 		ms_hyperv.isolation_config_b = cpuid_ebx(HYPERV_CPUID_ISOLATION_CONFIG);
+		ms_hyperv.shared_gpa_boundary =
+			(u64)1 << ms_hyperv.shared_gpa_boundary_bits;
 
 		pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n",
 			ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index 4269f3174e58..aa26d24a5ca9 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -35,8 +35,18 @@ struct ms_hyperv_info {
 	u32 max_vp_index;
 	u32 max_lp_index;
 	u32 isolation_config_a;
-	u32 isolation_config_b;
+	union {
+		u32 isolation_config_b;
+		struct {
+			u32 cvm_type : 4;
+			u32 Reserved11 : 1;
+			u32 shared_gpa_boundary_active : 1;
+			u32 shared_gpa_boundary_bits : 6;
+			u32 Reserved12 : 20;
+		};
+	};
 	void  __percpu **ghcb_base;
+	u64 shared_gpa_boundary;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161583.296586 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvn-0002me-Es; Wed, 28 Jul 2021 14:53:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161583.296586; Wed, 28 Jul 2021 14:53:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvn-0002mT-AQ; Wed, 28 Jul 2021 14:53:11 +0000
Received: by outflank-mailman (input) for mailman id 161583;
 Wed, 28 Jul 2021 14:53:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kvm-0002W0-Os
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:10 +0000
Received: from mail-pl1-x632.google.com (unknown [2607:f8b0:4864:20::632])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8ef6e888-024b-47e5-b703-ca2fbe2129c6;
 Wed, 28 Jul 2021 14:53:08 +0000 (UTC)
Received: by mail-pl1-x632.google.com with SMTP id q2so2966178plr.11
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:08 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.06
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:07 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 8ef6e888-024b-47e5-b703-ca2fbe2129c6
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=Ra70YmOoKyUigRxssc8bdLw9SZJrXLPE0YQ4dcYNGVo=;
        b=LmKHehSzb54ioqXz1ez6t1x7O5R86K81v+pIequaacef/tO9BDCzSjcgHS6hGrhQv2
         qzARLAfbJyE6sHuqTHz9vyy6kXmEQNBaebh5fDgBK43+147na/gMGQQWfTHnt9bMZGW3
         PI/xSNfASsbrpBOIlGaXrQ5YMH8qB1cvo0ozOtA0lboOZTSaOrbYcfC4Zr/MGizHIj4K
         UQn2qOIx7n+NsKeHbyzbGo6c8gE+9TdBheq0rWZ1PelrbCELqStjq++WLQ17f+9YCPDK
         xG/Aw0FLnS5tr9GZTkXJZ/H6BWgFhS32PFT431EJh1q4PAKHp3O/cbydxcbUBibmcfx9
         Kdig==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=Ra70YmOoKyUigRxssc8bdLw9SZJrXLPE0YQ4dcYNGVo=;
        b=gdrbvtuIDzx5Z+LkwIAeM3CsOT68Jfh+0xdn7aw+qRxfoeaLxkg3TLWl+1igpRranW
         jMHzxqVUthkXpM3bs64pwD7Jwryk08nRGI8pYFBJc6afWMKqNJ2WiCTcPtcwN3ZV2zlH
         NaVyGf1wzfOGJt30mKTLtBuPrkMkKQKUsqJKskbp41PCNiQ2nIKj3rqzXcuAq63pUiGt
         zpgwuSEoqj+Sm8GmOZ5+gK+GQDIrBT1Oernx3lV1Pw4iZsRiDkfHsOm5DtISiskFyPHF
         MVIpSInujZOb1Ay0RQcRzOZtbTnvseE7mucGUbPqkM8A6CeQNEiXJsCrW/lcjWgIjZgD
         k2cA==
X-Gm-Message-State: AOAM53116mdHdNkKoxCfwcNdge/B29RbmcjzH5ubySaHGUTtZpab6a5z
	vVCwRvZ/vBk1wO+UHRK+I+A=
X-Google-Smtp-Source: ABdhPJzsXb8YMbXnD2VQ8NxmDIMRNHMhIgP2MCg4JalE3hBkOx0ET9j7WaB1NV2mPcJTuLhWN1sM8A==
X-Received: by 2002:a17:90a:ce02:: with SMTP id f2mr9955691pju.232.1627483988220;
        Wed, 28 Jul 2021 07:53:08 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 01/13] x86/HV: Initialize GHCB page in Isolation VM
Date: Wed, 28 Jul 2021 10:52:16 -0400
Message-Id: <20210728145232.285861-2-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V exposes GHCB page via SEV ES GHCB MSR for SNP guest
to communicate with hypervisor. Map GHCB page for all
cpus to read/write MSR register and submit hvcall request
via GHCB.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/hv_init.c       | 73 +++++++++++++++++++++++++++++++--
 arch/x86/include/asm/mshyperv.h |  2 +
 include/asm-generic/mshyperv.h  |  2 +
 3 files changed, 73 insertions(+), 4 deletions(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 4a643a85d570..ee449c076ef4 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -20,6 +20,7 @@
 #include <linux/kexec.h>
 #include <linux/version.h>
 #include <linux/vmalloc.h>
+#include <linux/io.h>
 #include <linux/mm.h>
 #include <linux/hyperv.h>
 #include <linux/slab.h>
@@ -42,6 +43,26 @@ static void *hv_hypercall_pg_saved;
 struct hv_vp_assist_page **hv_vp_assist_page;
 EXPORT_SYMBOL_GPL(hv_vp_assist_page);
 
+static int hyperv_init_ghcb(void)
+{
+	u64 ghcb_gpa;
+	void *ghcb_va;
+	void **ghcb_base;
+
+	if (!ms_hyperv.ghcb_base)
+		return -EINVAL;
+
+	rdmsrl(MSR_AMD64_SEV_ES_GHCB, ghcb_gpa);
+	ghcb_va = memremap(ghcb_gpa, HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+	if (!ghcb_va)
+		return -ENOMEM;
+
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	*ghcb_base = ghcb_va;
+
+	return 0;
+}
+
 static int hv_cpu_init(unsigned int cpu)
 {
 	struct hv_vp_assist_page **hvp = &hv_vp_assist_page[smp_processor_id()];
@@ -75,6 +96,8 @@ static int hv_cpu_init(unsigned int cpu)
 		wrmsrl(HV_X64_MSR_VP_ASSIST_PAGE, val);
 	}
 
+	hyperv_init_ghcb();
+
 	return 0;
 }
 
@@ -167,6 +190,31 @@ static int hv_cpu_die(unsigned int cpu)
 {
 	struct hv_reenlightenment_control re_ctrl;
 	unsigned int new_cpu;
+	unsigned long flags;
+	void **input_arg;
+	void *pg;
+	void **ghcb_va = NULL;
+
+	local_irq_save(flags);
+	input_arg = (void **)this_cpu_ptr(hyperv_pcpu_input_arg);
+	pg = *input_arg;
+	*input_arg = NULL;
+
+	if (hv_root_partition) {
+		void **output_arg;
+
+		output_arg = (void **)this_cpu_ptr(hyperv_pcpu_output_arg);
+		*output_arg = NULL;
+	}
+
+	if (ms_hyperv.ghcb_base) {
+		ghcb_va = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+		if (*ghcb_va)
+			memunmap(*ghcb_va);
+		*ghcb_va = NULL;
+	}
+
+	local_irq_restore(flags);
 
 	hv_common_cpu_die(cpu);
 
@@ -340,9 +388,22 @@ void __init hyperv_init(void)
 			VMALLOC_END, GFP_KERNEL, PAGE_KERNEL_ROX,
 			VM_FLUSH_RESET_PERMS, NUMA_NO_NODE,
 			__builtin_return_address(0));
-	if (hv_hypercall_pg == NULL) {
-		wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
-		goto remove_cpuhp_state;
+	if (hv_hypercall_pg == NULL)
+		goto clean_guest_os_id;
+
+	if (hv_isolation_type_snp()) {
+		ms_hyperv.ghcb_base = alloc_percpu(void *);
+		if (!ms_hyperv.ghcb_base)
+			goto clean_guest_os_id;
+
+		if (hyperv_init_ghcb()) {
+			free_percpu(ms_hyperv.ghcb_base);
+			ms_hyperv.ghcb_base = NULL;
+			goto clean_guest_os_id;
+		}
+
+		/* Hyper-V requires to write guest os id via ghcb in SNP IVM. */
+		hv_ghcb_msr_write(HV_X64_MSR_GUEST_OS_ID, guest_id);
 	}
 
 	rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
@@ -403,7 +464,8 @@ void __init hyperv_init(void)
 	hv_query_ext_cap(0);
 	return;
 
-remove_cpuhp_state:
+clean_guest_os_id:
+	wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
 	cpuhp_remove_state(cpuhp);
 free_vp_assist_page:
 	kfree(hv_vp_assist_page);
@@ -431,6 +493,9 @@ void hyperv_cleanup(void)
 	 */
 	hv_hypercall_pg = NULL;
 
+	if (ms_hyperv.ghcb_base)
+		free_percpu(ms_hyperv.ghcb_base);
+
 	/* Reset the hypercall page */
 	hypercall_msr.as_uint64 = 0;
 	wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index adccbc209169..6627cfd2bfba 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -11,6 +11,8 @@
 #include <asm/paravirt.h>
 #include <asm/mshyperv.h>
 
+DECLARE_STATIC_KEY_FALSE(isolation_type_snp);
+
 typedef int (*hyperv_fill_flush_list_func)(
 		struct hv_guest_mapping_flush_list *flush,
 		void *data);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index c1ab6a6e72b5..4269f3174e58 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -36,6 +36,7 @@ struct ms_hyperv_info {
 	u32 max_lp_index;
 	u32 isolation_config_a;
 	u32 isolation_config_b;
+	void  __percpu **ghcb_base;
 };
 extern struct ms_hyperv_info ms_hyperv;
 
@@ -237,6 +238,7 @@ bool hv_is_hyperv_initialized(void);
 bool hv_is_hibernation_supported(void);
 enum hv_isolation_type hv_get_isolation_type(void);
 bool hv_is_isolation_supported(void);
+bool hv_isolation_type_snp(void);
 void hyperv_cleanup(void);
 bool hv_query_ext_cap(u64 cap_query);
 #else /* CONFIG_HYPERV */
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161586.296610 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvy-0003V3-5G; Wed, 28 Jul 2021 14:53:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161586.296610; Wed, 28 Jul 2021 14:53:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kvy-0003Ul-0D; Wed, 28 Jul 2021 14:53:22 +0000
Received: by outflank-mailman (input) for mailman id 161586;
 Wed, 28 Jul 2021 14:53:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kvw-0002W0-P1
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:20 +0000
Received: from mail-pl1-x62a.google.com (unknown [2607:f8b0:4864:20::62a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 084ba6f8-18b9-469b-a169-0c8027a1b045;
 Wed, 28 Jul 2021 14:53:15 +0000 (UTC)
Received: by mail-pl1-x62a.google.com with SMTP id d17so2972900plh.10
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:15 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.13
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:13 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 084ba6f8-18b9-469b-a169-0c8027a1b045
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=/79DzCyIHtWmaT+NzmaxtEIMVXl5WnXl2WxqKtTVhJc=;
        b=hGNxhplSujZA86RagN4zqWeSm8MjGR5wsvAT6oDexvY5ZHXdLk4NaBmTsOL4UfVIs0
         Fgg8HC7TYWh4fbmWrK9RdUrXoutrRqx258TtIIXYra8pcljEwhXOabhl0XaomgA4aGWn
         wND/7qeQcDE2tZpWMcyVxz4jpTpz38Y8zzEpeZwN4GDCT2fyAwTnD4bFjIw2GcgaF7ij
         VoZn1AQgJwULyrZlqzRfue6mnJ6CNT2iwHGMjkFHIugZbut1hzYeU0IIXZ1zixsHIE48
         X0HkVdO4JHgMLvVpPhNGAV2T7z3SQ/h5Ax416TT0V3MSYhMM8SFYqNP622Niak1n+uJ7
         jVHA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=/79DzCyIHtWmaT+NzmaxtEIMVXl5WnXl2WxqKtTVhJc=;
        b=seB1cnAmHdQgSfdlS0qcoKgClTEMMTLieKb1J7AfBLwFPPKJXP1V4gM0A3MKrzY2ZN
         DmvttQPStZ/bqHkQlxfRZIr7SRwF1BZJWZVwpXjjDkRE66Z15MjKVVCXCsSItR+gAP36
         cec2fmTOQpzeJjxKebxSOTo/p/qBjM3UwXL59P8jvGPFVlR2adacFDIM/BQFYUQUcGgm
         /ukTlZs5r2BoiWDwx7/ws3Z/ZF3D62Jdxahy4cppvy5991j0rjuhXVBdAdR6cQTeNnBV
         QpM4V6az63pBQ9eIdwI2LagSh+hGWYBWwHx0UMT5T5QKGTuCAW584Ehcll0R1LEXshbM
         JJ/A==
X-Gm-Message-State: AOAM533o0H0wxmlMoU6GikZiWbZEOQx7fyjaxPft2cJaEDofJ10KvMaz
	q6G2V6SLtJbFhpopWmdfJYk=
X-Google-Smtp-Source: ABdhPJxgNPNARBGy7DDQhfhzd75Fkf5dcYm6KNp/rI8FF8zLjPwrqJZeCTVRgpl6JWXIpl/EXBulxQ==
X-Received: by 2002:a17:90b:1612:: with SMTP id la18mr233349pjb.95.1627483994252;
        Wed, 28 Jul 2021 07:53:14 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 03/13] x86/HV: Add new hvcall guest address host visibility support
Date: Wed, 28 Jul 2021 10:52:18 -0400
Message-Id: <20210728145232.285861-4-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Add new hvcall guest address host visibility support to mark
memory visible to host. Call it inside set_memory_decrypted
/encrypted().

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/Makefile           |   2 +-
 arch/x86/hyperv/ivm.c              | 112 +++++++++++++++++++++++++++++
 arch/x86/include/asm/hyperv-tlfs.h |  18 +++++
 arch/x86/include/asm/mshyperv.h    |   3 +-
 arch/x86/mm/pat/set_memory.c       |   6 +-
 include/asm-generic/hyperv-tlfs.h  |   1 +
 6 files changed, 139 insertions(+), 3 deletions(-)
 create mode 100644 arch/x86/hyperv/ivm.c

diff --git a/arch/x86/hyperv/Makefile b/arch/x86/hyperv/Makefile
index 48e2c51464e8..5d2de10809ae 100644
--- a/arch/x86/hyperv/Makefile
+++ b/arch/x86/hyperv/Makefile
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0-only
-obj-y			:= hv_init.o mmu.o nested.o irqdomain.o
+obj-y			:= hv_init.o mmu.o nested.o irqdomain.o ivm.o
 obj-$(CONFIG_X86_64)	+= hv_apic.o hv_proc.o
 
 ifdef CONFIG_X86_64
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
new file mode 100644
index 000000000000..24a58795abd8
--- /dev/null
+++ b/arch/x86/hyperv/ivm.c
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Hyper-V Isolation VM interface with paravisor and hypervisor
+ *
+ * Author:
+ *  Tianyu Lan <Tianyu.Lan@microsoft.com>
+ */
+
+#include <linux/hyperv.h>
+#include <linux/types.h>
+#include <linux/bitfield.h>
+#include <linux/slab.h>
+#include <asm/io.h>
+#include <asm/mshyperv.h>
+
+/*
+ * hv_mark_gpa_visibility - Set pages visible to host via hvcall.
+ *
+ * In Isolation VM, all guest memory is encripted from host and guest
+ * needs to set memory visible to host via hvcall before sharing memory
+ * with host.
+ */
+int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility)
+{
+	struct hv_gpa_range_for_visibility **input_pcpu, *input;
+	u16 pages_processed;
+	u64 hv_status;
+	unsigned long flags;
+
+	/* no-op if partition isolation is not enabled */
+	if (!hv_is_isolation_supported())
+		return 0;
+
+	if (count > HV_MAX_MODIFY_GPA_REP_COUNT) {
+		pr_err("Hyper-V: GPA count:%d exceeds supported:%lu\n", count,
+			HV_MAX_MODIFY_GPA_REP_COUNT);
+		return -EINVAL;
+	}
+
+	local_irq_save(flags);
+	input_pcpu = (struct hv_gpa_range_for_visibility **)
+			this_cpu_ptr(hyperv_pcpu_input_arg);
+	input = *input_pcpu;
+	if (unlikely(!input)) {
+		local_irq_restore(flags);
+		return -EINVAL;
+	}
+
+	input->partition_id = HV_PARTITION_ID_SELF;
+	input->host_visibility = visibility;
+	input->reserved0 = 0;
+	input->reserved1 = 0;
+	memcpy((void *)input->gpa_page_list, pfn, count * sizeof(*pfn));
+	hv_status = hv_do_rep_hypercall(
+			HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY, count,
+			0, input, &pages_processed);
+	local_irq_restore(flags);
+
+	if (!(hv_status & HV_HYPERCALL_RESULT_MASK))
+		return 0;
+
+	return hv_status & HV_HYPERCALL_RESULT_MASK;
+}
+EXPORT_SYMBOL(hv_mark_gpa_visibility);
+
+/*
+ * hv_set_mem_host_visibility - Set specified memory visible to host.
+ *
+ * In Isolation VM, all guest memory is encrypted from host and guest
+ * needs to set memory visible to host via hvcall before sharing memory
+ * with host. This function works as wrap of hv_mark_gpa_visibility()
+ * with memory base and size.
+ */
+static int hv_set_mem_host_visibility(void *kbuffer, size_t size, u32 visibility)
+{
+	int pagecount = size >> HV_HYP_PAGE_SHIFT;
+	u64 *pfn_array;
+	int ret = 0;
+	int i, pfn;
+
+	if (!hv_is_isolation_supported() || !ms_hyperv.ghcb_base)
+		return 0;
+
+	pfn_array = kzalloc(HV_HYP_PAGE_SIZE, GFP_KERNEL);
+	if (!pfn_array)
+		return -ENOMEM;
+
+	for (i = 0, pfn = 0; i < pagecount; i++) {
+		pfn_array[pfn] = virt_to_hvpfn(kbuffer + i * HV_HYP_PAGE_SIZE);
+		pfn++;
+
+		if (pfn == HV_MAX_MODIFY_GPA_REP_COUNT || i == pagecount - 1) {
+			ret |= hv_mark_gpa_visibility(pfn, pfn_array, visibility);
+			pfn = 0;
+
+			if (ret)
+				goto err_free_pfn_array;
+		}
+	}
+
+ err_free_pfn_array:
+	kfree(pfn_array);
+	return ret;
+}
+
+int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
+{
+	return hv_set_mem_host_visibility((void *)addr,
+			numpages * HV_HYP_PAGE_SIZE,
+			enc ? VMBUS_PAGE_NOT_VISIBLE
+			: VMBUS_PAGE_VISIBLE_READ_WRITE);
+}
diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
index f1366ce609e3..f027b5bf6076 100644
--- a/arch/x86/include/asm/hyperv-tlfs.h
+++ b/arch/x86/include/asm/hyperv-tlfs.h
@@ -276,6 +276,11 @@ enum hv_isolation_type {
 #define HV_X64_MSR_TIME_REF_COUNT	HV_REGISTER_TIME_REF_COUNT
 #define HV_X64_MSR_REFERENCE_TSC	HV_REGISTER_REFERENCE_TSC
 
+/* Hyper-V GPA map flags */
+#define	VMBUS_PAGE_NOT_VISIBLE		0
+#define	VMBUS_PAGE_VISIBLE_READ_ONLY	1
+#define	VMBUS_PAGE_VISIBLE_READ_WRITE	3
+
 /*
  * Declare the MSR used to setup pages used to communicate with the hypervisor.
  */
@@ -578,4 +583,17 @@ enum hv_interrupt_type {
 
 #include <asm-generic/hyperv-tlfs.h>
 
+/* All input parameters should be in single page. */
+#define HV_MAX_MODIFY_GPA_REP_COUNT		\
+	((PAGE_SIZE / sizeof(u64)) - 2)
+
+/* HvCallModifySparseGpaPageHostVisibility hypercall */
+struct hv_gpa_range_for_visibility {
+	u64 partition_id;
+	u32 host_visibility:2;
+	u32 reserved0:30;
+	u32 reserved1;
+	u64 gpa_page_list[HV_MAX_MODIFY_GPA_REP_COUNT];
+} __packed;
+
 #endif
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 6627cfd2bfba..68dd207c2603 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -190,7 +190,8 @@ struct irq_domain *hv_create_pci_msi_domain(void);
 int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 		struct hv_interrupt_entry *entry);
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
-
+int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
+int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
 #else /* CONFIG_HYPERV */
 static inline void hyperv_init(void) {}
 static inline void hyperv_setup_mmu_ops(void) {}
diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index ad8a5c586a35..ba2a22886976 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -29,6 +29,8 @@
 #include <asm/proto.h>
 #include <asm/memtype.h>
 #include <asm/set_memory.h>
+#include <asm/hyperv-tlfs.h>
+#include <asm/mshyperv.h>
 
 #include "../mm_internal.h"
 
@@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
 	int ret;
 
 	/* Nothing to do if memory encryption is not active */
-	if (!mem_encrypt_active())
+	if (hv_is_isolation_supported())
+		return hv_set_mem_enc(addr, numpages, enc);
+	else if (!mem_encrypt_active())
 		return 0;
 
 	/* Should not be working on unaligned addresses */
diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h
index 56348a541c50..8ed6733d5146 100644
--- a/include/asm-generic/hyperv-tlfs.h
+++ b/include/asm-generic/hyperv-tlfs.h
@@ -158,6 +158,7 @@ struct ms_hyperv_tsc_page {
 #define HVCALL_RETARGET_INTERRUPT		0x007e
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0
+#define HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY 0x00db
 
 /* Extended hypercalls */
 #define HV_EXT_CALL_QUERY_CAPABILITIES		0x8001
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161588.296622 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kw2-0003t1-EV; Wed, 28 Jul 2021 14:53:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161588.296622; Wed, 28 Jul 2021 14:53:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kw2-0003sq-Ap; Wed, 28 Jul 2021 14:53:26 +0000
Received: by outflank-mailman (input) for mailman id 161588;
 Wed, 28 Jul 2021 14:53:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kw1-0002W0-P8
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:25 +0000
Received: from mail-pl1-x62a.google.com (unknown [2607:f8b0:4864:20::62a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1221c58a-84a1-44a0-913d-d0033ac9bb2a;
 Wed, 28 Jul 2021 14:53:17 +0000 (UTC)
Received: by mail-pl1-x62a.google.com with SMTP id q2so2966678plr.11
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:17 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.15
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:16 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1221c58a-84a1-44a0-913d-d0033ac9bb2a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=+XJfA3AqCHkXuREWq5JYX1SJ1GS8dmwfVs7cs/uDyzo=;
        b=JTfxH2MI6lr3vhghm+bYn1lDtWC6S40YgGpd2n5ZBE0WXJ57nPRp/vMeCnq6SmO90h
         UPiRb39uM4iMAgW0slMgb6ATsLC4Z0lW9pf+AZc7pl5WJGMDawbbzgXKBt1Z+GuOXtly
         9TYhzeKXWg55tjzDSrNqnVlbyUVgZ1VhgspLUJ3MDp7VmLIaFpFkVzlACYJoXgx4h9W9
         y5VivpznJ4FNs2S4rqNSmRUG+RlcTHOQjC6dLg1qrzPm0TcGvPf/VqvCVComHCJhCA2P
         7AXzP0K57z4DE458hjOtv6x4NMiUz3iK84iyApsE6NxjF0AupgOoBJTCCu7r53H4pSie
         WfpA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=+XJfA3AqCHkXuREWq5JYX1SJ1GS8dmwfVs7cs/uDyzo=;
        b=GQiN3wbkiDDRL4G7/YmIIdyY4veaczrDS8I4DTDbCWdgsvJDeh3pr7um+KNUL8mm4G
         zju7WnWuLMDSDzGgtWzp1tFoUoVOAPe8+HoCXyOeqt/97C7xStJ+Wx7GQSnYZ1bjeyaB
         iiyY1jicYH8bizBlXLYukKYRRGVkGvCGTw/5e5TQBIw1Wd6hyAm5YSniZCORxMoi22Ql
         +a2PuIqlK4mlAD6TkuTxUfr+Mxj5SNgo6bsPIxFaSgHD1iRwAgbQJoRDMvxsUSIoK9N8
         To6h3C9xClwOVfueRgQmxCiXV8Gpd/znJkWfvIlZwPsnuVoFqTi+XyckV8w1AwJ+/3GJ
         N2TA==
X-Gm-Message-State: AOAM532PgkrEoK81roj8QYnhE5fjHAiXhOtQJSpQs+HSxdeqL0vXFmzg
	ySYtMS8kidbv2qmfwGrEfc8=
X-Google-Smtp-Source: ABdhPJz4j/vsLQnZny1GE3WB7JJRgcpBrn921B99u5//TBJ+oOZxL5FLeGsOUc3yuQEVykF8bbeFJQ==
X-Received: by 2002:a65:654c:: with SMTP id a12mr224730pgw.118.1627483996980;
        Wed, 28 Jul 2021 07:53:16 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 04/13] HV: Mark vmbus ring buffer visible to host in Isolation VM
Date: Wed, 28 Jul 2021 10:52:19 -0400
Message-Id: <20210728145232.285861-5-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Mark vmbus ring buffer visible with set_memory_decrypted() when
establish gpadl handle.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/channel.c   | 38 ++++++++++++++++++++++++++++++++++++--
 include/linux/hyperv.h | 10 ++++++++++
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index f3761c73b074..01048bb07082 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -17,6 +17,7 @@
 #include <linux/hyperv.h>
 #include <linux/uio.h>
 #include <linux/interrupt.h>
+#include <linux/set_memory.h>
 #include <asm/page.h>
 #include <asm/mshyperv.h>
 
@@ -465,7 +466,7 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	struct list_head *curr;
 	u32 next_gpadl_handle;
 	unsigned long flags;
-	int ret = 0;
+	int ret = 0, index;
 
 	next_gpadl_handle =
 		(atomic_inc_return(&vmbus_connection.next_gpadl_handle) - 1);
@@ -474,6 +475,13 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	if (ret)
 		return ret;
 
+	ret = set_memory_decrypted((unsigned long)kbuffer,
+				   HVPFN_UP(size));
+	if (ret) {
+		pr_warn("Failed to set host visibility.\n");
+		return ret;
+	}
+
 	init_completion(&msginfo->waitevent);
 	msginfo->waiting_channel = channel;
 
@@ -539,6 +547,15 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	/* At this point, we received the gpadl created msg */
 	*gpadl_handle = gpadlmsg->gpadl;
 
+	if (type == HV_GPADL_BUFFER)
+		index = 0;
+	else
+		index = channel->gpadl_range[1].gpadlhandle ? 2 : 1;
+
+	channel->gpadl_range[index].size = size;
+	channel->gpadl_range[index].buffer = kbuffer;
+	channel->gpadl_range[index].gpadlhandle = *gpadl_handle;
+
 cleanup:
 	spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
 	list_del(&msginfo->msglistentry);
@@ -549,6 +566,11 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel,
 	}
 
 	kfree(msginfo);
+
+	if (ret)
+		set_memory_encrypted((unsigned long)kbuffer,
+				     HVPFN_UP(size));
+
 	return ret;
 }
 
@@ -811,7 +833,7 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
 	struct vmbus_channel_gpadl_teardown *msg;
 	struct vmbus_channel_msginfo *info;
 	unsigned long flags;
-	int ret;
+	int ret, i;
 
 	info = kzalloc(sizeof(*info) +
 		       sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL);
@@ -859,6 +881,18 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
 	spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
 
 	kfree(info);
+
+	/* Find gpadl buffer virtual address and size. */
+	for (i = 0; i < VMBUS_GPADL_RANGE_COUNT; i++)
+		if (channel->gpadl_range[i].gpadlhandle == gpadl_handle)
+			break;
+
+	if (set_memory_encrypted((unsigned long)channel->gpadl_range[i].buffer,
+			HVPFN_UP(channel->gpadl_range[i].size)))
+		pr_warn("Fail to set mem host visibility.\n");
+
+	channel->gpadl_range[i].gpadlhandle = 0;
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(vmbus_teardown_gpadl);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 2e859d2f9609..06eccaba10c5 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -809,6 +809,14 @@ struct vmbus_device {
 
 #define VMBUS_DEFAULT_MAX_PKT_SIZE 4096
 
+struct vmbus_gpadl_range {
+	u32 gpadlhandle;
+	u32 size;
+	void *buffer;
+};
+
+#define VMBUS_GPADL_RANGE_COUNT		3
+
 struct vmbus_channel {
 	struct list_head listentry;
 
@@ -829,6 +837,8 @@ struct vmbus_channel {
 	struct completion rescind_event;
 
 	u32 ringbuffer_gpadlhandle;
+	/* GPADL_RING and Send/Receive GPADL_BUFFER. */
+	struct vmbus_gpadl_range gpadl_range[VMBUS_GPADL_RANGE_COUNT];
 
 	/* Allocated memory for ring buffer */
 	struct page *ringbuffer_page;
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161591.296634 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kw7-0004XC-OA; Wed, 28 Jul 2021 14:53:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161591.296634; Wed, 28 Jul 2021 14:53:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kw7-0004Wz-Kf; Wed, 28 Jul 2021 14:53:31 +0000
Received: by outflank-mailman (input) for mailman id 161591;
 Wed, 28 Jul 2021 14:53:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kw6-0002W0-PB
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:30 +0000
Received: from mail-pj1-x1036.google.com (unknown [2607:f8b0:4864:20::1036])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fa2e4d68-e223-437c-8f25-ded714f106b5;
 Wed, 28 Jul 2021 14:53:20 +0000 (UTC)
Received: by mail-pj1-x1036.google.com with SMTP id
 mz5-20020a17090b3785b0290176ecf64922so10410370pjb.3
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:20 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.18
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:19 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: fa2e4d68-e223-437c-8f25-ded714f106b5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=HB97a+2OhA3eQm24fC97PNoK0NDP1pJHHUMQuiKyYaM=;
        b=VtdJuUxlciBl6pJKd+T5kPRnYqd4ADa8ubLACu1CVtNEwjYJlxr6eDq4+Hgfya+Te6
         PvnGqgUHTKpdkX0DI5yBZrcTH08G9xfi8ByRylJS+rQNdBVLN52e1QC99fLLVE4Gewuk
         wsLXwPZKb9LDn1HRTpPaZXhsqfC/c04IGxbNz35Gi3i7k1h7G/XDTXWKSyXE1UaFWPY5
         onQqhH0PUc2MzGtKX+YPuIlyMYvuZmSeK3fAQ5U4fCdjCpsRy+OqjnMlxUwK/ToqunsD
         Cfb0x4z6CqpNpUexwa90vvWfcWZHgWT0i4DgoK6is5msDBDI/SrDjm3ravlTkHksJsLc
         9uYA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=HB97a+2OhA3eQm24fC97PNoK0NDP1pJHHUMQuiKyYaM=;
        b=BAHE4dcwp0htfADRy6z3ubMm8zLhiACZ4TbYL5I55Xn3Bzx+1euksMuxaQDBlTVZ7Z
         Z4lefyGU5DuXN/SuSHR7Y4awhwKcvojncNf29E7otHRL4sEeMBs7JM3DluX5sjyzn00B
         bs4xR4FqYVkDDzd8UVYwEmLSMy7WR4jLvUOT+02nHneXUF6Tn+5vxJbPvbIk8GmBjy36
         Cvcf1p8nbxls+bxnLm0mpUPCYCjGCJAKMvsuJOg6lP3JYiZn7eryaIHwG3KY47stJyU8
         22DPTMU3esFTQ82SGWC71gyLwd6BJ6r7QZQYie8OCheX3rvWsB1eb1JuXdNE04RYMA4Y
         KyRA==
X-Gm-Message-State: AOAM530VDQokk+8z1BOBoutGneJrcGZnIPjabuDq4kNmlVqBeFbia+hL
	+L0FfuETf8hfMwVXCUPUkPk=
X-Google-Smtp-Source: ABdhPJwJR0YDD/874EWanOoXxDHqUKtLEIWjbHNtwnsflKAdj5/12656WWege/+q5qLjYQ2qOK3pTw==
X-Received: by 2002:a63:b953:: with SMTP id v19mr228948pgo.40.1627483999761;
        Wed, 28 Jul 2021 07:53:19 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 05/13] HV: Add Write/Read MSR registers via ghcb page
Date: Wed, 28 Jul 2021 10:52:20 -0400
Message-Id: <20210728145232.285861-6-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides GHCB protocol to write Synthetic Interrupt
Controller MSR registers in Isolation VM with AMD SEV SNP
and these registers are emulated by hypervisor directly.
Hyper-V requires to write SINTx MSR registers twice. First
writes MSR via GHCB page to communicate with hypervisor
and then writes wrmsr instruction to talk with paravisor
which runs in VMPL0. Guest OS ID MSR also needs to be set
via GHCB.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/hv_init.c       |  16 +----
 arch/x86/hyperv/ivm.c           | 114 ++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h |  78 +++++++++++++++++++-
 arch/x86/include/asm/sev.h      |   4 ++
 arch/x86/kernel/cpu/mshyperv.c  |   3 +
 arch/x86/kernel/sev-shared.c    |  21 ++++--
 drivers/hv/hv.c                 | 121 ++++++++++++++++++++++----------
 include/asm-generic/mshyperv.h  |  12 +++-
 8 files changed, 307 insertions(+), 62 deletions(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index ee449c076ef4..b99f6b3930b7 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -392,7 +392,7 @@ void __init hyperv_init(void)
 		goto clean_guest_os_id;
 
 	if (hv_isolation_type_snp()) {
-		ms_hyperv.ghcb_base = alloc_percpu(void *);
+		ms_hyperv.ghcb_base = alloc_percpu(union hv_ghcb __percpu *);
 		if (!ms_hyperv.ghcb_base)
 			goto clean_guest_os_id;
 
@@ -485,6 +485,7 @@ void hyperv_cleanup(void)
 
 	/* Reset our OS id */
 	wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
+	hv_ghcb_msr_write(HV_X64_MSR_GUEST_OS_ID, 0);
 
 	/*
 	 * Reset hypercall page reference before reset the page,
@@ -558,16 +559,3 @@ bool hv_is_hyperv_initialized(void)
 	return hypercall_msr.enable;
 }
 EXPORT_SYMBOL_GPL(hv_is_hyperv_initialized);
-
-enum hv_isolation_type hv_get_isolation_type(void)
-{
-	if (!(ms_hyperv.priv_high & HV_ISOLATION))
-		return HV_ISOLATION_TYPE_NONE;
-	return FIELD_GET(HV_ISOLATION_TYPE, ms_hyperv.isolation_config_b);
-}
-EXPORT_SYMBOL_GPL(hv_get_isolation_type);
-
-bool hv_is_isolation_supported(void)
-{
-	return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
-}
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 24a58795abd8..9c30d5bb7b64 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -6,6 +6,8 @@
  *  Tianyu Lan <Tianyu.Lan@microsoft.com>
  */
 
+#include <linux/types.h>
+#include <linux/bitfield.h>
 #include <linux/hyperv.h>
 #include <linux/types.h>
 #include <linux/bitfield.h>
@@ -13,6 +15,118 @@
 #include <asm/io.h>
 #include <asm/mshyperv.h>
 
+void hv_ghcb_msr_write(u64 msr, u64 value)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+
+	ghcb_set_rcx(&hv_ghcb->ghcb, msr);
+	ghcb_set_rax(&hv_ghcb->ghcb, lower_32_bits(value));
+	ghcb_set_rdx(&hv_ghcb->ghcb, value >> 32);
+
+	if (sev_es_ghcb_hv_call(&hv_ghcb->ghcb, NULL, SVM_EXIT_MSR, 1, 0))
+		pr_warn("Fail to write msr via ghcb %llx.\n", msr);
+
+	local_irq_restore(flags);
+}
+
+void hv_ghcb_msr_read(u64 msr, u64 *value)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+
+	ghcb_set_rcx(&hv_ghcb->ghcb, msr);
+	if (sev_es_ghcb_hv_call(&hv_ghcb->ghcb, NULL, SVM_EXIT_MSR, 0, 0))
+		pr_warn("Fail to read msr via ghcb %llx.\n", msr);
+	else
+		*value = (u64)lower_32_bits(hv_ghcb->ghcb.save.rax)
+			| ((u64)lower_32_bits(hv_ghcb->ghcb.save.rdx) << 32);
+	local_irq_restore(flags);
+}
+
+void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value)
+{
+	hv_ghcb_msr_read(msr, value);
+}
+EXPORT_SYMBOL_GPL(hv_sint_rdmsrl_ghcb);
+
+void hv_sint_wrmsrl_ghcb(u64 msr, u64 value)
+{
+	hv_ghcb_msr_write(msr, value);
+
+	/* Write proxy bit vua wrmsrl instruction. */
+	if (msr >= HV_X64_MSR_SINT0 && msr <= HV_X64_MSR_SINT15)
+		wrmsrl(msr, value | 1 << 20);
+}
+EXPORT_SYMBOL_GPL(hv_sint_wrmsrl_ghcb);
+
+void hv_signal_eom_ghcb(void)
+{
+	hv_sint_wrmsrl_ghcb(HV_X64_MSR_EOM, 0);
+}
+EXPORT_SYMBOL_GPL(hv_signal_eom_ghcb);
+
+enum hv_isolation_type hv_get_isolation_type(void)
+{
+	if (!(ms_hyperv.priv_high & HV_ISOLATION))
+		return HV_ISOLATION_TYPE_NONE;
+	return FIELD_GET(HV_ISOLATION_TYPE, ms_hyperv.isolation_config_b);
+}
+EXPORT_SYMBOL_GPL(hv_get_isolation_type);
+
+/*
+ * hv_is_isolation_supported - Check system runs in the Hyper-V
+ * isolation VM.
+ */
+bool hv_is_isolation_supported(void)
+{
+	return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
+}
+
+DEFINE_STATIC_KEY_FALSE(isolation_type_snp);
+
+/*
+ * hv_isolation_type_snp - Check system runs in the AMD SEV-SNP based
+ * isolation VM.
+ */
+bool hv_isolation_type_snp(void)
+{
+	return static_branch_unlikely(&isolation_type_snp);
+}
+EXPORT_SYMBOL_GPL(hv_isolation_type_snp);
+
 /*
  * hv_mark_gpa_visibility - Set pages visible to host via hvcall.
  *
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 68dd207c2603..3c0cafdf7309 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -30,6 +30,63 @@ static inline u64 hv_get_register(unsigned int reg)
 	return value;
 }
 
+#define hv_get_sint_reg(val, reg) {		\
+	if (hv_isolation_type_snp())		\
+		hv_get_##reg##_ghcb(&val);	\
+	else					\
+		rdmsrl(HV_X64_MSR_##reg, val);	\
+	}
+
+#define hv_set_sint_reg(val, reg) {		\
+	if (hv_isolation_type_snp())		\
+		hv_set_##reg##_ghcb(val);	\
+	else					\
+		wrmsrl(HV_X64_MSR_##reg, val);	\
+	}
+
+
+#define hv_get_simp(val) hv_get_sint_reg(val, SIMP)
+#define hv_get_siefp(val) hv_get_sint_reg(val, SIEFP)
+
+#define hv_set_simp(val) hv_set_sint_reg(val, SIMP)
+#define hv_set_siefp(val) hv_set_sint_reg(val, SIEFP)
+
+#define hv_get_synic_state(val) {			\
+	if (hv_isolation_type_snp())			\
+		hv_get_synic_state_ghcb(&val);		\
+	else						\
+		rdmsrl(HV_X64_MSR_SCONTROL, val);	\
+	}
+#define hv_set_synic_state(val) {			\
+	if (hv_isolation_type_snp())			\
+		hv_set_synic_state_ghcb(val);		\
+	else						\
+		wrmsrl(HV_X64_MSR_SCONTROL, val);	\
+	}
+
+#define hv_get_vp_index(index) rdmsrl(HV_X64_MSR_VP_INDEX, index)
+
+#define hv_signal_eom() {			 \
+	if (hv_isolation_type_snp() &&		 \
+	    old_msg_type != HVMSG_TIMER_EXPIRED) \
+		hv_signal_eom_ghcb();		 \
+	else					 \
+		wrmsrl(HV_X64_MSR_EOM, 0);	 \
+	}
+
+#define hv_get_synint_state(int_num, val) {		\
+	if (hv_isolation_type_snp())			\
+		hv_get_synint_state_ghcb(int_num, &val);\
+	else						\
+		rdmsrl(HV_X64_MSR_SINT0 + int_num, val);\
+	}
+#define hv_set_synint_state(int_num, val) {		\
+	if (hv_isolation_type_snp())			\
+		hv_set_synint_state_ghcb(int_num, val);	\
+	else						\
+		wrmsrl(HV_X64_MSR_SINT0 + int_num, val);\
+	}
+
 #define hv_get_raw_timer() rdtsc_ordered()
 
 void hyperv_vector_handler(struct pt_regs *regs);
@@ -192,6 +249,25 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
 int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
 int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
+void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
+void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
+void hv_signal_eom_ghcb(void);
+void hv_ghcb_msr_write(u64 msr, u64 value);
+void hv_ghcb_msr_read(u64 msr, u64 *value);
+
+#define hv_get_synint_state_ghcb(int_num, val)			\
+	hv_sint_rdmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
+#define hv_set_synint_state_ghcb(int_num, val) \
+	hv_sint_wrmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
+
+#define hv_get_SIMP_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SIMP, val)
+#define hv_set_SIMP_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SIMP, val)
+
+#define hv_get_SIEFP_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SIEFP, val)
+#define hv_set_SIEFP_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SIEFP, val)
+
+#define hv_get_synic_state_ghcb(val) hv_sint_rdmsrl_ghcb(HV_X64_MSR_SCONTROL, val)
+#define hv_set_synic_state_ghcb(val) hv_sint_wrmsrl_ghcb(HV_X64_MSR_SCONTROL, val)
 #else /* CONFIG_HYPERV */
 static inline void hyperv_init(void) {}
 static inline void hyperv_setup_mmu_ops(void) {}
@@ -208,9 +284,9 @@ static inline int hyperv_flush_guest_mapping_range(u64 as,
 {
 	return -1;
 }
+static inline void hv_signal_eom_ghcb(void) { };
 #endif /* CONFIG_HYPERV */
 
-
 #include <asm-generic/mshyperv.h>
 
 #endif
diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h
index fa5cd05d3b5b..4249fde0a30e 100644
--- a/arch/x86/include/asm/sev.h
+++ b/arch/x86/include/asm/sev.h
@@ -81,6 +81,10 @@ static __always_inline void sev_es_nmi_complete(void)
 		__sev_es_nmi_complete();
 }
 extern int __init sev_es_efi_map_ghcbs(pgd_t *pgd);
+extern enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
+				   struct es_em_ctxt *ctxt,
+				   u64 exit_code, u64 exit_info_1,
+				   u64 exit_info_2);
 #else
 static inline void sev_es_ist_enter(struct pt_regs *regs) { }
 static inline void sev_es_ist_exit(void) { }
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 773e84e134b3..46a09cdfa77a 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -332,6 +332,9 @@ static void __init ms_hyperv_init_platform(void)
 
 		pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n",
 			ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b);
+
+		if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP)
+			static_branch_enable(&isolation_type_snp);
 	}
 
 	if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) {
diff --git a/arch/x86/kernel/sev-shared.c b/arch/x86/kernel/sev-shared.c
index 9f90f460a28c..e039e55b9c72 100644
--- a/arch/x86/kernel/sev-shared.c
+++ b/arch/x86/kernel/sev-shared.c
@@ -94,10 +94,10 @@ static void vc_finish_insn(struct es_em_ctxt *ctxt)
 	ctxt->regs->ip += ctxt->insn.length;
 }
 
-static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
-					  struct es_em_ctxt *ctxt,
-					  u64 exit_code, u64 exit_info_1,
-					  u64 exit_info_2)
+enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
+				   struct es_em_ctxt *ctxt,
+				   u64 exit_code, u64 exit_info_1,
+				   u64 exit_info_2)
 {
 	enum es_result ret;
 
@@ -109,7 +109,16 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 	ghcb_set_sw_exit_info_1(ghcb, exit_info_1);
 	ghcb_set_sw_exit_info_2(ghcb, exit_info_2);
 
-	sev_es_wr_ghcb_msr(__pa(ghcb));
+	/*
+	 * Hyper-V runs paravisor with SEV. Ghcb page is allocated by
+	 * paravisor and not needs to be updated in the Linux guest.
+	 * Otherwise, the ghcb page's PA reported by paravisor is above
+	 * VTOM. Hyper-V use this function with NULL for ctxt point and
+	 * skip setting ghcb page in such case.
+	 */
+	if (ctxt)
+		sev_es_wr_ghcb_msr(__pa(ghcb));
+
 	VMGEXIT();
 
 	if ((ghcb->save.sw_exit_info_1 & 0xffffffff) == 1) {
@@ -120,7 +129,7 @@ static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
 		v = info & SVM_EVTINJ_VEC_MASK;
 
 		/* Check if exception information from hypervisor is sane. */
-		if ((info & SVM_EVTINJ_VALID) &&
+		if (ctxt && (info & SVM_EVTINJ_VALID) &&
 		    ((v == X86_TRAP_GP) || (v == X86_TRAP_UD)) &&
 		    ((info & SVM_EVTINJ_TYPE_MASK) == SVM_EVTINJ_TYPE_EXEPT)) {
 			ctxt->fi.vector = v;
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index e83507f49676..59f7173c4d9f 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -8,6 +8,7 @@
  */
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
@@ -136,17 +137,24 @@ int hv_synic_alloc(void)
 		tasklet_init(&hv_cpu->msg_dpc,
 			     vmbus_on_msg_dpc, (unsigned long) hv_cpu);
 
-		hv_cpu->synic_message_page =
-			(void *)get_zeroed_page(GFP_ATOMIC);
-		if (hv_cpu->synic_message_page == NULL) {
-			pr_err("Unable to allocate SYNIC message page\n");
-			goto err;
-		}
+		/*
+		 * Synic message and event pages are allocated by paravisor.
+		 * Skip these pages allocation here.
+		 */
+		if (!hv_isolation_type_snp()) {
+			hv_cpu->synic_message_page =
+				(void *)get_zeroed_page(GFP_ATOMIC);
+			if (hv_cpu->synic_message_page == NULL) {
+				pr_err("Unable to allocate SYNIC message page\n");
+				goto err;
+			}
 
-		hv_cpu->synic_event_page = (void *)get_zeroed_page(GFP_ATOMIC);
-		if (hv_cpu->synic_event_page == NULL) {
-			pr_err("Unable to allocate SYNIC event page\n");
-			goto err;
+			hv_cpu->synic_event_page =
+				(void *)get_zeroed_page(GFP_ATOMIC);
+			if (hv_cpu->synic_event_page == NULL) {
+				pr_err("Unable to allocate SYNIC event page\n");
+				goto err;
+			}
 		}
 
 		hv_cpu->post_msg_page = (void *)get_zeroed_page(GFP_ATOMIC);
@@ -173,10 +181,17 @@ void hv_synic_free(void)
 	for_each_present_cpu(cpu) {
 		struct hv_per_cpu_context *hv_cpu
 			= per_cpu_ptr(hv_context.cpu_context, cpu);
+		free_page((unsigned long)hv_cpu->post_msg_page);
+
+		/*
+		 * Synic message and event pages are allocated by paravisor.
+		 * Skip free these pages here.
+		 */
+		if (hv_isolation_type_snp())
+			continue;
 
 		free_page((unsigned long)hv_cpu->synic_event_page);
 		free_page((unsigned long)hv_cpu->synic_message_page);
-		free_page((unsigned long)hv_cpu->post_msg_page);
 	}
 
 	kfree(hv_context.hv_numa_map);
@@ -199,26 +214,43 @@ void hv_synic_enable_regs(unsigned int cpu)
 	union hv_synic_scontrol sctrl;
 
 	/* Setup the Synic's message page */
-	simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP);
+	hv_get_simp(simp.as_uint64);
 	simp.simp_enabled = 1;
-	simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page)
-		>> HV_HYP_PAGE_SHIFT;
 
-	hv_set_register(HV_REGISTER_SIMP, simp.as_uint64);
+	if (hv_isolation_type_snp()) {
+		hv_cpu->synic_message_page
+			= memremap(simp.base_simp_gpa << HV_HYP_PAGE_SHIFT,
+				   HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+		if (!hv_cpu->synic_message_page)
+			pr_err("Fail to map syinc message page.\n");
+	} else {
+		simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page)
+			>> HV_HYP_PAGE_SHIFT;
+	}
+
+	hv_set_simp(simp.as_uint64);
 
 	/* Setup the Synic's event page */
-	siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP);
+	hv_get_siefp(siefp.as_uint64);
 	siefp.siefp_enabled = 1;
-	siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page)
-		>> HV_HYP_PAGE_SHIFT;
 
-	hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64);
+	if (hv_isolation_type_snp()) {
+		hv_cpu->synic_event_page =
+			memremap(siefp.base_siefp_gpa << HV_HYP_PAGE_SHIFT,
+				 HV_HYP_PAGE_SIZE, MEMREMAP_WB);
+
+		if (!hv_cpu->synic_event_page)
+			pr_err("Fail to map syinc event page.\n");
+	} else {
+		siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page)
+			>> HV_HYP_PAGE_SHIFT;
+	}
+	hv_set_siefp(siefp.as_uint64);
 
 	/* Setup the shared SINT. */
 	if (vmbus_irq != -1)
 		enable_percpu_irq(vmbus_irq, 0);
-	shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 +
-					VMBUS_MESSAGE_SINT);
+	hv_get_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
 	shared_sint.vector = vmbus_interrupt;
 	shared_sint.masked = false;
@@ -233,14 +265,12 @@ void hv_synic_enable_regs(unsigned int cpu)
 #else
 	shared_sint.auto_eoi = 0;
 #endif
-	hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT,
-				shared_sint.as_uint64);
+	hv_set_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
 	/* Enable the global synic bit */
-	sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL);
+	hv_get_synic_state(sctrl.as_uint64);
 	sctrl.enable = 1;
-
-	hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64);
+	hv_set_synic_state(sctrl.as_uint64);
 }
 
 int hv_synic_init(unsigned int cpu)
@@ -257,37 +287,50 @@ int hv_synic_init(unsigned int cpu)
  */
 void hv_synic_disable_regs(unsigned int cpu)
 {
+	struct hv_per_cpu_context *hv_cpu
+		= per_cpu_ptr(hv_context.cpu_context, cpu);
 	union hv_synic_sint shared_sint;
 	union hv_synic_simp simp;
 	union hv_synic_siefp siefp;
 	union hv_synic_scontrol sctrl;
 
-	shared_sint.as_uint64 = hv_get_register(HV_REGISTER_SINT0 +
-					VMBUS_MESSAGE_SINT);
-
+	hv_get_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 	shared_sint.masked = 1;
+	hv_set_synint_state(VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
+
 
 	/* Need to correctly cleanup in the case of SMP!!! */
 	/* Disable the interrupt */
-	hv_set_register(HV_REGISTER_SINT0 + VMBUS_MESSAGE_SINT,
-				shared_sint.as_uint64);
+	hv_get_simp(simp.as_uint64);
 
-	simp.as_uint64 = hv_get_register(HV_REGISTER_SIMP);
+	/*
+	 * In Isolation VM, sim and sief pages are allocated by
+	 * paravisor. These pages also will be used by kdump
+	 * kernel. So just reset enable bit here and keep page
+	 * addresses.
+	 */
 	simp.simp_enabled = 0;
-	simp.base_simp_gpa = 0;
+	if (hv_isolation_type_snp())
+		memunmap(hv_cpu->synic_message_page);
+	else
+		simp.base_simp_gpa = 0;
 
-	hv_set_register(HV_REGISTER_SIMP, simp.as_uint64);
+	hv_set_simp(simp.as_uint64);
 
-	siefp.as_uint64 = hv_get_register(HV_REGISTER_SIEFP);
+	hv_get_siefp(siefp.as_uint64);
 	siefp.siefp_enabled = 0;
-	siefp.base_siefp_gpa = 0;
 
-	hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64);
+	if (hv_isolation_type_snp())
+		memunmap(hv_cpu->synic_event_page);
+	else
+		siefp.base_siefp_gpa = 0;
+
+	hv_set_siefp(siefp.as_uint64);
 
 	/* Disable the global synic bit */
-	sctrl.as_uint64 = hv_get_register(HV_REGISTER_SCONTROL);
+	hv_get_synic_state(sctrl.as_uint64);
 	sctrl.enable = 0;
-	hv_set_register(HV_REGISTER_SCONTROL, sctrl.as_uint64);
+	hv_set_synic_state(sctrl.as_uint64);
 
 	if (vmbus_irq != -1)
 		disable_percpu_irq(vmbus_irq);
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index aa26d24a5ca9..b0cfc25dffaa 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -23,9 +23,16 @@
 #include <linux/bitops.h>
 #include <linux/cpumask.h>
 #include <linux/nmi.h>
+#include <asm/svm.h>
+#include <asm/sev.h>
 #include <asm/ptrace.h>
+#include <asm/mshyperv.h>
 #include <asm/hyperv-tlfs.h>
 
+union hv_ghcb {
+	struct ghcb ghcb;
+} __packed __aligned(PAGE_SIZE);
+
 struct ms_hyperv_info {
 	u32 features;
 	u32 priv_high;
@@ -45,7 +52,7 @@ struct ms_hyperv_info {
 			u32 Reserved12 : 20;
 		};
 	};
-	void  __percpu **ghcb_base;
+	union hv_ghcb __percpu **ghcb_base;
 	u64 shared_gpa_boundary;
 };
 extern struct ms_hyperv_info ms_hyperv;
@@ -55,6 +62,7 @@ extern void  __percpu  **hyperv_pcpu_output_arg;
 
 extern u64 hv_do_hypercall(u64 control, void *inputaddr, void *outputaddr);
 extern u64 hv_do_fast_hypercall8(u16 control, u64 input8);
+extern bool hv_isolation_type_snp(void);
 
 /* Helper functions that provide a consistent pattern for checking Hyper-V hypercall status. */
 static inline int hv_result(u64 status)
@@ -149,7 +157,7 @@ static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type)
 		 * possibly deliver another msg from the
 		 * hypervisor
 		 */
-		hv_set_register(HV_REGISTER_EOM, 0);
+		hv_signal_eom();
 	}
 }
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161598.296646 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwD-0005C4-7o; Wed, 28 Jul 2021 14:53:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161598.296646; Wed, 28 Jul 2021 14:53:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwD-0005Bp-48; Wed, 28 Jul 2021 14:53:37 +0000
Received: by outflank-mailman (input) for mailman id 161598;
 Wed, 28 Jul 2021 14:53:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwB-0002W0-PU
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:35 +0000
Received: from mail-pl1-x635.google.com (unknown [2607:f8b0:4864:20::635])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f99b2e51-5a8c-462d-a7dd-48dfdefccb59;
 Wed, 28 Jul 2021 14:53:22 +0000 (UTC)
Received: by mail-pl1-x635.google.com with SMTP id c16so2994308plh.7
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:22 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.21
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:22 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f99b2e51-5a8c-462d-a7dd-48dfdefccb59
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=v51HbVj9oUgMShtZEj3Pp1xicbgTTaQMmcrpxVSeHWs=;
        b=J1bP3zz2e9Ky6Qac+aF/nab3UrGFJCXZcJO+f4RIMpnMf5/FPnldo0qUWUtq//NT5y
         gC/R4rItPntl/y/ciDSd9VWz04QFZe3XcST16OzWZtFjSEz1aVUAeDJ3QtRE2cSWojXO
         cZ75GJsU4hDfJfqFP8o6hN6kwUJtfSeEk21602ZW7rRvu7mNJyBe8lvmT9orbv2qW+P1
         XUJ2oymKMxvbkhA8y5/wvIzfEbXg0UZ8APbjtFUVxdcyM0fkc0tM4I993BegwvwzHhPo
         XwT+MQZ2cphoNI70/JrvceBhTCfttWejvlYS6aYsvD62kE1r33z8ezadatHFd9fbrpvF
         GEBg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=v51HbVj9oUgMShtZEj3Pp1xicbgTTaQMmcrpxVSeHWs=;
        b=Wo4DTXAYU/PXTog+hvvooYiB61LoRiLqkv9Zz1Z1rJWNF5SSzQB4isBXZ4CCVbuZyH
         kfddNe19kzPIYTWXVv2cj2mfV7am7gLvC7WkteT+42uPL4YGr0WBEZsJMGXPZ89Qyq44
         NgXBiWcGpFgbzy3E2KeugpNStt72W7GG5iPalfjimvYj3LV27pj6sgkiLcdVNCXpUNOk
         mlp29EO6qvlDg2L2ccCmtxmz5TFF1EXEbqphieBCvFmDTO0mKK6C3X/hHYW2e1WLMkA2
         6KIODUfbgnZHU/FzPhxMNO7hBHJKin5SEXYMMuLlSfMq1Cn2NJrHtfmNURdq1WKlV4hR
         CVVg==
X-Gm-Message-State: AOAM533Xv2OARwuQBrNRoAGxynH4+7kY2YR6s652eVaHxoPrROhGJXa7
	VUc4fIjE9JJEIGiaO4usJvM=
X-Google-Smtp-Source: ABdhPJx53zStKiyjEMPaVE5CG/AOPZ91uL54k+pFpCVnyB2dlyAFOANHVd5oiIcOg5eiMuEJpQ9u6g==
X-Received: by 2002:a63:ef02:: with SMTP id u2mr211497pgh.298.1627484002239;
        Wed, 28 Jul 2021 07:53:22 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 06/13] HV: Add ghcb hvcall support for SNP VM
Date: Wed, 28 Jul 2021 10:52:21 -0400
Message-Id: <20210728145232.285861-7-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V provides ghcb hvcall to handle VMBus
HVCALL_SIGNAL_EVENT and HVCALL_POST_MESSAGE
msg in SNP Isolation VM. Add such support.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/ivm.c           | 42 +++++++++++++++++++++++++++++++++
 arch/x86/include/asm/mshyperv.h |  1 +
 drivers/hv/connection.c         |  6 ++++-
 drivers/hv/hv.c                 |  8 ++++++-
 include/asm-generic/mshyperv.h  | 29 +++++++++++++++++++++++
 5 files changed, 84 insertions(+), 2 deletions(-)

diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 9c30d5bb7b64..13bab7f07085 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -15,6 +15,48 @@
 #include <asm/io.h>
 #include <asm/mshyperv.h>
 
+u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size)
+{
+	union hv_ghcb *hv_ghcb;
+	void **ghcb_base;
+	unsigned long flags;
+
+	if (!ms_hyperv.ghcb_base)
+		return -EFAULT;
+
+	WARN_ON(in_nmi());
+
+	local_irq_save(flags);
+	ghcb_base = (void **)this_cpu_ptr(ms_hyperv.ghcb_base);
+	hv_ghcb = (union hv_ghcb *)*ghcb_base;
+	if (!hv_ghcb) {
+		local_irq_restore(flags);
+		return -EFAULT;
+	}
+
+	memset(hv_ghcb, 0x00, HV_HYP_PAGE_SIZE);
+	hv_ghcb->ghcb.protocol_version = 1;
+	hv_ghcb->ghcb.ghcb_usage = 1;
+
+	hv_ghcb->hypercall.outputgpa = (u64)output;
+	hv_ghcb->hypercall.hypercallinput.asuint64 = 0;
+	hv_ghcb->hypercall.hypercallinput.callcode = control;
+
+	if (input_size)
+		memcpy(hv_ghcb->hypercall.hypercalldata, input, input_size);
+
+	VMGEXIT();
+
+	hv_ghcb->ghcb.ghcb_usage = 0xffffffff;
+	memset(hv_ghcb->ghcb.save.valid_bitmap, 0,
+	       sizeof(hv_ghcb->ghcb.save.valid_bitmap));
+
+	local_irq_restore(flags);
+
+	return hv_ghcb->hypercall.hypercalloutput.callstatus;
+}
+EXPORT_SYMBOL_GPL(hv_ghcb_hypercall);
+
 void hv_ghcb_msr_write(u64 msr, u64 value)
 {
 	union hv_ghcb *hv_ghcb;
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 3c0cafdf7309..8bf26e6e7055 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -254,6 +254,7 @@ void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
 void hv_signal_eom_ghcb(void);
 void hv_ghcb_msr_write(u64 msr, u64 value);
 void hv_ghcb_msr_read(u64 msr, u64 *value);
+u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size);
 
 #define hv_get_synint_state_ghcb(int_num, val)			\
 	hv_sint_rdmsrl_ghcb(HV_X64_MSR_SINT0 + int_num, val)
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 5e479d54918c..6d315c1465e0 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -447,6 +447,10 @@ void vmbus_set_event(struct vmbus_channel *channel)
 
 	++channel->sig_events;
 
-	hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event);
+	if (hv_isolation_type_snp())
+		hv_ghcb_hypercall(HVCALL_SIGNAL_EVENT, &channel->sig_event,
+				NULL, sizeof(u64));
+	else
+		hv_do_fast_hypercall8(HVCALL_SIGNAL_EVENT, channel->sig_event);
 }
 EXPORT_SYMBOL_GPL(vmbus_set_event);
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 59f7173c4d9f..e5c9fc467893 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -98,7 +98,13 @@ int hv_post_message(union hv_connection_id connection_id,
 	aligned_msg->payload_size = payload_size;
 	memcpy((void *)aligned_msg->payload, payload, payload_size);
 
-	status = hv_do_hypercall(HVCALL_POST_MESSAGE, aligned_msg, NULL);
+	if (hv_isolation_type_snp())
+		status = hv_ghcb_hypercall(HVCALL_POST_MESSAGE,
+				(void *)aligned_msg, NULL,
+				sizeof(struct hv_input_post_message));
+	else
+		status = hv_do_hypercall(HVCALL_POST_MESSAGE,
+				aligned_msg, NULL);
 
 	/* Preemption must remain disabled until after the hypercall
 	 * so some other thread can't get scheduled onto this cpu and
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index b0cfc25dffaa..317d2a8d9700 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -31,6 +31,35 @@
 
 union hv_ghcb {
 	struct ghcb ghcb;
+	struct {
+		u64 hypercalldata[509];
+		u64 outputgpa;
+		union {
+			union {
+				struct {
+					u32 callcode        : 16;
+					u32 isfast          : 1;
+					u32 reserved1       : 14;
+					u32 isnested        : 1;
+					u32 countofelements : 12;
+					u32 reserved2       : 4;
+					u32 repstartindex   : 12;
+					u32 reserved3       : 4;
+				};
+				u64 asuint64;
+			} hypercallinput;
+			union {
+				struct {
+					u16 callstatus;
+					u16 reserved1;
+					u32 elementsprocessed : 12;
+					u32 reserved2         : 20;
+				};
+				u64 asunit64;
+			} hypercalloutput;
+		};
+		u64 reserved2;
+	} hypercall;
 } __packed __aligned(PAGE_SIZE);
 
 struct ms_hyperv_info {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:42 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161602.296658 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwI-0005kE-Hr; Wed, 28 Jul 2021 14:53:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161602.296658; Wed, 28 Jul 2021 14:53:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwI-0005k5-EL; Wed, 28 Jul 2021 14:53:42 +0000
Received: by outflank-mailman (input) for mailman id 161602;
 Wed, 28 Jul 2021 14:53:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwG-0002W0-Pm
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:40 +0000
Received: from mail-pl1-x633.google.com (unknown [2607:f8b0:4864:20::633])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ecf234f3-4b96-4653-a1f0-b06fca0c9308;
 Wed, 28 Jul 2021 14:53:25 +0000 (UTC)
Received: by mail-pl1-x633.google.com with SMTP id t21so2955111plr.13
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:25 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.23
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:24 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ecf234f3-4b96-4653-a1f0-b06fca0c9308
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=VC37tGvMnXRZFIidUDGGN3vUKeS5FmCKfybWMaE6JMY=;
        b=lh23Rm3aSU+fQaWGX59d9ft0lbpKg8YIgoW0ciAzDdoAicxxQA0REzzkXmGjNCrEGP
         4pj1gCuNR9MTox0HLcJ503kNlHTUux4o7GZcKj/lKGsRUPw3RikRbxR7SpBPKWxYqYVu
         xAkYNbZiR4WUrdjn5boJtiK7CDtDNXreVlifiqilqBV4N4cuNWP0fTtRbA3rbN6pN/1s
         RYiI6hEL9EIBT5ckmBGD6ZOx1hpJvBVU8Xhh1J6gBmIKH8LauQKmeMyjVtVR+wWihnkz
         OcxTQVpkPzEcil6Nqk2MWCZvGf7dWM8uECT0LE5ukPyeTp3SNM2AGww5Jr8E4esn0lwY
         7JMA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=VC37tGvMnXRZFIidUDGGN3vUKeS5FmCKfybWMaE6JMY=;
        b=R+avIWfUonXhpT9MooaI2IqWOwd1vh/oB6Y9mqyjxfdu9lvh5W3wigo6gNA8DrOjH2
         PZW3U+nWeTt9xdKbff1RCtS+8kFQbHO7BSvVrUu8un729d5Ftg0Qnf3dFZ0AQG3mxeix
         Q9swqJMhx7WgY4wXK9z+6ciesx9FV8AZufSMARw+rm2sk9ZBzrTYMl0PKgP4UTmgFAEC
         kNnKgKzPvWX3wdaAvQa0wJiFh9hFIl37ApAXQTucvrNPigwcapAXOctja0U4G89IG4xQ
         Ht6ZM1eq2r32k/yqRbZwmMsfUVDXS2cYgBFwZTbIHIEJ8Jw4MXFYRUcHdG+l5limVLZ7
         G+0Q==
X-Gm-Message-State: AOAM531WnFQg67YHj3hR3nL9L5hHy9U3qgG/kEF/hZd2m9uRSgDB3wVM
	+KTnf63zORw10N782IofSxs=
X-Google-Smtp-Source: ABdhPJwd/hsA9oYd6C/i3E05WDHsS/g/X1F+CQSyKJUNUTpiXXONzBW9uqRKafI8icCemeeqwaRYFg==
X-Received: by 2002:a05:6a00:1889:b029:332:13d6:a6eb with SMTP id x9-20020a056a001889b029033213d6a6ebmr269004pfh.25.1627484004862;
        Wed, 28 Jul 2021 07:53:24 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 07/13] HV/Vmbus: Add SNP support for VMbus channel initiate message
Date: Wed, 28 Jul 2021 10:52:22 -0400
Message-Id: <20210728145232.285861-8-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

The monitor pages in the CHANNELMSG_INITIATE_CONTACT msg are shared
with host in Isolation VM and so it's necessary to use hvcall to set
them visible to host. In Isolation VM with AMD SEV SNP, the access
address should be in the extra space which is above shared gpa
boundary. So remap these pages into the extra address(pa +
shared_gpa_boundary).

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/connection.c   | 65 +++++++++++++++++++++++++++++++++++++++
 drivers/hv/hyperv_vmbus.h |  1 +
 2 files changed, 66 insertions(+)

diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 6d315c1465e0..e6a7bae036a8 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -19,6 +19,7 @@
 #include <linux/vmalloc.h>
 #include <linux/hyperv.h>
 #include <linux/export.h>
+#include <linux/io.h>
 #include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
@@ -104,6 +105,12 @@ int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo, u32 version)
 
 	msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
 	msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
+
+	if (hv_is_isolation_supported()) {
+		msg->monitor_page1 += ms_hyperv.shared_gpa_boundary;
+		msg->monitor_page2 += ms_hyperv.shared_gpa_boundary;
+	}
+
 	msg->target_vcpu = hv_cpu_number_to_vp_number(VMBUS_CONNECT_CPU);
 
 	/*
@@ -148,6 +155,31 @@ int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo, u32 version)
 		return -ECONNREFUSED;
 	}
 
+	if (hv_is_isolation_supported()) {
+		vmbus_connection.monitor_pages_va[0]
+			= vmbus_connection.monitor_pages[0];
+		vmbus_connection.monitor_pages[0]
+			= memremap(msg->monitor_page1, HV_HYP_PAGE_SIZE,
+				   MEMREMAP_WB);
+		if (!vmbus_connection.monitor_pages[0])
+			return -ENOMEM;
+
+		vmbus_connection.monitor_pages_va[1]
+			= vmbus_connection.monitor_pages[1];
+		vmbus_connection.monitor_pages[1]
+			= memremap(msg->monitor_page2, HV_HYP_PAGE_SIZE,
+				   MEMREMAP_WB);
+		if (!vmbus_connection.monitor_pages[1]) {
+			memunmap(vmbus_connection.monitor_pages[0]);
+			return -ENOMEM;
+		}
+
+		memset(vmbus_connection.monitor_pages[0], 0x00,
+		       HV_HYP_PAGE_SIZE);
+		memset(vmbus_connection.monitor_pages[1], 0x00,
+		       HV_HYP_PAGE_SIZE);
+	}
+
 	return ret;
 }
 
@@ -159,6 +191,7 @@ int vmbus_connect(void)
 	struct vmbus_channel_msginfo *msginfo = NULL;
 	int i, ret = 0;
 	__u32 version;
+	u64 pfn[2];
 
 	/* Initialize the vmbus connection */
 	vmbus_connection.conn_state = CONNECTING;
@@ -216,6 +249,16 @@ int vmbus_connect(void)
 		goto cleanup;
 	}
 
+	if (hv_is_isolation_supported()) {
+		pfn[0] = virt_to_hvpfn(vmbus_connection.monitor_pages[0]);
+		pfn[1] = virt_to_hvpfn(vmbus_connection.monitor_pages[1]);
+		if (hv_mark_gpa_visibility(2, pfn,
+				VMBUS_PAGE_VISIBLE_READ_WRITE)) {
+			ret = -EFAULT;
+			goto cleanup;
+		}
+	}
+
 	msginfo = kzalloc(sizeof(*msginfo) +
 			  sizeof(struct vmbus_channel_initiate_contact),
 			  GFP_KERNEL);
@@ -284,6 +327,8 @@ int vmbus_connect(void)
 
 void vmbus_disconnect(void)
 {
+	u64 pfn[2];
+
 	/*
 	 * First send the unload request to the host.
 	 */
@@ -303,6 +348,26 @@ void vmbus_disconnect(void)
 		vmbus_connection.int_page = NULL;
 	}
 
+	if (hv_is_isolation_supported()) {
+		if (vmbus_connection.monitor_pages_va[0]) {
+			memunmap(vmbus_connection.monitor_pages[0]);
+			vmbus_connection.monitor_pages[0]
+				= vmbus_connection.monitor_pages_va[0];
+			vmbus_connection.monitor_pages_va[0] = NULL;
+		}
+
+		if (vmbus_connection.monitor_pages_va[1]) {
+			memunmap(vmbus_connection.monitor_pages[1]);
+			vmbus_connection.monitor_pages[1]
+				= vmbus_connection.monitor_pages_va[1];
+			vmbus_connection.monitor_pages_va[1] = NULL;
+		}
+
+		pfn[0] = virt_to_hvpfn(vmbus_connection.monitor_pages[0]);
+		pfn[1] = virt_to_hvpfn(vmbus_connection.monitor_pages[1]);
+		hv_mark_gpa_visibility(2, pfn, VMBUS_PAGE_NOT_VISIBLE);
+	}
+
 	hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[0]);
 	hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[1]);
 	vmbus_connection.monitor_pages[0] = NULL;
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 42f3d9d123a1..40bc0eff6665 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -240,6 +240,7 @@ struct vmbus_connection {
 	 * is child->parent notification
 	 */
 	struct hv_monitor_page *monitor_pages[2];
+	void *monitor_pages_va[2];
 	struct list_head chn_msg_list;
 	spinlock_t channelmsg_lock;
 
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:47 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161606.296670 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwM-0006Jl-T0; Wed, 28 Jul 2021 14:53:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161606.296670; Wed, 28 Jul 2021 14:53:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwM-0006JV-Om; Wed, 28 Jul 2021 14:53:46 +0000
Received: by outflank-mailman (input) for mailman id 161606;
 Wed, 28 Jul 2021 14:53:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwL-0002W0-Pv
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:45 +0000
Received: from mail-pj1-x102f.google.com (unknown [2607:f8b0:4864:20::102f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c69210b7-75e4-44c9-9cbd-4dfe9f6c821a;
 Wed, 28 Jul 2021 14:53:28 +0000 (UTC)
Received: by mail-pj1-x102f.google.com with SMTP id
 a4-20020a17090aa504b0290176a0d2b67aso10445796pjq.2
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:28 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.26
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:27 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c69210b7-75e4-44c9-9cbd-4dfe9f6c821a
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=XbGhpS5yStXGWn3Ym/sECphkTnEdMSaFIpokEER49XU=;
        b=UNhLY/LJxIAl3hhMGfLDx8/K71OJUBapw6jrZUfpa//sX59Io8zSSVcUJ8sd8cjZW/
         IpifuPgZgSoTpiyyg++LD6rZ4R/rYvPUNT+eGWaoRsuD/lg8L+ciBDrd8OOOBdCYEkhz
         js2tUkjW2OWBEEto7n/Fd/t6iuG17xUrfbznjAqsbPCx95UcbXwq0PyDZtwyA9zj+6mh
         VV8Co6/r2xhbZA7i0mVUlNmwG05pZjgpKubMnwnvDw1ZsaqDOX7+1LW6TgZdA+6ZzNZx
         yAkrAFOkM0dUOcCMbJKdi0x1+AvwbKrf68kT8YMwii/A0/t6vwHy17NTJ0/z7QmcNHam
         M/fg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=XbGhpS5yStXGWn3Ym/sECphkTnEdMSaFIpokEER49XU=;
        b=tShz20BFu9Jw+GarzQt7iF+UMPHh5lk8IK0fNqrVvQTaVGndTg5s9FDLrJLnMB5pOn
         RzZ+PDj4T1qKaA/il5CALS89Na/rswXTACpojCy8sTfEO0zpto7ifv/UJ+26UyvG8HmX
         h88CfT7U0D1MsJ3paMYEe1w0/ReNFjg/Pv03j7BaZ1NsIO8XdtgxSBhHp+x1Jrp8Op6O
         /9pwRx1XFscl2Sgz9yYOcPh/h2Vh8QcXIBisPANpBkWvczF285CRhHLqzKtyLmMkWhPe
         3yZw9eTo96/TKPPE89o7pvUSeOD56pOe/c2nPcPt+ncrNwaaBn5E4dGWSz+jWWUM0brH
         Sr2Q==
X-Gm-Message-State: AOAM532kTCW5GqvlUL6D4YJy+P82w6lWDtNtGbJv0KcMEuTxrDBiSpkc
	MIuktKJ7LoW2LdLJ798IsOA=
X-Google-Smtp-Source: ABdhPJzX5cWZmmYgsBr38KpDUq2ODpqZDr9XzO/VyKUYsGiabpMG2QyirU5nOCTo0Z0p6gSae2NO2w==
X-Received: by 2002:a17:90a:d181:: with SMTP id fu1mr10217202pjb.157.1627484007625;
        Wed, 28 Jul 2021 07:53:27 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 08/13] HV/Vmbus: Initialize VMbus ring buffer for Isolation VM
Date: Wed, 28 Jul 2021 10:52:23 -0400
Message-Id: <20210728145232.285861-9-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

VMbus ring buffer are shared with host and it's need to
be accessed via extra address space of Isolation VM with
SNP support. This patch is to map the ring buffer
address in extra address space via ioremap(). HV host
visibility hvcall smears data in the ring buffer and
so reset the ring buffer memory to zero after calling
visibility hvcall.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/hv/Kconfig        |  1 +
 drivers/hv/channel.c      | 10 +++++
 drivers/hv/hyperv_vmbus.h |  2 +
 drivers/hv/ring_buffer.c  | 84 ++++++++++++++++++++++++++++++---------
 4 files changed, 79 insertions(+), 18 deletions(-)

diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
index 66c794d92391..a8386998be40 100644
--- a/drivers/hv/Kconfig
+++ b/drivers/hv/Kconfig
@@ -7,6 +7,7 @@ config HYPERV
 	depends on X86 && ACPI && X86_LOCAL_APIC && HYPERVISOR_GUEST
 	select PARAVIRT
 	select X86_HV_CALLBACK_VECTOR
+	select VMAP_PFN
 	help
 	  Select this option to run Linux as a Hyper-V client operating
 	  system.
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 01048bb07082..7350da9dbe97 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -707,6 +707,16 @@ static int __vmbus_open(struct vmbus_channel *newchannel,
 	if (err)
 		goto error_clean_ring;
 
+	err = hv_ringbuffer_post_init(&newchannel->outbound,
+				      page, send_pages);
+	if (err)
+		goto error_free_gpadl;
+
+	err = hv_ringbuffer_post_init(&newchannel->inbound,
+				      &page[send_pages], recv_pages);
+	if (err)
+		goto error_free_gpadl;
+
 	/* Create and init the channel open message */
 	open_info = kzalloc(sizeof(*open_info) +
 			   sizeof(struct vmbus_channel_open_channel),
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 40bc0eff6665..15cd23a561f3 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -172,6 +172,8 @@ extern int hv_synic_cleanup(unsigned int cpu);
 /* Interface */
 
 void hv_ringbuffer_pre_init(struct vmbus_channel *channel);
+int hv_ringbuffer_post_init(struct hv_ring_buffer_info *ring_info,
+		struct page *pages, u32 page_cnt);
 
 int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
 		       struct page *pages, u32 pagecnt, u32 max_pkt_size);
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 2aee356840a2..d4f93fca1108 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -17,6 +17,8 @@
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/prefetch.h>
+#include <linux/io.h>
+#include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
 
@@ -179,43 +181,89 @@ void hv_ringbuffer_pre_init(struct vmbus_channel *channel)
 	mutex_init(&channel->outbound.ring_buffer_mutex);
 }
 
-/* Initialize the ring buffer. */
-int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
-		       struct page *pages, u32 page_cnt, u32 max_pkt_size)
+int hv_ringbuffer_post_init(struct hv_ring_buffer_info *ring_info,
+		       struct page *pages, u32 page_cnt)
 {
+	u64 physic_addr = page_to_pfn(pages) << PAGE_SHIFT;
+	unsigned long *pfns_wraparound;
+	void *vaddr;
 	int i;
-	struct page **pages_wraparound;
 
-	BUILD_BUG_ON((sizeof(struct hv_ring_buffer) != PAGE_SIZE));
+	if (!hv_isolation_type_snp())
+		return 0;
+
+	physic_addr += ms_hyperv.shared_gpa_boundary;
 
 	/*
 	 * First page holds struct hv_ring_buffer, do wraparound mapping for
 	 * the rest.
 	 */
-	pages_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(struct page *),
+	pfns_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(unsigned long),
 				   GFP_KERNEL);
-	if (!pages_wraparound)
+	if (!pfns_wraparound)
 		return -ENOMEM;
 
-	pages_wraparound[0] = pages;
+	pfns_wraparound[0] = physic_addr >> PAGE_SHIFT;
 	for (i = 0; i < 2 * (page_cnt - 1); i++)
-		pages_wraparound[i + 1] = &pages[i % (page_cnt - 1) + 1];
-
-	ring_info->ring_buffer = (struct hv_ring_buffer *)
-		vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, PAGE_KERNEL);
-
-	kfree(pages_wraparound);
+		pfns_wraparound[i + 1] = (physic_addr >> PAGE_SHIFT) +
+			i % (page_cnt - 1) + 1;
 
-
-	if (!ring_info->ring_buffer)
+	vaddr = vmap_pfn(pfns_wraparound, page_cnt * 2 - 1, PAGE_KERNEL_IO);
+	kfree(pfns_wraparound);
+	if (!vaddr)
 		return -ENOMEM;
 
-	ring_info->ring_buffer->read_index =
-		ring_info->ring_buffer->write_index = 0;
+	/* Clean memory after setting host visibility. */
+	memset((void *)vaddr, 0x00, page_cnt * PAGE_SIZE);
+
+	ring_info->ring_buffer = (struct hv_ring_buffer *)vaddr;
+	ring_info->ring_buffer->read_index = 0;
+	ring_info->ring_buffer->write_index = 0;
 
 	/* Set the feature bit for enabling flow control. */
 	ring_info->ring_buffer->feature_bits.value = 1;
 
+	return 0;
+}
+
+/* Initialize the ring buffer. */
+int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
+		       struct page *pages, u32 page_cnt, u32 max_pkt_size)
+{
+	int i;
+	struct page **pages_wraparound;
+
+	BUILD_BUG_ON((sizeof(struct hv_ring_buffer) != PAGE_SIZE));
+
+	if (!hv_isolation_type_snp()) {
+		/*
+		 * First page holds struct hv_ring_buffer, do wraparound mapping for
+		 * the rest.
+		 */
+		pages_wraparound = kcalloc(page_cnt * 2 - 1, sizeof(struct page *),
+					   GFP_KERNEL);
+		if (!pages_wraparound)
+			return -ENOMEM;
+
+		pages_wraparound[0] = pages;
+		for (i = 0; i < 2 * (page_cnt - 1); i++)
+			pages_wraparound[i + 1] = &pages[i % (page_cnt - 1) + 1];
+
+		ring_info->ring_buffer = (struct hv_ring_buffer *)
+			vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, PAGE_KERNEL);
+
+		kfree(pages_wraparound);
+
+		if (!ring_info->ring_buffer)
+			return -ENOMEM;
+
+		ring_info->ring_buffer->read_index =
+			ring_info->ring_buffer->write_index = 0;
+
+		/* Set the feature bit for enabling flow control. */
+		ring_info->ring_buffer->feature_bits.value = 1;
+	}
+
 	ring_info->ring_size = page_cnt << PAGE_SHIFT;
 	ring_info->ring_size_div10_reciprocal =
 		reciprocal_value(ring_info->ring_size / 10);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:53:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:53:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161610.296683 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwS-0006uE-8p; Wed, 28 Jul 2021 14:53:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161610.296683; Wed, 28 Jul 2021 14:53:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kwS-0006tr-1N; Wed, 28 Jul 2021 14:53:52 +0000
Received: by outflank-mailman (input) for mailman id 161610;
 Wed, 28 Jul 2021 14:53:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwQ-0002W0-Q5
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:53:50 +0000
Received: from mail-pl1-x62c.google.com (unknown [2607:f8b0:4864:20::62c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id caea6084-847c-49f8-a00a-2b631b3bfcbd;
 Wed, 28 Jul 2021 14:53:30 +0000 (UTC)
Received: by mail-pl1-x62c.google.com with SMTP id n10so3010650plf.4
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:30 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.28
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:29 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: caea6084-847c-49f8-a00a-2b631b3bfcbd
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=fRYEBTeqaJZ2nuhpRxylpNXV0HYL+RYR+rak5A96Ekw=;
        b=sig9nFz8eF+R0264OvGZWIOLFWHbYjYEwR2pu5Gx18nTH1XR1cSX7qthexUthkJGnF
         pJ3gnLUuVZV82sVUwcehqWiFsrDdsp1tZqg/jE/39e470wf89bUSF5Q65P+BWFm5oA6l
         tdiu0+NkRbrdrY5sf+SlZYMVQQRnay/soDyBm9yR+3Sk7hPDtBJcXtSKp6bbcAlin5vP
         TxrwmdY7JJpG3nMN0Kpik8j7JBNr1h1zSYFRfmYey7tr/PqG3AfyBn5BZzutMLEWs9dk
         Q8BFOoHDdjXEgX/RmQsfZ/nngsOe/X2TpZTA23wyhqE+8CwnuHHe28EpNrXDO0BWSkNE
         89qw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=fRYEBTeqaJZ2nuhpRxylpNXV0HYL+RYR+rak5A96Ekw=;
        b=iSff11AjMloSoGUAY+Q6TcmGDBSoYIyqYUEOQbcLu3/i7jIr+c2fMsFPUVBrKlFJC/
         yTGh23QuqfvLgxPxiLxPvxw3cv/VMSYTa/mTkehugXoNOXY7euepjvcA9kkI9n/e8mcS
         B2UOUvs1XBqjHJtklbM2wXAzdtxP/rhyrQtfSvDJfTcpPpzDDwnPE3h3Gb59OTWuED0y
         phIlOkf3fdc9V2wIsaQ01wbhqPZH2K+ZWr9QyjAji9uHIZklpIGU56EHwClnajr6y/Hx
         kg8vCNj9hzUJJZLJfq1pyzXCLlJHxM7bENOuX4Zt4apzuN9QV255f0LNz9o8qYEBWiP2
         jc9A==
X-Gm-Message-State: AOAM532MCIvE5qk1UQnibecBpvez9c9W+iL/DZgTV2RUO7Wsh/i9gU5C
	u2KiPMsNiPZBYkFd1Mido8c=
X-Google-Smtp-Source: ABdhPJw5OcxnrbSJBNvT8e2xeKUOHmvmo/7aRU5B5UYJ8E3STm6ku1q9/sANkCbS99R2obrk00cckA==
X-Received: by 2002:a17:90b:385:: with SMTP id ga5mr6922305pjb.183.1627484010063;
        Wed, 28 Jul 2021 07:53:30 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 09/13] DMA: Add dma_map_decrypted/dma_unmap_encrypted() function
Date: Wed, 28 Jul 2021 10:52:24 -0400
Message-Id: <20210728145232.285861-10-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Hyper-V Isolation VM with AMD SEV, swiotlb boucne buffer
needs to be mapped into address space above vTOM and so
introduce dma_map_decrypted/dma_unmap_encrypted() to map/unmap
bounce buffer memory. The platform can populate man/unmap callback
in the dma memory decrypted ops.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 include/linux/dma-map-ops.h |  9 +++++++++
 kernel/dma/mapping.c        | 22 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index 0d53a96a3d64..01d60a024e45 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -71,6 +71,11 @@ struct dma_map_ops {
 	unsigned long (*get_merge_boundary)(struct device *dev);
 };
 
+struct dma_memory_decrypted_ops {
+	void *(*map)(void *addr, unsigned long size);
+	void (*unmap)(void *addr);
+};
+
 #ifdef CONFIG_DMA_OPS
 #include <asm/dma-mapping.h>
 
@@ -374,6 +379,10 @@ static inline void debug_dma_dump_mappings(struct device *dev)
 }
 #endif /* CONFIG_DMA_API_DEBUG */
 
+void *dma_map_decrypted(void *addr, unsigned long size);
+int dma_unmap_decrypted(void *addr, unsigned long size);
+
 extern const struct dma_map_ops dma_dummy_ops;
+extern struct dma_memory_decrypted_ops dma_memory_generic_decrypted_ops;
 
 #endif /* _LINUX_DMA_MAP_OPS_H */
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 2b06a809d0b9..6fb150dc1750 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -13,11 +13,13 @@
 #include <linux/of_device.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
+#include <asm/set_memory.h>
 #include "debug.h"
 #include "direct.h"
 
 bool dma_default_coherent;
 
+struct dma_memory_decrypted_ops dma_memory_generic_decrypted_ops;
 /*
  * Managed DMA API
  */
@@ -736,3 +738,23 @@ unsigned long dma_get_merge_boundary(struct device *dev)
 	return ops->get_merge_boundary(dev);
 }
 EXPORT_SYMBOL_GPL(dma_get_merge_boundary);
+
+void *dma_map_decrypted(void *addr, unsigned long size)
+{
+	if (set_memory_decrypted((unsigned long)addr,
+				 size / PAGE_SIZE))
+		return NULL;
+
+	if (dma_memory_generic_decrypted_ops.map)
+		return dma_memory_generic_decrypted_ops.map(addr, size);
+	else
+		return addr;
+}
+
+int dma_unmap_encrypted(void *addr, unsigned long size)
+{
+	if (dma_memory_generic_decrypted_ops.unmap)
+		dma_memory_generic_decrypted_ops.unmap(addr);
+
+	return set_memory_encrypted((unsigned long)addr, size / PAGE_SIZE);
+}
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:55:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:55:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161625.296694 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kyM-0000HK-SV; Wed, 28 Jul 2021 14:55:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161625.296694; Wed, 28 Jul 2021 14:55:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kyM-0000HD-Oo; Wed, 28 Jul 2021 14:55:50 +0000
Received: by outflank-mailman (input) for mailman id 161625;
 Wed, 28 Jul 2021 14:55:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwa-0002W0-QR
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:54:00 +0000
Received: from mail-pj1-x102e.google.com (unknown [2607:f8b0:4864:20::102e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 73f76943-e8a9-476b-b47f-60c6712fe3d1;
 Wed, 28 Jul 2021 14:53:32 +0000 (UTC)
Received: by mail-pj1-x102e.google.com with SMTP id
 mz5-20020a17090b3785b0290176ecf64922so10411258pjb.3
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:32 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.31
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:32 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 73f76943-e8a9-476b-b47f-60c6712fe3d1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=ot9NJwgdtSwny3Hz0sW1NmpmwSF9uMUFojPkk0oFEg8=;
        b=S9fynuTeK9vSXvNUDeY4KnRGKPztyWj8Fnz9B9pB5BahJ6cJS+RVcWxVYle9dJnAIB
         DXvmJ5t+++ZA0+T/R07cFZjYEvWfOBk5aAnD8gwRqttsKg4OchtPTc7bNT+bkFxS0q+T
         TS/EMh8f7+QSBU3kGVcPuPs8WY7W8CHJzLzI6CjPe3REMSyY+WNgH2eXqZDMnV2ZtFhz
         G26GNjCWgJtPCYIYclclGs7MF/0fcsoDjy+ziedykVSkxHQCeVHQSN/W73Qf/d3uXzjp
         f3+qF0i9dOE+cA2voQSGgplfosvRU8qjFeC6hKdER1BDhuJIhBrZI5zNDfVR9HgknOBd
         oryw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=ot9NJwgdtSwny3Hz0sW1NmpmwSF9uMUFojPkk0oFEg8=;
        b=NDA+O99HxTSE/jyn+GSVuN+sEwYr2p+PDRbEplKl+43kjhraqfQScJqEV3tz7A41kL
         7GWxAJFzDUfxIjHDd6iDo9mbn7bg0wGfinjORXF8dgulIdfzRL0/EFt1v42rDT2zhwq+
         jGpzO77LsRWLjcVsweQt6KkMHKaWN4hmOVW3OkdDlxdYvm42N1mjQB1AoeQ0ZzT1UTd/
         aRSWNGQ7B2luHrw8XZsg+t5Bv0GTrwtMeS2ABCoOU88aT+wFOCbXqW+cD2Af79WyE0Jv
         HAX63S8W46Q8bXOcAvYTmsCLtEvZEMni6patknzy2kI+hE48oVQLvfWxI81BEkFmTgXk
         nsDQ==
X-Gm-Message-State: AOAM530/JP4vJQ2cLNzk+WMR7158k8o4b/4Iv9pNqfuyGymSkZ4SMC3K
	SjwhmPzZYO0gFeJSYx4WoyE=
X-Google-Smtp-Source: ABdhPJwWvL5ltGyV4xAnV2PomvPFPoswsA8DVwzJ1kj0bPYDH6cusQ3v3SJ1R0nnIFdc7ySbf7Z6SQ==
X-Received: by 2002:a17:90a:19db:: with SMTP id 27mr10213457pjj.216.1627484012282;
        Wed, 28 Jul 2021 07:53:32 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 10/13] x86/Swiotlb: Add Swiotlb bounce buffer remap function for HV IVM
Date: Wed, 28 Jul 2021 10:52:25 -0400
Message-Id: <20210728145232.285861-11-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM with AMD SEV, bounce buffer needs to be accessed via
extra address space which is above shared_gpa_boundary
(E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
The access physical address will be original physical address +
shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
spec is called virtual top of memory(vTOM). Memory addresses below
vTOM are automatically treated as private while memory above
vTOM is treated as shared.

Use dma_map_decrypted() in the swiotlb code, store remap address returned
and use the remap address to copy data from/to swiotlb bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 include/linux/swiotlb.h |  4 ++++
 kernel/dma/swiotlb.c    | 11 ++++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index f507e3eacbea..584560ecaa8e 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -72,6 +72,9 @@ extern enum swiotlb_force swiotlb_force;
  * @end:	The end address of the swiotlb memory pool. Used to do a quick
  *		range check to see if the memory was in fact allocated by this
  *		API.
+ * @vaddr:	The vaddr of the swiotlb memory pool. The swiotlb
+ *		memory pool may be remapped in the memory encrypted case and store
+ *		virtual address for bounce buffer operation.
  * @nslabs:	The number of IO TLB blocks (in groups of 64) between @start and
  *		@end. For default swiotlb, this is command line adjustable via
  *		setup_io_tlb_npages.
@@ -89,6 +92,7 @@ extern enum swiotlb_force swiotlb_force;
 struct io_tlb_mem {
 	phys_addr_t start;
 	phys_addr_t end;
+	void *vaddr;
 	unsigned long nslabs;
 	unsigned long used;
 	unsigned int index;
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index 1fa81c096c1d..6866e5784b53 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -194,8 +194,13 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
 		mem->slots[i].alloc_size = 0;
 	}
 
-	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
-	memset(vaddr, 0, bytes);
+	mem->vaddr = dma_map_decrypted(vaddr, bytes);
+	if (!mem->vaddr) {
+		pr_err("Failed to decrypt memory.\n");
+		return;
+	}
+
+	memset(mem->vaddr, 0, bytes);
 }
 
 int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
@@ -360,7 +365,7 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
 	phys_addr_t orig_addr = mem->slots[index].orig_addr;
 	size_t alloc_size = mem->slots[index].alloc_size;
 	unsigned long pfn = PFN_DOWN(orig_addr);
-	unsigned char *vaddr = phys_to_virt(tlb_addr);
+	unsigned char *vaddr = mem->vaddr + tlb_addr - mem->start;
 	unsigned int tlb_offset;
 
 	if (orig_addr == INVALID_PHYS_ADDR)
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:56:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:56:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161641.296705 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kyi-0000uT-3r; Wed, 28 Jul 2021 14:56:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161641.296705; Wed, 28 Jul 2021 14:56:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kyi-0000uK-0u; Wed, 28 Jul 2021 14:56:12 +0000
Received: by outflank-mailman (input) for mailman id 161641;
 Wed, 28 Jul 2021 14:56:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwf-0002W0-QT
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:54:05 +0000
Received: from mail-pj1-x1030.google.com (unknown [2607:f8b0:4864:20::1030])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9b789a6f-3217-48bf-9c36-bcf2610749da;
 Wed, 28 Jul 2021 14:53:35 +0000 (UTC)
Received: by mail-pj1-x1030.google.com with SMTP id
 ds11-20020a17090b08cbb0290172f971883bso10456227pjb.1
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:35 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.33
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:34 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9b789a6f-3217-48bf-9c36-bcf2610749da
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=qzKwcvVxhca+ciJXqg2U8rozm2nSDx+vDxmGytYMFV8=;
        b=GFuVrx3l5pZLm7DeD09JNxJc3JkwdPBsDYP6JO873zFO4XMaIgVpNG/+WnOETKVtlY
         m//je+3k3RFHUddjBm0pO6wsDR0v8tDSjlTNdabGQhBaYE/QmhtzACKofhAuxSjK5RZQ
         a9RVmPr8+9jibtDYFMsOe0DZ0UvDQ/qIBlFczmN179r7qv1WKZ68P6JibJNeXK2MJfMX
         Sclrix9Bced5k2g6C76vFA2OCMBX1PEDh5DZT3RicuRM6O9ReK9XFn+n9XnpC6vFDCM9
         GWJYFJqK9kpg2ISP1Z5IOjZTYuASDNkUkIq5IL2nXb7/q2S0EKYvEh1kjrR6EX6Z06I7
         /V4w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=qzKwcvVxhca+ciJXqg2U8rozm2nSDx+vDxmGytYMFV8=;
        b=OMSdsdjYGm65LN3tP/vPGU6JwCgbk0/xxKXWdRmYd3QgPrkjmDtY6cfoQrUZLK+Lkq
         KkQZfjliFKy7nGYyuCAgA1HohRuvnixj0HDHh1vr0GA1iKSM1IAFctffCNNn4vifnRsM
         nTHKl9uTbMy1BXl5nhh5sBBN7/cX9qDK6JRjFzIIqu0m5R9yJaO9Rq1UIp0zRNniU5tZ
         RMYDQ40SU+ys6FpHPb00y4dAhLuAnscZxUDFfyaAZrqxPzuFeg1NDuNOxcn/sS5BdPwY
         rrwpN4C3p2aFI+4dGWDqtJr4TDdDi/tdoAXLlAyKR8THUc2GINEShQHcRNcr4rstu6rT
         Z55Q==
X-Gm-Message-State: AOAM530OlZ7xAMYeMcvKgLIoSk06u/461IBk+JQuHBZIdJTz4YabrmwD
	ckfT9xIeca3Coo+fJiqKwag=
X-Google-Smtp-Source: ABdhPJxp/Z+0x7njF0HYKpDRe1xQUzsvfMQucpsS0v4OrFXzODEQULJTIW6YK80P2I/aGYtZMapg7Q==
X-Received: by 2002:a17:902:b40b:b029:12b:997f:5677 with SMTP id x11-20020a170902b40bb029012b997f5677mr143577plr.11.1627484014488;
        Wed, 28 Jul 2021 07:53:34 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 11/13] HV/IOMMU: Enable swiotlb bounce buffer for Isolation VM
Date: Wed, 28 Jul 2021 10:52:26 -0400
Message-Id: <20210728145232.285861-12-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

Hyper-V Isolation VM requires bounce buffer support to copy
data from/to encrypted memory and so enable swiotlb force
mode to use swiotlb bounce buffer for DMA transaction.

In Isolation VM with AMD SEV, the bounce buffer needs to be
accessed via extra address space which is above shared_gpa_boundary
(E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
The access physical address will be original physical address +
shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
spec is called virtual top of memory(vTOM). Memory addresses below
vTOM are automatically treated as private while memory above
vTOM is treated as shared.

Swiotlb bounce buffer code calls dma_map_decrypted()
to mark bounce buffer visible to host and map it in extra
address space. Populate dma memory decrypted ops with hv
map/unmap function.

Hyper-V initalizes swiotlb bounce buffer and default swiotlb
needs to be disabled. pci_swiotlb_detect_override() and
pci_swiotlb_detect_4gb() enable the default one. To override
the setting, hyperv_swiotlb_detect() needs to run before
these detect functions which depends on the pci_xen_swiotlb_
init(). Make pci_xen_swiotlb_init() depends on the hyperv_swiotlb
_detect() to keep the order.

The map function vmap_pfn() can't work in the early place
hyperv_iommu_swiotlb_init() and so initialize swiotlb bounce
buffer in the hyperv_iommu_swiotlb_later_init().

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 arch/x86/hyperv/ivm.c           | 28 ++++++++++++++
 arch/x86/include/asm/mshyperv.h |  2 +
 arch/x86/xen/pci-swiotlb-xen.c  |  3 +-
 drivers/hv/vmbus_drv.c          |  3 ++
 drivers/iommu/hyperv-iommu.c    | 65 +++++++++++++++++++++++++++++++++
 include/linux/hyperv.h          |  1 +
 6 files changed, 101 insertions(+), 1 deletion(-)

diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index 13bab7f07085..9fbb5cbf3321 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -266,3 +266,31 @@ int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
 			enc ? VMBUS_PAGE_NOT_VISIBLE
 			: VMBUS_PAGE_VISIBLE_READ_WRITE);
 }
+
+/*
+ * hv_map_memory - map memory to extra space in the AMD SEV-SNP Isolation VM.
+ */
+void *hv_map_memory(void *addr, unsigned long size)
+{
+	unsigned long *pfns = kcalloc(size / HV_HYP_PAGE_SIZE,
+				      sizeof(unsigned long), GFP_KERNEL);
+	void *vaddr;
+	int i;
+
+	if (!pfns)
+		return (unsigned long)NULL;
+
+	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+		pfns[i] = virt_to_hvpfn(addr + i * HV_HYP_PAGE_SIZE) +
+			(ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+
+	vaddr = vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE,	PAGE_KERNEL_IO);
+	kfree(pfns);
+
+	return vaddr;
+}
+
+void hv_unmap_memory(void *addr)
+{
+	vunmap(addr);
+}
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index 8bf26e6e7055..b815ec0bc36d 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -249,6 +249,8 @@ int hv_map_ioapic_interrupt(int ioapic_id, bool level, int vcpu, int vector,
 int hv_unmap_ioapic_interrupt(int ioapic_id, struct hv_interrupt_entry *entry);
 int hv_mark_gpa_visibility(u16 count, const u64 pfn[], u32 visibility);
 int hv_set_mem_enc(unsigned long addr, int numpages, bool enc);
+void *hv_map_memory(void *addr, unsigned long size);
+void hv_unmap_memory(void *addr);
 void hv_sint_wrmsrl_ghcb(u64 msr, u64 value);
 void hv_sint_rdmsrl_ghcb(u64 msr, u64 *value);
 void hv_signal_eom_ghcb(void);
diff --git a/arch/x86/xen/pci-swiotlb-xen.c b/arch/x86/xen/pci-swiotlb-xen.c
index 54f9aa7e8457..43bd031aa332 100644
--- a/arch/x86/xen/pci-swiotlb-xen.c
+++ b/arch/x86/xen/pci-swiotlb-xen.c
@@ -4,6 +4,7 @@
 
 #include <linux/dma-map-ops.h>
 #include <linux/pci.h>
+#include <linux/hyperv.h>
 #include <xen/swiotlb-xen.h>
 
 #include <asm/xen/hypervisor.h>
@@ -91,6 +92,6 @@ int pci_xen_swiotlb_init_late(void)
 EXPORT_SYMBOL_GPL(pci_xen_swiotlb_init_late);
 
 IOMMU_INIT_FINISH(pci_xen_swiotlb_detect,
-		  NULL,
+		  hyperv_swiotlb_detect,
 		  pci_xen_swiotlb_init,
 		  NULL);
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 57bbbaa4e8f7..f068e22a5636 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -23,6 +23,7 @@
 #include <linux/cpu.h>
 #include <linux/sched/task_stack.h>
 
+#include <linux/dma-map-ops.h>
 #include <linux/delay.h>
 #include <linux/notifier.h>
 #include <linux/panic_notifier.h>
@@ -2081,6 +2082,7 @@ struct hv_device *vmbus_device_create(const guid_t *type,
 	return child_device_obj;
 }
 
+static u64 vmbus_dma_mask = DMA_BIT_MASK(64);
 /*
  * vmbus_device_register - Register the child device
  */
@@ -2121,6 +2123,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
 	}
 	hv_debug_add_dev_dir(child_device_obj);
 
+	child_device_obj->device.dma_mask = &vmbus_dma_mask;
 	return 0;
 
 err_kset_unregister:
diff --git a/drivers/iommu/hyperv-iommu.c b/drivers/iommu/hyperv-iommu.c
index e285a220c913..089617085a69 100644
--- a/drivers/iommu/hyperv-iommu.c
+++ b/drivers/iommu/hyperv-iommu.c
@@ -13,14 +13,22 @@
 #include <linux/irq.h>
 #include <linux/iommu.h>
 #include <linux/module.h>
+#include <linux/hyperv.h>
+#include <linux/io.h>
 
 #include <asm/apic.h>
 #include <asm/cpu.h>
 #include <asm/hw_irq.h>
 #include <asm/io_apic.h>
+#include <asm/iommu.h>
+#include <asm/iommu_table.h>
 #include <asm/irq_remapping.h>
 #include <asm/hypervisor.h>
 #include <asm/mshyperv.h>
+#include <asm/swiotlb.h>
+#include <linux/dma-map-ops.h>
+#include <linux/dma-direct.h>
+#include <linux/set_memory.h>
 
 #include "irq_remapping.h"
 
@@ -36,6 +44,8 @@
 static cpumask_t ioapic_max_cpumask = { CPU_BITS_NONE };
 static struct irq_domain *ioapic_ir_domain;
 
+static unsigned long hyperv_io_tlb_start, hyperv_io_tlb_size;
+
 static int hyperv_ir_set_affinity(struct irq_data *data,
 		const struct cpumask *mask, bool force)
 {
@@ -337,4 +347,59 @@ static const struct irq_domain_ops hyperv_root_ir_domain_ops = {
 	.free = hyperv_root_irq_remapping_free,
 };
 
+void __init hyperv_iommu_swiotlb_init(void)
+{
+	unsigned long bytes;
+
+	/*
+	 * Allocate Hyper-V swiotlb bounce buffer at early place
+	 * to reserve large contiguous memory.
+	 */
+	hyperv_io_tlb_size = 256 * 1024 * 1024;
+	hyperv_io_tlb_start =
+		(unsigned long)memblock_alloc_low(
+				  PAGE_ALIGN(hyperv_io_tlb_size),
+				  HV_HYP_PAGE_SIZE);
+
+	if (!hyperv_io_tlb_start) {
+		pr_warn("Fail to allocate Hyper-V swiotlb buffer.\n");
+		return;
+	}
+}
+
+int __init hyperv_swiotlb_detect(void)
+{
+	if (hypervisor_is_type(X86_HYPER_MS_HYPERV)
+	    && hv_is_isolation_supported()) {
+		/*
+		 * Enable swiotlb force mode in Isolation VM to
+		 * use swiotlb bounce buffer for dma transaction.
+		 */
+		swiotlb_force = SWIOTLB_FORCE;
+
+		dma_memory_generic_decrypted_ops.map = hv_map_memory;
+		dma_memory_generic_decrypted_ops.unmap = hv_unmap_memory;
+		return 1;
+	}
+
+	return 0;
+}
+
+void __init hyperv_iommu_swiotlb_later_init(void)
+{
+	int ret;
+
+	/*
+	 * Swiotlb bounce buffer needs to be mapped in extra address
+	 * space. Map function doesn't work in the early place and so
+	 * call swiotlb_late_init_with_tbl() here.
+	 */
+	swiotlb_late_init_with_tbl(hyperv_io_tlb_start,
+				   hyperv_io_tlb_size >> IO_TLB_SHIFT);
+}
+
+IOMMU_INIT_FINISH(hyperv_swiotlb_detect,
+		  NULL, hyperv_iommu_swiotlb_init,
+		  hyperv_iommu_swiotlb_later_init);
+
 #endif
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 06eccaba10c5..babbe19f57e2 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -1759,6 +1759,7 @@ int hyperv_write_cfg_blk(struct pci_dev *dev, void *buf, unsigned int len,
 int hyperv_reg_block_invalidate(struct pci_dev *dev, void *context,
 				void (*block_invalidate)(void *context,
 							 u64 block_mask));
+int __init hyperv_swiotlb_detect(void);
 
 struct hyperv_pci_block_ops {
 	int (*read_block)(struct pci_dev *dev, void *buf, unsigned int buf_len,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:56:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:56:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161654.296718 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kyw-0001P3-DJ; Wed, 28 Jul 2021 14:56:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161654.296718; Wed, 28 Jul 2021 14:56:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kyw-0001Ow-94; Wed, 28 Jul 2021 14:56:26 +0000
Received: by outflank-mailman (input) for mailman id 161654;
 Wed, 28 Jul 2021 14:56:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwp-0002W0-Qk
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:54:15 +0000
Received: from mail-pj1-x1032.google.com (unknown [2607:f8b0:4864:20::1032])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id caa2cec0-6d1c-4257-8b95-77a53ae283a5;
 Wed, 28 Jul 2021 14:53:37 +0000 (UTC)
Received: by mail-pj1-x1032.google.com with SMTP id
 o44-20020a17090a0a2fb0290176ca3e5a2fso4504949pjo.1
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:37 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:36 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: caa2cec0-6d1c-4257-8b95-77a53ae283a5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=kwyPmDPn6j9wa2BHkeUlG6OG5xFsU4BPPYe25h3X/Ks=;
        b=YJzYki4Pa1YAyR1deIjQQXfJaGx0bnUdSSavjU3nGmSX4p4x2VXnxa90B9LPS5IphL
         tMJFUOFgFwatYdqGlodDe7oZbe67+luRY7Y4oY0eXNoTB2l2ShiwMpHw9p2cURFPkW2/
         Bhxsi22uhDQEg+1qAYrfetl0V7tIvM/ckZMogUK0VByDoPgFf4n374TDtk4+sF3AQjrz
         M3swUrQaSvaSoMMWLYV/VSD48zTrMHBMpKLmxYVRu/A+FhukXU66ZAw6LqKr1hd2NzKo
         FNClXeJskXZAwNIfd6embv/pzZfxyP1MZE2aexGG3CAyra7JIJ1/OVLTdzNvjVX/SNMl
         eqCQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=kwyPmDPn6j9wa2BHkeUlG6OG5xFsU4BPPYe25h3X/Ks=;
        b=TcPYzVEsGDyyrXPqOUKH0BAHeFeOGU/QOKGrVBE/v0kjy1FuPAt2LcbAxfAdd2o+sA
         m0oEIo7PCed2qHxhOc2piRt4SENp+rXjT8J/msjAoZEt0vObxtX+vwOhe4OJWVxhuAqh
         lsdceVBq6hJBirBA2GBKfNafIjqZZJhxuRy0hG8DICYTb0fL2et2D0pXfrCRO+XtcaXM
         ghdn1rhNpNGjNdYUmeyU6q+3Vv8njlJjOfVTR7gkLho5H/lwGzFCLmZLqn2AcEsbAIjY
         fwi0vskUlEXe8m96F9IPerUgNuD9lh99Mm4+3Oc8sJ6ORuowrtvQGuQNQAoKUUFquBMm
         ioyA==
X-Gm-Message-State: AOAM530jOgWEBRdB/umyAM1ugaQGK6DZ7R7fm01UIkMsPr6QYcMpCE/7
	kjCNI7rZcvY3p6QJWB9UWtg=
X-Google-Smtp-Source: ABdhPJzxYrc/QuDCZ3aV+qz7w6yngSUaDDxoVfiRp30YagCAQELtokNGMt+R0oa149icZFp6i/asUw==
X-Received: by 2002:a62:1bc7:0:b029:328:cbf5:b6b0 with SMTP id b190-20020a621bc70000b0290328cbf5b6b0mr55647pfb.81.1627484016811;
        Wed, 28 Jul 2021 07:53:36 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 12/13] HV/Netvsc: Add Isolation VM support for netvsc driver
Date: Wed, 28 Jul 2021 10:52:27 -0400
Message-Id: <20210728145232.285861-13-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM, all shared memory with host needs to mark visible
to host via hvcall. vmbus_establish_gpadl() has already done it for
netvsc rx/tx ring buffer. The page buffer used by vmbus_sendpacket_
pagebuffer() still need to handle. Use DMA API to map/umap these
memory during sending/receiving packet and Hyper-V DMA ops callback
will use swiotlb function to allocate bounce buffer and copy data
from/to bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/net/hyperv/hyperv_net.h   |   6 ++
 drivers/net/hyperv/netvsc.c       | 144 +++++++++++++++++++++++++++++-
 drivers/net/hyperv/rndis_filter.c |   2 +
 include/linux/hyperv.h            |   5 ++
 4 files changed, 154 insertions(+), 3 deletions(-)

diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index bc48855dff10..862419912bfb 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -164,6 +164,7 @@ struct hv_netvsc_packet {
 	u32 total_bytes;
 	u32 send_buf_index;
 	u32 total_data_buflen;
+	struct hv_dma_range *dma_range;
 };
 
 #define NETVSC_HASH_KEYLEN 40
@@ -1074,6 +1075,7 @@ struct netvsc_device {
 
 	/* Receive buffer allocated by us but manages by NetVSP */
 	void *recv_buf;
+	void *recv_original_buf;
 	u32 recv_buf_size; /* allocated bytes */
 	u32 recv_buf_gpadl_handle;
 	u32 recv_section_cnt;
@@ -1082,6 +1084,8 @@ struct netvsc_device {
 
 	/* Send buffer allocated by us */
 	void *send_buf;
+	void *send_original_buf;
+	u32 send_buf_size;
 	u32 send_buf_gpadl_handle;
 	u32 send_section_cnt;
 	u32 send_section_size;
@@ -1730,4 +1734,6 @@ struct rndis_message {
 #define RETRY_US_HI	10000
 #define RETRY_MAX	2000	/* >10 sec */
 
+void netvsc_dma_unmap(struct hv_device *hv_dev,
+		      struct hv_netvsc_packet *packet);
 #endif /* _HYPERV_NET_H */
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 7bd935412853..fc312e5db4d5 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -153,8 +153,21 @@ static void free_netvsc_device(struct rcu_head *head)
 	int i;
 
 	kfree(nvdev->extension);
-	vfree(nvdev->recv_buf);
-	vfree(nvdev->send_buf);
+
+	if (nvdev->recv_original_buf) {
+		vunmap(nvdev->recv_buf);
+		vfree(nvdev->recv_original_buf);
+	} else {
+		vfree(nvdev->recv_buf);
+	}
+
+	if (nvdev->send_original_buf) {
+		vunmap(nvdev->send_buf);
+		vfree(nvdev->send_original_buf);
+	} else {
+		vfree(nvdev->send_buf);
+	}
+
 	kfree(nvdev->send_section_map);
 
 	for (i = 0; i < VRSS_CHANNEL_MAX; i++) {
@@ -330,6 +343,27 @@ int netvsc_alloc_recv_comp_ring(struct netvsc_device *net_device, u32 q_idx)
 	return nvchan->mrc.slots ? 0 : -ENOMEM;
 }
 
+static void *netvsc_remap_buf(void *buf, unsigned long size)
+{
+	unsigned long *pfns;
+	void *vaddr;
+	int i;
+
+	pfns = kcalloc(size / HV_HYP_PAGE_SIZE, sizeof(unsigned long),
+		       GFP_KERNEL);
+	if (!pfns)
+		return NULL;
+
+	for (i = 0; i < size / HV_HYP_PAGE_SIZE; i++)
+		pfns[i] = virt_to_hvpfn(buf + i * HV_HYP_PAGE_SIZE)
+			+ (ms_hyperv.shared_gpa_boundary >> HV_HYP_PAGE_SHIFT);
+
+	vaddr = vmap_pfn(pfns, size / HV_HYP_PAGE_SIZE, PAGE_KERNEL_IO);
+	kfree(pfns);
+
+	return vaddr;
+}
+
 static int netvsc_init_buf(struct hv_device *device,
 			   struct netvsc_device *net_device,
 			   const struct netvsc_device_info *device_info)
@@ -340,6 +374,7 @@ static int netvsc_init_buf(struct hv_device *device,
 	unsigned int buf_size;
 	size_t map_words;
 	int i, ret = 0;
+	void *vaddr;
 
 	/* Get receive buffer area. */
 	buf_size = device_info->recv_sections * device_info->recv_section_size;
@@ -375,6 +410,15 @@ static int netvsc_init_buf(struct hv_device *device,
 		goto cleanup;
 	}
 
+	if (hv_isolation_type_snp()) {
+		vaddr = netvsc_remap_buf(net_device->recv_buf, buf_size);
+		if (!vaddr)
+			goto cleanup;
+
+		net_device->recv_original_buf = net_device->recv_buf;
+		net_device->recv_buf = vaddr;
+	}
+
 	/* Notify the NetVsp of the gpadl handle */
 	init_packet = &net_device->channel_init_pkt;
 	memset(init_packet, 0, sizeof(struct nvsp_message));
@@ -477,6 +521,15 @@ static int netvsc_init_buf(struct hv_device *device,
 		goto cleanup;
 	}
 
+	if (hv_isolation_type_snp()) {
+		vaddr = netvsc_remap_buf(net_device->send_buf, buf_size);
+		if (!vaddr)
+			goto cleanup;
+
+		net_device->send_original_buf = net_device->send_buf;
+		net_device->send_buf = vaddr;
+	}
+
 	/* Notify the NetVsp of the gpadl handle */
 	init_packet = &net_device->channel_init_pkt;
 	memset(init_packet, 0, sizeof(struct nvsp_message));
@@ -767,7 +820,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev,
 
 	/* Notify the layer above us */
 	if (likely(skb)) {
-		const struct hv_netvsc_packet *packet
+		struct hv_netvsc_packet *packet
 			= (struct hv_netvsc_packet *)skb->cb;
 		u32 send_index = packet->send_buf_index;
 		struct netvsc_stats *tx_stats;
@@ -783,6 +836,7 @@ static void netvsc_send_tx_complete(struct net_device *ndev,
 		tx_stats->bytes += packet->total_bytes;
 		u64_stats_update_end(&tx_stats->syncp);
 
+		netvsc_dma_unmap(ndev_ctx->device_ctx, packet);
 		napi_consume_skb(skb, budget);
 	}
 
@@ -947,6 +1001,82 @@ static void netvsc_copy_to_send_buf(struct netvsc_device *net_device,
 		memset(dest, 0, padding);
 }
 
+void netvsc_dma_unmap(struct hv_device *hv_dev,
+		      struct hv_netvsc_packet *packet)
+{
+	u32 page_count = packet->cp_partial ?
+		packet->page_buf_cnt - packet->rmsg_pgcnt :
+		packet->page_buf_cnt;
+	int i;
+
+	if (!hv_is_isolation_supported())
+		return;
+
+	if (!packet->dma_range)
+		return;
+
+	for (i = 0; i < page_count; i++)
+		dma_unmap_single(&hv_dev->device, packet->dma_range[i].dma,
+				 packet->dma_range[i].mapping_size,
+				 DMA_TO_DEVICE);
+
+	kfree(packet->dma_range);
+}
+
+/* netvsc_dma_map - Map swiotlb bounce buffer with data page of
+ * packet sent by vmbus_sendpacket_pagebuffer() in the Isolation
+ * VM.
+ *
+ * In isolation VM, netvsc send buffer has been marked visible to
+ * host and so the data copied to send buffer doesn't need to use
+ * bounce buffer. The data pages handled by vmbus_sendpacket_pagebuffer()
+ * may not be copied to send buffer and so these pages need to be
+ * mapped with swiotlb bounce buffer. netvsc_dma_map() is to do
+ * that. The pfns in the struct hv_page_buffer need to be converted
+ * to bounce buffer's pfn. The loop here is necessary and so not
+ * use dma_map_sg() here.
+ */
+int netvsc_dma_map(struct hv_device *hv_dev,
+		   struct hv_netvsc_packet *packet,
+		   struct hv_page_buffer *pb)
+{
+	u32 page_count =  packet->cp_partial ?
+		packet->page_buf_cnt - packet->rmsg_pgcnt :
+		packet->page_buf_cnt;
+	dma_addr_t dma;
+	int i;
+
+	if (!hv_is_isolation_supported())
+		return 0;
+
+	packet->dma_range = kcalloc(page_count,
+				    sizeof(*packet->dma_range),
+				    GFP_KERNEL);
+	if (!packet->dma_range)
+		return -ENOMEM;
+
+	for (i = 0; i < page_count; i++) {
+		char *src = phys_to_virt((pb[i].pfn << HV_HYP_PAGE_SHIFT)
+					 + pb[i].offset);
+		u32 len = pb[i].len;
+
+		dma = dma_map_single(&hv_dev->device, src, len,
+				     DMA_TO_DEVICE);
+		if (dma_mapping_error(&hv_dev->device, dma)) {
+			kfree(packet->dma_range);
+			return -ENOMEM;
+		}
+
+		packet->dma_range[i].dma = dma;
+		packet->dma_range[i].mapping_size = len;
+		pb[i].pfn = dma >> HV_HYP_PAGE_SHIFT;
+		pb[i].offset = offset_in_hvpage(dma);
+		pb[i].len = len;
+	}
+
+	return 0;
+}
+
 static inline int netvsc_send_pkt(
 	struct hv_device *device,
 	struct hv_netvsc_packet *packet,
@@ -987,14 +1117,22 @@ static inline int netvsc_send_pkt(
 
 	trace_nvsp_send_pkt(ndev, out_channel, rpkt);
 
+	packet->dma_range = NULL;
 	if (packet->page_buf_cnt) {
 		if (packet->cp_partial)
 			pb += packet->rmsg_pgcnt;
 
+		ret = netvsc_dma_map(ndev_ctx->device_ctx, packet, pb);
+		if (ret)
+			return ret;
+
 		ret = vmbus_sendpacket_pagebuffer(out_channel,
 						  pb, packet->page_buf_cnt,
 						  &nvmsg, sizeof(nvmsg),
 						  req_id);
+
+		if (ret)
+			netvsc_dma_unmap(ndev_ctx->device_ctx, packet);
 	} else {
 		ret = vmbus_sendpacket(out_channel,
 				       &nvmsg, sizeof(nvmsg),
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index f6c9c2a670f9..448fcc325ed7 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -361,6 +361,8 @@ static void rndis_filter_receive_response(struct net_device *ndev,
 			}
 		}
 
+		netvsc_dma_unmap(((struct net_device_context *)
+			netdev_priv(ndev))->device_ctx, &request->pkt);
 		complete(&request->wait_event);
 	} else {
 		netdev_err(ndev,
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index babbe19f57e2..90abff664495 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -1616,6 +1616,11 @@ struct hyperv_service_callback {
 	void (*callback)(void *context);
 };
 
+struct hv_dma_range {
+	dma_addr_t dma;
+	u32 mapping_size;
+};
+
 #define MAX_SRV_VER	0x7ffffff
 extern bool vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, u8 *buf, u32 buflen,
 				const int *fw_version, int fw_vercnt,
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:56:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:56:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161667.296730 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kz7-0001xX-Of; Wed, 28 Jul 2021 14:56:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161667.296730; Wed, 28 Jul 2021 14:56:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8kz7-0001xO-Lf; Wed, 28 Jul 2021 14:56:37 +0000
Received: by outflank-mailman (input) for mailman id 161667;
 Wed, 28 Jul 2021 14:56:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=si+Y=MU=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m8kwz-0002W0-R0
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:54:25 +0000
Received: from mail-pj1-x102c.google.com (unknown [2607:f8b0:4864:20::102c])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7b305db8-40a1-413e-a5bd-8329e09dba1c;
 Wed, 28 Jul 2021 14:53:39 +0000 (UTC)
Received: by mail-pj1-x102c.google.com with SMTP id m1so5543257pjv.2
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 07:53:39 -0700 (PDT)
Received: from ubuntu-Virtual-Machine.corp.microsoft.com
 ([2001:4898:80e8:0:3823:141e:6d51:f0ad])
 by smtp.gmail.com with ESMTPSA id n134sm277558pfd.89.2021.07.28.07.53.38
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 28 Jul 2021 07:53:38 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7b305db8-40a1-413e-a5bd-8329e09dba1c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references
         :mime-version:content-transfer-encoding;
        bh=29igml5xJQT7NZ/zHELD608zwBtMw+CBZNUu6aD3TXw=;
        b=SU5+MP1dlZCdXiG26CqRqBNmqpOnXlHHd6+fcRsxbvw2EKuyqOU5Mopp7bVlS/zejO
         csfVLQRSDXU/7dyozcqNTbp4P2dmnl8BvfUDZ1Gqg7dgoQW5/yF5uiTbfYAy+VmENB1e
         ZbRjIv/17kq9qz1Iwt0YvmWCsP015hBjqyx7Z42jWLt2YBzb/erhrTjXS+igHusqWvTV
         bsLn/A16PIaeWfmCBYPCwhZk+c/L4TU0ebGyf7PLH2QjuceGtPagZYnSsDqBPkotX/hN
         i7oMHXglQkgWHkJisLKxQxmwRHNVomuhibIwUMR5k1D0bq2YE4VhqLodvPvuOU9g6oxL
         pZ+Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references:mime-version:content-transfer-encoding;
        bh=29igml5xJQT7NZ/zHELD608zwBtMw+CBZNUu6aD3TXw=;
        b=E8tAW6GAh0vAelU4zSQZXesti9BLMuRC8egT1E2n3UWTchRS0NW7vU6/HcaNL7YQii
         Bi/quhqpy97544qYsVXxQlwZU/PvLJ1+D3BmOsXzzBDp3nhRsBuvwMUh1z4YdWqqQ2mf
         oqxRu+N2ce3PF2XAMHEikIBlZQnGlN1RVJvQ0gCBWxfrOxKMJzUK4+RmnRfIp8LF+hiA
         IqPM7xf+Ompl8SyVHRtalyIlcYyInIi6Esko2HBjs0/085o3DW789595dPm1rBmPp8aP
         jAs/44Ltl9f/naU7ld76ffjZ25fqJwJLiaAirGeEggjo9BDiMlC1NXONPZEv06/XjEks
         6xig==
X-Gm-Message-State: AOAM531Vou7tqa9QT9K+ofNMLLPzCbdt0cvzIym5FGSdalgFGr3hDUMl
	7Fd7nj9yxSIXyh0619GefeY=
X-Google-Smtp-Source: ABdhPJzheaAoRTrkFU3jE3YHYpkFIR7nUHQbhRWDG+7XrGIy9dCpNUWuhIUXvdG5v42plPOPnYbJQA==
X-Received: by 2002:a63:84:: with SMTP id 126mr169114pga.221.1627484019244;
        Wed, 28 Jul 2021 07:53:39 -0700 (PDT)
From: Tianyu Lan <ltykernel@gmail.com>
To: kys@microsoft.com,
	haiyangz@microsoft.com,
	sthemmin@microsoft.com,
	wei.liu@kernel.org,
	decui@microsoft.com,
	tglx@linutronix.de,
	mingo@redhat.com,
	bp@alien8.de,
	x86@kernel.org,
	hpa@zytor.com,
	dave.hansen@linux.intel.com,
	luto@kernel.org,
	peterz@infradead.org,
	konrad.wilk@oracle.com,
	boris.ostrovsky@oracle.com,
	jgross@suse.com,
	sstabellini@kernel.org,
	joro@8bytes.org,
	will@kernel.org,
	davem@davemloft.net,
	kuba@kernel.org,
	jejb@linux.ibm.com,
	martin.petersen@oracle.com,
	arnd@arndb.de,
	hch@lst.de,
	m.szyprowski@samsung.com,
	robin.murphy@arm.com,
	thomas.lendacky@amd.com,
	brijesh.singh@amd.com,
	ardb@kernel.org,
	Tianyu.Lan@microsoft.com,
	rientjes@google.com,
	martin.b.radev@gmail.com,
	akpm@linux-foundation.org,
	rppt@kernel.org,
	kirill.shutemov@linux.intel.com,
	aneesh.kumar@linux.ibm.com,
	krish.sadhukhan@oracle.com,
	saravanand@fb.com,
	xen-devel@lists.xenproject.org,
	pgonda@google.com,
	david@redhat.com,
	keescook@chromium.org,
	hannes@cmpxchg.org,
	sfr@canb.auug.org.au,
	michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org,
	linux-arch@vger.kernel.org,
	linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	vkuznets@redhat.com,
	anparri@microsoft.com
Subject: [PATCH 13/13] HV/Storvsc: Add Isolation VM support for storvsc driver
Date: Wed, 28 Jul 2021 10:52:28 -0400
Message-Id: <20210728145232.285861-14-ltykernel@gmail.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20210728145232.285861-1-ltykernel@gmail.com>
References: <20210728145232.285861-1-ltykernel@gmail.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

From: Tianyu Lan <Tianyu.Lan@microsoft.com>

In Isolation VM, all shared memory with host needs to mark visible
to host via hvcall. vmbus_establish_gpadl() has already done it for
storvsc rx/tx ring buffer. The page buffer used by vmbus_sendpacket_
mpb_desc() still need to handle. Use DMA API to map/umap these
memory during sending/receiving packet and Hyper-V DMA ops callback
will use swiotlb function to allocate bounce buffer and copy data
from/to bounce buffer.

Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
---
 drivers/scsi/storvsc_drv.c | 68 +++++++++++++++++++++++++++++++++++---
 1 file changed, 63 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 328bb961c281..78320719bdd8 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -21,6 +21,8 @@
 #include <linux/device.h>
 #include <linux/hyperv.h>
 #include <linux/blkdev.h>
+#include <linux/io.h>
+#include <linux/dma-mapping.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_host.h>
@@ -427,6 +429,8 @@ struct storvsc_cmd_request {
 	u32 payload_sz;
 
 	struct vstor_packet vstor_packet;
+	u32 hvpg_count;
+	struct hv_dma_range *dma_range;
 };
 
 
@@ -509,6 +513,14 @@ struct storvsc_scan_work {
 	u8 tgt_id;
 };
 
+#define storvsc_dma_map(dev, page, offset, size, dir) \
+	dma_map_page(dev, page, offset, size, dir)
+
+#define storvsc_dma_unmap(dev, dma_range, dir)		\
+		dma_unmap_page(dev, dma_range.dma,	\
+			       dma_range.mapping_size,	\
+			       dir ? DMA_FROM_DEVICE : DMA_TO_DEVICE)
+
 static void storvsc_device_scan(struct work_struct *work)
 {
 	struct storvsc_scan_work *wrk;
@@ -1260,6 +1272,7 @@ static void storvsc_on_channel_callback(void *context)
 	struct hv_device *device;
 	struct storvsc_device *stor_device;
 	struct Scsi_Host *shost;
+	int i;
 
 	if (channel->primary_channel != NULL)
 		device = channel->primary_channel->device_obj;
@@ -1314,6 +1327,15 @@ static void storvsc_on_channel_callback(void *context)
 				request = (struct storvsc_cmd_request *)scsi_cmd_priv(scmnd);
 			}
 
+			if (request->dma_range) {
+				for (i = 0; i < request->hvpg_count; i++)
+					storvsc_dma_unmap(&device->device,
+						request->dma_range[i],
+						request->vstor_packet.vm_srb.data_in == READ_TYPE);
+
+				kfree(request->dma_range);
+			}
+
 			storvsc_on_receive(stor_device, packet, request);
 			continue;
 		}
@@ -1810,7 +1832,9 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 		unsigned int hvpgoff, hvpfns_to_add;
 		unsigned long offset_in_hvpg = offset_in_hvpage(sgl->offset);
 		unsigned int hvpg_count = HVPFN_UP(offset_in_hvpg + length);
+		dma_addr_t dma;
 		u64 hvpfn;
+		u32 size;
 
 		if (hvpg_count > MAX_PAGE_BUFFER_COUNT) {
 
@@ -1824,6 +1848,13 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 		payload->range.len = length;
 		payload->range.offset = offset_in_hvpg;
 
+		cmd_request->dma_range = kcalloc(hvpg_count,
+				 sizeof(*cmd_request->dma_range),
+				 GFP_ATOMIC);
+		if (!cmd_request->dma_range) {
+			ret = -ENOMEM;
+			goto free_payload;
+		}
 
 		for (i = 0; sgl != NULL; sgl = sg_next(sgl)) {
 			/*
@@ -1847,9 +1878,29 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 			 * last sgl should be reached at the same time that
 			 * the PFN array is filled.
 			 */
-			while (hvpfns_to_add--)
-				payload->range.pfn_array[i++] =	hvpfn++;
+			while (hvpfns_to_add--) {
+				size = min(HV_HYP_PAGE_SIZE - offset_in_hvpg,
+					   (unsigned long)length);
+				dma = storvsc_dma_map(&dev->device, pfn_to_page(hvpfn++),
+						      offset_in_hvpg, size,
+						      scmnd->sc_data_direction);
+				if (dma_mapping_error(&dev->device, dma)) {
+					ret = -ENOMEM;
+					goto free_dma_range;
+				}
+
+				if (offset_in_hvpg) {
+					payload->range.offset = dma & ~HV_HYP_PAGE_MASK;
+					offset_in_hvpg = 0;
+				}
+
+				cmd_request->dma_range[i].dma = dma;
+				cmd_request->dma_range[i].mapping_size = size;
+				payload->range.pfn_array[i++] = dma >> HV_HYP_PAGE_SHIFT;
+				length -= size;
+			}
 		}
+		cmd_request->hvpg_count = hvpg_count;
 	}
 
 	cmd_request->payload = payload;
@@ -1860,13 +1911,20 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
 	put_cpu();
 
 	if (ret == -EAGAIN) {
-		if (payload_sz > sizeof(cmd_request->mpb))
-			kfree(payload);
 		/* no more space */
-		return SCSI_MLQUEUE_DEVICE_BUSY;
+		ret = SCSI_MLQUEUE_DEVICE_BUSY;
+		goto free_dma_range;
 	}
 
 	return 0;
+
+free_dma_range:
+	kfree(cmd_request->dma_range);
+
+free_payload:
+	if (payload_sz > sizeof(cmd_request->mpb))
+		kfree(payload);
+	return ret;
 }
 
 static struct scsi_host_template scsi_driver = {
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 14:59:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 14:59:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161683.296741 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8l1x-00031g-8X; Wed, 28 Jul 2021 14:59:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161683.296741; Wed, 28 Jul 2021 14:59:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8l1x-00031Z-5h; Wed, 28 Jul 2021 14:59:33 +0000
Received: by outflank-mailman (input) for mailman id 161683;
 Wed, 28 Jul 2021 14:59:32 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m8l1w-00031T-Mr
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 14:59:32 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8l1v-0003fm-HP; Wed, 28 Jul 2021 14:59:31 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8l1v-00078r-BI; Wed, 28 Jul 2021 14:59:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=fBMYTCyjZs66zMbYpINJFQp1LVtwHkvCy/p7fOwj6kU=; b=WDb848lzlZq29SL/r731hdahNv
	3ae+xskU9w3Vz+RRpDpqgvI7Nwn8zmu83BX3OV4E44UC08RXV1m3YWDNaxG3ZU+bGJ+DwfMHR1Wdn
	wwTMFUPDZt5OUueysuunpiLu6+iKZ1yllmiA4kkYVUVmC3cj3/4+eVACJuPpU2t9BqZc=;
Subject: Re: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with
 vreg_emulate_{sysreg/cp}
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210727095010.11103-1-michal.orzel@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <57e5bc75-052a-1530-e983-4e52d1527861@xen.org>
Date: Wed, 28 Jul 2021 15:59:29 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210727095010.11103-1-michal.orzel@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Michal,

On 27/07/2021 10:50, Michal Orzel wrote:
> According to ARMv8A architecture, AArch64 registers
> are 64bit wide even though in many cases the upper
> 32bit is reserved. Therefore there is no need for
> function vreg_emulate_sysreg32 on arm64.
> 
> Ideally on arm64 there should be only one function
> vreg_emulate_sysreg(using register_t) or
> vreg_emulate_sysreg64(using uint64_t) but in the Xen code
> there is a lot of functions passed both to the
> vreg_emulate_cp* and vreg_emulate_sysreg*.
> This would require to duplicate them which is not
> a good solution.

I think you can drop vreg_emulate_sysreg64() completely. On arm64, 
register_t is an alias to uint64_t so you could interchangeably use the 
type in the callback.

For arm32, we would still need to keep vreg_emulate_cp64.

> 
> The easiest/minimal solution to fix this issue is
> to replace vreg_emulate_{sysreg/cp}32 with
> vreg_emulate_{sysreg/cp}. The modifed functions
> are now taking function pointer:
> -typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>                                register_t *r, bool read);
> instead of:
> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs,
>                                  uint32_t *r, bool read);
> 
> This change allows to properly use 64bit registers on arm64
> and in case of 32bit guest the cast is done by the hardware
> due to the 32bit registers being the lower part of 64bit ones.

The HW doesn't do any cast. From the Arm Arm (D1.19.1 in ARM DDI 0487F.c):

"Any modifications made to AArch32 System registers affects only those 
parts of those AArch64 registers that are
mapped to the AArch32 System registers. Bits[63:32] of AArch64 
registers, where they are not mapped to AArch32
registers, are unchanged by AArch32 state execution."

The registers can be set by:
   * The toolstack (via XEN_DOMCTL_set_vcpucontext). We rely on the top 
bits to always be 0. Ideally, we should 0 it in vcpu_regs_user_to_hyp() 
just for safety.
   * The PSCI CPU ON call: They should always be 0.

For the rest of Xen, we expect that the top 32-bit will either be 
untouched or never be changed.

> 
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
> ---
> The reason for this change is to clean up the mess related to types.
> This patch achieves that but it does not reduce the code size.
> I'm not sure whether we want such change hence it is pushed as RFC.
> ---
>   xen/arch/arm/vcpreg.c      | 16 +++++++++++-----
>   xen/arch/arm/vtimer.c      | 18 +++++++++---------
>   xen/include/asm-arm/vreg.h | 14 +++++++-------
>   3 files changed, 27 insertions(+), 21 deletions(-)
> 
> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
> index e3ce56d875..376a1ceee2 100644
> --- a/xen/arch/arm/vcpreg.c
> +++ b/xen/arch/arm/vcpreg.c
> @@ -57,9 +57,12 @@
>   #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
>   #endif
>   
> +#define type32_t register_t
> +#define type64_t uint64_t

Please use typedef rather than define for type. Also, please add a 
comment explaining why type32_t is defined as register_t.

> +
>   /* The name is passed from the upper macro to workaround macro expansion. */
>   #define TVM_REG(sz, func, reg...)                                           \
> -static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
> +static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool read)    \
>   {                                                                           \
>       struct vcpu *v = current;                                               \
>       bool cache_enabled = vcpu_has_cache_enabled(v);                         \
> @@ -83,7 +86,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>   
>   #else /* CONFIG_ARM_64 */
>   #define TVM_REG32_COMBINED(lowreg, hireg, xreg)                             \
> -static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
> +static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, register_t *r,  \
>                                   bool read, bool hi)                         \
>   {                                                                           \
>       struct vcpu *v = current;                                               \
> @@ -108,13 +111,13 @@ static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
>       return true;                                                            \
>   }                                                                           \
>                                                                               \
> -static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, uint32_t *r,  \
> +static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, register_t *r,\
>                                     bool read)                                \
>   {                                                                           \
>       return vreg_emulate_##xreg(regs, r, read, false);                       \
>   }                                                                           \
>                                                                               \
> -static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t *r,   \
> +static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, register_t *r, \
>                                    bool read)                                 \
>   {                                                                           \
>       return vreg_emulate_##xreg(regs, r, read, true);                        \
> @@ -154,13 +157,16 @@ TVM_REG32_COMBINED(MAIR0, MAIR1, MAIR_EL1)
>   TVM_REG32_COMBINED(AMAIR0, AMAIR1, AMAIR_EL1)
>   TVM_REG32(CONTEXTIDR, CONTEXTIDR_EL1)
>   
> +#define VREG_EMULATE_CP32(regs, hsr, fn)  vreg_emulate_cp(regs, hsr, fn)
> +#define VREG_EMULATE_CP64(regs, hsr, fn)  vreg_emulate_cp64(regs, hsr, fn)
> +
>   /* Macro to generate easily case for co-processor emulation. */
>   #define GENERATE_CASE(reg, sz)                                      \
>       case HSR_CPREG##sz(reg):                                        \
>       {                                                               \
>           bool res;                                                   \
>                                                                       \
> -        res = vreg_emulate_cp##sz(regs, hsr, vreg_emulate_##reg);   \
> +        res = VREG_EMULATE_CP##sz(regs, hsr, vreg_emulate_##reg);   \
>           ASSERT(res);                                                \
>           break;                                                      \
>       }
> diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
> index 167fc6127a..17b5649a05 100644
> --- a/xen/arch/arm/vtimer.c
> +++ b/xen/arch/arm/vtimer.c
> @@ -162,7 +162,7 @@ void virt_timer_restore(struct vcpu *v)
>       WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
>   }
>   
> -static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
> +static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t *r, bool read)
>   {
>       struct vcpu *v = current;
>       s_time_t expires;
> @@ -176,7 +176,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>       }
>       else
>       {
> -        uint32_t ctl = *r & ~CNTx_CTL_PENDING;
> +        register_t ctl = *r & ~CNTx_CTL_PENDING;
You will still end up to mask the top 32-bit because CTx_CTL_PENDING is 
an unsigned 32-bit. I think we should not touch them top 32-bit at all 
so CNTx_CTL_PENDING (and probably CNT_x_CTL_ENABLE) should be defined as 
1UL << X.

>           if ( ctl & CNTx_CTL_ENABLE )
>               ctl |= v->arch.phys_timer.ctl & CNTx_CTL_PENDING;
>           v->arch.phys_timer.ctl = ctl;
> @@ -197,7 +197,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>       return true;
>   }
>   
> -static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
> +static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
>                                bool read)
>   {
>       struct vcpu *v = current;
> @@ -211,11 +211,11 @@ static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
>   
>       if ( read )
>       {
> -        *r = (uint32_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
> +        *r = (register_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);

This is computing the TimerVal is held in the first 32-bit of the 
registers. So I think this should stick to (uint32_t) here.

>       }
>       else
>       {
> -        v->arch.phys_timer.cval = cntpct + (uint64_t)(int32_t)*r;
> +        v->arch.phys_timer.cval = cntpct + (uint64_t)(register_t)*r;

This is not quite the same as before. We were using the first 32-bit as 
a signed value. Now, you are using the full register as a unsigned value.

>           if ( v->arch.phys_timer.ctl & CNTx_CTL_ENABLE )
>           {
>               v->arch.phys_timer.ctl &= ~CNTx_CTL_PENDING;
> @@ -274,10 +274,10 @@ static bool vtimer_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr)
>       switch ( hsr.bits & HSR_CP32_REGS_MASK )
>       {
>       case HSR_CPREG32(CNTP_CTL):
> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_ctl);
> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_ctl);
>   
>       case HSR_CPREG32(CNTP_TVAL):
> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_tval);
> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_tval);
>   
>       default:
>           return false;
> @@ -316,9 +316,9 @@ static bool vtimer_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr)
>       switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
>       {
>       case HSR_SYSREG_CNTP_CTL_EL0:
> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
>       case HSR_SYSREG_CNTP_TVAL_EL0:
> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
>       case HSR_SYSREG_CNTP_CVAL_EL0:
>           return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
>   
> diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
> index 1253753833..cef55aabea 100644
> --- a/xen/include/asm-arm/vreg.h
> +++ b/xen/include/asm-arm/vreg.h
> @@ -4,13 +4,13 @@
>   #ifndef __ASM_ARM_VREG__
>   #define __ASM_ARM_VREG__
>   
> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
> +typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
>                                      bool read);
>   typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t *r,
>                                      bool read);
>   
> -static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
> -                                     vreg_reg32_fn_t fn)
> +static inline bool vreg_emulate_cp(struct cpu_user_regs *regs, union hsr hsr,
> +                                     vreg_reg_fn_t fn)

The new name will add some confusion because now we have 
vreg_emulate_cp() (for 32-bit access) and vreg_emulate_c64() (for 64-bit 
access).

So I would rather keep the current naming.

>   {
>       struct hsr_cp32 cp32 = hsr.cp32;
>       /*
> @@ -18,7 +18,7 @@ static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
>        * implementation error in the emulation (such as not correctly
>        * setting r).
>        */
> -    uint32_t r = 0;
> +    register_t r = 0;
>       bool ret;
>   
>       if ( !cp32.read )
> @@ -64,11 +64,11 @@ static inline bool vreg_emulate_cp64(struct cpu_user_regs *regs, union hsr hsr,
>   }
>   
>   #ifdef CONFIG_ARM_64
> -static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, union hsr hsr,
> -                                         vreg_reg32_fn_t fn)
> +static inline bool vreg_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr,
> +                                         vreg_reg_fn_t fn)
>   {
>       struct hsr_sysreg sysreg = hsr.sysreg;
> -    uint32_t r = 0;
> +    register_t r = 0;
>       bool ret;
>   
>       if ( !sysreg.read )
> 

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 15:34:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 15:34:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161696.296754 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8lZF-000769-1A; Wed, 28 Jul 2021 15:33:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161696.296754; Wed, 28 Jul 2021 15:33:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8lZE-000762-Tg; Wed, 28 Jul 2021 15:33:56 +0000
Received: by outflank-mailman (input) for mailman id 161696;
 Wed, 28 Jul 2021 15:33:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3j7D=MU=intel.com=dave.hansen@srs-us1.protection.inumbo.net>)
 id 1m8lZD-00075w-Uk
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 15:33:55 +0000
Received: from mga14.intel.com (unknown [192.55.52.115])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 597e12a4-d14c-4192-9306-debdf7d421af;
 Wed, 28 Jul 2021 15:33:53 +0000 (UTC)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 28 Jul 2021 08:29:46 -0700
Received: from sobsiex-desk2.amr.corp.intel.com (HELO [10.212.198.197])
 ([10.212.198.197])
 by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 28 Jul 2021 08:29:43 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 597e12a4-d14c-4192-9306-debdf7d421af
X-IronPort-AV: E=McAfee;i="6200,9189,10059"; a="212413520"
X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; 
   d="scan'208";a="212413520"
X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; 
   d="scan'208";a="517575500"
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Tianyu Lan <ltykernel@gmail.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
From: Dave Hansen <dave.hansen@intel.com>
Autocrypt: addr=dave.hansen@intel.com; keydata=
 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
 z5cecg==
Message-ID: <c00e269c-da4c-c703-0182-0221c73a76cc@intel.com>
Date: Wed, 28 Jul 2021 08:29:41 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210728145232.285861-4-ltykernel@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/28/21 7:52 AM, Tianyu Lan wrote:
> @@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
>  	int ret;
>  
>  	/* Nothing to do if memory encryption is not active */
> -	if (!mem_encrypt_active())
> +	if (hv_is_isolation_supported())
> +		return hv_set_mem_enc(addr, numpages, enc);
> +	else if (!mem_encrypt_active())
>  		return 0;

__set_memory_enc_dec() is turning into a real mess.  SEV, TDX and now
Hyper-V are messing around in here.

It doesn't help that these additions are totally uncommented.  Even
worse is that hv_set_mem_enc() was intentionally named "enc" when it
presumably has nothing to do with encryption.

This needs to be refactored.  The current __set_memory_enc_dec() can
become __set_memory_enc_pgtable().  It gets used for the hypervisors
that get informed about "encryption" status via page tables: SEV and TDX.

Then, rename hv_set_mem_enc() to hv_set_visible_hcall().  You'll end up
with:

int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
{
	if (hv_is_isolation_supported())
		return hv_set_visible_hcall(...);

	if (mem_encrypt_active() || ...)
		return __set_memory_enc_pgtable();

	/* Nothing to do */
	return 0;
}

That tells the story pretty effectively, in code.

> +int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
> +{
> +	return hv_set_mem_host_visibility((void *)addr,
> +			numpages * HV_HYP_PAGE_SIZE,
> +			enc ? VMBUS_PAGE_NOT_VISIBLE
> +			: VMBUS_PAGE_VISIBLE_READ_WRITE);
> +}

I know this is off in Hyper-V code, but this just makes my eyes bleed.
I'd much rather see something which is less compact but readable.

> +/* Hyper-V GPA map flags */
> +#define	VMBUS_PAGE_NOT_VISIBLE		0
> +#define	VMBUS_PAGE_VISIBLE_READ_ONLY	1
> +#define	VMBUS_PAGE_VISIBLE_READ_WRITE	3

That looks suspiciously like an enum.


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 15:37:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 15:37:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161704.296766 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8ld7-0007oi-KQ; Wed, 28 Jul 2021 15:37:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161704.296766; Wed, 28 Jul 2021 15:37:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8ld7-0007ob-HE; Wed, 28 Jul 2021 15:37:57 +0000
Received: by outflank-mailman (input) for mailman id 161704;
 Wed, 28 Jul 2021 15:37:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ld5-0007oQ-OX; Wed, 28 Jul 2021 15:37:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ld5-0004Gj-Gw; Wed, 28 Jul 2021 15:37:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ld5-0005Ni-8I; Wed, 28 Jul 2021 15:37:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ld5-0005OB-7a; Wed, 28 Jul 2021 15:37:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=gf6HuAWT0Ax6NbgBMwJyLEbqOuWteY57F73HBOkVcJ0=; b=MukPSWn5tfiGsHmnY4+SsRvXkU
	3+WOxoD69H4HkQXhCj/y2cHSksGxCSbNnqu4QTU8WFBBjzBl0VgohNQAxir7NFoD9z0tp+DiAzJNg
	nnf62Y6QwHxJJO6mae9hTs/JSahpXzucOaanl73/jcZzcUtgbIimSfZN+5vPA1RU+M7Y=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164020-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164020: all pass - PUSHED
X-Osstest-Versions-This:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
X-Osstest-Versions-That:
    ovmf=c410ad4da4b7785170d3d42a3ba190c2caac6feb
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 15:37:55 +0000

flight 164020 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164020/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085
baseline version:
 ovmf                 c410ad4da4b7785170d3d42a3ba190c2caac6feb

Last test of basis   162359  2021-06-04 03:40:08 Z   54 days
Failing since        162368  2021-06-04 15:42:59 Z   53 days  150 attempts
Testing same since   163995  2021-07-26 09:42:23 Z    2 days    7 attempts

------------------------------------------------------------
People who touched revisions under test:
  Abner Chang <abner.chang@hpe.com>
  Agrawal, Sachin <sachin.agrawal@intel.com>
  Alexandru Elisei <alexandru.elisei@arm.com>
  Anthony PERARD <anthony.perard@citrix.com>
  Ard Biesheuvel <ardb@kernel.org>
  Artem Kopotev <artem.kopotev@arm.com>
  Ashraf Ali S <ashraf.ali.s@intel.com>
  Bob Feng <bob.c.feng@intel.com>
  Bret Barkelew <bret.barkelew@microsoft.com>
  Chen, Christine <Yuwei.Chen@intel.com>
  Christopher Zurcher <christopher.zurcher@microsoft.com>
  Corvin Köhne <c.koehne@beckhoff.com>
  Daniel Schaefer <daniel.schaefer@hpe.com>
  Daoxiang Li <daoxiang.li@intel.com>
  Dov Murik <dovmurik@linux.ibm.com>
  DunTan <dun.tan@intel.com>
  gaoliming <gaoliming@byosoft.com.cn>
  gthotala <gopi.thotala@intel.com>
  Guo Dong <guo.dong@intel.com>
  Hao A Wu <hao.a.wu@intel.com>
  Jian J Wang <jian.j.wang@intel.com>
  Jianyong Wu <jianyong.wu@arm.com>
  Jiewen Yao <Jiewen.yao@intel.com>
  Kaaira Gupta <kaaira7319@gmail.com>
  Ken Lautner <klautner@microsoft.com>
  Kenneth Lautner <kenlautner3@gmail.com>
  Kun Qin <kuqin12@gmail.com>
  Laszlo Ersek <lersek@redhat.com>
  Leif Lindholm <leif@nuviainc.com>
  Liming Gao <gaoliming@byosoft.com.cn>
  Liu, Zhiguang <Zhiguang.Liu@intel.com>
  Loo Tung Lun <tung.lun.loo@intel.com>
  Loo, Tung Lun <tung.lun.loo@intel.com>
  Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
  Maurice Ma <maurice.ma@intel.com>
  Michael D Kinney <michael.d.kinney@intel.com>
  Neal Gompa <ngompa@fedoraproject.org>
  Ni, Ray <ray.ni@intel.com>
  Nickle Wang <nickle.wang@hpe.com>
  Patrick Rudolph <patrick.rudolph@9elements.com>
  Pierre Gondois <Pierre.Gondois@arm.com>
  Ray Ni <ray.ni@intel.com>
  Rebecca Cran <rebecca@bsdio.com>
  Rebecca Cran <rebecca@nuviainc.com>
  S, Ashraf Ali <ashraf.ali.s@intel.com>
  Sachin Agrawal <sachin.agrawal@intel.com>
  Sami Mujawar <sami.mujawar@arm.com>
  Scottie Kuo <scottie.kuo@intel.com>
  Sean Brogan <sean.brogan@microsoft.com>
  Sean Brogan <spbrogan@live.com>
  Sheng Wei <w.sheng@intel.com>
  Sumana Venur <sumana.venur@intel.com>
  Sunil V L <sunilvl@ventanamicro.com>
  Tan, Dun <dun.tan@intel.com>
  Thiyagu Kesavan Balakrishnan <thiyagux.kesavan.balakrishnan@intel.com>
  Thotala Gopi <gopi.thotala@intel.com>
  Trammell Hudson <hudson@trmm.net>
  xueshengfeng <xueshengfeng@byosoft.com.cn>
  Yang Gang <yanggang@byosoft.com.cn>
  Yuwei Chen <yuwei.chen@intel.com>
  Zhiguang Liu <zhiguang.liu@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-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
   c410ad4da4..147f34b56c  147f34b56ce0e2e18285ef7d0695753ac0aa5085 -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 15:46:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 15:46:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161712.296781 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8llF-0000qL-Fp; Wed, 28 Jul 2021 15:46:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161712.296781; Wed, 28 Jul 2021 15:46:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8llF-0000qE-Cb; Wed, 28 Jul 2021 15:46:21 +0000
Received: by outflank-mailman (input) for mailman id 161712;
 Wed, 28 Jul 2021 15:46:20 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m8llD-0000q6-Uz
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 15:46:19 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8llC-0004Op-SW; Wed, 28 Jul 2021 15:46:18 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8llC-0002yx-IX; Wed, 28 Jul 2021 15:46:18 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:References:Cc:To:From:Subject;
	bh=fDmED7vjMgB3ACOoP7BxckhnA5zeMREBQ1r4LweSBTM=; b=IsMAiECkItjcO/IrdDJG5Scix7
	2os1us0g2LsiJFCTlWU7q6SGu6tObonJKtW47iyXcyMcsifUiff1qvz6Y8f3dlAySFX4EkXKJGiS1
	WtiWhonZRi/JepWl/YGpkq/CwCWd+xgNIPGzIMqrXOCEYXO6MKAIv6FcoUzET1rZMBMk=;
Subject: Re: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with
 vreg_emulate_{sysreg/cp}
From: Julien Grall <julien@xen.org>
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210727095010.11103-1-michal.orzel@arm.com>
 <57e5bc75-052a-1530-e983-4e52d1527861@xen.org>
Message-ID: <440093c1-ee6e-762b-8d8d-6cbb1e270746@xen.org>
Date: Wed, 28 Jul 2021 16:46:16 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <57e5bc75-052a-1530-e983-4e52d1527861@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 28/07/2021 15:59, Julien Grall wrote:
> Hi Michal,
> 
> On 27/07/2021 10:50, Michal Orzel wrote:
>> According to ARMv8A architecture, AArch64 registers
>> are 64bit wide even though in many cases the upper
>> 32bit is reserved. Therefore there is no need for
>> function vreg_emulate_sysreg32 on arm64.
>>
>> Ideally on arm64 there should be only one function
>> vreg_emulate_sysreg(using register_t) or
>> vreg_emulate_sysreg64(using uint64_t) but in the Xen code
>> there is a lot of functions passed both to the
>> vreg_emulate_cp* and vreg_emulate_sysreg*.
>> This would require to duplicate them which is not
>> a good solution.
> 
> I think you can drop vreg_emulate_sysreg64() completely. On arm64, 
> register_t is an alias to uint64_t so you could interchangeably use the 
> type in the callback.
> 
> For arm32, we would still need to keep vreg_emulate_cp64.
> 
>>
>> The easiest/minimal solution to fix this issue is
>> to replace vreg_emulate_{sysreg/cp}32 with
>> vreg_emulate_{sysreg/cp}. The modifed functions
>> are now taking function pointer:
>> -typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>>                                register_t *r, bool read);
>> instead of:
>> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs,
>>                                  uint32_t *r, bool read);
>>
>> This change allows to properly use 64bit registers on arm64
>> and in case of 32bit guest the cast is done by the hardware
>> due to the 32bit registers being the lower part of 64bit ones.
> 
> The HW doesn't do any cast. From the Arm Arm (D1.19.1 in ARM DDI 0487F.c):
> 
> "Any modifications made to AArch32 System registers affects only those 
> parts of those AArch64 registers that are
> mapped to the AArch32 System registers. Bits[63:32] of AArch64 
> registers, where they are not mapped to AArch32
> registers, are unchanged by AArch32 state execution."

Actually, I quoted the paragraph for the system registers. Sorry :/

I should have quoted the section "Mapping of the general-purpose 
registers between the Execution states". But this is not really a cast, 
it would be a zero extend. Although, it is not 100% whether this is what 
happen because just above the section it is written:

"In AArch32 state, the upper 32 bits of AArch64 registers are 
inaccessible and are ignored.
"

> 
> The registers can be set by:
>    * The toolstack (via XEN_DOMCTL_set_vcpucontext). We rely on the top 
> bits to always be 0. Ideally, we should 0 it in vcpu_regs_user_to_hyp() 
> just for safety.
>    * The PSCI CPU ON call: They should always be 0.
> 
> For the rest of Xen, we expect that the top 32-bit will either be 
> untouched or never be changed.
> 
>>
>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
>> ---
>> The reason for this change is to clean up the mess related to types.
>> This patch achieves that but it does not reduce the code size.
>> I'm not sure whether we want such change hence it is pushed as RFC.
>> ---
>>   xen/arch/arm/vcpreg.c      | 16 +++++++++++-----
>>   xen/arch/arm/vtimer.c      | 18 +++++++++---------
>>   xen/include/asm-arm/vreg.h | 14 +++++++-------
>>   3 files changed, 27 insertions(+), 21 deletions(-)
>>
>> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
>> index e3ce56d875..376a1ceee2 100644
>> --- a/xen/arch/arm/vcpreg.c
>> +++ b/xen/arch/arm/vcpreg.c
>> @@ -57,9 +57,12 @@
>>   #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, 
>> sysreg)
>>   #endif
>> +#define type32_t register_t
>> +#define type64_t uint64_t
> 
> Please use typedef rather than define for type. Also, please add a 
> comment explaining why type32_t is defined as register_t.
> 
>> +
>>   /* The name is passed from the upper macro to workaround macro 
>> expansion. */
>>   #define TVM_REG(sz, func, 
>> reg...)                                           \
>> -static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool 
>> read)    \
>> +static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool 
>> read)    \
>>   
>> {                                                                           
>> \
>>       struct vcpu *v = 
>> current;                                               \
>>       bool cache_enabled = 
>> vcpu_has_cache_enabled(v);                         \
>> @@ -83,7 +86,7 @@ static bool func(struct cpu_user_regs *regs, 
>> uint##sz##_t *r, bool read)    \
>>   #else /* CONFIG_ARM_64 */
>>   #define TVM_REG32_COMBINED(lowreg, hireg, 
>> xreg)                             \
>> -static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t 
>> *r,    \
>> +static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, 
>> register_t *r,  \
>>                                   bool read, bool 
>> hi)                         \
>>   
>> {                                                                           
>> \
>>       struct vcpu *v = 
>> current;                                               \
>> @@ -108,13 +111,13 @@ static bool vreg_emulate_##xreg(struct 
>> cpu_user_regs *regs, uint32_t *r,    \
>>       return 
>> true;                                                            \
>>   
>> }                                                                           
>> \
>>                                                                               
>> \
>> -static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, 
>> uint32_t *r,  \
>> +static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, 
>> register_t *r,\
>>                                     bool 
>> read)                                \
>>   
>> {                                                                           
>> \
>>       return vreg_emulate_##xreg(regs, r, read, 
>> false);                       \
>>   
>> }                                                                           
>> \
>>                                                                               
>> \
>> -static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t 
>> *r,   \
>> +static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, 
>> register_t *r, \
>>                                    bool 
>> read)                                 \
>>   
>> {                                                                           
>> \
>>       return vreg_emulate_##xreg(regs, r, read, 
>> true);                        \
>> @@ -154,13 +157,16 @@ TVM_REG32_COMBINED(MAIR0, MAIR1, MAIR_EL1)
>>   TVM_REG32_COMBINED(AMAIR0, AMAIR1, AMAIR_EL1)
>>   TVM_REG32(CONTEXTIDR, CONTEXTIDR_EL1)
>> +#define VREG_EMULATE_CP32(regs, hsr, fn)  vreg_emulate_cp(regs, hsr, fn)
>> +#define VREG_EMULATE_CP64(regs, hsr, fn)  vreg_emulate_cp64(regs, 
>> hsr, fn)
>> +
>>   /* Macro to generate easily case for co-processor emulation. */
>>   #define GENERATE_CASE(reg, sz)                                      \
>>       case HSR_CPREG##sz(reg):                                        \
>>       {                                                               \
>>           bool res;                                                   \
>>                                                                       \
>> -        res = vreg_emulate_cp##sz(regs, hsr, vreg_emulate_##reg);   \
>> +        res = VREG_EMULATE_CP##sz(regs, hsr, vreg_emulate_##reg);   \
>>           ASSERT(res);                                                \
>>           break;                                                      \
>>       }
>> diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
>> index 167fc6127a..17b5649a05 100644
>> --- a/xen/arch/arm/vtimer.c
>> +++ b/xen/arch/arm/vtimer.c
>> @@ -162,7 +162,7 @@ void virt_timer_restore(struct vcpu *v)
>>       WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
>>   }
>> -static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, 
>> bool read)
>> +static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t 
>> *r, bool read)
>>   {
>>       struct vcpu *v = current;
>>       s_time_t expires;
>> @@ -176,7 +176,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs 
>> *regs, uint32_t *r, bool read)
>>       }
>>       else
>>       {
>> -        uint32_t ctl = *r & ~CNTx_CTL_PENDING;
>> +        register_t ctl = *r & ~CNTx_CTL_PENDING;
> You will still end up to mask the top 32-bit because CTx_CTL_PENDING is 
> an unsigned 32-bit. I think we should not touch them top 32-bit at all 
> so CNTx_CTL_PENDING (and probably CNT_x_CTL_ENABLE) should be defined as 
> 1UL << X.
> 
>>           if ( ctl & CNTx_CTL_ENABLE )
>>               ctl |= v->arch.phys_timer.ctl & CNTx_CTL_PENDING;
>>           v->arch.phys_timer.ctl = ctl;
>> @@ -197,7 +197,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs 
>> *regs, uint32_t *r, bool read)
>>       return true;
>>   }
>> -static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
>> +static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
>>                                bool read)
>>   {
>>       struct vcpu *v = current;
>> @@ -211,11 +211,11 @@ static bool vtimer_cntp_tval(struct 
>> cpu_user_regs *regs, uint32_t *r,
>>       if ( read )
>>       {
>> -        *r = (uint32_t)((v->arch.phys_timer.cval - cntpct) & 
>> 0xffffffffull);
>> +        *r = (register_t)((v->arch.phys_timer.cval - cntpct) & 
>> 0xffffffffull);
> 
> This is computing the TimerVal is held in the first 32-bit of the 
> registers. So I think this should stick to (uint32_t) here.
> 
>>       }
>>       else
>>       {
>> -        v->arch.phys_timer.cval = cntpct + (uint64_t)(int32_t)*r;
>> +        v->arch.phys_timer.cval = cntpct + (uint64_t)(register_t)*r;
> 
> This is not quite the same as before. We were using the first 32-bit as 
> a signed value. Now, you are using the full register as a unsigned value.
> 
>>           if ( v->arch.phys_timer.ctl & CNTx_CTL_ENABLE )
>>           {
>>               v->arch.phys_timer.ctl &= ~CNTx_CTL_PENDING;
>> @@ -274,10 +274,10 @@ static bool vtimer_emulate_cp32(struct 
>> cpu_user_regs *regs, union hsr hsr)
>>       switch ( hsr.bits & HSR_CP32_REGS_MASK )
>>       {
>>       case HSR_CPREG32(CNTP_CTL):
>> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_ctl);
>> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_ctl);
>>       case HSR_CPREG32(CNTP_TVAL):
>> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_tval);
>> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_tval);
>>       default:
>>           return false;
>> @@ -316,9 +316,9 @@ static bool vtimer_emulate_sysreg(struct 
>> cpu_user_regs *regs, union hsr hsr)
>>       switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
>>       {
>>       case HSR_SYSREG_CNTP_CTL_EL0:
>> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
>> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
>>       case HSR_SYSREG_CNTP_TVAL_EL0:
>> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
>> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
>>       case HSR_SYSREG_CNTP_CVAL_EL0:
>>           return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
>> diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
>> index 1253753833..cef55aabea 100644
>> --- a/xen/include/asm-arm/vreg.h
>> +++ b/xen/include/asm-arm/vreg.h
>> @@ -4,13 +4,13 @@
>>   #ifndef __ASM_ARM_VREG__
>>   #define __ASM_ARM_VREG__
>> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
>> +typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
>>                                      bool read);
>>   typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t 
>> *r,
>>                                      bool read);
>> -static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, 
>> union hsr hsr,
>> -                                     vreg_reg32_fn_t fn)
>> +static inline bool vreg_emulate_cp(struct cpu_user_regs *regs, union 
>> hsr hsr,
>> +                                     vreg_reg_fn_t fn)
> 
> The new name will add some confusion because now we have 
> vreg_emulate_cp() (for 32-bit access) and vreg_emulate_c64() (for 64-bit 
> access).
> 
> So I would rather keep the current naming.
> 
>>   {
>>       struct hsr_cp32 cp32 = hsr.cp32;
>>       /*
>> @@ -18,7 +18,7 @@ static inline bool vreg_emulate_cp32(struct 
>> cpu_user_regs *regs, union hsr hsr,
>>        * implementation error in the emulation (such as not correctly
>>        * setting r).
>>        */
>> -    uint32_t r = 0;
>> +    register_t r = 0;
>>       bool ret;
>>       if ( !cp32.read )
>> @@ -64,11 +64,11 @@ static inline bool vreg_emulate_cp64(struct 
>> cpu_user_regs *regs, union hsr hsr,
>>   }
>>   #ifdef CONFIG_ARM_64
>> -static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, 
>> union hsr hsr,
>> -                                         vreg_reg32_fn_t fn)
>> +static inline bool vreg_emulate_sysreg(struct cpu_user_regs *regs, 
>> union hsr hsr,
>> +                                         vreg_reg_fn_t fn)
>>   {
>>       struct hsr_sysreg sysreg = hsr.sysreg;
>> -    uint32_t r = 0;
>> +    register_t r = 0;
>>       bool ret;
>>       if ( !sysreg.read )
>>
> 
> Cheers,
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 16:18:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 16:18:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161719.296793 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8mGc-0004Vy-VW; Wed, 28 Jul 2021 16:18:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161719.296793; Wed, 28 Jul 2021 16:18:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8mGc-0004Vr-S7; Wed, 28 Jul 2021 16:18:46 +0000
Received: by outflank-mailman (input) for mailman id 161719;
 Wed, 28 Jul 2021 16:18:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tdfR=MU=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m8mGa-0004Vl-L6
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 16:18:44 +0000
Received: from mail-lf1-x129.google.com (unknown [2a00:1450:4864:20::129])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5beb3372-ab88-4787-88f7-41a3e87d78bf;
 Wed, 28 Jul 2021 16:18:42 +0000 (UTC)
Received: by mail-lf1-x129.google.com with SMTP id h14so4981335lfv.7
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 09:18:42 -0700 (PDT)
Received: from otyshchenko.router ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id l11sm42162lfe.81.2021.07.28.09.18.39
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 28 Jul 2021 09:18:40 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5beb3372-ab88-4787-88f7-41a3e87d78bf
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id;
        bh=rtGLTu5WvJzmoeG/lwD0OT0TkFZgPNP86HNxh5o9df8=;
        b=rnO6c2ykGqTjVwp0adatoazyLFibHkPlLjIUAv+1awif/EAtqlS5t4h9dx2i/c0HGe
         WUegkUfiWDJf2MBsoZrN6QH/tJqr0hIiXFJEcB5DDPRpUcseKJgBL0sQElczGUPvtoEd
         bwKHEXYkK9Uk0DX4sI6vCCtgEwv45sMY6W0TbmhwIQUpyVowy5f8gBbconAO7OXV2TEt
         cyMBREqcSLvtdd9LxlufuuEPd+8eJ8T7RokXtMYCAgmH42DfUoZeCWWnRqC3NOKRZkGa
         y6Kf7paNA2llnOc223En7BWFV2OmqZyuW4/RXptDUFjR7ljzaEvqsIfcJCkBYbiwq5N7
         L13w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id;
        bh=rtGLTu5WvJzmoeG/lwD0OT0TkFZgPNP86HNxh5o9df8=;
        b=DjqlY3rr+8+C9lJ8buVEILJD1UIrp5W7MuKBYvoLwujaBKhV4APnJS/Dnma8eCDqAb
         UcgftXKrpUBgESIsUdK8yOOvjqNuyOt13tllZsoqW4q0Dt1MENoKJi9TMhcvqxDCE8kS
         82auZjLqYu01mSVxxSaR3TL40hyrtHXajccSt5jfUd/tT6v8UTia657wC5MomdsIa/1Y
         2ZfFl5BGqqqlUTyPRAoZreUa4i/mU+YWwTzg4mF5CaVbOK46N88ii3rZoGWALPhAtEbv
         YYMLhcnNL5WtXdg4RgYrd8BPu1zc1YPyHGsTTp5WjygPzBRtR2n7ptq6AsV3bizg1s/6
         pULA==
X-Gm-Message-State: AOAM532/K9wfmdA59QhIb2gR4qJqPgoNXeuC1YaEwd2I+sc5/T6XHZQG
	DFWgDxQ8v1WN+LUoY4Y5hEMF5s3BJ3/AWA==
X-Google-Smtp-Source: ABdhPJxPD7fsfzyaGAZntl1DcujeDcyCVVt2C/C+VBwoRnt6YfPoCitxO/mksH7RWWWaOkP9Udi+sA==
X-Received: by 2002:a05:6512:3237:: with SMTP id f23mr290323lfe.524.1627489120885;
        Wed, 28 Jul 2021 09:18:40 -0700 (PDT)
From: Oleksandr Tyshchenko <olekstysh@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	"Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Jan Beulich <jbeulich@suse.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Bertrand Marquis <bertrand.marquis@arm.com>,
	Wei Chen <Wei.Chen@arm.com>
Subject: [RFC PATCH] xen/memory: Introduce a hypercall to provide unallocated space
Date: Wed, 28 Jul 2021 19:18:30 +0300
Message-Id: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
X-Mailer: git-send-email 2.7.4

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>

Add XENMEM_get_unallocated_space hypercall which purpose is to
query hypervisor to find regions of guest physical address space
which are unused and can be used to create grant/foreign mappings
instead of wasting real pages from the domain memory for
establishing these mappings. The problem with the current Linux
on Xen on Arm behaviour is if we want to map some guest memory
regions in advance or to perform cache mappings in the backend
we might run out of memory in the host (see XSA-300).
This of course, depends on the both host and guest memory sizes.

The "unallocated space" can't be figured out precisely by
the domain on Arm without hypervisor involvement:
- not all device I/O regions are known by the time domain starts
  creating grant/foreign mappings
- the Dom0 is not aware of memory regions used for the identity
  mappings needed for the PV drivers to work
In both cases we might end up re-using these regions by
a mistake. So, the hypervisor which maintains the P2M for the domain
is in the best position to provide "unallocated space".

The arch code is in charge of finding these regions and filling
in corresponding array in new helper arch_get_unallocated_space().

This patch implements common and Arm parts, the x86 specific bits
are left uniplemented for now.

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
---
Current patch is based on the latest staging branch:
73c932d tools/libxc: use uint32_t for pirq in xc_domain_irq_permission
and also available at:
https://github.com/otyshchenko1/xen/commits/map_opt_ml1

The corresponding Linux changes you can find at:
https://github.com/otyshchenko1/linux/commits/map_opt_ml1
I am going to publish them soon.
---
 tools/flask/policy/modules/dom0.te  |  2 +-
 xen/arch/arm/mm.c                   | 18 ++++++++++++
 xen/common/memory.c                 | 56 +++++++++++++++++++++++++++++++++++++
 xen/include/asm-arm/mm.h            |  4 +++
 xen/include/asm-x86/mm.h            |  8 ++++++
 xen/include/public/memory.h         | 37 +++++++++++++++++++++++-
 xen/include/xsm/dummy.h             |  6 ++++
 xen/include/xsm/xsm.h               |  6 ++++
 xen/xsm/dummy.c                     |  1 +
 xen/xsm/flask/hooks.c               |  6 ++++
 xen/xsm/flask/policy/access_vectors |  2 ++
 11 files changed, 144 insertions(+), 2 deletions(-)

diff --git a/tools/flask/policy/modules/dom0.te b/tools/flask/policy/modules/dom0.te
index 0a63ce1..b40091f 100644
--- a/tools/flask/policy/modules/dom0.te
+++ b/tools/flask/policy/modules/dom0.te
@@ -39,7 +39,7 @@ allow dom0_t dom0_t:domain {
 };
 allow dom0_t dom0_t:domain2 {
 	set_cpu_policy gettsc settsc setscheduler set_vnumainfo
-	get_vnumainfo psr_cmt_op psr_alloc get_cpu_policy
+	get_vnumainfo psr_cmt_op psr_alloc get_cpu_policy get_unallocated_space
 };
 allow dom0_t dom0_t:resource { add remove };
 
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 0e07335..8a70fe0 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -1635,6 +1635,24 @@ unsigned long get_upper_mfn_bound(void)
     return max_page - 1;
 }
 
+#define GPFN_ALIGN_TO_GB(x) (((x) + (1UL << 18) - 1) & (~((1UL << 18) - 1)))
+
+int arch_get_unallocated_space(struct domain *d,
+                               struct xen_unallocated_region *regions,
+                               unsigned int *nr_regions)
+{
+    /*
+     * Everything not mapped into P2M could be treated as unused. Taking into
+     * the account that we have a lot of unallocated space above max_mapped_gfn
+     * and in order to simplify things, just provide a single 8GB memory
+     * region aligned to 1GB boundary for now.
+     */
+    regions->start_gpfn = GPFN_ALIGN_TO_GB(domain_get_maximum_gpfn(d) + 1);
+    regions->nr_gpfns = (1UL << 18) * 8;
+    *nr_regions = 1;
+
+    return 0;
+}
 /*
  * Local variables:
  * mode: C
diff --git a/xen/common/memory.c b/xen/common/memory.c
index e07bd9a..3f9b816 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -1811,6 +1811,62 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
             start_extent);
         break;
 
+    case XENMEM_get_unallocated_space:
+    {
+        struct xen_get_unallocated_space xgus;
+        struct xen_unallocated_region *regions;
+
+        if ( unlikely(start_extent) )
+            return -EINVAL;
+
+        if ( copy_from_guest(&xgus, arg, 1) ||
+             !guest_handle_okay(xgus.buffer, xgus.nr_regions) )
+            return -EFAULT;
+
+        d = rcu_lock_domain_by_any_id(xgus.domid);
+        if ( d == NULL )
+            return -ESRCH;
+
+        rc = xsm_get_unallocated_space(XSM_HOOK, d);
+        if ( rc )
+        {
+            rcu_unlock_domain(d);
+            return rc;
+        }
+
+        if ( !xgus.nr_regions || xgus.nr_regions > XEN_MAX_UNALLOCATED_REGIONS )
+        {
+            rcu_unlock_domain(d);
+            return -EINVAL;
+        }
+
+        regions = xzalloc_array(struct xen_unallocated_region, xgus.nr_regions);
+        if ( !regions )
+        {
+            rcu_unlock_domain(d);
+            return -ENOMEM;
+        }
+
+        rc = arch_get_unallocated_space(d, regions, &xgus.nr_regions);
+        if ( rc )
+            goto unallocated_out;
+
+        if ( __copy_to_guest(xgus.buffer, regions, xgus.nr_regions) )
+        {
+            rc = -EFAULT;
+            goto unallocated_out;
+        }
+
+        if ( __copy_to_guest(arg, &xgus, 1) )
+            rc = -EFAULT;
+
+unallocated_out:
+        rcu_unlock_domain(d);
+        xfree(regions);
+
+        break;
+    }
+
     default:
         rc = arch_memory_op(cmd, arg);
         break;
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index ded74d2..99a2824 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -359,6 +359,10 @@ void clear_and_clean_page(struct page_info *page);
 
 unsigned int arch_get_dma_bitsize(void);
 
+int arch_get_unallocated_space(struct domain *d,
+                               struct xen_unallocated_region *regions,
+                               unsigned int *nr_regions);
+
 #endif /*  __ARCH_ARM_MM__ */
 /*
  * Local variables:
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index cb90527..6244bc4 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -652,4 +652,12 @@ static inline bool arch_mfn_in_directmap(unsigned long mfn)
     return mfn <= (virt_to_mfn(eva - 1) + 1);
 }
 
+static inline
+int arch_get_unallocated_space(struct domain *d,
+                               struct xen_unallocated_region *regions,
+                               unsigned int *nr_regions)
+{
+    return -EOPNOTSUPP;
+}
+
 #endif /* __ASM_X86_MM_H__ */
diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h
index 383a946..040201b 100644
--- a/xen/include/public/memory.h
+++ b/xen/include/public/memory.h
@@ -739,7 +739,42 @@ struct xen_vnuma_topology_info {
 typedef struct xen_vnuma_topology_info xen_vnuma_topology_info_t;
 DEFINE_XEN_GUEST_HANDLE(xen_vnuma_topology_info_t);
 
-/* Next available subop number is 29 */
+/*
+ * Get the unallocated space (regions of guest physical address space which
+ * are unused) and can be used to create grant/foreign mappings.
+ */
+#define XENMEM_get_unallocated_space 29
+struct xen_unallocated_region {
+    xen_pfn_t start_gpfn;
+    xen_ulong_t nr_gpfns;
+};
+typedef struct xen_unallocated_region xen_unallocated_region_t;
+DEFINE_XEN_GUEST_HANDLE(xen_unallocated_region_t);
+
+#define XEN_MAX_UNALLOCATED_REGIONS 32
+
+struct xen_get_unallocated_space {
+    /* IN - Which domain to provide unallocated space for */
+    domid_t domid;
+
+    /*
+     * IN/OUT - As an IN parameter number of memory regions which
+     *          can be written to the buffer (maximum size of the array)
+     *          As OUT parameter number of memory regions which
+     *          have been written to the buffer
+     */
+    unsigned int nr_regions;
+
+    /*
+     * OUT - An array of memory regions, the regions must be placed in
+     *       ascending order, there must be no overlap between them.
+     */
+    XEN_GUEST_HANDLE(xen_unallocated_region_t) buffer;
+};
+typedef struct xen_get_unallocated_space xen_get_unallocated_space_t;
+DEFINE_XEN_GUEST_HANDLE(xen_get_unallocated_space_t);
+
+/* Next available subop number is 30 */
 
 #endif /* __XEN_PUBLIC_MEMORY_H__ */
 
diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
index 363c6d7..2761fbd 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/include/xsm/dummy.h
@@ -772,3 +772,9 @@ static XSM_INLINE int xsm_domain_resource_map(XSM_DEFAULT_ARG struct domain *d)
     XSM_ASSERT_ACTION(XSM_DM_PRIV);
     return xsm_default_action(action, current->domain, d);
 }
+
+static XSM_INLINE int xsm_get_unallocated_space(XSM_DEFAULT_ARG struct domain *d)
+{
+    XSM_ASSERT_ACTION(XSM_HOOK);
+    return xsm_default_action(action, current->domain, d);
+}
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index ad3cddb..b01619c 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -180,6 +180,7 @@ struct xsm_operations {
     int (*dm_op) (struct domain *d);
     int (*xen_version) (uint32_t cmd);
     int (*domain_resource_map) (struct domain *d);
+    int (*get_unallocated_space) (struct domain *d);
 #ifdef CONFIG_ARGO
     int (*argo_enable) (const struct domain *d);
     int (*argo_register_single_source) (const struct domain *d,
@@ -701,6 +702,11 @@ static inline int xsm_domain_resource_map(xsm_default_t def, struct domain *d)
     return xsm_ops->domain_resource_map(d);
 }
 
+static inline int xsm_get_unallocated_space(xsm_default_t def, struct domain *d)
+{
+    return xsm_ops->get_unallocated_space(d);
+}
+
 #ifdef CONFIG_ARGO
 static inline int xsm_argo_enable(const struct domain *d)
 {
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index de44b10..45efadb 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -151,6 +151,7 @@ void __init xsm_fixup_ops (struct xsm_operations *ops)
     set_to_dummy_if_null(ops, dm_op);
     set_to_dummy_if_null(ops, xen_version);
     set_to_dummy_if_null(ops, domain_resource_map);
+    set_to_dummy_if_null(ops, get_unallocated_space);
 #ifdef CONFIG_ARGO
     set_to_dummy_if_null(ops, argo_enable);
     set_to_dummy_if_null(ops, argo_register_single_source);
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index f1a1217..38a9b20 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -1715,6 +1715,11 @@ static int flask_domain_resource_map(struct domain *d)
     return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__RESOURCE_MAP);
 }
 
+static int flask_get_unallocated_space(struct domain *d)
+{
+    return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__GET_UNALLOCATED_SPACE);
+}
+
 #ifdef CONFIG_ARGO
 static int flask_argo_enable(const struct domain *d)
 {
@@ -1875,6 +1880,7 @@ static struct xsm_operations flask_ops = {
     .dm_op = flask_dm_op,
     .xen_version = flask_xen_version,
     .domain_resource_map = flask_domain_resource_map,
+    .get_unallocated_space = flask_get_unallocated_space,
 #ifdef CONFIG_ARGO
     .argo_enable = flask_argo_enable,
     .argo_register_single_source = flask_argo_register_single_source,
diff --git a/xen/xsm/flask/policy/access_vectors b/xen/xsm/flask/policy/access_vectors
index 6359c7f..3cbdc19 100644
--- a/xen/xsm/flask/policy/access_vectors
+++ b/xen/xsm/flask/policy/access_vectors
@@ -245,6 +245,8 @@ class domain2
     resource_map
 # XEN_DOMCTL_get_cpu_policy
     get_cpu_policy
+# XENMEM_get_unallocated_space
+    get_unallocated_space
 }
 
 # Similar to class domain, but primarily contains domctls related to HVM domains
-- 
2.7.4



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 16:26:59 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 16:26:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161727.296805 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8mOV-0005zX-Re; Wed, 28 Jul 2021 16:26:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161727.296805; Wed, 28 Jul 2021 16:26:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8mOV-0005zQ-O7; Wed, 28 Jul 2021 16:26:55 +0000
Received: by outflank-mailman (input) for mailman id 161727;
 Wed, 28 Jul 2021 16:26:54 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8mOU-0005zG-Ee; Wed, 28 Jul 2021 16:26:54 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8mOU-0005VU-7z; Wed, 28 Jul 2021 16:26:54 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8mOT-0007Mj-V7; Wed, 28 Jul 2021 16:26:54 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8mOT-0003rD-Uf; Wed, 28 Jul 2021 16:26:53 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=CUjTdFZS9wmCX6sEl4VtLEIuQS6bgTkOlQyzojCSA50=; b=1CEpLfmCsMTpRTQEwf09VsXwof
	wqEA8R1HGdmS3mlIzbr0YOSF5bFL9hb37H+WYlrDo8lXUYV1dO44gvOE9oCODZk4Wb6Rf2G2utEzQ
	+4TTAM9z6mDQn90iw5/kpaiX91c840q+1Gkp1DXLbpKMNfHhWY56ChtXcdDppHoIxXPw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164019-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164019: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
X-Osstest-Versions-That:
    xen=0cdb4a5802bad51aa89f6b1f10014dd21c37228b
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 16:26:53 +0000

flight 164019 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164019/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 164013
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164013
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164013
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail like 164013
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 164013
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 164013
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164013
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164013
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164013
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 164013
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164013
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164013
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31
baseline version:
 xen                  0cdb4a5802bad51aa89f6b1f10014dd21c37228b

Last test of basis   164013  2021-07-27 19:06:49 Z    0 days
Testing same since   164019  2021-07-28 06:14:22 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Andrew Cooper <andrew.cooper3@citrix.com>
  Jan Beulich <jbeulich@suse.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   0cdb4a5802..58ad654ebc  58ad654ebce7ccb272a3f4f3482c03aaad850d31 -> master


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 16:44:29 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 16:44:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161736.296823 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8mfP-0008ID-EP; Wed, 28 Jul 2021 16:44:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161736.296823; Wed, 28 Jul 2021 16:44:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8mfP-0008I6-AV; Wed, 28 Jul 2021 16:44:23 +0000
Received: by outflank-mailman (input) for mailman id 161736;
 Wed, 28 Jul 2021 16:44:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tdfR=MU=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m8mfO-0008I0-1Q
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 16:44:22 +0000
Received: from mail-lf1-x12a.google.com (unknown [2a00:1450:4864:20::12a])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 15d1b7fb-43fe-440f-a3a3-64c41c8e4ef2;
 Wed, 28 Jul 2021 16:44:20 +0000 (UTC)
Received: by mail-lf1-x12a.google.com with SMTP id a26so5089591lfr.11
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 09:44:20 -0700 (PDT)
Received: from otyshchenko.router ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id r200sm45673lff.208.2021.07.28.09.44.18
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 28 Jul 2021 09:44:18 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 15d1b7fb-43fe-440f-a3a3-64c41c8e4ef2
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:in-reply-to:references;
        bh=KhGe66mH1C8SgD0PmxdZ1hQPjbpO/mlMpncwwJDf0+s=;
        b=PrEhdIol9ZVCwfjLO+T24RAJsIvKBuL/LjmIUe01PSA0pEadP1xwiPPufhtAndieW/
         o9P8WvwEQO+oEua9nl8gncCjKGXisvA0jDHnSRtJ1ZjNPgry4TirFpXp1F5TQjM25HaK
         6cA5KuRqk7LWG4WceE51Uf1yT0tJiqdvcpekg0FdONU7GCzIzqx2GCPwWJuFOv0AHkRD
         NZT/1b+FPpWkV55T0uUTvNaXcUOCC9RPUjNQXkZlPDncB7JLQWhxxc28SEDGL1WVCIy0
         DNsg9rt7mhHe0XbE+2ZVNiEXSG/YwZUpLEaW0WTNmdxYVOUmA5cITX9eFZxtofqZJTUT
         IAmw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
         :references;
        bh=KhGe66mH1C8SgD0PmxdZ1hQPjbpO/mlMpncwwJDf0+s=;
        b=RK9SLykF323Au9W/X515NSB3b9vapBKHaqcFHqTPldVWsYAlmbZ7GN3lQgrWhoiCR8
         z0GgPhqL6p+XRJ3UtyW+wjSty+fYAfLFliEBno27VBgxExNI5LnZSjcMyFNRsCebnNr3
         bI1dHSYUQjMh7DbR+NI5u2qao+p1hxKk8oDwrhvbFXz67WFB2Kp7d68alpcFHjguv50e
         /Y5IR0I9tuOmkkkqTR16Y8aRZ+HaW9K/rja76k7qVROARymBlCNcMHx+1Rh73uN6z7wG
         FrKdLgwYTzV908Hr+RoRe5PTCeS+mucw5p/rASBzAxKi+dbtlcrVsLrC0mml6hAG1vIQ
         EZYg==
X-Gm-Message-State: AOAM533vsvnyBiVkKkuLOYzC3u8fbKQ5r3BTIErWTzLVektOzoVuJurp
	Ag/SHT1SbqtrQDC9bFVh25o=
X-Google-Smtp-Source: ABdhPJzX9eIMuK2QbEFtzfMJ/58kozDZ7Dk8Sfa4eT982nHkyAEpSJ94DDuDQBhHzdzb3VbWAsa2Fg==
X-Received: by 2002:a05:6512:20c1:: with SMTP id u1mr361060lfr.35.1627490658896;
        Wed, 28 Jul 2021 09:44:18 -0700 (PDT)
From: Oleksandr Tyshchenko <olekstysh@gmail.com>
To: linux-arm-kernel@lists.infradead.org,
	xen-devel@lists.xenproject.org,
	linux-kernel@vger.kernel.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Russell King <linux@armlinux.org.uk>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Julien Grall <julien@xen.org>,
	Wei Chen <Wei.Chen@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Subject: [RFC PATCH 2/2] xen/unpopulated-alloc: Query hypervisor to provide unallocated space
Date: Wed, 28 Jul 2021 19:44:16 +0300
Message-Id: <1627490656-1267-2-git-send-email-olekstysh@gmail.com>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1627490656-1267-1-git-send-email-olekstysh@gmail.com>
References: <1627490656-1267-1-git-send-email-olekstysh@gmail.com>

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>

Add a logic to query hypervisor to find regions of guest physical
address space which are unused and can be safely used to create
grant/foreign mappings. Without that the XEN_UNPOPULATED_ALLOC
feature can't be used on Arm.

Introduce new helper arch_xen_unpopulated_init_resource() which
purpose is to create specific Xen resource based on the unused
memory regions provided by the hypervisor to be used as unallocated
address space for Xen scratch pages.
Re-use new XENMEM_get_unallocated_space hypercall on Arm to query
for the unallocated space. In case if arch doesn't offer Xen resource
the default IOMEM resource will be used in fill_list(). Since this
patch only implements Arm part, the behavior on x86 won't be changed.

The "unallocated space" can't be figured out precisely by
the domain on Arm without hypervisor involvement:
- not all device I/O regions are known by the time domain starts
  creating grant/foreign mappings
- the Dom0 is not aware of memory regions used for the identity
  mappings needed for the PV drivers to work
In both cases we might end up re-using these regions by
a mistake. So, the hypervisor which maintains the P2M for the domain
is in the best position to provide "unallocated space".

This patch also removes XEN_UNPOPULATED_ALLOC dependency on x86.

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
---
TODO: Likely we would need to fall back to alloc_xenballooned_pages
if xen_alloc_unpopulated_pages fails on Arm, to be able to run
old hypervisor (without unallocated space support), but the next
question would be how to implement such "fallback" properly?

The corresponding Xen changes you can find at:
https://lore.kernel.org/xen-devel/1627489110-25633-1-git-send-email-olekstysh@gmail.com/
---
 arch/arm/xen/enlighten.c        | 94 +++++++++++++++++++++++++++++++++++++++++
 drivers/xen/Kconfig             |  2 +-
 drivers/xen/unpopulated-alloc.c | 62 +++++++++++++++++++++++++--
 include/xen/interface/memory.h  | 33 +++++++++++++++
 include/xen/xen.h               |  2 +
 5 files changed, 189 insertions(+), 4 deletions(-)

diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 7f1c106b..838696d 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -300,6 +300,100 @@ static void __init xen_acpi_guest_init(void)
 #endif
 }
 
+#ifdef CONFIG_XEN_UNPOPULATED_ALLOC
+int arch_xen_unpopulated_init_resource(struct resource *res)
+{
+	struct xen_get_unallocated_space xgus;
+	struct xen_unallocated_region *regions;
+	xen_pfn_t min_gpfn = -1, max_gpfn = 0;
+	unsigned int i, nr_regions;
+	struct resource *tmp_res;
+	int rc;
+
+	if (!xen_domain())
+		return -ENODEV;
+
+	/* Query hypervisor to find as many unused memory regions as possible */
+	nr_regions = XEN_MAX_UNALLOCATED_REGIONS;
+	regions = kcalloc(nr_regions, sizeof(regions[0]), GFP_KERNEL);
+	if (!regions)
+		return -ENOMEM;
+
+	xgus.domid = DOMID_SELF;
+	xgus.nr_regions = nr_regions;
+	set_xen_guest_handle(xgus.buffer, regions);
+
+	rc = HYPERVISOR_memory_op(XENMEM_get_unallocated_space, &xgus);
+	if (rc) {
+		pr_warn("XENMEM_get_unallocated_space failed, err=%d\n", rc);
+		goto err;
+	}
+
+	if (WARN_ON(xgus.nr_regions == 0)) {
+		rc = -EINVAL;
+		goto err;
+	}
+	nr_regions = xgus.nr_regions;
+
+	/*
+	 * Create resource from memory regions provided by the hypervisor to be
+	 * used as unallocated address space for Xen scratch pages.
+	 */
+	for (i = 0; i < nr_regions; i++) {
+		if (max_gpfn < regions[i].start_gpfn + regions[i].nr_gpfns)
+			max_gpfn = regions[i].start_gpfn + regions[i].nr_gpfns;
+		if (min_gpfn > regions[i].start_gpfn)
+			min_gpfn = regions[i].start_gpfn;
+	}
+	res->start = min_gpfn << PAGE_SHIFT;
+	res->end = (max_gpfn << PAGE_SHIFT) - 1;
+
+	/*
+	 * As memory regions are not necessarily completely sequential calculate
+	 * and reserve the possible holes. The rest of that address space will be
+	 * available for the allocation.
+	 */
+	for (i = 1; i < nr_regions; i++) {
+		resource_size_t start, end;
+
+		start = (regions[i - 1].start_gpfn << PAGE_SHIFT) +
+				regions[i - 1].nr_gpfns * PAGE_SIZE;
+		end = regions[i].start_gpfn << PAGE_SHIFT;
+
+		if (WARN_ON(start > end)) {
+			rc = -EINVAL;
+			goto err;
+		}
+
+		if (start == end)
+			continue;
+
+		tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
+		if (!tmp_res) {
+			rc = -ENOMEM;
+			goto err;
+		}
+
+		tmp_res->name = "Unavailable space";
+		tmp_res->start = start;
+		tmp_res->end = end - 1;
+
+		rc = request_resource(res, tmp_res);
+		if (rc) {
+			pr_err("Cannot insert IOMEM resource [%llx - %llx]\n",
+			       tmp_res->start, tmp_res->end);
+			kfree(tmp_res);
+			goto err;
+		}
+	}
+
+err:
+	kfree(regions);
+
+	return rc;
+}
+#endif
+
 static void __init xen_dt_guest_init(void)
 {
 	struct device_node *xen_node;
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
index 5f1ce59..86aa1ab 100644
--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -296,7 +296,7 @@ config XEN_FRONT_PGDIR_SHBUF
 
 config XEN_UNPOPULATED_ALLOC
 	bool "Use unpopulated memory ranges for guest mappings"
-	depends on X86 && ZONE_DEVICE
+	depends on ZONE_DEVICE
 	default XEN_BACKEND || XEN_GNTDEV || XEN_DOM0
 	help
 	  Use unpopulated memory ranges in order to create mappings for guest
diff --git a/drivers/xen/unpopulated-alloc.c b/drivers/xen/unpopulated-alloc.c
index 87e6b7d..ebf7d23 100644
--- a/drivers/xen/unpopulated-alloc.c
+++ b/drivers/xen/unpopulated-alloc.c
@@ -15,13 +15,39 @@ static DEFINE_MUTEX(list_lock);
 static struct page *page_list;
 static unsigned int list_count;
 
+static struct resource *target_resource;
+static struct resource xen_resource = {
+	.name = "Xen unallocated space",
+};
+
+int __weak arch_xen_unpopulated_init_resource(struct resource *res)
+{
+	return -ENOSYS;
+}
+
 static int fill_list(unsigned int nr_pages)
 {
 	struct dev_pagemap *pgmap;
-	struct resource *res;
+	struct resource *res, *tmp_res = NULL;
 	void *vaddr;
 	unsigned int i, alloc_pages = round_up(nr_pages, PAGES_PER_SECTION);
-	int ret = -ENOMEM;
+	int ret;
+
+	/*
+	 * Try to use Xen resource the first and fall back to default resource
+	 * if arch doesn't offer one.
+	 */
+	if (!target_resource) {
+		ret = arch_xen_unpopulated_init_resource(&xen_resource);
+		if (!ret) {
+			target_resource = &xen_resource;
+		} else if (ret == -ENOSYS) {
+			target_resource = &iomem_resource;
+		} else {
+			pr_err("Cannot initialize Xen resource\n");
+			return ret;
+		}
+	}
 
 	res = kzalloc(sizeof(*res), GFP_KERNEL);
 	if (!res)
@@ -30,7 +56,7 @@ static int fill_list(unsigned int nr_pages)
 	res->name = "Xen scratch";
 	res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
 
-	ret = allocate_resource(&iomem_resource, res,
+	ret = allocate_resource(target_resource, res,
 				alloc_pages * PAGE_SIZE, 0, -1,
 				PAGES_PER_SECTION * PAGE_SIZE, NULL, NULL);
 	if (ret < 0) {
@@ -38,6 +64,31 @@ static int fill_list(unsigned int nr_pages)
 		goto err_resource;
 	}
 
+	/*
+	 * Reserve the region previously allocated from Xen resource to avoid
+	 * re-using it by someone else.
+	 */
+	if (target_resource != &iomem_resource) {
+		tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
+		if (!res) {
+			ret = -ENOMEM;
+			goto err_insert;
+		}
+
+		tmp_res->name = res->name;
+		tmp_res->start = res->start;
+		tmp_res->end = res->end;
+		tmp_res->flags = res->flags;
+
+		ret = insert_resource(&iomem_resource, tmp_res);
+		if (ret < 0) {
+			pr_err("Cannot insert IOMEM resource [%llx - %llx]\n",
+			       tmp_res->start, tmp_res->end);
+			kfree(tmp_res);
+			goto err_insert;
+		}
+	}
+
 	pgmap = kzalloc(sizeof(*pgmap), GFP_KERNEL);
 	if (!pgmap) {
 		ret = -ENOMEM;
@@ -96,6 +147,11 @@ static int fill_list(unsigned int nr_pages)
 err_memremap:
 	kfree(pgmap);
 err_pgmap:
+	if (tmp_res) {
+		release_resource(tmp_res);
+		kfree(tmp_res);
+	}
+err_insert:
 	release_resource(res);
 err_resource:
 	kfree(res);
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
index 4470048..c6a2a63 100644
--- a/include/xen/interface/memory.h
+++ b/include/xen/interface/memory.h
@@ -325,4 +325,37 @@ struct xen_mem_acquire_resource {
 };
 DEFINE_GUEST_HANDLE_STRUCT(xen_mem_acquire_resource);
 
+/*
+ * Get the unallocated space (regions of guest physical address space which
+ * are unused) and can be used to create grant/foreign mappings.
+ */
+#define XENMEM_get_unallocated_space 29
+struct xen_unallocated_region {
+    xen_pfn_t start_gpfn;
+    xen_ulong_t nr_gpfns;
+};
+DEFINE_GUEST_HANDLE_STRUCT(xen_unallocated_region);
+
+#define XEN_MAX_UNALLOCATED_REGIONS 32
+
+struct xen_get_unallocated_space {
+    /* IN - Which domain to provide unallocated space for */
+    domid_t domid;
+
+    /*
+     * IN/OUT - As an IN parameter number of memory regions which
+     *          can be written to the buffer (maximum size of the array)
+     *          As OUT parameter number of memory regions which
+     *          have been written to the buffer
+     */
+    unsigned int nr_regions;
+
+    /*
+     * OUT - An array of memory regions, the regions must be placed in
+     *       ascending order, there must be no overlap between them.
+     */
+    GUEST_HANDLE(xen_unallocated_region) buffer;
+};
+DEFINE_GUEST_HANDLE_STRUCT(xen_get_unallocated_space);
+
 #endif /* __XEN_PUBLIC_MEMORY_H__ */
diff --git a/include/xen/xen.h b/include/xen/xen.h
index 43efba0..f623905 100644
--- a/include/xen/xen.h
+++ b/include/xen/xen.h
@@ -55,6 +55,8 @@ extern u64 xen_saved_max_mem_size;
 #ifdef CONFIG_XEN_UNPOPULATED_ALLOC
 int xen_alloc_unpopulated_pages(unsigned int nr_pages, struct page **pages);
 void xen_free_unpopulated_pages(unsigned int nr_pages, struct page **pages);
+struct resource;
+int arch_xen_unpopulated_init_resource(struct resource *res);
 #else
 #define xen_alloc_unpopulated_pages alloc_xenballooned_pages
 #define xen_free_unpopulated_pages free_xenballooned_pages
-- 
2.7.4



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 17:07:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 17:07:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161744.296835 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8n1D-0002In-BI; Wed, 28 Jul 2021 17:06:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161744.296835; Wed, 28 Jul 2021 17:06:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8n1D-0002Ig-8M; Wed, 28 Jul 2021 17:06:55 +0000
Received: by outflank-mailman (input) for mailman id 161744;
 Wed, 28 Jul 2021 17:06:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=tdfR=MU=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m8n1C-0002Ia-2X
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 17:06:54 +0000
Received: from mail-lj1-x230.google.com (unknown [2a00:1450:4864:20::230])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7969ac77-9e8f-41ae-ac7c-abf6d45ef359;
 Wed, 28 Jul 2021 17:06:53 +0000 (UTC)
Received: by mail-lj1-x230.google.com with SMTP id e5so3910350ljp.6
 for <xen-devel@lists.xenproject.org>; Wed, 28 Jul 2021 10:06:52 -0700 (PDT)
Received: from [192.168.1.7] ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id bp40sm50255lfb.221.2021.07.28.10.06.47
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 28 Jul 2021 10:06:49 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7969ac77-9e8f-41ae-ac7c-abf6d45ef359
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:from:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-transfer-encoding:content-language;
        bh=/w6CnodQNYyr8bk2hPtGusk9dQaQPBkwwGTVBwgfUHw=;
        b=bWqZu7N6rTn5txCFmpkiSdr9gOtPjvuQ1O9WIurTulfPOvXYa/YoQ/VhrLI41AIs8Q
         MntOi2azZvgd2aDBdZo2VSd5/HP64owM/Lb0l0SgVWViagJbv5cgNKJNWfzxeTQVgo4l
         XiXXom7V3ztjjbsySaypeSf1zSL00GD6mxNSy89x9lJz0QB+w3lzyEyMP72HybskwCld
         gNcbEyEacbu/pFZVxQjFptqSibIbaq99iFiiIq3HUYGaqppxHQ03qLoBUmbizbP8fMaD
         kTbZ/iSihRvzvEsd1AhUbL/3d6z3xUEVB2FRDbeQ6GHp2Oedm3w4g/+pcac8HTC7B7xD
         hhZw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:from:to:cc:references:message-id:date
         :user-agent:mime-version:in-reply-to:content-transfer-encoding
         :content-language;
        bh=/w6CnodQNYyr8bk2hPtGusk9dQaQPBkwwGTVBwgfUHw=;
        b=jQkNrk+A0fUkuD9a840+96d27kGm0LIWf11OCE90QO/zvhHCA/6/U/hwGiDyjyXyFs
         bAtoigC10sZHrkLpO3F1RpUnABCq7WW6mqcUrVoS6YYqxbVxi24hWft3GYgHwxbti3TH
         D2v1X40HrtV+2PP9aJkKJM/E3/MAV6KTUjwxwKqI+qHzMGpNQWnavfU0CqDoctNffp+p
         LBvAVfzo4V0Qy6Fw9w12iMqew7VZGk0SB7u8lB1pGoXeDEJHw7DOG5ICsCazgG9wzm4H
         6szrxxpeTEWFgGC85/GUG3Wi4VpouF5tG7DqSWHbpG1yEqqn6xjy88vhEoCECDO2J9w8
         HBzw==
X-Gm-Message-State: AOAM530Hl9rDK26Xu22RDzD45o17MoqbI3MTXFtVV06IQJUURuR0JjmE
	5G8V/o5x9VJ12zKBgiiLZTA=
X-Google-Smtp-Source: ABdhPJxfRDnTIlTVyaTRUgQSB0q/932p84jfL5SKBucII8OQisU7aCyhBJx/J4pfI7ZQF6AETod+Og==
X-Received: by 2002:a2e:b5c8:: with SMTP id g8mr487574ljn.254.1627492009453;
        Wed, 28 Jul 2021 10:06:49 -0700 (PDT)
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
From: Oleksandr <olekstysh@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 Andrew Cooper <andrew.cooper3@citrix.com>,
 George Dunlap <george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>,
 Julien Grall <julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
Message-ID: <df8588c3-9e2c-682b-641c-633d66602429@gmail.com>
Date: Wed, 28 Jul 2021 20:06:21 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Language: en-US


Hello all


On 28.07.21 19:18, Oleksandr Tyshchenko wrote:
> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>
> Add XENMEM_get_unallocated_space hypercall which purpose is to
> query hypervisor to find regions of guest physical address space
> which are unused and can be used to create grant/foreign mappings
> instead of wasting real pages from the domain memory for
> establishing these mappings. The problem with the current Linux
> on Xen on Arm behaviour is if we want to map some guest memory
> regions in advance or to perform cache mappings in the backend
> we might run out of memory in the host (see XSA-300).
> This of course, depends on the both host and guest memory sizes.
>
> The "unallocated space" can't be figured out precisely by
> the domain on Arm without hypervisor involvement:
> - not all device I/O regions are known by the time domain starts
>    creating grant/foreign mappings
> - the Dom0 is not aware of memory regions used for the identity
>    mappings needed for the PV drivers to work
> In both cases we might end up re-using these regions by
> a mistake. So, the hypervisor which maintains the P2M for the domain
> is in the best position to provide "unallocated space".
>
> The arch code is in charge of finding these regions and filling
> in corresponding array in new helper arch_get_unallocated_space().
>
> This patch implements common and Arm parts, the x86 specific bits
> are left uniplemented for now.
>
> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> ---
> Current patch is based on the latest staging branch:
> 73c932d tools/libxc: use uint32_t for pirq in xc_domain_irq_permission
> and also available at:
> https://github.com/otyshchenko1/xen/commits/map_opt_ml1
>
> The corresponding Linux changes you can find at:
> https://github.com/otyshchenko1/linux/commits/map_opt_ml1
> I am going to publish them soon.

The Linux changes are already pushed. You can find them at:

1. Small prereq patch

https://lore.kernel.org/lkml/1627490656-1267-1-git-send-email-olekstysh@gmail.com/

2. Main patch

https://lore.kernel.org/lkml/1627490656-1267-2-git-send-email-olekstysh@gmail.com/

-- 
Regards,

Oleksandr Tyshchenko



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 17:07:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 17:07:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161745.296847 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8n1G-0002ZJ-Jl; Wed, 28 Jul 2021 17:06:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161745.296847; Wed, 28 Jul 2021 17:06:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8n1G-0002ZC-Gp; Wed, 28 Jul 2021 17:06:58 +0000
Received: by outflank-mailman (input) for mailman id 161745;
 Wed, 28 Jul 2021 17:06:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=3j7D=MU=intel.com=dave.hansen@srs-us1.protection.inumbo.net>)
 id 1m8n1F-0002Yt-BX
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 17:06:57 +0000
Received: from mga07.intel.com (unknown [134.134.136.100])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 345945a3-efc6-11eb-97e0-12813bfff9fa;
 Wed, 28 Jul 2021 17:06:53 +0000 (UTC)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 28 Jul 2021 10:06:51 -0700
Received: from sobsiex-desk2.amr.corp.intel.com (HELO [10.212.198.197])
 ([10.212.198.197])
 by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 28 Jul 2021 10:06:46 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 345945a3-efc6-11eb-97e0-12813bfff9fa
X-IronPort-AV: E=McAfee;i="6200,9189,10059"; a="276494144"
X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; 
   d="scan'208";a="276494144"
X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; 
   d="scan'208";a="517613242"
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Tianyu Lan <ltykernel@gmail.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
From: Dave Hansen <dave.hansen@intel.com>
Autocrypt: addr=dave.hansen@intel.com; keydata=
 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
 z5cecg==
Message-ID: <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
Date: Wed, 28 Jul 2021 10:06:45 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <20210728145232.285861-4-ltykernel@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/28/21 7:52 AM, Tianyu Lan wrote:
> @@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
>  	int ret;
>  
>  	/* Nothing to do if memory encryption is not active */
> -	if (!mem_encrypt_active())
> +	if (hv_is_isolation_supported())
> +		return hv_set_mem_enc(addr, numpages, enc);
> +	else if (!mem_encrypt_active())
>  		return 0;

One more thing.  If you're going to be patching generic code, please
start using feature checks that can get optimized away at runtime.
hv_is_isolation_supported() doesn't look like the world's cheapest
check.  It can't be inlined and costs at least a function call.

These checks could, with basically no effort be wrapped in a header like
this:

static inline bool hv_is_isolation_supported(void)
{
	if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
		return 0;

	// out of line function call:
	return __hv_is_isolation_supported();
}	

I don't think it would be the end of the world to add an
X86_FEATURE_HYPERV_GUEST, either.  There are plenty of bits allocated
for Xen and VMWare.


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 17:20:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 17:20:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161758.296860 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8nDy-00054T-Ru; Wed, 28 Jul 2021 17:20:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161758.296860; Wed, 28 Jul 2021 17:20:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8nDy-00054M-MS; Wed, 28 Jul 2021 17:20:06 +0000
Received: by outflank-mailman (input) for mailman id 161758;
 Wed, 28 Jul 2021 17:20:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1ltT=MU=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8nDx-00050O-SP
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 17:20:06 +0000
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6fb3e5aa-d38d-4aa8-915c-590b5f69682f;
 Wed, 28 Jul 2021 17:20:04 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6fb3e5aa-d38d-4aa8-915c-590b5f69682f
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627492804;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=aESIgYl5RkyukkPyd6SQZJEdf3h4ujcqBFpOv/NYrqo=;
  b=bTfDTU7qwldcO6Z8h0w8RhaUcnP2UDSehWZep5FDo4P0NVXFlAicrU8d
   A7u9UgDzx8uQQNoTK9rtp69QlaHKd/dTUii68dy0V44f89KLdmcAsU6o0
   QAOEAooGnPCxsulpQXSDpXDUipj5zqf/4t1GkznM3ESa9oocyGNHqHc+f
   k=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: N33zesdd0XuSe4ETvDVUK2rafuDaZBWIYNShFY6EPGC6yEBK0KRAZkaK88kzcSiUT0Gx+8qbWR
 LRAsubPMK4StrCmn8OJWE5CMtmpJ74lBQE3tS0oQotgmhZ7PeVe96GHubFILGPQTEPqV1wa1OR
 PxKQg2WXlpFQ8i4kf7KB8XtBsHJ1rGa3YEhhfGEEwriZzKeBTyKqhHP7Rh5fSv6NfHrGg/7gZV
 ff4xyx5Kjqql0H0NsumobJHeepbSC0rqgwe0mLOSCW25ofcn2s7hr8QX19WD3aCDqG8RPc9oKJ
 zJ0POtyFMzJNcLm8cqkKkmCj
X-SBRS: 5.1
X-MesageID: 49676814
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:krdOVKi1nL9MB+o7yKuOGOGV1HBQX6F23DAbv31ZSRFFG/FwyP
 rOoB1L73HJYWgqN03IwerwRZVoMkmsiaKdgLNhcotKOTON1VdAQ7sSlLcKrweQeREWs9Qtr5
 uIEJIORuEYb2IK9foSiTPQe71NoKjlzEnrv5ak854Hd3APV0gU1XYeNu/tKDwQeOApP+tdKL
 Osou584xawc3Ueacq2QlMfWfLYmtHNnJX6JTYbGh8O8mC1/HOVwY+/NyLd8gYVUjtJz7tn23
 PCiRbF6qKqtOz+4gPA1lXU849dlLLau5h+7Y23+4oowwfX+0KVjbdaKvq/VfcO0aeSAWMR4Z
 zxStEbTp1OAj3qDzmISFDWqnbdOX4VmgHfIBmj8DreiP28fSk9DcVZg4Jfb1/212oM1esMi5
 5j7iahrJxQAgrHnCPho/7ydz8vuHaVjBMZ4LQuZ1o2a/pDVFaUl/1DwKodKuZwIAvqrI8gC+
 VgF8fa+bJfdk6bdWnQui11zMWrRWlbJGbMfqEugL3d79FtpgEw86LY/r1rol4QsJYmD5VU7e
 XNNapl0LlIU88NdKp4QOMMW9G+BGDBSQ/FdDv6GyWrKIgXf3bW75Ln6rQ84++nPJQO0ZspgZ
 zEFFdVr3Q7dU7iAdCHmJdL7hfOSmOgWimF8LAV27Fp/rnnALb7OyyKT14j18OmvvUEG8XeH+
 2+PZpHasWTW1cG2bw5qDEWfqMiZUX2fPdlyerTamj+1v4jcLeaxtAzWMyjVobQLQ==
X-IronPort-AV: E=Sophos;i="5.84,276,1620705600"; 
   d="scan'208";a="49676814"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VhSjVQGz7gRpLN0YfxvAc9VyuCQCUJbkPZZ51VSgj4DNlMkhp+CmtdXlvJV7MIrNsyRIn8p8+aAeGcHRrMES707kh4oYz8fpzJ4Y+eHkkMtIH5lk9Fcyn5iZ0m/W178J17kmYckM2EhNPfJc9TM3IHQSRpbuWm7nbPlGBBTtjuMXAq25qozNiKLbG38fmkhUEibM7Lq3F3YFRAO/G2vFUWsyMft0OQKhTxyJa+xcmJWv0wtRaBfTf+7bogj3XvrKrPF0fOPMUtYLhtnqO/F4/7mfLu8jSV+XpK/qOzPL4YN+WvSKzTx2GohHEYnRqszPWwpulbV5Qbi1sYfiPqSDkA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WpD/u0stljuACje8jkhoC0jvXnWfpDWm8aFuDyMFUKw=;
 b=LO+Sr1TpLkeA1rSY5aj518KMGfROdT8i4RncxOD4cZ2PnZ6jRFxCiFQM4D/N19dHEsVKMmMIMVlYhTB2RFmP5kCqpw8OUVG9dDky8djfkQ0rL6J0VDUijlJT3Y3OeD0lEepcj9GnGENIwmp0gNiNFH2DIdRGRym5hN7zoJpOWcb4vO/nay7lZtlYjUZIP/s9287qXtNH+cHh8s+eeGgDOSjHARkUREXtXF0Yc0OZ2Dk9rcFl7AFI5R1B0RETNv5UoXj+QVEIfFgZCSHEMmyIu+Mc+SKRE0GljpDJ5GaAoUgJynlR+KekNt9LGbtTAV8VJ/l4xWKE8Rse+7L2TnWd4Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WpD/u0stljuACje8jkhoC0jvXnWfpDWm8aFuDyMFUKw=;
 b=dA7iLUQF3MZRnll/5H/diYEYFGnjMRMnjiVdnwagdB5UvilCgxIJywzCjyIQJwUh1RU3ucCGN8DcGVlptCozV0YgKjakPnXPF9rWaR5QRNOUvTA7uNNFoXf5olOfHnfUQf26QTp5PCfyUxIag9mz+lZ4eHr9E9zGLxbdGJt1Y8g=
To: Oleksandr Tyshchenko <olekstysh@gmail.com>,
	<xen-devel@lists.xenproject.org>
CC: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, Daniel De Graaf
	<dgdegra@tycho.nsa.gov>, "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, George Dunlap
	<george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, "Volodymyr
 Babchuk" <Volodymyr_Babchuk@epam.com>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>, Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen
	<Wei.Chen@arm.com>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
Message-ID: <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com>
Date: Wed, 28 Jul 2021 18:19:51 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO4P123CA0117.GBRP123.PROD.OUTLOOK.COM
 (2603:10a6:600:192::14) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5ad40eae-ab19-4dff-0c5a-08d951ebedab
X-MS-TrafficTypeDiagnostic: BYAPR03MB4168:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB4168E4692A30E64FCC952E31BAEA9@BYAPR03MB4168.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: DfDBqjllj/G8UbOktCBz7Ojl+gh798H89odFQ1nnRljpFppo8hwaL8BT2aZ2bL0u1Yn4X7xNk9uuZpzfHurcEGAj79A2NvHPOo6God7lPpGfbEPYhuoRsu96nwYlewSZvfxL4+qFbIGnuJl4vuZ70WvSeeAWtfMFl9J+gh2+K4kdm+5J7JanXCXkS8OMdaZs5FVVsWq2aXp7LQElzlrJZAGh4vZsONP0uSHG1dtJ4HPfij6h/rAYNXG9JnQvEL+gUcUF2hk7UXpGDjVI0ceWWMRlQVWfbYLhDE0r7GFE36G+TxL/5FAEBKwHsESXcEaRgCjJ4Zwt8+kMuVpS+2UeRDtoyBR6c8qM7L5nsV5EFpD+kRiiTKJfjTY2xIjSmZX/HKrpuR9aJNvNXDEa5m1mTUMEVyzIHt+cRNdNPe3wnubJUlAkS5qJvpt44HxoBOk6XonhgLmeNacCGzZz+ENENg46eMccYN+lpRMkRHIZZuZCgPM6pRKWBhBkxzbJjllZRW+RB/DfO8/FAjXXEoNjReLvNCtQ38CpTrQ79/VRiiKOSkK2WyarrvmwP/8isQuh7UBem1I2maNGIbywlUxbOgX1BwMgH31i/Mz9VlNNTZxuy8/MbphEP2knd7pZJot4POqPBlkErXHzzS+B4NC797aIXwchiJaTd1v6fPK6Z9zQG27Xb5yDpvBv3/s+bbBe+jwwrqNppY1MD2Cg0acpxJLAeGmWfcW+EnGgKF6Trrs=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(136003)(396003)(39860400002)(376002)(38100700002)(66946007)(4326008)(186003)(54906003)(66476007)(66556008)(36756003)(31686004)(31696002)(26005)(316002)(6666004)(478600001)(8936002)(8676002)(7416002)(83380400001)(2906002)(6486002)(53546011)(5660300002)(16576012)(86362001)(956004)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
 =?utf-8?Q?KS9CJ89If/jvtxeO3JmINZ4juOR+COxXHYg77xg?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 5ad40eae-ab19-4dff-0c5a-08d951ebedab
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 17:19:59.8908
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: XlWxAGeMnxAah4F+vceKEKu/9GzdhJpaDK3xq8R8p+mJmAKwVeDVrHR6kJ4i+73Ff+ijppwFHm8yaRO9kLDtOM3FknfrGzOqj8FKXy0U3DI=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4168
X-OriginatorOrg: citrix.com

On 28/07/2021 17:18, Oleksandr Tyshchenko wrote:
> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>
> Add XENMEM_get_unallocated_space hypercall which purpose is to
> query hypervisor to find regions of guest physical address space
> which are unused and can be used to create grant/foreign mappings
> instead of wasting real pages from the domain memory for
> establishing these mappings. The problem with the current Linux
> on Xen on Arm behaviour is if we want to map some guest memory
> regions in advance or to perform cache mappings in the backend
> we might run out of memory in the host (see XSA-300).
> This of course, depends on the both host and guest memory sizes.
>
> The "unallocated space" can't be figured out precisely by
> the domain on Arm without hypervisor involvement:
> - not all device I/O regions are known by the time domain starts
>   creating grant/foreign mappings
> - the Dom0 is not aware of memory regions used for the identity
>   mappings needed for the PV drivers to work
> In both cases we might end up re-using these regions by
> a mistake. So, the hypervisor which maintains the P2M for the domain
> is in the best position to provide "unallocated space".

I'm afraid this does not improve the situation.

If a guest follows the advice from XENMEM_get_unallocated_space, and
subsequently a new IO or identity region appears, everything will
explode, because the "safe area" wasn't actually safe.

The safe range *must* be chosen by the toolstack, because nothing else
can do it safely or correctly.

Once a safe range (or ranges) has been chosen, any subsequent action
which overlaps with the ranges must be rejected, as it will violate the
guarantees provided.

Furthermore, the ranges should be made available to the guest via normal
memory map means.=C2=A0 On x86, this is via the E820 table, and on ARM I
presume the DTB.=C2=A0 There is no need for a new hypercall.

>
> The arch code is in charge of finding these regions and filling
> in corresponding array in new helper arch_get_unallocated_space().
>
> This patch implements common and Arm parts, the x86 specific bits
> are left uniplemented for now.

Leaving x86 for now is fine by me.

> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 0e07335..8a70fe0 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -1635,6 +1635,24 @@ unsigned long get_upper_mfn_bound(void)
>      return max_page - 1;
>  }
> =20
> +#define GPFN_ALIGN_TO_GB(x) (((x) + (1UL << 18) - 1) & (~((1UL << 18) - =
1)))
> +
> +int arch_get_unallocated_space(struct domain *d,
> +                               struct xen_unallocated_region *regions,
> +                               unsigned int *nr_regions)
> +{
> +    /*
> +     * Everything not mapped into P2M could be treated as unused. Taking=
 into
> +     * the account that we have a lot of unallocated space above max_map=
ped_gfn
> +     * and in order to simplify things, just provide a single 8GB memory
> +     * region aligned to 1GB boundary for now.
> +     */
> +    regions->start_gpfn =3D GPFN_ALIGN_TO_GB(domain_get_maximum_gpfn(d) =
+ 1);

To drive home my earlier point, this is racy and cannot be fixed in Xen.

You don't (and cannot) hold the p2m lock until the guest has acted upon
the information provided, so it is guaranteed stale by the time the
guest can inspect the results.=C2=A0 In the concurrent meantime, a wide ran=
ge
of operations can change max_gpfn.

The only way to get a value the guest can use is to choose it before
hand, and have Xen enforce that the nominated range(s) remain safe.

~Andrew



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 17:27:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 17:27:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161765.296872 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8nLP-0005rV-JB; Wed, 28 Jul 2021 17:27:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161765.296872; Wed, 28 Jul 2021 17:27:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8nLP-0005rO-Fu; Wed, 28 Jul 2021 17:27:47 +0000
Received: by outflank-mailman (input) for mailman id 161765;
 Wed, 28 Jul 2021 17:27:46 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m8nLN-0005rI-Vc
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 17:27:45 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8nLF-0006O5-Ha; Wed, 28 Jul 2021 17:27:37 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8nLF-0007i3-8I; Wed, 28 Jul 2021 17:27:37 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=sDbvP2mLM3ulZ1sM90PgwW4tFd0zKztZrvHZYlqKx0Q=; b=4jhFBFcAThr36mL8ipNFc19hsD
	kWB/eXL99jUgK7qFvH5xBUn+XuSvsqntuKD4h3p4pofHceCYd34R6g/8kHB6IwYXX6iLfFgly7djk
	oRGyQw7Zn3n1Clh+7ADBXTFzYQjJZCALEhkBSWhfwlECds7w8pr+axbKCLsC98SnmRYQ=;
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 Oleksandr Tyshchenko <olekstysh@gmail.com>, xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 George Dunlap <george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
 <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <e8db3021-78a5-e040-a70b-62ca5b500149@xen.org>
Date: Wed, 28 Jul 2021 18:27:34 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Andrew,

On 28/07/2021 18:19, Andrew Cooper wrote:
> On 28/07/2021 17:18, Oleksandr Tyshchenko wrote:
>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>>
>> Add XENMEM_get_unallocated_space hypercall which purpose is to
>> query hypervisor to find regions of guest physical address space
>> which are unused and can be used to create grant/foreign mappings
>> instead of wasting real pages from the domain memory for
>> establishing these mappings. The problem with the current Linux
>> on Xen on Arm behaviour is if we want to map some guest memory
>> regions in advance or to perform cache mappings in the backend
>> we might run out of memory in the host (see XSA-300).
>> This of course, depends on the both host and guest memory sizes.
>>
>> The "unallocated space" can't be figured out precisely by
>> the domain on Arm without hypervisor involvement:
>> - not all device I/O regions are known by the time domain starts
>>    creating grant/foreign mappings
>> - the Dom0 is not aware of memory regions used for the identity
>>    mappings needed for the PV drivers to work
>> In both cases we might end up re-using these regions by
>> a mistake. So, the hypervisor which maintains the P2M for the domain
>> is in the best position to provide "unallocated space".
> 
> I'm afraid this does not improve the situation.
> 
> If a guest follows the advice from XENMEM_get_unallocated_space, and
> subsequently a new IO or identity region appears, everything will
> explode, because the "safe area" wasn't actually safe.
> 
> The safe range *must* be chosen by the toolstack, because nothing else
> can do it safely or correctly.

The problem is how do you size it? In particular, a backend may map 
multiple time the same page (for instance if the page is granted twice).

> 
> Once a safe range (or ranges) has been chosen, any subsequent action
> which overlaps with the ranges must be rejected, as it will violate the
> guarantees provided.
> 
> Furthermore, the ranges should be made available to the guest via normal
> memory map means.  On x86, this is via the E820 table, and on ARM I
> presume the DTB.  There is no need for a new hypercall.

Device-Tree only works if you have a guest using it. How about ACPI?

To me the hypercall solution at least:
   1) Avoid to have to define the region on every single firmware table
   2) Allow to easily extend after the guest run

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 18:53:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 18:53:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161773.296883 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8ofl-0005yI-OL; Wed, 28 Jul 2021 18:52:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161773.296883; Wed, 28 Jul 2021 18:52:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8ofl-0005yB-LT; Wed, 28 Jul 2021 18:52:53 +0000
Received: by outflank-mailman (input) for mailman id 161773;
 Wed, 28 Jul 2021 18:52:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ofk-0005y1-6H; Wed, 28 Jul 2021 18:52:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ofj-0007eg-Uu; Wed, 28 Jul 2021 18:52:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ofj-0004zw-Ja; Wed, 28 Jul 2021 18:52:51 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8ofj-00049Q-J9; Wed, 28 Jul 2021 18:52:51 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=rnR+iAbel4LzPlS+WLp9rdgL+gaYlcqZXeUK8wX/Iz0=; b=PXJGwkKiVR0uZ9OViNNmT6Q5vC
	sKuIMvead8xycLcCl0iK3Jc8dweydexIi2M4ZMjFOtLf72/zIel3otfCfocjUpHMCKCjb9hL0gYXp
	xTjEb3U8PXSVjpocdIoXXOiceRplaylS629CAs5ehVqcYY/GslHcNngDpkQ57kQ5egtA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164022-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164022: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7d549995d4e0d99b68e8a7793a0d23da6fc40fe8
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Wed, 28 Jul 2021 18:52:51 +0000

flight 164022 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164022/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail in 164016 pass in 164022
 test-amd64-amd64-examine      4 memdisk-try-append         fail pass in 164016

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

version targeted for testing:
 linux                7d549995d4e0d99b68e8a7793a0d23da6fc40fe8
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  361 days
Failing since        152366  2020-08-01 20:49:34 Z  360 days  622 attempts
Testing same since   164016  2021-07-27 22:41:16 Z    0 days    2 attempts

------------------------------------------------------------
6731 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1987696 lines long.)


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 19:01:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 19:01:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161781.296898 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8onq-0007QH-ME; Wed, 28 Jul 2021 19:01:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161781.296898; Wed, 28 Jul 2021 19:01:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8onq-0007QA-JA; Wed, 28 Jul 2021 19:01:14 +0000
Received: by outflank-mailman (input) for mailman id 161781;
 Wed, 28 Jul 2021 19:01:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=1ltT=MU=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m8ono-0007Q4-L1
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 19:01:12 +0000
Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2aa60052-efd6-11eb-97e4-12813bfff9fa;
 Wed, 28 Jul 2021 19:01:10 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2aa60052-efd6-11eb-97e4-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627498870;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=/aDyO0z9TsrqBwOMoovjkHxyClB+bWGt4GlD8AKwWPU=;
  b=dM3blbLaGoqlk/whDUaDXH9sLaXVHlp5XhtAntoMF/KjUnKs9sH1vPfQ
   D2MJbIBbiSk5+9o00woV/osz9+WpCi0IcH2u4NpJamqQvE7iKAw3B9GeH
   rK8hs9egk1UuPwTF9pouqsDVKvbLQpFbqVi5br2Va4AGkfJoaB27JEu0X
   w=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: S7EeMT2aLjyxTlhq56JHsjVZPnoLQfcpVp4gF/M0QVk6ivhol2l3mBCmOmeWCumhYL585g//Ap
 EK8i+9mnTsudLDEAqQjhmxTaXZ8l9vGTMK93/nSODvN4Ic6XjbS5PDXysg/lUlcmQaWiQUyWh2
 G+EmAsFplSn1WX3tJ1X+nquMLKdzXltfXTHUJQsBVlGq2PezHn8KIZWmDNPfv6XCPyxDxY3r4L
 Jwa/1Vr6o9GW+v3LvcT0sYNqCVw/UHJQPEtUvOStPxNkmisLAlGXKdWSViwy7JfrIIDfHsPCeq
 q9yT/hbcq3L/NSWZyRmUvQ3H
X-SBRS: 5.1
X-MesageID: 49297560
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:41c5+6w67MCqLZTT7+I8KrPxrOskLtp133Aq2lEZdPULSKKlfp
 GV88jziyWZtN9wYhEdcdDpAtjlfZquz+8K3WB3B8bcYOCGghrVEGgG1+rfKlLbalbDH4JmpM
 Fdmu1FeaDN5DtB/LXHCWuDYq4dKbC8mcjC74qurAYOPHRXguNbnmBE426gYz1LrWJ9dOME/f
 Snl696TnabCA4qhpPRPAh1YwGPnayEqLvWJTo9QzI34giHij2lrJb8Dhijxx8bFxdC260r/2
 TpmxHwovzLiYD69jbsk0voq7hGktrozdVOQOSKl8guMz3pziKlfp5oVbGutC085Muv9FEput
 /RpApIBbUz11rhOkWO5Tf90Qjp1zgjr1fk1F+jmHPm5ff0QTorYvAxyL5xQ1/80Q4Nrdt82K
 VE0yayrJxMFy7Nmyz7+pzhSwxqvlDcmwtmrccjy1hkFacOYr5YqoISuGlPFo0bIS784Ic7VM
 FzEcDn4upMe1/yVQGagoBW+q3qYp0PJGbBfqBb0fbligS+3UoJjHfw/fZv2kvpr/kGOsF5D4
 2uCNUbqFlMJvVmJ56VSt1xGvdepwT2MFvx2VmpUCPa/Zc8SjnwQq7MkcEIDd6RCeo1JbsJ6d
 j8uQBjxCEPk3yHM7zH4HQMyGGWfFmA
X-IronPort-AV: E=Sophos;i="5.84,276,1620705600"; 
   d="scan'208";a="49297560"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NFC0U7zWXQ76bjpPvzMQZcGvIN/Z71u4GIggUnYt5B3uxArRL47gC78fWyI8vphXHsllWBpXqPtYGoLUhg7duaV6gnWnJBFYV+XnNYnqVLHm5ZVSURniCoPVvlL031cfjbZwMw1Zk5llPA+A3J0E5hAj6//c09wbTlrvUqP8e5w0X3AZXUC+rJUNe/3x0R+cRFtgOIxKkaZojKjI5qwJs0qoYDvWCid/ncb5Uj1+YvyKKbGM+Rze2+8xzfp8ZzEwW7e8hPGm/HtALxw8mx9YVBpnuAFiRQi/vGv39dimAmjQecdxDa8hQlBtCFg96zW5b92dHr5Y3cNF1nJCIDS07Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/aDyO0z9TsrqBwOMoovjkHxyClB+bWGt4GlD8AKwWPU=;
 b=gkKFWo6itcEWG2e99X+m+ubMTFw2l1IhGKazW65f5xqcDIDgIEmSWsikrErlMI1XB2+XpL3FryjlemkkvaJliew5LG/25CwUpjYovcim1T+wd9uHuPUxbqkYFsAMuoNQSMNn06s+5O+iZoLi5O93gw/ScYwt3ofYbGJ+7qsscUcVFpg/kHyTuk5nhkfqDV9pmKgxiYexGDWKV8oEMcTiqvwnvLFQz1TtOaUwVZWOhaE+FthsxJEnBmfn2oslVODeKPaJtarZT5dX3j/c0kR0vq1DCz0M+wm4/wokg6XWkfmre4qjL6uZ4DqU1H8XjW8C8BKfnmqvkLHvjQrqOTIiuw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=/aDyO0z9TsrqBwOMoovjkHxyClB+bWGt4GlD8AKwWPU=;
 b=Ksiq6StrtOfOR3gBAplpivtz8IxVoqvD6CPKu3RvJdbaVdahQTN4LPLHaoh+ZrXCblkwRzDSP0gte+1tfhAL42FN8K6ocP0VPgaYkeLYPqUukImus6y0aEW8phs5pELJelUegK8EpWOR1WPv9QKpsNldBCxuZeBXclkecsnXOR4=
To: Julien Grall <julien@xen.org>, Oleksandr Tyshchenko <olekstysh@gmail.com>,
	<xen-devel@lists.xenproject.org>
CC: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, Daniel De Graaf
	<dgdegra@tycho.nsa.gov>, "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, George Dunlap
	<george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>, "Stefano
 Stabellini" <sstabellini@kernel.org>, Volodymyr Babchuk
	<Volodymyr_Babchuk@epam.com>, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?=
	<roger.pau@citrix.com>, Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen
	<Wei.Chen@arm.com>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
 <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com>
 <e8db3021-78a5-e040-a70b-62ca5b500149@xen.org>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
Message-ID: <4de5ed21-379e-b618-44c8-924d88b1a519@citrix.com>
Date: Wed, 28 Jul 2021 20:00:51 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <e8db3021-78a5-e040-a70b-62ca5b500149@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LNXP265CA0077.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:76::17) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d266ff71-0e9b-4328-f74c-08d951fa0965
X-MS-TrafficTypeDiagnostic: BYAPR03MB4552:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <BYAPR03MB4552F25BA34B6305D3122112BAEA9@BYAPR03MB4552.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: c9h7ETdMekOKeBYU4EypW1fPwDmojpST9CyDF+u38qLV/4VFzcAEN3aqXFrKw1CyJZs1H9YS9AjOeKdoxs//DDKXu7ZycKw/CSgOMscRlxxY1GP9ZZM9Z5CbiA5FctxJp2Edq8QJYpe989nHmxKisahHEdZkhsTJ4mySvVukJdBi96D5+CkqhR4yIavZg/6FYyjYBmje0oo4ZkamXtEtPmW/NkgwwES8tvcuF0lohIX5aJ52FYMy1AkQfbQzyTs9pI3/FR84YZCra2YC1eiutHQfx3m9P078qCAziH3znD18qHpVQGqh4v53ywGECFe/XzxguQuBe3mlulgRnP6hpwpw42TpNp+/Ud19nJLPzplpw4CwaG8pRNepnBcXYsGth/V69yAQfTgoadgUSSZ9VZcQDWDe1e80750FXDn1rnvHs9j9eMCNcewtzwPV/6mNFpTLUbGJHiTCWKv9keju2VtXe9EK82GVW93ZaOS5K6FhhgWMRd7GYcjOFxtjhpHHdFRh+GWJ3u8UXa/1hgaYngTQ2+2TJBon1eLZWEjXI49LFURJ/UQ2ikFbRZf0S7LoW6reCA9owXWOb71cQAlId40+bd+1of1kxoGznvTpyLWQexFqmlIKfzDMEenGVF1GeCN5aoR6ASxOcRGUwnRQOP1K0CniwxoFZ2TVT6siU+nDINZbI6s0SusZlQn+qBpqtFS323NS4a7KFKOaCpkfdsUBj/ooRv2z+hunCMlwLaE=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(66476007)(54906003)(66556008)(36756003)(2616005)(16576012)(26005)(956004)(53546011)(186003)(5660300002)(7416002)(110136005)(4326008)(316002)(86362001)(8676002)(66946007)(38100700002)(31696002)(6486002)(8936002)(6666004)(508600001)(31686004)(83380400001)(2906002)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: d266ff71-0e9b-4328-f74c-08d951fa0965
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2021 19:00:59.2366
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: DoK/H3ebPJ9Nz/07N0BzzfQr9U0YuSXgSOcZlxcVHbpwbgUzwHZ7JjWUXFYQhp8z0MbxIXACG3D6ajvfTJmlbi0pelTANhpTSrutyELypKY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR03MB4552
X-OriginatorOrg: citrix.com

On 28/07/2021 18:27, Julien Grall wrote:
> Hi Andrew,
>
> On 28/07/2021 18:19, Andrew Cooper wrote:
>> On 28/07/2021 17:18, Oleksandr Tyshchenko wrote:
>>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>>>
>>> Add XENMEM_get_unallocated_space hypercall which purpose is to
>>> query hypervisor to find regions of guest physical address space
>>> which are unused and can be used to create grant/foreign mappings
>>> instead of wasting real pages from the domain memory for
>>> establishing these mappings. The problem with the current Linux
>>> on Xen on Arm behaviour is if we want to map some guest memory
>>> regions in advance or to perform cache mappings in the backend
>>> we might run out of memory in the host (see XSA-300).
>>> This of course, depends on the both host and guest memory sizes.
>>>
>>> The "unallocated space" can't be figured out precisely by
>>> the domain on Arm without hypervisor involvement:
>>> - not all device I/O regions are known by the time domain starts
>>> =C2=A0=C2=A0 creating grant/foreign mappings
>>> - the Dom0 is not aware of memory regions used for the identity
>>> =C2=A0=C2=A0 mappings needed for the PV drivers to work
>>> In both cases we might end up re-using these regions by
>>> a mistake. So, the hypervisor which maintains the P2M for the domain
>>> is in the best position to provide "unallocated space".
>>
>> I'm afraid this does not improve the situation.
>>
>> If a guest follows the advice from XENMEM_get_unallocated_space, and
>> subsequently a new IO or identity region appears, everything will
>> explode, because the "safe area" wasn't actually safe.
>>
>> The safe range *must* be chosen by the toolstack, because nothing else
>> can do it safely or correctly.
>
> The problem is how do you size it? In particular, a backend may map
> multiple time the same page (for instance if the page is granted twice).

The number of mapped grants is limited by the size of the maptrack table
in Xen, which is a toolstack input to the domaincreate hypercall.=C2=A0
Therefore, the amount of space required is known and bounded.

There are a handful of other frames required in the current ABI (shared
info, vcpu info, etc).

The areas where things do become fuzzy is things like foreign mappings,
acquire_resource, etc for the control domain, which are effectively
unbounded from the domain's point of view.

For those, its entirely fine to say "here 128G of safe mapping space" or
so.=C2=A0 Even the quantity of mapping dom0 can make is limited by the shad=
ow
memory pool and the number of pagetables Xen is willing to expend on the
second stage translation tables.

>
>>
>> Once a safe range (or ranges) has been chosen, any subsequent action
>> which overlaps with the ranges must be rejected, as it will violate the
>> guarantees provided.
>>
>> Furthermore, the ranges should be made available to the guest via normal
>> memory map means.=C2=A0 On x86, this is via the E820 table, and on ARM I
>> presume the DTB.=C2=A0 There is no need for a new hypercall.
>
> Device-Tree only works if you have a guest using it. How about ACPI?

ACPI inherits E820 from x86 (its a trivial format), and UEFI was also
based on it.

But whichever...=C2=A0 All firmware interfaces have a memory map.

> To me the hypercall solution at least:
> =C2=A0 1) Avoid to have to define the region on every single firmware tab=
le

There is only ever one.

> =C2=A0 2) Allow to easily extend after the guest run

The safe ranges can't be changed (safely).=C2=A0 This is the same problem a=
s
needing to know things like your PCI apertures ahead of time, or where
the DIMM hotplug regions are.

Having the guest physmap be actually dynamic is the cause of so many
bugs (inc security) and misfeatures in Xen.=C2=A0 Guests cannot and do no
cope with things being fully dynamic, because that's not how real
hardware works.=C2=A0 What you get is layers and layers of breakage on top =
of
each other, rather than a working system.

The size of mapping space is a limit, just like maxphysaddr, or the PCI
apertures, or MMCFG space, etc.=C2=A0 You can make it large by default (as =
it
doesn't consume resource when not being used), but any guest OS isn't
going to tolerate it morphing during runtime.

~Andrew



From xen-devel-bounces@lists.xenproject.org Wed Jul 28 19:53:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 19:53:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161789.296911 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8pcU-0003lk-PM; Wed, 28 Jul 2021 19:53:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161789.296911; Wed, 28 Jul 2021 19:53:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8pcU-0003ld-MI; Wed, 28 Jul 2021 19:53:34 +0000
Received: by outflank-mailman (input) for mailman id 161789;
 Wed, 28 Jul 2021 19:53:33 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m8pcT-0003lX-Hi
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 19:53:33 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8pcM-00008E-CT; Wed, 28 Jul 2021 19:53:26 +0000
Received: from [54.239.6.188] (helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m8pcM-0003X9-59; Wed, 28 Jul 2021 19:53:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=q6+SfKiqHcZjDQbkJ38XBm0Pn6LUf3twKQ8u/fdEoDQ=; b=bRejpFjYzFEjyEJ9yIFy/DcxVC
	GEI5LcCJInC3fl2GGCZQ+tNKvGp2JJfq3N+qygRgB7FbBuEEC42Agd5XN3YJogCx72HHHYYZxTRta
	wYQBs2U2LLY1fM4KTzF3teUUShbAzulOAdreGiwJFX11RT5okCV6AO4SnecLrJoQ4MU4=;
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
To: Andrew Cooper <andrew.cooper3@citrix.com>,
 Oleksandr Tyshchenko <olekstysh@gmail.com>, xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 George Dunlap <george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
 <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com>
 <e8db3021-78a5-e040-a70b-62ca5b500149@xen.org>
 <4de5ed21-379e-b618-44c8-924d88b1a519@citrix.com>
From: Julien Grall <julien@xen.org>
Message-ID: <bbc7f597-5249-20a0-cac9-13f594268299@xen.org>
Date: Wed, 28 Jul 2021 20:53:22 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <4de5ed21-379e-b618-44c8-924d88b1a519@citrix.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit



On 28/07/2021 20:00, Andrew Cooper wrote:
> On 28/07/2021 18:27, Julien Grall wrote:
>> Hi Andrew,
>>
>> On 28/07/2021 18:19, Andrew Cooper wrote:
>>> On 28/07/2021 17:18, Oleksandr Tyshchenko wrote:
>>>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>>>>
>>>> Add XENMEM_get_unallocated_space hypercall which purpose is to
>>>> query hypervisor to find regions of guest physical address space
>>>> which are unused and can be used to create grant/foreign mappings
>>>> instead of wasting real pages from the domain memory for
>>>> establishing these mappings. The problem with the current Linux
>>>> on Xen on Arm behaviour is if we want to map some guest memory
>>>> regions in advance or to perform cache mappings in the backend
>>>> we might run out of memory in the host (see XSA-300).
>>>> This of course, depends on the both host and guest memory sizes.
>>>>
>>>> The "unallocated space" can't be figured out precisely by
>>>> the domain on Arm without hypervisor involvement:
>>>> - not all device I/O regions are known by the time domain starts
>>>>     creating grant/foreign mappings
>>>> - the Dom0 is not aware of memory regions used for the identity
>>>>     mappings needed for the PV drivers to work
>>>> In both cases we might end up re-using these regions by
>>>> a mistake. So, the hypervisor which maintains the P2M for the domain
>>>> is in the best position to provide "unallocated space".
>>>
>>> I'm afraid this does not improve the situation.
>>>
>>> If a guest follows the advice from XENMEM_get_unallocated_space, and
>>> subsequently a new IO or identity region appears, everything will
>>> explode, because the "safe area" wasn't actually safe.
>>>
>>> The safe range *must* be chosen by the toolstack, because nothing else
>>> can do it safely or correctly.
>>
>> The problem is how do you size it? In particular, a backend may map
>> multiple time the same page (for instance if the page is granted twice).
> 
> The number of mapped grants is limited by the size of the maptrack table
> in Xen, which is a toolstack input to the domaincreate hypercall.
> Therefore, the amount of space required is known and bounded.
> 
> There are a handful of other frames required in the current ABI (shared
> info, vcpu info, etc).
> 
> The areas where things do become fuzzy is things like foreign mappings,
> acquire_resource, etc for the control domain, which are effectively
> unbounded from the domain's point of view.
> 
> For those, its entirely fine to say "here 128G of safe mapping space" or
> so.  Even the quantity of mapping dom0 can make is limited by the shadow
> memory pool and the number of pagetables Xen is willing to expend on the
> second stage translation tables.

FWIW, on Arm, we don't have shadow memory pool.

Anyway, it should be possible to give a 128GB "safe range" and let Xen 
deal with it.

> 
>>
>>>
>>> Once a safe range (or ranges) has been chosen, any subsequent action
>>> which overlaps with the ranges must be rejected, as it will violate the
>>> guarantees provided.
>>>
>>> Furthermore, the ranges should be made available to the guest via normal
>>> memory map means.  On x86, this is via the E820 table, and on ARM I
>>> presume the DTB.  There is no need for a new hypercall.
>>
>> Device-Tree only works if you have a guest using it. How about ACPI?
> 
> ACPI inherits E820 from x86 (its a trivial format), and UEFI was also
> based on it.
> 
> But whichever...  All firmware interfaces have a memory map.

This will be UEFI memory map. However, I am a bit confused how we can 
tell the OS the region will be used for grant/foreign mapping. Is it 
possible to reserved a new type?

> 
>> To me the hypercall solution at least:
>>    1) Avoid to have to define the region on every single firmware table
> 
> There is only ever one.

Why? I could forsee an interest to use the host memory map and therefore 
we may need to find a few holes for safe regions to use.

> 
>>    2) Allow to easily extend after the guest run
> 
> The safe ranges can't be changed (safely).  This is the same problem as
> needing to know things like your PCI apertures ahead of time, or where
> the DIMM hotplug regions are.
> 
> Having the guest physmap be actually dynamic is the cause of so many
> bugs (inc security) and misfeatures in Xen.  Guests cannot and do no
> cope with things being fully dynamic, because that's not how real
> hardware works.  What you get is layers and layers of breakage on top of
> each other, rather than a working system.

I would not call it "fully dynamic". Xen can easily know whether a 
region has ever be allocated before. So long the region has never been 
allocated, then it should be fine. In fact...

> 
> The size of mapping space is a limit, just like maxphysaddr, or the PCI
> apertures, or MMCFG space, etc.  You can make it large by default (as it
> doesn't consume resource when not being used), but any guest OS isn't
> going to tolerate it morphing during runtime.
... I believe the OS may be not aware of the hotplug region until it is 
actually used.

Anyway, I suggested this approach a few months ago to Oleksandr (see 
[1]) which BTW you were CCed on ;). My take was that Xen knows about the 
unallocated space and therefore can make an informed decision without 
having to allocate insanely large region.

Now if you think that's fine (IIRC Stefano had a preference for that as 
well). Then we can use the firmware table (assuming we can solve the 
ACPI question).

At the end of the day, this is not really the interesting bit of the 
problem. What matter if the OS part where hopefully Linux will be able 
to use normally the RAM. We may even be able to fix XSA-300!

Cheers,

[1] <YJ3jlGSxs60Io+dp@mattapan.m5p.com>

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Wed Jul 28 22:12:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Wed, 28 Jul 2021 22:12:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161796.296923 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8rm6-0007X0-N4; Wed, 28 Jul 2021 22:11:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161796.296923; Wed, 28 Jul 2021 22:11:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8rm6-0007Wt-JE; Wed, 28 Jul 2021 22:11:38 +0000
Received: by outflank-mailman (input) for mailman id 161796;
 Wed, 28 Jul 2021 22:11:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=2qzU=MU=starlab.io=scott.davis@srs-us1.protection.inumbo.net>)
 id 1m8rm5-0007Wn-3C
 for xen-devel@lists.xenproject.org; Wed, 28 Jul 2021 22:11:37 +0000
Received: from GCC02-DM3-obe.outbound.protection.outlook.com (unknown
 [40.107.91.131]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c5938aa8-eff0-11eb-97ee-12813bfff9fa;
 Wed, 28 Jul 2021 22:11:35 +0000 (UTC)
Received: from MN2PR09MB5258.namprd09.prod.outlook.com (2603:10b6:208:220::11)
 by BLAPR09MB7250.namprd09.prod.outlook.com (2603:10b6:208:2ac::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.26; Wed, 28 Jul
 2021 22:11:32 +0000
Received: from MN2PR09MB5258.namprd09.prod.outlook.com
 ([fe80::5d45:9dcd:8c1b:fc55]) by MN2PR09MB5258.namprd09.prod.outlook.com
 ([fe80::5d45:9dcd:8c1b:fc55%6]) with mapi id 15.20.4352.032; Wed, 28 Jul 2021
 22:11:32 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c5938aa8-eff0-11eb-97ee-12813bfff9fa
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Mpn8QtDm2wo+nbQFndknbjExaWw2kAtCA4uFhGpXKGzMFbBc4QDf/SNGZgnk9X1qIRusyv/BfjyyS+OhjthNFnOuBqXJQaUJRbmLytPIFlub1oc/UOLdExg0aCAqekZWQyYe0edwCG+Ju5JULwTPTk6MIzkXpt5ffyVpm8GhVmcij7BRP73/f0aT8oBYt+4+97k7i+vuhFDORbSln+JYCQqMK8Kxmt8U8+gjimeO3h1WGf/aY5QPugRxYHMdi4mHFBW+Du6LOj9+nwpmS9SCx5QRaGv9DOpi0UQelRInsnveE4YpjfPSvG+AdPGD81VdCCfqmSlCQ6qSZ/r5QH4FZQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1Zp97fQxtpXmm1Md5DiyBzfqlKL2SI3KCCaXp+W27yo=;
 b=hunNXkKBSddzqd6UilPdmShlQAX8ItG81ynke75Ku2HcGo4XTKgHqOSFr7+bR2rWfqhjmgHajQkgXLkF/Pba/5KVsxaaIl7RnFX6nC20H+ya/b/9MkUIAu9JJAJQQl2hz8YwjXsg0RdCqT7g5cqBIHynSOjyKwTwnX/rXLU7Y3ES0qlFdom8MkFo0Y8M7snISKG7byhTwHqg+27OzI4qjnrstRbd+qo47j03RQYSKuqgQizOIhMbZrKAsxXui1CUlUTv+sYZiFGS3TxPRjzK0hQzRtvyIGuOPxVpA1TDcIhrW5bFpmTl3Az7xqX7WDI0iSOMfCq3DF8Kbb0uf7V3rA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=starlab.io; dmarc=pass action=none header.from=starlab.io;
 dkim=pass header.d=starlab.io; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=starlab.io;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1Zp97fQxtpXmm1Md5DiyBzfqlKL2SI3KCCaXp+W27yo=;
 b=4UeFi9Dck5yjAg7JQWbsgWOSvSECVV9jt3XztqamP5rrlEjQYijFfxyba3xBHtyFOW/jnZXAXeRYR8eUYQ4pgmADgbqAgUcaQLnRqMNAilANJs7jJc29kpxa3/3bUasj9T7OTyRtwx1BTn1qOFMrn5lG6Ezzt0eg9lol30CjW+E=
From: Scott Davis <scott.davis@starlab.io>
To: Anthony PERARD <anthony.perard@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, =?utf-8?B?TWFyZWsgTWFyY3p5a293c2tpLUfDs3JlY2tp?=
	<marmarek@invisiblethingslab.com>, Andrew Cooper <andrew.cooper3@citrix.com>,
	Jason Andryuk <jandryuk@gmail.com>
CC: xen-devel <xen-devel@lists.xenproject.org>, Wei Liu <wl@xen.org>, George
 Dunlap <george.dunlap@citrix.com>, Nick Rosbrook <rosbrookn@ainfosec.com>,
	Juergen Gross <jgross@suse.com>, Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	"Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: Re: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
Thread-Topic: [XEN PATCH] tools/xl: Add device_model_stubdomain_init_seclabel
 option to xl.cfg
Thread-Index: AQHXf33g/3arqaNk2kWsKuTBRdut1atVP0WAgAGE9YCAABRyAIABfdUAgABifoA=
Date: Wed, 28 Jul 2021 22:11:32 +0000
Message-ID: <ECB6CCF9-81AF-4D45-8406-871FE0664C8A@starlab.io>
References:
 <8ee22fab0731347dd7f998c5f336eac804785c28.1627014699.git.scott.davis@starlab.io>
 <CAKf6xpvZZCdEbPoetXabX15yL_oMnya0813-nrm6+WagL3Wx3w@mail.gmail.com>
 <YP/5wL2p/CGR5g7D@mail-itl>
 <24832.2790.631888.595948@mariner.uk.xensource.com> <YQFLND63SJH85Zeo@perard>
In-Reply-To: <YQFLND63SJH85Zeo@perard>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: citrix.com; dkim=none (message not signed)
 header.d=none;citrix.com; dmarc=none action=none header.from=starlab.io;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d169ab9a-461d-484e-8499-08d95214a826
x-ms-traffictypediagnostic: BLAPR09MB7250:
x-microsoft-antispam-prvs:
 <BLAPR09MB72504858F1B2E3994644991191EA9@BLAPR09MB7250.namprd09.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 ysizMU7O4jF2pcI7cBjd8Ud2x0Eeszxazi3IQP/DIMpfxIVLY6ByhnWNnc+shY8mgVeVeqTkD9HybCTlER6xdWZ2CxFZ0SOc5TF5cWmL6mVmYzHR1GKxq5SkMtbdcSwNBbLHfM7t6idRmJvy7h8TXe76+tYxT8tS7H/jvNRDjTOddotxE4iOdSh3VDwuyKUzYR4w5Ed9lbj26iqUd1Ww5AGdkmqdYGyTNkz8tul9rUjSITVJDwe/Pm8D/gIytP9DUs4l3uLY3Of607ePtP3HwxQ1eU7KIWYOqwN2Z3u1VXG7CnRSJBUVjO/01GaZBXLltH2JQlxKrkpHDDtMTvVxHTa+77XXK4kLg9rulDN6TN4mh1vai3cCvou471VM7judko/+E8eSii22b2La+8qJXyIrvauJOqnPAaKKNDsp7ZTI9nCht3DV3uSexhs0oeqr94JBfJME4MLrgZCX1LvZA+kK4OKj2p7pxe19MahMabkqJQyJbB1+m6yo8uLMcrtgJgVDpaCK/r/o45jmRCL5N7wdU0gnIV9jUoXqB2qhQ7Wa7QEpST6DGfUMY5CZGi/d3X/5PHk/j2pl7KGGX1aUwC71155zWtNc7MyGES1I36ll0+NYInzcwO9XFTXuGOvN6BoqYvFG3XmM3PnKMiTsT2J9Jt9T0y23D3UtoP91ei4COkpCunz9DsH7U+AHdiqsAo+kz1SrU25jER7RK5l2bi7CqNEJvx9CVg0dySt6JsQ=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR09MB5258.namprd09.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(346002)(39830400003)(136003)(396003)(4326008)(186003)(478600001)(5660300002)(6506007)(53546011)(26005)(66574015)(86362001)(66446008)(64756008)(66946007)(316002)(66556008)(2616005)(66476007)(54906003)(2906002)(6486002)(71200400001)(110136005)(36756003)(6512007)(44832011)(38100700002)(7416002)(76116006)(83380400001)(8936002)(33656002)(122000001)(38070700005)(8676002)(45980500001);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 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
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <74317A9E8E3A564387CD72FF44B6FA63@namprd09.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: starlab.io
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MN2PR09MB5258.namprd09.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d169ab9a-461d-484e-8499-08d95214a826
X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jul 2021 22:11:32.1335
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 5e611933-986f-4838-a403-4acb432ce224
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR09MB7250

VGhhbmtzIGZvciB0aGUgcmV2aWV3LCBldmVyeW9uZS4NCg0KT24gNy8yNi8yMSwgOTowOCBBTSwg
SmFzb24gQW5kcnl1ayB3cm90ZToNCj4gPiAgICAgIGxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mb19p
bml0KCZkbV9jb25maWctPmNfaW5mbyk7DQo+ID4gKyAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5m
b19pbml0KCZkbV9jb25maWctPmJfaW5mbyk7DQo+ID4gKyAgICBsaWJ4bF9kb21haW5fYnVpbGRf
aW5mb19pbml0X3R5cGUoJmRtX2NvbmZpZy0+Yl9pbmZvLCBMSUJYTF9ET01BSU5fVFlQRV9QVik7
DQo+ID4gKw0KPiANCj4gSXMgdGhlcmUgYSBwYXJ0aWN1bGFyIG5lZWQgZm9yIG1vdmluZyB0aGVz
ZSBsaW5lcyBoZXJlPw0KDQpXaXRob3V0IHRoZSBtb3ZlLCB0aGVzZSBpbml0cyB3b3VsZCBoYXZl
IHN0b21wZWQgb24gdGhlIGJfaW5mby5leGVjX3NzaWQqIA0KdmFsdWVzIHNldCBiZWxvdy4gSG93
ZXZlci4uLg0KDQo+ID4gICAgICBkbV9jb25maWctPmNfaW5mby5zc2lkcmVmID0gZ3Vlc3RfY29u
ZmlnLT5iX2luZm8uZGV2aWNlX21vZGVsX3NzaWRyZWY7DQo+ID4gICAgICBkbV9jb25maWctPmNf
aW5mby5zc2lkX2xhYmVsID0gTlVMTDsNCj4gPiArICAgIGRtX2NvbmZpZy0+Yl9pbmZvLmV4ZWNf
c3NpZHJlZiA9DQo+ID4gKyAgICAgICAgZ3Vlc3RfY29uZmlnLT5iX2luZm8uZGV2aWNlX21vZGVs
X2V4ZWNfc3NpZHJlZjsNCj4gPiArICAgIGRtX2NvbmZpZy0+Yl9pbmZvLmV4ZWNfc3NpZF9sYWJl
bCA9IE5VTEw7DQo+IA0KPiBBdCBmaXJzdCBnbGFuY2UsIGl0IHNlZW1zIG9ubHkgdGhlc2UgYWRk
aXRpb25zIGFyZSBzdHJpY3RseSBuZWNlc3NhcnkuDQo+IEJ1dCBpZiBvbmx5IGRvbWNyZWF0ZV9j
b21wbGV0ZSBpcyBkb2luZyB0aGUgcmVsYWJlbCwgdGhlbiB0aGV5IGFyZQ0KPiB1bnVzZWQ/DQoN
CkkgYmVsaWV2ZSB5b3UgYXJlIGNvcnJlY3QuIEkgYWxzbyB0aG91Z2h0IGF0IGZpcnN0IHRoYXQg
c2V0dGluZyB0aGVzZSANCmZpZWxkcyB3b3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgcmVsYWJl
bCwgb25seSB0byByZWFsaXplIGxhdGVyIHRoYXQgDQpkb21jcmVhdGVfY29tcGxldGUgZG9lcyBu
b3QgZ2V0IGNhbGxlZCBmb3IgdGhlIHN0dWJkb21haW4gaXRzZWxmIChhbmQgDQp3b3VsZG4ndCBi
ZSB0aGUgY29ycmVjdCBwbGFjZSB0byByZWxhYmVsIGl0IGV2ZW4gaWYgaXQgd2VyZSkuIEkgd2ls
bCANCnJldGVzdCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hhbmdlcyB0byBsaWJ4bF9kbS5jIGFy
ZSB1bm5lY2Vzc2FyeSBhbmQgDQpkcm9wIHRoZW0gaW4gdjIuDQoNCk9uIDcvMjcvMjEsIDk6MzAg
QU0sIElhbiBKYWNrc29uIHdyb3RlOg0KPiBBbmRyZXcgQ29vcGVyIHdyaXRlczoNCj4gPiA+ICAg
ICAgICAgIHJldCA9IGxpYnhsX2ZsYXNrX2NvbnRleHRfdG9fc2lkKGN0eCwgcywgc3RybGVuKHMp
LA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRfY29u
ZmlnLT5iX2luZm8uZGV2aWNlX21vZGVsX3NzaWRyZWYpOw0KPiA+ID4gKyAgICAgICAgaWYgKHJl
dCkgew0KPiA+ID4gKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMpIHsNCj4gPiA+ICsg
ICAgICAgICAgICAgICAgTE9HRChXQVJOLCBkb21pZCwNCj4gPiA+ICsgICAgICAgICAgICAgICAg
ICAgICAiWFNNIERpc2FibGVkOiBkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9pbml0X3NlY2xhYmVs
IG5vdCBzdXBwb3J0ZWQiKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgcmV0ID0gMDsNCj4gPg0K
PiA+IFN1cmVseSB0aGlzIHdhbnRzIHRvIGJlIGEgaGFyZCBlcnJvcj8NCj4gPg0KPiA+IE5vdCBz
cGVjaWZ5aW5nIGEgbGFiZWwgaXMgb25lIHRoaW5nLCBidXQgc3BlY2lmeWluZyBhIGxhYmVsIGFu
ZCBoYXZpbmcNCj4gPiBpdCBub3QgdGFrZSBlZmZlY3QgYmVjYXVzZSBjb2RlIHdhcyBjb21waWxl
ZCBvdXQgb2YgdGhlIGh5cGVydmlzb3INCj4gPiBzb3VuZHMgbGlrZSBhIHNlY3VyaXR5IGhvbGUu
DQo+ID4NCj4gPiBJIHNlZSB0aGlzIGlzIGEgcGF0dGVybiBjb3BpZWQgZnJvbSBlbHNld2hlcmUs
IGJ1dCBpdCBzZWVtcyB2ZXJ5IHNob3J0DQo+ID4gc2lnbmVkLg0KPiANCj4gSSB3b25kZXIgaWYg
dGhpcyBpcyB0byB0cnkgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBib290IGEgc3lzdGVtIHdob3Nl
DQo+IGNvbmZpZyBzcGVjaWZpZXMgWFNNIGxhYmVscyBidXQgd2l0aCBYU00gZGlzYWJsZWQuDQo+
IA0KPiBNYXJlaywgb3Igc29tZW9uZSwgY2FuIHlvdSBhZHZpc2UgPw0KPiANCj4gTXkgaW5pdGlh
bCB0aG91Z2h0cyBhcmUgdG8gYWdyZWUgd2l0aCBBbmRyZXcgdGhhdCBpZ25vcmluZyB0aGlzIGVy
cm9yDQo+IHNlZW1zIHRvIG1lIHRvIGJlIGEgYmFkIHBsYW4sIGJ1dCBtYXliZSB0aGVyZSBpcyBh
IGdvb2QgcmVhc29uLg0KPiANCj4gSWYgd2UgZG8gd2FudCB0byBpbXByb3ZlIHRoaXMsIG1heWJl
IHdlIG5lZWQgdG8gdXBkYXRlIGFsbCB0aGUNCj4gY29ycmVzcG9uZGluZyBjYWxsIHNpdGVzLg0K
DQpNeSBndWVzcyBpcyB0aGF0IHRoaXMgcGF0dGVybiBleGlzdHMgZm9yIGNhc2VzIHdoZXJlIGZs
YXNrIGhhcyBiZWVuIA0KZGlzYWJsZWQgYXQgcnVudGltZSB2aWEgY29tbWFuZCBsaW5lIG9wdGlv
biBvciBoeXBlcmNhbGwuIEhvd2V2ZXIsIEkgDQphZ3JlZSB0aGF0IGxvb2t1cCBmYWlsdXJlIHNo
b3VsZCBiZSBhIGhhcmQgZXJyb3IgaW4gdGhlc2UgY2FzZXMuDQpmbGFzaz1wZXJtaXNzaXZlIGV4
aXN0cyBmb3IgdGVtcG9yYXJpbHkgZGlzYWJsaW5nIGVuZm9yY2VtZW50IGluIA0KZGV2ZWxvcG1l
bnQgc2l0dWF0aW9ucy4gQXMgbG9uZyBhcyBwZXJtaXNzaXZlIG1vZGUgaXMgbm90IGJyb2tlbiBi
eSB0aGUgDQpjaGFuZ2UsIEkgd2lsbCBwbGFuIHRvIGNvbnZlcnQgZWFjaCBvZiB0aGVzZSB3YXJu
aW5ncyB0byBoYXJkIGVycm9ycyBpbiANCnYyIHVubGVzcyBzb21lb25lIGZlZWxzIG90aGVyd2lz
ZS4NCg0KT24gNy8yOC8yMSwgODoxOSBBTSwgQW50aG9ueSBQRVJBUkQgd3JvdGU6DQo+IE9uIFR1
ZSwgSnVsIDI3LCAyMDIxIGF0IDAyOjMyOjIyUE0gKzAxMDAsIElhbiBKYWNrc29uIHdyb3RlOg0K
PiA+IE1hcmVrIE1hcmN6eWtvd3NraS1Hw7NyZWNraSB3cml0ZXM6DQo+ID4gPiBPbiBNb24sIEp1
bCAyNiwgMjAyMSBhdCAwOTowNzowM0FNIC0wNDAwLCBKYXNvbiBBbmRyeXVrIHdyb3RlOg0KPiA+
ID4gPiBTb3J0IG9mIHJlbGF0ZWRseSwgaXMgc3R1YmRvbSB1bnBhdXNlZCBiZWZvcmUgdGhlIGd1
ZXN0IGdldHMNCj4gPiA+ID4gcmVsYWJlbGVkPyAgUXVpY2tseSBsb29raW5nLCBJIHRoaW5rIHN0
dWJkb20gaXMgdW5wYXVzZWQuICBJIHdvdWxkDQo+ID4gPiA+IHRoaW5rIHlvdSB3YW50IHRoZW0g
Ym90aCByZWxhYmVsZWQgYmVmb3JlIGVpdGhlciBpcyB1bnBhdXNlZC4gIElmIHRoZQ0KPiA+ID4g
PiBzdHViZG9tIHN0YXJ0cyB3aXRoIHRoZSBleGVjX2xhYmVsLCBidXQgaXQgc2VlcyB0aGUgZ3Vl
c3Qgd2l0aCB0aGUNCj4gPiA+ID4gaW5pdF9sYWJlbCwgaXQgbWF5IGdldCBhbiB1bmV4cGVjdGVk
IGRlbmlhbD8gIE9uIHRoZSBvdGhlciBoYW5kLA0KPiA+ID4gPiBkZWxheWVkIHVucGF1c2luZyBv
ZiBzdHViZG9tIHdvdWxkIHNsb3cgZG93biBib290aW5nLg0KPiA+ID4NCj4gPiA+IFNvbWUgcGFy
dHMgb2YgdGhlIHN0dWJkb21haW4gc2V0dXAgYXJlIGRvbmUgYWZ0ZXIgaXQncyB1bnBhdXNlZCAo
YnV0DQo+ID4gPiBiZWZvcmUgdGhlIGd1ZXN0IGlzIHVucGF1c2VkKS4gRXNwZWNpYWxseSwgUENJ
IGRldmljZXMgYXJlIGhvdC1wbHVnZ2VkDQo+ID4gPiBvbmx5IHdoZW4gUUVNVSBpcyBhbHJlYWR5
IHJ1bm5pbmcgKG5vdCBzdXJlIHdoeSkuDQo+ID4NCj4gPiBJIHRoaW5rIHRoZSBQQ0kgaG90cGx1
ZyBpbnZvbHZlcyBpbnRlcmFjdGlvbiB3aXRoIFFFTVUsIGFuZCBwcm92aWRpbmcNCj4gPiBvbmx5
IGhvdHBsdWcgc2ltcGxpZmllcyB0aGUgY29kZSBpbiBsaWJ4bC4gIEFudGhvbnksIGRvIEkgaGF2
ZSB0aGF0DQo+ID4gcmlnaGd0ID8NCj4gDQo+IEkgdGhpbmsgaW50ZXJhY3Rpb24gd2l0aCBRRU1V
IGlzIG5lZWRlZCB0byBmaW5kIG91dCB0aGUgbmV3IGFkZHJlc3Mgb2YNCj4gdGhlIFBDSSBkZXZp
Y2UgaW4gY2FzZXMgbm9uZSB3ZXJlIGFza2VkIGZvci4gQW5kIGhhdmUgYSBzaW5nbGUNCj4gaW1w
bGVtZW50YXRpb24gaW4gbGlieGwgaXMgY2VydGFpbmx5IGJldHRlci4NCj4gQnV0IGV2ZW4gaWYg
UUVNVSBpcyBydW5uaW5nLCBJIHRoaW5rIHdlIGNhbiBzdGlsbCBjYWxsIGl0IGNvbGQtcGx1Z2dl
ZCwNCj4gd2hlbiBpdCdzIGRvbmUgYmVmb3JlIGVtdWxhdGlvbiBpcyBzdXBwb3NlZCB0byBoYXZl
IHN0YXJ0ZWQuDQoNClllcywgSSBjaG9zZSB0byByZWxhYmVsIHRoZSBzdHViZG9tYWluIGF0IHRo
ZSBzYW1lIHRpbWUgYXMgdGhlIGd1ZXN0IChhbmQgDQphZnRlciB1bnBhdXNlIG9mIHRoZSBzdHVi
ZG9tYWluIGl0c2VsZikgc3BlY2lmaWNhbGx5IHNvIHRoYXQgUENJIGRldmljZSANCnBhc3N0aHJv
dWdoIHRvIHRoZSBndWVzdCBjYW4gYmUgY29tcGxldGVkIHByaW9yIHRvIHJlbGFiZWxpbmcuIFRo
aXMgZG9lcyANCnJlcXVpcmUgZG1fZG9tX3QncyBidWlsZCBsYWJlbCB0byBiZSB0aGUgc291cmNl
IGFuZCB0YXJnZXQgb2YgbW9yZSANCnByaXZpbGVnZXMgdGhhbiBpZiB0aGUgcmVsYWJlbGluZyBv
Y2N1cnJlZCBwcmUtbGF1bmNoLCBidXQgbm9uZSBvZiB0aG9zZSANCmFyZSBwcml2aWxlZ2VzIHRo
YXQgdGhlIGNvbWJpbmVkIGJ1aWxkL3J1biBkbV9kb21fdCBsYWJlbCBkb2Vzbid0IChvciANCndv
dWxkbid0KSBoYXZlIGFscmVhZHkuIFRoZSBlbmQgZ29hbCBpbiBteSBtaW5kIGlzIHRvIGJlIGFi
bGUgdG8gZHJvcCBhcyANCm1hbnkgb2YgdGhvc2UgcHJpdmlsZWdlcyBhcyBwb3NzaWJsZSBiZWZv
cmUgdGhlIGd1ZXN0IGl0c2VsZiBydW5zLCBhbmQgDQp0aGVyZSBhcmUgY2VydGFpbmx5IHNvbWUg
cmVxdWlyZWQgdG8gc2V0dXAgUENJIGRldmljZSBwYXNzdGhyb3VnaCB0aGF0IA0KbWF5IG5vdCBi
ZSBuZWVkZWQgYWZ0ZXIsIGRlcGVuZGluZyBvbiB0aGUgdXNlIGNhc2UuDQoNCkkgd2lsbCBhZGQg
YSBkaXNjdXNzaW9uIG9mIHRoaXMgZGVjaXNpb24gdG8gdGhlIHYyIGNvbW1pdCBtZXNzYWdlLg0K
DQpPbiA3LzI3LzIxLCA5OjUwIEFNLCBKYXNvbiBBbmRyeXVrIHdyb3RlOg0KPiBPbiBUdWUsIEp1
bCAyNywgMjAyMSBhdCA5OjMyIEFNIElhbiBKYWNrc29uIDxpd2pAeGVucHJvamVjdC5vcmc+IHdy
b3RlOg0KPiA+IE5haXZlbHksIGl0IHNlZW1zIHRvIG1lIHRoYXQgdGhlIHNlY3VyaXR5IHJpc2tz
IGFyZSBsaW1pdGVkIGJlY2F1c2UNCj4gPiB1bnRpbCB0aGUgZ3Vlc3QgaXMgdW5wYXVzZWQgaXQg
ZG9lc24ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIGRvDQo+ID4gYW55dGhpbmcsIHNvIGNhbm5vdCB5
ZXQgbW91bnQgYW4gYXR0YWNrIG9uIHFlbXUuICBTbyBJJ20gZXhwZWN0aW5nDQo+ID4gdGhhdCBx
ZW11IGlzIHN0aWxsIHRydXN0d29ydGh5IHVudGlsIHRoZSBndWVzdCBpcyB1bnBhdXNlZC4NCj4g
DQo+IEkgd2FzIGxvb2tpbmcgYXQgaXQgZnJvbSB0aGUgb3RoZXIgZGlyZWN0aW9uIC0gcHJvdGVj
dGluZyBhbmQgZ3Vlc3QNCj4gYW5kIHN0dWJkb20gZnJvbSBkb20wLiAgVGhlIG5pY2UgdGhpbmcg
eW91IGNhbiBkbyBpcyBwcmV2ZW50IGRvbTAgZnJvbQ0KPiBtYXBwaW5nIHRoZSBndWVzdCdzIG1l
bW9yeSBhZnRlciB0aGUgcmVsYWJlbGluZy4NCj4gDQo+IFRoZSByZWxhYmVsaW5nIHBsYWNlbWVu
dCBpbiB0aGlzIHBhdGNoIG1heSBiZSBva2F5LiAgVGhlIHN0dWJkb20NCj4gaXRzZWxmIGlzIGEg
ZG9tMC1zdXBwbGllZCBrZXJuZWwgJiByYW1kaXNrLiAgU28gYSB3aW5kb3cgb2YgdGltZSB3aGVy
ZQ0KPiBpdCdzIHJ1bm5pbmcgYmVmb3JlIGJlaW5nIHJlbGFiZWxlZCBpc24ndCB0aGF0IGJpZyBv
ZiBhIGRlYWwuICBpLmUuDQo+IGluc3RlYWQgb2YgZG9tMCBtb2RpZnlpbmcgdGhlIHN0dWJkb20g
aW4gdGhhdCB3aW5kb3csIGl0IGNvdWxkIGp1c3QNCj4gc3VwcGx5IG1vZGlmaWVkIGtlcm5lbCBh
bmQgcmFtZGlzayBpbml0aWFsbHkuDQo+IA0KPiBSZWxhYmVsaW5nIGd1ZXN0ICYgc3R1YmRvbSBw
cmlvciB0byB1bnBhdXNpbmcgdGhlIGd1ZXN0IGVuc3VyZXMgdGhleQ0KPiBib3RoIGhhdmUgdGhl
aXIgZGVzaXJlZCBsYWJlbHMgYmVmb3JlIHRoZSBndWVzdCBpcyB1bnBhdXNlZC4gIExpa2UgeW91
DQo+IHNhaWQsIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGltcG9ydGFudCBwYXJ0IC0gYm90aCBkb21h
aW5zIGhhdmUgdGhlaXINCj4gZGVzaXJlZCBsYWJlbCBiZWZvcmUgdGhlIGd1ZXN0IHN0YXJ0cyBy
dW5uaW5nLiAgSXQncyB3aGVuIHRoZSBndWVzdA0KPiBzdGFydHMgcnVubmluZyB0aGF0IGl0IG1h
eSBoYXZlIHNlbnNpdGl2ZSBjb250ZW50cyBpbiBpdHMgbWVtb3J5Lg0KDQpNeSB0aGlua2luZywg
YXMgd2VsbC4NCg0KR29vZCBkYXksDQoNCi1TY290dCBEYXZpcw0KDQo=


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 01:37:39 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 01:37:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161803.296935 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8uz9-0006al-7N; Thu, 29 Jul 2021 01:37:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161803.296935; Thu, 29 Jul 2021 01:37:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8uz9-0006ad-1k; Thu, 29 Jul 2021 01:37:19 +0000
Received: by outflank-mailman (input) for mailman id 161803;
 Thu, 29 Jul 2021 01:37:17 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8uz7-0006aT-K9; Thu, 29 Jul 2021 01:37:17 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8uz7-0003Wj-CM; Thu, 29 Jul 2021 01:37:17 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8uz6-0007Q5-TX; Thu, 29 Jul 2021 01:37:17 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8uz6-0006Xi-Re; Thu, 29 Jul 2021 01:37:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=hJHc7vM7fcaxfG1sc7hkoPWAyGTWb8jUExX4tNTlduE=; b=P9F7mec0+0NxgoU8cLw0kq9if9
	2I7qc/VAjrAI65ymTjCIdOenM13BpzupdRDbmbfCIPxrdFctHeVzRuUs3GHwerqYys/ovAdQa7NOS
	tjyuOCAfGIa7nauqWi4VS3UUXVItaJCGSpu/+qbnP3o2MXTXDDat6+OSvcDCaulhd5gA=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164025-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164025: all pass - PUSHED
X-Osstest-Versions-This:
    ovmf=ab796d3e2ab41bde3a0bdd932cdcd09fd641e00c
X-Osstest-Versions-That:
    ovmf=147f34b56ce0e2e18285ef7d0695753ac0aa5085
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 01:37:16 +0000

flight 164025 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164025/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf                 ab796d3e2ab41bde3a0bdd932cdcd09fd641e00c
baseline version:
 ovmf                 147f34b56ce0e2e18285ef7d0695753ac0aa5085

Last test of basis   164020  2021-07-28 07:01:53 Z    0 days
Testing same since   164025  2021-07-28 16:42:25 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Heng Luo <heng.luo@intel.com>
  Zachary Clark-Williams <zachary.clark-williams@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-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
   147f34b56c..ab796d3e2a  ab796d3e2ab41bde3a0bdd932cdcd09fd641e00c -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 02:05:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 02:05:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161813.296950 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8vQf-0001e7-MX; Thu, 29 Jul 2021 02:05:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161813.296950; Thu, 29 Jul 2021 02:05:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8vQf-0001e0-JL; Thu, 29 Jul 2021 02:05:45 +0000
Received: by outflank-mailman (input) for mailman id 161813;
 Thu, 29 Jul 2021 02:05:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8vQe-0001dq-F6; Thu, 29 Jul 2021 02:05:44 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8vQe-0004OT-9Q; Thu, 29 Jul 2021 02:05:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8vQd-0000ns-VF; Thu, 29 Jul 2021 02:05:44 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8vQd-0005lc-Uh; Thu, 29 Jul 2021 02:05:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=c+ATTXyUKw78FyCht1T3CmjnSS4j40X++LsoZ4Z9sGY=; b=4QiHZq84MOCxxjsW5nj7e2buil
	5AZBimqX/5OZOL65LoakURUFb+NTJXyve9IpWMHAW8mm7LdydewyJSt5t3EHsbFEJYA6IfPL6F1fy
	8QcrdiGsvAb1GrW1WCXm23sl4dO80nzXiCmU0s/2sI7CKLLKJwpd5HivwtpJOxQycNm8=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164023-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 164023: regressions - FAIL
X-Osstest-Failures:
    linux-5.4:test-amd64-i386-xl-qemuu-ovmf-amd64:guest-saverestore:fail:regression
    linux-5.4:test-amd64-amd64-xl-qemuu-ovmf-amd64:guest-saverestore:fail:regression
    linux-5.4:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-5.4:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=253dccefb5cb05c8a017150c34daf810776d914c
X-Osstest-Versions-That:
    linux=0a0beb1f9120cf49a429e12f4ea69ddd74471d68
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 02:05:43 +0000

flight 164023 linux-5.4 real [real]
flight 164027 linux-5.4 real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164023/
http://logs.test-lab.xenproject.org/osstest/logs/164027/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 15 guest-saverestore fail REGR. vs. 163985
 test-amd64-amd64-xl-qemuu-ovmf-amd64 15 guest-saverestore fail REGR. vs. 163985

Tests which are failing intermittently (not blocking):
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail pass in 164027-retest

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163985

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 163985
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 163985
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 163985
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 163985
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 163985
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 163985
 test-armhf-armhf-xl-rtds     18 guest-start/debian.repeat    fail  like 163985
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 163985
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 163985
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 163985
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 163985
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 163985
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 linux                253dccefb5cb05c8a017150c34daf810776d914c
baseline version:
 linux                0a0beb1f9120cf49a429e12f4ea69ddd74471d68

Last test of basis   163985  2021-07-25 12:42:25 Z    3 days
Testing same since   164023  2021-07-28 11:45:03 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Aaron Brown <aaron.f.brown@intel.com>
  Alain Volmat <alain.volmat@foss.st.com>
  Aleksandr Loktionov <aleksandr.loktionov@intel.com>
  Alexander Egorenkov <egorenar@linux.ibm.com>
  Alexander Tsoy <alexander@tsoy.me>
  Amelie Delaunay <amelie.delaunay@foss.st.com>
  Anand Jain <anand.jain@oracle.com>
  Andre Przywara <andre.przywara@arm.com>
  Andrew Morton <akpm@linux-foundation.org>
  Ard Biesheuvel <ardb@kernel.org>
  Arnaldo Carvalho de Melo <acme@redhat.com>
  Axel Lin <axel.lin@ingics.com>
  Bjorn Helgaas <bhelgaas@google.com>
  Carsten Schmid <carsten_schmid@mentor.com>
  Casey Chen <cachen@purestorage.com>
  Charles Baylis <cb-kernel@fishzet.co.uk>
  Christoph Hellwig <hch@lst.de>
  Christophe JAILLET <christophe.jaillet@wanadoo.fr>
  Clark Wang <xiaoning.wang@nxp.com>
  Colin Ian King <colin.king@canonical.com>
  Daniel Borkmann <daniel@iogearbox.net>
  Daniel Vetter <daniel.vetter@ffwll.ch>
  David Howells <dhowells@redhat.com>
  David S. Miller <davem@davemloft.net>
  David Sterba <dsterba@suse.com>
  Dmitry Bogdanov <d.bogdanov@yadro.com>
  Doug Berger <opendmb@gmail.com>
  Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
  Eric Dumazet <edumazet@google.com>
  Evan Quan <evan.quan@amd.com>
  Florian Fainelli <f.fainelli@gmail.com>
  Frank Wunderlich <frank-w@public-files.de>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guangbin Huang <huangguangbin2@huawei.com>
  Guenter Roeck <linux@roeck-us.net>
  Gustavo A. R. Silva <gustavoars@kernel.org>
  Hangbin Liu <liuhangbin@gmail.com>
  Haoran Luo <www@aegistudio.net>
  Heiko Carstens <hca@linux.ibm.com>
  Heiner Kallweit <hkallweit1@gmail.com>
  Huang Pei <huangpei@loongson.cn>
  Hugh Dickins <hughd@google.com>
  Ian Ray <ian.ray@ge.com>
  Ilya Dryomov <idryomov@gmail.com>
  Ilya Leoshkevich <iii@linux.ibm.com>
  Jakub Fišer <jakub@ufiseru.cz>
  Jakub Kicinski <kuba@kernel.org>
  Jedrzej Jagielski <jedrzej.jagielski@intel.com>
  Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  Jian Shen <shenjian15@huawei.com>
  Johan Hovold <johan@kernel.org>
  John Fastabend <john.fastabend@gmail.com>
  John Keeping <john@metanate.com>
  Jon Hunter <jonathanh@nvidia.com>
  Jonathan Cameron <Jonathan.Cameron@huawei.com>
  Julian Sikorski <belegdol+github@gmail.com>
  Julian Sikorski <belegdol@gmail.com>
  Linus Torvalds <torvalds@linux-foundation.org>
  Linus Walleij <linus.walleij@linaro.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Lokesh Gidra <lokeshgidra@google.com>
  Marc Zyngier <maz@kernel.org>
  Marcelo Henrique Cerri <marcelo.cerri@canonical.com>
  Marco De Marco <marco.demarco@posteo.net>
  Marek Behún <kabel@kernel.org>
  Marek Vasut <marex@denx.de>
  Mark Brown <broonie@kernel.org>
  Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
  Markus Boehme <markubo@amazon.com>
  Martin K. Petersen <martin.petersen@oracle.com>
  Mathias Nyman <mathias.nyman@linux.intel.com>
  Maxim Schwalm <maxim.schwalm@gmail.com>
  Maxime Ripard <maxime@cerno.tech>
  Michael Chan <michael.chan@broadcom.com>
  Michael Ellerman <mpe@ellerman.id.au>
  Michael Neuling <mikey@neuling.org>
  Michal Suchanek <msuchanek@suse.de>
  Mike Christie <michael.christie@oracle.com>
  Mike Kravetz <mike.kravetz@oracle.com>
  Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
  Moritz Fischer <mdf@kernel.org>
  Namhyung Kim <namhyung@kernel.org>
  Nguyen Dinh Phi <phind.uet@gmail.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nicolas Dichtel <nicolas.dichtel@6wind.com>
  Paolo Abeni <pabeni@redhat.com>
  Pavel Skripkin <paskripkin@gmail.com>
  Peilin Ye <peilin.ye@bytedance.com>
  Peter Collingbourne <pcc@google.com>
  Peter Hess <peter.hess@ph-home.de>
  Peter Ujfalusi <peter.ujfalusi@ti.com>
  Raju Rangoju <rajur@chelsio.com>
  Randy Dunlap <rdunlap@infradead.org>
  Riccardo Mancini <rickyman7@gmail.com>
  Robin Geuze <robin.geuze@nl.team.blue>
  Roman Gushchin <guro@fb.com>
  Sasha Levin <sashal@kernel.org>
  Sasha Neftin <sasha.neftin@intel.com>
  Sayanta Pattanayak <sayanta.pattanayak@arm.com>
  Sebastian Reichel <sebastian.reichel@collabora.com>
  Shahjada Abul Husain <shahjada@chelsio.com>
  Shuah Khan <skhan@linuxfoundation.org>
  Somnath Kotur <somnath.kotur@broadcom.com>
  Stephan Gerhold <stephan@gerhold.net>
  Steven Rostedt (VMware) <rostedt@goodmis.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Sudip Mukherjee <sudipm.mukherjee@gmail.com>
  Takashi Iwai <tiwai@suse.de>
  Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
  Thierry Reding <thierry.reding@gmail.com>
  Tobias Klauser <tklauser@distanz.ch>
  Tom Rix <trix@redhat.com>
  Tony Brelinski <tonyx.brelinski@intel.com>
  Tony Nguyen <anthony.l.nguyen@intel.com>
  Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
  Vasily Gorbik <gor@linux.ibm.com>
  Vasundhara Volam <vasundhara-v.volam@broadcom.com>
  Vincent Palatin <vpalatin@chromium.org>
  Vinicius Costa Gomes <vinicius.gomes@intel.com>
  Wei Wang <weiwan@google.com>
  Xin Long <lucien.xin@gmail.com>
  Yajun Deng <yajun.deng@linux.dev>
  Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
  Zhihao Cheng <chengzhihao1@huawei.com>
  Ziyang Xuan <william.xuanziyang@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 3085 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 05:36:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 05:36:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161823.296968 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8yiU-0003C1-Rj; Thu, 29 Jul 2021 05:36:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161823.296968; Thu, 29 Jul 2021 05:36:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8yiU-0003Bu-NW; Thu, 29 Jul 2021 05:36:22 +0000
Received: by outflank-mailman (input) for mailman id 161823;
 Thu, 29 Jul 2021 05:36:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8yiT-0003Bk-Hy; Thu, 29 Jul 2021 05:36:21 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8yiT-0007xJ-As; Thu, 29 Jul 2021 05:36:21 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8yiT-0001Su-23; Thu, 29 Jul 2021 05:36:21 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8yiT-000505-1J; Thu, 29 Jul 2021 05:36:21 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LpicUWUZeRzh2S8ngwTyTCdE0W5af3s/YFbmsx3zxok=; b=F1/hPi/LwW9Nae4QtbNsce9ekD
	4ZcG6MDnNiQnl5rp8dA9y9AScMins5G8Dm+bXCGQF3vpPYe6hvzzQHE4T8GVZtMP0gCDkDLPkMefs
	Zp2l8C7S9vzv2GNvanuF5tdve3+G9kgCzWzU7XPuRAEWqIKInKNl++MbQmKcmQLS5Xbk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164024-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164024: regressions - FAIL
X-Osstest-Failures:
    qemu-mainline:test-amd64-i386-xl-qemuu-ovmf-amd64:guest-saverestore:fail:regression
    qemu-mainline:test-amd64-amd64-xl-qemuu-ovmf-amd64:debian-hvm-install:fail:regression
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=69ea12b19a15ae006521cd5cc0f627f27f738746
X-Osstest-Versions-That:
    qemuu=f2da205cb4142259d9bc6b9d4596ebbe2426fe49
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 05:36:21 +0000

flight 164024 qemu-mainline real [real]
flight 164033 qemu-mainline real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164024/
http://logs.test-lab.xenproject.org/osstest/logs/164033/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-ovmf-amd64 15 guest-saverestore fail REGR. vs. 164014
 test-amd64-amd64-xl-qemuu-ovmf-amd64 12 debian-hvm-install fail REGR. vs. 164014

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 164014

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10       fail  like 164014
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164014
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164014
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164014
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164014
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164014
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164014
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164014
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                69ea12b19a15ae006521cd5cc0f627f27f738746
baseline version:
 qemuu                f2da205cb4142259d9bc6b9d4596ebbe2426fe49

Last test of basis   164014  2021-07-27 19:39:08 Z    1 days
Testing same since   164024  2021-07-28 15:07:58 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Markus Armbruster <armbru@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         fail    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 69ea12b19a15ae006521cd5cc0f627f27f738746
Merge: f2da205cb4 3e61a13af3
Author: Peter Maydell <peter.maydell@linaro.org>
Date:   Wed Jul 28 13:32:12 2021 +0100

    Merge remote-tracking branch 'remotes/armbru/tags/pull-misc-2021-07-27' into staging
    
    Miscellaneous patches for 2021-07-27
    
    # gpg: Signature made Tue 27 Jul 2021 16:19:35 BST
    # gpg:                using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653
    # gpg:                issuer "armbru@redhat.com"
    # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full]
    # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>" [full]
    # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653
    
    * remotes/armbru/tags/pull-misc-2021-07-27:
      vl: Don't continue after -smp help.
    
    Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

commit 3e61a13af3d3a1942a1ec2f6dfd7b407a43e4273
Author: Markus Armbruster <armbru@redhat.com>
Date:   Tue Jul 20 14:54:08 2021 +0200

    vl: Don't continue after -smp help.
    
    We continue after -smp help:
    
        $ qemu-system-x86_64 -smp help -display none -monitor stdio
        smp-opts options:
          cores=<num>
          cpus=<num>
          dies=<num>
          maxcpus=<num>
          sockets=<num>
          threads=<num>
        QEMU 6.0.50 monitor - type 'help' for more information
        (qemu)
    
    Other options, such as -object help and -device help, don't.
    
    Adjust -smp not to continue either.
    
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Markus Armbruster <armbru@redhat.com>
    Message-Id: <20210720125408.387910-17-armbru@redhat.com>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
    Reviewed-by: Pankaj Gupta <pankaj.gupta@ionos.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 06:27:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 06:27:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161836.296992 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8zVt-000832-1X; Thu, 29 Jul 2021 06:27:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161836.296992; Thu, 29 Jul 2021 06:27:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m8zVs-00082v-Uj; Thu, 29 Jul 2021 06:27:24 +0000
Received: by outflank-mailman (input) for mailman id 161836;
 Thu, 29 Jul 2021 06:27:23 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8zVr-00082V-3h; Thu, 29 Jul 2021 06:27:23 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8zVq-0000K4-T9; Thu, 29 Jul 2021 06:27:22 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m8zVq-000363-Ku; Thu, 29 Jul 2021 06:27:22 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m8zVq-00089f-KJ; Thu, 29 Jul 2021 06:27:22 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=mXHzp2Aoy9anWEGFwnq2piW41MfpGwZEFOJN9BwM3x0=; b=JGVzl+LwGmXIGohftGYW251tKe
	ssEAIFpmD0E+l5THXDx+JfvGU36Mvv0fr3TBFnMzbaGdSE1q7vqylHyp8hsY2xuuhAW79SAfrz5Iq
	a0IKTdGXp74iuELTFa/D8aVPlTvJDzWiGuKuOt1tvGMISfmHEhN7om9P6O715ifxXNi0=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164028-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164028: all pass - PUSHED
X-Osstest-Versions-This:
    ovmf=dc485c556d5f5db21debe8de3a45a7564aacbe24
X-Osstest-Versions-That:
    ovmf=ab796d3e2ab41bde3a0bdd932cdcd09fd641e00c
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 06:27:22 +0000

flight 164028 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164028/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf                 dc485c556d5f5db21debe8de3a45a7564aacbe24
baseline version:
 ovmf                 ab796d3e2ab41bde3a0bdd932cdcd09fd641e00c

Last test of basis   164025  2021-07-28 16:42:25 Z    0 days
Testing same since   164028  2021-07-29 01:40:11 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Ard Biesheuvel <ardb+tianocore@kernel.org>
  Brijesh Singh <brijesh.singh@amd.com>
  Brijesh Singh via groups.io <brijesh.singh=amd.com@groups.io>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-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
   ab796d3e2a..dc485c556d  dc485c556d5f5db21debe8de3a45a7564aacbe24 -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 09:34:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 09:34:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161855.297025 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92R0-00088J-9I; Thu, 29 Jul 2021 09:34:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161855.297025; Thu, 29 Jul 2021 09:34:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92R0-00088C-5v; Thu, 29 Jul 2021 09:34:34 +0000
Received: by outflank-mailman (input) for mailman id 161855;
 Thu, 29 Jul 2021 09:34:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wMqg=MV=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m92Qz-00087m-6n
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 09:34:33 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 5c09e1f5-2ae8-4ebd-8d72-1d884e906c4a;
 Thu, 29 Jul 2021 09:34:30 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 176281FB;
 Thu, 29 Jul 2021 02:34:30 -0700 (PDT)
Received: from [10.57.11.94] (unknown [10.57.11.94])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EA5073F73D;
 Thu, 29 Jul 2021 02:34:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5c09e1f5-2ae8-4ebd-8d72-1d884e906c4a
Subject: Re: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with
 vreg_emulate_{sysreg/cp}
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210727095010.11103-1-michal.orzel@arm.com>
 <57e5bc75-052a-1530-e983-4e52d1527861@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <fb35b5b6-96b7-7677-5ad0-9b2cd00dcca6@arm.com>
Date: Thu, 29 Jul 2021 11:34:24 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <57e5bc75-052a-1530-e983-4e52d1527861@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

Hi Julien,

On 28.07.2021 16:59, Julien Grall wrote:
> Hi Michal,
> 
> On 27/07/2021 10:50, Michal Orzel wrote:
>> According to ARMv8A architecture, AArch64 registers
>> are 64bit wide even though in many cases the upper
>> 32bit is reserved. Therefore there is no need for
>> function vreg_emulate_sysreg32 on arm64.
>>
>> Ideally on arm64 there should be only one function
>> vreg_emulate_sysreg(using register_t) or
>> vreg_emulate_sysreg64(using uint64_t) but in the Xen code
>> there is a lot of functions passed both to the
>> vreg_emulate_cp* and vreg_emulate_sysreg*.
>> This would require to duplicate them which is not
>> a good solution.
> 
> I think you can drop vreg_emulate_sysreg64() completely. On arm64, register_t is an alias to uint64_t so you could interchangeably use the type in the callback.
> 
Yes, you are right.
> For arm32, we would still need to keep vreg_emulate_cp64.
> 
>>
>> The easiest/minimal solution to fix this issue is
>> to replace vreg_emulate_{sysreg/cp}32 with
>> vreg_emulate_{sysreg/cp}. The modifed functions
>> are now taking function pointer:
>> -typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>>                                register_t *r, bool read);
>> instead of:
>> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs,
>>                                  uint32_t *r, bool read);
>>
>> This change allows to properly use 64bit registers on arm64
>> and in case of 32bit guest the cast is done by the hardware
>> due to the 32bit registers being the lower part of 64bit ones.
> 
> The HW doesn't do any cast. From the Arm Arm (D1.19.1 in ARM DDI 0487F.c):
> 
> "Any modifications made to AArch32 System registers affects only those parts of those AArch64 registers that are
> mapped to the AArch32 System registers. Bits[63:32] of AArch64 registers, where they are not mapped to AArch32
> registers, are unchanged by AArch32 state execution."
> 
> The registers can be set by:
>   * The toolstack (via XEN_DOMCTL_set_vcpucontext). We rely on the top bits to always be 0. Ideally, we should 0 it in vcpu_regs_user_to_hyp() just for safety.
>   * The PSCI CPU ON call: They should always be 0.
> 
> For the rest of Xen, we expect that the top 32-bit will either be untouched or never be changed.
> 
>>
>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
>> ---
>> The reason for this change is to clean up the mess related to types.
>> This patch achieves that but it does not reduce the code size.
>> I'm not sure whether we want such change hence it is pushed as RFC.
>> ---
>>   xen/arch/arm/vcpreg.c      | 16 +++++++++++-----
>>   xen/arch/arm/vtimer.c      | 18 +++++++++---------
>>   xen/include/asm-arm/vreg.h | 14 +++++++-------
>>   3 files changed, 27 insertions(+), 21 deletions(-)
>>
>> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
>> index e3ce56d875..376a1ceee2 100644
>> --- a/xen/arch/arm/vcpreg.c
>> +++ b/xen/arch/arm/vcpreg.c
>> @@ -57,9 +57,12 @@
>>   #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
>>   #endif
>>   +#define type32_t register_t
>> +#define type64_t uint64_t
> 
> Please use typedef rather than define for type. Also, please add a comment explaining why type32_t is defined as register_t.
> 
>> +
>>   /* The name is passed from the upper macro to workaround macro expansion. */
>>   #define TVM_REG(sz, func, reg...)                                           \
>> -static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>> +static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool read)    \
>>   {                                                                           \
>>       struct vcpu *v = current;                                               \
>>       bool cache_enabled = vcpu_has_cache_enabled(v);                         \
>> @@ -83,7 +86,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>>     #else /* CONFIG_ARM_64 */
>>   #define TVM_REG32_COMBINED(lowreg, hireg, xreg)                             \
>> -static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
>> +static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, register_t *r,  \
>>                                   bool read, bool hi)                         \
>>   {                                                                           \
>>       struct vcpu *v = current;                                               \
>> @@ -108,13 +111,13 @@ static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
>>       return true;                                                            \
>>   }                                                                           \
>>                                                                               \
>> -static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, uint32_t *r,  \
>> +static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, register_t *r,\
>>                                     bool read)                                \
>>   {                                                                           \
>>       return vreg_emulate_##xreg(regs, r, read, false);                       \
>>   }                                                                           \
>>                                                                               \
>> -static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t *r,   \
>> +static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, register_t *r, \
>>                                    bool read)                                 \
>>   {                                                                           \
>>       return vreg_emulate_##xreg(regs, r, read, true);                        \
>> @@ -154,13 +157,16 @@ TVM_REG32_COMBINED(MAIR0, MAIR1, MAIR_EL1)
>>   TVM_REG32_COMBINED(AMAIR0, AMAIR1, AMAIR_EL1)
>>   TVM_REG32(CONTEXTIDR, CONTEXTIDR_EL1)
>>   +#define VREG_EMULATE_CP32(regs, hsr, fn)  vreg_emulate_cp(regs, hsr, fn)
>> +#define VREG_EMULATE_CP64(regs, hsr, fn)  vreg_emulate_cp64(regs, hsr, fn)
>> +
>>   /* Macro to generate easily case for co-processor emulation. */
>>   #define GENERATE_CASE(reg, sz)                                      \
>>       case HSR_CPREG##sz(reg):                                        \
>>       {                                                               \
>>           bool res;                                                   \
>>                                                                       \
>> -        res = vreg_emulate_cp##sz(regs, hsr, vreg_emulate_##reg);   \
>> +        res = VREG_EMULATE_CP##sz(regs, hsr, vreg_emulate_##reg);   \
>>           ASSERT(res);                                                \
>>           break;                                                      \
>>       }
>> diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
>> index 167fc6127a..17b5649a05 100644
>> --- a/xen/arch/arm/vtimer.c
>> +++ b/xen/arch/arm/vtimer.c
>> @@ -162,7 +162,7 @@ void virt_timer_restore(struct vcpu *v)
>>       WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
>>   }
>>   -static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>> +static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t *r, bool read)
>>   {
>>       struct vcpu *v = current;
>>       s_time_t expires;
>> @@ -176,7 +176,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>>       }
>>       else
>>       {
>> -        uint32_t ctl = *r & ~CNTx_CTL_PENDING;
>> +        register_t ctl = *r & ~CNTx_CTL_PENDING;
> You will still end up to mask the top 32-bit because CTx_CTL_PENDING is an unsigned 32-bit. I think we should not touch them top 32-bit at all so CNTx_CTL_PENDING (and probably CNT_x_CTL_ENABLE) should be defined as 1UL << X.
>
Ok I will not modify the timer functions apart from changing the argument's type.
I will modify CNTx_CTL_PENDING and CNT_x_CTL_ENABLE to be ul.
>>           if ( ctl & CNTx_CTL_ENABLE )
>>               ctl |= v->arch.phys_timer.ctl & CNTx_CTL_PENDING;
>>           v->arch.phys_timer.ctl = ctl;
>> @@ -197,7 +197,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>>       return true;
>>   }
>>   -static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
>> +static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
>>                                bool read)
>>   {
>>       struct vcpu *v = current;
>> @@ -211,11 +211,11 @@ static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
>>         if ( read )
>>       {
>> -        *r = (uint32_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
>> +        *r = (register_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
> 
> This is computing the TimerVal is held in the first 32-bit of the registers. So I think this should stick to (uint32_t) here.
> 
>>       }
>>       else
>>       {
>> -        v->arch.phys_timer.cval = cntpct + (uint64_t)(int32_t)*r;
>> +        v->arch.phys_timer.cval = cntpct + (uint64_t)(register_t)*r;
> 
> This is not quite the same as before. We were using the first 32-bit as a signed value. Now, you are using the full register as a unsigned value.
> 
>>           if ( v->arch.phys_timer.ctl & CNTx_CTL_ENABLE )
>>           {
>>               v->arch.phys_timer.ctl &= ~CNTx_CTL_PENDING;
>> @@ -274,10 +274,10 @@ static bool vtimer_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr)
>>       switch ( hsr.bits & HSR_CP32_REGS_MASK )
>>       {
>>       case HSR_CPREG32(CNTP_CTL):
>> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_ctl);
>> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_ctl);
>>         case HSR_CPREG32(CNTP_TVAL):
>> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_tval);
>> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_tval);
>>         default:
>>           return false;
>> @@ -316,9 +316,9 @@ static bool vtimer_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr)
>>       switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
>>       {
>>       case HSR_SYSREG_CNTP_CTL_EL0:
>> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
>> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
>>       case HSR_SYSREG_CNTP_TVAL_EL0:
>> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
>> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
>>       case HSR_SYSREG_CNTP_CVAL_EL0:
>>           return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
>>   diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
>> index 1253753833..cef55aabea 100644
>> --- a/xen/include/asm-arm/vreg.h
>> +++ b/xen/include/asm-arm/vreg.h
>> @@ -4,13 +4,13 @@
>>   #ifndef __ASM_ARM_VREG__
>>   #define __ASM_ARM_VREG__
>>   -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
>> +typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
>>                                      bool read);
>>   typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t *r,
>>                                      bool read);
>>   -static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
>> -                                     vreg_reg32_fn_t fn)
>> +static inline bool vreg_emulate_cp(struct cpu_user_regs *regs, union hsr hsr,
>> +                                     vreg_reg_fn_t fn)
> 
> The new name will add some confusion because now we have vreg_emulate_cp() (for 32-bit access) and vreg_emulate_c64() (for 64-bit access).
> 
> So I would rather keep the current naming.
> 
We can do like that:
-on arm32 there will be vreg_emulate_cp32 with register_t and vreg_emulate_cp64.
-on arm64 there will be only vreg_emulate_sysreg with register_t.
Does it sound ok or do you want to drop this change completely?
If it is ok I will push v2 without RFC tag. 
>>   {
>>       struct hsr_cp32 cp32 = hsr.cp32;
>>       /*
>> @@ -18,7 +18,7 @@ static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
>>        * implementation error in the emulation (such as not correctly
>>        * setting r).
>>        */
>> -    uint32_t r = 0;
>> +    register_t r = 0;
>>       bool ret;
>>         if ( !cp32.read )
>> @@ -64,11 +64,11 @@ static inline bool vreg_emulate_cp64(struct cpu_user_regs *regs, union hsr hsr,
>>   }
>>     #ifdef CONFIG_ARM_64
>> -static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, union hsr hsr,
>> -                                         vreg_reg32_fn_t fn)
>> +static inline bool vreg_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr,
>> +                                         vreg_reg_fn_t fn)
>>   {
>>       struct hsr_sysreg sysreg = hsr.sysreg;
>> -    uint32_t r = 0;
>> +    register_t r = 0;
>>       bool ret;
>>         if ( !sysreg.read )
>>
> 
> Cheers,
> 


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 09:34:45 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 09:34:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161854.297013 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92Qs-0007qV-1d; Thu, 29 Jul 2021 09:34:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161854.297013; Thu, 29 Jul 2021 09:34:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92Qr-0007qO-Ug; Thu, 29 Jul 2021 09:34:25 +0000
Received: by outflank-mailman (input) for mailman id 161854;
 Thu, 29 Jul 2021 09:34:24 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m92Qq-0007qI-RJ
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 09:34:24 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m92Qp-0003VB-La; Thu, 29 Jul 2021 09:34:23 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m92Qp-0005S5-CW; Thu, 29 Jul 2021 09:34:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Message-Id:Date:Subject:Cc:To:From;
	bh=yiOsLu1k2NmHXYMw3AZjFVxhirU3QZVP5YSP964RDHM=; b=AAOVAfERjVSvX9C7PFnyfeaNip
	A+BW0nD6svUm174HneVe1t1I0sgYPVvab8+rKmengs8+1XyuqAzAL2dNtUxMcAVvp+IcOihxiCC/P
	9c/+qZrJ3GZDmDDqZ11yFtCOR1Yej5yXVyByZftmA6746KCj3E7oWJR4wT2KdUeFbADk=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH] tools/xenstored: Fix off-by-one in dump_state_nodes()
Date: Thu, 29 Jul 2021 10:34:20 +0100
Message-Id: <20210729093420.14092-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1

From: Julien Grall <jgrall@amazon.com>

The maximum path length supported by Xenstored protocol is
XENSTORE_ABS_PATH_MAX (i.e 3072). This doesn't take into account the
NUL at the end of the path.

However, the code to dump the nodes will allocate a buffer
of XENSTORE_ABS_PATH. As a result it may not be possible to live-update
if there is a node name of XENSTORE_ABS_PATH.

Fix it by allocating a buffer of XENSTORE_ABS_PATH_MAX + 1 characters.

Take the opportunity to pass the max length of the buffer as a
parameter of dump_state_node_tree(). This will be clearer that the
check in the function is linked to the allocation in dump_state_nodes().

Signed-off-by: Julien Grall <jgrall@amazon.com>

---

This was spotted when backporting Live-Update to 4.11 because the
commit 924bf8c793 "tools/xenstore: rework path length check" is
not present. On the latest upstream, this is looks more a latent bug
because I didn't manage to create such large node.

(4.11)

42sh# xenstore-write $(python -c "print('/' + 'A' * 3071)") ""
42sh# xenstore-control live-update /usr/local/sbin/xenstored
Starting live update failed:
Dump node path length error
---
 tools/xenstore/xenstored_core.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index 16c856730c55..0d4c73d6e20c 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -2574,7 +2574,8 @@ const char *dump_state_node_perms(FILE *fp, const struct xs_permissions *perms,
 	return NULL;
 }
 
-static const char *dump_state_node_tree(FILE *fp, char *path)
+static const char *dump_state_node_tree(FILE *fp, char *path,
+					unsigned int path_max_len)
 {
 	unsigned int pathlen, childlen, p = 0;
 	struct xs_state_record_header head;
@@ -2642,10 +2643,10 @@ static const char *dump_state_node_tree(FILE *fp, char *path)
 	}
 	while (p < hdr->childlen) {
 		childlen = strlen(child) + 1;
-		if (pathlen + childlen > XENSTORE_ABS_PATH_MAX)
+		if (pathlen + childlen > path_max_len)
 			return "Dump node path length error";
 		strcpy(path + pathlen, child);
-		ret = dump_state_node_tree(fp, path);
+		ret = dump_state_node_tree(fp, path, path_max_len);
 		if (ret)
 			return ret;
 		p += childlen;
@@ -2661,13 +2662,13 @@ const char *dump_state_nodes(FILE *fp, const void *ctx)
 {
 	char *path;
 
-	path = talloc_size(ctx, XENSTORE_ABS_PATH_MAX);
+	path = talloc_size(ctx, XENSTORE_ABS_PATH_MAX + 1);
 	if (!path)
 		return "Path buffer allocation error";
 
 	strcpy(path, "/");
 
-	return dump_state_node_tree(fp, path);
+	return dump_state_node_tree(fp, path, XENSTORE_ABS_PATH_MAX + 1);
 }
 
 void read_state_global(const void *ctx, const void *state)
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 09:41:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 09:41:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161868.297037 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92Xb-0001Qn-0i; Thu, 29 Jul 2021 09:41:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161868.297037; Thu, 29 Jul 2021 09:41:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92Xa-0001Qg-TS; Thu, 29 Jul 2021 09:41:22 +0000
Received: by outflank-mailman (input) for mailman id 161868;
 Thu, 29 Jul 2021 09:41:21 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m92XZ-0001Qa-Ae
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 09:41:21 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m92XY-0003c9-1X; Thu, 29 Jul 2021 09:41:20 +0000
Received: from 54-240-197-232.amazon.com ([54.240.197.232]
 helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m92XX-00065k-Np; Thu, 29 Jul 2021 09:41:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=Q50/GiUtc6GnMNb8ChBgVPHn3+xq6hlSNkiQo7MwKs0=; b=xee0sMom+vfrmLhN2UjWjtZqc6
	8ZQH8vNTP8KZ2wckOm8qV6SsXLMi8h++Xhmlw6Zl2qJ4jdql2bB77KCPPYSI7aNmDyhFiB/2ehQq7
	114qc877F/5DvSaphivWB0eyTMKDk99xxCHwZTIongAYEzYKk2TAKnQvcfQOeqAgR9kw=;
Subject: Re: [RFC PATCH] xen/arm: Replace vreg_emulate_{sysreg/cp}32 with
 vreg_emulate_{sysreg/cp}
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210727095010.11103-1-michal.orzel@arm.com>
 <57e5bc75-052a-1530-e983-4e52d1527861@xen.org>
 <fb35b5b6-96b7-7677-5ad0-9b2cd00dcca6@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <62b30599-4975-07fd-fdbb-43b937b6b17b@xen.org>
Date: Thu, 29 Jul 2021 10:41:17 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <fb35b5b6-96b7-7677-5ad0-9b2cd00dcca6@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

On 29/07/2021 10:34, Michal Orzel wrote:
> Hi Julien,

Hi Michal,

> On 28.07.2021 16:59, Julien Grall wrote:
>> Hi Michal,
>>
>> On 27/07/2021 10:50, Michal Orzel wrote:
>>> According to ARMv8A architecture, AArch64 registers
>>> are 64bit wide even though in many cases the upper
>>> 32bit is reserved. Therefore there is no need for
>>> function vreg_emulate_sysreg32 on arm64.
>>>
>>> Ideally on arm64 there should be only one function
>>> vreg_emulate_sysreg(using register_t) or
>>> vreg_emulate_sysreg64(using uint64_t) but in the Xen code
>>> there is a lot of functions passed both to the
>>> vreg_emulate_cp* and vreg_emulate_sysreg*.
>>> This would require to duplicate them which is not
>>> a good solution.
>>
>> I think you can drop vreg_emulate_sysreg64() completely. On arm64, register_t is an alias to uint64_t so you could interchangeably use the type in the callback.
>>
> Yes, you are right.
>> For arm32, we would still need to keep vreg_emulate_cp64.
>>
>>>
>>> The easiest/minimal solution to fix this issue is
>>> to replace vreg_emulate_{sysreg/cp}32 with
>>> vreg_emulate_{sysreg/cp}. The modifed functions
>>> are now taking function pointer:
>>> -typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>>>                                 register_t *r, bool read);
>>> instead of:
>>> -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs,
>>>                                   uint32_t *r, bool read);
>>>
>>> This change allows to properly use 64bit registers on arm64
>>> and in case of 32bit guest the cast is done by the hardware
>>> due to the 32bit registers being the lower part of 64bit ones.
>>
>> The HW doesn't do any cast. From the Arm Arm (D1.19.1 in ARM DDI 0487F.c):
>>
>> "Any modifications made to AArch32 System registers affects only those parts of those AArch64 registers that are
>> mapped to the AArch32 System registers. Bits[63:32] of AArch64 registers, where they are not mapped to AArch32
>> registers, are unchanged by AArch32 state execution."
>>
>> The registers can be set by:
>>    * The toolstack (via XEN_DOMCTL_set_vcpucontext). We rely on the top bits to always be 0. Ideally, we should 0 it in vcpu_regs_user_to_hyp() just for safety.
>>    * The PSCI CPU ON call: They should always be 0.
>>
>> For the rest of Xen, we expect that the top 32-bit will either be untouched or never be changed.
>>
>>>
>>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
>>> ---
>>> The reason for this change is to clean up the mess related to types.
>>> This patch achieves that but it does not reduce the code size.
>>> I'm not sure whether we want such change hence it is pushed as RFC.
>>> ---
>>>    xen/arch/arm/vcpreg.c      | 16 +++++++++++-----
>>>    xen/arch/arm/vtimer.c      | 18 +++++++++---------
>>>    xen/include/asm-arm/vreg.h | 14 +++++++-------
>>>    3 files changed, 27 insertions(+), 21 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
>>> index e3ce56d875..376a1ceee2 100644
>>> --- a/xen/arch/arm/vcpreg.c
>>> +++ b/xen/arch/arm/vcpreg.c
>>> @@ -57,9 +57,12 @@
>>>    #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
>>>    #endif
>>>    +#define type32_t register_t
>>> +#define type64_t uint64_t
>>
>> Please use typedef rather than define for type. Also, please add a comment explaining why type32_t is defined as register_t.
>>
>>> +
>>>    /* The name is passed from the upper macro to workaround macro expansion. */
>>>    #define TVM_REG(sz, func, reg...)                                           \
>>> -static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>>> +static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool read)    \
>>>    {                                                                           \
>>>        struct vcpu *v = current;                                               \
>>>        bool cache_enabled = vcpu_has_cache_enabled(v);                         \
>>> @@ -83,7 +86,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
>>>      #else /* CONFIG_ARM_64 */
>>>    #define TVM_REG32_COMBINED(lowreg, hireg, xreg)                             \
>>> -static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
>>> +static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, register_t *r,  \
>>>                                    bool read, bool hi)                         \
>>>    {                                                                           \
>>>        struct vcpu *v = current;                                               \
>>> @@ -108,13 +111,13 @@ static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
>>>        return true;                                                            \
>>>    }                                                                           \
>>>                                                                                \
>>> -static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, uint32_t *r,  \
>>> +static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, register_t *r,\
>>>                                      bool read)                                \
>>>    {                                                                           \
>>>        return vreg_emulate_##xreg(regs, r, read, false);                       \
>>>    }                                                                           \
>>>                                                                                \
>>> -static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t *r,   \
>>> +static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, register_t *r, \
>>>                                     bool read)                                 \
>>>    {                                                                           \
>>>        return vreg_emulate_##xreg(regs, r, read, true);                        \
>>> @@ -154,13 +157,16 @@ TVM_REG32_COMBINED(MAIR0, MAIR1, MAIR_EL1)
>>>    TVM_REG32_COMBINED(AMAIR0, AMAIR1, AMAIR_EL1)
>>>    TVM_REG32(CONTEXTIDR, CONTEXTIDR_EL1)
>>>    +#define VREG_EMULATE_CP32(regs, hsr, fn)  vreg_emulate_cp(regs, hsr, fn)
>>> +#define VREG_EMULATE_CP64(regs, hsr, fn)  vreg_emulate_cp64(regs, hsr, fn)
>>> +
>>>    /* Macro to generate easily case for co-processor emulation. */
>>>    #define GENERATE_CASE(reg, sz)                                      \
>>>        case HSR_CPREG##sz(reg):                                        \
>>>        {                                                               \
>>>            bool res;                                                   \
>>>                                                                        \
>>> -        res = vreg_emulate_cp##sz(regs, hsr, vreg_emulate_##reg);   \
>>> +        res = VREG_EMULATE_CP##sz(regs, hsr, vreg_emulate_##reg);   \
>>>            ASSERT(res);                                                \
>>>            break;                                                      \
>>>        }
>>> diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
>>> index 167fc6127a..17b5649a05 100644
>>> --- a/xen/arch/arm/vtimer.c
>>> +++ b/xen/arch/arm/vtimer.c
>>> @@ -162,7 +162,7 @@ void virt_timer_restore(struct vcpu *v)
>>>        WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
>>>    }
>>>    -static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>>> +static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t *r, bool read)
>>>    {
>>>        struct vcpu *v = current;
>>>        s_time_t expires;
>>> @@ -176,7 +176,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>>>        }
>>>        else
>>>        {
>>> -        uint32_t ctl = *r & ~CNTx_CTL_PENDING;
>>> +        register_t ctl = *r & ~CNTx_CTL_PENDING;
>> You will still end up to mask the top 32-bit because CTx_CTL_PENDING is an unsigned 32-bit. I think we should not touch them top 32-bit at all so CNTx_CTL_PENDING (and probably CNT_x_CTL_ENABLE) should be defined as 1UL << X.
>>
> Ok I will not modify the timer functions apart from changing the argument's type.
> I will modify CNTx_CTL_PENDING and CNT_x_CTL_ENABLE to be ul.
>>>            if ( ctl & CNTx_CTL_ENABLE )
>>>                ctl |= v->arch.phys_timer.ctl & CNTx_CTL_PENDING;
>>>            v->arch.phys_timer.ctl = ctl;
>>> @@ -197,7 +197,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
>>>        return true;
>>>    }
>>>    -static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
>>> +static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
>>>                                 bool read)
>>>    {
>>>        struct vcpu *v = current;
>>> @@ -211,11 +211,11 @@ static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
>>>          if ( read )
>>>        {
>>> -        *r = (uint32_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
>>> +        *r = (register_t)((v->arch.phys_timer.cval - cntpct) & 0xffffffffull);
>>
>> This is computing the TimerVal is held in the first 32-bit of the registers. So I think this should stick to (uint32_t) here.
>>
>>>        }
>>>        else
>>>        {
>>> -        v->arch.phys_timer.cval = cntpct + (uint64_t)(int32_t)*r;
>>> +        v->arch.phys_timer.cval = cntpct + (uint64_t)(register_t)*r;
>>
>> This is not quite the same as before. We were using the first 32-bit as a signed value. Now, you are using the full register as a unsigned value.
>>
>>>            if ( v->arch.phys_timer.ctl & CNTx_CTL_ENABLE )
>>>            {
>>>                v->arch.phys_timer.ctl &= ~CNTx_CTL_PENDING;
>>> @@ -274,10 +274,10 @@ static bool vtimer_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr)
>>>        switch ( hsr.bits & HSR_CP32_REGS_MASK )
>>>        {
>>>        case HSR_CPREG32(CNTP_CTL):
>>> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_ctl);
>>> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_ctl);
>>>          case HSR_CPREG32(CNTP_TVAL):
>>> -        return vreg_emulate_cp32(regs, hsr, vtimer_cntp_tval);
>>> +        return vreg_emulate_cp(regs, hsr, vtimer_cntp_tval);
>>>          default:
>>>            return false;
>>> @@ -316,9 +316,9 @@ static bool vtimer_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr)
>>>        switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
>>>        {
>>>        case HSR_SYSREG_CNTP_CTL_EL0:
>>> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
>>> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
>>>        case HSR_SYSREG_CNTP_TVAL_EL0:
>>> -        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
>>> +        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
>>>        case HSR_SYSREG_CNTP_CVAL_EL0:
>>>            return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
>>>    diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
>>> index 1253753833..cef55aabea 100644
>>> --- a/xen/include/asm-arm/vreg.h
>>> +++ b/xen/include/asm-arm/vreg.h
>>> @@ -4,13 +4,13 @@
>>>    #ifndef __ASM_ARM_VREG__
>>>    #define __ASM_ARM_VREG__
>>>    -typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
>>> +typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
>>>                                       bool read);
>>>    typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t *r,
>>>                                       bool read);
>>>    -static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
>>> -                                     vreg_reg32_fn_t fn)
>>> +static inline bool vreg_emulate_cp(struct cpu_user_regs *regs, union hsr hsr,
>>> +                                     vreg_reg_fn_t fn)
>>
>> The new name will add some confusion because now we have vreg_emulate_cp() (for 32-bit access) and vreg_emulate_c64() (for 64-bit access).
>>
>> So I would rather keep the current naming.
>>
> We can do like that:
> -on arm32 there will be vreg_emulate_cp32 with register_t and vreg_emulate_cp64.
> -on arm64 there will be only vreg_emulate_sysreg with register_t.
> Does it sound ok or do you want to drop this change completely?

That's fine with me. It is a good move to drop vreg_emulate_sysreg32() 
completely.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 09:46:52 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 09:46:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161877.297049 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92co-0002Ab-OT; Thu, 29 Jul 2021 09:46:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161877.297049; Thu, 29 Jul 2021 09:46:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m92co-0002AU-LB; Thu, 29 Jul 2021 09:46:46 +0000
Received: by outflank-mailman (input) for mailman id 161877;
 Thu, 29 Jul 2021 09:46:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m92cm-0002AK-Sd; Thu, 29 Jul 2021 09:46:44 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m92cm-0003hh-JU; Thu, 29 Jul 2021 09:46:44 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m92cm-0004t4-A3; Thu, 29 Jul 2021 09:46:44 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m92cm-0001Y9-9Y; Thu, 29 Jul 2021 09:46:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=58/spD4w7YPznv69jqCtlvfbuZvzqm2BpsEjGKMCD1c=; b=pttB0YY4hfvzU7g3Mm7HZflqGh
	3H66hR4BoEiyvG0y+Pvcgom3mJijJ0LZIhmx4Xm5bbrMhFp1aHAO+56W44hWhYo2tdvoCoVYC8mIB
	c4zhlKRFMC+ASroSiJtvw6oCmtd8mMmoX9du388wH6b5rzOVeoWwO/oKqLK4gWY4avn4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164032-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 164032: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=f5c022a3890a7e94bde6df3cf7f6889f0c7ba7e8
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 09:46:44 +0000

flight 164032 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164032/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              f5c022a3890a7e94bde6df3cf7f6889f0c7ba7e8
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  384 days
Failing since        151818  2020-07-11 04:18:52 Z  383 days  375 attempts
Testing same since   164032  2021-07-29 04:20:07 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Richard W.M. Jones <rjones@redhat.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Fei <yangfei85@huawei.com>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 67153 lines long.)


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 10:43:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 10:43:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161887.297066 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m93VR-0007hT-0f; Thu, 29 Jul 2021 10:43:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161887.297066; Thu, 29 Jul 2021 10:43:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m93VQ-0007hM-U1; Thu, 29 Jul 2021 10:43:12 +0000
Received: by outflank-mailman (input) for mailman id 161887;
 Thu, 29 Jul 2021 10:43:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wMqg=MV=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m93VQ-0007h9-DV
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 10:43:12 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c470f58f-f059-11eb-9819-12813bfff9fa;
 Thu, 29 Jul 2021 10:43:10 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0F4C26D;
 Thu, 29 Jul 2021 03:43:10 -0700 (PDT)
Received: from e123311-lin.arm.com (unknown [10.57.11.94])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C68033F73D;
 Thu, 29 Jul 2021 03:43:08 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c470f58f-f059-11eb-9819-12813bfff9fa
From: Michal Orzel <michal.orzel@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	bertrand.marquis@arm.com
Subject: [PATCH v2] xen/arm64: Remove vreg_emulate_sysreg32
Date: Thu, 29 Jul 2021 12:42:58 +0200
Message-Id: <20210729104258.6320-1-michal.orzel@arm.com>
X-Mailer: git-send-email 2.29.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

According to ARMv8A architecture, AArch64 registers
are 64bit wide even though in many cases the upper
32bit is reserved. Therefore there is no need for
function vreg_emulate_sysreg32 on arm64. This means
that we can have just one function vreg_emulate_sysreg
using new function pointer:
typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
                              register_t *r, bool read);

Modify vreg_emulate_cp32 to use the new function pointer
as well.

This change allows to properly use 64bit registers in AArch64
state and in case of AArch32 the upper 32 bits of AArch64
registers are inaccessible and are ignored(D1.20.1 ARM DDI 0487A.j).

Signed-off-by: Michal Orzel <michal.orzel@arm.com>
---
 xen/arch/arm/arm64/vsysreg.c    |  2 +-
 xen/arch/arm/vcpreg.c           | 16 ++++++++++----
 xen/arch/arm/vgic-v3.c          |  2 +-
 xen/arch/arm/vtimer.c           | 11 +++++-----
 xen/include/asm-arm/processor.h |  4 ++--
 xen/include/asm-arm/vreg.h      | 38 ++++++---------------------------
 6 files changed, 29 insertions(+), 44 deletions(-)

diff --git a/xen/arch/arm/arm64/vsysreg.c b/xen/arch/arm/arm64/vsysreg.c
index caf17174b8..73fa2ca9ae 100644
--- a/xen/arch/arm/arm64/vsysreg.c
+++ b/xen/arch/arm/arm64/vsysreg.c
@@ -64,7 +64,7 @@ TVM_REG(CONTEXTIDR_EL1)
     {                                                                   \
         bool res;                                                       \
                                                                         \
-        res = vreg_emulate_sysreg64(regs, hsr, vreg_emulate_##reg);     \
+        res = vreg_emulate_sysreg(regs, hsr, vreg_emulate_##reg);       \
         ASSERT(res);                                                    \
         break;                                                          \
     }
diff --git a/xen/arch/arm/vcpreg.c b/xen/arch/arm/vcpreg.c
index e3ce56d875..be1ec08159 100644
--- a/xen/arch/arm/vcpreg.c
+++ b/xen/arch/arm/vcpreg.c
@@ -57,9 +57,17 @@
 #define WRITE_SYSREG_SZ(sz, val, sysreg...)  WRITE_SYSREG##sz(val, sysreg)
 #endif
 
+/*
+ * type32_t is defined as register_t due to the vreg_emulate_cp32 and
+ * vreg_emulate_sysreg taking function pointer with register_t type used for
+ * passing register's value.
+ */
+typedef register_t type32_t;
+typedef uint64_t type64_t ;
+
 /* The name is passed from the upper macro to workaround macro expansion. */
 #define TVM_REG(sz, func, reg...)                                           \
-static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
+static bool func(struct cpu_user_regs *regs, type##sz##_t *r, bool read)    \
 {                                                                           \
     struct vcpu *v = current;                                               \
     bool cache_enabled = vcpu_has_cache_enabled(v);                         \
@@ -83,7 +91,7 @@ static bool func(struct cpu_user_regs *regs, uint##sz##_t *r, bool read)    \
 
 #else /* CONFIG_ARM_64 */
 #define TVM_REG32_COMBINED(lowreg, hireg, xreg)                             \
-static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
+static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, register_t *r,  \
                                 bool read, bool hi)                         \
 {                                                                           \
     struct vcpu *v = current;                                               \
@@ -108,13 +116,13 @@ static bool vreg_emulate_##xreg(struct cpu_user_regs *regs, uint32_t *r,    \
     return true;                                                            \
 }                                                                           \
                                                                             \
-static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, uint32_t *r,  \
+static bool vreg_emulate_##lowreg(struct cpu_user_regs *regs, register_t *r,\
                                   bool read)                                \
 {                                                                           \
     return vreg_emulate_##xreg(regs, r, read, false);                       \
 }                                                                           \
                                                                             \
-static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, uint32_t *r,   \
+static bool vreg_emulate_##hireg(struct cpu_user_regs *regs, register_t *r, \
                                  bool read)                                 \
 {                                                                           \
     return vreg_emulate_##xreg(regs, r, read, true);                        \
diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c
index 613f37abab..cb5a70c42e 100644
--- a/xen/arch/arm/vgic-v3.c
+++ b/xen/arch/arm/vgic-v3.c
@@ -1531,7 +1531,7 @@ static bool vgic_v3_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr)
     switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
     {
     case HSR_SYSREG_ICC_SGI1R_EL1:
-        return vreg_emulate_sysreg64(regs, hsr, vgic_v3_emulate_sgi1r);
+        return vreg_emulate_sysreg(regs, hsr, vgic_v3_emulate_sgi1r);
 
     default:
         return false;
diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
index 167fc6127a..0196951af4 100644
--- a/xen/arch/arm/vtimer.c
+++ b/xen/arch/arm/vtimer.c
@@ -162,7 +162,8 @@ void virt_timer_restore(struct vcpu *v)
     WRITE_SYSREG(v->arch.virt_timer.ctl, CNTV_CTL_EL0);
 }
 
-static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
+static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, register_t *r,
+                            bool read)
 {
     struct vcpu *v = current;
     s_time_t expires;
@@ -197,7 +198,7 @@ static bool vtimer_cntp_ctl(struct cpu_user_regs *regs, uint32_t *r, bool read)
     return true;
 }
 
-static bool vtimer_cntp_tval(struct cpu_user_regs *regs, uint32_t *r,
+static bool vtimer_cntp_tval(struct cpu_user_regs *regs, register_t *r,
                              bool read)
 {
     struct vcpu *v = current;
@@ -316,11 +317,11 @@ static bool vtimer_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr)
     switch ( hsr.bits & HSR_SYSREG_REGS_MASK )
     {
     case HSR_SYSREG_CNTP_CTL_EL0:
-        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_ctl);
+        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_ctl);
     case HSR_SYSREG_CNTP_TVAL_EL0:
-        return vreg_emulate_sysreg32(regs, hsr, vtimer_cntp_tval);
+        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_tval);
     case HSR_SYSREG_CNTP_CVAL_EL0:
-        return vreg_emulate_sysreg64(regs, hsr, vtimer_cntp_cval);
+        return vreg_emulate_sysreg(regs, hsr, vtimer_cntp_cval);
 
     default:
         return false;
diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h
index 2577e9a244..2058b69447 100644
--- a/xen/include/asm-arm/processor.h
+++ b/xen/include/asm-arm/processor.h
@@ -484,9 +484,9 @@ extern register_t __cpu_logical_map[];
 #define CNTKCTL_EL1_EL0PTEN  (1u<<9) /* Expose phys timer registers to EL0 */
 
 /* Timer control registers */
-#define CNTx_CTL_ENABLE   (1u<<0)  /* Enable timer */
+#define CNTx_CTL_ENABLE   (1ul<<0)  /* Enable timer */
 #define CNTx_CTL_MASK     (1ul<<1)  /* Mask IRQ */
-#define CNTx_CTL_PENDING  (1u<<2)  /* IRQ pending */
+#define CNTx_CTL_PENDING  (1ul<<2)  /* IRQ pending */
 
 /* Timer frequency mask */
 #define CNTFRQ_MASK       GENMASK(31, 0)
diff --git a/xen/include/asm-arm/vreg.h b/xen/include/asm-arm/vreg.h
index 1253753833..fa2f4cdb17 100644
--- a/xen/include/asm-arm/vreg.h
+++ b/xen/include/asm-arm/vreg.h
@@ -4,13 +4,13 @@
 #ifndef __ASM_ARM_VREG__
 #define __ASM_ARM_VREG__
 
-typedef bool (*vreg_reg32_fn_t)(struct cpu_user_regs *regs, uint32_t *r,
-                                   bool read);
 typedef bool (*vreg_reg64_fn_t)(struct cpu_user_regs *regs, uint64_t *r,
                                    bool read);
+typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs, register_t *r,
+                                   bool read);
 
 static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
-                                     vreg_reg32_fn_t fn)
+                                     vreg_reg_fn_t fn)
 {
     struct hsr_cp32 cp32 = hsr.cp32;
     /*
@@ -18,7 +18,7 @@ static inline bool vreg_emulate_cp32(struct cpu_user_regs *regs, union hsr hsr,
      * implementation error in the emulation (such as not correctly
      * setting r).
      */
-    uint32_t r = 0;
+    register_t r = 0;
     bool ret;
 
     if ( !cp32.read )
@@ -64,11 +64,11 @@ static inline bool vreg_emulate_cp64(struct cpu_user_regs *regs, union hsr hsr,
 }
 
 #ifdef CONFIG_ARM_64
-static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, union hsr hsr,
-                                         vreg_reg32_fn_t fn)
+static inline bool vreg_emulate_sysreg(struct cpu_user_regs *regs, union hsr hsr,
+                                         vreg_reg_fn_t fn)
 {
     struct hsr_sysreg sysreg = hsr.sysreg;
-    uint32_t r = 0;
+    register_t r = 0;
     bool ret;
 
     if ( !sysreg.read )
@@ -81,30 +81,6 @@ static inline bool vreg_emulate_sysreg32(struct cpu_user_regs *regs, union hsr h
 
     return ret;
 }
-
-static inline bool vreg_emulate_sysreg64(struct cpu_user_regs *regs, union hsr hsr,
-                                         vreg_reg64_fn_t fn)
-{
-    struct hsr_sysreg sysreg = hsr.sysreg;
-    /*
-     * Initialize to zero to avoid leaking data if there is an
-     * implementation error in the emulation (such as not correctly
-     * setting x).
-     */
-    uint64_t x = 0;
-    bool ret;
-
-    if ( !sysreg.read )
-        x = get_user_reg(regs, sysreg.reg);
-
-    ret = fn(regs, &x, sysreg.read);
-
-    if ( ret && sysreg.read )
-        set_user_reg(regs, sysreg.reg, x);
-
-    return ret;
-}
-
 #endif
 
 #define VREG_REG_MASK(size) ((~0UL) >> (BITS_PER_LONG - ((1 << (size)) * 8)))
-- 
2.29.0



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 11:06:15 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 11:06:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161896.297081 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m93rc-0001aE-TK; Thu, 29 Jul 2021 11:06:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161896.297081; Thu, 29 Jul 2021 11:06:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m93rc-0001a7-Qb; Thu, 29 Jul 2021 11:06:08 +0000
Received: by outflank-mailman (input) for mailman id 161896;
 Thu, 29 Jul 2021 11:06:08 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m93rc-0001a1-2n
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 11:06:08 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m93ra-0004vC-Rn; Thu, 29 Jul 2021 11:06:06 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m93ra-0006L1-Hy; Thu, 29 Jul 2021 11:06:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Message-Id:Date:Subject:Cc:To:From;
	bh=vKEQbEF5cQrLwWH1JPPMZRyXbyae15aLjwRBtJ1sUbo=; b=HXBNouiWvG2SZ0EJi4i0Ms6fps
	fhDp/v2rL45Bf0EndbHT0gZKQMZMRTPH6IwZPyIIndvapzdowcmzAU46FXXuiCxVkeygCrgra3ef/
	nj72W869BZNxXxvqDnFul/Tqq1Iq/8STGvMq+KsCgnR3mHb3uTgj/hKPUiFmdN2VDlAg=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH] tools/xenstored: Propagate correctly the error message from lu_start()
Date: Thu, 29 Jul 2021 12:06:02 +0100
Message-Id: <20210729110602.24815-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1

From: Julien Grall <jgrall@amazon.com>

lu_start() will only set errno when it returns NULL. For all the
other cases, the value is unknown.

This means that when lu_start() returns an error message, it may not
be propagated to the client.

The check that errno is a non-zero value is now dropped and instead
the value is returned when no error message is provided. This
relies on errno to always be set when ret == NULL.

Fixes: af216a99fb ("tools/xenstore: add the basic framework for doing the live update")
Signed-off-by: Julien Grall <jgrall@amazon.com>
---
 tools/xenstore/xenstored_control.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/tools/xenstore/xenstored_control.c b/tools/xenstore/xenstored_control.c
index ff9863c17fa4..6b68b79faac7 100644
--- a/tools/xenstore/xenstored_control.c
+++ b/tools/xenstore/xenstored_control.c
@@ -795,10 +795,8 @@ static int do_control_lu(void *ctx, struct connection *conn,
 				return EINVAL;
 		}
 		ret = lu_start(ctx, conn, force, to);
-		if (errno)
-			return errno;
 		if (!ret)
-			return 0;
+			return errno;
 	} else {
 		errno = 0;
 		ret = lu_arch(ctx, conn, vec, num);
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 11:06:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 11:06:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161903.297094 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m93sP-00029A-8P; Thu, 29 Jul 2021 11:06:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161903.297094; Thu, 29 Jul 2021 11:06:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m93sP-000293-54; Thu, 29 Jul 2021 11:06:57 +0000
Received: by outflank-mailman (input) for mailman id 161903;
 Thu, 29 Jul 2021 11:06:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m93sN-00028t-Cu
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 11:06:55 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m93sM-0004vm-OW; Thu, 29 Jul 2021 11:06:54 +0000
Received: from 54-240-197-235.amazon.com ([54.240.197.235]
 helo=ufe34d9ed68d054.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m93sM-0006OX-FT; Thu, 29 Jul 2021 11:06:54 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Message-Id:Date:Subject:Cc:To:From;
	bh=9cjgZZnC+CjNZwAhAzGV3zUaO4AAHfmbwNPumDCV3o4=; b=j6Dgly8XOB/Pf8F23GKD7B3X/p
	XvW8vrQhnShAqewJk7w84qdrAzhBXXWIlA1h2fyHS+vssbDs1xGhYFt+CVebPBDXXLowa6ynrVAky
	KKlfMLWqv5p3xqfgxd8lS09A+kHsTS1ie03qDE1I9J2XMeJsLrUVQNqrU17PzvGvmhQU=;
From: Julien Grall <julien@xen.org>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Julien Grall <jgrall@amazon.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	Juergen Gross <jgross@suse.com>
Subject: [PATCH] tools/xenstored: Don't assume errno will not be overwritten in lu_arch()
Date: Thu, 29 Jul 2021 12:06:47 +0100
Message-Id: <20210729110647.25500-1-julien@xen.org>
X-Mailer: git-send-email 2.17.1

From: Julien Grall <jgrall@amazon.com>

At the moment, do_control_lu() will set errno to 0 before calling
lu_arch() and then check errno. The expectation is nothing in lu_arch()
will change the value unless there is an error.

However, per errno(3), a function that succeeds is allowed to change
errno. In fact, syslog() will overwrite errno if the logs are rotated
at the time it is called.

To prevent any further issue, errno is now always set before
returning NULL.

Additionally, errno is only checked when returning NULL so the client
can see the error message if there is any.

Reported-by: Michael Kurth <mku@amazon.com>
Signed-off-by: Julien Grall <jgrall@amazon.com>
---
 tools/xenstore/xenstored_control.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/xenstore/xenstored_control.c b/tools/xenstore/xenstored_control.c
index 6b68b79faac7..6fcb42095b59 100644
--- a/tools/xenstore/xenstored_control.c
+++ b/tools/xenstore/xenstored_control.c
@@ -324,6 +324,7 @@ static const char *lu_binary_alloc(const void *ctx, struct connection *conn,
 	lu_status->kernel_size = size;
 	lu_status->kernel_off = 0;
 
+	errno = 0;
 	return NULL;
 }
 
@@ -339,6 +340,7 @@ static const char *lu_binary_save(const void *ctx, struct connection *conn,
 	memcpy(lu_status->kernel + lu_status->kernel_off, data, size);
 	lu_status->kernel_off += size;
 
+	errno = 0;
 	return NULL;
 }
 
@@ -798,9 +800,8 @@ static int do_control_lu(void *ctx, struct connection *conn,
 		if (!ret)
 			return errno;
 	} else {
-		errno = 0;
 		ret = lu_arch(ctx, conn, vec, num);
-		if (errno)
+		if (!ret && errno)
 			return errno;
 	}
 
-- 
2.17.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 11:20:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 11:20:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161913.297106 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9458-0004MI-JH; Thu, 29 Jul 2021 11:20:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161913.297106; Thu, 29 Jul 2021 11:20:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9458-0004MB-G0; Thu, 29 Jul 2021 11:20:06 +0000
Received: by outflank-mailman (input) for mailman id 161913;
 Thu, 29 Jul 2021 11:20:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m9457-0004ID-D4
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 11:20:05 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m9456-0005AL-8R; Thu, 29 Jul 2021 11:20:04 +0000
Received: from 54-240-197-232.amazon.com ([54.240.197.232]
 helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m9456-0007cN-2Z; Thu, 29 Jul 2021 11:20:04 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=nmf1IRZj8cnd76qyGGakCImJbQh2t/HEcp1VzhyGGL0=; b=tiqTPvNbLpEcGDcpXJ7NGxN5y2
	4utQAIci7Jgfdegtboc075KQ0A7rQmhQBPG1wmTRWKOoj9jXm1CS3Ay/dC/ejUzCbJe44wHF4szVY
	nCPOf1zKU+JxpAaBUo8i79OQy8mnc0apVfNJUCqkJ9Cpsbh5d6p5vieSE+leGxds7qWQ=;
Subject: Re: [PATCH v2] xen/arm64: Remove vreg_emulate_sysreg32
To: Michal Orzel <michal.orzel@arm.com>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210729104258.6320-1-michal.orzel@arm.com>
From: Julien Grall <julien@xen.org>
Message-ID: <4a5ac822-3078-de0e-8f84-6881d47ad3eb@xen.org>
Date: Thu, 29 Jul 2021 12:20:01 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210729104258.6320-1-michal.orzel@arm.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Michal,

On 29/07/2021 11:42, Michal Orzel wrote:
> According to ARMv8A architecture, AArch64 registers
> are 64bit wide even though in many cases the upper
> 32bit is reserved. Therefore there is no need for
> function vreg_emulate_sysreg32 on arm64. This means
> that we can have just one function vreg_emulate_sysreg
> using new function pointer:
> typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>                                register_t *r, bool read);
> 
> Modify vreg_emulate_cp32 to use the new function pointer
> as well.
> 
> This change allows to properly use 64bit registers in AArch64
> state and in case of AArch32 the upper 32 bits of AArch64
> registers are inaccessible and are ignored(D1.20.1 ARM DDI 0487A.j).

What you wrote only says that the bits are ignored. It doesn't say 
whether the bits will be 0.

They are probably, but as I wrote yesterday, I couldn't confirm it.

> 
> Signed-off-by: Michal Orzel <michal.orzel@arm.com>

Please provide a change log.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 11:47:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 11:47:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161921.297118 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m94Vs-0006iv-QO; Thu, 29 Jul 2021 11:47:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161921.297118; Thu, 29 Jul 2021 11:47:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m94Vs-0006io-NO; Thu, 29 Jul 2021 11:47:44 +0000
Received: by outflank-mailman (input) for mailman id 161921;
 Thu, 29 Jul 2021 11:47:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=wMqg=MV=arm.com=michal.orzel@srs-us1.protection.inumbo.net>)
 id 1m94Vr-0006ii-8p
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 11:47:43 +0000
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c7cea0c4-f062-11eb-9825-12813bfff9fa;
 Thu, 29 Jul 2021 11:47:41 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1F89C6D;
 Thu, 29 Jul 2021 04:47:41 -0700 (PDT)
Received: from [10.57.11.94] (unknown [10.57.11.94])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A286E3F70D;
 Thu, 29 Jul 2021 04:47:38 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c7cea0c4-f062-11eb-9825-12813bfff9fa
Subject: Re: [PATCH v2] xen/arm64: Remove vreg_emulate_sysreg32
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, bertrand.marquis@arm.com
References: <20210729104258.6320-1-michal.orzel@arm.com>
 <4a5ac822-3078-de0e-8f84-6881d47ad3eb@xen.org>
From: Michal Orzel <michal.orzel@arm.com>
Message-ID: <dd9859ec-a3a9-6a74-bdae-fde092f26ac0@arm.com>
Date: Thu, 29 Jul 2021 13:47:32 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <4a5ac822-3078-de0e-8f84-6881d47ad3eb@xen.org>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

Hi Julien,

On 29.07.2021 13:20, Julien Grall wrote:
> Hi Michal,
> 
> On 29/07/2021 11:42, Michal Orzel wrote:
>> According to ARMv8A architecture, AArch64 registers
>> are 64bit wide even though in many cases the upper
>> 32bit is reserved. Therefore there is no need for
>> function vreg_emulate_sysreg32 on arm64. This means
>> that we can have just one function vreg_emulate_sysreg
>> using new function pointer:
>> typedef bool (*vreg_reg_fn_t)(struct cpu_user_regs *regs,
>>                                register_t *r, bool read);
>>
>> Modify vreg_emulate_cp32 to use the new function pointer
>> as well.
>>
>> This change allows to properly use 64bit registers in AArch64
>> state and in case of AArch32 the upper 32 bits of AArch64
>> registers are inaccessible and are ignored(D1.20.1 ARM DDI 0487A.j).
> 
> What you wrote only says that the bits are ignored. It doesn't say whether the bits will be 0.
> 
> They are probably, but as I wrote yesterday, I couldn't confirm it.
> 
Should I then remove this part of the commit or write below?:
"We can assume that those bits will be 0 but the architecture
reference manual does not clarify this."
>>
>> Signed-off-by: Michal Orzel <michal.orzel@arm.com>
> 
> Please provide a change log.
> 
Ok.
> Cheers,
> 
Cheers,


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 12:50:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 12:50:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161932.297129 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m95Tz-0003xC-Mz; Thu, 29 Jul 2021 12:49:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161932.297129; Thu, 29 Jul 2021 12:49:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m95Tz-0003x5-JT; Thu, 29 Jul 2021 12:49:51 +0000
Received: by outflank-mailman (input) for mailman id 161932;
 Thu, 29 Jul 2021 12:49:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Rz1=MV=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m95Tx-0003wy-Km
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 12:49:49 +0000
Received: from mail-pl1-x630.google.com (unknown [2607:f8b0:4864:20::630])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42102d85-d1ac-40da-ac36-e3fc78d5222f;
 Thu, 29 Jul 2021 12:49:48 +0000 (UTC)
Received: by mail-pl1-x630.google.com with SMTP id c16so6841707plh.7
 for <xen-devel@lists.xenproject.org>; Thu, 29 Jul 2021 05:49:48 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:18:efec::4b1])
 by smtp.gmail.com with ESMTPSA id
 k198sm3710340pfd.148.2021.07.29.05.49.33
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 Jul 2021 05:49:47 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 42102d85-d1ac-40da-ac36-e3fc78d5222f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=Q0SGRNEWOSLrhO9/bSDBCi5NITuZ+vRSfRGxTziJabU=;
        b=hzKyL5WmsMRD8k+m34XXrgdj7/1e9J85KeDCiJLjzHeqLjqVNN2QCjPp4LTbl8n7tq
         kiYmXEtjueHlVfkLJ8A0fmKvkAGZq+7s4OPYyA0r0BplF5amF3k3XUoUsQgPz8D0bLYG
         d/uu5na8UGcsGtBUkC2kT3gdJO2GxEqPZL2kiRMtbua3knkxb2jI3qoK7y+jAWGsPcYP
         PEdCF+dn9EI6vMVdi6PlEaCnPYi6emG2vaA6WRsUJGCwTl68cpIhDOIIyYkeJamoSXUa
         bu5X6znaixSj3iryQEAayd0uzQ2zW3G7sNXtamd3fsj3KVhp3gkX0Kdn2h9rosJI0OHl
         wWSg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=Q0SGRNEWOSLrhO9/bSDBCi5NITuZ+vRSfRGxTziJabU=;
        b=gUFpyTMoidSEqHijtrMSt0DlDAPAYGk/OPmuYcMLuqB3I2ttPHwDMmtwAeE+C7G5S7
         bFihbGMvOkRVnV1f82Ok13LaWP0fpz2O3+rYSxzixlWGVW1brZ8IP860b0JahUXgCWbM
         jkiQQgs2IuL6MsaNvHiwYY54Gidf9TNXsUPo43S5zKYhwlifa/SA340Pyw/ME9/cye/2
         Ap6fSDmP9rOie/fwPYTjCM4qGVjMIqiutQ8ZjsBCHCRFIPR6sEwmVxDisoJXuoDNs2PB
         JkHwlcenmyBa9iQS002k62EQ5sivTdhLSLy/HORMzSXShYCIBtpodKQAgRF8qNSvB2zD
         SnOw==
X-Gm-Message-State: AOAM53086nUL9XLQ0oxJUZXQZHic+/9xyuQNX0jrfW1EsxK+hspI6AaC
	E+7SPjECa1QuudxzjnVdve0=
X-Google-Smtp-Source: ABdhPJxEQWV2usuKh29jSoH2loa36HykTtuvI7jMK52U0Q907fZvwTlhcl4mO3CPvQocl1ZpGKnVjQ==
X-Received: by 2002:aa7:9086:0:b029:39b:6377:17c1 with SMTP id i6-20020aa790860000b029039b637717c1mr5007664pfa.11.1627562987803;
        Thu, 29 Jul 2021 05:49:47 -0700 (PDT)
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Dave Hansen <dave.hansen@intel.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
 <c00e269c-da4c-c703-0182-0221c73a76cc@intel.com>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <ccbe6f4c-5ffe-4d63-67ab-6384fcb8691d@gmail.com>
Date: Thu, 29 Jul 2021 20:49:31 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <c00e269c-da4c-c703-0182-0221c73a76cc@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi Dave:
      Thanks for your review.

On 7/28/2021 11:29 PM, Dave Hansen wrote:
> On 7/28/21 7:52 AM, Tianyu Lan wrote:
>> @@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
>>   	int ret;
>>   
>>   	/* Nothing to do if memory encryption is not active */
>> -	if (!mem_encrypt_active())
>> +	if (hv_is_isolation_supported())
>> +		return hv_set_mem_enc(addr, numpages, enc);
>> +	else if (!mem_encrypt_active())
>>   		return 0;
> 
> __set_memory_enc_dec() is turning into a real mess.  SEV, TDX and now
> Hyper-V are messing around in here.
> 
> It doesn't help that these additions are totally uncommented.  Even
> worse is that hv_set_mem_enc() was intentionally named "enc" when it
> presumably has nothing to do with encryption.
> 
> This needs to be refactored.  The current __set_memory_enc_dec() can
> become __set_memory_enc_pgtable().  It gets used for the hypervisors
> that get informed about "encryption" status via page tables: SEV and TDX.
> 
> Then, rename hv_set_mem_enc() to hv_set_visible_hcall().  You'll end up
> with:
> 
> int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
> {
> 	if (hv_is_isolation_supported())
> 		return hv_set_visible_hcall(...);
> 
> 	if (mem_encrypt_active() || ...)
> 		return __set_memory_enc_pgtable();
> 
> 	/* Nothing to do */
> 	return 0;
> }
> 
> That tells the story pretty effectively, in code.

Yes, this is good idea. Thanks for your suggestion.

> 
>> +int hv_set_mem_enc(unsigned long addr, int numpages, bool enc)
>> +{
>> +	return hv_set_mem_host_visibility((void *)addr,
>> +			numpages * HV_HYP_PAGE_SIZE,
>> +			enc ? VMBUS_PAGE_NOT_VISIBLE
>> +			: VMBUS_PAGE_VISIBLE_READ_WRITE);
>> +}
> 
> I know this is off in Hyper-V code, but this just makes my eyes bleed.
> I'd much rather see something which is less compact but readable.

OK. Will update.

> 
>> +/* Hyper-V GPA map flags */
>> +#define	VMBUS_PAGE_NOT_VISIBLE		0
>> +#define	VMBUS_PAGE_VISIBLE_READ_ONLY	1
>> +#define	VMBUS_PAGE_VISIBLE_READ_WRITE	3
> 
> That looks suspiciously like an enum.
>

OK. Will update.



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 13:02:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 13:02:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161940.297142 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m95ft-00067d-Ny; Thu, 29 Jul 2021 13:02:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161940.297142; Thu, 29 Jul 2021 13:02:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m95ft-00067W-Kd; Thu, 29 Jul 2021 13:02:09 +0000
Received: by outflank-mailman (input) for mailman id 161940;
 Thu, 29 Jul 2021 13:02:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Rz1=MV=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m95fr-00067Q-I6
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 13:02:07 +0000
Received: from mail-pl1-x636.google.com (unknown [2607:f8b0:4864:20::636])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d93fdb46-970c-4705-9eb2-5a2780b2ba2e;
 Thu, 29 Jul 2021 13:02:06 +0000 (UTC)
Received: by mail-pl1-x636.google.com with SMTP id t3so4779991plg.9
 for <xen-devel@lists.xenproject.org>; Thu, 29 Jul 2021 06:02:06 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 w2sm9730504pjt.14.2021.07.29.06.01.51
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 Jul 2021 06:02:05 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d93fdb46-970c-4705-9eb2-5a2780b2ba2e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=xWZDnZQ7Uje44tOvyd+WhPXcE6YbxVNUTkV2DmxlC/I=;
        b=ExonRuvAP6deeZWP4ARMhx8XszTEeQWKqexdxGr8TsuL+Bz8VPrFj6Y730SphdAQDC
         84Fqe2zxnVuAY/b+yUA8Eq195vN/ev0qbH1bKyG9MpEY83Z3AAYzJOmRRNOSb1q264YH
         H1r0MDXkAlN2lmoLmNB9pMzmaE8qMyQJV2yXvzwM4lU7+cUmxyAefZ33Vtx/QsvY0B2Y
         7299cOKI8WViF8nwItNn9KeFY/6ShDYN3GG/09Lm/PkrJetdxTquTYKbp14IyHKNKJri
         w4KULmdKqUg3LoIRw+FRYrv+H/B2Jf9av5u6lx3SllYemnIcK4W70fMX/uAcJnqsyzu9
         1r1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=xWZDnZQ7Uje44tOvyd+WhPXcE6YbxVNUTkV2DmxlC/I=;
        b=ALqhjWjX3lGFMFIOdxp2ZAjrKkLgTFiROQj0Qn8kYb0CrbuZxlV4/vrkGTOf0JF/U0
         AVNU2ANkQGg1PJF5J/kBe/KPzge4fIXwENDGxTFdOtOOBoiz/aXS10OCheiQY3/3t4az
         je9bspJe8uRptd2Yy+z2C7CweJ4jPIziUARArV8pQGrrkJLRAozRFVF/wvhbpD1FWRk7
         Ie/sI1b4EB6P2lBT7/+FuhS9mpAiXhAemrNOYJrcu2B25ipGM4DRbc4K7pdSz9KS7Lfu
         bqB25p2fPBcTKKr2OFEQkOc+n32m7XsbYd8y+TYaXCjHFXb0h2qlSHWeEPNA+YM3MhMB
         y8nA==
X-Gm-Message-State: AOAM530MNfI5M3MRFOmHRxMo03PBgU5waOfh6i1QLO/5L35RpJOw3YvY
	y5YtPAMEadJ7JkVSyT4xJkU=
X-Google-Smtp-Source: ABdhPJyrI/P/7aQeOr7fGMy78ZxY6RcR1Rwj4jALXoPGmX2VorLJRrRMQ6J111Dxy7HnP0DgW7LcpA==
X-Received: by 2002:a05:6a00:24c6:b029:332:6773:165c with SMTP id d6-20020a056a0024c6b02903326773165cmr4937276pfv.33.1627563725957;
        Thu, 29 Jul 2021 06:02:05 -0700 (PDT)
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Dave Hansen <dave.hansen@intel.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
 <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <0d956a05-7d24-57a0-f4a9-dccc849b52fc@gmail.com>
Date: Thu, 29 Jul 2021 21:01:49 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

On 7/29/2021 1:06 AM, Dave Hansen wrote:
> On 7/28/21 7:52 AM, Tianyu Lan wrote:
>> @@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc)
>>   	int ret;
>>   
>>   	/* Nothing to do if memory encryption is not active */
>> -	if (!mem_encrypt_active())
>> +	if (hv_is_isolation_supported())
>> +		return hv_set_mem_enc(addr, numpages, enc);
>> +	else if (!mem_encrypt_active())
>>   		return 0;
> 
> One more thing.  If you're going to be patching generic code, please
> start using feature checks that can get optimized away at runtime.
> hv_is_isolation_supported() doesn't look like the world's cheapest
> check.  It can't be inlined and costs at least a function call.

Yes, you are right. How about adding a static branch key for the check 
of isolation VM? This may reduce the check cost.




From xen-devel-bounces@lists.xenproject.org Thu Jul 29 13:40:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 13:40:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161948.297153 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m96H1-0001YL-Iu; Thu, 29 Jul 2021 13:40:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161948.297153; Thu, 29 Jul 2021 13:40:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m96H1-0001YE-G4; Thu, 29 Jul 2021 13:40:31 +0000
Received: by outflank-mailman (input) for mailman id 161948;
 Thu, 29 Jul 2021 13:40:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m96H0-0001Y4-GV; Thu, 29 Jul 2021 13:40:30 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m96H0-0007Ar-AD; Thu, 29 Jul 2021 13:40:30 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m96H0-0008SR-02; Thu, 29 Jul 2021 13:40:30 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m96Gz-0006c2-Vn; Thu, 29 Jul 2021 13:40:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=eZFC2exrW9oWSoeUDqqA8aTTdtUKgLp09gRZ3338A5E=; b=WZ4ucZyrs111IzyzK3xi97283e
	yO+L0F1buYW3tQK5y/3c6a40LYanDZTY7uVmeIBGgwMSya7nXlWTdjJkHbaZsUBSGPZC73YC4RYDD
	qru/qiOCRDPiLc2jFYO/7DTzqjlKpV6GiueNqR5e25o3WVoK/4KLZ7hcw+/0ByOL/XHc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164029-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164029: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
X-Osstest-Versions-That:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 13:40:29 +0000

flight 164029 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164029/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 164019
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164019
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164019
 test-amd64-i386-xl-qemut-ws16-amd64 19 guest-stop             fail like 164019
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail like 164019
 test-amd64-i386-xl-qemut-win7-amd64 19 guest-stop             fail like 164019
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164019
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164019
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164019
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 164019
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164019
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164019
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31
baseline version:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31

Last test of basis   164029  2021-07-29 01:51:37 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 14:10:19 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 14:10:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161958.297169 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m96jd-0004Se-71; Thu, 29 Jul 2021 14:10:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161958.297169; Thu, 29 Jul 2021 14:10:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m96jd-0004Rv-3S; Thu, 29 Jul 2021 14:10:05 +0000
Received: by outflank-mailman (input) for mailman id 161958;
 Thu, 29 Jul 2021 14:10:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=QKS1=MV=intel.com=dave.hansen@srs-us1.protection.inumbo.net>)
 id 1m96jc-0004Gq-03
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 14:10:04 +0000
Received: from mga17.intel.com (unknown [192.55.52.151])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2c4bad5d-c83b-4ab2-b498-90e709bf32d3;
 Thu, 29 Jul 2021 14:10:01 +0000 (UTC)
Received: from fmsmga001.fm.intel.com ([10.253.24.23])
 by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 29 Jul 2021 07:09:59 -0700
Received: from shuangho-mobl1.amr.corp.intel.com (HELO [10.212.219.154])
 ([10.212.219.154])
 by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 29 Jul 2021 07:09:57 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2c4bad5d-c83b-4ab2-b498-90e709bf32d3
X-IronPort-AV: E=McAfee;i="6200,9189,10060"; a="193167143"
X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; 
   d="scan'208";a="193167143"
X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; 
   d="scan'208";a="581353306"
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Tianyu Lan <ltykernel@gmail.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
 <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
 <0d956a05-7d24-57a0-f4a9-dccc849b52fc@gmail.com>
From: Dave Hansen <dave.hansen@intel.com>
Autocrypt: addr=dave.hansen@intel.com; keydata=
 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
 z5cecg==
Message-ID: <ec1d4cfd-bbbc-e27a-7589-e85d9f0438f4@intel.com>
Date: Thu, 29 Jul 2021 07:09:55 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <0d956a05-7d24-57a0-f4a9-dccc849b52fc@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/29/21 6:01 AM, Tianyu Lan wrote:
> On 7/29/2021 1:06 AM, Dave Hansen wrote:
>> On 7/28/21 7:52 AM, Tianyu Lan wrote:
>>> @@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long
>>> addr, int numpages, bool enc)
>>>       int ret;
>>>         /* Nothing to do if memory encryption is not active */
>>> -    if (!mem_encrypt_active())
>>> +    if (hv_is_isolation_supported())
>>> +        return hv_set_mem_enc(addr, numpages, enc);
>>> +    else if (!mem_encrypt_active())
>>>           return 0;
>>
>> One more thing.  If you're going to be patching generic code, please
>> start using feature checks that can get optimized away at runtime.
>> hv_is_isolation_supported() doesn't look like the world's cheapest
>> check.  It can't be inlined and costs at least a function call.
> 
> Yes, you are right. How about adding a static branch key for the check
> of isolation VM? This may reduce the check cost.

I don't think you need a static key.

There are basically three choices:
1. Use an existing X86_FEATURE bit.  I think there's already one for
   when you are running under a hypervisor.  It's not super precise,
   but it's better than what you have.
2. Define a new X86_FEATURE bit for when you are running under
   Hyper-V.
3. Define a new X86_FEATURE bit specifically for Hyper-V isolation VM
   support.  This particular feature might be a little uncommon to
   deserve its own bit.

I'd probably just do #2.


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 15:02:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 15:02:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161968.297186 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m97YS-00015Y-CT; Thu, 29 Jul 2021 15:02:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161968.297186; Thu, 29 Jul 2021 15:02:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m97YS-00015R-9a; Thu, 29 Jul 2021 15:02:36 +0000
Received: by outflank-mailman (input) for mailman id 161968;
 Thu, 29 Jul 2021 15:02:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Rz1=MV=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m97YR-00015L-KS
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 15:02:35 +0000
Received: from mail-pl1-x62f.google.com (unknown [2607:f8b0:4864:20::62f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7523ad27-ab53-48a0-acb5-17f9ee7f8da7;
 Thu, 29 Jul 2021 15:02:34 +0000 (UTC)
Received: by mail-pl1-x62f.google.com with SMTP id n10so7322060plf.4
 for <xen-devel@lists.xenproject.org>; Thu, 29 Jul 2021 08:02:34 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 h30sm4026153pfr.191.2021.07.29.08.02.19
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 Jul 2021 08:02:33 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7523ad27-ab53-48a0-acb5-17f9ee7f8da7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=+bK/E9hMSXhFLJuYffyy4lnGRV/WQf1v1wRicssH11c=;
        b=FwB6x7B4iG0F7MUs9/9F6Dg/9PoCSP7gVTcOX0ocOJU41g4H+lOYYpyql4IyYVFcQY
         /jR2vjQ8vXFjFKbHbASRXdJemRdLMW21jXT3DV06qcoHuzHkTjYfMvskkaAemBRPzjTP
         h4JIu0oy0kK8PPRWkGWT9A0ZMN37pPHspf8nHPV3REyaJvIq/2bRvESuNsbdqOhCVZps
         wVNuJN0Wcl6YgLLFJnGARAl2uxPd4PQ0Gk5oTKljpXKFW8Dd8N4UiP1kBqxQ7w9zRhD8
         K8YjAuIKZcJf6XeOYfYrcl4FxeujnfCoH+ST0WDAmJ9l2jF1cG2dsUQ3hNCcIAs2tXUI
         dquA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=+bK/E9hMSXhFLJuYffyy4lnGRV/WQf1v1wRicssH11c=;
        b=F7G4uWQXg8aXmgivzQw3WTXZ48pmriFGfm8/c9svaaXRiISFGXzjL+yr39iE3NDdWQ
         zTJqsC473DhACKky+Yf08o2+gwned+bv0xFrlrfVwUTxSCtmOkBvycHC2pd+0oXR/wHb
         4Ih5fDXX0RHjPW3O2NOrRfYgzDn7MDwOIf2DRPyTeKZY2kJBdThnKS4mLu7xU0Rrw/3R
         v02Z6xdxUD6LLbWS5bTHmv2u1Y70oEHNimZZ1sYkuzJL4naertGfZzWKvm+paNo5mqtB
         S2Cp4buRYIEjAwmdfVDvRHooJOFB8B1dC6lvBJpa4iJRRdttPeAyP8LpwAdgEz6HQwBV
         sZRg==
X-Gm-Message-State: AOAM532hznvbN1HAgLi4NAcSrnZS6IlstTN1q6Jbv/7m8w/2et2yz4z2
	hS6TlocT8ngt+/sE5s3T4ms=
X-Google-Smtp-Source: ABdhPJzBGI9zTfesOKkMJXLKPI10+fN42IwNJPZiUXGYmFrvx/nDBD1B0BKa0HCMXpw5NCSATnP3lw==
X-Received: by 2002:a17:90a:e651:: with SMTP id ep17mr5748786pjb.85.1627570953940;
        Thu, 29 Jul 2021 08:02:33 -0700 (PDT)
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Dave Hansen <dave.hansen@intel.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
 <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
 <0d956a05-7d24-57a0-f4a9-dccc849b52fc@gmail.com>
 <ec1d4cfd-bbbc-e27a-7589-e85d9f0438f4@intel.com>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <8df2845d-ee90-56d0-1228-adebb103ec37@gmail.com>
Date: Thu, 29 Jul 2021 23:02:16 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <ec1d4cfd-bbbc-e27a-7589-e85d9f0438f4@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/29/2021 10:09 PM, Dave Hansen wrote:
> On 7/29/21 6:01 AM, Tianyu Lan wrote:
>> On 7/29/2021 1:06 AM, Dave Hansen wrote:
>>> On 7/28/21 7:52 AM, Tianyu Lan wrote:
>>>> @@ -1986,7 +1988,9 @@ static int __set_memory_enc_dec(unsigned long
>>>> addr, int numpages, bool enc)
>>>>        int ret;
>>>>          /* Nothing to do if memory encryption is not active */
>>>> -    if (!mem_encrypt_active())
>>>> +    if (hv_is_isolation_supported())
>>>> +        return hv_set_mem_enc(addr, numpages, enc);
>>>> +    else if (!mem_encrypt_active())
>>>>            return 0;
>>>
>>> One more thing.  If you're going to be patching generic code, please
>>> start using feature checks that can get optimized away at runtime.
>>> hv_is_isolation_supported() doesn't look like the world's cheapest
>>> check.  It can't be inlined and costs at least a function call.
>>
>> Yes, you are right. How about adding a static branch key for the check
>> of isolation VM? This may reduce the check cost.
> 
> I don't think you need a static key.
> 
> There are basically three choices:
> 1. Use an existing X86_FEATURE bit.  I think there's already one for
>     when you are running under a hypervisor.  It's not super precise,
>     but it's better than what you have.
> 2. Define a new X86_FEATURE bit for when you are running under
>     Hyper-V.
> 3. Define a new X86_FEATURE bit specifically for Hyper-V isolation VM
>     support.  This particular feature might be a little uncommon to
>     deserve its own bit.
> 
> I'd probably just do #2.
> 

There is x86_hyper_type to identify hypervisor type and we may check 
this variable after checking X86_FEATURE_HYPERVISOR.

static inline bool hv_is_isolation_supported(void)
{
	if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
		return 0;

         if (x86_hyper_type != X86_HYPER_MS_HYPERV)
                 return 0;

	// out of line function call:
	return __hv_is_isolation_supported();
}	


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 15:13:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 15:13:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161976.297199 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m97j2-0002Wx-9T; Thu, 29 Jul 2021 15:13:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161976.297199; Thu, 29 Jul 2021 15:13:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m97j2-0002Wq-5k; Thu, 29 Jul 2021 15:13:32 +0000
Received: by outflank-mailman (input) for mailman id 161976;
 Thu, 29 Jul 2021 15:13:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=+Rz1=MV=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m97j1-0002Wf-Lz
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 15:13:31 +0000
Received: from mail-pj1-x1030.google.com (unknown [2607:f8b0:4864:20::1030])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7710f194-20dc-4b19-8e7d-500621abaca5;
 Thu, 29 Jul 2021 15:13:30 +0000 (UTC)
Received: by mail-pj1-x1030.google.com with SMTP id
 m2-20020a17090a71c2b0290175cf22899cso9880001pjs.2
 for <xen-devel@lists.xenproject.org>; Thu, 29 Jul 2021 08:13:29 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:1a:efea::4b1])
 by smtp.gmail.com with ESMTPSA id
 c7sm4247137pgq.22.2021.07.29.08.13.14
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 Jul 2021 08:13:28 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7710f194-20dc-4b19-8e7d-500621abaca5
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:from:to:cc:references:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=akMNdPJ4WS5nbnxgvsvMYm/zRUHwcBCfIsow9Ks6kis=;
        b=dLioqOpBl2TpGowMKGZzRjcLFx0fZ0sBHYpCjAxABGEJkW9CgwGvHYqQ7apVDck0xx
         W5FuDqVbCnNd70/DtkMCPd4nqMpezuT6upxl41IkUNtJlgdLrD+RhjExDK3z3ce7yAyi
         4T3pGiS49Fpux5+3O0k15LkGMg6tQKFB1XgNeZAHuGRcTvc6EBLKsj3eNAVBiUHKR1xX
         /CgKKN3LRKSV3ywoC91cZi4VtcHW9BdxphQdF31SCJLo1LkxTmqp53t070UtFqT4mdev
         zb6GH16wdrsVQodoRsmLapOWCa0r0OH1HB0WqtJ3jUF4EHVlDutR3ypdLueHvAxYkwe8
         3NDA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:from:to:cc:references:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=akMNdPJ4WS5nbnxgvsvMYm/zRUHwcBCfIsow9Ks6kis=;
        b=Xn0OQaIveJZQ/1Lh/OE1hpomx4PWdOW9FGzZXkYAWMgIJSJedgETDbKbLZnUPlKewX
         jou4cNUDpLw2kTJFinPSUJBEPS3CyjIrgSv0qxBsZ3vdgONBFHkcy8+VwZXojyhGl3vE
         UxV/1gHY+cE15Wu9ouCJ9vEyhlvW/HghionntsxN1bn4srwwVBrhYesUs2cPmzlELEet
         PNvyKXYs5XtymgGEfGXqvnk+ZS+HzZENnfHldzkfIs4j0u/dVZL1RGK5GRplGhZm7Gxz
         jEW2gun2MDiIDIeakCyNpSpD86D6yAyJt5NrYMtwrjic+e8Y/K3bPgJvwHodkH3pfG3s
         gnpg==
X-Gm-Message-State: AOAM533uOktx7VS7qrIidwcf+Mr+62CCxPLA0bXeG81g8wXxOF/D1GXh
	idYzNQjkJtgSkFNfDKIN+dg=
X-Google-Smtp-Source: ABdhPJz+1u+t4XYMb612jZVRZC2eq6EVWswZWptItrWPSpDVi083nnf1kcuFDG/7rvR4ghR/eM6m5A==
X-Received: by 2002:a63:5505:: with SMTP id j5mr4265664pgb.250.1627571608984;
        Thu, 29 Jul 2021 08:13:28 -0700 (PDT)
Subject: Re: [PATCH 09/13] DMA: Add dma_map_decrypted/dma_unmap_encrypted()
 function
From: Tianyu Lan <ltykernel@gmail.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com, kys@microsoft.com, haiyangz@microsoft.com,
 sthemmin@microsoft.com, wei.liu@kernel.org, decui@microsoft.com,
 tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org,
 hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, m.szyprowski@samsung.com,
 robin.murphy@arm.com, thomas.lendacky@amd.com, brijesh.singh@amd.com,
 ardb@kernel.org, Tianyu.Lan@microsoft.com, rientjes@google.com,
 martin.b.radev@gmail.com, akpm@linux-foundation.org, rppt@kernel.org,
 kirill.shutemov@linux.intel.com, aneesh.kumar@linux.ibm.com,
 krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-10-ltykernel@gmail.com>
Message-ID: <da69c920-c12a-b4ad-7554-68b9e99bb6ce@gmail.com>
Date: Thu, 29 Jul 2021 23:13:11 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210728145232.285861-10-ltykernel@gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit


Hi Christoph:
      Could you have a look at this patch and the following patch
"[PATCH 10/13] x86/Swiotlb: Add Swiotlb bounce buffer remap function
for HV IVM" These two patches follows your previous comments and add 
dma_map_decrypted/dma_unmap_decrypted(). I don't add arch prefix because 
each platform may populate their callbacks into dma memory decrypted ops.

Thanks.

On 7/28/2021 10:52 PM, Tianyu Lan wrote:
> From: Tianyu Lan <Tianyu.Lan@microsoft.com>
> 
> In Hyper-V Isolation VM with AMD SEV, swiotlb boucne buffer
> needs to be mapped into address space above vTOM and so
> introduce dma_map_decrypted/dma_unmap_encrypted() to map/unmap
> bounce buffer memory. The platform can populate man/unmap callback
> in the dma memory decrypted ops.
> 
> Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
> ---
>   include/linux/dma-map-ops.h |  9 +++++++++
>   kernel/dma/mapping.c        | 22 ++++++++++++++++++++++
>   2 files changed, 31 insertions(+)
> 
> diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
> index 0d53a96a3d64..01d60a024e45 100644
> --- a/include/linux/dma-map-ops.h
> +++ b/include/linux/dma-map-ops.h
> @@ -71,6 +71,11 @@ struct dma_map_ops {
>   	unsigned long (*get_merge_boundary)(struct device *dev);
>   };
>   
> +struct dma_memory_decrypted_ops {
> +	void *(*map)(void *addr, unsigned long size);
> +	void (*unmap)(void *addr);
> +};
> +
>   #ifdef CONFIG_DMA_OPS
>   #include <asm/dma-mapping.h>
>   
> @@ -374,6 +379,10 @@ static inline void debug_dma_dump_mappings(struct device *dev)
>   }
>   #endif /* CONFIG_DMA_API_DEBUG */
>   
> +void *dma_map_decrypted(void *addr, unsigned long size);
> +int dma_unmap_decrypted(void *addr, unsigned long size);
> +
>   extern const struct dma_map_ops dma_dummy_ops;
> +extern struct dma_memory_decrypted_ops dma_memory_generic_decrypted_ops;
>   
>   #endif /* _LINUX_DMA_MAP_OPS_H */
> diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
> index 2b06a809d0b9..6fb150dc1750 100644
> --- a/kernel/dma/mapping.c
> +++ b/kernel/dma/mapping.c
> @@ -13,11 +13,13 @@
>   #include <linux/of_device.h>
>   #include <linux/slab.h>
>   #include <linux/vmalloc.h>
> +#include <asm/set_memory.h>
>   #include "debug.h"
>   #include "direct.h"
>   
>   bool dma_default_coherent;
>   
> +struct dma_memory_decrypted_ops dma_memory_generic_decrypted_ops;
>   /*
>    * Managed DMA API
>    */
> @@ -736,3 +738,23 @@ unsigned long dma_get_merge_boundary(struct device *dev)
>   	return ops->get_merge_boundary(dev);
>   }
>   EXPORT_SYMBOL_GPL(dma_get_merge_boundary);
> +
> +void *dma_map_decrypted(void *addr, unsigned long size)
> +{
> +	if (set_memory_decrypted((unsigned long)addr,
> +				 size / PAGE_SIZE))
> +		return NULL;
> +
> +	if (dma_memory_generic_decrypted_ops.map)
> +		return dma_memory_generic_decrypted_ops.map(addr, size);
> +	else
> +		return addr;
> +}
> +
> +int dma_unmap_encrypted(void *addr, unsigned long size)
> +{
> +	if (dma_memory_generic_decrypted_ops.unmap)
> +		dma_memory_generic_decrypted_ops.unmap(addr);
> +
> +	return set_memory_encrypted((unsigned long)addr, size / PAGE_SIZE);
> +}
> 


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 15:23:13 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 15:23:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161984.297211 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m97sK-0003va-8a; Thu, 29 Jul 2021 15:23:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161984.297211; Thu, 29 Jul 2021 15:23:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m97sK-0003vT-4V; Thu, 29 Jul 2021 15:23:08 +0000
Received: by outflank-mailman (input) for mailman id 161984;
 Thu, 29 Jul 2021 15:23:07 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m97sJ-0003vN-00
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 15:23:07 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m97sF-0000Ke-Ny; Thu, 29 Jul 2021 15:23:03 +0000
Received: from 54-240-197-232.amazon.com ([54.240.197.232]
 helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m97sF-00060j-Hd; Thu, 29 Jul 2021 15:23:03 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=4oYLqXu9qM5umKlMiN8kk9cvkLylv/S7RA/yT8wVoaw=; b=bbx0RS4zEDotLt8I7cGHPrP7+7
	DBYedWuJW9gAj88vz0hu+CbZWv6ZXnqtJZjJa7MDythmrM1UmvC6MWbIHQCW4CIVVDKC1cm7jme2p
	wFdzMXxTdLWMruv54F/VLfCmhjLzWUcow28VH1zXW385obUuJHJDg9lbOmGVQUm3Nf0s=;
Subject: Re: [PATCH] tools/xenstored: Don't assume errno will not be
 overwritten in lu_arch()
To: xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, Juergen Gross <jgross@suse.com>
References: <20210729110647.25500-1-julien@xen.org>
From: Julien Grall <julien@xen.org>
Message-ID: <bbdbc7a9-c82e-2656-6a03-553ff55a2101@xen.org>
Date: Thu, 29 Jul 2021 16:23:01 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <20210729110647.25500-1-julien@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit



On 29/07/2021 12:06, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
> 
> At the moment, do_control_lu() will set errno to 0 before calling
> lu_arch() and then check errno. The expectation is nothing in lu_arch()
> will change the value unless there is an error.
> 
> However, per errno(3), a function that succeeds is allowed to change
> errno. In fact, syslog() will overwrite errno if the logs are rotated
> at the time it is called.
> 
> To prevent any further issue, errno is now always set before
> returning NULL.
> 
> Additionally, errno is only checked when returning NULL so the client
> can see the error message if there is any.
> 
> Reported-by: Michael Kurth <mku@amazon.com>
> Signed-off-by: Julien Grall <jgrall@amazon.com>
> ---
>   tools/xenstore/xenstored_control.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/xenstore/xenstored_control.c b/tools/xenstore/xenstored_control.c
> index 6b68b79faac7..6fcb42095b59 100644
> --- a/tools/xenstore/xenstored_control.c
> +++ b/tools/xenstore/xenstored_control.c
> @@ -324,6 +324,7 @@ static const char *lu_binary_alloc(const void *ctx, struct connection *conn,
>   	lu_status->kernel_size = size;
>   	lu_status->kernel_off = 0;
>   
> +	errno = 0;
>   	return NULL;
>   }
>   
> @@ -339,6 +340,7 @@ static const char *lu_binary_save(const void *ctx, struct connection *conn,
>   	memcpy(lu_status->kernel + lu_status->kernel_off, data, size);
>   	lu_status->kernel_off += size;
>   
> +	errno = 0;
>   	return NULL;
>   }
>   

I forgot to update lu_binary(). I will respin the patch once I get some 
feedback.

Cheers,

> @@ -798,9 +800,8 @@ static int do_control_lu(void *ctx, struct connection *conn,
>   		if (!ret)
>   			return errno;
>   	} else {
> -		errno = 0;
>   		ret = lu_arch(ctx, conn, vec, num);
> -		if (errno)
> +		if (!ret && errno)
>   			return errno;
>   	}
>   
> 

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 16:05:57 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 16:05:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.161994.297229 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m98Xd-0008Mj-Gj; Thu, 29 Jul 2021 16:05:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 161994.297229; Thu, 29 Jul 2021 16:05:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m98Xd-0008Mc-DA; Thu, 29 Jul 2021 16:05:49 +0000
Received: by outflank-mailman (input) for mailman id 161994;
 Thu, 29 Jul 2021 16:05:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=QKS1=MV=intel.com=dave.hansen@srs-us1.protection.inumbo.net>)
 id 1m98Xb-0008MW-MA
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 16:05:47 +0000
Received: from mga05.intel.com (unknown [192.55.52.43])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f608567a-8941-493a-be1e-6ace6bc3242e;
 Thu, 29 Jul 2021 16:05:42 +0000 (UTC)
Received: from fmsmga008.fm.intel.com ([10.253.24.58])
 by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 29 Jul 2021 09:05:40 -0700
Received: from lixi1-mobl.amr.corp.intel.com (HELO [10.212.184.150])
 ([10.212.184.150])
 by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 29 Jul 2021 09:05:36 -0700
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f608567a-8941-493a-be1e-6ace6bc3242e
X-IronPort-AV: E=McAfee;i="6200,9189,10060"; a="298499550"
X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; 
   d="scan'208";a="298499550"
X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; 
   d="scan'208";a="476455054"
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Tianyu Lan <ltykernel@gmail.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
 <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
 <0d956a05-7d24-57a0-f4a9-dccc849b52fc@gmail.com>
 <ec1d4cfd-bbbc-e27a-7589-e85d9f0438f4@intel.com>
 <8df2845d-ee90-56d0-1228-adebb103ec37@gmail.com>
From: Dave Hansen <dave.hansen@intel.com>
Autocrypt: addr=dave.hansen@intel.com; keydata=
 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
 z5cecg==
Message-ID: <7a2ddcca-e249-ba63-8709-e355fcef2d41@intel.com>
Date: Thu, 29 Jul 2021 09:05:34 -0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <8df2845d-ee90-56d0-1228-adebb103ec37@gmail.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/29/21 8:02 AM, Tianyu Lan wrote:
>>
> 
> There is x86_hyper_type to identify hypervisor type and we may check
> this variable after checking X86_FEATURE_HYPERVISOR.
> 
> static inline bool hv_is_isolation_supported(void)
> {
>     if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
>         return 0;
> 
>         if (x86_hyper_type != X86_HYPER_MS_HYPERV)
>                 return 0;
> 
>     // out of line function call:
>     return __hv_is_isolation_supported();
> }   

Looks fine.  You just might want to use this existing helper:

static inline bool hypervisor_is_type(enum x86_hypervisor_type type)
{
        return x86_hyper_type == type;
}



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 16:30:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 16:30:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162005.297247 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m98vb-000348-MY; Thu, 29 Jul 2021 16:30:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162005.297247; Thu, 29 Jul 2021 16:30:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m98vb-000341-JM; Thu, 29 Jul 2021 16:30:35 +0000
Received: by outflank-mailman (input) for mailman id 162005;
 Thu, 29 Jul 2021 16:30:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=TEav=MV=oracle.com=konrad.wilk@srs-us1.protection.inumbo.net>)
 id 1m98va-00033v-4c
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 16:30:34 +0000
Received: from mx0b-00069f02.pphosted.com (unknown [205.220.177.32])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3e3d8972-39bc-4901-9af2-1ac2cf86389c;
 Thu, 29 Jul 2021 16:30:33 +0000 (UTC)
Received: from pps.filterd (m0246630.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16TG75eU022227; Thu, 29 Jul 2021 16:29:34 GMT
Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79])
 by mx0b-00069f02.pphosted.com with ESMTP id 3a3cdptctc-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Thu, 29 Jul 2021 16:29:34 +0000
Received: from pps.filterd (userp3020.oracle.com [127.0.0.1])
 by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16TGFKUf152569;
 Thu, 29 Jul 2021 16:29:32 GMT
Received: from nam11-dm6-obe.outbound.protection.outlook.com
 (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174])
 by userp3020.oracle.com with ESMTP id 3a23517rts-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Thu, 29 Jul 2021 16:29:32 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com (2603:10b6:a03:85::27)
 by BY5PR10MB4114.namprd10.prod.outlook.com (2603:10b6:a03:211::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25; Thu, 29 Jul
 2021 16:29:29 +0000
Received: from BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::cdbb:4673:98bd:7f2c]) by BYAPR10MB2999.namprd10.prod.outlook.com
 ([fe80::cdbb:4673:98bd:7f2c%5]) with mapi id 15.20.4352.031; Thu, 29 Jul 2021
 16:29:29 +0000
Received: from fedora (130.44.160.152) by
 MN2PR06CA0016.namprd06.prod.outlook.com (2603:10b6:208:23d::21) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.20 via Frontend
 Transport; Thu, 29 Jul 2021 16:29:23 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 3e3d8972-39bc-4901-9af2-1ac2cf86389c
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc
 : subject : message-id : references : content-type : in-reply-to :
 mime-version; s=corp-2021-07-09;
 bh=ZPLuosigDK6fhIIei+XFf9vUybkegP3dYIBQy4dJ4Kw=;
 b=VGDNVjiBMd+3TUwwBCxMvk7UeM0VsL/aevkY3oPeaNK6HZjJ5ZQAg996/D5xi7wtYYst
 WL66wXSugvEKaU95o5nvlZ1G76VqLq3vDPP8mHz/O3OdeHhP8bne4ohYcBqFjw+JAw3z
 xoHekTAr3EMl4D1W61ikIPYN9V1R1qbd7sRFy1MmlTdyEc8+rctOzgbDkzmSZ2y8ecQv
 gyoKojUzyw0nHiNHlOp5lxOH0l/cqh+it5Bx22i2ApoJemJKvBhpgUHxA5oS8txfQXRW
 wX0GNPbFUECFVHcblffYqpxBnR8TBwHYyc2kiCi4DBu/CqqG+N0et3OsromXmfr0HE3k Kw== 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc
 : subject : message-id : references : content-type : in-reply-to :
 mime-version; s=corp-2020-01-29;
 bh=ZPLuosigDK6fhIIei+XFf9vUybkegP3dYIBQy4dJ4Kw=;
 b=xag2rAPCvFDQtPGQDVDvaM2D00PK51fgX3p/9g+7soju7dhThOoxo4BF3BEW2R6I9+Yc
 xQCdsPiLW7pUDS951N73PAWM9sXFbdQCoKd5NXeexUcKaaYIYiK+4ww3Tf83Y6g1qRR0
 SP28hSe2JdJia8QBIue36xXwxogSunEi7LPTja+pATvbC2GyFCic6qw6IjZtZnZx2jUx
 AkOGQo1B7qRdpejWLuvO34Gh/4Et2VjrevNvRjT1QRFXnSAXMXXP8Ytu544BkFy15v9O
 aUTlWUpsFGszDr32LzVPWQQMeB9VifU6RLaRv8onxS+LIyu9tYHo6xXR60zJC68FWR3z 3A== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=T0ej2/STHCa2tlcVCHNOzKSUedG4WWqadtNcRArJ10xg8scxr3hMvw66D+OtXHPRFlhWHWOEUBWVRV48q7zepCPu8RACnPxNCGfVT7FmMyze0ydLNGVRWqO2BS06QcGkme6VbdRcvfd5A8jzj4aQdogChi1NhnMams6BrI+wKxbuxeUY+33Q7+CECcpCvA1vTIKuYXe263iIjGYcNdeV16kKvHJYVBJG9LNC8rChmIRHUsyreXgisuExnCLqOq7Bu2I+ohIWhq2xbDqwzbay5ejYi+8q81SfMG3S+pdLHeUB0wChA2dfSCd/cAXN44wKlIM7aBulWzA3tVVxXAOmLg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZPLuosigDK6fhIIei+XFf9vUybkegP3dYIBQy4dJ4Kw=;
 b=BOp77tJPRjSA4+YW2rEiDU004lbMf39t2BCE9kt6o7XM9SocSLJTjLUg5OpkYNfFRgxoFRQYVxdahtimjCDQtjpBzo0XHKgVEDdnHE/8vEp1ghaMFMWGwPH20zk/9CkJ068BngRSx8clg9/g9c5nBKpxDx8kOE+hWO+qnF9LQSmKDAOIof/nbwx0guYYI0JbcRDhlt4LfD+Ujv3V04FocfQLiHlfy/J/Dy2tCpKifF9qQjzIOd4kztzxiYocQaAMVOpXbjhuk96pndARzdr4bAoxNmlg/wT8KoMO75T8mza1C9zqSdJQVbDZ+Z9xKkeWIBDcOk9b3bYz2T2o1qUH1A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ZPLuosigDK6fhIIei+XFf9vUybkegP3dYIBQy4dJ4Kw=;
 b=cGJW5GjLtta6ujZJ7PTnBuLeJ3/uX0+AmzpwM+oFXKxbQRVtOfTudYL8fGuUpbtBUIly4tbctSy5jvha2h1UBwZDGCwsA06mvD7jXheBnhFxOV9imbylhts6qIPSvDul8s/ZRne9YMKNyPLDS7HuorrGs7alVh8GjBh9nEs7IJQ=
Authentication-Results: gmail.com; dkim=none (message not signed)
 header.d=none;gmail.com; dmarc=none action=none header.from=oracle.com;
Date: Thu, 29 Jul 2021 12:29:21 -0400
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Tianyu Lan <ltykernel@gmail.com>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
        wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
        mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
        dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
        boris.ostrovsky@oracle.com, jgross@suse.com, sstabellini@kernel.org,
        joro@8bytes.org, will@kernel.org, davem@davemloft.net, kuba@kernel.org,
        jejb@linux.ibm.com, martin.petersen@oracle.com, arnd@arndb.de,
        hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com,
        thomas.lendacky@amd.com, brijesh.singh@amd.com, ardb@kernel.org,
        Tianyu.Lan@microsoft.com, rientjes@google.com,
        martin.b.radev@gmail.com, akpm@linux-foundation.org, rppt@kernel.org,
        kirill.shutemov@linux.intel.com, aneesh.kumar@linux.ibm.com,
        krish.sadhukhan@oracle.com, saravanand@fb.com,
        xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
        keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
        michael.h.kelley@microsoft.com, iommu@lists.linux-foundation.org,
        linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
        linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
        netdev@vger.kernel.org, vkuznets@redhat.com, anparri@microsoft.com
Subject: Re: [PATCH 10/13] x86/Swiotlb: Add Swiotlb bounce buffer remap
 function for HV IVM
Message-ID: <YQLXYVaWWdBfF7Sm@fedora>
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-11-ltykernel@gmail.com>
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20210728145232.285861-11-ltykernel@gmail.com>
X-ClientProxiedBy: MN2PR06CA0016.namprd06.prod.outlook.com
 (2603:10b6:208:23d::21) To BYAPR10MB2999.namprd10.prod.outlook.com
 (2603:10b6:a03:85::27)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 792afe9f-db99-474a-9703-08d952ae0986
X-MS-TrafficTypeDiagnostic: BY5PR10MB4114:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<BY5PR10MB4114163EAC2BD7916940488689EB9@BY5PR10MB4114.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:5516;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	qfZZFDZhdcvvzvE802Hs5K2Nzb1is5/8cXMdubZdWV5Kiz687C9hoY9z0FXGNj9Jt3QJOdjmrscwfsk9sMiP2gOTpk/yC5yzbRYgjXC5p9hjm9glEswb7Es4wwGZWpy3sTMMcaCNDwVbY2GLSG7ftuDBs8EDAZgejIr/99WnJnm1mSRYhq6amf2i+Cb/55ozmaNVpMDsKo7OBuG542BNe2jBrfipkAq+Iu5fTDD1BQ7B0dzYwQ3rBFZLa6zQIycf9cNi4HZ+hNlqmJDfCWwGzYAddGJ6eIS1JbfdtSDQpP4W3j37gtbrQOc8iZAPMNGGgnuTZziwhakJ1LKUwbi+m60PDd4jcYJCXJbSG3EerQulUezuihjjCUxRVI5Jta/R0y9eGyNUr/MKzWbpMcrGrX4NpIg8VP8WGr1ayIFqQMLDpxSOb0a8M2RwbEzwBc+TIR9W5Gqa8Fp0LWiC2qC3a6WElFYCovqTNxJtT8eELS9+2g9flCWACeGNGrSIwokFzKIXebU01eopZ4UfUbnKvBuOIM7ds7sRJ4cgffsls6H2IfZFwj2AyVm+EbqAOKmSF54WRCYvZuETgIxPm6rcagugODoQv1eysCTU/daarOZs9e7j7vTKcT3XeaPUxEghcrY3f6S4yabX56Icvec9uPifKdwNFGADhWBp5kChPkfTfRZ+h9bXQMtKg9D77p8zUDxiRTP/iclvrKiGbjbvGA==
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2999.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(7366002)(7406005)(33716001)(66476007)(7416002)(66556008)(66946007)(45080400002)(38100700002)(38350700002)(8936002)(956004)(9686003)(2906002)(508600001)(26005)(4326008)(83380400001)(5660300002)(52116002)(6496006)(55016002)(9576002)(8676002)(86362001)(186003)(6916009)(316002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	=?us-ascii?Q?l/39Mu3DFmDjSn/Li/PzEt9Tb0ZU1qb3cdof+uUbw8z3LrMdHVBUgL23HOq9?=
 =?us-ascii?Q?rRlaZla3NnCVse9mnjLa5cLv0GcAo1tvX/prQJeIwNh9jQQoNo5RZE0KKR6j?=
 =?us-ascii?Q?NMto1epWOGOBGX78R8lNIkWkOe02UqSPwQFKK7RDL5/r7pjum4tWzdPtn9Jb?=
 =?us-ascii?Q?WyA+QApdsnHSeSZ2oXtW1ro3B4ykOID90gejmBXbqoRqdBVJ12YFYSZVWVLD?=
 =?us-ascii?Q?zC/uDWIx/IdJxmBrJXIGjFLjELkjQLihgfLkwvX/BLELySsNyu1W0o2gTY7x?=
 =?us-ascii?Q?w2/1Ag2m0ATiWmU5n6lLYDAnQEMwsoFny1poC1pe/cgnmtzHNuWwnAmI5dya?=
 =?us-ascii?Q?jqVLPDftYFjOrnhXk7VbZObWFdRixbAQr8v/VOUXP2Ujv0U5rYS1+NYtlRCq?=
 =?us-ascii?Q?HrGGa265HnOAzuYNMDATGb4ArvZsG2ND7DKLwVKoUxphivcpp8dWt9cMi0aZ?=
 =?us-ascii?Q?BUiCMXf5NSUsf7sTgyx/YmUvQ0u9ymwwlk29eSKhD97u5N1hmlhhcQpTmmXA?=
 =?us-ascii?Q?KhhZ91XTNJBwYKpAez5LhTDQIIEAW9QxoxkRu1oKHOajLOvKvj+9mN2Ta2dk?=
 =?us-ascii?Q?JdJOvlhmhk8VDigu/aQUZptbe93t2rjp3gqquEjNCKqtEYpHA7Fs/6aSE7uD?=
 =?us-ascii?Q?gwo/rs4lMaiTlXwfCZIl111q6iJo+aklmBGie5Vh/ekA7e1SdnWryhcRpmBr?=
 =?us-ascii?Q?h3nnRvOr0Dr+A6tbE1DqsNE1995uPSV3eEaiUWx2Ks0nNNWAAYRmR4hU2CyB?=
 =?us-ascii?Q?SnaAED2yhtC5toU1EUMw3qwqe7uIO0NsWm9HhGvYlPU2RJ/XeqfzuxmLQVbW?=
 =?us-ascii?Q?tPbqHYZ1P8AyFXYU/ozTPerRMG9w0RytWCDj7gNN8LknhHdQXh8bmgNlDy+e?=
 =?us-ascii?Q?0hn+dqAQ8DNGc8Yn8Q+6gT2lGQaiy3G9tIV7jXhu2SiTKVpwPEwCv8hXYIeI?=
 =?us-ascii?Q?P+i8VYKzzogUwUe58ttWVa+EFtZvKysuHjFWvT4PoQ60SSI4Qm4aQ32mw1to?=
 =?us-ascii?Q?RoRkHTzqImt35jkYAjva/OBcARxaqwUgCsHmPrjrTaGMYfdhSEqeXQ7qMdqa?=
 =?us-ascii?Q?A/bju8JJ1OVG1N2GZPqmJJathSLpZSXkBA40cgC8d5Uj1NYxtySnl8qhiDAF?=
 =?us-ascii?Q?/tZip2TAgOUVOHBfMVLtV/1Q8x1w/m6QzroF+xwMEWjTSy8dx2o9ahN674AG?=
 =?us-ascii?Q?45E7jU4FZs87nXTrZYOcMx4tMi+6wCJAzv0+Ka+vLGw+Lw0jhbBPjCu8PyAk?=
 =?us-ascii?Q?TvHudErFPJsuuaB7xwNzFOZjU6nl1Vwxqg0nkDO2AR3KZCW+XJQdRFYWqfYa?=
 =?us-ascii?Q?NeAqH1ThC1M4X9SyMMrc9qCE?=
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 792afe9f-db99-474a-9703-08d952ae0986
X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2999.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2021 16:29:29.0556
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: 10ewHPKAZyzNWcBruF9y8ComuX0r1d58QxET0IVOG28C6eyJvH2TGM5jCKcBHyScYfkXvynvDfOX+6WW3y8hvg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4114
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10060 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0
 mlxlogscore=999 bulkscore=0 mlxscore=0 phishscore=0 suspectscore=0
 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2107140000 definitions=main-2107290102
X-Proofpoint-GUID: NmXwd-VwEZxv4oelekdSlwjZ16z0aVH_
X-Proofpoint-ORIG-GUID: NmXwd-VwEZxv4oelekdSlwjZ16z0aVH_

On Wed, Jul 28, 2021 at 10:52:25AM -0400, Tianyu Lan wrote:
> From: Tianyu Lan <Tianyu.Lan@microsoft.com>
> 
> In Isolation VM with AMD SEV, bounce buffer needs to be accessed via
> extra address space which is above shared_gpa_boundary
> (E.G 39 bit address line) reported by Hyper-V CPUID ISOLATION_CONFIG.
> The access physical address will be original physical address +
> shared_gpa_boundary. The shared_gpa_boundary in the AMD SEV SNP
> spec is called virtual top of memory(vTOM). Memory addresses below
> vTOM are automatically treated as private while memory above
> vTOM is treated as shared.
> 
> Use dma_map_decrypted() in the swiotlb code, store remap address returned
> and use the remap address to copy data from/to swiotlb bounce buffer.
> 
> Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
> ---
>  include/linux/swiotlb.h |  4 ++++
>  kernel/dma/swiotlb.c    | 11 ++++++++---
>  2 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> index f507e3eacbea..584560ecaa8e 100644
> --- a/include/linux/swiotlb.h
> +++ b/include/linux/swiotlb.h
> @@ -72,6 +72,9 @@ extern enum swiotlb_force swiotlb_force;
>   * @end:	The end address of the swiotlb memory pool. Used to do a quick
>   *		range check to see if the memory was in fact allocated by this
>   *		API.
> + * @vaddr:	The vaddr of the swiotlb memory pool. The swiotlb
> + *		memory pool may be remapped in the memory encrypted case and store
> + *		virtual address for bounce buffer operation.
>   * @nslabs:	The number of IO TLB blocks (in groups of 64) between @start and
>   *		@end. For default swiotlb, this is command line adjustable via
>   *		setup_io_tlb_npages.
> @@ -89,6 +92,7 @@ extern enum swiotlb_force swiotlb_force;
>  struct io_tlb_mem {
>  	phys_addr_t start;
>  	phys_addr_t end;
> +	void *vaddr;
>  	unsigned long nslabs;
>  	unsigned long used;
>  	unsigned int index;
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index 1fa81c096c1d..6866e5784b53 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -194,8 +194,13 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
>  		mem->slots[i].alloc_size = 0;
>  	}
>  
> -	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
> -	memset(vaddr, 0, bytes);
> +	mem->vaddr = dma_map_decrypted(vaddr, bytes);
> +	if (!mem->vaddr) {
> +		pr_err("Failed to decrypt memory.\n");

I am wondering if it would be worth returning an error code in this
function instead of just printing an error?

For this patch I think it is Ok, but perhaps going forward this would be
better done as I am thinking - is there some global guest->hyperv
reporting mechanism so that if this fails - it ends up being bubbled up
to the HyperV console-ish?

And ditto for other hypervisors?


> +		return;
> +	}
> +
> +	memset(mem->vaddr, 0, bytes);
>  }
>  
>  int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
> @@ -360,7 +365,7 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
>  	phys_addr_t orig_addr = mem->slots[index].orig_addr;
>  	size_t alloc_size = mem->slots[index].alloc_size;
>  	unsigned long pfn = PFN_DOWN(orig_addr);
> -	unsigned char *vaddr = phys_to_virt(tlb_addr);
> +	unsigned char *vaddr = mem->vaddr + tlb_addr - mem->start;
>  	unsigned int tlb_offset;
>  
>  	if (orig_addr == INVALID_PHYS_ADDR)
> -- 
> 2.25.1
> 


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 17:57:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 17:57:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162015.297265 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9AHS-0001u8-0x; Thu, 29 Jul 2021 17:57:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162015.297265; Thu, 29 Jul 2021 17:57:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9AHR-0001u1-U5; Thu, 29 Jul 2021 17:57:13 +0000
Received: by outflank-mailman (input) for mailman id 162015;
 Thu, 29 Jul 2021 17:57:13 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9AHR-0001tr-0a; Thu, 29 Jul 2021 17:57:13 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9AHQ-00031m-Qq; Thu, 29 Jul 2021 17:57:12 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9AHQ-0003e4-FY; Thu, 29 Jul 2021 17:57:12 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9AHQ-0003wH-F3; Thu, 29 Jul 2021 17:57:12 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Wxc871O8dw5QuPsCqWPB6ldB5ULxC0MEg2AeougNdjk=; b=hCNXJr+Xt8wvRUQsDWO2Xk+c4s
	+xNyr7dQUSzXuPrhOn99n21g8m78W9U+IuCb8ZYn1JNfsxL/w0qSslMlrmueQl47K7fPMaZcJYzt2
	neqrFGT+NiDUroPFnNYEHxM7V4Dalfo6fTm+Yz5xBfH2QHbdYVpDE903ScyvgQ1o0Qkw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164030-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 164030: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:allowable
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=253dccefb5cb05c8a017150c34daf810776d914c
X-Osstest-Versions-That:
    linux=0a0beb1f9120cf49a429e12f4ea69ddd74471d68
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 17:57:12 +0000

flight 164030 linux-5.4 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164030/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10   fail REGR. vs. 163985

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

version targeted for testing:
 linux                253dccefb5cb05c8a017150c34daf810776d914c
baseline version:
 linux                0a0beb1f9120cf49a429e12f4ea69ddd74471d68

Last test of basis   163985  2021-07-25 12:42:25 Z    4 days
Testing same since   164023  2021-07-28 11:45:03 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Aaron Brown <aaron.f.brown@intel.com>
  Alain Volmat <alain.volmat@foss.st.com>
  Aleksandr Loktionov <aleksandr.loktionov@intel.com>
  Alexander Egorenkov <egorenar@linux.ibm.com>
  Alexander Tsoy <alexander@tsoy.me>
  Amelie Delaunay <amelie.delaunay@foss.st.com>
  Anand Jain <anand.jain@oracle.com>
  Andre Przywara <andre.przywara@arm.com>
  Andrew Morton <akpm@linux-foundation.org>
  Ard Biesheuvel <ardb@kernel.org>
  Arnaldo Carvalho de Melo <acme@redhat.com>
  Axel Lin <axel.lin@ingics.com>
  Bjorn Helgaas <bhelgaas@google.com>
  Carsten Schmid <carsten_schmid@mentor.com>
  Casey Chen <cachen@purestorage.com>
  Charles Baylis <cb-kernel@fishzet.co.uk>
  Christoph Hellwig <hch@lst.de>
  Christophe JAILLET <christophe.jaillet@wanadoo.fr>
  Clark Wang <xiaoning.wang@nxp.com>
  Colin Ian King <colin.king@canonical.com>
  Daniel Borkmann <daniel@iogearbox.net>
  Daniel Vetter <daniel.vetter@ffwll.ch>
  David Howells <dhowells@redhat.com>
  David S. Miller <davem@davemloft.net>
  David Sterba <dsterba@suse.com>
  Dmitry Bogdanov <d.bogdanov@yadro.com>
  Doug Berger <opendmb@gmail.com>
  Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
  Eric Dumazet <edumazet@google.com>
  Evan Quan <evan.quan@amd.com>
  Florian Fainelli <f.fainelli@gmail.com>
  Frank Wunderlich <frank-w@public-files.de>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guangbin Huang <huangguangbin2@huawei.com>
  Guenter Roeck <linux@roeck-us.net>
  Gustavo A. R. Silva <gustavoars@kernel.org>
  Hangbin Liu <liuhangbin@gmail.com>
  Haoran Luo <www@aegistudio.net>
  Heiko Carstens <hca@linux.ibm.com>
  Heiner Kallweit <hkallweit1@gmail.com>
  Huang Pei <huangpei@loongson.cn>
  Hugh Dickins <hughd@google.com>
  Ian Ray <ian.ray@ge.com>
  Ilya Dryomov <idryomov@gmail.com>
  Ilya Leoshkevich <iii@linux.ibm.com>
  Jakub Fišer <jakub@ufiseru.cz>
  Jakub Kicinski <kuba@kernel.org>
  Jedrzej Jagielski <jedrzej.jagielski@intel.com>
  Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  Jian Shen <shenjian15@huawei.com>
  Johan Hovold <johan@kernel.org>
  John Fastabend <john.fastabend@gmail.com>
  John Keeping <john@metanate.com>
  Jon Hunter <jonathanh@nvidia.com>
  Jonathan Cameron <Jonathan.Cameron@huawei.com>
  Julian Sikorski <belegdol+github@gmail.com>
  Julian Sikorski <belegdol@gmail.com>
  Linus Torvalds <torvalds@linux-foundation.org>
  Linus Walleij <linus.walleij@linaro.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Lokesh Gidra <lokeshgidra@google.com>
  Marc Zyngier <maz@kernel.org>
  Marcelo Henrique Cerri <marcelo.cerri@canonical.com>
  Marco De Marco <marco.demarco@posteo.net>
  Marek Behún <kabel@kernel.org>
  Marek Vasut <marex@denx.de>
  Mark Brown <broonie@kernel.org>
  Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
  Markus Boehme <markubo@amazon.com>
  Martin K. Petersen <martin.petersen@oracle.com>
  Mathias Nyman <mathias.nyman@linux.intel.com>
  Maxim Schwalm <maxim.schwalm@gmail.com>
  Maxime Ripard <maxime@cerno.tech>
  Michael Chan <michael.chan@broadcom.com>
  Michael Ellerman <mpe@ellerman.id.au>
  Michael Neuling <mikey@neuling.org>
  Michal Suchanek <msuchanek@suse.de>
  Mike Christie <michael.christie@oracle.com>
  Mike Kravetz <mike.kravetz@oracle.com>
  Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
  Moritz Fischer <mdf@kernel.org>
  Namhyung Kim <namhyung@kernel.org>
  Nguyen Dinh Phi <phind.uet@gmail.com>
  Nicholas Piggin <npiggin@gmail.com>
  Nicolas Dichtel <nicolas.dichtel@6wind.com>
  Paolo Abeni <pabeni@redhat.com>
  Pavel Skripkin <paskripkin@gmail.com>
  Peilin Ye <peilin.ye@bytedance.com>
  Peter Collingbourne <pcc@google.com>
  Peter Hess <peter.hess@ph-home.de>
  Peter Ujfalusi <peter.ujfalusi@ti.com>
  Raju Rangoju <rajur@chelsio.com>
  Randy Dunlap <rdunlap@infradead.org>
  Riccardo Mancini <rickyman7@gmail.com>
  Robin Geuze <robin.geuze@nl.team.blue>
  Roman Gushchin <guro@fb.com>
  Sasha Levin <sashal@kernel.org>
  Sasha Neftin <sasha.neftin@intel.com>
  Sayanta Pattanayak <sayanta.pattanayak@arm.com>
  Sebastian Reichel <sebastian.reichel@collabora.com>
  Shahjada Abul Husain <shahjada@chelsio.com>
  Shuah Khan <skhan@linuxfoundation.org>
  Somnath Kotur <somnath.kotur@broadcom.com>
  Stephan Gerhold <stephan@gerhold.net>
  Steven Rostedt (VMware) <rostedt@goodmis.org>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  Sudip Mukherjee <sudipm.mukherjee@gmail.com>
  Takashi Iwai <tiwai@suse.de>
  Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
  Thierry Reding <thierry.reding@gmail.com>
  Tobias Klauser <tklauser@distanz.ch>
  Tom Rix <trix@redhat.com>
  Tony Brelinski <tonyx.brelinski@intel.com>
  Tony Nguyen <anthony.l.nguyen@intel.com>
  Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
  Vasily Gorbik <gor@linux.ibm.com>
  Vasundhara Volam <vasundhara-v.volam@broadcom.com>
  Vincent Palatin <vpalatin@chromium.org>
  Vinicius Costa Gomes <vinicius.gomes@intel.com>
  Wei Wang <weiwan@google.com>
  Xin Long <lucien.xin@gmail.com>
  Yajun Deng <yajun.deng@linux.dev>
  Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
  Zhihao Cheng <chengzhihao1@huawei.com>
  Ziyang Xuan <william.xuanziyang@huawei.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   0a0beb1f9120..253dccefb5cb  253dccefb5cb05c8a017150c34daf810776d914c -> tested/linux-5.4


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162033.297331 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRq-00071V-73; Thu, 29 Jul 2021 20:16:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162033.297331; Thu, 29 Jul 2021 20:16:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRq-00071H-3r; Thu, 29 Jul 2021 20:16:06 +0000
Received: by outflank-mailman (input) for mailman id 162033;
 Thu, 29 Jul 2021 20:16:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRp-0005pZ-41
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:05 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4d2dd921-8865-4003-bb0a-f53759e4d041;
 Thu, 29 Jul 2021 20:15:56 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRX-0008VN-5W; Thu, 29 Jul 2021 14:15:48 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRT-0001TY-TD; Thu, 29 Jul 2021 14:15:43 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4d2dd921-8865-4003-bb0a-f53759e4d041
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=/xaVvtLmcUu039UJFO4qpFCPm3zd9EnehJHJPiaD5YM=; b=FeUD6Lr0B6ovEC33GCpqn+9LEy
	0hk8FWsPd/l2LIXUGdAH+LpdZ1H1Uf2aUgGx9XsMHZa9Yn4r89BdnEVdXEa7mILvrPwhQ7b70ydcR
	4PXusPTxVwHjfJZ4qwE9S00tg6SPbtx5oz8UolyzAhMvZM/carIYgtIRp0K4hMNRVZl0sZTONoLLM
	9iNF0fjknv7t7G8k94xYwrNxZed9o0X+CROHPwOAEUiCIqfMNwaZlzvDPSsvigGp8tuUWqV6pveMT
	+yf7ok1iTiaPDnBjAgYjZEPHdH/ggUmkQbk4h2HG05J3IdOZhTxJTJyNc5Sqo6OMZcSwK/9vOc7Cd
	5mbjp9iw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Joerg Roedel <joro@8bytes.org>,
	Will Deacon <will@kernel.org>
Date: Thu, 29 Jul 2021 14:15:21 -0600
Message-Id: <20210729201539.5602-4-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, joro@8bytes.org, will@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 03/21] iommu: Return full error code from iommu_map_sg[_atomic]()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Convert to ssize_t return code so the return code from __iommu_map()
can be returned all the way down through dma_iommu_map_sg().

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
---
 drivers/iommu/iommu.c | 15 +++++++--------
 include/linux/iommu.h | 22 +++++++++++-----------
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 5419c4b9f27a..bf971b4e34aa 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -2567,9 +2567,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain,
 }
 EXPORT_SYMBOL_GPL(iommu_unmap_fast);
 
-static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-			     struct scatterlist *sg, unsigned int nents, int prot,
-			     gfp_t gfp)
+static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		struct scatterlist *sg, unsigned int nents, int prot,
+		gfp_t gfp)
 {
 	const struct iommu_ops *ops = domain->ops;
 	size_t len = 0, mapped = 0;
@@ -2610,19 +2610,18 @@ static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 	/* undo mappings already done */
 	iommu_unmap(domain, iova, mapped);
 
-	return 0;
-
+	return ret;
 }
 
-size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-		    struct scatterlist *sg, unsigned int nents, int prot)
+ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		     struct scatterlist *sg, unsigned int nents, int prot)
 {
 	might_sleep();
 	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
 }
 EXPORT_SYMBOL_GPL(iommu_map_sg);
 
-size_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
+ssize_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
 		    struct scatterlist *sg, unsigned int nents, int prot)
 {
 	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 32d448050bf7..9369458ba1bd 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -414,11 +414,11 @@ extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
 extern size_t iommu_unmap_fast(struct iommu_domain *domain,
 			       unsigned long iova, size_t size,
 			       struct iommu_iotlb_gather *iotlb_gather);
-extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-			   struct scatterlist *sg,unsigned int nents, int prot);
-extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
-				  unsigned long iova, struct scatterlist *sg,
-				  unsigned int nents, int prot);
+extern ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		struct scatterlist *sg, unsigned int nents, int prot);
+extern ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				   unsigned long iova, struct scatterlist *sg,
+				   unsigned int nents, int prot);
 extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
 extern void iommu_set_fault_handler(struct iommu_domain *domain,
 			iommu_fault_handler_t handler, void *token);
@@ -679,18 +679,18 @@ static inline size_t iommu_unmap_fast(struct iommu_domain *domain,
 	return 0;
 }
 
-static inline size_t iommu_map_sg(struct iommu_domain *domain,
-				  unsigned long iova, struct scatterlist *sg,
-				  unsigned int nents, int prot)
+static inline ssize_t iommu_map_sg(struct iommu_domain *domain,
+				   unsigned long iova, struct scatterlist *sg,
+				   unsigned int nents, int prot)
 {
-	return 0;
+	return -ENODEV;
 }
 
-static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+static inline ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
 				  unsigned long iova, struct scatterlist *sg,
 				  unsigned int nents, int prot)
 {
-	return 0;
+	return -ENODEV;
 }
 
 static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162031.297307 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRl-0006OX-Lr; Thu, 29 Jul 2021 20:16:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162031.297307; Thu, 29 Jul 2021 20:16:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRl-0006OK-IQ; Thu, 29 Jul 2021 20:16:01 +0000
Received: by outflank-mailman (input) for mailman id 162031;
 Thu, 29 Jul 2021 20:16:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRk-0005pZ-3t
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:00 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 78ce3b90-0064-4aab-b77e-33ad536ef136;
 Thu, 29 Jul 2021 20:15:54 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0008VM-N8; Thu, 29 Jul 2021 14:15:47 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRT-0001TV-PR; Thu, 29 Jul 2021 14:15:43 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 78ce3b90-0064-4aab-b77e-33ad536ef136
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=BqE/2wCCjH4FvfGKjQ09Cv01+9Px9vk9cMsrkFQoCn0=; b=UKIatoBmrCpSphyHjiY30+Y1OG
	CY9raw8PJFoIaw2b6o5szEv3xbVs91s3wNGAYZu8i4P6a660NOAY/g6x8HspQTJyFrjhq0lPulGcF
	v07xfdnRxyYUor5/nHo8jyHPSdyBF+7HKkOQgh/ObDv6lrzlYMt+Cl5pMBs1tdIjqeBtInWDeMcpS
	UKmA3BGqOsrwUqFs0m5PnSIDkvdxIcJSuq9ljO6Bp/jBY/y/yUpAZ2IgJluFfQdhe12F5LWJdUNr3
	z4nBLGUTT9E7d+rhQBcQmWwdw6NZNHqHJSKtvZtcLRxrCzCo9CF/mQQmviIJVR6T6a10Vsb35ajum
	EtSXlZWg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 29 Jul 2021 14:15:20 -0600
Message-Id: <20210729201539.5602-3-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 02/21] dma-direct: Return appropriate error code from dma_direct_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Now that the map_sg() op expects error codes instead of return zero on
error, convert dma_direct_map_sg() to return an error code. Per the
documentation for dma_map_sgtable(), -EIO is returned due to an
DMA_MAPPING_ERROR with unknown cause.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/direct.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index f737e3347059..f33ceb68aef2 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -411,7 +411,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
 
 out_unmap:
 	dma_direct_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
-	return 0;
+	return -EIO;
 }
 
 dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162034.297343 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRr-0007KX-Hg; Thu, 29 Jul 2021 20:16:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162034.297343; Thu, 29 Jul 2021 20:16:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRr-0007KO-EC; Thu, 29 Jul 2021 20:16:07 +0000
Received: by outflank-mailman (input) for mailman id 162034;
 Thu, 29 Jul 2021 20:16:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRq-0005tB-EK
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:06 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c7e59648-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:15:56 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0008VK-N8; Thu, 29 Jul 2021 14:15:48 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRT-0001TQ-GA; Thu, 29 Jul 2021 14:15:43 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c7e59648-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:Message-Id:Date:Cc:To:From
	:references:content-disposition:in-reply-to;
	bh=7rAmHnoYgxgYjh3HpXE3zIryStVPnDAXEkL4Vf4StFI=; b=L5MNdXu2RkyJTJf1U2kRvC9rdG
	Fi2zQ1Jo3u1ckG/sUDTfnnmRyNWyUMZVsCZU5ucjiSE8C7rbOZzmh1mIa+nIyi3p3yQ8QIqp8/8xs
	cM2jhkuv4pfRuvlROkJ6z1cv/rfzQGi+rw77mVN27FJvbTmHpYWyID7OpgY0TpEjoXxQB12zUEd2r
	qyL1Zv3YKYpHBX2i1FpWwa4P7p3I9m48iblFE7zjLA4rM23n63DmfJ4gAgeBygMx7BL4dr76mc0ma
	v5/O9IEdo/7kZsErHJx4AGKvqOqjGEMEdx65oFZOavjAfDwmsYJuN/6fgpzQ96CduuqfEm7ibrvmU
	gsRgMH7A==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 29 Jul 2021 14:15:18 -0600
Message-Id: <20210729201539.5602-1-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 00/21] .map_sg() error cleanup
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Hi,

This v3 of the series is spun out and expanded from my work to add
P2PDMA support to DMA map operations[1]. v2 is at [2]. The main changes
in v1 are to more carefully define the meaning of the error codes for
dma_map_sgtable().

The P2PDMA work requires distinguishing different error conditions in
a map_sg operation. dma_map_sgtable() already allows for returning an
error code (where as dma_map_sg() is only allowed to return zero)
however, it currently only returns -EINVAL when a .map_sg() call returns
zero.

This series cleans up all .map_sg() implementations to return appropriate
error codes. After the cleanup, dma_map_sg() will still return zero,
however dma_map_sgtable() will pass the error code from the .map_sg()
call. Thanks go to Martn Oliveira for doing a lot of the cleanup of the
obscure implementations.

The patch set is based off of v5.14-rc2 and a git repo can be found
here:

  https://github.com/sbates130272/linux-p2pmem map_sg_err_cleanup_v2

Thanks,

Logan

[1] https://lore.kernel.org/linux-block/20210513223203.5542-1-logang@deltatee.com/
[2] https://lore.kernel.org/linux-mips/20210723175008.22410-1-logang@deltatee.com/

--

Changes in v3:
  - Move the validation of errnos into __dma_map_sg_attrs() (Per
    Christoph)
  - Fix the out of date commit message in patch 21 (Per Eike)
Changes in v2:
  - Attempt to define the meanings of the errors returned by
    dma_map_sgtable() and restrict the valid return codes of
    .map_sg implementations. (Per Christoph)
  - Change dma_map_sgtable() to EXPORT_SYMBOL_GPL() (Per Christoph)
  - Add patches to remove the erroneous setting of sg->dma_address
    to DMA_MAP_ERROR in a few .map_sg(0 implementations. (Per
    Christoph).

--

Logan Gunthorpe (10):
  dma-mapping: Allow map_sg() ops to return negative error codes
  dma-direct: Return appropriate error code from dma_direct_map_sg()
  iommu: Return full error code from iommu_map_sg[_atomic]()
  dma-iommu: Return error code from iommu_dma_map_sg()
  ARM/dma-mapping: don't set failed sg dma_address to DMA_MAPPING_ERROR
  powerpc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
  s390/pci: don't set failed sg dma_address to DMA_MAPPING_ERROR
  sparc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
  x86/amd_gart: don't set failed sg dma_address to DMA_MAPPING_ERROR
  dma-mapping: Disallow .map_sg operations from returning zero on error

Martin Oliveira (11):
  alpha: return error code from alpha_pci_map_sg()
  ARM/dma-mapping: return error code from .map_sg() ops
  ia64/sba_iommu: return error code from sba_map_sg_attrs()
  MIPS/jazzdma: return error code from jazz_dma_map_sg()
  powerpc/iommu: return error code from .map_sg() ops
  s390/pci: return error code from s390_dma_map_sg()
  sparc/iommu: return error codes from .map_sg() ops
  parisc: return error code from .map_sg() ops
  xen: swiotlb: return error code from xen_swiotlb_map_sg()
  x86/amd_gart: return error code from gart_map_sg()
  dma-mapping: return error code from dma_dummy_map_sg()

 arch/alpha/kernel/pci_iommu.c           | 10 ++-
 arch/arm/mm/dma-mapping.c               | 26 +++++---
 arch/ia64/hp/common/sba_iommu.c         |  6 +-
 arch/mips/jazz/jazzdma.c                |  2 +-
 arch/powerpc/kernel/iommu.c             |  6 +-
 arch/powerpc/platforms/ps3/system-bus.c |  2 +-
 arch/powerpc/platforms/pseries/vio.c    |  5 +-
 arch/s390/pci/pci_dma.c                 | 13 ++--
 arch/sparc/kernel/iommu.c               |  6 +-
 arch/sparc/kernel/pci_sun4v.c           |  6 +-
 arch/sparc/mm/iommu.c                   |  2 +-
 arch/x86/kernel/amd_gart_64.c           | 18 +++---
 drivers/iommu/dma-iommu.c               | 23 ++++---
 drivers/iommu/iommu.c                   | 15 +++--
 drivers/parisc/ccio-dma.c               |  2 +-
 drivers/parisc/sba_iommu.c              |  2 +-
 drivers/xen/swiotlb-xen.c               |  2 +-
 include/linux/dma-map-ops.h             |  5 +-
 include/linux/dma-mapping.h             | 35 +++--------
 include/linux/iommu.h                   | 22 +++----
 kernel/dma/direct.c                     |  2 +-
 kernel/dma/dummy.c                      |  2 +-
 kernel/dma/mapping.c                    | 82 ++++++++++++++++++++++---
 23 files changed, 177 insertions(+), 117 deletions(-)


base-commit: ff1176468d368232b684f75e82563369208bc371
--
2.20.1


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162030.297294 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRh-000666-En; Thu, 29 Jul 2021 20:15:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162030.297294; Thu, 29 Jul 2021 20:15:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRh-00065z-B6; Thu, 29 Jul 2021 20:15:57 +0000
Received: by outflank-mailman (input) for mailman id 162030;
 Thu, 29 Jul 2021 20:15:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRg-0005tB-Hv
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:15:56 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c743b2a6-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:15:55 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRZ-0008VM-Dl; Thu, 29 Jul 2021 14:15:50 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0001UQ-LZ; Thu, 29 Jul 2021 14:15:46 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c743b2a6-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=X/PGh6GTfJ6ZdtihVioh5gR+sLDdDHokoaBTKsSS/Sc=; b=Cl0pwajPUF0MbvvK+bH3m8G15c
	iHGMTRHjC70auqPKPrfU/+fnjiDq8xpUMiFyYl3bcXjcpeMj0bAqbgfhD+GY9+ktWOOjLziknbBpV
	eOrDDhbu2P6PbvlVWSvYgPEnlp2BricnQaa43UTkbJu+XUYXR7je7h3vqOKBtF35iiPZChQvy2Y6T
	SQk28+qNruG/mX+ypm5KCA5pmv+A8RtK+979e9bCfNDpbieX0+q4/AvvQXFkzgOrHSbjqtMqcmzC3
	ChuWTdKg/GFTa5IPAkYTKqDInd6tjgcT2Sy8uBUU77cbYGKw3nkXhBa/lC9mrNgps7kOEZnUPfeL7
	SViD+cFQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 29 Jul 2021 14:15:39 -0600
Message-Id: <20210729201539.5602-22-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 21/21] dma-mapping: Disallow .map_sg operations from returning zero on error
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Now that all the .map_sg operations have been converted to returning
proper error codes, drop the code to handle a zero return value,
add a warning if a zero is returned.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/mapping.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 9f0bb56eb9aa..cbcbdc877458 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -196,8 +196,8 @@ static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
 
 	if (ents > 0)
 		debug_dma_map_sg(dev, sg, nents, ents, dir);
-	else if (WARN_ON_ONCE(ents != -EINVAL && ents != -ENOMEM &&
-			      ents != -EIO && ents != 0))
+	else if (WARN_ON_ONCE((ents != -EINVAL && ents != -ENOMEM &&
+			       ents != -EIO) || ents == 0))
 		return -EIO;
 
 	return ents;
@@ -262,9 +262,7 @@ int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
 	int nents;
 
 	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
-	if (nents == 0)
-		return -EIO;
-	else if (nents < 0)
+	if (nents < 0)
 		return nents;
 
 	sgt->nents = nents;
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162032.297319 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRm-0006g6-Uw; Thu, 29 Jul 2021 20:16:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162032.297319; Thu, 29 Jul 2021 20:16:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRm-0006fm-RY; Thu, 29 Jul 2021 20:16:02 +0000
Received: by outflank-mailman (input) for mailman id 162032;
 Thu, 29 Jul 2021 20:16:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRl-0005tB-E7
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:01 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c743b2a7-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:15:56 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRZ-0008VL-R5; Thu, 29 Jul 2021 14:15:50 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0001UN-Gn; Thu, 29 Jul 2021 14:15:46 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c743b2a7-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=x3KSnhFQmhq0kDAcj69QIXa3ZhZHzFN2nEhizdLNjiI=; b=sANr7BcTE+BYenm6+gpWCnWZgt
	a1vbMDbMOWdqeSnuy6+gCxsg3ykH4e1tLmv3LHu7BCfCZ5kPtdlKqdN3HC1+rCC/ooIH2ImcJXDlN
	8jKSQ1+r/37FUAT5WVcD/FO6jV8chXBoPy/We7DjNh3Dzic0CwdMDdHXpDFXnRf1+vbyQg8ubpjAK
	37wuuawNneI5QWW6HQDMGTSF5DYEgZKQuMBRdaaJwPxbPiGRXYpiqEQjOFAaAmvaMZsXdtPzSOaZ1
	ANO+o3NlbiOZsQSea15Ytm6BS2LVHdEvR81DRul4WITMxI1iS66PVfZhi0EzJbq5dw5zcX1Q8AZ1l
	/ucxZeDQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 29 Jul 2021 14:15:38 -0600
Message-Id: <20210729201539.5602-21-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 20/21] dma-mapping: return error code from dma_dummy_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

The only errno to return is -EINVAL in the case when DMA is not
supported.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 kernel/dma/dummy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/dma/dummy.c b/kernel/dma/dummy.c
index eacd4c5b10bf..b492d59ac77e 100644
--- a/kernel/dma/dummy.c
+++ b/kernel/dma/dummy.c
@@ -22,7 +22,7 @@ static int dma_dummy_map_sg(struct device *dev, struct scatterlist *sgl,
 		int nelems, enum dma_data_direction dir,
 		unsigned long attrs)
 {
-	return 0;
+	return -EINVAL;
 }
 
 static int dma_dummy_supported(struct device *hwdev, u64 mask)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162029.297283 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRg-0005pm-6u; Thu, 29 Jul 2021 20:15:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162029.297283; Thu, 29 Jul 2021 20:15:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRg-0005pf-3F; Thu, 29 Jul 2021 20:15:56 +0000
Received: by outflank-mailman (input) for mailman id 162029;
 Thu, 29 Jul 2021 20:15:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRf-0005pZ-9H
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:15:55 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6c18711f-1f75-462a-bd5e-552cb1efc12a;
 Thu, 29 Jul 2021 20:15:53 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRX-0008VO-5W; Thu, 29 Jul 2021 14:15:48 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Tb-0B; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6c18711f-1f75-462a-bd5e-552cb1efc12a
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=/XA9bvLAJiET8xClVyx9hB75GctlP2ewYMlZJlt3uAE=; b=FSTBqqnHJ7VntRb/GUL2Z5yKTq
	JfAogRaPb+WVjHlf1NRCExtt0URwGzF1+pWVjp3v9jELMe1sVylEhpCokcScL/Pik/gQ8D9aVMzvZ
	uoC9GV1+hK1crdrqvUeKMesCcmmz0glkvNT9qYfOPK6DdOiPOO102aJ534nrKtjvNc2ibTJtuP/TR
	t6WErOWjGuYieypzGV2PhsY++SnraaQQ4FNRqKtOnq2TNO2E3YBXoBVkHkqc7fK1HwylkFoWZZTI2
	wNrwlxU476Xj9XD9pqFKs+ZOh16XIR+O62g1eQS8XUIK9YHNwj+UhqtQn/TXl9FaMhBTj2klVY6f4
	WFu1sJPg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Joerg Roedel <joro@8bytes.org>,
	Will Deacon <will@kernel.org>
Date: Thu, 29 Jul 2021 14:15:22 -0600
Message-Id: <20210729201539.5602-5-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, joro@8bytes.org, will@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v3 04/21] dma-iommu: Return error code from iommu_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Return appropriate error codes EINVAL or ENOMEM from
iommup_dma_map_sg(). If lower level code returns ENOMEM, then we
return it, other errors are coalesced into EINVAL.

iommu_dma_map_sg_swiotlb() returns -EIO as its an unknown error
from a call that returns DMA_MAPPING_ERROR.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
---
 drivers/iommu/dma-iommu.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 98ba927aee1a..d9aaed080e68 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -972,7 +972,7 @@ static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg,
 
 out_unmap:
 	iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
-	return 0;
+	return -EIO;
 }
 
 /*
@@ -993,11 +993,13 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	dma_addr_t iova;
 	size_t iova_len = 0;
 	unsigned long mask = dma_get_seg_boundary(dev);
+	ssize_t ret;
 	int i;
 
-	if (static_branch_unlikely(&iommu_deferred_attach_enabled) &&
-	    iommu_deferred_attach(dev, domain))
-		return 0;
+	if (static_branch_unlikely(&iommu_deferred_attach_enabled)) {
+		ret = iommu_deferred_attach(dev, domain);
+		goto out;
+	}
 
 	if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
 		iommu_dma_sync_sg_for_device(dev, sg, nents, dir);
@@ -1045,14 +1047,17 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	}
 
 	iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev);
-	if (!iova)
+	if (!iova) {
+		ret = -ENOMEM;
 		goto out_restore_sg;
+	}
 
 	/*
 	 * We'll leave any physical concatenation to the IOMMU driver's
 	 * implementation - it knows better than we do.
 	 */
-	if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len)
+	ret = iommu_map_sg_atomic(domain, iova, sg, nents, prot);
+	if (ret < iova_len)
 		goto out_free_iova;
 
 	return __finalise_sg(dev, sg, nents, iova);
@@ -1061,7 +1066,11 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	iommu_dma_free_iova(cookie, iova, iova_len, NULL);
 out_restore_sg:
 	__invalidate_sg(sg, nents);
-	return 0;
+out:
+	if (ret == -ENOMEM)
+		return ret;
+	else
+		return -EINVAL;
 }
 
 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162035.297355 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRw-0007o3-4D; Thu, 29 Jul 2021 20:16:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162035.297355; Thu, 29 Jul 2021 20:16:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRv-0007nr-W5; Thu, 29 Jul 2021 20:16:11 +0000
Received: by outflank-mailman (input) for mailman id 162035;
 Thu, 29 Jul 2021 20:16:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRu-0005pZ-4I
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:10 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b45c433a-4121-4893-a09d-4e34ebb72fe9;
 Thu, 29 Jul 2021 20:15:56 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRb-0008VN-JL; Thu, 29 Jul 2021 14:15:52 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRV-0001UE-W9; Thu, 29 Jul 2021 14:15:46 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b45c433a-4121-4893-a09d-4e34ebb72fe9
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=SvEzwpNxmVfyllnMOG86hKyCuFZgCTrDE53Ra6OCzdU=; b=WiNvtwJWsvaWnq8SYmDQL8Ejad
	kH1OHkO85WUX8V6h92JFJR4xzaBqNooRZC0dTcIQp+I0ka90sKEZo9dxN8NsH82EZJEy/3xG7TAWh
	/sXbBOqrMxoadkyNfMXimu8pd4Agw8sVOzNLOSstc8uNoV9t6HvaGetGv0LeTxzfEXWU9iU6/cWGy
	w4tLTaS+Fq7Pp4bbmhNN3Bz4G1KCh3RZ96+TBQ3yzo+FtsWXDlffmD/JEOHEGhiGj+bTKS3UxB/lf
	7OUmTUn9JsDjcIpVl7kARu3aX9kwjXt6JGCGiMse2DWCpu72hJcFNV7zOEnDl4AZ+N6YF/CyfpBQY
	tTCEnQog==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Date: Thu, 29 Jul 2021 14:15:35 -0600
Message-Id: <20210729201539.5602-18-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, jgross@suse.com, sstabellini@kernel.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 17/21] xen: swiotlb: return error code from xen_swiotlb_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

xen_swiotlb_map_sg() may only fail if xen_swiotlb_map_page() fails, but
xen_swiotlb_map_page() only supports returning errors as
DMA_MAPPING_ERROR. So coalesce all errors into EIO per the documentation
for dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
---
 drivers/xen/swiotlb-xen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 24d11861ac7d..85d58b720a24 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -509,7 +509,7 @@ xen_swiotlb_map_sg(struct device *dev, struct scatterlist *sgl, int nelems,
 out_unmap:
 	xen_swiotlb_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
 	sg_dma_len(sgl) = 0;
-	return 0;
+	return -EIO;
 }
 
 static void
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162036.297359 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRw-0007sV-Lq; Thu, 29 Jul 2021 20:16:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162036.297359; Thu, 29 Jul 2021 20:16:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CRw-0007qc-Cz; Thu, 29 Jul 2021 20:16:12 +0000
Received: by outflank-mailman (input) for mailman id 162036;
 Thu, 29 Jul 2021 20:16:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRv-0005tB-Ea
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:11 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c8a3dd93-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:15:57 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRc-0008VO-Sm; Thu, 29 Jul 2021 14:15:53 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0001UH-58; Thu, 29 Jul 2021 14:15:46 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c8a3dd93-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=bxYuYkexdgjCkkzv9UnzPxUCVLmS0/r9pZcrAxTBVsI=; b=p8I0Sh1Y6RwWuABiHugDXJd+kN
	cWlqaR/BUTFE0MB1DS2yUsH1INinREg4peJmDrg87ULtFRKas6g9pS7jR1OKGlxWBQYV2ScPP94nY
	VtXQF5ZpcKaFxV6gmZ/tf31O8qMh81eIQy9s3ltHVlxl5gEjnJiqO+gq2xtFeXFMn0GfBHiQ75VfL
	Ec1BI2s1lemmPO/OULu7nfwVpq+Eq1RTap84im5BI9SE7ur1zO8c19Z5R5IZ0XWVYfMdg2RXTqe24
	lXCml95jU2ntgTAzj+IhrMDdiNshAsGJmja7bUonZ6FjBpBLiWRX22zH8mU+9i9a59ML3VrNhExQf
	SqHQgVXw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Thu, 29 Jul 2021 14:15:36 -0600
Message-Id: <20210729201539.5602-19-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, schnelle@linux.ibm.com, tsbogend@alpha.franken.de, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 18/21] x86/amd_gart: return error code from gart_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

So make __dma_map_cont() return a valid errno (which is then propagated
to gart_map_sg() via dma_map_cont()) and return it in case of failure.

Also, return -EINVAL in case of invalid nents.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/x86/kernel/amd_gart_64.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 9ac696487b13..46aea9a4f26b 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -331,7 +331,7 @@ static int __dma_map_cont(struct device *dev, struct scatterlist *start,
 	int i;
 
 	if (iommu_start == -1)
-		return -1;
+		return -ENOMEM;
 
 	for_each_sg(start, s, nelems, i) {
 		unsigned long pages, addr;
@@ -380,13 +380,13 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		       enum dma_data_direction dir, unsigned long attrs)
 {
 	struct scatterlist *s, *ps, *start_sg, *sgmap;
-	int need = 0, nextneed, i, out, start;
+	int need = 0, nextneed, i, out, start, ret;
 	unsigned long pages = 0;
 	unsigned int seg_size;
 	unsigned int max_seg_size;
 
 	if (nents == 0)
-		return 0;
+		return -EINVAL;
 
 	out		= 0;
 	start		= 0;
@@ -414,8 +414,9 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 			if (!iommu_merge || !nextneed || !need || s->offset ||
 			    (s->length + seg_size > max_seg_size) ||
 			    (ps->offset + ps->length) % PAGE_SIZE) {
-				if (dma_map_cont(dev, start_sg, i - start,
-						 sgmap, pages, need) < 0)
+				ret = dma_map_cont(dev, start_sg, i - start,
+						   sgmap, pages, need);
+				if (ret < 0)
 					goto error;
 				out++;
 
@@ -432,7 +433,8 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		pages += iommu_num_pages(s->offset, s->length, PAGE_SIZE);
 		ps = s;
 	}
-	if (dma_map_cont(dev, start_sg, i - start, sgmap, pages, need) < 0)
+	ret = dma_map_cont(dev, start_sg, i - start, sgmap, pages, need);
+	if (ret < 0)
 		goto error;
 	out++;
 	flush_gart();
@@ -458,7 +460,7 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 	iommu_full(dev, pages << PAGE_SHIFT, dir);
 	for_each_sg(sg, s, nents, i)
 		s->dma_address = DMA_MAPPING_ERROR;
-	return 0;
+	return ret;
 }
 
 /* allocate and map a coherent mapping */
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:17 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162038.297379 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS1-0000My-4f; Thu, 29 Jul 2021 20:16:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162038.297379; Thu, 29 Jul 2021 20:16:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS0-0000MG-T0; Thu, 29 Jul 2021 20:16:16 +0000
Received: by outflank-mailman (input) for mailman id 162038;
 Thu, 29 Jul 2021 20:16:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CRz-0005pZ-4Q
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:15 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a1e98081-4b4c-4c6f-95ca-0c4c37ec38fe;
 Thu, 29 Jul 2021 20:15:56 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0008VL-N8; Thu, 29 Jul 2021 14:15:47 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRT-0001TS-Ke; Thu, 29 Jul 2021 14:15:43 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: a1e98081-4b4c-4c6f-95ca-0c4c37ec38fe
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=H+Im41O7i4qTWPUG8nmhAyL/mhQK6e1NSTli9mmAHj8=; b=R6YCg3TpOKaR1Y4CrcmnaTxy33
	cL39gW2wQHn3/jHstlvcLcncw+hBAJ2Zh5HCUW9PHfwfvZc2ti77IDa5KY292K9h2fyHGv+1o1nkx
	kCrpnxFz1QXzehsvCE9BUIUIrHkD/7jmjkose2mCIJLyPUUEBJiAKDVdYYpLzmZBidXWFlg/zaVjP
	QaUN5OTrX2Sf1Jh292wu6GIXkZAauRIgBeTwCUNfxb8KlqGNp/Yj1IMMJgtWiOuSjZIcbEkiF+fjW
	YzW6uo4UYB0y6AtSw7fBxyl27xiJeTyzglR6RPGWURru8kUj8ommDOQS9qsec1F9eEDGg97TbTWpT
	UUhk46xg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>
Date: Thu, 29 Jul 2021 14:15:19 -0600
Message-Id: <20210729201539.5602-2-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 01/21] dma-mapping: Allow map_sg() ops to return negative error codes
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Allow dma_map_sgtable() to pass errors from the map_sg() ops. This
will be required for returning appropriate error codes when mapping
P2PDMA memory.

Introduce __dma_map_sg_attrs() which will return the raw error code
from the map_sg operation (whether it be negative or zero). Then add a
dma_map_sg_attrs() wrapper to convert any negative errors to zero to
satisfy the existing calling convention.

dma_map_sgtable() defines three error codes that .map_sg implementations
are allowed to return: -EINVAL, -ENOMEM and -EIO. The latter of which
is a generic return for cases that are passing DMA_MAPPING_ERROR
through.

dma_map_sgtable() will convert a zero error return for old map_sg() ops
into a -EIO return and return any negative errors as reported.

This allows map_sg implementations to start returning multiple
negative error codes. Legacy map_sg implementations can continue
to return zero until they are all converted.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
 include/linux/dma-map-ops.h |  5 ++-
 include/linux/dma-mapping.h | 35 ++++------------
 kernel/dma/mapping.c        | 84 +++++++++++++++++++++++++++++++++----
 3 files changed, 86 insertions(+), 38 deletions(-)

diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index 0d53a96a3d64..2f842498c448 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -41,8 +41,9 @@ struct dma_map_ops {
 			size_t size, enum dma_data_direction dir,
 			unsigned long attrs);
 	/*
-	 * map_sg returns 0 on error and a value > 0 on success.
-	 * It should never return a value < 0.
+	 * map_sg should return a negative error code on error. See
+	 * dma_map_sgtable() for a list of appropriate error codes
+	 * and their meanings.
 	 */
 	int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents,
 			enum dma_data_direction dir, unsigned long attrs);
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 183e7103a66d..daa1e360f0ee 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -110,6 +110,8 @@ int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
 				      int nents, enum dma_data_direction dir,
 				      unsigned long attrs);
+int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs);
 dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr,
 		size_t size, enum dma_data_direction dir, unsigned long attrs);
 void dma_unmap_resource(struct device *dev, dma_addr_t addr, size_t size,
@@ -174,6 +176,11 @@ static inline void dma_unmap_sg_attrs(struct device *dev,
 		unsigned long attrs)
 {
 }
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	return -EOPNOTSUPP;
+}
 static inline dma_addr_t dma_map_resource(struct device *dev,
 		phys_addr_t phys_addr, size_t size, enum dma_data_direction dir,
 		unsigned long attrs)
@@ -343,34 +350,6 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
-/**
- * dma_map_sgtable - Map the given buffer for DMA
- * @dev:	The device for which to perform the DMA operation
- * @sgt:	The sg_table object describing the buffer
- * @dir:	DMA direction
- * @attrs:	Optional DMA attributes for the map operation
- *
- * Maps a buffer described by a scatterlist stored in the given sg_table
- * object for the @dir DMA operation by the @dev device. After success the
- * ownership for the buffer is transferred to the DMA domain.  One has to
- * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
- * ownership of the buffer back to the CPU domain before touching the
- * buffer by the CPU.
- *
- * Returns 0 on success or -EINVAL on error during mapping the buffer.
- */
-static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
-		enum dma_data_direction dir, unsigned long attrs)
-{
-	int nents;
-
-	nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
-	if (nents <= 0)
-		return -EINVAL;
-	sgt->nents = nents;
-	return 0;
-}
-
 /**
  * dma_unmap_sgtable - Unmap the given buffer for DMA
  * @dev:	The device for which to perform the DMA operation
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 2b06a809d0b9..9f0bb56eb9aa 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -177,12 +177,8 @@ void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size,
 }
 EXPORT_SYMBOL(dma_unmap_page_attrs);
 
-/*
- * dma_maps_sg_attrs returns 0 on error and > 0 on success.
- * It should never return a value < 0.
- */
-int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
-		enum dma_data_direction dir, unsigned long attrs)
+static int __dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
+	 int nents, enum dma_data_direction dir, unsigned long attrs)
 {
 	const struct dma_map_ops *ops = get_dma_ops(dev);
 	int ents;
@@ -197,13 +193,85 @@ int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents,
 		ents = dma_direct_map_sg(dev, sg, nents, dir, attrs);
 	else
 		ents = ops->map_sg(dev, sg, nents, dir, attrs);
-	BUG_ON(ents < 0);
-	debug_dma_map_sg(dev, sg, nents, ents, dir);
+
+	if (ents > 0)
+		debug_dma_map_sg(dev, sg, nents, ents, dir);
+	else if (WARN_ON_ONCE(ents != -EINVAL && ents != -ENOMEM &&
+			      ents != -EIO && ents != 0))
+		return -EIO;
 
 	return ents;
 }
+
+/**
+ * dma_map_sg_attrs - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sg:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist passed in the sg argument with
+ * nents segments for the @dir DMA operation by the @dev device.
+ *
+ * Returns the number of mapped entries (which can be less than nents)
+ * on success. Zero is returned for any error.
+ *
+ * dma_unmap_sg_attrs() should be used to unmap the buffer with the
+ * original sg and original nents (not the value returned by this funciton).
+ */
+int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg,
+		    int nents, enum dma_data_direction dir, unsigned long attrs)
+{
+	int ret;
+
+	ret = __dma_map_sg_attrs(dev, sg, nents, dir, attrs);
+	if (ret < 0)
+		ret = 0;
+
+	return ret;
+}
 EXPORT_SYMBOL(dma_map_sg_attrs);
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success, the
+ * ownership for the buffer is transferred to the DMA domain.  One has to
+ * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ *
+ * Returns 0 on success or a negative error code on error. The following
+ * error codes are supported with the given meaning:
+ *
+ *   -EINVAL - An invalid argument, unaligned access or other error
+ *	       in usage. Will not succeed if retried.
+ *   -ENOMEM - Insufficient resources (like memory or IOVA space) to
+ *	       complete the mapping. Should succeed if retried later.
+ *   -EIO    - Legacy error code with an unknown meaning. eg. this is
+ *	       returned if a lower level call returned DMA_MAPPING_ERROR.
+ */
+int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		    enum dma_data_direction dir, unsigned long attrs)
+{
+	int nents;
+
+	nents = __dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+	if (nents == 0)
+		return -EIO;
+	else if (nents < 0)
+		return nents;
+
+	sgt->nents = nents;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(dma_map_sgtable);
+
 void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
 				      int nents, enum dma_data_direction dir,
 				      unsigned long attrs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162041.297389 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS2-0000mn-Hi; Thu, 29 Jul 2021 20:16:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162041.297389; Thu, 29 Jul 2021 20:16:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS2-0000lW-9x; Thu, 29 Jul 2021 20:16:18 +0000
Received: by outflank-mailman (input) for mailman id 162041;
 Thu, 29 Jul 2021 20:16:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CS0-0005tB-Eo
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:16 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c8a3dd92-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:15:57 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRc-0008VK-Sm; Thu, 29 Jul 2021 14:15:53 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRW-0001UK-B0; Thu, 29 Jul 2021 14:15:46 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c8a3dd92-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=1Ac+kLf3m7NLdDW/VFqzSvvzNcJRkR+YtO34l2sNfsw=; b=CYpOEPkfDJsDZ19VVFUGJc08Hl
	wVyQ1auEMhFw3oG+P80C7VLasUNFa3YF3QP87IB+GtXwAyNyDAtXLiRs0WKNLvPAfMYKCjwgaxoUF
	xAYZu6F/j92HpUia8nEPJd0FBfaIXKdpUTDsjxnagjFHQ07zPNxKhTGah4dv+0uoZ5qaD0ZyJVVvq
	d8+MXykLHtmVVquaqIwBQ7+/DBw/Ai6GbAoiZnr/ymhywWpfp3K69RNFSzMTThgf3ugmo4v7Z3sr3
	oTfHb88CIGWF8sKLlRTWbMSEy/CEd56V/KXV4n6Fqsyvn6oP62OrUmlpQv36B4t10Aytm4gA2hg8x
	5z6w0R3A==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Thu, 29 Jul 2021 14:15:37 -0600
Message-Id: <20210729201539.5602-20-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, schnelle@linux.ibm.com, tsbogend@alpha.franken.de, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 19/21] x86/amd_gart: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/x86/kernel/amd_gart_64.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 46aea9a4f26b..ed837383de5c 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -458,8 +458,6 @@ static int gart_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		panic("dma_map_sg: overflow on %lu pages\n", pages);
 
 	iommu_full(dev, pages << PAGE_SHIFT, dir);
-	for_each_sg(sg, s, nents, i)
-		s->dma_address = DMA_MAPPING_ERROR;
 	return ret;
 }
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162049.297403 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS6-0001Wp-Bo; Thu, 29 Jul 2021 20:16:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162049.297403; Thu, 29 Jul 2021 20:16:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS6-0001WM-4h; Thu, 29 Jul 2021 20:16:22 +0000
Received: by outflank-mailman (input) for mailman id 162049;
 Thu, 29 Jul 2021 20:16:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CS4-0005pZ-4c
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:20 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 74fe54ac-57a9-4d7e-b754-14d3e7beadd4;
 Thu, 29 Jul 2021 20:15:57 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRd-0008VL-3J; Thu, 29 Jul 2021 14:15:54 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRV-0001U8-Lk; Thu, 29 Jul 2021 14:15:45 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 74fe54ac-57a9-4d7e-b754-14d3e7beadd4
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=bIO3ta0XzvPdSC9DXOQ0qCnsFUls6Qbnvb3IRvewUpc=; b=ZNMXxY11ucan2rIkQrjisLwQ+B
	6blub6QUn7EeBcOr3SYI6GUpfI/lbMbcZ9SzZJmu8GYTDjJDYOizd0AoyssRs53Y7zF60qrSHLxzg
	0kB6Wp4xhCyatxH1ELRyTWvz8FvihtxvTvYV12SGAeFmh+bQUCGwLiba2M2UT6GuEgQN3T6gh5sCH
	dELJmt5WbzcFtXrM8VB7F1/wQDAiWi84VjKxuDM5l3W6dYCtBwdsIyV16GCQvj2E4pzHhwLM0Zb5d
	Saz/rllKkYdOjQrlq5w8vdk2MWu5ocFeWbKcO3xplslC9yawbI+eZEMzZQFFVVVieOKZ82Ypr0PUM
	ca5BpGow==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"David S. Miller" <davem@davemloft.net>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Thu, 29 Jul 2021 14:15:33 -0600
Message-Id: <20210729201539.5602-16-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, davem@davemloft.net, schnelle@linux.ibm.com, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v3 15/21] sparc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/sparc/kernel/iommu.c     | 2 --
 arch/sparc/kernel/pci_sun4v.c | 2 --
 2 files changed, 4 deletions(-)

diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index 0589acd34201..da0363692528 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -546,7 +546,6 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	if (outcount < incount) {
 		outs = sg_next(outs);
-		outs->dma_address = DMA_MAPPING_ERROR;
 		outs->dma_length = 0;
 	}
 
@@ -572,7 +571,6 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 			iommu_tbl_range_free(&iommu->tbl, vaddr, npages,
 					     IOMMU_ERROR_CODE);
 
-			s->dma_address = DMA_MAPPING_ERROR;
 			s->dma_length = 0;
 		}
 		if (s == outs)
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index d90e80fa5705..384480971805 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -594,7 +594,6 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	if (outcount < incount) {
 		outs = sg_next(outs);
-		outs->dma_address = DMA_MAPPING_ERROR;
 		outs->dma_length = 0;
 	}
 
@@ -611,7 +610,6 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 			iommu_tbl_range_free(tbl, vaddr, npages,
 					     IOMMU_ERROR_CODE);
 			/* XXX demap? XXX */
-			s->dma_address = DMA_MAPPING_ERROR;
 			s->dma_length = 0;
 		}
 		if (s == outs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:23 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162051.297409 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS7-0001c0-0q; Thu, 29 Jul 2021 20:16:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162051.297409; Thu, 29 Jul 2021 20:16:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CS6-0001b6-KI; Thu, 29 Jul 2021 20:16:22 +0000
Received: by outflank-mailman (input) for mailman id 162051;
 Thu, 29 Jul 2021 20:16:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CS5-0005tB-Ew
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:21 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ca4a36e6-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:16:00 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRf-0008VO-Uv; Thu, 29 Jul 2021 14:15:56 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRV-0001Tz-5J; Thu, 29 Jul 2021 14:15:45 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ca4a36e6-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=wMwfB+QVxoWPoNbugW7oseZQ2FEaT6sisUumX/+txWI=; b=ID/pq4C2aTQp2oDNVLghKs/nGq
	/MY9zdoBCMMHh3c6T8MI3nnmvuQUSVCPLIfeepLGK/XGDLYHuElnVIv6Ocren27qwsmRloi4lA+k2
	jUcV8AabILTLu9D+RA2F7MkSwG5Ubtk18ez7B6ZLKOLIi15PTQt0AW//JuASu5bJBrfxoubREfwb4
	rkH6cVX/Fb8WXCP7sWran6zWw0+yy0j3rZnkl5dse4GfPUQvjKpOJdAzSOnscdDZg/XYmOpir/Dz+
	rl+LrmmUPA5AvuG0H48DCHNFEeG+t1CHY5QhUZBIg4JK21d2e2IZnjFfVArCF81YGjKAKWB52iX16
	QcWfwO7g==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Date: Thu, 29 Jul 2021 14:15:30 -0600
Message-Id: <20210729201539.5602-13-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, schnelle@linux.ibm.com, gerald.schaefer@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 12/21] s390/pci: return error code from s390_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

So propagate the error from __s390_dma_map_sg() up. __s390_dma_map_sg()
returns either -ENOMEM on allocation failure or -EINVAL which is
the same as what's expected by dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/pci/pci_dma.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index ebc9a49523aa..c78b02012764 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -487,7 +487,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	unsigned int max = dma_get_max_seg_size(dev);
 	unsigned int size = s->offset + s->length;
 	unsigned int offset = s->offset;
-	int count = 0, i;
+	int count = 0, i, ret;
 
 	for (i = 1; i < nr_elements; i++) {
 		s = sg_next(s);
@@ -497,8 +497,9 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 
 		if (s->offset || (size & ~PAGE_MASK) ||
 		    size + s->length > max) {
-			if (__s390_dma_map_sg(dev, start, size,
-					      &dma->dma_address, dir))
+			ret = __s390_dma_map_sg(dev, start, size,
+						&dma->dma_address, dir);
+			if (ret)
 				goto unmap;
 
 			dma->dma_address += offset;
@@ -511,7 +512,8 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 		}
 		size += s->length;
 	}
-	if (__s390_dma_map_sg(dev, start, size, &dma->dma_address, dir))
+	ret = __s390_dma_map_sg(dev, start, size, &dma->dma_address, dir);
+	if (ret)
 		goto unmap;
 
 	dma->dma_address += offset;
@@ -523,7 +525,7 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 		s390_dma_unmap_pages(dev, sg_dma_address(s), sg_dma_len(s),
 				     dir, attrs);
 
-	return 0;
+	return ret;
 }
 
 static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162057.297427 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSB-0002d2-8U; Thu, 29 Jul 2021 20:16:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162057.297427; Thu, 29 Jul 2021 20:16:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSB-0002cg-2w; Thu, 29 Jul 2021 20:16:27 +0000
Received: by outflank-mailman (input) for mailman id 162057;
 Thu, 29 Jul 2021 20:16:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CS9-0005pZ-4r
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:25 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 810a0170-2a37-4797-8958-f143fb346775;
 Thu, 29 Jul 2021 20:15:58 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRd-0008VM-3g; Thu, 29 Jul 2021 14:15:54 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRV-0001UB-QR; Thu, 29 Jul 2021 14:15:45 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 810a0170-2a37-4797-8958-f143fb346775
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=fB/z94v+Zqx6MpbGppBoixHLzAQycdh8k5f4rRFmrO0=; b=Q/yOit+wzn0WTLkgHijTX4TkhO
	8+eoLaiFE1mafvZ/q4c2J8dgiHrEu7XfRLxOMtaCE2yip7zxl1sE/WyHaFGuCUlAsojHu3Yn1olhc
	F6lgtyAVdYp7At6SrmssFkRyMNq/7Y8eEHEoLDTW3SL2JS9ATF53ewVI4ZZgHkeKeWzP92SM7FH34
	eTt7FT+3sGYlOVErWUL9BBZ81w65udV5r7T9L+Bim7OvBQFE+Z+0NIEO7fp0Dm/dAqjBx6Z8qCOHg
	eaGZJCGwxHsUZUd8FtgHTl3bnmB6UbQ2wz20VgRmFykYHYTmvncDFTw4bL71o7DIitalfyY4Hk8F1
	0BLcIVQA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
	Helge Deller <deller@gmx.de>
Date: Thu, 29 Jul 2021 14:15:34 -0600
Message-Id: <20210729201539.5602-17-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, James.Bottomley@HansenPartnership.com, deller@gmx.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 16/21] parisc: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.
Return -EINVAL if the ioc cannot be obtained.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
---
 drivers/parisc/ccio-dma.c  | 2 +-
 drivers/parisc/sba_iommu.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index b5f9ee81a46c..452e72b7bd01 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -918,7 +918,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
 	BUG_ON(!dev);
 	ioc = GET_IOC(dev);
 	if (!ioc)
-		return 0;
+		return -EINVAL;
 	
 	DBG_RUN_SG("%s() START %d entries\n", __func__, nents);
 
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index dce4cdf786cd..e60690d38d67 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -947,7 +947,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
 
 	ioc = GET_IOC(dev);
 	if (!ioc)
-		return 0;
+		return -EINVAL;
 
 	/* Fast path single entry scatterlists. */
 	if (nents == 1) {
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:28 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162060.297438 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSC-0002yZ-Nv; Thu, 29 Jul 2021 20:16:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162060.297438; Thu, 29 Jul 2021 20:16:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSC-0002yH-Hb; Thu, 29 Jul 2021 20:16:28 +0000
Received: by outflank-mailman (input) for mailman id 162060;
 Thu, 29 Jul 2021 20:16:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSA-0005tB-Ex
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:26 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cc67431a-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:16:03 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRi-0008VK-NU; Thu, 29 Jul 2021 14:15:59 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Tn-GE; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cc67431a-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=GqC6MNUep++aB8fDrjh2DnNmBSYDqSi9PqIeeLTquj0=; b=LLuvoQ8LNAwGPJjD/wLm0mrBAc
	xbD2+YBAeaE8xLVuws8WYIhL865lolO439JWs4hG29ZMaZpyZ+/QfwlE8/VZHUNSnaJ4EV23A8ctj
	hBOiZWYwKfZzlxtiQoJZQy9oH8VQN3kDLCN/8H9lSdQuAaHzAnK09o+g7cDqTvNHza10473jXozWE
	DTFPruGncU75bJs/v9ACnBlhkrufLVZBPsmKQaQdFQyjBb8z/CiIdvmeiY2Q/Ug5u8U8xT0uOeG1h
	uUoO6EnXb+visuhNQGbpE4OFCgf3TAnhFoUwDzwTIHFqZG5EOc/o1Vp6UCWa6z1e5NVKsw9vKKRLu
	4D8Tq1Sw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 29 Jul 2021 14:15:26 -0600
Message-Id: <20210729201539.5602-9-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, schnelle@linux.ibm.com, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 08/21] ia64/sba_iommu: return error code from sba_map_sg_attrs()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

In the case of a dma_mapping_error() return -EIO as the actual cause
is opaque here.

sba_coalesce_chunks() may only presently fail if sba_alloc_range()
fails, which in turn only fails if the iommu is out of mapping
resources, hence a -ENOMEM is used in that case.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/ia64/hp/common/sba_iommu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index 9148ddbf02e5..430c166b68cd 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -1458,8 +1458,8 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 		sglist->dma_length = sglist->length;
 		sglist->dma_address = sba_map_page(dev, sg_page(sglist),
 				sglist->offset, sglist->length, dir, attrs);
-		if (dma_mapping_error(dev, sglist->dma_address))
-			return 0;
+		if(dma_mapping_error(dev, sglist->dma_address))
+			return -EIO;
 		return 1;
 	}
 
@@ -1486,7 +1486,7 @@ static int sba_map_sg_attrs(struct device *dev, struct scatterlist *sglist,
 	coalesced = sba_coalesce_chunks(ioc, dev, sglist, nents);
 	if (coalesced < 0) {
 		sba_unmap_sg_attrs(dev, sglist, nents, dir, attrs);
-		return 0;
+		return -ENOMEM;
 	}
 
 	/*
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162064.297451 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSF-0003Z7-3r; Thu, 29 Jul 2021 20:16:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162064.297451; Thu, 29 Jul 2021 20:16:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSE-0003Yi-Uh; Thu, 29 Jul 2021 20:16:30 +0000
Received: by outflank-mailman (input) for mailman id 162064;
 Thu, 29 Jul 2021 20:16:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSE-0005pZ-57
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:30 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 74a2c327-19c4-4728-a474-9ce532552b34;
 Thu, 29 Jul 2021 20:15:58 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRe-0008VN-G4; Thu, 29 Jul 2021 14:15:55 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRV-0001U5-El; Thu, 29 Jul 2021 14:15:45 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 74a2c327-19c4-4728-a474-9ce532552b34
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=6y6u7mqV1FaPPB3FCU6tc5JcXwZSIOmHMoiIHkmUZvc=; b=e4d60/OLYdyc6xXPUN9l5vbTgC
	5kYPrlDotb8/CzFuWOeAmYTUwjYP2ETS2BEJBZnaRrMkl6QE2YK+Z0X4WLU3XVyZjIQPJd4KPKLVX
	9z1RalZ7Rj3cm60xKdgm4DrLx9xVrQ5x6SIIDJnoY84I41lD3GvvjW8lGYIEkc8MCPIMSdYmjHOsX
	G+3Dz3xqoaTHQ5lz6bICLu3UcD8WnMIwPrNA4AdT/XXsUGvw+HnZk86aH6Qn5dG1mndxUertWJyzN
	1LaZJlW3gZ4l+iarh3qgXxqLmb6x2oqs+HVl63DPEgPGRsfIKlztFQlxYovSPreen45BHo7q/NT+l
	G12R1I2g==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	"David S. Miller" <davem@davemloft.net>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>
Date: Thu, 29 Jul 2021 14:15:32 -0600
Message-Id: <20210729201539.5602-15-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, davem@davemloft.net, schnelle@linux.ibm.com, mpe@ellerman.id.au
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 14/21] sparc/iommu: return error codes from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Returning an errno from __sbus_iommu_map_sg() results in
sbus_iommu_map_sg_gflush() and sbus_iommu_map_sg_pflush() returning an
errno, as those functions are wrappers around __sbus_iommu_map_sg().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/sparc/kernel/iommu.c     | 4 ++--
 arch/sparc/kernel/pci_sun4v.c | 4 ++--
 arch/sparc/mm/iommu.c         | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
index a034f571d869..0589acd34201 100644
--- a/arch/sparc/kernel/iommu.c
+++ b/arch/sparc/kernel/iommu.c
@@ -448,7 +448,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 	iommu = dev->archdata.iommu;
 	strbuf = dev->archdata.stc;
 	if (nelems == 0 || !iommu)
-		return 0;
+		return -EINVAL;
 
 	spin_lock_irqsave(&iommu->lock, flags);
 
@@ -580,7 +580,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist,
 	}
 	spin_unlock_irqrestore(&iommu->lock, flags);
 
-	return 0;
+	return -EINVAL;
 }
 
 /* If contexts are being used, they are the same in all of the mappings
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 9de57e88f7a1..d90e80fa5705 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -486,7 +486,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 
 	iommu = dev->archdata.iommu;
 	if (nelems == 0 || !iommu)
-		return 0;
+		return -EINVAL;
 	atu = iommu->atu;
 
 	prot = HV_PCI_MAP_ATTR_READ;
@@ -619,7 +619,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,
 	}
 	local_irq_restore(flags);
 
-	return 0;
+	return -EINVAL;
 }
 
 static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist,
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index 0c0342e5b10d..9e3f6933ca13 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -256,7 +256,7 @@ static int __sbus_iommu_map_sg(struct device *dev, struct scatterlist *sgl,
 		sg->dma_address =__sbus_iommu_map_page(dev, sg_page(sg),
 				sg->offset, sg->length, per_page_flush);
 		if (sg->dma_address == DMA_MAPPING_ERROR)
-			return 0;
+			return -EIO;
 		sg->dma_length = sg->length;
 	}
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162066.297463 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSI-0004Ac-8C; Thu, 29 Jul 2021 20:16:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162066.297463; Thu, 29 Jul 2021 20:16:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSH-00048B-O6; Thu, 29 Jul 2021 20:16:33 +0000
Received: by outflank-mailman (input) for mailman id 162066;
 Thu, 29 Jul 2021 20:16:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSF-0005tB-F7
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:31 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cc67431b-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:16:03 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRh-0008VL-Ts; Thu, 29 Jul 2021 14:15:59 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Tw-W8; Thu, 29 Jul 2021 14:15:45 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cc67431b-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=OuJXER8TMWR954py7rg3mrCeDrxT4LjuVdKtzQZh6Zs=; b=UsY1ykbNnjwkWofJbI4f1VZfve
	Fb9GcU4897V0RXhNncyMCRQe7sgayHYtP/HsNnSTTgqV9fSgROyJgV2gOe2yhHQenOAwFghjiU+BP
	uBE72UYytCEMGELWbGcFBBFJ5DWJpDLdjxjdJ9o76T9/kXM4wUFj1A8GLgLcyYjYD9MYMXT/FVYJJ
	Xx9pqTWgXTMsYLV8JIWCFloKjmqOwP1AMgRG486raP6kmoPLNwRZM9Mva9yei/8c15JbavQd4F9cE
	bLRW9IWYGnW3Qd2UKQozsPYqQvM1z51/XZf/VA6C4GY0Cm7DkqTL8dIi4hp3eobbIJjY1Wlrv5TfE
	YeqChe0w==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Geoff Levand <geoff@infradead.org>
Date: Thu, 29 Jul 2021 14:15:29 -0600
Message-Id: <20210729201539.5602-12-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org, geoff@infradead.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.5 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_FREE,MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no
	autolearn_force=no version=3.4.2
Subject: [PATCH v3 11/21] powerpc/iommu: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Geoff Levand <geoff@infradead.org>
---
 arch/powerpc/kernel/iommu.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index a8ec4fe42817..30b7736f0896 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -575,7 +575,6 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 	 */
 	if (outcount < incount) {
 		outs = sg_next(outs);
-		outs->dma_address = DMA_MAPPING_ERROR;
 		outs->dma_length = 0;
 	}
 
@@ -593,7 +592,6 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 			npages = iommu_num_pages(s->dma_address, s->dma_length,
 						 IOMMU_PAGE_SIZE(tbl));
 			__iommu_free(tbl, vaddr, npages);
-			s->dma_address = DMA_MAPPING_ERROR;
 			s->dma_length = 0;
 		}
 		if (s == outs)
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162071.297475 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSK-0004mz-Rv; Thu, 29 Jul 2021 20:16:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162071.297475; Thu, 29 Jul 2021 20:16:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSK-0004mF-IR; Thu, 29 Jul 2021 20:16:36 +0000
Received: by outflank-mailman (input) for mailman id 162071;
 Thu, 29 Jul 2021 20:16:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSJ-0005pZ-5K
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:35 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d75602e4-faaf-43d0-89f3-73ceea28acf4;
 Thu, 29 Jul 2021 20:16:00 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRf-0008VK-Uv; Thu, 29 Jul 2021 14:15:56 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRV-0001U2-AD; Thu, 29 Jul 2021 14:15:45 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d75602e4-faaf-43d0-89f3-73ceea28acf4
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=L1b4mN92m3Z8Ycv5Au7RT1T/xTKMMtHSrAAz+sZBHZU=; b=Yj+EfoToDFg3xLZFeqHmnxyGd9
	I8aMI3Jlv85Ch+tEVbiyS6aUWs464pVtFPGP+OXRJxvkExa0PoCQRDg+lV7Fk0JIhpD0NETAsfw10
	tLOH/M9r8Ub14QsZbv+FteYeM8tnk+pO0soR3rt6npJZtle118bFbihsbeEw1/qTqyL3Jj0+ssWkd
	/TunTkau8y0A1ZMEypKJseIZ5QAPKVyjV4AIwSGMhlZy2xcbjewcGgNwriRczL1ST5M/sjnHzYFIY
	1rCC7PpMqyL5QT4J0+Ejnmrq7VFLTiQkPLu8YmlokEQmZBpS7OD/0bB7rUHDJhDj50jKzeAryGM3N
	uZyfmAxw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Date: Thu, 29 Jul 2021 14:15:31 -0600
Message-Id: <20210729201539.5602-14-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, schnelle@linux.ibm.com, gerald.schaefer@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 13/21] s390/pci: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of
the ->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Niklas Schnelle <schnelle@linux.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
---
 arch/s390/pci/pci_dma.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index c78b02012764..be48e5b5bfcf 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -492,7 +492,6 @@ static int s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	for (i = 1; i < nr_elements; i++) {
 		s = sg_next(s);
 
-		s->dma_address = DMA_MAPPING_ERROR;
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) ||
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:16:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:16:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162079.297487 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSP-0005hR-I9; Thu, 29 Jul 2021 20:16:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162079.297487; Thu, 29 Jul 2021 20:16:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CSP-0005gy-CT; Thu, 29 Jul 2021 20:16:41 +0000
Received: by outflank-mailman (input) for mailman id 162079;
 Thu, 29 Jul 2021 20:16:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSO-0005pZ-5a
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:40 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9beb327b-93a9-4c8e-b73b-632db9727b96;
 Thu, 29 Jul 2021 20:16:01 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRh-0008VN-EY; Thu, 29 Jul 2021 14:15:58 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Tq-Lp; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9beb327b-93a9-4c8e-b73b-632db9727b96
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=pjSijkDDmu3vPdSgTQKQdclfdyX/CqsmmRRmSWCrGaw=; b=cjgxYy/V4mokMS26RvA0y5hAiA
	e5AuokLjTiEWPZ1wtZmzEF2/AjYWGVTq7UuSoyz33iWz4wFh6JWY3+gaqjxN/uaYzWgDN90NJbk6S
	jGNNEV37c2AtpkXo8os38qhGWUEL9DmdLjrM+jhEyJZuL/hWdHyWmAa1nyx5jjPZPvvnfteOU8nvT
	SFzkV/q/iTjtcmPXkWw9wI3RF0d51GVXBwR5owV0qIhLmjvIGYZoMsAZsfBuH66LL1M6DbJv8aMpa
	aVNco/kwUkGc2RR9/C8e2SVixYS9FCaqVsXHs+VNiAfyClEYBPIi4fLYwbWEh0Hg9lvB1O4V/L1R9
	tDqSO1xg==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 29 Jul 2021 14:15:27 -0600
Message-Id: <20210729201539.5602-10-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 09/21] MIPS/jazzdma: return error code from jazz_dma_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

vdma_alloc() may fail for different reasons, but since it only supports
indicating an error via a return of DMA_MAPPING_ERROR, we coalesce the
different reasons into -EIO as is documented on dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/mips/jazz/jazzdma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c
index 461457b28982..eabddb89d221 100644
--- a/arch/mips/jazz/jazzdma.c
+++ b/arch/mips/jazz/jazzdma.c
@@ -552,7 +552,7 @@ static int jazz_dma_map_sg(struct device *dev, struct scatterlist *sglist,
 				dir);
 		sg->dma_address = vdma_alloc(sg_phys(sg), sg->length);
 		if (sg->dma_address == DMA_MAPPING_ERROR)
-			return 0;
+			return -EIO;
 		sg_dma_len(sg) = sg->length;
 	}
 
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:26:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:26:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162139.297499 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Cbt-000115-J4; Thu, 29 Jul 2021 20:26:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162139.297499; Thu, 29 Jul 2021 20:26:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Cbt-00010y-G7; Thu, 29 Jul 2021 20:26:29 +0000
Received: by outflank-mailman (input) for mailman id 162139;
 Thu, 29 Jul 2021 20:26:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSU-0005tB-FJ
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:46 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ce8ed7f2-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:16:07 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRj-0008VO-Od; Thu, 29 Jul 2021 14:16:01 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Tk-AT; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ce8ed7f2-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=vIIfMW9o269S9AHsb2MNe2Vf6XnVZ9UtVyZ/8uq4vWQ=; b=pvcMAeHtGOhCkwJfMz++0wQ5Uw
	Y3kwQ4dlzAQ+6ZrifXAoDgEfkkesRB/JLsZCpDcuJ/7TB05/eRsnQwojqMd71nqPfSCYoE6zcv6TG
	Ll8zh3Q/kj40gKF6yXcKtURjOqLKFnjFg0Z/xohKx5fQpGyM0p58StsdQP2UwaUZ4CIMmCF/sWkVb
	33uTQDeU8Mx9R+kpJM6drAJ7pZtr3DEtW0i5jnaOLUO0S8G3mkrqGvX1djm0eCwFQ4EElBCMQ2xoz
	pF234qIFdoZ1yc334c1G/lSjmZ4GYHDyHRq5qoXDZSUPeBQi3c+TOCarI729wL095AwRs2nkKyqqR
	nYu7j3qQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 29 Jul 2021 14:15:25 -0600
Message-Id: <20210729201539.5602-8-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, linux@armlinux.org.uk, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v3 07/21] ARM/dma-mapping: don't set failed sg dma_address to DMA_MAPPING_ERROR
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

Setting the ->dma_address to DMA_MAPPING_ERROR is not part of the
->map_sg calling convention, so remove it.

Link: https://lore.kernel.org/linux-mips/20210716063241.GC13345@lst.de/
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/arm/mm/dma-mapping.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 113b9cb3701b..4b61541853ea 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1632,7 +1632,6 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 	for (i = 1; i < nents; i++) {
 		s = sg_next(s);
 
-		s->dma_address = DMA_MAPPING_ERROR;
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:27:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:27:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162169.297511 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CcX-0001ed-S1; Thu, 29 Jul 2021 20:27:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162169.297511; Thu, 29 Jul 2021 20:27:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CcX-0001eW-Oj; Thu, 29 Jul 2021 20:27:09 +0000
Received: by outflank-mailman (input) for mailman id 162169;
 Thu, 29 Jul 2021 20:27:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSZ-0005tB-FU
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:51 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cec67541-f0a9-11eb-986b-12813bfff9fa;
 Thu, 29 Jul 2021 20:16:07 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRn-0008VM-Nk; Thu, 29 Jul 2021 14:16:04 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Te-3R; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cec67541-f0a9-11eb-986b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=3+NKDp2q/0zHzVVwq3INd+w6NURPV4dE2hTg9/0ITMI=; b=OAsOqNptAFqz7ht2gGLe+fKNkN
	afDvfEj3zeW9zPgG0qWcEcE9wlLmDSYL85QoO8TgnEWXRF0cFS1SxJL0P2x6FNz8bkfgtr50lIoro
	6NBcPcKqDRmsmgDVRzLy+D6IKa8mkq91+s5hOgCuL9nQGrogvFlY65BWYTh6XQsjV4xMlWoDFNNTt
	RXgkNvWiqAupSHXfu1J8U8DfHfK8jRBxipCV1nbbK7WEgwzUwFPWpF0/V8qKrFN+TrHgXMHQe328C
	D8SL2GNPbqtflFoGqbAzN2fcTNhQ834PMkcgcBzlMxFACHWKZCDJYJgnFCRB6vjtCbi2yEAqf0i/3
	lEI0LnDQ==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Richard Henderson <rth@twiddle.net>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	Matt Turner <mattst88@gmail.com>
Date: Thu, 29 Jul 2021 14:15:23 -0600
Message-Id: <20210729201539.5602-6-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT autolearn=no autolearn_force=no version=3.4.2
Subject: [PATCH v3 05/21] alpha: return error code from alpha_pci_map_sg()
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

pci_map_single_1() can fail for different reasons, but since the only
supported type of error return is DMA_MAPPING_ERROR, we coalesce those
errors into EIO.

ENOMEM is returned when no page tables can be allocated.

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
---
 arch/alpha/kernel/pci_iommu.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index 35d7b3096d6e..21f9ac101324 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -649,7 +649,9 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 		sg->dma_address
 		  = pci_map_single_1(pdev, SG_ENT_VIRT_ADDRESS(sg),
 				     sg->length, dac_allowed);
-		return sg->dma_address != DMA_MAPPING_ERROR;
+		if (sg->dma_address == DMA_MAPPING_ERROR)
+			return -EIO;
+		return 1;
 	}
 
 	start = sg;
@@ -685,8 +687,10 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 	if (out < end)
 		out->dma_length = 0;
 
-	if (out - start == 0)
+	if (out - start == 0) {
 		printk(KERN_WARNING "pci_map_sg failed: no entries?\n");
+		return -ENOMEM;
+	}
 	DBGA("pci_map_sg: %ld entries\n", out - start);
 
 	return out - start;
@@ -699,7 +703,7 @@ static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
 	   entries.  Unmap them now.  */
 	if (out > start)
 		pci_unmap_sg(pdev, start, out - start, dir);
-	return 0;
+	return -ENOMEM;
 }
 
 /* Unmap a set of streaming mode DMA translations.  Again, cpu read
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:27:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:27:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162172.297522 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ccg-00020N-42; Thu, 29 Jul 2021 20:27:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162172.297522; Thu, 29 Jul 2021 20:27:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ccg-00020C-0r; Thu, 29 Jul 2021 20:27:18 +0000
Received: by outflank-mailman (input) for mailman id 162172;
 Thu, 29 Jul 2021 20:27:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CSY-0005pZ-5o
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:50 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 48ad604b-acce-465f-b9ae-4270260b6caf;
 Thu, 29 Jul 2021 20:16:05 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRk-0008VN-7E; Thu, 29 Jul 2021 14:16:01 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Th-7E; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 48ad604b-acce-465f-b9ae-4270260b6caf
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=n2R1GNZpiJpIvqPgMoFv818LmwSs1yl8HL/LWwKcvVk=; b=qVpAzv/zp8q1uIn30gxe4THVOf
	7iNjpDJyE9tFtkro3GQAlbokQ/gpGsazqTnsZjslwNvED+wmSRwE7P3xxRHzqUmsDIw51O5WfvnH0
	nD1V0NYBvy80T/DJaC7xHT/CQo/Al0w+HfRcFic/sdrs04csrckHR3kzyqbYmr+VmMG/MDM0eo/uS
	83M0ZzC8oUMYB0G7/wjdMOHZy+w3RJRj7TGV2AmDx3G16Wat0ZmzRhUL3VnB8xcF/7+cDRyQ6eSeZ
	quUs301ROSNu1my9v9/FEaJwUycdweQ9Y3aVike4HEIeDvqy5dDDjfUiEHtg812pNl3hB7i8pKrKQ
	xD7+UHvA==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Russell King <linux@armlinux.org.uk>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Thu, 29 Jul 2021 14:15:24 -0600
Message-Id: <20210729201539.5602-7-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, linux@armlinux.org.uk, tsbogend@alpha.franken.de
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v3 06/21] ARM/dma-mapping: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.
In the case of a DMA_MAPPING_ERROR, -EIO is returned. Otherwise,
-ENOMEM or -EINVAL is returned depending on the error from
__map_sg_chunk().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/arm/mm/dma-mapping.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index c4b8df2ad328..113b9cb3701b 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -980,7 +980,7 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 {
 	const struct dma_map_ops *ops = get_dma_ops(dev);
 	struct scatterlist *s;
-	int i, j;
+	int i, j, ret;
 
 	for_each_sg(sg, s, nents, i) {
 #ifdef CONFIG_NEED_SG_DMA_LENGTH
@@ -988,15 +988,17 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 #endif
 		s->dma_address = ops->map_page(dev, sg_page(s), s->offset,
 						s->length, dir, attrs);
-		if (dma_mapping_error(dev, s->dma_address))
+		if (dma_mapping_error(dev, s->dma_address)) {
+			ret = -EIO;
 			goto bad_mapping;
+		}
 	}
 	return nents;
 
  bad_mapping:
 	for_each_sg(sg, s, i, j)
 		ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
-	return 0;
+	return ret;
 }
 
 /**
@@ -1622,7 +1624,7 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		     bool is_coherent)
 {
 	struct scatterlist *s = sg, *dma = sg, *start = sg;
-	int i, count = 0;
+	int i, count = 0, ret;
 	unsigned int offset = s->offset;
 	unsigned int size = s->offset + s->length;
 	unsigned int max = dma_get_max_seg_size(dev);
@@ -1634,8 +1636,10 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		s->dma_length = 0;
 
 		if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
-			if (__map_sg_chunk(dev, start, size, &dma->dma_address,
-			    dir, attrs, is_coherent) < 0)
+			ret = __map_sg_chunk(dev, start, size,
+					     &dma->dma_address, dir, attrs,
+					     is_coherent);
+			if (ret < 0)
 				goto bad_mapping;
 
 			dma->dma_address += offset;
@@ -1648,8 +1652,9 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		}
 		size += s->length;
 	}
-	if (__map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
-		is_coherent) < 0)
+	ret = __map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
+			     is_coherent);
+	if (ret < 0)
 		goto bad_mapping;
 
 	dma->dma_address += offset;
@@ -1660,7 +1665,9 @@ static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 bad_mapping:
 	for_each_sg(sg, s, count, i)
 		__iommu_remove_mapping(dev, sg_dma_address(s), sg_dma_len(s));
-	return 0;
+	if (ret == -ENOMEM)
+		return ret;
+	return -EINVAL;
 }
 
 /**
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:27:37 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:27:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162193.297535 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ccy-0002nI-Kl; Thu, 29 Jul 2021 20:27:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162193.297535; Thu, 29 Jul 2021 20:27:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ccy-0002nB-He; Thu, 29 Jul 2021 20:27:36 +0000
Received: by outflank-mailman (input) for mailman id 162193;
 Thu, 29 Jul 2021 20:27:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=yd/7=MV=deltatee.com=gunthorp@srs-us1.protection.inumbo.net>)
 id 1m9CST-0005pZ-5i
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:16:45 +0000
Received: from ale.deltatee.com (unknown [204.191.154.188])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b46a029c-233f-4da0-964f-7f12b75393d7;
 Thu, 29 Jul 2021 20:16:04 +0000 (UTC)
Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31])
 by ale.deltatee.com with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRh-0008VM-Ts; Thu, 29 Jul 2021 14:15:59 -0600
Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.92)
 (envelope-from <gunthorp@deltatee.com>)
 id 1m9CRU-0001Tt-QD; Thu, 29 Jul 2021 14:15:44 -0600
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b46a029c-233f-4da0-964f-7f12b75393d7
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To:
	Message-Id:Date:Cc:To:From:content-disposition;
	bh=HMmFCnKiUdZs8XdQrQe+q8n2y8J+pVaubqcncKbrGOc=; b=A77gCyW0d5juDnc7b5J4XOqhxW
	HC57NwrmUkwURjzWQkN9Syh/0vIuAlf3WMVmAPjrtxJ1fn92qxbnJNpgU1MccuVhE2XKvFuqbZ6yb
	s4fF0FP/eLp622wLZAXdLOs1988jAnkVr1m669v4Wlf/syuBk3Ho8Vj55j4bEOpC9EfUgEe0FssYq
	VKgfZMT9ybpjeOvebQMfL0EgOvY+EEEFuQo48AhmPiedYHvJjPv7Cdm5M5k8eo/gt/Fsie7h1kOto
	JwLBrYfbP2HP/+Y3m8ecKhNp5avb4GgJLw2mTfAo1TzqbqlE1K6UMF2u4lpxSzKwZa6Gnvq+ycvAH
	IkOANShw==;
From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-ia64@vger.kernel.org,
	linux-mips@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org,
	sparclinux@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	linux-parisc@vger.kernel.org,
	xen-devel@lists.xenproject.org
Cc: Christoph Hellwig <hch@lst.de>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <martin.oliveira@eideticom.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Geoff Levand <geoff@infradead.org>
Date: Thu, 29 Jul 2021 14:15:28 -0600
Message-Id: <20210729201539.5602-11-logang@deltatee.com>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20210729201539.5602-1-logang@deltatee.com>
References: <20210729201539.5602-1-logang@deltatee.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 172.16.1.31
X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-parisc@vger.kernel.org, xen-devel@lists.xenproject.org, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, sbates@raithlin.com, martin.oliveira@eideticom.com, logang@deltatee.com, mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org, geoff@infradead.org
X-SA-Exim-Mail-From: gunthorp@deltatee.com
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com
X-Spam-Level: 
X-Spam-Status: No, score=-6.7 required=5.0 tests=ALL_TRUSTED,BAYES_00,
	MYRULES_NO_TEXT,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2
Subject: [PATCH v3 10/21] powerpc/iommu: return error code from .map_sg() ops
X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000)
X-SA-Exim-Scanned: Yes (on ale.deltatee.com)

From: Martin Oliveira <martin.oliveira@eideticom.com>

The .map_sg() op now expects an error code instead of zero on failure.

Propagate the error up if vio_dma_iommu_map_sg() fails.

ppc_iommu_map_sg() may fail either because of iommu_range_alloc() or
because of tbl->it_ops->set(). The former only supports returning an
error with DMA_MAPPING_ERROR and an examination of the latter indicates
that it may return arch-specific errors (for example,
tce_buildmulti_pSeriesLP()). Hence, coalesce all of those errors into
-EIO, per the documentation on dma_map_sgtable().

Signed-off-by: Martin Oliveira <martin.oliveira@eideticom.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Geoff Levand <geoff@infradead.org>
---
 arch/powerpc/kernel/iommu.c             | 4 ++--
 arch/powerpc/platforms/ps3/system-bus.c | 2 +-
 arch/powerpc/platforms/pseries/vio.c    | 5 +++--
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 2af89a5e379f..a8ec4fe42817 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -473,7 +473,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 	BUG_ON(direction == DMA_NONE);
 
 	if ((nelems == 0) || !tbl)
-		return 0;
+		return -EINVAL;
 
 	outs = s = segstart = &sglist[0];
 	outcount = 1;
@@ -599,7 +599,7 @@ int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
 		if (s == outs)
 			break;
 	}
-	return 0;
+	return -EIO;
 }
 
 
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 1a5665875165..c54eb46f0cfb 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -663,7 +663,7 @@ static int ps3_ioc0_map_sg(struct device *_dev, struct scatterlist *sg,
 			   unsigned long attrs)
 {
 	BUG();
-	return 0;
+	return -EINVAL;
 }
 
 static void ps3_sb_unmap_sg(struct device *_dev, struct scatterlist *sg,
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index e00f3725ec96..e31e59c54f30 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -560,7 +560,8 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 	for_each_sg(sglist, sgl, nelems, count)
 		alloc_size += roundup(sgl->length, IOMMU_PAGE_SIZE(tbl));
 
-	if (vio_cmo_alloc(viodev, alloc_size))
+	ret = vio_cmo_alloc(viodev, alloc_size);
+	if (ret)
 		goto out_fail;
 	ret = ppc_iommu_map_sg(dev, tbl, sglist, nelems, dma_get_mask(dev),
 			direction, attrs);
@@ -577,7 +578,7 @@ static int vio_dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 	vio_cmo_dealloc(viodev, alloc_size);
 out_fail:
 	atomic_inc(&viodev->cmo.allocs_failed);
-	return 0;
+	return ret;
 }
 
 static void vio_dma_iommu_unmap_sg(struct device *dev,
-- 
2.20.1



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:39:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:39:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162211.297562 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CoT-0004o3-2f; Thu, 29 Jul 2021 20:39:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162211.297562; Thu, 29 Jul 2021 20:39:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CoS-0004nu-Uj; Thu, 29 Jul 2021 20:39:28 +0000
Received: by outflank-mailman (input) for mailman id 162211;
 Thu, 29 Jul 2021 20:39:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9YCS=MV=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m9CoS-0004Wv-BU
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:39:28 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b4bce6db-d5c3-4ef1-aa41-d60671bfbb6e;
 Thu, 29 Jul 2021 20:39:22 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Cmx-0000FL-Gj; Thu, 29 Jul 2021 22:37:55 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Cmm-0003dI-P9; Thu, 29 Jul 2021 22:37:44 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Cmm-0004JO-Lr; Thu, 29 Jul 2021 22:37:44 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b4bce6db-d5c3-4ef1-aa41-d60671bfbb6e
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>,
	kernel@pengutronix.de,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-pci@vger.kernel.org,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Russell Currey <ruscur@russell.cc>,
	"Oliver O'Halloran" <oohall@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>,
	x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Zhou Wang <wangzhou1@hisilicon.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
	Sathya Prakash <sathya.prakash@broadcom.com>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
	Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
	Frederic Barrat <fbarrat@linux.ibm.com>,
	Andrew Donnellan <ajd@linux.ibm.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Yisen Zhuang <yisen.zhuang@huawei.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Vadym Kochan <vkochan@marvell.com>,
	Taras Chornyi <tchornyi@marvell.com>,
	Jiri Pirko <jiri@nvidia.com>,
	Ido Schimmel <idosch@nvidia.com>,
	Simon Horman <simon.horman@corigine.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Michael Buesch <m@bues.ch>,
	Mathias Nyman <mathias.nyman@intel.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Andy Shevchenko <andriy.shevchenko@intel.com>,
	Wojciech Ziemba <wojciech.ziemba@intel.com>,
	Alexander Duyck <alexanderduyck@fb.com>,
	linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux-crypto@vger.kernel.org,
	qat-linux@intel.com,
	MPT-FusionLinux.pdl@broadcom.com,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	oss-drivers@corigine.com,
	xen-devel@lists.xenproject.org,
	linux-usb@vger.kernel.org
Subject: [PATCH v1 4/5] PCI: Adapt all code locations to not use struct pci_dev::driver directly
Date: Thu, 29 Jul 2021 22:37:39 +0200
Message-Id: <20210729203740.1377045-5-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
In-Reply-To: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
References: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-Patch-Hashes: v=1; h=sha256; i=9L+xMpEBAe+EMrTNszE9gpsj0FkwASarXVYcMu+YsdI=; m=G3t4EAjyOjy3F8ef7TOQklRyeKO15tgc41ovGVIn+a4=; p=SZP1SyRbrr31KQGoy989zb3WcUmfzy84Rx/2F/dHMUk=; g=5b1eeed154e55475902017b902263456fa929072
X-Patch-Sig: m=pgp; i=u.kleine-koenig@pengutronix.de; s=0x0D2511F322BFAB1C1580266BE2DCDD9132669BD6; b=iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmEDEYEACgkQwfwUeK3K7AmJMgf8D/V rGCXHUN8HfhKFE/zf8yoQF2icy+zfIsa90DgYdFC1luxthMdZtjW4fJmJeVJGIjsQ98rqD8ZZH46M bZdq72GLx2jA3ff4ra7w4Gx1RG2yXazSlQQibJ3zz9GpreECzUwyzOYdKYg+CiW7ewAK68c52vD8x aowtfphlSLTBS6xvPzx41WtcKr+q5CTOC8vMSz4jaCeDuc4DFS1DISa5xJsizRU5ksye6OxrEgM6G R3BmUzVwM6kYLa9/PHJpdTgIn7zW3e5tumHID6Cr3cTDI0vKKPxTp6dXB5lmsrD752rNyWZJTGqSm ODVS8ghei95agH6BgmMF5AB9TN9C9dw==
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

This prepares removing the driver member of struct pci_dev which holds the
same information than struct pci_dev::dev->driver.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 arch/powerpc/include/asm/ppc-pci.h            |  3 +-
 arch/powerpc/kernel/eeh_driver.c              | 12 ++++---
 arch/x86/events/intel/uncore.c                |  2 +-
 arch/x86/kernel/probe_roms.c                  |  2 +-
 drivers/bcma/host_pci.c                       |  6 ++--
 drivers/crypto/hisilicon/qm.c                 |  2 +-
 drivers/crypto/qat/qat_common/adf_aer.c       |  2 +-
 drivers/message/fusion/mptbase.c              |  4 +--
 drivers/misc/cxl/guest.c                      | 21 +++++------
 drivers/misc/cxl/pci.c                        | 25 +++++++------
 .../ethernet/hisilicon/hns3/hns3_ethtool.c    |  3 +-
 .../ethernet/marvell/prestera/prestera_pci.c  |  2 +-
 drivers/net/ethernet/mellanox/mlxsw/pci.c     |  2 +-
 .../ethernet/netronome/nfp/nfp_net_ethtool.c  |  2 +-
 drivers/pci/iov.c                             | 23 +++++++-----
 drivers/pci/pci-driver.c                      | 28 ++++++++-------
 drivers/pci/pci.c                             | 10 +++---
 drivers/pci/pcie/err.c                        | 35 ++++++++++---------
 drivers/pci/xen-pcifront.c                    |  4 +--
 drivers/ssb/pcihost_wrapper.c                 |  7 ++--
 drivers/usb/host/xhci-pci.c                   |  3 +-
 21 files changed, 113 insertions(+), 85 deletions(-)

diff --git a/arch/powerpc/include/asm/ppc-pci.h b/arch/powerpc/include/asm/ppc-pci.h
index 2b9edbf6e929..63938c156c57 100644
--- a/arch/powerpc/include/asm/ppc-pci.h
+++ b/arch/powerpc/include/asm/ppc-pci.h
@@ -57,7 +57,8 @@ void eeh_sysfs_remove_device(struct pci_dev *pdev);
 
 static inline const char *eeh_driver_name(struct pci_dev *pdev)
 {
-	return (pdev && pdev->driver) ? pdev->driver->name : "<null>";
+	struct pci_driver *pdrv;
+	return (pdev && (pdrv = pci_driver_of_dev(pdev))) ? pdrv->name : "<null>";
 }
 
 #endif /* CONFIG_EEH */
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index 3eff6a4888e7..0fc712a8775e 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -104,13 +104,14 @@ static bool eeh_edev_actionable(struct eeh_dev *edev)
  */
 static inline struct pci_driver *eeh_pcid_get(struct pci_dev *pdev)
 {
-	if (!pdev || !pdev->driver)
+	struct pci_driver *pdrv;
+	if (!pdev || !(pdrv = pci_driver_of_dev(pdev)))
 		return NULL;
 
-	if (!try_module_get(pdev->driver->driver.owner))
+	if (!try_module_get(pdrv->driver.owner))
 		return NULL;
 
-	return pdev->driver;
+	return pdrv;
 }
 
 /**
@@ -122,10 +123,11 @@ static inline struct pci_driver *eeh_pcid_get(struct pci_dev *pdev)
  */
 static inline void eeh_pcid_put(struct pci_dev *pdev)
 {
-	if (!pdev || !pdev->driver)
+	struct pci_driver *pdrv;
+	if (!pdev || !(pdrv = pci_driver_of_dev(pdev)))
 		return;
 
-	module_put(pdev->driver->driver.owner);
+	module_put(pdrv->driver.owner);
 }
 
 /**
diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
index 9bf4dbbc26e2..14eb141b6cf2 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
@@ -1176,7 +1176,7 @@ static int uncore_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id
 	 * PCI slot and func to indicate the uncore box.
 	 */
 	if (id->driver_data & ~0xffff) {
-		struct pci_driver *pci_drv = pdev->driver;
+		struct pci_driver *pci_drv = pci_driver_of_dev(pdev);
 
 		pmu = uncore_pci_find_dev_pmu(pdev, pci_drv->id_table);
 		if (pmu == NULL)
diff --git a/arch/x86/kernel/probe_roms.c b/arch/x86/kernel/probe_roms.c
index 9e1def3744f2..55bfafec9684 100644
--- a/arch/x86/kernel/probe_roms.c
+++ b/arch/x86/kernel/probe_roms.c
@@ -80,7 +80,7 @@ static struct resource video_rom_resource = {
  */
 static bool match_id(struct pci_dev *pdev, unsigned short vendor, unsigned short device)
 {
-	struct pci_driver *drv = pdev->driver;
+	struct pci_driver *drv = pci_driver_of_dev(pdev);
 	const struct pci_device_id *id;
 
 	if (pdev->vendor == vendor && pdev->device == device)
diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c
index 69c10a7b7c61..f9bfae87ebd9 100644
--- a/drivers/bcma/host_pci.c
+++ b/drivers/bcma/host_pci.c
@@ -161,6 +161,7 @@ static int bcma_host_pci_probe(struct pci_dev *dev,
 			       const struct pci_device_id *id)
 {
 	struct bcma_bus *bus;
+	struct pci_driver *pdrv;
 	int err = -ENOMEM;
 	const char *name;
 	u32 val;
@@ -176,8 +177,9 @@ static int bcma_host_pci_probe(struct pci_dev *dev,
 		goto err_kfree_bus;
 
 	name = dev_name(&dev->dev);
-	if (dev->driver && dev->driver->name)
-		name = dev->driver->name;
+	pdrv = pci_driver_of_dev(dev);
+	if (pdrv && pdrv->name)
+		name = pdrv->name;
 	err = pci_request_regions(dev, name);
 	if (err)
 		goto err_pci_disable;
diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c
index 1d67f94a1d56..303cc546f466 100644
--- a/drivers/crypto/hisilicon/qm.c
+++ b/drivers/crypto/hisilicon/qm.c
@@ -3003,7 +3003,7 @@ static int qm_alloc_uacce(struct hisi_qm *qm)
 	};
 	int ret;
 
-	ret = strscpy(interface.name, pdev->driver->name,
+	ret = strscpy(interface.name, pci_driver_of_dev(pdev)->name,
 		      sizeof(interface.name));
 	if (ret < 0)
 		return -ENAMETOOLONG;
diff --git a/drivers/crypto/qat/qat_common/adf_aer.c b/drivers/crypto/qat/qat_common/adf_aer.c
index d2ae293d0df6..162c2b9ef93d 100644
--- a/drivers/crypto/qat/qat_common/adf_aer.c
+++ b/drivers/crypto/qat/qat_common/adf_aer.c
@@ -185,7 +185,7 @@ static const struct pci_error_handlers adf_err_handler = {
 int adf_enable_aer(struct adf_accel_dev *accel_dev)
 {
 	struct pci_dev *pdev = accel_to_pci_dev(accel_dev);
-	struct pci_driver *pdrv = pdev->driver;
+	struct pci_driver *pdrv = pci_driver_of_dev(pdev);
 
 	pdrv->err_handler = &adf_err_handler;
 	pci_enable_pcie_error_reporting(pdev);
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 7f7abc9069f7..181e2927a719 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -838,8 +838,8 @@ mpt_device_driver_register(struct mpt_pci_driver * dd_cbfunc, u8 cb_idx)
 
 	/* call per pci device probe entry point */
 	list_for_each_entry(ioc, &ioc_list, list) {
-		id = ioc->pcidev->driver ?
-		    ioc->pcidev->driver->id_table : NULL;
+		struct pci_driver *pdrv = pci_driver_of_dev(ioc->pcidev);
+		id = pdrv ?  pdrv->id_table : NULL;
 		if (dd_cbfunc->probe)
 			dd_cbfunc->probe(ioc->pcidev, id);
 	 }
diff --git a/drivers/misc/cxl/guest.c b/drivers/misc/cxl/guest.c
index 186308f1f8eb..99b969b182b5 100644
--- a/drivers/misc/cxl/guest.c
+++ b/drivers/misc/cxl/guest.c
@@ -25,28 +25,29 @@ static void pci_error_handlers(struct cxl_afu *afu,
 		return;
 
 	list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
-		if (!afu_dev->driver)
+		struct pci_driver *afu_drv = pci_driver_of_dev(afu_dev);
+		if (!afu_drv)
 			continue;
 
 		switch (bus_error_event) {
 		case CXL_ERROR_DETECTED_EVENT:
 			afu_dev->error_state = state;
 
-			if (afu_dev->driver->err_handler &&
-			    afu_dev->driver->err_handler->error_detected)
-				afu_dev->driver->err_handler->error_detected(afu_dev, state);
+			if (afu_drv->err_handler &&
+			    afu_drv->err_handler->error_detected)
+				afu_drv->err_handler->error_detected(afu_dev, state);
 		break;
 		case CXL_SLOT_RESET_EVENT:
 			afu_dev->error_state = state;
 
-			if (afu_dev->driver->err_handler &&
-			    afu_dev->driver->err_handler->slot_reset)
-				afu_dev->driver->err_handler->slot_reset(afu_dev);
+			if (afu_drv->err_handler &&
+			    afu_drv->err_handler->slot_reset)
+				afu_drv->err_handler->slot_reset(afu_dev);
 		break;
 		case CXL_RESUME_EVENT:
-			if (afu_dev->driver->err_handler &&
-			    afu_dev->driver->err_handler->resume)
-				afu_dev->driver->err_handler->resume(afu_dev);
+			if (afu_drv->err_handler &&
+			    afu_drv->err_handler->resume)
+				afu_drv->err_handler->resume(afu_dev);
 		break;
 		}
 	}
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 2ba899f5659f..1cf39275029f 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -1805,13 +1805,14 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu,
 		return result;
 
 	list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
-		if (!afu_dev->driver)
+		struct pci_driver *afu_drv = pci_driver_of_dev(afu_dev);
+		if (!afu_drv)
 			continue;
 
 		afu_dev->error_state = state;
 
-		if (afu_dev->driver->err_handler)
-			afu_result = afu_dev->driver->err_handler->error_detected(afu_dev,
+		if (afu_drv->err_handler)
+			afu_result = afu_drv->err_handler->error_detected(afu_dev,
 										  state);
 		/* Disconnect trumps all, NONE trumps NEED_RESET */
 		if (afu_result == PCI_ERS_RESULT_DISCONNECT)
@@ -2003,6 +2004,8 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev)
 			continue;
 
 		list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
+			struct pci_driver *afu_drv;
+
 			/* Reset the device context.
 			 * TODO: make this less disruptive
 			 */
@@ -2028,12 +2031,13 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev)
 			 * shouldn't start new work until we call
 			 * their resume function.
 			 */
-			if (!afu_dev->driver)
+			afu_drv = pci_driver_of_dev(afu_dev);
+			if (!afu_drv)
 				continue;
 
-			if (afu_dev->driver->err_handler &&
-			    afu_dev->driver->err_handler->slot_reset)
-				afu_result = afu_dev->driver->err_handler->slot_reset(afu_dev);
+			if (afu_drv->err_handler &&
+			    afu_drv->err_handler->slot_reset)
+				afu_result = afu_drv->err_handler->slot_reset(afu_dev);
 
 			if (afu_result == PCI_ERS_RESULT_DISCONNECT)
 				result = PCI_ERS_RESULT_DISCONNECT;
@@ -2074,9 +2078,10 @@ static void cxl_pci_resume(struct pci_dev *pdev)
 			continue;
 
 		list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
-			if (afu_dev->driver && afu_dev->driver->err_handler &&
-			    afu_dev->driver->err_handler->resume)
-				afu_dev->driver->err_handler->resume(afu_dev);
+			struct pci_driver *afu_drv = pci_driver_of_dev(afu_dev);
+			if (afu_drv && afu_drv->err_handler &&
+			    afu_drv->err_handler->resume)
+				afu_drv->err_handler->resume(afu_dev);
 		}
 	}
 	spin_unlock(&adapter->afu_list_lock);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index 82061ab6930f..833d35e9ed4a 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -593,8 +593,7 @@ static void hns3_get_drvinfo(struct net_device *netdev,
 		return;
 	}
 
-	strncpy(drvinfo->driver, h->pdev->driver->name,
-		sizeof(drvinfo->driver));
+	strncpy(drvinfo->driver, pci_driver_of_dev(h->pdev)->name, sizeof(drvinfo->driver));
 	drvinfo->driver[sizeof(drvinfo->driver) - 1] = '\0';
 
 	strncpy(drvinfo->bus_info, pci_name(h->pdev),
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_pci.c b/drivers/net/ethernet/marvell/prestera/prestera_pci.c
index a250d394da38..180999c2165e 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_pci.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_pci.c
@@ -720,7 +720,7 @@ static int prestera_fw_load(struct prestera_fw *fw)
 static int prestera_pci_probe(struct pci_dev *pdev,
 			      const struct pci_device_id *id)
 {
-	const char *driver_name = pdev->driver->name;
+	const char *driver_name = pci_driver_of_dev(pdev)->name;
 	struct prestera_fw *fw;
 	int err;
 
diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index 13b0259f7ea6..d3c1ca840fa7 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -1876,7 +1876,7 @@ static void mlxsw_pci_cmd_fini(struct mlxsw_pci *mlxsw_pci)
 
 static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
-	const char *driver_name = pdev->driver->name;
+	const char *driver_name = pci_driver_of_dev(pdev)->name;
 	struct mlxsw_pci *mlxsw_pci;
 	int err;
 
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
index 1b482446536d..5c25f6af3f62 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
@@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev,
 {
 	char nsp_version[ETHTOOL_FWVERS_LEN] = {};
 
-	strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver));
+	strlcpy(drvinfo->driver, pci_driver_of_dev(pdev)->name, sizeof(drvinfo->driver));
 	nfp_net_get_nspinfo(app, nsp_version);
 	snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version),
 		 "%s %s %s %s", vnic_version, nsp_version,
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index dafdc652fcd0..7c6f0c466df8 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -164,13 +164,14 @@ static ssize_t sriov_vf_total_msix_show(struct device *dev,
 					char *buf)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
+	struct pci_driver *pdrv = pci_driver_of_dev(pdev);
 	u32 vf_total_msix = 0;
 
 	device_lock(dev);
-	if (!pdev->driver || !pdev->driver->sriov_get_vf_total_msix)
+	if (!pdrv || !pdrv->sriov_get_vf_total_msix)
 		goto unlock;
 
-	vf_total_msix = pdev->driver->sriov_get_vf_total_msix(pdev);
+	vf_total_msix = pdrv->sriov_get_vf_total_msix(pdev);
 unlock:
 	device_unlock(dev);
 	return sysfs_emit(buf, "%u\n", vf_total_msix);
@@ -183,6 +184,7 @@ static ssize_t sriov_vf_msix_count_store(struct device *dev,
 {
 	struct pci_dev *vf_dev = to_pci_dev(dev);
 	struct pci_dev *pdev = pci_physfn(vf_dev);
+	struct pci_driver *pdrv;
 	int val, ret;
 
 	ret = kstrtoint(buf, 0, &val);
@@ -193,13 +195,14 @@ static ssize_t sriov_vf_msix_count_store(struct device *dev,
 		return -EINVAL;
 
 	device_lock(&pdev->dev);
-	if (!pdev->driver || !pdev->driver->sriov_set_msix_vec_count) {
+	pdrv = pci_driver_of_dev(pdev);
+	if (!pdrv || !pdrv->sriov_set_msix_vec_count) {
 		ret = -EOPNOTSUPP;
 		goto err_pdev;
 	}
 
 	device_lock(&vf_dev->dev);
-	if (vf_dev->driver) {
+	if (pci_driver_of_dev(vf_dev)) {
 		/*
 		 * A driver is already attached to this VF and has configured
 		 * itself based on the current MSI-X vector count. Changing
@@ -209,7 +212,7 @@ static ssize_t sriov_vf_msix_count_store(struct device *dev,
 		goto err_dev;
 	}
 
-	ret = pdev->driver->sriov_set_msix_vec_count(vf_dev, val);
+	ret = pdrv->sriov_set_msix_vec_count(vf_dev, val);
 
 err_dev:
 	device_unlock(&vf_dev->dev);
@@ -376,6 +379,7 @@ static ssize_t sriov_numvfs_store(struct device *dev,
 				  const char *buf, size_t count)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
+	struct pci_driver *pdrv;
 	int ret;
 	u16 num_vfs;
 
@@ -392,14 +396,15 @@ static ssize_t sriov_numvfs_store(struct device *dev,
 		goto exit;
 
 	/* is PF driver loaded */
-	if (!pdev->driver) {
+	pdrv = pci_driver_of_dev(pdev);
+	if (!pdrv) {
 		pci_info(pdev, "no driver bound to device; cannot configure SR-IOV\n");
 		ret = -ENOENT;
 		goto exit;
 	}
 
 	/* is PF driver loaded w/callback */
-	if (!pdev->driver->sriov_configure) {
+	if (!pdrv->sriov_configure) {
 		pci_info(pdev, "driver does not support SR-IOV configuration via sysfs\n");
 		ret = -ENOENT;
 		goto exit;
@@ -407,7 +412,7 @@ static ssize_t sriov_numvfs_store(struct device *dev,
 
 	if (num_vfs == 0) {
 		/* disable VFs */
-		ret = pdev->driver->sriov_configure(pdev, 0);
+		ret = pdrv->sriov_configure(pdev, 0);
 		goto exit;
 	}
 
@@ -419,7 +424,7 @@ static ssize_t sriov_numvfs_store(struct device *dev,
 		goto exit;
 	}
 
-	ret = pdev->driver->sriov_configure(pdev, num_vfs);
+	ret = pdrv->sriov_configure(pdev, num_vfs);
 	if (ret < 0)
 		goto exit;
 
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 7dff574bb2fa..740d5bf5d411 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -443,7 +443,7 @@ static int pci_device_probe(struct device *dev)
 static int pci_device_remove(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct pci_driver *drv = pci_driver_of_dev(pci_dev);
 
 	if (drv->remove) {
 		pm_runtime_get_sync(dev);
@@ -480,7 +480,7 @@ static int pci_device_remove(struct device *dev)
 static void pci_device_shutdown(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct pci_driver *drv = pci_driver_of_dev(pci_dev);
 
 	pm_runtime_resume(dev);
 
@@ -576,7 +576,7 @@ static int pci_pm_reenable_device(struct pci_dev *pci_dev)
 static int pci_legacy_suspend(struct device *dev, pm_message_t state)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct pci_driver *drv = pci_driver_of_dev(pci_dev);
 
 	if (drv && drv->suspend) {
 		pci_power_t prev = pci_dev->current_state;
@@ -617,7 +617,7 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
 static int pci_legacy_resume(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
-	struct pci_driver *drv = pci_dev->driver;
+	struct pci_driver *drv = pci_driver_of_dev(pci_dev);
 
 	pci_fixup_device(pci_fixup_resume, pci_dev);
 
@@ -636,7 +636,7 @@ static void pci_pm_default_suspend(struct pci_dev *pci_dev)
 
 static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
 {
-	struct pci_driver *drv = pci_dev->driver;
+	struct pci_driver *drv = pci_driver_of_dev(pci_dev);
 	bool ret = drv && (drv->suspend || drv->resume);
 
 	/*
@@ -1224,16 +1224,17 @@ static int pci_pm_restore(struct device *dev)
 static int pci_pm_runtime_suspend(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
+	struct pci_driver *pdrv = pci_driver_of_dev(pci_dev);
 	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 	pci_power_t prev = pci_dev->current_state;
 	int error;
 
 	/*
-	 * If pci_dev->driver is not set (unbound), we leave the device in D0,
+	 * If pdrv is not set (unbound), we leave the device in D0,
 	 * but it may go to D3cold when the bridge above it runtime suspends.
 	 * Save its config space in case that happens.
 	 */
-	if (!pci_dev->driver) {
+	if (!pdrv) {
 		pci_save_state(pci_dev);
 		return 0;
 	}
@@ -1279,6 +1280,7 @@ static int pci_pm_runtime_suspend(struct device *dev)
 static int pci_pm_runtime_resume(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
+	struct pci_driver *pdrv = pci_driver_of_dev(pci_dev);
 	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 	pci_power_t prev_state = pci_dev->current_state;
 	int error = 0;
@@ -1290,7 +1292,7 @@ static int pci_pm_runtime_resume(struct device *dev)
 	 */
 	pci_restore_standard_config(pci_dev);
 
-	if (!pci_dev->driver)
+	if (!pdrv)
 		return 0;
 
 	pci_fixup_device(pci_fixup_resume_early, pci_dev);
@@ -1310,13 +1312,14 @@ static int pci_pm_runtime_resume(struct device *dev)
 static int pci_pm_runtime_idle(struct device *dev)
 {
 	struct pci_dev *pci_dev = to_pci_dev(dev);
+	struct pci_driver *pdrv = pci_driver_of_dev(pci_dev);
 	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 
 	/*
-	 * If pci_dev->driver is not set (unbound), the device should
+	 * If pdrv is not set (unbound), the device should
 	 * always remain in D0 regardless of the runtime PM status
 	 */
-	if (!pci_dev->driver)
+	if (!pdrv)
 		return 0;
 
 	if (!pm)
@@ -1423,8 +1426,9 @@ static struct pci_driver pci_compat_driver = {
  */
 struct pci_driver *pci_dev_driver(const struct pci_dev *dev)
 {
-	if (dev->driver)
-		return dev->driver;
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
+	if (pdrv)
+		return pdrv;
 	else {
 		int i;
 		for (i = 0; i <= PCI_ROM_RESOURCE; i++)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index aacf575c15cf..9565f6c1bd4f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -5069,11 +5069,12 @@ EXPORT_SYMBOL_GPL(pci_dev_unlock);
 
 static void pci_dev_save_and_disable(struct pci_dev *dev)
 {
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
 	const struct pci_error_handlers *err_handler =
-			dev->driver ? dev->driver->err_handler : NULL;
+			pdrv ? pdrv->err_handler : NULL;
 
 	/*
-	 * dev->driver->err_handler->reset_prepare() is protected against
+	 * pdrv->err_handler->reset_prepare() is protected against
 	 * races with ->remove() by the device lock, which must be held by
 	 * the caller.
 	 */
@@ -5100,13 +5101,14 @@ static void pci_dev_save_and_disable(struct pci_dev *dev)
 
 static void pci_dev_restore(struct pci_dev *dev)
 {
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
 	const struct pci_error_handlers *err_handler =
-			dev->driver ? dev->driver->err_handler : NULL;
+			pdrv ? pdrv->err_handler : NULL;
 
 	pci_restore_state(dev);
 
 	/*
-	 * dev->driver->err_handler->reset_done() is protected against
+	 * err_handler->reset_done() is protected against
 	 * races with ->remove() by the device lock, which must be held by
 	 * the caller.
 	 */
diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c
index b576aa890c76..5b2b7b2972dd 100644
--- a/drivers/pci/pcie/err.c
+++ b/drivers/pci/pcie/err.c
@@ -51,12 +51,12 @@ static int report_error_detected(struct pci_dev *dev,
 {
 	pci_ers_result_t vote;
 	const struct pci_error_handlers *err_handler;
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
 
 	device_lock(&dev->dev);
 	if (!pci_dev_set_io_state(dev, state) ||
-		!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->error_detected) {
+		!pdrv || !pdrv->err_handler ||
+		!pdrv->err_handler->error_detected) {
 		/*
 		 * If any device in the subtree does not have an error_detected
 		 * callback, PCI_ERS_RESULT_NO_AER_DRIVER prevents subsequent
@@ -70,7 +70,7 @@ static int report_error_detected(struct pci_dev *dev,
 			vote = PCI_ERS_RESULT_NONE;
 		}
 	} else {
-		err_handler = dev->driver->err_handler;
+		err_handler = pdrv->err_handler;
 		vote = err_handler->error_detected(dev, state);
 	}
 	pci_uevent_ers(dev, vote);
@@ -93,14 +93,15 @@ static int report_mmio_enabled(struct pci_dev *dev, void *data)
 {
 	pci_ers_result_t vote, *result = data;
 	const struct pci_error_handlers *err_handler;
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
 
 	device_lock(&dev->dev);
-	if (!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->mmio_enabled)
+	if (!pdrv ||
+		!pdrv->err_handler ||
+		!pdrv->err_handler->mmio_enabled)
 		goto out;
 
-	err_handler = dev->driver->err_handler;
+	err_handler = pdrv->err_handler;
 	vote = err_handler->mmio_enabled(dev);
 	*result = merge_result(*result, vote);
 out:
@@ -112,14 +113,15 @@ static int report_slot_reset(struct pci_dev *dev, void *data)
 {
 	pci_ers_result_t vote, *result = data;
 	const struct pci_error_handlers *err_handler;
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
 
 	device_lock(&dev->dev);
-	if (!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->slot_reset)
+	if (!pdrv ||
+		!pdrv->err_handler ||
+		!pdrv->err_handler->slot_reset)
 		goto out;
 
-	err_handler = dev->driver->err_handler;
+	err_handler = pdrv->err_handler;
 	vote = err_handler->slot_reset(dev);
 	*result = merge_result(*result, vote);
 out:
@@ -130,15 +132,16 @@ static int report_slot_reset(struct pci_dev *dev, void *data)
 static int report_resume(struct pci_dev *dev, void *data)
 {
 	const struct pci_error_handlers *err_handler;
+	struct pci_driver *pdrv = pci_driver_of_dev(dev);
 
 	device_lock(&dev->dev);
 	if (!pci_dev_set_io_state(dev, pci_channel_io_normal) ||
-		!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->resume)
+		!pdrv ||
+		!pdrv->err_handler ||
+		!pdrv->err_handler->resume)
 		goto out;
 
-	err_handler = dev->driver->err_handler;
+	err_handler = pdrv->err_handler;
 	err_handler->resume(dev);
 out:
 	pci_uevent_ers(dev, PCI_ERS_RESULT_RECOVERED);
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index b7a8f3a1921f..c80c57371dd8 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -599,12 +599,12 @@ static pci_ers_result_t pcifront_common_process(int cmd,
 	result = PCI_ERS_RESULT_NONE;
 
 	pcidev = pci_get_domain_bus_and_slot(domain, bus, devfn);
-	if (!pcidev || !pcidev->driver) {
+	pdrv = pci_driver_of_dev(pcidev);
+	if (!pcidev || !pdrv) {
 		dev_err(&pdev->xdev->dev, "device or AER driver is NULL\n");
 		pci_dev_put(pcidev);
 		return result;
 	}
-	pdrv = pcidev->driver;
 
 	if (pdrv) {
 		if (pdrv->err_handler && pdrv->err_handler->error_detected) {
diff --git a/drivers/ssb/pcihost_wrapper.c b/drivers/ssb/pcihost_wrapper.c
index 410215c16920..229329b9e51c 100644
--- a/drivers/ssb/pcihost_wrapper.c
+++ b/drivers/ssb/pcihost_wrapper.c
@@ -68,6 +68,7 @@ static int ssb_pcihost_probe(struct pci_dev *dev,
 			     const struct pci_device_id *id)
 {
 	struct ssb_bus *ssb;
+	struct pci_driver *pdrv;
 	int err = -ENOMEM;
 	const char *name;
 	u32 val;
@@ -79,8 +80,10 @@ static int ssb_pcihost_probe(struct pci_dev *dev,
 	if (err)
 		goto err_kfree_ssb;
 	name = dev_name(&dev->dev);
-	if (dev->driver && dev->driver->name)
-		name = dev->driver->name;
+	
+	pdrv = pci_driver_of_dev(dev);
+	if (pdrv && pdrv->name)
+		name = pdrv->name;
 	err = pci_request_regions(dev, name);
 	if (err)
 		goto err_pci_disable;
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 18c2bbddf080..d8a6ef602a46 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -100,10 +100,11 @@ static int xhci_pci_reinit(struct xhci_hcd *xhci, struct pci_dev *pdev)
 static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
 {
 	struct pci_dev                  *pdev = to_pci_dev(dev);
+	struct pci_driver               *pdrv = pci_driver_of_dev(pdev);
 	struct xhci_driver_data         *driver_data;
 	const struct pci_device_id      *id;
 
-	id = pci_match_id(pdev->driver->id_table, pdev);
+	id = pci_match_id(pdrv->id_table, pdev);
 
 	if (id && id->driver_data) {
 		driver_data = (struct xhci_driver_data *)id->driver_data;
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 20:39:30 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 20:39:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162210.297549 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CoO-0004X8-PZ; Thu, 29 Jul 2021 20:39:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162210.297549; Thu, 29 Jul 2021 20:39:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9CoO-0004X1-Mb; Thu, 29 Jul 2021 20:39:24 +0000
Received: by outflank-mailman (input) for mailman id 162210;
 Thu, 29 Jul 2021 20:39:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9YCS=MV=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m9CoN-0004Wv-Cj
 for xen-devel@lists.xenproject.org; Thu, 29 Jul 2021 20:39:23 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4336c859-df46-43b0-9e60-574b98c40c19;
 Thu, 29 Jul 2021 20:39:20 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Cmx-0000F8-Gi; Thu, 29 Jul 2021 22:37:55 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Cml-0003d6-RY; Thu, 29 Jul 2021 22:37:43 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Cml-0004Ht-Nr; Thu, 29 Jul 2021 22:37:43 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 4336c859-df46-43b0-9e60-574b98c40c19
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>,
	kernel@pengutronix.de,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-pci@vger.kernel.org,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Russell Currey <ruscur@russell.cc>,
	"Oliver O'Halloran" <oohall@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>,
	x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	=?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>,
	Zhou Wang <wangzhou1@hisilicon.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
	Sathya Prakash <sathya.prakash@broadcom.com>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
	Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
	Frederic Barrat <fbarrat@linux.ibm.com>,
	Andrew Donnellan <ajd@linux.ibm.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Yisen Zhuang <yisen.zhuang@huawei.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Vadym Kochan <vkochan@marvell.com>,
	Taras Chornyi <tchornyi@marvell.com>,
	Jiri Pirko <jiri@nvidia.com>,
	Ido Schimmel <idosch@nvidia.com>,
	Simon Horman <simon.horman@corigine.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Michael Buesch <m@bues.ch>,
	Mathias Nyman <mathias.nyman@intel.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Andy Shevchenko <andriy.shevchenko@intel.com>,
	Wojciech Ziemba <wojciech.ziemba@intel.com>,
	Alexander Duyck <alexanderduyck@fb.com>,
	linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux-crypto@vger.kernel.org,
	qat-linux@intel.com,
	MPT-FusionLinux.pdl@broadcom.com,
	linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org,
	oss-drivers@corigine.com,
	xen-devel@lists.xenproject.org,
	linux-usb@vger.kernel.org
Subject: [PATCH v1 0/5] PCI: Drop duplicated tracking of a pci_dev's bound driver
Date: Thu, 29 Jul 2021 22:37:35 +0200
Message-Id: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
X-Mailer: git-send-email 2.30.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org

Hello,

struct pci_dev tracks the bound pci driver twice. This series is about
removing this duplication.

The first two patches are just cleanups. The third patch introduces a
wrapper that abstracts access to struct pci_dev->driver. In the next
patch (hopefully) all users are converted to use the new wrapper and
finally the fifth patch removes the duplication.

Note this series is only build tested (allmodconfig on several
architectures).

I'm open to restructure this series if this simplifies things. E.g. the
use of the new wrapper in drivers/pci could be squashed into the patch
introducing the wrapper. Patch 4 could be split by maintainer tree or
squashed into patch 3 completely.

Best regards
Uwe

Uwe Kleine-König (5):
  PCI: Simplify pci_device_remove()
  PCI: Drop useless check from pci_device_probe()
  PCI: Provide wrapper to access a pci_dev's bound driver
  PCI: Adapt all code locations to not use struct pci_dev::driver
    directly
  PCI: Drop duplicated tracking of a pci_dev's bound driver

 arch/powerpc/include/asm/ppc-pci.h            |  3 +-
 arch/powerpc/kernel/eeh_driver.c              | 12 +++--
 arch/x86/events/intel/uncore.c                |  2 +-
 arch/x86/kernel/probe_roms.c                  |  2 +-
 drivers/bcma/host_pci.c                       |  6 ++-
 drivers/crypto/hisilicon/qm.c                 |  2 +-
 drivers/crypto/qat/qat_common/adf_aer.c       |  2 +-
 drivers/message/fusion/mptbase.c              |  4 +-
 drivers/misc/cxl/guest.c                      | 21 ++++----
 drivers/misc/cxl/pci.c                        | 25 ++++++----
 .../ethernet/hisilicon/hns3/hns3_ethtool.c    |  3 +-
 .../ethernet/marvell/prestera/prestera_pci.c  |  2 +-
 drivers/net/ethernet/mellanox/mlxsw/pci.c     |  2 +-
 .../ethernet/netronome/nfp/nfp_net_ethtool.c  |  2 +-
 drivers/pci/iov.c                             | 23 +++++----
 drivers/pci/pci-driver.c                      | 48 +++++++++----------
 drivers/pci/pci.c                             | 10 ++--
 drivers/pci/pcie/err.c                        | 35 +++++++-------
 drivers/pci/xen-pcifront.c                    |  4 +-
 drivers/ssb/pcihost_wrapper.c                 |  7 ++-
 drivers/usb/host/xhci-pci.c                   |  3 +-
 include/linux/pci.h                           |  2 +-
 22 files changed, 121 insertions(+), 99 deletions(-)


base-commit: 2734d6c1b1a089fb593ef6a23d4b70903526fe0c
-- 
2.30.2



From xen-devel-bounces@lists.xenproject.org Thu Jul 29 21:47:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 21:47:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162228.297577 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ds1-00036q-Dg; Thu, 29 Jul 2021 21:47:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162228.297577; Thu, 29 Jul 2021 21:47:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ds1-00036j-A1; Thu, 29 Jul 2021 21:47:13 +0000
Received: by outflank-mailman (input) for mailman id 162228;
 Thu, 29 Jul 2021 21:47:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Drz-00036Y-Rg; Thu, 29 Jul 2021 21:47:11 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Drz-0006UK-Hy; Thu, 29 Jul 2021 21:47:11 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Drz-0005PQ-89; Thu, 29 Jul 2021 21:47:11 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Drz-0002FR-7Z; Thu, 29 Jul 2021 21:47:11 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=XKUILPm+OvpTgjUGHXbiS5wWM305QmYXVeO/7kumfyw=; b=pdRPogrLvEvG/2OSnZZfw6MVgH
	z4W5Nq9SNIzqSs9DSvsZ0loAzePhMkhEz7pBhxdZ4o10AMnZ/BphvS52jYDlv2B5CXV7EWRHthjnD
	9XXK9apy2JcuaTAVlUBxVxqePqkcK/mgwnsoiQ2oIWJSp79t4tZgaB+EjNMkQJ+hgdJI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164034-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164034: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:allowable
    qemu-mainline:test-amd64-amd64-xl-rtds:guest-localmigrate/x10:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=69ea12b19a15ae006521cd5cc0f627f27f738746
X-Osstest-Versions-That:
    qemuu=f2da205cb4142259d9bc6b9d4596ebbe2426fe49
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 21:47:11 +0000

flight 164034 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164034/

Failures :-/ but no regressions.

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds    18 guest-start/debian.repeat fail REGR. vs. 164014

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-rtds     20 guest-localmigrate/x10       fail  like 164014
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164014
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164014
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164014
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164014
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164014
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164014
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164014
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                69ea12b19a15ae006521cd5cc0f627f27f738746
baseline version:
 qemuu                f2da205cb4142259d9bc6b9d4596ebbe2426fe49

Last test of basis   164014  2021-07-27 19:39:08 Z    2 days
Testing same since   164024  2021-07-28 15:07:58 Z    1 days    2 attempts

------------------------------------------------------------
People who touched revisions under test:
  Markus Armbruster <armbru@redhat.com>
  Michael S. Tsirkin <mst@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     fail    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   f2da205cb4..69ea12b19a  69ea12b19a15ae006521cd5cc0f627f27f738746 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Thu Jul 29 23:02:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Thu, 29 Jul 2021 23:02:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162238.297594 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9F2E-0001nR-TA; Thu, 29 Jul 2021 23:01:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162238.297594; Thu, 29 Jul 2021 23:01:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9F2E-0001nK-QK; Thu, 29 Jul 2021 23:01:50 +0000
Received: by outflank-mailman (input) for mailman id 162238;
 Thu, 29 Jul 2021 23:01:49 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9F2D-0001nA-2C; Thu, 29 Jul 2021 23:01:49 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9F2C-0007Xr-P6; Thu, 29 Jul 2021 23:01:48 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9F2C-0007N4-GW; Thu, 29 Jul 2021 23:01:48 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9F2C-0000vB-Fy; Thu, 29 Jul 2021 23:01:48 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=eiwBwePz1DDf78CsIakU6EzLFQiIz13SHTuFO6I+tgU=; b=BIxm7ovBvD2bqvf664MXZrxT+K
	Jc6/LhmbmCGme5PMRQmtYn8EchOgVpxPYIXji5RE/bzlR19XNrxIvFzqsjEUAEybxZP9eFhrN6hc5
	r1D35mTept4Weg7Z097KqWuJ3JbLjrYpjUT/rUj4NslmFbKpsg/wTRZsijSzITz0DIEk=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164039-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164039: all pass - PUSHED
X-Osstest-Versions-This:
    ovmf=514b3aa08ece52140b769a8676595655691c7cb3
X-Osstest-Versions-That:
    ovmf=dc485c556d5f5db21debe8de3a45a7564aacbe24
From: osstest service owner <osstest-admin@xenproject.org>
Date: Thu, 29 Jul 2021 23:01:48 +0000

flight 164039 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164039/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf                 514b3aa08ece52140b769a8676595655691c7cb3
baseline version:
 ovmf                 dc485c556d5f5db21debe8de3a45a7564aacbe24

Last test of basis   164028  2021-07-29 01:40:11 Z    0 days
Testing same since   164039  2021-07-29 10:10:10 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Dov Murik <dovmurik@linux.ibm.com>
  James Bottomley <jejb@linux.ibm.com>
  Jiewen Yao <jiewen.yao@intel.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-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
   dc485c556d..514b3aa08e  514b3aa08ece52140b769a8676595655691c7cb3 -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 00:03:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 00:03:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162247.297610 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9FzX-0007u7-Sz; Fri, 30 Jul 2021 00:03:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162247.297610; Fri, 30 Jul 2021 00:03:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9FzX-0007u0-PA; Fri, 30 Jul 2021 00:03:07 +0000
Received: by outflank-mailman (input) for mailman id 162247;
 Fri, 30 Jul 2021 00:03:05 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9FzV-0007tq-Jo; Fri, 30 Jul 2021 00:03:05 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9FzV-0000ZT-Bl; Fri, 30 Jul 2021 00:03:05 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9FzV-0001EF-0d; Fri, 30 Jul 2021 00:03:05 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9FzV-0000gI-0A; Fri, 30 Jul 2021 00:03:05 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=PwX1EZ0/lHw6F8pZfRwdH8MS3xqnWMJgK4XvN6eT54o=; b=vfE9OJQMrkqbQKa+QKChKiBr1E
	ScpSBNT/lmUeJ+VdryzGCN0a5xniiv5Ro4OtvsM89PcbrxlSwWmbodBGmlURMlunRGbXOW+M4XIG6
	K1+TSmGsXeMK8l6cUtb4yW/KcUwxSq2i02THJ4oAHZzGTdF+jAQom8czhyfIcFHeLllY=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164037-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164037: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-armhf-armhf-libvirt-raw:xen-boot:fail:heisenbug
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:guest-start/debian.repeat:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=4010a528219e01dd02e768b22168f7f0e78365ce
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 00:03:05 +0000

flight 164037 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164037/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-libvirt-raw  8 xen-boot                   fail pass in 164026

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check fail in 164026 like 152332
 test-armhf-armhf-xl-rtds 18 guest-start/debian.repeat fail in 164026 like 152332
 test-armhf-armhf-libvirt-raw 14 migrate-support-check fail in 164026 never pass
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stop            fail like 152332
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 152332
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 152332
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 152332
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass

version targeted for testing:
 linux                4010a528219e01dd02e768b22168f7f0e78365ce
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  363 days
Failing since        152366  2020-08-01 20:49:34 Z  362 days  624 attempts
Testing same since   164026  2021-07-28 19:12:12 Z    1 days    2 attempts

------------------------------------------------------------
6733 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 fail    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1988201 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 02:39:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 02:39:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162257.297625 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9IQL-0002fB-NM; Fri, 30 Jul 2021 02:38:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162257.297625; Fri, 30 Jul 2021 02:38:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9IQL-0002f3-HE; Fri, 30 Jul 2021 02:38:57 +0000
Received: by outflank-mailman (input) for mailman id 162257;
 Fri, 30 Jul 2021 02:38:55 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9IQJ-0002et-Nl; Fri, 30 Jul 2021 02:38:55 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9IQJ-000121-JT; Fri, 30 Jul 2021 02:38:55 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9IQJ-0000Lk-A6; Fri, 30 Jul 2021 02:38:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9IQJ-0002vO-9X; Fri, 30 Jul 2021 02:38:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=9h4RvQztMvxUW9xl79NkIoLUCNMJLW4eNY9fWVqMrwc=; b=k39SXccpGb7hvyUPqV1ZbUR7/7
	STheNjs9VP2Y58VOPu1H2FMWsoUfb1KMnGZTGWl2wjmGbv1w0QT5gRfvHgidcipHj4EUXK2bPN2Tz
	LfocEAeoNSTjR9p5cPPE+stdJy+xB/UVZf24sRpl2QdBGjjnZKtJ1cgQ4pGMXcrk2PV4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164047-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [ovmf test] 164047: all pass - PUSHED
X-Osstest-Versions-This:
    ovmf=610bcc69ed3d1e8c016332a1862465d41d95dd6c
X-Osstest-Versions-That:
    ovmf=514b3aa08ece52140b769a8676595655691c7cb3
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 02:38:55 +0000

flight 164047 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164047/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf                 610bcc69ed3d1e8c016332a1862465d41d95dd6c
baseline version:
 ovmf                 514b3aa08ece52140b769a8676595655691c7cb3

Last test of basis   164039  2021-07-29 10:10:10 Z    0 days
Testing same since   164047  2021-07-29 23:10:04 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Pete Batard <pete@akeo.ie>
  Philippe Mathieu-Daude <philmd@redhat.com>
  Sunny Wang <sunny.wang@arm.com>

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-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-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
   514b3aa08e..610bcc69ed  610bcc69ed3d1e8c016332a1862465d41d95dd6c -> xen-tested-master


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 02:53:07 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 02:53:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162266.297640 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Idy-0004pB-Sp; Fri, 30 Jul 2021 02:53:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162266.297640; Fri, 30 Jul 2021 02:53:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Idy-0004p4-PG; Fri, 30 Jul 2021 02:53:02 +0000
Received: by outflank-mailman (input) for mailman id 162266;
 Fri, 30 Jul 2021 02:53:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=cAuf=MW=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m9Idw-0004oy-L3
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 02:53:00 +0000
Received: from mail-pl1-x634.google.com (unknown [2607:f8b0:4864:20::634])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id af19f24a-2eb2-4b3d-9a5b-d144e54e92bd;
 Fri, 30 Jul 2021 02:52:59 +0000 (UTC)
Received: by mail-pl1-x634.google.com with SMTP id e21so9329176pla.5
 for <xen-devel@lists.xenproject.org>; Thu, 29 Jul 2021 19:52:59 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:18:efec::4b1])
 by smtp.gmail.com with ESMTPSA id
 l10sm154977pjg.11.2021.07.29.19.52.45
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 Jul 2021 19:52:58 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: af19f24a-2eb2-4b3d-9a5b-d144e54e92bd
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=bmL4SQ8GAZJWK3xApvq+PZaab/7COKw/aR8FnJTkZ8A=;
        b=NAhocIP4f3vAt+HHEuF7oFkro+lh/6vEAuGcefhg6XueHZFW/VgAw1rUNxuPFA9NmR
         cmXx+ceLZex9nGJ0OyzZaxsYsT8tiRb1jRyPL71vgLtSWLPo0cCqvQ2qriDvy8CpQssj
         viNqrboexe+B/LVVnnduOrHj946GTrR2N6htuF3Da/GGsbOKkj/XSoD3hUHgJvjwaB5p
         T3Mh0d9xRtStBYG2xEqHf2hhw7W3QR/YGkGCbpjg9hYVaJSISM4slgqWraPF6pZEHZNm
         jukHYbtabQpZEinKjbGFHZgXMHh/LOo9XYtuFBdeFaYM0POV1AQF6Po3lzHo4DXqdZqC
         RNSA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=bmL4SQ8GAZJWK3xApvq+PZaab/7COKw/aR8FnJTkZ8A=;
        b=qYUZfxKsSWrattOtzwuYmqjMnOaSTeKQg32AnWzxt9dfapvLQz7y4/ObXl4PqJRKHW
         bruf0zCey//od8MtihFenNav5pfWTT0bOqxvYVYkG2MbmwroEKE79bir2eWNvKuiVq/0
         9H0ZCYh78vMJmbL2lbU+MK+EBC3FDW7puOjONVlnKa/dc72DN/O9f7YWa5dxuua3a0lV
         E9Z3AVTIRnvPmr46EoqDHpvMLqt3wkuhq8n7/KK9D5LVGuRCxrY5bx2lNAPlTPfhmp2I
         /kXfILqRoPXi3ag8ODRL/CMzmYioBtBik6sRdYxNM3bN6zZr2HbM2hjNRWjuupLidKaY
         9CPQ==
X-Gm-Message-State: AOAM531ttBt05m2ox4nyjJ1dQKBc6KlLENRynaCW+OuBvciAVFU8RP6F
	izDh73iDAIOlzGC3jr9ceGs=
X-Google-Smtp-Source: ABdhPJyyZoBDWV7ZCj8Ji9VpActKffc9EXcufc2IzXROiuNMi/ja4nm1BshkPIm0WrFthtY+V0e3wQ==
X-Received: by 2002:a17:90a:1109:: with SMTP id d9mr575516pja.183.1627613579170;
        Thu, 29 Jul 2021 19:52:59 -0700 (PDT)
Subject: Re: [PATCH 03/13] x86/HV: Add new hvcall guest address host
 visibility support
To: Dave Hansen <dave.hansen@intel.com>, kys@microsoft.com,
 haiyangz@microsoft.com, sthemmin@microsoft.com, wei.liu@kernel.org,
 decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
 x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com, luto@kernel.org,
 peterz@infradead.org, konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
 jgross@suse.com, sstabellini@kernel.org, joro@8bytes.org, will@kernel.org,
 davem@davemloft.net, kuba@kernel.org, jejb@linux.ibm.com,
 martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com
Cc: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
 linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
 linux-scsi@vger.kernel.org, netdev@vger.kernel.org, vkuznets@redhat.com,
 anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-4-ltykernel@gmail.com>
 <a2444c36-0103-8e1c-7005-d97f77f90e85@intel.com>
 <0d956a05-7d24-57a0-f4a9-dccc849b52fc@gmail.com>
 <ec1d4cfd-bbbc-e27a-7589-e85d9f0438f4@intel.com>
 <8df2845d-ee90-56d0-1228-adebb103ec37@gmail.com>
 <7a2ddcca-e249-ba63-8709-e355fcef2d41@intel.com>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <fa6cf8b6-7da0-dadf-b137-d90ce3513d5e@gmail.com>
Date: Fri, 30 Jul 2021 10:52:43 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <7a2ddcca-e249-ba63-8709-e355fcef2d41@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit

On 7/30/2021 12:05 AM, Dave Hansen wrote:
> On 7/29/21 8:02 AM, Tianyu Lan wrote:
>>>
>>
>> There is x86_hyper_type to identify hypervisor type and we may check
>> this variable after checking X86_FEATURE_HYPERVISOR.
>>
>> static inline bool hv_is_isolation_supported(void)
>> {
>>      if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
>>          return 0;
>>
>>          if (x86_hyper_type != X86_HYPER_MS_HYPERV)
>>                  return 0;
>>
>>      // out of line function call:
>>      return __hv_is_isolation_supported();
>> }
> 
> Looks fine.  You just might want to use this existing helper:
> 
> static inline bool hypervisor_is_type(enum x86_hypervisor_type type)
> {
>          return x86_hyper_type == type;
> }
> 

Yes,thanks for suggestion and will update in the next version.


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 04:11:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 04:11:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162274.297652 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Jrd-0003dy-Cr; Fri, 30 Jul 2021 04:11:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162274.297652; Fri, 30 Jul 2021 04:11:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Jrd-0003dr-9m; Fri, 30 Jul 2021 04:11:13 +0000
Received: by outflank-mailman (input) for mailman id 162274;
 Fri, 30 Jul 2021 04:11:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=cAuf=MW=gmail.com=ltykernel@srs-us1.protection.inumbo.net>)
 id 1m9Jrc-0003dl-EL
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 04:11:12 +0000
Received: from mail-pl1-x634.google.com (unknown [2607:f8b0:4864:20::634])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 14905161-5a1c-4c93-bb7f-1d79a741d9fc;
 Fri, 30 Jul 2021 04:11:11 +0000 (UTC)
Received: by mail-pl1-x634.google.com with SMTP id e21so9528002pla.5
 for <xen-devel@lists.xenproject.org>; Thu, 29 Jul 2021 21:11:11 -0700 (PDT)
Received: from ?IPv6:2404:f801:0:5:8000::4b1? ([2404:f801:9000:18:efec::4b1])
 by smtp.gmail.com with ESMTPSA id
 s7sm418969pfk.12.2021.07.29.21.10.56
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 Jul 2021 21:11:10 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 14905161-5a1c-4c93-bb7f-1d79a741d9fc
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-language:content-transfer-encoding;
        bh=qJu6CB2LN4QTrxCEOBdOuFEubSp0osjxUw486lmLCCE=;
        b=ZDBlqPk7rrZwfBnBjR5AX1bDAs/03F78a8y9TTalCyS6aeo4BVkIxfh1ObzxANaAgE
         HW8wbFpOlmHwbaCPm5cRL/enrnPzB27Dnubwd4H3F+8zFrVlyM1Smb2LawbtRzGY3LRC
         Gb93dNjedTrLXFAZ6ab+LBvUZZSxiYikb+dLVy6ty9M5d/daHgOsw8Q+y0rAzywv5rJ1
         9vUlTT3Rv5WnELmp/i+W4sb7zRlI3Awvh+AERZBSYUZe0JKeGzcixyqH3H8gStqkO4Ji
         /TjYveizM/zetfPUG8Kk34aKNf2XAzZdOlHSD7bm+KS1YwZA/iLQszfwSj+JpCnElXrL
         5VoQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-language
         :content-transfer-encoding;
        bh=qJu6CB2LN4QTrxCEOBdOuFEubSp0osjxUw486lmLCCE=;
        b=dwbLIPFjjtwZxNBpFkr6OFAMEjr+MCj8InYrnSUSR1gLnTzGlNY6MDHzelhUrJkQ34
         qFzjpa7mnwV0UOZj6FsmqZzy3XWFmaJpTH/wXquGR3mNCSm9upoP+XRqJy8o+DpzT421
         yVvg4Gh6mJD6iOVnJVIWcCCUnPV8sOsra6wfP8tRaiM6azJPo2qsnA1715DvldH6jiGN
         qeciBH7LSwzmPokmmDGZmHcDFqurkNTkgxuqCqlyyB+W5ZNeMzam2cbY+Ne4tNC+HfiS
         ILA2eOdVxsxkddNRd8R9rtRl2oe2aEgn4Et6Zxx8/LgPprq7UDs8H8nUQTHeNNwR1gn0
         i4Fw==
X-Gm-Message-State: AOAM530jKr3N1hsG0gn/ZIrYlMnZXLue02vRcPDTU+PRiaYB3jvNt467
	e0IofyKFUv9BO3ocyARIu38=
X-Google-Smtp-Source: ABdhPJz3KIEE78AyymdsWAIZFHiwRfrHYC57wifeuRqjNg3M8sSkO4co7S92ZJfiJ7qm9o4/XVu3Vw==
X-Received: by 2002:a17:90a:b795:: with SMTP id m21mr872416pjr.143.1627618270672;
        Thu, 29 Jul 2021 21:11:10 -0700 (PDT)
Subject: Re: [PATCH 10/13] x86/Swiotlb: Add Swiotlb bounce buffer remap
 function for HV IVM
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com,
 wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
 mingo@redhat.com, bp@alien8.de, x86@kernel.org, hpa@zytor.com,
 dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org,
 boris.ostrovsky@oracle.com, jgross@suse.com, sstabellini@kernel.org,
 joro@8bytes.org, will@kernel.org, davem@davemloft.net, kuba@kernel.org,
 jejb@linux.ibm.com, martin.petersen@oracle.com, arnd@arndb.de, hch@lst.de,
 m.szyprowski@samsung.com, robin.murphy@arm.com, thomas.lendacky@amd.com,
 brijesh.singh@amd.com, ardb@kernel.org, Tianyu.Lan@microsoft.com,
 rientjes@google.com, martin.b.radev@gmail.com, akpm@linux-foundation.org,
 rppt@kernel.org, kirill.shutemov@linux.intel.com,
 aneesh.kumar@linux.ibm.com, krish.sadhukhan@oracle.com, saravanand@fb.com,
 xen-devel@lists.xenproject.org, pgonda@google.com, david@redhat.com,
 keescook@chromium.org, hannes@cmpxchg.org, sfr@canb.auug.org.au,
 michael.h.kelley@microsoft.com, iommu@lists.linux-foundation.org,
 linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
 linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
 netdev@vger.kernel.org, vkuznets@redhat.com, anparri@microsoft.com
References: <20210728145232.285861-1-ltykernel@gmail.com>
 <20210728145232.285861-11-ltykernel@gmail.com> <YQLXYVaWWdBfF7Sm@fedora>
From: Tianyu Lan <ltykernel@gmail.com>
Message-ID: <7afbbc7f-8f02-ca6c-0c8c-bbf01fae70ea@gmail.com>
Date: Fri, 30 Jul 2021 12:10:54 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <YQLXYVaWWdBfF7Sm@fedora>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit

Hi Konrad:
      Thanks for your review.

On 7/30/2021 12:29 AM, Konrad Rzeszutek Wilk wrote:
>> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
>> index 1fa81c096c1d..6866e5784b53 100644
>> --- a/kernel/dma/swiotlb.c
>> +++ b/kernel/dma/swiotlb.c
>> @@ -194,8 +194,13 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,
>>   		mem->slots[i].alloc_size = 0;
>>   	}
>>   
>> -	set_memory_decrypted((unsigned long)vaddr, bytes >> PAGE_SHIFT);
>> -	memset(vaddr, 0, bytes);
>> +	mem->vaddr = dma_map_decrypted(vaddr, bytes);
>> +	if (!mem->vaddr) {
>> +		pr_err("Failed to decrypt memory.\n");
> I am wondering if it would be worth returning an error code in this
> function instead of just printing an error?

Yes, this is good idea and will update in the next version.

> 
> For this patch I think it is Ok, but perhaps going forward this would be
> better done as I am thinking - is there some global guest->hyperv
> reporting mechanism so that if this fails - it ends up being bubbled up
> to the HyperV console-ish?

Hyper-V has such panic page report mechanism. Guest can pass one page 
log to host during crash.



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 05:15:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 05:15:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162282.297663 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9KrO-0001Zy-6u; Fri, 30 Jul 2021 05:15:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162282.297663; Fri, 30 Jul 2021 05:15:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9KrO-0001Zr-44; Fri, 30 Jul 2021 05:15:02 +0000
Received: by outflank-mailman (input) for mailman id 162282;
 Fri, 30 Jul 2021 05:15:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=UcsG=MW=linuxfoundation.org=gregkh@srs-us1.protection.inumbo.net>)
 id 1m9KrM-0001Zl-KW
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 05:15:00 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1528baf3-f0f5-11eb-9881-12813bfff9fa;
 Fri, 30 Jul 2021 05:14:59 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id 6AAA660F9B;
 Fri, 30 Jul 2021 05:14:57 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1528baf3-f0f5-11eb-9881-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org;
	s=korg; t=1627622098;
	bh=Rd0qV6oPrMRK9x5RQHEA0i4kdEU0U+RcVzNm4XOeux8=;
	h=Date:From:To:Cc:Subject:References:In-Reply-To:From;
	b=T6hObKQmOk4AFgIpQT4y2Zsi4Q75SgNjFNnS8pRLR4KFvnEyagvEfbTCdxstRLsYG
	 rjTcpLBlDG/oVJ8lnaqbcwXAZTVT9l8C6Cy6bhh3Fo+ilPrCNthbqlfZm24+7rNODV
	 PAMI7xMjSKfCoNPXlo3uccVRt1pE46rn5PvW/dE4=
Date: Fri, 30 Jul 2021 07:14:55 +0200
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>, kernel@pengutronix.de,
	linux-pci@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Russell Currey <ruscur@russell.cc>,
	Oliver O'Halloran <oohall@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>, x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Zhou Wang <wangzhou1@hisilicon.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
	Sathya Prakash <sathya.prakash@broadcom.com>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
	Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
	Frederic Barrat <fbarrat@linux.ibm.com>,
	Andrew Donnellan <ajd@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
	Yisen Zhuang <yisen.zhuang@huawei.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Vadym Kochan <vkochan@marvell.com>,
	Taras Chornyi <tchornyi@marvell.com>, Jiri Pirko <jiri@nvidia.com>,
	Ido Schimmel <idosch@nvidia.com>,
	Simon Horman <simon.horman@corigine.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Michael Buesch <m@bues.ch>, Mathias Nyman <mathias.nyman@intel.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Andy Shevchenko <andriy.shevchenko@intel.com>,
	Wojciech Ziemba <wojciech.ziemba@intel.com>,
	Alexander Duyck <alexanderduyck@fb.com>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-crypto@vger.kernel.org, qat-linux@intel.com,
	MPT-FusionLinux.pdl@broadcom.com, linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org, oss-drivers@corigine.com,
	xen-devel@lists.xenproject.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH v1 0/5] PCI: Drop duplicated tracking of a pci_dev's
 bound driver
Message-ID: <YQOKz0l6aaU8PGLV@kroah.com>
References: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>

On Thu, Jul 29, 2021 at 10:37:35PM +0200, Uwe Kleine-Knig wrote:
> Hello,
> 
> struct pci_dev tracks the bound pci driver twice. This series is about
> removing this duplication.
> 
> The first two patches are just cleanups. The third patch introduces a
> wrapper that abstracts access to struct pci_dev->driver. In the next
> patch (hopefully) all users are converted to use the new wrapper and
> finally the fifth patch removes the duplication.
> 
> Note this series is only build tested (allmodconfig on several
> architectures).
> 
> I'm open to restructure this series if this simplifies things. E.g. the
> use of the new wrapper in drivers/pci could be squashed into the patch
> introducing the wrapper. Patch 4 could be split by maintainer tree or
> squashed into patch 3 completely.
> 
> Best regards
> Uwe
> 
> Uwe Kleine-Knig (5):
>   PCI: Simplify pci_device_remove()
>   PCI: Drop useless check from pci_device_probe()
>   PCI: Provide wrapper to access a pci_dev's bound driver
>   PCI: Adapt all code locations to not use struct pci_dev::driver
>     directly
>   PCI: Drop duplicated tracking of a pci_dev's bound driver

Other than my objection to patch 5/5 lack of changelog, looks sane to
me:

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 06:39:41 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 06:39:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162290.297675 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MB5-0000Ni-1P; Fri, 30 Jul 2021 06:39:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162290.297675; Fri, 30 Jul 2021 06:39:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MB4-0000Nb-Uj; Fri, 30 Jul 2021 06:39:26 +0000
Received: by outflank-mailman (input) for mailman id 162290;
 Fri, 30 Jul 2021 06:39:25 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9MB2-0000NR-WD; Fri, 30 Jul 2021 06:39:25 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9MB2-0005VL-Oc; Fri, 30 Jul 2021 06:39:24 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9MB2-0002UE-Ck; Fri, 30 Jul 2021 06:39:24 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9MB2-0008ST-CD; Fri, 30 Jul 2021 06:39:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Dic93XGEMSunnxAIW7CNCa5QhfI730x1HFaN9LEK0DQ=; b=V8jEq5BiCLX+uC2MuYBrMQiEPC
	SFn3DsMxJ5Ht/s78dbQzp2uEOClaRFStvMUBfGohJSdAh065GnGgaphOxyOACKd9Rv9Jg2dJdP1JJ
	EsxHruzH0HI6EMQCUT0CEqtJtS0HwymTq562L0eRx6Pf/mXZXC2LpM7mVetGzOFi4/lU=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164046-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164046: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=768832575d2e37042d00eb693cda809cb30981d4
X-Osstest-Versions-That:
    qemuu=69ea12b19a15ae006521cd5cc0f627f27f738746
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 06:39:24 +0000

flight 164046 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164046/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164034
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164034
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164034
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164034
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164034
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164034
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164034
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                768832575d2e37042d00eb693cda809cb30981d4
baseline version:
 qemuu                69ea12b19a15ae006521cd5cc0f627f27f738746

Last test of basis   164034  2021-07-29 05:39:12 Z    1 days
Testing same since   164046  2021-07-29 22:09:08 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alexey Kardashevskiy <aik@ozlabs.ru>
  Alexey Neyman <stilor@att.net>
  BALATON Zoltan <balaton@eik.bme.hu>
  Corey Minyard <cminyard@mvista.com>
  David Gibson <david@gibson.dropbear.id.au>
  Fabiano Rosas <farosas@linux.ibm.com>
  Lara Lazier <laramglazier@gmail.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Matheus Ferst <matheus.ferst@eldorado.org.br>
  Paolo Bonzini <pbonzini@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>
  Peter Xu <peterx@redhat.com>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Richard Henderson <richard.henderson@linaro.org>
  Richard Zak <richard.j.zak@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Vitaly Kuznetsov <vkuznets@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   69ea12b19a..768832575d  768832575d2e37042d00eb693cda809cb30981d4 -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 06:53:06 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 06:53:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162300.297691 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MOE-0002bW-F3; Fri, 30 Jul 2021 06:53:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162300.297691; Fri, 30 Jul 2021 06:53:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MOE-0002bP-Ai; Fri, 30 Jul 2021 06:53:02 +0000
Received: by outflank-mailman (input) for mailman id 162300;
 Fri, 30 Jul 2021 06:53:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/3Ge=MW=citrix.com=Jane.Malalane@srs-us1.protection.inumbo.net>)
 id 1m9MOD-0002bJ-3x
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 06:53:01 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c6a5a8d2-f102-11eb-9887-12813bfff9fa;
 Fri, 30 Jul 2021 06:52:59 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c6a5a8d2-f102-11eb-9887-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627627979;
  h=subject:to:cc:references:from:message-id:date:
   in-reply-to:mime-version;
  bh=q1S4Ex04kDgSivTgMyy6bf9oT/DJbl+g4xstMvs8BVs=;
  b=e/vHV+biFhLBMM+srYqM1+IZ9BAobLyJqtGARisrNi5M4vSS4RmODzQM
   INJ5wSJDrn8ngoQd4kX8j31ofUWbqPBWiRUs5x7bsGcoP2lL0gbnw80mh
   KlM5wzCYZs5mNpQTBdiewI3F/vFlGJrI0I88xeifxp4pC71dK6ao/Tq+W
   k=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: /TqDw8dMkyNiJuPVFiQKcbdtDzPIoxFAYI3D8fXeW6pj+WK8xxRk5a3iLmxdYMyqfhCnyLZhA3
 ISb+1MP4CMfdm68D4yIxJ82d6b04jQHSjeuSydNXZttgIT2t/PHkWhX9BdtYEooebNckZj77vC
 uGM9s7VxYeNTs2u/heZ06e89ftEcp6pdyp5K+OoI7RiqjOdSPuOqjPHX3ENTR8Oih5rd3wxNJd
 GKp3GbGfhVbRuio6CmanZ8Y0z0RScPWc3IUaXvdefA27sQycveZheMwHVadGRvZfOMDuQ92ohw
 qIZWFJPFxr6zAt2qKLIUDpzT
X-SBRS: 5.1
X-MesageID: 49444585
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:Dzny8aiy/Q09xF+I6KGONqggZ3BQX1B13DAbv31ZSRFFG/FwyP
 rBoB1L73DJYWgqNE3I+erhBEGBKUmskqKdkrNhQotKPTOWxFdASbsC0WKM+UyaJ8STzJ8l6U
 4kSdkCNDSSNykLsS+Z2njBLz9I+rDum8rE9ISurQYecegpUdAH0+4QMHfrLqQcfngiOXNWLu
 v52iMKnUvbRZxBBf7LeEXtEtKz6OHjpdbDW1orFhQn4A6BgXeB76P7KQGR2lM7XylUybkv3G
 DZm0ihj5/T8s2T+1v57Sv+/p5WkNzuxp9qA9GNsNEcLnHJhhyzbIpsdrWetHQeof2p6nwtjN
 7Qyi1Qcfhb2jf0RCWYsBHt0w7v3HIH7GLj80aRhT/ZrcnwVFsBeoB8rLMcViGcx1srvdl63q
 4O9XmerYBrARTJmzm4z8TUVjlx/3DE40YKoKo2tThyQIEeYLheocg050VOCqoNGyr89cQODP
 RuNsfB//xbGGnqLEwxhlMfhOBEY05DWStvGiM5y4qoOnlt7TBEJnIjtYkidixqzuNld3EsjN
 60QZiBl9l1P4QrhOxGdb88qWbeMB26ffv2ChPnHb3QLtBOB5v8ke+D3FwL3pDcRHUp9up+pH
 2TaiIViYYNE3ieQPFmmqc7qSzwfA==
X-IronPort-AV: E=Sophos;i="5.84,281,1620705600"; 
   d="scan'208,217";a="49444585"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=m+cK7JaT2yb5ILJi2M8SsNNTmGQcRKQaCPk1/oYftUP7WSOPDJQdT5OJEOc+x2j2dnDBU6PHkzu3gc18EVsKdL4zOWJ07vvVOrbHWwlXQ72amO6YgMlwbbWM8mJmpvaHJo9LzL+zrfbhXVRPUeHmmFx5Ayrbcx6pShA3GAktdyeFurTr2Sxpd4gjMaKOnWWMYIKpERt0ZHXGtyWJrHU5mqnDKjF0KIMTT/US4Mi2UCHlDCwQixQrKgvAWBKgiQEbR9fSAg/P8W8lYzx9MVw09vF5v8HDylYY3nZIkGAvvQlY8sll5plv9Voelzcmiu+bqA7UbGRs+AuPVJ6NU0MOow==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8QjFPSY0B5275zDvKPyFT9zPWs3HZY/3+OhLTyWuCWo=;
 b=DqR9yHZTdBTgZEVrWJRkmny5mV4MuDv+8Y6G4P1N7bJNJQPoIcB0zrX3P92MAdCokQME634NGH/aJYnMJzXkfXU25F8SJ8Jo/PKe7ZL3cMctyPGuErFI8pS8XxMRvyfTVxp3KWwr2qBAMyH8ZptB/h0m4iyCYfPIkWTtDJgCKn5aXEDRRCGCMP8wZtLajy9JKllDmAylAcvnyibDwVgTM1glT40B+qBCMbcHu2N9vik1zkVOgyZfn99ZL7KcupUN4hrnrH6hezSZ1ejr/UFVMh2vMiT2ZRAoX5gKj1Zl7RlGdCmxgHtIAfIHB79X8uFbb0FLimPVmTIwX/TcCAysIA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8QjFPSY0B5275zDvKPyFT9zPWs3HZY/3+OhLTyWuCWo=;
 b=uS/iOynD8FA7bKffnAnYdWTZ129WdtSNB+mzSFY9+cfnsQ259+TJ9hIVZuhyLLV39sgyKjSdzIa4GqKhx6UxW03WgRF/ZpS+f/cZzg0EeJmabX8MCjWgUQ8Ee84yeadGdXHhqyBhJU0no9XjGx671JTvbTTVxK5ay5Q1i62uR4M=
Subject: Re: [PATCH] xen/lib: Fix strcmp() and strncmp()
To: Ian Jackson <iwj@xenproject.org>
CC: Xen-devel <xen-devel@lists.xenproject.org>, Andrew Cooper
	<Andrew.Cooper3@citrix.com>, George Dunlap <George.Dunlap@citrix.com>, "Jan
 Beulich" <jbeulich@suse.com>, Julien Grall <julien@xen.org>, "Stefano
 Stabellini" <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
References: <20210727184715.17699-1-jane.malalane@citrix.com>
 <24833.13489.362056.292831@mariner.uk.xensource.com>
From: Jane Malalane <jane.malalane@citrix.com>
Message-ID: <70190796-7fe2-91c3-655b-aec9914b1e5b@citrix.com>
Date: Fri, 30 Jul 2021 07:52:38 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <24833.13489.362056.292831@mariner.uk.xensource.com>
Content-Type: multipart/alternative;
 boundary="------------2791BCAE6CB243930B90B0EF"
Content-Language: en-GB
X-ClientProxiedBy: PR0P264CA0227.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::23) To MW4PR03MB6330.namprd03.prod.outlook.com
 (2603:10b6:303:11d::11)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 908d6789-55ce-4d8e-9e10-08d95326a5fa
X-MS-TrafficTypeDiagnostic: MW4PR03MB6347:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <MW4PR03MB6347D427948E9D57D38DD8D581EC9@MW4PR03MB6347.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:9508;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: nJBIe2asda/qVBaILCgPbXYpl6TJbc6PHl845mRP33cgSfZq7sWc5IkopA8bZd/yiKCpoMUiBKQj07c6WD9HvZhCd4+6Zs4YQRd4kHzipW+GxYmg2SL8np8q/qZxfv6Gsq+uHef+VfvuU4ejBF4DN6NuzBDlCg4JxFef+y8O5U0yHluSLB5EbMaa4x60OzhaU1pz4eJ5tczuoKfMySQd/Py44bDHNkbBxUnaGLoBuWGrciwR0b1WkDvhUlvJTeQSlFVr0AncbqvdZRlXvmF6G5YdJOaEoo+Stj66OHhTy4o+HdJmNU4zryXtWcDd1fs3mPif+RggihOIs8B9vLeHUJzWe8meVdT692h8LTvXQwmTdqrnyqf5z3EG6UjkvkblUqjWlKmgcO39kmHS+2oShg1dlz0+TueexTDnyECn66hXRCS/WbahUOwe8VuGemY7IsR+wDrJiU5Qqzm/A30QNiwoq5+4aWYRMRnYyk7Ji5fUNSu+77y/G88m4updADeisiQ1QIFcxja79fDF2b64BSPTUQ+UZo9BRJE64UAblruQhJuQrjrbzKnFx3LbrbRT6d75n3JE4a3k9lFn09CqlevSA4lMoT5aIWgccFrRKU/PUih+LdY7E5PnBiK0vaPmwnbwftWiDgdeiEGxjyQ0ip/6cxvzXf5A9LRe85H2ypPqo20vfGkvq4ZsiXJgcflNpk/blGLoo+FdykaXrN9Q2gbDr8zckwgEIGK3yoeFF7KfXJiwsY7kA8XExnriuXEO7ztXB+5os2Ye1pxC6UdchnAHMhEat9BEBmKzUWKHS0E=
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR03MB6330.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(376002)(396003)(346002)(39860400002)(956004)(8676002)(16576012)(53546011)(2906002)(83380400001)(5660300002)(36756003)(6666004)(6486002)(26005)(33964004)(66946007)(2616005)(31686004)(8936002)(52116002)(478600001)(54906003)(66476007)(66556008)(86362001)(6916009)(186003)(4326008)(316002)(44832011)(38100700002)(31696002)(38350700002)(133343001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bHdicEpyaVhxNExsTGRpN1lVUlg5SkZ0TDRhUXhMQ0ZrMkRKa3BhUThTUHJv?=
 =?utf-8?B?YUQzUUp2aWpLM1RKTFJzaml0eDZiMWhxUUgvbTZmSVBuWjdXWUZLWG1SR0cx?=
 =?utf-8?B?djJXWXZnM2k0SzY1clZwZklrN21zSGZSTDQ4WVdMcHhqNCtIajdQWmlWZlJt?=
 =?utf-8?B?THhQM1FnQ3RTdWRCTmZOQzk4NWZHUEFkdWozTW53Vm9za1JSSDB0b0tYci9q?=
 =?utf-8?B?ZVFDZGtsNG15cUlsQi9Ja2oyWmpXRDFCZWxEeFN5ODNQakhFeGp1Y1crSkxo?=
 =?utf-8?B?UTRvMHNIWll1WjE3bGhCc2Z1OFlmc1dheG0xRFB5engwSGhaTWo4MktMVVpV?=
 =?utf-8?B?UkNENVFiSE1NblpzZUpnZ01SQkIybGxyR3JGbTNwa1J5cHN1d3hZc0lkTTdy?=
 =?utf-8?B?TTlpQXZxdGZMU2lmTHBBc09RNHJoODcwNER5SW1CZVozM3hwckpYTzhnK3pO?=
 =?utf-8?B?b29kMUFzRjN1a3QxV1RVcG9FK092R1ZSMUxVV0lEdk5ZQ1A0RFdQL0IvVmtm?=
 =?utf-8?B?RXE2WXphUjdFR3gwT1pNWnhtNWF1WTUySkkwOUQzNVlWeUlRTHV0d1FYV21h?=
 =?utf-8?B?R2VzSk5pM0NwclM4MkNONmlHK1FoL1NVMnVURTF4NDk4RmpQTUVKZk9JVTNV?=
 =?utf-8?B?KzVuWHVzSCt5eTd0UER0N09lVGF6MUVtajFJbGZhU0wxQ0xGSGFvZ3Ivd0Vs?=
 =?utf-8?B?QmdZVE9YRVErWWY3NFBUMVJPKzhrbyt0WmxwVWtKNlkwRDZJaUd1d3FlcGhZ?=
 =?utf-8?B?S1Nad1hTL0VTM0tEWGg1c0pFTGQ4TTNUek83ZzNYMC9yMDJFMWYwVUFMQmVY?=
 =?utf-8?B?MkdIeUd3VUVLbjhVdmduS05sZ2VXMXpwYWJyYm9HTGxpSm5CL1orZW9Ed2p3?=
 =?utf-8?B?U2FYaWt0SkJmNkZ4RStPUTVWcnZWM21YWHpGY0xMa1hjTHFYMFVEbUtRbEN4?=
 =?utf-8?B?TXVlbHRwdUZUQVRIUFdKWER5ZXFBcGZORzhQOTBrMWNXRjBvRWdSbXVHT2NY?=
 =?utf-8?B?TEc5VHk1cjBvWWI5WXVYTWkycjV1dXFwK3J3cjFNQUpYM2hpMXFsQkdxK1kr?=
 =?utf-8?B?ai9JVG81RmNBVXZEeFdyWDcxc2tHS2xLeU5XamYyWmpiZUV5WjE0Z2VBVSti?=
 =?utf-8?B?NmduQUZUSnBHWEFjTTY2MkhYQTNrRFBmT3loZTlaZ09RYmJLT2hkd3k1bTEw?=
 =?utf-8?B?Z0pzU0pHdVN2bHpYYkFIZ0FjcXRDTjV2NWVUaGdMWHBRUmxXZkdBRDFPQ1dv?=
 =?utf-8?B?OUQ2L3pzbDgrdXhCMWV2NEozRm12ZVF5RldieG5VRVE3cWZuempseTc2a1p6?=
 =?utf-8?B?dkZoa05USkJMTk9pajd3OUdNaElZWXR5UjJoSmM0REljdDRvYm9nUzRzRk93?=
 =?utf-8?B?OUhwcktQZU5xZlE2ZHV6ZGgxQkVkcjBnQlBSZi9hVmdWMzg0ZW9ITEt3ZXlt?=
 =?utf-8?B?YVJrNjAyeGpSYVI4SkNycWR6eTJPNFM4S2dYNjlldjZPWkZ2YXNmVnlNTHdp?=
 =?utf-8?B?VjVqZ0F2QzdTdDYvRHFjZkQwS2lwMjF2MEZ0RmJDR3pySTBicXJQUWZkUXZt?=
 =?utf-8?B?RnRGcU1rRlkrNTdtYjBpbHRwUXhNc3B0SHc5djlVUFVNQjVCKzNxSWFrRVNm?=
 =?utf-8?B?aWNEUGx0TEsyZ1Y5Qzh6T08rK1Byc3FtQ0tJVE04UGF2VlBzUERNd1lyVFNr?=
 =?utf-8?B?Yk0valdoeVhVVEV0dmI1NWpwT0tmdGk5TTBlYlo4Z3VpcUhhZEVNR051M1hm?=
 =?utf-8?Q?3/xh014OkynGB4ZcSxmI3uTEh4zGjH0pGjjtH4n?=
X-MS-Exchange-CrossTenant-Network-Message-Id: 908d6789-55ce-4d8e-9e10-08d95326a5fa
X-MS-Exchange-CrossTenant-AuthSource: MW4PR03MB6330.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jul 2021 06:52:51.0971
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: ReoQKeyQc7GC0CEpLxhiZSAUrVhzQnkisoLgJeQMScGnKxija7MumR+jMCStwK3dOr+EuC9/iqhU6F/MNIkJ5w6JzCSOlEtAjaN6o2UY374=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR03MB6347
X-OriginatorOrg: citrix.com

--------------2791BCAE6CB243930B90B0EF
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit


On 28/07/2021 11:42, Ian Jackson wrote:
> [CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments unless you have verified the sender and know the content is safe.
>
> Jane Malalane writes ("[PATCH] xen/lib: Fix strcmp() and strncmp()"):
>> The C standard requires that each character be compared as unsigned
>> char. Xen's current behaviour compares as signed char, which changes
>> the answer when chars with a value greater than 0x7f are used.
>>
>> Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
>> Signed-off-by: Jane Malalane <jane.malalane@citrix.com>
> Thanks for this.
>
> What are the practical effects of this bug ?  AFAICT in the hypervisor
> code all the call sites simply test for zero/nonzero.
>
> Of course we should fix this because
>
>> -		if ((__res = *cs - *ct++) != 0 || !*cs++)
> this substraction is UB if it overflows.  So in theory the compiler
> could miscompile it - although in practice I can't see how the
> assumption that this doesn't overflow would "help" the compiler.
>
> Ian.
>
>
>
> This fix was just to make the code spec compliant and mainly for 
> practice as I'm currently being introduced to Xen.
>
> Jane
>

--------------2791BCAE6CB243930B90B0EF
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 28/07/2021 11:42, Ian Jackson wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:24833.13489.362056.292831@mariner.uk.xensource.com">
      <pre class="moz-quote-pre" wrap="">[CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments unless you have verified the sender and know the content is safe.

Jane Malalane writes (&quot;[PATCH] xen/lib: Fix strcmp() and strncmp()&quot;):
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">The C standard requires that each character be compared as unsigned
char. Xen's current behaviour compares as signed char, which changes
the answer when chars with a value greater than 0x7f are used.

Suggested-by: Andrew Cooper <a class="moz-txt-link-rfc2396E" href="mailto:andrew.cooper3@citrix.com">&lt;andrew.cooper3@citrix.com&gt;</a>
Signed-off-by: Jane Malalane <a class="moz-txt-link-rfc2396E" href="mailto:jane.malalane@citrix.com">&lt;jane.malalane@citrix.com&gt;</a>
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Thanks for this.

What are the practical effects of this bug ?  AFAICT in the hypervisor
code all the call sites simply test for zero/nonzero.

Of course we should fix this because

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">-		if ((__res = *cs - *ct++) != 0 || !*cs++)
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap=""><pre class="moz-quote-pre" wrap="">
this substraction is UB if it overflows.  So in theory the compiler
could miscompile it - although in practice I can't see how the
assumption that this doesn't overflow would &quot;help&quot; the compiler.

Ian.



<!--[if gte mso 9]><xml>
 <o:OfficeDocumentSettings>
  <o:AllowPNG/>
 </o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:TrackMoves/>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-GB</w:LidThemeOther>
  <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:SplitPgBreakAndParaMark/>
   <w:EnableOpenTypeKerning/>
   <w:DontFlipMirrorIndents/>
   <w:OverrideTableStyleHps/>
  </w:Compatibility>
  <w:DoNotOptimizeForBrowser/>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
  DefSemiHidden="false" DefQFormat="false" DefPriority="99"
  LatentStyleCount="376">
  <w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 6"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 7"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 8"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index 9"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" Name="toc 9"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Normal Indent"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="footnote text"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="annotation text"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="header"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="footer"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="index heading"/>
  <w:LsdException Locked="false" Priority="35" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="table of figures"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="envelope address"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="envelope return"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="footnote reference"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="annotation reference"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="line number"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="page number"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="endnote reference"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="endnote text"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="table of authorities"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="macro"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="toa heading"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Bullet"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Number"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Bullet 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Bullet 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Bullet 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Bullet 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Number 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Number 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Number 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Number 5"/>
  <w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Closing"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Signature"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="true"
   UnhideWhenUsed="true" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text Indent"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Continue"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Continue 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Continue 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Continue 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="List Continue 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Message Header"/>
  <w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Salutation"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Date"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text First Indent"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text First Indent 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Note Heading"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text Indent 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Body Text Indent 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Block Text"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Hyperlink"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="FollowedHyperlink"/>
  <w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Document Map"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Plain Text"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="E-mail Signature"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Top of Form"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Bottom of Form"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Normal (Web)"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Acronym"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Address"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Cite"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Code"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Definition"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Keyboard"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Preformatted"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Sample"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Typewriter"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="HTML Variable"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Normal Table"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="annotation subject"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="No List"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Outline List 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Outline List 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Outline List 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Simple 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Simple 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Simple 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Classic 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Classic 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Classic 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Classic 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Colorful 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Colorful 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Colorful 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Columns 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Columns 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Columns 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Columns 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Columns 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 6"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 7"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Grid 8"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 4"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 5"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 6"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 7"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table List 8"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table 3D effects 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table 3D effects 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table 3D effects 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Contemporary"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Elegant"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Professional"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Subtle 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Subtle 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Web 1"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Web 2"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Web 3"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Balloon Text"/>
  <w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Table Theme"/>
  <w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" QFormat="true"
   Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" QFormat="true"
   Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" QFormat="true"
   Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" QFormat="true"
   Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" QFormat="true"
   Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" QFormat="true"
   Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" SemiHidden="true"
   UnhideWhenUsed="true" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" SemiHidden="true"
   UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
  <w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
  <w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
  <w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
  <w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
  <w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
  <w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
  <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
  <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
  <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
  <w:LsdException Locked="false" Priority="46"
   Name="Grid Table 1 Light Accent 1"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
  <w:LsdException Locked="false" Priority="51"
   Name="Grid Table 6 Colorful Accent 1"/>
  <w:LsdException Locked="false" Priority="52"
   Name="Grid Table 7 Colorful Accent 1"/>
  <w:LsdException Locked="false" Priority="46"
   Name="Grid Table 1 Light Accent 2"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
  <w:LsdException Locked="false" Priority="51"
   Name="Grid Table 6 Colorful Accent 2"/>
  <w:LsdException Locked="false" Priority="52"
   Name="Grid Table 7 Colorful Accent 2"/>
  <w:LsdException Locked="false" Priority="46"
   Name="Grid Table 1 Light Accent 3"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
  <w:LsdException Locked="false" Priority="51"
   Name="Grid Table 6 Colorful Accent 3"/>
  <w:LsdException Locked="false" Priority="52"
   Name="Grid Table 7 Colorful Accent 3"/>
  <w:LsdException Locked="false" Priority="46"
   Name="Grid Table 1 Light Accent 4"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
  <w:LsdException Locked="false" Priority="51"
   Name="Grid Table 6 Colorful Accent 4"/>
  <w:LsdException Locked="false" Priority="52"
   Name="Grid Table 7 Colorful Accent 4"/>
  <w:LsdException Locked="false" Priority="46"
   Name="Grid Table 1 Light Accent 5"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
  <w:LsdException Locked="false" Priority="51"
   Name="Grid Table 6 Colorful Accent 5"/>
  <w:LsdException Locked="false" Priority="52"
   Name="Grid Table 7 Colorful Accent 5"/>
  <w:LsdException Locked="false" Priority="46"
   Name="Grid Table 1 Light Accent 6"/>
  <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
  <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
  <w:LsdException Locked="false" Priority="51"
   Name="Grid Table 6 Colorful Accent 6"/>
  <w:LsdException Locked="false" Priority="52"
   Name="Grid Table 7 Colorful Accent 6"/>
  <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
  <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
  <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
  <w:LsdException Locked="false" Priority="46"
   Name="List Table 1 Light Accent 1"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
  <w:LsdException Locked="false" Priority="51"
   Name="List Table 6 Colorful Accent 1"/>
  <w:LsdException Locked="false" Priority="52"
   Name="List Table 7 Colorful Accent 1"/>
  <w:LsdException Locked="false" Priority="46"
   Name="List Table 1 Light Accent 2"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
  <w:LsdException Locked="false" Priority="51"
   Name="List Table 6 Colorful Accent 2"/>
  <w:LsdException Locked="false" Priority="52"
   Name="List Table 7 Colorful Accent 2"/>
  <w:LsdException Locked="false" Priority="46"
   Name="List Table 1 Light Accent 3"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
  <w:LsdException Locked="false" Priority="51"
   Name="List Table 6 Colorful Accent 3"/>
  <w:LsdException Locked="false" Priority="52"
   Name="List Table 7 Colorful Accent 3"/>
  <w:LsdException Locked="false" Priority="46"
   Name="List Table 1 Light Accent 4"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
  <w:LsdException Locked="false" Priority="51"
   Name="List Table 6 Colorful Accent 4"/>
  <w:LsdException Locked="false" Priority="52"
   Name="List Table 7 Colorful Accent 4"/>
  <w:LsdException Locked="false" Priority="46"
   Name="List Table 1 Light Accent 5"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
  <w:LsdException Locked="false" Priority="51"
   Name="List Table 6 Colorful Accent 5"/>
  <w:LsdException Locked="false" Priority="52"
   Name="List Table 7 Colorful Accent 5"/>
  <w:LsdException Locked="false" Priority="46"
   Name="List Table 1 Light Accent 6"/>
  <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
  <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
  <w:LsdException Locked="false" Priority="51"
   Name="List Table 6 Colorful Accent 6"/>
  <w:LsdException Locked="false" Priority="52"
   Name="List Table 7 Colorful Accent 6"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Mention"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Smart Hyperlink"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Hashtag"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Unresolved Mention"/>
  <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
   Name="Smart Link"/>
 </w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
</style>
<![endif]--></pre><pre><span style="font-size: 11pt;">This fix was just to make the code spec compliant and mainly for practice as I'm currently being introduced to Xen.</span>

Jane

</pre></pre>
    </blockquote>
  </body>
</html>

--------------2791BCAE6CB243930B90B0EF--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 07:02:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 07:02:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162309.297702 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MXO-00048Z-Fb; Fri, 30 Jul 2021 07:02:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162309.297702; Fri, 30 Jul 2021 07:02:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MXO-00048S-CY; Fri, 30 Jul 2021 07:02:30 +0000
Received: by outflank-mailman (input) for mailman id 162309;
 Fri, 30 Jul 2021 07:02:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9MXN-00048M-2Q
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 07:02:29 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 195b4568-f104-11eb-9888-12813bfff9fa;
 Fri, 30 Jul 2021 07:02:27 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id F1E291FDB1;
 Fri, 30 Jul 2021 07:02:26 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id C28E813651;
 Fri, 30 Jul 2021 07:02:26 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id LcAuLgKkA2G7eQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 07:02:26 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 195b4568-f104-11eb-9888-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627628546; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=gtUeKvJJV5wmDNqwaBcRQyu+xob4AswGZdv+uDyEQc8=;
	b=AxhjL0epmqDbWd5hav94uUChulnXKd0+KsrvSgDn6pQU6j5h2oWWfbSUKuk1TjkMuAyZI1
	C1oVqEPr6zKj06hqONwOJhFImIZ32fQTg9kT8icV4Yl5xBs4LAqnDmFe6IhlX1681hecHZ
	I+izIOBYVcXpRRuFn45gPVgVBxKPWkg=
Subject: Re: [PATCH] tools/xenstored: Fix off-by-one in dump_state_nodes()
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
References: <20210729093420.14092-1-julien@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <10373f47-fa1a-59c0-7ec3-a1a86c9754ce@suse.com>
Date: Fri, 30 Jul 2021 09:02:26 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210729093420.14092-1-julien@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="lPgkTsGrfseKseCyqOnA4r3RhEY43on3U"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--lPgkTsGrfseKseCyqOnA4r3RhEY43on3U
Content-Type: multipart/mixed; boundary="gQFGWoqP95joRIVPjQObIVRJUqnZyPuj0";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
Message-ID: <10373f47-fa1a-59c0-7ec3-a1a86c9754ce@suse.com>
Subject: Re: [PATCH] tools/xenstored: Fix off-by-one in dump_state_nodes()
References: <20210729093420.14092-1-julien@xen.org>
In-Reply-To: <20210729093420.14092-1-julien@xen.org>

--gQFGWoqP95joRIVPjQObIVRJUqnZyPuj0
Content-Type: multipart/mixed;
 boundary="------------579E6281980A7F5C3EFBC5D7"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------579E6281980A7F5C3EFBC5D7
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 29.07.21 11:34, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
>=20
> The maximum path length supported by Xenstored protocol is
> XENSTORE_ABS_PATH_MAX (i.e 3072). This doesn't take into account the
> NUL at the end of the path.
>=20
> However, the code to dump the nodes will allocate a buffer
> of XENSTORE_ABS_PATH. As a result it may not be possible to live-update=

> if there is a node name of XENSTORE_ABS_PATH.
>=20
> Fix it by allocating a buffer of XENSTORE_ABS_PATH_MAX + 1 characters.
>=20
> Take the opportunity to pass the max length of the buffer as a
> parameter of dump_state_node_tree(). This will be clearer that the
> check in the function is linked to the allocation in dump_state_nodes()=
=2E
>=20
> Signed-off-by: Julien Grall <jgrall@amazon.com>

Reviewed-by: Juergen Gross <jgross@suse.com>

>=20
> ---
>=20
> This was spotted when backporting Live-Update to 4.11 because the
> commit 924bf8c793 "tools/xenstore: rework path length check" is
> not present. On the latest upstream, this is looks more a latent bug
> because I didn't manage to create such large node.

Yes, the path length is limited to "/local/domain/<id>/" + the max
relative path length.


Juergen

--------------579E6281980A7F5C3EFBC5D7
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------579E6281980A7F5C3EFBC5D7--

--gQFGWoqP95joRIVPjQObIVRJUqnZyPuj0--

--lPgkTsGrfseKseCyqOnA4r3RhEY43on3U
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmEDpAIFAwAAAAAACgkQsN6d1ii/Ey8Y
3gf+LwkkAQy4ZCfjXTCjxQK1SvlMLT7auBc/NRwdJM2UIsw/JU1LlebntWtVYBXf1TA5EV/CCZMS
V3XN3iAlGp0GETaH654v24hYa7x6HzFLqFXn9H4evhAFXiSKkI+8WXPprFWT8XbF9Z7uyC90MV84
DG1NsMIBWA0JOjc5emqjWyTbf0c1MijjfO7eirtiUb54NxoD73VZS5a2gVXuAXbR8mglX0kD/UdG
zjLSpu96f+Ch18+Aakbo4Z2FRL1Uzd/704mO3iZDAjdlYYfHCekbHNYqN8bluh1tluBtk5o4iagm
aIborcVSyE2t7+CBm4GygAz7XiPcEaDDQiw5IGvSMQ==
=M69P
-----END PGP SIGNATURE-----

--lPgkTsGrfseKseCyqOnA4r3RhEY43on3U--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 07:07:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 07:07:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162317.297714 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9McS-0004o5-3B; Fri, 30 Jul 2021 07:07:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162317.297714; Fri, 30 Jul 2021 07:07:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9McR-0004ny-W8; Fri, 30 Jul 2021 07:07:43 +0000
Received: by outflank-mailman (input) for mailman id 162317;
 Fri, 30 Jul 2021 07:07:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9McQ-0004ns-Ce
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 07:07:42 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d41cb0ef-f104-11eb-9889-12813bfff9fa;
 Fri, 30 Jul 2021 07:07:41 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 9574B1FDB3;
 Fri, 30 Jul 2021 07:07:40 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 6703A13651;
 Fri, 30 Jul 2021 07:07:40 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id VhJBFzylA2HfegAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 07:07:40 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d41cb0ef-f104-11eb-9889-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627628860; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=bErHTZR4vZPyJco3XE3mpAaox+OIV/CawPWsvF7XWqc=;
	b=WwhoivQl19mxMJRCA0GhYCPQMwbjLlBZWjc33XpquoGpQWQLh1y+hWc8+4rFY3OOP0QqXx
	tFBs+DPtA25YFfMLo1XcVY45GULijho8aB2EUqXJtyF1J1/rYKTY3gHrGGUZNuLqSeg4ch
	aJSATD1SWOQyDaG3fr+K0tPW6/cZXlU=
Subject: Re: [PATCH] tools/xenstored: Propagate correctly the error message
 from lu_start()
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
References: <20210729110602.24815-1-julien@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <86b0ac1c-8a93-f08c-b227-ed000c3167f6@suse.com>
Date: Fri, 30 Jul 2021 09:07:39 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210729110602.24815-1-julien@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="iUrqn3LoRyOboCqjMpLzO6k82InWjjQES"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--iUrqn3LoRyOboCqjMpLzO6k82InWjjQES
Content-Type: multipart/mixed; boundary="Gdu9215WoEKjPuZFU5I25mysG0v7uXf8O";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
Message-ID: <86b0ac1c-8a93-f08c-b227-ed000c3167f6@suse.com>
Subject: Re: [PATCH] tools/xenstored: Propagate correctly the error message
 from lu_start()
References: <20210729110602.24815-1-julien@xen.org>
In-Reply-To: <20210729110602.24815-1-julien@xen.org>

--Gdu9215WoEKjPuZFU5I25mysG0v7uXf8O
Content-Type: multipart/mixed;
 boundary="------------2269CBCEB79E3CA1657E1EA1"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------2269CBCEB79E3CA1657E1EA1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 29.07.21 13:06, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
>=20
> lu_start() will only set errno when it returns NULL. For all the
> other cases, the value is unknown.
>=20
> This means that when lu_start() returns an error message, it may not
> be propagated to the client.
>=20
> The check that errno is a non-zero value is now dropped and instead
> the value is returned when no error message is provided. This
> relies on errno to always be set when ret =3D=3D NULL.
>=20
> Fixes: af216a99fb ("tools/xenstore: add the basic framework for doing t=
he live update")
> Signed-off-by: Julien Grall <jgrall@amazon.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

--------------2269CBCEB79E3CA1657E1EA1
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------2269CBCEB79E3CA1657E1EA1--

--Gdu9215WoEKjPuZFU5I25mysG0v7uXf8O--

--iUrqn3LoRyOboCqjMpLzO6k82InWjjQES
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmEDpTsFAwAAAAAACgkQsN6d1ii/Ey8w
Gwf9Ff3c00g4JGausQQXPvSFhDBx5lLWKjvcfkLneiVmwqyqOL14N5aQfoZxx3tgmDWw+R4UbPnL
xQjuxl0H/KqDCke5c9GqK9cY94ZITea4QxxpWqcOEhSCfDFe2R0nJPBlzr3Cnvfe3swpIzHFhBPZ
5kPW4yY5zHpeA0ojKZpc1mhWdlZZcP0SLUZzAU3joEUmV3t55FhB44LR7V/hBaPZhNciReV2yNj7
hsi1+gc+BfLyAIdvOCMPuMEd+WSCiynldIw1qslXqCMUmvJSAYO+LH0fNVj1GJbKwF+vmAQpzmhZ
ZqVAElmRYfQjt3YFK/q18J8KoChN13bZoimm05ZOYQ==
=d1Sb
-----END PGP SIGNATURE-----

--iUrqn3LoRyOboCqjMpLzO6k82InWjjQES--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 07:18:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 07:18:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162326.297732 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MmY-0006HH-CG; Fri, 30 Jul 2021 07:18:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162326.297732; Fri, 30 Jul 2021 07:18:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MmY-0006Gn-7M; Fri, 30 Jul 2021 07:18:10 +0000
Received: by outflank-mailman (input) for mailman id 162326;
 Fri, 30 Jul 2021 07:18:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9MmX-0006Du-13
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 07:18:09 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0ed57977-2e82-49ba-a4c9-1248175ef1e7;
 Fri, 30 Jul 2021 07:18:08 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 48B1B1FDB8;
 Fri, 30 Jul 2021 07:18:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id F1E8613748;
 Fri, 30 Jul 2021 07:18:06 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id gEHcOa6nA2FufQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 07:18:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0ed57977-2e82-49ba-a4c9-1248175ef1e7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627629487; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=jiGuhZ6peP0OyKJAWTTjdxww+zrMIYBBDWdPs4yyawo=;
	b=gNlUD5gMM0mE/D5nD9CzenbbL5/H0UE/NgIAm/XUY858kcCf+GMFVnQBd5kS+JFNWF9YSV
	bdFmmwQYVnVydNdb8UHm5qJgkxqtpOKqem8jj7kF/gUtSOXbsFS/JoxDlSu2teBMdPE+BQ
	1jrymsXmezVEAPqIsKDItGMIGbmiS58=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	x86@kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH v2 2/3] xen: assume XENFEAT_mmu_pt_update_preserve_ad being set for pv guests
Date: Fri, 30 Jul 2021 09:18:03 +0200
Message-Id: <20210730071804.4302-3-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730071804.4302-1-jgross@suse.com>
References: <20210730071804.4302-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

XENFEAT_mmu_pt_update_preserve_ad is always set in Xen 4.0 and newer.
Remove coding assuming it might be zero.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 arch/x86/xen/enlighten_pv.c | 12 ++----------
 arch/x86/xen/mmu_pv.c       |  4 ++--
 2 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
index 03149422dce2..753f63734c13 100644
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -116,9 +116,8 @@ static void __init xen_banner(void)
 	HYPERVISOR_xen_version(XENVER_extraversion, &extra);
 
 	pr_info("Booting paravirtualized kernel on %s\n", pv_info.name);
-	printk(KERN_INFO "Xen version: %d.%d%s%s\n",
-	       version >> 16, version & 0xffff, extra.extraversion,
-	       xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : "");
+	pr_info("Xen version: %d.%d%s (preserve-AD)\n",
+		version >> 16, version & 0xffff, extra.extraversion);
 }
 
 static void __init xen_pv_init_platform(void)
@@ -1302,13 +1301,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
 	xen_init_apic();
 #endif
 
-	if (xen_feature(XENFEAT_mmu_pt_update_preserve_ad)) {
-		pv_ops.mmu.ptep_modify_prot_start =
-			xen_ptep_modify_prot_start;
-		pv_ops.mmu.ptep_modify_prot_commit =
-			xen_ptep_modify_prot_commit;
-	}
-
 	machine_ops = xen_machine_ops;
 
 	/*
diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
index ade789e73ee4..1df5f01529e5 100644
--- a/arch/x86/xen/mmu_pv.c
+++ b/arch/x86/xen/mmu_pv.c
@@ -2099,8 +2099,8 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
 	.set_pte = xen_set_pte_init,
 	.set_pmd = xen_set_pmd_hyper,
 
-	.ptep_modify_prot_start = __ptep_modify_prot_start,
-	.ptep_modify_prot_commit = __ptep_modify_prot_commit,
+	.ptep_modify_prot_start = xen_ptep_modify_prot_start,
+	.ptep_modify_prot_commit = xen_ptep_modify_prot_commit,
 
 	.pte_val = PV_CALLEE_SAVE(xen_pte_val),
 	.pgd_val = PV_CALLEE_SAVE(xen_pgd_val),
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 07:18:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 07:18:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162325.297726 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MmY-0006E7-2s; Fri, 30 Jul 2021 07:18:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162325.297726; Fri, 30 Jul 2021 07:18:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9MmX-0006E0-Vg; Fri, 30 Jul 2021 07:18:09 +0000
Received: by outflank-mailman (input) for mailman id 162325;
 Fri, 30 Jul 2021 07:18:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9MmW-0006Do-LT
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 07:18:08 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 497dc7b4-f106-11eb-9889-12813bfff9fa;
 Fri, 30 Jul 2021 07:18:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id BBFFE1FDB2;
 Fri, 30 Jul 2021 07:18:06 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 6A9DF13748;
 Fri, 30 Jul 2021 07:18:06 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id HNOqGK6nA2FufQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 07:18:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 497dc7b4-f106-11eb-9889-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627629486; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=DE3ajipCLGOoeJxse+uDWjYBYGnyKVCVQDv9OtWAWVI=;
	b=heVVEeGq2L8PWSC+4CgWL24xdqHuxUwwFHAbMmNldk6K+ldEFw4cvYwy5qm+PebQHx74an
	tuxtPqj/bFZ0VgSdvZauxd0jWoYl4JXLF8JKJ2EZljS8/6GPS23UEduudJZHIGJcjiMRdO
	ZknQTFEzthfc6hzNM1tmd2XkVYJhWPI=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-kernel@vger.kernel.org,
	x86@kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: [PATCH v2 0/3] xen: remove some checks for always present Xen features
Date: Fri, 30 Jul 2021 09:18:01 +0200
Message-Id: <20210730071804.4302-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Some features of Xen can be assumed to be always present, so add a
central check to verify this being true and remove the other checks.

Juergen Gross (3):
  xen: check required Xen features
  xen: assume XENFEAT_mmu_pt_update_preserve_ad being set for pv guests
  xen: assume XENFEAT_gnttab_map_avail_bits being set for pv guests

 arch/x86/xen/enlighten_pv.c | 12 ++----------
 arch/x86/xen/mmu_pv.c       |  4 ++--
 drivers/xen/features.c      | 18 ++++++++++++++++++
 drivers/xen/gntdev.c        | 36 ++----------------------------------
 4 files changed, 24 insertions(+), 46 deletions(-)

-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 07:18:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 07:18:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162327.297751 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Mmc-0006nb-Jr; Fri, 30 Jul 2021 07:18:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162327.297751; Fri, 30 Jul 2021 07:18:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Mmc-0006nF-FW; Fri, 30 Jul 2021 07:18:14 +0000
Received: by outflank-mailman (input) for mailman id 162327;
 Fri, 30 Jul 2021 07:18:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Mmb-0006Do-Gc
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 07:18:13 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 497dc7b5-f106-11eb-9889-12813bfff9fa;
 Fri, 30 Jul 2021 07:18:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id EA8E11FDB3;
 Fri, 30 Jul 2021 07:18:06 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id C1BDE13748;
 Fri, 30 Jul 2021 07:18:06 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id KJISLq6nA2FufQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 07:18:06 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 497dc7b5-f106-11eb-9889-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627629486; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=dXHUM7lXyWrAMLgi9KDBkwkBbe+GUHRQIfTUEaC3Es0=;
	b=CmagrxEtD3TrPfNSVaCrRb3MI++Zl+msTB5z3G5Rw6JB7REz302fCG1SqoONxV1eNTGnct
	Y+rl61k756x1QzQ+JElqVBfV00m8i4I2NGBtj+H1Y8RxSlw4j5dStPbm5iOlPeHUUcHVtO
	/QcnYVu7ZytRetzZdBNEKdoG4o56Ej8=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>
Subject: [PATCH v2 1/3] xen: check required Xen features
Date: Fri, 30 Jul 2021 09:18:02 +0200
Message-Id: <20210730071804.4302-2-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730071804.4302-1-jgross@suse.com>
References: <20210730071804.4302-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Linux kernel is not supported to run on Xen versions older than 4.0.

Add tests for required Xen features always being present in Xen 4.0
and newer.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- rename macro (Boris Ostrovsky)
- panic() in case of missing feature (Boris Ostrovsky)
---
 drivers/xen/features.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/xen/features.c b/drivers/xen/features.c
index 25c053b09605..7b591443833c 100644
--- a/drivers/xen/features.c
+++ b/drivers/xen/features.c
@@ -9,13 +9,26 @@
 #include <linux/types.h>
 #include <linux/cache.h>
 #include <linux/export.h>
+#include <linux/printk.h>
 
 #include <asm/xen/hypercall.h>
 
+#include <xen/xen.h>
 #include <xen/interface/xen.h>
 #include <xen/interface/version.h>
 #include <xen/features.h>
 
+/*
+ * Linux kernel expects at least Xen 4.0.
+ *
+ * Assume some features to be available for that reason (depending on guest
+ * mode, of course).
+ */
+#define chk_required_feature(f) {					\
+		if (!xen_feature(f))					\
+			panic("Xen: feature %s not available!\n", #f);	\
+	}
+
 u8 xen_features[XENFEAT_NR_SUBMAPS * 32] __read_mostly;
 EXPORT_SYMBOL_GPL(xen_features);
 
@@ -31,4 +44,9 @@ void xen_setup_features(void)
 		for (j = 0; j < 32; j++)
 			xen_features[i * 32 + j] = !!(fi.submap & 1<<j);
 	}
+
+	if (xen_pv_domain()) {
+		chk_required_feature(XENFEAT_mmu_pt_update_preserve_ad);
+		chk_required_feature(XENFEAT_gnttab_map_avail_bits);
+	}
 }
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 07:18:20 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 07:18:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162328.297763 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Mmi-0007Ba-3g; Fri, 30 Jul 2021 07:18:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162328.297763; Fri, 30 Jul 2021 07:18:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Mmi-0007BP-07; Fri, 30 Jul 2021 07:18:20 +0000
Received: by outflank-mailman (input) for mailman id 162328;
 Fri, 30 Jul 2021 07:18:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Mmg-0006Do-Gm
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 07:18:18 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 49f0c2d2-f106-11eb-9889-12813bfff9fa;
 Fri, 30 Jul 2021 07:18:08 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 7D68D2020B;
 Fri, 30 Jul 2021 07:18:07 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 4F3551374D;
 Fri, 30 Jul 2021 07:18:07 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id wAzgEa+nA2FufQAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 07:18:07 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 49f0c2d2-f106-11eb-9889-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627629487; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=cyZcoypMsiPyV5D5l5wSyscmkn1Z3KKgfGDueS4Lb8Q=;
	b=GXcQ+AQRPZJ+G9sddnPaaK086EH9kpql9cfa/M7rnCoYYva1VeOrv39m3yuBfqLvG/hmtm
	zIL8dEPA2skQc0m4Gm69R5UdSDqG86/k0qiGUZPPoks7j7TRoCWxOS8ApDYgPOkchj5ycQ
	9JaOXOFZXnkGxrtmQ4JVPg1/khQ7yaw=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH v2 3/3] xen: assume XENFEAT_gnttab_map_avail_bits being set for pv guests
Date: Fri, 30 Jul 2021 09:18:04 +0200
Message-Id: <20210730071804.4302-4-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730071804.4302-1-jgross@suse.com>
References: <20210730071804.4302-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

XENFEAT_gnttab_map_avail_bits is always set in Xen 4.0 and newer.
Remove coding assuming it might be zero.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 drivers/xen/gntdev.c | 36 ++----------------------------------
 1 file changed, 2 insertions(+), 34 deletions(-)

diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index a3e7be96527d..1e7f6b1c0c97 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -266,20 +266,13 @@ static int find_grant_ptes(pte_t *pte, unsigned long addr, void *data)
 {
 	struct gntdev_grant_map *map = data;
 	unsigned int pgnr = (addr - map->vma->vm_start) >> PAGE_SHIFT;
-	int flags = map->flags | GNTMAP_application_map | GNTMAP_contains_pte;
+	int flags = map->flags | GNTMAP_application_map | GNTMAP_contains_pte |
+		    (1 << _GNTMAP_guest_avail0);
 	u64 pte_maddr;
 
 	BUG_ON(pgnr >= map->count);
 	pte_maddr = arbitrary_virt_to_machine(pte).maddr;
 
-	/*
-	 * Set the PTE as special to force get_user_pages_fast() fall
-	 * back to the slow path.  If this is not supported as part of
-	 * the grant map, it will be done afterwards.
-	 */
-	if (xen_feature(XENFEAT_gnttab_map_avail_bits))
-		flags |= (1 << _GNTMAP_guest_avail0);
-
 	gnttab_set_map_op(&map->map_ops[pgnr], pte_maddr, flags,
 			  map->grants[pgnr].ref,
 			  map->grants[pgnr].domid);
@@ -288,14 +281,6 @@ static int find_grant_ptes(pte_t *pte, unsigned long addr, void *data)
 	return 0;
 }
 
-#ifdef CONFIG_X86
-static int set_grant_ptes_as_special(pte_t *pte, unsigned long addr, void *data)
-{
-	set_pte_at(current->mm, addr, pte, pte_mkspecial(*pte));
-	return 0;
-}
-#endif
-
 int gntdev_map_grant_pages(struct gntdev_grant_map *map)
 {
 	int i, err = 0;
@@ -1055,23 +1040,6 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)
 		err = vm_map_pages_zero(vma, map->pages, map->count);
 		if (err)
 			goto out_put_map;
-	} else {
-#ifdef CONFIG_X86
-		/*
-		 * If the PTEs were not made special by the grant map
-		 * hypercall, do so here.
-		 *
-		 * This is racy since the mapping is already visible
-		 * to userspace but userspace should be well-behaved
-		 * enough to not touch it until the mmap() call
-		 * returns.
-		 */
-		if (!xen_feature(XENFEAT_gnttab_map_avail_bits)) {
-			apply_to_page_range(vma->vm_mm, vma->vm_start,
-					    vma->vm_end - vma->vm_start,
-					    set_grant_ptes_as_special, NULL);
-		}
-#endif
 	}
 
 	return 0;
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 08:07:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 08:07:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162362.297774 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9NXf-0004xW-2b; Fri, 30 Jul 2021 08:06:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162362.297774; Fri, 30 Jul 2021 08:06:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9NXe-0004xP-Vq; Fri, 30 Jul 2021 08:06:50 +0000
Received: by outflank-mailman (input) for mailman id 162362;
 Fri, 30 Jul 2021 08:06:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=IDtc=MW=intel.com=andriy.shevchenko@srs-us1.protection.inumbo.net>)
 id 1m9NXe-0004xJ-5p
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 08:06:50 +0000
Received: from mga12.intel.com (unknown [192.55.52.136])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9b2c01b2-9646-4b6e-8f3c-a69908b577c4;
 Fri, 30 Jul 2021 08:06:44 +0000 (UTC)
Received: from orsmga005.jf.intel.com ([10.7.209.41])
 by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 30 Jul 2021 01:06:43 -0700
Received: from smile.fi.intel.com (HELO smile) ([10.237.68.40])
 by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 30 Jul 2021 01:06:29 -0700
Received: from andy by smile with local (Exim 4.94.2)
 (envelope-from <andriy.shevchenko@intel.com>)
 id 1m9NXA-003JSv-6T; Fri, 30 Jul 2021 11:06:20 +0300
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9b2c01b2-9646-4b6e-8f3c-a69908b577c4
X-IronPort-AV: E=McAfee;i="6200,9189,10060"; a="192649275"
X-IronPort-AV: E=Sophos;i="5.84,281,1620716400"; 
   d="scan'208";a="192649275"
X-IronPort-AV: E=Sophos;i="5.84,281,1620716400"; 
   d="scan'208";a="635393118"
Date: Fri, 30 Jul 2021 11:06:20 +0300
From: Andy Shevchenko <andriy.shevchenko@intel.com>
To: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= <u.kleine-koenig@pengutronix.de>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>, kernel@pengutronix.de,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-pci@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Russell Currey <ruscur@russell.cc>,
	Oliver O'Halloran <oohall@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>, x86@kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Zhou Wang <wangzhou1@hisilicon.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
	Sathya Prakash <sathya.prakash@broadcom.com>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
	Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
	Frederic Barrat <fbarrat@linux.ibm.com>,
	Andrew Donnellan <ajd@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
	Yisen Zhuang <yisen.zhuang@huawei.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Vadym Kochan <vkochan@marvell.com>,
	Taras Chornyi <tchornyi@marvell.com>, Jiri Pirko <jiri@nvidia.com>,
	Ido Schimmel <idosch@nvidia.com>,
	Simon Horman <simon.horman@corigine.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Juergen Gross <jgross@suse.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Michael Buesch <m@bues.ch>, Mathias Nyman <mathias.nyman@intel.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Wojciech Ziemba <wojciech.ziemba@intel.com>,
	Alexander Duyck <alexanderduyck@fb.com>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-crypto@vger.kernel.org, qat-linux@intel.com,
	MPT-FusionLinux.pdl@broadcom.com, linux-scsi@vger.kernel.org,
	netdev@vger.kernel.org, oss-drivers@corigine.com,
	xen-devel@lists.xenproject.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH v1 0/5] PCI: Drop duplicated tracking of a pci_dev's
 bound driver
Message-ID: <YQOy/OTvY66igEoe@smile.fi.intel.com>
References: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo

On Thu, Jul 29, 2021 at 10:37:35PM +0200, Uwe Kleine-Knig wrote:
> Hello,
> 
> struct pci_dev tracks the bound pci driver twice. This series is about
> removing this duplication.
> 
> The first two patches are just cleanups. The third patch introduces a
> wrapper that abstracts access to struct pci_dev->driver. In the next
> patch (hopefully) all users are converted to use the new wrapper and
> finally the fifth patch removes the duplication.
> 
> Note this series is only build tested (allmodconfig on several
> architectures).
> 
> I'm open to restructure this series if this simplifies things. E.g. the
> use of the new wrapper in drivers/pci could be squashed into the patch
> introducing the wrapper. Patch 4 could be split by maintainer tree or
> squashed into patch 3 completely.

I see only patch 4 and this cover letter...

-- 
With Best Regards,
Andy Shevchenko




From xen-devel-bounces@lists.xenproject.org Fri Jul 30 08:26:24 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 08:26:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162370.297787 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9NqT-0007Bb-Or; Fri, 30 Jul 2021 08:26:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162370.297787; Fri, 30 Jul 2021 08:26:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9NqT-0007BU-Lv; Fri, 30 Jul 2021 08:26:17 +0000
Received: by outflank-mailman (input) for mailman id 162370;
 Fri, 30 Jul 2021 08:26:15 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9NqR-0007BK-Qs; Fri, 30 Jul 2021 08:26:15 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9NqR-0007co-Kj; Fri, 30 Jul 2021 08:26:15 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9NqR-00006L-9m; Fri, 30 Jul 2021 08:26:15 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9NqR-0005dt-9I; Fri, 30 Jul 2021 08:26:15 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=bmJO0YH5YR1kMsknEPxabNDRLnbxICgN9PtFOxB4hh4=; b=iPq/+uPAvNX9Io46Cn65sFpiDB
	wpKPCCGmbo6rW22EV2gI/SgbduweC2qDM6DCpMr5Qndzb8eokGV+hOX2YXzjVn9kbGV+479CHPNzo
	+q0oLLsxs2vRce5uUASdQbkVuiO4L2MhsldbYfkGybuboIW1DcjQr3O2WPsDnckrusRg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164048-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164048: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-xsm:guest-start/debian.repeat:fail:regression
    linux-linus:test-amd64-amd64-xl-rtds:guest-start/debian.repeat:fail:allowable
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=7e96bf476270aecea66740a083e51b38c1371cd2
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 08:26:15 +0000

flight 164048 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164048/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-xl-xsm     22 guest-start/debian.repeat fail REGR. vs. 152332

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds    22 guest-start/debian.repeat fail REGR. vs. 152332

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

version targeted for testing:
 linux                7e96bf476270aecea66740a083e51b38c1371cd2
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  363 days
Failing since        152366  2020-08-01 20:49:34 Z  362 days  625 attempts
Testing same since   164048  2021-07-30 00:11:09 Z    0 days    1 attempts

------------------------------------------------------------
6733 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      fail    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     fail    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1988690 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 08:40:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 08:40:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162380.297801 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9O47-00014t-7e; Fri, 30 Jul 2021 08:40:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162380.297801; Fri, 30 Jul 2021 08:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9O47-00014m-4l; Fri, 30 Jul 2021 08:40:23 +0000
Received: by outflank-mailman (input) for mailman id 162380;
 Fri, 30 Jul 2021 08:40:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9O46-00014g-IC
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 08:40:22 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c639ff88-f111-11eb-988b-12813bfff9fa;
 Fri, 30 Jul 2021 08:40:21 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 78803221CE;
 Fri, 30 Jul 2021 08:40:20 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 452AA1332A;
 Fri, 30 Jul 2021 08:40:20 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 5sCkD/S6A2G1FgAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 08:40:20 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c639ff88-f111-11eb-988b-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627634420; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=GTa0w3u3ZB7ECoThBRcoiV3/r9FiwsvJUQuaLnc8fIA=;
	b=BNznAlp0zoTMhL5EBS4LaSdCtYYv43RYce2aQ2xRCfKxvfpXAZGVZkwhciMzMPkiBEfTNR
	0cSEmy6tB9fNxoScxWnyCRBihwf//k1ibT/impdOKOZmEsOtDwL0CHdboWQP9gBK4dbxD9
	fQtRW0FDd1Uq5YLumdSGp7CZ5sHEy20=
Subject: Re: [PATCH] tools/xenstored: Don't assume errno will not be
 overwritten in lu_arch()
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
References: <20210729110647.25500-1-julien@xen.org>
 <bbdbc7a9-c82e-2656-6a03-553ff55a2101@xen.org>
From: Juergen Gross <jgross@suse.com>
Message-ID: <3f3843c0-5766-b483-ce25-33fe2d4359ca@suse.com>
Date: Fri, 30 Jul 2021 10:40:19 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <bbdbc7a9-c82e-2656-6a03-553ff55a2101@xen.org>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="8ZGbNSLIUzkEDiWrsJoxSn7lMt0To4Iz5"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--8ZGbNSLIUzkEDiWrsJoxSn7lMt0To4Iz5
Content-Type: multipart/mixed; boundary="BAV7UqQtqvTgp2HBCq9xGIRR6o3N4HOK2";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Julien Grall <julien@xen.org>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
Message-ID: <3f3843c0-5766-b483-ce25-33fe2d4359ca@suse.com>
Subject: Re: [PATCH] tools/xenstored: Don't assume errno will not be
 overwritten in lu_arch()
References: <20210729110647.25500-1-julien@xen.org>
 <bbdbc7a9-c82e-2656-6a03-553ff55a2101@xen.org>
In-Reply-To: <bbdbc7a9-c82e-2656-6a03-553ff55a2101@xen.org>

--BAV7UqQtqvTgp2HBCq9xGIRR6o3N4HOK2
Content-Type: multipart/mixed;
 boundary="------------8B48492AA85A8C5872115182"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------8B48492AA85A8C5872115182
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 29.07.21 17:23, Julien Grall wrote:
>=20
>=20
> On 29/07/2021 12:06, Julien Grall wrote:
>> From: Julien Grall <jgrall@amazon.com>
>>
>> At the moment, do_control_lu() will set errno to 0 before calling
>> lu_arch() and then check errno. The expectation is nothing in lu_arch(=
)
>> will change the value unless there is an error.
>>
>> However, per errno(3), a function that succeeds is allowed to change
>> errno. In fact, syslog() will overwrite errno if the logs are rotated
>> at the time it is called.
>>
>> To prevent any further issue, errno is now always set before
>> returning NULL.
>>
>> Additionally, errno is only checked when returning NULL so the client
>> can see the error message if there is any.
>>
>> Reported-by: Michael Kurth <mku@amazon.com>
>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>> ---
>> =C2=A0 tools/xenstore/xenstored_control.c | 5 +++--
>> =C2=A0 1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/tools/xenstore/xenstored_control.c=20
>> b/tools/xenstore/xenstored_control.c
>> index 6b68b79faac7..6fcb42095b59 100644
>> --- a/tools/xenstore/xenstored_control.c
>> +++ b/tools/xenstore/xenstored_control.c
>> @@ -324,6 +324,7 @@ static const char *lu_binary_alloc(const void=20
>> *ctx, struct connection *conn,
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 lu_status->kernel_size =3D size;
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 lu_status->kernel_off =3D 0;
>> +=C2=A0=C2=A0=C2=A0 errno =3D 0;
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return NULL;
>> =C2=A0 }
>> @@ -339,6 +340,7 @@ static const char *lu_binary_save(const void *ctx,=
=20
>> struct connection *conn,
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 memcpy(lu_status->kernel + lu_status->k=
ernel_off, data, size);
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 lu_status->kernel_off +=3D size;
>> +=C2=A0=C2=A0=C2=A0 errno =3D 0;
>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return NULL;
>> =C2=A0 }
>=20
> I forgot to update lu_binary(). I will respin the patch once I get some=
=20
> feedback.

With setting errno to 0 before returning NULL in lu_binary() you can add

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen


--------------8B48492AA85A8C5872115182
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------8B48492AA85A8C5872115182--

--BAV7UqQtqvTgp2HBCq9xGIRR6o3N4HOK2--

--8ZGbNSLIUzkEDiWrsJoxSn7lMt0To4Iz5
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmEDuvMFAwAAAAAACgkQsN6d1ii/Ey/a
dAgAlYrgeBUdVs+l1wRVHTzZW7xqKYyDS3/0+qPCZMf3zzPzikJXmzzFeVKR3H6pIYhjcJnGEwaZ
VaNq3YqIwOoFwvkT7izTqZ6mlrcrXEH77aN7wdcw2u5aRfaNxHoPAajgJB+uDQRdUwisrguauqiF
Rc7bpgGBpUaX5JoFEH6a9FyXRS7WoC0on04yqaKV63Yn9S5drQRD17SZQ8m4jnLLZGgQpmR4S0JW
m7ND4yBZ1MxxCU4YHV91GLfiV6f2/vo8soYzdEhvu2C/Y4yGBHlaYZumeTuQUJHxVvorBzuJmS7M
PNosBbEvdGuLVHNX91eg6QgXIJscqsH8xklJgHsktg==
=wFbV
-----END PGP SIGNATURE-----

--8ZGbNSLIUzkEDiWrsJoxSn7lMt0To4Iz5--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 08:56:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 08:56:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162388.297814 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9OJP-0002de-Ll; Fri, 30 Jul 2021 08:56:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162388.297814; Fri, 30 Jul 2021 08:56:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9OJP-0002dX-IY; Fri, 30 Jul 2021 08:56:11 +0000
Received: by outflank-mailman (input) for mailman id 162388;
 Fri, 30 Jul 2021 08:56:10 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9OJO-0002dL-1K; Fri, 30 Jul 2021 08:56:10 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9OJN-00083F-QJ; Fri, 30 Jul 2021 08:56:09 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9OJN-0001Hk-H7; Fri, 30 Jul 2021 08:56:09 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9OJN-0002bK-Gd; Fri, 30 Jul 2021 08:56:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=3H1egcDwi3/67QyYV9fYoVeDuMnpXlQmsG6xjU7Yemg=; b=WouWaRJzNNQY5eduqmizqvCSlv
	i5KvRKdX4h/mr5pXFORke1IK8pOTtSEXKzHd01lGOkXgJmlOdaxVC4HmCHGsafLDILCgBZaXPy2km
	OF5SlunmqWXGC/Fgxd/NSCpUMg+JJKlumbyWU75WvHpCUPIQ0lGd2nOVKX+sOnCbJSR4=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164050-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 164050: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=bae39ea87133aed886699a423a7ccce2a8f8fd32
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 08:56:09 +0000

flight 164050 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164050/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              bae39ea87133aed886699a423a7ccce2a8f8fd32
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  385 days
Failing since        151818  2020-07-11 04:18:52 Z  384 days  376 attempts
Testing same since   164050  2021-07-30 04:20:05 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jia Zhou <zhou.jia2@zte.com.cn>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Richard W.M. Jones <rjones@redhat.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Fei <yangfei85@huawei.com>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 67176 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 09:00:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 09:00:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162396.297829 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9ONB-0003fs-6z; Fri, 30 Jul 2021 09:00:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162396.297829; Fri, 30 Jul 2021 09:00:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9ONB-0003fG-3N; Fri, 30 Jul 2021 09:00:05 +0000
Received: by outflank-mailman (input) for mailman id 162396;
 Fri, 30 Jul 2021 09:00:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9ON9-0003ZO-Ec
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:00:03 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id df7ce1b9-3d88-401d-93d2-678bbf3c9714;
 Fri, 30 Jul 2021 09:00:02 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 2892220215;
 Fri, 30 Jul 2021 09:00:01 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id D19311332A;
 Fri, 30 Jul 2021 09:00:00 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id x0VOMZC/A2FNHAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 09:00:00 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: df7ce1b9-3d88-401d-93d2-678bbf3c9714
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627635601; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=7IxC3RqNecpXBwFY94yQ1ukWppFYEOEQtxcRiNkZxrY=;
	b=LilIvX+MJeLQHIe1nlqHzEu8T4fq9LX9D06ZzEOvIiw2vo7s8DgpZ6qyh7Jfvv4vL8DbeI
	5zg/M8tK4XXGRf7zawcITQvzA2v5AzqKaZRBcxLvmhGGhqgIGrHQtQK7S0/Ox0wP0bB5OZ
	HBpDpPDeylC2w5d7moDNRkS/Ih1Rteg=
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>,
 Borislav Petkov <bp@alien8.de>, "H. Peter Anvin" <hpa@zytor.com>,
 xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, x86@kernel.org
References: <20210616073007.5215-1-jgross@suse.com>
 <20210616073007.5215-3-jgross@suse.com>
 <8dbeb9ea-56c9-de30-4d5f-fc9c0ced6ac4@suse.com>
 <79434ec4-4543-97ad-b010-3f2c1b6a55ad@suse.com>
Subject: Re: [PATCH 2/2] xen: rename wrong named pfn related variables
Message-ID: <b9c64bcd-4192-0075-ddf5-711e84301063@suse.com>
Date: Fri, 30 Jul 2021 11:00:00 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <79434ec4-4543-97ad-b010-3f2c1b6a55ad@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="8cmsx2dmR52fCeWo50XLKe12RwSCtu4lD"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--8cmsx2dmR52fCeWo50XLKe12RwSCtu4lD
Content-Type: multipart/mixed; boundary="m6QycKnDtNC4KC8w0LibNvzPpY9CQUr7E";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>,
 Borislav Petkov <bp@alien8.de>, "H. Peter Anvin" <hpa@zytor.com>,
 xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, x86@kernel.org
Message-ID: <b9c64bcd-4192-0075-ddf5-711e84301063@suse.com>
Subject: Re: [PATCH 2/2] xen: rename wrong named pfn related variables
References: <20210616073007.5215-1-jgross@suse.com>
 <20210616073007.5215-3-jgross@suse.com>
 <8dbeb9ea-56c9-de30-4d5f-fc9c0ced6ac4@suse.com>
 <79434ec4-4543-97ad-b010-3f2c1b6a55ad@suse.com>
In-Reply-To: <79434ec4-4543-97ad-b010-3f2c1b6a55ad@suse.com>

--m6QycKnDtNC4KC8w0LibNvzPpY9CQUr7E
Content-Type: multipart/mixed;
 boundary="------------6C08B12FFB771240B7946F1D"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------6C08B12FFB771240B7946F1D
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 16.06.21 12:43, Juergen Gross wrote:
> On 16.06.21 11:56, Jan Beulich wrote:
>> On 16.06.2021 09:30, Juergen Gross wrote:
>>> --- a/arch/x86/xen/p2m.c
>>> +++ b/arch/x86/xen/p2m.c
>>> @@ -95,8 +95,8 @@ unsigned long *xen_p2m_addr __read_mostly;
>>> =C2=A0 EXPORT_SYMBOL_GPL(xen_p2m_addr);
>>> =C2=A0 unsigned long xen_p2m_size __read_mostly;
>>> =C2=A0 EXPORT_SYMBOL_GPL(xen_p2m_size);
>>> -unsigned long xen_max_p2m_pfn __read_mostly;
>>> -EXPORT_SYMBOL_GPL(xen_max_p2m_pfn);
>>> +unsigned long xen_p2m_max_size __read_mostly;
>>> +EXPORT_SYMBOL_GPL(xen_p2m_max_size);
>>
>> Instead of renaming the exported variable (which will break consumers
>> anyway), how about dropping the apparently unneeded export at this
>> occasion?
>=20
> Why do you think it isn't needed? It is being referenced via the inline=

> function __pfn_to_mfn() in arch/x86/include/asm/xen/page.h. And
> __pfn_to_mfn() is used via lots of other inline functions and macros.
>=20
>> Further it looks to me as if xen_p2m_size and this variable
>> were actually always kept in sync, so I'd like to put up the question
>> of dropping one of the two.
>=20
> Hmm, should be possible, yes.

Looking into this it seems this is not possible.

xen_p2m_size always holds the number of p2m entries in the p2m table,
including invalid ones at the end. xen_p2m_pfn_limit however contains
the (rounded up) index after the last valid p2m entry.


Juergen

--------------6C08B12FFB771240B7946F1D
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------6C08B12FFB771240B7946F1D--

--m6QycKnDtNC4KC8w0LibNvzPpY9CQUr7E--

--8cmsx2dmR52fCeWo50XLKe12RwSCtu4lD
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmEDv5AFAwAAAAAACgkQsN6d1ii/Ey8z
8wf/XCqCVB2CpArPJ2pIiaEOshy61AQ63nqgJisr57fS47vip9RY5VVforVO+8NK/N08J5XvizuX
/zLmwGxp1LP4ZUmJDXa7JWHufxPPwJ0fGpqjgDXEFlTH+CkidZ+6SByJnHd6p8ZQrMSD1HdfJqcx
du+90Can/04tSiFepDTyw0BL0FHX+6z4AQ6wQR7cCtc4jxj3cD7nQlLZKYMlWF1o8iIQo1YUVa22
fYtnLpX9806DwqR7Y5z+7m6dBHoPkAfeyZubIrJ+9apBgjkPMu7BtUqeViXVDIws1Gsrt+o3Hn68
coHOM+pdT5ZSfjeoT2IQbhyHq2kv5LH2wC5XTjp5og==
=DzK6
-----END PGP SIGNATURE-----

--8cmsx2dmR52fCeWo50XLKe12RwSCtu4lD--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 09:18:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 09:18:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162406.297842 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Of6-0005f2-1D; Fri, 30 Jul 2021 09:18:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162406.297842; Fri, 30 Jul 2021 09:18:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Of5-0005ev-Ru; Fri, 30 Jul 2021 09:18:35 +0000
Received: by outflank-mailman (input) for mailman id 162406;
 Fri, 30 Jul 2021 09:18:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=9J0s=MW=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1m9Of5-0005ep-1V
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:18:35 +0000
Received: from mx.upb.ro (unknown [141.85.13.220])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b05782d7-24df-4f68-ad71-f13ba9cbc785;
 Fri, 30 Jul 2021 09:18:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id 34426B560069;
 Fri, 30 Jul 2021 12:18:31 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id fX2wbm4miKFb; Fri, 30 Jul 2021 12:18:28 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by mx.upb.ro (Postfix) with ESMTP id B3D86B56007B;
 Fri, 30 Jul 2021 12:18:28 +0300 (EEST)
Received: from mx.upb.ro ([127.0.0.1])
 by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id ySPbAUy1TZD4; Fri, 30 Jul 2021 12:18:28 +0300 (EEST)
Received: from [192.168.1.35] (unknown [86.121.88.42])
 by mx.upb.ro (Postfix) with ESMTPSA id 81F4CB56006D;
 Fri, 30 Jul 2021 12:18:27 +0300 (EEST)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b05782d7-24df-4f68-ad71-f13ba9cbc785
X-Virus-Scanned: amavisd-new at upb.ro
Subject: Re: [PATCH] stubdom: foreignmemory: Fix build after 0dbb4be739c5
To: Andrew Cooper <andrew.cooper3@citrix.com>, Juergen Gross
 <jgross@suse.com>, Julien Grall <julien@xen.org>,
 Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>, xen-devel@lists.xenproject.org
References: <20210713092019.7379-1-julien@xen.org>
 <0698e4b1-8fb9-919e-e9a2-1b135a808e3e@suse.com>
 <d84bb0ca-ff51-2def-3826-c0a921ec1835@citrix.com>
 <fb6cc1b7-37b4-1819-6f6f-ebf96aefe00e@xen.org>
 <756ba923-17a6-0889-cc7e-bcd43a5eb258@citrix.com>
 <3505f2da-4c41-f5ca-d775-814d038d5bad@xen.org>
 <badec201-6719-844e-2a07-6508e891ca3e@citrix.com>
 <3c819563-b354-5527-050d-f698324d6021@xen.org>
 <c299355b-c031-3efd-ef97-671bd102809b@cs.pub.ro>
 <65d35862-304c-7fe3-82de-3ff62f06529a@suse.com>
 <40c00267-60d2-c0fc-cde4-8ac4ce936f87@suse.com>
 <d7cbedf3-bb67-1eda-70e2-d15c5649c0cd@xen.org>
 <69c62b4c-b46f-9eab-8dfd-742c07423424@suse.com>
 <c0a7de56-de7b-3451-8cc5-ccb73c78ba42@xen.org>
 <ce7a20e5-3f18-11b6-d0d1-72e31362d2fb@suse.com>
 <bb9e482c-e9b6-9def-7e7e-ac2ba9b7e7f4@xen.org>
 <7fab704a-6b59-1e9b-663e-a3afdfcc319f@suse.com>
 <3a6f1fc6-a9b3-78bc-1b73-b7ad10d20405@cs.pub.ro>
 <627d776e-575e-c32a-f3f6-87ace982d6da@citrix.com>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <600e843a-741b-477c-9705-483f5e6c252a@cs.pub.ro>
Date: Fri, 30 Jul 2021 12:18:26 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <627d776e-575e-c32a-f3f6-87ace982d6da@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable

On 7/27/21 4:36 PM, Andrew Cooper wrote:
> On 16/07/2021 19:28, Costin Lupu wrote:
>> On 7/13/21 6:20 PM, Juergen Gross wrote:
>>> On 13.07.21 17:15, Julien Grall wrote:
>>>> Hi Juergen,
>>>>
>>>> On 13/07/2021 16:09, Juergen Gross wrote:
>>>>> On 13.07.21 16:38, Julien Grall wrote:
>>>>>> Hi Juergen,
>>>>>>
>>>>>> On 13/07/2021 15:23, Juergen Gross wrote:
>>>>>>> On 13.07.21 16:19, Julien Grall wrote:
>>>>>>>> Hi Jan,
>>>>>>>>
>>>>>>>> On 13/07/2021 15:14, Jan Beulich wrote:
>>>>>>>>>> And I don't think it should be named XC_PAGE_*, but rather
>>>>>>>>>> XEN_PAGE_*.
>>>>>>>>> Even that doesn't seem right to me, at least in principle. Ther=
e
>>>>>>>>> shouldn't
>>>>>>>>> be a build time setting when it may vary at runtime. IOW on Arm=
 I
>>>>>>>>> think a
>>>>>>>>> runtime query to the hypervisor would be needed instead.
>>>>>>>> Yes, we want to be able to use the same userspace/OS without
>>>>>>>> rebuilding to a specific hypervisor page size.
>>>>>>> This define is used for accessing data of other domains. See the
>>>>>>> define
>>>>>>> for XEN_PAGE_SIZE in xen/include/public/io/ring.h
>>>>>>>
>>>>>>> So it should be a constant (minimal) page size for all hypervisor=
s and
>>>>>>> guests of an architecture.
>>>>>> Do you mean the maximum rather than minimal? If you use the minima=
l
>>>>>> (4KB), then you would not be able to map the page in the stage-2 i=
f
>>>>>> the hypervisor is using 64KB.
>>>>> But this would mean that the current solution to use XC_PAGE_SIZE i=
s
>>>>> wrong, as this is 4k.
>>>> The existing ABI is implicitely based on using the hypervisor page
>>>> granularity (currently 4KB).
>>>>
>>>> There is really no way we can support existing guest on 64KB
>>>> hypervisor. But if we were going to break them, then we should
>>>> consider to do one of the following option:
>>>> =C2=A0=C2=A0=C2=A0 1) use 64KB page granularity for ABI
>>>> =C2=A0=C2=A0=C2=A0 2) query the hypervisor page granularity at runti=
me
>>>>
>>>> The ideal is 2) because it is more scalable for the future. We also
>>>> need to consider to extend the PV protocol so the backend and fronte=
nd
>>>> can agree on the page size.
>>> I absolutely agree, but my suggestion was to help finding a proper wa=
y
>>> to cleanup the current interface mess. And this should be done the wa=
y
>>> I suggested IMO.
>>>
>>> A later interface extension for future guests can still be done on to=
p
>>> of that.
>> Alright, let's have a little recap to see if I got it right and to agr=
ee
>> on the next steps. There are 2 proposed solutions, let's say a static
>> one and a dynamic one.
>>
>> 1) Static solution (proposed by Juergen)
>> - We define XEN_PAGE_* values in a xen/include/public/arch-*/*.h heade=
r.
>> - Q: Should we define a new header for that? page.h or page_size.h are
>> ok as new filenames?
>>
>> Pros:
>> - We fix the interfaces mess and we can get rid of xenctrl lib
>> dependency for some of the libs that need only the XEN_PAGE_* definiti=
ons.
>> - It's faster to implement, with fewer changes.
>>
>> Cons:
>> - Well, it's static, it doesn't allow the hypervisor to provide
>> different values for different guests.
>>
>>
>> 2) Dynamic solution (proposed by Jan and Julien)
>> We get the value(s) by calling a hypcall, probably as a query related =
to
>> some guest domain.
>>
>> Pros:
>> - It's dynamic and scalable. We would support different values for
>> different guests.
>>
>> Cons:
>> - More difficult to implement. It changes the paradigm in the toolstac=
k
>> libs, every occurrence of XC_PAGE_* would have to be amended. Moreover=
,
>> we might want to make the hypcall once and save the value for later
>> (probably several toolstack structures should be extended for that)
>>
>>
>> I searched for the occurrences of XC_PAGE_* in the toolstack libs and
>> it's a *lot* of them. IMHO I think we should pick the static solution
>> for now, considering that it would be faster to implement. Please let =
me
>> know if this is OK or not. Any comments are appreciated.
>=20
> The immediate problem needing fixing is the stable libraries inclusion
> of unstable headers - specifically, the inclusion of <xenctrl.h>.
>=20
> Juergen's proposal moves the existing constant to a more appropriate
> location, and specifically, a location where its value is stable.
>=20
> It does not change the ABI.=C2=A0 It merely demonstrates that the exist=
ing
> ABI is broken, and thus is absolutely a step in the right direction.
>=20
> This is the approach you should take in the short term, and needs
> sorting before 4.16 ships.
>=20
>=20
> The dynamic solution, while preferable in the longterm, is far more
> complicated than even described thus far, and is not as simple as just
> having a hypercall and using that value.
>=20
> Among other things, it requires coordination with the dom0 kernel as to
> its pagetable setup, and with Xen's choice of pagetable size for dom0,
> which may not be the same as domU's.=C2=A0 It is a large quantity of wo=
rk,
> very invasive to the existing APIs/ABIs, and stands no chance at all of
> being ready for 4.16.

Thanks for clearing this, Andrew. What is the deadline for the 4.16
release? Where can I find the release calendar?

Costin


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 09:26:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 09:26:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162414.297852 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Omh-00073L-Oa; Fri, 30 Jul 2021 09:26:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162414.297852; Fri, 30 Jul 2021 09:26:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Omh-00073D-Li; Fri, 30 Jul 2021 09:26:27 +0000
Received: by outflank-mailman (input) for mailman id 162414;
 Fri, 30 Jul 2021 09:26:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Omg-000732-V0
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:26:26 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0e670f72-53b1-4fd5-a97c-269b883146c7;
 Fri, 30 Jul 2021 09:26:26 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 35F4F22403;
 Fri, 30 Jul 2021 09:26:25 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id D541313748;
 Fri, 30 Jul 2021 09:26:24 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id G5/PMsDFA2GeIwAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 09:26:24 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0e670f72-53b1-4fd5-a97c-269b883146c7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627637185; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=KLOQ45tHzHizx5aX7vlKbtwG56MywBepSJB+3y/J3Tc=;
	b=uyzDER+QUurfThKtVP3oER06ju28BMg5KqItSY0E+H65vbfhfpNK3fN+FNbupsalv+jkdT
	XgFWGeSve/iCGZYPrH9Ut2yJUEYs3LUabKIEeTJn8FIo95mdeigRzq1ca5jS8aPtZRDwIO
	CKYPoNU7bo2W+ywawr0yXSnK6NYOYeU=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	x86@kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	stable@vger.kernel.org
Subject: [PATCH v2 0/2] xen: fix max_pfn handling for pv guests
Date: Fri, 30 Jul 2021 11:26:20 +0200
Message-Id: <20210730092622.9973-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Fix some bad naming and setting of max_pfn related variables.

Juergen Gross (2):
  xen: fix setting of max_pfn in shared_info
  xen: rename wrong named pfn related variables

 arch/x86/include/asm/xen/page.h |  4 ++--
 arch/x86/xen/p2m.c              | 33 ++++++++++++++++++---------------
 arch/x86/xen/setup.c            |  2 +-
 3 files changed, 21 insertions(+), 18 deletions(-)

-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 09:26:31 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 09:26:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162415.297864 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Omj-0007KU-0d; Fri, 30 Jul 2021 09:26:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162415.297864; Fri, 30 Jul 2021 09:26:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Omi-0007KN-Tx; Fri, 30 Jul 2021 09:26:28 +0000
Received: by outflank-mailman (input) for mailman id 162415;
 Fri, 30 Jul 2021 09:26:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Omh-000738-Fz
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:26:27 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 364d00f8-f118-11eb-988f-12813bfff9fa;
 Fri, 30 Jul 2021 09:26:26 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 87F3E2021E;
 Fri, 30 Jul 2021 09:26:25 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 3CE7313748;
 Fri, 30 Jul 2021 09:26:25 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id KNeODcHFA2GeIwAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 09:26:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 364d00f8-f118-11eb-988f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627637185; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=lW2pCPIM4lkygbLbwGLWABzG2cZ+/JhuOV4NXj3t6fM=;
	b=ds4Q914sXEHoQze6n+6web45Hx/QT2RBD7lWXXbaqKASz3CCwlhuto+m6zphSRvkdNnbVp
	P5ZTquFXRO2Jtc+H4WB6rmyh/3gFa0AdN3pdg5iL3M+fL27oMsl5rFPuJmCQ+aqoBPdN6p
	CWDFOKRcHk6eV1+KUfFmLeLHKB1XO38=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	x86@kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	stable@vger.kernel.org,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v2 1/2] xen: fix setting of max_pfn in shared_info
Date: Fri, 30 Jul 2021 11:26:21 +0200
Message-Id: <20210730092622.9973-2-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730092622.9973-1-jgross@suse.com>
References: <20210730092622.9973-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Xen PV guests are specifying the highest used PFN via the max_pfn
field in shared_info. This value is used by the Xen tools when saving
or migrating the guest.

Unfortunately this field is misnamed, as in reality it is specifying
the number of pages (including any memory holes) of the guest, so it
is the highest used PFN + 1. Renaming isn't possible, as this is a
public Xen hypervisor interface which needs to be kept stable.

The kernel will set the value correctly initially at boot time, but
when adding more pages (e.g. due to memory hotplug or ballooning) a
real PFN number is stored in max_pfn. This is done when expanding the
p2m array, and the PFN stored there is even possibly wrong, as it
should be the last possible PFN of the just added P2M frame, and not
one which led to the P2M expansion.

Fix that by setting shared_info->max_pfn to the last possible PFN + 1.

Fixes: 98dd166ea3a3c3 ("x86/xen/p2m: hint at the last populated P2M entry")
Cc: stable@vger.kernel.org
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
 arch/x86/xen/p2m.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index ac06ca32e9ef..5e6e236977c7 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -618,8 +618,8 @@ int xen_alloc_p2m_entry(unsigned long pfn)
 	}
 
 	/* Expanded the p2m? */
-	if (pfn > xen_p2m_last_pfn) {
-		xen_p2m_last_pfn = pfn;
+	if (pfn >= xen_p2m_last_pfn) {
+		xen_p2m_last_pfn = ALIGN(pfn + 1, P2M_PER_PAGE);
 		HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_last_pfn;
 	}
 
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 09:26:34 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 09:26:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162416.297877 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Omo-0007g5-9k; Fri, 30 Jul 2021 09:26:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162416.297877; Fri, 30 Jul 2021 09:26:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Omo-0007fp-6G; Fri, 30 Jul 2021 09:26:34 +0000
Received: by outflank-mailman (input) for mailman id 162416;
 Fri, 30 Jul 2021 09:26:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Omm-000738-DG
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:26:32 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 36792886-f118-11eb-988f-12813bfff9fa;
 Fri, 30 Jul 2021 09:26:26 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id D026F2240A;
 Fri, 30 Jul 2021 09:26:25 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 8EE9913748;
 Fri, 30 Jul 2021 09:26:25 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id YG2xIcHFA2GeIwAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 09:26:25 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 36792886-f118-11eb-988f-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627637185; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=3qVuz5gWClPtgxEZQpa8+8C1kUk+SDB64ahqtgECpn8=;
	b=SebqX/TBG+6Jymm7zXT/FeRAPxnYMQdDVRARBH4DcJiYOhL0X4uZAL0pQJwzRsl3s1ylp4
	Rz8+w4zHs50hoNWDj7sk/wZURGfrsc08XKmH08ku/zs+EKEscpD9gYAdivzCxCeeZQhDZF
	mVcTNcsTFKrY5hajqFS4F7RCZo/8Ajw=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	x86@kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: [PATCH v2 2/2] xen: rename wrong named pfn related variables
Date: Fri, 30 Jul 2021 11:26:22 +0200
Message-Id: <20210730092622.9973-3-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730092622.9973-1-jgross@suse.com>
References: <20210730092622.9973-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

There are some variables in Xen specific coding which names imply them
holding a PFN, while in reality they are containing numbers of PFNs.

Rename them accordingly.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- adjust comment (Jan Beulich)
---
 arch/x86/include/asm/xen/page.h |  4 ++--
 arch/x86/xen/p2m.c              | 33 ++++++++++++++++++---------------
 arch/x86/xen/setup.c            |  2 +-
 3 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
index 1a162e559753..3590d6bf42c7 100644
--- a/arch/x86/include/asm/xen/page.h
+++ b/arch/x86/include/asm/xen/page.h
@@ -51,7 +51,7 @@ extern unsigned long *machine_to_phys_mapping;
 extern unsigned long  machine_to_phys_nr;
 extern unsigned long *xen_p2m_addr;
 extern unsigned long  xen_p2m_size;
-extern unsigned long  xen_max_p2m_pfn;
+extern unsigned long  xen_p2m_max_size;
 
 extern int xen_alloc_p2m_entry(unsigned long pfn);
 
@@ -144,7 +144,7 @@ static inline unsigned long __pfn_to_mfn(unsigned long pfn)
 
 	if (pfn < xen_p2m_size)
 		mfn = xen_p2m_addr[pfn];
-	else if (unlikely(pfn < xen_max_p2m_pfn))
+	else if (unlikely(pfn < xen_p2m_max_size))
 		return get_phys_to_machine(pfn);
 	else
 		return IDENTITY_FRAME(pfn);
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index 5e6e236977c7..d75d9e077d13 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -95,8 +95,8 @@ unsigned long *xen_p2m_addr __read_mostly;
 EXPORT_SYMBOL_GPL(xen_p2m_addr);
 unsigned long xen_p2m_size __read_mostly;
 EXPORT_SYMBOL_GPL(xen_p2m_size);
-unsigned long xen_max_p2m_pfn __read_mostly;
-EXPORT_SYMBOL_GPL(xen_max_p2m_pfn);
+unsigned long xen_p2m_max_size __read_mostly;
+EXPORT_SYMBOL_GPL(xen_p2m_max_size);
 
 #ifdef CONFIG_XEN_MEMORY_HOTPLUG_LIMIT
 #define P2M_LIMIT CONFIG_XEN_MEMORY_HOTPLUG_LIMIT
@@ -120,8 +120,10 @@ static pte_t *p2m_identity_pte;
  * Used to set HYPERVISOR_shared_info->arch.max_pfn so the toolstack
  * can avoid scanning the whole P2M (which may be sized to account for
  * hotplugged memory).
+ *
+ * All populated P2M entries have an index lower than xen_p2m_pfn_limit.
  */
-static unsigned long xen_p2m_last_pfn;
+static unsigned long xen_p2m_pfn_limit;
 
 static inline unsigned p2m_top_index(unsigned long pfn)
 {
@@ -239,7 +241,7 @@ void __ref xen_build_mfn_list_list(void)
 		p2m_mid_mfn_init(p2m_mid_missing_mfn, p2m_missing);
 	}
 
-	for (pfn = 0; pfn < xen_max_p2m_pfn && pfn < MAX_P2M_PFN;
+	for (pfn = 0; pfn < xen_p2m_max_size && pfn < MAX_P2M_PFN;
 	     pfn += P2M_PER_PAGE) {
 		topidx = p2m_top_index(pfn);
 		mididx = p2m_mid_index(pfn);
@@ -284,7 +286,7 @@ void xen_setup_mfn_list_list(void)
 	else
 		HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list_list =
 			virt_to_mfn(p2m_top_mfn);
-	HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_last_pfn;
+	HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_pfn_limit;
 	HYPERVISOR_shared_info->arch.p2m_generation = 0;
 	HYPERVISOR_shared_info->arch.p2m_vaddr = (unsigned long)xen_p2m_addr;
 	HYPERVISOR_shared_info->arch.p2m_cr3 =
@@ -302,7 +304,7 @@ void __init xen_build_dynamic_phys_to_machine(void)
 	for (pfn = xen_start_info->nr_pages; pfn < xen_p2m_size; pfn++)
 		xen_p2m_addr[pfn] = INVALID_P2M_ENTRY;
 
-	xen_max_p2m_pfn = xen_p2m_size;
+	xen_p2m_max_size = xen_p2m_size;
 }
 
 #define P2M_TYPE_IDENTITY	0
@@ -353,7 +355,7 @@ static void __init xen_rebuild_p2m_list(unsigned long *p2m)
 			pfn_pte(PFN_DOWN(__pa(p2m_identity)), PAGE_KERNEL_RO));
 	}
 
-	for (pfn = 0; pfn < xen_max_p2m_pfn; pfn += chunk) {
+	for (pfn = 0; pfn < xen_p2m_max_size; pfn += chunk) {
 		/*
 		 * Try to map missing/identity PMDs or p2m-pages if possible.
 		 * We have to respect the structure of the mfn_list_list
@@ -413,21 +415,22 @@ void __init xen_vmalloc_p2m_tree(void)
 	static struct vm_struct vm;
 	unsigned long p2m_limit;
 
-	xen_p2m_last_pfn = xen_max_p2m_pfn;
+	xen_p2m_pfn_limit = xen_p2m_max_size;
 
 	p2m_limit = (phys_addr_t)P2M_LIMIT * 1024 * 1024 * 1024 / PAGE_SIZE;
 	vm.flags = VM_ALLOC;
-	vm.size = ALIGN(sizeof(unsigned long) * max(xen_max_p2m_pfn, p2m_limit),
+	vm.size = ALIGN(sizeof(unsigned long) *
+			max(xen_p2m_max_size, p2m_limit),
 			PMD_SIZE * PMDS_PER_MID_PAGE);
 	vm_area_register_early(&vm, PMD_SIZE * PMDS_PER_MID_PAGE);
 	pr_notice("p2m virtual area at %p, size is %lx\n", vm.addr, vm.size);
 
-	xen_max_p2m_pfn = vm.size / sizeof(unsigned long);
+	xen_p2m_max_size = vm.size / sizeof(unsigned long);
 
 	xen_rebuild_p2m_list(vm.addr);
 
 	xen_p2m_addr = vm.addr;
-	xen_p2m_size = xen_max_p2m_pfn;
+	xen_p2m_size = xen_p2m_max_size;
 
 	xen_inv_extra_mem();
 }
@@ -438,7 +441,7 @@ unsigned long get_phys_to_machine(unsigned long pfn)
 	unsigned int level;
 
 	if (unlikely(pfn >= xen_p2m_size)) {
-		if (pfn < xen_max_p2m_pfn)
+		if (pfn < xen_p2m_max_size)
 			return xen_chk_extra_mem(pfn);
 
 		return IDENTITY_FRAME(pfn);
@@ -618,9 +621,9 @@ int xen_alloc_p2m_entry(unsigned long pfn)
 	}
 
 	/* Expanded the p2m? */
-	if (pfn >= xen_p2m_last_pfn) {
-		xen_p2m_last_pfn = ALIGN(pfn + 1, P2M_PER_PAGE);
-		HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_last_pfn;
+	if (pfn >= xen_p2m_pfn_limit) {
+		xen_p2m_pfn_limit = ALIGN(pfn + 1, P2M_PER_PAGE);
+		HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_pfn_limit;
 	}
 
 	return 0;
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 8bfc10330107..1caddd3fa0e1 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -816,7 +816,7 @@ char * __init xen_memory_setup(void)
 				n_pfns = PFN_DOWN(addr + chunk_size) - pfn_s;
 				extra_pages -= n_pfns;
 				xen_add_extra_mem(pfn_s, n_pfns);
-				xen_max_p2m_pfn = pfn_s + n_pfns;
+				xen_p2m_max_size = pfn_s + n_pfns;
 			} else
 				discard = true;
 		}
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 09:50:44 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 09:50:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162438.297889 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PA5-0002qL-89; Fri, 30 Jul 2021 09:50:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162438.297889; Fri, 30 Jul 2021 09:50:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PA5-0002qE-4E; Fri, 30 Jul 2021 09:50:37 +0000
Received: by outflank-mailman (input) for mailman id 162438;
 Fri, 30 Jul 2021 09:50:35 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9PA3-0002q4-It
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:50:35 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9PA3-0000Rr-Hp
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:50:35 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9PA3-0003HO-Gq
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 09:50:35 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m9PA0-0005Yd-8U; Fri, 30 Jul 2021 10:50:32 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=0dvIEM61qnUMGjKKUr54lGVaetcRl+yBPRHcCtH/utY=; b=DyDPUSki4lSWquvbDgz7AIymG6
	aIo2yuWcmKFGMmpvwEDBT0BTekJvx/SV/3wBDWn7j9GIGaWYE96OMDSlv/OpCquNGcJC6evA3k9kc
	0Nj13zRo76ehvpu8puHxsIxf+bE7hSlgR2FcUURPMfhhEFXjUPFgoYqOj387nycjm4f0=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24835.52072.16195.851941@mariner.uk.xensource.com>
Date: Fri, 30 Jul 2021 10:50:32 +0100
To: Jane Malalane <jane.malalane@citrix.com>
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
    Andrew Cooper <Andrew.Cooper3@citrix.com>,
    George Dunlap <George.Dunlap@citrix.com>,
    "Jan  Beulich" <jbeulich@suse.com>,
    Julien Grall <julien@xen.org>,
    "Stefano  Stabellini" <sstabellini@kernel.org>,
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH] xen/lib: Fix strcmp() and strncmp()
In-Reply-To: <70190796-7fe2-91c3-655b-aec9914b1e5b@citrix.com>
References: <20210727184715.17699-1-jane.malalane@citrix.com>
	<24833.13489.362056.292831@mariner.uk.xensource.com>
	<70190796-7fe2-91c3-655b-aec9914b1e5b@citrix.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Jane Malalane writes ("Re: [PATCH] xen/lib: Fix strcmp() and strncmp()"):
> On 28/07/2021 11:42, Ian Jackson wrote:
>     What are the practical effects of this bug ?  AFAICT in the hypervisor
>     code all the call sites simply test for zero/nonzero.
...
>     This fix was just to make the code spec compliant and mainly for practice as I'm currently being introduced to Xen.

OK, great.  As I say it looks correct to me.  I just wanted to make
sure I wasn't missing anything.

So,

Reviewed-by: Ian Jackson <iwj@xenproject.org>

and I will queue this.

Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:04:16 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:04:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162446.297905 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PNE-0004QY-F4; Fri, 30 Jul 2021 10:04:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162446.297905; Fri, 30 Jul 2021 10:04:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PNE-0004QR-Bz; Fri, 30 Jul 2021 10:04:12 +0000
Received: by outflank-mailman (input) for mailman id 162446;
 Fri, 30 Jul 2021 10:04:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9PND-0004QL-HE
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:04:11 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9PND-0000kR-Ez
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:04:11 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9PND-0004sr-Dz
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:04:11 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m9PN8-0005dH-Oq; Fri, 30 Jul 2021 11:04:06 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=65y4krd8WIipq4r8pUv36jBMqQSBR4mXWE9+V/XRPws=; b=b3Sb/Ca0En828BKXww0lbfdxGb
	LBoVpngAPptfi1oLo7Ir2uOuE7yKCgFxC3VU3M0XlN51w815XDPiyNzNzZeodbzGtHESocwEEkHNk
	U45hL5a7NpWG4Y+mmhfSP/pjRzjJvSVhdx2jG0Lwj8xdU5BjevR3nr1vfXm6XSd91L0U=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24835.52886.559668.533509@mariner.uk.xensource.com>
Date: Fri, 30 Jul 2021 11:04:06 +0100
To: Juergen Gross <jgross@suse.com>,
    Julien Grall <julien@xen.org>
Cc: xen-devel@lists.xenproject.org,
    Julien Grall <jgrall@amazon.com>,
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH] tools/xenstored: Fix off-by-one in dump_state_nodes() [and 3 more messages]
In-Reply-To: <20210729093420.14092-1-julien@xen.org>,
	<10373f47-fa1a-59c0-7ec3-a1a86c9754ce@suse.com>,
	<20210729110602.24815-1-julien@xen.org>,
	<86b0ac1c-8a93-f08c-b227-ed000c3167f6@suse.com>
References: <20210729110602.24815-1-julien@xen.org>
	<86b0ac1c-8a93-f08c-b227-ed000c3167f6@suse.com>
	<20210729093420.14092-1-julien@xen.org>
	<10373f47-fa1a-59c0-7ec3-a1a86c9754ce@suse.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Julien Grall writes ("[PATCH] tools/xenstored: Fix off-by-one in dump_state_nodes()"):
> The maximum path length supported by Xenstored protocol is
> XENSTORE_ABS_PATH_MAX (i.e 3072). This doesn't take into account the
> NUL at the end of the path.
...

Julien Grall writes ("[PATCH] tools/xenstored: Propagate correctly the error message from lu_start()"):
> lu_start() will only set errno when it returns NULL. For all the
> other cases, the value is unknown.

Thanks, and to Juergen for the reviews.  Pushed.

Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:08:50 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:08:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162455.297916 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PRh-0005AN-4u; Fri, 30 Jul 2021 10:08:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162455.297916; Fri, 30 Jul 2021 10:08:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PRh-0005AG-22; Fri, 30 Jul 2021 10:08:49 +0000
Received: by outflank-mailman (input) for mailman id 162455;
 Fri, 30 Jul 2021 10:08:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9PRf-0005AA-Eq
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:08:47 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1fe367ca-f11e-11eb-9895-12813bfff9fa;
 Fri, 30 Jul 2021 10:08:45 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id C4CAA2232B;
 Fri, 30 Jul 2021 10:08:44 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 87A91137C2;
 Fri, 30 Jul 2021 10:08:44 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id ffXGH6zPA2H2LwAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 10:08:44 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1fe367ca-f11e-11eb-9895-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627639724; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=y9eoYKwUaNwyJ1kH2wmng6DVC36hmogi2+P+PPhIWXo=;
	b=G1t1qvYRJSqfzxBam0/V7gTVLiXchUexMhlrkC0wiSurNLNhwTcjTB61Ia46xsJ62Pq9GX
	z6gwz2Hbal+e+bp8jjlVWwhAnniR6ZSmP/KtYebtnmRJam/4fc1dNdRYj/iyTKt3mjLkwY
	BFXv51+ADhIodw2JDa5DrkzbDc4xViY=
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
To: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
From: Juergen Gross <jgross@suse.com>
Message-ID: <9ef58781-bd7d-48bc-2b59-bb71d2ba83b8@suse.com>
Date: Fri, 30 Jul 2021 12:08:43 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <20210708124345.10173-4-jgross@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="fwf22lPzo4Qvu6QvspcrGFkuoLTLZpHAg"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--fwf22lPzo4Qvu6QvspcrGFkuoLTLZpHAg
Content-Type: multipart/mixed; boundary="R9dG4AJRst60ODdYDy8EfrA61v1dVekG9";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>
Message-ID: <9ef58781-bd7d-48bc-2b59-bb71d2ba83b8@suse.com>
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
In-Reply-To: <20210708124345.10173-4-jgross@suse.com>

--R9dG4AJRst60ODdYDy8EfrA61v1dVekG9
Content-Type: multipart/mixed;
 boundary="------------C23AF8705A3C312E05994730"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------C23AF8705A3C312E05994730
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 08.07.21 14:43, Juergen Gross wrote:
> Today blkfront will trust the backend to send only sane response data.
> In order to avoid privilege escalations or crashes in case of malicious=

> backends verify the data to be within expected limits. Especially make
> sure that the response always references an outstanding request.
>=20
> Introduce a new state of the ring BLKIF_STATE_ERROR which will be
> switched to in case an inconsistency is being detected. Recovering from=

> this state is possible only via removing and adding the virtual device
> again (e.g. via a suspend/resume cycle).
>=20
> Signed-off-by: Juergen Gross <jgross@suse.com>

Any comments for this patch?


Juergen

> ---
> V2:
> - use READ_ONCE() for reading the producer index
> - check validity of producer index only after memory barrier (Jan Beuli=
ch)
> - use virt_rmb() as barrier (Jan Beulich)
> ---
>   drivers/block/xen-blkfront.c | 66 ++++++++++++++++++++++++++---------=
-
>   1 file changed, 49 insertions(+), 17 deletions(-)
>=20
> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.=
c
> index 80701860870a..ecdbb0381b4c 100644
> --- a/drivers/block/xen-blkfront.c
> +++ b/drivers/block/xen-blkfront.c
> @@ -80,6 +80,7 @@ enum blkif_state {
>   	BLKIF_STATE_DISCONNECTED,
>   	BLKIF_STATE_CONNECTED,
>   	BLKIF_STATE_SUSPENDED,
> +	BLKIF_STATE_ERROR,
>   };
>  =20
>   struct grant {
> @@ -89,6 +90,7 @@ struct grant {
>   };
>  =20
>   enum blk_req_status {
> +	REQ_PROCESSING,
>   	REQ_WAITING,
>   	REQ_DONE,
>   	REQ_ERROR,
> @@ -543,7 +545,7 @@ static unsigned long blkif_ring_get_request(struct =
blkfront_ring_info *rinfo,
>  =20
>   	id =3D get_id_from_freelist(rinfo);
>   	rinfo->shadow[id].request =3D req;
> -	rinfo->shadow[id].status =3D REQ_WAITING;
> +	rinfo->shadow[id].status =3D REQ_PROCESSING;
>   	rinfo->shadow[id].associated_id =3D NO_ASSOCIATED_ID;
>  =20
>   	rinfo->shadow[id].req.u.rw.id =3D id;
> @@ -572,6 +574,7 @@ static int blkif_queue_discard_req(struct request *=
req, struct blkfront_ring_inf
>  =20
>   	/* Copy the request to the ring page. */
>   	*final_ring_req =3D *ring_req;
> +	rinfo->shadow[id].status =3D REQ_WAITING;
>  =20
>   	return 0;
>   }
> @@ -847,8 +850,11 @@ static int blkif_queue_rw_req(struct request *req,=
 struct blkfront_ring_info *ri
>  =20
>   	/* Copy request(s) to the ring page. */
>   	*final_ring_req =3D *ring_req;
> -	if (unlikely(require_extra_req))
> +	rinfo->shadow[id].status =3D REQ_WAITING;
> +	if (unlikely(require_extra_req)) {
>   		*final_extra_ring_req =3D *extra_ring_req;
> +		rinfo->shadow[extra_id].status =3D REQ_WAITING;
> +	}
>  =20
>   	if (new_persistent_gnts)
>   		gnttab_free_grant_references(setup.gref_head);
> @@ -1402,8 +1408,8 @@ static enum blk_req_status blkif_rsp_to_req_statu=
s(int rsp)
>   static int blkif_get_final_status(enum blk_req_status s1,
>   				  enum blk_req_status s2)
>   {
> -	BUG_ON(s1 =3D=3D REQ_WAITING);
> -	BUG_ON(s2 =3D=3D REQ_WAITING);
> +	BUG_ON(s1 < REQ_DONE);
> +	BUG_ON(s2 < REQ_DONE);
>  =20
>   	if (s1 =3D=3D REQ_ERROR || s2 =3D=3D REQ_ERROR)
>   		return BLKIF_RSP_ERROR;
> @@ -1436,7 +1442,7 @@ static bool blkif_completion(unsigned long *id,
>   		s->status =3D blkif_rsp_to_req_status(bret->status);
>  =20
>   		/* Wait the second response if not yet here. */
> -		if (s2->status =3D=3D REQ_WAITING)
> +		if (s2->status < REQ_DONE)
>   			return false;
>  =20
>   		bret->status =3D blkif_get_final_status(s->status,
> @@ -1555,11 +1561,17 @@ static irqreturn_t blkif_interrupt(int irq, voi=
d *dev_id)
>  =20
>   	spin_lock_irqsave(&rinfo->ring_lock, flags);
>    again:
> -	rp =3D rinfo->ring.sring->rsp_prod;
> -	rmb(); /* Ensure we see queued responses up to 'rp'. */
> +	rp =3D READ_ONCE(rinfo->ring.sring->rsp_prod);
> +	virt_rmb(); /* Ensure we see queued responses up to 'rp'. */
> +	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
> +		pr_alert("%s: illegal number of responses %u\n",
> +			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
> +		goto err;
> +	}
>  =20
>   	for (i =3D rinfo->ring.rsp_cons; i !=3D rp; i++) {
>   		unsigned long id;
> +		unsigned int op;
>  =20
>   		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
>   		id =3D bret.id;
> @@ -1570,14 +1582,28 @@ static irqreturn_t blkif_interrupt(int irq, voi=
d *dev_id)
>   		 * look in get_id_from_freelist.
>   		 */
>   		if (id >=3D BLK_RING_SIZE(info)) {
> -			WARN(1, "%s: response to %s has incorrect id (%ld)\n",
> -			     info->gd->disk_name, op_name(bret.operation), id);
> -			/* We can't safely get the 'struct request' as
> -			 * the id is busted. */
> -			continue;
> +			pr_alert("%s: response has incorrect id (%ld)\n",
> +				 info->gd->disk_name, id);
> +			goto err;
>   		}
> +		if (rinfo->shadow[id].status !=3D REQ_WAITING) {
> +			pr_alert("%s: response references no pending request\n",
> +				 info->gd->disk_name);
> +			goto err;
> +		}
> +
> +		rinfo->shadow[id].status =3D REQ_PROCESSING;
>   		req  =3D rinfo->shadow[id].request;
>  =20
> +		op =3D rinfo->shadow[id].req.operation;
> +		if (op =3D=3D BLKIF_OP_INDIRECT)
> +			op =3D rinfo->shadow[id].req.u.indirect.indirect_op;
> +		if (bret.operation !=3D op) {
> +			pr_alert("%s: response has wrong operation (%u instead of %u)\n",
> +				 info->gd->disk_name, bret.operation, op);
> +			goto err;
> +		}
> +
>   		if (bret.operation !=3D BLKIF_OP_DISCARD) {
>   			/*
>   			 * We may need to wait for an extra response if the
> @@ -1602,7 +1628,8 @@ static irqreturn_t blkif_interrupt(int irq, void =
*dev_id)
>   		case BLKIF_OP_DISCARD:
>   			if (unlikely(bret.status =3D=3D BLKIF_RSP_EOPNOTSUPP)) {
>   				struct request_queue *rq =3D info->rq;
> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
> +
> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>   					   info->gd->disk_name, op_name(bret.operation));
>   				blkif_req(req)->error =3D BLK_STS_NOTSUPP;
>   				info->feature_discard =3D 0;
> @@ -1614,13 +1641,13 @@ static irqreturn_t blkif_interrupt(int irq, voi=
d *dev_id)
>   		case BLKIF_OP_FLUSH_DISKCACHE:
>   		case BLKIF_OP_WRITE_BARRIER:
>   			if (unlikely(bret.status =3D=3D BLKIF_RSP_EOPNOTSUPP)) {
> -				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
> +				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
>   				       info->gd->disk_name, op_name(bret.operation));
>   				blkif_req(req)->error =3D BLK_STS_NOTSUPP;
>   			}
>   			if (unlikely(bret.status =3D=3D BLKIF_RSP_ERROR &&
>   				     rinfo->shadow[id].req.u.rw.nr_segments =3D=3D 0)) {
> -				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
> +				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
>   				       info->gd->disk_name, op_name(bret.operation));
>   				blkif_req(req)->error =3D BLK_STS_NOTSUPP;
>   			}
> @@ -1635,8 +1662,8 @@ static irqreturn_t blkif_interrupt(int irq, void =
*dev_id)
>   		case BLKIF_OP_READ:
>   		case BLKIF_OP_WRITE:
>   			if (unlikely(bret.status !=3D BLKIF_RSP_OKAY))
> -				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
> -					"request: %x\n", bret.status);
> +				dev_dbg_ratelimited(&info->xbdev->dev,
> +					"Bad return from blkdev data request: %x\n", bret.status);
>  =20
>   			break;
>   		default:
> @@ -1662,6 +1689,11 @@ static irqreturn_t blkif_interrupt(int irq, void=
 *dev_id)
>   	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
>  =20
>   	return IRQ_HANDLED;
> +
> + err:
> +	info->connected =3D BLKIF_STATE_ERROR;
> +	pr_alert("%s disabled for further use\n", info->gd->disk_name);
> +	return IRQ_HANDLED;
>   }
>  =20
>  =20
>=20


--------------C23AF8705A3C312E05994730
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------C23AF8705A3C312E05994730--

--R9dG4AJRst60ODdYDy8EfrA61v1dVekG9--

--fwf22lPzo4Qvu6QvspcrGFkuoLTLZpHAg
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmEDz6sFAwAAAAAACgkQsN6d1ii/Ey+v
nwf8DSy7o0QgcyQEDIb8rZ4dRodp/bKyqqtC+iLsog5Ep9v+blpOTGXyeN+FnkYsWbugSbqorg87
kAl/Y3LMte7ui2P7F2Nwj6ACy1hLYBMujx0v/JRxjjxjiU7wx2Se1UExoOx0X2mLhp2V6ZVtjnnb
JGd1csOsimBZacftbYzRKlDNS3veBki82V50ucH3WRmg6y61tPx7i0GcqW687tNaSKlNFSOCYcKQ
rJdsRS5hjsbgsjz5M9Sc25fHVDhVC20Xkf8xbe3BKHN0L+j5ns7a5FqVx2nlT2wx4kCEm912oyeo
yxPZFGRHptOn9OQst/tus8G50WYVrayZvMvXwedn0Q==
=T4Y/
-----END PGP SIGNATURE-----

--fwf22lPzo4Qvu6QvspcrGFkuoLTLZpHAg--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:12:58 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:12:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162463.297937 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PVd-0006bU-QF; Fri, 30 Jul 2021 10:12:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162463.297937; Fri, 30 Jul 2021 10:12:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PVd-0006bN-Ms; Fri, 30 Jul 2021 10:12:53 +0000
Received: by outflank-mailman (input) for mailman id 162463;
 Fri, 30 Jul 2021 10:12:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=MJOD=MW=citrix.com=Andrew.Cooper3@srs-us1.protection.inumbo.net>)
 id 1m9PVc-0006bH-7n
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:12:52 +0000
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0651bb40-dd3f-43c4-9a4d-af705a20f7b5;
 Fri, 30 Jul 2021 10:12:50 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0651bb40-dd3f-43c4-9a4d-af705a20f7b5
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1627639970;
  h=to:cc:references:from:subject:message-id:date:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=n3kN6L8HccTp0nLUxNgV+cyd0Lcll3qfUd1v2G/Ir8I=;
  b=E+ZtBxgrSomTchC4rlHhHAqpZBwxG9xVfF/Ku/XmIo6aAVOL39S9Z+Ww
   3TtCOSDuuZk3BW3r07h2MlGWOsChlniXV+uLlJiiHkH0iwMf6eqDxO3ta
   Wym7FEGq2lFNIYjY3bDUbQ8/VOeUcXjbP9c3ly8yCdfK8FHpjKj1JIUMS
   s=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
IronPort-SDR: F/y1hQ3cvlFqfBbGo4Jcp5+dfy2GTEnGLDBSpKDmFJJJ8vu3N6d9Yvn6Px1G7BQIwSvc4ZSGw6
 D9zFD6mCS1X66BMn7VW+1t98kBAadJLKhLP2udEnU1dYEz/AxrQ+TF9iL/5vO4cseiEHCsIHEd
 YfaDlPvcFh/PqZ0mp3lZ0gc3NqxhLe9KSVy+SzZm5AorrMKJu+b0DQzbOukex+0B3Xmq6w7m6l
 cZAhZcB6KlEDtm5GfLjbbfQskHS5oAC17GOwdyOQ+X5GUkyUvyEJCzn0slvZLnpB6IFbUDc2NO
 a8bP4cg6itcS47TYOVOF14DX
X-SBRS: 5.1
X-MesageID: 51129381
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
IronPort-HdrOrdr: A9a23:fS9yKK/3LJt9MtFLnmBuk+FYdb1zdoMgy1knxilNoENuHPBwxv
 rAoB1E73PJYVYqOE3Jmbi7Sc29qADnhOBICO4qTMiftWjdyReVxeRZjLcKrAeQYBEWmtQts5
 uINpIOdeEYbmIK/voSgjPIa+rIqePvmMvD6Ja8vhUdOD2CKZsQiDuRYjzrYnGeLzM2fKbReq
 Dsg/av6wDQA0j+Oa+Adwg4tqX41pP2vaOjRSRDKw8s6QGIgz/twLnmEyKA1hNbdz9U278t/U
 XMjgS8v8yYwrGG4y6Z81WWw4VdmdPnxNcGLMuQivINIjGprgqzfoxuV5CLoThwiuCy71QBls
 XKvn4bToVOwkKUWlvwjQrm2gHm3jprw3j+yWWAiX+mmsD9TCJSMbsNuatpNj/ir2YwttB116
 xGm0iDsYBMMB/GlCPho/DVShBDjCOP0D8fuN9Wq0YafZoVabdXo4Ba1lhSCo08ECXz751iOP
 VyDfvb+O1dfTqhHjLkV1FUsZuRt0kIb1G7qhBogL3N79EWpgE786Ig/r1aop9an6hNE6Wtjo
 //Q9ZVfLIndL5dUUsyPpZbfSMbYla9CC4kC1jiVmgPIpt3cE4lm6SHlInd29vaDqDg7KFC1K
 gpA2ko+lLbRSrVeIWzNdtwg0rwfFk=
X-IronPort-AV: E=Sophos;i="5.84,281,1620705600"; 
   d="scan'208";a="51129381"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kF1yTn/Xjg8gdLhRnaCvvGS3Os8e63gaMpf96ZTppr7jMsOwo0b0KJSjYNBojVN0Rng6kjs/280IIENl98gnuAPWkGkE3iytZT03PnLSrbAdWFFNRjmweyCybNTLcLwMJPagfYsyFsecaXtYGCqeJa1ejkvW0i+fA7rUQ1ZoBdOGZBLIfX1VpQVOG5feZShnRhG3Dpaf626eiSYK8fJ+vUsFthuqWPnSql+Z+CpJUlotfalbX/ZHJlQyDeycQ1ZcTVRGYi0pRGNjKonhzP/qqOZqcBI3v/TvRuoRaeKFNYnOTYZrjJCyiMcy+D2IGDieOROR/QQfM7oEp5q7g2F3mA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YE6/4WW4sIiXbBb5N2uvrbE4CjYGV5flH4D5d8/c3KE=;
 b=AG6A8BhgAM5nJ2FZAPiB+bAJMjuU27qi25UR1x0S1lzDctxX6Icw2OAzXDCMNVLLERVKSCVnWJFoEXt9PNmLY41oMZiNpioEsunObMqo3Gp2hzPF0Xy2YV9udnoQxgBkfuLcIBHr0Ciw+2kGMXcCFPLTwmaZV461YeJNCSmkkG9JdBsvbARFdJyJ/AM1OHQFjr/X5r1iCjd+xjTQSLBLJjMhalJ5jtrWjL6eicmFlaNtTTpBJcWdDpyoIq1d4vlR1JtVtRHZI1nHoPK6hVodnAF/6XUueKaNSDMTMA0jM3QZbzR6iVwp7GvYgqPOTiac6Yin0EEPDos+eTYTmL6+tA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YE6/4WW4sIiXbBb5N2uvrbE4CjYGV5flH4D5d8/c3KE=;
 b=CmHqLpRu7hLqEC/xe3nD5Yo5AeRbBS/uv6O7w1GNfXezl3gch+xo8ZNrIM8Mh7qpjVr7A4/bQZ6keRpjps68a5+Q49X/9WoEC/+BqAQ9E3WU7Slz1iXuKmco39160HOUbZ5lYgJEUSIbQWPQPr6kc1X2tEhKcS5pnsUTTTTC84w=
To: Jane Malalane <jane.malalane@citrix.com>, Xen-devel
	<xen-devel@lists.xenproject.org>
CC: George Dunlap <george.dunlap@citrix.com>, Ian Jackson
	<iwj@xenproject.org>, Jan Beulich <jbeulich@suse.com>, Julien Grall
	<julien@xen.org>, Stefano Stabellini <sstabellini@kernel.org>, Wei Liu
	<wl@xen.org>
References: <20210727184715.17699-1-jane.malalane@citrix.com>
From: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] xen/lib: Fix strcmp() and strncmp()
Message-ID: <f5ef0640-4975-1306-0a40-d3fd7cbf52d3@citrix.com>
Date: Fri, 30 Jul 2021 11:12:18 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.12.0
In-Reply-To: <20210727184715.17699-1-jane.malalane@citrix.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-GB
X-ClientProxiedBy: LO3P265CA0003.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:600:bb::8) To BYAPR03MB3623.namprd03.prod.outlook.com
 (2603:10b6:a02:aa::12)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 03d7d498-0ae6-4b9c-b15d-08d953428716
X-MS-TrafficTypeDiagnostic: SJ0PR03MB5597:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: <SJ0PR03MB5597A5733C936FF02A86BA70BAEC9@SJ0PR03MB5597.namprd03.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: P0qkZusUtTZ+NliFjslsGUSAZt9SBlXCjITnZ7JBecvnSfYuLd2dfgqKwoCi7tU5tHv41jm/YdeyFPE7HxA8PQQUWIJ1cJOOuq6ZbUyAH1HsR1UerLHp2/HIp+7G5yhVqh7vpUa3ZZyfEhPDczn4nQrvatgnE0ULVuGk/LUvvWuy7TdqwFS9MNhUaeMH0E01FkY0AHQEoeoxq1b3g1nRd8rbZW6HhcFLHmHNCn4MCHI6XP1otiqR83xYW4MlO7cxqEvCnujf7lduJYggRUBvLBTQnVHCWyvPjZj8fkaspxmX7qn/mrlxazB2kOBV8xuuovVQxvWjbvCzFSSFqtryZIoXf84FhS8b+oQchFV4EX88pSeHJ785Oxz2YZiAYiJT39xlR8DGu4KaitXujtUX4L0wPB6xwaFoffQTMFuJxuNJIbJ/qimrWY0ccNkVsx8l37HYfpTGvdYQuqls3PQi+L6Y+XvddH5/xLzgSRicpYozP3xjjjnOI1KY/QiOaNvAQty4xFs5fKJgJYNRqd0Q4KtV1LFSV0j/d+oc7mlfl0FIkLwxBsYu0GP07ooUUWQZgOh+U8L7/Y56m3RN1+Q+rYMAfFTaC2KnKVuAtFziYECOq5Wxw56CaYu3yxExC5RIebmrBYlohbsMujcX7iU0QJ9a/wp+GjsVunDoUr8GgcFOfXM4F4lrnQLsJsmgpuPIDG5iLErTaPTpd37oUbNgaSQmLA4DdR2xkhdvd/TixKgZpv4GTgGSgQKk/trDinSG
X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR03MB3623.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(396003)(39860400002)(346002)(366004)(136003)(2906002)(2616005)(8676002)(956004)(6486002)(4326008)(36756003)(316002)(54906003)(16576012)(6666004)(86362001)(26005)(110136005)(5660300002)(4744005)(478600001)(8936002)(38100700002)(186003)(66556008)(31686004)(31696002)(53546011)(66476007)(66946007)(133343001)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 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
X-MS-Exchange-CrossTenant-Network-Message-Id: 03d7d498-0ae6-4b9c-b15d-08d953428716
X-MS-Exchange-CrossTenant-AuthSource: BYAPR03MB3623.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jul 2021 10:12:25.2192
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: mbIB9XHmKgZDl9IpcqvrPJeQjdf7uKHPm3/k2CFDt6aI2GwukI7Gv0WW3TjfsRhLeUeffWLgmHsM1mUQ5L0NOdFmbak9iX/X6dmEH4zX+Sg=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5597
X-OriginatorOrg: citrix.com

On 27/07/2021 19:47, Jane Malalane wrote:
> diff --git a/xen/lib/strcmp.c b/xen/lib/strcmp.c
> index 465f1c4191..f85c1e8741 100644
> --- a/xen/lib/strcmp.c
> +++ b/xen/lib/strcmp.c
> @@ -11,14 +11,16 @@
>   */
>  int (strcmp)(const char *cs, const char *ct)
>  {
> -	register signed char __res;
> +	unsigned char *csu =3D (unsigned char *)cs;
> +	unsigned char *ctu =3D (unsigned char *)ct;

So there was actually one final thing, but it is holiday season, hence
the lack of replies from others.

We should not be casting away const-ness on the pointers, because that
is undefined behaviour and compilers are starting to warn about it.=C2=A0
Therefore, we want something like:

const unsigned char *csu =3D (const unsigned char *)cs;

~Andrew



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:31:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:31:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162472.297949 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PnL-0000PQ-BM; Fri, 30 Jul 2021 10:31:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162472.297949; Fri, 30 Jul 2021 10:31:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9PnL-0000PJ-7m; Fri, 30 Jul 2021 10:31:11 +0000
Received: by outflank-mailman (input) for mailman id 162472;
 Fri, 30 Jul 2021 10:31:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9PnK-0000PD-9x
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:31:10 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 40a85dfa-f121-11eb-989c-12813bfff9fa;
 Fri, 30 Jul 2021 10:31:09 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 594DB20231;
 Fri, 30 Jul 2021 10:31:08 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 19C851332A;
 Fri, 30 Jul 2021 10:31:08 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id xnBmBOzUA2H3NgAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 10:31:08 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 40a85dfa-f121-11eb-989c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627641068; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 in-reply-to:in-reply-to:references:references;
	bh=vt8/YhSJKNNx9QkWGDkMDhlAmAAvXARLGQDxeBa6ufg=;
	b=gizfu+hFLkeObyDvzkVU6ex5kTDPx8ctD9GG4wgVRLDdJL5IcaTF95gJFyr3/ickHFk3s9
	hvL84jrZfgjP/o2WTlkcrzsETyYij43LLv6N/mVGmf8ZEnMjtXgeItBG3/HtaXkPXpmBx4
	HNvdEhiJRNeWXE9SO3WxQ3OE5MM+kZI=
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
 <9ef58781-bd7d-48bc-2b59-bb71d2ba83b8@suse.com>
Message-ID: <68a2de1d-e377-61b0-6c69-5391ef95dbcd@suse.com>
Date: Fri, 30 Jul 2021 12:31:07 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
 Thunderbird/78.11.0
MIME-Version: 1.0
In-Reply-To: <9ef58781-bd7d-48bc-2b59-bb71d2ba83b8@suse.com>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="oBKf4UbLa2cZL4ydTpLJ9rpN8QZRR1Tzp"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--oBKf4UbLa2cZL4ydTpLJ9rpN8QZRR1Tzp
Content-Type: multipart/mixed; boundary="Fs9fFVdDQyI76PhF6fBPzFP6Z0OPPYTbw";
 protected-headers="v1"
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org, linux-block@vger.kernel.org,
 linux-kernel@vger.kernel.org
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Jens Axboe <axboe@kernel.dk>
Message-ID: <68a2de1d-e377-61b0-6c69-5391ef95dbcd@suse.com>
Subject: Re: [PATCH v2 3/3] xen/blkfront: don't trust the backend response
 data blindly
References: <20210708124345.10173-1-jgross@suse.com>
 <20210708124345.10173-4-jgross@suse.com>
 <9ef58781-bd7d-48bc-2b59-bb71d2ba83b8@suse.com>
In-Reply-To: <9ef58781-bd7d-48bc-2b59-bb71d2ba83b8@suse.com>

--Fs9fFVdDQyI76PhF6fBPzFP6Z0OPPYTbw
Content-Type: multipart/mixed;
 boundary="------------0763F2C13F835991244788E3"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------0763F2C13F835991244788E3
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 30.07.21 12:08, Juergen Gross wrote:
> On 08.07.21 14:43, Juergen Gross wrote:
>> Today blkfront will trust the backend to send only sane response data.=

>> In order to avoid privilege escalations or crashes in case of maliciou=
s
>> backends verify the data to be within expected limits. Especially make=

>> sure that the response always references an outstanding request.
>>
>> Introduce a new state of the ring BLKIF_STATE_ERROR which will be
>> switched to in case an inconsistency is being detected. Recovering fro=
m
>> this state is possible only via removing and adding the virtual device=

>> again (e.g. via a suspend/resume cycle).
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>=20
> Any comments for this patch?

Please ignore this request for comments, I already got some.


Juergen

--------------0763F2C13F835991244788E3
Content-Type: application/pgp-keys;
 name="OpenPGP_0xB0DE9DD628BF132F.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0xB0DE9DD628BF132F.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

xsBNBFOMcBYBCACgGjqjoGvbEouQZw/ToiBg9W98AlM2QHV+iNHsEs7kxWhKMjrioyspZKOBy=
cWx
w3ie3j9uvg9EOB3aN4xiTv4qbnGiTr3oJhkB1gsb6ToJQZ8uxGq2kaV2KL9650I1SJvedYm8O=
f8Z
d621lSmoKOwlNClALZNew72NjJLEzTalU1OdT7/i1TXkH09XSSI8mEQ/ouNcMvIJNwQpd369y=
9bf
IhWUiVXEK7MlRgUG6MvIj6Y3Am/BBLUVbDa4+gmzDC9ezlZkTZG2t14zWPvxXP3FAp2pkW0xq=
G7/
377qptDmrk42GlSKN4z76ELnLxussxc7I2hx18NUcbP8+uty4bMxABEBAAHNHEp1ZXJnZW4gR=
3Jv
c3MgPGpnQHBmdXBmLm5ldD7CwHkEEwECACMFAlOMcBYCGwMHCwkIBwMCAQYVCAIJCgsEFgIDA=
QIe
AQIXgAAKCRCw3p3WKL8TL0KdB/93FcIZ3GCNwFU0u3EjNbNjmXBKDY4FUGNQH2lvWAUy+dnyT=
hpw
dtF/jQ6j9RwE8VP0+NXcYpGJDWlNb9/JmYqLiX2Q3TyevpB0CA3dbBQp0OW0fgCetToGIQrg0=
MbD
1C/sEOv8Mr4NAfbauXjZlvTj30H2jO0u+6WGM6nHwbh2l5O8ZiHkH32iaSTfN7Eu5RnNVUJbv=
oPH
Z8SlM4KWm8rG+lIkGurqqu5gu8q8ZMKdsdGC4bBxdQKDKHEFExLJK/nRPFmAuGlId1E3fe10v=
5QL
+qHI3EIPtyfE7i9Hz6rVwi7lWKgh7pe0ZvatAudZ+JNIlBKptb64FaiIOAWDCx1SzR9KdWVyZ=
2Vu
IEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+wsB5BBMBAgAjBQJTjHCvAhsDBwsJCAcDAgEGFQgCC=
QoL
BBYCAwECHgECF4AACgkQsN6d1ii/Ey/HmQf/RtI7kv5A2PS4RF7HoZhPVPogNVbC4YA6lW7Dr=
Wf0
teC0RR3MzXfy6pJ+7KLgkqMlrAbN/8Dvjoz78X+5vhH/rDLa9BuZQlhFmvcGtCF8eR0T1v0nC=
/nu
AFVGy+67q2DH8As3KPu0344TBDpAvr2uYM4tSqxK4DURx5INz4ZZ0WNFHcqsfvlGJALDeE0Lh=
ITT
d9jLzdDad1pQSToCnLl6SBJZjDOX9QQcyUigZFtCXFst4dlsvddrxyqT1f17+2cFSdu7+ynLm=
XBK
7abQ3rwJY8SbRO2iRulogc5vr/RLMMlscDAiDkaFQWLoqHHOdfO9rURssHNN8WkMnQfvUewRz=
80h
SnVlcmdlbiBHcm9zcyA8amdyb3NzQG5vdmVsbC5jb20+wsB5BBMBAgAjBQJTjHDXAhsDBwsJC=
AcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey8PUQf/ehmgCI9jB9hlgexLvgOtf7PJn=
FOX
gMLdBQgBlVPO3/D9R8LtF9DBAFPNhlrsfIG/SqICoRCqUcJ96Pn3P7UUinFG/I0ECGF4EvTE1=
jnD
kfJZr6jrbjgyoZHiw/4BNwSTL9rWASyLgqlA8u1mf+c2yUwcGhgkRAd1gOwungxcwzwqgljf0=
N51
N5JfVRHRtyfwq/ge+YEkDGcTU6Y0sPOuj4Dyfm8fJzdfHNQsWq3PnczLVELStJNdapwPOoE+l=
otu
fe3AM2vAEYJ9rTz3Cki4JFUsgLkHFqGZarrPGi1eyQcXeluldO3m91NK/1xMI3/+8jbO0tsn1=
tqS
EUGIJi7ox80eSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuZGU+wsB5BBMBAgAjBQJTjHDrA=
hsD
BwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQsN6d1ii/Ey+LhQf9GL45eU5vOowA2u5N3=
g3O
ZUEBmDHVVbqMtzwlmNC4k9Kx39r5s2vcFl4tXqW7g9/ViXYuiDXb0RfUpZiIUW89siKrkzmQ5=
dM7
wRqzgJpJwK8Bn2MIxAKArekWpiCKvBOB/Cc+3EXE78XdlxLyOi/NrmSGRIov0karw2RzMNOu5=
D+j
LRZQd1Sv27AR+IP3I8U4aqnhLpwhK7MEy9oCILlgZ1QZe49kpcumcZKORmzBTNh30FVKK1Evm=
V2x
AKDoaEOgQB4iFQLhJCdP1I5aSgM5IVFdn7v5YgEYuJYx37IoN1EblHI//x/e2AaIHpzK5h88N=
Eaw
QsaNRpNSrcfbFmAg987ATQRTjHAWAQgAyzH6AOODMBjgfWE9VeCgsrwH3exNAU32gLq2xvjpW=
nHI
s98ndPUDpnoxWQugJ6MpMncr0xSwFmHEgnSEjK/PAjppgmyc57BwKII3sV4on+gDVFJR6Y8ZR=
wgn
BC5mVM6JjQ5xDk8WRXljExRfUX9pNhdE5eBOZJrDRoLUmmjDtKzWaDhIg/+1Hzz93X4fCQkNV=
bVF
LELU9bMaLPBG/x5q4iYZ2k2ex6d47YE1ZFdMm6YBYMOljGkZKwYde5ldM9mo45mmwe0icXKLk=
pEd
IXKTZeKDO+Hdv1aqFuAcccTg9RXDQjmwhC3yEmrmcfl0+rPghO0Iv3OOImwTEe4co3c1mwARA=
QAB
wsBfBBgBAgAJBQJTjHAWAhsMAAoJELDendYovxMvQ/gH/1ha96vm4P/L+bQpJwrZ/dneZcmEw=
Tbe
8YFsw2V/Buv6Z4Mysln3nQK5ZadD534CF7TDVft7fC4tU4PONxF5D+/tvgkPfDAfF77zy2AH1=
vJz
Q1fOU8lYFpZXTXIHb+559UqvIB8AdgR3SAJGHHt4RKA0F7f5ipYBBrC6cyXJyyoprT10EMvU8=
VGi
wXvTyJz3fjoYsdFzpWPlJEBRMedCot60g5dmbdrZ5DWClAr0yau47zpWj3enf1tLWaqcsuylW=
svi
uGjKGw7KHQd3bxALOknAp4dN3QwBYCKuZ7AddY9yjynVaD5X7nF9nO5BjR/i1DG86lem3iBDX=
zXs
ZDn8R38=3D
=3D2wuH
-----END PGP PUBLIC KEY BLOCK-----

--------------0763F2C13F835991244788E3--

--Fs9fFVdDQyI76PhF6fBPzFP6Z0OPPYTbw--

--oBKf4UbLa2cZL4ydTpLJ9rpN8QZRR1Tzp
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsB5BAABCAAjFiEEhRJncuj2BJSl0Jf3sN6d1ii/Ey8FAmED1OsFAwAAAAAACgkQsN6d1ii/Ey+G
swgAiz8NuFkaQ7ElqLbx2o1dzlbpDVFXqPFBuw3v2mZOdo6M7VMFrAD4fiMXRDro8/kcPQd2Wyje
UnEKLVCtZFJc6D/m6gCNjNsVBfmPDnhM6cCFa89sHq6OGtOko2cw9oWaO1oNvMF9xCIsM54p9TBD
/Odd/NuHlfBGZs0v53SDBk3z6HQnHV1Sqsqs4YSgOwyXVDueqRhEqxyxJ6/j7toNZzqIE5pwedt/
3nwwdsebV+RuSEa11CowAEQzFkyDRzKyApFApB4ja5OfXWpRC0mkIOF9mIryjdKQzMcE05Q90SVe
ND43fFGM4O2Ruhyu2UpoxpGM5Vk8sk+XycRffVPeFQ==
=w04J
-----END PGP SIGNATURE-----

--oBKf4UbLa2cZL4ydTpLJ9rpN8QZRR1Tzp--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:39:04 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:39:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162481.297967 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Puv-0001ER-Kg; Fri, 30 Jul 2021 10:39:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162481.297967; Fri, 30 Jul 2021 10:39:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Puv-0001D6-Dn; Fri, 30 Jul 2021 10:39:01 +0000
Received: by outflank-mailman (input) for mailman id 162481;
 Fri, 30 Jul 2021 10:38:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Put-0001Ad-MV
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:38:59 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id da803bd9-b066-4d9b-a1f8-7503904a5116;
 Fri, 30 Jul 2021 10:38:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id D295A20232;
 Fri, 30 Jul 2021 10:38:57 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 8F465137DF;
 Fri, 30 Jul 2021 10:38:57 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id EBrIIcHWA2HPOAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 10:38:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: da803bd9-b066-4d9b-a1f8-7503904a5116
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627641537; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=W95cbauG07UE5MXy/pX7569F2n6zVdQ3MffM9g12IwM=;
	b=LomOsk913X41D6qB6XhpN71WDo5ikRSfS7EGiNTAyCwrhlOWUpLbYu1pAByNIXE5D6PlPE
	dF43zwmH0cjHh6uNnxT+1pHauIuf1f/5f1wvFKHV90qN/p79VFKGE3gABKt9uuWeBLnDtm
	G6qQiospr4xgQvQSZOwAsedHKB4OyhE=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v3 1/3] xen/blkfront: read response from backend only once
Date: Fri, 30 Jul 2021 12:38:52 +0200
Message-Id: <20210730103854.12681-2-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730103854.12681-1-jgross@suse.com>
References: <20210730103854.12681-1-jgross@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

In order to avoid problems in case the backend is modifying a response
on the ring page while the frontend has already seen it, just read the
response into a local buffer in one go and then operate on that buffer
only.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
---
 drivers/block/xen-blkfront.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index d83fee21f6c5..15e840287734 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1496,7 +1496,7 @@ static bool blkif_completion(unsigned long *id,
 static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 {
 	struct request *req;
-	struct blkif_response *bret;
+	struct blkif_response bret;
 	RING_IDX i, rp;
 	unsigned long flags;
 	struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id;
@@ -1513,8 +1513,9 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 	for (i = rinfo->ring.rsp_cons; i != rp; i++) {
 		unsigned long id;
 
-		bret = RING_GET_RESPONSE(&rinfo->ring, i);
-		id   = bret->id;
+		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
+		id = bret.id;
+
 		/*
 		 * The backend has messed up and given us an id that we would
 		 * never have given to it (we stamp it up to BLK_RING_SIZE -
@@ -1522,39 +1523,39 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		 */
 		if (id >= BLK_RING_SIZE(info)) {
 			WARN(1, "%s: response to %s has incorrect id (%ld)\n",
-			     info->gd->disk_name, op_name(bret->operation), id);
+			     info->gd->disk_name, op_name(bret.operation), id);
 			/* We can't safely get the 'struct request' as
 			 * the id is busted. */
 			continue;
 		}
 		req  = rinfo->shadow[id].request;
 
-		if (bret->operation != BLKIF_OP_DISCARD) {
+		if (bret.operation != BLKIF_OP_DISCARD) {
 			/*
 			 * We may need to wait for an extra response if the
 			 * I/O request is split in 2
 			 */
-			if (!blkif_completion(&id, rinfo, bret))
+			if (!blkif_completion(&id, rinfo, &bret))
 				continue;
 		}
 
 		if (add_id_to_freelist(rinfo, id)) {
 			WARN(1, "%s: response to %s (id %ld) couldn't be recycled!\n",
-			     info->gd->disk_name, op_name(bret->operation), id);
+			     info->gd->disk_name, op_name(bret.operation), id);
 			continue;
 		}
 
-		if (bret->status == BLKIF_RSP_OKAY)
+		if (bret.status == BLKIF_RSP_OKAY)
 			blkif_req(req)->error = BLK_STS_OK;
 		else
 			blkif_req(req)->error = BLK_STS_IOERR;
 
-		switch (bret->operation) {
+		switch (bret.operation) {
 		case BLKIF_OP_DISCARD:
-			if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) {
+			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
 				struct request_queue *rq = info->rq;
 				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
-					   info->gd->disk_name, op_name(bret->operation));
+					   info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 				info->feature_discard = 0;
 				info->feature_secdiscard = 0;
@@ -1564,15 +1565,15 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 			break;
 		case BLKIF_OP_FLUSH_DISKCACHE:
 		case BLKIF_OP_WRITE_BARRIER:
-			if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) {
+			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
 				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
-				       info->gd->disk_name, op_name(bret->operation));
+				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
-			if (unlikely(bret->status == BLKIF_RSP_ERROR &&
+			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
 				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
 				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
-				       info->gd->disk_name, op_name(bret->operation));
+				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
 			if (unlikely(blkif_req(req)->error)) {
@@ -1585,9 +1586,9 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 			fallthrough;
 		case BLKIF_OP_READ:
 		case BLKIF_OP_WRITE:
-			if (unlikely(bret->status != BLKIF_RSP_OKAY))
+			if (unlikely(bret.status != BLKIF_RSP_OKAY))
 				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
-					"request: %x\n", bret->status);
+					"request: %x\n", bret.status);
 
 			break;
 		default:
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:39:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:39:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162480.297961 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Puv-0001Av-9W; Fri, 30 Jul 2021 10:39:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162480.297961; Fri, 30 Jul 2021 10:39:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Puv-0001Ao-6Z; Fri, 30 Jul 2021 10:39:01 +0000
Received: by outflank-mailman (input) for mailman id 162480;
 Fri, 30 Jul 2021 10:38:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Put-0001Ac-I6
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:38:59 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 58642a04-f122-11eb-989c-12813bfff9fa;
 Fri, 30 Jul 2021 10:38:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 8AEE222303;
 Fri, 30 Jul 2021 10:38:57 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 49C9F1332A;
 Fri, 30 Jul 2021 10:38:57 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id OkDREMHWA2HPOAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 10:38:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 58642a04-f122-11eb-989c-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627641537; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=IL3gKsLKu1Htgmjw2itJagsBsJXMj/k7+BJ8VjbP5yU=;
	b=UKueawrOS2soO7K5pdL84trOzFfkOx0Hcp7NKWCsWTWCXtEKXzHJUi7DJrvBTN1ejjqWNO
	MJCgQuOWOyBbWgaCOmwkBxXGdb3HYvi+gOep54ehKXUvMzjAoY1RA4oCDnuibim2K0x9/m
	9XvQ099RvClbgfflBomn/U9sfezMyyw=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Jens Axboe <axboe@kernel.dk>
Subject: [PATCH v3 0/3] xen: harden blkfront against malicious backends
Date: Fri, 30 Jul 2021 12:38:51 +0200
Message-Id: <20210730103854.12681-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Xen backends of para-virtualized devices can live in dom0 kernel, dom0
user land, or in a driver domain. This means that a backend might
reside in a less trusted environment than the Xen core components, so
a backend should not be able to do harm to a Xen guest (it can still
mess up I/O data, but it shouldn't be able to e.g. crash a guest by
other means or cause a privilege escalation in the guest).

Unfortunately blkfront in the Linux kernel is fully trusting its
backend. This series is fixing blkfront in this regard.

It was discussed to handle this as a security problem, but the topic
was discussed in public before, so it isn't a real secret.

It should be mentioned that a similar series has been posted some years
ago by Marek Marczykowski-Górecki, but this series has not been applied
due to a Xen header not having been available in the Xen git repo at
that time. Additionally my series is fixing some more DoS cases.

Changes in V3:
- patch 3: insert missing unlock in error case (kernel test robot)
- patch 3: use %#x as format for printing wrong operation value
  (Roger Pau Monné)

Changes in V2:
- put blkfront patches into own series
- some minor comments addressed

Juergen Gross (3):
  xen/blkfront: read response from backend only once
  xen/blkfront: don't take local copy of a request from the ring page
  xen/blkfront: don't trust the backend response data blindly

 drivers/block/xen-blkfront.c | 126 +++++++++++++++++++++++------------
 1 file changed, 84 insertions(+), 42 deletions(-)

-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:39:05 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:39:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162482.297985 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Puz-0001kP-Q5; Fri, 30 Jul 2021 10:39:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162482.297985; Fri, 30 Jul 2021 10:39:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Puz-0001kG-M0; Fri, 30 Jul 2021 10:39:05 +0000
Received: by outflank-mailman (input) for mailman id 162482;
 Fri, 30 Jul 2021 10:39:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Puy-0001Ad-Ge
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:39:04 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7e985b1b-1a0e-4c13-a8ff-559a7636a8ed;
 Fri, 30 Jul 2021 10:38:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 26DEE2023C;
 Fri, 30 Jul 2021 10:38:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id DAA311332A;
 Fri, 30 Jul 2021 10:38:57 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id OP02NMHWA2HPOAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 10:38:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7e985b1b-1a0e-4c13-a8ff-559a7636a8ed
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627641538; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=NJFbCEIB5unsCxTI9pTYyzdTqeYA436YedIZJDFJOiE=;
	b=ceDdu7MD7a3kOPaxwK5kf4oBVvKBjVLEOTHq0/FpCqmy8vc/UB+LEp1hrq+roD/GfkWwwo
	a33oMSAtQk66z6M9rXDiTEOpZ5wXyHjvIJiu9hLh9V5hqgXW+FPu7QVsbSijXz3S3kVjcE
	tHQ5X5RShOX+nbFjY+JkSDbKBIdhuVs=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Jens Axboe <axboe@kernel.dk>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v3 2/3] xen/blkfront: don't take local copy of a request from the ring page
Date: Fri, 30 Jul 2021 12:38:53 +0200
Message-Id: <20210730103854.12681-3-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730103854.12681-1-jgross@suse.com>
References: <20210730103854.12681-1-jgross@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

In order to avoid a malicious backend being able to influence the local
copy of a request build the request locally first and then copy it to
the ring page instead of doing it the other way round as today.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
---
V2:
- init variable to avoid potential compiler warning (Jan Beulich)
---
 drivers/block/xen-blkfront.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 15e840287734..b7301006fb28 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -533,7 +533,7 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
 	rinfo->shadow[id].status = REQ_WAITING;
 	rinfo->shadow[id].associated_id = NO_ASSOCIATED_ID;
 
-	(*ring_req)->u.rw.id = id;
+	rinfo->shadow[id].req.u.rw.id = id;
 
 	return id;
 }
@@ -541,11 +541,12 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
 static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_info *rinfo)
 {
 	struct blkfront_info *info = rinfo->dev_info;
-	struct blkif_request *ring_req;
+	struct blkif_request *ring_req, *final_ring_req;
 	unsigned long id;
 
 	/* Fill out a communications ring structure. */
-	id = blkif_ring_get_request(rinfo, req, &ring_req);
+	id = blkif_ring_get_request(rinfo, req, &final_ring_req);
+	ring_req = &rinfo->shadow[id].req;
 
 	ring_req->operation = BLKIF_OP_DISCARD;
 	ring_req->u.discard.nr_sectors = blk_rq_sectors(req);
@@ -556,8 +557,8 @@ static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_inf
 	else
 		ring_req->u.discard.flag = 0;
 
-	/* Keep a private copy so we can reissue requests when recovering. */
-	rinfo->shadow[id].req = *ring_req;
+	/* Copy the request to the ring page. */
+	*final_ring_req = *ring_req;
 
 	return 0;
 }
@@ -690,6 +691,7 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 {
 	struct blkfront_info *info = rinfo->dev_info;
 	struct blkif_request *ring_req, *extra_ring_req = NULL;
+	struct blkif_request *final_ring_req, *final_extra_ring_req = NULL;
 	unsigned long id, extra_id = NO_ASSOCIATED_ID;
 	bool require_extra_req = false;
 	int i;
@@ -734,7 +736,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 	}
 
 	/* Fill out a communications ring structure. */
-	id = blkif_ring_get_request(rinfo, req, &ring_req);
+	id = blkif_ring_get_request(rinfo, req, &final_ring_req);
+	ring_req = &rinfo->shadow[id].req;
 
 	num_sg = blk_rq_map_sg(req->q, req, rinfo->shadow[id].sg);
 	num_grant = 0;
@@ -785,7 +788,9 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 		ring_req->u.rw.nr_segments = num_grant;
 		if (unlikely(require_extra_req)) {
 			extra_id = blkif_ring_get_request(rinfo, req,
-							  &extra_ring_req);
+							  &final_extra_ring_req);
+			extra_ring_req = &rinfo->shadow[extra_id].req;
+
 			/*
 			 * Only the first request contains the scatter-gather
 			 * list.
@@ -827,10 +832,10 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 	if (setup.segments)
 		kunmap_atomic(setup.segments);
 
-	/* Keep a private copy so we can reissue requests when recovering. */
-	rinfo->shadow[id].req = *ring_req;
+	/* Copy request(s) to the ring page. */
+	*final_ring_req = *ring_req;
 	if (unlikely(require_extra_req))
-		rinfo->shadow[extra_id].req = *extra_ring_req;
+		*final_extra_ring_req = *extra_ring_req;
 
 	if (new_persistent_gnts)
 		gnttab_free_grant_references(setup.gref_head);
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 10:39:10 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 10:39:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162483.297997 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Pv4-00026i-2B; Fri, 30 Jul 2021 10:39:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162483.297997; Fri, 30 Jul 2021 10:39:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Pv3-00026R-Ui; Fri, 30 Jul 2021 10:39:09 +0000
Received: by outflank-mailman (input) for mailman id 162483;
 Fri, 30 Jul 2021 10:39:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9Pv3-0001Ad-Gq
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 10:39:09 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5d62a461-a87f-4f1e-819b-1e5483746a06;
 Fri, 30 Jul 2021 10:38:59 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 6F3022023D;
 Fri, 30 Jul 2021 10:38:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 2D5FD1332A;
 Fri, 30 Jul 2021 10:38:58 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id 6AjYCcLWA2HPOAAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 10:38:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5d62a461-a87f-4f1e-819b-1e5483746a06
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627641538; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=+yk7C8XRN2fIh670/73vqQyiIZ1x9I99FnGeBbbYCUI=;
	b=YdbXQ+TvsejiGokMGIY3XRLypWMdg5HqcUqR2udNjVWpsjgMdQXGAa8N1OcFyE8/1mZ0LD
	Z3Ve2Exlt1HhJgK0S3FOTpzAL4358AryeUc1WM7EXXL6k2sw7r9q5FdSu1VeJG3mJIIp3x
	F47TRfxFsZSEY3Fs025IDAoIgdrrbBM=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org,
	linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: Juergen Gross <jgross@suse.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	=?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Jens Axboe <axboe@kernel.dk>,
	Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v3 3/3] xen/blkfront: don't trust the backend response data blindly
Date: Fri, 30 Jul 2021 12:38:54 +0200
Message-Id: <20210730103854.12681-4-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730103854.12681-1-jgross@suse.com>
References: <20210730103854.12681-1-jgross@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Today blkfront will trust the backend to send only sane response data.
In order to avoid privilege escalations or crashes in case of malicious
backends verify the data to be within expected limits. Especially make
sure that the response always references an outstanding request.

Introduce a new state of the ring BLKIF_STATE_ERROR which will be
switched to in case an inconsistency is being detected. Recovering from
this state is possible only via removing and adding the virtual device
again (e.g. via a suspend/resume cycle).

Make all warning messages issued due to valid error responses rate
limited in order to avoid message floods being triggered by a malicious
backend.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
---
V2:
- use READ_ONCE() for reading the producer index
- check validity of producer index only after memory barrier (Jan Beulich)
- use virt_rmb() as barrier (Jan Beulich)
V3:
- insert missing unlock in error case (kernel test robot)
- use %#x as format for printing wrong operation value (Roger Pau Monné)
---
 drivers/block/xen-blkfront.c | 70 +++++++++++++++++++++++++++---------
 1 file changed, 53 insertions(+), 17 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index b7301006fb28..7a5e62fae171 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -80,6 +80,7 @@ enum blkif_state {
 	BLKIF_STATE_DISCONNECTED,
 	BLKIF_STATE_CONNECTED,
 	BLKIF_STATE_SUSPENDED,
+	BLKIF_STATE_ERROR,
 };
 
 struct grant {
@@ -89,6 +90,7 @@ struct grant {
 };
 
 enum blk_req_status {
+	REQ_PROCESSING,
 	REQ_WAITING,
 	REQ_DONE,
 	REQ_ERROR,
@@ -530,7 +532,7 @@ static unsigned long blkif_ring_get_request(struct blkfront_ring_info *rinfo,
 
 	id = get_id_from_freelist(rinfo);
 	rinfo->shadow[id].request = req;
-	rinfo->shadow[id].status = REQ_WAITING;
+	rinfo->shadow[id].status = REQ_PROCESSING;
 	rinfo->shadow[id].associated_id = NO_ASSOCIATED_ID;
 
 	rinfo->shadow[id].req.u.rw.id = id;
@@ -559,6 +561,7 @@ static int blkif_queue_discard_req(struct request *req, struct blkfront_ring_inf
 
 	/* Copy the request to the ring page. */
 	*final_ring_req = *ring_req;
+	rinfo->shadow[id].status = REQ_WAITING;
 
 	return 0;
 }
@@ -834,8 +837,11 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri
 
 	/* Copy request(s) to the ring page. */
 	*final_ring_req = *ring_req;
-	if (unlikely(require_extra_req))
+	rinfo->shadow[id].status = REQ_WAITING;
+	if (unlikely(require_extra_req)) {
 		*final_extra_ring_req = *extra_ring_req;
+		rinfo->shadow[extra_id].status = REQ_WAITING;
+	}
 
 	if (new_persistent_gnts)
 		gnttab_free_grant_references(setup.gref_head);
@@ -1359,8 +1365,8 @@ static enum blk_req_status blkif_rsp_to_req_status(int rsp)
 static int blkif_get_final_status(enum blk_req_status s1,
 				  enum blk_req_status s2)
 {
-	BUG_ON(s1 == REQ_WAITING);
-	BUG_ON(s2 == REQ_WAITING);
+	BUG_ON(s1 < REQ_DONE);
+	BUG_ON(s2 < REQ_DONE);
 
 	if (s1 == REQ_ERROR || s2 == REQ_ERROR)
 		return BLKIF_RSP_ERROR;
@@ -1393,7 +1399,7 @@ static bool blkif_completion(unsigned long *id,
 		s->status = blkif_rsp_to_req_status(bret->status);
 
 		/* Wait the second response if not yet here. */
-		if (s2->status == REQ_WAITING)
+		if (s2->status < REQ_DONE)
 			return false;
 
 		bret->status = blkif_get_final_status(s->status,
@@ -1512,11 +1518,17 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 
 	spin_lock_irqsave(&rinfo->ring_lock, flags);
  again:
-	rp = rinfo->ring.sring->rsp_prod;
-	rmb(); /* Ensure we see queued responses up to 'rp'. */
+	rp = READ_ONCE(rinfo->ring.sring->rsp_prod);
+	virt_rmb(); /* Ensure we see queued responses up to 'rp'. */
+	if (RING_RESPONSE_PROD_OVERFLOW(&rinfo->ring, rp)) {
+		pr_alert("%s: illegal number of responses %u\n",
+			 info->gd->disk_name, rp - rinfo->ring.rsp_cons);
+		goto err;
+	}
 
 	for (i = rinfo->ring.rsp_cons; i != rp; i++) {
 		unsigned long id;
+		unsigned int op;
 
 		RING_COPY_RESPONSE(&rinfo->ring, i, &bret);
 		id = bret.id;
@@ -1527,14 +1539,28 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		 * look in get_id_from_freelist.
 		 */
 		if (id >= BLK_RING_SIZE(info)) {
-			WARN(1, "%s: response to %s has incorrect id (%ld)\n",
-			     info->gd->disk_name, op_name(bret.operation), id);
-			/* We can't safely get the 'struct request' as
-			 * the id is busted. */
-			continue;
+			pr_alert("%s: response has incorrect id (%ld)\n",
+				 info->gd->disk_name, id);
+			goto err;
+		}
+		if (rinfo->shadow[id].status != REQ_WAITING) {
+			pr_alert("%s: response references no pending request\n",
+				 info->gd->disk_name);
+			goto err;
 		}
+
+		rinfo->shadow[id].status = REQ_PROCESSING;
 		req  = rinfo->shadow[id].request;
 
+		op = rinfo->shadow[id].req.operation;
+		if (op == BLKIF_OP_INDIRECT)
+			op = rinfo->shadow[id].req.u.indirect.indirect_op;
+		if (bret.operation != op) {
+			pr_alert("%s: response has wrong operation (%u instead of %u)\n",
+				 info->gd->disk_name, bret.operation, op);
+			goto err;
+		}
+
 		if (bret.operation != BLKIF_OP_DISCARD) {
 			/*
 			 * We may need to wait for an extra response if the
@@ -1559,7 +1585,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		case BLKIF_OP_DISCARD:
 			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
 				struct request_queue *rq = info->rq;
-				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
+
+				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
 					   info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 				info->feature_discard = 0;
@@ -1571,13 +1598,13 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		case BLKIF_OP_FLUSH_DISKCACHE:
 		case BLKIF_OP_WRITE_BARRIER:
 			if (unlikely(bret.status == BLKIF_RSP_EOPNOTSUPP)) {
-				printk(KERN_WARNING "blkfront: %s: %s op failed\n",
+				pr_warn_ratelimited("blkfront: %s: %s op failed\n",
 				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
 			if (unlikely(bret.status == BLKIF_RSP_ERROR &&
 				     rinfo->shadow[id].req.u.rw.nr_segments == 0)) {
-				printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
+				pr_warn_ratelimited("blkfront: %s: empty %s op failed\n",
 				       info->gd->disk_name, op_name(bret.operation));
 				blkif_req(req)->error = BLK_STS_NOTSUPP;
 			}
@@ -1592,8 +1619,9 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 		case BLKIF_OP_READ:
 		case BLKIF_OP_WRITE:
 			if (unlikely(bret.status != BLKIF_RSP_OKAY))
-				dev_dbg(&info->xbdev->dev, "Bad return from blkdev data "
-					"request: %x\n", bret.status);
+				dev_dbg_ratelimited(&info->xbdev->dev,
+					"Bad return from blkdev data request: %#x\n",
+					bret.status);
 
 			break;
 		default:
@@ -1619,6 +1647,14 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
 	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
 
 	return IRQ_HANDLED;
+
+ err:
+	info->connected = BLKIF_STATE_ERROR;
+
+	spin_unlock_irqrestore(&rinfo->ring_lock, flags);
+
+	pr_alert("%s disabled for further use\n", info->gd->disk_name);
+	return IRQ_HANDLED;
 }
 
 
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 12:27:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 12:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162517.298027 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9RbT-0004g1-IZ; Fri, 30 Jul 2021 12:27:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162517.298027; Fri, 30 Jul 2021 12:27:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9RbT-0004fu-FQ; Fri, 30 Jul 2021 12:27:03 +0000
Received: by outflank-mailman (input) for mailman id 162517;
 Fri, 30 Jul 2021 12:27:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9RbR-0004PY-C1
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 12:27:01 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6f6e3d8e-f131-11eb-98a9-12813bfff9fa;
 Fri, 30 Jul 2021 12:26:59 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id CC4512233F;
 Fri, 30 Jul 2021 12:26:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id A45B4137F9;
 Fri, 30 Jul 2021 12:26:58 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id kDLaJhLwA2FOVgAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 12:26:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6f6e3d8e-f131-11eb-98a9-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627648018; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=aVgd7I4DSuetcgd/27P69oOnpKyUEJbbUJKDnpuahN4=;
	b=i6Je2YxDCN0NlWmH4d5F/fOp5+FORTrNZWQMvEhT+aUPXWHYIKZlvYaLQMFfYKWKrWh1UI
	e/ZCDiVBuPF9GgO78bnrLroXVXM3g1N5lgjTUaDGqPO/soc0y93/uCSWaJR5jRFs1OmmKq
	ojE83M/GRr85xO4Q8AcVsmHXD4xU9Xc=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v3 2/2] tools/xenstore: set open file descriptor limit for xenstored
Date: Fri, 30 Jul 2021 14:26:43 +0200
Message-Id: <20210730122643.2043-3-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730122643.2043-1-jgross@suse.com>
References: <20210730122643.2043-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Add a configuration item for the maximum number of domains xenstored
should support and set the limit of open file descriptors accordingly.

For HVM domains there are up to 5 socket connections per domain (2 by
the xl daemon process, and 3 by qemu). So set the ulimit for xenstored
to 5 * XENSTORED_MAX_DOMAINS + 100 (the "+ 100" is for some headroom,
like logging, event channel device, etc.).

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- set ulimit form launch script (Julien Grall)
- split off from original patch (Julien Grall)
---
 tools/hotplug/Linux/init.d/sysconfig.xencommons.in | 7 +++++++
 tools/hotplug/Linux/launch-xenstore.in             | 3 +++
 2 files changed, 10 insertions(+)

diff --git a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
index 5ad4fe0818..2b682415f4 100644
--- a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
+++ b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
@@ -32,6 +32,13 @@
 # Changing this requires a reboot to take effect.
 #XENSTORED=@XENSTORED@
 
+## Type: integer
+## Default: 32768
+#
+# Select maximum number of domains supported by xenstored.
+# Only evaluated if XENSTORETYPE is "daemon".
+#XENSTORED_MAX_N_DOMAINS=32768
+
 ## Type: string
 ## Default: ""
 #
diff --git a/tools/hotplug/Linux/launch-xenstore.in b/tools/hotplug/Linux/launch-xenstore.in
index 1747c96065..3f8b33dd32 100644
--- a/tools/hotplug/Linux/launch-xenstore.in
+++ b/tools/hotplug/Linux/launch-xenstore.in
@@ -54,6 +54,7 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 
 [ "$XENSTORETYPE" = "daemon" ] && {
 	[ -z "$XENSTORED_TRACE" ] || XENSTORED_ARGS="$XENSTORED_ARGS -T @XEN_LOG_DIR@/xenstored-trace.log"
+	[ -z "$XENSTORED_MAX_N_DOMAINS" ] && XENSTORED_MAX_N_DOMAINS=32768
 	[ -z "$XENSTORED" ] && XENSTORED=@XENSTORED@
 	[ -x "$XENSTORED" ] || {
 		echo "No xenstored found"
@@ -63,6 +64,7 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 	XS_OOM_SCORE=-$(($XENSTORED_OOM_MEM_THRESHOLD * 10))
 
 	rm -f @XEN_RUN_DIR@/xenstored.pid
+	N_FILES=$(($XENSTORED_MAX_N_DOMAINS * 5 + 100))
 
 	echo -n Starting $XENSTORED...
 	$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
@@ -70,6 +72,7 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 	systemd-notify --booted 2>/dev/null || timeout_xenstore $XENSTORED || exit 1
 	XS_PID=`cat @XEN_RUN_DIR@/xenstored.pid`
 	echo $XS_OOM_SCORE >/proc/$XS_PID/oom_score_adj
+	prlimit --pid $XS_PID --nofile=$N_FILES
 
 	exit 0
 }
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 12:27:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 12:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162516.298014 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9RbS-0004Pl-AG; Fri, 30 Jul 2021 12:27:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162516.298014; Fri, 30 Jul 2021 12:27:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9RbS-0004Pe-7F; Fri, 30 Jul 2021 12:27:02 +0000
Received: by outflank-mailman (input) for mailman id 162516;
 Fri, 30 Jul 2021 12:27:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9RbQ-0004PS-A6
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 12:27:00 +0000
Received: from smtp-out1.suse.de (unknown [195.135.220.28])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2157da37-5f3a-42a3-a71f-ebcc43af65db;
 Fri, 30 Jul 2021 12:26:59 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out1.suse.de (Postfix) with ESMTPS id 9DC05222E3;
 Fri, 30 Jul 2021 12:26:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 701DC137FD;
 Fri, 30 Jul 2021 12:26:58 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id wK0nGhLwA2FOVgAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 12:26:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 2157da37-5f3a-42a3-a71f-ebcc43af65db
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627648018; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:
	 content-transfer-encoding:content-transfer-encoding:
	 in-reply-to:in-reply-to:references:references;
	bh=STW5H69fSsC13fe3Jx/wYhcL86JL/EDIbDX/LWOUm7g=;
	b=Sz7QOrKjl7GYHTYcZ1GmQTkGmt99HIvgUfohUD9TlfBIkxgx9KB5kdVhoqRtssHmGyh72X
	EMZs87M8SsE3MQ4i4nmW34ipSHm1QzWHbpOEFAyfMVxTodG2rxJupGKsdSrVlHB2c16Ne8
	0Qcipzn0ZUowchx3AWS+OojHVkhkFcA=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v3 1/2] tools/xenstore: set oom score for xenstore daemon on Linux
Date: Fri, 30 Jul 2021 14:26:42 +0200
Message-Id: <20210730122643.2043-2-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
In-Reply-To: <20210730122643.2043-1-jgross@suse.com>
References: <20210730122643.2043-1-jgross@suse.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Xenstored is absolutely mandatory for a Xen host and it can't be
restarted, so being killed by OOM-killer in case of memory shortage is
to be avoided.

Set /proc/$pid/oom_score_adj (if available) per default to -500 (this
translates to 50% of dom0 memory size) in order to allow xenstored to
use large amounts of memory without being killed.

The percentage of dom0 memory above which the oom killer is allowed to
kill xenstored can be set via XENSTORED_OOM_MEM_THRESHOLD in
xencommons.

Make sure the pid file isn't a left-over from a previous run delete it
before starting xenstored.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- set oom score from launch script (Julien Grall)
- split off open file descriptor limit setting (Julien Grall)
V3:
- make oom killer threshold configurable (Julien Grall)
---
 tools/hotplug/Linux/init.d/sysconfig.xencommons.in | 7 +++++++
 tools/hotplug/Linux/launch-xenstore.in             | 6 ++++++
 2 files changed, 13 insertions(+)

diff --git a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
index 00cf7f91d4..5ad4fe0818 100644
--- a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
+++ b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
@@ -48,6 +48,13 @@ XENSTORED_ARGS=
 # Only evaluated if XENSTORETYPE is "daemon".
 #XENSTORED_TRACE=[yes|on|1]
 
+## Type: integer
+## Default: 50
+#
+# Percentage of dom0 memory size the xenstore daemon can use before the
+# OOM killer is allowed to kill it.
+#XENSTORED_OOM_MEM_THRESHOLD=50
+
 ## Type: string
 ## Default: @LIBEXEC@/boot/xenstore-stubdom.gz
 #
diff --git a/tools/hotplug/Linux/launch-xenstore.in b/tools/hotplug/Linux/launch-xenstore.in
index 019f9d6f4d..1747c96065 100644
--- a/tools/hotplug/Linux/launch-xenstore.in
+++ b/tools/hotplug/Linux/launch-xenstore.in
@@ -59,11 +59,17 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . @CONFIG_DIR@/@CONFIG_LEAF
 		echo "No xenstored found"
 		exit 1
 	}
+	[ -z "$XENSTORED_OOM_MEM_THRESHOLD" ] || XENSTORED_OOM_MEM_THRESHOLD=50
+	XS_OOM_SCORE=-$(($XENSTORED_OOM_MEM_THRESHOLD * 10))
+
+	rm -f @XEN_RUN_DIR@/xenstored.pid
 
 	echo -n Starting $XENSTORED...
 	$XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
 
 	systemd-notify --booted 2>/dev/null || timeout_xenstore $XENSTORED || exit 1
+	XS_PID=`cat @XEN_RUN_DIR@/xenstored.pid`
+	echo $XS_OOM_SCORE >/proc/$XS_PID/oom_score_adj
 
 	exit 0
 }
-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 12:27:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 12:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162518.298039 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9RbV-0004xG-S5; Fri, 30 Jul 2021 12:27:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162518.298039; Fri, 30 Jul 2021 12:27:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9RbV-0004x8-OF; Fri, 30 Jul 2021 12:27:05 +0000
Received: by outflank-mailman (input) for mailman id 162518;
 Fri, 30 Jul 2021 12:27:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=MkAV=MW=suse.com=jgross@srs-us1.protection.inumbo.net>)
 id 1m9RbV-0004PS-5J
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 12:27:05 +0000
Received: from smtp-out2.suse.de (unknown [195.135.220.29])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 794644bc-92da-4584-b995-127eed0518aa;
 Fri, 30 Jul 2021 12:26:59 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by smtp-out2.suse.de (Postfix) with ESMTPS id 7FBB91FDE6;
 Fri, 30 Jul 2021 12:26:58 +0000 (UTC)
Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512)
 (No client certificate requested)
 by imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 34345137F9;
 Fri, 30 Jul 2021 12:26:58 +0000 (UTC)
Received: from dovecot-director2.suse.de ([192.168.254.65])
 by imap1.suse-dmz.suse.de with ESMTPSA id N2fkCBLwA2FOVgAAGKfGzw
 (envelope-from <jgross@suse.com>); Fri, 30 Jul 2021 12:26:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 794644bc-92da-4584-b995-127eed0518aa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;
	t=1627648018; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:
	 mime-version:mime-version:  content-transfer-encoding:content-transfer-encoding;
	bh=LWzZkVzQMh0+aoBZBkmzQk3xk4z+Q2z4JMszPPOibOw=;
	b=WYl6cpBGp0twcPJ92td+t21lQeb0WVu5lO6+TuWJTP8yPjMtMqhOsZBF+Xz4EB96l/4ZYq
	HA/kYLx6ZGaJG5Yov2l3TwpGmGQjiQaoabFacepJTB+0l/ZDzScwmLduJYsXkt+VszDcUQ
	5NHI0NjiR++DrpWR1UTXTjQOBGiGPtY=
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: julien@xen.org,
	Juergen Gross <jgross@suse.com>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>
Subject: [PATCH v3 0/2] tools/xenstore: set resource limits of xenstored
Date: Fri, 30 Jul 2021 14:26:41 +0200
Message-Id: <20210730122643.2043-1-jgross@suse.com>
X-Mailer: git-send-email 2.26.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

Set some limits for xenstored in order to avoid it being killed by
OOM killer, or to run out of file descriptors.

Changes in V3:
- make oom score configurable

Changes in V2:
- split into 2 patches
- set limits from start script

Juergen Gross (2):
  tools/xenstore: set oom score for xenstore daemon on Linux
  tools/xenstore: set open file descriptor limit for xenstored

 tools/hotplug/Linux/init.d/sysconfig.xencommons.in | 14 ++++++++++++++
 tools/hotplug/Linux/launch-xenstore.in             |  9 +++++++++
 2 files changed, 23 insertions(+)

-- 
2.26.2



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 12:29:33 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 12:29:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162537.298051 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Rdt-0006FH-BJ; Fri, 30 Jul 2021 12:29:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162537.298051; Fri, 30 Jul 2021 12:29:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Rdt-0006FA-7I; Fri, 30 Jul 2021 12:29:33 +0000
Received: by outflank-mailman (input) for mailman id 162537;
 Fri, 30 Jul 2021 12:29:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9Rdr-0006Et-QP
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 12:29:31 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9Rdr-0002sD-Ot
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 12:29:31 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9Rdr-0003tX-Nv
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 12:29:31 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m9Rdn-000649-3N; Fri, 30 Jul 2021 13:29:27 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=wOEIBWg82PBgSQJAoaCRwCgbaQ7dfZ6sa50uzvvEC2I=; b=V+L1m3Q5qmma9l6i/Xh6t2nQV9
	+gokR6vO9TG9IUV4MKFvg4B7p5Xe2DFGd/0InFL+5Bv+taB99OlDZIVQvrVma5PpiqdeHdoreorGa
	k52UYV8qWNbhxT8fU9RT3a30o2plv78qE2Qc+LdY7iL5ViaGrbhekoUf+I/xY5TsOxA4=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <24835.61606.911288.447053@mariner.uk.xensource.com>
Date: Fri, 30 Jul 2021 13:29:26 +0100
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Jane Malalane <jane.malalane@citrix.com>,
    Xen-devel <xen-devel@lists.xenproject.org>,
    George Dunlap <george.dunlap@citrix.com>,
    Jan Beulich <jbeulich@suse.com>,
    Julien Grall <julien@xen.org>,
    Stefano Stabellini <sstabellini@kernel.org>,
    Wei Liu <wl@xen.org>
Subject: Re: [PATCH] xen/lib: Fix strcmp() and strncmp()
In-Reply-To: <f5ef0640-4975-1306-0a40-d3fd7cbf52d3@citrix.com>
References: <20210727184715.17699-1-jane.malalane@citrix.com>
	<f5ef0640-4975-1306-0a40-d3fd7cbf52d3@citrix.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Andrew Cooper writes ("Re: [PATCH] xen/lib: Fix strcmp() and strncmp()"):
> On 27/07/2021 19:47, Jane Malalane wrote:
> > -	register signed char __res;
> > +	unsigned char *csu = (unsigned char *)cs;
> > +	unsigned char *ctu = (unsigned char *)ct;
> 
> So there was actually one final thing, but it is holiday season, hence
> the lack of replies from others.

Oh.

> We should not be casting away const-ness on the pointers, because that
> is undefined behaviour and compilers are starting to warn about it.

I don't think casting away const is UB.  Perhaps you (and perhaps
others) are seeing this in 6.3.2.3(2):

 | For any qualifier q, a pointer to a non-q-qualified type may be
 | converted to a pointer to the q-qualified version of the type; the
 | values stored in the original and converted pointers shall compare
 | equal.p

This does indeed define the meaning of *adding* qualifiers to a
pointer type but not define the meaning of removing them.  But that
whole paragraph is almost redundant, because in 6.3.2.3(7):

 | A pointer to an object or incomplete type may be converted to a
 | pointer to a different object or incomplete type. If the resulting
 | pointer is not correctly aligned57) for the pointed-to type, the
 | behavior is undefined. Otherwise, when converted back again, the
 | result shall compare equal to the original pointer.

This defines the meaning of conversions of pointers to object types
(like char*) regardless of the qualifiers.

I read that as "a pointer to an object type or to an incomplete type".
But the precise reading doesn't matter because these pointers are
actually to objects.

There's also this in 6.7.3(5):

 | If an attempt is made to modify an object defined with a
 | const-qualified type through use of an lvalue with
 | non-const-qualified type, the behavior is undefined.  made to refer
 | to an object defined with a volatile-qualified type through

But there is no attempt to modify.  (Also this paragraph doesn't apply
because characters in string literals have type char, not type const
char, but 6.4.6(6) directly prohibits modification of characters in
string literals.)

6.2.7(2) says

 | All declarations that refer to the same object or function shall
 | have compatible type; otherwise, the behavior is undefined.

but I don't think these pointers variables are declarations of the
chars pointed to.

> Therefore, we want something like:
> 
> const unsigned char *csu = (const unsigned char *)cs;

Having said all thst, I agree that that not casting away const would
be better (especially if it generates compiler warnings).

I pushed it already.  If thios is UB we should revert it but as I say
I think it isn't, so we can wait for a followup.

Thanks,
Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 13:11:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 13:11:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162548.298063 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9SI3-0002cC-IC; Fri, 30 Jul 2021 13:11:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162548.298063; Fri, 30 Jul 2021 13:11:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9SI3-0002c5-EP; Fri, 30 Jul 2021 13:11:03 +0000
Received: by outflank-mailman (input) for mailman id 162548;
 Fri, 30 Jul 2021 13:11:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=M3Ze=MW=oracle.com=boris.ostrovsky@srs-us1.protection.inumbo.net>)
 id 1m9SI1-0002bz-Rb
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:11:02 +0000
Received: from mx0a-00069f02.pphosted.com (unknown [205.220.165.32])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5158a132-744c-46e4-a598-ff3005f1e0b7;
 Fri, 30 Jul 2021 13:11:00 +0000 (UTC)
Received: from pps.filterd (m0246627.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16UD2ckd032278; Fri, 30 Jul 2021 13:10:36 GMT
Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80])
 by mx0b-00069f02.pphosted.com with ESMTP id 3a3qj4ubj3-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Fri, 30 Jul 2021 13:10:35 +0000
Received: from pps.filterd (userp3030.oracle.com [127.0.0.1])
 by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16UD5e4u162852;
 Fri, 30 Jul 2021 13:10:34 GMT
Received: from nam02-bn1-obe.outbound.protection.outlook.com
 (mail-bn1nam07lp2043.outbound.protection.outlook.com [104.47.51.43])
 by userp3030.oracle.com with ESMTP id 3a2359h6ex-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Fri, 30 Jul 2021 13:10:34 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com (2603:10b6:208:321::10)
 by BL0PR10MB3443.namprd10.prod.outlook.com (2603:10b6:208:74::26)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.21; Fri, 30 Jul
 2021 13:10:31 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0]) by BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0%8]) with mapi id 15.20.4373.025; Fri, 30 Jul 2021
 13:10:31 +0000
Received: from [10.74.103.140] (160.34.89.140) by
 BYAPR05CA0009.namprd05.prod.outlook.com (2603:10b6:a03:c0::22) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4394.9 via Frontend Transport; Fri, 30 Jul 2021 13:10:29 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5158a132-744c-46e4-a598-ff3005f1e0b7
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2021-07-09;
 bh=4gQK7yz2rYJRe+DBdflQhp9yL6kRKrOi1x+IYoHTzZo=;
 b=xr9xVWMWimclCGcLzrSNVDSBke4WXn6D8aaFFAnYguTN7Cu6PeU0hvv0xXwz0p0+oCQH
 pXTs3F2eZ5QMxh5jT21Ek6UGAfPia9Wl2bG1WfAIpyLNd0Y9PZ0/J+6MYHgpbeGJYvuF
 oAUVTHBWKYnMUHEs9cBusIQSq7llKbtfSfAVCowGpqy8cC2R7xV64nRN0DKHfwlS8A+P
 Kwf2YZqrrmQD9spGK0X7iEGpVCmZxtUWh6MwefuASSB7j2sDzooFsdimm17ooiwBeOJ7
 Uw8RLWif/0fYFlLBgTHDTqsNPT590LLdeHizP1A5P9p7Dr4C/F08eRf3Xy4GeWvikhsI Jw== 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2020-01-29;
 bh=4gQK7yz2rYJRe+DBdflQhp9yL6kRKrOi1x+IYoHTzZo=;
 b=y4/ZYBdgQWPjQ7S0U2G9EhqCPY6ElhDZlTLWWdgY10iJjImxPv9h7Stezq3NNZk3++cO
 L3xpoKqrQWNI0TjRY8kwgAXPV6J013XoVKGQ9kg2BGq5X+Fhvca0kI9vmLBPnt6qK/Ex
 ws94x3j6JB9CZZ1/dVixZsLKwQWguUk9l5olXGPMW1bPP/ndbWEXihlx0BxKELFMOlww
 OdH77hURbSgswFfvrrTasquZipsUAbDBAd0/9EqRukRxvjhbiJ5XX2G2yXpvG3ythQbB
 6fEpJJO4ZpeNUzl05MZMQ5RUpAwr0jes0L3oXZUSqsCEXlakns1qTYuqQ+48SA4BvX+L WA== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=SSAc90USAQv1ATBRg6unaqimeG5cBV1UOz5jLhO/yFJTS7X7EIG1XU+evrAc4bqMuePVI9RdXChtWTLkJLXgwGx2nFZ6DcQOoDj9aGVIB5DImazCu5K9cYOrDjrMb3djfXzQKR9RNWLV1zmcbY6l11ct7qet1BuAs4BA8t57CiDW+gb9aqK8HD4T5w6zqDMCSYpnqL1WCCBa1RrQxATgO8SJ+mVR8acfsbXvnQ0udlM06ZFQKEYjUuIAsAQ6+myWt79i86aBAGApidyfLzEmluBn+2Kcg4gHm/50GOIdlLJM7nl0e+eVdkaIm/C/1mCB3gbwmKtQK1AM5YCN5qOIrQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4gQK7yz2rYJRe+DBdflQhp9yL6kRKrOi1x+IYoHTzZo=;
 b=MTnLeOEamO13mSF6Oaah8ny1fQhuWliWiT29WELB1E7hrbXlQwoXnkblS62iiYk/MYwBWxeAOX2SbjWLrF6HbywE9pG8OCbzXrev+2Ei66Lf4P7PqFAaq83zAd+hhOPBzRB47E8ibSl+qi6prGT+ReINjXk/k1/qmWtS/rL9An/5pMYrCuMnPv7FVnKN92OkoxwnZWTI1sxUIE/6a3IKYHR2XLB3R0Z0/CtTnkV8XXzDjFt4jnWNHwIyWVZ9bBo7SZQuxzrJnDdLRGUMz65m1bOCYLXV/6K3z63XQqDmscKolZnVm6nN3BMySQK+L32TRJl4Y1tV3NDbz+ZQG8xLKw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4gQK7yz2rYJRe+DBdflQhp9yL6kRKrOi1x+IYoHTzZo=;
 b=iVfpe/VrEJfv4H9qibbY4aqN0p1575PhfSLMrUxeeJhYmLZf8ccz8psYPDWgNP64PsH/bOUztCmjmy04nyCT94FvIhwSCQIJA2pamKDSCDEyIC5K82MyTsAQl7gIIzmQxUNqL1Fka2sEyVUYMdYDvr4jI/UnVBkGeQq08dLFCGw=
Authentication-Results: zytor.com; dkim=none (message not signed)
 header.d=none;zytor.com; dmarc=none action=none header.from=oracle.com;
Subject: Re: [PATCH v2 0/3] xen: remove some checks for always present Xen
 features
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org,
        linux-kernel@vger.kernel.org, x86@kernel.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
        Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>,
        Borislav Petkov <bp@alien8.de>, "H. Peter Anvin" <hpa@zytor.com>
References: <20210730071804.4302-1-jgross@suse.com>
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Message-ID: <9025ef6a-6be7-ee63-b528-735f5a5e6d5e@oracle.com>
Date: Fri, 30 Jul 2021 09:10:25 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
In-Reply-To: <20210730071804.4302-1-jgross@suse.com>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Language: en-US
X-ClientProxiedBy: BYAPR05CA0009.namprd05.prod.outlook.com
 (2603:10b6:a03:c0::22) To BLAPR10MB5009.namprd10.prod.outlook.com
 (2603:10b6:208:321::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a7bff916-3b2e-41b7-8f5c-08d9535b6881
X-MS-TrafficTypeDiagnostic: BL0PR10MB3443:
X-Microsoft-Antispam-PRVS: 
	<BL0PR10MB3443A7CBA356F53EFB982BBF8AEC9@BL0PR10MB3443.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:3173;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	ecI22R2k4xthLAOvTGJmPsBuwsUrie/jEBpAhOcjKniWgmQIUDaU+S1A+DTPx7CjGjjjjxhLPd55Tq4WdCpwmcL2P6wYbrxV6Ao1uxvrCTUtyXOJzFxl4oXnrQ7ewvQILSMA9fKmnjss6FXVfTFo6ZxiLTJ0txL7RDdomah8qUk/i3LtUpmrrDpwQlqoPViwBBY3BfIpZp4T/t6n6O/UTVQ3OfVHfTaaWY6IHOMtaSHaKWDsFjbMlFwTfCCre6K/zseoJSAAq1DvsknsHj0ZCKTdwRuNtXRQJH0F47rr12IBhBDdb8ICGlw6WhY9HF16xYgSpegdrXE8STn8uGl87ZI0YE/BwMUJEyPTlvy/gLu55u+oHG2vw5hJGdpfv6H/RB3/ri5oLIoLqbWVunQmJMoOHSCyD1aNRoiJNKamYEjn1HMyH8QTrjJ0RR80IhtGCbE4ekz+wsQMabpYThKNLe6ZIVyMxw0/9D0LwyJmqPxwBeBUh01goe39m31ycKdguFCizRT4irli3EXingzj6hqJYCBKEw3LBT1s+wszdhXgxpBnqfYR4NzaBtVwONJEJbc12jikI27dfcAi7hYrSHrvlIUMMQS7/qc/yMf9SHp3TPgNacCJZSjhEr8wUueeNoIEVyNxL53Y6jwf9KzaEtiQ6OjPOgykISEqCS6ZboyBOgo6KkHTegBgwSVhOIFd43por7546QYfwPTzJ94yzRjeXGHkOYuvlRmVNgCNvwg=
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5009.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(376002)(136003)(396003)(39860400002)(6486002)(316002)(5660300002)(66476007)(956004)(86362001)(2616005)(4326008)(54906003)(186003)(4744005)(44832011)(6666004)(16576012)(26005)(83380400001)(2906002)(66946007)(8676002)(31686004)(478600001)(31696002)(66556008)(38100700002)(36756003)(8936002)(53546011)(43740500002)(45980500001);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	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
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a7bff916-3b2e-41b7-8f5c-08d9535b6881
X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5009.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jul 2021 13:10:31.2466
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: +4VR2aFaFJiaZw+QNw2O+J8oXOIa3ca+HTXnhOHYfmJsAGkVo4Gc/B4ySEpaOI2ljBdVnTLNDH37NkxhttzXf//nb/qKptjuyvcuQf0ycQE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR10MB3443
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10060 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0
 suspectscore=0 phishscore=0 mlxscore=0 bulkscore=0 mlxlogscore=999
 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2107140000 definitions=main-2107300085
X-Proofpoint-ORIG-GUID: VsVhOOAEoNbe3wfe0WD-zmjWSomFRI49
X-Proofpoint-GUID: VsVhOOAEoNbe3wfe0WD-zmjWSomFRI49


On 7/30/21 3:18 AM, Juergen Gross wrote:
> Some features of Xen can be assumed to be always present, so add a
> central check to verify this being true and remove the other checks.
>
> Juergen Gross (3):
>   xen: check required Xen features
>   xen: assume XENFEAT_mmu_pt_update_preserve_ad being set for pv guests
>   xen: assume XENFEAT_gnttab_map_avail_bits being set for pv guests
>
>  arch/x86/xen/enlighten_pv.c | 12 ++----------
>  arch/x86/xen/mmu_pv.c       |  4 ++--
>  drivers/xen/features.c      | 18 ++++++++++++++++++
>  drivers/xen/gntdev.c        | 36 ++----------------------------------
>  4 files changed, 24 insertions(+), 46 deletions(-)



Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 13:26:22 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 13:26:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162559.298074 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9SWl-0004AB-U9; Fri, 30 Jul 2021 13:26:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162559.298074; Fri, 30 Jul 2021 13:26:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9SWl-0004A4-Qz; Fri, 30 Jul 2021 13:26:15 +0000
Received: by outflank-mailman (input) for mailman id 162559;
 Fri, 30 Jul 2021 13:26:14 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9SWk-00049y-Ct
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:26:14 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9SWk-0003gs-AI
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:26:14 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9SWk-0001aa-8x
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:26:14 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m9SWh-0006Fs-52; Fri, 30 Jul 2021 14:26:11 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=yuEO8ApPC/0FjI0OG9bYRRW/CLXN2+sYnf5zwTakl2o=; b=jYbgbCY+q6AHp+dLTx6iNy6QN7
	IiXt9yjH7sEqU6QtiFzT5s9WuAW/AuRpKGQkoD+0e6ObWywAKtl645OJrec6GsGWKzpJyOXr1epWl
	MmIr8+9GZusEZI4s34Hjlz0E51+hHaYOqLeKnmltUyKZ7a6sZPtDUNeBfcaFKz7SVYx4=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24835.65010.870849.479582@mariner.uk.xensource.com>
Date: Fri, 30 Jul 2021 14:26:10 +0100
To: Juergen Gross <jgross@suse.com>
Cc: xen-devel@lists.xenproject.org,
    julien@xen.org,
    Wei Liu <wl@xen.org>
Subject: [PATCH v3 1/2] tools/xenstore: set oom score for xenstore daemon on Linux
In-Reply-To: <20210730122643.2043-2-jgross@suse.com>
References: <20210730122643.2043-1-jgross@suse.com>
	<20210730122643.2043-2-jgross@suse.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Juergen Gross writes ("[PATCH v3 1/2] tools/xenstore: set oom score for xenstore daemon on Linux"):
> Xenstored is absolutely mandatory for a Xen host and it can't be
> restarted, so being killed by OOM-killer in case of memory shortage is
> to be avoided.
> 
> Set /proc/$pid/oom_score_adj (if available) per default to -500 (this
> translates to 50% of dom0 memory size) in order to allow xenstored to
> use large amounts of memory without being killed.
...
> +## Type: integer
> +## Default: 50
> +#
> +# Percentage of dom0 memory size the xenstore daemon can use before the
> +# OOM killer is allowed to kill it.
> +#XENSTORED_OOM_MEM_THRESHOLD=50
> +
>  ## Type: string
>  ## Default: @LIBEXEC@/boot/xenstore-stubdom.gz

Thanks for working on this.  I approve of the principle.

I have one question about detail:

>  	}
> +	[ -z "$XENSTORED_OOM_MEM_THRESHOLD" ] || XENSTORED_OOM_MEM_THRESHOLD=50
> +	XS_OOM_SCORE=-$(($XENSTORED_OOM_MEM_THRESHOLD * 10))
> +
> +	rm -f @XEN_RUN_DIR@/xenstored.pid
...
> +	XS_PID=`cat @XEN_RUN_DIR@/xenstored.pid`
> +	echo $XS_OOM_SCORE >/proc/$XS_PID/oom_score_adj

The effect of all this is that the value specified in
XENSTORED_OOM_MEM_THRESHOLD is transformed before being echoed into
/proc, by being multiplied by -10.

Of course an alternative would be to ask the user to specify the
tuneable directly but given its rather more obscure semantics I think
it is reasonable to have this done by the script.

But maybe we could add something to the doc comment ?

Eg
  # (The specified value is multiplied by -10 and echoed into
  # /proc/PID/oom_score_adj.)

?

Thanks,
Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 13:27:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 13:27:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162566.298086 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9SYB-0004lJ-8a; Fri, 30 Jul 2021 13:27:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162566.298086; Fri, 30 Jul 2021 13:27:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9SYB-0004lC-5k; Fri, 30 Jul 2021 13:27:43 +0000
Received: by outflank-mailman (input) for mailman id 162566;
 Fri, 30 Jul 2021 13:27:42 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9SYA-0004kz-19; Fri, 30 Jul 2021 13:27:42 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9SY9-0003iM-U9; Fri, 30 Jul 2021 13:27:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9SY9-0006nZ-Lt; Fri, 30 Jul 2021 13:27:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9SY9-0008Hf-L4; Fri, 30 Jul 2021 13:27:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=0OFvuFnEPJ4FuYJiLMo8UcD/kiEJVKN/7aw0rlPCRg0=; b=a6UISLhPNo6/mMeRDViS6onJAj
	+x9XFLjZGFBr9F/JWqILOLgHW7LKpgjtjiXRX99clxlU1YBJNjLCznK0PbajbSuLRv1GtGqGTPR3u
	IU38LM4oRQpz2FQjwPTi+83WGjs3s7utMMivPJrtsqJ53wu1I9eOpvNhcKGsGqqPcA44=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164053-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 164053: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e
X-Osstest-Versions-That:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 13:27:41 +0000

flight 164053 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164053/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e
baseline version:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31

Last test of basis   164012  2021-07-27 19:02:43 Z    2 days
Testing same since   164053  2021-07-30 10:02:51 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Jane Malalane <jane.malalane@citrix.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   58ad654ebc..3747a2bb67  3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 13:35:32 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 13:35:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162576.298101 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Sfh-0006CH-38; Fri, 30 Jul 2021 13:35:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162576.298101; Fri, 30 Jul 2021 13:35:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Sfh-0006CA-07; Fri, 30 Jul 2021 13:35:29 +0000
Received: by outflank-mailman (input) for mailman id 162576;
 Fri, 30 Jul 2021 13:35:28 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9Sfg-0006C4-4K
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:35:28 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9Sfg-0003pL-1j
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:35:28 +0000
Received: from iwj (helo=mariner.uk.xensource.com)
 by xenbits.xenproject.org with local-bsmtp (Exim 4.92)
 (envelope-from <iwj@xenproject.org>) id 1m9Sfg-0002SD-0j
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 13:35:28 +0000
Received: from iwj by mariner.uk.xensource.com with local (Exim 4.89)
 (envelope-from <iwj@xenproject.org>)
 id 1m9Sfc-0006Hu-T5; Fri, 30 Jul 2021 14:35:24 +0100
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=References:In-Reply-To:Subject:Cc:To:Date
	:Message-ID:Content-Transfer-Encoding:Content-Type:MIME-Version:From;
	bh=3Bd3KcKj1rEjsKhrRTMeCLndfIbyNAYI7a+6VmdAAbQ=; b=T6Wz83eUuaf1rUSKOCxpif70Ka
	WvTfvDX0ChfqSNnRtm7XSRK0yvAqwgpOKrYyram7uuPNXR1/tGaMrj1puqEjhvBBXqnXoX4dkFNYT
	ETqnK+q7IFKGC5Q53yMz6EPeT/+DJ9DpAAenRnMNYerOvNGB93f8TYvao//8mI3dr3J0=;
From: Ian Jackson <iwj@xenproject.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <24836.28.655841.510063@mariner.uk.xensource.com>
Date: Fri, 30 Jul 2021 14:35:24 +0100
To: Juergen Gross <jgross@suse.com>
Cc: xen-devel@lists.xenproject.org,
    julien@xen.org,
    Wei Liu <wl@xen.org>
Subject: [PATCH v3 2/2] tools/xenstore: set open file descriptor limit for xenstored
In-Reply-To: <20210730122643.2043-3-jgross@suse.com>
References: <20210730122643.2043-1-jgross@suse.com>
	<20210730122643.2043-3-jgross@suse.com>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)

Juergen Gross writes ("[PATCH v3 2/2] tools/xenstore: set open file descriptor limit for xenstored"):
> Add a configuration item for the maximum number of domains xenstored
> should support and set the limit of open file descriptors accordingly.
> 
> For HVM domains there are up to 5 socket connections per domain (2 by
> the xl daemon process, and 3 by qemu). So set the ulimit for xenstored
> to 5 * XENSTORED_MAX_DOMAINS + 100 (the "+ 100" is for some headroom,
> like logging, event channel device, etc.).
...
> +## Type: integer
> +## Default: 32768
> +#
> +# Select maximum number of domains supported by xenstored.
> +# Only evaluated if XENSTORETYPE is "daemon".
> +#XENSTORED_MAX_N_DOMAINS=32768

I approve of doing something about the fd limit.  I have some qualms
about the documentation.

The documentation doesn't say what happens if this limit is exceeded.
Also the default of 32758 suggests that we actually support that many
domains.  I don't think we do...

I didn't find anything in SUPPORT.md about how many guests we support
but I wouldn't want this setting here to imply full support for 32768
domains.

If you don't want to tackle this can of works, maybe add this:

  # This just controls some resource limits for xenstored; if the
  # limit is exceeded, xenstored will stop being able to function
  # properly for additional guests.  The default value is so large
  # that it won't be exceeded in a supported configuration, but
  # should not be taken to mean that the whole Xen system is
  # guaranteed to work properly with that many guests.

Julien, did you ask for this to be made configurable ?  Having written
the text above, I wonder if it wouldn't just be better to
unconditionally set it to "unlimited" rather than offering footgun
dressed up like a tuneable...

If xenstored does go mad or leadk lots of fds, things are basically
stuffed in anycase.  Having its syscalls fail with EMFILE is not
really going to help.

Ian.


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 14:07:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 14:07:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162584.298114 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9TAj-0000vW-MS; Fri, 30 Jul 2021 14:07:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162584.298114; Fri, 30 Jul 2021 14:07:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9TAj-0000vP-J8; Fri, 30 Jul 2021 14:07:33 +0000
Received: by outflank-mailman (input) for mailman id 162584;
 Fri, 30 Jul 2021 14:07:31 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9TAh-0000vE-IC; Fri, 30 Jul 2021 14:07:31 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9TAh-0004MJ-De; Fri, 30 Jul 2021 14:07:31 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9TAh-00082A-2S; Fri, 30 Jul 2021 14:07:31 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9TAh-0002sW-1u; Fri, 30 Jul 2021 14:07:31 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=pMh93lqKjhP6zd3S3qLy6CW+uVAbArdjlWxhvQOxPn0=; b=WD6wji3HsR+2HFetg6JNsVvH12
	7594U/0lNLWFqfnR4Pj/hupAg3Df9uccsNUMkqIn6yYvUMn0zrXOnxK5jO1GNRvJGX5zweo+Rf1nH
	mvOkTcJUZZEH6FU5rD6xeOPzSFonkNYiTPdaNIotRoIz4/6wTGCSAF1w019PsbAmdkfg=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164049-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164049: tolerable FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
X-Osstest-Versions-That:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 14:07:31 +0000

flight 164049 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164049/

Failures :-/ but no regressions.

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

version targeted for testing:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31
baseline version:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31

Last test of basis   164049  2021-07-30 01:52:50 Z    0 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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Published tested tree is already up to date.



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 15:13:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 15:13:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162594.298129 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9UCG-0007Tu-Nr; Fri, 30 Jul 2021 15:13:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162594.298129; Fri, 30 Jul 2021 15:13:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9UCG-0007Ti-Kk; Fri, 30 Jul 2021 15:13:12 +0000
Received: by outflank-mailman (input) for mailman id 162594;
 Fri, 30 Jul 2021 15:13:11 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m9UCF-0007Sr-HJ
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 15:13:11 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m9UCD-0005IE-A1; Fri, 30 Jul 2021 15:13:09 +0000
Received: from 54-240-197-230.amazon.com ([54.240.197.230]
 helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m9UCD-0002Yl-1Z; Fri, 30 Jul 2021 15:13:09 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=vhTbPeZFRrDcvsRQddWeO+kARioyLCWBCRabXZxJagc=; b=iuje+5YkzvURmjtFqMyCShT6zk
	KABClT//aU44daxnoHRaP0L+cqQJsf0YLf2zEEmeB95moryUsBJvWOspoMQkCBz9+q9PEipxgEb7A
	PNQYU40ArBccyzSMT2FsMwq5prKnQIW/y33S5LjmR3zI5V7GOKrP71Vrbo0B6/8Dx17A=;
Subject: Re: [PATCH] tools/xenstored: Don't assume errno will not be
 overwritten in lu_arch()
To: Juergen Gross <jgross@suse.com>, xen-devel@lists.xenproject.org
Cc: Julien Grall <jgrall@amazon.com>, Ian Jackson <iwj@xenproject.org>,
 Wei Liu <wl@xen.org>
References: <20210729110647.25500-1-julien@xen.org>
 <bbdbc7a9-c82e-2656-6a03-553ff55a2101@xen.org>
 <3f3843c0-5766-b483-ce25-33fe2d4359ca@suse.com>
From: Julien Grall <julien@xen.org>
Message-ID: <bd811ae4-a355-f8fd-f61a-88ea895f5385@xen.org>
Date: Fri, 30 Jul 2021 16:13:07 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <3f3843c0-5766-b483-ce25-33fe2d4359ca@suse.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 8bit

Hi Juergen,

On 30/07/2021 09:40, Juergen Gross wrote:
> On 29.07.21 17:23, Julien Grall wrote:
>>
>>
>> On 29/07/2021 12:06, Julien Grall wrote:
>>> From: Julien Grall <jgrall@amazon.com>
>>>
>>> At the moment, do_control_lu() will set errno to 0 before calling
>>> lu_arch() and then check errno. The expectation is nothing in lu_arch()
>>> will change the value unless there is an error.
>>>
>>> However, per errno(3), a function that succeeds is allowed to change
>>> errno. In fact, syslog() will overwrite errno if the logs are rotated
>>> at the time it is called.
>>>
>>> To prevent any further issue, errno is now always set before
>>> returning NULL.
>>>
>>> Additionally, errno is only checked when returning NULL so the client
>>> can see the error message if there is any.
>>>
>>> Reported-by: Michael Kurth <mku@amazon.com>
>>> Signed-off-by: Julien Grall <jgrall@amazon.com>
>>> ---
>>>   tools/xenstore/xenstored_control.c | 5 +++--
>>>   1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/tools/xenstore/xenstored_control.c 
>>> b/tools/xenstore/xenstored_control.c
>>> index 6b68b79faac7..6fcb42095b59 100644
>>> --- a/tools/xenstore/xenstored_control.c
>>> +++ b/tools/xenstore/xenstored_control.c
>>> @@ -324,6 +324,7 @@ static const char *lu_binary_alloc(const void 
>>> *ctx, struct connection *conn,
>>>       lu_status->kernel_size = size;
>>>       lu_status->kernel_off = 0;
>>> +    errno = 0;
>>>       return NULL;
>>>   }
>>> @@ -339,6 +340,7 @@ static const char *lu_binary_save(const void 
>>> *ctx, struct connection *conn,
>>>       memcpy(lu_status->kernel + lu_status->kernel_off, data, size);
>>>       lu_status->kernel_off += size;
>>> +    errno = 0;
>>>       return NULL;
>>>   }
>>
>> I forgot to update lu_binary(). I will respin the patch once I get 
>> some feedback.
> 
> With setting errno to 0 before returning NULL in lu_binary() you can add
> 
> Reviewed-by: Juergen Gross <jgross@suse.com>

Thanks! I will commit it.

Cheers,

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 15:44:08 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 15:44:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162603.298144 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ug5-0002B0-6f; Fri, 30 Jul 2021 15:44:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162603.298144; Fri, 30 Jul 2021 15:44:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9Ug5-0002At-3k; Fri, 30 Jul 2021 15:44:01 +0000
Received: by outflank-mailman (input) for mailman id 162603;
 Fri, 30 Jul 2021 15:43:59 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Ug3-0002Aj-Es; Fri, 30 Jul 2021 15:43:59 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Ug3-0005hz-2Y; Fri, 30 Jul 2021 15:43:59 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Ug2-0003sj-OG; Fri, 30 Jul 2021 15:43:58 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9Ug2-0000jq-Nk; Fri, 30 Jul 2021 15:43:58 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=tc7uOY8WywV6a7JXqSkClUgqI9aNt15XTeEWc8XB8aw=; b=zn+57bshSCf7TBY4VM9u0Tfb92
	pyyslvJZGLI9mokeosxLRl9j5YW3OL59cWnq+56Hx2dbFyCuh7K7U2gAMR7Nu+tfwA7zzTv91T6By
	e3uc9dRaaJch9CcoQ39ohSZjKGvigL506JsJ4HTMSubN2/u37TaRhnZNN0FmdhzpIjBI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164051-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164051: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:host-ping-check-xen:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:guest-start:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=764a5bc89b12b82c18ce7ca5d7c1b10dd748a440
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 15:43:58 +0000

flight 164051 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164051/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-armhf-armhf-xl-arndale  10 host-ping-check-xen      fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332

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

version targeted for testing:
 linux                764a5bc89b12b82c18ce7ca5d7c1b10dd748a440
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  363 days
Failing since        152366  2020-08-01 20:49:34 Z  362 days  626 attempts
Testing same since   164051  2021-07-30 08:30:14 Z    0 days    1 attempts

------------------------------------------------------------
6734 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  fail    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1989726 lines long.)


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 16:14:25 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 16:14:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162614.298163 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9V9E-0005o1-H4; Fri, 30 Jul 2021 16:14:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162614.298163; Fri, 30 Jul 2021 16:14:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9V9E-0005nu-Dg; Fri, 30 Jul 2021 16:14:08 +0000
Received: by outflank-mailman (input) for mailman id 162614;
 Fri, 30 Jul 2021 16:14:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=v/MC=MW=gmail.com=olekstysh@srs-us1.protection.inumbo.net>)
 id 1m9V9C-0005no-Eg
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 16:14:06 +0000
Received: from mail-ed1-x52e.google.com (unknown [2a00:1450:4864:20::52e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7136e444-7e0c-496f-b92d-6ee58dcef811;
 Fri, 30 Jul 2021 16:14:04 +0000 (UTC)
Received: by mail-ed1-x52e.google.com with SMTP id y7so11680112eda.5
 for <xen-devel@lists.xenproject.org>; Fri, 30 Jul 2021 09:14:04 -0700 (PDT)
Received: from [192.168.1.7] ([212.22.223.21])
 by smtp.gmail.com with ESMTPSA id mh10sm704059ejb.32.2021.07.30.09.14.02
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Fri, 30 Jul 2021 09:14:03 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7136e444-7e0c-496f-b92d-6ee58dcef811
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=subject:to:cc:references:from:message-id:date:user-agent
         :mime-version:in-reply-to:content-transfer-encoding:content-language;
        bh=7ho/jKVLVVep0rtWUMLNDL6VBEO7YmmZllY4MTv0QlQ=;
        b=u9ADuI2TRINpodV+dOjGfho8EiaHVUKsPxsU7VQ7WcZEYnRsGYGq+rZ8HavkLjm4EH
         dCccd6OxknCN3J8V2SlTMUIenxQ89SyM0B6SllPsGiIYL3PdYFV+vdNSb2yBFLGJQGR0
         hZfukF/DiRbfuVaCVjkvYKk8v/QXhcAD8MxMx5cmYltmtzw689onlt1SK7TPbhRZ9ZsO
         idbaZdUMGUo0wn8rY8/lyXoq56qrGXcaM/Glo16Aibkml36+mwSeOYEBnnOB28Lkujba
         9vk97RnFPTjsv3yt3f9pCyOLR9wpVqMFnZWnERl23SqfWKUtE758XjExuKyNy6bk5NkR
         TyYg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:subject:to:cc:references:from:message-id:date
         :user-agent:mime-version:in-reply-to:content-transfer-encoding
         :content-language;
        bh=7ho/jKVLVVep0rtWUMLNDL6VBEO7YmmZllY4MTv0QlQ=;
        b=jHdtmROAIFAIMSfipOWdr37de7HCGS46wSJkR0MDAbDEzg1q7M3Ztv6kZXFcI2rXzZ
         9CHGlwW15y1TbDuaimABXOyiAjrQpKFVCtQbc/PZoPp4jdBjlyZg3zH6jJHk3J1BOqJJ
         Xijg+uT3o7ivfg5g5fIGO5TJMhmh/hMbkiwe9HQ8YCM3jWJYLfUa0RaxhcW5hGhV+8r4
         B+4xUYBdfvr2xjqmzHHPfE7NDCK2l5W0pBycjneg5fLu/TXxzNoMTHPaS497n27anHce
         E2cYfHhLrgRxfKFEIr+PZLIMMCGQstA2wtfmh/WnTgaDVdLKsNPkZWUAwU3KwUeABidf
         Y/Tg==
X-Gm-Message-State: AOAM5313OoYxUJxx2jvYmA8t3o8Rg+VS6GsfwyVTijlvY8nHuE85lj6H
	YEHpHCMa2d+igvyKN8XmJ0g=
X-Google-Smtp-Source: ABdhPJzXsNrOXCRMasmnNswBWQm6LQKGpk1fFqnudeLNfU98fwAZBX689DR8zqd218ilnYLljQ7Ufw==
X-Received: by 2002:a05:6402:cb9:: with SMTP id cn25mr3907167edb.271.1627661643470;
        Fri, 30 Jul 2021 09:14:03 -0700 (PDT)
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
To: Julien Grall <julien@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>,
 xen-devel@lists.xenproject.org
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
 Daniel De Graaf <dgdegra@tycho.nsa.gov>,
 "Daniel P. Smith" <dpsmith@apertussolutions.com>,
 Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
 George Dunlap <george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>,
 Stefano Stabellini <sstabellini@kernel.org>,
 Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
 =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <roger.pau@citrix.com>,
 Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com>
 <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com>
 <e8db3021-78a5-e040-a70b-62ca5b500149@xen.org>
 <4de5ed21-379e-b618-44c8-924d88b1a519@citrix.com>
 <bbc7f597-5249-20a0-cac9-13f594268299@xen.org>
From: Oleksandr <olekstysh@gmail.com>
Message-ID: <6a633f4e-13e0-4a2b-cf6e-35ef90ae977c@gmail.com>
Date: Fri, 30 Jul 2021 19:13:36 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <bbc7f597-5249-20a0-cac9-13f594268299@xen.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US


Hi Andrew, Julien.


@Andrew, I think that arguments you provided in your first answer (why 
the proposed solution is a potentially racy and not a safe) are valid 
and reasonable.
Thanks for the feedback.


On 28.07.21 22:53, Julien Grall wrote:
>
>
> On 28/07/2021 20:00, Andrew Cooper wrote:
>> On 28/07/2021 18:27, Julien Grall wrote:
>>> Hi Andrew,
>>>
>>> On 28/07/2021 18:19, Andrew Cooper wrote:
>>>> On 28/07/2021 17:18, Oleksandr Tyshchenko wrote:
>>>>> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>>>>>
>>>>> Add XENMEM_get_unallocated_space hypercall which purpose is to
>>>>> query hypervisor to find regions of guest physical address space
>>>>> which are unused and can be used to create grant/foreign mappings
>>>>> instead of wasting real pages from the domain memory for
>>>>> establishing these mappings. The problem with the current Linux
>>>>> on Xen on Arm behaviour is if we want to map some guest memory
>>>>> regions in advance or to perform cache mappings in the backend
>>>>> we might run out of memory in the host (see XSA-300).
>>>>> This of course, depends on the both host and guest memory sizes.
>>>>>
>>>>> The "unallocated space" can't be figured out precisely by
>>>>> the domain on Arm without hypervisor involvement:
>>>>> - not all device I/O regions are known by the time domain starts
>>>>>     creating grant/foreign mappings
>>>>> - the Dom0 is not aware of memory regions used for the identity
>>>>>     mappings needed for the PV drivers to work
>>>>> In both cases we might end up re-using these regions by
>>>>> a mistake. So, the hypervisor which maintains the P2M for the domain
>>>>> is in the best position to provide "unallocated space".
>>>>
>>>> I'm afraid this does not improve the situation.
>>>>
>>>> If a guest follows the advice from XENMEM_get_unallocated_space, and
>>>> subsequently a new IO or identity region appears, everything will
>>>> explode, because the "safe area" wasn't actually safe.
>>>>
>>>> The safe range *must* be chosen by the toolstack, because nothing else
>>>> can do it safely or correctly.
>>>
>>> The problem is how do you size it? In particular, a backend may map
>>> multiple time the same page (for instance if the page is granted 
>>> twice).
>>
>> The number of mapped grants is limited by the size of the maptrack table
>> in Xen, which is a toolstack input to the domaincreate hypercall.
>> Therefore, the amount of space required is known and bounded.
>>
>> There are a handful of other frames required in the current ABI (shared
>> info, vcpu info, etc).
>>
>> The areas where things do become fuzzy is things like foreign mappings,
>> acquire_resource, etc for the control domain, which are effectively
>> unbounded from the domain's point of view.
>>
>> For those, its entirely fine to say "here 128G of safe mapping space" or
>> so.  Even the quantity of mapping dom0 can make is limited by the shadow
>> memory pool and the number of pagetables Xen is willing to expend on the
>> second stage translation tables.
>
> FWIW, on Arm, we don't have shadow memory pool.
>
> Anyway, it should be possible to give a 128GB "safe range" and let Xen 
> deal with it.
>
>>
>>>
>>>>
>>>> Once a safe range (or ranges) has been chosen, any subsequent action
>>>> which overlaps with the ranges must be rejected, as it will violate 
>>>> the
>>>> guarantees provided.
>>>>
>>>> Furthermore, the ranges should be made available to the guest via 
>>>> normal
>>>> memory map means.  On x86, this is via the E820 table, and on ARM I
>>>> presume the DTB.  There is no need for a new hypercall.
>>>
>>> Device-Tree only works if you have a guest using it. How about ACPI?
>>
>> ACPI inherits E820 from x86 (its a trivial format), and UEFI was also
>> based on it.
>>
>> But whichever...  All firmware interfaces have a memory map.
>
> This will be UEFI memory map. However, I am a bit confused how we can 
> tell the OS the region will be used for grant/foreign mapping. Is it 
> possible to reserved a new type?
>
>>
>>> To me the hypercall solution at least:
>>>    1) Avoid to have to define the region on every single firmware table
>>
>> There is only ever one.
>
> Why? I could forsee an interest to use the host memory map and 
> therefore we may need to find a few holes for safe regions to use.
>
>>
>>>    2) Allow to easily extend after the guest run
>>
>> The safe ranges can't be changed (safely).  This is the same problem as
>> needing to know things like your PCI apertures ahead of time, or where
>> the DIMM hotplug regions are.
>>
>> Having the guest physmap be actually dynamic is the cause of so many
>> bugs (inc security) and misfeatures in Xen.  Guests cannot and do no
>> cope with things being fully dynamic, because that's not how real
>> hardware works.  What you get is layers and layers of breakage on top of
>> each other, rather than a working system.
>
> I would not call it "fully dynamic". Xen can easily know whether a 
> region has ever be allocated before. So long the region has never been 
> allocated, then it should be fine. In fact...
>
>>
>> The size of mapping space is a limit, just like maxphysaddr, or the PCI
>> apertures, or MMCFG space, etc.  You can make it large by default (as it
>> doesn't consume resource when not being used), but any guest OS isn't
>> going to tolerate it morphing during runtime.
> ... I believe the OS may be not aware of the hotplug region until it 
> is actually used.
>
> Anyway, I suggested this approach a few months ago to Oleksandr (see 
> [1]) which BTW you were CCed on ;). My take was that Xen knows about 
> the unallocated space and therefore can make an informed decision 
> without having to allocate insanely large region.
>
> Now if you think that's fine (IIRC Stefano had a preference for that 
> as well). Then we can use the firmware table (assuming we can solve 
> the ACPI question).


Well, if new hypercall and, what is more, "the querying hypervisor at 
runtime to find unused space" model itself is not welcome, I am ok, 
let's try to create a working system,
may we please find a common ground to move this forward (at least on Arm 
for now, the foreign mapping is the most important question).

I got the proposed idea in general, but I haven't connected all dots 
yet, some points need clarification.

1. The safe range must be defined/allocated in advance and must remain 
const during the runtime. The safe range must be chosen by the toolstack.
[For the initial implementation we can start with some large value 
(128GB) as discussed above]

Questions:

- Do we need to inform Xen about that range (via domain_create 
hypercall, etc)?
- What will be in charge of guaranteeing the safety of that range at 
runtime (reject new mapping requests with possible overlaps, etc), Xen, 
toolstack or both?
- Where that range should be located in guest address space, should that 
range be the same for all domains (how GUEST_GNTTAB_BASE(SIZE) for example)
or it should be calculated based on actual guest_ram_base(size) for a 
particular domain?
- What about a safe range the Dom0 can use itself? Xen should choose it 
for Dom0 the same way how toolstack chooses it for other domains, correct?

2. The safe range must be provided to domain using the firmware table.
[We can start with the DTB and leave ACPI unimplemented for now, 
assuming we will be able to solve open questions as discussed above]

Questions:

- Do we need distinguish between foreign and grant mappings at the 
domain side at all? Can the same safe range be used for all types of 
mapping?
- How will domain recognize what range can be used for foreign/grant 
mappings? Do we need to introduce new device-tree bindings for 
describing the range
or it is possible to re-use current bindings (expand the "reg" property 
under "hypervisor" node, currently it contains gnttab region)?


>
> At the end of the day, this is not really the interesting bit of the 
> problem. What matter if the OS part where hopefully Linux will be able 
> to use normally the RAM. We may even be able to fix XSA-300!
>
> Cheers,
>
> [1] <YJ3jlGSxs60Io+dp@mattapan.m5p.com>
>
-- 
Regards,

Oleksandr Tyshchenko



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 17:15:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 17:15:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162623.298175 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9W5u-00037Q-AM; Fri, 30 Jul 2021 17:14:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162623.298175; Fri, 30 Jul 2021 17:14:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9W5u-00037J-6S; Fri, 30 Jul 2021 17:14:46 +0000
Received: by outflank-mailman (input) for mailman id 162623;
 Fri, 30 Jul 2021 17:14:44 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>) id 1m9W5s-00037D-Qv
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 17:14:44 +0000
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m9W5r-0007nV-G9; Fri, 30 Jul 2021 17:14:43 +0000
Received: from 54-240-197-230.amazon.com ([54.240.197.230]
 helo=a483e7b01a66.ant.amazon.com)
 by xenbits.xenproject.org with esmtpsa
 (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92)
 (envelope-from <julien@xen.org>)
 id 1m9W5r-0008WV-9u; Fri, 30 Jul 2021 17:14:43 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xen.org;
	s=20200302mail; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:
	MIME-Version:Date:Message-ID:From:References:Cc:To:Subject;
	bh=awmYRQXf2EgzawXjK3Ac8YHe+leA+8ZV8uM1p3Snf/I=; b=R/99Kifesk/byYQpn3zA0G5uN8
	IeavFP/FKm6NmVEKQDW4mIbryx34WFv9QoUGc8Qsv1u+Bxc7DgH61tCv1b4SdU35C2w7RV0KLDFTr
	rCDEOTEdYCZHVbzP8THgZgl3B0sJH262oRyPkNlagsDu9ogl13KefvwDxHSlH69vBiUc=;
Subject: Re: [PATCH v3 2/2] tools/xenstore: set open file descriptor limit for
 xenstored
To: Ian Jackson <iwj@xenproject.org>, Juergen Gross <jgross@suse.com>
Cc: xen-devel@lists.xenproject.org, Wei Liu <wl@xen.org>
References: <20210730122643.2043-1-jgross@suse.com>
 <20210730122643.2043-3-jgross@suse.com>
 <24836.28.655841.510063@mariner.uk.xensource.com>
From: Julien Grall <julien@xen.org>
Message-ID: <81a39ab5-5588-65ad-f1a1-7bfe0379b394@xen.org>
Date: Fri, 30 Jul 2021 18:14:41 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
MIME-Version: 1.0
In-Reply-To: <24836.28.655841.510063@mariner.uk.xensource.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-GB
Content-Transfer-Encoding: 7bit

Hi Ian,

On 30/07/2021 14:35, Ian Jackson wrote:
> Juergen Gross writes ("[PATCH v3 2/2] tools/xenstore: set open file descriptor limit for xenstored"):
>> Add a configuration item for the maximum number of domains xenstored
>> should support and set the limit of open file descriptors accordingly.
>>
>> For HVM domains there are up to 5 socket connections per domain (2 by
>> the xl daemon process, and 3 by qemu). So set the ulimit for xenstored
>> to 5 * XENSTORED_MAX_DOMAINS + 100 (the "+ 100" is for some headroom,
>> like logging, event channel device, etc.).
> ...
>> +## Type: integer
>> +## Default: 32768
>> +#
>> +# Select maximum number of domains supported by xenstored.
>> +# Only evaluated if XENSTORETYPE is "daemon".
>> +#XENSTORED_MAX_N_DOMAINS=32768
> 
> I approve of doing something about the fd limit.  I have some qualms
> about the documentation.
> 
> The documentation doesn't say what happens if this limit is exceeded.
> Also the default of 32758 suggests that we actually support that many
> domains.  I don't think we do...
> 
> I didn't find anything in SUPPORT.md about how many guests we support
> but I wouldn't want this setting here to imply full support for 32768
> domains.
> 
> If you don't want to tackle this can of works, maybe add this:
> 
>    # This just controls some resource limits for xenstored; if the
>    # limit is exceeded, xenstored will stop being able to function
>    # properly for additional guests.  The default value is so large
>    # that it won't be exceeded in a supported configuration, but
>    # should not be taken to mean that the whole Xen system is
>    # guaranteed to work properly with that many guests.
> 
> Julien, did you ask for this to be made configurable ?  Having written
> the text above, I wonder if it wouldn't just be better to
> unconditionally set it to "unlimited" rather than offering footgun
> dressed up like a tuneable...

So in v1 (see [1]), Juergen wanted to raise the limit. I assumed this 
meant that the default limit (configured by the system may not be enough).

I felt this was wrong to impose an higher limit on everyone when an 
admin may know the maximum number of domains.

By "unlimited", do you mean the calling "ulimit" (or whatever is used 
for configuring FDs) with unlimited?

If so, I would be OK with that. My main was was to move the raising the 
limit outside Xenstored because:
  1) This is easier for an admin to tweak it (in particular the OOM)
  2) It feels wrong to me that the daemon chose the limits
  3) An admin can enforce it

Cheers,

[1] 1e38cce0-6960-ac21-b349-dac8551e23ed@xen.org

-- 
Julien Grall


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 17:49:36 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 17:49:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162631.298186 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9WdW-0006EI-09; Fri, 30 Jul 2021 17:49:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162631.298186; Fri, 30 Jul 2021 17:49:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9WdV-0006EB-TY; Fri, 30 Jul 2021 17:49:29 +0000
Received: by outflank-mailman (input) for mailman id 162631;
 Fri, 30 Jul 2021 17:49:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=kLoK=MW=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m9WdU-0006E5-8W
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 17:49:28 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f090acba-91aa-4412-8186-e0f6108b1f07;
 Fri, 30 Jul 2021 17:49:26 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9Wcc-00064T-I3; Fri, 30 Jul 2021 19:48:34 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9WcO-0005qH-Ky; Fri, 30 Jul 2021 19:48:20 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9WcO-00079n-I5; Fri, 30 Jul 2021 19:48:20 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f090acba-91aa-4412-8186-e0f6108b1f07
Date: Fri, 30 Jul 2021 19:48:20 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Alexander Duyck <alexanderduyck@fb.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Sathya Prakash <sathya.prakash@broadcom.com>,
	oss-drivers@corigine.com, Oliver O'Halloran <oohall@gmail.com>,
	Russell Currey <ruscur@russell.cc>, Jiri Olsa <jolsa@redhat.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	linux-perf-users@vger.kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	linux-scsi@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Ido Schimmel <idosch@nvidia.com>, x86@kernel.org,
	qat-linux@intel.com,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-pci@vger.kernel.org, linux-wireless@vger.kernel.org,
	Jakub Kicinski <kuba@kernel.org>,
	Mathias Nyman <mathias.nyman@intel.com>,
	Yisen Zhuang <yisen.zhuang@huawei.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Andrew Donnellan <ajd@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
	Simon Horman <simon.horman@corigine.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Borislav Petkov <bp@alien8.de>, Michael Buesch <m@bues.ch>,
	Jiri Pirko <jiri@nvidia.com>, Bjorn Helgaas <bhelgaas@google.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Juergen Gross <jgross@suse.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
	xen-devel@lists.xenproject.org, Vadym Kochan <vkochan@marvell.com>,
	MPT-FusionLinux.pdl@broadcom.com,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org,
	Wojciech Ziemba <wojciech.ziemba@intel.com>,
	linux-kernel@vger.kernel.org, Taras Chornyi <tchornyi@marvell.com>,
	Zhou Wang <wangzhou1@hisilicon.com>, linux-crypto@vger.kernel.org,
	kernel@pengutronix.de, netdev@vger.kernel.org,
	Frederic Barrat <fbarrat@linux.ibm.com>,
	Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH v1 0/5] PCI: Drop duplicated tracking of a pci_dev's
 bound driver
Message-ID: <20210730174820.i6ycjyvyzxcxwxsc@pengutronix.de>
References: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
 <YQOy/OTvY66igEoe@smile.fi.intel.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="t5ueb7xyetl6m7j3"
Content-Disposition: inline
In-Reply-To: <YQOy/OTvY66igEoe@smile.fi.intel.com>
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org


--t5ueb7xyetl6m7j3
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi Andy,

On Fri, Jul 30, 2021 at 11:06:20AM +0300, Andy Shevchenko wrote:
> On Thu, Jul 29, 2021 at 10:37:35PM +0200, Uwe Kleine-K=F6nig wrote:
> > struct pci_dev tracks the bound pci driver twice. This series is about
> > removing this duplication.
> >=20
> > The first two patches are just cleanups. The third patch introduces a
> > wrapper that abstracts access to struct pci_dev->driver. In the next
> > patch (hopefully) all users are converted to use the new wrapper and
> > finally the fifth patch removes the duplication.
> >=20
> > Note this series is only build tested (allmodconfig on several
> > architectures).
> >=20
> > I'm open to restructure this series if this simplifies things. E.g. the
> > use of the new wrapper in drivers/pci could be squashed into the patch
> > introducing the wrapper. Patch 4 could be split by maintainer tree or
> > squashed into patch 3 completely.
>=20
> I see only patch 4 and this cover letter...

The full series is available at

	https://lore.kernel.org/linux-pci/20210729203740.1377045-1-u.kleine-koenig=
@pengutronix.de/

All patches but #4 only touch drivers/pci/ (and include/linux/pci.h) and
it seemed excessive to me to send all patches to all people. It seems at
least for you I balanced this wrongly. The short version is that patch
#3 introduces

	+#define pci_driver_of_dev(pdev) ((pdev)->driver)

which allows to do the stuff done in patch #4 and then patch #5 does

	-#define pci_driver_of_dev(pdev) ((pdev)->driver)
	+#define pci_driver_of_dev(pdev) ((pdev)->dev.driver ? to_pci_driver((pdev=
)->dev.driver) : NULL)

plus some cleanups.

If you want I can send you a bounce (or you try

	b4 am 20210729203740.1377045-1-u.kleine-koenig@pengutronix.de

).

Best regards and thanks for caring,
Uwe

--=20
Pengutronix e.K.                           | Uwe Kleine-K=F6nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

--t5ueb7xyetl6m7j3
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmEEO2EACgkQwfwUeK3K
7AkOCgf/UKvRbSIrjjdKl0HWJofJEfaXlbATSgBausmxV/dcXsg1sLkhkpTN66bG
WmAdhFN03Vtx3jHKeYtgo3x8g39nfYT4NmlYTNumgxTow6TESnJxbYewE3i0alrR
Jv0JvBFhUaXj++XetOVHn9f5/t7o5NL/XSF5DTwQM8lZ5skmA2+XXea8lU0IFufZ
uTi0XA3G5BNhyU6RiehvnN59J6QCN3CIVqajOrZbqf33jiiyCTDf2tEqCYRbv1vJ
zqt7zYp05RtUaqNKe9oH4N4UFCdChrjZlFP7w7gyqM6Jh/wOSERlVdpocf0BGClR
W6o7YIB7QFf+ByIxy6hIBeXnaPaDFQ==
=oi24
-----END PGP SIGNATURE-----

--t5ueb7xyetl6m7j3--


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 18:35:12 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 18:35:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162639.298199 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9XLW-0002X9-Gh; Fri, 30 Jul 2021 18:34:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162639.298199; Fri, 30 Jul 2021 18:34:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9XLW-0002X2-DQ; Fri, 30 Jul 2021 18:34:58 +0000
Received: by outflank-mailman (input) for mailman id 162639;
 Fri, 30 Jul 2021 18:34:56 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9XLU-0002Ws-Sh; Fri, 30 Jul 2021 18:34:56 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9XLU-0000ov-MA; Fri, 30 Jul 2021 18:34:56 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9XLT-000373-Me; Fri, 30 Jul 2021 18:34:55 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9XLT-0003JD-M9; Fri, 30 Jul 2021 18:34:55 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=mahipg2RSW0X12oS7RM+6+NYN9HtZd/AP1dIYFddrpI=; b=SEyv5ShjOZv4M3cYOIQ3NaTx5i
	6ml22JuHGvzHwd41eraB/6vqztli6wnElhgMbISFL+xzA7bL8mcE0NPYNacTZbcIwwl87MapNWMT/
	f9Njx1FadQcJheWPxFaOuCZtCBXN4o3s4XRwipvAL1fbvcca8sBvHROlnEZe4nIC5aUE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164054-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 164054: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=604551fb763c4c70123f642a9b2866890790e2b2
X-Osstest-Versions-That:
    xen=3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 18:34:55 +0000

flight 164054 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164054/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  604551fb763c4c70123f642a9b2866890790e2b2
baseline version:
 xen                  3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e

Last test of basis   164053  2021-07-30 10:02:51 Z    0 days
Testing same since   164054  2021-07-30 14:01:37 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Julien Grall <jgrall@amazon.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   3747a2bb67..604551fb76  604551fb763c4c70123f642a9b2866890790e2b2 -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 19:35:18 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 19:35:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162648.298213 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9YHj-00085D-R2; Fri, 30 Jul 2021 19:35:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162648.298213; Fri, 30 Jul 2021 19:35:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9YHj-000856-Nn; Fri, 30 Jul 2021 19:35:07 +0000
Received: by outflank-mailman (input) for mailman id 162648;
 Fri, 30 Jul 2021 19:35:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <SRS0=F32Y=MW=gmail.com=scottwd@srs-us1.protection.inumbo.net>)
 id 1m9YHi-000850-FO
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 19:35:06 +0000
Received: from mail-qt1-x82e.google.com (unknown [2607:f8b0:4864:20::82e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 36607801-a506-44f1-b562-cfa8f5b5705d;
 Fri, 30 Jul 2021 19:35:04 +0000 (UTC)
Received: by mail-qt1-x82e.google.com with SMTP id g11so7202577qts.11
 for <xen-devel@lists.xenproject.org>; Fri, 30 Jul 2021 12:35:04 -0700 (PDT)
Received: from lagunitas.localdomain
 (96-95-26-25-static.hfc.comcastbusiness.net. [96.95.26.25])
 by smtp.gmail.com with ESMTPSA id d28sm1404294qkj.25.2021.07.30.12.35.01
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 30 Jul 2021 12:35:02 -0700 (PDT)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 36607801-a506-44f1-b562-cfa8f5b5705d
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=1/GU6ELIB9q/0G07qNsLe1tQU6fN+0eUqQiM1oZsAv4=;
        b=n/8FKe/dcZ23C2xSLd6u6VVfIFEH/U7nKloAQiqQOBi2910P4OILLiS7k4f9LT+OfF
         I2YFrOSEWFHH0wWLa6202+O0iTo/dbrIkHQ0OopCciThFVNtc3JlN2prNXvOZQwHV603
         nJxi+CT6ykABMz4WK1ErIgarFZcjUatxyFYNzkXs19P+UZjbwMbzThyP9DGtgaGTQOwY
         Bzb1fVhgkvaTTu/lqsBXALnFtpC6CvyqU5Jhej2WLjG5qrLw9q4Nqti5yNW00jgyH///
         XO7/2o6iPjMcGbxz/eaikCPgRqba7SyVHlo5d88UvfI8i/Vo9ViXfe/hLoqAhX6Y/wbt
         dcVg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version
         :content-transfer-encoding;
        bh=1/GU6ELIB9q/0G07qNsLe1tQU6fN+0eUqQiM1oZsAv4=;
        b=MvUad2Y7XukIdp0bO5seJcardAPSOyaq6Cqv54Nmz0vl+cdJzWSnKKDZ1BDjwYhXCj
         MFTPMK+AHanJ9FcghnNczPEkt/gUSvLCOW7xWx6gSVHfVTz3ToLj4hoPSv7OxdkWRl3L
         kCXVXCmCqS/OUw6SMbj21V6jxEmYczqPTn1rLHZHxqz9yHaZiYTpL3pEl6ZIW2mxH7Rf
         64iiClSlevG/doSXAwIIMjAGv30tXVQKYofyMqKFST4iWfeLDkkHbtLAWxtUP7rdIbQY
         XltAAANPFzSCa8kl0FLwIJFX85PU13nxz6nCJ0+0N+oFcz0ElMQ4PqkZPOAl+84yKiVJ
         mB2w==
X-Gm-Message-State: AOAM532U4Hff6/ZRH0UgTO9N0SnwUFnn+Y0e4jNn3LFWcu5agjRY9Vjp
	f0L8xblt/LJRfWzlel/mCZhUytFmF+PLUjdm
X-Google-Smtp-Source: ABdhPJz+UCmcI4QUqOhmpcfLnsSeH5Yyj0FB62CxAYeFYM1c3tggZSnE6W4S9Wkbm/wPjQ06UxXM3Q==
X-Received: by 2002:ac8:66ca:: with SMTP id m10mr3649155qtp.171.1627673703668;
        Fri, 30 Jul 2021 12:35:03 -0700 (PDT)
From: Scott Davis <scottwd@gmail.com>
X-Google-Original-From: Scott Davis <scott.davis@starlab.io>
To: xen-devel@lists.xenproject.org
Cc: Scott Davis <scott.davis@starlab.io>,
	Ian Jackson <iwj@xenproject.org>,
	Wei Liu <wl@xen.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Nick Rosbrook <rosbrookn@ainfosec.com>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Juergen Gross <jgross@suse.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	"Daniel P . Smith" <dpsmith@apertussolutions.com>,
	Jason Andryuk <jandryuk@gmail.com>,
	=?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [PATCH v2] tools/xl: Add device_model_stubdomain_init_seclabel option to xl.cfg
Date: Fri, 30 Jul 2021 15:34:02 -0400
Message-Id: <edb72ed62c7c1154d5ed282e57e1750b6d79fa15.1627672412.git.scott.davis@starlab.io>
X-Mailer: git-send-email 2.25.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

This adds an option to the xl domain configuration syntax for specifying
a build-time XSM security label for device-model stubdomains separate
from the run-time label specified by 'device_model_stubdomain_seclabel'.
Fields are also added to the 'libxl_domain_build_info' struct to contain
the new information, and a new call to 'xc_flask_relabel_domain'
inserted to affect the change at the appropriate time.

The device-model stubdomain is relabeled at the same time as its guest,
just before the guest is unpaused. This requires the stubdomain itself
to be unpaused and run for a short time prior to being relabeled, but
allows PCI device assignments specified in xl.cfg to be completed prior
to relabeling. This choice allows the privileges required to perform
assignments to be dropped in the relabeling.

The implementation mirrors that of the 'seclabel' and 'init_seclabel'
options for user domains. When all used in concert, this enables the
creation of security policies that minimize run-time privileges between
the toolstack domain, device-model stubdomains, and user domains.

Signed-off-by: Scott Davis <scott.davis@starlab.io>
---
Changes in v2:
- removed superfluous chanegs to libxl_dm.c
- changed all security label lookup failures due to FLASK being disabled
  from warnings to hard errors based on mailing list discussion
- added discussion of relabel point to commit message
---
 docs/man/xl.cfg.5.pod.in             | 10 +++++++
 tools/golang/xenlight/helpers.gen.go |  5 ++++
 tools/golang/xenlight/types.gen.go   |  2 ++
 tools/include/libxl.h                | 10 +++++++
 tools/libs/light/libxl_create.c      | 42 ++++++++++++++++++++--------
 tools/libs/light/libxl_types.idl     |  2 ++
 tools/xl/xl_parse.c                  | 12 +++++++-
 7 files changed, 71 insertions(+), 12 deletions(-)

diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in
index 4b1e3028d2..7c8a696d61 100644
--- a/docs/man/xl.cfg.5.pod.in
+++ b/docs/man/xl.cfg.5.pod.in
@@ -2766,6 +2766,16 @@ you have selected.
 
 Assign an XSM security label to the device-model stubdomain.
 
+=item B<device_model_stubdomain_init_seclabel="LABEL">
+
+Specify a temporary XSM security label for the device-model stubdomain used
+during creation of it and its associated guest. The stubdomain's XSM label will
+then be changed to the execution seclabel (as specified by
+B<device_model_stubdomain_seclabel>) once creation is complete, prior to
+unpausing the stubdomain's guest. With proper (re)labeling, a security policy
+can be constructed that minimizes run-time privileges between the toolstack
+domain, device-model stubdomains, and user domains.
+
 =item B<device_model_args=[ "ARG", "ARG", ...]>
 
 Pass additional arbitrary options on the device-model command
diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
index bfc1e7f312..a70eb5eb58 100644
--- a/tools/golang/xenlight/helpers.gen.go
+++ b/tools/golang/xenlight/helpers.gen.go
@@ -1023,6 +1023,8 @@ x.StubdomainRamdisk = C.GoString(xc.stubdomain_ramdisk)
 x.DeviceModel = C.GoString(xc.device_model)
 x.DeviceModelSsidref = uint32(xc.device_model_ssidref)
 x.DeviceModelSsidLabel = C.GoString(xc.device_model_ssid_label)
+x.DeviceModelExecSsidref = uint32(xc.device_model_exec_ssidref)
+x.DeviceModelExecSsidLabel = C.GoString(xc.device_model_exec_ssid_label)
 x.DeviceModelUser = C.GoString(xc.device_model_user)
 if err := x.Extra.fromC(&xc.extra);err != nil {
 return fmt.Errorf("converting field Extra: %v", err)
@@ -1354,6 +1356,9 @@ xc.device_model = C.CString(x.DeviceModel)}
 xc.device_model_ssidref = C.uint32_t(x.DeviceModelSsidref)
 if x.DeviceModelSsidLabel != "" {
 xc.device_model_ssid_label = C.CString(x.DeviceModelSsidLabel)}
+xc.device_model_exec_ssidref = C.uint32_t(x.DeviceModelExecSsidref)
+if x.DeviceModelExecSsidLabel != "" {
+xc.device_model_exec_ssid_label = C.CString(x.DeviceModelExecSsidLabel)}
 if x.DeviceModelUser != "" {
 xc.device_model_user = C.CString(x.DeviceModelUser)}
 if err := x.Extra.toC(&xc.extra); err != nil {
diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go
index 09a3bb67e2..a76570cae7 100644
--- a/tools/golang/xenlight/types.gen.go
+++ b/tools/golang/xenlight/types.gen.go
@@ -488,6 +488,8 @@ StubdomainRamdisk string
 DeviceModel string
 DeviceModelSsidref uint32
 DeviceModelSsidLabel string
+DeviceModelExecSsidref uint32
+DeviceModelExecSsidLabel string
 DeviceModelUser string
 Extra StringList
 ExtraPv StringList
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index b9ba16d698..ca3ec3e53d 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1081,6 +1081,16 @@ typedef struct libxl__ctx libxl_ctx;
  */
 #define LIBXL_HAVE_SSID_LABEL 1
 
+/*
+ * LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN_EXEC_SSID
+ *
+ * If this is defined, then the libxl_domain_build_info structure will
+ * contain 'device_model_exec_ssidref' and 'device_model_exec_ssid_label' for
+ * specifying a run-time XSM security label separate from the build-time label
+ * specified in 'device_model_ssidref' and 'device_model_ssid_label'.
+ */
+#define LIBXL_HAVE_BUILDINFO_DEVICE_MODEL_STUBDOMAIN_EXEC_SSID 1
+
 /*
  * LIBXL_HAVE_CPUPOOL_NAME
  *
diff --git a/tools/libs/light/libxl_create.c b/tools/libs/light/libxl_create.c
index e356b2106d..892527c4b4 100644
--- a/tools/libs/light/libxl_create.c
+++ b/tools/libs/light/libxl_create.c
@@ -1032,12 +1032,11 @@ int libxl__domain_config_setdefault(libxl__gc *gc,
                                          &d_config->c_info.ssidref);
         if (ret) {
             if (errno == ENOSYS) {
-                LOGD(WARN, domid, "XSM Disabled: init_seclabel not supported");
-                ret = 0;
+                LOGD(ERROR, domid, "XSM Disabled: init_seclabel not supported");
             } else {
                 LOGD(ERROR, domid, "Invalid init_seclabel: %s", s);
-                goto error_out;
             }
+            goto error_out;
         }
     }
 
@@ -1047,12 +1046,11 @@ int libxl__domain_config_setdefault(libxl__gc *gc,
                                          &d_config->b_info.exec_ssidref);
         if (ret) {
             if (errno == ENOSYS) {
-                LOGD(WARN, domid, "XSM Disabled: seclabel not supported");
-                ret = 0;
+                LOGD(ERROR, domid, "XSM Disabled: seclabel not supported");
             } else {
                 LOGD(ERROR, domid, "Invalid seclabel: %s", s);
-                goto error_out;
             }
+            goto error_out;
         }
     }
 
@@ -1062,14 +1060,30 @@ int libxl__domain_config_setdefault(libxl__gc *gc,
                                          &d_config->b_info.device_model_ssidref);
         if (ret) {
             if (errno == ENOSYS) {
-                LOGD(WARN, domid,
-                     "XSM Disabled: device_model_stubdomain_seclabel not supported");
-                ret = 0;
+                LOGD(ERROR, domid,
+                     "XSM Disabled: device_model_stubdomain_init_seclabel not supported");
             } else {
-                LOGD(ERROR, domid, "Invalid device_model_stubdomain_seclabel: %s", s);
+                LOGD(ERROR, domid,
+                     "Invalid device_model_stubdomain_init_seclabel: %s", s);
+            }
             goto error_out;
         }
     }
+
+    if (d_config->b_info.device_model_exec_ssid_label) {
+        char *s = d_config->b_info.device_model_exec_ssid_label;
+        ret = libxl_flask_context_to_sid(ctx, s, strlen(s),
+                                         &d_config->b_info.device_model_exec_ssidref);
+        if (ret) {
+            if (errno == ENOSYS) {
+                LOGD(ERROR, domid,
+                     "XSM Disabled: device_model_stubdomain_seclabel not supported");
+            } else {
+                LOGD(ERROR, domid,
+                     "Invalid device_model_stubdomain_seclabel: %s", s);
+            }
+            goto error_out;
+        }
     }
 
     if (d_config->c_info.pool_name) {
@@ -1935,7 +1949,13 @@ static void domcreate_complete(libxl__egc *egc,
     libxl__domain_build_state_dispose(&dcs->build_state);
 
     if (!rc && d_config->b_info.exec_ssidref)
-        rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid, d_config->b_info.exec_ssidref);
+        rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid,
+                                     d_config->b_info.exec_ssidref);
+
+    if (!rc && dcs->sdss.pvqemu.guest_domid != INVALID_DOMID &&
+        d_config->b_info.device_model_exec_ssidref)
+        rc = xc_flask_relabel_domain(CTX->xch, dcs->sdss.pvqemu.guest_domid,
+                                     d_config->b_info.device_model_exec_ssidref);
 
     bool retain_domain = !rc || rc == ERROR_ABORTED;
 
diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl
index 3f9fff653a..490d0fa059 100644
--- a/tools/libs/light/libxl_types.idl
+++ b/tools/libs/light/libxl_types.idl
@@ -529,6 +529,8 @@ libxl_domain_build_info = Struct("domain_build_info",[
     ("device_model",     string),
     ("device_model_ssidref", uint32),
     ("device_model_ssid_label", string),
+    ("device_model_exec_ssidref",    uint32),
+    ("device_model_exec_ssid_label", string),
     ("device_model_user", string),
 
     # extra parameters pass directly to qemu, NULL terminated
diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
index 17dddb4cd5..211fcdc0c8 100644
--- a/tools/xl/xl_parse.c
+++ b/tools/xl/xl_parse.c
@@ -2523,10 +2523,20 @@ skip_usbdev:
     xlu_cfg_get_defbool (config, "device_model_stubdomain_override",
                          &b_info->device_model_stubdomain, 0);
 
-    if (!xlu_cfg_get_string (config, "device_model_stubdomain_seclabel",
+    if (!xlu_cfg_get_string (config, "device_model_stubdomain_init_seclabel",
                              &buf, 0))
+        xlu_cfg_replace_string(config, "device_model_stubdomain_init_seclabel",
+                               &b_info->device_model_ssid_label, 0);
+
+    if (!xlu_cfg_get_string (config, "device_model_stubdomain_seclabel",
+                             &buf, 0)) {
+        if (b_info->device_model_ssid_label)
+            xlu_cfg_replace_string(config, "device_model_stubdomain_seclabel",
+                                   &b_info->device_model_exec_ssid_label, 0);
+        else
             xlu_cfg_replace_string(config, "device_model_stubdomain_seclabel",
                                    &b_info->device_model_ssid_label, 0);
+    }
 
     xlu_cfg_replace_string(config, "device_model_user",
                            &b_info->device_model_user, 0);
-- 
2.25.1



From xen-devel-bounces@lists.xenproject.org Fri Jul 30 20:39:11 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 20:39:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162662.298226 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9ZHU-0005MR-Oq; Fri, 30 Jul 2021 20:38:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162662.298226; Fri, 30 Jul 2021 20:38:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9ZHU-0005MK-LA; Fri, 30 Jul 2021 20:38:56 +0000
Received: by outflank-mailman (input) for mailman id 162662;
 Fri, 30 Jul 2021 20:38:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=M3Ze=MW=oracle.com=boris.ostrovsky@srs-us1.protection.inumbo.net>)
 id 1m9ZHT-0005ME-Dw
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 20:38:55 +0000
Received: from mx0b-00069f02.pphosted.com (unknown [205.220.177.32])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 275bd78c-f176-11eb-98f0-12813bfff9fa;
 Fri, 30 Jul 2021 20:38:53 +0000 (UTC)
Received: from pps.filterd (m0246631.ppops.net [127.0.0.1])
 by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16UKa7r2013229; Fri, 30 Jul 2021 20:37:42 GMT
Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71])
 by mx0b-00069f02.pphosted.com with ESMTP id 3a488da6us-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Fri, 30 Jul 2021 20:37:42 +0000
Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1])
 by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16UKZpMW026681;
 Fri, 30 Jul 2021 20:37:41 GMT
Received: from nam11-dm6-obe.outbound.protection.outlook.com
 (mail-dm6nam11lp2177.outbound.protection.outlook.com [104.47.57.177])
 by aserp3030.oracle.com with ESMTP id 3a4ngv12th-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);
 Fri, 30 Jul 2021 20:37:41 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com (2603:10b6:208:321::10)
 by MN2PR10MB4253.namprd10.prod.outlook.com (2603:10b6:208:1d6::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.21; Fri, 30 Jul
 2021 20:37:39 +0000
Received: from BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0]) by BLAPR10MB5009.namprd10.prod.outlook.com
 ([fe80::f10d:29d2:cb38:ed0%8]) with mapi id 15.20.4373.025; Fri, 30 Jul 2021
 20:37:38 +0000
Received: from [10.74.103.140] (160.34.89.140) by
 CH0PR03CA0207.namprd03.prod.outlook.com (2603:10b6:610:e4::32) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4373.18 via Frontend Transport; Fri, 30 Jul 2021 20:37:33 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 275bd78c-f176-11eb-98f0-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2021-07-09;
 bh=WQqZO2vXgRMAEHOwfeKW9pvCxNym6y/aItCMeaAsAXU=;
 b=olBVhedoSR0HyLxxaOOgS/a493vrgoE/vHjB1qCQMRSOSMkXWtAMIIzT/mgyAUMlX2a+
 4R7x0iCWahUWZ2JGvCB3NkCUA4h6KThCiDqWSXf6OXTxu6pBBRAgG5SM0JP5zsymF4RN
 tKDuJxLyG8GE4VZxGTolR8vFsrBaLzpG3S5CRhNPsQqcDYBpsyiTcsNpRKVSaCq196Au
 oKSySFhUaitkfkM+jyqM+0QQi40s8xw+0oFUC7kD2AlEM3aiA8QYAeVGTgzVyv+HT2cD
 w6/fK3xgCh4LttpWT0ZXWGViQl6mOqpN14tSjsL29h7b18f4IrL48GZkoEw/vf1E/Ju9 OA== 
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc :
 references : from : message-id : date : in-reply-to : content-type :
 content-transfer-encoding : mime-version; s=corp-2020-01-29;
 bh=WQqZO2vXgRMAEHOwfeKW9pvCxNym6y/aItCMeaAsAXU=;
 b=gR7P6ADvIldouOpafOj/tiG2rFjyQCQdqDp7kgnnyKPCov4DwD4ZvRkeLdokRmTnOSoW
 dCbGXm5i+9iW00b7G9zuek/bRuoFjBonzDgZdbnYNUp2n9gPNNiBlhdHLqG3GkZ9xgXM
 aeIkjbUEpQClN74QIFlBB1dQdEXUVpG+8b5Zv8+paXELjvWPmWHDBpBbIwcqjUuUl7+f
 WiVxHv5YwDpnI1gLp+zv0Iw0KmYSp7+5vEd3anfI63XBw+hmUPiVJK7z4gkYA41sTAqj
 ennltRZ+OkjZ+KOHmu8L0R3e99nSb2qaSuc+7UuCx8UuyVZBWM5UVEN0VXdZKHrFbEf/ mQ== 
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OwwTLA62HnA7D6mAwuAHj/MSfi+6JM6uBib2mZgfGOBl4fJfVuVGnL97TUyi+zVoZUYlmC+m99q/W3FyydP2mnWkEIeF5SOsfW+hwPeUgG2FLzJiH1qMjD3pOTP2Q6dtIvHLNS/3pDhYo7TK+MlmjgKHF5UVll/FhjP9j6G+VWcsaagoxhFSY/KRWVuZAKfwuOAb+UB5OIfT7eCCcI9ljc3w2u1HwSz7Lmk+/8hAS9srVCrEas0u0Q+SUMp5kpjr6+bK27vRLBK9LFW6tyOAPiIRwFuPbs7ptA63ttyNWsdETPPZFQqKCX7CDH3NQvs9akHd+gUqxuQyDO01sGCMmg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WQqZO2vXgRMAEHOwfeKW9pvCxNym6y/aItCMeaAsAXU=;
 b=AJ+Ura8vH5oA34c9wvlKyuwRSyqVVWtOGQQfdzmIHlCYhj7iqVjksaXML8VSA91MwqJy10MEfQnxGE2ROrsBl51npCcCV/Ik26uRDGpJqXevx16Sd1ze5T6hpVugyVA34NAwsuj48fXHGJJUPAYGK+g6qNvAKPVYHTJmKd0Hj/RAMP3ViE64IeicB7vVx5h8xfJF5HXcBeqgzkww+aQO9Tp7wQHJ3GxxytRdUWqErKnWoRgzjLx4I16AIrA0/Kxp4JnKOPGlGrHx1unlaJnwXUfH7Fj7muWT5mXcErxqmUuPeFKwsJdl/F8LizQuDSI2dfNKVmtY+PngEYA7QrXdjQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;
 dkim=pass header.d=oracle.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=WQqZO2vXgRMAEHOwfeKW9pvCxNym6y/aItCMeaAsAXU=;
 b=M3qwMaSy1cNSgKlaKFRGkoV871IF3xOdtm1/pORV0cUKxkegNdV9N7V5yNfSk/IWti6yt86e0ouiK/cD+Fck/+RKYB1Hrkk9ZmzIEzpYGv7SPFU5UatApjCE1DV8Vb1o6/w0J3JT5uE6cdRokxC5r5dURfa5Cp3y7wijRbEf2vI=
Authentication-Results: vger.kernel.org; dkim=none (message not signed)
 header.d=none;vger.kernel.org; dmarc=none action=none header.from=oracle.com;
Subject: Re: [PATCH v1 4/5] PCI: Adapt all code locations to not use struct
 pci_dev::driver directly
To: =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= <u.kleine-koenig@pengutronix.de>,
        Bjorn Helgaas <bhelgaas@google.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>, kernel@pengutronix.de,
        Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
        linux-pci@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
        Benjamin Herrenschmidt <benh@kernel.crashing.org>,
        Paul Mackerras <paulus@samba.org>, Russell Currey <ruscur@russell.cc>,
        Oliver O'Halloran <oohall@gmail.com>,
        Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>,
        Arnaldo Carvalho de Melo <acme@kernel.org>,
        Mark Rutland <mark.rutland@arm.com>,
        Alexander Shishkin <alexander.shishkin@linux.intel.com>,
        Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
        Thomas Gleixner <tglx@linutronix.de>, Borislav Petkov <bp@alien8.de>,
        x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
        =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
        Zhou Wang <wangzhou1@hisilicon.com>,
        Herbert Xu
 <herbert@gondor.apana.org.au>,
        "David S. Miller" <davem@davemloft.net>,
        Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
        Sathya Prakash <sathya.prakash@broadcom.com>,
        Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
        Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
        Frederic Barrat <fbarrat@linux.ibm.com>,
        Andrew Donnellan
 <ajd@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
        Yisen Zhuang <yisen.zhuang@huawei.com>,
        Salil Mehta
 <salil.mehta@huawei.com>,
        Jakub Kicinski <kuba@kernel.org>, Vadym Kochan <vkochan@marvell.com>,
        Taras Chornyi <tchornyi@marvell.com>, Jiri Pirko <jiri@nvidia.com>,
        Ido Schimmel <idosch@nvidia.com>,
        Simon Horman <simon.horman@corigine.com>,
        Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
        Juergen Gross <jgross@suse.com>,
        Stefano Stabellini
 <sstabellini@kernel.org>,
        Michael Buesch <m@bues.ch>, Mathias Nyman <mathias.nyman@intel.com>,
        Fiona Trahe
 <fiona.trahe@intel.com>,
        Andy Shevchenko <andriy.shevchenko@intel.com>,
        Wojciech Ziemba <wojciech.ziemba@intel.com>,
        Alexander Duyck <alexanderduyck@fb.com>, linuxppc-dev@lists.ozlabs.org,
        linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
        linux-wireless@vger.kernel.org, linux-crypto@vger.kernel.org,
        qat-linux@intel.com, MPT-FusionLinux.pdl@broadcom.com,
        linux-scsi@vger.kernel.org, netdev@vger.kernel.org,
        oss-drivers@corigine.com, xen-devel@lists.xenproject.org,
        linux-usb@vger.kernel.org
References: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
 <20210729203740.1377045-5-u.kleine-koenig@pengutronix.de>
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Message-ID: <2b5e8cb5-fac2-5da2-f87b-d287d2c5ea81@oracle.com>
Date: Fri, 30 Jul 2021 16:37:31 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0)
 Gecko/20100101 Thunderbird/78.12.0
In-Reply-To: <20210729203740.1377045-5-u.kleine-koenig@pengutronix.de>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Language: en-US
X-ClientProxiedBy: CH0PR03CA0207.namprd03.prod.outlook.com
 (2603:10b6:610:e4::32) To BLAPR10MB5009.namprd10.prod.outlook.com
 (2603:10b6:208:321::10)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 96576103-4114-4377-14bd-08d95399dedd
X-MS-TrafficTypeDiagnostic: MN2PR10MB4253:
X-MS-Exchange-Transport-Forked: True
X-Microsoft-Antispam-PRVS: 
	<MN2PR10MB4253B4C0F753BFF1FA01C0B38AEC9@MN2PR10MB4253.namprd10.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2887;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 
	s6ovWgFeuFXbSv56/21AW+kfDUirYVwOPMw5MTa/HnbouQolX0Q48Fc4cLIkdalDaE1j2C2BIBId9QbD6Jd+F6lOrw35+RryNbJ1G8epQziPi4gZAfSOlZZeLnEzKCTJ90ascCHYrReDB4HLVBZH6Huv91YItm4KenDYCoSWBhj7W6IUzH+BUOe+a/L9gF0u785j8yaFEF2PN9rK42iFyTQTuwPmwP1h5S/rxodsSYfKgEh8S926zVQha7qxnCaUpRCMJ6lu62nuaQKAY/2srG5fMMN1gBlRlFTOvaIwVZokZLxQ2gFWjaFIj+XFPfezwAG+zww1EUu6b4ghgp+mSVNobpOJftrgfhMjut93w2jDWWxILz5cE4NW3GsoM+pk2d3xPanaRjawdmOPNLTnr0HBX3zoxQUnbhJpwdiIqnZyUDC6j2qHq3dBCMJ09DE+I/6ljbGaF0Qn9v2/Ery/wP2LqjIMOUo/CYUSPhqwUd7EiiUSTK/k/X/AlPa9lYTH6TVbjnkHuHHwRmigOkdzvF8Qd5ZKTqGDmn24lqJ2klYP5HMOlEh9AgyrmXZFfg9hFluxLL4A22ZGmUjUruBaTnuUGsNmABSKd+6+8jU54Bx7acBuWntyieY62mmkeSswkgUxSNRYVh/KeiFgbScPNAed7hWSc7yjRUt4EuHrXT53/UIN7tKPG+QdXOmiv3Bio5pUewx1Ja7MTT8CEW4noMxLAsTYWtpRcoY7GZj5Oqc=
X-Forefront-Antispam-Report: 
	CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BLAPR10MB5009.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(396003)(136003)(39860400002)(346002)(366004)(31686004)(2906002)(8936002)(31696002)(6486002)(7366002)(110136005)(8676002)(5660300002)(36756003)(316002)(2616005)(7416002)(16576012)(38100700002)(44832011)(7406005)(86362001)(66556008)(26005)(186003)(956004)(66476007)(478600001)(4744005)(4326008)(53546011)(66946007)(54906003)(45980500001)(43740500002);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: 
	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
X-OriginatorOrg: oracle.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 96576103-4114-4377-14bd-08d95399dedd
X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5009.namprd10.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jul 2021 20:37:38.7750
 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: MYW0UmmAZESi7E9HqplJenptPPPpkZg9GTDBk/J5JkiaC7jkFeeumgUZ8WLSyI/faLrx9128OvOsyBsR90qjAO1uS5oH8QnETj+5eGZA91A=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB4253
X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10061 signatures=668682
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=909
 mlxscore=0 phishscore=0 bulkscore=0 suspectscore=0 spamscore=0
 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2107140000 definitions=main-2107300140
X-Proofpoint-GUID: KbCouSxoq4ys_s-0Tgq7VsQevDeTuMTo
X-Proofpoint-ORIG-GUID: KbCouSxoq4ys_s-0Tgq7VsQevDeTuMTo


On 7/29/21 4:37 PM, Uwe Kleine-König wrote:

> --- a/drivers/pci/xen-pcifront.c
> +++ b/drivers/pci/xen-pcifront.c
> @@ -599,12 +599,12 @@ static pci_ers_result_t pcifront_common_process(int cmd,
>  	result = PCI_ERS_RESULT_NONE;
>  
>  	pcidev = pci_get_domain_bus_and_slot(domain, bus, devfn);
> -	if (!pcidev || !pcidev->driver) {
> +	pdrv = pci_driver_of_dev(pcidev);
> +	if (!pcidev || !pdrv) {


If pcidev is NULL we are dead by the time we reach 'if' statement.


-boris



>  		dev_err(&pdev->xdev->dev, "device or AER driver is NULL\n");
>  		pci_dev_put(pcidev);
>  		return result;
>  	}
> -	pdrv = pcidev->driver;
>  


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 20:52:02 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 20:52:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162685.298256 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9ZU2-00007M-8k; Fri, 30 Jul 2021 20:51:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162685.298256; Fri, 30 Jul 2021 20:51:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9ZU2-00007F-5J; Fri, 30 Jul 2021 20:51:54 +0000
Received: by outflank-mailman (input) for mailman id 162685;
 Fri, 30 Jul 2021 20:51:52 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9ZU0-000072-S4; Fri, 30 Jul 2021 20:51:52 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9ZU0-0003Dj-Kz; Fri, 30 Jul 2021 20:51:52 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9ZU0-00012w-7z; Fri, 30 Jul 2021 20:51:52 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9ZU0-0004O1-7U; Fri, 30 Jul 2021 20:51:52 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=DKONyOZdFZe6qwAwcYo1ATBiIpZoIwH0VVc7uWap69I=; b=gX8Zp/TZBAnnFzmnXpqVXaN4UW
	KUY3TaPRRweL/RKKZMo8domjDIxxOJypZ1+4jRcDybCBB8Wr8KZaTppi+bsxCg0Jgj1h3SCwDAmAS
	gwg/5ZTbZ2oa5W5iaXOLfpopcuUp3bMneYXU4JO+hWzhtwrBcn1okLzvAreyi+kBMePc=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164052-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164052: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=7742fe64e5c2c2c9f9787d107b693eaac602eaae
X-Osstest-Versions-That:
    qemuu=768832575d2e37042d00eb693cda809cb30981d4
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 20:51:52 +0000

flight 164052 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164052/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164046
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164046
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164046
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164046
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164046
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164046
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164046
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                7742fe64e5c2c2c9f9787d107b693eaac602eaae
baseline version:
 qemuu                768832575d2e37042d00eb693cda809cb30981d4

Last test of basis   164046  2021-07-29 22:09:08 Z    0 days
Testing same since   164052  2021-07-30 08:36:47 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Gerd Hoffmann <kraxel@redhat.com>
  Peter Maydell <peter.maydell@linaro.org>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   768832575d..7742fe64e5  7742fe64e5c2c2c9f9787d107b693eaac602eaae -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 21:57:51 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 21:57:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162695.298271 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9aVe-0005lz-CR; Fri, 30 Jul 2021 21:57:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162695.298271; Fri, 30 Jul 2021 21:57:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9aVe-0005ls-9M; Fri, 30 Jul 2021 21:57:38 +0000
Received: by outflank-mailman (input) for mailman id 162695;
 Fri, 30 Jul 2021 21:57:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=WNqw=MW=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m9aVc-0005lm-UL
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 21:57:36 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 38a2ca86-71ec-4c52-aa20-07191ec017d8;
 Fri, 30 Jul 2021 21:57:35 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id D23266024A;
 Fri, 30 Jul 2021 21:57:34 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 38a2ca86-71ec-4c52-aa20-07191ec017d8
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1627682255;
	bh=L2xyPq87TdCgrci+htpYYA1yS572R1bCkaCegW7mmwY=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=TjdNYO6iE93SRe5ikXahJoN6eNvx0z7kgUIMkag9GOo8c1q9y0pWP4Vsn69tk0meg
	 tq3OwGhOynVnmFAh5NAewfWRs09KeVs51QoAzQ/mfyQSVwiCh9bBoK0qkauEt3QMQQ
	 MTlYonpZZonl4oDFxUzEt8usYGu36jdAn516WzqByJKCd+6KN4hb3b3nzhr78IVAWp
	 ZA6sxCOilglCACmGQI95NvqXbS38QqiOG0eO9Lfkiyd9xIfY0o712dyY6f78yNqPoS
	 Qq/pUMjLO10iVyFvp+Dd2kpf85yVEbNGQzRYFV95TTYOPN6pLA76J8rvbWlotkJ4Gr
	 WSrEKwG/05EcQ==
Date: Fri, 30 Jul 2021 14:57:34 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Julien Grall <julien@xen.org>
cc: Stefano Stabellini <sstabellini@kernel.org>, 
    xen-devel@lists.xenproject.org, Bertrand.Marquis@arm.com, 
    Volodymyr_Babchuk@epam.com, rahul.singh@arm.com, brian.woods@xilinx.com, 
    Stefano Stabellini <stefano.stabellini@xilinx.com>
Subject: Re: [PATCH v5 2/4] xen: do not return -EEXIST if iommu_add_dt_device
 is called twice
In-Reply-To: <aa7be3ad-8cbe-a187-3ebc-e1c5d2d11091@xen.org>
Message-ID: <alpine.DEB.2.21.2107301444100.10122@sstabellini-ThinkPad-T480s>
References: <alpine.DEB.2.21.2107221634130.10122@sstabellini-ThinkPad-T480s> <20210722233642.22515-2-sstabellini@kernel.org> <acd7e7b6-7c2b-24d5-da80-042396aee5e8@xen.org> <alpine.DEB.2.21.2107231043230.10122@sstabellini-ThinkPad-T480s>
 <aa7be3ad-8cbe-a187-3ebc-e1c5d2d11091@xen.org>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII

On Mon, 26 Jul 2021, Julien Grall wrote:
> Hi Stefano,
> 
> On 23/07/2021 21:16, Stefano Stabellini wrote:
> > On Fri, 23 Jul 2021, Julien Grall wrote:
> > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
> > > > ---
> > > > Changes in v5:
> > > > - new patch
> > > > ---
> > > >    xen/drivers/passthrough/device_tree.c | 9 +++++++--
> > > >    1 file changed, 7 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/xen/drivers/passthrough/device_tree.c
> > > > b/xen/drivers/passthrough/device_tree.c
> > > > index 999b831d90..32526ecabb 100644
> > > > --- a/xen/drivers/passthrough/device_tree.c
> > > > +++ b/xen/drivers/passthrough/device_tree.c
> > > > @@ -140,8 +140,13 @@ int iommu_add_dt_device(struct dt_device_node *np)
> > > >        if ( !ops )
> > > >            return -EINVAL;
> > > >    +    /*
> > > > +     * Some Device Trees may expose both legacy SMMU and generic
> > > > +     * IOMMU bindings together. If both are present, the device
> > > > +     * can be already added.
> > > 
> > > Wouldn't this also happen when there is just generic bindings? If so,
> > > shouldn't this patch be first in the series to avoid breaking bisection?
> > 
> > No, both need to be present; if there is just the generic bindings we
> > don't need this change. I can still move it to the beginning of the
> > series anyway if you prefer.
> 
> Sorry but I am having some trouble to understand why this is not a problem for
> just the legacy binding.
> 
> If I look at patch #1, the dev->iommu_fspec will be allocated in
> register_smmu_master(). If I am not mistaken, this is called when the SMMU is
> initialized.
> 
> So the call to iommu_add_dt_device() in handle_device() should return -EEXIST
> (dev_iommu_fwspec_get() will return a non-NULL pointer).
> 
> What did I miss?

I checked. It is true that we need this check with the legacy bindings,
even when alone.

Like you said, dev->iommu_fspec is allocated early by
register_smmu_master. Then, handle_device, or handle_passthrough_prop
for dom0less guests, calls iommu_add_dt_device a second time.

On the other hand with only the generic bindings register_smmu_master
doesn't call iommu_add_dt_device, so iommu_add_dt_device is called only
once by handle_device or handle_passthrough_prop.


The comment I proposed is not correct. What about this one?

    /*
     * In case of legacy SMMU bindings, register_smmu_master might have
     * already initialized struct iommu_fwspec for this device.
     */


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 22:55:27 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 22:55:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162704.298283 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9bPV-0002z2-L1; Fri, 30 Jul 2021 22:55:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162704.298283; Fri, 30 Jul 2021 22:55:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9bPV-0002yv-Gn; Fri, 30 Jul 2021 22:55:21 +0000
Received: by outflank-mailman (input) for mailman id 162704;
 Fri, 30 Jul 2021 22:55:20 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9bPU-0002yl-9R; Fri, 30 Jul 2021 22:55:20 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9bPT-0004xE-Va; Fri, 30 Jul 2021 22:55:19 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9bPT-0000Wg-N1; Fri, 30 Jul 2021 22:55:19 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9bPT-0007nl-MV; Fri, 30 Jul 2021 22:55:19 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=sAepgsNDgGJbjr4Mccghx9ceh6eUDDDFCzP5w2DQR6s=; b=0a5QpymOzr6cmeHBNwcWaSfnp9
	A60m2eX/f04jkwzKeNiOl+QZaL6N1DVCWz0E27DmEymylPBGHsx6wJzQj+7F6LRPJWKUx7k8ELBAv
	XjaN3T636QrJ+1hlInon420hy9gziE4IIafQ7+d0wy2B9PHvO7vdMFB4qC+B8KlsQCSI=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164057-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable-smoke test] 164057: tolerable all pass - PUSHED
X-Osstest-Failures:
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable-smoke:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable-smoke:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=e066ca5acc2ee3b5db5c005e1a548b05e753e07d
X-Osstest-Versions-That:
    xen=604551fb763c4c70123f642a9b2866890790e2b2
From: osstest service owner <osstest-admin@xenproject.org>
Date: Fri, 30 Jul 2021 22:55:19 +0000

flight 164057 xen-unstable-smoke real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164057/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass

version targeted for testing:
 xen                  e066ca5acc2ee3b5db5c005e1a548b05e753e07d
baseline version:
 xen                  604551fb763c4c70123f642a9b2866890790e2b2

Last test of basis   164054  2021-07-30 14:01:37 Z    0 days
Testing same since   164057  2021-07-30 19:02:47 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Julien Grall <jgrall@amazon.com>

jobs:
 build-arm64-xsm                                              pass    
 build-amd64                                                  pass    
 build-armhf                                                  pass    
 build-amd64-libvirt                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-amd64-libvirt                                     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/xen.git
   604551fb76..e066ca5acc  e066ca5acc2ee3b5db5c005e1a548b05e753e07d -> smoke


From xen-devel-bounces@lists.xenproject.org Fri Jul 30 23:57:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Fri, 30 Jul 2021 23:57:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162713.298297 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9cNH-0000GT-7E; Fri, 30 Jul 2021 23:57:07 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162713.298297; Fri, 30 Jul 2021 23:57:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9cNH-0000GM-4I; Fri, 30 Jul 2021 23:57:07 +0000
Received: by outflank-mailman (input) for mailman id 162713;
 Fri, 30 Jul 2021 23:57:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=WNqw=MW=kernel.org=sstabellini@srs-us1.protection.inumbo.net>)
 id 1m9cNF-0000GG-Q1
 for xen-devel@lists.xenproject.org; Fri, 30 Jul 2021 23:57:05 +0000
Received: from mail.kernel.org (unknown [198.145.29.99])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d695abae-f191-11eb-9906-12813bfff9fa;
 Fri, 30 Jul 2021 23:57:04 +0000 (UTC)
Received: by mail.kernel.org (Postfix) with ESMTPSA id E93BE60F9B;
 Fri, 30 Jul 2021 23:57:02 +0000 (UTC)
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d695abae-f191-11eb-9906-12813bfff9fa
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1627689423;
	bh=lhEGNj7mo7lLBntp/aCmS/SkxXl4WbOopwcxtc3CTD0=;
	h=Date:From:To:cc:Subject:In-Reply-To:References:From;
	b=PZPsAF+BTHjnBVP6dYftPToDZb4UNhca/Y9EhqT8ngycllAFahFuD0yDBfwh09inJ
	 F0v2YZ2ihnoMLNHR66YgZG6lirzACFFf9n/NQk2bB4NPc4eeKBUYTQAXZNoun8fiVW
	 Z+y6Z0D9DDS3bv+hFhGTrnjuMZGj6vDRkhs4OHXrqa+u+vr/5gh5PKWym5wi0efZKL
	 pHywYeskyBATVWr1z61i6KDYcfjatwqwrgAKTA5P+r6147y5kJyfZr70NkWN4CGGqy
	 nXwXf9aZTOqDSTsIUOkjNIjj7Up53eZmyK6+/cy1z3LakBlyMblm1hx4rRA4CqkLVR
	 eAoAqZvBav/GA==
Date: Fri, 30 Jul 2021 16:57:02 -0700 (PDT)
From: Stefano Stabellini <sstabellini@kernel.org>
X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s
To: Oleksandr <olekstysh@gmail.com>
cc: Julien Grall <julien@xen.org>, Andrew Cooper <andrew.cooper3@citrix.com>, 
    xen-devel@lists.xenproject.org, 
    Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>, 
    Daniel De Graaf <dgdegra@tycho.nsa.gov>, 
    "Daniel P. Smith" <dpsmith@apertussolutions.com>, 
    Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>, 
    George Dunlap <george.dunlap@citrix.com>, Jan Beulich <jbeulich@suse.com>, 
    Stefano Stabellini <sstabellini@kernel.org>, 
    Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>, 
    =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <roger.pau@citrix.com>, 
    Bertrand Marquis <bertrand.marquis@arm.com>, Wei Chen <Wei.Chen@arm.com>
Subject: Re: [RFC PATCH] xen/memory: Introduce a hypercall to provide
 unallocated space
In-Reply-To: <6a633f4e-13e0-4a2b-cf6e-35ef90ae977c@gmail.com>
Message-ID: <alpine.DEB.2.21.2107301630510.10122@sstabellini-ThinkPad-T480s>
References: <1627489110-25633-1-git-send-email-olekstysh@gmail.com> <80fafc01-f063-d6e5-1c08-7ad64550310c@citrix.com> <e8db3021-78a5-e040-a70b-62ca5b500149@xen.org> <4de5ed21-379e-b618-44c8-924d88b1a519@citrix.com> <bbc7f597-5249-20a0-cac9-13f594268299@xen.org>
 <6a633f4e-13e0-4a2b-cf6e-35ef90ae977c@gmail.com>
User-Agent: Alpine 2.21 (DEB 202 2017-01-01)
MIME-Version: 1.0
Content-Type: multipart/mixed; BOUNDARY="8323329-1771490147-1627688921=:10122"
Content-ID: <alpine.DEB.2.21.2107301649020.10122@sstabellini-ThinkPad-T480s>

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-1771490147-1627688921=:10122
Content-Type: text/plain; CHARSET=UTF-8
Content-Transfer-Encoding: 8BIT
Content-ID: <alpine.DEB.2.21.2107301649021.10122@sstabellini-ThinkPad-T480s>

On Fri, 30 Jul 2021, Oleksandr wrote:
> Hi Andrew, Julien.
> 
> 
> @Andrew, I think that arguments you provided in your first answer (why the
> proposed solution is a potentially racy and not a safe) are valid and
> reasonable.
> Thanks for the feedback.
> 
> 
> On 28.07.21 22:53, Julien Grall wrote:
> > 
> > 
> > On 28/07/2021 20:00, Andrew Cooper wrote:
> > > On 28/07/2021 18:27, Julien Grall wrote:
> > > > Hi Andrew,
> > > > 
> > > > On 28/07/2021 18:19, Andrew Cooper wrote:
> > > > > On 28/07/2021 17:18, Oleksandr Tyshchenko wrote:
> > > > > > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> > > > > > 
> > > > > > Add XENMEM_get_unallocated_space hypercall which purpose is to
> > > > > > query hypervisor to find regions of guest physical address space
> > > > > > which are unused and can be used to create grant/foreign mappings
> > > > > > instead of wasting real pages from the domain memory for
> > > > > > establishing these mappings. The problem with the current Linux
> > > > > > on Xen on Arm behaviour is if we want to map some guest memory
> > > > > > regions in advance or to perform cache mappings in the backend
> > > > > > we might run out of memory in the host (see XSA-300).
> > > > > > This of course, depends on the both host and guest memory sizes.
> > > > > > 
> > > > > > The "unallocated space" can't be figured out precisely by
> > > > > > the domain on Arm without hypervisor involvement:
> > > > > > - not all device I/O regions are known by the time domain starts
> > > > > >     creating grant/foreign mappings
> > > > > > - the Dom0 is not aware of memory regions used for the identity
> > > > > >     mappings needed for the PV drivers to work
> > > > > > In both cases we might end up re-using these regions by
> > > > > > a mistake. So, the hypervisor which maintains the P2M for the domain
> > > > > > is in the best position to provide "unallocated space".
> > > > > 
> > > > > I'm afraid this does not improve the situation.
> > > > > 
> > > > > If a guest follows the advice from XENMEM_get_unallocated_space, and
> > > > > subsequently a new IO or identity region appears, everything will
> > > > > explode, because the "safe area" wasn't actually safe.
> > > > > 
> > > > > The safe range *must* be chosen by the toolstack, because nothing else
> > > > > can do it safely or correctly.
> > > > 
> > > > The problem is how do you size it? In particular, a backend may map
> > > > multiple time the same page (for instance if the page is granted twice).
> > > 
> > > The number of mapped grants is limited by the size of the maptrack table
> > > in Xen, which is a toolstack input to the domaincreate hypercall.
> > > Therefore, the amount of space required is known and bounded.
> > > 
> > > There are a handful of other frames required in the current ABI (shared
> > > info, vcpu info, etc).
> > > 
> > > The areas where things do become fuzzy is things like foreign mappings,
> > > acquire_resource, etc for the control domain, which are effectively
> > > unbounded from the domain's point of view.
> > > 
> > > For those, its entirely fine to say "here 128G of safe mapping space" or
> > > so.  Even the quantity of mapping dom0 can make is limited by the shadow
> > > memory pool and the number of pagetables Xen is willing to expend on the
> > > second stage translation tables.
> > 
> > FWIW, on Arm, we don't have shadow memory pool.
> > 
> > Anyway, it should be possible to give a 128GB "safe range" and let Xen deal
> > with it.
> > 
> > > 
> > > > 
> > > > > 
> > > > > Once a safe range (or ranges) has been chosen, any subsequent action
> > > > > which overlaps with the ranges must be rejected, as it will violate
> > > > > the
> > > > > guarantees provided.
> > > > > 
> > > > > Furthermore, the ranges should be made available to the guest via
> > > > > normal
> > > > > memory map means.  On x86, this is via the E820 table, and on ARM I
> > > > > presume the DTB.  There is no need for a new hypercall.
> > > > 
> > > > Device-Tree only works if you have a guest using it. How about ACPI?
> > > 
> > > ACPI inherits E820 from x86 (its a trivial format), and UEFI was also
> > > based on it.
> > > 
> > > But whichever...  All firmware interfaces have a memory map.
> > 
> > This will be UEFI memory map. However, I am a bit confused how we can tell
> > the OS the region will be used for grant/foreign mapping. Is it possible to
> > reserved a new type?
> > 
> > > 
> > > > To me the hypercall solution at least:
> > > >    1) Avoid to have to define the region on every single firmware table
> > > 
> > > There is only ever one.
> > 
> > Why? I could forsee an interest to use the host memory map and therefore we
> > may need to find a few holes for safe regions to use.
> > 
> > > 
> > > >    2) Allow to easily extend after the guest run
> > > 
> > > The safe ranges can't be changed (safely).  This is the same problem as
> > > needing to know things like your PCI apertures ahead of time, or where
> > > the DIMM hotplug regions are.
> > > 
> > > Having the guest physmap be actually dynamic is the cause of so many
> > > bugs (inc security) and misfeatures in Xen.  Guests cannot and do no
> > > cope with things being fully dynamic, because that's not how real
> > > hardware works.  What you get is layers and layers of breakage on top of
> > > each other, rather than a working system.
> > 
> > I would not call it "fully dynamic". Xen can easily know whether a region
> > has ever be allocated before. So long the region has never been allocated,
> > then it should be fine. In fact...
> > 
> > > 
> > > The size of mapping space is a limit, just like maxphysaddr, or the PCI
> > > apertures, or MMCFG space, etc.  You can make it large by default (as it
> > > doesn't consume resource when not being used), but any guest OS isn't
> > > going to tolerate it morphing during runtime.
> > ... I believe the OS may be not aware of the hotplug region until it is
> > actually used.
> > 
> > Anyway, I suggested this approach a few months ago to Oleksandr (see [1])
> > which BTW you were CCed on ;). My take was that Xen knows about the
> > unallocated space and therefore can make an informed decision without having
> > to allocate insanely large region.
> > 
> > Now if you think that's fine (IIRC Stefano had a preference for that as
> > well). Then we can use the firmware table (assuming we can solve the ACPI
> > question).
> 
> 
> Well, if new hypercall and, what is more, "the querying hypervisor at runtime
> to find unused space" model itself is not welcome, I am ok, let's try to
> create a working system,
> may we please find a common ground to move this forward (at least on Arm for
> now, the foreign mapping is the most important question).
> 
> I got the proposed idea in general, but I haven't connected all dots yet, some
> points need clarification.
> 
> 1. The safe range must be defined/allocated in advance and must remain const
> during the runtime. The safe range must be chosen by the toolstack.
> [For the initial implementation we can start with some large value (128GB) as
> discussed above]
> 
> Questions:
> 
> - Do we need to inform Xen about that range (via domain_create hypercall,
> etc)?
> - What will be in charge of guaranteeing the safety of that range at runtime
> (reject new mapping requests with possible overlaps, etc), Xen, toolstack or
> both?
> - Where that range should be located in guest address space, should that range
> be the same for all domains (how GUEST_GNTTAB_BASE(SIZE) for example)
> or it should be calculated based on actual guest_ram_base(size) for a
> particular domain?
> - What about a safe range the Dom0 can use itself? Xen should choose it for
> Dom0 the same way how toolstack chooses it for other domains, correct?

Brainstorming an idea to answer some of these questions.

Xen needs to be able to choose a safe range without the toolstack's help
at least for dom0 and dom0less guests. Could we just have Xen choose the
safe range for all domains?

Could it be just as simple as choosing a range 1GB-aligned above
whatever is the highest address previously allocated for memory, MMIO,
whatever?

We could also have the toolstack provide the info but I wonder if we can
get away without it.


> 2. The safe range must be provided to domain using the firmware table.
> [We can start with the DTB and leave ACPI unimplemented for now, assuming we
> will be able to solve open questions as discussed above]
>
> Questions:
> 
> - Do we need distinguish between foreign and grant mappings at the domain side
> at all? Can the same safe range be used for all types of mapping?

This is a good question. I can't think of a reason why we would need to
distinguish between the two from Xen's point of view. Would it make
the Linux implementation easier if we distinguished them?


> - How will domain recognize what range can be used for foreign/grant mappings?
> Do we need to introduce new device-tree bindings for describing the range
> or it is possible to re-use current bindings (expand the "reg" property under
> "hypervisor" node, currently it contains gnttab region)?

Do we need a struct page* for the range? We needed it in the past and it
is the reason why we currenly use ballooned-out pages: they have a
proper struct page* associated with them. pte_special() caused problems.

So, continuing with the assumption that we need a struct page*, then the
range needs to be advertised as "memory" to the DomU (part to of the
/memory node). But we can reserve the range for foreign/grant-mapping
use by adding a reserved-memory binding for it. If we go down this
route, we should add a new binding as I don't think we should reuse
reserved-memory/xen,shared-memory.txt. It would be very simply to add,
just follow the model of xen,shared-memory.txt. (Note that just because
the range is part of the DomU /memory node, it doesn't mean it needs to
be backed by real memory.)

If we don't need a struct page* then we can do something different using
bus ranges and/or MMIO regions.
--8323329-1771490147-1627688921=:10122--


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 03:36:14 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 03:36:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162721.298310 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9fn5-0001WC-MB; Sat, 31 Jul 2021 03:35:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162721.298310; Sat, 31 Jul 2021 03:35:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9fn5-0001W5-Gt; Sat, 31 Jul 2021 03:35:59 +0000
Received: by outflank-mailman (input) for mailman id 162721;
 Sat, 31 Jul 2021 03:35:58 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9fn4-0001Vv-AZ; Sat, 31 Jul 2021 03:35:58 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9fn3-0007kB-Um; Sat, 31 Jul 2021 03:35:58 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9fn3-0003dx-Hx; Sat, 31 Jul 2021 03:35:57 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9fn3-0006DX-HU; Sat, 31 Jul 2021 03:35:57 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=vaVf8PJcyfJA+M6NbnJTPfVMtEGIWUSMSHVJLlp2ovQ=; b=EwIFb6knPpy4FSf/5Rni+lmHae
	7Mrj7Pr0mkmAQmLQ/QFE/sgUKgxE6Odag45XwQsTmhxSnZCsP7IXeunZlPl9/KlZVz1S0H1h4QOqO
	kaaiftDdQlsIBsJhHNVgZ+PrW6XTnnUjHWrmuyr5t9ZgIaHgU2w6Gs/VQ1yfan0zuBEE=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164056-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164056: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:guest-start:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:guest-start:fail:regression
    linux-linus:test-armhf-armhf-xl-arndale:host-ping-check-xen:fail:heisenbug
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:heisenbug
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:heisenbug
    linux-linus:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=764a5bc89b12b82c18ce7ca5d7c1b10dd748a440
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 03:35:57 +0000

flight 164056 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164056/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          14 guest-start              fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      14 guest-start    fail in 164051 REGR. vs. 152332

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-arndale 10 host-ping-check-xen fail in 164051 pass in 164056
 test-arm64-arm64-xl          13 debian-fixup     fail in 164051 pass in 164056
 test-arm64-arm64-xl-xsm      13 debian-fixup               fail pass in 164051
 test-amd64-amd64-examine      4 memdisk-try-append         fail pass in 164051

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

version targeted for testing:
 linux                764a5bc89b12b82c18ce7ca5d7c1b10dd748a440
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  364 days
Failing since        152366  2020-08-01 20:49:34 Z  363 days  627 attempts
Testing same since   164051  2021-07-30 08:30:14 Z    0 days    2 attempts

------------------------------------------------------------
6734 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1989726 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 04:03:00 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 04:03:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162731.298325 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9gD7-0004ge-4l; Sat, 31 Jul 2021 04:02:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162731.298325; Sat, 31 Jul 2021 04:02:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9gD7-0004gX-1V; Sat, 31 Jul 2021 04:02:53 +0000
Received: by outflank-mailman (input) for mailman id 162731;
 Sat, 31 Jul 2021 04:02:51 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9gD5-0004gN-BM; Sat, 31 Jul 2021 04:02:51 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9gD5-0008CC-5f; Sat, 31 Jul 2021 04:02:51 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9gD4-0004gO-Rl; Sat, 31 Jul 2021 04:02:50 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9gD4-0007RQ-RD; Sat, 31 Jul 2021 04:02:50 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=i/F+5I2J6bplZQrSvMehWMkA6uYAFpjBl3kKm8B2mX8=; b=C3wsYUMsEqSL3GmwUuGaQvjbMz
	na8BhtkTPQwINDlA2hLCEz4pW2er3CkYE6x95unE8IE+CSFrtprBKJ6ajjWDKexNPzmUg0r09/eOD
	7uRd/DmAEPWoWTvgKn8BhqDrwnyvdfzwyHOHznVUIm6UUOYNBHjw+ThpIj4yhHR3hUho=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164055-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164055: regressions - FAIL
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm:debian-hvm-install:fail:regression
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e
X-Osstest-Versions-That:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 04:02:50 +0000

flight 164055 xen-unstable real [real]
flight 164059 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164055/
http://logs.test-lab.xenproject.org/osstest/logs/164059/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm 12 debian-hvm-install fail REGR. vs. 164049

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-examine      4 memdisk-try-append  fail pass in 164059-retest

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

version targeted for testing:
 xen                  3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e
baseline version:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31

Last test of basis   164049  2021-07-30 01:52:50 Z    1 days
Testing same since   164055  2021-07-30 14:37:59 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Jane Malalane <jane.malalane@citrix.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

------------------------------------------------------------
commit 3747a2bb67daa5a8baeff6cda57dc98a5ef79c3e
Author: Jane Malalane <jane.malalane@citrix.com>
Date:   Tue Jul 27 19:47:15 2021 +0100

    xen/lib: Fix strcmp() and strncmp()
    
    The C standard requires that each character be compared as unsigned
    char. Xen's current behaviour compares as signed char, which changes
    the answer when chars with a value greater than 0x7f are used.
    
    Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Signed-off-by: Jane Malalane <jane.malalane@citrix.com>
    Reviewed-by: Ian Jackson <iwj@xenproject.org>
(qemu changes not included)


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 09:50:03 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 09:50:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162746.298343 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9lcs-0000da-B7; Sat, 31 Jul 2021 09:49:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162746.298343; Sat, 31 Jul 2021 09:49:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9lcs-0000dT-87; Sat, 31 Jul 2021 09:49:50 +0000
Received: by outflank-mailman (input) for mailman id 162746;
 Sat, 31 Jul 2021 09:49:48 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9lcq-0000dJ-Cl; Sat, 31 Jul 2021 09:49:48 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9lcq-0005bi-6v; Sat, 31 Jul 2021 09:49:48 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9lcp-0004f3-SF; Sat, 31 Jul 2021 09:49:47 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9lcp-0006aq-RW; Sat, 31 Jul 2021 09:49:47 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=p/Yazh5sI7WL8HbbRWsPJAQwru3+3w2s+GtXePC4kyM=; b=KHjzDBrW6Iiz55Qh3iM/ONjX6G
	g7jqv5UsZd4keOlKQV6+FphYT5rO4jaOBrwb8qs91DYc5oo5qDjORXh4lNrWnfzySCAs8P3zZ0h9A
	cuIbVJdo3aBhVEojGs323yXpRheY2lsg8B99j3w98J5/nYDF0bZLjOkwj+pWQN5zcxfw=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164058-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [qemu-mainline test] 164058: tolerable FAIL - PUSHED
X-Osstest-Failures:
    qemu-mainline:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    qemu-mainline:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    qemu-mainline:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    qemu-mainline:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    qemuu=dbdc621be937d9efe3e4dff994e54e8eea051f7a
X-Osstest-Versions-That:
    qemuu=7742fe64e5c2c2c9f9787d107b693eaac602eaae
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 09:49:47 +0000

flight 164058 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164058/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop            fail like 164052
 test-armhf-armhf-libvirt     16 saverestore-support-check    fail  like 164052
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 164052
 test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop             fail like 164052
 test-armhf-armhf-libvirt-raw 15 saverestore-support-check    fail  like 164052
 test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop             fail like 164052
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop            fail like 164052
 test-amd64-i386-xl-pvshim    14 guest-start                  fail   never pass
 test-amd64-amd64-libvirt     15 migrate-support-check        fail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt-xsm  15 migrate-support-check        fail   never pass
 test-amd64-i386-libvirt      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-seattle  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl          15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl          16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-xsm      15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-xsm      16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-check    fail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-check        fail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-check    fail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-check        fail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-check    fail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-check    fail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-check        fail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-check    fail  never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl          15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl          16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-cubietruck 15 migrate-support-check        fail never pass
 test-armhf-armhf-xl-cubietruck 16 saverestore-support-check    fail never pass
 test-armhf-armhf-libvirt     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-check    fail   never pass
 test-armhf-armhf-xl-rtds     15 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-rtds     16 saverestore-support-check    fail   never pass
 test-armhf-armhf-libvirt-raw 14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      14 migrate-support-check        fail   never pass
 test-armhf-armhf-xl-vhd      15 saverestore-support-check    fail   never pass

version targeted for testing:
 qemuu                dbdc621be937d9efe3e4dff994e54e8eea051f7a
baseline version:
 qemuu                7742fe64e5c2c2c9f9787d107b693eaac602eaae

Last test of basis   164052  2021-07-30 08:36:47 Z    1 days
Testing same since   164058  2021-07-30 21:08:03 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Fabian Ebner <f.ebner@proxmox.com>
  Peter Maydell <peter.maydell@linaro.org>
  Philippe Mathieu-Daudé <philmd@redhat.com>
  Stefan Hajnoczi <stefanha@redhat.com>
  Stefano Garzarella <sgarzare@redhat.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/qemu-xen.git
   7742fe64e5..dbdc621be9  dbdc621be937d9efe3e4dff994e54e8eea051f7a -> upstream-tested


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 12:10:09 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 12:10:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162759.298357 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9noQ-0004rW-4N; Sat, 31 Jul 2021 12:09:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162759.298357; Sat, 31 Jul 2021 12:09:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9noQ-0004rP-1M; Sat, 31 Jul 2021 12:09:54 +0000
Received: by outflank-mailman (input) for mailman id 162759;
 Sat, 31 Jul 2021 12:09:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=oHql=MX=pengutronix.de=ukl@srs-us1.protection.inumbo.net>)
 id 1m9noO-0004rJ-4V
 for xen-devel@lists.xenproject.org; Sat, 31 Jul 2021 12:09:52 +0000
Received: from metis.ext.pengutronix.de (unknown
 [2001:67c:670:201:290:27ff:fe1d:cc33])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9a3d580a-20f0-43d6-a4d8-e626dacc4253;
 Sat, 31 Jul 2021 12:09:49 +0000 (UTC)
Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2])
 by metis.ext.pengutronix.de with esmtps
 (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9nnU-0007Ot-05; Sat, 31 Jul 2021 14:08:56 +0200
Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de)
 by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9nnD-0007eB-Mm; Sat, 31 Jul 2021 14:08:39 +0200
Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92)
 (envelope-from <ukl@pengutronix.de>)
 id 1m9nnD-0001LE-Jt; Sat, 31 Jul 2021 14:08:39 +0200
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9a3d580a-20f0-43d6-a4d8-e626dacc4253
Date: Sat, 31 Jul 2021 14:08:36 +0200
From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
	=?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= <zajec5@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>, linux-pci@vger.kernel.org,
	Alexander Duyck <alexanderduyck@fb.com>,
	Russell Currey <ruscur@russell.cc>,
	Sathya Prakash <sathya.prakash@broadcom.com>,
	oss-drivers@corigine.com, Oliver O'Halloran <oohall@gmail.com>,
	"H. Peter Anvin" <hpa@zytor.com>, Jiri Olsa <jolsa@redhat.com>,
	linux-perf-users@vger.kernel.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	linux-scsi@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Ido Schimmel <idosch@nvidia.com>, x86@kernel.org,
	qat-linux@intel.com,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	linux-wireless@vger.kernel.org, Jakub Kicinski <kuba@kernel.org>,
	Mathias Nyman <mathias.nyman@intel.com>,
	Yisen Zhuang <yisen.zhuang@huawei.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Andrew Donnellan <ajd@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>,
	Simon Horman <simon.horman@corigine.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Borislav Petkov <bp@alien8.de>, Michael Buesch <m@bues.ch>,
	Jiri Pirko <jiri@nvidia.com>, Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Andy Shevchenko <andriy.shevchenko@intel.com>,
	Juergen Gross <jgross@suse.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Sreekanth Reddy <sreekanth.reddy@broadcom.com>,
	xen-devel@lists.xenproject.org, Vadym Kochan <vkochan@marvell.com>,
	MPT-FusionLinux.pdl@broadcom.com,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org,
	Wojciech Ziemba <wojciech.ziemba@intel.com>,
	linux-kernel@vger.kernel.org, Taras Chornyi <tchornyi@marvell.com>,
	Zhou Wang <wangzhou1@hisilicon.com>, linux-crypto@vger.kernel.org,
	kernel@pengutronix.de, netdev@vger.kernel.org,
	Frederic Barrat <fbarrat@linux.ibm.com>,
	Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH v1 4/5] PCI: Adapt all code locations to not use struct
 pci_dev::driver directly
Message-ID: <20210731120836.vegno6voijvlflws@pengutronix.de>
References: <20210729203740.1377045-1-u.kleine-koenig@pengutronix.de>
 <20210729203740.1377045-5-u.kleine-koenig@pengutronix.de>
 <2b5e8cb5-fac2-5da2-f87b-d287d2c5ea81@oracle.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha512;
	protocol="application/pgp-signature"; boundary="rawlqk3jhoxts24y"
Content-Disposition: inline
In-Reply-To: <2b5e8cb5-fac2-5da2-f87b-d287d2c5ea81@oracle.com>
X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2
X-SA-Exim-Mail-From: ukl@pengutronix.de
X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false
X-PTX-Original-Recipient: xen-devel@lists.xenproject.org


--rawlqk3jhoxts24y
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello Boris,

On Fri, Jul 30, 2021 at 04:37:31PM -0400, Boris Ostrovsky wrote:
> On 7/29/21 4:37 PM, Uwe Kleine-K=F6nig wrote:
> > --- a/drivers/pci/xen-pcifront.c
> > +++ b/drivers/pci/xen-pcifront.c
> > @@ -599,12 +599,12 @@ static pci_ers_result_t pcifront_common_process(i=
nt cmd,
> >  	result =3D PCI_ERS_RESULT_NONE;
> > =20
> >  	pcidev =3D pci_get_domain_bus_and_slot(domain, bus, devfn);
> > -	if (!pcidev || !pcidev->driver) {
> > +	pdrv =3D pci_driver_of_dev(pcidev);
> > +	if (!pcidev || !pdrv) {
>=20
> If pcidev is NULL we are dead by the time we reach 'if' statement.

Oh, you're right. So this needs something like:

	if (!pcidev || !(pdrv =3D pci_driver_of_dev(pcidev)))

or repeating the call to pci_driver_of_dev for each previous usage of
pdev->driver.

If there are no other preferences I'd got with the first approach for
v2.

Best regards and thanks for catching,
Uwe

--=20
Pengutronix e.K.                           | Uwe Kleine-K=F6nig            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

--rawlqk3jhoxts24y
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmEFPUEACgkQwfwUeK3K
7AlQoAgAidQUuX/L2YhXMvP0F+SSjym4ILhKdbRYnWojo/QbFUE8WbOQueAZA76q
NW0vq2X07i0bUwTfbZoOgqSFvMfXJiETcN9R48epPUGWS2IT17NE8EgtH+/srht0
sGGI7bia2a1L++nruccUllCf1qMfngKRQUhatVOPYqIs2dX3ijjjpSAxHh8L+gjC
nOMgWu7lZm7QQawBjQGfirpYGBUFdAh3odwm/JHN7+cZKC6dbhLYGm2WS8db1bCI
4k4EO2RpSeuZb9XaFPq9DEWy1exgtgjnmKt3Szrp31/xWizjhMEOrZVWfWD1bjUa
rWcmnDR4bm4Fz/MdVFhjJq2XJQoIDw==
=2o5y
-----END PGP SIGNATURE-----

--rawlqk3jhoxts24y--


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 12:10:43 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 12:10:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162766.298370 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9npD-00067w-FG; Sat, 31 Jul 2021 12:10:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162766.298370; Sat, 31 Jul 2021 12:10:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9npD-00067p-C5; Sat, 31 Jul 2021 12:10:43 +0000
Received: by outflank-mailman (input) for mailman id 162766;
 Sat, 31 Jul 2021 12:10:42 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9npC-00067f-0u; Sat, 31 Jul 2021 12:10:42 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9npB-0007eD-RT; Sat, 31 Jul 2021 12:10:41 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9npB-0002fh-Gi; Sat, 31 Jul 2021 12:10:41 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9npB-0002by-GE; Sat, 31 Jul 2021 12:10:41 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=Aa53xb0T2oBgfaTy+v0+jBDS3p4ZjaPBOsgXF7yaFgA=; b=rYqEgfPK1pYV5JKwE/VXRHVWnh
	LdfLgeO6Pr9l5hEwROjGondPTSRHw9aShzYH6WEkdy//3w0g++ecR4KPJgNrloqOOeUBRds1dv0b+
	EdDXCNUUAnGEzaWkQCtWcJK7ayfgCXXjkbri70ETaaEJ1f0idsE9eHOOPEFoTZdtMbpQ=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164060-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-linus test] 164060: regressions - FAIL
X-Osstest-Failures:
    linux-linus:test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-examine:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-ws16-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemut-rhel6hvm-amd:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-debianhvm-amd64:xen-install:fail:regression
    linux-linus:test-amd64-coresched-i386-xl:xen-install:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-pair:xen-install/dst_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-qemuu-rhel6hvm-intel:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-pvshim:xen-install:fail:regression
    linux-linus:test-amd64-i386-freebsd10-i386:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-shadow:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-debianhvm-i386-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-raw:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-ovmf-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemuu-win7-amd64:xen-install:fail:regression
    linux-linus:test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm:xen-install:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/src_host:fail:regression
    linux-linus:test-amd64-i386-libvirt-pair:xen-install/dst_host:fail:regression
    linux-linus:test-arm64-arm64-xl-thunderx:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl-xsm:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-xl:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-amd64-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit1:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-i386-pvgrub:guest-stop:fail:regression
    linux-linus:test-arm64-arm64-xl-credit2:debian-fixup:fail:regression
    linux-linus:test-arm64-arm64-libvirt-xsm:debian-fixup:fail:regression
    linux-linus:test-amd64-amd64-xl-credit1:guest-start/debian.repeat:fail:regression
    linux-linus:test-amd64-amd64-pygrub:guest-localmigrate/x10:fail:regression
    linux-linus:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-linus:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-linus:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-linus:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-linus:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-linus:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=c7d102232649226a69dddd58a4942cf13cff4f7c
X-Osstest-Versions-That:
    linux=deacdb3e3979979016fcd0ffd518c320a62ad166
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 12:10:41 +0000

flight 164060 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164060/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-i386-examine       6 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt       7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-ws16-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-qemut-rhel6hvm-amd  7 xen-install        fail REGR. vs. 152332
 test-amd64-i386-xl            7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-debianhvm-amd64  7 xen-install  fail REGR. vs. 152332
 test-amd64-coresched-i386-xl  7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-pair         10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-pair         11 xen-install/dst_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-xsm   7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-xsm        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-qemuu-rhel6hvm-intel  7 xen-install      fail REGR. vs. 152332
 test-amd64-i386-freebsd10-amd64  7 xen-install           fail REGR. vs. 152332
 test-amd64-i386-xl-pvshim     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-freebsd10-i386  7 xen-install            fail REGR. vs. 152332
 test-amd64-i386-xl-shadow     7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-xl-raw        7 xen-install              fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-ovmf-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemuu-win7-amd64  7 xen-install       fail REGR. vs. 152332
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-install fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 10 xen-install/src_host     fail REGR. vs. 152332
 test-amd64-i386-libvirt-pair 11 xen-install/dst_host     fail REGR. vs. 152332
 test-arm64-arm64-xl-thunderx 13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl-xsm      13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-xl          13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-amd64-pvgrub 20 guest-stop              fail REGR. vs. 152332
 test-arm64-arm64-xl-credit1  13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-i386-pvgrub 20 guest-stop               fail REGR. vs. 152332
 test-arm64-arm64-xl-credit2  13 debian-fixup             fail REGR. vs. 152332
 test-arm64-arm64-libvirt-xsm 13 debian-fixup             fail REGR. vs. 152332
 test-amd64-amd64-xl-credit1 22 guest-start/debian.repeat fail REGR. vs. 152332
 test-amd64-amd64-pygrub      19 guest-localmigrate/x10   fail REGR. vs. 152332

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

version targeted for testing:
 linux                c7d102232649226a69dddd58a4942cf13cff4f7c
baseline version:
 linux                deacdb3e3979979016fcd0ffd518c320a62ad166

Last test of basis   152332  2020-07-31 19:41:23 Z  364 days
Failing since        152366  2020-08-01 20:49:34 Z  363 days  628 attempts
Testing same since   164060  2021-07-31 03:40:37 Z    0 days    1 attempts

------------------------------------------------------------
6750 people touched revisions under test,
not listing them all

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          fail    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           fail    
 test-amd64-coresched-i386-xl                                 fail    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            fail    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         fail    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  fail    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 fail    
 test-amd64-i386-libvirt-xsm                                  fail    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      fail    
 test-amd64-i386-xl-xsm                                       fail    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           fail    
 test-amd64-i386-qemuu-rhel6hvm-amd                           fail    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     fail    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     fail    
 test-amd64-i386-freebsd10-amd64                              fail    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          fail    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  fail    
 test-arm64-arm64-xl-credit1                                  fail    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  fail    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         fail    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      fail    
 test-amd64-i386-freebsd10-i386                               fail    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         fail    
 test-amd64-i386-qemuu-rhel6hvm-intel                         fail    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      fail    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         fail    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 fail    
 test-amd64-amd64-amd64-pvgrub                                fail    
 test-amd64-amd64-i386-pvgrub                                 fail    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      fail    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       fail    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              fail    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    fail    
 test-arm64-arm64-xl-thunderx                                 fail    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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


Not pushing.

(No revision log; it would be 1993839 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 12:35:26 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 12:35:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162776.298385 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9oCz-0008VE-F6; Sat, 31 Jul 2021 12:35:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162776.298385; Sat, 31 Jul 2021 12:35:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9oCz-0008V7-Bn; Sat, 31 Jul 2021 12:35:17 +0000
Received: by outflank-mailman (input) for mailman id 162776;
 Sat, 31 Jul 2021 12:35:16 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9oCy-0008Ux-N1; Sat, 31 Jul 2021 12:35:16 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9oCy-0007zX-FM; Sat, 31 Jul 2021 12:35:16 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9oCy-00040B-4a; Sat, 31 Jul 2021 12:35:16 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9oCy-0007BZ-42; Sat, 31 Jul 2021 12:35:16 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=LMMkBFaQynA6/k6dJajUcMDDlXX0/+ocWwXU671OLRg=; b=AZ3Pts28qaCcjwSnwzTLUekrsc
	5kzmMYack8r1lLf+BrSTFttAZ3epBKlGfWXKWLw3PVmt8ukphoj+j2THGcA/Oq4AUvnxhcZDv5jQ+
	s44/8mhzxewKxn8ZVchjPEzuGk1F5HHJyTvqFFQ868Y942CL3haMltw3wHud2gTY63hs=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164063-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [libvirt test] 164063: regressions - FAIL
X-Osstest-Failures:
    libvirt:build-armhf-libvirt:libvirt-build:fail:regression
    libvirt:build-amd64-libvirt:libvirt-build:fail:regression
    libvirt:build-arm64-libvirt:libvirt-build:fail:regression
    libvirt:build-i386-libvirt:libvirt-build:fail:regression
    libvirt:test-amd64-amd64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-vhd:build-check(1):blocked:nonblocking
    libvirt:test-amd64-amd64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-pair:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:build-check(1):blocked:nonblocking
    libvirt:test-amd64-i386-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-qcow2:build-check(1):blocked:nonblocking
    libvirt:test-arm64-arm64-libvirt-xsm:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt:build-check(1):blocked:nonblocking
    libvirt:test-armhf-armhf-libvirt-raw:build-check(1):blocked:nonblocking
X-Osstest-Versions-This:
    libvirt=702d6d04cec5402c4b3a816f5a318c04085db73e
X-Osstest-Versions-That:
    libvirt=2c846fa6bcc11929c9fb857a22430fb9945654ad
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 12:35:16 +0000

flight 164063 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/164063/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-armhf-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-amd64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-arm64-libvirt           6 libvirt-build            fail REGR. vs. 151777
 build-i386-libvirt            6 libvirt-build            fail REGR. vs. 151777

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-libvirt      1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-amd64-libvirt-vhd  1 build-check(1)               blocked  n/a
 test-amd64-amd64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt       1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)               blocked  n/a
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt      1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-qcow2  1 build-check(1)               blocked  n/a
 test-arm64-arm64-libvirt-xsm  1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt      1 build-check(1)               blocked  n/a
 test-armhf-armhf-libvirt-raw  1 build-check(1)               blocked  n/a

version targeted for testing:
 libvirt              702d6d04cec5402c4b3a816f5a318c04085db73e
baseline version:
 libvirt              2c846fa6bcc11929c9fb857a22430fb9945654ad

Last test of basis   151777  2020-07-10 04:19:19 Z  386 days
Failing since        151818  2020-07-11 04:18:52 Z  385 days  377 attempts
Testing same since   164063  2021-07-31 04:19:02 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
    Adolfo Jayme Barrientos <fitoschido@gmail.com>
  Aleksandr Alekseev <alexander.alekseev@virtuozzo.com>
  Aleksei Zakharov <zaharov@selectel.ru>
  Andika Triwidada <andika@gmail.com>
  Andrea Bolognani <abologna@redhat.com>
  Balázs Meskó <meskobalazs@mailbox.org>
  Barrett Schonefeld <bschoney@utexas.edu>
  Bastian Germann <bastiangermann@fishpost.de>
  Bastien Orivel <bastien.orivel@diateam.net>
  BiaoXiang Ye <yebiaoxiang@huawei.com>
  Bihong Yu <yubihong@huawei.com>
  Binfeng Wu <wubinfeng@huawei.com>
  Bjoern Walk <bwalk@linux.ibm.com>
  Boris Fiuczynski <fiuczy@linux.ibm.com>
  Brian Turek <brian.turek@gmail.com>
  Bruno Haible <bruno@clisp.org>
  Chris Mayo <aklhfex@gmail.com>
  Christian Ehrhardt <christian.ehrhardt@canonical.com>
  Christian Kirbach <christian.kirbach@gmail.com>
  Christian Schoenebeck <qemu_oss@crudebyte.com>
  Cole Robinson <crobinso@redhat.com>
  Collin Walling <walling@linux.ibm.com>
  Cornelia Huck <cohuck@redhat.com>
  Cédric Bosdonnat <cbosdonnat@suse.com>
  Côme Borsoi <fedora@borsoi.fr>
  Daniel Henrique Barboza <danielhb413@gmail.com>
  Daniel Letai <dani@letai.org.il>
  Daniel P. Berrange <berrange@redhat.com>
  Daniel P. Berrangé <berrange@redhat.com>
  Didik Supriadi <didiksupriadi41@gmail.com>
  Dmytro Linkin <dlinkin@nvidia.com>
  Eiichi Tsukata <eiichi.tsukata@nutanix.com>
  Eric Farman <farman@linux.ibm.com>
  Erik Skultety <eskultet@redhat.com>
  Fabian Affolter <mail@fabian-affolter.ch>
  Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
  Fabiano Fidêncio <fabiano@fidencio.org>
  Fangge Jin <fjin@redhat.com>
  Farhan Ali <alifm@linux.ibm.com>
  Fedora Weblate Translation <i18n@lists.fedoraproject.org>
  gongwei <gongwei@smartx.com>
  Guoyi Tu<tu.guoyi@h3c.com>
  Göran Uddeborg <goeran@uddeborg.se>
  Halil Pasic <pasic@linux.ibm.com>
  Han Han <hhan@redhat.com>
  Hao Wang <wanghao232@huawei.com>
  Hela Basa <r45xveza@pm.me>
  Helmut Grohne <helmut@subdivi.de>
  Ian Wienand <iwienand@redhat.com>
  Jakob Meng <jakobmeng@web.de>
  Jamie Strandboge <jamie@canonical.com>
  Jamie Strandboge <jamie@ubuntu.com>
  Jan Kuparinen <copper_fin@hotmail.com>
  Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>
  Jia Zhou <zhou.jia2@zte.com.cn>
  Jianan Gao <jgao@redhat.com>
  Jim Fehlig <jfehlig@suse.com>
  Jin Yan <jinyan12@huawei.com>
  Jinsheng Zhang <zhangjl02@inspur.com>
  Jiri Denemark <jdenemar@redhat.com>
  John Ferlan <jferlan@redhat.com>
  Jonathan Watt <jwatt@jwatt.org>
  Jonathon Jongsma <jjongsma@redhat.com>
  Julio Faracco <jcfaracco@gmail.com>
  Justin Gatzen <justin.gatzen@gmail.com>
  Ján Tomko <jtomko@redhat.com>
  Kashyap Chamarthy <kchamart@redhat.com>
  Kevin Locke <kevin@kevinlocke.name>
  Kristina Hanicova <khanicov@redhat.com>
  Laine Stump <laine@redhat.com>
  Laszlo Ersek <lersek@redhat.com>
  Lee Yarwood <lyarwood@redhat.com>
  Liao Pingfang <liao.pingfang@zte.com.cn>
  Lin Ma <lma@suse.com>
  Lin Ma <lma@suse.de>
  Lin Ma <morecache@gmail.com>
  Liu Yiding <liuyd.fnst@fujitsu.com>
  Luke Yue <lukedyue@gmail.com>
  Luyao Zhong <luyao.zhong@intel.com>
  Marc Hartmayer <mhartmay@linux.ibm.com>
  Marc-André Lureau <marcandre.lureau@redhat.com>
  Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
  Markus Schade <markus.schade@hetzner.com>
  Martin Kletzander <mkletzan@redhat.com>
  Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
  Matej Cepl <mcepl@cepl.eu>
  Matt Coleman <matt@datto.com>
  Matt Coleman <mcoleman@datto.com>
  Mauro Matteo Cascella <mcascell@redhat.com>
  Meina Li <meili@redhat.com>
  Michal Privoznik <mprivozn@redhat.com>
  Michał Smyk <fedora@smyk.it>
  Milo Casagrande <milo@milo.name>
  Moshe Levi <moshele@nvidia.com>
  Muha Aliss <muhaaliss@gmail.com>
  Nathan <nathan95@live.it>
  Neal Gompa <ngompa13@gmail.com>
  Nick Shyrokovskiy <nshyrokovskiy@gmail.com>
  Nickys Music Group <nickys.music.group@gmail.com>
  Nico Pache <npache@redhat.com>
  Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
  Olaf Hering <olaf@aepfle.de>
  Olesya Gerasimenko <gammaray@basealt.ru>
  Orion Poplawski <orion@nwra.com>
  Pany <geekpany@gmail.com>
  Patrick Magauran <patmagauran.j@gmail.com>
  Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
  Pavel Hrdina <phrdina@redhat.com>
  Peng Liang <liangpeng10@huawei.com>
  Peter Krempa <pkrempa@redhat.com>
  Pino Toscano <ptoscano@redhat.com>
  Pino Toscano <toscano.pino@tiscali.it>
  Piotr Drąg <piotrdrag@gmail.com>
  Prathamesh Chavan <pc44800@gmail.com>
  Richard W.M. Jones <rjones@redhat.com>
  Ricky Tigg <ricky.tigg@gmail.com>
  Roman Bogorodskiy <bogorodskiy@gmail.com>
  Roman Bolshakov <r.bolshakov@yadro.com>
  Ryan Gahagan <rgahagan@cs.utexas.edu>
  Ryan Schmidt <git@ryandesign.com>
  Sam Hartman <hartmans@debian.org>
  Scott Shambarger <scott-libvirt@shambarger.net>
  Sebastian Mitterle <smitterl@redhat.com>
  SeongHyun Jo <caelus9536@gmail.com>
  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
  Shaojun Yang <yangshaojun@phytium.com.cn>
  Shi Lei <shi_lei@massclouds.com>
  simmon <simmon@nplob.com>
  Simon Chopin <chopin.simon@gmail.com>
  Simon Gaiser <simon@invisiblethingslab.com>
  Stefan Bader <stefan.bader@canonical.com>
  Stefan Berger <stefanb@linux.ibm.com>
  Stefan Berger <stefanb@linux.vnet.ibm.com>
  Stefan Hajnoczi <stefanha@gmail.com>
  Szymon Scholz <szymonscholz@gmail.com>
  Thomas Huth <thuth@redhat.com>
  Tim Wiederhake <twiederh@redhat.com>
  Tomáš Golembiovský <tgolembi@redhat.com>
  Tomáš Janoušek <tomi@nomi.cz>
  Tuguoyi <tu.guoyi@h3c.com>
  Ville Skyttä <ville.skytta@iki.fi>
  Vinayak Kale <vkale@nvidia.com>
  Wang Xin <wangxinxin.wang@huawei.com>
  WangJian <wangjian161@huawei.com>
  Weblate <noreply@weblate.org>
  Wei Liu <liuwe@microsoft.com>
  Wei Liu <wei.liu@kernel.org>
  William Douglas <william.douglas@intel.com>
  Yalei Li <274268859@qq.com>
  Yalei Li <liyl43@chinatelecom.cn>
  Yang Fei <yangfei85@huawei.com>
  Yang Hang <yanghang44@huawei.com>
  Yanqiu Zhang <yanqzhan@redhat.com>
  Yaroslav Kargin <ykargin@virtuozzo.com>
  Yi Li <yili@winhong.com>
  Yi Wang <wang.yi59@zte.com.cn>
  Yuri Chornoivan <yurchor@ukr.net>
  Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
  zhangjl02 <zhangjl02@inspur.com>
  Zheng Chuan <zhengchuan@huawei.com>
  zhenwei pi <pizhenwei@bytedance.com>
  Zhenyu Zheng <zheng.zhenyu@outlook.com>
  Zhenzhong Duan <zhenzhong.duan@intel.com>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          fail    
 build-arm64-libvirt                                          fail    
 build-armhf-libvirt                                          fail    
 build-i386-libvirt                                           fail    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            blocked 
 test-amd64-amd64-libvirt-xsm                                 blocked 
 test-arm64-arm64-libvirt-xsm                                 blocked 
 test-amd64-i386-libvirt-xsm                                  blocked 
 test-amd64-amd64-libvirt                                     blocked 
 test-arm64-arm64-libvirt                                     blocked 
 test-armhf-armhf-libvirt                                     blocked 
 test-amd64-i386-libvirt                                      blocked 
 test-amd64-amd64-libvirt-pair                                blocked 
 test-amd64-i386-libvirt-pair                                 blocked 
 test-arm64-arm64-libvirt-qcow2                               blocked 
 test-armhf-armhf-libvirt-raw                                 blocked 
 test-amd64-amd64-libvirt-vhd                                 blocked 


------------------------------------------------------------
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


Not pushing.

(No revision log; it would be 67218 lines long.)


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 17:11:40 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 17:11:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162789.298412 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9sWH-0007ZB-Go; Sat, 31 Jul 2021 17:11:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162789.298412; Sat, 31 Jul 2021 17:11:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9sWH-0007Z4-Ct; Sat, 31 Jul 2021 17:11:29 +0000
Received: by outflank-mailman (input) for mailman id 162789;
 Sat, 31 Jul 2021 17:11:27 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9sWF-0007Ya-Ol; Sat, 31 Jul 2021 17:11:27 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9sWF-0003xz-Ig; Sat, 31 Jul 2021 17:11:27 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9sWF-0001Ri-8k; Sat, 31 Jul 2021 17:11:27 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9sWF-0000wu-8E; Sat, 31 Jul 2021 17:11:27 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=EltKLScQVZ1nK4OnI0FSZZBke9AcP1SEJ3EdSrof++E=; b=BNgA5TSM+eDaCPm7nbLT1a7+pi
	7cgEGXXfVvx5csHtKdz7vrm6tDeNzPGw8X7hjGpKHYwRQlbAirQaiI6WJbckwZiTrhhCXLf7DDAhW
	AdS9vRWsZdZeQHe5mcyMnyUcNpNxVLf/26Az7zrrMHJqdhQGZJVSuncCLTtuwb0n5wYM=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164061-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [xen-unstable test] 164061: tolerable FAIL - PUSHED
X-Osstest-Failures:
    xen-unstable:test-amd64-amd64-examine:memdisk-try-append:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemuu-debianhvm-amd64:guest-start/debianhvm.repeat:fail:heisenbug
    xen-unstable:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    xen-unstable:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    xen-unstable:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    xen=e066ca5acc2ee3b5db5c005e1a548b05e753e07d
X-Osstest-Versions-That:
    xen=58ad654ebce7ccb272a3f4f3482c03aaad850d31
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 17:11:27 +0000

flight 164061 xen-unstable real [real]
flight 164066 xen-unstable real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164061/
http://logs.test-lab.xenproject.org/osstest/logs/164066/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-examine      4 memdisk-try-append  fail pass in 164066-retest
 test-amd64-amd64-xl-qemuu-debianhvm-amd64 20 guest-start/debianhvm.repeat fail pass in 164066-retest

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

version targeted for testing:
 xen                  e066ca5acc2ee3b5db5c005e1a548b05e753e07d
baseline version:
 xen                  58ad654ebce7ccb272a3f4f3482c03aaad850d31

Last test of basis   164049  2021-07-30 01:52:50 Z    1 days
Failing since        164055  2021-07-30 14:37:59 Z    1 days    2 attempts
Testing same since   164061  2021-07-31 04:04:50 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Jane Malalane <jane.malalane@citrix.com>
  Julien Grall <jgrall@amazon.com>

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-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-prev                                             pass    
 build-i386-prev                                              pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-xtf-amd64-amd64-1                                       pass    
 test-xtf-amd64-amd64-2                                       pass    
 test-xtf-amd64-amd64-3                                       pass    
 test-xtf-amd64-amd64-4                                       pass    
 test-xtf-amd64-amd64-5                                       pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    fail    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-livepatch                                   pass    
 test-amd64-i386-livepatch                                    pass    
 test-amd64-amd64-migrupgrade                                 pass    
 test-amd64-i386-migrupgrade                                  pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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/xen.git
   58ad654ebc..e066ca5acc  e066ca5acc2ee3b5db5c005e1a548b05e753e07d -> master


From xen-devel-bounces@lists.xenproject.org Sat Jul 31 22:12:46 2021
Return-path: <xen-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xen.org
Delivery-date: Sat, 31 Jul 2021 22:12:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.162801.298431 (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9xDb-0007qn-TF; Sat, 31 Jul 2021 22:12:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 162801.298431; Sat, 31 Jul 2021 22:12:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <xen-devel-bounces@lists.xenproject.org>)
	id 1m9xDb-0007qg-PW; Sat, 31 Jul 2021 22:12:31 +0000
Received: by outflank-mailman (input) for mailman id 162801;
 Sat, 31 Jul 2021 22:12:30 +0000
Received: from mail.xenproject.org ([104.130.215.37])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9xDa-0007qW-Ln; Sat, 31 Jul 2021 22:12:30 +0000
Received: from host146.205.237.98.conversent.net ([205.237.98.146]
 helo=infra.test-lab.xenproject.org)
 by mail.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9xDa-0008GW-ES; Sat, 31 Jul 2021 22:12:30 +0000
Received: from [172.16.148.1] (helo=osstest.test-lab.xenproject.org)
 by infra.test-lab.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <osstest-admin@xenproject.org>)
 id 1m9xDa-0006v4-2b; Sat, 31 Jul 2021 22:12:30 +0000
Received: from osstest by osstest.test-lab.xenproject.org with local (Exim
 4.92) (envelope-from <osstest-admin@xenproject.org>)
 id 1m9xDa-0002Rl-22; Sat, 31 Jul 2021 22:12:30 +0000
X-BeenThere: xen-devel@lists.xenproject.org
List-Id: Xen developer discussion <xen-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xenproject.org>
List-Help: <mailto:xen-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/xen-devel>,
 <mailto:xen-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: xen-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "Xen-devel" <xen-devel-bounces@lists.xenproject.org>
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
	d=xenproject.org; s=20200302mail; h=Date:From:Subject:MIME-Version:
	Content-Transfer-Encoding:Content-Type:Message-ID:To;
	bh=7Mh95d42N6sxwL+eQguXUKJqA005fDVSefd9RDQj0Yo=; b=WkZjVVRwLOuZPVKGOcSb0NSDqN
	BYmQzXI8BiMdap/nZDDW3PULa+mKbSywNtNO0ISGtdHQlMHaK0Bp0dycnnn6bn5H0ehCO8UGq2HlT
	wsLJdXl/CUDpChaH1WP4yJpWI55u9mNyhzpvAAn5UNpi94lOry1c7R5qVoo2Co8W+r44=;
To: xen-devel@lists.xenproject.org,
    osstest-admin@xenproject.org
Message-ID: <osstest-164064-mainreport@xen.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Subject: [linux-5.4 test] 164064: tolerable FAIL - PUSHED
X-Osstest-Failures:
    linux-5.4:test-amd64-amd64-xl-qemut-debianhvm-i386-xsm:debian-hvm-install:fail:heisenbug
    linux-5.4:test-amd64-amd64-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-amd64-qemuu-nested-amd:debian-hvm-install/l1/l2:fail:nonblocking
    linux-5.4:test-amd64-amd64-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-win7-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemut-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-qemuu-ws16-amd64:guest-stop:fail:nonblocking
    linux-5.4:test-amd64-i386-xl-pvshim:guest-start:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-seattle:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-thunderx:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-amd64-amd64-libvirt-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-multivcpu:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit2:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-credit1:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-rtds:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-cubietruck:saverestore-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:migrate-support-check:fail:nonblocking
    linux-5.4:test-arm64-arm64-libvirt-xsm:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-libvirt-raw:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-vhd:saverestore-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:migrate-support-check:fail:nonblocking
    linux-5.4:test-armhf-armhf-xl-arndale:saverestore-support-check:fail:nonblocking
X-Osstest-Versions-This:
    linux=5b1de8e15f0f3c4f91bf361c2bab5c2d9e7afad9
X-Osstest-Versions-That:
    linux=253dccefb5cb05c8a017150c34daf810776d914c
From: osstest service owner <osstest-admin@xenproject.org>
Date: Sat, 31 Jul 2021 22:12:30 +0000

flight 164064 linux-5.4 real [real]
flight 164067 linux-5.4 real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/164064/
http://logs.test-lab.xenproject.org/osstest/logs/164067/

Failures :-/ but no regressions.

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

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

version targeted for testing:
 linux                5b1de8e15f0f3c4f91bf361c2bab5c2d9e7afad9
baseline version:
 linux                253dccefb5cb05c8a017150c34daf810776d914c

Last test of basis   164030  2021-07-29 02:09:22 Z    2 days
Testing same since   164064  2021-07-31 06:41:06 Z    0 days    1 attempts

------------------------------------------------------------
People who touched revisions under test:
  Alexei Starovoitov <ast@kernel.org>
  Andrew Morton <akpm@linux-foundation.org>
  Arnd Bergmann <arnd@arndb.de>
  Christoph Hellwig <hch@lst.de>
  Cristian Marussi <cristian.marussi@arm.com>
  Darrick J. Wong <djwong@kernel.org>
  David S. Miller <davem@davemloft.net>
  Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
  Eric Dumazet <edumazet@google.com>
  Florian Fainelli <f.fainelli@gmail.com>
  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  Guenter Roeck <linux@roeck-us.net>
  Hyunchul Lee <hyc.lee@gmail.com>
  Jakub Kicinski <kuba@kernel.org>
  Jon Hunter <jonathanh@nvidia.com>
  Linus Torvalds <torvalds@linux-foundation.org>
  Linus Walleij <linus.walleij@linaro.org>
  Linux Kernel Functional Testing <lkft@linaro.org>
  Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
  Maxim Levitsky <mlevitsk@redhat.com>
  Miklos Szeredi <mszeredi@redhat.com>
  Paolo Bonzini <pbonzini@redhat.com>
  Paul Gortmaker <paul.gortmaker@windriver.com>
  Pavel Skripkin <paskripkin@gmail.com>
  Sasha Levin <sashal@kernel.org>
  Shuah Khan <skhan@linuxfoundation.org>
  Steve French <stfrench@microsoft.com>
  Sudeep Holla <sudeep.holla@arm.com>
  Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
  syzbot+b718ec84a87b7e73ade4@syzkaller.appspotmail.com
  Tejun Heo <tj@kernel.org>
  Vasily Averin <vvs@virtuozzo.com>
  Xin Long <lucien.xin@gmail.com>
  Yang Yingliang <yangyingliang@huawei.com>
  Yonghong Song <yhs@fb.com>
  Zubin Mithra <zsm@chromium.org>

jobs:
 build-amd64-xsm                                              pass    
 build-arm64-xsm                                              pass    
 build-i386-xsm                                               pass    
 build-amd64                                                  pass    
 build-arm64                                                  pass    
 build-armhf                                                  pass    
 build-i386                                                   pass    
 build-amd64-libvirt                                          pass    
 build-arm64-libvirt                                          pass    
 build-armhf-libvirt                                          pass    
 build-i386-libvirt                                           pass    
 build-amd64-pvops                                            pass    
 build-arm64-pvops                                            pass    
 build-armhf-pvops                                            pass    
 build-i386-pvops                                             pass    
 test-amd64-amd64-xl                                          pass    
 test-amd64-coresched-amd64-xl                                pass    
 test-arm64-arm64-xl                                          pass    
 test-armhf-armhf-xl                                          pass    
 test-amd64-i386-xl                                           pass    
 test-amd64-coresched-i386-xl                                 pass    
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm           pass    
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm            pass    
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm        pass    
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm         pass    
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm                 fail    
 test-amd64-i386-xl-qemut-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm                 pass    
 test-amd64-i386-xl-qemuu-debianhvm-i386-xsm                  pass    
 test-amd64-amd64-libvirt-xsm                                 pass    
 test-arm64-arm64-libvirt-xsm                                 pass    
 test-amd64-i386-libvirt-xsm                                  pass    
 test-amd64-amd64-xl-xsm                                      pass    
 test-arm64-arm64-xl-xsm                                      pass    
 test-amd64-i386-xl-xsm                                       pass    
 test-amd64-amd64-qemuu-nested-amd                            fail    
 test-amd64-amd64-xl-pvhv2-amd                                pass    
 test-amd64-i386-qemut-rhel6hvm-amd                           pass    
 test-amd64-i386-qemuu-rhel6hvm-amd                           pass    
 test-amd64-amd64-dom0pvh-xl-amd                              pass    
 test-amd64-amd64-xl-qemut-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemut-debianhvm-amd64                     pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64                    pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64                     pass    
 test-amd64-i386-freebsd10-amd64                              pass    
 test-amd64-amd64-qemuu-freebsd11-amd64                       pass    
 test-amd64-amd64-qemuu-freebsd12-amd64                       pass    
 test-amd64-amd64-xl-qemuu-ovmf-amd64                         pass    
 test-amd64-i386-xl-qemuu-ovmf-amd64                          pass    
 test-amd64-amd64-xl-qemut-win7-amd64                         fail    
 test-amd64-i386-xl-qemut-win7-amd64                          fail    
 test-amd64-amd64-xl-qemuu-win7-amd64                         fail    
 test-amd64-i386-xl-qemuu-win7-amd64                          fail    
 test-amd64-amd64-xl-qemut-ws16-amd64                         fail    
 test-amd64-i386-xl-qemut-ws16-amd64                          fail    
 test-amd64-amd64-xl-qemuu-ws16-amd64                         fail    
 test-amd64-i386-xl-qemuu-ws16-amd64                          fail    
 test-armhf-armhf-xl-arndale                                  pass    
 test-amd64-amd64-xl-credit1                                  pass    
 test-arm64-arm64-xl-credit1                                  pass    
 test-armhf-armhf-xl-credit1                                  pass    
 test-amd64-amd64-xl-credit2                                  pass    
 test-arm64-arm64-xl-credit2                                  pass    
 test-armhf-armhf-xl-credit2                                  pass    
 test-armhf-armhf-xl-cubietruck                               pass    
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict        pass    
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict         pass    
 test-amd64-amd64-examine                                     pass    
 test-arm64-arm64-examine                                     pass    
 test-armhf-armhf-examine                                     pass    
 test-amd64-i386-examine                                      pass    
 test-amd64-i386-freebsd10-i386                               pass    
 test-amd64-amd64-qemuu-nested-intel                          pass    
 test-amd64-amd64-xl-pvhv2-intel                              pass    
 test-amd64-i386-qemut-rhel6hvm-intel                         pass    
 test-amd64-i386-qemuu-rhel6hvm-intel                         pass    
 test-amd64-amd64-dom0pvh-xl-intel                            pass    
 test-amd64-amd64-libvirt                                     pass    
 test-armhf-armhf-libvirt                                     pass    
 test-amd64-i386-libvirt                                      pass    
 test-amd64-amd64-xl-multivcpu                                pass    
 test-armhf-armhf-xl-multivcpu                                pass    
 test-amd64-amd64-pair                                        pass    
 test-amd64-i386-pair                                         pass    
 test-amd64-amd64-libvirt-pair                                pass    
 test-amd64-i386-libvirt-pair                                 pass    
 test-amd64-amd64-amd64-pvgrub                                pass    
 test-amd64-amd64-i386-pvgrub                                 pass    
 test-amd64-amd64-xl-pvshim                                   pass    
 test-amd64-i386-xl-pvshim                                    fail    
 test-amd64-amd64-pygrub                                      pass    
 test-amd64-amd64-xl-qcow2                                    pass    
 test-armhf-armhf-libvirt-raw                                 pass    
 test-amd64-i386-xl-raw                                       pass    
 test-amd64-amd64-xl-rtds                                     pass    
 test-armhf-armhf-xl-rtds                                     pass    
 test-arm64-arm64-xl-seattle                                  pass    
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow             pass    
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow              pass    
 test-amd64-amd64-xl-shadow                                   pass    
 test-amd64-i386-xl-shadow                                    pass    
 test-arm64-arm64-xl-thunderx                                 pass    
 test-amd64-amd64-libvirt-vhd                                 pass    
 test-armhf-armhf-xl-vhd                                      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 :

hint: The 'hooks/update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-receive' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The 'hooks/post-update' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
To xenbits.xen.org:/home/xen/git/linux-pvops.git
   253dccefb5cb..5b1de8e15f0f  5b1de8e15f0f3c4f91bf361c2bab5c2d9e7afad9 -> tested/linux-5.4


